diff --git a/AUTHORS b/AUTHORS index 8b8105b1ad..b2a6b3fc45 100644 --- a/AUTHORS +++ b/AUTHORS @@ -928,6 +928,7 @@ Maxim Khitrov Maxime de Roucy Máximo Cuadros Ortiz Maxwell Krohn +Maya Rashish Mayank Kumar MediaMath, Inc Meir Fischer diff --git a/api/except.txt b/api/except.txt index a608d5783e..2a1287ce90 100644 --- a/api/except.txt +++ b/api/except.txt @@ -457,4 +457,5 @@ pkg syscall (freebsd-arm-cgo), type Stat_t struct, Nlink uint16 pkg syscall (freebsd-arm-cgo), type Stat_t struct, Rdev uint32 pkg syscall (freebsd-arm-cgo), type Statfs_t struct, Mntfromname [88]int8 pkg syscall (freebsd-arm-cgo), type Statfs_t struct, Mntonname [88]int8 -pkg text/scanner, const GoTokens = 1012 \ No newline at end of file +pkg text/scanner, const GoTokens = 1012 +pkg unicode, const Version = "10.0.0" diff --git a/api/next.txt b/api/next.txt index aaea62d70b..24c4daf1ad 100644 --- a/api/next.txt +++ b/api/next.txt @@ -1,3 +1,8042 @@ +pkg bytes, func ToValidUTF8([]uint8, []uint8) []uint8 +pkg crypto/ed25519, const PrivateKeySize = 64 +pkg crypto/ed25519, const PrivateKeySize ideal-int +pkg crypto/ed25519, const PublicKeySize = 32 +pkg crypto/ed25519, const PublicKeySize ideal-int +pkg crypto/ed25519, const SeedSize = 32 +pkg crypto/ed25519, const SeedSize ideal-int +pkg crypto/ed25519, const SignatureSize = 64 +pkg crypto/ed25519, const SignatureSize ideal-int +pkg crypto/ed25519, func GenerateKey(io.Reader) (PublicKey, PrivateKey, error) +pkg crypto/ed25519, func NewKeyFromSeed([]uint8) PrivateKey +pkg crypto/ed25519, func Sign(PrivateKey, []uint8) []uint8 +pkg crypto/ed25519, func Verify(PublicKey, []uint8, []uint8) bool +pkg crypto/ed25519, method (PrivateKey) Public() crypto.PublicKey +pkg crypto/ed25519, method (PrivateKey) Seed() []uint8 +pkg crypto/ed25519, method (PrivateKey) Sign(io.Reader, []uint8, crypto.SignerOpts) ([]uint8, error) +pkg crypto/ed25519, type PrivateKey []uint8 +pkg crypto/ed25519, type PublicKey []uint8 +pkg database/sql, method (*NullInt32) Scan(interface{}) error +pkg database/sql, method (*NullTime) Scan(interface{}) error +pkg database/sql, method (NullInt32) Value() (driver.Value, error) +pkg database/sql, method (NullTime) Value() (driver.Value, error) +pkg database/sql, type NullInt32 struct +pkg database/sql, type NullInt32 struct, Int32 int32 +pkg database/sql, type NullInt32 struct, Valid bool +pkg database/sql, type NullTime struct +pkg database/sql, type NullTime struct, Time time.Time +pkg database/sql, type NullTime struct, Valid bool +pkg debug/dwarf, method (*UnsupportedType) Common() *CommonType +pkg debug/dwarf, method (*UnsupportedType) Size() int64 +pkg debug/dwarf, method (*UnsupportedType) String() string +pkg debug/dwarf, type UnsupportedType struct +pkg debug/dwarf, type UnsupportedType struct, Tag Tag +pkg debug/dwarf, type UnsupportedType struct, embedded CommonType +pkg encoding/csv, method (*ParseError) Unwrap() error +pkg encoding/json, method (*MarshalerError) Unwrap() error +pkg errors, func As(error, interface{}) bool +pkg errors, func Caller(int) Frame +pkg errors, func Is(error, error) bool +pkg errors, func Opaque(error) error +pkg errors, func Unwrap(error) error +pkg errors, method (Frame) Format(Printer) +pkg errors, type Formatter interface { Error, FormatError } +pkg errors, type Formatter interface, Error() string +pkg errors, type Formatter interface, FormatError(Printer) error +pkg errors, type Frame struct +pkg errors, type Printer interface { Detail, Print, Printf } +pkg errors, type Printer interface, Detail() bool +pkg errors, type Printer interface, Print(...interface{}) +pkg errors, type Printer interface, Printf(string, ...interface{}) +pkg errors, type Wrapper interface { Unwrap } +pkg errors, type Wrapper interface, Unwrap() error +pkg go/constant, func Make(interface{}) Value +pkg go/constant, func Val(Value) interface{} +pkg go/token, func IsExported(string) bool +pkg go/token, func IsIdentifier(string) bool +pkg go/token, func IsKeyword(string) bool +pkg log, func Writer() io.Writer +pkg log/syslog (netbsd-arm64), const LOG_ALERT = 1 +pkg log/syslog (netbsd-arm64), const LOG_ALERT Priority +pkg log/syslog (netbsd-arm64), const LOG_AUTH = 32 +pkg log/syslog (netbsd-arm64), const LOG_AUTH Priority +pkg log/syslog (netbsd-arm64), const LOG_AUTHPRIV = 80 +pkg log/syslog (netbsd-arm64), const LOG_AUTHPRIV Priority +pkg log/syslog (netbsd-arm64), const LOG_CRIT = 2 +pkg log/syslog (netbsd-arm64), const LOG_CRIT Priority +pkg log/syslog (netbsd-arm64), const LOG_CRON = 72 +pkg log/syslog (netbsd-arm64), const LOG_CRON Priority +pkg log/syslog (netbsd-arm64), const LOG_DAEMON = 24 +pkg log/syslog (netbsd-arm64), const LOG_DAEMON Priority +pkg log/syslog (netbsd-arm64), const LOG_DEBUG = 7 +pkg log/syslog (netbsd-arm64), const LOG_DEBUG Priority +pkg log/syslog (netbsd-arm64), const LOG_EMERG = 0 +pkg log/syslog (netbsd-arm64), const LOG_EMERG Priority +pkg log/syslog (netbsd-arm64), const LOG_ERR = 3 +pkg log/syslog (netbsd-arm64), const LOG_ERR Priority +pkg log/syslog (netbsd-arm64), const LOG_FTP = 88 +pkg log/syslog (netbsd-arm64), const LOG_FTP Priority +pkg log/syslog (netbsd-arm64), const LOG_INFO = 6 +pkg log/syslog (netbsd-arm64), const LOG_INFO Priority +pkg log/syslog (netbsd-arm64), const LOG_KERN = 0 +pkg log/syslog (netbsd-arm64), const LOG_KERN Priority +pkg log/syslog (netbsd-arm64), const LOG_LOCAL0 = 128 +pkg log/syslog (netbsd-arm64), const LOG_LOCAL0 Priority +pkg log/syslog (netbsd-arm64), const LOG_LOCAL1 = 136 +pkg log/syslog (netbsd-arm64), const LOG_LOCAL1 Priority +pkg log/syslog (netbsd-arm64), const LOG_LOCAL2 = 144 +pkg log/syslog (netbsd-arm64), const LOG_LOCAL2 Priority +pkg log/syslog (netbsd-arm64), const LOG_LOCAL3 = 152 +pkg log/syslog (netbsd-arm64), const LOG_LOCAL3 Priority +pkg log/syslog (netbsd-arm64), const LOG_LOCAL4 = 160 +pkg log/syslog (netbsd-arm64), const LOG_LOCAL4 Priority +pkg log/syslog (netbsd-arm64), const LOG_LOCAL5 = 168 +pkg log/syslog (netbsd-arm64), const LOG_LOCAL5 Priority +pkg log/syslog (netbsd-arm64), const LOG_LOCAL6 = 176 +pkg log/syslog (netbsd-arm64), const LOG_LOCAL6 Priority +pkg log/syslog (netbsd-arm64), const LOG_LOCAL7 = 184 +pkg log/syslog (netbsd-arm64), const LOG_LOCAL7 Priority +pkg log/syslog (netbsd-arm64), const LOG_LPR = 48 +pkg log/syslog (netbsd-arm64), const LOG_LPR Priority +pkg log/syslog (netbsd-arm64), const LOG_MAIL = 16 +pkg log/syslog (netbsd-arm64), const LOG_MAIL Priority +pkg log/syslog (netbsd-arm64), const LOG_NEWS = 56 +pkg log/syslog (netbsd-arm64), const LOG_NEWS Priority +pkg log/syslog (netbsd-arm64), const LOG_NOTICE = 5 +pkg log/syslog (netbsd-arm64), const LOG_NOTICE Priority +pkg log/syslog (netbsd-arm64), const LOG_SYSLOG = 40 +pkg log/syslog (netbsd-arm64), const LOG_SYSLOG Priority +pkg log/syslog (netbsd-arm64), const LOG_USER = 8 +pkg log/syslog (netbsd-arm64), const LOG_USER Priority +pkg log/syslog (netbsd-arm64), const LOG_UUCP = 64 +pkg log/syslog (netbsd-arm64), const LOG_UUCP Priority +pkg log/syslog (netbsd-arm64), const LOG_WARNING = 4 +pkg log/syslog (netbsd-arm64), const LOG_WARNING Priority +pkg log/syslog (netbsd-arm64), func Dial(string, string, Priority, string) (*Writer, error) +pkg log/syslog (netbsd-arm64), func New(Priority, string) (*Writer, error) +pkg log/syslog (netbsd-arm64), func NewLogger(Priority, int) (*log.Logger, error) +pkg log/syslog (netbsd-arm64), method (*Writer) Alert(string) error +pkg log/syslog (netbsd-arm64), method (*Writer) Close() error +pkg log/syslog (netbsd-arm64), method (*Writer) Crit(string) error +pkg log/syslog (netbsd-arm64), method (*Writer) Debug(string) error +pkg log/syslog (netbsd-arm64), method (*Writer) Emerg(string) error +pkg log/syslog (netbsd-arm64), method (*Writer) Err(string) error +pkg log/syslog (netbsd-arm64), method (*Writer) Info(string) error +pkg log/syslog (netbsd-arm64), method (*Writer) Notice(string) error +pkg log/syslog (netbsd-arm64), method (*Writer) Warning(string) error +pkg log/syslog (netbsd-arm64), method (*Writer) Write([]uint8) (int, error) +pkg log/syslog (netbsd-arm64), type Priority int +pkg log/syslog (netbsd-arm64), type Writer struct +pkg log/syslog (netbsd-arm64-cgo), const LOG_ALERT = 1 +pkg log/syslog (netbsd-arm64-cgo), const LOG_ALERT Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_AUTH = 32 +pkg log/syslog (netbsd-arm64-cgo), const LOG_AUTH Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_AUTHPRIV = 80 +pkg log/syslog (netbsd-arm64-cgo), const LOG_AUTHPRIV Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_CRIT = 2 +pkg log/syslog (netbsd-arm64-cgo), const LOG_CRIT Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_CRON = 72 +pkg log/syslog (netbsd-arm64-cgo), const LOG_CRON Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_DAEMON = 24 +pkg log/syslog (netbsd-arm64-cgo), const LOG_DAEMON Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_DEBUG = 7 +pkg log/syslog (netbsd-arm64-cgo), const LOG_DEBUG Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_EMERG = 0 +pkg log/syslog (netbsd-arm64-cgo), const LOG_EMERG Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_ERR = 3 +pkg log/syslog (netbsd-arm64-cgo), const LOG_ERR Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_FTP = 88 +pkg log/syslog (netbsd-arm64-cgo), const LOG_FTP Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_INFO = 6 +pkg log/syslog (netbsd-arm64-cgo), const LOG_INFO Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_KERN = 0 +pkg log/syslog (netbsd-arm64-cgo), const LOG_KERN Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_LOCAL0 = 128 +pkg log/syslog (netbsd-arm64-cgo), const LOG_LOCAL0 Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_LOCAL1 = 136 +pkg log/syslog (netbsd-arm64-cgo), const LOG_LOCAL1 Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_LOCAL2 = 144 +pkg log/syslog (netbsd-arm64-cgo), const LOG_LOCAL2 Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_LOCAL3 = 152 +pkg log/syslog (netbsd-arm64-cgo), const LOG_LOCAL3 Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_LOCAL4 = 160 +pkg log/syslog (netbsd-arm64-cgo), const LOG_LOCAL4 Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_LOCAL5 = 168 +pkg log/syslog (netbsd-arm64-cgo), const LOG_LOCAL5 Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_LOCAL6 = 176 +pkg log/syslog (netbsd-arm64-cgo), const LOG_LOCAL6 Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_LOCAL7 = 184 +pkg log/syslog (netbsd-arm64-cgo), const LOG_LOCAL7 Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_LPR = 48 +pkg log/syslog (netbsd-arm64-cgo), const LOG_LPR Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_MAIL = 16 +pkg log/syslog (netbsd-arm64-cgo), const LOG_MAIL Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_NEWS = 56 +pkg log/syslog (netbsd-arm64-cgo), const LOG_NEWS Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_NOTICE = 5 +pkg log/syslog (netbsd-arm64-cgo), const LOG_NOTICE Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_SYSLOG = 40 +pkg log/syslog (netbsd-arm64-cgo), const LOG_SYSLOG Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_USER = 8 +pkg log/syslog (netbsd-arm64-cgo), const LOG_USER Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_UUCP = 64 +pkg log/syslog (netbsd-arm64-cgo), const LOG_UUCP Priority +pkg log/syslog (netbsd-arm64-cgo), const LOG_WARNING = 4 +pkg log/syslog (netbsd-arm64-cgo), const LOG_WARNING Priority +pkg log/syslog (netbsd-arm64-cgo), func Dial(string, string, Priority, string) (*Writer, error) +pkg log/syslog (netbsd-arm64-cgo), func New(Priority, string) (*Writer, error) +pkg log/syslog (netbsd-arm64-cgo), func NewLogger(Priority, int) (*log.Logger, error) +pkg log/syslog (netbsd-arm64-cgo), method (*Writer) Alert(string) error +pkg log/syslog (netbsd-arm64-cgo), method (*Writer) Close() error +pkg log/syslog (netbsd-arm64-cgo), method (*Writer) Crit(string) error +pkg log/syslog (netbsd-arm64-cgo), method (*Writer) Debug(string) error +pkg log/syslog (netbsd-arm64-cgo), method (*Writer) Emerg(string) error +pkg log/syslog (netbsd-arm64-cgo), method (*Writer) Err(string) error +pkg log/syslog (netbsd-arm64-cgo), method (*Writer) Info(string) error +pkg log/syslog (netbsd-arm64-cgo), method (*Writer) Notice(string) error +pkg log/syslog (netbsd-arm64-cgo), method (*Writer) Warning(string) error +pkg log/syslog (netbsd-arm64-cgo), method (*Writer) Write([]uint8) (int, error) +pkg log/syslog (netbsd-arm64-cgo), type Priority int +pkg log/syslog (netbsd-arm64-cgo), type Writer struct +pkg math/big, method (*Int) TrailingZeroBits() uint +pkg math/big, method (*Rat) SetUint64(uint64) *Rat +pkg net, method (*DNSConfigError) Unwrap() error +pkg net, method (*DNSError) Is(error) bool +pkg net, method (*OpError) Is(error) bool +pkg net, method (*OpError) Unwrap() error +pkg net, type DNSError struct, IsNotFound bool +pkg net, type ListenConfig struct, KeepAlive time.Duration +pkg net/http, const SameSiteNoneMode = 4 +pkg net/http, const SameSiteNoneMode SameSite +pkg net/http, const StatusEarlyHints = 103 +pkg net/http, const StatusEarlyHints ideal-int +pkg net/http, func NewRequestWithContext(context.Context, string, string, io.Reader) (*Request, error) +pkg net/http, method (*Request) Clone(context.Context) *Request +pkg net/http, method (*Transport) Clone() *Transport +pkg net/http, method (Header) Clone() Header +pkg net/http, type Server struct, BaseContext func(net.Listener) context.Context +pkg net/http, type Server struct, ConnContext func(context.Context, net.Conn) context.Context +pkg net/http, type Transport struct, ForceAttemptHTTP2 bool +pkg net/http, type Transport struct, ReadBufferSize int +pkg net/http, type Transport struct, WriteBufferSize int +pkg net/url, method (*Error) Unwrap() error +pkg os (netbsd-arm64), const DevNull = "/dev/null" +pkg os (netbsd-arm64), const O_APPEND = 8 +pkg os (netbsd-arm64), const O_CREATE = 512 +pkg os (netbsd-arm64), const O_EXCL = 2048 +pkg os (netbsd-arm64), const O_SYNC = 128 +pkg os (netbsd-arm64), const O_TRUNC = 1024 +pkg os (netbsd-arm64), const PathListSeparator = 58 +pkg os (netbsd-arm64), const PathSeparator = 47 +pkg os (netbsd-arm64-cgo), const DevNull = "/dev/null" +pkg os (netbsd-arm64-cgo), const O_APPEND = 8 +pkg os (netbsd-arm64-cgo), const O_CREATE = 512 +pkg os (netbsd-arm64-cgo), const O_EXCL = 2048 +pkg os (netbsd-arm64-cgo), const O_SYNC = 128 +pkg os (netbsd-arm64-cgo), const O_TRUNC = 1024 +pkg os (netbsd-arm64-cgo), const PathListSeparator = 58 +pkg os (netbsd-arm64-cgo), const PathSeparator = 47 +pkg os, func UserConfigDir() (string, error) +pkg os, method (*LinkError) Unwrap() error +pkg os, method (*PathError) Unwrap() error +pkg os, method (*SyscallError) Unwrap() error +pkg os, var ErrTemporary error +pkg os, var ErrTimeout error +pkg os/exec, method (*Cmd) String() string +pkg os/exec, method (*Error) Unwrap() error +pkg path/filepath (netbsd-arm64), const ListSeparator = 58 +pkg path/filepath (netbsd-arm64), const Separator = 47 +pkg path/filepath (netbsd-arm64-cgo), const ListSeparator = 58 +pkg path/filepath (netbsd-arm64-cgo), const Separator = 47 +pkg reflect, method (Value) IsZero() bool +pkg runtime (netbsd-arm64), const GOARCH = "arm64" +pkg runtime (netbsd-arm64), const GOOS = "netbsd" +pkg runtime (netbsd-arm64-cgo), const GOARCH = "arm64" +pkg runtime (netbsd-arm64-cgo), const GOOS = "netbsd" +pkg strings, func ToValidUTF8(string, string) string +pkg syscall (netbsd-arm64), const AF_APPLETALK = 16 +pkg syscall (netbsd-arm64), const AF_APPLETALK ideal-int +pkg syscall (netbsd-arm64), const AF_ARP = 28 +pkg syscall (netbsd-arm64), const AF_ARP ideal-int +pkg syscall (netbsd-arm64), const AF_BLUETOOTH = 31 +pkg syscall (netbsd-arm64), const AF_BLUETOOTH ideal-int +pkg syscall (netbsd-arm64), const AF_CCITT = 10 +pkg syscall (netbsd-arm64), const AF_CCITT ideal-int +pkg syscall (netbsd-arm64), const AF_CHAOS = 5 +pkg syscall (netbsd-arm64), const AF_CHAOS ideal-int +pkg syscall (netbsd-arm64), const AF_CNT = 21 +pkg syscall (netbsd-arm64), const AF_CNT ideal-int +pkg syscall (netbsd-arm64), const AF_COIP = 20 +pkg syscall (netbsd-arm64), const AF_COIP ideal-int +pkg syscall (netbsd-arm64), const AF_DATAKIT = 9 +pkg syscall (netbsd-arm64), const AF_DATAKIT ideal-int +pkg syscall (netbsd-arm64), const AF_DECnet = 12 +pkg syscall (netbsd-arm64), const AF_DECnet ideal-int +pkg syscall (netbsd-arm64), const AF_DLI = 13 +pkg syscall (netbsd-arm64), const AF_DLI ideal-int +pkg syscall (netbsd-arm64), const AF_E164 = 26 +pkg syscall (netbsd-arm64), const AF_E164 ideal-int +pkg syscall (netbsd-arm64), const AF_ECMA = 8 +pkg syscall (netbsd-arm64), const AF_ECMA ideal-int +pkg syscall (netbsd-arm64), const AF_HYLINK = 15 +pkg syscall (netbsd-arm64), const AF_HYLINK ideal-int +pkg syscall (netbsd-arm64), const AF_IEEE80211 = 32 +pkg syscall (netbsd-arm64), const AF_IEEE80211 ideal-int +pkg syscall (netbsd-arm64), const AF_IMPLINK = 3 +pkg syscall (netbsd-arm64), const AF_IMPLINK ideal-int +pkg syscall (netbsd-arm64), const AF_INET6 = 24 +pkg syscall (netbsd-arm64), const AF_IPX = 23 +pkg syscall (netbsd-arm64), const AF_IPX ideal-int +pkg syscall (netbsd-arm64), const AF_ISDN = 26 +pkg syscall (netbsd-arm64), const AF_ISDN ideal-int +pkg syscall (netbsd-arm64), const AF_ISO = 7 +pkg syscall (netbsd-arm64), const AF_ISO ideal-int +pkg syscall (netbsd-arm64), const AF_LAT = 14 +pkg syscall (netbsd-arm64), const AF_LAT ideal-int +pkg syscall (netbsd-arm64), const AF_LINK = 18 +pkg syscall (netbsd-arm64), const AF_LINK ideal-int +pkg syscall (netbsd-arm64), const AF_LOCAL = 1 +pkg syscall (netbsd-arm64), const AF_LOCAL ideal-int +pkg syscall (netbsd-arm64), const AF_MAX = 35 +pkg syscall (netbsd-arm64), const AF_MAX ideal-int +pkg syscall (netbsd-arm64), const AF_MPLS = 33 +pkg syscall (netbsd-arm64), const AF_MPLS ideal-int +pkg syscall (netbsd-arm64), const AF_NATM = 27 +pkg syscall (netbsd-arm64), const AF_NATM ideal-int +pkg syscall (netbsd-arm64), const AF_NS = 6 +pkg syscall (netbsd-arm64), const AF_NS ideal-int +pkg syscall (netbsd-arm64), const AF_OROUTE = 17 +pkg syscall (netbsd-arm64), const AF_OROUTE ideal-int +pkg syscall (netbsd-arm64), const AF_OSI = 7 +pkg syscall (netbsd-arm64), const AF_OSI ideal-int +pkg syscall (netbsd-arm64), const AF_PUP = 4 +pkg syscall (netbsd-arm64), const AF_PUP ideal-int +pkg syscall (netbsd-arm64), const AF_ROUTE = 34 +pkg syscall (netbsd-arm64), const AF_ROUTE ideal-int +pkg syscall (netbsd-arm64), const AF_SNA = 11 +pkg syscall (netbsd-arm64), const AF_SNA ideal-int +pkg syscall (netbsd-arm64), const ARPHRD_ARCNET = 7 +pkg syscall (netbsd-arm64), const ARPHRD_ARCNET ideal-int +pkg syscall (netbsd-arm64), const ARPHRD_ETHER = 1 +pkg syscall (netbsd-arm64), const ARPHRD_ETHER ideal-int +pkg syscall (netbsd-arm64), const ARPHRD_FRELAY = 15 +pkg syscall (netbsd-arm64), const ARPHRD_FRELAY ideal-int +pkg syscall (netbsd-arm64), const ARPHRD_IEEE1394 = 24 +pkg syscall (netbsd-arm64), const ARPHRD_IEEE1394 ideal-int +pkg syscall (netbsd-arm64), const ARPHRD_IEEE802 = 6 +pkg syscall (netbsd-arm64), const ARPHRD_IEEE802 ideal-int +pkg syscall (netbsd-arm64), const ARPHRD_STRIP = 23 +pkg syscall (netbsd-arm64), const ARPHRD_STRIP ideal-int +pkg syscall (netbsd-arm64), const B0 = 0 +pkg syscall (netbsd-arm64), const B0 ideal-int +pkg syscall (netbsd-arm64), const B110 = 110 +pkg syscall (netbsd-arm64), const B110 ideal-int +pkg syscall (netbsd-arm64), const B115200 = 115200 +pkg syscall (netbsd-arm64), const B115200 ideal-int +pkg syscall (netbsd-arm64), const B1200 = 1200 +pkg syscall (netbsd-arm64), const B1200 ideal-int +pkg syscall (netbsd-arm64), const B134 = 134 +pkg syscall (netbsd-arm64), const B134 ideal-int +pkg syscall (netbsd-arm64), const B14400 = 14400 +pkg syscall (netbsd-arm64), const B14400 ideal-int +pkg syscall (netbsd-arm64), const B150 = 150 +pkg syscall (netbsd-arm64), const B150 ideal-int +pkg syscall (netbsd-arm64), const B1800 = 1800 +pkg syscall (netbsd-arm64), const B1800 ideal-int +pkg syscall (netbsd-arm64), const B19200 = 19200 +pkg syscall (netbsd-arm64), const B19200 ideal-int +pkg syscall (netbsd-arm64), const B200 = 200 +pkg syscall (netbsd-arm64), const B200 ideal-int +pkg syscall (netbsd-arm64), const B230400 = 230400 +pkg syscall (netbsd-arm64), const B230400 ideal-int +pkg syscall (netbsd-arm64), const B2400 = 2400 +pkg syscall (netbsd-arm64), const B2400 ideal-int +pkg syscall (netbsd-arm64), const B28800 = 28800 +pkg syscall (netbsd-arm64), const B28800 ideal-int +pkg syscall (netbsd-arm64), const B300 = 300 +pkg syscall (netbsd-arm64), const B300 ideal-int +pkg syscall (netbsd-arm64), const B38400 = 38400 +pkg syscall (netbsd-arm64), const B38400 ideal-int +pkg syscall (netbsd-arm64), const B460800 = 460800 +pkg syscall (netbsd-arm64), const B460800 ideal-int +pkg syscall (netbsd-arm64), const B4800 = 4800 +pkg syscall (netbsd-arm64), const B4800 ideal-int +pkg syscall (netbsd-arm64), const B50 = 50 +pkg syscall (netbsd-arm64), const B50 ideal-int +pkg syscall (netbsd-arm64), const B57600 = 57600 +pkg syscall (netbsd-arm64), const B57600 ideal-int +pkg syscall (netbsd-arm64), const B600 = 600 +pkg syscall (netbsd-arm64), const B600 ideal-int +pkg syscall (netbsd-arm64), const B7200 = 7200 +pkg syscall (netbsd-arm64), const B7200 ideal-int +pkg syscall (netbsd-arm64), const B75 = 75 +pkg syscall (netbsd-arm64), const B75 ideal-int +pkg syscall (netbsd-arm64), const B76800 = 76800 +pkg syscall (netbsd-arm64), const B76800 ideal-int +pkg syscall (netbsd-arm64), const B921600 = 921600 +pkg syscall (netbsd-arm64), const B921600 ideal-int +pkg syscall (netbsd-arm64), const B9600 = 9600 +pkg syscall (netbsd-arm64), const B9600 ideal-int +pkg syscall (netbsd-arm64), const BIOCFEEDBACK = 2147762813 +pkg syscall (netbsd-arm64), const BIOCFEEDBACK ideal-int +pkg syscall (netbsd-arm64), const BIOCFLUSH = 536887912 +pkg syscall (netbsd-arm64), const BIOCFLUSH ideal-int +pkg syscall (netbsd-arm64), const BIOCGBLEN = 1074020966 +pkg syscall (netbsd-arm64), const BIOCGBLEN ideal-int +pkg syscall (netbsd-arm64), const BIOCGDLT = 1074020970 +pkg syscall (netbsd-arm64), const BIOCGDLT ideal-int +pkg syscall (netbsd-arm64), const BIOCGDLTLIST = 3222291063 +pkg syscall (netbsd-arm64), const BIOCGDLTLIST ideal-int +pkg syscall (netbsd-arm64), const BIOCGETIF = 1083196011 +pkg syscall (netbsd-arm64), const BIOCGETIF ideal-int +pkg syscall (netbsd-arm64), const BIOCGFEEDBACK = 1074020988 +pkg syscall (netbsd-arm64), const BIOCGFEEDBACK ideal-int +pkg syscall (netbsd-arm64), const BIOCGHDRCMPLT = 1074020980 +pkg syscall (netbsd-arm64), const BIOCGHDRCMPLT ideal-int +pkg syscall (netbsd-arm64), const BIOCGRTIMEOUT = 1074807419 +pkg syscall (netbsd-arm64), const BIOCGRTIMEOUT ideal-int +pkg syscall (netbsd-arm64), const BIOCGSEESENT = 1074020984 +pkg syscall (netbsd-arm64), const BIOCGSEESENT ideal-int +pkg syscall (netbsd-arm64), const BIOCGSTATS = 1082147439 +pkg syscall (netbsd-arm64), const BIOCGSTATS ideal-int +pkg syscall (netbsd-arm64), const BIOCGSTATSOLD = 1074283119 +pkg syscall (netbsd-arm64), const BIOCGSTATSOLD ideal-int +pkg syscall (netbsd-arm64), const BIOCIMMEDIATE = 2147762800 +pkg syscall (netbsd-arm64), const BIOCIMMEDIATE ideal-int +pkg syscall (netbsd-arm64), const BIOCPROMISC = 536887913 +pkg syscall (netbsd-arm64), const BIOCPROMISC ideal-int +pkg syscall (netbsd-arm64), const BIOCSBLEN = 3221504614 +pkg syscall (netbsd-arm64), const BIOCSBLEN ideal-int +pkg syscall (netbsd-arm64), const BIOCSDLT = 2147762806 +pkg syscall (netbsd-arm64), const BIOCSDLT ideal-int +pkg syscall (netbsd-arm64), const BIOCSETF = 2148549223 +pkg syscall (netbsd-arm64), const BIOCSETF ideal-int +pkg syscall (netbsd-arm64), const BIOCSETIF = 2156937836 +pkg syscall (netbsd-arm64), const BIOCSETIF ideal-int +pkg syscall (netbsd-arm64), const BIOCSFEEDBACK = 2147762813 +pkg syscall (netbsd-arm64), const BIOCSFEEDBACK ideal-int +pkg syscall (netbsd-arm64), const BIOCSHDRCMPLT = 2147762805 +pkg syscall (netbsd-arm64), const BIOCSHDRCMPLT ideal-int +pkg syscall (netbsd-arm64), const BIOCSRTIMEOUT = 2148549242 +pkg syscall (netbsd-arm64), const BIOCSRTIMEOUT ideal-int +pkg syscall (netbsd-arm64), const BIOCSSEESENT = 2147762809 +pkg syscall (netbsd-arm64), const BIOCSSEESENT ideal-int +pkg syscall (netbsd-arm64), const BIOCSTCPF = 2148549234 +pkg syscall (netbsd-arm64), const BIOCSTCPF ideal-int +pkg syscall (netbsd-arm64), const BIOCSUDPF = 2148549235 +pkg syscall (netbsd-arm64), const BIOCSUDPF ideal-int +pkg syscall (netbsd-arm64), const BIOCVERSION = 1074020977 +pkg syscall (netbsd-arm64), const BIOCVERSION ideal-int +pkg syscall (netbsd-arm64), const BPF_A = 16 +pkg syscall (netbsd-arm64), const BPF_A ideal-int +pkg syscall (netbsd-arm64), const BPF_ABS = 32 +pkg syscall (netbsd-arm64), const BPF_ABS ideal-int +pkg syscall (netbsd-arm64), const BPF_ADD = 0 +pkg syscall (netbsd-arm64), const BPF_ADD ideal-int +pkg syscall (netbsd-arm64), const BPF_ALIGNMENT = 8 +pkg syscall (netbsd-arm64), const BPF_ALIGNMENT ideal-int +pkg syscall (netbsd-arm64), const BPF_ALIGNMENT32 = 4 +pkg syscall (netbsd-arm64), const BPF_ALIGNMENT32 ideal-int +pkg syscall (netbsd-arm64), const BPF_ALU = 4 +pkg syscall (netbsd-arm64), const BPF_ALU ideal-int +pkg syscall (netbsd-arm64), const BPF_AND = 80 +pkg syscall (netbsd-arm64), const BPF_AND ideal-int +pkg syscall (netbsd-arm64), const BPF_B = 16 +pkg syscall (netbsd-arm64), const BPF_B ideal-int +pkg syscall (netbsd-arm64), const BPF_DFLTBUFSIZE = 1048576 +pkg syscall (netbsd-arm64), const BPF_DFLTBUFSIZE ideal-int +pkg syscall (netbsd-arm64), const BPF_DIV = 48 +pkg syscall (netbsd-arm64), const BPF_DIV ideal-int +pkg syscall (netbsd-arm64), const BPF_H = 8 +pkg syscall (netbsd-arm64), const BPF_H ideal-int +pkg syscall (netbsd-arm64), const BPF_IMM = 0 +pkg syscall (netbsd-arm64), const BPF_IMM ideal-int +pkg syscall (netbsd-arm64), const BPF_IND = 64 +pkg syscall (netbsd-arm64), const BPF_IND ideal-int +pkg syscall (netbsd-arm64), const BPF_JA = 0 +pkg syscall (netbsd-arm64), const BPF_JA ideal-int +pkg syscall (netbsd-arm64), const BPF_JEQ = 16 +pkg syscall (netbsd-arm64), const BPF_JEQ ideal-int +pkg syscall (netbsd-arm64), const BPF_JGE = 48 +pkg syscall (netbsd-arm64), const BPF_JGE ideal-int +pkg syscall (netbsd-arm64), const BPF_JGT = 32 +pkg syscall (netbsd-arm64), const BPF_JGT ideal-int +pkg syscall (netbsd-arm64), const BPF_JMP = 5 +pkg syscall (netbsd-arm64), const BPF_JMP ideal-int +pkg syscall (netbsd-arm64), const BPF_JSET = 64 +pkg syscall (netbsd-arm64), const BPF_JSET ideal-int +pkg syscall (netbsd-arm64), const BPF_K = 0 +pkg syscall (netbsd-arm64), const BPF_K ideal-int +pkg syscall (netbsd-arm64), const BPF_LD = 0 +pkg syscall (netbsd-arm64), const BPF_LD ideal-int +pkg syscall (netbsd-arm64), const BPF_LDX = 1 +pkg syscall (netbsd-arm64), const BPF_LDX ideal-int +pkg syscall (netbsd-arm64), const BPF_LEN = 128 +pkg syscall (netbsd-arm64), const BPF_LEN ideal-int +pkg syscall (netbsd-arm64), const BPF_LSH = 96 +pkg syscall (netbsd-arm64), const BPF_LSH ideal-int +pkg syscall (netbsd-arm64), const BPF_MAJOR_VERSION = 1 +pkg syscall (netbsd-arm64), const BPF_MAJOR_VERSION ideal-int +pkg syscall (netbsd-arm64), const BPF_MAXBUFSIZE = 16777216 +pkg syscall (netbsd-arm64), const BPF_MAXBUFSIZE ideal-int +pkg syscall (netbsd-arm64), const BPF_MAXINSNS = 512 +pkg syscall (netbsd-arm64), const BPF_MAXINSNS ideal-int +pkg syscall (netbsd-arm64), const BPF_MEM = 96 +pkg syscall (netbsd-arm64), const BPF_MEM ideal-int +pkg syscall (netbsd-arm64), const BPF_MEMWORDS = 16 +pkg syscall (netbsd-arm64), const BPF_MEMWORDS ideal-int +pkg syscall (netbsd-arm64), const BPF_MINBUFSIZE = 32 +pkg syscall (netbsd-arm64), const BPF_MINBUFSIZE ideal-int +pkg syscall (netbsd-arm64), const BPF_MINOR_VERSION = 1 +pkg syscall (netbsd-arm64), const BPF_MINOR_VERSION ideal-int +pkg syscall (netbsd-arm64), const BPF_MISC = 7 +pkg syscall (netbsd-arm64), const BPF_MISC ideal-int +pkg syscall (netbsd-arm64), const BPF_MSH = 160 +pkg syscall (netbsd-arm64), const BPF_MSH ideal-int +pkg syscall (netbsd-arm64), const BPF_MUL = 32 +pkg syscall (netbsd-arm64), const BPF_MUL ideal-int +pkg syscall (netbsd-arm64), const BPF_NEG = 128 +pkg syscall (netbsd-arm64), const BPF_NEG ideal-int +pkg syscall (netbsd-arm64), const BPF_OR = 64 +pkg syscall (netbsd-arm64), const BPF_OR ideal-int +pkg syscall (netbsd-arm64), const BPF_RELEASE = 199606 +pkg syscall (netbsd-arm64), const BPF_RELEASE ideal-int +pkg syscall (netbsd-arm64), const BPF_RET = 6 +pkg syscall (netbsd-arm64), const BPF_RET ideal-int +pkg syscall (netbsd-arm64), const BPF_RSH = 112 +pkg syscall (netbsd-arm64), const BPF_RSH ideal-int +pkg syscall (netbsd-arm64), const BPF_ST = 2 +pkg syscall (netbsd-arm64), const BPF_ST ideal-int +pkg syscall (netbsd-arm64), const BPF_STX = 3 +pkg syscall (netbsd-arm64), const BPF_STX ideal-int +pkg syscall (netbsd-arm64), const BPF_SUB = 16 +pkg syscall (netbsd-arm64), const BPF_SUB ideal-int +pkg syscall (netbsd-arm64), const BPF_TAX = 0 +pkg syscall (netbsd-arm64), const BPF_TAX ideal-int +pkg syscall (netbsd-arm64), const BPF_TXA = 128 +pkg syscall (netbsd-arm64), const BPF_TXA ideal-int +pkg syscall (netbsd-arm64), const BPF_W = 0 +pkg syscall (netbsd-arm64), const BPF_W ideal-int +pkg syscall (netbsd-arm64), const BPF_X = 8 +pkg syscall (netbsd-arm64), const BPF_X ideal-int +pkg syscall (netbsd-arm64), const BRKINT = 2 +pkg syscall (netbsd-arm64), const BRKINT ideal-int +pkg syscall (netbsd-arm64), const CFLUSH = 15 +pkg syscall (netbsd-arm64), const CFLUSH ideal-int +pkg syscall (netbsd-arm64), const CLOCAL = 32768 +pkg syscall (netbsd-arm64), const CLOCAL ideal-int +pkg syscall (netbsd-arm64), const CLONE_CSIGNAL = 255 +pkg syscall (netbsd-arm64), const CLONE_CSIGNAL ideal-int +pkg syscall (netbsd-arm64), const CLONE_FILES = 1024 +pkg syscall (netbsd-arm64), const CLONE_FILES ideal-int +pkg syscall (netbsd-arm64), const CLONE_FS = 512 +pkg syscall (netbsd-arm64), const CLONE_FS ideal-int +pkg syscall (netbsd-arm64), const CLONE_PID = 4096 +pkg syscall (netbsd-arm64), const CLONE_PID ideal-int +pkg syscall (netbsd-arm64), const CLONE_PTRACE = 8192 +pkg syscall (netbsd-arm64), const CLONE_PTRACE ideal-int +pkg syscall (netbsd-arm64), const CLONE_SIGHAND = 2048 +pkg syscall (netbsd-arm64), const CLONE_SIGHAND ideal-int +pkg syscall (netbsd-arm64), const CLONE_VFORK = 16384 +pkg syscall (netbsd-arm64), const CLONE_VFORK ideal-int +pkg syscall (netbsd-arm64), const CLONE_VM = 256 +pkg syscall (netbsd-arm64), const CLONE_VM ideal-int +pkg syscall (netbsd-arm64), const CREAD = 2048 +pkg syscall (netbsd-arm64), const CREAD ideal-int +pkg syscall (netbsd-arm64), const CS5 = 0 +pkg syscall (netbsd-arm64), const CS5 ideal-int +pkg syscall (netbsd-arm64), const CS6 = 256 +pkg syscall (netbsd-arm64), const CS6 ideal-int +pkg syscall (netbsd-arm64), const CS7 = 512 +pkg syscall (netbsd-arm64), const CS7 ideal-int +pkg syscall (netbsd-arm64), const CS8 = 768 +pkg syscall (netbsd-arm64), const CS8 ideal-int +pkg syscall (netbsd-arm64), const CSIZE = 768 +pkg syscall (netbsd-arm64), const CSIZE ideal-int +pkg syscall (netbsd-arm64), const CSTART = 17 +pkg syscall (netbsd-arm64), const CSTART ideal-int +pkg syscall (netbsd-arm64), const CSTATUS = 20 +pkg syscall (netbsd-arm64), const CSTATUS ideal-int +pkg syscall (netbsd-arm64), const CSTOP = 19 +pkg syscall (netbsd-arm64), const CSTOP ideal-int +pkg syscall (netbsd-arm64), const CSTOPB = 1024 +pkg syscall (netbsd-arm64), const CSTOPB ideal-int +pkg syscall (netbsd-arm64), const CSUSP = 26 +pkg syscall (netbsd-arm64), const CSUSP ideal-int +pkg syscall (netbsd-arm64), const CTL_MAXNAME = 12 +pkg syscall (netbsd-arm64), const CTL_MAXNAME ideal-int +pkg syscall (netbsd-arm64), const CTL_NET = 4 +pkg syscall (netbsd-arm64), const CTL_NET ideal-int +pkg syscall (netbsd-arm64), const CTL_QUERY = -2 +pkg syscall (netbsd-arm64), const CTL_QUERY ideal-int +pkg syscall (netbsd-arm64), const DIOCBSFLUSH = 536896632 +pkg syscall (netbsd-arm64), const DIOCBSFLUSH ideal-int +pkg syscall (netbsd-arm64), const DLT_A429 = 184 +pkg syscall (netbsd-arm64), const DLT_A429 ideal-int +pkg syscall (netbsd-arm64), const DLT_A653_ICM = 185 +pkg syscall (netbsd-arm64), const DLT_A653_ICM ideal-int +pkg syscall (netbsd-arm64), const DLT_AIRONET_HEADER = 120 +pkg syscall (netbsd-arm64), const DLT_AIRONET_HEADER ideal-int +pkg syscall (netbsd-arm64), const DLT_AOS = 222 +pkg syscall (netbsd-arm64), const DLT_AOS ideal-int +pkg syscall (netbsd-arm64), const DLT_APPLE_IP_OVER_IEEE1394 = 138 +pkg syscall (netbsd-arm64), const DLT_APPLE_IP_OVER_IEEE1394 ideal-int +pkg syscall (netbsd-arm64), const DLT_ARCNET = 7 +pkg syscall (netbsd-arm64), const DLT_ARCNET ideal-int +pkg syscall (netbsd-arm64), const DLT_ARCNET_LINUX = 129 +pkg syscall (netbsd-arm64), const DLT_ARCNET_LINUX ideal-int +pkg syscall (netbsd-arm64), const DLT_ATM_CLIP = 19 +pkg syscall (netbsd-arm64), const DLT_ATM_CLIP ideal-int +pkg syscall (netbsd-arm64), const DLT_ATM_RFC1483 = 11 +pkg syscall (netbsd-arm64), const DLT_ATM_RFC1483 ideal-int +pkg syscall (netbsd-arm64), const DLT_AURORA = 126 +pkg syscall (netbsd-arm64), const DLT_AURORA ideal-int +pkg syscall (netbsd-arm64), const DLT_AX25 = 3 +pkg syscall (netbsd-arm64), const DLT_AX25 ideal-int +pkg syscall (netbsd-arm64), const DLT_AX25_KISS = 202 +pkg syscall (netbsd-arm64), const DLT_AX25_KISS ideal-int +pkg syscall (netbsd-arm64), const DLT_BACNET_MS_TP = 165 +pkg syscall (netbsd-arm64), const DLT_BACNET_MS_TP ideal-int +pkg syscall (netbsd-arm64), const DLT_BLUETOOTH_HCI_H4 = 187 +pkg syscall (netbsd-arm64), const DLT_BLUETOOTH_HCI_H4 ideal-int +pkg syscall (netbsd-arm64), const DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 201 +pkg syscall (netbsd-arm64), const DLT_BLUETOOTH_HCI_H4_WITH_PHDR ideal-int +pkg syscall (netbsd-arm64), const DLT_CAN20B = 190 +pkg syscall (netbsd-arm64), const DLT_CAN20B ideal-int +pkg syscall (netbsd-arm64), const DLT_CAN_SOCKETCAN = 227 +pkg syscall (netbsd-arm64), const DLT_CAN_SOCKETCAN ideal-int +pkg syscall (netbsd-arm64), const DLT_CHAOS = 5 +pkg syscall (netbsd-arm64), const DLT_CHAOS ideal-int +pkg syscall (netbsd-arm64), const DLT_CISCO_IOS = 118 +pkg syscall (netbsd-arm64), const DLT_CISCO_IOS ideal-int +pkg syscall (netbsd-arm64), const DLT_C_HDLC = 104 +pkg syscall (netbsd-arm64), const DLT_C_HDLC ideal-int +pkg syscall (netbsd-arm64), const DLT_C_HDLC_WITH_DIR = 205 +pkg syscall (netbsd-arm64), const DLT_C_HDLC_WITH_DIR ideal-int +pkg syscall (netbsd-arm64), const DLT_DECT = 221 +pkg syscall (netbsd-arm64), const DLT_DECT ideal-int +pkg syscall (netbsd-arm64), const DLT_DOCSIS = 143 +pkg syscall (netbsd-arm64), const DLT_DOCSIS ideal-int +pkg syscall (netbsd-arm64), const DLT_ECONET = 115 +pkg syscall (netbsd-arm64), const DLT_ECONET ideal-int +pkg syscall (netbsd-arm64), const DLT_EN10MB = 1 +pkg syscall (netbsd-arm64), const DLT_EN10MB ideal-int +pkg syscall (netbsd-arm64), const DLT_EN3MB = 2 +pkg syscall (netbsd-arm64), const DLT_EN3MB ideal-int +pkg syscall (netbsd-arm64), const DLT_ENC = 109 +pkg syscall (netbsd-arm64), const DLT_ENC ideal-int +pkg syscall (netbsd-arm64), const DLT_ERF = 197 +pkg syscall (netbsd-arm64), const DLT_ERF ideal-int +pkg syscall (netbsd-arm64), const DLT_ERF_ETH = 175 +pkg syscall (netbsd-arm64), const DLT_ERF_ETH ideal-int +pkg syscall (netbsd-arm64), const DLT_ERF_POS = 176 +pkg syscall (netbsd-arm64), const DLT_ERF_POS ideal-int +pkg syscall (netbsd-arm64), const DLT_FC_2 = 224 +pkg syscall (netbsd-arm64), const DLT_FC_2 ideal-int +pkg syscall (netbsd-arm64), const DLT_FC_2_WITH_FRAME_DELIMS = 225 +pkg syscall (netbsd-arm64), const DLT_FC_2_WITH_FRAME_DELIMS ideal-int +pkg syscall (netbsd-arm64), const DLT_FDDI = 10 +pkg syscall (netbsd-arm64), const DLT_FDDI ideal-int +pkg syscall (netbsd-arm64), const DLT_FLEXRAY = 210 +pkg syscall (netbsd-arm64), const DLT_FLEXRAY ideal-int +pkg syscall (netbsd-arm64), const DLT_FRELAY = 107 +pkg syscall (netbsd-arm64), const DLT_FRELAY ideal-int +pkg syscall (netbsd-arm64), const DLT_FRELAY_WITH_DIR = 206 +pkg syscall (netbsd-arm64), const DLT_FRELAY_WITH_DIR ideal-int +pkg syscall (netbsd-arm64), const DLT_GCOM_SERIAL = 173 +pkg syscall (netbsd-arm64), const DLT_GCOM_SERIAL ideal-int +pkg syscall (netbsd-arm64), const DLT_GCOM_T1E1 = 172 +pkg syscall (netbsd-arm64), const DLT_GCOM_T1E1 ideal-int +pkg syscall (netbsd-arm64), const DLT_GPF_F = 171 +pkg syscall (netbsd-arm64), const DLT_GPF_F ideal-int +pkg syscall (netbsd-arm64), const DLT_GPF_T = 170 +pkg syscall (netbsd-arm64), const DLT_GPF_T ideal-int +pkg syscall (netbsd-arm64), const DLT_GPRS_LLC = 169 +pkg syscall (netbsd-arm64), const DLT_GPRS_LLC ideal-int +pkg syscall (netbsd-arm64), const DLT_GSMTAP_ABIS = 218 +pkg syscall (netbsd-arm64), const DLT_GSMTAP_ABIS ideal-int +pkg syscall (netbsd-arm64), const DLT_GSMTAP_UM = 217 +pkg syscall (netbsd-arm64), const DLT_GSMTAP_UM ideal-int +pkg syscall (netbsd-arm64), const DLT_HDLC = 16 +pkg syscall (netbsd-arm64), const DLT_HDLC ideal-int +pkg syscall (netbsd-arm64), const DLT_HHDLC = 121 +pkg syscall (netbsd-arm64), const DLT_HHDLC ideal-int +pkg syscall (netbsd-arm64), const DLT_HIPPI = 15 +pkg syscall (netbsd-arm64), const DLT_HIPPI ideal-int +pkg syscall (netbsd-arm64), const DLT_IBM_SN = 146 +pkg syscall (netbsd-arm64), const DLT_IBM_SN ideal-int +pkg syscall (netbsd-arm64), const DLT_IBM_SP = 145 +pkg syscall (netbsd-arm64), const DLT_IBM_SP ideal-int +pkg syscall (netbsd-arm64), const DLT_IEEE802 = 6 +pkg syscall (netbsd-arm64), const DLT_IEEE802 ideal-int +pkg syscall (netbsd-arm64), const DLT_IEEE802_11 = 105 +pkg syscall (netbsd-arm64), const DLT_IEEE802_11 ideal-int +pkg syscall (netbsd-arm64), const DLT_IEEE802_11_RADIO = 127 +pkg syscall (netbsd-arm64), const DLT_IEEE802_11_RADIO ideal-int +pkg syscall (netbsd-arm64), const DLT_IEEE802_11_RADIO_AVS = 163 +pkg syscall (netbsd-arm64), const DLT_IEEE802_11_RADIO_AVS ideal-int +pkg syscall (netbsd-arm64), const DLT_IEEE802_15_4 = 195 +pkg syscall (netbsd-arm64), const DLT_IEEE802_15_4 ideal-int +pkg syscall (netbsd-arm64), const DLT_IEEE802_15_4_LINUX = 191 +pkg syscall (netbsd-arm64), const DLT_IEEE802_15_4_LINUX ideal-int +pkg syscall (netbsd-arm64), const DLT_IEEE802_15_4_NONASK_PHY = 215 +pkg syscall (netbsd-arm64), const DLT_IEEE802_15_4_NONASK_PHY ideal-int +pkg syscall (netbsd-arm64), const DLT_IEEE802_16_MAC_CPS = 188 +pkg syscall (netbsd-arm64), const DLT_IEEE802_16_MAC_CPS ideal-int +pkg syscall (netbsd-arm64), const DLT_IEEE802_16_MAC_CPS_RADIO = 193 +pkg syscall (netbsd-arm64), const DLT_IEEE802_16_MAC_CPS_RADIO ideal-int +pkg syscall (netbsd-arm64), const DLT_IPMB = 199 +pkg syscall (netbsd-arm64), const DLT_IPMB ideal-int +pkg syscall (netbsd-arm64), const DLT_IPMB_LINUX = 209 +pkg syscall (netbsd-arm64), const DLT_IPMB_LINUX ideal-int +pkg syscall (netbsd-arm64), const DLT_IPNET = 226 +pkg syscall (netbsd-arm64), const DLT_IPNET ideal-int +pkg syscall (netbsd-arm64), const DLT_IPV4 = 228 +pkg syscall (netbsd-arm64), const DLT_IPV4 ideal-int +pkg syscall (netbsd-arm64), const DLT_IPV6 = 229 +pkg syscall (netbsd-arm64), const DLT_IPV6 ideal-int +pkg syscall (netbsd-arm64), const DLT_IP_OVER_FC = 122 +pkg syscall (netbsd-arm64), const DLT_IP_OVER_FC ideal-int +pkg syscall (netbsd-arm64), const DLT_JUNIPER_ATM1 = 137 +pkg syscall (netbsd-arm64), const DLT_JUNIPER_ATM1 ideal-int +pkg syscall (netbsd-arm64), const DLT_JUNIPER_ATM2 = 135 +pkg syscall (netbsd-arm64), const DLT_JUNIPER_ATM2 ideal-int +pkg syscall (netbsd-arm64), const DLT_JUNIPER_CHDLC = 181 +pkg syscall (netbsd-arm64), const DLT_JUNIPER_CHDLC ideal-int +pkg syscall (netbsd-arm64), const DLT_JUNIPER_ES = 132 +pkg syscall (netbsd-arm64), const DLT_JUNIPER_ES ideal-int +pkg syscall (netbsd-arm64), const DLT_JUNIPER_ETHER = 178 +pkg syscall (netbsd-arm64), const DLT_JUNIPER_ETHER ideal-int +pkg syscall (netbsd-arm64), const DLT_JUNIPER_FRELAY = 180 +pkg syscall (netbsd-arm64), const DLT_JUNIPER_FRELAY ideal-int +pkg syscall (netbsd-arm64), const DLT_JUNIPER_GGSN = 133 +pkg syscall (netbsd-arm64), const DLT_JUNIPER_GGSN ideal-int +pkg syscall (netbsd-arm64), const DLT_JUNIPER_ISM = 194 +pkg syscall (netbsd-arm64), const DLT_JUNIPER_ISM ideal-int +pkg syscall (netbsd-arm64), const DLT_JUNIPER_MFR = 134 +pkg syscall (netbsd-arm64), const DLT_JUNIPER_MFR ideal-int +pkg syscall (netbsd-arm64), const DLT_JUNIPER_MLFR = 131 +pkg syscall (netbsd-arm64), const DLT_JUNIPER_MLFR ideal-int +pkg syscall (netbsd-arm64), const DLT_JUNIPER_MLPPP = 130 +pkg syscall (netbsd-arm64), const DLT_JUNIPER_MLPPP ideal-int +pkg syscall (netbsd-arm64), const DLT_JUNIPER_MONITOR = 164 +pkg syscall (netbsd-arm64), const DLT_JUNIPER_MONITOR ideal-int +pkg syscall (netbsd-arm64), const DLT_JUNIPER_PIC_PEER = 174 +pkg syscall (netbsd-arm64), const DLT_JUNIPER_PIC_PEER ideal-int +pkg syscall (netbsd-arm64), const DLT_JUNIPER_PPP = 179 +pkg syscall (netbsd-arm64), const DLT_JUNIPER_PPP ideal-int +pkg syscall (netbsd-arm64), const DLT_JUNIPER_PPPOE = 167 +pkg syscall (netbsd-arm64), const DLT_JUNIPER_PPPOE ideal-int +pkg syscall (netbsd-arm64), const DLT_JUNIPER_PPPOE_ATM = 168 +pkg syscall (netbsd-arm64), const DLT_JUNIPER_PPPOE_ATM ideal-int +pkg syscall (netbsd-arm64), const DLT_JUNIPER_SERVICES = 136 +pkg syscall (netbsd-arm64), const DLT_JUNIPER_SERVICES ideal-int +pkg syscall (netbsd-arm64), const DLT_JUNIPER_ST = 200 +pkg syscall (netbsd-arm64), const DLT_JUNIPER_ST ideal-int +pkg syscall (netbsd-arm64), const DLT_JUNIPER_VP = 183 +pkg syscall (netbsd-arm64), const DLT_JUNIPER_VP ideal-int +pkg syscall (netbsd-arm64), const DLT_LAPB_WITH_DIR = 207 +pkg syscall (netbsd-arm64), const DLT_LAPB_WITH_DIR ideal-int +pkg syscall (netbsd-arm64), const DLT_LAPD = 203 +pkg syscall (netbsd-arm64), const DLT_LAPD ideal-int +pkg syscall (netbsd-arm64), const DLT_LIN = 212 +pkg syscall (netbsd-arm64), const DLT_LIN ideal-int +pkg syscall (netbsd-arm64), const DLT_LINUX_EVDEV = 216 +pkg syscall (netbsd-arm64), const DLT_LINUX_EVDEV ideal-int +pkg syscall (netbsd-arm64), const DLT_LINUX_IRDA = 144 +pkg syscall (netbsd-arm64), const DLT_LINUX_IRDA ideal-int +pkg syscall (netbsd-arm64), const DLT_LINUX_LAPD = 177 +pkg syscall (netbsd-arm64), const DLT_LINUX_LAPD ideal-int +pkg syscall (netbsd-arm64), const DLT_LINUX_SLL = 113 +pkg syscall (netbsd-arm64), const DLT_LINUX_SLL ideal-int +pkg syscall (netbsd-arm64), const DLT_LOOP = 108 +pkg syscall (netbsd-arm64), const DLT_LOOP ideal-int +pkg syscall (netbsd-arm64), const DLT_LTALK = 114 +pkg syscall (netbsd-arm64), const DLT_LTALK ideal-int +pkg syscall (netbsd-arm64), const DLT_MFR = 182 +pkg syscall (netbsd-arm64), const DLT_MFR ideal-int +pkg syscall (netbsd-arm64), const DLT_MOST = 211 +pkg syscall (netbsd-arm64), const DLT_MOST ideal-int +pkg syscall (netbsd-arm64), const DLT_MPLS = 219 +pkg syscall (netbsd-arm64), const DLT_MPLS ideal-int +pkg syscall (netbsd-arm64), const DLT_MTP2 = 140 +pkg syscall (netbsd-arm64), const DLT_MTP2 ideal-int +pkg syscall (netbsd-arm64), const DLT_MTP2_WITH_PHDR = 139 +pkg syscall (netbsd-arm64), const DLT_MTP2_WITH_PHDR ideal-int +pkg syscall (netbsd-arm64), const DLT_MTP3 = 141 +pkg syscall (netbsd-arm64), const DLT_MTP3 ideal-int +pkg syscall (netbsd-arm64), const DLT_NULL = 0 +pkg syscall (netbsd-arm64), const DLT_NULL ideal-int +pkg syscall (netbsd-arm64), const DLT_PCI_EXP = 125 +pkg syscall (netbsd-arm64), const DLT_PCI_EXP ideal-int +pkg syscall (netbsd-arm64), const DLT_PFLOG = 117 +pkg syscall (netbsd-arm64), const DLT_PFLOG ideal-int +pkg syscall (netbsd-arm64), const DLT_PFSYNC = 18 +pkg syscall (netbsd-arm64), const DLT_PFSYNC ideal-int +pkg syscall (netbsd-arm64), const DLT_PPI = 192 +pkg syscall (netbsd-arm64), const DLT_PPI ideal-int +pkg syscall (netbsd-arm64), const DLT_PPP = 9 +pkg syscall (netbsd-arm64), const DLT_PPP ideal-int +pkg syscall (netbsd-arm64), const DLT_PPP_BSDOS = 14 +pkg syscall (netbsd-arm64), const DLT_PPP_BSDOS ideal-int +pkg syscall (netbsd-arm64), const DLT_PPP_ETHER = 51 +pkg syscall (netbsd-arm64), const DLT_PPP_ETHER ideal-int +pkg syscall (netbsd-arm64), const DLT_PPP_PPPD = 166 +pkg syscall (netbsd-arm64), const DLT_PPP_PPPD ideal-int +pkg syscall (netbsd-arm64), const DLT_PPP_SERIAL = 50 +pkg syscall (netbsd-arm64), const DLT_PPP_SERIAL ideal-int +pkg syscall (netbsd-arm64), const DLT_PPP_WITH_DIR = 204 +pkg syscall (netbsd-arm64), const DLT_PPP_WITH_DIR ideal-int +pkg syscall (netbsd-arm64), const DLT_PRISM_HEADER = 119 +pkg syscall (netbsd-arm64), const DLT_PRISM_HEADER ideal-int +pkg syscall (netbsd-arm64), const DLT_PRONET = 4 +pkg syscall (netbsd-arm64), const DLT_PRONET ideal-int +pkg syscall (netbsd-arm64), const DLT_RAIF1 = 198 +pkg syscall (netbsd-arm64), const DLT_RAIF1 ideal-int +pkg syscall (netbsd-arm64), const DLT_RAW = 12 +pkg syscall (netbsd-arm64), const DLT_RAW ideal-int +pkg syscall (netbsd-arm64), const DLT_RAWAF_MASK = 35913728 +pkg syscall (netbsd-arm64), const DLT_RAWAF_MASK ideal-int +pkg syscall (netbsd-arm64), const DLT_RIO = 124 +pkg syscall (netbsd-arm64), const DLT_RIO ideal-int +pkg syscall (netbsd-arm64), const DLT_SCCP = 142 +pkg syscall (netbsd-arm64), const DLT_SCCP ideal-int +pkg syscall (netbsd-arm64), const DLT_SITA = 196 +pkg syscall (netbsd-arm64), const DLT_SITA ideal-int +pkg syscall (netbsd-arm64), const DLT_SLIP = 8 +pkg syscall (netbsd-arm64), const DLT_SLIP ideal-int +pkg syscall (netbsd-arm64), const DLT_SLIP_BSDOS = 13 +pkg syscall (netbsd-arm64), const DLT_SLIP_BSDOS ideal-int +pkg syscall (netbsd-arm64), const DLT_SUNATM = 123 +pkg syscall (netbsd-arm64), const DLT_SUNATM ideal-int +pkg syscall (netbsd-arm64), const DLT_SYMANTEC_FIREWALL = 99 +pkg syscall (netbsd-arm64), const DLT_SYMANTEC_FIREWALL ideal-int +pkg syscall (netbsd-arm64), const DLT_TZSP = 128 +pkg syscall (netbsd-arm64), const DLT_TZSP ideal-int +pkg syscall (netbsd-arm64), const DLT_USB = 186 +pkg syscall (netbsd-arm64), const DLT_USB ideal-int +pkg syscall (netbsd-arm64), const DLT_USB_LINUX = 189 +pkg syscall (netbsd-arm64), const DLT_USB_LINUX ideal-int +pkg syscall (netbsd-arm64), const DLT_USB_LINUX_MMAPPED = 220 +pkg syscall (netbsd-arm64), const DLT_USB_LINUX_MMAPPED ideal-int +pkg syscall (netbsd-arm64), const DLT_WIHART = 223 +pkg syscall (netbsd-arm64), const DLT_WIHART ideal-int +pkg syscall (netbsd-arm64), const DLT_X2E_SERIAL = 213 +pkg syscall (netbsd-arm64), const DLT_X2E_SERIAL ideal-int +pkg syscall (netbsd-arm64), const DLT_X2E_XORAYA = 214 +pkg syscall (netbsd-arm64), const DLT_X2E_XORAYA ideal-int +pkg syscall (netbsd-arm64), const DT_BLK = 6 +pkg syscall (netbsd-arm64), const DT_BLK ideal-int +pkg syscall (netbsd-arm64), const DT_CHR = 2 +pkg syscall (netbsd-arm64), const DT_CHR ideal-int +pkg syscall (netbsd-arm64), const DT_DIR = 4 +pkg syscall (netbsd-arm64), const DT_DIR ideal-int +pkg syscall (netbsd-arm64), const DT_FIFO = 1 +pkg syscall (netbsd-arm64), const DT_FIFO ideal-int +pkg syscall (netbsd-arm64), const DT_LNK = 10 +pkg syscall (netbsd-arm64), const DT_LNK ideal-int +pkg syscall (netbsd-arm64), const DT_REG = 8 +pkg syscall (netbsd-arm64), const DT_REG ideal-int +pkg syscall (netbsd-arm64), const DT_SOCK = 12 +pkg syscall (netbsd-arm64), const DT_SOCK ideal-int +pkg syscall (netbsd-arm64), const DT_UNKNOWN = 0 +pkg syscall (netbsd-arm64), const DT_UNKNOWN ideal-int +pkg syscall (netbsd-arm64), const DT_WHT = 14 +pkg syscall (netbsd-arm64), const DT_WHT ideal-int +pkg syscall (netbsd-arm64), const E2BIG = 7 +pkg syscall (netbsd-arm64), const EACCES = 13 +pkg syscall (netbsd-arm64), const EADDRINUSE = 48 +pkg syscall (netbsd-arm64), const EADDRNOTAVAIL = 49 +pkg syscall (netbsd-arm64), const EAFNOSUPPORT = 47 +pkg syscall (netbsd-arm64), const EAGAIN = 35 +pkg syscall (netbsd-arm64), const EALREADY = 37 +pkg syscall (netbsd-arm64), const EAUTH = 80 +pkg syscall (netbsd-arm64), const EAUTH Errno +pkg syscall (netbsd-arm64), const EBADF = 9 +pkg syscall (netbsd-arm64), const EBADMSG = 88 +pkg syscall (netbsd-arm64), const EBADMSG Errno +pkg syscall (netbsd-arm64), const EBADRPC = 72 +pkg syscall (netbsd-arm64), const EBADRPC Errno +pkg syscall (netbsd-arm64), const EBUSY = 16 +pkg syscall (netbsd-arm64), const ECANCELED = 87 +pkg syscall (netbsd-arm64), const ECHILD = 10 +pkg syscall (netbsd-arm64), const ECHO = 8 +pkg syscall (netbsd-arm64), const ECHO ideal-int +pkg syscall (netbsd-arm64), const ECHOCTL = 64 +pkg syscall (netbsd-arm64), const ECHOCTL ideal-int +pkg syscall (netbsd-arm64), const ECHOE = 2 +pkg syscall (netbsd-arm64), const ECHOE ideal-int +pkg syscall (netbsd-arm64), const ECHOK = 4 +pkg syscall (netbsd-arm64), const ECHOK ideal-int +pkg syscall (netbsd-arm64), const ECHOKE = 1 +pkg syscall (netbsd-arm64), const ECHOKE ideal-int +pkg syscall (netbsd-arm64), const ECHONL = 16 +pkg syscall (netbsd-arm64), const ECHONL ideal-int +pkg syscall (netbsd-arm64), const ECHOPRT = 32 +pkg syscall (netbsd-arm64), const ECHOPRT ideal-int +pkg syscall (netbsd-arm64), const ECONNABORTED = 53 +pkg syscall (netbsd-arm64), const ECONNREFUSED = 61 +pkg syscall (netbsd-arm64), const ECONNRESET = 54 +pkg syscall (netbsd-arm64), const EDEADLK = 11 +pkg syscall (netbsd-arm64), const EDESTADDRREQ = 39 +pkg syscall (netbsd-arm64), const EDOM = 33 +pkg syscall (netbsd-arm64), const EDQUOT = 69 +pkg syscall (netbsd-arm64), const EEXIST = 17 +pkg syscall (netbsd-arm64), const EFAULT = 14 +pkg syscall (netbsd-arm64), const EFBIG = 27 +pkg syscall (netbsd-arm64), const EFTYPE = 79 +pkg syscall (netbsd-arm64), const EFTYPE Errno +pkg syscall (netbsd-arm64), const EHOSTDOWN = 64 +pkg syscall (netbsd-arm64), const EHOSTUNREACH = 65 +pkg syscall (netbsd-arm64), const EIDRM = 82 +pkg syscall (netbsd-arm64), const EILSEQ = 85 +pkg syscall (netbsd-arm64), const EINPROGRESS = 36 +pkg syscall (netbsd-arm64), const EINTR = 4 +pkg syscall (netbsd-arm64), const EINVAL = 22 +pkg syscall (netbsd-arm64), const EIO = 5 +pkg syscall (netbsd-arm64), const EISCONN = 56 +pkg syscall (netbsd-arm64), const EISDIR = 21 +pkg syscall (netbsd-arm64), const ELAST = 96 +pkg syscall (netbsd-arm64), const ELAST Errno +pkg syscall (netbsd-arm64), const ELOOP = 62 +pkg syscall (netbsd-arm64), const EMFILE = 24 +pkg syscall (netbsd-arm64), const EMLINK = 31 +pkg syscall (netbsd-arm64), const EMSGSIZE = 40 +pkg syscall (netbsd-arm64), const EMULTIHOP = 94 +pkg syscall (netbsd-arm64), const EMULTIHOP Errno +pkg syscall (netbsd-arm64), const EMUL_LINUX = 1 +pkg syscall (netbsd-arm64), const EMUL_LINUX ideal-int +pkg syscall (netbsd-arm64), const EMUL_LINUX32 = 5 +pkg syscall (netbsd-arm64), const EMUL_LINUX32 ideal-int +pkg syscall (netbsd-arm64), const EMUL_MAXID = 6 +pkg syscall (netbsd-arm64), const EMUL_MAXID ideal-int +pkg syscall (netbsd-arm64), const ENAMETOOLONG = 63 +pkg syscall (netbsd-arm64), const ENEEDAUTH = 81 +pkg syscall (netbsd-arm64), const ENEEDAUTH Errno +pkg syscall (netbsd-arm64), const ENETDOWN = 50 +pkg syscall (netbsd-arm64), const ENETRESET = 52 +pkg syscall (netbsd-arm64), const ENETUNREACH = 51 +pkg syscall (netbsd-arm64), const ENFILE = 23 +pkg syscall (netbsd-arm64), const ENOATTR = 93 +pkg syscall (netbsd-arm64), const ENOATTR Errno +pkg syscall (netbsd-arm64), const ENOBUFS = 55 +pkg syscall (netbsd-arm64), const ENODATA = 89 +pkg syscall (netbsd-arm64), const ENODATA Errno +pkg syscall (netbsd-arm64), const ENODEV = 19 +pkg syscall (netbsd-arm64), const ENOEXEC = 8 +pkg syscall (netbsd-arm64), const ENOLCK = 77 +pkg syscall (netbsd-arm64), const ENOLINK = 95 +pkg syscall (netbsd-arm64), const ENOLINK Errno +pkg syscall (netbsd-arm64), const ENOMEM = 12 +pkg syscall (netbsd-arm64), const ENOMSG = 83 +pkg syscall (netbsd-arm64), const ENOPROTOOPT = 42 +pkg syscall (netbsd-arm64), const ENOSPC = 28 +pkg syscall (netbsd-arm64), const ENOSR = 90 +pkg syscall (netbsd-arm64), const ENOSR Errno +pkg syscall (netbsd-arm64), const ENOSTR = 91 +pkg syscall (netbsd-arm64), const ENOSTR Errno +pkg syscall (netbsd-arm64), const ENOSYS = 78 +pkg syscall (netbsd-arm64), const ENOTBLK = 15 +pkg syscall (netbsd-arm64), const ENOTCONN = 57 +pkg syscall (netbsd-arm64), const ENOTDIR = 20 +pkg syscall (netbsd-arm64), const ENOTEMPTY = 66 +pkg syscall (netbsd-arm64), const ENOTSOCK = 38 +pkg syscall (netbsd-arm64), const ENOTSUP = 86 +pkg syscall (netbsd-arm64), const ENOTTY = 25 +pkg syscall (netbsd-arm64), const ENXIO = 6 +pkg syscall (netbsd-arm64), const EOPNOTSUPP = 45 +pkg syscall (netbsd-arm64), const EOVERFLOW = 84 +pkg syscall (netbsd-arm64), const EPERM = 1 +pkg syscall (netbsd-arm64), const EPFNOSUPPORT = 46 +pkg syscall (netbsd-arm64), const EPIPE = 32 +pkg syscall (netbsd-arm64), const EPROCLIM = 67 +pkg syscall (netbsd-arm64), const EPROCLIM Errno +pkg syscall (netbsd-arm64), const EPROCUNAVAIL = 76 +pkg syscall (netbsd-arm64), const EPROCUNAVAIL Errno +pkg syscall (netbsd-arm64), const EPROGMISMATCH = 75 +pkg syscall (netbsd-arm64), const EPROGMISMATCH Errno +pkg syscall (netbsd-arm64), const EPROGUNAVAIL = 74 +pkg syscall (netbsd-arm64), const EPROGUNAVAIL Errno +pkg syscall (netbsd-arm64), const EPROTO = 96 +pkg syscall (netbsd-arm64), const EPROTO Errno +pkg syscall (netbsd-arm64), const EPROTONOSUPPORT = 43 +pkg syscall (netbsd-arm64), const EPROTOTYPE = 41 +pkg syscall (netbsd-arm64), const ERANGE = 34 +pkg syscall (netbsd-arm64), const EREMOTE = 71 +pkg syscall (netbsd-arm64), const EROFS = 30 +pkg syscall (netbsd-arm64), const ERPCMISMATCH = 73 +pkg syscall (netbsd-arm64), const ERPCMISMATCH Errno +pkg syscall (netbsd-arm64), const ESHUTDOWN = 58 +pkg syscall (netbsd-arm64), const ESOCKTNOSUPPORT = 44 +pkg syscall (netbsd-arm64), const ESPIPE = 29 +pkg syscall (netbsd-arm64), const ESRCH = 3 +pkg syscall (netbsd-arm64), const ESTALE = 70 +pkg syscall (netbsd-arm64), const ETHERCAP_JUMBO_MTU = 4 +pkg syscall (netbsd-arm64), const ETHERCAP_JUMBO_MTU ideal-int +pkg syscall (netbsd-arm64), const ETHERCAP_VLAN_HWTAGGING = 2 +pkg syscall (netbsd-arm64), const ETHERCAP_VLAN_HWTAGGING ideal-int +pkg syscall (netbsd-arm64), const ETHERCAP_VLAN_MTU = 1 +pkg syscall (netbsd-arm64), const ETHERCAP_VLAN_MTU ideal-int +pkg syscall (netbsd-arm64), const ETHERMIN = 46 +pkg syscall (netbsd-arm64), const ETHERMIN ideal-int +pkg syscall (netbsd-arm64), const ETHERMTU = 1500 +pkg syscall (netbsd-arm64), const ETHERMTU ideal-int +pkg syscall (netbsd-arm64), const ETHERMTU_JUMBO = 9000 +pkg syscall (netbsd-arm64), const ETHERMTU_JUMBO ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_8023 = 4 +pkg syscall (netbsd-arm64), const ETHERTYPE_8023 ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_AARP = 33011 +pkg syscall (netbsd-arm64), const ETHERTYPE_AARP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_ACCTON = 33680 +pkg syscall (netbsd-arm64), const ETHERTYPE_ACCTON ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_AEONIC = 32822 +pkg syscall (netbsd-arm64), const ETHERTYPE_AEONIC ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_ALPHA = 33098 +pkg syscall (netbsd-arm64), const ETHERTYPE_ALPHA ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_AMBER = 24584 +pkg syscall (netbsd-arm64), const ETHERTYPE_AMBER ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_AMOEBA = 33093 +pkg syscall (netbsd-arm64), const ETHERTYPE_AMOEBA ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_APOLLO = 33015 +pkg syscall (netbsd-arm64), const ETHERTYPE_APOLLO ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_APOLLODOMAIN = 32793 +pkg syscall (netbsd-arm64), const ETHERTYPE_APOLLODOMAIN ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_APPLETALK = 32923 +pkg syscall (netbsd-arm64), const ETHERTYPE_APPLETALK ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_APPLITEK = 32967 +pkg syscall (netbsd-arm64), const ETHERTYPE_APPLITEK ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_ARGONAUT = 32826 +pkg syscall (netbsd-arm64), const ETHERTYPE_ARGONAUT ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_ARP = 2054 +pkg syscall (netbsd-arm64), const ETHERTYPE_ARP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_AT = 32923 +pkg syscall (netbsd-arm64), const ETHERTYPE_AT ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_ATALK = 32923 +pkg syscall (netbsd-arm64), const ETHERTYPE_ATALK ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_ATOMIC = 34527 +pkg syscall (netbsd-arm64), const ETHERTYPE_ATOMIC ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_ATT = 32873 +pkg syscall (netbsd-arm64), const ETHERTYPE_ATT ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_ATTSTANFORD = 32776 +pkg syscall (netbsd-arm64), const ETHERTYPE_ATTSTANFORD ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_AUTOPHON = 32874 +pkg syscall (netbsd-arm64), const ETHERTYPE_AUTOPHON ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_AXIS = 34902 +pkg syscall (netbsd-arm64), const ETHERTYPE_AXIS ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_BCLOOP = 36867 +pkg syscall (netbsd-arm64), const ETHERTYPE_BCLOOP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_BOFL = 33026 +pkg syscall (netbsd-arm64), const ETHERTYPE_BOFL ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_CABLETRON = 28724 +pkg syscall (netbsd-arm64), const ETHERTYPE_CABLETRON ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_CHAOS = 2052 +pkg syscall (netbsd-arm64), const ETHERTYPE_CHAOS ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_COMDESIGN = 32876 +pkg syscall (netbsd-arm64), const ETHERTYPE_COMDESIGN ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_COMPUGRAPHIC = 32877 +pkg syscall (netbsd-arm64), const ETHERTYPE_COMPUGRAPHIC ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_COUNTERPOINT = 32866 +pkg syscall (netbsd-arm64), const ETHERTYPE_COUNTERPOINT ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_CRONUS = 32772 +pkg syscall (netbsd-arm64), const ETHERTYPE_CRONUS ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_CRONUSVLN = 32771 +pkg syscall (netbsd-arm64), const ETHERTYPE_CRONUSVLN ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_DCA = 4660 +pkg syscall (netbsd-arm64), const ETHERTYPE_DCA ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_DDE = 32891 +pkg syscall (netbsd-arm64), const ETHERTYPE_DDE ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_DEBNI = 43690 +pkg syscall (netbsd-arm64), const ETHERTYPE_DEBNI ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_DECAM = 32840 +pkg syscall (netbsd-arm64), const ETHERTYPE_DECAM ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_DECCUST = 24582 +pkg syscall (netbsd-arm64), const ETHERTYPE_DECCUST ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_DECDIAG = 24581 +pkg syscall (netbsd-arm64), const ETHERTYPE_DECDIAG ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_DECDNS = 32828 +pkg syscall (netbsd-arm64), const ETHERTYPE_DECDNS ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_DECDTS = 32830 +pkg syscall (netbsd-arm64), const ETHERTYPE_DECDTS ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_DECEXPER = 24576 +pkg syscall (netbsd-arm64), const ETHERTYPE_DECEXPER ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_DECLAST = 32833 +pkg syscall (netbsd-arm64), const ETHERTYPE_DECLAST ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_DECLTM = 32831 +pkg syscall (netbsd-arm64), const ETHERTYPE_DECLTM ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_DECMUMPS = 24585 +pkg syscall (netbsd-arm64), const ETHERTYPE_DECMUMPS ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_DECNETBIOS = 32832 +pkg syscall (netbsd-arm64), const ETHERTYPE_DECNETBIOS ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_DELTACON = 34526 +pkg syscall (netbsd-arm64), const ETHERTYPE_DELTACON ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_DIDDLE = 17185 +pkg syscall (netbsd-arm64), const ETHERTYPE_DIDDLE ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_DLOG1 = 1632 +pkg syscall (netbsd-arm64), const ETHERTYPE_DLOG1 ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_DLOG2 = 1633 +pkg syscall (netbsd-arm64), const ETHERTYPE_DLOG2 ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_DN = 24579 +pkg syscall (netbsd-arm64), const ETHERTYPE_DN ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_DOGFIGHT = 6537 +pkg syscall (netbsd-arm64), const ETHERTYPE_DOGFIGHT ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_DSMD = 32825 +pkg syscall (netbsd-arm64), const ETHERTYPE_DSMD ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_ECMA = 2051 +pkg syscall (netbsd-arm64), const ETHERTYPE_ECMA ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_ENCRYPT = 32829 +pkg syscall (netbsd-arm64), const ETHERTYPE_ENCRYPT ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_ES = 32861 +pkg syscall (netbsd-arm64), const ETHERTYPE_ES ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_EXCELAN = 32784 +pkg syscall (netbsd-arm64), const ETHERTYPE_EXCELAN ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_EXPERDATA = 32841 +pkg syscall (netbsd-arm64), const ETHERTYPE_EXPERDATA ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_FLIP = 33094 +pkg syscall (netbsd-arm64), const ETHERTYPE_FLIP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_FLOWCONTROL = 34824 +pkg syscall (netbsd-arm64), const ETHERTYPE_FLOWCONTROL ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_FRARP = 2056 +pkg syscall (netbsd-arm64), const ETHERTYPE_FRARP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_GENDYN = 32872 +pkg syscall (netbsd-arm64), const ETHERTYPE_GENDYN ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_HAYES = 33072 +pkg syscall (netbsd-arm64), const ETHERTYPE_HAYES ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_HIPPI_FP = 33152 +pkg syscall (netbsd-arm64), const ETHERTYPE_HIPPI_FP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_HITACHI = 34848 +pkg syscall (netbsd-arm64), const ETHERTYPE_HITACHI ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_HP = 32773 +pkg syscall (netbsd-arm64), const ETHERTYPE_HP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_IEEEPUP = 2560 +pkg syscall (netbsd-arm64), const ETHERTYPE_IEEEPUP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_IEEEPUPAT = 2561 +pkg syscall (netbsd-arm64), const ETHERTYPE_IEEEPUPAT ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_IMLBL = 19522 +pkg syscall (netbsd-arm64), const ETHERTYPE_IMLBL ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_IMLBLDIAG = 16972 +pkg syscall (netbsd-arm64), const ETHERTYPE_IMLBLDIAG ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_IP = 2048 +pkg syscall (netbsd-arm64), const ETHERTYPE_IP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_IPAS = 34668 +pkg syscall (netbsd-arm64), const ETHERTYPE_IPAS ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_IPV6 = 34525 +pkg syscall (netbsd-arm64), const ETHERTYPE_IPV6 ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_IPX = 33079 +pkg syscall (netbsd-arm64), const ETHERTYPE_IPX ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_IPXNEW = 32823 +pkg syscall (netbsd-arm64), const ETHERTYPE_IPXNEW ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_KALPANA = 34178 +pkg syscall (netbsd-arm64), const ETHERTYPE_KALPANA ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_LANBRIDGE = 32824 +pkg syscall (netbsd-arm64), const ETHERTYPE_LANBRIDGE ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_LANPROBE = 34952 +pkg syscall (netbsd-arm64), const ETHERTYPE_LANPROBE ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_LAT = 24580 +pkg syscall (netbsd-arm64), const ETHERTYPE_LAT ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_LBACK = 36864 +pkg syscall (netbsd-arm64), const ETHERTYPE_LBACK ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_LITTLE = 32864 +pkg syscall (netbsd-arm64), const ETHERTYPE_LITTLE ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_LOGICRAFT = 33096 +pkg syscall (netbsd-arm64), const ETHERTYPE_LOGICRAFT ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_LOOPBACK = 36864 +pkg syscall (netbsd-arm64), const ETHERTYPE_LOOPBACK ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_MATRA = 32890 +pkg syscall (netbsd-arm64), const ETHERTYPE_MATRA ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_MAX = 65535 +pkg syscall (netbsd-arm64), const ETHERTYPE_MAX ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_MERIT = 32892 +pkg syscall (netbsd-arm64), const ETHERTYPE_MERIT ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_MICP = 34618 +pkg syscall (netbsd-arm64), const ETHERTYPE_MICP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_MOPDL = 24577 +pkg syscall (netbsd-arm64), const ETHERTYPE_MOPDL ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_MOPRC = 24578 +pkg syscall (netbsd-arm64), const ETHERTYPE_MOPRC ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_MOTOROLA = 33165 +pkg syscall (netbsd-arm64), const ETHERTYPE_MOTOROLA ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_MPLS = 34887 +pkg syscall (netbsd-arm64), const ETHERTYPE_MPLS ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_MPLS_MCAST = 34888 +pkg syscall (netbsd-arm64), const ETHERTYPE_MPLS_MCAST ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_MUMPS = 33087 +pkg syscall (netbsd-arm64), const ETHERTYPE_MUMPS ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPCC = 15364 +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPCC ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPCLAIM = 15369 +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPCLAIM ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPCLREQ = 15365 +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPCLREQ ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPCLRSP = 15366 +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPCLRSP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPCREQ = 15362 +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPCREQ ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPCRSP = 15363 +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPCRSP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPDG = 15367 +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPDG ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPDGB = 15368 +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPDGB ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPDLTE = 15370 +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPDLTE ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPRAR = 15372 +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPRAR ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPRAS = 15371 +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPRAS ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPRST = 15373 +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPRST ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPSCD = 15361 +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPSCD ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPVCD = 15360 +pkg syscall (netbsd-arm64), const ETHERTYPE_NBPVCD ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NBS = 2050 +pkg syscall (netbsd-arm64), const ETHERTYPE_NBS ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NCD = 33097 +pkg syscall (netbsd-arm64), const ETHERTYPE_NCD ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NESTAR = 32774 +pkg syscall (netbsd-arm64), const ETHERTYPE_NESTAR ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NETBEUI = 33169 +pkg syscall (netbsd-arm64), const ETHERTYPE_NETBEUI ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NOVELL = 33080 +pkg syscall (netbsd-arm64), const ETHERTYPE_NOVELL ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NS = 1536 +pkg syscall (netbsd-arm64), const ETHERTYPE_NS ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NSAT = 1537 +pkg syscall (netbsd-arm64), const ETHERTYPE_NSAT ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NSCOMPAT = 2055 +pkg syscall (netbsd-arm64), const ETHERTYPE_NSCOMPAT ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_NTRAILER = 16 +pkg syscall (netbsd-arm64), const ETHERTYPE_NTRAILER ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_OS9 = 28679 +pkg syscall (netbsd-arm64), const ETHERTYPE_OS9 ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_OS9NET = 28681 +pkg syscall (netbsd-arm64), const ETHERTYPE_OS9NET ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_PACER = 32966 +pkg syscall (netbsd-arm64), const ETHERTYPE_PACER ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_PAE = 34958 +pkg syscall (netbsd-arm64), const ETHERTYPE_PAE ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_PCS = 16962 +pkg syscall (netbsd-arm64), const ETHERTYPE_PCS ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_PLANNING = 32836 +pkg syscall (netbsd-arm64), const ETHERTYPE_PLANNING ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_PPP = 34827 +pkg syscall (netbsd-arm64), const ETHERTYPE_PPP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_PPPOE = 34916 +pkg syscall (netbsd-arm64), const ETHERTYPE_PPPOE ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_PPPOEDISC = 34915 +pkg syscall (netbsd-arm64), const ETHERTYPE_PPPOEDISC ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_PRIMENTS = 28721 +pkg syscall (netbsd-arm64), const ETHERTYPE_PRIMENTS ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_PUP = 512 +pkg syscall (netbsd-arm64), const ETHERTYPE_PUP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_PUPAT = 512 +pkg syscall (netbsd-arm64), const ETHERTYPE_PUPAT ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_RACAL = 28720 +pkg syscall (netbsd-arm64), const ETHERTYPE_RACAL ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_RATIONAL = 33104 +pkg syscall (netbsd-arm64), const ETHERTYPE_RATIONAL ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_RAWFR = 25945 +pkg syscall (netbsd-arm64), const ETHERTYPE_RAWFR ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_RCL = 6549 +pkg syscall (netbsd-arm64), const ETHERTYPE_RCL ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_RDP = 34617 +pkg syscall (netbsd-arm64), const ETHERTYPE_RDP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_RETIX = 33010 +pkg syscall (netbsd-arm64), const ETHERTYPE_RETIX ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_REVARP = 32821 +pkg syscall (netbsd-arm64), const ETHERTYPE_REVARP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_SCA = 24583 +pkg syscall (netbsd-arm64), const ETHERTYPE_SCA ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_SECTRA = 34523 +pkg syscall (netbsd-arm64), const ETHERTYPE_SECTRA ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_SECUREDATA = 34669 +pkg syscall (netbsd-arm64), const ETHERTYPE_SECUREDATA ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_SGITW = 33150 +pkg syscall (netbsd-arm64), const ETHERTYPE_SGITW ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_SG_BOUNCE = 32790 +pkg syscall (netbsd-arm64), const ETHERTYPE_SG_BOUNCE ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_SG_DIAG = 32787 +pkg syscall (netbsd-arm64), const ETHERTYPE_SG_DIAG ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_SG_NETGAMES = 32788 +pkg syscall (netbsd-arm64), const ETHERTYPE_SG_NETGAMES ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_SG_RESV = 32789 +pkg syscall (netbsd-arm64), const ETHERTYPE_SG_RESV ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_SIMNET = 21000 +pkg syscall (netbsd-arm64), const ETHERTYPE_SIMNET ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_SLOWPROTOCOLS = 34825 +pkg syscall (netbsd-arm64), const ETHERTYPE_SLOWPROTOCOLS ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_SNA = 32981 +pkg syscall (netbsd-arm64), const ETHERTYPE_SNA ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_SNMP = 33100 +pkg syscall (netbsd-arm64), const ETHERTYPE_SNMP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_SONIX = 64245 +pkg syscall (netbsd-arm64), const ETHERTYPE_SONIX ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_SPIDER = 32927 +pkg syscall (netbsd-arm64), const ETHERTYPE_SPIDER ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_SPRITE = 1280 +pkg syscall (netbsd-arm64), const ETHERTYPE_SPRITE ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_STP = 33153 +pkg syscall (netbsd-arm64), const ETHERTYPE_STP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_TALARIS = 33067 +pkg syscall (netbsd-arm64), const ETHERTYPE_TALARIS ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_TALARISMC = 34091 +pkg syscall (netbsd-arm64), const ETHERTYPE_TALARISMC ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_TCPCOMP = 34667 +pkg syscall (netbsd-arm64), const ETHERTYPE_TCPCOMP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_TCPSM = 36866 +pkg syscall (netbsd-arm64), const ETHERTYPE_TCPSM ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_TEC = 33103 +pkg syscall (netbsd-arm64), const ETHERTYPE_TEC ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_TIGAN = 32815 +pkg syscall (netbsd-arm64), const ETHERTYPE_TIGAN ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_TRAIL = 4096 +pkg syscall (netbsd-arm64), const ETHERTYPE_TRAIL ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_TRANSETHER = 25944 +pkg syscall (netbsd-arm64), const ETHERTYPE_TRANSETHER ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_TYMSHARE = 32814 +pkg syscall (netbsd-arm64), const ETHERTYPE_TYMSHARE ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_UBBST = 28677 +pkg syscall (netbsd-arm64), const ETHERTYPE_UBBST ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_UBDEBUG = 2304 +pkg syscall (netbsd-arm64), const ETHERTYPE_UBDEBUG ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_UBDIAGLOOP = 28674 +pkg syscall (netbsd-arm64), const ETHERTYPE_UBDIAGLOOP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_UBDL = 28672 +pkg syscall (netbsd-arm64), const ETHERTYPE_UBDL ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_UBNIU = 28673 +pkg syscall (netbsd-arm64), const ETHERTYPE_UBNIU ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_UBNMC = 28675 +pkg syscall (netbsd-arm64), const ETHERTYPE_UBNMC ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_VALID = 5632 +pkg syscall (netbsd-arm64), const ETHERTYPE_VALID ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_VARIAN = 32989 +pkg syscall (netbsd-arm64), const ETHERTYPE_VARIAN ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_VAXELN = 32827 +pkg syscall (netbsd-arm64), const ETHERTYPE_VAXELN ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_VEECO = 32871 +pkg syscall (netbsd-arm64), const ETHERTYPE_VEECO ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_VEXP = 32859 +pkg syscall (netbsd-arm64), const ETHERTYPE_VEXP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_VGLAB = 33073 +pkg syscall (netbsd-arm64), const ETHERTYPE_VGLAB ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_VINES = 2989 +pkg syscall (netbsd-arm64), const ETHERTYPE_VINES ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_VINESECHO = 2991 +pkg syscall (netbsd-arm64), const ETHERTYPE_VINESECHO ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_VINESLOOP = 2990 +pkg syscall (netbsd-arm64), const ETHERTYPE_VINESLOOP ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_VITAL = 65280 +pkg syscall (netbsd-arm64), const ETHERTYPE_VITAL ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_VLAN = 33024 +pkg syscall (netbsd-arm64), const ETHERTYPE_VLAN ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_VLTLMAN = 32896 +pkg syscall (netbsd-arm64), const ETHERTYPE_VLTLMAN ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_VPROD = 32860 +pkg syscall (netbsd-arm64), const ETHERTYPE_VPROD ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_VURESERVED = 33095 +pkg syscall (netbsd-arm64), const ETHERTYPE_VURESERVED ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_WATERLOO = 33072 +pkg syscall (netbsd-arm64), const ETHERTYPE_WATERLOO ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_WELLFLEET = 33027 +pkg syscall (netbsd-arm64), const ETHERTYPE_WELLFLEET ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_X25 = 2053 +pkg syscall (netbsd-arm64), const ETHERTYPE_X25 ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_X75 = 2049 +pkg syscall (netbsd-arm64), const ETHERTYPE_X75 ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_XNSSM = 36865 +pkg syscall (netbsd-arm64), const ETHERTYPE_XNSSM ideal-int +pkg syscall (netbsd-arm64), const ETHERTYPE_XTP = 33149 +pkg syscall (netbsd-arm64), const ETHERTYPE_XTP ideal-int +pkg syscall (netbsd-arm64), const ETHER_ADDR_LEN = 6 +pkg syscall (netbsd-arm64), const ETHER_ADDR_LEN ideal-int +pkg syscall (netbsd-arm64), const ETHER_CRC_LEN = 4 +pkg syscall (netbsd-arm64), const ETHER_CRC_LEN ideal-int +pkg syscall (netbsd-arm64), const ETHER_CRC_POLY_BE = 79764918 +pkg syscall (netbsd-arm64), const ETHER_CRC_POLY_BE ideal-int +pkg syscall (netbsd-arm64), const ETHER_CRC_POLY_LE = 3988292384 +pkg syscall (netbsd-arm64), const ETHER_CRC_POLY_LE ideal-int +pkg syscall (netbsd-arm64), const ETHER_HDR_LEN = 14 +pkg syscall (netbsd-arm64), const ETHER_HDR_LEN ideal-int +pkg syscall (netbsd-arm64), const ETHER_MAX_LEN = 1518 +pkg syscall (netbsd-arm64), const ETHER_MAX_LEN ideal-int +pkg syscall (netbsd-arm64), const ETHER_MAX_LEN_JUMBO = 9018 +pkg syscall (netbsd-arm64), const ETHER_MAX_LEN_JUMBO ideal-int +pkg syscall (netbsd-arm64), const ETHER_MIN_LEN = 64 +pkg syscall (netbsd-arm64), const ETHER_MIN_LEN ideal-int +pkg syscall (netbsd-arm64), const ETHER_PPPOE_ENCAP_LEN = 8 +pkg syscall (netbsd-arm64), const ETHER_PPPOE_ENCAP_LEN ideal-int +pkg syscall (netbsd-arm64), const ETHER_TYPE_LEN = 2 +pkg syscall (netbsd-arm64), const ETHER_TYPE_LEN ideal-int +pkg syscall (netbsd-arm64), const ETHER_VLAN_ENCAP_LEN = 4 +pkg syscall (netbsd-arm64), const ETHER_VLAN_ENCAP_LEN ideal-int +pkg syscall (netbsd-arm64), const ETIME = 92 +pkg syscall (netbsd-arm64), const ETIME Errno +pkg syscall (netbsd-arm64), const ETIMEDOUT = 60 +pkg syscall (netbsd-arm64), const ETOOMANYREFS = 59 +pkg syscall (netbsd-arm64), const ETXTBSY = 26 +pkg syscall (netbsd-arm64), const EUSERS = 68 +pkg syscall (netbsd-arm64), const EVFILT_AIO = 2 +pkg syscall (netbsd-arm64), const EVFILT_AIO ideal-int +pkg syscall (netbsd-arm64), const EVFILT_PROC = 4 +pkg syscall (netbsd-arm64), const EVFILT_PROC ideal-int +pkg syscall (netbsd-arm64), const EVFILT_READ = 0 +pkg syscall (netbsd-arm64), const EVFILT_READ ideal-int +pkg syscall (netbsd-arm64), const EVFILT_SIGNAL = 5 +pkg syscall (netbsd-arm64), const EVFILT_SIGNAL ideal-int +pkg syscall (netbsd-arm64), const EVFILT_SYSCOUNT = 7 +pkg syscall (netbsd-arm64), const EVFILT_SYSCOUNT ideal-int +pkg syscall (netbsd-arm64), const EVFILT_TIMER = 6 +pkg syscall (netbsd-arm64), const EVFILT_TIMER ideal-int +pkg syscall (netbsd-arm64), const EVFILT_VNODE = 3 +pkg syscall (netbsd-arm64), const EVFILT_VNODE ideal-int +pkg syscall (netbsd-arm64), const EVFILT_WRITE = 1 +pkg syscall (netbsd-arm64), const EVFILT_WRITE ideal-int +pkg syscall (netbsd-arm64), const EV_ADD = 1 +pkg syscall (netbsd-arm64), const EV_ADD ideal-int +pkg syscall (netbsd-arm64), const EV_CLEAR = 32 +pkg syscall (netbsd-arm64), const EV_CLEAR ideal-int +pkg syscall (netbsd-arm64), const EV_DELETE = 2 +pkg syscall (netbsd-arm64), const EV_DELETE ideal-int +pkg syscall (netbsd-arm64), const EV_DISABLE = 8 +pkg syscall (netbsd-arm64), const EV_DISABLE ideal-int +pkg syscall (netbsd-arm64), const EV_ENABLE = 4 +pkg syscall (netbsd-arm64), const EV_ENABLE ideal-int +pkg syscall (netbsd-arm64), const EV_EOF = 32768 +pkg syscall (netbsd-arm64), const EV_EOF ideal-int +pkg syscall (netbsd-arm64), const EV_ERROR = 16384 +pkg syscall (netbsd-arm64), const EV_ERROR ideal-int +pkg syscall (netbsd-arm64), const EV_FLAG1 = 8192 +pkg syscall (netbsd-arm64), const EV_FLAG1 ideal-int +pkg syscall (netbsd-arm64), const EV_ONESHOT = 16 +pkg syscall (netbsd-arm64), const EV_ONESHOT ideal-int +pkg syscall (netbsd-arm64), const EV_SYSFLAGS = 61440 +pkg syscall (netbsd-arm64), const EV_SYSFLAGS ideal-int +pkg syscall (netbsd-arm64), const EWOULDBLOCK = 35 +pkg syscall (netbsd-arm64), const EXDEV = 18 +pkg syscall (netbsd-arm64), const EXTA = 19200 +pkg syscall (netbsd-arm64), const EXTA ideal-int +pkg syscall (netbsd-arm64), const EXTB = 38400 +pkg syscall (netbsd-arm64), const EXTB ideal-int +pkg syscall (netbsd-arm64), const EXTPROC = 2048 +pkg syscall (netbsd-arm64), const EXTPROC ideal-int +pkg syscall (netbsd-arm64), const FD_CLOEXEC = 1 +pkg syscall (netbsd-arm64), const FD_CLOEXEC ideal-int +pkg syscall (netbsd-arm64), const FD_SETSIZE = 256 +pkg syscall (netbsd-arm64), const FD_SETSIZE ideal-int +pkg syscall (netbsd-arm64), const FLUSHO = 8388608 +pkg syscall (netbsd-arm64), const FLUSHO ideal-int +pkg syscall (netbsd-arm64), const F_CLOSEM = 10 +pkg syscall (netbsd-arm64), const F_CLOSEM ideal-int +pkg syscall (netbsd-arm64), const F_DUPFD = 0 +pkg syscall (netbsd-arm64), const F_DUPFD ideal-int +pkg syscall (netbsd-arm64), const F_DUPFD_CLOEXEC = 12 +pkg syscall (netbsd-arm64), const F_DUPFD_CLOEXEC ideal-int +pkg syscall (netbsd-arm64), const F_FSCTL = -2147483648 +pkg syscall (netbsd-arm64), const F_FSCTL ideal-int +pkg syscall (netbsd-arm64), const F_FSDIRMASK = 1879048192 +pkg syscall (netbsd-arm64), const F_FSDIRMASK ideal-int +pkg syscall (netbsd-arm64), const F_FSIN = 268435456 +pkg syscall (netbsd-arm64), const F_FSIN ideal-int +pkg syscall (netbsd-arm64), const F_FSINOUT = 805306368 +pkg syscall (netbsd-arm64), const F_FSINOUT ideal-int +pkg syscall (netbsd-arm64), const F_FSOUT = 536870912 +pkg syscall (netbsd-arm64), const F_FSOUT ideal-int +pkg syscall (netbsd-arm64), const F_FSPRIV = 32768 +pkg syscall (netbsd-arm64), const F_FSPRIV ideal-int +pkg syscall (netbsd-arm64), const F_FSVOID = 1073741824 +pkg syscall (netbsd-arm64), const F_FSVOID ideal-int +pkg syscall (netbsd-arm64), const F_GETFD = 1 +pkg syscall (netbsd-arm64), const F_GETFD ideal-int +pkg syscall (netbsd-arm64), const F_GETFL = 3 +pkg syscall (netbsd-arm64), const F_GETFL ideal-int +pkg syscall (netbsd-arm64), const F_GETLK = 7 +pkg syscall (netbsd-arm64), const F_GETLK ideal-int +pkg syscall (netbsd-arm64), const F_GETNOSIGPIPE = 13 +pkg syscall (netbsd-arm64), const F_GETNOSIGPIPE ideal-int +pkg syscall (netbsd-arm64), const F_GETOWN = 5 +pkg syscall (netbsd-arm64), const F_GETOWN ideal-int +pkg syscall (netbsd-arm64), const F_MAXFD = 11 +pkg syscall (netbsd-arm64), const F_MAXFD ideal-int +pkg syscall (netbsd-arm64), const F_OK = 0 +pkg syscall (netbsd-arm64), const F_OK ideal-int +pkg syscall (netbsd-arm64), const F_PARAM_MASK = 4095 +pkg syscall (netbsd-arm64), const F_PARAM_MASK ideal-int +pkg syscall (netbsd-arm64), const F_PARAM_MAX = 4095 +pkg syscall (netbsd-arm64), const F_PARAM_MAX ideal-int +pkg syscall (netbsd-arm64), const F_RDLCK = 1 +pkg syscall (netbsd-arm64), const F_RDLCK ideal-int +pkg syscall (netbsd-arm64), const F_SETFD = 2 +pkg syscall (netbsd-arm64), const F_SETFD ideal-int +pkg syscall (netbsd-arm64), const F_SETFL = 4 +pkg syscall (netbsd-arm64), const F_SETFL ideal-int +pkg syscall (netbsd-arm64), const F_SETLK = 8 +pkg syscall (netbsd-arm64), const F_SETLK ideal-int +pkg syscall (netbsd-arm64), const F_SETLKW = 9 +pkg syscall (netbsd-arm64), const F_SETLKW ideal-int +pkg syscall (netbsd-arm64), const F_SETNOSIGPIPE = 14 +pkg syscall (netbsd-arm64), const F_SETNOSIGPIPE ideal-int +pkg syscall (netbsd-arm64), const F_SETOWN = 6 +pkg syscall (netbsd-arm64), const F_SETOWN ideal-int +pkg syscall (netbsd-arm64), const F_UNLCK = 2 +pkg syscall (netbsd-arm64), const F_UNLCK ideal-int +pkg syscall (netbsd-arm64), const F_WRLCK = 3 +pkg syscall (netbsd-arm64), const F_WRLCK ideal-int +pkg syscall (netbsd-arm64), const HUPCL = 16384 +pkg syscall (netbsd-arm64), const HUPCL ideal-int +pkg syscall (netbsd-arm64), const ICANON = 256 +pkg syscall (netbsd-arm64), const ICANON ideal-int +pkg syscall (netbsd-arm64), const ICMP6_FILTER = 18 +pkg syscall (netbsd-arm64), const ICMP6_FILTER ideal-int +pkg syscall (netbsd-arm64), const ICRNL = 256 +pkg syscall (netbsd-arm64), const ICRNL ideal-int +pkg syscall (netbsd-arm64), const IEXTEN = 1024 +pkg syscall (netbsd-arm64), const IEXTEN ideal-int +pkg syscall (netbsd-arm64), const IFAN_ARRIVAL = 0 +pkg syscall (netbsd-arm64), const IFAN_ARRIVAL ideal-int +pkg syscall (netbsd-arm64), const IFAN_DEPARTURE = 1 +pkg syscall (netbsd-arm64), const IFAN_DEPARTURE ideal-int +pkg syscall (netbsd-arm64), const IFA_ROUTE = 1 +pkg syscall (netbsd-arm64), const IFA_ROUTE ideal-int +pkg syscall (netbsd-arm64), const IFF_ALLMULTI = 512 +pkg syscall (netbsd-arm64), const IFF_ALLMULTI ideal-int +pkg syscall (netbsd-arm64), const IFF_CANTCHANGE = 36690 +pkg syscall (netbsd-arm64), const IFF_CANTCHANGE ideal-int +pkg syscall (netbsd-arm64), const IFF_DEBUG = 4 +pkg syscall (netbsd-arm64), const IFF_DEBUG ideal-int +pkg syscall (netbsd-arm64), const IFF_LINK0 = 4096 +pkg syscall (netbsd-arm64), const IFF_LINK0 ideal-int +pkg syscall (netbsd-arm64), const IFF_LINK1 = 8192 +pkg syscall (netbsd-arm64), const IFF_LINK1 ideal-int +pkg syscall (netbsd-arm64), const IFF_LINK2 = 16384 +pkg syscall (netbsd-arm64), const IFF_LINK2 ideal-int +pkg syscall (netbsd-arm64), const IFF_LOOPBACK = 8 +pkg syscall (netbsd-arm64), const IFF_MULTICAST = 32768 +pkg syscall (netbsd-arm64), const IFF_NOARP = 128 +pkg syscall (netbsd-arm64), const IFF_NOARP ideal-int +pkg syscall (netbsd-arm64), const IFF_NOTRAILERS = 32 +pkg syscall (netbsd-arm64), const IFF_NOTRAILERS ideal-int +pkg syscall (netbsd-arm64), const IFF_OACTIVE = 1024 +pkg syscall (netbsd-arm64), const IFF_OACTIVE ideal-int +pkg syscall (netbsd-arm64), const IFF_POINTOPOINT = 16 +pkg syscall (netbsd-arm64), const IFF_POINTOPOINT ideal-int +pkg syscall (netbsd-arm64), const IFF_PROMISC = 256 +pkg syscall (netbsd-arm64), const IFF_PROMISC ideal-int +pkg syscall (netbsd-arm64), const IFF_RUNNING = 64 +pkg syscall (netbsd-arm64), const IFF_RUNNING ideal-int +pkg syscall (netbsd-arm64), const IFF_SIMPLEX = 2048 +pkg syscall (netbsd-arm64), const IFF_SIMPLEX ideal-int +pkg syscall (netbsd-arm64), const IFNAMSIZ = 16 +pkg syscall (netbsd-arm64), const IFNAMSIZ ideal-int +pkg syscall (netbsd-arm64), const IFT_1822 = 2 +pkg syscall (netbsd-arm64), const IFT_1822 ideal-int +pkg syscall (netbsd-arm64), const IFT_A12MPPSWITCH = 130 +pkg syscall (netbsd-arm64), const IFT_A12MPPSWITCH ideal-int +pkg syscall (netbsd-arm64), const IFT_AAL2 = 187 +pkg syscall (netbsd-arm64), const IFT_AAL2 ideal-int +pkg syscall (netbsd-arm64), const IFT_AAL5 = 49 +pkg syscall (netbsd-arm64), const IFT_AAL5 ideal-int +pkg syscall (netbsd-arm64), const IFT_ADSL = 94 +pkg syscall (netbsd-arm64), const IFT_ADSL ideal-int +pkg syscall (netbsd-arm64), const IFT_AFLANE8023 = 59 +pkg syscall (netbsd-arm64), const IFT_AFLANE8023 ideal-int +pkg syscall (netbsd-arm64), const IFT_AFLANE8025 = 60 +pkg syscall (netbsd-arm64), const IFT_AFLANE8025 ideal-int +pkg syscall (netbsd-arm64), const IFT_ARAP = 88 +pkg syscall (netbsd-arm64), const IFT_ARAP ideal-int +pkg syscall (netbsd-arm64), const IFT_ARCNET = 35 +pkg syscall (netbsd-arm64), const IFT_ARCNET ideal-int +pkg syscall (netbsd-arm64), const IFT_ARCNETPLUS = 36 +pkg syscall (netbsd-arm64), const IFT_ARCNETPLUS ideal-int +pkg syscall (netbsd-arm64), const IFT_ASYNC = 84 +pkg syscall (netbsd-arm64), const IFT_ASYNC ideal-int +pkg syscall (netbsd-arm64), const IFT_ATM = 37 +pkg syscall (netbsd-arm64), const IFT_ATM ideal-int +pkg syscall (netbsd-arm64), const IFT_ATMDXI = 105 +pkg syscall (netbsd-arm64), const IFT_ATMDXI ideal-int +pkg syscall (netbsd-arm64), const IFT_ATMFUNI = 106 +pkg syscall (netbsd-arm64), const IFT_ATMFUNI ideal-int +pkg syscall (netbsd-arm64), const IFT_ATMIMA = 107 +pkg syscall (netbsd-arm64), const IFT_ATMIMA ideal-int +pkg syscall (netbsd-arm64), const IFT_ATMLOGICAL = 80 +pkg syscall (netbsd-arm64), const IFT_ATMLOGICAL ideal-int +pkg syscall (netbsd-arm64), const IFT_ATMRADIO = 189 +pkg syscall (netbsd-arm64), const IFT_ATMRADIO ideal-int +pkg syscall (netbsd-arm64), const IFT_ATMSUBINTERFACE = 134 +pkg syscall (netbsd-arm64), const IFT_ATMSUBINTERFACE ideal-int +pkg syscall (netbsd-arm64), const IFT_ATMVCIENDPT = 194 +pkg syscall (netbsd-arm64), const IFT_ATMVCIENDPT ideal-int +pkg syscall (netbsd-arm64), const IFT_ATMVIRTUAL = 149 +pkg syscall (netbsd-arm64), const IFT_ATMVIRTUAL ideal-int +pkg syscall (netbsd-arm64), const IFT_BGPPOLICYACCOUNTING = 162 +pkg syscall (netbsd-arm64), const IFT_BGPPOLICYACCOUNTING ideal-int +pkg syscall (netbsd-arm64), const IFT_BRIDGE = 209 +pkg syscall (netbsd-arm64), const IFT_BRIDGE ideal-int +pkg syscall (netbsd-arm64), const IFT_BSC = 83 +pkg syscall (netbsd-arm64), const IFT_BSC ideal-int +pkg syscall (netbsd-arm64), const IFT_CARP = 248 +pkg syscall (netbsd-arm64), const IFT_CARP ideal-int +pkg syscall (netbsd-arm64), const IFT_CCTEMUL = 61 +pkg syscall (netbsd-arm64), const IFT_CCTEMUL ideal-int +pkg syscall (netbsd-arm64), const IFT_CEPT = 19 +pkg syscall (netbsd-arm64), const IFT_CEPT ideal-int +pkg syscall (netbsd-arm64), const IFT_CES = 133 +pkg syscall (netbsd-arm64), const IFT_CES ideal-int +pkg syscall (netbsd-arm64), const IFT_CHANNEL = 70 +pkg syscall (netbsd-arm64), const IFT_CHANNEL ideal-int +pkg syscall (netbsd-arm64), const IFT_CNR = 85 +pkg syscall (netbsd-arm64), const IFT_CNR ideal-int +pkg syscall (netbsd-arm64), const IFT_COFFEE = 132 +pkg syscall (netbsd-arm64), const IFT_COFFEE ideal-int +pkg syscall (netbsd-arm64), const IFT_COMPOSITELINK = 155 +pkg syscall (netbsd-arm64), const IFT_COMPOSITELINK ideal-int +pkg syscall (netbsd-arm64), const IFT_DCN = 141 +pkg syscall (netbsd-arm64), const IFT_DCN ideal-int +pkg syscall (netbsd-arm64), const IFT_DIGITALPOWERLINE = 138 +pkg syscall (netbsd-arm64), const IFT_DIGITALPOWERLINE ideal-int +pkg syscall (netbsd-arm64), const IFT_DIGITALWRAPPEROVERHEADCHANNEL = 186 +pkg syscall (netbsd-arm64), const IFT_DIGITALWRAPPEROVERHEADCHANNEL ideal-int +pkg syscall (netbsd-arm64), const IFT_DLSW = 74 +pkg syscall (netbsd-arm64), const IFT_DLSW ideal-int +pkg syscall (netbsd-arm64), const IFT_DOCSCABLEDOWNSTREAM = 128 +pkg syscall (netbsd-arm64), const IFT_DOCSCABLEDOWNSTREAM ideal-int +pkg syscall (netbsd-arm64), const IFT_DOCSCABLEMACLAYER = 127 +pkg syscall (netbsd-arm64), const IFT_DOCSCABLEMACLAYER ideal-int +pkg syscall (netbsd-arm64), const IFT_DOCSCABLEUPSTREAM = 129 +pkg syscall (netbsd-arm64), const IFT_DOCSCABLEUPSTREAM ideal-int +pkg syscall (netbsd-arm64), const IFT_DOCSCABLEUPSTREAMCHANNEL = 205 +pkg syscall (netbsd-arm64), const IFT_DOCSCABLEUPSTREAMCHANNEL ideal-int +pkg syscall (netbsd-arm64), const IFT_DS0 = 81 +pkg syscall (netbsd-arm64), const IFT_DS0 ideal-int +pkg syscall (netbsd-arm64), const IFT_DS0BUNDLE = 82 +pkg syscall (netbsd-arm64), const IFT_DS0BUNDLE ideal-int +pkg syscall (netbsd-arm64), const IFT_DS1FDL = 170 +pkg syscall (netbsd-arm64), const IFT_DS1FDL ideal-int +pkg syscall (netbsd-arm64), const IFT_DS3 = 30 +pkg syscall (netbsd-arm64), const IFT_DS3 ideal-int +pkg syscall (netbsd-arm64), const IFT_DTM = 140 +pkg syscall (netbsd-arm64), const IFT_DTM ideal-int +pkg syscall (netbsd-arm64), const IFT_DVBASILN = 172 +pkg syscall (netbsd-arm64), const IFT_DVBASILN ideal-int +pkg syscall (netbsd-arm64), const IFT_DVBASIOUT = 173 +pkg syscall (netbsd-arm64), const IFT_DVBASIOUT ideal-int +pkg syscall (netbsd-arm64), const IFT_DVBRCCDOWNSTREAM = 147 +pkg syscall (netbsd-arm64), const IFT_DVBRCCDOWNSTREAM ideal-int +pkg syscall (netbsd-arm64), const IFT_DVBRCCMACLAYER = 146 +pkg syscall (netbsd-arm64), const IFT_DVBRCCMACLAYER ideal-int +pkg syscall (netbsd-arm64), const IFT_DVBRCCUPSTREAM = 148 +pkg syscall (netbsd-arm64), const IFT_DVBRCCUPSTREAM ideal-int +pkg syscall (netbsd-arm64), const IFT_ECONET = 206 +pkg syscall (netbsd-arm64), const IFT_ECONET ideal-int +pkg syscall (netbsd-arm64), const IFT_EON = 25 +pkg syscall (netbsd-arm64), const IFT_EON ideal-int +pkg syscall (netbsd-arm64), const IFT_EPLRS = 87 +pkg syscall (netbsd-arm64), const IFT_EPLRS ideal-int +pkg syscall (netbsd-arm64), const IFT_ESCON = 73 +pkg syscall (netbsd-arm64), const IFT_ESCON ideal-int +pkg syscall (netbsd-arm64), const IFT_ETHER = 6 +pkg syscall (netbsd-arm64), const IFT_ETHER ideal-int +pkg syscall (netbsd-arm64), const IFT_FAITH = 242 +pkg syscall (netbsd-arm64), const IFT_FAITH ideal-int +pkg syscall (netbsd-arm64), const IFT_FAST = 125 +pkg syscall (netbsd-arm64), const IFT_FAST ideal-int +pkg syscall (netbsd-arm64), const IFT_FASTETHER = 62 +pkg syscall (netbsd-arm64), const IFT_FASTETHER ideal-int +pkg syscall (netbsd-arm64), const IFT_FASTETHERFX = 69 +pkg syscall (netbsd-arm64), const IFT_FASTETHERFX ideal-int +pkg syscall (netbsd-arm64), const IFT_FDDI = 15 +pkg syscall (netbsd-arm64), const IFT_FDDI ideal-int +pkg syscall (netbsd-arm64), const IFT_FIBRECHANNEL = 56 +pkg syscall (netbsd-arm64), const IFT_FIBRECHANNEL ideal-int +pkg syscall (netbsd-arm64), const IFT_FRAMERELAYINTERCONNECT = 58 +pkg syscall (netbsd-arm64), const IFT_FRAMERELAYINTERCONNECT ideal-int +pkg syscall (netbsd-arm64), const IFT_FRAMERELAYMPI = 92 +pkg syscall (netbsd-arm64), const IFT_FRAMERELAYMPI ideal-int +pkg syscall (netbsd-arm64), const IFT_FRDLCIENDPT = 193 +pkg syscall (netbsd-arm64), const IFT_FRDLCIENDPT ideal-int +pkg syscall (netbsd-arm64), const IFT_FRELAY = 32 +pkg syscall (netbsd-arm64), const IFT_FRELAY ideal-int +pkg syscall (netbsd-arm64), const IFT_FRELAYDCE = 44 +pkg syscall (netbsd-arm64), const IFT_FRELAYDCE ideal-int +pkg syscall (netbsd-arm64), const IFT_FRF16MFRBUNDLE = 163 +pkg syscall (netbsd-arm64), const IFT_FRF16MFRBUNDLE ideal-int +pkg syscall (netbsd-arm64), const IFT_FRFORWARD = 158 +pkg syscall (netbsd-arm64), const IFT_FRFORWARD ideal-int +pkg syscall (netbsd-arm64), const IFT_G703AT2MB = 67 +pkg syscall (netbsd-arm64), const IFT_G703AT2MB ideal-int +pkg syscall (netbsd-arm64), const IFT_G703AT64K = 66 +pkg syscall (netbsd-arm64), const IFT_G703AT64K ideal-int +pkg syscall (netbsd-arm64), const IFT_GIF = 240 +pkg syscall (netbsd-arm64), const IFT_GIF ideal-int +pkg syscall (netbsd-arm64), const IFT_GIGABITETHERNET = 117 +pkg syscall (netbsd-arm64), const IFT_GIGABITETHERNET ideal-int +pkg syscall (netbsd-arm64), const IFT_GR303IDT = 178 +pkg syscall (netbsd-arm64), const IFT_GR303IDT ideal-int +pkg syscall (netbsd-arm64), const IFT_GR303RDT = 177 +pkg syscall (netbsd-arm64), const IFT_GR303RDT ideal-int +pkg syscall (netbsd-arm64), const IFT_H323GATEKEEPER = 164 +pkg syscall (netbsd-arm64), const IFT_H323GATEKEEPER ideal-int +pkg syscall (netbsd-arm64), const IFT_H323PROXY = 165 +pkg syscall (netbsd-arm64), const IFT_H323PROXY ideal-int +pkg syscall (netbsd-arm64), const IFT_HDH1822 = 3 +pkg syscall (netbsd-arm64), const IFT_HDH1822 ideal-int +pkg syscall (netbsd-arm64), const IFT_HDLC = 118 +pkg syscall (netbsd-arm64), const IFT_HDLC ideal-int +pkg syscall (netbsd-arm64), const IFT_HDSL2 = 168 +pkg syscall (netbsd-arm64), const IFT_HDSL2 ideal-int +pkg syscall (netbsd-arm64), const IFT_HIPERLAN2 = 183 +pkg syscall (netbsd-arm64), const IFT_HIPERLAN2 ideal-int +pkg syscall (netbsd-arm64), const IFT_HIPPI = 47 +pkg syscall (netbsd-arm64), const IFT_HIPPI ideal-int +pkg syscall (netbsd-arm64), const IFT_HIPPIINTERFACE = 57 +pkg syscall (netbsd-arm64), const IFT_HIPPIINTERFACE ideal-int +pkg syscall (netbsd-arm64), const IFT_HOSTPAD = 90 +pkg syscall (netbsd-arm64), const IFT_HOSTPAD ideal-int +pkg syscall (netbsd-arm64), const IFT_HSSI = 46 +pkg syscall (netbsd-arm64), const IFT_HSSI ideal-int +pkg syscall (netbsd-arm64), const IFT_HY = 14 +pkg syscall (netbsd-arm64), const IFT_HY ideal-int +pkg syscall (netbsd-arm64), const IFT_IBM370PARCHAN = 72 +pkg syscall (netbsd-arm64), const IFT_IBM370PARCHAN ideal-int +pkg syscall (netbsd-arm64), const IFT_IDSL = 154 +pkg syscall (netbsd-arm64), const IFT_IDSL ideal-int +pkg syscall (netbsd-arm64), const IFT_IEEE1394 = 144 +pkg syscall (netbsd-arm64), const IFT_IEEE1394 ideal-int +pkg syscall (netbsd-arm64), const IFT_IEEE80211 = 71 +pkg syscall (netbsd-arm64), const IFT_IEEE80211 ideal-int +pkg syscall (netbsd-arm64), const IFT_IEEE80212 = 55 +pkg syscall (netbsd-arm64), const IFT_IEEE80212 ideal-int +pkg syscall (netbsd-arm64), const IFT_IEEE8023ADLAG = 161 +pkg syscall (netbsd-arm64), const IFT_IEEE8023ADLAG ideal-int +pkg syscall (netbsd-arm64), const IFT_IFGSN = 145 +pkg syscall (netbsd-arm64), const IFT_IFGSN ideal-int +pkg syscall (netbsd-arm64), const IFT_IMT = 190 +pkg syscall (netbsd-arm64), const IFT_IMT ideal-int +pkg syscall (netbsd-arm64), const IFT_INFINIBAND = 199 +pkg syscall (netbsd-arm64), const IFT_INFINIBAND ideal-int +pkg syscall (netbsd-arm64), const IFT_INTERLEAVE = 124 +pkg syscall (netbsd-arm64), const IFT_INTERLEAVE ideal-int +pkg syscall (netbsd-arm64), const IFT_IP = 126 +pkg syscall (netbsd-arm64), const IFT_IP ideal-int +pkg syscall (netbsd-arm64), const IFT_IPFORWARD = 142 +pkg syscall (netbsd-arm64), const IFT_IPFORWARD ideal-int +pkg syscall (netbsd-arm64), const IFT_IPOVERATM = 114 +pkg syscall (netbsd-arm64), const IFT_IPOVERATM ideal-int +pkg syscall (netbsd-arm64), const IFT_IPOVERCDLC = 109 +pkg syscall (netbsd-arm64), const IFT_IPOVERCDLC ideal-int +pkg syscall (netbsd-arm64), const IFT_IPOVERCLAW = 110 +pkg syscall (netbsd-arm64), const IFT_IPOVERCLAW ideal-int +pkg syscall (netbsd-arm64), const IFT_IPSWITCH = 78 +pkg syscall (netbsd-arm64), const IFT_IPSWITCH ideal-int +pkg syscall (netbsd-arm64), const IFT_ISDN = 63 +pkg syscall (netbsd-arm64), const IFT_ISDN ideal-int +pkg syscall (netbsd-arm64), const IFT_ISDNBASIC = 20 +pkg syscall (netbsd-arm64), const IFT_ISDNBASIC ideal-int +pkg syscall (netbsd-arm64), const IFT_ISDNPRIMARY = 21 +pkg syscall (netbsd-arm64), const IFT_ISDNPRIMARY ideal-int +pkg syscall (netbsd-arm64), const IFT_ISDNS = 75 +pkg syscall (netbsd-arm64), const IFT_ISDNS ideal-int +pkg syscall (netbsd-arm64), const IFT_ISDNU = 76 +pkg syscall (netbsd-arm64), const IFT_ISDNU ideal-int +pkg syscall (netbsd-arm64), const IFT_ISO88022LLC = 41 +pkg syscall (netbsd-arm64), const IFT_ISO88022LLC ideal-int +pkg syscall (netbsd-arm64), const IFT_ISO88023 = 7 +pkg syscall (netbsd-arm64), const IFT_ISO88023 ideal-int +pkg syscall (netbsd-arm64), const IFT_ISO88024 = 8 +pkg syscall (netbsd-arm64), const IFT_ISO88024 ideal-int +pkg syscall (netbsd-arm64), const IFT_ISO88025 = 9 +pkg syscall (netbsd-arm64), const IFT_ISO88025 ideal-int +pkg syscall (netbsd-arm64), const IFT_ISO88025CRFPINT = 98 +pkg syscall (netbsd-arm64), const IFT_ISO88025CRFPINT ideal-int +pkg syscall (netbsd-arm64), const IFT_ISO88025DTR = 86 +pkg syscall (netbsd-arm64), const IFT_ISO88025DTR ideal-int +pkg syscall (netbsd-arm64), const IFT_ISO88025FIBER = 115 +pkg syscall (netbsd-arm64), const IFT_ISO88025FIBER ideal-int +pkg syscall (netbsd-arm64), const IFT_ISO88026 = 10 +pkg syscall (netbsd-arm64), const IFT_ISO88026 ideal-int +pkg syscall (netbsd-arm64), const IFT_ISUP = 179 +pkg syscall (netbsd-arm64), const IFT_ISUP ideal-int +pkg syscall (netbsd-arm64), const IFT_L2VLAN = 135 +pkg syscall (netbsd-arm64), const IFT_L2VLAN ideal-int +pkg syscall (netbsd-arm64), const IFT_L3IPVLAN = 136 +pkg syscall (netbsd-arm64), const IFT_L3IPVLAN ideal-int +pkg syscall (netbsd-arm64), const IFT_L3IPXVLAN = 137 +pkg syscall (netbsd-arm64), const IFT_L3IPXVLAN ideal-int +pkg syscall (netbsd-arm64), const IFT_LAPB = 16 +pkg syscall (netbsd-arm64), const IFT_LAPB ideal-int +pkg syscall (netbsd-arm64), const IFT_LAPD = 77 +pkg syscall (netbsd-arm64), const IFT_LAPD ideal-int +pkg syscall (netbsd-arm64), const IFT_LAPF = 119 +pkg syscall (netbsd-arm64), const IFT_LAPF ideal-int +pkg syscall (netbsd-arm64), const IFT_LINEGROUP = 210 +pkg syscall (netbsd-arm64), const IFT_LINEGROUP ideal-int +pkg syscall (netbsd-arm64), const IFT_LOCALTALK = 42 +pkg syscall (netbsd-arm64), const IFT_LOCALTALK ideal-int +pkg syscall (netbsd-arm64), const IFT_LOOP = 24 +pkg syscall (netbsd-arm64), const IFT_LOOP ideal-int +pkg syscall (netbsd-arm64), const IFT_MEDIAMAILOVERIP = 139 +pkg syscall (netbsd-arm64), const IFT_MEDIAMAILOVERIP ideal-int +pkg syscall (netbsd-arm64), const IFT_MFSIGLINK = 167 +pkg syscall (netbsd-arm64), const IFT_MFSIGLINK ideal-int +pkg syscall (netbsd-arm64), const IFT_MIOX25 = 38 +pkg syscall (netbsd-arm64), const IFT_MIOX25 ideal-int +pkg syscall (netbsd-arm64), const IFT_MODEM = 48 +pkg syscall (netbsd-arm64), const IFT_MODEM ideal-int +pkg syscall (netbsd-arm64), const IFT_MPC = 113 +pkg syscall (netbsd-arm64), const IFT_MPC ideal-int +pkg syscall (netbsd-arm64), const IFT_MPLS = 166 +pkg syscall (netbsd-arm64), const IFT_MPLS ideal-int +pkg syscall (netbsd-arm64), const IFT_MPLSTUNNEL = 150 +pkg syscall (netbsd-arm64), const IFT_MPLSTUNNEL ideal-int +pkg syscall (netbsd-arm64), const IFT_MSDSL = 143 +pkg syscall (netbsd-arm64), const IFT_MSDSL ideal-int +pkg syscall (netbsd-arm64), const IFT_MVL = 191 +pkg syscall (netbsd-arm64), const IFT_MVL ideal-int +pkg syscall (netbsd-arm64), const IFT_MYRINET = 99 +pkg syscall (netbsd-arm64), const IFT_MYRINET ideal-int +pkg syscall (netbsd-arm64), const IFT_NFAS = 175 +pkg syscall (netbsd-arm64), const IFT_NFAS ideal-int +pkg syscall (netbsd-arm64), const IFT_NSIP = 27 +pkg syscall (netbsd-arm64), const IFT_NSIP ideal-int +pkg syscall (netbsd-arm64), const IFT_OPTICALCHANNEL = 195 +pkg syscall (netbsd-arm64), const IFT_OPTICALCHANNEL ideal-int +pkg syscall (netbsd-arm64), const IFT_OPTICALTRANSPORT = 196 +pkg syscall (netbsd-arm64), const IFT_OPTICALTRANSPORT ideal-int +pkg syscall (netbsd-arm64), const IFT_OTHER = 1 +pkg syscall (netbsd-arm64), const IFT_OTHER ideal-int +pkg syscall (netbsd-arm64), const IFT_P10 = 12 +pkg syscall (netbsd-arm64), const IFT_P10 ideal-int +pkg syscall (netbsd-arm64), const IFT_P80 = 13 +pkg syscall (netbsd-arm64), const IFT_P80 ideal-int +pkg syscall (netbsd-arm64), const IFT_PARA = 34 +pkg syscall (netbsd-arm64), const IFT_PARA ideal-int +pkg syscall (netbsd-arm64), const IFT_PFLOG = 245 +pkg syscall (netbsd-arm64), const IFT_PFLOG ideal-int +pkg syscall (netbsd-arm64), const IFT_PFSYNC = 246 +pkg syscall (netbsd-arm64), const IFT_PFSYNC ideal-int +pkg syscall (netbsd-arm64), const IFT_PLC = 174 +pkg syscall (netbsd-arm64), const IFT_PLC ideal-int +pkg syscall (netbsd-arm64), const IFT_PON155 = 207 +pkg syscall (netbsd-arm64), const IFT_PON155 ideal-int +pkg syscall (netbsd-arm64), const IFT_PON622 = 208 +pkg syscall (netbsd-arm64), const IFT_PON622 ideal-int +pkg syscall (netbsd-arm64), const IFT_POS = 171 +pkg syscall (netbsd-arm64), const IFT_POS ideal-int +pkg syscall (netbsd-arm64), const IFT_PPP = 23 +pkg syscall (netbsd-arm64), const IFT_PPP ideal-int +pkg syscall (netbsd-arm64), const IFT_PPPMULTILINKBUNDLE = 108 +pkg syscall (netbsd-arm64), const IFT_PPPMULTILINKBUNDLE ideal-int +pkg syscall (netbsd-arm64), const IFT_PROPATM = 197 +pkg syscall (netbsd-arm64), const IFT_PROPATM ideal-int +pkg syscall (netbsd-arm64), const IFT_PROPBWAP2MP = 184 +pkg syscall (netbsd-arm64), const IFT_PROPBWAP2MP ideal-int +pkg syscall (netbsd-arm64), const IFT_PROPCNLS = 89 +pkg syscall (netbsd-arm64), const IFT_PROPCNLS ideal-int +pkg syscall (netbsd-arm64), const IFT_PROPDOCSWIRELESSDOWNSTREAM = 181 +pkg syscall (netbsd-arm64), const IFT_PROPDOCSWIRELESSDOWNSTREAM ideal-int +pkg syscall (netbsd-arm64), const IFT_PROPDOCSWIRELESSMACLAYER = 180 +pkg syscall (netbsd-arm64), const IFT_PROPDOCSWIRELESSMACLAYER ideal-int +pkg syscall (netbsd-arm64), const IFT_PROPDOCSWIRELESSUPSTREAM = 182 +pkg syscall (netbsd-arm64), const IFT_PROPDOCSWIRELESSUPSTREAM ideal-int +pkg syscall (netbsd-arm64), const IFT_PROPMUX = 54 +pkg syscall (netbsd-arm64), const IFT_PROPMUX ideal-int +pkg syscall (netbsd-arm64), const IFT_PROPVIRTUAL = 53 +pkg syscall (netbsd-arm64), const IFT_PROPVIRTUAL ideal-int +pkg syscall (netbsd-arm64), const IFT_PROPWIRELESSP2P = 157 +pkg syscall (netbsd-arm64), const IFT_PROPWIRELESSP2P ideal-int +pkg syscall (netbsd-arm64), const IFT_PTPSERIAL = 22 +pkg syscall (netbsd-arm64), const IFT_PTPSERIAL ideal-int +pkg syscall (netbsd-arm64), const IFT_PVC = 241 +pkg syscall (netbsd-arm64), const IFT_PVC ideal-int +pkg syscall (netbsd-arm64), const IFT_Q2931 = 201 +pkg syscall (netbsd-arm64), const IFT_Q2931 ideal-int +pkg syscall (netbsd-arm64), const IFT_QLLC = 68 +pkg syscall (netbsd-arm64), const IFT_QLLC ideal-int +pkg syscall (netbsd-arm64), const IFT_RADIOMAC = 188 +pkg syscall (netbsd-arm64), const IFT_RADIOMAC ideal-int +pkg syscall (netbsd-arm64), const IFT_RADSL = 95 +pkg syscall (netbsd-arm64), const IFT_RADSL ideal-int +pkg syscall (netbsd-arm64), const IFT_REACHDSL = 192 +pkg syscall (netbsd-arm64), const IFT_REACHDSL ideal-int +pkg syscall (netbsd-arm64), const IFT_RFC1483 = 159 +pkg syscall (netbsd-arm64), const IFT_RFC1483 ideal-int +pkg syscall (netbsd-arm64), const IFT_RS232 = 33 +pkg syscall (netbsd-arm64), const IFT_RS232 ideal-int +pkg syscall (netbsd-arm64), const IFT_RSRB = 79 +pkg syscall (netbsd-arm64), const IFT_RSRB ideal-int +pkg syscall (netbsd-arm64), const IFT_SDLC = 17 +pkg syscall (netbsd-arm64), const IFT_SDLC ideal-int +pkg syscall (netbsd-arm64), const IFT_SDSL = 96 +pkg syscall (netbsd-arm64), const IFT_SDSL ideal-int +pkg syscall (netbsd-arm64), const IFT_SHDSL = 169 +pkg syscall (netbsd-arm64), const IFT_SHDSL ideal-int +pkg syscall (netbsd-arm64), const IFT_SIP = 31 +pkg syscall (netbsd-arm64), const IFT_SIP ideal-int +pkg syscall (netbsd-arm64), const IFT_SIPSIG = 204 +pkg syscall (netbsd-arm64), const IFT_SIPSIG ideal-int +pkg syscall (netbsd-arm64), const IFT_SIPTG = 203 +pkg syscall (netbsd-arm64), const IFT_SIPTG ideal-int +pkg syscall (netbsd-arm64), const IFT_SLIP = 28 +pkg syscall (netbsd-arm64), const IFT_SLIP ideal-int +pkg syscall (netbsd-arm64), const IFT_SMDSDXI = 43 +pkg syscall (netbsd-arm64), const IFT_SMDSDXI ideal-int +pkg syscall (netbsd-arm64), const IFT_SMDSICIP = 52 +pkg syscall (netbsd-arm64), const IFT_SMDSICIP ideal-int +pkg syscall (netbsd-arm64), const IFT_SONET = 39 +pkg syscall (netbsd-arm64), const IFT_SONET ideal-int +pkg syscall (netbsd-arm64), const IFT_SONETOVERHEADCHANNEL = 185 +pkg syscall (netbsd-arm64), const IFT_SONETOVERHEADCHANNEL ideal-int +pkg syscall (netbsd-arm64), const IFT_SONETPATH = 50 +pkg syscall (netbsd-arm64), const IFT_SONETPATH ideal-int +pkg syscall (netbsd-arm64), const IFT_SONETVT = 51 +pkg syscall (netbsd-arm64), const IFT_SONETVT ideal-int +pkg syscall (netbsd-arm64), const IFT_SRP = 151 +pkg syscall (netbsd-arm64), const IFT_SRP ideal-int +pkg syscall (netbsd-arm64), const IFT_SS7SIGLINK = 156 +pkg syscall (netbsd-arm64), const IFT_SS7SIGLINK ideal-int +pkg syscall (netbsd-arm64), const IFT_STACKTOSTACK = 111 +pkg syscall (netbsd-arm64), const IFT_STACKTOSTACK ideal-int +pkg syscall (netbsd-arm64), const IFT_STARLAN = 11 +pkg syscall (netbsd-arm64), const IFT_STARLAN ideal-int +pkg syscall (netbsd-arm64), const IFT_STF = 215 +pkg syscall (netbsd-arm64), const IFT_STF ideal-int +pkg syscall (netbsd-arm64), const IFT_T1 = 18 +pkg syscall (netbsd-arm64), const IFT_T1 ideal-int +pkg syscall (netbsd-arm64), const IFT_TDLC = 116 +pkg syscall (netbsd-arm64), const IFT_TDLC ideal-int +pkg syscall (netbsd-arm64), const IFT_TELINK = 200 +pkg syscall (netbsd-arm64), const IFT_TELINK ideal-int +pkg syscall (netbsd-arm64), const IFT_TERMPAD = 91 +pkg syscall (netbsd-arm64), const IFT_TERMPAD ideal-int +pkg syscall (netbsd-arm64), const IFT_TR008 = 176 +pkg syscall (netbsd-arm64), const IFT_TR008 ideal-int +pkg syscall (netbsd-arm64), const IFT_TRANSPHDLC = 123 +pkg syscall (netbsd-arm64), const IFT_TRANSPHDLC ideal-int +pkg syscall (netbsd-arm64), const IFT_TUNNEL = 131 +pkg syscall (netbsd-arm64), const IFT_TUNNEL ideal-int +pkg syscall (netbsd-arm64), const IFT_ULTRA = 29 +pkg syscall (netbsd-arm64), const IFT_ULTRA ideal-int +pkg syscall (netbsd-arm64), const IFT_USB = 160 +pkg syscall (netbsd-arm64), const IFT_USB ideal-int +pkg syscall (netbsd-arm64), const IFT_V11 = 64 +pkg syscall (netbsd-arm64), const IFT_V11 ideal-int +pkg syscall (netbsd-arm64), const IFT_V35 = 45 +pkg syscall (netbsd-arm64), const IFT_V35 ideal-int +pkg syscall (netbsd-arm64), const IFT_V36 = 65 +pkg syscall (netbsd-arm64), const IFT_V36 ideal-int +pkg syscall (netbsd-arm64), const IFT_V37 = 120 +pkg syscall (netbsd-arm64), const IFT_V37 ideal-int +pkg syscall (netbsd-arm64), const IFT_VDSL = 97 +pkg syscall (netbsd-arm64), const IFT_VDSL ideal-int +pkg syscall (netbsd-arm64), const IFT_VIRTUALIPADDRESS = 112 +pkg syscall (netbsd-arm64), const IFT_VIRTUALIPADDRESS ideal-int +pkg syscall (netbsd-arm64), const IFT_VIRTUALTG = 202 +pkg syscall (netbsd-arm64), const IFT_VIRTUALTG ideal-int +pkg syscall (netbsd-arm64), const IFT_VOICEDID = 213 +pkg syscall (netbsd-arm64), const IFT_VOICEDID ideal-int +pkg syscall (netbsd-arm64), const IFT_VOICEEM = 100 +pkg syscall (netbsd-arm64), const IFT_VOICEEM ideal-int +pkg syscall (netbsd-arm64), const IFT_VOICEEMFGD = 211 +pkg syscall (netbsd-arm64), const IFT_VOICEEMFGD ideal-int +pkg syscall (netbsd-arm64), const IFT_VOICEENCAP = 103 +pkg syscall (netbsd-arm64), const IFT_VOICEENCAP ideal-int +pkg syscall (netbsd-arm64), const IFT_VOICEFGDEANA = 212 +pkg syscall (netbsd-arm64), const IFT_VOICEFGDEANA ideal-int +pkg syscall (netbsd-arm64), const IFT_VOICEFXO = 101 +pkg syscall (netbsd-arm64), const IFT_VOICEFXO ideal-int +pkg syscall (netbsd-arm64), const IFT_VOICEFXS = 102 +pkg syscall (netbsd-arm64), const IFT_VOICEFXS ideal-int +pkg syscall (netbsd-arm64), const IFT_VOICEOVERATM = 152 +pkg syscall (netbsd-arm64), const IFT_VOICEOVERATM ideal-int +pkg syscall (netbsd-arm64), const IFT_VOICEOVERCABLE = 198 +pkg syscall (netbsd-arm64), const IFT_VOICEOVERCABLE ideal-int +pkg syscall (netbsd-arm64), const IFT_VOICEOVERFRAMERELAY = 153 +pkg syscall (netbsd-arm64), const IFT_VOICEOVERFRAMERELAY ideal-int +pkg syscall (netbsd-arm64), const IFT_VOICEOVERIP = 104 +pkg syscall (netbsd-arm64), const IFT_VOICEOVERIP ideal-int +pkg syscall (netbsd-arm64), const IFT_X213 = 93 +pkg syscall (netbsd-arm64), const IFT_X213 ideal-int +pkg syscall (netbsd-arm64), const IFT_X25 = 5 +pkg syscall (netbsd-arm64), const IFT_X25 ideal-int +pkg syscall (netbsd-arm64), const IFT_X25DDN = 4 +pkg syscall (netbsd-arm64), const IFT_X25DDN ideal-int +pkg syscall (netbsd-arm64), const IFT_X25HUNTGROUP = 122 +pkg syscall (netbsd-arm64), const IFT_X25HUNTGROUP ideal-int +pkg syscall (netbsd-arm64), const IFT_X25MLP = 121 +pkg syscall (netbsd-arm64), const IFT_X25MLP ideal-int +pkg syscall (netbsd-arm64), const IFT_X25PLE = 40 +pkg syscall (netbsd-arm64), const IFT_X25PLE ideal-int +pkg syscall (netbsd-arm64), const IFT_XETHER = 26 +pkg syscall (netbsd-arm64), const IFT_XETHER ideal-int +pkg syscall (netbsd-arm64), const IGNBRK = 1 +pkg syscall (netbsd-arm64), const IGNBRK ideal-int +pkg syscall (netbsd-arm64), const IGNCR = 128 +pkg syscall (netbsd-arm64), const IGNCR ideal-int +pkg syscall (netbsd-arm64), const IGNPAR = 4 +pkg syscall (netbsd-arm64), const IGNPAR ideal-int +pkg syscall (netbsd-arm64), const IMAXBEL = 8192 +pkg syscall (netbsd-arm64), const IMAXBEL ideal-int +pkg syscall (netbsd-arm64), const INLCR = 64 +pkg syscall (netbsd-arm64), const INLCR ideal-int +pkg syscall (netbsd-arm64), const INPCK = 16 +pkg syscall (netbsd-arm64), const INPCK ideal-int +pkg syscall (netbsd-arm64), const IN_CLASSA_HOST = 16777215 +pkg syscall (netbsd-arm64), const IN_CLASSA_HOST ideal-int +pkg syscall (netbsd-arm64), const IN_CLASSA_MAX = 128 +pkg syscall (netbsd-arm64), const IN_CLASSA_MAX ideal-int +pkg syscall (netbsd-arm64), const IN_CLASSA_NET = 4278190080 +pkg syscall (netbsd-arm64), const IN_CLASSA_NET ideal-int +pkg syscall (netbsd-arm64), const IN_CLASSA_NSHIFT = 24 +pkg syscall (netbsd-arm64), const IN_CLASSA_NSHIFT ideal-int +pkg syscall (netbsd-arm64), const IN_CLASSB_HOST = 65535 +pkg syscall (netbsd-arm64), const IN_CLASSB_HOST ideal-int +pkg syscall (netbsd-arm64), const IN_CLASSB_MAX = 65536 +pkg syscall (netbsd-arm64), const IN_CLASSB_MAX ideal-int +pkg syscall (netbsd-arm64), const IN_CLASSB_NET = 4294901760 +pkg syscall (netbsd-arm64), const IN_CLASSB_NET ideal-int +pkg syscall (netbsd-arm64), const IN_CLASSB_NSHIFT = 16 +pkg syscall (netbsd-arm64), const IN_CLASSB_NSHIFT ideal-int +pkg syscall (netbsd-arm64), const IN_CLASSC_HOST = 255 +pkg syscall (netbsd-arm64), const IN_CLASSC_HOST ideal-int +pkg syscall (netbsd-arm64), const IN_CLASSC_NET = 4294967040 +pkg syscall (netbsd-arm64), const IN_CLASSC_NET ideal-int +pkg syscall (netbsd-arm64), const IN_CLASSC_NSHIFT = 8 +pkg syscall (netbsd-arm64), const IN_CLASSC_NSHIFT ideal-int +pkg syscall (netbsd-arm64), const IN_CLASSD_HOST = 268435455 +pkg syscall (netbsd-arm64), const IN_CLASSD_HOST ideal-int +pkg syscall (netbsd-arm64), const IN_CLASSD_NET = 4026531840 +pkg syscall (netbsd-arm64), const IN_CLASSD_NET ideal-int +pkg syscall (netbsd-arm64), const IN_CLASSD_NSHIFT = 28 +pkg syscall (netbsd-arm64), const IN_CLASSD_NSHIFT ideal-int +pkg syscall (netbsd-arm64), const IN_LOOPBACKNET = 127 +pkg syscall (netbsd-arm64), const IN_LOOPBACKNET ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_AH = 51 +pkg syscall (netbsd-arm64), const IPPROTO_AH ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_CARP = 112 +pkg syscall (netbsd-arm64), const IPPROTO_CARP ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_DONE = 257 +pkg syscall (netbsd-arm64), const IPPROTO_DONE ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_DSTOPTS = 60 +pkg syscall (netbsd-arm64), const IPPROTO_DSTOPTS ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_EGP = 8 +pkg syscall (netbsd-arm64), const IPPROTO_EGP ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_ENCAP = 98 +pkg syscall (netbsd-arm64), const IPPROTO_ENCAP ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_EON = 80 +pkg syscall (netbsd-arm64), const IPPROTO_EON ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_ESP = 50 +pkg syscall (netbsd-arm64), const IPPROTO_ESP ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_ETHERIP = 97 +pkg syscall (netbsd-arm64), const IPPROTO_ETHERIP ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_FRAGMENT = 44 +pkg syscall (netbsd-arm64), const IPPROTO_FRAGMENT ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_GGP = 3 +pkg syscall (netbsd-arm64), const IPPROTO_GGP ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_GRE = 47 +pkg syscall (netbsd-arm64), const IPPROTO_GRE ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_HOPOPTS = 0 +pkg syscall (netbsd-arm64), const IPPROTO_HOPOPTS ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_ICMP = 1 +pkg syscall (netbsd-arm64), const IPPROTO_ICMP ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_ICMPV6 = 58 +pkg syscall (netbsd-arm64), const IPPROTO_ICMPV6 ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_IDP = 22 +pkg syscall (netbsd-arm64), const IPPROTO_IDP ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_IGMP = 2 +pkg syscall (netbsd-arm64), const IPPROTO_IGMP ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_IPCOMP = 108 +pkg syscall (netbsd-arm64), const IPPROTO_IPCOMP ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_IPIP = 4 +pkg syscall (netbsd-arm64), const IPPROTO_IPIP ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_IPV4 = 4 +pkg syscall (netbsd-arm64), const IPPROTO_IPV4 ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_IPV6_ICMP = 58 +pkg syscall (netbsd-arm64), const IPPROTO_IPV6_ICMP ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_MAX = 256 +pkg syscall (netbsd-arm64), const IPPROTO_MAX ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_MAXID = 52 +pkg syscall (netbsd-arm64), const IPPROTO_MAXID ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_MOBILE = 55 +pkg syscall (netbsd-arm64), const IPPROTO_MOBILE ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_NONE = 59 +pkg syscall (netbsd-arm64), const IPPROTO_NONE ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_PFSYNC = 240 +pkg syscall (netbsd-arm64), const IPPROTO_PFSYNC ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_PIM = 103 +pkg syscall (netbsd-arm64), const IPPROTO_PIM ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_PUP = 12 +pkg syscall (netbsd-arm64), const IPPROTO_PUP ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_RAW = 255 +pkg syscall (netbsd-arm64), const IPPROTO_RAW ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_ROUTING = 43 +pkg syscall (netbsd-arm64), const IPPROTO_ROUTING ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_RSVP = 46 +pkg syscall (netbsd-arm64), const IPPROTO_RSVP ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_TP = 29 +pkg syscall (netbsd-arm64), const IPPROTO_TP ideal-int +pkg syscall (netbsd-arm64), const IPPROTO_VRRP = 112 +pkg syscall (netbsd-arm64), const IPPROTO_VRRP ideal-int +pkg syscall (netbsd-arm64), const IPV6_CHECKSUM = 26 +pkg syscall (netbsd-arm64), const IPV6_CHECKSUM ideal-int +pkg syscall (netbsd-arm64), const IPV6_DEFAULT_MULTICAST_HOPS = 1 +pkg syscall (netbsd-arm64), const IPV6_DEFAULT_MULTICAST_HOPS ideal-int +pkg syscall (netbsd-arm64), const IPV6_DEFAULT_MULTICAST_LOOP = 1 +pkg syscall (netbsd-arm64), const IPV6_DEFAULT_MULTICAST_LOOP ideal-int +pkg syscall (netbsd-arm64), const IPV6_DEFHLIM = 64 +pkg syscall (netbsd-arm64), const IPV6_DEFHLIM ideal-int +pkg syscall (netbsd-arm64), const IPV6_DONTFRAG = 62 +pkg syscall (netbsd-arm64), const IPV6_DONTFRAG ideal-int +pkg syscall (netbsd-arm64), const IPV6_DSTOPTS = 50 +pkg syscall (netbsd-arm64), const IPV6_DSTOPTS ideal-int +pkg syscall (netbsd-arm64), const IPV6_FAITH = 29 +pkg syscall (netbsd-arm64), const IPV6_FAITH ideal-int +pkg syscall (netbsd-arm64), const IPV6_FLOWINFO_MASK = 4294967055 +pkg syscall (netbsd-arm64), const IPV6_FLOWINFO_MASK ideal-int +pkg syscall (netbsd-arm64), const IPV6_FLOWLABEL_MASK = 4294905600 +pkg syscall (netbsd-arm64), const IPV6_FLOWLABEL_MASK ideal-int +pkg syscall (netbsd-arm64), const IPV6_FRAGTTL = 120 +pkg syscall (netbsd-arm64), const IPV6_FRAGTTL ideal-int +pkg syscall (netbsd-arm64), const IPV6_HLIMDEC = 1 +pkg syscall (netbsd-arm64), const IPV6_HLIMDEC ideal-int +pkg syscall (netbsd-arm64), const IPV6_HOPLIMIT = 47 +pkg syscall (netbsd-arm64), const IPV6_HOPLIMIT ideal-int +pkg syscall (netbsd-arm64), const IPV6_HOPOPTS = 49 +pkg syscall (netbsd-arm64), const IPV6_HOPOPTS ideal-int +pkg syscall (netbsd-arm64), const IPV6_IPSEC_POLICY = 28 +pkg syscall (netbsd-arm64), const IPV6_IPSEC_POLICY ideal-int +pkg syscall (netbsd-arm64), const IPV6_JOIN_GROUP = 12 +pkg syscall (netbsd-arm64), const IPV6_LEAVE_GROUP = 13 +pkg syscall (netbsd-arm64), const IPV6_MAXHLIM = 255 +pkg syscall (netbsd-arm64), const IPV6_MAXHLIM ideal-int +pkg syscall (netbsd-arm64), const IPV6_MAXPACKET = 65535 +pkg syscall (netbsd-arm64), const IPV6_MAXPACKET ideal-int +pkg syscall (netbsd-arm64), const IPV6_MMTU = 1280 +pkg syscall (netbsd-arm64), const IPV6_MMTU ideal-int +pkg syscall (netbsd-arm64), const IPV6_MULTICAST_HOPS = 10 +pkg syscall (netbsd-arm64), const IPV6_MULTICAST_IF = 9 +pkg syscall (netbsd-arm64), const IPV6_MULTICAST_LOOP = 11 +pkg syscall (netbsd-arm64), const IPV6_NEXTHOP = 48 +pkg syscall (netbsd-arm64), const IPV6_NEXTHOP ideal-int +pkg syscall (netbsd-arm64), const IPV6_PATHMTU = 44 +pkg syscall (netbsd-arm64), const IPV6_PATHMTU ideal-int +pkg syscall (netbsd-arm64), const IPV6_PKTINFO = 46 +pkg syscall (netbsd-arm64), const IPV6_PKTINFO ideal-int +pkg syscall (netbsd-arm64), const IPV6_PORTRANGE = 14 +pkg syscall (netbsd-arm64), const IPV6_PORTRANGE ideal-int +pkg syscall (netbsd-arm64), const IPV6_PORTRANGE_DEFAULT = 0 +pkg syscall (netbsd-arm64), const IPV6_PORTRANGE_DEFAULT ideal-int +pkg syscall (netbsd-arm64), const IPV6_PORTRANGE_HIGH = 1 +pkg syscall (netbsd-arm64), const IPV6_PORTRANGE_HIGH ideal-int +pkg syscall (netbsd-arm64), const IPV6_PORTRANGE_LOW = 2 +pkg syscall (netbsd-arm64), const IPV6_PORTRANGE_LOW ideal-int +pkg syscall (netbsd-arm64), const IPV6_RECVDSTOPTS = 40 +pkg syscall (netbsd-arm64), const IPV6_RECVDSTOPTS ideal-int +pkg syscall (netbsd-arm64), const IPV6_RECVHOPLIMIT = 37 +pkg syscall (netbsd-arm64), const IPV6_RECVHOPLIMIT ideal-int +pkg syscall (netbsd-arm64), const IPV6_RECVHOPOPTS = 39 +pkg syscall (netbsd-arm64), const IPV6_RECVHOPOPTS ideal-int +pkg syscall (netbsd-arm64), const IPV6_RECVPATHMTU = 43 +pkg syscall (netbsd-arm64), const IPV6_RECVPATHMTU ideal-int +pkg syscall (netbsd-arm64), const IPV6_RECVPKTINFO = 36 +pkg syscall (netbsd-arm64), const IPV6_RECVPKTINFO ideal-int +pkg syscall (netbsd-arm64), const IPV6_RECVRTHDR = 38 +pkg syscall (netbsd-arm64), const IPV6_RECVRTHDR ideal-int +pkg syscall (netbsd-arm64), const IPV6_RECVTCLASS = 57 +pkg syscall (netbsd-arm64), const IPV6_RECVTCLASS ideal-int +pkg syscall (netbsd-arm64), const IPV6_RTHDR = 51 +pkg syscall (netbsd-arm64), const IPV6_RTHDR ideal-int +pkg syscall (netbsd-arm64), const IPV6_RTHDRDSTOPTS = 35 +pkg syscall (netbsd-arm64), const IPV6_RTHDRDSTOPTS ideal-int +pkg syscall (netbsd-arm64), const IPV6_RTHDR_LOOSE = 0 +pkg syscall (netbsd-arm64), const IPV6_RTHDR_LOOSE ideal-int +pkg syscall (netbsd-arm64), const IPV6_RTHDR_STRICT = 1 +pkg syscall (netbsd-arm64), const IPV6_RTHDR_STRICT ideal-int +pkg syscall (netbsd-arm64), const IPV6_RTHDR_TYPE_0 = 0 +pkg syscall (netbsd-arm64), const IPV6_RTHDR_TYPE_0 ideal-int +pkg syscall (netbsd-arm64), const IPV6_SOCKOPT_RESERVED1 = 3 +pkg syscall (netbsd-arm64), const IPV6_SOCKOPT_RESERVED1 ideal-int +pkg syscall (netbsd-arm64), const IPV6_TCLASS = 61 +pkg syscall (netbsd-arm64), const IPV6_TCLASS ideal-int +pkg syscall (netbsd-arm64), const IPV6_UNICAST_HOPS = 4 +pkg syscall (netbsd-arm64), const IPV6_USE_MIN_MTU = 42 +pkg syscall (netbsd-arm64), const IPV6_USE_MIN_MTU ideal-int +pkg syscall (netbsd-arm64), const IPV6_V6ONLY = 27 +pkg syscall (netbsd-arm64), const IPV6_VERSION = 96 +pkg syscall (netbsd-arm64), const IPV6_VERSION ideal-int +pkg syscall (netbsd-arm64), const IPV6_VERSION_MASK = 240 +pkg syscall (netbsd-arm64), const IPV6_VERSION_MASK ideal-int +pkg syscall (netbsd-arm64), const IP_ADD_MEMBERSHIP = 12 +pkg syscall (netbsd-arm64), const IP_DEFAULT_MULTICAST_LOOP = 1 +pkg syscall (netbsd-arm64), const IP_DEFAULT_MULTICAST_LOOP ideal-int +pkg syscall (netbsd-arm64), const IP_DEFAULT_MULTICAST_TTL = 1 +pkg syscall (netbsd-arm64), const IP_DEFAULT_MULTICAST_TTL ideal-int +pkg syscall (netbsd-arm64), const IP_DF = 16384 +pkg syscall (netbsd-arm64), const IP_DF ideal-int +pkg syscall (netbsd-arm64), const IP_DROP_MEMBERSHIP = 13 +pkg syscall (netbsd-arm64), const IP_EF = 32768 +pkg syscall (netbsd-arm64), const IP_EF ideal-int +pkg syscall (netbsd-arm64), const IP_ERRORMTU = 21 +pkg syscall (netbsd-arm64), const IP_ERRORMTU ideal-int +pkg syscall (netbsd-arm64), const IP_HDRINCL = 2 +pkg syscall (netbsd-arm64), const IP_HDRINCL ideal-int +pkg syscall (netbsd-arm64), const IP_IPSEC_POLICY = 22 +pkg syscall (netbsd-arm64), const IP_IPSEC_POLICY ideal-int +pkg syscall (netbsd-arm64), const IP_MAXPACKET = 65535 +pkg syscall (netbsd-arm64), const IP_MAXPACKET ideal-int +pkg syscall (netbsd-arm64), const IP_MAX_MEMBERSHIPS = 20 +pkg syscall (netbsd-arm64), const IP_MAX_MEMBERSHIPS ideal-int +pkg syscall (netbsd-arm64), const IP_MF = 8192 +pkg syscall (netbsd-arm64), const IP_MF ideal-int +pkg syscall (netbsd-arm64), const IP_MINFRAGSIZE = 69 +pkg syscall (netbsd-arm64), const IP_MINFRAGSIZE ideal-int +pkg syscall (netbsd-arm64), const IP_MINTTL = 24 +pkg syscall (netbsd-arm64), const IP_MINTTL ideal-int +pkg syscall (netbsd-arm64), const IP_MSS = 576 +pkg syscall (netbsd-arm64), const IP_MSS ideal-int +pkg syscall (netbsd-arm64), const IP_MULTICAST_IF = 9 +pkg syscall (netbsd-arm64), const IP_MULTICAST_LOOP = 11 +pkg syscall (netbsd-arm64), const IP_MULTICAST_TTL = 10 +pkg syscall (netbsd-arm64), const IP_OFFMASK = 8191 +pkg syscall (netbsd-arm64), const IP_OFFMASK ideal-int +pkg syscall (netbsd-arm64), const IP_OPTIONS = 1 +pkg syscall (netbsd-arm64), const IP_OPTIONS ideal-int +pkg syscall (netbsd-arm64), const IP_PORTRANGE = 19 +pkg syscall (netbsd-arm64), const IP_PORTRANGE ideal-int +pkg syscall (netbsd-arm64), const IP_PORTRANGE_DEFAULT = 0 +pkg syscall (netbsd-arm64), const IP_PORTRANGE_DEFAULT ideal-int +pkg syscall (netbsd-arm64), const IP_PORTRANGE_HIGH = 1 +pkg syscall (netbsd-arm64), const IP_PORTRANGE_HIGH ideal-int +pkg syscall (netbsd-arm64), const IP_PORTRANGE_LOW = 2 +pkg syscall (netbsd-arm64), const IP_PORTRANGE_LOW ideal-int +pkg syscall (netbsd-arm64), const IP_RECVDSTADDR = 7 +pkg syscall (netbsd-arm64), const IP_RECVDSTADDR ideal-int +pkg syscall (netbsd-arm64), const IP_RECVIF = 20 +pkg syscall (netbsd-arm64), const IP_RECVIF ideal-int +pkg syscall (netbsd-arm64), const IP_RECVOPTS = 5 +pkg syscall (netbsd-arm64), const IP_RECVOPTS ideal-int +pkg syscall (netbsd-arm64), const IP_RECVRETOPTS = 6 +pkg syscall (netbsd-arm64), const IP_RECVRETOPTS ideal-int +pkg syscall (netbsd-arm64), const IP_RECVTTL = 23 +pkg syscall (netbsd-arm64), const IP_RECVTTL ideal-int +pkg syscall (netbsd-arm64), const IP_RETOPTS = 8 +pkg syscall (netbsd-arm64), const IP_RETOPTS ideal-int +pkg syscall (netbsd-arm64), const IP_RF = 32768 +pkg syscall (netbsd-arm64), const IP_RF ideal-int +pkg syscall (netbsd-arm64), const IP_TOS = 3 +pkg syscall (netbsd-arm64), const IP_TTL = 4 +pkg syscall (netbsd-arm64), const ISIG = 128 +pkg syscall (netbsd-arm64), const ISIG ideal-int +pkg syscall (netbsd-arm64), const ISTRIP = 32 +pkg syscall (netbsd-arm64), const ISTRIP ideal-int +pkg syscall (netbsd-arm64), const IXANY = 2048 +pkg syscall (netbsd-arm64), const IXANY ideal-int +pkg syscall (netbsd-arm64), const IXOFF = 1024 +pkg syscall (netbsd-arm64), const IXOFF ideal-int +pkg syscall (netbsd-arm64), const IXON = 512 +pkg syscall (netbsd-arm64), const IXON ideal-int +pkg syscall (netbsd-arm64), const LOCK_EX = 2 +pkg syscall (netbsd-arm64), const LOCK_EX ideal-int +pkg syscall (netbsd-arm64), const LOCK_NB = 4 +pkg syscall (netbsd-arm64), const LOCK_NB ideal-int +pkg syscall (netbsd-arm64), const LOCK_SH = 1 +pkg syscall (netbsd-arm64), const LOCK_SH ideal-int +pkg syscall (netbsd-arm64), const LOCK_UN = 8 +pkg syscall (netbsd-arm64), const LOCK_UN ideal-int +pkg syscall (netbsd-arm64), const MADV_DONTNEED = 4 +pkg syscall (netbsd-arm64), const MADV_DONTNEED ideal-int +pkg syscall (netbsd-arm64), const MADV_FREE = 6 +pkg syscall (netbsd-arm64), const MADV_FREE ideal-int +pkg syscall (netbsd-arm64), const MADV_NORMAL = 0 +pkg syscall (netbsd-arm64), const MADV_NORMAL ideal-int +pkg syscall (netbsd-arm64), const MADV_RANDOM = 1 +pkg syscall (netbsd-arm64), const MADV_RANDOM ideal-int +pkg syscall (netbsd-arm64), const MADV_SEQUENTIAL = 2 +pkg syscall (netbsd-arm64), const MADV_SEQUENTIAL ideal-int +pkg syscall (netbsd-arm64), const MADV_SPACEAVAIL = 5 +pkg syscall (netbsd-arm64), const MADV_SPACEAVAIL ideal-int +pkg syscall (netbsd-arm64), const MADV_WILLNEED = 3 +pkg syscall (netbsd-arm64), const MADV_WILLNEED ideal-int +pkg syscall (netbsd-arm64), const MAP_ALIGNMENT_16MB = 402653184 +pkg syscall (netbsd-arm64), const MAP_ALIGNMENT_16MB ideal-int +pkg syscall (netbsd-arm64), const MAP_ALIGNMENT_1TB = 671088640 +pkg syscall (netbsd-arm64), const MAP_ALIGNMENT_1TB ideal-int +pkg syscall (netbsd-arm64), const MAP_ALIGNMENT_256TB = 805306368 +pkg syscall (netbsd-arm64), const MAP_ALIGNMENT_256TB ideal-int +pkg syscall (netbsd-arm64), const MAP_ALIGNMENT_4GB = 536870912 +pkg syscall (netbsd-arm64), const MAP_ALIGNMENT_4GB ideal-int +pkg syscall (netbsd-arm64), const MAP_ALIGNMENT_64KB = 268435456 +pkg syscall (netbsd-arm64), const MAP_ALIGNMENT_64KB ideal-int +pkg syscall (netbsd-arm64), const MAP_ALIGNMENT_64PB = 939524096 +pkg syscall (netbsd-arm64), const MAP_ALIGNMENT_64PB ideal-int +pkg syscall (netbsd-arm64), const MAP_ALIGNMENT_MASK = -16777216 +pkg syscall (netbsd-arm64), const MAP_ALIGNMENT_MASK ideal-int +pkg syscall (netbsd-arm64), const MAP_ALIGNMENT_SHIFT = 24 +pkg syscall (netbsd-arm64), const MAP_ALIGNMENT_SHIFT ideal-int +pkg syscall (netbsd-arm64), const MAP_ANON = 4096 +pkg syscall (netbsd-arm64), const MAP_ANON ideal-int +pkg syscall (netbsd-arm64), const MAP_FILE = 0 +pkg syscall (netbsd-arm64), const MAP_FILE ideal-int +pkg syscall (netbsd-arm64), const MAP_FIXED = 16 +pkg syscall (netbsd-arm64), const MAP_FIXED ideal-int +pkg syscall (netbsd-arm64), const MAP_HASSEMAPHORE = 512 +pkg syscall (netbsd-arm64), const MAP_HASSEMAPHORE ideal-int +pkg syscall (netbsd-arm64), const MAP_INHERIT = 128 +pkg syscall (netbsd-arm64), const MAP_INHERIT ideal-int +pkg syscall (netbsd-arm64), const MAP_INHERIT_COPY = 1 +pkg syscall (netbsd-arm64), const MAP_INHERIT_COPY ideal-int +pkg syscall (netbsd-arm64), const MAP_INHERIT_DEFAULT = 1 +pkg syscall (netbsd-arm64), const MAP_INHERIT_DEFAULT ideal-int +pkg syscall (netbsd-arm64), const MAP_INHERIT_DONATE_COPY = 3 +pkg syscall (netbsd-arm64), const MAP_INHERIT_DONATE_COPY ideal-int +pkg syscall (netbsd-arm64), const MAP_INHERIT_NONE = 2 +pkg syscall (netbsd-arm64), const MAP_INHERIT_NONE ideal-int +pkg syscall (netbsd-arm64), const MAP_INHERIT_SHARE = 0 +pkg syscall (netbsd-arm64), const MAP_INHERIT_SHARE ideal-int +pkg syscall (netbsd-arm64), const MAP_NORESERVE = 64 +pkg syscall (netbsd-arm64), const MAP_NORESERVE ideal-int +pkg syscall (netbsd-arm64), const MAP_PRIVATE = 2 +pkg syscall (netbsd-arm64), const MAP_PRIVATE ideal-int +pkg syscall (netbsd-arm64), const MAP_RENAME = 32 +pkg syscall (netbsd-arm64), const MAP_RENAME ideal-int +pkg syscall (netbsd-arm64), const MAP_SHARED = 1 +pkg syscall (netbsd-arm64), const MAP_SHARED ideal-int +pkg syscall (netbsd-arm64), const MAP_STACK = 8192 +pkg syscall (netbsd-arm64), const MAP_STACK ideal-int +pkg syscall (netbsd-arm64), const MAP_TRYFIXED = 1024 +pkg syscall (netbsd-arm64), const MAP_TRYFIXED ideal-int +pkg syscall (netbsd-arm64), const MAP_WIRED = 2048 +pkg syscall (netbsd-arm64), const MAP_WIRED ideal-int +pkg syscall (netbsd-arm64), const MCL_CURRENT = 1 +pkg syscall (netbsd-arm64), const MCL_CURRENT ideal-int +pkg syscall (netbsd-arm64), const MCL_FUTURE = 2 +pkg syscall (netbsd-arm64), const MCL_FUTURE ideal-int +pkg syscall (netbsd-arm64), const MSG_BCAST = 256 +pkg syscall (netbsd-arm64), const MSG_BCAST ideal-int +pkg syscall (netbsd-arm64), const MSG_CMSG_CLOEXEC = 2048 +pkg syscall (netbsd-arm64), const MSG_CMSG_CLOEXEC ideal-int +pkg syscall (netbsd-arm64), const MSG_CONTROLMBUF = 33554432 +pkg syscall (netbsd-arm64), const MSG_CONTROLMBUF ideal-int +pkg syscall (netbsd-arm64), const MSG_CTRUNC = 32 +pkg syscall (netbsd-arm64), const MSG_CTRUNC ideal-int +pkg syscall (netbsd-arm64), const MSG_DONTROUTE = 4 +pkg syscall (netbsd-arm64), const MSG_DONTROUTE ideal-int +pkg syscall (netbsd-arm64), const MSG_DONTWAIT = 128 +pkg syscall (netbsd-arm64), const MSG_DONTWAIT ideal-int +pkg syscall (netbsd-arm64), const MSG_EOR = 8 +pkg syscall (netbsd-arm64), const MSG_EOR ideal-int +pkg syscall (netbsd-arm64), const MSG_IOVUSRSPACE = 67108864 +pkg syscall (netbsd-arm64), const MSG_IOVUSRSPACE ideal-int +pkg syscall (netbsd-arm64), const MSG_LENUSRSPACE = 134217728 +pkg syscall (netbsd-arm64), const MSG_LENUSRSPACE ideal-int +pkg syscall (netbsd-arm64), const MSG_MCAST = 512 +pkg syscall (netbsd-arm64), const MSG_MCAST ideal-int +pkg syscall (netbsd-arm64), const MSG_NAMEMBUF = 16777216 +pkg syscall (netbsd-arm64), const MSG_NAMEMBUF ideal-int +pkg syscall (netbsd-arm64), const MSG_NBIO = 4096 +pkg syscall (netbsd-arm64), const MSG_NBIO ideal-int +pkg syscall (netbsd-arm64), const MSG_NOSIGNAL = 1024 +pkg syscall (netbsd-arm64), const MSG_NOSIGNAL ideal-int +pkg syscall (netbsd-arm64), const MSG_OOB = 1 +pkg syscall (netbsd-arm64), const MSG_OOB ideal-int +pkg syscall (netbsd-arm64), const MSG_PEEK = 2 +pkg syscall (netbsd-arm64), const MSG_PEEK ideal-int +pkg syscall (netbsd-arm64), const MSG_TRUNC = 16 +pkg syscall (netbsd-arm64), const MSG_TRUNC ideal-int +pkg syscall (netbsd-arm64), const MSG_USERFLAGS = 16777215 +pkg syscall (netbsd-arm64), const MSG_USERFLAGS ideal-int +pkg syscall (netbsd-arm64), const MSG_WAITALL = 64 +pkg syscall (netbsd-arm64), const MSG_WAITALL ideal-int +pkg syscall (netbsd-arm64), const MS_ASYNC = 1 +pkg syscall (netbsd-arm64), const MS_ASYNC ideal-int +pkg syscall (netbsd-arm64), const MS_INVALIDATE = 2 +pkg syscall (netbsd-arm64), const MS_INVALIDATE ideal-int +pkg syscall (netbsd-arm64), const MS_SYNC = 4 +pkg syscall (netbsd-arm64), const MS_SYNC ideal-int +pkg syscall (netbsd-arm64), const NAME_MAX = 511 +pkg syscall (netbsd-arm64), const NAME_MAX ideal-int +pkg syscall (netbsd-arm64), const NET_RT_DUMP = 1 +pkg syscall (netbsd-arm64), const NET_RT_DUMP ideal-int +pkg syscall (netbsd-arm64), const NET_RT_FLAGS = 2 +pkg syscall (netbsd-arm64), const NET_RT_FLAGS ideal-int +pkg syscall (netbsd-arm64), const NET_RT_IFLIST = 5 +pkg syscall (netbsd-arm64), const NET_RT_IFLIST ideal-int +pkg syscall (netbsd-arm64), const NET_RT_MAXID = 6 +pkg syscall (netbsd-arm64), const NET_RT_MAXID ideal-int +pkg syscall (netbsd-arm64), const NET_RT_OIFLIST = 4 +pkg syscall (netbsd-arm64), const NET_RT_OIFLIST ideal-int +pkg syscall (netbsd-arm64), const NET_RT_OOIFLIST = 3 +pkg syscall (netbsd-arm64), const NET_RT_OOIFLIST ideal-int +pkg syscall (netbsd-arm64), const NOFLSH = 2147483648 +pkg syscall (netbsd-arm64), const NOFLSH ideal-int +pkg syscall (netbsd-arm64), const NOTE_ATTRIB = 8 +pkg syscall (netbsd-arm64), const NOTE_ATTRIB ideal-int +pkg syscall (netbsd-arm64), const NOTE_CHILD = 4 +pkg syscall (netbsd-arm64), const NOTE_CHILD ideal-int +pkg syscall (netbsd-arm64), const NOTE_DELETE = 1 +pkg syscall (netbsd-arm64), const NOTE_DELETE ideal-int +pkg syscall (netbsd-arm64), const NOTE_EXEC = 536870912 +pkg syscall (netbsd-arm64), const NOTE_EXEC ideal-int +pkg syscall (netbsd-arm64), const NOTE_EXIT = 2147483648 +pkg syscall (netbsd-arm64), const NOTE_EXIT ideal-int +pkg syscall (netbsd-arm64), const NOTE_EXTEND = 4 +pkg syscall (netbsd-arm64), const NOTE_EXTEND ideal-int +pkg syscall (netbsd-arm64), const NOTE_FORK = 1073741824 +pkg syscall (netbsd-arm64), const NOTE_FORK ideal-int +pkg syscall (netbsd-arm64), const NOTE_LINK = 16 +pkg syscall (netbsd-arm64), const NOTE_LINK ideal-int +pkg syscall (netbsd-arm64), const NOTE_LOWAT = 1 +pkg syscall (netbsd-arm64), const NOTE_LOWAT ideal-int +pkg syscall (netbsd-arm64), const NOTE_PCTRLMASK = 4026531840 +pkg syscall (netbsd-arm64), const NOTE_PCTRLMASK ideal-int +pkg syscall (netbsd-arm64), const NOTE_PDATAMASK = 1048575 +pkg syscall (netbsd-arm64), const NOTE_PDATAMASK ideal-int +pkg syscall (netbsd-arm64), const NOTE_RENAME = 32 +pkg syscall (netbsd-arm64), const NOTE_RENAME ideal-int +pkg syscall (netbsd-arm64), const NOTE_REVOKE = 64 +pkg syscall (netbsd-arm64), const NOTE_REVOKE ideal-int +pkg syscall (netbsd-arm64), const NOTE_TRACK = 1 +pkg syscall (netbsd-arm64), const NOTE_TRACK ideal-int +pkg syscall (netbsd-arm64), const NOTE_TRACKERR = 2 +pkg syscall (netbsd-arm64), const NOTE_TRACKERR ideal-int +pkg syscall (netbsd-arm64), const NOTE_WRITE = 2 +pkg syscall (netbsd-arm64), const NOTE_WRITE ideal-int +pkg syscall (netbsd-arm64), const OCRNL = 16 +pkg syscall (netbsd-arm64), const OCRNL ideal-int +pkg syscall (netbsd-arm64), const OFIOGETBMAP = 3221513850 +pkg syscall (netbsd-arm64), const OFIOGETBMAP ideal-int +pkg syscall (netbsd-arm64), const ONLCR = 2 +pkg syscall (netbsd-arm64), const ONLCR ideal-int +pkg syscall (netbsd-arm64), const ONLRET = 64 +pkg syscall (netbsd-arm64), const ONLRET ideal-int +pkg syscall (netbsd-arm64), const ONOCR = 32 +pkg syscall (netbsd-arm64), const ONOCR ideal-int +pkg syscall (netbsd-arm64), const ONOEOT = 8 +pkg syscall (netbsd-arm64), const ONOEOT ideal-int +pkg syscall (netbsd-arm64), const OPOST = 1 +pkg syscall (netbsd-arm64), const OPOST ideal-int +pkg syscall (netbsd-arm64), const O_ACCMODE = 3 +pkg syscall (netbsd-arm64), const O_ACCMODE ideal-int +pkg syscall (netbsd-arm64), const O_ALT_IO = 262144 +pkg syscall (netbsd-arm64), const O_ALT_IO ideal-int +pkg syscall (netbsd-arm64), const O_APPEND = 8 +pkg syscall (netbsd-arm64), const O_ASYNC = 64 +pkg syscall (netbsd-arm64), const O_CLOEXEC = 4194304 +pkg syscall (netbsd-arm64), const O_CREAT = 512 +pkg syscall (netbsd-arm64), const O_DIRECT = 524288 +pkg syscall (netbsd-arm64), const O_DIRECT ideal-int +pkg syscall (netbsd-arm64), const O_DIRECTORY = 2097152 +pkg syscall (netbsd-arm64), const O_DIRECTORY ideal-int +pkg syscall (netbsd-arm64), const O_DSYNC = 65536 +pkg syscall (netbsd-arm64), const O_DSYNC ideal-int +pkg syscall (netbsd-arm64), const O_EXCL = 2048 +pkg syscall (netbsd-arm64), const O_EXLOCK = 32 +pkg syscall (netbsd-arm64), const O_EXLOCK ideal-int +pkg syscall (netbsd-arm64), const O_FSYNC = 128 +pkg syscall (netbsd-arm64), const O_FSYNC ideal-int +pkg syscall (netbsd-arm64), const O_NDELAY = 4 +pkg syscall (netbsd-arm64), const O_NDELAY ideal-int +pkg syscall (netbsd-arm64), const O_NOCTTY = 32768 +pkg syscall (netbsd-arm64), const O_NOFOLLOW = 256 +pkg syscall (netbsd-arm64), const O_NOFOLLOW ideal-int +pkg syscall (netbsd-arm64), const O_NONBLOCK = 4 +pkg syscall (netbsd-arm64), const O_NOSIGPIPE = 16777216 +pkg syscall (netbsd-arm64), const O_NOSIGPIPE ideal-int +pkg syscall (netbsd-arm64), const O_RSYNC = 131072 +pkg syscall (netbsd-arm64), const O_RSYNC ideal-int +pkg syscall (netbsd-arm64), const O_SHLOCK = 16 +pkg syscall (netbsd-arm64), const O_SHLOCK ideal-int +pkg syscall (netbsd-arm64), const O_SYNC = 128 +pkg syscall (netbsd-arm64), const O_TRUNC = 1024 +pkg syscall (netbsd-arm64), const PARENB = 4096 +pkg syscall (netbsd-arm64), const PARENB ideal-int +pkg syscall (netbsd-arm64), const PARMRK = 8 +pkg syscall (netbsd-arm64), const PARMRK ideal-int +pkg syscall (netbsd-arm64), const PARODD = 8192 +pkg syscall (netbsd-arm64), const PARODD ideal-int +pkg syscall (netbsd-arm64), const PENDIN = 536870912 +pkg syscall (netbsd-arm64), const PENDIN ideal-int +pkg syscall (netbsd-arm64), const PRIO_PGRP = 1 +pkg syscall (netbsd-arm64), const PRIO_PGRP ideal-int +pkg syscall (netbsd-arm64), const PRIO_PROCESS = 0 +pkg syscall (netbsd-arm64), const PRIO_PROCESS ideal-int +pkg syscall (netbsd-arm64), const PRIO_USER = 2 +pkg syscall (netbsd-arm64), const PRIO_USER ideal-int +pkg syscall (netbsd-arm64), const PRI_IOFLUSH = 124 +pkg syscall (netbsd-arm64), const PRI_IOFLUSH ideal-int +pkg syscall (netbsd-arm64), const PROT_EXEC = 4 +pkg syscall (netbsd-arm64), const PROT_EXEC ideal-int +pkg syscall (netbsd-arm64), const PROT_NONE = 0 +pkg syscall (netbsd-arm64), const PROT_NONE ideal-int +pkg syscall (netbsd-arm64), const PROT_READ = 1 +pkg syscall (netbsd-arm64), const PROT_READ ideal-int +pkg syscall (netbsd-arm64), const PROT_WRITE = 2 +pkg syscall (netbsd-arm64), const PROT_WRITE ideal-int +pkg syscall (netbsd-arm64), const PTRACE_CONT = 7 +pkg syscall (netbsd-arm64), const PTRACE_CONT ideal-int +pkg syscall (netbsd-arm64), const PTRACE_KILL = 8 +pkg syscall (netbsd-arm64), const PTRACE_KILL ideal-int +pkg syscall (netbsd-arm64), const PTRACE_TRACEME = 0 +pkg syscall (netbsd-arm64), const PTRACE_TRACEME ideal-int +pkg syscall (netbsd-arm64), const RLIMIT_AS = 10 +pkg syscall (netbsd-arm64), const RLIMIT_AS ideal-int +pkg syscall (netbsd-arm64), const RLIMIT_CORE = 4 +pkg syscall (netbsd-arm64), const RLIMIT_CORE ideal-int +pkg syscall (netbsd-arm64), const RLIMIT_CPU = 0 +pkg syscall (netbsd-arm64), const RLIMIT_CPU ideal-int +pkg syscall (netbsd-arm64), const RLIMIT_DATA = 2 +pkg syscall (netbsd-arm64), const RLIMIT_DATA ideal-int +pkg syscall (netbsd-arm64), const RLIMIT_FSIZE = 1 +pkg syscall (netbsd-arm64), const RLIMIT_FSIZE ideal-int +pkg syscall (netbsd-arm64), const RLIMIT_NOFILE = 8 +pkg syscall (netbsd-arm64), const RLIMIT_NOFILE ideal-int +pkg syscall (netbsd-arm64), const RLIMIT_STACK = 3 +pkg syscall (netbsd-arm64), const RLIMIT_STACK ideal-int +pkg syscall (netbsd-arm64), const RLIM_INFINITY = 9223372036854775807 +pkg syscall (netbsd-arm64), const RLIM_INFINITY ideal-int +pkg syscall (netbsd-arm64), const RTAX_AUTHOR = 6 +pkg syscall (netbsd-arm64), const RTAX_AUTHOR ideal-int +pkg syscall (netbsd-arm64), const RTAX_BRD = 7 +pkg syscall (netbsd-arm64), const RTAX_BRD ideal-int +pkg syscall (netbsd-arm64), const RTAX_DST = 0 +pkg syscall (netbsd-arm64), const RTAX_DST ideal-int +pkg syscall (netbsd-arm64), const RTAX_GATEWAY = 1 +pkg syscall (netbsd-arm64), const RTAX_GATEWAY ideal-int +pkg syscall (netbsd-arm64), const RTAX_GENMASK = 3 +pkg syscall (netbsd-arm64), const RTAX_GENMASK ideal-int +pkg syscall (netbsd-arm64), const RTAX_IFA = 5 +pkg syscall (netbsd-arm64), const RTAX_IFA ideal-int +pkg syscall (netbsd-arm64), const RTAX_IFP = 4 +pkg syscall (netbsd-arm64), const RTAX_IFP ideal-int +pkg syscall (netbsd-arm64), const RTAX_MAX = 9 +pkg syscall (netbsd-arm64), const RTAX_MAX ideal-int +pkg syscall (netbsd-arm64), const RTAX_NETMASK = 2 +pkg syscall (netbsd-arm64), const RTAX_NETMASK ideal-int +pkg syscall (netbsd-arm64), const RTAX_TAG = 8 +pkg syscall (netbsd-arm64), const RTAX_TAG ideal-int +pkg syscall (netbsd-arm64), const RTA_AUTHOR = 64 +pkg syscall (netbsd-arm64), const RTA_AUTHOR ideal-int +pkg syscall (netbsd-arm64), const RTA_BRD = 128 +pkg syscall (netbsd-arm64), const RTA_BRD ideal-int +pkg syscall (netbsd-arm64), const RTA_DST = 1 +pkg syscall (netbsd-arm64), const RTA_DST ideal-int +pkg syscall (netbsd-arm64), const RTA_GATEWAY = 2 +pkg syscall (netbsd-arm64), const RTA_GATEWAY ideal-int +pkg syscall (netbsd-arm64), const RTA_GENMASK = 8 +pkg syscall (netbsd-arm64), const RTA_GENMASK ideal-int +pkg syscall (netbsd-arm64), const RTA_IFA = 32 +pkg syscall (netbsd-arm64), const RTA_IFA ideal-int +pkg syscall (netbsd-arm64), const RTA_IFP = 16 +pkg syscall (netbsd-arm64), const RTA_IFP ideal-int +pkg syscall (netbsd-arm64), const RTA_NETMASK = 4 +pkg syscall (netbsd-arm64), const RTA_NETMASK ideal-int +pkg syscall (netbsd-arm64), const RTA_TAG = 256 +pkg syscall (netbsd-arm64), const RTA_TAG ideal-int +pkg syscall (netbsd-arm64), const RTF_ANNOUNCE = 131072 +pkg syscall (netbsd-arm64), const RTF_ANNOUNCE ideal-int +pkg syscall (netbsd-arm64), const RTF_BLACKHOLE = 4096 +pkg syscall (netbsd-arm64), const RTF_BLACKHOLE ideal-int +pkg syscall (netbsd-arm64), const RTF_CLONED = 8192 +pkg syscall (netbsd-arm64), const RTF_CLONED ideal-int +pkg syscall (netbsd-arm64), const RTF_CLONING = 256 +pkg syscall (netbsd-arm64), const RTF_CLONING ideal-int +pkg syscall (netbsd-arm64), const RTF_DONE = 64 +pkg syscall (netbsd-arm64), const RTF_DONE ideal-int +pkg syscall (netbsd-arm64), const RTF_DYNAMIC = 16 +pkg syscall (netbsd-arm64), const RTF_DYNAMIC ideal-int +pkg syscall (netbsd-arm64), const RTF_GATEWAY = 2 +pkg syscall (netbsd-arm64), const RTF_GATEWAY ideal-int +pkg syscall (netbsd-arm64), const RTF_HOST = 4 +pkg syscall (netbsd-arm64), const RTF_HOST ideal-int +pkg syscall (netbsd-arm64), const RTF_LLINFO = 1024 +pkg syscall (netbsd-arm64), const RTF_LLINFO ideal-int +pkg syscall (netbsd-arm64), const RTF_MASK = 128 +pkg syscall (netbsd-arm64), const RTF_MASK ideal-int +pkg syscall (netbsd-arm64), const RTF_MODIFIED = 32 +pkg syscall (netbsd-arm64), const RTF_MODIFIED ideal-int +pkg syscall (netbsd-arm64), const RTF_PROTO1 = 32768 +pkg syscall (netbsd-arm64), const RTF_PROTO1 ideal-int +pkg syscall (netbsd-arm64), const RTF_PROTO2 = 16384 +pkg syscall (netbsd-arm64), const RTF_PROTO2 ideal-int +pkg syscall (netbsd-arm64), const RTF_REJECT = 8 +pkg syscall (netbsd-arm64), const RTF_REJECT ideal-int +pkg syscall (netbsd-arm64), const RTF_SRC = 65536 +pkg syscall (netbsd-arm64), const RTF_SRC ideal-int +pkg syscall (netbsd-arm64), const RTF_STATIC = 2048 +pkg syscall (netbsd-arm64), const RTF_STATIC ideal-int +pkg syscall (netbsd-arm64), const RTF_UP = 1 +pkg syscall (netbsd-arm64), const RTF_UP ideal-int +pkg syscall (netbsd-arm64), const RTF_XRESOLVE = 512 +pkg syscall (netbsd-arm64), const RTF_XRESOLVE ideal-int +pkg syscall (netbsd-arm64), const RTM_ADD = 1 +pkg syscall (netbsd-arm64), const RTM_ADD ideal-int +pkg syscall (netbsd-arm64), const RTM_CHANGE = 3 +pkg syscall (netbsd-arm64), const RTM_CHANGE ideal-int +pkg syscall (netbsd-arm64), const RTM_CHGADDR = 21 +pkg syscall (netbsd-arm64), const RTM_CHGADDR ideal-int +pkg syscall (netbsd-arm64), const RTM_DELADDR = 13 +pkg syscall (netbsd-arm64), const RTM_DELADDR ideal-int +pkg syscall (netbsd-arm64), const RTM_DELETE = 2 +pkg syscall (netbsd-arm64), const RTM_DELETE ideal-int +pkg syscall (netbsd-arm64), const RTM_GET = 4 +pkg syscall (netbsd-arm64), const RTM_GET ideal-int +pkg syscall (netbsd-arm64), const RTM_IEEE80211 = 17 +pkg syscall (netbsd-arm64), const RTM_IEEE80211 ideal-int +pkg syscall (netbsd-arm64), const RTM_IFANNOUNCE = 16 +pkg syscall (netbsd-arm64), const RTM_IFANNOUNCE ideal-int +pkg syscall (netbsd-arm64), const RTM_IFINFO = 20 +pkg syscall (netbsd-arm64), const RTM_IFINFO ideal-int +pkg syscall (netbsd-arm64), const RTM_LLINFO_UPD = 19 +pkg syscall (netbsd-arm64), const RTM_LLINFO_UPD ideal-int +pkg syscall (netbsd-arm64), const RTM_LOCK = 8 +pkg syscall (netbsd-arm64), const RTM_LOCK ideal-int +pkg syscall (netbsd-arm64), const RTM_LOSING = 5 +pkg syscall (netbsd-arm64), const RTM_LOSING ideal-int +pkg syscall (netbsd-arm64), const RTM_MISS = 7 +pkg syscall (netbsd-arm64), const RTM_MISS ideal-int +pkg syscall (netbsd-arm64), const RTM_NEWADDR = 12 +pkg syscall (netbsd-arm64), const RTM_NEWADDR ideal-int +pkg syscall (netbsd-arm64), const RTM_OIFINFO = 15 +pkg syscall (netbsd-arm64), const RTM_OIFINFO ideal-int +pkg syscall (netbsd-arm64), const RTM_OLDADD = 9 +pkg syscall (netbsd-arm64), const RTM_OLDADD ideal-int +pkg syscall (netbsd-arm64), const RTM_OLDDEL = 10 +pkg syscall (netbsd-arm64), const RTM_OLDDEL ideal-int +pkg syscall (netbsd-arm64), const RTM_OOIFINFO = 14 +pkg syscall (netbsd-arm64), const RTM_OOIFINFO ideal-int +pkg syscall (netbsd-arm64), const RTM_REDIRECT = 6 +pkg syscall (netbsd-arm64), const RTM_REDIRECT ideal-int +pkg syscall (netbsd-arm64), const RTM_RESOLVE = 11 +pkg syscall (netbsd-arm64), const RTM_RESOLVE ideal-int +pkg syscall (netbsd-arm64), const RTM_RTTUNIT = 1000000 +pkg syscall (netbsd-arm64), const RTM_RTTUNIT ideal-int +pkg syscall (netbsd-arm64), const RTM_SETGATE = 18 +pkg syscall (netbsd-arm64), const RTM_SETGATE ideal-int +pkg syscall (netbsd-arm64), const RTM_VERSION = 4 +pkg syscall (netbsd-arm64), const RTM_VERSION ideal-int +pkg syscall (netbsd-arm64), const RTV_EXPIRE = 4 +pkg syscall (netbsd-arm64), const RTV_EXPIRE ideal-int +pkg syscall (netbsd-arm64), const RTV_HOPCOUNT = 2 +pkg syscall (netbsd-arm64), const RTV_HOPCOUNT ideal-int +pkg syscall (netbsd-arm64), const RTV_MTU = 1 +pkg syscall (netbsd-arm64), const RTV_MTU ideal-int +pkg syscall (netbsd-arm64), const RTV_RPIPE = 8 +pkg syscall (netbsd-arm64), const RTV_RPIPE ideal-int +pkg syscall (netbsd-arm64), const RTV_RTT = 64 +pkg syscall (netbsd-arm64), const RTV_RTT ideal-int +pkg syscall (netbsd-arm64), const RTV_RTTVAR = 128 +pkg syscall (netbsd-arm64), const RTV_RTTVAR ideal-int +pkg syscall (netbsd-arm64), const RTV_SPIPE = 16 +pkg syscall (netbsd-arm64), const RTV_SPIPE ideal-int +pkg syscall (netbsd-arm64), const RTV_SSTHRESH = 32 +pkg syscall (netbsd-arm64), const RTV_SSTHRESH ideal-int +pkg syscall (netbsd-arm64), const RUSAGE_CHILDREN = -1 +pkg syscall (netbsd-arm64), const RUSAGE_CHILDREN ideal-int +pkg syscall (netbsd-arm64), const RUSAGE_SELF = 0 +pkg syscall (netbsd-arm64), const RUSAGE_SELF ideal-int +pkg syscall (netbsd-arm64), const SCM_CREDS = 4 +pkg syscall (netbsd-arm64), const SCM_CREDS ideal-int +pkg syscall (netbsd-arm64), const SCM_RIGHTS = 1 +pkg syscall (netbsd-arm64), const SCM_RIGHTS ideal-int +pkg syscall (netbsd-arm64), const SCM_TIMESTAMP = 8 +pkg syscall (netbsd-arm64), const SCM_TIMESTAMP ideal-int +pkg syscall (netbsd-arm64), const SIGBUS = 10 +pkg syscall (netbsd-arm64), const SIGCHLD = 20 +pkg syscall (netbsd-arm64), const SIGCHLD Signal +pkg syscall (netbsd-arm64), const SIGCONT = 19 +pkg syscall (netbsd-arm64), const SIGCONT Signal +pkg syscall (netbsd-arm64), const SIGEMT = 7 +pkg syscall (netbsd-arm64), const SIGEMT Signal +pkg syscall (netbsd-arm64), const SIGINFO = 29 +pkg syscall (netbsd-arm64), const SIGINFO Signal +pkg syscall (netbsd-arm64), const SIGIO = 23 +pkg syscall (netbsd-arm64), const SIGIO Signal +pkg syscall (netbsd-arm64), const SIGIOT = 6 +pkg syscall (netbsd-arm64), const SIGIOT Signal +pkg syscall (netbsd-arm64), const SIGPROF = 27 +pkg syscall (netbsd-arm64), const SIGPROF Signal +pkg syscall (netbsd-arm64), const SIGPWR = 32 +pkg syscall (netbsd-arm64), const SIGPWR Signal +pkg syscall (netbsd-arm64), const SIGSTOP = 17 +pkg syscall (netbsd-arm64), const SIGSTOP Signal +pkg syscall (netbsd-arm64), const SIGSYS = 12 +pkg syscall (netbsd-arm64), const SIGSYS Signal +pkg syscall (netbsd-arm64), const SIGTSTP = 18 +pkg syscall (netbsd-arm64), const SIGTSTP Signal +pkg syscall (netbsd-arm64), const SIGTTIN = 21 +pkg syscall (netbsd-arm64), const SIGTTIN Signal +pkg syscall (netbsd-arm64), const SIGTTOU = 22 +pkg syscall (netbsd-arm64), const SIGTTOU Signal +pkg syscall (netbsd-arm64), const SIGURG = 16 +pkg syscall (netbsd-arm64), const SIGURG Signal +pkg syscall (netbsd-arm64), const SIGUSR1 = 30 +pkg syscall (netbsd-arm64), const SIGUSR1 Signal +pkg syscall (netbsd-arm64), const SIGUSR2 = 31 +pkg syscall (netbsd-arm64), const SIGUSR2 Signal +pkg syscall (netbsd-arm64), const SIGVTALRM = 26 +pkg syscall (netbsd-arm64), const SIGVTALRM Signal +pkg syscall (netbsd-arm64), const SIGWINCH = 28 +pkg syscall (netbsd-arm64), const SIGWINCH Signal +pkg syscall (netbsd-arm64), const SIGXCPU = 24 +pkg syscall (netbsd-arm64), const SIGXCPU Signal +pkg syscall (netbsd-arm64), const SIGXFSZ = 25 +pkg syscall (netbsd-arm64), const SIGXFSZ Signal +pkg syscall (netbsd-arm64), const SIOCADDMULTI = 2156947761 +pkg syscall (netbsd-arm64), const SIOCADDMULTI ideal-int +pkg syscall (netbsd-arm64), const SIOCADDRT = 2151182858 +pkg syscall (netbsd-arm64), const SIOCADDRT ideal-int +pkg syscall (netbsd-arm64), const SIOCAIFADDR = 2151704858 +pkg syscall (netbsd-arm64), const SIOCAIFADDR ideal-int +pkg syscall (netbsd-arm64), const SIOCALIFADDR = 2165860636 +pkg syscall (netbsd-arm64), const SIOCALIFADDR ideal-int +pkg syscall (netbsd-arm64), const SIOCATMARK = 1074033415 +pkg syscall (netbsd-arm64), const SIOCATMARK ideal-int +pkg syscall (netbsd-arm64), const SIOCDELMULTI = 2156947762 +pkg syscall (netbsd-arm64), const SIOCDELMULTI ideal-int +pkg syscall (netbsd-arm64), const SIOCDELRT = 2151182859 +pkg syscall (netbsd-arm64), const SIOCDELRT ideal-int +pkg syscall (netbsd-arm64), const SIOCDIFADDR = 2156947737 +pkg syscall (netbsd-arm64), const SIOCDIFADDR ideal-int +pkg syscall (netbsd-arm64), const SIOCDIFPHYADDR = 2156947785 +pkg syscall (netbsd-arm64), const SIOCDIFPHYADDR ideal-int +pkg syscall (netbsd-arm64), const SIOCDLIFADDR = 2165860638 +pkg syscall (netbsd-arm64), const SIOCDLIFADDR ideal-int +pkg syscall (netbsd-arm64), const SIOCGDRVSPEC = 3223873915 +pkg syscall (netbsd-arm64), const SIOCGDRVSPEC ideal-int +pkg syscall (netbsd-arm64), const SIOCGETPFSYNC = 3230689784 +pkg syscall (netbsd-arm64), const SIOCGETPFSYNC ideal-int +pkg syscall (netbsd-arm64), const SIOCGETSGCNT = 3223352628 +pkg syscall (netbsd-arm64), const SIOCGETSGCNT ideal-int +pkg syscall (netbsd-arm64), const SIOCGETVIFCNT = 3223876915 +pkg syscall (netbsd-arm64), const SIOCGETVIFCNT ideal-int +pkg syscall (netbsd-arm64), const SIOCGHIWAT = 1074033409 +pkg syscall (netbsd-arm64), const SIOCGHIWAT ideal-int +pkg syscall (netbsd-arm64), const SIOCGIFADDR = 3230689569 +pkg syscall (netbsd-arm64), const SIOCGIFADDR ideal-int +pkg syscall (netbsd-arm64), const SIOCGIFADDRPREF = 3231213856 +pkg syscall (netbsd-arm64), const SIOCGIFADDRPREF ideal-int +pkg syscall (netbsd-arm64), const SIOCGIFALIAS = 3225446683 +pkg syscall (netbsd-arm64), const SIOCGIFALIAS ideal-int +pkg syscall (netbsd-arm64), const SIOCGIFBRDADDR = 3230689571 +pkg syscall (netbsd-arm64), const SIOCGIFBRDADDR ideal-int +pkg syscall (netbsd-arm64), const SIOCGIFCAP = 3223349622 +pkg syscall (netbsd-arm64), const SIOCGIFCAP ideal-int +pkg syscall (netbsd-arm64), const SIOCGIFCONF = 3222300966 +pkg syscall (netbsd-arm64), const SIOCGIFCONF ideal-int +pkg syscall (netbsd-arm64), const SIOCGIFDATA = 3231213957 +pkg syscall (netbsd-arm64), const SIOCGIFDATA ideal-int +pkg syscall (netbsd-arm64), const SIOCGIFDLT = 3230689655 +pkg syscall (netbsd-arm64), const SIOCGIFDLT ideal-int +pkg syscall (netbsd-arm64), const SIOCGIFDSTADDR = 3230689570 +pkg syscall (netbsd-arm64), const SIOCGIFDSTADDR ideal-int +pkg syscall (netbsd-arm64), const SIOCGIFFLAGS = 3230689553 +pkg syscall (netbsd-arm64), const SIOCGIFFLAGS ideal-int +pkg syscall (netbsd-arm64), const SIOCGIFGENERIC = 3230689594 +pkg syscall (netbsd-arm64), const SIOCGIFGENERIC ideal-int +pkg syscall (netbsd-arm64), const SIOCGIFMEDIA = 3224398134 +pkg syscall (netbsd-arm64), const SIOCGIFMEDIA ideal-int +pkg syscall (netbsd-arm64), const SIOCGIFMETRIC = 3230689559 +pkg syscall (netbsd-arm64), const SIOCGIFMETRIC ideal-int +pkg syscall (netbsd-arm64), const SIOCGIFMTU = 3230689662 +pkg syscall (netbsd-arm64), const SIOCGIFMTU ideal-int +pkg syscall (netbsd-arm64), const SIOCGIFNETMASK = 3230689573 +pkg syscall (netbsd-arm64), const SIOCGIFNETMASK ideal-int +pkg syscall (netbsd-arm64), const SIOCGIFPDSTADDR = 3230689608 +pkg syscall (netbsd-arm64), const SIOCGIFPDSTADDR ideal-int +pkg syscall (netbsd-arm64), const SIOCGIFPSRCADDR = 3230689607 +pkg syscall (netbsd-arm64), const SIOCGIFPSRCADDR ideal-int +pkg syscall (netbsd-arm64), const SIOCGLIFADDR = 3239602461 +pkg syscall (netbsd-arm64), const SIOCGLIFADDR ideal-int +pkg syscall (netbsd-arm64), const SIOCGLIFPHYADDR = 3239602507 +pkg syscall (netbsd-arm64), const SIOCGLIFPHYADDR ideal-int +pkg syscall (netbsd-arm64), const SIOCGLINKSTR = 3223873927 +pkg syscall (netbsd-arm64), const SIOCGLINKSTR ideal-int +pkg syscall (netbsd-arm64), const SIOCGLOWAT = 1074033411 +pkg syscall (netbsd-arm64), const SIOCGLOWAT ideal-int +pkg syscall (netbsd-arm64), const SIOCGPGRP = 1074033417 +pkg syscall (netbsd-arm64), const SIOCGPGRP ideal-int +pkg syscall (netbsd-arm64), const SIOCGVH = 3230689667 +pkg syscall (netbsd-arm64), const SIOCGVH ideal-int +pkg syscall (netbsd-arm64), const SIOCIFCREATE = 2156947834 +pkg syscall (netbsd-arm64), const SIOCIFCREATE ideal-int +pkg syscall (netbsd-arm64), const SIOCIFDESTROY = 2156947833 +pkg syscall (netbsd-arm64), const SIOCIFDESTROY ideal-int +pkg syscall (netbsd-arm64), const SIOCIFGCLONERS = 3222301048 +pkg syscall (netbsd-arm64), const SIOCIFGCLONERS ideal-int +pkg syscall (netbsd-arm64), const SIOCINITIFADDR = 3228592516 +pkg syscall (netbsd-arm64), const SIOCINITIFADDR ideal-int +pkg syscall (netbsd-arm64), const SIOCSDRVSPEC = 2150132091 +pkg syscall (netbsd-arm64), const SIOCSDRVSPEC ideal-int +pkg syscall (netbsd-arm64), const SIOCSETPFSYNC = 2156947959 +pkg syscall (netbsd-arm64), const SIOCSETPFSYNC ideal-int +pkg syscall (netbsd-arm64), const SIOCSHIWAT = 2147775232 +pkg syscall (netbsd-arm64), const SIOCSHIWAT ideal-int +pkg syscall (netbsd-arm64), const SIOCSIFADDR = 2156947724 +pkg syscall (netbsd-arm64), const SIOCSIFADDR ideal-int +pkg syscall (netbsd-arm64), const SIOCSIFADDRPREF = 2157472031 +pkg syscall (netbsd-arm64), const SIOCSIFADDRPREF ideal-int +pkg syscall (netbsd-arm64), const SIOCSIFBRDADDR = 2156947731 +pkg syscall (netbsd-arm64), const SIOCSIFBRDADDR ideal-int +pkg syscall (netbsd-arm64), const SIOCSIFCAP = 2149607797 +pkg syscall (netbsd-arm64), const SIOCSIFCAP ideal-int +pkg syscall (netbsd-arm64), const SIOCSIFDSTADDR = 2156947726 +pkg syscall (netbsd-arm64), const SIOCSIFDSTADDR ideal-int +pkg syscall (netbsd-arm64), const SIOCSIFFLAGS = 2156947728 +pkg syscall (netbsd-arm64), const SIOCSIFFLAGS ideal-int +pkg syscall (netbsd-arm64), const SIOCSIFGENERIC = 2156947769 +pkg syscall (netbsd-arm64), const SIOCSIFGENERIC ideal-int +pkg syscall (netbsd-arm64), const SIOCSIFMEDIA = 3230689589 +pkg syscall (netbsd-arm64), const SIOCSIFMEDIA ideal-int +pkg syscall (netbsd-arm64), const SIOCSIFMETRIC = 2156947736 +pkg syscall (netbsd-arm64), const SIOCSIFMETRIC ideal-int +pkg syscall (netbsd-arm64), const SIOCSIFMTU = 2156947839 +pkg syscall (netbsd-arm64), const SIOCSIFMTU ideal-int +pkg syscall (netbsd-arm64), const SIOCSIFNETMASK = 2156947734 +pkg syscall (netbsd-arm64), const SIOCSIFNETMASK ideal-int +pkg syscall (netbsd-arm64), const SIOCSIFPHYADDR = 2151704902 +pkg syscall (netbsd-arm64), const SIOCSIFPHYADDR ideal-int +pkg syscall (netbsd-arm64), const SIOCSLIFPHYADDR = 2165860682 +pkg syscall (netbsd-arm64), const SIOCSLIFPHYADDR ideal-int +pkg syscall (netbsd-arm64), const SIOCSLINKSTR = 2150132104 +pkg syscall (netbsd-arm64), const SIOCSLINKSTR ideal-int +pkg syscall (netbsd-arm64), const SIOCSLOWAT = 2147775234 +pkg syscall (netbsd-arm64), const SIOCSLOWAT ideal-int +pkg syscall (netbsd-arm64), const SIOCSPGRP = 2147775240 +pkg syscall (netbsd-arm64), const SIOCSPGRP ideal-int +pkg syscall (netbsd-arm64), const SIOCSVH = 3230689666 +pkg syscall (netbsd-arm64), const SIOCSVH ideal-int +pkg syscall (netbsd-arm64), const SIOCZIFDATA = 3231213958 +pkg syscall (netbsd-arm64), const SIOCZIFDATA ideal-int +pkg syscall (netbsd-arm64), const SOCK_CLOEXEC = 268435456 +pkg syscall (netbsd-arm64), const SOCK_CLOEXEC ideal-int +pkg syscall (netbsd-arm64), const SOCK_FLAGS_MASK = 4026531840 +pkg syscall (netbsd-arm64), const SOCK_FLAGS_MASK ideal-int +pkg syscall (netbsd-arm64), const SOCK_NONBLOCK = 536870912 +pkg syscall (netbsd-arm64), const SOCK_NONBLOCK ideal-int +pkg syscall (netbsd-arm64), const SOCK_NOSIGPIPE = 1073741824 +pkg syscall (netbsd-arm64), const SOCK_NOSIGPIPE ideal-int +pkg syscall (netbsd-arm64), const SOCK_RDM = 4 +pkg syscall (netbsd-arm64), const SOCK_RDM ideal-int +pkg syscall (netbsd-arm64), const SOL_SOCKET = 65535 +pkg syscall (netbsd-arm64), const SOMAXCONN = 128 +pkg syscall (netbsd-arm64), const SO_ACCEPTCONN = 2 +pkg syscall (netbsd-arm64), const SO_ACCEPTCONN ideal-int +pkg syscall (netbsd-arm64), const SO_ACCEPTFILTER = 4096 +pkg syscall (netbsd-arm64), const SO_ACCEPTFILTER ideal-int +pkg syscall (netbsd-arm64), const SO_BROADCAST = 32 +pkg syscall (netbsd-arm64), const SO_DEBUG = 1 +pkg syscall (netbsd-arm64), const SO_DEBUG ideal-int +pkg syscall (netbsd-arm64), const SO_DONTROUTE = 16 +pkg syscall (netbsd-arm64), const SO_ERROR = 4103 +pkg syscall (netbsd-arm64), const SO_ERROR ideal-int +pkg syscall (netbsd-arm64), const SO_KEEPALIVE = 8 +pkg syscall (netbsd-arm64), const SO_LINGER = 128 +pkg syscall (netbsd-arm64), const SO_NOHEADER = 4106 +pkg syscall (netbsd-arm64), const SO_NOHEADER ideal-int +pkg syscall (netbsd-arm64), const SO_NOSIGPIPE = 2048 +pkg syscall (netbsd-arm64), const SO_NOSIGPIPE ideal-int +pkg syscall (netbsd-arm64), const SO_OOBINLINE = 256 +pkg syscall (netbsd-arm64), const SO_OOBINLINE ideal-int +pkg syscall (netbsd-arm64), const SO_OVERFLOWED = 4105 +pkg syscall (netbsd-arm64), const SO_OVERFLOWED ideal-int +pkg syscall (netbsd-arm64), const SO_RCVBUF = 4098 +pkg syscall (netbsd-arm64), const SO_RCVLOWAT = 4100 +pkg syscall (netbsd-arm64), const SO_RCVLOWAT ideal-int +pkg syscall (netbsd-arm64), const SO_RCVTIMEO = 4108 +pkg syscall (netbsd-arm64), const SO_RCVTIMEO ideal-int +pkg syscall (netbsd-arm64), const SO_REUSEADDR = 4 +pkg syscall (netbsd-arm64), const SO_REUSEPORT = 512 +pkg syscall (netbsd-arm64), const SO_REUSEPORT ideal-int +pkg syscall (netbsd-arm64), const SO_SNDBUF = 4097 +pkg syscall (netbsd-arm64), const SO_SNDLOWAT = 4099 +pkg syscall (netbsd-arm64), const SO_SNDLOWAT ideal-int +pkg syscall (netbsd-arm64), const SO_SNDTIMEO = 4107 +pkg syscall (netbsd-arm64), const SO_SNDTIMEO ideal-int +pkg syscall (netbsd-arm64), const SO_TIMESTAMP = 8192 +pkg syscall (netbsd-arm64), const SO_TIMESTAMP ideal-int +pkg syscall (netbsd-arm64), const SO_TYPE = 4104 +pkg syscall (netbsd-arm64), const SO_TYPE ideal-int +pkg syscall (netbsd-arm64), const SO_USELOOPBACK = 64 +pkg syscall (netbsd-arm64), const SO_USELOOPBACK ideal-int +pkg syscall (netbsd-arm64), const SYSCTL_VERSION = 16777216 +pkg syscall (netbsd-arm64), const SYSCTL_VERSION ideal-int +pkg syscall (netbsd-arm64), const SYSCTL_VERS_0 = 0 +pkg syscall (netbsd-arm64), const SYSCTL_VERS_0 ideal-int +pkg syscall (netbsd-arm64), const SYSCTL_VERS_1 = 16777216 +pkg syscall (netbsd-arm64), const SYSCTL_VERS_1 ideal-int +pkg syscall (netbsd-arm64), const SYSCTL_VERS_MASK = 4278190080 +pkg syscall (netbsd-arm64), const SYSCTL_VERS_MASK ideal-int +pkg syscall (netbsd-arm64), const SYS_ACCEPT = 30 +pkg syscall (netbsd-arm64), const SYS_ACCEPT ideal-int +pkg syscall (netbsd-arm64), const SYS_ACCESS = 33 +pkg syscall (netbsd-arm64), const SYS_ACCESS ideal-int +pkg syscall (netbsd-arm64), const SYS_ACCT = 51 +pkg syscall (netbsd-arm64), const SYS_ACCT ideal-int +pkg syscall (netbsd-arm64), const SYS_ADJTIME = 421 +pkg syscall (netbsd-arm64), const SYS_ADJTIME ideal-int +pkg syscall (netbsd-arm64), const SYS_BIND = 104 +pkg syscall (netbsd-arm64), const SYS_BIND ideal-int +pkg syscall (netbsd-arm64), const SYS_BREAK = 17 +pkg syscall (netbsd-arm64), const SYS_BREAK ideal-int +pkg syscall (netbsd-arm64), const SYS_CHDIR = 12 +pkg syscall (netbsd-arm64), const SYS_CHDIR ideal-int +pkg syscall (netbsd-arm64), const SYS_CHFLAGS = 34 +pkg syscall (netbsd-arm64), const SYS_CHFLAGS ideal-int +pkg syscall (netbsd-arm64), const SYS_CHMOD = 15 +pkg syscall (netbsd-arm64), const SYS_CHMOD ideal-int +pkg syscall (netbsd-arm64), const SYS_CHOWN = 16 +pkg syscall (netbsd-arm64), const SYS_CHOWN ideal-int +pkg syscall (netbsd-arm64), const SYS_CHROOT = 61 +pkg syscall (netbsd-arm64), const SYS_CHROOT ideal-int +pkg syscall (netbsd-arm64), const SYS_CLOCK_GETRES = 429 +pkg syscall (netbsd-arm64), const SYS_CLOCK_GETRES ideal-int +pkg syscall (netbsd-arm64), const SYS_CLOCK_GETTIME = 427 +pkg syscall (netbsd-arm64), const SYS_CLOCK_GETTIME ideal-int +pkg syscall (netbsd-arm64), const SYS_CLOCK_SETTIME = 428 +pkg syscall (netbsd-arm64), const SYS_CLOCK_SETTIME ideal-int +pkg syscall (netbsd-arm64), const SYS_CLOSE = 6 +pkg syscall (netbsd-arm64), const SYS_CLOSE ideal-int +pkg syscall (netbsd-arm64), const SYS_CONNECT = 98 +pkg syscall (netbsd-arm64), const SYS_CONNECT ideal-int +pkg syscall (netbsd-arm64), const SYS_DUP = 41 +pkg syscall (netbsd-arm64), const SYS_DUP ideal-int +pkg syscall (netbsd-arm64), const SYS_DUP2 = 90 +pkg syscall (netbsd-arm64), const SYS_DUP2 ideal-int +pkg syscall (netbsd-arm64), const SYS_DUP3 = 454 +pkg syscall (netbsd-arm64), const SYS_DUP3 ideal-int +pkg syscall (netbsd-arm64), const SYS_EXECVE = 59 +pkg syscall (netbsd-arm64), const SYS_EXECVE ideal-int +pkg syscall (netbsd-arm64), const SYS_EXIT = 1 +pkg syscall (netbsd-arm64), const SYS_EXIT ideal-int +pkg syscall (netbsd-arm64), const SYS_EXTATTRCTL = 360 +pkg syscall (netbsd-arm64), const SYS_EXTATTRCTL ideal-int +pkg syscall (netbsd-arm64), const SYS_EXTATTR_DELETE_FD = 366 +pkg syscall (netbsd-arm64), const SYS_EXTATTR_DELETE_FD ideal-int +pkg syscall (netbsd-arm64), const SYS_EXTATTR_DELETE_FILE = 363 +pkg syscall (netbsd-arm64), const SYS_EXTATTR_DELETE_FILE ideal-int +pkg syscall (netbsd-arm64), const SYS_EXTATTR_DELETE_LINK = 369 +pkg syscall (netbsd-arm64), const SYS_EXTATTR_DELETE_LINK ideal-int +pkg syscall (netbsd-arm64), const SYS_EXTATTR_GET_FD = 365 +pkg syscall (netbsd-arm64), const SYS_EXTATTR_GET_FD ideal-int +pkg syscall (netbsd-arm64), const SYS_EXTATTR_GET_FILE = 362 +pkg syscall (netbsd-arm64), const SYS_EXTATTR_GET_FILE ideal-int +pkg syscall (netbsd-arm64), const SYS_EXTATTR_GET_LINK = 368 +pkg syscall (netbsd-arm64), const SYS_EXTATTR_GET_LINK ideal-int +pkg syscall (netbsd-arm64), const SYS_EXTATTR_LIST_FD = 370 +pkg syscall (netbsd-arm64), const SYS_EXTATTR_LIST_FD ideal-int +pkg syscall (netbsd-arm64), const SYS_EXTATTR_LIST_FILE = 371 +pkg syscall (netbsd-arm64), const SYS_EXTATTR_LIST_FILE ideal-int +pkg syscall (netbsd-arm64), const SYS_EXTATTR_LIST_LINK = 372 +pkg syscall (netbsd-arm64), const SYS_EXTATTR_LIST_LINK ideal-int +pkg syscall (netbsd-arm64), const SYS_EXTATTR_SET_FD = 364 +pkg syscall (netbsd-arm64), const SYS_EXTATTR_SET_FD ideal-int +pkg syscall (netbsd-arm64), const SYS_EXTATTR_SET_FILE = 361 +pkg syscall (netbsd-arm64), const SYS_EXTATTR_SET_FILE ideal-int +pkg syscall (netbsd-arm64), const SYS_EXTATTR_SET_LINK = 367 +pkg syscall (netbsd-arm64), const SYS_EXTATTR_SET_LINK ideal-int +pkg syscall (netbsd-arm64), const SYS_FACCESSAT = 462 +pkg syscall (netbsd-arm64), const SYS_FACCESSAT ideal-int +pkg syscall (netbsd-arm64), const SYS_FCHDIR = 13 +pkg syscall (netbsd-arm64), const SYS_FCHDIR ideal-int +pkg syscall (netbsd-arm64), const SYS_FCHFLAGS = 35 +pkg syscall (netbsd-arm64), const SYS_FCHFLAGS ideal-int +pkg syscall (netbsd-arm64), const SYS_FCHMOD = 124 +pkg syscall (netbsd-arm64), const SYS_FCHMOD ideal-int +pkg syscall (netbsd-arm64), const SYS_FCHMODAT = 463 +pkg syscall (netbsd-arm64), const SYS_FCHMODAT ideal-int +pkg syscall (netbsd-arm64), const SYS_FCHOWN = 123 +pkg syscall (netbsd-arm64), const SYS_FCHOWN ideal-int +pkg syscall (netbsd-arm64), const SYS_FCHOWNAT = 464 +pkg syscall (netbsd-arm64), const SYS_FCHOWNAT ideal-int +pkg syscall (netbsd-arm64), const SYS_FCHROOT = 297 +pkg syscall (netbsd-arm64), const SYS_FCHROOT ideal-int +pkg syscall (netbsd-arm64), const SYS_FCNTL = 92 +pkg syscall (netbsd-arm64), const SYS_FCNTL ideal-int +pkg syscall (netbsd-arm64), const SYS_FDATASYNC = 241 +pkg syscall (netbsd-arm64), const SYS_FDATASYNC ideal-int +pkg syscall (netbsd-arm64), const SYS_FEXECVE = 465 +pkg syscall (netbsd-arm64), const SYS_FEXECVE ideal-int +pkg syscall (netbsd-arm64), const SYS_FGETXATTR = 380 +pkg syscall (netbsd-arm64), const SYS_FGETXATTR ideal-int +pkg syscall (netbsd-arm64), const SYS_FHSTAT = 451 +pkg syscall (netbsd-arm64), const SYS_FHSTAT ideal-int +pkg syscall (netbsd-arm64), const SYS_FKTRACE = 288 +pkg syscall (netbsd-arm64), const SYS_FKTRACE ideal-int +pkg syscall (netbsd-arm64), const SYS_FLISTXATTR = 383 +pkg syscall (netbsd-arm64), const SYS_FLISTXATTR ideal-int +pkg syscall (netbsd-arm64), const SYS_FLOCK = 131 +pkg syscall (netbsd-arm64), const SYS_FLOCK ideal-int +pkg syscall (netbsd-arm64), const SYS_FORK = 2 +pkg syscall (netbsd-arm64), const SYS_FORK ideal-int +pkg syscall (netbsd-arm64), const SYS_FPATHCONF = 192 +pkg syscall (netbsd-arm64), const SYS_FPATHCONF ideal-int +pkg syscall (netbsd-arm64), const SYS_FREMOVEXATTR = 386 +pkg syscall (netbsd-arm64), const SYS_FREMOVEXATTR ideal-int +pkg syscall (netbsd-arm64), const SYS_FSETXATTR = 377 +pkg syscall (netbsd-arm64), const SYS_FSETXATTR ideal-int +pkg syscall (netbsd-arm64), const SYS_FSTAT = 440 +pkg syscall (netbsd-arm64), const SYS_FSTAT ideal-int +pkg syscall (netbsd-arm64), const SYS_FSTATAT = 466 +pkg syscall (netbsd-arm64), const SYS_FSTATAT ideal-int +pkg syscall (netbsd-arm64), const SYS_FSTATVFS1 = 358 +pkg syscall (netbsd-arm64), const SYS_FSTATVFS1 ideal-int +pkg syscall (netbsd-arm64), const SYS_FSYNC = 95 +pkg syscall (netbsd-arm64), const SYS_FSYNC ideal-int +pkg syscall (netbsd-arm64), const SYS_FSYNC_RANGE = 354 +pkg syscall (netbsd-arm64), const SYS_FSYNC_RANGE ideal-int +pkg syscall (netbsd-arm64), const SYS_FTRUNCATE = 201 +pkg syscall (netbsd-arm64), const SYS_FTRUNCATE ideal-int +pkg syscall (netbsd-arm64), const SYS_FUTIMENS = 472 +pkg syscall (netbsd-arm64), const SYS_FUTIMENS ideal-int +pkg syscall (netbsd-arm64), const SYS_FUTIMES = 423 +pkg syscall (netbsd-arm64), const SYS_FUTIMES ideal-int +pkg syscall (netbsd-arm64), const SYS_GETCONTEXT = 307 +pkg syscall (netbsd-arm64), const SYS_GETCONTEXT ideal-int +pkg syscall (netbsd-arm64), const SYS_GETDENTS = 390 +pkg syscall (netbsd-arm64), const SYS_GETDENTS ideal-int +pkg syscall (netbsd-arm64), const SYS_GETEGID = 43 +pkg syscall (netbsd-arm64), const SYS_GETEGID ideal-int +pkg syscall (netbsd-arm64), const SYS_GETEUID = 25 +pkg syscall (netbsd-arm64), const SYS_GETEUID ideal-int +pkg syscall (netbsd-arm64), const SYS_GETFH = 395 +pkg syscall (netbsd-arm64), const SYS_GETFH ideal-int +pkg syscall (netbsd-arm64), const SYS_GETGID = 47 +pkg syscall (netbsd-arm64), const SYS_GETGID ideal-int +pkg syscall (netbsd-arm64), const SYS_GETGROUPS = 79 +pkg syscall (netbsd-arm64), const SYS_GETGROUPS ideal-int +pkg syscall (netbsd-arm64), const SYS_GETITIMER = 426 +pkg syscall (netbsd-arm64), const SYS_GETITIMER ideal-int +pkg syscall (netbsd-arm64), const SYS_GETPEERNAME = 31 +pkg syscall (netbsd-arm64), const SYS_GETPEERNAME ideal-int +pkg syscall (netbsd-arm64), const SYS_GETPGID = 207 +pkg syscall (netbsd-arm64), const SYS_GETPGID ideal-int +pkg syscall (netbsd-arm64), const SYS_GETPGRP = 81 +pkg syscall (netbsd-arm64), const SYS_GETPGRP ideal-int +pkg syscall (netbsd-arm64), const SYS_GETPID = 20 +pkg syscall (netbsd-arm64), const SYS_GETPID ideal-int +pkg syscall (netbsd-arm64), const SYS_GETPPID = 39 +pkg syscall (netbsd-arm64), const SYS_GETPPID ideal-int +pkg syscall (netbsd-arm64), const SYS_GETPRIORITY = 100 +pkg syscall (netbsd-arm64), const SYS_GETPRIORITY ideal-int +pkg syscall (netbsd-arm64), const SYS_GETRLIMIT = 194 +pkg syscall (netbsd-arm64), const SYS_GETRLIMIT ideal-int +pkg syscall (netbsd-arm64), const SYS_GETRUSAGE = 445 +pkg syscall (netbsd-arm64), const SYS_GETRUSAGE ideal-int +pkg syscall (netbsd-arm64), const SYS_GETSID = 286 +pkg syscall (netbsd-arm64), const SYS_GETSID ideal-int +pkg syscall (netbsd-arm64), const SYS_GETSOCKNAME = 32 +pkg syscall (netbsd-arm64), const SYS_GETSOCKNAME ideal-int +pkg syscall (netbsd-arm64), const SYS_GETSOCKOPT = 118 +pkg syscall (netbsd-arm64), const SYS_GETSOCKOPT ideal-int +pkg syscall (netbsd-arm64), const SYS_GETTIMEOFDAY = 418 +pkg syscall (netbsd-arm64), const SYS_GETTIMEOFDAY ideal-int +pkg syscall (netbsd-arm64), const SYS_GETUID = 24 +pkg syscall (netbsd-arm64), const SYS_GETUID ideal-int +pkg syscall (netbsd-arm64), const SYS_GETVFSSTAT = 356 +pkg syscall (netbsd-arm64), const SYS_GETVFSSTAT ideal-int +pkg syscall (netbsd-arm64), const SYS_GETXATTR = 378 +pkg syscall (netbsd-arm64), const SYS_GETXATTR ideal-int +pkg syscall (netbsd-arm64), const SYS_IOCTL = 54 +pkg syscall (netbsd-arm64), const SYS_IOCTL ideal-int +pkg syscall (netbsd-arm64), const SYS_ISSETUGID = 305 +pkg syscall (netbsd-arm64), const SYS_ISSETUGID ideal-int +pkg syscall (netbsd-arm64), const SYS_KEVENT = 435 +pkg syscall (netbsd-arm64), const SYS_KEVENT ideal-int +pkg syscall (netbsd-arm64), const SYS_KILL = 37 +pkg syscall (netbsd-arm64), const SYS_KILL ideal-int +pkg syscall (netbsd-arm64), const SYS_KQUEUE = 344 +pkg syscall (netbsd-arm64), const SYS_KQUEUE ideal-int +pkg syscall (netbsd-arm64), const SYS_KQUEUE1 = 455 +pkg syscall (netbsd-arm64), const SYS_KQUEUE1 ideal-int +pkg syscall (netbsd-arm64), const SYS_KTRACE = 45 +pkg syscall (netbsd-arm64), const SYS_KTRACE ideal-int +pkg syscall (netbsd-arm64), const SYS_LCHFLAGS = 304 +pkg syscall (netbsd-arm64), const SYS_LCHFLAGS ideal-int +pkg syscall (netbsd-arm64), const SYS_LCHMOD = 274 +pkg syscall (netbsd-arm64), const SYS_LCHMOD ideal-int +pkg syscall (netbsd-arm64), const SYS_LCHOWN = 275 +pkg syscall (netbsd-arm64), const SYS_LCHOWN ideal-int +pkg syscall (netbsd-arm64), const SYS_LGETXATTR = 379 +pkg syscall (netbsd-arm64), const SYS_LGETXATTR ideal-int +pkg syscall (netbsd-arm64), const SYS_LINK = 9 +pkg syscall (netbsd-arm64), const SYS_LINK ideal-int +pkg syscall (netbsd-arm64), const SYS_LINKAT = 457 +pkg syscall (netbsd-arm64), const SYS_LINKAT ideal-int +pkg syscall (netbsd-arm64), const SYS_LISTEN = 106 +pkg syscall (netbsd-arm64), const SYS_LISTEN ideal-int +pkg syscall (netbsd-arm64), const SYS_LISTXATTR = 381 +pkg syscall (netbsd-arm64), const SYS_LISTXATTR ideal-int +pkg syscall (netbsd-arm64), const SYS_LLISTXATTR = 382 +pkg syscall (netbsd-arm64), const SYS_LLISTXATTR ideal-int +pkg syscall (netbsd-arm64), const SYS_LREMOVEXATTR = 385 +pkg syscall (netbsd-arm64), const SYS_LREMOVEXATTR ideal-int +pkg syscall (netbsd-arm64), const SYS_LSEEK = 199 +pkg syscall (netbsd-arm64), const SYS_LSEEK ideal-int +pkg syscall (netbsd-arm64), const SYS_LSETXATTR = 376 +pkg syscall (netbsd-arm64), const SYS_LSETXATTR ideal-int +pkg syscall (netbsd-arm64), const SYS_LSTAT = 441 +pkg syscall (netbsd-arm64), const SYS_LSTAT ideal-int +pkg syscall (netbsd-arm64), const SYS_LUTIMES = 424 +pkg syscall (netbsd-arm64), const SYS_LUTIMES ideal-int +pkg syscall (netbsd-arm64), const SYS_MADVISE = 75 +pkg syscall (netbsd-arm64), const SYS_MADVISE ideal-int +pkg syscall (netbsd-arm64), const SYS_MINCORE = 78 +pkg syscall (netbsd-arm64), const SYS_MINCORE ideal-int +pkg syscall (netbsd-arm64), const SYS_MINHERIT = 273 +pkg syscall (netbsd-arm64), const SYS_MINHERIT ideal-int +pkg syscall (netbsd-arm64), const SYS_MKDIR = 136 +pkg syscall (netbsd-arm64), const SYS_MKDIR ideal-int +pkg syscall (netbsd-arm64), const SYS_MKDIRAT = 461 +pkg syscall (netbsd-arm64), const SYS_MKDIRAT ideal-int +pkg syscall (netbsd-arm64), const SYS_MKFIFO = 132 +pkg syscall (netbsd-arm64), const SYS_MKFIFO ideal-int +pkg syscall (netbsd-arm64), const SYS_MKFIFOAT = 459 +pkg syscall (netbsd-arm64), const SYS_MKFIFOAT ideal-int +pkg syscall (netbsd-arm64), const SYS_MKNOD = 450 +pkg syscall (netbsd-arm64), const SYS_MKNOD ideal-int +pkg syscall (netbsd-arm64), const SYS_MKNODAT = 460 +pkg syscall (netbsd-arm64), const SYS_MKNODAT ideal-int +pkg syscall (netbsd-arm64), const SYS_MLOCK = 203 +pkg syscall (netbsd-arm64), const SYS_MLOCK ideal-int +pkg syscall (netbsd-arm64), const SYS_MLOCKALL = 242 +pkg syscall (netbsd-arm64), const SYS_MLOCKALL ideal-int +pkg syscall (netbsd-arm64), const SYS_MMAP = 197 +pkg syscall (netbsd-arm64), const SYS_MMAP ideal-int +pkg syscall (netbsd-arm64), const SYS_MODCTL = 246 +pkg syscall (netbsd-arm64), const SYS_MODCTL ideal-int +pkg syscall (netbsd-arm64), const SYS_MOUNT = 410 +pkg syscall (netbsd-arm64), const SYS_MOUNT ideal-int +pkg syscall (netbsd-arm64), const SYS_MPROTECT = 74 +pkg syscall (netbsd-arm64), const SYS_MPROTECT ideal-int +pkg syscall (netbsd-arm64), const SYS_MREMAP = 411 +pkg syscall (netbsd-arm64), const SYS_MREMAP ideal-int +pkg syscall (netbsd-arm64), const SYS_MSGCTL = 444 +pkg syscall (netbsd-arm64), const SYS_MSGCTL ideal-int +pkg syscall (netbsd-arm64), const SYS_MSGGET = 225 +pkg syscall (netbsd-arm64), const SYS_MSGGET ideal-int +pkg syscall (netbsd-arm64), const SYS_MSGRCV = 227 +pkg syscall (netbsd-arm64), const SYS_MSGRCV ideal-int +pkg syscall (netbsd-arm64), const SYS_MSGSND = 226 +pkg syscall (netbsd-arm64), const SYS_MSGSND ideal-int +pkg syscall (netbsd-arm64), const SYS_MUNLOCK = 204 +pkg syscall (netbsd-arm64), const SYS_MUNLOCK ideal-int +pkg syscall (netbsd-arm64), const SYS_MUNLOCKALL = 243 +pkg syscall (netbsd-arm64), const SYS_MUNLOCKALL ideal-int +pkg syscall (netbsd-arm64), const SYS_MUNMAP = 73 +pkg syscall (netbsd-arm64), const SYS_MUNMAP ideal-int +pkg syscall (netbsd-arm64), const SYS_NANOSLEEP = 430 +pkg syscall (netbsd-arm64), const SYS_NANOSLEEP ideal-int +pkg syscall (netbsd-arm64), const SYS_NTP_ADJTIME = 176 +pkg syscall (netbsd-arm64), const SYS_NTP_ADJTIME ideal-int +pkg syscall (netbsd-arm64), const SYS_NTP_GETTIME = 448 +pkg syscall (netbsd-arm64), const SYS_NTP_GETTIME ideal-int +pkg syscall (netbsd-arm64), const SYS_OPEN = 5 +pkg syscall (netbsd-arm64), const SYS_OPEN ideal-int +pkg syscall (netbsd-arm64), const SYS_OPENAT = 468 +pkg syscall (netbsd-arm64), const SYS_OPENAT ideal-int +pkg syscall (netbsd-arm64), const SYS_PACCEPT = 456 +pkg syscall (netbsd-arm64), const SYS_PACCEPT ideal-int +pkg syscall (netbsd-arm64), const SYS_PATHCONF = 191 +pkg syscall (netbsd-arm64), const SYS_PATHCONF ideal-int +pkg syscall (netbsd-arm64), const SYS_PIPE = 42 +pkg syscall (netbsd-arm64), const SYS_PIPE ideal-int +pkg syscall (netbsd-arm64), const SYS_PIPE2 = 453 +pkg syscall (netbsd-arm64), const SYS_PIPE2 ideal-int +pkg syscall (netbsd-arm64), const SYS_PMC_CONTROL = 342 +pkg syscall (netbsd-arm64), const SYS_PMC_CONTROL ideal-int +pkg syscall (netbsd-arm64), const SYS_PMC_GET_INFO = 341 +pkg syscall (netbsd-arm64), const SYS_PMC_GET_INFO ideal-int +pkg syscall (netbsd-arm64), const SYS_POLL = 209 +pkg syscall (netbsd-arm64), const SYS_POLL ideal-int +pkg syscall (netbsd-arm64), const SYS_POLLTS = 437 +pkg syscall (netbsd-arm64), const SYS_POLLTS ideal-int +pkg syscall (netbsd-arm64), const SYS_POSIX_FADVISE = 416 +pkg syscall (netbsd-arm64), const SYS_POSIX_FADVISE ideal-int +pkg syscall (netbsd-arm64), const SYS_POSIX_SPAWN = 474 +pkg syscall (netbsd-arm64), const SYS_POSIX_SPAWN ideal-int +pkg syscall (netbsd-arm64), const SYS_PREAD = 173 +pkg syscall (netbsd-arm64), const SYS_PREAD ideal-int +pkg syscall (netbsd-arm64), const SYS_PREADV = 289 +pkg syscall (netbsd-arm64), const SYS_PREADV ideal-int +pkg syscall (netbsd-arm64), const SYS_PROFIL = 44 +pkg syscall (netbsd-arm64), const SYS_PROFIL ideal-int +pkg syscall (netbsd-arm64), const SYS_PSELECT = 436 +pkg syscall (netbsd-arm64), const SYS_PSELECT ideal-int +pkg syscall (netbsd-arm64), const SYS_PSET_ASSIGN = 414 +pkg syscall (netbsd-arm64), const SYS_PSET_ASSIGN ideal-int +pkg syscall (netbsd-arm64), const SYS_PSET_CREATE = 412 +pkg syscall (netbsd-arm64), const SYS_PSET_CREATE ideal-int +pkg syscall (netbsd-arm64), const SYS_PSET_DESTROY = 413 +pkg syscall (netbsd-arm64), const SYS_PSET_DESTROY ideal-int +pkg syscall (netbsd-arm64), const SYS_PTRACE = 26 +pkg syscall (netbsd-arm64), const SYS_PTRACE ideal-int +pkg syscall (netbsd-arm64), const SYS_PWRITE = 174 +pkg syscall (netbsd-arm64), const SYS_PWRITE ideal-int +pkg syscall (netbsd-arm64), const SYS_PWRITEV = 290 +pkg syscall (netbsd-arm64), const SYS_PWRITEV ideal-int +pkg syscall (netbsd-arm64), const SYS_RASCTL = 343 +pkg syscall (netbsd-arm64), const SYS_RASCTL ideal-int +pkg syscall (netbsd-arm64), const SYS_READ = 3 +pkg syscall (netbsd-arm64), const SYS_READ ideal-int +pkg syscall (netbsd-arm64), const SYS_READLINK = 58 +pkg syscall (netbsd-arm64), const SYS_READLINK ideal-int +pkg syscall (netbsd-arm64), const SYS_READLINKAT = 469 +pkg syscall (netbsd-arm64), const SYS_READLINKAT ideal-int +pkg syscall (netbsd-arm64), const SYS_READV = 120 +pkg syscall (netbsd-arm64), const SYS_READV ideal-int +pkg syscall (netbsd-arm64), const SYS_REBOOT = 208 +pkg syscall (netbsd-arm64), const SYS_REBOOT ideal-int +pkg syscall (netbsd-arm64), const SYS_RECVFROM = 29 +pkg syscall (netbsd-arm64), const SYS_RECVFROM ideal-int +pkg syscall (netbsd-arm64), const SYS_RECVMMSG = 475 +pkg syscall (netbsd-arm64), const SYS_RECVMMSG ideal-int +pkg syscall (netbsd-arm64), const SYS_RECVMSG = 27 +pkg syscall (netbsd-arm64), const SYS_RECVMSG ideal-int +pkg syscall (netbsd-arm64), const SYS_REMOVEXATTR = 384 +pkg syscall (netbsd-arm64), const SYS_REMOVEXATTR ideal-int +pkg syscall (netbsd-arm64), const SYS_RENAME = 128 +pkg syscall (netbsd-arm64), const SYS_RENAME ideal-int +pkg syscall (netbsd-arm64), const SYS_RENAMEAT = 458 +pkg syscall (netbsd-arm64), const SYS_RENAMEAT ideal-int +pkg syscall (netbsd-arm64), const SYS_REVOKE = 56 +pkg syscall (netbsd-arm64), const SYS_REVOKE ideal-int +pkg syscall (netbsd-arm64), const SYS_RMDIR = 137 +pkg syscall (netbsd-arm64), const SYS_RMDIR ideal-int +pkg syscall (netbsd-arm64), const SYS_SBRK = 69 +pkg syscall (netbsd-arm64), const SYS_SBRK ideal-int +pkg syscall (netbsd-arm64), const SYS_SCHED_YIELD = 350 +pkg syscall (netbsd-arm64), const SYS_SCHED_YIELD ideal-int +pkg syscall (netbsd-arm64), const SYS_SELECT = 417 +pkg syscall (netbsd-arm64), const SYS_SELECT ideal-int +pkg syscall (netbsd-arm64), const SYS_SEMCONFIG = 223 +pkg syscall (netbsd-arm64), const SYS_SEMCONFIG ideal-int +pkg syscall (netbsd-arm64), const SYS_SEMGET = 221 +pkg syscall (netbsd-arm64), const SYS_SEMGET ideal-int +pkg syscall (netbsd-arm64), const SYS_SEMOP = 222 +pkg syscall (netbsd-arm64), const SYS_SEMOP ideal-int +pkg syscall (netbsd-arm64), const SYS_SENDMMSG = 476 +pkg syscall (netbsd-arm64), const SYS_SENDMMSG ideal-int +pkg syscall (netbsd-arm64), const SYS_SENDMSG = 28 +pkg syscall (netbsd-arm64), const SYS_SENDMSG ideal-int +pkg syscall (netbsd-arm64), const SYS_SENDTO = 133 +pkg syscall (netbsd-arm64), const SYS_SENDTO ideal-int +pkg syscall (netbsd-arm64), const SYS_SETCONTEXT = 308 +pkg syscall (netbsd-arm64), const SYS_SETCONTEXT ideal-int +pkg syscall (netbsd-arm64), const SYS_SETEGID = 182 +pkg syscall (netbsd-arm64), const SYS_SETEGID ideal-int +pkg syscall (netbsd-arm64), const SYS_SETEUID = 183 +pkg syscall (netbsd-arm64), const SYS_SETEUID ideal-int +pkg syscall (netbsd-arm64), const SYS_SETGID = 181 +pkg syscall (netbsd-arm64), const SYS_SETGID ideal-int +pkg syscall (netbsd-arm64), const SYS_SETGROUPS = 80 +pkg syscall (netbsd-arm64), const SYS_SETGROUPS ideal-int +pkg syscall (netbsd-arm64), const SYS_SETITIMER = 425 +pkg syscall (netbsd-arm64), const SYS_SETITIMER ideal-int +pkg syscall (netbsd-arm64), const SYS_SETPGID = 82 +pkg syscall (netbsd-arm64), const SYS_SETPGID ideal-int +pkg syscall (netbsd-arm64), const SYS_SETPRIORITY = 96 +pkg syscall (netbsd-arm64), const SYS_SETPRIORITY ideal-int +pkg syscall (netbsd-arm64), const SYS_SETREGID = 127 +pkg syscall (netbsd-arm64), const SYS_SETREGID ideal-int +pkg syscall (netbsd-arm64), const SYS_SETREUID = 126 +pkg syscall (netbsd-arm64), const SYS_SETREUID ideal-int +pkg syscall (netbsd-arm64), const SYS_SETRLIMIT = 195 +pkg syscall (netbsd-arm64), const SYS_SETRLIMIT ideal-int +pkg syscall (netbsd-arm64), const SYS_SETSID = 147 +pkg syscall (netbsd-arm64), const SYS_SETSID ideal-int +pkg syscall (netbsd-arm64), const SYS_SETSOCKOPT = 105 +pkg syscall (netbsd-arm64), const SYS_SETSOCKOPT ideal-int +pkg syscall (netbsd-arm64), const SYS_SETTIMEOFDAY = 419 +pkg syscall (netbsd-arm64), const SYS_SETTIMEOFDAY ideal-int +pkg syscall (netbsd-arm64), const SYS_SETUID = 23 +pkg syscall (netbsd-arm64), const SYS_SETUID ideal-int +pkg syscall (netbsd-arm64), const SYS_SETXATTR = 375 +pkg syscall (netbsd-arm64), const SYS_SETXATTR ideal-int +pkg syscall (netbsd-arm64), const SYS_SHMAT = 228 +pkg syscall (netbsd-arm64), const SYS_SHMAT ideal-int +pkg syscall (netbsd-arm64), const SYS_SHMCTL = 443 +pkg syscall (netbsd-arm64), const SYS_SHMCTL ideal-int +pkg syscall (netbsd-arm64), const SYS_SHMDT = 230 +pkg syscall (netbsd-arm64), const SYS_SHMDT ideal-int +pkg syscall (netbsd-arm64), const SYS_SHMGET = 231 +pkg syscall (netbsd-arm64), const SYS_SHMGET ideal-int +pkg syscall (netbsd-arm64), const SYS_SHUTDOWN = 134 +pkg syscall (netbsd-arm64), const SYS_SHUTDOWN ideal-int +pkg syscall (netbsd-arm64), const SYS_SIGQUEUEINFO = 245 +pkg syscall (netbsd-arm64), const SYS_SIGQUEUEINFO ideal-int +pkg syscall (netbsd-arm64), const SYS_SOCKET = 394 +pkg syscall (netbsd-arm64), const SYS_SOCKET ideal-int +pkg syscall (netbsd-arm64), const SYS_SOCKETPAIR = 135 +pkg syscall (netbsd-arm64), const SYS_SOCKETPAIR ideal-int +pkg syscall (netbsd-arm64), const SYS_SSTK = 70 +pkg syscall (netbsd-arm64), const SYS_SSTK ideal-int +pkg syscall (netbsd-arm64), const SYS_STAT = 439 +pkg syscall (netbsd-arm64), const SYS_STAT ideal-int +pkg syscall (netbsd-arm64), const SYS_STATVFS1 = 357 +pkg syscall (netbsd-arm64), const SYS_STATVFS1 ideal-int +pkg syscall (netbsd-arm64), const SYS_SWAPCTL = 271 +pkg syscall (netbsd-arm64), const SYS_SWAPCTL ideal-int +pkg syscall (netbsd-arm64), const SYS_SYMLINK = 57 +pkg syscall (netbsd-arm64), const SYS_SYMLINK ideal-int +pkg syscall (netbsd-arm64), const SYS_SYMLINKAT = 470 +pkg syscall (netbsd-arm64), const SYS_SYMLINKAT ideal-int +pkg syscall (netbsd-arm64), const SYS_SYNC = 36 +pkg syscall (netbsd-arm64), const SYS_SYNC ideal-int +pkg syscall (netbsd-arm64), const SYS_SYSARCH = 165 +pkg syscall (netbsd-arm64), const SYS_SYSARCH ideal-int +pkg syscall (netbsd-arm64), const SYS_TIMER_CREATE = 235 +pkg syscall (netbsd-arm64), const SYS_TIMER_CREATE ideal-int +pkg syscall (netbsd-arm64), const SYS_TIMER_DELETE = 236 +pkg syscall (netbsd-arm64), const SYS_TIMER_DELETE ideal-int +pkg syscall (netbsd-arm64), const SYS_TIMER_GETOVERRUN = 239 +pkg syscall (netbsd-arm64), const SYS_TIMER_GETOVERRUN ideal-int +pkg syscall (netbsd-arm64), const SYS_TIMER_GETTIME = 447 +pkg syscall (netbsd-arm64), const SYS_TIMER_GETTIME ideal-int +pkg syscall (netbsd-arm64), const SYS_TIMER_SETTIME = 446 +pkg syscall (netbsd-arm64), const SYS_TIMER_SETTIME ideal-int +pkg syscall (netbsd-arm64), const SYS_TRUNCATE = 200 +pkg syscall (netbsd-arm64), const SYS_TRUNCATE ideal-int +pkg syscall (netbsd-arm64), const SYS_UMASK = 60 +pkg syscall (netbsd-arm64), const SYS_UMASK ideal-int +pkg syscall (netbsd-arm64), const SYS_UNDELETE = 205 +pkg syscall (netbsd-arm64), const SYS_UNDELETE ideal-int +pkg syscall (netbsd-arm64), const SYS_UNLINK = 10 +pkg syscall (netbsd-arm64), const SYS_UNLINK ideal-int +pkg syscall (netbsd-arm64), const SYS_UNLINKAT = 471 +pkg syscall (netbsd-arm64), const SYS_UNLINKAT ideal-int +pkg syscall (netbsd-arm64), const SYS_UNMOUNT = 22 +pkg syscall (netbsd-arm64), const SYS_UNMOUNT ideal-int +pkg syscall (netbsd-arm64), const SYS_UTIMENSAT = 467 +pkg syscall (netbsd-arm64), const SYS_UTIMENSAT ideal-int +pkg syscall (netbsd-arm64), const SYS_UTIMES = 420 +pkg syscall (netbsd-arm64), const SYS_UTIMES ideal-int +pkg syscall (netbsd-arm64), const SYS_UTRACE = 306 +pkg syscall (netbsd-arm64), const SYS_UTRACE ideal-int +pkg syscall (netbsd-arm64), const SYS_UUIDGEN = 355 +pkg syscall (netbsd-arm64), const SYS_UUIDGEN ideal-int +pkg syscall (netbsd-arm64), const SYS_VADVISE = 72 +pkg syscall (netbsd-arm64), const SYS_VADVISE ideal-int +pkg syscall (netbsd-arm64), const SYS_VFORK = 66 +pkg syscall (netbsd-arm64), const SYS_VFORK ideal-int +pkg syscall (netbsd-arm64), const SYS_WAIT4 = 449 +pkg syscall (netbsd-arm64), const SYS_WAIT4 ideal-int +pkg syscall (netbsd-arm64), const SYS_WRITE = 4 +pkg syscall (netbsd-arm64), const SYS_WRITE ideal-int +pkg syscall (netbsd-arm64), const SYS_WRITEV = 121 +pkg syscall (netbsd-arm64), const SYS_WRITEV ideal-int +pkg syscall (netbsd-arm64), const SYS__LWP_CONTINUE = 314 +pkg syscall (netbsd-arm64), const SYS__LWP_CONTINUE ideal-int +pkg syscall (netbsd-arm64), const SYS__LWP_CREATE = 309 +pkg syscall (netbsd-arm64), const SYS__LWP_CREATE ideal-int +pkg syscall (netbsd-arm64), const SYS__LWP_CTL = 325 +pkg syscall (netbsd-arm64), const SYS__LWP_CTL ideal-int +pkg syscall (netbsd-arm64), const SYS__LWP_DETACH = 319 +pkg syscall (netbsd-arm64), const SYS__LWP_DETACH ideal-int +pkg syscall (netbsd-arm64), const SYS__LWP_EXIT = 310 +pkg syscall (netbsd-arm64), const SYS__LWP_EXIT ideal-int +pkg syscall (netbsd-arm64), const SYS__LWP_GETNAME = 324 +pkg syscall (netbsd-arm64), const SYS__LWP_GETNAME ideal-int +pkg syscall (netbsd-arm64), const SYS__LWP_GETPRIVATE = 316 +pkg syscall (netbsd-arm64), const SYS__LWP_GETPRIVATE ideal-int +pkg syscall (netbsd-arm64), const SYS__LWP_KILL = 318 +pkg syscall (netbsd-arm64), const SYS__LWP_KILL ideal-int +pkg syscall (netbsd-arm64), const SYS__LWP_PARK = 434 +pkg syscall (netbsd-arm64), const SYS__LWP_PARK ideal-int +pkg syscall (netbsd-arm64), const SYS__LWP_SELF = 311 +pkg syscall (netbsd-arm64), const SYS__LWP_SELF ideal-int +pkg syscall (netbsd-arm64), const SYS__LWP_SETNAME = 323 +pkg syscall (netbsd-arm64), const SYS__LWP_SETNAME ideal-int +pkg syscall (netbsd-arm64), const SYS__LWP_SETPRIVATE = 317 +pkg syscall (netbsd-arm64), const SYS__LWP_SETPRIVATE ideal-int +pkg syscall (netbsd-arm64), const SYS__LWP_SUSPEND = 313 +pkg syscall (netbsd-arm64), const SYS__LWP_SUSPEND ideal-int +pkg syscall (netbsd-arm64), const SYS__LWP_UNPARK = 321 +pkg syscall (netbsd-arm64), const SYS__LWP_UNPARK ideal-int +pkg syscall (netbsd-arm64), const SYS__LWP_UNPARK_ALL = 322 +pkg syscall (netbsd-arm64), const SYS__LWP_UNPARK_ALL ideal-int +pkg syscall (netbsd-arm64), const SYS__LWP_WAIT = 312 +pkg syscall (netbsd-arm64), const SYS__LWP_WAIT ideal-int +pkg syscall (netbsd-arm64), const SYS__LWP_WAKEUP = 315 +pkg syscall (netbsd-arm64), const SYS__LWP_WAKEUP ideal-int +pkg syscall (netbsd-arm64), const SYS__PSET_BIND = 415 +pkg syscall (netbsd-arm64), const SYS__PSET_BIND ideal-int +pkg syscall (netbsd-arm64), const SYS__SCHED_GETAFFINITY = 349 +pkg syscall (netbsd-arm64), const SYS__SCHED_GETAFFINITY ideal-int +pkg syscall (netbsd-arm64), const SYS__SCHED_GETPARAM = 347 +pkg syscall (netbsd-arm64), const SYS__SCHED_GETPARAM ideal-int +pkg syscall (netbsd-arm64), const SYS__SCHED_SETAFFINITY = 348 +pkg syscall (netbsd-arm64), const SYS__SCHED_SETAFFINITY ideal-int +pkg syscall (netbsd-arm64), const SYS__SCHED_SETPARAM = 346 +pkg syscall (netbsd-arm64), const SYS__SCHED_SETPARAM ideal-int +pkg syscall (netbsd-arm64), const SYS___CLONE = 287 +pkg syscall (netbsd-arm64), const SYS___CLONE ideal-int +pkg syscall (netbsd-arm64), const SYS___GETCWD = 296 +pkg syscall (netbsd-arm64), const SYS___GETCWD ideal-int +pkg syscall (netbsd-arm64), const SYS___GETLOGIN = 49 +pkg syscall (netbsd-arm64), const SYS___GETLOGIN ideal-int +pkg syscall (netbsd-arm64), const SYS___POSIX_CHOWN = 283 +pkg syscall (netbsd-arm64), const SYS___POSIX_CHOWN ideal-int +pkg syscall (netbsd-arm64), const SYS___POSIX_FCHOWN = 284 +pkg syscall (netbsd-arm64), const SYS___POSIX_FCHOWN ideal-int +pkg syscall (netbsd-arm64), const SYS___POSIX_LCHOWN = 285 +pkg syscall (netbsd-arm64), const SYS___POSIX_LCHOWN ideal-int +pkg syscall (netbsd-arm64), const SYS___POSIX_RENAME = 270 +pkg syscall (netbsd-arm64), const SYS___POSIX_RENAME ideal-int +pkg syscall (netbsd-arm64), const SYS___QUOTACTL = 473 +pkg syscall (netbsd-arm64), const SYS___QUOTACTL ideal-int +pkg syscall (netbsd-arm64), const SYS___SEMCTL = 442 +pkg syscall (netbsd-arm64), const SYS___SEMCTL ideal-int +pkg syscall (netbsd-arm64), const SYS___SETLOGIN = 50 +pkg syscall (netbsd-arm64), const SYS___SETLOGIN ideal-int +pkg syscall (netbsd-arm64), const SYS___SIGACTION_SIGTRAMP = 340 +pkg syscall (netbsd-arm64), const SYS___SIGACTION_SIGTRAMP ideal-int +pkg syscall (netbsd-arm64), const SYS___SIGTIMEDWAIT = 431 +pkg syscall (netbsd-arm64), const SYS___SIGTIMEDWAIT ideal-int +pkg syscall (netbsd-arm64), const SYS___SYSCTL = 202 +pkg syscall (netbsd-arm64), const SYS___SYSCTL ideal-int +pkg syscall (netbsd-arm64), const S_ARCH1 = 65536 +pkg syscall (netbsd-arm64), const S_ARCH1 ideal-int +pkg syscall (netbsd-arm64), const S_ARCH2 = 131072 +pkg syscall (netbsd-arm64), const S_ARCH2 ideal-int +pkg syscall (netbsd-arm64), const S_BLKSIZE = 512 +pkg syscall (netbsd-arm64), const S_BLKSIZE ideal-int +pkg syscall (netbsd-arm64), const S_IEXEC = 64 +pkg syscall (netbsd-arm64), const S_IEXEC ideal-int +pkg syscall (netbsd-arm64), const S_IFMT = 61440 +pkg syscall (netbsd-arm64), const S_IFWHT = 57344 +pkg syscall (netbsd-arm64), const S_IFWHT ideal-int +pkg syscall (netbsd-arm64), const S_IREAD = 256 +pkg syscall (netbsd-arm64), const S_IREAD ideal-int +pkg syscall (netbsd-arm64), const S_IRGRP = 32 +pkg syscall (netbsd-arm64), const S_IRGRP ideal-int +pkg syscall (netbsd-arm64), const S_IROTH = 4 +pkg syscall (netbsd-arm64), const S_IROTH ideal-int +pkg syscall (netbsd-arm64), const S_IRWXG = 56 +pkg syscall (netbsd-arm64), const S_IRWXG ideal-int +pkg syscall (netbsd-arm64), const S_IRWXO = 7 +pkg syscall (netbsd-arm64), const S_IRWXO ideal-int +pkg syscall (netbsd-arm64), const S_IRWXU = 448 +pkg syscall (netbsd-arm64), const S_IRWXU ideal-int +pkg syscall (netbsd-arm64), const S_ISTXT = 512 +pkg syscall (netbsd-arm64), const S_ISTXT ideal-int +pkg syscall (netbsd-arm64), const S_IWGRP = 16 +pkg syscall (netbsd-arm64), const S_IWGRP ideal-int +pkg syscall (netbsd-arm64), const S_IWOTH = 2 +pkg syscall (netbsd-arm64), const S_IWOTH ideal-int +pkg syscall (netbsd-arm64), const S_IWRITE = 128 +pkg syscall (netbsd-arm64), const S_IWRITE ideal-int +pkg syscall (netbsd-arm64), const S_IXGRP = 8 +pkg syscall (netbsd-arm64), const S_IXGRP ideal-int +pkg syscall (netbsd-arm64), const S_IXOTH = 1 +pkg syscall (netbsd-arm64), const S_IXOTH ideal-int +pkg syscall (netbsd-arm64), const S_LOGIN_SET = 1 +pkg syscall (netbsd-arm64), const S_LOGIN_SET ideal-int +pkg syscall (netbsd-arm64), const SizeofBpfHdr = 32 +pkg syscall (netbsd-arm64), const SizeofBpfHdr ideal-int +pkg syscall (netbsd-arm64), const SizeofBpfInsn = 8 +pkg syscall (netbsd-arm64), const SizeofBpfInsn ideal-int +pkg syscall (netbsd-arm64), const SizeofBpfProgram = 16 +pkg syscall (netbsd-arm64), const SizeofBpfProgram ideal-int +pkg syscall (netbsd-arm64), const SizeofBpfStat = 128 +pkg syscall (netbsd-arm64), const SizeofBpfStat ideal-int +pkg syscall (netbsd-arm64), const SizeofBpfVersion = 4 +pkg syscall (netbsd-arm64), const SizeofBpfVersion ideal-int +pkg syscall (netbsd-arm64), const SizeofCmsghdr = 12 +pkg syscall (netbsd-arm64), const SizeofCmsghdr ideal-int +pkg syscall (netbsd-arm64), const SizeofICMPv6Filter = 32 +pkg syscall (netbsd-arm64), const SizeofICMPv6Filter ideal-int +pkg syscall (netbsd-arm64), const SizeofIPMreq = 8 +pkg syscall (netbsd-arm64), const SizeofIPMreq ideal-int +pkg syscall (netbsd-arm64), const SizeofIPv6MTUInfo = 32 +pkg syscall (netbsd-arm64), const SizeofIPv6MTUInfo ideal-int +pkg syscall (netbsd-arm64), const SizeofIPv6Mreq = 20 +pkg syscall (netbsd-arm64), const SizeofIPv6Mreq ideal-int +pkg syscall (netbsd-arm64), const SizeofIfAnnounceMsghdr = 24 +pkg syscall (netbsd-arm64), const SizeofIfAnnounceMsghdr ideal-int +pkg syscall (netbsd-arm64), const SizeofIfData = 136 +pkg syscall (netbsd-arm64), const SizeofIfData ideal-int +pkg syscall (netbsd-arm64), const SizeofIfMsghdr = 152 +pkg syscall (netbsd-arm64), const SizeofIfMsghdr ideal-int +pkg syscall (netbsd-arm64), const SizeofIfaMsghdr = 24 +pkg syscall (netbsd-arm64), const SizeofIfaMsghdr ideal-int +pkg syscall (netbsd-arm64), const SizeofInet6Pktinfo = 20 +pkg syscall (netbsd-arm64), const SizeofInet6Pktinfo ideal-int +pkg syscall (netbsd-arm64), const SizeofLinger = 8 +pkg syscall (netbsd-arm64), const SizeofLinger ideal-int +pkg syscall (netbsd-arm64), const SizeofMsghdr = 48 +pkg syscall (netbsd-arm64), const SizeofMsghdr ideal-int +pkg syscall (netbsd-arm64), const SizeofRtMetrics = 80 +pkg syscall (netbsd-arm64), const SizeofRtMetrics ideal-int +pkg syscall (netbsd-arm64), const SizeofRtMsghdr = 120 +pkg syscall (netbsd-arm64), const SizeofRtMsghdr ideal-int +pkg syscall (netbsd-arm64), const SizeofSockaddrAny = 108 +pkg syscall (netbsd-arm64), const SizeofSockaddrAny ideal-int +pkg syscall (netbsd-arm64), const SizeofSockaddrDatalink = 20 +pkg syscall (netbsd-arm64), const SizeofSockaddrDatalink ideal-int +pkg syscall (netbsd-arm64), const SizeofSockaddrInet4 = 16 +pkg syscall (netbsd-arm64), const SizeofSockaddrInet4 ideal-int +pkg syscall (netbsd-arm64), const SizeofSockaddrInet6 = 28 +pkg syscall (netbsd-arm64), const SizeofSockaddrInet6 ideal-int +pkg syscall (netbsd-arm64), const SizeofSockaddrUnix = 106 +pkg syscall (netbsd-arm64), const SizeofSockaddrUnix ideal-int +pkg syscall (netbsd-arm64), const TCIFLUSH = 1 +pkg syscall (netbsd-arm64), const TCIFLUSH ideal-int +pkg syscall (netbsd-arm64), const TCIOFLUSH = 3 +pkg syscall (netbsd-arm64), const TCIOFLUSH ideal-int +pkg syscall (netbsd-arm64), const TCOFLUSH = 2 +pkg syscall (netbsd-arm64), const TCOFLUSH ideal-int +pkg syscall (netbsd-arm64), const TCP_CONGCTL = 32 +pkg syscall (netbsd-arm64), const TCP_CONGCTL ideal-int +pkg syscall (netbsd-arm64), const TCP_KEEPCNT = 6 +pkg syscall (netbsd-arm64), const TCP_KEEPCNT ideal-int +pkg syscall (netbsd-arm64), const TCP_KEEPIDLE = 3 +pkg syscall (netbsd-arm64), const TCP_KEEPIDLE ideal-int +pkg syscall (netbsd-arm64), const TCP_KEEPINIT = 7 +pkg syscall (netbsd-arm64), const TCP_KEEPINIT ideal-int +pkg syscall (netbsd-arm64), const TCP_KEEPINTVL = 5 +pkg syscall (netbsd-arm64), const TCP_KEEPINTVL ideal-int +pkg syscall (netbsd-arm64), const TCP_MAXBURST = 4 +pkg syscall (netbsd-arm64), const TCP_MAXBURST ideal-int +pkg syscall (netbsd-arm64), const TCP_MAXSEG = 2 +pkg syscall (netbsd-arm64), const TCP_MAXSEG ideal-int +pkg syscall (netbsd-arm64), const TCP_MAXWIN = 65535 +pkg syscall (netbsd-arm64), const TCP_MAXWIN ideal-int +pkg syscall (netbsd-arm64), const TCP_MAX_WINSHIFT = 14 +pkg syscall (netbsd-arm64), const TCP_MAX_WINSHIFT ideal-int +pkg syscall (netbsd-arm64), const TCP_MD5SIG = 16 +pkg syscall (netbsd-arm64), const TCP_MD5SIG ideal-int +pkg syscall (netbsd-arm64), const TCP_MINMSS = 216 +pkg syscall (netbsd-arm64), const TCP_MINMSS ideal-int +pkg syscall (netbsd-arm64), const TCP_MSS = 536 +pkg syscall (netbsd-arm64), const TCP_MSS ideal-int +pkg syscall (netbsd-arm64), const TCSAFLUSH = 2 +pkg syscall (netbsd-arm64), const TCSAFLUSH ideal-int +pkg syscall (netbsd-arm64), const TIOCCBRK = 536900730 +pkg syscall (netbsd-arm64), const TIOCCBRK ideal-int +pkg syscall (netbsd-arm64), const TIOCCDTR = 536900728 +pkg syscall (netbsd-arm64), const TIOCCDTR ideal-int +pkg syscall (netbsd-arm64), const TIOCCONS = 2147775586 +pkg syscall (netbsd-arm64), const TIOCCONS ideal-int +pkg syscall (netbsd-arm64), const TIOCDCDTIMESTAMP = 1074820184 +pkg syscall (netbsd-arm64), const TIOCDCDTIMESTAMP ideal-int +pkg syscall (netbsd-arm64), const TIOCDRAIN = 536900702 +pkg syscall (netbsd-arm64), const TIOCDRAIN ideal-int +pkg syscall (netbsd-arm64), const TIOCEXCL = 536900621 +pkg syscall (netbsd-arm64), const TIOCEXCL ideal-int +pkg syscall (netbsd-arm64), const TIOCEXT = 2147775584 +pkg syscall (netbsd-arm64), const TIOCEXT ideal-int +pkg syscall (netbsd-arm64), const TIOCFLAG_CDTRCTS = 16 +pkg syscall (netbsd-arm64), const TIOCFLAG_CDTRCTS ideal-int +pkg syscall (netbsd-arm64), const TIOCFLAG_CLOCAL = 2 +pkg syscall (netbsd-arm64), const TIOCFLAG_CLOCAL ideal-int +pkg syscall (netbsd-arm64), const TIOCFLAG_CRTSCTS = 4 +pkg syscall (netbsd-arm64), const TIOCFLAG_CRTSCTS ideal-int +pkg syscall (netbsd-arm64), const TIOCFLAG_MDMBUF = 8 +pkg syscall (netbsd-arm64), const TIOCFLAG_MDMBUF ideal-int +pkg syscall (netbsd-arm64), const TIOCFLAG_SOFTCAR = 1 +pkg syscall (netbsd-arm64), const TIOCFLAG_SOFTCAR ideal-int +pkg syscall (netbsd-arm64), const TIOCFLUSH = 2147775504 +pkg syscall (netbsd-arm64), const TIOCFLUSH ideal-int +pkg syscall (netbsd-arm64), const TIOCGETA = 1076655123 +pkg syscall (netbsd-arm64), const TIOCGETA ideal-int +pkg syscall (netbsd-arm64), const TIOCGETD = 1074033690 +pkg syscall (netbsd-arm64), const TIOCGETD ideal-int +pkg syscall (netbsd-arm64), const TIOCGFLAGS = 1074033757 +pkg syscall (netbsd-arm64), const TIOCGFLAGS ideal-int +pkg syscall (netbsd-arm64), const TIOCGLINED = 1075868738 +pkg syscall (netbsd-arm64), const TIOCGLINED ideal-int +pkg syscall (netbsd-arm64), const TIOCGPGRP = 1074033783 +pkg syscall (netbsd-arm64), const TIOCGPGRP ideal-int +pkg syscall (netbsd-arm64), const TIOCGQSIZE = 1074033793 +pkg syscall (netbsd-arm64), const TIOCGQSIZE ideal-int +pkg syscall (netbsd-arm64), const TIOCGRANTPT = 536900679 +pkg syscall (netbsd-arm64), const TIOCGRANTPT ideal-int +pkg syscall (netbsd-arm64), const TIOCGSID = 1074033763 +pkg syscall (netbsd-arm64), const TIOCGSID ideal-int +pkg syscall (netbsd-arm64), const TIOCGSIZE = 1074295912 +pkg syscall (netbsd-arm64), const TIOCGSIZE ideal-int +pkg syscall (netbsd-arm64), const TIOCGWINSZ = 1074295912 +pkg syscall (netbsd-arm64), const TIOCGWINSZ ideal-int +pkg syscall (netbsd-arm64), const TIOCMBIC = 2147775595 +pkg syscall (netbsd-arm64), const TIOCMBIC ideal-int +pkg syscall (netbsd-arm64), const TIOCMBIS = 2147775596 +pkg syscall (netbsd-arm64), const TIOCMBIS ideal-int +pkg syscall (netbsd-arm64), const TIOCMGET = 1074033770 +pkg syscall (netbsd-arm64), const TIOCMGET ideal-int +pkg syscall (netbsd-arm64), const TIOCMSET = 2147775597 +pkg syscall (netbsd-arm64), const TIOCMSET ideal-int +pkg syscall (netbsd-arm64), const TIOCM_CAR = 64 +pkg syscall (netbsd-arm64), const TIOCM_CAR ideal-int +pkg syscall (netbsd-arm64), const TIOCM_CD = 64 +pkg syscall (netbsd-arm64), const TIOCM_CD ideal-int +pkg syscall (netbsd-arm64), const TIOCM_CTS = 32 +pkg syscall (netbsd-arm64), const TIOCM_CTS ideal-int +pkg syscall (netbsd-arm64), const TIOCM_DSR = 256 +pkg syscall (netbsd-arm64), const TIOCM_DSR ideal-int +pkg syscall (netbsd-arm64), const TIOCM_DTR = 2 +pkg syscall (netbsd-arm64), const TIOCM_DTR ideal-int +pkg syscall (netbsd-arm64), const TIOCM_LE = 1 +pkg syscall (netbsd-arm64), const TIOCM_LE ideal-int +pkg syscall (netbsd-arm64), const TIOCM_RI = 128 +pkg syscall (netbsd-arm64), const TIOCM_RI ideal-int +pkg syscall (netbsd-arm64), const TIOCM_RNG = 128 +pkg syscall (netbsd-arm64), const TIOCM_RNG ideal-int +pkg syscall (netbsd-arm64), const TIOCM_RTS = 4 +pkg syscall (netbsd-arm64), const TIOCM_RTS ideal-int +pkg syscall (netbsd-arm64), const TIOCM_SR = 16 +pkg syscall (netbsd-arm64), const TIOCM_SR ideal-int +pkg syscall (netbsd-arm64), const TIOCM_ST = 8 +pkg syscall (netbsd-arm64), const TIOCM_ST ideal-int +pkg syscall (netbsd-arm64), const TIOCNOTTY = 536900721 +pkg syscall (netbsd-arm64), const TIOCNOTTY ideal-int +pkg syscall (netbsd-arm64), const TIOCNXCL = 536900622 +pkg syscall (netbsd-arm64), const TIOCNXCL ideal-int +pkg syscall (netbsd-arm64), const TIOCOUTQ = 1074033779 +pkg syscall (netbsd-arm64), const TIOCOUTQ ideal-int +pkg syscall (netbsd-arm64), const TIOCPKT = 2147775600 +pkg syscall (netbsd-arm64), const TIOCPKT ideal-int +pkg syscall (netbsd-arm64), const TIOCPKT_DATA = 0 +pkg syscall (netbsd-arm64), const TIOCPKT_DATA ideal-int +pkg syscall (netbsd-arm64), const TIOCPKT_DOSTOP = 32 +pkg syscall (netbsd-arm64), const TIOCPKT_DOSTOP ideal-int +pkg syscall (netbsd-arm64), const TIOCPKT_FLUSHREAD = 1 +pkg syscall (netbsd-arm64), const TIOCPKT_FLUSHREAD ideal-int +pkg syscall (netbsd-arm64), const TIOCPKT_FLUSHWRITE = 2 +pkg syscall (netbsd-arm64), const TIOCPKT_FLUSHWRITE ideal-int +pkg syscall (netbsd-arm64), const TIOCPKT_IOCTL = 64 +pkg syscall (netbsd-arm64), const TIOCPKT_IOCTL ideal-int +pkg syscall (netbsd-arm64), const TIOCPKT_NOSTOP = 16 +pkg syscall (netbsd-arm64), const TIOCPKT_NOSTOP ideal-int +pkg syscall (netbsd-arm64), const TIOCPKT_START = 8 +pkg syscall (netbsd-arm64), const TIOCPKT_START ideal-int +pkg syscall (netbsd-arm64), const TIOCPKT_STOP = 4 +pkg syscall (netbsd-arm64), const TIOCPKT_STOP ideal-int +pkg syscall (netbsd-arm64), const TIOCPTMGET = 1076393030 +pkg syscall (netbsd-arm64), const TIOCPTMGET ideal-int +pkg syscall (netbsd-arm64), const TIOCPTSNAME = 1076393032 +pkg syscall (netbsd-arm64), const TIOCPTSNAME ideal-int +pkg syscall (netbsd-arm64), const TIOCRCVFRAME = 2148037701 +pkg syscall (netbsd-arm64), const TIOCRCVFRAME ideal-int +pkg syscall (netbsd-arm64), const TIOCREMOTE = 2147775593 +pkg syscall (netbsd-arm64), const TIOCREMOTE ideal-int +pkg syscall (netbsd-arm64), const TIOCSBRK = 536900731 +pkg syscall (netbsd-arm64), const TIOCSBRK ideal-int +pkg syscall (netbsd-arm64), const TIOCSCTTY = 536900705 +pkg syscall (netbsd-arm64), const TIOCSCTTY ideal-int +pkg syscall (netbsd-arm64), const TIOCSDTR = 536900729 +pkg syscall (netbsd-arm64), const TIOCSDTR ideal-int +pkg syscall (netbsd-arm64), const TIOCSETA = 2150396948 +pkg syscall (netbsd-arm64), const TIOCSETA ideal-int +pkg syscall (netbsd-arm64), const TIOCSETAF = 2150396950 +pkg syscall (netbsd-arm64), const TIOCSETAF ideal-int +pkg syscall (netbsd-arm64), const TIOCSETAW = 2150396949 +pkg syscall (netbsd-arm64), const TIOCSETAW ideal-int +pkg syscall (netbsd-arm64), const TIOCSETD = 2147775515 +pkg syscall (netbsd-arm64), const TIOCSETD ideal-int +pkg syscall (netbsd-arm64), const TIOCSFLAGS = 2147775580 +pkg syscall (netbsd-arm64), const TIOCSFLAGS ideal-int +pkg syscall (netbsd-arm64), const TIOCSIG = 536900703 +pkg syscall (netbsd-arm64), const TIOCSIG ideal-int +pkg syscall (netbsd-arm64), const TIOCSLINED = 2149610563 +pkg syscall (netbsd-arm64), const TIOCSLINED ideal-int +pkg syscall (netbsd-arm64), const TIOCSPGRP = 2147775606 +pkg syscall (netbsd-arm64), const TIOCSPGRP ideal-int +pkg syscall (netbsd-arm64), const TIOCSQSIZE = 2147775616 +pkg syscall (netbsd-arm64), const TIOCSQSIZE ideal-int +pkg syscall (netbsd-arm64), const TIOCSSIZE = 2148037735 +pkg syscall (netbsd-arm64), const TIOCSSIZE ideal-int +pkg syscall (netbsd-arm64), const TIOCSTART = 536900718 +pkg syscall (netbsd-arm64), const TIOCSTART ideal-int +pkg syscall (netbsd-arm64), const TIOCSTAT = 2147775589 +pkg syscall (netbsd-arm64), const TIOCSTAT ideal-int +pkg syscall (netbsd-arm64), const TIOCSTI = 2147578994 +pkg syscall (netbsd-arm64), const TIOCSTI ideal-int +pkg syscall (netbsd-arm64), const TIOCSTOP = 536900719 +pkg syscall (netbsd-arm64), const TIOCSTOP ideal-int +pkg syscall (netbsd-arm64), const TIOCSWINSZ = 2148037735 +pkg syscall (netbsd-arm64), const TIOCSWINSZ ideal-int +pkg syscall (netbsd-arm64), const TIOCUCNTL = 2147775590 +pkg syscall (netbsd-arm64), const TIOCUCNTL ideal-int +pkg syscall (netbsd-arm64), const TIOCXMTFRAME = 2148037700 +pkg syscall (netbsd-arm64), const TIOCXMTFRAME ideal-int +pkg syscall (netbsd-arm64), const TOSTOP = 4194304 +pkg syscall (netbsd-arm64), const TOSTOP ideal-int +pkg syscall (netbsd-arm64), const VDISCARD = 15 +pkg syscall (netbsd-arm64), const VDISCARD ideal-int +pkg syscall (netbsd-arm64), const VDSUSP = 11 +pkg syscall (netbsd-arm64), const VDSUSP ideal-int +pkg syscall (netbsd-arm64), const VEOF = 0 +pkg syscall (netbsd-arm64), const VEOF ideal-int +pkg syscall (netbsd-arm64), const VEOL = 1 +pkg syscall (netbsd-arm64), const VEOL ideal-int +pkg syscall (netbsd-arm64), const VEOL2 = 2 +pkg syscall (netbsd-arm64), const VEOL2 ideal-int +pkg syscall (netbsd-arm64), const VERASE = 3 +pkg syscall (netbsd-arm64), const VERASE ideal-int +pkg syscall (netbsd-arm64), const VINTR = 8 +pkg syscall (netbsd-arm64), const VINTR ideal-int +pkg syscall (netbsd-arm64), const VKILL = 5 +pkg syscall (netbsd-arm64), const VKILL ideal-int +pkg syscall (netbsd-arm64), const VLNEXT = 14 +pkg syscall (netbsd-arm64), const VLNEXT ideal-int +pkg syscall (netbsd-arm64), const VMIN = 16 +pkg syscall (netbsd-arm64), const VMIN ideal-int +pkg syscall (netbsd-arm64), const VQUIT = 9 +pkg syscall (netbsd-arm64), const VQUIT ideal-int +pkg syscall (netbsd-arm64), const VREPRINT = 6 +pkg syscall (netbsd-arm64), const VREPRINT ideal-int +pkg syscall (netbsd-arm64), const VSTART = 12 +pkg syscall (netbsd-arm64), const VSTART ideal-int +pkg syscall (netbsd-arm64), const VSTATUS = 18 +pkg syscall (netbsd-arm64), const VSTATUS ideal-int +pkg syscall (netbsd-arm64), const VSTOP = 13 +pkg syscall (netbsd-arm64), const VSTOP ideal-int +pkg syscall (netbsd-arm64), const VSUSP = 10 +pkg syscall (netbsd-arm64), const VSUSP ideal-int +pkg syscall (netbsd-arm64), const VTIME = 17 +pkg syscall (netbsd-arm64), const VTIME ideal-int +pkg syscall (netbsd-arm64), const VWERASE = 4 +pkg syscall (netbsd-arm64), const VWERASE ideal-int +pkg syscall (netbsd-arm64), const WALL = 8 +pkg syscall (netbsd-arm64), const WALL ideal-int +pkg syscall (netbsd-arm64), const WALLSIG = 8 +pkg syscall (netbsd-arm64), const WALLSIG ideal-int +pkg syscall (netbsd-arm64), const WALTSIG = 4 +pkg syscall (netbsd-arm64), const WALTSIG ideal-int +pkg syscall (netbsd-arm64), const WCLONE = 4 +pkg syscall (netbsd-arm64), const WCLONE ideal-int +pkg syscall (netbsd-arm64), const WCOREFLAG = 128 +pkg syscall (netbsd-arm64), const WCOREFLAG ideal-int +pkg syscall (netbsd-arm64), const WNOHANG = 1 +pkg syscall (netbsd-arm64), const WNOHANG ideal-int +pkg syscall (netbsd-arm64), const WNOWAIT = 65536 +pkg syscall (netbsd-arm64), const WNOWAIT ideal-int +pkg syscall (netbsd-arm64), const WNOZOMBIE = 131072 +pkg syscall (netbsd-arm64), const WNOZOMBIE ideal-int +pkg syscall (netbsd-arm64), const WOPTSCHECKED = 262144 +pkg syscall (netbsd-arm64), const WOPTSCHECKED ideal-int +pkg syscall (netbsd-arm64), const WSTOPPED = 127 +pkg syscall (netbsd-arm64), const WSTOPPED ideal-int +pkg syscall (netbsd-arm64), const WUNTRACED = 2 +pkg syscall (netbsd-arm64), const WUNTRACED ideal-int +pkg syscall (netbsd-arm64), func Accept(int) (int, Sockaddr, error) +pkg syscall (netbsd-arm64), func Accept4(int, int) (int, Sockaddr, error) +pkg syscall (netbsd-arm64), func Access(string, uint32) error +pkg syscall (netbsd-arm64), func Adjtime(*Timeval, *Timeval) error +pkg syscall (netbsd-arm64), func Bind(int, Sockaddr) error +pkg syscall (netbsd-arm64), func BpfBuflen(int) (int, error) +pkg syscall (netbsd-arm64), func BpfDatalink(int) (int, error) +pkg syscall (netbsd-arm64), func BpfHeadercmpl(int) (int, error) +pkg syscall (netbsd-arm64), func BpfInterface(int, string) (string, error) +pkg syscall (netbsd-arm64), func BpfJump(int, int, int, int) *BpfInsn +pkg syscall (netbsd-arm64), func BpfStats(int) (*BpfStat, error) +pkg syscall (netbsd-arm64), func BpfStmt(int, int) *BpfInsn +pkg syscall (netbsd-arm64), func BpfTimeout(int) (*Timeval, error) +pkg syscall (netbsd-arm64), func CheckBpfVersion(int) error +pkg syscall (netbsd-arm64), func Chflags(string, int) error +pkg syscall (netbsd-arm64), func Chroot(string) error +pkg syscall (netbsd-arm64), func Close(int) error +pkg syscall (netbsd-arm64), func CloseOnExec(int) +pkg syscall (netbsd-arm64), func CmsgLen(int) int +pkg syscall (netbsd-arm64), func CmsgSpace(int) int +pkg syscall (netbsd-arm64), func Connect(int, Sockaddr) error +pkg syscall (netbsd-arm64), func Dup(int) (int, error) +pkg syscall (netbsd-arm64), func Dup2(int, int) error +pkg syscall (netbsd-arm64), func Fchdir(int) error +pkg syscall (netbsd-arm64), func Fchflags(int, int) error +pkg syscall (netbsd-arm64), func Fchmod(int, uint32) error +pkg syscall (netbsd-arm64), func Fchown(int, int, int) error +pkg syscall (netbsd-arm64), func FcntlFlock(uintptr, int, *Flock_t) error +pkg syscall (netbsd-arm64), func Flock(int, int) error +pkg syscall (netbsd-arm64), func FlushBpf(int) error +pkg syscall (netbsd-arm64), func ForkExec(string, []string, *ProcAttr) (int, error) +pkg syscall (netbsd-arm64), func Fpathconf(int, int) (int, error) +pkg syscall (netbsd-arm64), func Fstat(int, *Stat_t) error +pkg syscall (netbsd-arm64), func Fsync(int) error +pkg syscall (netbsd-arm64), func Ftruncate(int, int64) error +pkg syscall (netbsd-arm64), func Futimes(int, []Timeval) error +pkg syscall (netbsd-arm64), func Getdirentries(int, []uint8, *uintptr) (int, error) +pkg syscall (netbsd-arm64), func Getpeername(int) (Sockaddr, error) +pkg syscall (netbsd-arm64), func Getpgid(int) (int, error) +pkg syscall (netbsd-arm64), func Getpgrp() int +pkg syscall (netbsd-arm64), func Getpriority(int, int) (int, error) +pkg syscall (netbsd-arm64), func Getrlimit(int, *Rlimit) error +pkg syscall (netbsd-arm64), func Getrusage(int, *Rusage) error +pkg syscall (netbsd-arm64), func Getsid(int) (int, error) +pkg syscall (netbsd-arm64), func Getsockname(int) (Sockaddr, error) +pkg syscall (netbsd-arm64), func GetsockoptByte(int, int, int) (uint8, error) +pkg syscall (netbsd-arm64), func GetsockoptICMPv6Filter(int, int, int) (*ICMPv6Filter, error) +pkg syscall (netbsd-arm64), func GetsockoptIPMreq(int, int, int) (*IPMreq, error) +pkg syscall (netbsd-arm64), func GetsockoptIPv6MTUInfo(int, int, int) (*IPv6MTUInfo, error) +pkg syscall (netbsd-arm64), func GetsockoptIPv6Mreq(int, int, int) (*IPv6Mreq, error) +pkg syscall (netbsd-arm64), func GetsockoptInet4Addr(int, int, int) ([4]uint8, error) +pkg syscall (netbsd-arm64), func GetsockoptInt(int, int, int) (int, error) +pkg syscall (netbsd-arm64), func Issetugid() bool +pkg syscall (netbsd-arm64), func Kevent(int, []Kevent_t, []Kevent_t, *Timespec) (int, error) +pkg syscall (netbsd-arm64), func Kill(int, Signal) error +pkg syscall (netbsd-arm64), func Kqueue() (int, error) +pkg syscall (netbsd-arm64), func Listen(int, int) error +pkg syscall (netbsd-arm64), func Lstat(string, *Stat_t) error +pkg syscall (netbsd-arm64), func Mkfifo(string, uint32) error +pkg syscall (netbsd-arm64), func Mknod(string, uint32, int) error +pkg syscall (netbsd-arm64), func Mmap(int, int64, int, int, int) ([]uint8, error) +pkg syscall (netbsd-arm64), func Munmap([]uint8) error +pkg syscall (netbsd-arm64), func Nanosleep(*Timespec, *Timespec) error +pkg syscall (netbsd-arm64), func Open(string, int, uint32) (int, error) +pkg syscall (netbsd-arm64), func ParseDirent([]uint8, int, []string) (int, int, []string) +pkg syscall (netbsd-arm64), func ParseRoutingMessage([]uint8) ([]RoutingMessage, error) +pkg syscall (netbsd-arm64), func ParseRoutingSockaddr(RoutingMessage) ([]Sockaddr, error) +pkg syscall (netbsd-arm64), func ParseSocketControlMessage([]uint8) ([]SocketControlMessage, error) +pkg syscall (netbsd-arm64), func ParseUnixRights(*SocketControlMessage) ([]int, error) +pkg syscall (netbsd-arm64), func Pathconf(string, int) (int, error) +pkg syscall (netbsd-arm64), func Pipe([]int) error +pkg syscall (netbsd-arm64), func Pipe2([]int, int) error +pkg syscall (netbsd-arm64), func Pread(int, []uint8, int64) (int, error) +pkg syscall (netbsd-arm64), func Pwrite(int, []uint8, int64) (int, error) +pkg syscall (netbsd-arm64), func RawSyscall(uintptr, uintptr, uintptr, uintptr) (uintptr, uintptr, Errno) +pkg syscall (netbsd-arm64), func RawSyscall6(uintptr, uintptr, uintptr, uintptr, uintptr, uintptr, uintptr) (uintptr, uintptr, Errno) +pkg syscall (netbsd-arm64), func Read(int, []uint8) (int, error) +pkg syscall (netbsd-arm64), func ReadDirent(int, []uint8) (int, error) +pkg syscall (netbsd-arm64), func Recvfrom(int, []uint8, int) (int, Sockaddr, error) +pkg syscall (netbsd-arm64), func Recvmsg(int, []uint8, []uint8, int) (int, int, int, Sockaddr, error) +pkg syscall (netbsd-arm64), func Revoke(string) error +pkg syscall (netbsd-arm64), func RouteRIB(int, int) ([]uint8, error) +pkg syscall (netbsd-arm64), func Seek(int, int64, int) (int64, error) +pkg syscall (netbsd-arm64), func Select(int, *FdSet, *FdSet, *FdSet, *Timeval) error +pkg syscall (netbsd-arm64), func Sendfile(int, int, *int64, int) (int, error) +pkg syscall (netbsd-arm64), func Sendmsg(int, []uint8, []uint8, Sockaddr, int) error +pkg syscall (netbsd-arm64), func SendmsgN(int, []uint8, []uint8, Sockaddr, int) (int, error) +pkg syscall (netbsd-arm64), func Sendto(int, []uint8, int, Sockaddr) error +pkg syscall (netbsd-arm64), func SetBpf(int, []BpfInsn) error +pkg syscall (netbsd-arm64), func SetBpfBuflen(int, int) (int, error) +pkg syscall (netbsd-arm64), func SetBpfDatalink(int, int) (int, error) +pkg syscall (netbsd-arm64), func SetBpfHeadercmpl(int, int) error +pkg syscall (netbsd-arm64), func SetBpfImmediate(int, int) error +pkg syscall (netbsd-arm64), func SetBpfInterface(int, string) error +pkg syscall (netbsd-arm64), func SetBpfPromisc(int, int) error +pkg syscall (netbsd-arm64), func SetBpfTimeout(int, *Timeval) error +pkg syscall (netbsd-arm64), func SetKevent(*Kevent_t, int, int, int) +pkg syscall (netbsd-arm64), func SetNonblock(int, bool) error +pkg syscall (netbsd-arm64), func Setegid(int) error +pkg syscall (netbsd-arm64), func Seteuid(int) error +pkg syscall (netbsd-arm64), func Setgid(int) error +pkg syscall (netbsd-arm64), func Setgroups([]int) error +pkg syscall (netbsd-arm64), func Setpgid(int, int) error +pkg syscall (netbsd-arm64), func Setpriority(int, int, int) error +pkg syscall (netbsd-arm64), func Setregid(int, int) error +pkg syscall (netbsd-arm64), func Setreuid(int, int) error +pkg syscall (netbsd-arm64), func Setrlimit(int, *Rlimit) error +pkg syscall (netbsd-arm64), func Setsid() (int, error) +pkg syscall (netbsd-arm64), func SetsockoptByte(int, int, int, uint8) error +pkg syscall (netbsd-arm64), func SetsockoptICMPv6Filter(int, int, int, *ICMPv6Filter) error +pkg syscall (netbsd-arm64), func SetsockoptIPMreq(int, int, int, *IPMreq) error +pkg syscall (netbsd-arm64), func SetsockoptIPv6Mreq(int, int, int, *IPv6Mreq) error +pkg syscall (netbsd-arm64), func SetsockoptInet4Addr(int, int, int, [4]uint8) error +pkg syscall (netbsd-arm64), func SetsockoptInt(int, int, int, int) error +pkg syscall (netbsd-arm64), func SetsockoptLinger(int, int, int, *Linger) error +pkg syscall (netbsd-arm64), func SetsockoptString(int, int, int, string) error +pkg syscall (netbsd-arm64), func SetsockoptTimeval(int, int, int, *Timeval) error +pkg syscall (netbsd-arm64), func Settimeofday(*Timeval) error +pkg syscall (netbsd-arm64), func Setuid(int) error +pkg syscall (netbsd-arm64), func Shutdown(int, int) error +pkg syscall (netbsd-arm64), func SlicePtrFromStrings([]string) ([]*uint8, error) +pkg syscall (netbsd-arm64), func Socket(int, int, int) (int, error) +pkg syscall (netbsd-arm64), func Socketpair(int, int, int) ([2]int, error) +pkg syscall (netbsd-arm64), func Stat(string, *Stat_t) error +pkg syscall (netbsd-arm64), func StringSlicePtr([]string) []*uint8 +pkg syscall (netbsd-arm64), func Sync() error +pkg syscall (netbsd-arm64), func Syscall(uintptr, uintptr, uintptr, uintptr) (uintptr, uintptr, Errno) +pkg syscall (netbsd-arm64), func Syscall6(uintptr, uintptr, uintptr, uintptr, uintptr, uintptr, uintptr) (uintptr, uintptr, Errno) +pkg syscall (netbsd-arm64), func Syscall9(uintptr, uintptr, uintptr, uintptr, uintptr, uintptr, uintptr, uintptr, uintptr, uintptr) (uintptr, uintptr, Errno) +pkg syscall (netbsd-arm64), func Sysctl(string) (string, error) +pkg syscall (netbsd-arm64), func SysctlUint32(string) (uint32, error) +pkg syscall (netbsd-arm64), func TimevalToNsec(Timeval) int64 +pkg syscall (netbsd-arm64), func Truncate(string, int64) error +pkg syscall (netbsd-arm64), func Umask(int) int +pkg syscall (netbsd-arm64), func UnixRights(...int) []uint8 +pkg syscall (netbsd-arm64), func Unmount(string, int) error +pkg syscall (netbsd-arm64), func Wait4(int, *WaitStatus, int, *Rusage) (int, error) +pkg syscall (netbsd-arm64), func Write(int, []uint8) (int, error) +pkg syscall (netbsd-arm64), method (*Cmsghdr) SetLen(int) +pkg syscall (netbsd-arm64), method (*Iovec) SetLen(int) +pkg syscall (netbsd-arm64), method (*Msghdr) SetControllen(int) +pkg syscall (netbsd-arm64), type BpfHdr struct +pkg syscall (netbsd-arm64), type BpfHdr struct, Caplen uint32 +pkg syscall (netbsd-arm64), type BpfHdr struct, Datalen uint32 +pkg syscall (netbsd-arm64), type BpfHdr struct, Hdrlen uint16 +pkg syscall (netbsd-arm64), type BpfHdr struct, Pad_cgo_0 [6]uint8 +pkg syscall (netbsd-arm64), type BpfHdr struct, Tstamp BpfTimeval +pkg syscall (netbsd-arm64), type BpfInsn struct +pkg syscall (netbsd-arm64), type BpfInsn struct, Code uint16 +pkg syscall (netbsd-arm64), type BpfInsn struct, Jf uint8 +pkg syscall (netbsd-arm64), type BpfInsn struct, Jt uint8 +pkg syscall (netbsd-arm64), type BpfInsn struct, K uint32 +pkg syscall (netbsd-arm64), type BpfProgram struct +pkg syscall (netbsd-arm64), type BpfProgram struct, Insns *BpfInsn +pkg syscall (netbsd-arm64), type BpfProgram struct, Len uint32 +pkg syscall (netbsd-arm64), type BpfProgram struct, Pad_cgo_0 [4]uint8 +pkg syscall (netbsd-arm64), type BpfStat struct +pkg syscall (netbsd-arm64), type BpfStat struct, Capt uint64 +pkg syscall (netbsd-arm64), type BpfStat struct, Drop uint64 +pkg syscall (netbsd-arm64), type BpfStat struct, Padding [13]uint64 +pkg syscall (netbsd-arm64), type BpfStat struct, Recv uint64 +pkg syscall (netbsd-arm64), type BpfTimeval struct +pkg syscall (netbsd-arm64), type BpfTimeval struct, Sec int64 +pkg syscall (netbsd-arm64), type BpfTimeval struct, Usec int64 +pkg syscall (netbsd-arm64), type BpfVersion struct +pkg syscall (netbsd-arm64), type BpfVersion struct, Major uint16 +pkg syscall (netbsd-arm64), type BpfVersion struct, Minor uint16 +pkg syscall (netbsd-arm64), type Cmsghdr struct +pkg syscall (netbsd-arm64), type Cmsghdr struct, Len uint32 +pkg syscall (netbsd-arm64), type Cmsghdr struct, Level int32 +pkg syscall (netbsd-arm64), type Cmsghdr struct, Type int32 +pkg syscall (netbsd-arm64), type Credential struct +pkg syscall (netbsd-arm64), type Credential struct, Gid uint32 +pkg syscall (netbsd-arm64), type Credential struct, Groups []uint32 +pkg syscall (netbsd-arm64), type Credential struct, NoSetGroups bool +pkg syscall (netbsd-arm64), type Credential struct, Uid uint32 +pkg syscall (netbsd-arm64), type Dirent struct +pkg syscall (netbsd-arm64), type Dirent struct, Fileno uint64 +pkg syscall (netbsd-arm64), type Dirent struct, Name [512]int8 +pkg syscall (netbsd-arm64), type Dirent struct, Namlen uint16 +pkg syscall (netbsd-arm64), type Dirent struct, Pad_cgo_0 [3]uint8 +pkg syscall (netbsd-arm64), type Dirent struct, Reclen uint16 +pkg syscall (netbsd-arm64), type Dirent struct, Type uint8 +pkg syscall (netbsd-arm64), type FdSet struct +pkg syscall (netbsd-arm64), type FdSet struct, Bits [8]uint32 +pkg syscall (netbsd-arm64), type Flock_t struct +pkg syscall (netbsd-arm64), type Flock_t struct, Len int64 +pkg syscall (netbsd-arm64), type Flock_t struct, Pid int32 +pkg syscall (netbsd-arm64), type Flock_t struct, Start int64 +pkg syscall (netbsd-arm64), type Flock_t struct, Type int16 +pkg syscall (netbsd-arm64), type Flock_t struct, Whence int16 +pkg syscall (netbsd-arm64), type Fsid struct +pkg syscall (netbsd-arm64), type Fsid struct, X__fsid_val [2]int32 +pkg syscall (netbsd-arm64), type ICMPv6Filter struct +pkg syscall (netbsd-arm64), type ICMPv6Filter struct, Filt [8]uint32 +pkg syscall (netbsd-arm64), type IPv6MTUInfo struct +pkg syscall (netbsd-arm64), type IPv6MTUInfo struct, Addr RawSockaddrInet6 +pkg syscall (netbsd-arm64), type IPv6MTUInfo struct, Mtu uint32 +pkg syscall (netbsd-arm64), type IfAnnounceMsghdr struct +pkg syscall (netbsd-arm64), type IfAnnounceMsghdr struct, Index uint16 +pkg syscall (netbsd-arm64), type IfAnnounceMsghdr struct, Msglen uint16 +pkg syscall (netbsd-arm64), type IfAnnounceMsghdr struct, Name [16]int8 +pkg syscall (netbsd-arm64), type IfAnnounceMsghdr struct, Type uint8 +pkg syscall (netbsd-arm64), type IfAnnounceMsghdr struct, Version uint8 +pkg syscall (netbsd-arm64), type IfAnnounceMsghdr struct, What uint16 +pkg syscall (netbsd-arm64), type IfData struct +pkg syscall (netbsd-arm64), type IfData struct, Addrlen uint8 +pkg syscall (netbsd-arm64), type IfData struct, Baudrate uint64 +pkg syscall (netbsd-arm64), type IfData struct, Collisions uint64 +pkg syscall (netbsd-arm64), type IfData struct, Hdrlen uint8 +pkg syscall (netbsd-arm64), type IfData struct, Ibytes uint64 +pkg syscall (netbsd-arm64), type IfData struct, Ierrors uint64 +pkg syscall (netbsd-arm64), type IfData struct, Imcasts uint64 +pkg syscall (netbsd-arm64), type IfData struct, Ipackets uint64 +pkg syscall (netbsd-arm64), type IfData struct, Iqdrops uint64 +pkg syscall (netbsd-arm64), type IfData struct, Lastchange Timespec +pkg syscall (netbsd-arm64), type IfData struct, Link_state int32 +pkg syscall (netbsd-arm64), type IfData struct, Metric uint64 +pkg syscall (netbsd-arm64), type IfData struct, Mtu uint64 +pkg syscall (netbsd-arm64), type IfData struct, Noproto uint64 +pkg syscall (netbsd-arm64), type IfData struct, Obytes uint64 +pkg syscall (netbsd-arm64), type IfData struct, Oerrors uint64 +pkg syscall (netbsd-arm64), type IfData struct, Omcasts uint64 +pkg syscall (netbsd-arm64), type IfData struct, Opackets uint64 +pkg syscall (netbsd-arm64), type IfData struct, Pad_cgo_0 [1]uint8 +pkg syscall (netbsd-arm64), type IfData struct, Type uint8 +pkg syscall (netbsd-arm64), type IfMsghdr struct +pkg syscall (netbsd-arm64), type IfMsghdr struct, Addrs int32 +pkg syscall (netbsd-arm64), type IfMsghdr struct, Data IfData +pkg syscall (netbsd-arm64), type IfMsghdr struct, Flags int32 +pkg syscall (netbsd-arm64), type IfMsghdr struct, Index uint16 +pkg syscall (netbsd-arm64), type IfMsghdr struct, Msglen uint16 +pkg syscall (netbsd-arm64), type IfMsghdr struct, Pad_cgo_0 [2]uint8 +pkg syscall (netbsd-arm64), type IfMsghdr struct, Type uint8 +pkg syscall (netbsd-arm64), type IfMsghdr struct, Version uint8 +pkg syscall (netbsd-arm64), type IfaMsghdr struct +pkg syscall (netbsd-arm64), type IfaMsghdr struct, Addrs int32 +pkg syscall (netbsd-arm64), type IfaMsghdr struct, Flags int32 +pkg syscall (netbsd-arm64), type IfaMsghdr struct, Index uint16 +pkg syscall (netbsd-arm64), type IfaMsghdr struct, Metric int32 +pkg syscall (netbsd-arm64), type IfaMsghdr struct, Msglen uint16 +pkg syscall (netbsd-arm64), type IfaMsghdr struct, Pad_cgo_0 [6]uint8 +pkg syscall (netbsd-arm64), type IfaMsghdr struct, Type uint8 +pkg syscall (netbsd-arm64), type IfaMsghdr struct, Version uint8 +pkg syscall (netbsd-arm64), type Inet6Pktinfo struct +pkg syscall (netbsd-arm64), type Inet6Pktinfo struct, Addr [16]uint8 +pkg syscall (netbsd-arm64), type Inet6Pktinfo struct, Ifindex uint32 +pkg syscall (netbsd-arm64), type InterfaceAddrMessage struct +pkg syscall (netbsd-arm64), type InterfaceAddrMessage struct, Data []uint8 +pkg syscall (netbsd-arm64), type InterfaceAddrMessage struct, Header IfaMsghdr +pkg syscall (netbsd-arm64), type InterfaceAnnounceMessage struct +pkg syscall (netbsd-arm64), type InterfaceAnnounceMessage struct, Header IfAnnounceMsghdr +pkg syscall (netbsd-arm64), type InterfaceMessage struct +pkg syscall (netbsd-arm64), type InterfaceMessage struct, Data []uint8 +pkg syscall (netbsd-arm64), type InterfaceMessage struct, Header IfMsghdr +pkg syscall (netbsd-arm64), type Iovec struct +pkg syscall (netbsd-arm64), type Iovec struct, Base *uint8 +pkg syscall (netbsd-arm64), type Iovec struct, Len uint64 +pkg syscall (netbsd-arm64), type Kevent_t struct +pkg syscall (netbsd-arm64), type Kevent_t struct, Data int64 +pkg syscall (netbsd-arm64), type Kevent_t struct, Fflags uint32 +pkg syscall (netbsd-arm64), type Kevent_t struct, Filter uint32 +pkg syscall (netbsd-arm64), type Kevent_t struct, Flags uint32 +pkg syscall (netbsd-arm64), type Kevent_t struct, Ident uint64 +pkg syscall (netbsd-arm64), type Kevent_t struct, Pad_cgo_0 [4]uint8 +pkg syscall (netbsd-arm64), type Kevent_t struct, Udata int64 +pkg syscall (netbsd-arm64), type Mclpool [0]uint8 +pkg syscall (netbsd-arm64), type Msghdr struct +pkg syscall (netbsd-arm64), type Msghdr struct, Control *uint8 +pkg syscall (netbsd-arm64), type Msghdr struct, Controllen uint32 +pkg syscall (netbsd-arm64), type Msghdr struct, Flags int32 +pkg syscall (netbsd-arm64), type Msghdr struct, Iov *Iovec +pkg syscall (netbsd-arm64), type Msghdr struct, Iovlen int32 +pkg syscall (netbsd-arm64), type Msghdr struct, Name *uint8 +pkg syscall (netbsd-arm64), type Msghdr struct, Namelen uint32 +pkg syscall (netbsd-arm64), type Msghdr struct, Pad_cgo_0 [4]uint8 +pkg syscall (netbsd-arm64), type Msghdr struct, Pad_cgo_1 [4]uint8 +pkg syscall (netbsd-arm64), type RawSockaddr struct, Data [14]int8 +pkg syscall (netbsd-arm64), type RawSockaddr struct, Family uint8 +pkg syscall (netbsd-arm64), type RawSockaddr struct, Len uint8 +pkg syscall (netbsd-arm64), type RawSockaddrAny struct, Pad [92]int8 +pkg syscall (netbsd-arm64), type RawSockaddrDatalink struct +pkg syscall (netbsd-arm64), type RawSockaddrDatalink struct, Alen uint8 +pkg syscall (netbsd-arm64), type RawSockaddrDatalink struct, Data [12]int8 +pkg syscall (netbsd-arm64), type RawSockaddrDatalink struct, Family uint8 +pkg syscall (netbsd-arm64), type RawSockaddrDatalink struct, Index uint16 +pkg syscall (netbsd-arm64), type RawSockaddrDatalink struct, Len uint8 +pkg syscall (netbsd-arm64), type RawSockaddrDatalink struct, Nlen uint8 +pkg syscall (netbsd-arm64), type RawSockaddrDatalink struct, Slen uint8 +pkg syscall (netbsd-arm64), type RawSockaddrDatalink struct, Type uint8 +pkg syscall (netbsd-arm64), type RawSockaddrInet4 struct, Family uint8 +pkg syscall (netbsd-arm64), type RawSockaddrInet4 struct, Len uint8 +pkg syscall (netbsd-arm64), type RawSockaddrInet4 struct, Zero [8]int8 +pkg syscall (netbsd-arm64), type RawSockaddrInet6 struct, Family uint8 +pkg syscall (netbsd-arm64), type RawSockaddrInet6 struct, Len uint8 +pkg syscall (netbsd-arm64), type RawSockaddrUnix struct, Family uint8 +pkg syscall (netbsd-arm64), type RawSockaddrUnix struct, Len uint8 +pkg syscall (netbsd-arm64), type RawSockaddrUnix struct, Path [104]int8 +pkg syscall (netbsd-arm64), type Rlimit struct +pkg syscall (netbsd-arm64), type Rlimit struct, Cur uint64 +pkg syscall (netbsd-arm64), type Rlimit struct, Max uint64 +pkg syscall (netbsd-arm64), type RouteMessage struct +pkg syscall (netbsd-arm64), type RouteMessage struct, Data []uint8 +pkg syscall (netbsd-arm64), type RouteMessage struct, Header RtMsghdr +pkg syscall (netbsd-arm64), type RoutingMessage interface, unexported methods +pkg syscall (netbsd-arm64), type RtMetrics struct +pkg syscall (netbsd-arm64), type RtMetrics struct, Expire int64 +pkg syscall (netbsd-arm64), type RtMetrics struct, Hopcount uint64 +pkg syscall (netbsd-arm64), type RtMetrics struct, Locks uint64 +pkg syscall (netbsd-arm64), type RtMetrics struct, Mtu uint64 +pkg syscall (netbsd-arm64), type RtMetrics struct, Pksent int64 +pkg syscall (netbsd-arm64), type RtMetrics struct, Recvpipe uint64 +pkg syscall (netbsd-arm64), type RtMetrics struct, Rtt uint64 +pkg syscall (netbsd-arm64), type RtMetrics struct, Rttvar uint64 +pkg syscall (netbsd-arm64), type RtMetrics struct, Sendpipe uint64 +pkg syscall (netbsd-arm64), type RtMetrics struct, Ssthresh uint64 +pkg syscall (netbsd-arm64), type RtMsghdr struct +pkg syscall (netbsd-arm64), type RtMsghdr struct, Addrs int32 +pkg syscall (netbsd-arm64), type RtMsghdr struct, Errno int32 +pkg syscall (netbsd-arm64), type RtMsghdr struct, Flags int32 +pkg syscall (netbsd-arm64), type RtMsghdr struct, Index uint16 +pkg syscall (netbsd-arm64), type RtMsghdr struct, Inits int32 +pkg syscall (netbsd-arm64), type RtMsghdr struct, Msglen uint16 +pkg syscall (netbsd-arm64), type RtMsghdr struct, Pad_cgo_0 [2]uint8 +pkg syscall (netbsd-arm64), type RtMsghdr struct, Pad_cgo_1 [4]uint8 +pkg syscall (netbsd-arm64), type RtMsghdr struct, Pid int32 +pkg syscall (netbsd-arm64), type RtMsghdr struct, Rmx RtMetrics +pkg syscall (netbsd-arm64), type RtMsghdr struct, Seq int32 +pkg syscall (netbsd-arm64), type RtMsghdr struct, Type uint8 +pkg syscall (netbsd-arm64), type RtMsghdr struct, Use int32 +pkg syscall (netbsd-arm64), type RtMsghdr struct, Version uint8 +pkg syscall (netbsd-arm64), type Rusage struct, Idrss int64 +pkg syscall (netbsd-arm64), type Rusage struct, Inblock int64 +pkg syscall (netbsd-arm64), type Rusage struct, Isrss int64 +pkg syscall (netbsd-arm64), type Rusage struct, Ixrss int64 +pkg syscall (netbsd-arm64), type Rusage struct, Majflt int64 +pkg syscall (netbsd-arm64), type Rusage struct, Maxrss int64 +pkg syscall (netbsd-arm64), type Rusage struct, Minflt int64 +pkg syscall (netbsd-arm64), type Rusage struct, Msgrcv int64 +pkg syscall (netbsd-arm64), type Rusage struct, Msgsnd int64 +pkg syscall (netbsd-arm64), type Rusage struct, Nivcsw int64 +pkg syscall (netbsd-arm64), type Rusage struct, Nsignals int64 +pkg syscall (netbsd-arm64), type Rusage struct, Nswap int64 +pkg syscall (netbsd-arm64), type Rusage struct, Nvcsw int64 +pkg syscall (netbsd-arm64), type Rusage struct, Oublock int64 +pkg syscall (netbsd-arm64), type Rusage struct, Stime Timeval +pkg syscall (netbsd-arm64), type Rusage struct, Utime Timeval +pkg syscall (netbsd-arm64), type SockaddrDatalink struct +pkg syscall (netbsd-arm64), type SockaddrDatalink struct, Alen uint8 +pkg syscall (netbsd-arm64), type SockaddrDatalink struct, Data [12]int8 +pkg syscall (netbsd-arm64), type SockaddrDatalink struct, Family uint8 +pkg syscall (netbsd-arm64), type SockaddrDatalink struct, Index uint16 +pkg syscall (netbsd-arm64), type SockaddrDatalink struct, Len uint8 +pkg syscall (netbsd-arm64), type SockaddrDatalink struct, Nlen uint8 +pkg syscall (netbsd-arm64), type SockaddrDatalink struct, Slen uint8 +pkg syscall (netbsd-arm64), type SockaddrDatalink struct, Type uint8 +pkg syscall (netbsd-arm64), type SocketControlMessage struct +pkg syscall (netbsd-arm64), type SocketControlMessage struct, Data []uint8 +pkg syscall (netbsd-arm64), type SocketControlMessage struct, Header Cmsghdr +pkg syscall (netbsd-arm64), type Stat_t struct +pkg syscall (netbsd-arm64), type Stat_t struct, Atimespec Timespec +pkg syscall (netbsd-arm64), type Stat_t struct, Birthtimespec Timespec +pkg syscall (netbsd-arm64), type Stat_t struct, Blksize uint32 +pkg syscall (netbsd-arm64), type Stat_t struct, Blocks int64 +pkg syscall (netbsd-arm64), type Stat_t struct, Ctimespec Timespec +pkg syscall (netbsd-arm64), type Stat_t struct, Dev uint64 +pkg syscall (netbsd-arm64), type Stat_t struct, Flags uint32 +pkg syscall (netbsd-arm64), type Stat_t struct, Gen uint32 +pkg syscall (netbsd-arm64), type Stat_t struct, Gid uint32 +pkg syscall (netbsd-arm64), type Stat_t struct, Ino uint64 +pkg syscall (netbsd-arm64), type Stat_t struct, Mode uint32 +pkg syscall (netbsd-arm64), type Stat_t struct, Mtimespec Timespec +pkg syscall (netbsd-arm64), type Stat_t struct, Nlink uint32 +pkg syscall (netbsd-arm64), type Stat_t struct, Pad_cgo_0 [4]uint8 +pkg syscall (netbsd-arm64), type Stat_t struct, Pad_cgo_1 [4]uint8 +pkg syscall (netbsd-arm64), type Stat_t struct, Pad_cgo_2 [4]uint8 +pkg syscall (netbsd-arm64), type Stat_t struct, Rdev uint64 +pkg syscall (netbsd-arm64), type Stat_t struct, Size int64 +pkg syscall (netbsd-arm64), type Stat_t struct, Spare [2]uint32 +pkg syscall (netbsd-arm64), type Stat_t struct, Uid uint32 +pkg syscall (netbsd-arm64), type Statfs_t [0]uint8 +pkg syscall (netbsd-arm64), type SysProcAttr struct, Chroot string +pkg syscall (netbsd-arm64), type SysProcAttr struct, Credential *Credential +pkg syscall (netbsd-arm64), type SysProcAttr struct, Ctty int +pkg syscall (netbsd-arm64), type SysProcAttr struct, Foreground bool +pkg syscall (netbsd-arm64), type SysProcAttr struct, Noctty bool +pkg syscall (netbsd-arm64), type SysProcAttr struct, Pgid int +pkg syscall (netbsd-arm64), type SysProcAttr struct, Ptrace bool +pkg syscall (netbsd-arm64), type SysProcAttr struct, Setctty bool +pkg syscall (netbsd-arm64), type SysProcAttr struct, Setpgid bool +pkg syscall (netbsd-arm64), type SysProcAttr struct, Setsid bool +pkg syscall (netbsd-arm64), type Sysctlnode struct +pkg syscall (netbsd-arm64), type Sysctlnode struct, Flags uint32 +pkg syscall (netbsd-arm64), type Sysctlnode struct, Name [32]int8 +pkg syscall (netbsd-arm64), type Sysctlnode struct, Num int32 +pkg syscall (netbsd-arm64), type Sysctlnode struct, Un [16]uint8 +pkg syscall (netbsd-arm64), type Sysctlnode struct, Ver uint32 +pkg syscall (netbsd-arm64), type Sysctlnode struct, X__rsvd uint32 +pkg syscall (netbsd-arm64), type Sysctlnode struct, X_sysctl_desc [8]uint8 +pkg syscall (netbsd-arm64), type Sysctlnode struct, X_sysctl_func [8]uint8 +pkg syscall (netbsd-arm64), type Sysctlnode struct, X_sysctl_parent [8]uint8 +pkg syscall (netbsd-arm64), type Sysctlnode struct, X_sysctl_size [8]uint8 +pkg syscall (netbsd-arm64), type Termios struct +pkg syscall (netbsd-arm64), type Termios struct, Cc [20]uint8 +pkg syscall (netbsd-arm64), type Termios struct, Cflag uint32 +pkg syscall (netbsd-arm64), type Termios struct, Iflag uint32 +pkg syscall (netbsd-arm64), type Termios struct, Ispeed int32 +pkg syscall (netbsd-arm64), type Termios struct, Lflag uint32 +pkg syscall (netbsd-arm64), type Termios struct, Oflag uint32 +pkg syscall (netbsd-arm64), type Termios struct, Ospeed int32 +pkg syscall (netbsd-arm64), type Timespec struct, Nsec int64 +pkg syscall (netbsd-arm64), type Timespec struct, Sec int64 +pkg syscall (netbsd-arm64), type Timeval struct, Pad_cgo_0 [4]uint8 +pkg syscall (netbsd-arm64), type Timeval struct, Sec int64 +pkg syscall (netbsd-arm64), type Timeval struct, Usec int32 +pkg syscall (netbsd-arm64), type WaitStatus uint32 +pkg syscall (netbsd-arm64), var Stderr int +pkg syscall (netbsd-arm64), var Stdin int +pkg syscall (netbsd-arm64), var Stdout int +pkg syscall (netbsd-arm64-cgo), const AF_APPLETALK = 16 +pkg syscall (netbsd-arm64-cgo), const AF_APPLETALK ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_ARP = 28 +pkg syscall (netbsd-arm64-cgo), const AF_ARP ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_BLUETOOTH = 31 +pkg syscall (netbsd-arm64-cgo), const AF_BLUETOOTH ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_CCITT = 10 +pkg syscall (netbsd-arm64-cgo), const AF_CCITT ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_CHAOS = 5 +pkg syscall (netbsd-arm64-cgo), const AF_CHAOS ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_CNT = 21 +pkg syscall (netbsd-arm64-cgo), const AF_CNT ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_COIP = 20 +pkg syscall (netbsd-arm64-cgo), const AF_COIP ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_DATAKIT = 9 +pkg syscall (netbsd-arm64-cgo), const AF_DATAKIT ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_DECnet = 12 +pkg syscall (netbsd-arm64-cgo), const AF_DECnet ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_DLI = 13 +pkg syscall (netbsd-arm64-cgo), const AF_DLI ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_E164 = 26 +pkg syscall (netbsd-arm64-cgo), const AF_E164 ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_ECMA = 8 +pkg syscall (netbsd-arm64-cgo), const AF_ECMA ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_HYLINK = 15 +pkg syscall (netbsd-arm64-cgo), const AF_HYLINK ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_IEEE80211 = 32 +pkg syscall (netbsd-arm64-cgo), const AF_IEEE80211 ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_IMPLINK = 3 +pkg syscall (netbsd-arm64-cgo), const AF_IMPLINK ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_INET6 = 24 +pkg syscall (netbsd-arm64-cgo), const AF_IPX = 23 +pkg syscall (netbsd-arm64-cgo), const AF_IPX ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_ISDN = 26 +pkg syscall (netbsd-arm64-cgo), const AF_ISDN ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_ISO = 7 +pkg syscall (netbsd-arm64-cgo), const AF_ISO ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_LAT = 14 +pkg syscall (netbsd-arm64-cgo), const AF_LAT ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_LINK = 18 +pkg syscall (netbsd-arm64-cgo), const AF_LINK ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_LOCAL = 1 +pkg syscall (netbsd-arm64-cgo), const AF_LOCAL ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_MAX = 35 +pkg syscall (netbsd-arm64-cgo), const AF_MAX ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_MPLS = 33 +pkg syscall (netbsd-arm64-cgo), const AF_MPLS ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_NATM = 27 +pkg syscall (netbsd-arm64-cgo), const AF_NATM ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_NS = 6 +pkg syscall (netbsd-arm64-cgo), const AF_NS ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_OROUTE = 17 +pkg syscall (netbsd-arm64-cgo), const AF_OROUTE ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_OSI = 7 +pkg syscall (netbsd-arm64-cgo), const AF_OSI ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_PUP = 4 +pkg syscall (netbsd-arm64-cgo), const AF_PUP ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_ROUTE = 34 +pkg syscall (netbsd-arm64-cgo), const AF_ROUTE ideal-int +pkg syscall (netbsd-arm64-cgo), const AF_SNA = 11 +pkg syscall (netbsd-arm64-cgo), const AF_SNA ideal-int +pkg syscall (netbsd-arm64-cgo), const ARPHRD_ARCNET = 7 +pkg syscall (netbsd-arm64-cgo), const ARPHRD_ARCNET ideal-int +pkg syscall (netbsd-arm64-cgo), const ARPHRD_ETHER = 1 +pkg syscall (netbsd-arm64-cgo), const ARPHRD_ETHER ideal-int +pkg syscall (netbsd-arm64-cgo), const ARPHRD_FRELAY = 15 +pkg syscall (netbsd-arm64-cgo), const ARPHRD_FRELAY ideal-int +pkg syscall (netbsd-arm64-cgo), const ARPHRD_IEEE1394 = 24 +pkg syscall (netbsd-arm64-cgo), const ARPHRD_IEEE1394 ideal-int +pkg syscall (netbsd-arm64-cgo), const ARPHRD_IEEE802 = 6 +pkg syscall (netbsd-arm64-cgo), const ARPHRD_IEEE802 ideal-int +pkg syscall (netbsd-arm64-cgo), const ARPHRD_STRIP = 23 +pkg syscall (netbsd-arm64-cgo), const ARPHRD_STRIP ideal-int +pkg syscall (netbsd-arm64-cgo), const B0 = 0 +pkg syscall (netbsd-arm64-cgo), const B0 ideal-int +pkg syscall (netbsd-arm64-cgo), const B110 = 110 +pkg syscall (netbsd-arm64-cgo), const B110 ideal-int +pkg syscall (netbsd-arm64-cgo), const B115200 = 115200 +pkg syscall (netbsd-arm64-cgo), const B115200 ideal-int +pkg syscall (netbsd-arm64-cgo), const B1200 = 1200 +pkg syscall (netbsd-arm64-cgo), const B1200 ideal-int +pkg syscall (netbsd-arm64-cgo), const B134 = 134 +pkg syscall (netbsd-arm64-cgo), const B134 ideal-int +pkg syscall (netbsd-arm64-cgo), const B14400 = 14400 +pkg syscall (netbsd-arm64-cgo), const B14400 ideal-int +pkg syscall (netbsd-arm64-cgo), const B150 = 150 +pkg syscall (netbsd-arm64-cgo), const B150 ideal-int +pkg syscall (netbsd-arm64-cgo), const B1800 = 1800 +pkg syscall (netbsd-arm64-cgo), const B1800 ideal-int +pkg syscall (netbsd-arm64-cgo), const B19200 = 19200 +pkg syscall (netbsd-arm64-cgo), const B19200 ideal-int +pkg syscall (netbsd-arm64-cgo), const B200 = 200 +pkg syscall (netbsd-arm64-cgo), const B200 ideal-int +pkg syscall (netbsd-arm64-cgo), const B230400 = 230400 +pkg syscall (netbsd-arm64-cgo), const B230400 ideal-int +pkg syscall (netbsd-arm64-cgo), const B2400 = 2400 +pkg syscall (netbsd-arm64-cgo), const B2400 ideal-int +pkg syscall (netbsd-arm64-cgo), const B28800 = 28800 +pkg syscall (netbsd-arm64-cgo), const B28800 ideal-int +pkg syscall (netbsd-arm64-cgo), const B300 = 300 +pkg syscall (netbsd-arm64-cgo), const B300 ideal-int +pkg syscall (netbsd-arm64-cgo), const B38400 = 38400 +pkg syscall (netbsd-arm64-cgo), const B38400 ideal-int +pkg syscall (netbsd-arm64-cgo), const B460800 = 460800 +pkg syscall (netbsd-arm64-cgo), const B460800 ideal-int +pkg syscall (netbsd-arm64-cgo), const B4800 = 4800 +pkg syscall (netbsd-arm64-cgo), const B4800 ideal-int +pkg syscall (netbsd-arm64-cgo), const B50 = 50 +pkg syscall (netbsd-arm64-cgo), const B50 ideal-int +pkg syscall (netbsd-arm64-cgo), const B57600 = 57600 +pkg syscall (netbsd-arm64-cgo), const B57600 ideal-int +pkg syscall (netbsd-arm64-cgo), const B600 = 600 +pkg syscall (netbsd-arm64-cgo), const B600 ideal-int +pkg syscall (netbsd-arm64-cgo), const B7200 = 7200 +pkg syscall (netbsd-arm64-cgo), const B7200 ideal-int +pkg syscall (netbsd-arm64-cgo), const B75 = 75 +pkg syscall (netbsd-arm64-cgo), const B75 ideal-int +pkg syscall (netbsd-arm64-cgo), const B76800 = 76800 +pkg syscall (netbsd-arm64-cgo), const B76800 ideal-int +pkg syscall (netbsd-arm64-cgo), const B921600 = 921600 +pkg syscall (netbsd-arm64-cgo), const B921600 ideal-int +pkg syscall (netbsd-arm64-cgo), const B9600 = 9600 +pkg syscall (netbsd-arm64-cgo), const B9600 ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCFEEDBACK = 2147762813 +pkg syscall (netbsd-arm64-cgo), const BIOCFEEDBACK ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCFLUSH = 536887912 +pkg syscall (netbsd-arm64-cgo), const BIOCFLUSH ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCGBLEN = 1074020966 +pkg syscall (netbsd-arm64-cgo), const BIOCGBLEN ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCGDLT = 1074020970 +pkg syscall (netbsd-arm64-cgo), const BIOCGDLT ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCGDLTLIST = 3222291063 +pkg syscall (netbsd-arm64-cgo), const BIOCGDLTLIST ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCGETIF = 1083196011 +pkg syscall (netbsd-arm64-cgo), const BIOCGETIF ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCGFEEDBACK = 1074020988 +pkg syscall (netbsd-arm64-cgo), const BIOCGFEEDBACK ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCGHDRCMPLT = 1074020980 +pkg syscall (netbsd-arm64-cgo), const BIOCGHDRCMPLT ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCGRTIMEOUT = 1074807419 +pkg syscall (netbsd-arm64-cgo), const BIOCGRTIMEOUT ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCGSEESENT = 1074020984 +pkg syscall (netbsd-arm64-cgo), const BIOCGSEESENT ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCGSTATS = 1082147439 +pkg syscall (netbsd-arm64-cgo), const BIOCGSTATS ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCGSTATSOLD = 1074283119 +pkg syscall (netbsd-arm64-cgo), const BIOCGSTATSOLD ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCIMMEDIATE = 2147762800 +pkg syscall (netbsd-arm64-cgo), const BIOCIMMEDIATE ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCPROMISC = 536887913 +pkg syscall (netbsd-arm64-cgo), const BIOCPROMISC ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCSBLEN = 3221504614 +pkg syscall (netbsd-arm64-cgo), const BIOCSBLEN ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCSDLT = 2147762806 +pkg syscall (netbsd-arm64-cgo), const BIOCSDLT ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCSETF = 2148549223 +pkg syscall (netbsd-arm64-cgo), const BIOCSETF ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCSETIF = 2156937836 +pkg syscall (netbsd-arm64-cgo), const BIOCSETIF ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCSFEEDBACK = 2147762813 +pkg syscall (netbsd-arm64-cgo), const BIOCSFEEDBACK ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCSHDRCMPLT = 2147762805 +pkg syscall (netbsd-arm64-cgo), const BIOCSHDRCMPLT ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCSRTIMEOUT = 2148549242 +pkg syscall (netbsd-arm64-cgo), const BIOCSRTIMEOUT ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCSSEESENT = 2147762809 +pkg syscall (netbsd-arm64-cgo), const BIOCSSEESENT ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCSTCPF = 2148549234 +pkg syscall (netbsd-arm64-cgo), const BIOCSTCPF ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCSUDPF = 2148549235 +pkg syscall (netbsd-arm64-cgo), const BIOCSUDPF ideal-int +pkg syscall (netbsd-arm64-cgo), const BIOCVERSION = 1074020977 +pkg syscall (netbsd-arm64-cgo), const BIOCVERSION ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_A = 16 +pkg syscall (netbsd-arm64-cgo), const BPF_A ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_ABS = 32 +pkg syscall (netbsd-arm64-cgo), const BPF_ABS ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_ADD = 0 +pkg syscall (netbsd-arm64-cgo), const BPF_ADD ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_ALIGNMENT = 8 +pkg syscall (netbsd-arm64-cgo), const BPF_ALIGNMENT ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_ALIGNMENT32 = 4 +pkg syscall (netbsd-arm64-cgo), const BPF_ALIGNMENT32 ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_ALU = 4 +pkg syscall (netbsd-arm64-cgo), const BPF_ALU ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_AND = 80 +pkg syscall (netbsd-arm64-cgo), const BPF_AND ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_B = 16 +pkg syscall (netbsd-arm64-cgo), const BPF_B ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_DFLTBUFSIZE = 1048576 +pkg syscall (netbsd-arm64-cgo), const BPF_DFLTBUFSIZE ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_DIV = 48 +pkg syscall (netbsd-arm64-cgo), const BPF_DIV ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_H = 8 +pkg syscall (netbsd-arm64-cgo), const BPF_H ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_IMM = 0 +pkg syscall (netbsd-arm64-cgo), const BPF_IMM ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_IND = 64 +pkg syscall (netbsd-arm64-cgo), const BPF_IND ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_JA = 0 +pkg syscall (netbsd-arm64-cgo), const BPF_JA ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_JEQ = 16 +pkg syscall (netbsd-arm64-cgo), const BPF_JEQ ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_JGE = 48 +pkg syscall (netbsd-arm64-cgo), const BPF_JGE ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_JGT = 32 +pkg syscall (netbsd-arm64-cgo), const BPF_JGT ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_JMP = 5 +pkg syscall (netbsd-arm64-cgo), const BPF_JMP ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_JSET = 64 +pkg syscall (netbsd-arm64-cgo), const BPF_JSET ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_K = 0 +pkg syscall (netbsd-arm64-cgo), const BPF_K ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_LD = 0 +pkg syscall (netbsd-arm64-cgo), const BPF_LD ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_LDX = 1 +pkg syscall (netbsd-arm64-cgo), const BPF_LDX ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_LEN = 128 +pkg syscall (netbsd-arm64-cgo), const BPF_LEN ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_LSH = 96 +pkg syscall (netbsd-arm64-cgo), const BPF_LSH ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_MAJOR_VERSION = 1 +pkg syscall (netbsd-arm64-cgo), const BPF_MAJOR_VERSION ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_MAXBUFSIZE = 16777216 +pkg syscall (netbsd-arm64-cgo), const BPF_MAXBUFSIZE ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_MAXINSNS = 512 +pkg syscall (netbsd-arm64-cgo), const BPF_MAXINSNS ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_MEM = 96 +pkg syscall (netbsd-arm64-cgo), const BPF_MEM ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_MEMWORDS = 16 +pkg syscall (netbsd-arm64-cgo), const BPF_MEMWORDS ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_MINBUFSIZE = 32 +pkg syscall (netbsd-arm64-cgo), const BPF_MINBUFSIZE ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_MINOR_VERSION = 1 +pkg syscall (netbsd-arm64-cgo), const BPF_MINOR_VERSION ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_MISC = 7 +pkg syscall (netbsd-arm64-cgo), const BPF_MISC ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_MSH = 160 +pkg syscall (netbsd-arm64-cgo), const BPF_MSH ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_MUL = 32 +pkg syscall (netbsd-arm64-cgo), const BPF_MUL ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_NEG = 128 +pkg syscall (netbsd-arm64-cgo), const BPF_NEG ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_OR = 64 +pkg syscall (netbsd-arm64-cgo), const BPF_OR ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_RELEASE = 199606 +pkg syscall (netbsd-arm64-cgo), const BPF_RELEASE ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_RET = 6 +pkg syscall (netbsd-arm64-cgo), const BPF_RET ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_RSH = 112 +pkg syscall (netbsd-arm64-cgo), const BPF_RSH ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_ST = 2 +pkg syscall (netbsd-arm64-cgo), const BPF_ST ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_STX = 3 +pkg syscall (netbsd-arm64-cgo), const BPF_STX ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_SUB = 16 +pkg syscall (netbsd-arm64-cgo), const BPF_SUB ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_TAX = 0 +pkg syscall (netbsd-arm64-cgo), const BPF_TAX ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_TXA = 128 +pkg syscall (netbsd-arm64-cgo), const BPF_TXA ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_W = 0 +pkg syscall (netbsd-arm64-cgo), const BPF_W ideal-int +pkg syscall (netbsd-arm64-cgo), const BPF_X = 8 +pkg syscall (netbsd-arm64-cgo), const BPF_X ideal-int +pkg syscall (netbsd-arm64-cgo), const BRKINT = 2 +pkg syscall (netbsd-arm64-cgo), const BRKINT ideal-int +pkg syscall (netbsd-arm64-cgo), const CFLUSH = 15 +pkg syscall (netbsd-arm64-cgo), const CFLUSH ideal-int +pkg syscall (netbsd-arm64-cgo), const CLOCAL = 32768 +pkg syscall (netbsd-arm64-cgo), const CLOCAL ideal-int +pkg syscall (netbsd-arm64-cgo), const CLONE_CSIGNAL = 255 +pkg syscall (netbsd-arm64-cgo), const CLONE_CSIGNAL ideal-int +pkg syscall (netbsd-arm64-cgo), const CLONE_FILES = 1024 +pkg syscall (netbsd-arm64-cgo), const CLONE_FILES ideal-int +pkg syscall (netbsd-arm64-cgo), const CLONE_FS = 512 +pkg syscall (netbsd-arm64-cgo), const CLONE_FS ideal-int +pkg syscall (netbsd-arm64-cgo), const CLONE_PID = 4096 +pkg syscall (netbsd-arm64-cgo), const CLONE_PID ideal-int +pkg syscall (netbsd-arm64-cgo), const CLONE_PTRACE = 8192 +pkg syscall (netbsd-arm64-cgo), const CLONE_PTRACE ideal-int +pkg syscall (netbsd-arm64-cgo), const CLONE_SIGHAND = 2048 +pkg syscall (netbsd-arm64-cgo), const CLONE_SIGHAND ideal-int +pkg syscall (netbsd-arm64-cgo), const CLONE_VFORK = 16384 +pkg syscall (netbsd-arm64-cgo), const CLONE_VFORK ideal-int +pkg syscall (netbsd-arm64-cgo), const CLONE_VM = 256 +pkg syscall (netbsd-arm64-cgo), const CLONE_VM ideal-int +pkg syscall (netbsd-arm64-cgo), const CREAD = 2048 +pkg syscall (netbsd-arm64-cgo), const CREAD ideal-int +pkg syscall (netbsd-arm64-cgo), const CS5 = 0 +pkg syscall (netbsd-arm64-cgo), const CS5 ideal-int +pkg syscall (netbsd-arm64-cgo), const CS6 = 256 +pkg syscall (netbsd-arm64-cgo), const CS6 ideal-int +pkg syscall (netbsd-arm64-cgo), const CS7 = 512 +pkg syscall (netbsd-arm64-cgo), const CS7 ideal-int +pkg syscall (netbsd-arm64-cgo), const CS8 = 768 +pkg syscall (netbsd-arm64-cgo), const CS8 ideal-int +pkg syscall (netbsd-arm64-cgo), const CSIZE = 768 +pkg syscall (netbsd-arm64-cgo), const CSIZE ideal-int +pkg syscall (netbsd-arm64-cgo), const CSTART = 17 +pkg syscall (netbsd-arm64-cgo), const CSTART ideal-int +pkg syscall (netbsd-arm64-cgo), const CSTATUS = 20 +pkg syscall (netbsd-arm64-cgo), const CSTATUS ideal-int +pkg syscall (netbsd-arm64-cgo), const CSTOP = 19 +pkg syscall (netbsd-arm64-cgo), const CSTOP ideal-int +pkg syscall (netbsd-arm64-cgo), const CSTOPB = 1024 +pkg syscall (netbsd-arm64-cgo), const CSTOPB ideal-int +pkg syscall (netbsd-arm64-cgo), const CSUSP = 26 +pkg syscall (netbsd-arm64-cgo), const CSUSP ideal-int +pkg syscall (netbsd-arm64-cgo), const CTL_MAXNAME = 12 +pkg syscall (netbsd-arm64-cgo), const CTL_MAXNAME ideal-int +pkg syscall (netbsd-arm64-cgo), const CTL_NET = 4 +pkg syscall (netbsd-arm64-cgo), const CTL_NET ideal-int +pkg syscall (netbsd-arm64-cgo), const CTL_QUERY = -2 +pkg syscall (netbsd-arm64-cgo), const CTL_QUERY ideal-int +pkg syscall (netbsd-arm64-cgo), const DIOCBSFLUSH = 536896632 +pkg syscall (netbsd-arm64-cgo), const DIOCBSFLUSH ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_A429 = 184 +pkg syscall (netbsd-arm64-cgo), const DLT_A429 ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_A653_ICM = 185 +pkg syscall (netbsd-arm64-cgo), const DLT_A653_ICM ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_AIRONET_HEADER = 120 +pkg syscall (netbsd-arm64-cgo), const DLT_AIRONET_HEADER ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_AOS = 222 +pkg syscall (netbsd-arm64-cgo), const DLT_AOS ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_APPLE_IP_OVER_IEEE1394 = 138 +pkg syscall (netbsd-arm64-cgo), const DLT_APPLE_IP_OVER_IEEE1394 ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_ARCNET = 7 +pkg syscall (netbsd-arm64-cgo), const DLT_ARCNET ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_ARCNET_LINUX = 129 +pkg syscall (netbsd-arm64-cgo), const DLT_ARCNET_LINUX ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_ATM_CLIP = 19 +pkg syscall (netbsd-arm64-cgo), const DLT_ATM_CLIP ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_ATM_RFC1483 = 11 +pkg syscall (netbsd-arm64-cgo), const DLT_ATM_RFC1483 ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_AURORA = 126 +pkg syscall (netbsd-arm64-cgo), const DLT_AURORA ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_AX25 = 3 +pkg syscall (netbsd-arm64-cgo), const DLT_AX25 ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_AX25_KISS = 202 +pkg syscall (netbsd-arm64-cgo), const DLT_AX25_KISS ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_BACNET_MS_TP = 165 +pkg syscall (netbsd-arm64-cgo), const DLT_BACNET_MS_TP ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_BLUETOOTH_HCI_H4 = 187 +pkg syscall (netbsd-arm64-cgo), const DLT_BLUETOOTH_HCI_H4 ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 201 +pkg syscall (netbsd-arm64-cgo), const DLT_BLUETOOTH_HCI_H4_WITH_PHDR ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_CAN20B = 190 +pkg syscall (netbsd-arm64-cgo), const DLT_CAN20B ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_CAN_SOCKETCAN = 227 +pkg syscall (netbsd-arm64-cgo), const DLT_CAN_SOCKETCAN ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_CHAOS = 5 +pkg syscall (netbsd-arm64-cgo), const DLT_CHAOS ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_CISCO_IOS = 118 +pkg syscall (netbsd-arm64-cgo), const DLT_CISCO_IOS ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_C_HDLC = 104 +pkg syscall (netbsd-arm64-cgo), const DLT_C_HDLC ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_C_HDLC_WITH_DIR = 205 +pkg syscall (netbsd-arm64-cgo), const DLT_C_HDLC_WITH_DIR ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_DECT = 221 +pkg syscall (netbsd-arm64-cgo), const DLT_DECT ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_DOCSIS = 143 +pkg syscall (netbsd-arm64-cgo), const DLT_DOCSIS ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_ECONET = 115 +pkg syscall (netbsd-arm64-cgo), const DLT_ECONET ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_EN10MB = 1 +pkg syscall (netbsd-arm64-cgo), const DLT_EN10MB ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_EN3MB = 2 +pkg syscall (netbsd-arm64-cgo), const DLT_EN3MB ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_ENC = 109 +pkg syscall (netbsd-arm64-cgo), const DLT_ENC ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_ERF = 197 +pkg syscall (netbsd-arm64-cgo), const DLT_ERF ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_ERF_ETH = 175 +pkg syscall (netbsd-arm64-cgo), const DLT_ERF_ETH ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_ERF_POS = 176 +pkg syscall (netbsd-arm64-cgo), const DLT_ERF_POS ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_FC_2 = 224 +pkg syscall (netbsd-arm64-cgo), const DLT_FC_2 ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_FC_2_WITH_FRAME_DELIMS = 225 +pkg syscall (netbsd-arm64-cgo), const DLT_FC_2_WITH_FRAME_DELIMS ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_FDDI = 10 +pkg syscall (netbsd-arm64-cgo), const DLT_FDDI ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_FLEXRAY = 210 +pkg syscall (netbsd-arm64-cgo), const DLT_FLEXRAY ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_FRELAY = 107 +pkg syscall (netbsd-arm64-cgo), const DLT_FRELAY ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_FRELAY_WITH_DIR = 206 +pkg syscall (netbsd-arm64-cgo), const DLT_FRELAY_WITH_DIR ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_GCOM_SERIAL = 173 +pkg syscall (netbsd-arm64-cgo), const DLT_GCOM_SERIAL ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_GCOM_T1E1 = 172 +pkg syscall (netbsd-arm64-cgo), const DLT_GCOM_T1E1 ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_GPF_F = 171 +pkg syscall (netbsd-arm64-cgo), const DLT_GPF_F ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_GPF_T = 170 +pkg syscall (netbsd-arm64-cgo), const DLT_GPF_T ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_GPRS_LLC = 169 +pkg syscall (netbsd-arm64-cgo), const DLT_GPRS_LLC ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_GSMTAP_ABIS = 218 +pkg syscall (netbsd-arm64-cgo), const DLT_GSMTAP_ABIS ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_GSMTAP_UM = 217 +pkg syscall (netbsd-arm64-cgo), const DLT_GSMTAP_UM ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_HDLC = 16 +pkg syscall (netbsd-arm64-cgo), const DLT_HDLC ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_HHDLC = 121 +pkg syscall (netbsd-arm64-cgo), const DLT_HHDLC ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_HIPPI = 15 +pkg syscall (netbsd-arm64-cgo), const DLT_HIPPI ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_IBM_SN = 146 +pkg syscall (netbsd-arm64-cgo), const DLT_IBM_SN ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_IBM_SP = 145 +pkg syscall (netbsd-arm64-cgo), const DLT_IBM_SP ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_IEEE802 = 6 +pkg syscall (netbsd-arm64-cgo), const DLT_IEEE802 ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_IEEE802_11 = 105 +pkg syscall (netbsd-arm64-cgo), const DLT_IEEE802_11 ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_IEEE802_11_RADIO = 127 +pkg syscall (netbsd-arm64-cgo), const DLT_IEEE802_11_RADIO ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_IEEE802_11_RADIO_AVS = 163 +pkg syscall (netbsd-arm64-cgo), const DLT_IEEE802_11_RADIO_AVS ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_IEEE802_15_4 = 195 +pkg syscall (netbsd-arm64-cgo), const DLT_IEEE802_15_4 ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_IEEE802_15_4_LINUX = 191 +pkg syscall (netbsd-arm64-cgo), const DLT_IEEE802_15_4_LINUX ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_IEEE802_15_4_NONASK_PHY = 215 +pkg syscall (netbsd-arm64-cgo), const DLT_IEEE802_15_4_NONASK_PHY ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_IEEE802_16_MAC_CPS = 188 +pkg syscall (netbsd-arm64-cgo), const DLT_IEEE802_16_MAC_CPS ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_IEEE802_16_MAC_CPS_RADIO = 193 +pkg syscall (netbsd-arm64-cgo), const DLT_IEEE802_16_MAC_CPS_RADIO ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_IPMB = 199 +pkg syscall (netbsd-arm64-cgo), const DLT_IPMB ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_IPMB_LINUX = 209 +pkg syscall (netbsd-arm64-cgo), const DLT_IPMB_LINUX ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_IPNET = 226 +pkg syscall (netbsd-arm64-cgo), const DLT_IPNET ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_IPV4 = 228 +pkg syscall (netbsd-arm64-cgo), const DLT_IPV4 ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_IPV6 = 229 +pkg syscall (netbsd-arm64-cgo), const DLT_IPV6 ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_IP_OVER_FC = 122 +pkg syscall (netbsd-arm64-cgo), const DLT_IP_OVER_FC ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_ATM1 = 137 +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_ATM1 ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_ATM2 = 135 +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_ATM2 ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_CHDLC = 181 +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_CHDLC ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_ES = 132 +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_ES ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_ETHER = 178 +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_ETHER ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_FRELAY = 180 +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_FRELAY ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_GGSN = 133 +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_GGSN ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_ISM = 194 +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_ISM ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_MFR = 134 +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_MFR ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_MLFR = 131 +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_MLFR ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_MLPPP = 130 +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_MLPPP ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_MONITOR = 164 +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_MONITOR ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_PIC_PEER = 174 +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_PIC_PEER ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_PPP = 179 +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_PPP ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_PPPOE = 167 +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_PPPOE ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_PPPOE_ATM = 168 +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_PPPOE_ATM ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_SERVICES = 136 +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_SERVICES ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_ST = 200 +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_ST ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_VP = 183 +pkg syscall (netbsd-arm64-cgo), const DLT_JUNIPER_VP ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_LAPB_WITH_DIR = 207 +pkg syscall (netbsd-arm64-cgo), const DLT_LAPB_WITH_DIR ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_LAPD = 203 +pkg syscall (netbsd-arm64-cgo), const DLT_LAPD ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_LIN = 212 +pkg syscall (netbsd-arm64-cgo), const DLT_LIN ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_LINUX_EVDEV = 216 +pkg syscall (netbsd-arm64-cgo), const DLT_LINUX_EVDEV ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_LINUX_IRDA = 144 +pkg syscall (netbsd-arm64-cgo), const DLT_LINUX_IRDA ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_LINUX_LAPD = 177 +pkg syscall (netbsd-arm64-cgo), const DLT_LINUX_LAPD ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_LINUX_SLL = 113 +pkg syscall (netbsd-arm64-cgo), const DLT_LINUX_SLL ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_LOOP = 108 +pkg syscall (netbsd-arm64-cgo), const DLT_LOOP ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_LTALK = 114 +pkg syscall (netbsd-arm64-cgo), const DLT_LTALK ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_MFR = 182 +pkg syscall (netbsd-arm64-cgo), const DLT_MFR ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_MOST = 211 +pkg syscall (netbsd-arm64-cgo), const DLT_MOST ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_MPLS = 219 +pkg syscall (netbsd-arm64-cgo), const DLT_MPLS ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_MTP2 = 140 +pkg syscall (netbsd-arm64-cgo), const DLT_MTP2 ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_MTP2_WITH_PHDR = 139 +pkg syscall (netbsd-arm64-cgo), const DLT_MTP2_WITH_PHDR ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_MTP3 = 141 +pkg syscall (netbsd-arm64-cgo), const DLT_MTP3 ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_NULL = 0 +pkg syscall (netbsd-arm64-cgo), const DLT_NULL ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_PCI_EXP = 125 +pkg syscall (netbsd-arm64-cgo), const DLT_PCI_EXP ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_PFLOG = 117 +pkg syscall (netbsd-arm64-cgo), const DLT_PFLOG ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_PFSYNC = 18 +pkg syscall (netbsd-arm64-cgo), const DLT_PFSYNC ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_PPI = 192 +pkg syscall (netbsd-arm64-cgo), const DLT_PPI ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_PPP = 9 +pkg syscall (netbsd-arm64-cgo), const DLT_PPP ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_PPP_BSDOS = 14 +pkg syscall (netbsd-arm64-cgo), const DLT_PPP_BSDOS ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_PPP_ETHER = 51 +pkg syscall (netbsd-arm64-cgo), const DLT_PPP_ETHER ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_PPP_PPPD = 166 +pkg syscall (netbsd-arm64-cgo), const DLT_PPP_PPPD ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_PPP_SERIAL = 50 +pkg syscall (netbsd-arm64-cgo), const DLT_PPP_SERIAL ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_PPP_WITH_DIR = 204 +pkg syscall (netbsd-arm64-cgo), const DLT_PPP_WITH_DIR ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_PRISM_HEADER = 119 +pkg syscall (netbsd-arm64-cgo), const DLT_PRISM_HEADER ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_PRONET = 4 +pkg syscall (netbsd-arm64-cgo), const DLT_PRONET ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_RAIF1 = 198 +pkg syscall (netbsd-arm64-cgo), const DLT_RAIF1 ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_RAW = 12 +pkg syscall (netbsd-arm64-cgo), const DLT_RAW ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_RAWAF_MASK = 35913728 +pkg syscall (netbsd-arm64-cgo), const DLT_RAWAF_MASK ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_RIO = 124 +pkg syscall (netbsd-arm64-cgo), const DLT_RIO ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_SCCP = 142 +pkg syscall (netbsd-arm64-cgo), const DLT_SCCP ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_SITA = 196 +pkg syscall (netbsd-arm64-cgo), const DLT_SITA ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_SLIP = 8 +pkg syscall (netbsd-arm64-cgo), const DLT_SLIP ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_SLIP_BSDOS = 13 +pkg syscall (netbsd-arm64-cgo), const DLT_SLIP_BSDOS ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_SUNATM = 123 +pkg syscall (netbsd-arm64-cgo), const DLT_SUNATM ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_SYMANTEC_FIREWALL = 99 +pkg syscall (netbsd-arm64-cgo), const DLT_SYMANTEC_FIREWALL ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_TZSP = 128 +pkg syscall (netbsd-arm64-cgo), const DLT_TZSP ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_USB = 186 +pkg syscall (netbsd-arm64-cgo), const DLT_USB ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_USB_LINUX = 189 +pkg syscall (netbsd-arm64-cgo), const DLT_USB_LINUX ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_USB_LINUX_MMAPPED = 220 +pkg syscall (netbsd-arm64-cgo), const DLT_USB_LINUX_MMAPPED ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_WIHART = 223 +pkg syscall (netbsd-arm64-cgo), const DLT_WIHART ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_X2E_SERIAL = 213 +pkg syscall (netbsd-arm64-cgo), const DLT_X2E_SERIAL ideal-int +pkg syscall (netbsd-arm64-cgo), const DLT_X2E_XORAYA = 214 +pkg syscall (netbsd-arm64-cgo), const DLT_X2E_XORAYA ideal-int +pkg syscall (netbsd-arm64-cgo), const DT_BLK = 6 +pkg syscall (netbsd-arm64-cgo), const DT_BLK ideal-int +pkg syscall (netbsd-arm64-cgo), const DT_CHR = 2 +pkg syscall (netbsd-arm64-cgo), const DT_CHR ideal-int +pkg syscall (netbsd-arm64-cgo), const DT_DIR = 4 +pkg syscall (netbsd-arm64-cgo), const DT_DIR ideal-int +pkg syscall (netbsd-arm64-cgo), const DT_FIFO = 1 +pkg syscall (netbsd-arm64-cgo), const DT_FIFO ideal-int +pkg syscall (netbsd-arm64-cgo), const DT_LNK = 10 +pkg syscall (netbsd-arm64-cgo), const DT_LNK ideal-int +pkg syscall (netbsd-arm64-cgo), const DT_REG = 8 +pkg syscall (netbsd-arm64-cgo), const DT_REG ideal-int +pkg syscall (netbsd-arm64-cgo), const DT_SOCK = 12 +pkg syscall (netbsd-arm64-cgo), const DT_SOCK ideal-int +pkg syscall (netbsd-arm64-cgo), const DT_UNKNOWN = 0 +pkg syscall (netbsd-arm64-cgo), const DT_UNKNOWN ideal-int +pkg syscall (netbsd-arm64-cgo), const DT_WHT = 14 +pkg syscall (netbsd-arm64-cgo), const DT_WHT ideal-int +pkg syscall (netbsd-arm64-cgo), const E2BIG = 7 +pkg syscall (netbsd-arm64-cgo), const EACCES = 13 +pkg syscall (netbsd-arm64-cgo), const EADDRINUSE = 48 +pkg syscall (netbsd-arm64-cgo), const EADDRNOTAVAIL = 49 +pkg syscall (netbsd-arm64-cgo), const EAFNOSUPPORT = 47 +pkg syscall (netbsd-arm64-cgo), const EAGAIN = 35 +pkg syscall (netbsd-arm64-cgo), const EALREADY = 37 +pkg syscall (netbsd-arm64-cgo), const EAUTH = 80 +pkg syscall (netbsd-arm64-cgo), const EAUTH Errno +pkg syscall (netbsd-arm64-cgo), const EBADF = 9 +pkg syscall (netbsd-arm64-cgo), const EBADMSG = 88 +pkg syscall (netbsd-arm64-cgo), const EBADMSG Errno +pkg syscall (netbsd-arm64-cgo), const EBADRPC = 72 +pkg syscall (netbsd-arm64-cgo), const EBADRPC Errno +pkg syscall (netbsd-arm64-cgo), const EBUSY = 16 +pkg syscall (netbsd-arm64-cgo), const ECANCELED = 87 +pkg syscall (netbsd-arm64-cgo), const ECHILD = 10 +pkg syscall (netbsd-arm64-cgo), const ECHO = 8 +pkg syscall (netbsd-arm64-cgo), const ECHO ideal-int +pkg syscall (netbsd-arm64-cgo), const ECHOCTL = 64 +pkg syscall (netbsd-arm64-cgo), const ECHOCTL ideal-int +pkg syscall (netbsd-arm64-cgo), const ECHOE = 2 +pkg syscall (netbsd-arm64-cgo), const ECHOE ideal-int +pkg syscall (netbsd-arm64-cgo), const ECHOK = 4 +pkg syscall (netbsd-arm64-cgo), const ECHOK ideal-int +pkg syscall (netbsd-arm64-cgo), const ECHOKE = 1 +pkg syscall (netbsd-arm64-cgo), const ECHOKE ideal-int +pkg syscall (netbsd-arm64-cgo), const ECHONL = 16 +pkg syscall (netbsd-arm64-cgo), const ECHONL ideal-int +pkg syscall (netbsd-arm64-cgo), const ECHOPRT = 32 +pkg syscall (netbsd-arm64-cgo), const ECHOPRT ideal-int +pkg syscall (netbsd-arm64-cgo), const ECONNABORTED = 53 +pkg syscall (netbsd-arm64-cgo), const ECONNREFUSED = 61 +pkg syscall (netbsd-arm64-cgo), const ECONNRESET = 54 +pkg syscall (netbsd-arm64-cgo), const EDEADLK = 11 +pkg syscall (netbsd-arm64-cgo), const EDESTADDRREQ = 39 +pkg syscall (netbsd-arm64-cgo), const EDOM = 33 +pkg syscall (netbsd-arm64-cgo), const EDQUOT = 69 +pkg syscall (netbsd-arm64-cgo), const EEXIST = 17 +pkg syscall (netbsd-arm64-cgo), const EFAULT = 14 +pkg syscall (netbsd-arm64-cgo), const EFBIG = 27 +pkg syscall (netbsd-arm64-cgo), const EFTYPE = 79 +pkg syscall (netbsd-arm64-cgo), const EFTYPE Errno +pkg syscall (netbsd-arm64-cgo), const EHOSTDOWN = 64 +pkg syscall (netbsd-arm64-cgo), const EHOSTUNREACH = 65 +pkg syscall (netbsd-arm64-cgo), const EIDRM = 82 +pkg syscall (netbsd-arm64-cgo), const EILSEQ = 85 +pkg syscall (netbsd-arm64-cgo), const EINPROGRESS = 36 +pkg syscall (netbsd-arm64-cgo), const EINTR = 4 +pkg syscall (netbsd-arm64-cgo), const EINVAL = 22 +pkg syscall (netbsd-arm64-cgo), const EIO = 5 +pkg syscall (netbsd-arm64-cgo), const EISCONN = 56 +pkg syscall (netbsd-arm64-cgo), const EISDIR = 21 +pkg syscall (netbsd-arm64-cgo), const ELAST = 96 +pkg syscall (netbsd-arm64-cgo), const ELAST Errno +pkg syscall (netbsd-arm64-cgo), const ELOOP = 62 +pkg syscall (netbsd-arm64-cgo), const EMFILE = 24 +pkg syscall (netbsd-arm64-cgo), const EMLINK = 31 +pkg syscall (netbsd-arm64-cgo), const EMSGSIZE = 40 +pkg syscall (netbsd-arm64-cgo), const EMULTIHOP = 94 +pkg syscall (netbsd-arm64-cgo), const EMULTIHOP Errno +pkg syscall (netbsd-arm64-cgo), const EMUL_LINUX = 1 +pkg syscall (netbsd-arm64-cgo), const EMUL_LINUX ideal-int +pkg syscall (netbsd-arm64-cgo), const EMUL_LINUX32 = 5 +pkg syscall (netbsd-arm64-cgo), const EMUL_LINUX32 ideal-int +pkg syscall (netbsd-arm64-cgo), const EMUL_MAXID = 6 +pkg syscall (netbsd-arm64-cgo), const EMUL_MAXID ideal-int +pkg syscall (netbsd-arm64-cgo), const ENAMETOOLONG = 63 +pkg syscall (netbsd-arm64-cgo), const ENEEDAUTH = 81 +pkg syscall (netbsd-arm64-cgo), const ENEEDAUTH Errno +pkg syscall (netbsd-arm64-cgo), const ENETDOWN = 50 +pkg syscall (netbsd-arm64-cgo), const ENETRESET = 52 +pkg syscall (netbsd-arm64-cgo), const ENETUNREACH = 51 +pkg syscall (netbsd-arm64-cgo), const ENFILE = 23 +pkg syscall (netbsd-arm64-cgo), const ENOATTR = 93 +pkg syscall (netbsd-arm64-cgo), const ENOATTR Errno +pkg syscall (netbsd-arm64-cgo), const ENOBUFS = 55 +pkg syscall (netbsd-arm64-cgo), const ENODATA = 89 +pkg syscall (netbsd-arm64-cgo), const ENODATA Errno +pkg syscall (netbsd-arm64-cgo), const ENODEV = 19 +pkg syscall (netbsd-arm64-cgo), const ENOEXEC = 8 +pkg syscall (netbsd-arm64-cgo), const ENOLCK = 77 +pkg syscall (netbsd-arm64-cgo), const ENOLINK = 95 +pkg syscall (netbsd-arm64-cgo), const ENOLINK Errno +pkg syscall (netbsd-arm64-cgo), const ENOMEM = 12 +pkg syscall (netbsd-arm64-cgo), const ENOMSG = 83 +pkg syscall (netbsd-arm64-cgo), const ENOPROTOOPT = 42 +pkg syscall (netbsd-arm64-cgo), const ENOSPC = 28 +pkg syscall (netbsd-arm64-cgo), const ENOSR = 90 +pkg syscall (netbsd-arm64-cgo), const ENOSR Errno +pkg syscall (netbsd-arm64-cgo), const ENOSTR = 91 +pkg syscall (netbsd-arm64-cgo), const ENOSTR Errno +pkg syscall (netbsd-arm64-cgo), const ENOSYS = 78 +pkg syscall (netbsd-arm64-cgo), const ENOTBLK = 15 +pkg syscall (netbsd-arm64-cgo), const ENOTCONN = 57 +pkg syscall (netbsd-arm64-cgo), const ENOTDIR = 20 +pkg syscall (netbsd-arm64-cgo), const ENOTEMPTY = 66 +pkg syscall (netbsd-arm64-cgo), const ENOTSOCK = 38 +pkg syscall (netbsd-arm64-cgo), const ENOTSUP = 86 +pkg syscall (netbsd-arm64-cgo), const ENOTTY = 25 +pkg syscall (netbsd-arm64-cgo), const ENXIO = 6 +pkg syscall (netbsd-arm64-cgo), const EOPNOTSUPP = 45 +pkg syscall (netbsd-arm64-cgo), const EOVERFLOW = 84 +pkg syscall (netbsd-arm64-cgo), const EPERM = 1 +pkg syscall (netbsd-arm64-cgo), const EPFNOSUPPORT = 46 +pkg syscall (netbsd-arm64-cgo), const EPIPE = 32 +pkg syscall (netbsd-arm64-cgo), const EPROCLIM = 67 +pkg syscall (netbsd-arm64-cgo), const EPROCLIM Errno +pkg syscall (netbsd-arm64-cgo), const EPROCUNAVAIL = 76 +pkg syscall (netbsd-arm64-cgo), const EPROCUNAVAIL Errno +pkg syscall (netbsd-arm64-cgo), const EPROGMISMATCH = 75 +pkg syscall (netbsd-arm64-cgo), const EPROGMISMATCH Errno +pkg syscall (netbsd-arm64-cgo), const EPROGUNAVAIL = 74 +pkg syscall (netbsd-arm64-cgo), const EPROGUNAVAIL Errno +pkg syscall (netbsd-arm64-cgo), const EPROTO = 96 +pkg syscall (netbsd-arm64-cgo), const EPROTO Errno +pkg syscall (netbsd-arm64-cgo), const EPROTONOSUPPORT = 43 +pkg syscall (netbsd-arm64-cgo), const EPROTOTYPE = 41 +pkg syscall (netbsd-arm64-cgo), const ERANGE = 34 +pkg syscall (netbsd-arm64-cgo), const EREMOTE = 71 +pkg syscall (netbsd-arm64-cgo), const EROFS = 30 +pkg syscall (netbsd-arm64-cgo), const ERPCMISMATCH = 73 +pkg syscall (netbsd-arm64-cgo), const ERPCMISMATCH Errno +pkg syscall (netbsd-arm64-cgo), const ESHUTDOWN = 58 +pkg syscall (netbsd-arm64-cgo), const ESOCKTNOSUPPORT = 44 +pkg syscall (netbsd-arm64-cgo), const ESPIPE = 29 +pkg syscall (netbsd-arm64-cgo), const ESRCH = 3 +pkg syscall (netbsd-arm64-cgo), const ESTALE = 70 +pkg syscall (netbsd-arm64-cgo), const ETHERCAP_JUMBO_MTU = 4 +pkg syscall (netbsd-arm64-cgo), const ETHERCAP_JUMBO_MTU ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERCAP_VLAN_HWTAGGING = 2 +pkg syscall (netbsd-arm64-cgo), const ETHERCAP_VLAN_HWTAGGING ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERCAP_VLAN_MTU = 1 +pkg syscall (netbsd-arm64-cgo), const ETHERCAP_VLAN_MTU ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERMIN = 46 +pkg syscall (netbsd-arm64-cgo), const ETHERMIN ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERMTU = 1500 +pkg syscall (netbsd-arm64-cgo), const ETHERMTU ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERMTU_JUMBO = 9000 +pkg syscall (netbsd-arm64-cgo), const ETHERMTU_JUMBO ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_8023 = 4 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_8023 ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_AARP = 33011 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_AARP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ACCTON = 33680 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ACCTON ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_AEONIC = 32822 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_AEONIC ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ALPHA = 33098 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ALPHA ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_AMBER = 24584 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_AMBER ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_AMOEBA = 33093 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_AMOEBA ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_APOLLO = 33015 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_APOLLO ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_APOLLODOMAIN = 32793 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_APOLLODOMAIN ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_APPLETALK = 32923 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_APPLETALK ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_APPLITEK = 32967 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_APPLITEK ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ARGONAUT = 32826 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ARGONAUT ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ARP = 2054 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ARP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_AT = 32923 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_AT ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ATALK = 32923 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ATALK ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ATOMIC = 34527 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ATOMIC ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ATT = 32873 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ATT ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ATTSTANFORD = 32776 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ATTSTANFORD ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_AUTOPHON = 32874 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_AUTOPHON ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_AXIS = 34902 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_AXIS ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_BCLOOP = 36867 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_BCLOOP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_BOFL = 33026 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_BOFL ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_CABLETRON = 28724 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_CABLETRON ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_CHAOS = 2052 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_CHAOS ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_COMDESIGN = 32876 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_COMDESIGN ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_COMPUGRAPHIC = 32877 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_COMPUGRAPHIC ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_COUNTERPOINT = 32866 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_COUNTERPOINT ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_CRONUS = 32772 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_CRONUS ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_CRONUSVLN = 32771 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_CRONUSVLN ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DCA = 4660 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DCA ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DDE = 32891 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DDE ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DEBNI = 43690 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DEBNI ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DECAM = 32840 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DECAM ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DECCUST = 24582 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DECCUST ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DECDIAG = 24581 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DECDIAG ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DECDNS = 32828 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DECDNS ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DECDTS = 32830 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DECDTS ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DECEXPER = 24576 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DECEXPER ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DECLAST = 32833 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DECLAST ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DECLTM = 32831 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DECLTM ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DECMUMPS = 24585 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DECMUMPS ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DECNETBIOS = 32832 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DECNETBIOS ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DELTACON = 34526 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DELTACON ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DIDDLE = 17185 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DIDDLE ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DLOG1 = 1632 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DLOG1 ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DLOG2 = 1633 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DLOG2 ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DN = 24579 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DN ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DOGFIGHT = 6537 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DOGFIGHT ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DSMD = 32825 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_DSMD ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ECMA = 2051 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ECMA ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ENCRYPT = 32829 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ENCRYPT ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ES = 32861 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_ES ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_EXCELAN = 32784 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_EXCELAN ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_EXPERDATA = 32841 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_EXPERDATA ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_FLIP = 33094 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_FLIP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_FLOWCONTROL = 34824 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_FLOWCONTROL ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_FRARP = 2056 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_FRARP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_GENDYN = 32872 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_GENDYN ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_HAYES = 33072 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_HAYES ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_HIPPI_FP = 33152 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_HIPPI_FP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_HITACHI = 34848 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_HITACHI ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_HP = 32773 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_HP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_IEEEPUP = 2560 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_IEEEPUP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_IEEEPUPAT = 2561 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_IEEEPUPAT ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_IMLBL = 19522 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_IMLBL ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_IMLBLDIAG = 16972 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_IMLBLDIAG ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_IP = 2048 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_IP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_IPAS = 34668 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_IPAS ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_IPV6 = 34525 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_IPV6 ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_IPX = 33079 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_IPX ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_IPXNEW = 32823 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_IPXNEW ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_KALPANA = 34178 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_KALPANA ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_LANBRIDGE = 32824 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_LANBRIDGE ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_LANPROBE = 34952 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_LANPROBE ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_LAT = 24580 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_LAT ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_LBACK = 36864 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_LBACK ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_LITTLE = 32864 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_LITTLE ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_LOGICRAFT = 33096 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_LOGICRAFT ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_LOOPBACK = 36864 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_LOOPBACK ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_MATRA = 32890 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_MATRA ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_MAX = 65535 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_MAX ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_MERIT = 32892 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_MERIT ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_MICP = 34618 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_MICP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_MOPDL = 24577 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_MOPDL ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_MOPRC = 24578 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_MOPRC ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_MOTOROLA = 33165 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_MOTOROLA ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_MPLS = 34887 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_MPLS ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_MPLS_MCAST = 34888 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_MPLS_MCAST ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_MUMPS = 33087 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_MUMPS ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPCC = 15364 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPCC ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPCLAIM = 15369 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPCLAIM ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPCLREQ = 15365 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPCLREQ ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPCLRSP = 15366 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPCLRSP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPCREQ = 15362 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPCREQ ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPCRSP = 15363 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPCRSP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPDG = 15367 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPDG ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPDGB = 15368 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPDGB ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPDLTE = 15370 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPDLTE ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPRAR = 15372 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPRAR ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPRAS = 15371 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPRAS ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPRST = 15373 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPRST ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPSCD = 15361 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPSCD ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPVCD = 15360 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBPVCD ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBS = 2050 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NBS ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NCD = 33097 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NCD ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NESTAR = 32774 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NESTAR ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NETBEUI = 33169 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NETBEUI ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NOVELL = 33080 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NOVELL ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NS = 1536 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NS ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NSAT = 1537 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NSAT ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NSCOMPAT = 2055 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NSCOMPAT ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NTRAILER = 16 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_NTRAILER ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_OS9 = 28679 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_OS9 ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_OS9NET = 28681 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_OS9NET ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_PACER = 32966 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_PACER ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_PAE = 34958 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_PAE ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_PCS = 16962 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_PCS ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_PLANNING = 32836 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_PLANNING ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_PPP = 34827 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_PPP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_PPPOE = 34916 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_PPPOE ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_PPPOEDISC = 34915 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_PPPOEDISC ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_PRIMENTS = 28721 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_PRIMENTS ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_PUP = 512 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_PUP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_PUPAT = 512 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_PUPAT ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_RACAL = 28720 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_RACAL ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_RATIONAL = 33104 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_RATIONAL ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_RAWFR = 25945 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_RAWFR ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_RCL = 6549 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_RCL ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_RDP = 34617 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_RDP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_RETIX = 33010 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_RETIX ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_REVARP = 32821 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_REVARP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SCA = 24583 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SCA ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SECTRA = 34523 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SECTRA ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SECUREDATA = 34669 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SECUREDATA ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SGITW = 33150 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SGITW ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SG_BOUNCE = 32790 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SG_BOUNCE ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SG_DIAG = 32787 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SG_DIAG ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SG_NETGAMES = 32788 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SG_NETGAMES ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SG_RESV = 32789 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SG_RESV ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SIMNET = 21000 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SIMNET ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SLOWPROTOCOLS = 34825 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SLOWPROTOCOLS ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SNA = 32981 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SNA ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SNMP = 33100 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SNMP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SONIX = 64245 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SONIX ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SPIDER = 32927 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SPIDER ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SPRITE = 1280 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_SPRITE ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_STP = 33153 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_STP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_TALARIS = 33067 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_TALARIS ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_TALARISMC = 34091 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_TALARISMC ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_TCPCOMP = 34667 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_TCPCOMP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_TCPSM = 36866 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_TCPSM ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_TEC = 33103 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_TEC ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_TIGAN = 32815 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_TIGAN ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_TRAIL = 4096 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_TRAIL ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_TRANSETHER = 25944 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_TRANSETHER ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_TYMSHARE = 32814 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_TYMSHARE ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_UBBST = 28677 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_UBBST ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_UBDEBUG = 2304 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_UBDEBUG ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_UBDIAGLOOP = 28674 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_UBDIAGLOOP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_UBDL = 28672 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_UBDL ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_UBNIU = 28673 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_UBNIU ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_UBNMC = 28675 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_UBNMC ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VALID = 5632 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VALID ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VARIAN = 32989 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VARIAN ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VAXELN = 32827 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VAXELN ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VEECO = 32871 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VEECO ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VEXP = 32859 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VEXP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VGLAB = 33073 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VGLAB ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VINES = 2989 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VINES ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VINESECHO = 2991 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VINESECHO ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VINESLOOP = 2990 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VINESLOOP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VITAL = 65280 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VITAL ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VLAN = 33024 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VLAN ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VLTLMAN = 32896 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VLTLMAN ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VPROD = 32860 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VPROD ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VURESERVED = 33095 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_VURESERVED ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_WATERLOO = 33072 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_WATERLOO ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_WELLFLEET = 33027 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_WELLFLEET ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_X25 = 2053 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_X25 ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_X75 = 2049 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_X75 ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_XNSSM = 36865 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_XNSSM ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_XTP = 33149 +pkg syscall (netbsd-arm64-cgo), const ETHERTYPE_XTP ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHER_ADDR_LEN = 6 +pkg syscall (netbsd-arm64-cgo), const ETHER_ADDR_LEN ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHER_CRC_LEN = 4 +pkg syscall (netbsd-arm64-cgo), const ETHER_CRC_LEN ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHER_CRC_POLY_BE = 79764918 +pkg syscall (netbsd-arm64-cgo), const ETHER_CRC_POLY_BE ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHER_CRC_POLY_LE = 3988292384 +pkg syscall (netbsd-arm64-cgo), const ETHER_CRC_POLY_LE ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHER_HDR_LEN = 14 +pkg syscall (netbsd-arm64-cgo), const ETHER_HDR_LEN ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHER_MAX_LEN = 1518 +pkg syscall (netbsd-arm64-cgo), const ETHER_MAX_LEN ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHER_MAX_LEN_JUMBO = 9018 +pkg syscall (netbsd-arm64-cgo), const ETHER_MAX_LEN_JUMBO ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHER_MIN_LEN = 64 +pkg syscall (netbsd-arm64-cgo), const ETHER_MIN_LEN ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHER_PPPOE_ENCAP_LEN = 8 +pkg syscall (netbsd-arm64-cgo), const ETHER_PPPOE_ENCAP_LEN ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHER_TYPE_LEN = 2 +pkg syscall (netbsd-arm64-cgo), const ETHER_TYPE_LEN ideal-int +pkg syscall (netbsd-arm64-cgo), const ETHER_VLAN_ENCAP_LEN = 4 +pkg syscall (netbsd-arm64-cgo), const ETHER_VLAN_ENCAP_LEN ideal-int +pkg syscall (netbsd-arm64-cgo), const ETIME = 92 +pkg syscall (netbsd-arm64-cgo), const ETIME Errno +pkg syscall (netbsd-arm64-cgo), const ETIMEDOUT = 60 +pkg syscall (netbsd-arm64-cgo), const ETOOMANYREFS = 59 +pkg syscall (netbsd-arm64-cgo), const ETXTBSY = 26 +pkg syscall (netbsd-arm64-cgo), const EUSERS = 68 +pkg syscall (netbsd-arm64-cgo), const EVFILT_AIO = 2 +pkg syscall (netbsd-arm64-cgo), const EVFILT_AIO ideal-int +pkg syscall (netbsd-arm64-cgo), const EVFILT_PROC = 4 +pkg syscall (netbsd-arm64-cgo), const EVFILT_PROC ideal-int +pkg syscall (netbsd-arm64-cgo), const EVFILT_READ = 0 +pkg syscall (netbsd-arm64-cgo), const EVFILT_READ ideal-int +pkg syscall (netbsd-arm64-cgo), const EVFILT_SIGNAL = 5 +pkg syscall (netbsd-arm64-cgo), const EVFILT_SIGNAL ideal-int +pkg syscall (netbsd-arm64-cgo), const EVFILT_SYSCOUNT = 7 +pkg syscall (netbsd-arm64-cgo), const EVFILT_SYSCOUNT ideal-int +pkg syscall (netbsd-arm64-cgo), const EVFILT_TIMER = 6 +pkg syscall (netbsd-arm64-cgo), const EVFILT_TIMER ideal-int +pkg syscall (netbsd-arm64-cgo), const EVFILT_VNODE = 3 +pkg syscall (netbsd-arm64-cgo), const EVFILT_VNODE ideal-int +pkg syscall (netbsd-arm64-cgo), const EVFILT_WRITE = 1 +pkg syscall (netbsd-arm64-cgo), const EVFILT_WRITE ideal-int +pkg syscall (netbsd-arm64-cgo), const EV_ADD = 1 +pkg syscall (netbsd-arm64-cgo), const EV_ADD ideal-int +pkg syscall (netbsd-arm64-cgo), const EV_CLEAR = 32 +pkg syscall (netbsd-arm64-cgo), const EV_CLEAR ideal-int +pkg syscall (netbsd-arm64-cgo), const EV_DELETE = 2 +pkg syscall (netbsd-arm64-cgo), const EV_DELETE ideal-int +pkg syscall (netbsd-arm64-cgo), const EV_DISABLE = 8 +pkg syscall (netbsd-arm64-cgo), const EV_DISABLE ideal-int +pkg syscall (netbsd-arm64-cgo), const EV_ENABLE = 4 +pkg syscall (netbsd-arm64-cgo), const EV_ENABLE ideal-int +pkg syscall (netbsd-arm64-cgo), const EV_EOF = 32768 +pkg syscall (netbsd-arm64-cgo), const EV_EOF ideal-int +pkg syscall (netbsd-arm64-cgo), const EV_ERROR = 16384 +pkg syscall (netbsd-arm64-cgo), const EV_ERROR ideal-int +pkg syscall (netbsd-arm64-cgo), const EV_FLAG1 = 8192 +pkg syscall (netbsd-arm64-cgo), const EV_FLAG1 ideal-int +pkg syscall (netbsd-arm64-cgo), const EV_ONESHOT = 16 +pkg syscall (netbsd-arm64-cgo), const EV_ONESHOT ideal-int +pkg syscall (netbsd-arm64-cgo), const EV_SYSFLAGS = 61440 +pkg syscall (netbsd-arm64-cgo), const EV_SYSFLAGS ideal-int +pkg syscall (netbsd-arm64-cgo), const EWOULDBLOCK = 35 +pkg syscall (netbsd-arm64-cgo), const EXDEV = 18 +pkg syscall (netbsd-arm64-cgo), const EXTA = 19200 +pkg syscall (netbsd-arm64-cgo), const EXTA ideal-int +pkg syscall (netbsd-arm64-cgo), const EXTB = 38400 +pkg syscall (netbsd-arm64-cgo), const EXTB ideal-int +pkg syscall (netbsd-arm64-cgo), const EXTPROC = 2048 +pkg syscall (netbsd-arm64-cgo), const EXTPROC ideal-int +pkg syscall (netbsd-arm64-cgo), const FD_CLOEXEC = 1 +pkg syscall (netbsd-arm64-cgo), const FD_CLOEXEC ideal-int +pkg syscall (netbsd-arm64-cgo), const FD_SETSIZE = 256 +pkg syscall (netbsd-arm64-cgo), const FD_SETSIZE ideal-int +pkg syscall (netbsd-arm64-cgo), const FLUSHO = 8388608 +pkg syscall (netbsd-arm64-cgo), const FLUSHO ideal-int +pkg syscall (netbsd-arm64-cgo), const F_CLOSEM = 10 +pkg syscall (netbsd-arm64-cgo), const F_CLOSEM ideal-int +pkg syscall (netbsd-arm64-cgo), const F_DUPFD = 0 +pkg syscall (netbsd-arm64-cgo), const F_DUPFD ideal-int +pkg syscall (netbsd-arm64-cgo), const F_DUPFD_CLOEXEC = 12 +pkg syscall (netbsd-arm64-cgo), const F_DUPFD_CLOEXEC ideal-int +pkg syscall (netbsd-arm64-cgo), const F_FSCTL = -2147483648 +pkg syscall (netbsd-arm64-cgo), const F_FSCTL ideal-int +pkg syscall (netbsd-arm64-cgo), const F_FSDIRMASK = 1879048192 +pkg syscall (netbsd-arm64-cgo), const F_FSDIRMASK ideal-int +pkg syscall (netbsd-arm64-cgo), const F_FSIN = 268435456 +pkg syscall (netbsd-arm64-cgo), const F_FSIN ideal-int +pkg syscall (netbsd-arm64-cgo), const F_FSINOUT = 805306368 +pkg syscall (netbsd-arm64-cgo), const F_FSINOUT ideal-int +pkg syscall (netbsd-arm64-cgo), const F_FSOUT = 536870912 +pkg syscall (netbsd-arm64-cgo), const F_FSOUT ideal-int +pkg syscall (netbsd-arm64-cgo), const F_FSPRIV = 32768 +pkg syscall (netbsd-arm64-cgo), const F_FSPRIV ideal-int +pkg syscall (netbsd-arm64-cgo), const F_FSVOID = 1073741824 +pkg syscall (netbsd-arm64-cgo), const F_FSVOID ideal-int +pkg syscall (netbsd-arm64-cgo), const F_GETFD = 1 +pkg syscall (netbsd-arm64-cgo), const F_GETFD ideal-int +pkg syscall (netbsd-arm64-cgo), const F_GETFL = 3 +pkg syscall (netbsd-arm64-cgo), const F_GETFL ideal-int +pkg syscall (netbsd-arm64-cgo), const F_GETLK = 7 +pkg syscall (netbsd-arm64-cgo), const F_GETLK ideal-int +pkg syscall (netbsd-arm64-cgo), const F_GETNOSIGPIPE = 13 +pkg syscall (netbsd-arm64-cgo), const F_GETNOSIGPIPE ideal-int +pkg syscall (netbsd-arm64-cgo), const F_GETOWN = 5 +pkg syscall (netbsd-arm64-cgo), const F_GETOWN ideal-int +pkg syscall (netbsd-arm64-cgo), const F_MAXFD = 11 +pkg syscall (netbsd-arm64-cgo), const F_MAXFD ideal-int +pkg syscall (netbsd-arm64-cgo), const F_OK = 0 +pkg syscall (netbsd-arm64-cgo), const F_OK ideal-int +pkg syscall (netbsd-arm64-cgo), const F_PARAM_MASK = 4095 +pkg syscall (netbsd-arm64-cgo), const F_PARAM_MASK ideal-int +pkg syscall (netbsd-arm64-cgo), const F_PARAM_MAX = 4095 +pkg syscall (netbsd-arm64-cgo), const F_PARAM_MAX ideal-int +pkg syscall (netbsd-arm64-cgo), const F_RDLCK = 1 +pkg syscall (netbsd-arm64-cgo), const F_RDLCK ideal-int +pkg syscall (netbsd-arm64-cgo), const F_SETFD = 2 +pkg syscall (netbsd-arm64-cgo), const F_SETFD ideal-int +pkg syscall (netbsd-arm64-cgo), const F_SETFL = 4 +pkg syscall (netbsd-arm64-cgo), const F_SETFL ideal-int +pkg syscall (netbsd-arm64-cgo), const F_SETLK = 8 +pkg syscall (netbsd-arm64-cgo), const F_SETLK ideal-int +pkg syscall (netbsd-arm64-cgo), const F_SETLKW = 9 +pkg syscall (netbsd-arm64-cgo), const F_SETLKW ideal-int +pkg syscall (netbsd-arm64-cgo), const F_SETNOSIGPIPE = 14 +pkg syscall (netbsd-arm64-cgo), const F_SETNOSIGPIPE ideal-int +pkg syscall (netbsd-arm64-cgo), const F_SETOWN = 6 +pkg syscall (netbsd-arm64-cgo), const F_SETOWN ideal-int +pkg syscall (netbsd-arm64-cgo), const F_UNLCK = 2 +pkg syscall (netbsd-arm64-cgo), const F_UNLCK ideal-int +pkg syscall (netbsd-arm64-cgo), const F_WRLCK = 3 +pkg syscall (netbsd-arm64-cgo), const F_WRLCK ideal-int +pkg syscall (netbsd-arm64-cgo), const HUPCL = 16384 +pkg syscall (netbsd-arm64-cgo), const HUPCL ideal-int +pkg syscall (netbsd-arm64-cgo), const ICANON = 256 +pkg syscall (netbsd-arm64-cgo), const ICANON ideal-int +pkg syscall (netbsd-arm64-cgo), const ICMP6_FILTER = 18 +pkg syscall (netbsd-arm64-cgo), const ICMP6_FILTER ideal-int +pkg syscall (netbsd-arm64-cgo), const ICRNL = 256 +pkg syscall (netbsd-arm64-cgo), const ICRNL ideal-int +pkg syscall (netbsd-arm64-cgo), const IEXTEN = 1024 +pkg syscall (netbsd-arm64-cgo), const IEXTEN ideal-int +pkg syscall (netbsd-arm64-cgo), const IFAN_ARRIVAL = 0 +pkg syscall (netbsd-arm64-cgo), const IFAN_ARRIVAL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFAN_DEPARTURE = 1 +pkg syscall (netbsd-arm64-cgo), const IFAN_DEPARTURE ideal-int +pkg syscall (netbsd-arm64-cgo), const IFA_ROUTE = 1 +pkg syscall (netbsd-arm64-cgo), const IFA_ROUTE ideal-int +pkg syscall (netbsd-arm64-cgo), const IFF_ALLMULTI = 512 +pkg syscall (netbsd-arm64-cgo), const IFF_ALLMULTI ideal-int +pkg syscall (netbsd-arm64-cgo), const IFF_CANTCHANGE = 36690 +pkg syscall (netbsd-arm64-cgo), const IFF_CANTCHANGE ideal-int +pkg syscall (netbsd-arm64-cgo), const IFF_DEBUG = 4 +pkg syscall (netbsd-arm64-cgo), const IFF_DEBUG ideal-int +pkg syscall (netbsd-arm64-cgo), const IFF_LINK0 = 4096 +pkg syscall (netbsd-arm64-cgo), const IFF_LINK0 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFF_LINK1 = 8192 +pkg syscall (netbsd-arm64-cgo), const IFF_LINK1 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFF_LINK2 = 16384 +pkg syscall (netbsd-arm64-cgo), const IFF_LINK2 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFF_LOOPBACK = 8 +pkg syscall (netbsd-arm64-cgo), const IFF_MULTICAST = 32768 +pkg syscall (netbsd-arm64-cgo), const IFF_NOARP = 128 +pkg syscall (netbsd-arm64-cgo), const IFF_NOARP ideal-int +pkg syscall (netbsd-arm64-cgo), const IFF_NOTRAILERS = 32 +pkg syscall (netbsd-arm64-cgo), const IFF_NOTRAILERS ideal-int +pkg syscall (netbsd-arm64-cgo), const IFF_OACTIVE = 1024 +pkg syscall (netbsd-arm64-cgo), const IFF_OACTIVE ideal-int +pkg syscall (netbsd-arm64-cgo), const IFF_POINTOPOINT = 16 +pkg syscall (netbsd-arm64-cgo), const IFF_POINTOPOINT ideal-int +pkg syscall (netbsd-arm64-cgo), const IFF_PROMISC = 256 +pkg syscall (netbsd-arm64-cgo), const IFF_PROMISC ideal-int +pkg syscall (netbsd-arm64-cgo), const IFF_RUNNING = 64 +pkg syscall (netbsd-arm64-cgo), const IFF_RUNNING ideal-int +pkg syscall (netbsd-arm64-cgo), const IFF_SIMPLEX = 2048 +pkg syscall (netbsd-arm64-cgo), const IFF_SIMPLEX ideal-int +pkg syscall (netbsd-arm64-cgo), const IFNAMSIZ = 16 +pkg syscall (netbsd-arm64-cgo), const IFNAMSIZ ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_1822 = 2 +pkg syscall (netbsd-arm64-cgo), const IFT_1822 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_A12MPPSWITCH = 130 +pkg syscall (netbsd-arm64-cgo), const IFT_A12MPPSWITCH ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_AAL2 = 187 +pkg syscall (netbsd-arm64-cgo), const IFT_AAL2 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_AAL5 = 49 +pkg syscall (netbsd-arm64-cgo), const IFT_AAL5 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ADSL = 94 +pkg syscall (netbsd-arm64-cgo), const IFT_ADSL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_AFLANE8023 = 59 +pkg syscall (netbsd-arm64-cgo), const IFT_AFLANE8023 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_AFLANE8025 = 60 +pkg syscall (netbsd-arm64-cgo), const IFT_AFLANE8025 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ARAP = 88 +pkg syscall (netbsd-arm64-cgo), const IFT_ARAP ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ARCNET = 35 +pkg syscall (netbsd-arm64-cgo), const IFT_ARCNET ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ARCNETPLUS = 36 +pkg syscall (netbsd-arm64-cgo), const IFT_ARCNETPLUS ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ASYNC = 84 +pkg syscall (netbsd-arm64-cgo), const IFT_ASYNC ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ATM = 37 +pkg syscall (netbsd-arm64-cgo), const IFT_ATM ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ATMDXI = 105 +pkg syscall (netbsd-arm64-cgo), const IFT_ATMDXI ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ATMFUNI = 106 +pkg syscall (netbsd-arm64-cgo), const IFT_ATMFUNI ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ATMIMA = 107 +pkg syscall (netbsd-arm64-cgo), const IFT_ATMIMA ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ATMLOGICAL = 80 +pkg syscall (netbsd-arm64-cgo), const IFT_ATMLOGICAL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ATMRADIO = 189 +pkg syscall (netbsd-arm64-cgo), const IFT_ATMRADIO ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ATMSUBINTERFACE = 134 +pkg syscall (netbsd-arm64-cgo), const IFT_ATMSUBINTERFACE ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ATMVCIENDPT = 194 +pkg syscall (netbsd-arm64-cgo), const IFT_ATMVCIENDPT ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ATMVIRTUAL = 149 +pkg syscall (netbsd-arm64-cgo), const IFT_ATMVIRTUAL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_BGPPOLICYACCOUNTING = 162 +pkg syscall (netbsd-arm64-cgo), const IFT_BGPPOLICYACCOUNTING ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_BRIDGE = 209 +pkg syscall (netbsd-arm64-cgo), const IFT_BRIDGE ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_BSC = 83 +pkg syscall (netbsd-arm64-cgo), const IFT_BSC ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_CARP = 248 +pkg syscall (netbsd-arm64-cgo), const IFT_CARP ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_CCTEMUL = 61 +pkg syscall (netbsd-arm64-cgo), const IFT_CCTEMUL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_CEPT = 19 +pkg syscall (netbsd-arm64-cgo), const IFT_CEPT ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_CES = 133 +pkg syscall (netbsd-arm64-cgo), const IFT_CES ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_CHANNEL = 70 +pkg syscall (netbsd-arm64-cgo), const IFT_CHANNEL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_CNR = 85 +pkg syscall (netbsd-arm64-cgo), const IFT_CNR ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_COFFEE = 132 +pkg syscall (netbsd-arm64-cgo), const IFT_COFFEE ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_COMPOSITELINK = 155 +pkg syscall (netbsd-arm64-cgo), const IFT_COMPOSITELINK ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_DCN = 141 +pkg syscall (netbsd-arm64-cgo), const IFT_DCN ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_DIGITALPOWERLINE = 138 +pkg syscall (netbsd-arm64-cgo), const IFT_DIGITALPOWERLINE ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_DIGITALWRAPPEROVERHEADCHANNEL = 186 +pkg syscall (netbsd-arm64-cgo), const IFT_DIGITALWRAPPEROVERHEADCHANNEL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_DLSW = 74 +pkg syscall (netbsd-arm64-cgo), const IFT_DLSW ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_DOCSCABLEDOWNSTREAM = 128 +pkg syscall (netbsd-arm64-cgo), const IFT_DOCSCABLEDOWNSTREAM ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_DOCSCABLEMACLAYER = 127 +pkg syscall (netbsd-arm64-cgo), const IFT_DOCSCABLEMACLAYER ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_DOCSCABLEUPSTREAM = 129 +pkg syscall (netbsd-arm64-cgo), const IFT_DOCSCABLEUPSTREAM ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_DOCSCABLEUPSTREAMCHANNEL = 205 +pkg syscall (netbsd-arm64-cgo), const IFT_DOCSCABLEUPSTREAMCHANNEL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_DS0 = 81 +pkg syscall (netbsd-arm64-cgo), const IFT_DS0 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_DS0BUNDLE = 82 +pkg syscall (netbsd-arm64-cgo), const IFT_DS0BUNDLE ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_DS1FDL = 170 +pkg syscall (netbsd-arm64-cgo), const IFT_DS1FDL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_DS3 = 30 +pkg syscall (netbsd-arm64-cgo), const IFT_DS3 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_DTM = 140 +pkg syscall (netbsd-arm64-cgo), const IFT_DTM ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_DVBASILN = 172 +pkg syscall (netbsd-arm64-cgo), const IFT_DVBASILN ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_DVBASIOUT = 173 +pkg syscall (netbsd-arm64-cgo), const IFT_DVBASIOUT ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_DVBRCCDOWNSTREAM = 147 +pkg syscall (netbsd-arm64-cgo), const IFT_DVBRCCDOWNSTREAM ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_DVBRCCMACLAYER = 146 +pkg syscall (netbsd-arm64-cgo), const IFT_DVBRCCMACLAYER ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_DVBRCCUPSTREAM = 148 +pkg syscall (netbsd-arm64-cgo), const IFT_DVBRCCUPSTREAM ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ECONET = 206 +pkg syscall (netbsd-arm64-cgo), const IFT_ECONET ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_EON = 25 +pkg syscall (netbsd-arm64-cgo), const IFT_EON ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_EPLRS = 87 +pkg syscall (netbsd-arm64-cgo), const IFT_EPLRS ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ESCON = 73 +pkg syscall (netbsd-arm64-cgo), const IFT_ESCON ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ETHER = 6 +pkg syscall (netbsd-arm64-cgo), const IFT_ETHER ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_FAITH = 242 +pkg syscall (netbsd-arm64-cgo), const IFT_FAITH ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_FAST = 125 +pkg syscall (netbsd-arm64-cgo), const IFT_FAST ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_FASTETHER = 62 +pkg syscall (netbsd-arm64-cgo), const IFT_FASTETHER ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_FASTETHERFX = 69 +pkg syscall (netbsd-arm64-cgo), const IFT_FASTETHERFX ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_FDDI = 15 +pkg syscall (netbsd-arm64-cgo), const IFT_FDDI ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_FIBRECHANNEL = 56 +pkg syscall (netbsd-arm64-cgo), const IFT_FIBRECHANNEL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_FRAMERELAYINTERCONNECT = 58 +pkg syscall (netbsd-arm64-cgo), const IFT_FRAMERELAYINTERCONNECT ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_FRAMERELAYMPI = 92 +pkg syscall (netbsd-arm64-cgo), const IFT_FRAMERELAYMPI ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_FRDLCIENDPT = 193 +pkg syscall (netbsd-arm64-cgo), const IFT_FRDLCIENDPT ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_FRELAY = 32 +pkg syscall (netbsd-arm64-cgo), const IFT_FRELAY ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_FRELAYDCE = 44 +pkg syscall (netbsd-arm64-cgo), const IFT_FRELAYDCE ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_FRF16MFRBUNDLE = 163 +pkg syscall (netbsd-arm64-cgo), const IFT_FRF16MFRBUNDLE ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_FRFORWARD = 158 +pkg syscall (netbsd-arm64-cgo), const IFT_FRFORWARD ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_G703AT2MB = 67 +pkg syscall (netbsd-arm64-cgo), const IFT_G703AT2MB ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_G703AT64K = 66 +pkg syscall (netbsd-arm64-cgo), const IFT_G703AT64K ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_GIF = 240 +pkg syscall (netbsd-arm64-cgo), const IFT_GIF ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_GIGABITETHERNET = 117 +pkg syscall (netbsd-arm64-cgo), const IFT_GIGABITETHERNET ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_GR303IDT = 178 +pkg syscall (netbsd-arm64-cgo), const IFT_GR303IDT ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_GR303RDT = 177 +pkg syscall (netbsd-arm64-cgo), const IFT_GR303RDT ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_H323GATEKEEPER = 164 +pkg syscall (netbsd-arm64-cgo), const IFT_H323GATEKEEPER ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_H323PROXY = 165 +pkg syscall (netbsd-arm64-cgo), const IFT_H323PROXY ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_HDH1822 = 3 +pkg syscall (netbsd-arm64-cgo), const IFT_HDH1822 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_HDLC = 118 +pkg syscall (netbsd-arm64-cgo), const IFT_HDLC ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_HDSL2 = 168 +pkg syscall (netbsd-arm64-cgo), const IFT_HDSL2 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_HIPERLAN2 = 183 +pkg syscall (netbsd-arm64-cgo), const IFT_HIPERLAN2 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_HIPPI = 47 +pkg syscall (netbsd-arm64-cgo), const IFT_HIPPI ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_HIPPIINTERFACE = 57 +pkg syscall (netbsd-arm64-cgo), const IFT_HIPPIINTERFACE ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_HOSTPAD = 90 +pkg syscall (netbsd-arm64-cgo), const IFT_HOSTPAD ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_HSSI = 46 +pkg syscall (netbsd-arm64-cgo), const IFT_HSSI ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_HY = 14 +pkg syscall (netbsd-arm64-cgo), const IFT_HY ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_IBM370PARCHAN = 72 +pkg syscall (netbsd-arm64-cgo), const IFT_IBM370PARCHAN ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_IDSL = 154 +pkg syscall (netbsd-arm64-cgo), const IFT_IDSL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_IEEE1394 = 144 +pkg syscall (netbsd-arm64-cgo), const IFT_IEEE1394 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_IEEE80211 = 71 +pkg syscall (netbsd-arm64-cgo), const IFT_IEEE80211 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_IEEE80212 = 55 +pkg syscall (netbsd-arm64-cgo), const IFT_IEEE80212 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_IEEE8023ADLAG = 161 +pkg syscall (netbsd-arm64-cgo), const IFT_IEEE8023ADLAG ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_IFGSN = 145 +pkg syscall (netbsd-arm64-cgo), const IFT_IFGSN ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_IMT = 190 +pkg syscall (netbsd-arm64-cgo), const IFT_IMT ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_INFINIBAND = 199 +pkg syscall (netbsd-arm64-cgo), const IFT_INFINIBAND ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_INTERLEAVE = 124 +pkg syscall (netbsd-arm64-cgo), const IFT_INTERLEAVE ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_IP = 126 +pkg syscall (netbsd-arm64-cgo), const IFT_IP ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_IPFORWARD = 142 +pkg syscall (netbsd-arm64-cgo), const IFT_IPFORWARD ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_IPOVERATM = 114 +pkg syscall (netbsd-arm64-cgo), const IFT_IPOVERATM ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_IPOVERCDLC = 109 +pkg syscall (netbsd-arm64-cgo), const IFT_IPOVERCDLC ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_IPOVERCLAW = 110 +pkg syscall (netbsd-arm64-cgo), const IFT_IPOVERCLAW ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_IPSWITCH = 78 +pkg syscall (netbsd-arm64-cgo), const IFT_IPSWITCH ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ISDN = 63 +pkg syscall (netbsd-arm64-cgo), const IFT_ISDN ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ISDNBASIC = 20 +pkg syscall (netbsd-arm64-cgo), const IFT_ISDNBASIC ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ISDNPRIMARY = 21 +pkg syscall (netbsd-arm64-cgo), const IFT_ISDNPRIMARY ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ISDNS = 75 +pkg syscall (netbsd-arm64-cgo), const IFT_ISDNS ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ISDNU = 76 +pkg syscall (netbsd-arm64-cgo), const IFT_ISDNU ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ISO88022LLC = 41 +pkg syscall (netbsd-arm64-cgo), const IFT_ISO88022LLC ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ISO88023 = 7 +pkg syscall (netbsd-arm64-cgo), const IFT_ISO88023 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ISO88024 = 8 +pkg syscall (netbsd-arm64-cgo), const IFT_ISO88024 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ISO88025 = 9 +pkg syscall (netbsd-arm64-cgo), const IFT_ISO88025 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ISO88025CRFPINT = 98 +pkg syscall (netbsd-arm64-cgo), const IFT_ISO88025CRFPINT ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ISO88025DTR = 86 +pkg syscall (netbsd-arm64-cgo), const IFT_ISO88025DTR ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ISO88025FIBER = 115 +pkg syscall (netbsd-arm64-cgo), const IFT_ISO88025FIBER ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ISO88026 = 10 +pkg syscall (netbsd-arm64-cgo), const IFT_ISO88026 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ISUP = 179 +pkg syscall (netbsd-arm64-cgo), const IFT_ISUP ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_L2VLAN = 135 +pkg syscall (netbsd-arm64-cgo), const IFT_L2VLAN ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_L3IPVLAN = 136 +pkg syscall (netbsd-arm64-cgo), const IFT_L3IPVLAN ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_L3IPXVLAN = 137 +pkg syscall (netbsd-arm64-cgo), const IFT_L3IPXVLAN ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_LAPB = 16 +pkg syscall (netbsd-arm64-cgo), const IFT_LAPB ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_LAPD = 77 +pkg syscall (netbsd-arm64-cgo), const IFT_LAPD ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_LAPF = 119 +pkg syscall (netbsd-arm64-cgo), const IFT_LAPF ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_LINEGROUP = 210 +pkg syscall (netbsd-arm64-cgo), const IFT_LINEGROUP ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_LOCALTALK = 42 +pkg syscall (netbsd-arm64-cgo), const IFT_LOCALTALK ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_LOOP = 24 +pkg syscall (netbsd-arm64-cgo), const IFT_LOOP ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_MEDIAMAILOVERIP = 139 +pkg syscall (netbsd-arm64-cgo), const IFT_MEDIAMAILOVERIP ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_MFSIGLINK = 167 +pkg syscall (netbsd-arm64-cgo), const IFT_MFSIGLINK ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_MIOX25 = 38 +pkg syscall (netbsd-arm64-cgo), const IFT_MIOX25 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_MODEM = 48 +pkg syscall (netbsd-arm64-cgo), const IFT_MODEM ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_MPC = 113 +pkg syscall (netbsd-arm64-cgo), const IFT_MPC ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_MPLS = 166 +pkg syscall (netbsd-arm64-cgo), const IFT_MPLS ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_MPLSTUNNEL = 150 +pkg syscall (netbsd-arm64-cgo), const IFT_MPLSTUNNEL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_MSDSL = 143 +pkg syscall (netbsd-arm64-cgo), const IFT_MSDSL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_MVL = 191 +pkg syscall (netbsd-arm64-cgo), const IFT_MVL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_MYRINET = 99 +pkg syscall (netbsd-arm64-cgo), const IFT_MYRINET ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_NFAS = 175 +pkg syscall (netbsd-arm64-cgo), const IFT_NFAS ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_NSIP = 27 +pkg syscall (netbsd-arm64-cgo), const IFT_NSIP ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_OPTICALCHANNEL = 195 +pkg syscall (netbsd-arm64-cgo), const IFT_OPTICALCHANNEL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_OPTICALTRANSPORT = 196 +pkg syscall (netbsd-arm64-cgo), const IFT_OPTICALTRANSPORT ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_OTHER = 1 +pkg syscall (netbsd-arm64-cgo), const IFT_OTHER ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_P10 = 12 +pkg syscall (netbsd-arm64-cgo), const IFT_P10 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_P80 = 13 +pkg syscall (netbsd-arm64-cgo), const IFT_P80 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_PARA = 34 +pkg syscall (netbsd-arm64-cgo), const IFT_PARA ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_PFLOG = 245 +pkg syscall (netbsd-arm64-cgo), const IFT_PFLOG ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_PFSYNC = 246 +pkg syscall (netbsd-arm64-cgo), const IFT_PFSYNC ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_PLC = 174 +pkg syscall (netbsd-arm64-cgo), const IFT_PLC ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_PON155 = 207 +pkg syscall (netbsd-arm64-cgo), const IFT_PON155 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_PON622 = 208 +pkg syscall (netbsd-arm64-cgo), const IFT_PON622 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_POS = 171 +pkg syscall (netbsd-arm64-cgo), const IFT_POS ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_PPP = 23 +pkg syscall (netbsd-arm64-cgo), const IFT_PPP ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_PPPMULTILINKBUNDLE = 108 +pkg syscall (netbsd-arm64-cgo), const IFT_PPPMULTILINKBUNDLE ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_PROPATM = 197 +pkg syscall (netbsd-arm64-cgo), const IFT_PROPATM ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_PROPBWAP2MP = 184 +pkg syscall (netbsd-arm64-cgo), const IFT_PROPBWAP2MP ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_PROPCNLS = 89 +pkg syscall (netbsd-arm64-cgo), const IFT_PROPCNLS ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_PROPDOCSWIRELESSDOWNSTREAM = 181 +pkg syscall (netbsd-arm64-cgo), const IFT_PROPDOCSWIRELESSDOWNSTREAM ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_PROPDOCSWIRELESSMACLAYER = 180 +pkg syscall (netbsd-arm64-cgo), const IFT_PROPDOCSWIRELESSMACLAYER ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_PROPDOCSWIRELESSUPSTREAM = 182 +pkg syscall (netbsd-arm64-cgo), const IFT_PROPDOCSWIRELESSUPSTREAM ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_PROPMUX = 54 +pkg syscall (netbsd-arm64-cgo), const IFT_PROPMUX ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_PROPVIRTUAL = 53 +pkg syscall (netbsd-arm64-cgo), const IFT_PROPVIRTUAL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_PROPWIRELESSP2P = 157 +pkg syscall (netbsd-arm64-cgo), const IFT_PROPWIRELESSP2P ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_PTPSERIAL = 22 +pkg syscall (netbsd-arm64-cgo), const IFT_PTPSERIAL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_PVC = 241 +pkg syscall (netbsd-arm64-cgo), const IFT_PVC ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_Q2931 = 201 +pkg syscall (netbsd-arm64-cgo), const IFT_Q2931 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_QLLC = 68 +pkg syscall (netbsd-arm64-cgo), const IFT_QLLC ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_RADIOMAC = 188 +pkg syscall (netbsd-arm64-cgo), const IFT_RADIOMAC ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_RADSL = 95 +pkg syscall (netbsd-arm64-cgo), const IFT_RADSL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_REACHDSL = 192 +pkg syscall (netbsd-arm64-cgo), const IFT_REACHDSL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_RFC1483 = 159 +pkg syscall (netbsd-arm64-cgo), const IFT_RFC1483 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_RS232 = 33 +pkg syscall (netbsd-arm64-cgo), const IFT_RS232 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_RSRB = 79 +pkg syscall (netbsd-arm64-cgo), const IFT_RSRB ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_SDLC = 17 +pkg syscall (netbsd-arm64-cgo), const IFT_SDLC ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_SDSL = 96 +pkg syscall (netbsd-arm64-cgo), const IFT_SDSL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_SHDSL = 169 +pkg syscall (netbsd-arm64-cgo), const IFT_SHDSL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_SIP = 31 +pkg syscall (netbsd-arm64-cgo), const IFT_SIP ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_SIPSIG = 204 +pkg syscall (netbsd-arm64-cgo), const IFT_SIPSIG ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_SIPTG = 203 +pkg syscall (netbsd-arm64-cgo), const IFT_SIPTG ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_SLIP = 28 +pkg syscall (netbsd-arm64-cgo), const IFT_SLIP ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_SMDSDXI = 43 +pkg syscall (netbsd-arm64-cgo), const IFT_SMDSDXI ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_SMDSICIP = 52 +pkg syscall (netbsd-arm64-cgo), const IFT_SMDSICIP ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_SONET = 39 +pkg syscall (netbsd-arm64-cgo), const IFT_SONET ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_SONETOVERHEADCHANNEL = 185 +pkg syscall (netbsd-arm64-cgo), const IFT_SONETOVERHEADCHANNEL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_SONETPATH = 50 +pkg syscall (netbsd-arm64-cgo), const IFT_SONETPATH ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_SONETVT = 51 +pkg syscall (netbsd-arm64-cgo), const IFT_SONETVT ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_SRP = 151 +pkg syscall (netbsd-arm64-cgo), const IFT_SRP ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_SS7SIGLINK = 156 +pkg syscall (netbsd-arm64-cgo), const IFT_SS7SIGLINK ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_STACKTOSTACK = 111 +pkg syscall (netbsd-arm64-cgo), const IFT_STACKTOSTACK ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_STARLAN = 11 +pkg syscall (netbsd-arm64-cgo), const IFT_STARLAN ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_STF = 215 +pkg syscall (netbsd-arm64-cgo), const IFT_STF ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_T1 = 18 +pkg syscall (netbsd-arm64-cgo), const IFT_T1 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_TDLC = 116 +pkg syscall (netbsd-arm64-cgo), const IFT_TDLC ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_TELINK = 200 +pkg syscall (netbsd-arm64-cgo), const IFT_TELINK ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_TERMPAD = 91 +pkg syscall (netbsd-arm64-cgo), const IFT_TERMPAD ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_TR008 = 176 +pkg syscall (netbsd-arm64-cgo), const IFT_TR008 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_TRANSPHDLC = 123 +pkg syscall (netbsd-arm64-cgo), const IFT_TRANSPHDLC ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_TUNNEL = 131 +pkg syscall (netbsd-arm64-cgo), const IFT_TUNNEL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_ULTRA = 29 +pkg syscall (netbsd-arm64-cgo), const IFT_ULTRA ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_USB = 160 +pkg syscall (netbsd-arm64-cgo), const IFT_USB ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_V11 = 64 +pkg syscall (netbsd-arm64-cgo), const IFT_V11 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_V35 = 45 +pkg syscall (netbsd-arm64-cgo), const IFT_V35 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_V36 = 65 +pkg syscall (netbsd-arm64-cgo), const IFT_V36 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_V37 = 120 +pkg syscall (netbsd-arm64-cgo), const IFT_V37 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_VDSL = 97 +pkg syscall (netbsd-arm64-cgo), const IFT_VDSL ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_VIRTUALIPADDRESS = 112 +pkg syscall (netbsd-arm64-cgo), const IFT_VIRTUALIPADDRESS ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_VIRTUALTG = 202 +pkg syscall (netbsd-arm64-cgo), const IFT_VIRTUALTG ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEDID = 213 +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEDID ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEEM = 100 +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEEM ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEEMFGD = 211 +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEEMFGD ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEENCAP = 103 +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEENCAP ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEFGDEANA = 212 +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEFGDEANA ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEFXO = 101 +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEFXO ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEFXS = 102 +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEFXS ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEOVERATM = 152 +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEOVERATM ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEOVERCABLE = 198 +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEOVERCABLE ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEOVERFRAMERELAY = 153 +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEOVERFRAMERELAY ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEOVERIP = 104 +pkg syscall (netbsd-arm64-cgo), const IFT_VOICEOVERIP ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_X213 = 93 +pkg syscall (netbsd-arm64-cgo), const IFT_X213 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_X25 = 5 +pkg syscall (netbsd-arm64-cgo), const IFT_X25 ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_X25DDN = 4 +pkg syscall (netbsd-arm64-cgo), const IFT_X25DDN ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_X25HUNTGROUP = 122 +pkg syscall (netbsd-arm64-cgo), const IFT_X25HUNTGROUP ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_X25MLP = 121 +pkg syscall (netbsd-arm64-cgo), const IFT_X25MLP ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_X25PLE = 40 +pkg syscall (netbsd-arm64-cgo), const IFT_X25PLE ideal-int +pkg syscall (netbsd-arm64-cgo), const IFT_XETHER = 26 +pkg syscall (netbsd-arm64-cgo), const IFT_XETHER ideal-int +pkg syscall (netbsd-arm64-cgo), const IGNBRK = 1 +pkg syscall (netbsd-arm64-cgo), const IGNBRK ideal-int +pkg syscall (netbsd-arm64-cgo), const IGNCR = 128 +pkg syscall (netbsd-arm64-cgo), const IGNCR ideal-int +pkg syscall (netbsd-arm64-cgo), const IGNPAR = 4 +pkg syscall (netbsd-arm64-cgo), const IGNPAR ideal-int +pkg syscall (netbsd-arm64-cgo), const IMAXBEL = 8192 +pkg syscall (netbsd-arm64-cgo), const IMAXBEL ideal-int +pkg syscall (netbsd-arm64-cgo), const INLCR = 64 +pkg syscall (netbsd-arm64-cgo), const INLCR ideal-int +pkg syscall (netbsd-arm64-cgo), const INPCK = 16 +pkg syscall (netbsd-arm64-cgo), const INPCK ideal-int +pkg syscall (netbsd-arm64-cgo), const IN_CLASSA_HOST = 16777215 +pkg syscall (netbsd-arm64-cgo), const IN_CLASSA_HOST ideal-int +pkg syscall (netbsd-arm64-cgo), const IN_CLASSA_MAX = 128 +pkg syscall (netbsd-arm64-cgo), const IN_CLASSA_MAX ideal-int +pkg syscall (netbsd-arm64-cgo), const IN_CLASSA_NET = 4278190080 +pkg syscall (netbsd-arm64-cgo), const IN_CLASSA_NET ideal-int +pkg syscall (netbsd-arm64-cgo), const IN_CLASSA_NSHIFT = 24 +pkg syscall (netbsd-arm64-cgo), const IN_CLASSA_NSHIFT ideal-int +pkg syscall (netbsd-arm64-cgo), const IN_CLASSB_HOST = 65535 +pkg syscall (netbsd-arm64-cgo), const IN_CLASSB_HOST ideal-int +pkg syscall (netbsd-arm64-cgo), const IN_CLASSB_MAX = 65536 +pkg syscall (netbsd-arm64-cgo), const IN_CLASSB_MAX ideal-int +pkg syscall (netbsd-arm64-cgo), const IN_CLASSB_NET = 4294901760 +pkg syscall (netbsd-arm64-cgo), const IN_CLASSB_NET ideal-int +pkg syscall (netbsd-arm64-cgo), const IN_CLASSB_NSHIFT = 16 +pkg syscall (netbsd-arm64-cgo), const IN_CLASSB_NSHIFT ideal-int +pkg syscall (netbsd-arm64-cgo), const IN_CLASSC_HOST = 255 +pkg syscall (netbsd-arm64-cgo), const IN_CLASSC_HOST ideal-int +pkg syscall (netbsd-arm64-cgo), const IN_CLASSC_NET = 4294967040 +pkg syscall (netbsd-arm64-cgo), const IN_CLASSC_NET ideal-int +pkg syscall (netbsd-arm64-cgo), const IN_CLASSC_NSHIFT = 8 +pkg syscall (netbsd-arm64-cgo), const IN_CLASSC_NSHIFT ideal-int +pkg syscall (netbsd-arm64-cgo), const IN_CLASSD_HOST = 268435455 +pkg syscall (netbsd-arm64-cgo), const IN_CLASSD_HOST ideal-int +pkg syscall (netbsd-arm64-cgo), const IN_CLASSD_NET = 4026531840 +pkg syscall (netbsd-arm64-cgo), const IN_CLASSD_NET ideal-int +pkg syscall (netbsd-arm64-cgo), const IN_CLASSD_NSHIFT = 28 +pkg syscall (netbsd-arm64-cgo), const IN_CLASSD_NSHIFT ideal-int +pkg syscall (netbsd-arm64-cgo), const IN_LOOPBACKNET = 127 +pkg syscall (netbsd-arm64-cgo), const IN_LOOPBACKNET ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_AH = 51 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_AH ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_CARP = 112 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_CARP ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_DONE = 257 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_DONE ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_DSTOPTS = 60 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_DSTOPTS ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_EGP = 8 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_EGP ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_ENCAP = 98 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_ENCAP ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_EON = 80 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_EON ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_ESP = 50 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_ESP ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_ETHERIP = 97 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_ETHERIP ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_FRAGMENT = 44 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_FRAGMENT ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_GGP = 3 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_GGP ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_GRE = 47 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_GRE ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_HOPOPTS = 0 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_HOPOPTS ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_ICMP = 1 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_ICMP ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_ICMPV6 = 58 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_ICMPV6 ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_IDP = 22 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_IDP ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_IGMP = 2 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_IGMP ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_IPCOMP = 108 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_IPCOMP ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_IPIP = 4 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_IPIP ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_IPV4 = 4 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_IPV4 ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_IPV6_ICMP = 58 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_IPV6_ICMP ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_MAX = 256 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_MAX ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_MAXID = 52 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_MAXID ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_MOBILE = 55 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_MOBILE ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_NONE = 59 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_NONE ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_PFSYNC = 240 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_PFSYNC ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_PIM = 103 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_PIM ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_PUP = 12 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_PUP ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_RAW = 255 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_RAW ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_ROUTING = 43 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_ROUTING ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_RSVP = 46 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_RSVP ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_TP = 29 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_TP ideal-int +pkg syscall (netbsd-arm64-cgo), const IPPROTO_VRRP = 112 +pkg syscall (netbsd-arm64-cgo), const IPPROTO_VRRP ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_CHECKSUM = 26 +pkg syscall (netbsd-arm64-cgo), const IPV6_CHECKSUM ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_DEFAULT_MULTICAST_HOPS = 1 +pkg syscall (netbsd-arm64-cgo), const IPV6_DEFAULT_MULTICAST_HOPS ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_DEFAULT_MULTICAST_LOOP = 1 +pkg syscall (netbsd-arm64-cgo), const IPV6_DEFAULT_MULTICAST_LOOP ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_DEFHLIM = 64 +pkg syscall (netbsd-arm64-cgo), const IPV6_DEFHLIM ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_DONTFRAG = 62 +pkg syscall (netbsd-arm64-cgo), const IPV6_DONTFRAG ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_DSTOPTS = 50 +pkg syscall (netbsd-arm64-cgo), const IPV6_DSTOPTS ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_FAITH = 29 +pkg syscall (netbsd-arm64-cgo), const IPV6_FAITH ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_FLOWINFO_MASK = 4294967055 +pkg syscall (netbsd-arm64-cgo), const IPV6_FLOWINFO_MASK ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_FLOWLABEL_MASK = 4294905600 +pkg syscall (netbsd-arm64-cgo), const IPV6_FLOWLABEL_MASK ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_FRAGTTL = 120 +pkg syscall (netbsd-arm64-cgo), const IPV6_FRAGTTL ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_HLIMDEC = 1 +pkg syscall (netbsd-arm64-cgo), const IPV6_HLIMDEC ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_HOPLIMIT = 47 +pkg syscall (netbsd-arm64-cgo), const IPV6_HOPLIMIT ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_HOPOPTS = 49 +pkg syscall (netbsd-arm64-cgo), const IPV6_HOPOPTS ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_IPSEC_POLICY = 28 +pkg syscall (netbsd-arm64-cgo), const IPV6_IPSEC_POLICY ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_JOIN_GROUP = 12 +pkg syscall (netbsd-arm64-cgo), const IPV6_LEAVE_GROUP = 13 +pkg syscall (netbsd-arm64-cgo), const IPV6_MAXHLIM = 255 +pkg syscall (netbsd-arm64-cgo), const IPV6_MAXHLIM ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_MAXPACKET = 65535 +pkg syscall (netbsd-arm64-cgo), const IPV6_MAXPACKET ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_MMTU = 1280 +pkg syscall (netbsd-arm64-cgo), const IPV6_MMTU ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_MULTICAST_HOPS = 10 +pkg syscall (netbsd-arm64-cgo), const IPV6_MULTICAST_IF = 9 +pkg syscall (netbsd-arm64-cgo), const IPV6_MULTICAST_LOOP = 11 +pkg syscall (netbsd-arm64-cgo), const IPV6_NEXTHOP = 48 +pkg syscall (netbsd-arm64-cgo), const IPV6_NEXTHOP ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_PATHMTU = 44 +pkg syscall (netbsd-arm64-cgo), const IPV6_PATHMTU ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_PKTINFO = 46 +pkg syscall (netbsd-arm64-cgo), const IPV6_PKTINFO ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_PORTRANGE = 14 +pkg syscall (netbsd-arm64-cgo), const IPV6_PORTRANGE ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_PORTRANGE_DEFAULT = 0 +pkg syscall (netbsd-arm64-cgo), const IPV6_PORTRANGE_DEFAULT ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_PORTRANGE_HIGH = 1 +pkg syscall (netbsd-arm64-cgo), const IPV6_PORTRANGE_HIGH ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_PORTRANGE_LOW = 2 +pkg syscall (netbsd-arm64-cgo), const IPV6_PORTRANGE_LOW ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_RECVDSTOPTS = 40 +pkg syscall (netbsd-arm64-cgo), const IPV6_RECVDSTOPTS ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_RECVHOPLIMIT = 37 +pkg syscall (netbsd-arm64-cgo), const IPV6_RECVHOPLIMIT ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_RECVHOPOPTS = 39 +pkg syscall (netbsd-arm64-cgo), const IPV6_RECVHOPOPTS ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_RECVPATHMTU = 43 +pkg syscall (netbsd-arm64-cgo), const IPV6_RECVPATHMTU ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_RECVPKTINFO = 36 +pkg syscall (netbsd-arm64-cgo), const IPV6_RECVPKTINFO ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_RECVRTHDR = 38 +pkg syscall (netbsd-arm64-cgo), const IPV6_RECVRTHDR ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_RECVTCLASS = 57 +pkg syscall (netbsd-arm64-cgo), const IPV6_RECVTCLASS ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_RTHDR = 51 +pkg syscall (netbsd-arm64-cgo), const IPV6_RTHDR ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_RTHDRDSTOPTS = 35 +pkg syscall (netbsd-arm64-cgo), const IPV6_RTHDRDSTOPTS ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_RTHDR_LOOSE = 0 +pkg syscall (netbsd-arm64-cgo), const IPV6_RTHDR_LOOSE ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_RTHDR_STRICT = 1 +pkg syscall (netbsd-arm64-cgo), const IPV6_RTHDR_STRICT ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_RTHDR_TYPE_0 = 0 +pkg syscall (netbsd-arm64-cgo), const IPV6_RTHDR_TYPE_0 ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_SOCKOPT_RESERVED1 = 3 +pkg syscall (netbsd-arm64-cgo), const IPV6_SOCKOPT_RESERVED1 ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_TCLASS = 61 +pkg syscall (netbsd-arm64-cgo), const IPV6_TCLASS ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_UNICAST_HOPS = 4 +pkg syscall (netbsd-arm64-cgo), const IPV6_USE_MIN_MTU = 42 +pkg syscall (netbsd-arm64-cgo), const IPV6_USE_MIN_MTU ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_V6ONLY = 27 +pkg syscall (netbsd-arm64-cgo), const IPV6_VERSION = 96 +pkg syscall (netbsd-arm64-cgo), const IPV6_VERSION ideal-int +pkg syscall (netbsd-arm64-cgo), const IPV6_VERSION_MASK = 240 +pkg syscall (netbsd-arm64-cgo), const IPV6_VERSION_MASK ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_ADD_MEMBERSHIP = 12 +pkg syscall (netbsd-arm64-cgo), const IP_DEFAULT_MULTICAST_LOOP = 1 +pkg syscall (netbsd-arm64-cgo), const IP_DEFAULT_MULTICAST_LOOP ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_DEFAULT_MULTICAST_TTL = 1 +pkg syscall (netbsd-arm64-cgo), const IP_DEFAULT_MULTICAST_TTL ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_DF = 16384 +pkg syscall (netbsd-arm64-cgo), const IP_DF ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_DROP_MEMBERSHIP = 13 +pkg syscall (netbsd-arm64-cgo), const IP_EF = 32768 +pkg syscall (netbsd-arm64-cgo), const IP_EF ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_ERRORMTU = 21 +pkg syscall (netbsd-arm64-cgo), const IP_ERRORMTU ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_HDRINCL = 2 +pkg syscall (netbsd-arm64-cgo), const IP_HDRINCL ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_IPSEC_POLICY = 22 +pkg syscall (netbsd-arm64-cgo), const IP_IPSEC_POLICY ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_MAXPACKET = 65535 +pkg syscall (netbsd-arm64-cgo), const IP_MAXPACKET ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_MAX_MEMBERSHIPS = 20 +pkg syscall (netbsd-arm64-cgo), const IP_MAX_MEMBERSHIPS ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_MF = 8192 +pkg syscall (netbsd-arm64-cgo), const IP_MF ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_MINFRAGSIZE = 69 +pkg syscall (netbsd-arm64-cgo), const IP_MINFRAGSIZE ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_MINTTL = 24 +pkg syscall (netbsd-arm64-cgo), const IP_MINTTL ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_MSS = 576 +pkg syscall (netbsd-arm64-cgo), const IP_MSS ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_MULTICAST_IF = 9 +pkg syscall (netbsd-arm64-cgo), const IP_MULTICAST_LOOP = 11 +pkg syscall (netbsd-arm64-cgo), const IP_MULTICAST_TTL = 10 +pkg syscall (netbsd-arm64-cgo), const IP_OFFMASK = 8191 +pkg syscall (netbsd-arm64-cgo), const IP_OFFMASK ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_OPTIONS = 1 +pkg syscall (netbsd-arm64-cgo), const IP_OPTIONS ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_PORTRANGE = 19 +pkg syscall (netbsd-arm64-cgo), const IP_PORTRANGE ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_PORTRANGE_DEFAULT = 0 +pkg syscall (netbsd-arm64-cgo), const IP_PORTRANGE_DEFAULT ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_PORTRANGE_HIGH = 1 +pkg syscall (netbsd-arm64-cgo), const IP_PORTRANGE_HIGH ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_PORTRANGE_LOW = 2 +pkg syscall (netbsd-arm64-cgo), const IP_PORTRANGE_LOW ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_RECVDSTADDR = 7 +pkg syscall (netbsd-arm64-cgo), const IP_RECVDSTADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_RECVIF = 20 +pkg syscall (netbsd-arm64-cgo), const IP_RECVIF ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_RECVOPTS = 5 +pkg syscall (netbsd-arm64-cgo), const IP_RECVOPTS ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_RECVRETOPTS = 6 +pkg syscall (netbsd-arm64-cgo), const IP_RECVRETOPTS ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_RECVTTL = 23 +pkg syscall (netbsd-arm64-cgo), const IP_RECVTTL ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_RETOPTS = 8 +pkg syscall (netbsd-arm64-cgo), const IP_RETOPTS ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_RF = 32768 +pkg syscall (netbsd-arm64-cgo), const IP_RF ideal-int +pkg syscall (netbsd-arm64-cgo), const IP_TOS = 3 +pkg syscall (netbsd-arm64-cgo), const IP_TTL = 4 +pkg syscall (netbsd-arm64-cgo), const ISIG = 128 +pkg syscall (netbsd-arm64-cgo), const ISIG ideal-int +pkg syscall (netbsd-arm64-cgo), const ISTRIP = 32 +pkg syscall (netbsd-arm64-cgo), const ISTRIP ideal-int +pkg syscall (netbsd-arm64-cgo), const IXANY = 2048 +pkg syscall (netbsd-arm64-cgo), const IXANY ideal-int +pkg syscall (netbsd-arm64-cgo), const IXOFF = 1024 +pkg syscall (netbsd-arm64-cgo), const IXOFF ideal-int +pkg syscall (netbsd-arm64-cgo), const IXON = 512 +pkg syscall (netbsd-arm64-cgo), const IXON ideal-int +pkg syscall (netbsd-arm64-cgo), const LOCK_EX = 2 +pkg syscall (netbsd-arm64-cgo), const LOCK_EX ideal-int +pkg syscall (netbsd-arm64-cgo), const LOCK_NB = 4 +pkg syscall (netbsd-arm64-cgo), const LOCK_NB ideal-int +pkg syscall (netbsd-arm64-cgo), const LOCK_SH = 1 +pkg syscall (netbsd-arm64-cgo), const LOCK_SH ideal-int +pkg syscall (netbsd-arm64-cgo), const LOCK_UN = 8 +pkg syscall (netbsd-arm64-cgo), const LOCK_UN ideal-int +pkg syscall (netbsd-arm64-cgo), const MADV_DONTNEED = 4 +pkg syscall (netbsd-arm64-cgo), const MADV_DONTNEED ideal-int +pkg syscall (netbsd-arm64-cgo), const MADV_FREE = 6 +pkg syscall (netbsd-arm64-cgo), const MADV_FREE ideal-int +pkg syscall (netbsd-arm64-cgo), const MADV_NORMAL = 0 +pkg syscall (netbsd-arm64-cgo), const MADV_NORMAL ideal-int +pkg syscall (netbsd-arm64-cgo), const MADV_RANDOM = 1 +pkg syscall (netbsd-arm64-cgo), const MADV_RANDOM ideal-int +pkg syscall (netbsd-arm64-cgo), const MADV_SEQUENTIAL = 2 +pkg syscall (netbsd-arm64-cgo), const MADV_SEQUENTIAL ideal-int +pkg syscall (netbsd-arm64-cgo), const MADV_SPACEAVAIL = 5 +pkg syscall (netbsd-arm64-cgo), const MADV_SPACEAVAIL ideal-int +pkg syscall (netbsd-arm64-cgo), const MADV_WILLNEED = 3 +pkg syscall (netbsd-arm64-cgo), const MADV_WILLNEED ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_ALIGNMENT_16MB = 402653184 +pkg syscall (netbsd-arm64-cgo), const MAP_ALIGNMENT_16MB ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_ALIGNMENT_1TB = 671088640 +pkg syscall (netbsd-arm64-cgo), const MAP_ALIGNMENT_1TB ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_ALIGNMENT_256TB = 805306368 +pkg syscall (netbsd-arm64-cgo), const MAP_ALIGNMENT_256TB ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_ALIGNMENT_4GB = 536870912 +pkg syscall (netbsd-arm64-cgo), const MAP_ALIGNMENT_4GB ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_ALIGNMENT_64KB = 268435456 +pkg syscall (netbsd-arm64-cgo), const MAP_ALIGNMENT_64KB ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_ALIGNMENT_64PB = 939524096 +pkg syscall (netbsd-arm64-cgo), const MAP_ALIGNMENT_64PB ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_ALIGNMENT_MASK = -16777216 +pkg syscall (netbsd-arm64-cgo), const MAP_ALIGNMENT_MASK ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_ALIGNMENT_SHIFT = 24 +pkg syscall (netbsd-arm64-cgo), const MAP_ALIGNMENT_SHIFT ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_ANON = 4096 +pkg syscall (netbsd-arm64-cgo), const MAP_ANON ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_FILE = 0 +pkg syscall (netbsd-arm64-cgo), const MAP_FILE ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_FIXED = 16 +pkg syscall (netbsd-arm64-cgo), const MAP_FIXED ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_HASSEMAPHORE = 512 +pkg syscall (netbsd-arm64-cgo), const MAP_HASSEMAPHORE ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_INHERIT = 128 +pkg syscall (netbsd-arm64-cgo), const MAP_INHERIT ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_INHERIT_COPY = 1 +pkg syscall (netbsd-arm64-cgo), const MAP_INHERIT_COPY ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_INHERIT_DEFAULT = 1 +pkg syscall (netbsd-arm64-cgo), const MAP_INHERIT_DEFAULT ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_INHERIT_DONATE_COPY = 3 +pkg syscall (netbsd-arm64-cgo), const MAP_INHERIT_DONATE_COPY ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_INHERIT_NONE = 2 +pkg syscall (netbsd-arm64-cgo), const MAP_INHERIT_NONE ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_INHERIT_SHARE = 0 +pkg syscall (netbsd-arm64-cgo), const MAP_INHERIT_SHARE ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_NORESERVE = 64 +pkg syscall (netbsd-arm64-cgo), const MAP_NORESERVE ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_PRIVATE = 2 +pkg syscall (netbsd-arm64-cgo), const MAP_PRIVATE ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_RENAME = 32 +pkg syscall (netbsd-arm64-cgo), const MAP_RENAME ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_SHARED = 1 +pkg syscall (netbsd-arm64-cgo), const MAP_SHARED ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_STACK = 8192 +pkg syscall (netbsd-arm64-cgo), const MAP_STACK ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_TRYFIXED = 1024 +pkg syscall (netbsd-arm64-cgo), const MAP_TRYFIXED ideal-int +pkg syscall (netbsd-arm64-cgo), const MAP_WIRED = 2048 +pkg syscall (netbsd-arm64-cgo), const MAP_WIRED ideal-int +pkg syscall (netbsd-arm64-cgo), const MCL_CURRENT = 1 +pkg syscall (netbsd-arm64-cgo), const MCL_CURRENT ideal-int +pkg syscall (netbsd-arm64-cgo), const MCL_FUTURE = 2 +pkg syscall (netbsd-arm64-cgo), const MCL_FUTURE ideal-int +pkg syscall (netbsd-arm64-cgo), const MSG_BCAST = 256 +pkg syscall (netbsd-arm64-cgo), const MSG_BCAST ideal-int +pkg syscall (netbsd-arm64-cgo), const MSG_CMSG_CLOEXEC = 2048 +pkg syscall (netbsd-arm64-cgo), const MSG_CMSG_CLOEXEC ideal-int +pkg syscall (netbsd-arm64-cgo), const MSG_CONTROLMBUF = 33554432 +pkg syscall (netbsd-arm64-cgo), const MSG_CONTROLMBUF ideal-int +pkg syscall (netbsd-arm64-cgo), const MSG_CTRUNC = 32 +pkg syscall (netbsd-arm64-cgo), const MSG_CTRUNC ideal-int +pkg syscall (netbsd-arm64-cgo), const MSG_DONTROUTE = 4 +pkg syscall (netbsd-arm64-cgo), const MSG_DONTROUTE ideal-int +pkg syscall (netbsd-arm64-cgo), const MSG_DONTWAIT = 128 +pkg syscall (netbsd-arm64-cgo), const MSG_DONTWAIT ideal-int +pkg syscall (netbsd-arm64-cgo), const MSG_EOR = 8 +pkg syscall (netbsd-arm64-cgo), const MSG_EOR ideal-int +pkg syscall (netbsd-arm64-cgo), const MSG_IOVUSRSPACE = 67108864 +pkg syscall (netbsd-arm64-cgo), const MSG_IOVUSRSPACE ideal-int +pkg syscall (netbsd-arm64-cgo), const MSG_LENUSRSPACE = 134217728 +pkg syscall (netbsd-arm64-cgo), const MSG_LENUSRSPACE ideal-int +pkg syscall (netbsd-arm64-cgo), const MSG_MCAST = 512 +pkg syscall (netbsd-arm64-cgo), const MSG_MCAST ideal-int +pkg syscall (netbsd-arm64-cgo), const MSG_NAMEMBUF = 16777216 +pkg syscall (netbsd-arm64-cgo), const MSG_NAMEMBUF ideal-int +pkg syscall (netbsd-arm64-cgo), const MSG_NBIO = 4096 +pkg syscall (netbsd-arm64-cgo), const MSG_NBIO ideal-int +pkg syscall (netbsd-arm64-cgo), const MSG_NOSIGNAL = 1024 +pkg syscall (netbsd-arm64-cgo), const MSG_NOSIGNAL ideal-int +pkg syscall (netbsd-arm64-cgo), const MSG_OOB = 1 +pkg syscall (netbsd-arm64-cgo), const MSG_OOB ideal-int +pkg syscall (netbsd-arm64-cgo), const MSG_PEEK = 2 +pkg syscall (netbsd-arm64-cgo), const MSG_PEEK ideal-int +pkg syscall (netbsd-arm64-cgo), const MSG_TRUNC = 16 +pkg syscall (netbsd-arm64-cgo), const MSG_TRUNC ideal-int +pkg syscall (netbsd-arm64-cgo), const MSG_USERFLAGS = 16777215 +pkg syscall (netbsd-arm64-cgo), const MSG_USERFLAGS ideal-int +pkg syscall (netbsd-arm64-cgo), const MSG_WAITALL = 64 +pkg syscall (netbsd-arm64-cgo), const MSG_WAITALL ideal-int +pkg syscall (netbsd-arm64-cgo), const MS_ASYNC = 1 +pkg syscall (netbsd-arm64-cgo), const MS_ASYNC ideal-int +pkg syscall (netbsd-arm64-cgo), const MS_INVALIDATE = 2 +pkg syscall (netbsd-arm64-cgo), const MS_INVALIDATE ideal-int +pkg syscall (netbsd-arm64-cgo), const MS_SYNC = 4 +pkg syscall (netbsd-arm64-cgo), const MS_SYNC ideal-int +pkg syscall (netbsd-arm64-cgo), const NAME_MAX = 511 +pkg syscall (netbsd-arm64-cgo), const NAME_MAX ideal-int +pkg syscall (netbsd-arm64-cgo), const NET_RT_DUMP = 1 +pkg syscall (netbsd-arm64-cgo), const NET_RT_DUMP ideal-int +pkg syscall (netbsd-arm64-cgo), const NET_RT_FLAGS = 2 +pkg syscall (netbsd-arm64-cgo), const NET_RT_FLAGS ideal-int +pkg syscall (netbsd-arm64-cgo), const NET_RT_IFLIST = 5 +pkg syscall (netbsd-arm64-cgo), const NET_RT_IFLIST ideal-int +pkg syscall (netbsd-arm64-cgo), const NET_RT_MAXID = 6 +pkg syscall (netbsd-arm64-cgo), const NET_RT_MAXID ideal-int +pkg syscall (netbsd-arm64-cgo), const NET_RT_OIFLIST = 4 +pkg syscall (netbsd-arm64-cgo), const NET_RT_OIFLIST ideal-int +pkg syscall (netbsd-arm64-cgo), const NET_RT_OOIFLIST = 3 +pkg syscall (netbsd-arm64-cgo), const NET_RT_OOIFLIST ideal-int +pkg syscall (netbsd-arm64-cgo), const NOFLSH = 2147483648 +pkg syscall (netbsd-arm64-cgo), const NOFLSH ideal-int +pkg syscall (netbsd-arm64-cgo), const NOTE_ATTRIB = 8 +pkg syscall (netbsd-arm64-cgo), const NOTE_ATTRIB ideal-int +pkg syscall (netbsd-arm64-cgo), const NOTE_CHILD = 4 +pkg syscall (netbsd-arm64-cgo), const NOTE_CHILD ideal-int +pkg syscall (netbsd-arm64-cgo), const NOTE_DELETE = 1 +pkg syscall (netbsd-arm64-cgo), const NOTE_DELETE ideal-int +pkg syscall (netbsd-arm64-cgo), const NOTE_EXEC = 536870912 +pkg syscall (netbsd-arm64-cgo), const NOTE_EXEC ideal-int +pkg syscall (netbsd-arm64-cgo), const NOTE_EXIT = 2147483648 +pkg syscall (netbsd-arm64-cgo), const NOTE_EXIT ideal-int +pkg syscall (netbsd-arm64-cgo), const NOTE_EXTEND = 4 +pkg syscall (netbsd-arm64-cgo), const NOTE_EXTEND ideal-int +pkg syscall (netbsd-arm64-cgo), const NOTE_FORK = 1073741824 +pkg syscall (netbsd-arm64-cgo), const NOTE_FORK ideal-int +pkg syscall (netbsd-arm64-cgo), const NOTE_LINK = 16 +pkg syscall (netbsd-arm64-cgo), const NOTE_LINK ideal-int +pkg syscall (netbsd-arm64-cgo), const NOTE_LOWAT = 1 +pkg syscall (netbsd-arm64-cgo), const NOTE_LOWAT ideal-int +pkg syscall (netbsd-arm64-cgo), const NOTE_PCTRLMASK = 4026531840 +pkg syscall (netbsd-arm64-cgo), const NOTE_PCTRLMASK ideal-int +pkg syscall (netbsd-arm64-cgo), const NOTE_PDATAMASK = 1048575 +pkg syscall (netbsd-arm64-cgo), const NOTE_PDATAMASK ideal-int +pkg syscall (netbsd-arm64-cgo), const NOTE_RENAME = 32 +pkg syscall (netbsd-arm64-cgo), const NOTE_RENAME ideal-int +pkg syscall (netbsd-arm64-cgo), const NOTE_REVOKE = 64 +pkg syscall (netbsd-arm64-cgo), const NOTE_REVOKE ideal-int +pkg syscall (netbsd-arm64-cgo), const NOTE_TRACK = 1 +pkg syscall (netbsd-arm64-cgo), const NOTE_TRACK ideal-int +pkg syscall (netbsd-arm64-cgo), const NOTE_TRACKERR = 2 +pkg syscall (netbsd-arm64-cgo), const NOTE_TRACKERR ideal-int +pkg syscall (netbsd-arm64-cgo), const NOTE_WRITE = 2 +pkg syscall (netbsd-arm64-cgo), const NOTE_WRITE ideal-int +pkg syscall (netbsd-arm64-cgo), const OCRNL = 16 +pkg syscall (netbsd-arm64-cgo), const OCRNL ideal-int +pkg syscall (netbsd-arm64-cgo), const OFIOGETBMAP = 3221513850 +pkg syscall (netbsd-arm64-cgo), const OFIOGETBMAP ideal-int +pkg syscall (netbsd-arm64-cgo), const ONLCR = 2 +pkg syscall (netbsd-arm64-cgo), const ONLCR ideal-int +pkg syscall (netbsd-arm64-cgo), const ONLRET = 64 +pkg syscall (netbsd-arm64-cgo), const ONLRET ideal-int +pkg syscall (netbsd-arm64-cgo), const ONOCR = 32 +pkg syscall (netbsd-arm64-cgo), const ONOCR ideal-int +pkg syscall (netbsd-arm64-cgo), const ONOEOT = 8 +pkg syscall (netbsd-arm64-cgo), const ONOEOT ideal-int +pkg syscall (netbsd-arm64-cgo), const OPOST = 1 +pkg syscall (netbsd-arm64-cgo), const OPOST ideal-int +pkg syscall (netbsd-arm64-cgo), const O_ACCMODE = 3 +pkg syscall (netbsd-arm64-cgo), const O_ACCMODE ideal-int +pkg syscall (netbsd-arm64-cgo), const O_ALT_IO = 262144 +pkg syscall (netbsd-arm64-cgo), const O_ALT_IO ideal-int +pkg syscall (netbsd-arm64-cgo), const O_APPEND = 8 +pkg syscall (netbsd-arm64-cgo), const O_ASYNC = 64 +pkg syscall (netbsd-arm64-cgo), const O_CLOEXEC = 4194304 +pkg syscall (netbsd-arm64-cgo), const O_CREAT = 512 +pkg syscall (netbsd-arm64-cgo), const O_DIRECT = 524288 +pkg syscall (netbsd-arm64-cgo), const O_DIRECT ideal-int +pkg syscall (netbsd-arm64-cgo), const O_DIRECTORY = 2097152 +pkg syscall (netbsd-arm64-cgo), const O_DIRECTORY ideal-int +pkg syscall (netbsd-arm64-cgo), const O_DSYNC = 65536 +pkg syscall (netbsd-arm64-cgo), const O_DSYNC ideal-int +pkg syscall (netbsd-arm64-cgo), const O_EXCL = 2048 +pkg syscall (netbsd-arm64-cgo), const O_EXLOCK = 32 +pkg syscall (netbsd-arm64-cgo), const O_EXLOCK ideal-int +pkg syscall (netbsd-arm64-cgo), const O_FSYNC = 128 +pkg syscall (netbsd-arm64-cgo), const O_FSYNC ideal-int +pkg syscall (netbsd-arm64-cgo), const O_NDELAY = 4 +pkg syscall (netbsd-arm64-cgo), const O_NDELAY ideal-int +pkg syscall (netbsd-arm64-cgo), const O_NOCTTY = 32768 +pkg syscall (netbsd-arm64-cgo), const O_NOFOLLOW = 256 +pkg syscall (netbsd-arm64-cgo), const O_NOFOLLOW ideal-int +pkg syscall (netbsd-arm64-cgo), const O_NONBLOCK = 4 +pkg syscall (netbsd-arm64-cgo), const O_NOSIGPIPE = 16777216 +pkg syscall (netbsd-arm64-cgo), const O_NOSIGPIPE ideal-int +pkg syscall (netbsd-arm64-cgo), const O_RSYNC = 131072 +pkg syscall (netbsd-arm64-cgo), const O_RSYNC ideal-int +pkg syscall (netbsd-arm64-cgo), const O_SHLOCK = 16 +pkg syscall (netbsd-arm64-cgo), const O_SHLOCK ideal-int +pkg syscall (netbsd-arm64-cgo), const O_SYNC = 128 +pkg syscall (netbsd-arm64-cgo), const O_TRUNC = 1024 +pkg syscall (netbsd-arm64-cgo), const PARENB = 4096 +pkg syscall (netbsd-arm64-cgo), const PARENB ideal-int +pkg syscall (netbsd-arm64-cgo), const PARMRK = 8 +pkg syscall (netbsd-arm64-cgo), const PARMRK ideal-int +pkg syscall (netbsd-arm64-cgo), const PARODD = 8192 +pkg syscall (netbsd-arm64-cgo), const PARODD ideal-int +pkg syscall (netbsd-arm64-cgo), const PENDIN = 536870912 +pkg syscall (netbsd-arm64-cgo), const PENDIN ideal-int +pkg syscall (netbsd-arm64-cgo), const PRIO_PGRP = 1 +pkg syscall (netbsd-arm64-cgo), const PRIO_PGRP ideal-int +pkg syscall (netbsd-arm64-cgo), const PRIO_PROCESS = 0 +pkg syscall (netbsd-arm64-cgo), const PRIO_PROCESS ideal-int +pkg syscall (netbsd-arm64-cgo), const PRIO_USER = 2 +pkg syscall (netbsd-arm64-cgo), const PRIO_USER ideal-int +pkg syscall (netbsd-arm64-cgo), const PRI_IOFLUSH = 124 +pkg syscall (netbsd-arm64-cgo), const PRI_IOFLUSH ideal-int +pkg syscall (netbsd-arm64-cgo), const PROT_EXEC = 4 +pkg syscall (netbsd-arm64-cgo), const PROT_EXEC ideal-int +pkg syscall (netbsd-arm64-cgo), const PROT_NONE = 0 +pkg syscall (netbsd-arm64-cgo), const PROT_NONE ideal-int +pkg syscall (netbsd-arm64-cgo), const PROT_READ = 1 +pkg syscall (netbsd-arm64-cgo), const PROT_READ ideal-int +pkg syscall (netbsd-arm64-cgo), const PROT_WRITE = 2 +pkg syscall (netbsd-arm64-cgo), const PROT_WRITE ideal-int +pkg syscall (netbsd-arm64-cgo), const PTRACE_CONT = 7 +pkg syscall (netbsd-arm64-cgo), const PTRACE_CONT ideal-int +pkg syscall (netbsd-arm64-cgo), const PTRACE_KILL = 8 +pkg syscall (netbsd-arm64-cgo), const PTRACE_KILL ideal-int +pkg syscall (netbsd-arm64-cgo), const PTRACE_TRACEME = 0 +pkg syscall (netbsd-arm64-cgo), const PTRACE_TRACEME ideal-int +pkg syscall (netbsd-arm64-cgo), const RLIMIT_AS = 10 +pkg syscall (netbsd-arm64-cgo), const RLIMIT_AS ideal-int +pkg syscall (netbsd-arm64-cgo), const RLIMIT_CORE = 4 +pkg syscall (netbsd-arm64-cgo), const RLIMIT_CORE ideal-int +pkg syscall (netbsd-arm64-cgo), const RLIMIT_CPU = 0 +pkg syscall (netbsd-arm64-cgo), const RLIMIT_CPU ideal-int +pkg syscall (netbsd-arm64-cgo), const RLIMIT_DATA = 2 +pkg syscall (netbsd-arm64-cgo), const RLIMIT_DATA ideal-int +pkg syscall (netbsd-arm64-cgo), const RLIMIT_FSIZE = 1 +pkg syscall (netbsd-arm64-cgo), const RLIMIT_FSIZE ideal-int +pkg syscall (netbsd-arm64-cgo), const RLIMIT_NOFILE = 8 +pkg syscall (netbsd-arm64-cgo), const RLIMIT_NOFILE ideal-int +pkg syscall (netbsd-arm64-cgo), const RLIMIT_STACK = 3 +pkg syscall (netbsd-arm64-cgo), const RLIMIT_STACK ideal-int +pkg syscall (netbsd-arm64-cgo), const RLIM_INFINITY = 9223372036854775807 +pkg syscall (netbsd-arm64-cgo), const RLIM_INFINITY ideal-int +pkg syscall (netbsd-arm64-cgo), const RTAX_AUTHOR = 6 +pkg syscall (netbsd-arm64-cgo), const RTAX_AUTHOR ideal-int +pkg syscall (netbsd-arm64-cgo), const RTAX_BRD = 7 +pkg syscall (netbsd-arm64-cgo), const RTAX_BRD ideal-int +pkg syscall (netbsd-arm64-cgo), const RTAX_DST = 0 +pkg syscall (netbsd-arm64-cgo), const RTAX_DST ideal-int +pkg syscall (netbsd-arm64-cgo), const RTAX_GATEWAY = 1 +pkg syscall (netbsd-arm64-cgo), const RTAX_GATEWAY ideal-int +pkg syscall (netbsd-arm64-cgo), const RTAX_GENMASK = 3 +pkg syscall (netbsd-arm64-cgo), const RTAX_GENMASK ideal-int +pkg syscall (netbsd-arm64-cgo), const RTAX_IFA = 5 +pkg syscall (netbsd-arm64-cgo), const RTAX_IFA ideal-int +pkg syscall (netbsd-arm64-cgo), const RTAX_IFP = 4 +pkg syscall (netbsd-arm64-cgo), const RTAX_IFP ideal-int +pkg syscall (netbsd-arm64-cgo), const RTAX_MAX = 9 +pkg syscall (netbsd-arm64-cgo), const RTAX_MAX ideal-int +pkg syscall (netbsd-arm64-cgo), const RTAX_NETMASK = 2 +pkg syscall (netbsd-arm64-cgo), const RTAX_NETMASK ideal-int +pkg syscall (netbsd-arm64-cgo), const RTAX_TAG = 8 +pkg syscall (netbsd-arm64-cgo), const RTAX_TAG ideal-int +pkg syscall (netbsd-arm64-cgo), const RTA_AUTHOR = 64 +pkg syscall (netbsd-arm64-cgo), const RTA_AUTHOR ideal-int +pkg syscall (netbsd-arm64-cgo), const RTA_BRD = 128 +pkg syscall (netbsd-arm64-cgo), const RTA_BRD ideal-int +pkg syscall (netbsd-arm64-cgo), const RTA_DST = 1 +pkg syscall (netbsd-arm64-cgo), const RTA_DST ideal-int +pkg syscall (netbsd-arm64-cgo), const RTA_GATEWAY = 2 +pkg syscall (netbsd-arm64-cgo), const RTA_GATEWAY ideal-int +pkg syscall (netbsd-arm64-cgo), const RTA_GENMASK = 8 +pkg syscall (netbsd-arm64-cgo), const RTA_GENMASK ideal-int +pkg syscall (netbsd-arm64-cgo), const RTA_IFA = 32 +pkg syscall (netbsd-arm64-cgo), const RTA_IFA ideal-int +pkg syscall (netbsd-arm64-cgo), const RTA_IFP = 16 +pkg syscall (netbsd-arm64-cgo), const RTA_IFP ideal-int +pkg syscall (netbsd-arm64-cgo), const RTA_NETMASK = 4 +pkg syscall (netbsd-arm64-cgo), const RTA_NETMASK ideal-int +pkg syscall (netbsd-arm64-cgo), const RTA_TAG = 256 +pkg syscall (netbsd-arm64-cgo), const RTA_TAG ideal-int +pkg syscall (netbsd-arm64-cgo), const RTF_ANNOUNCE = 131072 +pkg syscall (netbsd-arm64-cgo), const RTF_ANNOUNCE ideal-int +pkg syscall (netbsd-arm64-cgo), const RTF_BLACKHOLE = 4096 +pkg syscall (netbsd-arm64-cgo), const RTF_BLACKHOLE ideal-int +pkg syscall (netbsd-arm64-cgo), const RTF_CLONED = 8192 +pkg syscall (netbsd-arm64-cgo), const RTF_CLONED ideal-int +pkg syscall (netbsd-arm64-cgo), const RTF_CLONING = 256 +pkg syscall (netbsd-arm64-cgo), const RTF_CLONING ideal-int +pkg syscall (netbsd-arm64-cgo), const RTF_DONE = 64 +pkg syscall (netbsd-arm64-cgo), const RTF_DONE ideal-int +pkg syscall (netbsd-arm64-cgo), const RTF_DYNAMIC = 16 +pkg syscall (netbsd-arm64-cgo), const RTF_DYNAMIC ideal-int +pkg syscall (netbsd-arm64-cgo), const RTF_GATEWAY = 2 +pkg syscall (netbsd-arm64-cgo), const RTF_GATEWAY ideal-int +pkg syscall (netbsd-arm64-cgo), const RTF_HOST = 4 +pkg syscall (netbsd-arm64-cgo), const RTF_HOST ideal-int +pkg syscall (netbsd-arm64-cgo), const RTF_LLINFO = 1024 +pkg syscall (netbsd-arm64-cgo), const RTF_LLINFO ideal-int +pkg syscall (netbsd-arm64-cgo), const RTF_MASK = 128 +pkg syscall (netbsd-arm64-cgo), const RTF_MASK ideal-int +pkg syscall (netbsd-arm64-cgo), const RTF_MODIFIED = 32 +pkg syscall (netbsd-arm64-cgo), const RTF_MODIFIED ideal-int +pkg syscall (netbsd-arm64-cgo), const RTF_PROTO1 = 32768 +pkg syscall (netbsd-arm64-cgo), const RTF_PROTO1 ideal-int +pkg syscall (netbsd-arm64-cgo), const RTF_PROTO2 = 16384 +pkg syscall (netbsd-arm64-cgo), const RTF_PROTO2 ideal-int +pkg syscall (netbsd-arm64-cgo), const RTF_REJECT = 8 +pkg syscall (netbsd-arm64-cgo), const RTF_REJECT ideal-int +pkg syscall (netbsd-arm64-cgo), const RTF_SRC = 65536 +pkg syscall (netbsd-arm64-cgo), const RTF_SRC ideal-int +pkg syscall (netbsd-arm64-cgo), const RTF_STATIC = 2048 +pkg syscall (netbsd-arm64-cgo), const RTF_STATIC ideal-int +pkg syscall (netbsd-arm64-cgo), const RTF_UP = 1 +pkg syscall (netbsd-arm64-cgo), const RTF_UP ideal-int +pkg syscall (netbsd-arm64-cgo), const RTF_XRESOLVE = 512 +pkg syscall (netbsd-arm64-cgo), const RTF_XRESOLVE ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_ADD = 1 +pkg syscall (netbsd-arm64-cgo), const RTM_ADD ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_CHANGE = 3 +pkg syscall (netbsd-arm64-cgo), const RTM_CHANGE ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_CHGADDR = 21 +pkg syscall (netbsd-arm64-cgo), const RTM_CHGADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_DELADDR = 13 +pkg syscall (netbsd-arm64-cgo), const RTM_DELADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_DELETE = 2 +pkg syscall (netbsd-arm64-cgo), const RTM_DELETE ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_GET = 4 +pkg syscall (netbsd-arm64-cgo), const RTM_GET ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_IEEE80211 = 17 +pkg syscall (netbsd-arm64-cgo), const RTM_IEEE80211 ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_IFANNOUNCE = 16 +pkg syscall (netbsd-arm64-cgo), const RTM_IFANNOUNCE ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_IFINFO = 20 +pkg syscall (netbsd-arm64-cgo), const RTM_IFINFO ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_LLINFO_UPD = 19 +pkg syscall (netbsd-arm64-cgo), const RTM_LLINFO_UPD ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_LOCK = 8 +pkg syscall (netbsd-arm64-cgo), const RTM_LOCK ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_LOSING = 5 +pkg syscall (netbsd-arm64-cgo), const RTM_LOSING ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_MISS = 7 +pkg syscall (netbsd-arm64-cgo), const RTM_MISS ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_NEWADDR = 12 +pkg syscall (netbsd-arm64-cgo), const RTM_NEWADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_OIFINFO = 15 +pkg syscall (netbsd-arm64-cgo), const RTM_OIFINFO ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_OLDADD = 9 +pkg syscall (netbsd-arm64-cgo), const RTM_OLDADD ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_OLDDEL = 10 +pkg syscall (netbsd-arm64-cgo), const RTM_OLDDEL ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_OOIFINFO = 14 +pkg syscall (netbsd-arm64-cgo), const RTM_OOIFINFO ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_REDIRECT = 6 +pkg syscall (netbsd-arm64-cgo), const RTM_REDIRECT ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_RESOLVE = 11 +pkg syscall (netbsd-arm64-cgo), const RTM_RESOLVE ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_RTTUNIT = 1000000 +pkg syscall (netbsd-arm64-cgo), const RTM_RTTUNIT ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_SETGATE = 18 +pkg syscall (netbsd-arm64-cgo), const RTM_SETGATE ideal-int +pkg syscall (netbsd-arm64-cgo), const RTM_VERSION = 4 +pkg syscall (netbsd-arm64-cgo), const RTM_VERSION ideal-int +pkg syscall (netbsd-arm64-cgo), const RTV_EXPIRE = 4 +pkg syscall (netbsd-arm64-cgo), const RTV_EXPIRE ideal-int +pkg syscall (netbsd-arm64-cgo), const RTV_HOPCOUNT = 2 +pkg syscall (netbsd-arm64-cgo), const RTV_HOPCOUNT ideal-int +pkg syscall (netbsd-arm64-cgo), const RTV_MTU = 1 +pkg syscall (netbsd-arm64-cgo), const RTV_MTU ideal-int +pkg syscall (netbsd-arm64-cgo), const RTV_RPIPE = 8 +pkg syscall (netbsd-arm64-cgo), const RTV_RPIPE ideal-int +pkg syscall (netbsd-arm64-cgo), const RTV_RTT = 64 +pkg syscall (netbsd-arm64-cgo), const RTV_RTT ideal-int +pkg syscall (netbsd-arm64-cgo), const RTV_RTTVAR = 128 +pkg syscall (netbsd-arm64-cgo), const RTV_RTTVAR ideal-int +pkg syscall (netbsd-arm64-cgo), const RTV_SPIPE = 16 +pkg syscall (netbsd-arm64-cgo), const RTV_SPIPE ideal-int +pkg syscall (netbsd-arm64-cgo), const RTV_SSTHRESH = 32 +pkg syscall (netbsd-arm64-cgo), const RTV_SSTHRESH ideal-int +pkg syscall (netbsd-arm64-cgo), const RUSAGE_CHILDREN = -1 +pkg syscall (netbsd-arm64-cgo), const RUSAGE_CHILDREN ideal-int +pkg syscall (netbsd-arm64-cgo), const RUSAGE_SELF = 0 +pkg syscall (netbsd-arm64-cgo), const RUSAGE_SELF ideal-int +pkg syscall (netbsd-arm64-cgo), const SCM_CREDS = 4 +pkg syscall (netbsd-arm64-cgo), const SCM_CREDS ideal-int +pkg syscall (netbsd-arm64-cgo), const SCM_RIGHTS = 1 +pkg syscall (netbsd-arm64-cgo), const SCM_RIGHTS ideal-int +pkg syscall (netbsd-arm64-cgo), const SCM_TIMESTAMP = 8 +pkg syscall (netbsd-arm64-cgo), const SCM_TIMESTAMP ideal-int +pkg syscall (netbsd-arm64-cgo), const SIGBUS = 10 +pkg syscall (netbsd-arm64-cgo), const SIGCHLD = 20 +pkg syscall (netbsd-arm64-cgo), const SIGCHLD Signal +pkg syscall (netbsd-arm64-cgo), const SIGCONT = 19 +pkg syscall (netbsd-arm64-cgo), const SIGCONT Signal +pkg syscall (netbsd-arm64-cgo), const SIGEMT = 7 +pkg syscall (netbsd-arm64-cgo), const SIGEMT Signal +pkg syscall (netbsd-arm64-cgo), const SIGINFO = 29 +pkg syscall (netbsd-arm64-cgo), const SIGINFO Signal +pkg syscall (netbsd-arm64-cgo), const SIGIO = 23 +pkg syscall (netbsd-arm64-cgo), const SIGIO Signal +pkg syscall (netbsd-arm64-cgo), const SIGIOT = 6 +pkg syscall (netbsd-arm64-cgo), const SIGIOT Signal +pkg syscall (netbsd-arm64-cgo), const SIGPROF = 27 +pkg syscall (netbsd-arm64-cgo), const SIGPROF Signal +pkg syscall (netbsd-arm64-cgo), const SIGPWR = 32 +pkg syscall (netbsd-arm64-cgo), const SIGPWR Signal +pkg syscall (netbsd-arm64-cgo), const SIGSTOP = 17 +pkg syscall (netbsd-arm64-cgo), const SIGSTOP Signal +pkg syscall (netbsd-arm64-cgo), const SIGSYS = 12 +pkg syscall (netbsd-arm64-cgo), const SIGSYS Signal +pkg syscall (netbsd-arm64-cgo), const SIGTSTP = 18 +pkg syscall (netbsd-arm64-cgo), const SIGTSTP Signal +pkg syscall (netbsd-arm64-cgo), const SIGTTIN = 21 +pkg syscall (netbsd-arm64-cgo), const SIGTTIN Signal +pkg syscall (netbsd-arm64-cgo), const SIGTTOU = 22 +pkg syscall (netbsd-arm64-cgo), const SIGTTOU Signal +pkg syscall (netbsd-arm64-cgo), const SIGURG = 16 +pkg syscall (netbsd-arm64-cgo), const SIGURG Signal +pkg syscall (netbsd-arm64-cgo), const SIGUSR1 = 30 +pkg syscall (netbsd-arm64-cgo), const SIGUSR1 Signal +pkg syscall (netbsd-arm64-cgo), const SIGUSR2 = 31 +pkg syscall (netbsd-arm64-cgo), const SIGUSR2 Signal +pkg syscall (netbsd-arm64-cgo), const SIGVTALRM = 26 +pkg syscall (netbsd-arm64-cgo), const SIGVTALRM Signal +pkg syscall (netbsd-arm64-cgo), const SIGWINCH = 28 +pkg syscall (netbsd-arm64-cgo), const SIGWINCH Signal +pkg syscall (netbsd-arm64-cgo), const SIGXCPU = 24 +pkg syscall (netbsd-arm64-cgo), const SIGXCPU Signal +pkg syscall (netbsd-arm64-cgo), const SIGXFSZ = 25 +pkg syscall (netbsd-arm64-cgo), const SIGXFSZ Signal +pkg syscall (netbsd-arm64-cgo), const SIOCADDMULTI = 2156947761 +pkg syscall (netbsd-arm64-cgo), const SIOCADDMULTI ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCADDRT = 2151182858 +pkg syscall (netbsd-arm64-cgo), const SIOCADDRT ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCAIFADDR = 2151704858 +pkg syscall (netbsd-arm64-cgo), const SIOCAIFADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCALIFADDR = 2165860636 +pkg syscall (netbsd-arm64-cgo), const SIOCALIFADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCATMARK = 1074033415 +pkg syscall (netbsd-arm64-cgo), const SIOCATMARK ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCDELMULTI = 2156947762 +pkg syscall (netbsd-arm64-cgo), const SIOCDELMULTI ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCDELRT = 2151182859 +pkg syscall (netbsd-arm64-cgo), const SIOCDELRT ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCDIFADDR = 2156947737 +pkg syscall (netbsd-arm64-cgo), const SIOCDIFADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCDIFPHYADDR = 2156947785 +pkg syscall (netbsd-arm64-cgo), const SIOCDIFPHYADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCDLIFADDR = 2165860638 +pkg syscall (netbsd-arm64-cgo), const SIOCDLIFADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGDRVSPEC = 3223873915 +pkg syscall (netbsd-arm64-cgo), const SIOCGDRVSPEC ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGETPFSYNC = 3230689784 +pkg syscall (netbsd-arm64-cgo), const SIOCGETPFSYNC ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGETSGCNT = 3223352628 +pkg syscall (netbsd-arm64-cgo), const SIOCGETSGCNT ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGETVIFCNT = 3223876915 +pkg syscall (netbsd-arm64-cgo), const SIOCGETVIFCNT ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGHIWAT = 1074033409 +pkg syscall (netbsd-arm64-cgo), const SIOCGHIWAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGIFADDR = 3230689569 +pkg syscall (netbsd-arm64-cgo), const SIOCGIFADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGIFADDRPREF = 3231213856 +pkg syscall (netbsd-arm64-cgo), const SIOCGIFADDRPREF ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGIFALIAS = 3225446683 +pkg syscall (netbsd-arm64-cgo), const SIOCGIFALIAS ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGIFBRDADDR = 3230689571 +pkg syscall (netbsd-arm64-cgo), const SIOCGIFBRDADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGIFCAP = 3223349622 +pkg syscall (netbsd-arm64-cgo), const SIOCGIFCAP ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGIFCONF = 3222300966 +pkg syscall (netbsd-arm64-cgo), const SIOCGIFCONF ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGIFDATA = 3231213957 +pkg syscall (netbsd-arm64-cgo), const SIOCGIFDATA ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGIFDLT = 3230689655 +pkg syscall (netbsd-arm64-cgo), const SIOCGIFDLT ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGIFDSTADDR = 3230689570 +pkg syscall (netbsd-arm64-cgo), const SIOCGIFDSTADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGIFFLAGS = 3230689553 +pkg syscall (netbsd-arm64-cgo), const SIOCGIFFLAGS ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGIFGENERIC = 3230689594 +pkg syscall (netbsd-arm64-cgo), const SIOCGIFGENERIC ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGIFMEDIA = 3224398134 +pkg syscall (netbsd-arm64-cgo), const SIOCGIFMEDIA ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGIFMETRIC = 3230689559 +pkg syscall (netbsd-arm64-cgo), const SIOCGIFMETRIC ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGIFMTU = 3230689662 +pkg syscall (netbsd-arm64-cgo), const SIOCGIFMTU ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGIFNETMASK = 3230689573 +pkg syscall (netbsd-arm64-cgo), const SIOCGIFNETMASK ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGIFPDSTADDR = 3230689608 +pkg syscall (netbsd-arm64-cgo), const SIOCGIFPDSTADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGIFPSRCADDR = 3230689607 +pkg syscall (netbsd-arm64-cgo), const SIOCGIFPSRCADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGLIFADDR = 3239602461 +pkg syscall (netbsd-arm64-cgo), const SIOCGLIFADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGLIFPHYADDR = 3239602507 +pkg syscall (netbsd-arm64-cgo), const SIOCGLIFPHYADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGLINKSTR = 3223873927 +pkg syscall (netbsd-arm64-cgo), const SIOCGLINKSTR ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGLOWAT = 1074033411 +pkg syscall (netbsd-arm64-cgo), const SIOCGLOWAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGPGRP = 1074033417 +pkg syscall (netbsd-arm64-cgo), const SIOCGPGRP ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCGVH = 3230689667 +pkg syscall (netbsd-arm64-cgo), const SIOCGVH ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCIFCREATE = 2156947834 +pkg syscall (netbsd-arm64-cgo), const SIOCIFCREATE ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCIFDESTROY = 2156947833 +pkg syscall (netbsd-arm64-cgo), const SIOCIFDESTROY ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCIFGCLONERS = 3222301048 +pkg syscall (netbsd-arm64-cgo), const SIOCIFGCLONERS ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCINITIFADDR = 3228592516 +pkg syscall (netbsd-arm64-cgo), const SIOCINITIFADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCSDRVSPEC = 2150132091 +pkg syscall (netbsd-arm64-cgo), const SIOCSDRVSPEC ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCSETPFSYNC = 2156947959 +pkg syscall (netbsd-arm64-cgo), const SIOCSETPFSYNC ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCSHIWAT = 2147775232 +pkg syscall (netbsd-arm64-cgo), const SIOCSHIWAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCSIFADDR = 2156947724 +pkg syscall (netbsd-arm64-cgo), const SIOCSIFADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCSIFADDRPREF = 2157472031 +pkg syscall (netbsd-arm64-cgo), const SIOCSIFADDRPREF ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCSIFBRDADDR = 2156947731 +pkg syscall (netbsd-arm64-cgo), const SIOCSIFBRDADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCSIFCAP = 2149607797 +pkg syscall (netbsd-arm64-cgo), const SIOCSIFCAP ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCSIFDSTADDR = 2156947726 +pkg syscall (netbsd-arm64-cgo), const SIOCSIFDSTADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCSIFFLAGS = 2156947728 +pkg syscall (netbsd-arm64-cgo), const SIOCSIFFLAGS ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCSIFGENERIC = 2156947769 +pkg syscall (netbsd-arm64-cgo), const SIOCSIFGENERIC ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCSIFMEDIA = 3230689589 +pkg syscall (netbsd-arm64-cgo), const SIOCSIFMEDIA ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCSIFMETRIC = 2156947736 +pkg syscall (netbsd-arm64-cgo), const SIOCSIFMETRIC ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCSIFMTU = 2156947839 +pkg syscall (netbsd-arm64-cgo), const SIOCSIFMTU ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCSIFNETMASK = 2156947734 +pkg syscall (netbsd-arm64-cgo), const SIOCSIFNETMASK ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCSIFPHYADDR = 2151704902 +pkg syscall (netbsd-arm64-cgo), const SIOCSIFPHYADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCSLIFPHYADDR = 2165860682 +pkg syscall (netbsd-arm64-cgo), const SIOCSLIFPHYADDR ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCSLINKSTR = 2150132104 +pkg syscall (netbsd-arm64-cgo), const SIOCSLINKSTR ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCSLOWAT = 2147775234 +pkg syscall (netbsd-arm64-cgo), const SIOCSLOWAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCSPGRP = 2147775240 +pkg syscall (netbsd-arm64-cgo), const SIOCSPGRP ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCSVH = 3230689666 +pkg syscall (netbsd-arm64-cgo), const SIOCSVH ideal-int +pkg syscall (netbsd-arm64-cgo), const SIOCZIFDATA = 3231213958 +pkg syscall (netbsd-arm64-cgo), const SIOCZIFDATA ideal-int +pkg syscall (netbsd-arm64-cgo), const SOCK_CLOEXEC = 268435456 +pkg syscall (netbsd-arm64-cgo), const SOCK_CLOEXEC ideal-int +pkg syscall (netbsd-arm64-cgo), const SOCK_FLAGS_MASK = 4026531840 +pkg syscall (netbsd-arm64-cgo), const SOCK_FLAGS_MASK ideal-int +pkg syscall (netbsd-arm64-cgo), const SOCK_NONBLOCK = 536870912 +pkg syscall (netbsd-arm64-cgo), const SOCK_NONBLOCK ideal-int +pkg syscall (netbsd-arm64-cgo), const SOCK_NOSIGPIPE = 1073741824 +pkg syscall (netbsd-arm64-cgo), const SOCK_NOSIGPIPE ideal-int +pkg syscall (netbsd-arm64-cgo), const SOCK_RDM = 4 +pkg syscall (netbsd-arm64-cgo), const SOCK_RDM ideal-int +pkg syscall (netbsd-arm64-cgo), const SOL_SOCKET = 65535 +pkg syscall (netbsd-arm64-cgo), const SOMAXCONN = 128 +pkg syscall (netbsd-arm64-cgo), const SO_ACCEPTCONN = 2 +pkg syscall (netbsd-arm64-cgo), const SO_ACCEPTCONN ideal-int +pkg syscall (netbsd-arm64-cgo), const SO_ACCEPTFILTER = 4096 +pkg syscall (netbsd-arm64-cgo), const SO_ACCEPTFILTER ideal-int +pkg syscall (netbsd-arm64-cgo), const SO_BROADCAST = 32 +pkg syscall (netbsd-arm64-cgo), const SO_DEBUG = 1 +pkg syscall (netbsd-arm64-cgo), const SO_DEBUG ideal-int +pkg syscall (netbsd-arm64-cgo), const SO_DONTROUTE = 16 +pkg syscall (netbsd-arm64-cgo), const SO_ERROR = 4103 +pkg syscall (netbsd-arm64-cgo), const SO_ERROR ideal-int +pkg syscall (netbsd-arm64-cgo), const SO_KEEPALIVE = 8 +pkg syscall (netbsd-arm64-cgo), const SO_LINGER = 128 +pkg syscall (netbsd-arm64-cgo), const SO_NOHEADER = 4106 +pkg syscall (netbsd-arm64-cgo), const SO_NOHEADER ideal-int +pkg syscall (netbsd-arm64-cgo), const SO_NOSIGPIPE = 2048 +pkg syscall (netbsd-arm64-cgo), const SO_NOSIGPIPE ideal-int +pkg syscall (netbsd-arm64-cgo), const SO_OOBINLINE = 256 +pkg syscall (netbsd-arm64-cgo), const SO_OOBINLINE ideal-int +pkg syscall (netbsd-arm64-cgo), const SO_OVERFLOWED = 4105 +pkg syscall (netbsd-arm64-cgo), const SO_OVERFLOWED ideal-int +pkg syscall (netbsd-arm64-cgo), const SO_RCVBUF = 4098 +pkg syscall (netbsd-arm64-cgo), const SO_RCVLOWAT = 4100 +pkg syscall (netbsd-arm64-cgo), const SO_RCVLOWAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SO_RCVTIMEO = 4108 +pkg syscall (netbsd-arm64-cgo), const SO_RCVTIMEO ideal-int +pkg syscall (netbsd-arm64-cgo), const SO_REUSEADDR = 4 +pkg syscall (netbsd-arm64-cgo), const SO_REUSEPORT = 512 +pkg syscall (netbsd-arm64-cgo), const SO_REUSEPORT ideal-int +pkg syscall (netbsd-arm64-cgo), const SO_SNDBUF = 4097 +pkg syscall (netbsd-arm64-cgo), const SO_SNDLOWAT = 4099 +pkg syscall (netbsd-arm64-cgo), const SO_SNDLOWAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SO_SNDTIMEO = 4107 +pkg syscall (netbsd-arm64-cgo), const SO_SNDTIMEO ideal-int +pkg syscall (netbsd-arm64-cgo), const SO_TIMESTAMP = 8192 +pkg syscall (netbsd-arm64-cgo), const SO_TIMESTAMP ideal-int +pkg syscall (netbsd-arm64-cgo), const SO_TYPE = 4104 +pkg syscall (netbsd-arm64-cgo), const SO_TYPE ideal-int +pkg syscall (netbsd-arm64-cgo), const SO_USELOOPBACK = 64 +pkg syscall (netbsd-arm64-cgo), const SO_USELOOPBACK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYSCTL_VERSION = 16777216 +pkg syscall (netbsd-arm64-cgo), const SYSCTL_VERSION ideal-int +pkg syscall (netbsd-arm64-cgo), const SYSCTL_VERS_0 = 0 +pkg syscall (netbsd-arm64-cgo), const SYSCTL_VERS_0 ideal-int +pkg syscall (netbsd-arm64-cgo), const SYSCTL_VERS_1 = 16777216 +pkg syscall (netbsd-arm64-cgo), const SYSCTL_VERS_1 ideal-int +pkg syscall (netbsd-arm64-cgo), const SYSCTL_VERS_MASK = 4278190080 +pkg syscall (netbsd-arm64-cgo), const SYSCTL_VERS_MASK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_ACCEPT = 30 +pkg syscall (netbsd-arm64-cgo), const SYS_ACCEPT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_ACCESS = 33 +pkg syscall (netbsd-arm64-cgo), const SYS_ACCESS ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_ACCT = 51 +pkg syscall (netbsd-arm64-cgo), const SYS_ACCT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_ADJTIME = 421 +pkg syscall (netbsd-arm64-cgo), const SYS_ADJTIME ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_BIND = 104 +pkg syscall (netbsd-arm64-cgo), const SYS_BIND ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_BREAK = 17 +pkg syscall (netbsd-arm64-cgo), const SYS_BREAK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_CHDIR = 12 +pkg syscall (netbsd-arm64-cgo), const SYS_CHDIR ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_CHFLAGS = 34 +pkg syscall (netbsd-arm64-cgo), const SYS_CHFLAGS ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_CHMOD = 15 +pkg syscall (netbsd-arm64-cgo), const SYS_CHMOD ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_CHOWN = 16 +pkg syscall (netbsd-arm64-cgo), const SYS_CHOWN ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_CHROOT = 61 +pkg syscall (netbsd-arm64-cgo), const SYS_CHROOT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_CLOCK_GETRES = 429 +pkg syscall (netbsd-arm64-cgo), const SYS_CLOCK_GETRES ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_CLOCK_GETTIME = 427 +pkg syscall (netbsd-arm64-cgo), const SYS_CLOCK_GETTIME ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_CLOCK_SETTIME = 428 +pkg syscall (netbsd-arm64-cgo), const SYS_CLOCK_SETTIME ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_CLOSE = 6 +pkg syscall (netbsd-arm64-cgo), const SYS_CLOSE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_CONNECT = 98 +pkg syscall (netbsd-arm64-cgo), const SYS_CONNECT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_DUP = 41 +pkg syscall (netbsd-arm64-cgo), const SYS_DUP ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_DUP2 = 90 +pkg syscall (netbsd-arm64-cgo), const SYS_DUP2 ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_DUP3 = 454 +pkg syscall (netbsd-arm64-cgo), const SYS_DUP3 ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_EXECVE = 59 +pkg syscall (netbsd-arm64-cgo), const SYS_EXECVE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_EXIT = 1 +pkg syscall (netbsd-arm64-cgo), const SYS_EXIT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTRCTL = 360 +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTRCTL ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_DELETE_FD = 366 +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_DELETE_FD ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_DELETE_FILE = 363 +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_DELETE_FILE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_DELETE_LINK = 369 +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_DELETE_LINK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_GET_FD = 365 +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_GET_FD ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_GET_FILE = 362 +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_GET_FILE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_GET_LINK = 368 +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_GET_LINK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_LIST_FD = 370 +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_LIST_FD ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_LIST_FILE = 371 +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_LIST_FILE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_LIST_LINK = 372 +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_LIST_LINK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_SET_FD = 364 +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_SET_FD ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_SET_FILE = 361 +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_SET_FILE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_SET_LINK = 367 +pkg syscall (netbsd-arm64-cgo), const SYS_EXTATTR_SET_LINK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FACCESSAT = 462 +pkg syscall (netbsd-arm64-cgo), const SYS_FACCESSAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FCHDIR = 13 +pkg syscall (netbsd-arm64-cgo), const SYS_FCHDIR ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FCHFLAGS = 35 +pkg syscall (netbsd-arm64-cgo), const SYS_FCHFLAGS ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FCHMOD = 124 +pkg syscall (netbsd-arm64-cgo), const SYS_FCHMOD ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FCHMODAT = 463 +pkg syscall (netbsd-arm64-cgo), const SYS_FCHMODAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FCHOWN = 123 +pkg syscall (netbsd-arm64-cgo), const SYS_FCHOWN ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FCHOWNAT = 464 +pkg syscall (netbsd-arm64-cgo), const SYS_FCHOWNAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FCHROOT = 297 +pkg syscall (netbsd-arm64-cgo), const SYS_FCHROOT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FCNTL = 92 +pkg syscall (netbsd-arm64-cgo), const SYS_FCNTL ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FDATASYNC = 241 +pkg syscall (netbsd-arm64-cgo), const SYS_FDATASYNC ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FEXECVE = 465 +pkg syscall (netbsd-arm64-cgo), const SYS_FEXECVE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FGETXATTR = 380 +pkg syscall (netbsd-arm64-cgo), const SYS_FGETXATTR ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FHSTAT = 451 +pkg syscall (netbsd-arm64-cgo), const SYS_FHSTAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FKTRACE = 288 +pkg syscall (netbsd-arm64-cgo), const SYS_FKTRACE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FLISTXATTR = 383 +pkg syscall (netbsd-arm64-cgo), const SYS_FLISTXATTR ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FLOCK = 131 +pkg syscall (netbsd-arm64-cgo), const SYS_FLOCK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FORK = 2 +pkg syscall (netbsd-arm64-cgo), const SYS_FORK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FPATHCONF = 192 +pkg syscall (netbsd-arm64-cgo), const SYS_FPATHCONF ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FREMOVEXATTR = 386 +pkg syscall (netbsd-arm64-cgo), const SYS_FREMOVEXATTR ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FSETXATTR = 377 +pkg syscall (netbsd-arm64-cgo), const SYS_FSETXATTR ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FSTAT = 440 +pkg syscall (netbsd-arm64-cgo), const SYS_FSTAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FSTATAT = 466 +pkg syscall (netbsd-arm64-cgo), const SYS_FSTATAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FSTATVFS1 = 358 +pkg syscall (netbsd-arm64-cgo), const SYS_FSTATVFS1 ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FSYNC = 95 +pkg syscall (netbsd-arm64-cgo), const SYS_FSYNC ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FSYNC_RANGE = 354 +pkg syscall (netbsd-arm64-cgo), const SYS_FSYNC_RANGE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FTRUNCATE = 201 +pkg syscall (netbsd-arm64-cgo), const SYS_FTRUNCATE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FUTIMENS = 472 +pkg syscall (netbsd-arm64-cgo), const SYS_FUTIMENS ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_FUTIMES = 423 +pkg syscall (netbsd-arm64-cgo), const SYS_FUTIMES ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETCONTEXT = 307 +pkg syscall (netbsd-arm64-cgo), const SYS_GETCONTEXT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETDENTS = 390 +pkg syscall (netbsd-arm64-cgo), const SYS_GETDENTS ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETEGID = 43 +pkg syscall (netbsd-arm64-cgo), const SYS_GETEGID ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETEUID = 25 +pkg syscall (netbsd-arm64-cgo), const SYS_GETEUID ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETFH = 395 +pkg syscall (netbsd-arm64-cgo), const SYS_GETFH ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETGID = 47 +pkg syscall (netbsd-arm64-cgo), const SYS_GETGID ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETGROUPS = 79 +pkg syscall (netbsd-arm64-cgo), const SYS_GETGROUPS ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETITIMER = 426 +pkg syscall (netbsd-arm64-cgo), const SYS_GETITIMER ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETPEERNAME = 31 +pkg syscall (netbsd-arm64-cgo), const SYS_GETPEERNAME ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETPGID = 207 +pkg syscall (netbsd-arm64-cgo), const SYS_GETPGID ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETPGRP = 81 +pkg syscall (netbsd-arm64-cgo), const SYS_GETPGRP ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETPID = 20 +pkg syscall (netbsd-arm64-cgo), const SYS_GETPID ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETPPID = 39 +pkg syscall (netbsd-arm64-cgo), const SYS_GETPPID ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETPRIORITY = 100 +pkg syscall (netbsd-arm64-cgo), const SYS_GETPRIORITY ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETRLIMIT = 194 +pkg syscall (netbsd-arm64-cgo), const SYS_GETRLIMIT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETRUSAGE = 445 +pkg syscall (netbsd-arm64-cgo), const SYS_GETRUSAGE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETSID = 286 +pkg syscall (netbsd-arm64-cgo), const SYS_GETSID ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETSOCKNAME = 32 +pkg syscall (netbsd-arm64-cgo), const SYS_GETSOCKNAME ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETSOCKOPT = 118 +pkg syscall (netbsd-arm64-cgo), const SYS_GETSOCKOPT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETTIMEOFDAY = 418 +pkg syscall (netbsd-arm64-cgo), const SYS_GETTIMEOFDAY ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETUID = 24 +pkg syscall (netbsd-arm64-cgo), const SYS_GETUID ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETVFSSTAT = 356 +pkg syscall (netbsd-arm64-cgo), const SYS_GETVFSSTAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_GETXATTR = 378 +pkg syscall (netbsd-arm64-cgo), const SYS_GETXATTR ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_IOCTL = 54 +pkg syscall (netbsd-arm64-cgo), const SYS_IOCTL ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_ISSETUGID = 305 +pkg syscall (netbsd-arm64-cgo), const SYS_ISSETUGID ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_KEVENT = 435 +pkg syscall (netbsd-arm64-cgo), const SYS_KEVENT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_KILL = 37 +pkg syscall (netbsd-arm64-cgo), const SYS_KILL ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_KQUEUE = 344 +pkg syscall (netbsd-arm64-cgo), const SYS_KQUEUE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_KQUEUE1 = 455 +pkg syscall (netbsd-arm64-cgo), const SYS_KQUEUE1 ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_KTRACE = 45 +pkg syscall (netbsd-arm64-cgo), const SYS_KTRACE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_LCHFLAGS = 304 +pkg syscall (netbsd-arm64-cgo), const SYS_LCHFLAGS ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_LCHMOD = 274 +pkg syscall (netbsd-arm64-cgo), const SYS_LCHMOD ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_LCHOWN = 275 +pkg syscall (netbsd-arm64-cgo), const SYS_LCHOWN ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_LGETXATTR = 379 +pkg syscall (netbsd-arm64-cgo), const SYS_LGETXATTR ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_LINK = 9 +pkg syscall (netbsd-arm64-cgo), const SYS_LINK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_LINKAT = 457 +pkg syscall (netbsd-arm64-cgo), const SYS_LINKAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_LISTEN = 106 +pkg syscall (netbsd-arm64-cgo), const SYS_LISTEN ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_LISTXATTR = 381 +pkg syscall (netbsd-arm64-cgo), const SYS_LISTXATTR ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_LLISTXATTR = 382 +pkg syscall (netbsd-arm64-cgo), const SYS_LLISTXATTR ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_LREMOVEXATTR = 385 +pkg syscall (netbsd-arm64-cgo), const SYS_LREMOVEXATTR ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_LSEEK = 199 +pkg syscall (netbsd-arm64-cgo), const SYS_LSEEK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_LSETXATTR = 376 +pkg syscall (netbsd-arm64-cgo), const SYS_LSETXATTR ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_LSTAT = 441 +pkg syscall (netbsd-arm64-cgo), const SYS_LSTAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_LUTIMES = 424 +pkg syscall (netbsd-arm64-cgo), const SYS_LUTIMES ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MADVISE = 75 +pkg syscall (netbsd-arm64-cgo), const SYS_MADVISE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MINCORE = 78 +pkg syscall (netbsd-arm64-cgo), const SYS_MINCORE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MINHERIT = 273 +pkg syscall (netbsd-arm64-cgo), const SYS_MINHERIT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MKDIR = 136 +pkg syscall (netbsd-arm64-cgo), const SYS_MKDIR ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MKDIRAT = 461 +pkg syscall (netbsd-arm64-cgo), const SYS_MKDIRAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MKFIFO = 132 +pkg syscall (netbsd-arm64-cgo), const SYS_MKFIFO ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MKFIFOAT = 459 +pkg syscall (netbsd-arm64-cgo), const SYS_MKFIFOAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MKNOD = 450 +pkg syscall (netbsd-arm64-cgo), const SYS_MKNOD ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MKNODAT = 460 +pkg syscall (netbsd-arm64-cgo), const SYS_MKNODAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MLOCK = 203 +pkg syscall (netbsd-arm64-cgo), const SYS_MLOCK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MLOCKALL = 242 +pkg syscall (netbsd-arm64-cgo), const SYS_MLOCKALL ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MMAP = 197 +pkg syscall (netbsd-arm64-cgo), const SYS_MMAP ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MODCTL = 246 +pkg syscall (netbsd-arm64-cgo), const SYS_MODCTL ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MOUNT = 410 +pkg syscall (netbsd-arm64-cgo), const SYS_MOUNT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MPROTECT = 74 +pkg syscall (netbsd-arm64-cgo), const SYS_MPROTECT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MREMAP = 411 +pkg syscall (netbsd-arm64-cgo), const SYS_MREMAP ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MSGCTL = 444 +pkg syscall (netbsd-arm64-cgo), const SYS_MSGCTL ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MSGGET = 225 +pkg syscall (netbsd-arm64-cgo), const SYS_MSGGET ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MSGRCV = 227 +pkg syscall (netbsd-arm64-cgo), const SYS_MSGRCV ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MSGSND = 226 +pkg syscall (netbsd-arm64-cgo), const SYS_MSGSND ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MUNLOCK = 204 +pkg syscall (netbsd-arm64-cgo), const SYS_MUNLOCK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MUNLOCKALL = 243 +pkg syscall (netbsd-arm64-cgo), const SYS_MUNLOCKALL ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_MUNMAP = 73 +pkg syscall (netbsd-arm64-cgo), const SYS_MUNMAP ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_NANOSLEEP = 430 +pkg syscall (netbsd-arm64-cgo), const SYS_NANOSLEEP ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_NTP_ADJTIME = 176 +pkg syscall (netbsd-arm64-cgo), const SYS_NTP_ADJTIME ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_NTP_GETTIME = 448 +pkg syscall (netbsd-arm64-cgo), const SYS_NTP_GETTIME ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_OPEN = 5 +pkg syscall (netbsd-arm64-cgo), const SYS_OPEN ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_OPENAT = 468 +pkg syscall (netbsd-arm64-cgo), const SYS_OPENAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_PACCEPT = 456 +pkg syscall (netbsd-arm64-cgo), const SYS_PACCEPT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_PATHCONF = 191 +pkg syscall (netbsd-arm64-cgo), const SYS_PATHCONF ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_PIPE = 42 +pkg syscall (netbsd-arm64-cgo), const SYS_PIPE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_PIPE2 = 453 +pkg syscall (netbsd-arm64-cgo), const SYS_PIPE2 ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_PMC_CONTROL = 342 +pkg syscall (netbsd-arm64-cgo), const SYS_PMC_CONTROL ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_PMC_GET_INFO = 341 +pkg syscall (netbsd-arm64-cgo), const SYS_PMC_GET_INFO ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_POLL = 209 +pkg syscall (netbsd-arm64-cgo), const SYS_POLL ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_POLLTS = 437 +pkg syscall (netbsd-arm64-cgo), const SYS_POLLTS ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_POSIX_FADVISE = 416 +pkg syscall (netbsd-arm64-cgo), const SYS_POSIX_FADVISE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_POSIX_SPAWN = 474 +pkg syscall (netbsd-arm64-cgo), const SYS_POSIX_SPAWN ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_PREAD = 173 +pkg syscall (netbsd-arm64-cgo), const SYS_PREAD ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_PREADV = 289 +pkg syscall (netbsd-arm64-cgo), const SYS_PREADV ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_PROFIL = 44 +pkg syscall (netbsd-arm64-cgo), const SYS_PROFIL ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_PSELECT = 436 +pkg syscall (netbsd-arm64-cgo), const SYS_PSELECT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_PSET_ASSIGN = 414 +pkg syscall (netbsd-arm64-cgo), const SYS_PSET_ASSIGN ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_PSET_CREATE = 412 +pkg syscall (netbsd-arm64-cgo), const SYS_PSET_CREATE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_PSET_DESTROY = 413 +pkg syscall (netbsd-arm64-cgo), const SYS_PSET_DESTROY ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_PTRACE = 26 +pkg syscall (netbsd-arm64-cgo), const SYS_PTRACE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_PWRITE = 174 +pkg syscall (netbsd-arm64-cgo), const SYS_PWRITE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_PWRITEV = 290 +pkg syscall (netbsd-arm64-cgo), const SYS_PWRITEV ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_RASCTL = 343 +pkg syscall (netbsd-arm64-cgo), const SYS_RASCTL ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_READ = 3 +pkg syscall (netbsd-arm64-cgo), const SYS_READ ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_READLINK = 58 +pkg syscall (netbsd-arm64-cgo), const SYS_READLINK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_READLINKAT = 469 +pkg syscall (netbsd-arm64-cgo), const SYS_READLINKAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_READV = 120 +pkg syscall (netbsd-arm64-cgo), const SYS_READV ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_REBOOT = 208 +pkg syscall (netbsd-arm64-cgo), const SYS_REBOOT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_RECVFROM = 29 +pkg syscall (netbsd-arm64-cgo), const SYS_RECVFROM ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_RECVMMSG = 475 +pkg syscall (netbsd-arm64-cgo), const SYS_RECVMMSG ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_RECVMSG = 27 +pkg syscall (netbsd-arm64-cgo), const SYS_RECVMSG ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_REMOVEXATTR = 384 +pkg syscall (netbsd-arm64-cgo), const SYS_REMOVEXATTR ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_RENAME = 128 +pkg syscall (netbsd-arm64-cgo), const SYS_RENAME ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_RENAMEAT = 458 +pkg syscall (netbsd-arm64-cgo), const SYS_RENAMEAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_REVOKE = 56 +pkg syscall (netbsd-arm64-cgo), const SYS_REVOKE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_RMDIR = 137 +pkg syscall (netbsd-arm64-cgo), const SYS_RMDIR ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SBRK = 69 +pkg syscall (netbsd-arm64-cgo), const SYS_SBRK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SCHED_YIELD = 350 +pkg syscall (netbsd-arm64-cgo), const SYS_SCHED_YIELD ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SELECT = 417 +pkg syscall (netbsd-arm64-cgo), const SYS_SELECT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SEMCONFIG = 223 +pkg syscall (netbsd-arm64-cgo), const SYS_SEMCONFIG ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SEMGET = 221 +pkg syscall (netbsd-arm64-cgo), const SYS_SEMGET ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SEMOP = 222 +pkg syscall (netbsd-arm64-cgo), const SYS_SEMOP ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SENDMMSG = 476 +pkg syscall (netbsd-arm64-cgo), const SYS_SENDMMSG ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SENDMSG = 28 +pkg syscall (netbsd-arm64-cgo), const SYS_SENDMSG ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SENDTO = 133 +pkg syscall (netbsd-arm64-cgo), const SYS_SENDTO ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SETCONTEXT = 308 +pkg syscall (netbsd-arm64-cgo), const SYS_SETCONTEXT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SETEGID = 182 +pkg syscall (netbsd-arm64-cgo), const SYS_SETEGID ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SETEUID = 183 +pkg syscall (netbsd-arm64-cgo), const SYS_SETEUID ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SETGID = 181 +pkg syscall (netbsd-arm64-cgo), const SYS_SETGID ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SETGROUPS = 80 +pkg syscall (netbsd-arm64-cgo), const SYS_SETGROUPS ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SETITIMER = 425 +pkg syscall (netbsd-arm64-cgo), const SYS_SETITIMER ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SETPGID = 82 +pkg syscall (netbsd-arm64-cgo), const SYS_SETPGID ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SETPRIORITY = 96 +pkg syscall (netbsd-arm64-cgo), const SYS_SETPRIORITY ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SETREGID = 127 +pkg syscall (netbsd-arm64-cgo), const SYS_SETREGID ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SETREUID = 126 +pkg syscall (netbsd-arm64-cgo), const SYS_SETREUID ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SETRLIMIT = 195 +pkg syscall (netbsd-arm64-cgo), const SYS_SETRLIMIT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SETSID = 147 +pkg syscall (netbsd-arm64-cgo), const SYS_SETSID ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SETSOCKOPT = 105 +pkg syscall (netbsd-arm64-cgo), const SYS_SETSOCKOPT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SETTIMEOFDAY = 419 +pkg syscall (netbsd-arm64-cgo), const SYS_SETTIMEOFDAY ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SETUID = 23 +pkg syscall (netbsd-arm64-cgo), const SYS_SETUID ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SETXATTR = 375 +pkg syscall (netbsd-arm64-cgo), const SYS_SETXATTR ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SHMAT = 228 +pkg syscall (netbsd-arm64-cgo), const SYS_SHMAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SHMCTL = 443 +pkg syscall (netbsd-arm64-cgo), const SYS_SHMCTL ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SHMDT = 230 +pkg syscall (netbsd-arm64-cgo), const SYS_SHMDT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SHMGET = 231 +pkg syscall (netbsd-arm64-cgo), const SYS_SHMGET ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SHUTDOWN = 134 +pkg syscall (netbsd-arm64-cgo), const SYS_SHUTDOWN ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SIGQUEUEINFO = 245 +pkg syscall (netbsd-arm64-cgo), const SYS_SIGQUEUEINFO ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SOCKET = 394 +pkg syscall (netbsd-arm64-cgo), const SYS_SOCKET ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SOCKETPAIR = 135 +pkg syscall (netbsd-arm64-cgo), const SYS_SOCKETPAIR ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SSTK = 70 +pkg syscall (netbsd-arm64-cgo), const SYS_SSTK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_STAT = 439 +pkg syscall (netbsd-arm64-cgo), const SYS_STAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_STATVFS1 = 357 +pkg syscall (netbsd-arm64-cgo), const SYS_STATVFS1 ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SWAPCTL = 271 +pkg syscall (netbsd-arm64-cgo), const SYS_SWAPCTL ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SYMLINK = 57 +pkg syscall (netbsd-arm64-cgo), const SYS_SYMLINK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SYMLINKAT = 470 +pkg syscall (netbsd-arm64-cgo), const SYS_SYMLINKAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SYNC = 36 +pkg syscall (netbsd-arm64-cgo), const SYS_SYNC ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_SYSARCH = 165 +pkg syscall (netbsd-arm64-cgo), const SYS_SYSARCH ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_TIMER_CREATE = 235 +pkg syscall (netbsd-arm64-cgo), const SYS_TIMER_CREATE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_TIMER_DELETE = 236 +pkg syscall (netbsd-arm64-cgo), const SYS_TIMER_DELETE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_TIMER_GETOVERRUN = 239 +pkg syscall (netbsd-arm64-cgo), const SYS_TIMER_GETOVERRUN ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_TIMER_GETTIME = 447 +pkg syscall (netbsd-arm64-cgo), const SYS_TIMER_GETTIME ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_TIMER_SETTIME = 446 +pkg syscall (netbsd-arm64-cgo), const SYS_TIMER_SETTIME ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_TRUNCATE = 200 +pkg syscall (netbsd-arm64-cgo), const SYS_TRUNCATE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_UMASK = 60 +pkg syscall (netbsd-arm64-cgo), const SYS_UMASK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_UNDELETE = 205 +pkg syscall (netbsd-arm64-cgo), const SYS_UNDELETE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_UNLINK = 10 +pkg syscall (netbsd-arm64-cgo), const SYS_UNLINK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_UNLINKAT = 471 +pkg syscall (netbsd-arm64-cgo), const SYS_UNLINKAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_UNMOUNT = 22 +pkg syscall (netbsd-arm64-cgo), const SYS_UNMOUNT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_UTIMENSAT = 467 +pkg syscall (netbsd-arm64-cgo), const SYS_UTIMENSAT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_UTIMES = 420 +pkg syscall (netbsd-arm64-cgo), const SYS_UTIMES ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_UTRACE = 306 +pkg syscall (netbsd-arm64-cgo), const SYS_UTRACE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_UUIDGEN = 355 +pkg syscall (netbsd-arm64-cgo), const SYS_UUIDGEN ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_VADVISE = 72 +pkg syscall (netbsd-arm64-cgo), const SYS_VADVISE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_VFORK = 66 +pkg syscall (netbsd-arm64-cgo), const SYS_VFORK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_WAIT4 = 449 +pkg syscall (netbsd-arm64-cgo), const SYS_WAIT4 ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_WRITE = 4 +pkg syscall (netbsd-arm64-cgo), const SYS_WRITE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS_WRITEV = 121 +pkg syscall (netbsd-arm64-cgo), const SYS_WRITEV ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_CONTINUE = 314 +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_CONTINUE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_CREATE = 309 +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_CREATE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_CTL = 325 +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_CTL ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_DETACH = 319 +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_DETACH ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_EXIT = 310 +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_EXIT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_GETNAME = 324 +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_GETNAME ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_GETPRIVATE = 316 +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_GETPRIVATE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_KILL = 318 +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_KILL ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_PARK = 434 +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_PARK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_SELF = 311 +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_SELF ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_SETNAME = 323 +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_SETNAME ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_SETPRIVATE = 317 +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_SETPRIVATE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_SUSPEND = 313 +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_SUSPEND ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_UNPARK = 321 +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_UNPARK ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_UNPARK_ALL = 322 +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_UNPARK_ALL ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_WAIT = 312 +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_WAIT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_WAKEUP = 315 +pkg syscall (netbsd-arm64-cgo), const SYS__LWP_WAKEUP ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__PSET_BIND = 415 +pkg syscall (netbsd-arm64-cgo), const SYS__PSET_BIND ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__SCHED_GETAFFINITY = 349 +pkg syscall (netbsd-arm64-cgo), const SYS__SCHED_GETAFFINITY ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__SCHED_GETPARAM = 347 +pkg syscall (netbsd-arm64-cgo), const SYS__SCHED_GETPARAM ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__SCHED_SETAFFINITY = 348 +pkg syscall (netbsd-arm64-cgo), const SYS__SCHED_SETAFFINITY ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS__SCHED_SETPARAM = 346 +pkg syscall (netbsd-arm64-cgo), const SYS__SCHED_SETPARAM ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS___CLONE = 287 +pkg syscall (netbsd-arm64-cgo), const SYS___CLONE ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS___GETCWD = 296 +pkg syscall (netbsd-arm64-cgo), const SYS___GETCWD ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS___GETLOGIN = 49 +pkg syscall (netbsd-arm64-cgo), const SYS___GETLOGIN ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS___POSIX_CHOWN = 283 +pkg syscall (netbsd-arm64-cgo), const SYS___POSIX_CHOWN ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS___POSIX_FCHOWN = 284 +pkg syscall (netbsd-arm64-cgo), const SYS___POSIX_FCHOWN ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS___POSIX_LCHOWN = 285 +pkg syscall (netbsd-arm64-cgo), const SYS___POSIX_LCHOWN ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS___POSIX_RENAME = 270 +pkg syscall (netbsd-arm64-cgo), const SYS___POSIX_RENAME ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS___QUOTACTL = 473 +pkg syscall (netbsd-arm64-cgo), const SYS___QUOTACTL ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS___SEMCTL = 442 +pkg syscall (netbsd-arm64-cgo), const SYS___SEMCTL ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS___SETLOGIN = 50 +pkg syscall (netbsd-arm64-cgo), const SYS___SETLOGIN ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS___SIGACTION_SIGTRAMP = 340 +pkg syscall (netbsd-arm64-cgo), const SYS___SIGACTION_SIGTRAMP ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS___SIGTIMEDWAIT = 431 +pkg syscall (netbsd-arm64-cgo), const SYS___SIGTIMEDWAIT ideal-int +pkg syscall (netbsd-arm64-cgo), const SYS___SYSCTL = 202 +pkg syscall (netbsd-arm64-cgo), const SYS___SYSCTL ideal-int +pkg syscall (netbsd-arm64-cgo), const S_ARCH1 = 65536 +pkg syscall (netbsd-arm64-cgo), const S_ARCH1 ideal-int +pkg syscall (netbsd-arm64-cgo), const S_ARCH2 = 131072 +pkg syscall (netbsd-arm64-cgo), const S_ARCH2 ideal-int +pkg syscall (netbsd-arm64-cgo), const S_BLKSIZE = 512 +pkg syscall (netbsd-arm64-cgo), const S_BLKSIZE ideal-int +pkg syscall (netbsd-arm64-cgo), const S_IEXEC = 64 +pkg syscall (netbsd-arm64-cgo), const S_IEXEC ideal-int +pkg syscall (netbsd-arm64-cgo), const S_IFMT = 61440 +pkg syscall (netbsd-arm64-cgo), const S_IFWHT = 57344 +pkg syscall (netbsd-arm64-cgo), const S_IFWHT ideal-int +pkg syscall (netbsd-arm64-cgo), const S_IREAD = 256 +pkg syscall (netbsd-arm64-cgo), const S_IREAD ideal-int +pkg syscall (netbsd-arm64-cgo), const S_IRGRP = 32 +pkg syscall (netbsd-arm64-cgo), const S_IRGRP ideal-int +pkg syscall (netbsd-arm64-cgo), const S_IROTH = 4 +pkg syscall (netbsd-arm64-cgo), const S_IROTH ideal-int +pkg syscall (netbsd-arm64-cgo), const S_IRWXG = 56 +pkg syscall (netbsd-arm64-cgo), const S_IRWXG ideal-int +pkg syscall (netbsd-arm64-cgo), const S_IRWXO = 7 +pkg syscall (netbsd-arm64-cgo), const S_IRWXO ideal-int +pkg syscall (netbsd-arm64-cgo), const S_IRWXU = 448 +pkg syscall (netbsd-arm64-cgo), const S_IRWXU ideal-int +pkg syscall (netbsd-arm64-cgo), const S_ISTXT = 512 +pkg syscall (netbsd-arm64-cgo), const S_ISTXT ideal-int +pkg syscall (netbsd-arm64-cgo), const S_IWGRP = 16 +pkg syscall (netbsd-arm64-cgo), const S_IWGRP ideal-int +pkg syscall (netbsd-arm64-cgo), const S_IWOTH = 2 +pkg syscall (netbsd-arm64-cgo), const S_IWOTH ideal-int +pkg syscall (netbsd-arm64-cgo), const S_IWRITE = 128 +pkg syscall (netbsd-arm64-cgo), const S_IWRITE ideal-int +pkg syscall (netbsd-arm64-cgo), const S_IXGRP = 8 +pkg syscall (netbsd-arm64-cgo), const S_IXGRP ideal-int +pkg syscall (netbsd-arm64-cgo), const S_IXOTH = 1 +pkg syscall (netbsd-arm64-cgo), const S_IXOTH ideal-int +pkg syscall (netbsd-arm64-cgo), const S_LOGIN_SET = 1 +pkg syscall (netbsd-arm64-cgo), const S_LOGIN_SET ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofBpfHdr = 32 +pkg syscall (netbsd-arm64-cgo), const SizeofBpfHdr ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofBpfInsn = 8 +pkg syscall (netbsd-arm64-cgo), const SizeofBpfInsn ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofBpfProgram = 16 +pkg syscall (netbsd-arm64-cgo), const SizeofBpfProgram ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofBpfStat = 128 +pkg syscall (netbsd-arm64-cgo), const SizeofBpfStat ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofBpfVersion = 4 +pkg syscall (netbsd-arm64-cgo), const SizeofBpfVersion ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofCmsghdr = 12 +pkg syscall (netbsd-arm64-cgo), const SizeofCmsghdr ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofICMPv6Filter = 32 +pkg syscall (netbsd-arm64-cgo), const SizeofICMPv6Filter ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofIPMreq = 8 +pkg syscall (netbsd-arm64-cgo), const SizeofIPMreq ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofIPv6MTUInfo = 32 +pkg syscall (netbsd-arm64-cgo), const SizeofIPv6MTUInfo ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofIPv6Mreq = 20 +pkg syscall (netbsd-arm64-cgo), const SizeofIPv6Mreq ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofIfAnnounceMsghdr = 24 +pkg syscall (netbsd-arm64-cgo), const SizeofIfAnnounceMsghdr ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofIfData = 136 +pkg syscall (netbsd-arm64-cgo), const SizeofIfData ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofIfMsghdr = 152 +pkg syscall (netbsd-arm64-cgo), const SizeofIfMsghdr ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofIfaMsghdr = 24 +pkg syscall (netbsd-arm64-cgo), const SizeofIfaMsghdr ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofInet6Pktinfo = 20 +pkg syscall (netbsd-arm64-cgo), const SizeofInet6Pktinfo ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofLinger = 8 +pkg syscall (netbsd-arm64-cgo), const SizeofLinger ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofMsghdr = 48 +pkg syscall (netbsd-arm64-cgo), const SizeofMsghdr ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofRtMetrics = 80 +pkg syscall (netbsd-arm64-cgo), const SizeofRtMetrics ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofRtMsghdr = 120 +pkg syscall (netbsd-arm64-cgo), const SizeofRtMsghdr ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofSockaddrAny = 108 +pkg syscall (netbsd-arm64-cgo), const SizeofSockaddrAny ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofSockaddrDatalink = 20 +pkg syscall (netbsd-arm64-cgo), const SizeofSockaddrDatalink ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofSockaddrInet4 = 16 +pkg syscall (netbsd-arm64-cgo), const SizeofSockaddrInet4 ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofSockaddrInet6 = 28 +pkg syscall (netbsd-arm64-cgo), const SizeofSockaddrInet6 ideal-int +pkg syscall (netbsd-arm64-cgo), const SizeofSockaddrUnix = 106 +pkg syscall (netbsd-arm64-cgo), const SizeofSockaddrUnix ideal-int +pkg syscall (netbsd-arm64-cgo), const TCIFLUSH = 1 +pkg syscall (netbsd-arm64-cgo), const TCIFLUSH ideal-int +pkg syscall (netbsd-arm64-cgo), const TCIOFLUSH = 3 +pkg syscall (netbsd-arm64-cgo), const TCIOFLUSH ideal-int +pkg syscall (netbsd-arm64-cgo), const TCOFLUSH = 2 +pkg syscall (netbsd-arm64-cgo), const TCOFLUSH ideal-int +pkg syscall (netbsd-arm64-cgo), const TCP_CONGCTL = 32 +pkg syscall (netbsd-arm64-cgo), const TCP_CONGCTL ideal-int +pkg syscall (netbsd-arm64-cgo), const TCP_KEEPCNT = 6 +pkg syscall (netbsd-arm64-cgo), const TCP_KEEPCNT ideal-int +pkg syscall (netbsd-arm64-cgo), const TCP_KEEPIDLE = 3 +pkg syscall (netbsd-arm64-cgo), const TCP_KEEPIDLE ideal-int +pkg syscall (netbsd-arm64-cgo), const TCP_KEEPINIT = 7 +pkg syscall (netbsd-arm64-cgo), const TCP_KEEPINIT ideal-int +pkg syscall (netbsd-arm64-cgo), const TCP_KEEPINTVL = 5 +pkg syscall (netbsd-arm64-cgo), const TCP_KEEPINTVL ideal-int +pkg syscall (netbsd-arm64-cgo), const TCP_MAXBURST = 4 +pkg syscall (netbsd-arm64-cgo), const TCP_MAXBURST ideal-int +pkg syscall (netbsd-arm64-cgo), const TCP_MAXSEG = 2 +pkg syscall (netbsd-arm64-cgo), const TCP_MAXSEG ideal-int +pkg syscall (netbsd-arm64-cgo), const TCP_MAXWIN = 65535 +pkg syscall (netbsd-arm64-cgo), const TCP_MAXWIN ideal-int +pkg syscall (netbsd-arm64-cgo), const TCP_MAX_WINSHIFT = 14 +pkg syscall (netbsd-arm64-cgo), const TCP_MAX_WINSHIFT ideal-int +pkg syscall (netbsd-arm64-cgo), const TCP_MD5SIG = 16 +pkg syscall (netbsd-arm64-cgo), const TCP_MD5SIG ideal-int +pkg syscall (netbsd-arm64-cgo), const TCP_MINMSS = 216 +pkg syscall (netbsd-arm64-cgo), const TCP_MINMSS ideal-int +pkg syscall (netbsd-arm64-cgo), const TCP_MSS = 536 +pkg syscall (netbsd-arm64-cgo), const TCP_MSS ideal-int +pkg syscall (netbsd-arm64-cgo), const TCSAFLUSH = 2 +pkg syscall (netbsd-arm64-cgo), const TCSAFLUSH ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCCBRK = 536900730 +pkg syscall (netbsd-arm64-cgo), const TIOCCBRK ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCCDTR = 536900728 +pkg syscall (netbsd-arm64-cgo), const TIOCCDTR ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCCONS = 2147775586 +pkg syscall (netbsd-arm64-cgo), const TIOCCONS ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCDCDTIMESTAMP = 1074820184 +pkg syscall (netbsd-arm64-cgo), const TIOCDCDTIMESTAMP ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCDRAIN = 536900702 +pkg syscall (netbsd-arm64-cgo), const TIOCDRAIN ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCEXCL = 536900621 +pkg syscall (netbsd-arm64-cgo), const TIOCEXCL ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCEXT = 2147775584 +pkg syscall (netbsd-arm64-cgo), const TIOCEXT ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCFLAG_CDTRCTS = 16 +pkg syscall (netbsd-arm64-cgo), const TIOCFLAG_CDTRCTS ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCFLAG_CLOCAL = 2 +pkg syscall (netbsd-arm64-cgo), const TIOCFLAG_CLOCAL ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCFLAG_CRTSCTS = 4 +pkg syscall (netbsd-arm64-cgo), const TIOCFLAG_CRTSCTS ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCFLAG_MDMBUF = 8 +pkg syscall (netbsd-arm64-cgo), const TIOCFLAG_MDMBUF ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCFLAG_SOFTCAR = 1 +pkg syscall (netbsd-arm64-cgo), const TIOCFLAG_SOFTCAR ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCFLUSH = 2147775504 +pkg syscall (netbsd-arm64-cgo), const TIOCFLUSH ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCGETA = 1076655123 +pkg syscall (netbsd-arm64-cgo), const TIOCGETA ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCGETD = 1074033690 +pkg syscall (netbsd-arm64-cgo), const TIOCGETD ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCGFLAGS = 1074033757 +pkg syscall (netbsd-arm64-cgo), const TIOCGFLAGS ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCGLINED = 1075868738 +pkg syscall (netbsd-arm64-cgo), const TIOCGLINED ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCGPGRP = 1074033783 +pkg syscall (netbsd-arm64-cgo), const TIOCGPGRP ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCGQSIZE = 1074033793 +pkg syscall (netbsd-arm64-cgo), const TIOCGQSIZE ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCGRANTPT = 536900679 +pkg syscall (netbsd-arm64-cgo), const TIOCGRANTPT ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCGSID = 1074033763 +pkg syscall (netbsd-arm64-cgo), const TIOCGSID ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCGSIZE = 1074295912 +pkg syscall (netbsd-arm64-cgo), const TIOCGSIZE ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCGWINSZ = 1074295912 +pkg syscall (netbsd-arm64-cgo), const TIOCGWINSZ ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCMBIC = 2147775595 +pkg syscall (netbsd-arm64-cgo), const TIOCMBIC ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCMBIS = 2147775596 +pkg syscall (netbsd-arm64-cgo), const TIOCMBIS ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCMGET = 1074033770 +pkg syscall (netbsd-arm64-cgo), const TIOCMGET ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCMSET = 2147775597 +pkg syscall (netbsd-arm64-cgo), const TIOCMSET ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCM_CAR = 64 +pkg syscall (netbsd-arm64-cgo), const TIOCM_CAR ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCM_CD = 64 +pkg syscall (netbsd-arm64-cgo), const TIOCM_CD ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCM_CTS = 32 +pkg syscall (netbsd-arm64-cgo), const TIOCM_CTS ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCM_DSR = 256 +pkg syscall (netbsd-arm64-cgo), const TIOCM_DSR ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCM_DTR = 2 +pkg syscall (netbsd-arm64-cgo), const TIOCM_DTR ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCM_LE = 1 +pkg syscall (netbsd-arm64-cgo), const TIOCM_LE ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCM_RI = 128 +pkg syscall (netbsd-arm64-cgo), const TIOCM_RI ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCM_RNG = 128 +pkg syscall (netbsd-arm64-cgo), const TIOCM_RNG ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCM_RTS = 4 +pkg syscall (netbsd-arm64-cgo), const TIOCM_RTS ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCM_SR = 16 +pkg syscall (netbsd-arm64-cgo), const TIOCM_SR ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCM_ST = 8 +pkg syscall (netbsd-arm64-cgo), const TIOCM_ST ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCNOTTY = 536900721 +pkg syscall (netbsd-arm64-cgo), const TIOCNOTTY ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCNXCL = 536900622 +pkg syscall (netbsd-arm64-cgo), const TIOCNXCL ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCOUTQ = 1074033779 +pkg syscall (netbsd-arm64-cgo), const TIOCOUTQ ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCPKT = 2147775600 +pkg syscall (netbsd-arm64-cgo), const TIOCPKT ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCPKT_DATA = 0 +pkg syscall (netbsd-arm64-cgo), const TIOCPKT_DATA ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCPKT_DOSTOP = 32 +pkg syscall (netbsd-arm64-cgo), const TIOCPKT_DOSTOP ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCPKT_FLUSHREAD = 1 +pkg syscall (netbsd-arm64-cgo), const TIOCPKT_FLUSHREAD ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCPKT_FLUSHWRITE = 2 +pkg syscall (netbsd-arm64-cgo), const TIOCPKT_FLUSHWRITE ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCPKT_IOCTL = 64 +pkg syscall (netbsd-arm64-cgo), const TIOCPKT_IOCTL ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCPKT_NOSTOP = 16 +pkg syscall (netbsd-arm64-cgo), const TIOCPKT_NOSTOP ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCPKT_START = 8 +pkg syscall (netbsd-arm64-cgo), const TIOCPKT_START ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCPKT_STOP = 4 +pkg syscall (netbsd-arm64-cgo), const TIOCPKT_STOP ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCPTMGET = 1076393030 +pkg syscall (netbsd-arm64-cgo), const TIOCPTMGET ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCPTSNAME = 1076393032 +pkg syscall (netbsd-arm64-cgo), const TIOCPTSNAME ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCRCVFRAME = 2148037701 +pkg syscall (netbsd-arm64-cgo), const TIOCRCVFRAME ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCREMOTE = 2147775593 +pkg syscall (netbsd-arm64-cgo), const TIOCREMOTE ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCSBRK = 536900731 +pkg syscall (netbsd-arm64-cgo), const TIOCSBRK ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCSCTTY = 536900705 +pkg syscall (netbsd-arm64-cgo), const TIOCSCTTY ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCSDTR = 536900729 +pkg syscall (netbsd-arm64-cgo), const TIOCSDTR ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCSETA = 2150396948 +pkg syscall (netbsd-arm64-cgo), const TIOCSETA ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCSETAF = 2150396950 +pkg syscall (netbsd-arm64-cgo), const TIOCSETAF ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCSETAW = 2150396949 +pkg syscall (netbsd-arm64-cgo), const TIOCSETAW ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCSETD = 2147775515 +pkg syscall (netbsd-arm64-cgo), const TIOCSETD ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCSFLAGS = 2147775580 +pkg syscall (netbsd-arm64-cgo), const TIOCSFLAGS ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCSIG = 536900703 +pkg syscall (netbsd-arm64-cgo), const TIOCSIG ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCSLINED = 2149610563 +pkg syscall (netbsd-arm64-cgo), const TIOCSLINED ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCSPGRP = 2147775606 +pkg syscall (netbsd-arm64-cgo), const TIOCSPGRP ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCSQSIZE = 2147775616 +pkg syscall (netbsd-arm64-cgo), const TIOCSQSIZE ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCSSIZE = 2148037735 +pkg syscall (netbsd-arm64-cgo), const TIOCSSIZE ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCSTART = 536900718 +pkg syscall (netbsd-arm64-cgo), const TIOCSTART ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCSTAT = 2147775589 +pkg syscall (netbsd-arm64-cgo), const TIOCSTAT ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCSTI = 2147578994 +pkg syscall (netbsd-arm64-cgo), const TIOCSTI ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCSTOP = 536900719 +pkg syscall (netbsd-arm64-cgo), const TIOCSTOP ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCSWINSZ = 2148037735 +pkg syscall (netbsd-arm64-cgo), const TIOCSWINSZ ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCUCNTL = 2147775590 +pkg syscall (netbsd-arm64-cgo), const TIOCUCNTL ideal-int +pkg syscall (netbsd-arm64-cgo), const TIOCXMTFRAME = 2148037700 +pkg syscall (netbsd-arm64-cgo), const TIOCXMTFRAME ideal-int +pkg syscall (netbsd-arm64-cgo), const TOSTOP = 4194304 +pkg syscall (netbsd-arm64-cgo), const TOSTOP ideal-int +pkg syscall (netbsd-arm64-cgo), const VDISCARD = 15 +pkg syscall (netbsd-arm64-cgo), const VDISCARD ideal-int +pkg syscall (netbsd-arm64-cgo), const VDSUSP = 11 +pkg syscall (netbsd-arm64-cgo), const VDSUSP ideal-int +pkg syscall (netbsd-arm64-cgo), const VEOF = 0 +pkg syscall (netbsd-arm64-cgo), const VEOF ideal-int +pkg syscall (netbsd-arm64-cgo), const VEOL = 1 +pkg syscall (netbsd-arm64-cgo), const VEOL ideal-int +pkg syscall (netbsd-arm64-cgo), const VEOL2 = 2 +pkg syscall (netbsd-arm64-cgo), const VEOL2 ideal-int +pkg syscall (netbsd-arm64-cgo), const VERASE = 3 +pkg syscall (netbsd-arm64-cgo), const VERASE ideal-int +pkg syscall (netbsd-arm64-cgo), const VINTR = 8 +pkg syscall (netbsd-arm64-cgo), const VINTR ideal-int +pkg syscall (netbsd-arm64-cgo), const VKILL = 5 +pkg syscall (netbsd-arm64-cgo), const VKILL ideal-int +pkg syscall (netbsd-arm64-cgo), const VLNEXT = 14 +pkg syscall (netbsd-arm64-cgo), const VLNEXT ideal-int +pkg syscall (netbsd-arm64-cgo), const VMIN = 16 +pkg syscall (netbsd-arm64-cgo), const VMIN ideal-int +pkg syscall (netbsd-arm64-cgo), const VQUIT = 9 +pkg syscall (netbsd-arm64-cgo), const VQUIT ideal-int +pkg syscall (netbsd-arm64-cgo), const VREPRINT = 6 +pkg syscall (netbsd-arm64-cgo), const VREPRINT ideal-int +pkg syscall (netbsd-arm64-cgo), const VSTART = 12 +pkg syscall (netbsd-arm64-cgo), const VSTART ideal-int +pkg syscall (netbsd-arm64-cgo), const VSTATUS = 18 +pkg syscall (netbsd-arm64-cgo), const VSTATUS ideal-int +pkg syscall (netbsd-arm64-cgo), const VSTOP = 13 +pkg syscall (netbsd-arm64-cgo), const VSTOP ideal-int +pkg syscall (netbsd-arm64-cgo), const VSUSP = 10 +pkg syscall (netbsd-arm64-cgo), const VSUSP ideal-int +pkg syscall (netbsd-arm64-cgo), const VTIME = 17 +pkg syscall (netbsd-arm64-cgo), const VTIME ideal-int +pkg syscall (netbsd-arm64-cgo), const VWERASE = 4 +pkg syscall (netbsd-arm64-cgo), const VWERASE ideal-int +pkg syscall (netbsd-arm64-cgo), const WALL = 8 +pkg syscall (netbsd-arm64-cgo), const WALL ideal-int +pkg syscall (netbsd-arm64-cgo), const WALLSIG = 8 +pkg syscall (netbsd-arm64-cgo), const WALLSIG ideal-int +pkg syscall (netbsd-arm64-cgo), const WALTSIG = 4 +pkg syscall (netbsd-arm64-cgo), const WALTSIG ideal-int +pkg syscall (netbsd-arm64-cgo), const WCLONE = 4 +pkg syscall (netbsd-arm64-cgo), const WCLONE ideal-int +pkg syscall (netbsd-arm64-cgo), const WCOREFLAG = 128 +pkg syscall (netbsd-arm64-cgo), const WCOREFLAG ideal-int +pkg syscall (netbsd-arm64-cgo), const WNOHANG = 1 +pkg syscall (netbsd-arm64-cgo), const WNOHANG ideal-int +pkg syscall (netbsd-arm64-cgo), const WNOWAIT = 65536 +pkg syscall (netbsd-arm64-cgo), const WNOWAIT ideal-int +pkg syscall (netbsd-arm64-cgo), const WNOZOMBIE = 131072 +pkg syscall (netbsd-arm64-cgo), const WNOZOMBIE ideal-int +pkg syscall (netbsd-arm64-cgo), const WOPTSCHECKED = 262144 +pkg syscall (netbsd-arm64-cgo), const WOPTSCHECKED ideal-int +pkg syscall (netbsd-arm64-cgo), const WSTOPPED = 127 +pkg syscall (netbsd-arm64-cgo), const WSTOPPED ideal-int +pkg syscall (netbsd-arm64-cgo), const WUNTRACED = 2 +pkg syscall (netbsd-arm64-cgo), const WUNTRACED ideal-int +pkg syscall (netbsd-arm64-cgo), func Accept(int) (int, Sockaddr, error) +pkg syscall (netbsd-arm64-cgo), func Accept4(int, int) (int, Sockaddr, error) +pkg syscall (netbsd-arm64-cgo), func Access(string, uint32) error +pkg syscall (netbsd-arm64-cgo), func Adjtime(*Timeval, *Timeval) error +pkg syscall (netbsd-arm64-cgo), func Bind(int, Sockaddr) error +pkg syscall (netbsd-arm64-cgo), func BpfBuflen(int) (int, error) +pkg syscall (netbsd-arm64-cgo), func BpfDatalink(int) (int, error) +pkg syscall (netbsd-arm64-cgo), func BpfHeadercmpl(int) (int, error) +pkg syscall (netbsd-arm64-cgo), func BpfInterface(int, string) (string, error) +pkg syscall (netbsd-arm64-cgo), func BpfJump(int, int, int, int) *BpfInsn +pkg syscall (netbsd-arm64-cgo), func BpfStats(int) (*BpfStat, error) +pkg syscall (netbsd-arm64-cgo), func BpfStmt(int, int) *BpfInsn +pkg syscall (netbsd-arm64-cgo), func BpfTimeout(int) (*Timeval, error) +pkg syscall (netbsd-arm64-cgo), func CheckBpfVersion(int) error +pkg syscall (netbsd-arm64-cgo), func Chflags(string, int) error +pkg syscall (netbsd-arm64-cgo), func Chroot(string) error +pkg syscall (netbsd-arm64-cgo), func Close(int) error +pkg syscall (netbsd-arm64-cgo), func CloseOnExec(int) +pkg syscall (netbsd-arm64-cgo), func CmsgLen(int) int +pkg syscall (netbsd-arm64-cgo), func CmsgSpace(int) int +pkg syscall (netbsd-arm64-cgo), func Connect(int, Sockaddr) error +pkg syscall (netbsd-arm64-cgo), func Dup(int) (int, error) +pkg syscall (netbsd-arm64-cgo), func Dup2(int, int) error +pkg syscall (netbsd-arm64-cgo), func Fchdir(int) error +pkg syscall (netbsd-arm64-cgo), func Fchflags(int, int) error +pkg syscall (netbsd-arm64-cgo), func Fchmod(int, uint32) error +pkg syscall (netbsd-arm64-cgo), func Fchown(int, int, int) error +pkg syscall (netbsd-arm64-cgo), func FcntlFlock(uintptr, int, *Flock_t) error +pkg syscall (netbsd-arm64-cgo), func Flock(int, int) error +pkg syscall (netbsd-arm64-cgo), func FlushBpf(int) error +pkg syscall (netbsd-arm64-cgo), func ForkExec(string, []string, *ProcAttr) (int, error) +pkg syscall (netbsd-arm64-cgo), func Fpathconf(int, int) (int, error) +pkg syscall (netbsd-arm64-cgo), func Fstat(int, *Stat_t) error +pkg syscall (netbsd-arm64-cgo), func Fsync(int) error +pkg syscall (netbsd-arm64-cgo), func Ftruncate(int, int64) error +pkg syscall (netbsd-arm64-cgo), func Futimes(int, []Timeval) error +pkg syscall (netbsd-arm64-cgo), func Getdirentries(int, []uint8, *uintptr) (int, error) +pkg syscall (netbsd-arm64-cgo), func Getpeername(int) (Sockaddr, error) +pkg syscall (netbsd-arm64-cgo), func Getpgid(int) (int, error) +pkg syscall (netbsd-arm64-cgo), func Getpgrp() int +pkg syscall (netbsd-arm64-cgo), func Getpriority(int, int) (int, error) +pkg syscall (netbsd-arm64-cgo), func Getrlimit(int, *Rlimit) error +pkg syscall (netbsd-arm64-cgo), func Getrusage(int, *Rusage) error +pkg syscall (netbsd-arm64-cgo), func Getsid(int) (int, error) +pkg syscall (netbsd-arm64-cgo), func Getsockname(int) (Sockaddr, error) +pkg syscall (netbsd-arm64-cgo), func GetsockoptByte(int, int, int) (uint8, error) +pkg syscall (netbsd-arm64-cgo), func GetsockoptICMPv6Filter(int, int, int) (*ICMPv6Filter, error) +pkg syscall (netbsd-arm64-cgo), func GetsockoptIPMreq(int, int, int) (*IPMreq, error) +pkg syscall (netbsd-arm64-cgo), func GetsockoptIPv6MTUInfo(int, int, int) (*IPv6MTUInfo, error) +pkg syscall (netbsd-arm64-cgo), func GetsockoptIPv6Mreq(int, int, int) (*IPv6Mreq, error) +pkg syscall (netbsd-arm64-cgo), func GetsockoptInet4Addr(int, int, int) ([4]uint8, error) +pkg syscall (netbsd-arm64-cgo), func GetsockoptInt(int, int, int) (int, error) +pkg syscall (netbsd-arm64-cgo), func Issetugid() bool +pkg syscall (netbsd-arm64-cgo), func Kevent(int, []Kevent_t, []Kevent_t, *Timespec) (int, error) +pkg syscall (netbsd-arm64-cgo), func Kill(int, Signal) error +pkg syscall (netbsd-arm64-cgo), func Kqueue() (int, error) +pkg syscall (netbsd-arm64-cgo), func Listen(int, int) error +pkg syscall (netbsd-arm64-cgo), func Lstat(string, *Stat_t) error +pkg syscall (netbsd-arm64-cgo), func Mkfifo(string, uint32) error +pkg syscall (netbsd-arm64-cgo), func Mknod(string, uint32, int) error +pkg syscall (netbsd-arm64-cgo), func Mmap(int, int64, int, int, int) ([]uint8, error) +pkg syscall (netbsd-arm64-cgo), func Munmap([]uint8) error +pkg syscall (netbsd-arm64-cgo), func Nanosleep(*Timespec, *Timespec) error +pkg syscall (netbsd-arm64-cgo), func Open(string, int, uint32) (int, error) +pkg syscall (netbsd-arm64-cgo), func ParseDirent([]uint8, int, []string) (int, int, []string) +pkg syscall (netbsd-arm64-cgo), func ParseRoutingMessage([]uint8) ([]RoutingMessage, error) +pkg syscall (netbsd-arm64-cgo), func ParseRoutingSockaddr(RoutingMessage) ([]Sockaddr, error) +pkg syscall (netbsd-arm64-cgo), func ParseSocketControlMessage([]uint8) ([]SocketControlMessage, error) +pkg syscall (netbsd-arm64-cgo), func ParseUnixRights(*SocketControlMessage) ([]int, error) +pkg syscall (netbsd-arm64-cgo), func Pathconf(string, int) (int, error) +pkg syscall (netbsd-arm64-cgo), func Pipe([]int) error +pkg syscall (netbsd-arm64-cgo), func Pipe2([]int, int) error +pkg syscall (netbsd-arm64-cgo), func Pread(int, []uint8, int64) (int, error) +pkg syscall (netbsd-arm64-cgo), func Pwrite(int, []uint8, int64) (int, error) +pkg syscall (netbsd-arm64-cgo), func RawSyscall(uintptr, uintptr, uintptr, uintptr) (uintptr, uintptr, Errno) +pkg syscall (netbsd-arm64-cgo), func RawSyscall6(uintptr, uintptr, uintptr, uintptr, uintptr, uintptr, uintptr) (uintptr, uintptr, Errno) +pkg syscall (netbsd-arm64-cgo), func Read(int, []uint8) (int, error) +pkg syscall (netbsd-arm64-cgo), func ReadDirent(int, []uint8) (int, error) +pkg syscall (netbsd-arm64-cgo), func Recvfrom(int, []uint8, int) (int, Sockaddr, error) +pkg syscall (netbsd-arm64-cgo), func Recvmsg(int, []uint8, []uint8, int) (int, int, int, Sockaddr, error) +pkg syscall (netbsd-arm64-cgo), func Revoke(string) error +pkg syscall (netbsd-arm64-cgo), func RouteRIB(int, int) ([]uint8, error) +pkg syscall (netbsd-arm64-cgo), func Seek(int, int64, int) (int64, error) +pkg syscall (netbsd-arm64-cgo), func Select(int, *FdSet, *FdSet, *FdSet, *Timeval) error +pkg syscall (netbsd-arm64-cgo), func Sendfile(int, int, *int64, int) (int, error) +pkg syscall (netbsd-arm64-cgo), func Sendmsg(int, []uint8, []uint8, Sockaddr, int) error +pkg syscall (netbsd-arm64-cgo), func SendmsgN(int, []uint8, []uint8, Sockaddr, int) (int, error) +pkg syscall (netbsd-arm64-cgo), func Sendto(int, []uint8, int, Sockaddr) error +pkg syscall (netbsd-arm64-cgo), func SetBpf(int, []BpfInsn) error +pkg syscall (netbsd-arm64-cgo), func SetBpfBuflen(int, int) (int, error) +pkg syscall (netbsd-arm64-cgo), func SetBpfDatalink(int, int) (int, error) +pkg syscall (netbsd-arm64-cgo), func SetBpfHeadercmpl(int, int) error +pkg syscall (netbsd-arm64-cgo), func SetBpfImmediate(int, int) error +pkg syscall (netbsd-arm64-cgo), func SetBpfInterface(int, string) error +pkg syscall (netbsd-arm64-cgo), func SetBpfPromisc(int, int) error +pkg syscall (netbsd-arm64-cgo), func SetBpfTimeout(int, *Timeval) error +pkg syscall (netbsd-arm64-cgo), func SetKevent(*Kevent_t, int, int, int) +pkg syscall (netbsd-arm64-cgo), func SetNonblock(int, bool) error +pkg syscall (netbsd-arm64-cgo), func Setegid(int) error +pkg syscall (netbsd-arm64-cgo), func Seteuid(int) error +pkg syscall (netbsd-arm64-cgo), func Setgid(int) error +pkg syscall (netbsd-arm64-cgo), func Setgroups([]int) error +pkg syscall (netbsd-arm64-cgo), func Setpgid(int, int) error +pkg syscall (netbsd-arm64-cgo), func Setpriority(int, int, int) error +pkg syscall (netbsd-arm64-cgo), func Setregid(int, int) error +pkg syscall (netbsd-arm64-cgo), func Setreuid(int, int) error +pkg syscall (netbsd-arm64-cgo), func Setrlimit(int, *Rlimit) error +pkg syscall (netbsd-arm64-cgo), func Setsid() (int, error) +pkg syscall (netbsd-arm64-cgo), func SetsockoptByte(int, int, int, uint8) error +pkg syscall (netbsd-arm64-cgo), func SetsockoptICMPv6Filter(int, int, int, *ICMPv6Filter) error +pkg syscall (netbsd-arm64-cgo), func SetsockoptIPMreq(int, int, int, *IPMreq) error +pkg syscall (netbsd-arm64-cgo), func SetsockoptIPv6Mreq(int, int, int, *IPv6Mreq) error +pkg syscall (netbsd-arm64-cgo), func SetsockoptInet4Addr(int, int, int, [4]uint8) error +pkg syscall (netbsd-arm64-cgo), func SetsockoptInt(int, int, int, int) error +pkg syscall (netbsd-arm64-cgo), func SetsockoptLinger(int, int, int, *Linger) error +pkg syscall (netbsd-arm64-cgo), func SetsockoptString(int, int, int, string) error +pkg syscall (netbsd-arm64-cgo), func SetsockoptTimeval(int, int, int, *Timeval) error +pkg syscall (netbsd-arm64-cgo), func Settimeofday(*Timeval) error +pkg syscall (netbsd-arm64-cgo), func Setuid(int) error +pkg syscall (netbsd-arm64-cgo), func Shutdown(int, int) error +pkg syscall (netbsd-arm64-cgo), func SlicePtrFromStrings([]string) ([]*uint8, error) +pkg syscall (netbsd-arm64-cgo), func Socket(int, int, int) (int, error) +pkg syscall (netbsd-arm64-cgo), func Socketpair(int, int, int) ([2]int, error) +pkg syscall (netbsd-arm64-cgo), func Stat(string, *Stat_t) error +pkg syscall (netbsd-arm64-cgo), func StringSlicePtr([]string) []*uint8 +pkg syscall (netbsd-arm64-cgo), func Sync() error +pkg syscall (netbsd-arm64-cgo), func Syscall(uintptr, uintptr, uintptr, uintptr) (uintptr, uintptr, Errno) +pkg syscall (netbsd-arm64-cgo), func Syscall6(uintptr, uintptr, uintptr, uintptr, uintptr, uintptr, uintptr) (uintptr, uintptr, Errno) +pkg syscall (netbsd-arm64-cgo), func Syscall9(uintptr, uintptr, uintptr, uintptr, uintptr, uintptr, uintptr, uintptr, uintptr, uintptr) (uintptr, uintptr, Errno) +pkg syscall (netbsd-arm64-cgo), func Sysctl(string) (string, error) +pkg syscall (netbsd-arm64-cgo), func SysctlUint32(string) (uint32, error) +pkg syscall (netbsd-arm64-cgo), func TimevalToNsec(Timeval) int64 +pkg syscall (netbsd-arm64-cgo), func Truncate(string, int64) error +pkg syscall (netbsd-arm64-cgo), func Umask(int) int +pkg syscall (netbsd-arm64-cgo), func UnixRights(...int) []uint8 +pkg syscall (netbsd-arm64-cgo), func Unmount(string, int) error +pkg syscall (netbsd-arm64-cgo), func Wait4(int, *WaitStatus, int, *Rusage) (int, error) +pkg syscall (netbsd-arm64-cgo), func Write(int, []uint8) (int, error) +pkg syscall (netbsd-arm64-cgo), method (*Cmsghdr) SetLen(int) +pkg syscall (netbsd-arm64-cgo), method (*Iovec) SetLen(int) +pkg syscall (netbsd-arm64-cgo), method (*Msghdr) SetControllen(int) +pkg syscall (netbsd-arm64-cgo), type BpfHdr struct +pkg syscall (netbsd-arm64-cgo), type BpfHdr struct, Caplen uint32 +pkg syscall (netbsd-arm64-cgo), type BpfHdr struct, Datalen uint32 +pkg syscall (netbsd-arm64-cgo), type BpfHdr struct, Hdrlen uint16 +pkg syscall (netbsd-arm64-cgo), type BpfHdr struct, Pad_cgo_0 [6]uint8 +pkg syscall (netbsd-arm64-cgo), type BpfHdr struct, Tstamp BpfTimeval +pkg syscall (netbsd-arm64-cgo), type BpfInsn struct +pkg syscall (netbsd-arm64-cgo), type BpfInsn struct, Code uint16 +pkg syscall (netbsd-arm64-cgo), type BpfInsn struct, Jf uint8 +pkg syscall (netbsd-arm64-cgo), type BpfInsn struct, Jt uint8 +pkg syscall (netbsd-arm64-cgo), type BpfInsn struct, K uint32 +pkg syscall (netbsd-arm64-cgo), type BpfProgram struct +pkg syscall (netbsd-arm64-cgo), type BpfProgram struct, Insns *BpfInsn +pkg syscall (netbsd-arm64-cgo), type BpfProgram struct, Len uint32 +pkg syscall (netbsd-arm64-cgo), type BpfProgram struct, Pad_cgo_0 [4]uint8 +pkg syscall (netbsd-arm64-cgo), type BpfStat struct +pkg syscall (netbsd-arm64-cgo), type BpfStat struct, Capt uint64 +pkg syscall (netbsd-arm64-cgo), type BpfStat struct, Drop uint64 +pkg syscall (netbsd-arm64-cgo), type BpfStat struct, Padding [13]uint64 +pkg syscall (netbsd-arm64-cgo), type BpfStat struct, Recv uint64 +pkg syscall (netbsd-arm64-cgo), type BpfTimeval struct +pkg syscall (netbsd-arm64-cgo), type BpfTimeval struct, Sec int64 +pkg syscall (netbsd-arm64-cgo), type BpfTimeval struct, Usec int64 +pkg syscall (netbsd-arm64-cgo), type BpfVersion struct +pkg syscall (netbsd-arm64-cgo), type BpfVersion struct, Major uint16 +pkg syscall (netbsd-arm64-cgo), type BpfVersion struct, Minor uint16 +pkg syscall (netbsd-arm64-cgo), type Cmsghdr struct +pkg syscall (netbsd-arm64-cgo), type Cmsghdr struct, Len uint32 +pkg syscall (netbsd-arm64-cgo), type Cmsghdr struct, Level int32 +pkg syscall (netbsd-arm64-cgo), type Cmsghdr struct, Type int32 +pkg syscall (netbsd-arm64-cgo), type Credential struct +pkg syscall (netbsd-arm64-cgo), type Credential struct, Gid uint32 +pkg syscall (netbsd-arm64-cgo), type Credential struct, Groups []uint32 +pkg syscall (netbsd-arm64-cgo), type Credential struct, NoSetGroups bool +pkg syscall (netbsd-arm64-cgo), type Credential struct, Uid uint32 +pkg syscall (netbsd-arm64-cgo), type Dirent struct +pkg syscall (netbsd-arm64-cgo), type Dirent struct, Fileno uint64 +pkg syscall (netbsd-arm64-cgo), type Dirent struct, Name [512]int8 +pkg syscall (netbsd-arm64-cgo), type Dirent struct, Namlen uint16 +pkg syscall (netbsd-arm64-cgo), type Dirent struct, Pad_cgo_0 [3]uint8 +pkg syscall (netbsd-arm64-cgo), type Dirent struct, Reclen uint16 +pkg syscall (netbsd-arm64-cgo), type Dirent struct, Type uint8 +pkg syscall (netbsd-arm64-cgo), type FdSet struct +pkg syscall (netbsd-arm64-cgo), type FdSet struct, Bits [8]uint32 +pkg syscall (netbsd-arm64-cgo), type Flock_t struct +pkg syscall (netbsd-arm64-cgo), type Flock_t struct, Len int64 +pkg syscall (netbsd-arm64-cgo), type Flock_t struct, Pid int32 +pkg syscall (netbsd-arm64-cgo), type Flock_t struct, Start int64 +pkg syscall (netbsd-arm64-cgo), type Flock_t struct, Type int16 +pkg syscall (netbsd-arm64-cgo), type Flock_t struct, Whence int16 +pkg syscall (netbsd-arm64-cgo), type Fsid struct +pkg syscall (netbsd-arm64-cgo), type Fsid struct, X__fsid_val [2]int32 +pkg syscall (netbsd-arm64-cgo), type ICMPv6Filter struct +pkg syscall (netbsd-arm64-cgo), type ICMPv6Filter struct, Filt [8]uint32 +pkg syscall (netbsd-arm64-cgo), type IPv6MTUInfo struct +pkg syscall (netbsd-arm64-cgo), type IPv6MTUInfo struct, Addr RawSockaddrInet6 +pkg syscall (netbsd-arm64-cgo), type IPv6MTUInfo struct, Mtu uint32 +pkg syscall (netbsd-arm64-cgo), type IfAnnounceMsghdr struct +pkg syscall (netbsd-arm64-cgo), type IfAnnounceMsghdr struct, Index uint16 +pkg syscall (netbsd-arm64-cgo), type IfAnnounceMsghdr struct, Msglen uint16 +pkg syscall (netbsd-arm64-cgo), type IfAnnounceMsghdr struct, Name [16]int8 +pkg syscall (netbsd-arm64-cgo), type IfAnnounceMsghdr struct, Type uint8 +pkg syscall (netbsd-arm64-cgo), type IfAnnounceMsghdr struct, Version uint8 +pkg syscall (netbsd-arm64-cgo), type IfAnnounceMsghdr struct, What uint16 +pkg syscall (netbsd-arm64-cgo), type IfData struct +pkg syscall (netbsd-arm64-cgo), type IfData struct, Addrlen uint8 +pkg syscall (netbsd-arm64-cgo), type IfData struct, Baudrate uint64 +pkg syscall (netbsd-arm64-cgo), type IfData struct, Collisions uint64 +pkg syscall (netbsd-arm64-cgo), type IfData struct, Hdrlen uint8 +pkg syscall (netbsd-arm64-cgo), type IfData struct, Ibytes uint64 +pkg syscall (netbsd-arm64-cgo), type IfData struct, Ierrors uint64 +pkg syscall (netbsd-arm64-cgo), type IfData struct, Imcasts uint64 +pkg syscall (netbsd-arm64-cgo), type IfData struct, Ipackets uint64 +pkg syscall (netbsd-arm64-cgo), type IfData struct, Iqdrops uint64 +pkg syscall (netbsd-arm64-cgo), type IfData struct, Lastchange Timespec +pkg syscall (netbsd-arm64-cgo), type IfData struct, Link_state int32 +pkg syscall (netbsd-arm64-cgo), type IfData struct, Metric uint64 +pkg syscall (netbsd-arm64-cgo), type IfData struct, Mtu uint64 +pkg syscall (netbsd-arm64-cgo), type IfData struct, Noproto uint64 +pkg syscall (netbsd-arm64-cgo), type IfData struct, Obytes uint64 +pkg syscall (netbsd-arm64-cgo), type IfData struct, Oerrors uint64 +pkg syscall (netbsd-arm64-cgo), type IfData struct, Omcasts uint64 +pkg syscall (netbsd-arm64-cgo), type IfData struct, Opackets uint64 +pkg syscall (netbsd-arm64-cgo), type IfData struct, Pad_cgo_0 [1]uint8 +pkg syscall (netbsd-arm64-cgo), type IfData struct, Type uint8 +pkg syscall (netbsd-arm64-cgo), type IfMsghdr struct +pkg syscall (netbsd-arm64-cgo), type IfMsghdr struct, Addrs int32 +pkg syscall (netbsd-arm64-cgo), type IfMsghdr struct, Data IfData +pkg syscall (netbsd-arm64-cgo), type IfMsghdr struct, Flags int32 +pkg syscall (netbsd-arm64-cgo), type IfMsghdr struct, Index uint16 +pkg syscall (netbsd-arm64-cgo), type IfMsghdr struct, Msglen uint16 +pkg syscall (netbsd-arm64-cgo), type IfMsghdr struct, Pad_cgo_0 [2]uint8 +pkg syscall (netbsd-arm64-cgo), type IfMsghdr struct, Type uint8 +pkg syscall (netbsd-arm64-cgo), type IfMsghdr struct, Version uint8 +pkg syscall (netbsd-arm64-cgo), type IfaMsghdr struct +pkg syscall (netbsd-arm64-cgo), type IfaMsghdr struct, Addrs int32 +pkg syscall (netbsd-arm64-cgo), type IfaMsghdr struct, Flags int32 +pkg syscall (netbsd-arm64-cgo), type IfaMsghdr struct, Index uint16 +pkg syscall (netbsd-arm64-cgo), type IfaMsghdr struct, Metric int32 +pkg syscall (netbsd-arm64-cgo), type IfaMsghdr struct, Msglen uint16 +pkg syscall (netbsd-arm64-cgo), type IfaMsghdr struct, Pad_cgo_0 [6]uint8 +pkg syscall (netbsd-arm64-cgo), type IfaMsghdr struct, Type uint8 +pkg syscall (netbsd-arm64-cgo), type IfaMsghdr struct, Version uint8 +pkg syscall (netbsd-arm64-cgo), type Inet6Pktinfo struct +pkg syscall (netbsd-arm64-cgo), type Inet6Pktinfo struct, Addr [16]uint8 +pkg syscall (netbsd-arm64-cgo), type Inet6Pktinfo struct, Ifindex uint32 +pkg syscall (netbsd-arm64-cgo), type InterfaceAddrMessage struct +pkg syscall (netbsd-arm64-cgo), type InterfaceAddrMessage struct, Data []uint8 +pkg syscall (netbsd-arm64-cgo), type InterfaceAddrMessage struct, Header IfaMsghdr +pkg syscall (netbsd-arm64-cgo), type InterfaceAnnounceMessage struct +pkg syscall (netbsd-arm64-cgo), type InterfaceAnnounceMessage struct, Header IfAnnounceMsghdr +pkg syscall (netbsd-arm64-cgo), type InterfaceMessage struct +pkg syscall (netbsd-arm64-cgo), type InterfaceMessage struct, Data []uint8 +pkg syscall (netbsd-arm64-cgo), type InterfaceMessage struct, Header IfMsghdr +pkg syscall (netbsd-arm64-cgo), type Iovec struct +pkg syscall (netbsd-arm64-cgo), type Iovec struct, Base *uint8 +pkg syscall (netbsd-arm64-cgo), type Iovec struct, Len uint64 +pkg syscall (netbsd-arm64-cgo), type Kevent_t struct +pkg syscall (netbsd-arm64-cgo), type Kevent_t struct, Data int64 +pkg syscall (netbsd-arm64-cgo), type Kevent_t struct, Fflags uint32 +pkg syscall (netbsd-arm64-cgo), type Kevent_t struct, Filter uint32 +pkg syscall (netbsd-arm64-cgo), type Kevent_t struct, Flags uint32 +pkg syscall (netbsd-arm64-cgo), type Kevent_t struct, Ident uint64 +pkg syscall (netbsd-arm64-cgo), type Kevent_t struct, Pad_cgo_0 [4]uint8 +pkg syscall (netbsd-arm64-cgo), type Kevent_t struct, Udata int64 +pkg syscall (netbsd-arm64-cgo), type Mclpool [0]uint8 +pkg syscall (netbsd-arm64-cgo), type Msghdr struct +pkg syscall (netbsd-arm64-cgo), type Msghdr struct, Control *uint8 +pkg syscall (netbsd-arm64-cgo), type Msghdr struct, Controllen uint32 +pkg syscall (netbsd-arm64-cgo), type Msghdr struct, Flags int32 +pkg syscall (netbsd-arm64-cgo), type Msghdr struct, Iov *Iovec +pkg syscall (netbsd-arm64-cgo), type Msghdr struct, Iovlen int32 +pkg syscall (netbsd-arm64-cgo), type Msghdr struct, Name *uint8 +pkg syscall (netbsd-arm64-cgo), type Msghdr struct, Namelen uint32 +pkg syscall (netbsd-arm64-cgo), type Msghdr struct, Pad_cgo_0 [4]uint8 +pkg syscall (netbsd-arm64-cgo), type Msghdr struct, Pad_cgo_1 [4]uint8 +pkg syscall (netbsd-arm64-cgo), type RawSockaddr struct, Data [14]int8 +pkg syscall (netbsd-arm64-cgo), type RawSockaddr struct, Family uint8 +pkg syscall (netbsd-arm64-cgo), type RawSockaddr struct, Len uint8 +pkg syscall (netbsd-arm64-cgo), type RawSockaddrAny struct, Pad [92]int8 +pkg syscall (netbsd-arm64-cgo), type RawSockaddrDatalink struct +pkg syscall (netbsd-arm64-cgo), type RawSockaddrDatalink struct, Alen uint8 +pkg syscall (netbsd-arm64-cgo), type RawSockaddrDatalink struct, Data [12]int8 +pkg syscall (netbsd-arm64-cgo), type RawSockaddrDatalink struct, Family uint8 +pkg syscall (netbsd-arm64-cgo), type RawSockaddrDatalink struct, Index uint16 +pkg syscall (netbsd-arm64-cgo), type RawSockaddrDatalink struct, Len uint8 +pkg syscall (netbsd-arm64-cgo), type RawSockaddrDatalink struct, Nlen uint8 +pkg syscall (netbsd-arm64-cgo), type RawSockaddrDatalink struct, Slen uint8 +pkg syscall (netbsd-arm64-cgo), type RawSockaddrDatalink struct, Type uint8 +pkg syscall (netbsd-arm64-cgo), type RawSockaddrInet4 struct, Family uint8 +pkg syscall (netbsd-arm64-cgo), type RawSockaddrInet4 struct, Len uint8 +pkg syscall (netbsd-arm64-cgo), type RawSockaddrInet4 struct, Zero [8]int8 +pkg syscall (netbsd-arm64-cgo), type RawSockaddrInet6 struct, Family uint8 +pkg syscall (netbsd-arm64-cgo), type RawSockaddrInet6 struct, Len uint8 +pkg syscall (netbsd-arm64-cgo), type RawSockaddrUnix struct, Family uint8 +pkg syscall (netbsd-arm64-cgo), type RawSockaddrUnix struct, Len uint8 +pkg syscall (netbsd-arm64-cgo), type RawSockaddrUnix struct, Path [104]int8 +pkg syscall (netbsd-arm64-cgo), type Rlimit struct +pkg syscall (netbsd-arm64-cgo), type Rlimit struct, Cur uint64 +pkg syscall (netbsd-arm64-cgo), type Rlimit struct, Max uint64 +pkg syscall (netbsd-arm64-cgo), type RouteMessage struct +pkg syscall (netbsd-arm64-cgo), type RouteMessage struct, Data []uint8 +pkg syscall (netbsd-arm64-cgo), type RouteMessage struct, Header RtMsghdr +pkg syscall (netbsd-arm64-cgo), type RoutingMessage interface, unexported methods +pkg syscall (netbsd-arm64-cgo), type RtMetrics struct +pkg syscall (netbsd-arm64-cgo), type RtMetrics struct, Expire int64 +pkg syscall (netbsd-arm64-cgo), type RtMetrics struct, Hopcount uint64 +pkg syscall (netbsd-arm64-cgo), type RtMetrics struct, Locks uint64 +pkg syscall (netbsd-arm64-cgo), type RtMetrics struct, Mtu uint64 +pkg syscall (netbsd-arm64-cgo), type RtMetrics struct, Pksent int64 +pkg syscall (netbsd-arm64-cgo), type RtMetrics struct, Recvpipe uint64 +pkg syscall (netbsd-arm64-cgo), type RtMetrics struct, Rtt uint64 +pkg syscall (netbsd-arm64-cgo), type RtMetrics struct, Rttvar uint64 +pkg syscall (netbsd-arm64-cgo), type RtMetrics struct, Sendpipe uint64 +pkg syscall (netbsd-arm64-cgo), type RtMetrics struct, Ssthresh uint64 +pkg syscall (netbsd-arm64-cgo), type RtMsghdr struct +pkg syscall (netbsd-arm64-cgo), type RtMsghdr struct, Addrs int32 +pkg syscall (netbsd-arm64-cgo), type RtMsghdr struct, Errno int32 +pkg syscall (netbsd-arm64-cgo), type RtMsghdr struct, Flags int32 +pkg syscall (netbsd-arm64-cgo), type RtMsghdr struct, Index uint16 +pkg syscall (netbsd-arm64-cgo), type RtMsghdr struct, Inits int32 +pkg syscall (netbsd-arm64-cgo), type RtMsghdr struct, Msglen uint16 +pkg syscall (netbsd-arm64-cgo), type RtMsghdr struct, Pad_cgo_0 [2]uint8 +pkg syscall (netbsd-arm64-cgo), type RtMsghdr struct, Pad_cgo_1 [4]uint8 +pkg syscall (netbsd-arm64-cgo), type RtMsghdr struct, Pid int32 +pkg syscall (netbsd-arm64-cgo), type RtMsghdr struct, Rmx RtMetrics +pkg syscall (netbsd-arm64-cgo), type RtMsghdr struct, Seq int32 +pkg syscall (netbsd-arm64-cgo), type RtMsghdr struct, Type uint8 +pkg syscall (netbsd-arm64-cgo), type RtMsghdr struct, Use int32 +pkg syscall (netbsd-arm64-cgo), type RtMsghdr struct, Version uint8 +pkg syscall (netbsd-arm64-cgo), type Rusage struct, Idrss int64 +pkg syscall (netbsd-arm64-cgo), type Rusage struct, Inblock int64 +pkg syscall (netbsd-arm64-cgo), type Rusage struct, Isrss int64 +pkg syscall (netbsd-arm64-cgo), type Rusage struct, Ixrss int64 +pkg syscall (netbsd-arm64-cgo), type Rusage struct, Majflt int64 +pkg syscall (netbsd-arm64-cgo), type Rusage struct, Maxrss int64 +pkg syscall (netbsd-arm64-cgo), type Rusage struct, Minflt int64 +pkg syscall (netbsd-arm64-cgo), type Rusage struct, Msgrcv int64 +pkg syscall (netbsd-arm64-cgo), type Rusage struct, Msgsnd int64 +pkg syscall (netbsd-arm64-cgo), type Rusage struct, Nivcsw int64 +pkg syscall (netbsd-arm64-cgo), type Rusage struct, Nsignals int64 +pkg syscall (netbsd-arm64-cgo), type Rusage struct, Nswap int64 +pkg syscall (netbsd-arm64-cgo), type Rusage struct, Nvcsw int64 +pkg syscall (netbsd-arm64-cgo), type Rusage struct, Oublock int64 +pkg syscall (netbsd-arm64-cgo), type Rusage struct, Stime Timeval +pkg syscall (netbsd-arm64-cgo), type Rusage struct, Utime Timeval +pkg syscall (netbsd-arm64-cgo), type SockaddrDatalink struct +pkg syscall (netbsd-arm64-cgo), type SockaddrDatalink struct, Alen uint8 +pkg syscall (netbsd-arm64-cgo), type SockaddrDatalink struct, Data [12]int8 +pkg syscall (netbsd-arm64-cgo), type SockaddrDatalink struct, Family uint8 +pkg syscall (netbsd-arm64-cgo), type SockaddrDatalink struct, Index uint16 +pkg syscall (netbsd-arm64-cgo), type SockaddrDatalink struct, Len uint8 +pkg syscall (netbsd-arm64-cgo), type SockaddrDatalink struct, Nlen uint8 +pkg syscall (netbsd-arm64-cgo), type SockaddrDatalink struct, Slen uint8 +pkg syscall (netbsd-arm64-cgo), type SockaddrDatalink struct, Type uint8 +pkg syscall (netbsd-arm64-cgo), type SocketControlMessage struct +pkg syscall (netbsd-arm64-cgo), type SocketControlMessage struct, Data []uint8 +pkg syscall (netbsd-arm64-cgo), type SocketControlMessage struct, Header Cmsghdr +pkg syscall (netbsd-arm64-cgo), type Stat_t struct +pkg syscall (netbsd-arm64-cgo), type Stat_t struct, Atimespec Timespec +pkg syscall (netbsd-arm64-cgo), type Stat_t struct, Birthtimespec Timespec +pkg syscall (netbsd-arm64-cgo), type Stat_t struct, Blksize uint32 +pkg syscall (netbsd-arm64-cgo), type Stat_t struct, Blocks int64 +pkg syscall (netbsd-arm64-cgo), type Stat_t struct, Ctimespec Timespec +pkg syscall (netbsd-arm64-cgo), type Stat_t struct, Dev uint64 +pkg syscall (netbsd-arm64-cgo), type Stat_t struct, Flags uint32 +pkg syscall (netbsd-arm64-cgo), type Stat_t struct, Gen uint32 +pkg syscall (netbsd-arm64-cgo), type Stat_t struct, Gid uint32 +pkg syscall (netbsd-arm64-cgo), type Stat_t struct, Ino uint64 +pkg syscall (netbsd-arm64-cgo), type Stat_t struct, Mode uint32 +pkg syscall (netbsd-arm64-cgo), type Stat_t struct, Mtimespec Timespec +pkg syscall (netbsd-arm64-cgo), type Stat_t struct, Nlink uint32 +pkg syscall (netbsd-arm64-cgo), type Stat_t struct, Pad_cgo_0 [4]uint8 +pkg syscall (netbsd-arm64-cgo), type Stat_t struct, Pad_cgo_1 [4]uint8 +pkg syscall (netbsd-arm64-cgo), type Stat_t struct, Pad_cgo_2 [4]uint8 +pkg syscall (netbsd-arm64-cgo), type Stat_t struct, Rdev uint64 +pkg syscall (netbsd-arm64-cgo), type Stat_t struct, Size int64 +pkg syscall (netbsd-arm64-cgo), type Stat_t struct, Spare [2]uint32 +pkg syscall (netbsd-arm64-cgo), type Stat_t struct, Uid uint32 +pkg syscall (netbsd-arm64-cgo), type Statfs_t [0]uint8 +pkg syscall (netbsd-arm64-cgo), type SysProcAttr struct, Chroot string +pkg syscall (netbsd-arm64-cgo), type SysProcAttr struct, Credential *Credential +pkg syscall (netbsd-arm64-cgo), type SysProcAttr struct, Ctty int +pkg syscall (netbsd-arm64-cgo), type SysProcAttr struct, Foreground bool +pkg syscall (netbsd-arm64-cgo), type SysProcAttr struct, Noctty bool +pkg syscall (netbsd-arm64-cgo), type SysProcAttr struct, Pgid int +pkg syscall (netbsd-arm64-cgo), type SysProcAttr struct, Ptrace bool +pkg syscall (netbsd-arm64-cgo), type SysProcAttr struct, Setctty bool +pkg syscall (netbsd-arm64-cgo), type SysProcAttr struct, Setpgid bool +pkg syscall (netbsd-arm64-cgo), type SysProcAttr struct, Setsid bool +pkg syscall (netbsd-arm64-cgo), type Sysctlnode struct +pkg syscall (netbsd-arm64-cgo), type Sysctlnode struct, Flags uint32 +pkg syscall (netbsd-arm64-cgo), type Sysctlnode struct, Name [32]int8 +pkg syscall (netbsd-arm64-cgo), type Sysctlnode struct, Num int32 +pkg syscall (netbsd-arm64-cgo), type Sysctlnode struct, Un [16]uint8 +pkg syscall (netbsd-arm64-cgo), type Sysctlnode struct, Ver uint32 +pkg syscall (netbsd-arm64-cgo), type Sysctlnode struct, X__rsvd uint32 +pkg syscall (netbsd-arm64-cgo), type Sysctlnode struct, X_sysctl_desc [8]uint8 +pkg syscall (netbsd-arm64-cgo), type Sysctlnode struct, X_sysctl_func [8]uint8 +pkg syscall (netbsd-arm64-cgo), type Sysctlnode struct, X_sysctl_parent [8]uint8 +pkg syscall (netbsd-arm64-cgo), type Sysctlnode struct, X_sysctl_size [8]uint8 +pkg syscall (netbsd-arm64-cgo), type Termios struct +pkg syscall (netbsd-arm64-cgo), type Termios struct, Cc [20]uint8 +pkg syscall (netbsd-arm64-cgo), type Termios struct, Cflag uint32 +pkg syscall (netbsd-arm64-cgo), type Termios struct, Iflag uint32 +pkg syscall (netbsd-arm64-cgo), type Termios struct, Ispeed int32 +pkg syscall (netbsd-arm64-cgo), type Termios struct, Lflag uint32 +pkg syscall (netbsd-arm64-cgo), type Termios struct, Oflag uint32 +pkg syscall (netbsd-arm64-cgo), type Termios struct, Ospeed int32 +pkg syscall (netbsd-arm64-cgo), type Timespec struct, Nsec int64 +pkg syscall (netbsd-arm64-cgo), type Timespec struct, Sec int64 +pkg syscall (netbsd-arm64-cgo), type Timeval struct, Pad_cgo_0 [4]uint8 +pkg syscall (netbsd-arm64-cgo), type Timeval struct, Sec int64 +pkg syscall (netbsd-arm64-cgo), type Timeval struct, Usec int32 +pkg syscall (netbsd-arm64-cgo), type WaitStatus uint32 +pkg syscall (netbsd-arm64-cgo), var Stderr int +pkg syscall (netbsd-arm64-cgo), var Stdin int +pkg syscall (netbsd-arm64-cgo), var Stdout int +pkg syscall (windows-386), type SysProcAttr struct, ProcessAttributes *SecurityAttributes +pkg syscall (windows-386), type SysProcAttr struct, ThreadAttributes *SecurityAttributes +pkg syscall (windows-amd64), type SysProcAttr struct, ProcessAttributes *SecurityAttributes +pkg syscall (windows-amd64), type SysProcAttr struct, ThreadAttributes *SecurityAttributes +pkg syscall, method (Errno) Is(error) bool +pkg testing, func Init() +pkg testing, method (*B) ReportMetric(float64, string) +pkg testing, type BenchmarkResult struct, Extra map[string]float64 pkg text/scanner, const AllowNumberbars = 1024 pkg text/scanner, const AllowNumberbars ideal-int pkg text/scanner, const GoTokens = 2036 +pkg text/template, method (ExecError) Unwrap() error +pkg time, method (Duration) Microseconds() int64 +pkg time, method (Duration) Milliseconds() int64 +pkg unicode, const Version = "11.0.0" +pkg unicode, var Dogra *RangeTable +pkg unicode, var Gunjala_Gondi *RangeTable +pkg unicode, var Hanifi_Rohingya *RangeTable +pkg unicode, var Makasar *RangeTable +pkg unicode, var Medefaidrin *RangeTable +pkg unicode, var Old_Sogdian *RangeTable +pkg unicode, var Sogdian *RangeTable diff --git a/doc/asm.html b/doc/asm.html index debb1e2fc6..77defdbd28 100644 --- a/doc/asm.html +++ b/doc/asm.html @@ -57,59 +57,66 @@ func main() { println(3) } $ GOOS=linux GOARCH=amd64 go tool compile -S x.go # or: go build -gcflags -S x.go - ---- prog list "main" --- -0000 (x.go:3) TEXT main+0(SB),$8-0 -0001 (x.go:3) FUNCDATA $0,gcargs·0+0(SB) -0002 (x.go:3) FUNCDATA $1,gclocals·0+0(SB) -0003 (x.go:4) MOVQ $3,(SP) -0004 (x.go:4) PCDATA $0,$8 -0005 (x.go:4) CALL ,runtime.printint+0(SB) -0006 (x.go:4) PCDATA $0,$-1 -0007 (x.go:4) PCDATA $0,$0 -0008 (x.go:4) CALL ,runtime.printnl+0(SB) -0009 (x.go:4) PCDATA $0,$-1 -0010 (x.go:5) RET , +"".main STEXT size=74 args=0x0 locals=0x10 + 0x0000 00000 (x.go:3) TEXT "".main(SB), $16-0 + 0x0000 00000 (x.go:3) MOVQ (TLS), CX + 0x0009 00009 (x.go:3) CMPQ SP, 16(CX) + 0x000d 00013 (x.go:3) JLS 67 + 0x000f 00015 (x.go:3) SUBQ $16, SP + 0x0013 00019 (x.go:3) MOVQ BP, 8(SP) + 0x0018 00024 (x.go:3) LEAQ 8(SP), BP + 0x001d 00029 (x.go:3) FUNCDATA $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) + 0x001d 00029 (x.go:3) FUNCDATA $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) + 0x001d 00029 (x.go:3) FUNCDATA $2, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) + 0x001d 00029 (x.go:4) PCDATA $0, $0 + 0x001d 00029 (x.go:4) PCDATA $1, $0 + 0x001d 00029 (x.go:4) CALL runtime.printlock(SB) + 0x0022 00034 (x.go:4) MOVQ $3, (SP) + 0x002a 00042 (x.go:4) CALL runtime.printint(SB) + 0x002f 00047 (x.go:4) CALL runtime.printnl(SB) + 0x0034 00052 (x.go:4) CALL runtime.printunlock(SB) + 0x0039 00057 (x.go:5) MOVQ 8(SP), BP + 0x003e 00062 (x.go:5) ADDQ $16, SP + 0x0042 00066 (x.go:5) RET + 0x0043 00067 (x.go:5) NOP + 0x0043 00067 (x.go:3) PCDATA $1, $-1 + 0x0043 00067 (x.go:3) PCDATA $0, $-1 + 0x0043 00067 (x.go:3) CALL runtime.morestack_noctxt(SB) + 0x0048 00072 (x.go:3) JMP 0 ...

The FUNCDATA and PCDATA directives contain information for use by the garbage collector; they are introduced by the compiler. -

- - -

Constants

@@ -266,7 +273,7 @@ that assembly programming is a fraught endeavor.

-In Go object files and binaries, the full name of a symbol is the +In Go object files and binaries, the full name of a symbol is the package path followed by a period and the symbol name: fmt.Printf or math/rand.Int. Because the assembler's parser treats period and slash as punctuation, @@ -485,7 +492,7 @@ even for assembly functions not called directly from Go. At the start of the function, the arguments are assumed to be initialized but the results are assumed uninitialized. If the results will hold live pointers during a call instruction, -the function should start by zeroing the results and then +the function should start by zeroing the results and then executing the pseudo-instruction GO_RESULTS_INITIALIZED. This instruction records that the results are now initialized and should be scanned during stack movement and garbage collection. @@ -503,7 +510,7 @@ on the TEXT instruction. The pointer information can also be omitted if the function contains no call instructions. Otherwise, the local stack frame must not contain pointers, -and the assembly must confirm this fact by executing the +and the assembly must confirm this fact by executing the pseudo-instruction NO_LOCAL_POINTERS. Because stack resizing is implemented by moving the stack, the stack pointer may change during any function call: diff --git a/doc/code.html b/doc/code.html index b6d41ef68c..1e380001e0 100644 --- a/doc/code.html +++ b/doc/code.html @@ -304,12 +304,12 @@ optional: you do not need to use source control to write Go code.

 $ cd $GOPATH/src/github.com/user/hello
 $ git init
-Initialized empty Git repository in /home/user/work/src/github.com/user/hello/.git/
+Initialized empty Git repository in /home/user/go/src/github.com/user/hello/.git/
 $ git add hello.go
 $ git commit -m "initial commit"
 [master (root-commit) 0b4507d] initial commit
- 1 file changed, 1 insertion(+)
-  create mode 100644 hello.go
+ 1 file changed, 7 insertion(+)
+ create mode 100644 hello.go
 

diff --git a/doc/contribute.html b/doc/contribute.html index 68b2387d35..6f2287b410 100644 --- a/doc/contribute.html +++ b/doc/contribute.html @@ -46,7 +46,8 @@ CLA (Contributor License Agreement).

  • Step 2: Configure authentication credentials for the Go Git repository. Visit go.googlesource.com, click -on "Generate Password" (top right), and follow the instructions. +on the gear icon (top right), then on "Obtain password", and follow the +instructions.
  • Step 3: Register for Gerrit, the code review tool used by the Go team, diff --git a/doc/debugging_with_gdb.html b/doc/debugging_with_gdb.html index 3899ac92d5..36ec0bdf37 100644 --- a/doc/debugging_with_gdb.html +++ b/doc/debugging_with_gdb.html @@ -149,6 +149,9 @@ Inspecting goroutines: (gdb) help goroutine For example:
    (gdb) goroutine 12 bt
    +You can inspect all goroutines by passing all instead of a specific goroutine's ID. +For example: +
    (gdb) goroutine all bt
  • diff --git a/doc/devel/release.html b/doc/devel/release.html index 58f9a585ed..69eec330a8 100644 --- a/doc/devel/release.html +++ b/doc/devel/release.html @@ -30,6 +30,45 @@ Go 1.12 is a major release of Go. Read the Go 1.12 Release Notes for more information.

    +

    Minor revisions

    + +

    +go1.12.1 (released 2019/03/14) includes fixes to cgo, the compiler, the go +command, and the fmt, net/smtp, os, +path/filepath, sync, and text/template +packages. See the Go +1.12.1 milestone on our issue tracker for details. +

    + +

    +go1.12.2 (released 2019/04/05) includes fixes to the compiler, the go +command, the runtime, and the doc, net, +net/http/httputil, and os packages. See the +Go +1.12.2 milestone on our issue tracker for details. +

    + +

    +go1.12.3 (released 2019/04/08) was accidentally released without its +intended fix. It is identical to go1.12.2, except for its version +number. The intended fix is in go1.12.4. +

    + +

    +go1.12.4 (released 2019/04/11) fixes an issue where using the prebuilt binary +releases on older versions of GNU/Linux +led to failures +when linking programs that used cgo. +Only Linux users who hit this issue need to update. +

    + +

    +go1.12.5 (released 2019/05/06) includes fixes to the compiler, the linker, +the go command, the runtime, and the os package. See the +Go +1.12.5 milestone on our issue tracker for details. +

    +

    go1.11 (released 2018/08/24)

    @@ -73,6 +112,48 @@ See the Go +1.11.5 milestone on our issue tracker for details. +

    + +

    +go1.11.6 (released 2019/03/14) includes fixes to cgo, the compiler, linker, +runtime, go command, and the crypto/x509, encoding/json, +net, and net/url packages. See the +Go +1.11.6 milestone on our issue tracker for details. +

    + +

    +go1.11.7 (released 2019/04/05) includes fixes to the runtime and the +net packages. See the +Go +1.11.7 milestone on our issue tracker for details. +

    + +

    +go1.11.8 (released 2019/04/08) was accidentally released without its +intended fix. It is identical to go1.11.7, except for its version +number. The intended fix is in go1.11.9. +

    + +

    +go1.11.9 (released 2019/04/11) fixes an issue where using the prebuilt binary +releases on older versions of GNU/Linux +led to failures +when linking programs that used cgo. +Only Linux users who hit this issue need to update. +

    + +

    +go1.11.10 (released 2019/05/06) includes fixes to the runtime and the linker. +See the Go +1.11.10 milestone on our issue tracker for details. +

    +

    go1.10 (released 2018/02/16)

    @@ -138,6 +219,13 @@ See the Go +1.10.8 milestone on our issue tracker for details. +

    +

    go1.9 (released 2017/08/24)

    diff --git a/doc/effective_go.html b/doc/effective_go.html index 34131868a4..7bb60a0786 100644 --- a/doc/effective_go.html +++ b/doc/effective_go.html @@ -1680,13 +1680,15 @@ maps. Here is a print statement for the time zone map defined in the previous s fmt.Printf("%v\n", timeZone) // or just fmt.Println(timeZone)

    -which gives output +which gives output:

    -map[CST:-21600 PST:-28800 EST:-18000 UTC:0 MST:-25200]
    +map[CST:-21600 EST:-18000 MST:-25200 PST:-28800 UTC:0]
     

    -For maps the keys may be output in any order, of course. +For maps, Printf and friends sort the output lexicographically by key. +

    +

    When printing a struct, the modified format %+v annotates the fields of the structure with their names, and for any value the alternate format %#v prints the value in full Go syntax. @@ -1710,7 +1712,7 @@ prints &{7 -2.35 abc def} &{a:7 b:-2.35 c:abc def} &main.T{a:7, b:-2.35, c:"abc\tdef"} -map[string]int{"CST":-21600, "PST":-28800, "EST":-18000, "UTC":0, "MST":-25200} +map[string]int{"CST":-21600, "EST":-18000, "MST":-25200, "PST":-28800, "UTC":0}

    (Note the ampersands.) diff --git a/doc/go1.12.html b/doc/go1.12.html index 30d1960177..cc19c0f31a 100644 --- a/doc/go1.12.html +++ b/doc/go1.12.html @@ -185,6 +185,17 @@ tour that build fails.

    +

    + This changed use of the go directive means that if you + use Go 1.12 to build a module, thus recording go 1.12 + in the go.mod file, you will get an error when + attempting to build the same module with Go 1.11 through Go 1.11.3. + Go 1.11.4 or later will work fine, as will releases older than Go 1.11. + If you must use Go 1.11 through 1.11.3, you can avoid the problem by + setting the language version to 1.11, using the Go 1.12 go tool, + via go mod edit -go=1.11. +

    +

    When an import cannot be resolved using the active modules, the go command will now try to use the modules mentioned in the @@ -600,17 +611,6 @@ for { -

    lib/time
    -
    -

    - The time zone database in $GOROOT/lib/time/zoneinfo.zip - has been updated to version 2018i. Note that this ZIP file is - only used if a time zone database is not provided by the operating - system. -

    - -
    -
    math

    @@ -791,7 +791,7 @@ for { A new BuildInfo type exposes the build information read from the running binary, available only in binaries built with module support. This includes the main package path, main - module information, and the module dependencies. This type is given though the + module information, and the module dependencies. This type is given through the ReadBuildInfo function on BuildInfo.

    @@ -924,6 +924,17 @@ for {

    +
    time
    +
    +

    + The time zone database in $GOROOT/lib/time/zoneinfo.zip + has been updated to version 2018i. Note that this ZIP file is + only used if a time zone database is not provided by the operating + system. +

    + +
    +
    unsafe

    diff --git a/doc/go1.13.html b/doc/go1.13.html new file mode 100644 index 0000000000..ef37c92775 --- /dev/null +++ b/doc/go1.13.html @@ -0,0 +1,97 @@ + + + + + + +

    DRAFT RELEASE NOTES - Introduction to Go 1.13

    + +

    + + Go 1.13 is not yet released. These are work-in-progress + release notes. Go 1.13 is expected to be released in August 2019. + +

    + +

    +TODO +

    + +

    Changes to the language

    + +

    +TODO +

    + +

    Ports

    + +

    +TODO +

    + +

    Darwin

    + +

    + As announced in the Go 1.12 release notes, + Go 1.13 now requires macOS 10.11 El Capitan or later; + support for previous versions has been discontinued. +

    + +

    FreeBSD

    + +

    + As announced in the Go 1.12 release notes, + Go 1.13 now requires FreeBSD 11.2 or later; + support for previous versions has been discontinued. + FreeBSD 12.0 or later requires a kernel with the COMPAT_FREEBSD11 option set (this is the default). +

    + +

    Tools

    + +

    +TODO +

    + +

    Runtime

    + +

    +TODO +

    + + +

    Core library

    + +

    +TODO generally +

    + +

    TLS 1.3

    + +

    +TODO; link to Go 1.12 notes. +

    + + +

    Minor changes to the library

    + +

    + As always, there are various minor changes and updates to the library, + made with the Go 1 promise of compatibility + in mind. +

    + +

    +TODO +

    + diff --git a/doc/go_faq.html b/doc/go_faq.html index 305878f237..dd3ba84cac 100644 --- a/doc/go_faq.html +++ b/doc/go_faq.html @@ -2082,8 +2082,8 @@ At the beginning of the project we considered using LLVM for our performance goals. More important in retrospect, starting with LLVM would have made it harder to introduce some of the ABI and related changes, such as -stack management, that Go requires but not are not part of the -standard C setup. +stack management, that Go requires but are not part of the standard +C setup. A new LLVM implementation is starting to come together now, however.

    diff --git a/doc/go_spec.html b/doc/go_spec.html index f3d2320d86..fb4341be1d 100644 --- a/doc/go_spec.html +++ b/doc/go_spec.html @@ -1,6 +1,6 @@ @@ -118,6 +118,7 @@ The underscore character _ (U+005F) is considered a letter.
     letter        = unicode_letter | "_" .
     decimal_digit = "0" … "9" .
    +binary_digit  = "0" | "1" .
     octal_digit   = "0" … "7" .
     hex_digit     = "0" … "9" | "A" … "F" | "a" … "f" .
     
    @@ -273,71 +274,156 @@ The following character sequences represent operators

    An integer literal is a sequence of digits representing an integer constant. -An optional prefix sets a non-decimal base: 0 for octal, 0x or -0X for hexadecimal. In hexadecimal literals, letters -a-f and A-F represent values 10 through 15. +An optional prefix sets a non-decimal base: 0b or 0B +for binary, 0, 0o, or 0O for octal, +and 0x or 0X for hexadecimal. +A single 0 is considered a decimal zero. +In hexadecimal literals, letters a through f +and A through F represent values 10 through 15. +

    + +

    +For readability, an underscore character _ may appear after +a base prefix or between successive digits; such underscores do not change +the literal's value.

    -int_lit     = decimal_lit | octal_lit | hex_lit .
    -decimal_lit = ( "1" … "9" ) { decimal_digit } .
    -octal_lit   = "0" { octal_digit } .
    -hex_lit     = "0" ( "x" | "X" ) hex_digit { hex_digit } .
    +int_lit        = decimal_lit | binary_lit | octal_lit | hex_lit .
    +decimal_lit    = "0" | ( "1" … "9" ) [ [ "_" ] decimal_digits ] .
    +binary_lit     = "0" ( "b" | "B" ) [ "_" ] binary_digits .
    +octal_lit      = "0" [ "o" | "O" ] [ "_" ] octal_digits .
    +hex_lit        = "0" ( "x" | "X" ) [ "_" ] hex_digits .
    +
    +decimal_digits = decimal_digit { [ "_" ] decimal_digit } .
    +binary_digits  = binary_digit { [ "_" ] binary_digit } .
    +octal_digits   = octal_digit { [ "_" ] octal_digit } .
    +hex_digits     = hex_digit { [ "_" ] hex_digit } .
     
     42
    +4_2
     0600
    +0_600
    +0o600
    +0O600       // second character is capital letter 'O'
     0xBadFace
    +0xBad_Face
    +0x_67_7a_2f_cc_40_c6
     170141183460469231731687303715884105727
    +170_141183_460469_231731_687303_715884_105727
    +
    +_42         // an identifier, not an integer literal
    +42_         // invalid: _ must separate successive digits
    +4__2        // invalid: only one _ at a time
    +0_xBadFace  // invalid: _ must separate successive digits
     
    +

    Floating-point literals

    +

    -A floating-point literal is a decimal representation of a +A floating-point literal is a decimal or hexadecimal representation of a floating-point constant. -It has an integer part, a decimal point, a fractional part, -and an exponent part. The integer and fractional part comprise -decimal digits; the exponent part is an e or E -followed by an optionally signed decimal exponent. One of the -integer part or the fractional part may be elided; one of the decimal -point or the exponent may be elided.

    + +

    +A decimal floating-point literal consists of an integer part (decimal digits), +a decimal point, a fractional part (decimal digits), and an exponent part +(e or E followed by an optional sign and decimal digits). +One of the integer part or the fractional part may be elided; one of the decimal point +or the exponent part may be elided. +An exponent value exp scales the mantissa (integer and fractional part) by 10exp. +

    + +

    +A hexadecimal floating-point literal consists of a 0x or 0X +prefix, an integer part (hexadecimal digits), a radix point, a fractional part (hexadecimal digits), +and an exponent part (p or P followed by an optional sign and decimal digits). +One of the integer part or the fractional part may be elided; the radix point may be elided as well, +but the exponent part is required. (This syntax matches the one given in IEEE 754-2008 §5.12.3.) +An exponent value exp scales the mantissa (integer and fractional part) by 2exp. +

    + +

    +For readability, an underscore character _ may appear after +a base prefix or between successive digits; such underscores do not change +the literal value. +

    +
    -float_lit = decimals "." [ decimals ] [ exponent ] |
    -            decimals exponent |
    -            "." decimals [ exponent ] .
    -decimals  = decimal_digit { decimal_digit } .
    -exponent  = ( "e" | "E" ) [ "+" | "-" ] decimals .
    +float_lit         = decimal_float_lit | hex_float_lit .
    +
    +decimal_float_lit = decimal_digits "." [ decimal_digits ] [ decimal_exponent ] |
    +                    decimal_digits decimal_exponent |
    +                    "." decimal_digits [ decimal_exponent ] .
    +decimal_exponent  = ( "e" | "E" ) [ "+" | "-" ] decimal_digits .
    +
    +hex_float_lit     = "0" ( "x" | "X" ) hex_mantissa hex_exponent .
    +hex_mantissa      = [ "_" ] hex_digits "." [ hex_digits ] |
    +                    [ "_" ] hex_digits |
    +                    "." hex_digits .
    +hex_exponent      = ( "p" | "P" ) [ "+" | "-" ] decimal_digits .
     
     0.
     72.40
    -072.40  // == 72.40
    +072.40       // == 72.40
     2.71828
     1.e+0
     6.67428e-11
     1E6
     .25
     .12345E+5
    +1_5.         // == 15.0
    +0.15e+0_2    // == 15.0
    +
    +0x1p-2       // == 0.25
    +0x2.p10      // == 2048.0
    +0x1.Fp+0     // == 1.9375
    +0X.8p-0      // == 0.5
    +0X_1FFFP-16  // == 0.1249847412109375
    +0x15e-2      // == 0x15e - 2 (integer subtraction)
    +
    +0x.p1        // invalid: mantissa has no digits
    +1p-2         // invalid: p exponent requires hexadecimal mantissa
    +0x1.5e-2     // invalid: hexadecimal mantissa requires p exponent
    +1_.5         // invalid: _ must separate successive digits
    +1._5         // invalid: _ must separate successive digits
    +1.5_e1       // invalid: _ must separate successive digits
    +1.5e_1       // invalid: _ must separate successive digits
    +1.5e1_       // invalid: _ must separate successive digits
     
    +

    Imaginary literals

    +

    -An imaginary literal is a decimal representation of the imaginary part of a +An imaginary literal represents the imaginary part of a complex constant. -It consists of a -floating-point literal -or decimal integer followed -by the lower-case letter i. +It consists of an integer or +floating-point literal +followed by the lower-case letter i. +The value of an imaginary literal is the value of the respective +integer or floating-point literal multiplied by the imaginary unit i.

    +
    -imaginary_lit = (decimals | float_lit) "i" .
    +imaginary_lit = (decimal_digits | int_lit | float_lit) "i" .
     
    +

    +For backward compatibility, an imaginary literal's integer part consisting +entirely of decimal digits (and possibly underscores) is considered a decimal +integer, even if it starts with a leading 0. +

    +
     0i
    -011i  // == 11i
    +0123i         // == 123i for backward-compatibility
    +0o123i        // == 0o123 * 1i == 83i
    +0xabci        // == 0xabc * 1i == 2748i
     0.i
     2.71828i
     1.e+0i
    @@ -345,6 +431,7 @@ imaginary_lit = (decimals | float_lit) "i" .
     1E6i
     .25i
     .12345E+5i
    +0x1p-2i       // == 0x1p-2 * 1i == 0.25i
     
    @@ -361,6 +448,7 @@ of the character itself, while multi-character sequences beginning with a backslash encode values in various formats.

    +

    The simplest form represents the single character within the quotes; since Go source text is Unicode characters encoded in UTF-8, multiple @@ -370,6 +458,7 @@ a literal a, Unicode U+0061, value 0x61, while 'ä' holds two bytes (0xc3 0xa4) representing a literal a-dieresis, U+00E4, value 0xe4.

    +

    Several backslash escapes allow arbitrary values to be encoded as ASCII text. There are four ways to represent the integer value @@ -380,6 +469,7 @@ plain backslash \ followed by exactly three octal digits. In each case the value of the literal is the value represented by the digits in the corresponding base.

    +

    Although these representations all result in an integer, they have different valid ranges. Octal escapes must represent a value between @@ -388,9 +478,11 @@ by construction. The escapes \u and \U represent Unicode code points so within them some values are illegal, in particular those above 0x10FFFF and surrogate halves.

    +

    After a backslash, certain single-character escapes represent special values:

    +
     \a   U+0007 alert or bell
     \b   U+0008 backspace
    @@ -403,6 +495,7 @@ After a backslash, certain single-character escapes represent special values:
     \'   U+0027 single quote  (valid escape only within rune literals)
     \"   U+0022 double quote  (valid escape only within string literals)
     
    +

    All other sequences starting with a backslash are illegal inside rune literals.

    @@ -446,6 +539,7 @@ A string literal represents a string constant obtained from concatenating a sequence of characters. There are two forms: raw string literals and interpreted string literals.

    +

    Raw string literals are character sequences between back quotes, as in `foo`. Within the quotes, any character may appear except @@ -457,6 +551,7 @@ contain newlines. Carriage return characters ('\r') inside raw string literals are discarded from the raw string value.

    +

    Interpreted string literals are character sequences between double quotes, as in "bar". @@ -596,6 +691,7 @@ precision in the language, a compiler may implement them using an internal representation with limited precision. That said, every implementation must:

    +
    • Represent integer constants with at least 256 bits.
    • @@ -613,12 +709,14 @@ implementation must: represent a floating-point or complex constant due to limits on precision.
    +

    These requirements apply both to literal constants and to the result of evaluating constant expressions.

    +

    Variables

    @@ -2415,10 +2513,24 @@ For array and slice literals the following rules apply: generates a pointer to a unique variable initialized with the literal's value.

    +
     var pointer *Point3D = &Point3D{y: 1000}
     
    +

    +Note that the zero value for a slice or map +type is not the same as an initialized but empty value of the same type. +Consequently, taking the address of an empty slice or map composite literal +does not have the same effect as allocating a new slice or map value with +new. +

    + +
    +p1 := &[]int{}    // p1 points to an initialized, empty slice with value []int{} and length 0
    +p2 := new([]int)  // p2 points to an uninitialized slice with value nil and length 0
    +
    +

    The length of an array literal is the length specified in the literal type. If fewer elements than the length are provided in the literal, the missing @@ -3150,6 +3262,14 @@ is a nil slice. Otherwise, if the result is a slice, it shares its array with the operand.

    +
    +var a [10]int
    +s1 := a[3:7]   // underlying array of s1 is array a; &s1[2] == &a[5]
    +s2 := s1[1:4]  // underlying array of s2 is underlying array of s1 which is array a; &s2[1] == &a[5]
    +s2[1] = 42     // s2[1] == s1[2] == a[5] == 42; they all refer to the same underlying array element
    +
    + +

    Full slice expressions

    @@ -3386,7 +3506,7 @@ within Greeting, who will have the value

    -If the final argument is assignable to a slice type []T, it may be +If the final argument is assignable to a slice type []T, it is passed unchanged as the value for a ...T parameter if the argument is followed by .... In this case no new slice is created.

    @@ -6264,16 +6384,16 @@ var t T

    Package initialization

    -Within a package, package-level variables are initialized in -declaration order but after any of the variables -they depend on. +Within a package, package-level variable initialization proceeds stepwise, +with each step selecting the variable earliest in declaration order +which has no dependencies on uninitialized variables.

    More precisely, a package-level variable is considered ready for initialization if it is not yet initialized and either has no initialization expression or -its initialization expression has no dependencies on uninitialized variables. +its initialization expression has no dependencies on uninitialized variables. Initialization proceeds by repeatedly initializing the next package-level variable that is earliest in declaration order and ready for initialization, until there are no variables ready for initialization. @@ -6285,6 +6405,23 @@ process ends, those variables are part of one or more initialization cycles, and the program is not valid.

    +

    +Multiple variables on the left-hand side of a variable declaration initialized +by single (multi-valued) expression on the right-hand side are initialized +together: If any of the variables on the left-hand side is initialized, all +those variables are initialized in the same step. +

    + +
    +var x = a
    +var a, b = f() // a and b are initialized together, before x is initialized
    +
    + +

    +For the purpose of package initialization, blank +variables are treated like any other variables in declarations. +

    +

    The declaration order of variables declared in multiple files is determined by the order in which the files are presented to the compiler: Variables @@ -6326,22 +6463,16 @@ or to a function or method that depends on y. -

    -Dependency analysis is performed per package; only references referring -to variables, functions, and methods declared in the current package -are considered. -

    -

    For example, given the declarations

     var (
    -	a = c + b
    -	b = f()
    -	c = f()
    -	d = 3
    +	a = c + b  // == 9
    +	b = f()    // == 4
    +	c = f()    // == 5
    +	d = 3      // == 5 after initialization has finished
     )
     
     func f() int {
    @@ -6352,6 +6483,39 @@ func f() int {
     
     

    the initialization order is d, b, c, a. +Note that the order of subexpressions in initialization expressions is irrelevant: +a = c + b and a = b + c result in the same initialization +order in this example. +

    + +

    +Dependency analysis is performed per package; only references referring +to variables, functions, and (non-interface) methods declared in the current +package are considered. If other, hidden, data dependencies exists between +variables, the initialization order between those variables is unspecified. +

    + +

    +For instance, given the declarations +

    + +
    +var x = I(T{}).ab()   // x has an undetected, hidden dependency on a and b
    +var _ = sideEffect()  // unrelated to x, a, or b
    +var a = b
    +var b = 42
    +
    +type I interface      { ab() []int }
    +type T struct{}
    +func (T) ab() []int   { return []int{a, b} }
    +
    + +

    +the variable a will be initialized after b but +whether x is initialized before b, between +b and a, or after a, and +thus also the moment at which sideEffect() is called (before +or after x is initialized) is not specified.

    diff --git a/doc/install-source.html b/doc/install-source.html index bbe7cdfd00..6a0c3844ae 100644 --- a/doc/install-source.html +++ b/doc/install-source.html @@ -627,6 +627,29 @@ contains further details regarding Go's ARM support.

    +
  • $GOPPC64 (for ppc64 and ppc64le only) +

    +This variable sets the processor level (i.e. Instruction Set Architecture version) +for which the compiler will target. The default is power8. +

    +
      +
    • GOPPC64=power8: generate ISA v2.07 instructions
    • +
    • GOPPC64=power9: generate ISA v3.00 instructions
    • +
    +
  • + + +
  • $GOWASM (for wasm only) +

    + This variable is a comma separated list of experimental WebAssembly features that the compiled WebAssembly binary is allowed to use. + The default is to use no experimental features. +

    + +
  • +

    diff --git a/doc/install.html b/doc/install.html index a41c60ba6c..05b6d0538c 100644 --- a/doc/install.html +++ b/doc/install.html @@ -50,7 +50,7 @@ If your OS or architecture is not on the list, you may be able to FreeBSD 10.3 or later amd64, 386 Debian GNU/kFreeBSD not supported Linux 2.6.23 or later with glibc amd64, 386, arm, arm64,
    s390x, ppc64le CentOS/RHEL 5.x not supported.
    Install from source for other libc. macOS 10.10 or later amd64 use the clang or gcc that comes with Xcode for cgo support -Windows 7, Server 2008R2 or later amd64, 386 use MinGW gcc. No need for cygwin or msys. +Windows 7, Server 2008R2 or later amd64, 386 use MinGW (386) or MinGW-W64 (amd64) gcc.
    No need for cygwin or msys.

    @@ -204,7 +204,7 @@ you will need to set the G

    -Next, make the directory src/hello inside your workspace, +Next, make the directory src/hellosrc\hello inside your workspace, and in that directory create a file named hello.go that looks like:

    diff --git a/misc/android/README b/misc/android/README index 38e7cf41e3..13b59d92f4 100644 --- a/misc/android/README +++ b/misc/android/README @@ -12,7 +12,7 @@ C compiler from the Android NDK. For example, CGO_ENABLED=1 \ GOOS=android \ GOARCH=arm64 \ - CC=$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang \ + CC_FOR_TARGET=$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang \ ./all.bash To run tests on the Android device, add the bin directory to PATH so the diff --git a/misc/android/go_android_exec.go b/misc/android/go_android_exec.go index fa84f00f67..7aa7fe56fc 100644 --- a/misc/android/go_android_exec.go +++ b/misc/android/go_android_exec.go @@ -10,6 +10,7 @@ package main import ( "bytes" + "errors" "fmt" "go/build" "io" @@ -25,12 +26,9 @@ import ( "syscall" ) -func run(args ...string) string { - if flags := os.Getenv("GOANDROID_ADB_FLAGS"); flags != "" { - args = append(strings.Split(flags, " "), args...) - } +func run(args ...string) (string, error) { + cmd := adbCmd(args...) buf := new(bytes.Buffer) - cmd := exec.Command("adb", args...) cmd.Stdout = io.MultiWriter(os.Stdout, buf) // If the adb subprocess somehow hangs, go test will kill this wrapper // and wait for our os.Stderr (and os.Stdout) to close as a result. @@ -42,69 +40,113 @@ func run(args ...string) string { // forcing cmd.Run to use another pipe and goroutine to pass // along stderr from adb. cmd.Stderr = struct{ io.Writer }{os.Stderr} - log.Printf("adb %s", strings.Join(args, " ")) err := cmd.Run() if err != nil { - log.Fatalf("adb %s: %v", strings.Join(args, " "), err) + return "", fmt.Errorf("adb %s: %v", strings.Join(args, " "), err) } - return buf.String() + return buf.String(), nil +} + +func adb(args ...string) error { + if out, err := adbCmd(args...).CombinedOutput(); err != nil { + fmt.Fprintf(os.Stderr, "adb %s\n%s", strings.Join(args, " "), out) + return err + } + return nil +} + +func adbCmd(args ...string) *exec.Cmd { + if flags := os.Getenv("GOANDROID_ADB_FLAGS"); flags != "" { + args = append(strings.Split(flags, " "), args...) + } + return exec.Command("adb", args...) } const ( - // Directory structure on the target device androidtest.bash assumes. - deviceGoroot = "/data/local/tmp/goroot" - deviceGopath = "/data/local/tmp/gopath" + deviceRoot = "/data/local/tmp/go_android_exec" + deviceGoroot = deviceRoot + "/goroot" ) func main() { log.SetFlags(0) log.SetPrefix("go_android_exec: ") + exitCode, err := runMain() + if err != nil { + log.Fatal(err) + } + os.Exit(exitCode) +} +func runMain() (int, error) { // Concurrent use of adb is flaky, so serialize adb commands. // See https://github.com/golang/go/issues/23795 or // https://issuetracker.google.com/issues/73230216. lockPath := filepath.Join(os.TempDir(), "go_android_exec-adb-lock") lock, err := os.OpenFile(lockPath, os.O_CREATE|os.O_RDWR, 0666) if err != nil { - log.Fatal(err) + return 0, err } defer lock.Close() if err := syscall.Flock(int(lock.Fd()), syscall.LOCK_EX); err != nil { - log.Fatal(err) + return 0, err } - // In case we're booting a device or emulator alongside androidtest.bash - // wait for it to be ready. adb wait-for-device is not enough, we have to + // In case we're booting a device or emulator alongside all.bash, wait for + // it to be ready. adb wait-for-device is not enough, we have to // wait for sys.boot_completed. - run("wait-for-device", "shell", "while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done;") + if err := adb("wait-for-device", "exec-out", "while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done;"); err != nil { + return 0, err + } + + // Done once per make.bash. + if err := adbCopyGoroot(); err != nil { + return 0, err + } // Prepare a temporary directory that will be cleaned up at the end. - deviceGotmp := fmt.Sprintf("/data/local/tmp/%s-%d", - filepath.Base(os.Args[1]), os.Getpid()) - run("shell", "mkdir", "-p", deviceGotmp) + // Binary names can conflict. + // E.g. template.test from the {html,text}/template packages. + binName := filepath.Base(os.Args[1]) + deviceGotmp := fmt.Sprintf(deviceRoot+"/%s-%d", binName, os.Getpid()) + deviceGopath := deviceGotmp + "/gopath" + defer adb("exec-out", "rm", "-rf", deviceGotmp) // Clean up. // Determine the package by examining the current working // directory, which will look something like // "$GOROOT/src/mime/multipart" or "$GOPATH/src/golang.org/x/mobile". // We extract everything after the $GOROOT or $GOPATH to run on the // same relative directory on the target device. - subdir, inGoRoot := subdir() - deviceCwd := filepath.Join(deviceGoroot, subdir) - if !inGoRoot { - deviceCwd = filepath.Join(deviceGopath, subdir) - } else { - adbSyncGoroot() + subdir, inGoRoot, err := subdir() + if err != nil { + return 0, err + } + deviceCwd := filepath.Join(deviceGopath, subdir) + if inGoRoot { + deviceCwd = filepath.Join(deviceGoroot, subdir) + } else { + if err := adb("exec-out", "mkdir", "-p", deviceCwd); err != nil { + return 0, err + } + if err := adbCopyTree(deviceCwd, subdir); err != nil { + return 0, err + } + + // Copy .go files from the package. + goFiles, err := filepath.Glob("*.go") + if err != nil { + return 0, err + } + if len(goFiles) > 0 { + args := append(append([]string{"push"}, goFiles...), deviceCwd) + if err := adb(args...); err != nil { + return 0, err + } + } } - run("shell", "mkdir", "-p", deviceCwd) - // Binary names can conflict. - // E.g. template.test from the {html,text}/template packages. - binName := fmt.Sprintf("%s-%d", filepath.Base(os.Args[1]), os.Getpid()) deviceBin := fmt.Sprintf("%s/%s", deviceGotmp, binName) - run("push", os.Args[1], deviceBin) - - if _, err := os.Stat("testdata"); err == nil { - run("push", "testdata", deviceCwd) + if err := adb("push", os.Args[1], deviceBin); err != nil { + return 0, err } // Forward SIGQUIT from the go command to show backtraces from @@ -115,108 +157,185 @@ func main() { for range quit { // We don't have the PID of the running process; use the // binary name instead. - run("shell", "killall -QUIT "+binName) + adb("exec-out", "killall -QUIT "+binName) } }() - // The adb shell command will return an exit code of 0 regardless - // of the command run. E.g. - // $ adb shell false - // $ echo $? - // 0 + // In light of // https://code.google.com/p/android/issues/detail?id=3254 - // So we append the exitcode to the output and parse it from there. + // dont trust the exitcode of adb. Instead, append the exitcode to + // the output and parse it from there. const exitstr = "exitcode=" cmd := `export TMPDIR="` + deviceGotmp + `"` + `; export GOROOT="` + deviceGoroot + `"` + `; export GOPATH="` + deviceGopath + `"` + + `; export CGO_ENABLED=0` + + `; export GOPROXY=` + os.Getenv("GOPROXY") + + `; export GOCACHE="` + deviceRoot + `/gocache"` + + `; export PATH=$PATH:"` + deviceGoroot + `/bin"` + `; cd "` + deviceCwd + `"` + "; '" + deviceBin + "' " + strings.Join(os.Args[2:], " ") + "; echo -n " + exitstr + "$?" - output := run("shell", cmd) + output, err := run("exec-out", cmd) signal.Reset(syscall.SIGQUIT) close(quit) - - run("shell", "rm", "-rf", deviceGotmp) // Clean up. + if err != nil { + return 0, err + } exitIdx := strings.LastIndex(output, exitstr) if exitIdx == -1 { - log.Fatalf("no exit code: %q", output) + return 0, fmt.Errorf("no exit code: %q", output) } code, err := strconv.Atoi(output[exitIdx+len(exitstr):]) if err != nil { - log.Fatalf("bad exit code: %v", err) + return 0, fmt.Errorf("bad exit code: %v", err) } - os.Exit(code) + return code, nil } // subdir determines the package based on the current working directory, // and returns the path to the package source relative to $GOROOT (or $GOPATH). -func subdir() (pkgpath string, underGoRoot bool) { +func subdir() (pkgpath string, underGoRoot bool, err error) { cwd, err := os.Getwd() if err != nil { - log.Fatal(err) + return "", false, err } - if root := runtime.GOROOT(); strings.HasPrefix(cwd, root) { - subdir, err := filepath.Rel(root, cwd) - if err != nil { - log.Fatal(err) + cwd, err = filepath.EvalSymlinks(cwd) + if err != nil { + return "", false, err + } + goroot, err := filepath.EvalSymlinks(runtime.GOROOT()) + if err != nil { + return "", false, err + } + if subdir, err := filepath.Rel(goroot, cwd); err == nil { + if !strings.Contains(subdir, "..") { + return subdir, true, nil } - return subdir, true } for _, p := range filepath.SplitList(build.Default.GOPATH) { - if !strings.HasPrefix(cwd, p) { - continue + pabs, err := filepath.EvalSymlinks(p) + if err != nil { + return "", false, err } - subdir, err := filepath.Rel(p, cwd) - if err == nil { - return subdir, false + if subdir, err := filepath.Rel(pabs, cwd); err == nil { + if !strings.Contains(subdir, "..") { + return subdir, false, nil + } } } - log.Fatalf("the current path %q is not in either GOROOT(%q) or GOPATH(%q)", + return "", false, fmt.Errorf("the current path %q is not in either GOROOT(%q) or GOPATH(%q)", cwd, runtime.GOROOT(), build.Default.GOPATH) - return "", false } -// adbSyncGoroot ensures that files necessary for testing the Go standard -// packages are present on the attached device. -func adbSyncGoroot() { +// adbCopyTree copies testdata, go.mod, go.sum files from subdir +// and from parent directories all the way up to the root of subdir. +// go.mod and go.sum files are needed for the go tool modules queries, +// and the testdata directories for tests. It is common for tests to +// reach out into testdata from parent packages. +func adbCopyTree(deviceCwd, subdir string) error { + dir := "" + for { + for _, path := range []string{"testdata", "go.mod", "go.sum"} { + path := filepath.Join(dir, path) + if _, err := os.Stat(path); err != nil { + continue + } + devicePath := filepath.Join(deviceCwd, dir) + if err := adb("exec-out", "mkdir", "-p", devicePath); err != nil { + return err + } + if err := adb("push", path, devicePath); err != nil { + return err + } + } + if subdir == "." { + break + } + subdir = filepath.Dir(subdir) + dir = filepath.Join(dir, "..") + } + return nil +} + +// adbCopyGoroot clears deviceRoot for previous versions of GOROOT, GOPATH +// and temporary data. Then, it copies relevant parts of GOROOT to the device, +// including the go tool built for android. +// A lock file ensures this only happens once, even with concurrent exec +// wrappers. +func adbCopyGoroot() error { // Also known by cmd/dist. The bootstrap command deletes the file. statPath := filepath.Join(os.TempDir(), "go_android_exec-adb-sync-status") stat, err := os.OpenFile(statPath, os.O_CREATE|os.O_RDWR, 0666) if err != nil { - log.Fatal(err) + return err } defer stat.Close() - // Serialize check and syncing. + // Serialize check and copying. if err := syscall.Flock(int(stat.Fd()), syscall.LOCK_EX); err != nil { - log.Fatal(err) + return err } s, err := ioutil.ReadAll(stat) if err != nil { - log.Fatal(err) + return err } if string(s) == "done" { - return + return nil + } + // Delete GOROOT, GOPATH and any leftover test data. + if err := adb("exec-out", "rm", "-rf", deviceRoot); err != nil { + return err + } + deviceBin := filepath.Join(deviceGoroot, "bin") + if err := adb("exec-out", "mkdir", "-p", deviceBin); err != nil { + return err } - devRoot := "/data/local/tmp/goroot" - run("shell", "rm", "-rf", devRoot) - run("shell", "mkdir", "-p", devRoot+"/pkg") goroot := runtime.GOROOT() + // Build go for android. goCmd := filepath.Join(goroot, "bin", "go") - runtimea, err := exec.Command(goCmd, "list", "-f", "{{.Target}}", "runtime").Output() + tmpGo, err := ioutil.TempFile("", "go_android_exec-cmd-go-*") if err != nil { - log.Fatal(err) + return err } + tmpGo.Close() + defer os.Remove(tmpGo.Name()) + + if out, err := exec.Command(goCmd, "build", "-o", tmpGo.Name(), "cmd/go").CombinedOutput(); err != nil { + return fmt.Errorf("failed to build go tool for device: %s\n%v", out, err) + } + deviceGo := filepath.Join(deviceBin, "go") + if err := adb("push", tmpGo.Name(), deviceGo); err != nil { + return err + } + for _, dir := range []string{"src", "test", "lib", "api"} { + if err := adb("push", filepath.Join(goroot, dir), filepath.Join(deviceGoroot)); err != nil { + return err + } + } + + // Copy only the relevant from pkg. + if err := adb("exec-out", "mkdir", "-p", filepath.Join(deviceGoroot, "pkg", "tool")); err != nil { + return err + } + if err := adb("push", filepath.Join(goroot, "pkg", "include"), filepath.Join(deviceGoroot, "pkg")); err != nil { + return err + } + runtimea, err := exec.Command(goCmd, "list", "-f", "{{.Target}}", "runtime").Output() pkgdir := filepath.Dir(string(runtimea)) if pkgdir == "" { - log.Fatal("could not find android pkg dir") + return errors.New("could not find android pkg dir") } - for _, dir := range []string{"src", "test", "lib"} { - run("push", filepath.Join(goroot, dir), filepath.Join(devRoot)) + if err := adb("push", pkgdir, filepath.Join(deviceGoroot, "pkg")); err != nil { + return err } - run("push", filepath.Join(pkgdir), filepath.Join(devRoot, "pkg/")) + tooldir := filepath.Join(goroot, "pkg", "tool", filepath.Base(pkgdir)) + if err := adb("push", tooldir, filepath.Join(deviceGoroot, "pkg", "tool")); err != nil { + return err + } + if _, err := stat.Write([]byte("done")); err != nil { - log.Fatal(err) + return err } + return nil } diff --git a/misc/cgo/fortran/test.bash b/misc/cgo/fortran/test.bash index 1e0d59ea1c..9498da0208 100755 --- a/misc/cgo/fortran/test.bash +++ b/misc/cgo/fortran/test.bash @@ -14,12 +14,17 @@ goos=$(go env GOOS) libext="so" if [ "$goos" = "darwin" ]; then libext="dylib" +elif [ "$goos" = "aix" ]; then + libtext="a" fi case "$FC" in *gfortran*) libpath=$(dirname $($FC -print-file-name=libgfortran.$libext)) - export CGO_LDFLAGS="$CGO_LDFLAGS -Wl,-rpath,$libpath -L $libpath" + if [ "$goos" != "aix" ]; then + RPATH_FLAG="-Wl,-rpath,$libpath" + fi + export CGO_LDFLAGS="$CGO_LDFLAGS $RPATH_FLAG -L $libpath" ;; esac diff --git a/misc/cgo/life/life_test.go b/misc/cgo/life/life_test.go index 0f024c9d1d..3c95d87d8a 100644 --- a/misc/cgo/life/life_test.go +++ b/misc/cgo/life/life_test.go @@ -46,6 +46,9 @@ func testMain(m *testing.M) int { } func TestTestRun(t *testing.T) { + if os.Getenv("GOOS") == "android" { + t.Skip("the go tool runs with CGO_ENABLED=0 on the android device") + } out, err := exec.Command("go", "env", "GOROOT").Output() if err != nil { t.Fatal(err) diff --git a/misc/cgo/stdio/stdio_test.go b/misc/cgo/stdio/stdio_test.go index 85ab6ae3e5..ab5d328f67 100644 --- a/misc/cgo/stdio/stdio_test.go +++ b/misc/cgo/stdio/stdio_test.go @@ -46,6 +46,9 @@ func testMain(m *testing.M) int { } func TestTestRun(t *testing.T) { + if os.Getenv("GOOS") == "android" { + t.Skip("subpackage stdio is not available on android") + } out, err := exec.Command("go", "env", "GOROOT").Output() if err != nil { t.Fatal(err) diff --git a/misc/cgo/test/callback.go b/misc/cgo/test/callback.go index d48aeaabd9..e749650293 100644 --- a/misc/cgo/test/callback.go +++ b/misc/cgo/test/callback.go @@ -199,7 +199,7 @@ func testCallbackCallers(t *testing.T) { t.Errorf("expected %d frames, got %d", len(name), n) } for i := 0; i < n; i++ { - f := runtime.FuncForPC(pc[i]) + f := runtime.FuncForPC(pc[i] - 1) // TODO: use runtime.CallersFrames if f == nil { t.Fatalf("expected non-nil Func for pc %d", pc[i]) } diff --git a/misc/cgo/test/cgo_linux_test.go b/misc/cgo/test/cgo_linux_test.go index c2e96b5387..7b56e11a27 100644 --- a/misc/cgo/test/cgo_linux_test.go +++ b/misc/cgo/test/cgo_linux_test.go @@ -4,8 +4,16 @@ package cgotest -import "testing" +import ( + "runtime" + "testing" +) -func TestSetgid(t *testing.T) { testSetgid(t) } +func TestSetgid(t *testing.T) { + if runtime.GOOS == "android" { + t.Skip("unsupported on Android") + } + testSetgid(t) +} func Test6997(t *testing.T) { test6997(t) } func TestBuildID(t *testing.T) { testBuildID(t) } diff --git a/misc/cgo/test/cgo_test.go b/misc/cgo/test/cgo_test.go index 2d6d269608..7f886bad68 100644 --- a/misc/cgo/test/cgo_test.go +++ b/misc/cgo/test/cgo_test.go @@ -56,6 +56,7 @@ func Test25143(t *testing.T) { test25143(t) } func Test26066(t *testing.T) { test26066(t) } func Test27660(t *testing.T) { test27660(t) } func Test28896(t *testing.T) { test28896(t) } +func Test29878(t *testing.T) { test29878(t) } func Test30065(t *testing.T) { test30065(t) } func TestAlign(t *testing.T) { testAlign(t) } func TestAtol(t *testing.T) { testAtol(t) } diff --git a/misc/cgo/test/cthread_unix.c b/misc/cgo/test/cthread_unix.c index 6323e4980e..247d636d06 100644 --- a/misc/cgo/test/cthread_unix.c +++ b/misc/cgo/test/cthread_unix.c @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build darwin dragonfly freebsd linux netbsd openbsd solaris +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris #include #include "_cgo_export.h" diff --git a/misc/cgo/test/env.go b/misc/cgo/test/env.go index b2081b7283..e0703e1452 100644 --- a/misc/cgo/test/env.go +++ b/misc/cgo/test/env.go @@ -18,8 +18,8 @@ import ( // This is really an os package test but here for convenience. func testSetEnv(t *testing.T) { if runtime.GOOS == "windows" { - // Go uses SetEnvironmentVariable on windows. Howerver, - // C runtime takes a *copy* at process startup of thei + // Go uses SetEnvironmentVariable on windows. However, + // C runtime takes a *copy* at process startup of the // OS environment, and stores it in environ/envp. // It is this copy that getenv/putenv manipulate. t.Logf("skipping test") diff --git a/misc/cgo/test/issue18146.go b/misc/cgo/test/issue18146.go index 6483903fed..0605a24ee9 100644 --- a/misc/cgo/test/issue18146.go +++ b/misc/cgo/test/issue18146.go @@ -46,6 +46,8 @@ func test18146(t *testing.T) { switch runtime.GOOS { default: setNproc = false + case "aix": + nproc = 9 case "linux": nproc = 6 case "darwin", "dragonfly", "freebsd", "netbsd", "openbsd": diff --git a/misc/cgo/test/issue29781.go b/misc/cgo/test/issue29781.go index 0fd8c08b8e..c80919dc17 100644 --- a/misc/cgo/test/issue29781.go +++ b/misc/cgo/test/issue29781.go @@ -11,7 +11,18 @@ package cgotest // #define ISSUE29781C 0 import "C" +var issue29781X struct{ X int } + +func issue29781F(...int) int { return 0 } + func issue29781G() { var p *C.char C.issue29781F(&p, C.ISSUE29781C+1) + C.issue29781F(nil, (C.int)( + 0)) + C.issue29781F(&p, (C.int)(0)) + C.issue29781F(&p, (C.int)( + 0)) + C.issue29781F(&p, (C.int)(issue29781X. + X)) } diff --git a/misc/cgo/test/issue29878.go b/misc/cgo/test/issue29878.go new file mode 100644 index 0000000000..c1aeaf9709 --- /dev/null +++ b/misc/cgo/test/issue29878.go @@ -0,0 +1,20 @@ +// 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 cgotest + +// #include +// uint64_t issue29878exported(int8_t); // prototype must match +// int16_t issue29878function(uint32_t arg) { return issue29878exported(arg); } +import "C" + +import "testing" + +func test29878(t *testing.T) { + const arg uint32 = 123 // fits into all integer types + var ret int16 = C.issue29878function(arg) // no conversions needed + if int64(ret) != int64(arg) { + t.Errorf("return value unexpected: got %d, want %d", ret, arg) + } +} diff --git a/misc/cgo/test/issue29878export.go b/misc/cgo/test/issue29878export.go new file mode 100644 index 0000000000..59727c72fc --- /dev/null +++ b/misc/cgo/test/issue29878export.go @@ -0,0 +1,12 @@ +// 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 cgotest + +import "C" + +//export issue29878exported +func issue29878exported(arg int8) uint64 { + return uint64(arg) +} diff --git a/misc/cgo/test/pkg_test.go b/misc/cgo/test/pkg_test.go index 6857609a10..08e075c022 100644 --- a/misc/cgo/test/pkg_test.go +++ b/misc/cgo/test/pkg_test.go @@ -27,7 +27,10 @@ import ( // this shim and move the tests currently located in testdata back into the // parent directory. func TestCrossPackageTests(t *testing.T) { - if runtime.GOOS == "darwin" { + switch runtime.GOOS { + case "android": + t.Skip("Can't exec cmd/go subprocess on Android.") + case "darwin": switch runtime.GOARCH { case "arm", "arm64": t.Skip("Can't exec cmd/go subprocess on iOS.") @@ -56,7 +59,7 @@ func TestCrossPackageTests(t *testing.T) { cmd.Args = append(cmd.Args, "-short") } cmd.Dir = modRoot - cmd.Env = append(os.Environ(), "GOPATH="+GOPATH) + cmd.Env = append(os.Environ(), "GOPATH="+GOPATH, "PWD="+cmd.Dir) out, err := cmd.CombinedOutput() if err == nil { t.Logf("%s:\n%s", strings.Join(cmd.Args, " "), out) diff --git a/misc/cgo/test/sigaltstack.go b/misc/cgo/test/sigaltstack.go index 2b7a1ec9ad..2c9b81ced7 100644 --- a/misc/cgo/test/sigaltstack.go +++ b/misc/cgo/test/sigaltstack.go @@ -55,7 +55,7 @@ import ( func testSigaltstack(t *testing.T) { switch { - case runtime.GOOS == "solaris", runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64"): + case runtime.GOOS == "solaris", runtime.GOOS == "illumos", runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64"): t.Skipf("switching signal stack not implemented on %s/%s", runtime.GOOS, runtime.GOARCH) case runtime.GOOS == "darwin" && runtime.GOARCH == "386": t.Skipf("sigaltstack fails on darwin/386") diff --git a/misc/cgo/test/testdata/issue29563.go b/misc/cgo/test/testdata/issue29563.go new file mode 100644 index 0000000000..84def3ca44 --- /dev/null +++ b/misc/cgo/test/testdata/issue29563.go @@ -0,0 +1,12 @@ +// 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. + +// +build !windows + +// Issue 29563: internal linker fails on duplicate weak symbols. +// No runtime test; just make sure it compiles. + +package cgotest + +import _ "cgotest/issue29563" diff --git a/misc/cgo/test/testdata/issue29563/weak.go b/misc/cgo/test/testdata/issue29563/weak.go new file mode 100644 index 0000000000..21cf635cca --- /dev/null +++ b/misc/cgo/test/testdata/issue29563/weak.go @@ -0,0 +1,13 @@ +// 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 issue29563 + +//int foo1(); +//int foo2(); +import "C" + +func Bar() int { + return int(C.foo1()) + int(C.foo2()) +} diff --git a/misc/cgo/test/testdata/issue29563/weak1.c b/misc/cgo/test/testdata/issue29563/weak1.c new file mode 100644 index 0000000000..86a22734ad --- /dev/null +++ b/misc/cgo/test/testdata/issue29563/weak1.c @@ -0,0 +1,11 @@ +// 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. + +extern int weaksym __attribute__((__weak__)); +int weaksym = 42; + +int foo1() +{ + return weaksym; +} diff --git a/misc/cgo/test/testdata/issue29563/weak2.c b/misc/cgo/test/testdata/issue29563/weak2.c new file mode 100644 index 0000000000..e01eae8b58 --- /dev/null +++ b/misc/cgo/test/testdata/issue29563/weak2.c @@ -0,0 +1,11 @@ +// 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. + +extern int weaksym __attribute__((__weak__)); +int weaksym = 42; + +int foo2() +{ + return weaksym; +} diff --git a/misc/cgo/test/testdata/issue30527.go b/misc/cgo/test/testdata/issue30527.go new file mode 100644 index 0000000000..4ea7d3177a --- /dev/null +++ b/misc/cgo/test/testdata/issue30527.go @@ -0,0 +1,14 @@ +// 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. + +// Issue 30527: function call rewriting casts untyped +// constants to int because of ":=" usage. + +package cgotest + +import "cgotest/issue30527" + +func issue30527G() { + issue30527.G(nil) +} diff --git a/misc/cgo/test/testdata/issue30527/a.go b/misc/cgo/test/testdata/issue30527/a.go new file mode 100644 index 0000000000..eb50147b39 --- /dev/null +++ b/misc/cgo/test/testdata/issue30527/a.go @@ -0,0 +1,19 @@ +// 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 issue30527 + +import "math" + +/* +#include + +static void issue30527F(char **p, uint64_t mod, uint32_t unused) {} +*/ +import "C" + +func G(p **C.char) { + C.issue30527F(p, math.MaxUint64, 1) + C.issue30527F(p, 1<<64-1, Z) +} diff --git a/misc/cgo/test/testdata/issue30527/b.go b/misc/cgo/test/testdata/issue30527/b.go new file mode 100644 index 0000000000..87e8255bd8 --- /dev/null +++ b/misc/cgo/test/testdata/issue30527/b.go @@ -0,0 +1,11 @@ +// 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 issue30527 + +const ( + X = 1 << iota + Y + Z +) diff --git a/misc/cgo/testcarchive/carchive_test.go b/misc/cgo/testcarchive/carchive_test.go index 611a770245..381239ab79 100644 --- a/misc/cgo/testcarchive/carchive_test.go +++ b/misc/cgo/testcarchive/carchive_test.go @@ -8,6 +8,7 @@ import ( "bufio" "bytes" "debug/elf" + "flag" "fmt" "io/ioutil" "log" @@ -36,6 +37,11 @@ var GOOS, GOARCH, GOPATH string var libgodir string func TestMain(m *testing.M) { + flag.Parse() + if testing.Short() && os.Getenv("GO_BUILDER_NAME") == "" { + fmt.Printf("SKIP - short mode and $GO_BUILDER_NAME not set\n") + os.Exit(0) + } log.SetFlags(log.Lshortfile) os.Exit(testMain(m)) } @@ -110,6 +116,11 @@ func testMain(m *testing.M) int { // TODO(crawshaw): can we do better? cc = append(cc, []string{"-framework", "CoreFoundation", "-framework", "Foundation"}...) } + if GOOS == "aix" { + // -Wl,-bnoobjreorder is mandatory to keep the same layout + // in .text section. + cc = append(cc, "-Wl,-bnoobjreorder") + } libbase := GOOS + "_" + GOARCH if runtime.Compiler == "gccgo" { libbase = "gccgo_" + libgodir + "_fPIC" @@ -119,7 +130,7 @@ func testMain(m *testing.M) int { if GOARCH == "arm" || GOARCH == "arm64" { libbase += "_shared" } - case "dragonfly", "freebsd", "linux", "netbsd", "openbsd", "solaris": + case "dragonfly", "freebsd", "linux", "netbsd", "openbsd", "solaris", "illumos": libbase += "_shared" } } @@ -318,8 +329,10 @@ func TestSignalForwarding(t *testing.T) { } func TestSignalForwardingExternal(t *testing.T) { - if GOOS == "freebsd" { + if GOOS == "freebsd" || GOOS == "aix" { t.Skipf("skipping on %s/%s; signal always goes to the Go runtime", GOOS, GOARCH) + } else if GOOS == "darwin" && GOARCH == "amd64" { + t.Skipf("skipping on %s/%s: runtime does not permit SI_USER SIGSEGV", GOOS, GOARCH) } checkSignalForwardingTest(t) @@ -518,6 +531,9 @@ func TestExtar(t *testing.T) { if runtime.Compiler == "gccgo" { t.Skip("skipping -extar test when using gccgo") } + if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") { + t.Skip("shell scripts are not executable on iOS hosts") + } defer func() { os.Remove("libgo4.a") @@ -594,13 +610,15 @@ func TestPIE(t *testing.T) { t.Fatal(err) } - f, err := elf.Open("testp" + exeSuffix) - if err != nil { - t.Fatal("elf.Open failed: ", err) - } - defer f.Close() - if hasDynTag(t, f, elf.DT_TEXTREL) { - t.Errorf("%s has DT_TEXTREL flag", "testp"+exeSuffix) + if GOOS != "aix" { + f, err := elf.Open("testp" + exeSuffix) + if err != nil { + t.Fatal("elf.Open failed: ", err) + } + defer f.Close() + if hasDynTag(t, f, elf.DT_TEXTREL) { + t.Errorf("%s has DT_TEXTREL flag", "testp"+exeSuffix) + } } } diff --git a/misc/cgo/testcarchive/testdata/main4.c b/misc/cgo/testcarchive/testdata/main4.c index 4fd55e753d..04f774008f 100644 --- a/misc/cgo/testcarchive/testdata/main4.c +++ b/misc/cgo/testcarchive/testdata/main4.c @@ -14,6 +14,13 @@ #include "libgo4.h" +#ifdef _AIX +// On AIX, CSIGSTKSZ is too small to handle Go sighandler. +#define CSIGSTKSZ 0x4000 +#else +#define CSIGSTKSZ SIGSTKSZ +#endif + static void die(const char* msg) { perror(msg); exit(EXIT_FAILURE); @@ -53,12 +60,12 @@ static void* thread1(void* arg __attribute__ ((unused))) { // Set up an alternate signal stack for this thread. memset(&ss, 0, sizeof ss); - ss.ss_sp = malloc(SIGSTKSZ); + ss.ss_sp = malloc(CSIGSTKSZ); if (ss.ss_sp == NULL) { die("malloc"); } ss.ss_flags = 0; - ss.ss_size = SIGSTKSZ; + ss.ss_size = CSIGSTKSZ; if (sigaltstack(&ss, NULL) < 0) { die("sigaltstack"); } @@ -93,7 +100,7 @@ static void* thread1(void* arg __attribute__ ((unused))) { fprintf(stderr, "sigaltstack disabled on return from Go\n"); ok = 0; } else if (nss.ss_sp != ss.ss_sp) { - fprintf(stderr, "sigalstack changed on return from Go\n"); + fprintf(stderr, "sigaltstack changed on return from Go\n"); ok = 0; } @@ -112,12 +119,12 @@ static void* thread2(void* arg __attribute__ ((unused))) { // Set up an alternate signal stack for this thread. memset(&ss, 0, sizeof ss); - ss.ss_sp = malloc(SIGSTKSZ); + ss.ss_sp = malloc(CSIGSTKSZ); if (ss.ss_sp == NULL) { die("malloc"); } ss.ss_flags = 0; - ss.ss_size = SIGSTKSZ; + ss.ss_size = CSIGSTKSZ; if (sigaltstack(&ss, NULL) < 0) { die("sigaltstack"); } @@ -150,7 +157,7 @@ static void* thread2(void* arg __attribute__ ((unused))) { fprintf(stderr, "sigaltstack disabled on return from Go\n"); ok = 0; } else if (nss.ss_sp != ss.ss_sp) { - fprintf(stderr, "sigalstack changed on return from Go\n"); + fprintf(stderr, "sigaltstack changed on return from Go\n"); ok = 0; } diff --git a/misc/cgo/testcarchive/testdata/main5.c b/misc/cgo/testcarchive/testdata/main5.c index 897b70d2fa..d431ce01ce 100644 --- a/misc/cgo/testcarchive/testdata/main5.c +++ b/misc/cgo/testcarchive/testdata/main5.c @@ -14,6 +14,8 @@ #include "libgo2.h" +int *nilp; + int main(int argc, char** argv) { int verbose; int test; @@ -39,7 +41,7 @@ int main(int argc, char** argv) { printf("attempting segfault\n"); } - volatile int crash = *(int *) 0; + *nilp = 0; break; } @@ -85,7 +87,7 @@ int main(int argc, char** argv) { printf("write(2) unexpectedly succeeded\n"); return 0; } - printf("did not receieve SIGPIPE\n"); + printf("did not receive SIGPIPE\n"); return 0; } default: diff --git a/misc/cgo/testcshared/cshared_test.go b/misc/cgo/testcshared/cshared_test.go index 833650e5e6..daef3a9e54 100644 --- a/misc/cgo/testcshared/cshared_test.go +++ b/misc/cgo/testcshared/cshared_test.go @@ -7,12 +7,14 @@ package cshared_test import ( "bytes" "debug/elf" + "flag" "fmt" "io/ioutil" "log" "os" "os/exec" "path/filepath" + "runtime" "strings" "sync" "testing" @@ -35,6 +37,11 @@ func TestMain(m *testing.M) { func testMain(m *testing.M) int { log.SetFlags(log.Lshortfile) + flag.Parse() + if testing.Short() && os.Getenv("GO_BUILDER_NAME") == "" { + fmt.Printf("SKIP - short mode and $GO_BUILDER_NAME not set\n") + os.Exit(0) + } GOOS = goEnv("GOOS") GOARCH = goEnv("GOARCH") @@ -45,8 +52,8 @@ func testMain(m *testing.M) int { } androiddir = fmt.Sprintf("/data/local/tmp/testcshared-%d", os.Getpid()) - if GOOS == "android" { - args := append(adbCmd(), "shell", "mkdir", "-p", androiddir) + if runtime.GOOS != GOOS && GOOS == "android" { + args := append(adbCmd(), "exec-out", "mkdir", "-p", androiddir) cmd := exec.Command(args[0], args[1:]...) out, err := cmd.CombinedOutput() if err != nil { @@ -104,7 +111,7 @@ func testMain(m *testing.M) int { if GOARCH == "arm" || GOARCH == "arm64" { libgodir += "_shared" } - case "dragonfly", "freebsd", "linux", "netbsd", "openbsd", "solaris": + case "dragonfly", "freebsd", "linux", "netbsd", "openbsd", "solaris", "illumos": libgodir += "_shared" } cc = append(cc, "-I", filepath.Join("pkg", libgodir)) @@ -177,7 +184,7 @@ func adbCmd() []string { } func adbPush(t *testing.T, filename string) { - if GOOS != "android" { + if runtime.GOOS == GOOS || GOOS != "android" { return } args := append(adbCmd(), "push", filename, fmt.Sprintf("%s/%s", androiddir, filename)) @@ -191,7 +198,7 @@ func adbRun(t *testing.T, env []string, adbargs ...string) string { if GOOS != "android" { t.Fatalf("trying to run adb command when operating system is not android.") } - args := append(adbCmd(), "shell") + args := append(adbCmd(), "exec-out") // Propagate LD_LIBRARY_PATH to the adb shell invocation. for _, e := range env { if strings.Index(e, "LD_LIBRARY_PATH=") != -1 { @@ -236,7 +243,7 @@ func run(t *testing.T, extraEnv []string, args ...string) string { func runExe(t *testing.T, extraEnv []string, args ...string) string { t.Helper() - if GOOS == "android" { + if runtime.GOOS != GOOS && GOOS == "android" { return adbRun(t, append(os.Environ(), extraEnv...), args...) } return run(t, extraEnv, args...) @@ -268,7 +275,7 @@ func createHeaders() error { return fmt.Errorf("command failed: %v\n%v\n%s\n", args, err, out) } - if GOOS == "android" { + if runtime.GOOS != GOOS && GOOS == "android" { args = append(adbCmd(), "push", libgoname, fmt.Sprintf("%s/%s", androiddir, libgoname)) cmd = exec.Command(args[0], args[1:]...) out, err = cmd.CombinedOutput() @@ -298,7 +305,7 @@ func cleanupAndroid() { if GOOS != "android" { return } - args := append(adbCmd(), "shell", "rm", "-rf", androiddir) + args := append(adbCmd(), "exec-out", "rm", "-rf", androiddir) cmd := exec.Command(args[0], args[1:]...) out, err := cmd.CombinedOutput() if err != nil { @@ -521,7 +528,7 @@ func TestCachedInstall(t *testing.T) { if err != nil { t.Fatal(err) } - // defer os.RemoveAll(tmpdir) + defer os.RemoveAll(tmpdir) copyFile(t, filepath.Join(tmpdir, "src", "testcshared", "go.mod"), "go.mod") copyFile(t, filepath.Join(tmpdir, "src", "testcshared", "libgo", "libgo.go"), filepath.Join("libgo", "libgo.go")) diff --git a/misc/cgo/testplugin/plugin_test.go b/misc/cgo/testplugin/plugin_test.go index 2c110494d0..7e2b6eb04c 100644 --- a/misc/cgo/testplugin/plugin_test.go +++ b/misc/cgo/testplugin/plugin_test.go @@ -7,6 +7,7 @@ package plugin_test import ( "bytes" "context" + "flag" "fmt" "io/ioutil" "log" @@ -22,8 +23,16 @@ import ( var gcflags string = os.Getenv("GO_GCFLAGS") func TestMain(m *testing.M) { + flag.Parse() + if testing.Short() && os.Getenv("GO_BUILDER_NAME") == "" { + fmt.Printf("SKIP - short mode and $GO_BUILDER_NAME not set\n") + os.Exit(0) + } log.SetFlags(log.Lshortfile) + os.Exit(testMain(m)) +} +func testMain(m *testing.M) int { // Copy testdata into GOPATH/src/testarchive, along with a go.mod file // declaring the same path. @@ -77,7 +86,7 @@ func TestMain(m *testing.M) { goCmd(nil, "build", "-buildmode=plugin", "-o=unnamed2.so", "./unnamed2/main.go") goCmd(nil, "build", "-o", "host.exe", "./host") - os.Exit(m.Run()) + return m.Run() } func goCmd(t *testing.T, op string, args ...string) { diff --git a/misc/cgo/testplugin/testdata/iface/main.go b/misc/cgo/testplugin/testdata/iface/main.go index 7b4ea97442..c04f28880f 100644 --- a/misc/cgo/testplugin/testdata/iface/main.go +++ b/misc/cgo/testplugin/testdata/iface/main.go @@ -5,9 +5,10 @@ package main import ( - "testplugin/iface_i" "log" "plugin" + + "testplugin/iface_i" ) func main() { diff --git a/misc/cgo/testplugin/testdata/plugin1/plugin1.go b/misc/cgo/testplugin/testdata/plugin1/plugin1.go index 136c179b65..d29d674ade 100644 --- a/misc/cgo/testplugin/testdata/plugin1/plugin1.go +++ b/misc/cgo/testplugin/testdata/plugin1/plugin1.go @@ -8,8 +8,9 @@ package main import "C" import ( - "testplugin/common" "reflect" + + "testplugin/common" ) func F() int { diff --git a/misc/cgo/testplugin/testdata/plugin2/plugin2.go b/misc/cgo/testplugin/testdata/plugin2/plugin2.go index 37168a13e1..31ed642ca5 100644 --- a/misc/cgo/testplugin/testdata/plugin2/plugin2.go +++ b/misc/cgo/testplugin/testdata/plugin2/plugin2.go @@ -12,9 +12,10 @@ import "C" // void cfunc() {} // uses cgo_topofstack import ( - "testplugin/common" "reflect" "strings" + + "testplugin/common" ) func init() { diff --git a/misc/cgo/testshared/testdata/exe/exe.go b/misc/cgo/testshared/testdata/exe/exe.go index 86582581a6..ee95f97bc9 100644 --- a/misc/cgo/testshared/testdata/exe/exe.go +++ b/misc/cgo/testshared/testdata/exe/exe.go @@ -1,10 +1,11 @@ package main import ( - "testshared/depBase" "os" "reflect" "runtime" + + "testshared/depBase" ) // Having a function declared in the main package triggered diff --git a/misc/cgo/testso/so_test.go b/misc/cgo/testso/so_test.go index 500b08fae8..9c7f272439 100644 --- a/misc/cgo/testso/so_test.go +++ b/misc/cgo/testso/so_test.go @@ -25,7 +25,9 @@ func requireTestSOSupported(t *testing.T) { t.Skip("No exec facility on iOS.") } case "ppc64": - t.Skip("External linking not implemented on ppc64 (issue #8912).") + if runtime.GOOS == "linux" { + t.Skip("External linking not implemented on aix/ppc64 (issue #8912).") + } case "mips64le", "mips64": t.Skip("External linking not implemented on mips64.") } @@ -80,6 +82,8 @@ func TestSO(t *testing.T) { case "windows": ext = "dll" args = append(args, "-DEXPORT_DLL") + case "aix": + ext = "so.1" } sofname := "libcgosotest." + ext args = append(args, "-o", sofname, "cgoso_c.c") @@ -93,6 +97,16 @@ func TestSO(t *testing.T) { } t.Logf("%s:\n%s", strings.Join(cmd.Args, " "), out) + if runtime.GOOS == "aix" { + // Shared object must be wrapped by an archive + cmd = exec.Command("ar", "-X64", "-q", "libcgosotest.a", "libcgosotest.so.1") + cmd.Dir = modRoot + out, err = cmd.CombinedOutput() + if err != nil { + t.Fatalf("%s: %s\n%s", strings.Join(cmd.Args, " "), err, out) + } + } + cmd = exec.Command("go", "build", "-o", "main.exe", "main.go") cmd.Dir = modRoot cmd.Env = append(os.Environ(), "GOPATH="+GOPATH) diff --git a/misc/cgo/testso/testdata/cgoso.c b/misc/cgo/testso/testdata/cgoso.c index 917f472d36..612e5d335a 100644 --- a/misc/cgo/testso/testdata/cgoso.c +++ b/misc/cgo/testso/testdata/cgoso.c @@ -4,7 +4,7 @@ #include "_cgo_export.h" -#ifdef WIN32 +#if defined(WIN32) || defined(_AIX) extern void setCallback(void *); void init() { setCallback(goCallback); diff --git a/misc/cgo/testso/testdata/cgoso.go b/misc/cgo/testso/testdata/cgoso.go index 29814fa43a..bba5de3312 100644 --- a/misc/cgo/testso/testdata/cgoso.go +++ b/misc/cgo/testso/testdata/cgoso.go @@ -15,6 +15,7 @@ package cgosotest #cgo netbsd LDFLAGS: -L. libcgosotest.so #cgo darwin LDFLAGS: -L. libcgosotest.dylib #cgo windows LDFLAGS: -L. libcgosotest.dll +#cgo aix LDFLAGS: -L. -l cgosotest void init(void); void sofunc(void); diff --git a/misc/cgo/testso/testdata/cgoso_c.c b/misc/cgo/testso/testdata/cgoso_c.c index 7a38022b54..e5015ed5e8 100644 --- a/misc/cgo/testso/testdata/cgoso_c.c +++ b/misc/cgo/testso/testdata/cgoso_c.c @@ -14,6 +14,15 @@ __declspec(dllexport) void setCallback(void *f) goCallback = (void (*)())f; } __declspec(dllexport) void sofunc(void); +#elif defined(_AIX) +// AIX doesn't allow the creation of a shared object with an +// undefined symbol. It's possible to bypass this problem by +// using -Wl,-G and -Wl,-brtl option which allows run-time linking. +// However, that's not how most of AIX shared object works. +// Therefore, it's better to consider goCallback as a pointer and +// to set up during an init function. +void (*goCallback)(void); +void setCallback(void *f) { goCallback = f; } #else extern void goCallback(void); void setCallback(void *f) { (void)f; } diff --git a/misc/cgo/testso/testdata/cgoso_unix.go b/misc/cgo/testso/testdata/cgoso_unix.go index 49cdeaa2f5..1860694f1e 100644 --- a/misc/cgo/testso/testdata/cgoso_unix.go +++ b/misc/cgo/testso/testdata/cgoso_unix.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build dragonfly freebsd linux netbsd solaris +// +build aix dragonfly freebsd linux netbsd solaris package cgosotest diff --git a/misc/cgo/testsovar/so_test.go b/misc/cgo/testsovar/so_test.go index 500b08fae8..9c7f272439 100644 --- a/misc/cgo/testsovar/so_test.go +++ b/misc/cgo/testsovar/so_test.go @@ -25,7 +25,9 @@ func requireTestSOSupported(t *testing.T) { t.Skip("No exec facility on iOS.") } case "ppc64": - t.Skip("External linking not implemented on ppc64 (issue #8912).") + if runtime.GOOS == "linux" { + t.Skip("External linking not implemented on aix/ppc64 (issue #8912).") + } case "mips64le", "mips64": t.Skip("External linking not implemented on mips64.") } @@ -80,6 +82,8 @@ func TestSO(t *testing.T) { case "windows": ext = "dll" args = append(args, "-DEXPORT_DLL") + case "aix": + ext = "so.1" } sofname := "libcgosotest." + ext args = append(args, "-o", sofname, "cgoso_c.c") @@ -93,6 +97,16 @@ func TestSO(t *testing.T) { } t.Logf("%s:\n%s", strings.Join(cmd.Args, " "), out) + if runtime.GOOS == "aix" { + // Shared object must be wrapped by an archive + cmd = exec.Command("ar", "-X64", "-q", "libcgosotest.a", "libcgosotest.so.1") + cmd.Dir = modRoot + out, err = cmd.CombinedOutput() + if err != nil { + t.Fatalf("%s: %s\n%s", strings.Join(cmd.Args, " "), err, out) + } + } + cmd = exec.Command("go", "build", "-o", "main.exe", "main.go") cmd.Dir = modRoot cmd.Env = append(os.Environ(), "GOPATH="+GOPATH) diff --git a/misc/cgo/testsovar/testdata/cgoso.go b/misc/cgo/testsovar/testdata/cgoso.go index 88d44c2c6e..9c7f95e92e 100644 --- a/misc/cgo/testsovar/testdata/cgoso.go +++ b/misc/cgo/testsovar/testdata/cgoso.go @@ -19,6 +19,7 @@ package cgosotest #cgo netbsd LDFLAGS: -L. libcgosotest.so #cgo darwin LDFLAGS: -L. libcgosotest.dylib #cgo windows LDFLAGS: -L. libcgosotest.dll +#cgo aix LDFLAGS: -L. -l cgosotest #include "cgoso_c.h" diff --git a/misc/git/pre-commit b/misc/git/pre-commit deleted file mode 100755 index 242159f04a..0000000000 --- a/misc/git/pre-commit +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh -# Copyright 2012 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. - -# git gofmt pre-commit hook -# -# To use, store as .git/hooks/pre-commit inside your repository and make sure -# it has execute permissions. -# -# This script does not handle file names that contain spaces. - -gofiles=$(git diff --cached --name-only --diff-filter=ACM | grep '\.go$') -[ -z "$gofiles" ] && exit 0 - -unformatted=$(gofmt -l $gofiles) -[ -z "$unformatted" ] && exit 0 - -# Some files are not gofmt'd. Print message and fail. - -echo >&2 "Go files must be formatted with gofmt. Please run:" -for fn in $unformatted; do - echo >&2 " gofmt -w $PWD/$fn" -done - -exit 1 diff --git a/misc/go.mod b/misc/go.mod new file mode 100644 index 0000000000..fc9f1133a4 --- /dev/null +++ b/misc/go.mod @@ -0,0 +1,11 @@ +// Module misc contains tests and binaries that pertain to specific build modes +// (cgo) and platforms (Android and iOS). +// +// The 'run' scripts in ../src execute these tests and binaries, which need to +// be in a module in order to build and run successfully in module mode. +// (Otherwise, they lack well-defined import paths, and module mode — unlike +// GOPATH mode — does not synthesize import paths from the absolute working +// directory.) +module misc + +go 1.12 diff --git a/misc/ios/README b/misc/ios/README index 83fa2d6fc7..b9952dc11d 100644 --- a/misc/ios/README +++ b/misc/ios/README @@ -31,9 +31,10 @@ which will output something similar to If you have multiple devices connected, specify the device UDID with the GOIOS_DEVICE_ID variable. Use `idevice_id -l` to list all available UDIDs. -Finally, to run the standard library tests, run iostest.bash with GOARCH set. For example, +Finally, to run the standard library tests, run all.bash as usual, but with the compiler +set to the clang wrapper that invokes clang for iOS. For example, - GOARCH=arm64 ./iostest.bash + GOARCH=arm64 CGO_ENABLED=1 CC_FOR_TARGET=$(pwd)/../misc/ios/clangwrap.sh ./all.bash To use the go tool directly to run programs and tests, put $GOROOT/bin into PATH to ensure the go_darwin_$GOARCH_exec wrapper is found. For example, to run the archive/tar tests diff --git a/misc/ios/go_darwin_arm_exec.go b/misc/ios/go_darwin_arm_exec.go index d1bf9fd150..cdf4b07d0a 100644 --- a/misc/ios/go_darwin_arm_exec.go +++ b/misc/ios/go_darwin_arm_exec.go @@ -467,8 +467,8 @@ func idevCmd(cmd *exec.Cmd) *exec.Cmd { func run(appdir, bundleID string, args []string) error { var env []string for _, e := range os.Environ() { - // Don't override TMPDIR on the device. - if strings.HasPrefix(e, "TMPDIR=") { + // Don't override TMPDIR, HOME, GOCACHE on the device. + if strings.HasPrefix(e, "TMPDIR=") || strings.HasPrefix(e, "HOME=") || strings.HasPrefix(e, "GOCACHE=") { continue } env = append(env, e) @@ -633,8 +633,16 @@ func subdir() (pkgpath string, underGoRoot bool, err error) { if err != nil { return "", false, err } - if root := runtime.GOROOT(); strings.HasPrefix(cwd, root) { - subdir, err := filepath.Rel(root, cwd) + cwd, err = filepath.EvalSymlinks(cwd) + if err != nil { + log.Fatal(err) + } + goroot, err := filepath.EvalSymlinks(runtime.GOROOT()) + if err != nil { + return "", false, err + } + if strings.HasPrefix(cwd, goroot) { + subdir, err := filepath.Rel(goroot, cwd) if err != nil { return "", false, err } @@ -642,10 +650,14 @@ func subdir() (pkgpath string, underGoRoot bool, err error) { } for _, p := range filepath.SplitList(build.Default.GOPATH) { - if !strings.HasPrefix(cwd, p) { + pabs, err := filepath.EvalSymlinks(p) + if err != nil { + return "", false, err + } + if !strings.HasPrefix(cwd, pabs) { continue } - subdir, err := filepath.Rel(p, cwd) + subdir, err := filepath.Rel(pabs, cwd) if err == nil { return subdir, false, nil } diff --git a/misc/nacl/testdata/mime.types b/misc/nacl/testdata/mime.types index 81a415e9e6..ba678d5a4e 100644 --- a/misc/nacl/testdata/mime.types +++ b/misc/nacl/testdata/mime.types @@ -1,6 +1,6 @@ # This file maps Internet media types to unique file extension(s). # Although created for httpd, this file is used by many software systems -# and has been placed in the public domain for unlimited redisribution. +# and has been placed in the public domain for unlimited redistribution. # # The table below contains both registered and (common) unregistered types. # A type that has no unique extension can be ignored -- they are listed diff --git a/misc/nacl/testzip.proto b/misc/nacl/testzip.proto index d05219364d..5a9804b36d 100644 --- a/misc/nacl/testzip.proto +++ b/misc/nacl/testzip.proto @@ -48,43 +48,33 @@ go src=.. pprof internal binutils - testdata - + - driver - testdata - + - graph - testdata - + - report - testdata - + - profile - testdata + + driver + + + graph + + + report + + + profile + + ianlancetaylor demangle - testdata - + + + golang.org x arch arm armasm - testdata - + + + arm64 arm64asm - testdata - + + + x86 x86asm - testdata - + + + ppc64 ppc64asm - testdata - + + + archive tar testdata @@ -107,6 +97,9 @@ go src=.. + zlib crypto + ed25519 + testdata + + rsa testdata + diff --git a/misc/reboot/overlaydir_test.go b/misc/reboot/overlaydir_test.go new file mode 100644 index 0000000000..b38a8efbb9 --- /dev/null +++ b/misc/reboot/overlaydir_test.go @@ -0,0 +1,80 @@ +// 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 reboot_test + +import ( + "io" + "os" + "path/filepath" + "strings" +) + +// overlayDir makes a minimal-overhead copy of srcRoot in which new files may be added. +// +// TODO: Once we no longer need to support the misc module in GOPATH mode, +// factor this function out into a package to reduce duplication. +func overlayDir(dstRoot, srcRoot string) error { + dstRoot = filepath.Clean(dstRoot) + if err := os.MkdirAll(dstRoot, 0777); err != nil { + return err + } + + // If we don't use the absolute path here, exec'ing make.bash fails with + // “too many levels of symbolic linksâ€. + symBase, err := filepath.Abs(srcRoot) + if err != nil { + return err + } + + return filepath.Walk(srcRoot, func(srcPath string, info os.FileInfo, err error) error { + if err != nil || srcPath == srcRoot { + return err + } + + suffix := strings.TrimPrefix(srcPath, srcRoot) + for len(suffix) > 0 && suffix[0] == filepath.Separator { + suffix = suffix[1:] + } + dstPath := filepath.Join(dstRoot, suffix) + + perm := info.Mode() & os.ModePerm + if info.Mode()&os.ModeSymlink != 0 { + info, err = os.Stat(srcPath) + if err != nil { + return err + } + perm = info.Mode() & os.ModePerm + } + + // Always copy directories (don't symlink them). + // If we add a file in the overlay, we don't want to add it in the original. + if info.IsDir() { + return os.Mkdir(dstPath, perm) + } + + // If the OS supports symlinks, use them instead of copying bytes. + if err := os.Symlink(filepath.Join(symBase, suffix), dstPath); err == nil { + return nil + } + + // Otherwise, copy the bytes. + src, err := os.Open(srcPath) + if err != nil { + return err + } + defer src.Close() + + dst, err := os.OpenFile(dstPath, os.O_WRONLY|os.O_CREATE|os.O_EXCL, perm) + if err != nil { + return err + } + + _, err = io.Copy(dst, src) + if closeErr := dst.Close(); err == nil { + err = closeErr + } + return err + }) +} diff --git a/misc/reboot/reboot_test.go b/misc/reboot/reboot_test.go new file mode 100644 index 0000000000..717c0fb709 --- /dev/null +++ b/misc/reboot/reboot_test.go @@ -0,0 +1,52 @@ +// 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 reboot_test verifies that the current GOROOT can be used to bootstrap +// itself. +package reboot_test + +import ( + "io/ioutil" + "os" + "os/exec" + "path/filepath" + "runtime" + "testing" +) + +func TestRepeatBootstrap(t *testing.T) { + goroot, err := ioutil.TempDir("", "reboot-goroot") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(goroot) + + gorootSrc := filepath.Join(goroot, "src") + if err := overlayDir(gorootSrc, filepath.Join(runtime.GOROOT(), "src")); err != nil { + t.Fatal(err) + } + + if err := ioutil.WriteFile(filepath.Join(goroot, "VERSION"), []byte(runtime.Version()), 0666); err != nil { + t.Fatal(err) + } + + var makeScript string + switch runtime.GOOS { + case "windows": + makeScript = "make.bat" + case "plan9": + makeScript = "make.rc" + default: + makeScript = "make.bash" + } + + cmd := exec.Command(filepath.Join(runtime.GOROOT(), "src", makeScript)) + cmd.Dir = gorootSrc + cmd.Env = append(os.Environ(), "GOROOT=", "GOROOT_BOOTSTRAP="+runtime.GOROOT()) + cmd.Stderr = os.Stderr + cmd.Stdout = os.Stdout + if err := cmd.Run(); err != nil { + t.Fatal(err) + } +} diff --git a/misc/wasm/wasm_exec.js b/misc/wasm/wasm_exec.js index 165d567750..a1d88e6eac 100644 --- a/misc/wasm/wasm_exec.js +++ b/misc/wasm/wasm_exec.js @@ -3,6 +3,15 @@ // license that can be found in the LICENSE file. (() => { + // Map multiple JavaScript environments to a single common API, + // preferring web standards over Node.js API. + // + // Environments considered: + // - Browsers + // - Node.js + // - Electron + // - Parcel + if (typeof global !== "undefined") { // global already exists } else if (typeof window !== "undefined") { @@ -13,30 +22,15 @@ throw new Error("cannot export Go (neither global, window nor self is defined)"); } - // Map web browser API and Node.js API to a single common API (preferring web standards over Node.js API). - const isNodeJS = global.process && global.process.title === "node"; - if (isNodeJS) { + if (!global.require && typeof require !== "undefined") { global.require = require; + } + + if (!global.fs && global.require) { global.fs = require("fs"); + } - const nodeCrypto = require("crypto"); - global.crypto = { - getRandomValues(b) { - nodeCrypto.randomFillSync(b); - }, - }; - - global.performance = { - now() { - const [sec, nsec] = process.hrtime(); - return sec * 1000 + nsec / 1000000; - }, - }; - - const util = require("util"); - global.TextEncoder = util.TextEncoder; - global.TextDecoder = util.TextDecoder; - } else { + if (!global.fs) { let outputBuf = ""; global.fs = { constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1 }, // unused @@ -72,6 +66,34 @@ }; } + if (!global.crypto) { + const nodeCrypto = require("crypto"); + global.crypto = { + getRandomValues(b) { + nodeCrypto.randomFillSync(b); + }, + }; + } + + if (!global.performance) { + global.performance = { + now() { + const [sec, nsec] = process.hrtime(); + return sec * 1000 + nsec / 1000000; + }, + }; + } + + if (!global.TextEncoder) { + global.TextEncoder = require("util").TextEncoder; + } + + if (!global.TextDecoder) { + global.TextDecoder = require("util").TextDecoder; + } + + // End of polyfills for common API. + const encoder = new TextEncoder("utf-8"); const decoder = new TextDecoder("utf-8"); @@ -243,7 +265,15 @@ const id = this._nextCallbackTimeoutID; this._nextCallbackTimeoutID++; this._scheduledTimeouts.set(id, setTimeout( - () => { this._resume(); }, + () => { + this._resume(); + while (this._scheduledTimeouts.has(id)) { + // for some reason Go failed to register the timeout event, log and try again + // (temporary workaround for https://github.com/golang/go/issues/28975) + console.warn("scheduleTimeoutEvent: missed timeout event"); + this._resume(); + } + }, getInt64(sp + 8) + 1, // setTimeout has been seen to fire up to 1 millisecond early )); mem().setInt32(sp + 16, id, true); @@ -385,9 +415,13 @@ let offset = 4096; const strPtr = (str) => { - let ptr = offset; - new Uint8Array(mem.buffer, offset, str.length + 1).set(encoder.encode(str + "\0")); - offset += str.length + (8 - (str.length % 8)); + const ptr = offset; + const bytes = encoder.encode(str + "\0"); + new Uint8Array(mem.buffer, offset, bytes.length).set(bytes); + offset += bytes.length; + if (offset % 8 !== 0) { + offset += 8 - (offset % 8); + } return ptr; }; @@ -439,9 +473,15 @@ } } - if (isNodeJS) { + if ( + global.require && + global.require.main === module && + global.process && + global.process.versions && + !global.process.versions.electron + ) { if (process.argv.length < 3) { - process.stderr.write("usage: go_js_wasm_exec [wasm binary] [arguments]\n"); + console.error("usage: go_js_wasm_exec [wasm binary] [arguments]"); process.exit(1); } @@ -459,7 +499,8 @@ }); return go.run(result.instance); }).catch((err) => { - throw err; + console.error(err); + process.exit(1); }); } })(); diff --git a/src/README.vendor b/src/README.vendor new file mode 100644 index 0000000000..c80265344e --- /dev/null +++ b/src/README.vendor @@ -0,0 +1,54 @@ +Vendoring in std and cmd +======================== + +The Go command maintains copies of external packages needed by the +standard library in the src/vendor and src/cmd/vendor directories. + +In GOPATH mode, imports of vendored packages are resolved to these +directories following normal vendor directory logic +(see golang.org/s/go15vendor). + +In module mode, std and cmd are modules (defined in src/go.mod and +src/cmd/go.mod). When a package outside std or cmd is imported +by a package inside std or cmd, the import path is interpreted +as if it had a "vendor/" prefix. For example, within "crypto/tls", +an import of "golang.org/x/crypto/cryptobyte" resolves to +"vendor/golang.org/x/crypto/cryptobyte". When a package with the +same path is imported from a package outside std or cmd, it will +be resolved normally. Consequently, a binary may be built with two +copies of a package at different versions if the package is +imported normally and vendored by the standard library. + +Vendored packages are internally renamed with a "vendor/" prefix +to preserve the invariant that all packages have distinct paths. +This is necessary to avoid compiler and linker conflicts. Adding +a "vendor/" prefix also maintains the invariant that standard +library packages begin with a dotless path element. + +The module requirements of std and cmd do not influence version +selection in other modules. They are only considered when running +module commands like 'go get' and 'go mod vendor' from a directory +in GOROOT/src. + +Maintaining vendor directories +============================== + +Before updating vendor directories, ensure that module mode is enabled. +Make sure GO111MODULE=off is not set ('on' or 'auto' should work). + +Requirements may be added, updated, and removed with 'go get'. +The vendor directory may be updated with 'go mod vendor'. +A typical sequence might be: + + cd src + go get -m golang.org/x/net@latest + go mod tidy + go mod vendor + +Use caution when passing '-u' to 'go get'. The '-u' flag updates +modules providing all transitively imported packages, not just +the target module. + +Note that 'go mod vendor' only copies packages that are transitively +imported by packages in the current module. If a new package is needed, +it should be imported before running 'go mod vendor'. diff --git a/src/androidtest.bash b/src/androidtest.bash deleted file mode 100755 index ba776d2278..0000000000 --- a/src/androidtest.bash +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env bash -# Copyright 2014 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. - -# For testing Android. - -set -e -ulimit -c 0 # no core files - -if [ ! -f make.bash ]; then - echo 'androidtest.bash must be run from $GOROOT/src' 1>&2 - exit 1 -fi - -if [ -z $GOOS ]; then - export GOOS=android -fi -if [ "$GOOS" != "android" ]; then - echo "androidtest.bash requires GOOS=android, got GOOS=$GOOS" 1>&2 - exit 1 -fi - -if [ -n "$GOARM" ] && [ "$GOARM" != "7" ]; then - echo "android only supports GOARM=7, got GOARM=$GOARM" 1>&2 - exit 1 -fi - -export CGO_ENABLED=1 -unset GOBIN - -export GOROOT=$(dirname $(pwd)) -# Put the exec wrapper into PATH -export PATH=$GOROOT/bin:$PATH - -# Run standard tests. -bash all.bash diff --git a/src/archive/tar/stat_actime1.go b/src/archive/tar/stat_actime1.go index cf9cc79c59..1bdd1c9dcb 100644 --- a/src/archive/tar/stat_actime1.go +++ b/src/archive/tar/stat_actime1.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build linux dragonfly openbsd solaris +// +build aix linux dragonfly openbsd solaris package tar diff --git a/src/archive/tar/stat_unix.go b/src/archive/tar/stat_unix.go index 868105f338..d1576db41d 100644 --- a/src/archive/tar/stat_unix.go +++ b/src/archive/tar/stat_unix.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build linux darwin dragonfly freebsd openbsd netbsd solaris +// +build aix linux darwin dragonfly freebsd openbsd netbsd solaris package tar @@ -54,6 +54,11 @@ func statUnix(fi os.FileInfo, h *Header) error { if h.Typeflag == TypeChar || h.Typeflag == TypeBlock { dev := uint64(sys.Rdev) // May be int32 or uint32 switch runtime.GOOS { + case "aix": + var major, minor uint32 + major = uint32((dev & 0x3fffffff00000000) >> 32) + minor = uint32((dev & 0x00000000ffffffff) >> 0) + h.Devmajor, h.Devminor = int64(major), int64(minor) case "linux": // Copied from golang.org/x/sys/unix/dev_linux.go. major := uint32((dev & 0x00000000000fff00) >> 8) diff --git a/src/archive/zip/struct.go b/src/archive/zip/struct.go index bd637d185b..686e79781a 100644 --- a/src/archive/zip/struct.go +++ b/src/archive/zip/struct.go @@ -154,10 +154,15 @@ func (fi headerFileInfo) Size() int64 { } return int64(fi.fh.UncompressedSize) } -func (fi headerFileInfo) IsDir() bool { return fi.Mode().IsDir() } -func (fi headerFileInfo) ModTime() time.Time { return fi.fh.ModTime() } -func (fi headerFileInfo) Mode() os.FileMode { return fi.fh.Mode() } -func (fi headerFileInfo) Sys() interface{} { return fi.fh } +func (fi headerFileInfo) IsDir() bool { return fi.Mode().IsDir() } +func (fi headerFileInfo) ModTime() time.Time { + if fi.fh.Modified.IsZero() { + return fi.fh.ModTime() + } + return fi.fh.Modified.UTC() +} +func (fi headerFileInfo) Mode() os.FileMode { return fi.fh.Mode() } +func (fi headerFileInfo) Sys() interface{} { return fi.fh } // FileInfoHeader creates a partially-populated FileHeader from an // os.FileInfo. diff --git a/src/archive/zip/zip_test.go b/src/archive/zip/zip_test.go index 3d5c759851..efdb5bd044 100644 --- a/src/archive/zip/zip_test.go +++ b/src/archive/zip/zip_test.go @@ -114,6 +114,47 @@ func TestFileHeaderRoundTrip64(t *testing.T) { testHeaderRoundTrip(fh, uint32max, fh.UncompressedSize64, t) } +func TestFileHeaderRoundTripModified(t *testing.T) { + fh := &FileHeader{ + Name: "foo.txt", + UncompressedSize: 987654321, + Modified: time.Now().Local(), + ModifiedTime: 1234, + ModifiedDate: 5678, + } + fi := fh.FileInfo() + fh2, err := FileInfoHeader(fi) + if err != nil { + t.Fatal(err) + } + if got, want := fh2.Modified, fh.Modified.UTC(); got != want { + t.Errorf("Modified: got %s, want %s\n", got, want) + } + if got, want := fi.ModTime(), fh.Modified.UTC(); got != want { + t.Errorf("Modified: got %s, want %s\n", got, want) + } +} + +func TestFileHeaderRoundTripWithoutModified(t *testing.T) { + fh := &FileHeader{ + Name: "foo.txt", + UncompressedSize: 987654321, + ModifiedTime: 1234, + ModifiedDate: 5678, + } + fi := fh.FileInfo() + fh2, err := FileInfoHeader(fi) + if err != nil { + t.Fatal(err) + } + if got, want := fh2.ModTime(), fh.ModTime(); got != want { + t.Errorf("Modified: got %s, want %s\n", got, want) + } + if got, want := fi.ModTime(), fh.ModTime(); got != want { + t.Errorf("Modified: got %s, want %s\n", got, want) + } +} + type repeatedByte struct { off int64 b byte diff --git a/src/bootstrap.bash b/src/bootstrap.bash index 32b736ad78..88c080a948 100755 --- a/src/bootstrap.bash +++ b/src/bootstrap.bash @@ -45,10 +45,11 @@ fi unset GOROOT src=$(cd .. && pwd) echo "#### Copying to $targ" -cp -R "$src" "$targ" +cp -Rp "$src" "$targ" cd "$targ" echo echo "#### Cleaning $targ" +chmod -R +w . rm -f .gitignore if [ -e .git ]; then git clean -f -d @@ -72,6 +73,7 @@ if [ "$goos" = "$gohostos" -a "$goarch" = "$gohostarch" ]; then # prepare a clean toolchain for others. true else + rm -f bin/go_${goos}_${goarch}_exec mv bin/*_*/* bin rmdir bin/*_* rm -rf "pkg/${gohostos}_${gohostarch}" "pkg/tool/${gohostos}_${gohostarch}" diff --git a/src/bufio/example_test.go b/src/bufio/example_test.go index 4666e6d985..bb57139918 100644 --- a/src/bufio/example_test.go +++ b/src/bufio/example_test.go @@ -94,6 +94,9 @@ func ExampleScanner_emptyFinalToken() { return i + 1, data[:i], nil } } + if !atEOF { + return 0, nil, nil + } // There is one final token to be delivered, which may be the empty string. // Returning bufio.ErrFinalToken here tells Scan there are no more tokens after this // but does not trigger an error to be returned from Scan itself. diff --git a/src/buildall.bash b/src/buildall.bash index 5820b4d589..5762a332de 100755 --- a/src/buildall.bash +++ b/src/buildall.bash @@ -73,7 +73,11 @@ do export GOARCH=386 export GO386=387 fi - if ! "$GOROOT/bin/go" build -a std cmd; then + + # Build and vet everything. + # cmd/go/internal/work/exec.go enables the same vet flags during go test of std cmd + # and should be kept in sync with any vet flag changes here. + if ! "$GOROOT/bin/go" build std cmd || ! "$GOROOT/bin/go" vet -unsafeptr=false std cmd; then failed=true if $sete; then exit 1 diff --git a/src/builtin/builtin.go b/src/builtin/builtin.go index c78fe09ea6..01190e9900 100644 --- a/src/builtin/builtin.go +++ b/src/builtin/builtin.go @@ -151,7 +151,7 @@ func delete(m map[Type]Type1, key Type) // Slice, or map: the number of elements in v; if v is nil, len(v) is zero. // String: the number of bytes in v. // Channel: the number of elements queued (unread) in the channel buffer; -// if v is nil, len(v) is zero. +// if v is nil, len(v) is zero. // For some arguments, such as a string literal or a simple array expression, the // result can be a constant. See the Go language specification's "Length and // capacity" section for details. @@ -226,10 +226,9 @@ func close(c chan<- Type) // invocation of F then behaves like a call to panic, terminating G's // execution and running any deferred functions. This continues until all // functions in the executing goroutine have stopped, in reverse order. At -// that point, the program is terminated and the error condition is reported, -// including the value of the argument to panic. This termination sequence -// is called panicking and can be controlled by the built-in function -// recover. +// that point, the program is terminated with a non-zero exit code. This +// termination sequence is called panicking and can be controlled by the +// built-in function recover. func panic(v interface{}) // The recover built-in function allows a program to manage behavior of a diff --git a/src/bytes/bytes.go b/src/bytes/bytes.go index daf4a32f26..eb13212384 100644 --- a/src/bytes/bytes.go +++ b/src/bytes/bytes.go @@ -12,23 +12,12 @@ import ( "unicode/utf8" ) -// Equal returns a boolean reporting whether a and b +// Equal reports whether a and b // are the same length and contain the same bytes. // A nil argument is equivalent to an empty slice. func Equal(a, b []byte) bool { - return bytealg.Equal(a, b) -} - -func equalPortable(a, b []byte) bool { - if len(a) != len(b) { - return false - } - for i, c := range a { - if c != b[i] { - return false - } - } - return true + // Neither cmd/compile nor gccgo allocates for these string conversions. + return string(a) == string(b) } // Compare returns an integer comparing two byte slices lexicographically. @@ -114,12 +103,34 @@ func indexBytePortable(s []byte, c byte) int { // LastIndex returns the index of the last instance of sep in s, or -1 if sep is not present in s. func LastIndex(s, sep []byte) int { n := len(sep) - if n == 0 { + switch { + case n == 0: return len(s) + case n == 1: + return LastIndexByte(s, sep[0]) + case n == len(s): + if Equal(s, sep) { + return 0 + } + return -1 + case n > len(s): + return -1 } - c := sep[0] - for i := len(s) - n; i >= 0; i-- { - if s[i] == c && (n == 1 || Equal(s[i:i+n], sep)) { + // Rabin-Karp search from the end of the string + hashss, pow := hashStrRev(sep) + last := len(s) - n + var h uint32 + for i := len(s) - 1; i >= last; i-- { + h = h*primeRK + uint32(s[i]) + } + if h == hashss && Equal(s[last:], sep) { + return last + } + for i := last - 1; i >= 0; i-- { + h *= primeRK + h += uint32(s[i]) + h -= pow * uint32(s[i+n]) + if h == hashss && Equal(s[i:i+n], sep) { return i } } @@ -477,13 +488,16 @@ func Map(mapping func(r rune) rune, s []byte) []byte { // It panics if count is negative or if // the result of (len(b) * count) overflows. func Repeat(b []byte, count int) []byte { + if count == 0 { + return []byte{} + } // Since we cannot return an error on overflow, // we should panic if the repeat will generate // an overflow. // See Issue golang.org/issue/16237. if count < 0 { panic("bytes: negative Repeat count") - } else if count > 0 && len(b)*count/count != len(b) { + } else if len(b)*count/count != len(b) { panic("bytes: Repeat count causes overflow") } @@ -496,11 +510,66 @@ func Repeat(b []byte, count int) []byte { return nb } -// ToUpper treats s as UTF-8-encoded bytes and returns a copy with all the Unicode letters within it mapped to their upper case. -func ToUpper(s []byte) []byte { return Map(unicode.ToUpper, s) } +// ToUpper returns a copy of the byte slice s with all Unicode letters mapped to +// their upper case. +func ToUpper(s []byte) []byte { + isASCII, hasLower := true, false + for i := 0; i < len(s); i++ { + c := s[i] + if c >= utf8.RuneSelf { + isASCII = false + break + } + hasLower = hasLower || ('a' <= c && c <= 'z') + } -// ToLower treats s as UTF-8-encoded bytes and returns a copy with all the Unicode letters mapped to their lower case. -func ToLower(s []byte) []byte { return Map(unicode.ToLower, s) } + if isASCII { // optimize for ASCII-only byte slices. + if !hasLower { + // Just return a copy. + return append([]byte(""), s...) + } + b := make([]byte, len(s)) + for i := 0; i < len(s); i++ { + c := s[i] + if 'a' <= c && c <= 'z' { + c -= 'a' - 'A' + } + b[i] = c + } + return b + } + return Map(unicode.ToUpper, s) +} + +// ToLower returns a copy of the byte slice s with all Unicode letters mapped to +// their lower case. +func ToLower(s []byte) []byte { + isASCII, hasUpper := true, false + for i := 0; i < len(s); i++ { + c := s[i] + if c >= utf8.RuneSelf { + isASCII = false + break + } + hasUpper = hasUpper || ('A' <= c && c <= 'Z') + } + + if isASCII { // optimize for ASCII-only byte slices. + if !hasUpper { + return append([]byte(""), s...) + } + b := make([]byte, len(s)) + for i := 0; i < len(s); i++ { + c := s[i] + if 'A' <= c && c <= 'Z' { + c += 'a' - 'A' + } + b[i] = c + } + return b + } + return Map(unicode.ToLower, s) +} // ToTitle treats s as UTF-8-encoded bytes and returns a copy with all the Unicode letters mapped to their title case. func ToTitle(s []byte) []byte { return Map(unicode.ToTitle, s) } @@ -523,6 +592,35 @@ func ToTitleSpecial(c unicode.SpecialCase, s []byte) []byte { return Map(c.ToTitle, s) } +// ToValidUTF8 treats s as UTF-8-encoded bytes and returns a copy with each run of bytes +// representing invalid UTF-8 replaced with the bytes in replacement, which may be empty. +func ToValidUTF8(s, replacement []byte) []byte { + b := make([]byte, 0, len(s)+len(replacement)) + invalid := false // previous byte was from an invalid UTF-8 sequence + for i := 0; i < len(s); { + c := s[i] + if c < utf8.RuneSelf { + i++ + invalid = false + b = append(b, byte(c)) + continue + } + _, wid := utf8.DecodeRune(s[i:]) + if wid == 1 { + i++ + if !invalid { + invalid = true + b = append(b, replacement...) + } + continue + } + invalid = false + b = append(b, s[i:i+wid]...) + i += wid + } + return b +} + // isSeparator reports whether the rune could mark a word boundary. // TODO: update when package unicode captures more of the properties. func isSeparator(r rune) bool { @@ -734,7 +832,41 @@ func TrimRight(s []byte, cutset string) []byte { // TrimSpace returns a subslice of s by slicing off all leading and // trailing white space, as defined by Unicode. func TrimSpace(s []byte) []byte { - return TrimFunc(s, unicode.IsSpace) + // Fast path for ASCII: look for the first ASCII non-space byte + start := 0 + for ; start < len(s); start++ { + c := s[start] + if c >= utf8.RuneSelf { + // If we run into a non-ASCII byte, fall back to the + // slower unicode-aware method on the remaining bytes + return TrimFunc(s[start:], unicode.IsSpace) + } + if asciiSpace[c] == 0 { + break + } + } + + // Now look for the first ASCII non-space byte from the end + stop := len(s) + for ; stop > start; stop-- { + c := s[stop-1] + if c >= utf8.RuneSelf { + return TrimFunc(s[start:stop], unicode.IsSpace) + } + if asciiSpace[c] == 0 { + break + } + } + + // At this point s[start:stop] starts and ends with an ASCII + // non-space bytes, so we're done. Non-ASCII cases have already + // been handled above. + if start == stop { + // Special case to preserve previous TrimLeftFunc behavior, + // returning nil instead of empty slice if all spaces. + return nil + } + return s[start:stop] } // Runes interprets s as a sequence of UTF-8-encoded code points. @@ -987,3 +1119,20 @@ func hashStr(sep []byte) (uint32, uint32) { } return hash, pow } + +// hashStrRev returns the hash of the reverse of sep and the +// appropriate multiplicative factor for use in Rabin-Karp algorithm. +func hashStrRev(sep []byte) (uint32, uint32) { + hash := uint32(0) + for i := len(sep) - 1; i >= 0; i-- { + hash = hash*primeRK + uint32(sep[i]) + } + var pow, sq uint32 = 1, primeRK + for i := len(sep); i > 0; i >>= 1 { + if i&1 != 0 { + pow *= sq + } + sq *= sq + } + return hash, pow +} diff --git a/src/bytes/bytes_test.go b/src/bytes/bytes_test.go index f4c0ffd2a9..2dbbb99f37 100644 --- a/src/bytes/bytes_test.go +++ b/src/bytes/bytes_test.go @@ -51,15 +51,17 @@ type BinOpTest struct { } func TestEqual(t *testing.T) { - for _, tt := range compareTests { - eql := Equal(tt.a, tt.b) - if eql != (tt.i == 0) { - t.Errorf(`Equal(%q, %q) = %v`, tt.a, tt.b, eql) - } - eql = EqualPortable(tt.a, tt.b) - if eql != (tt.i == 0) { - t.Errorf(`EqualPortable(%q, %q) = %v`, tt.a, tt.b, eql) + // Run the tests and check for allocation at the same time. + allocs := testing.AllocsPerRun(10, func() { + for _, tt := range compareTests { + eql := Equal(tt.a, tt.b) + if eql != (tt.i == 0) { + t.Errorf(`Equal(%q, %q) = %v`, tt.a, tt.b, eql) + } } + }) + if allocs > 0 { + t.Errorf("Equal allocated %v times", allocs) } } @@ -572,11 +574,6 @@ func BenchmarkEqual(b *testing.B) { benchBytes(b, sizes, bmEqual(Equal)) } -func BenchmarkEqualPort(b *testing.B) { - sizes := []int{1, 6, 32, 4 << 10, 4 << 20, 64 << 20} - benchBytes(b, sizes, bmEqual(EqualPortable)) -} - func bmEqual(equal func([]byte, []byte) bool) func(b *testing.B, n int) { return func(b *testing.B, n int) { if len(bmbuf) < 2*n { @@ -677,34 +674,6 @@ func BenchmarkCountSingle(b *testing.B) { }) } -type ExplodeTest struct { - s string - n int - a []string -} - -var explodetests = []ExplodeTest{ - {"", -1, []string{}}, - {abcd, -1, []string{"a", "b", "c", "d"}}, - {faces, -1, []string{"☺", "☻", "☹"}}, - {abcd, 2, []string{"a", "bcd"}}, -} - -func TestExplode(t *testing.T) { - for _, tt := range explodetests { - a := SplitN([]byte(tt.s), nil, tt.n) - result := sliceOfString(a) - if !eq(result, tt.a) { - t.Errorf(`Explode("%s", %d) = %v; want %v`, tt.s, tt.n, result, tt.a) - continue - } - s := Join(a, []byte{}) - if string(s) != tt.s { - t.Errorf(`Join(Explode("%s", %d), "") = "%s"`, tt.s, tt.n, s) - } - } -} - type SplitTest struct { s string sep string @@ -713,7 +682,9 @@ type SplitTest struct { } var splittests = []SplitTest{ + {"", "", -1, []string{}}, {abcd, "a", 0, nil}, + {abcd, "", 2, []string{"a", "bcd"}}, {abcd, "a", -1, []string{"", "bcd"}}, {abcd, "z", -1, []string{"abcd"}}, {abcd, "", -1, []string{"a", "b", "c", "d"}}, @@ -743,7 +714,7 @@ func TestSplit(t *testing.T) { t.Errorf(`Split(%q, %q, %d) = %v; want %v`, tt.s, tt.sep, tt.n, result, tt.a) continue } - if tt.n == 0 { + if tt.n == 0 || len(a) == 0 { continue } @@ -909,54 +880,72 @@ func TestFieldsFunc(t *testing.T) { } // Test case for any function which accepts and returns a byte slice. -// For ease of creation, we write the byte slices as strings. +// For ease of creation, we write the input byte slice as a string. type StringTest struct { - in, out string + in string + out []byte } var upperTests = []StringTest{ - {"", ""}, - {"abc", "ABC"}, - {"AbC123", "ABC123"}, - {"azAZ09_", "AZAZ09_"}, - {"\u0250\u0250\u0250\u0250\u0250", "\u2C6F\u2C6F\u2C6F\u2C6F\u2C6F"}, // grows one byte per char + {"", []byte("")}, + {"ONLYUPPER", []byte("ONLYUPPER")}, + {"abc", []byte("ABC")}, + {"AbC123", []byte("ABC123")}, + {"azAZ09_", []byte("AZAZ09_")}, + {"longStrinGwitHmixofsmaLLandcAps", []byte("LONGSTRINGWITHMIXOFSMALLANDCAPS")}, + {"long\u0250string\u0250with\u0250nonascii\u2C6Fchars", []byte("LONG\u2C6FSTRING\u2C6FWITH\u2C6FNONASCII\u2C6FCHARS")}, + {"\u0250\u0250\u0250\u0250\u0250", []byte("\u2C6F\u2C6F\u2C6F\u2C6F\u2C6F")}, // grows one byte per char + {"a\u0080\U0010FFFF", []byte("A\u0080\U0010FFFF")}, // test utf8.RuneSelf and utf8.MaxRune } var lowerTests = []StringTest{ - {"", ""}, - {"abc", "abc"}, - {"AbC123", "abc123"}, - {"azAZ09_", "azaz09_"}, - {"\u2C6D\u2C6D\u2C6D\u2C6D\u2C6D", "\u0251\u0251\u0251\u0251\u0251"}, // shrinks one byte per char + {"", []byte("")}, + {"abc", []byte("abc")}, + {"AbC123", []byte("abc123")}, + {"azAZ09_", []byte("azaz09_")}, + {"longStrinGwitHmixofsmaLLandcAps", []byte("longstringwithmixofsmallandcaps")}, + {"LONG\u2C6FSTRING\u2C6FWITH\u2C6FNONASCII\u2C6FCHARS", []byte("long\u0250string\u0250with\u0250nonascii\u0250chars")}, + {"\u2C6D\u2C6D\u2C6D\u2C6D\u2C6D", []byte("\u0251\u0251\u0251\u0251\u0251")}, // shrinks one byte per char + {"A\u0080\U0010FFFF", []byte("a\u0080\U0010FFFF")}, // test utf8.RuneSelf and utf8.MaxRune } const space = "\t\v\r\f\n\u0085\u00a0\u2000\u3000" var trimSpaceTests = []StringTest{ - {"", ""}, - {"abc", "abc"}, - {space + "abc" + space, "abc"}, - {" ", ""}, - {" \t\r\n \t\t\r\r\n\n ", ""}, - {" \t\r\n x\t\t\r\r\n\n ", "x"}, - {" \u2000\t\r\n x\t\t\r\r\ny\n \u3000", "x\t\t\r\r\ny"}, - {"1 \t\r\n2", "1 \t\r\n2"}, - {" x\x80", "x\x80"}, - {" x\xc0", "x\xc0"}, - {"x \xc0\xc0 ", "x \xc0\xc0"}, - {"x \xc0", "x \xc0"}, - {"x \xc0 ", "x \xc0"}, - {"x \xc0\xc0 ", "x \xc0\xc0"}, - {"x ☺\xc0\xc0 ", "x ☺\xc0\xc0"}, - {"x ☺ ", "x ☺"}, + {"", nil}, + {" a", []byte("a")}, + {"b ", []byte("b")}, + {"abc", []byte("abc")}, + {space + "abc" + space, []byte("abc")}, + {" ", nil}, + {"\u3000 ", nil}, + {" \u3000", nil}, + {" \t\r\n \t\t\r\r\n\n ", nil}, + {" \t\r\n x\t\t\r\r\n\n ", []byte("x")}, + {" \u2000\t\r\n x\t\t\r\r\ny\n \u3000", []byte("x\t\t\r\r\ny")}, + {"1 \t\r\n2", []byte("1 \t\r\n2")}, + {" x\x80", []byte("x\x80")}, + {" x\xc0", []byte("x\xc0")}, + {"x \xc0\xc0 ", []byte("x \xc0\xc0")}, + {"x \xc0", []byte("x \xc0")}, + {"x \xc0 ", []byte("x \xc0")}, + {"x \xc0\xc0 ", []byte("x \xc0\xc0")}, + {"x ☺\xc0\xc0 ", []byte("x ☺\xc0\xc0")}, + {"x ☺ ", []byte("x ☺")}, } // Execute f on each test case. funcName should be the name of f; it's used // in failure reports. func runStringTests(t *testing.T, f func([]byte) []byte, funcName string, testCases []StringTest) { for _, tc := range testCases { - actual := string(f([]byte(tc.in))) - if actual != tc.out { + actual := f([]byte(tc.in)) + if actual == nil && tc.out != nil { + t.Errorf("%s(%q) = nil; want %q", funcName, tc.in, tc.out) + } + if actual != nil && tc.out == nil { + t.Errorf("%s(%q) = %q; want nil", funcName, tc.in, actual) + } + if !Equal(actual, tc.out) { t.Errorf("%s(%q) = %q; want %q", funcName, tc.in, actual, tc.out) } } @@ -1044,6 +1033,64 @@ func TestToUpper(t *testing.T) { runStringTests(t, ToUpper, "ToUpper", upperTest func TestToLower(t *testing.T) { runStringTests(t, ToLower, "ToLower", lowerTests) } +func BenchmarkToUpper(b *testing.B) { + for _, tc := range upperTests { + tin := []byte(tc.in) + b.Run(tc.in, func(b *testing.B) { + for i := 0; i < b.N; i++ { + actual := ToUpper(tin) + if !Equal(actual, tc.out) { + b.Errorf("ToUpper(%q) = %q; want %q", tc.in, actual, tc.out) + } + } + }) + } +} + +func BenchmarkToLower(b *testing.B) { + for _, tc := range lowerTests { + tin := []byte(tc.in) + b.Run(tc.in, func(b *testing.B) { + for i := 0; i < b.N; i++ { + actual := ToLower(tin) + if !Equal(actual, tc.out) { + b.Errorf("ToLower(%q) = %q; want %q", tc.in, actual, tc.out) + } + } + }) + } +} + +var toValidUTF8Tests = []struct { + in string + repl string + out string +}{ + {"", "\uFFFD", ""}, + {"abc", "\uFFFD", "abc"}, + {"\uFDDD", "\uFFFD", "\uFDDD"}, + {"a\xffb", "\uFFFD", "a\uFFFDb"}, + {"a\xffb\uFFFD", "X", "aXb\uFFFD"}, + {"a☺\xffb☺\xC0\xAFc☺\xff", "", "a☺b☺c☺"}, + {"a☺\xffb☺\xC0\xAFc☺\xff", "日本語", "a☺日本語b☺日本語c☺日本語"}, + {"\xC0\xAF", "\uFFFD", "\uFFFD"}, + {"\xE0\x80\xAF", "\uFFFD", "\uFFFD"}, + {"\xed\xa0\x80", "abc", "abc"}, + {"\xed\xbf\xbf", "\uFFFD", "\uFFFD"}, + {"\xF0\x80\x80\xaf", "☺", "☺"}, + {"\xF8\x80\x80\x80\xAF", "\uFFFD", "\uFFFD"}, + {"\xFC\x80\x80\x80\x80\xAF", "\uFFFD", "\uFFFD"}, +} + +func TestToValidUTF8(t *testing.T) { + for _, tc := range toValidUTF8Tests { + got := ToValidUTF8([]byte(tc.in), []byte(tc.repl)) + if !Equal(got, []byte(tc.out)) { + t.Errorf("ToValidUTF8(%q, %q) = %q; want %q", tc.in, tc.repl, got, tc.out) + } + } +} + func TestTrimSpace(t *testing.T) { runStringTests(t, TrimSpace, "TrimSpace", trimSpaceTests) } type RepeatTest struct { @@ -1250,8 +1297,11 @@ var isValidRune = predicate{ } type TrimFuncTest struct { - f predicate - in, out string + f predicate + in string + trimOut []byte + leftOut []byte + rightOut []byte } func not(p predicate) predicate { @@ -1264,20 +1314,68 @@ func not(p predicate) predicate { } var trimFuncTests = []TrimFuncTest{ - {isSpace, space + " hello " + space, "hello"}, - {isDigit, "\u0e50\u0e5212hello34\u0e50\u0e51", "hello"}, - {isUpper, "\u2C6F\u2C6F\u2C6F\u2C6FABCDhelloEF\u2C6F\u2C6FGH\u2C6F\u2C6F", "hello"}, - {not(isSpace), "hello" + space + "hello", space}, - {not(isDigit), "hello\u0e50\u0e521234\u0e50\u0e51helo", "\u0e50\u0e521234\u0e50\u0e51"}, - {isValidRune, "ab\xc0a\xc0cd", "\xc0a\xc0"}, - {not(isValidRune), "\xc0a\xc0", "a"}, + {isSpace, space + " hello " + space, + []byte("hello"), + []byte("hello " + space), + []byte(space + " hello")}, + {isDigit, "\u0e50\u0e5212hello34\u0e50\u0e51", + []byte("hello"), + []byte("hello34\u0e50\u0e51"), + []byte("\u0e50\u0e5212hello")}, + {isUpper, "\u2C6F\u2C6F\u2C6F\u2C6FABCDhelloEF\u2C6F\u2C6FGH\u2C6F\u2C6F", + []byte("hello"), + []byte("helloEF\u2C6F\u2C6FGH\u2C6F\u2C6F"), + []byte("\u2C6F\u2C6F\u2C6F\u2C6FABCDhello")}, + {not(isSpace), "hello" + space + "hello", + []byte(space), + []byte(space + "hello"), + []byte("hello" + space)}, + {not(isDigit), "hello\u0e50\u0e521234\u0e50\u0e51helo", + []byte("\u0e50\u0e521234\u0e50\u0e51"), + []byte("\u0e50\u0e521234\u0e50\u0e51helo"), + []byte("hello\u0e50\u0e521234\u0e50\u0e51")}, + {isValidRune, "ab\xc0a\xc0cd", + []byte("\xc0a\xc0"), + []byte("\xc0a\xc0cd"), + []byte("ab\xc0a\xc0")}, + {not(isValidRune), "\xc0a\xc0", + []byte("a"), + []byte("a\xc0"), + []byte("\xc0a")}, + // The nils returned by TrimLeftFunc are odd behavior, but we need + // to preserve backwards compatibility. + {isSpace, "", + nil, + nil, + []byte("")}, + {isSpace, " ", + nil, + nil, + []byte("")}, } func TestTrimFunc(t *testing.T) { for _, tc := range trimFuncTests { - actual := string(TrimFunc([]byte(tc.in), tc.f.f)) - if actual != tc.out { - t.Errorf("TrimFunc(%q, %q) = %q; want %q", tc.in, tc.f.name, actual, tc.out) + trimmers := []struct { + name string + trim func(s []byte, f func(r rune) bool) []byte + out []byte + }{ + {"TrimFunc", TrimFunc, tc.trimOut}, + {"TrimLeftFunc", TrimLeftFunc, tc.leftOut}, + {"TrimRightFunc", TrimRightFunc, tc.rightOut}, + } + for _, trimmer := range trimmers { + actual := trimmer.trim([]byte(tc.in), tc.f.f) + if actual == nil && trimmer.out != nil { + t.Errorf("%s(%q, %q) = nil; want %q", trimmer.name, tc.in, tc.f.name, trimmer.out) + } + if actual != nil && trimmer.out == nil { + t.Errorf("%s(%q, %q) = %q; want nil", trimmer.name, tc.in, tc.f.name, actual) + } + if !Equal(actual, trimmer.out) { + t.Errorf("%s(%q, %q) = %q; want %q", trimmer.name, tc.in, tc.f.name, actual, trimmer.out) + } } } } @@ -1617,9 +1715,41 @@ func BenchmarkFieldsFunc(b *testing.B) { } func BenchmarkTrimSpace(b *testing.B) { - s := []byte(" Some text. \n") - for i := 0; i < b.N; i++ { - TrimSpace(s) + tests := []struct { + name string + input []byte + }{ + {"NoTrim", []byte("typical")}, + {"ASCII", []byte(" foo bar ")}, + {"SomeNonASCII", []byte(" \u2000\t\r\n x\t\t\r\r\ny\n \u3000 ")}, + {"JustNonASCII", []byte("\u2000\u2000\u2000☺☺☺☺\u3000\u3000\u3000")}, + } + for _, test := range tests { + b.Run(test.name, func(b *testing.B) { + for i := 0; i < b.N; i++ { + TrimSpace(test.input) + } + }) + } +} + +func BenchmarkToValidUTF8(b *testing.B) { + tests := []struct { + name string + input []byte + }{ + {"Valid", []byte("typical")}, + {"InvalidASCII", []byte("foo\xffbar")}, + {"InvalidNonASCII", []byte("日本語\xff日本語")}, + } + replacement := []byte("\uFFFD") + b.ResetTimer() + for _, test := range tests { + b.Run(test.name, func(b *testing.B) { + for i := 0; i < b.N; i++ { + ToValidUTF8(test.input, replacement) + } + }) } } @@ -1642,6 +1772,39 @@ func makeBenchInputHard() []byte { var benchInputHard = makeBenchInputHard() +func benchmarkIndexHard(b *testing.B, sep []byte) { + for i := 0; i < b.N; i++ { + Index(benchInputHard, sep) + } +} + +func benchmarkLastIndexHard(b *testing.B, sep []byte) { + for i := 0; i < b.N; i++ { + LastIndex(benchInputHard, sep) + } +} + +func benchmarkCountHard(b *testing.B, sep []byte) { + for i := 0; i < b.N; i++ { + Count(benchInputHard, sep) + } +} + +func BenchmarkIndexHard1(b *testing.B) { benchmarkIndexHard(b, []byte("<>")) } +func BenchmarkIndexHard2(b *testing.B) { benchmarkIndexHard(b, []byte("
    ")) } +func BenchmarkIndexHard3(b *testing.B) { benchmarkIndexHard(b, []byte("hello world")) } +func BenchmarkIndexHard4(b *testing.B) { + benchmarkIndexHard(b, []byte("
    helloworld
    ")) +} + +func BenchmarkLastIndexHard1(b *testing.B) { benchmarkLastIndexHard(b, []byte("<>")) } +func BenchmarkLastIndexHard2(b *testing.B) { benchmarkLastIndexHard(b, []byte("")) } +func BenchmarkLastIndexHard3(b *testing.B) { benchmarkLastIndexHard(b, []byte("hello world")) } + +func BenchmarkCountHard1(b *testing.B) { benchmarkCountHard(b, []byte("<>")) } +func BenchmarkCountHard2(b *testing.B) { benchmarkCountHard(b, []byte("")) } +func BenchmarkCountHard3(b *testing.B) { benchmarkCountHard(b, []byte("hello world")) } + func BenchmarkSplitEmptySeparator(b *testing.B) { for i := 0; i < b.N; i++ { Split(benchInputHard, nil) diff --git a/src/bytes/example_test.go b/src/bytes/example_test.go index 6d328378fa..5ba7077c1d 100644 --- a/src/bytes/example_test.go +++ b/src/bytes/example_test.go @@ -365,6 +365,16 @@ func ExampleToTitle() { // ХЛЕБ } +func ExampleToTitleSpecial() { + str := []byte("ahoj vývojári golang") + totitle := bytes.ToTitleSpecial(unicode.AzeriCase, str) + fmt.Println("Original : " + string(str)) + fmt.Println("ToTitle : " + string(totitle)) + // Output: + // Original : ahoj vývojári golang + // ToTitle : AHOJ VÃVOJÃRİ GOLANG +} + func ExampleTrim() { fmt.Printf("[%q]", bytes.Trim([]byte(" !!! Achtung! Achtung! !!! "), "! ")) // Output: ["Achtung! Achtung"] @@ -438,11 +448,31 @@ func ExampleToUpper() { // Output: GOPHER } +func ExampleToUpperSpecial() { + str := []byte("ahoj vývojári golang") + totitle := bytes.ToUpperSpecial(unicode.AzeriCase, str) + fmt.Println("Original : " + string(str)) + fmt.Println("ToUpper : " + string(totitle)) + // Output: + // Original : ahoj vývojári golang + // ToUpper : AHOJ VÃVOJÃRİ GOLANG +} + func ExampleToLower() { fmt.Printf("%s", bytes.ToLower([]byte("Gopher"))) // Output: gopher } +func ExampleToLowerSpecial() { + str := []byte("AHOJ VÃVOJÃRİ GOLANG") + totitle := bytes.ToLowerSpecial(unicode.AzeriCase, str) + fmt.Println("Original : " + string(str)) + fmt.Println("ToLower : " + string(totitle)) + // Output: + // Original : AHOJ VÃVOJÃRİ GOLANG + // ToLower : ahoj vývojári golang +} + func ExampleReader_Len() { fmt.Println(bytes.NewReader([]byte("Hi!")).Len()) fmt.Println(bytes.NewReader([]byte("ã“ã‚“ã«ã¡ã¯!")).Len()) diff --git a/src/bytes/export_test.go b/src/bytes/export_test.go index f61523e60b..b65428d9ce 100644 --- a/src/bytes/export_test.go +++ b/src/bytes/export_test.go @@ -6,4 +6,3 @@ package bytes // Export func for testing var IndexBytePortable = indexBytePortable -var EqualPortable = equalPortable diff --git a/src/cmd/README.vendor b/src/cmd/README.vendor new file mode 100644 index 0000000000..ac0df5e925 --- /dev/null +++ b/src/cmd/README.vendor @@ -0,0 +1,2 @@ +See src/README.vendor for information on loading vendored packages +and updating the vendor directory. diff --git a/src/cmd/api/goapi.go b/src/cmd/api/goapi.go index 02dfa7c841..c74ee9bfa2 100644 --- a/src/cmd/api/goapi.go +++ b/src/cmd/api/goapi.go @@ -8,6 +8,7 @@ package main import ( "bufio" "bytes" + "encoding/json" "flag" "fmt" "go/ast" @@ -76,6 +77,8 @@ var contexts = []*build.Context{ {GOOS: "netbsd", GOARCH: "amd64"}, {GOOS: "netbsd", GOARCH: "arm", CgoEnabled: true}, {GOOS: "netbsd", GOARCH: "arm"}, + {GOOS: "netbsd", GOARCH: "arm64", CgoEnabled: true}, + {GOOS: "netbsd", GOARCH: "arm64"}, {GOOS: "openbsd", GOARCH: "386", CgoEnabled: true}, {GOOS: "openbsd", GOARCH: "386"}, {GOOS: "openbsd", GOARCH: "amd64", CgoEnabled: true}, @@ -153,6 +156,7 @@ func main() { var featureCtx = make(map[string]map[string]bool) // feature -> context name -> true for _, context := range contexts { w := NewWalker(context, filepath.Join(build.Default.GOROOT, "src")) + w.loadImports(pkgNames, w.context) for _, name := range pkgNames { // Vendored packages do not contribute to our @@ -169,7 +173,13 @@ func main() { // w.Import(name) will return nil continue } - pkg, _ := w.Import(name) + pkg, err := w.Import(name) + if _, nogo := err.(*build.NoGoError); nogo { + continue + } + if err != nil { + log.Fatalf("Import(%q): %v", name, err) + } w.export(pkg) } } @@ -233,7 +243,7 @@ func (w *Walker) export(pkg *types.Package) { w.current = pkg scope := pkg.Scope() for _, name := range scope.Names() { - if ast.IsExported(name) { + if token.IsExported(name) { w.emitObj(scope.Lookup(name)) } } @@ -343,12 +353,14 @@ func fileFeatures(filename string) []string { var fset = token.NewFileSet() type Walker struct { - context *build.Context - root string - scope []string - current *types.Package - features map[string]bool // set - imported map[string]*types.Package // packages already imported + context *build.Context + root string + scope []string + current *types.Package + features map[string]bool // set + imported map[string]*types.Package // packages already imported + importMap map[string]map[string]string // importer dir -> import path -> canonical path + importDir map[string]string // canonical import path -> dir } func NewWalker(context *build.Context, root string) *Walker { @@ -428,11 +440,74 @@ func tagKey(dir string, context *build.Context, tags []string) string { return key } +func (w *Walker) loadImports(paths []string, context *build.Context) { + if context == nil { + context = &build.Default + } + + var ( + tags = context.BuildTags + cgoEnabled = "0" + ) + if context.CgoEnabled { + tags = append(tags[:len(tags):len(tags)], "cgo") + cgoEnabled = "1" + } + + // TODO(golang.org/issue/29666): Request only the fields that we need. + cmd := exec.Command(goCmd(), "list", "-e", "-deps", "-json") + if len(tags) > 0 { + cmd.Args = append(cmd.Args, "-tags", strings.Join(tags, " ")) + } + cmd.Args = append(cmd.Args, paths...) + + cmd.Env = append(os.Environ(), + "GOOS="+context.GOOS, + "GOARCH="+context.GOARCH, + "CGO_ENABLED="+cgoEnabled, + ) + + stdout := new(bytes.Buffer) + cmd.Stdout = stdout + cmd.Stderr = new(strings.Builder) + err := cmd.Run() + if err != nil { + log.Fatalf("%s failed: %v\n%s", strings.Join(cmd.Args, " "), err, cmd.Stderr) + } + + w.importDir = make(map[string]string) + w.importMap = make(map[string]map[string]string) + dec := json.NewDecoder(stdout) + for { + var pkg struct { + ImportPath, Dir string + ImportMap map[string]string + } + if err := dec.Decode(&pkg); err == io.EOF { + break + } else if err != nil { + log.Fatalf("%s: invalid output: %v", strings.Join(cmd.Args, " "), err) + } + + w.importDir[pkg.ImportPath] = pkg.Dir + w.importMap[pkg.Dir] = pkg.ImportMap + } +} + // Importing is a sentinel taking the place in Walker.imported // for a package that is in the process of being imported. var importing types.Package func (w *Walker) Import(name string) (*types.Package, error) { + return w.ImportFrom(name, "", 0) +} + +func (w *Walker) ImportFrom(fromPath, fromDir string, mode types.ImportMode) (*types.Package, error) { + name := fromPath + if canonical, ok := w.importMap[fromDir][fromPath]; ok { + name = canonical + } + pkg := w.imported[name] if pkg != nil { if pkg == &importing { @@ -443,7 +518,10 @@ func (w *Walker) Import(name string) (*types.Package, error) { w.imported[name] = &importing // Determine package files. - dir := filepath.Join(w.root, filepath.FromSlash(name)) + dir := w.importDir[name] + if dir == "" { + dir = filepath.Join(w.root, filepath.FromSlash(name)) + } if fi, err := os.Stat(dir); err != nil || !fi.IsDir() { log.Fatalf("no source in tree for import %q: %v", name, err) } @@ -470,7 +548,7 @@ func (w *Walker) Import(name string) (*types.Package, error) { info, err := context.ImportDir(dir, 0) if err != nil { if _, nogo := err.(*build.NoGoError); nogo { - return nil, nil + return nil, err } log.Fatalf("pkg %q, dir %q: ScanDir: %v", name, dir, err) } diff --git a/src/cmd/api/goapi_test.go b/src/cmd/api/goapi_test.go index 1c8e2a345b..fc1bcc908a 100644 --- a/src/cmd/api/goapi_test.go +++ b/src/cmd/api/goapi_test.go @@ -203,3 +203,16 @@ func TestIssue21181(t *testing.T) { w.export(pkg) } } + +func TestIssue29837(t *testing.T) { + for _, c := range contexts { + c.Compiler = build.Default.Compiler + } + for _, context := range contexts { + w := NewWalker(context, "testdata/src/issue29837") + _, err := w.Import("p") + if _, nogo := err.(*build.NoGoError); !nogo { + t.Errorf("expected *build.NoGoError, got %T", err) + } + } +} diff --git a/src/cmd/api/testdata/src/issue29837/p/README b/src/cmd/api/testdata/src/issue29837/p/README new file mode 100644 index 0000000000..770bc0f1b2 --- /dev/null +++ b/src/cmd/api/testdata/src/issue29837/p/README @@ -0,0 +1 @@ +Empty directory for test, see https://golang.org/issues/29837. \ No newline at end of file diff --git a/src/cmd/asm/internal/arch/arm64.go b/src/cmd/asm/internal/arch/arm64.go index 98858bd181..3817fcd5c2 100644 --- a/src/cmd/asm/internal/arch/arm64.go +++ b/src/cmd/asm/internal/arch/arm64.go @@ -72,14 +72,11 @@ func IsARM64STLXR(op obj.As) bool { switch op { case arm64.ASTLXRB, arm64.ASTLXRH, arm64.ASTLXRW, arm64.ASTLXR, arm64.ASTXRB, arm64.ASTXRH, arm64.ASTXRW, arm64.ASTXR, - arm64.ASTXP, arm64.ASTXPW, arm64.ASTLXP, arm64.ASTLXPW, - arm64.ASWPB, arm64.ASWPH, arm64.ASWPW, arm64.ASWPD, - arm64.ASWPALB, arm64.ASWPALH, arm64.ASWPALW, arm64.ASWPALD, - arm64.ALDADDB, arm64.ALDADDH, arm64.ALDADDW, arm64.ALDADDD, - arm64.ALDANDB, arm64.ALDANDH, arm64.ALDANDW, arm64.ALDANDD, - arm64.ALDEORB, arm64.ALDEORH, arm64.ALDEORW, arm64.ALDEORD, - arm64.ALDORB, arm64.ALDORH, arm64.ALDORW, arm64.ALDORD, - arm64.ALDADDALD, arm64.ALDADDALW, arm64.ALDADDALH, arm64.ALDADDALB: + arm64.ASTXP, arm64.ASTXPW, arm64.ASTLXP, arm64.ASTLXPW: + return true + } + // atomic instructions + if arm64.IsAtomicInstruction(op) { return true } return false diff --git a/src/cmd/asm/internal/arch/mips.go b/src/cmd/asm/internal/arch/mips.go index 14b29331e5..79fb7cf02e 100644 --- a/src/cmd/asm/internal/arch/mips.go +++ b/src/cmd/asm/internal/arch/mips.go @@ -33,12 +33,13 @@ func IsMIPSCMP(op obj.As) bool { } // IsMIPSMUL reports whether the op (as defined by an mips.A* constant) is -// one of the MUL/DIV/REM instructions that require special handling. +// one of the MUL/DIV/REM/MADD/MSUB instructions that require special handling. func IsMIPSMUL(op obj.As) bool { switch op { case mips.AMUL, mips.AMULU, mips.AMULV, mips.AMULVU, mips.ADIV, mips.ADIVU, mips.ADIVV, mips.ADIVVU, - mips.AREM, mips.AREMU, mips.AREMV, mips.AREMVU: + mips.AREM, mips.AREMU, mips.AREMV, mips.AREMVU, + mips.AMADD, mips.AMSUB: return true } return false diff --git a/src/cmd/asm/internal/asm/asm.go b/src/cmd/asm/internal/asm/asm.go index 3d99af6889..d83cfb2284 100644 --- a/src/cmd/asm/internal/asm/asm.go +++ b/src/cmd/asm/internal/asm/asm.go @@ -789,6 +789,12 @@ func (p *Parser) asmInstruction(op obj.As, cond string, a []obj.Addr) { prog.To = a[4] break } + if p.arch.Family == sys.S390X { + prog.From = a[0] + prog.RestArgs = []obj.Addr{a[1], a[2], a[3]} + prog.To = a[4] + break + } p.errorf("can't handle %s instruction with 5 operands", op) return case 6: diff --git a/src/cmd/asm/internal/asm/line_test.go b/src/cmd/asm/internal/asm/line_test.go index 7462f24a1c..01b058bd95 100644 --- a/src/cmd/asm/internal/asm/line_test.go +++ b/src/cmd/asm/internal/asm/line_test.go @@ -28,6 +28,10 @@ func TestAMD64BadInstParser(t *testing.T) { {"VADDPD.BCST.Z.SAE X0, X1, X2", `Z suffix should be the last; can't combine rounding/SAE and broadcast`}, {"VADDPD.SAE.SAE X0, X1, X2", `duplicate suffix "SAE"`}, {"VADDPD.RZ_SAE.SAE X0, X1, X2", `bad suffix combination`}, + + // BSWAP on 16-bit registers is undefined. See #29167, + {"BSWAPW DX", `unrecognized instruction`}, + {"BSWAPW R11", `unrecognized instruction`}, }) } diff --git a/src/cmd/asm/internal/asm/operand_test.go b/src/cmd/asm/internal/asm/operand_test.go index 2ba3fd73df..f187d0b166 100644 --- a/src/cmd/asm/internal/asm/operand_test.go +++ b/src/cmd/asm/internal/asm/operand_test.go @@ -145,17 +145,18 @@ func TestFuncAddress(t *testing.T) { isFuncSym := strings.HasSuffix(test.input, "(SB)") && // Ignore static symbols. - !strings.Contains(test.input, "<>") && - // Ignore symbols with offsets. - !strings.Contains(test.input, "+") + !strings.Contains(test.input, "<>") wantName := "" if isFuncSym { - // Strip $|* and (SB). + // Strip $|* and (SB) and +Int. wantName = test.output[:len(test.output)-4] if strings.HasPrefix(wantName, "$") || strings.HasPrefix(wantName, "*") { wantName = wantName[1:] } + if i := strings.Index(wantName, "+"); i >= 0 { + wantName = wantName[:i] + } } if ok != isFuncSym || name != wantName { t.Errorf("fail at %s as function address: got %s, %v; expected %s, %v", test.input, name, ok, wantName, isFuncSym) diff --git a/src/cmd/asm/internal/asm/parse.go b/src/cmd/asm/internal/asm/parse.go index 346976ef48..17d40ee415 100644 --- a/src/cmd/asm/internal/asm/parse.go +++ b/src/cmd/asm/internal/asm/parse.go @@ -800,9 +800,9 @@ func (p *Parser) setPseudoRegister(addr *obj.Addr, reg string, isStatic bool, pr // funcAddress parses an external function address. This is a // constrained form of the operand syntax that's always SB-based, -// non-static, and has no additional offsets: +// non-static, and has at most a simple integer offset: // -// [$|*]sym(SB) +// [$|*]sym[+Int](SB) func (p *Parser) funcAddress() (string, bool) { switch p.peek() { case '$', '*': @@ -815,7 +815,14 @@ func (p *Parser) funcAddress() (string, bool) { if tok.ScanToken != scanner.Ident || p.atStartOfRegister(name) { return "", false } - if p.next().ScanToken != '(' { + tok = p.next() + if tok.ScanToken == '+' { + if p.next().ScanToken != scanner.Int { + return "", false + } + tok = p.next() + } + if tok.ScanToken != '(' { return "", false } if reg := p.next(); reg.ScanToken != scanner.Ident || reg.String() != "SB" { diff --git a/src/cmd/asm/internal/asm/testdata/386.s b/src/cmd/asm/internal/asm/testdata/386.s index d524a4c8c1..e0855f5e4b 100644 --- a/src/cmd/asm/internal/asm/testdata/386.s +++ b/src/cmd/asm/internal/asm/testdata/386.s @@ -89,6 +89,10 @@ label: loop: LOOP loop // LOOP +// Tests for TLS reference. + MOVL (TLS), AX + MOVL 8(TLS), DX + // LTYPE0 nonnon { outcode(int($1), &$2); } RET RET foo(SB) diff --git a/src/cmd/asm/internal/asm/testdata/amd64.s b/src/cmd/asm/internal/asm/testdata/amd64.s index 680d8eff38..1dec7f4135 100644 --- a/src/cmd/asm/internal/asm/testdata/amd64.s +++ b/src/cmd/asm/internal/asm/testdata/amd64.s @@ -143,6 +143,10 @@ loop: MOVB foo+32(SP)(CX*4), AH // 8a648c20 MOVB foo+32323(SP)(CX*8), R9 // 448a8ccc437e0000 +// Tests for TLS reference. + MOVQ (TLS), AX + MOVQ 8(TLS), DX + // LTYPE0 nonnon { outcode($1, &$2); } RET // c3 RET foo(SB) diff --git a/src/cmd/asm/internal/asm/testdata/amd64enc.s b/src/cmd/asm/internal/asm/testdata/amd64enc.s index 65aecf8faf..c02f51d125 100644 --- a/src/cmd/asm/internal/asm/testdata/amd64enc.s +++ b/src/cmd/asm/internal/asm/testdata/amd64enc.s @@ -588,8 +588,6 @@ TEXT asmtest(SB),DUPOK|NOSPLIT,$0 BSRQ (R11), R11 // 4d0fbd1b BSRQ DX, R11 // 4c0fbdda BSRQ R11, R11 // 4d0fbddb - BSWAPW DX // 660fca - BSWAPW R11 // 66410fcb BSWAPL DX // 0fca BSWAPL R11 // 410fcb BSWAPQ DX // 480fca diff --git a/src/cmd/asm/internal/asm/testdata/arm64.s b/src/cmd/asm/internal/asm/testdata/arm64.s index b54fd86045..77671223c9 100644 --- a/src/cmd/asm/internal/asm/testdata/arm64.s +++ b/src/cmd/asm/internal/asm/testdata/arm64.s @@ -659,14 +659,14 @@ again: STXP (R1, R2), (RSP), R10 // e10b2ac8 STXPW (R1, R2), (R3), R10 // 61082a88 STXPW (R1, R2), (RSP), R10 // e10b2a88 - SWPD R5, (R6), R7 // c78025f8 - SWPD R5, (RSP), R7 // e78325f8 - SWPW R5, (R6), R7 // c78025b8 - SWPW R5, (RSP), R7 // e78325b8 - SWPH R5, (R6), R7 // c7802578 - SWPH R5, (RSP), R7 // e7832578 - SWPB R5, (R6), R7 // c7802538 - SWPB R5, (RSP), R7 // e7832538 + SWPAD R5, (R6), R7 // c780a5f8 + SWPAD R5, (RSP), R7 // e783a5f8 + SWPAW R5, (R6), R7 // c780a5b8 + SWPAW R5, (RSP), R7 // e783a5b8 + SWPAH R5, (R6), R7 // c780a578 + SWPAH R5, (RSP), R7 // e783a578 + SWPAB R5, (R6), R7 // c780a538 + SWPAB R5, (RSP), R7 // e783a538 SWPALD R5, (R6), R7 // c780e5f8 SWPALD R5, (RSP), R7 // e783e5f8 SWPALW R5, (R6), R7 // c780e5b8 @@ -675,6 +675,38 @@ again: SWPALH R5, (RSP), R7 // e783e578 SWPALB R5, (R6), R7 // c780e538 SWPALB R5, (RSP), R7 // e783e538 + SWPD R5, (R6), R7 // c78025f8 + SWPD R5, (RSP), R7 // e78325f8 + SWPW R5, (R6), R7 // c78025b8 + SWPW R5, (RSP), R7 // e78325b8 + SWPH R5, (R6), R7 // c7802578 + SWPH R5, (RSP), R7 // e7832578 + SWPB R5, (R6), R7 // c7802538 + SWPB R5, (RSP), R7 // e7832538 + SWPLD R5, (R6), R7 // c78065f8 + SWPLD R5, (RSP), R7 // e78365f8 + SWPLW R5, (R6), R7 // c78065b8 + SWPLW R5, (RSP), R7 // e78365b8 + SWPLH R5, (R6), R7 // c7806578 + SWPLH R5, (RSP), R7 // e7836578 + SWPLB R5, (R6), R7 // c7806538 + SWPLB R5, (RSP), R7 // e7836538 + LDADDAD R5, (R6), R7 // c700a5f8 + LDADDAD R5, (RSP), R7 // e703a5f8 + LDADDAW R5, (R6), R7 // c700a5b8 + LDADDAW R5, (RSP), R7 // e703a5b8 + LDADDAH R5, (R6), R7 // c700a578 + LDADDAH R5, (RSP), R7 // e703a578 + LDADDAB R5, (R6), R7 // c700a538 + LDADDAB R5, (RSP), R7 // e703a538 + LDADDALD R5, (R6), R7 // c700e5f8 + LDADDALD R5, (RSP), R7 // e703e5f8 + LDADDALW R5, (R6), R7 // c700e5b8 + LDADDALW R5, (RSP), R7 // e703e5b8 + LDADDALH R5, (R6), R7 // c700e578 + LDADDALH R5, (RSP), R7 // e703e578 + LDADDALB R5, (R6), R7 // c700e538 + LDADDALB R5, (RSP), R7 // e703e538 LDADDD R5, (R6), R7 // c70025f8 LDADDD R5, (RSP), R7 // e70325f8 LDADDW R5, (R6), R7 // c70025b8 @@ -683,6 +715,30 @@ again: LDADDH R5, (RSP), R7 // e7032578 LDADDB R5, (R6), R7 // c7002538 LDADDB R5, (RSP), R7 // e7032538 + LDADDLD R5, (R6), R7 // c70065f8 + LDADDLD R5, (RSP), R7 // e70365f8 + LDADDLW R5, (R6), R7 // c70065b8 + LDADDLW R5, (RSP), R7 // e70365b8 + LDADDLH R5, (R6), R7 // c7006578 + LDADDLH R5, (RSP), R7 // e7036578 + LDADDLB R5, (R6), R7 // c7006538 + LDADDLB R5, (RSP), R7 // e7036538 + LDANDAD R5, (R6), R7 // c710a5f8 + LDANDAD R5, (RSP), R7 // e713a5f8 + LDANDAW R5, (R6), R7 // c710a5b8 + LDANDAW R5, (RSP), R7 // e713a5b8 + LDANDAH R5, (R6), R7 // c710a578 + LDANDAH R5, (RSP), R7 // e713a578 + LDANDAB R5, (R6), R7 // c710a538 + LDANDAB R5, (RSP), R7 // e713a538 + LDANDALD R5, (R6), R7 // c710e5f8 + LDANDALD R5, (RSP), R7 // e713e5f8 + LDANDALW R5, (R6), R7 // c710e5b8 + LDANDALW R5, (RSP), R7 // e713e5b8 + LDANDALH R5, (R6), R7 // c710e578 + LDANDALH R5, (RSP), R7 // e713e578 + LDANDALB R5, (R6), R7 // c710e538 + LDANDALB R5, (RSP), R7 // e713e538 LDANDD R5, (R6), R7 // c71025f8 LDANDD R5, (RSP), R7 // e71325f8 LDANDW R5, (R6), R7 // c71025b8 @@ -691,6 +747,30 @@ again: LDANDH R5, (RSP), R7 // e7132578 LDANDB R5, (R6), R7 // c7102538 LDANDB R5, (RSP), R7 // e7132538 + LDANDLD R5, (R6), R7 // c71065f8 + LDANDLD R5, (RSP), R7 // e71365f8 + LDANDLW R5, (R6), R7 // c71065b8 + LDANDLW R5, (RSP), R7 // e71365b8 + LDANDLH R5, (R6), R7 // c7106578 + LDANDLH R5, (RSP), R7 // e7136578 + LDANDLB R5, (R6), R7 // c7106538 + LDANDLB R5, (RSP), R7 // e7136538 + LDEORAD R5, (R6), R7 // c720a5f8 + LDEORAD R5, (RSP), R7 // e723a5f8 + LDEORAW R5, (R6), R7 // c720a5b8 + LDEORAW R5, (RSP), R7 // e723a5b8 + LDEORAH R5, (R6), R7 // c720a578 + LDEORAH R5, (RSP), R7 // e723a578 + LDEORAB R5, (R6), R7 // c720a538 + LDEORAB R5, (RSP), R7 // e723a538 + LDEORALD R5, (R6), R7 // c720e5f8 + LDEORALD R5, (RSP), R7 // e723e5f8 + LDEORALW R5, (R6), R7 // c720e5b8 + LDEORALW R5, (RSP), R7 // e723e5b8 + LDEORALH R5, (R6), R7 // c720e578 + LDEORALH R5, (RSP), R7 // e723e578 + LDEORALB R5, (R6), R7 // c720e538 + LDEORALB R5, (RSP), R7 // e723e538 LDEORD R5, (R6), R7 // c72025f8 LDEORD R5, (RSP), R7 // e72325f8 LDEORW R5, (R6), R7 // c72025b8 @@ -699,6 +779,30 @@ again: LDEORH R5, (RSP), R7 // e7232578 LDEORB R5, (R6), R7 // c7202538 LDEORB R5, (RSP), R7 // e7232538 + LDEORLD R5, (R6), R7 // c72065f8 + LDEORLD R5, (RSP), R7 // e72365f8 + LDEORLW R5, (R6), R7 // c72065b8 + LDEORLW R5, (RSP), R7 // e72365b8 + LDEORLH R5, (R6), R7 // c7206578 + LDEORLH R5, (RSP), R7 // e7236578 + LDEORLB R5, (R6), R7 // c7206538 + LDEORLB R5, (RSP), R7 // e7236538 + LDORAD R5, (R6), R7 // c730a5f8 + LDORAD R5, (RSP), R7 // e733a5f8 + LDORAW R5, (R6), R7 // c730a5b8 + LDORAW R5, (RSP), R7 // e733a5b8 + LDORAH R5, (R6), R7 // c730a578 + LDORAH R5, (RSP), R7 // e733a578 + LDORAB R5, (R6), R7 // c730a538 + LDORAB R5, (RSP), R7 // e733a538 + LDORALD R5, (R6), R7 // c730e5f8 + LDORALD R5, (RSP), R7 // e733e5f8 + LDORALW R5, (R6), R7 // c730e5b8 + LDORALW R5, (RSP), R7 // e733e5b8 + LDORALH R5, (R6), R7 // c730e578 + LDORALH R5, (RSP), R7 // e733e578 + LDORALB R5, (R6), R7 // c730e538 + LDORALB R5, (RSP), R7 // e733e538 LDORD R5, (R6), R7 // c73025f8 LDORD R5, (RSP), R7 // e73325f8 LDORW R5, (R6), R7 // c73025b8 @@ -707,11 +811,14 @@ again: LDORH R5, (RSP), R7 // e7332578 LDORB R5, (R6), R7 // c7302538 LDORB R5, (RSP), R7 // e7332538 - LDADDALD R2, (R1), R3 // 2300e2f8 - LDADDALW R2, (R1), R3 // 2300e2b8 - LDADDALH R2, (R1), R3 // 2300e278 - LDADDALB R2, (R1), R3 // 2300e238 - + LDORLD R5, (R6), R7 // c73065f8 + LDORLD R5, (RSP), R7 // e73365f8 + LDORLW R5, (R6), R7 // c73065b8 + LDORLW R5, (RSP), R7 // e73365b8 + LDORLH R5, (R6), R7 // c7306578 + LDORLH R5, (RSP), R7 // e7336578 + LDORLB R5, (R6), R7 // c7306538 + LDORLB R5, (RSP), R7 // e7336538 // RET // // LTYPEA comma diff --git a/src/cmd/asm/internal/asm/testdata/arm64error.s b/src/cmd/asm/internal/asm/testdata/arm64error.s index 357db80222..387836dcbe 100644 --- a/src/cmd/asm/internal/asm/testdata/arm64error.s +++ b/src/cmd/asm/internal/asm/testdata/arm64error.s @@ -112,4 +112,124 @@ TEXT errors(SB),$0 FSTPD (R1, R2), (R0) // ERROR "invalid register pair" FMOVS (F2), F0 // ERROR "illegal combination" FMOVD F0, (F1) // ERROR "illegal combination" + LDADDD R5, (R6), ZR // ERROR "illegal destination register" + LDADDW R5, (R6), ZR // ERROR "illegal destination register" + LDADDH R5, (R6), ZR // ERROR "illegal destination register" + LDADDB R5, (R6), ZR // ERROR "illegal destination register" + LDADDLD R5, (R6), ZR // ERROR "illegal destination register" + LDADDLW R5, (R6), ZR // ERROR "illegal destination register" + LDADDLH R5, (R6), ZR // ERROR "illegal destination register" + LDADDLB R5, (R6), ZR // ERROR "illegal destination register" + LDANDD R5, (R6), ZR // ERROR "illegal destination register" + LDANDW R5, (R6), ZR // ERROR "illegal destination register" + LDANDH R5, (R6), ZR // ERROR "illegal destination register" + LDANDB R5, (R6), ZR // ERROR "illegal destination register" + LDANDLD R5, (R6), ZR // ERROR "illegal destination register" + LDANDLW R5, (R6), ZR // ERROR "illegal destination register" + LDANDLH R5, (R6), ZR // ERROR "illegal destination register" + LDANDLB R5, (R6), ZR // ERROR "illegal destination register" + LDEORD R5, (R6), ZR // ERROR "illegal destination register" + LDEORW R5, (R6), ZR // ERROR "illegal destination register" + LDEORH R5, (R6), ZR // ERROR "illegal destination register" + LDEORB R5, (R6), ZR // ERROR "illegal destination register" + LDEORLD R5, (R6), ZR // ERROR "illegal destination register" + LDEORLW R5, (R6), ZR // ERROR "illegal destination register" + LDEORLH R5, (R6), ZR // ERROR "illegal destination register" + LDEORLB R5, (R6), ZR // ERROR "illegal destination register" + LDORD R5, (R6), ZR // ERROR "illegal destination register" + LDORW R5, (R6), ZR // ERROR "illegal destination register" + LDORH R5, (R6), ZR // ERROR "illegal destination register" + LDORB R5, (R6), ZR // ERROR "illegal destination register" + LDORLD R5, (R6), ZR // ERROR "illegal destination register" + LDORLW R5, (R6), ZR // ERROR "illegal destination register" + LDORLH R5, (R6), ZR // ERROR "illegal destination register" + LDORLB R5, (R6), ZR // ERROR "illegal destination register" + LDADDAD R5, (R6), RSP // ERROR "illegal destination register" + LDADDAW R5, (R6), RSP // ERROR "illegal destination register" + LDADDAH R5, (R6), RSP // ERROR "illegal destination register" + LDADDAB R5, (R6), RSP // ERROR "illegal destination register" + LDADDALD R5, (R6), RSP // ERROR "illegal destination register" + LDADDALW R5, (R6), RSP // ERROR "illegal destination register" + LDADDALH R5, (R6), RSP // ERROR "illegal destination register" + LDADDALB R5, (R6), RSP // ERROR "illegal destination register" + LDADDD R5, (R6), RSP // ERROR "illegal destination register" + LDADDW R5, (R6), RSP // ERROR "illegal destination register" + LDADDH R5, (R6), RSP // ERROR "illegal destination register" + LDADDB R5, (R6), RSP // ERROR "illegal destination register" + LDADDLD R5, (R6), RSP // ERROR "illegal destination register" + LDADDLW R5, (R6), RSP // ERROR "illegal destination register" + LDADDLH R5, (R6), RSP // ERROR "illegal destination register" + LDADDLB R5, (R6), RSP // ERROR "illegal destination register" + LDANDAD R5, (R6), RSP // ERROR "illegal destination register" + LDANDAW R5, (R6), RSP // ERROR "illegal destination register" + LDANDAH R5, (R6), RSP // ERROR "illegal destination register" + LDANDAB R5, (R6), RSP // ERROR "illegal destination register" + LDANDALD R5, (R6), RSP // ERROR "illegal destination register" + LDANDALW R5, (R6), RSP // ERROR "illegal destination register" + LDANDALH R5, (R6), RSP // ERROR "illegal destination register" + LDANDALB R5, (R6), RSP // ERROR "illegal destination register" + LDANDD R5, (R6), RSP // ERROR "illegal destination register" + LDANDW R5, (R6), RSP // ERROR "illegal destination register" + LDANDH R5, (R6), RSP // ERROR "illegal destination register" + LDANDB R5, (R6), RSP // ERROR "illegal destination register" + LDANDLD R5, (R6), RSP // ERROR "illegal destination register" + LDANDLW R5, (R6), RSP // ERROR "illegal destination register" + LDANDLH R5, (R6), RSP // ERROR "illegal destination register" + LDANDLB R5, (R6), RSP // ERROR "illegal destination register" + LDEORAD R5, (R6), RSP // ERROR "illegal destination register" + LDEORAW R5, (R6), RSP // ERROR "illegal destination register" + LDEORAH R5, (R6), RSP // ERROR "illegal destination register" + LDEORAB R5, (R6), RSP // ERROR "illegal destination register" + LDEORALD R5, (R6), RSP // ERROR "illegal destination register" + LDEORALW R5, (R6), RSP // ERROR "illegal destination register" + LDEORALH R5, (R6), RSP // ERROR "illegal destination register" + LDEORALB R5, (R6), RSP // ERROR "illegal destination register" + LDEORD R5, (R6), RSP // ERROR "illegal destination register" + LDEORW R5, (R6), RSP // ERROR "illegal destination register" + LDEORH R5, (R6), RSP // ERROR "illegal destination register" + LDEORB R5, (R6), RSP // ERROR "illegal destination register" + LDEORLD R5, (R6), RSP // ERROR "illegal destination register" + LDEORLW R5, (R6), RSP // ERROR "illegal destination register" + LDEORLH R5, (R6), RSP // ERROR "illegal destination register" + LDEORLB R5, (R6), RSP // ERROR "illegal destination register" + LDORAD R5, (R6), RSP // ERROR "illegal destination register" + LDORAW R5, (R6), RSP // ERROR "illegal destination register" + LDORAH R5, (R6), RSP // ERROR "illegal destination register" + LDORAB R5, (R6), RSP // ERROR "illegal destination register" + LDORALD R5, (R6), RSP // ERROR "illegal destination register" + LDORALW R5, (R6), RSP // ERROR "illegal destination register" + LDORALH R5, (R6), RSP // ERROR "illegal destination register" + LDORALB R5, (R6), RSP // ERROR "illegal destination register" + LDORD R5, (R6), RSP // ERROR "illegal destination register" + LDORW R5, (R6), RSP // ERROR "illegal destination register" + LDORH R5, (R6), RSP // ERROR "illegal destination register" + LDORB R5, (R6), RSP // ERROR "illegal destination register" + LDORLD R5, (R6), RSP // ERROR "illegal destination register" + LDORLW R5, (R6), RSP // ERROR "illegal destination register" + LDORLH R5, (R6), RSP // ERROR "illegal destination register" + LDORLB R5, (R6), RSP // ERROR "illegal destination register" + SWPAD R5, (R6), RSP // ERROR "illegal destination register" + SWPAW R5, (R6), RSP // ERROR "illegal destination register" + SWPAH R5, (R6), RSP // ERROR "illegal destination register" + SWPAB R5, (R6), RSP // ERROR "illegal destination register" + SWPALD R5, (R6), RSP // ERROR "illegal destination register" + SWPALW R5, (R6), RSP // ERROR "illegal destination register" + SWPALH R5, (R6), RSP // ERROR "illegal destination register" + SWPALB R5, (R6), RSP // ERROR "illegal destination register" + SWPD R5, (R6), RSP // ERROR "illegal destination register" + SWPW R5, (R6), RSP // ERROR "illegal destination register" + SWPH R5, (R6), RSP // ERROR "illegal destination register" + SWPB R5, (R6), RSP // ERROR "illegal destination register" + SWPLD R5, (R6), RSP // ERROR "illegal destination register" + SWPLW R5, (R6), RSP // ERROR "illegal destination register" + SWPLH R5, (R6), RSP // ERROR "illegal destination register" + SWPLB R5, (R6), RSP // ERROR "illegal destination register" + STXR R5, (R6), RSP // ERROR "illegal destination register" + STXRW R5, (R6), RSP // ERROR "illegal destination register" + STLXR R5, (R6), RSP // ERROR "illegal destination register" + STLXRW R5, (R6), RSP // ERROR "illegal destination register" + STXP (R5, R7), (R6), RSP // ERROR "illegal destination register" + STXPW (R5, R7), (R6), RSP // ERROR "illegal destination register" + STLXP (R5, R7), (R6), RSP // ERROR "illegal destination register" + STLXP (R5, R7), (R6), RSP // ERROR "illegal destination register" RET diff --git a/src/cmd/asm/internal/asm/testdata/mips.s b/src/cmd/asm/internal/asm/testdata/mips.s index 0c6f7fd552..7136d686d7 100644 --- a/src/cmd/asm/internal/asm/testdata/mips.s +++ b/src/cmd/asm/internal/asm/testdata/mips.s @@ -424,7 +424,15 @@ label4: CALL foo(SB) RET foo(SB) + // unary operation NEGW R1, R2 // 00011023 + CLZ R1, R2 // 70221020 + CLO R1, R2 // 70221021 + + // to (Hi, Lo) + MADD R2, R1 // 70220000 + MSUB R2, R1 // 70220004 + MUL R2, R1 // 00220018 // END // diff --git a/src/cmd/asm/internal/asm/testdata/ppc64.s b/src/cmd/asm/internal/asm/testdata/ppc64.s index 366c80c090..8440375de6 100644 --- a/src/cmd/asm/internal/asm/testdata/ppc64.s +++ b/src/cmd/asm/internal/asm/testdata/ppc64.s @@ -1021,18 +1021,24 @@ label1: // VSX move from VSR, XX1-form // XS,RA produces // RA,XS +// Extended mnemonics accept VMX and FP registers as sources MFVSRD VS0, R1 MFVSRWZ VS33, R1 MFVSRLD VS63, R1 + MFVRD V0, R1 + MFFPRD F0, R1 // VSX move to VSR, XX1-form // RA,XT produces // XT,RA +// Extended mnemonics accept VMX and FP registers as targets MTVSRD R1, VS0 MTVSRWA R1, VS31 MTVSRWZ R1, VS63 MTVSRDD R1, R2, VS0 MTVSRWS R1, VS32 + MTVRD R1, V13 + MTFPRD R1, F24 // VSX AND, XX3-form // XA,XB,XT produces diff --git a/src/cmd/asm/internal/asm/testdata/s390x.s b/src/cmd/asm/internal/asm/testdata/s390x.s index 0e50303d70..c9f4d69736 100644 --- a/src/cmd/asm/internal/asm/testdata/s390x.s +++ b/src/cmd/asm/internal/asm/testdata/s390x.s @@ -66,6 +66,7 @@ TEXT main·foo(SB),DUPOK|NOSPLIT,$16-0 // TEXT main.foo(SB), DUPOK|NOSPLIT, $16- ADD $32768, R1, R2 // b9040021c22800008000 ADDC R1, R2 // b9ea1022 ADDC $1, R1, R2 // ec21000100db + ADDC $-1, R1, R2 // ec21ffff00db ADDC R1, R2, R3 // b9ea1032 ADDW R1, R2 // 1a21 ADDW R1, R2, R3 // b9f81032 @@ -182,6 +183,21 @@ TEXT main·foo(SB),DUPOK|NOSPLIT,$16-0 // TEXT main.foo(SB), DUPOK|NOSPLIT, $16- XORW (R1), R2 // 57201000 XORW -1(R1), R2 // e3201fffff57 + RNSBG $0, $31, $32, R1, R2 // ec21001f2054 + RXSBG $17, $8, $16, R3, R4 // ec4311081057 + ROSBG $9, $24, $11, R5, R6 // ec6509180b56 + RNSBGT $0, $31, $32, R7, R8 // ec87801f2054 + RXSBGT $17, $8, $16, R9, R10 // eca991081057 + ROSBGT $9, $24, $11, R11, R0 // ec0b89180b56 + RISBG $0, $31, $32, R1, R2 // ec21001f2055 + RISBGN $17, $8, $16, R3, R4 // ec4311081059 + RISBGZ $9, $24, $11, R5, R6 // ec6509980b55 + RISBGNZ $0, $31, $32, R7, R8 // ec87009f2059 + RISBHG $17, $8, $16, R9, R10 // eca91108105d + RISBLG $9, $24, $11, R11, R0 // ec0b09180b51 + RISBHGZ $17, $8, $16, R9, R10 // eca91188105d + RISBLGZ $9, $24, $11, R11, R0 // ec0b09980b51 + LAA R1, R2, 524287(R3) // eb213fff7ff8 LAAG R4, R5, -524288(R6) // eb54600080e8 LAAL R7, R8, 8192(R9) // eb87900002fa @@ -219,6 +235,9 @@ TEXT main·foo(SB),DUPOK|NOSPLIT,$16-0 // TEXT main.foo(SB), DUPOK|NOSPLIT, $16- TMLH R3, $0 // a7300000 TMLL R4, $32768 // a7418000 + IPM R3 // b2220030 + IPM R12 // b22200c0 + BNE 0(PC) // a7740000 BEQ 0(PC) // a7840000 BLT 0(PC) // a7440000 diff --git a/src/cmd/asm/main.go b/src/cmd/asm/main.go index 447d1afde3..fc6acc74c0 100644 --- a/src/cmd/asm/main.go +++ b/src/cmd/asm/main.go @@ -83,7 +83,7 @@ func main() { } } if ok && !*flags.SymABIs { - obj.WriteObjFile(ctxt, buf) + obj.WriteObjFile(ctxt, buf, "") } if !ok || diag { if failedFile != "" { diff --git a/src/cmd/cgo/ast.go b/src/cmd/cgo/ast.go index 83d727a8a5..54d6bc2559 100644 --- a/src/cmd/cgo/ast.go +++ b/src/cmd/cgo/ast.go @@ -200,18 +200,6 @@ func (f *File) saveExprs(x interface{}, context astContext) { } case *ast.CallExpr: f.saveCall(x, context) - case *ast.GenDecl: - if x.Tok == token.CONST { - for _, spec := range x.Specs { - vs := spec.(*ast.ValueSpec) - if vs.Type == nil { - for _, name := range spec.(*ast.ValueSpec).Names { - consts[name.Name] = true - } - } - } - } - } } diff --git a/src/cmd/cgo/doc.go b/src/cmd/cgo/doc.go index cceb33edbd..2ca77fe8be 100644 --- a/src/cmd/cgo/doc.go +++ b/src/cmd/cgo/doc.go @@ -148,6 +148,8 @@ C.long, C.ulong (unsigned long), C.longlong (long long), C.ulonglong (unsigned long long), C.float, C.double, C.complexfloat (complex float), and C.complexdouble (complex double). The C type void* is represented by Go's unsafe.Pointer. +The C sized integer types (int8_t, uint8_t, …) are represented by their Go +counterparts (int8, uint8, …). The C types __int128_t and __uint128_t are represented by [16]byte. A few special C types which would normally be represented by a pointer @@ -296,7 +298,7 @@ Go functions can be exported for use by C code in the following way: They will be available in the C code as: - extern int64 MyFunction(int arg1, int arg2, GoString arg3); + extern int64_t MyFunction(int arg1, int arg2, GoString arg3); extern struct MyFunction2_return MyFunction2(int arg1, int arg2, GoString arg3); found in the _cgo_export.h generated header, after any preambles @@ -710,7 +712,7 @@ _cgo_main.c: int main() { return 0; } void crosscall2(void(*fn)(void*, int, uintptr_t), void *a, int c, uintptr_t ctxt) { } - uintptr_t _cgo_wait_runtime_init_done() { return 0; } + uintptr_t _cgo_wait_runtime_init_done(void) { return 0; } void _cgo_release_context(uintptr_t ctxt) { } char* _cgo_topofstack(void) { return (char*)0; } void _cgo_allocate(void *a, int c) { } diff --git a/src/cmd/cgo/gcc.go b/src/cmd/cgo/gcc.go index b5cf04cf4c..941f1db832 100644 --- a/src/cmd/cgo/gcc.go +++ b/src/cmd/cgo/gcc.go @@ -23,6 +23,7 @@ import ( "internal/xcoff" "math" "os" + "regexp" "strconv" "strings" "unicode" @@ -897,21 +898,16 @@ func (p *Package) rewriteCall(f *File, call *Call) (string, bool) { needsUnsafe = true } - // Explicitly convert untyped constants to the - // parameter type, to avoid a type mismatch. - if p.isConst(f, arg) { - ptype := p.rewriteUnsafe(param.Go) + // Use "var x T = ..." syntax to explicitly convert untyped + // constants to the parameter type, to avoid a type mismatch. + ptype := p.rewriteUnsafe(param.Go) + + if !p.needsPointerCheck(f, param.Go, args[i]) || param.BadPointer { if ptype != param.Go { needsUnsafe = true } - arg = &ast.CallExpr{ - Fun: ptype, - Args: []ast.Expr{arg}, - } - } - - if !p.needsPointerCheck(f, param.Go, args[i]) { - fmt.Fprintf(&sb, "_cgo%d := %s; ", i, gofmtPos(arg, origArg.Pos())) + fmt.Fprintf(&sb, "var _cgo%d %s = %s; ", i, + gofmtLine(ptype), gofmtPos(arg, origArg.Pos())) continue } @@ -1254,47 +1250,6 @@ func (p *Package) isType(t ast.Expr) bool { return false } -// isConst reports whether x is an untyped constant expression. -func (p *Package) isConst(f *File, x ast.Expr) bool { - switch x := x.(type) { - case *ast.BasicLit: - return true - case *ast.SelectorExpr: - id, ok := x.X.(*ast.Ident) - if !ok || id.Name != "C" { - return false - } - name := f.Name[x.Sel.Name] - if name != nil { - return name.IsConst() - } - case *ast.Ident: - return x.Name == "nil" || - strings.HasPrefix(x.Name, "_Ciconst_") || - strings.HasPrefix(x.Name, "_Cfconst_") || - strings.HasPrefix(x.Name, "_Csconst_") || - consts[x.Name] - case *ast.UnaryExpr: - return p.isConst(f, x.X) - case *ast.BinaryExpr: - return p.isConst(f, x.X) && p.isConst(f, x.Y) - case *ast.ParenExpr: - return p.isConst(f, x.X) - case *ast.CallExpr: - // Calling the builtin function complex on two untyped - // constants returns an untyped constant. - // TODO: It's possible to construct a case that will - // erroneously succeed if there is a local function - // named "complex", shadowing the builtin, that returns - // a numeric type. I can't think of any cases that will - // erroneously fail. - if id, ok := x.Fun.(*ast.Ident); ok && id.Name == "complex" && len(x.Args) == 2 { - return p.isConst(f, x.Args[0]) && p.isConst(f, x.Args[1]) - } - } - return false -} - // isVariable reports whether x is a variable, possibly with field references. func (p *Package) isVariable(x ast.Expr) bool { switch x := x.(type) { @@ -1633,6 +1588,7 @@ func (p *Package) gccCmd() []string { c = append(c, p.gccMachine()...) if goos == "aix" { c = append(c, "-maix64") + c = append(c, "-mcmodel=large") } c = append(c, "-") //read input from standard input return c @@ -2091,6 +2047,8 @@ type typeConv struct { ptrSize int64 intSize int64 + + exactWidthIntegerTypes map[string]*Type } var tagGen int @@ -2133,6 +2091,21 @@ func (c *typeConv) Init(ptrSize, intSize int64) { } else { c.goVoidPtr = c.Ident("unsafe.Pointer") } + + c.exactWidthIntegerTypes = make(map[string]*Type) + for _, t := range []ast.Expr{ + c.int8, c.int16, c.int32, c.int64, + c.uint8, c.uint16, c.uint32, c.uint64, + } { + name := t.(*ast.Ident).Name + u := new(Type) + *u = *goTypes[name] + if u.Align > ptrSize { + u.Align = ptrSize + } + u.Go = t + c.exactWidthIntegerTypes[name] = u + } } // base strips away qualifiers and typedefs to get the underlying type @@ -2504,6 +2477,26 @@ func (c *typeConv) Type(dtype dwarf.Type, pos token.Pos) *Type { t.Align = c.ptrSize break } + // Exact-width integer types. These are always compatible with + // the corresponding Go types since the C standard requires + // them to have no padding bit and use the two’s complement + // representation. + if exactWidthIntegerType.MatchString(dt.Name) { + sub := c.Type(dt.Type, pos) + goname := strings.TrimPrefix(dt.Name, "__") + goname = strings.TrimSuffix(goname, "_t") + u := c.exactWidthIntegerTypes[goname] + if sub.Size != u.Size { + fatalf("%s: unexpected size: %d vs. %d – %s", lineno(pos), sub.Size, u.Size, dtype) + } + if sub.Align != u.Align { + fatalf("%s: unexpected alignment: %d vs. %d – %s", lineno(pos), sub.Align, u.Align, dtype) + } + t.Size = u.Size + t.Align = u.Align + t.Go = u.Go + break + } name := c.Ident("_Ctype_" + dt.Name) goIdent[name.Name] = name sub := c.Type(dt.Type, pos) @@ -2511,13 +2504,16 @@ func (c *typeConv) Type(dtype dwarf.Type, pos token.Pos) *Type { // Treat this typedef as a uintptr. s := *sub s.Go = c.uintptr + s.BadPointer = true sub = &s // Make sure we update any previously computed type. if oldType := typedef[name.Name]; oldType != nil { oldType.Go = sub.Go + oldType.BadPointer = true } } t.Go = name + t.BadPointer = sub.BadPointer if unionWithPointer[sub.Go] { unionWithPointer[t.Go] = true } @@ -2527,6 +2523,7 @@ func (c *typeConv) Type(dtype dwarf.Type, pos token.Pos) *Type { if oldType == nil { tt := *t tt.Go = sub.Go + tt.BadPointer = sub.BadPointer typedef[name.Name] = &tt } @@ -2635,6 +2632,8 @@ func (c *typeConv) Type(dtype dwarf.Type, pos token.Pos) *Type { return t } +var exactWidthIntegerType = regexp.MustCompile(`^(__)?u?int(8|16|32|64)_t$`) + // isStructUnionClass reports whether the type described by the Go syntax x // is a struct, union, or class with a tag. func isStructUnionClass(x ast.Expr) bool { diff --git a/src/cmd/cgo/godefs.go b/src/cmd/cgo/godefs.go index 64384a606b..b4fd9c5a6e 100644 --- a/src/cmd/cgo/godefs.go +++ b/src/cmd/cgo/godefs.go @@ -136,21 +136,31 @@ func gofmt(n interface{}) string { // (due to the printer possibly inserting newlines because of position // information) operators. var gofmtLineReplacer = strings.NewReplacer( - "{\n", "{", - ",\n", ",", + // Want to replace \n without ; after everything from + // https://golang.org/ref/spec#Operators_and_punctuation + // EXCEPT ++ -- ) ] } "++\n", "++;", "--\n", "--;", - "+\n", "+", - "-\n", "-", - "*\n", "*", - "/\n", "/", - "%\n", "%", - "&\n", "&", - "|\n", "|", - "^\n", "^", - "<\n", "<", - ">\n", ">", - "=\n", "=", + + "+\n", "+ ", + "-\n", "- ", + "*\n", "* ", + "/\n", "/ ", + "%\n", "% ", + "&\n", "& ", + "|\n", "| ", + "^\n", "^ ", + "<\n", "< ", + ">\n", "> ", + "=\n", "= ", + "!\n", "! ", // not possible in gofmt today + "(\n", "(", + "[\n", "[", // not possible in gofmt today + "{\n", "{", + ",\n", ",", + ".\n", ". ", + ":\n", ": ", // not possible in gofmt today + "\n", ";", ) diff --git a/src/cmd/cgo/main.go b/src/cmd/cgo/main.go index 80435b0634..5a7bb3f87b 100644 --- a/src/cmd/cgo/main.go +++ b/src/cmd/cgo/main.go @@ -71,9 +71,6 @@ type File struct { Edit *edit.Buffer } -// Untyped constants in the current package. -var consts = make(map[string]bool) - func (f *File) offset(p token.Pos) int { return fset.Position(p).Offset } @@ -154,6 +151,7 @@ type Type struct { Go ast.Expr EnumValues map[string]int64 Typedef string + BadPointer bool } // A FuncType collects information about a function type in both the C and Go worlds. diff --git a/src/cmd/cgo/out.go b/src/cmd/cgo/out.go index 0cf8b174f8..5b3a7cb9c1 100644 --- a/src/cmd/cgo/out.go +++ b/src/cmd/cgo/out.go @@ -59,14 +59,14 @@ func (p *Package) writeDefs() { fmt.Fprintf(fm, "int main() { return 0; }\n") if *importRuntimeCgo { fmt.Fprintf(fm, "void crosscall2(void(*fn)(void*, int, __SIZE_TYPE__), void *a, int c, __SIZE_TYPE__ ctxt) { }\n") - fmt.Fprintf(fm, "__SIZE_TYPE__ _cgo_wait_runtime_init_done() { return 0; }\n") + fmt.Fprintf(fm, "__SIZE_TYPE__ _cgo_wait_runtime_init_done(void) { return 0; }\n") fmt.Fprintf(fm, "void _cgo_release_context(__SIZE_TYPE__ ctxt) { }\n") fmt.Fprintf(fm, "char* _cgo_topofstack(void) { return (char*)0; }\n") } else { // If we're not importing runtime/cgo, we *are* runtime/cgo, // which provides these functions. We just need a prototype. fmt.Fprintf(fm, "void crosscall2(void(*fn)(void*, int, __SIZE_TYPE__), void *a, int c, __SIZE_TYPE__ ctxt);\n") - fmt.Fprintf(fm, "__SIZE_TYPE__ _cgo_wait_runtime_init_done();\n") + fmt.Fprintf(fm, "__SIZE_TYPE__ _cgo_wait_runtime_init_done(void);\n") fmt.Fprintf(fm, "void _cgo_release_context(__SIZE_TYPE__);\n") } fmt.Fprintf(fm, "void _cgo_allocate(void *a, int c) { }\n") @@ -336,6 +336,12 @@ func dynimport(obj string) { fatalf("cannot load imported symbols from XCOFF file %s: %v", obj, err) } for _, s := range sym { + if s.Name == "runtime_rt0_go" || s.Name == "_rt0_ppc64_aix_lib" { + // These symbols are imported by runtime/cgo but + // must not be added to _cgo_import.go as there are + // Go symbols. + continue + } fmt.Fprintf(stdout, "//go:cgo_import_dynamic %s %s %q\n", s.Name, s.Name, s.Library) } lib, err := f.ImportedLibraries() @@ -777,14 +783,14 @@ func (p *Package) writeExports(fgo2, fm, fgcc, fgcch io.Writer) { fmt.Fprintf(fgcc, "#include \"_cgo_export.h\"\n\n") // We use packed structs, but they are always aligned. - // The pragmas and address-of-packed-member are not recognized as warning groups in clang 3.4.1, so ignore unknown pragmas first. - // remove as part of #27619 (all: drop support for FreeBSD 10). + // The pragmas and address-of-packed-member are only recognized as + // warning groups in clang 4.0+, so ignore unknown pragmas first. fmt.Fprintf(fgcc, "#pragma GCC diagnostic ignored \"-Wunknown-pragmas\"\n") fmt.Fprintf(fgcc, "#pragma GCC diagnostic ignored \"-Wpragmas\"\n") fmt.Fprintf(fgcc, "#pragma GCC diagnostic ignored \"-Waddress-of-packed-member\"\n") fmt.Fprintf(fgcc, "extern void crosscall2(void (*fn)(void *, int, __SIZE_TYPE__), void *, int, __SIZE_TYPE__);\n") - fmt.Fprintf(fgcc, "extern __SIZE_TYPE__ _cgo_wait_runtime_init_done();\n") + fmt.Fprintf(fgcc, "extern __SIZE_TYPE__ _cgo_wait_runtime_init_done(void);\n") fmt.Fprintf(fgcc, "extern void _cgo_release_context(__SIZE_TYPE__);\n\n") fmt.Fprintf(fgcc, "extern char* _cgo_topofstack(void);") fmt.Fprintf(fgcc, "%s\n", tsanProlog) @@ -1361,19 +1367,19 @@ func c(repr string, args ...interface{}) *TypeRepr { // Map predeclared Go types to Type. var goTypes = map[string]*Type{ - "bool": {Size: 1, Align: 1, C: c("GoUint8")}, - "byte": {Size: 1, Align: 1, C: c("GoUint8")}, + "bool": {Size: 1, Align: 1, C: c("uint8_t")}, + "byte": {Size: 1, Align: 1, C: c("uint8_t")}, "int": {Size: 0, Align: 0, C: c("GoInt")}, "uint": {Size: 0, Align: 0, C: c("GoUint")}, - "rune": {Size: 4, Align: 4, C: c("GoInt32")}, - "int8": {Size: 1, Align: 1, C: c("GoInt8")}, - "uint8": {Size: 1, Align: 1, C: c("GoUint8")}, - "int16": {Size: 2, Align: 2, C: c("GoInt16")}, - "uint16": {Size: 2, Align: 2, C: c("GoUint16")}, - "int32": {Size: 4, Align: 4, C: c("GoInt32")}, - "uint32": {Size: 4, Align: 4, C: c("GoUint32")}, - "int64": {Size: 8, Align: 8, C: c("GoInt64")}, - "uint64": {Size: 8, Align: 8, C: c("GoUint64")}, + "rune": {Size: 4, Align: 4, C: c("int32_t")}, + "int8": {Size: 1, Align: 1, C: c("int8_t")}, + "uint8": {Size: 1, Align: 1, C: c("uint8_t")}, + "int16": {Size: 2, Align: 2, C: c("int16_t")}, + "uint16": {Size: 2, Align: 2, C: c("uint16_t")}, + "int32": {Size: 4, Align: 4, C: c("int32_t")}, + "uint32": {Size: 4, Align: 4, C: c("uint32_t")}, + "int64": {Size: 8, Align: 8, C: c("int64_t")}, + "uint64": {Size: 8, Align: 8, C: c("uint64_t")}, "float32": {Size: 4, Align: 4, C: c("GoFloat32")}, "float64": {Size: 8, Align: 8, C: c("GoFloat64")}, "complex64": {Size: 8, Align: 4, C: c("GoComplex64")}, @@ -1480,10 +1486,11 @@ __cgo_size_assert(double, 8) extern char* _cgo_topofstack(void); -/* We use packed structs, but they are always aligned. */ -/* The pragmas and address-of-packed-member are not recognized as warning groups in clang 3.4.1, so ignore unknown pragmas first. */ -/* remove as part of #27619 (all: drop support for FreeBSD 10). */ - +/* + We use packed structs, but they are always aligned. + The pragmas and address-of-packed-member are only recognized as warning + groups in clang 4.0+, so ignore unknown pragmas first. +*/ #pragma GCC diagnostic ignored "-Wunknown-pragmas" #pragma GCC diagnostic ignored "-Wpragmas" #pragma GCC diagnostic ignored "-Waddress-of-packed-member" @@ -1864,16 +1871,10 @@ const gccExportHeaderProlog = ` #ifndef GO_CGO_PROLOGUE_H #define GO_CGO_PROLOGUE_H -typedef signed char GoInt8; -typedef unsigned char GoUint8; -typedef short GoInt16; -typedef unsigned short GoUint16; -typedef int GoInt32; -typedef unsigned int GoUint32; -typedef long long GoInt64; -typedef unsigned long long GoUint64; -typedef GoIntGOINTBITS GoInt; -typedef GoUintGOINTBITS GoUint; +#include + +typedef intGOINTBITS_t GoInt; +typedef uintGOINTBITS_t GoUint; typedef __SIZE_TYPE__ GoUintptr; typedef float GoFloat32; typedef double GoFloat64; @@ -1924,5 +1925,5 @@ static void GoInit(void) { runtime_iscgo = 1; } -extern __SIZE_TYPE__ _cgo_wait_runtime_init_done() __attribute__ ((weak)); +extern __SIZE_TYPE__ _cgo_wait_runtime_init_done(void) __attribute__ ((weak)); ` diff --git a/src/cmd/compile/internal/amd64/ssa.go b/src/cmd/compile/internal/amd64/ssa.go index a2c7d5d8d8..9c91e05661 100644 --- a/src/cmd/compile/internal/amd64/ssa.go +++ b/src/cmd/compile/internal/amd64/ssa.go @@ -117,6 +117,21 @@ func opregreg(s *gc.SSAGenState, op obj.As, dest, src int16) *obj.Prog { return p } +// memIdx fills out a as an indexed memory reference for v. +// It assumes that the base register and the index register +// are v.Args[0].Reg() and v.Args[1].Reg(), respectively. +// The caller must still use gc.AddAux/gc.AddAux2 to handle v.Aux as necessary. +func memIdx(a *obj.Addr, v *ssa.Value) { + r, i := v.Args[0].Reg(), v.Args[1].Reg() + a.Type = obj.TYPE_MEM + a.Scale = v.Op.Scale() + if a.Scale == 1 && i == x86.REG_SP { + r, i = i, r + } + a.Reg = r + a.Index = i +} + // DUFFZERO consists of repeated blocks of 4 MOVUPSs + LEAQ, // See runtime/mkduff.go. func duffStart(size int64) int64 { @@ -399,7 +414,8 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { r := v.Reg() a := v.Args[0].Reg() if r == a { - if v.AuxInt == 1 { + switch v.AuxInt { + case 1: var asm obj.As // Software optimization manual recommends add $1,reg. // But inc/dec is 1 byte smaller. ICC always uses inc @@ -415,8 +431,7 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { p.To.Type = obj.TYPE_REG p.To.Reg = r return - } - if v.AuxInt == -1 { + case -1: var asm obj.As if v.Op == ssa.OpAMD64ADDQconst { asm = x86.ADECQ @@ -427,6 +442,20 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { p.To.Type = obj.TYPE_REG p.To.Reg = r return + case 0x80: + // 'SUBQ $-0x80, r' is shorter to encode than + // and functionally equivalent to 'ADDQ $0x80, r'. + asm := x86.ASUBL + if v.Op == ssa.OpAMD64ADDQconst { + asm = x86.ASUBQ + } + p := s.Prog(asm) + p.From.Type = obj.TYPE_CONST + p.From.Offset = -0x80 + p.To.Type = obj.TYPE_REG + p.To.Reg = r + return + } p := s.Prog(v.Op.Asm()) p.From.Type = obj.TYPE_CONST @@ -571,26 +600,9 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { case ssa.OpAMD64LEAQ1, ssa.OpAMD64LEAQ2, ssa.OpAMD64LEAQ4, ssa.OpAMD64LEAQ8, ssa.OpAMD64LEAL1, ssa.OpAMD64LEAL2, ssa.OpAMD64LEAL4, ssa.OpAMD64LEAL8, ssa.OpAMD64LEAW1, ssa.OpAMD64LEAW2, ssa.OpAMD64LEAW4, ssa.OpAMD64LEAW8: - o := v.Reg() - r := v.Args[0].Reg() - i := v.Args[1].Reg() p := s.Prog(v.Op.Asm()) - switch v.Op { - case ssa.OpAMD64LEAQ1, ssa.OpAMD64LEAL1, ssa.OpAMD64LEAW1: - p.From.Scale = 1 - if i == x86.REG_SP { - r, i = i, r - } - case ssa.OpAMD64LEAQ2, ssa.OpAMD64LEAL2, ssa.OpAMD64LEAW2: - p.From.Scale = 2 - case ssa.OpAMD64LEAQ4, ssa.OpAMD64LEAL4, ssa.OpAMD64LEAW4: - p.From.Scale = 4 - case ssa.OpAMD64LEAQ8, ssa.OpAMD64LEAL8, ssa.OpAMD64LEAW8: - p.From.Scale = 8 - } - p.From.Type = obj.TYPE_MEM - p.From.Reg = r - p.From.Index = i + memIdx(&p.From, v) + o := v.Reg() p.To.Type = obj.TYPE_REG p.To.Reg = o if v.AuxInt != 0 && v.Aux == nil { @@ -702,25 +714,8 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { p.To.Reg = v.Reg() case ssa.OpAMD64MOVBloadidx1, ssa.OpAMD64MOVWloadidx1, ssa.OpAMD64MOVLloadidx1, ssa.OpAMD64MOVQloadidx1, ssa.OpAMD64MOVSSloadidx1, ssa.OpAMD64MOVSDloadidx1, ssa.OpAMD64MOVQloadidx8, ssa.OpAMD64MOVSDloadidx8, ssa.OpAMD64MOVLloadidx8, ssa.OpAMD64MOVLloadidx4, ssa.OpAMD64MOVSSloadidx4, ssa.OpAMD64MOVWloadidx2: - r := v.Args[0].Reg() - i := v.Args[1].Reg() p := s.Prog(v.Op.Asm()) - p.From.Type = obj.TYPE_MEM - switch v.Op { - case ssa.OpAMD64MOVBloadidx1, ssa.OpAMD64MOVWloadidx1, ssa.OpAMD64MOVLloadidx1, ssa.OpAMD64MOVQloadidx1, ssa.OpAMD64MOVSSloadidx1, ssa.OpAMD64MOVSDloadidx1: - if i == x86.REG_SP { - r, i = i, r - } - p.From.Scale = 1 - case ssa.OpAMD64MOVQloadidx8, ssa.OpAMD64MOVSDloadidx8, ssa.OpAMD64MOVLloadidx8: - p.From.Scale = 8 - case ssa.OpAMD64MOVLloadidx4, ssa.OpAMD64MOVSSloadidx4: - p.From.Scale = 4 - case ssa.OpAMD64MOVWloadidx2: - p.From.Scale = 2 - } - p.From.Reg = r - p.From.Index = i + memIdx(&p.From, v) gc.AddAux(&p.From, v) p.To.Type = obj.TYPE_REG p.To.Reg = v.Reg() @@ -736,27 +731,10 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { gc.AddAux(&p.To, v) case ssa.OpAMD64MOVBstoreidx1, ssa.OpAMD64MOVWstoreidx1, ssa.OpAMD64MOVLstoreidx1, ssa.OpAMD64MOVQstoreidx1, ssa.OpAMD64MOVSSstoreidx1, ssa.OpAMD64MOVSDstoreidx1, ssa.OpAMD64MOVQstoreidx8, ssa.OpAMD64MOVSDstoreidx8, ssa.OpAMD64MOVLstoreidx8, ssa.OpAMD64MOVSSstoreidx4, ssa.OpAMD64MOVLstoreidx4, ssa.OpAMD64MOVWstoreidx2: - r := v.Args[0].Reg() - i := v.Args[1].Reg() p := s.Prog(v.Op.Asm()) p.From.Type = obj.TYPE_REG p.From.Reg = v.Args[2].Reg() - p.To.Type = obj.TYPE_MEM - switch v.Op { - case ssa.OpAMD64MOVBstoreidx1, ssa.OpAMD64MOVWstoreidx1, ssa.OpAMD64MOVLstoreidx1, ssa.OpAMD64MOVQstoreidx1, ssa.OpAMD64MOVSSstoreidx1, ssa.OpAMD64MOVSDstoreidx1: - if i == x86.REG_SP { - r, i = i, r - } - p.To.Scale = 1 - case ssa.OpAMD64MOVQstoreidx8, ssa.OpAMD64MOVSDstoreidx8, ssa.OpAMD64MOVLstoreidx8: - p.To.Scale = 8 - case ssa.OpAMD64MOVSSstoreidx4, ssa.OpAMD64MOVLstoreidx4: - p.To.Scale = 4 - case ssa.OpAMD64MOVWstoreidx2: - p.To.Scale = 2 - } - p.To.Reg = r - p.To.Index = i + memIdx(&p.To, v) gc.AddAux(&p.To, v) case ssa.OpAMD64ADDQconstmodify, ssa.OpAMD64ADDLconstmodify: sc := v.AuxValAndOff() @@ -809,24 +787,7 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { p.From.Type = obj.TYPE_CONST sc := v.AuxValAndOff() p.From.Offset = sc.Val() - r := v.Args[0].Reg() - i := v.Args[1].Reg() - switch v.Op { - case ssa.OpAMD64MOVBstoreconstidx1, ssa.OpAMD64MOVWstoreconstidx1, ssa.OpAMD64MOVLstoreconstidx1, ssa.OpAMD64MOVQstoreconstidx1: - p.To.Scale = 1 - if i == x86.REG_SP { - r, i = i, r - } - case ssa.OpAMD64MOVWstoreconstidx2: - p.To.Scale = 2 - case ssa.OpAMD64MOVLstoreconstidx4: - p.To.Scale = 4 - case ssa.OpAMD64MOVQstoreconstidx8: - p.To.Scale = 8 - } - p.To.Type = obj.TYPE_MEM - p.To.Reg = r - p.To.Index = i + memIdx(&p.To, v) gc.AddAux2(&p.To, v, sc.Off()) case ssa.OpAMD64MOVLQSX, ssa.OpAMD64MOVWQSX, ssa.OpAMD64MOVBQSX, ssa.OpAMD64MOVLQZX, ssa.OpAMD64MOVWQZX, ssa.OpAMD64MOVBQZX, ssa.OpAMD64CVTTSS2SL, ssa.OpAMD64CVTTSD2SL, ssa.OpAMD64CVTTSS2SQ, ssa.OpAMD64CVTTSD2SQ, @@ -979,6 +940,20 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { p.To.Name = obj.NAME_EXTERN p.To.Sym = v.Aux.(*obj.LSym) + case ssa.OpAMD64LoweredPanicBoundsA, ssa.OpAMD64LoweredPanicBoundsB, ssa.OpAMD64LoweredPanicBoundsC: + p := s.Prog(obj.ACALL) + p.To.Type = obj.TYPE_MEM + p.To.Name = obj.NAME_EXTERN + p.To.Sym = gc.BoundsCheckFunc[v.AuxInt] + s.UseArgs(int64(2 * gc.Widthptr)) // space used in callee args area by assembly stubs + + case ssa.OpAMD64LoweredPanicExtendA, ssa.OpAMD64LoweredPanicExtendB, ssa.OpAMD64LoweredPanicExtendC: + p := s.Prog(obj.ACALL) + p.To.Type = obj.TYPE_MEM + p.To.Name = obj.NAME_EXTERN + p.To.Sym = gc.ExtendCheckFunc[v.AuxInt] + s.UseArgs(int64(3 * gc.Widthptr)) // space used in callee args area by assembly stubs + case ssa.OpAMD64NEGQ, ssa.OpAMD64NEGL, ssa.OpAMD64BSWAPQ, ssa.OpAMD64BSWAPL, ssa.OpAMD64NOTQ, ssa.OpAMD64NOTL: @@ -1108,7 +1083,7 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { if gc.Debug_checknil != 0 && v.Pos.Line() > 1 { // v.Pos.Line()==1 in generated wrappers gc.Warnl(v.Pos, "generated nil check") } - case ssa.OpAMD64MOVLatomicload, ssa.OpAMD64MOVQatomicload: + case ssa.OpAMD64MOVBatomicload, ssa.OpAMD64MOVLatomicload, ssa.OpAMD64MOVQatomicload: p := s.Prog(v.Op.Asm()) p.From.Type = obj.TYPE_MEM p.From.Reg = v.Args[0].Reg() @@ -1233,7 +1208,6 @@ func ssaGenBlock(s *gc.SSAGenState, b, next *ssa.Block) { s.Branches = append(s.Branches, gc.Branch{P: p, B: b.Succs[0].Block()}) } case ssa.BlockExit: - s.Prog(obj.AUNDEF) // tell plive.go that we never reach here case ssa.BlockRet: s.Prog(obj.ARET) case ssa.BlockRetJmp: diff --git a/src/cmd/compile/internal/arm/ssa.go b/src/cmd/compile/internal/arm/ssa.go index 9a8fabf622..16752977a8 100644 --- a/src/cmd/compile/internal/arm/ssa.go +++ b/src/cmd/compile/internal/arm/ssa.go @@ -206,6 +206,9 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { ssa.OpARMADDD, ssa.OpARMSUBF, ssa.OpARMSUBD, + ssa.OpARMSLL, + ssa.OpARMSRL, + ssa.OpARMSRA, ssa.OpARMMULF, ssa.OpARMMULD, ssa.OpARMNMULF, @@ -247,18 +250,6 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { p.Reg = r1 p.To.Type = obj.TYPE_REG p.To.Reg = r - case ssa.OpARMSLL, - ssa.OpARMSRL, - ssa.OpARMSRA: - r := v.Reg() - r1 := v.Args[0].Reg() - r2 := v.Args[1].Reg() - p := s.Prog(v.Op.Asm()) - p.From.Type = obj.TYPE_REG - p.From.Reg = r2 - p.Reg = r1 - p.To.Type = obj.TYPE_REG - p.To.Reg = r case ssa.OpARMSRAcond: // ARM shift instructions uses only the low-order byte of the shift amount // generate conditional instructions to deal with large shifts @@ -659,6 +650,7 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { case ssa.OpARMMVN, ssa.OpARMCLZ, ssa.OpARMREV, + ssa.OpARMREV16, ssa.OpARMRBIT, ssa.OpARMSQRTD, ssa.OpARMNEGF, @@ -710,6 +702,18 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { p.To.Type = obj.TYPE_MEM p.To.Name = obj.NAME_EXTERN p.To.Sym = v.Aux.(*obj.LSym) + case ssa.OpARMLoweredPanicBoundsA, ssa.OpARMLoweredPanicBoundsB, ssa.OpARMLoweredPanicBoundsC: + p := s.Prog(obj.ACALL) + p.To.Type = obj.TYPE_MEM + p.To.Name = obj.NAME_EXTERN + p.To.Sym = gc.BoundsCheckFunc[v.AuxInt] + s.UseArgs(8) // space used in callee args area by assembly stubs + case ssa.OpARMLoweredPanicExtendA, ssa.OpARMLoweredPanicExtendB, ssa.OpARMLoweredPanicExtendC: + p := s.Prog(obj.ACALL) + p.To.Type = obj.TYPE_MEM + p.To.Name = obj.NAME_EXTERN + p.To.Sym = gc.ExtendCheckFunc[v.AuxInt] + s.UseArgs(12) // space used in callee args area by assembly stubs case ssa.OpARMDUFFZERO: p := s.Prog(obj.ADUFFZERO) p.To.Type = obj.TYPE_MEM @@ -916,7 +920,6 @@ func ssaGenBlock(s *gc.SSAGenState, b, next *ssa.Block) { } case ssa.BlockExit: - s.Prog(obj.AUNDEF) // tell plive.go that we never reach here case ssa.BlockRet: s.Prog(obj.ARET) diff --git a/src/cmd/compile/internal/arm64/ssa.go b/src/cmd/compile/internal/arm64/ssa.go index 87703dd80d..fc7a60e63e 100644 --- a/src/cmd/compile/internal/arm64/ssa.go +++ b/src/cmd/compile/internal/arm64/ssa.go @@ -246,6 +246,45 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { p.Reg = v.Args[0].Reg() p.To.Type = obj.TYPE_REG p.To.Reg = v.Reg() + case ssa.OpARM64ADDSconstflags: + p := s.Prog(v.Op.Asm()) + p.From.Type = obj.TYPE_CONST + p.From.Offset = v.AuxInt + p.Reg = v.Args[0].Reg() + p.To.Type = obj.TYPE_REG + p.To.Reg = v.Reg0() + case ssa.OpARM64ADCzerocarry: + p := s.Prog(v.Op.Asm()) + p.From.Type = obj.TYPE_REG + p.From.Reg = arm64.REGZERO + p.Reg = arm64.REGZERO + p.To.Type = obj.TYPE_REG + p.To.Reg = v.Reg() + case ssa.OpARM64ADCSflags, + ssa.OpARM64ADDSflags, + ssa.OpARM64SBCSflags, + ssa.OpARM64SUBSflags: + r := v.Reg0() + r1 := v.Args[0].Reg() + r2 := v.Args[1].Reg() + p := s.Prog(v.Op.Asm()) + p.From.Type = obj.TYPE_REG + p.From.Reg = r2 + p.Reg = r1 + p.To.Type = obj.TYPE_REG + p.To.Reg = r + case ssa.OpARM64NEGSflags: + p := s.Prog(v.Op.Asm()) + p.From.Type = obj.TYPE_REG + p.From.Reg = v.Args[0].Reg() + p.To.Type = obj.TYPE_REG + p.To.Reg = v.Reg0() + case ssa.OpARM64NGCzerocarry: + p := s.Prog(v.Op.Asm()) + p.From.Type = obj.TYPE_REG + p.From.Reg = arm64.REGZERO + p.To.Type = obj.TYPE_REG + p.To.Reg = v.Reg() case ssa.OpARM64EXTRconst, ssa.OpARM64EXTRWconst: p := s.Prog(v.Op.Asm()) @@ -301,6 +340,12 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { p.From.Val = math.Float64frombits(uint64(v.AuxInt)) p.To.Type = obj.TYPE_REG p.To.Reg = v.Reg() + case ssa.OpARM64FCMPS0, + ssa.OpARM64FCMPD0: + p := s.Prog(v.Op.Asm()) + p.From.Type = obj.TYPE_FCONST + p.From.Val = math.Float64frombits(0) + p.Reg = v.Args[0].Reg() case ssa.OpARM64CMP, ssa.OpARM64CMPW, ssa.OpARM64CMN, @@ -393,6 +438,7 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { p.To.Type = obj.TYPE_REG p.To.Reg = v.Reg() case ssa.OpARM64LDAR, + ssa.OpARM64LDARB, ssa.OpARM64LDARW: p := s.Prog(v.Op.Asm()) p.From.Type = obj.TYPE_MEM @@ -840,6 +886,12 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { p.To.Type = obj.TYPE_MEM p.To.Name = obj.NAME_EXTERN p.To.Sym = v.Aux.(*obj.LSym) + case ssa.OpARM64LoweredPanicBoundsA, ssa.OpARM64LoweredPanicBoundsB, ssa.OpARM64LoweredPanicBoundsC: + p := s.Prog(obj.ACALL) + p.To.Type = obj.TYPE_MEM + p.To.Name = obj.NAME_EXTERN + p.To.Sym = gc.BoundsCheckFunc[v.AuxInt] + s.UseArgs(16) // space used in callee args area by assembly stubs case ssa.OpARM64LoweredNilCheck: // Issue a load which will fault if arg is nil. p := s.Prog(arm64.AMOVB) @@ -860,7 +912,11 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { ssa.OpARM64LessThanU, ssa.OpARM64LessEqualU, ssa.OpARM64GreaterThanU, - ssa.OpARM64GreaterEqualU: + ssa.OpARM64GreaterEqualU, + ssa.OpARM64LessThanF, + ssa.OpARM64LessEqualF, + ssa.OpARM64GreaterThanF, + ssa.OpARM64GreaterEqualF: // generate boolean values using CSET p := s.Prog(arm64.ACSET) p.From.Type = obj.TYPE_REG // assembler encodes conditional bits in Reg @@ -908,6 +964,10 @@ var condBits = map[ssa.Op]int16{ ssa.OpARM64GreaterThanU: arm64.COND_HI, ssa.OpARM64GreaterEqual: arm64.COND_GE, ssa.OpARM64GreaterEqualU: arm64.COND_HS, + ssa.OpARM64LessThanF: arm64.COND_MI, + ssa.OpARM64LessEqualF: arm64.COND_LS, + ssa.OpARM64GreaterThanF: arm64.COND_GT, + ssa.OpARM64GreaterEqualF: arm64.COND_GE, } var blockJump = map[ssa.BlockKind]struct { @@ -929,6 +989,10 @@ var blockJump = map[ssa.BlockKind]struct { ssa.BlockARM64NZW: {arm64.ACBNZW, arm64.ACBZW}, ssa.BlockARM64TBZ: {arm64.ATBZ, arm64.ATBNZ}, ssa.BlockARM64TBNZ: {arm64.ATBNZ, arm64.ATBZ}, + ssa.BlockARM64FLT: {arm64.ABMI, arm64.ABPL}, + ssa.BlockARM64FGE: {arm64.ABGE, arm64.ABLT}, + ssa.BlockARM64FLE: {arm64.ABLS, arm64.ABHI}, + ssa.BlockARM64FGT: {arm64.ABGT, arm64.ABLE}, } func ssaGenBlock(s *gc.SSAGenState, b, next *ssa.Block) { @@ -958,7 +1022,6 @@ func ssaGenBlock(s *gc.SSAGenState, b, next *ssa.Block) { } case ssa.BlockExit: - s.Prog(obj.AUNDEF) // tell plive.go that we never reach here case ssa.BlockRet: s.Prog(obj.ARET) @@ -975,7 +1038,9 @@ func ssaGenBlock(s *gc.SSAGenState, b, next *ssa.Block) { ssa.BlockARM64ULT, ssa.BlockARM64UGT, ssa.BlockARM64ULE, ssa.BlockARM64UGE, ssa.BlockARM64Z, ssa.BlockARM64NZ, - ssa.BlockARM64ZW, ssa.BlockARM64NZW: + ssa.BlockARM64ZW, ssa.BlockARM64NZW, + ssa.BlockARM64FLT, ssa.BlockARM64FGE, + ssa.BlockARM64FLE, ssa.BlockARM64FGT: jmp := blockJump[b.Kind] var p *obj.Prog switch next { diff --git a/src/cmd/compile/internal/gc/align.go b/src/cmd/compile/internal/gc/align.go index 87a7de547a..17c549d252 100644 --- a/src/cmd/compile/internal/gc/align.go +++ b/src/cmd/compile/internal/gc/align.go @@ -172,7 +172,16 @@ func dowidth(t *types.Type) { if t.Width == -2 { if !t.Broke() { t.SetBroke(true) - yyerrorl(asNode(t.Nod).Pos, "invalid recursive type %v", t) + // t.Nod should not be nil here, but in some cases is appears to be + // (see issue #23823). For now (temporary work-around) at a minimum + // don't crash and provide a meaningful error message. + // TODO(gri) determine the correct fix during a regular devel cycle + // (see issue #31872). + if t.Nod == nil { + yyerror("invalid recursive type %v", t) + } else { + yyerrorl(asNode(t.Nod).Pos, "invalid recursive type %v", t) + } } t.Width = 0 diff --git a/src/cmd/compile/internal/gc/builtin.go b/src/cmd/compile/internal/gc/builtin.go index f32fcd675d..8244929f74 100644 --- a/src/cmd/compile/internal/gc/builtin.go +++ b/src/cmd/compile/internal/gc/builtin.go @@ -10,8 +10,6 @@ var runtimeDecls = [...]struct { typ int }{ {"newobject", funcTag, 4}, - {"panicindex", funcTag, 5}, - {"panicslice", funcTag, 5}, {"panicdivide", funcTag, 5}, {"panicshift", funcTag, 5}, {"panicmakeslicelen", funcTag, 5}, @@ -20,138 +18,154 @@ var runtimeDecls = [...]struct { {"gopanic", funcTag, 7}, {"gorecover", funcTag, 10}, {"goschedguarded", funcTag, 5}, - {"printbool", funcTag, 12}, - {"printfloat", funcTag, 14}, - {"printint", funcTag, 16}, - {"printhex", funcTag, 18}, - {"printuint", funcTag, 18}, - {"printcomplex", funcTag, 20}, - {"printstring", funcTag, 22}, - {"printpointer", funcTag, 23}, - {"printiface", funcTag, 23}, - {"printeface", funcTag, 23}, - {"printslice", funcTag, 23}, + {"goPanicIndex", funcTag, 12}, + {"goPanicIndexU", funcTag, 14}, + {"goPanicSliceAlen", funcTag, 12}, + {"goPanicSliceAlenU", funcTag, 14}, + {"goPanicSliceAcap", funcTag, 12}, + {"goPanicSliceAcapU", funcTag, 14}, + {"goPanicSliceB", funcTag, 12}, + {"goPanicSliceBU", funcTag, 14}, + {"goPanicSlice3Alen", funcTag, 12}, + {"goPanicSlice3AlenU", funcTag, 14}, + {"goPanicSlice3Acap", funcTag, 12}, + {"goPanicSlice3AcapU", funcTag, 14}, + {"goPanicSlice3B", funcTag, 12}, + {"goPanicSlice3BU", funcTag, 14}, + {"goPanicSlice3C", funcTag, 12}, + {"goPanicSlice3CU", funcTag, 14}, + {"printbool", funcTag, 16}, + {"printfloat", funcTag, 18}, + {"printint", funcTag, 20}, + {"printhex", funcTag, 22}, + {"printuint", funcTag, 22}, + {"printcomplex", funcTag, 24}, + {"printstring", funcTag, 26}, + {"printpointer", funcTag, 27}, + {"printiface", funcTag, 27}, + {"printeface", funcTag, 27}, + {"printslice", funcTag, 27}, {"printnl", funcTag, 5}, {"printsp", funcTag, 5}, {"printlock", funcTag, 5}, {"printunlock", funcTag, 5}, - {"concatstring2", funcTag, 26}, - {"concatstring3", funcTag, 27}, - {"concatstring4", funcTag, 28}, - {"concatstring5", funcTag, 29}, - {"concatstrings", funcTag, 31}, - {"cmpstring", funcTag, 33}, - {"intstring", funcTag, 36}, - {"slicebytetostring", funcTag, 38}, - {"slicebytetostringtmp", funcTag, 39}, - {"slicerunetostring", funcTag, 42}, - {"stringtoslicebyte", funcTag, 43}, - {"stringtoslicerune", funcTag, 46}, - {"slicecopy", funcTag, 48}, - {"slicestringcopy", funcTag, 49}, - {"decoderune", funcTag, 50}, - {"countrunes", funcTag, 51}, - {"convI2I", funcTag, 52}, - {"convT16", funcTag, 54}, - {"convT32", funcTag, 54}, - {"convT64", funcTag, 54}, - {"convTstring", funcTag, 54}, - {"convTslice", funcTag, 54}, - {"convT2E", funcTag, 55}, - {"convT2Enoptr", funcTag, 55}, - {"convT2I", funcTag, 55}, - {"convT2Inoptr", funcTag, 55}, - {"assertE2I", funcTag, 52}, - {"assertE2I2", funcTag, 56}, - {"assertI2I", funcTag, 52}, - {"assertI2I2", funcTag, 56}, - {"panicdottypeE", funcTag, 57}, - {"panicdottypeI", funcTag, 57}, - {"panicnildottype", funcTag, 58}, - {"ifaceeq", funcTag, 60}, - {"efaceeq", funcTag, 60}, - {"fastrand", funcTag, 62}, - {"makemap64", funcTag, 64}, - {"makemap", funcTag, 65}, - {"makemap_small", funcTag, 66}, - {"mapaccess1", funcTag, 67}, - {"mapaccess1_fast32", funcTag, 68}, - {"mapaccess1_fast64", funcTag, 68}, - {"mapaccess1_faststr", funcTag, 68}, - {"mapaccess1_fat", funcTag, 69}, - {"mapaccess2", funcTag, 70}, - {"mapaccess2_fast32", funcTag, 71}, - {"mapaccess2_fast64", funcTag, 71}, - {"mapaccess2_faststr", funcTag, 71}, - {"mapaccess2_fat", funcTag, 72}, - {"mapassign", funcTag, 67}, - {"mapassign_fast32", funcTag, 68}, - {"mapassign_fast32ptr", funcTag, 68}, - {"mapassign_fast64", funcTag, 68}, - {"mapassign_fast64ptr", funcTag, 68}, - {"mapassign_faststr", funcTag, 68}, - {"mapiterinit", funcTag, 73}, - {"mapdelete", funcTag, 73}, - {"mapdelete_fast32", funcTag, 74}, - {"mapdelete_fast64", funcTag, 74}, - {"mapdelete_faststr", funcTag, 74}, - {"mapiternext", funcTag, 75}, - {"mapclear", funcTag, 76}, - {"makechan64", funcTag, 78}, - {"makechan", funcTag, 79}, - {"chanrecv1", funcTag, 81}, - {"chanrecv2", funcTag, 82}, - {"chansend1", funcTag, 84}, - {"closechan", funcTag, 23}, - {"writeBarrier", varTag, 86}, - {"typedmemmove", funcTag, 87}, - {"typedmemclr", funcTag, 88}, - {"typedslicecopy", funcTag, 89}, - {"selectnbsend", funcTag, 90}, - {"selectnbrecv", funcTag, 91}, - {"selectnbrecv2", funcTag, 93}, - {"selectsetpc", funcTag, 58}, - {"selectgo", funcTag, 94}, + {"concatstring2", funcTag, 30}, + {"concatstring3", funcTag, 31}, + {"concatstring4", funcTag, 32}, + {"concatstring5", funcTag, 33}, + {"concatstrings", funcTag, 35}, + {"cmpstring", funcTag, 36}, + {"intstring", funcTag, 39}, + {"slicebytetostring", funcTag, 41}, + {"slicebytetostringtmp", funcTag, 42}, + {"slicerunetostring", funcTag, 45}, + {"stringtoslicebyte", funcTag, 46}, + {"stringtoslicerune", funcTag, 49}, + {"slicecopy", funcTag, 51}, + {"slicestringcopy", funcTag, 52}, + {"decoderune", funcTag, 53}, + {"countrunes", funcTag, 54}, + {"convI2I", funcTag, 55}, + {"convT16", funcTag, 57}, + {"convT32", funcTag, 57}, + {"convT64", funcTag, 57}, + {"convTstring", funcTag, 57}, + {"convTslice", funcTag, 57}, + {"convT2E", funcTag, 58}, + {"convT2Enoptr", funcTag, 58}, + {"convT2I", funcTag, 58}, + {"convT2Inoptr", funcTag, 58}, + {"assertE2I", funcTag, 55}, + {"assertE2I2", funcTag, 59}, + {"assertI2I", funcTag, 55}, + {"assertI2I2", funcTag, 59}, + {"panicdottypeE", funcTag, 60}, + {"panicdottypeI", funcTag, 60}, + {"panicnildottype", funcTag, 61}, + {"ifaceeq", funcTag, 63}, + {"efaceeq", funcTag, 63}, + {"fastrand", funcTag, 65}, + {"makemap64", funcTag, 67}, + {"makemap", funcTag, 68}, + {"makemap_small", funcTag, 69}, + {"mapaccess1", funcTag, 70}, + {"mapaccess1_fast32", funcTag, 71}, + {"mapaccess1_fast64", funcTag, 71}, + {"mapaccess1_faststr", funcTag, 71}, + {"mapaccess1_fat", funcTag, 72}, + {"mapaccess2", funcTag, 73}, + {"mapaccess2_fast32", funcTag, 74}, + {"mapaccess2_fast64", funcTag, 74}, + {"mapaccess2_faststr", funcTag, 74}, + {"mapaccess2_fat", funcTag, 75}, + {"mapassign", funcTag, 70}, + {"mapassign_fast32", funcTag, 71}, + {"mapassign_fast32ptr", funcTag, 71}, + {"mapassign_fast64", funcTag, 71}, + {"mapassign_fast64ptr", funcTag, 71}, + {"mapassign_faststr", funcTag, 71}, + {"mapiterinit", funcTag, 76}, + {"mapdelete", funcTag, 76}, + {"mapdelete_fast32", funcTag, 77}, + {"mapdelete_fast64", funcTag, 77}, + {"mapdelete_faststr", funcTag, 77}, + {"mapiternext", funcTag, 78}, + {"mapclear", funcTag, 79}, + {"makechan64", funcTag, 81}, + {"makechan", funcTag, 82}, + {"chanrecv1", funcTag, 84}, + {"chanrecv2", funcTag, 85}, + {"chansend1", funcTag, 87}, + {"closechan", funcTag, 27}, + {"writeBarrier", varTag, 89}, + {"typedmemmove", funcTag, 90}, + {"typedmemclr", funcTag, 91}, + {"typedslicecopy", funcTag, 92}, + {"selectnbsend", funcTag, 93}, + {"selectnbrecv", funcTag, 94}, + {"selectnbrecv2", funcTag, 96}, + {"selectsetpc", funcTag, 61}, + {"selectgo", funcTag, 97}, {"block", funcTag, 5}, - {"makeslice", funcTag, 95}, - {"makeslice64", funcTag, 96}, - {"growslice", funcTag, 98}, - {"memmove", funcTag, 99}, - {"memclrNoHeapPointers", funcTag, 100}, - {"memclrHasPointers", funcTag, 100}, - {"memequal", funcTag, 101}, - {"memequal8", funcTag, 102}, - {"memequal16", funcTag, 102}, - {"memequal32", funcTag, 102}, - {"memequal64", funcTag, 102}, - {"memequal128", funcTag, 102}, - {"int64div", funcTag, 103}, - {"uint64div", funcTag, 104}, - {"int64mod", funcTag, 103}, - {"uint64mod", funcTag, 104}, - {"float64toint64", funcTag, 105}, - {"float64touint64", funcTag, 106}, - {"float64touint32", funcTag, 107}, - {"int64tofloat64", funcTag, 108}, - {"uint64tofloat64", funcTag, 109}, - {"uint32tofloat64", funcTag, 110}, - {"complex128div", funcTag, 111}, - {"racefuncenter", funcTag, 112}, + {"makeslice", funcTag, 98}, + {"makeslice64", funcTag, 99}, + {"growslice", funcTag, 101}, + {"memmove", funcTag, 102}, + {"memclrNoHeapPointers", funcTag, 103}, + {"memclrHasPointers", funcTag, 103}, + {"memequal", funcTag, 104}, + {"memequal8", funcTag, 105}, + {"memequal16", funcTag, 105}, + {"memequal32", funcTag, 105}, + {"memequal64", funcTag, 105}, + {"memequal128", funcTag, 105}, + {"int64div", funcTag, 106}, + {"uint64div", funcTag, 107}, + {"int64mod", funcTag, 106}, + {"uint64mod", funcTag, 107}, + {"float64toint64", funcTag, 108}, + {"float64touint64", funcTag, 109}, + {"float64touint32", funcTag, 110}, + {"int64tofloat64", funcTag, 111}, + {"uint64tofloat64", funcTag, 112}, + {"uint32tofloat64", funcTag, 113}, + {"complex128div", funcTag, 114}, + {"racefuncenter", funcTag, 115}, {"racefuncenterfp", funcTag, 5}, {"racefuncexit", funcTag, 5}, - {"raceread", funcTag, 112}, - {"racewrite", funcTag, 112}, - {"racereadrange", funcTag, 113}, - {"racewriterange", funcTag, 113}, - {"msanread", funcTag, 113}, - {"msanwrite", funcTag, 113}, - {"x86HasPOPCNT", varTag, 11}, - {"x86HasSSE41", varTag, 11}, - {"arm64HasATOMICS", varTag, 11}, + {"raceread", funcTag, 115}, + {"racewrite", funcTag, 115}, + {"racereadrange", funcTag, 116}, + {"racewriterange", funcTag, 116}, + {"msanread", funcTag, 116}, + {"msanwrite", funcTag, 116}, + {"x86HasPOPCNT", varTag, 15}, + {"x86HasSSE41", varTag, 15}, + {"arm64HasATOMICS", varTag, 15}, } func runtimeTypes() []*types.Type { - var typs [114]*types.Type + var typs [117]*types.Type typs[0] = types.Bytetype typs[1] = types.NewPtr(typs[0]) typs[2] = types.Types[TANY] @@ -163,108 +177,111 @@ func runtimeTypes() []*types.Type { typs[8] = types.Types[TINT32] typs[9] = types.NewPtr(typs[8]) typs[10] = functype(nil, []*Node{anonfield(typs[9])}, []*Node{anonfield(typs[6])}) - typs[11] = types.Types[TBOOL] - typs[12] = functype(nil, []*Node{anonfield(typs[11])}, nil) - typs[13] = types.Types[TFLOAT64] - typs[14] = functype(nil, []*Node{anonfield(typs[13])}, nil) - typs[15] = types.Types[TINT64] + typs[11] = types.Types[TINT] + typs[12] = functype(nil, []*Node{anonfield(typs[11]), anonfield(typs[11])}, nil) + typs[13] = types.Types[TUINT] + typs[14] = functype(nil, []*Node{anonfield(typs[13]), anonfield(typs[11])}, nil) + typs[15] = types.Types[TBOOL] typs[16] = functype(nil, []*Node{anonfield(typs[15])}, nil) - typs[17] = types.Types[TUINT64] + typs[17] = types.Types[TFLOAT64] typs[18] = functype(nil, []*Node{anonfield(typs[17])}, nil) - typs[19] = types.Types[TCOMPLEX128] + typs[19] = types.Types[TINT64] typs[20] = functype(nil, []*Node{anonfield(typs[19])}, nil) - typs[21] = types.Types[TSTRING] + typs[21] = types.Types[TUINT64] typs[22] = functype(nil, []*Node{anonfield(typs[21])}, nil) - typs[23] = functype(nil, []*Node{anonfield(typs[2])}, nil) - typs[24] = types.NewArray(typs[0], 32) - typs[25] = types.NewPtr(typs[24]) - typs[26] = functype(nil, []*Node{anonfield(typs[25]), anonfield(typs[21]), anonfield(typs[21])}, []*Node{anonfield(typs[21])}) - typs[27] = functype(nil, []*Node{anonfield(typs[25]), anonfield(typs[21]), anonfield(typs[21]), anonfield(typs[21])}, []*Node{anonfield(typs[21])}) - typs[28] = functype(nil, []*Node{anonfield(typs[25]), anonfield(typs[21]), anonfield(typs[21]), anonfield(typs[21]), anonfield(typs[21])}, []*Node{anonfield(typs[21])}) - typs[29] = functype(nil, []*Node{anonfield(typs[25]), anonfield(typs[21]), anonfield(typs[21]), anonfield(typs[21]), anonfield(typs[21]), anonfield(typs[21])}, []*Node{anonfield(typs[21])}) - typs[30] = types.NewSlice(typs[21]) - typs[31] = functype(nil, []*Node{anonfield(typs[25]), anonfield(typs[30])}, []*Node{anonfield(typs[21])}) - typs[32] = types.Types[TINT] - typs[33] = functype(nil, []*Node{anonfield(typs[21]), anonfield(typs[21])}, []*Node{anonfield(typs[32])}) - typs[34] = types.NewArray(typs[0], 4) - typs[35] = types.NewPtr(typs[34]) - typs[36] = functype(nil, []*Node{anonfield(typs[35]), anonfield(typs[15])}, []*Node{anonfield(typs[21])}) - typs[37] = types.NewSlice(typs[0]) - typs[38] = functype(nil, []*Node{anonfield(typs[25]), anonfield(typs[37])}, []*Node{anonfield(typs[21])}) - typs[39] = functype(nil, []*Node{anonfield(typs[37])}, []*Node{anonfield(typs[21])}) - typs[40] = types.Runetype - typs[41] = types.NewSlice(typs[40]) - typs[42] = functype(nil, []*Node{anonfield(typs[25]), anonfield(typs[41])}, []*Node{anonfield(typs[21])}) - typs[43] = functype(nil, []*Node{anonfield(typs[25]), anonfield(typs[21])}, []*Node{anonfield(typs[37])}) - typs[44] = types.NewArray(typs[40], 32) - typs[45] = types.NewPtr(typs[44]) - typs[46] = functype(nil, []*Node{anonfield(typs[45]), anonfield(typs[21])}, []*Node{anonfield(typs[41])}) - typs[47] = types.Types[TUINTPTR] - typs[48] = functype(nil, []*Node{anonfield(typs[2]), anonfield(typs[2]), anonfield(typs[47])}, []*Node{anonfield(typs[32])}) - typs[49] = functype(nil, []*Node{anonfield(typs[2]), anonfield(typs[2])}, []*Node{anonfield(typs[32])}) - typs[50] = functype(nil, []*Node{anonfield(typs[21]), anonfield(typs[32])}, []*Node{anonfield(typs[40]), anonfield(typs[32])}) - typs[51] = functype(nil, []*Node{anonfield(typs[21])}, []*Node{anonfield(typs[32])}) - typs[52] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[2])}, []*Node{anonfield(typs[2])}) - typs[53] = types.Types[TUNSAFEPTR] - typs[54] = functype(nil, []*Node{anonfield(typs[2])}, []*Node{anonfield(typs[53])}) - typs[55] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[3])}, []*Node{anonfield(typs[2])}) - typs[56] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[2])}, []*Node{anonfield(typs[2]), anonfield(typs[11])}) - typs[57] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[1]), anonfield(typs[1])}, nil) - typs[58] = functype(nil, []*Node{anonfield(typs[1])}, nil) - typs[59] = types.NewPtr(typs[47]) - typs[60] = functype(nil, []*Node{anonfield(typs[59]), anonfield(typs[53]), anonfield(typs[53])}, []*Node{anonfield(typs[11])}) - typs[61] = types.Types[TUINT32] - typs[62] = functype(nil, nil, []*Node{anonfield(typs[61])}) - typs[63] = types.NewMap(typs[2], typs[2]) - typs[64] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[15]), anonfield(typs[3])}, []*Node{anonfield(typs[63])}) - typs[65] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[32]), anonfield(typs[3])}, []*Node{anonfield(typs[63])}) - typs[66] = functype(nil, nil, []*Node{anonfield(typs[63])}) - typs[67] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[63]), anonfield(typs[3])}, []*Node{anonfield(typs[3])}) - typs[68] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[63]), anonfield(typs[2])}, []*Node{anonfield(typs[3])}) - typs[69] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[63]), anonfield(typs[3]), anonfield(typs[1])}, []*Node{anonfield(typs[3])}) - typs[70] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[63]), anonfield(typs[3])}, []*Node{anonfield(typs[3]), anonfield(typs[11])}) - typs[71] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[63]), anonfield(typs[2])}, []*Node{anonfield(typs[3]), anonfield(typs[11])}) - typs[72] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[63]), anonfield(typs[3]), anonfield(typs[1])}, []*Node{anonfield(typs[3]), anonfield(typs[11])}) - typs[73] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[63]), anonfield(typs[3])}, nil) - typs[74] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[63]), anonfield(typs[2])}, nil) - typs[75] = functype(nil, []*Node{anonfield(typs[3])}, nil) - typs[76] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[63])}, nil) - typs[77] = types.NewChan(typs[2], types.Cboth) - typs[78] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[15])}, []*Node{anonfield(typs[77])}) - typs[79] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[32])}, []*Node{anonfield(typs[77])}) - typs[80] = types.NewChan(typs[2], types.Crecv) - typs[81] = functype(nil, []*Node{anonfield(typs[80]), anonfield(typs[3])}, nil) - typs[82] = functype(nil, []*Node{anonfield(typs[80]), anonfield(typs[3])}, []*Node{anonfield(typs[11])}) - typs[83] = types.NewChan(typs[2], types.Csend) + typs[23] = types.Types[TCOMPLEX128] + typs[24] = functype(nil, []*Node{anonfield(typs[23])}, nil) + typs[25] = types.Types[TSTRING] + typs[26] = functype(nil, []*Node{anonfield(typs[25])}, nil) + typs[27] = functype(nil, []*Node{anonfield(typs[2])}, nil) + typs[28] = types.NewArray(typs[0], 32) + typs[29] = types.NewPtr(typs[28]) + typs[30] = functype(nil, []*Node{anonfield(typs[29]), anonfield(typs[25]), anonfield(typs[25])}, []*Node{anonfield(typs[25])}) + typs[31] = functype(nil, []*Node{anonfield(typs[29]), anonfield(typs[25]), anonfield(typs[25]), anonfield(typs[25])}, []*Node{anonfield(typs[25])}) + typs[32] = functype(nil, []*Node{anonfield(typs[29]), anonfield(typs[25]), anonfield(typs[25]), anonfield(typs[25]), anonfield(typs[25])}, []*Node{anonfield(typs[25])}) + typs[33] = functype(nil, []*Node{anonfield(typs[29]), anonfield(typs[25]), anonfield(typs[25]), anonfield(typs[25]), anonfield(typs[25]), anonfield(typs[25])}, []*Node{anonfield(typs[25])}) + typs[34] = types.NewSlice(typs[25]) + typs[35] = functype(nil, []*Node{anonfield(typs[29]), anonfield(typs[34])}, []*Node{anonfield(typs[25])}) + typs[36] = functype(nil, []*Node{anonfield(typs[25]), anonfield(typs[25])}, []*Node{anonfield(typs[11])}) + typs[37] = types.NewArray(typs[0], 4) + typs[38] = types.NewPtr(typs[37]) + typs[39] = functype(nil, []*Node{anonfield(typs[38]), anonfield(typs[19])}, []*Node{anonfield(typs[25])}) + typs[40] = types.NewSlice(typs[0]) + typs[41] = functype(nil, []*Node{anonfield(typs[29]), anonfield(typs[40])}, []*Node{anonfield(typs[25])}) + typs[42] = functype(nil, []*Node{anonfield(typs[40])}, []*Node{anonfield(typs[25])}) + typs[43] = types.Runetype + typs[44] = types.NewSlice(typs[43]) + typs[45] = functype(nil, []*Node{anonfield(typs[29]), anonfield(typs[44])}, []*Node{anonfield(typs[25])}) + typs[46] = functype(nil, []*Node{anonfield(typs[29]), anonfield(typs[25])}, []*Node{anonfield(typs[40])}) + typs[47] = types.NewArray(typs[43], 32) + typs[48] = types.NewPtr(typs[47]) + typs[49] = functype(nil, []*Node{anonfield(typs[48]), anonfield(typs[25])}, []*Node{anonfield(typs[44])}) + typs[50] = types.Types[TUINTPTR] + typs[51] = functype(nil, []*Node{anonfield(typs[2]), anonfield(typs[2]), anonfield(typs[50])}, []*Node{anonfield(typs[11])}) + typs[52] = functype(nil, []*Node{anonfield(typs[2]), anonfield(typs[2])}, []*Node{anonfield(typs[11])}) + typs[53] = functype(nil, []*Node{anonfield(typs[25]), anonfield(typs[11])}, []*Node{anonfield(typs[43]), anonfield(typs[11])}) + typs[54] = functype(nil, []*Node{anonfield(typs[25])}, []*Node{anonfield(typs[11])}) + typs[55] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[2])}, []*Node{anonfield(typs[2])}) + typs[56] = types.Types[TUNSAFEPTR] + typs[57] = functype(nil, []*Node{anonfield(typs[2])}, []*Node{anonfield(typs[56])}) + typs[58] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[3])}, []*Node{anonfield(typs[2])}) + typs[59] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[2])}, []*Node{anonfield(typs[2]), anonfield(typs[15])}) + typs[60] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[1]), anonfield(typs[1])}, nil) + typs[61] = functype(nil, []*Node{anonfield(typs[1])}, nil) + typs[62] = types.NewPtr(typs[50]) + typs[63] = functype(nil, []*Node{anonfield(typs[62]), anonfield(typs[56]), anonfield(typs[56])}, []*Node{anonfield(typs[15])}) + typs[64] = types.Types[TUINT32] + typs[65] = functype(nil, nil, []*Node{anonfield(typs[64])}) + typs[66] = types.NewMap(typs[2], typs[2]) + typs[67] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[19]), anonfield(typs[3])}, []*Node{anonfield(typs[66])}) + typs[68] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[11]), anonfield(typs[3])}, []*Node{anonfield(typs[66])}) + typs[69] = functype(nil, nil, []*Node{anonfield(typs[66])}) + typs[70] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[66]), anonfield(typs[3])}, []*Node{anonfield(typs[3])}) + typs[71] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[66]), anonfield(typs[2])}, []*Node{anonfield(typs[3])}) + typs[72] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[66]), anonfield(typs[3]), anonfield(typs[1])}, []*Node{anonfield(typs[3])}) + typs[73] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[66]), anonfield(typs[3])}, []*Node{anonfield(typs[3]), anonfield(typs[15])}) + typs[74] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[66]), anonfield(typs[2])}, []*Node{anonfield(typs[3]), anonfield(typs[15])}) + typs[75] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[66]), anonfield(typs[3]), anonfield(typs[1])}, []*Node{anonfield(typs[3]), anonfield(typs[15])}) + typs[76] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[66]), anonfield(typs[3])}, nil) + typs[77] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[66]), anonfield(typs[2])}, nil) + typs[78] = functype(nil, []*Node{anonfield(typs[3])}, nil) + typs[79] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[66])}, nil) + typs[80] = types.NewChan(typs[2], types.Cboth) + typs[81] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[19])}, []*Node{anonfield(typs[80])}) + typs[82] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[11])}, []*Node{anonfield(typs[80])}) + typs[83] = types.NewChan(typs[2], types.Crecv) typs[84] = functype(nil, []*Node{anonfield(typs[83]), anonfield(typs[3])}, nil) - typs[85] = types.NewArray(typs[0], 3) - typs[86] = tostruct([]*Node{namedfield("enabled", typs[11]), namedfield("pad", typs[85]), namedfield("needed", typs[11]), namedfield("cgo", typs[11]), namedfield("alignme", typs[17])}) - typs[87] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[3]), anonfield(typs[3])}, nil) - typs[88] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[3])}, nil) - typs[89] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[2]), anonfield(typs[2])}, []*Node{anonfield(typs[32])}) - typs[90] = functype(nil, []*Node{anonfield(typs[83]), anonfield(typs[3])}, []*Node{anonfield(typs[11])}) - typs[91] = functype(nil, []*Node{anonfield(typs[3]), anonfield(typs[80])}, []*Node{anonfield(typs[11])}) - typs[92] = types.NewPtr(typs[11]) - typs[93] = functype(nil, []*Node{anonfield(typs[3]), anonfield(typs[92]), anonfield(typs[80])}, []*Node{anonfield(typs[11])}) - typs[94] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[1]), anonfield(typs[32])}, []*Node{anonfield(typs[32]), anonfield(typs[11])}) - typs[95] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[32]), anonfield(typs[32])}, []*Node{anonfield(typs[53])}) - typs[96] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[15]), anonfield(typs[15])}, []*Node{anonfield(typs[53])}) - typs[97] = types.NewSlice(typs[2]) - typs[98] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[97]), anonfield(typs[32])}, []*Node{anonfield(typs[97])}) - typs[99] = functype(nil, []*Node{anonfield(typs[3]), anonfield(typs[3]), anonfield(typs[47])}, nil) - typs[100] = functype(nil, []*Node{anonfield(typs[53]), anonfield(typs[47])}, nil) - typs[101] = functype(nil, []*Node{anonfield(typs[3]), anonfield(typs[3]), anonfield(typs[47])}, []*Node{anonfield(typs[11])}) - typs[102] = functype(nil, []*Node{anonfield(typs[3]), anonfield(typs[3])}, []*Node{anonfield(typs[11])}) - typs[103] = functype(nil, []*Node{anonfield(typs[15]), anonfield(typs[15])}, []*Node{anonfield(typs[15])}) - typs[104] = functype(nil, []*Node{anonfield(typs[17]), anonfield(typs[17])}, []*Node{anonfield(typs[17])}) - typs[105] = functype(nil, []*Node{anonfield(typs[13])}, []*Node{anonfield(typs[15])}) - typs[106] = functype(nil, []*Node{anonfield(typs[13])}, []*Node{anonfield(typs[17])}) - typs[107] = functype(nil, []*Node{anonfield(typs[13])}, []*Node{anonfield(typs[61])}) - typs[108] = functype(nil, []*Node{anonfield(typs[15])}, []*Node{anonfield(typs[13])}) - typs[109] = functype(nil, []*Node{anonfield(typs[17])}, []*Node{anonfield(typs[13])}) - typs[110] = functype(nil, []*Node{anonfield(typs[61])}, []*Node{anonfield(typs[13])}) - typs[111] = functype(nil, []*Node{anonfield(typs[19]), anonfield(typs[19])}, []*Node{anonfield(typs[19])}) - typs[112] = functype(nil, []*Node{anonfield(typs[47])}, nil) - typs[113] = functype(nil, []*Node{anonfield(typs[47]), anonfield(typs[47])}, nil) + typs[85] = functype(nil, []*Node{anonfield(typs[83]), anonfield(typs[3])}, []*Node{anonfield(typs[15])}) + typs[86] = types.NewChan(typs[2], types.Csend) + typs[87] = functype(nil, []*Node{anonfield(typs[86]), anonfield(typs[3])}, nil) + typs[88] = types.NewArray(typs[0], 3) + typs[89] = tostruct([]*Node{namedfield("enabled", typs[15]), namedfield("pad", typs[88]), namedfield("needed", typs[15]), namedfield("cgo", typs[15]), namedfield("alignme", typs[21])}) + typs[90] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[3]), anonfield(typs[3])}, nil) + typs[91] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[3])}, nil) + typs[92] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[2]), anonfield(typs[2])}, []*Node{anonfield(typs[11])}) + typs[93] = functype(nil, []*Node{anonfield(typs[86]), anonfield(typs[3])}, []*Node{anonfield(typs[15])}) + typs[94] = functype(nil, []*Node{anonfield(typs[3]), anonfield(typs[83])}, []*Node{anonfield(typs[15])}) + typs[95] = types.NewPtr(typs[15]) + typs[96] = functype(nil, []*Node{anonfield(typs[3]), anonfield(typs[95]), anonfield(typs[83])}, []*Node{anonfield(typs[15])}) + typs[97] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[1]), anonfield(typs[11])}, []*Node{anonfield(typs[11]), anonfield(typs[15])}) + typs[98] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[11]), anonfield(typs[11])}, []*Node{anonfield(typs[56])}) + typs[99] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[19]), anonfield(typs[19])}, []*Node{anonfield(typs[56])}) + typs[100] = types.NewSlice(typs[2]) + typs[101] = functype(nil, []*Node{anonfield(typs[1]), anonfield(typs[100]), anonfield(typs[11])}, []*Node{anonfield(typs[100])}) + typs[102] = functype(nil, []*Node{anonfield(typs[3]), anonfield(typs[3]), anonfield(typs[50])}, nil) + typs[103] = functype(nil, []*Node{anonfield(typs[56]), anonfield(typs[50])}, nil) + typs[104] = functype(nil, []*Node{anonfield(typs[3]), anonfield(typs[3]), anonfield(typs[50])}, []*Node{anonfield(typs[15])}) + typs[105] = functype(nil, []*Node{anonfield(typs[3]), anonfield(typs[3])}, []*Node{anonfield(typs[15])}) + typs[106] = functype(nil, []*Node{anonfield(typs[19]), anonfield(typs[19])}, []*Node{anonfield(typs[19])}) + typs[107] = functype(nil, []*Node{anonfield(typs[21]), anonfield(typs[21])}, []*Node{anonfield(typs[21])}) + typs[108] = functype(nil, []*Node{anonfield(typs[17])}, []*Node{anonfield(typs[19])}) + typs[109] = functype(nil, []*Node{anonfield(typs[17])}, []*Node{anonfield(typs[21])}) + typs[110] = functype(nil, []*Node{anonfield(typs[17])}, []*Node{anonfield(typs[64])}) + typs[111] = functype(nil, []*Node{anonfield(typs[19])}, []*Node{anonfield(typs[17])}) + typs[112] = functype(nil, []*Node{anonfield(typs[21])}, []*Node{anonfield(typs[17])}) + typs[113] = functype(nil, []*Node{anonfield(typs[64])}, []*Node{anonfield(typs[17])}) + typs[114] = functype(nil, []*Node{anonfield(typs[23]), anonfield(typs[23])}, []*Node{anonfield(typs[23])}) + typs[115] = functype(nil, []*Node{anonfield(typs[50])}, nil) + typs[116] = functype(nil, []*Node{anonfield(typs[50]), anonfield(typs[50])}, nil) return typs[:] } diff --git a/src/cmd/compile/internal/gc/builtin/runtime.go b/src/cmd/compile/internal/gc/builtin/runtime.go index 210881a6e9..a8a9b061ec 100644 --- a/src/cmd/compile/internal/gc/builtin/runtime.go +++ b/src/cmd/compile/internal/gc/builtin/runtime.go @@ -15,8 +15,6 @@ package runtime import "unsafe" func newobject(typ *byte) *any -func panicindex() -func panicslice() func panicdivide() func panicshift() func panicmakeslicelen() @@ -27,6 +25,25 @@ func gopanic(interface{}) func gorecover(*int32) interface{} func goschedguarded() +// Note: these declarations are just for wasm port. +// Other ports call assembly stubs instead. +func goPanicIndex(x int, y int) +func goPanicIndexU(x uint, y int) +func goPanicSliceAlen(x int, y int) +func goPanicSliceAlenU(x uint, y int) +func goPanicSliceAcap(x int, y int) +func goPanicSliceAcapU(x uint, y int) +func goPanicSliceB(x int, y int) +func goPanicSliceBU(x uint, y int) +func goPanicSlice3Alen(x int, y int) +func goPanicSlice3AlenU(x uint, y int) +func goPanicSlice3Acap(x int, y int) +func goPanicSlice3AcapU(x uint, y int) +func goPanicSlice3B(x int, y int) +func goPanicSlice3BU(x uint, y int) +func goPanicSlice3C(x int, y int) +func goPanicSlice3CU(x uint, y int) + func printbool(bool) func printfloat(float64) func printint(int64) diff --git a/src/cmd/compile/internal/gc/builtin_test.go b/src/cmd/compile/internal/gc/builtin_test.go index 31b078525c..57f24b2287 100644 --- a/src/cmd/compile/internal/gc/builtin_test.go +++ b/src/cmd/compile/internal/gc/builtin_test.go @@ -14,6 +14,7 @@ import ( func TestBuiltin(t *testing.T) { testenv.MustHaveGoRun(t) + t.Parallel() old, err := ioutil.ReadFile("builtin.go") if err != nil { diff --git a/src/cmd/compile/internal/gc/closure.go b/src/cmd/compile/internal/gc/closure.go index 6db0f02001..89e2a4ef00 100644 --- a/src/cmd/compile/internal/gc/closure.go +++ b/src/cmd/compile/internal/gc/closure.go @@ -73,6 +73,16 @@ func (p *noder) funcLit(expr *syntax.FuncLit) *Node { func typecheckclosure(clo *Node, top int) { xfunc := clo.Func.Closure + clo.Func.Ntype = typecheck(clo.Func.Ntype, Etype) + clo.Type = clo.Func.Ntype.Type + clo.Func.Top = top + + // Do not typecheck xfunc twice, otherwise, we will end up pushing + // xfunc to xtop multiple times, causing initLSym called twice. + // See #30709 + if xfunc.Typecheck() == 1 { + return + } for _, ln := range xfunc.Func.Cvars.Slice() { n := ln.Name.Defn @@ -95,10 +105,6 @@ func typecheckclosure(clo *Node, top int) { declare(xfunc.Func.Nname, PFUNC) xfunc = typecheck(xfunc, ctxStmt) - clo.Func.Ntype = typecheck(clo.Func.Ntype, Etype) - clo.Type = clo.Func.Ntype.Type - clo.Func.Top = top - // Type check the body now, but only if we're inside a function. // At top level (in a variable initialization: curfn==nil) we're not // ready to type check code yet; we'll check it later, because the diff --git a/src/cmd/compile/internal/gc/const.go b/src/cmd/compile/internal/gc/const.go index de7df645e6..39adba0f07 100644 --- a/src/cmd/compile/internal/gc/const.go +++ b/src/cmd/compile/internal/gc/const.go @@ -584,14 +584,6 @@ func Isconst(n *Node, ct Ctype) bool { // evconst rewrites constant expressions into OLITERAL nodes. func evconst(n *Node) { - if !n.isGoConst() { - // Avoid constant evaluation of things that aren't actually constants - // according to the spec. See issue 24760. - // The SSA backend has a more robust optimizer that will catch - // all of these weird cases (like uintptr(unsafe.Pointer(uintptr(1)))). - return - } - nl, nr := n.Left, n.Right // Pick off just the opcodes that can be constant evaluated. @@ -626,15 +618,16 @@ func evconst(n *Node) { } case OCONV: - if n.Type != nil && okforconst[n.Type.Etype] && nl.Op == OLITERAL { + if okforconst[n.Type.Etype] && nl.Op == OLITERAL { // TODO(mdempsky): There should be a convval function. setconst(n, convlit1(nl, n.Type, true, false).Val()) } - case OBYTES2STR: - // string([]byte(nil)) or string([]rune(nil)) - if nl.Op == OLITERAL && nl.Val().Ctype() == CTNIL { - setconst(n, Val{U: ""}) + case OCONVNOP: + if okforconst[n.Type.Etype] && nl.Op == OLITERAL { + // set so n.Orig gets OCONV instead of OCONVNOP + n.Op = OCONV + setconst(n, nl.Val()) } case OADDSTR: @@ -664,6 +657,60 @@ func evconst(n *Node) { } else { n.List.Set(s) } + + case OCAP, OLEN: + switch nl.Type.Etype { + case TSTRING: + if Isconst(nl, CTSTR) { + setintconst(n, int64(len(nl.Val().U.(string)))) + } + case TARRAY: + if !hascallchan(nl) { + setintconst(n, nl.Type.NumElem()) + } + } + + case OALIGNOF, OOFFSETOF, OSIZEOF: + setintconst(n, evalunsafe(n)) + + case OREAL, OIMAG: + if nl.Op == OLITERAL { + var re, im *Mpflt + switch u := nl.Val().U.(type) { + case *Mpint: + re = newMpflt() + re.SetInt(u) + // im = 0 + case *Mpflt: + re = u + // im = 0 + case *Mpcplx: + re = &u.Real + im = &u.Imag + default: + Fatalf("impossible") + } + if n.Op == OIMAG { + if im == nil { + im = newMpflt() + } + re = im + } + setconst(n, Val{re}) + } + + case OCOMPLEX: + if nl == nil || nr == nil { + // TODO(mdempsky): Remove after early OAS2FUNC rewrite CL lands. + break + } + if nl.Op == OLITERAL && nr.Op == OLITERAL { + // make it a complex literal + c := newMpcmplx() + c.Real.Set(toflt(nl.Val()).U.(*Mpflt)) + c.Imag.Set(toflt(nr.Val()).U.(*Mpflt)) + setconst(n, Val{c}) + } } } @@ -791,15 +838,13 @@ Outer: case ODIV: if y.CmpInt64(0) == 0 { yyerror("division by zero") - u.SetOverflow() - break + return Val{} } u.Quo(y) case OMOD: if y.CmpInt64(0) == 0 { yyerror("division by zero") - u.SetOverflow() - break + return Val{} } u.Rem(y) case OOR: @@ -830,13 +875,13 @@ Outer: case ODIV: if y.CmpFloat64(0) == 0 { yyerror("division by zero") - u.SetFloat64(1) - break + return Val{} } u.Quo(y) - case OMOD: - // TODO(mdempsky): Move to typecheck. - yyerror("illegal constant expression: floating-point %% operation") + case OMOD, OOR, OAND, OANDNOT, OXOR: + // TODO(mdempsky): Move to typecheck; see #31060. + yyerror("invalid operation: operator %v not defined on untyped float", op) + return Val{} default: break Outer } @@ -860,9 +905,12 @@ Outer: case ODIV: if !u.Div(y) { yyerror("complex division by zero") - u.Real.SetFloat64(1) - u.Imag.SetFloat64(0) + return Val{} } + case OMOD, OOR, OAND, OANDNOT, OXOR: + // TODO(mdempsky): Move to typecheck; see #31060. + yyerror("invalid operation: operator %v not defined on untyped complex", op) + return Val{} default: break Outer } @@ -909,19 +957,31 @@ func unaryOp(op Op, x Val, t *types.Type) Val { } case OBITNOT: - x := x.U.(*Mpint) + switch x.Ctype() { + case CTINT, CTRUNE: + x := x.U.(*Mpint) - u := new(Mpint) - u.Rune = x.Rune - if t.IsSigned() || t.IsUntyped() { - // Signed values change sign. - u.SetInt64(-1) - } else { - // Unsigned values invert their bits. - u.Set(maxintval[t.Etype]) + u := new(Mpint) + u.Rune = x.Rune + if t.IsSigned() || t.IsUntyped() { + // Signed values change sign. + u.SetInt64(-1) + } else { + // Unsigned values invert their bits. + u.Set(maxintval[t.Etype]) + } + u.Xor(x) + return Val{U: u} + + case CTFLT: + // TODO(mdempsky): Move to typecheck; see #31060. + yyerror("invalid operation: operator %v not defined on untyped float", op) + return Val{} + case CTCPLX: + // TODO(mdempsky): Move to typecheck; see #31060. + yyerror("invalid operation: operator %v not defined on untyped complex", op) + return Val{} } - u.Xor(x) - return Val{U: u} case ONOT: return Val{U: !x.U.(bool)} @@ -954,6 +1014,12 @@ func shiftOp(x Val, op Op, y Val) Val { // setconst rewrites n as an OLITERAL with value v. func setconst(n *Node, v Val) { + // If constant folding failed, mark n as broken and give up. + if v.U == nil { + n.Type = nil + return + } + // Ensure n.Orig still points to a semantically-equivalent // expression after we rewrite n into a constant. if n.Orig == n { @@ -1280,102 +1346,8 @@ func indexconst(n *Node) int64 { // // Expressions derived from nil, like string([]byte(nil)), while they // may be known at compile time, are not Go language constants. -// Only called for expressions known to evaluate to compile-time -// constants. func (n *Node) isGoConst() bool { - if n.Orig != nil { - n = n.Orig - } - - switch n.Op { - case OADD, - OAND, - OANDAND, - OANDNOT, - OBITNOT, - ODIV, - OEQ, - OGE, - OGT, - OLE, - OLSH, - OLT, - ONEG, - OMOD, - OMUL, - ONE, - ONOT, - OOR, - OOROR, - OPLUS, - ORSH, - OSUB, - OXOR, - OIOTA, - OREAL, - OIMAG: - if n.Left.isGoConst() && (n.Right == nil || n.Right.isGoConst()) { - return true - } - - case OCOMPLEX: - if n.List.Len() == 0 && n.Left.isGoConst() && n.Right.isGoConst() { - return true - } - - case OADDSTR: - for _, n1 := range n.List.Slice() { - if !n1.isGoConst() { - return false - } - } - return true - - case OCONV, OCONVNOP: - if okforconst[n.Type.Etype] && n.Left.isGoConst() { - return true - } - - case OLEN, OCAP: - l := n.Left - if l.isGoConst() { - return true - } - - // Special case: len/cap is constant when applied to array or - // pointer to array when the expression does not contain - // function calls or channel receive operations. - t := l.Type - - if t != nil && t.IsPtr() { - t = t.Elem() - } - if t != nil && t.IsArray() && !hascallchan(l) { - return true - } - - case OLITERAL: - if n.Val().Ctype() != CTNIL { - return true - } - - case ONAME: - l := asNode(n.Sym.Def) - if l != nil && l.Op == OLITERAL && n.Val().Ctype() != CTNIL { - return true - } - - case ONONAME: - if asNode(n.Sym.Def) != nil && asNode(n.Sym.Def).Op == OIOTA { - return true - } - - case OALIGNOF, OOFFSETOF, OSIZEOF: - return true - } - - //dump("nonconst", n); - return false + return n.Op == OLITERAL && n.Val().Ctype() != CTNIL } func hascallchan(n *Node) bool { diff --git a/src/cmd/compile/internal/gc/dcl.go b/src/cmd/compile/internal/gc/dcl.go index 9f25e5e15b..12875e798e 100644 --- a/src/cmd/compile/internal/gc/dcl.go +++ b/src/cmd/compile/internal/gc/dcl.go @@ -166,11 +166,12 @@ func variter(vl []*Node, t *Node, el []*Node) []*Node { return append(init, as2) } + nel := len(el) for _, v := range vl { var e *Node if doexpr { if len(el) == 0 { - yyerror("missing expression in var declaration") + yyerror("assignment mismatch: %d variables but %d values", len(vl), nel) break } e = el[0] @@ -194,7 +195,7 @@ func variter(vl []*Node, t *Node, el []*Node) []*Node { } if len(el) != 0 { - yyerror("extra expression in var declaration") + yyerror("assignment mismatch: %d variables but %d values", len(vl), nel) } return init } diff --git a/src/cmd/compile/internal/gc/dep_test.go b/src/cmd/compile/internal/gc/dep_test.go new file mode 100644 index 0000000000..7fc9be5e64 --- /dev/null +++ b/src/cmd/compile/internal/gc/dep_test.go @@ -0,0 +1,26 @@ +// 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 gc + +import ( + "internal/testenv" + "os/exec" + "strings" + "testing" +) + +func TestDeps(t *testing.T) { + testenv.MustHaveGoBuild(t) + out, err := exec.Command("go", "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/token": + t.Errorf("undesired dependency on %q", dep) + } + } +} diff --git a/src/cmd/compile/internal/gc/dump.go b/src/cmd/compile/internal/gc/dump.go index 8de90adf05..29eb1c1e48 100644 --- a/src/cmd/compile/internal/gc/dump.go +++ b/src/cmd/compile/internal/gc/dump.go @@ -16,8 +16,6 @@ import ( "os" "reflect" "regexp" - "unicode" - "unicode/utf8" ) // dump is like fdump but prints to stderr. @@ -216,7 +214,7 @@ func (p *dumper) dump(x reflect.Value, depth int) { for i, n := 0, typ.NumField(); i < n; i++ { // Exclude non-exported fields because their // values cannot be accessed via reflection. - if name := typ.Field(i).Name; isExported(name) { + if name := typ.Field(i).Name; types.IsExported(name) { if !p.fieldrx.MatchString(name) { omitted = true continue // field name not selected by filter @@ -274,11 +272,6 @@ func isZeroVal(x reflect.Value) bool { return false } -func isExported(name string) bool { - ch, _ := utf8.DecodeRuneInString(name) - return unicode.IsUpper(ch) -} - func commonPrefixLen(a, b string) (i int) { for i < len(a) && i < len(b) && a[i] == b[i] { i++ diff --git a/src/cmd/compile/internal/gc/dwinl.go b/src/cmd/compile/internal/gc/dwinl.go index ade76f40f8..27e2cbcd98 100644 --- a/src/cmd/compile/internal/gc/dwinl.go +++ b/src/cmd/compile/internal/gc/dwinl.go @@ -127,7 +127,7 @@ func assembleInlines(fnsym *obj.LSym, dwVars []*dwarf.Var) dwarf.InlCalls { DeclLine: v.DeclLine, DeclCol: v.DeclCol, } - synthesized := strings.HasPrefix(v.Name, "~r") || canonName == "_" + synthesized := strings.HasPrefix(v.Name, "~r") || canonName == "_" || strings.HasPrefix(v.Name, "~b") if idx, found := m[vp]; found { v.ChildIndex = int32(idx) v.IsInAbstract = !synthesized @@ -147,8 +147,8 @@ func assembleInlines(fnsym *obj.LSym, dwVars []*dwarf.Var) dwarf.InlCalls { // Make a second pass through the progs to compute PC ranges for // the various inlined calls. + start := int64(-1) curii := -1 - var crange *dwarf.Range var prevp *obj.Prog for p := fnsym.Func.Text; p != nil; prevp, p = p, p.Link { if prevp != nil && p.Pos == prevp.Pos { @@ -157,17 +157,17 @@ func assembleInlines(fnsym *obj.LSym, dwVars []*dwarf.Var) dwarf.InlCalls { ii := posInlIndex(p.Pos) if ii == curii { continue - } else { - // Close out the current range - endRange(crange, p) - - // Begin new range - crange = beginRange(inlcalls.Calls, p, ii, imap) - curii = ii } + // Close out the current range + if start != -1 { + addRange(inlcalls.Calls, start, p.Pc, curii, imap) + } + // Begin new range + start = p.Pc + curii = ii } - if crange != nil { - crange.End = fnsym.Size + if start != -1 { + addRange(inlcalls.Calls, start, fnsym.Size, curii, imap) } // Debugging @@ -287,26 +287,26 @@ func posInlIndex(xpos src.XPos) int { return -1 } -func endRange(crange *dwarf.Range, p *obj.Prog) { - if crange == nil { +func addRange(calls []dwarf.InlCall, start, end int64, ii int, imap map[int]int) { + if start == -1 { + panic("bad range start") + } + if end == -1 { + panic("bad range end") + } + if ii == -1 { return } - crange.End = p.Pc -} - -func beginRange(calls []dwarf.InlCall, p *obj.Prog, ii int, imap map[int]int) *dwarf.Range { - if ii == -1 { - return nil + if start == end { + return } + // Append range to correct inlined call callIdx, found := imap[ii] if !found { - Fatalf("can't find inlIndex %d in imap for prog at %d\n", ii, p.Pc) + Fatalf("can't find inlIndex %d in imap for prog at %d\n", ii, start) } call := &calls[callIdx] - - // Set up range and append to correct inlined call - call.Ranges = append(call.Ranges, dwarf.Range{Start: p.Pc, End: -1}) - return &call.Ranges[len(call.Ranges)-1] + call.Ranges = append(call.Ranges, dwarf.Range{Start: start, End: end}) } func dumpInlCall(inlcalls dwarf.InlCalls, idx, ilevel int) { diff --git a/src/cmd/compile/internal/gc/esc.go b/src/cmd/compile/internal/gc/esc.go index bd0fb82554..ded9439a14 100644 --- a/src/cmd/compile/internal/gc/esc.go +++ b/src/cmd/compile/internal/gc/esc.go @@ -11,144 +11,6 @@ import ( "strings" ) -// Run analysis on minimal sets of mutually recursive functions -// or single non-recursive functions, bottom up. -// -// Finding these sets is finding strongly connected components -// by reverse topological order in the static call graph. -// The algorithm (known as Tarjan's algorithm) for doing that is taken from -// Sedgewick, Algorithms, Second Edition, p. 482, with two adaptations. -// -// First, a hidden closure function (n.Func.IsHiddenClosure()) cannot be the -// root of a connected component. Refusing to use it as a root -// forces it into the component of the function in which it appears. -// This is more convenient for escape analysis. -// -// Second, each function becomes two virtual nodes in the graph, -// with numbers n and n+1. We record the function's node number as n -// but search from node n+1. If the search tells us that the component -// number (min) is n+1, we know that this is a trivial component: one function -// plus its closures. If the search tells us that the component number is -// n, then there was a path from node n+1 back to node n, meaning that -// the function set is mutually recursive. The escape analysis can be -// more precise when analyzing a single non-recursive function than -// when analyzing a set of mutually recursive functions. - -type bottomUpVisitor struct { - analyze func([]*Node, bool) - visitgen uint32 - nodeID map[*Node]uint32 - stack []*Node -} - -// visitBottomUp invokes analyze on the ODCLFUNC nodes listed in list. -// It calls analyze with successive groups of functions, working from -// the bottom of the call graph upward. Each time analyze is called with -// a list of functions, every function on that list only calls other functions -// on the list or functions that have been passed in previous invocations of -// analyze. Closures appear in the same list as their outer functions. -// The lists are as short as possible while preserving those requirements. -// (In a typical program, many invocations of analyze will be passed just -// a single function.) The boolean argument 'recursive' passed to analyze -// specifies whether the functions on the list are mutually recursive. -// If recursive is false, the list consists of only a single function and its closures. -// If recursive is true, the list may still contain only a single function, -// if that function is itself recursive. -func visitBottomUp(list []*Node, analyze func(list []*Node, recursive bool)) { - var v bottomUpVisitor - v.analyze = analyze - v.nodeID = make(map[*Node]uint32) - for _, n := range list { - if n.Op == ODCLFUNC && !n.Func.IsHiddenClosure() { - v.visit(n) - } - } -} - -func (v *bottomUpVisitor) visit(n *Node) uint32 { - if id := v.nodeID[n]; id > 0 { - // already visited - return id - } - - v.visitgen++ - id := v.visitgen - v.nodeID[n] = id - v.visitgen++ - min := v.visitgen - - v.stack = append(v.stack, n) - min = v.visitcodelist(n.Nbody, min) - if (min == id || min == id+1) && !n.Func.IsHiddenClosure() { - // This node is the root of a strongly connected component. - - // The original min passed to visitcodelist was v.nodeID[n]+1. - // If visitcodelist found its way back to v.nodeID[n], then this - // block is a set of mutually recursive functions. - // Otherwise it's just a lone function that does not recurse. - recursive := min == id - - // Remove connected component from stack. - // Mark walkgen so that future visits return a large number - // so as not to affect the caller's min. - - var i int - for i = len(v.stack) - 1; i >= 0; i-- { - x := v.stack[i] - if x == n { - break - } - v.nodeID[x] = ^uint32(0) - } - v.nodeID[n] = ^uint32(0) - block := v.stack[i:] - // Run escape analysis on this set of functions. - v.stack = v.stack[:i] - v.analyze(block, recursive) - } - - return min -} - -func (v *bottomUpVisitor) visitcodelist(l Nodes, min uint32) uint32 { - for _, n := range l.Slice() { - min = v.visitcode(n, min) - } - return min -} - -func (v *bottomUpVisitor) visitcode(n *Node, min uint32) uint32 { - if n == nil { - return min - } - - min = v.visitcodelist(n.Ninit, min) - min = v.visitcode(n.Left, min) - min = v.visitcode(n.Right, min) - min = v.visitcodelist(n.List, min) - min = v.visitcodelist(n.Nbody, min) - min = v.visitcodelist(n.Rlist, min) - - switch n.Op { - case OCALLFUNC, OCALLMETH: - fn := asNode(n.Left.Type.Nname()) - if fn != nil && fn.Op == ONAME && fn.Class() == PFUNC && fn.Name.Defn != nil { - m := v.visit(fn.Name.Defn) - if m < min { - min = m - } - } - - case OCLOSURE: - m := v.visit(n.Func.Closure) - if m < min { - min = m - } - } - - return min -} - // Escape analysis. // An escape analysis pass for a set of functions. The @@ -179,8 +41,19 @@ func (v *bottomUpVisitor) visitcode(n *Node, min uint32) uint32 { // not escape, then new(T) can be rewritten into a stack allocation. // The same is true of slice literals. +// If newescape is true, then escape.go drives escape analysis instead +// of esc.go. +var newescape bool + func escapes(all []*Node) { - visitBottomUp(all, escAnalyze) + visitBottomUp(all, escapeImpl()) +} + +func escapeImpl() func([]*Node, bool) { + if newescape { + return escapeFuncs + } + return escAnalyze } const ( @@ -531,13 +404,13 @@ func escAnalyze(all []*Node, recursive bool) { // for all top level functions, tag the typenodes corresponding to the param nodes for _, n := range all { if n.Op == ODCLFUNC { - e.esctag(n) + esctag(n) } } if Debug['m'] != 0 { for _, n := range e.noesc { - if n.Esc == EscNone { + if n.Esc == EscNone && n.Op != OADDR { Warnl(n.Pos, "%v %S does not escape", e.curfnSym(n), n) } } @@ -654,7 +527,7 @@ func (e *EscState) esclist(l Nodes, parent *Node) { } } -func (e *EscState) isSliceSelfAssign(dst, src *Node) bool { +func isSliceSelfAssign(dst, src *Node) bool { // Detect the following special case. // // func (b *Buffer) Foo() { @@ -704,8 +577,8 @@ func (e *EscState) isSliceSelfAssign(dst, src *Node) bool { // isSelfAssign reports whether assignment from src to dst can // be ignored by the escape analysis as it's effectively a self-assignment. -func (e *EscState) isSelfAssign(dst, src *Node) bool { - if e.isSliceSelfAssign(dst, src) { +func isSelfAssign(dst, src *Node) bool { + if isSliceSelfAssign(dst, src) { return true } @@ -727,7 +600,7 @@ func (e *EscState) isSelfAssign(dst, src *Node) bool { case ODOT, ODOTPTR: // Safe trailing accessors that are permitted to differ. case OINDEX: - if e.mayAffectMemory(dst.Right) || e.mayAffectMemory(src.Right) { + if mayAffectMemory(dst.Right) || mayAffectMemory(src.Right) { return false } default: @@ -740,7 +613,7 @@ func (e *EscState) isSelfAssign(dst, src *Node) bool { // mayAffectMemory reports whether n evaluation may affect program memory state. // If expression can't affect it, then it can be safely ignored by the escape analysis. -func (e *EscState) mayAffectMemory(n *Node) bool { +func mayAffectMemory(n *Node) bool { // We may want to use "memory safe" black list instead of general // "side-effect free", which can include all calls and other ops // that can affect allocate or change global state. @@ -754,18 +627,26 @@ func (e *EscState) mayAffectMemory(n *Node) bool { // Left+Right group. case OINDEX, OADD, OSUB, OOR, OXOR, OMUL, OLSH, ORSH, OAND, OANDNOT, ODIV, OMOD: - return e.mayAffectMemory(n.Left) || e.mayAffectMemory(n.Right) + return mayAffectMemory(n.Left) || mayAffectMemory(n.Right) // Left group. case ODOT, ODOTPTR, ODEREF, OCONVNOP, OCONV, OLEN, OCAP, ONOT, OBITNOT, OPLUS, ONEG, OALIGNOF, OOFFSETOF, OSIZEOF: - return e.mayAffectMemory(n.Left) + return mayAffectMemory(n.Left) default: return true } } +func mustHeapAlloc(n *Node) bool { + // TODO(mdempsky): Cleanup this mess. + return n.Type != nil && + (n.Type.Width > maxStackVarSize || + (n.Op == ONEW || n.Op == OPTRLIT) && n.Type.Elem().Width >= maxImplicitStackVarSize || + n.Op == OMAKESLICE && !isSmallMakeSlice(n)) +} + func (e *EscState) esc(n *Node, parent *Node) { if n == nil { return @@ -796,10 +677,7 @@ func (e *EscState) esc(n *Node, parent *Node) { // Big stuff and non-constant-sized stuff escapes unconditionally. // "Big" conditions that were scattered around in walk have been // gathered here. - if n.Esc != EscHeap && n.Type != nil && - (n.Type.Width > maxStackVarSize || - (n.Op == ONEW || n.Op == OPTRLIT) && n.Type.Elem().Width >= maxImplicitStackVarSize || - n.Op == OMAKESLICE && !isSmallMakeSlice(n)) { + if n.Esc != EscHeap && mustHeapAlloc(n) { // isSmallMakeSlice returns false for non-constant len/cap. // If that's the case, print a more accurate escape reason. var msgVerb, escapeMsg string @@ -894,7 +772,7 @@ opSwitch: case OAS, OASOP: // Filter out some no-op assignments for escape analysis. - if e.isSelfAssign(n.Left, n.Right) { + if isSelfAssign(n.Left, n.Right) { if Debug['m'] != 0 { Warnl(n.Pos, "%v ignoring self-assignment in %S", e.curfnSym(n), n) } @@ -1604,13 +1482,6 @@ func (e *EscState) esccall(call *Node, parent *Node) { } argList := call.List - if argList.Len() == 1 { - arg := argList.First() - if arg.Type.IsFuncArgStruct() { // f(g()) - argList = e.nodeEscState(arg).Retval - } - } - args := argList.Slice() if indirect { @@ -1982,10 +1853,6 @@ func (e *EscState) escwalkBody(level Level, dst *Node, src *Node, step *EscStep, src.Op == ONAME && src.Class() == PPARAM && src.Esc&EscMask < EscHeap && level.int() > 0 { src.Esc = escMax(EscContentEscapes|src.Esc, EscNone) - if Debug['m'] != 0 { - Warnl(src.Pos, "mark escaped content: %S", src) - step.describe(src) - } } leaks = level.int() <= 0 && level.guaranteedDereference() <= 0 && dstE.Loopdepth < modSrcLoopdepth @@ -2025,10 +1892,6 @@ func (e *EscState) escwalkBody(level Level, dst *Node, src *Node, step *EscStep, // Treat a captured closure variable as equivalent to the // original variable. if src.IsClosureVar() { - if leaks && Debug['m'] != 0 { - Warnl(src.Pos, "leaking closure reference %S", src) - step.describe(src) - } e.escwalk(level, dst, src.Name.Defn, e.stepWalk(dst, src.Name.Defn, "closure-var", step)) } @@ -2039,7 +1902,7 @@ func (e *EscState) escwalkBody(level Level, dst *Node, src *Node, step *EscStep, } if leaks { src.Esc = EscHeap - if Debug['m'] != 0 && osrcesc != src.Esc { + if Debug['m'] != 0 && osrcesc != src.Esc && src.Op != OADDR { p := src if p.Left.Op == OCLOSURE { p = p.Left // merely to satisfy error messages in tests @@ -2335,7 +2198,7 @@ const unsafeUintptrTag = "unsafe-uintptr" // marked go:uintptrescapes. const uintptrEscapesTag = "uintptr-escapes" -func (e *EscState) esctag(fn *Node) { +func esctag(fn *Node) { fn.Esc = EscFuncTagged name := func(s *types.Sym, narg int) string { diff --git a/src/cmd/compile/internal/gc/escape.go b/src/cmd/compile/internal/gc/escape.go new file mode 100644 index 0000000000..88dc9ef8a8 --- /dev/null +++ b/src/cmd/compile/internal/gc/escape.go @@ -0,0 +1,1386 @@ +// 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 gc + +import ( + "cmd/compile/internal/types" + "fmt" +) + +// Escape analysis. +// +// Here we analyze functions to determine which Go variables +// (including implicit allocations such as calls to "new" or "make", +// composite literals, etc.) can be allocated on the stack. The two +// key invariants we have to ensure are: (1) pointers to stack objects +// cannot be stored in the heap, and (2) pointers to a stack object +// cannot outlive that object (e.g., because the declaring function +// returned and destroyed the object's stack frame, or its space is +// reused across loop iterations for logically distinct variables). +// +// We implement this with a static data-flow analysis of the AST. +// First, we construct a directed weighted graph where vertices +// (termed "locations") represent variables allocated by statements +// and expressions, and edges represent assignments between variables +// (with weights reperesenting addressing/dereference counts). +// +// Next we walk the graph looking for assignment paths that might +// violate the invariants stated above. If a variable v's address is +// stored in the heap or elsewhere that may outlive it, then v is +// marked as requiring heap allocation. +// +// To support interprocedural analysis, we also record data-flow from +// each function's parameters to the heap and to its result +// parameters. This information is summarized as "paremeter tags", +// which are used at static call sites to improve escape analysis of +// function arguments. + +// Constructing the location graph. +// +// Every allocating statement (e.g., variable declaration) or +// expression (e.g., "new" or "make") is first mapped to a unique +// "location." +// +// We also model every Go assignment as a directed edges between +// locations. The number of derefence operations minus the number of +// addressing operations is recorded as the edge's weight (termed +// "derefs"). For example: +// +// p = &q // -1 +// p = q // 0 +// p = *q // 1 +// p = **q // 2 +// +// p = **&**&q // 2 +// +// Note that the & operator can only be applied to addressable +// expressions, and the expression &x itself is not addressable, so +// derefs cannot go below -1. +// +// Every Go language construct is lowered into this representation, +// generally without sensitivity to flow, path, or context; and +// without distinguishing elements within a compound variable. For +// example: +// +// var x struct { f, g *int } +// var u []*int +// +// x.f = u[0] +// +// is modeled simply as +// +// x = *u +// +// That is, we don't distinguish x.f from x.g, or u[0] from u[1], +// u[2], etc. However, we do record the implicit dereference involved +// in indexing a slice. + +type Escape struct { + allLocs []*EscLocation + + curfn *Node + + // loopDepth counts the current loop nesting depth within + // curfn. It increments within each "for" loop and at each + // label with a corresponding backwards "goto" (i.e., + // unstructured loop). + loopDepth int + + heapLoc EscLocation + blankLoc EscLocation +} + +// An EscLocation represents an abstract location that stores a Go +// variable. +type EscLocation struct { + n *Node // represented variable or expression, if any + curfn *Node // enclosing function + edges []EscEdge // incoming edges + loopDepth int // loopDepth at declaration + + // derefs and walkgen are used during walk to track the + // minimal dereferences from the walk root. + derefs int // >= -1 + walkgen uint32 + + // escapes reports whether the represented variable's address + // escapes; that is, whether the variable must be heap + // allocated. + escapes bool + + // transient reports whether the represented expression's + // address does not outlive the statement; that is, whether + // its storage can be immediately reused. + transient bool + + // paramEsc records the represented parameter's escape tags. + // See "Parameter tags" below for details. + paramEsc uint16 +} + +// An EscEdge represents an assignment edge between two Go variables. +type EscEdge struct { + src *EscLocation + derefs int // >= -1 +} + +// escapeFuncs performs escape analysis on a minimal batch of +// functions. +func escapeFuncs(fns []*Node, recursive bool) { + for _, fn := range fns { + if fn.Op != ODCLFUNC { + Fatalf("unexpected node: %v", fn) + } + } + + var e Escape + + // Construct data-flow graph from syntax trees. + for _, fn := range fns { + e.initFunc(fn) + } + for _, fn := range fns { + e.walkFunc(fn) + } + e.curfn = nil + + e.walkAll() + e.finish() + + // Record parameter tags for package export data. + for _, fn := range fns { + esctag(fn) + } +} + +func (e *Escape) initFunc(fn *Node) { + if fn.Op != ODCLFUNC || fn.Esc != EscFuncUnknown { + Fatalf("unexpected node: %v", fn) + } + fn.Esc = EscFuncPlanned + if Debug['m'] > 3 { + Dump("escAnalyze", fn) + } + + e.curfn = fn + e.loopDepth = 1 + + // Allocate locations for local variables. + for _, dcl := range fn.Func.Dcl { + if dcl.Op == ONAME { + loc := e.newLoc(dcl, false) + + if dcl.Class() == PPARAM && fn.Nbody.Len() == 0 && !fn.Noescape() { + loc.paramEsc = EscHeap + } + } + } +} + +func (e *Escape) walkFunc(fn *Node) { + fn.Esc = EscFuncStarted + + // Identify labels that mark the head of an unstructured loop. + inspectList(fn.Nbody, func(n *Node) bool { + switch n.Op { + case OLABEL: + n.Sym.Label = asTypesNode(&nonlooping) + + case OGOTO: + // If we visited the label before the goto, + // then this is a looping label. + if n.Sym.Label == asTypesNode(&nonlooping) { + n.Sym.Label = asTypesNode(&looping) + } + } + + return true + }) + + e.curfn = fn + e.loopDepth = 1 + e.stmts(fn.Nbody) +} + +// Below we implement the methods for walking the AST and recording +// data flow edges. Note that because a sub-expression might have +// side-effects, it's important to always visit the entire AST. +// +// For example, write either: +// +// if x { +// e.discard(n.Left) +// } else { +// e.value(k, n.Left) +// } +// +// or +// +// if x { +// k = e.discardHole() +// } +// e.value(k, n.Left) +// +// Do NOT write: +// +// // BAD: possibly loses side-effects within n.Left +// if !x { +// e.value(k, n.Left) +// } + +// stmt evaluates a single Go statement. +func (e *Escape) stmt(n *Node) { + if n == nil { + return + } + + lno := setlineno(n) + defer func() { + lineno = lno + }() + + if Debug['m'] > 2 { + fmt.Printf("%v:[%d] %v stmt: %v\n", linestr(lineno), e.loopDepth, funcSym(e.curfn), n) + } + + e.stmts(n.Ninit) + + switch n.Op { + default: + Fatalf("unexpected stmt: %v", n) + + case ODCLCONST, ODCLTYPE, OEMPTY, OFALL, OINLMARK: + // nop + + case OBREAK, OCONTINUE, OGOTO: + // TODO(mdempsky): Handle dead code? + + case OBLOCK: + e.stmts(n.List) + + case ODCL: + // Record loop depth at declaration. + if !n.Left.isBlank() { + e.dcl(n.Left) + } + + case OLABEL: + switch asNode(n.Sym.Label) { + case &nonlooping: + if Debug['m'] > 2 { + fmt.Printf("%v:%v non-looping label\n", linestr(lineno), n) + } + case &looping: + if Debug['m'] > 2 { + fmt.Printf("%v: %v looping label\n", linestr(lineno), n) + } + e.loopDepth++ + default: + Fatalf("label missing tag") + } + n.Sym.Label = nil + + case OIF: + e.discard(n.Left) + e.stmts(n.Nbody) + e.stmts(n.Rlist) + + case OFOR, OFORUNTIL: + e.loopDepth++ + e.discard(n.Left) + e.stmt(n.Right) + e.stmts(n.Nbody) + e.loopDepth-- + + case ORANGE: + // for List = range Right { Nbody } + + // Right is evaluated outside the loop. + tv := e.newLoc(n, false) + e.expr(tv.asHole(), n.Right) + + e.loopDepth++ + ks := e.addrs(n.List) + if len(ks) >= 2 { + if n.Right.Type.IsArray() { + e.flow(ks[1].note(n, "range"), tv) + } else { + e.flow(ks[1].deref(n, "range-deref"), tv) + } + } + + e.stmts(n.Nbody) + e.loopDepth-- + + case OSWITCH: + var tv *EscLocation + if n.Left != nil { + if n.Left.Op == OTYPESW { + k := e.discardHole() + if n.Left.Left != nil { + tv = e.newLoc(n.Left, false) + k = tv.asHole() + } + e.expr(k, n.Left.Right) + } else { + e.discard(n.Left) + } + } + + for _, cas := range n.List.Slice() { // cases + if tv != nil { + // type switch variables have no ODCL. + cv := cas.Rlist.First() + k := e.dcl(cv) + if types.Haspointers(cv.Type) { + e.flow(k.dotType(cv.Type, n, "switch case"), tv) + } + } + + e.discards(cas.List) + e.stmts(cas.Nbody) + } + + case OSELECT: + for _, cas := range n.List.Slice() { + e.stmt(cas.Left) + e.stmts(cas.Nbody) + } + case OSELRECV: + e.assign(n.Left, n.Right, "selrecv", n) + case OSELRECV2: + e.assign(n.Left, n.Right, "selrecv", n) + e.assign(n.List.First(), nil, "selrecv", n) + case ORECV: + // TODO(mdempsky): Consider e.discard(n.Left). + e.exprSkipInit(e.discardHole(), n) // already visited n.Ninit + case OSEND: + e.discard(n.Left) + e.assignHeap(n.Right, "send", n) + + case OAS, OASOP: + e.assign(n.Left, n.Right, "assign", n) + + case OAS2: + for i, nl := range n.List.Slice() { + e.assign(nl, n.Rlist.Index(i), "assign-pair", n) + } + + case OAS2DOTTYPE: // v, ok = x.(type) + e.assign(n.List.First(), n.Rlist.First(), "assign-pair-dot-type", n) + e.assign(n.List.Second(), nil, "assign-pair-dot-type", n) + case OAS2MAPR: // v, ok = m[k] + e.assign(n.List.First(), n.Rlist.First(), "assign-pair-mapr", n) + e.assign(n.List.Second(), nil, "assign-pair-mapr", n) + case OAS2RECV: // v, ok = <-ch + e.assign(n.List.First(), n.Rlist.First(), "assign-pair-receive", n) + e.assign(n.List.Second(), nil, "assign-pair-receive", n) + + case OAS2FUNC: + e.stmts(n.Rlist.First().Ninit) + e.call(e.addrs(n.List), n.Rlist.First(), nil) + case ORETURN: + results := e.curfn.Type.Results().FieldSlice() + for i, v := range n.List.Slice() { + e.assign(asNode(results[i].Nname), v, "return", n) + } + case OCALLFUNC, OCALLMETH, OCALLINTER, OCLOSE, OCOPY, ODELETE, OPANIC, OPRINT, OPRINTN, ORECOVER: + e.call(nil, n, nil) + case OGO, ODEFER: + e.stmts(n.Left.Ninit) + e.call(nil, n.Left, n) + + case ORETJMP: + // TODO(mdempsky): What do? esc.go just ignores it. + } +} + +func (e *Escape) stmts(l Nodes) { + // TODO(mdempsky): Preserve and restore e.loopDepth? See also #22438. + for _, n := range l.Slice() { + e.stmt(n) + } +} + +// expr models evaluating an expression n and flowing the result into +// hole k. +func (e *Escape) expr(k EscHole, n *Node) { + if n == nil { + return + } + e.stmts(n.Ninit) + e.exprSkipInit(k, n) +} + +func (e *Escape) exprSkipInit(k EscHole, n *Node) { + if n == nil { + return + } + + lno := setlineno(n) + defer func() { + lineno = lno + }() + + if k.derefs >= 0 && !types.Haspointers(n.Type) { + k = e.discardHole() + } + + switch n.Op { + default: + Fatalf("unexpected expr: %v", n) + + case OLITERAL, OGETG, OCLOSUREVAR, OTYPE: + // nop + + case ONAME: + if n.Class() == PFUNC || n.Class() == PEXTERN { + return + } + e.flow(k, e.oldLoc(n)) + + case OPLUS, ONEG, OBITNOT, ONOT: + e.discard(n.Left) + case OADD, OSUB, OOR, OXOR, OMUL, ODIV, OMOD, OLSH, ORSH, OAND, OANDNOT, OEQ, ONE, OLT, OLE, OGT, OGE, OANDAND, OOROR: + e.discard(n.Left) + e.discard(n.Right) + + case OADDR: + e.expr(k.addr(n, "address-of"), n.Left) // "address-of" + case ODEREF: + e.expr(k.deref(n, "indirection"), n.Left) // "indirection" + case ODOT, ODOTMETH, ODOTINTER: + e.expr(k.note(n, "dot"), n.Left) + case ODOTPTR: + e.expr(k.deref(n, "dot of pointer"), n.Left) // "dot of pointer" + case ODOTTYPE, ODOTTYPE2: + e.expr(k.dotType(n.Type, n, "dot"), n.Left) + case OINDEX: + if n.Left.Type.IsArray() { + e.expr(k.note(n, "fixed-array-index-of"), n.Left) + } else { + // TODO(mdempsky): Fix why reason text. + e.expr(k.deref(n, "dot of pointer"), n.Left) + } + e.discard(n.Right) + case OINDEXMAP: + e.discard(n.Left) + e.discard(n.Right) + case OSLICE, OSLICEARR, OSLICE3, OSLICE3ARR, OSLICESTR: + e.expr(k.note(n, "slice"), n.Left) + low, high, max := n.SliceBounds() + e.discard(low) + e.discard(high) + e.discard(max) + + case OCONV, OCONVNOP: + if n.Type.Etype == TUNSAFEPTR && n.Left.Type.Etype == TUINTPTR { + e.unsafeValue(k, n.Left) + } else { + e.expr(k, n.Left) + } + case OCONVIFACE: + if !n.Left.Type.IsInterface() && !isdirectiface(n.Left.Type) { + k = e.spill(k, n) + } else { + // esc.go prints "escapes to heap" / "does not + // escape" messages for OCONVIFACE even when + // they don't allocate. Match that behavior + // because it's easy. + // TODO(mdempsky): Remove and cleanup test expectations. + _ = e.spill(k, n) + } + e.expr(k.note(n, "interface-converted"), n.Left) + + case ORECV: + e.discard(n.Left) + + case OCALLMETH, OCALLFUNC, OCALLINTER, OLEN, OCAP, OCOMPLEX, OREAL, OIMAG, OAPPEND, OCOPY: + e.call([]EscHole{k}, n, nil) + + case ONEW: + e.spill(k, n) + + case OMAKESLICE: + e.spill(k, n) + e.discard(n.Left) + e.discard(n.Right) + case OMAKECHAN: + e.discard(n.Left) + case OMAKEMAP: + e.spill(k, n) + e.discard(n.Left) + + case ORECOVER: + // nop + + case OCALLPART: + e.spill(k, n) + + // esc.go says "Contents make it to memory, lose + // track." I think we can just flow n.Left to our + // spilled location though. + // TODO(mdempsky): Try that. + e.assignHeap(n.Left, "call part", n) + + case OPTRLIT: + e.expr(e.spill(k, n), n.Left) + + case OARRAYLIT: + for _, elt := range n.List.Slice() { + if elt.Op == OKEY { + elt = elt.Right + } + e.expr(k.note(n, "array literal element"), elt) + } + + case OSLICELIT: + k = e.spill(k, n) + + for _, elt := range n.List.Slice() { + if elt.Op == OKEY { + elt = elt.Right + } + e.expr(k.note(n, "slice-literal-element"), elt) + } + + case OSTRUCTLIT: + for _, elt := range n.List.Slice() { + e.expr(k.note(n, "struct literal element"), elt.Left) + } + + case OMAPLIT: + e.spill(k, n) + + // Map keys and values are always stored in the heap. + for _, elt := range n.List.Slice() { + e.assignHeap(elt.Left, "map literal key", n) + e.assignHeap(elt.Right, "map literal value", n) + } + + case OCLOSURE: + k = e.spill(k, n) + + // Link addresses of captured variables to closure. + for _, v := range n.Func.Closure.Func.Cvars.Slice() { + if v.Op == OXXX { // unnamed out argument; see dcl.go:/^funcargs + continue + } + + k := k + if !v.Name.Byval() { + k = k.addr(v, "reference") + } + + e.expr(k.note(n, "captured by a closure"), v.Name.Defn) + } + + case ORUNES2STR, OBYTES2STR, OSTR2RUNES, OSTR2BYTES, ORUNESTR: + e.spill(k, n) + e.discard(n.Left) + + case OADDSTR: + e.spill(k, n) + + // Arguments of OADDSTR never escape; + // runtime.concatstrings makes sure of that. + e.discards(n.List) + } +} + +// unsafeValue evaluates a uintptr-typed arithmetic expression looking +// for conversions from an unsafe.Pointer. +func (e *Escape) unsafeValue(k EscHole, n *Node) { + if n.Type.Etype != TUINTPTR { + Fatalf("unexpected type %v for %v", n.Type, n) + } + + e.stmts(n.Ninit) + + switch n.Op { + case OCONV, OCONVNOP: + if n.Left.Type.Etype == TUNSAFEPTR { + e.expr(k, n.Left) + } else { + e.discard(n.Left) + } + case ODOTPTR: + if isReflectHeaderDataField(n) { + e.expr(k.deref(n, "reflect.Header.Data"), n.Left) + } else { + e.discard(n.Left) + } + case OPLUS, ONEG, OBITNOT: + e.unsafeValue(k, n.Left) + case OADD, OSUB, OOR, OXOR, OMUL, ODIV, OMOD, OLSH, ORSH, OAND, OANDNOT: + e.unsafeValue(k, n.Left) + e.unsafeValue(k, n.Right) + default: + e.exprSkipInit(e.discardHole(), n) + } +} + +// discard evaluates an expression n for side-effects, but discards +// its value. +func (e *Escape) discard(n *Node) { + e.expr(e.discardHole(), n) +} + +func (e *Escape) discards(l Nodes) { + for _, n := range l.Slice() { + e.discard(n) + } +} + +// addr evaluates an addressable expression n and returns an EscHole +// that represents storing into the represented location. +func (e *Escape) addr(n *Node) EscHole { + if n == nil || n.isBlank() { + // Can happen at least in OSELRECV. + // TODO(mdempsky): Anywhere else? + return e.discardHole() + } + + k := e.heapHole() + + switch n.Op { + default: + Fatalf("unexpected addr: %v", n) + case ONAME: + if n.Class() == PEXTERN { + break + } + k = e.oldLoc(n).asHole() + case ODOT: + k = e.addr(n.Left) + case OINDEX: + e.discard(n.Right) + if n.Left.Type.IsArray() { + k = e.addr(n.Left) + } else { + e.discard(n.Left) + } + case ODEREF, ODOTPTR: + e.discard(n) + case OINDEXMAP: + e.discard(n.Left) + e.assignHeap(n.Right, "key of map put", n) + } + + if !types.Haspointers(n.Type) { + k = e.discardHole() + } + + return k +} + +func (e *Escape) addrs(l Nodes) []EscHole { + var ks []EscHole + for _, n := range l.Slice() { + ks = append(ks, e.addr(n)) + } + return ks +} + +// assign evaluates the assignment dst = src. +func (e *Escape) assign(dst, src *Node, why string, where *Node) { + // Filter out some no-op assignments for escape analysis. + ignore := dst != nil && src != nil && isSelfAssign(dst, src) + if ignore && Debug['m'] != 0 { + Warnl(where.Pos, "%v ignoring self-assignment in %S", funcSym(e.curfn), where) + } + + k := e.addr(dst) + if dst != nil && dst.Op == ODOTPTR && isReflectHeaderDataField(dst) { + e.unsafeValue(e.heapHole(), src) + } else { + if ignore { + k = e.discardHole() + } + e.expr(k, src) + } +} + +func (e *Escape) assignHeap(src *Node, why string, where *Node) { + e.expr(e.heapHole().note(where, why), src) +} + +// call evaluates a call expressions, including builtin calls. ks +// should contain the holes representing where the function callee's +// results flows; where is the OGO/ODEFER context of the call, if any. +func (e *Escape) call(ks []EscHole, call, where *Node) { + // First, pick out the function callee, its type, and receiver + // (if any) and normal arguments list. + var fn, recv *Node + var fntype *types.Type + args := call.List.Slice() + switch call.Op { + case OCALLFUNC: + fn = call.Left + if fn.Op == OCLOSURE { + fn = fn.Func.Closure.Func.Nname + } + fntype = fn.Type + case OCALLMETH: + fn = asNode(call.Left.Type.FuncType().Nname) + fntype = fn.Type + recv = call.Left.Left + case OCALLINTER: + fntype = call.Left.Type + recv = call.Left.Left + case OAPPEND, ODELETE, OPRINT, OPRINTN, ORECOVER: + // ok + case OLEN, OCAP, OREAL, OIMAG, OCLOSE, OPANIC: + args = []*Node{call.Left} + case OCOMPLEX, OCOPY: + args = []*Node{call.Left, call.Right} + default: + Fatalf("unexpected call op: %v", call.Op) + } + + static := fn != nil && fn.Op == ONAME && fn.Class() == PFUNC + + // Setup evaluation holes for each receiver/argument. + var recvK EscHole + var paramKs []EscHole + + if static && fn.Name.Defn != nil && fn.Name.Defn.Esc < EscFuncTagged { + // Static call to function in same mutually recursive + // group; incorporate into data flow graph. + + if fn.Name.Defn.Esc == EscFuncUnknown { + Fatalf("graph inconsistency") + } + + if ks != nil { + for i, result := range fntype.Results().FieldSlice() { + e.expr(ks[i], asNode(result.Nname)) + } + } + + if r := fntype.Recv(); r != nil { + recvK = e.addr(asNode(r.Nname)) + } + for _, param := range fntype.Params().FieldSlice() { + paramKs = append(paramKs, e.addr(asNode(param.Nname))) + } + } else if call.Op == OCALLFUNC || call.Op == OCALLMETH || call.Op == OCALLINTER { + // Dynamic call, or call to previously tagged + // function. Setup flows to heap and/or ks according + // to parameter tags. + if r := fntype.Recv(); r != nil { + recvK = e.tagHole(ks, r, static) + } + for _, param := range fntype.Params().FieldSlice() { + paramKs = append(paramKs, e.tagHole(ks, param, static)) + } + } else { + // Handle escape analysis for builtins. + // By default, we just discard everything. + for range args { + paramKs = append(paramKs, e.discardHole()) + } + + switch call.Op { + case OAPPEND: + // Appendee slice may flow directly to the + // result, if it has enough capacity. + // Alternatively, a new heap slice might be + // allocated, and all slice elements might + // flow to heap. + paramKs[0] = e.teeHole(paramKs[0], ks[0]) + if types.Haspointers(args[0].Type.Elem()) { + paramKs[0] = e.teeHole(paramKs[0], e.heapHole().deref(call, "appendee slice")) + } + + if call.IsDDD() { + if args[1].Type.IsSlice() && types.Haspointers(args[1].Type.Elem()) { + paramKs[1] = e.teeHole(paramKs[1], e.heapHole().deref(call, "appended slice...")) + } + } else { + for i := 1; i < len(args); i++ { + paramKs[i] = e.heapHole() + } + } + + case OCOPY: + if call.Right.Type.IsSlice() && types.Haspointers(call.Right.Type.Elem()) { + paramKs[1] = e.teeHole(paramKs[1], e.heapHole().deref(call, "copied slice")) + } + + case OPANIC: + paramKs[0] = e.heapHole() + } + } + + if call.Op == OCALLFUNC { + // Evaluate callee function expression. + e.expr(e.augmentParamHole(e.discardHole(), where), call.Left) + } + + if recv != nil { + // TODO(mdempsky): Handle go:uintptrescapes here too? + e.expr(e.augmentParamHole(recvK, where), recv) + } + + // Apply augmentParamHole before ODDDARG so that it affects + // the implicit slice allocation for variadic calls, if any. + for i, paramK := range paramKs { + paramKs[i] = e.augmentParamHole(paramK, where) + } + + // TODO(mdempsky): Remove after early ddd-ification. + if fntype != nil && fntype.IsVariadic() && !call.IsDDD() { + vi := fntype.NumParams() - 1 + + elt := fntype.Params().Field(vi).Type.Elem() + nva := call.List.Len() + nva -= vi + + // Introduce ODDDARG node to represent ... allocation. + ddd := nodl(call.Pos, ODDDARG, nil, nil) + ddd.Type = types.NewPtr(types.NewArray(elt, int64(nva))) + call.Right = ddd + + dddK := e.spill(paramKs[vi], ddd) + paramKs = paramKs[:vi] + for i := 0; i < nva; i++ { + paramKs = append(paramKs, dddK) + } + } + + for i, arg := range args { + // For arguments to go:uintptrescapes, peel + // away an unsafe.Pointer->uintptr conversion, + // if present. + if static && arg.Op == OCONVNOP && arg.Type.Etype == TUINTPTR && arg.Left.Type.Etype == TUNSAFEPTR { + x := i + if fntype.IsVariadic() && x >= fntype.NumParams() { + x = fntype.NumParams() - 1 + } + if fntype.Params().Field(x).Note == uintptrEscapesTag { + arg = arg.Left + } + } + + // no augmentParamHole here; handled in loop before ODDDARG + e.expr(paramKs[i], arg) + } +} + +// augmentParamHole augments parameter holes as necessary for use in +// go/defer statements. +func (e *Escape) augmentParamHole(k EscHole, where *Node) EscHole { + if where == nil { + return k + } + + // Top level defers arguments don't escape to heap, but they + // do need to last until end of function. Tee with a + // non-transient location to avoid arguments from being + // transiently allocated. + if where.Op == ODEFER && e.loopDepth == 1 { + // TODO(mdempsky): Eliminate redundant EscLocation allocs. + return e.teeHole(k, e.newLoc(nil, false).asHole()) + } + + return e.heapHole() +} + +// tagHole returns a hole for evaluating an argument passed to param. +// ks should contain the holes representing where the function +// callee's results flows; static indicates whether this is a static +// call. +func (e *Escape) tagHole(ks []EscHole, param *types.Field, static bool) EscHole { + // If this is a dynamic call, we can't rely on param.Note. + if !static { + return e.heapHole() + } + + esc := parsetag(param.Note) + switch esc { + case EscHeap, EscUnknown: + return e.heapHole() + } + + var tagKs []EscHole + if esc&EscContentEscapes != 0 { + tagKs = append(tagKs, e.heapHole().shift(1)) + } + + if ks != nil { + for i := 0; i < numEscReturns; i++ { + if x := getEscReturn(esc, i); x >= 0 { + tagKs = append(tagKs, ks[i].shift(x)) + } + } + } + + return e.teeHole(tagKs...) +} + +// An EscHole represents a context for evaluation a Go +// expression. E.g., when evaluating p in "x = **p", we'd have a hole +// with dst==x and derefs==2. +type EscHole struct { + dst *EscLocation + derefs int // >= -1 +} + +func (k EscHole) note(where *Node, why string) EscHole { + // TODO(mdempsky): Keep a record of where/why for diagnostics. + return k +} + +func (k EscHole) shift(delta int) EscHole { + k.derefs += delta + if k.derefs < -1 { + Fatalf("derefs underflow: %v", k.derefs) + } + return k +} + +func (k EscHole) deref(where *Node, why string) EscHole { return k.shift(1).note(where, why) } +func (k EscHole) addr(where *Node, why string) EscHole { return k.shift(-1).note(where, why) } + +func (k EscHole) dotType(t *types.Type, where *Node, why string) EscHole { + if !t.IsInterface() && !isdirectiface(t) { + k = k.shift(1) + } + return k.note(where, why) +} + +// teeHole returns a new hole that flows into each hole of ks, +// similar to the Unix tee(1) command. +func (e *Escape) teeHole(ks ...EscHole) EscHole { + if len(ks) == 0 { + return e.discardHole() + } + if len(ks) == 1 { + return ks[0] + } + // TODO(mdempsky): Optimize if there's only one non-discard hole? + + // Given holes "l1 = _", "l2 = **_", "l3 = *_", ..., create a + // new temporary location ltmp, wire it into place, and return + // a hole for "ltmp = _". + loc := e.newLoc(nil, true) + for _, k := range ks { + // N.B., "p = &q" and "p = &tmp; tmp = q" are not + // semantically equivalent. To combine holes like "l1 + // = _" and "l2 = &_", we'd need to wire them as "l1 = + // *ltmp" and "l2 = ltmp" and return "ltmp = &_" + // instead. + if k.derefs < 0 { + Fatalf("teeHole: negative derefs") + } + + e.flow(k, loc) + } + return loc.asHole() +} + +func (e *Escape) dcl(n *Node) EscHole { + loc := e.oldLoc(n) + loc.loopDepth = e.loopDepth + return loc.asHole() +} + +func (e *Escape) spill(k EscHole, n *Node) EscHole { + // TODO(mdempsky): Optimize. E.g., if k is the heap or blank, + // then we already know whether n leaks, and we can return a + // more optimized hole. + loc := e.newLoc(n, true) + e.flow(k.addr(n, "spill"), loc) + return loc.asHole() +} + +// canonicalNode returns the canonical *Node that n logically +// represents. +func canonicalNode(n *Node) *Node { + if n != nil && n.IsClosureVar() { + n = n.Name.Defn + if n.IsClosureVar() { + Fatalf("still closure var") + } + } + + return n +} + +func (e *Escape) newLoc(n *Node, transient bool) *EscLocation { + if e.curfn == nil { + Fatalf("e.curfn isn't set") + } + + n = canonicalNode(n) + loc := &EscLocation{ + n: n, + curfn: e.curfn, + loopDepth: e.loopDepth, + transient: transient, + } + e.allLocs = append(e.allLocs, loc) + if n != nil { + if n.Op == ONAME && n.Name.Curfn != e.curfn { + Fatalf("curfn mismatch: %v != %v", n.Name.Curfn, e.curfn) + } + + if n.HasOpt() { + Fatalf("%v already has a location", n) + } + n.SetOpt(loc) + + // TODO(mdempsky): Perhaps set n.Esc and then just return &HeapLoc? + if mustHeapAlloc(n) && !loc.isName(PPARAM) && !loc.isName(PPARAMOUT) { + e.flow(e.heapHole().addr(nil, ""), loc) + } + } + return loc +} + +func (e *Escape) oldLoc(n *Node) *EscLocation { + n = canonicalNode(n) + return n.Opt().(*EscLocation) +} + +func (l *EscLocation) asHole() EscHole { + return EscHole{dst: l} +} + +func (e *Escape) flow(k EscHole, src *EscLocation) { + dst := k.dst + if dst == &e.blankLoc { + return + } + if dst == src && k.derefs >= 0 { + return + } + // TODO(mdempsky): More optimizations? + + // TODO(mdempsky): Deduplicate edges? + dst.edges = append(dst.edges, EscEdge{src: src, derefs: k.derefs}) +} + +func (e *Escape) heapHole() EscHole { return e.heapLoc.asHole() } +func (e *Escape) discardHole() EscHole { return e.blankLoc.asHole() } + +// walkAll computes the minimal dereferences between all pairs of +// locations. +func (e *Escape) walkAll() { + var walkgen uint32 + + for _, loc := range e.allLocs { + walkgen++ + e.walkOne(loc, walkgen) + } + + // Walk the heap last so that we catch any edges to the heap + // added during walkOne. + walkgen++ + e.walkOne(&e.heapLoc, walkgen) +} + +// walkOne computes the minimal number of dereferences from root to +// all other locations. +func (e *Escape) walkOne(root *EscLocation, walkgen uint32) { + // The data flow graph has negative edges (from addressing + // operations), so we use the Bellman-Ford algorithm. However, + // we don't have to worry about infinite negative cycles since + // we bound intermediate dereference counts to 0. + root.walkgen = walkgen + root.derefs = 0 + + todo := []*EscLocation{root} + for len(todo) > 0 { + l := todo[len(todo)-1] + todo = todo[:len(todo)-1] + + base := l.derefs + + // If l.derefs < 0, then l's address flows to root. + addressOf := base < 0 + if addressOf { + // For a flow path like "root = &l; l = x", + // l's address flows to root, but x's does + // not. We recognize this by lower bounding + // base at 0. + base = 0 + + // If l's address flows to a non-transient + // location, then l can't be transiently + // allocated. + if !root.transient { + l.transient = false + // TODO(mdempsky): Should we re-walk from l now? + } + } + + if e.outlives(root, l) { + // If l's address flows somewhere that + // outlives it, then l needs to be heap + // allocated. + if addressOf && !l.escapes { + l.escapes = true + + // If l is heap allocated, then any + // values stored into it flow to the + // heap too. + // TODO(mdempsky): Better way to handle this? + if root != &e.heapLoc { + e.flow(e.heapHole(), l) + } + } + + // l's value flows to root. If l is a function + // parameter and root is the heap or a + // corresponding result parameter, then record + // that value flow for tagging the function + // later. + if l.isName(PPARAM) { + l.leakTo(root, base) + } + } + + for _, edge := range l.edges { + derefs := base + edge.derefs + if edge.src.walkgen != walkgen || edge.src.derefs > derefs { + edge.src.walkgen = walkgen + edge.src.derefs = derefs + todo = append(todo, edge.src) + } + } + } +} + +// outlives reports whether values stored in l may survive beyond +// other's lifetime if stack allocated. +func (e *Escape) outlives(l, other *EscLocation) bool { + // The heap outlives everything. + if l == &e.heapLoc { + return true + } + + // We don't know what callers do with returned values, so + // pessimistically we need to assume they flow to the heap and + // outlive everything too. + if l.isName(PPARAMOUT) { + // Exception: Directly called closures can return + // locations allocated outside of them without forcing + // them to the heap. For example: + // + // var u int // okay to stack allocate + // *(func() *int { return &u }()) = 42 + if containsClosure(other.curfn, l.curfn) && l.curfn.Func.Closure.Func.Top&ctxCallee != 0 { + return false + } + + return true + } + + // If l and other are within the same function, then l + // outlives other if it was declared outside other's loop + // scope. For example: + // + // var l *int + // for { + // l = new(int) + // } + if l.curfn == other.curfn && l.loopDepth < other.loopDepth { + return true + } + + // If other is declared within a child closure of where l is + // declared, then l outlives it. For example: + // + // var l *int + // func() { + // l = new(int) + // } + if containsClosure(l.curfn, other.curfn) { + return true + } + + return false +} + +// containsClosure reports whether c is a closure contained within f. +func containsClosure(f, c *Node) bool { + if f.Op != ODCLFUNC || c.Op != ODCLFUNC { + Fatalf("bad containsClosure: %v, %v", f, c) + } + + // Common case. + if f == c { + return false + } + + // Closures within function Foo are named like "Foo.funcN..." + // TODO(mdempsky): Better way to recognize this. + fn := f.Func.Nname.Sym.Name + cn := c.Func.Nname.Sym.Name + return len(cn) > len(fn) && cn[:len(fn)] == fn && cn[len(fn)] == '.' +} + +// leak records that parameter l leaks to sink. +func (l *EscLocation) leakTo(sink *EscLocation, derefs int) { + // Short circuit if l already leaks to heap. + if l.paramEsc == EscHeap { + return + } + + // If sink is a result parameter and we can fit return bits + // into the escape analysis tag, then record a return leak. + if sink.isName(PPARAMOUT) && sink.curfn == l.curfn { + // TODO(mdempsky): Eliminate dependency on Vargen here. + ri := int(sink.n.Name.Vargen) - 1 + if ri < numEscReturns { + // Leak to result parameter. + if old := getEscReturn(l.paramEsc, ri); old < 0 || derefs < old { + l.paramEsc = setEscReturn(l.paramEsc, ri, derefs) + } + return + } + } + + // Otherwise, record as heap leak. + if derefs > 0 { + l.paramEsc |= EscContentEscapes + } else { + l.paramEsc = EscHeap + } +} + +func (e *Escape) finish() { + for _, loc := range e.allLocs { + n := loc.n + if n == nil { + continue + } + n.SetOpt(nil) + + // Update n.Esc based on escape analysis results. + // + // TODO(mdempsky): Simplify once compatibility with + // esc.go is no longer necessary. + // + // TODO(mdempsky): Describe path when Debug['m'] >= 2. + + if loc.escapes { + if Debug['m'] != 0 && n.Op != ONAME { + Warnl(n.Pos, "%S escapes to heap", n) + } + n.Esc = EscHeap + addrescapes(n) + } else if loc.isName(PPARAM) { + n.Esc = finalizeEsc(loc.paramEsc) + + if Debug['m'] != 0 && types.Haspointers(n.Type) { + if n.Esc == EscNone { + Warnl(n.Pos, "%S %S does not escape", funcSym(loc.curfn), n) + } else if n.Esc == EscHeap { + Warnl(n.Pos, "leaking param: %S", n) + } else { + if n.Esc&EscContentEscapes != 0 { + Warnl(n.Pos, "leaking param content: %S", n) + } + for i := 0; i < numEscReturns; i++ { + if x := getEscReturn(n.Esc, i); x >= 0 { + res := n.Name.Curfn.Type.Results().Field(i).Sym + Warnl(n.Pos, "leaking param: %S to result %v level=%d", n, res, x) + } + } + } + } + } else { + n.Esc = EscNone + if loc.transient { + switch n.Op { + case OCALLPART, OCLOSURE, ODDDARG, OARRAYLIT, OSLICELIT, OPTRLIT, OSTRUCTLIT: + n.SetNoescape(true) + } + } + + if Debug['m'] != 0 && n.Op != ONAME && n.Op != OTYPESW && n.Op != ORANGE && n.Op != ODEFER { + Warnl(n.Pos, "%S %S does not escape", funcSym(loc.curfn), n) + } + } + } +} + +func (l *EscLocation) isName(c Class) bool { + return l.n != nil && l.n.Op == ONAME && l.n.Class() == c +} + +func finalizeEsc(esc uint16) uint16 { + esc = optimizeReturns(esc) + + if esc>>EscReturnBits != 0 { + esc |= EscReturn + } else if esc&EscMask == 0 { + esc |= EscNone + } + + return esc +} + +func optimizeReturns(esc uint16) uint16 { + if esc&EscContentEscapes != 0 { + // EscContentEscapes represents a path of length 1 + // from the heap. No point in keeping paths of equal + // or longer length to result parameters. + for i := 0; i < numEscReturns; i++ { + if x := getEscReturn(esc, i); x >= 1 { + esc = setEscReturn(esc, i, -1) + } + } + } + return esc +} + +// Parameter tags. +// +// The escape bits saved for each analyzed parameter record the +// minimal derefs (if any) from that parameter to the heap, or to any +// of its function's (first numEscReturns) result parameters. +// +// Paths to the heap are encoded via EscHeap (length 0) or +// EscContentEscapes (length 1); if neither of these are set, then +// there's no path to the heap. +// +// Paths to the result parameters are encoded in the upper +// bits. +// +// There are other values stored in the escape bits by esc.go for +// vestigial reasons, and other special tag values used (e.g., +// uintptrEscapesTag and unsafeUintptrTag). These could be simplified +// once compatibility with esc.go is no longer a concern. + +const numEscReturns = (16 - EscReturnBits) / bitsPerOutputInTag + +func getEscReturn(esc uint16, i int) int { + return int((esc>>escReturnShift(i))&bitsMaskForTag) - 1 +} + +func setEscReturn(esc uint16, i, v int) uint16 { + if v < -1 { + Fatalf("invalid esc return value: %v", v) + } + if v > maxEncodedLevel { + v = maxEncodedLevel + } + + shift := escReturnShift(i) + esc &^= bitsMaskForTag << shift + esc |= uint16(v+1) << shift + return esc +} + +func escReturnShift(i int) uint { + if uint(i) >= numEscReturns { + Fatalf("esc return index out of bounds: %v", i) + } + return uint(EscReturnBits + i*bitsPerOutputInTag) +} diff --git a/src/cmd/compile/internal/gc/fmt.go b/src/cmd/compile/internal/gc/fmt.go index fc1af603a2..72b1e35b6a 100644 --- a/src/cmd/compile/internal/gc/fmt.go +++ b/src/cmd/compile/internal/gc/fmt.go @@ -752,7 +752,11 @@ func typefmt(t *types.Type, flag FmtFlag, mode fmtMode, depth int) string { case types.IsExported(f.Sym.Name): buf = append(buf, sconv(f.Sym, FmtShort, mode)...) default: - buf = append(buf, sconv(f.Sym, FmtUnsigned, mode)...) + flag1 := FmtLeft + if flag&FmtUnsigned != 0 { + flag1 = FmtUnsigned + } + buf = append(buf, sconv(f.Sym, flag1, mode)...) } buf = append(buf, tconv(f.Type, FmtShort, mode, depth)...) } @@ -1404,14 +1408,11 @@ func (n *Node) exprfmt(s fmt.State, prec int, mode fmtMode) { } mode.Fprintf(s, "sliceheader{%v,%v,%v}", n.Left, n.List.First(), n.List.Second()) - case OCOPY: - mode.Fprintf(s, "%#v(%v, %v)", n.Op, n.Left, n.Right) - - case OCOMPLEX: - if n.List.Len() == 1 { - mode.Fprintf(s, "%#v(%v)", n.Op, n.List.First()) - } else { + case OCOMPLEX, OCOPY: + if n.Left != nil { mode.Fprintf(s, "%#v(%v, %v)", n.Op, n.Left, n.Right) + } else { + mode.Fprintf(s, "%#v(%.v)", n.Op, n.List) } case OCONV, @@ -1540,6 +1541,8 @@ func (n *Node) nodefmt(s fmt.State, flag FmtFlag, mode fmtMode) { if flag&FmtLong != 0 && t != nil { if t.Etype == TNIL { fmt.Fprint(s, "nil") + } else if n.Op == ONAME && n.Name.AutoTemp() { + mode.Fprintf(s, "%v value", t) } else { mode.Fprintf(s, "%v (type %v)", n, t) } @@ -1576,9 +1579,6 @@ func (n *Node) nodedump(s fmt.State, flag FmtFlag, mode fmtMode) { default: mode.Fprintf(s, "%v%j", n.Op, n) - case OINDREGSP: - mode.Fprintf(s, "%v-SP%j", n.Op, n) - case OLITERAL: mode.Fprintf(s, "%v-%v%j", n.Op, n.Val(), n) diff --git a/src/cmd/compile/internal/gc/global_test.go b/src/cmd/compile/internal/gc/global_test.go index 56855d797a..edad6d042a 100644 --- a/src/cmd/compile/internal/gc/global_test.go +++ b/src/cmd/compile/internal/gc/global_test.go @@ -19,6 +19,7 @@ import ( // fmt.scanf routines. See issue 6853. func TestScanfRemoval(t *testing.T) { testenv.MustHaveGoBuild(t) + t.Parallel() // Make a directory to work in. dir, err := ioutil.TempDir("", "issue6853a-") @@ -66,6 +67,7 @@ func main() { // 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, err := ioutil.TempDir("", "issue14515-") diff --git a/src/cmd/compile/internal/gc/go.go b/src/cmd/compile/internal/gc/go.go index 007585ef10..6123e6acc1 100644 --- a/src/cmd/compile/internal/gc/go.go +++ b/src/cmd/compile/internal/gc/go.go @@ -295,15 +295,14 @@ var ( growslice, msanread, msanwrite, + newobject, newproc, panicdivide, panicshift, panicdottypeE, panicdottypeI, - panicindex, panicnildottype, panicoverflow, - panicslice, raceread, racereadrange, racewrite, @@ -314,7 +313,11 @@ var ( typedmemclr, typedmemmove, Udiv, - writeBarrier *obj.LSym + writeBarrier, + zerobaseSym *obj.LSym + + BoundsCheckFunc [ssa.BoundsKindCount]*obj.LSym + ExtendCheckFunc [ssa.BoundsKindCount]*obj.LSym // GO386=387 ControlWord64trunc, diff --git a/src/cmd/compile/internal/gc/iexport.go b/src/cmd/compile/internal/gc/iexport.go index 2a34e2ea77..560aeabf76 100644 --- a/src/cmd/compile/internal/gc/iexport.go +++ b/src/cmd/compile/internal/gc/iexport.go @@ -202,13 +202,12 @@ import ( "bufio" "bytes" "cmd/compile/internal/types" - "cmd/internal/obj" "cmd/internal/src" "encoding/binary" "fmt" - "go/ast" "io" "math/big" + "sort" "strings" ) @@ -322,12 +321,12 @@ func (w *exportWriter) writeIndex(index map[*Node]uint64, mainIndex bool) { for pkg, objs := range pkgObjs { pkgs = append(pkgs, pkg) - obj.SortSlice(objs, func(i, j int) bool { + sort.Slice(objs, func(i, j int) bool { return objs[i].Sym.Name < objs[j].Sym.Name }) } - obj.SortSlice(pkgs, func(i, j int) bool { + sort.Slice(pkgs, func(i, j int) bool { return pkgs[i].Path < pkgs[j].Path }) @@ -1277,6 +1276,7 @@ func (w *exportWriter) expr(n *Node) { case OCALL, OCALLFUNC, OCALLMETH, OCALLINTER, OGETG: w.op(OCALL) w.pos(n.Pos) + w.stmtList(n.Ninit) w.expr(n.Left) w.exprList(n.List) w.bool(n.IsDDD()) @@ -1387,7 +1387,8 @@ func (w *exportWriter) localIdent(s *types.Sym, v int32) { return } - if i := strings.LastIndex(name, "."); i >= 0 { + // TODO(mdempsky): Fix autotmp hack. + if i := strings.LastIndex(name, "."); i >= 0 && !strings.HasPrefix(name, ".autotmp_") { Fatalf("unexpected dot in identifier: %v", name) } @@ -1398,7 +1399,7 @@ func (w *exportWriter) localIdent(s *types.Sym, v int32) { name = fmt.Sprintf("%s·%d", name, v) } - if !ast.IsExported(name) && s.Pkg != w.currPkg { + if !types.IsExported(name) && s.Pkg != w.currPkg { Fatalf("weird package in name: %v => %v, not %q", s, name, w.currPkg.Path) } diff --git a/src/cmd/compile/internal/gc/iimport.go b/src/cmd/compile/internal/gc/iimport.go index addf829b04..38a7201a63 100644 --- a/src/cmd/compile/internal/gc/iimport.go +++ b/src/cmd/compile/internal/gc/iimport.go @@ -117,7 +117,7 @@ func iimport(pkg *types.Pkg, in *bio.Reader) { stringData := data[:sLen] declData := data[sLen:] - in.Seek(int64(sLen+dLen), os.SEEK_CUR) + in.MustSeek(int64(sLen+dLen), os.SEEK_CUR) p := &iimporter{ ipkg: pkg, @@ -907,7 +907,9 @@ func (r *importReader) node() *Node { // unreachable - mapped to OCALL case below by exporter case OCALL: - n := nodl(r.pos(), OCALL, r.expr(), nil) + n := nodl(r.pos(), OCALL, nil, nil) + n.Ninit.Set(r.stmtList()) + n.Left = r.expr() n.List.Set(r.exprList()) n.SetIsDDD(r.bool()) return n diff --git a/src/cmd/compile/internal/gc/init.go b/src/cmd/compile/internal/gc/init.go index e981f83653..6467aafd53 100644 --- a/src/cmd/compile/internal/gc/init.go +++ b/src/cmd/compile/internal/gc/init.go @@ -6,6 +6,7 @@ package gc import ( "cmd/compile/internal/types" + "cmd/internal/obj" ) // A function named init is a special case. @@ -14,85 +15,46 @@ import ( // the name, normally "pkg.init", is altered to "pkg.init.0". var renameinitgen int +// Dummy function for autotmps generated during typechecking. +var dummyInitFn = nod(ODCLFUNC, nil, nil) + func renameinit() *types.Sym { s := lookupN("init.", renameinitgen) renameinitgen++ return s } -// anyinit reports whether there any interesting init statements. -func anyinit(n []*Node) bool { - for _, ln := range n { - switch ln.Op { - case ODCLFUNC, ODCLCONST, ODCLTYPE, OEMPTY: - case OAS: - if !ln.Left.isBlank() || !candiscard(ln.Right) { - return true - } - default: - return true - } - } - - // is this main - if localpkg.Name == "main" { - return true - } - - // is there an explicit init function - if renameinitgen > 0 { - return true - } - - // are there any imported init functions - for _, s := range types.InitSyms { - if s.Def != nil { - return true - } - } - - // then none - return false -} - -// fninit hand-crafts package initialization code. -// -// func init.ializers() { (0) -// -// } -// var initdone· uint8 (1) -// func init() { (2) -// if initdone· > 1 { (3) -// return (3a) -// } -// if initdone· == 1 { (4) -// throw() (4a) -// } -// initdone· = 1 (5) -// // over all matching imported symbols -// .init() (6) -// init.ializers() (7) -// init.() // if any (8) -// initdone· = 2 (9) -// return (10) -// } +// fninit makes an initialization record for the package. +// See runtime/proc.go:initTask for its layout. +// The 3 tasks for initialization are: +// 1) Initialize all of the packages the current package depends on. +// 2) Initialize all the variables that have initializers. +// 3) Run any init functions. func fninit(n []*Node) { - lineno = autogeneratedPos nf := initfix(n) - if !anyinit(nf) { - return + + var deps []*obj.LSym // initTask records for packages the current package depends on + var fns []*obj.LSym // functions to call for package initialization + + // Find imported packages with init tasks. + for _, p := range types.ImportedPkgList() { + if s, ok := p.LookupOK(".inittask"); ok { + deps = append(deps, s.Linksym()) + } } - // (0) // Make a function that contains all the initialization statements. - // This is a separate function because we want it to appear in - // stack traces, where the init function itself does not. - var initializers *types.Sym if len(nf) > 0 { lineno = nf[0].Pos // prolog/epilog gets line number of first init stmt - initializers = lookup("init.ializers") + initializers := lookup("init") disableExport(initializers) fn := dclfunc(initializers, nod(OTFUNC, nil, nil)) + for _, dcl := range dummyInitFn.Func.Dcl { + dcl.Name.Curfn = fn + } + fn.Func.Dcl = append(fn.Func.Dcl, dummyInitFn.Func.Dcl...) + dummyInitFn.Func.Dcl = nil + fn.Nbody.Set(nf) funcbody() @@ -101,143 +63,46 @@ func fninit(n []*Node) { typecheckslice(nf, ctxStmt) Curfn = nil funccompile(fn) - lineno = autogeneratedPos + fns = append(fns, initializers.Linksym()) + } + if dummyInitFn.Func.Dcl != nil { + // We only generate temps using dummyInitFn if there + // are package-scope initialization statements, so + // something's weird if we get here. + Fatalf("dummyInitFn still has declarations") } - var r []*Node - - // (1) - gatevar := newname(lookup("initdone·")) - addvar(gatevar, types.Types[TUINT8], PEXTERN) - - // (2) - initsym := lookup("init") - fn := dclfunc(initsym, nod(OTFUNC, nil, nil)) - - // (3) - a := nod(OIF, nil, nil) - a.Left = nod(OGT, gatevar, nodintconst(1)) - a.SetLikely(true) - r = append(r, a) - // (3a) - a.Nbody.Set1(nod(ORETURN, nil, nil)) - - // (4) - b := nod(OIF, nil, nil) - b.Left = nod(OEQ, gatevar, nodintconst(1)) - // this actually isn't likely, but code layout is better - // like this: no JMP needed after the call. - b.SetLikely(true) - r = append(r, b) - // (4a) - b.Nbody.Set1(nod(OCALL, syslook("throwinit"), nil)) - - // (5) - a = nod(OAS, gatevar, nodintconst(1)) - - r = append(r, a) - - // (6) - for _, s := range types.InitSyms { - if s == initsym { - continue - } - n := resolve(oldname(s)) - if n.Op == ONONAME { - // No package-scope init function; just a - // local variable, field name, or something. - continue - } - n.checkInitFuncSignature() - a = nod(OCALL, n, nil) - r = append(r, a) + // Record user init functions. + for i := 0; i < renameinitgen; i++ { + s := lookupN("init.", i) + fns = append(fns, s.Linksym()) } - // (7) - if initializers != nil { - n := newname(initializers) - addvar(n, functype(nil, nil, nil), PFUNC) - r = append(r, nod(OCALL, n, nil)) + if len(deps) == 0 && len(fns) == 0 && localpkg.Name != "main" && localpkg.Name != "runtime" { + return // nothing to initialize } - // (8) - - // maxInlineInitCalls is the threshold at which we switch - // from generating calls inline to generating a static array - // of functions and calling them in a loop. - // See CL 41500 for more discussion. - const maxInlineInitCalls = 500 - - if renameinitgen < maxInlineInitCalls { - // Not many init functions. Just call them all directly. - for i := 0; i < renameinitgen; i++ { - s := lookupN("init.", i) - n := asNode(s.Def) - n.checkInitFuncSignature() - a = nod(OCALL, n, nil) - r = append(r, a) - } - } else { - // Lots of init functions. - // Set up an array of functions and loop to call them. - // This is faster to compile and similar at runtime. - - // Build type [renameinitgen]func(). - typ := types.NewArray(functype(nil, nil, nil), int64(renameinitgen)) - - // Make and fill array. - fnarr := staticname(typ) - fnarr.Name.SetReadonly(true) - for i := 0; i < renameinitgen; i++ { - s := lookupN("init.", i) - lhs := nod(OINDEX, fnarr, nodintconst(int64(i))) - rhs := asNode(s.Def) - rhs.checkInitFuncSignature() - as := nod(OAS, lhs, rhs) - as = typecheck(as, ctxStmt) - genAsStatic(as) - } - - // Generate a loop that calls each function in turn. - // for i := 0; i < renameinitgen; i++ { - // fnarr[i]() - // } - i := temp(types.Types[TINT]) - fnidx := nod(OINDEX, fnarr, i) - fnidx.SetBounded(true) - - zero := nod(OAS, i, nodintconst(0)) - cond := nod(OLT, i, nodintconst(int64(renameinitgen))) - incr := nod(OAS, i, nod(OADD, i, nodintconst(1))) - body := nod(OCALL, fnidx, nil) - - loop := nod(OFOR, cond, incr) - loop.Nbody.Set1(body) - loop.Ninit.Set1(zero) - - loop = typecheck(loop, ctxStmt) - r = append(r, loop) + // Make an .inittask structure. + sym := lookup(".inittask") + nn := newname(sym) + nn.Type = types.Types[TUINT8] // dummy type + nn.SetClass(PEXTERN) + sym.Def = asTypesNode(nn) + exportsym(nn) + lsym := sym.Linksym() + ot := 0 + ot = duintptr(lsym, ot, 0) // state: not initialized yet + ot = duintptr(lsym, ot, uint64(len(deps))) + ot = duintptr(lsym, ot, uint64(len(fns))) + for _, d := range deps { + ot = dsymptr(lsym, ot, d, 0) } - - // (9) - a = nod(OAS, gatevar, nodintconst(2)) - - r = append(r, a) - - // (10) - a = nod(ORETURN, nil, nil) - - r = append(r, a) - exportsym(fn.Func.Nname) - - fn.Nbody.Set(r) - funcbody() - - Curfn = fn - fn = typecheck(fn, ctxStmt) - typecheckslice(r, ctxStmt) - Curfn = nil - funccompile(fn) + for _, f := range fns { + ot = dsymptr(lsym, ot, f, 0) + } + // An initTask has pointers, but none into the Go heap. + // It's not quite read only, the state field must be modifiable. + ggloblsym(lsym, int32(ot), obj.NOPTR) } func (n *Node) checkInitFuncSignature() { diff --git a/src/cmd/compile/internal/gc/inl.go b/src/cmd/compile/internal/gc/inl.go index 81cad31a13..b41b8cb1a4 100644 --- a/src/cmd/compile/internal/gc/inl.go +++ b/src/cmd/compile/internal/gc/inl.go @@ -289,10 +289,6 @@ func (v *hairyVisitor) visit(n *Node) bool { switch n.Op { // Call is okay if inlinable and we have the budget for the body. case OCALLFUNC: - if isIntrinsicCall(n) { - v.budget-- - break - } // Functions that call runtime.getcaller{pc,sp} can not be inlined // because getcaller{pc,sp} expect a pointer to the caller's first argument. // @@ -309,6 +305,11 @@ func (v *hairyVisitor) visit(n *Node) bool { } } + if isIntrinsicCall(n) { + v.budget-- + break + } + if fn := n.Left.Func; fn != nil && fn.Inl != nil { v.budget -= fn.Inl.Cost break @@ -342,10 +343,6 @@ func (v *hairyVisitor) visit(n *Node) bool { // runtime.heapBits.next even though // it calls slow-path // runtime.heapBits.nextArena. - // - // TODO(austin): Once mid-stack - // inlining is the default, remove - // this special case. break } } @@ -589,24 +586,13 @@ func inlnode(n *Node, maxCost int32) *Node { } inlnodelist(n.List, maxCost) - switch n.Op { - case OBLOCK: + if n.Op == OBLOCK { for _, n2 := range n.List.Slice() { if n2.Op == OINLCALL { inlconv2stmt(n2) } } - - case ORETURN, OCALLFUNC, OCALLMETH, OCALLINTER, OAPPEND, OCOMPLEX: - // if we just replaced arg in f(arg()) or return arg with an inlined call - // and arg returns multiple values, glue as list - if n.List.Len() == 1 && n.List.First().Op == OINLCALL && n.List.First().Rlist.Len() > 1 { - n.List.Set(inlconv2list(n.List.First())) - break - } - fallthrough - - default: + } else { s := n.List.Slice() for i1, n1 := range s { if n1 != nil && n1.Op == OINLCALL { @@ -1016,9 +1002,6 @@ func mkinlcall(n, fn *Node, maxCost int32) *Node { // to pass as a slice. numvals := n.List.Len() - if numvals == 1 && n.List.First().Type.IsFuncArgStruct() { - numvals = n.List.First().Type.NumFields() - } x := as.List.Len() for as.List.Len() < numvals { @@ -1063,12 +1046,13 @@ func mkinlcall(n, fn *Node, maxCost int32) *Node { } newIndex := Ctxt.InlTree.Add(parent, n.Pos, fn.Sym.Linksym()) - // Add a inline mark just before the inlined body. + // Add an inline mark just before the inlined body. // This mark is inline in the code so that it's a reasonable spot // to put a breakpoint. Not sure if that's really necessary or not // (in which case it could go at the end of the function instead). + // Note issue 28603. inlMark := nod(OINLMARK, nil, nil) - inlMark.Pos = n.Pos + inlMark.Pos = n.Pos.WithIsStmt() inlMark.Xoffset = int64(newIndex) ninit.Append(inlMark) diff --git a/src/cmd/compile/internal/gc/inl_test.go b/src/cmd/compile/internal/gc/inl_test.go index c29c1755f3..a04869c5a3 100644 --- a/src/cmd/compile/internal/gc/inl_test.go +++ b/src/cmd/compile/internal/gc/inl_test.go @@ -8,6 +8,7 @@ import ( "bufio" "internal/testenv" "io" + "math/bits" "os/exec" "regexp" "runtime" @@ -118,6 +119,10 @@ func TestIntendedInlining(t *testing.T) { "byLiteral.Less", "byLiteral.Swap", }, + "encoding/base64": { + "assemble32", + "assemble64", + }, "unicode/utf8": { "FullRune", "FullRuneInString", @@ -127,25 +132,25 @@ func TestIntendedInlining(t *testing.T) { "reflect": { "Value.CanAddr", "Value.CanSet", + "Value.CanInterface", "Value.IsValid", + "Value.pointer", "add", "align", + "flag.mustBe", + "flag.mustBeAssignable", + "flag.mustBeExported", "flag.kind", "flag.ro", - - // TODO: these use panic, need mid-stack - // inlining - // "Value.CanInterface", - // "Value.pointer", - // "flag.mustBe", - // "flag.mustBeAssignable", - // "flag.mustBeExported", }, "regexp": { "(*bitState).push", }, "math/big": { "bigEndianWord", + // The following functions require the math_big_pure_go build tag. + "addVW", + "subVW", }, } @@ -163,12 +168,27 @@ func TestIntendedInlining(t *testing.T) { want["runtime/internal/sys"] = append(want["runtime/internal/sys"], "Ctz32") want["runtime/internal/sys"] = append(want["runtime/internal/sys"], "Bswap32") } - switch runtime.GOARCH { - case "amd64", "amd64p32", "arm64", "mips64", "mips64le", "ppc64", "ppc64le", "s390x": + if bits.UintSize == 64 { // rotl_31 is only defined on 64-bit architectures want["runtime"] = append(want["runtime"], "rotl_31") } + switch runtime.GOARCH { + case "nacl", "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, @@ -189,7 +209,7 @@ func TestIntendedInlining(t *testing.T) { } } - args := append([]string{"build", "-a", "-gcflags=all=-m -m"}, pkgs...) + args := append([]string{"build", "-a", "-gcflags=all=-m -m", "-tags=math_big_pure_go"}, pkgs...) cmd := testenv.CleanCmdEnv(exec.Command(testenv.GoToolPath(t), args...)) pr, pw := io.Pipe() cmd.Stdout = pw diff --git a/src/cmd/compile/internal/gc/lex.go b/src/cmd/compile/internal/gc/lex.go index bd68ebffff..557f98604d 100644 --- a/src/cmd/compile/internal/gc/lex.go +++ b/src/cmd/compile/internal/gc/lex.go @@ -116,8 +116,9 @@ func (p *noder) pragcgo(pos syntax.Pos, text string) { f[3] = strings.Trim(f[3], `"`) if objabi.GOOS == "aix" && f[3] != "" { // On Aix, library pattern must be "lib.a/object.o" + // or "lib.a/libname.so.X" n := strings.Split(f[3], "/") - if len(n) != 2 || !strings.HasSuffix(n[0], ".a") || !strings.HasSuffix(n[1], ".o") { + if len(n) != 2 || !strings.HasSuffix(n[0], ".a") || (!strings.HasSuffix(n[1], ".o") && !strings.Contains(n[1], ".so.")) { p.error(syntax.Error{Pos: pos, Msg: `usage: //go:cgo_import_dynamic local [remote ["lib.a/object.o"]]`}) return } diff --git a/src/cmd/compile/internal/gc/main.go b/src/cmd/compile/internal/gc/main.go index 98ff2a3d27..51b60fb417 100644 --- a/src/cmd/compile/internal/gc/main.go +++ b/src/cmd/compile/internal/gc/main.go @@ -19,7 +19,7 @@ import ( "cmd/internal/sys" "flag" "fmt" - "go/build" + "internal/goversion" "io" "io/ioutil" "log" @@ -27,6 +27,7 @@ import ( "path" "regexp" "runtime" + "sort" "strconv" "strings" ) @@ -140,6 +141,12 @@ func Main(archInit func(*Arch)) { Ctxt.DiagFlush = flusherrors Ctxt.Bso = bufio.NewWriter(os.Stdout) + // UseBASEntries is preferred because it shaves about 2% off build time, but LLDB, dsymutil, and dwarfdump + // on Darwin don't support it properly, especially since macOS 10.14 (Mojave). This is exposed as a flag + // to allow testing with LLVM tools on Linux, and to help with reporting this bug to the LLVM project. + // See bugs 31188 and 21945 (CLs 170638, 98075, 72371). + Ctxt.UseBASEntries = Ctxt.Headtype != objabi.Hdarwin + localpkg = types.NewPkg("", "") localpkg.Prefix = "\"\"" @@ -253,12 +260,14 @@ func Main(archInit func(*Arch)) { flag.StringVar(&blockprofile, "blockprofile", "", "write block profile to `file`") flag.StringVar(&mutexprofile, "mutexprofile", "", "write mutex profile to `file`") flag.StringVar(&benchfile, "bench", "", "append benchmark times to `file`") + flag.BoolVar(&newescape, "newescape", true, "enable new escape analysis") + flag.BoolVar(&Ctxt.UseBASEntries, "dwarfbasentries", Ctxt.UseBASEntries, "use base address selection entries in DWARF") objabi.Flagparse(usage) // Record flags that affect the build result. (And don't // record flags that don't, since that would cause spurious // changes in the binary.) - recordFlags("B", "N", "l", "msan", "race", "shared", "dynlink", "dwarflocationlists") + recordFlags("B", "N", "l", "msan", "race", "shared", "dynlink", "dwarflocationlists", "newescape", "dwarfbasentries") Ctxt.Flag_shared = flag_dynlink || flag_shared Ctxt.Flag_dynlink = flag_dynlink @@ -497,6 +506,8 @@ func Main(archInit func(*Arch)) { finishUniverse() + recordPackageName() + typecheckok = true // Process top-level declarations in phases. @@ -713,7 +724,7 @@ func Main(archInit func(*Arch)) { } // Check whether any of the functions we have compiled have gigantic stack frames. - obj.SortSlice(largeStackFrames, func(i, j int) bool { + sort.Slice(largeStackFrames, func(i, j int) bool { return largeStackFrames[i].pos.Before(largeStackFrames[j].pos) }) for _, large := range largeStackFrames { @@ -1303,7 +1314,7 @@ func clearImports() { } } - obj.SortSlice(unused, func(i, j int) bool { return unused[i].pos.Before(unused[j].pos) }) + sort.Slice(unused, func(i, j int) bool { return unused[i].pos.Before(unused[j].pos) }) for _, pkg := range unused { pkgnotused(pkg.pos, pkg.path, pkg.name) } @@ -1406,13 +1417,24 @@ func recordFlags(flags ...string) { s.P = cmd.Bytes()[1:] } +// recordPackageName records the name of the package being +// compiled, so that the linker can save it in the compile unit's DIE. +func recordPackageName() { + s := Ctxt.Lookup(dwarf.CUInfoPrefix + "packagename." + myimportpath) + s.Type = objabi.SDWARFINFO + // Sometimes (for example when building tests) we can link + // together two package main archives. So allow dups. + s.Set(obj.AttrDuplicateOK, true) + Ctxt.Data = append(Ctxt.Data, s) + s.P = []byte(localpkg.Name) +} + // flag_lang is the language version we are compiling for, set by the -lang flag. var flag_lang string // currentLang returns the current language version. func currentLang() string { - tags := build.Default.ReleaseTags - return tags[len(tags)-1] + return fmt.Sprintf("go1.%d", goversion.Version) } // goVersionRE is a regular expression that matches the valid diff --git a/src/cmd/compile/internal/gc/mpfloat.go b/src/cmd/compile/internal/gc/mpfloat.go index c1bbd3c1b4..d15f26784e 100644 --- a/src/cmd/compile/internal/gc/mpfloat.go +++ b/src/cmd/compile/internal/gc/mpfloat.go @@ -8,7 +8,6 @@ import ( "fmt" "math" "math/big" - "strings" ) // implements float arithmetic @@ -180,36 +179,16 @@ func (a *Mpflt) Neg() { } func (a *Mpflt) SetString(as string) { - // TODO(gri) remove this code once math/big.Float.Parse can handle separators - as = strings.Replace(as, "_", "", -1) // strip separators - // TODO(gri) why is this needed? for len(as) > 0 && (as[0] == ' ' || as[0] == '\t') { as = as[1:] } - // Currently, Val.Parse below (== math/big.Float.Parse) does not - // handle the 0o-octal prefix which can appear with octal integers - // with 'i' suffix, which end up here as imaginary components of - // complex numbers. Handle explicitly for now. - // TODO(gri) remove once Float.Parse can handle octals (it handles 0b/0B) - var f *big.Float - if strings.HasPrefix(as, "0o") || strings.HasPrefix(as, "0O") { - x, ok := new(big.Int).SetString(as[2:], 8) - if !ok { - yyerror("malformed constant: %s", as) - a.Val.SetFloat64(0) - return - } - f = a.Val.SetInt(x) - } else { - var err error - f, _, err = a.Val.Parse(as, 0) - if err != nil { - yyerror("malformed constant: %s (%v)", as, err) - a.Val.SetFloat64(0) - return - } + f, _, err := a.Val.Parse(as, 0) + if err != nil { + yyerror("malformed constant: %s (%v)", as, err) + a.Val.SetFloat64(0) + return } if f.IsInf() { diff --git a/src/cmd/compile/internal/gc/mpint.go b/src/cmd/compile/internal/gc/mpint.go index e06f39f8d9..340350bca7 100644 --- a/src/cmd/compile/internal/gc/mpint.go +++ b/src/cmd/compile/internal/gc/mpint.go @@ -7,7 +7,6 @@ package gc import ( "fmt" "math/big" - "strings" ) // implements integer arithmetic @@ -282,23 +281,13 @@ func (a *Mpint) SetInt64(c int64) { } func (a *Mpint) SetString(as string) { - // TODO(gri) remove this code once math/big.Int.SetString can handle 0o-octals and separators - as = strings.Replace(as, "_", "", -1) // strip separators - if len(as) >= 2 && as[0] == '0' && (as[1] == 'o' || as[1] == 'O') { - as = "0" + as[2:] - } - _, ok := a.Val.SetString(as, 0) if !ok { - // required syntax is [+-][0[x]]d* - // At the moment we lose precise error cause; - // the old code distinguished between: - // - malformed hex constant - // - malformed octal constant - // - malformed decimal constant - // TODO(gri) use different conversion function - yyerror("malformed integer constant: %s", as) - a.Val.SetUint64(0) + // The lexer checks for correct syntax of the literal + // and reports detailed errors. Thus SetString should + // never fail (in theory it might run out of memory, + // but that wouldn't be reported as an error here). + Fatalf("malformed integer constant: %s", as) return } if a.checkOverflow(0) { diff --git a/src/cmd/compile/internal/gc/noder.go b/src/cmd/compile/internal/gc/noder.go index 3fab95b917..e83ae7c5eb 100644 --- a/src/cmd/compile/internal/gc/noder.go +++ b/src/cmd/compile/internal/gc/noder.go @@ -1310,6 +1310,35 @@ func (p *noder) binOp(op syntax.Operator) Op { return binOps[op] } +// checkLangCompat reports an error if the representation of a numeric +// literal is not compatible with the current language version. +func checkLangCompat(lit *syntax.BasicLit) { + s := lit.Value + if len(s) <= 2 || langSupported(1, 13) { + return + } + // len(s) > 2 + if strings.Contains(s, "_") { + yyerror("underscores in numeric literals only supported as of -lang=go1.13") + return + } + if s[0] != '0' { + return + } + base := s[1] + if base == 'b' || base == 'B' { + yyerror("binary literals only supported as of -lang=go1.13") + return + } + if base == 'o' || base == 'O' { + yyerror("0o/0O-style octal literals only supported as of -lang=go1.13") + return + } + if lit.Kind != syntax.IntLit && (base == 'x' || base == 'X') { + yyerror("hexadecimal floating-point literals only supported as of -lang=go1.13") + } +} + func (p *noder) basicLit(lit *syntax.BasicLit) Val { // TODO: Don't try to convert if we had syntax errors (conversions may fail). // Use dummy values so we can continue to compile. Eventually, use a @@ -1317,16 +1346,19 @@ func (p *noder) basicLit(lit *syntax.BasicLit) Val { // we can continue type-checking w/o spurious follow-up errors. switch s := lit.Value; lit.Kind { case syntax.IntLit: + checkLangCompat(lit) x := new(Mpint) x.SetString(s) return Val{U: x} case syntax.FloatLit: + checkLangCompat(lit) x := newMpflt() x.SetString(s) return Val{U: x} case syntax.ImagLit: + checkLangCompat(lit) x := newMpcmplx() x.Imag.SetString(strings.TrimSuffix(s, "i")) return Val{U: x} diff --git a/src/cmd/compile/internal/gc/obj.go b/src/cmd/compile/internal/gc/obj.go index 5630e12ace..c85268c120 100644 --- a/src/cmd/compile/internal/gc/obj.go +++ b/src/cmd/compile/internal/gc/obj.go @@ -14,6 +14,7 @@ import ( "encoding/json" "fmt" "io" + "sort" "strconv" ) @@ -96,13 +97,13 @@ func finishArchiveEntry(bout *bio.Writer, start int64, name string) { if size&1 != 0 { bout.WriteByte(0) } - bout.Seek(start-ArhdrSize, 0) + bout.MustSeek(start-ArhdrSize, 0) var arhdr [ArhdrSize]byte formathdr(arhdr[:], name, size) bout.Write(arhdr[:]) bout.Flush() - bout.Seek(start+size+(size&1), 0) + bout.MustSeek(start+size+(size&1), 0) } func dumpCompilerObj(bout *bio.Writer) { @@ -163,7 +164,7 @@ func dumpLinkerObj(bout *bio.Writer) { addGCLocals() - obj.WriteObjFile(Ctxt, bout.Writer) + obj.WriteObjFile(Ctxt, bout.Writer, myimportpath) } func addptabs() { @@ -259,7 +260,7 @@ func dumpglobls() { } } - obj.SortSlice(funcsyms, func(i, j int) bool { + sort.Slice(funcsyms, func(i, j int) bool { return funcsyms[i].LinksymName() < funcsyms[j].LinksymName() }) for _, s := range funcsyms { @@ -287,7 +288,7 @@ func addGCLocals() { } } if x := s.Func.StackObjects; x != nil { - ggloblsym(x, int32(len(x.P)), obj.RODATA|obj.LOCAL) + ggloblsym(x, int32(len(x.P)), obj.RODATA|obj.DUPOK) } } } diff --git a/src/cmd/compile/internal/gc/op_string.go b/src/cmd/compile/internal/gc/op_string.go index fe80e39064..d8910e7d06 100644 --- a/src/cmd/compile/internal/gc/op_string.go +++ b/src/cmd/compile/internal/gc/op_string.go @@ -4,9 +4,169 @@ package gc import "strconv" -const _Op_name = "XXXNAMENONAMETYPEPACKLITERALADDSUBORXORADDSTRADDRANDANDAPPENDBYTES2STRBYTES2STRTMPRUNES2STRSTR2BYTESSTR2BYTESTMPSTR2RUNESASAS2AS2FUNCAS2RECVAS2MAPRAS2DOTTYPEASOPCALLCALLFUNCCALLMETHCALLINTERCALLPARTCAPCLOSECLOSURECOMPLITMAPLITSTRUCTLITARRAYLITSLICELITPTRLITCONVCONVIFACECONVNOPCOPYDCLDCLFUNCDCLFIELDDCLCONSTDCLTYPEDELETEDOTDOTPTRDOTMETHDOTINTERXDOTDOTTYPEDOTTYPE2EQNELTLEGEGTDEREFINDEXINDEXMAPKEYSTRUCTKEYLENMAKEMAKECHANMAKEMAPMAKESLICEMULDIVMODLSHRSHANDANDNOTNEWNOTBITNOTPLUSNEGORORPANICPRINTPRINTNPARENSENDSLICESLICEARRSLICESTRSLICE3SLICE3ARRSLICEHEADERRECOVERRECVRUNESTRSELRECVSELRECV2IOTAREALIMAGCOMPLEXALIGNOFOFFSETOFSIZEOFBLOCKBREAKCASEXCASECONTINUEDEFEREMPTYFALLFORFORUNTILGOTOIFLABELGORANGERETURNSELECTSWITCHTYPESWTCHANTMAPTSTRUCTTINTERTFUNCTARRAYDDDDDDARGINLCALLEFACEITABIDATASPTRCLOSUREVARCFUNCCHECKNILVARDEFVARKILLVARLIVEINDREGSPRETJMPGETGEND" +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[OXXX-0] + _ = x[ONAME-1] + _ = x[ONONAME-2] + _ = x[OTYPE-3] + _ = x[OPACK-4] + _ = x[OLITERAL-5] + _ = x[OADD-6] + _ = x[OSUB-7] + _ = x[OOR-8] + _ = x[OXOR-9] + _ = x[OADDSTR-10] + _ = x[OADDR-11] + _ = x[OANDAND-12] + _ = x[OAPPEND-13] + _ = x[OBYTES2STR-14] + _ = x[OBYTES2STRTMP-15] + _ = x[ORUNES2STR-16] + _ = x[OSTR2BYTES-17] + _ = x[OSTR2BYTESTMP-18] + _ = x[OSTR2RUNES-19] + _ = x[OAS-20] + _ = x[OAS2-21] + _ = x[OAS2FUNC-22] + _ = x[OAS2RECV-23] + _ = x[OAS2MAPR-24] + _ = x[OAS2DOTTYPE-25] + _ = x[OASOP-26] + _ = x[OCALL-27] + _ = x[OCALLFUNC-28] + _ = x[OCALLMETH-29] + _ = x[OCALLINTER-30] + _ = x[OCALLPART-31] + _ = x[OCAP-32] + _ = x[OCLOSE-33] + _ = x[OCLOSURE-34] + _ = x[OCOMPLIT-35] + _ = x[OMAPLIT-36] + _ = x[OSTRUCTLIT-37] + _ = x[OARRAYLIT-38] + _ = x[OSLICELIT-39] + _ = x[OPTRLIT-40] + _ = x[OCONV-41] + _ = x[OCONVIFACE-42] + _ = x[OCONVNOP-43] + _ = x[OCOPY-44] + _ = x[ODCL-45] + _ = x[ODCLFUNC-46] + _ = x[ODCLFIELD-47] + _ = x[ODCLCONST-48] + _ = x[ODCLTYPE-49] + _ = x[ODELETE-50] + _ = x[ODOT-51] + _ = x[ODOTPTR-52] + _ = x[ODOTMETH-53] + _ = x[ODOTINTER-54] + _ = x[OXDOT-55] + _ = x[ODOTTYPE-56] + _ = x[ODOTTYPE2-57] + _ = x[OEQ-58] + _ = x[ONE-59] + _ = x[OLT-60] + _ = x[OLE-61] + _ = x[OGE-62] + _ = x[OGT-63] + _ = x[ODEREF-64] + _ = x[OINDEX-65] + _ = x[OINDEXMAP-66] + _ = x[OKEY-67] + _ = x[OSTRUCTKEY-68] + _ = x[OLEN-69] + _ = x[OMAKE-70] + _ = x[OMAKECHAN-71] + _ = x[OMAKEMAP-72] + _ = x[OMAKESLICE-73] + _ = x[OMUL-74] + _ = x[ODIV-75] + _ = x[OMOD-76] + _ = x[OLSH-77] + _ = x[ORSH-78] + _ = x[OAND-79] + _ = x[OANDNOT-80] + _ = x[ONEW-81] + _ = x[ONEWOBJ-82] + _ = x[ONOT-83] + _ = x[OBITNOT-84] + _ = x[OPLUS-85] + _ = x[ONEG-86] + _ = x[OOROR-87] + _ = x[OPANIC-88] + _ = x[OPRINT-89] + _ = x[OPRINTN-90] + _ = x[OPAREN-91] + _ = x[OSEND-92] + _ = x[OSLICE-93] + _ = x[OSLICEARR-94] + _ = x[OSLICESTR-95] + _ = x[OSLICE3-96] + _ = x[OSLICE3ARR-97] + _ = x[OSLICEHEADER-98] + _ = x[ORECOVER-99] + _ = x[ORECV-100] + _ = x[ORUNESTR-101] + _ = x[OSELRECV-102] + _ = x[OSELRECV2-103] + _ = x[OIOTA-104] + _ = x[OREAL-105] + _ = x[OIMAG-106] + _ = x[OCOMPLEX-107] + _ = x[OALIGNOF-108] + _ = x[OOFFSETOF-109] + _ = x[OSIZEOF-110] + _ = x[OBLOCK-111] + _ = x[OBREAK-112] + _ = x[OCASE-113] + _ = x[OXCASE-114] + _ = x[OCONTINUE-115] + _ = x[ODEFER-116] + _ = x[OEMPTY-117] + _ = x[OFALL-118] + _ = x[OFOR-119] + _ = x[OFORUNTIL-120] + _ = x[OGOTO-121] + _ = x[OIF-122] + _ = x[OLABEL-123] + _ = x[OGO-124] + _ = x[ORANGE-125] + _ = x[ORETURN-126] + _ = x[OSELECT-127] + _ = x[OSWITCH-128] + _ = x[OTYPESW-129] + _ = x[OTCHAN-130] + _ = x[OTMAP-131] + _ = x[OTSTRUCT-132] + _ = x[OTINTER-133] + _ = x[OTFUNC-134] + _ = x[OTARRAY-135] + _ = x[ODDD-136] + _ = x[ODDDARG-137] + _ = x[OINLCALL-138] + _ = x[OEFACE-139] + _ = x[OITAB-140] + _ = x[OIDATA-141] + _ = x[OSPTR-142] + _ = x[OCLOSUREVAR-143] + _ = x[OCFUNC-144] + _ = x[OCHECKNIL-145] + _ = x[OVARDEF-146] + _ = x[OVARKILL-147] + _ = x[OVARLIVE-148] + _ = x[ORESULT-149] + _ = x[OINLMARK-150] + _ = x[ORETJMP-151] + _ = x[OGETG-152] + _ = x[OEND-153] +} -var _Op_index = [...]uint16{0, 3, 7, 13, 17, 21, 28, 31, 34, 36, 39, 45, 49, 55, 61, 70, 82, 91, 100, 112, 121, 123, 126, 133, 140, 147, 157, 161, 165, 173, 181, 190, 198, 201, 206, 213, 220, 226, 235, 243, 251, 257, 261, 270, 277, 281, 284, 291, 299, 307, 314, 320, 323, 329, 336, 344, 348, 355, 363, 365, 367, 369, 371, 373, 375, 380, 385, 393, 396, 405, 408, 412, 420, 427, 436, 439, 442, 445, 448, 451, 454, 460, 463, 466, 472, 476, 479, 483, 488, 493, 499, 504, 508, 513, 521, 529, 535, 544, 555, 562, 566, 573, 580, 588, 592, 596, 600, 607, 614, 622, 628, 633, 638, 642, 647, 655, 660, 665, 669, 672, 680, 684, 686, 691, 693, 698, 704, 710, 716, 722, 727, 731, 738, 744, 749, 755, 758, 764, 771, 776, 780, 785, 789, 799, 804, 812, 818, 825, 832, 840, 846, 850, 853} +const _Op_name = "XXXNAMENONAMETYPEPACKLITERALADDSUBORXORADDSTRADDRANDANDAPPENDBYTES2STRBYTES2STRTMPRUNES2STRSTR2BYTESSTR2BYTESTMPSTR2RUNESASAS2AS2FUNCAS2RECVAS2MAPRAS2DOTTYPEASOPCALLCALLFUNCCALLMETHCALLINTERCALLPARTCAPCLOSECLOSURECOMPLITMAPLITSTRUCTLITARRAYLITSLICELITPTRLITCONVCONVIFACECONVNOPCOPYDCLDCLFUNCDCLFIELDDCLCONSTDCLTYPEDELETEDOTDOTPTRDOTMETHDOTINTERXDOTDOTTYPEDOTTYPE2EQNELTLEGEGTDEREFINDEXINDEXMAPKEYSTRUCTKEYLENMAKEMAKECHANMAKEMAPMAKESLICEMULDIVMODLSHRSHANDANDNOTNEWNEWOBJNOTBITNOTPLUSNEGORORPANICPRINTPRINTNPARENSENDSLICESLICEARRSLICESTRSLICE3SLICE3ARRSLICEHEADERRECOVERRECVRUNESTRSELRECVSELRECV2IOTAREALIMAGCOMPLEXALIGNOFOFFSETOFSIZEOFBLOCKBREAKCASEXCASECONTINUEDEFEREMPTYFALLFORFORUNTILGOTOIFLABELGORANGERETURNSELECTSWITCHTYPESWTCHANTMAPTSTRUCTTINTERTFUNCTARRAYDDDDDDARGINLCALLEFACEITABIDATASPTRCLOSUREVARCFUNCCHECKNILVARDEFVARKILLVARLIVERESULTINLMARKRETJMPGETGEND" + +var _Op_index = [...]uint16{0, 3, 7, 13, 17, 21, 28, 31, 34, 36, 39, 45, 49, 55, 61, 70, 82, 91, 100, 112, 121, 123, 126, 133, 140, 147, 157, 161, 165, 173, 181, 190, 198, 201, 206, 213, 220, 226, 235, 243, 251, 257, 261, 270, 277, 281, 284, 291, 299, 307, 314, 320, 323, 329, 336, 344, 348, 355, 363, 365, 367, 369, 371, 373, 375, 380, 385, 393, 396, 405, 408, 412, 420, 427, 436, 439, 442, 445, 448, 451, 454, 460, 463, 469, 472, 478, 482, 485, 489, 494, 499, 505, 510, 514, 519, 527, 535, 541, 550, 561, 568, 572, 579, 586, 594, 598, 602, 606, 613, 620, 628, 634, 639, 644, 648, 653, 661, 666, 671, 675, 678, 686, 690, 692, 697, 699, 704, 710, 716, 722, 728, 733, 737, 744, 750, 755, 761, 764, 770, 777, 782, 786, 791, 795, 805, 810, 818, 824, 831, 838, 844, 851, 857, 861, 864} func (i Op) String() string { if i >= Op(len(_Op_index)-1) { diff --git a/src/cmd/compile/internal/gc/order.go b/src/cmd/compile/internal/gc/order.go index 4848a02bb6..64716d8402 100644 --- a/src/cmd/compile/internal/gc/order.go +++ b/src/cmd/compile/internal/gc/order.go @@ -208,9 +208,9 @@ func (o *Order) addrTemp(n *Node) *Node { dowidth(n.Type) vstat := staticname(n.Type) vstat.Name.SetReadonly(true) - var out []*Node - staticassign(vstat, n, &out) - if out != nil { + var s InitSchedule + s.staticassign(vstat, n) + if s.out != nil { Fatalf("staticassign of const generated code: %+v", n) } vstat = typecheck(vstat, ctxExpr) @@ -380,66 +380,16 @@ func (o *Order) init(n *Node) { n.Ninit.Set(nil) } -// Ismulticall reports whether the list l is f() for a multi-value function. -// Such an f() could appear as the lone argument to a multi-arg function. -func ismulticall(l Nodes) bool { - // one arg only - if l.Len() != 1 { - return false - } - n := l.First() - - // must be call - switch n.Op { - default: - return false - case OCALLFUNC, OCALLMETH, OCALLINTER: - // call must return multiple values - return n.Left.Type.NumResults() > 1 - } -} - -// copyRet emits t1, t2, ... = n, where n is a function call, -// and then returns the list t1, t2, .... -func (o *Order) copyRet(n *Node) []*Node { - if !n.Type.IsFuncArgStruct() { - Fatalf("copyret %v %d", n.Type, n.Left.Type.NumResults()) - } - - slice := n.Type.Fields().Slice() - l1 := make([]*Node, len(slice)) - l2 := make([]*Node, len(slice)) - for i, t := range slice { - tmp := temp(t.Type) - l1[i] = tmp - l2[i] = tmp - } - - as := nod(OAS2, nil, nil) - as.List.Set(l1) - as.Rlist.Set1(n) - as = typecheck(as, ctxStmt) - o.stmt(as) - - return l2 -} - -// callArgs orders the list of call arguments *l. -func (o *Order) callArgs(l *Nodes) { - if ismulticall(*l) { - // return f() where f() is multiple values. - l.Set(o.copyRet(l.First())) - } else { - o.exprList(*l) - } -} - // call orders the call expression n. // n.Op is OCALLMETH/OCALLFUNC/OCALLINTER or a builtin like OCOPY. func (o *Order) call(n *Node) { + if n.Ninit.Len() > 0 { + // Caller should have already called o.init(n). + Fatalf("%v with unexpected ninit", n.Op) + } n.Left = o.expr(n.Left, nil) n.Right = o.expr(n.Right, nil) // ODDDARG temp - o.callArgs(&n.List) + o.exprList(n.List) if n.Op != OCALLFUNC { return @@ -632,6 +582,7 @@ func (o *Order) stmt(n *Node) { case OAS2FUNC: t := o.markTemp() o.exprList(n.List) + o.init(n.Rlist.First()) o.call(n.Rlist.First()) o.as2(n) o.cleanTemp(t) @@ -691,6 +642,7 @@ func (o *Order) stmt(n *Node) { // Special: order arguments to inner call but not call itself. case ODEFER, OGO: t := o.markTemp() + o.init(n.Left) o.call(n.Left) o.out = append(o.out, n) o.cleanTemp(t) @@ -811,7 +763,7 @@ func (o *Order) stmt(n *Node) { o.cleanTemp(t) case ORETURN: - o.callArgs(&n.List) + o.exprList(n.List) o.out = append(o.out, n) // Special: clean case temporaries in each block entry. @@ -1108,10 +1060,10 @@ func (o *Order) expr(n, lhs *Node) *Node { if n.Left.Type.IsInterface() { break } - if _, needsaddr := convFuncName(n.Left.Type, n.Type); needsaddr || consttype(n.Left) > 0 { + if _, needsaddr := convFuncName(n.Left.Type, n.Type); needsaddr || isStaticCompositeLiteral(n.Left) { // Need a temp if we need to pass the address to the conversion function. - // We also process constants here, making a named static global whose - // address we can put directly in an interface (see OCONVIFACE case in walk). + // We also process static composite literal node here, making a named static global + // whose address we can put directly in an interface (see OCONVIFACE case in walk). n.Left = o.addrTemp(n.Left) } @@ -1130,14 +1082,40 @@ func (o *Order) expr(n, lhs *Node) *Node { } case OANDAND, OOROR: - mark := o.markTemp() - n.Left = o.expr(n.Left, nil) + // ... = LHS && RHS + // + // var r bool + // r = LHS + // if r { // or !r, for OROR + // r = RHS + // } + // ... = r - // Clean temporaries from first branch at beginning of second. - // Leave them on the stack so that they can be killed in the outer - // context in case the short circuit is taken. - n.Right = addinit(n.Right, o.cleanTempNoPop(mark)) - n.Right = o.exprInPlace(n.Right) + r := o.newTemp(n.Type, false) + + // Evaluate left-hand side. + lhs := o.expr(n.Left, nil) + o.out = append(o.out, typecheck(nod(OAS, r, lhs), ctxStmt)) + + // Evaluate right-hand side, save generated code. + saveout := o.out + o.out = nil + t := o.markTemp() + rhs := o.expr(n.Right, nil) + o.out = append(o.out, typecheck(nod(OAS, r, rhs), ctxStmt)) + o.cleanTemp(t) + gen := o.out + o.out = saveout + + // If left-hand side doesn't cause a short-circuit, issue right-hand side. + nif := nod(OIF, r, nil) + if n.Op == OANDAND { + nif.Nbody.Set(gen) + } else { + nif.Rlist.Set(gen) + } + o.out = append(o.out, nif) + n = r case OCALLFUNC, OCALLINTER, @@ -1174,7 +1152,7 @@ func (o *Order) expr(n, lhs *Node) *Node { n.List.SetFirst(o.expr(n.List.First(), nil)) // order x n.List.Second().Left = o.expr(n.List.Second().Left, nil) // order y } else { - o.callArgs(&n.List) + o.exprList(n.List) } if lhs == nil || lhs.Op != ONAME && !samesafeexpr(lhs, n.List.First()) { @@ -1261,6 +1239,64 @@ func (o *Order) expr(n, lhs *Node) *Node { n.Left = o.addrTemp(n.Left) n.Right = o.addrTemp(n.Right) } + case OMAPLIT: + // Order map by converting: + // map[int]int{ + // a(): b(), + // c(): d(), + // e(): f(), + // } + // to + // m := map[int]int{} + // m[a()] = b() + // m[c()] = d() + // m[e()] = f() + // Then order the result. + // Without this special case, order would otherwise compute all + // the keys and values before storing any of them to the map. + // See issue 26552. + entries := n.List.Slice() + statics := entries[:0] + var dynamics []*Node + for _, r := range entries { + if r.Op != OKEY { + Fatalf("OMAPLIT entry not OKEY: %v\n", r) + } + + if !isStaticCompositeLiteral(r.Left) || !isStaticCompositeLiteral(r.Right) { + dynamics = append(dynamics, r) + continue + } + + // Recursively ordering some static entries can change them to dynamic; + // e.g., OCONVIFACE nodes. See #31777. + r = o.expr(r, nil) + if !isStaticCompositeLiteral(r.Left) || !isStaticCompositeLiteral(r.Right) { + dynamics = append(dynamics, r) + continue + } + + statics = append(statics, r) + } + n.List.Set(statics) + + if len(dynamics) == 0 { + break + } + + // Emit the creation of the map (with all its static entries). + m := o.newTemp(n.Type, false) + as := nod(OAS, m, n) + typecheck(as, ctxStmt) + o.stmt(as) + n = m + + // Emit eval+insert of dynamic entries, one at a time. + for _, r := range dynamics { + as := nod(OAS, nod(OINDEX, n, r.Left), r.Right) + typecheck(as, ctxStmt) // Note: this converts the OINDEX to an OINDEXMAP + o.stmt(as) + } } lineno = lno diff --git a/src/cmd/compile/internal/gc/pgen.go b/src/cmd/compile/internal/gc/pgen.go index 6914e3c5f8..2ae7452e7d 100644 --- a/src/cmd/compile/internal/gc/pgen.go +++ b/src/cmd/compile/internal/gc/pgen.go @@ -266,7 +266,7 @@ func compile(fn *Node) { // Also make sure we allocate a linker symbol // for the stack object data, for the same reason. if fn.Func.lsym.Func.StackObjects == nil { - fn.Func.lsym.Func.StackObjects = lookup(fmt.Sprintf("%s.stkobj", fn.funcname())).Linksym() + fn.Func.lsym.Func.StackObjects = Ctxt.Lookup(fn.Func.lsym.Name + ".stkobj") } } } @@ -348,7 +348,7 @@ func compileFunctions() { // Compile the longest functions first, // since they're most likely to be the slowest. // This helps avoid stragglers. - obj.SortSlice(compilequeue, func(i, j int) bool { + sort.Slice(compilequeue, func(i, j int) bool { return compilequeue[i].Nbody.Len() > compilequeue[j].Nbody.Len() }) } @@ -553,11 +553,9 @@ func createDwarfVars(fnsym *obj.LSym, fn *Func, automDecls []*Node) ([]*Node, [] decls, vars, selected = createSimpleVars(automDecls) } - var dcl []*Node + dcl := automDecls if fnsym.WasInlined() { dcl = preInliningDcls(fnsym) - } else { - dcl = automDecls } // If optimization is enabled, the list above will typically be @@ -595,8 +593,22 @@ func createDwarfVars(fnsym *obj.LSym, fn *Func, automDecls []*Node) ([]*Node, [] typename := dwarf.InfoPrefix + typesymname(n.Type) decls = append(decls, n) abbrev := dwarf.DW_ABRV_AUTO_LOCLIST + isReturnValue := (n.Class() == PPARAMOUT) if n.Class() == PPARAM || n.Class() == PPARAMOUT { abbrev = dwarf.DW_ABRV_PARAM_LOCLIST + } else if n.Class() == PAUTOHEAP { + // If dcl in question has been promoted to heap, do a bit + // of extra work to recover original class (auto or param); + // see issue 30908. This insures that we get the proper + // signature in the abstract function DIE, but leaves a + // misleading location for the param (we want pointer-to-heap + // and not stack). + // TODO(thanm): generate a better location expression + stackcopy := n.Name.Param.Stackcopy + if stackcopy != nil && (stackcopy.Class() == PPARAM || stackcopy.Class() == PPARAMOUT) { + abbrev = dwarf.DW_ABRV_PARAM_LOCLIST + isReturnValue = (stackcopy.Class() == PPARAMOUT) + } } inlIndex := 0 if genDwarfInline > 1 { @@ -610,7 +622,7 @@ func createDwarfVars(fnsym *obj.LSym, fn *Func, automDecls []*Node) ([]*Node, [] declpos := Ctxt.InnermostPos(n.Pos) vars = append(vars, &dwarf.Var{ Name: n.Sym.Name, - IsReturnValue: n.Class() == PPARAMOUT, + IsReturnValue: isReturnValue, Abbrev: abbrev, StackOffset: int32(n.Xoffset), Type: Ctxt.Lookup(typename), diff --git a/src/cmd/compile/internal/gc/range.go b/src/cmd/compile/internal/gc/range.go index 5c19d54e78..4d354f23cf 100644 --- a/src/cmd/compile/internal/gc/range.go +++ b/src/cmd/compile/internal/gc/range.go @@ -15,7 +15,7 @@ func typecheckrange(n *Node) { // Typechecking order is important here: // 0. first typecheck range expression (slice/map/chan), // it is evaluated only once and so logically it is not part of the loop. - // 1. typcheck produced values, + // 1. typecheck produced values, // this part can declare new vars and so it must be typechecked before body, // because body can contain a closure that captures the vars. // 2. decldepth++ to denote loop body. @@ -298,8 +298,8 @@ func walkrange(n *Node) *Node { hit := prealloc[n] th := hit.Type n.Left = nil - keysym := th.Field(0).Sym // depends on layout of iterator struct. See reflect.go:hiter - valsym := th.Field(1).Sym // ditto + keysym := th.Field(0).Sym // depends on layout of iterator struct. See reflect.go:hiter + elemsym := th.Field(1).Sym // ditto fn := syslook("mapiterinit") @@ -318,11 +318,11 @@ func walkrange(n *Node) *Node { } else if v2 == nil { body = []*Node{nod(OAS, v1, key)} } else { - val := nodSym(ODOT, hit, valsym) - val = nod(ODEREF, val, nil) + elem := nodSym(ODOT, hit, elemsym) + elem = nod(ODEREF, elem, nil) a := nod(OAS2, nil, nil) a.List.Set2(v1, v2) - a.Rlist.Set2(key, val) + a.Rlist.Set2(key, elem) body = []*Node{a} } diff --git a/src/cmd/compile/internal/gc/reflect.go b/src/cmd/compile/internal/gc/reflect.go index 3c6879c978..eade8f4a5e 100644 --- a/src/cmd/compile/internal/gc/reflect.go +++ b/src/cmd/compile/internal/gc/reflect.go @@ -56,9 +56,9 @@ type Sig struct { // program for it. // Make sure this stays in sync with runtime/map.go. const ( - BUCKETSIZE = 8 - MAXKEYSIZE = 128 - MAXVALSIZE = 128 + BUCKETSIZE = 8 + MAXKEYSIZE = 128 + MAXELEMSIZE = 128 ) func structfieldSize() int { return 3 * Widthptr } // Sizeof(runtime.structfield{}) @@ -86,14 +86,14 @@ func bmap(t *types.Type) *types.Type { bucket := types.New(TSTRUCT) keytype := t.Key() - valtype := t.Elem() + elemtype := t.Elem() dowidth(keytype) - dowidth(valtype) + dowidth(elemtype) if keytype.Width > MAXKEYSIZE { keytype = types.NewPtr(keytype) } - if valtype.Width > MAXVALSIZE { - valtype = types.NewPtr(valtype) + if elemtype.Width > MAXELEMSIZE { + elemtype = types.NewPtr(elemtype) } field := make([]*types.Field, 0, 5) @@ -107,10 +107,10 @@ func bmap(t *types.Type) *types.Type { keys := makefield("keys", arr) field = append(field, keys) - arr = types.NewArray(valtype, BUCKETSIZE) + arr = types.NewArray(elemtype, BUCKETSIZE) arr.SetNoalg(true) - values := makefield("values", arr) - field = append(field, values) + elems := makefield("elems", arr) + field = append(field, elems) // Make sure the overflow pointer is the last memory in the struct, // because the runtime assumes it can use size-ptrSize as the @@ -126,21 +126,21 @@ func bmap(t *types.Type) *types.Type { // will end with no padding. // On nacl/amd64p32, however, the max alignment is 64-bit, // but the overflow pointer will add only a 32-bit field, - // so if the struct needs 64-bit padding (because a key or value does) + // so if the struct needs 64-bit padding (because a key or elem does) // then it would end with an extra 32-bit padding field. // Preempt that by emitting the padding here. - if int(valtype.Align) > Widthptr || int(keytype.Align) > Widthptr { + if int(elemtype.Align) > Widthptr || int(keytype.Align) > Widthptr { field = append(field, makefield("pad", types.Types[TUINTPTR])) } - // If keys and values have no pointers, the map implementation + // If keys and elems have no pointers, the map implementation // can keep a list of overflow pointers on the side so that // buckets can be marked as having no pointers. // Arrange for the bucket to have no pointers by changing // the type of the overflow field to uintptr in this case. // See comment on hmap.overflow in runtime/map.go. otyp := types.NewPtr(bucket) - if !types.Haspointers(valtype) && !types.Haspointers(keytype) { + if !types.Haspointers(elemtype) && !types.Haspointers(keytype) { otyp = types.Types[TUINTPTR] } overflow := makefield("overflow", otyp) @@ -161,38 +161,38 @@ func bmap(t *types.Type) *types.Type { if keytype.Align > BUCKETSIZE { Fatalf("key align too big for %v", t) } - if valtype.Align > BUCKETSIZE { - Fatalf("value align too big for %v", t) + if elemtype.Align > BUCKETSIZE { + Fatalf("elem align too big for %v", t) } if keytype.Width > MAXKEYSIZE { Fatalf("key size to large for %v", t) } - if valtype.Width > MAXVALSIZE { - Fatalf("value size to large for %v", t) + if elemtype.Width > MAXELEMSIZE { + Fatalf("elem size to large for %v", t) } if t.Key().Width > MAXKEYSIZE && !keytype.IsPtr() { Fatalf("key indirect incorrect for %v", t) } - if t.Elem().Width > MAXVALSIZE && !valtype.IsPtr() { - Fatalf("value indirect incorrect for %v", t) + if t.Elem().Width > MAXELEMSIZE && !elemtype.IsPtr() { + Fatalf("elem indirect incorrect for %v", t) } if keytype.Width%int64(keytype.Align) != 0 { Fatalf("key size not a multiple of key align for %v", t) } - if valtype.Width%int64(valtype.Align) != 0 { - Fatalf("value size not a multiple of value align for %v", t) + if elemtype.Width%int64(elemtype.Align) != 0 { + Fatalf("elem size not a multiple of elem align for %v", t) } if bucket.Align%keytype.Align != 0 { Fatalf("bucket align not multiple of key align %v", t) } - if bucket.Align%valtype.Align != 0 { - Fatalf("bucket align not multiple of value align %v", t) + if bucket.Align%elemtype.Align != 0 { + Fatalf("bucket align not multiple of elem align %v", t) } if keys.Offset%int64(keytype.Align) != 0 { Fatalf("bad alignment of keys in bmap for %v", t) } - if values.Offset%int64(valtype.Align) != 0 { - Fatalf("bad alignment of values in bmap for %v", t) + if elems.Offset%int64(elemtype.Align) != 0 { + Fatalf("bad alignment of elems in bmap for %v", t) } // Double-check that overflow field is final memory in struct, @@ -270,7 +270,7 @@ func hiter(t *types.Type) *types.Type { // build a struct: // type hiter struct { // key *Key - // val *Value + // elem *Elem // t unsafe.Pointer // *MapType // h *hmap // buckets *bmap @@ -287,8 +287,8 @@ func hiter(t *types.Type) *types.Type { // } // must match runtime/map.go:hiter. fields := []*types.Field{ - makefield("key", types.NewPtr(t.Key())), // Used in range.go for TMAP. - makefield("val", types.NewPtr(t.Elem())), // Used in range.go for TMAP. + makefield("key", types.NewPtr(t.Key())), // Used in range.go for TMAP. + makefield("elem", types.NewPtr(t.Elem())), // Used in range.go for TMAP. makefield("t", types.Types[TUNSAFEPTR]), makefield("h", types.NewPtr(hmap)), makefield("buckets", types.NewPtr(bmap)), @@ -477,12 +477,10 @@ func dimportpath(p *types.Pkg) { return } - var str string + str := p.Path if p == localpkg { // Note: myimportpath != "", or else dgopkgpath won't call dimportpath. str = myimportpath - } else { - str = p.Path } s := Ctxt.Lookup("type..importpath." + p.Prefix + ".") @@ -884,9 +882,6 @@ func dcommontype(lsym *obj.LSym, t *types.Type) int { ot = duint8(lsym, ot, t.Align) // fieldAlign i = kinds[t.Etype] - if !types.Haspointers(t) { - i |= objabi.KindNoPointers - } if isdirectiface(t) { i |= objabi.KindDirectIface } @@ -1289,7 +1284,7 @@ func dtypesym(t *types.Type) *obj.LSym { ot = duint8(lsym, ot, uint8(t.Key().Width)) } - if t.Elem().Width > MAXVALSIZE { + if t.Elem().Width > MAXELEMSIZE { ot = duint8(lsym, ot, uint8(Widthptr)) flags |= 2 // indirect value } else { @@ -1926,7 +1921,7 @@ func (p *GCProg) emit(t *types.Type, offset int64) { // size bytes of zeros. func zeroaddr(size int64) *Node { if size >= 1<<31 { - Fatalf("map value too big %d", size) + Fatalf("map elem too big %d", size) } if zerosize < size { zerosize = size diff --git a/src/cmd/compile/internal/gc/scc.go b/src/cmd/compile/internal/gc/scc.go new file mode 100644 index 0000000000..0428a6af8d --- /dev/null +++ b/src/cmd/compile/internal/gc/scc.go @@ -0,0 +1,122 @@ +// 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 gc + +// Strongly connected components. +// +// Run analysis on minimal sets of mutually recursive functions +// or single non-recursive functions, bottom up. +// +// Finding these sets is finding strongly connected components +// by reverse topological order in the static call graph. +// The algorithm (known as Tarjan's algorithm) for doing that is taken from +// Sedgewick, Algorithms, Second Edition, p. 482, with two adaptations. +// +// First, a hidden closure function (n.Func.IsHiddenClosure()) cannot be the +// root of a connected component. Refusing to use it as a root +// forces it into the component of the function in which it appears. +// This is more convenient for escape analysis. +// +// Second, each function becomes two virtual nodes in the graph, +// with numbers n and n+1. We record the function's node number as n +// but search from node n+1. If the search tells us that the component +// number (min) is n+1, we know that this is a trivial component: one function +// plus its closures. If the search tells us that the component number is +// n, then there was a path from node n+1 back to node n, meaning that +// the function set is mutually recursive. The escape analysis can be +// more precise when analyzing a single non-recursive function than +// when analyzing a set of mutually recursive functions. + +type bottomUpVisitor struct { + analyze func([]*Node, bool) + visitgen uint32 + nodeID map[*Node]uint32 + stack []*Node +} + +// visitBottomUp invokes analyze on the ODCLFUNC nodes listed in list. +// It calls analyze with successive groups of functions, working from +// the bottom of the call graph upward. Each time analyze is called with +// a list of functions, every function on that list only calls other functions +// on the list or functions that have been passed in previous invocations of +// analyze. Closures appear in the same list as their outer functions. +// The lists are as short as possible while preserving those requirements. +// (In a typical program, many invocations of analyze will be passed just +// a single function.) The boolean argument 'recursive' passed to analyze +// specifies whether the functions on the list are mutually recursive. +// If recursive is false, the list consists of only a single function and its closures. +// If recursive is true, the list may still contain only a single function, +// if that function is itself recursive. +func visitBottomUp(list []*Node, analyze func(list []*Node, recursive bool)) { + var v bottomUpVisitor + v.analyze = analyze + v.nodeID = make(map[*Node]uint32) + for _, n := range list { + if n.Op == ODCLFUNC && !n.Func.IsHiddenClosure() { + v.visit(n) + } + } +} + +func (v *bottomUpVisitor) visit(n *Node) uint32 { + if id := v.nodeID[n]; id > 0 { + // already visited + return id + } + + v.visitgen++ + id := v.visitgen + v.nodeID[n] = id + v.visitgen++ + min := v.visitgen + v.stack = append(v.stack, n) + + inspectList(n.Nbody, func(n *Node) bool { + switch n.Op { + case OCALLFUNC, OCALLMETH: + fn := asNode(n.Left.Type.Nname()) + if fn != nil && fn.Op == ONAME && fn.Class() == PFUNC && fn.Name.Defn != nil { + if m := v.visit(fn.Name.Defn); m < min { + min = m + } + } + case OCLOSURE: + if m := v.visit(n.Func.Closure); m < min { + min = m + } + } + return true + }) + + if (min == id || min == id+1) && !n.Func.IsHiddenClosure() { + // This node is the root of a strongly connected component. + + // The original min passed to visitcodelist was v.nodeID[n]+1. + // If visitcodelist found its way back to v.nodeID[n], then this + // block is a set of mutually recursive functions. + // Otherwise it's just a lone function that does not recurse. + recursive := min == id + + // Remove connected component from stack. + // Mark walkgen so that future visits return a large number + // so as not to affect the caller's min. + + var i int + for i = len(v.stack) - 1; i >= 0; i-- { + x := v.stack[i] + if x == n { + break + } + v.nodeID[x] = ^uint32(0) + } + v.nodeID[n] = ^uint32(0) + block := v.stack[i:] + // Run escape analysis on this set of functions. + v.stack = v.stack[:i] + v.analyze(block, recursive) + } + + return min +} diff --git a/src/cmd/compile/internal/gc/scope.go b/src/cmd/compile/internal/gc/scope.go index 3d543084bc..d7239d5693 100644 --- a/src/cmd/compile/internal/gc/scope.go +++ b/src/cmd/compile/internal/gc/scope.go @@ -55,14 +55,6 @@ func scopeVariables(dwarfVars []*dwarf.Var, varScopes []ScopeID, dwarfScopes []d } } -// A scopedPCs represents a non-empty half-open interval of PCs that -// share a common source position. -type scopedPCs struct { - start, end int64 - pos src.XPos - scope ScopeID -} - // scopePCs assigns PC ranges to their scopes. func scopePCs(fnsym *obj.LSym, marks []Mark, dwarfScopes []dwarf.Scope) { // If there aren't any child scopes (in particular, when scope @@ -70,36 +62,18 @@ func scopePCs(fnsym *obj.LSym, marks []Mark, dwarfScopes []dwarf.Scope) { if len(marks) == 0 { return } - - // Break function text into scopedPCs. - var pcs []scopedPCs p0 := fnsym.Func.Text + scope := findScope(marks, p0.Pos) for p := fnsym.Func.Text; p != nil; p = p.Link { if p.Pos == p0.Pos { continue } - if p0.Pc < p.Pc { - pcs = append(pcs, scopedPCs{start: p0.Pc, end: p.Pc, pos: p0.Pos}) - } + dwarfScopes[scope].AppendRange(dwarf.Range{Start: p0.Pc, End: p.Pc}) p0 = p + scope = findScope(marks, p0.Pos) } if p0.Pc < fnsym.Size { - pcs = append(pcs, scopedPCs{start: p0.Pc, end: fnsym.Size, pos: p0.Pos}) - } - - // Assign scopes to each chunk of instructions. - for i := range pcs { - pcs[i].scope = findScope(marks, pcs[i].pos) - } - - // Create sorted PC ranges for each DWARF scope. - for _, pc := range pcs { - r := &dwarfScopes[pc.scope].Ranges - if i := len(*r); i > 0 && (*r)[i-1].End == pc.start { - (*r)[i-1].End = pc.end - } else { - *r = append(*r, dwarf.Range{Start: pc.start, End: pc.end}) - } + dwarfScopes[scope].AppendRange(dwarf.Range{Start: p0.Pc, End: fnsym.Size}) } } diff --git a/src/cmd/compile/internal/gc/scope_test.go b/src/cmd/compile/internal/gc/scope_test.go index e327dc02af..d3af61824d 100644 --- a/src/cmd/compile/internal/gc/scope_test.go +++ b/src/cmd/compile/internal/gc/scope_test.go @@ -207,6 +207,7 @@ const detailOutput = false // corresponds to what we expect it to be. func TestScopeRanges(t *testing.T) { testenv.MustHaveGoBuild(t) + t.Parallel() if runtime.GOOS == "plan9" { t.Skip("skipping on plan9; no DWARF symbol table in executables") @@ -445,6 +446,7 @@ func gobuild(t *testing.T, dir string, optimized bool, testfile []testline) (str // See issue #23928. func TestEmptyDwarfRanges(t *testing.T) { testenv.MustHaveGoRun(t) + t.Parallel() if runtime.GOOS == "plan9" { t.Skip("skipping on plan9; no DWARF symbol table in executables") diff --git a/src/cmd/compile/internal/gc/sinit.go b/src/cmd/compile/internal/gc/sinit.go index efdaf1c3c5..eaccde99c1 100644 --- a/src/cmd/compile/internal/gc/sinit.go +++ b/src/cmd/compile/internal/gc/sinit.go @@ -26,28 +26,33 @@ type InitPlan struct { E []InitEntry } -var ( +type InitSchedule struct { + out []*Node initlist []*Node initplans map[*Node]*InitPlan - inittemps = make(map[*Node]*Node) -) + inittemps map[*Node]*Node +} + +func (s *InitSchedule) append(n *Node) { + s.out = append(s.out, n) +} // init1 walks the AST starting at n, and accumulates in out // the list of definitions needing init code in dependency order. -func init1(n *Node, out *[]*Node) { +func (s *InitSchedule) init1(n *Node) { if n == nil { return } - init1(n.Left, out) - init1(n.Right, out) + s.init1(n.Left) + s.init1(n.Right) for _, n1 := range n.List.Slice() { - init1(n1, out) + s.init1(n1) } if n.isMethodExpression() { // Methods called as Type.Method(receiver, ...). // Definitions for method expressions are stored in type->nname. - init1(asNode(n.Type.FuncType().Nname), out) + s.init1(asNode(n.Type.FuncType().Nname)) } if n.Op != ONAME { @@ -78,16 +83,16 @@ func init1(n *Node, out *[]*Node) { // a variable in the program, the tree walk will reach a cycle // involving that variable. if n.Class() != PFUNC { - foundinitloop(n, n) + s.foundinitloop(n, n) } - for i := len(initlist) - 1; i >= 0; i-- { - x := initlist[i] + for i := len(s.initlist) - 1; i >= 0; i-- { + x := s.initlist[i] if x == n { break } if x.Class() != PFUNC { - foundinitloop(n, x) + s.foundinitloop(n, x) } } @@ -97,7 +102,7 @@ func init1(n *Node, out *[]*Node) { // reached a new unvisited node. n.SetInitorder(InitPending) - initlist = append(initlist, n) + s.initlist = append(s.initlist, n) // make sure that everything n depends on is initialized. // n->defn is an assignment to n @@ -108,7 +113,7 @@ func init1(n *Node, out *[]*Node) { Fatalf("init1: bad defn") case ODCLFUNC: - init2list(defn.Nbody, out) + s.init2list(defn.Nbody) case OAS: if defn.Left != n { @@ -122,15 +127,15 @@ func init1(n *Node, out *[]*Node) { break } - init2(defn.Right, out) + s.init2(defn.Right) if Debug['j'] != 0 { fmt.Printf("%v\n", n.Sym) } - if n.isBlank() || !staticinit(n, out) { + if n.isBlank() || !s.staticinit(n) { if Debug['%'] != 0 { Dump("nonstatic", defn) } - *out = append(*out, defn) + s.append(defn) } case OAS2FUNC, OAS2MAPR, OAS2DOTTYPE, OAS2RECV: @@ -139,28 +144,28 @@ func init1(n *Node, out *[]*Node) { } defn.SetInitorder(InitPending) for _, n2 := range defn.Rlist.Slice() { - init1(n2, out) + s.init1(n2) } if Debug['%'] != 0 { Dump("nonstatic", defn) } - *out = append(*out, defn) + s.append(defn) defn.SetInitorder(InitDone) } } - last := len(initlist) - 1 - if initlist[last] != n { - Fatalf("bad initlist %v", initlist) + last := len(s.initlist) - 1 + if s.initlist[last] != n { + Fatalf("bad initlist %v", s.initlist) } - initlist[last] = nil // allow GC - initlist = initlist[:last] + s.initlist[last] = nil // allow GC + s.initlist = s.initlist[:last] n.SetInitorder(InitDone) } // foundinitloop prints an init loop error and exits. -func foundinitloop(node, visited *Node) { +func (s *InitSchedule) foundinitloop(node, visited *Node) { // If there have already been errors printed, // those errors probably confused us and // there might not be a loop. Let the user @@ -172,9 +177,9 @@ func foundinitloop(node, visited *Node) { // Find the index of node and visited in the initlist. var nodeindex, visitedindex int - for ; initlist[nodeindex] != node; nodeindex++ { + for ; s.initlist[nodeindex] != node; nodeindex++ { } - for ; initlist[visitedindex] != visited; visitedindex++ { + for ; s.initlist[visitedindex] != visited; visitedindex++ { } // There is a loop involving visited. We know about node and @@ -182,12 +187,12 @@ func foundinitloop(node, visited *Node) { fmt.Printf("%v: initialization loop:\n", visited.Line()) // Print visited -> ... -> n1 -> node. - for _, n := range initlist[visitedindex:] { + for _, n := range s.initlist[visitedindex:] { fmt.Printf("\t%v %v refers to\n", n.Line(), n.Sym) } // Print node -> ... -> visited. - for _, n := range initlist[nodeindex:visitedindex] { + for _, n := range s.initlist[nodeindex:visitedindex] { fmt.Printf("\t%v %v refers to\n", n.Line(), n.Sym) } @@ -196,7 +201,7 @@ func foundinitloop(node, visited *Node) { } // recurse over n, doing init1 everywhere. -func init2(n *Node, out *[]*Node) { +func (s *InitSchedule) init2(n *Node) { if n == nil || n.Initorder() == InitDone { return } @@ -205,38 +210,38 @@ func init2(n *Node, out *[]*Node) { Fatalf("name %v with ninit: %+v\n", n.Sym, n) } - init1(n, out) - init2(n.Left, out) - init2(n.Right, out) - init2list(n.Ninit, out) - init2list(n.List, out) - init2list(n.Rlist, out) - init2list(n.Nbody, out) + s.init1(n) + s.init2(n.Left) + s.init2(n.Right) + s.init2list(n.Ninit) + s.init2list(n.List) + s.init2list(n.Rlist) + s.init2list(n.Nbody) switch n.Op { case OCLOSURE: - init2list(n.Func.Closure.Nbody, out) + s.init2list(n.Func.Closure.Nbody) case ODOTMETH, OCALLPART: - init2(asNode(n.Type.FuncType().Nname), out) + s.init2(asNode(n.Type.FuncType().Nname)) } } -func init2list(l Nodes, out *[]*Node) { +func (s *InitSchedule) init2list(l Nodes) { for _, n := range l.Slice() { - init2(n, out) + s.init2(n) } } -func initreorder(l []*Node, out *[]*Node) { +func (s *InitSchedule) initreorder(l []*Node) { for _, n := range l { switch n.Op { case ODCLFUNC, ODCLCONST, ODCLTYPE: continue } - initreorder(n.Ninit.Slice(), out) + s.initreorder(n.Ninit.Slice()) n.Ninit.Set(nil) - init1(n, out) + s.init1(n) } } @@ -244,18 +249,19 @@ func initreorder(l []*Node, out *[]*Node) { // declarations and outputs the corresponding list of statements // to include in the init() function body. func initfix(l []*Node) []*Node { - var lout []*Node - initplans = make(map[*Node]*InitPlan) + s := InitSchedule{ + initplans: make(map[*Node]*InitPlan), + inittemps: make(map[*Node]*Node), + } lno := lineno - initreorder(l, &lout) + s.initreorder(l) lineno = lno - initplans = nil - return lout + return s.out } // compilation of top-level (static) assignments // into DATA statements if at all possible. -func staticinit(n *Node, out *[]*Node) bool { +func (s *InitSchedule) staticinit(n *Node) bool { if n.Op != ONAME || n.Class() != PEXTERN || n.Name.Defn == nil || n.Name.Defn.Op != OAS { Fatalf("staticinit") } @@ -263,12 +269,12 @@ func staticinit(n *Node, out *[]*Node) bool { lineno = n.Pos l := n.Name.Defn.Left r := n.Name.Defn.Right - return staticassign(l, r, out) + return s.staticassign(l, r) } // like staticassign but we are copying an already // initialized value r. -func staticcopy(l *Node, r *Node, out *[]*Node) bool { +func (s *InitSchedule) staticcopy(l *Node, r *Node) bool { if r.Op != ONAME { return false } @@ -294,12 +300,12 @@ func staticcopy(l *Node, r *Node, out *[]*Node) bool { switch r.Op { case ONAME: - if staticcopy(l, r, out) { + if s.staticcopy(l, r) { return true } // We may have skipped past one or more OCONVNOPs, so // use conv to ensure r is assignable to l (#13263). - *out = append(*out, nod(OAS, l, conv(r, l.Type))) + s.append(nod(OAS, l, conv(r, l.Type))) return true case OLITERAL: @@ -320,13 +326,13 @@ func staticcopy(l *Node, r *Node, out *[]*Node) bool { switch r.Left.Op { case OARRAYLIT, OSLICELIT, OSTRUCTLIT, OMAPLIT: // copy pointer - gdata(l, nod(OADDR, inittemps[r], nil), int(l.Type.Width)) + gdata(l, nod(OADDR, s.inittemps[r], nil), int(l.Type.Width)) return true } case OSLICELIT: // copy slice - a := inittemps[r] + a := s.inittemps[r] n := l.copy() n.Xoffset = l.Xoffset + int64(array_array) @@ -338,7 +344,7 @@ func staticcopy(l *Node, r *Node, out *[]*Node) bool { return true case OARRAYLIT, OSTRUCTLIT: - p := initplans[r] + p := s.initplans[r] n := l.copy() for i := range p.E { @@ -350,7 +356,7 @@ func staticcopy(l *Node, r *Node, out *[]*Node) bool { continue } ll := n.sepcopy() - if staticcopy(ll, e.Expr, out) { + if s.staticcopy(ll, e.Expr) { continue } // Requires computation, but we're @@ -359,7 +365,7 @@ func staticcopy(l *Node, r *Node, out *[]*Node) bool { rr.Type = ll.Type rr.Xoffset += e.Xoffset setlineno(rr) - *out = append(*out, nod(OAS, ll, rr)) + s.append(nod(OAS, ll, rr)) } return true @@ -368,14 +374,14 @@ func staticcopy(l *Node, r *Node, out *[]*Node) bool { return false } -func staticassign(l *Node, r *Node, out *[]*Node) bool { +func (s *InitSchedule) staticassign(l *Node, r *Node) bool { for r.Op == OCONVNOP { r = r.Left } switch r.Op { case ONAME: - return staticcopy(l, r, out) + return s.staticcopy(l, r) case OLITERAL: if isZero(r) { @@ -400,12 +406,12 @@ func staticassign(l *Node, r *Node, out *[]*Node) bool { // Init pointer. a := staticname(r.Left.Type) - inittemps[r] = a + s.inittemps[r] = a gdata(l, nod(OADDR, a, nil), int(l.Type.Width)) // Init underlying literal. - if !staticassign(a, r.Left, out) { - *out = append(*out, nod(OAS, a, r.Left)) + if !s.staticassign(a, r.Left) { + s.append(nod(OAS, a, r.Left)) } return true } @@ -419,12 +425,12 @@ func staticassign(l *Node, r *Node, out *[]*Node) bool { } case OSLICELIT: - initplan(r) + s.initplan(r) // Init slice. bound := r.Right.Int64() ta := types.NewArray(r.Type.Elem(), bound) a := staticname(ta) - inittemps[r] = a + s.inittemps[r] = a n := l.copy() n.Xoffset = l.Xoffset + int64(array_array) gdata(n, nod(OADDR, a, nil), Widthptr) @@ -438,9 +444,9 @@ func staticassign(l *Node, r *Node, out *[]*Node) bool { fallthrough case OARRAYLIT, OSTRUCTLIT: - initplan(r) + s.initplan(r) - p := initplans[r] + p := s.initplans[r] n := l.copy() for i := range p.E { e := &p.E[i] @@ -452,8 +458,8 @@ func staticassign(l *Node, r *Node, out *[]*Node) bool { } setlineno(e.Expr) a := n.sepcopy() - if !staticassign(a, e.Expr, out) { - *out = append(*out, nod(OAS, a, e.Expr)) + if !s.staticassign(a, e.Expr) { + s.append(nod(OAS, a, e.Expr)) } } @@ -516,15 +522,15 @@ func staticassign(l *Node, r *Node, out *[]*Node) bool { n.Type = val.Type setlineno(val) a := n.sepcopy() - if !staticassign(a, val, out) { - *out = append(*out, nod(OAS, a, val)) + if !s.staticassign(a, val) { + s.append(nod(OAS, a, val)) } } else { // Construct temp to hold val, write pointer to temp into n. a := staticname(val.Type) - inittemps[val] = a - if !staticassign(a, val, out) { - *out = append(*out, nod(OAS, a, val)) + s.inittemps[val] = a + if !s.staticassign(a, val) { + s.append(nod(OAS, a, val)) } ptr := nod(OADDR, a, nil) n.Type = types.NewPtr(val.Type) @@ -555,6 +561,13 @@ const ( inNonInitFunction ) +func (c initContext) String() string { + if c == inInitFunction { + return "inInitFunction" + } + return "inNonInitFunction" +} + // from here down is the walk analysis // of composite literals. // most of the work is to generate @@ -729,6 +742,7 @@ func fixedlit(ctxt initContext, kind initKind, n *Node, var_ *Node, init *Nodes) if r.Sym.IsBlank() { return nblank, r.Left } + setlineno(r) return nodSym(ODOT, var_, r.Sym), r.Left } default: @@ -756,7 +770,7 @@ func fixedlit(ctxt initContext, kind initKind, n *Node, var_ *Node, init *Nodes) } // build list of assignments: var[index] = expr - setlineno(value) + setlineno(a) a = nod(OAS, a, value) a = typecheck(a, ctxStmt) switch kind { @@ -913,7 +927,13 @@ func slicelit(ctxt initContext, n *Node, var_ *Node, init *Nodes) { break case OARRAYLIT, OSTRUCTLIT: - fixedlit(ctxt, initKindDynamic, value, a, init) + k := initKindDynamic + if vstat == nil { + // Generate both static and dynamic initializations. + // See issue #31987. + k = initKindLocalCode + } + fixedlit(ctxt, k, value, a, init) continue } @@ -947,52 +967,48 @@ func maplit(n *Node, m *Node, init *Nodes) { a.List.Set2(typenod(n.Type), nodintconst(int64(n.List.Len()))) litas(m, a, init) - // Split the initializers into static and dynamic. - var stat, dyn []*Node - for _, r := range n.List.Slice() { - if r.Op != OKEY { - Fatalf("maplit: rhs not OKEY: %v", r) - } - if isStaticCompositeLiteral(r.Left) && isStaticCompositeLiteral(r.Right) { - stat = append(stat, r) - } else { - dyn = append(dyn, r) + entries := n.List.Slice() + + // The order pass already removed any dynamic (runtime-computed) entries. + // All remaining entries are static. Double-check that. + for _, r := range entries { + if !isStaticCompositeLiteral(r.Left) || !isStaticCompositeLiteral(r.Right) { + Fatalf("maplit: entry is not a literal: %v", r) } } - // Add static entries. - if len(stat) > 25 { - // For a large number of static entries, put them in an array and loop. + if len(entries) > 25 { + // For a large number of entries, put them in an array and loop. // build types [count]Tindex and [count]Tvalue - tk := types.NewArray(n.Type.Key(), int64(len(stat))) - tv := types.NewArray(n.Type.Elem(), int64(len(stat))) + tk := types.NewArray(n.Type.Key(), int64(len(entries))) + te := types.NewArray(n.Type.Elem(), int64(len(entries))) // TODO(josharian): suppress alg generation for these types? dowidth(tk) - dowidth(tv) + dowidth(te) // make and initialize static arrays vstatk := staticname(tk) vstatk.Name.SetReadonly(true) - vstatv := staticname(tv) - vstatv.Name.SetReadonly(true) + vstate := staticname(te) + vstate.Name.SetReadonly(true) datak := nod(OARRAYLIT, nil, nil) - datav := nod(OARRAYLIT, nil, nil) - for _, r := range stat { + datae := nod(OARRAYLIT, nil, nil) + for _, r := range entries { datak.List.Append(r.Left) - datav.List.Append(r.Right) + datae.List.Append(r.Right) } fixedlit(inInitFunction, initKindStatic, datak, vstatk, init) - fixedlit(inInitFunction, initKindStatic, datav, vstatv, init) + fixedlit(inInitFunction, initKindStatic, datae, vstate, init) // loop adding structure elements to map // for i = 0; i < len(vstatk); i++ { - // map[vstatk[i]] = vstatv[i] + // map[vstatk[i]] = vstate[i] // } i := temp(types.Types[TINT]) - rhs := nod(OINDEX, vstatv, i) + rhs := nod(OINDEX, vstate, i) rhs.SetBounded(true) kidx := nod(OINDEX, vstatk, i) @@ -1011,58 +1027,42 @@ func maplit(n *Node, m *Node, init *Nodes) { loop = typecheck(loop, ctxStmt) loop = walkstmt(loop) init.Append(loop) - } else { - // For a small number of static entries, just add them directly. - addMapEntries(m, stat, init) - } - - // Add dynamic entries. - addMapEntries(m, dyn, init) -} - -func addMapEntries(m *Node, dyn []*Node, init *Nodes) { - if len(dyn) == 0 { return } - - nerr := nerrors + // For a small number of entries, just add them directly. // Build list of var[c] = expr. - // Use temporaries so that mapassign1 can have addressable key, val. + // Use temporaries so that mapassign1 can have addressable key, elem. // TODO(josharian): avoid map key temporaries for mapfast_* assignments with literal keys. - key := temp(m.Type.Key()) - val := temp(m.Type.Elem()) + tmpkey := temp(m.Type.Key()) + tmpelem := temp(m.Type.Elem()) - for _, r := range dyn { - index, value := r.Left, r.Right + for _, r := range entries { + index, elem := r.Left, r.Right setlineno(index) - a := nod(OAS, key, index) + a := nod(OAS, tmpkey, index) a = typecheck(a, ctxStmt) a = walkstmt(a) init.Append(a) - setlineno(value) - a = nod(OAS, val, value) + setlineno(elem) + a = nod(OAS, tmpelem, elem) a = typecheck(a, ctxStmt) a = walkstmt(a) init.Append(a) - setlineno(val) - a = nod(OAS, nod(OINDEX, m, key), val) + setlineno(tmpelem) + a = nod(OAS, nod(OINDEX, m, tmpkey), tmpelem) a = typecheck(a, ctxStmt) a = walkstmt(a) init.Append(a) - - if nerr != nerrors { - break - } } - a := nod(OVARKILL, key, nil) + a = nod(OVARKILL, tmpkey, nil) a = typecheck(a, ctxStmt) init.Append(a) - a = nod(OVARKILL, val, nil) + a = nod(OVARKILL, tmpelem, nil) a = typecheck(a, ctxStmt) init.Append(a) } @@ -1073,6 +1073,11 @@ func anylit(n *Node, var_ *Node, init *Nodes) { default: Fatalf("anylit: not lit, op=%v node=%v", n.Op, n) + case ONAME: + a := nod(OAS, var_, n) + a = typecheck(a, ctxStmt) + init.Append(a) + case OPTRLIT: if !t.IsPtr() { Fatalf("anylit: not ptr") @@ -1242,12 +1247,12 @@ func stataddr(nam *Node, n *Node) bool { return false } -func initplan(n *Node) { - if initplans[n] != nil { +func (s *InitSchedule) initplan(n *Node) { + if s.initplans[n] != nil { return } p := new(InitPlan) - initplans[n] = p + s.initplans[n] = p switch n.Op { default: Fatalf("initplan") @@ -1262,7 +1267,7 @@ func initplan(n *Node) { } a = a.Right } - addvalue(p, k*n.Type.Elem().Width, a) + s.addvalue(p, k*n.Type.Elem().Width, a) k++ } @@ -1271,7 +1276,10 @@ func initplan(n *Node) { if a.Op != OSTRUCTKEY { Fatalf("initplan structlit") } - addvalue(p, a.Xoffset, a.Left) + if a.Sym.IsBlank() { + continue + } + s.addvalue(p, a.Xoffset, a.Left) } case OMAPLIT: @@ -1279,12 +1287,12 @@ func initplan(n *Node) { if a.Op != OKEY { Fatalf("initplan maplit") } - addvalue(p, -1, a.Right) + s.addvalue(p, -1, a.Right) } } } -func addvalue(p *InitPlan, xoffset int64, n *Node) { +func (s *InitSchedule) addvalue(p *InitPlan, xoffset int64, n *Node) { // special case: zero can be dropped entirely if isZero(n) { return @@ -1292,8 +1300,8 @@ func addvalue(p *InitPlan, xoffset int64, n *Node) { // special case: inline struct and array (not slice) literals if isvaluelit(n) { - initplan(n) - q := initplans[n] + s.initplan(n) + q := s.initplans[n] for _, qe := range q.E { // qe is a copy; we are not modifying entries in q.E qe.Xoffset += xoffset diff --git a/src/cmd/compile/internal/gc/ssa.go b/src/cmd/compile/internal/gc/ssa.go index c8befa40cd..cafff01ddc 100644 --- a/src/cmd/compile/internal/gc/ssa.go +++ b/src/cmd/compile/internal/gc/ssa.go @@ -76,14 +76,13 @@ func initssaconfig() { growslice = sysfunc("growslice") msanread = sysfunc("msanread") msanwrite = sysfunc("msanwrite") + newobject = sysfunc("newobject") newproc = sysfunc("newproc") panicdivide = sysfunc("panicdivide") panicdottypeE = sysfunc("panicdottypeE") panicdottypeI = sysfunc("panicdottypeI") - panicindex = sysfunc("panicindex") panicnildottype = sysfunc("panicnildottype") panicoverflow = sysfunc("panicoverflow") - panicslice = sysfunc("panicslice") panicshift = sysfunc("panicshift") raceread = sysfunc("raceread") racereadrange = sysfunc("racereadrange") @@ -96,6 +95,61 @@ func initssaconfig() { typedmemmove = sysfunc("typedmemmove") Udiv = sysvar("udiv") // asm func with special ABI writeBarrier = sysvar("writeBarrier") // struct { bool; ... } + zerobaseSym = sysvar("zerobase") + + if thearch.LinkArch.Family == sys.Wasm { + BoundsCheckFunc[ssa.BoundsIndex] = sysvar("goPanicIndex") + BoundsCheckFunc[ssa.BoundsIndexU] = sysvar("goPanicIndexU") + BoundsCheckFunc[ssa.BoundsSliceAlen] = sysvar("goPanicSliceAlen") + BoundsCheckFunc[ssa.BoundsSliceAlenU] = sysvar("goPanicSliceAlenU") + BoundsCheckFunc[ssa.BoundsSliceAcap] = sysvar("goPanicSliceAcap") + BoundsCheckFunc[ssa.BoundsSliceAcapU] = sysvar("goPanicSliceAcapU") + BoundsCheckFunc[ssa.BoundsSliceB] = sysvar("goPanicSliceB") + BoundsCheckFunc[ssa.BoundsSliceBU] = sysvar("goPanicSliceBU") + BoundsCheckFunc[ssa.BoundsSlice3Alen] = sysvar("goPanicSlice3Alen") + BoundsCheckFunc[ssa.BoundsSlice3AlenU] = sysvar("goPanicSlice3AlenU") + BoundsCheckFunc[ssa.BoundsSlice3Acap] = sysvar("goPanicSlice3Acap") + BoundsCheckFunc[ssa.BoundsSlice3AcapU] = sysvar("goPanicSlice3AcapU") + BoundsCheckFunc[ssa.BoundsSlice3B] = sysvar("goPanicSlice3B") + BoundsCheckFunc[ssa.BoundsSlice3BU] = sysvar("goPanicSlice3BU") + BoundsCheckFunc[ssa.BoundsSlice3C] = sysvar("goPanicSlice3C") + BoundsCheckFunc[ssa.BoundsSlice3CU] = sysvar("goPanicSlice3CU") + } else { + BoundsCheckFunc[ssa.BoundsIndex] = sysvar("panicIndex") + BoundsCheckFunc[ssa.BoundsIndexU] = sysvar("panicIndexU") + BoundsCheckFunc[ssa.BoundsSliceAlen] = sysvar("panicSliceAlen") + BoundsCheckFunc[ssa.BoundsSliceAlenU] = sysvar("panicSliceAlenU") + BoundsCheckFunc[ssa.BoundsSliceAcap] = sysvar("panicSliceAcap") + BoundsCheckFunc[ssa.BoundsSliceAcapU] = sysvar("panicSliceAcapU") + BoundsCheckFunc[ssa.BoundsSliceB] = sysvar("panicSliceB") + BoundsCheckFunc[ssa.BoundsSliceBU] = sysvar("panicSliceBU") + BoundsCheckFunc[ssa.BoundsSlice3Alen] = sysvar("panicSlice3Alen") + BoundsCheckFunc[ssa.BoundsSlice3AlenU] = sysvar("panicSlice3AlenU") + BoundsCheckFunc[ssa.BoundsSlice3Acap] = sysvar("panicSlice3Acap") + BoundsCheckFunc[ssa.BoundsSlice3AcapU] = sysvar("panicSlice3AcapU") + BoundsCheckFunc[ssa.BoundsSlice3B] = sysvar("panicSlice3B") + BoundsCheckFunc[ssa.BoundsSlice3BU] = sysvar("panicSlice3BU") + BoundsCheckFunc[ssa.BoundsSlice3C] = sysvar("panicSlice3C") + BoundsCheckFunc[ssa.BoundsSlice3CU] = sysvar("panicSlice3CU") + } + if thearch.LinkArch.PtrSize == 4 { + ExtendCheckFunc[ssa.BoundsIndex] = sysvar("panicExtendIndex") + ExtendCheckFunc[ssa.BoundsIndexU] = sysvar("panicExtendIndexU") + ExtendCheckFunc[ssa.BoundsSliceAlen] = sysvar("panicExtendSliceAlen") + ExtendCheckFunc[ssa.BoundsSliceAlenU] = sysvar("panicExtendSliceAlenU") + ExtendCheckFunc[ssa.BoundsSliceAcap] = sysvar("panicExtendSliceAcap") + ExtendCheckFunc[ssa.BoundsSliceAcapU] = sysvar("panicExtendSliceAcapU") + ExtendCheckFunc[ssa.BoundsSliceB] = sysvar("panicExtendSliceB") + ExtendCheckFunc[ssa.BoundsSliceBU] = sysvar("panicExtendSliceBU") + ExtendCheckFunc[ssa.BoundsSlice3Alen] = sysvar("panicExtendSlice3Alen") + ExtendCheckFunc[ssa.BoundsSlice3AlenU] = sysvar("panicExtendSlice3AlenU") + ExtendCheckFunc[ssa.BoundsSlice3Acap] = sysvar("panicExtendSlice3Acap") + ExtendCheckFunc[ssa.BoundsSlice3AcapU] = sysvar("panicExtendSlice3AcapU") + ExtendCheckFunc[ssa.BoundsSlice3B] = sysvar("panicExtendSlice3B") + ExtendCheckFunc[ssa.BoundsSlice3BU] = sysvar("panicExtendSlice3BU") + ExtendCheckFunc[ssa.BoundsSlice3C] = sysvar("panicExtendSlice3C") + ExtendCheckFunc[ssa.BoundsSlice3CU] = sysvar("panicExtendSlice3CU") + } // GO386=387 runtime definitions ControlWord64trunc = sysvar("controlWord64trunc") // uint16 @@ -575,6 +629,11 @@ func (s *state) newValue4(op ssa.Op, t *types.Type, arg0, arg1, arg2, arg3 *ssa. return s.curBlock.NewValue4(s.peekPos(), op, t, arg0, arg1, arg2, arg3) } +// newValue4 adds a new value with four arguments and an auxint value to the current block. +func (s *state) newValue4I(op ssa.Op, t *types.Type, aux int64, arg0, arg1, arg2, arg3 *ssa.Value) *ssa.Value { + return s.curBlock.NewValue4I(s.peekPos(), op, t, aux, arg0, arg1, arg2, arg3) +} + // entryNewValue0 adds a new value with no arguments to the entry block. func (s *state) entryNewValue0(op ssa.Op, t *types.Type) *ssa.Value { return s.f.Entry.NewValue0(src.NoXPos, op, t) @@ -994,26 +1053,32 @@ func (s *state) stmt(n *Node) { s.assign(n.Left, r, deref, skip) case OIF: - bThen := s.f.NewBlock(ssa.BlockPlain) bEnd := s.f.NewBlock(ssa.BlockPlain) - var bElse *ssa.Block var likely int8 if n.Likely() { likely = 1 } + var bThen *ssa.Block + if n.Nbody.Len() != 0 { + bThen = s.f.NewBlock(ssa.BlockPlain) + } else { + bThen = bEnd + } + var bElse *ssa.Block if n.Rlist.Len() != 0 { bElse = s.f.NewBlock(ssa.BlockPlain) - s.condBranch(n.Left, bThen, bElse, likely) } else { - s.condBranch(n.Left, bThen, bEnd, likely) + bElse = bEnd } + s.condBranch(n.Left, bThen, bElse, likely) - s.startBlock(bThen) - s.stmtList(n.Nbody) - if b := s.endBlock(); b != nil { - b.AddEdgeTo(bEnd) + if n.Nbody.Len() != 0 { + s.startBlock(bThen) + s.stmtList(n.Nbody) + if b := s.endBlock(); b != nil { + b.AddEdgeTo(bEnd) + } } - if n.Rlist.Len() != 0 { s.startBlock(bElse) s.stmtList(n.Rlist) @@ -1071,6 +1136,9 @@ func (s *state) stmt(n *Node) { bIncr := s.f.NewBlock(ssa.BlockPlain) bEnd := s.f.NewBlock(ssa.BlockPlain) + // ensure empty for loops have correct position; issue #30167 + bBody.Pos = n.Pos + // first, jump to condition test (OFOR) or body (OFORUNTIL) b := s.endBlock() if n.Op == OFOR { @@ -2026,7 +2094,7 @@ func (s *state) expr(n *Node) *ssa.Value { addop := ssa.OpAdd64F subop := ssa.OpSub64F pt := floatForComplex(n.Type) // Could be Float32 or Float64 - wt := types.Types[TFLOAT64] // Compute in Float64 to minimize cancelation error + wt := types.Types[TFLOAT64] // Compute in Float64 to minimize cancellation error areal := s.newValue1(ssa.OpComplexReal, pt, a) breal := s.newValue1(ssa.OpComplexReal, pt, b) @@ -2069,7 +2137,7 @@ func (s *state) expr(n *Node) *ssa.Value { subop := ssa.OpSub64F divop := ssa.OpDiv64F pt := floatForComplex(n.Type) // Could be Float32 or Float64 - wt := types.Types[TFLOAT64] // Compute in Float64 to minimize cancelation error + wt := types.Types[TFLOAT64] // Compute in Float64 to minimize cancellation error areal := s.newValue1(ssa.OpComplexReal, pt, a) breal := s.newValue1(ssa.OpComplexReal, pt, b) @@ -2208,7 +2276,7 @@ func (s *state) expr(n *Node) *ssa.Value { case OADDR: return s.addr(n.Left, n.Bounded()) - case OINDREGSP: + case ORESULT: addr := s.constOffPtrSP(types.NewPtr(n.Type), n.Xoffset) return s.load(n.Type, addr) @@ -2253,11 +2321,8 @@ func (s *state) expr(n *Node) *ssa.Value { } a := s.expr(n.Left) i := s.expr(n.Right) - i = s.extendIndex(i, panicindex) - if !n.Bounded() { - len := s.newValue1(ssa.OpStringLen, types.Types[TINT], a) - s.boundsCheck(i, len) - } + len := s.newValue1(ssa.OpStringLen, types.Types[TINT], a) + i = s.boundsCheck(i, len, ssa.BoundsIndex, n.Bounded()) ptrtyp := s.f.Config.Types.BytePtr ptr := s.newValue1(ssa.OpStringPtr, ptrtyp, a) if Isconst(n.Right, CTINT) { @@ -2279,14 +2344,12 @@ func (s *state) expr(n *Node) *ssa.Value { // Bounds check will never succeed. Might as well // use constants for the bounds check. z := s.constInt(types.Types[TINT], 0) - s.boundsCheck(z, z) + s.boundsCheck(z, z, ssa.BoundsIndex, false) // The return value won't be live, return junk. return s.newValue0(ssa.OpUnknown, n.Type) } - i = s.extendIndex(i, panicindex) - if !n.Bounded() { - s.boundsCheck(i, s.constInt(types.Types[TINT], bound)) - } + len := s.constInt(types.Types[TINT], bound) + i = s.boundsCheck(i, len, ssa.BoundsIndex, n.Bounded()) return s.newValue1I(ssa.OpArraySelect, n.Type, 0, a) } p := s.addr(n, false) @@ -2344,15 +2407,15 @@ func (s *state) expr(n *Node) *ssa.Value { var i, j, k *ssa.Value low, high, max := n.SliceBounds() if low != nil { - i = s.extendIndex(s.expr(low), panicslice) + i = s.expr(low) } if high != nil { - j = s.extendIndex(s.expr(high), panicslice) + j = s.expr(high) } if max != nil { - k = s.extendIndex(s.expr(max), panicslice) + k = s.expr(max) } - p, l, c := s.slice(n.Left.Type, v, i, j, k, n.Bounded()) + p, l, c := s.slice(v, i, j, k, n.Bounded()) return s.newValue3(ssa.OpSliceMake, n.Type, p, l, c) case OSLICESTR: @@ -2360,12 +2423,12 @@ func (s *state) expr(n *Node) *ssa.Value { var i, j *ssa.Value low, high, _ := n.SliceBounds() if low != nil { - i = s.extendIndex(s.expr(low), panicslice) + i = s.expr(low) } if high != nil { - j = s.extendIndex(s.expr(high), panicslice) + j = s.expr(high) } - p, l, _ := s.slice(n.Left.Type, v, i, j, nil, n.Bounded()) + p, l, _ := s.slice(v, i, j, nil, n.Bounded()) return s.newValue2(ssa.OpStringMake, n.Type, p, l) case OCALLFUNC: @@ -2393,6 +2456,14 @@ func (s *state) expr(n *Node) *ssa.Value { } return s.zeroVal(n.Type) + case ONEWOBJ: + if n.Type.Elem().Size() == 0 { + return s.newValue1A(ssa.OpAddr, n.Type, zerobaseSym, s.sb) + } + typ := s.expr(n.Left) + vv := s.rtcall(newobject, true, []*types.Type{n.Type}, typ) + return vv[0] + default: s.Fatalf("unhandled expr %v", n.Op) return nil @@ -2661,6 +2732,8 @@ func (s *state) assign(left *Node, right *ssa.Value, deref bool, skip skipMask) return } if left.Op == OINDEX && left.Left.Type.IsArray() { + s.pushLine(left.Pos) + defer s.popLine() // We're assigning to an element of an ssa-able array. // a[i] = v t := left.Left.Type @@ -2671,15 +2744,15 @@ func (s *state) assign(left *Node, right *ssa.Value, deref bool, skip skipMask) // The bounds check must fail. Might as well // ignore the actual index and just use zeros. z := s.constInt(types.Types[TINT], 0) - s.boundsCheck(z, z) + s.boundsCheck(z, z, ssa.BoundsIndex, false) return } if n != 1 { s.Fatalf("assigning to non-1-length array") } // Rewrite to a = [1]{v} - i = s.extendIndex(i, panicindex) - s.boundsCheck(i, s.constInt(types.Types[TINT], 1)) + len := s.constInt(types.Types[TINT], 1) + i = s.boundsCheck(i, len, ssa.BoundsIndex, false) v := s.newValue1(ssa.OpArrayMake1, t, right) s.assign(left.Left, v, false, 0) return @@ -3000,6 +3073,13 @@ func init() { return s.newValue1(ssa.OpSelect0, types.Types[TUINT32], v) }, sys.AMD64, sys.ARM64, sys.S390X, sys.MIPS, sys.MIPS64, sys.PPC64) + addF("runtime/internal/atomic", "Load8", + func(s *state, n *Node, args []*ssa.Value) *ssa.Value { + v := s.newValue2(ssa.OpAtomicLoad8, types.NewTuple(types.Types[TUINT8], types.TypeMem), args[0], s.mem()) + s.vars[&memVar] = s.newValue1(ssa.OpSelect1, types.TypeMem, v) + return s.newValue1(ssa.OpSelect0, types.Types[TUINT8], v) + }, + sys.AMD64, sys.ARM64, sys.S390X, sys.MIPS64, sys.PPC64) addF("runtime/internal/atomic", "Load64", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { v := s.newValue2(ssa.OpAtomicLoad64, types.NewTuple(types.Types[TUINT64], types.TypeMem), args[0], s.mem()) @@ -3181,22 +3261,22 @@ func init() { func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpSqrt, types.Types[TFLOAT64], args[0]) }, - sys.I386, sys.AMD64, sys.ARM, sys.ARM64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.S390X) + sys.I386, sys.AMD64, sys.ARM, sys.ARM64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.S390X, sys.Wasm) addF("math", "Trunc", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpTrunc, types.Types[TFLOAT64], args[0]) }, - sys.ARM64, sys.PPC64, sys.S390X) + sys.ARM64, sys.PPC64, sys.S390X, sys.Wasm) addF("math", "Ceil", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpCeil, types.Types[TFLOAT64], args[0]) }, - sys.ARM64, sys.PPC64, sys.S390X) + sys.ARM64, sys.PPC64, sys.S390X, sys.Wasm) addF("math", "Floor", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpFloor, types.Types[TFLOAT64], args[0]) }, - sys.ARM64, sys.PPC64, sys.S390X) + sys.ARM64, sys.PPC64, sys.S390X, sys.Wasm) addF("math", "Round", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpRound, types.Types[TFLOAT64], args[0]) @@ -3206,17 +3286,17 @@ func init() { func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpRoundToEven, types.Types[TFLOAT64], args[0]) }, - sys.ARM64, sys.S390X) + sys.ARM64, sys.S390X, sys.Wasm) addF("math", "Abs", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpAbs, types.Types[TFLOAT64], args[0]) }, - sys.ARM64, sys.PPC64) + sys.ARM64, sys.PPC64, sys.Wasm) addF("math", "Copysign", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue2(ssa.OpCopysign, types.Types[TFLOAT64], args[0], args[1]) }, - sys.PPC64) + sys.PPC64, sys.Wasm) makeRoundAMD64 := func(op ssa.Op) func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return func(s *state, n *Node, args []*ssa.Value) *ssa.Value { @@ -3266,12 +3346,12 @@ func init() { func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpCtz64, types.Types[TINT], args[0]) }, - sys.AMD64, sys.ARM64, sys.ARM, sys.S390X, sys.MIPS, sys.PPC64) + sys.AMD64, sys.ARM64, sys.ARM, sys.S390X, sys.MIPS, sys.PPC64, sys.Wasm) addF("math/bits", "TrailingZeros32", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpCtz32, types.Types[TINT], args[0]) }, - sys.AMD64, sys.ARM64, sys.ARM, sys.S390X, sys.MIPS, sys.PPC64) + sys.AMD64, sys.ARM64, sys.ARM, sys.S390X, sys.MIPS, sys.PPC64, sys.Wasm) addF("math/bits", "TrailingZeros16", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { x := s.newValue1(ssa.OpZeroExt16to32, types.Types[TUINT32], args[0]) @@ -3279,12 +3359,12 @@ func init() { y := s.newValue2(ssa.OpOr32, types.Types[TUINT32], x, c) return s.newValue1(ssa.OpCtz32, types.Types[TINT], y) }, - sys.ARM, sys.MIPS) + sys.MIPS) addF("math/bits", "TrailingZeros16", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpCtz16, types.Types[TINT], args[0]) }, - sys.AMD64) + sys.AMD64, sys.ARM, sys.ARM64, sys.Wasm) addF("math/bits", "TrailingZeros16", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { x := s.newValue1(ssa.OpZeroExt16to64, types.Types[TUINT64], args[0]) @@ -3292,7 +3372,7 @@ func init() { y := s.newValue2(ssa.OpOr64, types.Types[TUINT64], x, c) return s.newValue1(ssa.OpCtz64, types.Types[TINT], y) }, - sys.ARM64, sys.S390X, sys.PPC64) + sys.S390X, sys.PPC64) addF("math/bits", "TrailingZeros8", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { x := s.newValue1(ssa.OpZeroExt8to32, types.Types[TUINT32], args[0]) @@ -3300,12 +3380,12 @@ func init() { y := s.newValue2(ssa.OpOr32, types.Types[TUINT32], x, c) return s.newValue1(ssa.OpCtz32, types.Types[TINT], y) }, - sys.ARM, sys.MIPS) + sys.MIPS) addF("math/bits", "TrailingZeros8", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpCtz8, types.Types[TINT], args[0]) }, - sys.AMD64) + sys.AMD64, sys.ARM, sys.ARM64, sys.Wasm) addF("math/bits", "TrailingZeros8", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { x := s.newValue1(ssa.OpZeroExt8to64, types.Types[TUINT64], args[0]) @@ -3313,7 +3393,7 @@ func init() { y := s.newValue2(ssa.OpOr64, types.Types[TUINT64], x, c) return s.newValue1(ssa.OpCtz64, types.Types[TINT], y) }, - sys.ARM64, sys.S390X) + sys.S390X) alias("math/bits", "ReverseBytes64", "runtime/internal/sys", "Bswap64", all...) alias("math/bits", "ReverseBytes32", "runtime/internal/sys", "Bswap32", all...) // ReverseBytes inlines correctly, no need to intrinsify it. @@ -3322,12 +3402,12 @@ func init() { func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpBitLen64, types.Types[TINT], args[0]) }, - sys.AMD64, sys.ARM64, sys.ARM, sys.S390X, sys.MIPS, sys.PPC64) + sys.AMD64, sys.ARM64, sys.ARM, sys.S390X, sys.MIPS, sys.PPC64, sys.Wasm) addF("math/bits", "Len32", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpBitLen32, types.Types[TINT], args[0]) }, - sys.AMD64) + sys.AMD64, sys.ARM64) addF("math/bits", "Len32", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { if s.config.PtrSize == 4 { @@ -3336,7 +3416,7 @@ func init() { x := s.newValue1(ssa.OpZeroExt32to64, types.Types[TUINT64], args[0]) return s.newValue1(ssa.OpBitLen64, types.Types[TINT], x) }, - sys.ARM64, sys.ARM, sys.S390X, sys.MIPS, sys.PPC64) + sys.ARM, sys.S390X, sys.MIPS, sys.PPC64, sys.Wasm) addF("math/bits", "Len16", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { if s.config.PtrSize == 4 { @@ -3346,7 +3426,7 @@ func init() { x := s.newValue1(ssa.OpZeroExt16to64, types.Types[TUINT64], args[0]) return s.newValue1(ssa.OpBitLen64, types.Types[TINT], x) }, - sys.ARM64, sys.ARM, sys.S390X, sys.MIPS, sys.PPC64) + sys.ARM64, sys.ARM, sys.S390X, sys.MIPS, sys.PPC64, sys.Wasm) addF("math/bits", "Len16", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpBitLen16, types.Types[TINT], args[0]) @@ -3361,7 +3441,7 @@ func init() { x := s.newValue1(ssa.OpZeroExt8to64, types.Types[TUINT64], args[0]) return s.newValue1(ssa.OpBitLen64, types.Types[TINT], x) }, - sys.ARM64, sys.ARM, sys.S390X, sys.MIPS, sys.PPC64) + sys.ARM64, sys.ARM, sys.S390X, sys.MIPS, sys.PPC64, sys.Wasm) addF("math/bits", "Len8", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpBitLen8, types.Types[TINT], args[0]) @@ -3374,7 +3454,7 @@ func init() { } return s.newValue1(ssa.OpBitLen64, types.Types[TINT], args[0]) }, - sys.AMD64, sys.ARM64, sys.ARM, sys.S390X, sys.MIPS, sys.PPC64) + sys.AMD64, sys.ARM64, sys.ARM, sys.S390X, sys.MIPS, sys.PPC64, sys.Wasm) // LeadingZeros is handled because it trivially calls Len. addF("math/bits", "Reverse64", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { @@ -3418,12 +3498,12 @@ func init() { func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue2(ssa.OpRotateLeft32, types.Types[TUINT32], args[0], args[1]) }, - sys.AMD64, sys.ARM64, sys.S390X) + sys.AMD64, sys.ARM64, sys.S390X, sys.PPC64) addF("math/bits", "RotateLeft64", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue2(ssa.OpRotateLeft64, types.Types[TUINT64], args[0], args[1]) }, - sys.AMD64, sys.ARM64, sys.S390X) + sys.AMD64, sys.ARM64, sys.S390X, sys.PPC64, sys.Wasm) alias("math/bits", "RotateLeft", "math/bits", "RotateLeft64", p8...) makeOnesCountAMD64 := func(op64 ssa.Op, op32 ssa.Op) func(s *state, n *Node, args []*ssa.Value) *ssa.Value { @@ -3467,7 +3547,7 @@ func init() { func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpPopCount64, types.Types[TINT], args[0]) }, - sys.PPC64, sys.ARM64, sys.S390X) + sys.PPC64, sys.ARM64, sys.S390X, sys.Wasm) addF("math/bits", "OnesCount32", makeOnesCountAMD64(ssa.OpPopCount32, ssa.OpPopCount32), sys.AMD64) @@ -3475,7 +3555,7 @@ func init() { func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpPopCount32, types.Types[TINT], args[0]) }, - sys.PPC64, sys.ARM64, sys.S390X) + sys.PPC64, sys.ARM64, sys.S390X, sys.Wasm) addF("math/bits", "OnesCount16", makeOnesCountAMD64(ssa.OpPopCount16, ssa.OpPopCount16), sys.AMD64) @@ -3483,12 +3563,12 @@ func init() { func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpPopCount16, types.Types[TINT], args[0]) }, - sys.ARM64, sys.S390X, sys.PPC64) + sys.ARM64, sys.S390X, sys.PPC64, sys.Wasm) addF("math/bits", "OnesCount8", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue1(ssa.OpPopCount8, types.Types[TINT], args[0]) }, - sys.S390X, sys.PPC64) + sys.S390X, sys.PPC64, sys.Wasm) addF("math/bits", "OnesCount", makeOnesCountAMD64(ssa.OpPopCount64, ssa.OpPopCount32), sys.AMD64) @@ -3502,14 +3582,14 @@ func init() { func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue3(ssa.OpAdd64carry, types.NewTuple(types.Types[TUINT64], types.Types[TUINT64]), args[0], args[1], args[2]) }, - sys.AMD64) - alias("math/bits", "Add", "math/bits", "Add64", sys.ArchAMD64) + sys.AMD64, sys.ARM64, sys.PPC64, sys.S390X) + alias("math/bits", "Add", "math/bits", "Add64", sys.ArchAMD64, sys.ArchARM64, sys.ArchPPC64, sys.ArchS390X) addF("math/bits", "Sub64", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { return s.newValue3(ssa.OpSub64borrow, types.NewTuple(types.Types[TUINT64], types.Types[TUINT64]), args[0], args[1], args[2]) }, - sys.AMD64) - alias("math/bits", "Sub", "math/bits", "Sub64", sys.ArchAMD64) + sys.AMD64, sys.ARM64, sys.S390X) + alias("math/bits", "Sub", "math/bits", "Sub64", sys.ArchAMD64, sys.ArchARM64, sys.ArchS390X) addF("math/bits", "Div64", func(s *state, n *Node, args []*ssa.Value) *ssa.Value { // check for divide-by-zero/overflow and panic with appropriate message @@ -3823,6 +3903,11 @@ func etypesign(e types.EType) int8 { // If bounded is true then this address does not require a nil check for its operand // even if that would otherwise be implied. func (s *state) addr(n *Node, bounded bool) *ssa.Value { + if n.Op != ONAME { + s.pushLine(n.Pos) + defer s.popLine() + } + t := types.NewPtr(n.Type) switch n.Op { case ONAME: @@ -3858,29 +3943,22 @@ func (s *state) addr(n *Node, bounded bool) *ssa.Value { s.Fatalf("variable address class %v not implemented", n.Class()) return nil } - case OINDREGSP: - // indirect off REGSP - // used for storing/loading arguments/returns to/from callees + case ORESULT: + // load return from callee return s.constOffPtrSP(t, n.Xoffset) case OINDEX: if n.Left.Type.IsSlice() { a := s.expr(n.Left) i := s.expr(n.Right) - i = s.extendIndex(i, panicindex) len := s.newValue1(ssa.OpSliceLen, types.Types[TINT], a) - if !n.Bounded() { - s.boundsCheck(i, len) - } + i = s.boundsCheck(i, len, ssa.BoundsIndex, n.Bounded()) p := s.newValue1(ssa.OpSlicePtr, t, a) return s.newValue2(ssa.OpPtrIndex, t, p, i) } else { // array a := s.addr(n.Left, bounded) i := s.expr(n.Right) - i = s.extendIndex(i, panicindex) len := s.constInt(types.Types[TINT], n.Left.Type.NumElem()) - if !n.Bounded() { - s.boundsCheck(i, len) - } + i = s.boundsCheck(i, len, ssa.BoundsIndex, n.Bounded()) return s.newValue2(ssa.OpPtrIndex, types.NewPtr(n.Left.Type.Elem()), a, i) } case ODEREF: @@ -4019,51 +4097,70 @@ func (s *state) nilCheck(ptr *ssa.Value) { s.newValue2(ssa.OpNilCheck, types.TypeVoid, ptr, s.mem()) } -// boundsCheck generates bounds checking code. Checks if 0 <= idx < len, branches to exit if not. +// boundsCheck generates bounds checking code. Checks if 0 <= idx <[=] len, branches to exit if not. // Starts a new block on return. -// idx is already converted to full int width. -func (s *state) boundsCheck(idx, len *ssa.Value) { - if Debug['B'] != 0 { - return +// On input, len must be converted to full int width and be nonnegative. +// Returns idx converted to full int width. +// If bounded is true then caller guarantees the index is not out of bounds +// (but boundsCheck will still extend the index to full int width). +func (s *state) boundsCheck(idx, len *ssa.Value, kind ssa.BoundsKind, bounded bool) *ssa.Value { + idx = s.extendIndex(idx, len, kind, bounded) + + if bounded || Debug['B'] != 0 { + // If bounded or bounds checking is flag-disabled, then no check necessary, + // just return the extended index. + return idx } - // bounds check - cmp := s.newValue2(ssa.OpIsInBounds, types.Types[TBOOL], idx, len) - s.check(cmp, panicindex) -} + bNext := s.f.NewBlock(ssa.BlockPlain) + bPanic := s.f.NewBlock(ssa.BlockExit) -func couldBeNegative(v *ssa.Value) bool { - switch v.Op { - case ssa.OpSliceLen, ssa.OpSliceCap, ssa.OpStringLen: - return false - case ssa.OpConst64: - return v.AuxInt < 0 - case ssa.OpConst32: - return int32(v.AuxInt) < 0 - } - return true -} - -// sliceBoundsCheck generates slice bounds checking code. Checks if 0 <= idx <= len, branches to exit if not. -// Starts a new block on return. -// idx and len are already converted to full int width. -func (s *state) sliceBoundsCheck(idx, len *ssa.Value) { - if Debug['B'] != 0 { - return - } - if couldBeNegative(len) { - // OpIsSliceInBounds requires second arg not negative; if it's not obviously true, must check. - cmpop := ssa.OpGeq64 - if len.Type.Size() == 4 { - cmpop = ssa.OpGeq32 + if !idx.Type.IsSigned() { + switch kind { + case ssa.BoundsIndex: + kind = ssa.BoundsIndexU + case ssa.BoundsSliceAlen: + kind = ssa.BoundsSliceAlenU + case ssa.BoundsSliceAcap: + kind = ssa.BoundsSliceAcapU + case ssa.BoundsSliceB: + kind = ssa.BoundsSliceBU + case ssa.BoundsSlice3Alen: + kind = ssa.BoundsSlice3AlenU + case ssa.BoundsSlice3Acap: + kind = ssa.BoundsSlice3AcapU + case ssa.BoundsSlice3B: + kind = ssa.BoundsSlice3BU + case ssa.BoundsSlice3C: + kind = ssa.BoundsSlice3CU } - cmp := s.newValue2(cmpop, types.Types[TBOOL], len, s.zeroVal(len.Type)) - s.check(cmp, panicslice) } - // bounds check - cmp := s.newValue2(ssa.OpIsSliceInBounds, types.Types[TBOOL], idx, len) - s.check(cmp, panicslice) + var cmp *ssa.Value + if kind == ssa.BoundsIndex || kind == ssa.BoundsIndexU { + cmp = s.newValue2(ssa.OpIsInBounds, types.Types[TBOOL], idx, len) + } else { + cmp = s.newValue2(ssa.OpIsSliceInBounds, types.Types[TBOOL], idx, len) + } + b := s.endBlock() + b.Kind = ssa.BlockIf + b.SetControl(cmp) + b.Likely = ssa.BranchLikely + b.AddEdgeTo(bNext) + b.AddEdgeTo(bPanic) + + s.startBlock(bPanic) + if thearch.LinkArch.Family == sys.Wasm { + // TODO(khr): figure out how to do "register" based calling convention for bounds checks. + // Should be similar to gcWriteBarrier, but I can't make it work. + s.rtcall(BoundsCheckFunc[kind], false, nil, idx, len) + } else { + mem := s.newValue3I(ssa.OpPanicBounds, types.TypeMem, int64(kind), idx, len, s.mem()) + s.endBlock().SetControl(mem) + } + s.startBlock(bNext) + + return idx } // If cmp (a bool) is false, panic using the given function. @@ -4275,35 +4372,25 @@ func (s *state) storeArg(n *Node, t *types.Type, off int64) { // slice computes the slice v[i:j:k] and returns ptr, len, and cap of result. // i,j,k may be nil, in which case they are set to their default value. -// t is a slice, ptr to array, or string type. -func (s *state) slice(t *types.Type, v, i, j, k *ssa.Value, bounded bool) (p, l, c *ssa.Value) { - var elemtype *types.Type - var ptrtype *types.Type - var ptr *ssa.Value - var len *ssa.Value - var cap *ssa.Value - zero := s.constInt(types.Types[TINT], 0) +// v may be a slice, string or pointer to an array. +func (s *state) slice(v, i, j, k *ssa.Value, bounded bool) (p, l, c *ssa.Value) { + t := v.Type + var ptr, len, cap *ssa.Value switch { case t.IsSlice(): - elemtype = t.Elem() - ptrtype = types.NewPtr(elemtype) - ptr = s.newValue1(ssa.OpSlicePtr, ptrtype, v) + ptr = s.newValue1(ssa.OpSlicePtr, types.NewPtr(t.Elem()), v) len = s.newValue1(ssa.OpSliceLen, types.Types[TINT], v) cap = s.newValue1(ssa.OpSliceCap, types.Types[TINT], v) case t.IsString(): - elemtype = types.Types[TUINT8] - ptrtype = types.NewPtr(elemtype) - ptr = s.newValue1(ssa.OpStringPtr, ptrtype, v) + ptr = s.newValue1(ssa.OpStringPtr, types.NewPtr(types.Types[TUINT8]), v) len = s.newValue1(ssa.OpStringLen, types.Types[TINT], v) cap = len case t.IsPtr(): if !t.Elem().IsArray() { s.Fatalf("bad ptr to array in slice %v\n", t) } - elemtype = t.Elem().Elem() - ptrtype = types.NewPtr(elemtype) s.nilCheck(v) - ptr = v + ptr = s.newValue1(ssa.OpCopy, types.NewPtr(t.Elem().Elem()), v) len = s.constInt(types.Types[TINT], t.Elem().NumElem()) cap = len default: @@ -4312,67 +4399,90 @@ func (s *state) slice(t *types.Type, v, i, j, k *ssa.Value, bounded bool) (p, l, // Set default values if i == nil { - i = zero + i = s.constInt(types.Types[TINT], 0) } if j == nil { j = len } + three := true if k == nil { + three = false k = cap } - if !bounded { - // Panic if slice indices are not in bounds. - s.sliceBoundsCheck(i, j) - if j != k { - s.sliceBoundsCheck(j, k) - } + // Panic if slice indices are not in bounds. + // Make sure we check these in reverse order so that we're always + // comparing against a value known to be nonnegative. See issue 28797. + if three { if k != cap { - s.sliceBoundsCheck(k, cap) + kind := ssa.BoundsSlice3Alen + if t.IsSlice() { + kind = ssa.BoundsSlice3Acap + } + k = s.boundsCheck(k, cap, kind, bounded) } + if j != k { + j = s.boundsCheck(j, k, ssa.BoundsSlice3B, bounded) + } + i = s.boundsCheck(i, j, ssa.BoundsSlice3C, bounded) + } else { + if j != k { + kind := ssa.BoundsSliceAlen + if t.IsSlice() { + kind = ssa.BoundsSliceAcap + } + j = s.boundsCheck(j, k, kind, bounded) + } + i = s.boundsCheck(i, j, ssa.BoundsSliceB, bounded) } - // Generate the following code assuming that indexes are in bounds. - // The masking is to make sure that we don't generate a slice - // that points to the next object in memory. - // rlen = j - i - // rcap = k - i - // delta = i * elemsize - // rptr = p + delta&mask(rcap) - // result = (SliceMake rptr rlen rcap) - // where mask(x) is 0 if x==0 and -1 if x>0. + // Word-sized integer operations. subOp := s.ssaOp(OSUB, types.Types[TINT]) mulOp := s.ssaOp(OMUL, types.Types[TINT]) andOp := s.ssaOp(OAND, types.Types[TINT]) + + // Calculate the length (rlen) and capacity (rcap) of the new slice. + // For strings the capacity of the result is unimportant. However, + // we use rcap to test if we've generated a zero-length slice. + // Use length of strings for that. rlen := s.newValue2(subOp, types.Types[TINT], j, i) - var rcap *ssa.Value - switch { - case t.IsString(): - // Capacity of the result is unimportant. However, we use - // rcap to test if we've generated a zero-length slice. - // Use length of strings for that. - rcap = rlen - case j == k: - rcap = rlen - default: + rcap := rlen + if j != k && !t.IsString() { rcap = s.newValue2(subOp, types.Types[TINT], k, i) } - var rptr *ssa.Value if (i.Op == ssa.OpConst64 || i.Op == ssa.OpConst32) && i.AuxInt == 0 { // No pointer arithmetic necessary. - rptr = ptr - } else { - // delta = # of bytes to offset pointer by. - delta := s.newValue2(mulOp, types.Types[TINT], i, s.constInt(types.Types[TINT], elemtype.Width)) - // If we're slicing to the point where the capacity is zero, - // zero out the delta. - mask := s.newValue1(ssa.OpSlicemask, types.Types[TINT], rcap) - delta = s.newValue2(andOp, types.Types[TINT], delta, mask) - // Compute rptr = ptr + delta - rptr = s.newValue2(ssa.OpAddPtr, ptrtype, ptr, delta) + return ptr, rlen, rcap } + // Calculate the base pointer (rptr) for the new slice. + // + // Generate the following code assuming that indexes are in bounds. + // The masking is to make sure that we don't generate a slice + // that points to the next object in memory. We cannot just set + // the pointer to nil because then we would create a nil slice or + // string. + // + // rcap = k - i + // rlen = j - i + // rptr = ptr + (mask(rcap) & (i * stride)) + // + // Where mask(x) is 0 if x==0 and -1 if x>0 and stride is the width + // of the element type. + stride := s.constInt(types.Types[TINT], ptr.Type.Elem().Width) + + // The delta is the number of bytes to offset ptr by. + delta := s.newValue2(mulOp, types.Types[TINT], i, stride) + + // If we're slicing to the point where the capacity is zero, + // zero out the delta. + mask := s.newValue1(ssa.OpSlicemask, types.Types[TINT], rcap) + delta = s.newValue2(andOp, types.Types[TINT], delta, mask) + + // Compute rptr = ptr + delta. + rptr := s.newValue2(ssa.OpAddPtr, ptr.Type, ptr, delta) + return rptr, rlen, rcap } @@ -4594,7 +4704,7 @@ var f32_u64 = f2uCvtTab{ or: ssa.OpOr64, floatValue: (*state).constFloat32, intValue: (*state).constInt64, - cutoff: 9223372036854775808, + cutoff: 1 << 63, } var f64_u64 = f2uCvtTab{ @@ -4604,7 +4714,7 @@ var f64_u64 = f2uCvtTab{ or: ssa.OpOr64, floatValue: (*state).constFloat64, intValue: (*state).constInt64, - cutoff: 9223372036854775808, + cutoff: 1 << 63, } var f32_u32 = f2uCvtTab{ @@ -4614,7 +4724,7 @@ var f32_u32 = f2uCvtTab{ or: ssa.OpOr32, floatValue: (*state).constFloat32, intValue: func(s *state, t *types.Type, v int64) *ssa.Value { return s.constInt32(t, int32(v)) }, - cutoff: 2147483648, + cutoff: 1 << 31, } var f64_u32 = f2uCvtTab{ @@ -4624,7 +4734,7 @@ var f64_u32 = f2uCvtTab{ or: ssa.OpOr32, floatValue: (*state).constFloat64, intValue: func(s *state, t *types.Type, v int64) *ssa.Value { return s.constInt32(t, int32(v)) }, - cutoff: 2147483648, + cutoff: 1 << 31, } func (s *state) float32ToUint64(n *Node, x *ssa.Value, ft, tt *types.Type) *ssa.Value { @@ -5138,6 +5248,16 @@ func genssa(f *ssa.Func, pp *Progs) { } } + // inlMarks has an entry for each Prog that implements an inline mark. + // It maps from that Prog to the global inlining id of the inlined body + // which should unwind to this Prog's location. + var inlMarks map[*obj.Prog]int32 + var inlMarkList []*obj.Prog + + // inlMarksByPos maps from a (column 1) source position to the set of + // Progs that are in the set above and have that source position. + var inlMarksByPos map[src.XPos][]*obj.Prog + // Emit basic blocks for i, b := range f.Blocks { s.bstart[b.ID] = s.pp.next @@ -5175,8 +5295,14 @@ func genssa(f *ssa.Func, pp *Progs) { } case ssa.OpInlMark: p := thearch.Ginsnop(s.pp) - pp.curfn.Func.lsym.Func.AddInlMark(p, v.AuxInt32()) - // TODO: if matching line number, merge somehow with previous instruction? + if inlMarks == nil { + inlMarks = map[*obj.Prog]int32{} + inlMarksByPos = map[src.XPos][]*obj.Prog{} + } + inlMarks[p] = v.AuxInt32() + inlMarkList = append(inlMarkList, p) + pos := v.Pos.AtColumn1() + inlMarksByPos[pos] = append(inlMarksByPos[pos], p) default: // let the backend handle it @@ -5198,6 +5324,12 @@ func genssa(f *ssa.Func, pp *Progs) { } } } + // If this is an empty infinite loop, stick a hardware NOP in there so that debuggers are less confused. + if s.bstart[b.ID] == s.pp.next && len(b.Succs) == 1 && b.Succs[0].Block() == b { + p := thearch.Ginsnop(s.pp) + p.Pos = p.Pos.WithIsStmt() + b.Pos = b.Pos.WithBogusLine() // Debuggers are not good about infinite loops, force a change in line number + } // Emit control flow instructions for block var next *ssa.Block if i < len(f.Blocks)-1 && Debug['N'] == 0 { @@ -5216,6 +5348,58 @@ func genssa(f *ssa.Func, pp *Progs) { } } } + if f.Blocks[len(f.Blocks)-1].Kind == ssa.BlockExit { + // We need the return address of a panic call to + // still be inside the function in question. So if + // it ends in a call which doesn't return, add a + // nop (which will never execute) after the call. + thearch.Ginsnop(pp) + } + + if inlMarks != nil { + // We have some inline marks. Try to find other instructions we're + // going to emit anyway, and use those instructions instead of the + // inline marks. + for p := pp.Text; p != nil; p = p.Link { + if p.As == obj.ANOP || p.As == obj.AFUNCDATA || p.As == obj.APCDATA || p.As == obj.ATEXT || p.As == obj.APCALIGN || thearch.LinkArch.Family == sys.Wasm { + // Don't use 0-sized instructions as inline marks, because we need + // to identify inline mark instructions by pc offset. + // (Some of these instructions are sometimes zero-sized, sometimes not. + // We must not use anything that even might be zero-sized.) + // TODO: are there others? + continue + } + if _, ok := inlMarks[p]; ok { + // Don't use inline marks themselves. We don't know + // whether they will be zero-sized or not yet. + continue + } + pos := p.Pos.AtColumn1() + s := inlMarksByPos[pos] + if len(s) == 0 { + continue + } + for _, m := range s { + // We found an instruction with the same source position as + // some of the inline marks. + // Use this instruction instead. + p.Pos = p.Pos.WithIsStmt() // promote position to a statement + pp.curfn.Func.lsym.Func.AddInlMark(p, inlMarks[m]) + // Make the inline mark a real nop, so it doesn't generate any code. + m.As = obj.ANOP + m.Pos = src.NoXPos + m.From = obj.Addr{} + m.To = obj.Addr{} + } + delete(inlMarksByPos, pos) + } + // Any unmatched inline marks now need to be added to the inlining tree (and will generate a nop instruction). + for _, p := range inlMarkList { + if p.As != obj.ANOP { + pp.curfn.Func.lsym.Func.AddInlMark(p, inlMarks[p]) + } + } + } if Ctxt.Flag_locationlists { e.curfn.Func.DebugInfo = ssa.BuildFuncDebug(Ctxt, f, Debug_locationlist > 1, stackOffset) @@ -5244,7 +5428,10 @@ func genssa(f *ssa.Func, pp *Progs) { br.P.To.Val = s.bstart[br.B.ID] if br.P.Pos.IsStmt() != src.PosIsStmt { br.P.Pos = br.P.Pos.WithNotStmt() + } else if v0 := br.B.FirstPossibleStmtValue(); v0 != nil && v0.Pos.Line() == br.P.Pos.Line() && v0.Pos.IsStmt() == src.PosIsStmt { + br.P.Pos = br.P.Pos.WithNotStmt() } + } if e.log { // spew to stdout @@ -5437,26 +5624,66 @@ func AddAux2(a *obj.Addr, v *ssa.Value, offset int64) { } // extendIndex extends v to a full int width. -// panic using the given function if v does not fit in an int (only on 32-bit archs). -func (s *state) extendIndex(v *ssa.Value, panicfn *obj.LSym) *ssa.Value { - size := v.Type.Size() +// panic with the given kind if v does not fit in an int (only on 32-bit archs). +func (s *state) extendIndex(idx, len *ssa.Value, kind ssa.BoundsKind, bounded bool) *ssa.Value { + size := idx.Type.Size() if size == s.config.PtrSize { - return v + return idx } if size > s.config.PtrSize { // truncate 64-bit indexes on 32-bit pointer archs. Test the // high word and branch to out-of-bounds failure if it is not 0. - if Debug['B'] == 0 { - hi := s.newValue1(ssa.OpInt64Hi, types.Types[TUINT32], v) - cmp := s.newValue2(ssa.OpEq32, types.Types[TBOOL], hi, s.constInt32(types.Types[TUINT32], 0)) - s.check(cmp, panicfn) + var lo *ssa.Value + if idx.Type.IsSigned() { + lo = s.newValue1(ssa.OpInt64Lo, types.Types[TINT], idx) + } else { + lo = s.newValue1(ssa.OpInt64Lo, types.Types[TUINT], idx) } - return s.newValue1(ssa.OpTrunc64to32, types.Types[TINT], v) + if bounded || Debug['B'] != 0 { + return lo + } + bNext := s.f.NewBlock(ssa.BlockPlain) + bPanic := s.f.NewBlock(ssa.BlockExit) + hi := s.newValue1(ssa.OpInt64Hi, types.Types[TUINT32], idx) + cmp := s.newValue2(ssa.OpEq32, types.Types[TBOOL], hi, s.constInt32(types.Types[TUINT32], 0)) + if !idx.Type.IsSigned() { + switch kind { + case ssa.BoundsIndex: + kind = ssa.BoundsIndexU + case ssa.BoundsSliceAlen: + kind = ssa.BoundsSliceAlenU + case ssa.BoundsSliceAcap: + kind = ssa.BoundsSliceAcapU + case ssa.BoundsSliceB: + kind = ssa.BoundsSliceBU + case ssa.BoundsSlice3Alen: + kind = ssa.BoundsSlice3AlenU + case ssa.BoundsSlice3Acap: + kind = ssa.BoundsSlice3AcapU + case ssa.BoundsSlice3B: + kind = ssa.BoundsSlice3BU + case ssa.BoundsSlice3C: + kind = ssa.BoundsSlice3CU + } + } + b := s.endBlock() + b.Kind = ssa.BlockIf + b.SetControl(cmp) + b.Likely = ssa.BranchLikely + b.AddEdgeTo(bNext) + b.AddEdgeTo(bPanic) + + s.startBlock(bPanic) + mem := s.newValue4I(ssa.OpPanicExtend, types.TypeMem, int64(kind), hi, lo, len, s.mem()) + s.endBlock().SetControl(mem) + s.startBlock(bNext) + + return lo } // Extend value to the required size var op ssa.Op - if v.Type.IsSigned() { + if idx.Type.IsSigned() { switch 10*size + s.config.PtrSize { case 14: op = ssa.OpSignExt8to32 @@ -5469,7 +5696,7 @@ func (s *state) extendIndex(v *ssa.Value, panicfn *obj.LSym) *ssa.Value { case 48: op = ssa.OpSignExt32to64 default: - s.Fatalf("bad signed index extension %s", v.Type) + s.Fatalf("bad signed index extension %s", idx.Type) } } else { switch 10*size + s.config.PtrSize { @@ -5484,10 +5711,10 @@ func (s *state) extendIndex(v *ssa.Value, panicfn *obj.LSym) *ssa.Value { case 48: op = ssa.OpZeroExt32to64 default: - s.Fatalf("bad unsigned index extension %s", v.Type) + s.Fatalf("bad unsigned index extension %s", idx.Type) } } - return s.newValue1(op, types.Types[TINT], v) + return s.newValue1(op, types.Types[TINT], idx) } // CheckLoweredPhi checks that regalloc and stackalloc correctly handled phi values. @@ -5617,6 +5844,14 @@ func (s *SSAGenState) PrepareCall(v *ssa.Value) { } } +// UseArgs records the fact that an instruction needs a certain amount of +// callee args space for its use. +func (s *SSAGenState) UseArgs(n int64) { + if s.maxarg < n { + s.maxarg = n + } +} + // fieldIdx finds the index of the field referred to by the ODOT node n. func fieldIdx(n *Node) int { t := n.Left.Type diff --git a/src/cmd/compile/internal/gc/subr.go b/src/cmd/compile/internal/gc/subr.go index 775147bff7..f3ec21c7cb 100644 --- a/src/cmd/compile/internal/gc/subr.go +++ b/src/cmd/compile/internal/gc/subr.go @@ -159,9 +159,7 @@ func yyerror(format string, args ...interface{}) { } func Warn(fmt_ string, args ...interface{}) { - adderr(lineno, fmt_, args...) - - hcrash() + Warnl(lineno, fmt_, args...) } func Warnl(line src.XPos, fmt_ string, args ...interface{}) { @@ -306,20 +304,20 @@ func nodl(pos src.XPos, op Op, nleft, nright *Node) *Node { switch op { case OCLOSURE, ODCLFUNC: var x struct { - Node - Func + n Node + f Func } - n = &x.Node - n.Func = &x.Func + n = &x.n + n.Func = &x.f case ONAME: Fatalf("use newname instead") case OLABEL, OPACK: var x struct { - Node - Name + n Node + m Name } - n = &x.Node - n.Name = &x.Name + n = &x.n + n.Name = &x.m default: n = new(Node) } @@ -347,13 +345,13 @@ func newnamel(pos src.XPos, s *types.Sym) *Node { } var x struct { - Node - Name - Param + n Node + m Name + p Param } - n := &x.Node - n.Name = &x.Name - n.Name.Param = &x.Param + n := &x.n + n.Name = &x.m + n.Name.Param = &x.p n.Op = ONAME n.Pos = pos @@ -416,12 +414,6 @@ func nodintconst(v int64) *Node { return nodlit(Val{u}) } -func nodfltconst(v *Mpflt) *Node { - u := newMpflt() - u.Set(v) - return nodlit(Val{u}) -} - func nodnil() *Node { return nodlit(Val{new(NilVal)}) } @@ -435,10 +427,9 @@ func nodstr(s string) *Node { } // treecopy recursively copies n, with the exception of -// ONAME, OLITERAL, OTYPE, and non-iota ONONAME leaves. -// Copies of iota ONONAME nodes are assigned the current -// value of iota_. If pos.IsKnown(), it sets the source -// position of newly allocated nodes to pos. +// ONAME, OLITERAL, OTYPE, and ONONAME leaves. +// If pos.IsKnown(), it sets the source position of newly +// allocated nodes to pos. func treecopy(n *Node, pos src.XPos) *Node { if n == nil { return nil @@ -1581,7 +1572,7 @@ func genwrapper(rcvr *types.Type, method *types.Field, newnam *types.Sym) { if rcvr.IsPtr() && rcvr.Elem() == method.Type.Recv().Type && rcvr.Elem().Sym != nil { inlcalls(fn) } - escAnalyze([]*Node{fn}, false) + escapeImpl()([]*Node{fn}, false) Curfn = nil funccompile(fn) diff --git a/src/cmd/compile/internal/gc/swt.go b/src/cmd/compile/internal/gc/swt.go index 70fc66bf57..6a41885954 100644 --- a/src/cmd/compile/internal/gc/swt.go +++ b/src/cmd/compile/internal/gc/swt.go @@ -184,18 +184,11 @@ func typecheckswitch(n *Node) { } } - if n.Type == nil || n.Type.IsUntyped() { - // if the value we're switching on has no type or is untyped, - // we've already printed an error and don't need to continue - // typechecking the body - return - } - if top == Etype { ll := ncase.List if ncase.Rlist.Len() != 0 { nvar := ncase.Rlist.First() - if ll.Len() == 1 && ll.First().Type != nil && !ll.First().Type.IsKind(TNIL) { + if ll.Len() == 1 && (ll.First().Type == nil || !ll.First().Type.IsKind(TNIL)) { // single entry type switch nvar.Type = ll.First().Type } else { @@ -203,6 +196,13 @@ func typecheckswitch(n *Node) { nvar.Type = n.Type } + if nvar.Type == nil || nvar.Type.IsUntyped() { + // if the value we're switching on has no type or is untyped, + // we've already printed an error and don't need to continue + // typechecking the body + continue + } + nvar = typecheck(nvar, ctxExpr|ctxAssign) ncase.Rlist.SetFirst(nvar) } diff --git a/src/cmd/compile/internal/gc/syntax.go b/src/cmd/compile/internal/gc/syntax.go index 5f07c6c52a..12bc9c3ae6 100644 --- a/src/cmd/compile/internal/gc/syntax.go +++ b/src/cmd/compile/internal/gc/syntax.go @@ -43,7 +43,7 @@ type Node struct { // Various. Usually an offset into a struct. For example: // - ONAME nodes that refer to local variables use it to identify their stack frame position. - // - ODOT, ODOTPTR, and OINDREGSP use it to indicate offset relative to their base address. + // - ODOT, ODOTPTR, and ORESULT use it to indicate offset relative to their base address. // - OSTRUCTKEY uses it to store the named field's offset. // - Named OLITERALs use it to store their ambient iota value. // - OINLMARK stores an index into the inlTree data structure. @@ -668,7 +668,8 @@ const ( ORSH // Left >> Right OAND // Left & Right OANDNOT // Left &^ Right - ONEW // new(Left) + ONEW // new(Left); corresponds to calls to new in source code + ONEWOBJ // runtime.newobject(n.Type); introduced by walk; Left is type descriptor ONOT // !Left OBITNOT // ^Left OPLUS // +Left @@ -750,7 +751,7 @@ const ( OVARDEF // variable is about to be fully initialized OVARKILL // variable is dead OVARLIVE // variable is alive - OINDREGSP // offset plus indirect of REGSP, such as 8(SP). + ORESULT // result of a function call; Xoffset is stack offset OINLMARK // start of an inlined body, with file/line of caller. Xoffset is an index into the inline tree. // arch-specific opcodes diff --git a/src/cmd/compile/internal/gc/testdata/arith_test.go b/src/cmd/compile/internal/gc/testdata/arith_test.go index 728ca56892..158fedc28e 100644 --- a/src/cmd/compile/internal/gc/testdata/arith_test.go +++ b/src/cmd/compile/internal/gc/testdata/arith_test.go @@ -7,6 +7,7 @@ package main import ( + "math" "runtime" "testing" ) @@ -924,6 +925,8 @@ func TestArithmetic(t *testing.T) { testShiftRemoval(t) testShiftedOps(t) testDivFixUp(t) + testDivisibleSignedPow2(t) + testDivisibility(t) } // testDivFixUp ensures that signed division fix-ups are being generated. @@ -952,3 +955,500 @@ func testDivFixUp(t *testing.T) { 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<= 0 - switch t.Etype { - case TSTRING: - if Isconst(l, CTSTR) { - res = int64(len(l.Val().U.(string))) - } - - case TARRAY: - if !callrecv(l) { - res = t.NumElem() - } - } - if res >= 0 { - setintconst(n, res) - } - case OREAL, OIMAG: ok |= ctxExpr if !onearg(n, "%v", n.Op) { @@ -1484,83 +1432,26 @@ func typecheck1(n *Node, top int) (res *Node) { } n.Type = types.Types[et] - // if the argument is a constant, the result is a constant - // (any untyped numeric constant can be represented as a - // complex number) - if l.Op == OLITERAL { - var re, im *Mpflt - switch consttype(l) { - case CTINT, CTRUNE: - re = newMpflt() - re.SetInt(l.Val().U.(*Mpint)) - // im = 0 - case CTFLT: - re = l.Val().U.(*Mpflt) - // im = 0 - case CTCPLX: - re = &l.Val().U.(*Mpcplx).Real - im = &l.Val().U.(*Mpcplx).Imag - default: - yyerror("invalid argument %L for %v", l, n.Op) - n.Type = nil - return n - } - if n.Op == OIMAG { - if im == nil { - im = newMpflt() - } - re = im - } - setconst(n, Val{re}) - } - case OCOMPLEX: ok |= ctxExpr - var r *Node - var l *Node - if n.List.Len() == 1 { - typecheckslice(n.List.Slice(), ctxMultiOK) - if n.List.First().Op != OCALLFUNC && n.List.First().Op != OCALLMETH { - yyerror("invalid operation: complex expects two arguments") - n.Type = nil - return n - } - - t := n.List.First().Left.Type - if !t.IsKind(TFUNC) { - // Bail. This error will be reported elsewhere. - return n - } - if t.NumResults() != 2 { - yyerror("invalid operation: complex expects two arguments, %v returns %d results", n.List.First(), t.NumResults()) - n.Type = nil - return n - } - - t = n.List.First().Type - l = asNode(t.Field(0).Nname) - r = asNode(t.Field(1).Nname) - } else { - if !twoarg(n) { - n.Type = nil - return n - } - n.Left = typecheck(n.Left, ctxExpr) - n.Right = typecheck(n.Right, ctxExpr) - l = n.Left - r = n.Right - if l.Type == nil || r.Type == nil { - n.Type = nil - return n - } - l, r = defaultlit2(l, r, false) - if l.Type == nil || r.Type == nil { - n.Type = nil - return n - } - n.Left = l - n.Right = r + typecheckargs(n) + if !twoarg(n) { + n.Type = nil + return n } + l := n.Left + r := n.Right + if l.Type == nil || r.Type == nil { + n.Type = nil + return n + } + l, r = defaultlit2(l, r, false) + if l.Type == nil || r.Type == nil { + n.Type = nil + return n + } + n.Left = l + n.Right = r if !types.Identical(l.Type, r.Type) { yyerror("invalid operation: %v (mismatched types %v and %v)", n, l.Type, r.Type) @@ -1586,14 +1477,6 @@ func typecheck1(n *Node, top int) (res *Node) { } n.Type = t - if l.Op == OLITERAL && r.Op == OLITERAL { - // make it a complex literal - c := newMpcmplx() - c.Real.Set(toflt(l.Val()).U.(*Mpflt)) - c.Imag.Set(toflt(r.Val()).U.(*Mpflt)) - setconst(n, Val{c}) - } - case OCLOSE: if !onearg(n, "%v", n.Op) { n.Type = nil @@ -1622,6 +1505,8 @@ func typecheck1(n *Node, top int) (res *Node) { ok |= ctxStmt case ODELETE: + ok |= ctxStmt + typecheckargs(n) args := n.List if args.Len() == 0 { yyerror("missing arguments to delete") @@ -1641,8 +1526,6 @@ func typecheck1(n *Node, top int) (res *Node) { return n } - ok |= ctxStmt - typecheckslice(args.Slice(), ctxExpr) l := args.First() r := args.Second() if l.Type != nil && !l.Type.IsMap() { @@ -1655,6 +1538,7 @@ func typecheck1(n *Node, top int) (res *Node) { case OAPPEND: ok |= ctxExpr + typecheckargs(n) args := n.List if args.Len() == 0 { yyerror("missing arguments to append") @@ -1662,25 +1546,12 @@ func typecheck1(n *Node, top int) (res *Node) { return n } - if args.Len() == 1 && !n.IsDDD() { - args.SetFirst(typecheck(args.First(), ctxExpr|ctxMultiOK)) - } else { - typecheckslice(args.Slice(), ctxExpr) - } - t := args.First().Type if t == nil { n.Type = nil return n } - // Unpack multiple-return result before type-checking. - var funarg *types.Type - if t.IsFuncArgStruct() { - funarg = t - t = t.Field(0).Type - } - n.Type = t if !t.IsSlice() { if Isconst(args.First(), CTNIL) { @@ -1716,44 +1587,23 @@ func typecheck1(n *Node, top int) (res *Node) { break } - if funarg != nil { - for _, t := range funarg.FieldSlice()[1:] { - if assignop(t.Type, n.Type.Elem(), nil) == 0 { - yyerror("cannot append %v value to []%v", t.Type, n.Type.Elem()) - } - } - } else { - as := args.Slice()[1:] - for i, n := range as { - if n.Type == nil { - continue - } - as[i] = assignconv(n, t.Elem(), "append") - checkwidth(as[i].Type) // ensure width is calculated for backend + as := args.Slice()[1:] + for i, n := range as { + if n.Type == nil { + continue } + as[i] = assignconv(n, t.Elem(), "append") + checkwidth(as[i].Type) // ensure width is calculated for backend } case OCOPY: ok |= ctxStmt | ctxExpr - args := n.List - if args.Len() < 2 { - yyerror("missing arguments to copy") + typecheckargs(n) + if !twoarg(n) { n.Type = nil return n } - - if args.Len() > 2 { - yyerror("too many arguments to copy") - n.Type = nil - return n - } - - n.Left = args.First() - n.Right = args.Second() - n.List.Set(nil) n.Type = types.Types[TINT] - n.Left = typecheck(n.Left, ctxExpr) - n.Right = typecheck(n.Right, ctxExpr) if n.Left.Type == nil || n.Right.Type == nil { n.Type = nil return n @@ -1817,10 +1667,7 @@ func typecheck1(n *Node, top int) (res *Node) { switch n.Op { case OCONVNOP: - if n.Left.Op == OLITERAL && n.isGoConst() { - n.Op = OCONV // set so n.Orig gets OCONV instead of OCONVNOP - setconst(n, n.Left.Val()) // convert n to OLITERAL with the given value - } else if t.Etype == n.Type.Etype { + if t.Etype == n.Type.Etype { switch t.Etype { case TFLOAT32, TFLOAT64, TCOMPLEX64, TCOMPLEX128: // Floating point casts imply rounding and @@ -2149,11 +1996,7 @@ func typecheck1(n *Node, top int) (res *Node) { case ORETURN: ok |= ctxStmt - if n.List.Len() == 1 { - typecheckslice(n.List.Slice(), ctxExpr|ctxMultiOK) - } else { - typecheckslice(n.List.Slice(), ctxExpr) - } + typecheckargs(n) if Curfn == nil { yyerror("return outside function") n.Type = nil @@ -2257,6 +2100,51 @@ func typecheck1(n *Node, top int) (res *Node) { return n } +func typecheckargs(n *Node) { + if n.List.Len() != 1 || n.IsDDD() { + typecheckslice(n.List.Slice(), ctxExpr) + return + } + + typecheckslice(n.List.Slice(), ctxExpr|ctxMultiOK) + t := n.List.First().Type + if t == nil || !t.IsFuncArgStruct() { + return + } + + // Rewrite f(g()) into t1, t2, ... = g(); f(t1, t2, ...). + + // Save n as n.Orig for fmt.go. + if n.Orig == n { + n.Orig = n.sepcopy() + } + + as := nod(OAS2, nil, nil) + as.Rlist.AppendNodes(&n.List) + + // If we're outside of function context, then this call will + // be executed during the generated init function. However, + // init.go hasn't yet created it. Instead, associate the + // temporary variables with dummyInitFn for now, and init.go + // will reassociate them later when it's appropriate. + static := Curfn == nil + if static { + Curfn = dummyInitFn + } + for _, f := range t.FieldSlice() { + t := temp(f.Type) + as.Ninit.Append(nod(ODCL, t, nil)) + as.List.Append(t) + n.List.Append(t) + } + if static { + Curfn = nil + } + + as = typecheck(as, ctxStmt) + n.Ninit.Append(as) +} + func checksliceindex(l *Node, r *Node, tp *types.Type) bool { t := r.Type if t == nil { @@ -2396,24 +2284,15 @@ func twoarg(n *Node) bool { if n.Left != nil { return true } - if n.List.Len() == 0 { - yyerror("missing argument to %v - %v", n.Op, n) + if n.List.Len() != 2 { + if n.List.Len() < 2 { + yyerror("not enough arguments in call to %v", n) + } else { + yyerror("too many arguments in call to %v", n) + } return false } - n.Left = n.List.First() - if n.List.Len() == 1 { - yyerror("missing argument to %v - %v", n.Op, n) - n.List.Set(nil) - return false - } - - if n.List.Len() > 2 { - yyerror("too many arguments to %v - %v", n.Op, n) - n.List.Set(nil) - return false - } - n.Right = n.List.Second() n.List.Set(nil) return true @@ -2673,8 +2552,6 @@ func hasddd(t *types.Type) bool { // typecheck assignment: type list = expression list func typecheckaste(op Op, call *Node, isddd bool, tstruct *types.Type, nl Nodes, desc func() string) { var t *types.Type - var n1 int - var n2 int var i int lno := lineno @@ -2687,57 +2564,10 @@ func typecheckaste(op Op, call *Node, isddd bool, tstruct *types.Type, nl Nodes, var n *Node if nl.Len() == 1 { n = nl.First() - if n.Type != nil && n.Type.IsFuncArgStruct() { - if !hasddd(tstruct) { - n1 := tstruct.NumFields() - n2 := n.Type.NumFields() - if n2 > n1 { - goto toomany - } - if n2 < n1 { - goto notenough - } - } - - lfs := tstruct.FieldSlice() - rfs := n.Type.FieldSlice() - var why string - for i, tl := range lfs { - if tl.IsDDD() { - for _, tn := range rfs[i:] { - if assignop(tn.Type, tl.Type.Elem(), &why) == 0 { - if call != nil { - yyerror("cannot use %v as type %v in argument to %v%s", tn.Type, tl.Type.Elem(), call, why) - } else { - yyerror("cannot use %v as type %v in %s%s", tn.Type, tl.Type.Elem(), desc(), why) - } - } - } - return - } - - if i >= len(rfs) { - goto notenough - } - tn := rfs[i] - if assignop(tn.Type, tl.Type, &why) == 0 { - if call != nil { - yyerror("cannot use %v as type %v in argument to %v%s", tn.Type, tl.Type, call, why) - } else { - yyerror("cannot use %v as type %v in %s%s", tn.Type, tl.Type, desc(), why) - } - } - } - - if len(rfs) > len(lfs) { - goto toomany - } - return - } } - n1 = tstruct.NumFields() - n2 = nl.Len() + n1 := tstruct.NumFields() + n2 := nl.Len() if !hasddd(tstruct) { if n2 > n1 { goto toomany @@ -2779,6 +2609,7 @@ func typecheckaste(op Op, call *Node, isddd bool, tstruct *types.Type, nl Nodes, return } + // TODO(mdempsky): Make into ... call with implicit slice. for ; i < nl.Len(); i++ { n = nl.Index(i) setlineno(n) @@ -2886,14 +2717,8 @@ func (nl Nodes) retsigerr(isddd bool) string { } var typeStrings []string - if nl.Len() == 1 && nl.First().Type != nil && nl.First().Type.IsFuncArgStruct() { - for _, f := range nl.First().Type.Fields().Slice() { - typeStrings = append(typeStrings, sigrepr(f.Type)) - } - } else { - for _, n := range nl.Slice() { - typeStrings = append(typeStrings, sigrepr(n.Type)) - } + for _, n := range nl.Slice() { + typeStrings = append(typeStrings, sigrepr(n.Type)) } ddd := "" @@ -3765,17 +3590,18 @@ func typecheckdef(n *Node) { } e = typecheck(e, ctxExpr) - if Isconst(e, CTNIL) { - yyerrorl(n.Pos, "const initializer cannot be nil") + if e.Type == nil { goto ret } - - if e.Type != nil && e.Op != OLITERAL || !e.isGoConst() { + if !e.isGoConst() { if !e.Diag() { - yyerrorl(n.Pos, "const initializer %v is not a constant", e) + if Isconst(e, CTNIL) { + yyerrorl(n.Pos, "const initializer cannot be nil") + } else { + yyerrorl(n.Pos, "const initializer %v is not a constant", e) + } e.SetDiag(true) } - goto ret } diff --git a/src/cmd/compile/internal/gc/walk.go b/src/cmd/compile/internal/gc/walk.go index 1d6321212e..679c86fab6 100644 --- a/src/cmd/compile/internal/gc/walk.go +++ b/src/cmd/compile/internal/gc/walk.go @@ -398,10 +398,14 @@ func convFuncName(from, to *types.Type) (fnname string, needsaddr bool) { return "convT32", false case from.Size() == 8 && from.Align == types.Types[TUINT64].Align && !types.Haspointers(from): return "convT64", false - case from.IsString(): - return "convTstring", false - case from.IsSlice(): - return "convTslice", false + } + if sc := from.SoleComponent(); sc != nil { + switch { + case sc.IsString(): + return "convTstring", false + case sc.IsSlice(): + return "convTslice", false + } } switch tkind { @@ -477,7 +481,7 @@ opswitch: Dump("walk", n) Fatalf("walkexpr: switch 1 unknown op %+S", n) - case ONONAME, OINDREGSP, OEMPTY, OGETG: + case ONONAME, OEMPTY, OGETG, ONEWOBJ: case OTYPE, ONAME, OLITERAL: // TODO(mdempsky): Just return n; see discussion on CL 38655. @@ -1206,7 +1210,7 @@ opswitch: // Allocate one bucket pointed to by hmap.buckets on stack if hint // is not larger than BUCKETSIZE. In case hint is larger than // BUCKETSIZE runtime.makemap will allocate the buckets on the heap. - // Maximum key and value size is 128 bytes, larger objects + // Maximum key and elem size is 128 bytes, larger objects // are stored with an indirection. So max bucket size is 2048+eps. if !Isconst(hint, CTINT) || hint.Val().U.(*Mpint).CmpInt64(BUCKETSIZE) <= 0 { @@ -1351,50 +1355,36 @@ opswitch: a := nodnil() if n.Esc == EscNone { t := types.NewArray(types.Types[TUINT8], 4) - var_ := temp(t) - a = nod(OADDR, var_, nil) + a = nod(OADDR, temp(t), nil) } - // intstring(*[4]byte, rune) n = mkcall("intstring", n.Type, init, a, conv(n.Left, types.Types[TINT64])) - case OBYTES2STR: + case OBYTES2STR, ORUNES2STR: a := nodnil() if n.Esc == EscNone { // Create temporary buffer for string on stack. t := types.NewArray(types.Types[TUINT8], tmpstringbufsize) - a = nod(OADDR, temp(t), nil) } + fn := "slicebytetostring" + if n.Op == ORUNES2STR { + fn = "slicerunetostring" + } + // slicebytetostring(*[32]byte, []byte) string + // slicerunetostring(*[32]byte, []rune) string + n = mkcall(fn, n.Type, init, a, n.Left) - // slicebytetostring(*[32]byte, []byte) string; - n = mkcall("slicebytetostring", n.Type, init, a, n.Left) - - // slicebytetostringtmp([]byte) string; case OBYTES2STRTMP: n.Left = walkexpr(n.Left, init) - if !instrumenting { // Let the backend handle OBYTES2STRTMP directly // to avoid a function call to slicebytetostringtmp. break } - + // slicebytetostringtmp([]byte) string n = mkcall("slicebytetostringtmp", n.Type, init, n.Left) - // slicerunetostring(*[32]byte, []rune) string; - case ORUNES2STR: - a := nodnil() - - if n.Esc == EscNone { - // Create temporary buffer for string on stack. - t := types.NewArray(types.Types[TUINT8], tmpstringbufsize) - - a = nod(OADDR, temp(t), nil) - } - - n = mkcall("slicerunetostring", n.Type, init, a, n.Left) - case OSTR2BYTES: s := n.Left if Isconst(s, CTSTR) { @@ -1427,16 +1417,14 @@ opswitch: n = walkexpr(n, init) break } - a := nodnil() + a := nodnil() if n.Esc == EscNone { // Create temporary buffer for slice on stack. t := types.NewArray(types.Types[TUINT8], tmpstringbufsize) - a = nod(OADDR, temp(t), nil) } - - // stringtoslicebyte(*32[byte], string) []byte; + // stringtoslicebyte(*32[byte], string) []byte n = mkcall("stringtoslicebyte", n.Type, init, a, conv(s, types.Types[TSTRING])) case OSTR2BYTESTMP: @@ -1449,17 +1437,14 @@ opswitch: // for i, c := range []byte(string) n.Left = walkexpr(n.Left, init) - // stringtoslicerune(*[32]rune, string) []rune case OSTR2RUNES: a := nodnil() - if n.Esc == EscNone { // Create temporary buffer for slice on stack. t := types.NewArray(types.Types[TINT32], tmpstringbufsize) - a = nod(OADDR, temp(t), nil) } - + // stringtoslicerune(*[32]rune, string) []rune n = mkcall("stringtoslicerune", n.Type, init, a, conv(n.Left, types.Types[TSTRING])) case OARRAYLIT, OSLICELIT, OMAPLIT, OSTRUCTLIT, OPTRLIT: @@ -1670,7 +1655,12 @@ func ascompatet(nl Nodes, nr *types.Type) []*Node { l = tmp } - a := nod(OAS, l, nodarg(r)) + res := nod(ORESULT, nil, nil) + res.Xoffset = Ctxt.FixedFrameSize() + r.Offset + res.Type = r.Type + res.SetTypecheck(1) + + a := nod(OAS, l, res) a = convas(a, &nn) updateHasCall(a) if a.HasCall() { @@ -1683,32 +1673,6 @@ func ascompatet(nl Nodes, nr *types.Type) []*Node { return append(nn.Slice(), mm.Slice()...) } -// nodarg returns a Node for the function argument f. -// f is a *types.Field within a struct *types.Type. -// -// The node is for use by a caller invoking the given -// function, preparing the arguments before the call -// or retrieving the results after the call. -// In this case, the node will correspond to an outgoing argument -// slot like 8(SP). -func nodarg(f *types.Field) *Node { - // Build fake name for individual variable. - n := newname(lookup("__")) - n.Type = f.Type - if f.Offset == BADWIDTH { - Fatalf("nodarg: offset not computed for %v", f) - } - n.Xoffset = f.Offset - n.Orig = asNode(f.Nname) - - // preparing arguments for call - n.Op = OINDREGSP - n.Xoffset += Ctxt.FixedFrameSize() - n.SetTypecheck(1) - n.SetAddrtaken(true) // keep optimizers at bay - return n -} - // package all the arguments that match a ... T parameter into a []T. func mkdotargslice(typ *types.Type, args []*Node, init *Nodes, ddd *Node) *Node { esc := uint16(EscUnknown) @@ -1940,21 +1904,11 @@ func callnew(t *types.Type) *Node { yyerror("%v is go:notinheap; heap allocation disallowed", t) } dowidth(t) - - if t.Size() == 0 { - // Return &runtime.zerobase if we know that the requested size is 0. - // This is what runtime.mallocgc would return. - z := newname(Runtimepkg.Lookup("zerobase")) - z.SetClass(PEXTERN) - z.Type = t - return typecheck(nod(OADDR, z, nil), ctxExpr) - } - - fn := syslook("newobject") - fn = substArgTypes(fn, t) - v := mkcall1(fn, types.NewPtr(t), nil, typename(t)) - v.SetNonNil(true) - return v + n := nod(ONEWOBJ, typename(t), nil) + n.Type = types.NewPtr(t) + n.SetTypecheck(1) + n.SetNonNil(true) + return n } // isReflectHeaderDataField reports whether l is an expression p.Data @@ -2508,7 +2462,7 @@ var mapassign = mkmapnames("mapassign", "ptr") var mapdelete = mkmapnames("mapdelete", "") func mapfast(t *types.Type) int { - // Check runtime/map.go:maxValueSize before changing. + // Check runtime/map.go:maxElemSize before changing. if t.Elem().Width > 128 { return mapslow } @@ -2563,7 +2517,6 @@ func addstr(n *Node, init *Nodes) *Node { if sz < tmpstringbufsize { // Create temporary buffer for result string on stack. t := types.NewArray(types.Types[TUINT8], tmpstringbufsize) - buf = nod(OADDR, temp(t), nil) } } @@ -3112,11 +3065,9 @@ func walkcompare(n *Node, init *Nodes) *Node { if l != nil { // Handle both == and !=. eq := n.Op - var andor Op + andor := OOROR if eq == OEQ { andor = OANDAND - } else { - andor = OOROR } // Check for types equal. // For empty interface, this is: diff --git a/src/cmd/compile/internal/mips/ssa.go b/src/cmd/compile/internal/mips/ssa.go index 97a9b20537..19b7c95bfd 100644 --- a/src/cmd/compile/internal/mips/ssa.go +++ b/src/cmd/compile/internal/mips/ssa.go @@ -485,6 +485,18 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { p.To.Type = obj.TYPE_MEM p.To.Name = obj.NAME_EXTERN p.To.Sym = v.Aux.(*obj.LSym) + case ssa.OpMIPSLoweredPanicBoundsA, ssa.OpMIPSLoweredPanicBoundsB, ssa.OpMIPSLoweredPanicBoundsC: + p := s.Prog(obj.ACALL) + p.To.Type = obj.TYPE_MEM + p.To.Name = obj.NAME_EXTERN + p.To.Sym = gc.BoundsCheckFunc[v.AuxInt] + s.UseArgs(8) // space used in callee args area by assembly stubs + case ssa.OpMIPSLoweredPanicExtendA, ssa.OpMIPSLoweredPanicExtendB, ssa.OpMIPSLoweredPanicExtendC: + p := s.Prog(obj.ACALL) + p.To.Type = obj.TYPE_MEM + p.To.Name = obj.NAME_EXTERN + p.To.Sym = gc.ExtendCheckFunc[v.AuxInt] + s.UseArgs(12) // space used in callee args area by assembly stubs case ssa.OpMIPSLoweredAtomicLoad: s.Prog(mips.ASYNC) @@ -816,7 +828,6 @@ func ssaGenBlock(s *gc.SSAGenState, b, next *ssa.Block) { s.Branches = append(s.Branches, gc.Branch{P: p, B: b.Succs[0].Block()}) } case ssa.BlockExit: - s.Prog(obj.AUNDEF) // tell plive.go that we never reach here case ssa.BlockRet: s.Prog(obj.ARET) case ssa.BlockRetJmp: diff --git a/src/cmd/compile/internal/mips64/ssa.go b/src/cmd/compile/internal/mips64/ssa.go index 8a2d2b0f7a..68eff97dfa 100644 --- a/src/cmd/compile/internal/mips64/ssa.go +++ b/src/cmd/compile/internal/mips64/ssa.go @@ -489,9 +489,18 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { p.To.Type = obj.TYPE_MEM p.To.Name = obj.NAME_EXTERN p.To.Sym = v.Aux.(*obj.LSym) - case ssa.OpMIPS64LoweredAtomicLoad32, ssa.OpMIPS64LoweredAtomicLoad64: + case ssa.OpMIPS64LoweredPanicBoundsA, ssa.OpMIPS64LoweredPanicBoundsB, ssa.OpMIPS64LoweredPanicBoundsC: + p := s.Prog(obj.ACALL) + p.To.Type = obj.TYPE_MEM + p.To.Name = obj.NAME_EXTERN + p.To.Sym = gc.BoundsCheckFunc[v.AuxInt] + s.UseArgs(16) // space used in callee args area by assembly stubs + case ssa.OpMIPS64LoweredAtomicLoad8, ssa.OpMIPS64LoweredAtomicLoad32, ssa.OpMIPS64LoweredAtomicLoad64: as := mips.AMOVV - if v.Op == ssa.OpMIPS64LoweredAtomicLoad32 { + switch v.Op { + case ssa.OpMIPS64LoweredAtomicLoad8: + as = mips.AMOVB + case ssa.OpMIPS64LoweredAtomicLoad32: as = mips.AMOVW } s.Prog(mips.ASYNC) @@ -787,7 +796,6 @@ func ssaGenBlock(s *gc.SSAGenState, b, next *ssa.Block) { s.Branches = append(s.Branches, gc.Branch{P: p, B: b.Succs[0].Block()}) } case ssa.BlockExit: - s.Prog(obj.AUNDEF) // tell plive.go that we never reach here case ssa.BlockRet: s.Prog(obj.ARET) case ssa.BlockRetJmp: diff --git a/src/cmd/compile/internal/ppc64/galign.go b/src/cmd/compile/internal/ppc64/galign.go index 8ad3084410..c6866e65e7 100644 --- a/src/cmd/compile/internal/ppc64/galign.go +++ b/src/cmd/compile/internal/ppc64/galign.go @@ -21,7 +21,7 @@ func Init(arch *gc.Arch) { arch.ZeroRange = zerorange arch.ZeroAuto = zeroAuto arch.Ginsnop = ginsnop - arch.Ginsnopdefer = ginsnop2 + arch.Ginsnopdefer = ginsnopdefer arch.SSAMarkMoves = ssaMarkMoves arch.SSAGenValue = ssaGenValue diff --git a/src/cmd/compile/internal/ppc64/ggen.go b/src/cmd/compile/internal/ppc64/ggen.go index ea66baa007..a63a0f0f77 100644 --- a/src/cmd/compile/internal/ppc64/ggen.go +++ b/src/cmd/compile/internal/ppc64/ggen.go @@ -67,8 +67,9 @@ func ginsnop(pp *gc.Progs) *obj.Prog { return p } -func ginsnop2(pp *gc.Progs) *obj.Prog { - // PPC64 is unusual because TWO nops are required +func ginsnopdefer(pp *gc.Progs) *obj.Prog { + // On PPC64 two nops are required in the defer case. + // // (see gc/cgen.go, gc/plive.go -- copy of comment below) // // On ppc64, when compiling Go into position diff --git a/src/cmd/compile/internal/ppc64/ssa.go b/src/cmd/compile/internal/ppc64/ssa.go index 3b37c797a9..cbe233f054 100644 --- a/src/cmd/compile/internal/ppc64/ssa.go +++ b/src/cmd/compile/internal/ppc64/ssa.go @@ -25,16 +25,16 @@ type iselOp struct { var iselRegs = [2]int16{ppc64.REG_R0, ppc64.REGTMP} var iselOps = map[ssa.Op]iselOp{ - ssa.OpPPC64Equal: iselOp{cond: ppc64.C_COND_EQ, valueIfCond: 1}, - ssa.OpPPC64NotEqual: iselOp{cond: ppc64.C_COND_EQ, valueIfCond: 0}, - ssa.OpPPC64LessThan: iselOp{cond: ppc64.C_COND_LT, valueIfCond: 1}, - ssa.OpPPC64GreaterEqual: iselOp{cond: ppc64.C_COND_LT, valueIfCond: 0}, - ssa.OpPPC64GreaterThan: iselOp{cond: ppc64.C_COND_GT, valueIfCond: 1}, - ssa.OpPPC64LessEqual: iselOp{cond: ppc64.C_COND_GT, valueIfCond: 0}, - ssa.OpPPC64FLessThan: iselOp{cond: ppc64.C_COND_LT, valueIfCond: 1}, - ssa.OpPPC64FGreaterThan: iselOp{cond: ppc64.C_COND_GT, valueIfCond: 1}, - ssa.OpPPC64FLessEqual: iselOp{cond: ppc64.C_COND_LT, valueIfCond: 1}, // 2 comparisons, 2nd is EQ - ssa.OpPPC64FGreaterEqual: iselOp{cond: ppc64.C_COND_GT, valueIfCond: 1}, // 2 comparisons, 2nd is EQ + ssa.OpPPC64Equal: {cond: ppc64.C_COND_EQ, valueIfCond: 1}, + ssa.OpPPC64NotEqual: {cond: ppc64.C_COND_EQ, valueIfCond: 0}, + ssa.OpPPC64LessThan: {cond: ppc64.C_COND_LT, valueIfCond: 1}, + ssa.OpPPC64GreaterEqual: {cond: ppc64.C_COND_LT, valueIfCond: 0}, + ssa.OpPPC64GreaterThan: {cond: ppc64.C_COND_GT, valueIfCond: 1}, + ssa.OpPPC64LessEqual: {cond: ppc64.C_COND_GT, valueIfCond: 0}, + ssa.OpPPC64FLessThan: {cond: ppc64.C_COND_LT, valueIfCond: 1}, + ssa.OpPPC64FGreaterThan: {cond: ppc64.C_COND_GT, valueIfCond: 1}, + ssa.OpPPC64FLessEqual: {cond: ppc64.C_COND_LT, valueIfCond: 1}, // 2 comparisons, 2nd is EQ + ssa.OpPPC64FGreaterEqual: {cond: ppc64.C_COND_GT, valueIfCond: 1}, // 2 comparisons, 2nd is EQ } // markMoves marks any MOVXconst ops that need to avoid clobbering flags. @@ -172,6 +172,31 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { p1.To.Type = obj.TYPE_REG p1.To.Reg = v.Reg1() + case ssa.OpPPC64LoweredAdd64Carry: + // ADDC Rarg2, -1, Rtmp + // ADDE Rarg1, Rarg0, Reg0 + // ADDZE Rzero, Reg1 + r0 := v.Args[0].Reg() + r1 := v.Args[1].Reg() + r2 := v.Args[2].Reg() + p := s.Prog(ppc64.AADDC) + p.From.Type = obj.TYPE_CONST + p.From.Offset = -1 + p.Reg = r2 + p.To.Type = obj.TYPE_REG + p.To.Reg = ppc64.REGTMP + p1 := s.Prog(ppc64.AADDE) + p1.From.Type = obj.TYPE_REG + p1.From.Reg = r1 + p1.Reg = r0 + p1.To.Type = obj.TYPE_REG + p1.To.Reg = v.Reg0() + p2 := s.Prog(ppc64.AADDZE) + p2.From.Type = obj.TYPE_REG + p2.From.Reg = ppc64.REGZERO + p2.To.Type = obj.TYPE_REG + p2.To.Reg = v.Reg1() + case ssa.OpPPC64LoweredAtomicAnd8, ssa.OpPPC64LoweredAtomicOr8: // LWSYNC @@ -298,18 +323,22 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { pisync := s.Prog(ppc64.AISYNC) pisync.To.Type = obj.TYPE_NONE - case ssa.OpPPC64LoweredAtomicLoad32, + case ssa.OpPPC64LoweredAtomicLoad8, + ssa.OpPPC64LoweredAtomicLoad32, ssa.OpPPC64LoweredAtomicLoad64, ssa.OpPPC64LoweredAtomicLoadPtr: // SYNC - // MOVD/MOVW (Rarg0), Rout + // MOVB/MOVD/MOVW (Rarg0), Rout // CMP Rout,Rout // BNE 1(PC) // ISYNC ld := ppc64.AMOVD cmp := ppc64.ACMP - if v.Op == ssa.OpPPC64LoweredAtomicLoad32 { - ld = ppc64.AMOVW + switch v.Op { + case ssa.OpPPC64LoweredAtomicLoad8: + ld = ppc64.AMOVBZ + case ssa.OpPPC64LoweredAtomicLoad32: + ld = ppc64.AMOVWZ cmp = ppc64.ACMPW } arg0 := v.Args[0].Reg() @@ -620,7 +649,10 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { p.To.Type = obj.TYPE_REG p.To.Reg = ppc64.REGTMP // Ignored; this is for the carry effect. - case ssa.OpPPC64NEG, ssa.OpPPC64FNEG, ssa.OpPPC64FSQRT, ssa.OpPPC64FSQRTS, ssa.OpPPC64FFLOOR, ssa.OpPPC64FTRUNC, ssa.OpPPC64FCEIL, ssa.OpPPC64FCTIDZ, ssa.OpPPC64FCTIWZ, ssa.OpPPC64FCFID, ssa.OpPPC64FCFIDS, ssa.OpPPC64FRSP, ssa.OpPPC64CNTLZD, ssa.OpPPC64CNTLZW, ssa.OpPPC64POPCNTD, ssa.OpPPC64POPCNTW, ssa.OpPPC64POPCNTB, ssa.OpPPC64MFVSRD, ssa.OpPPC64MTVSRD, ssa.OpPPC64FABS, ssa.OpPPC64FNABS, ssa.OpPPC64FROUND: + case ssa.OpPPC64NEG, ssa.OpPPC64FNEG, ssa.OpPPC64FSQRT, ssa.OpPPC64FSQRTS, ssa.OpPPC64FFLOOR, ssa.OpPPC64FTRUNC, ssa.OpPPC64FCEIL, + ssa.OpPPC64FCTIDZ, ssa.OpPPC64FCTIWZ, ssa.OpPPC64FCFID, ssa.OpPPC64FCFIDS, ssa.OpPPC64FRSP, ssa.OpPPC64CNTLZD, ssa.OpPPC64CNTLZW, + ssa.OpPPC64POPCNTD, ssa.OpPPC64POPCNTW, ssa.OpPPC64POPCNTB, ssa.OpPPC64MFVSRD, ssa.OpPPC64MTVSRD, ssa.OpPPC64FABS, ssa.OpPPC64FNABS, + ssa.OpPPC64FROUND, ssa.OpPPC64CNTTZW, ssa.OpPPC64CNTTZD: r := v.Reg() p := s.Prog(v.Op.Asm()) p.To.Type = obj.TYPE_REG @@ -1183,6 +1215,13 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { p.To.Name = obj.NAME_EXTERN p.To.Sym = v.Aux.(*obj.LSym) + case ssa.OpPPC64LoweredPanicBoundsA, ssa.OpPPC64LoweredPanicBoundsB, ssa.OpPPC64LoweredPanicBoundsC: + p := s.Prog(obj.ACALL) + p.To.Type = obj.TYPE_MEM + p.To.Name = obj.NAME_EXTERN + p.To.Sym = gc.BoundsCheckFunc[v.AuxInt] + s.UseArgs(16) // space used in callee args area by assembly stubs + case ssa.OpPPC64LoweredNilCheck: if objabi.GOOS == "aix" { // CMP Rarg0, R0 @@ -1284,7 +1323,6 @@ func ssaGenBlock(s *gc.SSAGenState, b, next *ssa.Block) { s.Branches = append(s.Branches, gc.Branch{P: p, B: b.Succs[0].Block()}) } case ssa.BlockExit: - s.Prog(obj.AUNDEF) // tell plive.go that we never reach here case ssa.BlockRet: s.Prog(obj.ARET) case ssa.BlockRetJmp: diff --git a/src/cmd/compile/internal/s390x/ssa.go b/src/cmd/compile/internal/s390x/ssa.go index be48e1b23e..7a897ae754 100644 --- a/src/cmd/compile/internal/s390x/ssa.go +++ b/src/cmd/compile/internal/s390x/ssa.go @@ -184,6 +184,37 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { if r != r1 { p.Reg = r1 } + case ssa.OpS390XADDC: + r1 := v.Reg0() + r2 := v.Args[0].Reg() + r3 := v.Args[1].Reg() + if r1 == r2 { + r2, r3 = r3, r2 + } + p := opregreg(s, v.Op.Asm(), r1, r2) + if r3 != r1 { + p.Reg = r3 + } + case ssa.OpS390XSUBC: + r1 := v.Reg0() + r2 := v.Args[0].Reg() + r3 := v.Args[1].Reg() + p := opregreg(s, v.Op.Asm(), r1, r3) + if r1 != r2 { + p.Reg = r2 + } + case ssa.OpS390XADDE, ssa.OpS390XSUBE: + r1 := v.Reg0() + if r1 != v.Args[0].Reg() { + v.Fatalf("input[0] and output not in same register %s", v.LongString()) + } + r2 := v.Args[1].Reg() + opregreg(s, v.Op.Asm(), r1, r2) + case ssa.OpS390XADDCconst: + r1 := v.Reg0() + r3 := v.Args[0].Reg() + i2 := int64(int16(v.AuxInt)) + opregregimm(s, v.Op.Asm(), r1, r3, i2) // 2-address opcode arithmetic case ssa.OpS390XMULLD, ssa.OpS390XMULLW, ssa.OpS390XMULHD, ssa.OpS390XMULHDU, @@ -514,6 +545,12 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { p.To.Type = obj.TYPE_MEM p.To.Name = obj.NAME_EXTERN p.To.Sym = v.Aux.(*obj.LSym) + case ssa.OpS390XLoweredPanicBoundsA, ssa.OpS390XLoweredPanicBoundsB, ssa.OpS390XLoweredPanicBoundsC: + p := s.Prog(obj.ACALL) + p.To.Type = obj.TYPE_MEM + p.To.Name = obj.NAME_EXTERN + p.To.Sym = gc.BoundsCheckFunc[v.AuxInt] + s.UseArgs(16) // space used in callee args area by assembly stubs case ssa.OpS390XFLOGR, ssa.OpS390XPOPCNT, ssa.OpS390XNEG, ssa.OpS390XNEGW, ssa.OpS390XMOVWBR, ssa.OpS390XMOVDBR: @@ -547,7 +584,7 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { p.To.Reg = v.Reg() case ssa.OpS390XInvertFlags: v.Fatalf("InvertFlags should never make it to codegen %v", v.LongString()) - case ssa.OpS390XFlagEQ, ssa.OpS390XFlagLT, ssa.OpS390XFlagGT: + case ssa.OpS390XFlagEQ, ssa.OpS390XFlagLT, ssa.OpS390XFlagGT, ssa.OpS390XFlagOV: v.Fatalf("Flag* ops should never make it to codegen %v", v.LongString()) case ssa.OpS390XAddTupleFirst32, ssa.OpS390XAddTupleFirst64: v.Fatalf("AddTupleFirst* should never make it to codegen %v", v.LongString()) @@ -676,7 +713,7 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { clear.To.Type = obj.TYPE_MEM clear.To.Reg = v.Args[0].Reg() } - case ssa.OpS390XMOVWZatomicload, ssa.OpS390XMOVDatomicload: + case ssa.OpS390XMOVBZatomicload, ssa.OpS390XMOVWZatomicload, ssa.OpS390XMOVDatomicload: p := s.Prog(v.Op.Asm()) p.From.Type = obj.TYPE_MEM p.From.Reg = v.Args[0].Reg() @@ -809,7 +846,6 @@ func ssaGenBlock(s *gc.SSAGenState, b, next *ssa.Block) { s.Branches = append(s.Branches, gc.Branch{P: p, B: b.Succs[0].Block()}) } case ssa.BlockExit: - s.Prog(obj.AUNDEF) // tell plive.go that we never reach here case ssa.BlockRet: s.Prog(obj.ARET) case ssa.BlockRetJmp: diff --git a/src/cmd/compile/internal/ssa/biasedsparsemap.go b/src/cmd/compile/internal/ssa/biasedsparsemap.go index f9d3afa745..0d35154454 100644 --- a/src/cmd/compile/internal/ssa/biasedsparsemap.go +++ b/src/cmd/compile/internal/ssa/biasedsparsemap.go @@ -29,7 +29,7 @@ func newBiasedSparseMap(first, last int) *biasedSparseMap { // cap returns one more than the largest key valid for s func (s *biasedSparseMap) cap() int { - if s.s == nil { + if s == nil || s.s == nil { return 0 } return s.s.cap() + int(s.first) @@ -37,7 +37,7 @@ func (s *biasedSparseMap) cap() int { // size returns the number of entries stored in s func (s *biasedSparseMap) size() int { - if s.s == nil { + if s == nil || s.s == nil { return 0 } return s.s.size() @@ -45,7 +45,7 @@ func (s *biasedSparseMap) size() int { // contains reports whether x is a key in s func (s *biasedSparseMap) contains(x uint) bool { - if s.s == nil { + if s == nil || s.s == nil { return false } if int(x) < s.first { @@ -60,7 +60,7 @@ func (s *biasedSparseMap) contains(x uint) bool { // get returns the value s maps for key x, or -1 if // x is not mapped or is out of range for s. func (s *biasedSparseMap) get(x uint) int32 { - if s.s == nil { + if s == nil || s.s == nil { return -1 } if int(x) < s.first { diff --git a/src/cmd/compile/internal/ssa/branchelim.go b/src/cmd/compile/internal/ssa/branchelim.go index 55430e8afc..c543686b3d 100644 --- a/src/cmd/compile/internal/ssa/branchelim.go +++ b/src/cmd/compile/internal/ssa/branchelim.go @@ -33,7 +33,7 @@ func branchelim(f *Func) { for _, b := range f.Blocks { for _, v := range b.Values { switch v.Op { - case OpLoad, OpAtomicLoad32, OpAtomicLoad64, OpAtomicLoadPtr, OpAtomicLoadAcq32: + case OpLoad, OpAtomicLoad8, OpAtomicLoad32, OpAtomicLoad64, OpAtomicLoadPtr, OpAtomicLoadAcq32: loadAddr.add(v.Args[0].ID) case OpMove: loadAddr.add(v.Args[1].ID) diff --git a/src/cmd/compile/internal/ssa/cache.go b/src/cmd/compile/internal/ssa/cache.go index 7438a81b72..dbec2e139c 100644 --- a/src/cmd/compile/internal/ssa/cache.go +++ b/src/cmd/compile/internal/ssa/cache.go @@ -25,6 +25,15 @@ type Cache struct { scrSparseSet []*sparseSet // scratch sparse sets to be re-used. scrSparseMap []*sparseMap // scratch sparse maps to be re-used. scrPoset []*poset // scratch poset to be reused + // deadcode contains reusable slices specifically for the deadcode pass. + // It gets special treatment because of the frequency with which it is run. + deadcode struct { + liveOrderStmts []*Value + live []bool + q []*Value + } + // Reusable regalloc state. + regallocValues []valState ValueToProgAfter []*obj.Prog debugState debugState @@ -49,4 +58,24 @@ func (c *Cache) Reset() { xl[i] = nil } + // regalloc sets the length of c.regallocValues to whatever it may use, + // so clear according to length. + for i := range c.regallocValues { + c.regallocValues[i] = valState{} + } + + // liveOrderStmts gets used multiple times during compilation of a function. + // We don't know where the high water mark was, so reslice to cap and search. + c.deadcode.liveOrderStmts = c.deadcode.liveOrderStmts[:cap(c.deadcode.liveOrderStmts)] + no := sort.Search(len(c.deadcode.liveOrderStmts), func(i int) bool { return c.deadcode.liveOrderStmts[i] == nil }) + xo := c.deadcode.liveOrderStmts[:no] + for i := range xo { + xo[i] = nil + } + c.deadcode.q = c.deadcode.q[:cap(c.deadcode.q)] + nq := sort.Search(len(c.deadcode.q), func(i int) bool { return c.deadcode.q[i] == nil }) + xq := c.deadcode.q[:nq] + for i := range xq { + xq[i] = nil + } } diff --git a/src/cmd/compile/internal/ssa/compile.go b/src/cmd/compile/internal/ssa/compile.go index 38f12abf18..937e0223b3 100644 --- a/src/cmd/compile/internal/ssa/compile.go +++ b/src/cmd/compile/internal/ssa/compile.go @@ -5,6 +5,7 @@ package ssa import ( + "bytes" "cmd/internal/objabi" "cmd/internal/src" "fmt" @@ -14,6 +15,7 @@ import ( "os" "regexp" "runtime" + "sort" "strings" "time" ) @@ -133,6 +135,21 @@ func Compile(f *Func) { } } + if f.ruleMatches != nil { + var keys []string + for key := range f.ruleMatches { + keys = append(keys, key) + } + sort.Strings(keys) + buf := new(bytes.Buffer) + fmt.Fprintf(buf, "%s: ", f.Name) + for _, key := range keys { + fmt.Fprintf(buf, "%s=%d ", key, f.ruleMatches[key]) + } + fmt.Fprint(buf, "\n") + fmt.Print(buf.String()) + } + // Squash error printing defer phaseName = "" } @@ -386,7 +403,7 @@ var passes = [...]pass{ {name: "short circuit", fn: shortcircuit}, {name: "decompose args", fn: decomposeArgs, required: true}, {name: "decompose user", fn: decomposeUser, required: true}, - {name: "opt", fn: opt, required: true}, // TODO: split required rules and optimizing rules + {name: "opt", fn: opt, required: true}, // NB: some generic rules know the name of the opt pass. TODO: split required rules and optimizing rules {name: "zero arg cse", fn: zcse, required: true}, // required to merge OpSB values {name: "opt deadcode", fn: deadcode, required: true}, // remove any blocks orphaned during opt {name: "generic cse", fn: cse}, @@ -414,9 +431,9 @@ var passes = [...]pass{ {name: "late phielim", fn: phielim}, {name: "late copyelim", fn: copyelim}, {name: "tighten", fn: tighten}, // move values closer to their uses - {name: "phi tighten", fn: phiTighten}, {name: "late deadcode", fn: deadcode}, {name: "critical", fn: critical, required: true}, // remove critical edges + {name: "phi tighten", fn: phiTighten}, // place rematerializable phi args near uses to reduce value lifetimes {name: "likelyadjust", fn: likelyadjust}, {name: "layout", fn: layout, required: true}, // schedule blocks {name: "schedule", fn: schedule, required: true}, // schedule values @@ -467,6 +484,8 @@ var passOrder = [...]constraint{ {"decompose builtin", "late opt"}, // decompose builtin is the last pass that may introduce new float ops, so run softfloat after it {"decompose builtin", "softfloat"}, + // remove critical edges before phi tighten, so that phi args get better placement + {"critical", "phi tighten"}, // don't layout blocks until critical edges have been removed {"critical", "layout"}, // regalloc requires the removal of all critical edges diff --git a/src/cmd/compile/internal/ssa/config.go b/src/cmd/compile/internal/ssa/config.go index 5d7504392c..e46d937e42 100644 --- a/src/cmd/compile/internal/ssa/config.go +++ b/src/cmd/compile/internal/ssa/config.go @@ -21,6 +21,7 @@ type Config struct { Types Types lowerBlock blockRewriter // lowering function lowerValue valueRewriter // lowering function + splitLoad valueRewriter // function for splitting merged load ops; only used on some architectures registers []Register // machine registers gpRegMask regMask // general purpose integer register mask fpRegMask regMask // floating point register mask @@ -201,6 +202,7 @@ func NewConfig(arch string, types Types, ctxt *obj.Link, optimize bool) *Config c.RegSize = 8 c.lowerBlock = rewriteBlockAMD64 c.lowerValue = rewriteValueAMD64 + c.splitLoad = rewriteValueAMD64splitload c.registers = registersAMD64[:] c.gpRegMask = gpRegMaskAMD64 c.fpRegMask = fpRegMaskAMD64 @@ -212,6 +214,7 @@ func NewConfig(arch string, types Types, ctxt *obj.Link, optimize bool) *Config c.RegSize = 8 c.lowerBlock = rewriteBlockAMD64 c.lowerValue = rewriteValueAMD64 + c.splitLoad = rewriteValueAMD64splitload c.registers = registersAMD64[:] c.gpRegMask = gpRegMaskAMD64 c.fpRegMask = fpRegMaskAMD64 @@ -224,6 +227,7 @@ func NewConfig(arch string, types Types, ctxt *obj.Link, optimize bool) *Config c.RegSize = 4 c.lowerBlock = rewriteBlock386 c.lowerValue = rewriteValue386 + c.splitLoad = rewriteValue386splitload c.registers = registers386[:] c.gpRegMask = gpRegMask386 c.fpRegMask = fpRegMask386 diff --git a/src/cmd/compile/internal/ssa/deadcode.go b/src/cmd/compile/internal/ssa/deadcode.go index 72cce448ce..24d1d88165 100644 --- a/src/cmd/compile/internal/ssa/deadcode.go +++ b/src/cmd/compile/internal/ssa/deadcode.go @@ -9,9 +9,12 @@ import ( ) // findlive returns the reachable blocks and live values in f. +// The caller should call f.retDeadcodeLive(live) when it is done with it. func findlive(f *Func) (reachable []bool, live []bool) { reachable = ReachableBlocks(f) - live, _ = liveValues(f, reachable) + var order []*Value + live, order = liveValues(f, reachable) + f.retDeadcodeLiveOrderStmts(order) return } @@ -48,8 +51,21 @@ func ReachableBlocks(f *Func) []bool { // to be statements in reversed data flow order. // The second result is used to help conserve statement boundaries for debugging. // reachable is a map from block ID to whether the block is reachable. +// The caller should call f.retDeadcodeLive(live) and f.retDeadcodeLiveOrderStmts(liveOrderStmts) +// when they are done with the return values. func liveValues(f *Func, reachable []bool) (live []bool, liveOrderStmts []*Value) { - live = make([]bool, f.NumValues()) + live = f.newDeadcodeLive() + if cap(live) < f.NumValues() { + live = make([]bool, f.NumValues()) + } else { + live = live[:f.NumValues()] + for i := range live { + live[i] = false + } + } + + liveOrderStmts = f.newDeadcodeLiveOrderStmts() + liveOrderStmts = liveOrderStmts[:0] // After regalloc, consider all values to be live. // See the comment at the top of regalloc.go and in deadcode for details. @@ -60,8 +76,33 @@ func liveValues(f *Func, reachable []bool) (live []bool, liveOrderStmts []*Value return } + // Record all the inline indexes we need + var liveInlIdx map[int]bool + pt := f.Config.ctxt.PosTable + for _, b := range f.Blocks { + for _, v := range b.Values { + i := pt.Pos(v.Pos).Base().InliningIndex() + if i < 0 { + continue + } + if liveInlIdx == nil { + liveInlIdx = map[int]bool{} + } + liveInlIdx[i] = true + } + i := pt.Pos(b.Pos).Base().InliningIndex() + if i < 0 { + continue + } + if liveInlIdx == nil { + liveInlIdx = map[int]bool{} + } + liveInlIdx[i] = true + } + // Find all live values - q := make([]*Value, 0, 64) // stack-like worklist of unscanned values + q := f.Cache.deadcode.q[:0] + defer func() { f.Cache.deadcode.q = q }() // Starting set: all control values of reachable blocks are live. // Calls are live (because callee can observe the memory state). @@ -86,6 +127,13 @@ func liveValues(f *Func, reachable []bool) (live []bool, liveOrderStmts []*Value } if v.Type.IsVoid() && !live[v.ID] { // The only Void ops are nil checks and inline marks. We must keep these. + if v.Op == OpInlMark && !liveInlIdx[int(v.AuxInt)] { + // We don't need marks for bodies that + // have been completely optimized away. + // TODO: save marks only for bodies which + // have a faulting instruction or a call? + continue + } live[v.ID] = true q = append(q, v) if v.Pos.IsStmt() != src.PosNotStmt { @@ -163,6 +211,8 @@ func deadcode(f *Func) { // Find live values. live, order := liveValues(f, reachable) + defer f.retDeadcodeLive(live) + defer f.retDeadcodeLiveOrderStmts(order) // Remove dead & duplicate entries from namedValues map. s := f.newSparseSet(f.NumValues()) @@ -208,7 +258,7 @@ func deadcode(f *Func) { if !live[v.ID] { v.resetArgs() if v.Pos.IsStmt() == src.PosIsStmt && reachable[b.ID] { - pendingLines.set(v.Pos.Line(), int32(i)) // TODO could be more than one pos for a line + pendingLines.set(v.Pos, int32(i)) // TODO could be more than one pos for a line } } } @@ -217,20 +267,19 @@ func deadcode(f *Func) { // Find new homes for lost lines -- require earliest in data flow with same line that is also in same block for i := len(order) - 1; i >= 0; i-- { w := order[i] - if j := pendingLines.get(w.Pos.Line()); j > -1 && f.Blocks[j] == w.Block { + if j := pendingLines.get(w.Pos); j > -1 && f.Blocks[j] == w.Block { w.Pos = w.Pos.WithIsStmt() - pendingLines.remove(w.Pos.Line()) + pendingLines.remove(w.Pos) } } // Any boundary that failed to match a live value can move to a block end - for i := 0; i < pendingLines.size(); i++ { - l, bi := pendingLines.getEntry(i) + pendingLines.foreachEntry(func(j int32, l uint, bi int32) { b := f.Blocks[bi] - if b.Pos.Line() == l { + if b.Pos.Line() == l && b.Pos.FileIndex() == j { b.Pos = b.Pos.WithIsStmt() } - } + }) // Remove dead values from blocks' value list. Return dead // values to the allocator. diff --git a/src/cmd/compile/internal/ssa/debug.go b/src/cmd/compile/internal/ssa/debug.go index c2736d837c..13fe67cbca 100644 --- a/src/cmd/compile/internal/ssa/debug.go +++ b/src/cmd/compile/internal/ssa/debug.go @@ -1077,6 +1077,12 @@ func (state *debugState) writePendingEntry(varID VarID, endBlock, endValue ID) { // PutLocationList adds list (a location list in its intermediate representation) to listSym. func (debugInfo *FuncDebug) PutLocationList(list []byte, ctxt *obj.Link, listSym, startPC *obj.LSym) { getPC := debugInfo.GetPC + + if ctxt.UseBASEntries { + listSym.WriteInt(ctxt, listSym.Size, ctxt.Arch.PtrSize, ^0) + listSym.WriteAddr(ctxt, listSym.Size, ctxt.Arch.PtrSize, startPC, 0) + } + // Re-read list, translating its address from block/value ID to PC. for i := 0; i < len(list); { begin := getPC(decodeValue(ctxt, readPtr(ctxt, list[i:]))) @@ -1090,17 +1096,21 @@ func (debugInfo *FuncDebug) PutLocationList(list []byte, ctxt *obj.Link, listSym end = 1 } - writePtr(ctxt, list[i:], uint64(begin)) - writePtr(ctxt, list[i+ctxt.Arch.PtrSize:], uint64(end)) + if ctxt.UseBASEntries { + listSym.WriteInt(ctxt, listSym.Size, ctxt.Arch.PtrSize, int64(begin)) + listSym.WriteInt(ctxt, listSym.Size, ctxt.Arch.PtrSize, int64(end)) + } else { + listSym.WriteCURelativeAddr(ctxt, listSym.Size, startPC, int64(begin)) + listSym.WriteCURelativeAddr(ctxt, listSym.Size, startPC, int64(end)) + } + i += 2 * ctxt.Arch.PtrSize - i += 2 + int(ctxt.Arch.ByteOrder.Uint16(list[i:])) + datalen := 2 + int(ctxt.Arch.ByteOrder.Uint16(list[i:])) + listSym.WriteBytes(ctxt, listSym.Size, list[i:i+datalen]) // copy datalen and location encoding + i += datalen } - // Base address entry. - listSym.WriteInt(ctxt, listSym.Size, ctxt.Arch.PtrSize, ^0) - listSym.WriteAddr(ctxt, listSym.Size, ctxt.Arch.PtrSize, startPC, 0) // Location list contents, now with real PCs. - listSym.WriteBytes(ctxt, listSym.Size, list) // End entry. listSym.WriteInt(ctxt, listSym.Size, ctxt.Arch.PtrSize, 0) listSym.WriteInt(ctxt, listSym.Size, ctxt.Arch.PtrSize, 0) diff --git a/src/cmd/compile/internal/ssa/debug_test.go b/src/cmd/compile/internal/ssa/debug_test.go index 0a409bec2c..73a0afb82c 100644 --- a/src/cmd/compile/internal/ssa/debug_test.go +++ b/src/cmd/compile/internal/ssa/debug_test.go @@ -22,24 +22,27 @@ import ( "time" ) -var update = flag.Bool("u", false, "update test reference files") -var verbose = flag.Bool("v", false, "print debugger interactions (very verbose)") -var dryrun = flag.Bool("n", false, "just print the command line and first debugging bits") -var useDelve = flag.Bool("d", false, "use Delve (dlv) instead of gdb, use dlv reverence files") -var force = flag.Bool("f", false, "force run under not linux-amd64; also do not use tempdir") +var ( + update = flag.Bool("u", false, "update test reference files") + verbose = flag.Bool("v", false, "print debugger interactions (very verbose)") + dryrun = flag.Bool("n", false, "just print the command line and first debugging bits") + useGdb = flag.Bool("g", false, "use Gdb instead of Delve (dlv), use gdb reference files") + force = flag.Bool("f", false, "force run under not linux-amd64; also do not use tempdir") + repeats = flag.Bool("r", false, "detect repeats in debug steps and don't ignore them") + inlines = flag.Bool("i", false, "do inlining for gdb (makes testing flaky till inlining info is correct)") +) -var repeats = flag.Bool("r", false, "detect repeats in debug steps and don't ignore them") -var inlines = flag.Bool("i", false, "do inlining for gdb (makes testing flaky till inlining info is correct)") - -var hexRe = regexp.MustCompile("0x[a-zA-Z0-9]+") -var numRe = regexp.MustCompile("-?[0-9]+") -var stringRe = regexp.MustCompile("\"([^\\\"]|(\\.))*\"") -var leadingDollarNumberRe = regexp.MustCompile("^[$][0-9]+") -var optOutGdbRe = regexp.MustCompile("[<]optimized out[>]") -var numberColonRe = regexp.MustCompile("^ *[0-9]+:") +var ( + hexRe = regexp.MustCompile("0x[a-zA-Z0-9]+") + numRe = regexp.MustCompile("-?[0-9]+") + stringRe = regexp.MustCompile("\"([^\\\"]|(\\.))*\"") + leadingDollarNumberRe = regexp.MustCompile("^[$][0-9]+") + optOutGdbRe = regexp.MustCompile("[<]optimized out[>]") + numberColonRe = regexp.MustCompile("^ *[0-9]+:") +) var gdb = "gdb" // Might be "ggdb" on Darwin, because gdb no longer part of XCode -var debugger = "gdb" // For naming files, etc. +var debugger = "dlv" // For naming files, etc. var gogcflags = os.Getenv("GO_GCFLAGS") @@ -98,23 +101,18 @@ func TestNexting(t *testing.T) { } testenv.MustHaveGoBuild(t) - if !*useDelve && !*force && !(runtime.GOOS == "linux" && runtime.GOARCH == "amd64") { + if *useGdb && !*force && !(runtime.GOOS == "linux" && runtime.GOARCH == "amd64") { // Running gdb on OSX/darwin is very flaky. // Sometimes it is called ggdb, depending on how it is installed. // It also sometimes requires an admin password typed into a dialog box. // Various architectures tend to differ slightly sometimes, and keeping them // all in sync is a pain for people who don't have them all at hand, // so limit testing to amd64 (for now) - skipReasons += "not run unless linux-amd64 or -d (delve) or -f (force); " + skipReasons += "not run when testing gdb (-g) unless forced (-f) or linux-amd64" } - if *useDelve { - debugger = "dlv" - _, err := exec.LookPath("dlv") - if err != nil { - skipReasons += "not run because dlv (requested by -d option) not on path; " - } - } else { + if *useGdb { + debugger = "gdb" _, err := exec.LookPath(gdb) if err != nil { if runtime.GOOS != "darwin" { @@ -123,12 +121,18 @@ func TestNexting(t *testing.T) { // On Darwin, MacPorts installs gdb as "ggdb". _, err = exec.LookPath("ggdb") if err != nil { - skipReasons += "not run because gdb (and also ggdb) not on path; " + skipReasons += "not run because gdb (and also ggdb) request by -g option not on path; " } else { gdb = "ggdb" } } } + } else { // Delve + debugger = "dlv" + _, err := exec.LookPath("dlv") + if err != nil { + skipReasons += "not run because dlv not on path; " + } } if skipReasons != "" { @@ -137,14 +141,14 @@ func TestNexting(t *testing.T) { optFlags := "" // Whatever flags are needed to test debugging of optimized code. dbgFlags := "-N -l" - if !*useDelve && !*inlines { + if *useGdb && !*inlines { // For gdb (default), disable inlining so that a compiler test does not depend on library code. - // TODO: Technically not necessary in 1.10, but it causes a largish regression that needs investigation. + // TODO: Technically not necessary in 1.10 and later, but it causes a largish regression that needs investigation. optFlags += " -l" } moreargs := []string{} - if !*useDelve && (runtime.GOOS == "darwin" || runtime.GOOS == "windows") { + if *useGdb && (runtime.GOOS == "darwin" || runtime.GOOS == "windows") { // gdb and lldb on Darwin do not deal with compressed dwarf. // also, Windows. moreargs = append(moreargs, "-ldflags=-compressdwarf=false") @@ -156,33 +160,53 @@ func TestNexting(t *testing.T) { subTest(t, debugger+"-dbg-race", "i22600", dbgFlags, append(moreargs, "-race")...) - optSubTest(t, debugger+"-opt", "hist", optFlags, moreargs...) - optSubTest(t, debugger+"-opt", "scopes", optFlags, moreargs...) + optSubTest(t, debugger+"-opt", "hist", optFlags, 1000, moreargs...) + optSubTest(t, debugger+"-opt", "scopes", optFlags, 1000, moreargs...) + + // Was optSubtest, this test is observed flaky on Linux in Docker on (busy) macOS, probably because of timing + // glitches in this harness. + // TODO get rid of timing glitches in this harness. + skipSubTest(t, debugger+"-opt", "infloop", optFlags, 10, moreargs...) + } // subTest creates a subtest that compiles basename.go with the specified gcflags and additional compiler arguments, // then runs the debugger on the resulting binary, with any comment-specified actions matching tag triggered. func subTest(t *testing.T, tag string, basename string, gcflags string, moreargs ...string) { t.Run(tag+"-"+basename, func(t *testing.T) { - testNexting(t, basename, tag, gcflags, moreargs...) + if t.Name() == "TestNexting/gdb-dbg-i22558" { + testenv.SkipFlaky(t, 31263) + } + testNexting(t, basename, tag, gcflags, 1000, moreargs...) + }) +} + +// skipSubTest is the same as subTest except that it skips the test if execution is not forced (-f) +func skipSubTest(t *testing.T, tag string, basename string, gcflags string, count int, moreargs ...string) { + t.Run(tag+"-"+basename, func(t *testing.T) { + if *force { + testNexting(t, basename, tag, gcflags, count, moreargs...) + } else { + t.Skip("skipping flaky test becaused not forced (-f)") + } }) } // optSubTest is the same as subTest except that it skips the test if the runtime and libraries // were not compiled with optimization turned on. (The skip may not be necessary with Go 1.10 and later) -func optSubTest(t *testing.T, tag string, basename string, gcflags string, moreargs ...string) { +func optSubTest(t *testing.T, tag string, basename string, gcflags string, count int, moreargs ...string) { // If optimized test is run with unoptimized libraries (compiled with -N -l), it is very likely to fail. // This occurs in the noopt builders (for example). t.Run(tag+"-"+basename, func(t *testing.T) { if *force || optimizedLibs { - testNexting(t, basename, tag, gcflags, moreargs...) + testNexting(t, basename, tag, gcflags, count, moreargs...) } else { t.Skip("skipping for unoptimized stdlib/runtime") } }) } -func testNexting(t *testing.T, base, tag, gcflags string, moreArgs ...string) { +func testNexting(t *testing.T, base, tag, gcflags string, count int, moreArgs ...string) { // (1) In testdata, build sample.go into test-sample. // (2) Run debugger gathering a history // (3) Read expected history from testdata/sample..nexts @@ -214,12 +238,12 @@ func testNexting(t *testing.T, base, tag, gcflags string, moreArgs ...string) { nextlog := testbase + ".nexts" tmplog := tmpbase + ".nexts" var dbg dbgr - if *useDelve { - dbg = newDelve(tag, exe) - } else { + if *useGdb { dbg = newGdb(tag, exe) + } else { + dbg = newDelve(tag, exe) } - h1 := runDbgr(dbg, 1000) + h1 := runDbgr(dbg, count) if *dryrun { fmt.Printf("# Tag for above is %s\n", dbg.tag()) return @@ -261,6 +285,7 @@ func runDbgr(dbg dbgr, maxNext int) *nextHist { break } } + dbg.quit() h := dbg.hist() return h } @@ -298,7 +323,7 @@ func (t tstring) String() string { } type pos struct { - line uint16 + line uint32 file uint8 // Artifact of plans to implement differencing instead of calling out to diff. } @@ -386,7 +411,7 @@ func (h *nextHist) add(file, line, text string) bool { } } l := len(h.ps) - p := pos{line: uint16(li), file: fi} + p := pos{line: uint32(li), file: fi} if l == 0 || *repeats || h.ps[l-1] != p { h.ps = append(h.ps, p) @@ -534,7 +559,7 @@ func (s *delveState) start() { panic(fmt.Sprintf("There was an error [start] running '%s', %v\n", line, err)) } s.ioState.readExpecting(-1, 5000, "Type 'help' for list of commands.") - expect("Breakpoint [0-9]+ set at ", s.ioState.writeReadExpect("b main.test\n", "[(]dlv[)] ")) + s.ioState.writeReadExpect("b main.test\n", "[(]dlv[)] ") s.stepnext("c") } @@ -593,7 +618,7 @@ func (s *gdbState) start() { line := asCommandLine("", s.cmd) panic(fmt.Sprintf("There was an error [start] running '%s', %v\n", line, err)) } - s.ioState.readExpecting(-1, -1, "[(]gdb[)] ") + s.ioState.readSimpleExpecting("[(]gdb[)] ") x := s.ioState.writeReadExpect("b main.test\n", "[(]gdb[)] ") expect("Breakpoint [0-9]+ at", x) s.stepnext(run) @@ -721,6 +746,15 @@ func varsToPrint(line, lookfor string) []string { func (s *gdbState) quit() { response := s.ioState.writeRead("q\n") if strings.Contains(response.o, "Quit anyway? (y or n)") { + defer func() { + if r := recover(); r != nil { + if s, ok := r.(string); !(ok && strings.Contains(s, "'Y\n'")) { + // Not the panic that was expected. + fmt.Printf("Expected a broken pipe panic, but saw the following panic instead") + panic(r) + } + } + }() s.ioState.writeRead("Y\n") } } @@ -826,7 +860,7 @@ func (s *ioState) writeReadExpect(ss, expectRE string) tstring { if err != nil { panic(fmt.Sprintf("There was an error writing '%s', %v\n", ss, err)) } - return s.readExpecting(-1, -1, expectRE) + return s.readSimpleExpecting(expectRE) } func (s *ioState) readExpecting(millis, interlineTimeout int, expectedRE string) tstring { @@ -873,6 +907,40 @@ loop: return s.last } +func (s *ioState) readSimpleExpecting(expectedRE string) tstring { + s.last = tstring{} + var re *regexp.Regexp + if expectedRE != "" { + re = regexp.MustCompile(expectedRE) + } + for { + select { + case x, ok := <-s.outChan: + if !ok { + s.outChan = nil + } + s.last.o += x + case x, ok := <-s.errChan: + if !ok { + s.errChan = nil + } + s.last.e += x + } + if re != nil { + if re.MatchString(s.last.o) { + break + } + if re.MatchString(s.last.e) { + break + } + } + } + if *verbose { + fmt.Printf("<= %s%s", s.last.o, s.last.e) + } + return s.last +} + // replaceEnv returns a new environment derived from env // by removing any existing definition of ev and adding ev=evv. func replaceEnv(env []string, ev string, evv string) []string { @@ -934,7 +1002,8 @@ func expect(want string, got tstring) { if match { return } - match, err = regexp.MatchString(want, got.e) + // Ignore error as we have already checked for it before + match, _ = regexp.MatchString(want, got.e) if match { return } diff --git a/src/cmd/compile/internal/ssa/flagalloc.go b/src/cmd/compile/internal/ssa/flagalloc.go index 56c12e320a..7a2ecc22dc 100644 --- a/src/cmd/compile/internal/ssa/flagalloc.go +++ b/src/cmd/compile/internal/ssa/flagalloc.go @@ -4,30 +4,6 @@ package ssa -// When breaking up a combined load-compare to separated load and compare operations, -// opLoad specifies the load operation, and opCmp specifies the compare operation. -type typeCmdLoadMap struct { - opLoad Op - opCmp Op -} - -var opCmpLoadMap = map[Op]typeCmdLoadMap{ - OpAMD64CMPQload: {OpAMD64MOVQload, OpAMD64CMPQ}, - OpAMD64CMPLload: {OpAMD64MOVLload, OpAMD64CMPL}, - OpAMD64CMPWload: {OpAMD64MOVWload, OpAMD64CMPW}, - OpAMD64CMPBload: {OpAMD64MOVBload, OpAMD64CMPB}, - Op386CMPLload: {Op386MOVLload, Op386CMPL}, - Op386CMPWload: {Op386MOVWload, Op386CMPW}, - Op386CMPBload: {Op386MOVBload, Op386CMPB}, - OpAMD64CMPQconstload: {OpAMD64MOVQload, OpAMD64CMPQconst}, - OpAMD64CMPLconstload: {OpAMD64MOVLload, OpAMD64CMPLconst}, - OpAMD64CMPWconstload: {OpAMD64MOVWload, OpAMD64CMPWconst}, - OpAMD64CMPBconstload: {OpAMD64MOVBload, OpAMD64CMPBconst}, - Op386CMPLconstload: {Op386MOVLload, Op386CMPLconst}, - Op386CMPWconstload: {Op386MOVWload, Op386CMPWconst}, - Op386CMPBconstload: {Op386MOVBload, Op386CMPBconst}, -} - // flagalloc allocates the flag register among all the flag-generating // instructions. Flag values are recomputed if they need to be // spilled/restored. @@ -142,67 +118,10 @@ func flagalloc(f *Func) { // If v will be spilled, and v uses memory, then we must split it // into a load + a flag generator. - // TODO: figure out how to do this without arch-dependent code. if spill[v.ID] && v.MemoryArg() != nil { - switch v.Op { - case OpAMD64CMPQload: - load := b.NewValue2IA(v.Pos, opCmpLoadMap[v.Op].opLoad, f.Config.Types.UInt64, v.AuxInt, v.Aux, v.Args[0], v.Args[2]) - v.Op = opCmpLoadMap[v.Op].opCmp - v.AuxInt = 0 - v.Aux = nil - v.SetArgs2(load, v.Args[1]) - case OpAMD64CMPLload, Op386CMPLload: - load := b.NewValue2IA(v.Pos, opCmpLoadMap[v.Op].opLoad, f.Config.Types.UInt32, v.AuxInt, v.Aux, v.Args[0], v.Args[2]) - v.Op = opCmpLoadMap[v.Op].opCmp - v.AuxInt = 0 - v.Aux = nil - v.SetArgs2(load, v.Args[1]) - case OpAMD64CMPWload, Op386CMPWload: - load := b.NewValue2IA(v.Pos, opCmpLoadMap[v.Op].opLoad, f.Config.Types.UInt16, v.AuxInt, v.Aux, v.Args[0], v.Args[2]) - v.Op = opCmpLoadMap[v.Op].opCmp - v.AuxInt = 0 - v.Aux = nil - v.SetArgs2(load, v.Args[1]) - case OpAMD64CMPBload, Op386CMPBload: - load := b.NewValue2IA(v.Pos, opCmpLoadMap[v.Op].opLoad, f.Config.Types.UInt8, v.AuxInt, v.Aux, v.Args[0], v.Args[2]) - v.Op = opCmpLoadMap[v.Op].opCmp - v.AuxInt = 0 - v.Aux = nil - v.SetArgs2(load, v.Args[1]) - - case OpAMD64CMPQconstload: - vo := v.AuxValAndOff() - load := b.NewValue2IA(v.Pos, opCmpLoadMap[v.Op].opLoad, f.Config.Types.UInt64, vo.Off(), v.Aux, v.Args[0], v.Args[1]) - v.Op = opCmpLoadMap[v.Op].opCmp - v.AuxInt = vo.Val() - v.Aux = nil - v.SetArgs1(load) - case OpAMD64CMPLconstload, Op386CMPLconstload: - vo := v.AuxValAndOff() - load := b.NewValue2IA(v.Pos, opCmpLoadMap[v.Op].opLoad, f.Config.Types.UInt32, vo.Off(), v.Aux, v.Args[0], v.Args[1]) - v.Op = opCmpLoadMap[v.Op].opCmp - v.AuxInt = vo.Val() - v.Aux = nil - v.SetArgs1(load) - case OpAMD64CMPWconstload, Op386CMPWconstload: - vo := v.AuxValAndOff() - load := b.NewValue2IA(v.Pos, opCmpLoadMap[v.Op].opLoad, f.Config.Types.UInt16, vo.Off(), v.Aux, v.Args[0], v.Args[1]) - v.Op = opCmpLoadMap[v.Op].opCmp - v.AuxInt = vo.Val() - v.Aux = nil - v.SetArgs1(load) - case OpAMD64CMPBconstload, Op386CMPBconstload: - vo := v.AuxValAndOff() - load := b.NewValue2IA(v.Pos, opCmpLoadMap[v.Op].opLoad, f.Config.Types.UInt8, vo.Off(), v.Aux, v.Args[0], v.Args[1]) - v.Op = opCmpLoadMap[v.Op].opCmp - v.AuxInt = vo.Val() - v.Aux = nil - v.SetArgs1(load) - - default: + if !f.Config.splitLoad(v) { f.Fatalf("can't split flag generator: %s", v.LongString()) } - } // Make sure any flag arg of v is in the flags register. diff --git a/src/cmd/compile/internal/ssa/func.go b/src/cmd/compile/internal/ssa/func.go index 7e7e2042d9..cdd5161913 100644 --- a/src/cmd/compile/internal/ssa/func.go +++ b/src/cmd/compile/internal/ssa/func.go @@ -38,9 +38,10 @@ type Func struct { // Given an environment variable used for debug hash match, // what file (if any) receives the yes/no logging? logfiles map[string]writeSyncer - HTMLWriter *HTMLWriter // html writer, for debugging - DebugTest bool // default true unless $GOSSAHASH != ""; as a debugging aid, make new code conditional on this and use GOSSAHASH to binary search for failing cases - PrintOrHtmlSSA bool // true if GOSSAFUNC matches, true even if fe.Log() (spew phase results to stdout) is false. + HTMLWriter *HTMLWriter // html writer, for debugging + DebugTest bool // default true unless $GOSSAHASH != ""; as a debugging aid, make new code conditional on this and use GOSSAHASH to binary search for failing cases + PrintOrHtmlSSA bool // true if GOSSAFUNC matches, true even if fe.Log() (spew phase results to stdout) is false. + ruleMatches map[string]int // number of times countRule was called during compilation for any given string scheduled bool // Values in Blocks are in final order laidout bool // Blocks are ordered @@ -64,11 +65,11 @@ type Func struct { freeValues *Value // free Values linked by argstorage[0]. All other fields except ID are 0/nil. freeBlocks *Block // free Blocks linked by succstorage[0].b. All other fields except ID are 0/nil. - cachedPostorder []*Block // cached postorder traversal - cachedIdom []*Block // cached immediate dominators - cachedSdom SparseTree // cached dominator tree - cachedLoopnest *loopnest // cached loop nest information - cachedLineStarts *biasedSparseMap // cached map/set of line numbers to integers + cachedPostorder []*Block // cached postorder traversal + cachedIdom []*Block // cached immediate dominators + cachedSdom SparseTree // cached dominator tree + cachedLoopnest *loopnest // cached loop nest information + cachedLineStarts *xposmap // cached map/set of xpos to integers auxmap auxmap // map from aux values to opaque ids used by CSE constants map[int64][]*Value // constants cache, keyed by constant value; users must check value's Op and Type @@ -153,6 +154,33 @@ func (f *Func) retPoset(po *poset) { f.Cache.scrPoset = append(f.Cache.scrPoset, po) } +// newDeadcodeLive returns a slice for the +// deadcode pass to use to indicate which values are live. +func (f *Func) newDeadcodeLive() []bool { + r := f.Cache.deadcode.live + f.Cache.deadcode.live = nil + return r +} + +// retDeadcodeLive returns a deadcode live value slice for re-use. +func (f *Func) retDeadcodeLive(live []bool) { + f.Cache.deadcode.live = live +} + +// newDeadcodeLiveOrderStmts returns a slice for the +// deadcode pass to use to indicate which values +// need special treatment for statement boundaries. +func (f *Func) newDeadcodeLiveOrderStmts() []*Value { + r := f.Cache.deadcode.liveOrderStmts + f.Cache.deadcode.liveOrderStmts = nil + return r +} + +// retDeadcodeLiveOrderStmts returns a deadcode liveOrderStmts slice for re-use. +func (f *Func) retDeadcodeLiveOrderStmts(liveOrderStmts []*Value) { + f.Cache.deadcode.liveOrderStmts = liveOrderStmts +} + // newValue allocates a new Value with the given fields and places it at the end of b.Values. func (f *Func) newValue(op Op, t *types.Type, b *Block, pos src.XPos) *Value { var v *Value @@ -485,6 +513,18 @@ func (b *Block) NewValue4(pos src.XPos, op Op, t *types.Type, arg0, arg1, arg2, return v } +// NewValue4I returns a new value in the block with four arguments and and auxint value. +func (b *Block) NewValue4I(pos src.XPos, op Op, t *types.Type, auxint int64, arg0, arg1, arg2, arg3 *Value) *Value { + v := b.Func.newValue(op, t, b, pos) + v.AuxInt = auxint + v.Args = []*Value{arg0, arg1, arg2, arg3} + arg0.Uses++ + arg1.Uses++ + arg2.Uses++ + arg3.Uses++ + return v +} + // constVal returns a constant value for c. func (f *Func) constVal(op Op, t *types.Type, c int64, setAuxInt bool) *Value { if f.constants == nil { diff --git a/src/cmd/compile/internal/ssa/func_test.go b/src/cmd/compile/internal/ssa/func_test.go index 74ce62ba7e..5f6f80f72a 100644 --- a/src/cmd/compile/internal/ssa/func_test.go +++ b/src/cmd/compile/internal/ssa/func_test.go @@ -152,7 +152,7 @@ func (c *Conf) Fun(entry string, blocs ...bloc) fun { // But not both. f.Cache = new(Cache) f.pass = &emptyPass - f.cachedLineStarts = newBiasedSparseMap(0, 100) + f.cachedLineStarts = newXposmap(map[int]lineRange{0: {0, 100}, 1: {0, 100}, 2: {0, 100}, 3: {0, 100}, 4: {0, 100}}) blocks := make(map[string]*Block) values := make(map[string]*Value) diff --git a/src/cmd/compile/internal/ssa/fuse.go b/src/cmd/compile/internal/ssa/fuse.go index c451904124..73532ee6e5 100644 --- a/src/cmd/compile/internal/ssa/fuse.go +++ b/src/cmd/compile/internal/ssa/fuse.go @@ -36,6 +36,9 @@ func fuse(f *Func, typ fuseType) { changed = fuseBlockPlain(b) || changed } } + if changed { + f.invalidateCFG() + } } } @@ -207,7 +210,6 @@ func fuseBlockPlain(b *Block) bool { if f.Entry == b { f.Entry = c } - f.invalidateCFG() // trash b, just in case b.Kind = BlockInvalid diff --git a/src/cmd/compile/internal/ssa/gen/386.rules b/src/cmd/compile/internal/ssa/gen/386.rules index 2ee0b2a928..d7cbba1718 100644 --- a/src/cmd/compile/internal/ssa/gen/386.rules +++ b/src/cmd/compile/internal/ssa/gen/386.rules @@ -165,6 +165,11 @@ (Rsh16x64 x (Const64 [c])) && uint64(c) >= 16 -> (SARWconst x [15]) (Rsh8x64 x (Const64 [c])) && uint64(c) >= 8 -> (SARBconst x [7]) +// constant rotates +(RotateLeft32 x (MOVLconst [c])) -> (ROLLconst [c&31] x) +(RotateLeft16 x (MOVLconst [c])) -> (ROLWconst [c&15] x) +(RotateLeft8 x (MOVLconst [c])) -> (ROLBconst [c&7] x) + // Lowering comparisons (Less32 x y) -> (SETL (CMPL x y)) (Less16 x y) -> (SETL (CMPW x y)) @@ -385,6 +390,14 @@ // Write barrier. (WB {fn} destptr srcptr mem) -> (LoweredWB {fn} destptr srcptr mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 0 -> (LoweredPanicBoundsA [kind] x y mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 1 -> (LoweredPanicBoundsB [kind] x y mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 2 -> (LoweredPanicBoundsC [kind] x y mem) + +(PanicExtend [kind] hi lo y mem) && boundsABI(kind) == 0 -> (LoweredPanicExtendA [kind] hi lo y mem) +(PanicExtend [kind] hi lo y mem) && boundsABI(kind) == 1 -> (LoweredPanicExtendB [kind] hi lo y mem) +(PanicExtend [kind] hi lo y mem) && boundsABI(kind) == 2 -> (LoweredPanicExtendC [kind] hi lo y mem) + // *************************** // Above: lowering rules // Below: optimizations diff --git a/src/cmd/compile/internal/ssa/gen/386Ops.go b/src/cmd/compile/internal/ssa/gen/386Ops.go index fa3e7cd375..2851c4321c 100644 --- a/src/cmd/compile/internal/ssa/gen/386Ops.go +++ b/src/cmd/compile/internal/ssa/gen/386Ops.go @@ -86,6 +86,8 @@ func init() { ax = buildReg("AX") cx = buildReg("CX") dx = buildReg("DX") + bx = buildReg("BX") + si = buildReg("SI") gp = buildReg("AX CX DX BX BP SI DI") fp = buildReg("X0 X1 X2 X3 X4 X5 X6 X7") gpsp = gp | buildReg("SP") @@ -524,6 +526,17 @@ func init() { // It saves all GP registers if necessary, but may clobber others. {name: "LoweredWB", argLength: 3, reg: regInfo{inputs: []regMask{buildReg("DI"), ax}, clobbers: callerSave &^ gp}, clobberFlags: true, aux: "Sym", symEffect: "None"}, + // There are three of these functions so that they can have three different register inputs. + // When we check 0 <= c <= cap (A), then 0 <= b <= c (B), then 0 <= a <= b (C), we want the + // default registers to match so we don't need to copy registers around unnecessarily. + {name: "LoweredPanicBoundsA", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{dx, bx}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in genericOps.go). + {name: "LoweredPanicBoundsB", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{cx, dx}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in genericOps.go). + {name: "LoweredPanicBoundsC", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{ax, cx}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in genericOps.go). + // Extend ops are the same as Bounds ops except the indexes are 64-bit. + {name: "LoweredPanicExtendA", argLength: 4, aux: "Int64", reg: regInfo{inputs: []regMask{si, dx, bx}}, typ: "Mem"}, // arg0=idxHi, arg1=idxLo, arg2=len, arg3=mem, returns memory. AuxInt contains report code (see PanicExtend in genericOps.go). + {name: "LoweredPanicExtendB", argLength: 4, aux: "Int64", reg: regInfo{inputs: []regMask{si, cx, dx}}, typ: "Mem"}, // arg0=idxHi, arg1=idxLo, arg2=len, arg3=mem, returns memory. AuxInt contains report code (see PanicExtend in genericOps.go). + {name: "LoweredPanicExtendC", argLength: 4, aux: "Int64", reg: regInfo{inputs: []regMask{si, ax, cx}}, typ: "Mem"}, // arg0=idxHi, arg1=idxLo, arg2=len, arg3=mem, returns memory. AuxInt contains report code (see PanicExtend in genericOps.go). + // Constant flag values. For any comparison, there are 5 possible // outcomes: the three from the signed total order (<,==,>) and the // three from the unsigned total order. The == cases overlap. diff --git a/src/cmd/compile/internal/ssa/gen/386splitload.rules b/src/cmd/compile/internal/ssa/gen/386splitload.rules new file mode 100644 index 0000000000..7d24700750 --- /dev/null +++ b/src/cmd/compile/internal/ssa/gen/386splitload.rules @@ -0,0 +1,9 @@ +// 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. + +// See the top of AMD64splitload.rules for discussion of these rules. + +(CMP(L|W|B)load {sym} [off] ptr x mem) -> (CMP(L|W|B) (MOV(L|W|B)load {sym} [off] ptr mem) x) + +(CMP(L|W|B)constload {sym} [vo] ptr mem) -> (CMP(L|W|B)const (MOV(L|W|B)load {sym} [offOnly(vo)] ptr mem) [valOnly(vo)]) diff --git a/src/cmd/compile/internal/ssa/gen/AMD64.rules b/src/cmd/compile/internal/ssa/gen/AMD64.rules index 6b2d3f77cf..5e59f7def2 100644 --- a/src/cmd/compile/internal/ssa/gen/AMD64.rules +++ b/src/cmd/compile/internal/ssa/gen/AMD64.rules @@ -225,7 +225,8 @@ (NeqPtr x y) && config.PtrSize == 4 -> (SETNE (CMPL x y)) (Neq(32|64)F x y) -> (SETNEF (UCOMIS(S|D) x y)) -(Int64Hi x) -> (SHRQconst [32] x) // needed for amd64p32 +(Int64Hi x) -> (SHRQconst [32] x) // needed for amd64p32 +(Int64Lo x) -> x // Lowering loads (Load ptr mem) && (is64BitInt(t) || isPtr(t) && config.PtrSize == 8) -> (MOVQload ptr mem) @@ -526,6 +527,7 @@ (If cond yes no) -> (NE (TESTB cond cond) yes no) // Atomic loads. Other than preserving their ordering with respect to other loads, nothing special here. +(AtomicLoad8 ptr mem) -> (MOVBatomicload ptr mem) (AtomicLoad32 ptr mem) -> (MOVLatomicload ptr mem) (AtomicLoad64 ptr mem) -> (MOVQatomicload ptr mem) (AtomicLoadPtr ptr mem) && config.PtrSize == 8 -> (MOVQatomicload ptr mem) @@ -561,6 +563,15 @@ // Write barrier. (WB {fn} destptr srcptr mem) -> (LoweredWB {fn} destptr srcptr mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 0 -> (LoweredPanicBoundsA [kind] x y mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 1 -> (LoweredPanicBoundsB [kind] x y mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 2 -> (LoweredPanicBoundsC [kind] x y mem) + +// For amd64p32 +(PanicExtend [kind] hi lo y mem) && boundsABI(kind) == 0 -> (LoweredPanicExtendA [kind] hi lo y mem) +(PanicExtend [kind] hi lo y mem) && boundsABI(kind) == 1 -> (LoweredPanicExtendB [kind] hi lo y mem) +(PanicExtend [kind] hi lo y mem) && boundsABI(kind) == 2 -> (LoweredPanicExtendC [kind] hi lo y mem) + // *************************** // Above: lowering rules // Below: optimizations @@ -1358,65 +1369,65 @@ ((SETNE|SETG|SETGE|SETA|SETAE) (FlagGT_UGT)) -> (MOVLconst [1]) ((SETEQ|SETL|SETLE|SETB|SETBE) (FlagGT_UGT)) -> (MOVLconst [0]) -(SETEQstore [off] {sym} ptr x:(FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETEQstore [off] {sym} ptr x:(FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETEQstore [off] {sym} ptr x:(FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETEQstore [off] {sym} ptr x:(FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETEQstore [off] {sym} ptr x:(FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETEQstore [off] {sym} ptr (FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETEQstore [off] {sym} ptr (FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETEQstore [off] {sym} ptr (FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETEQstore [off] {sym} ptr (FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETEQstore [off] {sym} ptr (FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETNEstore [off] {sym} ptr x:(FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETNEstore [off] {sym} ptr x:(FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETNEstore [off] {sym} ptr x:(FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETNEstore [off] {sym} ptr x:(FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETNEstore [off] {sym} ptr x:(FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETNEstore [off] {sym} ptr (FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETNEstore [off] {sym} ptr (FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETNEstore [off] {sym} ptr (FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETNEstore [off] {sym} ptr (FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETNEstore [off] {sym} ptr (FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETLstore [off] {sym} ptr x:(FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETLstore [off] {sym} ptr x:(FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETLstore [off] {sym} ptr x:(FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETLstore [off] {sym} ptr x:(FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETLstore [off] {sym} ptr x:(FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETLstore [off] {sym} ptr (FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETLstore [off] {sym} ptr (FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETLstore [off] {sym} ptr (FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETLstore [off] {sym} ptr (FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETLstore [off] {sym} ptr (FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETLEstore [off] {sym} ptr x:(FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETLEstore [off] {sym} ptr x:(FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETLEstore [off] {sym} ptr x:(FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETLEstore [off] {sym} ptr x:(FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETLEstore [off] {sym} ptr x:(FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETLEstore [off] {sym} ptr (FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETLEstore [off] {sym} ptr (FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETLEstore [off] {sym} ptr (FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETLEstore [off] {sym} ptr (FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETLEstore [off] {sym} ptr (FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETGstore [off] {sym} ptr x:(FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETGstore [off] {sym} ptr x:(FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETGstore [off] {sym} ptr x:(FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETGstore [off] {sym} ptr x:(FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETGstore [off] {sym} ptr x:(FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETGstore [off] {sym} ptr (FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETGstore [off] {sym} ptr (FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETGstore [off] {sym} ptr (FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETGstore [off] {sym} ptr (FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETGstore [off] {sym} ptr (FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETGEstore [off] {sym} ptr x:(FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETGEstore [off] {sym} ptr x:(FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETGEstore [off] {sym} ptr x:(FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETGEstore [off] {sym} ptr x:(FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETGEstore [off] {sym} ptr x:(FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETGEstore [off] {sym} ptr (FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETGEstore [off] {sym} ptr (FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETGEstore [off] {sym} ptr (FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETGEstore [off] {sym} ptr (FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETGEstore [off] {sym} ptr (FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETBstore [off] {sym} ptr x:(FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETBstore [off] {sym} ptr x:(FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETBstore [off] {sym} ptr x:(FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETBstore [off] {sym} ptr x:(FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETBstore [off] {sym} ptr x:(FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETBstore [off] {sym} ptr (FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETBstore [off] {sym} ptr (FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETBstore [off] {sym} ptr (FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETBstore [off] {sym} ptr (FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETBstore [off] {sym} ptr (FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETBEstore [off] {sym} ptr x:(FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETBEstore [off] {sym} ptr x:(FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETBEstore [off] {sym} ptr x:(FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETBEstore [off] {sym} ptr x:(FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETBEstore [off] {sym} ptr x:(FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETBEstore [off] {sym} ptr (FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETBEstore [off] {sym} ptr (FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETBEstore [off] {sym} ptr (FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETBEstore [off] {sym} ptr (FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETBEstore [off] {sym} ptr (FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETAstore [off] {sym} ptr x:(FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETAstore [off] {sym} ptr x:(FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETAstore [off] {sym} ptr x:(FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETAstore [off] {sym} ptr x:(FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETAstore [off] {sym} ptr x:(FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETAstore [off] {sym} ptr (FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETAstore [off] {sym} ptr (FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETAstore [off] {sym} ptr (FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETAstore [off] {sym} ptr (FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETAstore [off] {sym} ptr (FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETAEstore [off] {sym} ptr x:(FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETAEstore [off] {sym} ptr x:(FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETAEstore [off] {sym} ptr x:(FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) -(SETAEstore [off] {sym} ptr x:(FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) -(SETAEstore [off] {sym} ptr x:(FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETAEstore [off] {sym} ptr (FlagEQ) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETAEstore [off] {sym} ptr (FlagLT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETAEstore [off] {sym} ptr (FlagLT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) +(SETAEstore [off] {sym} ptr (FlagGT_ULT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) +(SETAEstore [off] {sym} ptr (FlagGT_UGT) mem) -> (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) // Remove redundant *const ops (ADDQconst [0] x) -> x @@ -2383,14 +2394,10 @@ ((ADD|SUB|AND|OR|XOR|BTC|BTR|BTS)Qmodify [off] {sym} ptr x mem) // Merge ADDQconst and LEAQ into atomic loads. -(MOVQatomicload [off1] {sym} (ADDQconst [off2] ptr) mem) && is32Bit(off1+off2) -> - (MOVQatomicload [off1+off2] {sym} ptr mem) -(MOVLatomicload [off1] {sym} (ADDQconst [off2] ptr) mem) && is32Bit(off1+off2) -> - (MOVLatomicload [off1+off2] {sym} ptr mem) -(MOVQatomicload [off1] {sym1} (LEAQ [off2] {sym2} ptr) mem) && is32Bit(off1+off2) && canMergeSym(sym1, sym2) -> - (MOVQatomicload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) -(MOVLatomicload [off1] {sym1} (LEAQ [off2] {sym2} ptr) mem) && is32Bit(off1+off2) && canMergeSym(sym1, sym2) -> - (MOVLatomicload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) +(MOV(Q|L|B)atomicload [off1] {sym} (ADDQconst [off2] ptr) mem) && is32Bit(off1+off2) -> + (MOV(Q|L|B)atomicload [off1+off2] {sym} ptr mem) +(MOV(Q|L|B)atomicload [off1] {sym1} (LEAQ [off2] {sym2} ptr) mem) && is32Bit(off1+off2) && canMergeSym(sym1, sym2) -> + (MOV(Q|L|B)atomicload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) // Merge ADDQconst and LEAQ into atomic stores. (XCHGQ [off1] {sym} val (ADDQconst [off2] ptr) mem) && is32Bit(off1+off2) -> diff --git a/src/cmd/compile/internal/ssa/gen/AMD64Ops.go b/src/cmd/compile/internal/ssa/gen/AMD64Ops.go index c2ed0ea1d9..739733cf16 100644 --- a/src/cmd/compile/internal/ssa/gen/AMD64Ops.go +++ b/src/cmd/compile/internal/ssa/gen/AMD64Ops.go @@ -93,6 +93,8 @@ func init() { ax = buildReg("AX") cx = buildReg("CX") dx = buildReg("DX") + bx = buildReg("BX") + si = buildReg("SI") gp = buildReg("AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15") fp = buildReg("X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15") gpsp = gp | buildReg("SP") @@ -174,17 +176,17 @@ func init() { {name: "MOVSDload", argLength: 2, reg: fpload, asm: "MOVSD", aux: "SymOff", faultOnNilArg0: true, symEffect: "Read"}, // fp64 load {name: "MOVSSconst", reg: fp01, asm: "MOVSS", aux: "Float32", rematerializeable: true}, // fp32 constant {name: "MOVSDconst", reg: fp01, asm: "MOVSD", aux: "Float64", rematerializeable: true}, // fp64 constant - {name: "MOVSSloadidx1", argLength: 3, reg: fploadidx, asm: "MOVSS", aux: "SymOff", symEffect: "Read"}, // fp32 load indexed by i - {name: "MOVSSloadidx4", argLength: 3, reg: fploadidx, asm: "MOVSS", aux: "SymOff", symEffect: "Read"}, // fp32 load indexed by 4*i - {name: "MOVSDloadidx1", argLength: 3, reg: fploadidx, asm: "MOVSD", aux: "SymOff", symEffect: "Read"}, // fp64 load indexed by i - {name: "MOVSDloadidx8", argLength: 3, reg: fploadidx, asm: "MOVSD", aux: "SymOff", symEffect: "Read"}, // fp64 load indexed by 8*i + {name: "MOVSSloadidx1", argLength: 3, reg: fploadidx, asm: "MOVSS", scale: 1, aux: "SymOff", symEffect: "Read"}, // fp32 load indexed by i + {name: "MOVSSloadidx4", argLength: 3, reg: fploadidx, asm: "MOVSS", scale: 4, aux: "SymOff", symEffect: "Read"}, // fp32 load indexed by 4*i + {name: "MOVSDloadidx1", argLength: 3, reg: fploadidx, asm: "MOVSD", scale: 1, aux: "SymOff", symEffect: "Read"}, // fp64 load indexed by i + {name: "MOVSDloadidx8", argLength: 3, reg: fploadidx, asm: "MOVSD", scale: 8, aux: "SymOff", symEffect: "Read"}, // fp64 load indexed by 8*i {name: "MOVSSstore", argLength: 3, reg: fpstore, asm: "MOVSS", aux: "SymOff", faultOnNilArg0: true, symEffect: "Write"}, // fp32 store {name: "MOVSDstore", argLength: 3, reg: fpstore, asm: "MOVSD", aux: "SymOff", faultOnNilArg0: true, symEffect: "Write"}, // fp64 store - {name: "MOVSSstoreidx1", argLength: 4, reg: fpstoreidx, asm: "MOVSS", aux: "SymOff", symEffect: "Write"}, // fp32 indexed by i store - {name: "MOVSSstoreidx4", argLength: 4, reg: fpstoreidx, asm: "MOVSS", aux: "SymOff", symEffect: "Write"}, // fp32 indexed by 4i store - {name: "MOVSDstoreidx1", argLength: 4, reg: fpstoreidx, asm: "MOVSD", aux: "SymOff", symEffect: "Write"}, // fp64 indexed by i store - {name: "MOVSDstoreidx8", argLength: 4, reg: fpstoreidx, asm: "MOVSD", aux: "SymOff", symEffect: "Write"}, // fp64 indexed by 8i store + {name: "MOVSSstoreidx1", argLength: 4, reg: fpstoreidx, asm: "MOVSS", scale: 1, aux: "SymOff", symEffect: "Write"}, // fp32 indexed by i store + {name: "MOVSSstoreidx4", argLength: 4, reg: fpstoreidx, asm: "MOVSS", scale: 4, aux: "SymOff", symEffect: "Write"}, // fp32 indexed by 4i store + {name: "MOVSDstoreidx1", argLength: 4, reg: fpstoreidx, asm: "MOVSD", scale: 1, aux: "SymOff", symEffect: "Write"}, // fp64 indexed by i store + {name: "MOVSDstoreidx8", argLength: 4, reg: fpstoreidx, asm: "MOVSD", scale: 8, aux: "SymOff", symEffect: "Write"}, // fp64 indexed by 8i store {name: "ADDSSload", argLength: 3, reg: fp21load, asm: "ADDSS", aux: "SymOff", resultInArg0: true, faultOnNilArg1: true, symEffect: "Read"}, // fp32 arg0 + tmp, tmp loaded from arg1+auxint+aux, arg2 = mem {name: "ADDSDload", argLength: 3, reg: fp21load, asm: "ADDSD", aux: "SymOff", resultInArg0: true, faultOnNilArg1: true, symEffect: "Read"}, // fp64 arg0 + tmp, tmp loaded from arg1+auxint+aux, arg2 = mem @@ -544,21 +546,21 @@ func init() { {name: "PXOR", argLength: 2, reg: fp21, asm: "PXOR", commutative: true, resultInArg0: true}, // exclusive or, applied to X regs for float negation. - {name: "LEAQ", argLength: 1, reg: gp11sb, asm: "LEAQ", aux: "SymOff", rematerializeable: true, symEffect: "Addr"}, // arg0 + auxint + offset encoded in aux - {name: "LEAL", argLength: 1, reg: gp11sb, asm: "LEAL", aux: "SymOff", rematerializeable: true, symEffect: "Addr"}, // arg0 + auxint + offset encoded in aux - {name: "LEAW", argLength: 1, reg: gp11sb, asm: "LEAW", aux: "SymOff", rematerializeable: true, symEffect: "Addr"}, // arg0 + auxint + offset encoded in aux - {name: "LEAQ1", argLength: 2, reg: gp21sb, asm: "LEAQ", commutative: true, aux: "SymOff", symEffect: "Addr"}, // arg0 + arg1 + auxint + aux - {name: "LEAL1", argLength: 2, reg: gp21sb, asm: "LEAL", commutative: true, aux: "SymOff", symEffect: "Addr"}, // arg0 + arg1 + auxint + aux - {name: "LEAW1", argLength: 2, reg: gp21sb, asm: "LEAW", commutative: true, aux: "SymOff", symEffect: "Addr"}, // arg0 + arg1 + auxint + aux - {name: "LEAQ2", argLength: 2, reg: gp21sb, asm: "LEAQ", aux: "SymOff", symEffect: "Addr"}, // arg0 + 2*arg1 + auxint + aux - {name: "LEAL2", argLength: 2, reg: gp21sb, asm: "LEAL", aux: "SymOff", symEffect: "Addr"}, // arg0 + 2*arg1 + auxint + aux - {name: "LEAW2", argLength: 2, reg: gp21sb, asm: "LEAW", aux: "SymOff", symEffect: "Addr"}, // arg0 + 2*arg1 + auxint + aux - {name: "LEAQ4", argLength: 2, reg: gp21sb, asm: "LEAQ", aux: "SymOff", symEffect: "Addr"}, // arg0 + 4*arg1 + auxint + aux - {name: "LEAL4", argLength: 2, reg: gp21sb, asm: "LEAL", aux: "SymOff", symEffect: "Addr"}, // arg0 + 4*arg1 + auxint + aux - {name: "LEAW4", argLength: 2, reg: gp21sb, asm: "LEAW", aux: "SymOff", symEffect: "Addr"}, // arg0 + 4*arg1 + auxint + aux - {name: "LEAQ8", argLength: 2, reg: gp21sb, asm: "LEAQ", aux: "SymOff", symEffect: "Addr"}, // arg0 + 8*arg1 + auxint + aux - {name: "LEAL8", argLength: 2, reg: gp21sb, asm: "LEAL", aux: "SymOff", symEffect: "Addr"}, // arg0 + 8*arg1 + auxint + aux - {name: "LEAW8", argLength: 2, reg: gp21sb, asm: "LEAW", aux: "SymOff", symEffect: "Addr"}, // arg0 + 8*arg1 + auxint + aux + {name: "LEAQ", argLength: 1, reg: gp11sb, asm: "LEAQ", aux: "SymOff", rematerializeable: true, symEffect: "Addr"}, // arg0 + auxint + offset encoded in aux + {name: "LEAL", argLength: 1, reg: gp11sb, asm: "LEAL", aux: "SymOff", rematerializeable: true, symEffect: "Addr"}, // arg0 + auxint + offset encoded in aux + {name: "LEAW", argLength: 1, reg: gp11sb, asm: "LEAW", aux: "SymOff", rematerializeable: true, symEffect: "Addr"}, // arg0 + auxint + offset encoded in aux + {name: "LEAQ1", argLength: 2, reg: gp21sb, asm: "LEAQ", scale: 1, commutative: true, aux: "SymOff", symEffect: "Addr"}, // arg0 + arg1 + auxint + aux + {name: "LEAL1", argLength: 2, reg: gp21sb, asm: "LEAL", scale: 1, commutative: true, aux: "SymOff", symEffect: "Addr"}, // arg0 + arg1 + auxint + aux + {name: "LEAW1", argLength: 2, reg: gp21sb, asm: "LEAW", scale: 1, commutative: true, aux: "SymOff", symEffect: "Addr"}, // arg0 + arg1 + auxint + aux + {name: "LEAQ2", argLength: 2, reg: gp21sb, asm: "LEAQ", scale: 2, aux: "SymOff", symEffect: "Addr"}, // arg0 + 2*arg1 + auxint + aux + {name: "LEAL2", argLength: 2, reg: gp21sb, asm: "LEAL", scale: 2, aux: "SymOff", symEffect: "Addr"}, // arg0 + 2*arg1 + auxint + aux + {name: "LEAW2", argLength: 2, reg: gp21sb, asm: "LEAW", scale: 2, aux: "SymOff", symEffect: "Addr"}, // arg0 + 2*arg1 + auxint + aux + {name: "LEAQ4", argLength: 2, reg: gp21sb, asm: "LEAQ", scale: 4, aux: "SymOff", symEffect: "Addr"}, // arg0 + 4*arg1 + auxint + aux + {name: "LEAL4", argLength: 2, reg: gp21sb, asm: "LEAL", scale: 4, aux: "SymOff", symEffect: "Addr"}, // arg0 + 4*arg1 + auxint + aux + {name: "LEAW4", argLength: 2, reg: gp21sb, asm: "LEAW", scale: 4, aux: "SymOff", symEffect: "Addr"}, // arg0 + 4*arg1 + auxint + aux + {name: "LEAQ8", argLength: 2, reg: gp21sb, asm: "LEAQ", scale: 8, aux: "SymOff", symEffect: "Addr"}, // arg0 + 8*arg1 + auxint + aux + {name: "LEAL8", argLength: 2, reg: gp21sb, asm: "LEAL", scale: 8, aux: "SymOff", symEffect: "Addr"}, // arg0 + 8*arg1 + auxint + aux + {name: "LEAW8", argLength: 2, reg: gp21sb, asm: "LEAW", scale: 8, aux: "SymOff", symEffect: "Addr"}, // arg0 + 8*arg1 + auxint + aux // Note: LEAx{1,2,4,8} must not have OpSB as either argument. // auxint+aux == add auxint and the offset of the symbol in aux (if any) to the effective address @@ -577,24 +579,24 @@ func init() { {name: "MOVOstore", argLength: 3, reg: fpstore, asm: "MOVUPS", aux: "SymOff", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 16 bytes in arg1 to arg0+auxint+aux. arg2=mem // indexed loads/stores - {name: "MOVBloadidx1", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVBLZX", aux: "SymOff", typ: "UInt8", symEffect: "Read"}, // load a byte from arg0+arg1+auxint+aux. arg2=mem - {name: "MOVWloadidx1", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVWLZX", aux: "SymOff", typ: "UInt16", symEffect: "Read"}, // load 2 bytes from arg0+arg1+auxint+aux. arg2=mem - {name: "MOVWloadidx2", argLength: 3, reg: gploadidx, asm: "MOVWLZX", aux: "SymOff", typ: "UInt16", symEffect: "Read"}, // load 2 bytes from arg0+2*arg1+auxint+aux. arg2=mem - {name: "MOVLloadidx1", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVL", aux: "SymOff", typ: "UInt32", symEffect: "Read"}, // load 4 bytes from arg0+arg1+auxint+aux. arg2=mem - {name: "MOVLloadidx4", argLength: 3, reg: gploadidx, asm: "MOVL", aux: "SymOff", typ: "UInt32", symEffect: "Read"}, // load 4 bytes from arg0+4*arg1+auxint+aux. arg2=mem - {name: "MOVLloadidx8", argLength: 3, reg: gploadidx, asm: "MOVL", aux: "SymOff", typ: "UInt32", symEffect: "Read"}, // load 4 bytes from arg0+8*arg1+auxint+aux. arg2=mem - {name: "MOVQloadidx1", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVQ", aux: "SymOff", typ: "UInt64", symEffect: "Read"}, // load 8 bytes from arg0+arg1+auxint+aux. arg2=mem - {name: "MOVQloadidx8", argLength: 3, reg: gploadidx, asm: "MOVQ", aux: "SymOff", typ: "UInt64", symEffect: "Read"}, // load 8 bytes from arg0+8*arg1+auxint+aux. arg2=mem + {name: "MOVBloadidx1", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVBLZX", scale: 1, aux: "SymOff", typ: "UInt8", symEffect: "Read"}, // load a byte from arg0+arg1+auxint+aux. arg2=mem + {name: "MOVWloadidx1", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVWLZX", scale: 1, aux: "SymOff", typ: "UInt16", symEffect: "Read"}, // load 2 bytes from arg0+arg1+auxint+aux. arg2=mem + {name: "MOVWloadidx2", argLength: 3, reg: gploadidx, asm: "MOVWLZX", scale: 2, aux: "SymOff", typ: "UInt16", symEffect: "Read"}, // load 2 bytes from arg0+2*arg1+auxint+aux. arg2=mem + {name: "MOVLloadidx1", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVL", scale: 1, aux: "SymOff", typ: "UInt32", symEffect: "Read"}, // load 4 bytes from arg0+arg1+auxint+aux. arg2=mem + {name: "MOVLloadidx4", argLength: 3, reg: gploadidx, asm: "MOVL", scale: 4, aux: "SymOff", typ: "UInt32", symEffect: "Read"}, // load 4 bytes from arg0+4*arg1+auxint+aux. arg2=mem + {name: "MOVLloadidx8", argLength: 3, reg: gploadidx, asm: "MOVL", scale: 8, aux: "SymOff", typ: "UInt32", symEffect: "Read"}, // load 4 bytes from arg0+8*arg1+auxint+aux. arg2=mem + {name: "MOVQloadidx1", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVQ", scale: 1, aux: "SymOff", typ: "UInt64", symEffect: "Read"}, // load 8 bytes from arg0+arg1+auxint+aux. arg2=mem + {name: "MOVQloadidx8", argLength: 3, reg: gploadidx, asm: "MOVQ", scale: 8, aux: "SymOff", typ: "UInt64", symEffect: "Read"}, // load 8 bytes from arg0+8*arg1+auxint+aux. arg2=mem // TODO: sign-extending indexed loads // TODO: mark the MOVXstoreidx1 ops as commutative. Generates too many rewrite rules at the moment. - {name: "MOVBstoreidx1", argLength: 4, reg: gpstoreidx, asm: "MOVB", aux: "SymOff", symEffect: "Write"}, // store byte in arg2 to arg0+arg1+auxint+aux. arg3=mem - {name: "MOVWstoreidx1", argLength: 4, reg: gpstoreidx, asm: "MOVW", aux: "SymOff", symEffect: "Write"}, // store 2 bytes in arg2 to arg0+arg1+auxint+aux. arg3=mem - {name: "MOVWstoreidx2", argLength: 4, reg: gpstoreidx, asm: "MOVW", aux: "SymOff", symEffect: "Write"}, // store 2 bytes in arg2 to arg0+2*arg1+auxint+aux. arg3=mem - {name: "MOVLstoreidx1", argLength: 4, reg: gpstoreidx, asm: "MOVL", aux: "SymOff", symEffect: "Write"}, // store 4 bytes in arg2 to arg0+arg1+auxint+aux. arg3=mem - {name: "MOVLstoreidx4", argLength: 4, reg: gpstoreidx, asm: "MOVL", aux: "SymOff", symEffect: "Write"}, // store 4 bytes in arg2 to arg0+4*arg1+auxint+aux. arg3=mem - {name: "MOVLstoreidx8", argLength: 4, reg: gpstoreidx, asm: "MOVL", aux: "SymOff", symEffect: "Write"}, // store 4 bytes in arg2 to arg0+8*arg1+auxint+aux. arg3=mem - {name: "MOVQstoreidx1", argLength: 4, reg: gpstoreidx, asm: "MOVQ", aux: "SymOff", symEffect: "Write"}, // store 8 bytes in arg2 to arg0+arg1+auxint+aux. arg3=mem - {name: "MOVQstoreidx8", argLength: 4, reg: gpstoreidx, asm: "MOVQ", aux: "SymOff", symEffect: "Write"}, // store 8 bytes in arg2 to arg0+8*arg1+auxint+aux. arg3=mem + {name: "MOVBstoreidx1", argLength: 4, reg: gpstoreidx, asm: "MOVB", scale: 1, aux: "SymOff", symEffect: "Write"}, // store byte in arg2 to arg0+arg1+auxint+aux. arg3=mem + {name: "MOVWstoreidx1", argLength: 4, reg: gpstoreidx, asm: "MOVW", scale: 1, aux: "SymOff", symEffect: "Write"}, // store 2 bytes in arg2 to arg0+arg1+auxint+aux. arg3=mem + {name: "MOVWstoreidx2", argLength: 4, reg: gpstoreidx, asm: "MOVW", scale: 2, aux: "SymOff", symEffect: "Write"}, // store 2 bytes in arg2 to arg0+2*arg1+auxint+aux. arg3=mem + {name: "MOVLstoreidx1", argLength: 4, reg: gpstoreidx, asm: "MOVL", scale: 1, aux: "SymOff", symEffect: "Write"}, // store 4 bytes in arg2 to arg0+arg1+auxint+aux. arg3=mem + {name: "MOVLstoreidx4", argLength: 4, reg: gpstoreidx, asm: "MOVL", scale: 4, aux: "SymOff", symEffect: "Write"}, // store 4 bytes in arg2 to arg0+4*arg1+auxint+aux. arg3=mem + {name: "MOVLstoreidx8", argLength: 4, reg: gpstoreidx, asm: "MOVL", scale: 8, aux: "SymOff", symEffect: "Write"}, // store 4 bytes in arg2 to arg0+8*arg1+auxint+aux. arg3=mem + {name: "MOVQstoreidx1", argLength: 4, reg: gpstoreidx, asm: "MOVQ", scale: 1, aux: "SymOff", symEffect: "Write"}, // store 8 bytes in arg2 to arg0+arg1+auxint+aux. arg3=mem + {name: "MOVQstoreidx8", argLength: 4, reg: gpstoreidx, asm: "MOVQ", scale: 8, aux: "SymOff", symEffect: "Write"}, // store 8 bytes in arg2 to arg0+8*arg1+auxint+aux. arg3=mem // TODO: add size-mismatched indexed loads, like MOVBstoreidx4. // For storeconst ops, the AuxInt field encodes both @@ -605,13 +607,13 @@ func init() { {name: "MOVLstoreconst", argLength: 2, reg: gpstoreconst, asm: "MOVL", aux: "SymValAndOff", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store low 4 bytes of ... {name: "MOVQstoreconst", argLength: 2, reg: gpstoreconst, asm: "MOVQ", aux: "SymValAndOff", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 8 bytes of ... - {name: "MOVBstoreconstidx1", argLength: 3, reg: gpstoreconstidx, asm: "MOVB", aux: "SymValAndOff", typ: "Mem", symEffect: "Write"}, // store low byte of ValAndOff(AuxInt).Val() to arg0+1*arg1+ValAndOff(AuxInt).Off()+aux. arg2=mem - {name: "MOVWstoreconstidx1", argLength: 3, reg: gpstoreconstidx, asm: "MOVW", aux: "SymValAndOff", typ: "Mem", symEffect: "Write"}, // store low 2 bytes of ... arg1 ... - {name: "MOVWstoreconstidx2", argLength: 3, reg: gpstoreconstidx, asm: "MOVW", aux: "SymValAndOff", typ: "Mem", symEffect: "Write"}, // store low 2 bytes of ... 2*arg1 ... - {name: "MOVLstoreconstidx1", argLength: 3, reg: gpstoreconstidx, asm: "MOVL", aux: "SymValAndOff", typ: "Mem", symEffect: "Write"}, // store low 4 bytes of ... arg1 ... - {name: "MOVLstoreconstidx4", argLength: 3, reg: gpstoreconstidx, asm: "MOVL", aux: "SymValAndOff", typ: "Mem", symEffect: "Write"}, // store low 4 bytes of ... 4*arg1 ... - {name: "MOVQstoreconstidx1", argLength: 3, reg: gpstoreconstidx, asm: "MOVQ", aux: "SymValAndOff", typ: "Mem", symEffect: "Write"}, // store 8 bytes of ... arg1 ... - {name: "MOVQstoreconstidx8", argLength: 3, reg: gpstoreconstidx, asm: "MOVQ", aux: "SymValAndOff", typ: "Mem", symEffect: "Write"}, // store 8 bytes of ... 8*arg1 ... + {name: "MOVBstoreconstidx1", argLength: 3, reg: gpstoreconstidx, asm: "MOVB", scale: 1, aux: "SymValAndOff", typ: "Mem", symEffect: "Write"}, // store low byte of ValAndOff(AuxInt).Val() to arg0+1*arg1+ValAndOff(AuxInt).Off()+aux. arg2=mem + {name: "MOVWstoreconstidx1", argLength: 3, reg: gpstoreconstidx, asm: "MOVW", scale: 1, aux: "SymValAndOff", typ: "Mem", symEffect: "Write"}, // store low 2 bytes of ... arg1 ... + {name: "MOVWstoreconstidx2", argLength: 3, reg: gpstoreconstidx, asm: "MOVW", scale: 2, aux: "SymValAndOff", typ: "Mem", symEffect: "Write"}, // store low 2 bytes of ... 2*arg1 ... + {name: "MOVLstoreconstidx1", argLength: 3, reg: gpstoreconstidx, asm: "MOVL", scale: 1, aux: "SymValAndOff", typ: "Mem", symEffect: "Write"}, // store low 4 bytes of ... arg1 ... + {name: "MOVLstoreconstidx4", argLength: 3, reg: gpstoreconstidx, asm: "MOVL", scale: 4, aux: "SymValAndOff", typ: "Mem", symEffect: "Write"}, // store low 4 bytes of ... 4*arg1 ... + {name: "MOVQstoreconstidx1", argLength: 3, reg: gpstoreconstidx, asm: "MOVQ", scale: 1, aux: "SymValAndOff", typ: "Mem", symEffect: "Write"}, // store 8 bytes of ... arg1 ... + {name: "MOVQstoreconstidx8", argLength: 3, reg: gpstoreconstidx, asm: "MOVQ", scale: 8, aux: "SymValAndOff", typ: "Mem", symEffect: "Write"}, // store 8 bytes of ... 8*arg1 ... // arg0 = pointer to start of memory to zero // arg1 = value to store (will always be zero) @@ -709,6 +711,19 @@ func init() { // It saves all GP registers if necessary, but may clobber others. {name: "LoweredWB", argLength: 3, reg: regInfo{inputs: []regMask{buildReg("DI"), ax}, clobbers: callerSave &^ gp}, clobberFlags: true, aux: "Sym", symEffect: "None"}, + // There are three of these functions so that they can have three different register inputs. + // When we check 0 <= c <= cap (A), then 0 <= b <= c (B), then 0 <= a <= b (C), we want the + // default registers to match so we don't need to copy registers around unnecessarily. + {name: "LoweredPanicBoundsA", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{dx, bx}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in generic.go). + {name: "LoweredPanicBoundsB", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{cx, dx}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in generic.go). + {name: "LoweredPanicBoundsC", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{ax, cx}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in generic.go). + + // amd64p32 only: PanicBounds ops take 32-bit indexes. + // The Extend ops are the same as the Bounds ops except the indexes are 64-bit. + {name: "LoweredPanicExtendA", argLength: 4, aux: "Int64", reg: regInfo{inputs: []regMask{si, dx, bx}}, typ: "Mem"}, // arg0=idxHi, arg1=idxLo, arg2=len, arg3=mem, returns memory. AuxInt contains report code (see PanicExtend in genericOps.go). + {name: "LoweredPanicExtendB", argLength: 4, aux: "Int64", reg: regInfo{inputs: []regMask{si, cx, dx}}, typ: "Mem"}, // arg0=idxHi, arg1=idxLo, arg2=len, arg3=mem, returns memory. AuxInt contains report code (see PanicExtend in genericOps.go). + {name: "LoweredPanicExtendC", argLength: 4, aux: "Int64", reg: regInfo{inputs: []regMask{si, ax, cx}}, typ: "Mem"}, // arg0=idxHi, arg1=idxLo, arg2=len, arg3=mem, returns memory. AuxInt contains report code (see PanicExtend in genericOps.go). + // Constant flag values. For any comparison, there are 5 possible // outcomes: the three from the signed total order (<,==,>) and the // three from the unsigned total order. The == cases overlap. @@ -725,6 +740,7 @@ func init() { // Atomic loads. These are just normal loads but return tuples // so they can be properly ordered with other loads. // load from arg0+auxint+aux. arg1=mem. + {name: "MOVBatomicload", argLength: 2, reg: gpload, asm: "MOVB", aux: "SymOff", faultOnNilArg0: true, symEffect: "Read"}, {name: "MOVLatomicload", argLength: 2, reg: gpload, asm: "MOVL", aux: "SymOff", faultOnNilArg0: true, symEffect: "Read"}, {name: "MOVQatomicload", argLength: 2, reg: gpload, asm: "MOVQ", aux: "SymOff", faultOnNilArg0: true, symEffect: "Read"}, diff --git a/src/cmd/compile/internal/ssa/gen/AMD64splitload.rules b/src/cmd/compile/internal/ssa/gen/AMD64splitload.rules new file mode 100644 index 0000000000..e8e1b4d258 --- /dev/null +++ b/src/cmd/compile/internal/ssa/gen/AMD64splitload.rules @@ -0,0 +1,16 @@ +// 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. + +// This file contains rules used by flagalloc to split +// a flag-generating merged load op into separate load and op. +// Unlike with the other rules files, not all of these +// rules will be applied to all values. +// Rather, flagalloc will request for rules to be applied +// to a particular problematic value. +// These are often the exact inverse of rules in AMD64.rules, +// only with the conditions removed. + +(CMP(Q|L|W|B)load {sym} [off] ptr x mem) -> (CMP(Q|L|W|B) (MOV(Q|L|W|B)load {sym} [off] ptr mem) x) + +(CMP(Q|L|W|B)constload {sym} [vo] ptr mem) -> (CMP(Q|L|W|B)const (MOV(Q|L|W|B)load {sym} [offOnly(vo)] ptr mem) [valOnly(vo)]) diff --git a/src/cmd/compile/internal/ssa/gen/ARM.rules b/src/cmd/compile/internal/ssa/gen/ARM.rules index 8b0e82f154..798611446d 100644 --- a/src/cmd/compile/internal/ssa/gen/ARM.rules +++ b/src/cmd/compile/internal/ssa/gen/ARM.rules @@ -59,13 +59,22 @@ // TODO: optimize this for ARMv5 and ARMv6 (Ctz32NonZero x) -> (Ctz32 x) +(Ctz16NonZero x) -> (Ctz32 x) +(Ctz8NonZero x) -> (Ctz32 x) // count trailing zero for ARMv5 and ARMv6 // 32 - CLZ(x&-x - 1) -(Ctz32 x) && objabi.GOARM<=6 -> (RSBconst [32] (CLZ (SUBconst (AND x (RSBconst [0] x)) [1]))) +(Ctz32 x) && objabi.GOARM<=6 -> + (RSBconst [32] (CLZ (SUBconst (AND x (RSBconst [0] x)) [1]))) +(Ctz16 x) && objabi.GOARM<=6 -> + (RSBconst [32] (CLZ (SUBconst (AND (ORconst [0x10000] x) (RSBconst [0] (ORconst [0x10000] x))) [1]))) +(Ctz8 x) && objabi.GOARM<=6 -> + (RSBconst [32] (CLZ (SUBconst (AND (ORconst [0x100] x) (RSBconst [0] (ORconst [0x100] x))) [1]))) // count trailing zero for ARMv7 (Ctz32 x) && objabi.GOARM==7 -> (CLZ (RBIT x)) +(Ctz16 x) && objabi.GOARM==7 -> (CLZ (RBIT (ORconst [0x10000] x))) +(Ctz8 x) && objabi.GOARM==7 -> (CLZ (RBIT (ORconst [0x100] x))) // bit length (BitLen32 x) -> (RSBconst [32] (CLZ x)) @@ -397,6 +406,14 @@ // Write barrier. (WB {fn} destptr srcptr mem) -> (LoweredWB {fn} destptr srcptr mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 0 -> (LoweredPanicBoundsA [kind] x y mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 1 -> (LoweredPanicBoundsB [kind] x y mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 2 -> (LoweredPanicBoundsC [kind] x y mem) + +(PanicExtend [kind] hi lo y mem) && boundsABI(kind) == 0 -> (LoweredPanicExtendA [kind] hi lo y mem) +(PanicExtend [kind] hi lo y mem) && boundsABI(kind) == 1 -> (LoweredPanicExtendB [kind] hi lo y mem) +(PanicExtend [kind] hi lo y mem) && boundsABI(kind) == 2 -> (LoweredPanicExtendC [kind] hi lo y mem) + // Optimizations // fold offset into address @@ -1216,6 +1233,16 @@ ( ORshiftRL [c] (SLLconst x [32-c]) x) -> (SRRconst [ c] x) (XORshiftRL [c] (SLLconst x [32-c]) x) -> (SRRconst [ c] x) +(RotateLeft32 x (MOVWconst [c])) -> (SRRconst [-c&31] x) +(RotateLeft16 x (MOVWconst [c])) -> (Or16 (Lsh16x32 x (MOVWconst [c&15])) (Rsh16Ux32 x (MOVWconst [-c&15]))) +(RotateLeft8 x (MOVWconst [c])) -> (Or8 (Lsh8x32 x (MOVWconst [c&7])) (Rsh8Ux32 x (MOVWconst [-c&7]))) + +// ((x>>8) | (x<<8)) -> (REV16 x), the type of x is uint16, "|" can also be "^" or "+". +// UBFX instruction is supported by ARMv6T2, ARMv7 and above versions, REV16 is supported by +// ARMv6 and above versions. So for ARMv6, we need to match SLLconst, SRLconst and ORshiftLL. +((ADDshiftLL|ORshiftLL|XORshiftLL) [8] (BFXU [armBFAuxInt(8, 8)] x) x) -> (REV16 x) +((ADDshiftLL|ORshiftLL|XORshiftLL) [8] (SRLconst [24] (SLLconst [16] x)) x) && objabi.GOARM>=6 -> (REV16 x) + // use indexed loads and stores (MOVWload [0] {sym} (ADD ptr idx) mem) && sym == nil && !config.nacl -> (MOVWloadidx ptr idx mem) (MOVWstore [0] {sym} (ADD ptr idx) val mem) && sym == nil && !config.nacl -> (MOVWstoreidx ptr idx val mem) diff --git a/src/cmd/compile/internal/ssa/gen/ARM64.rules b/src/cmd/compile/internal/ssa/gen/ARM64.rules index 1efce66016..d4b47bfb0b 100644 --- a/src/cmd/compile/internal/ssa/gen/ARM64.rules +++ b/src/cmd/compile/internal/ssa/gen/ARM64.rules @@ -92,14 +92,20 @@ (Trunc x) -> (FRINTZD x) // lowering rotates +(RotateLeft8 x (MOVDconst [c])) -> (Or8 (Lsh8x64 x (MOVDconst [c&7])) (Rsh8Ux64 x (MOVDconst [-c&7]))) +(RotateLeft16 x (MOVDconst [c])) -> (Or16 (Lsh16x64 x (MOVDconst [c&15])) (Rsh16Ux64 x (MOVDconst [-c&15]))) (RotateLeft32 x y) -> (RORW x (NEG y)) (RotateLeft64 x y) -> (ROR x (NEG y)) (Ctz64NonZero x) -> (Ctz64 x) (Ctz32NonZero x) -> (Ctz32 x) +(Ctz16NonZero x) -> (Ctz32 x) +(Ctz8NonZero x) -> (Ctz32 x) (Ctz64 x) -> (CLZ (RBIT x)) (Ctz32 x) -> (CLZW (RBITW x)) +(Ctz16 x) -> (CLZW (RBITW (ORconst [0x10000] x))) +(Ctz8 x) -> (CLZW (RBITW (ORconst [0x100] x))) (PopCount64 x) -> (FMOVDfpgp (VUADDLV (VCNT (FMOVDgpfp x)))) (PopCount32 x) -> (FMOVDfpgp (VUADDLV (VCNT (FMOVDgpfp (ZeroExt32to64 x))))) @@ -123,6 +129,7 @@ (FMOVSload [off] {sym} ptr (MOVWstore [off] {sym} ptr val _)) -> (FMOVSgpfp val) (BitLen64 x) -> (SUB (MOVDconst [64]) (CLZ x)) +(BitLen32 x) -> (SUB (MOVDconst [32]) (CLZW x)) (Bswap64 x) -> (REV x) (Bswap32 x) -> (REVW x) @@ -132,6 +139,21 @@ (BitRev16 x) -> (SRLconst [48] (RBIT x)) (BitRev8 x) -> (SRLconst [56] (RBIT x)) +// In fact, UMOD will be translated into UREM instruction, and UREM is originally translated into +// UDIV and MSUB instructions. But if there is already an identical UDIV instruction just before or +// after UREM (case like quo, rem := z/y, z%y), then the second UDIV instruction becomes redundant. +// The purpose of this rule is to have this extra UDIV instruction removed in CSE pass. +(UMOD x y) -> (MSUB x y (UDIV x y)) +(UMODW x y) -> (MSUBW x y (UDIVW x y)) + +// 64-bit addition with carry. +(Select0 (Add64carry x y c)) -> (Select0 (ADCSflags x y (Select1 (ADDSconstflags [-1] c)))) +(Select1 (Add64carry x y c)) -> (ADCzerocarry (Select1 (ADCSflags x y (Select1 (ADDSconstflags [-1] c))))) + +// 64-bit subtraction with borrowing. +(Select0 (Sub64borrow x y bo)) -> (Select0 (SBCSflags x y (Select1 (NEGSflags bo)))) +(Select1 (Sub64borrow x y bo)) -> (NEG (NGCzerocarry (Select1 (SBCSflags x y (Select1 (NEGSflags bo)))))) + // boolean ops -- booleans are represented with 0=false, 1=true (AndB x y) -> (AND x y) (OrB x y) -> (OR x y) @@ -284,8 +306,14 @@ (Less16 x y) -> (LessThan (CMPW (SignExt16to32 x) (SignExt16to32 y))) (Less32 x y) -> (LessThan (CMPW x y)) (Less64 x y) -> (LessThan (CMP x y)) -(Less32F x y) -> (GreaterThan (FCMPS y x)) // reverse operands to work around NaN -(Less64F x y) -> (GreaterThan (FCMPD y x)) // reverse operands to work around NaN + +// Set condition flags for floating-point comparisons "x < y" +// and "x <= y". Because if either or both of the operands are +// NaNs, all three of (x < y), (x == y) and (x > y) are false, +// and ARM Manual says FCMP instruction sets PSTATE. +// of this case to (0, 0, 1, 1). +(Less32F x y) -> (LessThanF (FCMPS x y)) +(Less64F x y) -> (LessThanF (FCMPD x y)) (Less8U x y) -> (LessThanU (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y))) (Less16U x y) -> (LessThanU (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y))) @@ -296,8 +324,10 @@ (Leq16 x y) -> (LessEqual (CMPW (SignExt16to32 x) (SignExt16to32 y))) (Leq32 x y) -> (LessEqual (CMPW x y)) (Leq64 x y) -> (LessEqual (CMP x y)) -(Leq32F x y) -> (GreaterEqual (FCMPS y x)) // reverse operands to work around NaN -(Leq64F x y) -> (GreaterEqual (FCMPD y x)) // reverse operands to work around NaN + +// Refer to the comments for op Less64F above. +(Leq32F x y) -> (LessEqualF (FCMPS x y)) +(Leq64F x y) -> (LessEqualF (FCMPD x y)) (Leq8U x y) -> (LessEqualU (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y))) (Leq16U x y) -> (LessEqualU (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y))) @@ -308,8 +338,8 @@ (Greater16 x y) -> (GreaterThan (CMPW (SignExt16to32 x) (SignExt16to32 y))) (Greater32 x y) -> (GreaterThan (CMPW x y)) (Greater64 x y) -> (GreaterThan (CMP x y)) -(Greater32F x y) -> (GreaterThan (FCMPS x y)) -(Greater64F x y) -> (GreaterThan (FCMPD x y)) +(Greater32F x y) -> (GreaterThanF (FCMPS x y)) +(Greater64F x y) -> (GreaterThanF (FCMPD x y)) (Greater8U x y) -> (GreaterThanU (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y))) (Greater16U x y) -> (GreaterThanU (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y))) @@ -320,17 +350,23 @@ (Geq16 x y) -> (GreaterEqual (CMPW (SignExt16to32 x) (SignExt16to32 y))) (Geq32 x y) -> (GreaterEqual (CMPW x y)) (Geq64 x y) -> (GreaterEqual (CMP x y)) -(Geq32F x y) -> (GreaterEqual (FCMPS x y)) -(Geq64F x y) -> (GreaterEqual (FCMPD x y)) +(Geq32F x y) -> (GreaterEqualF (FCMPS x y)) +(Geq64F x y) -> (GreaterEqualF (FCMPD x y)) (Geq8U x y) -> (GreaterEqualU (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y))) (Geq16U x y) -> (GreaterEqualU (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y))) (Geq32U x y) -> (GreaterEqualU (CMPW x y)) (Geq64U x y) -> (GreaterEqualU (CMP x y)) +// Optimize comparision between a floating-point value and 0.0 with "FCMP $(0.0), Fn" +(FCMPS x (FMOVSconst [0])) -> (FCMPS0 x) +(FCMPS (FMOVSconst [0]) x) -> (InvertFlags (FCMPS0 x)) +(FCMPD x (FMOVDconst [0])) -> (FCMPD0 x) +(FCMPD (FMOVDconst [0]) x) -> (InvertFlags (FCMPD0 x)) + // CSEL needs a flag-generating argument. Synthesize a CMPW if necessary. -(CondSelect x y bool) && flagArg(bool) != nil -> (CSEL {bool.Op} x y flagArg(bool)) -(CondSelect x y bool) && flagArg(bool) == nil -> (CSEL {OpARM64NotEqual} x y (CMPWconst [0] bool)) +(CondSelect x y boolval) && flagArg(boolval) != nil -> (CSEL {boolval.Op} x y flagArg(boolval)) +(CondSelect x y boolval) && flagArg(boolval) == nil -> (CSEL {OpARM64NotEqual} x y (CMPWconst [0] boolval)) (OffPtr [off] ptr:(SP)) -> (MOVDaddr [off] ptr) (OffPtr [off] ptr) -> (ADDconst [off] ptr) @@ -538,11 +574,16 @@ (If (GreaterThanU cc) yes no) -> (UGT cc yes no) (If (GreaterEqual cc) yes no) -> (GE cc yes no) (If (GreaterEqualU cc) yes no) -> (UGE cc yes no) +(If (LessThanF cc) yes no) -> (FLT cc yes no) +(If (LessEqualF cc) yes no) -> (FLE cc yes no) +(If (GreaterThanF cc) yes no) -> (FGT cc yes no) +(If (GreaterEqualF cc) yes no) -> (FGE cc yes no) (If cond yes no) -> (NZ cond yes no) // atomic intrinsics // Note: these ops do not accept offset. +(AtomicLoad8 ptr mem) -> (LDARB ptr mem) (AtomicLoad32 ptr mem) -> (LDARW ptr mem) (AtomicLoad64 ptr mem) -> (LDAR ptr mem) (AtomicLoadPtr ptr mem) -> (LDAR ptr mem) @@ -570,6 +611,10 @@ // Write barrier. (WB {fn} destptr srcptr mem) -> (LoweredWB {fn} destptr srcptr mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 0 -> (LoweredPanicBoundsA [kind] x y mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 1 -> (LoweredPanicBoundsB [kind] x y mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 2 -> (LoweredPanicBoundsC [kind] x y mem) + // Optimizations // Absorb boolean tests into block @@ -583,6 +628,10 @@ (NZ (GreaterThanU cc) yes no) -> (UGT cc yes no) (NZ (GreaterEqual cc) yes no) -> (GE cc yes no) (NZ (GreaterEqualU cc) yes no) -> (UGE cc yes no) +(NZ (LessThanF cc) yes no) -> (FLT cc yes no) +(NZ (LessEqualF cc) yes no) -> (FLE cc yes no) +(NZ (GreaterThanF cc) yes no) -> (FGT cc yes no) +(NZ (GreaterEqualF cc) yes no) -> (FGE cc yes no) (EQ (CMPWconst [0] x:(ANDconst [c] y)) yes no) && x.Uses == 1 -> (EQ (TSTWconst [c] y) yes no) (NE (CMPWconst [0] x:(ANDconst [c] y)) yes no) && x.Uses == 1 -> (NE (TSTWconst [c] y) yes no) @@ -1164,6 +1213,12 @@ (ADD a l:(MNEGW x y)) && a.Type.Size() != 8 && l.Uses==1 && clobber(l) -> (MSUBW a x y) (SUB a l:(MNEGW x y)) && a.Type.Size() != 8 && l.Uses==1 && clobber(l) -> (MADDW a x y) +// optimize ADCSflags, SBCSflags and friends +(ADCSflags x y (Select1 (ADDSconstflags [-1] (ADCzerocarry c)))) -> (ADCSflags x y c) +(ADCSflags x y (Select1 (ADDSconstflags [-1] (MOVDconst [0])))) -> (ADDSflags x y) +(SBCSflags x y (Select1 (NEGSflags (NEG (NGCzerocarry bo))))) -> (SBCSflags x y bo) +(SBCSflags x y (Select1 (NEGSflags (MOVDconst [0])))) -> (SUBSflags x y) + // mul by constant (MUL x (MOVDconst [-1])) -> (NEG x) (MUL _ (MOVDconst [0])) -> (MOVDconst [0]) @@ -1506,6 +1561,10 @@ (UGE (InvertFlags cmp) yes no) -> (ULE cmp yes no) (EQ (InvertFlags cmp) yes no) -> (EQ cmp yes no) (NE (InvertFlags cmp) yes no) -> (NE cmp yes no) +(FLT (InvertFlags cmp) yes no) -> (FGT cmp yes no) +(FGT (InvertFlags cmp) yes no) -> (FLT cmp yes no) +(FLE (InvertFlags cmp) yes no) -> (FGE cmp yes no) +(FGE (InvertFlags cmp) yes no) -> (FLE cmp yes no) // absorb InvertFlags into CSEL(0) (CSEL {cc} x y (InvertFlags cmp)) -> (CSEL {arm64Invert(cc.(Op))} x y cmp) @@ -1583,6 +1642,10 @@ (LessEqualU (InvertFlags x)) -> (GreaterEqualU x) (GreaterEqual (InvertFlags x)) -> (LessEqual x) (GreaterEqualU (InvertFlags x)) -> (LessEqualU x) +(LessThanF (InvertFlags x)) -> (GreaterThanF x) +(LessEqualF (InvertFlags x)) -> (GreaterEqualF x) +(GreaterThanF (InvertFlags x)) -> (LessThanF x) +(GreaterEqualF (InvertFlags x)) -> (LessEqualF x) // Boolean-generating instructions always // zero upper bit of the register; no need to zero-extend @@ -1595,14 +1658,14 @@ (CSEL0 {cc} _ flag) && ccARM64Eval(cc, flag) < 0 -> (MOVDconst [0]) // absorb flags back into boolean CSEL -(CSEL {cc} x y (CMPWconst [0] bool)) && cc.(Op) == OpARM64NotEqual && flagArg(bool) != nil -> - (CSEL {bool.Op} x y flagArg(bool)) -(CSEL {cc} x y (CMPWconst [0] bool)) && cc.(Op) == OpARM64Equal && flagArg(bool) != nil -> - (CSEL {arm64Negate(bool.Op)} x y flagArg(bool)) -(CSEL0 {cc} x (CMPWconst [0] bool)) && cc.(Op) == OpARM64NotEqual && flagArg(bool) != nil -> - (CSEL0 {bool.Op} x flagArg(bool)) -(CSEL0 {cc} x (CMPWconst [0] bool)) && cc.(Op) == OpARM64Equal && flagArg(bool) != nil -> - (CSEL0 {arm64Negate(bool.Op)} x flagArg(bool)) +(CSEL {cc} x y (CMPWconst [0] boolval)) && cc.(Op) == OpARM64NotEqual && flagArg(boolval) != nil -> + (CSEL {boolval.Op} x y flagArg(boolval)) +(CSEL {cc} x y (CMPWconst [0] boolval)) && cc.(Op) == OpARM64Equal && flagArg(boolval) != nil -> + (CSEL {arm64Negate(boolval.Op)} x y flagArg(boolval)) +(CSEL0 {cc} x (CMPWconst [0] boolval)) && cc.(Op) == OpARM64NotEqual && flagArg(boolval) != nil -> + (CSEL0 {boolval.Op} x flagArg(boolval)) +(CSEL0 {cc} x (CMPWconst [0] boolval)) && cc.(Op) == OpARM64Equal && flagArg(boolval) != nil -> + (CSEL0 {arm64Negate(boolval.Op)} x flagArg(boolval)) // absorb shifts into ops (NEG x:(SLLconst [c] y)) && clobberIfDead(x) -> (NEGshiftLL [c] y) @@ -1743,11 +1806,11 @@ ( ORshiftRL [c] (SLLconst x [64-c]) x) -> (RORconst [ c] x) (XORshiftRL [c] (SLLconst x [64-c]) x) -> (RORconst [ c] x) -(ADDshiftLL [c] (UBFX [bfc] x) x) && c < 32 && t.Size() == 4 && bfc == arm64BFAuxInt(32-c, c) +(ADDshiftLL [c] (UBFX [bfc] x) x) && c < 32 && t.Size() == 4 && bfc == armBFAuxInt(32-c, c) -> (RORWconst [32-c] x) -( ORshiftLL [c] (UBFX [bfc] x) x) && c < 32 && t.Size() == 4 && bfc == arm64BFAuxInt(32-c, c) +( ORshiftLL [c] (UBFX [bfc] x) x) && c < 32 && t.Size() == 4 && bfc == armBFAuxInt(32-c, c) -> (RORWconst [32-c] x) -(XORshiftLL [c] (UBFX [bfc] x) x) && c < 32 && t.Size() == 4 && bfc == arm64BFAuxInt(32-c, c) +(XORshiftLL [c] (UBFX [bfc] x) x) && c < 32 && t.Size() == 4 && bfc == armBFAuxInt(32-c, c) -> (RORWconst [32-c] x) (ADDshiftRL [c] (SLLconst x [32-c]) (MOVWUreg x)) && c < 32 && t.Size() == 4 -> (RORWconst [c] x) ( ORshiftRL [c] (SLLconst x [32-c]) (MOVWUreg x)) && c < 32 && t.Size() == 4 -> (RORWconst [c] x) @@ -1785,16 +1848,19 @@ (CMPconst [64] (SUB (MOVDconst [32]) (ANDconst [31] y))))) && cc.(Op) == OpARM64LessThanU -> (RORW x y) +// ((x>>8) | (x<<8)) -> (REV16W x), the type of x is uint16, "|" can also be "^" or "+". +((ADDshiftLL|ORshiftLL|XORshiftLL) [8] (UBFX [armBFAuxInt(8, 8)] x) x) -> (REV16W x) + // Extract from reg pair (ADDshiftLL [c] (SRLconst x [64-c]) x2) -> (EXTRconst [64-c] x2 x) ( ORshiftLL [c] (SRLconst x [64-c]) x2) -> (EXTRconst [64-c] x2 x) (XORshiftLL [c] (SRLconst x [64-c]) x2) -> (EXTRconst [64-c] x2 x) -(ADDshiftLL [c] (UBFX [bfc] x) x2) && c < 32 && t.Size() == 4 && bfc == arm64BFAuxInt(32-c, c) +(ADDshiftLL [c] (UBFX [bfc] x) x2) && c < 32 && t.Size() == 4 && bfc == armBFAuxInt(32-c, c) -> (EXTRWconst [32-c] x2 x) -( ORshiftLL [c] (UBFX [bfc] x) x2) && c < 32 && t.Size() == 4 && bfc == arm64BFAuxInt(32-c, c) +( ORshiftLL [c] (UBFX [bfc] x) x2) && c < 32 && t.Size() == 4 && bfc == armBFAuxInt(32-c, c) -> (EXTRWconst [32-c] x2 x) -(XORshiftLL [c] (UBFX [bfc] x) x2) && c < 32 && t.Size() == 4 && bfc == arm64BFAuxInt(32-c, c) +(XORshiftLL [c] (UBFX [bfc] x) x2) && c < 32 && t.Size() == 4 && bfc == armBFAuxInt(32-c, c) -> (EXTRWconst [32-c] x2 x) // Generic rules rewrite certain AND to a pair of shifts. @@ -1810,88 +1876,88 @@ // sbfiz // (x << lc) >> rc -(SRAconst [rc] (SLLconst [lc] x)) && lc > rc -> (SBFIZ [arm64BFAuxInt(lc-rc, 64-lc)] x) -(MOVWreg (SLLconst [lc] x)) && lc < 32 -> (SBFIZ [arm64BFAuxInt(lc, 32-lc)] x) -(MOVHreg (SLLconst [lc] x)) && lc < 16 -> (SBFIZ [arm64BFAuxInt(lc, 16-lc)] x) -(MOVBreg (SLLconst [lc] x)) && lc < 8 -> (SBFIZ [arm64BFAuxInt(lc, 8-lc)] x) +(SRAconst [rc] (SLLconst [lc] x)) && lc > rc -> (SBFIZ [armBFAuxInt(lc-rc, 64-lc)] x) +(MOVWreg (SLLconst [lc] x)) && lc < 32 -> (SBFIZ [armBFAuxInt(lc, 32-lc)] x) +(MOVHreg (SLLconst [lc] x)) && lc < 16 -> (SBFIZ [armBFAuxInt(lc, 16-lc)] x) +(MOVBreg (SLLconst [lc] x)) && lc < 8 -> (SBFIZ [armBFAuxInt(lc, 8-lc)] x) // sbfx // (x << lc) >> rc -(SRAconst [rc] (SLLconst [lc] x)) && lc <= rc -> (SBFX [arm64BFAuxInt(rc-lc, 64-rc)] x) -(SRAconst [rc] (MOVWreg x)) && rc < 32 -> (SBFX [arm64BFAuxInt(rc, 32-rc)] x) -(SRAconst [rc] (MOVHreg x)) && rc < 16 -> (SBFX [arm64BFAuxInt(rc, 16-rc)] x) -(SRAconst [rc] (MOVBreg x)) && rc < 8 -> (SBFX [arm64BFAuxInt(rc, 8-rc)] x) +(SRAconst [rc] (SLLconst [lc] x)) && lc <= rc -> (SBFX [armBFAuxInt(rc-lc, 64-rc)] x) +(SRAconst [rc] (MOVWreg x)) && rc < 32 -> (SBFX [armBFAuxInt(rc, 32-rc)] x) +(SRAconst [rc] (MOVHreg x)) && rc < 16 -> (SBFX [armBFAuxInt(rc, 16-rc)] x) +(SRAconst [rc] (MOVBreg x)) && rc < 8 -> (SBFX [armBFAuxInt(rc, 8-rc)] x) // sbfiz/sbfx combinations: merge shifts into bitfield ops (SRAconst [sc] (SBFIZ [bfc] x)) && sc < getARM64BFlsb(bfc) - -> (SBFIZ [arm64BFAuxInt(getARM64BFlsb(bfc)-sc, getARM64BFwidth(bfc))] x) + -> (SBFIZ [armBFAuxInt(getARM64BFlsb(bfc)-sc, getARM64BFwidth(bfc))] x) (SRAconst [sc] (SBFIZ [bfc] x)) && sc >= getARM64BFlsb(bfc) && sc < getARM64BFlsb(bfc)+getARM64BFwidth(bfc) - -> (SBFX [arm64BFAuxInt(sc-getARM64BFlsb(bfc), getARM64BFlsb(bfc)+getARM64BFwidth(bfc)-sc)] x) + -> (SBFX [armBFAuxInt(sc-getARM64BFlsb(bfc), getARM64BFlsb(bfc)+getARM64BFwidth(bfc)-sc)] x) // ubfiz // (x & ac) << sc (SLLconst [sc] (ANDconst [ac] x)) && isARM64BFMask(sc, ac, 0) - -> (UBFIZ [arm64BFAuxInt(sc, arm64BFWidth(ac, 0))] x) -(SLLconst [sc] (MOVWUreg x)) && isARM64BFMask(sc, 1<<32-1, 0) -> (UBFIZ [arm64BFAuxInt(sc, 32)] x) -(SLLconst [sc] (MOVHUreg x)) && isARM64BFMask(sc, 1<<16-1, 0) -> (UBFIZ [arm64BFAuxInt(sc, 16)] x) -(SLLconst [sc] (MOVBUreg x)) && isARM64BFMask(sc, 1<<8-1, 0) -> (UBFIZ [arm64BFAuxInt(sc, 8)] x) + -> (UBFIZ [armBFAuxInt(sc, arm64BFWidth(ac, 0))] x) +(SLLconst [sc] (MOVWUreg x)) && isARM64BFMask(sc, 1<<32-1, 0) -> (UBFIZ [armBFAuxInt(sc, 32)] x) +(SLLconst [sc] (MOVHUreg x)) && isARM64BFMask(sc, 1<<16-1, 0) -> (UBFIZ [armBFAuxInt(sc, 16)] x) +(SLLconst [sc] (MOVBUreg x)) && isARM64BFMask(sc, 1<<8-1, 0) -> (UBFIZ [armBFAuxInt(sc, 8)] x) // (x << sc) & ac (ANDconst [ac] (SLLconst [sc] x)) && isARM64BFMask(sc, ac, sc) - -> (UBFIZ [arm64BFAuxInt(sc, arm64BFWidth(ac, sc))] x) + -> (UBFIZ [armBFAuxInt(sc, arm64BFWidth(ac, sc))] x) (MOVWUreg (SLLconst [sc] x)) && isARM64BFMask(sc, 1<<32-1, sc) - -> (UBFIZ [arm64BFAuxInt(sc, arm64BFWidth(1<<32-1, sc))] x) + -> (UBFIZ [armBFAuxInt(sc, arm64BFWidth(1<<32-1, sc))] x) (MOVHUreg (SLLconst [sc] x)) && isARM64BFMask(sc, 1<<16-1, sc) - -> (UBFIZ [arm64BFAuxInt(sc, arm64BFWidth(1<<16-1, sc))] x) + -> (UBFIZ [armBFAuxInt(sc, arm64BFWidth(1<<16-1, sc))] x) (MOVBUreg (SLLconst [sc] x)) && isARM64BFMask(sc, 1<<8-1, sc) - -> (UBFIZ [arm64BFAuxInt(sc, arm64BFWidth(1<<8-1, sc))] x) + -> (UBFIZ [armBFAuxInt(sc, arm64BFWidth(1<<8-1, sc))] x) // (x << lc) >> rc -(SRLconst [rc] (SLLconst [lc] x)) && lc > rc -> (UBFIZ [arm64BFAuxInt(lc-rc, 64-lc)] x) +(SRLconst [rc] (SLLconst [lc] x)) && lc > rc -> (UBFIZ [armBFAuxInt(lc-rc, 64-lc)] x) // ubfx // (x >> sc) & ac (ANDconst [ac] (SRLconst [sc] x)) && isARM64BFMask(sc, ac, 0) - -> (UBFX [arm64BFAuxInt(sc, arm64BFWidth(ac, 0))] x) -(MOVWUreg (SRLconst [sc] x)) && isARM64BFMask(sc, 1<<32-1, 0) -> (UBFX [arm64BFAuxInt(sc, 32)] x) -(MOVHUreg (SRLconst [sc] x)) && isARM64BFMask(sc, 1<<16-1, 0) -> (UBFX [arm64BFAuxInt(sc, 16)] x) -(MOVBUreg (SRLconst [sc] x)) && isARM64BFMask(sc, 1<<8-1, 0) -> (UBFX [arm64BFAuxInt(sc, 8)] x) + -> (UBFX [armBFAuxInt(sc, arm64BFWidth(ac, 0))] x) +(MOVWUreg (SRLconst [sc] x)) && isARM64BFMask(sc, 1<<32-1, 0) -> (UBFX [armBFAuxInt(sc, 32)] x) +(MOVHUreg (SRLconst [sc] x)) && isARM64BFMask(sc, 1<<16-1, 0) -> (UBFX [armBFAuxInt(sc, 16)] x) +(MOVBUreg (SRLconst [sc] x)) && isARM64BFMask(sc, 1<<8-1, 0) -> (UBFX [armBFAuxInt(sc, 8)] x) // (x & ac) >> sc (SRLconst [sc] (ANDconst [ac] x)) && isARM64BFMask(sc, ac, sc) - -> (UBFX [arm64BFAuxInt(sc, arm64BFWidth(ac, sc))] x) + -> (UBFX [armBFAuxInt(sc, arm64BFWidth(ac, sc))] x) (SRLconst [sc] (MOVWUreg x)) && isARM64BFMask(sc, 1<<32-1, sc) - -> (UBFX [arm64BFAuxInt(sc, arm64BFWidth(1<<32-1, sc))] x) + -> (UBFX [armBFAuxInt(sc, arm64BFWidth(1<<32-1, sc))] x) (SRLconst [sc] (MOVHUreg x)) && isARM64BFMask(sc, 1<<16-1, sc) - -> (UBFX [arm64BFAuxInt(sc, arm64BFWidth(1<<16-1, sc))] x) + -> (UBFX [armBFAuxInt(sc, arm64BFWidth(1<<16-1, sc))] x) (SRLconst [sc] (MOVBUreg x)) && isARM64BFMask(sc, 1<<8-1, sc) - -> (UBFX [arm64BFAuxInt(sc, arm64BFWidth(1<<8-1, sc))] x) + -> (UBFX [armBFAuxInt(sc, arm64BFWidth(1<<8-1, sc))] x) // (x << lc) >> rc -(SRLconst [rc] (SLLconst [lc] x)) && lc < rc -> (UBFX [arm64BFAuxInt(rc-lc, 64-rc)] x) +(SRLconst [rc] (SLLconst [lc] x)) && lc < rc -> (UBFX [armBFAuxInt(rc-lc, 64-rc)] x) // ubfiz/ubfx combinations: merge shifts into bitfield ops (SRLconst [sc] (UBFX [bfc] x)) && sc < getARM64BFwidth(bfc) - -> (UBFX [arm64BFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc)-sc)] x) + -> (UBFX [armBFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc)-sc)] x) (UBFX [bfc] (SRLconst [sc] x)) && sc+getARM64BFwidth(bfc)+getARM64BFlsb(bfc) < 64 - -> (UBFX [arm64BFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc))] x) + -> (UBFX [armBFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc))] x) (SLLconst [sc] (UBFIZ [bfc] x)) && sc+getARM64BFwidth(bfc)+getARM64BFlsb(bfc) < 64 - -> (UBFIZ [arm64BFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc))] x) + -> (UBFIZ [armBFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc))] x) (UBFIZ [bfc] (SLLconst [sc] x)) && sc < getARM64BFwidth(bfc) - -> (UBFIZ [arm64BFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc)-sc)] x) + -> (UBFIZ [armBFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc)-sc)] x) // ((x << c1) >> c2) >> c3 (SRLconst [sc] (UBFIZ [bfc] x)) && sc == getARM64BFlsb(bfc) -> (ANDconst [1< (UBFIZ [arm64BFAuxInt(getARM64BFlsb(bfc)-sc, getARM64BFwidth(bfc))] x) + -> (UBFIZ [armBFAuxInt(getARM64BFlsb(bfc)-sc, getARM64BFwidth(bfc))] x) (SRLconst [sc] (UBFIZ [bfc] x)) && sc > getARM64BFlsb(bfc) && sc < getARM64BFlsb(bfc)+getARM64BFwidth(bfc) - -> (UBFX [arm64BFAuxInt(sc-getARM64BFlsb(bfc), getARM64BFlsb(bfc)+getARM64BFwidth(bfc)-sc)] x) + -> (UBFX [armBFAuxInt(sc-getARM64BFlsb(bfc), getARM64BFlsb(bfc)+getARM64BFwidth(bfc)-sc)] x) // ((x << c1) << c2) >> c3 (UBFX [bfc] (SLLconst [sc] x)) && sc == getARM64BFlsb(bfc) -> (ANDconst [1< (UBFX [arm64BFAuxInt(getARM64BFlsb(bfc)-sc, getARM64BFwidth(bfc))] x) + -> (UBFX [armBFAuxInt(getARM64BFlsb(bfc)-sc, getARM64BFwidth(bfc))] x) (UBFX [bfc] (SLLconst [sc] x)) && sc > getARM64BFlsb(bfc) && sc < getARM64BFlsb(bfc)+getARM64BFwidth(bfc) - -> (UBFIZ [arm64BFAuxInt(sc-getARM64BFlsb(bfc), getARM64BFlsb(bfc)+getARM64BFwidth(bfc)-sc)] x) + -> (UBFIZ [armBFAuxInt(sc-getARM64BFlsb(bfc), getARM64BFlsb(bfc)+getARM64BFwidth(bfc)-sc)] x) // bfi (OR (UBFIZ [bfc] x) (ANDconst [ac] y)) @@ -1899,7 +1965,7 @@ -> (BFI [bfc] y x) (ORshiftRL [rc] (ANDconst [ac] x) (SLLconst [lc] y)) && lc > rc && ac == ^((1< (BFI [arm64BFAuxInt(lc-rc, 64-lc)] x y) + -> (BFI [armBFAuxInt(lc-rc, 64-lc)] x y) // bfxil (OR (UBFX [bfc] x) (ANDconst [ac] y)) && ac == ^(1< (BFXIL [bfc] y x) @@ -2549,23 +2615,23 @@ && x.Uses == 1 && clobber(x) -> (MOVHstoreidx ptr idx w mem) -(MOVBstore [i] {s} ptr0 (UBFX [arm64BFAuxInt(8, 8)] w) x:(MOVBstore [i-1] {s} ptr1 w mem)) +(MOVBstore [i] {s} ptr0 (UBFX [armBFAuxInt(8, 8)] w) x:(MOVBstore [i-1] {s} ptr1 w mem)) && x.Uses == 1 && isSamePtr(ptr0, ptr1) && clobber(x) -> (MOVHstore [i-1] {s} ptr0 w mem) -(MOVBstore [1] {s} (ADD ptr0 idx0) (UBFX [arm64BFAuxInt(8, 8)] w) x:(MOVBstoreidx ptr1 idx1 w mem)) +(MOVBstore [1] {s} (ADD ptr0 idx0) (UBFX [armBFAuxInt(8, 8)] w) x:(MOVBstoreidx ptr1 idx1 w mem)) && x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x) -> (MOVHstoreidx ptr1 idx1 w mem) -(MOVBstore [i] {s} ptr0 (UBFX [arm64BFAuxInt(8, 24)] w) x:(MOVBstore [i-1] {s} ptr1 w mem)) +(MOVBstore [i] {s} ptr0 (UBFX [armBFAuxInt(8, 24)] w) x:(MOVBstore [i-1] {s} ptr1 w mem)) && x.Uses == 1 && isSamePtr(ptr0, ptr1) && clobber(x) -> (MOVHstore [i-1] {s} ptr0 w mem) -(MOVBstore [1] {s} (ADD ptr0 idx0) (UBFX [arm64BFAuxInt(8, 24)] w) x:(MOVBstoreidx ptr1 idx1 w mem)) +(MOVBstore [1] {s} (ADD ptr0 idx0) (UBFX [armBFAuxInt(8, 24)] w) x:(MOVBstoreidx ptr1 idx1 w mem)) && x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) @@ -2642,18 +2708,18 @@ && isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) && clobber(x) -> (MOVWstoreidx ptr1 (SLLconst [1] idx1) w mem) -(MOVHstore [i] {s} ptr0 (UBFX [arm64BFAuxInt(16, 16)] w) x:(MOVHstore [i-2] {s} ptr1 w mem)) +(MOVHstore [i] {s} ptr0 (UBFX [armBFAuxInt(16, 16)] w) x:(MOVHstore [i-2] {s} ptr1 w mem)) && x.Uses == 1 && isSamePtr(ptr0, ptr1) && clobber(x) -> (MOVWstore [i-2] {s} ptr0 w mem) -(MOVHstore [2] {s} (ADD ptr0 idx0) (UBFX [arm64BFAuxInt(16, 16)] w) x:(MOVHstoreidx ptr1 idx1 w mem)) +(MOVHstore [2] {s} (ADD ptr0 idx0) (UBFX [armBFAuxInt(16, 16)] w) x:(MOVHstoreidx ptr1 idx1 w mem)) && x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x) -> (MOVWstoreidx ptr1 idx1 w mem) -(MOVHstore [2] {s} (ADDshiftLL [1] ptr0 idx0) (UBFX [arm64BFAuxInt(16, 16)] w) x:(MOVHstoreidx2 ptr1 idx1 w mem)) +(MOVHstore [2] {s} (ADDshiftLL [1] ptr0 idx0) (UBFX [armBFAuxInt(16, 16)] w) x:(MOVHstoreidx2 ptr1 idx1 w mem)) && x.Uses == 1 && s == nil && isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) @@ -2781,9 +2847,9 @@ && clobber(x6) -> (MOVDstoreidx ptr0 idx0 (REV w) mem) (MOVBstore [i] {s} ptr w - x0:(MOVBstore [i-1] {s} ptr (UBFX [arm64BFAuxInt(8, 24)] w) - x1:(MOVBstore [i-2] {s} ptr (UBFX [arm64BFAuxInt(16, 16)] w) - x2:(MOVBstore [i-3] {s} ptr (UBFX [arm64BFAuxInt(24, 8)] w) mem)))) + x0:(MOVBstore [i-1] {s} ptr (UBFX [armBFAuxInt(8, 24)] w) + x1:(MOVBstore [i-2] {s} ptr (UBFX [armBFAuxInt(16, 16)] w) + x2:(MOVBstore [i-3] {s} ptr (UBFX [armBFAuxInt(24, 8)] w) mem)))) && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 @@ -2792,9 +2858,9 @@ && clobber(x2) -> (MOVWstore [i-3] {s} ptr (REVW w) mem) (MOVBstore [3] {s} p w - x0:(MOVBstore [2] {s} p (UBFX [arm64BFAuxInt(8, 24)] w) - x1:(MOVBstore [1] {s} p1:(ADD ptr1 idx1) (UBFX [arm64BFAuxInt(16, 16)] w) - x2:(MOVBstoreidx ptr0 idx0 (UBFX [arm64BFAuxInt(24, 8)] w) mem)))) + x0:(MOVBstore [2] {s} p (UBFX [armBFAuxInt(8, 24)] w) + x1:(MOVBstore [1] {s} p1:(ADD ptr1 idx1) (UBFX [armBFAuxInt(16, 16)] w) + x2:(MOVBstoreidx ptr0 idx0 (UBFX [armBFAuxInt(24, 8)] w) mem)))) && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 @@ -2806,9 +2872,9 @@ && clobber(x2) -> (MOVWstoreidx ptr0 idx0 (REVW w) mem) (MOVBstoreidx ptr (ADDconst [3] idx) w - x0:(MOVBstoreidx ptr (ADDconst [2] idx) (UBFX [arm64BFAuxInt(8, 24)] w) - x1:(MOVBstoreidx ptr (ADDconst [1] idx) (UBFX [arm64BFAuxInt(16, 16)] w) - x2:(MOVBstoreidx ptr idx (UBFX [arm64BFAuxInt(24, 8)] w) mem)))) + x0:(MOVBstoreidx ptr (ADDconst [2] idx) (UBFX [armBFAuxInt(8, 24)] w) + x1:(MOVBstoreidx ptr (ADDconst [1] idx) (UBFX [armBFAuxInt(16, 16)] w) + x2:(MOVBstoreidx ptr idx (UBFX [armBFAuxInt(24, 8)] w) mem)))) && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 @@ -2817,9 +2883,9 @@ && clobber(x2) -> (MOVWstoreidx ptr idx (REVW w) mem) (MOVBstoreidx ptr idx w - x0:(MOVBstoreidx ptr (ADDconst [1] idx) (UBFX [arm64BFAuxInt(8, 24)] w) - x1:(MOVBstoreidx ptr (ADDconst [2] idx) (UBFX [arm64BFAuxInt(16, 16)] w) - x2:(MOVBstoreidx ptr (ADDconst [3] idx) (UBFX [arm64BFAuxInt(24, 8)] w) mem)))) + x0:(MOVBstoreidx ptr (ADDconst [1] idx) (UBFX [armBFAuxInt(8, 24)] w) + x1:(MOVBstoreidx ptr (ADDconst [2] idx) (UBFX [armBFAuxInt(16, 16)] w) + x2:(MOVBstoreidx ptr (ADDconst [3] idx) (UBFX [armBFAuxInt(24, 8)] w) mem)))) && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 @@ -2887,21 +2953,21 @@ && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x) -> (MOVHstoreidx ptr0 idx0 (REV16W w) mem) -(MOVBstore [i] {s} ptr w x:(MOVBstore [i-1] {s} ptr (UBFX [arm64BFAuxInt(8, 8)] w) mem)) +(MOVBstore [i] {s} ptr w x:(MOVBstore [i-1] {s} ptr (UBFX [armBFAuxInt(8, 8)] w) mem)) && x.Uses == 1 && clobber(x) -> (MOVHstore [i-1] {s} ptr (REV16W w) mem) -(MOVBstore [1] {s} (ADD ptr1 idx1) w x:(MOVBstoreidx ptr0 idx0 (UBFX [arm64BFAuxInt(8, 8)] w) mem)) +(MOVBstore [1] {s} (ADD ptr1 idx1) w x:(MOVBstoreidx ptr0 idx0 (UBFX [armBFAuxInt(8, 8)] w) mem)) && x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x) -> (MOVHstoreidx ptr0 idx0 (REV16W w) mem) -(MOVBstoreidx ptr (ADDconst [1] idx) w x:(MOVBstoreidx ptr idx (UBFX [arm64BFAuxInt(8, 8)] w) mem)) +(MOVBstoreidx ptr (ADDconst [1] idx) w x:(MOVBstoreidx ptr idx (UBFX [armBFAuxInt(8, 8)] w) mem)) && x.Uses == 1 && clobber(x) -> (MOVHstoreidx ptr idx (REV16W w) mem) -(MOVBstoreidx ptr idx w x:(MOVBstoreidx ptr (ADDconst [1] idx) (UBFX [arm64BFAuxInt(8, 8)] w) mem)) +(MOVBstoreidx ptr idx w x:(MOVBstoreidx ptr (ADDconst [1] idx) (UBFX [armBFAuxInt(8, 8)] w) mem)) && x.Uses == 1 && clobber(x) -> (MOVHstoreidx ptr idx w mem) @@ -2915,11 +2981,11 @@ && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x) -> (MOVHstoreidx ptr0 idx0 (REV16W w) mem) -(MOVBstore [i] {s} ptr w x:(MOVBstore [i-1] {s} ptr (UBFX [arm64BFAuxInt(8, 24)] w) mem)) +(MOVBstore [i] {s} ptr w x:(MOVBstore [i-1] {s} ptr (UBFX [armBFAuxInt(8, 24)] w) mem)) && x.Uses == 1 && clobber(x) -> (MOVHstore [i-1] {s} ptr (REV16W w) mem) -(MOVBstore [1] {s} (ADD ptr1 idx1) w x:(MOVBstoreidx ptr0 idx0 (UBFX [arm64BFAuxInt(8, 24)] w) mem)) +(MOVBstore [1] {s} (ADD ptr1 idx1) w x:(MOVBstoreidx ptr0 idx0 (UBFX [armBFAuxInt(8, 24)] w) mem)) && x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) diff --git a/src/cmd/compile/internal/ssa/gen/ARM64Ops.go b/src/cmd/compile/internal/ssa/gen/ARM64Ops.go index fc0a41527b..a0c8b060c7 100644 --- a/src/cmd/compile/internal/ssa/gen/ARM64Ops.go +++ b/src/cmd/compile/internal/ssa/gen/ARM64Ops.go @@ -130,62 +130,77 @@ func init() { gpspsbg = gpspg | buildReg("SB") fp = buildReg("F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31") callerSave = gp | fp | buildReg("g") // runtime.setg (and anything calling it) may clobber g + r0 = buildReg("R0") + r1 = buildReg("R1") + r2 = buildReg("R2") + r3 = buildReg("R3") ) // Common regInfo var ( - gp01 = regInfo{inputs: nil, outputs: []regMask{gp}} - gp11 = regInfo{inputs: []regMask{gpg}, outputs: []regMask{gp}} - gp11sp = regInfo{inputs: []regMask{gpspg}, outputs: []regMask{gp}} - gp1flags = regInfo{inputs: []regMask{gpg}} - gp1flags1 = regInfo{inputs: []regMask{gpg}, outputs: []regMask{gp}} - gp21 = regInfo{inputs: []regMask{gpg, gpg}, outputs: []regMask{gp}} - gp31 = regInfo{inputs: []regMask{gpg, gpg, gpg}, outputs: []regMask{gp}} - gp21nog = regInfo{inputs: []regMask{gp, gp}, outputs: []regMask{gp}} - gp2flags = regInfo{inputs: []regMask{gpg, gpg}} - gp2flags1 = regInfo{inputs: []regMask{gp, gp}, outputs: []regMask{gp}} - gp22 = regInfo{inputs: []regMask{gpg, gpg}, outputs: []regMask{gp, gp}} - gpload = regInfo{inputs: []regMask{gpspsbg}, outputs: []regMask{gp}} - gp2load = regInfo{inputs: []regMask{gpspsbg, gpg}, outputs: []regMask{gp}} - gpstore = regInfo{inputs: []regMask{gpspsbg, gpg}} - gpstore0 = regInfo{inputs: []regMask{gpspsbg}} - gpstore2 = regInfo{inputs: []regMask{gpspsbg, gpg, gpg}} - gpxchg = regInfo{inputs: []regMask{gpspsbg, gpg}, outputs: []regMask{gp}} - gpcas = regInfo{inputs: []regMask{gpspsbg, gpg, gpg}, outputs: []regMask{gp}} - fp01 = regInfo{inputs: nil, outputs: []regMask{fp}} - fp11 = regInfo{inputs: []regMask{fp}, outputs: []regMask{fp}} - fpgp = regInfo{inputs: []regMask{fp}, outputs: []regMask{gp}} - gpfp = regInfo{inputs: []regMask{gp}, outputs: []regMask{fp}} - fp21 = regInfo{inputs: []regMask{fp, fp}, outputs: []regMask{fp}} - fp31 = regInfo{inputs: []regMask{fp, fp, fp}, outputs: []regMask{fp}} - fp2flags = regInfo{inputs: []regMask{fp, fp}} - fpload = regInfo{inputs: []regMask{gpspsbg}, outputs: []regMask{fp}} - fp2load = regInfo{inputs: []regMask{gpspsbg, gpg}, outputs: []regMask{fp}} - fpstore = regInfo{inputs: []regMask{gpspsbg, fp}} - fpstore2 = regInfo{inputs: []regMask{gpspsbg, gpg, fp}} - readflags = regInfo{inputs: nil, outputs: []regMask{gp}} + gp01 = regInfo{inputs: nil, outputs: []regMask{gp}} + gp0flags1 = regInfo{inputs: []regMask{0}, outputs: []regMask{gp}} + gp11 = regInfo{inputs: []regMask{gpg}, outputs: []regMask{gp}} + gp11sp = regInfo{inputs: []regMask{gpspg}, outputs: []regMask{gp}} + gp1flags = regInfo{inputs: []regMask{gpg}} + gp1flags1 = regInfo{inputs: []regMask{gpg}, outputs: []regMask{gp}} + gp11flags = regInfo{inputs: []regMask{gpg}, outputs: []regMask{gp, 0}} + gp21 = regInfo{inputs: []regMask{gpg, gpg}, outputs: []regMask{gp}} + gp21nog = regInfo{inputs: []regMask{gp, gp}, outputs: []regMask{gp}} + gp21flags = regInfo{inputs: []regMask{gp, gp}, outputs: []regMask{gp, 0}} + gp2flags = regInfo{inputs: []regMask{gpg, gpg}} + gp2flags1 = regInfo{inputs: []regMask{gp, gp}, outputs: []regMask{gp}} + gp2flags1flags = regInfo{inputs: []regMask{gp, gp, 0}, outputs: []regMask{gp, 0}} + gp2load = regInfo{inputs: []regMask{gpspsbg, gpg}, outputs: []regMask{gp}} + gp22 = regInfo{inputs: []regMask{gpg, gpg}, outputs: []regMask{gp, gp}} + gp31 = regInfo{inputs: []regMask{gpg, gpg, gpg}, outputs: []regMask{gp}} + gpload = regInfo{inputs: []regMask{gpspsbg}, outputs: []regMask{gp}} + gpstore = regInfo{inputs: []regMask{gpspsbg, gpg}} + gpstore0 = regInfo{inputs: []regMask{gpspsbg}} + gpstore2 = regInfo{inputs: []regMask{gpspsbg, gpg, gpg}} + gpxchg = regInfo{inputs: []regMask{gpspsbg, gpg}, outputs: []regMask{gp}} + gpcas = regInfo{inputs: []regMask{gpspsbg, gpg, gpg}, outputs: []regMask{gp}} + fp01 = regInfo{inputs: nil, outputs: []regMask{fp}} + fp11 = regInfo{inputs: []regMask{fp}, outputs: []regMask{fp}} + fpgp = regInfo{inputs: []regMask{fp}, outputs: []regMask{gp}} + gpfp = regInfo{inputs: []regMask{gp}, outputs: []regMask{fp}} + fp21 = regInfo{inputs: []regMask{fp, fp}, outputs: []regMask{fp}} + fp31 = regInfo{inputs: []regMask{fp, fp, fp}, outputs: []regMask{fp}} + fp2flags = regInfo{inputs: []regMask{fp, fp}} + fp1flags = regInfo{inputs: []regMask{fp}} + fpload = regInfo{inputs: []regMask{gpspsbg}, outputs: []regMask{fp}} + fp2load = regInfo{inputs: []regMask{gpspsbg, gpg}, outputs: []regMask{fp}} + fpstore = regInfo{inputs: []regMask{gpspsbg, fp}} + fpstore2 = regInfo{inputs: []regMask{gpspsbg, gpg, fp}} + readflags = regInfo{inputs: nil, outputs: []regMask{gp}} ) ops := []opData{ // binary ops - {name: "ADD", argLength: 2, reg: gp21, asm: "ADD", commutative: true}, // arg0 + arg1 - {name: "ADDconst", argLength: 1, reg: gp11sp, asm: "ADD", aux: "Int64"}, // arg0 + auxInt - {name: "SUB", argLength: 2, reg: gp21, asm: "SUB"}, // arg0 - arg1 - {name: "SUBconst", argLength: 1, reg: gp11, asm: "SUB", aux: "Int64"}, // arg0 - auxInt - {name: "MUL", argLength: 2, reg: gp21, asm: "MUL", commutative: true}, // arg0 * arg1 - {name: "MULW", argLength: 2, reg: gp21, asm: "MULW", commutative: true}, // arg0 * arg1, 32-bit - {name: "MNEG", argLength: 2, reg: gp21, asm: "MNEG", commutative: true}, // -arg0 * arg1 - {name: "MNEGW", argLength: 2, reg: gp21, asm: "MNEGW", commutative: true}, // -arg0 * arg1, 32-bit - {name: "MULH", argLength: 2, reg: gp21, asm: "SMULH", commutative: true}, // (arg0 * arg1) >> 64, signed - {name: "UMULH", argLength: 2, reg: gp21, asm: "UMULH", commutative: true}, // (arg0 * arg1) >> 64, unsigned - {name: "MULL", argLength: 2, reg: gp21, asm: "SMULL", commutative: true}, // arg0 * arg1, signed, 32-bit mult results in 64-bit - {name: "UMULL", argLength: 2, reg: gp21, asm: "UMULL", commutative: true}, // arg0 * arg1, unsigned, 32-bit mult results in 64-bit - {name: "DIV", argLength: 2, reg: gp21, asm: "SDIV"}, // arg0 / arg1, signed - {name: "UDIV", argLength: 2, reg: gp21, asm: "UDIV"}, // arg0 / arg1, unsighed - {name: "DIVW", argLength: 2, reg: gp21, asm: "SDIVW"}, // arg0 / arg1, signed, 32 bit - {name: "UDIVW", argLength: 2, reg: gp21, asm: "UDIVW"}, // arg0 / arg1, unsighed, 32 bit - {name: "MOD", argLength: 2, reg: gp21, asm: "REM"}, // arg0 % arg1, signed - {name: "UMOD", argLength: 2, reg: gp21, asm: "UREM"}, // arg0 % arg1, unsigned - {name: "MODW", argLength: 2, reg: gp21, asm: "REMW"}, // arg0 % arg1, signed, 32 bit - {name: "UMODW", argLength: 2, reg: gp21, asm: "UREMW"}, // arg0 % arg1, unsigned, 32 bit + {name: "ADCSflags", argLength: 3, reg: gp2flags1flags, typ: "(UInt64,Flags)", asm: "ADCS", commutative: true}, // arg0+arg1+carry, set flags. + {name: "ADCzerocarry", argLength: 1, reg: gp0flags1, typ: "UInt64", asm: "ADC"}, // ZR+ZR+carry + {name: "ADD", argLength: 2, reg: gp21, asm: "ADD", commutative: true}, // arg0 + arg1 + {name: "ADDconst", argLength: 1, reg: gp11sp, asm: "ADD", aux: "Int64"}, // arg0 + auxInt + {name: "ADDSconstflags", argLength: 1, reg: gp11flags, typ: "(UInt64,Flags)", asm: "ADDS", aux: "Int64"}, // arg0+auxint, set flags. + {name: "ADDSflags", argLength: 2, reg: gp21flags, typ: "(UInt64,Flags)", asm: "ADDS", commutative: true}, // arg0+arg1, set flags. + {name: "SUB", argLength: 2, reg: gp21, asm: "SUB"}, // arg0 - arg1 + {name: "SUBconst", argLength: 1, reg: gp11, asm: "SUB", aux: "Int64"}, // arg0 - auxInt + {name: "SBCSflags", argLength: 3, reg: gp2flags1flags, typ: "(UInt64,Flags)", asm: "SBCS"}, // arg0-(arg1+borrowing), set flags. + {name: "SUBSflags", argLength: 2, reg: gp21flags, typ: "(UInt64,Flags)", asm: "SUBS"}, // arg0 - arg1, set flags. + {name: "MUL", argLength: 2, reg: gp21, asm: "MUL", commutative: true}, // arg0 * arg1 + {name: "MULW", argLength: 2, reg: gp21, asm: "MULW", commutative: true}, // arg0 * arg1, 32-bit + {name: "MNEG", argLength: 2, reg: gp21, asm: "MNEG", commutative: true}, // -arg0 * arg1 + {name: "MNEGW", argLength: 2, reg: gp21, asm: "MNEGW", commutative: true}, // -arg0 * arg1, 32-bit + {name: "MULH", argLength: 2, reg: gp21, asm: "SMULH", commutative: true}, // (arg0 * arg1) >> 64, signed + {name: "UMULH", argLength: 2, reg: gp21, asm: "UMULH", commutative: true}, // (arg0 * arg1) >> 64, unsigned + {name: "MULL", argLength: 2, reg: gp21, asm: "SMULL", commutative: true}, // arg0 * arg1, signed, 32-bit mult results in 64-bit + {name: "UMULL", argLength: 2, reg: gp21, asm: "UMULL", commutative: true}, // arg0 * arg1, unsigned, 32-bit mult results in 64-bit + {name: "DIV", argLength: 2, reg: gp21, asm: "SDIV"}, // arg0 / arg1, signed + {name: "UDIV", argLength: 2, reg: gp21, asm: "UDIV"}, // arg0 / arg1, unsighed + {name: "DIVW", argLength: 2, reg: gp21, asm: "SDIVW"}, // arg0 / arg1, signed, 32 bit + {name: "UDIVW", argLength: 2, reg: gp21, asm: "UDIVW"}, // arg0 / arg1, unsighed, 32 bit + {name: "MOD", argLength: 2, reg: gp21, asm: "REM"}, // arg0 % arg1, signed + {name: "UMOD", argLength: 2, reg: gp21, asm: "UREM"}, // arg0 % arg1, unsigned + {name: "MODW", argLength: 2, reg: gp21, asm: "REMW"}, // arg0 % arg1, signed, 32 bit + {name: "UMODW", argLength: 2, reg: gp21, asm: "UREMW"}, // arg0 % arg1, unsigned, 32 bit {name: "FADDS", argLength: 2, reg: fp21, asm: "FADDS", commutative: true}, // arg0 + arg1 {name: "FADDD", argLength: 2, reg: fp21, asm: "FADDD", commutative: true}, // arg0 + arg1 @@ -209,22 +224,25 @@ func init() { {name: "ORN", argLength: 2, reg: gp21, asm: "ORN"}, // arg0 | ^arg1 {name: "LoweredMuluhilo", argLength: 2, reg: gp22, resultNotInArgs: true}, // arg0 * arg1, returns (hi, lo) + // unary ops - {name: "MVN", argLength: 1, reg: gp11, asm: "MVN"}, // ^arg0 - {name: "NEG", argLength: 1, reg: gp11, asm: "NEG"}, // -arg0 - {name: "FABSD", argLength: 1, reg: fp11, asm: "FABSD"}, // abs(arg0), float64 - {name: "FNEGS", argLength: 1, reg: fp11, asm: "FNEGS"}, // -arg0, float32 - {name: "FNEGD", argLength: 1, reg: fp11, asm: "FNEGD"}, // -arg0, float64 - {name: "FSQRTD", argLength: 1, reg: fp11, asm: "FSQRTD"}, // sqrt(arg0), float64 - {name: "REV", argLength: 1, reg: gp11, asm: "REV"}, // byte reverse, 64-bit - {name: "REVW", argLength: 1, reg: gp11, asm: "REVW"}, // byte reverse, 32-bit - {name: "REV16W", argLength: 1, reg: gp11, asm: "REV16W"}, // byte reverse in each 16-bit halfword, 32-bit - {name: "RBIT", argLength: 1, reg: gp11, asm: "RBIT"}, // bit reverse, 64-bit - {name: "RBITW", argLength: 1, reg: gp11, asm: "RBITW"}, // bit reverse, 32-bit - {name: "CLZ", argLength: 1, reg: gp11, asm: "CLZ"}, // count leading zero, 64-bit - {name: "CLZW", argLength: 1, reg: gp11, asm: "CLZW"}, // count leading zero, 32-bit - {name: "VCNT", argLength: 1, reg: fp11, asm: "VCNT"}, // count set bits for each 8-bit unit and store the result in each 8-bit unit - {name: "VUADDLV", argLength: 1, reg: fp11, asm: "VUADDLV"}, // unsigned sum of eight bytes in a 64-bit value, zero extended to 64-bit. + {name: "MVN", argLength: 1, reg: gp11, asm: "MVN"}, // ^arg0 + {name: "NEG", argLength: 1, reg: gp11, asm: "NEG"}, // -arg0 + {name: "NEGSflags", argLength: 1, reg: gp11flags, typ: "(UInt64,Flags)", asm: "NEGS"}, // -arg0, set flags. + {name: "NGCzerocarry", argLength: 1, reg: gp0flags1, typ: "UInt64", asm: "NGC"}, // -1 if borrowing, 0 otherwise. + {name: "FABSD", argLength: 1, reg: fp11, asm: "FABSD"}, // abs(arg0), float64 + {name: "FNEGS", argLength: 1, reg: fp11, asm: "FNEGS"}, // -arg0, float32 + {name: "FNEGD", argLength: 1, reg: fp11, asm: "FNEGD"}, // -arg0, float64 + {name: "FSQRTD", argLength: 1, reg: fp11, asm: "FSQRTD"}, // sqrt(arg0), float64 + {name: "REV", argLength: 1, reg: gp11, asm: "REV"}, // byte reverse, 64-bit + {name: "REVW", argLength: 1, reg: gp11, asm: "REVW"}, // byte reverse, 32-bit + {name: "REV16W", argLength: 1, reg: gp11, asm: "REV16W"}, // byte reverse in each 16-bit halfword, 32-bit + {name: "RBIT", argLength: 1, reg: gp11, asm: "RBIT"}, // bit reverse, 64-bit + {name: "RBITW", argLength: 1, reg: gp11, asm: "RBITW"}, // bit reverse, 32-bit + {name: "CLZ", argLength: 1, reg: gp11, asm: "CLZ"}, // count leading zero, 64-bit + {name: "CLZW", argLength: 1, reg: gp11, asm: "CLZW"}, // count leading zero, 32-bit + {name: "VCNT", argLength: 1, reg: fp11, asm: "VCNT"}, // count set bits for each 8-bit unit and store the result in each 8-bit unit + {name: "VUADDLV", argLength: 1, reg: fp11, asm: "VUADDLV"}, // unsigned sum of eight bytes in a 64-bit value, zero extended to 64-bit. {name: "LoweredRound32F", argLength: 1, reg: fp11, resultInArg0: true, zeroWidth: true}, {name: "LoweredRound64F", argLength: 1, reg: fp11, resultInArg0: true, zeroWidth: true}, @@ -271,6 +289,8 @@ func init() { {name: "TSTWconst", argLength: 1, reg: gp1flags, asm: "TSTW", aux: "Int32", typ: "Flags"}, // arg0 & auxInt compare to 0, 32 bit {name: "FCMPS", argLength: 2, reg: fp2flags, asm: "FCMPS", typ: "Flags"}, // arg0 compare to arg1, float32 {name: "FCMPD", argLength: 2, reg: fp2flags, asm: "FCMPD", typ: "Flags"}, // arg0 compare to arg1, float64 + {name: "FCMPS0", argLength: 1, reg: fp1flags, asm: "FCMPS", typ: "Flags"}, // arg0 compare to 0, float32 + {name: "FCMPD0", argLength: 1, reg: fp1flags, asm: "FCMPD", typ: "Flags"}, // arg0 compare to 0, float64 // shifted ops {name: "MVNshiftLL", argLength: 1, reg: gp11, asm: "MVN", aux: "Int64"}, // ^(arg0<y false otherwise. {name: "GreaterEqualU", argLength: 1, reg: readflags}, // bool, true flags encode unsigned x>=y false otherwise. - + {name: "LessThanF", argLength: 1, reg: readflags}, // bool, true flags encode floating-point xy false otherwise. + {name: "GreaterEqualF", argLength: 1, reg: readflags}, // bool, true flags encode floating-point x>=y false otherwise. // duffzero // arg0 = address of memory to zero // arg1 = mem @@ -583,6 +606,7 @@ func init() { // load from arg0. arg1=mem. auxint must be zero. // returns so they can be properly ordered with other loads. {name: "LDAR", argLength: 2, reg: gpload, asm: "LDAR", faultOnNilArg0: true}, + {name: "LDARB", argLength: 2, reg: gpload, asm: "LDARB", faultOnNilArg0: true}, {name: "LDARW", argLength: 2, reg: gpload, asm: "LDARW", faultOnNilArg0: true}, // atomic stores. @@ -644,6 +668,13 @@ func init() { // It saves all GP registers if necessary, // but clobbers R30 (LR) because it's a call. {name: "LoweredWB", argLength: 3, reg: regInfo{inputs: []regMask{buildReg("R2"), buildReg("R3")}, clobbers: (callerSave &^ gpg) | buildReg("R30")}, clobberFlags: true, aux: "Sym", symEffect: "None"}, + + // There are three of these functions so that they can have three different register inputs. + // When we check 0 <= c <= cap (A), then 0 <= b <= c (B), then 0 <= a <= b (C), we want the + // default registers to match so we don't need to copy registers around unnecessarily. + {name: "LoweredPanicBoundsA", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{r2, r3}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in generic.go). + {name: "LoweredPanicBoundsB", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{r1, r2}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in generic.go). + {name: "LoweredPanicBoundsC", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{r0, r1}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in generic.go). } blocks := []blockData{ @@ -663,6 +694,10 @@ func init() { {name: "NZW"}, // Control != 0, 32-bit {name: "TBZ"}, // Control & (1 << Aux.(int64)) == 0 {name: "TBNZ"}, // Control & (1 << Aux.(int64)) != 0 + {name: "FLT"}, + {name: "FLE"}, + {name: "FGT"}, + {name: "FGE"}, } archs = append(archs, arch{ diff --git a/src/cmd/compile/internal/ssa/gen/ARMOps.go b/src/cmd/compile/internal/ssa/gen/ARMOps.go index 4e2b0c5a5d..d8bdfeb86e 100644 --- a/src/cmd/compile/internal/ssa/gen/ARMOps.go +++ b/src/cmd/compile/internal/ssa/gen/ARMOps.go @@ -94,6 +94,11 @@ func init() { gpspsbg = gpspg | buildReg("SB") fp = buildReg("F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15") callerSave = gp | fp | buildReg("g") // runtime.setg (and anything calling it) may clobber g + r0 = buildReg("R0") + r1 = buildReg("R1") + r2 = buildReg("R2") + r3 = buildReg("R3") + r4 = buildReg("R4") ) // Common regInfo var ( @@ -207,9 +212,10 @@ func init() { {name: "NEGD", argLength: 1, reg: fp11, asm: "NEGD"}, // -arg0, float64 {name: "SQRTD", argLength: 1, reg: fp11, asm: "SQRTD"}, // sqrt(arg0), float64 - {name: "CLZ", argLength: 1, reg: gp11, asm: "CLZ"}, // count leading zero - {name: "REV", argLength: 1, reg: gp11, asm: "REV"}, // reverse byte order - {name: "RBIT", argLength: 1, reg: gp11, asm: "RBIT"}, // reverse bit order + {name: "CLZ", argLength: 1, reg: gp11, asm: "CLZ"}, // count leading zero + {name: "REV", argLength: 1, reg: gp11, asm: "REV"}, // reverse byte order + {name: "REV16", argLength: 1, reg: gp11, asm: "REV16"}, // reverse byte order in 16-bit halfwords + {name: "RBIT", argLength: 1, reg: gp11, asm: "RBIT"}, // reverse bit order // shifts {name: "SLL", argLength: 2, reg: gp21, asm: "SLL"}, // arg0 << arg1, shift amount is mod 256 @@ -525,6 +531,17 @@ func init() { // See runtime/stubs.go for a more detailed discussion. {name: "LoweredGetCallerPC", reg: gp01, rematerializeable: true}, + // There are three of these functions so that they can have three different register inputs. + // When we check 0 <= c <= cap (A), then 0 <= b <= c (B), then 0 <= a <= b (C), we want the + // default registers to match so we don't need to copy registers around unnecessarily. + {name: "LoweredPanicBoundsA", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{r2, r3}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in genericOps.go). + {name: "LoweredPanicBoundsB", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{r1, r2}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in genericOps.go). + {name: "LoweredPanicBoundsC", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{r0, r1}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in genericOps.go). + // Extend ops are the same as Bounds ops except the indexes are 64-bit. + {name: "LoweredPanicExtendA", argLength: 4, aux: "Int64", reg: regInfo{inputs: []regMask{r4, r2, r3}}, typ: "Mem"}, // arg0=idxHi, arg1=idxLo, arg2=len, arg3=mem, returns memory. AuxInt contains report code (see PanicExtend in genericOps.go). + {name: "LoweredPanicExtendB", argLength: 4, aux: "Int64", reg: regInfo{inputs: []regMask{r4, r1, r2}}, typ: "Mem"}, // arg0=idxHi, arg1=idxLo, arg2=len, arg3=mem, returns memory. AuxInt contains report code (see PanicExtend in genericOps.go). + {name: "LoweredPanicExtendC", argLength: 4, aux: "Int64", reg: regInfo{inputs: []regMask{r4, r0, r1}}, typ: "Mem"}, // arg0=idxHi, arg1=idxLo, arg2=len, arg3=mem, returns memory. AuxInt contains report code (see PanicExtend in genericOps.go). + // Constant flag values. For any comparison, there are 5 possible // outcomes: the three from the signed total order (<,==,>) and the // three from the unsigned total order. The == cases overlap. diff --git a/src/cmd/compile/internal/ssa/gen/MIPS.rules b/src/cmd/compile/internal/ssa/gen/MIPS.rules index db9c5bc638..2b3ae5d93e 100644 --- a/src/cmd/compile/internal/ssa/gen/MIPS.rules +++ b/src/cmd/compile/internal/ssa/gen/MIPS.rules @@ -108,6 +108,12 @@ (Rsh8x16 x y) -> (SRA (SignExt16to32 x) ( CMOVZ (ZeroExt16to32 y) (MOVWconst [-1]) (SGTUconst [32] (ZeroExt16to32 y)))) (Rsh8x8 x y) -> (SRA (SignExt16to32 x) ( CMOVZ (ZeroExt8to32 y) (MOVWconst [-1]) (SGTUconst [32] (ZeroExt8to32 y)))) +// rotates +(RotateLeft8 x (MOVWconst [c])) -> (Or8 (Lsh8x32 x (MOVWconst [c&7])) (Rsh8Ux32 x (MOVWconst [-c&7]))) +(RotateLeft16 x (MOVWconst [c])) -> (Or16 (Lsh16x32 x (MOVWconst [c&15])) (Rsh16Ux32 x (MOVWconst [-c&15]))) +(RotateLeft32 x (MOVWconst [c])) -> (Or32 (Lsh32x32 x (MOVWconst [c&31])) (Rsh32Ux32 x (MOVWconst [-c&31]))) +(RotateLeft64 x (MOVWconst [c])) -> (Or64 (Lsh64x32 x (MOVWconst [c&63])) (Rsh64Ux32 x (MOVWconst [-c&63]))) + // unary ops (Neg(32|16|8) x) -> (NEG x) (Neg(32|64)F x) -> (NEG(F|D) x) @@ -410,6 +416,13 @@ // Write barrier. (WB {fn} destptr srcptr mem) -> (LoweredWB {fn} destptr srcptr mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 0 -> (LoweredPanicBoundsA [kind] x y mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 1 -> (LoweredPanicBoundsB [kind] x y mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 2 -> (LoweredPanicBoundsC [kind] x y mem) + +(PanicExtend [kind] hi lo y mem) && boundsABI(kind) == 0 -> (LoweredPanicExtendA [kind] hi lo y mem) +(PanicExtend [kind] hi lo y mem) && boundsABI(kind) == 1 -> (LoweredPanicExtendB [kind] hi lo y mem) +(PanicExtend [kind] hi lo y mem) && boundsABI(kind) == 2 -> (LoweredPanicExtendC [kind] hi lo y mem) // Optimizations @@ -688,7 +701,7 @@ (GEZ (MOVWconst [c]) yes no) && int32(c) < 0 -> (First nil no yes) // conditional move -(CMOVZ _ b (MOVWconst [0])) -> b +(CMOVZ _ f (MOVWconst [0])) -> f (CMOVZ a _ (MOVWconst [c])) && c!=0 -> a (CMOVZzero _ (MOVWconst [0])) -> (MOVWconst [0]) (CMOVZzero a (MOVWconst [c])) && c!=0 -> a diff --git a/src/cmd/compile/internal/ssa/gen/MIPS64.rules b/src/cmd/compile/internal/ssa/gen/MIPS64.rules index 9c16c35438..a3df00aa33 100644 --- a/src/cmd/compile/internal/ssa/gen/MIPS64.rules +++ b/src/cmd/compile/internal/ssa/gen/MIPS64.rules @@ -105,6 +105,12 @@ (Rsh8x16 x y) -> (SRAV (SignExt8to64 x) (OR (NEGV (SGTU (ZeroExt16to64 y) (MOVVconst [63]))) (ZeroExt16to64 y))) (Rsh8x8 x y) -> (SRAV (SignExt8to64 x) (OR (NEGV (SGTU (ZeroExt8to64 y) (MOVVconst [63]))) (ZeroExt8to64 y))) +// rotates +(RotateLeft8 x (MOVVconst [c])) -> (Or8 (Lsh8x64 x (MOVVconst [c&7])) (Rsh8Ux64 x (MOVVconst [-c&7]))) +(RotateLeft16 x (MOVVconst [c])) -> (Or16 (Lsh16x64 x (MOVVconst [c&15])) (Rsh16Ux64 x (MOVVconst [-c&15]))) +(RotateLeft32 x (MOVVconst [c])) -> (Or32 (Lsh32x64 x (MOVVconst [c&31])) (Rsh32Ux64 x (MOVVconst [-c&31]))) +(RotateLeft64 x (MOVVconst [c])) -> (Or64 (Lsh64x64 x (MOVVconst [c&63])) (Rsh64Ux64 x (MOVVconst [-c&63]))) + // unary ops (Neg(64|32|16|8) x) -> (NEGV x) (Neg(32|64)F x) -> (NEG(F|D) x) @@ -379,6 +385,7 @@ (InterCall [argwid] entry mem) -> (CALLinter [argwid] entry mem) // atomic intrinsics +(AtomicLoad8 ptr mem) -> (LoweredAtomicLoad8 ptr mem) (AtomicLoad32 ptr mem) -> (LoweredAtomicLoad32 ptr mem) (AtomicLoad64 ptr mem) -> (LoweredAtomicLoad64 ptr mem) (AtomicLoadPtr ptr mem) -> (LoweredAtomicLoad64 ptr mem) @@ -412,6 +419,10 @@ // Write barrier. (WB {fn} destptr srcptr mem) -> (LoweredWB {fn} destptr srcptr mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 0 -> (LoweredPanicBoundsA [kind] x y mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 1 -> (LoweredPanicBoundsB [kind] x y mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 2 -> (LoweredPanicBoundsC [kind] x y mem) + // Optimizations // Absorb boolean tests into block diff --git a/src/cmd/compile/internal/ssa/gen/MIPS64Ops.go b/src/cmd/compile/internal/ssa/gen/MIPS64Ops.go index 5235930ccc..ba02e0fcb5 100644 --- a/src/cmd/compile/internal/ssa/gen/MIPS64Ops.go +++ b/src/cmd/compile/internal/ssa/gen/MIPS64Ops.go @@ -136,6 +136,10 @@ func init() { lo = buildReg("LO") hi = buildReg("HI") callerSave = gp | fp | lo | hi | buildReg("g") // runtime.setg (and anything calling it) may clobber g + r1 = buildReg("R1") + r2 = buildReg("R2") + r3 = buildReg("R3") + r4 = buildReg("R4") ) // Common regInfo var ( @@ -339,6 +343,7 @@ func init() { // atomic loads. // load from arg0. arg1=mem. // returns so they can be properly ordered with other loads. + {name: "LoweredAtomicLoad8", argLength: 2, reg: gpload, faultOnNilArg0: true}, {name: "LoweredAtomicLoad32", argLength: 2, reg: gpload, faultOnNilArg0: true}, {name: "LoweredAtomicLoad64", argLength: 2, reg: gpload, faultOnNilArg0: true}, @@ -420,6 +425,13 @@ func init() { // but clobbers R31 (LR) because it's a call // and R23 (REGTMP). {name: "LoweredWB", argLength: 3, reg: regInfo{inputs: []regMask{buildReg("R20"), buildReg("R21")}, clobbers: (callerSave &^ gpg) | buildReg("R31")}, clobberFlags: true, aux: "Sym", symEffect: "None"}, + + // There are three of these functions so that they can have three different register inputs. + // When we check 0 <= c <= cap (A), then 0 <= b <= c (B), then 0 <= a <= b (C), we want the + // default registers to match so we don't need to copy registers around unnecessarily. + {name: "LoweredPanicBoundsA", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{r3, r4}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in genericOps.go). + {name: "LoweredPanicBoundsB", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{r2, r3}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in genericOps.go). + {name: "LoweredPanicBoundsC", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{r1, r2}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in genericOps.go). } blocks := []blockData{ diff --git a/src/cmd/compile/internal/ssa/gen/MIPSOps.go b/src/cmd/compile/internal/ssa/gen/MIPSOps.go index 2605b60650..729cc05102 100644 --- a/src/cmd/compile/internal/ssa/gen/MIPSOps.go +++ b/src/cmd/compile/internal/ssa/gen/MIPSOps.go @@ -120,6 +120,11 @@ func init() { lo = buildReg("LO") hi = buildReg("HI") callerSave = gp | fp | lo | hi | buildReg("g") // runtime.setg (and anything calling it) may clobber g + r1 = buildReg("R1") + r2 = buildReg("R2") + r3 = buildReg("R3") + r4 = buildReg("R4") + r5 = buildReg("R5") ) // Common regInfo var ( @@ -390,6 +395,17 @@ func init() { // but clobbers R31 (LR) because it's a call // and R23 (REGTMP). {name: "LoweredWB", argLength: 3, reg: regInfo{inputs: []regMask{buildReg("R20"), buildReg("R21")}, clobbers: (callerSave &^ gpg) | buildReg("R31")}, clobberFlags: true, aux: "Sym", symEffect: "None"}, + + // There are three of these functions so that they can have three different register inputs. + // When we check 0 <= c <= cap (A), then 0 <= b <= c (B), then 0 <= a <= b (C), we want the + // default registers to match so we don't need to copy registers around unnecessarily. + {name: "LoweredPanicBoundsA", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{r3, r4}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in genericOps.go). + {name: "LoweredPanicBoundsB", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{r2, r3}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in genericOps.go). + {name: "LoweredPanicBoundsC", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{r1, r2}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in genericOps.go). + // Extend ops are the same as Bounds ops except the indexes are 64-bit. + {name: "LoweredPanicExtendA", argLength: 4, aux: "Int64", reg: regInfo{inputs: []regMask{r5, r3, r4}}, typ: "Mem"}, // arg0=idxHi, arg1=idxLo, arg2=len, arg3=mem, returns memory. AuxInt contains report code (see PanicExtend in genericOps.go). + {name: "LoweredPanicExtendB", argLength: 4, aux: "Int64", reg: regInfo{inputs: []regMask{r5, r2, r3}}, typ: "Mem"}, // arg0=idxHi, arg1=idxLo, arg2=len, arg3=mem, returns memory. AuxInt contains report code (see PanicExtend in genericOps.go). + {name: "LoweredPanicExtendC", argLength: 4, aux: "Int64", reg: regInfo{inputs: []regMask{r5, r1, r2}}, typ: "Mem"}, // arg0=idxHi, arg1=idxLo, arg2=len, arg3=mem, returns memory. AuxInt contains report code (see PanicExtend in genericOps.go). } blocks := []blockData{ diff --git a/src/cmd/compile/internal/ssa/gen/PPC64.rules b/src/cmd/compile/internal/ssa/gen/PPC64.rules index e5d5295908..01656df610 100644 --- a/src/cmd/compile/internal/ssa/gen/PPC64.rules +++ b/src/cmd/compile/internal/ssa/gen/PPC64.rules @@ -23,6 +23,7 @@ // (x + y) / 2 with x>=y -> (x - y) / 2 + y (Avg64u x y) -> (ADD (SRDconst (SUB x y) [1]) y) +(Add64carry x y c) -> (LoweredAdd64Carry x y c) (Mul64 x y) -> (MULLD x y) (Mul(32|16|8) x y) -> (MULLW x y) (Mul64uhilo x y) -> (LoweredMuluhilo x y) @@ -81,6 +82,12 @@ (FCEIL (FMOVDconst [x])) -> (FMOVDconst [auxFrom64F(math.Ceil(auxTo64F(x)))]) (FTRUNC (FMOVDconst [x])) -> (FMOVDconst [auxFrom64F(math.Trunc(auxTo64F(x)))]) +// Rotates +(RotateLeft8 x (MOVDconst [c])) -> (Or8 (Lsh8x64 x (MOVDconst [c&7])) (Rsh8Ux64 x (MOVDconst [-c&7]))) +(RotateLeft16 x (MOVDconst [c])) -> (Or16 (Lsh16x64 x (MOVDconst [c&15])) (Rsh16Ux64 x (MOVDconst [-c&15]))) +(RotateLeft32 x (MOVDconst [c])) -> (ROTLWconst [c&31] x) +(RotateLeft64 x (MOVDconst [c])) -> (ROTLconst [c&63] x) + // Rotate generation with const shift (ADD (SLDconst x [c]) (SRDconst x [d])) && d == 64-c -> (ROTLconst [c] x) ( OR (SLDconst x [c]) (SRDconst x [d])) && d == 64-c -> (ROTLconst [c] x) @@ -100,6 +107,14 @@ ( OR (SLW x (ANDconst [31] y)) (SRW x (SUB (MOVDconst [32]) (ANDconst [31] y)))) -> (ROTLW x y) (XOR (SLW x (ANDconst [31] y)) (SRW x (SUB (MOVDconst [32]) (ANDconst [31] y)))) -> (ROTLW x y) +// Lowering rotates +(RotateLeft32 x y) -> (ROTLW x y) +(RotateLeft64 x y) -> (ROTL x y) + +// Constant rotate generation +(ROTLW x (MOVDconst [c])) -> (ROTLWconst x [c&31]) +(ROTL x (MOVDconst [c])) -> (ROTLconst x [c&63]) + (Lsh64x64 x (Const64 [c])) && uint64(c) < 64 -> (SLDconst x [c]) (Rsh64x64 x (Const64 [c])) && uint64(c) < 64 -> (SRADconst x [c]) (Rsh64Ux64 x (Const64 [c])) && uint64(c) < 64 -> (SRDconst x [c]) @@ -295,10 +310,12 @@ (Ctz32NonZero x) -> (Ctz32 x) (Ctz64NonZero x) -> (Ctz64 x) -(Ctz64 x) -> (POPCNTD (ANDN (ADDconst [-1] x) x)) -(Ctz32 x) -> (POPCNTW (MOVWZreg (ANDN (ADDconst [-1] x) x))) +(Ctz64 x) && objabi.GOPPC64<=8 -> (POPCNTD (ANDN (ADDconst [-1] x) x)) +(Ctz64 x) -> (CNTTZD x) +(Ctz32 x) && objabi.GOPPC64<=8 -> (POPCNTW (MOVWZreg (ANDN (ADDconst [-1] x) x))) +(Ctz32 x) -> (CNTTZW (MOVWZreg x)) (Ctz16 x) -> (POPCNTW (MOVHZreg (ANDN (ADDconst [-1] x) x))) -(Ctz8 x) -> (POPCNTB (MOVBZreg (ANDN (ADDconst [-1] x) x))) +(Ctz8 x) -> (POPCNTB (MOVBZreg (ANDN (ADDconst [-1] x) x))) (BitLen64 x) -> (SUB (MOVDconst [64]) (CNTLZD x)) (BitLen32 x) -> (SUB (MOVDconst [32]) (CNTLZW x)) @@ -331,7 +348,7 @@ // Sign extension dependence on operand sign sets up for sign/zero-extension elision later (Eq8 x y) && isSigned(x.Type) && isSigned(y.Type) -> (Equal (CMPW (SignExt8to32 x) (SignExt8to32 y))) (Eq16 x y) && isSigned(x.Type) && isSigned(y.Type) -> (Equal (CMPW (SignExt16to32 x) (SignExt16to32 y))) -(Eq8 x y) -> (Equal (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y))) +(Eq8 x y) -> (Equal (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y))) (Eq16 x y) -> (Equal (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y))) (Eq32 x y) -> (Equal (CMPW x y)) (Eq64 x y) -> (Equal (CMP x y)) @@ -647,6 +664,10 @@ // Write barrier. (WB {fn} destptr srcptr mem) -> (LoweredWB {fn} destptr srcptr mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 0 -> (LoweredPanicBoundsA [kind] x y mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 1 -> (LoweredPanicBoundsB [kind] x y mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 2 -> (LoweredPanicBoundsC [kind] x y mem) + // Optimizations // Note that PPC "logical" immediates come in 0:15 and 16:31 unsigned immediate forms, // so ORconst, XORconst easily expand into a pair. @@ -903,7 +924,7 @@ (MOVBstorezero [off1+off2] {mergeSym(sym1,sym2)} x mem) // atomic intrinsics -(AtomicLoad(32|64|Ptr) ptr mem) -> (LoweredAtomicLoad(32|64|Ptr) [1] ptr mem) +(AtomicLoad(8|32|64|Ptr) ptr mem) -> (LoweredAtomicLoad(8|32|64|Ptr) [1] ptr mem) (AtomicLoadAcq32 ptr mem) -> (LoweredAtomicLoad32 [0] ptr mem) (AtomicStore(32|64) ptr val mem) -> (LoweredAtomicStore(32|64) [1] ptr val mem) diff --git a/src/cmd/compile/internal/ssa/gen/PPC64Ops.go b/src/cmd/compile/internal/ssa/gen/PPC64Ops.go index d6638b1ec7..65a183dba6 100644 --- a/src/cmd/compile/internal/ssa/gen/PPC64Ops.go +++ b/src/cmd/compile/internal/ssa/gen/PPC64Ops.go @@ -136,6 +136,7 @@ func init() { gp11 = regInfo{inputs: []regMask{gp | sp | sb}, outputs: []regMask{gp}} gp21 = regInfo{inputs: []regMask{gp | sp | sb, gp | sp | sb}, outputs: []regMask{gp}} gp22 = regInfo{inputs: []regMask{gp | sp | sb, gp | sp | sb}, outputs: []regMask{gp, gp}} + gp32 = regInfo{inputs: []regMask{gp | sp | sb, gp | sp | sb, gp | sp | sb}, outputs: []regMask{gp, gp}} gp1cr = regInfo{inputs: []regMask{gp | sp | sb}} gp2cr = regInfo{inputs: []regMask{gp | sp | sb, gp | sp | sb}} crgp = regInfo{inputs: nil, outputs: []regMask{gp}} @@ -158,6 +159,10 @@ func init() { fpstore = regInfo{inputs: []regMask{gp | sp | sb, fp}} fpstoreidx = regInfo{inputs: []regMask{gp | sp | sb, gp | sp | sb, fp}} callerSave = regMask(gp | fp | gr) + r3 = buildReg("R3") + r4 = buildReg("R4") + r5 = buildReg("R5") + r6 = buildReg("R6") ) ops := []opData{ {name: "ADD", argLength: 2, reg: gp21, asm: "ADD", commutative: true}, // arg0 + arg1 @@ -195,6 +200,7 @@ func init() { {name: "ROTL", argLength: 2, reg: gp21, asm: "ROTL"}, // arg0 rotate left by arg1 mod 64 {name: "ROTLW", argLength: 2, reg: gp21, asm: "ROTLW"}, // uint32(arg0) rotate left by arg1 mod 32 + {name: "LoweredAdd64Carry", argLength: 3, reg: gp32, resultNotInArgs: true}, // arg0 + arg1 + carry, returns (sum, carry) {name: "ADDconstForCarry", argLength: 1, reg: regInfo{inputs: []regMask{gp | sp | sb}, clobbers: tmp}, aux: "Int16", asm: "ADDC", typ: "Flags"}, // _, carry := arg0 + aux {name: "MaskIfNotCarry", argLength: 1, reg: crgp, asm: "ADDME", typ: "Int64"}, // carry - 1 (if carry then 0 else -1) @@ -211,6 +217,9 @@ func init() { {name: "CNTLZD", argLength: 1, reg: gp11, asm: "CNTLZD", clobberFlags: true}, // count leading zeros {name: "CNTLZW", argLength: 1, reg: gp11, asm: "CNTLZW", clobberFlags: true}, // count leading zeros (32 bit) + {name: "CNTTZD", argLength: 1, reg: gp11, asm: "CNTTZD"}, // count trailing zeros + {name: "CNTTZW", argLength: 1, reg: gp11, asm: "CNTTZW"}, // count trailing zeros (32 bit) + {name: "POPCNTD", argLength: 1, reg: gp11, asm: "POPCNTD"}, // number of set bits in arg0 {name: "POPCNTW", argLength: 1, reg: gp11, asm: "POPCNTW"}, // number of set bits in each word of arg0 placed in corresponding word {name: "POPCNTB", argLength: 1, reg: gp11, asm: "POPCNTB"}, // number of set bits in each byte of arg0 placed in corresonding byte @@ -476,6 +485,7 @@ func init() { {name: "LoweredAtomicStore32", argLength: 3, reg: gpstore, typ: "Mem", aux: "Int64", faultOnNilArg0: true, hasSideEffects: true}, {name: "LoweredAtomicStore64", argLength: 3, reg: gpstore, typ: "Mem", aux: "Int64", faultOnNilArg0: true, hasSideEffects: true}, + {name: "LoweredAtomicLoad8", argLength: 2, reg: gpload, typ: "UInt8", aux: "Int64", clobberFlags: true, faultOnNilArg0: true}, {name: "LoweredAtomicLoad32", argLength: 2, reg: gpload, typ: "UInt32", aux: "Int64", clobberFlags: true, faultOnNilArg0: true}, {name: "LoweredAtomicLoad64", argLength: 2, reg: gpload, typ: "Int64", aux: "Int64", clobberFlags: true, faultOnNilArg0: true}, {name: "LoweredAtomicLoadPtr", argLength: 2, reg: gpload, typ: "Int64", aux: "Int64", clobberFlags: true, faultOnNilArg0: true}, @@ -537,6 +547,13 @@ func init() { // but may clobber anything else, including R31 (REGTMP). {name: "LoweredWB", argLength: 3, reg: regInfo{inputs: []regMask{buildReg("R20"), buildReg("R21")}, clobbers: (callerSave &^ buildReg("R0 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R14 R15 R20 R21 g")) | buildReg("R31")}, clobberFlags: true, aux: "Sym", symEffect: "None"}, + // There are three of these functions so that they can have three different register inputs. + // When we check 0 <= c <= cap (A), then 0 <= b <= c (B), then 0 <= a <= b (C), we want the + // default registers to match so we don't need to copy registers around unnecessarily. + {name: "LoweredPanicBoundsA", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{r5, r6}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in genericOps.go). + {name: "LoweredPanicBoundsB", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{r4, r5}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in genericOps.go). + {name: "LoweredPanicBoundsC", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{r3, r4}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in genericOps.go). + // (InvertFlags (CMP a b)) == (CMP b a) // So if we want (LessThan (CMP a b)) but we can't do that because a is a constant, // then we do (LessThan (InvertFlags (CMP b a))) instead. diff --git a/src/cmd/compile/internal/ssa/gen/S390X.rules b/src/cmd/compile/internal/ssa/gen/S390X.rules index 0aeea53561..f3cfee7e97 100644 --- a/src/cmd/compile/internal/ssa/gen/S390X.rules +++ b/src/cmd/compile/internal/ssa/gen/S390X.rules @@ -119,6 +119,18 @@ (Bswap64 x) -> (MOVDBR x) (Bswap32 x) -> (MOVWBR x) +// add with carry +(Select0 (Add64carry x y c)) + -> (Select0 (ADDE x y (Select1 (ADDCconst c [-1])))) +(Select1 (Add64carry x y c)) + -> (Select0 (ADDE (MOVDconst [0]) (MOVDconst [0]) (Select1 (ADDE x y (Select1 (ADDCconst c [-1])))))) + +// subtract with borrow +(Select0 (Sub64borrow x y c)) + -> (Select0 (SUBE x y (Select1 (SUBC (MOVDconst [0]) c)))) +(Select1 (Sub64borrow x y c)) + -> (NEG (Select0 (SUBE (MOVDconst [0]) (MOVDconst [0]) (Select1 (SUBE x y (Select1 (SUBC (MOVDconst [0]) c))))))) + // math package intrinsics (Sqrt x) -> (FSQRT x) (Floor x) -> (FIDBR [7] x) @@ -128,6 +140,7 @@ (Round x) -> (FIDBR [1] x) // Atomic loads. +(AtomicLoad8 ptr mem) -> (MOVBZatomicload ptr mem) (AtomicLoad32 ptr mem) -> (MOVWZatomicload ptr mem) (AtomicLoad64 ptr mem) -> (MOVDatomicload ptr mem) (AtomicLoadPtr ptr mem) -> (MOVDatomicload ptr mem) @@ -234,6 +247,8 @@ (Rsh(16|8)x8 x y) -> (SRAW (MOV(H|B)reg x) (MOVDGE y (MOVDconst [63]) (CMPWUconst (MOVBZreg y) [64]))) // Lowering rotates +(RotateLeft8 x (MOVDconst [c])) -> (Or8 (Lsh8x64 x (MOVDconst [c&7])) (Rsh8Ux64 x (MOVDconst [-c&7]))) +(RotateLeft16 x (MOVDconst [c])) -> (Or16 (Lsh16x64 x (MOVDconst [c&15])) (Rsh16Ux64 x (MOVDconst [-c&15]))) (RotateLeft32 x y) -> (RLL x y) (RotateLeft64 x y) -> (RLLG x y) @@ -419,6 +434,10 @@ // Write barrier. (WB {fn} destptr srcptr mem) -> (LoweredWB {fn} destptr srcptr mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 0 -> (LoweredPanicBoundsA [kind] x y mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 1 -> (LoweredPanicBoundsB [kind] x y mem) +(PanicBounds [kind] x y mem) && boundsABI(kind) == 2 -> (LoweredPanicBoundsC [kind] x y mem) + // *************************** // Above: lowering rules // Below: optimizations @@ -1115,6 +1134,43 @@ (MOVBreg (ANDWconst [m] x)) && int8(m) >= 0 -> (MOVWZreg (ANDWconst [int64( uint8(m))] x)) (MOVHreg (ANDWconst [m] x)) && int16(m) >= 0 -> (MOVWZreg (ANDWconst [int64(uint16(m))] x)) +// carry flag generation +// (only constant fold carry of zero) +(Select1 (ADDCconst (MOVDconst [c]) [d])) + && uint64(c+d) >= uint64(c) && c+d == 0 + -> (FlagEQ) +(Select1 (ADDCconst (MOVDconst [c]) [d])) + && uint64(c+d) >= uint64(c) && c+d != 0 + -> (FlagLT) + +// borrow flag generation +// (only constant fold borrow of zero) +(Select1 (SUBC (MOVDconst [c]) (MOVDconst [d]))) + && uint64(d) <= uint64(c) && c-d == 0 + -> (FlagGT) +(Select1 (SUBC (MOVDconst [c]) (MOVDconst [d]))) + && uint64(d) <= uint64(c) && c-d != 0 + -> (FlagOV) + +// add with carry +(ADDE x y (FlagEQ)) -> (ADDC x y) +(ADDE x y (FlagLT)) -> (ADDC x y) +(ADDC x (MOVDconst [c])) && is16Bit(c) -> (ADDCconst x [c]) +(Select0 (ADDCconst (MOVDconst [c]) [d])) -> (MOVDconst [c+d]) + +// subtract with borrow +(SUBE x y (FlagGT)) -> (SUBC x y) +(SUBE x y (FlagOV)) -> (SUBC x y) +(Select0 (SUBC (MOVDconst [c]) (MOVDconst [d]))) -> (MOVDconst [c-d]) + +// collapse carry chain +(ADDE x y (Select1 (ADDCconst [-1] (Select0 (ADDE (MOVDconst [0]) (MOVDconst [0]) c))))) + -> (ADDE x y c) + +// collapse borrow chain +(SUBE x y (Select1 (SUBC (MOVDconst [0]) (NEG (Select0 (SUBE (MOVDconst [0]) (MOVDconst [0]) c)))))) + -> (SUBE x y c) + // fused multiply-add (FADD (FMUL y z) x) -> (FMADD x y z) (FADDS (FMULS y z) x) -> (FMADDS x y z) diff --git a/src/cmd/compile/internal/ssa/gen/S390XOps.go b/src/cmd/compile/internal/ssa/gen/S390XOps.go index 19cb4be41c..fcc2c732fc 100644 --- a/src/cmd/compile/internal/ssa/gen/S390XOps.go +++ b/src/cmd/compile/internal/ssa/gen/S390XOps.go @@ -127,6 +127,9 @@ func init() { fp = buildReg("F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15") callerSave = gp | fp | buildReg("g") // runtime.setg (and anything calling it) may clobber g + r1 = buildReg("R1") + r2 = buildReg("R2") + r3 = buildReg("R3") ) // Common slices of register masks var ( @@ -150,9 +153,12 @@ func init() { addr = regInfo{inputs: []regMask{sp | sb}, outputs: gponly} addridx = regInfo{inputs: []regMask{sp | sb, ptrsp}, outputs: gponly} - gp2flags = regInfo{inputs: []regMask{gpsp, gpsp}} - gp1flags = regInfo{inputs: []regMask{gpsp}} - gp2flags1 = regInfo{inputs: []regMask{gp, gp}, outputs: gponly} + gp2flags = regInfo{inputs: []regMask{gpsp, gpsp}} + gp1flags = regInfo{inputs: []regMask{gpsp}} + gp2flags1 = regInfo{inputs: []regMask{gp, gp}, outputs: gponly} + gp11flags = regInfo{inputs: []regMask{gp}, outputs: gponly} + gp21flags = regInfo{inputs: []regMask{gp, gp}, outputs: gponly} + gp2flags1flags = regInfo{inputs: []regMask{gp, gp}, outputs: gponly} gpload = regInfo{inputs: []regMask{ptrspsb, 0}, outputs: gponly} gploadidx = regInfo{inputs: []regMask{ptrspsb, ptrsp, 0}, outputs: gponly} @@ -291,6 +297,17 @@ func init() { {name: "XORload", argLength: 3, reg: gpopload, asm: "XOR", aux: "SymOff", resultInArg0: true, clobberFlags: true, faultOnNilArg1: true, symEffect: "Read"}, // arg0 ^ *arg1. arg2=mem {name: "XORWload", argLength: 3, reg: gpopload, asm: "XORW", aux: "SymOff", resultInArg0: true, clobberFlags: true, faultOnNilArg1: true, symEffect: "Read"}, // arg0 ^ *arg1. arg2=mem + // Arithmetic ops with carry/borrow chain. + // + // A carry is represented by a condition code of 2 or 3 (GT or OV). + // A borrow is represented by a condition code of 0 or 1 (EQ or LT). + {name: "ADDC", argLength: 2, reg: gp21flags, asm: "ADDC", typ: "(UInt64,Flags)", commutative: true}, // (arg0 + arg1, carry out) + {name: "ADDCconst", argLength: 1, reg: gp11flags, asm: "ADDC", typ: "(UInt64,Flags)", aux: "Int16"}, // (arg0 + auxint, carry out) + {name: "ADDE", argLength: 3, reg: gp2flags1flags, asm: "ADDE", typ: "(UInt64,Flags)", commutative: true, resultInArg0: true}, // (arg0 + arg1 + arg2 (carry in), carry out) + {name: "SUBC", argLength: 2, reg: gp21flags, asm: "SUBC", typ: "(UInt64,Flags)"}, // (arg0 - arg1, borrow out) + {name: "SUBE", argLength: 3, reg: gp2flags1flags, asm: "SUBE", typ: "(UInt64,Flags)", resultInArg0: true}, // (arg0 - arg1 - arg2 (borrow in), borrow out) + + // Comparisons. {name: "CMP", argLength: 2, reg: gp2flags, asm: "CMP", typ: "Flags"}, // arg0 compare to arg1 {name: "CMPW", argLength: 2, reg: gp2flags, asm: "CMPW", typ: "Flags"}, // arg0 compare to arg1 @@ -377,49 +394,49 @@ func init() { {name: "MOVDaddridx", argLength: 2, reg: addridx, aux: "SymOff", symEffect: "Read"}, // arg0 + arg1 + auxint + aux // auxint+aux == add auxint and the offset of the symbol in aux (if any) to the effective address - {name: "MOVBZload", argLength: 2, reg: gpload, asm: "MOVBZ", aux: "SymOff", typ: "UInt8", clobberFlags: true, faultOnNilArg0: true, symEffect: "Read"}, // load byte from arg0+auxint+aux. arg1=mem. Zero extend. - {name: "MOVBload", argLength: 2, reg: gpload, asm: "MOVB", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, symEffect: "Read"}, // ditto, sign extend to int64 - {name: "MOVHZload", argLength: 2, reg: gpload, asm: "MOVHZ", aux: "SymOff", typ: "UInt16", clobberFlags: true, faultOnNilArg0: true, symEffect: "Read"}, // load 2 bytes from arg0+auxint+aux. arg1=mem. Zero extend. - {name: "MOVHload", argLength: 2, reg: gpload, asm: "MOVH", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, symEffect: "Read"}, // ditto, sign extend to int64 - {name: "MOVWZload", argLength: 2, reg: gpload, asm: "MOVWZ", aux: "SymOff", typ: "UInt32", clobberFlags: true, faultOnNilArg0: true, symEffect: "Read"}, // load 4 bytes from arg0+auxint+aux. arg1=mem. Zero extend. - {name: "MOVWload", argLength: 2, reg: gpload, asm: "MOVW", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, symEffect: "Read"}, // ditto, sign extend to int64 - {name: "MOVDload", argLength: 2, reg: gpload, asm: "MOVD", aux: "SymOff", typ: "UInt64", clobberFlags: true, faultOnNilArg0: true, symEffect: "Read"}, // load 8 bytes from arg0+auxint+aux. arg1=mem + {name: "MOVBZload", argLength: 2, reg: gpload, asm: "MOVBZ", aux: "SymOff", typ: "UInt8", faultOnNilArg0: true, symEffect: "Read"}, // load byte from arg0+auxint+aux. arg1=mem. Zero extend. + {name: "MOVBload", argLength: 2, reg: gpload, asm: "MOVB", aux: "SymOff", faultOnNilArg0: true, symEffect: "Read"}, // ditto, sign extend to int64 + {name: "MOVHZload", argLength: 2, reg: gpload, asm: "MOVHZ", aux: "SymOff", typ: "UInt16", faultOnNilArg0: true, symEffect: "Read"}, // load 2 bytes from arg0+auxint+aux. arg1=mem. Zero extend. + {name: "MOVHload", argLength: 2, reg: gpload, asm: "MOVH", aux: "SymOff", faultOnNilArg0: true, symEffect: "Read"}, // ditto, sign extend to int64 + {name: "MOVWZload", argLength: 2, reg: gpload, asm: "MOVWZ", aux: "SymOff", typ: "UInt32", faultOnNilArg0: true, symEffect: "Read"}, // load 4 bytes from arg0+auxint+aux. arg1=mem. Zero extend. + {name: "MOVWload", argLength: 2, reg: gpload, asm: "MOVW", aux: "SymOff", faultOnNilArg0: true, symEffect: "Read"}, // ditto, sign extend to int64 + {name: "MOVDload", argLength: 2, reg: gpload, asm: "MOVD", aux: "SymOff", typ: "UInt64", faultOnNilArg0: true, symEffect: "Read"}, // load 8 bytes from arg0+auxint+aux. arg1=mem {name: "MOVWBR", argLength: 1, reg: gp11, asm: "MOVWBR"}, // arg0 swap bytes {name: "MOVDBR", argLength: 1, reg: gp11, asm: "MOVDBR"}, // arg0 swap bytes - {name: "MOVHBRload", argLength: 2, reg: gpload, asm: "MOVHBR", aux: "SymOff", typ: "UInt16", clobberFlags: true, faultOnNilArg0: true, symEffect: "Read"}, // load 2 bytes from arg0+auxint+aux. arg1=mem. Reverse bytes. - {name: "MOVWBRload", argLength: 2, reg: gpload, asm: "MOVWBR", aux: "SymOff", typ: "UInt32", clobberFlags: true, faultOnNilArg0: true, symEffect: "Read"}, // load 4 bytes from arg0+auxint+aux. arg1=mem. Reverse bytes. - {name: "MOVDBRload", argLength: 2, reg: gpload, asm: "MOVDBR", aux: "SymOff", typ: "UInt64", clobberFlags: true, faultOnNilArg0: true, symEffect: "Read"}, // load 8 bytes from arg0+auxint+aux. arg1=mem. Reverse bytes. + {name: "MOVHBRload", argLength: 2, reg: gpload, asm: "MOVHBR", aux: "SymOff", typ: "UInt16", faultOnNilArg0: true, symEffect: "Read"}, // load 2 bytes from arg0+auxint+aux. arg1=mem. Reverse bytes. + {name: "MOVWBRload", argLength: 2, reg: gpload, asm: "MOVWBR", aux: "SymOff", typ: "UInt32", faultOnNilArg0: true, symEffect: "Read"}, // load 4 bytes from arg0+auxint+aux. arg1=mem. Reverse bytes. + {name: "MOVDBRload", argLength: 2, reg: gpload, asm: "MOVDBR", aux: "SymOff", typ: "UInt64", faultOnNilArg0: true, symEffect: "Read"}, // load 8 bytes from arg0+auxint+aux. arg1=mem. Reverse bytes. - {name: "MOVBstore", argLength: 3, reg: gpstore, asm: "MOVB", aux: "SymOff", typ: "Mem", clobberFlags: true, faultOnNilArg0: true, symEffect: "Write"}, // store byte in arg1 to arg0+auxint+aux. arg2=mem - {name: "MOVHstore", argLength: 3, reg: gpstore, asm: "MOVH", aux: "SymOff", typ: "Mem", clobberFlags: true, faultOnNilArg0: true, symEffect: "Write"}, // store 2 bytes in arg1 to arg0+auxint+aux. arg2=mem - {name: "MOVWstore", argLength: 3, reg: gpstore, asm: "MOVW", aux: "SymOff", typ: "Mem", clobberFlags: true, faultOnNilArg0: true, symEffect: "Write"}, // store 4 bytes in arg1 to arg0+auxint+aux. arg2=mem - {name: "MOVDstore", argLength: 3, reg: gpstore, asm: "MOVD", aux: "SymOff", typ: "Mem", clobberFlags: true, faultOnNilArg0: true, symEffect: "Write"}, // store 8 bytes in arg1 to arg0+auxint+aux. arg2=mem - {name: "MOVHBRstore", argLength: 3, reg: gpstorebr, asm: "MOVHBR", aux: "SymOff", typ: "Mem", clobberFlags: true, faultOnNilArg0: true, symEffect: "Write"}, // store 2 bytes in arg1 to arg0+auxint+aux. arg2=mem. Reverse bytes. - {name: "MOVWBRstore", argLength: 3, reg: gpstorebr, asm: "MOVWBR", aux: "SymOff", typ: "Mem", clobberFlags: true, faultOnNilArg0: true, symEffect: "Write"}, // store 4 bytes in arg1 to arg0+auxint+aux. arg2=mem. Reverse bytes. - {name: "MOVDBRstore", argLength: 3, reg: gpstorebr, asm: "MOVDBR", aux: "SymOff", typ: "Mem", clobberFlags: true, faultOnNilArg0: true, symEffect: "Write"}, // store 8 bytes in arg1 to arg0+auxint+aux. arg2=mem. Reverse bytes. + {name: "MOVBstore", argLength: 3, reg: gpstore, asm: "MOVB", aux: "SymOff", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store byte in arg1 to arg0+auxint+aux. arg2=mem + {name: "MOVHstore", argLength: 3, reg: gpstore, asm: "MOVH", aux: "SymOff", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 2 bytes in arg1 to arg0+auxint+aux. arg2=mem + {name: "MOVWstore", argLength: 3, reg: gpstore, asm: "MOVW", aux: "SymOff", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 4 bytes in arg1 to arg0+auxint+aux. arg2=mem + {name: "MOVDstore", argLength: 3, reg: gpstore, asm: "MOVD", aux: "SymOff", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 8 bytes in arg1 to arg0+auxint+aux. arg2=mem + {name: "MOVHBRstore", argLength: 3, reg: gpstorebr, asm: "MOVHBR", aux: "SymOff", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 2 bytes in arg1 to arg0+auxint+aux. arg2=mem. Reverse bytes. + {name: "MOVWBRstore", argLength: 3, reg: gpstorebr, asm: "MOVWBR", aux: "SymOff", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 4 bytes in arg1 to arg0+auxint+aux. arg2=mem. Reverse bytes. + {name: "MOVDBRstore", argLength: 3, reg: gpstorebr, asm: "MOVDBR", aux: "SymOff", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 8 bytes in arg1 to arg0+auxint+aux. arg2=mem. Reverse bytes. {name: "MVC", argLength: 3, reg: gpmvc, asm: "MVC", aux: "SymValAndOff", typ: "Mem", clobberFlags: true, faultOnNilArg0: true, faultOnNilArg1: true, symEffect: "None"}, // arg0=destptr, arg1=srcptr, arg2=mem, auxint=size,off // indexed loads/stores - {name: "MOVBZloadidx", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVBZ", aux: "SymOff", typ: "UInt8", clobberFlags: true, symEffect: "Read"}, // load a byte from arg0+arg1+auxint+aux. arg2=mem. Zero extend. - {name: "MOVBloadidx", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVB", aux: "SymOff", typ: "Int8", clobberFlags: true, symEffect: "Read"}, // load a byte from arg0+arg1+auxint+aux. arg2=mem. Sign extend. - {name: "MOVHZloadidx", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVHZ", aux: "SymOff", typ: "UInt16", clobberFlags: true, symEffect: "Read"}, // load 2 bytes from arg0+arg1+auxint+aux. arg2=mem. Zero extend. - {name: "MOVHloadidx", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVH", aux: "SymOff", typ: "Int16", clobberFlags: true, symEffect: "Read"}, // load 2 bytes from arg0+arg1+auxint+aux. arg2=mem. Sign extend. - {name: "MOVWZloadidx", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVWZ", aux: "SymOff", typ: "UInt32", clobberFlags: true, symEffect: "Read"}, // load 4 bytes from arg0+arg1+auxint+aux. arg2=mem. Zero extend. - {name: "MOVWloadidx", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVW", aux: "SymOff", typ: "Int32", clobberFlags: true, symEffect: "Read"}, // load 4 bytes from arg0+arg1+auxint+aux. arg2=mem. Sign extend. - {name: "MOVDloadidx", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVD", aux: "SymOff", typ: "UInt64", clobberFlags: true, symEffect: "Read"}, // load 8 bytes from arg0+arg1+auxint+aux. arg2=mem - {name: "MOVHBRloadidx", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVHBR", aux: "SymOff", typ: "Int16", clobberFlags: true, symEffect: "Read"}, // load 2 bytes from arg0+arg1+auxint+aux. arg2=mem. Reverse bytes. - {name: "MOVWBRloadidx", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVWBR", aux: "SymOff", typ: "Int32", clobberFlags: true, symEffect: "Read"}, // load 4 bytes from arg0+arg1+auxint+aux. arg2=mem. Reverse bytes. - {name: "MOVDBRloadidx", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVDBR", aux: "SymOff", typ: "Int64", clobberFlags: true, symEffect: "Read"}, // load 8 bytes from arg0+arg1+auxint+aux. arg2=mem. Reverse bytes. - {name: "MOVBstoreidx", argLength: 4, reg: gpstoreidx, commutative: true, asm: "MOVB", aux: "SymOff", clobberFlags: true, symEffect: "Write"}, // store byte in arg2 to arg0+arg1+auxint+aux. arg3=mem - {name: "MOVHstoreidx", argLength: 4, reg: gpstoreidx, commutative: true, asm: "MOVH", aux: "SymOff", clobberFlags: true, symEffect: "Write"}, // store 2 bytes in arg2 to arg0+arg1+auxint+aux. arg3=mem - {name: "MOVWstoreidx", argLength: 4, reg: gpstoreidx, commutative: true, asm: "MOVW", aux: "SymOff", clobberFlags: true, symEffect: "Write"}, // store 4 bytes in arg2 to arg0+arg1+auxint+aux. arg3=mem - {name: "MOVDstoreidx", argLength: 4, reg: gpstoreidx, commutative: true, asm: "MOVD", aux: "SymOff", clobberFlags: true, symEffect: "Write"}, // store 8 bytes in arg2 to arg0+arg1+auxint+aux. arg3=mem - {name: "MOVHBRstoreidx", argLength: 4, reg: gpstoreidx, commutative: true, asm: "MOVHBR", aux: "SymOff", clobberFlags: true, symEffect: "Write"}, // store 2 bytes in arg2 to arg0+arg1+auxint+aux. arg3=mem. Reverse bytes. - {name: "MOVWBRstoreidx", argLength: 4, reg: gpstoreidx, commutative: true, asm: "MOVWBR", aux: "SymOff", clobberFlags: true, symEffect: "Write"}, // store 4 bytes in arg2 to arg0+arg1+auxint+aux. arg3=mem. Reverse bytes. - {name: "MOVDBRstoreidx", argLength: 4, reg: gpstoreidx, commutative: true, asm: "MOVDBR", aux: "SymOff", clobberFlags: true, symEffect: "Write"}, // store 8 bytes in arg2 to arg0+arg1+auxint+aux. arg3=mem. Reverse bytes. + {name: "MOVBZloadidx", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVBZ", aux: "SymOff", typ: "UInt8", symEffect: "Read"}, // load a byte from arg0+arg1+auxint+aux. arg2=mem. Zero extend. + {name: "MOVBloadidx", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVB", aux: "SymOff", typ: "Int8", symEffect: "Read"}, // load a byte from arg0+arg1+auxint+aux. arg2=mem. Sign extend. + {name: "MOVHZloadidx", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVHZ", aux: "SymOff", typ: "UInt16", symEffect: "Read"}, // load 2 bytes from arg0+arg1+auxint+aux. arg2=mem. Zero extend. + {name: "MOVHloadidx", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVH", aux: "SymOff", typ: "Int16", symEffect: "Read"}, // load 2 bytes from arg0+arg1+auxint+aux. arg2=mem. Sign extend. + {name: "MOVWZloadidx", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVWZ", aux: "SymOff", typ: "UInt32", symEffect: "Read"}, // load 4 bytes from arg0+arg1+auxint+aux. arg2=mem. Zero extend. + {name: "MOVWloadidx", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVW", aux: "SymOff", typ: "Int32", symEffect: "Read"}, // load 4 bytes from arg0+arg1+auxint+aux. arg2=mem. Sign extend. + {name: "MOVDloadidx", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVD", aux: "SymOff", typ: "UInt64", symEffect: "Read"}, // load 8 bytes from arg0+arg1+auxint+aux. arg2=mem + {name: "MOVHBRloadidx", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVHBR", aux: "SymOff", typ: "Int16", symEffect: "Read"}, // load 2 bytes from arg0+arg1+auxint+aux. arg2=mem. Reverse bytes. + {name: "MOVWBRloadidx", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVWBR", aux: "SymOff", typ: "Int32", symEffect: "Read"}, // load 4 bytes from arg0+arg1+auxint+aux. arg2=mem. Reverse bytes. + {name: "MOVDBRloadidx", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVDBR", aux: "SymOff", typ: "Int64", symEffect: "Read"}, // load 8 bytes from arg0+arg1+auxint+aux. arg2=mem. Reverse bytes. + {name: "MOVBstoreidx", argLength: 4, reg: gpstoreidx, commutative: true, asm: "MOVB", aux: "SymOff", symEffect: "Write"}, // store byte in arg2 to arg0+arg1+auxint+aux. arg3=mem + {name: "MOVHstoreidx", argLength: 4, reg: gpstoreidx, commutative: true, asm: "MOVH", aux: "SymOff", symEffect: "Write"}, // store 2 bytes in arg2 to arg0+arg1+auxint+aux. arg3=mem + {name: "MOVWstoreidx", argLength: 4, reg: gpstoreidx, commutative: true, asm: "MOVW", aux: "SymOff", symEffect: "Write"}, // store 4 bytes in arg2 to arg0+arg1+auxint+aux. arg3=mem + {name: "MOVDstoreidx", argLength: 4, reg: gpstoreidx, commutative: true, asm: "MOVD", aux: "SymOff", symEffect: "Write"}, // store 8 bytes in arg2 to arg0+arg1+auxint+aux. arg3=mem + {name: "MOVHBRstoreidx", argLength: 4, reg: gpstoreidx, commutative: true, asm: "MOVHBR", aux: "SymOff", symEffect: "Write"}, // store 2 bytes in arg2 to arg0+arg1+auxint+aux. arg3=mem. Reverse bytes. + {name: "MOVWBRstoreidx", argLength: 4, reg: gpstoreidx, commutative: true, asm: "MOVWBR", aux: "SymOff", symEffect: "Write"}, // store 4 bytes in arg2 to arg0+arg1+auxint+aux. arg3=mem. Reverse bytes. + {name: "MOVDBRstoreidx", argLength: 4, reg: gpstoreidx, commutative: true, asm: "MOVDBR", aux: "SymOff", symEffect: "Write"}, // store 8 bytes in arg2 to arg0+arg1+auxint+aux. arg3=mem. Reverse bytes. // For storeconst ops, the AuxInt field encodes both // the value to store and an address offset of the store. @@ -463,20 +480,23 @@ func init() { // but clobbers R14 (LR) because it's a call. {name: "LoweredWB", argLength: 3, reg: regInfo{inputs: []regMask{buildReg("R2"), buildReg("R3")}, clobbers: (callerSave &^ gpg) | buildReg("R14")}, clobberFlags: true, aux: "Sym", symEffect: "None"}, - // Constant flag values. For any comparison, there are 5 possible - // outcomes: the three from the signed total order (<,==,>) and the - // three from the unsigned total order. The == cases overlap. - // Note: there's a sixth "unordered" outcome for floating-point - // comparisons, but we don't use such a beast yet. - // These ops are for temporary use by rewrite rules. They - // cannot appear in the generated assembly. - {name: "FlagEQ"}, // equal - {name: "FlagLT"}, // < - {name: "FlagGT"}, // > + // There are three of these functions so that they can have three different register inputs. + // When we check 0 <= c <= cap (A), then 0 <= b <= c (B), then 0 <= a <= b (C), we want the + // default registers to match so we don't need to copy registers around unnecessarily. + {name: "LoweredPanicBoundsA", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{r2, r3}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in generic.go). + {name: "LoweredPanicBoundsB", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{r1, r2}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in generic.go). + {name: "LoweredPanicBoundsC", argLength: 3, aux: "Int64", reg: regInfo{inputs: []regMask{r0, r1}}, typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. AuxInt contains report code (see PanicBounds in generic.go). + + // Constant conditon code values. The condition code can be 0, 1, 2 or 3. + {name: "FlagEQ"}, // CC=0 (equal) + {name: "FlagLT"}, // CC=1 (less than) + {name: "FlagGT"}, // CC=2 (greater than) + {name: "FlagOV"}, // CC=3 (overflow) // Atomic loads. These are just normal loads but return tuples // so they can be properly ordered with other loads. // load from arg0+auxint+aux. arg1=mem. + {name: "MOVBZatomicload", argLength: 2, reg: gpload, asm: "MOVBZ", aux: "SymOff", faultOnNilArg0: true, symEffect: "Read"}, {name: "MOVWZatomicload", argLength: 2, reg: gpload, asm: "MOVWZ", aux: "SymOff", faultOnNilArg0: true, symEffect: "Read"}, {name: "MOVDatomicload", argLength: 2, reg: gpload, asm: "MOVD", aux: "SymOff", faultOnNilArg0: true, symEffect: "Read"}, diff --git a/src/cmd/compile/internal/ssa/gen/Wasm.rules b/src/cmd/compile/internal/ssa/gen/Wasm.rules index 64198839d0..965e4a8bb6 100644 --- a/src/cmd/compile/internal/ssa/gen/Wasm.rules +++ b/src/cmd/compile/internal/ssa/gen/Wasm.rules @@ -56,12 +56,15 @@ (ZeroExt32to64 x:(I64Load32U _ _)) -> x (ZeroExt16to(64|32) x:(I64Load16U _ _)) -> x (ZeroExt8to(64|32|16) x:(I64Load8U _ _)) -> x +(SignExt32to64 x) && objabi.GOWASM.SignExt -> (I64Extend32S x) +(SignExt8to(64|32|16) x) && objabi.GOWASM.SignExt -> (I64Extend8S x) +(SignExt16to(64|32) x) && objabi.GOWASM.SignExt -> (I64Extend16S x) (SignExt32to64 x) -> (I64ShrS (I64Shl x (I64Const [32])) (I64Const [32])) (SignExt16to(64|32) x) -> (I64ShrS (I64Shl x (I64Const [48])) (I64Const [48])) (SignExt8to(64|32|16) x) -> (I64ShrS (I64Shl x (I64Const [56])) (I64Const [56])) -(ZeroExt32to64 x) -> (I64ShrU (I64Shl x (I64Const [32])) (I64Const [32])) -(ZeroExt16to(64|32) x) -> (I64ShrU (I64Shl x (I64Const [48])) (I64Const [48])) -(ZeroExt8to(64|32|16) x) -> (I64ShrU (I64Shl x (I64Const [56])) (I64Const [56])) +(ZeroExt32to64 x) -> (I64And x (I64Const [0xffffffff])) +(ZeroExt16to(64|32) x) -> (I64And x (I64Const [0xffff])) +(ZeroExt8to(64|32|16) x) -> (I64And x (I64Const [0xff])) (Slicemask x) -> (I64ShrS (I64Sub (I64Const [0]) x) (I64Const [63])) @@ -72,23 +75,23 @@ (Trunc16to8 x) -> x // Lowering float <-> int -(Cvt32to32F x) -> (LoweredRound32F (F64ConvertSI64 (SignExt32to64 x))) -(Cvt32to64F x) -> (F64ConvertSI64 (SignExt32to64 x)) -(Cvt64to32F x) -> (LoweredRound32F (F64ConvertSI64 x)) -(Cvt64to64F x) -> (F64ConvertSI64 x) -(Cvt32Uto32F x) -> (LoweredRound32F (F64ConvertUI64 (ZeroExt32to64 x))) -(Cvt32Uto64F x) -> (F64ConvertUI64 (ZeroExt32to64 x)) -(Cvt64Uto32F x) -> (LoweredRound32F (F64ConvertUI64 x)) -(Cvt64Uto64F x) -> (F64ConvertUI64 x) +(Cvt32to32F x) -> (LoweredRound32F (F64ConvertI64S (SignExt32to64 x))) +(Cvt32to64F x) -> (F64ConvertI64S (SignExt32to64 x)) +(Cvt64to32F x) -> (LoweredRound32F (F64ConvertI64S x)) +(Cvt64to64F x) -> (F64ConvertI64S x) +(Cvt32Uto32F x) -> (LoweredRound32F (F64ConvertI64U (ZeroExt32to64 x))) +(Cvt32Uto64F x) -> (F64ConvertI64U (ZeroExt32to64 x)) +(Cvt64Uto32F x) -> (LoweredRound32F (F64ConvertI64U x)) +(Cvt64Uto64F x) -> (F64ConvertI64U x) -(Cvt32Fto32 x) -> (I64TruncSF64 x) -(Cvt32Fto64 x) -> (I64TruncSF64 x) -(Cvt64Fto32 x) -> (I64TruncSF64 x) -(Cvt64Fto64 x) -> (I64TruncSF64 x) -(Cvt32Fto32U x) -> (I64TruncUF64 x) -(Cvt32Fto64U x) -> (I64TruncUF64 x) -(Cvt64Fto32U x) -> (I64TruncUF64 x) -(Cvt64Fto64U x) -> (I64TruncUF64 x) +(Cvt32Fto32 x) -> (I64TruncSatF64S x) +(Cvt32Fto64 x) -> (I64TruncSatF64S x) +(Cvt64Fto32 x) -> (I64TruncSatF64S x) +(Cvt64Fto64 x) -> (I64TruncSatF64S x) +(Cvt32Fto32U x) -> (I64TruncSatF64U x) +(Cvt32Fto64U x) -> (I64TruncSatF64U x) +(Cvt64Fto32U x) -> (I64TruncSatF64U x) +(Cvt64Fto64U x) -> (I64TruncSatF64U x) (Cvt32Fto64F x) -> x (Cvt64Fto32F x) -> (LoweredRound32F x) @@ -162,6 +165,11 @@ (Rsh8x16 x y) -> (Rsh64x64 (SignExt8to64 x) (ZeroExt16to64 y)) (Rsh8x8 x y) -> (Rsh64x64 (SignExt8to64 x) (ZeroExt8to64 y)) +// Lowering rotates +(RotateLeft8 x (I64Const [c])) -> (Or8 (Lsh8x64 x (I64Const [c&7])) (Rsh8Ux64 x (I64Const [-c&7]))) +(RotateLeft16 x (I64Const [c])) -> (Or16 (Lsh16x64 x (I64Const [c&15])) (Rsh16Ux64 x (I64Const [-c&15]))) +(RotateLeft32 x (I64Const [c])) -> (Or32 (Lsh32x64 x (I64Const [c&31])) (Rsh32Ux64 x (I64Const [-c&31]))) + // Lowering comparisons (Less64 x y) -> (I64LtS x y) (Less32 x y) -> (I64LtS (SignExt32to64 x) (SignExt32to64 y)) @@ -357,6 +365,31 @@ // Write barrier. (WB {fn} destptr srcptr mem) -> (LoweredWB {fn} destptr srcptr mem) +// --- Intrinsics --- +(Sqrt x) -> (F64Sqrt x) +(Trunc x) -> (F64Trunc x) +(Ceil x) -> (F64Ceil x) +(Floor x) -> (F64Floor x) +(RoundToEven x) -> (F64Nearest x) +(Abs x) -> (F64Abs x) +(Copysign x y) -> (F64Copysign x y) + +(Ctz64 x) -> (I64Ctz x) +(Ctz32 x) -> (I64Ctz (I64Or x (I64Const [0x100000000]))) +(Ctz16 x) -> (I64Ctz (I64Or x (I64Const [0x10000]))) +(Ctz8 x) -> (I64Ctz (I64Or x (I64Const [0x100]))) + +(Ctz(64|32|16|8)NonZero x) -> (I64Ctz x) + +(BitLen64 x) -> (I64Sub (I64Const [64]) (I64Clz x)) + +(RotateLeft64 x y) -> (I64Rotl x y) + +(PopCount64 x) -> (I64Popcnt x) +(PopCount32 x) -> (I64Popcnt (ZeroExt32to64 x)) +(PopCount16 x) -> (I64Popcnt (ZeroExt16to64 x)) +(PopCount8 x) -> (I64Popcnt (ZeroExt8to64 x)) + // --- Optimizations --- (I64Add (I64Const [x]) (I64Const [y])) -> (I64Const [x + y]) (I64Mul (I64Const [x]) (I64Const [y])) -> (I64Const [x * y]) diff --git a/src/cmd/compile/internal/ssa/gen/WasmOps.go b/src/cmd/compile/internal/ssa/gen/WasmOps.go index e0f2f92a3f..de035c985a 100644 --- a/src/cmd/compile/internal/ssa/gen/WasmOps.go +++ b/src/cmd/compile/internal/ssa/gen/WasmOps.go @@ -187,10 +187,27 @@ func init() { {name: "F64Mul", asm: "F64Mul", argLength: 2, reg: fp21, typ: "Float64"}, // arg0 * arg1 {name: "F64Div", asm: "F64Div", argLength: 2, reg: fp21, typ: "Float64"}, // arg0 / arg1 - {name: "I64TruncSF64", asm: "I64TruncSF64", argLength: 1, reg: regInfo{inputs: []regMask{fp}, outputs: []regMask{gp}}, typ: "Int64"}, // truncates the float arg0 to a signed integer - {name: "I64TruncUF64", asm: "I64TruncUF64", argLength: 1, reg: regInfo{inputs: []regMask{fp}, outputs: []regMask{gp}}, typ: "Int64"}, // truncates the float arg0 to an unsigned integer - {name: "F64ConvertSI64", asm: "F64ConvertSI64", argLength: 1, reg: regInfo{inputs: []regMask{gp}, outputs: []regMask{fp}}, typ: "Float64"}, // converts the signed integer arg0 to a float - {name: "F64ConvertUI64", asm: "F64ConvertUI64", argLength: 1, reg: regInfo{inputs: []regMask{gp}, outputs: []regMask{fp}}, typ: "Float64"}, // converts the unsigned integer arg0 to a float + {name: "I64TruncSatF64S", asm: "I64TruncSatF64S", argLength: 1, reg: regInfo{inputs: []regMask{fp}, outputs: []regMask{gp}}, typ: "Int64"}, // truncates the float arg0 to a signed integer (saturating) + {name: "I64TruncSatF64U", asm: "I64TruncSatF64U", argLength: 1, reg: regInfo{inputs: []regMask{fp}, outputs: []regMask{gp}}, typ: "Int64"}, // truncates the float arg0 to an unsigned integer (saturating) + {name: "F64ConvertI64S", asm: "F64ConvertI64S", argLength: 1, reg: regInfo{inputs: []regMask{gp}, outputs: []regMask{fp}}, typ: "Float64"}, // converts the signed integer arg0 to a float + {name: "F64ConvertI64U", asm: "F64ConvertI64U", argLength: 1, reg: regInfo{inputs: []regMask{gp}, outputs: []regMask{fp}}, typ: "Float64"}, // converts the unsigned integer arg0 to a float + + {name: "I64Extend8S", asm: "I64Extend8S", argLength: 1, reg: gp11, typ: "Int64"}, // sign-extend arg0 from 8 to 64 bit + {name: "I64Extend16S", asm: "I64Extend16S", argLength: 1, reg: gp11, typ: "Int64"}, // sign-extend arg0 from 16 to 64 bit + {name: "I64Extend32S", asm: "I64Extend32S", argLength: 1, reg: gp11, typ: "Int64"}, // sign-extend arg0 from 32 to 64 bit + + {name: "F64Sqrt", asm: "F64Sqrt", argLength: 1, reg: fp11, typ: "Float64"}, // sqrt(arg0) + {name: "F64Trunc", asm: "F64Trunc", argLength: 1, reg: fp11, typ: "Float64"}, // trunc(arg0) + {name: "F64Ceil", asm: "F64Ceil", argLength: 1, reg: fp11, typ: "Float64"}, // ceil(arg0) + {name: "F64Floor", asm: "F64Floor", argLength: 1, reg: fp11, typ: "Float64"}, // floor(arg0) + {name: "F64Nearest", asm: "F64Nearest", argLength: 1, reg: fp11, typ: "Float64"}, // round(arg0) + {name: "F64Abs", asm: "F64Abs", argLength: 1, reg: fp11, typ: "Float64"}, // abs(arg0) + {name: "F64Copysign", asm: "F64Copysign", argLength: 2, reg: fp21, typ: "Float64"}, // copysign(arg0, arg1) + + {name: "I64Ctz", asm: "I64Ctz", argLength: 1, reg: gp11, typ: "Int64"}, // ctz(arg0) + {name: "I64Clz", asm: "I64Clz", argLength: 1, reg: gp11, typ: "Int64"}, // clz(arg0) + {name: "I64Rotl", asm: "I64Rotl", argLength: 2, reg: gp21, typ: "Int64"}, // rotl(arg0, arg1) + {name: "I64Popcnt", asm: "I64Popcnt", argLength: 1, reg: gp11, typ: "Int64"}, // popcnt(arg0) } archs = append(archs, arch{ diff --git a/src/cmd/compile/internal/ssa/gen/generic.rules b/src/cmd/compile/internal/ssa/gen/generic.rules index 61451891a5..454eb498c6 100644 --- a/src/cmd/compile/internal/ssa/gen/generic.rules +++ b/src/cmd/compile/internal/ssa/gen/generic.rules @@ -146,6 +146,8 @@ (Div64u (Const64 [c]) (Const64 [d])) && d != 0 -> (Const64 [int64(uint64(c)/uint64(d))]) (Div32F (Const32F [c]) (Const32F [d])) -> (Const32F [auxFrom32F(auxTo32F(c) / auxTo32F(d))]) (Div64F (Const64F [c]) (Const64F [d])) -> (Const64F [auxFrom64F(auxTo64F(c) / auxTo64F(d))]) +(Select0 (Div128u (Const64 [0]) lo y)) -> (Div64u lo y) +(Select1 (Div128u (Const64 [0]) lo y)) -> (Mod64u lo y) (Not (ConstBool [c])) -> (ConstBool [1-c]) @@ -332,6 +334,12 @@ (Rsh(64|32|16|8)x64 x (Const64 [0])) -> x (Rsh(64|32|16|8)Ux64 x (Const64 [0])) -> x +// rotates by multiples of register width +(RotateLeft64 x (Const64 [c])) && c%64 == 0 -> x +(RotateLeft32 x (Const32 [c])) && c%32 == 0 -> x +(RotateLeft16 x (Const16 [c])) && c%16 == 0 -> x +(RotateLeft8 x (Const8 [c])) && c%8 == 0 -> x + // zero shifted (Lsh64x(64|32|16|8) (Const64 [0]) _) -> (Const64 [0]) (Rsh64x(64|32|16|8) (Const64 [0]) _) -> (Const64 [0]) @@ -420,6 +428,13 @@ (Less(64|32|16|8) (Const(64|32|16|8) [c]) (Const(64|32|16|8) [d])) -> (ConstBool [b2i(c < d)]) (Leq(64|32|16|8) (Const(64|32|16|8) [c]) (Const(64|32|16|8) [d])) -> (ConstBool [b2i(c <= d)]) +(Geq8 (And8 _ (Const8 [c])) (Const8 [0])) && int8(c) >= 0 -> (ConstBool [1]) +(Geq16 (And16 _ (Const16 [c])) (Const16 [0])) && int16(c) >= 0 -> (ConstBool [1]) +(Geq32 (And32 _ (Const32 [c])) (Const32 [0])) && int32(c) >= 0 -> (ConstBool [1]) +(Geq64 (And64 _ (Const64 [c])) (Const64 [0])) && int64(c) >= 0 -> (ConstBool [1]) + +(Geq64 (Rsh64Ux64 _ (Const64 [c])) (Const64 [0])) && c > 0 -> (ConstBool [1]) + (Greater64U (Const64 [c]) (Const64 [d])) -> (ConstBool [b2i(uint64(c) > uint64(d))]) (Greater32U (Const32 [c]) (Const32 [d])) -> (ConstBool [b2i(uint32(c) > uint32(d))]) (Greater16U (Const16 [c]) (Const16 [d])) -> (ConstBool [b2i(uint16(c) > uint16(d))]) @@ -1145,7 +1160,7 @@ -> (Sub32 x (Mul32 (Div32 x (Const32 [c])) (Const32 [c]))) (Mod64 x (Const64 [c])) && x.Op != OpConst64 && (c > 0 || c == -1<<63) -> (Sub64 x (Mul64 (Div64 x (Const64 [c])) (Const64 [c]))) -(Mod8u x (Const8 [c])) && x.Op != OpConst8 && c > 0 && umagicOK(8 ,c) +(Mod8u x (Const8 [c])) && x.Op != OpConst8 && c > 0 && umagicOK(8, c) -> (Sub8 x (Mul8 (Div8u x (Const8 [c])) (Const8 [c]))) (Mod16u x (Const16 [c])) && x.Op != OpConst16 && c > 0 && umagicOK(16,c) -> (Sub16 x (Mul16 (Div16u x (Const16 [c])) (Const16 [c]))) @@ -1154,6 +1169,567 @@ (Mod64u x (Const64 [c])) && x.Op != OpConst64 && c > 0 && umagicOK(64,c) -> (Sub64 x (Mul64 (Div64u x (Const64 [c])) (Const64 [c]))) +// For architectures without rotates on less than 32-bits, promote these checks to 32-bit. +(Eq8 (Mod8u x (Const8 [c])) (Const8 [0])) && x.Op != OpConst8 && udivisibleOK(8,c) && !hasSmallRotate(config) -> + (Eq32 (Mod32u (ZeroExt8to32 x) (Const32 [c&0xff])) (Const32 [0])) +(Eq16 (Mod16u x (Const16 [c])) (Const16 [0])) && x.Op != OpConst16 && udivisibleOK(16,c) && !hasSmallRotate(config) -> + (Eq32 (Mod32u (ZeroExt16to32 x) (Const32 [c&0xffff])) (Const32 [0])) +(Eq8 (Mod8 x (Const8 [c])) (Const8 [0])) && x.Op != OpConst8 && sdivisibleOK(8,c) && !hasSmallRotate(config) -> + (Eq32 (Mod32 (SignExt8to32 x) (Const32 [c])) (Const32 [0])) +(Eq16 (Mod16 x (Const16 [c])) (Const16 [0])) && x.Op != OpConst16 && sdivisibleOK(16,c) && !hasSmallRotate(config) -> + (Eq32 (Mod32 (SignExt16to32 x) (Const32 [c])) (Const32 [0])) + +// Divisibility checks x%c == 0 convert to multiply and rotate. +// Note, x%c == 0 is rewritten as x == c*(x/c) during the opt pass +// where (x/c) is peformed using multiplication with magic constants. +// To rewrite x%c == 0 requires pattern matching the rewritten expression +// and checking that the division by the same constant wasn't already calculated. +// This check is made by counting uses of the magic constant multiplication. +// Note that if there were an intermediate opt pass, this rule could be applied +// directly on the Div op and magic division rewrites could be delayed to late opt. + +// Unsigned divisibility checks convert to multiply and rotate. +(Eq8 x (Mul8 (Const8 [c]) + (Trunc32to8 + (Rsh32Ux64 + mul:(Mul32 + (Const32 [m]) + (ZeroExt8to32 x)) + (Const64 [s]))) + ) +) + && v.Block.Func.pass.name != "opt" && mul.Uses == 1 + && m == int64(1<<8+umagic(8,c).m) && s == 8+umagic(8,c).s + && x.Op != OpConst8 && udivisibleOK(8,c) + -> (Leq8U + (RotateLeft8 + (Mul8 + (Const8 [int64(int8(udivisible(8,c).m))]) + x) + (Const8 [int64(8-udivisible(8,c).k)]) + ) + (Const8 [int64(int8(udivisible(8,c).max))]) + ) + +(Eq16 x (Mul16 (Const16 [c]) + (Trunc64to16 + (Rsh64Ux64 + mul:(Mul64 + (Const64 [m]) + (ZeroExt16to64 x)) + (Const64 [s]))) + ) +) + && v.Block.Func.pass.name != "opt" && mul.Uses == 1 + && m == int64(1<<16+umagic(16,c).m) && s == 16+umagic(16,c).s + && x.Op != OpConst16 && udivisibleOK(16,c) + -> (Leq16U + (RotateLeft16 + (Mul16 + (Const16 [int64(int16(udivisible(16,c).m))]) + x) + (Const16 [int64(16-udivisible(16,c).k)]) + ) + (Const16 [int64(int16(udivisible(16,c).max))]) + ) + +(Eq16 x (Mul16 (Const16 [c]) + (Trunc32to16 + (Rsh32Ux64 + mul:(Mul32 + (Const32 [m]) + (ZeroExt16to32 x)) + (Const64 [s]))) + ) +) + && v.Block.Func.pass.name != "opt" && mul.Uses == 1 + && m == int64(1<<15+umagic(16,c).m/2) && s == 16+umagic(16,c).s-1 + && x.Op != OpConst16 && udivisibleOK(16,c) + -> (Leq16U + (RotateLeft16 + (Mul16 + (Const16 [int64(int16(udivisible(16,c).m))]) + x) + (Const16 [int64(16-udivisible(16,c).k)]) + ) + (Const16 [int64(int16(udivisible(16,c).max))]) + ) + +(Eq16 x (Mul16 (Const16 [c]) + (Trunc32to16 + (Rsh32Ux64 + mul:(Mul32 + (Const32 [m]) + (Rsh32Ux64 (ZeroExt16to32 x) (Const64 [1]))) + (Const64 [s]))) + ) +) + && v.Block.Func.pass.name != "opt" && mul.Uses == 1 + && m == int64(1<<15+(umagic(16,c).m+1)/2) && s == 16+umagic(16,c).s-2 + && x.Op != OpConst16 && udivisibleOK(16,c) + -> (Leq16U + (RotateLeft16 + (Mul16 + (Const16 [int64(int16(udivisible(16,c).m))]) + x) + (Const16 [int64(16-udivisible(16,c).k)]) + ) + (Const16 [int64(int16(udivisible(16,c).max))]) + ) + +(Eq16 x (Mul16 (Const16 [c]) + (Trunc32to16 + (Rsh32Ux64 + (Avg32u + (Lsh32x64 (ZeroExt16to32 x) (Const64 [16])) + mul:(Mul32 + (Const32 [m]) + (ZeroExt16to32 x))) + (Const64 [s]))) + ) +) + && v.Block.Func.pass.name != "opt" && mul.Uses == 1 + && m == int64(umagic(16,c).m) && s == 16+umagic(16,c).s-1 + && x.Op != OpConst16 && udivisibleOK(16,c) + -> (Leq16U + (RotateLeft16 + (Mul16 + (Const16 [int64(int16(udivisible(16,c).m))]) + x) + (Const16 [int64(16-udivisible(16,c).k)]) + ) + (Const16 [int64(int16(udivisible(16,c).max))]) + ) + +(Eq32 x (Mul32 (Const32 [c]) + (Rsh32Ux64 + mul:(Hmul32u + (Const32 [m]) + x) + (Const64 [s])) + ) +) + && v.Block.Func.pass.name != "opt" && mul.Uses == 1 + && m == int64(int32(1<<31+umagic(32,c).m/2)) && s == umagic(32,c).s-1 + && x.Op != OpConst32 && udivisibleOK(32,c) + -> (Leq32U + (RotateLeft32 + (Mul32 + (Const32 [int64(int32(udivisible(32,c).m))]) + x) + (Const32 [int64(32-udivisible(32,c).k)]) + ) + (Const32 [int64(int32(udivisible(32,c).max))]) + ) + +(Eq32 x (Mul32 (Const32 [c]) + (Rsh32Ux64 + mul:(Hmul32u + (Const32 [m]) + (Rsh32Ux64 x (Const64 [1]))) + (Const64 [s])) + ) +) + && v.Block.Func.pass.name != "opt" && mul.Uses == 1 + && m == int64(int32(1<<31+(umagic(32,c).m+1)/2)) && s == umagic(32,c).s-2 + && x.Op != OpConst32 && udivisibleOK(32,c) + -> (Leq32U + (RotateLeft32 + (Mul32 + (Const32 [int64(int32(udivisible(32,c).m))]) + x) + (Const32 [int64(32-udivisible(32,c).k)]) + ) + (Const32 [int64(int32(udivisible(32,c).max))]) + ) + +(Eq32 x (Mul32 (Const32 [c]) + (Rsh32Ux64 + (Avg32u + x + mul:(Hmul32u + (Const32 [m]) + x)) + (Const64 [s])) + ) +) + && v.Block.Func.pass.name != "opt" && mul.Uses == 1 + && m == int64(int32(umagic(32,c).m)) && s == umagic(32,c).s-1 + && x.Op != OpConst32 && udivisibleOK(32,c) + -> (Leq32U + (RotateLeft32 + (Mul32 + (Const32 [int64(int32(udivisible(32,c).m))]) + x) + (Const32 [int64(32-udivisible(32,c).k)]) + ) + (Const32 [int64(int32(udivisible(32,c).max))]) + ) + +(Eq32 x (Mul32 (Const32 [c]) + (Trunc64to32 + (Rsh64Ux64 + mul:(Mul64 + (Const64 [m]) + (ZeroExt32to64 x)) + (Const64 [s]))) + ) +) + && v.Block.Func.pass.name != "opt" && mul.Uses == 1 + && m == int64(1<<31+umagic(32,c).m/2) && s == 32+umagic(32,c).s-1 + && x.Op != OpConst32 && udivisibleOK(32,c) + -> (Leq32U + (RotateLeft32 + (Mul32 + (Const32 [int64(int32(udivisible(32,c).m))]) + x) + (Const32 [int64(32-udivisible(32,c).k)]) + ) + (Const32 [int64(int32(udivisible(32,c).max))]) + ) + +(Eq32 x (Mul32 (Const32 [c]) + (Trunc64to32 + (Rsh64Ux64 + mul:(Mul64 + (Const64 [m]) + (Rsh64Ux64 (ZeroExt32to64 x) (Const64 [1]))) + (Const64 [s]))) + ) +) + && v.Block.Func.pass.name != "opt" && mul.Uses == 1 + && m == int64(1<<31+(umagic(32,c).m+1)/2) && s == 32+umagic(32,c).s-2 + && x.Op != OpConst32 && udivisibleOK(32,c) + -> (Leq32U + (RotateLeft32 + (Mul32 + (Const32 [int64(int32(udivisible(32,c).m))]) + x) + (Const32 [int64(32-udivisible(32,c).k)]) + ) + (Const32 [int64(int32(udivisible(32,c).max))]) + ) + +(Eq32 x (Mul32 (Const32 [c]) + (Trunc64to32 + (Rsh64Ux64 + (Avg64u + (Lsh64x64 (ZeroExt32to64 x) (Const64 [32])) + mul:(Mul64 + (Const64 [m]) + (ZeroExt32to64 x))) + (Const64 [s]))) + ) +) + && v.Block.Func.pass.name != "opt" && mul.Uses == 1 + && m == int64(umagic(32,c).m) && s == 32+umagic(32,c).s-1 + && x.Op != OpConst32 && udivisibleOK(32,c) + -> (Leq32U + (RotateLeft32 + (Mul32 + (Const32 [int64(int32(udivisible(32,c).m))]) + x) + (Const32 [int64(32-udivisible(32,c).k)]) + ) + (Const32 [int64(int32(udivisible(32,c).max))]) + ) + +(Eq64 x (Mul64 (Const64 [c]) + (Rsh64Ux64 + mul:(Hmul64u + (Const64 [m]) + x) + (Const64 [s])) + ) +) && v.Block.Func.pass.name != "opt" && mul.Uses == 1 + && m == int64(1<<63+umagic(64,c).m/2) && s == umagic(64,c).s-1 + && x.Op != OpConst64 && udivisibleOK(64,c) + -> (Leq64U + (RotateLeft64 + (Mul64 + (Const64 [int64(udivisible(64,c).m)]) + x) + (Const64 [int64(64-udivisible(64,c).k)]) + ) + (Const64 [int64(udivisible(64,c).max)]) + ) +(Eq64 x (Mul64 (Const64 [c]) + (Rsh64Ux64 + mul:(Hmul64u + (Const64 [m]) + (Rsh64Ux64 x (Const64 [1]))) + (Const64 [s])) + ) +) && v.Block.Func.pass.name != "opt" && mul.Uses == 1 + && m == int64(1<<63+(umagic(64,c).m+1)/2) && s == umagic(64,c).s-2 + && x.Op != OpConst64 && udivisibleOK(64,c) + -> (Leq64U + (RotateLeft64 + (Mul64 + (Const64 [int64(udivisible(64,c).m)]) + x) + (Const64 [int64(64-udivisible(64,c).k)]) + ) + (Const64 [int64(udivisible(64,c).max)]) + ) +(Eq64 x (Mul64 (Const64 [c]) + (Rsh64Ux64 + (Avg64u + x + mul:(Hmul64u + (Const64 [m]) + x)) + (Const64 [s])) + ) +) && v.Block.Func.pass.name != "opt" && mul.Uses == 1 + && m == int64(umagic(64,c).m) && s == umagic(64,c).s-1 + && x.Op != OpConst64 && udivisibleOK(64,c) + -> (Leq64U + (RotateLeft64 + (Mul64 + (Const64 [int64(udivisible(64,c).m)]) + x) + (Const64 [int64(64-udivisible(64,c).k)]) + ) + (Const64 [int64(udivisible(64,c).max)]) + ) + +// Signed divisibility checks convert to multiply, add and rotate. +(Eq8 x (Mul8 (Const8 [c]) + (Sub8 + (Rsh32x64 + mul:(Mul32 + (Const32 [m]) + (SignExt8to32 x)) + (Const64 [s])) + (Rsh32x64 + (SignExt8to32 x) + (Const64 [31]))) + ) +) + && v.Block.Func.pass.name != "opt" && mul.Uses == 1 + && m == int64(smagic(8,c).m) && s == 8+smagic(8,c).s + && x.Op != OpConst8 && sdivisibleOK(8,c) + -> (Leq8U + (RotateLeft8 + (Add8 + (Mul8 + (Const8 [int64(int8(sdivisible(8,c).m))]) + x) + (Const8 [int64(int8(sdivisible(8,c).a))]) + ) + (Const8 [int64(8-sdivisible(8,c).k)]) + ) + (Const8 [int64(int8(sdivisible(8,c).max))]) + ) + +(Eq16 x (Mul16 (Const16 [c]) + (Sub16 + (Rsh32x64 + mul:(Mul32 + (Const32 [m]) + (SignExt16to32 x)) + (Const64 [s])) + (Rsh32x64 + (SignExt16to32 x) + (Const64 [31]))) + ) +) + && v.Block.Func.pass.name != "opt" && mul.Uses == 1 + && m == int64(smagic(16,c).m) && s == 16+smagic(16,c).s + && x.Op != OpConst16 && sdivisibleOK(16,c) + -> (Leq16U + (RotateLeft16 + (Add16 + (Mul16 + (Const16 [int64(int16(sdivisible(16,c).m))]) + x) + (Const16 [int64(int16(sdivisible(16,c).a))]) + ) + (Const16 [int64(16-sdivisible(16,c).k)]) + ) + (Const16 [int64(int16(sdivisible(16,c).max))]) + ) + +(Eq32 x (Mul32 (Const32 [c]) + (Sub32 + (Rsh64x64 + mul:(Mul64 + (Const64 [m]) + (SignExt32to64 x)) + (Const64 [s])) + (Rsh64x64 + (SignExt32to64 x) + (Const64 [63]))) + ) +) + && v.Block.Func.pass.name != "opt" && mul.Uses == 1 + && m == int64(smagic(32,c).m) && s == 32+smagic(32,c).s + && x.Op != OpConst32 && sdivisibleOK(32,c) + -> (Leq32U + (RotateLeft32 + (Add32 + (Mul32 + (Const32 [int64(int32(sdivisible(32,c).m))]) + x) + (Const32 [int64(int32(sdivisible(32,c).a))]) + ) + (Const32 [int64(32-sdivisible(32,c).k)]) + ) + (Const32 [int64(int32(sdivisible(32,c).max))]) + ) + +(Eq32 x (Mul32 (Const32 [c]) + (Sub32 + (Rsh32x64 + mul:(Hmul32 + (Const32 [m]) + x) + (Const64 [s])) + (Rsh32x64 + x + (Const64 [31]))) + ) +) + && v.Block.Func.pass.name != "opt" && mul.Uses == 1 + && m == int64(int32(smagic(32,c).m/2)) && s == smagic(32,c).s-1 + && x.Op != OpConst32 && sdivisibleOK(32,c) + -> (Leq32U + (RotateLeft32 + (Add32 + (Mul32 + (Const32 [int64(int32(sdivisible(32,c).m))]) + x) + (Const32 [int64(int32(sdivisible(32,c).a))]) + ) + (Const32 [int64(32-sdivisible(32,c).k)]) + ) + (Const32 [int64(int32(sdivisible(32,c).max))]) + ) + +(Eq32 x (Mul32 (Const32 [c]) + (Sub32 + (Rsh32x64 + (Add32 + mul:(Hmul32 + (Const32 [m]) + x) + x) + (Const64 [s])) + (Rsh32x64 + x + (Const64 [31]))) + ) +) + && v.Block.Func.pass.name != "opt" && mul.Uses == 1 + && m == int64(int32(smagic(32,c).m)) && s == smagic(32,c).s + && x.Op != OpConst32 && sdivisibleOK(32,c) + -> (Leq32U + (RotateLeft32 + (Add32 + (Mul32 + (Const32 [int64(int32(sdivisible(32,c).m))]) + x) + (Const32 [int64(int32(sdivisible(32,c).a))]) + ) + (Const32 [int64(32-sdivisible(32,c).k)]) + ) + (Const32 [int64(int32(sdivisible(32,c).max))]) + ) + +(Eq64 x (Mul64 (Const64 [c]) + (Sub64 + (Rsh64x64 + mul:(Hmul64 + (Const64 [m]) + x) + (Const64 [s])) + (Rsh64x64 + x + (Const64 [63]))) + ) +) + && v.Block.Func.pass.name != "opt" && mul.Uses == 1 + && m == int64(smagic(64,c).m/2) && s == smagic(64,c).s-1 + && x.Op != OpConst64 && sdivisibleOK(64,c) + -> (Leq64U + (RotateLeft64 + (Add64 + (Mul64 + (Const64 [int64(sdivisible(64,c).m)]) + x) + (Const64 [int64(sdivisible(64,c).a)]) + ) + (Const64 [int64(64-sdivisible(64,c).k)]) + ) + (Const64 [int64(sdivisible(64,c).max)]) + ) + +(Eq64 x (Mul64 (Const64 [c]) + (Sub64 + (Rsh64x64 + (Add64 + mul:(Hmul64 + (Const64 [m]) + x) + x) + (Const64 [s])) + (Rsh64x64 + x + (Const64 [63]))) + ) +) + && v.Block.Func.pass.name != "opt" && mul.Uses == 1 + && m == int64(smagic(64,c).m) && s == smagic(64,c).s + && x.Op != OpConst64 && sdivisibleOK(64,c) + -> (Leq64U + (RotateLeft64 + (Add64 + (Mul64 + (Const64 [int64(sdivisible(64,c).m)]) + x) + (Const64 [int64(sdivisible(64,c).a)]) + ) + (Const64 [int64(64-sdivisible(64,c).k)]) + ) + (Const64 [int64(sdivisible(64,c).max)]) + ) + +// Divisibility check for signed integers for power of two constant are simple mask. +// However, we must match against the rewritten n%c == 0 -> n - c*(n/c) == 0 -> n == c*(n/c) +// where n/c contains fixup code to handle signed n. +(Eq8 n (Lsh8x64 + (Rsh8x64 + (Add8 n (Rsh8Ux64 (Rsh8x64 n (Const64 [ 7])) (Const64 [kbar]))) + (Const64 [k])) + (Const64 [k])) +) && k > 0 && k < 7 && kbar == 8 - k + -> (Eq8 (And8 n (Const8 [int64(1< [0])) + +(Eq16 n (Lsh16x64 + (Rsh16x64 + (Add16 n (Rsh16Ux64 (Rsh16x64 n (Const64 [15])) (Const64 [kbar]))) + (Const64 [k])) + (Const64 [k])) +) && k > 0 && k < 15 && kbar == 16 - k + -> (Eq16 (And16 n (Const16 [int64(1< [0])) + +(Eq32 n (Lsh32x64 + (Rsh32x64 + (Add32 n (Rsh32Ux64 (Rsh32x64 n (Const64 [31])) (Const64 [kbar]))) + (Const64 [k])) + (Const64 [k])) +) && k > 0 && k < 31 && kbar == 32 - k + -> (Eq32 (And32 n (Const32 [int64(1< [0])) + +(Eq64 n (Lsh64x64 + (Rsh64x64 + (Add64 n (Rsh64Ux64 (Rsh64x64 n (Const64 [63])) (Const64 [kbar]))) + (Const64 [k])) + (Const64 [k])) +) && k > 0 && k < 63 && kbar == 64 - k + -> (Eq64 (And64 n (Const64 [int64(1< [0])) + (Eq(8|16|32|64) s:(Sub(8|16|32|64) x y) (Const(8|16|32|64) [0])) && s.Uses == 1 -> (Eq(8|16|32|64) x y) (Neq(8|16|32|64) s:(Sub(8|16|32|64) x y) (Const(8|16|32|64) [0])) && s.Uses == 1 -> (Neq(8|16|32|64) x y) diff --git a/src/cmd/compile/internal/ssa/gen/genericOps.go b/src/cmd/compile/internal/ssa/gen/genericOps.go index 89e6961bd7..8933aa51ef 100644 --- a/src/cmd/compile/internal/ssa/gen/genericOps.go +++ b/src/cmd/compile/internal/ssa/gen/genericOps.go @@ -369,6 +369,14 @@ var genericOps = []opData{ // arch-dependent), and is not a safe-point. {name: "WB", argLength: 3, typ: "Mem", aux: "Sym", symEffect: "None"}, // arg0=destptr, arg1=srcptr, arg2=mem, aux=runtime.gcWriteBarrier + // PanicBounds and PanicExtend generate a runtime panic. + // Their arguments provide index values to use in panic messages. + // Both PanicBounds and PanicExtend have an AuxInt value from the BoundsKind type (in ../op.go). + // PanicBounds' index is int sized. + // PanicExtend's index is int64 sized. (PanicExtend is only used on 32-bit archs.) + {name: "PanicBounds", argLength: 3, aux: "Int64", typ: "Mem"}, // arg0=idx, arg1=len, arg2=mem, returns memory. + {name: "PanicExtend", argLength: 4, aux: "Int64", typ: "Mem"}, // arg0=idxHi, arg1=idxLo, arg2=len, arg3=mem, returns memory. + // Function calls. Arguments to the call have already been written to the stack. // Return values appear on the stack. The method receiver, if any, is treated // as a phantom first argument. @@ -519,6 +527,7 @@ var genericOps = []opData{ // Atomic loads return a new memory so that the loads are properly ordered // with respect to other loads and stores. // TODO: use for sync/atomic at some point. + {name: "AtomicLoad8", argLength: 2, typ: "(UInt8,Mem)"}, // Load from arg0. arg1=memory. Returns loaded value and new memory. {name: "AtomicLoad32", argLength: 2, typ: "(UInt32,Mem)"}, // Load from arg0. arg1=memory. Returns loaded value and new memory. {name: "AtomicLoad64", argLength: 2, typ: "(UInt64,Mem)"}, // Load from arg0. arg1=memory. Returns loaded value and new memory. {name: "AtomicLoadPtr", argLength: 2, typ: "(BytePtr,Mem)"}, // Load from arg0. arg1=memory. Returns loaded value and new memory. diff --git a/src/cmd/compile/internal/ssa/gen/main.go b/src/cmd/compile/internal/ssa/gen/main.go index f7195bf536..bfecb9b29f 100644 --- a/src/cmd/compile/internal/ssa/gen/main.go +++ b/src/cmd/compile/internal/ssa/gen/main.go @@ -56,6 +56,7 @@ type opData struct { hasSideEffects bool // for "reasons", not to be eliminated. E.g., atomic store, #19182. zeroWidth bool // op never translates into any machine code. example: copy, which may sometimes translate to machine code, is not zero-width. symEffect string // effect this op has on symbol in aux + scale uint8 // amd64/386 indexed load scale } type blockData struct { @@ -245,6 +246,9 @@ func genOp() { if v.asm != "" { fmt.Fprintf(w, "asm: %s.A%s,\n", pkg, v.asm) } + if v.scale != 0 { + fmt.Fprintf(w, "scale: %d,\n", v.scale) + } fmt.Fprintln(w, "reg:regInfo{") // Compute input allocation order. We allocate from the @@ -291,6 +295,7 @@ func genOp() { fmt.Fprintln(w, "}") fmt.Fprintln(w, "func (o Op) Asm() obj.As {return opcodeTable[o].asm}") + fmt.Fprintln(w, "func (o Op) Scale() int16 {return int16(opcodeTable[o].scale)}") // generate op string method fmt.Fprintln(w, "func (o Op) String() string {return opcodeTable[o].name }") @@ -393,6 +398,7 @@ func (a arch) Name() string { func genLower() { for _, a := range archs { genRules(a) + genSplitLoadRules(a) } } diff --git a/src/cmd/compile/internal/ssa/gen/rulegen.go b/src/cmd/compile/internal/ssa/gen/rulegen.go index 730e768ed6..4ca6796f7c 100644 --- a/src/cmd/compile/internal/ssa/gen/rulegen.go +++ b/src/cmd/compile/internal/ssa/gen/rulegen.go @@ -80,11 +80,19 @@ func (r Rule) parse() (match, cond, result string) { return match, cond, result } -func genRules(arch arch) { +func genRules(arch arch) { genRulesSuffix(arch, "") } +func genSplitLoadRules(arch arch) { genRulesSuffix(arch, "splitload") } + +func genRulesSuffix(arch arch, suff string) { // Open input file. - text, err := os.Open(arch.name + ".rules") + text, err := os.Open(arch.name + suff + ".rules") if err != nil { - log.Fatalf("can't read rule file: %v", err) + if suff == "" { + // All architectures must have a plain rules file. + log.Fatalf("can't read rule file: %v", err) + } + // Some architectures have bonus rules files that others don't share. That's fine. + return } // oprules contains a list of rules for each block and opcode @@ -122,7 +130,7 @@ func genRules(arch arch) { continue } - loc := fmt.Sprintf("%s.rules:%d", arch.name, ruleLineno) + loc := fmt.Sprintf("%s%s.rules:%d", arch.name, suff, ruleLineno) for _, rule2 := range expandOr(rule) { for _, rule3 := range commute(rule2, arch) { r := Rule{rule: rule3, loc: loc} @@ -156,7 +164,7 @@ func genRules(arch arch) { // Start output buffer, write header. w := new(bytes.Buffer) - fmt.Fprintf(w, "// Code generated from gen/%s.rules; DO NOT EDIT.\n", arch.name) + fmt.Fprintf(w, "// Code generated from gen/%s%s.rules; DO NOT EDIT.\n", arch.name, suff) fmt.Fprintln(w, "// generated with: cd gen; go run *.go") fmt.Fprintln(w) fmt.Fprintln(w, "package ssa") @@ -174,7 +182,7 @@ func genRules(arch arch) { const chunkSize = 10 // Main rewrite routine is a switch on v.Op. - fmt.Fprintf(w, "func rewriteValue%s(v *Value) bool {\n", arch.name) + fmt.Fprintf(w, "func rewriteValue%s%s(v *Value) bool {\n", arch.name, suff) fmt.Fprintf(w, "switch v.Op {\n") for _, op := range ops { fmt.Fprintf(w, "case %s:\n", op) @@ -183,7 +191,7 @@ func genRules(arch arch) { if chunk > 0 { fmt.Fprint(w, " || ") } - fmt.Fprintf(w, "rewriteValue%s_%s_%d(v)", arch.name, op, chunk) + fmt.Fprintf(w, "rewriteValue%s%s_%s_%d(v)", arch.name, suff, op, chunk) } fmt.Fprintln(w) } @@ -209,7 +217,7 @@ func genRules(arch arch) { canFail = false fmt.Fprintf(buf, "for {\n") - pos, matchCanFail := genMatch(buf, arch, match, rule.loc) + pos, _, matchCanFail := genMatch(buf, arch, match, rule.loc) if pos == "" { pos = "v.Pos" } @@ -238,29 +246,23 @@ func genRules(arch arch) { } body := buf.String() - // Do a rough match to predict whether we need b, config, fe, and/or types. - // It's not precise--thus the blank assignments--but it's good enough - // to avoid generating needless code and doing pointless nil checks. - hasb := strings.Contains(body, "b.") + // Figure out whether we need b, config, fe, and/or types; provide them if so. + hasb := strings.Contains(body, " b.") hasconfig := strings.Contains(body, "config.") || strings.Contains(body, "config)") hasfe := strings.Contains(body, "fe.") hastyps := strings.Contains(body, "typ.") - fmt.Fprintf(w, "func rewriteValue%s_%s_%d(v *Value) bool {\n", arch.name, op, chunk) + fmt.Fprintf(w, "func rewriteValue%s%s_%s_%d(v *Value) bool {\n", arch.name, suff, op, chunk) if hasb || hasconfig || hasfe || hastyps { fmt.Fprintln(w, "b := v.Block") - fmt.Fprintln(w, "_ = b") } if hasconfig { fmt.Fprintln(w, "config := b.Func.Config") - fmt.Fprintln(w, "_ = config") } if hasfe { fmt.Fprintln(w, "fe := b.Func.fe") - fmt.Fprintln(w, "_ = fe") } if hastyps { fmt.Fprintln(w, "typ := &b.Func.Config.Types") - fmt.Fprintln(w, "_ = typ") } fmt.Fprint(w, body) fmt.Fprintf(w, "}\n") @@ -269,13 +271,12 @@ func genRules(arch arch) { // Generate block rewrite function. There are only a few block types // so we can make this one function with a switch. - fmt.Fprintf(w, "func rewriteBlock%s(b *Block) bool {\n", arch.name) + fmt.Fprintf(w, "func rewriteBlock%s%s(b *Block) bool {\n", arch.name, suff) fmt.Fprintln(w, "config := b.Func.Config") - fmt.Fprintln(w, "_ = config") - fmt.Fprintln(w, "fe := b.Func.fe") - fmt.Fprintln(w, "_ = fe") fmt.Fprintln(w, "typ := &config.Types") fmt.Fprintln(w, "_ = typ") + fmt.Fprintln(w, "v := b.Control") + fmt.Fprintln(w, "_ = v") fmt.Fprintf(w, "switch b.Kind {\n") ops = nil for op := range blockrules { @@ -290,27 +291,26 @@ func genRules(arch arch) { fmt.Fprintf(w, "// cond: %s\n", cond) fmt.Fprintf(w, "// result: %s\n", result) - fmt.Fprintf(w, "for {\n") - _, _, _, aux, s := extract(match) // remove parens, then split + loopw := new(bytes.Buffer) + // check match of control value pos := "" + checkOp := "" if s[0] != "nil" { - fmt.Fprintf(w, "v := b.Control\n") if strings.Contains(s[0], "(") { - pos, _ = genMatch0(w, arch, s[0], "v", map[string]struct{}{}, false, rule.loc) + pos, checkOp, _ = genMatch0(loopw, arch, s[0], "v", map[string]struct{}{}, rule.loc) } else { - fmt.Fprintf(w, "_ = v\n") // in case we don't use v - fmt.Fprintf(w, "%s := b.Control\n", s[0]) + fmt.Fprintf(loopw, "%s := b.Control\n", s[0]) } } if aux != "" { - fmt.Fprintf(w, "%s := b.Aux\n", aux) + fmt.Fprintf(loopw, "%s := b.Aux\n", aux) } if cond != "" { - fmt.Fprintf(w, "if !(%s) {\nbreak\n}\n", cond) + fmt.Fprintf(loopw, "if !(%s) {\nbreak\n}\n", cond) } // Rule matches. Generate result. @@ -336,19 +336,19 @@ func genRules(arch arch) { log.Fatalf("unmatched successors %v in %s", m, rule) } - fmt.Fprintf(w, "b.Kind = %s\n", blockName(outop, arch)) + fmt.Fprintf(loopw, "b.Kind = %s\n", blockName(outop, arch)) if t[0] == "nil" { - fmt.Fprintf(w, "b.SetControl(nil)\n") + fmt.Fprintf(loopw, "b.SetControl(nil)\n") } else { if pos == "" { pos = "v.Pos" } - fmt.Fprintf(w, "b.SetControl(%s)\n", genResult0(w, arch, t[0], new(int), false, false, rule.loc, pos)) + fmt.Fprintf(loopw, "b.SetControl(%s)\n", genResult0(loopw, arch, t[0], new(int), false, false, rule.loc, pos)) } if aux != "" { - fmt.Fprintf(w, "b.Aux = %s\n", aux) + fmt.Fprintf(loopw, "b.Aux = %s\n", aux) } else { - fmt.Fprintln(w, "b.Aux = nil") + fmt.Fprintln(loopw, "b.Aux = nil") } succChanged := false @@ -364,13 +364,20 @@ func genRules(arch arch) { if succs[0] != newsuccs[1] || succs[1] != newsuccs[0] { log.Fatalf("can only handle swapped successors in %s", rule) } - fmt.Fprintln(w, "b.swapSuccessors()") + fmt.Fprintln(loopw, "b.swapSuccessors()") } if *genLog { - fmt.Fprintf(w, "logRule(\"%s\")\n", rule.loc) + fmt.Fprintf(loopw, "logRule(\"%s\")\n", rule.loc) } - fmt.Fprintf(w, "return true\n") + fmt.Fprintf(loopw, "return true\n") + + if checkOp != "" { + fmt.Fprintf(w, "for v.Op == %s {\n", checkOp) + } else { + fmt.Fprintf(w, "for {\n") + } + io.Copy(w, loopw) fmt.Fprintf(w, "}\n") } @@ -388,7 +395,7 @@ func genRules(arch arch) { } // Write to file - err = ioutil.WriteFile("../rewrite"+arch.name+".go", src, 0666) + err = ioutil.WriteFile("../rewrite"+arch.name+suff+".go", src, 0666) if err != nil { log.Fatalf("can't write output: %v\n", err) } @@ -396,24 +403,18 @@ func genRules(arch arch) { // genMatch returns the variable whose source position should be used for the // result (or "" if no opinion), and a boolean that reports whether the match can fail. -func genMatch(w io.Writer, arch arch, match string, loc string) (string, bool) { - return genMatch0(w, arch, match, "v", map[string]struct{}{}, true, loc) +func genMatch(w io.Writer, arch arch, match string, loc string) (pos, checkOp string, canFail bool) { + return genMatch0(w, arch, match, "v", map[string]struct{}{}, loc) } -func genMatch0(w io.Writer, arch arch, match, v string, m map[string]struct{}, top bool, loc string) (string, bool) { +func genMatch0(w io.Writer, arch arch, match, v string, m map[string]struct{}, loc string) (pos, checkOp string, canFail bool) { if match[0] != '(' || match[len(match)-1] != ')' { panic("non-compound expr in genMatch0: " + match) } - pos := "" - canFail := false - op, oparch, typ, auxint, aux, args := parseValue(match, arch, loc) - // check op - if !top { - fmt.Fprintf(w, "if %s.Op != Op%s%s {\nbreak\n}\n", v, oparch, op.name) - canFail = true - } + checkOp = fmt.Sprintf("Op%s%s", oparch, op.name) + if op.faultOnNilArg0 || op.faultOnNilArg1 { // Prefer the position of an instruction which could fault. pos = v + ".Pos" @@ -455,7 +456,6 @@ func genMatch0(w io.Writer, arch arch, match, v string, m map[string]struct{}, t } if aux != "" { - if !isVariable(aux) { // code fmt.Fprintf(w, "if %s.Aux != %s {\nbreak\n}\n", v, aux) @@ -472,8 +472,18 @@ func genMatch0(w io.Writer, arch arch, match, v string, m map[string]struct{}, t } } + // Access last argument first to minimize bounds checks. if n := len(args); n > 1 { - fmt.Fprintf(w, "_ = %s.Args[%d]\n", v, n-1) // combine some bounds checks + a := args[n-1] + if _, set := m[a]; !set && a != "_" && isVariable(a) { + m[a] = struct{}{} + fmt.Fprintf(w, "%s := %s.Args[%d]\n", a, v, n-1) + + // delete the last argument so it is not reprocessed + args = args[:n-1] + } else { + fmt.Fprintf(w, "_ = %s.Args[%d]\n", v, n-1) + } } for i, arg := range args { if arg == "_" { @@ -507,8 +517,16 @@ func genMatch0(w io.Writer, arch arch, match, v string, m map[string]struct{}, t // autogenerated name argname = fmt.Sprintf("%s_%d", v, i) } + if argname == "b" { + log.Fatalf("don't name args 'b', it is ambiguous with blocks") + } + fmt.Fprintf(w, "%s := %s.Args[%d]\n", argname, v, i) - argPos, argCanFail := genMatch0(w, arch, arg, argname, m, false, loc) + w2 := new(bytes.Buffer) + argPos, argCheckOp, _ := genMatch0(w2, arch, arg, argname, m, loc) + fmt.Fprintf(w, "if %s.Op != %s {\nbreak\n}\n", argname, argCheckOp) + io.Copy(w, w2) + if argPos != "" { // Keep the argument in preference to the parent, as the // argument is normally earlier in program flow. @@ -517,16 +535,14 @@ func genMatch0(w io.Writer, arch arch, match, v string, m map[string]struct{}, t // in the program flow. pos = argPos } - if argCanFail { - canFail = true - } + canFail = true } if op.argLength == -1 { fmt.Fprintf(w, "if len(%s.Args) != %d {\nbreak\n}\n", v, len(args)) canFail = true } - return pos, canFail + return pos, checkOp, canFail } func genResult(w io.Writer, arch arch, result string, loc string, pos string) { @@ -815,20 +831,39 @@ func isVariable(s string) bool { } // opRegexp is a regular expression to find the opcode portion of s-expressions. -var opRegexp = regexp.MustCompile(`[(]\w*[(](\w+[|])+\w+[)]\w* `) +var opRegexp = regexp.MustCompile(`[(](\w+[|])+\w+[)]`) + +// excludeFromExpansion reports whether the substring s[idx[0]:idx[1]] in a rule +// should be disregarded as a candidate for | expansion. +// It uses simple syntactic checks to see whether the substring +// is inside an AuxInt expression or inside the && conditions. +func excludeFromExpansion(s string, idx []int) bool { + left := s[:idx[0]] + if strings.LastIndexByte(left, '[') > strings.LastIndexByte(left, ']') { + // Inside an AuxInt expression. + return true + } + right := s[idx[1]:] + if strings.Contains(left, "&&") && strings.Contains(right, "->") { + // Inside && conditions. + return true + } + return false +} // expandOr converts a rule into multiple rules by expanding | ops. func expandOr(r string) []string { - // Find every occurrence of |-separated things at the opcode position. - // They look like (MOV(B|W|L|Q|SS|SD)load - // Note: there might be false positives in parts of rules that are Go code - // (e.g. && conditions, AuxInt expressions, etc.). There are currently no - // such false positives, so I'm not too worried about it. + // Find every occurrence of |-separated things. + // They look like MOV(B|W|L|Q|SS|SD)load or MOV(Q|L)loadidx(1|8). // Generate rules selecting one case from each |-form. // Count width of |-forms. They must match. n := 1 - for _, s := range opRegexp.FindAllString(r, -1) { + for _, idx := range opRegexp.FindAllStringIndex(r, -1) { + if excludeFromExpansion(r, idx) { + continue + } + s := r[idx[0]:idx[1]] c := strings.Count(s, "|") + 1 if c == 1 { continue @@ -842,16 +877,22 @@ func expandOr(r string) []string { // No |-form in this rule. return []string{r} } + // Build each new rule. res := make([]string, n) for i := 0; i < n; i++ { - res[i] = opRegexp.ReplaceAllStringFunc(r, func(s string) string { - if strings.Count(s, "|") == 0 { - return s + buf := new(strings.Builder) + x := 0 + for _, idx := range opRegexp.FindAllStringIndex(r, -1) { + if excludeFromExpansion(r, idx) { + continue } - s = s[1 : len(s)-1] // remove leading "(" and trailing " " - x, y := strings.Index(s, "("), strings.Index(s, ")") - return "(" + s[:x] + strings.Split(s[x+1:y], "|")[i] + s[y+1:] + " " - }) + buf.WriteString(r[x:idx[0]]) // write bytes we've skipped over so far + s := r[idx[0]+1 : idx[1]-1] // remove leading "(" and trailing ")" + buf.WriteString(strings.Split(s, "|")[i]) // write the op component for this rule + x = idx[1] // note that we've written more bytes + } + buf.WriteString(r[x:]) + res[i] = buf.String() } return res } @@ -1019,5 +1060,6 @@ func normalizeWhitespace(x string) string { x = strings.Join(strings.Fields(x), " ") x = strings.Replace(x, "( ", "(", -1) x = strings.Replace(x, " )", ")", -1) + x = strings.Replace(x, ")->", ") ->", -1) return x } diff --git a/src/cmd/compile/internal/ssa/loopbce.go b/src/cmd/compile/internal/ssa/loopbce.go index 8ab1a0c695..5f02643ccd 100644 --- a/src/cmd/compile/internal/ssa/loopbce.go +++ b/src/cmd/compile/internal/ssa/loopbce.go @@ -4,7 +4,10 @@ package ssa -import "fmt" +import ( + "fmt" + "math" +) type indVarFlags uint8 @@ -59,6 +62,7 @@ func findIndVar(f *Func) []indVar { // Check thet the control if it either ind />= ind. // TODO: Handle 32-bit comparisons. + // TODO: Handle unsigned comparisons? switch b.Control.Op { case OpLeq64: flags |= indVarMaxInc @@ -165,15 +169,101 @@ func findIndVar(f *Func) []indVar { continue } - // We can only guarantee that the loops runs within limits of induction variable - // if the increment is ±1 or when the limits are constants. - if step != 1 { + // We can only guarantee that the loop runs within limits of induction variable + // if (one of) + // (1) the increment is ±1 + // (2) the limits are constants + // (3) loop is of the form k0 upto Known_not_negative-k inclusive, step <= k + // (4) loop is of the form k0 upto Known_not_negative-k exclusive, step <= k+1 + // (5) loop is of the form Known_not_negative downto k0, minint+step < k0 + if step > 1 { ok := false if min.Op == OpConst64 && max.Op == OpConst64 { if max.AuxInt > min.AuxInt && max.AuxInt%step == min.AuxInt%step { // handle overflow ok = true } } + // Handle induction variables of these forms. + // KNN is known-not-negative. + // SIGNED ARITHMETIC ONLY. (see switch on b.Control.Op above) + // Possibilitis for KNN are len and cap; perhaps we can infer others. + // for i := 0; i <= KNN-k ; i += k + // for i := 0; i < KNN-(k-1); i += k + // Also handle decreasing. + + // "Proof" copied from https://go-review.googlesource.com/c/go/+/104041/10/src/cmd/compile/internal/ssa/loopbce.go#164 + // + // In the case of + // // PC is Positive Constant + // L := len(A)-PC + // for i := 0; i < L; i = i+PC + // + // we know: + // + // 0 + PC does not over/underflow. + // len(A)-PC does not over/underflow + // maximum value for L is MaxInt-PC + // i < L <= MaxInt-PC means i + PC < MaxInt hence no overflow. + + // To match in SSA: + // if (a) min.Op == OpConst64(k0) + // and (b) k0 >= MININT + step + // and (c) max.Op == OpSubtract(Op{StringLen,SliceLen,SliceCap}, k) + // or (c) max.Op == OpAdd(Op{StringLen,SliceLen,SliceCap}, -k) + // or (c) max.Op == Op{StringLen,SliceLen,SliceCap} + // and (d) if upto loop, require indVarMaxInc && step <= k or !indVarMaxInc && step-1 <= k + + if min.Op == OpConst64 && min.AuxInt >= step+math.MinInt64 { + knn := max + k := int64(0) + var kArg *Value + + switch max.Op { + case OpSub64: + knn = max.Args[0] + kArg = max.Args[1] + + case OpAdd64: + knn = max.Args[0] + kArg = max.Args[1] + if knn.Op == OpConst64 { + knn, kArg = kArg, knn + } + } + switch knn.Op { + case OpSliceLen, OpStringLen, OpSliceCap: + default: + knn = nil + } + + if kArg != nil && kArg.Op == OpConst64 { + k = kArg.AuxInt + if max.Op == OpAdd64 { + k = -k + } + } + if k >= 0 && knn != nil { + if inc.AuxInt > 0 { // increasing iteration + // The concern for the relation between step and k is to ensure that iv never exceeds knn + // i.e., iv < knn-(K-1) ==> iv + K <= knn; iv <= knn-K ==> iv +K < knn + if step <= k || flags&indVarMaxInc == 0 && step-1 == k { + ok = true + } + } else { // decreasing iteration + // Will be decrementing from max towards min; max is knn-k; will only attempt decrement if + // knn-k >[=] min; underflow is only a concern if min-step is not smaller than min. + // This all assumes signed integer arithmetic + // This is already assured by the test above: min.AuxInt >= step+math.MinInt64 + ok = true + } + } + } + + // TODO: other unrolling idioms + // for i := 0; i < KNN - KNN % k ; i += k + // for i := 0; i < KNN&^(k-1) ; i += k // k a power of 2 + // for i := 0; i < KNN&(-k) ; i += k // k a power of 2 + if !ok { continue } diff --git a/src/cmd/compile/internal/ssa/magic.go b/src/cmd/compile/internal/ssa/magic.go index 12044111ea..e0c627184b 100644 --- a/src/cmd/compile/internal/ssa/magic.go +++ b/src/cmd/compile/internal/ssa/magic.go @@ -4,7 +4,10 @@ package ssa -import "math/big" +import ( + "math/big" + "math/bits" +) // So you want to compute x / c for some constant c? // Machine division instructions are slow, so we try to @@ -180,3 +183,199 @@ func smagic(n uint, c int64) smagicData { m := M.Uint64() return smagicData{s: int64(s), m: m} } + +// Divisibility x%c == 0 can be checked more efficiently than directly computing +// the modulus x%c and comparing against 0. +// +// The same "Division by invariant integers using multiplication" paper +// by Granlund and Montgomery referenced above briefly mentions this method +// and it is further elaborated in "Hacker's Delight" by Warren Section 10-17 +// +// The first thing to note is that for odd integers, exact division can be computed +// by using the modular inverse with respect to the word size 2^n. +// +// Given c, compute m such that (c * m) mod 2^n == 1 +// Then if c divides x (x%c ==0), the quotient is given by q = x/c == x*m mod 2^n +// +// x can range from 0, c, 2c, 3c, ... ⎣(2^n - 1)/c⎦ * c the maximum multiple +// Thus, x*m mod 2^n is 0, 1, 2, 3, ... ⎣(2^n - 1)/c⎦ +// i.e. the quotient takes all values from zero up to max = ⎣(2^n - 1)/c⎦ +// +// If x is not divisible by c, then x*m mod 2^n must take some larger value than max. +// +// This gives x*m mod 2^n <= ⎣(2^n - 1)/c⎦ as a test for divisibility +// involving one multiplication and compare. +// +// To extend this to even integers, consider c = d0 * 2^k where d0 is odd. +// We can test whether x is divisible by both d0 and 2^k. +// For d0, the test is the same as above. Let m be such that m*d0 mod 2^n == 1 +// Then x*m mod 2^n <= ⎣(2^n - 1)/d0⎦ is the first test. +// The test for divisibility by 2^k is a check for k trailing zeroes. +// Note that since d0 is odd, m is odd and thus x*m will have the same number of +// trailing zeroes as x. So the two tests are, +// +// x*m mod 2^n <= ⎣(2^n - 1)/d0⎦ +// and x*m ends in k zero bits +// +// These can be combined into a single comparison by the following +// (theorem ZRU in Hacker's Delight) for unsigned integers. +// +// x <= a and x ends in k zero bits if and only if RotRight(x ,k) <= ⎣a/(2^k)⎦ +// Where RotRight(x ,k) is right rotation of x by k bits. +// +// To prove the first direction, x <= a -> ⎣x/(2^k)⎦ <= ⎣a/(2^k)⎦ +// But since x ends in k zeroes all the rotated bits would be zero too. +// So RotRight(x, k) == ⎣x/(2^k)⎦ <= ⎣a/(2^k)⎦ +// +// If x does not end in k zero bits, then RotRight(x, k) +// has some non-zero bits in the k highest bits. +// ⎣x/(2^k)⎦ has all zeroes in the k highest bits, +// so RotRight(x, k) > ⎣x/(2^k)⎦ +// +// Finally, if x > a and has k trailing zero bits, then RotRight(x, k) == ⎣x/(2^k)⎦ +// and ⎣x/(2^k)⎦ must be greater than ⎣a/(2^k)⎦, that is the top n-k bits of x must +// be greater than the top n-k bits of a because the rest of x bits are zero. +// +// So the two conditions about can be replaced with the single test +// +// RotRight(x*m mod 2^n, k) <= ⎣(2^n - 1)/c⎦ +// +// Where d0*2^k was replaced by c on the right hand side. + +// uivisibleOK reports whether we should strength reduce a n-bit dividisibilty check by c. +func udivisibleOK(n uint, c int64) bool { + // Convert from ConstX auxint values to the real uint64 constant they represent. + d := uint64(c) << (64 - n) >> (64 - n) + + // Doesn't work for 0. + // Don't use for powers of 2. + return d&(d-1) != 0 +} + +type udivisibleData struct { + k int64 // trailingZeros(c) + m uint64 // m * (c>>k) mod 2^n == 1 multiplicative inverse of odd portion modulo 2^n + max uint64 // ⎣(2^n - 1)/ c⎦ max value to for divisibility +} + +func udivisible(n uint, c int64) udivisibleData { + // Convert from ConstX auxint values to the real uint64 constant they represent. + d := uint64(c) << (64 - n) >> (64 - n) + + k := bits.TrailingZeros64(d) + d0 := d >> uint(k) // the odd portion of the divisor + + mask := ^uint64(0) >> (64 - n) + + // Calculate the multiplicative inverse via Newton's method. + // Quadratic convergence doubles the number of correct bits per iteration. + m := d0 // initial guess correct to 3-bits d0*d0 mod 8 == 1 + m = m * (2 - m*d0) // 6-bits + m = m * (2 - m*d0) // 12-bits + m = m * (2 - m*d0) // 24-bits + m = m * (2 - m*d0) // 48-bits + m = m * (2 - m*d0) // 96-bits >= 64-bits + m = m & mask + + max := mask / d + + return udivisibleData{ + k: int64(k), + m: m, + max: max, + } +} + +// For signed integers, a similar method follows. +// +// Given c > 1 and odd, compute m such that (c * m) mod 2^n == 1 +// Then if c divides x (x%c ==0), the quotient is given by q = x/c == x*m mod 2^n +// +// x can range from ⎡-2^(n-1)/c⎤ * c, ... -c, 0, c, ... ⎣(2^(n-1) - 1)/c⎦ * c +// Thus, x*m mod 2^n is ⎡-2^(n-1)/c⎤, ... -2, -1, 0, 1, 2, ... ⎣(2^(n-1) - 1)/c⎦ +// +// So, x is a multiple of c if and only if: +// ⎡-2^(n-1)/c⎤ <= x*m mod 2^n <= ⎣(2^(n-1) - 1)/c⎦ +// +// Since c > 1 and odd, this can be simplified by +// ⎡-2^(n-1)/c⎤ == ⎡(-2^(n-1) + 1)/c⎤ == -⎣(2^(n-1) - 1)/c⎦ +// +// -⎣(2^(n-1) - 1)/c⎦ <= x*m mod 2^n <= ⎣(2^(n-1) - 1)/c⎦ +// +// To extend this to even integers, consider c = d0 * 2^k where d0 is odd. +// We can test whether x is divisible by both d0 and 2^k. +// +// Let m be such that (d0 * m) mod 2^n == 1. +// Let q = x*m mod 2^n. Then c divides x if: +// +// -⎣(2^(n-1) - 1)/d0⎦ <= q <= ⎣(2^(n-1) - 1)/d0⎦ and q ends in at least k 0-bits +// +// To transform this to a single comparison, we use the following theorem (ZRS in Hacker's Delight). +// +// For a >= 0 the following conditions are equivalent: +// 1) -a <= x <= a and x ends in at least k 0-bits +// 2) RotRight(x+a', k) <= ⎣2a'/2^k⎦ +// +// Where a' = a & -2^k (a with its right k bits set to zero) +// +// To see that 1 & 2 are equivalent, note that -a <= x <= a is equivalent to +// -a' <= x <= a' if and only if x ends in at least k 0-bits. Adding -a' to each side gives, +// 0 <= x + a' <= 2a' and x + a' ends in at least k 0-bits if and only if x does since a' has +// k 0-bits by definition. We can use theorem ZRU above with x -> x + a' and a -> 2a' giving 1) == 2). +// +// Let m be such that (d0 * m) mod 2^n == 1. +// Let q = x*m mod 2^n. +// Let a' = ⎣(2^(n-1) - 1)/d0⎦ & -2^k +// +// Then the divisibility test is: +// +// RotRight(q+a', k) <= ⎣2a'/2^k⎦ +// +// Note that the calculation is performed using unsigned integers. +// Since a' can have n-1 bits, 2a' may have n bits and there is no risk of overflow. + +// sdivisibleOK reports whether we should strength reduce a n-bit dividisibilty check by c. +func sdivisibleOK(n uint, c int64) bool { + if c < 0 { + // Doesn't work for negative c. + return false + } + // Doesn't work for 0. + // Don't use it for powers of 2. + return c&(c-1) != 0 +} + +type sdivisibleData struct { + k int64 // trailingZeros(c) + m uint64 // m * (c>>k) mod 2^n == 1 multiplicative inverse of odd portion modulo 2^n + a uint64 // ⎣(2^(n-1) - 1)/ (c>>k)⎦ & -(1<> uint(k) // the odd portion of the divisor + + mask := ^uint64(0) >> (64 - n) + + // Calculate the multiplicative inverse via Newton's method. + // Quadratic convergence doubles the number of correct bits per iteration. + m := d0 // initial guess correct to 3-bits d0*d0 mod 8 == 1 + m = m * (2 - m*d0) // 6-bits + m = m * (2 - m*d0) // 12-bits + m = m * (2 - m*d0) // 24-bits + m = m * (2 - m*d0) // 48-bits + m = m * (2 - m*d0) // 96-bits >= 64-bits + m = m & mask + + a := ((mask >> 1) / d0) & -(1 << uint(k)) + max := (2 * a) >> uint(k) + + return sdivisibleData{ + k: int64(k), + m: m, + a: a, + max: max, + } +} diff --git a/src/cmd/compile/internal/ssa/magic_test.go b/src/cmd/compile/internal/ssa/magic_test.go index 9599524f90..7c6009dea6 100644 --- a/src/cmd/compile/internal/ssa/magic_test.go +++ b/src/cmd/compile/internal/ssa/magic_test.go @@ -184,7 +184,7 @@ func TestMagicSigned(t *testing.T) { -c - 1, -c, -c + 1, c - 1, c, c + 1, -2*c - 1, -2 * c, -2*c + 1, 2*c - 1, 2 * c, 2*c + 1, -mul - 1, -mul, -mul + 1, mul - 1, mul, mul + 1, - int64(1)< 0 { @@ -203,3 +203,208 @@ func TestMagicSigned(t *testing.T) { } } } + +func testDivisibleExhaustiveU(t *testing.T, n uint) { + maxU := uint64(1) << n + for c := uint64(1); c < maxU; c++ { + if !udivisibleOK(n, int64(c)) { + continue + } + k := udivisible(n, int64(c)).k + m := udivisible(n, int64(c)).m + max := udivisible(n, int64(c)).max + mask := ^uint64(0) >> (64 - n) + for i := uint64(0); i < maxU; i++ { + want := i%c == 0 + mul := (i * m) & mask + rot := (mul>>uint(k) | mul<<(n-uint(k))) & mask + got := rot <= max + if want != got { + t.Errorf("unsigned divisible wrong for %d %% %d == 0: got %v, want %v (k=%d,m=%d,max=%d)\n", i, c, got, want, k, m, max) + } + } + } +} + +func TestDivisibleExhaustive8U(t *testing.T) { + testDivisibleExhaustiveU(t, 8) +} + +func TestDivisibleExhaustive16U(t *testing.T) { + if testing.Short() { + t.Skip("slow test; skipping") + } + testDivisibleExhaustiveU(t, 16) +} + +func TestDivisibleUnsigned(t *testing.T) { + One := new(big.Int).SetUint64(1) + for _, n := range [...]uint{8, 16, 32, 64} { + TwoN := new(big.Int).Lsh(One, n) + Max := new(big.Int).Sub(TwoN, One) + for _, c := range [...]uint64{ + 3, + 5, + 6, + 7, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 17, + 1<<8 - 1, + 1<<8 + 1, + 1<<16 - 1, + 1<<16 + 1, + 1<<32 - 1, + 1<<32 + 1, + 1<<64 - 1, + } { + if c>>n != 0 { + continue // c too large for the given n. + } + if !udivisibleOK(n, int64(c)) { + t.Errorf("expected n=%d c=%d to pass\n", n, c) + } + k := udivisible(n, int64(c)).k + m := udivisible(n, int64(c)).m + max := udivisible(n, int64(c)).max + mask := ^uint64(0) >> (64 - n) + + C := new(big.Int).SetUint64(c) + + // Find largest multiple of c. + Mul := new(big.Int).Div(Max, C) + Mul.Mul(Mul, C) + mul := Mul.Uint64() + + // Try some input values, mostly around multiples of c. + for _, x := range [...]uint64{0, 1, + c - 1, c, c + 1, + 2*c - 1, 2 * c, 2*c + 1, + mul - 1, mul, mul + 1, + uint64(1)< 0 { + continue + } + want := x%c == 0 + mul := (x * m) & mask + rot := (mul>>uint(k) | mul<<(n-uint(k))) & mask + got := rot <= max + if want != got { + t.Errorf("unsigned divisible wrong for %d %% %d == 0: got %v, want %v (k=%d,m=%d,max=%d)\n", x, c, got, want, k, m, max) + } + } + } + } +} + +func testDivisibleExhaustive(t *testing.T, n uint) { + minI := -int64(1) << (n - 1) + maxI := int64(1) << (n - 1) + for c := int64(1); c < maxI; c++ { + if !sdivisibleOK(n, int64(c)) { + continue + } + k := sdivisible(n, int64(c)).k + m := sdivisible(n, int64(c)).m + a := sdivisible(n, int64(c)).a + max := sdivisible(n, int64(c)).max + mask := ^uint64(0) >> (64 - n) + for i := minI; i < maxI; i++ { + want := i%c == 0 + mul := (uint64(i)*m + a) & mask + rot := (mul>>uint(k) | mul<<(n-uint(k))) & mask + got := rot <= max + if want != got { + t.Errorf("signed divisible wrong for %d %% %d == 0: got %v, want %v (k=%d,m=%d,a=%d,max=%d)\n", i, c, got, want, k, m, a, max) + } + } + } +} + +func TestDivisibleExhaustive8(t *testing.T) { + testDivisibleExhaustive(t, 8) +} + +func TestDivisibleExhaustive16(t *testing.T) { + if testing.Short() { + t.Skip("slow test; skipping") + } + testDivisibleExhaustive(t, 16) +} + +func TestDivisibleSigned(t *testing.T) { + One := new(big.Int).SetInt64(1) + for _, n := range [...]uint{8, 16, 32, 64} { + TwoNMinusOne := new(big.Int).Lsh(One, n-1) + Max := new(big.Int).Sub(TwoNMinusOne, One) + Min := new(big.Int).Neg(TwoNMinusOne) + for _, c := range [...]int64{ + 3, + 5, + 6, + 7, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 17, + 1<<7 - 1, + 1<<7 + 1, + 1<<15 - 1, + 1<<15 + 1, + 1<<31 - 1, + 1<<31 + 1, + 1<<63 - 1, + } { + if c>>(n-1) != 0 { + continue // not appropriate for the given n. + } + if !sdivisibleOK(n, int64(c)) { + t.Errorf("expected n=%d c=%d to pass\n", n, c) + } + k := sdivisible(n, int64(c)).k + m := sdivisible(n, int64(c)).m + a := sdivisible(n, int64(c)).a + max := sdivisible(n, int64(c)).max + mask := ^uint64(0) >> (64 - n) + + C := new(big.Int).SetInt64(c) + + // Find largest multiple of c. + Mul := new(big.Int).Div(Max, C) + Mul.Mul(Mul, C) + mul := Mul.Int64() + + // Try some input values, mostly around multiples of c. + for _, x := range [...]int64{ + -1, 1, + -c - 1, -c, -c + 1, c - 1, c, c + 1, + -2*c - 1, -2 * c, -2*c + 1, 2*c - 1, 2 * c, 2*c + 1, + -mul - 1, -mul, -mul + 1, mul - 1, mul, mul + 1, + int64(1)<<(n-1) - 1, -int64(1) << (n - 1), + } { + X := new(big.Int).SetInt64(x) + if X.Cmp(Min) < 0 || X.Cmp(Max) > 0 { + continue + } + want := x%c == 0 + mul := (uint64(x)*m + a) & mask + rot := (mul>>uint(k) | mul<<(n-uint(k))) & mask + got := rot <= max + if want != got { + t.Errorf("signed divisible wrong for %d %% %d == 0: got %v, want %v (k=%d,m=%d,a=%d,max=%d)\n", x, c, got, want, k, m, a, max) + } + } + } + } +} diff --git a/src/cmd/compile/internal/ssa/nilcheck.go b/src/cmd/compile/internal/ssa/nilcheck.go index 5369a51023..925f55234b 100644 --- a/src/cmd/compile/internal/ssa/nilcheck.go +++ b/src/cmd/compile/internal/ssa/nilcheck.go @@ -124,7 +124,7 @@ func nilcheckelim(f *Func) { ptr := v.Args[0] if nonNilValues[ptr.ID] { if v.Pos.IsStmt() == src.PosIsStmt { // Boolean true is a terrible statement boundary. - pendingLines.add(v.Pos.Line()) + pendingLines.add(v.Pos) v.Pos = v.Pos.WithNotStmt() } // This is a redundant explicit nil check. @@ -141,7 +141,7 @@ func nilcheckelim(f *Func) { f.Warnl(v.Pos, "removed nil check") } if v.Pos.IsStmt() == src.PosIsStmt { // About to lose a statement boundary - pendingLines.add(v.Pos.Line()) + pendingLines.add(v.Pos) } v.reset(OpUnknown) f.freeValue(v) @@ -154,15 +154,15 @@ func nilcheckelim(f *Func) { work = append(work, bp{op: ClearPtr, ptr: ptr}) fallthrough // a non-eliminated nil check might be a good place for a statement boundary. default: - if pendingLines.contains(v.Pos.Line()) && v.Pos.IsStmt() != src.PosNotStmt { + if pendingLines.contains(v.Pos) && v.Pos.IsStmt() != src.PosNotStmt { v.Pos = v.Pos.WithIsStmt() - pendingLines.remove(v.Pos.Line()) + pendingLines.remove(v.Pos) } } } - if pendingLines.contains(b.Pos.Line()) { + if pendingLines.contains(b.Pos) { b.Pos = b.Pos.WithIsStmt() - pendingLines.remove(b.Pos.Line()) + pendingLines.remove(b.Pos) } for j := i; j < len(b.Values); j++ { b.Values[j] = nil @@ -212,7 +212,7 @@ func nilcheckelim2(f *Func) { f.Warnl(v.Pos, "removed nil check") } if v.Pos.IsStmt() == src.PosIsStmt { - pendingLines.add(v.Pos.Line()) + pendingLines.add(v.Pos) } v.reset(OpUnknown) firstToRemove = i @@ -273,16 +273,16 @@ func nilcheckelim2(f *Func) { for j := i; j < len(b.Values); j++ { v := b.Values[j] if v.Op != OpUnknown { - if v.Pos.IsStmt() != src.PosNotStmt && pendingLines.contains(v.Pos.Line()) { + if v.Pos.IsStmt() != src.PosNotStmt && pendingLines.contains(v.Pos) { v.Pos = v.Pos.WithIsStmt() - pendingLines.remove(v.Pos.Line()) + pendingLines.remove(v.Pos) } b.Values[i] = v i++ } } - if pendingLines.contains(b.Pos.Line()) { + if pendingLines.contains(b.Pos) { b.Pos = b.Pos.WithIsStmt() } diff --git a/src/cmd/compile/internal/ssa/numberlines.go b/src/cmd/compile/internal/ssa/numberlines.go index 3e14b9e3df..4807da731c 100644 --- a/src/cmd/compile/internal/ssa/numberlines.go +++ b/src/cmd/compile/internal/ssa/numberlines.go @@ -7,7 +7,8 @@ package ssa import ( "cmd/internal/obj" "cmd/internal/src" - "math" + "fmt" + "sort" ) func isPoorStatementOp(op Op) bool { @@ -51,7 +52,7 @@ func nextGoodStatementIndex(v *Value, i int, b *Block) int { if b.Values[j].Pos.IsStmt() == src.PosNotStmt { // ignore non-statements continue } - if b.Values[j].Pos.Line() == v.Pos.Line() { + if b.Values[j].Pos.Line() == v.Pos.Line() && v.Pos.SameFile(b.Values[j].Pos) { return j } return i @@ -73,17 +74,61 @@ func notStmtBoundary(op Op) bool { return false } +func (b *Block) FirstPossibleStmtValue() *Value { + for _, v := range b.Values { + if notStmtBoundary(v.Op) { + continue + } + return v + } + return nil +} + +func flc(p src.XPos) string { + if p == src.NoXPos { + return "none" + } + return fmt.Sprintf("(%d):%d:%d", p.FileIndex(), p.Line(), p.Col()) +} + +type fileAndPair struct { + f int32 + lp lineRange +} + +type fileAndPairs []fileAndPair + +func (fap fileAndPairs) Len() int { + return len(fap) +} +func (fap fileAndPairs) Less(i, j int) bool { + return fap[i].f < fap[j].f +} +func (fap fileAndPairs) Swap(i, j int) { + fap[i], fap[j] = fap[j], fap[i] +} + +// -d=ssa/number_lines/stats=1 (that bit) for line and file distribution statistics +// -d=ssa/number_lines/debug for information about why particular values are marked as statements. func numberLines(f *Func) { po := f.Postorder() endlines := make(map[ID]src.XPos) - last := uint(0) // uint follows type of XPos.Line() - first := uint(math.MaxInt32) // unsigned, but large valid int when cast - note := func(line uint) { - if line < first { - first = line + ranges := make(map[int]lineRange) + note := func(p src.XPos) { + line := uint32(p.Line()) + i := int(p.FileIndex()) + lp, found := ranges[i] + change := false + if line < lp.first || !found { + lp.first = line + change = true } - if line > last { - last = line + if line > lp.last { + lp.last = line + change = true + } + if change { + ranges[i] = lp } } @@ -94,12 +139,12 @@ func numberLines(f *Func) { firstPos := src.NoXPos firstPosIndex := -1 if b.Pos.IsStmt() != src.PosNotStmt { - note(b.Pos.Line()) + note(b.Pos) } for i := 0; i < len(b.Values); i++ { v := b.Values[i] if v.Pos.IsStmt() != src.PosNotStmt { - note(v.Pos.Line()) + note(v.Pos) // skip ahead to better instruction for this line if possible i = nextGoodStatementIndex(v, i, b) v = b.Values[i] @@ -114,6 +159,9 @@ func numberLines(f *Func) { if b.Pos.IsStmt() != src.PosNotStmt { b.Pos = b.Pos.WithIsStmt() endlines[b.ID] = b.Pos + if f.pass.debug > 0 { + fmt.Printf("Mark stmt effectively-empty-block %s %s %s\n", f.Name, b, flc(b.Pos)) + } continue } line := src.NoXPos @@ -136,11 +184,18 @@ func numberLines(f *Func) { // check predecessors for any difference; if firstPos differs, then it is a boundary. if len(b.Preds) == 0 { // Don't forget the entry block b.Values[firstPosIndex].Pos = firstPos.WithIsStmt() - } else { + if f.pass.debug > 0 { + fmt.Printf("Mark stmt entry-block %s %s %s %s\n", f.Name, b, b.Values[firstPosIndex], flc(firstPos)) + } + } else { // differing pred for _, p := range b.Preds { pbi := p.Block().ID - if endlines[pbi] != firstPos { + if endlines[pbi].Line() != firstPos.Line() || !endlines[pbi].SameFile(firstPos) { b.Values[firstPosIndex].Pos = firstPos.WithIsStmt() + if f.pass.debug > 0 { + fmt.Printf("Mark stmt differing-pred %s %s %s %s, different=%s ending %s\n", + f.Name, b, b.Values[firstPosIndex], flc(firstPos), p.Block(), flc(endlines[pbi])) + } break } } @@ -151,11 +206,14 @@ func numberLines(f *Func) { if v.Pos.IsStmt() == src.PosNotStmt { continue } - note(v.Pos.Line()) + note(v.Pos) // skip ahead if possible i = nextGoodStatementIndex(v, i, b) v = b.Values[i] if v.Pos.Line() != firstPos.Line() || !v.Pos.SameFile(firstPos) { + if f.pass.debug > 0 { + fmt.Printf("Mark stmt new line %s %s %s %s prev pos = %s\n", f.Name, b, v, flc(v.Pos), flc(firstPos)) + } firstPos = v.Pos v.Pos = v.Pos.WithIsStmt() } else { @@ -163,10 +221,43 @@ func numberLines(f *Func) { } } if b.Pos.IsStmt() != src.PosNotStmt && (b.Pos.Line() != firstPos.Line() || !b.Pos.SameFile(firstPos)) { + if f.pass.debug > 0 { + fmt.Printf("Mark stmt end of block differs %s %s %s prev pos = %s\n", f.Name, b, flc(b.Pos), flc(firstPos)) + } b.Pos = b.Pos.WithIsStmt() firstPos = b.Pos } endlines[b.ID] = firstPos } - f.cachedLineStarts = newBiasedSparseMap(int(first), int(last)) + if f.pass.stats&1 != 0 { + // Report summary statistics on the shape of the sparse map about to be constructed + // TODO use this information to make sparse maps faster. + var entries fileAndPairs + for k, v := range ranges { + entries = append(entries, fileAndPair{int32(k), v}) + } + sort.Sort(entries) + total := uint64(0) // sum over files of maxline(file) - minline(file) + maxfile := int32(0) // max(file indices) + minline := uint32(0xffffffff) // min over files of minline(file) + maxline := uint32(0) // max over files of maxline(file) + for _, v := range entries { + if f.pass.stats > 1 { + f.LogStat("file", v.f, "low", v.lp.first, "high", v.lp.last) + } + total += uint64(v.lp.last - v.lp.first) + if maxfile < v.f { + maxfile = v.f + } + if minline > v.lp.first { + minline = v.lp.first + } + if maxline < v.lp.last { + maxline = v.lp.last + } + } + f.LogStat("SUM_LINE_RANGE", total, "MAXMIN_LINE_RANGE", maxline-minline, "MAXFILE", maxfile, "NFILES", len(entries)) + } + // cachedLineStarts is an empty sparse map for values that are included within ranges. + f.cachedLineStarts = newXposmap(ranges) } diff --git a/src/cmd/compile/internal/ssa/op.go b/src/cmd/compile/internal/ssa/op.go index 43f5c59591..ee764ec0f8 100644 --- a/src/cmd/compile/internal/ssa/op.go +++ b/src/cmd/compile/internal/ssa/op.go @@ -37,6 +37,7 @@ type opInfo struct { hasSideEffects bool // for "reasons", not to be eliminated. E.g., atomic store, #19182. zeroWidth bool // op never translates into any machine code. example: copy, which may sometimes translate to machine code, is not zero-width. symEffect SymEffect // effect this op has on symbol in aux + scale uint8 // amd64/386 indexed load scale } type inputInfo struct { @@ -153,6 +154,18 @@ func makeValAndOff(val, off int64) int64 { return ValAndOff(val<<32 + int64(uint32(off))).Int64() } +// offOnly returns the offset half of ValAndOff vo. +// It is intended for use in rewrite rules. +func offOnly(vo int64) int64 { + return ValAndOff(vo).Off() +} + +// valOnly returns the value half of ValAndOff vo. +// It is intended for use in rewrite rules. +func valOnly(vo int64) int64 { + return ValAndOff(vo).Val() +} + func (x ValAndOff) canAdd(off int64) bool { newoff := x.Off() + off return newoff == int64(int32(newoff)) @@ -164,3 +177,70 @@ func (x ValAndOff) add(off int64) int64 { } return makeValAndOff(x.Val(), x.Off()+off) } + +type BoundsKind uint8 + +const ( + BoundsIndex BoundsKind = iota // indexing operation, 0 <= idx < len failed + BoundsIndexU // ... with unsigned idx + BoundsSliceAlen // 2-arg slicing operation, 0 <= high <= len failed + BoundsSliceAlenU // ... with unsigned high + BoundsSliceAcap // 2-arg slicing operation, 0 <= high <= cap failed + BoundsSliceAcapU // ... with unsigned high + BoundsSliceB // 2-arg slicing operation, 0 <= low <= high failed + BoundsSliceBU // ... with unsigned low + BoundsSlice3Alen // 3-arg slicing operation, 0 <= max <= len failed + BoundsSlice3AlenU // ... with unsigned max + BoundsSlice3Acap // 3-arg slicing operation, 0 <= max <= cap failed + BoundsSlice3AcapU // ... with unsigned max + BoundsSlice3B // 3-arg slicing operation, 0 <= high <= max failed + BoundsSlice3BU // ... with unsigned high + BoundsSlice3C // 3-arg slicing operation, 0 <= low <= high failed + BoundsSlice3CU // ... with unsigned low + BoundsKindCount +) + +// boundsAPI determines which register arguments a bounds check call should use. For an [a:b:c] slice, we do: +// CMPQ c, cap +// JA fail1 +// CMPQ b, c +// JA fail2 +// CMPQ a, b +// JA fail3 +// +// fail1: CALL panicSlice3Acap (c, cap) +// fail2: CALL panicSlice3B (b, c) +// fail3: CALL panicSlice3C (a, b) +// +// When we register allocate that code, we want the same register to be used for +// the first arg of panicSlice3Acap and the second arg to panicSlice3B. That way, +// initializing that register once will satisfy both calls. +// That desire ends up dividing the set of bounds check calls into 3 sets. This function +// determines which set to use for a given panic call. +// The first arg for set 0 should be the second arg for set 1. +// The first arg for set 1 should be the second arg for set 2. +func boundsABI(b int64) int { + switch BoundsKind(b) { + case BoundsSlice3Alen, + BoundsSlice3AlenU, + BoundsSlice3Acap, + BoundsSlice3AcapU: + return 0 + case BoundsSliceAlen, + BoundsSliceAlenU, + BoundsSliceAcap, + BoundsSliceAcapU, + BoundsSlice3B, + BoundsSlice3BU: + return 1 + case BoundsIndex, + BoundsIndexU, + BoundsSliceB, + BoundsSliceBU, + BoundsSlice3C, + BoundsSlice3CU: + return 2 + default: + panic("bad BoundsKind") + } +} diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go index 2278407a26..1026ab7995 100644 --- a/src/cmd/compile/internal/ssa/opGen.go +++ b/src/cmd/compile/internal/ssa/opGen.go @@ -77,6 +77,10 @@ const ( BlockARM64NZW BlockARM64TBZ BlockARM64TBNZ + BlockARM64FLT + BlockARM64FLE + BlockARM64FGT + BlockARM64FGE BlockMIPSEQ BlockMIPSNE @@ -189,6 +193,10 @@ var blockString = [...]string{ BlockARM64NZW: "NZW", BlockARM64TBZ: "TBZ", BlockARM64TBNZ: "TBNZ", + BlockARM64FLT: "FLT", + BlockARM64FLE: "FLE", + BlockARM64FGT: "FGT", + BlockARM64FGE: "FGE", BlockMIPSEQ: "EQ", BlockMIPSNE: "NE", @@ -455,6 +463,12 @@ const ( Op386LoweredGetCallerSP Op386LoweredNilCheck Op386LoweredWB + Op386LoweredPanicBoundsA + Op386LoweredPanicBoundsB + Op386LoweredPanicBoundsC + Op386LoweredPanicExtendA + Op386LoweredPanicExtendB + Op386LoweredPanicExtendC Op386FlagEQ Op386FlagLT_ULT Op386FlagLT_UGT @@ -836,11 +850,18 @@ const ( OpAMD64LoweredGetCallerSP OpAMD64LoweredNilCheck OpAMD64LoweredWB + OpAMD64LoweredPanicBoundsA + OpAMD64LoweredPanicBoundsB + OpAMD64LoweredPanicBoundsC + OpAMD64LoweredPanicExtendA + OpAMD64LoweredPanicExtendB + OpAMD64LoweredPanicExtendC OpAMD64FlagEQ OpAMD64FlagLT_ULT OpAMD64FlagLT_UGT OpAMD64FlagGT_UGT OpAMD64FlagGT_ULT + OpAMD64MOVBatomicload OpAMD64MOVLatomicload OpAMD64MOVQatomicload OpAMD64XCHGL @@ -907,6 +928,7 @@ const ( OpARMSQRTD OpARMCLZ OpARMREV + OpARMREV16 OpARMRBIT OpARMSLL OpARMSLLconst @@ -1106,6 +1128,12 @@ const ( OpARMLoweredGetClosurePtr OpARMLoweredGetCallerSP OpARMLoweredGetCallerPC + OpARMLoweredPanicBoundsA + OpARMLoweredPanicBoundsB + OpARMLoweredPanicBoundsC + OpARMLoweredPanicExtendA + OpARMLoweredPanicExtendB + OpARMLoweredPanicExtendC OpARMFlagEQ OpARMFlagLT_ULT OpARMFlagLT_UGT @@ -1114,10 +1142,16 @@ const ( OpARMInvertFlags OpARMLoweredWB + OpARM64ADCSflags + OpARM64ADCzerocarry OpARM64ADD OpARM64ADDconst + OpARM64ADDSconstflags + OpARM64ADDSflags OpARM64SUB OpARM64SUBconst + OpARM64SBCSflags + OpARM64SUBSflags OpARM64MUL OpARM64MULW OpARM64MNEG @@ -1156,6 +1190,8 @@ const ( OpARM64LoweredMuluhilo OpARM64MVN OpARM64NEG + OpARM64NEGSflags + OpARM64NGCzerocarry OpARM64FABSD OpARM64FNEGS OpARM64FNEGD @@ -1209,6 +1245,8 @@ const ( OpARM64TSTWconst OpARM64FCMPS OpARM64FCMPD + OpARM64FCMPS0 + OpARM64FCMPD0 OpARM64MVNshiftLL OpARM64MVNshiftRL OpARM64MVNshiftRA @@ -1360,6 +1398,10 @@ const ( OpARM64LessEqualU OpARM64GreaterThanU OpARM64GreaterEqualU + OpARM64LessThanF + OpARM64LessEqualF + OpARM64GreaterThanF + OpARM64GreaterEqualF OpARM64DUFFZERO OpARM64LoweredZero OpARM64DUFFCOPY @@ -1374,6 +1416,7 @@ const ( OpARM64FlagGT_ULT OpARM64InvertFlags OpARM64LDAR + OpARM64LDARB OpARM64LDARW OpARM64STLR OpARM64STLRW @@ -1388,6 +1431,9 @@ const ( OpARM64LoweredAtomicAnd8 OpARM64LoweredAtomicOr8 OpARM64LoweredWB + OpARM64LoweredPanicBoundsA + OpARM64LoweredPanicBoundsB + OpARM64LoweredPanicBoundsC OpMIPSADD OpMIPSADDconst @@ -1491,6 +1537,12 @@ const ( OpMIPSLoweredGetCallerSP OpMIPSLoweredGetCallerPC OpMIPSLoweredWB + OpMIPSLoweredPanicBoundsA + OpMIPSLoweredPanicBoundsB + OpMIPSLoweredPanicBoundsC + OpMIPSLoweredPanicExtendA + OpMIPSLoweredPanicExtendB + OpMIPSLoweredPanicExtendC OpMIPS64ADDV OpMIPS64ADDVconst @@ -1583,6 +1635,7 @@ const ( OpMIPS64DUFFZERO OpMIPS64LoweredZero OpMIPS64LoweredMove + OpMIPS64LoweredAtomicLoad8 OpMIPS64LoweredAtomicLoad32 OpMIPS64LoweredAtomicLoad64 OpMIPS64LoweredAtomicStore32 @@ -1604,6 +1657,9 @@ const ( OpMIPS64LoweredGetCallerSP OpMIPS64LoweredGetCallerPC OpMIPS64LoweredWB + OpMIPS64LoweredPanicBoundsA + OpMIPS64LoweredPanicBoundsB + OpMIPS64LoweredPanicBoundsC OpPPC64ADD OpPPC64ADDconst @@ -1633,6 +1689,7 @@ const ( OpPPC64SLW OpPPC64ROTL OpPPC64ROTLW + OpPPC64LoweredAdd64Carry OpPPC64ADDconstForCarry OpPPC64MaskIfNotCarry OpPPC64SRADconst @@ -1645,6 +1702,8 @@ const ( OpPPC64ROTLWconst OpPPC64CNTLZD OpPPC64CNTLZW + OpPPC64CNTTZD + OpPPC64CNTTZW OpPPC64POPCNTD OpPPC64POPCNTW OpPPC64POPCNTB @@ -1772,6 +1831,7 @@ const ( OpPPC64LoweredMove OpPPC64LoweredAtomicStore32 OpPPC64LoweredAtomicStore64 + OpPPC64LoweredAtomicLoad8 OpPPC64LoweredAtomicLoad32 OpPPC64LoweredAtomicLoad64 OpPPC64LoweredAtomicLoadPtr @@ -1784,6 +1844,9 @@ const ( OpPPC64LoweredAtomicAnd8 OpPPC64LoweredAtomicOr8 OpPPC64LoweredWB + OpPPC64LoweredPanicBoundsA + OpPPC64LoweredPanicBoundsB + OpPPC64LoweredPanicBoundsC OpPPC64InvertFlags OpPPC64FlagEQ OpPPC64FlagLT @@ -1863,6 +1926,11 @@ const ( OpS390XXORWconst OpS390XXORload OpS390XXORWload + OpS390XADDC + OpS390XADDCconst + OpS390XADDE + OpS390XSUBC + OpS390XSUBE OpS390XCMP OpS390XCMPW OpS390XCMPU @@ -1979,9 +2047,14 @@ const ( OpS390XLoweredRound32F OpS390XLoweredRound64F OpS390XLoweredWB + OpS390XLoweredPanicBoundsA + OpS390XLoweredPanicBoundsB + OpS390XLoweredPanicBoundsC OpS390XFlagEQ OpS390XFlagLT OpS390XFlagGT + OpS390XFlagOV + OpS390XMOVBZatomicload OpS390XMOVWZatomicload OpS390XMOVDatomicload OpS390XMOVWatomicstore @@ -2075,10 +2148,24 @@ const ( OpWasmF64Sub OpWasmF64Mul OpWasmF64Div - OpWasmI64TruncSF64 - OpWasmI64TruncUF64 - OpWasmF64ConvertSI64 - OpWasmF64ConvertUI64 + OpWasmI64TruncSatF64S + OpWasmI64TruncSatF64U + OpWasmF64ConvertI64S + OpWasmF64ConvertI64U + OpWasmI64Extend8S + OpWasmI64Extend16S + OpWasmI64Extend32S + OpWasmF64Sqrt + OpWasmF64Trunc + OpWasmF64Ceil + OpWasmF64Floor + OpWasmF64Nearest + OpWasmF64Abs + OpWasmF64Copysign + OpWasmI64Ctz + OpWasmI64Clz + OpWasmI64Rotl + OpWasmI64Popcnt OpAdd8 OpAdd16 @@ -2325,6 +2412,8 @@ const ( OpMoveWB OpZeroWB OpWB + OpPanicBounds + OpPanicExtend OpClosureCall OpStaticCall OpInterCall @@ -2421,6 +2510,7 @@ const ( OpCvt64Fto64U OpSelect0 OpSelect1 + OpAtomicLoad8 OpAtomicLoad32 OpAtomicLoad64 OpAtomicLoadPtr @@ -5562,6 +5652,75 @@ var opcodeTable = [...]opInfo{ clobbers: 65280, // X0 X1 X2 X3 X4 X5 X6 X7 }, }, + { + name: "LoweredPanicBoundsA", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4}, // DX + {1, 8}, // BX + }, + }, + }, + { + name: "LoweredPanicBoundsB", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 2}, // CX + {1, 4}, // DX + }, + }, + }, + { + name: "LoweredPanicBoundsC", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 1}, // AX + {1, 2}, // CX + }, + }, + }, + { + name: "LoweredPanicExtendA", + auxType: auxInt64, + argLen: 4, + reg: regInfo{ + inputs: []inputInfo{ + {0, 64}, // SI + {1, 4}, // DX + {2, 8}, // BX + }, + }, + }, + { + name: "LoweredPanicExtendB", + auxType: auxInt64, + argLen: 4, + reg: regInfo{ + inputs: []inputInfo{ + {0, 64}, // SI + {1, 2}, // CX + {2, 4}, // DX + }, + }, + }, + { + name: "LoweredPanicExtendC", + auxType: auxInt64, + argLen: 4, + reg: regInfo{ + inputs: []inputInfo{ + {0, 64}, // SI + {1, 1}, // AX + {2, 2}, // CX + }, + }, + }, { name: "FlagEQ", argLen: 0, @@ -5832,6 +5991,7 @@ var opcodeTable = [...]opInfo{ argLen: 3, symEffect: SymRead, asm: x86.AMOVSS, + scale: 1, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -5848,6 +6008,7 @@ var opcodeTable = [...]opInfo{ argLen: 3, symEffect: SymRead, asm: x86.AMOVSS, + scale: 4, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -5864,6 +6025,7 @@ var opcodeTable = [...]opInfo{ argLen: 3, symEffect: SymRead, asm: x86.AMOVSD, + scale: 1, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -5880,6 +6042,7 @@ var opcodeTable = [...]opInfo{ argLen: 3, symEffect: SymRead, asm: x86.AMOVSD, + scale: 8, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -5924,6 +6087,7 @@ var opcodeTable = [...]opInfo{ argLen: 4, symEffect: SymWrite, asm: x86.AMOVSS, + scale: 1, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -5938,6 +6102,7 @@ var opcodeTable = [...]opInfo{ argLen: 4, symEffect: SymWrite, asm: x86.AMOVSS, + scale: 4, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -5952,6 +6117,7 @@ var opcodeTable = [...]opInfo{ argLen: 4, symEffect: SymWrite, asm: x86.AMOVSD, + scale: 1, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -5966,6 +6132,7 @@ var opcodeTable = [...]opInfo{ argLen: 4, symEffect: SymWrite, asm: x86.AMOVSD, + scale: 8, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10097,6 +10264,7 @@ var opcodeTable = [...]opInfo{ commutative: true, symEffect: SymAddr, asm: x86.ALEAQ, + scale: 1, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10114,6 +10282,7 @@ var opcodeTable = [...]opInfo{ commutative: true, symEffect: SymAddr, asm: x86.ALEAL, + scale: 1, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10131,6 +10300,7 @@ var opcodeTable = [...]opInfo{ commutative: true, symEffect: SymAddr, asm: x86.ALEAW, + scale: 1, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10147,6 +10317,7 @@ var opcodeTable = [...]opInfo{ argLen: 2, symEffect: SymAddr, asm: x86.ALEAQ, + scale: 2, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10163,6 +10334,7 @@ var opcodeTable = [...]opInfo{ argLen: 2, symEffect: SymAddr, asm: x86.ALEAL, + scale: 2, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10179,6 +10351,7 @@ var opcodeTable = [...]opInfo{ argLen: 2, symEffect: SymAddr, asm: x86.ALEAW, + scale: 2, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10195,6 +10368,7 @@ var opcodeTable = [...]opInfo{ argLen: 2, symEffect: SymAddr, asm: x86.ALEAQ, + scale: 4, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10211,6 +10385,7 @@ var opcodeTable = [...]opInfo{ argLen: 2, symEffect: SymAddr, asm: x86.ALEAL, + scale: 4, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10227,6 +10402,7 @@ var opcodeTable = [...]opInfo{ argLen: 2, symEffect: SymAddr, asm: x86.ALEAW, + scale: 4, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10243,6 +10419,7 @@ var opcodeTable = [...]opInfo{ argLen: 2, symEffect: SymAddr, asm: x86.ALEAQ, + scale: 8, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10259,6 +10436,7 @@ var opcodeTable = [...]opInfo{ argLen: 2, symEffect: SymAddr, asm: x86.ALEAL, + scale: 8, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10275,6 +10453,7 @@ var opcodeTable = [...]opInfo{ argLen: 2, symEffect: SymAddr, asm: x86.ALEAW, + scale: 8, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10490,6 +10669,7 @@ var opcodeTable = [...]opInfo{ commutative: true, symEffect: SymRead, asm: x86.AMOVBLZX, + scale: 1, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10507,6 +10687,7 @@ var opcodeTable = [...]opInfo{ commutative: true, symEffect: SymRead, asm: x86.AMOVWLZX, + scale: 1, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10523,6 +10704,7 @@ var opcodeTable = [...]opInfo{ argLen: 3, symEffect: SymRead, asm: x86.AMOVWLZX, + scale: 2, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10540,6 +10722,7 @@ var opcodeTable = [...]opInfo{ commutative: true, symEffect: SymRead, asm: x86.AMOVL, + scale: 1, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10556,6 +10739,7 @@ var opcodeTable = [...]opInfo{ argLen: 3, symEffect: SymRead, asm: x86.AMOVL, + scale: 4, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10572,6 +10756,7 @@ var opcodeTable = [...]opInfo{ argLen: 3, symEffect: SymRead, asm: x86.AMOVL, + scale: 8, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10589,6 +10774,7 @@ var opcodeTable = [...]opInfo{ commutative: true, symEffect: SymRead, asm: x86.AMOVQ, + scale: 1, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10605,6 +10791,7 @@ var opcodeTable = [...]opInfo{ argLen: 3, symEffect: SymRead, asm: x86.AMOVQ, + scale: 8, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10621,6 +10808,7 @@ var opcodeTable = [...]opInfo{ argLen: 4, symEffect: SymWrite, asm: x86.AMOVB, + scale: 1, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10635,6 +10823,7 @@ var opcodeTable = [...]opInfo{ argLen: 4, symEffect: SymWrite, asm: x86.AMOVW, + scale: 1, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10649,6 +10838,7 @@ var opcodeTable = [...]opInfo{ argLen: 4, symEffect: SymWrite, asm: x86.AMOVW, + scale: 2, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10663,6 +10853,7 @@ var opcodeTable = [...]opInfo{ argLen: 4, symEffect: SymWrite, asm: x86.AMOVL, + scale: 1, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10677,6 +10868,7 @@ var opcodeTable = [...]opInfo{ argLen: 4, symEffect: SymWrite, asm: x86.AMOVL, + scale: 4, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10691,6 +10883,7 @@ var opcodeTable = [...]opInfo{ argLen: 4, symEffect: SymWrite, asm: x86.AMOVL, + scale: 8, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10705,6 +10898,7 @@ var opcodeTable = [...]opInfo{ argLen: 4, symEffect: SymWrite, asm: x86.AMOVQ, + scale: 1, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10719,6 +10913,7 @@ var opcodeTable = [...]opInfo{ argLen: 4, symEffect: SymWrite, asm: x86.AMOVQ, + scale: 8, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10785,6 +10980,7 @@ var opcodeTable = [...]opInfo{ argLen: 3, symEffect: SymWrite, asm: x86.AMOVB, + scale: 1, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10798,6 +10994,7 @@ var opcodeTable = [...]opInfo{ argLen: 3, symEffect: SymWrite, asm: x86.AMOVW, + scale: 1, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10811,6 +11008,7 @@ var opcodeTable = [...]opInfo{ argLen: 3, symEffect: SymWrite, asm: x86.AMOVW, + scale: 2, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10824,6 +11022,7 @@ var opcodeTable = [...]opInfo{ argLen: 3, symEffect: SymWrite, asm: x86.AMOVL, + scale: 1, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10837,6 +11036,7 @@ var opcodeTable = [...]opInfo{ argLen: 3, symEffect: SymWrite, asm: x86.AMOVL, + scale: 4, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10850,6 +11050,7 @@ var opcodeTable = [...]opInfo{ argLen: 3, symEffect: SymWrite, asm: x86.AMOVQ, + scale: 1, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -10863,6 +11064,7 @@ var opcodeTable = [...]opInfo{ argLen: 3, symEffect: SymWrite, asm: x86.AMOVQ, + scale: 8, reg: regInfo{ inputs: []inputInfo{ {1, 65535}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 @@ -11044,6 +11246,75 @@ var opcodeTable = [...]opInfo{ clobbers: 4294901760, // X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 }, }, + { + name: "LoweredPanicBoundsA", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4}, // DX + {1, 8}, // BX + }, + }, + }, + { + name: "LoweredPanicBoundsB", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 2}, // CX + {1, 4}, // DX + }, + }, + }, + { + name: "LoweredPanicBoundsC", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 1}, // AX + {1, 2}, // CX + }, + }, + }, + { + name: "LoweredPanicExtendA", + auxType: auxInt64, + argLen: 4, + reg: regInfo{ + inputs: []inputInfo{ + {0, 64}, // SI + {1, 4}, // DX + {2, 8}, // BX + }, + }, + }, + { + name: "LoweredPanicExtendB", + auxType: auxInt64, + argLen: 4, + reg: regInfo{ + inputs: []inputInfo{ + {0, 64}, // SI + {1, 2}, // CX + {2, 4}, // DX + }, + }, + }, + { + name: "LoweredPanicExtendC", + auxType: auxInt64, + argLen: 4, + reg: regInfo{ + inputs: []inputInfo{ + {0, 64}, // SI + {1, 1}, // AX + {2, 2}, // CX + }, + }, + }, { name: "FlagEQ", argLen: 0, @@ -11069,6 +11340,22 @@ var opcodeTable = [...]opInfo{ argLen: 0, reg: regInfo{}, }, + { + name: "MOVBatomicload", + auxType: auxSymOff, + argLen: 2, + faultOnNilArg0: true, + symEffect: SymRead, + asm: x86.AMOVB, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB + }, + outputs: []outputInfo{ + {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 + }, + }, + }, { name: "MOVLatomicload", auxType: auxSymOff, @@ -12036,6 +12323,19 @@ var opcodeTable = [...]opInfo{ }, }, }, + { + name: "REV16", + argLen: 1, + asm: arm.AREV16, + reg: regInfo{ + inputs: []inputInfo{ + {0, 22527}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 g R12 R14 + }, + outputs: []outputInfo{ + {0, 21503}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R12 R14 + }, + }, + }, { name: "RBIT", argLen: 1, @@ -14765,6 +15065,75 @@ var opcodeTable = [...]opInfo{ }, }, }, + { + name: "LoweredPanicBoundsA", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4}, // R2 + {1, 8}, // R3 + }, + }, + }, + { + name: "LoweredPanicBoundsB", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 2}, // R1 + {1, 4}, // R2 + }, + }, + }, + { + name: "LoweredPanicBoundsC", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 1}, // R0 + {1, 2}, // R1 + }, + }, + }, + { + name: "LoweredPanicExtendA", + auxType: auxInt64, + argLen: 4, + reg: regInfo{ + inputs: []inputInfo{ + {0, 16}, // R4 + {1, 4}, // R2 + {2, 8}, // R3 + }, + }, + }, + { + name: "LoweredPanicExtendB", + auxType: auxInt64, + argLen: 4, + reg: regInfo{ + inputs: []inputInfo{ + {0, 16}, // R4 + {1, 2}, // R1 + {2, 4}, // R2 + }, + }, + }, + { + name: "LoweredPanicExtendC", + auxType: auxInt64, + argLen: 4, + reg: regInfo{ + inputs: []inputInfo{ + {0, 16}, // R4 + {1, 1}, // R0 + {2, 2}, // R1 + }, + }, + }, { name: "FlagEQ", argLen: 0, @@ -14810,6 +15179,32 @@ var opcodeTable = [...]opInfo{ }, }, + { + name: "ADCSflags", + argLen: 3, + commutative: true, + asm: arm64.AADCS, + reg: regInfo{ + inputs: []inputInfo{ + {0, 670826495}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 R30 + {1, 670826495}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 R30 + }, + outputs: []outputInfo{ + {1, 0}, + {0, 670826495}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 R30 + }, + }, + }, + { + name: "ADCzerocarry", + argLen: 1, + asm: arm64.AADC, + reg: regInfo{ + outputs: []outputInfo{ + {0, 670826495}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 R30 + }, + }, + }, { name: "ADD", argLen: 2, @@ -14839,6 +15234,37 @@ var opcodeTable = [...]opInfo{ }, }, }, + { + name: "ADDSconstflags", + auxType: auxInt64, + argLen: 1, + asm: arm64.AADDS, + reg: regInfo{ + inputs: []inputInfo{ + {0, 805044223}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 g R30 + }, + outputs: []outputInfo{ + {1, 0}, + {0, 670826495}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 R30 + }, + }, + }, + { + name: "ADDSflags", + argLen: 2, + commutative: true, + asm: arm64.AADDS, + reg: regInfo{ + inputs: []inputInfo{ + {0, 670826495}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 R30 + {1, 670826495}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 R30 + }, + outputs: []outputInfo{ + {1, 0}, + {0, 670826495}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 R30 + }, + }, + }, { name: "SUB", argLen: 2, @@ -14867,6 +15293,36 @@ var opcodeTable = [...]opInfo{ }, }, }, + { + name: "SBCSflags", + argLen: 3, + asm: arm64.ASBCS, + reg: regInfo{ + inputs: []inputInfo{ + {0, 670826495}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 R30 + {1, 670826495}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 R30 + }, + outputs: []outputInfo{ + {1, 0}, + {0, 670826495}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 R30 + }, + }, + }, + { + name: "SUBSflags", + argLen: 2, + asm: arm64.ASUBS, + reg: regInfo{ + inputs: []inputInfo{ + {0, 670826495}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 R30 + {1, 670826495}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 R30 + }, + outputs: []outputInfo{ + {1, 0}, + {0, 670826495}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 R30 + }, + }, + }, { name: "MUL", argLen: 2, @@ -15415,6 +15871,30 @@ var opcodeTable = [...]opInfo{ }, }, }, + { + name: "NEGSflags", + argLen: 1, + asm: arm64.ANEGS, + reg: regInfo{ + inputs: []inputInfo{ + {0, 805044223}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 g R30 + }, + outputs: []outputInfo{ + {1, 0}, + {0, 670826495}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 R30 + }, + }, + }, + { + name: "NGCzerocarry", + argLen: 1, + asm: arm64.ANGC, + reg: regInfo{ + outputs: []outputInfo{ + {0, 670826495}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 R30 + }, + }, + }, { name: "FABSD", argLen: 1, @@ -16120,6 +16600,26 @@ var opcodeTable = [...]opInfo{ }, }, }, + { + name: "FCMPS0", + argLen: 1, + asm: arm64.AFCMPS, + reg: regInfo{ + inputs: []inputInfo{ + {0, 9223372034707292160}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + }, + }, + }, + { + name: "FCMPD0", + argLen: 1, + asm: arm64.AFCMPD, + reg: regInfo{ + inputs: []inputInfo{ + {0, 9223372034707292160}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + }, + }, + }, { name: "MVNshiftLL", auxType: auxInt64, @@ -18124,6 +18624,42 @@ var opcodeTable = [...]opInfo{ }, }, }, + { + name: "LessThanF", + argLen: 1, + reg: regInfo{ + outputs: []outputInfo{ + {0, 670826495}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 R30 + }, + }, + }, + { + name: "LessEqualF", + argLen: 1, + reg: regInfo{ + outputs: []outputInfo{ + {0, 670826495}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 R30 + }, + }, + }, + { + name: "GreaterThanF", + argLen: 1, + reg: regInfo{ + outputs: []outputInfo{ + {0, 670826495}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 R30 + }, + }, + }, + { + name: "GreaterEqualF", + argLen: 1, + reg: regInfo{ + outputs: []outputInfo{ + {0, 670826495}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 R30 + }, + }, + }, { name: "DUFFZERO", auxType: auxInt64, @@ -18252,6 +18788,20 @@ var opcodeTable = [...]opInfo{ }, }, }, + { + name: "LDARB", + argLen: 2, + faultOnNilArg0: true, + asm: arm64.ALDARB, + reg: regInfo{ + inputs: []inputInfo{ + {0, 9223372038733561855}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 g R30 SP SB + }, + outputs: []outputInfo{ + {0, 670826495}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 R30 + }, + }, + }, { name: "LDARW", argLen: 2, @@ -18472,6 +19022,39 @@ var opcodeTable = [...]opInfo{ clobbers: 9223372035244163072, // R30 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 }, }, + { + name: "LoweredPanicBoundsA", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4}, // R2 + {1, 8}, // R3 + }, + }, + }, + { + name: "LoweredPanicBoundsB", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 2}, // R1 + {1, 4}, // R2 + }, + }, + }, + { + name: "LoweredPanicBoundsC", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 1}, // R0 + {1, 2}, // R1 + }, + }, + }, { name: "ADD", @@ -19862,6 +20445,75 @@ var opcodeTable = [...]opInfo{ clobbers: 140737219919872, // R31 F0 F2 F4 F6 F8 F10 F12 F14 F16 F18 F20 F22 F24 F26 F28 F30 HI LO }, }, + { + name: "LoweredPanicBoundsA", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 8}, // R3 + {1, 16}, // R4 + }, + }, + }, + { + name: "LoweredPanicBoundsB", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4}, // R2 + {1, 8}, // R3 + }, + }, + }, + { + name: "LoweredPanicBoundsC", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 2}, // R1 + {1, 4}, // R2 + }, + }, + }, + { + name: "LoweredPanicExtendA", + auxType: auxInt64, + argLen: 4, + reg: regInfo{ + inputs: []inputInfo{ + {0, 32}, // R5 + {1, 8}, // R3 + {2, 16}, // R4 + }, + }, + }, + { + name: "LoweredPanicExtendB", + auxType: auxInt64, + argLen: 4, + reg: regInfo{ + inputs: []inputInfo{ + {0, 32}, // R5 + {1, 4}, // R2 + {2, 8}, // R3 + }, + }, + }, + { + name: "LoweredPanicExtendC", + auxType: auxInt64, + argLen: 4, + reg: regInfo{ + inputs: []inputInfo{ + {0, 32}, // R5 + {1, 2}, // R1 + {2, 4}, // R2 + }, + }, + }, { name: "ADDV", @@ -21117,6 +21769,19 @@ var opcodeTable = [...]opInfo{ clobbers: 6, // R1 R2 }, }, + { + name: "LoweredAtomicLoad8", + argLen: 2, + faultOnNilArg0: true, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4611686018695823358}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R22 R24 R25 SP g R31 SB + }, + outputs: []outputInfo{ + {0, 167772158}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R22 R24 R25 R31 + }, + }, + }, { name: "LoweredAtomicLoad32", argLen: 2, @@ -21392,6 +22057,39 @@ var opcodeTable = [...]opInfo{ clobbers: 4611686018293170176, // R31 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 HI LO }, }, + { + name: "LoweredPanicBoundsA", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 8}, // R3 + {1, 16}, // R4 + }, + }, + }, + { + name: "LoweredPanicBoundsB", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4}, // R2 + {1, 8}, // R3 + }, + }, + }, + { + name: "LoweredPanicBoundsC", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 2}, // R1 + {1, 4}, // R2 + }, + }, + }, { name: "ADD", @@ -21801,6 +22499,22 @@ var opcodeTable = [...]opInfo{ }, }, }, + { + name: "LoweredAdd64Carry", + argLen: 3, + resultNotInArgs: true, + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073733630}, // SP SB R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29 + {1, 1073733630}, // SP SB R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29 + {2, 1073733630}, // SP SB R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29 + }, + outputs: []outputInfo{ + {0, 1073733624}, // R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29 + {1, 1073733624}, // R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29 + }, + }, + }, { name: "ADDconstForCarry", auxType: auxInt16, @@ -21963,6 +22677,32 @@ var opcodeTable = [...]opInfo{ }, }, }, + { + name: "CNTTZD", + argLen: 1, + asm: ppc64.ACNTTZD, + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073733630}, // SP SB R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29 + }, + outputs: []outputInfo{ + {0, 1073733624}, // R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29 + }, + }, + }, + { + name: "CNTTZW", + argLen: 1, + asm: ppc64.ACNTTZW, + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073733630}, // SP SB R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29 + }, + outputs: []outputInfo{ + {0, 1073733624}, // R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29 + }, + }, + }, { name: "POPCNTD", argLen: 1, @@ -23681,6 +24421,21 @@ var opcodeTable = [...]opInfo{ }, }, }, + { + name: "LoweredAtomicLoad8", + auxType: auxInt64, + argLen: 2, + clobberFlags: true, + faultOnNilArg0: true, + reg: regInfo{ + inputs: []inputInfo{ + {0, 1073733630}, // SP SB R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29 + }, + outputs: []outputInfo{ + {0, 1073733624}, // R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25 R26 R27 R28 R29 + }, + }, + }, { name: "LoweredAtomicLoad32", auxType: auxInt64, @@ -23872,6 +24627,39 @@ var opcodeTable = [...]opInfo{ clobbers: 576460746931503104, // R16 R17 R18 R19 R22 R23 R24 R25 R26 R27 R28 R29 R31 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 }, }, + { + name: "LoweredPanicBoundsA", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 32}, // R5 + {1, 64}, // R6 + }, + }, + }, + { + name: "LoweredPanicBoundsB", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 16}, // R4 + {1, 32}, // R5 + }, + }, + }, + { + name: "LoweredPanicBoundsC", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 8}, // R3 + {1, 16}, // R4 + }, + }, + }, { name: "InvertFlags", argLen: 1, @@ -25093,6 +25881,80 @@ var opcodeTable = [...]opInfo{ }, }, }, + { + name: "ADDC", + argLen: 2, + commutative: true, + asm: s390x.AADDC, + reg: regInfo{ + inputs: []inputInfo{ + {0, 23551}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 + {1, 23551}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 + }, + outputs: []outputInfo{ + {0, 23551}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 + }, + }, + }, + { + name: "ADDCconst", + auxType: auxInt16, + argLen: 1, + asm: s390x.AADDC, + reg: regInfo{ + inputs: []inputInfo{ + {0, 23551}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 + }, + outputs: []outputInfo{ + {0, 23551}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 + }, + }, + }, + { + name: "ADDE", + argLen: 3, + commutative: true, + resultInArg0: true, + asm: s390x.AADDE, + reg: regInfo{ + inputs: []inputInfo{ + {0, 23551}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 + {1, 23551}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 + }, + outputs: []outputInfo{ + {0, 23551}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 + }, + }, + }, + { + name: "SUBC", + argLen: 2, + asm: s390x.ASUBC, + reg: regInfo{ + inputs: []inputInfo{ + {0, 23551}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 + {1, 23551}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 + }, + outputs: []outputInfo{ + {0, 23551}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 + }, + }, + }, + { + name: "SUBE", + argLen: 3, + resultInArg0: true, + asm: s390x.ASUBE, + reg: regInfo{ + inputs: []inputInfo{ + {0, 23551}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 + {1, 23551}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 + }, + outputs: []outputInfo{ + {0, 23551}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 + }, + }, + }, { name: "CMP", argLen: 2, @@ -25926,7 +26788,6 @@ var opcodeTable = [...]opInfo{ name: "MOVBZload", auxType: auxSymOff, argLen: 2, - clobberFlags: true, faultOnNilArg0: true, symEffect: SymRead, asm: s390x.AMOVBZ, @@ -25943,7 +26804,6 @@ var opcodeTable = [...]opInfo{ name: "MOVBload", auxType: auxSymOff, argLen: 2, - clobberFlags: true, faultOnNilArg0: true, symEffect: SymRead, asm: s390x.AMOVB, @@ -25960,7 +26820,6 @@ var opcodeTable = [...]opInfo{ name: "MOVHZload", auxType: auxSymOff, argLen: 2, - clobberFlags: true, faultOnNilArg0: true, symEffect: SymRead, asm: s390x.AMOVHZ, @@ -25977,7 +26836,6 @@ var opcodeTable = [...]opInfo{ name: "MOVHload", auxType: auxSymOff, argLen: 2, - clobberFlags: true, faultOnNilArg0: true, symEffect: SymRead, asm: s390x.AMOVH, @@ -25994,7 +26852,6 @@ var opcodeTable = [...]opInfo{ name: "MOVWZload", auxType: auxSymOff, argLen: 2, - clobberFlags: true, faultOnNilArg0: true, symEffect: SymRead, asm: s390x.AMOVWZ, @@ -26011,7 +26868,6 @@ var opcodeTable = [...]opInfo{ name: "MOVWload", auxType: auxSymOff, argLen: 2, - clobberFlags: true, faultOnNilArg0: true, symEffect: SymRead, asm: s390x.AMOVW, @@ -26028,7 +26884,6 @@ var opcodeTable = [...]opInfo{ name: "MOVDload", auxType: auxSymOff, argLen: 2, - clobberFlags: true, faultOnNilArg0: true, symEffect: SymRead, asm: s390x.AMOVD, @@ -26071,7 +26926,6 @@ var opcodeTable = [...]opInfo{ name: "MOVHBRload", auxType: auxSymOff, argLen: 2, - clobberFlags: true, faultOnNilArg0: true, symEffect: SymRead, asm: s390x.AMOVHBR, @@ -26088,7 +26942,6 @@ var opcodeTable = [...]opInfo{ name: "MOVWBRload", auxType: auxSymOff, argLen: 2, - clobberFlags: true, faultOnNilArg0: true, symEffect: SymRead, asm: s390x.AMOVWBR, @@ -26105,7 +26958,6 @@ var opcodeTable = [...]opInfo{ name: "MOVDBRload", auxType: auxSymOff, argLen: 2, - clobberFlags: true, faultOnNilArg0: true, symEffect: SymRead, asm: s390x.AMOVDBR, @@ -26122,7 +26974,6 @@ var opcodeTable = [...]opInfo{ name: "MOVBstore", auxType: auxSymOff, argLen: 3, - clobberFlags: true, faultOnNilArg0: true, symEffect: SymWrite, asm: s390x.AMOVB, @@ -26137,7 +26988,6 @@ var opcodeTable = [...]opInfo{ name: "MOVHstore", auxType: auxSymOff, argLen: 3, - clobberFlags: true, faultOnNilArg0: true, symEffect: SymWrite, asm: s390x.AMOVH, @@ -26152,7 +27002,6 @@ var opcodeTable = [...]opInfo{ name: "MOVWstore", auxType: auxSymOff, argLen: 3, - clobberFlags: true, faultOnNilArg0: true, symEffect: SymWrite, asm: s390x.AMOVW, @@ -26167,7 +27016,6 @@ var opcodeTable = [...]opInfo{ name: "MOVDstore", auxType: auxSymOff, argLen: 3, - clobberFlags: true, faultOnNilArg0: true, symEffect: SymWrite, asm: s390x.AMOVD, @@ -26182,7 +27030,6 @@ var opcodeTable = [...]opInfo{ name: "MOVHBRstore", auxType: auxSymOff, argLen: 3, - clobberFlags: true, faultOnNilArg0: true, symEffect: SymWrite, asm: s390x.AMOVHBR, @@ -26197,7 +27044,6 @@ var opcodeTable = [...]opInfo{ name: "MOVWBRstore", auxType: auxSymOff, argLen: 3, - clobberFlags: true, faultOnNilArg0: true, symEffect: SymWrite, asm: s390x.AMOVWBR, @@ -26212,7 +27058,6 @@ var opcodeTable = [...]opInfo{ name: "MOVDBRstore", auxType: auxSymOff, argLen: 3, - clobberFlags: true, faultOnNilArg0: true, symEffect: SymWrite, asm: s390x.AMOVDBR, @@ -26240,13 +27085,12 @@ var opcodeTable = [...]opInfo{ }, }, { - name: "MOVBZloadidx", - auxType: auxSymOff, - argLen: 3, - commutative: true, - clobberFlags: true, - symEffect: SymRead, - asm: s390x.AMOVBZ, + name: "MOVBZloadidx", + auxType: auxSymOff, + argLen: 3, + commutative: true, + symEffect: SymRead, + asm: s390x.AMOVBZ, reg: regInfo{ inputs: []inputInfo{ {1, 56318}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 SP @@ -26258,13 +27102,12 @@ var opcodeTable = [...]opInfo{ }, }, { - name: "MOVBloadidx", - auxType: auxSymOff, - argLen: 3, - commutative: true, - clobberFlags: true, - symEffect: SymRead, - asm: s390x.AMOVB, + name: "MOVBloadidx", + auxType: auxSymOff, + argLen: 3, + commutative: true, + symEffect: SymRead, + asm: s390x.AMOVB, reg: regInfo{ inputs: []inputInfo{ {1, 56318}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 SP @@ -26276,13 +27119,12 @@ var opcodeTable = [...]opInfo{ }, }, { - name: "MOVHZloadidx", - auxType: auxSymOff, - argLen: 3, - commutative: true, - clobberFlags: true, - symEffect: SymRead, - asm: s390x.AMOVHZ, + name: "MOVHZloadidx", + auxType: auxSymOff, + argLen: 3, + commutative: true, + symEffect: SymRead, + asm: s390x.AMOVHZ, reg: regInfo{ inputs: []inputInfo{ {1, 56318}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 SP @@ -26294,13 +27136,12 @@ var opcodeTable = [...]opInfo{ }, }, { - name: "MOVHloadidx", - auxType: auxSymOff, - argLen: 3, - commutative: true, - clobberFlags: true, - symEffect: SymRead, - asm: s390x.AMOVH, + name: "MOVHloadidx", + auxType: auxSymOff, + argLen: 3, + commutative: true, + symEffect: SymRead, + asm: s390x.AMOVH, reg: regInfo{ inputs: []inputInfo{ {1, 56318}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 SP @@ -26312,13 +27153,12 @@ var opcodeTable = [...]opInfo{ }, }, { - name: "MOVWZloadidx", - auxType: auxSymOff, - argLen: 3, - commutative: true, - clobberFlags: true, - symEffect: SymRead, - asm: s390x.AMOVWZ, + name: "MOVWZloadidx", + auxType: auxSymOff, + argLen: 3, + commutative: true, + symEffect: SymRead, + asm: s390x.AMOVWZ, reg: regInfo{ inputs: []inputInfo{ {1, 56318}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 SP @@ -26330,13 +27170,12 @@ var opcodeTable = [...]opInfo{ }, }, { - name: "MOVWloadidx", - auxType: auxSymOff, - argLen: 3, - commutative: true, - clobberFlags: true, - symEffect: SymRead, - asm: s390x.AMOVW, + name: "MOVWloadidx", + auxType: auxSymOff, + argLen: 3, + commutative: true, + symEffect: SymRead, + asm: s390x.AMOVW, reg: regInfo{ inputs: []inputInfo{ {1, 56318}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 SP @@ -26348,13 +27187,12 @@ var opcodeTable = [...]opInfo{ }, }, { - name: "MOVDloadidx", - auxType: auxSymOff, - argLen: 3, - commutative: true, - clobberFlags: true, - symEffect: SymRead, - asm: s390x.AMOVD, + name: "MOVDloadidx", + auxType: auxSymOff, + argLen: 3, + commutative: true, + symEffect: SymRead, + asm: s390x.AMOVD, reg: regInfo{ inputs: []inputInfo{ {1, 56318}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 SP @@ -26366,13 +27204,12 @@ var opcodeTable = [...]opInfo{ }, }, { - name: "MOVHBRloadidx", - auxType: auxSymOff, - argLen: 3, - commutative: true, - clobberFlags: true, - symEffect: SymRead, - asm: s390x.AMOVHBR, + name: "MOVHBRloadidx", + auxType: auxSymOff, + argLen: 3, + commutative: true, + symEffect: SymRead, + asm: s390x.AMOVHBR, reg: regInfo{ inputs: []inputInfo{ {1, 56318}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 SP @@ -26384,13 +27221,12 @@ var opcodeTable = [...]opInfo{ }, }, { - name: "MOVWBRloadidx", - auxType: auxSymOff, - argLen: 3, - commutative: true, - clobberFlags: true, - symEffect: SymRead, - asm: s390x.AMOVWBR, + name: "MOVWBRloadidx", + auxType: auxSymOff, + argLen: 3, + commutative: true, + symEffect: SymRead, + asm: s390x.AMOVWBR, reg: regInfo{ inputs: []inputInfo{ {1, 56318}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 SP @@ -26402,13 +27238,12 @@ var opcodeTable = [...]opInfo{ }, }, { - name: "MOVDBRloadidx", - auxType: auxSymOff, - argLen: 3, - commutative: true, - clobberFlags: true, - symEffect: SymRead, - asm: s390x.AMOVDBR, + name: "MOVDBRloadidx", + auxType: auxSymOff, + argLen: 3, + commutative: true, + symEffect: SymRead, + asm: s390x.AMOVDBR, reg: regInfo{ inputs: []inputInfo{ {1, 56318}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 SP @@ -26420,13 +27255,12 @@ var opcodeTable = [...]opInfo{ }, }, { - name: "MOVBstoreidx", - auxType: auxSymOff, - argLen: 4, - commutative: true, - clobberFlags: true, - symEffect: SymWrite, - asm: s390x.AMOVB, + name: "MOVBstoreidx", + auxType: auxSymOff, + argLen: 4, + commutative: true, + symEffect: SymWrite, + asm: s390x.AMOVB, reg: regInfo{ inputs: []inputInfo{ {0, 56318}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 SP @@ -26436,13 +27270,12 @@ var opcodeTable = [...]opInfo{ }, }, { - name: "MOVHstoreidx", - auxType: auxSymOff, - argLen: 4, - commutative: true, - clobberFlags: true, - symEffect: SymWrite, - asm: s390x.AMOVH, + name: "MOVHstoreidx", + auxType: auxSymOff, + argLen: 4, + commutative: true, + symEffect: SymWrite, + asm: s390x.AMOVH, reg: regInfo{ inputs: []inputInfo{ {0, 56318}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 SP @@ -26452,13 +27285,12 @@ var opcodeTable = [...]opInfo{ }, }, { - name: "MOVWstoreidx", - auxType: auxSymOff, - argLen: 4, - commutative: true, - clobberFlags: true, - symEffect: SymWrite, - asm: s390x.AMOVW, + name: "MOVWstoreidx", + auxType: auxSymOff, + argLen: 4, + commutative: true, + symEffect: SymWrite, + asm: s390x.AMOVW, reg: regInfo{ inputs: []inputInfo{ {0, 56318}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 SP @@ -26468,13 +27300,12 @@ var opcodeTable = [...]opInfo{ }, }, { - name: "MOVDstoreidx", - auxType: auxSymOff, - argLen: 4, - commutative: true, - clobberFlags: true, - symEffect: SymWrite, - asm: s390x.AMOVD, + name: "MOVDstoreidx", + auxType: auxSymOff, + argLen: 4, + commutative: true, + symEffect: SymWrite, + asm: s390x.AMOVD, reg: regInfo{ inputs: []inputInfo{ {0, 56318}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 SP @@ -26484,13 +27315,12 @@ var opcodeTable = [...]opInfo{ }, }, { - name: "MOVHBRstoreidx", - auxType: auxSymOff, - argLen: 4, - commutative: true, - clobberFlags: true, - symEffect: SymWrite, - asm: s390x.AMOVHBR, + name: "MOVHBRstoreidx", + auxType: auxSymOff, + argLen: 4, + commutative: true, + symEffect: SymWrite, + asm: s390x.AMOVHBR, reg: regInfo{ inputs: []inputInfo{ {0, 56318}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 SP @@ -26500,13 +27330,12 @@ var opcodeTable = [...]opInfo{ }, }, { - name: "MOVWBRstoreidx", - auxType: auxSymOff, - argLen: 4, - commutative: true, - clobberFlags: true, - symEffect: SymWrite, - asm: s390x.AMOVWBR, + name: "MOVWBRstoreidx", + auxType: auxSymOff, + argLen: 4, + commutative: true, + symEffect: SymWrite, + asm: s390x.AMOVWBR, reg: regInfo{ inputs: []inputInfo{ {0, 56318}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 SP @@ -26516,13 +27345,12 @@ var opcodeTable = [...]opInfo{ }, }, { - name: "MOVDBRstoreidx", - auxType: auxSymOff, - argLen: 4, - commutative: true, - clobberFlags: true, - symEffect: SymWrite, - asm: s390x.AMOVDBR, + name: "MOVDBRstoreidx", + auxType: auxSymOff, + argLen: 4, + commutative: true, + symEffect: SymWrite, + asm: s390x.AMOVDBR, reg: regInfo{ inputs: []inputInfo{ {0, 56318}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 SP @@ -26733,6 +27561,39 @@ var opcodeTable = [...]opInfo{ clobbers: 4294918144, // R14 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 }, }, + { + name: "LoweredPanicBoundsA", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4}, // R2 + {1, 8}, // R3 + }, + }, + }, + { + name: "LoweredPanicBoundsB", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 2}, // R1 + {1, 4}, // R2 + }, + }, + }, + { + name: "LoweredPanicBoundsC", + auxType: auxInt64, + argLen: 3, + reg: regInfo{ + inputs: []inputInfo{ + {0, 1}, // R0 + {1, 2}, // R1 + }, + }, + }, { name: "FlagEQ", argLen: 0, @@ -26748,6 +27609,27 @@ var opcodeTable = [...]opInfo{ argLen: 0, reg: regInfo{}, }, + { + name: "FlagOV", + argLen: 0, + reg: regInfo{}, + }, + { + name: "MOVBZatomicload", + auxType: auxSymOff, + argLen: 2, + faultOnNilArg0: true, + symEffect: SymRead, + asm: s390x.AMOVBZ, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4295023614}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 SP SB + }, + outputs: []outputInfo{ + {0, 23551}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R11 R12 R14 + }, + }, + }, { name: "MOVWZatomicload", auxType: auxSymOff, @@ -28000,9 +28882,9 @@ var opcodeTable = [...]opInfo{ }, }, { - name: "I64TruncSF64", + name: "I64TruncSatF64S", argLen: 1, - asm: wasm.AI64TruncSF64, + asm: wasm.AI64TruncSatF64S, reg: regInfo{ inputs: []inputInfo{ {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 @@ -28013,9 +28895,9 @@ var opcodeTable = [...]opInfo{ }, }, { - name: "I64TruncUF64", + name: "I64TruncSatF64U", argLen: 1, - asm: wasm.AI64TruncUF64, + asm: wasm.AI64TruncSatF64U, reg: regInfo{ inputs: []inputInfo{ {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 @@ -28026,9 +28908,9 @@ var opcodeTable = [...]opInfo{ }, }, { - name: "F64ConvertSI64", + name: "F64ConvertI64S", argLen: 1, - asm: wasm.AF64ConvertSI64, + asm: wasm.AF64ConvertI64S, reg: regInfo{ inputs: []inputInfo{ {0, 65535}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 @@ -28039,9 +28921,9 @@ var opcodeTable = [...]opInfo{ }, }, { - name: "F64ConvertUI64", + name: "F64ConvertI64U", argLen: 1, - asm: wasm.AF64ConvertUI64, + asm: wasm.AF64ConvertI64U, reg: regInfo{ inputs: []inputInfo{ {0, 65535}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 @@ -28051,6 +28933,190 @@ var opcodeTable = [...]opInfo{ }, }, }, + { + name: "I64Extend8S", + argLen: 1, + asm: wasm.AI64Extend8S, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4295032831}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 SP + }, + outputs: []outputInfo{ + {0, 65535}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 + }, + }, + }, + { + name: "I64Extend16S", + argLen: 1, + asm: wasm.AI64Extend16S, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4295032831}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 SP + }, + outputs: []outputInfo{ + {0, 65535}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 + }, + }, + }, + { + name: "I64Extend32S", + argLen: 1, + asm: wasm.AI64Extend32S, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4295032831}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 SP + }, + outputs: []outputInfo{ + {0, 65535}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 + }, + }, + }, + { + name: "F64Sqrt", + argLen: 1, + asm: wasm.AF64Sqrt, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 + }, + outputs: []outputInfo{ + {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 + }, + }, + }, + { + name: "F64Trunc", + argLen: 1, + asm: wasm.AF64Trunc, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 + }, + outputs: []outputInfo{ + {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 + }, + }, + }, + { + name: "F64Ceil", + argLen: 1, + asm: wasm.AF64Ceil, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 + }, + outputs: []outputInfo{ + {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 + }, + }, + }, + { + name: "F64Floor", + argLen: 1, + asm: wasm.AF64Floor, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 + }, + outputs: []outputInfo{ + {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 + }, + }, + }, + { + name: "F64Nearest", + argLen: 1, + asm: wasm.AF64Nearest, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 + }, + outputs: []outputInfo{ + {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 + }, + }, + }, + { + name: "F64Abs", + argLen: 1, + asm: wasm.AF64Abs, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 + }, + outputs: []outputInfo{ + {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 + }, + }, + }, + { + name: "F64Copysign", + argLen: 2, + asm: wasm.AF64Copysign, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 + {1, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 + }, + outputs: []outputInfo{ + {0, 4294901760}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 + }, + }, + }, + { + name: "I64Ctz", + argLen: 1, + asm: wasm.AI64Ctz, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4295032831}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 SP + }, + outputs: []outputInfo{ + {0, 65535}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 + }, + }, + }, + { + name: "I64Clz", + argLen: 1, + asm: wasm.AI64Clz, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4295032831}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 SP + }, + outputs: []outputInfo{ + {0, 65535}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 + }, + }, + }, + { + name: "I64Rotl", + argLen: 2, + asm: wasm.AI64Rotl, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4295032831}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 SP + {1, 4295032831}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 SP + }, + outputs: []outputInfo{ + {0, 65535}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 + }, + }, + }, + { + name: "I64Popcnt", + argLen: 1, + asm: wasm.AI64Popcnt, + reg: regInfo{ + inputs: []inputInfo{ + {0, 4295032831}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 SP + }, + outputs: []outputInfo{ + {0, 65535}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 + }, + }, + }, { name: "Add8", @@ -29410,6 +30476,18 @@ var opcodeTable = [...]opInfo{ symEffect: SymNone, generic: true, }, + { + name: "PanicBounds", + auxType: auxInt64, + argLen: 3, + generic: true, + }, + { + name: "PanicExtend", + auxType: auxInt64, + argLen: 4, + generic: true, + }, { name: "ClosureCall", auxType: auxInt64, @@ -29918,6 +30996,11 @@ var opcodeTable = [...]opInfo{ zeroWidth: true, generic: true, }, + { + name: "AtomicLoad8", + argLen: 2, + generic: true, + }, { name: "AtomicLoad32", argLen: 2, @@ -30038,6 +31121,7 @@ var opcodeTable = [...]opInfo{ } func (o Op) Asm() obj.As { return opcodeTable[o].asm } +func (o Op) Scale() int16 { return int16(opcodeTable[o].scale) } func (o Op) String() string { return opcodeTable[o].name } func (o Op) UsesScratch() bool { return opcodeTable[o].usesScratch } func (o Op) SymEffect() SymEffect { return opcodeTable[o].symEffect } diff --git a/src/cmd/compile/internal/ssa/print.go b/src/cmd/compile/internal/ssa/print.go index d66530a373..58e4c3bbbe 100644 --- a/src/cmd/compile/internal/ssa/print.go +++ b/src/cmd/compile/internal/ssa/print.go @@ -83,6 +83,7 @@ func (p stringFuncPrinter) named(n LocalSlot, vals []*Value) { func fprintFunc(p funcPrinter, f *Func) { reachable, live := findlive(f) + defer f.retDeadcodeLive(live) p.header(f) printed := make([]bool, f.NumValues()) for _, b := range f.Blocks { diff --git a/src/cmd/compile/internal/ssa/prove.go b/src/cmd/compile/internal/ssa/prove.go index 1e5f4e9c6c..a73cd613f2 100644 --- a/src/cmd/compile/internal/ssa/prove.go +++ b/src/cmd/compile/internal/ssa/prove.go @@ -174,6 +174,9 @@ type factsTable struct { // more than one len(s) for a slice. We could keep a list if necessary. lens map[ID]*Value caps map[ID]*Value + + // zero is a zero-valued constant + zero *Value } // checkpointFact is an invalid value used for checkpointing @@ -191,6 +194,7 @@ func newFactsTable(f *Func) *factsTable { ft.stack = make([]fact, 4) ft.limits = make(map[ID]limit) ft.limitStack = make([]limitFact, 4) + ft.zero = f.ConstInt64(f.Config.Types.Int64, 0) return ft } @@ -566,7 +570,8 @@ func (ft *factsTable) isNonNegative(v *Value) bool { } } - return false + // Check if the signed poset can prove that the value is >= 0 + return ft.order[0].OrderedOrEqual(ft.zero, v) } // checkpoint saves the current state of known relations. @@ -734,14 +739,8 @@ func prove(f *Func) { ft.checkpoint() // Find length and capacity ops. - var zero *Value for _, b := range f.Blocks { for _, v := range b.Values { - // If we found a zero constant, save it (so we don't have - // to build one later). - if zero == nil && v.Op == OpConst64 && v.AuxInt == 0 { - zero = v - } if v.Uses == 0 { // We don't care about dead values. // (There can be some that are CSEd but not removed yet.) @@ -749,28 +748,19 @@ func prove(f *Func) { } switch v.Op { case OpStringLen: - if zero == nil { - zero = b.NewValue0I(b.Pos, OpConst64, f.Config.Types.Int64, 0) - } - ft.update(b, v, zero, signed, gt|eq) + ft.update(b, v, ft.zero, signed, gt|eq) case OpSliceLen: if ft.lens == nil { ft.lens = map[ID]*Value{} } ft.lens[v.Args[0].ID] = v - if zero == nil { - zero = b.NewValue0I(b.Pos, OpConst64, f.Config.Types.Int64, 0) - } - ft.update(b, v, zero, signed, gt|eq) + ft.update(b, v, ft.zero, signed, gt|eq) case OpSliceCap: if ft.caps == nil { ft.caps = map[ID]*Value{} } ft.caps[v.Args[0].ID] = v - if zero == nil { - zero = b.NewValue0I(b.Pos, OpConst64, f.Config.Types.Int64, 0) - } - ft.update(b, v, zero, signed, gt|eq) + ft.update(b, v, ft.zero, signed, gt|eq) } } } @@ -904,7 +894,7 @@ func getBranch(sdom SparseTree, p *Block, b *Block) branch { // starting in Block b. func addIndVarRestrictions(ft *factsTable, b *Block, iv indVar) { d := signed - if isNonNegative(iv.min) && isNonNegative(iv.max) { + if ft.isNonNegative(iv.min) && ft.isNonNegative(iv.max) { d |= unsigned } @@ -940,31 +930,41 @@ func addBranchRestrictions(ft *factsTable, b *Block, br branch) { if d == signed && ft.isNonNegative(c.Args[0]) && ft.isNonNegative(c.Args[1]) { d |= unsigned } - switch br { - case negative: - switch b.Control.Op { // Special cases - case OpIsInBounds, OpIsSliceInBounds: - // 0 <= a0 < a1 (or 0 <= a0 <= a1) - // - // On the positive branch, we learn a0 < a1, - // both signed and unsigned. - // - // On the negative branch, we learn (0 > a0 || - // a0 >= a1). In the unsigned domain, this is - // simply a0 >= a1 (which is the reverse of the - // positive branch, so nothing surprising). - // But in the signed domain, we can't express the || - // condition, so check if a0 is non-negative instead, - // to be able to learn something. + switch b.Control.Op { + case OpIsInBounds, OpIsSliceInBounds: + // 0 <= a0 < a1 (or 0 <= a0 <= a1) + // + // On the positive branch, we learn: + // signed: 0 <= a0 < a1 (or 0 <= a0 <= a1) + // unsigned: a0 < a1 (or a0 <= a1) + // + // On the negative branch, we learn (0 > a0 || + // a0 >= a1). In the unsigned domain, this is + // simply a0 >= a1 (which is the reverse of the + // positive branch, so nothing surprising). + // But in the signed domain, we can't express the || + // condition, so check if a0 is non-negative instead, + // to be able to learn something. + switch br { + case negative: d = unsigned if ft.isNonNegative(c.Args[0]) { d |= signed } + addRestrictions(b, ft, d, c.Args[0], c.Args[1], tr.r^(lt|gt|eq)) + case positive: + addRestrictions(b, ft, signed, ft.zero, c.Args[0], lt|eq) + addRestrictions(b, ft, d, c.Args[0], c.Args[1], tr.r) + } + default: + switch br { + case negative: + addRestrictions(b, ft, d, c.Args[0], c.Args[1], tr.r^(lt|gt|eq)) + case positive: + addRestrictions(b, ft, d, c.Args[0], c.Args[1], tr.r) } - addRestrictions(b, ft, d, c.Args[0], c.Args[1], tr.r^(lt|gt|eq)) - case positive: - addRestrictions(b, ft, d, c.Args[0], c.Args[1], tr.r) } + } } diff --git a/src/cmd/compile/internal/ssa/regalloc.go b/src/cmd/compile/internal/ssa/regalloc.go index 8946cf6b5c..b6fae5e0a3 100644 --- a/src/cmd/compile/internal/ssa/regalloc.go +++ b/src/cmd/compile/internal/ssa/regalloc.go @@ -651,8 +651,14 @@ func (s *regAllocState) init(f *Func) { } s.regs = make([]regState, s.numRegs) - s.values = make([]valState, f.NumValues()) - s.orig = make([]*Value, f.NumValues()) + nv := f.NumValues() + if cap(s.f.Cache.regallocValues) >= nv { + s.f.Cache.regallocValues = s.f.Cache.regallocValues[:nv] + } else { + s.f.Cache.regallocValues = make([]valState, nv) + } + s.values = s.f.Cache.regallocValues + s.orig = make([]*Value, nv) s.copies = make(map[*Value]bool) for _, b := range s.visitOrder { for _, v := range b.Values { @@ -1220,6 +1226,13 @@ func (s *regAllocState) regalloc(f *Func) { // This forces later liveness analysis to make the // value live at this point. v.SetArg(0, s.makeSpill(a, b)) + } else if _, ok := a.Aux.(GCNode); ok && vi.rematerializeable { + // Rematerializeable value with a gc.Node. This is the address of + // a stack object (e.g. an LEAQ). Keep the object live. + // Change it to VarLive, which is what plive expects for locals. + v.Op = OpVarLive + v.SetArgs1(v.Args[1]) + v.Aux = a.Aux } else { // In-register and rematerializeable values are already live. // These are typically rematerializeable constants like nil, diff --git a/src/cmd/compile/internal/ssa/rewrite.go b/src/cmd/compile/internal/ssa/rewrite.go index 9c9de750b2..cd23fe87e5 100644 --- a/src/cmd/compile/internal/ssa/rewrite.go +++ b/src/cmd/compile/internal/ssa/rewrite.go @@ -64,7 +64,7 @@ func applyRewrite(f *Func, rb blockRewriter, rv valueRewriter) { // TODO: it's possible (in FOR loops, in particular) for statement boundaries for the same // line to appear in more than one block, but only one block is stored, so if both end // up here, then one will be lost. - pendingLines.set(a.Pos.Line(), int32(a.Block.ID)) + pendingLines.set(a.Pos, int32(a.Block.ID)) } a.Pos = a.Pos.WithNotStmt() } @@ -97,7 +97,7 @@ func applyRewrite(f *Func, rb blockRewriter, rv valueRewriter) { for _, b := range f.Blocks { j := 0 for i, v := range b.Values { - vl := v.Pos.Line() + vl := v.Pos if v.Op == OpInvalid { if v.Pos.IsStmt() == src.PosIsStmt { pendingLines.set(vl, int32(b.ID)) @@ -114,9 +114,9 @@ func applyRewrite(f *Func, rb blockRewriter, rv valueRewriter) { } j++ } - if pendingLines.get(b.Pos.Line()) == int32(b.ID) { + if pendingLines.get(b.Pos) == int32(b.ID) { b.Pos = b.Pos.WithIsStmt() - pendingLines.remove(b.Pos.Line()) + pendingLines.remove(b.Pos) } if j != len(b.Values) { tail := b.Values[j:] @@ -687,6 +687,20 @@ func noteRule(s string) bool { return true } +// countRule increments Func.ruleMatches[key]. +// If Func.ruleMatches is non-nil at the end +// of compilation, it will be printed to stdout. +// This is intended to make it easier to find which functions +// which contain lots of rules matches when developing new rules. +func countRule(v *Value, key string) bool { + f := v.Block.Func + if f.ruleMatches == nil { + f.ruleMatches = make(map[string]int) + } + f.ruleMatches[key]++ + return true +} + // warnRule generates compiler debug output with string s when // v is not in autogenerated code, cond is true and the rule has fired. func warnRule(cond bool, v *Value, s string) bool { @@ -730,6 +744,14 @@ func arm64Negate(op Op) Op { return OpARM64NotEqual case OpARM64NotEqual: return OpARM64Equal + case OpARM64LessThanF: + return OpARM64GreaterEqualF + case OpARM64GreaterThanF: + return OpARM64LessEqualF + case OpARM64LessEqualF: + return OpARM64GreaterThanF + case OpARM64GreaterEqualF: + return OpARM64LessThanF default: panic("unreachable") } @@ -762,6 +784,14 @@ func arm64Invert(op Op) Op { return OpARM64LessEqualU case OpARM64Equal, OpARM64NotEqual: return op + case OpARM64LessThanF: + return OpARM64GreaterThanF + case OpARM64GreaterThanF: + return OpARM64LessThanF + case OpARM64LessEqualF: + return OpARM64GreaterEqualF + case OpARM64GreaterEqualF: + return OpARM64LessEqualF default: panic("unreachable") } @@ -838,7 +868,7 @@ func logRule(s string) { } ruleFile = w } - _, err := fmt.Fprintf(ruleFile, "rewrite %s\n", s) + _, err := fmt.Fprintln(ruleFile, s) if err != nil { panic(err) } @@ -1037,13 +1067,24 @@ func isInlinableMemmove(dst, src *Value, sz int64, c *Config) bool { return false } -// encodes the lsb and width for arm64 bitfield ops into the expected auxInt format. -func arm64BFAuxInt(lsb, width int64) int64 { +// hasSmallRotate reports whether the architecture has rotate instructions +// for sizes < 32-bit. This is used to decide whether to promote some rotations. +func hasSmallRotate(c *Config) bool { + switch c.arch { + case "amd64", "amd64p32", "386": + return true + default: + return false + } +} + +// encodes the lsb and width for arm(64) bitfield ops into the expected auxInt format. +func armBFAuxInt(lsb, width int64) int64 { if lsb < 0 || lsb > 63 { - panic("ARM64 bit field lsb constant out of range") + panic("ARM(64) bit field lsb constant out of range") } if width < 1 || width > 64 { - panic("ARM64 bit field width constant out of range") + panic("ARM(64) bit field width constant out of range") } return width | lsb<<8 } @@ -1113,17 +1154,20 @@ func needRaceCleanup(sym interface{}, v *Value) bool { for _, v := range b.Values { switch v.Op { case OpStaticCall: - switch v.Aux.(fmt.Stringer).String() { - case "runtime.racefuncenter", "runtime.racefuncexit", "runtime.panicindex", - "runtime.panicslice", "runtime.panicdivide", "runtime.panicwrap", - "runtime.panicshift": // Check for racefuncenter will encounter racefuncexit and vice versa. // Allow calls to panic* - default: - // If we encountered any call, we need to keep racefunc*, - // for accurate stacktraces. - return false + s := v.Aux.(fmt.Stringer).String() + switch s { + case "runtime.racefuncenter", "runtime.racefuncexit", + "runtime.panicdivide", "runtime.panicwrap", + "runtime.panicshift": + continue } + // If we encountered any call, we need to keep racefunc*, + // for accurate stacktraces. + return false + case OpPanicBounds, OpPanicExtend: + // Note: these are panic generators that are ok (like the static calls above). case OpClosureCall, OpInterCall: // We must keep the race functions if there are any other call types. return false diff --git a/src/cmd/compile/internal/ssa/rewrite386.go b/src/cmd/compile/internal/ssa/rewrite386.go index 75b6de8055..8f896ec0c7 100644 --- a/src/cmd/compile/internal/ssa/rewrite386.go +++ b/src/cmd/compile/internal/ssa/rewrite386.go @@ -587,6 +587,16 @@ func rewriteValue386(v *Value) bool { return rewriteValue386_OpOr8_0(v) case OpOrB: return rewriteValue386_OpOrB_0(v) + case OpPanicBounds: + return rewriteValue386_OpPanicBounds_0(v) + case OpPanicExtend: + return rewriteValue386_OpPanicExtend_0(v) + case OpRotateLeft16: + return rewriteValue386_OpRotateLeft16_0(v) + case OpRotateLeft32: + return rewriteValue386_OpRotateLeft32_0(v) + case OpRotateLeft8: + return rewriteValue386_OpRotateLeft8_0(v) case OpRound32F: return rewriteValue386_OpRound32F_0(v) case OpRound64F: @@ -707,14 +717,13 @@ func rewriteValue386_Op386ADCL_0(v *Value) bool { // cond: // result: (ADCLconst [c] x f) for { - _ = v.Args[2] + f := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386MOVLconst { break } c := v_1.AuxInt - f := v.Args[2] v.reset(Op386ADCLconst) v.AuxInt = c v.AddArg(x) @@ -725,14 +734,13 @@ func rewriteValue386_Op386ADCL_0(v *Value) bool { // cond: // result: (ADCLconst [c] x f) for { - _ = v.Args[2] + f := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386MOVLconst { break } c := v_0.AuxInt x := v.Args[1] - f := v.Args[2] v.reset(Op386ADCLconst) v.AuxInt = c v.AddArg(x) @@ -743,14 +751,13 @@ func rewriteValue386_Op386ADCL_0(v *Value) bool { // cond: // result: (ADCLconst [c] x f) for { - _ = v.Args[2] + f := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386MOVLconst { break } c := v_0.AuxInt x := v.Args[1] - f := v.Args[2] v.reset(Op386ADCLconst) v.AuxInt = c v.AddArg(x) @@ -761,14 +768,13 @@ func rewriteValue386_Op386ADCL_0(v *Value) bool { // cond: // result: (ADCLconst [c] x f) for { - _ = v.Args[2] + f := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386MOVLconst { break } c := v_1.AuxInt - f := v.Args[2] v.reset(Op386ADCLconst) v.AuxInt = c v.AddArg(x) @@ -798,13 +804,12 @@ func rewriteValue386_Op386ADDL_0(v *Value) bool { // cond: // result: (ADDLconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(Op386ADDLconst) v.AuxInt = c v.AddArg(x) @@ -999,7 +1004,7 @@ func rewriteValue386_Op386ADDL_0(v *Value) bool { // cond: // result: (LEAL8 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SHLLconst { break @@ -1008,7 +1013,6 @@ func rewriteValue386_Op386ADDL_0(v *Value) bool { break } y := v_0.Args[0] - x := v.Args[1] v.reset(Op386LEAL8) v.AddArg(x) v.AddArg(y) @@ -1040,7 +1044,7 @@ func rewriteValue386_Op386ADDL_10(v *Value) bool { // cond: // result: (LEAL4 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SHLLconst { break @@ -1049,7 +1053,6 @@ func rewriteValue386_Op386ADDL_10(v *Value) bool { break } y := v_0.Args[0] - x := v.Args[1] v.reset(Op386LEAL4) v.AddArg(x) v.AddArg(y) @@ -1078,7 +1081,7 @@ func rewriteValue386_Op386ADDL_10(v *Value) bool { // cond: // result: (LEAL2 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SHLLconst { break @@ -1087,7 +1090,6 @@ func rewriteValue386_Op386ADDL_10(v *Value) bool { break } y := v_0.Args[0] - x := v.Args[1] v.reset(Op386LEAL2) v.AddArg(x) v.AddArg(y) @@ -1103,9 +1105,8 @@ func rewriteValue386_Op386ADDL_10(v *Value) bool { if v_1.Op != Op386ADDL { break } - _ = v_1.Args[1] - y := v_1.Args[0] - if y != v_1.Args[1] { + y := v_1.Args[1] + if y != v_1.Args[0] { break } v.reset(Op386LEAL2) @@ -1117,17 +1118,15 @@ func rewriteValue386_Op386ADDL_10(v *Value) bool { // cond: // result: (LEAL2 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDL { break } - _ = v_0.Args[1] - y := v_0.Args[0] - if y != v_0.Args[1] { + y := v_0.Args[1] + if y != v_0.Args[0] { break } - x := v.Args[1] v.reset(Op386LEAL2) v.AddArg(x) v.AddArg(y) @@ -1143,11 +1142,10 @@ func rewriteValue386_Op386ADDL_10(v *Value) bool { if v_1.Op != Op386ADDL { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(Op386LEAL2) v.AddArg(y) v.AddArg(x) @@ -1177,15 +1175,13 @@ func rewriteValue386_Op386ADDL_10(v *Value) bool { // cond: // result: (LEAL2 y x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(Op386LEAL2) @@ -1197,15 +1193,14 @@ func rewriteValue386_Op386ADDL_10(v *Value) bool { // cond: // result: (LEAL2 y x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDL { break } _ = v_0.Args[1] y := v_0.Args[0] - x := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[1] { break } v.reset(Op386LEAL2) @@ -1220,14 +1215,13 @@ func rewriteValue386_Op386ADDL_20(v *Value) bool { // cond: // result: (LEAL1 [c] x y) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break } c := v_0.AuxInt x := v_0.Args[0] - y := v.Args[1] v.reset(Op386LEAL1) v.AuxInt = c v.AddArg(x) @@ -1279,7 +1273,7 @@ func rewriteValue386_Op386ADDL_20(v *Value) bool { // cond: x.Op != OpSB && y.Op != OpSB // result: (LEAL1 [c] {s} x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -1287,7 +1281,6 @@ func rewriteValue386_Op386ADDL_20(v *Value) bool { c := v_0.AuxInt s := v_0.Aux y := v_0.Args[0] - x := v.Args[1] if !(x.Op != OpSB && y.Op != OpSB) { break } @@ -1310,9 +1303,8 @@ func rewriteValue386_Op386ADDL_20(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -1328,17 +1320,15 @@ func rewriteValue386_Op386ADDL_20(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (ADDLload x [off] {sym} ptr mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != Op386MOVLload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -1362,10 +1352,9 @@ func rewriteValue386_Op386ADDL_20(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[2] + mem := l.Args[2] ptr := l.Args[0] idx := l.Args[1] - mem := l.Args[2] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -1382,18 +1371,16 @@ func rewriteValue386_Op386ADDL_20(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (ADDLloadidx4 x [off] {sym} ptr idx mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != Op386MOVLloadidx4 { break } off := l.AuxInt sym := l.Aux - _ = l.Args[2] + mem := l.Args[2] ptr := l.Args[0] idx := l.Args[1] - mem := l.Args[2] - x := v.Args[1] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -1426,13 +1413,12 @@ func rewriteValue386_Op386ADDL_20(v *Value) bool { // cond: // result: (SUBL x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386NEGL { break } y := v_0.Args[0] - x := v.Args[1] v.reset(Op386SUBL) v.AddArg(x) v.AddArg(y) @@ -1461,13 +1447,12 @@ func rewriteValue386_Op386ADDLcarry_0(v *Value) bool { // cond: // result: (ADDLconstcarry [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(Op386ADDLconstcarry) v.AuxInt = c v.AddArg(x) @@ -1485,9 +1470,8 @@ func rewriteValue386_Op386ADDLconst_0(v *Value) bool { if v_0.Op != Op386ADDL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(Op386LEAL1) v.AuxInt = c v.AddArg(x) @@ -1526,9 +1510,8 @@ func rewriteValue386_Op386ADDLconst_0(v *Value) bool { } d := v_0.AuxInt s := v_0.Aux - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] if !(is32Bit(c + d)) { break } @@ -1550,9 +1533,8 @@ func rewriteValue386_Op386ADDLconst_0(v *Value) bool { } d := v_0.AuxInt s := v_0.Aux - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] if !(is32Bit(c + d)) { break } @@ -1574,9 +1556,8 @@ func rewriteValue386_Op386ADDLconst_0(v *Value) bool { } d := v_0.AuxInt s := v_0.Aux - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] if !(is32Bit(c + d)) { break } @@ -1598,9 +1579,8 @@ func rewriteValue386_Op386ADDLconst_0(v *Value) bool { } d := v_0.AuxInt s := v_0.Aux - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] if !(is32Bit(c + d)) { break } @@ -1659,23 +1639,20 @@ func rewriteValue386_Op386ADDLconst_0(v *Value) bool { } func rewriteValue386_Op386ADDLconstmodify_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ADDLconstmodify [valoff1] {sym} (ADDLconst [off2] base) mem) // cond: ValAndOff(valoff1).canAdd(off2) // result: (ADDLconstmodify [ValAndOff(valoff1).add(off2)] {sym} base mem) for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break } off2 := v_0.AuxInt base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -1692,7 +1669,7 @@ func rewriteValue386_Op386ADDLconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -1700,7 +1677,6 @@ func rewriteValue386_Op386ADDLconstmodify_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -1715,16 +1691,14 @@ func rewriteValue386_Op386ADDLconstmodify_0(v *Value) bool { } func rewriteValue386_Op386ADDLconstmodifyidx4_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ADDLconstmodifyidx4 [valoff1] {sym} (ADDLconst [off2] base) idx mem) // cond: ValAndOff(valoff1).canAdd(off2) // result: (ADDLconstmodifyidx4 [ValAndOff(valoff1).add(off2)] {sym} base idx mem) for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -1732,7 +1706,6 @@ func rewriteValue386_Op386ADDLconstmodifyidx4_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -1750,7 +1723,7 @@ func rewriteValue386_Op386ADDLconstmodifyidx4_0(v *Value) bool { for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] base := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -1758,7 +1731,6 @@ func rewriteValue386_Op386ADDLconstmodifyidx4_0(v *Value) bool { } off2 := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(ValAndOff(valoff1).canAdd(off2 * 4)) { break } @@ -1776,7 +1748,7 @@ func rewriteValue386_Op386ADDLconstmodifyidx4_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -1785,7 +1757,6 @@ func rewriteValue386_Op386ADDLconstmodifyidx4_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -1801,16 +1772,14 @@ func rewriteValue386_Op386ADDLconstmodifyidx4_0(v *Value) bool { } func rewriteValue386_Op386ADDLload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ADDLload [off1] {sym} val (ADDLconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (ADDLload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -1818,7 +1787,6 @@ func rewriteValue386_Op386ADDLload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -1836,7 +1804,7 @@ func rewriteValue386_Op386ADDLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL { @@ -1845,7 +1813,6 @@ func rewriteValue386_Op386ADDLload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -1863,7 +1830,7 @@ func rewriteValue386_Op386ADDLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL4 { @@ -1871,10 +1838,8 @@ func rewriteValue386_Op386ADDLload_0(v *Value) bool { } off2 := v_1.AuxInt sym2 := v_1.Aux - _ = v_1.Args[1] - ptr := v_1.Args[0] idx := v_1.Args[1] - mem := v.Args[2] + ptr := v_1.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -1891,16 +1856,14 @@ func rewriteValue386_Op386ADDLload_0(v *Value) bool { } func rewriteValue386_Op386ADDLloadidx4_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ADDLloadidx4 [off1] {sym} val (ADDLconst [off2] base) idx mem) // cond: is32Bit(off1+off2) // result: (ADDLloadidx4 [off1+off2] {sym} val base idx mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -1909,7 +1872,6 @@ func rewriteValue386_Op386ADDLloadidx4_0(v *Value) bool { off2 := v_1.AuxInt base := v_1.Args[0] idx := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1 + off2)) { break } @@ -1928,7 +1890,7 @@ func rewriteValue386_Op386ADDLloadidx4_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] val := v.Args[0] base := v.Args[1] v_2 := v.Args[2] @@ -1937,7 +1899,6 @@ func rewriteValue386_Op386ADDLloadidx4_0(v *Value) bool { } off2 := v_2.AuxInt idx := v_2.Args[0] - mem := v.Args[3] if !(is32Bit(off1 + off2*4)) { break } @@ -1956,7 +1917,7 @@ func rewriteValue386_Op386ADDLloadidx4_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[3] + mem := v.Args[3] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL { @@ -1966,7 +1927,6 @@ func rewriteValue386_Op386ADDLloadidx4_0(v *Value) bool { sym2 := v_1.Aux base := v_1.Args[0] idx := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -1983,16 +1943,14 @@ func rewriteValue386_Op386ADDLloadidx4_0(v *Value) bool { } func rewriteValue386_Op386ADDLmodify_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ADDLmodify [off1] {sym} (ADDLconst [off2] base) val mem) // cond: is32Bit(off1+off2) // result: (ADDLmodify [off1+off2] {sym} base val mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -2000,7 +1958,6 @@ func rewriteValue386_Op386ADDLmodify_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -2018,7 +1975,7 @@ func rewriteValue386_Op386ADDLmodify_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -2027,7 +1984,6 @@ func rewriteValue386_Op386ADDLmodify_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -2043,16 +1999,14 @@ func rewriteValue386_Op386ADDLmodify_0(v *Value) bool { } func rewriteValue386_Op386ADDLmodifyidx4_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ADDLmodifyidx4 [off1] {sym} (ADDLconst [off2] base) idx val mem) // cond: is32Bit(off1+off2) // result: (ADDLmodifyidx4 [off1+off2] {sym} base idx val mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -2061,7 +2015,6 @@ func rewriteValue386_Op386ADDLmodifyidx4_0(v *Value) bool { base := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1 + off2)) { break } @@ -2080,7 +2033,7 @@ func rewriteValue386_Op386ADDLmodifyidx4_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] base := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -2089,7 +2042,6 @@ func rewriteValue386_Op386ADDLmodifyidx4_0(v *Value) bool { off2 := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1 + off2*4)) { break } @@ -2108,7 +2060,7 @@ func rewriteValue386_Op386ADDLmodifyidx4_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -2118,7 +2070,6 @@ func rewriteValue386_Op386ADDLmodifyidx4_0(v *Value) bool { base := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -2137,7 +2088,7 @@ func rewriteValue386_Op386ADDLmodifyidx4_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -2145,7 +2096,6 @@ func rewriteValue386_Op386ADDLmodifyidx4_0(v *Value) bool { break } c := v_2.AuxInt - mem := v.Args[3] if !(validValAndOff(c, off)) { break } @@ -2161,9 +2111,7 @@ func rewriteValue386_Op386ADDLmodifyidx4_0(v *Value) bool { } func rewriteValue386_Op386ADDSD_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ADDSD x l:(MOVSDload [off] {sym} ptr mem)) // cond: canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l) // result: (ADDSDload x [off] {sym} ptr mem) @@ -2176,9 +2124,8 @@ func rewriteValue386_Op386ADDSD_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l)) { break } @@ -2194,17 +2141,15 @@ func rewriteValue386_Op386ADDSD_0(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l) // result: (ADDSDload x [off] {sym} ptr mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != Op386MOVSDload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l)) { break } @@ -2220,16 +2165,14 @@ func rewriteValue386_Op386ADDSD_0(v *Value) bool { } func rewriteValue386_Op386ADDSDload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ADDSDload [off1] {sym} val (ADDLconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (ADDSDload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -2237,7 +2180,6 @@ func rewriteValue386_Op386ADDSDload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -2255,7 +2197,7 @@ func rewriteValue386_Op386ADDSDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL { @@ -2264,7 +2206,6 @@ func rewriteValue386_Op386ADDSDload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -2280,9 +2221,7 @@ func rewriteValue386_Op386ADDSDload_0(v *Value) bool { } func rewriteValue386_Op386ADDSS_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ADDSS x l:(MOVSSload [off] {sym} ptr mem)) // cond: canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l) // result: (ADDSSload x [off] {sym} ptr mem) @@ -2295,9 +2234,8 @@ func rewriteValue386_Op386ADDSS_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l)) { break } @@ -2313,17 +2251,15 @@ func rewriteValue386_Op386ADDSS_0(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l) // result: (ADDSSload x [off] {sym} ptr mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != Op386MOVSSload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l)) { break } @@ -2339,16 +2275,14 @@ func rewriteValue386_Op386ADDSS_0(v *Value) bool { } func rewriteValue386_Op386ADDSSload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ADDSSload [off1] {sym} val (ADDLconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (ADDSSload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -2356,7 +2290,6 @@ func rewriteValue386_Op386ADDSSload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -2374,7 +2307,7 @@ func rewriteValue386_Op386ADDSSload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL { @@ -2383,7 +2316,6 @@ func rewriteValue386_Op386ADDSSload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -2418,13 +2350,12 @@ func rewriteValue386_Op386ANDL_0(v *Value) bool { // cond: // result: (ANDLconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(Op386ANDLconst) v.AuxInt = c v.AddArg(x) @@ -2442,9 +2373,8 @@ func rewriteValue386_Op386ANDL_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -2460,17 +2390,15 @@ func rewriteValue386_Op386ANDL_0(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (ANDLload x [off] {sym} ptr mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != Op386MOVLload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -2494,10 +2422,9 @@ func rewriteValue386_Op386ANDL_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[2] + mem := l.Args[2] ptr := l.Args[0] idx := l.Args[1] - mem := l.Args[2] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -2514,18 +2441,16 @@ func rewriteValue386_Op386ANDL_0(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (ANDLloadidx4 x [off] {sym} ptr idx mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != Op386MOVLloadidx4 { break } off := l.AuxInt sym := l.Aux - _ = l.Args[2] + mem := l.Args[2] ptr := l.Args[0] idx := l.Args[1] - mem := l.Args[2] - x := v.Args[1] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -2542,9 +2467,8 @@ func rewriteValue386_Op386ANDL_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -2615,23 +2539,20 @@ func rewriteValue386_Op386ANDLconst_0(v *Value) bool { } func rewriteValue386_Op386ANDLconstmodify_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ANDLconstmodify [valoff1] {sym} (ADDLconst [off2] base) mem) // cond: ValAndOff(valoff1).canAdd(off2) // result: (ANDLconstmodify [ValAndOff(valoff1).add(off2)] {sym} base mem) for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break } off2 := v_0.AuxInt base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -2648,7 +2569,7 @@ func rewriteValue386_Op386ANDLconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -2656,7 +2577,6 @@ func rewriteValue386_Op386ANDLconstmodify_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -2671,16 +2591,14 @@ func rewriteValue386_Op386ANDLconstmodify_0(v *Value) bool { } func rewriteValue386_Op386ANDLconstmodifyidx4_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ANDLconstmodifyidx4 [valoff1] {sym} (ADDLconst [off2] base) idx mem) // cond: ValAndOff(valoff1).canAdd(off2) // result: (ANDLconstmodifyidx4 [ValAndOff(valoff1).add(off2)] {sym} base idx mem) for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -2688,7 +2606,6 @@ func rewriteValue386_Op386ANDLconstmodifyidx4_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -2706,7 +2623,7 @@ func rewriteValue386_Op386ANDLconstmodifyidx4_0(v *Value) bool { for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] base := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -2714,7 +2631,6 @@ func rewriteValue386_Op386ANDLconstmodifyidx4_0(v *Value) bool { } off2 := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(ValAndOff(valoff1).canAdd(off2 * 4)) { break } @@ -2732,7 +2648,7 @@ func rewriteValue386_Op386ANDLconstmodifyidx4_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -2741,7 +2657,6 @@ func rewriteValue386_Op386ANDLconstmodifyidx4_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -2757,16 +2672,14 @@ func rewriteValue386_Op386ANDLconstmodifyidx4_0(v *Value) bool { } func rewriteValue386_Op386ANDLload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ANDLload [off1] {sym} val (ADDLconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (ANDLload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -2774,7 +2687,6 @@ func rewriteValue386_Op386ANDLload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -2792,7 +2704,7 @@ func rewriteValue386_Op386ANDLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL { @@ -2801,7 +2713,6 @@ func rewriteValue386_Op386ANDLload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -2819,7 +2730,7 @@ func rewriteValue386_Op386ANDLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL4 { @@ -2827,10 +2738,8 @@ func rewriteValue386_Op386ANDLload_0(v *Value) bool { } off2 := v_1.AuxInt sym2 := v_1.Aux - _ = v_1.Args[1] - ptr := v_1.Args[0] idx := v_1.Args[1] - mem := v.Args[2] + ptr := v_1.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -2847,16 +2756,14 @@ func rewriteValue386_Op386ANDLload_0(v *Value) bool { } func rewriteValue386_Op386ANDLloadidx4_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ANDLloadidx4 [off1] {sym} val (ADDLconst [off2] base) idx mem) // cond: is32Bit(off1+off2) // result: (ANDLloadidx4 [off1+off2] {sym} val base idx mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -2865,7 +2772,6 @@ func rewriteValue386_Op386ANDLloadidx4_0(v *Value) bool { off2 := v_1.AuxInt base := v_1.Args[0] idx := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1 + off2)) { break } @@ -2884,7 +2790,7 @@ func rewriteValue386_Op386ANDLloadidx4_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] val := v.Args[0] base := v.Args[1] v_2 := v.Args[2] @@ -2893,7 +2799,6 @@ func rewriteValue386_Op386ANDLloadidx4_0(v *Value) bool { } off2 := v_2.AuxInt idx := v_2.Args[0] - mem := v.Args[3] if !(is32Bit(off1 + off2*4)) { break } @@ -2912,7 +2817,7 @@ func rewriteValue386_Op386ANDLloadidx4_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[3] + mem := v.Args[3] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL { @@ -2922,7 +2827,6 @@ func rewriteValue386_Op386ANDLloadidx4_0(v *Value) bool { sym2 := v_1.Aux base := v_1.Args[0] idx := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -2939,16 +2843,14 @@ func rewriteValue386_Op386ANDLloadidx4_0(v *Value) bool { } func rewriteValue386_Op386ANDLmodify_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ANDLmodify [off1] {sym} (ADDLconst [off2] base) val mem) // cond: is32Bit(off1+off2) // result: (ANDLmodify [off1+off2] {sym} base val mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -2956,7 +2858,6 @@ func rewriteValue386_Op386ANDLmodify_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -2974,7 +2875,7 @@ func rewriteValue386_Op386ANDLmodify_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -2983,7 +2884,6 @@ func rewriteValue386_Op386ANDLmodify_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -2999,16 +2899,14 @@ func rewriteValue386_Op386ANDLmodify_0(v *Value) bool { } func rewriteValue386_Op386ANDLmodifyidx4_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ANDLmodifyidx4 [off1] {sym} (ADDLconst [off2] base) idx val mem) // cond: is32Bit(off1+off2) // result: (ANDLmodifyidx4 [off1+off2] {sym} base idx val mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -3017,7 +2915,6 @@ func rewriteValue386_Op386ANDLmodifyidx4_0(v *Value) bool { base := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1 + off2)) { break } @@ -3036,7 +2933,7 @@ func rewriteValue386_Op386ANDLmodifyidx4_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] base := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -3045,7 +2942,6 @@ func rewriteValue386_Op386ANDLmodifyidx4_0(v *Value) bool { off2 := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1 + off2*4)) { break } @@ -3064,7 +2960,7 @@ func rewriteValue386_Op386ANDLmodifyidx4_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -3074,7 +2970,6 @@ func rewriteValue386_Op386ANDLmodifyidx4_0(v *Value) bool { base := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -3093,7 +2988,7 @@ func rewriteValue386_Op386ANDLmodifyidx4_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -3101,7 +2996,6 @@ func rewriteValue386_Op386ANDLmodifyidx4_0(v *Value) bool { break } c := v_2.AuxInt - mem := v.Args[3] if !(validValAndOff(c, off)) { break } @@ -3117,7 +3011,6 @@ func rewriteValue386_Op386ANDLmodifyidx4_0(v *Value) bool { } func rewriteValue386_Op386CMPB_0(v *Value) bool { b := v.Block - _ = b // match: (CMPB x (MOVLconst [c])) // cond: // result: (CMPBconst x [int64(int8(c))]) @@ -3138,13 +3031,12 @@ func rewriteValue386_Op386CMPB_0(v *Value) bool { // cond: // result: (InvertFlags (CMPBconst x [int64(int8(c))])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(Op386InvertFlags) v0 := b.NewValue0(v.Pos, Op386CMPBconst, types.TypeFlags) v0.AuxInt = int64(int8(c)) @@ -3156,17 +3048,15 @@ func rewriteValue386_Op386CMPB_0(v *Value) bool { // cond: canMergeLoad(v, l) && clobber(l) // result: (CMPBload {sym} [off] ptr x mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != Op386MOVBload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoad(v, l) && clobber(l)) { break } @@ -3190,9 +3080,8 @@ func rewriteValue386_Op386CMPB_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoad(v, l) && clobber(l)) { break } @@ -3210,7 +3099,6 @@ func rewriteValue386_Op386CMPB_0(v *Value) bool { } func rewriteValue386_Op386CMPBconst_0(v *Value) bool { b := v.Block - _ = b // match: (CMPBconst (MOVLconst [x]) [y]) // cond: int8(x)==int8(y) // result: (FlagEQ) @@ -3318,9 +3206,8 @@ func rewriteValue386_Op386CMPBconst_0(v *Value) bool { if l.Op != Op386ANDL { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -3374,9 +3261,8 @@ func rewriteValue386_Op386CMPBconst_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(l.Uses == 1 && validValAndOff(c, off) && clobber(l)) { break } @@ -3399,14 +3285,13 @@ func rewriteValue386_Op386CMPBload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386MOVLconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(validValAndOff(int64(int8(c)), off)) { break } @@ -3421,7 +3306,6 @@ func rewriteValue386_Op386CMPBload_0(v *Value) bool { } func rewriteValue386_Op386CMPL_0(v *Value) bool { b := v.Block - _ = b // match: (CMPL x (MOVLconst [c])) // cond: // result: (CMPLconst x [c]) @@ -3442,13 +3326,12 @@ func rewriteValue386_Op386CMPL_0(v *Value) bool { // cond: // result: (InvertFlags (CMPLconst x [c])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(Op386InvertFlags) v0 := b.NewValue0(v.Pos, Op386CMPLconst, types.TypeFlags) v0.AuxInt = c @@ -3460,17 +3343,15 @@ func rewriteValue386_Op386CMPL_0(v *Value) bool { // cond: canMergeLoad(v, l) && clobber(l) // result: (CMPLload {sym} [off] ptr x mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != Op386MOVLload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoad(v, l) && clobber(l)) { break } @@ -3494,9 +3375,8 @@ func rewriteValue386_Op386CMPL_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoad(v, l) && clobber(l)) { break } @@ -3636,9 +3516,8 @@ func rewriteValue386_Op386CMPLconst_0(v *Value) bool { if l.Op != Op386ANDL { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -3685,7 +3564,6 @@ func rewriteValue386_Op386CMPLconst_0(v *Value) bool { } func rewriteValue386_Op386CMPLconst_10(v *Value) bool { b := v.Block - _ = b // match: (CMPLconst l:(MOVLload {sym} [off] ptr mem) [c]) // cond: l.Uses == 1 && validValAndOff(c, off) && clobber(l) // result: @l.Block (CMPLconstload {sym} [makeValAndOff(c,off)] ptr mem) @@ -3697,9 +3575,8 @@ func rewriteValue386_Op386CMPLconst_10(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(l.Uses == 1 && validValAndOff(c, off) && clobber(l)) { break } @@ -3722,14 +3599,13 @@ func rewriteValue386_Op386CMPLload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386MOVLconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(validValAndOff(int64(int32(c)), off)) { break } @@ -3744,7 +3620,6 @@ func rewriteValue386_Op386CMPLload_0(v *Value) bool { } func rewriteValue386_Op386CMPW_0(v *Value) bool { b := v.Block - _ = b // match: (CMPW x (MOVLconst [c])) // cond: // result: (CMPWconst x [int64(int16(c))]) @@ -3765,13 +3640,12 @@ func rewriteValue386_Op386CMPW_0(v *Value) bool { // cond: // result: (InvertFlags (CMPWconst x [int64(int16(c))])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(Op386InvertFlags) v0 := b.NewValue0(v.Pos, Op386CMPWconst, types.TypeFlags) v0.AuxInt = int64(int16(c)) @@ -3783,17 +3657,15 @@ func rewriteValue386_Op386CMPW_0(v *Value) bool { // cond: canMergeLoad(v, l) && clobber(l) // result: (CMPWload {sym} [off] ptr x mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != Op386MOVWload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoad(v, l) && clobber(l)) { break } @@ -3817,9 +3689,8 @@ func rewriteValue386_Op386CMPW_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoad(v, l) && clobber(l)) { break } @@ -3837,7 +3708,6 @@ func rewriteValue386_Op386CMPW_0(v *Value) bool { } func rewriteValue386_Op386CMPWconst_0(v *Value) bool { b := v.Block - _ = b // match: (CMPWconst (MOVLconst [x]) [y]) // cond: int16(x)==int16(y) // result: (FlagEQ) @@ -3945,9 +3815,8 @@ func rewriteValue386_Op386CMPWconst_0(v *Value) bool { if l.Op != Op386ANDL { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -4001,9 +3870,8 @@ func rewriteValue386_Op386CMPWconst_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(l.Uses == 1 && validValAndOff(c, off) && clobber(l)) { break } @@ -4026,14 +3894,13 @@ func rewriteValue386_Op386CMPWload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386MOVLconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(validValAndOff(int64(int16(c)), off)) { break } @@ -4048,9 +3915,7 @@ func rewriteValue386_Op386CMPWload_0(v *Value) bool { } func rewriteValue386_Op386DIVSD_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (DIVSD x l:(MOVSDload [off] {sym} ptr mem)) // cond: canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l) // result: (DIVSDload x [off] {sym} ptr mem) @@ -4063,9 +3928,8 @@ func rewriteValue386_Op386DIVSD_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l)) { break } @@ -4081,16 +3945,14 @@ func rewriteValue386_Op386DIVSD_0(v *Value) bool { } func rewriteValue386_Op386DIVSDload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (DIVSDload [off1] {sym} val (ADDLconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (DIVSDload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -4098,7 +3960,6 @@ func rewriteValue386_Op386DIVSDload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -4116,7 +3977,7 @@ func rewriteValue386_Op386DIVSDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL { @@ -4125,7 +3986,6 @@ func rewriteValue386_Op386DIVSDload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -4141,9 +4001,7 @@ func rewriteValue386_Op386DIVSDload_0(v *Value) bool { } func rewriteValue386_Op386DIVSS_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (DIVSS x l:(MOVSSload [off] {sym} ptr mem)) // cond: canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l) // result: (DIVSSload x [off] {sym} ptr mem) @@ -4156,9 +4014,8 @@ func rewriteValue386_Op386DIVSS_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l)) { break } @@ -4174,16 +4031,14 @@ func rewriteValue386_Op386DIVSS_0(v *Value) bool { } func rewriteValue386_Op386DIVSSload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (DIVSSload [off1] {sym} val (ADDLconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (DIVSSload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -4191,7 +4046,6 @@ func rewriteValue386_Op386DIVSSload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -4209,7 +4063,7 @@ func rewriteValue386_Op386DIVSSload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL { @@ -4218,7 +4072,6 @@ func rewriteValue386_Op386DIVSSload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -4264,9 +4117,8 @@ func rewriteValue386_Op386LEAL_0(v *Value) bool { if v_0.Op != Op386ADDL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] if !(x.Op != OpSB && y.Op != OpSB) { break } @@ -4311,9 +4163,8 @@ func rewriteValue386_Op386LEAL_0(v *Value) bool { } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -4336,9 +4187,8 @@ func rewriteValue386_Op386LEAL_0(v *Value) bool { } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -4361,9 +4211,8 @@ func rewriteValue386_Op386LEAL_0(v *Value) bool { } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -4386,9 +4235,8 @@ func rewriteValue386_Op386LEAL_0(v *Value) bool { } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -4408,14 +4256,13 @@ func rewriteValue386_Op386LEAL1_0(v *Value) bool { for { c := v.AuxInt s := v.Aux - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break } d := v_0.AuxInt x := v_0.Args[0] - y := v.Args[1] if !(is32Bit(c+d) && x.Op != OpSB) { break } @@ -4479,7 +4326,7 @@ func rewriteValue386_Op386LEAL1_0(v *Value) bool { for { c := v.AuxInt s := v.Aux - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SHLLconst { break @@ -4488,7 +4335,6 @@ func rewriteValue386_Op386LEAL1_0(v *Value) bool { break } y := v_0.Args[0] - x := v.Args[1] v.reset(Op386LEAL2) v.AuxInt = c v.Aux = s @@ -4525,7 +4371,7 @@ func rewriteValue386_Op386LEAL1_0(v *Value) bool { for { c := v.AuxInt s := v.Aux - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SHLLconst { break @@ -4534,7 +4380,6 @@ func rewriteValue386_Op386LEAL1_0(v *Value) bool { break } y := v_0.Args[0] - x := v.Args[1] v.reset(Op386LEAL4) v.AuxInt = c v.Aux = s @@ -4571,7 +4416,7 @@ func rewriteValue386_Op386LEAL1_0(v *Value) bool { for { c := v.AuxInt s := v.Aux - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SHLLconst { break @@ -4580,7 +4425,6 @@ func rewriteValue386_Op386LEAL1_0(v *Value) bool { break } y := v_0.Args[0] - x := v.Args[1] v.reset(Op386LEAL8) v.AuxInt = c v.Aux = s @@ -4594,7 +4438,7 @@ func rewriteValue386_Op386LEAL1_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -4602,7 +4446,6 @@ func rewriteValue386_Op386LEAL1_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux x := v_0.Args[0] - y := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && x.Op != OpSB) { break } @@ -4647,14 +4490,13 @@ func rewriteValue386_Op386LEAL2_0(v *Value) bool { for { c := v.AuxInt s := v.Aux - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break } d := v_0.AuxInt x := v_0.Args[0] - y := v.Args[1] if !(is32Bit(c+d) && x.Op != OpSB) { break } @@ -4741,7 +4583,7 @@ func rewriteValue386_Op386LEAL2_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -4749,7 +4591,6 @@ func rewriteValue386_Op386LEAL2_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux x := v_0.Args[0] - y := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && x.Op != OpSB) { break } @@ -4769,14 +4610,13 @@ func rewriteValue386_Op386LEAL4_0(v *Value) bool { for { c := v.AuxInt s := v.Aux - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break } d := v_0.AuxInt x := v_0.Args[0] - y := v.Args[1] if !(is32Bit(c+d) && x.Op != OpSB) { break } @@ -4840,7 +4680,7 @@ func rewriteValue386_Op386LEAL4_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -4848,7 +4688,6 @@ func rewriteValue386_Op386LEAL4_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux x := v_0.Args[0] - y := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && x.Op != OpSB) { break } @@ -4868,14 +4707,13 @@ func rewriteValue386_Op386LEAL8_0(v *Value) bool { for { c := v.AuxInt s := v.Aux - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break } d := v_0.AuxInt x := v_0.Args[0] - y := v.Args[1] if !(is32Bit(c+d) && x.Op != OpSB) { break } @@ -4916,7 +4754,7 @@ func rewriteValue386_Op386LEAL8_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -4924,7 +4762,6 @@ func rewriteValue386_Op386LEAL8_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux x := v_0.Args[0] - y := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && x.Op != OpSB) { break } @@ -4939,7 +4776,6 @@ func rewriteValue386_Op386LEAL8_0(v *Value) bool { } func rewriteValue386_Op386MOVBLSX_0(v *Value) bool { b := v.Block - _ = b // match: (MOVBLSX x:(MOVBload [off] {sym} ptr mem)) // cond: x.Uses == 1 && clobber(x) // result: @x.Block (MOVBLSXload [off] {sym} ptr mem) @@ -4950,9 +4786,8 @@ func rewriteValue386_Op386MOVBLSX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -4988,9 +4823,7 @@ func rewriteValue386_Op386MOVBLSX_0(v *Value) bool { } func rewriteValue386_Op386MOVBLSXload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVBLSXload [off] {sym} ptr (MOVBstore [off2] {sym2} ptr2 x _)) // cond: sym == sym2 && off == off2 && isSamePtr(ptr, ptr2) // result: (MOVBLSX x) @@ -5021,7 +4854,7 @@ func rewriteValue386_Op386MOVBLSXload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -5029,7 +4862,6 @@ func rewriteValue386_Op386MOVBLSXload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -5044,7 +4876,6 @@ func rewriteValue386_Op386MOVBLSXload_0(v *Value) bool { } func rewriteValue386_Op386MOVBLZX_0(v *Value) bool { b := v.Block - _ = b // match: (MOVBLZX x:(MOVBload [off] {sym} ptr mem)) // cond: x.Uses == 1 && clobber(x) // result: @x.Block (MOVBload [off] {sym} ptr mem) @@ -5055,9 +4886,8 @@ func rewriteValue386_Op386MOVBLZX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -5081,10 +4911,9 @@ func rewriteValue386_Op386MOVBLZX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -5118,9 +4947,7 @@ func rewriteValue386_Op386MOVBLZX_0(v *Value) bool { } func rewriteValue386_Op386MOVBload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVBload [off] {sym} ptr (MOVBstore [off2] {sym2} ptr2 x _)) // cond: sym == sym2 && off == off2 && isSamePtr(ptr, ptr2) // result: (MOVBLZX x) @@ -5151,14 +4978,13 @@ func rewriteValue386_Op386MOVBload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -5175,7 +5001,7 @@ func rewriteValue386_Op386MOVBload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -5183,7 +5009,6 @@ func rewriteValue386_Op386MOVBload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -5200,17 +5025,15 @@ func rewriteValue386_Op386MOVBload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -5228,15 +5051,13 @@ func rewriteValue386_Op386MOVBload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDL { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(ptr.Op != OpSB) { break } @@ -5275,7 +5096,7 @@ func rewriteValue386_Op386MOVBloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -5283,7 +5104,6 @@ func rewriteValue386_Op386MOVBloadidx1_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVBloadidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -5298,7 +5118,7 @@ func rewriteValue386_Op386MOVBloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] idx := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -5306,7 +5126,6 @@ func rewriteValue386_Op386MOVBloadidx1_0(v *Value) bool { } d := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVBloadidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -5321,7 +5140,7 @@ func rewriteValue386_Op386MOVBloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -5329,7 +5148,6 @@ func rewriteValue386_Op386MOVBloadidx1_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVBloadidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -5344,7 +5162,7 @@ func rewriteValue386_Op386MOVBloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -5352,7 +5170,6 @@ func rewriteValue386_Op386MOVBloadidx1_0(v *Value) bool { d := v_0.AuxInt idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVBloadidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -5365,23 +5182,20 @@ func rewriteValue386_Op386MOVBloadidx1_0(v *Value) bool { } func rewriteValue386_Op386MOVBstore_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVBstore [off] {sym} ptr (MOVBLSX x) mem) // cond: // result: (MOVBstore [off] {sym} ptr x mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386MOVBLSX { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVBstore) v.AuxInt = off v.Aux = sym @@ -5396,14 +5210,13 @@ func rewriteValue386_Op386MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386MOVBLZX { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVBstore) v.AuxInt = off v.Aux = sym @@ -5418,7 +5231,7 @@ func rewriteValue386_Op386MOVBstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -5426,7 +5239,6 @@ func rewriteValue386_Op386MOVBstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -5444,14 +5256,13 @@ func rewriteValue386_Op386MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386MOVLconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(validOff(off)) { break } @@ -5468,7 +5279,7 @@ func rewriteValue386_Op386MOVBstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -5477,7 +5288,6 @@ func rewriteValue386_Op386MOVBstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -5495,18 +5305,16 @@ func rewriteValue386_Op386MOVBstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -5525,16 +5333,14 @@ func rewriteValue386_Op386MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDL { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(ptr.Op != OpSB) { break } @@ -5573,14 +5379,13 @@ func rewriteValue386_Op386MOVBstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if w != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -5618,14 +5423,13 @@ func rewriteValue386_Op386MOVBstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if w != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -5656,7 +5460,7 @@ func rewriteValue386_Op386MOVBstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -5670,7 +5474,6 @@ func rewriteValue386_Op386MOVBstore_0(v *Value) bool { if w != x_1.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -5704,7 +5507,7 @@ func rewriteValue386_Op386MOVBstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -5718,7 +5521,6 @@ func rewriteValue386_Op386MOVBstore_10(v *Value) bool { if w != x_1.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -5754,7 +5556,7 @@ func rewriteValue386_Op386MOVBstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -5768,7 +5570,6 @@ func rewriteValue386_Op386MOVBstore_10(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -5784,23 +5585,20 @@ func rewriteValue386_Op386MOVBstore_10(v *Value) bool { } func rewriteValue386_Op386MOVBstoreconst_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVBstoreconst [sc] {s} (ADDLconst [off] ptr) mem) // cond: ValAndOff(sc).canAdd(off) // result: (MOVBstoreconst [ValAndOff(sc).add(off)] {s} ptr mem) for { sc := v.AuxInt s := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break } off := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(sc).canAdd(off)) { break } @@ -5817,7 +5615,7 @@ func rewriteValue386_Op386MOVBstoreconst_0(v *Value) bool { for { sc := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -5825,7 +5623,6 @@ func rewriteValue386_Op386MOVBstoreconst_0(v *Value) bool { off := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd(off) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -5842,17 +5639,15 @@ func rewriteValue386_Op386MOVBstoreconst_0(v *Value) bool { for { x := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL1 { break } off := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(canMergeSym(sym1, sym2)) { break } @@ -5870,15 +5665,13 @@ func rewriteValue386_Op386MOVBstoreconst_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDL { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] v.reset(Op386MOVBstoreconstidx1) v.AuxInt = x v.Aux = sym @@ -5903,11 +5696,10 @@ func rewriteValue386_Op386MOVBstoreconst_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[1] + mem := x.Args[1] if p != x.Args[0] { break } - mem := x.Args[1] if !(x.Uses == 1 && ValAndOff(a).Off()+1 == ValAndOff(c).Off() && clobber(x)) { break } @@ -5934,11 +5726,10 @@ func rewriteValue386_Op386MOVBstoreconst_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[1] + mem := x.Args[1] if p != x.Args[0] { break } - mem := x.Args[1] if !(x.Uses == 1 && ValAndOff(a).Off()+1 == ValAndOff(c).Off() && clobber(x)) { break } @@ -5958,7 +5749,7 @@ func rewriteValue386_Op386MOVBstoreconstidx1_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -5966,7 +5757,6 @@ func rewriteValue386_Op386MOVBstoreconstidx1_0(v *Value) bool { c := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVBstoreconstidx1) v.AuxInt = ValAndOff(x).add(c) v.Aux = sym @@ -5981,7 +5771,7 @@ func rewriteValue386_Op386MOVBstoreconstidx1_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -5989,7 +5779,6 @@ func rewriteValue386_Op386MOVBstoreconstidx1_0(v *Value) bool { } c := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVBstoreconstidx1) v.AuxInt = ValAndOff(x).add(c) v.Aux = sym @@ -6015,14 +5804,13 @@ func rewriteValue386_Op386MOVBstoreconstidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if i != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && ValAndOff(a).Off()+1 == ValAndOff(c).Off() && clobber(x)) { break } @@ -6043,7 +5831,7 @@ func rewriteValue386_Op386MOVBstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -6052,7 +5840,6 @@ func rewriteValue386_Op386MOVBstoreidx1_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVBstoreidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -6068,7 +5855,7 @@ func rewriteValue386_Op386MOVBstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] idx := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -6077,7 +5864,6 @@ func rewriteValue386_Op386MOVBstoreidx1_0(v *Value) bool { d := v_1.AuxInt ptr := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVBstoreidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -6093,7 +5879,7 @@ func rewriteValue386_Op386MOVBstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -6102,7 +5888,6 @@ func rewriteValue386_Op386MOVBstoreidx1_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVBstoreidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -6118,7 +5903,7 @@ func rewriteValue386_Op386MOVBstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -6127,7 +5912,6 @@ func rewriteValue386_Op386MOVBstoreidx1_0(v *Value) bool { idx := v_0.Args[0] ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVBstoreidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -6164,7 +5948,7 @@ func rewriteValue386_Op386MOVBstoreidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -6174,7 +5958,6 @@ func rewriteValue386_Op386MOVBstoreidx1_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -6214,7 +5997,7 @@ func rewriteValue386_Op386MOVBstoreidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -6224,7 +6007,6 @@ func rewriteValue386_Op386MOVBstoreidx1_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -6264,7 +6046,7 @@ func rewriteValue386_Op386MOVBstoreidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -6274,7 +6056,6 @@ func rewriteValue386_Op386MOVBstoreidx1_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -6314,7 +6095,7 @@ func rewriteValue386_Op386MOVBstoreidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -6324,7 +6105,6 @@ func rewriteValue386_Op386MOVBstoreidx1_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -6364,7 +6144,7 @@ func rewriteValue386_Op386MOVBstoreidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -6374,7 +6154,6 @@ func rewriteValue386_Op386MOVBstoreidx1_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -6414,7 +6193,7 @@ func rewriteValue386_Op386MOVBstoreidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -6424,7 +6203,6 @@ func rewriteValue386_Op386MOVBstoreidx1_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -6467,7 +6245,7 @@ func rewriteValue386_Op386MOVBstoreidx1_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -6477,7 +6255,6 @@ func rewriteValue386_Op386MOVBstoreidx1_10(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -6517,7 +6294,7 @@ func rewriteValue386_Op386MOVBstoreidx1_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -6527,7 +6304,6 @@ func rewriteValue386_Op386MOVBstoreidx1_10(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -6560,7 +6336,7 @@ func rewriteValue386_Op386MOVBstoreidx1_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -6577,7 +6353,6 @@ func rewriteValue386_Op386MOVBstoreidx1_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -6610,7 +6385,7 @@ func rewriteValue386_Op386MOVBstoreidx1_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -6627,7 +6402,6 @@ func rewriteValue386_Op386MOVBstoreidx1_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -6660,7 +6434,7 @@ func rewriteValue386_Op386MOVBstoreidx1_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -6677,7 +6451,6 @@ func rewriteValue386_Op386MOVBstoreidx1_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -6710,7 +6483,7 @@ func rewriteValue386_Op386MOVBstoreidx1_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -6727,7 +6500,6 @@ func rewriteValue386_Op386MOVBstoreidx1_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -6760,7 +6532,7 @@ func rewriteValue386_Op386MOVBstoreidx1_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -6777,7 +6549,6 @@ func rewriteValue386_Op386MOVBstoreidx1_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -6810,7 +6581,7 @@ func rewriteValue386_Op386MOVBstoreidx1_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -6827,7 +6598,6 @@ func rewriteValue386_Op386MOVBstoreidx1_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -6860,7 +6630,7 @@ func rewriteValue386_Op386MOVBstoreidx1_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -6877,7 +6647,6 @@ func rewriteValue386_Op386MOVBstoreidx1_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -6910,7 +6679,7 @@ func rewriteValue386_Op386MOVBstoreidx1_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -6927,7 +6696,6 @@ func rewriteValue386_Op386MOVBstoreidx1_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -6968,7 +6736,7 @@ func rewriteValue386_Op386MOVBstoreidx1_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -6985,7 +6753,6 @@ func rewriteValue386_Op386MOVBstoreidx1_20(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -7023,7 +6790,7 @@ func rewriteValue386_Op386MOVBstoreidx1_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -7040,7 +6807,6 @@ func rewriteValue386_Op386MOVBstoreidx1_20(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -7078,7 +6844,7 @@ func rewriteValue386_Op386MOVBstoreidx1_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -7095,7 +6861,6 @@ func rewriteValue386_Op386MOVBstoreidx1_20(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -7133,7 +6898,7 @@ func rewriteValue386_Op386MOVBstoreidx1_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -7150,7 +6915,6 @@ func rewriteValue386_Op386MOVBstoreidx1_20(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -7167,9 +6931,7 @@ func rewriteValue386_Op386MOVBstoreidx1_20(v *Value) bool { } func rewriteValue386_Op386MOVLload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVLload [off] {sym} ptr (MOVLstore [off2] {sym2} ptr2 x _)) // cond: sym == sym2 && off == off2 && isSamePtr(ptr, ptr2) // result: x @@ -7201,14 +6963,13 @@ func rewriteValue386_Op386MOVLload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -7225,7 +6986,7 @@ func rewriteValue386_Op386MOVLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -7233,7 +6994,6 @@ func rewriteValue386_Op386MOVLload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -7250,17 +7010,15 @@ func rewriteValue386_Op386MOVLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -7278,17 +7036,15 @@ func rewriteValue386_Op386MOVLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL4 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -7306,15 +7062,13 @@ func rewriteValue386_Op386MOVLload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDL { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(ptr.Op != OpSB) { break } @@ -7353,7 +7107,7 @@ func rewriteValue386_Op386MOVLloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386SHLLconst { @@ -7363,7 +7117,6 @@ func rewriteValue386_Op386MOVLloadidx1_0(v *Value) bool { break } idx := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVLloadidx4) v.AuxInt = c v.Aux = sym @@ -7378,7 +7131,7 @@ func rewriteValue386_Op386MOVLloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386SHLLconst { break @@ -7388,7 +7141,6 @@ func rewriteValue386_Op386MOVLloadidx1_0(v *Value) bool { } idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVLloadidx4) v.AuxInt = c v.Aux = sym @@ -7403,7 +7155,7 @@ func rewriteValue386_Op386MOVLloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -7411,7 +7163,6 @@ func rewriteValue386_Op386MOVLloadidx1_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVLloadidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -7426,7 +7177,7 @@ func rewriteValue386_Op386MOVLloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] idx := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -7434,7 +7185,6 @@ func rewriteValue386_Op386MOVLloadidx1_0(v *Value) bool { } d := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVLloadidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -7449,7 +7199,7 @@ func rewriteValue386_Op386MOVLloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -7457,7 +7207,6 @@ func rewriteValue386_Op386MOVLloadidx1_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVLloadidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -7472,7 +7221,7 @@ func rewriteValue386_Op386MOVLloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -7480,7 +7229,6 @@ func rewriteValue386_Op386MOVLloadidx1_0(v *Value) bool { d := v_0.AuxInt idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVLloadidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -7498,7 +7246,7 @@ func rewriteValue386_Op386MOVLloadidx4_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -7506,7 +7254,6 @@ func rewriteValue386_Op386MOVLloadidx4_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVLloadidx4) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -7521,7 +7268,7 @@ func rewriteValue386_Op386MOVLloadidx4_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -7529,7 +7276,6 @@ func rewriteValue386_Op386MOVLloadidx4_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVLloadidx4) v.AuxInt = int64(int32(c + 4*d)) v.Aux = sym @@ -7542,16 +7288,14 @@ func rewriteValue386_Op386MOVLloadidx4_0(v *Value) bool { } func rewriteValue386_Op386MOVLstore_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVLstore [off1] {sym} (ADDLconst [off2] ptr) val mem) // cond: is32Bit(off1+off2) // result: (MOVLstore [off1+off2] {sym} ptr val mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -7559,7 +7303,6 @@ func rewriteValue386_Op386MOVLstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -7577,14 +7320,13 @@ func rewriteValue386_Op386MOVLstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386MOVLconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(validOff(off)) { break } @@ -7601,7 +7343,7 @@ func rewriteValue386_Op386MOVLstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -7610,7 +7352,6 @@ func rewriteValue386_Op386MOVLstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -7628,18 +7369,16 @@ func rewriteValue386_Op386MOVLstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -7658,18 +7397,16 @@ func rewriteValue386_Op386MOVLstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL4 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -7688,16 +7425,14 @@ func rewriteValue386_Op386MOVLstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDL { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(ptr.Op != OpSB) { break } @@ -7716,7 +7451,7 @@ func rewriteValue386_Op386MOVLstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != Op386ADDLload { @@ -7733,8 +7468,7 @@ func rewriteValue386_Op386MOVLstore_0(v *Value) bool { if ptr != y.Args[1] { break } - mem := y.Args[2] - if mem != v.Args[2] { + if mem != y.Args[2] { break } if !(y.Uses == 1 && clobber(y)) { @@ -7754,7 +7488,7 @@ func rewriteValue386_Op386MOVLstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != Op386ANDLload { @@ -7771,8 +7505,7 @@ func rewriteValue386_Op386MOVLstore_0(v *Value) bool { if ptr != y.Args[1] { break } - mem := y.Args[2] - if mem != v.Args[2] { + if mem != y.Args[2] { break } if !(y.Uses == 1 && clobber(y)) { @@ -7792,7 +7525,7 @@ func rewriteValue386_Op386MOVLstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != Op386ORLload { @@ -7809,8 +7542,7 @@ func rewriteValue386_Op386MOVLstore_0(v *Value) bool { if ptr != y.Args[1] { break } - mem := y.Args[2] - if mem != v.Args[2] { + if mem != y.Args[2] { break } if !(y.Uses == 1 && clobber(y)) { @@ -7830,7 +7562,7 @@ func rewriteValue386_Op386MOVLstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != Op386XORLload { @@ -7847,8 +7579,7 @@ func rewriteValue386_Op386MOVLstore_0(v *Value) bool { if ptr != y.Args[1] { break } - mem := y.Args[2] - if mem != v.Args[2] { + if mem != y.Args[2] { break } if !(y.Uses == 1 && clobber(y)) { @@ -7871,13 +7602,13 @@ func rewriteValue386_Op386MOVLstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != Op386ADDL { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != Op386MOVLload { break @@ -7892,9 +7623,7 @@ func rewriteValue386_Op386MOVLstore_10(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - x := y.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -7914,7 +7643,7 @@ func rewriteValue386_Op386MOVLstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != Op386ADDL { @@ -7936,8 +7665,7 @@ func rewriteValue386_Op386MOVLstore_10(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -7957,13 +7685,13 @@ func rewriteValue386_Op386MOVLstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != Op386SUBL { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != Op386MOVLload { break @@ -7978,9 +7706,7 @@ func rewriteValue386_Op386MOVLstore_10(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - x := y.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -8000,13 +7726,13 @@ func rewriteValue386_Op386MOVLstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != Op386ANDL { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != Op386MOVLload { break @@ -8021,9 +7747,7 @@ func rewriteValue386_Op386MOVLstore_10(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - x := y.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -8043,7 +7767,7 @@ func rewriteValue386_Op386MOVLstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != Op386ANDL { @@ -8065,8 +7789,7 @@ func rewriteValue386_Op386MOVLstore_10(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -8086,13 +7809,13 @@ func rewriteValue386_Op386MOVLstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != Op386ORL { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != Op386MOVLload { break @@ -8107,9 +7830,7 @@ func rewriteValue386_Op386MOVLstore_10(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - x := y.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -8129,7 +7850,7 @@ func rewriteValue386_Op386MOVLstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != Op386ORL { @@ -8151,8 +7872,7 @@ func rewriteValue386_Op386MOVLstore_10(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -8172,13 +7892,13 @@ func rewriteValue386_Op386MOVLstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != Op386XORL { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != Op386MOVLload { break @@ -8193,9 +7913,7 @@ func rewriteValue386_Op386MOVLstore_10(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - x := y.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -8215,7 +7933,7 @@ func rewriteValue386_Op386MOVLstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != Op386XORL { @@ -8237,8 +7955,7 @@ func rewriteValue386_Op386MOVLstore_10(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -8258,7 +7975,7 @@ func rewriteValue386_Op386MOVLstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != Op386ADDLconst { @@ -8279,8 +7996,7 @@ func rewriteValue386_Op386MOVLstore_10(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l) && validValAndOff(c, off)) { @@ -8302,7 +8018,7 @@ func rewriteValue386_Op386MOVLstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != Op386ANDLconst { @@ -8323,8 +8039,7 @@ func rewriteValue386_Op386MOVLstore_20(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l) && validValAndOff(c, off)) { @@ -8343,7 +8058,7 @@ func rewriteValue386_Op386MOVLstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != Op386ORLconst { @@ -8364,8 +8079,7 @@ func rewriteValue386_Op386MOVLstore_20(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l) && validValAndOff(c, off)) { @@ -8384,7 +8098,7 @@ func rewriteValue386_Op386MOVLstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != Op386XORLconst { @@ -8405,8 +8119,7 @@ func rewriteValue386_Op386MOVLstore_20(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l) && validValAndOff(c, off)) { @@ -8423,23 +8136,20 @@ func rewriteValue386_Op386MOVLstore_20(v *Value) bool { } func rewriteValue386_Op386MOVLstoreconst_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVLstoreconst [sc] {s} (ADDLconst [off] ptr) mem) // cond: ValAndOff(sc).canAdd(off) // result: (MOVLstoreconst [ValAndOff(sc).add(off)] {s} ptr mem) for { sc := v.AuxInt s := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break } off := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(sc).canAdd(off)) { break } @@ -8456,7 +8166,7 @@ func rewriteValue386_Op386MOVLstoreconst_0(v *Value) bool { for { sc := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -8464,7 +8174,6 @@ func rewriteValue386_Op386MOVLstoreconst_0(v *Value) bool { off := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd(off) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -8481,17 +8190,15 @@ func rewriteValue386_Op386MOVLstoreconst_0(v *Value) bool { for { x := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL1 { break } off := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(canMergeSym(sym1, sym2)) { break } @@ -8509,17 +8216,15 @@ func rewriteValue386_Op386MOVLstoreconst_0(v *Value) bool { for { x := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL4 { break } off := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(canMergeSym(sym1, sym2)) { break } @@ -8537,15 +8242,13 @@ func rewriteValue386_Op386MOVLstoreconst_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDL { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] v.reset(Op386MOVLstoreconstidx1) v.AuxInt = x v.Aux = sym @@ -8563,7 +8266,7 @@ func rewriteValue386_Op386MOVLstoreconstidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386SHLLconst { @@ -8573,7 +8276,6 @@ func rewriteValue386_Op386MOVLstoreconstidx1_0(v *Value) bool { break } idx := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVLstoreconstidx4) v.AuxInt = c v.Aux = sym @@ -8588,7 +8290,7 @@ func rewriteValue386_Op386MOVLstoreconstidx1_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -8596,7 +8298,6 @@ func rewriteValue386_Op386MOVLstoreconstidx1_0(v *Value) bool { c := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVLstoreconstidx1) v.AuxInt = ValAndOff(x).add(c) v.Aux = sym @@ -8611,7 +8312,7 @@ func rewriteValue386_Op386MOVLstoreconstidx1_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -8619,7 +8320,6 @@ func rewriteValue386_Op386MOVLstoreconstidx1_0(v *Value) bool { } c := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVLstoreconstidx1) v.AuxInt = ValAndOff(x).add(c) v.Aux = sym @@ -8637,7 +8337,7 @@ func rewriteValue386_Op386MOVLstoreconstidx4_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -8645,7 +8345,6 @@ func rewriteValue386_Op386MOVLstoreconstidx4_0(v *Value) bool { c := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVLstoreconstidx4) v.AuxInt = ValAndOff(x).add(c) v.Aux = sym @@ -8660,7 +8359,7 @@ func rewriteValue386_Op386MOVLstoreconstidx4_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -8668,7 +8367,6 @@ func rewriteValue386_Op386MOVLstoreconstidx4_0(v *Value) bool { } c := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVLstoreconstidx4) v.AuxInt = ValAndOff(x).add(4 * c) v.Aux = sym @@ -8686,7 +8384,7 @@ func rewriteValue386_Op386MOVLstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386SHLLconst { @@ -8697,7 +8395,6 @@ func rewriteValue386_Op386MOVLstoreidx1_0(v *Value) bool { } idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVLstoreidx4) v.AuxInt = c v.Aux = sym @@ -8713,7 +8410,7 @@ func rewriteValue386_Op386MOVLstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386SHLLconst { break @@ -8724,7 +8421,6 @@ func rewriteValue386_Op386MOVLstoreidx1_0(v *Value) bool { idx := v_0.Args[0] ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVLstoreidx4) v.AuxInt = c v.Aux = sym @@ -8740,7 +8436,7 @@ func rewriteValue386_Op386MOVLstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -8749,7 +8445,6 @@ func rewriteValue386_Op386MOVLstoreidx1_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVLstoreidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -8765,7 +8460,7 @@ func rewriteValue386_Op386MOVLstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] idx := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -8774,7 +8469,6 @@ func rewriteValue386_Op386MOVLstoreidx1_0(v *Value) bool { d := v_1.AuxInt ptr := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVLstoreidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -8790,7 +8484,7 @@ func rewriteValue386_Op386MOVLstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -8799,7 +8493,6 @@ func rewriteValue386_Op386MOVLstoreidx1_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVLstoreidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -8815,7 +8508,7 @@ func rewriteValue386_Op386MOVLstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -8824,7 +8517,6 @@ func rewriteValue386_Op386MOVLstoreidx1_0(v *Value) bool { idx := v_0.Args[0] ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVLstoreidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -8843,7 +8535,7 @@ func rewriteValue386_Op386MOVLstoreidx4_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -8852,7 +8544,6 @@ func rewriteValue386_Op386MOVLstoreidx4_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVLstoreidx4) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -8868,7 +8559,7 @@ func rewriteValue386_Op386MOVLstoreidx4_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -8877,7 +8568,6 @@ func rewriteValue386_Op386MOVLstoreidx4_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVLstoreidx4) v.AuxInt = int64(int32(c + 4*d)) v.Aux = sym @@ -8893,7 +8583,7 @@ func rewriteValue386_Op386MOVLstoreidx4_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] y := v.Args[2] @@ -8914,8 +8604,7 @@ func rewriteValue386_Op386MOVLstoreidx4_0(v *Value) bool { if idx != y.Args[2] { break } - mem := y.Args[3] - if mem != v.Args[3] { + if mem != y.Args[3] { break } if !(y.Uses == 1 && clobber(y)) { @@ -8936,7 +8625,7 @@ func rewriteValue386_Op386MOVLstoreidx4_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] y := v.Args[2] @@ -8957,8 +8646,7 @@ func rewriteValue386_Op386MOVLstoreidx4_0(v *Value) bool { if idx != y.Args[2] { break } - mem := y.Args[3] - if mem != v.Args[3] { + if mem != y.Args[3] { break } if !(y.Uses == 1 && clobber(y)) { @@ -8979,7 +8667,7 @@ func rewriteValue386_Op386MOVLstoreidx4_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] y := v.Args[2] @@ -9000,8 +8688,7 @@ func rewriteValue386_Op386MOVLstoreidx4_0(v *Value) bool { if idx != y.Args[2] { break } - mem := y.Args[3] - if mem != v.Args[3] { + if mem != y.Args[3] { break } if !(y.Uses == 1 && clobber(y)) { @@ -9022,7 +8709,7 @@ func rewriteValue386_Op386MOVLstoreidx4_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] y := v.Args[2] @@ -9043,8 +8730,7 @@ func rewriteValue386_Op386MOVLstoreidx4_0(v *Value) bool { if idx != y.Args[2] { break } - mem := y.Args[3] - if mem != v.Args[3] { + if mem != y.Args[3] { break } if !(y.Uses == 1 && clobber(y)) { @@ -9065,14 +8751,14 @@ func rewriteValue386_Op386MOVLstoreidx4_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] y := v.Args[2] if y.Op != Op386ADDL { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != Op386MOVLloadidx4 { break @@ -9090,9 +8776,7 @@ func rewriteValue386_Op386MOVLstoreidx4_0(v *Value) bool { if idx != l.Args[1] { break } - mem := l.Args[2] - x := y.Args[1] - if mem != v.Args[3] { + if mem != l.Args[2] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -9113,7 +8797,7 @@ func rewriteValue386_Op386MOVLstoreidx4_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] y := v.Args[2] @@ -9139,8 +8823,7 @@ func rewriteValue386_Op386MOVLstoreidx4_0(v *Value) bool { if idx != l.Args[1] { break } - mem := l.Args[2] - if mem != v.Args[3] { + if mem != l.Args[2] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -9161,14 +8844,14 @@ func rewriteValue386_Op386MOVLstoreidx4_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] y := v.Args[2] if y.Op != Op386SUBL { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != Op386MOVLloadidx4 { break @@ -9186,9 +8869,7 @@ func rewriteValue386_Op386MOVLstoreidx4_0(v *Value) bool { if idx != l.Args[1] { break } - mem := l.Args[2] - x := y.Args[1] - if mem != v.Args[3] { + if mem != l.Args[2] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -9209,14 +8890,14 @@ func rewriteValue386_Op386MOVLstoreidx4_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] y := v.Args[2] if y.Op != Op386ANDL { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != Op386MOVLloadidx4 { break @@ -9234,9 +8915,7 @@ func rewriteValue386_Op386MOVLstoreidx4_0(v *Value) bool { if idx != l.Args[1] { break } - mem := l.Args[2] - x := y.Args[1] - if mem != v.Args[3] { + if mem != l.Args[2] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -9260,7 +8939,7 @@ func rewriteValue386_Op386MOVLstoreidx4_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] y := v.Args[2] @@ -9286,8 +8965,7 @@ func rewriteValue386_Op386MOVLstoreidx4_10(v *Value) bool { if idx != l.Args[1] { break } - mem := l.Args[2] - if mem != v.Args[3] { + if mem != l.Args[2] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -9308,14 +8986,14 @@ func rewriteValue386_Op386MOVLstoreidx4_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] y := v.Args[2] if y.Op != Op386ORL { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != Op386MOVLloadidx4 { break @@ -9333,9 +9011,7 @@ func rewriteValue386_Op386MOVLstoreidx4_10(v *Value) bool { if idx != l.Args[1] { break } - mem := l.Args[2] - x := y.Args[1] - if mem != v.Args[3] { + if mem != l.Args[2] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -9356,7 +9032,7 @@ func rewriteValue386_Op386MOVLstoreidx4_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] y := v.Args[2] @@ -9382,8 +9058,7 @@ func rewriteValue386_Op386MOVLstoreidx4_10(v *Value) bool { if idx != l.Args[1] { break } - mem := l.Args[2] - if mem != v.Args[3] { + if mem != l.Args[2] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -9404,14 +9079,14 @@ func rewriteValue386_Op386MOVLstoreidx4_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] y := v.Args[2] if y.Op != Op386XORL { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != Op386MOVLloadidx4 { break @@ -9429,9 +9104,7 @@ func rewriteValue386_Op386MOVLstoreidx4_10(v *Value) bool { if idx != l.Args[1] { break } - mem := l.Args[2] - x := y.Args[1] - if mem != v.Args[3] { + if mem != l.Args[2] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -9452,7 +9125,7 @@ func rewriteValue386_Op386MOVLstoreidx4_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] y := v.Args[2] @@ -9478,8 +9151,7 @@ func rewriteValue386_Op386MOVLstoreidx4_10(v *Value) bool { if idx != l.Args[1] { break } - mem := l.Args[2] - if mem != v.Args[3] { + if mem != l.Args[2] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -9500,7 +9172,7 @@ func rewriteValue386_Op386MOVLstoreidx4_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] y := v.Args[2] @@ -9525,8 +9197,7 @@ func rewriteValue386_Op386MOVLstoreidx4_10(v *Value) bool { if idx != l.Args[1] { break } - mem := l.Args[2] - if mem != v.Args[3] { + if mem != l.Args[2] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l) && validValAndOff(c, off)) { @@ -9546,7 +9217,7 @@ func rewriteValue386_Op386MOVLstoreidx4_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] y := v.Args[2] @@ -9571,8 +9242,7 @@ func rewriteValue386_Op386MOVLstoreidx4_10(v *Value) bool { if idx != l.Args[1] { break } - mem := l.Args[2] - if mem != v.Args[3] { + if mem != l.Args[2] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l) && validValAndOff(c, off)) { @@ -9592,7 +9262,7 @@ func rewriteValue386_Op386MOVLstoreidx4_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] y := v.Args[2] @@ -9617,8 +9287,7 @@ func rewriteValue386_Op386MOVLstoreidx4_10(v *Value) bool { if idx != l.Args[1] { break } - mem := l.Args[2] - if mem != v.Args[3] { + if mem != l.Args[2] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l) && validValAndOff(c, off)) { @@ -9638,7 +9307,7 @@ func rewriteValue386_Op386MOVLstoreidx4_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] y := v.Args[2] @@ -9663,8 +9332,7 @@ func rewriteValue386_Op386MOVLstoreidx4_10(v *Value) bool { if idx != l.Args[1] { break } - mem := l.Args[2] - if mem != v.Args[3] { + if mem != l.Args[2] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l) && validValAndOff(c, off)) { @@ -9682,11 +9350,8 @@ func rewriteValue386_Op386MOVLstoreidx4_10(v *Value) bool { } func rewriteValue386_Op386MOVSDconst_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (MOVSDconst [c]) // cond: config.ctxt.Flag_shared // result: (MOVSDconst2 (MOVSDconst1 [c])) @@ -9705,23 +9370,20 @@ func rewriteValue386_Op386MOVSDconst_0(v *Value) bool { } func rewriteValue386_Op386MOVSDload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVSDload [off1] {sym} (ADDLconst [off2] ptr) mem) // cond: is32Bit(off1+off2) // result: (MOVSDload [off1+off2] {sym} ptr mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -9738,7 +9400,7 @@ func rewriteValue386_Op386MOVSDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -9746,7 +9408,6 @@ func rewriteValue386_Op386MOVSDload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -9763,17 +9424,15 @@ func rewriteValue386_Op386MOVSDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -9791,17 +9450,15 @@ func rewriteValue386_Op386MOVSDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL8 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -9819,15 +9476,13 @@ func rewriteValue386_Op386MOVSDload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDL { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(ptr.Op != OpSB) { break } @@ -9848,7 +9503,7 @@ func rewriteValue386_Op386MOVSDloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -9856,7 +9511,6 @@ func rewriteValue386_Op386MOVSDloadidx1_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVSDloadidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -9871,7 +9525,7 @@ func rewriteValue386_Op386MOVSDloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -9879,7 +9533,6 @@ func rewriteValue386_Op386MOVSDloadidx1_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVSDloadidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -9897,7 +9550,7 @@ func rewriteValue386_Op386MOVSDloadidx8_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -9905,7 +9558,6 @@ func rewriteValue386_Op386MOVSDloadidx8_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVSDloadidx8) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -9920,7 +9572,7 @@ func rewriteValue386_Op386MOVSDloadidx8_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -9928,7 +9580,6 @@ func rewriteValue386_Op386MOVSDloadidx8_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVSDloadidx8) v.AuxInt = int64(int32(c + 8*d)) v.Aux = sym @@ -9941,16 +9592,14 @@ func rewriteValue386_Op386MOVSDloadidx8_0(v *Value) bool { } func rewriteValue386_Op386MOVSDstore_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVSDstore [off1] {sym} (ADDLconst [off2] ptr) val mem) // cond: is32Bit(off1+off2) // result: (MOVSDstore [off1+off2] {sym} ptr val mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -9958,7 +9607,6 @@ func rewriteValue386_Op386MOVSDstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -9976,7 +9624,7 @@ func rewriteValue386_Op386MOVSDstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -9985,7 +9633,6 @@ func rewriteValue386_Op386MOVSDstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -10003,18 +9650,16 @@ func rewriteValue386_Op386MOVSDstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -10033,18 +9678,16 @@ func rewriteValue386_Op386MOVSDstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL8 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -10063,16 +9706,14 @@ func rewriteValue386_Op386MOVSDstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDL { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(ptr.Op != OpSB) { break } @@ -10094,7 +9735,7 @@ func rewriteValue386_Op386MOVSDstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -10103,7 +9744,6 @@ func rewriteValue386_Op386MOVSDstoreidx1_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVSDstoreidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -10119,7 +9759,7 @@ func rewriteValue386_Op386MOVSDstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -10128,7 +9768,6 @@ func rewriteValue386_Op386MOVSDstoreidx1_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVSDstoreidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -10147,7 +9786,7 @@ func rewriteValue386_Op386MOVSDstoreidx8_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -10156,7 +9795,6 @@ func rewriteValue386_Op386MOVSDstoreidx8_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVSDstoreidx8) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -10172,7 +9810,7 @@ func rewriteValue386_Op386MOVSDstoreidx8_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -10181,7 +9819,6 @@ func rewriteValue386_Op386MOVSDstoreidx8_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVSDstoreidx8) v.AuxInt = int64(int32(c + 8*d)) v.Aux = sym @@ -10195,11 +9832,8 @@ func rewriteValue386_Op386MOVSDstoreidx8_0(v *Value) bool { } func rewriteValue386_Op386MOVSSconst_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (MOVSSconst [c]) // cond: config.ctxt.Flag_shared // result: (MOVSSconst2 (MOVSSconst1 [c])) @@ -10218,23 +9852,20 @@ func rewriteValue386_Op386MOVSSconst_0(v *Value) bool { } func rewriteValue386_Op386MOVSSload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVSSload [off1] {sym} (ADDLconst [off2] ptr) mem) // cond: is32Bit(off1+off2) // result: (MOVSSload [off1+off2] {sym} ptr mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -10251,7 +9882,7 @@ func rewriteValue386_Op386MOVSSload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -10259,7 +9890,6 @@ func rewriteValue386_Op386MOVSSload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -10276,17 +9906,15 @@ func rewriteValue386_Op386MOVSSload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -10304,17 +9932,15 @@ func rewriteValue386_Op386MOVSSload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL4 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -10332,15 +9958,13 @@ func rewriteValue386_Op386MOVSSload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDL { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(ptr.Op != OpSB) { break } @@ -10361,7 +9985,7 @@ func rewriteValue386_Op386MOVSSloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -10369,7 +9993,6 @@ func rewriteValue386_Op386MOVSSloadidx1_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVSSloadidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -10384,7 +10007,7 @@ func rewriteValue386_Op386MOVSSloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -10392,7 +10015,6 @@ func rewriteValue386_Op386MOVSSloadidx1_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVSSloadidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -10410,7 +10032,7 @@ func rewriteValue386_Op386MOVSSloadidx4_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -10418,7 +10040,6 @@ func rewriteValue386_Op386MOVSSloadidx4_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVSSloadidx4) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -10433,7 +10054,7 @@ func rewriteValue386_Op386MOVSSloadidx4_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -10441,7 +10062,6 @@ func rewriteValue386_Op386MOVSSloadidx4_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVSSloadidx4) v.AuxInt = int64(int32(c + 4*d)) v.Aux = sym @@ -10454,16 +10074,14 @@ func rewriteValue386_Op386MOVSSloadidx4_0(v *Value) bool { } func rewriteValue386_Op386MOVSSstore_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVSSstore [off1] {sym} (ADDLconst [off2] ptr) val mem) // cond: is32Bit(off1+off2) // result: (MOVSSstore [off1+off2] {sym} ptr val mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -10471,7 +10089,6 @@ func rewriteValue386_Op386MOVSSstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -10489,7 +10106,7 @@ func rewriteValue386_Op386MOVSSstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -10498,7 +10115,6 @@ func rewriteValue386_Op386MOVSSstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -10516,18 +10132,16 @@ func rewriteValue386_Op386MOVSSstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -10546,18 +10160,16 @@ func rewriteValue386_Op386MOVSSstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL4 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -10576,16 +10188,14 @@ func rewriteValue386_Op386MOVSSstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDL { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(ptr.Op != OpSB) { break } @@ -10607,7 +10217,7 @@ func rewriteValue386_Op386MOVSSstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -10616,7 +10226,6 @@ func rewriteValue386_Op386MOVSSstoreidx1_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVSSstoreidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -10632,7 +10241,7 @@ func rewriteValue386_Op386MOVSSstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -10641,7 +10250,6 @@ func rewriteValue386_Op386MOVSSstoreidx1_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVSSstoreidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -10660,7 +10268,7 @@ func rewriteValue386_Op386MOVSSstoreidx4_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -10669,7 +10277,6 @@ func rewriteValue386_Op386MOVSSstoreidx4_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVSSstoreidx4) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -10685,7 +10292,7 @@ func rewriteValue386_Op386MOVSSstoreidx4_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -10694,7 +10301,6 @@ func rewriteValue386_Op386MOVSSstoreidx4_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVSSstoreidx4) v.AuxInt = int64(int32(c + 4*d)) v.Aux = sym @@ -10708,7 +10314,6 @@ func rewriteValue386_Op386MOVSSstoreidx4_0(v *Value) bool { } func rewriteValue386_Op386MOVWLSX_0(v *Value) bool { b := v.Block - _ = b // match: (MOVWLSX x:(MOVWload [off] {sym} ptr mem)) // cond: x.Uses == 1 && clobber(x) // result: @x.Block (MOVWLSXload [off] {sym} ptr mem) @@ -10719,9 +10324,8 @@ func rewriteValue386_Op386MOVWLSX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -10757,9 +10361,7 @@ func rewriteValue386_Op386MOVWLSX_0(v *Value) bool { } func rewriteValue386_Op386MOVWLSXload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVWLSXload [off] {sym} ptr (MOVWstore [off2] {sym2} ptr2 x _)) // cond: sym == sym2 && off == off2 && isSamePtr(ptr, ptr2) // result: (MOVWLSX x) @@ -10790,7 +10392,7 @@ func rewriteValue386_Op386MOVWLSXload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -10798,7 +10400,6 @@ func rewriteValue386_Op386MOVWLSXload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -10813,7 +10414,6 @@ func rewriteValue386_Op386MOVWLSXload_0(v *Value) bool { } func rewriteValue386_Op386MOVWLZX_0(v *Value) bool { b := v.Block - _ = b // match: (MOVWLZX x:(MOVWload [off] {sym} ptr mem)) // cond: x.Uses == 1 && clobber(x) // result: @x.Block (MOVWload [off] {sym} ptr mem) @@ -10824,9 +10424,8 @@ func rewriteValue386_Op386MOVWLZX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -10850,10 +10449,9 @@ func rewriteValue386_Op386MOVWLZX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -10878,10 +10476,9 @@ func rewriteValue386_Op386MOVWLZX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -10915,9 +10512,7 @@ func rewriteValue386_Op386MOVWLZX_0(v *Value) bool { } func rewriteValue386_Op386MOVWload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVWload [off] {sym} ptr (MOVWstore [off2] {sym2} ptr2 x _)) // cond: sym == sym2 && off == off2 && isSamePtr(ptr, ptr2) // result: (MOVWLZX x) @@ -10948,14 +10543,13 @@ func rewriteValue386_Op386MOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -10972,7 +10566,7 @@ func rewriteValue386_Op386MOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -10980,7 +10574,6 @@ func rewriteValue386_Op386MOVWload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -10997,17 +10590,15 @@ func rewriteValue386_Op386MOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -11025,17 +10616,15 @@ func rewriteValue386_Op386MOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL2 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -11053,15 +10642,13 @@ func rewriteValue386_Op386MOVWload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDL { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(ptr.Op != OpSB) { break } @@ -11100,7 +10687,7 @@ func rewriteValue386_Op386MOVWloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386SHLLconst { @@ -11110,7 +10697,6 @@ func rewriteValue386_Op386MOVWloadidx1_0(v *Value) bool { break } idx := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVWloadidx2) v.AuxInt = c v.Aux = sym @@ -11125,7 +10711,7 @@ func rewriteValue386_Op386MOVWloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386SHLLconst { break @@ -11135,7 +10721,6 @@ func rewriteValue386_Op386MOVWloadidx1_0(v *Value) bool { } idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVWloadidx2) v.AuxInt = c v.Aux = sym @@ -11150,7 +10735,7 @@ func rewriteValue386_Op386MOVWloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -11158,7 +10743,6 @@ func rewriteValue386_Op386MOVWloadidx1_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVWloadidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -11173,7 +10757,7 @@ func rewriteValue386_Op386MOVWloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] idx := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -11181,7 +10765,6 @@ func rewriteValue386_Op386MOVWloadidx1_0(v *Value) bool { } d := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVWloadidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -11196,7 +10779,7 @@ func rewriteValue386_Op386MOVWloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -11204,7 +10787,6 @@ func rewriteValue386_Op386MOVWloadidx1_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVWloadidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -11219,7 +10801,7 @@ func rewriteValue386_Op386MOVWloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -11227,7 +10809,6 @@ func rewriteValue386_Op386MOVWloadidx1_0(v *Value) bool { d := v_0.AuxInt idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVWloadidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -11245,7 +10826,7 @@ func rewriteValue386_Op386MOVWloadidx2_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -11253,7 +10834,6 @@ func rewriteValue386_Op386MOVWloadidx2_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVWloadidx2) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -11268,7 +10848,7 @@ func rewriteValue386_Op386MOVWloadidx2_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -11276,7 +10856,6 @@ func rewriteValue386_Op386MOVWloadidx2_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVWloadidx2) v.AuxInt = int64(int32(c + 2*d)) v.Aux = sym @@ -11289,23 +10868,20 @@ func rewriteValue386_Op386MOVWloadidx2_0(v *Value) bool { } func rewriteValue386_Op386MOVWstore_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVWstore [off] {sym} ptr (MOVWLSX x) mem) // cond: // result: (MOVWstore [off] {sym} ptr x mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386MOVWLSX { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVWstore) v.AuxInt = off v.Aux = sym @@ -11320,14 +10896,13 @@ func rewriteValue386_Op386MOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386MOVWLZX { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVWstore) v.AuxInt = off v.Aux = sym @@ -11342,7 +10917,7 @@ func rewriteValue386_Op386MOVWstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -11350,7 +10925,6 @@ func rewriteValue386_Op386MOVWstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -11368,14 +10942,13 @@ func rewriteValue386_Op386MOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386MOVLconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(validOff(off)) { break } @@ -11392,7 +10965,7 @@ func rewriteValue386_Op386MOVWstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -11401,7 +10974,6 @@ func rewriteValue386_Op386MOVWstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -11419,18 +10991,16 @@ func rewriteValue386_Op386MOVWstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -11449,18 +11019,16 @@ func rewriteValue386_Op386MOVWstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL2 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -11479,16 +11047,14 @@ func rewriteValue386_Op386MOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDL { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(ptr.Op != OpSB) { break } @@ -11527,14 +11093,13 @@ func rewriteValue386_Op386MOVWstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if w != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -11570,7 +11135,7 @@ func rewriteValue386_Op386MOVWstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -11584,7 +11149,6 @@ func rewriteValue386_Op386MOVWstore_0(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -11600,23 +11164,20 @@ func rewriteValue386_Op386MOVWstore_0(v *Value) bool { } func rewriteValue386_Op386MOVWstoreconst_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVWstoreconst [sc] {s} (ADDLconst [off] ptr) mem) // cond: ValAndOff(sc).canAdd(off) // result: (MOVWstoreconst [ValAndOff(sc).add(off)] {s} ptr mem) for { sc := v.AuxInt s := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break } off := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(sc).canAdd(off)) { break } @@ -11633,7 +11194,7 @@ func rewriteValue386_Op386MOVWstoreconst_0(v *Value) bool { for { sc := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -11641,7 +11202,6 @@ func rewriteValue386_Op386MOVWstoreconst_0(v *Value) bool { off := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd(off) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -11658,17 +11218,15 @@ func rewriteValue386_Op386MOVWstoreconst_0(v *Value) bool { for { x := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL1 { break } off := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(canMergeSym(sym1, sym2)) { break } @@ -11686,17 +11244,15 @@ func rewriteValue386_Op386MOVWstoreconst_0(v *Value) bool { for { x := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL2 { break } off := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(canMergeSym(sym1, sym2)) { break } @@ -11714,15 +11270,13 @@ func rewriteValue386_Op386MOVWstoreconst_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDL { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] v.reset(Op386MOVWstoreconstidx1) v.AuxInt = x v.Aux = sym @@ -11747,11 +11301,10 @@ func rewriteValue386_Op386MOVWstoreconst_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[1] + mem := x.Args[1] if p != x.Args[0] { break } - mem := x.Args[1] if !(x.Uses == 1 && ValAndOff(a).Off()+2 == ValAndOff(c).Off() && clobber(x)) { break } @@ -11778,11 +11331,10 @@ func rewriteValue386_Op386MOVWstoreconst_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[1] + mem := x.Args[1] if p != x.Args[0] { break } - mem := x.Args[1] if !(x.Uses == 1 && ValAndOff(a).Off()+2 == ValAndOff(c).Off() && clobber(x)) { break } @@ -11802,7 +11354,7 @@ func rewriteValue386_Op386MOVWstoreconstidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386SHLLconst { @@ -11812,7 +11364,6 @@ func rewriteValue386_Op386MOVWstoreconstidx1_0(v *Value) bool { break } idx := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVWstoreconstidx2) v.AuxInt = c v.Aux = sym @@ -11827,7 +11378,7 @@ func rewriteValue386_Op386MOVWstoreconstidx1_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -11835,7 +11386,6 @@ func rewriteValue386_Op386MOVWstoreconstidx1_0(v *Value) bool { c := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVWstoreconstidx1) v.AuxInt = ValAndOff(x).add(c) v.Aux = sym @@ -11850,7 +11400,7 @@ func rewriteValue386_Op386MOVWstoreconstidx1_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -11858,7 +11408,6 @@ func rewriteValue386_Op386MOVWstoreconstidx1_0(v *Value) bool { } c := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVWstoreconstidx1) v.AuxInt = ValAndOff(x).add(c) v.Aux = sym @@ -11884,14 +11433,13 @@ func rewriteValue386_Op386MOVWstoreconstidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if i != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && ValAndOff(a).Off()+2 == ValAndOff(c).Off() && clobber(x)) { break } @@ -11907,14 +11455,13 @@ func rewriteValue386_Op386MOVWstoreconstidx1_0(v *Value) bool { } func rewriteValue386_Op386MOVWstoreconstidx2_0(v *Value) bool { b := v.Block - _ = b // match: (MOVWstoreconstidx2 [x] {sym} (ADDLconst [c] ptr) idx mem) // cond: // result: (MOVWstoreconstidx2 [ValAndOff(x).add(c)] {sym} ptr idx mem) for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -11922,7 +11469,6 @@ func rewriteValue386_Op386MOVWstoreconstidx2_0(v *Value) bool { c := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVWstoreconstidx2) v.AuxInt = ValAndOff(x).add(c) v.Aux = sym @@ -11937,7 +11483,7 @@ func rewriteValue386_Op386MOVWstoreconstidx2_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -11945,7 +11491,6 @@ func rewriteValue386_Op386MOVWstoreconstidx2_0(v *Value) bool { } c := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] v.reset(Op386MOVWstoreconstidx2) v.AuxInt = ValAndOff(x).add(2 * c) v.Aux = sym @@ -11971,14 +11516,13 @@ func rewriteValue386_Op386MOVWstoreconstidx2_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if i != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && ValAndOff(a).Off()+2 == ValAndOff(c).Off() && clobber(x)) { break } @@ -12002,7 +11546,7 @@ func rewriteValue386_Op386MOVWstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386SHLLconst { @@ -12013,7 +11557,6 @@ func rewriteValue386_Op386MOVWstoreidx1_0(v *Value) bool { } idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVWstoreidx2) v.AuxInt = c v.Aux = sym @@ -12029,7 +11572,7 @@ func rewriteValue386_Op386MOVWstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386SHLLconst { break @@ -12040,7 +11583,6 @@ func rewriteValue386_Op386MOVWstoreidx1_0(v *Value) bool { idx := v_0.Args[0] ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVWstoreidx2) v.AuxInt = c v.Aux = sym @@ -12056,7 +11598,7 @@ func rewriteValue386_Op386MOVWstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -12065,7 +11607,6 @@ func rewriteValue386_Op386MOVWstoreidx1_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVWstoreidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -12081,7 +11622,7 @@ func rewriteValue386_Op386MOVWstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] idx := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -12090,7 +11631,6 @@ func rewriteValue386_Op386MOVWstoreidx1_0(v *Value) bool { d := v_1.AuxInt ptr := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVWstoreidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -12106,7 +11646,7 @@ func rewriteValue386_Op386MOVWstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -12115,7 +11655,6 @@ func rewriteValue386_Op386MOVWstoreidx1_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVWstoreidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -12131,7 +11670,7 @@ func rewriteValue386_Op386MOVWstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -12140,7 +11679,6 @@ func rewriteValue386_Op386MOVWstoreidx1_0(v *Value) bool { idx := v_0.Args[0] ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVWstoreidx1) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -12177,7 +11715,7 @@ func rewriteValue386_Op386MOVWstoreidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -12187,7 +11725,6 @@ func rewriteValue386_Op386MOVWstoreidx1_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -12227,7 +11764,7 @@ func rewriteValue386_Op386MOVWstoreidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -12237,7 +11774,6 @@ func rewriteValue386_Op386MOVWstoreidx1_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -12277,7 +11813,7 @@ func rewriteValue386_Op386MOVWstoreidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -12287,7 +11823,6 @@ func rewriteValue386_Op386MOVWstoreidx1_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -12327,7 +11862,7 @@ func rewriteValue386_Op386MOVWstoreidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -12337,7 +11872,6 @@ func rewriteValue386_Op386MOVWstoreidx1_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -12378,7 +11912,7 @@ func rewriteValue386_Op386MOVWstoreidx1_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -12395,7 +11929,6 @@ func rewriteValue386_Op386MOVWstoreidx1_10(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -12433,7 +11966,7 @@ func rewriteValue386_Op386MOVWstoreidx1_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -12450,7 +11983,6 @@ func rewriteValue386_Op386MOVWstoreidx1_10(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -12488,7 +12020,7 @@ func rewriteValue386_Op386MOVWstoreidx1_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -12505,7 +12037,6 @@ func rewriteValue386_Op386MOVWstoreidx1_10(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -12543,7 +12074,7 @@ func rewriteValue386_Op386MOVWstoreidx1_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -12560,7 +12091,6 @@ func rewriteValue386_Op386MOVWstoreidx1_10(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -12577,14 +12107,13 @@ func rewriteValue386_Op386MOVWstoreidx1_10(v *Value) bool { } func rewriteValue386_Op386MOVWstoreidx2_0(v *Value) bool { b := v.Block - _ = b // match: (MOVWstoreidx2 [c] {sym} (ADDLconst [d] ptr) idx val mem) // cond: // result: (MOVWstoreidx2 [int64(int32(c+d))] {sym} ptr idx val mem) for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -12593,7 +12122,6 @@ func rewriteValue386_Op386MOVWstoreidx2_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVWstoreidx2) v.AuxInt = int64(int32(c + d)) v.Aux = sym @@ -12609,7 +12137,7 @@ func rewriteValue386_Op386MOVWstoreidx2_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -12618,7 +12146,6 @@ func rewriteValue386_Op386MOVWstoreidx2_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(Op386MOVWstoreidx2) v.AuxInt = int64(int32(c + 2*d)) v.Aux = sym @@ -12655,7 +12182,7 @@ func rewriteValue386_Op386MOVWstoreidx2_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -12665,7 +12192,6 @@ func rewriteValue386_Op386MOVWstoreidx2_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -12706,7 +12232,7 @@ func rewriteValue386_Op386MOVWstoreidx2_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -12723,7 +12249,6 @@ func rewriteValue386_Op386MOVWstoreidx2_0(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -12762,13 +12287,12 @@ func rewriteValue386_Op386MULL_0(v *Value) bool { // cond: // result: (MULLconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(Op386MULLconst) v.AuxInt = c v.AddArg(x) @@ -12786,9 +12310,8 @@ func rewriteValue386_Op386MULL_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -12804,17 +12327,15 @@ func rewriteValue386_Op386MULL_0(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (MULLload x [off] {sym} ptr mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != Op386MOVLload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -12838,10 +12359,9 @@ func rewriteValue386_Op386MULL_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[2] + mem := l.Args[2] ptr := l.Args[0] idx := l.Args[1] - mem := l.Args[2] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -12858,18 +12378,16 @@ func rewriteValue386_Op386MULL_0(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (MULLloadidx4 x [off] {sym} ptr idx mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != Op386MOVLloadidx4 { break } off := l.AuxInt sym := l.Aux - _ = l.Args[2] + mem := l.Args[2] ptr := l.Args[0] idx := l.Args[1] - mem := l.Args[2] - x := v.Args[1] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -12886,7 +12404,6 @@ func rewriteValue386_Op386MULL_0(v *Value) bool { } func rewriteValue386_Op386MULLconst_0(v *Value) bool { b := v.Block - _ = b // match: (MULLconst [c] (MULLconst [d] x)) // cond: // result: (MULLconst [int64(int32(c * d))] x) @@ -13030,7 +12547,6 @@ func rewriteValue386_Op386MULLconst_0(v *Value) bool { } func rewriteValue386_Op386MULLconst_10(v *Value) bool { b := v.Block - _ = b // match: (MULLconst [9] x) // cond: // result: (LEAL8 x x) @@ -13198,7 +12714,6 @@ func rewriteValue386_Op386MULLconst_10(v *Value) bool { } func rewriteValue386_Op386MULLconst_20(v *Value) bool { b := v.Block - _ = b // match: (MULLconst [73] x) // cond: // result: (LEAL8 x (LEAL8 x x)) @@ -13391,16 +12906,14 @@ func rewriteValue386_Op386MULLconst_30(v *Value) bool { } func rewriteValue386_Op386MULLload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MULLload [off1] {sym} val (ADDLconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (MULLload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -13408,7 +12921,6 @@ func rewriteValue386_Op386MULLload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -13426,7 +12938,7 @@ func rewriteValue386_Op386MULLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL { @@ -13435,7 +12947,6 @@ func rewriteValue386_Op386MULLload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -13453,7 +12964,7 @@ func rewriteValue386_Op386MULLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL4 { @@ -13461,10 +12972,8 @@ func rewriteValue386_Op386MULLload_0(v *Value) bool { } off2 := v_1.AuxInt sym2 := v_1.Aux - _ = v_1.Args[1] - ptr := v_1.Args[0] idx := v_1.Args[1] - mem := v.Args[2] + ptr := v_1.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -13481,16 +12990,14 @@ func rewriteValue386_Op386MULLload_0(v *Value) bool { } func rewriteValue386_Op386MULLloadidx4_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MULLloadidx4 [off1] {sym} val (ADDLconst [off2] base) idx mem) // cond: is32Bit(off1+off2) // result: (MULLloadidx4 [off1+off2] {sym} val base idx mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -13499,7 +13006,6 @@ func rewriteValue386_Op386MULLloadidx4_0(v *Value) bool { off2 := v_1.AuxInt base := v_1.Args[0] idx := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1 + off2)) { break } @@ -13518,7 +13024,7 @@ func rewriteValue386_Op386MULLloadidx4_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] val := v.Args[0] base := v.Args[1] v_2 := v.Args[2] @@ -13527,7 +13033,6 @@ func rewriteValue386_Op386MULLloadidx4_0(v *Value) bool { } off2 := v_2.AuxInt idx := v_2.Args[0] - mem := v.Args[3] if !(is32Bit(off1 + off2*4)) { break } @@ -13546,7 +13051,7 @@ func rewriteValue386_Op386MULLloadidx4_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[3] + mem := v.Args[3] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL { @@ -13556,7 +13061,6 @@ func rewriteValue386_Op386MULLloadidx4_0(v *Value) bool { sym2 := v_1.Aux base := v_1.Args[0] idx := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -13573,9 +13077,7 @@ func rewriteValue386_Op386MULLloadidx4_0(v *Value) bool { } func rewriteValue386_Op386MULSD_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MULSD x l:(MOVSDload [off] {sym} ptr mem)) // cond: canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l) // result: (MULSDload x [off] {sym} ptr mem) @@ -13588,9 +13090,8 @@ func rewriteValue386_Op386MULSD_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l)) { break } @@ -13606,17 +13107,15 @@ func rewriteValue386_Op386MULSD_0(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l) // result: (MULSDload x [off] {sym} ptr mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != Op386MOVSDload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l)) { break } @@ -13632,16 +13131,14 @@ func rewriteValue386_Op386MULSD_0(v *Value) bool { } func rewriteValue386_Op386MULSDload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MULSDload [off1] {sym} val (ADDLconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (MULSDload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -13649,7 +13146,6 @@ func rewriteValue386_Op386MULSDload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -13667,7 +13163,7 @@ func rewriteValue386_Op386MULSDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL { @@ -13676,7 +13172,6 @@ func rewriteValue386_Op386MULSDload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -13692,9 +13187,7 @@ func rewriteValue386_Op386MULSDload_0(v *Value) bool { } func rewriteValue386_Op386MULSS_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MULSS x l:(MOVSSload [off] {sym} ptr mem)) // cond: canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l) // result: (MULSSload x [off] {sym} ptr mem) @@ -13707,9 +13200,8 @@ func rewriteValue386_Op386MULSS_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l)) { break } @@ -13725,17 +13217,15 @@ func rewriteValue386_Op386MULSS_0(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l) // result: (MULSSload x [off] {sym} ptr mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != Op386MOVSSload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l)) { break } @@ -13751,16 +13241,14 @@ func rewriteValue386_Op386MULSS_0(v *Value) bool { } func rewriteValue386_Op386MULSSload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MULSSload [off1] {sym} val (ADDLconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (MULSSload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -13768,7 +13256,6 @@ func rewriteValue386_Op386MULSSload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -13786,7 +13273,7 @@ func rewriteValue386_Op386MULSSload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL { @@ -13795,7 +13282,6 @@ func rewriteValue386_Op386MULSSload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -13862,13 +13348,12 @@ func rewriteValue386_Op386ORL_0(v *Value) bool { // cond: // result: (ORLconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(Op386ORLconst) v.AuxInt = c v.AddArg(x) @@ -14052,9 +13537,8 @@ func rewriteValue386_Op386ORL_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -14070,17 +13554,15 @@ func rewriteValue386_Op386ORL_0(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (ORLload x [off] {sym} ptr mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != Op386MOVLload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -14096,9 +13578,7 @@ func rewriteValue386_Op386ORL_0(v *Value) bool { } func rewriteValue386_Op386ORL_10(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORL x l:(MOVLloadidx4 [off] {sym} ptr idx mem)) // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (ORLloadidx4 x [off] {sym} ptr idx mem) @@ -14111,10 +13591,9 @@ func rewriteValue386_Op386ORL_10(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[2] + mem := l.Args[2] ptr := l.Args[0] idx := l.Args[1] - mem := l.Args[2] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -14131,18 +13610,16 @@ func rewriteValue386_Op386ORL_10(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (ORLloadidx4 x [off] {sym} ptr idx mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != Op386MOVLloadidx4 { break } off := l.AuxInt sym := l.Aux - _ = l.Args[2] + mem := l.Args[2] ptr := l.Args[0] idx := l.Args[1] - mem := l.Args[2] - x := v.Args[1] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -14159,9 +13636,8 @@ func rewriteValue386_Op386ORL_10(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -14180,9 +13656,8 @@ func rewriteValue386_Op386ORL_10(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] s0 := v.Args[1] if s0.Op != Op386SHLLconst { break @@ -14236,9 +13711,8 @@ func rewriteValue386_Op386ORL_10(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] x0 := v.Args[1] if x0.Op != Op386MOVBload { break @@ -14283,9 +13757,8 @@ func rewriteValue386_Op386ORL_10(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] s0 := o0.Args[1] if s0.Op != Op386SHLLconst { break @@ -14366,9 +13839,8 @@ func rewriteValue386_Op386ORL_10(v *Value) bool { } i2 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] x0 := o0.Args[1] if x0.Op != Op386MOVWload { break @@ -14437,9 +13909,8 @@ func rewriteValue386_Op386ORL_10(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[1] - p := x2.Args[0] mem := x2.Args[1] + p := x2.Args[0] o0 := v.Args[1] if o0.Op != Op386ORL { break @@ -14513,9 +13984,8 @@ func rewriteValue386_Op386ORL_10(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[1] - p := x2.Args[0] mem := x2.Args[1] + p := x2.Args[0] o0 := v.Args[1] if o0.Op != Op386ORL { break @@ -14582,10 +14052,9 @@ func rewriteValue386_Op386ORL_10(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] s0 := v.Args[1] if s0.Op != Op386SHLLconst { break @@ -14629,7 +14098,6 @@ func rewriteValue386_Op386ORL_10(v *Value) bool { } func rewriteValue386_Op386ORL_20(v *Value) bool { b := v.Block - _ = b // match: (ORL x0:(MOVBloadidx1 [i0] {s} idx p mem) s0:(SHLLconst [8] x1:(MOVBloadidx1 [i1] {s} p idx mem))) // cond: i1==i0+1 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) // result: @mergePoint(b,x0,x1) (MOVWloadidx1 [i0] {s} p idx mem) @@ -14641,10 +14109,9 @@ func rewriteValue386_Op386ORL_20(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] s0 := v.Args[1] if s0.Op != Op386SHLLconst { break @@ -14695,10 +14162,9 @@ func rewriteValue386_Op386ORL_20(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] s0 := v.Args[1] if s0.Op != Op386SHLLconst { break @@ -14749,10 +14215,9 @@ func rewriteValue386_Op386ORL_20(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] s0 := v.Args[1] if s0.Op != Op386SHLLconst { break @@ -14810,10 +14275,9 @@ func rewriteValue386_Op386ORL_20(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != Op386MOVBloadidx1 { break @@ -14864,10 +14328,9 @@ func rewriteValue386_Op386ORL_20(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != Op386MOVBloadidx1 { break @@ -14918,10 +14381,9 @@ func rewriteValue386_Op386ORL_20(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != Op386MOVBloadidx1 { break @@ -14972,10 +14434,9 @@ func rewriteValue386_Op386ORL_20(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != Op386MOVBloadidx1 { break @@ -15024,10 +14485,9 @@ func rewriteValue386_Op386ORL_20(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] s0 := o0.Args[1] if s0.Op != Op386SHLLconst { break @@ -15108,10 +14568,9 @@ func rewriteValue386_Op386ORL_20(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] s0 := o0.Args[1] if s0.Op != Op386SHLLconst { break @@ -15192,10 +14651,9 @@ func rewriteValue386_Op386ORL_20(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] s0 := o0.Args[1] if s0.Op != Op386SHLLconst { break @@ -15264,7 +14722,6 @@ func rewriteValue386_Op386ORL_20(v *Value) bool { } func rewriteValue386_Op386ORL_30(v *Value) bool { b := v.Block - _ = b // match: (ORL o0:(ORL x0:(MOVWloadidx1 [i0] {s} idx p mem) s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} idx p mem))) s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} p idx mem))) // cond: i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b,x0,x1,x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0) // result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 [i0] {s} p idx mem) @@ -15281,10 +14738,9 @@ func rewriteValue386_Op386ORL_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] s0 := o0.Args[1] if s0.Op != Op386SHLLconst { break @@ -15372,10 +14828,9 @@ func rewriteValue386_Op386ORL_30(v *Value) bool { } i2 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] x0 := o0.Args[1] if x0.Op != Op386MOVWloadidx1 { break @@ -15456,10 +14911,9 @@ func rewriteValue386_Op386ORL_30(v *Value) bool { } i2 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] x0 := o0.Args[1] if x0.Op != Op386MOVWloadidx1 { break @@ -15540,10 +14994,9 @@ func rewriteValue386_Op386ORL_30(v *Value) bool { } i2 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] x0 := o0.Args[1] if x0.Op != Op386MOVWloadidx1 { break @@ -15624,10 +15077,9 @@ func rewriteValue386_Op386ORL_30(v *Value) bool { } i2 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] x0 := o0.Args[1] if x0.Op != Op386MOVWloadidx1 { break @@ -15701,10 +15153,9 @@ func rewriteValue386_Op386ORL_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] s0 := o0.Args[1] if s0.Op != Op386SHLLconst { break @@ -15785,10 +15236,9 @@ func rewriteValue386_Op386ORL_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] s0 := o0.Args[1] if s0.Op != Op386SHLLconst { break @@ -15869,10 +15319,9 @@ func rewriteValue386_Op386ORL_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] s0 := o0.Args[1] if s0.Op != Op386SHLLconst { break @@ -15953,10 +15402,9 @@ func rewriteValue386_Op386ORL_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] s0 := o0.Args[1] if s0.Op != Op386SHLLconst { break @@ -16044,10 +15492,9 @@ func rewriteValue386_Op386ORL_30(v *Value) bool { } i2 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] x0 := o0.Args[1] if x0.Op != Op386MOVWloadidx1 { break @@ -16109,7 +15556,6 @@ func rewriteValue386_Op386ORL_30(v *Value) bool { } func rewriteValue386_Op386ORL_40(v *Value) bool { b := v.Block - _ = b // match: (ORL o0:(ORL s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} idx p mem)) x0:(MOVWloadidx1 [i0] {s} p idx mem)) s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} idx p mem))) // cond: i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b,x0,x1,x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0) // result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 [i0] {s} p idx mem) @@ -16133,10 +15579,9 @@ func rewriteValue386_Op386ORL_40(v *Value) bool { } i2 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] x0 := o0.Args[1] if x0.Op != Op386MOVWloadidx1 { break @@ -16217,10 +15662,9 @@ func rewriteValue386_Op386ORL_40(v *Value) bool { } i2 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] x0 := o0.Args[1] if x0.Op != Op386MOVWloadidx1 { break @@ -16301,10 +15745,9 @@ func rewriteValue386_Op386ORL_40(v *Value) bool { } i2 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] x0 := o0.Args[1] if x0.Op != Op386MOVWloadidx1 { break @@ -16380,10 +15823,9 @@ func rewriteValue386_Op386ORL_40(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[2] + mem := x2.Args[2] p := x2.Args[0] idx := x2.Args[1] - mem := x2.Args[2] o0 := v.Args[1] if o0.Op != Op386ORL { break @@ -16464,10 +15906,9 @@ func rewriteValue386_Op386ORL_40(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[2] + mem := x2.Args[2] idx := x2.Args[0] p := x2.Args[1] - mem := x2.Args[2] o0 := v.Args[1] if o0.Op != Op386ORL { break @@ -16548,10 +15989,9 @@ func rewriteValue386_Op386ORL_40(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[2] + mem := x2.Args[2] p := x2.Args[0] idx := x2.Args[1] - mem := x2.Args[2] o0 := v.Args[1] if o0.Op != Op386ORL { break @@ -16632,10 +16072,9 @@ func rewriteValue386_Op386ORL_40(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[2] + mem := x2.Args[2] idx := x2.Args[0] p := x2.Args[1] - mem := x2.Args[2] o0 := v.Args[1] if o0.Op != Op386ORL { break @@ -16716,10 +16155,9 @@ func rewriteValue386_Op386ORL_40(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[2] + mem := x2.Args[2] p := x2.Args[0] idx := x2.Args[1] - mem := x2.Args[2] o0 := v.Args[1] if o0.Op != Op386ORL { break @@ -16800,10 +16238,9 @@ func rewriteValue386_Op386ORL_40(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[2] + mem := x2.Args[2] idx := x2.Args[0] p := x2.Args[1] - mem := x2.Args[2] o0 := v.Args[1] if o0.Op != Op386ORL { break @@ -16884,10 +16321,9 @@ func rewriteValue386_Op386ORL_40(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[2] + mem := x2.Args[2] p := x2.Args[0] idx := x2.Args[1] - mem := x2.Args[2] o0 := v.Args[1] if o0.Op != Op386ORL { break @@ -16954,7 +16390,6 @@ func rewriteValue386_Op386ORL_40(v *Value) bool { } func rewriteValue386_Op386ORL_50(v *Value) bool { b := v.Block - _ = b // match: (ORL s1:(SHLLconst [24] x2:(MOVBloadidx1 [i3] {s} idx p mem)) o0:(ORL x0:(MOVWloadidx1 [i0] {s} idx p mem) s0:(SHLLconst [16] x1:(MOVBloadidx1 [i2] {s} idx p mem)))) // cond: i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && o0.Uses == 1 && mergePoint(b,x0,x1,x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0) // result: @mergePoint(b,x0,x1,x2) (MOVLloadidx1 [i0] {s} p idx mem) @@ -16973,10 +16408,9 @@ func rewriteValue386_Op386ORL_50(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[2] + mem := x2.Args[2] idx := x2.Args[0] p := x2.Args[1] - mem := x2.Args[2] o0 := v.Args[1] if o0.Op != Op386ORL { break @@ -17057,10 +16491,9 @@ func rewriteValue386_Op386ORL_50(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[2] + mem := x2.Args[2] p := x2.Args[0] idx := x2.Args[1] - mem := x2.Args[2] o0 := v.Args[1] if o0.Op != Op386ORL { break @@ -17141,10 +16574,9 @@ func rewriteValue386_Op386ORL_50(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[2] + mem := x2.Args[2] idx := x2.Args[0] p := x2.Args[1] - mem := x2.Args[2] o0 := v.Args[1] if o0.Op != Op386ORL { break @@ -17225,10 +16657,9 @@ func rewriteValue386_Op386ORL_50(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[2] + mem := x2.Args[2] p := x2.Args[0] idx := x2.Args[1] - mem := x2.Args[2] o0 := v.Args[1] if o0.Op != Op386ORL { break @@ -17309,10 +16740,9 @@ func rewriteValue386_Op386ORL_50(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[2] + mem := x2.Args[2] idx := x2.Args[0] p := x2.Args[1] - mem := x2.Args[2] o0 := v.Args[1] if o0.Op != Op386ORL { break @@ -17393,10 +16823,9 @@ func rewriteValue386_Op386ORL_50(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[2] + mem := x2.Args[2] p := x2.Args[0] idx := x2.Args[1] - mem := x2.Args[2] o0 := v.Args[1] if o0.Op != Op386ORL { break @@ -17477,10 +16906,9 @@ func rewriteValue386_Op386ORL_50(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[2] + mem := x2.Args[2] idx := x2.Args[0] p := x2.Args[1] - mem := x2.Args[2] o0 := v.Args[1] if o0.Op != Op386ORL { break @@ -17561,10 +16989,9 @@ func rewriteValue386_Op386ORL_50(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[2] + mem := x2.Args[2] p := x2.Args[0] idx := x2.Args[1] - mem := x2.Args[2] o0 := v.Args[1] if o0.Op != Op386ORL { break @@ -17645,10 +17072,9 @@ func rewriteValue386_Op386ORL_50(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[2] + mem := x2.Args[2] idx := x2.Args[0] p := x2.Args[1] - mem := x2.Args[2] o0 := v.Args[1] if o0.Op != Op386ORL { break @@ -17758,23 +17184,20 @@ func rewriteValue386_Op386ORLconst_0(v *Value) bool { } func rewriteValue386_Op386ORLconstmodify_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ORLconstmodify [valoff1] {sym} (ADDLconst [off2] base) mem) // cond: ValAndOff(valoff1).canAdd(off2) // result: (ORLconstmodify [ValAndOff(valoff1).add(off2)] {sym} base mem) for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break } off2 := v_0.AuxInt base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -17791,7 +17214,7 @@ func rewriteValue386_Op386ORLconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -17799,7 +17222,6 @@ func rewriteValue386_Op386ORLconstmodify_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -17814,16 +17236,14 @@ func rewriteValue386_Op386ORLconstmodify_0(v *Value) bool { } func rewriteValue386_Op386ORLconstmodifyidx4_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ORLconstmodifyidx4 [valoff1] {sym} (ADDLconst [off2] base) idx mem) // cond: ValAndOff(valoff1).canAdd(off2) // result: (ORLconstmodifyidx4 [ValAndOff(valoff1).add(off2)] {sym} base idx mem) for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -17831,7 +17251,6 @@ func rewriteValue386_Op386ORLconstmodifyidx4_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -17849,7 +17268,7 @@ func rewriteValue386_Op386ORLconstmodifyidx4_0(v *Value) bool { for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] base := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -17857,7 +17276,6 @@ func rewriteValue386_Op386ORLconstmodifyidx4_0(v *Value) bool { } off2 := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(ValAndOff(valoff1).canAdd(off2 * 4)) { break } @@ -17875,7 +17293,7 @@ func rewriteValue386_Op386ORLconstmodifyidx4_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -17884,7 +17302,6 @@ func rewriteValue386_Op386ORLconstmodifyidx4_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -17900,16 +17317,14 @@ func rewriteValue386_Op386ORLconstmodifyidx4_0(v *Value) bool { } func rewriteValue386_Op386ORLload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ORLload [off1] {sym} val (ADDLconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (ORLload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -17917,7 +17332,6 @@ func rewriteValue386_Op386ORLload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -17935,7 +17349,7 @@ func rewriteValue386_Op386ORLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL { @@ -17944,7 +17358,6 @@ func rewriteValue386_Op386ORLload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -17962,7 +17375,7 @@ func rewriteValue386_Op386ORLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL4 { @@ -17970,10 +17383,8 @@ func rewriteValue386_Op386ORLload_0(v *Value) bool { } off2 := v_1.AuxInt sym2 := v_1.Aux - _ = v_1.Args[1] - ptr := v_1.Args[0] idx := v_1.Args[1] - mem := v.Args[2] + ptr := v_1.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -17990,16 +17401,14 @@ func rewriteValue386_Op386ORLload_0(v *Value) bool { } func rewriteValue386_Op386ORLloadidx4_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ORLloadidx4 [off1] {sym} val (ADDLconst [off2] base) idx mem) // cond: is32Bit(off1+off2) // result: (ORLloadidx4 [off1+off2] {sym} val base idx mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -18008,7 +17417,6 @@ func rewriteValue386_Op386ORLloadidx4_0(v *Value) bool { off2 := v_1.AuxInt base := v_1.Args[0] idx := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1 + off2)) { break } @@ -18027,7 +17435,7 @@ func rewriteValue386_Op386ORLloadidx4_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] val := v.Args[0] base := v.Args[1] v_2 := v.Args[2] @@ -18036,7 +17444,6 @@ func rewriteValue386_Op386ORLloadidx4_0(v *Value) bool { } off2 := v_2.AuxInt idx := v_2.Args[0] - mem := v.Args[3] if !(is32Bit(off1 + off2*4)) { break } @@ -18055,7 +17462,7 @@ func rewriteValue386_Op386ORLloadidx4_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[3] + mem := v.Args[3] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL { @@ -18065,7 +17472,6 @@ func rewriteValue386_Op386ORLloadidx4_0(v *Value) bool { sym2 := v_1.Aux base := v_1.Args[0] idx := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -18082,16 +17488,14 @@ func rewriteValue386_Op386ORLloadidx4_0(v *Value) bool { } func rewriteValue386_Op386ORLmodify_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ORLmodify [off1] {sym} (ADDLconst [off2] base) val mem) // cond: is32Bit(off1+off2) // result: (ORLmodify [off1+off2] {sym} base val mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -18099,7 +17503,6 @@ func rewriteValue386_Op386ORLmodify_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -18117,7 +17520,7 @@ func rewriteValue386_Op386ORLmodify_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -18126,7 +17529,6 @@ func rewriteValue386_Op386ORLmodify_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -18142,16 +17544,14 @@ func rewriteValue386_Op386ORLmodify_0(v *Value) bool { } func rewriteValue386_Op386ORLmodifyidx4_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ORLmodifyidx4 [off1] {sym} (ADDLconst [off2] base) idx val mem) // cond: is32Bit(off1+off2) // result: (ORLmodifyidx4 [off1+off2] {sym} base idx val mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -18160,7 +17560,6 @@ func rewriteValue386_Op386ORLmodifyidx4_0(v *Value) bool { base := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1 + off2)) { break } @@ -18179,7 +17578,7 @@ func rewriteValue386_Op386ORLmodifyidx4_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] base := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -18188,7 +17587,6 @@ func rewriteValue386_Op386ORLmodifyidx4_0(v *Value) bool { off2 := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1 + off2*4)) { break } @@ -18207,7 +17605,7 @@ func rewriteValue386_Op386ORLmodifyidx4_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -18217,7 +17615,6 @@ func rewriteValue386_Op386ORLmodifyidx4_0(v *Value) bool { base := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -18236,7 +17633,7 @@ func rewriteValue386_Op386ORLmodifyidx4_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -18244,7 +17641,6 @@ func rewriteValue386_Op386ORLmodifyidx4_0(v *Value) bool { break } c := v_2.AuxInt - mem := v.Args[3] if !(validValAndOff(c, off)) { break } @@ -18525,14 +17921,13 @@ func rewriteValue386_Op386SBBL_0(v *Value) bool { // cond: // result: (SBBLconst [c] x f) for { - _ = v.Args[2] + f := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386MOVLconst { break } c := v_1.AuxInt - f := v.Args[2] v.reset(Op386SBBLconst) v.AuxInt = c v.AddArg(x) @@ -19584,7 +18979,6 @@ func rewriteValue386_Op386SHRWconst_0(v *Value) bool { } func rewriteValue386_Op386SUBL_0(v *Value) bool { b := v.Block - _ = b // match: (SUBL x (MOVLconst [c])) // cond: // result: (SUBLconst x [c]) @@ -19605,13 +18999,12 @@ func rewriteValue386_Op386SUBL_0(v *Value) bool { // cond: // result: (NEGL (SUBLconst x [c])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(Op386NEGL) v0 := b.NewValue0(v.Pos, Op386SUBLconst, v.Type) v0.AuxInt = c @@ -19631,9 +19024,8 @@ func rewriteValue386_Op386SUBL_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -19657,10 +19049,9 @@ func rewriteValue386_Op386SUBL_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[2] + mem := l.Args[2] ptr := l.Args[0] idx := l.Args[1] - mem := l.Args[2] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -19677,9 +19068,8 @@ func rewriteValue386_Op386SUBL_0(v *Value) bool { // cond: // result: (MOVLconst [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(Op386MOVLconst) @@ -19736,16 +19126,14 @@ func rewriteValue386_Op386SUBLconst_0(v *Value) bool { } func rewriteValue386_Op386SUBLload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SUBLload [off1] {sym} val (ADDLconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (SUBLload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -19753,7 +19141,6 @@ func rewriteValue386_Op386SUBLload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -19771,7 +19158,7 @@ func rewriteValue386_Op386SUBLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL { @@ -19780,7 +19167,6 @@ func rewriteValue386_Op386SUBLload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -19798,7 +19184,7 @@ func rewriteValue386_Op386SUBLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL4 { @@ -19806,10 +19192,8 @@ func rewriteValue386_Op386SUBLload_0(v *Value) bool { } off2 := v_1.AuxInt sym2 := v_1.Aux - _ = v_1.Args[1] - ptr := v_1.Args[0] idx := v_1.Args[1] - mem := v.Args[2] + ptr := v_1.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -19826,16 +19210,14 @@ func rewriteValue386_Op386SUBLload_0(v *Value) bool { } func rewriteValue386_Op386SUBLloadidx4_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SUBLloadidx4 [off1] {sym} val (ADDLconst [off2] base) idx mem) // cond: is32Bit(off1+off2) // result: (SUBLloadidx4 [off1+off2] {sym} val base idx mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -19844,7 +19226,6 @@ func rewriteValue386_Op386SUBLloadidx4_0(v *Value) bool { off2 := v_1.AuxInt base := v_1.Args[0] idx := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1 + off2)) { break } @@ -19863,7 +19244,7 @@ func rewriteValue386_Op386SUBLloadidx4_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] val := v.Args[0] base := v.Args[1] v_2 := v.Args[2] @@ -19872,7 +19253,6 @@ func rewriteValue386_Op386SUBLloadidx4_0(v *Value) bool { } off2 := v_2.AuxInt idx := v_2.Args[0] - mem := v.Args[3] if !(is32Bit(off1 + off2*4)) { break } @@ -19891,7 +19271,7 @@ func rewriteValue386_Op386SUBLloadidx4_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[3] + mem := v.Args[3] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL { @@ -19901,7 +19281,6 @@ func rewriteValue386_Op386SUBLloadidx4_0(v *Value) bool { sym2 := v_1.Aux base := v_1.Args[0] idx := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -19918,16 +19297,14 @@ func rewriteValue386_Op386SUBLloadidx4_0(v *Value) bool { } func rewriteValue386_Op386SUBLmodify_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SUBLmodify [off1] {sym} (ADDLconst [off2] base) val mem) // cond: is32Bit(off1+off2) // result: (SUBLmodify [off1+off2] {sym} base val mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -19935,7 +19312,6 @@ func rewriteValue386_Op386SUBLmodify_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -19953,7 +19329,7 @@ func rewriteValue386_Op386SUBLmodify_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -19962,7 +19338,6 @@ func rewriteValue386_Op386SUBLmodify_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -19978,16 +19353,14 @@ func rewriteValue386_Op386SUBLmodify_0(v *Value) bool { } func rewriteValue386_Op386SUBLmodifyidx4_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SUBLmodifyidx4 [off1] {sym} (ADDLconst [off2] base) idx val mem) // cond: is32Bit(off1+off2) // result: (SUBLmodifyidx4 [off1+off2] {sym} base idx val mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -19996,7 +19369,6 @@ func rewriteValue386_Op386SUBLmodifyidx4_0(v *Value) bool { base := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1 + off2)) { break } @@ -20015,7 +19387,7 @@ func rewriteValue386_Op386SUBLmodifyidx4_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] base := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -20024,7 +19396,6 @@ func rewriteValue386_Op386SUBLmodifyidx4_0(v *Value) bool { off2 := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1 + off2*4)) { break } @@ -20043,7 +19414,7 @@ func rewriteValue386_Op386SUBLmodifyidx4_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -20053,7 +19424,6 @@ func rewriteValue386_Op386SUBLmodifyidx4_0(v *Value) bool { base := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -20072,7 +19442,7 @@ func rewriteValue386_Op386SUBLmodifyidx4_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -20080,7 +19450,6 @@ func rewriteValue386_Op386SUBLmodifyidx4_0(v *Value) bool { break } c := v_2.AuxInt - mem := v.Args[3] if !(validValAndOff(-c, off)) { break } @@ -20096,9 +19465,7 @@ func rewriteValue386_Op386SUBLmodifyidx4_0(v *Value) bool { } func rewriteValue386_Op386SUBSD_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SUBSD x l:(MOVSDload [off] {sym} ptr mem)) // cond: canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l) // result: (SUBSDload x [off] {sym} ptr mem) @@ -20111,9 +19478,8 @@ func rewriteValue386_Op386SUBSD_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l)) { break } @@ -20129,16 +19495,14 @@ func rewriteValue386_Op386SUBSD_0(v *Value) bool { } func rewriteValue386_Op386SUBSDload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SUBSDload [off1] {sym} val (ADDLconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (SUBSDload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -20146,7 +19510,6 @@ func rewriteValue386_Op386SUBSDload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -20164,7 +19527,7 @@ func rewriteValue386_Op386SUBSDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL { @@ -20173,7 +19536,6 @@ func rewriteValue386_Op386SUBSDload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -20189,9 +19551,7 @@ func rewriteValue386_Op386SUBSDload_0(v *Value) bool { } func rewriteValue386_Op386SUBSS_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SUBSS x l:(MOVSSload [off] {sym} ptr mem)) // cond: canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l) // result: (SUBSSload x [off] {sym} ptr mem) @@ -20204,9 +19564,8 @@ func rewriteValue386_Op386SUBSS_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && !config.use387 && clobber(l)) { break } @@ -20222,16 +19581,14 @@ func rewriteValue386_Op386SUBSS_0(v *Value) bool { } func rewriteValue386_Op386SUBSSload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SUBSSload [off1] {sym} val (ADDLconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (SUBSSload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -20239,7 +19596,6 @@ func rewriteValue386_Op386SUBSSload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -20257,7 +19613,7 @@ func rewriteValue386_Op386SUBSSload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL { @@ -20266,7 +19622,6 @@ func rewriteValue386_Op386SUBSSload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -20301,13 +19656,12 @@ func rewriteValue386_Op386XORL_0(v *Value) bool { // cond: // result: (XORLconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(Op386XORLconst) v.AuxInt = c v.AddArg(x) @@ -20491,9 +19845,8 @@ func rewriteValue386_Op386XORL_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -20509,17 +19862,15 @@ func rewriteValue386_Op386XORL_0(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (XORLload x [off] {sym} ptr mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != Op386MOVLload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -20546,10 +19897,9 @@ func rewriteValue386_Op386XORL_10(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[2] + mem := l.Args[2] ptr := l.Args[0] idx := l.Args[1] - mem := l.Args[2] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -20566,18 +19916,16 @@ func rewriteValue386_Op386XORL_10(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (XORLloadidx4 x [off] {sym} ptr idx mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != Op386MOVLloadidx4 { break } off := l.AuxInt sym := l.Aux - _ = l.Args[2] + mem := l.Args[2] ptr := l.Args[0] idx := l.Args[1] - mem := l.Args[2] - x := v.Args[1] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -20594,9 +19942,8 @@ func rewriteValue386_Op386XORL_10(v *Value) bool { // cond: // result: (MOVLconst [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(Op386MOVLconst) @@ -20654,23 +20001,20 @@ func rewriteValue386_Op386XORLconst_0(v *Value) bool { } func rewriteValue386_Op386XORLconstmodify_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (XORLconstmodify [valoff1] {sym} (ADDLconst [off2] base) mem) // cond: ValAndOff(valoff1).canAdd(off2) // result: (XORLconstmodify [ValAndOff(valoff1).add(off2)] {sym} base mem) for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break } off2 := v_0.AuxInt base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -20687,7 +20031,7 @@ func rewriteValue386_Op386XORLconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -20695,7 +20039,6 @@ func rewriteValue386_Op386XORLconstmodify_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -20710,16 +20053,14 @@ func rewriteValue386_Op386XORLconstmodify_0(v *Value) bool { } func rewriteValue386_Op386XORLconstmodifyidx4_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (XORLconstmodifyidx4 [valoff1] {sym} (ADDLconst [off2] base) idx mem) // cond: ValAndOff(valoff1).canAdd(off2) // result: (XORLconstmodifyidx4 [ValAndOff(valoff1).add(off2)] {sym} base idx mem) for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -20727,7 +20068,6 @@ func rewriteValue386_Op386XORLconstmodifyidx4_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -20745,7 +20085,7 @@ func rewriteValue386_Op386XORLconstmodifyidx4_0(v *Value) bool { for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] base := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -20753,7 +20093,6 @@ func rewriteValue386_Op386XORLconstmodifyidx4_0(v *Value) bool { } off2 := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(ValAndOff(valoff1).canAdd(off2 * 4)) { break } @@ -20771,7 +20110,7 @@ func rewriteValue386_Op386XORLconstmodifyidx4_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -20780,7 +20119,6 @@ func rewriteValue386_Op386XORLconstmodifyidx4_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -20796,16 +20134,14 @@ func rewriteValue386_Op386XORLconstmodifyidx4_0(v *Value) bool { } func rewriteValue386_Op386XORLload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (XORLload [off1] {sym} val (ADDLconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (XORLload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -20813,7 +20149,6 @@ func rewriteValue386_Op386XORLload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -20831,7 +20166,7 @@ func rewriteValue386_Op386XORLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL { @@ -20840,7 +20175,6 @@ func rewriteValue386_Op386XORLload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -20858,7 +20192,7 @@ func rewriteValue386_Op386XORLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL4 { @@ -20866,10 +20200,8 @@ func rewriteValue386_Op386XORLload_0(v *Value) bool { } off2 := v_1.AuxInt sym2 := v_1.Aux - _ = v_1.Args[1] - ptr := v_1.Args[0] idx := v_1.Args[1] - mem := v.Args[2] + ptr := v_1.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -20886,16 +20218,14 @@ func rewriteValue386_Op386XORLload_0(v *Value) bool { } func rewriteValue386_Op386XORLloadidx4_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (XORLloadidx4 [off1] {sym} val (ADDLconst [off2] base) idx mem) // cond: is32Bit(off1+off2) // result: (XORLloadidx4 [off1+off2] {sym} val base idx mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -20904,7 +20234,6 @@ func rewriteValue386_Op386XORLloadidx4_0(v *Value) bool { off2 := v_1.AuxInt base := v_1.Args[0] idx := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1 + off2)) { break } @@ -20923,7 +20252,7 @@ func rewriteValue386_Op386XORLloadidx4_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] val := v.Args[0] base := v.Args[1] v_2 := v.Args[2] @@ -20932,7 +20261,6 @@ func rewriteValue386_Op386XORLloadidx4_0(v *Value) bool { } off2 := v_2.AuxInt idx := v_2.Args[0] - mem := v.Args[3] if !(is32Bit(off1 + off2*4)) { break } @@ -20951,7 +20279,7 @@ func rewriteValue386_Op386XORLloadidx4_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[3] + mem := v.Args[3] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386LEAL { @@ -20961,7 +20289,6 @@ func rewriteValue386_Op386XORLloadidx4_0(v *Value) bool { sym2 := v_1.Aux base := v_1.Args[0] idx := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -20978,16 +20305,14 @@ func rewriteValue386_Op386XORLloadidx4_0(v *Value) bool { } func rewriteValue386_Op386XORLmodify_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (XORLmodify [off1] {sym} (ADDLconst [off2] base) val mem) // cond: is32Bit(off1+off2) // result: (XORLmodify [off1+off2] {sym} base val mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -20995,7 +20320,6 @@ func rewriteValue386_Op386XORLmodify_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -21013,7 +20337,7 @@ func rewriteValue386_Op386XORLmodify_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -21022,7 +20346,6 @@ func rewriteValue386_Op386XORLmodify_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -21038,16 +20361,14 @@ func rewriteValue386_Op386XORLmodify_0(v *Value) bool { } func rewriteValue386_Op386XORLmodifyidx4_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (XORLmodifyidx4 [off1] {sym} (ADDLconst [off2] base) idx val mem) // cond: is32Bit(off1+off2) // result: (XORLmodifyidx4 [off1+off2] {sym} base idx val mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386ADDLconst { break @@ -21056,7 +20377,6 @@ func rewriteValue386_Op386XORLmodifyidx4_0(v *Value) bool { base := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1 + off2)) { break } @@ -21075,7 +20395,7 @@ func rewriteValue386_Op386XORLmodifyidx4_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] base := v.Args[0] v_1 := v.Args[1] if v_1.Op != Op386ADDLconst { @@ -21084,7 +20404,6 @@ func rewriteValue386_Op386XORLmodifyidx4_0(v *Value) bool { off2 := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1 + off2*4)) { break } @@ -21103,7 +20422,7 @@ func rewriteValue386_Op386XORLmodifyidx4_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != Op386LEAL { break @@ -21113,7 +20432,6 @@ func rewriteValue386_Op386XORLmodifyidx4_0(v *Value) bool { base := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -21132,7 +20450,7 @@ func rewriteValue386_Op386XORLmodifyidx4_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -21140,7 +20458,6 @@ func rewriteValue386_Op386XORLmodifyidx4_0(v *Value) bool { break } c := v_2.AuxInt - mem := v.Args[3] if !(validValAndOff(c, off)) { break } @@ -21159,9 +20476,8 @@ func rewriteValue386_OpAdd16_0(v *Value) bool { // cond: // result: (ADDL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ADDL) v.AddArg(x) v.AddArg(y) @@ -21173,9 +20489,8 @@ func rewriteValue386_OpAdd32_0(v *Value) bool { // cond: // result: (ADDL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ADDL) v.AddArg(x) v.AddArg(y) @@ -21187,9 +20502,8 @@ func rewriteValue386_OpAdd32F_0(v *Value) bool { // cond: // result: (ADDSS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ADDSS) v.AddArg(x) v.AddArg(y) @@ -21201,9 +20515,8 @@ func rewriteValue386_OpAdd32carry_0(v *Value) bool { // cond: // result: (ADDLcarry x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ADDLcarry) v.AddArg(x) v.AddArg(y) @@ -21215,10 +20528,9 @@ func rewriteValue386_OpAdd32withcarry_0(v *Value) bool { // cond: // result: (ADCL x y c) for { - _ = v.Args[2] + c := v.Args[2] x := v.Args[0] y := v.Args[1] - c := v.Args[2] v.reset(Op386ADCL) v.AddArg(x) v.AddArg(y) @@ -21231,9 +20543,8 @@ func rewriteValue386_OpAdd64F_0(v *Value) bool { // cond: // result: (ADDSD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ADDSD) v.AddArg(x) v.AddArg(y) @@ -21245,9 +20556,8 @@ func rewriteValue386_OpAdd8_0(v *Value) bool { // cond: // result: (ADDL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ADDL) v.AddArg(x) v.AddArg(y) @@ -21259,9 +20569,8 @@ func rewriteValue386_OpAddPtr_0(v *Value) bool { // cond: // result: (ADDL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ADDL) v.AddArg(x) v.AddArg(y) @@ -21286,9 +20595,8 @@ func rewriteValue386_OpAnd16_0(v *Value) bool { // cond: // result: (ANDL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v.AddArg(x) v.AddArg(y) @@ -21300,9 +20608,8 @@ func rewriteValue386_OpAnd32_0(v *Value) bool { // cond: // result: (ANDL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v.AddArg(x) v.AddArg(y) @@ -21314,9 +20621,8 @@ func rewriteValue386_OpAnd8_0(v *Value) bool { // cond: // result: (ANDL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v.AddArg(x) v.AddArg(y) @@ -21328,9 +20634,8 @@ func rewriteValue386_OpAndB_0(v *Value) bool { // cond: // result: (ANDL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v.AddArg(x) v.AddArg(y) @@ -21342,9 +20647,8 @@ func rewriteValue386_OpAvg32u_0(v *Value) bool { // cond: // result: (AVGLU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386AVGLU) v.AddArg(x) v.AddArg(y) @@ -21368,10 +20672,9 @@ func rewriteValue386_OpClosureCall_0(v *Value) bool { // result: (CALLclosure [argwid] entry closure mem) for { argwid := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] entry := v.Args[0] closure := v.Args[1] - mem := v.Args[2] v.reset(Op386CALLclosure) v.AuxInt = argwid v.AddArg(entry) @@ -21561,9 +20864,8 @@ func rewriteValue386_OpDiv16_0(v *Value) bool { // result: (DIVW [a] x y) for { a := v.AuxInt - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386DIVW) v.AuxInt = a v.AddArg(x) @@ -21576,9 +20878,8 @@ func rewriteValue386_OpDiv16u_0(v *Value) bool { // cond: // result: (DIVWU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386DIVWU) v.AddArg(x) v.AddArg(y) @@ -21591,9 +20892,8 @@ func rewriteValue386_OpDiv32_0(v *Value) bool { // result: (DIVL [a] x y) for { a := v.AuxInt - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386DIVL) v.AuxInt = a v.AddArg(x) @@ -21606,9 +20906,8 @@ func rewriteValue386_OpDiv32F_0(v *Value) bool { // cond: // result: (DIVSS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386DIVSS) v.AddArg(x) v.AddArg(y) @@ -21620,9 +20919,8 @@ func rewriteValue386_OpDiv32u_0(v *Value) bool { // cond: // result: (DIVLU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386DIVLU) v.AddArg(x) v.AddArg(y) @@ -21634,9 +20932,8 @@ func rewriteValue386_OpDiv64F_0(v *Value) bool { // cond: // result: (DIVSD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386DIVSD) v.AddArg(x) v.AddArg(y) @@ -21645,16 +20942,13 @@ func rewriteValue386_OpDiv64F_0(v *Value) bool { } func rewriteValue386_OpDiv8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div8 x y) // cond: // result: (DIVW (SignExt8to16 x) (SignExt8to16 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386DIVW) v0 := b.NewValue0(v.Pos, OpSignExt8to16, typ.Int16) v0.AddArg(x) @@ -21667,16 +20961,13 @@ func rewriteValue386_OpDiv8_0(v *Value) bool { } func rewriteValue386_OpDiv8u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div8u x y) // cond: // result: (DIVWU (ZeroExt8to16 x) (ZeroExt8to16 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386DIVWU) v0 := b.NewValue0(v.Pos, OpZeroExt8to16, typ.UInt16) v0.AddArg(x) @@ -21689,14 +20980,12 @@ func rewriteValue386_OpDiv8u_0(v *Value) bool { } func rewriteValue386_OpEq16_0(v *Value) bool { b := v.Block - _ = b // match: (Eq16 x y) // cond: // result: (SETEQ (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETEQ) v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags) v0.AddArg(x) @@ -21707,14 +20996,12 @@ func rewriteValue386_OpEq16_0(v *Value) bool { } func rewriteValue386_OpEq32_0(v *Value) bool { b := v.Block - _ = b // match: (Eq32 x y) // cond: // result: (SETEQ (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETEQ) v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags) v0.AddArg(x) @@ -21725,14 +21012,12 @@ func rewriteValue386_OpEq32_0(v *Value) bool { } func rewriteValue386_OpEq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Eq32F x y) // cond: // result: (SETEQF (UCOMISS x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETEQF) v0 := b.NewValue0(v.Pos, Op386UCOMISS, types.TypeFlags) v0.AddArg(x) @@ -21743,14 +21028,12 @@ func rewriteValue386_OpEq32F_0(v *Value) bool { } func rewriteValue386_OpEq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Eq64F x y) // cond: // result: (SETEQF (UCOMISD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETEQF) v0 := b.NewValue0(v.Pos, Op386UCOMISD, types.TypeFlags) v0.AddArg(x) @@ -21761,14 +21044,12 @@ func rewriteValue386_OpEq64F_0(v *Value) bool { } func rewriteValue386_OpEq8_0(v *Value) bool { b := v.Block - _ = b // match: (Eq8 x y) // cond: // result: (SETEQ (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETEQ) v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags) v0.AddArg(x) @@ -21779,14 +21060,12 @@ func rewriteValue386_OpEq8_0(v *Value) bool { } func rewriteValue386_OpEqB_0(v *Value) bool { b := v.Block - _ = b // match: (EqB x y) // cond: // result: (SETEQ (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETEQ) v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags) v0.AddArg(x) @@ -21797,14 +21076,12 @@ func rewriteValue386_OpEqB_0(v *Value) bool { } func rewriteValue386_OpEqPtr_0(v *Value) bool { b := v.Block - _ = b // match: (EqPtr x y) // cond: // result: (SETEQ (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETEQ) v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags) v0.AddArg(x) @@ -21815,14 +21092,12 @@ func rewriteValue386_OpEqPtr_0(v *Value) bool { } func rewriteValue386_OpGeq16_0(v *Value) bool { b := v.Block - _ = b // match: (Geq16 x y) // cond: // result: (SETGE (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETGE) v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags) v0.AddArg(x) @@ -21833,14 +21108,12 @@ func rewriteValue386_OpGeq16_0(v *Value) bool { } func rewriteValue386_OpGeq16U_0(v *Value) bool { b := v.Block - _ = b // match: (Geq16U x y) // cond: // result: (SETAE (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETAE) v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags) v0.AddArg(x) @@ -21851,14 +21124,12 @@ func rewriteValue386_OpGeq16U_0(v *Value) bool { } func rewriteValue386_OpGeq32_0(v *Value) bool { b := v.Block - _ = b // match: (Geq32 x y) // cond: // result: (SETGE (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETGE) v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags) v0.AddArg(x) @@ -21869,14 +21140,12 @@ func rewriteValue386_OpGeq32_0(v *Value) bool { } func rewriteValue386_OpGeq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Geq32F x y) // cond: // result: (SETGEF (UCOMISS x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETGEF) v0 := b.NewValue0(v.Pos, Op386UCOMISS, types.TypeFlags) v0.AddArg(x) @@ -21887,14 +21156,12 @@ func rewriteValue386_OpGeq32F_0(v *Value) bool { } func rewriteValue386_OpGeq32U_0(v *Value) bool { b := v.Block - _ = b // match: (Geq32U x y) // cond: // result: (SETAE (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETAE) v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags) v0.AddArg(x) @@ -21905,14 +21172,12 @@ func rewriteValue386_OpGeq32U_0(v *Value) bool { } func rewriteValue386_OpGeq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Geq64F x y) // cond: // result: (SETGEF (UCOMISD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETGEF) v0 := b.NewValue0(v.Pos, Op386UCOMISD, types.TypeFlags) v0.AddArg(x) @@ -21923,14 +21188,12 @@ func rewriteValue386_OpGeq64F_0(v *Value) bool { } func rewriteValue386_OpGeq8_0(v *Value) bool { b := v.Block - _ = b // match: (Geq8 x y) // cond: // result: (SETGE (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETGE) v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags) v0.AddArg(x) @@ -21941,14 +21204,12 @@ func rewriteValue386_OpGeq8_0(v *Value) bool { } func rewriteValue386_OpGeq8U_0(v *Value) bool { b := v.Block - _ = b // match: (Geq8U x y) // cond: // result: (SETAE (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETAE) v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags) v0.AddArg(x) @@ -21997,14 +21258,12 @@ func rewriteValue386_OpGetG_0(v *Value) bool { } func rewriteValue386_OpGreater16_0(v *Value) bool { b := v.Block - _ = b // match: (Greater16 x y) // cond: // result: (SETG (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETG) v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags) v0.AddArg(x) @@ -22015,14 +21274,12 @@ func rewriteValue386_OpGreater16_0(v *Value) bool { } func rewriteValue386_OpGreater16U_0(v *Value) bool { b := v.Block - _ = b // match: (Greater16U x y) // cond: // result: (SETA (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETA) v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags) v0.AddArg(x) @@ -22033,14 +21290,12 @@ func rewriteValue386_OpGreater16U_0(v *Value) bool { } func rewriteValue386_OpGreater32_0(v *Value) bool { b := v.Block - _ = b // match: (Greater32 x y) // cond: // result: (SETG (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETG) v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags) v0.AddArg(x) @@ -22051,14 +21306,12 @@ func rewriteValue386_OpGreater32_0(v *Value) bool { } func rewriteValue386_OpGreater32F_0(v *Value) bool { b := v.Block - _ = b // match: (Greater32F x y) // cond: // result: (SETGF (UCOMISS x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETGF) v0 := b.NewValue0(v.Pos, Op386UCOMISS, types.TypeFlags) v0.AddArg(x) @@ -22069,14 +21322,12 @@ func rewriteValue386_OpGreater32F_0(v *Value) bool { } func rewriteValue386_OpGreater32U_0(v *Value) bool { b := v.Block - _ = b // match: (Greater32U x y) // cond: // result: (SETA (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETA) v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags) v0.AddArg(x) @@ -22087,14 +21338,12 @@ func rewriteValue386_OpGreater32U_0(v *Value) bool { } func rewriteValue386_OpGreater64F_0(v *Value) bool { b := v.Block - _ = b // match: (Greater64F x y) // cond: // result: (SETGF (UCOMISD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETGF) v0 := b.NewValue0(v.Pos, Op386UCOMISD, types.TypeFlags) v0.AddArg(x) @@ -22105,14 +21354,12 @@ func rewriteValue386_OpGreater64F_0(v *Value) bool { } func rewriteValue386_OpGreater8_0(v *Value) bool { b := v.Block - _ = b // match: (Greater8 x y) // cond: // result: (SETG (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETG) v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags) v0.AddArg(x) @@ -22123,14 +21370,12 @@ func rewriteValue386_OpGreater8_0(v *Value) bool { } func rewriteValue386_OpGreater8U_0(v *Value) bool { b := v.Block - _ = b // match: (Greater8U x y) // cond: // result: (SETA (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETA) v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags) v0.AddArg(x) @@ -22144,9 +21389,8 @@ func rewriteValue386_OpHmul32_0(v *Value) bool { // cond: // result: (HMULL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386HMULL) v.AddArg(x) v.AddArg(y) @@ -22158,9 +21402,8 @@ func rewriteValue386_OpHmul32u_0(v *Value) bool { // cond: // result: (HMULLU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386HMULLU) v.AddArg(x) v.AddArg(y) @@ -22173,9 +21416,8 @@ func rewriteValue386_OpInterCall_0(v *Value) bool { // result: (CALLinter [argwid] entry mem) for { argwid := v.AuxInt - _ = v.Args[1] - entry := v.Args[0] mem := v.Args[1] + entry := v.Args[0] v.reset(Op386CALLinter) v.AuxInt = argwid v.AddArg(entry) @@ -22185,14 +21427,12 @@ func rewriteValue386_OpInterCall_0(v *Value) bool { } func rewriteValue386_OpIsInBounds_0(v *Value) bool { b := v.Block - _ = b // match: (IsInBounds idx len) // cond: // result: (SETB (CMPL idx len)) for { - _ = v.Args[1] - idx := v.Args[0] len := v.Args[1] + idx := v.Args[0] v.reset(Op386SETB) v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags) v0.AddArg(idx) @@ -22203,7 +21443,6 @@ func rewriteValue386_OpIsInBounds_0(v *Value) bool { } func rewriteValue386_OpIsNonNil_0(v *Value) bool { b := v.Block - _ = b // match: (IsNonNil p) // cond: // result: (SETNE (TESTL p p)) @@ -22219,14 +21458,12 @@ func rewriteValue386_OpIsNonNil_0(v *Value) bool { } func rewriteValue386_OpIsSliceInBounds_0(v *Value) bool { b := v.Block - _ = b // match: (IsSliceInBounds idx len) // cond: // result: (SETBE (CMPL idx len)) for { - _ = v.Args[1] - idx := v.Args[0] len := v.Args[1] + idx := v.Args[0] v.reset(Op386SETBE) v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags) v0.AddArg(idx) @@ -22237,14 +21474,12 @@ func rewriteValue386_OpIsSliceInBounds_0(v *Value) bool { } func rewriteValue386_OpLeq16_0(v *Value) bool { b := v.Block - _ = b // match: (Leq16 x y) // cond: // result: (SETLE (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETLE) v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags) v0.AddArg(x) @@ -22255,14 +21490,12 @@ func rewriteValue386_OpLeq16_0(v *Value) bool { } func rewriteValue386_OpLeq16U_0(v *Value) bool { b := v.Block - _ = b // match: (Leq16U x y) // cond: // result: (SETBE (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETBE) v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags) v0.AddArg(x) @@ -22273,14 +21506,12 @@ func rewriteValue386_OpLeq16U_0(v *Value) bool { } func rewriteValue386_OpLeq32_0(v *Value) bool { b := v.Block - _ = b // match: (Leq32 x y) // cond: // result: (SETLE (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETLE) v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags) v0.AddArg(x) @@ -22291,14 +21522,12 @@ func rewriteValue386_OpLeq32_0(v *Value) bool { } func rewriteValue386_OpLeq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Leq32F x y) // cond: // result: (SETGEF (UCOMISS y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETGEF) v0 := b.NewValue0(v.Pos, Op386UCOMISS, types.TypeFlags) v0.AddArg(y) @@ -22309,14 +21538,12 @@ func rewriteValue386_OpLeq32F_0(v *Value) bool { } func rewriteValue386_OpLeq32U_0(v *Value) bool { b := v.Block - _ = b // match: (Leq32U x y) // cond: // result: (SETBE (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETBE) v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags) v0.AddArg(x) @@ -22327,14 +21554,12 @@ func rewriteValue386_OpLeq32U_0(v *Value) bool { } func rewriteValue386_OpLeq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Leq64F x y) // cond: // result: (SETGEF (UCOMISD y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETGEF) v0 := b.NewValue0(v.Pos, Op386UCOMISD, types.TypeFlags) v0.AddArg(y) @@ -22345,14 +21570,12 @@ func rewriteValue386_OpLeq64F_0(v *Value) bool { } func rewriteValue386_OpLeq8_0(v *Value) bool { b := v.Block - _ = b // match: (Leq8 x y) // cond: // result: (SETLE (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETLE) v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags) v0.AddArg(x) @@ -22363,14 +21586,12 @@ func rewriteValue386_OpLeq8_0(v *Value) bool { } func rewriteValue386_OpLeq8U_0(v *Value) bool { b := v.Block - _ = b // match: (Leq8U x y) // cond: // result: (SETBE (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETBE) v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags) v0.AddArg(x) @@ -22381,14 +21602,12 @@ func rewriteValue386_OpLeq8U_0(v *Value) bool { } func rewriteValue386_OpLess16_0(v *Value) bool { b := v.Block - _ = b // match: (Less16 x y) // cond: // result: (SETL (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETL) v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags) v0.AddArg(x) @@ -22399,14 +21618,12 @@ func rewriteValue386_OpLess16_0(v *Value) bool { } func rewriteValue386_OpLess16U_0(v *Value) bool { b := v.Block - _ = b // match: (Less16U x y) // cond: // result: (SETB (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETB) v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags) v0.AddArg(x) @@ -22417,14 +21634,12 @@ func rewriteValue386_OpLess16U_0(v *Value) bool { } func rewriteValue386_OpLess32_0(v *Value) bool { b := v.Block - _ = b // match: (Less32 x y) // cond: // result: (SETL (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETL) v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags) v0.AddArg(x) @@ -22435,14 +21650,12 @@ func rewriteValue386_OpLess32_0(v *Value) bool { } func rewriteValue386_OpLess32F_0(v *Value) bool { b := v.Block - _ = b // match: (Less32F x y) // cond: // result: (SETGF (UCOMISS y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETGF) v0 := b.NewValue0(v.Pos, Op386UCOMISS, types.TypeFlags) v0.AddArg(y) @@ -22453,14 +21666,12 @@ func rewriteValue386_OpLess32F_0(v *Value) bool { } func rewriteValue386_OpLess32U_0(v *Value) bool { b := v.Block - _ = b // match: (Less32U x y) // cond: // result: (SETB (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETB) v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags) v0.AddArg(x) @@ -22471,14 +21682,12 @@ func rewriteValue386_OpLess32U_0(v *Value) bool { } func rewriteValue386_OpLess64F_0(v *Value) bool { b := v.Block - _ = b // match: (Less64F x y) // cond: // result: (SETGF (UCOMISD y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETGF) v0 := b.NewValue0(v.Pos, Op386UCOMISD, types.TypeFlags) v0.AddArg(y) @@ -22489,14 +21698,12 @@ func rewriteValue386_OpLess64F_0(v *Value) bool { } func rewriteValue386_OpLess8_0(v *Value) bool { b := v.Block - _ = b // match: (Less8 x y) // cond: // result: (SETL (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETL) v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags) v0.AddArg(x) @@ -22507,14 +21714,12 @@ func rewriteValue386_OpLess8_0(v *Value) bool { } func rewriteValue386_OpLess8U_0(v *Value) bool { b := v.Block - _ = b // match: (Less8U x y) // cond: // result: (SETB (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETB) v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags) v0.AddArg(x) @@ -22529,9 +21734,8 @@ func rewriteValue386_OpLoad_0(v *Value) bool { // result: (MOVLload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is32BitInt(t) || isPtr(t)) { break } @@ -22545,9 +21749,8 @@ func rewriteValue386_OpLoad_0(v *Value) bool { // result: (MOVWload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is16BitInt(t)) { break } @@ -22561,9 +21764,8 @@ func rewriteValue386_OpLoad_0(v *Value) bool { // result: (MOVBload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.IsBoolean() || is8BitInt(t)) { break } @@ -22577,9 +21779,8 @@ func rewriteValue386_OpLoad_0(v *Value) bool { // result: (MOVSSload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is32BitFloat(t)) { break } @@ -22593,9 +21794,8 @@ func rewriteValue386_OpLoad_0(v *Value) bool { // result: (MOVSDload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is64BitFloat(t)) { break } @@ -22622,15 +21822,13 @@ func rewriteValue386_OpLocalAddr_0(v *Value) bool { } func rewriteValue386_OpLsh16x16_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh16x16 x y) // cond: // result: (ANDL (SHLL x y) (SBBLcarrymask (CMPWconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v0 := b.NewValue0(v.Pos, Op386SHLL, t) v0.AddArg(x) @@ -22647,15 +21845,13 @@ func rewriteValue386_OpLsh16x16_0(v *Value) bool { } func rewriteValue386_OpLsh16x32_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh16x32 x y) // cond: // result: (ANDL (SHLL x y) (SBBLcarrymask (CMPLconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v0 := b.NewValue0(v.Pos, Op386SHLL, t) v0.AddArg(x) @@ -22711,15 +21907,13 @@ func rewriteValue386_OpLsh16x64_0(v *Value) bool { } func rewriteValue386_OpLsh16x8_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh16x8 x y) // cond: // result: (ANDL (SHLL x y) (SBBLcarrymask (CMPBconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v0 := b.NewValue0(v.Pos, Op386SHLL, t) v0.AddArg(x) @@ -22736,15 +21930,13 @@ func rewriteValue386_OpLsh16x8_0(v *Value) bool { } func rewriteValue386_OpLsh32x16_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh32x16 x y) // cond: // result: (ANDL (SHLL x y) (SBBLcarrymask (CMPWconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v0 := b.NewValue0(v.Pos, Op386SHLL, t) v0.AddArg(x) @@ -22761,15 +21953,13 @@ func rewriteValue386_OpLsh32x16_0(v *Value) bool { } func rewriteValue386_OpLsh32x32_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh32x32 x y) // cond: // result: (ANDL (SHLL x y) (SBBLcarrymask (CMPLconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v0 := b.NewValue0(v.Pos, Op386SHLL, t) v0.AddArg(x) @@ -22825,15 +22015,13 @@ func rewriteValue386_OpLsh32x64_0(v *Value) bool { } func rewriteValue386_OpLsh32x8_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh32x8 x y) // cond: // result: (ANDL (SHLL x y) (SBBLcarrymask (CMPBconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v0 := b.NewValue0(v.Pos, Op386SHLL, t) v0.AddArg(x) @@ -22850,15 +22038,13 @@ func rewriteValue386_OpLsh32x8_0(v *Value) bool { } func rewriteValue386_OpLsh8x16_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh8x16 x y) // cond: // result: (ANDL (SHLL x y) (SBBLcarrymask (CMPWconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v0 := b.NewValue0(v.Pos, Op386SHLL, t) v0.AddArg(x) @@ -22875,15 +22061,13 @@ func rewriteValue386_OpLsh8x16_0(v *Value) bool { } func rewriteValue386_OpLsh8x32_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh8x32 x y) // cond: // result: (ANDL (SHLL x y) (SBBLcarrymask (CMPLconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v0 := b.NewValue0(v.Pos, Op386SHLL, t) v0.AddArg(x) @@ -22939,15 +22123,13 @@ func rewriteValue386_OpLsh8x64_0(v *Value) bool { } func rewriteValue386_OpLsh8x8_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh8x8 x y) // cond: // result: (ANDL (SHLL x y) (SBBLcarrymask (CMPBconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v0 := b.NewValue0(v.Pos, Op386SHLL, t) v0.AddArg(x) @@ -22968,9 +22150,8 @@ func rewriteValue386_OpMod16_0(v *Value) bool { // result: (MODW [a] x y) for { a := v.AuxInt - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386MODW) v.AuxInt = a v.AddArg(x) @@ -22983,9 +22164,8 @@ func rewriteValue386_OpMod16u_0(v *Value) bool { // cond: // result: (MODWU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386MODWU) v.AddArg(x) v.AddArg(y) @@ -22998,9 +22178,8 @@ func rewriteValue386_OpMod32_0(v *Value) bool { // result: (MODL [a] x y) for { a := v.AuxInt - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386MODL) v.AuxInt = a v.AddArg(x) @@ -23013,9 +22192,8 @@ func rewriteValue386_OpMod32u_0(v *Value) bool { // cond: // result: (MODLU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386MODLU) v.AddArg(x) v.AddArg(y) @@ -23024,16 +22202,13 @@ func rewriteValue386_OpMod32u_0(v *Value) bool { } func rewriteValue386_OpMod8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod8 x y) // cond: // result: (MODW (SignExt8to16 x) (SignExt8to16 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386MODW) v0 := b.NewValue0(v.Pos, OpSignExt8to16, typ.Int16) v0.AddArg(x) @@ -23046,16 +22221,13 @@ func rewriteValue386_OpMod8_0(v *Value) bool { } func rewriteValue386_OpMod8u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod8u x y) // cond: // result: (MODWU (ZeroExt8to16 x) (ZeroExt8to16 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386MODWU) v0 := b.NewValue0(v.Pos, OpZeroExt8to16, typ.UInt16) v0.AddArg(x) @@ -23068,9 +22240,7 @@ func rewriteValue386_OpMod8u_0(v *Value) bool { } func rewriteValue386_OpMove_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Move [0] _ _ mem) // cond: // result: mem @@ -23078,7 +22248,6 @@ func rewriteValue386_OpMove_0(v *Value) bool { if v.AuxInt != 0 { break } - _ = v.Args[2] mem := v.Args[2] v.reset(OpCopy) v.Type = mem.Type @@ -23092,10 +22261,9 @@ func rewriteValue386_OpMove_0(v *Value) bool { if v.AuxInt != 1 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVBstore) v.AddArg(dst) v0 := b.NewValue0(v.Pos, Op386MOVBload, typ.UInt8) @@ -23112,10 +22280,9 @@ func rewriteValue386_OpMove_0(v *Value) bool { if v.AuxInt != 2 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVWstore) v.AddArg(dst) v0 := b.NewValue0(v.Pos, Op386MOVWload, typ.UInt16) @@ -23132,10 +22299,9 @@ func rewriteValue386_OpMove_0(v *Value) bool { if v.AuxInt != 4 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVLstore) v.AddArg(dst) v0 := b.NewValue0(v.Pos, Op386MOVLload, typ.UInt32) @@ -23152,10 +22318,9 @@ func rewriteValue386_OpMove_0(v *Value) bool { if v.AuxInt != 3 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVBstore) v.AuxInt = 2 v.AddArg(dst) @@ -23181,10 +22346,9 @@ func rewriteValue386_OpMove_0(v *Value) bool { if v.AuxInt != 5 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVBstore) v.AuxInt = 4 v.AddArg(dst) @@ -23210,10 +22374,9 @@ func rewriteValue386_OpMove_0(v *Value) bool { if v.AuxInt != 6 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVWstore) v.AuxInt = 4 v.AddArg(dst) @@ -23239,10 +22402,9 @@ func rewriteValue386_OpMove_0(v *Value) bool { if v.AuxInt != 7 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVLstore) v.AuxInt = 3 v.AddArg(dst) @@ -23268,10 +22430,9 @@ func rewriteValue386_OpMove_0(v *Value) bool { if v.AuxInt != 8 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(Op386MOVLstore) v.AuxInt = 4 v.AddArg(dst) @@ -23295,10 +22456,9 @@ func rewriteValue386_OpMove_0(v *Value) bool { // result: (Move [s-s%4] (ADDLconst dst [s%4]) (ADDLconst src [s%4]) (MOVLstore dst (MOVLload src mem) mem)) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s > 8 && s%4 != 0) { break } @@ -23326,20 +22486,16 @@ func rewriteValue386_OpMove_0(v *Value) bool { } func rewriteValue386_OpMove_10(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Move [s] dst src mem) // cond: s > 8 && s <= 4*128 && s%4 == 0 && !config.noDuffDevice // result: (DUFFCOPY [10*(128-s/4)] dst src mem) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s > 8 && s <= 4*128 && s%4 == 0 && !config.noDuffDevice) { break } @@ -23355,10 +22511,9 @@ func rewriteValue386_OpMove_10(v *Value) bool { // result: (REPMOVSL dst src (MOVLconst [s/4]) mem) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !((s > 4*128 || config.noDuffDevice) && s%4 == 0) { break } @@ -23378,9 +22533,8 @@ func rewriteValue386_OpMul16_0(v *Value) bool { // cond: // result: (MULL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386MULL) v.AddArg(x) v.AddArg(y) @@ -23392,9 +22546,8 @@ func rewriteValue386_OpMul32_0(v *Value) bool { // cond: // result: (MULL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386MULL) v.AddArg(x) v.AddArg(y) @@ -23406,9 +22559,8 @@ func rewriteValue386_OpMul32F_0(v *Value) bool { // cond: // result: (MULSS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386MULSS) v.AddArg(x) v.AddArg(y) @@ -23420,9 +22572,8 @@ func rewriteValue386_OpMul32uhilo_0(v *Value) bool { // cond: // result: (MULLQU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386MULLQU) v.AddArg(x) v.AddArg(y) @@ -23434,9 +22585,8 @@ func rewriteValue386_OpMul64F_0(v *Value) bool { // cond: // result: (MULSD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386MULSD) v.AddArg(x) v.AddArg(y) @@ -23448,9 +22598,8 @@ func rewriteValue386_OpMul8_0(v *Value) bool { // cond: // result: (MULL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386MULL) v.AddArg(x) v.AddArg(y) @@ -23481,11 +22630,8 @@ func rewriteValue386_OpNeg32_0(v *Value) bool { } func rewriteValue386_OpNeg32F_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Neg32F x) // cond: !config.use387 // result: (PXOR x (MOVSSconst [auxFrom32F(float32(math.Copysign(0, -1)))])) @@ -23517,11 +22663,8 @@ func rewriteValue386_OpNeg32F_0(v *Value) bool { } func rewriteValue386_OpNeg64F_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Neg64F x) // cond: !config.use387 // result: (PXOR x (MOVSDconst [auxFrom64F(math.Copysign(0, -1))])) @@ -23564,14 +22707,12 @@ func rewriteValue386_OpNeg8_0(v *Value) bool { } func rewriteValue386_OpNeq16_0(v *Value) bool { b := v.Block - _ = b // match: (Neq16 x y) // cond: // result: (SETNE (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETNE) v0 := b.NewValue0(v.Pos, Op386CMPW, types.TypeFlags) v0.AddArg(x) @@ -23582,14 +22723,12 @@ func rewriteValue386_OpNeq16_0(v *Value) bool { } func rewriteValue386_OpNeq32_0(v *Value) bool { b := v.Block - _ = b // match: (Neq32 x y) // cond: // result: (SETNE (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETNE) v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags) v0.AddArg(x) @@ -23600,14 +22739,12 @@ func rewriteValue386_OpNeq32_0(v *Value) bool { } func rewriteValue386_OpNeq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Neq32F x y) // cond: // result: (SETNEF (UCOMISS x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETNEF) v0 := b.NewValue0(v.Pos, Op386UCOMISS, types.TypeFlags) v0.AddArg(x) @@ -23618,14 +22755,12 @@ func rewriteValue386_OpNeq32F_0(v *Value) bool { } func rewriteValue386_OpNeq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Neq64F x y) // cond: // result: (SETNEF (UCOMISD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETNEF) v0 := b.NewValue0(v.Pos, Op386UCOMISD, types.TypeFlags) v0.AddArg(x) @@ -23636,14 +22771,12 @@ func rewriteValue386_OpNeq64F_0(v *Value) bool { } func rewriteValue386_OpNeq8_0(v *Value) bool { b := v.Block - _ = b // match: (Neq8 x y) // cond: // result: (SETNE (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETNE) v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags) v0.AddArg(x) @@ -23654,14 +22787,12 @@ func rewriteValue386_OpNeq8_0(v *Value) bool { } func rewriteValue386_OpNeqB_0(v *Value) bool { b := v.Block - _ = b // match: (NeqB x y) // cond: // result: (SETNE (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETNE) v0 := b.NewValue0(v.Pos, Op386CMPB, types.TypeFlags) v0.AddArg(x) @@ -23672,14 +22803,12 @@ func rewriteValue386_OpNeqB_0(v *Value) bool { } func rewriteValue386_OpNeqPtr_0(v *Value) bool { b := v.Block - _ = b // match: (NeqPtr x y) // cond: // result: (SETNE (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SETNE) v0 := b.NewValue0(v.Pos, Op386CMPL, types.TypeFlags) v0.AddArg(x) @@ -23693,9 +22822,8 @@ func rewriteValue386_OpNilCheck_0(v *Value) bool { // cond: // result: (LoweredNilCheck ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(Op386LoweredNilCheck) v.AddArg(ptr) v.AddArg(mem) @@ -23732,9 +22860,8 @@ func rewriteValue386_OpOr16_0(v *Value) bool { // cond: // result: (ORL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ORL) v.AddArg(x) v.AddArg(y) @@ -23746,9 +22873,8 @@ func rewriteValue386_OpOr32_0(v *Value) bool { // cond: // result: (ORL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ORL) v.AddArg(x) v.AddArg(y) @@ -23760,9 +22886,8 @@ func rewriteValue386_OpOr8_0(v *Value) bool { // cond: // result: (ORL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ORL) v.AddArg(x) v.AddArg(y) @@ -23774,15 +22899,191 @@ func rewriteValue386_OpOrB_0(v *Value) bool { // cond: // result: (ORL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ORL) v.AddArg(x) v.AddArg(y) return true } } +func rewriteValue386_OpPanicBounds_0(v *Value) bool { + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 0 + // result: (LoweredPanicBoundsA [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 0) { + break + } + v.reset(Op386LoweredPanicBoundsA) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 1 + // result: (LoweredPanicBoundsB [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 1) { + break + } + v.reset(Op386LoweredPanicBoundsB) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 2 + // result: (LoweredPanicBoundsC [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 2) { + break + } + v.reset(Op386LoweredPanicBoundsC) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + return false +} +func rewriteValue386_OpPanicExtend_0(v *Value) bool { + // match: (PanicExtend [kind] hi lo y mem) + // cond: boundsABI(kind) == 0 + // result: (LoweredPanicExtendA [kind] hi lo y mem) + for { + kind := v.AuxInt + mem := v.Args[3] + hi := v.Args[0] + lo := v.Args[1] + y := v.Args[2] + if !(boundsABI(kind) == 0) { + break + } + v.reset(Op386LoweredPanicExtendA) + v.AuxInt = kind + v.AddArg(hi) + v.AddArg(lo) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicExtend [kind] hi lo y mem) + // cond: boundsABI(kind) == 1 + // result: (LoweredPanicExtendB [kind] hi lo y mem) + for { + kind := v.AuxInt + mem := v.Args[3] + hi := v.Args[0] + lo := v.Args[1] + y := v.Args[2] + if !(boundsABI(kind) == 1) { + break + } + v.reset(Op386LoweredPanicExtendB) + v.AuxInt = kind + v.AddArg(hi) + v.AddArg(lo) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicExtend [kind] hi lo y mem) + // cond: boundsABI(kind) == 2 + // result: (LoweredPanicExtendC [kind] hi lo y mem) + for { + kind := v.AuxInt + mem := v.Args[3] + hi := v.Args[0] + lo := v.Args[1] + y := v.Args[2] + if !(boundsABI(kind) == 2) { + break + } + v.reset(Op386LoweredPanicExtendC) + v.AuxInt = kind + v.AddArg(hi) + v.AddArg(lo) + v.AddArg(y) + v.AddArg(mem) + return true + } + return false +} +func rewriteValue386_OpRotateLeft16_0(v *Value) bool { + // match: (RotateLeft16 x (MOVLconst [c])) + // cond: + // result: (ROLWconst [c&15] x) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != Op386MOVLconst { + break + } + c := v_1.AuxInt + v.reset(Op386ROLWconst) + v.AuxInt = c & 15 + v.AddArg(x) + return true + } + return false +} +func rewriteValue386_OpRotateLeft32_0(v *Value) bool { + // match: (RotateLeft32 x (MOVLconst [c])) + // cond: + // result: (ROLLconst [c&31] x) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != Op386MOVLconst { + break + } + c := v_1.AuxInt + v.reset(Op386ROLLconst) + v.AuxInt = c & 31 + v.AddArg(x) + return true + } + return false +} +func rewriteValue386_OpRotateLeft8_0(v *Value) bool { + // match: (RotateLeft8 x (MOVLconst [c])) + // cond: + // result: (ROLBconst [c&7] x) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != Op386MOVLconst { + break + } + c := v_1.AuxInt + v.reset(Op386ROLBconst) + v.AuxInt = c & 7 + v.AddArg(x) + return true + } + return false +} func rewriteValue386_OpRound32F_0(v *Value) bool { // match: (Round32F x) // cond: @@ -23809,15 +23110,13 @@ func rewriteValue386_OpRound64F_0(v *Value) bool { } func rewriteValue386_OpRsh16Ux16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh16Ux16 x y) // cond: // result: (ANDL (SHRW x y) (SBBLcarrymask (CMPWconst y [16]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v0 := b.NewValue0(v.Pos, Op386SHRW, t) v0.AddArg(x) @@ -23834,15 +23133,13 @@ func rewriteValue386_OpRsh16Ux16_0(v *Value) bool { } func rewriteValue386_OpRsh16Ux32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh16Ux32 x y) // cond: // result: (ANDL (SHRW x y) (SBBLcarrymask (CMPLconst y [16]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v0 := b.NewValue0(v.Pos, Op386SHRW, t) v0.AddArg(x) @@ -23898,15 +23195,13 @@ func rewriteValue386_OpRsh16Ux64_0(v *Value) bool { } func rewriteValue386_OpRsh16Ux8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh16Ux8 x y) // cond: // result: (ANDL (SHRW x y) (SBBLcarrymask (CMPBconst y [16]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v0 := b.NewValue0(v.Pos, Op386SHRW, t) v0.AddArg(x) @@ -23923,15 +23218,13 @@ func rewriteValue386_OpRsh16Ux8_0(v *Value) bool { } func rewriteValue386_OpRsh16x16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh16x16 x y) // cond: // result: (SARW x (ORL y (NOTL (SBBLcarrymask (CMPWconst y [16]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SARW) v.Type = t v.AddArg(x) @@ -23951,15 +23244,13 @@ func rewriteValue386_OpRsh16x16_0(v *Value) bool { } func rewriteValue386_OpRsh16x32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh16x32 x y) // cond: // result: (SARW x (ORL y (NOTL (SBBLcarrymask (CMPLconst y [16]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SARW) v.Type = t v.AddArg(x) @@ -24020,15 +23311,13 @@ func rewriteValue386_OpRsh16x64_0(v *Value) bool { } func rewriteValue386_OpRsh16x8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh16x8 x y) // cond: // result: (SARW x (ORL y (NOTL (SBBLcarrymask (CMPBconst y [16]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SARW) v.Type = t v.AddArg(x) @@ -24048,15 +23337,13 @@ func rewriteValue386_OpRsh16x8_0(v *Value) bool { } func rewriteValue386_OpRsh32Ux16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32Ux16 x y) // cond: // result: (ANDL (SHRL x y) (SBBLcarrymask (CMPWconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v0 := b.NewValue0(v.Pos, Op386SHRL, t) v0.AddArg(x) @@ -24073,15 +23360,13 @@ func rewriteValue386_OpRsh32Ux16_0(v *Value) bool { } func rewriteValue386_OpRsh32Ux32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32Ux32 x y) // cond: // result: (ANDL (SHRL x y) (SBBLcarrymask (CMPLconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v0 := b.NewValue0(v.Pos, Op386SHRL, t) v0.AddArg(x) @@ -24137,15 +23422,13 @@ func rewriteValue386_OpRsh32Ux64_0(v *Value) bool { } func rewriteValue386_OpRsh32Ux8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32Ux8 x y) // cond: // result: (ANDL (SHRL x y) (SBBLcarrymask (CMPBconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v0 := b.NewValue0(v.Pos, Op386SHRL, t) v0.AddArg(x) @@ -24162,15 +23445,13 @@ func rewriteValue386_OpRsh32Ux8_0(v *Value) bool { } func rewriteValue386_OpRsh32x16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32x16 x y) // cond: // result: (SARL x (ORL y (NOTL (SBBLcarrymask (CMPWconst y [32]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SARL) v.Type = t v.AddArg(x) @@ -24190,15 +23471,13 @@ func rewriteValue386_OpRsh32x16_0(v *Value) bool { } func rewriteValue386_OpRsh32x32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32x32 x y) // cond: // result: (SARL x (ORL y (NOTL (SBBLcarrymask (CMPLconst y [32]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SARL) v.Type = t v.AddArg(x) @@ -24259,15 +23538,13 @@ func rewriteValue386_OpRsh32x64_0(v *Value) bool { } func rewriteValue386_OpRsh32x8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32x8 x y) // cond: // result: (SARL x (ORL y (NOTL (SBBLcarrymask (CMPBconst y [32]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SARL) v.Type = t v.AddArg(x) @@ -24287,15 +23564,13 @@ func rewriteValue386_OpRsh32x8_0(v *Value) bool { } func rewriteValue386_OpRsh8Ux16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh8Ux16 x y) // cond: // result: (ANDL (SHRB x y) (SBBLcarrymask (CMPWconst y [8]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v0 := b.NewValue0(v.Pos, Op386SHRB, t) v0.AddArg(x) @@ -24312,15 +23587,13 @@ func rewriteValue386_OpRsh8Ux16_0(v *Value) bool { } func rewriteValue386_OpRsh8Ux32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh8Ux32 x y) // cond: // result: (ANDL (SHRB x y) (SBBLcarrymask (CMPLconst y [8]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v0 := b.NewValue0(v.Pos, Op386SHRB, t) v0.AddArg(x) @@ -24376,15 +23649,13 @@ func rewriteValue386_OpRsh8Ux64_0(v *Value) bool { } func rewriteValue386_OpRsh8Ux8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh8Ux8 x y) // cond: // result: (ANDL (SHRB x y) (SBBLcarrymask (CMPBconst y [8]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386ANDL) v0 := b.NewValue0(v.Pos, Op386SHRB, t) v0.AddArg(x) @@ -24401,15 +23672,13 @@ func rewriteValue386_OpRsh8Ux8_0(v *Value) bool { } func rewriteValue386_OpRsh8x16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh8x16 x y) // cond: // result: (SARB x (ORL y (NOTL (SBBLcarrymask (CMPWconst y [8]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SARB) v.Type = t v.AddArg(x) @@ -24429,15 +23698,13 @@ func rewriteValue386_OpRsh8x16_0(v *Value) bool { } func rewriteValue386_OpRsh8x32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh8x32 x y) // cond: // result: (SARB x (ORL y (NOTL (SBBLcarrymask (CMPLconst y [8]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SARB) v.Type = t v.AddArg(x) @@ -24498,15 +23765,13 @@ func rewriteValue386_OpRsh8x64_0(v *Value) bool { } func rewriteValue386_OpRsh8x8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh8x8 x y) // cond: // result: (SARB x (ORL y (NOTL (SBBLcarrymask (CMPBconst y [8]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SARB) v.Type = t v.AddArg(x) @@ -24526,9 +23791,7 @@ func rewriteValue386_OpRsh8x8_0(v *Value) bool { } func rewriteValue386_OpSelect0_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Select0 (Mul32uover x y)) // cond: // result: (Select0 (MULLU x y)) @@ -24537,9 +23800,8 @@ func rewriteValue386_OpSelect0_0(v *Value) bool { if v_0.Op != OpMul32uover { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpSelect0) v.Type = typ.UInt32 v0 := b.NewValue0(v.Pos, Op386MULLU, types.NewTuple(typ.UInt32, types.TypeFlags)) @@ -24552,9 +23814,7 @@ func rewriteValue386_OpSelect0_0(v *Value) bool { } func rewriteValue386_OpSelect1_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Select1 (Mul32uover x y)) // cond: // result: (SETO (Select1 (MULLU x y))) @@ -24563,9 +23823,8 @@ func rewriteValue386_OpSelect1_0(v *Value) bool { if v_0.Op != OpMul32uover { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(Op386SETO) v0 := b.NewValue0(v.Pos, OpSelect1, types.TypeFlags) v1 := b.NewValue0(v.Pos, Op386MULLU, types.NewTuple(typ.UInt32, types.TypeFlags)) @@ -24624,7 +23883,6 @@ func rewriteValue386_OpSignmask_0(v *Value) bool { } func rewriteValue386_OpSlicemask_0(v *Value) bool { b := v.Block - _ = b // match: (Slicemask x) // cond: // result: (SARLconst (NEGL x) [31]) @@ -24671,10 +23929,9 @@ func rewriteValue386_OpStore_0(v *Value) bool { // result: (MOVSDstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 8 && is64BitFloat(val.Type)) { break } @@ -24689,10 +23946,9 @@ func rewriteValue386_OpStore_0(v *Value) bool { // result: (MOVSSstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 4 && is32BitFloat(val.Type)) { break } @@ -24707,10 +23963,9 @@ func rewriteValue386_OpStore_0(v *Value) bool { // result: (MOVLstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 4) { break } @@ -24725,10 +23980,9 @@ func rewriteValue386_OpStore_0(v *Value) bool { // result: (MOVWstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 2) { break } @@ -24743,10 +23997,9 @@ func rewriteValue386_OpStore_0(v *Value) bool { // result: (MOVBstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 1) { break } @@ -24763,9 +24016,8 @@ func rewriteValue386_OpSub16_0(v *Value) bool { // cond: // result: (SUBL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SUBL) v.AddArg(x) v.AddArg(y) @@ -24777,9 +24029,8 @@ func rewriteValue386_OpSub32_0(v *Value) bool { // cond: // result: (SUBL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SUBL) v.AddArg(x) v.AddArg(y) @@ -24791,9 +24042,8 @@ func rewriteValue386_OpSub32F_0(v *Value) bool { // cond: // result: (SUBSS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SUBSS) v.AddArg(x) v.AddArg(y) @@ -24805,9 +24055,8 @@ func rewriteValue386_OpSub32carry_0(v *Value) bool { // cond: // result: (SUBLcarry x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SUBLcarry) v.AddArg(x) v.AddArg(y) @@ -24819,10 +24068,9 @@ func rewriteValue386_OpSub32withcarry_0(v *Value) bool { // cond: // result: (SBBL x y c) for { - _ = v.Args[2] + c := v.Args[2] x := v.Args[0] y := v.Args[1] - c := v.Args[2] v.reset(Op386SBBL) v.AddArg(x) v.AddArg(y) @@ -24835,9 +24083,8 @@ func rewriteValue386_OpSub64F_0(v *Value) bool { // cond: // result: (SUBSD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SUBSD) v.AddArg(x) v.AddArg(y) @@ -24849,9 +24096,8 @@ func rewriteValue386_OpSub8_0(v *Value) bool { // cond: // result: (SUBL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SUBL) v.AddArg(x) v.AddArg(y) @@ -24863,9 +24109,8 @@ func rewriteValue386_OpSubPtr_0(v *Value) bool { // cond: // result: (SUBL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386SUBL) v.AddArg(x) v.AddArg(y) @@ -24914,10 +24159,9 @@ func rewriteValue386_OpWB_0(v *Value) bool { // result: (LoweredWB {fn} destptr srcptr mem) for { fn := v.Aux - _ = v.Args[2] + mem := v.Args[2] destptr := v.Args[0] srcptr := v.Args[1] - mem := v.Args[2] v.reset(Op386LoweredWB) v.Aux = fn v.AddArg(destptr) @@ -24931,9 +24175,8 @@ func rewriteValue386_OpXor16_0(v *Value) bool { // cond: // result: (XORL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386XORL) v.AddArg(x) v.AddArg(y) @@ -24945,9 +24188,8 @@ func rewriteValue386_OpXor32_0(v *Value) bool { // cond: // result: (XORL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386XORL) v.AddArg(x) v.AddArg(y) @@ -24959,9 +24201,8 @@ func rewriteValue386_OpXor8_0(v *Value) bool { // cond: // result: (XORL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(Op386XORL) v.AddArg(x) v.AddArg(y) @@ -24970,9 +24211,7 @@ func rewriteValue386_OpXor8_0(v *Value) bool { } func rewriteValue386_OpZero_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Zero [0] _ mem) // cond: // result: mem @@ -24980,7 +24219,6 @@ func rewriteValue386_OpZero_0(v *Value) bool { if v.AuxInt != 0 { break } - _ = v.Args[1] mem := v.Args[1] v.reset(OpCopy) v.Type = mem.Type @@ -24994,9 +24232,8 @@ func rewriteValue386_OpZero_0(v *Value) bool { if v.AuxInt != 1 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(Op386MOVBstoreconst) v.AuxInt = 0 v.AddArg(destptr) @@ -25010,9 +24247,8 @@ func rewriteValue386_OpZero_0(v *Value) bool { if v.AuxInt != 2 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(Op386MOVWstoreconst) v.AuxInt = 0 v.AddArg(destptr) @@ -25026,9 +24262,8 @@ func rewriteValue386_OpZero_0(v *Value) bool { if v.AuxInt != 4 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(Op386MOVLstoreconst) v.AuxInt = 0 v.AddArg(destptr) @@ -25042,9 +24277,8 @@ func rewriteValue386_OpZero_0(v *Value) bool { if v.AuxInt != 3 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(Op386MOVBstoreconst) v.AuxInt = makeValAndOff(0, 2) v.AddArg(destptr) @@ -25062,9 +24296,8 @@ func rewriteValue386_OpZero_0(v *Value) bool { if v.AuxInt != 5 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(Op386MOVBstoreconst) v.AuxInt = makeValAndOff(0, 4) v.AddArg(destptr) @@ -25082,9 +24315,8 @@ func rewriteValue386_OpZero_0(v *Value) bool { if v.AuxInt != 6 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(Op386MOVWstoreconst) v.AuxInt = makeValAndOff(0, 4) v.AddArg(destptr) @@ -25102,9 +24334,8 @@ func rewriteValue386_OpZero_0(v *Value) bool { if v.AuxInt != 7 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(Op386MOVLstoreconst) v.AuxInt = makeValAndOff(0, 3) v.AddArg(destptr) @@ -25120,9 +24351,8 @@ func rewriteValue386_OpZero_0(v *Value) bool { // result: (Zero [s-s%4] (ADDLconst destptr [s%4]) (MOVLstoreconst [0] destptr mem)) for { s := v.AuxInt - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(s%4 != 0 && s > 4) { break } @@ -25146,9 +24376,8 @@ func rewriteValue386_OpZero_0(v *Value) bool { if v.AuxInt != 8 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(Op386MOVLstoreconst) v.AuxInt = makeValAndOff(0, 4) v.AddArg(destptr) @@ -25163,11 +24392,8 @@ func rewriteValue386_OpZero_0(v *Value) bool { } func rewriteValue386_OpZero_10(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Zero [12] destptr mem) // cond: // result: (MOVLstoreconst [makeValAndOff(0,8)] destptr (MOVLstoreconst [makeValAndOff(0,4)] destptr (MOVLstoreconst [0] destptr mem))) @@ -25175,9 +24401,8 @@ func rewriteValue386_OpZero_10(v *Value) bool { if v.AuxInt != 12 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(Op386MOVLstoreconst) v.AuxInt = makeValAndOff(0, 8) v.AddArg(destptr) @@ -25199,9 +24424,8 @@ func rewriteValue386_OpZero_10(v *Value) bool { if v.AuxInt != 16 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(Op386MOVLstoreconst) v.AuxInt = makeValAndOff(0, 12) v.AddArg(destptr) @@ -25225,9 +24449,8 @@ func rewriteValue386_OpZero_10(v *Value) bool { // result: (DUFFZERO [1*(128-s/4)] destptr (MOVLconst [0]) mem) for { s := v.AuxInt - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(s > 16 && s <= 4*128 && s%4 == 0 && !config.noDuffDevice) { break } @@ -25245,9 +24468,8 @@ func rewriteValue386_OpZero_10(v *Value) bool { // result: (REPSTOSL destptr (MOVLconst [s/4]) (MOVLconst [0]) mem) for { s := v.AuxInt - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !((s > 4*128 || (config.noDuffDevice && s > 16)) && s%4 == 0) { break } @@ -25299,7 +24521,6 @@ func rewriteValue386_OpZeroExt8to32_0(v *Value) bool { } func rewriteValue386_OpZeromask_0(v *Value) bool { b := v.Block - _ = b // match: (Zeromask x) // cond: // result: (XORLconst [-1] (SBBLcarrymask (CMPLconst x [1]))) @@ -25319,21 +24540,16 @@ func rewriteValue386_OpZeromask_0(v *Value) bool { } func rewriteBlock386(b *Block) bool { config := b.Func.Config - _ = config - fe := b.Func.fe - _ = fe typ := &config.Types _ = typ + v := b.Control + _ = v switch b.Kind { case Block386EQ: // match: (EQ (InvertFlags cmp) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != Op386InvertFlags { - break - } + for v.Op == Op386InvertFlags { cmp := v.Args[0] b.Kind = Block386EQ b.SetControl(cmp) @@ -25343,11 +24559,7 @@ func rewriteBlock386(b *Block) bool { // match: (EQ (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagEQ { - break - } + for v.Op == Op386FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25356,11 +24568,7 @@ func rewriteBlock386(b *Block) bool { // match: (EQ (FlagLT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagLT_ULT { - break - } + for v.Op == Op386FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25370,11 +24578,7 @@ func rewriteBlock386(b *Block) bool { // match: (EQ (FlagLT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagLT_UGT { - break - } + for v.Op == Op386FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25384,11 +24588,7 @@ func rewriteBlock386(b *Block) bool { // match: (EQ (FlagGT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagGT_ULT { - break - } + for v.Op == Op386FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25398,11 +24598,7 @@ func rewriteBlock386(b *Block) bool { // match: (EQ (FlagGT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagGT_UGT { - break - } + for v.Op == Op386FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25413,11 +24609,7 @@ func rewriteBlock386(b *Block) bool { // match: (GE (InvertFlags cmp) yes no) // cond: // result: (LE cmp yes no) - for { - v := b.Control - if v.Op != Op386InvertFlags { - break - } + for v.Op == Op386InvertFlags { cmp := v.Args[0] b.Kind = Block386LE b.SetControl(cmp) @@ -25427,11 +24619,7 @@ func rewriteBlock386(b *Block) bool { // match: (GE (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagEQ { - break - } + for v.Op == Op386FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25440,11 +24628,7 @@ func rewriteBlock386(b *Block) bool { // match: (GE (FlagLT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagLT_ULT { - break - } + for v.Op == Op386FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25454,11 +24638,7 @@ func rewriteBlock386(b *Block) bool { // match: (GE (FlagLT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagLT_UGT { - break - } + for v.Op == Op386FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25468,11 +24648,7 @@ func rewriteBlock386(b *Block) bool { // match: (GE (FlagGT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagGT_ULT { - break - } + for v.Op == Op386FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25481,11 +24657,7 @@ func rewriteBlock386(b *Block) bool { // match: (GE (FlagGT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagGT_UGT { - break - } + for v.Op == Op386FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25495,11 +24667,7 @@ func rewriteBlock386(b *Block) bool { // match: (GT (InvertFlags cmp) yes no) // cond: // result: (LT cmp yes no) - for { - v := b.Control - if v.Op != Op386InvertFlags { - break - } + for v.Op == Op386InvertFlags { cmp := v.Args[0] b.Kind = Block386LT b.SetControl(cmp) @@ -25509,11 +24677,7 @@ func rewriteBlock386(b *Block) bool { // match: (GT (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagEQ { - break - } + for v.Op == Op386FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25523,11 +24687,7 @@ func rewriteBlock386(b *Block) bool { // match: (GT (FlagLT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagLT_ULT { - break - } + for v.Op == Op386FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25537,11 +24697,7 @@ func rewriteBlock386(b *Block) bool { // match: (GT (FlagLT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagLT_UGT { - break - } + for v.Op == Op386FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25551,11 +24707,7 @@ func rewriteBlock386(b *Block) bool { // match: (GT (FlagGT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagGT_ULT { - break - } + for v.Op == Op386FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25564,11 +24716,7 @@ func rewriteBlock386(b *Block) bool { // match: (GT (FlagGT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagGT_UGT { - break - } + for v.Op == Op386FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25578,11 +24726,7 @@ func rewriteBlock386(b *Block) bool { // match: (If (SETL cmp) yes no) // cond: // result: (LT cmp yes no) - for { - v := b.Control - if v.Op != Op386SETL { - break - } + for v.Op == Op386SETL { cmp := v.Args[0] b.Kind = Block386LT b.SetControl(cmp) @@ -25592,11 +24736,7 @@ func rewriteBlock386(b *Block) bool { // match: (If (SETLE cmp) yes no) // cond: // result: (LE cmp yes no) - for { - v := b.Control - if v.Op != Op386SETLE { - break - } + for v.Op == Op386SETLE { cmp := v.Args[0] b.Kind = Block386LE b.SetControl(cmp) @@ -25606,11 +24746,7 @@ func rewriteBlock386(b *Block) bool { // match: (If (SETG cmp) yes no) // cond: // result: (GT cmp yes no) - for { - v := b.Control - if v.Op != Op386SETG { - break - } + for v.Op == Op386SETG { cmp := v.Args[0] b.Kind = Block386GT b.SetControl(cmp) @@ -25620,11 +24756,7 @@ func rewriteBlock386(b *Block) bool { // match: (If (SETGE cmp) yes no) // cond: // result: (GE cmp yes no) - for { - v := b.Control - if v.Op != Op386SETGE { - break - } + for v.Op == Op386SETGE { cmp := v.Args[0] b.Kind = Block386GE b.SetControl(cmp) @@ -25634,11 +24766,7 @@ func rewriteBlock386(b *Block) bool { // match: (If (SETEQ cmp) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != Op386SETEQ { - break - } + for v.Op == Op386SETEQ { cmp := v.Args[0] b.Kind = Block386EQ b.SetControl(cmp) @@ -25648,11 +24776,7 @@ func rewriteBlock386(b *Block) bool { // match: (If (SETNE cmp) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != Op386SETNE { - break - } + for v.Op == Op386SETNE { cmp := v.Args[0] b.Kind = Block386NE b.SetControl(cmp) @@ -25662,11 +24786,7 @@ func rewriteBlock386(b *Block) bool { // match: (If (SETB cmp) yes no) // cond: // result: (ULT cmp yes no) - for { - v := b.Control - if v.Op != Op386SETB { - break - } + for v.Op == Op386SETB { cmp := v.Args[0] b.Kind = Block386ULT b.SetControl(cmp) @@ -25676,11 +24796,7 @@ func rewriteBlock386(b *Block) bool { // match: (If (SETBE cmp) yes no) // cond: // result: (ULE cmp yes no) - for { - v := b.Control - if v.Op != Op386SETBE { - break - } + for v.Op == Op386SETBE { cmp := v.Args[0] b.Kind = Block386ULE b.SetControl(cmp) @@ -25690,11 +24806,7 @@ func rewriteBlock386(b *Block) bool { // match: (If (SETA cmp) yes no) // cond: // result: (UGT cmp yes no) - for { - v := b.Control - if v.Op != Op386SETA { - break - } + for v.Op == Op386SETA { cmp := v.Args[0] b.Kind = Block386UGT b.SetControl(cmp) @@ -25704,11 +24816,7 @@ func rewriteBlock386(b *Block) bool { // match: (If (SETAE cmp) yes no) // cond: // result: (UGE cmp yes no) - for { - v := b.Control - if v.Op != Op386SETAE { - break - } + for v.Op == Op386SETAE { cmp := v.Args[0] b.Kind = Block386UGE b.SetControl(cmp) @@ -25718,11 +24826,7 @@ func rewriteBlock386(b *Block) bool { // match: (If (SETO cmp) yes no) // cond: // result: (OS cmp yes no) - for { - v := b.Control - if v.Op != Op386SETO { - break - } + for v.Op == Op386SETO { cmp := v.Args[0] b.Kind = Block386OS b.SetControl(cmp) @@ -25732,11 +24836,7 @@ func rewriteBlock386(b *Block) bool { // match: (If (SETGF cmp) yes no) // cond: // result: (UGT cmp yes no) - for { - v := b.Control - if v.Op != Op386SETGF { - break - } + for v.Op == Op386SETGF { cmp := v.Args[0] b.Kind = Block386UGT b.SetControl(cmp) @@ -25746,11 +24846,7 @@ func rewriteBlock386(b *Block) bool { // match: (If (SETGEF cmp) yes no) // cond: // result: (UGE cmp yes no) - for { - v := b.Control - if v.Op != Op386SETGEF { - break - } + for v.Op == Op386SETGEF { cmp := v.Args[0] b.Kind = Block386UGE b.SetControl(cmp) @@ -25760,11 +24856,7 @@ func rewriteBlock386(b *Block) bool { // match: (If (SETEQF cmp) yes no) // cond: // result: (EQF cmp yes no) - for { - v := b.Control - if v.Op != Op386SETEQF { - break - } + for v.Op == Op386SETEQF { cmp := v.Args[0] b.Kind = Block386EQF b.SetControl(cmp) @@ -25774,11 +24866,7 @@ func rewriteBlock386(b *Block) bool { // match: (If (SETNEF cmp) yes no) // cond: // result: (NEF cmp yes no) - for { - v := b.Control - if v.Op != Op386SETNEF { - break - } + for v.Op == Op386SETNEF { cmp := v.Args[0] b.Kind = Block386NEF b.SetControl(cmp) @@ -25789,8 +24877,6 @@ func rewriteBlock386(b *Block) bool { // cond: // result: (NE (TESTB cond cond) yes no) for { - v := b.Control - _ = v cond := b.Control b.Kind = Block386NE v0 := b.NewValue0(v.Pos, Op386TESTB, types.TypeFlags) @@ -25804,11 +24890,7 @@ func rewriteBlock386(b *Block) bool { // match: (LE (InvertFlags cmp) yes no) // cond: // result: (GE cmp yes no) - for { - v := b.Control - if v.Op != Op386InvertFlags { - break - } + for v.Op == Op386InvertFlags { cmp := v.Args[0] b.Kind = Block386GE b.SetControl(cmp) @@ -25818,11 +24900,7 @@ func rewriteBlock386(b *Block) bool { // match: (LE (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagEQ { - break - } + for v.Op == Op386FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25831,11 +24909,7 @@ func rewriteBlock386(b *Block) bool { // match: (LE (FlagLT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagLT_ULT { - break - } + for v.Op == Op386FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25844,11 +24918,7 @@ func rewriteBlock386(b *Block) bool { // match: (LE (FlagLT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagLT_UGT { - break - } + for v.Op == Op386FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25857,11 +24927,7 @@ func rewriteBlock386(b *Block) bool { // match: (LE (FlagGT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagGT_ULT { - break - } + for v.Op == Op386FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25871,11 +24937,7 @@ func rewriteBlock386(b *Block) bool { // match: (LE (FlagGT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagGT_UGT { - break - } + for v.Op == Op386FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25886,11 +24948,7 @@ func rewriteBlock386(b *Block) bool { // match: (LT (InvertFlags cmp) yes no) // cond: // result: (GT cmp yes no) - for { - v := b.Control - if v.Op != Op386InvertFlags { - break - } + for v.Op == Op386InvertFlags { cmp := v.Args[0] b.Kind = Block386GT b.SetControl(cmp) @@ -25900,11 +24958,7 @@ func rewriteBlock386(b *Block) bool { // match: (LT (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagEQ { - break - } + for v.Op == Op386FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25914,11 +24968,7 @@ func rewriteBlock386(b *Block) bool { // match: (LT (FlagLT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagLT_ULT { - break - } + for v.Op == Op386FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25927,11 +24977,7 @@ func rewriteBlock386(b *Block) bool { // match: (LT (FlagLT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagLT_UGT { - break - } + for v.Op == Op386FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25940,11 +24986,7 @@ func rewriteBlock386(b *Block) bool { // match: (LT (FlagGT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagGT_ULT { - break - } + for v.Op == Op386FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25954,11 +24996,7 @@ func rewriteBlock386(b *Block) bool { // match: (LT (FlagGT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagGT_UGT { - break - } + for v.Op == Op386FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25969,11 +25007,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETL cmp) (SETL cmp)) yes no) // cond: // result: (LT cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETL { @@ -25995,11 +25029,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETL cmp) (SETL cmp)) yes no) // cond: // result: (LT cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETL { @@ -26021,11 +25051,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETLE cmp) (SETLE cmp)) yes no) // cond: // result: (LE cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETLE { @@ -26047,11 +25073,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETLE cmp) (SETLE cmp)) yes no) // cond: // result: (LE cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETLE { @@ -26073,11 +25095,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETG cmp) (SETG cmp)) yes no) // cond: // result: (GT cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETG { @@ -26099,11 +25117,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETG cmp) (SETG cmp)) yes no) // cond: // result: (GT cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETG { @@ -26125,11 +25139,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETGE cmp) (SETGE cmp)) yes no) // cond: // result: (GE cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETGE { @@ -26151,11 +25161,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETGE cmp) (SETGE cmp)) yes no) // cond: // result: (GE cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETGE { @@ -26177,11 +25183,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETEQ cmp) (SETEQ cmp)) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETEQ { @@ -26203,11 +25205,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETEQ cmp) (SETEQ cmp)) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETEQ { @@ -26229,11 +25227,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETNE cmp) (SETNE cmp)) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETNE { @@ -26255,11 +25249,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETNE cmp) (SETNE cmp)) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETNE { @@ -26281,11 +25271,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETB cmp) (SETB cmp)) yes no) // cond: // result: (ULT cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETB { @@ -26307,11 +25293,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETB cmp) (SETB cmp)) yes no) // cond: // result: (ULT cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETB { @@ -26333,11 +25315,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETBE cmp) (SETBE cmp)) yes no) // cond: // result: (ULE cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETBE { @@ -26359,11 +25337,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETBE cmp) (SETBE cmp)) yes no) // cond: // result: (ULE cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETBE { @@ -26385,11 +25359,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETA cmp) (SETA cmp)) yes no) // cond: // result: (UGT cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETA { @@ -26411,11 +25381,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETA cmp) (SETA cmp)) yes no) // cond: // result: (UGT cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETA { @@ -26437,11 +25403,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETAE cmp) (SETAE cmp)) yes no) // cond: // result: (UGE cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETAE { @@ -26463,11 +25425,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETAE cmp) (SETAE cmp)) yes no) // cond: // result: (UGE cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETAE { @@ -26489,11 +25447,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETO cmp) (SETO cmp)) yes no) // cond: // result: (OS cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETO { @@ -26515,11 +25469,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETO cmp) (SETO cmp)) yes no) // cond: // result: (OS cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETO { @@ -26541,11 +25491,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETGF cmp) (SETGF cmp)) yes no) // cond: // result: (UGT cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETGF { @@ -26567,11 +25513,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETGF cmp) (SETGF cmp)) yes no) // cond: // result: (UGT cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETGF { @@ -26593,11 +25535,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETGEF cmp) (SETGEF cmp)) yes no) // cond: // result: (UGE cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETGEF { @@ -26619,11 +25557,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETGEF cmp) (SETGEF cmp)) yes no) // cond: // result: (UGE cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETGEF { @@ -26645,11 +25579,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETEQF cmp) (SETEQF cmp)) yes no) // cond: // result: (EQF cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETEQF { @@ -26671,11 +25601,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETEQF cmp) (SETEQF cmp)) yes no) // cond: // result: (EQF cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETEQF { @@ -26697,11 +25623,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETNEF cmp) (SETNEF cmp)) yes no) // cond: // result: (NEF cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETNEF { @@ -26723,11 +25645,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (TESTB (SETNEF cmp) (SETNEF cmp)) yes no) // cond: // result: (NEF cmp yes no) - for { - v := b.Control - if v.Op != Op386TESTB { - break - } + for v.Op == Op386TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != Op386SETNEF { @@ -26749,11 +25667,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (InvertFlags cmp) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != Op386InvertFlags { - break - } + for v.Op == Op386InvertFlags { cmp := v.Args[0] b.Kind = Block386NE b.SetControl(cmp) @@ -26763,11 +25677,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagEQ { - break - } + for v.Op == Op386FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -26777,11 +25687,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (FlagLT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagLT_ULT { - break - } + for v.Op == Op386FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -26790,11 +25696,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (FlagLT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagLT_UGT { - break - } + for v.Op == Op386FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -26803,11 +25705,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (FlagGT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagGT_ULT { - break - } + for v.Op == Op386FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -26816,11 +25714,7 @@ func rewriteBlock386(b *Block) bool { // match: (NE (FlagGT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagGT_UGT { - break - } + for v.Op == Op386FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -26830,11 +25724,7 @@ func rewriteBlock386(b *Block) bool { // match: (UGE (InvertFlags cmp) yes no) // cond: // result: (ULE cmp yes no) - for { - v := b.Control - if v.Op != Op386InvertFlags { - break - } + for v.Op == Op386InvertFlags { cmp := v.Args[0] b.Kind = Block386ULE b.SetControl(cmp) @@ -26844,11 +25734,7 @@ func rewriteBlock386(b *Block) bool { // match: (UGE (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagEQ { - break - } + for v.Op == Op386FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -26857,11 +25743,7 @@ func rewriteBlock386(b *Block) bool { // match: (UGE (FlagLT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagLT_ULT { - break - } + for v.Op == Op386FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -26871,11 +25753,7 @@ func rewriteBlock386(b *Block) bool { // match: (UGE (FlagLT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagLT_UGT { - break - } + for v.Op == Op386FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -26884,11 +25762,7 @@ func rewriteBlock386(b *Block) bool { // match: (UGE (FlagGT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagGT_ULT { - break - } + for v.Op == Op386FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -26898,11 +25772,7 @@ func rewriteBlock386(b *Block) bool { // match: (UGE (FlagGT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagGT_UGT { - break - } + for v.Op == Op386FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -26912,11 +25782,7 @@ func rewriteBlock386(b *Block) bool { // match: (UGT (InvertFlags cmp) yes no) // cond: // result: (ULT cmp yes no) - for { - v := b.Control - if v.Op != Op386InvertFlags { - break - } + for v.Op == Op386InvertFlags { cmp := v.Args[0] b.Kind = Block386ULT b.SetControl(cmp) @@ -26926,11 +25792,7 @@ func rewriteBlock386(b *Block) bool { // match: (UGT (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagEQ { - break - } + for v.Op == Op386FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -26940,11 +25802,7 @@ func rewriteBlock386(b *Block) bool { // match: (UGT (FlagLT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagLT_ULT { - break - } + for v.Op == Op386FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -26954,11 +25812,7 @@ func rewriteBlock386(b *Block) bool { // match: (UGT (FlagLT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagLT_UGT { - break - } + for v.Op == Op386FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -26967,11 +25821,7 @@ func rewriteBlock386(b *Block) bool { // match: (UGT (FlagGT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagGT_ULT { - break - } + for v.Op == Op386FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -26981,11 +25831,7 @@ func rewriteBlock386(b *Block) bool { // match: (UGT (FlagGT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagGT_UGT { - break - } + for v.Op == Op386FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -26995,11 +25841,7 @@ func rewriteBlock386(b *Block) bool { // match: (ULE (InvertFlags cmp) yes no) // cond: // result: (UGE cmp yes no) - for { - v := b.Control - if v.Op != Op386InvertFlags { - break - } + for v.Op == Op386InvertFlags { cmp := v.Args[0] b.Kind = Block386UGE b.SetControl(cmp) @@ -27009,11 +25851,7 @@ func rewriteBlock386(b *Block) bool { // match: (ULE (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagEQ { - break - } + for v.Op == Op386FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -27022,11 +25860,7 @@ func rewriteBlock386(b *Block) bool { // match: (ULE (FlagLT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagLT_ULT { - break - } + for v.Op == Op386FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -27035,11 +25869,7 @@ func rewriteBlock386(b *Block) bool { // match: (ULE (FlagLT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagLT_UGT { - break - } + for v.Op == Op386FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -27049,11 +25879,7 @@ func rewriteBlock386(b *Block) bool { // match: (ULE (FlagGT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagGT_ULT { - break - } + for v.Op == Op386FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -27062,11 +25888,7 @@ func rewriteBlock386(b *Block) bool { // match: (ULE (FlagGT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagGT_UGT { - break - } + for v.Op == Op386FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -27077,11 +25899,7 @@ func rewriteBlock386(b *Block) bool { // match: (ULT (InvertFlags cmp) yes no) // cond: // result: (UGT cmp yes no) - for { - v := b.Control - if v.Op != Op386InvertFlags { - break - } + for v.Op == Op386InvertFlags { cmp := v.Args[0] b.Kind = Block386UGT b.SetControl(cmp) @@ -27091,11 +25909,7 @@ func rewriteBlock386(b *Block) bool { // match: (ULT (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagEQ { - break - } + for v.Op == Op386FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -27105,11 +25919,7 @@ func rewriteBlock386(b *Block) bool { // match: (ULT (FlagLT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagLT_ULT { - break - } + for v.Op == Op386FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -27118,11 +25928,7 @@ func rewriteBlock386(b *Block) bool { // match: (ULT (FlagLT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagLT_UGT { - break - } + for v.Op == Op386FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -27132,11 +25938,7 @@ func rewriteBlock386(b *Block) bool { // match: (ULT (FlagGT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != Op386FlagGT_ULT { - break - } + for v.Op == Op386FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -27145,11 +25947,7 @@ func rewriteBlock386(b *Block) bool { // match: (ULT (FlagGT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != Op386FlagGT_UGT { - break - } + for v.Op == Op386FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil diff --git a/src/cmd/compile/internal/ssa/rewrite386splitload.go b/src/cmd/compile/internal/ssa/rewrite386splitload.go new file mode 100644 index 0000000000..1eaf2d9d48 --- /dev/null +++ b/src/cmd/compile/internal/ssa/rewrite386splitload.go @@ -0,0 +1,179 @@ +// Code generated from gen/386splitload.rules; DO NOT EDIT. +// generated with: cd gen; go run *.go + +package ssa + +import "fmt" +import "math" +import "cmd/internal/obj" +import "cmd/internal/objabi" +import "cmd/compile/internal/types" + +var _ = fmt.Println // in case not otherwise used +var _ = math.MinInt8 // in case not otherwise used +var _ = obj.ANOP // in case not otherwise used +var _ = objabi.GOROOT // in case not otherwise used +var _ = types.TypeMem // in case not otherwise used + +func rewriteValue386splitload(v *Value) bool { + switch v.Op { + case Op386CMPBconstload: + return rewriteValue386splitload_Op386CMPBconstload_0(v) + case Op386CMPBload: + return rewriteValue386splitload_Op386CMPBload_0(v) + case Op386CMPLconstload: + return rewriteValue386splitload_Op386CMPLconstload_0(v) + case Op386CMPLload: + return rewriteValue386splitload_Op386CMPLload_0(v) + case Op386CMPWconstload: + return rewriteValue386splitload_Op386CMPWconstload_0(v) + case Op386CMPWload: + return rewriteValue386splitload_Op386CMPWload_0(v) + } + return false +} +func rewriteValue386splitload_Op386CMPBconstload_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (CMPBconstload {sym} [vo] ptr mem) + // cond: + // result: (CMPBconst (MOVBload {sym} [offOnly(vo)] ptr mem) [valOnly(vo)]) + for { + vo := v.AuxInt + sym := v.Aux + mem := v.Args[1] + ptr := v.Args[0] + v.reset(Op386CMPBconst) + v.AuxInt = valOnly(vo) + v0 := b.NewValue0(v.Pos, Op386MOVBload, typ.UInt8) + v0.AuxInt = offOnly(vo) + v0.Aux = sym + v0.AddArg(ptr) + v0.AddArg(mem) + v.AddArg(v0) + return true + } +} +func rewriteValue386splitload_Op386CMPBload_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (CMPBload {sym} [off] ptr x mem) + // cond: + // result: (CMPB (MOVBload {sym} [off] ptr mem) x) + for { + off := v.AuxInt + sym := v.Aux + mem := v.Args[2] + ptr := v.Args[0] + x := v.Args[1] + v.reset(Op386CMPB) + v0 := b.NewValue0(v.Pos, Op386MOVBload, typ.UInt8) + v0.AuxInt = off + v0.Aux = sym + v0.AddArg(ptr) + v0.AddArg(mem) + v.AddArg(v0) + v.AddArg(x) + return true + } +} +func rewriteValue386splitload_Op386CMPLconstload_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (CMPLconstload {sym} [vo] ptr mem) + // cond: + // result: (CMPLconst (MOVLload {sym} [offOnly(vo)] ptr mem) [valOnly(vo)]) + for { + vo := v.AuxInt + sym := v.Aux + mem := v.Args[1] + ptr := v.Args[0] + v.reset(Op386CMPLconst) + v.AuxInt = valOnly(vo) + v0 := b.NewValue0(v.Pos, Op386MOVLload, typ.UInt32) + v0.AuxInt = offOnly(vo) + v0.Aux = sym + v0.AddArg(ptr) + v0.AddArg(mem) + v.AddArg(v0) + return true + } +} +func rewriteValue386splitload_Op386CMPLload_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (CMPLload {sym} [off] ptr x mem) + // cond: + // result: (CMPL (MOVLload {sym} [off] ptr mem) x) + for { + off := v.AuxInt + sym := v.Aux + mem := v.Args[2] + ptr := v.Args[0] + x := v.Args[1] + v.reset(Op386CMPL) + v0 := b.NewValue0(v.Pos, Op386MOVLload, typ.UInt32) + v0.AuxInt = off + v0.Aux = sym + v0.AddArg(ptr) + v0.AddArg(mem) + v.AddArg(v0) + v.AddArg(x) + return true + } +} +func rewriteValue386splitload_Op386CMPWconstload_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (CMPWconstload {sym} [vo] ptr mem) + // cond: + // result: (CMPWconst (MOVWload {sym} [offOnly(vo)] ptr mem) [valOnly(vo)]) + for { + vo := v.AuxInt + sym := v.Aux + mem := v.Args[1] + ptr := v.Args[0] + v.reset(Op386CMPWconst) + v.AuxInt = valOnly(vo) + v0 := b.NewValue0(v.Pos, Op386MOVWload, typ.UInt16) + v0.AuxInt = offOnly(vo) + v0.Aux = sym + v0.AddArg(ptr) + v0.AddArg(mem) + v.AddArg(v0) + return true + } +} +func rewriteValue386splitload_Op386CMPWload_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (CMPWload {sym} [off] ptr x mem) + // cond: + // result: (CMPW (MOVWload {sym} [off] ptr mem) x) + for { + off := v.AuxInt + sym := v.Aux + mem := v.Args[2] + ptr := v.Args[0] + x := v.Args[1] + v.reset(Op386CMPW) + v0 := b.NewValue0(v.Pos, Op386MOVWload, typ.UInt16) + v0.AuxInt = off + v0.Aux = sym + v0.AddArg(ptr) + v0.AddArg(mem) + v.AddArg(v0) + v.AddArg(x) + return true + } +} +func rewriteBlock386splitload(b *Block) bool { + config := b.Func.Config + typ := &config.Types + _ = typ + v := b.Control + _ = v + switch b.Kind { + } + return false +} diff --git a/src/cmd/compile/internal/ssa/rewriteAMD64.go b/src/cmd/compile/internal/ssa/rewriteAMD64.go index b52e53f9d2..4ffa317a06 100644 --- a/src/cmd/compile/internal/ssa/rewriteAMD64.go +++ b/src/cmd/compile/internal/ssa/rewriteAMD64.go @@ -251,6 +251,8 @@ func rewriteValueAMD64(v *Value) bool { return rewriteValueAMD64_OpAMD64MOVBQSXload_0(v) case OpAMD64MOVBQZX: return rewriteValueAMD64_OpAMD64MOVBQZX_0(v) + case OpAMD64MOVBatomicload: + return rewriteValueAMD64_OpAMD64MOVBatomicload_0(v) case OpAMD64MOVBload: return rewriteValueAMD64_OpAMD64MOVBload_0(v) case OpAMD64MOVBloadidx1: @@ -643,6 +645,8 @@ func rewriteValueAMD64(v *Value) bool { return rewriteValueAMD64_OpAtomicLoad32_0(v) case OpAtomicLoad64: return rewriteValueAMD64_OpAtomicLoad64_0(v) + case OpAtomicLoad8: + return rewriteValueAMD64_OpAtomicLoad8_0(v) case OpAtomicLoadPtr: return rewriteValueAMD64_OpAtomicLoadPtr_0(v) case OpAtomicOr8: @@ -831,6 +835,8 @@ func rewriteValueAMD64(v *Value) bool { return rewriteValueAMD64_OpHmul64u_0(v) case OpInt64Hi: return rewriteValueAMD64_OpInt64Hi_0(v) + case OpInt64Lo: + return rewriteValueAMD64_OpInt64Lo_0(v) case OpInterCall: return rewriteValueAMD64_OpInterCall_0(v) case OpIsInBounds: @@ -991,6 +997,10 @@ func rewriteValueAMD64(v *Value) bool { return rewriteValueAMD64_OpOr8_0(v) case OpOrB: return rewriteValueAMD64_OpOrB_0(v) + case OpPanicBounds: + return rewriteValueAMD64_OpPanicBounds_0(v) + case OpPanicExtend: + return rewriteValueAMD64_OpPanicExtend_0(v) case OpPopCount16: return rewriteValueAMD64_OpPopCount16_0(v) case OpPopCount32: @@ -1161,14 +1171,13 @@ func rewriteValueAMD64_OpAMD64ADCQ_0(v *Value) bool { // cond: is32Bit(c) // result: (ADCQconst x [c] carry) for { - _ = v.Args[2] + carry := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { break } c := v_1.AuxInt - carry := v.Args[2] if !(is32Bit(c)) { break } @@ -1182,14 +1191,13 @@ func rewriteValueAMD64_OpAMD64ADCQ_0(v *Value) bool { // cond: is32Bit(c) // result: (ADCQconst x [c] carry) for { - _ = v.Args[2] + carry := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVQconst { break } c := v_0.AuxInt x := v.Args[1] - carry := v.Args[2] if !(is32Bit(c)) { break } @@ -1257,13 +1265,12 @@ func rewriteValueAMD64_OpAMD64ADDL_0(v *Value) bool { // cond: // result: (ADDLconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpAMD64ADDLconst) v.AuxInt = c v.AddArg(x) @@ -1458,7 +1465,7 @@ func rewriteValueAMD64_OpAMD64ADDL_0(v *Value) bool { // cond: // result: (LEAL8 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SHLLconst { break @@ -1467,7 +1474,6 @@ func rewriteValueAMD64_OpAMD64ADDL_0(v *Value) bool { break } y := v_0.Args[0] - x := v.Args[1] v.reset(OpAMD64LEAL8) v.AddArg(x) v.AddArg(y) @@ -1499,7 +1505,7 @@ func rewriteValueAMD64_OpAMD64ADDL_10(v *Value) bool { // cond: // result: (LEAL4 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SHLLconst { break @@ -1508,7 +1514,6 @@ func rewriteValueAMD64_OpAMD64ADDL_10(v *Value) bool { break } y := v_0.Args[0] - x := v.Args[1] v.reset(OpAMD64LEAL4) v.AddArg(x) v.AddArg(y) @@ -1537,7 +1542,7 @@ func rewriteValueAMD64_OpAMD64ADDL_10(v *Value) bool { // cond: // result: (LEAL2 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SHLLconst { break @@ -1546,7 +1551,6 @@ func rewriteValueAMD64_OpAMD64ADDL_10(v *Value) bool { break } y := v_0.Args[0] - x := v.Args[1] v.reset(OpAMD64LEAL2) v.AddArg(x) v.AddArg(y) @@ -1562,9 +1566,8 @@ func rewriteValueAMD64_OpAMD64ADDL_10(v *Value) bool { if v_1.Op != OpAMD64ADDL { break } - _ = v_1.Args[1] - y := v_1.Args[0] - if y != v_1.Args[1] { + y := v_1.Args[1] + if y != v_1.Args[0] { break } v.reset(OpAMD64LEAL2) @@ -1576,17 +1579,15 @@ func rewriteValueAMD64_OpAMD64ADDL_10(v *Value) bool { // cond: // result: (LEAL2 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDL { break } - _ = v_0.Args[1] - y := v_0.Args[0] - if y != v_0.Args[1] { + y := v_0.Args[1] + if y != v_0.Args[0] { break } - x := v.Args[1] v.reset(OpAMD64LEAL2) v.AddArg(x) v.AddArg(y) @@ -1602,11 +1603,10 @@ func rewriteValueAMD64_OpAMD64ADDL_10(v *Value) bool { if v_1.Op != OpAMD64ADDL { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpAMD64LEAL2) v.AddArg(y) v.AddArg(x) @@ -1636,15 +1636,13 @@ func rewriteValueAMD64_OpAMD64ADDL_10(v *Value) bool { // cond: // result: (LEAL2 y x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpAMD64LEAL2) @@ -1656,15 +1654,14 @@ func rewriteValueAMD64_OpAMD64ADDL_10(v *Value) bool { // cond: // result: (LEAL2 y x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDL { break } _ = v_0.Args[1] y := v_0.Args[0] - x := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[1] { break } v.reset(OpAMD64LEAL2) @@ -1679,14 +1676,13 @@ func rewriteValueAMD64_OpAMD64ADDL_20(v *Value) bool { // cond: // result: (LEAL1 [c] x y) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDLconst { break } c := v_0.AuxInt x := v_0.Args[0] - y := v.Args[1] v.reset(OpAMD64LEAL1) v.AuxInt = c v.AddArg(x) @@ -1738,7 +1734,7 @@ func rewriteValueAMD64_OpAMD64ADDL_20(v *Value) bool { // cond: x.Op != OpSB && y.Op != OpSB // result: (LEAL1 [c] {s} x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAL { break @@ -1746,7 +1742,6 @@ func rewriteValueAMD64_OpAMD64ADDL_20(v *Value) bool { c := v_0.AuxInt s := v_0.Aux y := v_0.Args[0] - x := v.Args[1] if !(x.Op != OpSB && y.Op != OpSB) { break } @@ -1777,13 +1772,12 @@ func rewriteValueAMD64_OpAMD64ADDL_20(v *Value) bool { // cond: // result: (SUBL x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64NEGL { break } y := v_0.Args[0] - x := v.Args[1] v.reset(OpAMD64SUBL) v.AddArg(x) v.AddArg(y) @@ -1801,9 +1795,8 @@ func rewriteValueAMD64_OpAMD64ADDL_20(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -1819,17 +1812,15 @@ func rewriteValueAMD64_OpAMD64ADDL_20(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (ADDLload x [off] {sym} ptr mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != OpAMD64MOVLload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -1853,9 +1844,8 @@ func rewriteValueAMD64_OpAMD64ADDLconst_0(v *Value) bool { if v_0.Op != OpAMD64ADDL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpAMD64LEAL1) v.AuxInt = c v.AddArg(x) @@ -1913,9 +1903,8 @@ func rewriteValueAMD64_OpAMD64ADDLconst_0(v *Value) bool { } d := v_0.AuxInt s := v_0.Aux - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] if !(is32Bit(c + d)) { break } @@ -1937,9 +1926,8 @@ func rewriteValueAMD64_OpAMD64ADDLconst_0(v *Value) bool { } d := v_0.AuxInt s := v_0.Aux - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] if !(is32Bit(c + d)) { break } @@ -1961,9 +1949,8 @@ func rewriteValueAMD64_OpAMD64ADDLconst_0(v *Value) bool { } d := v_0.AuxInt s := v_0.Aux - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] if !(is32Bit(c + d)) { break } @@ -1985,9 +1972,8 @@ func rewriteValueAMD64_OpAMD64ADDLconst_0(v *Value) bool { } d := v_0.AuxInt s := v_0.Aux - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] if !(is32Bit(c + d)) { break } @@ -2068,14 +2054,13 @@ func rewriteValueAMD64_OpAMD64ADDLconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -2092,7 +2077,7 @@ func rewriteValueAMD64_OpAMD64ADDLconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -2100,7 +2085,6 @@ func rewriteValueAMD64_OpAMD64ADDLconstmodify_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2)) { break } @@ -2115,16 +2099,14 @@ func rewriteValueAMD64_OpAMD64ADDLconstmodify_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64ADDLload_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ADDLload [off1] {sym} val (ADDQconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (ADDLload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -2132,7 +2114,6 @@ func rewriteValueAMD64_OpAMD64ADDLload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -2150,7 +2131,7 @@ func rewriteValueAMD64_OpAMD64ADDLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64LEAQ { @@ -2159,7 +2140,6 @@ func rewriteValueAMD64_OpAMD64ADDLload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -2211,7 +2191,7 @@ func rewriteValueAMD64_OpAMD64ADDLmodify_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -2219,7 +2199,6 @@ func rewriteValueAMD64_OpAMD64ADDLmodify_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -2237,7 +2216,7 @@ func rewriteValueAMD64_OpAMD64ADDLmodify_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -2246,7 +2225,6 @@ func rewriteValueAMD64_OpAMD64ADDLmodify_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -2284,13 +2262,12 @@ func rewriteValueAMD64_OpAMD64ADDQ_0(v *Value) bool { // cond: is32Bit(c) // result: (ADDQconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVQconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c)) { break } @@ -2376,7 +2353,7 @@ func rewriteValueAMD64_OpAMD64ADDQ_0(v *Value) bool { // cond: // result: (LEAQ8 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SHLQconst { break @@ -2385,7 +2362,6 @@ func rewriteValueAMD64_OpAMD64ADDQ_0(v *Value) bool { break } y := v_0.Args[0] - x := v.Args[1] v.reset(OpAMD64LEAQ8) v.AddArg(x) v.AddArg(y) @@ -2414,7 +2390,7 @@ func rewriteValueAMD64_OpAMD64ADDQ_0(v *Value) bool { // cond: // result: (LEAQ4 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SHLQconst { break @@ -2423,7 +2399,6 @@ func rewriteValueAMD64_OpAMD64ADDQ_0(v *Value) bool { break } y := v_0.Args[0] - x := v.Args[1] v.reset(OpAMD64LEAQ4) v.AddArg(x) v.AddArg(y) @@ -2452,7 +2427,7 @@ func rewriteValueAMD64_OpAMD64ADDQ_0(v *Value) bool { // cond: // result: (LEAQ2 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SHLQconst { break @@ -2461,7 +2436,6 @@ func rewriteValueAMD64_OpAMD64ADDQ_0(v *Value) bool { break } y := v_0.Args[0] - x := v.Args[1] v.reset(OpAMD64LEAQ2) v.AddArg(x) v.AddArg(y) @@ -2480,9 +2454,8 @@ func rewriteValueAMD64_OpAMD64ADDQ_10(v *Value) bool { if v_1.Op != OpAMD64ADDQ { break } - _ = v_1.Args[1] - y := v_1.Args[0] - if y != v_1.Args[1] { + y := v_1.Args[1] + if y != v_1.Args[0] { break } v.reset(OpAMD64LEAQ2) @@ -2494,17 +2467,15 @@ func rewriteValueAMD64_OpAMD64ADDQ_10(v *Value) bool { // cond: // result: (LEAQ2 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQ { break } - _ = v_0.Args[1] - y := v_0.Args[0] - if y != v_0.Args[1] { + y := v_0.Args[1] + if y != v_0.Args[0] { break } - x := v.Args[1] v.reset(OpAMD64LEAQ2) v.AddArg(x) v.AddArg(y) @@ -2520,11 +2491,10 @@ func rewriteValueAMD64_OpAMD64ADDQ_10(v *Value) bool { if v_1.Op != OpAMD64ADDQ { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpAMD64LEAQ2) v.AddArg(y) v.AddArg(x) @@ -2554,15 +2524,13 @@ func rewriteValueAMD64_OpAMD64ADDQ_10(v *Value) bool { // cond: // result: (LEAQ2 y x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQ { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpAMD64LEAQ2) @@ -2574,15 +2542,14 @@ func rewriteValueAMD64_OpAMD64ADDQ_10(v *Value) bool { // cond: // result: (LEAQ2 y x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQ { break } _ = v_0.Args[1] y := v_0.Args[0] - x := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[1] { break } v.reset(OpAMD64LEAQ2) @@ -2594,14 +2561,13 @@ func rewriteValueAMD64_OpAMD64ADDQ_10(v *Value) bool { // cond: // result: (LEAQ1 [c] x y) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } c := v_0.AuxInt x := v_0.Args[0] - y := v.Args[1] v.reset(OpAMD64LEAQ1) v.AuxInt = c v.AddArg(x) @@ -2653,7 +2619,7 @@ func rewriteValueAMD64_OpAMD64ADDQ_10(v *Value) bool { // cond: x.Op != OpSB && y.Op != OpSB // result: (LEAQ1 [c] {s} x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -2661,7 +2627,6 @@ func rewriteValueAMD64_OpAMD64ADDQ_10(v *Value) bool { c := v_0.AuxInt s := v_0.Aux y := v_0.Args[0] - x := v.Args[1] if !(x.Op != OpSB && y.Op != OpSB) { break } @@ -2695,13 +2660,12 @@ func rewriteValueAMD64_OpAMD64ADDQ_20(v *Value) bool { // cond: // result: (SUBQ x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64NEGQ { break } y := v_0.Args[0] - x := v.Args[1] v.reset(OpAMD64SUBQ) v.AddArg(x) v.AddArg(y) @@ -2719,9 +2683,8 @@ func rewriteValueAMD64_OpAMD64ADDQ_20(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -2737,17 +2700,15 @@ func rewriteValueAMD64_OpAMD64ADDQ_20(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (ADDQload x [off] {sym} ptr mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != OpAMD64MOVQload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -2785,13 +2746,12 @@ func rewriteValueAMD64_OpAMD64ADDQcarry_0(v *Value) bool { // cond: is32Bit(c) // result: (ADDQconstcarry x [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVQconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c)) { break } @@ -2812,9 +2772,8 @@ func rewriteValueAMD64_OpAMD64ADDQconst_0(v *Value) bool { if v_0.Op != OpAMD64ADDQ { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpAMD64LEAQ1) v.AuxInt = c v.AddArg(x) @@ -2872,9 +2831,8 @@ func rewriteValueAMD64_OpAMD64ADDQconst_0(v *Value) bool { } d := v_0.AuxInt s := v_0.Aux - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] if !(is32Bit(c + d)) { break } @@ -2896,9 +2854,8 @@ func rewriteValueAMD64_OpAMD64ADDQconst_0(v *Value) bool { } d := v_0.AuxInt s := v_0.Aux - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] if !(is32Bit(c + d)) { break } @@ -2920,9 +2877,8 @@ func rewriteValueAMD64_OpAMD64ADDQconst_0(v *Value) bool { } d := v_0.AuxInt s := v_0.Aux - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] if !(is32Bit(c + d)) { break } @@ -2944,9 +2900,8 @@ func rewriteValueAMD64_OpAMD64ADDQconst_0(v *Value) bool { } d := v_0.AuxInt s := v_0.Aux - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] if !(is32Bit(c + d)) { break } @@ -3029,14 +2984,13 @@ func rewriteValueAMD64_OpAMD64ADDQconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -3053,7 +3007,7 @@ func rewriteValueAMD64_OpAMD64ADDQconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -3061,7 +3015,6 @@ func rewriteValueAMD64_OpAMD64ADDQconstmodify_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2)) { break } @@ -3076,16 +3029,14 @@ func rewriteValueAMD64_OpAMD64ADDQconstmodify_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64ADDQload_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ADDQload [off1] {sym} val (ADDQconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (ADDQload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -3093,7 +3044,6 @@ func rewriteValueAMD64_OpAMD64ADDQload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -3111,7 +3061,7 @@ func rewriteValueAMD64_OpAMD64ADDQload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64LEAQ { @@ -3120,7 +3070,6 @@ func rewriteValueAMD64_OpAMD64ADDQload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -3172,7 +3121,7 @@ func rewriteValueAMD64_OpAMD64ADDQmodify_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -3180,7 +3129,6 @@ func rewriteValueAMD64_OpAMD64ADDQmodify_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -3198,7 +3146,7 @@ func rewriteValueAMD64_OpAMD64ADDQmodify_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -3207,7 +3155,6 @@ func rewriteValueAMD64_OpAMD64ADDQmodify_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -3234,9 +3181,8 @@ func rewriteValueAMD64_OpAMD64ADDSD_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -3252,17 +3198,15 @@ func rewriteValueAMD64_OpAMD64ADDSD_0(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (ADDSDload x [off] {sym} ptr mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != OpAMD64MOVSDload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -3278,16 +3222,14 @@ func rewriteValueAMD64_OpAMD64ADDSD_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64ADDSDload_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ADDSDload [off1] {sym} val (ADDQconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (ADDSDload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -3295,7 +3237,6 @@ func rewriteValueAMD64_OpAMD64ADDSDload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -3313,7 +3254,7 @@ func rewriteValueAMD64_OpAMD64ADDSDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64LEAQ { @@ -3322,7 +3263,6 @@ func rewriteValueAMD64_OpAMD64ADDSDload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -3380,9 +3320,8 @@ func rewriteValueAMD64_OpAMD64ADDSS_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -3398,17 +3337,15 @@ func rewriteValueAMD64_OpAMD64ADDSS_0(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (ADDSSload x [off] {sym} ptr mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != OpAMD64MOVSSload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -3424,16 +3361,14 @@ func rewriteValueAMD64_OpAMD64ADDSS_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64ADDSSload_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ADDSSload [off1] {sym} val (ADDQconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (ADDSSload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -3441,7 +3376,6 @@ func rewriteValueAMD64_OpAMD64ADDSSload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -3459,7 +3393,7 @@ func rewriteValueAMD64_OpAMD64ADDSSload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64LEAQ { @@ -3468,7 +3402,6 @@ func rewriteValueAMD64_OpAMD64ADDSSload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -3515,14 +3448,12 @@ func rewriteValueAMD64_OpAMD64ADDSSload_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64ANDL_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ANDL (NOTL (SHLL (MOVLconst [1]) y)) x) // cond: !config.nacl // result: (BTRL x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64NOTL { break @@ -3531,7 +3462,7 @@ func rewriteValueAMD64_OpAMD64ANDL_0(v *Value) bool { if v_0_0.Op != OpAMD64SHLL { break } - _ = v_0_0.Args[1] + y := v_0_0.Args[1] v_0_0_0 := v_0_0.Args[0] if v_0_0_0.Op != OpAMD64MOVLconst { break @@ -3539,8 +3470,6 @@ func rewriteValueAMD64_OpAMD64ANDL_0(v *Value) bool { if v_0_0_0.AuxInt != 1 { break } - y := v_0_0.Args[1] - x := v.Args[1] if !(!config.nacl) { break } @@ -3563,7 +3492,7 @@ func rewriteValueAMD64_OpAMD64ANDL_0(v *Value) bool { if v_1_0.Op != OpAMD64SHLL { break } - _ = v_1_0.Args[1] + y := v_1_0.Args[1] v_1_0_0 := v_1_0.Args[0] if v_1_0_0.Op != OpAMD64MOVLconst { break @@ -3571,7 +3500,6 @@ func rewriteValueAMD64_OpAMD64ANDL_0(v *Value) bool { if v_1_0_0.AuxInt != 1 { break } - y := v_1_0.Args[1] if !(!config.nacl) { break } @@ -3584,13 +3512,12 @@ func rewriteValueAMD64_OpAMD64ANDL_0(v *Value) bool { // cond: isUint32PowerOfTwo(^c) && uint64(^c) >= 128 && !config.nacl // result: (BTRLconst [log2uint32(^c)] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isUint32PowerOfTwo(^c) && uint64(^c) >= 128 && !config.nacl) { break } @@ -3638,13 +3565,12 @@ func rewriteValueAMD64_OpAMD64ANDL_0(v *Value) bool { // cond: // result: (ANDLconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpAMD64ANDLconst) v.AuxInt = c v.AddArg(x) @@ -3654,9 +3580,8 @@ func rewriteValueAMD64_OpAMD64ANDL_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -3676,9 +3601,8 @@ func rewriteValueAMD64_OpAMD64ANDL_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -3694,17 +3618,15 @@ func rewriteValueAMD64_OpAMD64ANDL_0(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (ANDLload x [off] {sym} ptr mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != OpAMD64MOVLload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -3720,9 +3642,7 @@ func rewriteValueAMD64_OpAMD64ANDL_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64ANDLconst_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ANDLconst [c] x) // cond: isUint32PowerOfTwo(^c) && uint64(^c) >= 128 && !config.nacl // result: (BTRLconst [log2uint32(^c)] x) @@ -3842,14 +3762,13 @@ func rewriteValueAMD64_OpAMD64ANDLconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -3866,7 +3785,7 @@ func rewriteValueAMD64_OpAMD64ANDLconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -3874,7 +3793,6 @@ func rewriteValueAMD64_OpAMD64ANDLconstmodify_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2)) { break } @@ -3889,16 +3807,14 @@ func rewriteValueAMD64_OpAMD64ANDLconstmodify_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64ANDLload_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ANDLload [off1] {sym} val (ADDQconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (ANDLload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -3906,7 +3822,6 @@ func rewriteValueAMD64_OpAMD64ANDLload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -3924,7 +3839,7 @@ func rewriteValueAMD64_OpAMD64ANDLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64LEAQ { @@ -3933,7 +3848,6 @@ func rewriteValueAMD64_OpAMD64ANDLload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -3985,7 +3899,7 @@ func rewriteValueAMD64_OpAMD64ANDLmodify_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -3993,7 +3907,6 @@ func rewriteValueAMD64_OpAMD64ANDLmodify_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -4011,7 +3924,7 @@ func rewriteValueAMD64_OpAMD64ANDLmodify_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -4020,7 +3933,6 @@ func rewriteValueAMD64_OpAMD64ANDLmodify_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -4036,14 +3948,12 @@ func rewriteValueAMD64_OpAMD64ANDLmodify_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64ANDQ_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ANDQ (NOTQ (SHLQ (MOVQconst [1]) y)) x) // cond: !config.nacl // result: (BTRQ x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64NOTQ { break @@ -4052,7 +3962,7 @@ func rewriteValueAMD64_OpAMD64ANDQ_0(v *Value) bool { if v_0_0.Op != OpAMD64SHLQ { break } - _ = v_0_0.Args[1] + y := v_0_0.Args[1] v_0_0_0 := v_0_0.Args[0] if v_0_0_0.Op != OpAMD64MOVQconst { break @@ -4060,8 +3970,6 @@ func rewriteValueAMD64_OpAMD64ANDQ_0(v *Value) bool { if v_0_0_0.AuxInt != 1 { break } - y := v_0_0.Args[1] - x := v.Args[1] if !(!config.nacl) { break } @@ -4084,7 +3992,7 @@ func rewriteValueAMD64_OpAMD64ANDQ_0(v *Value) bool { if v_1_0.Op != OpAMD64SHLQ { break } - _ = v_1_0.Args[1] + y := v_1_0.Args[1] v_1_0_0 := v_1_0.Args[0] if v_1_0_0.Op != OpAMD64MOVQconst { break @@ -4092,7 +4000,6 @@ func rewriteValueAMD64_OpAMD64ANDQ_0(v *Value) bool { if v_1_0_0.AuxInt != 1 { break } - y := v_1_0.Args[1] if !(!config.nacl) { break } @@ -4105,13 +4012,12 @@ func rewriteValueAMD64_OpAMD64ANDQ_0(v *Value) bool { // cond: isUint64PowerOfTwo(^c) && uint64(^c) >= 128 && !config.nacl // result: (BTRQconst [log2(^c)] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVQconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isUint64PowerOfTwo(^c) && uint64(^c) >= 128 && !config.nacl) { break } @@ -4162,13 +4068,12 @@ func rewriteValueAMD64_OpAMD64ANDQ_0(v *Value) bool { // cond: is32Bit(c) // result: (ANDQconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVQconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c)) { break } @@ -4181,9 +4086,8 @@ func rewriteValueAMD64_OpAMD64ANDQ_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -4203,9 +4107,8 @@ func rewriteValueAMD64_OpAMD64ANDQ_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -4221,17 +4124,15 @@ func rewriteValueAMD64_OpAMD64ANDQ_0(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (ANDQload x [off] {sym} ptr mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != OpAMD64MOVQload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -4247,9 +4148,7 @@ func rewriteValueAMD64_OpAMD64ANDQ_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64ANDQconst_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ANDQconst [c] x) // cond: isUint64PowerOfTwo(^c) && uint64(^c) >= 128 && !config.nacl // result: (BTRQconst [log2(^c)] x) @@ -4379,14 +4278,13 @@ func rewriteValueAMD64_OpAMD64ANDQconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -4403,7 +4301,7 @@ func rewriteValueAMD64_OpAMD64ANDQconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -4411,7 +4309,6 @@ func rewriteValueAMD64_OpAMD64ANDQconstmodify_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2)) { break } @@ -4426,16 +4323,14 @@ func rewriteValueAMD64_OpAMD64ANDQconstmodify_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64ANDQload_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ANDQload [off1] {sym} val (ADDQconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (ANDQload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -4443,7 +4338,6 @@ func rewriteValueAMD64_OpAMD64ANDQload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -4461,7 +4355,7 @@ func rewriteValueAMD64_OpAMD64ANDQload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64LEAQ { @@ -4470,7 +4364,6 @@ func rewriteValueAMD64_OpAMD64ANDQload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -4522,7 +4415,7 @@ func rewriteValueAMD64_OpAMD64ANDQmodify_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -4530,7 +4423,6 @@ func rewriteValueAMD64_OpAMD64ANDQmodify_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -4548,7 +4440,7 @@ func rewriteValueAMD64_OpAMD64ANDQmodify_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -4557,7 +4449,6 @@ func rewriteValueAMD64_OpAMD64ANDQmodify_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -4573,7 +4464,6 @@ func rewriteValueAMD64_OpAMD64ANDQmodify_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64BSFQ_0(v *Value) bool { b := v.Block - _ = b // match: (BSFQ (ORQconst [1<<8] (MOVBQZX x))) // cond: // result: (BSFQ (ORQconst [1<<8] x)) @@ -4680,14 +4570,13 @@ func rewriteValueAMD64_OpAMD64BTCLconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -4704,7 +4593,7 @@ func rewriteValueAMD64_OpAMD64BTCLconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -4712,7 +4601,6 @@ func rewriteValueAMD64_OpAMD64BTCLconstmodify_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2)) { break } @@ -4732,7 +4620,7 @@ func rewriteValueAMD64_OpAMD64BTCLmodify_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -4740,7 +4628,6 @@ func rewriteValueAMD64_OpAMD64BTCLmodify_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -4758,7 +4645,7 @@ func rewriteValueAMD64_OpAMD64BTCLmodify_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -4767,7 +4654,6 @@ func rewriteValueAMD64_OpAMD64BTCLmodify_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -4837,14 +4723,13 @@ func rewriteValueAMD64_OpAMD64BTCQconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -4861,7 +4746,7 @@ func rewriteValueAMD64_OpAMD64BTCQconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -4869,7 +4754,6 @@ func rewriteValueAMD64_OpAMD64BTCQconstmodify_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2)) { break } @@ -4889,7 +4773,7 @@ func rewriteValueAMD64_OpAMD64BTCQmodify_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -4897,7 +4781,6 @@ func rewriteValueAMD64_OpAMD64BTCQmodify_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -4915,7 +4798,7 @@ func rewriteValueAMD64_OpAMD64BTCQmodify_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -4924,7 +4807,6 @@ func rewriteValueAMD64_OpAMD64BTCQmodify_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -4988,9 +4870,8 @@ func rewriteValueAMD64_OpAMD64BTLconst_0(v *Value) bool { if s.Op != OpAMD64SHRQ { break } - _ = s.Args[1] - x := s.Args[0] y := s.Args[1] + x := s.Args[0] v.reset(OpAMD64BTQ) v.AddArg(y) v.AddArg(x) @@ -5045,9 +4926,8 @@ func rewriteValueAMD64_OpAMD64BTLconst_0(v *Value) bool { if s.Op != OpAMD64SHRL { break } - _ = s.Args[1] - x := s.Args[0] y := s.Args[1] + x := s.Args[0] v.reset(OpAMD64BTL) v.AddArg(y) v.AddArg(x) @@ -5105,9 +4985,8 @@ func rewriteValueAMD64_OpAMD64BTQconst_0(v *Value) bool { if s.Op != OpAMD64SHRQ { break } - _ = s.Args[1] - x := s.Args[0] y := s.Args[1] + x := s.Args[0] v.reset(OpAMD64BTQ) v.AddArg(y) v.AddArg(x) @@ -5207,14 +5086,13 @@ func rewriteValueAMD64_OpAMD64BTRLconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -5231,7 +5109,7 @@ func rewriteValueAMD64_OpAMD64BTRLconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -5239,7 +5117,6 @@ func rewriteValueAMD64_OpAMD64BTRLconstmodify_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2)) { break } @@ -5259,7 +5136,7 @@ func rewriteValueAMD64_OpAMD64BTRLmodify_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -5267,7 +5144,6 @@ func rewriteValueAMD64_OpAMD64BTRLmodify_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -5285,7 +5161,7 @@ func rewriteValueAMD64_OpAMD64BTRLmodify_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -5294,7 +5170,6 @@ func rewriteValueAMD64_OpAMD64BTRLmodify_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -5400,14 +5275,13 @@ func rewriteValueAMD64_OpAMD64BTRQconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -5424,7 +5298,7 @@ func rewriteValueAMD64_OpAMD64BTRQconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -5432,7 +5306,6 @@ func rewriteValueAMD64_OpAMD64BTRQconstmodify_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2)) { break } @@ -5452,7 +5325,7 @@ func rewriteValueAMD64_OpAMD64BTRQmodify_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -5460,7 +5333,6 @@ func rewriteValueAMD64_OpAMD64BTRQmodify_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -5478,7 +5350,7 @@ func rewriteValueAMD64_OpAMD64BTRQmodify_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -5487,7 +5359,6 @@ func rewriteValueAMD64_OpAMD64BTRQmodify_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -5593,14 +5464,13 @@ func rewriteValueAMD64_OpAMD64BTSLconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -5617,7 +5487,7 @@ func rewriteValueAMD64_OpAMD64BTSLconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -5625,7 +5495,6 @@ func rewriteValueAMD64_OpAMD64BTSLconstmodify_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2)) { break } @@ -5645,7 +5514,7 @@ func rewriteValueAMD64_OpAMD64BTSLmodify_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -5653,7 +5522,6 @@ func rewriteValueAMD64_OpAMD64BTSLmodify_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -5671,7 +5539,7 @@ func rewriteValueAMD64_OpAMD64BTSLmodify_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -5680,7 +5548,6 @@ func rewriteValueAMD64_OpAMD64BTSLmodify_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -5786,14 +5653,13 @@ func rewriteValueAMD64_OpAMD64BTSQconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -5810,7 +5676,7 @@ func rewriteValueAMD64_OpAMD64BTSQconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -5818,7 +5684,6 @@ func rewriteValueAMD64_OpAMD64BTSQconstmodify_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2)) { break } @@ -5838,7 +5703,7 @@ func rewriteValueAMD64_OpAMD64BTSQmodify_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -5846,7 +5711,6 @@ func rewriteValueAMD64_OpAMD64BTSQmodify_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -5864,7 +5728,7 @@ func rewriteValueAMD64_OpAMD64BTSQmodify_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -5873,7 +5737,6 @@ func rewriteValueAMD64_OpAMD64BTSQmodify_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -8796,7 +8659,6 @@ func rewriteValueAMD64_OpAMD64CMOVWNE_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64CMPB_0(v *Value) bool { b := v.Block - _ = b // match: (CMPB x (MOVLconst [c])) // cond: // result: (CMPBconst x [int64(int8(c))]) @@ -8817,13 +8679,12 @@ func rewriteValueAMD64_OpAMD64CMPB_0(v *Value) bool { // cond: // result: (InvertFlags (CMPBconst x [int64(int8(c))])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpAMD64InvertFlags) v0 := b.NewValue0(v.Pos, OpAMD64CMPBconst, types.TypeFlags) v0.AuxInt = int64(int8(c)) @@ -8835,17 +8696,15 @@ func rewriteValueAMD64_OpAMD64CMPB_0(v *Value) bool { // cond: canMergeLoad(v, l) && clobber(l) // result: (CMPBload {sym} [off] ptr x mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != OpAMD64MOVBload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoad(v, l) && clobber(l)) { break } @@ -8869,9 +8728,8 @@ func rewriteValueAMD64_OpAMD64CMPB_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoad(v, l) && clobber(l)) { break } @@ -8889,7 +8747,6 @@ func rewriteValueAMD64_OpAMD64CMPB_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64CMPBconst_0(v *Value) bool { b := v.Block - _ = b // match: (CMPBconst (MOVLconst [x]) [y]) // cond: int8(x)==int8(y) // result: (FlagEQ) @@ -8997,9 +8854,8 @@ func rewriteValueAMD64_OpAMD64CMPBconst_0(v *Value) bool { if v_0.Op != OpAMD64ANDL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpAMD64TESTB) v.AddArg(x) v.AddArg(y) @@ -9047,9 +8903,8 @@ func rewriteValueAMD64_OpAMD64CMPBconst_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(l.Uses == 1 && validValAndOff(c, off) && clobber(l)) { break } @@ -9072,14 +8927,13 @@ func rewriteValueAMD64_OpAMD64CMPBconstload_0(v *Value) bool { for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -9096,7 +8950,7 @@ func rewriteValueAMD64_OpAMD64CMPBconstload_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -9104,7 +8958,6 @@ func rewriteValueAMD64_OpAMD64CMPBconstload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2)) { break } @@ -9124,7 +8977,7 @@ func rewriteValueAMD64_OpAMD64CMPBload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -9132,7 +8985,6 @@ func rewriteValueAMD64_OpAMD64CMPBload_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -9150,7 +9002,7 @@ func rewriteValueAMD64_OpAMD64CMPBload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -9159,7 +9011,6 @@ func rewriteValueAMD64_OpAMD64CMPBload_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -9177,14 +9028,13 @@ func rewriteValueAMD64_OpAMD64CMPBload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVLconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(validValAndOff(int64(int8(c)), off)) { break } @@ -9199,7 +9049,6 @@ func rewriteValueAMD64_OpAMD64CMPBload_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64CMPL_0(v *Value) bool { b := v.Block - _ = b // match: (CMPL x (MOVLconst [c])) // cond: // result: (CMPLconst x [c]) @@ -9220,13 +9069,12 @@ func rewriteValueAMD64_OpAMD64CMPL_0(v *Value) bool { // cond: // result: (InvertFlags (CMPLconst x [c])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpAMD64InvertFlags) v0 := b.NewValue0(v.Pos, OpAMD64CMPLconst, types.TypeFlags) v0.AuxInt = c @@ -9238,17 +9086,15 @@ func rewriteValueAMD64_OpAMD64CMPL_0(v *Value) bool { // cond: canMergeLoad(v, l) && clobber(l) // result: (CMPLload {sym} [off] ptr x mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != OpAMD64MOVLload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoad(v, l) && clobber(l)) { break } @@ -9272,9 +9118,8 @@ func rewriteValueAMD64_OpAMD64CMPL_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoad(v, l) && clobber(l)) { break } @@ -9414,9 +9259,8 @@ func rewriteValueAMD64_OpAMD64CMPLconst_0(v *Value) bool { if v_0.Op != OpAMD64ANDL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpAMD64TESTL) v.AddArg(x) v.AddArg(y) @@ -9457,7 +9301,6 @@ func rewriteValueAMD64_OpAMD64CMPLconst_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64CMPLconst_10(v *Value) bool { b := v.Block - _ = b // match: (CMPLconst l:(MOVLload {sym} [off] ptr mem) [c]) // cond: l.Uses == 1 && validValAndOff(c, off) && clobber(l) // result: @l.Block (CMPLconstload {sym} [makeValAndOff(c,off)] ptr mem) @@ -9469,9 +9312,8 @@ func rewriteValueAMD64_OpAMD64CMPLconst_10(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(l.Uses == 1 && validValAndOff(c, off) && clobber(l)) { break } @@ -9494,14 +9336,13 @@ func rewriteValueAMD64_OpAMD64CMPLconstload_0(v *Value) bool { for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -9518,7 +9359,7 @@ func rewriteValueAMD64_OpAMD64CMPLconstload_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -9526,7 +9367,6 @@ func rewriteValueAMD64_OpAMD64CMPLconstload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2)) { break } @@ -9546,7 +9386,7 @@ func rewriteValueAMD64_OpAMD64CMPLload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -9554,7 +9394,6 @@ func rewriteValueAMD64_OpAMD64CMPLload_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -9572,7 +9411,7 @@ func rewriteValueAMD64_OpAMD64CMPLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -9581,7 +9420,6 @@ func rewriteValueAMD64_OpAMD64CMPLload_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -9599,14 +9437,13 @@ func rewriteValueAMD64_OpAMD64CMPLload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVLconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(validValAndOff(c, off)) { break } @@ -9621,7 +9458,6 @@ func rewriteValueAMD64_OpAMD64CMPLload_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64CMPQ_0(v *Value) bool { b := v.Block - _ = b // match: (CMPQ x (MOVQconst [c])) // cond: is32Bit(c) // result: (CMPQconst x [c]) @@ -9645,13 +9481,12 @@ func rewriteValueAMD64_OpAMD64CMPQ_0(v *Value) bool { // cond: is32Bit(c) // result: (InvertFlags (CMPQconst x [c])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVQconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c)) { break } @@ -9666,17 +9501,15 @@ func rewriteValueAMD64_OpAMD64CMPQ_0(v *Value) bool { // cond: canMergeLoad(v, l) && clobber(l) // result: (CMPQload {sym} [off] ptr x mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != OpAMD64MOVQload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoad(v, l) && clobber(l)) { break } @@ -9700,9 +9533,8 @@ func rewriteValueAMD64_OpAMD64CMPQ_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoad(v, l) && clobber(l)) { break } @@ -9904,7 +9736,6 @@ func rewriteValueAMD64_OpAMD64CMPQconst_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64CMPQconst_10(v *Value) bool { b := v.Block - _ = b // match: (CMPQconst (SHRQconst _ [c]) [n]) // cond: 0 <= n && 0 < c && c <= 64 && (1< [off] {sym} ptr mem) @@ -12047,9 +11821,8 @@ func rewriteValueAMD64_OpAMD64MOVBQSX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -12073,9 +11846,8 @@ func rewriteValueAMD64_OpAMD64MOVBQSX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -12099,9 +11871,8 @@ func rewriteValueAMD64_OpAMD64MOVBQSX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -12125,9 +11896,8 @@ func rewriteValueAMD64_OpAMD64MOVBQSX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -12205,7 +11975,7 @@ func rewriteValueAMD64_OpAMD64MOVBQSXload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -12213,7 +11983,6 @@ func rewriteValueAMD64_OpAMD64MOVBQSXload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -12228,7 +11997,6 @@ func rewriteValueAMD64_OpAMD64MOVBQSXload_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVBQZX_0(v *Value) bool { b := v.Block - _ = b // match: (MOVBQZX x:(MOVBload [off] {sym} ptr mem)) // cond: x.Uses == 1 && clobber(x) // result: @x.Block (MOVBload [off] {sym} ptr mem) @@ -12239,9 +12007,8 @@ func rewriteValueAMD64_OpAMD64MOVBQZX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -12265,9 +12032,8 @@ func rewriteValueAMD64_OpAMD64MOVBQZX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -12291,9 +12057,8 @@ func rewriteValueAMD64_OpAMD64MOVBQZX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -12317,9 +12082,8 @@ func rewriteValueAMD64_OpAMD64MOVBQZX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -12356,10 +12120,9 @@ func rewriteValueAMD64_OpAMD64MOVBQZX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -12404,6 +12167,56 @@ func rewriteValueAMD64_OpAMD64MOVBQZX_0(v *Value) bool { } return false } +func rewriteValueAMD64_OpAMD64MOVBatomicload_0(v *Value) bool { + // match: (MOVBatomicload [off1] {sym} (ADDQconst [off2] ptr) mem) + // cond: is32Bit(off1+off2) + // result: (MOVBatomicload [off1+off2] {sym} ptr mem) + for { + off1 := v.AuxInt + sym := v.Aux + mem := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpAMD64ADDQconst { + break + } + off2 := v_0.AuxInt + ptr := v_0.Args[0] + if !(is32Bit(off1 + off2)) { + break + } + v.reset(OpAMD64MOVBatomicload) + v.AuxInt = off1 + off2 + v.Aux = sym + v.AddArg(ptr) + v.AddArg(mem) + return true + } + // match: (MOVBatomicload [off1] {sym1} (LEAQ [off2] {sym2} ptr) mem) + // cond: is32Bit(off1+off2) && canMergeSym(sym1, sym2) + // result: (MOVBatomicload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) + for { + off1 := v.AuxInt + sym1 := v.Aux + mem := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpAMD64LEAQ { + break + } + off2 := v_0.AuxInt + sym2 := v_0.Aux + ptr := v_0.Args[0] + if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { + break + } + v.reset(OpAMD64MOVBatomicload) + v.AuxInt = off1 + off2 + v.Aux = mergeSym(sym1, sym2) + v.AddArg(ptr) + v.AddArg(mem) + return true + } + return false +} func rewriteValueAMD64_OpAMD64MOVBload_0(v *Value) bool { // match: (MOVBload [off] {sym} ptr (MOVBstore [off2] {sym2} ptr2 x _)) // cond: sym == sym2 && off == off2 && isSamePtr(ptr, ptr2) @@ -12435,14 +12248,13 @@ func rewriteValueAMD64_OpAMD64MOVBload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -12459,7 +12271,7 @@ func rewriteValueAMD64_OpAMD64MOVBload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -12467,7 +12279,6 @@ func rewriteValueAMD64_OpAMD64MOVBload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -12484,17 +12295,15 @@ func rewriteValueAMD64_OpAMD64MOVBload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -12512,15 +12321,13 @@ func rewriteValueAMD64_OpAMD64MOVBload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQ { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(ptr.Op != OpSB) { break } @@ -12538,7 +12345,7 @@ func rewriteValueAMD64_OpAMD64MOVBload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAL { break @@ -12546,7 +12353,6 @@ func rewriteValueAMD64_OpAMD64MOVBload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -12563,14 +12369,13 @@ func rewriteValueAMD64_OpAMD64MOVBload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDLconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -12608,7 +12413,7 @@ func rewriteValueAMD64_OpAMD64MOVBloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -12616,7 +12421,6 @@ func rewriteValueAMD64_OpAMD64MOVBloadidx1_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -12634,7 +12438,7 @@ func rewriteValueAMD64_OpAMD64MOVBloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] idx := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -12642,7 +12446,6 @@ func rewriteValueAMD64_OpAMD64MOVBloadidx1_0(v *Value) bool { } d := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -12660,7 +12463,7 @@ func rewriteValueAMD64_OpAMD64MOVBloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -12668,7 +12471,6 @@ func rewriteValueAMD64_OpAMD64MOVBloadidx1_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -12686,7 +12488,7 @@ func rewriteValueAMD64_OpAMD64MOVBloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -12694,7 +12496,6 @@ func rewriteValueAMD64_OpAMD64MOVBloadidx1_0(v *Value) bool { d := v_0.AuxInt idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -12712,14 +12513,13 @@ func rewriteValueAMD64_OpAMD64MOVBloadidx1_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is32Bit(i + c)) { break } @@ -12736,14 +12536,13 @@ func rewriteValueAMD64_OpAMD64MOVBloadidx1_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVQconst { break } c := v_0.AuxInt p := v.Args[1] - mem := v.Args[2] if !(is32Bit(i + c)) { break } @@ -12763,14 +12562,13 @@ func rewriteValueAMD64_OpAMD64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64SETL { break } x := y.Args[0] - mem := v.Args[2] if !(y.Uses == 1) { break } @@ -12788,14 +12586,13 @@ func rewriteValueAMD64_OpAMD64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64SETLE { break } x := y.Args[0] - mem := v.Args[2] if !(y.Uses == 1) { break } @@ -12813,14 +12610,13 @@ func rewriteValueAMD64_OpAMD64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64SETG { break } x := y.Args[0] - mem := v.Args[2] if !(y.Uses == 1) { break } @@ -12838,14 +12634,13 @@ func rewriteValueAMD64_OpAMD64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64SETGE { break } x := y.Args[0] - mem := v.Args[2] if !(y.Uses == 1) { break } @@ -12863,14 +12658,13 @@ func rewriteValueAMD64_OpAMD64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64SETEQ { break } x := y.Args[0] - mem := v.Args[2] if !(y.Uses == 1) { break } @@ -12888,14 +12682,13 @@ func rewriteValueAMD64_OpAMD64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64SETNE { break } x := y.Args[0] - mem := v.Args[2] if !(y.Uses == 1) { break } @@ -12913,14 +12706,13 @@ func rewriteValueAMD64_OpAMD64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64SETB { break } x := y.Args[0] - mem := v.Args[2] if !(y.Uses == 1) { break } @@ -12938,14 +12730,13 @@ func rewriteValueAMD64_OpAMD64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64SETBE { break } x := y.Args[0] - mem := v.Args[2] if !(y.Uses == 1) { break } @@ -12963,14 +12754,13 @@ func rewriteValueAMD64_OpAMD64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64SETA { break } x := y.Args[0] - mem := v.Args[2] if !(y.Uses == 1) { break } @@ -12988,14 +12778,13 @@ func rewriteValueAMD64_OpAMD64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64SETAE { break } x := y.Args[0] - mem := v.Args[2] if !(y.Uses == 1) { break } @@ -13011,21 +12800,19 @@ func rewriteValueAMD64_OpAMD64MOVBstore_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVBstore_10(v *Value) bool { b := v.Block - _ = b // match: (MOVBstore [off] {sym} ptr (MOVBQSX x) mem) // cond: // result: (MOVBstore [off] {sym} ptr x mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVBQSX { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym @@ -13040,14 +12827,13 @@ func rewriteValueAMD64_OpAMD64MOVBstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVBQZX { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym @@ -13062,7 +12848,7 @@ func rewriteValueAMD64_OpAMD64MOVBstore_10(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -13070,7 +12856,6 @@ func rewriteValueAMD64_OpAMD64MOVBstore_10(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -13088,14 +12873,13 @@ func rewriteValueAMD64_OpAMD64MOVBstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVLconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(validOff(off)) { break } @@ -13112,14 +12896,13 @@ func rewriteValueAMD64_OpAMD64MOVBstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(validOff(off)) { break } @@ -13136,7 +12919,7 @@ func rewriteValueAMD64_OpAMD64MOVBstore_10(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -13145,7 +12928,6 @@ func rewriteValueAMD64_OpAMD64MOVBstore_10(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -13163,18 +12945,16 @@ func rewriteValueAMD64_OpAMD64MOVBstore_10(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -13193,16 +12973,14 @@ func rewriteValueAMD64_OpAMD64MOVBstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQ { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(ptr.Op != OpSB) { break } @@ -13234,7 +13012,7 @@ func rewriteValueAMD64_OpAMD64MOVBstore_10(v *Value) bool { if x0.Aux != s { break } - _ = x0.Args[2] + mem := x0.Args[2] if p != x0.Args[0] { break } @@ -13248,7 +13026,6 @@ func rewriteValueAMD64_OpAMD64MOVBstore_10(v *Value) bool { if w != x0_1.Args[0] { break } - mem := x0.Args[2] if !(x0.Uses == 1 && clobber(x0)) { break } @@ -13330,7 +13107,7 @@ func rewriteValueAMD64_OpAMD64MOVBstore_10(v *Value) bool { if x0.Aux != s { break } - _ = x0.Args[2] + mem := x0.Args[2] if p != x0.Args[0] { break } @@ -13344,7 +13121,6 @@ func rewriteValueAMD64_OpAMD64MOVBstore_10(v *Value) bool { if w != x0_1.Args[0] { break } - mem := x0.Args[2] if !(x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && clobber(x0) && clobber(x1) && clobber(x2)) { break } @@ -13362,9 +13138,7 @@ func rewriteValueAMD64_OpAMD64MOVBstore_10(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVBstore_20(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MOVBstore [i] {s} p w x6:(MOVBstore [i-1] {s} p (SHRQconst [8] w) x5:(MOVBstore [i-2] {s} p (SHRQconst [16] w) x4:(MOVBstore [i-3] {s} p (SHRQconst [24] w) x3:(MOVBstore [i-4] {s} p (SHRQconst [32] w) x2:(MOVBstore [i-5] {s} p (SHRQconst [40] w) x1:(MOVBstore [i-6] {s} p (SHRQconst [48] w) x0:(MOVBstore [i-7] {s} p (SHRQconst [56] w) mem)))))))) // cond: x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) // result: (MOVQstore [i-7] {s} p (BSWAPQ w) mem) @@ -13528,7 +13302,7 @@ func rewriteValueAMD64_OpAMD64MOVBstore_20(v *Value) bool { if x0.Aux != s { break } - _ = x0.Args[2] + mem := x0.Args[2] if p != x0.Args[0] { break } @@ -13542,7 +13316,6 @@ func rewriteValueAMD64_OpAMD64MOVBstore_20(v *Value) bool { if w != x0_1.Args[0] { break } - mem := x0.Args[2] if !(x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6)) { break } @@ -13582,14 +13355,13 @@ func rewriteValueAMD64_OpAMD64MOVBstore_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if w != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -13627,14 +13399,13 @@ func rewriteValueAMD64_OpAMD64MOVBstore_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if w != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -13672,14 +13443,13 @@ func rewriteValueAMD64_OpAMD64MOVBstore_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if w != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -13710,7 +13480,7 @@ func rewriteValueAMD64_OpAMD64MOVBstore_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -13724,7 +13494,6 @@ func rewriteValueAMD64_OpAMD64MOVBstore_20(v *Value) bool { if w != x_1.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -13755,7 +13524,7 @@ func rewriteValueAMD64_OpAMD64MOVBstore_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -13769,7 +13538,6 @@ func rewriteValueAMD64_OpAMD64MOVBstore_20(v *Value) bool { if w != x_1.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -13800,7 +13568,7 @@ func rewriteValueAMD64_OpAMD64MOVBstore_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -13814,7 +13582,6 @@ func rewriteValueAMD64_OpAMD64MOVBstore_20(v *Value) bool { if w != x_1.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -13850,7 +13617,7 @@ func rewriteValueAMD64_OpAMD64MOVBstore_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -13864,7 +13631,6 @@ func rewriteValueAMD64_OpAMD64MOVBstore_20(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -13900,7 +13666,7 @@ func rewriteValueAMD64_OpAMD64MOVBstore_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -13914,7 +13680,6 @@ func rewriteValueAMD64_OpAMD64MOVBstore_20(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -13940,9 +13705,8 @@ func rewriteValueAMD64_OpAMD64MOVBstore_20(v *Value) bool { } j := x1.AuxInt s2 := x1.Aux - _ = x1.Args[1] - p2 := x1.Args[0] mem := x1.Args[1] + p2 := x1.Args[0] mem2 := v.Args[2] if mem2.Op != OpAMD64MOVBstore { break @@ -14002,7 +13766,7 @@ func rewriteValueAMD64_OpAMD64MOVBstore_30(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAL { break @@ -14011,7 +13775,6 @@ func rewriteValueAMD64_OpAMD64MOVBstore_30(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -14029,7 +13792,7 @@ func rewriteValueAMD64_OpAMD64MOVBstore_30(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDLconst { break @@ -14037,7 +13800,6 @@ func rewriteValueAMD64_OpAMD64MOVBstore_30(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -14058,14 +13820,13 @@ func rewriteValueAMD64_OpAMD64MOVBstoreconst_0(v *Value) bool { for { sc := v.AuxInt s := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(sc).canAdd(off)) { break } @@ -14082,7 +13843,7 @@ func rewriteValueAMD64_OpAMD64MOVBstoreconst_0(v *Value) bool { for { sc := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -14090,7 +13851,6 @@ func rewriteValueAMD64_OpAMD64MOVBstoreconst_0(v *Value) bool { off := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd(off)) { break } @@ -14107,17 +13867,15 @@ func rewriteValueAMD64_OpAMD64MOVBstoreconst_0(v *Value) bool { for { x := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ1 { break } off := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(canMergeSym(sym1, sym2)) { break } @@ -14135,15 +13893,13 @@ func rewriteValueAMD64_OpAMD64MOVBstoreconst_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQ { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] v.reset(OpAMD64MOVBstoreconstidx1) v.AuxInt = x v.Aux = sym @@ -14168,11 +13924,10 @@ func rewriteValueAMD64_OpAMD64MOVBstoreconst_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[1] + mem := x.Args[1] if p != x.Args[0] { break } - mem := x.Args[1] if !(x.Uses == 1 && ValAndOff(a).Off()+1 == ValAndOff(c).Off() && clobber(x)) { break } @@ -14199,11 +13954,10 @@ func rewriteValueAMD64_OpAMD64MOVBstoreconst_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[1] + mem := x.Args[1] if p != x.Args[0] { break } - mem := x.Args[1] if !(x.Uses == 1 && ValAndOff(a).Off()+1 == ValAndOff(c).Off() && clobber(x)) { break } @@ -14220,7 +13974,7 @@ func rewriteValueAMD64_OpAMD64MOVBstoreconst_0(v *Value) bool { for { sc := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAL { break @@ -14228,7 +13982,6 @@ func rewriteValueAMD64_OpAMD64MOVBstoreconst_0(v *Value) bool { off := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd(off)) { break } @@ -14245,14 +13998,13 @@ func rewriteValueAMD64_OpAMD64MOVBstoreconst_0(v *Value) bool { for { sc := v.AuxInt s := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDLconst { break } off := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(sc).canAdd(off)) { break } @@ -14272,7 +14024,7 @@ func rewriteValueAMD64_OpAMD64MOVBstoreconstidx1_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -14280,7 +14032,6 @@ func rewriteValueAMD64_OpAMD64MOVBstoreconstidx1_0(v *Value) bool { c := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(ValAndOff(x).canAdd(c)) { break } @@ -14298,7 +14049,7 @@ func rewriteValueAMD64_OpAMD64MOVBstoreconstidx1_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -14306,7 +14057,6 @@ func rewriteValueAMD64_OpAMD64MOVBstoreconstidx1_0(v *Value) bool { } c := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(ValAndOff(x).canAdd(c)) { break } @@ -14335,14 +14085,13 @@ func rewriteValueAMD64_OpAMD64MOVBstoreconstidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if i != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && ValAndOff(a).Off()+1 == ValAndOff(c).Off() && clobber(x)) { break } @@ -14358,14 +14107,13 @@ func rewriteValueAMD64_OpAMD64MOVBstoreconstidx1_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVBstoreidx1_0(v *Value) bool { b := v.Block - _ = b // match: (MOVBstoreidx1 [c] {sym} (ADDQconst [d] ptr) idx val mem) // cond: is32Bit(c+d) // result: (MOVBstoreidx1 [c+d] {sym} ptr idx val mem) for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -14374,7 +14122,6 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + d)) { break } @@ -14393,7 +14140,7 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -14402,7 +14149,6 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + d)) { break } @@ -14435,7 +14181,7 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_0(v *Value) bool { if x0.Aux != s { break } - _ = x0.Args[3] + mem := x0.Args[3] if p != x0.Args[0] { break } @@ -14452,7 +14198,6 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_0(v *Value) bool { if w != x0_2.Args[0] { break } - mem := x0.Args[3] if !(x0.Uses == 1 && clobber(x0)) { break } @@ -14542,7 +14287,7 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_0(v *Value) bool { if x0.Aux != s { break } - _ = x0.Args[3] + mem := x0.Args[3] if p != x0.Args[0] { break } @@ -14559,7 +14304,6 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_0(v *Value) bool { if w != x0_2.Args[0] { break } - mem := x0.Args[3] if !(x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && clobber(x0) && clobber(x1) && clobber(x2)) { break } @@ -14756,7 +14500,7 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_0(v *Value) bool { if x0.Aux != s { break } - _ = x0.Args[3] + mem := x0.Args[3] if p != x0.Args[0] { break } @@ -14773,7 +14517,6 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_0(v *Value) bool { if w != x0_2.Args[0] { break } - mem := x0.Args[3] if !(x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6)) { break } @@ -14815,7 +14558,7 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -14825,7 +14568,6 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -14865,7 +14607,7 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -14875,7 +14617,6 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -14915,7 +14656,7 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -14925,7 +14666,6 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -14963,7 +14703,7 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -14980,7 +14720,6 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_0(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -15018,7 +14757,7 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -15035,7 +14774,6 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_0(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -15057,7 +14795,7 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_10(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[3] + mem := v.Args[3] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { @@ -15065,7 +14803,6 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_10(v *Value) bool { } c := v_1.AuxInt w := v.Args[2] - mem := v.Args[3] if !(is32Bit(i + c)) { break } @@ -15081,7 +14818,6 @@ func rewriteValueAMD64_OpAMD64MOVBstoreidx1_10(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVLQSX_0(v *Value) bool { b := v.Block - _ = b // match: (MOVLQSX x:(MOVLload [off] {sym} ptr mem)) // cond: x.Uses == 1 && clobber(x) // result: @x.Block (MOVLQSXload [off] {sym} ptr mem) @@ -15092,9 +14828,8 @@ func rewriteValueAMD64_OpAMD64MOVLQSX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -15118,9 +14853,8 @@ func rewriteValueAMD64_OpAMD64MOVLQSX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -15224,7 +14958,7 @@ func rewriteValueAMD64_OpAMD64MOVLQSXload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -15232,7 +14966,6 @@ func rewriteValueAMD64_OpAMD64MOVLQSXload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -15247,7 +14980,6 @@ func rewriteValueAMD64_OpAMD64MOVLQSXload_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVLQZX_0(v *Value) bool { b := v.Block - _ = b // match: (MOVLQZX x:(MOVLload [off] {sym} ptr mem)) // cond: x.Uses == 1 && clobber(x) // result: @x.Block (MOVLload [off] {sym} ptr mem) @@ -15258,9 +14990,8 @@ func rewriteValueAMD64_OpAMD64MOVLQZX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -15284,9 +15015,8 @@ func rewriteValueAMD64_OpAMD64MOVLQZX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -15323,10 +15053,9 @@ func rewriteValueAMD64_OpAMD64MOVLQZX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -15351,10 +15080,9 @@ func rewriteValueAMD64_OpAMD64MOVLQZX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -15432,14 +15160,13 @@ func rewriteValueAMD64_OpAMD64MOVLatomicload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -15456,7 +15183,7 @@ func rewriteValueAMD64_OpAMD64MOVLatomicload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -15464,7 +15191,6 @@ func rewriteValueAMD64_OpAMD64MOVLatomicload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -15479,7 +15205,6 @@ func rewriteValueAMD64_OpAMD64MOVLatomicload_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVLf2i_0(v *Value) bool { b := v.Block - _ = b // match: (MOVLf2i (Arg [off] {sym})) // cond: t.Size() == u.Size() // result: @b.Func.Entry (Arg [off] {sym}) @@ -15507,7 +15232,6 @@ func rewriteValueAMD64_OpAMD64MOVLf2i_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVLi2f_0(v *Value) bool { b := v.Block - _ = b // match: (MOVLi2f (Arg [off] {sym})) // cond: t.Size() == u.Size() // result: @b.Func.Entry (Arg [off] {sym}) @@ -15564,14 +15288,13 @@ func rewriteValueAMD64_OpAMD64MOVLload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -15588,7 +15311,7 @@ func rewriteValueAMD64_OpAMD64MOVLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -15596,7 +15319,6 @@ func rewriteValueAMD64_OpAMD64MOVLload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -15613,17 +15335,15 @@ func rewriteValueAMD64_OpAMD64MOVLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -15641,17 +15361,15 @@ func rewriteValueAMD64_OpAMD64MOVLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ4 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -15669,17 +15387,15 @@ func rewriteValueAMD64_OpAMD64MOVLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ8 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -15697,15 +15413,13 @@ func rewriteValueAMD64_OpAMD64MOVLload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQ { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(ptr.Op != OpSB) { break } @@ -15723,7 +15437,7 @@ func rewriteValueAMD64_OpAMD64MOVLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAL { break @@ -15731,7 +15445,6 @@ func rewriteValueAMD64_OpAMD64MOVLload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -15748,14 +15461,13 @@ func rewriteValueAMD64_OpAMD64MOVLload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDLconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -15797,9 +15509,7 @@ func rewriteValueAMD64_OpAMD64MOVLload_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVLload_10(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVLload [off] {sym} (SB) _) // cond: symIsRO(sym) // result: (MOVQconst [int64(read32(sym, off, config.BigEndian))]) @@ -15827,7 +15537,7 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64SHLQconst { @@ -15837,7 +15547,6 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx1_0(v *Value) bool { break } idx := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64MOVLloadidx4) v.AuxInt = c v.Aux = sym @@ -15852,7 +15561,7 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64SHLQconst { break @@ -15862,7 +15571,6 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx1_0(v *Value) bool { } idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64MOVLloadidx4) v.AuxInt = c v.Aux = sym @@ -15877,7 +15585,7 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64SHLQconst { @@ -15887,7 +15595,6 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx1_0(v *Value) bool { break } idx := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64MOVLloadidx8) v.AuxInt = c v.Aux = sym @@ -15902,7 +15609,7 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64SHLQconst { break @@ -15912,7 +15619,6 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx1_0(v *Value) bool { } idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64MOVLloadidx8) v.AuxInt = c v.Aux = sym @@ -15927,7 +15633,7 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -15935,7 +15641,6 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx1_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -15953,7 +15658,7 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] idx := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -15961,7 +15666,6 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx1_0(v *Value) bool { } d := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -15979,7 +15683,7 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -15987,7 +15691,6 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx1_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -16005,7 +15708,7 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -16013,7 +15716,6 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx1_0(v *Value) bool { d := v_0.AuxInt idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -16031,14 +15733,13 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx1_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is32Bit(i + c)) { break } @@ -16055,14 +15756,13 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx1_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVQconst { break } c := v_0.AuxInt p := v.Args[1] - mem := v.Args[2] if !(is32Bit(i + c)) { break } @@ -16082,7 +15782,7 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx4_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -16090,7 +15790,6 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx4_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -16108,7 +15807,7 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx4_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -16116,7 +15815,6 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx4_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(c + 4*d)) { break } @@ -16134,14 +15832,13 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx4_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is32Bit(i + 4*c)) { break } @@ -16161,7 +15858,7 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx8_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -16169,7 +15866,6 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx8_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -16187,7 +15883,7 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx8_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -16195,7 +15891,6 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx8_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(c + 8*d)) { break } @@ -16213,14 +15908,13 @@ func rewriteValueAMD64_OpAMD64MOVLloadidx8_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is32Bit(i + 8*c)) { break } @@ -16240,14 +15934,13 @@ func rewriteValueAMD64_OpAMD64MOVLstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVLQSX { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64MOVLstore) v.AuxInt = off v.Aux = sym @@ -16262,14 +15955,13 @@ func rewriteValueAMD64_OpAMD64MOVLstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVLQZX { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64MOVLstore) v.AuxInt = off v.Aux = sym @@ -16284,7 +15976,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -16292,7 +15984,6 @@ func rewriteValueAMD64_OpAMD64MOVLstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -16310,14 +16001,13 @@ func rewriteValueAMD64_OpAMD64MOVLstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVLconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(validOff(off)) { break } @@ -16334,14 +16024,13 @@ func rewriteValueAMD64_OpAMD64MOVLstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(validOff(off)) { break } @@ -16358,7 +16047,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -16367,7 +16056,6 @@ func rewriteValueAMD64_OpAMD64MOVLstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -16385,18 +16073,16 @@ func rewriteValueAMD64_OpAMD64MOVLstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -16415,18 +16101,16 @@ func rewriteValueAMD64_OpAMD64MOVLstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ4 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -16445,18 +16129,16 @@ func rewriteValueAMD64_OpAMD64MOVLstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ8 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -16475,16 +16157,14 @@ func rewriteValueAMD64_OpAMD64MOVLstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQ { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(ptr.Op != OpSB) { break } @@ -16501,9 +16181,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVLstore_10(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MOVLstore [i] {s} p (SHRQconst [32] w) x:(MOVLstore [i-4] {s} p w mem)) // cond: x.Uses == 1 && clobber(x) // result: (MOVQstore [i-4] {s} p w mem) @@ -16530,14 +16208,13 @@ func rewriteValueAMD64_OpAMD64MOVLstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if w != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -16573,7 +16250,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -16587,7 +16264,6 @@ func rewriteValueAMD64_OpAMD64MOVLstore_10(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -16613,9 +16289,8 @@ func rewriteValueAMD64_OpAMD64MOVLstore_10(v *Value) bool { } j := x1.AuxInt s2 := x1.Aux - _ = x1.Args[1] - p2 := x1.Args[0] mem := x1.Args[1] + p2 := x1.Args[0] mem2 := v.Args[2] if mem2.Op != OpAMD64MOVLstore { break @@ -16672,7 +16347,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_10(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAL { break @@ -16681,7 +16356,6 @@ func rewriteValueAMD64_OpAMD64MOVLstore_10(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -16699,7 +16373,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_10(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDLconst { break @@ -16707,7 +16381,6 @@ func rewriteValueAMD64_OpAMD64MOVLstore_10(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -16725,7 +16398,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64ADDLload { @@ -16742,8 +16415,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_10(v *Value) bool { if ptr != y.Args[1] { break } - mem := y.Args[2] - if mem != v.Args[2] { + if mem != y.Args[2] { break } if !(y.Uses == 1 && clobber(y)) { @@ -16763,7 +16435,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64ANDLload { @@ -16780,8 +16452,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_10(v *Value) bool { if ptr != y.Args[1] { break } - mem := y.Args[2] - if mem != v.Args[2] { + if mem != y.Args[2] { break } if !(y.Uses == 1 && clobber(y)) { @@ -16801,7 +16472,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64ORLload { @@ -16818,8 +16489,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_10(v *Value) bool { if ptr != y.Args[1] { break } - mem := y.Args[2] - if mem != v.Args[2] { + if mem != y.Args[2] { break } if !(y.Uses == 1 && clobber(y)) { @@ -16839,7 +16509,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64XORLload { @@ -16856,8 +16526,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_10(v *Value) bool { if ptr != y.Args[1] { break } - mem := y.Args[2] - if mem != v.Args[2] { + if mem != y.Args[2] { break } if !(y.Uses == 1 && clobber(y)) { @@ -16877,13 +16546,13 @@ func rewriteValueAMD64_OpAMD64MOVLstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64ADDL { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != OpAMD64MOVLload { break @@ -16898,9 +16567,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_10(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - x := y.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -16923,7 +16590,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64ADDL { @@ -16945,8 +16612,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_20(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -16966,13 +16632,13 @@ func rewriteValueAMD64_OpAMD64MOVLstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64SUBL { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != OpAMD64MOVLload { break @@ -16987,9 +16653,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_20(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - x := y.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -17009,13 +16673,13 @@ func rewriteValueAMD64_OpAMD64MOVLstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64ANDL { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != OpAMD64MOVLload { break @@ -17030,9 +16694,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_20(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - x := y.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -17052,7 +16714,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64ANDL { @@ -17074,8 +16736,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_20(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -17095,13 +16756,13 @@ func rewriteValueAMD64_OpAMD64MOVLstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64ORL { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != OpAMD64MOVLload { break @@ -17116,9 +16777,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_20(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - x := y.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -17138,7 +16797,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64ORL { @@ -17160,8 +16819,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_20(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -17181,13 +16839,13 @@ func rewriteValueAMD64_OpAMD64MOVLstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64XORL { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != OpAMD64MOVLload { break @@ -17202,9 +16860,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_20(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - x := y.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -17224,7 +16880,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64XORL { @@ -17246,8 +16902,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_20(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -17267,13 +16922,13 @@ func rewriteValueAMD64_OpAMD64MOVLstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64BTCL { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != OpAMD64MOVLload { break @@ -17288,9 +16943,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_20(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - x := y.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -17310,13 +16963,13 @@ func rewriteValueAMD64_OpAMD64MOVLstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64BTRL { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != OpAMD64MOVLload { break @@ -17331,9 +16984,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_20(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - x := y.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -17356,13 +17007,13 @@ func rewriteValueAMD64_OpAMD64MOVLstore_30(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64BTSL { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != OpAMD64MOVLload { break @@ -17377,9 +17028,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_30(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - x := y.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -17399,7 +17048,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_30(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] a := v.Args[1] if a.Op != OpAMD64ADDLconst { @@ -17418,8 +17067,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_30(v *Value) bool { } _ = l.Args[1] ptr2 := l.Args[0] - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(isSamePtr(ptr, ptr2) && a.Uses == 1 && l.Uses == 1 && validValAndOff(c, off) && clobber(l) && clobber(a)) { @@ -17438,7 +17086,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_30(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] a := v.Args[1] if a.Op != OpAMD64ANDLconst { @@ -17457,8 +17105,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_30(v *Value) bool { } _ = l.Args[1] ptr2 := l.Args[0] - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(isSamePtr(ptr, ptr2) && a.Uses == 1 && l.Uses == 1 && validValAndOff(c, off) && clobber(l) && clobber(a)) { @@ -17477,7 +17124,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_30(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] a := v.Args[1] if a.Op != OpAMD64ORLconst { @@ -17496,8 +17143,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_30(v *Value) bool { } _ = l.Args[1] ptr2 := l.Args[0] - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(isSamePtr(ptr, ptr2) && a.Uses == 1 && l.Uses == 1 && validValAndOff(c, off) && clobber(l) && clobber(a)) { @@ -17516,7 +17162,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_30(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] a := v.Args[1] if a.Op != OpAMD64XORLconst { @@ -17535,8 +17181,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_30(v *Value) bool { } _ = l.Args[1] ptr2 := l.Args[0] - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(isSamePtr(ptr, ptr2) && a.Uses == 1 && l.Uses == 1 && validValAndOff(c, off) && clobber(l) && clobber(a)) { @@ -17555,7 +17200,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_30(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] a := v.Args[1] if a.Op != OpAMD64BTCLconst { @@ -17574,8 +17219,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_30(v *Value) bool { } _ = l.Args[1] ptr2 := l.Args[0] - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(isSamePtr(ptr, ptr2) && a.Uses == 1 && l.Uses == 1 && validValAndOff(c, off) && clobber(l) && clobber(a)) { @@ -17594,7 +17238,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_30(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] a := v.Args[1] if a.Op != OpAMD64BTRLconst { @@ -17613,8 +17257,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_30(v *Value) bool { } _ = l.Args[1] ptr2 := l.Args[0] - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(isSamePtr(ptr, ptr2) && a.Uses == 1 && l.Uses == 1 && validValAndOff(c, off) && clobber(l) && clobber(a)) { @@ -17633,7 +17276,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_30(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] a := v.Args[1] if a.Op != OpAMD64BTSLconst { @@ -17652,8 +17295,7 @@ func rewriteValueAMD64_OpAMD64MOVLstore_30(v *Value) bool { } _ = l.Args[1] ptr2 := l.Args[0] - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(isSamePtr(ptr, ptr2) && a.Uses == 1 && l.Uses == 1 && validValAndOff(c, off) && clobber(l) && clobber(a)) { @@ -17672,14 +17314,13 @@ func rewriteValueAMD64_OpAMD64MOVLstore_30(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVLf2i { break } val := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64MOVSSstore) v.AuxInt = off v.Aux = sym @@ -17692,23 +17333,20 @@ func rewriteValueAMD64_OpAMD64MOVLstore_30(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVLstoreconst_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MOVLstoreconst [sc] {s} (ADDQconst [off] ptr) mem) // cond: ValAndOff(sc).canAdd(off) // result: (MOVLstoreconst [ValAndOff(sc).add(off)] {s} ptr mem) for { sc := v.AuxInt s := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(sc).canAdd(off)) { break } @@ -17725,7 +17363,7 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconst_0(v *Value) bool { for { sc := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -17733,7 +17371,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconst_0(v *Value) bool { off := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd(off)) { break } @@ -17750,17 +17387,15 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconst_0(v *Value) bool { for { x := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ1 { break } off := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(canMergeSym(sym1, sym2)) { break } @@ -17778,17 +17413,15 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconst_0(v *Value) bool { for { x := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ4 { break } off := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(canMergeSym(sym1, sym2)) { break } @@ -17806,15 +17439,13 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconst_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQ { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] v.reset(OpAMD64MOVLstoreconstidx1) v.AuxInt = x v.Aux = sym @@ -17839,11 +17470,10 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconst_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[1] + mem := x.Args[1] if p != x.Args[0] { break } - mem := x.Args[1] if !(x.Uses == 1 && ValAndOff(a).Off()+4 == ValAndOff(c).Off() && clobber(x)) { break } @@ -17873,11 +17503,10 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconst_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[1] + mem := x.Args[1] if p != x.Args[0] { break } - mem := x.Args[1] if !(x.Uses == 1 && ValAndOff(a).Off()+4 == ValAndOff(c).Off() && clobber(x)) { break } @@ -17897,7 +17526,7 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconst_0(v *Value) bool { for { sc := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAL { break @@ -17905,7 +17534,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconst_0(v *Value) bool { off := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd(off)) { break } @@ -17922,14 +17550,13 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconst_0(v *Value) bool { for { sc := v.AuxInt s := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDLconst { break } off := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(sc).canAdd(off)) { break } @@ -17944,16 +17571,14 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconst_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVLstoreconstidx1_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MOVLstoreconstidx1 [c] {sym} ptr (SHLQconst [2] idx) mem) // cond: // result: (MOVLstoreconstidx4 [c] {sym} ptr idx mem) for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64SHLQconst { @@ -17963,7 +17588,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconstidx1_0(v *Value) bool { break } idx := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64MOVLstoreconstidx4) v.AuxInt = c v.Aux = sym @@ -17978,7 +17602,7 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconstidx1_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -17986,7 +17610,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconstidx1_0(v *Value) bool { c := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(ValAndOff(x).canAdd(c)) { break } @@ -18004,7 +17627,7 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconstidx1_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -18012,7 +17635,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconstidx1_0(v *Value) bool { } c := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(ValAndOff(x).canAdd(c)) { break } @@ -18041,14 +17663,13 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconstidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if i != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && ValAndOff(a).Off()+4 == ValAndOff(c).Off() && clobber(x)) { break } @@ -18067,16 +17688,14 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconstidx1_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVLstoreconstidx4_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MOVLstoreconstidx4 [x] {sym} (ADDQconst [c] ptr) idx mem) // cond: ValAndOff(x).canAdd(c) // result: (MOVLstoreconstidx4 [ValAndOff(x).add(c)] {sym} ptr idx mem) for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -18084,7 +17703,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconstidx4_0(v *Value) bool { c := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(ValAndOff(x).canAdd(c)) { break } @@ -18102,7 +17720,7 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconstidx4_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -18110,7 +17728,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconstidx4_0(v *Value) bool { } c := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(ValAndOff(x).canAdd(4 * c)) { break } @@ -18139,14 +17756,13 @@ func rewriteValueAMD64_OpAMD64MOVLstoreconstidx4_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if i != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && ValAndOff(a).Off()+4 == ValAndOff(c).Off() && clobber(x)) { break } @@ -18173,7 +17789,7 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64SHLQconst { @@ -18184,7 +17800,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx1_0(v *Value) bool { } idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(OpAMD64MOVLstoreidx4) v.AuxInt = c v.Aux = sym @@ -18200,7 +17815,7 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64SHLQconst { @@ -18211,7 +17826,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx1_0(v *Value) bool { } idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(OpAMD64MOVLstoreidx8) v.AuxInt = c v.Aux = sym @@ -18227,7 +17841,7 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -18236,7 +17850,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx1_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + d)) { break } @@ -18255,7 +17868,7 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -18264,7 +17877,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx1_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + d)) { break } @@ -18304,7 +17916,7 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -18314,7 +17926,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx1_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -18352,7 +17963,7 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -18369,7 +17980,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx1_0(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -18388,7 +17998,7 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx1_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[3] + mem := v.Args[3] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { @@ -18396,7 +18006,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx1_0(v *Value) bool { } c := v_1.AuxInt w := v.Args[2] - mem := v.Args[3] if !(is32Bit(i + c)) { break } @@ -18412,14 +18021,13 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx1_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVLstoreidx4_0(v *Value) bool { b := v.Block - _ = b // match: (MOVLstoreidx4 [c] {sym} (ADDQconst [d] ptr) idx val mem) // cond: is32Bit(c+d) // result: (MOVLstoreidx4 [c+d] {sym} ptr idx val mem) for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -18428,7 +18036,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx4_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + d)) { break } @@ -18447,7 +18054,7 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx4_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -18456,7 +18063,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx4_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + 4*d)) { break } @@ -18496,7 +18102,7 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx4_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -18506,7 +18112,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx4_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -18547,7 +18152,7 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx4_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -18564,7 +18169,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx4_0(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -18586,7 +18190,7 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx4_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[3] + mem := v.Args[3] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { @@ -18594,7 +18198,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx4_0(v *Value) bool { } c := v_1.AuxInt w := v.Args[2] - mem := v.Args[3] if !(is32Bit(i + 4*c)) { break } @@ -18615,7 +18218,7 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx8_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -18624,7 +18227,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx8_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + d)) { break } @@ -18643,7 +18245,7 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx8_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -18652,7 +18254,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx8_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + 8*d)) { break } @@ -18671,7 +18272,7 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx8_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[3] + mem := v.Args[3] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { @@ -18679,7 +18280,6 @@ func rewriteValueAMD64_OpAMD64MOVLstoreidx8_0(v *Value) bool { } c := v_1.AuxInt w := v.Args[2] - mem := v.Args[3] if !(is32Bit(i + 8*c)) { break } @@ -18700,14 +18300,13 @@ func rewriteValueAMD64_OpAMD64MOVOload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -18724,7 +18323,7 @@ func rewriteValueAMD64_OpAMD64MOVOload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -18732,7 +18331,6 @@ func rewriteValueAMD64_OpAMD64MOVOload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -18752,7 +18350,7 @@ func rewriteValueAMD64_OpAMD64MOVOstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -18760,7 +18358,6 @@ func rewriteValueAMD64_OpAMD64MOVOstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -18778,7 +18375,7 @@ func rewriteValueAMD64_OpAMD64MOVOstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -18787,7 +18384,6 @@ func rewriteValueAMD64_OpAMD64MOVOstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -18808,14 +18404,13 @@ func rewriteValueAMD64_OpAMD64MOVQatomicload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -18832,7 +18427,7 @@ func rewriteValueAMD64_OpAMD64MOVQatomicload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -18840,7 +18435,6 @@ func rewriteValueAMD64_OpAMD64MOVQatomicload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -18855,7 +18449,6 @@ func rewriteValueAMD64_OpAMD64MOVQatomicload_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVQf2i_0(v *Value) bool { b := v.Block - _ = b // match: (MOVQf2i (Arg [off] {sym})) // cond: t.Size() == u.Size() // result: @b.Func.Entry (Arg [off] {sym}) @@ -18883,7 +18476,6 @@ func rewriteValueAMD64_OpAMD64MOVQf2i_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVQi2f_0(v *Value) bool { b := v.Block - _ = b // match: (MOVQi2f (Arg [off] {sym})) // cond: t.Size() == u.Size() // result: @b.Func.Entry (Arg [off] {sym}) @@ -18911,9 +18503,7 @@ func rewriteValueAMD64_OpAMD64MOVQi2f_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVQload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVQload [off] {sym} ptr (MOVQstore [off2] {sym2} ptr2 x _)) // cond: sym == sym2 && off == off2 && isSamePtr(ptr, ptr2) // result: x @@ -18945,14 +18535,13 @@ func rewriteValueAMD64_OpAMD64MOVQload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -18969,7 +18558,7 @@ func rewriteValueAMD64_OpAMD64MOVQload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -18977,7 +18566,6 @@ func rewriteValueAMD64_OpAMD64MOVQload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -18994,17 +18582,15 @@ func rewriteValueAMD64_OpAMD64MOVQload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -19022,17 +18608,15 @@ func rewriteValueAMD64_OpAMD64MOVQload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ8 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -19050,15 +18634,13 @@ func rewriteValueAMD64_OpAMD64MOVQload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQ { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(ptr.Op != OpSB) { break } @@ -19076,7 +18658,7 @@ func rewriteValueAMD64_OpAMD64MOVQload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAL { break @@ -19084,7 +18666,6 @@ func rewriteValueAMD64_OpAMD64MOVQload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -19101,14 +18682,13 @@ func rewriteValueAMD64_OpAMD64MOVQload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDLconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -19173,7 +18753,7 @@ func rewriteValueAMD64_OpAMD64MOVQloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64SHLQconst { @@ -19183,7 +18763,6 @@ func rewriteValueAMD64_OpAMD64MOVQloadidx1_0(v *Value) bool { break } idx := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64MOVQloadidx8) v.AuxInt = c v.Aux = sym @@ -19198,7 +18777,7 @@ func rewriteValueAMD64_OpAMD64MOVQloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64SHLQconst { break @@ -19208,7 +18787,6 @@ func rewriteValueAMD64_OpAMD64MOVQloadidx1_0(v *Value) bool { } idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64MOVQloadidx8) v.AuxInt = c v.Aux = sym @@ -19223,7 +18801,7 @@ func rewriteValueAMD64_OpAMD64MOVQloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -19231,7 +18809,6 @@ func rewriteValueAMD64_OpAMD64MOVQloadidx1_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -19249,7 +18826,7 @@ func rewriteValueAMD64_OpAMD64MOVQloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] idx := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -19257,7 +18834,6 @@ func rewriteValueAMD64_OpAMD64MOVQloadidx1_0(v *Value) bool { } d := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -19275,7 +18851,7 @@ func rewriteValueAMD64_OpAMD64MOVQloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -19283,7 +18859,6 @@ func rewriteValueAMD64_OpAMD64MOVQloadidx1_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -19301,7 +18876,7 @@ func rewriteValueAMD64_OpAMD64MOVQloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -19309,7 +18884,6 @@ func rewriteValueAMD64_OpAMD64MOVQloadidx1_0(v *Value) bool { d := v_0.AuxInt idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -19327,14 +18901,13 @@ func rewriteValueAMD64_OpAMD64MOVQloadidx1_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is32Bit(i + c)) { break } @@ -19351,14 +18924,13 @@ func rewriteValueAMD64_OpAMD64MOVQloadidx1_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVQconst { break } c := v_0.AuxInt p := v.Args[1] - mem := v.Args[2] if !(is32Bit(i + c)) { break } @@ -19378,7 +18950,7 @@ func rewriteValueAMD64_OpAMD64MOVQloadidx8_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -19386,7 +18958,6 @@ func rewriteValueAMD64_OpAMD64MOVQloadidx8_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -19404,7 +18975,7 @@ func rewriteValueAMD64_OpAMD64MOVQloadidx8_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -19412,7 +18983,6 @@ func rewriteValueAMD64_OpAMD64MOVQloadidx8_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(c + 8*d)) { break } @@ -19430,14 +19000,13 @@ func rewriteValueAMD64_OpAMD64MOVQloadidx8_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is32Bit(i + 8*c)) { break } @@ -19457,7 +19026,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -19465,7 +19034,6 @@ func rewriteValueAMD64_OpAMD64MOVQstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -19483,14 +19051,13 @@ func rewriteValueAMD64_OpAMD64MOVQstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(validValAndOff(c, off)) { break } @@ -19507,7 +19074,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -19516,7 +19083,6 @@ func rewriteValueAMD64_OpAMD64MOVQstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -19534,18 +19100,16 @@ func rewriteValueAMD64_OpAMD64MOVQstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -19564,18 +19128,16 @@ func rewriteValueAMD64_OpAMD64MOVQstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ8 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -19594,16 +19156,14 @@ func rewriteValueAMD64_OpAMD64MOVQstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQ { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(ptr.Op != OpSB) { break } @@ -19622,7 +19182,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAL { break @@ -19631,7 +19191,6 @@ func rewriteValueAMD64_OpAMD64MOVQstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -19649,7 +19208,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDLconst { break @@ -19657,7 +19216,6 @@ func rewriteValueAMD64_OpAMD64MOVQstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -19675,7 +19233,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64ADDQload { @@ -19692,8 +19250,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_0(v *Value) bool { if ptr != y.Args[1] { break } - mem := y.Args[2] - if mem != v.Args[2] { + if mem != y.Args[2] { break } if !(y.Uses == 1 && clobber(y)) { @@ -19713,7 +19270,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64ANDQload { @@ -19730,8 +19287,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_0(v *Value) bool { if ptr != y.Args[1] { break } - mem := y.Args[2] - if mem != v.Args[2] { + if mem != y.Args[2] { break } if !(y.Uses == 1 && clobber(y)) { @@ -19754,7 +19310,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64ORQload { @@ -19771,8 +19327,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_10(v *Value) bool { if ptr != y.Args[1] { break } - mem := y.Args[2] - if mem != v.Args[2] { + if mem != y.Args[2] { break } if !(y.Uses == 1 && clobber(y)) { @@ -19792,7 +19347,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64XORQload { @@ -19809,8 +19364,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_10(v *Value) bool { if ptr != y.Args[1] { break } - mem := y.Args[2] - if mem != v.Args[2] { + if mem != y.Args[2] { break } if !(y.Uses == 1 && clobber(y)) { @@ -19830,13 +19384,13 @@ func rewriteValueAMD64_OpAMD64MOVQstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64ADDQ { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != OpAMD64MOVQload { break @@ -19851,9 +19405,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_10(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - x := y.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -19873,7 +19425,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64ADDQ { @@ -19895,8 +19447,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_10(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -19916,13 +19467,13 @@ func rewriteValueAMD64_OpAMD64MOVQstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64SUBQ { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != OpAMD64MOVQload { break @@ -19937,9 +19488,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_10(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - x := y.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -19959,13 +19508,13 @@ func rewriteValueAMD64_OpAMD64MOVQstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64ANDQ { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != OpAMD64MOVQload { break @@ -19980,9 +19529,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_10(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - x := y.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -20002,7 +19549,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64ANDQ { @@ -20024,8 +19571,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_10(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -20045,13 +19591,13 @@ func rewriteValueAMD64_OpAMD64MOVQstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64ORQ { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != OpAMD64MOVQload { break @@ -20066,9 +19612,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_10(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - x := y.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -20088,7 +19632,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64ORQ { @@ -20110,8 +19654,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_10(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -20131,13 +19674,13 @@ func rewriteValueAMD64_OpAMD64MOVQstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64XORQ { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != OpAMD64MOVQload { break @@ -20152,9 +19695,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_10(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - x := y.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -20177,7 +19718,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64XORQ { @@ -20199,8 +19740,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_20(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -20220,13 +19760,13 @@ func rewriteValueAMD64_OpAMD64MOVQstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64BTCQ { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != OpAMD64MOVQload { break @@ -20241,9 +19781,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_20(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - x := y.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -20263,13 +19801,13 @@ func rewriteValueAMD64_OpAMD64MOVQstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64BTRQ { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != OpAMD64MOVQload { break @@ -20284,9 +19822,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_20(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - x := y.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -20306,13 +19842,13 @@ func rewriteValueAMD64_OpAMD64MOVQstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] y := v.Args[1] if y.Op != OpAMD64BTSQ { break } - _ = y.Args[1] + x := y.Args[1] l := y.Args[0] if l.Op != OpAMD64MOVQload { break @@ -20327,9 +19863,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_20(v *Value) bool { if ptr != l.Args[0] { break } - mem := l.Args[1] - x := y.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(y.Uses == 1 && l.Uses == 1 && clobber(y) && clobber(l)) { @@ -20349,7 +19883,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] a := v.Args[1] if a.Op != OpAMD64ADDQconst { @@ -20368,8 +19902,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_20(v *Value) bool { } _ = l.Args[1] ptr2 := l.Args[0] - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(isSamePtr(ptr, ptr2) && a.Uses == 1 && l.Uses == 1 && validValAndOff(c, off) && clobber(l) && clobber(a)) { @@ -20388,7 +19921,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] a := v.Args[1] if a.Op != OpAMD64ANDQconst { @@ -20407,8 +19940,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_20(v *Value) bool { } _ = l.Args[1] ptr2 := l.Args[0] - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(isSamePtr(ptr, ptr2) && a.Uses == 1 && l.Uses == 1 && validValAndOff(c, off) && clobber(l) && clobber(a)) { @@ -20427,7 +19959,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] a := v.Args[1] if a.Op != OpAMD64ORQconst { @@ -20446,8 +19978,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_20(v *Value) bool { } _ = l.Args[1] ptr2 := l.Args[0] - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(isSamePtr(ptr, ptr2) && a.Uses == 1 && l.Uses == 1 && validValAndOff(c, off) && clobber(l) && clobber(a)) { @@ -20466,7 +19997,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] a := v.Args[1] if a.Op != OpAMD64XORQconst { @@ -20485,8 +20016,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_20(v *Value) bool { } _ = l.Args[1] ptr2 := l.Args[0] - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(isSamePtr(ptr, ptr2) && a.Uses == 1 && l.Uses == 1 && validValAndOff(c, off) && clobber(l) && clobber(a)) { @@ -20505,7 +20035,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] a := v.Args[1] if a.Op != OpAMD64BTCQconst { @@ -20524,8 +20054,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_20(v *Value) bool { } _ = l.Args[1] ptr2 := l.Args[0] - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(isSamePtr(ptr, ptr2) && a.Uses == 1 && l.Uses == 1 && validValAndOff(c, off) && clobber(l) && clobber(a)) { @@ -20544,7 +20073,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] a := v.Args[1] if a.Op != OpAMD64BTRQconst { @@ -20563,8 +20092,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_20(v *Value) bool { } _ = l.Args[1] ptr2 := l.Args[0] - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(isSamePtr(ptr, ptr2) && a.Uses == 1 && l.Uses == 1 && validValAndOff(c, off) && clobber(l) && clobber(a)) { @@ -20586,7 +20114,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_30(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] a := v.Args[1] if a.Op != OpAMD64BTSQconst { @@ -20605,8 +20133,7 @@ func rewriteValueAMD64_OpAMD64MOVQstore_30(v *Value) bool { } _ = l.Args[1] ptr2 := l.Args[0] - mem := l.Args[1] - if mem != v.Args[2] { + if mem != l.Args[1] { break } if !(isSamePtr(ptr, ptr2) && a.Uses == 1 && l.Uses == 1 && validValAndOff(c, off) && clobber(l) && clobber(a)) { @@ -20625,14 +20152,13 @@ func rewriteValueAMD64_OpAMD64MOVQstore_30(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQf2i { break } val := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64MOVSDstore) v.AuxInt = off v.Aux = sym @@ -20645,23 +20171,20 @@ func rewriteValueAMD64_OpAMD64MOVQstore_30(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVQstoreconst_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVQstoreconst [sc] {s} (ADDQconst [off] ptr) mem) // cond: ValAndOff(sc).canAdd(off) // result: (MOVQstoreconst [ValAndOff(sc).add(off)] {s} ptr mem) for { sc := v.AuxInt s := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(sc).canAdd(off)) { break } @@ -20678,7 +20201,7 @@ func rewriteValueAMD64_OpAMD64MOVQstoreconst_0(v *Value) bool { for { sc := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -20686,7 +20209,6 @@ func rewriteValueAMD64_OpAMD64MOVQstoreconst_0(v *Value) bool { off := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd(off)) { break } @@ -20703,17 +20225,15 @@ func rewriteValueAMD64_OpAMD64MOVQstoreconst_0(v *Value) bool { for { x := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ1 { break } off := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(canMergeSym(sym1, sym2)) { break } @@ -20731,17 +20251,15 @@ func rewriteValueAMD64_OpAMD64MOVQstoreconst_0(v *Value) bool { for { x := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ8 { break } off := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(canMergeSym(sym1, sym2)) { break } @@ -20759,15 +20277,13 @@ func rewriteValueAMD64_OpAMD64MOVQstoreconst_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQ { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] v.reset(OpAMD64MOVQstoreconstidx1) v.AuxInt = x v.Aux = sym @@ -20792,11 +20308,10 @@ func rewriteValueAMD64_OpAMD64MOVQstoreconst_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[1] + mem := x.Args[1] if p != x.Args[0] { break } - mem := x.Args[1] if !(config.useSSE && x.Uses == 1 && ValAndOff(c2).Off()+8 == ValAndOff(c).Off() && ValAndOff(c).Val() == 0 && ValAndOff(c2).Val() == 0 && clobber(x)) { break } @@ -20816,7 +20331,7 @@ func rewriteValueAMD64_OpAMD64MOVQstoreconst_0(v *Value) bool { for { sc := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAL { break @@ -20824,7 +20339,6 @@ func rewriteValueAMD64_OpAMD64MOVQstoreconst_0(v *Value) bool { off := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd(off)) { break } @@ -20841,14 +20355,13 @@ func rewriteValueAMD64_OpAMD64MOVQstoreconst_0(v *Value) bool { for { sc := v.AuxInt s := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDLconst { break } off := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(sc).canAdd(off)) { break } @@ -20868,7 +20381,7 @@ func rewriteValueAMD64_OpAMD64MOVQstoreconstidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64SHLQconst { @@ -20878,7 +20391,6 @@ func rewriteValueAMD64_OpAMD64MOVQstoreconstidx1_0(v *Value) bool { break } idx := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64MOVQstoreconstidx8) v.AuxInt = c v.Aux = sym @@ -20893,7 +20405,7 @@ func rewriteValueAMD64_OpAMD64MOVQstoreconstidx1_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -20901,7 +20413,6 @@ func rewriteValueAMD64_OpAMD64MOVQstoreconstidx1_0(v *Value) bool { c := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(ValAndOff(x).canAdd(c)) { break } @@ -20919,7 +20430,7 @@ func rewriteValueAMD64_OpAMD64MOVQstoreconstidx1_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -20927,7 +20438,6 @@ func rewriteValueAMD64_OpAMD64MOVQstoreconstidx1_0(v *Value) bool { } c := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(ValAndOff(x).canAdd(c)) { break } @@ -20948,7 +20458,7 @@ func rewriteValueAMD64_OpAMD64MOVQstoreconstidx8_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -20956,7 +20466,6 @@ func rewriteValueAMD64_OpAMD64MOVQstoreconstidx8_0(v *Value) bool { c := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(ValAndOff(x).canAdd(c)) { break } @@ -20974,7 +20483,7 @@ func rewriteValueAMD64_OpAMD64MOVQstoreconstidx8_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -20982,7 +20491,6 @@ func rewriteValueAMD64_OpAMD64MOVQstoreconstidx8_0(v *Value) bool { } c := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(ValAndOff(x).canAdd(8 * c)) { break } @@ -21003,7 +20511,7 @@ func rewriteValueAMD64_OpAMD64MOVQstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64SHLQconst { @@ -21014,7 +20522,6 @@ func rewriteValueAMD64_OpAMD64MOVQstoreidx1_0(v *Value) bool { } idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(OpAMD64MOVQstoreidx8) v.AuxInt = c v.Aux = sym @@ -21030,7 +20537,7 @@ func rewriteValueAMD64_OpAMD64MOVQstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -21039,7 +20546,6 @@ func rewriteValueAMD64_OpAMD64MOVQstoreidx1_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + d)) { break } @@ -21058,7 +20564,7 @@ func rewriteValueAMD64_OpAMD64MOVQstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -21067,7 +20573,6 @@ func rewriteValueAMD64_OpAMD64MOVQstoreidx1_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + d)) { break } @@ -21086,7 +20591,7 @@ func rewriteValueAMD64_OpAMD64MOVQstoreidx1_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[3] + mem := v.Args[3] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { @@ -21094,7 +20599,6 @@ func rewriteValueAMD64_OpAMD64MOVQstoreidx1_0(v *Value) bool { } c := v_1.AuxInt w := v.Args[2] - mem := v.Args[3] if !(is32Bit(i + c)) { break } @@ -21115,7 +20619,7 @@ func rewriteValueAMD64_OpAMD64MOVQstoreidx8_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -21124,7 +20628,6 @@ func rewriteValueAMD64_OpAMD64MOVQstoreidx8_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + d)) { break } @@ -21143,7 +20646,7 @@ func rewriteValueAMD64_OpAMD64MOVQstoreidx8_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -21152,7 +20655,6 @@ func rewriteValueAMD64_OpAMD64MOVQstoreidx8_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + 8*d)) { break } @@ -21171,7 +20673,7 @@ func rewriteValueAMD64_OpAMD64MOVQstoreidx8_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[3] + mem := v.Args[3] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { @@ -21179,7 +20681,6 @@ func rewriteValueAMD64_OpAMD64MOVQstoreidx8_0(v *Value) bool { } c := v_1.AuxInt w := v.Args[2] - mem := v.Args[3] if !(is32Bit(i + 8*c)) { break } @@ -21200,14 +20701,13 @@ func rewriteValueAMD64_OpAMD64MOVSDload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -21224,7 +20724,7 @@ func rewriteValueAMD64_OpAMD64MOVSDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -21232,7 +20732,6 @@ func rewriteValueAMD64_OpAMD64MOVSDload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -21249,17 +20748,15 @@ func rewriteValueAMD64_OpAMD64MOVSDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -21277,17 +20774,15 @@ func rewriteValueAMD64_OpAMD64MOVSDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ8 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -21305,15 +20800,13 @@ func rewriteValueAMD64_OpAMD64MOVSDload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQ { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(ptr.Op != OpSB) { break } @@ -21361,7 +20854,7 @@ func rewriteValueAMD64_OpAMD64MOVSDloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64SHLQconst { @@ -21371,7 +20864,6 @@ func rewriteValueAMD64_OpAMD64MOVSDloadidx1_0(v *Value) bool { break } idx := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64MOVSDloadidx8) v.AuxInt = c v.Aux = sym @@ -21386,7 +20878,7 @@ func rewriteValueAMD64_OpAMD64MOVSDloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -21394,7 +20886,6 @@ func rewriteValueAMD64_OpAMD64MOVSDloadidx1_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -21412,7 +20903,7 @@ func rewriteValueAMD64_OpAMD64MOVSDloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -21420,7 +20911,6 @@ func rewriteValueAMD64_OpAMD64MOVSDloadidx1_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -21438,14 +20928,13 @@ func rewriteValueAMD64_OpAMD64MOVSDloadidx1_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is32Bit(i + c)) { break } @@ -21465,7 +20954,7 @@ func rewriteValueAMD64_OpAMD64MOVSDloadidx8_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -21473,7 +20962,6 @@ func rewriteValueAMD64_OpAMD64MOVSDloadidx8_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -21491,7 +20979,7 @@ func rewriteValueAMD64_OpAMD64MOVSDloadidx8_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -21499,7 +20987,6 @@ func rewriteValueAMD64_OpAMD64MOVSDloadidx8_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(c + 8*d)) { break } @@ -21517,14 +21004,13 @@ func rewriteValueAMD64_OpAMD64MOVSDloadidx8_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is32Bit(i + 8*c)) { break } @@ -21544,7 +21030,7 @@ func rewriteValueAMD64_OpAMD64MOVSDstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -21552,7 +21038,6 @@ func rewriteValueAMD64_OpAMD64MOVSDstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -21570,7 +21055,7 @@ func rewriteValueAMD64_OpAMD64MOVSDstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -21579,7 +21064,6 @@ func rewriteValueAMD64_OpAMD64MOVSDstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -21597,18 +21081,16 @@ func rewriteValueAMD64_OpAMD64MOVSDstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -21627,18 +21109,16 @@ func rewriteValueAMD64_OpAMD64MOVSDstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ8 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -21657,16 +21137,14 @@ func rewriteValueAMD64_OpAMD64MOVSDstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQ { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(ptr.Op != OpSB) { break } @@ -21685,14 +21163,13 @@ func rewriteValueAMD64_OpAMD64MOVSDstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQi2f { break } val := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64MOVQstore) v.AuxInt = off v.Aux = sym @@ -21710,7 +21187,7 @@ func rewriteValueAMD64_OpAMD64MOVSDstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64SHLQconst { @@ -21721,7 +21198,6 @@ func rewriteValueAMD64_OpAMD64MOVSDstoreidx1_0(v *Value) bool { } idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(OpAMD64MOVSDstoreidx8) v.AuxInt = c v.Aux = sym @@ -21737,7 +21213,7 @@ func rewriteValueAMD64_OpAMD64MOVSDstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -21746,7 +21222,6 @@ func rewriteValueAMD64_OpAMD64MOVSDstoreidx1_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + d)) { break } @@ -21765,7 +21240,7 @@ func rewriteValueAMD64_OpAMD64MOVSDstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -21774,7 +21249,6 @@ func rewriteValueAMD64_OpAMD64MOVSDstoreidx1_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + d)) { break } @@ -21793,7 +21267,7 @@ func rewriteValueAMD64_OpAMD64MOVSDstoreidx1_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[3] + mem := v.Args[3] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { @@ -21801,7 +21275,6 @@ func rewriteValueAMD64_OpAMD64MOVSDstoreidx1_0(v *Value) bool { } c := v_1.AuxInt w := v.Args[2] - mem := v.Args[3] if !(is32Bit(i + c)) { break } @@ -21822,7 +21295,7 @@ func rewriteValueAMD64_OpAMD64MOVSDstoreidx8_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -21831,7 +21304,6 @@ func rewriteValueAMD64_OpAMD64MOVSDstoreidx8_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + d)) { break } @@ -21850,7 +21322,7 @@ func rewriteValueAMD64_OpAMD64MOVSDstoreidx8_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -21859,7 +21331,6 @@ func rewriteValueAMD64_OpAMD64MOVSDstoreidx8_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + 8*d)) { break } @@ -21878,7 +21349,7 @@ func rewriteValueAMD64_OpAMD64MOVSDstoreidx8_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[3] + mem := v.Args[3] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { @@ -21886,7 +21357,6 @@ func rewriteValueAMD64_OpAMD64MOVSDstoreidx8_0(v *Value) bool { } c := v_1.AuxInt w := v.Args[2] - mem := v.Args[3] if !(is32Bit(i + 8*c)) { break } @@ -21907,14 +21377,13 @@ func rewriteValueAMD64_OpAMD64MOVSSload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -21931,7 +21400,7 @@ func rewriteValueAMD64_OpAMD64MOVSSload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -21939,7 +21408,6 @@ func rewriteValueAMD64_OpAMD64MOVSSload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -21956,17 +21424,15 @@ func rewriteValueAMD64_OpAMD64MOVSSload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -21984,17 +21450,15 @@ func rewriteValueAMD64_OpAMD64MOVSSload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ4 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -22012,15 +21476,13 @@ func rewriteValueAMD64_OpAMD64MOVSSload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQ { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(ptr.Op != OpSB) { break } @@ -22068,7 +21530,7 @@ func rewriteValueAMD64_OpAMD64MOVSSloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64SHLQconst { @@ -22078,7 +21540,6 @@ func rewriteValueAMD64_OpAMD64MOVSSloadidx1_0(v *Value) bool { break } idx := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64MOVSSloadidx4) v.AuxInt = c v.Aux = sym @@ -22093,7 +21554,7 @@ func rewriteValueAMD64_OpAMD64MOVSSloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -22101,7 +21562,6 @@ func rewriteValueAMD64_OpAMD64MOVSSloadidx1_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -22119,7 +21579,7 @@ func rewriteValueAMD64_OpAMD64MOVSSloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -22127,7 +21587,6 @@ func rewriteValueAMD64_OpAMD64MOVSSloadidx1_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -22145,14 +21604,13 @@ func rewriteValueAMD64_OpAMD64MOVSSloadidx1_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is32Bit(i + c)) { break } @@ -22172,7 +21630,7 @@ func rewriteValueAMD64_OpAMD64MOVSSloadidx4_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -22180,7 +21638,6 @@ func rewriteValueAMD64_OpAMD64MOVSSloadidx4_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -22198,7 +21655,7 @@ func rewriteValueAMD64_OpAMD64MOVSSloadidx4_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -22206,7 +21663,6 @@ func rewriteValueAMD64_OpAMD64MOVSSloadidx4_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(c + 4*d)) { break } @@ -22224,14 +21680,13 @@ func rewriteValueAMD64_OpAMD64MOVSSloadidx4_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is32Bit(i + 4*c)) { break } @@ -22251,7 +21706,7 @@ func rewriteValueAMD64_OpAMD64MOVSSstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -22259,7 +21714,6 @@ func rewriteValueAMD64_OpAMD64MOVSSstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -22277,7 +21731,7 @@ func rewriteValueAMD64_OpAMD64MOVSSstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -22286,7 +21740,6 @@ func rewriteValueAMD64_OpAMD64MOVSSstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -22304,18 +21757,16 @@ func rewriteValueAMD64_OpAMD64MOVSSstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -22334,18 +21785,16 @@ func rewriteValueAMD64_OpAMD64MOVSSstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ4 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -22364,16 +21813,14 @@ func rewriteValueAMD64_OpAMD64MOVSSstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQ { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(ptr.Op != OpSB) { break } @@ -22392,14 +21839,13 @@ func rewriteValueAMD64_OpAMD64MOVSSstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVLi2f { break } val := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64MOVLstore) v.AuxInt = off v.Aux = sym @@ -22417,7 +21863,7 @@ func rewriteValueAMD64_OpAMD64MOVSSstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64SHLQconst { @@ -22428,7 +21874,6 @@ func rewriteValueAMD64_OpAMD64MOVSSstoreidx1_0(v *Value) bool { } idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(OpAMD64MOVSSstoreidx4) v.AuxInt = c v.Aux = sym @@ -22444,7 +21889,7 @@ func rewriteValueAMD64_OpAMD64MOVSSstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -22453,7 +21898,6 @@ func rewriteValueAMD64_OpAMD64MOVSSstoreidx1_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + d)) { break } @@ -22472,7 +21916,7 @@ func rewriteValueAMD64_OpAMD64MOVSSstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -22481,7 +21925,6 @@ func rewriteValueAMD64_OpAMD64MOVSSstoreidx1_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + d)) { break } @@ -22500,7 +21943,7 @@ func rewriteValueAMD64_OpAMD64MOVSSstoreidx1_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[3] + mem := v.Args[3] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { @@ -22508,7 +21951,6 @@ func rewriteValueAMD64_OpAMD64MOVSSstoreidx1_0(v *Value) bool { } c := v_1.AuxInt w := v.Args[2] - mem := v.Args[3] if !(is32Bit(i + c)) { break } @@ -22529,7 +21971,7 @@ func rewriteValueAMD64_OpAMD64MOVSSstoreidx4_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -22538,7 +21980,6 @@ func rewriteValueAMD64_OpAMD64MOVSSstoreidx4_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + d)) { break } @@ -22557,7 +21998,7 @@ func rewriteValueAMD64_OpAMD64MOVSSstoreidx4_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -22566,7 +22007,6 @@ func rewriteValueAMD64_OpAMD64MOVSSstoreidx4_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + 4*d)) { break } @@ -22585,7 +22025,7 @@ func rewriteValueAMD64_OpAMD64MOVSSstoreidx4_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[3] + mem := v.Args[3] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { @@ -22593,7 +22033,6 @@ func rewriteValueAMD64_OpAMD64MOVSSstoreidx4_0(v *Value) bool { } c := v_1.AuxInt w := v.Args[2] - mem := v.Args[3] if !(is32Bit(i + 4*c)) { break } @@ -22609,7 +22048,6 @@ func rewriteValueAMD64_OpAMD64MOVSSstoreidx4_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVWQSX_0(v *Value) bool { b := v.Block - _ = b // match: (MOVWQSX x:(MOVWload [off] {sym} ptr mem)) // cond: x.Uses == 1 && clobber(x) // result: @x.Block (MOVWQSXload [off] {sym} ptr mem) @@ -22620,9 +22058,8 @@ func rewriteValueAMD64_OpAMD64MOVWQSX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -22646,9 +22083,8 @@ func rewriteValueAMD64_OpAMD64MOVWQSX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -22672,9 +22108,8 @@ func rewriteValueAMD64_OpAMD64MOVWQSX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -22765,7 +22200,7 @@ func rewriteValueAMD64_OpAMD64MOVWQSXload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -22773,7 +22208,6 @@ func rewriteValueAMD64_OpAMD64MOVWQSXload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -22788,7 +22222,6 @@ func rewriteValueAMD64_OpAMD64MOVWQSXload_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVWQZX_0(v *Value) bool { b := v.Block - _ = b // match: (MOVWQZX x:(MOVWload [off] {sym} ptr mem)) // cond: x.Uses == 1 && clobber(x) // result: @x.Block (MOVWload [off] {sym} ptr mem) @@ -22799,9 +22232,8 @@ func rewriteValueAMD64_OpAMD64MOVWQZX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -22825,9 +22257,8 @@ func rewriteValueAMD64_OpAMD64MOVWQZX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -22851,9 +22282,8 @@ func rewriteValueAMD64_OpAMD64MOVWQZX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -22890,10 +22320,9 @@ func rewriteValueAMD64_OpAMD64MOVWQZX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -22918,10 +22347,9 @@ func rewriteValueAMD64_OpAMD64MOVWQZX_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -22981,9 +22409,7 @@ func rewriteValueAMD64_OpAMD64MOVWQZX_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVWload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVWload [off] {sym} ptr (MOVWstore [off2] {sym2} ptr2 x _)) // cond: sym == sym2 && off == off2 && isSamePtr(ptr, ptr2) // result: (MOVWQZX x) @@ -23014,14 +22440,13 @@ func rewriteValueAMD64_OpAMD64MOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -23038,7 +22463,7 @@ func rewriteValueAMD64_OpAMD64MOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -23046,7 +22471,6 @@ func rewriteValueAMD64_OpAMD64MOVWload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -23063,17 +22487,15 @@ func rewriteValueAMD64_OpAMD64MOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -23091,17 +22513,15 @@ func rewriteValueAMD64_OpAMD64MOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ2 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -23119,15 +22539,13 @@ func rewriteValueAMD64_OpAMD64MOVWload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQ { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(ptr.Op != OpSB) { break } @@ -23145,7 +22563,7 @@ func rewriteValueAMD64_OpAMD64MOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAL { break @@ -23153,7 +22571,6 @@ func rewriteValueAMD64_OpAMD64MOVWload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -23170,14 +22587,13 @@ func rewriteValueAMD64_OpAMD64MOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDLconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -23215,7 +22631,7 @@ func rewriteValueAMD64_OpAMD64MOVWloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64SHLQconst { @@ -23225,7 +22641,6 @@ func rewriteValueAMD64_OpAMD64MOVWloadidx1_0(v *Value) bool { break } idx := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64MOVWloadidx2) v.AuxInt = c v.Aux = sym @@ -23240,7 +22655,7 @@ func rewriteValueAMD64_OpAMD64MOVWloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64SHLQconst { break @@ -23250,7 +22665,6 @@ func rewriteValueAMD64_OpAMD64MOVWloadidx1_0(v *Value) bool { } idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64MOVWloadidx2) v.AuxInt = c v.Aux = sym @@ -23265,7 +22679,7 @@ func rewriteValueAMD64_OpAMD64MOVWloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -23273,7 +22687,6 @@ func rewriteValueAMD64_OpAMD64MOVWloadidx1_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -23291,7 +22704,7 @@ func rewriteValueAMD64_OpAMD64MOVWloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] idx := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -23299,7 +22712,6 @@ func rewriteValueAMD64_OpAMD64MOVWloadidx1_0(v *Value) bool { } d := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -23317,7 +22729,7 @@ func rewriteValueAMD64_OpAMD64MOVWloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -23325,7 +22737,6 @@ func rewriteValueAMD64_OpAMD64MOVWloadidx1_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -23343,7 +22754,7 @@ func rewriteValueAMD64_OpAMD64MOVWloadidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -23351,7 +22762,6 @@ func rewriteValueAMD64_OpAMD64MOVWloadidx1_0(v *Value) bool { d := v_0.AuxInt idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -23369,14 +22779,13 @@ func rewriteValueAMD64_OpAMD64MOVWloadidx1_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is32Bit(i + c)) { break } @@ -23393,14 +22802,13 @@ func rewriteValueAMD64_OpAMD64MOVWloadidx1_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVQconst { break } c := v_0.AuxInt p := v.Args[1] - mem := v.Args[2] if !(is32Bit(i + c)) { break } @@ -23420,7 +22828,7 @@ func rewriteValueAMD64_OpAMD64MOVWloadidx2_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -23428,7 +22836,6 @@ func rewriteValueAMD64_OpAMD64MOVWloadidx2_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(is32Bit(c + d)) { break } @@ -23446,7 +22853,7 @@ func rewriteValueAMD64_OpAMD64MOVWloadidx2_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -23454,7 +22861,6 @@ func rewriteValueAMD64_OpAMD64MOVWloadidx2_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(c + 2*d)) { break } @@ -23472,14 +22878,13 @@ func rewriteValueAMD64_OpAMD64MOVWloadidx2_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is32Bit(i + 2*c)) { break } @@ -23499,14 +22904,13 @@ func rewriteValueAMD64_OpAMD64MOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVWQSX { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64MOVWstore) v.AuxInt = off v.Aux = sym @@ -23521,14 +22925,13 @@ func rewriteValueAMD64_OpAMD64MOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVWQZX { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64MOVWstore) v.AuxInt = off v.Aux = sym @@ -23543,7 +22946,7 @@ func rewriteValueAMD64_OpAMD64MOVWstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -23551,7 +22954,6 @@ func rewriteValueAMD64_OpAMD64MOVWstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -23569,14 +22971,13 @@ func rewriteValueAMD64_OpAMD64MOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVLconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(validOff(off)) { break } @@ -23593,14 +22994,13 @@ func rewriteValueAMD64_OpAMD64MOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(validOff(off)) { break } @@ -23617,7 +23017,7 @@ func rewriteValueAMD64_OpAMD64MOVWstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -23626,7 +23026,6 @@ func rewriteValueAMD64_OpAMD64MOVWstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -23644,18 +23043,16 @@ func rewriteValueAMD64_OpAMD64MOVWstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ1 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -23674,18 +23071,16 @@ func rewriteValueAMD64_OpAMD64MOVWstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ2 { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -23704,16 +23099,14 @@ func rewriteValueAMD64_OpAMD64MOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQ { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(ptr.Op != OpSB) { break } @@ -23752,14 +23145,13 @@ func rewriteValueAMD64_OpAMD64MOVWstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if w != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -23775,9 +23167,7 @@ func rewriteValueAMD64_OpAMD64MOVWstore_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVWstore_10(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MOVWstore [i] {s} p (SHRQconst [16] w) x:(MOVWstore [i-2] {s} p w mem)) // cond: x.Uses == 1 && clobber(x) // result: (MOVLstore [i-2] {s} p w mem) @@ -23804,14 +23194,13 @@ func rewriteValueAMD64_OpAMD64MOVWstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if w != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -23847,7 +23236,7 @@ func rewriteValueAMD64_OpAMD64MOVWstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -23861,7 +23250,6 @@ func rewriteValueAMD64_OpAMD64MOVWstore_10(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -23897,7 +23285,7 @@ func rewriteValueAMD64_OpAMD64MOVWstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -23911,7 +23299,6 @@ func rewriteValueAMD64_OpAMD64MOVWstore_10(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -23937,9 +23324,8 @@ func rewriteValueAMD64_OpAMD64MOVWstore_10(v *Value) bool { } j := x1.AuxInt s2 := x1.Aux - _ = x1.Args[1] - p2 := x1.Args[0] mem := x1.Args[1] + p2 := x1.Args[0] mem2 := v.Args[2] if mem2.Op != OpAMD64MOVWstore { break @@ -23996,7 +23382,7 @@ func rewriteValueAMD64_OpAMD64MOVWstore_10(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAL { break @@ -24005,7 +23391,6 @@ func rewriteValueAMD64_OpAMD64MOVWstore_10(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -24023,7 +23408,7 @@ func rewriteValueAMD64_OpAMD64MOVWstore_10(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDLconst { break @@ -24031,7 +23416,6 @@ func rewriteValueAMD64_OpAMD64MOVWstore_10(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -24052,14 +23436,13 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconst_0(v *Value) bool { for { sc := v.AuxInt s := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(sc).canAdd(off)) { break } @@ -24076,7 +23459,7 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconst_0(v *Value) bool { for { sc := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -24084,7 +23467,6 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconst_0(v *Value) bool { off := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd(off)) { break } @@ -24101,17 +23483,15 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconst_0(v *Value) bool { for { x := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ1 { break } off := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(canMergeSym(sym1, sym2)) { break } @@ -24129,17 +23509,15 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconst_0(v *Value) bool { for { x := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ2 { break } off := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(canMergeSym(sym1, sym2)) { break } @@ -24157,15 +23535,13 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconst_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQ { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] v.reset(OpAMD64MOVWstoreconstidx1) v.AuxInt = x v.Aux = sym @@ -24190,11 +23566,10 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconst_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[1] + mem := x.Args[1] if p != x.Args[0] { break } - mem := x.Args[1] if !(x.Uses == 1 && ValAndOff(a).Off()+2 == ValAndOff(c).Off() && clobber(x)) { break } @@ -24221,11 +23596,10 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconst_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[1] + mem := x.Args[1] if p != x.Args[0] { break } - mem := x.Args[1] if !(x.Uses == 1 && ValAndOff(a).Off()+2 == ValAndOff(c).Off() && clobber(x)) { break } @@ -24242,7 +23616,7 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconst_0(v *Value) bool { for { sc := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAL { break @@ -24250,7 +23624,6 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconst_0(v *Value) bool { off := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd(off)) { break } @@ -24267,14 +23640,13 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconst_0(v *Value) bool { for { sc := v.AuxInt s := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDLconst { break } off := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(sc).canAdd(off)) { break } @@ -24294,7 +23666,7 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconstidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64SHLQconst { @@ -24304,7 +23676,6 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconstidx1_0(v *Value) bool { break } idx := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64MOVWstoreconstidx2) v.AuxInt = c v.Aux = sym @@ -24319,7 +23690,7 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconstidx1_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -24327,7 +23698,6 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconstidx1_0(v *Value) bool { c := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(ValAndOff(x).canAdd(c)) { break } @@ -24345,7 +23715,7 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconstidx1_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -24353,7 +23723,6 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconstidx1_0(v *Value) bool { } c := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(ValAndOff(x).canAdd(c)) { break } @@ -24382,14 +23751,13 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconstidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if i != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && ValAndOff(a).Off()+2 == ValAndOff(c).Off() && clobber(x)) { break } @@ -24405,14 +23773,13 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconstidx1_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVWstoreconstidx2_0(v *Value) bool { b := v.Block - _ = b // match: (MOVWstoreconstidx2 [x] {sym} (ADDQconst [c] ptr) idx mem) // cond: ValAndOff(x).canAdd(c) // result: (MOVWstoreconstidx2 [ValAndOff(x).add(c)] {sym} ptr idx mem) for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -24420,7 +23787,6 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconstidx2_0(v *Value) bool { c := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(ValAndOff(x).canAdd(c)) { break } @@ -24438,7 +23804,7 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconstidx2_0(v *Value) bool { for { x := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -24446,7 +23812,6 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconstidx2_0(v *Value) bool { } c := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(ValAndOff(x).canAdd(2 * c)) { break } @@ -24475,14 +23840,13 @@ func rewriteValueAMD64_OpAMD64MOVWstoreconstidx2_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if i != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && ValAndOff(a).Off()+2 == ValAndOff(c).Off() && clobber(x)) { break } @@ -24506,7 +23870,7 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64SHLQconst { @@ -24517,7 +23881,6 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx1_0(v *Value) bool { } idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(OpAMD64MOVWstoreidx2) v.AuxInt = c v.Aux = sym @@ -24533,7 +23896,7 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -24542,7 +23905,6 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx1_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + d)) { break } @@ -24561,7 +23923,7 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx1_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -24570,7 +23932,6 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx1_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + d)) { break } @@ -24610,7 +23971,7 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -24620,7 +23981,6 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx1_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -24660,7 +24020,7 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -24670,7 +24030,6 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx1_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -24708,7 +24067,7 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -24725,7 +24084,6 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx1_0(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -24763,7 +24121,7 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx1_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -24780,7 +24138,6 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx1_0(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -24799,7 +24156,7 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx1_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[3] + mem := v.Args[3] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { @@ -24807,7 +24164,6 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx1_0(v *Value) bool { } c := v_1.AuxInt w := v.Args[2] - mem := v.Args[3] if !(is32Bit(i + c)) { break } @@ -24823,14 +24179,13 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx1_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MOVWstoreidx2_0(v *Value) bool { b := v.Block - _ = b // match: (MOVWstoreidx2 [c] {sym} (ADDQconst [d] ptr) idx val mem) // cond: is32Bit(c+d) // result: (MOVWstoreidx2 [c+d] {sym} ptr idx val mem) for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -24839,7 +24194,6 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx2_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + d)) { break } @@ -24858,7 +24212,7 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx2_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -24867,7 +24221,6 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx2_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is32Bit(c + 2*d)) { break } @@ -24907,7 +24260,7 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx2_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -24917,7 +24270,6 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx2_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -24960,7 +24312,7 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx2_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -24970,7 +24322,6 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx2_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -25011,7 +24362,7 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx2_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -25028,7 +24379,6 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx2_0(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -25050,7 +24400,7 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx2_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[3] + mem := v.Args[3] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { @@ -25058,7 +24408,6 @@ func rewriteValueAMD64_OpAMD64MOVWstoreidx2_0(v *Value) bool { } c := v_1.AuxInt w := v.Args[2] - mem := v.Args[3] if !(is32Bit(i + 2*c)) { break } @@ -25093,13 +24442,12 @@ func rewriteValueAMD64_OpAMD64MULL_0(v *Value) bool { // cond: // result: (MULLconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpAMD64MULLconst) v.AuxInt = c v.AddArg(x) @@ -25109,7 +24457,6 @@ func rewriteValueAMD64_OpAMD64MULL_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MULLconst_0(v *Value) bool { b := v.Block - _ = b // match: (MULLconst [c] (MULLconst [d] x)) // cond: // result: (MULLconst [int64(int32(c * d))] x) @@ -25253,7 +24600,6 @@ func rewriteValueAMD64_OpAMD64MULLconst_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MULLconst_10(v *Value) bool { b := v.Block - _ = b // match: (MULLconst [ 9] x) // cond: // result: (LEAL8 x x) @@ -25421,7 +24767,6 @@ func rewriteValueAMD64_OpAMD64MULLconst_10(v *Value) bool { } func rewriteValueAMD64_OpAMD64MULLconst_20(v *Value) bool { b := v.Block - _ = b // match: (MULLconst [73] x) // cond: // result: (LEAL8 x (LEAL8 x x)) @@ -25636,13 +24981,12 @@ func rewriteValueAMD64_OpAMD64MULQ_0(v *Value) bool { // cond: is32Bit(c) // result: (MULQconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVQconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c)) { break } @@ -25655,7 +24999,6 @@ func rewriteValueAMD64_OpAMD64MULQ_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MULQconst_0(v *Value) bool { b := v.Block - _ = b // match: (MULQconst [c] (MULQconst [d] x)) // cond: is32Bit(c*d) // result: (MULQconst [c * d] x) @@ -25802,7 +25145,6 @@ func rewriteValueAMD64_OpAMD64MULQconst_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MULQconst_10(v *Value) bool { b := v.Block - _ = b // match: (MULQconst [ 9] x) // cond: // result: (LEAQ8 x x) @@ -25970,7 +25312,6 @@ func rewriteValueAMD64_OpAMD64MULQconst_10(v *Value) bool { } func rewriteValueAMD64_OpAMD64MULQconst_20(v *Value) bool { b := v.Block - _ = b // match: (MULQconst [73] x) // cond: // result: (LEAQ8 x (LEAQ8 x x)) @@ -26174,9 +25515,8 @@ func rewriteValueAMD64_OpAMD64MULSD_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -26192,17 +25532,15 @@ func rewriteValueAMD64_OpAMD64MULSD_0(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (MULSDload x [off] {sym} ptr mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != OpAMD64MOVSDload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -26218,16 +25556,14 @@ func rewriteValueAMD64_OpAMD64MULSD_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MULSDload_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MULSDload [off1] {sym} val (ADDQconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (MULSDload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -26235,7 +25571,6 @@ func rewriteValueAMD64_OpAMD64MULSDload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -26253,7 +25588,7 @@ func rewriteValueAMD64_OpAMD64MULSDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64LEAQ { @@ -26262,7 +25597,6 @@ func rewriteValueAMD64_OpAMD64MULSDload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -26320,9 +25654,8 @@ func rewriteValueAMD64_OpAMD64MULSS_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -26338,17 +25671,15 @@ func rewriteValueAMD64_OpAMD64MULSS_0(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (MULSSload x [off] {sym} ptr mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != OpAMD64MOVSSload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -26364,16 +25695,14 @@ func rewriteValueAMD64_OpAMD64MULSS_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64MULSSload_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MULSSload [off1] {sym} val (ADDQconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (MULSSload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -26381,7 +25710,6 @@ func rewriteValueAMD64_OpAMD64MULSSload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -26399,7 +25727,7 @@ func rewriteValueAMD64_OpAMD64MULSSload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64LEAQ { @@ -26408,7 +25736,6 @@ func rewriteValueAMD64_OpAMD64MULSSload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -26569,19 +25896,17 @@ func rewriteValueAMD64_OpAMD64NOTQ_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORL_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ORL (SHLL (MOVLconst [1]) y) x) // cond: !config.nacl // result: (BTSL x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SHLL { break } - _ = v_0.Args[1] + y := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpAMD64MOVLconst { break @@ -26589,8 +25914,6 @@ func rewriteValueAMD64_OpAMD64ORL_0(v *Value) bool { if v_0_0.AuxInt != 1 { break } - y := v_0.Args[1] - x := v.Args[1] if !(!config.nacl) { break } @@ -26609,7 +25932,7 @@ func rewriteValueAMD64_OpAMD64ORL_0(v *Value) bool { if v_1.Op != OpAMD64SHLL { break } - _ = v_1.Args[1] + y := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpAMD64MOVLconst { break @@ -26617,7 +25940,6 @@ func rewriteValueAMD64_OpAMD64ORL_0(v *Value) bool { if v_1_0.AuxInt != 1 { break } - y := v_1.Args[1] if !(!config.nacl) { break } @@ -26630,13 +25952,12 @@ func rewriteValueAMD64_OpAMD64ORL_0(v *Value) bool { // cond: isUint32PowerOfTwo(c) && uint64(c) >= 128 && !config.nacl // result: (BTSLconst [log2uint32(c)] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isUint32PowerOfTwo(c) && uint64(c) >= 128 && !config.nacl) { break } @@ -26684,13 +26005,12 @@ func rewriteValueAMD64_OpAMD64ORL_0(v *Value) bool { // cond: // result: (ORLconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpAMD64ORLconst) v.AuxInt = c v.AddArg(x) @@ -26874,9 +26194,8 @@ func rewriteValueAMD64_OpAMD64ORL_10(v *Value) bool { if v_0.Op != OpAMD64SHLL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ANDL { break @@ -26943,9 +26262,8 @@ func rewriteValueAMD64_OpAMD64ORL_10(v *Value) bool { if v_0.Op != OpAMD64SHLL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ANDL { break @@ -27150,9 +26468,8 @@ func rewriteValueAMD64_OpAMD64ORL_10(v *Value) bool { if v_0.Op != OpAMD64SHLL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ANDL { break @@ -27219,9 +26536,8 @@ func rewriteValueAMD64_OpAMD64ORL_10(v *Value) bool { if v_0.Op != OpAMD64SHLL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ANDL { break @@ -27429,9 +26745,8 @@ func rewriteValueAMD64_OpAMD64ORL_20(v *Value) bool { if v_0.Op != OpAMD64SHRL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ANDL { break @@ -27498,9 +26813,8 @@ func rewriteValueAMD64_OpAMD64ORL_20(v *Value) bool { if v_0.Op != OpAMD64SHRL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ANDL { break @@ -27705,9 +27019,8 @@ func rewriteValueAMD64_OpAMD64ORL_20(v *Value) bool { if v_0.Op != OpAMD64SHRL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ANDL { break @@ -27774,9 +27087,8 @@ func rewriteValueAMD64_OpAMD64ORL_20(v *Value) bool { if v_0.Op != OpAMD64SHRL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ANDL { break @@ -29806,9 +29118,7 @@ func rewriteValueAMD64_OpAMD64ORL_40(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORL_50(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORL (SHRB x (ANDLconst y [ 7])) (SHLL x (NEGL (ADDLconst (ANDLconst y [ 7]) [ -8])))) // cond: v.Type.Size() == 1 // result: (RORB x y) @@ -29925,9 +29235,8 @@ func rewriteValueAMD64_OpAMD64ORL_50(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -29946,9 +29255,8 @@ func rewriteValueAMD64_OpAMD64ORL_50(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] sh := v.Args[1] if sh.Op != OpAMD64SHLLconst { break @@ -30002,9 +29310,8 @@ func rewriteValueAMD64_OpAMD64ORL_50(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] x0 := v.Args[1] if x0.Op != OpAMD64MOVBload { break @@ -30044,9 +29351,8 @@ func rewriteValueAMD64_OpAMD64ORL_50(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] sh := v.Args[1] if sh.Op != OpAMD64SHLLconst { break @@ -30100,9 +29406,8 @@ func rewriteValueAMD64_OpAMD64ORL_50(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] x0 := v.Args[1] if x0.Op != OpAMD64MOVWload { break @@ -30147,14 +29452,13 @@ func rewriteValueAMD64_OpAMD64ORL_50(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] or := v.Args[1] if or.Op != OpAMD64ORL { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLLconst { break @@ -30175,7 +29479,6 @@ func rewriteValueAMD64_OpAMD64ORL_50(v *Value) bool { if mem != x0.Args[1] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0+8 && j0%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -30211,9 +29514,8 @@ func rewriteValueAMD64_OpAMD64ORL_50(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] or := v.Args[1] if or.Op != OpAMD64ORL { break @@ -30268,7 +29570,7 @@ func rewriteValueAMD64_OpAMD64ORL_50(v *Value) bool { if or.Op != OpAMD64ORL { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLLconst { break @@ -30280,10 +29582,8 @@ func rewriteValueAMD64_OpAMD64ORL_50(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] - y := or.Args[1] + p := x0.Args[0] s1 := v.Args[1] if s1.Op != OpAMD64SHLLconst { break @@ -30327,9 +29627,7 @@ func rewriteValueAMD64_OpAMD64ORL_50(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORL_60(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORL or:(ORL y s0:(SHLLconst [j0] x0:(MOVBload [i0] {s} p mem))) s1:(SHLLconst [j1] x1:(MOVBload [i1] {s} p mem))) // cond: i1 == i0+1 && j1 == j0+8 && j0 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (ORL (SHLLconst [j0] (MOVWload [i0] {s} p mem)) y) @@ -30352,9 +29650,8 @@ func rewriteValueAMD64_OpAMD64ORL_60(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] s1 := v.Args[1] if s1.Op != OpAMD64SHLLconst { break @@ -30405,10 +29702,9 @@ func rewriteValueAMD64_OpAMD64ORL_60(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLLconst { break @@ -30459,10 +29755,9 @@ func rewriteValueAMD64_OpAMD64ORL_60(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLLconst { break @@ -30513,10 +29808,9 @@ func rewriteValueAMD64_OpAMD64ORL_60(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLLconst { break @@ -30567,10 +29861,9 @@ func rewriteValueAMD64_OpAMD64ORL_60(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLLconst { break @@ -30628,10 +29921,9 @@ func rewriteValueAMD64_OpAMD64ORL_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpAMD64MOVBloadidx1 { break @@ -30682,10 +29974,9 @@ func rewriteValueAMD64_OpAMD64ORL_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpAMD64MOVBloadidx1 { break @@ -30736,10 +30027,9 @@ func rewriteValueAMD64_OpAMD64ORL_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpAMD64MOVBloadidx1 { break @@ -30790,10 +30080,9 @@ func rewriteValueAMD64_OpAMD64ORL_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpAMD64MOVBloadidx1 { break @@ -30837,10 +30126,9 @@ func rewriteValueAMD64_OpAMD64ORL_60(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLLconst { break @@ -30884,9 +30172,7 @@ func rewriteValueAMD64_OpAMD64ORL_60(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORL_70(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORL x0:(MOVWloadidx1 [i0] {s} idx p mem) sh:(SHLLconst [16] x1:(MOVWloadidx1 [i1] {s} p idx mem))) // cond: i1 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh) // result: @mergePoint(b,x0,x1) (MOVLloadidx1 [i0] {s} p idx mem) @@ -30898,10 +30184,9 @@ func rewriteValueAMD64_OpAMD64ORL_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLLconst { break @@ -30952,10 +30237,9 @@ func rewriteValueAMD64_OpAMD64ORL_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLLconst { break @@ -31006,10 +30290,9 @@ func rewriteValueAMD64_OpAMD64ORL_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLLconst { break @@ -31067,10 +30350,9 @@ func rewriteValueAMD64_OpAMD64ORL_70(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpAMD64MOVWloadidx1 { break @@ -31121,10 +30403,9 @@ func rewriteValueAMD64_OpAMD64ORL_70(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpAMD64MOVWloadidx1 { break @@ -31175,10 +30456,9 @@ func rewriteValueAMD64_OpAMD64ORL_70(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpAMD64MOVWloadidx1 { break @@ -31229,10 +30509,9 @@ func rewriteValueAMD64_OpAMD64ORL_70(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpAMD64MOVWloadidx1 { break @@ -31281,15 +30560,14 @@ func rewriteValueAMD64_OpAMD64ORL_70(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORL { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLLconst { break @@ -31313,7 +30591,6 @@ func rewriteValueAMD64_OpAMD64ORL_70(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0+8 && j0%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -31350,15 +30627,14 @@ func rewriteValueAMD64_OpAMD64ORL_70(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORL { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLLconst { break @@ -31382,7 +30658,6 @@ func rewriteValueAMD64_OpAMD64ORL_70(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0+8 && j0%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -31419,15 +30694,14 @@ func rewriteValueAMD64_OpAMD64ORL_70(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORL { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLLconst { break @@ -31451,7 +30725,6 @@ func rewriteValueAMD64_OpAMD64ORL_70(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0+8 && j0%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -31476,9 +30749,7 @@ func rewriteValueAMD64_OpAMD64ORL_70(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORL_80(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORL s1:(SHLLconst [j1] x1:(MOVBloadidx1 [i1] {s} idx p mem)) or:(ORL s0:(SHLLconst [j0] x0:(MOVBloadidx1 [i0] {s} idx p mem)) y)) // cond: i1 == i0+1 && j1 == j0+8 && j0 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (ORL (SHLLconst [j0] (MOVWloadidx1 [i0] {s} p idx mem)) y) @@ -31495,15 +30766,14 @@ func rewriteValueAMD64_OpAMD64ORL_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORL { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLLconst { break @@ -31527,7 +30797,6 @@ func rewriteValueAMD64_OpAMD64ORL_80(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0+8 && j0%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -31564,10 +30833,9 @@ func rewriteValueAMD64_OpAMD64ORL_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORL { break @@ -31633,10 +30901,9 @@ func rewriteValueAMD64_OpAMD64ORL_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORL { break @@ -31702,10 +30969,9 @@ func rewriteValueAMD64_OpAMD64ORL_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORL { break @@ -31771,10 +31037,9 @@ func rewriteValueAMD64_OpAMD64ORL_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORL { break @@ -31833,7 +31098,7 @@ func rewriteValueAMD64_OpAMD64ORL_80(v *Value) bool { if or.Op != OpAMD64ORL { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLLconst { break @@ -31845,11 +31110,9 @@ func rewriteValueAMD64_OpAMD64ORL_80(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpAMD64SHLLconst { break @@ -31902,7 +31165,7 @@ func rewriteValueAMD64_OpAMD64ORL_80(v *Value) bool { if or.Op != OpAMD64ORL { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLLconst { break @@ -31914,11 +31177,9 @@ func rewriteValueAMD64_OpAMD64ORL_80(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpAMD64SHLLconst { break @@ -31984,10 +31245,9 @@ func rewriteValueAMD64_OpAMD64ORL_80(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpAMD64SHLLconst { break @@ -32053,10 +31313,9 @@ func rewriteValueAMD64_OpAMD64ORL_80(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpAMD64SHLLconst { break @@ -32109,7 +31368,7 @@ func rewriteValueAMD64_OpAMD64ORL_80(v *Value) bool { if or.Op != OpAMD64ORL { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLLconst { break @@ -32121,11 +31380,9 @@ func rewriteValueAMD64_OpAMD64ORL_80(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpAMD64SHLLconst { break @@ -32173,9 +31430,7 @@ func rewriteValueAMD64_OpAMD64ORL_80(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORL_90(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORL or:(ORL s0:(SHLLconst [j0] x0:(MOVBloadidx1 [i0] {s} idx p mem)) y) s1:(SHLLconst [j1] x1:(MOVBloadidx1 [i1] {s} idx p mem))) // cond: i1 == i0+1 && j1 == j0+8 && j0 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (ORL (SHLLconst [j0] (MOVWloadidx1 [i0] {s} p idx mem)) y) @@ -32185,7 +31440,7 @@ func rewriteValueAMD64_OpAMD64ORL_90(v *Value) bool { if or.Op != OpAMD64ORL { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLLconst { break @@ -32197,11 +31452,9 @@ func rewriteValueAMD64_OpAMD64ORL_90(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpAMD64SHLLconst { break @@ -32267,10 +31520,9 @@ func rewriteValueAMD64_OpAMD64ORL_90(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpAMD64SHLLconst { break @@ -32336,10 +31588,9 @@ func rewriteValueAMD64_OpAMD64ORL_90(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpAMD64SHLLconst { break @@ -32394,9 +31645,8 @@ func rewriteValueAMD64_OpAMD64ORL_90(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] sh := v.Args[1] if sh.Op != OpAMD64SHLLconst { break @@ -32453,9 +31703,8 @@ func rewriteValueAMD64_OpAMD64ORL_90(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] x1 := v.Args[1] if x1.Op != OpAMD64MOVBload { break @@ -32505,9 +31754,8 @@ func rewriteValueAMD64_OpAMD64ORL_90(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] sh := v.Args[1] if sh.Op != OpAMD64SHLLconst { break @@ -32577,9 +31825,8 @@ func rewriteValueAMD64_OpAMD64ORL_90(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] r1 := v.Args[1] if r1.Op != OpAMD64ROLWconst { break @@ -32633,14 +31880,13 @@ func rewriteValueAMD64_OpAMD64ORL_90(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] or := v.Args[1] if or.Op != OpAMD64ORL { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLLconst { break @@ -32661,7 +31907,6 @@ func rewriteValueAMD64_OpAMD64ORL_90(v *Value) bool { if mem != x1.Args[1] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0-8 && j1%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -32700,9 +31945,8 @@ func rewriteValueAMD64_OpAMD64ORL_90(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] or := v.Args[1] if or.Op != OpAMD64ORL { break @@ -32760,7 +32004,7 @@ func rewriteValueAMD64_OpAMD64ORL_90(v *Value) bool { if or.Op != OpAMD64ORL { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLLconst { break @@ -32772,10 +32016,8 @@ func rewriteValueAMD64_OpAMD64ORL_90(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] - y := or.Args[1] + p := x1.Args[0] s0 := v.Args[1] if s0.Op != OpAMD64SHLLconst { break @@ -32822,9 +32064,7 @@ func rewriteValueAMD64_OpAMD64ORL_90(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORL_100(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORL or:(ORL y s1:(SHLLconst [j1] x1:(MOVBload [i1] {s} p mem))) s0:(SHLLconst [j0] x0:(MOVBload [i0] {s} p mem))) // cond: i1 == i0+1 && j1 == j0-8 && j1 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (ORL (SHLLconst [j1] (ROLWconst [8] (MOVWload [i0] {s} p mem))) y) @@ -32847,9 +32087,8 @@ func rewriteValueAMD64_OpAMD64ORL_100(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] s0 := v.Args[1] if s0.Op != OpAMD64SHLLconst { break @@ -32903,10 +32142,9 @@ func rewriteValueAMD64_OpAMD64ORL_100(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLLconst { break @@ -32960,10 +32198,9 @@ func rewriteValueAMD64_OpAMD64ORL_100(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLLconst { break @@ -33017,10 +32254,9 @@ func rewriteValueAMD64_OpAMD64ORL_100(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLLconst { break @@ -33074,10 +32310,9 @@ func rewriteValueAMD64_OpAMD64ORL_100(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLLconst { break @@ -33138,10 +32373,9 @@ func rewriteValueAMD64_OpAMD64ORL_100(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpAMD64MOVBloadidx1 { break @@ -33195,10 +32429,9 @@ func rewriteValueAMD64_OpAMD64ORL_100(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpAMD64MOVBloadidx1 { break @@ -33252,10 +32485,9 @@ func rewriteValueAMD64_OpAMD64ORL_100(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpAMD64MOVBloadidx1 { break @@ -33309,10 +32541,9 @@ func rewriteValueAMD64_OpAMD64ORL_100(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpAMD64MOVBloadidx1 { break @@ -33366,10 +32597,9 @@ func rewriteValueAMD64_OpAMD64ORL_100(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLLconst { break @@ -33422,9 +32652,7 @@ func rewriteValueAMD64_OpAMD64ORL_100(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORL_110(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORL r1:(ROLWconst [8] x1:(MOVWloadidx1 [i1] {s} idx p mem)) sh:(SHLLconst [16] r0:(ROLWconst [8] x0:(MOVWloadidx1 [i0] {s} p idx mem)))) // cond: i1 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(sh) // result: @mergePoint(b,x0,x1) (BSWAPL (MOVLloadidx1 [i0] {s} p idx mem)) @@ -33443,10 +32671,9 @@ func rewriteValueAMD64_OpAMD64ORL_110(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLLconst { break @@ -33513,10 +32740,9 @@ func rewriteValueAMD64_OpAMD64ORL_110(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLLconst { break @@ -33583,10 +32809,9 @@ func rewriteValueAMD64_OpAMD64ORL_110(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLLconst { break @@ -33660,10 +32885,9 @@ func rewriteValueAMD64_OpAMD64ORL_110(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] r1 := v.Args[1] if r1.Op != OpAMD64ROLWconst { break @@ -33730,10 +32954,9 @@ func rewriteValueAMD64_OpAMD64ORL_110(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] r1 := v.Args[1] if r1.Op != OpAMD64ROLWconst { break @@ -33800,10 +33023,9 @@ func rewriteValueAMD64_OpAMD64ORL_110(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] r1 := v.Args[1] if r1.Op != OpAMD64ROLWconst { break @@ -33870,10 +33092,9 @@ func rewriteValueAMD64_OpAMD64ORL_110(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] r1 := v.Args[1] if r1.Op != OpAMD64ROLWconst { break @@ -33931,15 +33152,14 @@ func rewriteValueAMD64_OpAMD64ORL_110(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORL { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLLconst { break @@ -33963,7 +33183,6 @@ func rewriteValueAMD64_OpAMD64ORL_110(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0-8 && j1%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -34003,15 +33222,14 @@ func rewriteValueAMD64_OpAMD64ORL_110(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORL { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLLconst { break @@ -34035,7 +33253,6 @@ func rewriteValueAMD64_OpAMD64ORL_110(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0-8 && j1%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -34075,15 +33292,14 @@ func rewriteValueAMD64_OpAMD64ORL_110(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORL { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLLconst { break @@ -34107,7 +33323,6 @@ func rewriteValueAMD64_OpAMD64ORL_110(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0-8 && j1%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -34135,9 +33350,7 @@ func rewriteValueAMD64_OpAMD64ORL_110(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORL_120(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORL s0:(SHLLconst [j0] x0:(MOVBloadidx1 [i0] {s} idx p mem)) or:(ORL s1:(SHLLconst [j1] x1:(MOVBloadidx1 [i1] {s} idx p mem)) y)) // cond: i1 == i0+1 && j1 == j0-8 && j1 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (ORL (SHLLconst [j1] (ROLWconst [8] (MOVWloadidx1 [i0] {s} p idx mem))) y) @@ -34154,15 +33367,14 @@ func rewriteValueAMD64_OpAMD64ORL_120(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORL { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLLconst { break @@ -34186,7 +33398,6 @@ func rewriteValueAMD64_OpAMD64ORL_120(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0-8 && j1%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -34226,10 +33437,9 @@ func rewriteValueAMD64_OpAMD64ORL_120(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORL { break @@ -34298,10 +33508,9 @@ func rewriteValueAMD64_OpAMD64ORL_120(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORL { break @@ -34370,10 +33579,9 @@ func rewriteValueAMD64_OpAMD64ORL_120(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORL { break @@ -34442,10 +33650,9 @@ func rewriteValueAMD64_OpAMD64ORL_120(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORL { break @@ -34507,7 +33714,7 @@ func rewriteValueAMD64_OpAMD64ORL_120(v *Value) bool { if or.Op != OpAMD64ORL { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLLconst { break @@ -34519,11 +33726,9 @@ func rewriteValueAMD64_OpAMD64ORL_120(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpAMD64SHLLconst { break @@ -34579,7 +33784,7 @@ func rewriteValueAMD64_OpAMD64ORL_120(v *Value) bool { if or.Op != OpAMD64ORL { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLLconst { break @@ -34591,11 +33796,9 @@ func rewriteValueAMD64_OpAMD64ORL_120(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpAMD64SHLLconst { break @@ -34664,10 +33867,9 @@ func rewriteValueAMD64_OpAMD64ORL_120(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpAMD64SHLLconst { break @@ -34736,10 +33938,9 @@ func rewriteValueAMD64_OpAMD64ORL_120(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpAMD64SHLLconst { break @@ -34795,7 +33996,7 @@ func rewriteValueAMD64_OpAMD64ORL_120(v *Value) bool { if or.Op != OpAMD64ORL { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLLconst { break @@ -34807,11 +34008,9 @@ func rewriteValueAMD64_OpAMD64ORL_120(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpAMD64SHLLconst { break @@ -34862,9 +34061,7 @@ func rewriteValueAMD64_OpAMD64ORL_120(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORL_130(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORL or:(ORL s1:(SHLLconst [j1] x1:(MOVBloadidx1 [i1] {s} idx p mem)) y) s0:(SHLLconst [j0] x0:(MOVBloadidx1 [i0] {s} idx p mem))) // cond: i1 == i0+1 && j1 == j0-8 && j1 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (ORL (SHLLconst [j1] (ROLWconst [8] (MOVWloadidx1 [i0] {s} p idx mem))) y) @@ -34874,7 +34071,7 @@ func rewriteValueAMD64_OpAMD64ORL_130(v *Value) bool { if or.Op != OpAMD64ORL { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLLconst { break @@ -34886,11 +34083,9 @@ func rewriteValueAMD64_OpAMD64ORL_130(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpAMD64SHLLconst { break @@ -34959,10 +34154,9 @@ func rewriteValueAMD64_OpAMD64ORL_130(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpAMD64SHLLconst { break @@ -35031,10 +34225,9 @@ func rewriteValueAMD64_OpAMD64ORL_130(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpAMD64SHLLconst { break @@ -35093,9 +34286,8 @@ func rewriteValueAMD64_OpAMD64ORL_130(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -35111,17 +34303,15 @@ func rewriteValueAMD64_OpAMD64ORL_130(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (ORLload x [off] {sym} ptr mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != OpAMD64MOVLload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -35137,9 +34327,7 @@ func rewriteValueAMD64_OpAMD64ORL_130(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORLconst_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ORLconst [c] x) // cond: isUint32PowerOfTwo(c) && uint64(c) >= 128 && !config.nacl // result: (BTSLconst [log2uint32(c)] x) @@ -35235,14 +34423,13 @@ func rewriteValueAMD64_OpAMD64ORLconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -35259,7 +34446,7 @@ func rewriteValueAMD64_OpAMD64ORLconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -35267,7 +34454,6 @@ func rewriteValueAMD64_OpAMD64ORLconstmodify_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2)) { break } @@ -35282,16 +34468,14 @@ func rewriteValueAMD64_OpAMD64ORLconstmodify_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORLload_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORLload [off1] {sym} val (ADDQconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (ORLload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -35299,7 +34483,6 @@ func rewriteValueAMD64_OpAMD64ORLload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -35317,7 +34500,7 @@ func rewriteValueAMD64_OpAMD64ORLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64LEAQ { @@ -35326,7 +34509,6 @@ func rewriteValueAMD64_OpAMD64ORLload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -35378,7 +34560,7 @@ func rewriteValueAMD64_OpAMD64ORLmodify_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -35386,7 +34568,6 @@ func rewriteValueAMD64_OpAMD64ORLmodify_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -35404,7 +34585,7 @@ func rewriteValueAMD64_OpAMD64ORLmodify_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -35413,7 +34594,6 @@ func rewriteValueAMD64_OpAMD64ORLmodify_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -35429,19 +34609,17 @@ func rewriteValueAMD64_OpAMD64ORLmodify_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORQ_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ORQ (SHLQ (MOVQconst [1]) y) x) // cond: !config.nacl // result: (BTSQ x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SHLQ { break } - _ = v_0.Args[1] + y := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpAMD64MOVQconst { break @@ -35449,8 +34627,6 @@ func rewriteValueAMD64_OpAMD64ORQ_0(v *Value) bool { if v_0_0.AuxInt != 1 { break } - y := v_0.Args[1] - x := v.Args[1] if !(!config.nacl) { break } @@ -35469,7 +34645,7 @@ func rewriteValueAMD64_OpAMD64ORQ_0(v *Value) bool { if v_1.Op != OpAMD64SHLQ { break } - _ = v_1.Args[1] + y := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpAMD64MOVQconst { break @@ -35477,7 +34653,6 @@ func rewriteValueAMD64_OpAMD64ORQ_0(v *Value) bool { if v_1_0.AuxInt != 1 { break } - y := v_1.Args[1] if !(!config.nacl) { break } @@ -35490,13 +34665,12 @@ func rewriteValueAMD64_OpAMD64ORQ_0(v *Value) bool { // cond: isUint64PowerOfTwo(c) && uint64(c) >= 128 && !config.nacl // result: (BTSQconst [log2(c)] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVQconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isUint64PowerOfTwo(c) && uint64(c) >= 128 && !config.nacl) { break } @@ -35547,13 +34721,12 @@ func rewriteValueAMD64_OpAMD64ORQ_0(v *Value) bool { // cond: is32Bit(c) // result: (ORQconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVQconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c)) { break } @@ -35625,9 +34798,8 @@ func rewriteValueAMD64_OpAMD64ORQ_0(v *Value) bool { if v_0.Op != OpAMD64SHLQ { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ANDQ { break @@ -35694,9 +34866,8 @@ func rewriteValueAMD64_OpAMD64ORQ_0(v *Value) bool { if v_0.Op != OpAMD64SHLQ { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ANDQ { break @@ -35904,9 +35075,8 @@ func rewriteValueAMD64_OpAMD64ORQ_10(v *Value) bool { if v_0.Op != OpAMD64SHLQ { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ANDQ { break @@ -35973,9 +35143,8 @@ func rewriteValueAMD64_OpAMD64ORQ_10(v *Value) bool { if v_0.Op != OpAMD64SHLQ { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ANDQ { break @@ -36180,9 +35349,8 @@ func rewriteValueAMD64_OpAMD64ORQ_10(v *Value) bool { if v_0.Op != OpAMD64SHRQ { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ANDQ { break @@ -36249,9 +35417,8 @@ func rewriteValueAMD64_OpAMD64ORQ_10(v *Value) bool { if v_0.Op != OpAMD64SHRQ { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ANDQ { break @@ -36451,9 +35618,7 @@ func rewriteValueAMD64_OpAMD64ORQ_10(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORQ_20(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORQ (SHRQ x y) (ANDQ (SHLQ x (NEGL y)) (SBBQcarrymask (CMPLconst (NEGL (ADDLconst (ANDLconst y [63]) [-64])) [64])))) // cond: // result: (RORQ x y) @@ -36463,9 +35628,8 @@ func rewriteValueAMD64_OpAMD64ORQ_20(v *Value) bool { if v_0.Op != OpAMD64SHRQ { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ANDQ { break @@ -36532,9 +35696,8 @@ func rewriteValueAMD64_OpAMD64ORQ_20(v *Value) bool { if v_0.Op != OpAMD64SHRQ { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ANDQ { break @@ -36734,9 +35897,8 @@ func rewriteValueAMD64_OpAMD64ORQ_20(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -36755,9 +35917,8 @@ func rewriteValueAMD64_OpAMD64ORQ_20(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -36811,9 +35972,8 @@ func rewriteValueAMD64_OpAMD64ORQ_20(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] x0 := v.Args[1] if x0.Op != OpAMD64MOVBload { break @@ -36853,9 +36013,8 @@ func rewriteValueAMD64_OpAMD64ORQ_20(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -36909,9 +36068,8 @@ func rewriteValueAMD64_OpAMD64ORQ_20(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] x0 := v.Args[1] if x0.Op != OpAMD64MOVWload { break @@ -36951,9 +36109,8 @@ func rewriteValueAMD64_OpAMD64ORQ_20(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -36993,9 +36150,7 @@ func rewriteValueAMD64_OpAMD64ORQ_20(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORQ_30(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORQ sh:(SHLQconst [32] x1:(MOVLload [i1] {s} p mem)) x0:(MOVLload [i0] {s} p mem)) // cond: i1 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh) // result: @mergePoint(b,x0,x1) (MOVQload [i0] {s} p mem) @@ -37014,9 +36169,8 @@ func rewriteValueAMD64_OpAMD64ORQ_30(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] x0 := v.Args[1] if x0.Op != OpAMD64MOVLload { break @@ -37061,14 +36215,13 @@ func rewriteValueAMD64_OpAMD64ORQ_30(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] or := v.Args[1] if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLQconst { break @@ -37089,7 +36242,6 @@ func rewriteValueAMD64_OpAMD64ORQ_30(v *Value) bool { if mem != x0.Args[1] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0+8 && j0%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -37125,9 +36277,8 @@ func rewriteValueAMD64_OpAMD64ORQ_30(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] or := v.Args[1] if or.Op != OpAMD64ORQ { break @@ -37182,7 +36333,7 @@ func rewriteValueAMD64_OpAMD64ORQ_30(v *Value) bool { if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLQconst { break @@ -37194,10 +36345,8 @@ func rewriteValueAMD64_OpAMD64ORQ_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] - y := or.Args[1] + p := x0.Args[0] s1 := v.Args[1] if s1.Op != OpAMD64SHLQconst { break @@ -37259,9 +36408,8 @@ func rewriteValueAMD64_OpAMD64ORQ_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] s1 := v.Args[1] if s1.Op != OpAMD64SHLQconst { break @@ -37317,14 +36465,13 @@ func rewriteValueAMD64_OpAMD64ORQ_30(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] or := v.Args[1] if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLQconst { break @@ -37345,7 +36492,6 @@ func rewriteValueAMD64_OpAMD64ORQ_30(v *Value) bool { if mem != x0.Args[1] { break } - y := or.Args[1] if !(i1 == i0+2 && j1 == j0+16 && j0%32 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -37381,9 +36527,8 @@ func rewriteValueAMD64_OpAMD64ORQ_30(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] or := v.Args[1] if or.Op != OpAMD64ORQ { break @@ -37438,7 +36583,7 @@ func rewriteValueAMD64_OpAMD64ORQ_30(v *Value) bool { if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLQconst { break @@ -37450,10 +36595,8 @@ func rewriteValueAMD64_OpAMD64ORQ_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] - y := or.Args[1] + p := x0.Args[0] s1 := v.Args[1] if s1.Op != OpAMD64SHLQconst { break @@ -37515,9 +36658,8 @@ func rewriteValueAMD64_OpAMD64ORQ_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] s1 := v.Args[1] if s1.Op != OpAMD64SHLQconst { break @@ -37568,10 +36710,9 @@ func rewriteValueAMD64_OpAMD64ORQ_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -37615,9 +36756,7 @@ func rewriteValueAMD64_OpAMD64ORQ_30(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORQ_40(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORQ x0:(MOVBloadidx1 [i0] {s} idx p mem) sh:(SHLQconst [8] x1:(MOVBloadidx1 [i1] {s} p idx mem))) // cond: i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh) // result: @mergePoint(b,x0,x1) (MOVWloadidx1 [i0] {s} p idx mem) @@ -37629,10 +36768,9 @@ func rewriteValueAMD64_OpAMD64ORQ_40(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -37683,10 +36821,9 @@ func rewriteValueAMD64_OpAMD64ORQ_40(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -37737,10 +36874,9 @@ func rewriteValueAMD64_OpAMD64ORQ_40(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -37798,10 +36934,9 @@ func rewriteValueAMD64_OpAMD64ORQ_40(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpAMD64MOVBloadidx1 { break @@ -37852,10 +36987,9 @@ func rewriteValueAMD64_OpAMD64ORQ_40(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpAMD64MOVBloadidx1 { break @@ -37906,10 +37040,9 @@ func rewriteValueAMD64_OpAMD64ORQ_40(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpAMD64MOVBloadidx1 { break @@ -37960,10 +37093,9 @@ func rewriteValueAMD64_OpAMD64ORQ_40(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpAMD64MOVBloadidx1 { break @@ -38007,10 +37139,9 @@ func rewriteValueAMD64_OpAMD64ORQ_40(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -38061,10 +37192,9 @@ func rewriteValueAMD64_OpAMD64ORQ_40(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -38115,10 +37245,9 @@ func rewriteValueAMD64_OpAMD64ORQ_40(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -38162,9 +37291,7 @@ func rewriteValueAMD64_OpAMD64ORQ_40(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORQ_50(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORQ x0:(MOVWloadidx1 [i0] {s} idx p mem) sh:(SHLQconst [16] x1:(MOVWloadidx1 [i1] {s} idx p mem))) // cond: i1 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh) // result: @mergePoint(b,x0,x1) (MOVLloadidx1 [i0] {s} p idx mem) @@ -38176,10 +37303,9 @@ func rewriteValueAMD64_OpAMD64ORQ_50(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -38237,10 +37363,9 @@ func rewriteValueAMD64_OpAMD64ORQ_50(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpAMD64MOVWloadidx1 { break @@ -38291,10 +37416,9 @@ func rewriteValueAMD64_OpAMD64ORQ_50(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpAMD64MOVWloadidx1 { break @@ -38345,10 +37469,9 @@ func rewriteValueAMD64_OpAMD64ORQ_50(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpAMD64MOVWloadidx1 { break @@ -38399,10 +37522,9 @@ func rewriteValueAMD64_OpAMD64ORQ_50(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpAMD64MOVWloadidx1 { break @@ -38446,10 +37568,9 @@ func rewriteValueAMD64_OpAMD64ORQ_50(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -38500,10 +37621,9 @@ func rewriteValueAMD64_OpAMD64ORQ_50(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -38554,10 +37674,9 @@ func rewriteValueAMD64_OpAMD64ORQ_50(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -38608,10 +37727,9 @@ func rewriteValueAMD64_OpAMD64ORQ_50(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -38669,10 +37787,9 @@ func rewriteValueAMD64_OpAMD64ORQ_50(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpAMD64MOVLloadidx1 { break @@ -38709,9 +37826,7 @@ func rewriteValueAMD64_OpAMD64ORQ_50(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORQ_60(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORQ sh:(SHLQconst [32] x1:(MOVLloadidx1 [i1] {s} idx p mem)) x0:(MOVLloadidx1 [i0] {s} p idx mem)) // cond: i1 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh) // result: @mergePoint(b,x0,x1) (MOVQloadidx1 [i0] {s} p idx mem) @@ -38730,10 +37845,9 @@ func rewriteValueAMD64_OpAMD64ORQ_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpAMD64MOVLloadidx1 { break @@ -38784,10 +37898,9 @@ func rewriteValueAMD64_OpAMD64ORQ_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpAMD64MOVLloadidx1 { break @@ -38838,10 +37951,9 @@ func rewriteValueAMD64_OpAMD64ORQ_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpAMD64MOVLloadidx1 { break @@ -38890,15 +38002,14 @@ func rewriteValueAMD64_OpAMD64ORQ_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLQconst { break @@ -38922,7 +38033,6 @@ func rewriteValueAMD64_OpAMD64ORQ_60(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0+8 && j0%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -38959,15 +38069,14 @@ func rewriteValueAMD64_OpAMD64ORQ_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLQconst { break @@ -38991,7 +38100,6 @@ func rewriteValueAMD64_OpAMD64ORQ_60(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0+8 && j0%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -39028,15 +38136,14 @@ func rewriteValueAMD64_OpAMD64ORQ_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLQconst { break @@ -39060,7 +38167,6 @@ func rewriteValueAMD64_OpAMD64ORQ_60(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0+8 && j0%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -39097,15 +38203,14 @@ func rewriteValueAMD64_OpAMD64ORQ_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLQconst { break @@ -39129,7 +38234,6 @@ func rewriteValueAMD64_OpAMD64ORQ_60(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0+8 && j0%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -39166,10 +38270,9 @@ func rewriteValueAMD64_OpAMD64ORQ_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break @@ -39235,10 +38338,9 @@ func rewriteValueAMD64_OpAMD64ORQ_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break @@ -39304,10 +38406,9 @@ func rewriteValueAMD64_OpAMD64ORQ_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break @@ -39361,9 +38462,7 @@ func rewriteValueAMD64_OpAMD64ORQ_60(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORQ_70(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORQ s1:(SHLQconst [j1] x1:(MOVBloadidx1 [i1] {s} idx p mem)) or:(ORQ y s0:(SHLQconst [j0] x0:(MOVBloadidx1 [i0] {s} idx p mem)))) // cond: i1 == i0+1 && j1 == j0+8 && j0 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (ORQ (SHLQconst [j0] (MOVWloadidx1 [i0] {s} p idx mem)) y) @@ -39380,10 +38479,9 @@ func rewriteValueAMD64_OpAMD64ORQ_70(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break @@ -39442,7 +38540,7 @@ func rewriteValueAMD64_OpAMD64ORQ_70(v *Value) bool { if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLQconst { break @@ -39454,11 +38552,9 @@ func rewriteValueAMD64_OpAMD64ORQ_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpAMD64SHLQconst { break @@ -39511,7 +38607,7 @@ func rewriteValueAMD64_OpAMD64ORQ_70(v *Value) bool { if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLQconst { break @@ -39523,11 +38619,9 @@ func rewriteValueAMD64_OpAMD64ORQ_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpAMD64SHLQconst { break @@ -39593,10 +38687,9 @@ func rewriteValueAMD64_OpAMD64ORQ_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpAMD64SHLQconst { break @@ -39662,10 +38755,9 @@ func rewriteValueAMD64_OpAMD64ORQ_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpAMD64SHLQconst { break @@ -39718,7 +38810,7 @@ func rewriteValueAMD64_OpAMD64ORQ_70(v *Value) bool { if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLQconst { break @@ -39730,11 +38822,9 @@ func rewriteValueAMD64_OpAMD64ORQ_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpAMD64SHLQconst { break @@ -39787,7 +38877,7 @@ func rewriteValueAMD64_OpAMD64ORQ_70(v *Value) bool { if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLQconst { break @@ -39799,11 +38889,9 @@ func rewriteValueAMD64_OpAMD64ORQ_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpAMD64SHLQconst { break @@ -39869,10 +38957,9 @@ func rewriteValueAMD64_OpAMD64ORQ_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpAMD64SHLQconst { break @@ -39938,10 +39025,9 @@ func rewriteValueAMD64_OpAMD64ORQ_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpAMD64SHLQconst { break @@ -40001,15 +39087,14 @@ func rewriteValueAMD64_OpAMD64ORQ_70(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLQconst { break @@ -40033,7 +39118,6 @@ func rewriteValueAMD64_OpAMD64ORQ_70(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(i1 == i0+2 && j1 == j0+16 && j0%32 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -40058,9 +39142,7 @@ func rewriteValueAMD64_OpAMD64ORQ_70(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORQ_80(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORQ s1:(SHLQconst [j1] x1:(MOVWloadidx1 [i1] {s} idx p mem)) or:(ORQ s0:(SHLQconst [j0] x0:(MOVWloadidx1 [i0] {s} p idx mem)) y)) // cond: i1 == i0+2 && j1 == j0+16 && j0 % 32 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (ORQ (SHLQconst [j0] (MOVLloadidx1 [i0] {s} p idx mem)) y) @@ -40077,15 +39159,14 @@ func rewriteValueAMD64_OpAMD64ORQ_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLQconst { break @@ -40109,7 +39190,6 @@ func rewriteValueAMD64_OpAMD64ORQ_80(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(i1 == i0+2 && j1 == j0+16 && j0%32 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -40146,15 +39226,14 @@ func rewriteValueAMD64_OpAMD64ORQ_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLQconst { break @@ -40178,7 +39257,6 @@ func rewriteValueAMD64_OpAMD64ORQ_80(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(i1 == i0+2 && j1 == j0+16 && j0%32 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -40215,15 +39293,14 @@ func rewriteValueAMD64_OpAMD64ORQ_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLQconst { break @@ -40247,7 +39324,6 @@ func rewriteValueAMD64_OpAMD64ORQ_80(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(i1 == i0+2 && j1 == j0+16 && j0%32 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -40284,10 +39360,9 @@ func rewriteValueAMD64_OpAMD64ORQ_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break @@ -40353,10 +39428,9 @@ func rewriteValueAMD64_OpAMD64ORQ_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break @@ -40422,10 +39496,9 @@ func rewriteValueAMD64_OpAMD64ORQ_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break @@ -40491,10 +39564,9 @@ func rewriteValueAMD64_OpAMD64ORQ_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break @@ -40553,7 +39625,7 @@ func rewriteValueAMD64_OpAMD64ORQ_80(v *Value) bool { if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLQconst { break @@ -40565,11 +39637,9 @@ func rewriteValueAMD64_OpAMD64ORQ_80(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpAMD64SHLQconst { break @@ -40622,7 +39692,7 @@ func rewriteValueAMD64_OpAMD64ORQ_80(v *Value) bool { if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLQconst { break @@ -40634,11 +39704,9 @@ func rewriteValueAMD64_OpAMD64ORQ_80(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpAMD64SHLQconst { break @@ -40704,10 +39772,9 @@ func rewriteValueAMD64_OpAMD64ORQ_80(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpAMD64SHLQconst { break @@ -40755,9 +39822,7 @@ func rewriteValueAMD64_OpAMD64ORQ_80(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORQ_90(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORQ or:(ORQ y s0:(SHLQconst [j0] x0:(MOVWloadidx1 [i0] {s} idx p mem))) s1:(SHLQconst [j1] x1:(MOVWloadidx1 [i1] {s} p idx mem))) // cond: i1 == i0+2 && j1 == j0+16 && j0 % 32 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (ORQ (SHLQconst [j0] (MOVLloadidx1 [i0] {s} p idx mem)) y) @@ -40780,10 +39845,9 @@ func rewriteValueAMD64_OpAMD64ORQ_90(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpAMD64SHLQconst { break @@ -40836,7 +39900,7 @@ func rewriteValueAMD64_OpAMD64ORQ_90(v *Value) bool { if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLQconst { break @@ -40848,11 +39912,9 @@ func rewriteValueAMD64_OpAMD64ORQ_90(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpAMD64SHLQconst { break @@ -40905,7 +39967,7 @@ func rewriteValueAMD64_OpAMD64ORQ_90(v *Value) bool { if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpAMD64SHLQconst { break @@ -40917,11 +39979,9 @@ func rewriteValueAMD64_OpAMD64ORQ_90(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpAMD64SHLQconst { break @@ -40987,10 +40047,9 @@ func rewriteValueAMD64_OpAMD64ORQ_90(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpAMD64SHLQconst { break @@ -41056,10 +40115,9 @@ func rewriteValueAMD64_OpAMD64ORQ_90(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpAMD64SHLQconst { break @@ -41114,9 +40172,8 @@ func rewriteValueAMD64_OpAMD64ORQ_90(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -41173,9 +40230,8 @@ func rewriteValueAMD64_OpAMD64ORQ_90(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] x1 := v.Args[1] if x1.Op != OpAMD64MOVBload { break @@ -41225,9 +40281,8 @@ func rewriteValueAMD64_OpAMD64ORQ_90(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -41297,9 +40352,8 @@ func rewriteValueAMD64_OpAMD64ORQ_90(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] r1 := v.Args[1] if r1.Op != OpAMD64ROLWconst { break @@ -41352,9 +40406,8 @@ func rewriteValueAMD64_OpAMD64ORQ_90(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -41400,9 +40453,7 @@ func rewriteValueAMD64_OpAMD64ORQ_90(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORQ_100(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORQ sh:(SHLQconst [32] r0:(BSWAPL x0:(MOVLload [i0] {s} p mem))) r1:(BSWAPL x1:(MOVLload [i1] {s} p mem))) // cond: i1 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(sh) // result: @mergePoint(b,x0,x1) (BSWAPQ (MOVQload [i0] {s} p mem)) @@ -41425,9 +40476,8 @@ func rewriteValueAMD64_OpAMD64ORQ_100(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] r1 := v.Args[1] if r1.Op != OpAMD64BSWAPL { break @@ -41478,14 +40528,13 @@ func rewriteValueAMD64_OpAMD64ORQ_100(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] or := v.Args[1] if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLQconst { break @@ -41506,7 +40555,6 @@ func rewriteValueAMD64_OpAMD64ORQ_100(v *Value) bool { if mem != x1.Args[1] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0-8 && j1%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -41545,9 +40593,8 @@ func rewriteValueAMD64_OpAMD64ORQ_100(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] or := v.Args[1] if or.Op != OpAMD64ORQ { break @@ -41605,7 +40652,7 @@ func rewriteValueAMD64_OpAMD64ORQ_100(v *Value) bool { if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLQconst { break @@ -41617,10 +40664,8 @@ func rewriteValueAMD64_OpAMD64ORQ_100(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] - y := or.Args[1] + p := x1.Args[0] s0 := v.Args[1] if s0.Op != OpAMD64SHLQconst { break @@ -41685,9 +40730,8 @@ func rewriteValueAMD64_OpAMD64ORQ_100(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] s0 := v.Args[1] if s0.Op != OpAMD64SHLQconst { break @@ -41753,14 +40797,13 @@ func rewriteValueAMD64_OpAMD64ORQ_100(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] or := v.Args[1] if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLQconst { break @@ -41788,7 +40831,6 @@ func rewriteValueAMD64_OpAMD64ORQ_100(v *Value) bool { if mem != x1.Args[1] { break } - y := or.Args[1] if !(i1 == i0+2 && j1 == j0-16 && j1%32 == 0 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -41833,9 +40875,8 @@ func rewriteValueAMD64_OpAMD64ORQ_100(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] or := v.Args[1] if or.Op != OpAMD64ORQ { break @@ -41899,7 +40940,7 @@ func rewriteValueAMD64_OpAMD64ORQ_100(v *Value) bool { if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLQconst { break @@ -41918,10 +40959,8 @@ func rewriteValueAMD64_OpAMD64ORQ_100(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] - y := or.Args[1] + p := x1.Args[0] s0 := v.Args[1] if s0.Op != OpAMD64SHLQconst { break @@ -41999,9 +41038,8 @@ func rewriteValueAMD64_OpAMD64ORQ_100(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] s0 := v.Args[1] if s0.Op != OpAMD64SHLQconst { break @@ -42061,10 +41099,9 @@ func rewriteValueAMD64_OpAMD64ORQ_100(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -42111,9 +41148,7 @@ func rewriteValueAMD64_OpAMD64ORQ_100(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORQ_110(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORQ x1:(MOVBloadidx1 [i1] {s} idx p mem) sh:(SHLQconst [8] x0:(MOVBloadidx1 [i0] {s} p idx mem))) // cond: i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh) // result: @mergePoint(b,x0,x1) (ROLWconst [8] (MOVWloadidx1 [i0] {s} p idx mem)) @@ -42125,10 +41160,9 @@ func rewriteValueAMD64_OpAMD64ORQ_110(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -42182,10 +41216,9 @@ func rewriteValueAMD64_OpAMD64ORQ_110(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -42239,10 +41272,9 @@ func rewriteValueAMD64_OpAMD64ORQ_110(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -42303,10 +41335,9 @@ func rewriteValueAMD64_OpAMD64ORQ_110(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpAMD64MOVBloadidx1 { break @@ -42360,10 +41391,9 @@ func rewriteValueAMD64_OpAMD64ORQ_110(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpAMD64MOVBloadidx1 { break @@ -42417,10 +41447,9 @@ func rewriteValueAMD64_OpAMD64ORQ_110(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpAMD64MOVBloadidx1 { break @@ -42474,10 +41503,9 @@ func rewriteValueAMD64_OpAMD64ORQ_110(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpAMD64MOVBloadidx1 { break @@ -42531,10 +41559,9 @@ func rewriteValueAMD64_OpAMD64ORQ_110(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -42601,10 +41628,9 @@ func rewriteValueAMD64_OpAMD64ORQ_110(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -42671,10 +41697,9 @@ func rewriteValueAMD64_OpAMD64ORQ_110(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -42727,9 +41752,7 @@ func rewriteValueAMD64_OpAMD64ORQ_110(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORQ_120(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORQ r1:(ROLWconst [8] x1:(MOVWloadidx1 [i1] {s} idx p mem)) sh:(SHLQconst [16] r0:(ROLWconst [8] x0:(MOVWloadidx1 [i0] {s} idx p mem)))) // cond: i1 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(sh) // result: @mergePoint(b,x0,x1) (BSWAPL (MOVLloadidx1 [i0] {s} p idx mem)) @@ -42748,10 +41771,9 @@ func rewriteValueAMD64_OpAMD64ORQ_120(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -42825,10 +41847,9 @@ func rewriteValueAMD64_OpAMD64ORQ_120(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] r1 := v.Args[1] if r1.Op != OpAMD64ROLWconst { break @@ -42895,10 +41916,9 @@ func rewriteValueAMD64_OpAMD64ORQ_120(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] r1 := v.Args[1] if r1.Op != OpAMD64ROLWconst { break @@ -42965,10 +41985,9 @@ func rewriteValueAMD64_OpAMD64ORQ_120(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] r1 := v.Args[1] if r1.Op != OpAMD64ROLWconst { break @@ -43035,10 +42054,9 @@ func rewriteValueAMD64_OpAMD64ORQ_120(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] r1 := v.Args[1] if r1.Op != OpAMD64ROLWconst { break @@ -43095,10 +42113,9 @@ func rewriteValueAMD64_OpAMD64ORQ_120(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -43159,10 +42176,9 @@ func rewriteValueAMD64_OpAMD64ORQ_120(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -43223,10 +42239,9 @@ func rewriteValueAMD64_OpAMD64ORQ_120(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -43287,10 +42302,9 @@ func rewriteValueAMD64_OpAMD64ORQ_120(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpAMD64SHLQconst { break @@ -43358,10 +42372,9 @@ func rewriteValueAMD64_OpAMD64ORQ_120(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] r1 := v.Args[1] if r1.Op != OpAMD64BSWAPL { break @@ -43404,9 +42417,7 @@ func rewriteValueAMD64_OpAMD64ORQ_120(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORQ_130(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORQ sh:(SHLQconst [32] r0:(BSWAPL x0:(MOVLloadidx1 [i0] {s} idx p mem))) r1:(BSWAPL x1:(MOVLloadidx1 [i1] {s} p idx mem))) // cond: i1 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(sh) // result: @mergePoint(b,x0,x1) (BSWAPQ (MOVQloadidx1 [i0] {s} p idx mem)) @@ -43429,10 +42440,9 @@ func rewriteValueAMD64_OpAMD64ORQ_130(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] r1 := v.Args[1] if r1.Op != OpAMD64BSWAPL { break @@ -43493,10 +42503,9 @@ func rewriteValueAMD64_OpAMD64ORQ_130(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] r1 := v.Args[1] if r1.Op != OpAMD64BSWAPL { break @@ -43557,10 +42566,9 @@ func rewriteValueAMD64_OpAMD64ORQ_130(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] r1 := v.Args[1] if r1.Op != OpAMD64BSWAPL { break @@ -43615,15 +42623,14 @@ func rewriteValueAMD64_OpAMD64ORQ_130(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLQconst { break @@ -43647,7 +42654,6 @@ func rewriteValueAMD64_OpAMD64ORQ_130(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0-8 && j1%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -43687,15 +42693,14 @@ func rewriteValueAMD64_OpAMD64ORQ_130(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLQconst { break @@ -43719,7 +42724,6 @@ func rewriteValueAMD64_OpAMD64ORQ_130(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0-8 && j1%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -43759,15 +42763,14 @@ func rewriteValueAMD64_OpAMD64ORQ_130(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLQconst { break @@ -43791,7 +42794,6 @@ func rewriteValueAMD64_OpAMD64ORQ_130(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0-8 && j1%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -43831,15 +42833,14 @@ func rewriteValueAMD64_OpAMD64ORQ_130(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLQconst { break @@ -43863,7 +42864,6 @@ func rewriteValueAMD64_OpAMD64ORQ_130(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0-8 && j1%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -43903,10 +42903,9 @@ func rewriteValueAMD64_OpAMD64ORQ_130(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break @@ -43975,10 +42974,9 @@ func rewriteValueAMD64_OpAMD64ORQ_130(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break @@ -44047,10 +43045,9 @@ func rewriteValueAMD64_OpAMD64ORQ_130(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break @@ -44107,9 +43104,7 @@ func rewriteValueAMD64_OpAMD64ORQ_130(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORQ_140(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORQ s0:(SHLQconst [j0] x0:(MOVBloadidx1 [i0] {s} idx p mem)) or:(ORQ y s1:(SHLQconst [j1] x1:(MOVBloadidx1 [i1] {s} idx p mem)))) // cond: i1 == i0+1 && j1 == j0-8 && j1 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (ORQ (SHLQconst [j1] (ROLWconst [8] (MOVWloadidx1 [i0] {s} p idx mem))) y) @@ -44126,10 +43121,9 @@ func rewriteValueAMD64_OpAMD64ORQ_140(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break @@ -44191,7 +43185,7 @@ func rewriteValueAMD64_OpAMD64ORQ_140(v *Value) bool { if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLQconst { break @@ -44203,11 +43197,9 @@ func rewriteValueAMD64_OpAMD64ORQ_140(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpAMD64SHLQconst { break @@ -44263,7 +43255,7 @@ func rewriteValueAMD64_OpAMD64ORQ_140(v *Value) bool { if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLQconst { break @@ -44275,11 +43267,9 @@ func rewriteValueAMD64_OpAMD64ORQ_140(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpAMD64SHLQconst { break @@ -44348,10 +43338,9 @@ func rewriteValueAMD64_OpAMD64ORQ_140(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpAMD64SHLQconst { break @@ -44420,10 +43409,9 @@ func rewriteValueAMD64_OpAMD64ORQ_140(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpAMD64SHLQconst { break @@ -44479,7 +43467,7 @@ func rewriteValueAMD64_OpAMD64ORQ_140(v *Value) bool { if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLQconst { break @@ -44491,11 +43479,9 @@ func rewriteValueAMD64_OpAMD64ORQ_140(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpAMD64SHLQconst { break @@ -44551,7 +43537,7 @@ func rewriteValueAMD64_OpAMD64ORQ_140(v *Value) bool { if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLQconst { break @@ -44563,11 +43549,9 @@ func rewriteValueAMD64_OpAMD64ORQ_140(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpAMD64SHLQconst { break @@ -44636,10 +43620,9 @@ func rewriteValueAMD64_OpAMD64ORQ_140(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpAMD64SHLQconst { break @@ -44708,10 +43691,9 @@ func rewriteValueAMD64_OpAMD64ORQ_140(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpAMD64SHLQconst { break @@ -44781,15 +43763,14 @@ func rewriteValueAMD64_OpAMD64ORQ_140(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLQconst { break @@ -44820,7 +43801,6 @@ func rewriteValueAMD64_OpAMD64ORQ_140(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+2 && j1 == j0-16 && j1%32 == 0 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -44847,9 +43827,7 @@ func rewriteValueAMD64_OpAMD64ORQ_140(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORQ_150(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORQ s0:(SHLQconst [j0] r0:(ROLWconst [8] x0:(MOVWloadidx1 [i0] {s} idx p mem))) or:(ORQ s1:(SHLQconst [j1] r1:(ROLWconst [8] x1:(MOVWloadidx1 [i1] {s} p idx mem))) y)) // cond: i1 == i0+2 && j1 == j0-16 && j1 % 32 == 0 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (ORQ (SHLQconst [j1] (BSWAPL (MOVLloadidx1 [i0] {s} p idx mem))) y) @@ -44873,15 +43851,14 @@ func rewriteValueAMD64_OpAMD64ORQ_150(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLQconst { break @@ -44912,7 +43889,6 @@ func rewriteValueAMD64_OpAMD64ORQ_150(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+2 && j1 == j0-16 && j1%32 == 0 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -44958,15 +43934,14 @@ func rewriteValueAMD64_OpAMD64ORQ_150(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLQconst { break @@ -44997,7 +43972,6 @@ func rewriteValueAMD64_OpAMD64ORQ_150(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+2 && j1 == j0-16 && j1%32 == 0 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -45043,15 +44017,14 @@ func rewriteValueAMD64_OpAMD64ORQ_150(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLQconst { break @@ -45082,7 +44055,6 @@ func rewriteValueAMD64_OpAMD64ORQ_150(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+2 && j1 == j0-16 && j1%32 == 0 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -45128,10 +44100,9 @@ func rewriteValueAMD64_OpAMD64ORQ_150(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break @@ -45213,10 +44184,9 @@ func rewriteValueAMD64_OpAMD64ORQ_150(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break @@ -45298,10 +44268,9 @@ func rewriteValueAMD64_OpAMD64ORQ_150(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break @@ -45383,10 +44352,9 @@ func rewriteValueAMD64_OpAMD64ORQ_150(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpAMD64ORQ { break @@ -45454,7 +44422,7 @@ func rewriteValueAMD64_OpAMD64ORQ_150(v *Value) bool { if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLQconst { break @@ -45473,11 +44441,9 @@ func rewriteValueAMD64_OpAMD64ORQ_150(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpAMD64SHLQconst { break @@ -45539,7 +44505,7 @@ func rewriteValueAMD64_OpAMD64ORQ_150(v *Value) bool { if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLQconst { break @@ -45558,11 +44524,9 @@ func rewriteValueAMD64_OpAMD64ORQ_150(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpAMD64SHLQconst { break @@ -45644,10 +44608,9 @@ func rewriteValueAMD64_OpAMD64ORQ_150(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpAMD64SHLQconst { break @@ -45704,9 +44667,7 @@ func rewriteValueAMD64_OpAMD64ORQ_150(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORQ_160(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORQ or:(ORQ y s1:(SHLQconst [j1] r1:(ROLWconst [8] x1:(MOVWloadidx1 [i1] {s} idx p mem)))) s0:(SHLQconst [j0] r0:(ROLWconst [8] x0:(MOVWloadidx1 [i0] {s} p idx mem)))) // cond: i1 == i0+2 && j1 == j0-16 && j1 % 32 == 0 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (ORQ (SHLQconst [j1] (BSWAPL (MOVLloadidx1 [i0] {s} p idx mem))) y) @@ -45736,10 +44697,9 @@ func rewriteValueAMD64_OpAMD64ORQ_160(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpAMD64SHLQconst { break @@ -45801,7 +44761,7 @@ func rewriteValueAMD64_OpAMD64ORQ_160(v *Value) bool { if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLQconst { break @@ -45820,11 +44780,9 @@ func rewriteValueAMD64_OpAMD64ORQ_160(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpAMD64SHLQconst { break @@ -45886,7 +44844,7 @@ func rewriteValueAMD64_OpAMD64ORQ_160(v *Value) bool { if or.Op != OpAMD64ORQ { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpAMD64SHLQconst { break @@ -45905,11 +44863,9 @@ func rewriteValueAMD64_OpAMD64ORQ_160(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpAMD64SHLQconst { break @@ -45991,10 +44947,9 @@ func rewriteValueAMD64_OpAMD64ORQ_160(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpAMD64SHLQconst { break @@ -46076,10 +45031,9 @@ func rewriteValueAMD64_OpAMD64ORQ_160(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpAMD64SHLQconst { break @@ -46144,9 +45098,8 @@ func rewriteValueAMD64_OpAMD64ORQ_160(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -46162,17 +45115,15 @@ func rewriteValueAMD64_OpAMD64ORQ_160(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (ORQload x [off] {sym} ptr mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != OpAMD64MOVQload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -46188,9 +45139,7 @@ func rewriteValueAMD64_OpAMD64ORQ_160(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORQconst_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ORQconst [c] x) // cond: isUint64PowerOfTwo(c) && uint64(c) >= 128 && !config.nacl // result: (BTSQconst [log2(c)] x) @@ -46284,14 +45233,13 @@ func rewriteValueAMD64_OpAMD64ORQconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -46308,7 +45256,7 @@ func rewriteValueAMD64_OpAMD64ORQconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -46316,7 +45264,6 @@ func rewriteValueAMD64_OpAMD64ORQconstmodify_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2)) { break } @@ -46331,16 +45278,14 @@ func rewriteValueAMD64_OpAMD64ORQconstmodify_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64ORQload_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORQload [off1] {sym} val (ADDQconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (ORQload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -46348,7 +45293,6 @@ func rewriteValueAMD64_OpAMD64ORQload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -46366,7 +45310,7 @@ func rewriteValueAMD64_OpAMD64ORQload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64LEAQ { @@ -46375,7 +45319,6 @@ func rewriteValueAMD64_OpAMD64ORQload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -46427,7 +45370,7 @@ func rewriteValueAMD64_OpAMD64ORQmodify_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -46435,7 +45378,6 @@ func rewriteValueAMD64_OpAMD64ORQmodify_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -46453,7 +45395,7 @@ func rewriteValueAMD64_OpAMD64ORQmodify_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -46462,7 +45404,6 @@ func rewriteValueAMD64_OpAMD64ORQmodify_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -47207,7 +46148,6 @@ func rewriteValueAMD64_OpAMD64SARBconst_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SARL_0(v *Value) bool { b := v.Block - _ = b // match: (SARL x (MOVQconst [c])) // cond: // result: (SARLconst [c&31] x) @@ -47462,7 +46402,6 @@ func rewriteValueAMD64_OpAMD64SARLconst_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SARQ_0(v *Value) bool { b := v.Block - _ = b // match: (SARQ x (MOVQconst [c])) // cond: // result: (SARQconst [c&63] x) @@ -47848,14 +46787,13 @@ func rewriteValueAMD64_OpAMD64SBBQ_0(v *Value) bool { // cond: is32Bit(c) // result: (SBBQconst x [c] borrow) for { - _ = v.Args[2] + borrow := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64MOVQconst { break } c := v_1.AuxInt - borrow := v.Args[2] if !(is32Bit(c)) { break } @@ -48119,21 +47057,20 @@ func rewriteValueAMD64_OpAMD64SETAE_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SETAEstore_0(v *Value) bool { b := v.Block - _ = b + typ := &b.Func.Config.Types // match: (SETAEstore [off] {sym} ptr (InvertFlags x) mem) // cond: // result: (SETBEstore [off] {sym} ptr x mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64InvertFlags { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64SETBEstore) v.AuxInt = off v.Aux = sym @@ -48148,7 +47085,7 @@ func rewriteValueAMD64_OpAMD64SETAEstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -48156,7 +47093,6 @@ func rewriteValueAMD64_OpAMD64SETAEstore_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -48174,7 +47110,7 @@ func rewriteValueAMD64_OpAMD64SETAEstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -48183,7 +47119,6 @@ func rewriteValueAMD64_OpAMD64SETAEstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -48195,116 +47130,111 @@ func rewriteValueAMD64_OpAMD64SETAEstore_0(v *Value) bool { v.AddArg(mem) return true } - // match: (SETAEstore [off] {sym} ptr x:(FlagEQ) mem) + // match: (SETAEstore [off] {sym} ptr (FlagEQ) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagEQ { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagEQ { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETAEstore [off] {sym} ptr x:(FlagLT_ULT) mem) + // match: (SETAEstore [off] {sym} ptr (FlagLT_ULT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagLT_ULT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagLT_ULT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETAEstore [off] {sym} ptr x:(FlagLT_UGT) mem) + // match: (SETAEstore [off] {sym} ptr (FlagLT_UGT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagLT_UGT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagLT_UGT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETAEstore [off] {sym} ptr x:(FlagGT_ULT) mem) + // match: (SETAEstore [off] {sym} ptr (FlagGT_ULT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagGT_ULT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagGT_ULT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETAEstore [off] {sym} ptr x:(FlagGT_UGT) mem) + // match: (SETAEstore [off] {sym} ptr (FlagGT_UGT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagGT_UGT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagGT_UGT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) @@ -48314,21 +47244,20 @@ func rewriteValueAMD64_OpAMD64SETAEstore_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SETAstore_0(v *Value) bool { b := v.Block - _ = b + typ := &b.Func.Config.Types // match: (SETAstore [off] {sym} ptr (InvertFlags x) mem) // cond: // result: (SETBstore [off] {sym} ptr x mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64InvertFlags { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64SETBstore) v.AuxInt = off v.Aux = sym @@ -48343,7 +47272,7 @@ func rewriteValueAMD64_OpAMD64SETAstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -48351,7 +47280,6 @@ func rewriteValueAMD64_OpAMD64SETAstore_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -48369,7 +47297,7 @@ func rewriteValueAMD64_OpAMD64SETAstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -48378,7 +47306,6 @@ func rewriteValueAMD64_OpAMD64SETAstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -48390,116 +47317,111 @@ func rewriteValueAMD64_OpAMD64SETAstore_0(v *Value) bool { v.AddArg(mem) return true } - // match: (SETAstore [off] {sym} ptr x:(FlagEQ) mem) + // match: (SETAstore [off] {sym} ptr (FlagEQ) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagEQ { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagEQ { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETAstore [off] {sym} ptr x:(FlagLT_ULT) mem) + // match: (SETAstore [off] {sym} ptr (FlagLT_ULT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagLT_ULT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagLT_ULT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETAstore [off] {sym} ptr x:(FlagLT_UGT) mem) + // match: (SETAstore [off] {sym} ptr (FlagLT_UGT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagLT_UGT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagLT_UGT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETAstore [off] {sym} ptr x:(FlagGT_ULT) mem) + // match: (SETAstore [off] {sym} ptr (FlagGT_ULT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagGT_ULT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagGT_ULT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETAstore [off] {sym} ptr x:(FlagGT_UGT) mem) + // match: (SETAstore [off] {sym} ptr (FlagGT_UGT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagGT_UGT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagGT_UGT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) @@ -48661,21 +47583,20 @@ func rewriteValueAMD64_OpAMD64SETBE_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SETBEstore_0(v *Value) bool { b := v.Block - _ = b + typ := &b.Func.Config.Types // match: (SETBEstore [off] {sym} ptr (InvertFlags x) mem) // cond: // result: (SETAEstore [off] {sym} ptr x mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64InvertFlags { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64SETAEstore) v.AuxInt = off v.Aux = sym @@ -48690,7 +47611,7 @@ func rewriteValueAMD64_OpAMD64SETBEstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -48698,7 +47619,6 @@ func rewriteValueAMD64_OpAMD64SETBEstore_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -48716,7 +47636,7 @@ func rewriteValueAMD64_OpAMD64SETBEstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -48725,7 +47645,6 @@ func rewriteValueAMD64_OpAMD64SETBEstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -48737,116 +47656,111 @@ func rewriteValueAMD64_OpAMD64SETBEstore_0(v *Value) bool { v.AddArg(mem) return true } - // match: (SETBEstore [off] {sym} ptr x:(FlagEQ) mem) + // match: (SETBEstore [off] {sym} ptr (FlagEQ) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagEQ { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagEQ { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETBEstore [off] {sym} ptr x:(FlagLT_ULT) mem) + // match: (SETBEstore [off] {sym} ptr (FlagLT_ULT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagLT_ULT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagLT_ULT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETBEstore [off] {sym} ptr x:(FlagLT_UGT) mem) + // match: (SETBEstore [off] {sym} ptr (FlagLT_UGT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagLT_UGT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagLT_UGT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETBEstore [off] {sym} ptr x:(FlagGT_ULT) mem) + // match: (SETBEstore [off] {sym} ptr (FlagGT_ULT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagGT_ULT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagGT_ULT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETBEstore [off] {sym} ptr x:(FlagGT_UGT) mem) + // match: (SETBEstore [off] {sym} ptr (FlagGT_UGT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagGT_UGT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagGT_UGT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) @@ -48856,21 +47770,20 @@ func rewriteValueAMD64_OpAMD64SETBEstore_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SETBstore_0(v *Value) bool { b := v.Block - _ = b + typ := &b.Func.Config.Types // match: (SETBstore [off] {sym} ptr (InvertFlags x) mem) // cond: // result: (SETAstore [off] {sym} ptr x mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64InvertFlags { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64SETAstore) v.AuxInt = off v.Aux = sym @@ -48885,7 +47798,7 @@ func rewriteValueAMD64_OpAMD64SETBstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -48893,7 +47806,6 @@ func rewriteValueAMD64_OpAMD64SETBstore_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -48911,7 +47823,7 @@ func rewriteValueAMD64_OpAMD64SETBstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -48920,7 +47832,6 @@ func rewriteValueAMD64_OpAMD64SETBstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -48932,116 +47843,111 @@ func rewriteValueAMD64_OpAMD64SETBstore_0(v *Value) bool { v.AddArg(mem) return true } - // match: (SETBstore [off] {sym} ptr x:(FlagEQ) mem) + // match: (SETBstore [off] {sym} ptr (FlagEQ) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagEQ { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagEQ { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETBstore [off] {sym} ptr x:(FlagLT_ULT) mem) + // match: (SETBstore [off] {sym} ptr (FlagLT_ULT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagLT_ULT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagLT_ULT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETBstore [off] {sym} ptr x:(FlagLT_UGT) mem) + // match: (SETBstore [off] {sym} ptr (FlagLT_UGT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagLT_UGT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagLT_UGT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETBstore [off] {sym} ptr x:(FlagGT_ULT) mem) + // match: (SETBstore [off] {sym} ptr (FlagGT_ULT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagGT_ULT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagGT_ULT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETBstore [off] {sym} ptr x:(FlagGT_UGT) mem) + // match: (SETBstore [off] {sym} ptr (FlagGT_UGT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagGT_UGT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagGT_UGT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) @@ -49051,9 +47957,7 @@ func rewriteValueAMD64_OpAMD64SETBstore_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SETEQ_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SETEQ (TESTL (SHLL (MOVLconst [1]) x) y)) // cond: !config.nacl // result: (SETAE (BTL x y)) @@ -49062,12 +47966,12 @@ func rewriteValueAMD64_OpAMD64SETEQ_0(v *Value) bool { if v_0.Op != OpAMD64TESTL { break } - _ = v_0.Args[1] + y := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpAMD64SHLL { break } - _ = v_0_0.Args[1] + x := v_0_0.Args[1] v_0_0_0 := v_0_0.Args[0] if v_0_0_0.Op != OpAMD64MOVLconst { break @@ -49075,8 +47979,6 @@ func rewriteValueAMD64_OpAMD64SETEQ_0(v *Value) bool { if v_0_0_0.AuxInt != 1 { break } - x := v_0_0.Args[1] - y := v_0.Args[1] if !(!config.nacl) { break } @@ -49101,7 +48003,7 @@ func rewriteValueAMD64_OpAMD64SETEQ_0(v *Value) bool { if v_0_1.Op != OpAMD64SHLL { break } - _ = v_0_1.Args[1] + x := v_0_1.Args[1] v_0_1_0 := v_0_1.Args[0] if v_0_1_0.Op != OpAMD64MOVLconst { break @@ -49109,7 +48011,6 @@ func rewriteValueAMD64_OpAMD64SETEQ_0(v *Value) bool { if v_0_1_0.AuxInt != 1 { break } - x := v_0_1.Args[1] if !(!config.nacl) { break } @@ -49128,12 +48029,12 @@ func rewriteValueAMD64_OpAMD64SETEQ_0(v *Value) bool { if v_0.Op != OpAMD64TESTQ { break } - _ = v_0.Args[1] + y := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpAMD64SHLQ { break } - _ = v_0_0.Args[1] + x := v_0_0.Args[1] v_0_0_0 := v_0_0.Args[0] if v_0_0_0.Op != OpAMD64MOVQconst { break @@ -49141,8 +48042,6 @@ func rewriteValueAMD64_OpAMD64SETEQ_0(v *Value) bool { if v_0_0_0.AuxInt != 1 { break } - x := v_0_0.Args[1] - y := v_0.Args[1] if !(!config.nacl) { break } @@ -49167,7 +48066,7 @@ func rewriteValueAMD64_OpAMD64SETEQ_0(v *Value) bool { if v_0_1.Op != OpAMD64SHLQ { break } - _ = v_0_1.Args[1] + x := v_0_1.Args[1] v_0_1_0 := v_0_1.Args[0] if v_0_1_0.Op != OpAMD64MOVQconst { break @@ -49175,7 +48074,6 @@ func rewriteValueAMD64_OpAMD64SETEQ_0(v *Value) bool { if v_0_1_0.AuxInt != 1 { break } - x := v_0_1.Args[1] if !(!config.nacl) { break } @@ -49234,13 +48132,12 @@ func rewriteValueAMD64_OpAMD64SETEQ_0(v *Value) bool { if v_0.Op != OpAMD64TESTQ { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpAMD64MOVQconst { break } c := v_0_0.AuxInt - x := v_0.Args[1] if !(isUint64PowerOfTwo(c) && !config.nacl) { break } @@ -49330,9 +48227,7 @@ func rewriteValueAMD64_OpAMD64SETEQ_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SETEQ_10(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SETEQ (TESTQ z1:(SHLQconst [63] (SHRQconst [63] x)) z2)) // cond: z1==z2 && !config.nacl // result: (SETAE (BTQconst [63] x)) @@ -49341,7 +48236,7 @@ func rewriteValueAMD64_OpAMD64SETEQ_10(v *Value) bool { if v_0.Op != OpAMD64TESTQ { break } - _ = v_0.Args[1] + z2 := v_0.Args[1] z1 := v_0.Args[0] if z1.Op != OpAMD64SHLQconst { break @@ -49357,7 +48252,6 @@ func rewriteValueAMD64_OpAMD64SETEQ_10(v *Value) bool { break } x := z1_0.Args[0] - z2 := v_0.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -49411,7 +48305,7 @@ func rewriteValueAMD64_OpAMD64SETEQ_10(v *Value) bool { if v_0.Op != OpAMD64TESTL { break } - _ = v_0.Args[1] + z2 := v_0.Args[1] z1 := v_0.Args[0] if z1.Op != OpAMD64SHLLconst { break @@ -49427,7 +48321,6 @@ func rewriteValueAMD64_OpAMD64SETEQ_10(v *Value) bool { break } x := z1_0.Args[0] - z2 := v_0.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -49481,7 +48374,7 @@ func rewriteValueAMD64_OpAMD64SETEQ_10(v *Value) bool { if v_0.Op != OpAMD64TESTQ { break } - _ = v_0.Args[1] + z2 := v_0.Args[1] z1 := v_0.Args[0] if z1.Op != OpAMD64SHRQconst { break @@ -49497,7 +48390,6 @@ func rewriteValueAMD64_OpAMD64SETEQ_10(v *Value) bool { break } x := z1_0.Args[0] - z2 := v_0.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -49551,7 +48443,7 @@ func rewriteValueAMD64_OpAMD64SETEQ_10(v *Value) bool { if v_0.Op != OpAMD64TESTL { break } - _ = v_0.Args[1] + z2 := v_0.Args[1] z1 := v_0.Args[0] if z1.Op != OpAMD64SHRLconst { break @@ -49567,7 +48459,6 @@ func rewriteValueAMD64_OpAMD64SETEQ_10(v *Value) bool { break } x := z1_0.Args[0] - z2 := v_0.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -49621,7 +48512,7 @@ func rewriteValueAMD64_OpAMD64SETEQ_10(v *Value) bool { if v_0.Op != OpAMD64TESTQ { break } - _ = v_0.Args[1] + z2 := v_0.Args[1] z1 := v_0.Args[0] if z1.Op != OpAMD64SHRQconst { break @@ -49630,7 +48521,6 @@ func rewriteValueAMD64_OpAMD64SETEQ_10(v *Value) bool { break } x := z1.Args[0] - z2 := v_0.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -49673,9 +48563,7 @@ func rewriteValueAMD64_OpAMD64SETEQ_10(v *Value) bool { } func rewriteValueAMD64_OpAMD64SETEQ_20(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SETEQ (TESTL z1:(SHRLconst [31] x) z2)) // cond: z1==z2 && !config.nacl // result: (SETAE (BTLconst [31] x)) @@ -49684,7 +48572,7 @@ func rewriteValueAMD64_OpAMD64SETEQ_20(v *Value) bool { if v_0.Op != OpAMD64TESTL { break } - _ = v_0.Args[1] + z2 := v_0.Args[1] z1 := v_0.Args[0] if z1.Op != OpAMD64SHRLconst { break @@ -49693,7 +48581,6 @@ func rewriteValueAMD64_OpAMD64SETEQ_20(v *Value) bool { break } x := z1.Args[0] - z2 := v_0.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -49809,27 +48696,25 @@ func rewriteValueAMD64_OpAMD64SETEQ_20(v *Value) bool { } func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SETEQstore [off] {sym} ptr (TESTL (SHLL (MOVLconst [1]) x) y) mem) // cond: !config.nacl // result: (SETAEstore [off] {sym} ptr (BTL x y) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTL { break } - _ = v_1.Args[1] + y := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpAMD64SHLL { break } - _ = v_1_0.Args[1] + x := v_1_0.Args[1] v_1_0_0 := v_1_0.Args[0] if v_1_0_0.Op != OpAMD64MOVLconst { break @@ -49837,9 +48722,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { if v_1_0_0.AuxInt != 1 { break } - x := v_1_0.Args[1] - y := v_1.Args[1] - mem := v.Args[2] if !(!config.nacl) { break } @@ -49860,7 +48742,7 @@ func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTL { @@ -49872,7 +48754,7 @@ func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { if v_1_1.Op != OpAMD64SHLL { break } - _ = v_1_1.Args[1] + x := v_1_1.Args[1] v_1_1_0 := v_1_1.Args[0] if v_1_1_0.Op != OpAMD64MOVLconst { break @@ -49880,8 +48762,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { if v_1_1_0.AuxInt != 1 { break } - x := v_1_1.Args[1] - mem := v.Args[2] if !(!config.nacl) { break } @@ -49902,18 +48782,18 @@ func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQ { break } - _ = v_1.Args[1] + y := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpAMD64SHLQ { break } - _ = v_1_0.Args[1] + x := v_1_0.Args[1] v_1_0_0 := v_1_0.Args[0] if v_1_0_0.Op != OpAMD64MOVQconst { break @@ -49921,9 +48801,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { if v_1_0_0.AuxInt != 1 { break } - x := v_1_0.Args[1] - y := v_1.Args[1] - mem := v.Args[2] if !(!config.nacl) { break } @@ -49944,7 +48821,7 @@ func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQ { @@ -49956,7 +48833,7 @@ func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { if v_1_1.Op != OpAMD64SHLQ { break } - _ = v_1_1.Args[1] + x := v_1_1.Args[1] v_1_1_0 := v_1_1.Args[0] if v_1_1_0.Op != OpAMD64MOVQconst { break @@ -49964,8 +48841,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { if v_1_1_0.AuxInt != 1 { break } - x := v_1_1.Args[1] - mem := v.Args[2] if !(!config.nacl) { break } @@ -49986,7 +48861,7 @@ func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTLconst { @@ -49994,7 +48869,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { } c := v_1.AuxInt x := v_1.Args[0] - mem := v.Args[2] if !(isUint32PowerOfTwo(c) && !config.nacl) { break } @@ -50015,7 +48889,7 @@ func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQconst { @@ -50023,7 +48897,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { } c := v_1.AuxInt x := v_1.Args[0] - mem := v.Args[2] if !(isUint64PowerOfTwo(c) && !config.nacl) { break } @@ -50044,20 +48917,18 @@ func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQ { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpAMD64MOVQconst { break } c := v_1_0.AuxInt - x := v_1.Args[1] - mem := v.Args[2] if !(isUint64PowerOfTwo(c) && !config.nacl) { break } @@ -50078,7 +48949,7 @@ func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQ { @@ -50091,7 +48962,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { break } c := v_1_1.AuxInt - mem := v.Args[2] if !(isUint64PowerOfTwo(c) && !config.nacl) { break } @@ -50112,7 +48982,7 @@ func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64CMPLconst { @@ -50128,7 +48998,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { if s.AuxInt != 1 { break } - mem := v.Args[2] v.reset(OpAMD64SETNEstore) v.AuxInt = off v.Aux = sym @@ -50146,7 +49015,7 @@ func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64CMPQconst { @@ -50162,7 +49031,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { if s.AuxInt != 1 { break } - mem := v.Args[2] v.reset(OpAMD64SETNEstore) v.AuxInt = off v.Aux = sym @@ -50178,22 +49046,20 @@ func rewriteValueAMD64_OpAMD64SETEQstore_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SETEQstore_10(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SETEQstore [off] {sym} ptr (TESTQ z1:(SHLQconst [63] (SHRQconst [63] x)) z2) mem) // cond: z1==z2 && !config.nacl // result: (SETAEstore [off] {sym} ptr (BTQconst [63] x) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQ { break } - _ = v_1.Args[1] + z2 := v_1.Args[1] z1 := v_1.Args[0] if z1.Op != OpAMD64SHLQconst { break @@ -50209,8 +49075,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_10(v *Value) bool { break } x := z1_0.Args[0] - z2 := v_1.Args[1] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -50231,7 +49095,7 @@ func rewriteValueAMD64_OpAMD64SETEQstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQ { @@ -50254,7 +49118,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_10(v *Value) bool { break } x := z1_0.Args[0] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -50275,13 +49138,13 @@ func rewriteValueAMD64_OpAMD64SETEQstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTL { break } - _ = v_1.Args[1] + z2 := v_1.Args[1] z1 := v_1.Args[0] if z1.Op != OpAMD64SHLLconst { break @@ -50297,8 +49160,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_10(v *Value) bool { break } x := z1_0.Args[0] - z2 := v_1.Args[1] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -50319,7 +49180,7 @@ func rewriteValueAMD64_OpAMD64SETEQstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTL { @@ -50342,7 +49203,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_10(v *Value) bool { break } x := z1_0.Args[0] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -50363,13 +49223,13 @@ func rewriteValueAMD64_OpAMD64SETEQstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQ { break } - _ = v_1.Args[1] + z2 := v_1.Args[1] z1 := v_1.Args[0] if z1.Op != OpAMD64SHRQconst { break @@ -50385,8 +49245,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_10(v *Value) bool { break } x := z1_0.Args[0] - z2 := v_1.Args[1] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -50407,7 +49265,7 @@ func rewriteValueAMD64_OpAMD64SETEQstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQ { @@ -50430,7 +49288,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_10(v *Value) bool { break } x := z1_0.Args[0] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -50451,13 +49308,13 @@ func rewriteValueAMD64_OpAMD64SETEQstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTL { break } - _ = v_1.Args[1] + z2 := v_1.Args[1] z1 := v_1.Args[0] if z1.Op != OpAMD64SHRLconst { break @@ -50473,8 +49330,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_10(v *Value) bool { break } x := z1_0.Args[0] - z2 := v_1.Args[1] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -50495,7 +49350,7 @@ func rewriteValueAMD64_OpAMD64SETEQstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTL { @@ -50518,7 +49373,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_10(v *Value) bool { break } x := z1_0.Args[0] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -50539,13 +49393,13 @@ func rewriteValueAMD64_OpAMD64SETEQstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQ { break } - _ = v_1.Args[1] + z2 := v_1.Args[1] z1 := v_1.Args[0] if z1.Op != OpAMD64SHRQconst { break @@ -50554,8 +49408,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_10(v *Value) bool { break } x := z1.Args[0] - z2 := v_1.Args[1] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -50576,7 +49428,7 @@ func rewriteValueAMD64_OpAMD64SETEQstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQ { @@ -50592,7 +49444,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_10(v *Value) bool { break } x := z1.Args[0] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -50611,22 +49462,21 @@ func rewriteValueAMD64_OpAMD64SETEQstore_10(v *Value) bool { } func rewriteValueAMD64_OpAMD64SETEQstore_20(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config + typ := &b.Func.Config.Types // match: (SETEQstore [off] {sym} ptr (TESTL z1:(SHRLconst [31] x) z2) mem) // cond: z1==z2 && !config.nacl // result: (SETAEstore [off] {sym} ptr (BTLconst [31] x) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTL { break } - _ = v_1.Args[1] + z2 := v_1.Args[1] z1 := v_1.Args[0] if z1.Op != OpAMD64SHRLconst { break @@ -50635,8 +49485,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_20(v *Value) bool { break } x := z1.Args[0] - z2 := v_1.Args[1] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -50657,7 +49505,7 @@ func rewriteValueAMD64_OpAMD64SETEQstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTL { @@ -50673,7 +49521,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_20(v *Value) bool { break } x := z1.Args[0] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -50694,14 +49541,13 @@ func rewriteValueAMD64_OpAMD64SETEQstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64InvertFlags { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64SETEQstore) v.AuxInt = off v.Aux = sym @@ -50716,7 +49562,7 @@ func rewriteValueAMD64_OpAMD64SETEQstore_20(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -50724,7 +49570,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_20(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -50742,7 +49587,7 @@ func rewriteValueAMD64_OpAMD64SETEQstore_20(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -50751,7 +49596,6 @@ func rewriteValueAMD64_OpAMD64SETEQstore_20(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -50763,116 +49607,111 @@ func rewriteValueAMD64_OpAMD64SETEQstore_20(v *Value) bool { v.AddArg(mem) return true } - // match: (SETEQstore [off] {sym} ptr x:(FlagEQ) mem) + // match: (SETEQstore [off] {sym} ptr (FlagEQ) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagEQ { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagEQ { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETEQstore [off] {sym} ptr x:(FlagLT_ULT) mem) + // match: (SETEQstore [off] {sym} ptr (FlagLT_ULT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagLT_ULT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagLT_ULT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETEQstore [off] {sym} ptr x:(FlagLT_UGT) mem) + // match: (SETEQstore [off] {sym} ptr (FlagLT_UGT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagLT_UGT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagLT_UGT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETEQstore [off] {sym} ptr x:(FlagGT_ULT) mem) + // match: (SETEQstore [off] {sym} ptr (FlagGT_ULT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagGT_ULT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagGT_ULT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETEQstore [off] {sym} ptr x:(FlagGT_UGT) mem) + // match: (SETEQstore [off] {sym} ptr (FlagGT_UGT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagGT_UGT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagGT_UGT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) @@ -51034,21 +49873,20 @@ func rewriteValueAMD64_OpAMD64SETGE_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SETGEstore_0(v *Value) bool { b := v.Block - _ = b + typ := &b.Func.Config.Types // match: (SETGEstore [off] {sym} ptr (InvertFlags x) mem) // cond: // result: (SETLEstore [off] {sym} ptr x mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64InvertFlags { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64SETLEstore) v.AuxInt = off v.Aux = sym @@ -51063,7 +49901,7 @@ func rewriteValueAMD64_OpAMD64SETGEstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -51071,7 +49909,6 @@ func rewriteValueAMD64_OpAMD64SETGEstore_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -51089,7 +49926,7 @@ func rewriteValueAMD64_OpAMD64SETGEstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -51098,7 +49935,6 @@ func rewriteValueAMD64_OpAMD64SETGEstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -51110,116 +49946,111 @@ func rewriteValueAMD64_OpAMD64SETGEstore_0(v *Value) bool { v.AddArg(mem) return true } - // match: (SETGEstore [off] {sym} ptr x:(FlagEQ) mem) + // match: (SETGEstore [off] {sym} ptr (FlagEQ) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagEQ { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagEQ { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETGEstore [off] {sym} ptr x:(FlagLT_ULT) mem) + // match: (SETGEstore [off] {sym} ptr (FlagLT_ULT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagLT_ULT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagLT_ULT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETGEstore [off] {sym} ptr x:(FlagLT_UGT) mem) + // match: (SETGEstore [off] {sym} ptr (FlagLT_UGT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagLT_UGT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagLT_UGT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETGEstore [off] {sym} ptr x:(FlagGT_ULT) mem) + // match: (SETGEstore [off] {sym} ptr (FlagGT_ULT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagGT_ULT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagGT_ULT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETGEstore [off] {sym} ptr x:(FlagGT_UGT) mem) + // match: (SETGEstore [off] {sym} ptr (FlagGT_UGT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagGT_UGT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagGT_UGT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) @@ -51229,21 +50060,20 @@ func rewriteValueAMD64_OpAMD64SETGEstore_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SETGstore_0(v *Value) bool { b := v.Block - _ = b + typ := &b.Func.Config.Types // match: (SETGstore [off] {sym} ptr (InvertFlags x) mem) // cond: // result: (SETLstore [off] {sym} ptr x mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64InvertFlags { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64SETLstore) v.AuxInt = off v.Aux = sym @@ -51258,7 +50088,7 @@ func rewriteValueAMD64_OpAMD64SETGstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -51266,7 +50096,6 @@ func rewriteValueAMD64_OpAMD64SETGstore_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -51284,7 +50113,7 @@ func rewriteValueAMD64_OpAMD64SETGstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -51293,7 +50122,6 @@ func rewriteValueAMD64_OpAMD64SETGstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -51305,116 +50133,111 @@ func rewriteValueAMD64_OpAMD64SETGstore_0(v *Value) bool { v.AddArg(mem) return true } - // match: (SETGstore [off] {sym} ptr x:(FlagEQ) mem) + // match: (SETGstore [off] {sym} ptr (FlagEQ) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagEQ { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagEQ { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETGstore [off] {sym} ptr x:(FlagLT_ULT) mem) + // match: (SETGstore [off] {sym} ptr (FlagLT_ULT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagLT_ULT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagLT_ULT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETGstore [off] {sym} ptr x:(FlagLT_UGT) mem) + // match: (SETGstore [off] {sym} ptr (FlagLT_UGT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagLT_UGT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagLT_UGT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETGstore [off] {sym} ptr x:(FlagGT_ULT) mem) + // match: (SETGstore [off] {sym} ptr (FlagGT_ULT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagGT_ULT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagGT_ULT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETGstore [off] {sym} ptr x:(FlagGT_UGT) mem) + // match: (SETGstore [off] {sym} ptr (FlagGT_UGT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagGT_UGT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagGT_UGT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) @@ -51576,21 +50399,20 @@ func rewriteValueAMD64_OpAMD64SETLE_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SETLEstore_0(v *Value) bool { b := v.Block - _ = b + typ := &b.Func.Config.Types // match: (SETLEstore [off] {sym} ptr (InvertFlags x) mem) // cond: // result: (SETGEstore [off] {sym} ptr x mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64InvertFlags { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64SETGEstore) v.AuxInt = off v.Aux = sym @@ -51605,7 +50427,7 @@ func rewriteValueAMD64_OpAMD64SETLEstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -51613,7 +50435,6 @@ func rewriteValueAMD64_OpAMD64SETLEstore_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -51631,7 +50452,7 @@ func rewriteValueAMD64_OpAMD64SETLEstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -51640,7 +50461,6 @@ func rewriteValueAMD64_OpAMD64SETLEstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -51652,116 +50472,111 @@ func rewriteValueAMD64_OpAMD64SETLEstore_0(v *Value) bool { v.AddArg(mem) return true } - // match: (SETLEstore [off] {sym} ptr x:(FlagEQ) mem) + // match: (SETLEstore [off] {sym} ptr (FlagEQ) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagEQ { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagEQ { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETLEstore [off] {sym} ptr x:(FlagLT_ULT) mem) + // match: (SETLEstore [off] {sym} ptr (FlagLT_ULT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagLT_ULT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagLT_ULT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETLEstore [off] {sym} ptr x:(FlagLT_UGT) mem) + // match: (SETLEstore [off] {sym} ptr (FlagLT_UGT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagLT_UGT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagLT_UGT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETLEstore [off] {sym} ptr x:(FlagGT_ULT) mem) + // match: (SETLEstore [off] {sym} ptr (FlagGT_ULT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagGT_ULT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagGT_ULT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETLEstore [off] {sym} ptr x:(FlagGT_UGT) mem) + // match: (SETLEstore [off] {sym} ptr (FlagGT_UGT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagGT_UGT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagGT_UGT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) @@ -51771,21 +50586,20 @@ func rewriteValueAMD64_OpAMD64SETLEstore_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SETLstore_0(v *Value) bool { b := v.Block - _ = b + typ := &b.Func.Config.Types // match: (SETLstore [off] {sym} ptr (InvertFlags x) mem) // cond: // result: (SETGstore [off] {sym} ptr x mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64InvertFlags { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64SETGstore) v.AuxInt = off v.Aux = sym @@ -51800,7 +50614,7 @@ func rewriteValueAMD64_OpAMD64SETLstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -51808,7 +50622,6 @@ func rewriteValueAMD64_OpAMD64SETLstore_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -51826,7 +50639,7 @@ func rewriteValueAMD64_OpAMD64SETLstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -51835,7 +50648,6 @@ func rewriteValueAMD64_OpAMD64SETLstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -51847,116 +50659,111 @@ func rewriteValueAMD64_OpAMD64SETLstore_0(v *Value) bool { v.AddArg(mem) return true } - // match: (SETLstore [off] {sym} ptr x:(FlagEQ) mem) + // match: (SETLstore [off] {sym} ptr (FlagEQ) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagEQ { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagEQ { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETLstore [off] {sym} ptr x:(FlagLT_ULT) mem) + // match: (SETLstore [off] {sym} ptr (FlagLT_ULT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagLT_ULT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagLT_ULT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETLstore [off] {sym} ptr x:(FlagLT_UGT) mem) + // match: (SETLstore [off] {sym} ptr (FlagLT_UGT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagLT_UGT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagLT_UGT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETLstore [off] {sym} ptr x:(FlagGT_ULT) mem) + // match: (SETLstore [off] {sym} ptr (FlagGT_ULT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagGT_ULT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagGT_ULT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETLstore [off] {sym} ptr x:(FlagGT_UGT) mem) + // match: (SETLstore [off] {sym} ptr (FlagGT_UGT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagGT_UGT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagGT_UGT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) @@ -51966,9 +50773,7 @@ func rewriteValueAMD64_OpAMD64SETLstore_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SETNE_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SETNE (TESTL (SHLL (MOVLconst [1]) x) y)) // cond: !config.nacl // result: (SETB (BTL x y)) @@ -51977,12 +50782,12 @@ func rewriteValueAMD64_OpAMD64SETNE_0(v *Value) bool { if v_0.Op != OpAMD64TESTL { break } - _ = v_0.Args[1] + y := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpAMD64SHLL { break } - _ = v_0_0.Args[1] + x := v_0_0.Args[1] v_0_0_0 := v_0_0.Args[0] if v_0_0_0.Op != OpAMD64MOVLconst { break @@ -51990,8 +50795,6 @@ func rewriteValueAMD64_OpAMD64SETNE_0(v *Value) bool { if v_0_0_0.AuxInt != 1 { break } - x := v_0_0.Args[1] - y := v_0.Args[1] if !(!config.nacl) { break } @@ -52016,7 +50819,7 @@ func rewriteValueAMD64_OpAMD64SETNE_0(v *Value) bool { if v_0_1.Op != OpAMD64SHLL { break } - _ = v_0_1.Args[1] + x := v_0_1.Args[1] v_0_1_0 := v_0_1.Args[0] if v_0_1_0.Op != OpAMD64MOVLconst { break @@ -52024,7 +50827,6 @@ func rewriteValueAMD64_OpAMD64SETNE_0(v *Value) bool { if v_0_1_0.AuxInt != 1 { break } - x := v_0_1.Args[1] if !(!config.nacl) { break } @@ -52043,12 +50845,12 @@ func rewriteValueAMD64_OpAMD64SETNE_0(v *Value) bool { if v_0.Op != OpAMD64TESTQ { break } - _ = v_0.Args[1] + y := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpAMD64SHLQ { break } - _ = v_0_0.Args[1] + x := v_0_0.Args[1] v_0_0_0 := v_0_0.Args[0] if v_0_0_0.Op != OpAMD64MOVQconst { break @@ -52056,8 +50858,6 @@ func rewriteValueAMD64_OpAMD64SETNE_0(v *Value) bool { if v_0_0_0.AuxInt != 1 { break } - x := v_0_0.Args[1] - y := v_0.Args[1] if !(!config.nacl) { break } @@ -52082,7 +50882,7 @@ func rewriteValueAMD64_OpAMD64SETNE_0(v *Value) bool { if v_0_1.Op != OpAMD64SHLQ { break } - _ = v_0_1.Args[1] + x := v_0_1.Args[1] v_0_1_0 := v_0_1.Args[0] if v_0_1_0.Op != OpAMD64MOVQconst { break @@ -52090,7 +50890,6 @@ func rewriteValueAMD64_OpAMD64SETNE_0(v *Value) bool { if v_0_1_0.AuxInt != 1 { break } - x := v_0_1.Args[1] if !(!config.nacl) { break } @@ -52149,13 +50948,12 @@ func rewriteValueAMD64_OpAMD64SETNE_0(v *Value) bool { if v_0.Op != OpAMD64TESTQ { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpAMD64MOVQconst { break } c := v_0_0.AuxInt - x := v_0.Args[1] if !(isUint64PowerOfTwo(c) && !config.nacl) { break } @@ -52245,9 +51043,7 @@ func rewriteValueAMD64_OpAMD64SETNE_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SETNE_10(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SETNE (TESTQ z1:(SHLQconst [63] (SHRQconst [63] x)) z2)) // cond: z1==z2 && !config.nacl // result: (SETB (BTQconst [63] x)) @@ -52256,7 +51052,7 @@ func rewriteValueAMD64_OpAMD64SETNE_10(v *Value) bool { if v_0.Op != OpAMD64TESTQ { break } - _ = v_0.Args[1] + z2 := v_0.Args[1] z1 := v_0.Args[0] if z1.Op != OpAMD64SHLQconst { break @@ -52272,7 +51068,6 @@ func rewriteValueAMD64_OpAMD64SETNE_10(v *Value) bool { break } x := z1_0.Args[0] - z2 := v_0.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -52326,7 +51121,7 @@ func rewriteValueAMD64_OpAMD64SETNE_10(v *Value) bool { if v_0.Op != OpAMD64TESTL { break } - _ = v_0.Args[1] + z2 := v_0.Args[1] z1 := v_0.Args[0] if z1.Op != OpAMD64SHLLconst { break @@ -52342,7 +51137,6 @@ func rewriteValueAMD64_OpAMD64SETNE_10(v *Value) bool { break } x := z1_0.Args[0] - z2 := v_0.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -52396,7 +51190,7 @@ func rewriteValueAMD64_OpAMD64SETNE_10(v *Value) bool { if v_0.Op != OpAMD64TESTQ { break } - _ = v_0.Args[1] + z2 := v_0.Args[1] z1 := v_0.Args[0] if z1.Op != OpAMD64SHRQconst { break @@ -52412,7 +51206,6 @@ func rewriteValueAMD64_OpAMD64SETNE_10(v *Value) bool { break } x := z1_0.Args[0] - z2 := v_0.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -52466,7 +51259,7 @@ func rewriteValueAMD64_OpAMD64SETNE_10(v *Value) bool { if v_0.Op != OpAMD64TESTL { break } - _ = v_0.Args[1] + z2 := v_0.Args[1] z1 := v_0.Args[0] if z1.Op != OpAMD64SHRLconst { break @@ -52482,7 +51275,6 @@ func rewriteValueAMD64_OpAMD64SETNE_10(v *Value) bool { break } x := z1_0.Args[0] - z2 := v_0.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -52536,7 +51328,7 @@ func rewriteValueAMD64_OpAMD64SETNE_10(v *Value) bool { if v_0.Op != OpAMD64TESTQ { break } - _ = v_0.Args[1] + z2 := v_0.Args[1] z1 := v_0.Args[0] if z1.Op != OpAMD64SHRQconst { break @@ -52545,7 +51337,6 @@ func rewriteValueAMD64_OpAMD64SETNE_10(v *Value) bool { break } x := z1.Args[0] - z2 := v_0.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -52588,9 +51379,7 @@ func rewriteValueAMD64_OpAMD64SETNE_10(v *Value) bool { } func rewriteValueAMD64_OpAMD64SETNE_20(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SETNE (TESTL z1:(SHRLconst [31] x) z2)) // cond: z1==z2 && !config.nacl // result: (SETB (BTLconst [31] x)) @@ -52599,7 +51388,7 @@ func rewriteValueAMD64_OpAMD64SETNE_20(v *Value) bool { if v_0.Op != OpAMD64TESTL { break } - _ = v_0.Args[1] + z2 := v_0.Args[1] z1 := v_0.Args[0] if z1.Op != OpAMD64SHRLconst { break @@ -52608,7 +51397,6 @@ func rewriteValueAMD64_OpAMD64SETNE_20(v *Value) bool { break } x := z1.Args[0] - z2 := v_0.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -52724,27 +51512,25 @@ func rewriteValueAMD64_OpAMD64SETNE_20(v *Value) bool { } func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SETNEstore [off] {sym} ptr (TESTL (SHLL (MOVLconst [1]) x) y) mem) // cond: !config.nacl // result: (SETBstore [off] {sym} ptr (BTL x y) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTL { break } - _ = v_1.Args[1] + y := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpAMD64SHLL { break } - _ = v_1_0.Args[1] + x := v_1_0.Args[1] v_1_0_0 := v_1_0.Args[0] if v_1_0_0.Op != OpAMD64MOVLconst { break @@ -52752,9 +51538,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { if v_1_0_0.AuxInt != 1 { break } - x := v_1_0.Args[1] - y := v_1.Args[1] - mem := v.Args[2] if !(!config.nacl) { break } @@ -52775,7 +51558,7 @@ func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTL { @@ -52787,7 +51570,7 @@ func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { if v_1_1.Op != OpAMD64SHLL { break } - _ = v_1_1.Args[1] + x := v_1_1.Args[1] v_1_1_0 := v_1_1.Args[0] if v_1_1_0.Op != OpAMD64MOVLconst { break @@ -52795,8 +51578,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { if v_1_1_0.AuxInt != 1 { break } - x := v_1_1.Args[1] - mem := v.Args[2] if !(!config.nacl) { break } @@ -52817,18 +51598,18 @@ func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQ { break } - _ = v_1.Args[1] + y := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpAMD64SHLQ { break } - _ = v_1_0.Args[1] + x := v_1_0.Args[1] v_1_0_0 := v_1_0.Args[0] if v_1_0_0.Op != OpAMD64MOVQconst { break @@ -52836,9 +51617,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { if v_1_0_0.AuxInt != 1 { break } - x := v_1_0.Args[1] - y := v_1.Args[1] - mem := v.Args[2] if !(!config.nacl) { break } @@ -52859,7 +51637,7 @@ func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQ { @@ -52871,7 +51649,7 @@ func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { if v_1_1.Op != OpAMD64SHLQ { break } - _ = v_1_1.Args[1] + x := v_1_1.Args[1] v_1_1_0 := v_1_1.Args[0] if v_1_1_0.Op != OpAMD64MOVQconst { break @@ -52879,8 +51657,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { if v_1_1_0.AuxInt != 1 { break } - x := v_1_1.Args[1] - mem := v.Args[2] if !(!config.nacl) { break } @@ -52901,7 +51677,7 @@ func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTLconst { @@ -52909,7 +51685,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { } c := v_1.AuxInt x := v_1.Args[0] - mem := v.Args[2] if !(isUint32PowerOfTwo(c) && !config.nacl) { break } @@ -52930,7 +51705,7 @@ func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQconst { @@ -52938,7 +51713,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { } c := v_1.AuxInt x := v_1.Args[0] - mem := v.Args[2] if !(isUint64PowerOfTwo(c) && !config.nacl) { break } @@ -52959,20 +51733,18 @@ func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQ { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpAMD64MOVQconst { break } c := v_1_0.AuxInt - x := v_1.Args[1] - mem := v.Args[2] if !(isUint64PowerOfTwo(c) && !config.nacl) { break } @@ -52993,7 +51765,7 @@ func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQ { @@ -53006,7 +51778,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { break } c := v_1_1.AuxInt - mem := v.Args[2] if !(isUint64PowerOfTwo(c) && !config.nacl) { break } @@ -53027,7 +51798,7 @@ func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64CMPLconst { @@ -53043,7 +51814,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { if s.AuxInt != 1 { break } - mem := v.Args[2] v.reset(OpAMD64SETEQstore) v.AuxInt = off v.Aux = sym @@ -53061,7 +51831,7 @@ func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64CMPQconst { @@ -53077,7 +51847,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { if s.AuxInt != 1 { break } - mem := v.Args[2] v.reset(OpAMD64SETEQstore) v.AuxInt = off v.Aux = sym @@ -53093,22 +51862,20 @@ func rewriteValueAMD64_OpAMD64SETNEstore_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SETNEstore_10(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SETNEstore [off] {sym} ptr (TESTQ z1:(SHLQconst [63] (SHRQconst [63] x)) z2) mem) // cond: z1==z2 && !config.nacl // result: (SETBstore [off] {sym} ptr (BTQconst [63] x) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQ { break } - _ = v_1.Args[1] + z2 := v_1.Args[1] z1 := v_1.Args[0] if z1.Op != OpAMD64SHLQconst { break @@ -53124,8 +51891,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_10(v *Value) bool { break } x := z1_0.Args[0] - z2 := v_1.Args[1] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -53146,7 +51911,7 @@ func rewriteValueAMD64_OpAMD64SETNEstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQ { @@ -53169,7 +51934,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_10(v *Value) bool { break } x := z1_0.Args[0] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -53190,13 +51954,13 @@ func rewriteValueAMD64_OpAMD64SETNEstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTL { break } - _ = v_1.Args[1] + z2 := v_1.Args[1] z1 := v_1.Args[0] if z1.Op != OpAMD64SHLLconst { break @@ -53212,8 +51976,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_10(v *Value) bool { break } x := z1_0.Args[0] - z2 := v_1.Args[1] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -53234,7 +51996,7 @@ func rewriteValueAMD64_OpAMD64SETNEstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTL { @@ -53257,7 +52019,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_10(v *Value) bool { break } x := z1_0.Args[0] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -53278,13 +52039,13 @@ func rewriteValueAMD64_OpAMD64SETNEstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQ { break } - _ = v_1.Args[1] + z2 := v_1.Args[1] z1 := v_1.Args[0] if z1.Op != OpAMD64SHRQconst { break @@ -53300,8 +52061,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_10(v *Value) bool { break } x := z1_0.Args[0] - z2 := v_1.Args[1] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -53322,7 +52081,7 @@ func rewriteValueAMD64_OpAMD64SETNEstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQ { @@ -53345,7 +52104,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_10(v *Value) bool { break } x := z1_0.Args[0] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -53366,13 +52124,13 @@ func rewriteValueAMD64_OpAMD64SETNEstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTL { break } - _ = v_1.Args[1] + z2 := v_1.Args[1] z1 := v_1.Args[0] if z1.Op != OpAMD64SHRLconst { break @@ -53388,8 +52146,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_10(v *Value) bool { break } x := z1_0.Args[0] - z2 := v_1.Args[1] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -53410,7 +52166,7 @@ func rewriteValueAMD64_OpAMD64SETNEstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTL { @@ -53433,7 +52189,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_10(v *Value) bool { break } x := z1_0.Args[0] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -53454,13 +52209,13 @@ func rewriteValueAMD64_OpAMD64SETNEstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQ { break } - _ = v_1.Args[1] + z2 := v_1.Args[1] z1 := v_1.Args[0] if z1.Op != OpAMD64SHRQconst { break @@ -53469,8 +52224,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_10(v *Value) bool { break } x := z1.Args[0] - z2 := v_1.Args[1] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -53491,7 +52244,7 @@ func rewriteValueAMD64_OpAMD64SETNEstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTQ { @@ -53507,7 +52260,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_10(v *Value) bool { break } x := z1.Args[0] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -53526,22 +52278,21 @@ func rewriteValueAMD64_OpAMD64SETNEstore_10(v *Value) bool { } func rewriteValueAMD64_OpAMD64SETNEstore_20(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config + typ := &b.Func.Config.Types // match: (SETNEstore [off] {sym} ptr (TESTL z1:(SHRLconst [31] x) z2) mem) // cond: z1==z2 && !config.nacl // result: (SETBstore [off] {sym} ptr (BTLconst [31] x) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTL { break } - _ = v_1.Args[1] + z2 := v_1.Args[1] z1 := v_1.Args[0] if z1.Op != OpAMD64SHRLconst { break @@ -53550,8 +52301,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_20(v *Value) bool { break } x := z1.Args[0] - z2 := v_1.Args[1] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -53572,7 +52321,7 @@ func rewriteValueAMD64_OpAMD64SETNEstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64TESTL { @@ -53588,7 +52337,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_20(v *Value) bool { break } x := z1.Args[0] - mem := v.Args[2] if !(z1 == z2 && !config.nacl) { break } @@ -53609,14 +52357,13 @@ func rewriteValueAMD64_OpAMD64SETNEstore_20(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64InvertFlags { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpAMD64SETNEstore) v.AuxInt = off v.Aux = sym @@ -53631,7 +52378,7 @@ func rewriteValueAMD64_OpAMD64SETNEstore_20(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -53639,7 +52386,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_20(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -53657,7 +52403,7 @@ func rewriteValueAMD64_OpAMD64SETNEstore_20(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -53666,7 +52412,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_20(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -53678,116 +52423,111 @@ func rewriteValueAMD64_OpAMD64SETNEstore_20(v *Value) bool { v.AddArg(mem) return true } - // match: (SETNEstore [off] {sym} ptr x:(FlagEQ) mem) + // match: (SETNEstore [off] {sym} ptr (FlagEQ) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [0]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagEQ { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagEQ { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 0 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETNEstore [off] {sym} ptr x:(FlagLT_ULT) mem) + // match: (SETNEstore [off] {sym} ptr (FlagLT_ULT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagLT_ULT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagLT_ULT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETNEstore [off] {sym} ptr x:(FlagLT_UGT) mem) + // match: (SETNEstore [off] {sym} ptr (FlagLT_UGT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagLT_UGT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagLT_UGT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETNEstore [off] {sym} ptr x:(FlagGT_ULT) mem) + // match: (SETNEstore [off] {sym} ptr (FlagGT_ULT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagGT_ULT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagGT_ULT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) return true } - // match: (SETNEstore [off] {sym} ptr x:(FlagGT_UGT) mem) + // match: (SETNEstore [off] {sym} ptr (FlagGT_UGT) mem) // cond: - // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) + // result: (MOVBstore [off] {sym} ptr (MOVLconst [1]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] - x := v.Args[1] - if x.Op != OpAMD64FlagGT_UGT { + v_1 := v.Args[1] + if v_1.Op != OpAMD64FlagGT_UGT { break } - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = off v.Aux = sym v.AddArg(ptr) - v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, x.Type) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLconst, typ.UInt8) v0.AuxInt = 1 v.AddArg(v0) v.AddArg(mem) @@ -53797,7 +52537,6 @@ func rewriteValueAMD64_OpAMD64SETNEstore_20(v *Value) bool { } func rewriteValueAMD64_OpAMD64SHLL_0(v *Value) bool { b := v.Block - _ = b // match: (SHLL x (MOVQconst [c])) // cond: // result: (SHLLconst [c&31] x) @@ -54022,9 +52761,7 @@ func rewriteValueAMD64_OpAMD64SHLL_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SHLLconst_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SHLLconst [1] (SHRLconst [1] x)) // cond: !config.nacl // result: (BTRLconst [0] x) @@ -54065,7 +52802,6 @@ func rewriteValueAMD64_OpAMD64SHLLconst_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SHLQ_0(v *Value) bool { b := v.Block - _ = b // match: (SHLQ x (MOVQconst [c])) // cond: // result: (SHLQconst [c&63] x) @@ -54290,9 +53026,7 @@ func rewriteValueAMD64_OpAMD64SHLQ_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SHLQconst_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SHLQconst [1] (SHRQconst [1] x)) // cond: !config.nacl // result: (BTRQconst [0] x) @@ -54424,7 +53158,6 @@ func rewriteValueAMD64_OpAMD64SHRBconst_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SHRL_0(v *Value) bool { b := v.Block - _ = b // match: (SHRL x (MOVQconst [c])) // cond: // result: (SHRLconst [c&31] x) @@ -54649,9 +53382,7 @@ func rewriteValueAMD64_OpAMD64SHRL_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SHRLconst_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SHRLconst [1] (SHLLconst [1] x)) // cond: !config.nacl // result: (BTRLconst [31] x) @@ -54692,7 +53423,6 @@ func rewriteValueAMD64_OpAMD64SHRLconst_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SHRQ_0(v *Value) bool { b := v.Block - _ = b // match: (SHRQ x (MOVQconst [c])) // cond: // result: (SHRQconst [c&63] x) @@ -54917,9 +53647,7 @@ func rewriteValueAMD64_OpAMD64SHRQ_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SHRQconst_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SHRQconst [1] (SHLQconst [1] x)) // cond: !config.nacl // result: (BTRQconst [63] x) @@ -55051,7 +53779,6 @@ func rewriteValueAMD64_OpAMD64SHRWconst_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SUBL_0(v *Value) bool { b := v.Block - _ = b // match: (SUBL x (MOVLconst [c])) // cond: // result: (SUBLconst x [c]) @@ -55072,13 +53799,12 @@ func rewriteValueAMD64_OpAMD64SUBL_0(v *Value) bool { // cond: // result: (NEGL (SUBLconst x [c])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpAMD64NEGL) v0 := b.NewValue0(v.Pos, OpAMD64SUBLconst, v.Type) v0.AuxInt = c @@ -55090,9 +53816,8 @@ func rewriteValueAMD64_OpAMD64SUBL_0(v *Value) bool { // cond: // result: (MOVLconst [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpAMD64MOVLconst) @@ -55111,9 +53836,8 @@ func rewriteValueAMD64_OpAMD64SUBL_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -55156,16 +53880,14 @@ func rewriteValueAMD64_OpAMD64SUBLconst_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SUBLload_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SUBLload [off1] {sym} val (ADDQconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (SUBLload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -55173,7 +53895,6 @@ func rewriteValueAMD64_OpAMD64SUBLload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -55191,7 +53912,7 @@ func rewriteValueAMD64_OpAMD64SUBLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64LEAQ { @@ -55200,7 +53921,6 @@ func rewriteValueAMD64_OpAMD64SUBLload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -55252,7 +53972,7 @@ func rewriteValueAMD64_OpAMD64SUBLmodify_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -55260,7 +53980,6 @@ func rewriteValueAMD64_OpAMD64SUBLmodify_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -55278,7 +53997,7 @@ func rewriteValueAMD64_OpAMD64SUBLmodify_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -55287,7 +54006,6 @@ func rewriteValueAMD64_OpAMD64SUBLmodify_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -55303,7 +54021,6 @@ func rewriteValueAMD64_OpAMD64SUBLmodify_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SUBQ_0(v *Value) bool { b := v.Block - _ = b // match: (SUBQ x (MOVQconst [c])) // cond: is32Bit(c) // result: (SUBQconst x [c]) @@ -55327,13 +54044,12 @@ func rewriteValueAMD64_OpAMD64SUBQ_0(v *Value) bool { // cond: is32Bit(c) // result: (NEGQ (SUBQconst x [c])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVQconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c)) { break } @@ -55348,9 +54064,8 @@ func rewriteValueAMD64_OpAMD64SUBQ_0(v *Value) bool { // cond: // result: (MOVQconst [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpAMD64MOVQconst) @@ -55369,9 +54084,8 @@ func rewriteValueAMD64_OpAMD64SUBQ_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -55472,16 +54186,14 @@ func rewriteValueAMD64_OpAMD64SUBQconst_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SUBQload_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SUBQload [off1] {sym} val (ADDQconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (SUBQload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -55489,7 +54201,6 @@ func rewriteValueAMD64_OpAMD64SUBQload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -55507,7 +54218,7 @@ func rewriteValueAMD64_OpAMD64SUBQload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64LEAQ { @@ -55516,7 +54227,6 @@ func rewriteValueAMD64_OpAMD64SUBQload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -55568,7 +54278,7 @@ func rewriteValueAMD64_OpAMD64SUBQmodify_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -55576,7 +54286,6 @@ func rewriteValueAMD64_OpAMD64SUBQmodify_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -55594,7 +54303,7 @@ func rewriteValueAMD64_OpAMD64SUBQmodify_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -55603,7 +54312,6 @@ func rewriteValueAMD64_OpAMD64SUBQmodify_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -55630,9 +54338,8 @@ func rewriteValueAMD64_OpAMD64SUBSD_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -55648,16 +54355,14 @@ func rewriteValueAMD64_OpAMD64SUBSD_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SUBSDload_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SUBSDload [off1] {sym} val (ADDQconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (SUBSDload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -55665,7 +54370,6 @@ func rewriteValueAMD64_OpAMD64SUBSDload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -55683,7 +54387,7 @@ func rewriteValueAMD64_OpAMD64SUBSDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64LEAQ { @@ -55692,7 +54396,6 @@ func rewriteValueAMD64_OpAMD64SUBSDload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -55750,9 +54453,8 @@ func rewriteValueAMD64_OpAMD64SUBSS_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -55768,16 +54470,14 @@ func rewriteValueAMD64_OpAMD64SUBSS_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64SUBSSload_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SUBSSload [off1] {sym} val (ADDQconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (SUBSSload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -55785,7 +54485,6 @@ func rewriteValueAMD64_OpAMD64SUBSSload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -55803,7 +54502,7 @@ func rewriteValueAMD64_OpAMD64SUBSSload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64LEAQ { @@ -55812,7 +54511,6 @@ func rewriteValueAMD64_OpAMD64SUBSSload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -55859,18 +54557,16 @@ func rewriteValueAMD64_OpAMD64SUBSSload_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64TESTB_0(v *Value) bool { b := v.Block - _ = b // match: (TESTB (MOVLconst [c]) x) // cond: // result: (TESTBconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpAMD64TESTBconst) v.AuxInt = c v.AddArg(x) @@ -55896,17 +54592,15 @@ func rewriteValueAMD64_OpAMD64TESTB_0(v *Value) bool { // cond: l == l2 && l.Uses == 2 && validValAndOff(0,off) && clobber(l) // result: @l.Block (CMPBconstload {sym} [makeValAndOff(0,off)] ptr mem) for { - _ = v.Args[1] + l2 := v.Args[1] l := v.Args[0] if l.Op != OpAMD64MOVBload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - l2 := v.Args[1] + ptr := l.Args[0] if !(l == l2 && l.Uses == 2 && validValAndOff(0, off) && clobber(l)) { break } @@ -55932,9 +54626,8 @@ func rewriteValueAMD64_OpAMD64TESTB_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(l == l2 && l.Uses == 2 && validValAndOff(0, off) && clobber(l)) { break } @@ -55971,18 +54664,16 @@ func rewriteValueAMD64_OpAMD64TESTBconst_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64TESTL_0(v *Value) bool { b := v.Block - _ = b // match: (TESTL (MOVLconst [c]) x) // cond: // result: (TESTLconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpAMD64TESTLconst) v.AuxInt = c v.AddArg(x) @@ -56008,17 +54699,15 @@ func rewriteValueAMD64_OpAMD64TESTL_0(v *Value) bool { // cond: l == l2 && l.Uses == 2 && validValAndOff(0,off) && clobber(l) // result: @l.Block (CMPLconstload {sym} [makeValAndOff(0,off)] ptr mem) for { - _ = v.Args[1] + l2 := v.Args[1] l := v.Args[0] if l.Op != OpAMD64MOVLload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - l2 := v.Args[1] + ptr := l.Args[0] if !(l == l2 && l.Uses == 2 && validValAndOff(0, off) && clobber(l)) { break } @@ -56044,9 +54733,8 @@ func rewriteValueAMD64_OpAMD64TESTL_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(l == l2 && l.Uses == 2 && validValAndOff(0, off) && clobber(l)) { break } @@ -56083,18 +54771,16 @@ func rewriteValueAMD64_OpAMD64TESTLconst_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64TESTQ_0(v *Value) bool { b := v.Block - _ = b // match: (TESTQ (MOVQconst [c]) x) // cond: is32Bit(c) // result: (TESTQconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVQconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c)) { break } @@ -56126,17 +54812,15 @@ func rewriteValueAMD64_OpAMD64TESTQ_0(v *Value) bool { // cond: l == l2 && l.Uses == 2 && validValAndOff(0,off) && clobber(l) // result: @l.Block (CMPQconstload {sym} [makeValAndOff(0,off)] ptr mem) for { - _ = v.Args[1] + l2 := v.Args[1] l := v.Args[0] if l.Op != OpAMD64MOVQload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - l2 := v.Args[1] + ptr := l.Args[0] if !(l == l2 && l.Uses == 2 && validValAndOff(0, off) && clobber(l)) { break } @@ -56162,9 +54846,8 @@ func rewriteValueAMD64_OpAMD64TESTQ_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(l == l2 && l.Uses == 2 && validValAndOff(0, off) && clobber(l)) { break } @@ -56201,18 +54884,16 @@ func rewriteValueAMD64_OpAMD64TESTQconst_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64TESTW_0(v *Value) bool { b := v.Block - _ = b // match: (TESTW (MOVLconst [c]) x) // cond: // result: (TESTWconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpAMD64TESTWconst) v.AuxInt = c v.AddArg(x) @@ -56238,17 +54919,15 @@ func rewriteValueAMD64_OpAMD64TESTW_0(v *Value) bool { // cond: l == l2 && l.Uses == 2 && validValAndOff(0,off) && clobber(l) // result: @l.Block (CMPWconstload {sym} [makeValAndOff(0,off)] ptr mem) for { - _ = v.Args[1] + l2 := v.Args[1] l := v.Args[0] if l.Op != OpAMD64MOVWload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - l2 := v.Args[1] + ptr := l.Args[0] if !(l == l2 && l.Uses == 2 && validValAndOff(0, off) && clobber(l)) { break } @@ -56274,9 +54953,8 @@ func rewriteValueAMD64_OpAMD64TESTW_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(l == l2 && l.Uses == 2 && validValAndOff(0, off) && clobber(l)) { break } @@ -56318,7 +54996,7 @@ func rewriteValueAMD64_OpAMD64XADDLlock_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -56326,7 +55004,6 @@ func rewriteValueAMD64_OpAMD64XADDLlock_0(v *Value) bool { } off2 := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -56347,7 +55024,7 @@ func rewriteValueAMD64_OpAMD64XADDQlock_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -56355,7 +55032,6 @@ func rewriteValueAMD64_OpAMD64XADDQlock_0(v *Value) bool { } off2 := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -56376,7 +55052,7 @@ func rewriteValueAMD64_OpAMD64XCHGL_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -56384,7 +55060,6 @@ func rewriteValueAMD64_OpAMD64XCHGL_0(v *Value) bool { } off2 := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -56402,7 +55077,7 @@ func rewriteValueAMD64_OpAMD64XCHGL_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64LEAQ { @@ -56411,7 +55086,6 @@ func rewriteValueAMD64_OpAMD64XCHGL_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux ptr := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && ptr.Op != OpSB) { break } @@ -56432,7 +55106,7 @@ func rewriteValueAMD64_OpAMD64XCHGQ_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -56440,7 +55114,6 @@ func rewriteValueAMD64_OpAMD64XCHGQ_0(v *Value) bool { } off2 := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -56458,7 +55131,7 @@ func rewriteValueAMD64_OpAMD64XCHGQ_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64LEAQ { @@ -56467,7 +55140,6 @@ func rewriteValueAMD64_OpAMD64XCHGQ_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux ptr := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && ptr.Op != OpSB) { break } @@ -56483,19 +55155,17 @@ func rewriteValueAMD64_OpAMD64XCHGQ_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64XORL_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (XORL (SHLL (MOVLconst [1]) y) x) // cond: !config.nacl // result: (BTCL x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SHLL { break } - _ = v_0.Args[1] + y := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpAMD64MOVLconst { break @@ -56503,8 +55173,6 @@ func rewriteValueAMD64_OpAMD64XORL_0(v *Value) bool { if v_0_0.AuxInt != 1 { break } - y := v_0.Args[1] - x := v.Args[1] if !(!config.nacl) { break } @@ -56523,7 +55191,7 @@ func rewriteValueAMD64_OpAMD64XORL_0(v *Value) bool { if v_1.Op != OpAMD64SHLL { break } - _ = v_1.Args[1] + y := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpAMD64MOVLconst { break @@ -56531,7 +55199,6 @@ func rewriteValueAMD64_OpAMD64XORL_0(v *Value) bool { if v_1_0.AuxInt != 1 { break } - y := v_1.Args[1] if !(!config.nacl) { break } @@ -56544,13 +55211,12 @@ func rewriteValueAMD64_OpAMD64XORL_0(v *Value) bool { // cond: isUint32PowerOfTwo(c) && uint64(c) >= 128 && !config.nacl // result: (BTCLconst [log2uint32(c)] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isUint32PowerOfTwo(c) && uint64(c) >= 128 && !config.nacl) { break } @@ -56598,13 +55264,12 @@ func rewriteValueAMD64_OpAMD64XORL_0(v *Value) bool { // cond: // result: (XORLconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVLconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpAMD64XORLconst) v.AuxInt = c v.AddArg(x) @@ -56783,9 +55448,8 @@ func rewriteValueAMD64_OpAMD64XORL_10(v *Value) bool { // cond: // result: (MOVLconst [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpAMD64MOVLconst) @@ -56804,9 +55468,8 @@ func rewriteValueAMD64_OpAMD64XORL_10(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -56822,17 +55485,15 @@ func rewriteValueAMD64_OpAMD64XORL_10(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (XORLload x [off] {sym} ptr mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != OpAMD64MOVLload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -56848,9 +55509,7 @@ func rewriteValueAMD64_OpAMD64XORL_10(v *Value) bool { } func rewriteValueAMD64_OpAMD64XORLconst_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (XORLconst [c] x) // cond: isUint32PowerOfTwo(c) && uint64(c) >= 128 && !config.nacl // result: (BTCLconst [log2uint32(c)] x) @@ -57097,14 +55756,13 @@ func rewriteValueAMD64_OpAMD64XORLconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -57121,7 +55779,7 @@ func rewriteValueAMD64_OpAMD64XORLconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -57129,7 +55787,6 @@ func rewriteValueAMD64_OpAMD64XORLconstmodify_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2)) { break } @@ -57144,16 +55801,14 @@ func rewriteValueAMD64_OpAMD64XORLconstmodify_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64XORLload_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (XORLload [off1] {sym} val (ADDQconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (XORLload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -57161,7 +55816,6 @@ func rewriteValueAMD64_OpAMD64XORLload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -57179,7 +55833,7 @@ func rewriteValueAMD64_OpAMD64XORLload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64LEAQ { @@ -57188,7 +55842,6 @@ func rewriteValueAMD64_OpAMD64XORLload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -57240,7 +55893,7 @@ func rewriteValueAMD64_OpAMD64XORLmodify_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -57248,7 +55901,6 @@ func rewriteValueAMD64_OpAMD64XORLmodify_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -57266,7 +55918,7 @@ func rewriteValueAMD64_OpAMD64XORLmodify_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -57275,7 +55927,6 @@ func rewriteValueAMD64_OpAMD64XORLmodify_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -57291,19 +55942,17 @@ func rewriteValueAMD64_OpAMD64XORLmodify_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64XORQ_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (XORQ (SHLQ (MOVQconst [1]) y) x) // cond: !config.nacl // result: (BTCQ x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SHLQ { break } - _ = v_0.Args[1] + y := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpAMD64MOVQconst { break @@ -57311,8 +55960,6 @@ func rewriteValueAMD64_OpAMD64XORQ_0(v *Value) bool { if v_0_0.AuxInt != 1 { break } - y := v_0.Args[1] - x := v.Args[1] if !(!config.nacl) { break } @@ -57331,7 +55978,7 @@ func rewriteValueAMD64_OpAMD64XORQ_0(v *Value) bool { if v_1.Op != OpAMD64SHLQ { break } - _ = v_1.Args[1] + y := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpAMD64MOVQconst { break @@ -57339,7 +55986,6 @@ func rewriteValueAMD64_OpAMD64XORQ_0(v *Value) bool { if v_1_0.AuxInt != 1 { break } - y := v_1.Args[1] if !(!config.nacl) { break } @@ -57352,13 +55998,12 @@ func rewriteValueAMD64_OpAMD64XORQ_0(v *Value) bool { // cond: isUint64PowerOfTwo(c) && uint64(c) >= 128 && !config.nacl // result: (BTCQconst [log2(c)] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVQconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isUint64PowerOfTwo(c) && uint64(c) >= 128 && !config.nacl) { break } @@ -57409,13 +56054,12 @@ func rewriteValueAMD64_OpAMD64XORQ_0(v *Value) bool { // cond: is32Bit(c) // result: (XORQconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVQconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c)) { break } @@ -57482,9 +56126,8 @@ func rewriteValueAMD64_OpAMD64XORQ_0(v *Value) bool { // cond: // result: (MOVQconst [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpAMD64MOVQconst) @@ -57503,9 +56146,8 @@ func rewriteValueAMD64_OpAMD64XORQ_0(v *Value) bool { } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -57524,17 +56166,15 @@ func rewriteValueAMD64_OpAMD64XORQ_10(v *Value) bool { // cond: canMergeLoadClobber(v, l, x) && clobber(l) // result: (XORQload x [off] {sym} ptr mem) for { - _ = v.Args[1] + x := v.Args[1] l := v.Args[0] if l.Op != OpAMD64MOVQload { break } off := l.AuxInt sym := l.Aux - _ = l.Args[1] - ptr := l.Args[0] mem := l.Args[1] - x := v.Args[1] + ptr := l.Args[0] if !(canMergeLoadClobber(v, l, x) && clobber(l)) { break } @@ -57550,9 +56190,7 @@ func rewriteValueAMD64_OpAMD64XORQ_10(v *Value) bool { } func rewriteValueAMD64_OpAMD64XORQconst_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (XORQconst [c] x) // cond: isUint64PowerOfTwo(c) && uint64(c) >= 128 && !config.nacl // result: (BTCQconst [log2(c)] x) @@ -57635,14 +56273,13 @@ func rewriteValueAMD64_OpAMD64XORQconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break } off2 := v_0.AuxInt base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2)) { break } @@ -57659,7 +56296,7 @@ func rewriteValueAMD64_OpAMD64XORQconstmodify_0(v *Value) bool { for { valoff1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -57667,7 +56304,6 @@ func rewriteValueAMD64_OpAMD64XORQconstmodify_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(ValAndOff(valoff1).canAdd(off2) && canMergeSym(sym1, sym2)) { break } @@ -57682,16 +56318,14 @@ func rewriteValueAMD64_OpAMD64XORQconstmodify_0(v *Value) bool { } func rewriteValueAMD64_OpAMD64XORQload_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (XORQload [off1] {sym} val (ADDQconst [off2] base) mem) // cond: is32Bit(off1+off2) // result: (XORQload [off1+off2] {sym} val base mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64ADDQconst { @@ -57699,7 +56333,6 @@ func rewriteValueAMD64_OpAMD64XORQload_0(v *Value) bool { } off2 := v_1.AuxInt base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -57717,7 +56350,7 @@ func rewriteValueAMD64_OpAMD64XORQload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] val := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64LEAQ { @@ -57726,7 +56359,6 @@ func rewriteValueAMD64_OpAMD64XORQload_0(v *Value) bool { off2 := v_1.AuxInt sym2 := v_1.Aux base := v_1.Args[0] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -57778,7 +56410,7 @@ func rewriteValueAMD64_OpAMD64XORQmodify_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64ADDQconst { break @@ -57786,7 +56418,6 @@ func rewriteValueAMD64_OpAMD64XORQmodify_0(v *Value) bool { off2 := v_0.AuxInt base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -57804,7 +56435,7 @@ func rewriteValueAMD64_OpAMD64XORQmodify_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpAMD64LEAQ { break @@ -57813,7 +56444,6 @@ func rewriteValueAMD64_OpAMD64XORQmodify_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -57832,9 +56462,8 @@ func rewriteValueAMD64_OpAdd16_0(v *Value) bool { // cond: // result: (ADDL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64ADDL) v.AddArg(x) v.AddArg(y) @@ -57846,9 +56475,8 @@ func rewriteValueAMD64_OpAdd32_0(v *Value) bool { // cond: // result: (ADDL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64ADDL) v.AddArg(x) v.AddArg(y) @@ -57860,9 +56488,8 @@ func rewriteValueAMD64_OpAdd32F_0(v *Value) bool { // cond: // result: (ADDSS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64ADDSS) v.AddArg(x) v.AddArg(y) @@ -57874,9 +56501,8 @@ func rewriteValueAMD64_OpAdd64_0(v *Value) bool { // cond: // result: (ADDQ x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64ADDQ) v.AddArg(x) v.AddArg(y) @@ -57888,9 +56514,8 @@ func rewriteValueAMD64_OpAdd64F_0(v *Value) bool { // cond: // result: (ADDSD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64ADDSD) v.AddArg(x) v.AddArg(y) @@ -57902,9 +56527,8 @@ func rewriteValueAMD64_OpAdd8_0(v *Value) bool { // cond: // result: (ADDL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64ADDL) v.AddArg(x) v.AddArg(y) @@ -57913,16 +56537,13 @@ func rewriteValueAMD64_OpAdd8_0(v *Value) bool { } func rewriteValueAMD64_OpAddPtr_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (AddPtr x y) // cond: config.PtrSize == 8 // result: (ADDQ x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(config.PtrSize == 8) { break } @@ -57935,9 +56556,8 @@ func rewriteValueAMD64_OpAddPtr_0(v *Value) bool { // cond: config.PtrSize == 4 // result: (ADDL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(config.PtrSize == 4) { break } @@ -57950,9 +56570,7 @@ func rewriteValueAMD64_OpAddPtr_0(v *Value) bool { } func rewriteValueAMD64_OpAddr_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (Addr {sym} base) // cond: config.PtrSize == 8 // result: (LEAQ {sym} base) @@ -57988,9 +56606,8 @@ func rewriteValueAMD64_OpAnd16_0(v *Value) bool { // cond: // result: (ANDL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64ANDL) v.AddArg(x) v.AddArg(y) @@ -58002,9 +56619,8 @@ func rewriteValueAMD64_OpAnd32_0(v *Value) bool { // cond: // result: (ANDL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64ANDL) v.AddArg(x) v.AddArg(y) @@ -58016,9 +56632,8 @@ func rewriteValueAMD64_OpAnd64_0(v *Value) bool { // cond: // result: (ANDQ x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64ANDQ) v.AddArg(x) v.AddArg(y) @@ -58030,9 +56645,8 @@ func rewriteValueAMD64_OpAnd8_0(v *Value) bool { // cond: // result: (ANDL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64ANDL) v.AddArg(x) v.AddArg(y) @@ -58044,9 +56658,8 @@ func rewriteValueAMD64_OpAndB_0(v *Value) bool { // cond: // result: (ANDL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64ANDL) v.AddArg(x) v.AddArg(y) @@ -58055,17 +56668,14 @@ func rewriteValueAMD64_OpAndB_0(v *Value) bool { } func rewriteValueAMD64_OpAtomicAdd32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (AtomicAdd32 ptr val mem) // cond: // result: (AddTupleFirst32 val (XADDLlock val ptr mem)) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64AddTupleFirst32) v.AddArg(val) v0 := b.NewValue0(v.Pos, OpAMD64XADDLlock, types.NewTuple(typ.UInt32, types.TypeMem)) @@ -58078,17 +56688,14 @@ func rewriteValueAMD64_OpAtomicAdd32_0(v *Value) bool { } func rewriteValueAMD64_OpAtomicAdd64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (AtomicAdd64 ptr val mem) // cond: // result: (AddTupleFirst64 val (XADDQlock val ptr mem)) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64AddTupleFirst64) v.AddArg(val) v0 := b.NewValue0(v.Pos, OpAMD64XADDQlock, types.NewTuple(typ.UInt64, types.TypeMem)) @@ -58104,10 +56711,9 @@ func rewriteValueAMD64_OpAtomicAnd8_0(v *Value) bool { // cond: // result: (ANDBlock ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64ANDBlock) v.AddArg(ptr) v.AddArg(val) @@ -58120,11 +56726,10 @@ func rewriteValueAMD64_OpAtomicCompareAndSwap32_0(v *Value) bool { // cond: // result: (CMPXCHGLlock ptr old new_ mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] old := v.Args[1] new_ := v.Args[2] - mem := v.Args[3] v.reset(OpAMD64CMPXCHGLlock) v.AddArg(ptr) v.AddArg(old) @@ -58138,11 +56743,10 @@ func rewriteValueAMD64_OpAtomicCompareAndSwap64_0(v *Value) bool { // cond: // result: (CMPXCHGQlock ptr old new_ mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] old := v.Args[1] new_ := v.Args[2] - mem := v.Args[3] v.reset(OpAMD64CMPXCHGQlock) v.AddArg(ptr) v.AddArg(old) @@ -58156,10 +56760,9 @@ func rewriteValueAMD64_OpAtomicExchange32_0(v *Value) bool { // cond: // result: (XCHGL val ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64XCHGL) v.AddArg(val) v.AddArg(ptr) @@ -58172,10 +56775,9 @@ func rewriteValueAMD64_OpAtomicExchange64_0(v *Value) bool { // cond: // result: (XCHGQ val ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64XCHGQ) v.AddArg(val) v.AddArg(ptr) @@ -58188,9 +56790,8 @@ func rewriteValueAMD64_OpAtomicLoad32_0(v *Value) bool { // cond: // result: (MOVLatomicload ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpAMD64MOVLatomicload) v.AddArg(ptr) v.AddArg(mem) @@ -58202,27 +56803,36 @@ func rewriteValueAMD64_OpAtomicLoad64_0(v *Value) bool { // cond: // result: (MOVQatomicload ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpAMD64MOVQatomicload) v.AddArg(ptr) v.AddArg(mem) return true } } +func rewriteValueAMD64_OpAtomicLoad8_0(v *Value) bool { + // match: (AtomicLoad8 ptr mem) + // cond: + // result: (MOVBatomicload ptr mem) + for { + mem := v.Args[1] + ptr := v.Args[0] + v.reset(OpAMD64MOVBatomicload) + v.AddArg(ptr) + v.AddArg(mem) + return true + } +} func rewriteValueAMD64_OpAtomicLoadPtr_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (AtomicLoadPtr ptr mem) // cond: config.PtrSize == 8 // result: (MOVQatomicload ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(config.PtrSize == 8) { break } @@ -58235,9 +56845,8 @@ func rewriteValueAMD64_OpAtomicLoadPtr_0(v *Value) bool { // cond: config.PtrSize == 4 // result: (MOVLatomicload ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(config.PtrSize == 4) { break } @@ -58253,10 +56862,9 @@ func rewriteValueAMD64_OpAtomicOr8_0(v *Value) bool { // cond: // result: (ORBlock ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64ORBlock) v.AddArg(ptr) v.AddArg(val) @@ -58266,17 +56874,14 @@ func rewriteValueAMD64_OpAtomicOr8_0(v *Value) bool { } func rewriteValueAMD64_OpAtomicStore32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (AtomicStore32 ptr val mem) // cond: // result: (Select1 (XCHGL val ptr mem)) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpAMD64XCHGL, types.NewTuple(typ.UInt32, types.TypeMem)) v0.AddArg(val) @@ -58288,17 +56893,14 @@ func rewriteValueAMD64_OpAtomicStore32_0(v *Value) bool { } func rewriteValueAMD64_OpAtomicStore64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (AtomicStore64 ptr val mem) // cond: // result: (Select1 (XCHGQ val ptr mem)) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpAMD64XCHGQ, types.NewTuple(typ.UInt64, types.TypeMem)) v0.AddArg(val) @@ -58310,19 +56912,15 @@ func rewriteValueAMD64_OpAtomicStore64_0(v *Value) bool { } func rewriteValueAMD64_OpAtomicStorePtrNoWB_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (AtomicStorePtrNoWB ptr val mem) // cond: config.PtrSize == 8 // result: (Select1 (XCHGQ val ptr mem)) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(config.PtrSize == 8) { break } @@ -58338,10 +56936,9 @@ func rewriteValueAMD64_OpAtomicStorePtrNoWB_0(v *Value) bool { // cond: config.PtrSize == 4 // result: (Select1 (XCHGL val ptr mem)) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(config.PtrSize == 4) { break } @@ -58360,9 +56957,8 @@ func rewriteValueAMD64_OpAvg64u_0(v *Value) bool { // cond: // result: (AVGQU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64AVGQU) v.AddArg(x) v.AddArg(y) @@ -58371,9 +56967,7 @@ func rewriteValueAMD64_OpAvg64u_0(v *Value) bool { } func rewriteValueAMD64_OpBitLen16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (BitLen16 x) // cond: // result: (BSRL (LEAL1 [1] (MOVWQZX x) (MOVWQZX x))) @@ -58394,9 +56988,7 @@ func rewriteValueAMD64_OpBitLen16_0(v *Value) bool { } func rewriteValueAMD64_OpBitLen32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (BitLen32 x) // cond: // result: (Select0 (BSRQ (LEAQ1 [1] (MOVLQZX x) (MOVLQZX x)))) @@ -58419,9 +57011,7 @@ func rewriteValueAMD64_OpBitLen32_0(v *Value) bool { } func rewriteValueAMD64_OpBitLen64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (BitLen64 x) // cond: // result: (ADDQconst [1] (CMOVQEQ (Select0 (BSRQ x)) (MOVQconst [-1]) (Select1 (BSRQ x)))) @@ -58450,9 +57040,7 @@ func rewriteValueAMD64_OpBitLen64_0(v *Value) bool { } func rewriteValueAMD64_OpBitLen8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (BitLen8 x) // cond: // result: (BSRL (LEAL1 [1] (MOVBQZX x) (MOVBQZX x))) @@ -58511,10 +57099,9 @@ func rewriteValueAMD64_OpClosureCall_0(v *Value) bool { // result: (CALLclosure [argwid] entry closure mem) for { argwid := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] entry := v.Args[0] closure := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64CALLclosure) v.AuxInt = argwid v.AddArg(entry) @@ -59461,9 +58048,7 @@ func rewriteValueAMD64_OpCondSelect_30(v *Value) bool { } func rewriteValueAMD64_OpCondSelect_40(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (CondSelect x y (SETGF cond)) // cond: is16BitInt(t) // result: (CMOVWGTF y x cond) @@ -59513,10 +58098,9 @@ func rewriteValueAMD64_OpCondSelect_40(v *Value) bool { // result: (CondSelect x y (MOVBQZX check)) for { t := v.Type - _ = v.Args[2] + check := v.Args[2] x := v.Args[0] y := v.Args[1] - check := v.Args[2] if !(!check.Type.IsFlags() && check.Type.Size() == 1) { break } @@ -59534,10 +58118,9 @@ func rewriteValueAMD64_OpCondSelect_40(v *Value) bool { // result: (CondSelect x y (MOVWQZX check)) for { t := v.Type - _ = v.Args[2] + check := v.Args[2] x := v.Args[0] y := v.Args[1] - check := v.Args[2] if !(!check.Type.IsFlags() && check.Type.Size() == 2) { break } @@ -59555,10 +58138,9 @@ func rewriteValueAMD64_OpCondSelect_40(v *Value) bool { // result: (CondSelect x y (MOVLQZX check)) for { t := v.Type - _ = v.Args[2] + check := v.Args[2] x := v.Args[0] y := v.Args[1] - check := v.Args[2] if !(!check.Type.IsFlags() && check.Type.Size() == 4) { break } @@ -59576,10 +58158,9 @@ func rewriteValueAMD64_OpCondSelect_40(v *Value) bool { // result: (CMOVQNE y x (CMPQconst [0] check)) for { t := v.Type - _ = v.Args[2] + check := v.Args[2] x := v.Args[0] y := v.Args[1] - check := v.Args[2] if !(!check.Type.IsFlags() && check.Type.Size() == 8 && (is64BitInt(t) || isPtr(t))) { break } @@ -59597,10 +58178,9 @@ func rewriteValueAMD64_OpCondSelect_40(v *Value) bool { // result: (CMOVLNE y x (CMPQconst [0] check)) for { t := v.Type - _ = v.Args[2] + check := v.Args[2] x := v.Args[0] y := v.Args[1] - check := v.Args[2] if !(!check.Type.IsFlags() && check.Type.Size() == 8 && is32BitInt(t)) { break } @@ -59618,10 +58198,9 @@ func rewriteValueAMD64_OpCondSelect_40(v *Value) bool { // result: (CMOVWNE y x (CMPQconst [0] check)) for { t := v.Type - _ = v.Args[2] + check := v.Args[2] x := v.Args[0] y := v.Args[1] - check := v.Args[2] if !(!check.Type.IsFlags() && check.Type.Size() == 8 && is16BitInt(t)) { break } @@ -59715,9 +58294,7 @@ func rewriteValueAMD64_OpConstBool_0(v *Value) bool { } func rewriteValueAMD64_OpConstNil_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (ConstNil) // cond: config.PtrSize == 8 // result: (MOVQconst [0]) @@ -59744,9 +58321,7 @@ func rewriteValueAMD64_OpConstNil_0(v *Value) bool { } func rewriteValueAMD64_OpCtz16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Ctz16 x) // cond: // result: (BSFL (BTSLconst [16] x)) @@ -59773,9 +58348,7 @@ func rewriteValueAMD64_OpCtz16NonZero_0(v *Value) bool { } func rewriteValueAMD64_OpCtz32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Ctz32 x) // cond: // result: (Select0 (BSFQ (BTSQconst [32] x))) @@ -59804,9 +58377,7 @@ func rewriteValueAMD64_OpCtz32NonZero_0(v *Value) bool { } func rewriteValueAMD64_OpCtz64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Ctz64 x) // cond: // result: (CMOVQEQ (Select0 (BSFQ x)) (MOVQconst [64]) (Select1 (BSFQ x))) @@ -59832,9 +58403,7 @@ func rewriteValueAMD64_OpCtz64_0(v *Value) bool { } func rewriteValueAMD64_OpCtz64NonZero_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Ctz64NonZero x) // cond: // result: (Select0 (BSFQ x)) @@ -59849,9 +58418,7 @@ func rewriteValueAMD64_OpCtz64NonZero_0(v *Value) bool { } func rewriteValueAMD64_OpCtz8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Ctz8 x) // cond: // result: (BSFL (BTSLconst [ 8] x)) @@ -59991,10 +58558,9 @@ func rewriteValueAMD64_OpDiv128u_0(v *Value) bool { // cond: // result: (DIVQU2 xhi xlo y) for { - _ = v.Args[2] + y := v.Args[2] xhi := v.Args[0] xlo := v.Args[1] - y := v.Args[2] v.reset(OpAMD64DIVQU2) v.AddArg(xhi) v.AddArg(xlo) @@ -60004,17 +58570,14 @@ func rewriteValueAMD64_OpDiv128u_0(v *Value) bool { } func rewriteValueAMD64_OpDiv16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div16 [a] x y) // cond: // result: (Select0 (DIVW [a] x y)) for { a := v.AuxInt - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpAMD64DIVW, types.NewTuple(typ.Int16, typ.Int16)) v0.AuxInt = a @@ -60026,16 +58589,13 @@ func rewriteValueAMD64_OpDiv16_0(v *Value) bool { } func rewriteValueAMD64_OpDiv16u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div16u x y) // cond: // result: (Select0 (DIVWU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpAMD64DIVWU, types.NewTuple(typ.UInt16, typ.UInt16)) v0.AddArg(x) @@ -60046,17 +58606,14 @@ func rewriteValueAMD64_OpDiv16u_0(v *Value) bool { } func rewriteValueAMD64_OpDiv32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div32 [a] x y) // cond: // result: (Select0 (DIVL [a] x y)) for { a := v.AuxInt - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpAMD64DIVL, types.NewTuple(typ.Int32, typ.Int32)) v0.AuxInt = a @@ -60071,9 +58628,8 @@ func rewriteValueAMD64_OpDiv32F_0(v *Value) bool { // cond: // result: (DIVSS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64DIVSS) v.AddArg(x) v.AddArg(y) @@ -60082,16 +58638,13 @@ func rewriteValueAMD64_OpDiv32F_0(v *Value) bool { } func rewriteValueAMD64_OpDiv32u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div32u x y) // cond: // result: (Select0 (DIVLU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpAMD64DIVLU, types.NewTuple(typ.UInt32, typ.UInt32)) v0.AddArg(x) @@ -60102,17 +58655,14 @@ func rewriteValueAMD64_OpDiv32u_0(v *Value) bool { } func rewriteValueAMD64_OpDiv64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div64 [a] x y) // cond: // result: (Select0 (DIVQ [a] x y)) for { a := v.AuxInt - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpAMD64DIVQ, types.NewTuple(typ.Int64, typ.Int64)) v0.AuxInt = a @@ -60127,9 +58677,8 @@ func rewriteValueAMD64_OpDiv64F_0(v *Value) bool { // cond: // result: (DIVSD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64DIVSD) v.AddArg(x) v.AddArg(y) @@ -60138,16 +58687,13 @@ func rewriteValueAMD64_OpDiv64F_0(v *Value) bool { } func rewriteValueAMD64_OpDiv64u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div64u x y) // cond: // result: (Select0 (DIVQU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpAMD64DIVQU, types.NewTuple(typ.UInt64, typ.UInt64)) v0.AddArg(x) @@ -60158,16 +58704,13 @@ func rewriteValueAMD64_OpDiv64u_0(v *Value) bool { } func rewriteValueAMD64_OpDiv8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div8 x y) // cond: // result: (Select0 (DIVW (SignExt8to16 x) (SignExt8to16 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpAMD64DIVW, types.NewTuple(typ.Int16, typ.Int16)) v1 := b.NewValue0(v.Pos, OpSignExt8to16, typ.Int16) @@ -60182,16 +58725,13 @@ func rewriteValueAMD64_OpDiv8_0(v *Value) bool { } func rewriteValueAMD64_OpDiv8u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div8u x y) // cond: // result: (Select0 (DIVWU (ZeroExt8to16 x) (ZeroExt8to16 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpAMD64DIVWU, types.NewTuple(typ.UInt16, typ.UInt16)) v1 := b.NewValue0(v.Pos, OpZeroExt8to16, typ.UInt16) @@ -60206,14 +58746,12 @@ func rewriteValueAMD64_OpDiv8u_0(v *Value) bool { } func rewriteValueAMD64_OpEq16_0(v *Value) bool { b := v.Block - _ = b // match: (Eq16 x y) // cond: // result: (SETEQ (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETEQ) v0 := b.NewValue0(v.Pos, OpAMD64CMPW, types.TypeFlags) v0.AddArg(x) @@ -60224,14 +58762,12 @@ func rewriteValueAMD64_OpEq16_0(v *Value) bool { } func rewriteValueAMD64_OpEq32_0(v *Value) bool { b := v.Block - _ = b // match: (Eq32 x y) // cond: // result: (SETEQ (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETEQ) v0 := b.NewValue0(v.Pos, OpAMD64CMPL, types.TypeFlags) v0.AddArg(x) @@ -60242,14 +58778,12 @@ func rewriteValueAMD64_OpEq32_0(v *Value) bool { } func rewriteValueAMD64_OpEq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Eq32F x y) // cond: // result: (SETEQF (UCOMISS x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETEQF) v0 := b.NewValue0(v.Pos, OpAMD64UCOMISS, types.TypeFlags) v0.AddArg(x) @@ -60260,14 +58794,12 @@ func rewriteValueAMD64_OpEq32F_0(v *Value) bool { } func rewriteValueAMD64_OpEq64_0(v *Value) bool { b := v.Block - _ = b // match: (Eq64 x y) // cond: // result: (SETEQ (CMPQ x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETEQ) v0 := b.NewValue0(v.Pos, OpAMD64CMPQ, types.TypeFlags) v0.AddArg(x) @@ -60278,14 +58810,12 @@ func rewriteValueAMD64_OpEq64_0(v *Value) bool { } func rewriteValueAMD64_OpEq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Eq64F x y) // cond: // result: (SETEQF (UCOMISD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETEQF) v0 := b.NewValue0(v.Pos, OpAMD64UCOMISD, types.TypeFlags) v0.AddArg(x) @@ -60296,14 +58826,12 @@ func rewriteValueAMD64_OpEq64F_0(v *Value) bool { } func rewriteValueAMD64_OpEq8_0(v *Value) bool { b := v.Block - _ = b // match: (Eq8 x y) // cond: // result: (SETEQ (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETEQ) v0 := b.NewValue0(v.Pos, OpAMD64CMPB, types.TypeFlags) v0.AddArg(x) @@ -60314,14 +58842,12 @@ func rewriteValueAMD64_OpEq8_0(v *Value) bool { } func rewriteValueAMD64_OpEqB_0(v *Value) bool { b := v.Block - _ = b // match: (EqB x y) // cond: // result: (SETEQ (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETEQ) v0 := b.NewValue0(v.Pos, OpAMD64CMPB, types.TypeFlags) v0.AddArg(x) @@ -60332,16 +58858,13 @@ func rewriteValueAMD64_OpEqB_0(v *Value) bool { } func rewriteValueAMD64_OpEqPtr_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (EqPtr x y) // cond: config.PtrSize == 8 // result: (SETEQ (CMPQ x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(config.PtrSize == 8) { break } @@ -60356,9 +58879,8 @@ func rewriteValueAMD64_OpEqPtr_0(v *Value) bool { // cond: config.PtrSize == 4 // result: (SETEQ (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(config.PtrSize == 4) { break } @@ -60385,14 +58907,12 @@ func rewriteValueAMD64_OpFloor_0(v *Value) bool { } func rewriteValueAMD64_OpGeq16_0(v *Value) bool { b := v.Block - _ = b // match: (Geq16 x y) // cond: // result: (SETGE (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETGE) v0 := b.NewValue0(v.Pos, OpAMD64CMPW, types.TypeFlags) v0.AddArg(x) @@ -60403,14 +58923,12 @@ func rewriteValueAMD64_OpGeq16_0(v *Value) bool { } func rewriteValueAMD64_OpGeq16U_0(v *Value) bool { b := v.Block - _ = b // match: (Geq16U x y) // cond: // result: (SETAE (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETAE) v0 := b.NewValue0(v.Pos, OpAMD64CMPW, types.TypeFlags) v0.AddArg(x) @@ -60421,14 +58939,12 @@ func rewriteValueAMD64_OpGeq16U_0(v *Value) bool { } func rewriteValueAMD64_OpGeq32_0(v *Value) bool { b := v.Block - _ = b // match: (Geq32 x y) // cond: // result: (SETGE (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETGE) v0 := b.NewValue0(v.Pos, OpAMD64CMPL, types.TypeFlags) v0.AddArg(x) @@ -60439,14 +58955,12 @@ func rewriteValueAMD64_OpGeq32_0(v *Value) bool { } func rewriteValueAMD64_OpGeq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Geq32F x y) // cond: // result: (SETGEF (UCOMISS x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETGEF) v0 := b.NewValue0(v.Pos, OpAMD64UCOMISS, types.TypeFlags) v0.AddArg(x) @@ -60457,14 +58971,12 @@ func rewriteValueAMD64_OpGeq32F_0(v *Value) bool { } func rewriteValueAMD64_OpGeq32U_0(v *Value) bool { b := v.Block - _ = b // match: (Geq32U x y) // cond: // result: (SETAE (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETAE) v0 := b.NewValue0(v.Pos, OpAMD64CMPL, types.TypeFlags) v0.AddArg(x) @@ -60475,14 +58987,12 @@ func rewriteValueAMD64_OpGeq32U_0(v *Value) bool { } func rewriteValueAMD64_OpGeq64_0(v *Value) bool { b := v.Block - _ = b // match: (Geq64 x y) // cond: // result: (SETGE (CMPQ x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETGE) v0 := b.NewValue0(v.Pos, OpAMD64CMPQ, types.TypeFlags) v0.AddArg(x) @@ -60493,14 +59003,12 @@ func rewriteValueAMD64_OpGeq64_0(v *Value) bool { } func rewriteValueAMD64_OpGeq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Geq64F x y) // cond: // result: (SETGEF (UCOMISD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETGEF) v0 := b.NewValue0(v.Pos, OpAMD64UCOMISD, types.TypeFlags) v0.AddArg(x) @@ -60511,14 +59019,12 @@ func rewriteValueAMD64_OpGeq64F_0(v *Value) bool { } func rewriteValueAMD64_OpGeq64U_0(v *Value) bool { b := v.Block - _ = b // match: (Geq64U x y) // cond: // result: (SETAE (CMPQ x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETAE) v0 := b.NewValue0(v.Pos, OpAMD64CMPQ, types.TypeFlags) v0.AddArg(x) @@ -60529,14 +59035,12 @@ func rewriteValueAMD64_OpGeq64U_0(v *Value) bool { } func rewriteValueAMD64_OpGeq8_0(v *Value) bool { b := v.Block - _ = b // match: (Geq8 x y) // cond: // result: (SETGE (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETGE) v0 := b.NewValue0(v.Pos, OpAMD64CMPB, types.TypeFlags) v0.AddArg(x) @@ -60547,14 +59051,12 @@ func rewriteValueAMD64_OpGeq8_0(v *Value) bool { } func rewriteValueAMD64_OpGeq8U_0(v *Value) bool { b := v.Block - _ = b // match: (Geq8U x y) // cond: // result: (SETAE (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETAE) v0 := b.NewValue0(v.Pos, OpAMD64CMPB, types.TypeFlags) v0.AddArg(x) @@ -60603,14 +59105,12 @@ func rewriteValueAMD64_OpGetG_0(v *Value) bool { } func rewriteValueAMD64_OpGreater16_0(v *Value) bool { b := v.Block - _ = b // match: (Greater16 x y) // cond: // result: (SETG (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETG) v0 := b.NewValue0(v.Pos, OpAMD64CMPW, types.TypeFlags) v0.AddArg(x) @@ -60621,14 +59121,12 @@ func rewriteValueAMD64_OpGreater16_0(v *Value) bool { } func rewriteValueAMD64_OpGreater16U_0(v *Value) bool { b := v.Block - _ = b // match: (Greater16U x y) // cond: // result: (SETA (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETA) v0 := b.NewValue0(v.Pos, OpAMD64CMPW, types.TypeFlags) v0.AddArg(x) @@ -60639,14 +59137,12 @@ func rewriteValueAMD64_OpGreater16U_0(v *Value) bool { } func rewriteValueAMD64_OpGreater32_0(v *Value) bool { b := v.Block - _ = b // match: (Greater32 x y) // cond: // result: (SETG (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETG) v0 := b.NewValue0(v.Pos, OpAMD64CMPL, types.TypeFlags) v0.AddArg(x) @@ -60657,14 +59153,12 @@ func rewriteValueAMD64_OpGreater32_0(v *Value) bool { } func rewriteValueAMD64_OpGreater32F_0(v *Value) bool { b := v.Block - _ = b // match: (Greater32F x y) // cond: // result: (SETGF (UCOMISS x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETGF) v0 := b.NewValue0(v.Pos, OpAMD64UCOMISS, types.TypeFlags) v0.AddArg(x) @@ -60675,14 +59169,12 @@ func rewriteValueAMD64_OpGreater32F_0(v *Value) bool { } func rewriteValueAMD64_OpGreater32U_0(v *Value) bool { b := v.Block - _ = b // match: (Greater32U x y) // cond: // result: (SETA (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETA) v0 := b.NewValue0(v.Pos, OpAMD64CMPL, types.TypeFlags) v0.AddArg(x) @@ -60693,14 +59185,12 @@ func rewriteValueAMD64_OpGreater32U_0(v *Value) bool { } func rewriteValueAMD64_OpGreater64_0(v *Value) bool { b := v.Block - _ = b // match: (Greater64 x y) // cond: // result: (SETG (CMPQ x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETG) v0 := b.NewValue0(v.Pos, OpAMD64CMPQ, types.TypeFlags) v0.AddArg(x) @@ -60711,14 +59201,12 @@ func rewriteValueAMD64_OpGreater64_0(v *Value) bool { } func rewriteValueAMD64_OpGreater64F_0(v *Value) bool { b := v.Block - _ = b // match: (Greater64F x y) // cond: // result: (SETGF (UCOMISD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETGF) v0 := b.NewValue0(v.Pos, OpAMD64UCOMISD, types.TypeFlags) v0.AddArg(x) @@ -60729,14 +59217,12 @@ func rewriteValueAMD64_OpGreater64F_0(v *Value) bool { } func rewriteValueAMD64_OpGreater64U_0(v *Value) bool { b := v.Block - _ = b // match: (Greater64U x y) // cond: // result: (SETA (CMPQ x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETA) v0 := b.NewValue0(v.Pos, OpAMD64CMPQ, types.TypeFlags) v0.AddArg(x) @@ -60747,14 +59233,12 @@ func rewriteValueAMD64_OpGreater64U_0(v *Value) bool { } func rewriteValueAMD64_OpGreater8_0(v *Value) bool { b := v.Block - _ = b // match: (Greater8 x y) // cond: // result: (SETG (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETG) v0 := b.NewValue0(v.Pos, OpAMD64CMPB, types.TypeFlags) v0.AddArg(x) @@ -60765,14 +59249,12 @@ func rewriteValueAMD64_OpGreater8_0(v *Value) bool { } func rewriteValueAMD64_OpGreater8U_0(v *Value) bool { b := v.Block - _ = b // match: (Greater8U x y) // cond: // result: (SETA (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETA) v0 := b.NewValue0(v.Pos, OpAMD64CMPB, types.TypeFlags) v0.AddArg(x) @@ -60786,9 +59268,8 @@ func rewriteValueAMD64_OpHmul32_0(v *Value) bool { // cond: // result: (HMULL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64HMULL) v.AddArg(x) v.AddArg(y) @@ -60800,9 +59281,8 @@ func rewriteValueAMD64_OpHmul32u_0(v *Value) bool { // cond: // result: (HMULLU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64HMULLU) v.AddArg(x) v.AddArg(y) @@ -60814,9 +59294,8 @@ func rewriteValueAMD64_OpHmul64_0(v *Value) bool { // cond: // result: (HMULQ x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64HMULQ) v.AddArg(x) v.AddArg(y) @@ -60828,9 +59307,8 @@ func rewriteValueAMD64_OpHmul64u_0(v *Value) bool { // cond: // result: (HMULQU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64HMULQU) v.AddArg(x) v.AddArg(y) @@ -60849,15 +59327,26 @@ func rewriteValueAMD64_OpInt64Hi_0(v *Value) bool { return true } } +func rewriteValueAMD64_OpInt64Lo_0(v *Value) bool { + // match: (Int64Lo x) + // cond: + // result: x + for { + x := v.Args[0] + v.reset(OpCopy) + v.Type = x.Type + v.AddArg(x) + return true + } +} func rewriteValueAMD64_OpInterCall_0(v *Value) bool { // match: (InterCall [argwid] entry mem) // cond: // result: (CALLinter [argwid] entry mem) for { argwid := v.AuxInt - _ = v.Args[1] - entry := v.Args[0] mem := v.Args[1] + entry := v.Args[0] v.reset(OpAMD64CALLinter) v.AuxInt = argwid v.AddArg(entry) @@ -60867,16 +59356,13 @@ func rewriteValueAMD64_OpInterCall_0(v *Value) bool { } func rewriteValueAMD64_OpIsInBounds_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (IsInBounds idx len) // cond: config.PtrSize == 8 // result: (SETB (CMPQ idx len)) for { - _ = v.Args[1] - idx := v.Args[0] len := v.Args[1] + idx := v.Args[0] if !(config.PtrSize == 8) { break } @@ -60891,9 +59377,8 @@ func rewriteValueAMD64_OpIsInBounds_0(v *Value) bool { // cond: config.PtrSize == 4 // result: (SETB (CMPL idx len)) for { - _ = v.Args[1] - idx := v.Args[0] len := v.Args[1] + idx := v.Args[0] if !(config.PtrSize == 4) { break } @@ -60908,9 +59393,7 @@ func rewriteValueAMD64_OpIsInBounds_0(v *Value) bool { } func rewriteValueAMD64_OpIsNonNil_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (IsNonNil p) // cond: config.PtrSize == 8 // result: (SETNE (TESTQ p p)) @@ -60945,16 +59428,13 @@ func rewriteValueAMD64_OpIsNonNil_0(v *Value) bool { } func rewriteValueAMD64_OpIsSliceInBounds_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (IsSliceInBounds idx len) // cond: config.PtrSize == 8 // result: (SETBE (CMPQ idx len)) for { - _ = v.Args[1] - idx := v.Args[0] len := v.Args[1] + idx := v.Args[0] if !(config.PtrSize == 8) { break } @@ -60969,9 +59449,8 @@ func rewriteValueAMD64_OpIsSliceInBounds_0(v *Value) bool { // cond: config.PtrSize == 4 // result: (SETBE (CMPL idx len)) for { - _ = v.Args[1] - idx := v.Args[0] len := v.Args[1] + idx := v.Args[0] if !(config.PtrSize == 4) { break } @@ -60986,14 +59465,12 @@ func rewriteValueAMD64_OpIsSliceInBounds_0(v *Value) bool { } func rewriteValueAMD64_OpLeq16_0(v *Value) bool { b := v.Block - _ = b // match: (Leq16 x y) // cond: // result: (SETLE (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETLE) v0 := b.NewValue0(v.Pos, OpAMD64CMPW, types.TypeFlags) v0.AddArg(x) @@ -61004,14 +59481,12 @@ func rewriteValueAMD64_OpLeq16_0(v *Value) bool { } func rewriteValueAMD64_OpLeq16U_0(v *Value) bool { b := v.Block - _ = b // match: (Leq16U x y) // cond: // result: (SETBE (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETBE) v0 := b.NewValue0(v.Pos, OpAMD64CMPW, types.TypeFlags) v0.AddArg(x) @@ -61022,14 +59497,12 @@ func rewriteValueAMD64_OpLeq16U_0(v *Value) bool { } func rewriteValueAMD64_OpLeq32_0(v *Value) bool { b := v.Block - _ = b // match: (Leq32 x y) // cond: // result: (SETLE (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETLE) v0 := b.NewValue0(v.Pos, OpAMD64CMPL, types.TypeFlags) v0.AddArg(x) @@ -61040,14 +59513,12 @@ func rewriteValueAMD64_OpLeq32_0(v *Value) bool { } func rewriteValueAMD64_OpLeq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Leq32F x y) // cond: // result: (SETGEF (UCOMISS y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETGEF) v0 := b.NewValue0(v.Pos, OpAMD64UCOMISS, types.TypeFlags) v0.AddArg(y) @@ -61058,14 +59529,12 @@ func rewriteValueAMD64_OpLeq32F_0(v *Value) bool { } func rewriteValueAMD64_OpLeq32U_0(v *Value) bool { b := v.Block - _ = b // match: (Leq32U x y) // cond: // result: (SETBE (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETBE) v0 := b.NewValue0(v.Pos, OpAMD64CMPL, types.TypeFlags) v0.AddArg(x) @@ -61076,14 +59545,12 @@ func rewriteValueAMD64_OpLeq32U_0(v *Value) bool { } func rewriteValueAMD64_OpLeq64_0(v *Value) bool { b := v.Block - _ = b // match: (Leq64 x y) // cond: // result: (SETLE (CMPQ x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETLE) v0 := b.NewValue0(v.Pos, OpAMD64CMPQ, types.TypeFlags) v0.AddArg(x) @@ -61094,14 +59561,12 @@ func rewriteValueAMD64_OpLeq64_0(v *Value) bool { } func rewriteValueAMD64_OpLeq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Leq64F x y) // cond: // result: (SETGEF (UCOMISD y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETGEF) v0 := b.NewValue0(v.Pos, OpAMD64UCOMISD, types.TypeFlags) v0.AddArg(y) @@ -61112,14 +59577,12 @@ func rewriteValueAMD64_OpLeq64F_0(v *Value) bool { } func rewriteValueAMD64_OpLeq64U_0(v *Value) bool { b := v.Block - _ = b // match: (Leq64U x y) // cond: // result: (SETBE (CMPQ x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETBE) v0 := b.NewValue0(v.Pos, OpAMD64CMPQ, types.TypeFlags) v0.AddArg(x) @@ -61130,14 +59593,12 @@ func rewriteValueAMD64_OpLeq64U_0(v *Value) bool { } func rewriteValueAMD64_OpLeq8_0(v *Value) bool { b := v.Block - _ = b // match: (Leq8 x y) // cond: // result: (SETLE (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETLE) v0 := b.NewValue0(v.Pos, OpAMD64CMPB, types.TypeFlags) v0.AddArg(x) @@ -61148,14 +59609,12 @@ func rewriteValueAMD64_OpLeq8_0(v *Value) bool { } func rewriteValueAMD64_OpLeq8U_0(v *Value) bool { b := v.Block - _ = b // match: (Leq8U x y) // cond: // result: (SETBE (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETBE) v0 := b.NewValue0(v.Pos, OpAMD64CMPB, types.TypeFlags) v0.AddArg(x) @@ -61166,14 +59625,12 @@ func rewriteValueAMD64_OpLeq8U_0(v *Value) bool { } func rewriteValueAMD64_OpLess16_0(v *Value) bool { b := v.Block - _ = b // match: (Less16 x y) // cond: // result: (SETL (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETL) v0 := b.NewValue0(v.Pos, OpAMD64CMPW, types.TypeFlags) v0.AddArg(x) @@ -61184,14 +59641,12 @@ func rewriteValueAMD64_OpLess16_0(v *Value) bool { } func rewriteValueAMD64_OpLess16U_0(v *Value) bool { b := v.Block - _ = b // match: (Less16U x y) // cond: // result: (SETB (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETB) v0 := b.NewValue0(v.Pos, OpAMD64CMPW, types.TypeFlags) v0.AddArg(x) @@ -61202,14 +59657,12 @@ func rewriteValueAMD64_OpLess16U_0(v *Value) bool { } func rewriteValueAMD64_OpLess32_0(v *Value) bool { b := v.Block - _ = b // match: (Less32 x y) // cond: // result: (SETL (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETL) v0 := b.NewValue0(v.Pos, OpAMD64CMPL, types.TypeFlags) v0.AddArg(x) @@ -61220,14 +59673,12 @@ func rewriteValueAMD64_OpLess32_0(v *Value) bool { } func rewriteValueAMD64_OpLess32F_0(v *Value) bool { b := v.Block - _ = b // match: (Less32F x y) // cond: // result: (SETGF (UCOMISS y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETGF) v0 := b.NewValue0(v.Pos, OpAMD64UCOMISS, types.TypeFlags) v0.AddArg(y) @@ -61238,14 +59689,12 @@ func rewriteValueAMD64_OpLess32F_0(v *Value) bool { } func rewriteValueAMD64_OpLess32U_0(v *Value) bool { b := v.Block - _ = b // match: (Less32U x y) // cond: // result: (SETB (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETB) v0 := b.NewValue0(v.Pos, OpAMD64CMPL, types.TypeFlags) v0.AddArg(x) @@ -61256,14 +59705,12 @@ func rewriteValueAMD64_OpLess32U_0(v *Value) bool { } func rewriteValueAMD64_OpLess64_0(v *Value) bool { b := v.Block - _ = b // match: (Less64 x y) // cond: // result: (SETL (CMPQ x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETL) v0 := b.NewValue0(v.Pos, OpAMD64CMPQ, types.TypeFlags) v0.AddArg(x) @@ -61274,14 +59721,12 @@ func rewriteValueAMD64_OpLess64_0(v *Value) bool { } func rewriteValueAMD64_OpLess64F_0(v *Value) bool { b := v.Block - _ = b // match: (Less64F x y) // cond: // result: (SETGF (UCOMISD y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETGF) v0 := b.NewValue0(v.Pos, OpAMD64UCOMISD, types.TypeFlags) v0.AddArg(y) @@ -61292,14 +59737,12 @@ func rewriteValueAMD64_OpLess64F_0(v *Value) bool { } func rewriteValueAMD64_OpLess64U_0(v *Value) bool { b := v.Block - _ = b // match: (Less64U x y) // cond: // result: (SETB (CMPQ x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETB) v0 := b.NewValue0(v.Pos, OpAMD64CMPQ, types.TypeFlags) v0.AddArg(x) @@ -61310,14 +59753,12 @@ func rewriteValueAMD64_OpLess64U_0(v *Value) bool { } func rewriteValueAMD64_OpLess8_0(v *Value) bool { b := v.Block - _ = b // match: (Less8 x y) // cond: // result: (SETL (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETL) v0 := b.NewValue0(v.Pos, OpAMD64CMPB, types.TypeFlags) v0.AddArg(x) @@ -61328,14 +59769,12 @@ func rewriteValueAMD64_OpLess8_0(v *Value) bool { } func rewriteValueAMD64_OpLess8U_0(v *Value) bool { b := v.Block - _ = b // match: (Less8U x y) // cond: // result: (SETB (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETB) v0 := b.NewValue0(v.Pos, OpAMD64CMPB, types.TypeFlags) v0.AddArg(x) @@ -61346,17 +59785,14 @@ func rewriteValueAMD64_OpLess8U_0(v *Value) bool { } func rewriteValueAMD64_OpLoad_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (Load ptr mem) // cond: (is64BitInt(t) || isPtr(t) && config.PtrSize == 8) // result: (MOVQload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is64BitInt(t) || isPtr(t) && config.PtrSize == 8) { break } @@ -61370,9 +59806,8 @@ func rewriteValueAMD64_OpLoad_0(v *Value) bool { // result: (MOVLload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is32BitInt(t) || isPtr(t) && config.PtrSize == 4) { break } @@ -61386,9 +59821,8 @@ func rewriteValueAMD64_OpLoad_0(v *Value) bool { // result: (MOVWload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is16BitInt(t)) { break } @@ -61402,9 +59836,8 @@ func rewriteValueAMD64_OpLoad_0(v *Value) bool { // result: (MOVBload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.IsBoolean() || is8BitInt(t)) { break } @@ -61418,9 +59851,8 @@ func rewriteValueAMD64_OpLoad_0(v *Value) bool { // result: (MOVSSload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is32BitFloat(t)) { break } @@ -61434,9 +59866,8 @@ func rewriteValueAMD64_OpLoad_0(v *Value) bool { // result: (MOVSDload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is64BitFloat(t)) { break } @@ -61449,9 +59880,7 @@ func rewriteValueAMD64_OpLoad_0(v *Value) bool { } func rewriteValueAMD64_OpLocalAddr_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (LocalAddr {sym} base _) // cond: config.PtrSize == 8 // result: (LEAQ {sym} base) @@ -61486,15 +59915,13 @@ func rewriteValueAMD64_OpLocalAddr_0(v *Value) bool { } func rewriteValueAMD64_OpLsh16x16_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh16x16 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHLL x y) (SBBLcarrymask (CMPWconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -61515,9 +59942,8 @@ func rewriteValueAMD64_OpLsh16x16_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHLL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -61530,15 +59956,13 @@ func rewriteValueAMD64_OpLsh16x16_0(v *Value) bool { } func rewriteValueAMD64_OpLsh16x32_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh16x32 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHLL x y) (SBBLcarrymask (CMPLconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -61559,9 +59983,8 @@ func rewriteValueAMD64_OpLsh16x32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHLL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -61574,15 +59997,13 @@ func rewriteValueAMD64_OpLsh16x32_0(v *Value) bool { } func rewriteValueAMD64_OpLsh16x64_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh16x64 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHLL x y) (SBBLcarrymask (CMPQconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -61603,9 +60024,8 @@ func rewriteValueAMD64_OpLsh16x64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHLL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -61618,15 +60038,13 @@ func rewriteValueAMD64_OpLsh16x64_0(v *Value) bool { } func rewriteValueAMD64_OpLsh16x8_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh16x8 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHLL x y) (SBBLcarrymask (CMPBconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -61647,9 +60065,8 @@ func rewriteValueAMD64_OpLsh16x8_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHLL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -61662,15 +60079,13 @@ func rewriteValueAMD64_OpLsh16x8_0(v *Value) bool { } func rewriteValueAMD64_OpLsh32x16_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh32x16 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHLL x y) (SBBLcarrymask (CMPWconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -61691,9 +60106,8 @@ func rewriteValueAMD64_OpLsh32x16_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHLL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -61706,15 +60120,13 @@ func rewriteValueAMD64_OpLsh32x16_0(v *Value) bool { } func rewriteValueAMD64_OpLsh32x32_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh32x32 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHLL x y) (SBBLcarrymask (CMPLconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -61735,9 +60147,8 @@ func rewriteValueAMD64_OpLsh32x32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHLL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -61750,15 +60161,13 @@ func rewriteValueAMD64_OpLsh32x32_0(v *Value) bool { } func rewriteValueAMD64_OpLsh32x64_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh32x64 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHLL x y) (SBBLcarrymask (CMPQconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -61779,9 +60188,8 @@ func rewriteValueAMD64_OpLsh32x64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHLL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -61794,15 +60202,13 @@ func rewriteValueAMD64_OpLsh32x64_0(v *Value) bool { } func rewriteValueAMD64_OpLsh32x8_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh32x8 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHLL x y) (SBBLcarrymask (CMPBconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -61823,9 +60229,8 @@ func rewriteValueAMD64_OpLsh32x8_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHLL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -61838,15 +60243,13 @@ func rewriteValueAMD64_OpLsh32x8_0(v *Value) bool { } func rewriteValueAMD64_OpLsh64x16_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh64x16 x y) // cond: !shiftIsBounded(v) // result: (ANDQ (SHLQ x y) (SBBQcarrymask (CMPWconst y [64]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -61867,9 +60270,8 @@ func rewriteValueAMD64_OpLsh64x16_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHLQ x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -61882,15 +60284,13 @@ func rewriteValueAMD64_OpLsh64x16_0(v *Value) bool { } func rewriteValueAMD64_OpLsh64x32_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh64x32 x y) // cond: !shiftIsBounded(v) // result: (ANDQ (SHLQ x y) (SBBQcarrymask (CMPLconst y [64]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -61911,9 +60311,8 @@ func rewriteValueAMD64_OpLsh64x32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHLQ x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -61926,15 +60325,13 @@ func rewriteValueAMD64_OpLsh64x32_0(v *Value) bool { } func rewriteValueAMD64_OpLsh64x64_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh64x64 x y) // cond: !shiftIsBounded(v) // result: (ANDQ (SHLQ x y) (SBBQcarrymask (CMPQconst y [64]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -61955,9 +60352,8 @@ func rewriteValueAMD64_OpLsh64x64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHLQ x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -61970,15 +60366,13 @@ func rewriteValueAMD64_OpLsh64x64_0(v *Value) bool { } func rewriteValueAMD64_OpLsh64x8_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh64x8 x y) // cond: !shiftIsBounded(v) // result: (ANDQ (SHLQ x y) (SBBQcarrymask (CMPBconst y [64]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -61999,9 +60393,8 @@ func rewriteValueAMD64_OpLsh64x8_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHLQ x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -62014,15 +60407,13 @@ func rewriteValueAMD64_OpLsh64x8_0(v *Value) bool { } func rewriteValueAMD64_OpLsh8x16_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh8x16 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHLL x y) (SBBLcarrymask (CMPWconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -62043,9 +60434,8 @@ func rewriteValueAMD64_OpLsh8x16_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHLL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -62058,15 +60448,13 @@ func rewriteValueAMD64_OpLsh8x16_0(v *Value) bool { } func rewriteValueAMD64_OpLsh8x32_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh8x32 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHLL x y) (SBBLcarrymask (CMPLconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -62087,9 +60475,8 @@ func rewriteValueAMD64_OpLsh8x32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHLL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -62102,15 +60489,13 @@ func rewriteValueAMD64_OpLsh8x32_0(v *Value) bool { } func rewriteValueAMD64_OpLsh8x64_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh8x64 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHLL x y) (SBBLcarrymask (CMPQconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -62131,9 +60516,8 @@ func rewriteValueAMD64_OpLsh8x64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHLL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -62146,15 +60530,13 @@ func rewriteValueAMD64_OpLsh8x64_0(v *Value) bool { } func rewriteValueAMD64_OpLsh8x8_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh8x8 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHLL x y) (SBBLcarrymask (CMPBconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -62175,9 +60557,8 @@ func rewriteValueAMD64_OpLsh8x8_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHLL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -62190,17 +60571,14 @@ func rewriteValueAMD64_OpLsh8x8_0(v *Value) bool { } func rewriteValueAMD64_OpMod16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod16 [a] x y) // cond: // result: (Select1 (DIVW [a] x y)) for { a := v.AuxInt - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpAMD64DIVW, types.NewTuple(typ.Int16, typ.Int16)) v0.AuxInt = a @@ -62212,16 +60590,13 @@ func rewriteValueAMD64_OpMod16_0(v *Value) bool { } func rewriteValueAMD64_OpMod16u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod16u x y) // cond: // result: (Select1 (DIVWU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpAMD64DIVWU, types.NewTuple(typ.UInt16, typ.UInt16)) v0.AddArg(x) @@ -62232,17 +60607,14 @@ func rewriteValueAMD64_OpMod16u_0(v *Value) bool { } func rewriteValueAMD64_OpMod32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod32 [a] x y) // cond: // result: (Select1 (DIVL [a] x y)) for { a := v.AuxInt - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpAMD64DIVL, types.NewTuple(typ.Int32, typ.Int32)) v0.AuxInt = a @@ -62254,16 +60626,13 @@ func rewriteValueAMD64_OpMod32_0(v *Value) bool { } func rewriteValueAMD64_OpMod32u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod32u x y) // cond: // result: (Select1 (DIVLU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpAMD64DIVLU, types.NewTuple(typ.UInt32, typ.UInt32)) v0.AddArg(x) @@ -62274,17 +60643,14 @@ func rewriteValueAMD64_OpMod32u_0(v *Value) bool { } func rewriteValueAMD64_OpMod64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod64 [a] x y) // cond: // result: (Select1 (DIVQ [a] x y)) for { a := v.AuxInt - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpAMD64DIVQ, types.NewTuple(typ.Int64, typ.Int64)) v0.AuxInt = a @@ -62296,16 +60662,13 @@ func rewriteValueAMD64_OpMod64_0(v *Value) bool { } func rewriteValueAMD64_OpMod64u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod64u x y) // cond: // result: (Select1 (DIVQU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpAMD64DIVQU, types.NewTuple(typ.UInt64, typ.UInt64)) v0.AddArg(x) @@ -62316,16 +60679,13 @@ func rewriteValueAMD64_OpMod64u_0(v *Value) bool { } func rewriteValueAMD64_OpMod8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod8 x y) // cond: // result: (Select1 (DIVW (SignExt8to16 x) (SignExt8to16 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpAMD64DIVW, types.NewTuple(typ.Int16, typ.Int16)) v1 := b.NewValue0(v.Pos, OpSignExt8to16, typ.Int16) @@ -62340,16 +60700,13 @@ func rewriteValueAMD64_OpMod8_0(v *Value) bool { } func rewriteValueAMD64_OpMod8u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod8u x y) // cond: // result: (Select1 (DIVWU (ZeroExt8to16 x) (ZeroExt8to16 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpAMD64DIVWU, types.NewTuple(typ.UInt16, typ.UInt16)) v1 := b.NewValue0(v.Pos, OpZeroExt8to16, typ.UInt16) @@ -62364,11 +60721,8 @@ func rewriteValueAMD64_OpMod8u_0(v *Value) bool { } func rewriteValueAMD64_OpMove_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Move [0] _ _ mem) // cond: // result: mem @@ -62376,7 +60730,6 @@ func rewriteValueAMD64_OpMove_0(v *Value) bool { if v.AuxInt != 0 { break } - _ = v.Args[2] mem := v.Args[2] v.reset(OpCopy) v.Type = mem.Type @@ -62390,10 +60743,9 @@ func rewriteValueAMD64_OpMove_0(v *Value) bool { if v.AuxInt != 1 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpAMD64MOVBload, typ.UInt8) @@ -62410,10 +60762,9 @@ func rewriteValueAMD64_OpMove_0(v *Value) bool { if v.AuxInt != 2 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64MOVWstore) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpAMD64MOVWload, typ.UInt16) @@ -62430,10 +60781,9 @@ func rewriteValueAMD64_OpMove_0(v *Value) bool { if v.AuxInt != 4 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64MOVLstore) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpAMD64MOVLload, typ.UInt32) @@ -62450,10 +60800,9 @@ func rewriteValueAMD64_OpMove_0(v *Value) bool { if v.AuxInt != 8 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64MOVQstore) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpAMD64MOVQload, typ.UInt64) @@ -62470,10 +60819,9 @@ func rewriteValueAMD64_OpMove_0(v *Value) bool { if v.AuxInt != 16 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(config.useSSE) { break } @@ -62493,10 +60841,9 @@ func rewriteValueAMD64_OpMove_0(v *Value) bool { if v.AuxInt != 16 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(!config.useSSE) { break } @@ -62525,10 +60872,9 @@ func rewriteValueAMD64_OpMove_0(v *Value) bool { if v.AuxInt != 32 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpMove) v.AuxInt = 16 v0 := b.NewValue0(v.Pos, OpOffPtr, dst.Type) @@ -62554,10 +60900,9 @@ func rewriteValueAMD64_OpMove_0(v *Value) bool { if v.AuxInt != 48 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(config.useSSE) { break } @@ -62586,10 +60931,9 @@ func rewriteValueAMD64_OpMove_0(v *Value) bool { if v.AuxInt != 64 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(config.useSSE) { break } @@ -62615,11 +60959,8 @@ func rewriteValueAMD64_OpMove_0(v *Value) bool { } func rewriteValueAMD64_OpMove_10(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Move [3] dst src mem) // cond: // result: (MOVBstore [2] dst (MOVBload [2] src mem) (MOVWstore dst (MOVWload src mem) mem)) @@ -62627,10 +60968,9 @@ func rewriteValueAMD64_OpMove_10(v *Value) bool { if v.AuxInt != 3 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = 2 v.AddArg(dst) @@ -62656,10 +60996,9 @@ func rewriteValueAMD64_OpMove_10(v *Value) bool { if v.AuxInt != 5 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = 4 v.AddArg(dst) @@ -62685,10 +61024,9 @@ func rewriteValueAMD64_OpMove_10(v *Value) bool { if v.AuxInt != 6 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64MOVWstore) v.AuxInt = 4 v.AddArg(dst) @@ -62714,10 +61052,9 @@ func rewriteValueAMD64_OpMove_10(v *Value) bool { if v.AuxInt != 7 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64MOVLstore) v.AuxInt = 3 v.AddArg(dst) @@ -62743,10 +61080,9 @@ func rewriteValueAMD64_OpMove_10(v *Value) bool { if v.AuxInt != 9 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64MOVBstore) v.AuxInt = 8 v.AddArg(dst) @@ -62772,10 +61108,9 @@ func rewriteValueAMD64_OpMove_10(v *Value) bool { if v.AuxInt != 10 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64MOVWstore) v.AuxInt = 8 v.AddArg(dst) @@ -62801,10 +61136,9 @@ func rewriteValueAMD64_OpMove_10(v *Value) bool { if v.AuxInt != 12 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64MOVLstore) v.AuxInt = 8 v.AddArg(dst) @@ -62828,10 +61162,9 @@ func rewriteValueAMD64_OpMove_10(v *Value) bool { // result: (MOVQstore [s-8] dst (MOVQload [s-8] src mem) (MOVQstore dst (MOVQload src mem) mem)) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s == 11 || s >= 13 && s <= 15) { break } @@ -62858,10 +61191,9 @@ func rewriteValueAMD64_OpMove_10(v *Value) bool { // result: (Move [s-s%16] (OffPtr dst [s%16]) (OffPtr src [s%16]) (MOVQstore dst (MOVQload src mem) mem)) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s > 16 && s%16 != 0 && s%16 <= 8) { break } @@ -62890,10 +61222,9 @@ func rewriteValueAMD64_OpMove_10(v *Value) bool { // result: (Move [s-s%16] (OffPtr dst [s%16]) (OffPtr src [s%16]) (MOVOstore dst (MOVOload src mem) mem)) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s > 16 && s%16 != 0 && s%16 > 8 && config.useSSE) { break } @@ -62921,20 +61252,16 @@ func rewriteValueAMD64_OpMove_10(v *Value) bool { } func rewriteValueAMD64_OpMove_20(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Move [s] dst src mem) // cond: s > 16 && s%16 != 0 && s%16 > 8 && !config.useSSE // result: (Move [s-s%16] (OffPtr dst [s%16]) (OffPtr src [s%16]) (MOVQstore [8] dst (MOVQload [8] src mem) (MOVQstore dst (MOVQload src mem) mem))) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s > 16 && s%16 != 0 && s%16 > 8 && !config.useSSE) { break } @@ -62972,10 +61299,9 @@ func rewriteValueAMD64_OpMove_20(v *Value) bool { // result: (DUFFCOPY [14*(64-s/16)] dst src mem) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s > 64 && s <= 16*64 && s%16 == 0 && !config.noDuffDevice) { break } @@ -62991,10 +61317,9 @@ func rewriteValueAMD64_OpMove_20(v *Value) bool { // result: (REPMOVSQ dst src (MOVQconst [s/8]) mem) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !((s > 16*64 || config.noDuffDevice) && s%8 == 0) { break } @@ -63014,9 +61339,8 @@ func rewriteValueAMD64_OpMul16_0(v *Value) bool { // cond: // result: (MULL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64MULL) v.AddArg(x) v.AddArg(y) @@ -63028,9 +61352,8 @@ func rewriteValueAMD64_OpMul32_0(v *Value) bool { // cond: // result: (MULL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64MULL) v.AddArg(x) v.AddArg(y) @@ -63042,9 +61365,8 @@ func rewriteValueAMD64_OpMul32F_0(v *Value) bool { // cond: // result: (MULSS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64MULSS) v.AddArg(x) v.AddArg(y) @@ -63056,9 +61378,8 @@ func rewriteValueAMD64_OpMul64_0(v *Value) bool { // cond: // result: (MULQ x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64MULQ) v.AddArg(x) v.AddArg(y) @@ -63070,9 +61391,8 @@ func rewriteValueAMD64_OpMul64F_0(v *Value) bool { // cond: // result: (MULSD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64MULSD) v.AddArg(x) v.AddArg(y) @@ -63084,9 +61404,8 @@ func rewriteValueAMD64_OpMul64uhilo_0(v *Value) bool { // cond: // result: (MULQU2 x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64MULQU2) v.AddArg(x) v.AddArg(y) @@ -63098,9 +61417,8 @@ func rewriteValueAMD64_OpMul8_0(v *Value) bool { // cond: // result: (MULL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64MULL) v.AddArg(x) v.AddArg(y) @@ -63131,9 +61449,7 @@ func rewriteValueAMD64_OpNeg32_0(v *Value) bool { } func rewriteValueAMD64_OpNeg32F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neg32F x) // cond: // result: (PXOR x (MOVSSconst [auxFrom32F(float32(math.Copysign(0, -1)))])) @@ -63160,9 +61476,7 @@ func rewriteValueAMD64_OpNeg64_0(v *Value) bool { } func rewriteValueAMD64_OpNeg64F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neg64F x) // cond: // result: (PXOR x (MOVSDconst [auxFrom64F(math.Copysign(0, -1))])) @@ -63189,14 +61503,12 @@ func rewriteValueAMD64_OpNeg8_0(v *Value) bool { } func rewriteValueAMD64_OpNeq16_0(v *Value) bool { b := v.Block - _ = b // match: (Neq16 x y) // cond: // result: (SETNE (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETNE) v0 := b.NewValue0(v.Pos, OpAMD64CMPW, types.TypeFlags) v0.AddArg(x) @@ -63207,14 +61519,12 @@ func rewriteValueAMD64_OpNeq16_0(v *Value) bool { } func rewriteValueAMD64_OpNeq32_0(v *Value) bool { b := v.Block - _ = b // match: (Neq32 x y) // cond: // result: (SETNE (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETNE) v0 := b.NewValue0(v.Pos, OpAMD64CMPL, types.TypeFlags) v0.AddArg(x) @@ -63225,14 +61535,12 @@ func rewriteValueAMD64_OpNeq32_0(v *Value) bool { } func rewriteValueAMD64_OpNeq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Neq32F x y) // cond: // result: (SETNEF (UCOMISS x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETNEF) v0 := b.NewValue0(v.Pos, OpAMD64UCOMISS, types.TypeFlags) v0.AddArg(x) @@ -63243,14 +61551,12 @@ func rewriteValueAMD64_OpNeq32F_0(v *Value) bool { } func rewriteValueAMD64_OpNeq64_0(v *Value) bool { b := v.Block - _ = b // match: (Neq64 x y) // cond: // result: (SETNE (CMPQ x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETNE) v0 := b.NewValue0(v.Pos, OpAMD64CMPQ, types.TypeFlags) v0.AddArg(x) @@ -63261,14 +61567,12 @@ func rewriteValueAMD64_OpNeq64_0(v *Value) bool { } func rewriteValueAMD64_OpNeq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Neq64F x y) // cond: // result: (SETNEF (UCOMISD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETNEF) v0 := b.NewValue0(v.Pos, OpAMD64UCOMISD, types.TypeFlags) v0.AddArg(x) @@ -63279,14 +61583,12 @@ func rewriteValueAMD64_OpNeq64F_0(v *Value) bool { } func rewriteValueAMD64_OpNeq8_0(v *Value) bool { b := v.Block - _ = b // match: (Neq8 x y) // cond: // result: (SETNE (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETNE) v0 := b.NewValue0(v.Pos, OpAMD64CMPB, types.TypeFlags) v0.AddArg(x) @@ -63297,14 +61599,12 @@ func rewriteValueAMD64_OpNeq8_0(v *Value) bool { } func rewriteValueAMD64_OpNeqB_0(v *Value) bool { b := v.Block - _ = b // match: (NeqB x y) // cond: // result: (SETNE (CMPB x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SETNE) v0 := b.NewValue0(v.Pos, OpAMD64CMPB, types.TypeFlags) v0.AddArg(x) @@ -63315,16 +61615,13 @@ func rewriteValueAMD64_OpNeqB_0(v *Value) bool { } func rewriteValueAMD64_OpNeqPtr_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (NeqPtr x y) // cond: config.PtrSize == 8 // result: (SETNE (CMPQ x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(config.PtrSize == 8) { break } @@ -63339,9 +61636,8 @@ func rewriteValueAMD64_OpNeqPtr_0(v *Value) bool { // cond: config.PtrSize == 4 // result: (SETNE (CMPL x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(config.PtrSize == 4) { break } @@ -63359,9 +61655,8 @@ func rewriteValueAMD64_OpNilCheck_0(v *Value) bool { // cond: // result: (LoweredNilCheck ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpAMD64LoweredNilCheck) v.AddArg(ptr) v.AddArg(mem) @@ -63382,11 +61677,8 @@ func rewriteValueAMD64_OpNot_0(v *Value) bool { } func rewriteValueAMD64_OpOffPtr_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (OffPtr [off] ptr) // cond: config.PtrSize == 8 && is32Bit(off) // result: (ADDQconst [off] ptr) @@ -63438,9 +61730,8 @@ func rewriteValueAMD64_OpOr16_0(v *Value) bool { // cond: // result: (ORL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64ORL) v.AddArg(x) v.AddArg(y) @@ -63452,9 +61743,8 @@ func rewriteValueAMD64_OpOr32_0(v *Value) bool { // cond: // result: (ORL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64ORL) v.AddArg(x) v.AddArg(y) @@ -63466,9 +61756,8 @@ func rewriteValueAMD64_OpOr64_0(v *Value) bool { // cond: // result: (ORQ x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64ORQ) v.AddArg(x) v.AddArg(y) @@ -63480,9 +61769,8 @@ func rewriteValueAMD64_OpOr8_0(v *Value) bool { // cond: // result: (ORL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64ORL) v.AddArg(x) v.AddArg(y) @@ -63494,20 +61782,137 @@ func rewriteValueAMD64_OpOrB_0(v *Value) bool { // cond: // result: (ORL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64ORL) v.AddArg(x) v.AddArg(y) return true } } +func rewriteValueAMD64_OpPanicBounds_0(v *Value) bool { + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 0 + // result: (LoweredPanicBoundsA [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 0) { + break + } + v.reset(OpAMD64LoweredPanicBoundsA) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 1 + // result: (LoweredPanicBoundsB [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 1) { + break + } + v.reset(OpAMD64LoweredPanicBoundsB) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 2 + // result: (LoweredPanicBoundsC [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 2) { + break + } + v.reset(OpAMD64LoweredPanicBoundsC) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + return false +} +func rewriteValueAMD64_OpPanicExtend_0(v *Value) bool { + // match: (PanicExtend [kind] hi lo y mem) + // cond: boundsABI(kind) == 0 + // result: (LoweredPanicExtendA [kind] hi lo y mem) + for { + kind := v.AuxInt + mem := v.Args[3] + hi := v.Args[0] + lo := v.Args[1] + y := v.Args[2] + if !(boundsABI(kind) == 0) { + break + } + v.reset(OpAMD64LoweredPanicExtendA) + v.AuxInt = kind + v.AddArg(hi) + v.AddArg(lo) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicExtend [kind] hi lo y mem) + // cond: boundsABI(kind) == 1 + // result: (LoweredPanicExtendB [kind] hi lo y mem) + for { + kind := v.AuxInt + mem := v.Args[3] + hi := v.Args[0] + lo := v.Args[1] + y := v.Args[2] + if !(boundsABI(kind) == 1) { + break + } + v.reset(OpAMD64LoweredPanicExtendB) + v.AuxInt = kind + v.AddArg(hi) + v.AddArg(lo) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicExtend [kind] hi lo y mem) + // cond: boundsABI(kind) == 2 + // result: (LoweredPanicExtendC [kind] hi lo y mem) + for { + kind := v.AuxInt + mem := v.Args[3] + hi := v.Args[0] + lo := v.Args[1] + y := v.Args[2] + if !(boundsABI(kind) == 2) { + break + } + v.reset(OpAMD64LoweredPanicExtendC) + v.AuxInt = kind + v.AddArg(hi) + v.AddArg(lo) + v.AddArg(y) + v.AddArg(mem) + return true + } + return false +} func rewriteValueAMD64_OpPopCount16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (PopCount16 x) // cond: // result: (POPCNTL (MOVWQZX x)) @@ -63544,9 +61949,7 @@ func rewriteValueAMD64_OpPopCount64_0(v *Value) bool { } func rewriteValueAMD64_OpPopCount8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (PopCount8 x) // cond: // result: (POPCNTL (MOVBQZX x)) @@ -63564,9 +61967,8 @@ func rewriteValueAMD64_OpRotateLeft16_0(v *Value) bool { // cond: // result: (ROLW a b) for { - _ = v.Args[1] - a := v.Args[0] b := v.Args[1] + a := v.Args[0] v.reset(OpAMD64ROLW) v.AddArg(a) v.AddArg(b) @@ -63578,9 +61980,8 @@ func rewriteValueAMD64_OpRotateLeft32_0(v *Value) bool { // cond: // result: (ROLL a b) for { - _ = v.Args[1] - a := v.Args[0] b := v.Args[1] + a := v.Args[0] v.reset(OpAMD64ROLL) v.AddArg(a) v.AddArg(b) @@ -63592,9 +61993,8 @@ func rewriteValueAMD64_OpRotateLeft64_0(v *Value) bool { // cond: // result: (ROLQ a b) for { - _ = v.Args[1] - a := v.Args[0] b := v.Args[1] + a := v.Args[0] v.reset(OpAMD64ROLQ) v.AddArg(a) v.AddArg(b) @@ -63606,9 +62006,8 @@ func rewriteValueAMD64_OpRotateLeft8_0(v *Value) bool { // cond: // result: (ROLB a b) for { - _ = v.Args[1] - a := v.Args[0] b := v.Args[1] + a := v.Args[0] v.reset(OpAMD64ROLB) v.AddArg(a) v.AddArg(b) @@ -63653,15 +62052,13 @@ func rewriteValueAMD64_OpRoundToEven_0(v *Value) bool { } func rewriteValueAMD64_OpRsh16Ux16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh16Ux16 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHRW x y) (SBBLcarrymask (CMPWconst y [16]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -63682,9 +62079,8 @@ func rewriteValueAMD64_OpRsh16Ux16_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHRW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -63697,15 +62093,13 @@ func rewriteValueAMD64_OpRsh16Ux16_0(v *Value) bool { } func rewriteValueAMD64_OpRsh16Ux32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh16Ux32 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHRW x y) (SBBLcarrymask (CMPLconst y [16]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -63726,9 +62120,8 @@ func rewriteValueAMD64_OpRsh16Ux32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHRW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -63741,15 +62134,13 @@ func rewriteValueAMD64_OpRsh16Ux32_0(v *Value) bool { } func rewriteValueAMD64_OpRsh16Ux64_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh16Ux64 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHRW x y) (SBBLcarrymask (CMPQconst y [16]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -63770,9 +62161,8 @@ func rewriteValueAMD64_OpRsh16Ux64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHRW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -63785,15 +62175,13 @@ func rewriteValueAMD64_OpRsh16Ux64_0(v *Value) bool { } func rewriteValueAMD64_OpRsh16Ux8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh16Ux8 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHRW x y) (SBBLcarrymask (CMPBconst y [16]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -63814,9 +62202,8 @@ func rewriteValueAMD64_OpRsh16Ux8_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHRW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -63829,15 +62216,13 @@ func rewriteValueAMD64_OpRsh16Ux8_0(v *Value) bool { } func rewriteValueAMD64_OpRsh16x16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh16x16 x y) // cond: !shiftIsBounded(v) // result: (SARW x (ORL y (NOTL (SBBLcarrymask (CMPWconst y [16]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -63861,9 +62246,8 @@ func rewriteValueAMD64_OpRsh16x16_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SARW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -63876,15 +62260,13 @@ func rewriteValueAMD64_OpRsh16x16_0(v *Value) bool { } func rewriteValueAMD64_OpRsh16x32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh16x32 x y) // cond: !shiftIsBounded(v) // result: (SARW x (ORL y (NOTL (SBBLcarrymask (CMPLconst y [16]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -63908,9 +62290,8 @@ func rewriteValueAMD64_OpRsh16x32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SARW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -63923,15 +62304,13 @@ func rewriteValueAMD64_OpRsh16x32_0(v *Value) bool { } func rewriteValueAMD64_OpRsh16x64_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh16x64 x y) // cond: !shiftIsBounded(v) // result: (SARW x (ORQ y (NOTQ (SBBQcarrymask (CMPQconst y [16]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -63955,9 +62334,8 @@ func rewriteValueAMD64_OpRsh16x64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SARW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -63970,15 +62348,13 @@ func rewriteValueAMD64_OpRsh16x64_0(v *Value) bool { } func rewriteValueAMD64_OpRsh16x8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh16x8 x y) // cond: !shiftIsBounded(v) // result: (SARW x (ORL y (NOTL (SBBLcarrymask (CMPBconst y [16]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64002,9 +62378,8 @@ func rewriteValueAMD64_OpRsh16x8_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SARW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64017,15 +62392,13 @@ func rewriteValueAMD64_OpRsh16x8_0(v *Value) bool { } func rewriteValueAMD64_OpRsh32Ux16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32Ux16 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHRL x y) (SBBLcarrymask (CMPWconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64046,9 +62419,8 @@ func rewriteValueAMD64_OpRsh32Ux16_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHRL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64061,15 +62433,13 @@ func rewriteValueAMD64_OpRsh32Ux16_0(v *Value) bool { } func rewriteValueAMD64_OpRsh32Ux32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32Ux32 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHRL x y) (SBBLcarrymask (CMPLconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64090,9 +62460,8 @@ func rewriteValueAMD64_OpRsh32Ux32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHRL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64105,15 +62474,13 @@ func rewriteValueAMD64_OpRsh32Ux32_0(v *Value) bool { } func rewriteValueAMD64_OpRsh32Ux64_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32Ux64 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHRL x y) (SBBLcarrymask (CMPQconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64134,9 +62501,8 @@ func rewriteValueAMD64_OpRsh32Ux64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHRL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64149,15 +62515,13 @@ func rewriteValueAMD64_OpRsh32Ux64_0(v *Value) bool { } func rewriteValueAMD64_OpRsh32Ux8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32Ux8 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHRL x y) (SBBLcarrymask (CMPBconst y [32]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64178,9 +62542,8 @@ func rewriteValueAMD64_OpRsh32Ux8_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHRL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64193,15 +62556,13 @@ func rewriteValueAMD64_OpRsh32Ux8_0(v *Value) bool { } func rewriteValueAMD64_OpRsh32x16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32x16 x y) // cond: !shiftIsBounded(v) // result: (SARL x (ORL y (NOTL (SBBLcarrymask (CMPWconst y [32]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64225,9 +62586,8 @@ func rewriteValueAMD64_OpRsh32x16_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SARL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64240,15 +62600,13 @@ func rewriteValueAMD64_OpRsh32x16_0(v *Value) bool { } func rewriteValueAMD64_OpRsh32x32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32x32 x y) // cond: !shiftIsBounded(v) // result: (SARL x (ORL y (NOTL (SBBLcarrymask (CMPLconst y [32]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64272,9 +62630,8 @@ func rewriteValueAMD64_OpRsh32x32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SARL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64287,15 +62644,13 @@ func rewriteValueAMD64_OpRsh32x32_0(v *Value) bool { } func rewriteValueAMD64_OpRsh32x64_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32x64 x y) // cond: !shiftIsBounded(v) // result: (SARL x (ORQ y (NOTQ (SBBQcarrymask (CMPQconst y [32]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64319,9 +62674,8 @@ func rewriteValueAMD64_OpRsh32x64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SARL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64334,15 +62688,13 @@ func rewriteValueAMD64_OpRsh32x64_0(v *Value) bool { } func rewriteValueAMD64_OpRsh32x8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32x8 x y) // cond: !shiftIsBounded(v) // result: (SARL x (ORL y (NOTL (SBBLcarrymask (CMPBconst y [32]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64366,9 +62718,8 @@ func rewriteValueAMD64_OpRsh32x8_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SARL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64381,15 +62732,13 @@ func rewriteValueAMD64_OpRsh32x8_0(v *Value) bool { } func rewriteValueAMD64_OpRsh64Ux16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh64Ux16 x y) // cond: !shiftIsBounded(v) // result: (ANDQ (SHRQ x y) (SBBQcarrymask (CMPWconst y [64]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64410,9 +62759,8 @@ func rewriteValueAMD64_OpRsh64Ux16_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHRQ x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64425,15 +62773,13 @@ func rewriteValueAMD64_OpRsh64Ux16_0(v *Value) bool { } func rewriteValueAMD64_OpRsh64Ux32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh64Ux32 x y) // cond: !shiftIsBounded(v) // result: (ANDQ (SHRQ x y) (SBBQcarrymask (CMPLconst y [64]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64454,9 +62800,8 @@ func rewriteValueAMD64_OpRsh64Ux32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHRQ x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64469,15 +62814,13 @@ func rewriteValueAMD64_OpRsh64Ux32_0(v *Value) bool { } func rewriteValueAMD64_OpRsh64Ux64_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh64Ux64 x y) // cond: !shiftIsBounded(v) // result: (ANDQ (SHRQ x y) (SBBQcarrymask (CMPQconst y [64]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64498,9 +62841,8 @@ func rewriteValueAMD64_OpRsh64Ux64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHRQ x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64513,15 +62855,13 @@ func rewriteValueAMD64_OpRsh64Ux64_0(v *Value) bool { } func rewriteValueAMD64_OpRsh64Ux8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh64Ux8 x y) // cond: !shiftIsBounded(v) // result: (ANDQ (SHRQ x y) (SBBQcarrymask (CMPBconst y [64]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64542,9 +62882,8 @@ func rewriteValueAMD64_OpRsh64Ux8_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHRQ x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64557,15 +62896,13 @@ func rewriteValueAMD64_OpRsh64Ux8_0(v *Value) bool { } func rewriteValueAMD64_OpRsh64x16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh64x16 x y) // cond: !shiftIsBounded(v) // result: (SARQ x (ORL y (NOTL (SBBLcarrymask (CMPWconst y [64]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64589,9 +62926,8 @@ func rewriteValueAMD64_OpRsh64x16_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SARQ x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64604,15 +62940,13 @@ func rewriteValueAMD64_OpRsh64x16_0(v *Value) bool { } func rewriteValueAMD64_OpRsh64x32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh64x32 x y) // cond: !shiftIsBounded(v) // result: (SARQ x (ORL y (NOTL (SBBLcarrymask (CMPLconst y [64]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64636,9 +62970,8 @@ func rewriteValueAMD64_OpRsh64x32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SARQ x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64651,15 +62984,13 @@ func rewriteValueAMD64_OpRsh64x32_0(v *Value) bool { } func rewriteValueAMD64_OpRsh64x64_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh64x64 x y) // cond: !shiftIsBounded(v) // result: (SARQ x (ORQ y (NOTQ (SBBQcarrymask (CMPQconst y [64]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64683,9 +63014,8 @@ func rewriteValueAMD64_OpRsh64x64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SARQ x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64698,15 +63028,13 @@ func rewriteValueAMD64_OpRsh64x64_0(v *Value) bool { } func rewriteValueAMD64_OpRsh64x8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh64x8 x y) // cond: !shiftIsBounded(v) // result: (SARQ x (ORL y (NOTL (SBBLcarrymask (CMPBconst y [64]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64730,9 +63058,8 @@ func rewriteValueAMD64_OpRsh64x8_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SARQ x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64745,15 +63072,13 @@ func rewriteValueAMD64_OpRsh64x8_0(v *Value) bool { } func rewriteValueAMD64_OpRsh8Ux16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh8Ux16 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHRB x y) (SBBLcarrymask (CMPWconst y [8]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64774,9 +63099,8 @@ func rewriteValueAMD64_OpRsh8Ux16_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHRB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64789,15 +63113,13 @@ func rewriteValueAMD64_OpRsh8Ux16_0(v *Value) bool { } func rewriteValueAMD64_OpRsh8Ux32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh8Ux32 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHRB x y) (SBBLcarrymask (CMPLconst y [8]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64818,9 +63140,8 @@ func rewriteValueAMD64_OpRsh8Ux32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHRB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64833,15 +63154,13 @@ func rewriteValueAMD64_OpRsh8Ux32_0(v *Value) bool { } func rewriteValueAMD64_OpRsh8Ux64_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh8Ux64 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHRB x y) (SBBLcarrymask (CMPQconst y [8]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64862,9 +63181,8 @@ func rewriteValueAMD64_OpRsh8Ux64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHRB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64877,15 +63195,13 @@ func rewriteValueAMD64_OpRsh8Ux64_0(v *Value) bool { } func rewriteValueAMD64_OpRsh8Ux8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh8Ux8 x y) // cond: !shiftIsBounded(v) // result: (ANDL (SHRB x y) (SBBLcarrymask (CMPBconst y [8]))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64906,9 +63222,8 @@ func rewriteValueAMD64_OpRsh8Ux8_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SHRB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64921,15 +63236,13 @@ func rewriteValueAMD64_OpRsh8Ux8_0(v *Value) bool { } func rewriteValueAMD64_OpRsh8x16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh8x16 x y) // cond: !shiftIsBounded(v) // result: (SARB x (ORL y (NOTL (SBBLcarrymask (CMPWconst y [8]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -64953,9 +63266,8 @@ func rewriteValueAMD64_OpRsh8x16_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SARB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -64968,15 +63280,13 @@ func rewriteValueAMD64_OpRsh8x16_0(v *Value) bool { } func rewriteValueAMD64_OpRsh8x32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh8x32 x y) // cond: !shiftIsBounded(v) // result: (SARB x (ORL y (NOTL (SBBLcarrymask (CMPLconst y [8]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -65000,9 +63310,8 @@ func rewriteValueAMD64_OpRsh8x32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SARB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -65015,15 +63324,13 @@ func rewriteValueAMD64_OpRsh8x32_0(v *Value) bool { } func rewriteValueAMD64_OpRsh8x64_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh8x64 x y) // cond: !shiftIsBounded(v) // result: (SARB x (ORQ y (NOTQ (SBBQcarrymask (CMPQconst y [8]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -65047,9 +63354,8 @@ func rewriteValueAMD64_OpRsh8x64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SARB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -65062,15 +63368,13 @@ func rewriteValueAMD64_OpRsh8x64_0(v *Value) bool { } func rewriteValueAMD64_OpRsh8x8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh8x8 x y) // cond: !shiftIsBounded(v) // result: (SARB x (ORL y (NOTL (SBBLcarrymask (CMPBconst y [8]))))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(!shiftIsBounded(v)) { break } @@ -65094,9 +63398,8 @@ func rewriteValueAMD64_OpRsh8x8_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SARB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -65109,9 +63412,7 @@ func rewriteValueAMD64_OpRsh8x8_0(v *Value) bool { } func rewriteValueAMD64_OpSelect0_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Select0 (Mul64uover x y)) // cond: // result: (Select0 (MULQU x y)) @@ -65120,9 +63421,8 @@ func rewriteValueAMD64_OpSelect0_0(v *Value) bool { if v_0.Op != OpMul64uover { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpSelect0) v.Type = typ.UInt64 v0 := b.NewValue0(v.Pos, OpAMD64MULQU, types.NewTuple(typ.UInt64, types.TypeFlags)) @@ -65139,9 +63439,8 @@ func rewriteValueAMD64_OpSelect0_0(v *Value) bool { if v_0.Op != OpMul32uover { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpSelect0) v.Type = typ.UInt32 v0 := b.NewValue0(v.Pos, OpAMD64MULLU, types.NewTuple(typ.UInt32, types.TypeFlags)) @@ -65158,10 +63457,9 @@ func rewriteValueAMD64_OpSelect0_0(v *Value) bool { if v_0.Op != OpAdd64carry { break } - _ = v_0.Args[2] + c := v_0.Args[2] x := v_0.Args[0] y := v_0.Args[1] - c := v_0.Args[2] v.reset(OpSelect0) v.Type = typ.UInt64 v0 := b.NewValue0(v.Pos, OpAMD64ADCQ, types.NewTuple(typ.UInt64, types.TypeFlags)) @@ -65183,10 +63481,9 @@ func rewriteValueAMD64_OpSelect0_0(v *Value) bool { if v_0.Op != OpSub64borrow { break } - _ = v_0.Args[2] + c := v_0.Args[2] x := v_0.Args[0] y := v_0.Args[1] - c := v_0.Args[2] v.reset(OpSelect0) v.Type = typ.UInt64 v0 := b.NewValue0(v.Pos, OpAMD64SBBQ, types.NewTuple(typ.UInt64, types.TypeFlags)) @@ -65209,9 +63506,8 @@ func rewriteValueAMD64_OpSelect0_0(v *Value) bool { if v_0.Op != OpAMD64AddTupleFirst32 { break } - _ = v_0.Args[1] - val := v_0.Args[0] tuple := v_0.Args[1] + val := v_0.Args[0] v.reset(OpAMD64ADDL) v.AddArg(val) v0 := b.NewValue0(v.Pos, OpSelect0, t) @@ -65228,9 +63524,8 @@ func rewriteValueAMD64_OpSelect0_0(v *Value) bool { if v_0.Op != OpAMD64AddTupleFirst64 { break } - _ = v_0.Args[1] - val := v_0.Args[0] tuple := v_0.Args[1] + val := v_0.Args[0] v.reset(OpAMD64ADDQ) v.AddArg(val) v0 := b.NewValue0(v.Pos, OpSelect0, t) @@ -65242,9 +63537,7 @@ func rewriteValueAMD64_OpSelect0_0(v *Value) bool { } func rewriteValueAMD64_OpSelect1_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Select1 (Mul64uover x y)) // cond: // result: (SETO (Select1 (MULQU x y))) @@ -65253,9 +63546,8 @@ func rewriteValueAMD64_OpSelect1_0(v *Value) bool { if v_0.Op != OpMul64uover { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpAMD64SETO) v0 := b.NewValue0(v.Pos, OpSelect1, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpAMD64MULQU, types.NewTuple(typ.UInt64, types.TypeFlags)) @@ -65273,9 +63565,8 @@ func rewriteValueAMD64_OpSelect1_0(v *Value) bool { if v_0.Op != OpMul32uover { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpAMD64SETO) v0 := b.NewValue0(v.Pos, OpSelect1, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpAMD64MULLU, types.NewTuple(typ.UInt32, types.TypeFlags)) @@ -65293,10 +63584,9 @@ func rewriteValueAMD64_OpSelect1_0(v *Value) bool { if v_0.Op != OpAdd64carry { break } - _ = v_0.Args[2] + c := v_0.Args[2] x := v_0.Args[0] y := v_0.Args[1] - c := v_0.Args[2] v.reset(OpAMD64NEGQ) v.Type = typ.UInt64 v0 := b.NewValue0(v.Pos, OpAMD64SBBQcarrymask, typ.UInt64) @@ -65322,10 +63612,9 @@ func rewriteValueAMD64_OpSelect1_0(v *Value) bool { if v_0.Op != OpSub64borrow { break } - _ = v_0.Args[2] + c := v_0.Args[2] x := v_0.Args[0] y := v_0.Args[1] - c := v_0.Args[2] v.reset(OpAMD64NEGQ) v.Type = typ.UInt64 v0 := b.NewValue0(v.Pos, OpAMD64SBBQcarrymask, typ.UInt64) @@ -65391,7 +63680,6 @@ func rewriteValueAMD64_OpSelect1_0(v *Value) bool { if v_0.Op != OpAMD64AddTupleFirst32 { break } - _ = v_0.Args[1] tuple := v_0.Args[1] v.reset(OpSelect1) v.AddArg(tuple) @@ -65405,7 +63693,6 @@ func rewriteValueAMD64_OpSelect1_0(v *Value) bool { if v_0.Op != OpAMD64AddTupleFirst64 { break } - _ = v_0.Args[1] tuple := v_0.Args[1] v.reset(OpSelect1) v.AddArg(tuple) @@ -65481,7 +63768,6 @@ func rewriteValueAMD64_OpSignExt8to64_0(v *Value) bool { } func rewriteValueAMD64_OpSlicemask_0(v *Value) bool { b := v.Block - _ = b // match: (Slicemask x) // cond: // result: (SARQconst (NEGQ x) [63]) @@ -65528,10 +63814,9 @@ func rewriteValueAMD64_OpStore_0(v *Value) bool { // result: (MOVSDstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 8 && is64BitFloat(val.Type)) { break } @@ -65546,10 +63831,9 @@ func rewriteValueAMD64_OpStore_0(v *Value) bool { // result: (MOVSSstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 4 && is32BitFloat(val.Type)) { break } @@ -65564,10 +63848,9 @@ func rewriteValueAMD64_OpStore_0(v *Value) bool { // result: (MOVQstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 8) { break } @@ -65582,10 +63865,9 @@ func rewriteValueAMD64_OpStore_0(v *Value) bool { // result: (MOVLstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 4) { break } @@ -65600,10 +63882,9 @@ func rewriteValueAMD64_OpStore_0(v *Value) bool { // result: (MOVWstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 2) { break } @@ -65618,10 +63899,9 @@ func rewriteValueAMD64_OpStore_0(v *Value) bool { // result: (MOVBstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 1) { break } @@ -65638,9 +63918,8 @@ func rewriteValueAMD64_OpSub16_0(v *Value) bool { // cond: // result: (SUBL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SUBL) v.AddArg(x) v.AddArg(y) @@ -65652,9 +63931,8 @@ func rewriteValueAMD64_OpSub32_0(v *Value) bool { // cond: // result: (SUBL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SUBL) v.AddArg(x) v.AddArg(y) @@ -65666,9 +63944,8 @@ func rewriteValueAMD64_OpSub32F_0(v *Value) bool { // cond: // result: (SUBSS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SUBSS) v.AddArg(x) v.AddArg(y) @@ -65680,9 +63957,8 @@ func rewriteValueAMD64_OpSub64_0(v *Value) bool { // cond: // result: (SUBQ x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SUBQ) v.AddArg(x) v.AddArg(y) @@ -65694,9 +63970,8 @@ func rewriteValueAMD64_OpSub64F_0(v *Value) bool { // cond: // result: (SUBSD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SUBSD) v.AddArg(x) v.AddArg(y) @@ -65708,9 +63983,8 @@ func rewriteValueAMD64_OpSub8_0(v *Value) bool { // cond: // result: (SUBL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64SUBL) v.AddArg(x) v.AddArg(y) @@ -65719,16 +63993,13 @@ func rewriteValueAMD64_OpSub8_0(v *Value) bool { } func rewriteValueAMD64_OpSubPtr_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (SubPtr x y) // cond: config.PtrSize == 8 // result: (SUBQ x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(config.PtrSize == 8) { break } @@ -65741,9 +64012,8 @@ func rewriteValueAMD64_OpSubPtr_0(v *Value) bool { // cond: config.PtrSize == 4 // result: (SUBL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(config.PtrSize == 4) { break } @@ -65844,10 +64114,9 @@ func rewriteValueAMD64_OpWB_0(v *Value) bool { // result: (LoweredWB {fn} destptr srcptr mem) for { fn := v.Aux - _ = v.Args[2] + mem := v.Args[2] destptr := v.Args[0] srcptr := v.Args[1] - mem := v.Args[2] v.reset(OpAMD64LoweredWB) v.Aux = fn v.AddArg(destptr) @@ -65861,9 +64130,8 @@ func rewriteValueAMD64_OpXor16_0(v *Value) bool { // cond: // result: (XORL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64XORL) v.AddArg(x) v.AddArg(y) @@ -65875,9 +64143,8 @@ func rewriteValueAMD64_OpXor32_0(v *Value) bool { // cond: // result: (XORL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64XORL) v.AddArg(x) v.AddArg(y) @@ -65889,9 +64156,8 @@ func rewriteValueAMD64_OpXor64_0(v *Value) bool { // cond: // result: (XORQ x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64XORQ) v.AddArg(x) v.AddArg(y) @@ -65903,9 +64169,8 @@ func rewriteValueAMD64_OpXor8_0(v *Value) bool { // cond: // result: (XORL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAMD64XORL) v.AddArg(x) v.AddArg(y) @@ -65914,9 +64179,7 @@ func rewriteValueAMD64_OpXor8_0(v *Value) bool { } func rewriteValueAMD64_OpZero_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (Zero [0] _ mem) // cond: // result: mem @@ -65924,7 +64187,6 @@ func rewriteValueAMD64_OpZero_0(v *Value) bool { if v.AuxInt != 0 { break } - _ = v.Args[1] mem := v.Args[1] v.reset(OpCopy) v.Type = mem.Type @@ -65938,9 +64200,8 @@ func rewriteValueAMD64_OpZero_0(v *Value) bool { if v.AuxInt != 1 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpAMD64MOVBstoreconst) v.AuxInt = 0 v.AddArg(destptr) @@ -65954,9 +64215,8 @@ func rewriteValueAMD64_OpZero_0(v *Value) bool { if v.AuxInt != 2 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpAMD64MOVWstoreconst) v.AuxInt = 0 v.AddArg(destptr) @@ -65970,9 +64230,8 @@ func rewriteValueAMD64_OpZero_0(v *Value) bool { if v.AuxInt != 4 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpAMD64MOVLstoreconst) v.AuxInt = 0 v.AddArg(destptr) @@ -65986,9 +64245,8 @@ func rewriteValueAMD64_OpZero_0(v *Value) bool { if v.AuxInt != 8 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpAMD64MOVQstoreconst) v.AuxInt = 0 v.AddArg(destptr) @@ -66002,9 +64260,8 @@ func rewriteValueAMD64_OpZero_0(v *Value) bool { if v.AuxInt != 3 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpAMD64MOVBstoreconst) v.AuxInt = makeValAndOff(0, 2) v.AddArg(destptr) @@ -66022,9 +64279,8 @@ func rewriteValueAMD64_OpZero_0(v *Value) bool { if v.AuxInt != 5 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpAMD64MOVBstoreconst) v.AuxInt = makeValAndOff(0, 4) v.AddArg(destptr) @@ -66042,9 +64298,8 @@ func rewriteValueAMD64_OpZero_0(v *Value) bool { if v.AuxInt != 6 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpAMD64MOVWstoreconst) v.AuxInt = makeValAndOff(0, 4) v.AddArg(destptr) @@ -66062,9 +64317,8 @@ func rewriteValueAMD64_OpZero_0(v *Value) bool { if v.AuxInt != 7 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpAMD64MOVLstoreconst) v.AuxInt = makeValAndOff(0, 3) v.AddArg(destptr) @@ -66080,9 +64334,8 @@ func rewriteValueAMD64_OpZero_0(v *Value) bool { // result: (Zero [s-s%8] (OffPtr destptr [s%8]) (MOVQstoreconst [0] destptr mem)) for { s := v.AuxInt - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(s%8 != 0 && s > 8 && !config.useSSE) { break } @@ -66103,9 +64356,7 @@ func rewriteValueAMD64_OpZero_0(v *Value) bool { } func rewriteValueAMD64_OpZero_10(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (Zero [16] destptr mem) // cond: !config.useSSE // result: (MOVQstoreconst [makeValAndOff(0,8)] destptr (MOVQstoreconst [0] destptr mem)) @@ -66113,9 +64364,8 @@ func rewriteValueAMD64_OpZero_10(v *Value) bool { if v.AuxInt != 16 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(!config.useSSE) { break } @@ -66136,9 +64386,8 @@ func rewriteValueAMD64_OpZero_10(v *Value) bool { if v.AuxInt != 24 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(!config.useSSE) { break } @@ -66163,9 +64412,8 @@ func rewriteValueAMD64_OpZero_10(v *Value) bool { if v.AuxInt != 32 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(!config.useSSE) { break } @@ -66192,9 +64440,8 @@ func rewriteValueAMD64_OpZero_10(v *Value) bool { // result: (MOVQstoreconst [makeValAndOff(0,s-8)] destptr (MOVQstoreconst [0] destptr mem)) for { s := v.AuxInt - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(s > 8 && s < 16 && config.useSSE) { break } @@ -66213,9 +64460,8 @@ func rewriteValueAMD64_OpZero_10(v *Value) bool { // result: (Zero [s-s%16] (OffPtr destptr [s%16]) (MOVOstore destptr (MOVOconst [0]) mem)) for { s := v.AuxInt - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(s%16 != 0 && s > 16 && s%16 > 8 && config.useSSE) { break } @@ -66239,9 +64485,8 @@ func rewriteValueAMD64_OpZero_10(v *Value) bool { // result: (Zero [s-s%16] (OffPtr destptr [s%16]) (MOVQstoreconst [0] destptr mem)) for { s := v.AuxInt - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(s%16 != 0 && s > 16 && s%16 <= 8 && config.useSSE) { break } @@ -66265,9 +64510,8 @@ func rewriteValueAMD64_OpZero_10(v *Value) bool { if v.AuxInt != 16 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(config.useSSE) { break } @@ -66286,9 +64530,8 @@ func rewriteValueAMD64_OpZero_10(v *Value) bool { if v.AuxInt != 32 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(config.useSSE) { break } @@ -66316,9 +64559,8 @@ func rewriteValueAMD64_OpZero_10(v *Value) bool { if v.AuxInt != 48 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(config.useSSE) { break } @@ -66355,9 +64597,8 @@ func rewriteValueAMD64_OpZero_10(v *Value) bool { if v.AuxInt != 64 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(config.useSSE) { break } @@ -66400,19 +64641,15 @@ func rewriteValueAMD64_OpZero_10(v *Value) bool { } func rewriteValueAMD64_OpZero_20(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Zero [s] destptr mem) // cond: s > 64 && s <= 1024 && s%16 == 0 && !config.noDuffDevice // result: (DUFFZERO [s] destptr (MOVOconst [0]) mem) for { s := v.AuxInt - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(s > 64 && s <= 1024 && s%16 == 0 && !config.noDuffDevice) { break } @@ -66430,9 +64667,8 @@ func rewriteValueAMD64_OpZero_20(v *Value) bool { // result: (REPSTOSQ destptr (MOVQconst [s/8]) (MOVQconst [0]) mem) for { s := v.AuxInt - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !((s > 1024 || (config.noDuffDevice && s > 64 || !config.useSSE && s > 32)) && s%8 == 0) { break } @@ -66517,27 +64753,22 @@ func rewriteValueAMD64_OpZeroExt8to64_0(v *Value) bool { } func rewriteBlockAMD64(b *Block) bool { config := b.Func.Config - _ = config - fe := b.Func.fe - _ = fe typ := &config.Types _ = typ + v := b.Control + _ = v switch b.Kind { case BlockAMD64EQ: // match: (EQ (TESTL (SHLL (MOVLconst [1]) x) y)) // cond: !config.nacl // result: (UGE (BTL x y)) - for { - v := b.Control - if v.Op != OpAMD64TESTL { - break - } - _ = v.Args[1] + for v.Op == OpAMD64TESTL { + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SHLL { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpAMD64MOVLconst { break @@ -66545,8 +64776,6 @@ func rewriteBlockAMD64(b *Block) bool { if v_0_0.AuxInt != 1 { break } - x := v_0.Args[1] - y := v.Args[1] if !(!config.nacl) { break } @@ -66561,18 +64790,14 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (TESTL y (SHLL (MOVLconst [1]) x))) // cond: !config.nacl // result: (UGE (BTL x y)) - for { - v := b.Control - if v.Op != OpAMD64TESTL { - break - } + for v.Op == OpAMD64TESTL { _ = v.Args[1] y := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64SHLL { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpAMD64MOVLconst { break @@ -66580,7 +64805,6 @@ func rewriteBlockAMD64(b *Block) bool { if v_1_0.AuxInt != 1 { break } - x := v_1.Args[1] if !(!config.nacl) { break } @@ -66595,17 +64819,13 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (TESTQ (SHLQ (MOVQconst [1]) x) y)) // cond: !config.nacl // result: (UGE (BTQ x y)) - for { - v := b.Control - if v.Op != OpAMD64TESTQ { - break - } - _ = v.Args[1] + for v.Op == OpAMD64TESTQ { + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SHLQ { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpAMD64MOVQconst { break @@ -66613,8 +64833,6 @@ func rewriteBlockAMD64(b *Block) bool { if v_0_0.AuxInt != 1 { break } - x := v_0.Args[1] - y := v.Args[1] if !(!config.nacl) { break } @@ -66629,18 +64847,14 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (TESTQ y (SHLQ (MOVQconst [1]) x))) // cond: !config.nacl // result: (UGE (BTQ x y)) - for { - v := b.Control - if v.Op != OpAMD64TESTQ { - break - } + for v.Op == OpAMD64TESTQ { _ = v.Args[1] y := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64SHLQ { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpAMD64MOVQconst { break @@ -66648,7 +64862,6 @@ func rewriteBlockAMD64(b *Block) bool { if v_1_0.AuxInt != 1 { break } - x := v_1.Args[1] if !(!config.nacl) { break } @@ -66663,11 +64876,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (TESTLconst [c] x)) // cond: isUint32PowerOfTwo(c) && !config.nacl // result: (UGE (BTLconst [log2uint32(c)] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTLconst { - break - } + for v.Op == OpAMD64TESTLconst { c := v.AuxInt x := v.Args[0] if !(isUint32PowerOfTwo(c) && !config.nacl) { @@ -66684,11 +64893,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (TESTQconst [c] x)) // cond: isUint64PowerOfTwo(c) && !config.nacl // result: (UGE (BTQconst [log2(c)] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTQconst { - break - } + for v.Op == OpAMD64TESTQconst { c := v.AuxInt x := v.Args[0] if !(isUint64PowerOfTwo(c) && !config.nacl) { @@ -66705,18 +64910,13 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (TESTQ (MOVQconst [c]) x)) // cond: isUint64PowerOfTwo(c) && !config.nacl // result: (UGE (BTQconst [log2(c)] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTQ { - break - } - _ = v.Args[1] + for v.Op == OpAMD64TESTQ { + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVQconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isUint64PowerOfTwo(c) && !config.nacl) { break } @@ -66731,11 +64931,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (TESTQ x (MOVQconst [c]))) // cond: isUint64PowerOfTwo(c) && !config.nacl // result: (UGE (BTQconst [log2(c)] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTQ { - break - } + for v.Op == OpAMD64TESTQ { _ = v.Args[1] x := v.Args[0] v_1 := v.Args[1] @@ -66757,12 +64953,8 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (TESTQ z1:(SHLQconst [63] (SHRQconst [63] x)) z2)) // cond: z1==z2 && !config.nacl // result: (UGE (BTQconst [63] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTQ { - break - } - _ = v.Args[1] + for v.Op == OpAMD64TESTQ { + z2 := v.Args[1] z1 := v.Args[0] if z1.Op != OpAMD64SHLQconst { break @@ -66778,7 +64970,6 @@ func rewriteBlockAMD64(b *Block) bool { break } x := z1_0.Args[0] - z2 := v.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -66793,11 +64984,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (TESTQ z2 z1:(SHLQconst [63] (SHRQconst [63] x)))) // cond: z1==z2 && !config.nacl // result: (UGE (BTQconst [63] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTQ { - break - } + for v.Op == OpAMD64TESTQ { _ = v.Args[1] z2 := v.Args[0] z1 := v.Args[1] @@ -66829,12 +65016,8 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (TESTL z1:(SHLLconst [31] (SHRQconst [31] x)) z2)) // cond: z1==z2 && !config.nacl // result: (UGE (BTQconst [31] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTL { - break - } - _ = v.Args[1] + for v.Op == OpAMD64TESTL { + z2 := v.Args[1] z1 := v.Args[0] if z1.Op != OpAMD64SHLLconst { break @@ -66850,7 +65033,6 @@ func rewriteBlockAMD64(b *Block) bool { break } x := z1_0.Args[0] - z2 := v.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -66865,11 +65047,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (TESTL z2 z1:(SHLLconst [31] (SHRQconst [31] x)))) // cond: z1==z2 && !config.nacl // result: (UGE (BTQconst [31] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTL { - break - } + for v.Op == OpAMD64TESTL { _ = v.Args[1] z2 := v.Args[0] z1 := v.Args[1] @@ -66901,12 +65079,8 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (TESTQ z1:(SHRQconst [63] (SHLQconst [63] x)) z2)) // cond: z1==z2 && !config.nacl // result: (UGE (BTQconst [0] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTQ { - break - } - _ = v.Args[1] + for v.Op == OpAMD64TESTQ { + z2 := v.Args[1] z1 := v.Args[0] if z1.Op != OpAMD64SHRQconst { break @@ -66922,7 +65096,6 @@ func rewriteBlockAMD64(b *Block) bool { break } x := z1_0.Args[0] - z2 := v.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -66937,11 +65110,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (TESTQ z2 z1:(SHRQconst [63] (SHLQconst [63] x)))) // cond: z1==z2 && !config.nacl // result: (UGE (BTQconst [0] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTQ { - break - } + for v.Op == OpAMD64TESTQ { _ = v.Args[1] z2 := v.Args[0] z1 := v.Args[1] @@ -66973,12 +65142,8 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (TESTL z1:(SHRLconst [31] (SHLLconst [31] x)) z2)) // cond: z1==z2 && !config.nacl // result: (UGE (BTLconst [0] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTL { - break - } - _ = v.Args[1] + for v.Op == OpAMD64TESTL { + z2 := v.Args[1] z1 := v.Args[0] if z1.Op != OpAMD64SHRLconst { break @@ -66994,7 +65159,6 @@ func rewriteBlockAMD64(b *Block) bool { break } x := z1_0.Args[0] - z2 := v.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -67009,11 +65173,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (TESTL z2 z1:(SHRLconst [31] (SHLLconst [31] x)))) // cond: z1==z2 && !config.nacl // result: (UGE (BTLconst [0] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTL { - break - } + for v.Op == OpAMD64TESTL { _ = v.Args[1] z2 := v.Args[0] z1 := v.Args[1] @@ -67045,12 +65205,8 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (TESTQ z1:(SHRQconst [63] x) z2)) // cond: z1==z2 && !config.nacl // result: (UGE (BTQconst [63] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTQ { - break - } - _ = v.Args[1] + for v.Op == OpAMD64TESTQ { + z2 := v.Args[1] z1 := v.Args[0] if z1.Op != OpAMD64SHRQconst { break @@ -67059,7 +65215,6 @@ func rewriteBlockAMD64(b *Block) bool { break } x := z1.Args[0] - z2 := v.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -67074,11 +65229,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (TESTQ z2 z1:(SHRQconst [63] x))) // cond: z1==z2 && !config.nacl // result: (UGE (BTQconst [63] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTQ { - break - } + for v.Op == OpAMD64TESTQ { _ = v.Args[1] z2 := v.Args[0] z1 := v.Args[1] @@ -67103,12 +65254,8 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (TESTL z1:(SHRLconst [31] x) z2)) // cond: z1==z2 && !config.nacl // result: (UGE (BTLconst [31] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTL { - break - } - _ = v.Args[1] + for v.Op == OpAMD64TESTL { + z2 := v.Args[1] z1 := v.Args[0] if z1.Op != OpAMD64SHRLconst { break @@ -67117,7 +65264,6 @@ func rewriteBlockAMD64(b *Block) bool { break } x := z1.Args[0] - z2 := v.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -67132,11 +65278,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (TESTL z2 z1:(SHRLconst [31] x))) // cond: z1==z2 && !config.nacl // result: (UGE (BTLconst [31] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTL { - break - } + for v.Op == OpAMD64TESTL { _ = v.Args[1] z2 := v.Args[0] z1 := v.Args[1] @@ -67161,11 +65303,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (InvertFlags cmp) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64InvertFlags { - break - } + for v.Op == OpAMD64InvertFlags { cmp := v.Args[0] b.Kind = BlockAMD64EQ b.SetControl(cmp) @@ -67175,11 +65313,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagEQ { - break - } + for v.Op == OpAMD64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67188,11 +65322,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (FlagLT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagLT_ULT { - break - } + for v.Op == OpAMD64FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67202,11 +65332,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (FlagLT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagLT_UGT { - break - } + for v.Op == OpAMD64FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67216,11 +65342,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (FlagGT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagGT_ULT { - break - } + for v.Op == OpAMD64FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67230,11 +65352,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (EQ (FlagGT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagGT_UGT { - break - } + for v.Op == OpAMD64FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67245,11 +65363,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (GE (InvertFlags cmp) yes no) // cond: // result: (LE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64InvertFlags { - break - } + for v.Op == OpAMD64InvertFlags { cmp := v.Args[0] b.Kind = BlockAMD64LE b.SetControl(cmp) @@ -67259,11 +65373,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (GE (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagEQ { - break - } + for v.Op == OpAMD64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67272,11 +65382,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (GE (FlagLT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagLT_ULT { - break - } + for v.Op == OpAMD64FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67286,11 +65392,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (GE (FlagLT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagLT_UGT { - break - } + for v.Op == OpAMD64FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67300,11 +65402,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (GE (FlagGT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagGT_ULT { - break - } + for v.Op == OpAMD64FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67313,11 +65411,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (GE (FlagGT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagGT_UGT { - break - } + for v.Op == OpAMD64FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67327,11 +65421,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (GT (InvertFlags cmp) yes no) // cond: // result: (LT cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64InvertFlags { - break - } + for v.Op == OpAMD64InvertFlags { cmp := v.Args[0] b.Kind = BlockAMD64LT b.SetControl(cmp) @@ -67341,11 +65431,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (GT (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagEQ { - break - } + for v.Op == OpAMD64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67355,11 +65441,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (GT (FlagLT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagLT_ULT { - break - } + for v.Op == OpAMD64FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67369,11 +65451,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (GT (FlagLT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagLT_UGT { - break - } + for v.Op == OpAMD64FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67383,11 +65461,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (GT (FlagGT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagGT_ULT { - break - } + for v.Op == OpAMD64FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67396,11 +65470,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (GT (FlagGT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagGT_UGT { - break - } + for v.Op == OpAMD64FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67410,11 +65480,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (If (SETL cmp) yes no) // cond: // result: (LT cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64SETL { - break - } + for v.Op == OpAMD64SETL { cmp := v.Args[0] b.Kind = BlockAMD64LT b.SetControl(cmp) @@ -67424,11 +65490,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (If (SETLE cmp) yes no) // cond: // result: (LE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64SETLE { - break - } + for v.Op == OpAMD64SETLE { cmp := v.Args[0] b.Kind = BlockAMD64LE b.SetControl(cmp) @@ -67438,11 +65500,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (If (SETG cmp) yes no) // cond: // result: (GT cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64SETG { - break - } + for v.Op == OpAMD64SETG { cmp := v.Args[0] b.Kind = BlockAMD64GT b.SetControl(cmp) @@ -67452,11 +65510,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (If (SETGE cmp) yes no) // cond: // result: (GE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64SETGE { - break - } + for v.Op == OpAMD64SETGE { cmp := v.Args[0] b.Kind = BlockAMD64GE b.SetControl(cmp) @@ -67466,11 +65520,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (If (SETEQ cmp) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64SETEQ { - break - } + for v.Op == OpAMD64SETEQ { cmp := v.Args[0] b.Kind = BlockAMD64EQ b.SetControl(cmp) @@ -67480,11 +65530,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (If (SETNE cmp) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64SETNE { - break - } + for v.Op == OpAMD64SETNE { cmp := v.Args[0] b.Kind = BlockAMD64NE b.SetControl(cmp) @@ -67494,11 +65540,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (If (SETB cmp) yes no) // cond: // result: (ULT cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64SETB { - break - } + for v.Op == OpAMD64SETB { cmp := v.Args[0] b.Kind = BlockAMD64ULT b.SetControl(cmp) @@ -67508,11 +65550,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (If (SETBE cmp) yes no) // cond: // result: (ULE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64SETBE { - break - } + for v.Op == OpAMD64SETBE { cmp := v.Args[0] b.Kind = BlockAMD64ULE b.SetControl(cmp) @@ -67522,11 +65560,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (If (SETA cmp) yes no) // cond: // result: (UGT cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64SETA { - break - } + for v.Op == OpAMD64SETA { cmp := v.Args[0] b.Kind = BlockAMD64UGT b.SetControl(cmp) @@ -67536,11 +65570,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (If (SETAE cmp) yes no) // cond: // result: (UGE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64SETAE { - break - } + for v.Op == OpAMD64SETAE { cmp := v.Args[0] b.Kind = BlockAMD64UGE b.SetControl(cmp) @@ -67550,11 +65580,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (If (SETO cmp) yes no) // cond: // result: (OS cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64SETO { - break - } + for v.Op == OpAMD64SETO { cmp := v.Args[0] b.Kind = BlockAMD64OS b.SetControl(cmp) @@ -67564,11 +65590,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (If (SETGF cmp) yes no) // cond: // result: (UGT cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64SETGF { - break - } + for v.Op == OpAMD64SETGF { cmp := v.Args[0] b.Kind = BlockAMD64UGT b.SetControl(cmp) @@ -67578,11 +65600,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (If (SETGEF cmp) yes no) // cond: // result: (UGE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64SETGEF { - break - } + for v.Op == OpAMD64SETGEF { cmp := v.Args[0] b.Kind = BlockAMD64UGE b.SetControl(cmp) @@ -67592,11 +65610,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (If (SETEQF cmp) yes no) // cond: // result: (EQF cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64SETEQF { - break - } + for v.Op == OpAMD64SETEQF { cmp := v.Args[0] b.Kind = BlockAMD64EQF b.SetControl(cmp) @@ -67606,11 +65620,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (If (SETNEF cmp) yes no) // cond: // result: (NEF cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64SETNEF { - break - } + for v.Op == OpAMD64SETNEF { cmp := v.Args[0] b.Kind = BlockAMD64NEF b.SetControl(cmp) @@ -67621,8 +65631,6 @@ func rewriteBlockAMD64(b *Block) bool { // cond: // result: (NE (TESTB cond cond) yes no) for { - v := b.Control - _ = v cond := b.Control b.Kind = BlockAMD64NE v0 := b.NewValue0(v.Pos, OpAMD64TESTB, types.TypeFlags) @@ -67636,11 +65644,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (LE (InvertFlags cmp) yes no) // cond: // result: (GE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64InvertFlags { - break - } + for v.Op == OpAMD64InvertFlags { cmp := v.Args[0] b.Kind = BlockAMD64GE b.SetControl(cmp) @@ -67650,11 +65654,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (LE (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagEQ { - break - } + for v.Op == OpAMD64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67663,11 +65663,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (LE (FlagLT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagLT_ULT { - break - } + for v.Op == OpAMD64FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67676,11 +65672,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (LE (FlagLT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagLT_UGT { - break - } + for v.Op == OpAMD64FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67689,11 +65681,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (LE (FlagGT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagGT_ULT { - break - } + for v.Op == OpAMD64FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67703,11 +65691,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (LE (FlagGT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagGT_UGT { - break - } + for v.Op == OpAMD64FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67718,11 +65702,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (LT (InvertFlags cmp) yes no) // cond: // result: (GT cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64InvertFlags { - break - } + for v.Op == OpAMD64InvertFlags { cmp := v.Args[0] b.Kind = BlockAMD64GT b.SetControl(cmp) @@ -67732,11 +65712,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (LT (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagEQ { - break - } + for v.Op == OpAMD64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67746,11 +65722,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (LT (FlagLT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagLT_ULT { - break - } + for v.Op == OpAMD64FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67759,11 +65731,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (LT (FlagLT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagLT_UGT { - break - } + for v.Op == OpAMD64FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67772,11 +65740,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (LT (FlagGT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagGT_ULT { - break - } + for v.Op == OpAMD64FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67786,11 +65750,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (LT (FlagGT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagGT_UGT { - break - } + for v.Op == OpAMD64FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -67801,11 +65761,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETL cmp) (SETL cmp)) yes no) // cond: // result: (LT cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETL { @@ -67827,11 +65783,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETL cmp) (SETL cmp)) yes no) // cond: // result: (LT cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETL { @@ -67853,11 +65805,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETLE cmp) (SETLE cmp)) yes no) // cond: // result: (LE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETLE { @@ -67879,11 +65827,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETLE cmp) (SETLE cmp)) yes no) // cond: // result: (LE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETLE { @@ -67905,11 +65849,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETG cmp) (SETG cmp)) yes no) // cond: // result: (GT cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETG { @@ -67931,11 +65871,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETG cmp) (SETG cmp)) yes no) // cond: // result: (GT cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETG { @@ -67957,11 +65893,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETGE cmp) (SETGE cmp)) yes no) // cond: // result: (GE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETGE { @@ -67983,11 +65915,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETGE cmp) (SETGE cmp)) yes no) // cond: // result: (GE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETGE { @@ -68009,11 +65937,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETEQ cmp) (SETEQ cmp)) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETEQ { @@ -68035,11 +65959,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETEQ cmp) (SETEQ cmp)) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETEQ { @@ -68061,11 +65981,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETNE cmp) (SETNE cmp)) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETNE { @@ -68087,11 +66003,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETNE cmp) (SETNE cmp)) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETNE { @@ -68113,11 +66025,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETB cmp) (SETB cmp)) yes no) // cond: // result: (ULT cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETB { @@ -68139,11 +66047,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETB cmp) (SETB cmp)) yes no) // cond: // result: (ULT cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETB { @@ -68165,11 +66069,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETBE cmp) (SETBE cmp)) yes no) // cond: // result: (ULE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETBE { @@ -68191,11 +66091,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETBE cmp) (SETBE cmp)) yes no) // cond: // result: (ULE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETBE { @@ -68217,11 +66113,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETA cmp) (SETA cmp)) yes no) // cond: // result: (UGT cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETA { @@ -68243,11 +66135,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETA cmp) (SETA cmp)) yes no) // cond: // result: (UGT cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETA { @@ -68269,11 +66157,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETAE cmp) (SETAE cmp)) yes no) // cond: // result: (UGE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETAE { @@ -68295,11 +66179,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETAE cmp) (SETAE cmp)) yes no) // cond: // result: (UGE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETAE { @@ -68321,11 +66201,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETO cmp) (SETO cmp)) yes no) // cond: // result: (OS cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETO { @@ -68347,11 +66223,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETO cmp) (SETO cmp)) yes no) // cond: // result: (OS cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETO { @@ -68373,17 +66245,13 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTL (SHLL (MOVLconst [1]) x) y)) // cond: !config.nacl // result: (ULT (BTL x y)) - for { - v := b.Control - if v.Op != OpAMD64TESTL { - break - } - _ = v.Args[1] + for v.Op == OpAMD64TESTL { + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SHLL { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpAMD64MOVLconst { break @@ -68391,8 +66259,6 @@ func rewriteBlockAMD64(b *Block) bool { if v_0_0.AuxInt != 1 { break } - x := v_0.Args[1] - y := v.Args[1] if !(!config.nacl) { break } @@ -68407,18 +66273,14 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTL y (SHLL (MOVLconst [1]) x))) // cond: !config.nacl // result: (ULT (BTL x y)) - for { - v := b.Control - if v.Op != OpAMD64TESTL { - break - } + for v.Op == OpAMD64TESTL { _ = v.Args[1] y := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64SHLL { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpAMD64MOVLconst { break @@ -68426,7 +66288,6 @@ func rewriteBlockAMD64(b *Block) bool { if v_1_0.AuxInt != 1 { break } - x := v_1.Args[1] if !(!config.nacl) { break } @@ -68441,17 +66302,13 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTQ (SHLQ (MOVQconst [1]) x) y)) // cond: !config.nacl // result: (ULT (BTQ x y)) - for { - v := b.Control - if v.Op != OpAMD64TESTQ { - break - } - _ = v.Args[1] + for v.Op == OpAMD64TESTQ { + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SHLQ { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpAMD64MOVQconst { break @@ -68459,8 +66316,6 @@ func rewriteBlockAMD64(b *Block) bool { if v_0_0.AuxInt != 1 { break } - x := v_0.Args[1] - y := v.Args[1] if !(!config.nacl) { break } @@ -68475,18 +66330,14 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTQ y (SHLQ (MOVQconst [1]) x))) // cond: !config.nacl // result: (ULT (BTQ x y)) - for { - v := b.Control - if v.Op != OpAMD64TESTQ { - break - } + for v.Op == OpAMD64TESTQ { _ = v.Args[1] y := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpAMD64SHLQ { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpAMD64MOVQconst { break @@ -68494,7 +66345,6 @@ func rewriteBlockAMD64(b *Block) bool { if v_1_0.AuxInt != 1 { break } - x := v_1.Args[1] if !(!config.nacl) { break } @@ -68509,11 +66359,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTLconst [c] x)) // cond: isUint32PowerOfTwo(c) && !config.nacl // result: (ULT (BTLconst [log2uint32(c)] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTLconst { - break - } + for v.Op == OpAMD64TESTLconst { c := v.AuxInt x := v.Args[0] if !(isUint32PowerOfTwo(c) && !config.nacl) { @@ -68530,11 +66376,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTQconst [c] x)) // cond: isUint64PowerOfTwo(c) && !config.nacl // result: (ULT (BTQconst [log2(c)] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTQconst { - break - } + for v.Op == OpAMD64TESTQconst { c := v.AuxInt x := v.Args[0] if !(isUint64PowerOfTwo(c) && !config.nacl) { @@ -68551,18 +66393,13 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTQ (MOVQconst [c]) x)) // cond: isUint64PowerOfTwo(c) && !config.nacl // result: (ULT (BTQconst [log2(c)] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTQ { - break - } - _ = v.Args[1] + for v.Op == OpAMD64TESTQ { + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64MOVQconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isUint64PowerOfTwo(c) && !config.nacl) { break } @@ -68577,11 +66414,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTQ x (MOVQconst [c]))) // cond: isUint64PowerOfTwo(c) && !config.nacl // result: (ULT (BTQconst [log2(c)] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTQ { - break - } + for v.Op == OpAMD64TESTQ { _ = v.Args[1] x := v.Args[0] v_1 := v.Args[1] @@ -68603,12 +66436,8 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTQ z1:(SHLQconst [63] (SHRQconst [63] x)) z2)) // cond: z1==z2 && !config.nacl // result: (ULT (BTQconst [63] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTQ { - break - } - _ = v.Args[1] + for v.Op == OpAMD64TESTQ { + z2 := v.Args[1] z1 := v.Args[0] if z1.Op != OpAMD64SHLQconst { break @@ -68624,7 +66453,6 @@ func rewriteBlockAMD64(b *Block) bool { break } x := z1_0.Args[0] - z2 := v.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -68639,11 +66467,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTQ z2 z1:(SHLQconst [63] (SHRQconst [63] x)))) // cond: z1==z2 && !config.nacl // result: (ULT (BTQconst [63] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTQ { - break - } + for v.Op == OpAMD64TESTQ { _ = v.Args[1] z2 := v.Args[0] z1 := v.Args[1] @@ -68675,12 +66499,8 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTL z1:(SHLLconst [31] (SHRQconst [31] x)) z2)) // cond: z1==z2 && !config.nacl // result: (ULT (BTQconst [31] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTL { - break - } - _ = v.Args[1] + for v.Op == OpAMD64TESTL { + z2 := v.Args[1] z1 := v.Args[0] if z1.Op != OpAMD64SHLLconst { break @@ -68696,7 +66516,6 @@ func rewriteBlockAMD64(b *Block) bool { break } x := z1_0.Args[0] - z2 := v.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -68711,11 +66530,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTL z2 z1:(SHLLconst [31] (SHRQconst [31] x)))) // cond: z1==z2 && !config.nacl // result: (ULT (BTQconst [31] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTL { - break - } + for v.Op == OpAMD64TESTL { _ = v.Args[1] z2 := v.Args[0] z1 := v.Args[1] @@ -68747,12 +66562,8 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTQ z1:(SHRQconst [63] (SHLQconst [63] x)) z2)) // cond: z1==z2 && !config.nacl // result: (ULT (BTQconst [0] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTQ { - break - } - _ = v.Args[1] + for v.Op == OpAMD64TESTQ { + z2 := v.Args[1] z1 := v.Args[0] if z1.Op != OpAMD64SHRQconst { break @@ -68768,7 +66579,6 @@ func rewriteBlockAMD64(b *Block) bool { break } x := z1_0.Args[0] - z2 := v.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -68783,11 +66593,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTQ z2 z1:(SHRQconst [63] (SHLQconst [63] x)))) // cond: z1==z2 && !config.nacl // result: (ULT (BTQconst [0] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTQ { - break - } + for v.Op == OpAMD64TESTQ { _ = v.Args[1] z2 := v.Args[0] z1 := v.Args[1] @@ -68819,12 +66625,8 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTL z1:(SHRLconst [31] (SHLLconst [31] x)) z2)) // cond: z1==z2 && !config.nacl // result: (ULT (BTLconst [0] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTL { - break - } - _ = v.Args[1] + for v.Op == OpAMD64TESTL { + z2 := v.Args[1] z1 := v.Args[0] if z1.Op != OpAMD64SHRLconst { break @@ -68840,7 +66642,6 @@ func rewriteBlockAMD64(b *Block) bool { break } x := z1_0.Args[0] - z2 := v.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -68855,11 +66656,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTL z2 z1:(SHRLconst [31] (SHLLconst [31] x)))) // cond: z1==z2 && !config.nacl // result: (ULT (BTLconst [0] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTL { - break - } + for v.Op == OpAMD64TESTL { _ = v.Args[1] z2 := v.Args[0] z1 := v.Args[1] @@ -68891,12 +66688,8 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTQ z1:(SHRQconst [63] x) z2)) // cond: z1==z2 && !config.nacl // result: (ULT (BTQconst [63] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTQ { - break - } - _ = v.Args[1] + for v.Op == OpAMD64TESTQ { + z2 := v.Args[1] z1 := v.Args[0] if z1.Op != OpAMD64SHRQconst { break @@ -68905,7 +66698,6 @@ func rewriteBlockAMD64(b *Block) bool { break } x := z1.Args[0] - z2 := v.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -68920,11 +66712,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTQ z2 z1:(SHRQconst [63] x))) // cond: z1==z2 && !config.nacl // result: (ULT (BTQconst [63] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTQ { - break - } + for v.Op == OpAMD64TESTQ { _ = v.Args[1] z2 := v.Args[0] z1 := v.Args[1] @@ -68949,12 +66737,8 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTL z1:(SHRLconst [31] x) z2)) // cond: z1==z2 && !config.nacl // result: (ULT (BTLconst [31] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTL { - break - } - _ = v.Args[1] + for v.Op == OpAMD64TESTL { + z2 := v.Args[1] z1 := v.Args[0] if z1.Op != OpAMD64SHRLconst { break @@ -68963,7 +66747,6 @@ func rewriteBlockAMD64(b *Block) bool { break } x := z1.Args[0] - z2 := v.Args[1] if !(z1 == z2 && !config.nacl) { break } @@ -68978,11 +66761,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTL z2 z1:(SHRLconst [31] x))) // cond: z1==z2 && !config.nacl // result: (ULT (BTLconst [31] x)) - for { - v := b.Control - if v.Op != OpAMD64TESTL { - break - } + for v.Op == OpAMD64TESTL { _ = v.Args[1] z2 := v.Args[0] z1 := v.Args[1] @@ -69007,11 +66786,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETGF cmp) (SETGF cmp)) yes no) // cond: // result: (UGT cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETGF { @@ -69033,11 +66808,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETGF cmp) (SETGF cmp)) yes no) // cond: // result: (UGT cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETGF { @@ -69059,11 +66830,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETGEF cmp) (SETGEF cmp)) yes no) // cond: // result: (UGE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETGEF { @@ -69085,11 +66852,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETGEF cmp) (SETGEF cmp)) yes no) // cond: // result: (UGE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETGEF { @@ -69111,11 +66874,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETEQF cmp) (SETEQF cmp)) yes no) // cond: // result: (EQF cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETEQF { @@ -69137,11 +66896,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETEQF cmp) (SETEQF cmp)) yes no) // cond: // result: (EQF cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETEQF { @@ -69163,11 +66918,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETNEF cmp) (SETNEF cmp)) yes no) // cond: // result: (NEF cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETNEF { @@ -69189,11 +66940,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (TESTB (SETNEF cmp) (SETNEF cmp)) yes no) // cond: // result: (NEF cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64TESTB { - break - } + for v.Op == OpAMD64TESTB { _ = v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAMD64SETNEF { @@ -69215,11 +66962,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (InvertFlags cmp) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64InvertFlags { - break - } + for v.Op == OpAMD64InvertFlags { cmp := v.Args[0] b.Kind = BlockAMD64NE b.SetControl(cmp) @@ -69229,11 +66972,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagEQ { - break - } + for v.Op == OpAMD64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69243,11 +66982,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (FlagLT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagLT_ULT { - break - } + for v.Op == OpAMD64FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69256,11 +66991,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (FlagLT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagLT_UGT { - break - } + for v.Op == OpAMD64FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69269,11 +67000,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (FlagGT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagGT_ULT { - break - } + for v.Op == OpAMD64FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69282,11 +67009,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (NE (FlagGT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagGT_UGT { - break - } + for v.Op == OpAMD64FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69296,11 +67019,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (UGE (InvertFlags cmp) yes no) // cond: // result: (ULE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64InvertFlags { - break - } + for v.Op == OpAMD64InvertFlags { cmp := v.Args[0] b.Kind = BlockAMD64ULE b.SetControl(cmp) @@ -69310,11 +67029,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (UGE (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagEQ { - break - } + for v.Op == OpAMD64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69323,11 +67038,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (UGE (FlagLT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagLT_ULT { - break - } + for v.Op == OpAMD64FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69337,11 +67048,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (UGE (FlagLT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagLT_UGT { - break - } + for v.Op == OpAMD64FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69350,11 +67057,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (UGE (FlagGT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagGT_ULT { - break - } + for v.Op == OpAMD64FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69364,11 +67067,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (UGE (FlagGT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagGT_UGT { - break - } + for v.Op == OpAMD64FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69378,11 +67077,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (UGT (InvertFlags cmp) yes no) // cond: // result: (ULT cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64InvertFlags { - break - } + for v.Op == OpAMD64InvertFlags { cmp := v.Args[0] b.Kind = BlockAMD64ULT b.SetControl(cmp) @@ -69392,11 +67087,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (UGT (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagEQ { - break - } + for v.Op == OpAMD64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69406,11 +67097,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (UGT (FlagLT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagLT_ULT { - break - } + for v.Op == OpAMD64FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69420,11 +67107,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (UGT (FlagLT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagLT_UGT { - break - } + for v.Op == OpAMD64FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69433,11 +67116,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (UGT (FlagGT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagGT_ULT { - break - } + for v.Op == OpAMD64FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69447,11 +67126,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (UGT (FlagGT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagGT_UGT { - break - } + for v.Op == OpAMD64FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69461,11 +67136,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (ULE (InvertFlags cmp) yes no) // cond: // result: (UGE cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64InvertFlags { - break - } + for v.Op == OpAMD64InvertFlags { cmp := v.Args[0] b.Kind = BlockAMD64UGE b.SetControl(cmp) @@ -69475,11 +67146,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (ULE (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagEQ { - break - } + for v.Op == OpAMD64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69488,11 +67155,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (ULE (FlagLT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagLT_ULT { - break - } + for v.Op == OpAMD64FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69501,11 +67164,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (ULE (FlagLT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagLT_UGT { - break - } + for v.Op == OpAMD64FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69515,11 +67174,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (ULE (FlagGT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagGT_ULT { - break - } + for v.Op == OpAMD64FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69528,11 +67183,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (ULE (FlagGT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagGT_UGT { - break - } + for v.Op == OpAMD64FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69543,11 +67194,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (ULT (InvertFlags cmp) yes no) // cond: // result: (UGT cmp yes no) - for { - v := b.Control - if v.Op != OpAMD64InvertFlags { - break - } + for v.Op == OpAMD64InvertFlags { cmp := v.Args[0] b.Kind = BlockAMD64UGT b.SetControl(cmp) @@ -69557,11 +67204,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (ULT (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagEQ { - break - } + for v.Op == OpAMD64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69571,11 +67214,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (ULT (FlagLT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagLT_ULT { - break - } + for v.Op == OpAMD64FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69584,11 +67223,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (ULT (FlagLT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagLT_UGT { - break - } + for v.Op == OpAMD64FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69598,11 +67233,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (ULT (FlagGT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpAMD64FlagGT_ULT { - break - } + for v.Op == OpAMD64FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -69611,11 +67242,7 @@ func rewriteBlockAMD64(b *Block) bool { // match: (ULT (FlagGT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpAMD64FlagGT_UGT { - break - } + for v.Op == OpAMD64FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil diff --git a/src/cmd/compile/internal/ssa/rewriteAMD64splitload.go b/src/cmd/compile/internal/ssa/rewriteAMD64splitload.go new file mode 100644 index 0000000000..0a0ff2dfbf --- /dev/null +++ b/src/cmd/compile/internal/ssa/rewriteAMD64splitload.go @@ -0,0 +1,228 @@ +// Code generated from gen/AMD64splitload.rules; DO NOT EDIT. +// generated with: cd gen; go run *.go + +package ssa + +import "fmt" +import "math" +import "cmd/internal/obj" +import "cmd/internal/objabi" +import "cmd/compile/internal/types" + +var _ = fmt.Println // in case not otherwise used +var _ = math.MinInt8 // in case not otherwise used +var _ = obj.ANOP // in case not otherwise used +var _ = objabi.GOROOT // in case not otherwise used +var _ = types.TypeMem // in case not otherwise used + +func rewriteValueAMD64splitload(v *Value) bool { + switch v.Op { + case OpAMD64CMPBconstload: + return rewriteValueAMD64splitload_OpAMD64CMPBconstload_0(v) + case OpAMD64CMPBload: + return rewriteValueAMD64splitload_OpAMD64CMPBload_0(v) + case OpAMD64CMPLconstload: + return rewriteValueAMD64splitload_OpAMD64CMPLconstload_0(v) + case OpAMD64CMPLload: + return rewriteValueAMD64splitload_OpAMD64CMPLload_0(v) + case OpAMD64CMPQconstload: + return rewriteValueAMD64splitload_OpAMD64CMPQconstload_0(v) + case OpAMD64CMPQload: + return rewriteValueAMD64splitload_OpAMD64CMPQload_0(v) + case OpAMD64CMPWconstload: + return rewriteValueAMD64splitload_OpAMD64CMPWconstload_0(v) + case OpAMD64CMPWload: + return rewriteValueAMD64splitload_OpAMD64CMPWload_0(v) + } + return false +} +func rewriteValueAMD64splitload_OpAMD64CMPBconstload_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (CMPBconstload {sym} [vo] ptr mem) + // cond: + // result: (CMPBconst (MOVBload {sym} [offOnly(vo)] ptr mem) [valOnly(vo)]) + for { + vo := v.AuxInt + sym := v.Aux + mem := v.Args[1] + ptr := v.Args[0] + v.reset(OpAMD64CMPBconst) + v.AuxInt = valOnly(vo) + v0 := b.NewValue0(v.Pos, OpAMD64MOVBload, typ.UInt8) + v0.AuxInt = offOnly(vo) + v0.Aux = sym + v0.AddArg(ptr) + v0.AddArg(mem) + v.AddArg(v0) + return true + } +} +func rewriteValueAMD64splitload_OpAMD64CMPBload_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (CMPBload {sym} [off] ptr x mem) + // cond: + // result: (CMPB (MOVBload {sym} [off] ptr mem) x) + for { + off := v.AuxInt + sym := v.Aux + mem := v.Args[2] + ptr := v.Args[0] + x := v.Args[1] + v.reset(OpAMD64CMPB) + v0 := b.NewValue0(v.Pos, OpAMD64MOVBload, typ.UInt8) + v0.AuxInt = off + v0.Aux = sym + v0.AddArg(ptr) + v0.AddArg(mem) + v.AddArg(v0) + v.AddArg(x) + return true + } +} +func rewriteValueAMD64splitload_OpAMD64CMPLconstload_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (CMPLconstload {sym} [vo] ptr mem) + // cond: + // result: (CMPLconst (MOVLload {sym} [offOnly(vo)] ptr mem) [valOnly(vo)]) + for { + vo := v.AuxInt + sym := v.Aux + mem := v.Args[1] + ptr := v.Args[0] + v.reset(OpAMD64CMPLconst) + v.AuxInt = valOnly(vo) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLload, typ.UInt32) + v0.AuxInt = offOnly(vo) + v0.Aux = sym + v0.AddArg(ptr) + v0.AddArg(mem) + v.AddArg(v0) + return true + } +} +func rewriteValueAMD64splitload_OpAMD64CMPLload_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (CMPLload {sym} [off] ptr x mem) + // cond: + // result: (CMPL (MOVLload {sym} [off] ptr mem) x) + for { + off := v.AuxInt + sym := v.Aux + mem := v.Args[2] + ptr := v.Args[0] + x := v.Args[1] + v.reset(OpAMD64CMPL) + v0 := b.NewValue0(v.Pos, OpAMD64MOVLload, typ.UInt32) + v0.AuxInt = off + v0.Aux = sym + v0.AddArg(ptr) + v0.AddArg(mem) + v.AddArg(v0) + v.AddArg(x) + return true + } +} +func rewriteValueAMD64splitload_OpAMD64CMPQconstload_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (CMPQconstload {sym} [vo] ptr mem) + // cond: + // result: (CMPQconst (MOVQload {sym} [offOnly(vo)] ptr mem) [valOnly(vo)]) + for { + vo := v.AuxInt + sym := v.Aux + mem := v.Args[1] + ptr := v.Args[0] + v.reset(OpAMD64CMPQconst) + v.AuxInt = valOnly(vo) + v0 := b.NewValue0(v.Pos, OpAMD64MOVQload, typ.UInt64) + v0.AuxInt = offOnly(vo) + v0.Aux = sym + v0.AddArg(ptr) + v0.AddArg(mem) + v.AddArg(v0) + return true + } +} +func rewriteValueAMD64splitload_OpAMD64CMPQload_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (CMPQload {sym} [off] ptr x mem) + // cond: + // result: (CMPQ (MOVQload {sym} [off] ptr mem) x) + for { + off := v.AuxInt + sym := v.Aux + mem := v.Args[2] + ptr := v.Args[0] + x := v.Args[1] + v.reset(OpAMD64CMPQ) + v0 := b.NewValue0(v.Pos, OpAMD64MOVQload, typ.UInt64) + v0.AuxInt = off + v0.Aux = sym + v0.AddArg(ptr) + v0.AddArg(mem) + v.AddArg(v0) + v.AddArg(x) + return true + } +} +func rewriteValueAMD64splitload_OpAMD64CMPWconstload_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (CMPWconstload {sym} [vo] ptr mem) + // cond: + // result: (CMPWconst (MOVWload {sym} [offOnly(vo)] ptr mem) [valOnly(vo)]) + for { + vo := v.AuxInt + sym := v.Aux + mem := v.Args[1] + ptr := v.Args[0] + v.reset(OpAMD64CMPWconst) + v.AuxInt = valOnly(vo) + v0 := b.NewValue0(v.Pos, OpAMD64MOVWload, typ.UInt16) + v0.AuxInt = offOnly(vo) + v0.Aux = sym + v0.AddArg(ptr) + v0.AddArg(mem) + v.AddArg(v0) + return true + } +} +func rewriteValueAMD64splitload_OpAMD64CMPWload_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (CMPWload {sym} [off] ptr x mem) + // cond: + // result: (CMPW (MOVWload {sym} [off] ptr mem) x) + for { + off := v.AuxInt + sym := v.Aux + mem := v.Args[2] + ptr := v.Args[0] + x := v.Args[1] + v.reset(OpAMD64CMPW) + v0 := b.NewValue0(v.Pos, OpAMD64MOVWload, typ.UInt16) + v0.AuxInt = off + v0.Aux = sym + v0.AddArg(ptr) + v0.AddArg(mem) + v.AddArg(v0) + v.AddArg(x) + return true + } +} +func rewriteBlockAMD64splitload(b *Block) bool { + config := b.Func.Config + typ := &config.Types + _ = typ + v := b.Control + _ = v + switch b.Kind { + } + return false +} diff --git a/src/cmd/compile/internal/ssa/rewriteARM.go b/src/cmd/compile/internal/ssa/rewriteARM.go index 4fc7fdfbe1..72c07c94c8 100644 --- a/src/cmd/compile/internal/ssa/rewriteARM.go +++ b/src/cmd/compile/internal/ssa/rewriteARM.go @@ -483,10 +483,18 @@ func rewriteValueARM(v *Value) bool { return rewriteValueARM_OpConstBool_0(v) case OpConstNil: return rewriteValueARM_OpConstNil_0(v) + case OpCtz16: + return rewriteValueARM_OpCtz16_0(v) + case OpCtz16NonZero: + return rewriteValueARM_OpCtz16NonZero_0(v) case OpCtz32: return rewriteValueARM_OpCtz32_0(v) case OpCtz32NonZero: return rewriteValueARM_OpCtz32NonZero_0(v) + case OpCtz8: + return rewriteValueARM_OpCtz8_0(v) + case OpCtz8NonZero: + return rewriteValueARM_OpCtz8NonZero_0(v) case OpCvt32Fto32: return rewriteValueARM_OpCvt32Fto32_0(v) case OpCvt32Fto32U: @@ -711,6 +719,16 @@ func rewriteValueARM(v *Value) bool { return rewriteValueARM_OpOr8_0(v) case OpOrB: return rewriteValueARM_OpOrB_0(v) + case OpPanicBounds: + return rewriteValueARM_OpPanicBounds_0(v) + case OpPanicExtend: + return rewriteValueARM_OpPanicExtend_0(v) + case OpRotateLeft16: + return rewriteValueARM_OpRotateLeft16_0(v) + case OpRotateLeft32: + return rewriteValueARM_OpRotateLeft32_0(v) + case OpRotateLeft8: + return rewriteValueARM_OpRotateLeft8_0(v) case OpRound32F: return rewriteValueARM_OpRound32F_0(v) case OpRound64F: @@ -831,14 +849,13 @@ func rewriteValueARM_OpARMADC_0(v *Value) bool { // cond: // result: (ADCconst [c] x flags) for { - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - flags := v.Args[2] v.reset(OpARMADCconst) v.AuxInt = c v.AddArg(x) @@ -849,14 +866,13 @@ func rewriteValueARM_OpARMADC_0(v *Value) bool { // cond: // result: (ADCconst [c] x flags) for { - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - flags := v.Args[2] v.reset(OpARMADCconst) v.AuxInt = c v.AddArg(x) @@ -867,14 +883,13 @@ func rewriteValueARM_OpARMADC_0(v *Value) bool { // cond: // result: (ADCconst [c] x flags) for { - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - flags := v.Args[2] v.reset(OpARMADCconst) v.AuxInt = c v.AddArg(x) @@ -885,14 +900,13 @@ func rewriteValueARM_OpARMADC_0(v *Value) bool { // cond: // result: (ADCconst [c] x flags) for { - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - flags := v.Args[2] v.reset(OpARMADCconst) v.AuxInt = c v.AddArg(x) @@ -903,7 +917,7 @@ func rewriteValueARM_OpARMADC_0(v *Value) bool { // cond: // result: (ADCshiftLL x y [c] flags) for { - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSLLconst { @@ -911,7 +925,6 @@ func rewriteValueARM_OpARMADC_0(v *Value) bool { } c := v_1.AuxInt y := v_1.Args[0] - flags := v.Args[2] v.reset(OpARMADCshiftLL) v.AuxInt = c v.AddArg(x) @@ -923,7 +936,7 @@ func rewriteValueARM_OpARMADC_0(v *Value) bool { // cond: // result: (ADCshiftLL x y [c] flags) for { - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSLLconst { break @@ -931,7 +944,6 @@ func rewriteValueARM_OpARMADC_0(v *Value) bool { c := v_0.AuxInt y := v_0.Args[0] x := v.Args[1] - flags := v.Args[2] v.reset(OpARMADCshiftLL) v.AuxInt = c v.AddArg(x) @@ -943,7 +955,7 @@ func rewriteValueARM_OpARMADC_0(v *Value) bool { // cond: // result: (ADCshiftLL x y [c] flags) for { - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSLLconst { break @@ -951,7 +963,6 @@ func rewriteValueARM_OpARMADC_0(v *Value) bool { c := v_0.AuxInt y := v_0.Args[0] x := v.Args[1] - flags := v.Args[2] v.reset(OpARMADCshiftLL) v.AuxInt = c v.AddArg(x) @@ -963,7 +974,7 @@ func rewriteValueARM_OpARMADC_0(v *Value) bool { // cond: // result: (ADCshiftLL x y [c] flags) for { - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSLLconst { @@ -971,7 +982,6 @@ func rewriteValueARM_OpARMADC_0(v *Value) bool { } c := v_1.AuxInt y := v_1.Args[0] - flags := v.Args[2] v.reset(OpARMADCshiftLL) v.AuxInt = c v.AddArg(x) @@ -983,7 +993,7 @@ func rewriteValueARM_OpARMADC_0(v *Value) bool { // cond: // result: (ADCshiftRL x y [c] flags) for { - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSRLconst { @@ -991,7 +1001,6 @@ func rewriteValueARM_OpARMADC_0(v *Value) bool { } c := v_1.AuxInt y := v_1.Args[0] - flags := v.Args[2] v.reset(OpARMADCshiftRL) v.AuxInt = c v.AddArg(x) @@ -1003,7 +1012,7 @@ func rewriteValueARM_OpARMADC_0(v *Value) bool { // cond: // result: (ADCshiftRL x y [c] flags) for { - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSRLconst { break @@ -1011,7 +1020,6 @@ func rewriteValueARM_OpARMADC_0(v *Value) bool { c := v_0.AuxInt y := v_0.Args[0] x := v.Args[1] - flags := v.Args[2] v.reset(OpARMADCshiftRL) v.AuxInt = c v.AddArg(x) @@ -1026,7 +1034,7 @@ func rewriteValueARM_OpARMADC_10(v *Value) bool { // cond: // result: (ADCshiftRL x y [c] flags) for { - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSRLconst { break @@ -1034,7 +1042,6 @@ func rewriteValueARM_OpARMADC_10(v *Value) bool { c := v_0.AuxInt y := v_0.Args[0] x := v.Args[1] - flags := v.Args[2] v.reset(OpARMADCshiftRL) v.AuxInt = c v.AddArg(x) @@ -1046,7 +1053,7 @@ func rewriteValueARM_OpARMADC_10(v *Value) bool { // cond: // result: (ADCshiftRL x y [c] flags) for { - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSRLconst { @@ -1054,7 +1061,6 @@ func rewriteValueARM_OpARMADC_10(v *Value) bool { } c := v_1.AuxInt y := v_1.Args[0] - flags := v.Args[2] v.reset(OpARMADCshiftRL) v.AuxInt = c v.AddArg(x) @@ -1066,7 +1072,7 @@ func rewriteValueARM_OpARMADC_10(v *Value) bool { // cond: // result: (ADCshiftRA x y [c] flags) for { - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSRAconst { @@ -1074,7 +1080,6 @@ func rewriteValueARM_OpARMADC_10(v *Value) bool { } c := v_1.AuxInt y := v_1.Args[0] - flags := v.Args[2] v.reset(OpARMADCshiftRA) v.AuxInt = c v.AddArg(x) @@ -1086,7 +1091,7 @@ func rewriteValueARM_OpARMADC_10(v *Value) bool { // cond: // result: (ADCshiftRA x y [c] flags) for { - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSRAconst { break @@ -1094,7 +1099,6 @@ func rewriteValueARM_OpARMADC_10(v *Value) bool { c := v_0.AuxInt y := v_0.Args[0] x := v.Args[1] - flags := v.Args[2] v.reset(OpARMADCshiftRA) v.AuxInt = c v.AddArg(x) @@ -1106,7 +1110,7 @@ func rewriteValueARM_OpARMADC_10(v *Value) bool { // cond: // result: (ADCshiftRA x y [c] flags) for { - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSRAconst { break @@ -1114,7 +1118,6 @@ func rewriteValueARM_OpARMADC_10(v *Value) bool { c := v_0.AuxInt y := v_0.Args[0] x := v.Args[1] - flags := v.Args[2] v.reset(OpARMADCshiftRA) v.AuxInt = c v.AddArg(x) @@ -1126,7 +1129,7 @@ func rewriteValueARM_OpARMADC_10(v *Value) bool { // cond: // result: (ADCshiftRA x y [c] flags) for { - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSRAconst { @@ -1134,7 +1137,6 @@ func rewriteValueARM_OpARMADC_10(v *Value) bool { } c := v_1.AuxInt y := v_1.Args[0] - flags := v.Args[2] v.reset(OpARMADCshiftRA) v.AuxInt = c v.AddArg(x) @@ -1146,16 +1148,14 @@ func rewriteValueARM_OpARMADC_10(v *Value) bool { // cond: // result: (ADCshiftLLreg x y z flags) for { - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSLL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] - flags := v.Args[2] + y := v_1.Args[0] v.reset(OpARMADCshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -1167,16 +1167,14 @@ func rewriteValueARM_OpARMADC_10(v *Value) bool { // cond: // result: (ADCshiftLLreg x y z flags) for { - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSLL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] + y := v_0.Args[0] x := v.Args[1] - flags := v.Args[2] v.reset(OpARMADCshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -1188,16 +1186,14 @@ func rewriteValueARM_OpARMADC_10(v *Value) bool { // cond: // result: (ADCshiftLLreg x y z flags) for { - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSLL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] + y := v_0.Args[0] x := v.Args[1] - flags := v.Args[2] v.reset(OpARMADCshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -1209,16 +1205,14 @@ func rewriteValueARM_OpARMADC_10(v *Value) bool { // cond: // result: (ADCshiftLLreg x y z flags) for { - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSLL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] - flags := v.Args[2] + y := v_1.Args[0] v.reset(OpARMADCshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -1233,16 +1227,14 @@ func rewriteValueARM_OpARMADC_20(v *Value) bool { // cond: // result: (ADCshiftRLreg x y z flags) for { - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSRL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] - flags := v.Args[2] + y := v_1.Args[0] v.reset(OpARMADCshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -1254,16 +1246,14 @@ func rewriteValueARM_OpARMADC_20(v *Value) bool { // cond: // result: (ADCshiftRLreg x y z flags) for { - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSRL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] + y := v_0.Args[0] x := v.Args[1] - flags := v.Args[2] v.reset(OpARMADCshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -1275,16 +1265,14 @@ func rewriteValueARM_OpARMADC_20(v *Value) bool { // cond: // result: (ADCshiftRLreg x y z flags) for { - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSRL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] + y := v_0.Args[0] x := v.Args[1] - flags := v.Args[2] v.reset(OpARMADCshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -1296,16 +1284,14 @@ func rewriteValueARM_OpARMADC_20(v *Value) bool { // cond: // result: (ADCshiftRLreg x y z flags) for { - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSRL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] - flags := v.Args[2] + y := v_1.Args[0] v.reset(OpARMADCshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -1317,16 +1303,14 @@ func rewriteValueARM_OpARMADC_20(v *Value) bool { // cond: // result: (ADCshiftRAreg x y z flags) for { - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSRA { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] - flags := v.Args[2] + y := v_1.Args[0] v.reset(OpARMADCshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -1338,16 +1322,14 @@ func rewriteValueARM_OpARMADC_20(v *Value) bool { // cond: // result: (ADCshiftRAreg x y z flags) for { - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSRA { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] + y := v_0.Args[0] x := v.Args[1] - flags := v.Args[2] v.reset(OpARMADCshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -1359,16 +1341,14 @@ func rewriteValueARM_OpARMADC_20(v *Value) bool { // cond: // result: (ADCshiftRAreg x y z flags) for { - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSRA { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] + y := v_0.Args[0] x := v.Args[1] - flags := v.Args[2] v.reset(OpARMADCshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -1380,16 +1360,14 @@ func rewriteValueARM_OpARMADC_20(v *Value) bool { // cond: // result: (ADCshiftRAreg x y z flags) for { - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSRA { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] - flags := v.Args[2] + y := v_1.Args[0] v.reset(OpARMADCshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -1405,14 +1383,13 @@ func rewriteValueARM_OpARMADCconst_0(v *Value) bool { // result: (ADCconst [int64(int32(c+d))] x flags) for { c := v.AuxInt - _ = v.Args[1] + flags := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMADDconst { break } d := v_0.AuxInt x := v_0.Args[0] - flags := v.Args[1] v.reset(OpARMADCconst) v.AuxInt = int64(int32(c + d)) v.AddArg(x) @@ -1424,14 +1401,13 @@ func rewriteValueARM_OpARMADCconst_0(v *Value) bool { // result: (ADCconst [int64(int32(c-d))] x flags) for { c := v.AuxInt - _ = v.Args[1] + flags := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSUBconst { break } d := v_0.AuxInt x := v_0.Args[0] - flags := v.Args[1] v.reset(OpARMADCconst) v.AuxInt = int64(int32(c - d)) v.AddArg(x) @@ -1442,20 +1418,18 @@ func rewriteValueARM_OpARMADCconst_0(v *Value) bool { } func rewriteValueARM_OpARMADCshiftLL_0(v *Value) bool { b := v.Block - _ = b // match: (ADCshiftLL (MOVWconst [c]) x [d] flags) // cond: // result: (ADCconst [c] (SLLconst x [d]) flags) for { d := v.AuxInt - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - flags := v.Args[2] v.reset(OpARMADCconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type) @@ -1470,14 +1444,13 @@ func rewriteValueARM_OpARMADCshiftLL_0(v *Value) bool { // result: (ADCconst x [int64(int32(uint32(c)< x y) flags) for { - _ = v.Args[3] + flags := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break @@ -1501,7 +1473,6 @@ func rewriteValueARM_OpARMADCshiftLLreg_0(v *Value) bool { c := v_0.AuxInt x := v.Args[1] y := v.Args[2] - flags := v.Args[3] v.reset(OpARMADCconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type) @@ -1515,7 +1486,7 @@ func rewriteValueARM_OpARMADCshiftLLreg_0(v *Value) bool { // cond: // result: (ADCshiftLL x y [c] flags) for { - _ = v.Args[3] + flags := v.Args[3] x := v.Args[0] y := v.Args[1] v_2 := v.Args[2] @@ -1523,7 +1494,6 @@ func rewriteValueARM_OpARMADCshiftLLreg_0(v *Value) bool { break } c := v_2.AuxInt - flags := v.Args[3] v.reset(OpARMADCshiftLL) v.AuxInt = c v.AddArg(x) @@ -1535,20 +1505,18 @@ func rewriteValueARM_OpARMADCshiftLLreg_0(v *Value) bool { } func rewriteValueARM_OpARMADCshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (ADCshiftRA (MOVWconst [c]) x [d] flags) // cond: // result: (ADCconst [c] (SRAconst x [d]) flags) for { d := v.AuxInt - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - flags := v.Args[2] v.reset(OpARMADCconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type) @@ -1563,14 +1531,13 @@ func rewriteValueARM_OpARMADCshiftRA_0(v *Value) bool { // result: (ADCconst x [int64(int32(c)>>uint64(d))] flags) for { d := v.AuxInt - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - flags := v.Args[2] v.reset(OpARMADCconst) v.AuxInt = int64(int32(c) >> uint64(d)) v.AddArg(x) @@ -1581,12 +1548,11 @@ func rewriteValueARM_OpARMADCshiftRA_0(v *Value) bool { } func rewriteValueARM_OpARMADCshiftRAreg_0(v *Value) bool { b := v.Block - _ = b // match: (ADCshiftRAreg (MOVWconst [c]) x y flags) // cond: // result: (ADCconst [c] (SRA x y) flags) for { - _ = v.Args[3] + flags := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break @@ -1594,7 +1560,6 @@ func rewriteValueARM_OpARMADCshiftRAreg_0(v *Value) bool { c := v_0.AuxInt x := v.Args[1] y := v.Args[2] - flags := v.Args[3] v.reset(OpARMADCconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type) @@ -1608,7 +1573,7 @@ func rewriteValueARM_OpARMADCshiftRAreg_0(v *Value) bool { // cond: // result: (ADCshiftRA x y [c] flags) for { - _ = v.Args[3] + flags := v.Args[3] x := v.Args[0] y := v.Args[1] v_2 := v.Args[2] @@ -1616,7 +1581,6 @@ func rewriteValueARM_OpARMADCshiftRAreg_0(v *Value) bool { break } c := v_2.AuxInt - flags := v.Args[3] v.reset(OpARMADCshiftRA) v.AuxInt = c v.AddArg(x) @@ -1628,20 +1592,18 @@ func rewriteValueARM_OpARMADCshiftRAreg_0(v *Value) bool { } func rewriteValueARM_OpARMADCshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (ADCshiftRL (MOVWconst [c]) x [d] flags) // cond: // result: (ADCconst [c] (SRLconst x [d]) flags) for { d := v.AuxInt - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - flags := v.Args[2] v.reset(OpARMADCconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type) @@ -1656,14 +1618,13 @@ func rewriteValueARM_OpARMADCshiftRL_0(v *Value) bool { // result: (ADCconst x [int64(int32(uint32(c)>>uint64(d)))] flags) for { d := v.AuxInt - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - flags := v.Args[2] v.reset(OpARMADCconst) v.AuxInt = int64(int32(uint32(c) >> uint64(d))) v.AddArg(x) @@ -1674,12 +1635,11 @@ func rewriteValueARM_OpARMADCshiftRL_0(v *Value) bool { } func rewriteValueARM_OpARMADCshiftRLreg_0(v *Value) bool { b := v.Block - _ = b // match: (ADCshiftRLreg (MOVWconst [c]) x y flags) // cond: // result: (ADCconst [c] (SRL x y) flags) for { - _ = v.Args[3] + flags := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break @@ -1687,7 +1647,6 @@ func rewriteValueARM_OpARMADCshiftRLreg_0(v *Value) bool { c := v_0.AuxInt x := v.Args[1] y := v.Args[2] - flags := v.Args[3] v.reset(OpARMADCconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type) @@ -1701,7 +1660,7 @@ func rewriteValueARM_OpARMADCshiftRLreg_0(v *Value) bool { // cond: // result: (ADCshiftRL x y [c] flags) for { - _ = v.Args[3] + flags := v.Args[3] x := v.Args[0] y := v.Args[1] v_2 := v.Args[2] @@ -1709,7 +1668,6 @@ func rewriteValueARM_OpARMADCshiftRLreg_0(v *Value) bool { break } c := v_2.AuxInt - flags := v.Args[3] v.reset(OpARMADCshiftRL) v.AuxInt = c v.AddArg(x) @@ -1740,13 +1698,12 @@ func rewriteValueARM_OpARMADD_0(v *Value) bool { // cond: // result: (ADDconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMADDconst) v.AuxInt = c v.AddArg(x) @@ -1774,14 +1731,13 @@ func rewriteValueARM_OpARMADD_0(v *Value) bool { // cond: // result: (ADDshiftLL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMADDshiftLL) v.AuxInt = c v.AddArg(x) @@ -1810,14 +1766,13 @@ func rewriteValueARM_OpARMADD_0(v *Value) bool { // cond: // result: (ADDshiftRL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMADDshiftRL) v.AuxInt = c v.AddArg(x) @@ -1846,14 +1801,13 @@ func rewriteValueARM_OpARMADD_0(v *Value) bool { // cond: // result: (ADDshiftRA x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRAconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMADDshiftRA) v.AuxInt = c v.AddArg(x) @@ -1870,9 +1824,8 @@ func rewriteValueARM_OpARMADD_0(v *Value) bool { if v_1.Op != OpARMSLL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMADDshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -1883,15 +1836,13 @@ func rewriteValueARM_OpARMADD_0(v *Value) bool { // cond: // result: (ADDshiftLLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMADDshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -1902,7 +1853,6 @@ func rewriteValueARM_OpARMADD_0(v *Value) bool { } func rewriteValueARM_OpARMADD_10(v *Value) bool { b := v.Block - _ = b // match: (ADD x (SRL y z)) // cond: // result: (ADDshiftRLreg x y z) @@ -1913,9 +1863,8 @@ func rewriteValueARM_OpARMADD_10(v *Value) bool { if v_1.Op != OpARMSRL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMADDshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -1926,15 +1875,13 @@ func rewriteValueARM_OpARMADD_10(v *Value) bool { // cond: // result: (ADDshiftRLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMADDshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -1951,9 +1898,8 @@ func rewriteValueARM_OpARMADD_10(v *Value) bool { if v_1.Op != OpARMSRA { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMADDshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -1964,15 +1910,13 @@ func rewriteValueARM_OpARMADD_10(v *Value) bool { // cond: // result: (ADDshiftRAreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRA { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMADDshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -2002,7 +1946,7 @@ func rewriteValueARM_OpARMADD_10(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMRSBconst { break @@ -2011,7 +1955,6 @@ func rewriteValueARM_OpARMADD_10(v *Value) bool { break } y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMSUB) v.AddArg(x) v.AddArg(y) @@ -2073,15 +2016,13 @@ func rewriteValueARM_OpARMADD_10(v *Value) bool { // cond: // result: (MULA x y a) for { - _ = v.Args[1] + a := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMUL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - a := v.Args[1] + x := v_0.Args[0] v.reset(OpARMMULA) v.AddArg(x) v.AddArg(y) @@ -2098,9 +2039,8 @@ func rewriteValueARM_OpARMADD_10(v *Value) bool { if v_1.Op != OpARMMUL { break } - _ = v_1.Args[1] - x := v_1.Args[0] y := v_1.Args[1] + x := v_1.Args[0] v.reset(OpARMMULA) v.AddArg(x) v.AddArg(y) @@ -2120,9 +2060,8 @@ func rewriteValueARM_OpARMADDD_0(v *Value) bool { if v_1.Op != OpARMMULD { break } - _ = v_1.Args[1] - x := v_1.Args[0] y := v_1.Args[1] + x := v_1.Args[0] if !(a.Uses == 1 && objabi.GOARM >= 6) { break } @@ -2136,15 +2075,13 @@ func rewriteValueARM_OpARMADDD_0(v *Value) bool { // cond: a.Uses == 1 && objabi.GOARM >= 6 // result: (MULAD a x y) for { - _ = v.Args[1] + a := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMULD { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - a := v.Args[1] + x := v_0.Args[0] if !(a.Uses == 1 && objabi.GOARM >= 6) { break } @@ -2164,9 +2101,8 @@ func rewriteValueARM_OpARMADDD_0(v *Value) bool { if v_1.Op != OpARMNMULD { break } - _ = v_1.Args[1] - x := v_1.Args[0] y := v_1.Args[1] + x := v_1.Args[0] if !(a.Uses == 1 && objabi.GOARM >= 6) { break } @@ -2180,15 +2116,13 @@ func rewriteValueARM_OpARMADDD_0(v *Value) bool { // cond: a.Uses == 1 && objabi.GOARM >= 6 // result: (MULSD a x y) for { - _ = v.Args[1] + a := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMNMULD { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - a := v.Args[1] + x := v_0.Args[0] if !(a.Uses == 1 && objabi.GOARM >= 6) { break } @@ -2211,9 +2145,8 @@ func rewriteValueARM_OpARMADDF_0(v *Value) bool { if v_1.Op != OpARMMULF { break } - _ = v_1.Args[1] - x := v_1.Args[0] y := v_1.Args[1] + x := v_1.Args[0] if !(a.Uses == 1 && objabi.GOARM >= 6) { break } @@ -2227,15 +2160,13 @@ func rewriteValueARM_OpARMADDF_0(v *Value) bool { // cond: a.Uses == 1 && objabi.GOARM >= 6 // result: (MULAF a x y) for { - _ = v.Args[1] + a := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMULF { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - a := v.Args[1] + x := v_0.Args[0] if !(a.Uses == 1 && objabi.GOARM >= 6) { break } @@ -2255,9 +2186,8 @@ func rewriteValueARM_OpARMADDF_0(v *Value) bool { if v_1.Op != OpARMNMULF { break } - _ = v_1.Args[1] - x := v_1.Args[0] y := v_1.Args[1] + x := v_1.Args[0] if !(a.Uses == 1 && objabi.GOARM >= 6) { break } @@ -2271,15 +2201,13 @@ func rewriteValueARM_OpARMADDF_0(v *Value) bool { // cond: a.Uses == 1 && objabi.GOARM >= 6 // result: (MULSF a x y) for { - _ = v.Args[1] + a := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMNMULF { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - a := v.Args[1] + x := v_0.Args[0] if !(a.Uses == 1 && objabi.GOARM >= 6) { break } @@ -2312,13 +2240,12 @@ func rewriteValueARM_OpARMADDS_0(v *Value) bool { // cond: // result: (ADDSconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMADDSconst) v.AuxInt = c v.AddArg(x) @@ -2346,14 +2273,13 @@ func rewriteValueARM_OpARMADDS_0(v *Value) bool { // cond: // result: (ADDSshiftLL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMADDSshiftLL) v.AuxInt = c v.AddArg(x) @@ -2382,14 +2308,13 @@ func rewriteValueARM_OpARMADDS_0(v *Value) bool { // cond: // result: (ADDSshiftRL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMADDSshiftRL) v.AuxInt = c v.AddArg(x) @@ -2418,14 +2343,13 @@ func rewriteValueARM_OpARMADDS_0(v *Value) bool { // cond: // result: (ADDSshiftRA x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRAconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMADDSshiftRA) v.AuxInt = c v.AddArg(x) @@ -2442,9 +2366,8 @@ func rewriteValueARM_OpARMADDS_0(v *Value) bool { if v_1.Op != OpARMSLL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMADDSshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -2455,15 +2378,13 @@ func rewriteValueARM_OpARMADDS_0(v *Value) bool { // cond: // result: (ADDSshiftLLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMADDSshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -2483,9 +2404,8 @@ func rewriteValueARM_OpARMADDS_10(v *Value) bool { if v_1.Op != OpARMSRL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMADDSshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -2496,15 +2416,13 @@ func rewriteValueARM_OpARMADDS_10(v *Value) bool { // cond: // result: (ADDSshiftRLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMADDSshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -2521,9 +2439,8 @@ func rewriteValueARM_OpARMADDS_10(v *Value) bool { if v_1.Op != OpARMSRA { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMADDSshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -2534,15 +2451,13 @@ func rewriteValueARM_OpARMADDS_10(v *Value) bool { // cond: // result: (ADDSshiftRAreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRA { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMADDSshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -2553,19 +2468,17 @@ func rewriteValueARM_OpARMADDS_10(v *Value) bool { } func rewriteValueARM_OpARMADDSshiftLL_0(v *Value) bool { b := v.Block - _ = b // match: (ADDSshiftLL (MOVWconst [c]) x [d]) // cond: // result: (ADDSconst [c] (SLLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMADDSconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type) @@ -2595,19 +2508,17 @@ func rewriteValueARM_OpARMADDSshiftLL_0(v *Value) bool { } func rewriteValueARM_OpARMADDSshiftLLreg_0(v *Value) bool { b := v.Block - _ = b // match: (ADDSshiftLLreg (MOVWconst [c]) x y) // cond: // result: (ADDSconst [c] (SLL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMADDSconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type) @@ -2638,19 +2549,17 @@ func rewriteValueARM_OpARMADDSshiftLLreg_0(v *Value) bool { } func rewriteValueARM_OpARMADDSshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (ADDSshiftRA (MOVWconst [c]) x [d]) // cond: // result: (ADDSconst [c] (SRAconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMADDSconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type) @@ -2680,19 +2589,17 @@ func rewriteValueARM_OpARMADDSshiftRA_0(v *Value) bool { } func rewriteValueARM_OpARMADDSshiftRAreg_0(v *Value) bool { b := v.Block - _ = b // match: (ADDSshiftRAreg (MOVWconst [c]) x y) // cond: // result: (ADDSconst [c] (SRA x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMADDSconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type) @@ -2723,19 +2630,17 @@ func rewriteValueARM_OpARMADDSshiftRAreg_0(v *Value) bool { } func rewriteValueARM_OpARMADDSshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (ADDSshiftRL (MOVWconst [c]) x [d]) // cond: // result: (ADDSconst [c] (SRLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMADDSconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type) @@ -2765,19 +2670,17 @@ func rewriteValueARM_OpARMADDSshiftRL_0(v *Value) bool { } func rewriteValueARM_OpARMADDSshiftRLreg_0(v *Value) bool { b := v.Block - _ = b // match: (ADDSshiftRLreg (MOVWconst [c]) x y) // cond: // result: (ADDSconst [c] (SRL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMADDSconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type) @@ -2932,19 +2835,18 @@ func rewriteValueARM_OpARMADDconst_0(v *Value) bool { } func rewriteValueARM_OpARMADDshiftLL_0(v *Value) bool { b := v.Block - _ = b + typ := &b.Func.Config.Types // match: (ADDshiftLL (MOVWconst [c]) x [d]) // cond: // result: (ADDconst [c] (SLLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMADDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type) @@ -2975,7 +2877,7 @@ func rewriteValueARM_OpARMADDshiftLL_0(v *Value) bool { // result: (SRRconst [32-c] x) for { c := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRLconst { break @@ -2983,8 +2885,7 @@ func rewriteValueARM_OpARMADDshiftLL_0(v *Value) bool { if v_0.AuxInt != 32-c { break } - x := v_0.Args[0] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpARMSRRconst) @@ -2992,23 +2893,87 @@ func rewriteValueARM_OpARMADDshiftLL_0(v *Value) bool { v.AddArg(x) return true } + // match: (ADDshiftLL [8] (BFXU [armBFAuxInt(8, 8)] x) x) + // cond: + // result: (REV16 x) + for { + if v.Type != typ.UInt16 { + break + } + if v.AuxInt != 8 { + break + } + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpARMBFXU { + break + } + if v_0.Type != typ.UInt16 { + break + } + if v_0.AuxInt != armBFAuxInt(8, 8) { + break + } + if x != v_0.Args[0] { + break + } + v.reset(OpARMREV16) + v.AddArg(x) + return true + } + // match: (ADDshiftLL [8] (SRLconst [24] (SLLconst [16] x)) x) + // cond: objabi.GOARM>=6 + // result: (REV16 x) + for { + if v.Type != typ.UInt16 { + break + } + if v.AuxInt != 8 { + break + } + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpARMSRLconst { + break + } + if v_0.Type != typ.UInt16 { + break + } + if v_0.AuxInt != 24 { + break + } + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpARMSLLconst { + break + } + if v_0_0.AuxInt != 16 { + break + } + if x != v_0_0.Args[0] { + break + } + if !(objabi.GOARM >= 6) { + break + } + v.reset(OpARMREV16) + v.AddArg(x) + return true + } return false } func rewriteValueARM_OpARMADDshiftLLreg_0(v *Value) bool { b := v.Block - _ = b // match: (ADDshiftLLreg (MOVWconst [c]) x y) // cond: // result: (ADDconst [c] (SLL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMADDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type) @@ -3039,19 +3004,17 @@ func rewriteValueARM_OpARMADDshiftLLreg_0(v *Value) bool { } func rewriteValueARM_OpARMADDshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (ADDshiftRA (MOVWconst [c]) x [d]) // cond: // result: (ADDconst [c] (SRAconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMADDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type) @@ -3081,19 +3044,17 @@ func rewriteValueARM_OpARMADDshiftRA_0(v *Value) bool { } func rewriteValueARM_OpARMADDshiftRAreg_0(v *Value) bool { b := v.Block - _ = b // match: (ADDshiftRAreg (MOVWconst [c]) x y) // cond: // result: (ADDconst [c] (SRA x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMADDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type) @@ -3124,19 +3085,17 @@ func rewriteValueARM_OpARMADDshiftRAreg_0(v *Value) bool { } func rewriteValueARM_OpARMADDshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (ADDshiftRL (MOVWconst [c]) x [d]) // cond: // result: (ADDconst [c] (SRLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMADDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type) @@ -3167,7 +3126,7 @@ func rewriteValueARM_OpARMADDshiftRL_0(v *Value) bool { // result: (SRRconst [ c] x) for { c := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLLconst { break @@ -3175,8 +3134,7 @@ func rewriteValueARM_OpARMADDshiftRL_0(v *Value) bool { if v_0.AuxInt != 32-c { break } - x := v_0.Args[0] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpARMSRRconst) @@ -3188,19 +3146,17 @@ func rewriteValueARM_OpARMADDshiftRL_0(v *Value) bool { } func rewriteValueARM_OpARMADDshiftRLreg_0(v *Value) bool { b := v.Block - _ = b // match: (ADDshiftRLreg (MOVWconst [c]) x y) // cond: // result: (ADDconst [c] (SRL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMADDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type) @@ -3250,13 +3206,12 @@ func rewriteValueARM_OpARMAND_0(v *Value) bool { // cond: // result: (ANDconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMANDconst) v.AuxInt = c v.AddArg(x) @@ -3284,14 +3239,13 @@ func rewriteValueARM_OpARMAND_0(v *Value) bool { // cond: // result: (ANDshiftLL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMANDshiftLL) v.AuxInt = c v.AddArg(x) @@ -3320,14 +3274,13 @@ func rewriteValueARM_OpARMAND_0(v *Value) bool { // cond: // result: (ANDshiftRL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMANDshiftRL) v.AuxInt = c v.AddArg(x) @@ -3356,14 +3309,13 @@ func rewriteValueARM_OpARMAND_0(v *Value) bool { // cond: // result: (ANDshiftRA x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRAconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMANDshiftRA) v.AuxInt = c v.AddArg(x) @@ -3380,9 +3332,8 @@ func rewriteValueARM_OpARMAND_0(v *Value) bool { if v_1.Op != OpARMSLL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMANDshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -3393,15 +3344,13 @@ func rewriteValueARM_OpARMAND_0(v *Value) bool { // cond: // result: (ANDshiftLLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMANDshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -3421,9 +3370,8 @@ func rewriteValueARM_OpARMAND_10(v *Value) bool { if v_1.Op != OpARMSRL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMANDshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -3434,15 +3382,13 @@ func rewriteValueARM_OpARMAND_10(v *Value) bool { // cond: // result: (ANDshiftRLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMANDshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -3459,9 +3405,8 @@ func rewriteValueARM_OpARMAND_10(v *Value) bool { if v_1.Op != OpARMSRA { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMANDshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -3472,15 +3417,13 @@ func rewriteValueARM_OpARMAND_10(v *Value) bool { // cond: // result: (ANDshiftRAreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRA { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMANDshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -3491,9 +3434,8 @@ func rewriteValueARM_OpARMAND_10(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -3521,13 +3463,12 @@ func rewriteValueARM_OpARMAND_10(v *Value) bool { // cond: // result: (BIC x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMVN { break } y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMBIC) v.AddArg(x) v.AddArg(y) @@ -3555,14 +3496,13 @@ func rewriteValueARM_OpARMAND_10(v *Value) bool { // cond: // result: (BICshiftLL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMVNshiftLL { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMBICshiftLL) v.AuxInt = c v.AddArg(x) @@ -3594,14 +3534,13 @@ func rewriteValueARM_OpARMAND_20(v *Value) bool { // cond: // result: (BICshiftRL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMVNshiftRL { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMBICshiftRL) v.AuxInt = c v.AddArg(x) @@ -3630,14 +3569,13 @@ func rewriteValueARM_OpARMAND_20(v *Value) bool { // cond: // result: (BICshiftRA x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMVNshiftRA { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMBICshiftRA) v.AuxInt = c v.AddArg(x) @@ -3734,19 +3672,17 @@ func rewriteValueARM_OpARMANDconst_0(v *Value) bool { } func rewriteValueARM_OpARMANDshiftLL_0(v *Value) bool { b := v.Block - _ = b // match: (ANDshiftLL (MOVWconst [c]) x [d]) // cond: // result: (ANDconst [c] (SLLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMANDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type) @@ -3799,19 +3735,17 @@ func rewriteValueARM_OpARMANDshiftLL_0(v *Value) bool { } func rewriteValueARM_OpARMANDshiftLLreg_0(v *Value) bool { b := v.Block - _ = b // match: (ANDshiftLLreg (MOVWconst [c]) x y) // cond: // result: (ANDconst [c] (SLL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMANDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type) @@ -3842,19 +3776,17 @@ func rewriteValueARM_OpARMANDshiftLLreg_0(v *Value) bool { } func rewriteValueARM_OpARMANDshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (ANDshiftRA (MOVWconst [c]) x [d]) // cond: // result: (ANDconst [c] (SRAconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMANDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type) @@ -3907,19 +3839,17 @@ func rewriteValueARM_OpARMANDshiftRA_0(v *Value) bool { } func rewriteValueARM_OpARMANDshiftRAreg_0(v *Value) bool { b := v.Block - _ = b // match: (ANDshiftRAreg (MOVWconst [c]) x y) // cond: // result: (ANDconst [c] (SRA x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMANDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type) @@ -3950,19 +3880,17 @@ func rewriteValueARM_OpARMANDshiftRAreg_0(v *Value) bool { } func rewriteValueARM_OpARMANDshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (ANDshiftRL (MOVWconst [c]) x [d]) // cond: // result: (ANDconst [c] (SRLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMANDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type) @@ -4015,19 +3943,17 @@ func rewriteValueARM_OpARMANDshiftRL_0(v *Value) bool { } func rewriteValueARM_OpARMANDshiftRLreg_0(v *Value) bool { b := v.Block - _ = b // match: (ANDshiftRLreg (MOVWconst [c]) x y) // cond: // result: (ANDconst [c] (SRL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMANDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type) @@ -4171,9 +4097,8 @@ func rewriteValueARM_OpARMBIC_0(v *Value) bool { if v_1.Op != OpARMSLL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMBICshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -4190,9 +4115,8 @@ func rewriteValueARM_OpARMBIC_0(v *Value) bool { if v_1.Op != OpARMSRL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMBICshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -4209,9 +4133,8 @@ func rewriteValueARM_OpARMBIC_0(v *Value) bool { if v_1.Op != OpARMSRA { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMBICshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -4222,9 +4145,8 @@ func rewriteValueARM_OpARMBIC_0(v *Value) bool { // cond: // result: (MOVWconst [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpARMMOVWconst) @@ -4529,13 +4451,12 @@ func rewriteValueARM_OpARMCMN_0(v *Value) bool { // cond: // result: (CMNconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMCMNconst) v.AuxInt = c v.AddArg(x) @@ -4563,14 +4484,13 @@ func rewriteValueARM_OpARMCMN_0(v *Value) bool { // cond: // result: (CMNshiftLL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMCMNshiftLL) v.AuxInt = c v.AddArg(x) @@ -4599,14 +4519,13 @@ func rewriteValueARM_OpARMCMN_0(v *Value) bool { // cond: // result: (CMNshiftRL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMCMNshiftRL) v.AuxInt = c v.AddArg(x) @@ -4635,14 +4554,13 @@ func rewriteValueARM_OpARMCMN_0(v *Value) bool { // cond: // result: (CMNshiftRA x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRAconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMCMNshiftRA) v.AuxInt = c v.AddArg(x) @@ -4659,9 +4577,8 @@ func rewriteValueARM_OpARMCMN_0(v *Value) bool { if v_1.Op != OpARMSLL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMCMNshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -4672,15 +4589,13 @@ func rewriteValueARM_OpARMCMN_0(v *Value) bool { // cond: // result: (CMNshiftLLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMCMNshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -4700,9 +4615,8 @@ func rewriteValueARM_OpARMCMN_10(v *Value) bool { if v_1.Op != OpARMSRL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMCMNshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -4713,15 +4627,13 @@ func rewriteValueARM_OpARMCMN_10(v *Value) bool { // cond: // result: (CMNshiftRLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMCMNshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -4738,9 +4650,8 @@ func rewriteValueARM_OpARMCMN_10(v *Value) bool { if v_1.Op != OpARMSRA { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMCMNshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -4751,15 +4662,13 @@ func rewriteValueARM_OpARMCMN_10(v *Value) bool { // cond: // result: (CMNshiftRAreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRA { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMCMNshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -4789,7 +4698,7 @@ func rewriteValueARM_OpARMCMN_10(v *Value) bool { // cond: // result: (CMP x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMRSBconst { break @@ -4798,7 +4707,6 @@ func rewriteValueARM_OpARMCMN_10(v *Value) bool { break } y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMCMP) v.AddArg(x) v.AddArg(y) @@ -4891,19 +4799,17 @@ func rewriteValueARM_OpARMCMNconst_0(v *Value) bool { } func rewriteValueARM_OpARMCMNshiftLL_0(v *Value) bool { b := v.Block - _ = b // match: (CMNshiftLL (MOVWconst [c]) x [d]) // cond: // result: (CMNconst [c] (SLLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMCMNconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type) @@ -4933,19 +4839,17 @@ func rewriteValueARM_OpARMCMNshiftLL_0(v *Value) bool { } func rewriteValueARM_OpARMCMNshiftLLreg_0(v *Value) bool { b := v.Block - _ = b // match: (CMNshiftLLreg (MOVWconst [c]) x y) // cond: // result: (CMNconst [c] (SLL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMCMNconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type) @@ -4976,19 +4880,17 @@ func rewriteValueARM_OpARMCMNshiftLLreg_0(v *Value) bool { } func rewriteValueARM_OpARMCMNshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (CMNshiftRA (MOVWconst [c]) x [d]) // cond: // result: (CMNconst [c] (SRAconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMCMNconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type) @@ -5018,19 +4920,17 @@ func rewriteValueARM_OpARMCMNshiftRA_0(v *Value) bool { } func rewriteValueARM_OpARMCMNshiftRAreg_0(v *Value) bool { b := v.Block - _ = b // match: (CMNshiftRAreg (MOVWconst [c]) x y) // cond: // result: (CMNconst [c] (SRA x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMCMNconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type) @@ -5061,19 +4961,17 @@ func rewriteValueARM_OpARMCMNshiftRAreg_0(v *Value) bool { } func rewriteValueARM_OpARMCMNshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (CMNshiftRL (MOVWconst [c]) x [d]) // cond: // result: (CMNconst [c] (SRLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMCMNconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type) @@ -5103,19 +5001,17 @@ func rewriteValueARM_OpARMCMNshiftRL_0(v *Value) bool { } func rewriteValueARM_OpARMCMNshiftRLreg_0(v *Value) bool { b := v.Block - _ = b // match: (CMNshiftRLreg (MOVWconst [c]) x y) // cond: // result: (CMNconst [c] (SRL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMCMNconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type) @@ -5332,7 +5228,6 @@ func rewriteValueARM_OpARMCMOVWLSconst_0(v *Value) bool { } func rewriteValueARM_OpARMCMP_0(v *Value) bool { b := v.Block - _ = b // match: (CMP x (MOVWconst [c])) // cond: // result: (CMPconst [c] x) @@ -5353,13 +5248,12 @@ func rewriteValueARM_OpARMCMP_0(v *Value) bool { // cond: // result: (InvertFlags (CMPconst [c] x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMInvertFlags) v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags) v0.AuxInt = c @@ -5389,14 +5283,13 @@ func rewriteValueARM_OpARMCMP_0(v *Value) bool { // cond: // result: (InvertFlags (CMPshiftLL x y [c])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMInvertFlags) v0 := b.NewValue0(v.Pos, OpARMCMPshiftLL, types.TypeFlags) v0.AuxInt = c @@ -5427,14 +5320,13 @@ func rewriteValueARM_OpARMCMP_0(v *Value) bool { // cond: // result: (InvertFlags (CMPshiftRL x y [c])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMInvertFlags) v0 := b.NewValue0(v.Pos, OpARMCMPshiftRL, types.TypeFlags) v0.AuxInt = c @@ -5465,14 +5357,13 @@ func rewriteValueARM_OpARMCMP_0(v *Value) bool { // cond: // result: (InvertFlags (CMPshiftRA x y [c])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRAconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMInvertFlags) v0 := b.NewValue0(v.Pos, OpARMCMPshiftRA, types.TypeFlags) v0.AuxInt = c @@ -5491,9 +5382,8 @@ func rewriteValueARM_OpARMCMP_0(v *Value) bool { if v_1.Op != OpARMSLL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMCMPshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -5504,15 +5394,13 @@ func rewriteValueARM_OpARMCMP_0(v *Value) bool { // cond: // result: (InvertFlags (CMPshiftLLreg x y z)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMInvertFlags) v0 := b.NewValue0(v.Pos, OpARMCMPshiftLLreg, types.TypeFlags) v0.AddArg(x) @@ -5525,7 +5413,6 @@ func rewriteValueARM_OpARMCMP_0(v *Value) bool { } func rewriteValueARM_OpARMCMP_10(v *Value) bool { b := v.Block - _ = b // match: (CMP x (SRL y z)) // cond: // result: (CMPshiftRLreg x y z) @@ -5536,9 +5423,8 @@ func rewriteValueARM_OpARMCMP_10(v *Value) bool { if v_1.Op != OpARMSRL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMCMPshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -5549,15 +5435,13 @@ func rewriteValueARM_OpARMCMP_10(v *Value) bool { // cond: // result: (InvertFlags (CMPshiftRLreg x y z)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMInvertFlags) v0 := b.NewValue0(v.Pos, OpARMCMPshiftRLreg, types.TypeFlags) v0.AddArg(x) @@ -5576,9 +5460,8 @@ func rewriteValueARM_OpARMCMP_10(v *Value) bool { if v_1.Op != OpARMSRA { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMCMPshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -5589,15 +5472,13 @@ func rewriteValueARM_OpARMCMP_10(v *Value) bool { // cond: // result: (InvertFlags (CMPshiftRAreg x y z)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRA { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMInvertFlags) v0 := b.NewValue0(v.Pos, OpARMCMPshiftRAreg, types.TypeFlags) v0.AddArg(x) @@ -5814,19 +5695,17 @@ func rewriteValueARM_OpARMCMPconst_0(v *Value) bool { } func rewriteValueARM_OpARMCMPshiftLL_0(v *Value) bool { b := v.Block - _ = b // match: (CMPshiftLL (MOVWconst [c]) x [d]) // cond: // result: (InvertFlags (CMPconst [c] (SLLconst x [d]))) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMInvertFlags) v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags) v0.AuxInt = c @@ -5858,19 +5737,17 @@ func rewriteValueARM_OpARMCMPshiftLL_0(v *Value) bool { } func rewriteValueARM_OpARMCMPshiftLLreg_0(v *Value) bool { b := v.Block - _ = b // match: (CMPshiftLLreg (MOVWconst [c]) x y) // cond: // result: (InvertFlags (CMPconst [c] (SLL x y))) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMInvertFlags) v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags) v0.AuxInt = c @@ -5903,19 +5780,17 @@ func rewriteValueARM_OpARMCMPshiftLLreg_0(v *Value) bool { } func rewriteValueARM_OpARMCMPshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (CMPshiftRA (MOVWconst [c]) x [d]) // cond: // result: (InvertFlags (CMPconst [c] (SRAconst x [d]))) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMInvertFlags) v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags) v0.AuxInt = c @@ -5947,19 +5822,17 @@ func rewriteValueARM_OpARMCMPshiftRA_0(v *Value) bool { } func rewriteValueARM_OpARMCMPshiftRAreg_0(v *Value) bool { b := v.Block - _ = b // match: (CMPshiftRAreg (MOVWconst [c]) x y) // cond: // result: (InvertFlags (CMPconst [c] (SRA x y))) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMInvertFlags) v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags) v0.AuxInt = c @@ -5992,19 +5865,17 @@ func rewriteValueARM_OpARMCMPshiftRAreg_0(v *Value) bool { } func rewriteValueARM_OpARMCMPshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (CMPshiftRL (MOVWconst [c]) x [d]) // cond: // result: (InvertFlags (CMPconst [c] (SRLconst x [d]))) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMInvertFlags) v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags) v0.AuxInt = c @@ -6036,19 +5907,17 @@ func rewriteValueARM_OpARMCMPshiftRL_0(v *Value) bool { } func rewriteValueARM_OpARMCMPshiftRLreg_0(v *Value) bool { b := v.Block - _ = b // match: (CMPshiftRLreg (MOVWconst [c]) x y) // cond: // result: (InvertFlags (CMPconst [c] (SRL x y))) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMInvertFlags) v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags) v0.AuxInt = c @@ -6765,23 +6634,20 @@ func rewriteValueARM_OpARMLessThanU_0(v *Value) bool { } func rewriteValueARM_OpARMMOVBUload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVBUload [off1] {sym} (ADDconst [off2] ptr) mem) // cond: // result: (MOVBUload [off1+off2] {sym} ptr mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] v.reset(OpARMMOVBUload) v.AuxInt = off1 + off2 v.Aux = sym @@ -6795,14 +6661,13 @@ func rewriteValueARM_OpARMMOVBUload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSUBconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] v.reset(OpARMMOVBUload) v.AuxInt = off1 - off2 v.Aux = sym @@ -6816,7 +6681,7 @@ func rewriteValueARM_OpARMMOVBUload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWaddr { break @@ -6824,7 +6689,6 @@ func rewriteValueARM_OpARMMOVBUload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2)) { break } @@ -6867,15 +6731,13 @@ func rewriteValueARM_OpARMMOVBUload_0(v *Value) bool { break } sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(sym == nil && !config.nacl) { break } @@ -6934,14 +6796,13 @@ func rewriteValueARM_OpARMMOVBUloadidx_0(v *Value) bool { // cond: // result: (MOVBUload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARMMOVBUload) v.AuxInt = c v.AddArg(ptr) @@ -6952,14 +6813,13 @@ func rewriteValueARM_OpARMMOVBUloadidx_0(v *Value) bool { // cond: // result: (MOVBUload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVBUload) v.AuxInt = c v.AddArg(ptr) @@ -7026,23 +6886,20 @@ func rewriteValueARM_OpARMMOVBUreg_0(v *Value) bool { } func rewriteValueARM_OpARMMOVBload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVBload [off1] {sym} (ADDconst [off2] ptr) mem) // cond: // result: (MOVBload [off1+off2] {sym} ptr mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] v.reset(OpARMMOVBload) v.AuxInt = off1 + off2 v.Aux = sym @@ -7056,14 +6913,13 @@ func rewriteValueARM_OpARMMOVBload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSUBconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] v.reset(OpARMMOVBload) v.AuxInt = off1 - off2 v.Aux = sym @@ -7077,7 +6933,7 @@ func rewriteValueARM_OpARMMOVBload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWaddr { break @@ -7085,7 +6941,6 @@ func rewriteValueARM_OpARMMOVBload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2)) { break } @@ -7128,15 +6983,13 @@ func rewriteValueARM_OpARMMOVBload_0(v *Value) bool { break } sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(sym == nil && !config.nacl) { break } @@ -7177,14 +7030,13 @@ func rewriteValueARM_OpARMMOVBloadidx_0(v *Value) bool { // cond: // result: (MOVBload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARMMOVBload) v.AuxInt = c v.AddArg(ptr) @@ -7195,14 +7047,13 @@ func rewriteValueARM_OpARMMOVBloadidx_0(v *Value) bool { // cond: // result: (MOVBload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVBload) v.AuxInt = c v.AddArg(ptr) @@ -7272,16 +7123,14 @@ func rewriteValueARM_OpARMMOVBreg_0(v *Value) bool { } func rewriteValueARM_OpARMMOVBstore_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVBstore [off1] {sym} (ADDconst [off2] ptr) val mem) // cond: // result: (MOVBstore [off1+off2] {sym} ptr val mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMADDconst { break @@ -7289,7 +7138,6 @@ func rewriteValueARM_OpARMMOVBstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVBstore) v.AuxInt = off1 + off2 v.Aux = sym @@ -7304,7 +7152,7 @@ func rewriteValueARM_OpARMMOVBstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSUBconst { break @@ -7312,7 +7160,6 @@ func rewriteValueARM_OpARMMOVBstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVBstore) v.AuxInt = off1 - off2 v.Aux = sym @@ -7327,7 +7174,7 @@ func rewriteValueARM_OpARMMOVBstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWaddr { break @@ -7336,7 +7183,6 @@ func rewriteValueARM_OpARMMOVBstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2)) { break } @@ -7354,14 +7200,13 @@ func rewriteValueARM_OpARMMOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVBreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpARMMOVBstore) v.AuxInt = off v.Aux = sym @@ -7376,14 +7221,13 @@ func rewriteValueARM_OpARMMOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVBUreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpARMMOVBstore) v.AuxInt = off v.Aux = sym @@ -7398,14 +7242,13 @@ func rewriteValueARM_OpARMMOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVHreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpARMMOVBstore) v.AuxInt = off v.Aux = sym @@ -7420,14 +7263,13 @@ func rewriteValueARM_OpARMMOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVHUreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpARMMOVBstore) v.AuxInt = off v.Aux = sym @@ -7444,16 +7286,14 @@ func rewriteValueARM_OpARMMOVBstore_0(v *Value) bool { break } sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(sym == nil && !config.nacl) { break } @@ -7471,7 +7311,7 @@ func rewriteValueARM_OpARMMOVBstoreidx_0(v *Value) bool { // cond: // result: (MOVBstore [c] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { @@ -7479,7 +7319,6 @@ func rewriteValueARM_OpARMMOVBstoreidx_0(v *Value) bool { } c := v_1.AuxInt val := v.Args[2] - mem := v.Args[3] v.reset(OpARMMOVBstore) v.AuxInt = c v.AddArg(ptr) @@ -7491,7 +7330,7 @@ func rewriteValueARM_OpARMMOVBstoreidx_0(v *Value) bool { // cond: // result: (MOVBstore [c] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break @@ -7499,7 +7338,6 @@ func rewriteValueARM_OpARMMOVBstoreidx_0(v *Value) bool { c := v_0.AuxInt ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(OpARMMOVBstore) v.AuxInt = c v.AddArg(ptr) @@ -7516,14 +7354,13 @@ func rewriteValueARM_OpARMMOVDload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] v.reset(OpARMMOVDload) v.AuxInt = off1 + off2 v.Aux = sym @@ -7537,14 +7374,13 @@ func rewriteValueARM_OpARMMOVDload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSUBconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] v.reset(OpARMMOVDload) v.AuxInt = off1 - off2 v.Aux = sym @@ -7558,7 +7394,7 @@ func rewriteValueARM_OpARMMOVDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWaddr { break @@ -7566,7 +7402,6 @@ func rewriteValueARM_OpARMMOVDload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2)) { break } @@ -7611,7 +7446,7 @@ func rewriteValueARM_OpARMMOVDstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMADDconst { break @@ -7619,7 +7454,6 @@ func rewriteValueARM_OpARMMOVDstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVDstore) v.AuxInt = off1 + off2 v.Aux = sym @@ -7634,7 +7468,7 @@ func rewriteValueARM_OpARMMOVDstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSUBconst { break @@ -7642,7 +7476,6 @@ func rewriteValueARM_OpARMMOVDstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVDstore) v.AuxInt = off1 - off2 v.Aux = sym @@ -7657,7 +7490,7 @@ func rewriteValueARM_OpARMMOVDstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWaddr { break @@ -7666,7 +7499,6 @@ func rewriteValueARM_OpARMMOVDstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2)) { break } @@ -7687,14 +7519,13 @@ func rewriteValueARM_OpARMMOVFload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] v.reset(OpARMMOVFload) v.AuxInt = off1 + off2 v.Aux = sym @@ -7708,14 +7539,13 @@ func rewriteValueARM_OpARMMOVFload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSUBconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] v.reset(OpARMMOVFload) v.AuxInt = off1 - off2 v.Aux = sym @@ -7729,7 +7559,7 @@ func rewriteValueARM_OpARMMOVFload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWaddr { break @@ -7737,7 +7567,6 @@ func rewriteValueARM_OpARMMOVFload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2)) { break } @@ -7782,7 +7611,7 @@ func rewriteValueARM_OpARMMOVFstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMADDconst { break @@ -7790,7 +7619,6 @@ func rewriteValueARM_OpARMMOVFstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVFstore) v.AuxInt = off1 + off2 v.Aux = sym @@ -7805,7 +7633,7 @@ func rewriteValueARM_OpARMMOVFstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSUBconst { break @@ -7813,7 +7641,6 @@ func rewriteValueARM_OpARMMOVFstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVFstore) v.AuxInt = off1 - off2 v.Aux = sym @@ -7828,7 +7655,7 @@ func rewriteValueARM_OpARMMOVFstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWaddr { break @@ -7837,7 +7664,6 @@ func rewriteValueARM_OpARMMOVFstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2)) { break } @@ -7853,23 +7679,20 @@ func rewriteValueARM_OpARMMOVFstore_0(v *Value) bool { } func rewriteValueARM_OpARMMOVHUload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVHUload [off1] {sym} (ADDconst [off2] ptr) mem) // cond: // result: (MOVHUload [off1+off2] {sym} ptr mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] v.reset(OpARMMOVHUload) v.AuxInt = off1 + off2 v.Aux = sym @@ -7883,14 +7706,13 @@ func rewriteValueARM_OpARMMOVHUload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSUBconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] v.reset(OpARMMOVHUload) v.AuxInt = off1 - off2 v.Aux = sym @@ -7904,7 +7726,7 @@ func rewriteValueARM_OpARMMOVHUload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWaddr { break @@ -7912,7 +7734,6 @@ func rewriteValueARM_OpARMMOVHUload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2)) { break } @@ -7955,15 +7776,13 @@ func rewriteValueARM_OpARMMOVHUload_0(v *Value) bool { break } sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(sym == nil && !config.nacl) { break } @@ -8022,14 +7841,13 @@ func rewriteValueARM_OpARMMOVHUloadidx_0(v *Value) bool { // cond: // result: (MOVHUload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARMMOVHUload) v.AuxInt = c v.AddArg(ptr) @@ -8040,14 +7858,13 @@ func rewriteValueARM_OpARMMOVHUloadidx_0(v *Value) bool { // cond: // result: (MOVHUload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVHUload) v.AuxInt = c v.AddArg(ptr) @@ -8139,23 +7956,20 @@ func rewriteValueARM_OpARMMOVHUreg_0(v *Value) bool { } func rewriteValueARM_OpARMMOVHload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVHload [off1] {sym} (ADDconst [off2] ptr) mem) // cond: // result: (MOVHload [off1+off2] {sym} ptr mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] v.reset(OpARMMOVHload) v.AuxInt = off1 + off2 v.Aux = sym @@ -8169,14 +7983,13 @@ func rewriteValueARM_OpARMMOVHload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSUBconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] v.reset(OpARMMOVHload) v.AuxInt = off1 - off2 v.Aux = sym @@ -8190,7 +8003,7 @@ func rewriteValueARM_OpARMMOVHload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWaddr { break @@ -8198,7 +8011,6 @@ func rewriteValueARM_OpARMMOVHload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2)) { break } @@ -8241,15 +8053,13 @@ func rewriteValueARM_OpARMMOVHload_0(v *Value) bool { break } sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(sym == nil && !config.nacl) { break } @@ -8290,14 +8100,13 @@ func rewriteValueARM_OpARMMOVHloadidx_0(v *Value) bool { // cond: // result: (MOVHload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARMMOVHload) v.AuxInt = c v.AddArg(ptr) @@ -8308,14 +8117,13 @@ func rewriteValueARM_OpARMMOVHloadidx_0(v *Value) bool { // cond: // result: (MOVHload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVHload) v.AuxInt = c v.AddArg(ptr) @@ -8435,16 +8243,14 @@ func rewriteValueARM_OpARMMOVHreg_0(v *Value) bool { } func rewriteValueARM_OpARMMOVHstore_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVHstore [off1] {sym} (ADDconst [off2] ptr) val mem) // cond: // result: (MOVHstore [off1+off2] {sym} ptr val mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMADDconst { break @@ -8452,7 +8258,6 @@ func rewriteValueARM_OpARMMOVHstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVHstore) v.AuxInt = off1 + off2 v.Aux = sym @@ -8467,7 +8272,7 @@ func rewriteValueARM_OpARMMOVHstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSUBconst { break @@ -8475,7 +8280,6 @@ func rewriteValueARM_OpARMMOVHstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVHstore) v.AuxInt = off1 - off2 v.Aux = sym @@ -8490,7 +8294,7 @@ func rewriteValueARM_OpARMMOVHstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWaddr { break @@ -8499,7 +8303,6 @@ func rewriteValueARM_OpARMMOVHstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2)) { break } @@ -8517,14 +8320,13 @@ func rewriteValueARM_OpARMMOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVHreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpARMMOVHstore) v.AuxInt = off v.Aux = sym @@ -8539,14 +8341,13 @@ func rewriteValueARM_OpARMMOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVHUreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpARMMOVHstore) v.AuxInt = off v.Aux = sym @@ -8563,16 +8364,14 @@ func rewriteValueARM_OpARMMOVHstore_0(v *Value) bool { break } sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(sym == nil && !config.nacl) { break } @@ -8590,7 +8389,7 @@ func rewriteValueARM_OpARMMOVHstoreidx_0(v *Value) bool { // cond: // result: (MOVHstore [c] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { @@ -8598,7 +8397,6 @@ func rewriteValueARM_OpARMMOVHstoreidx_0(v *Value) bool { } c := v_1.AuxInt val := v.Args[2] - mem := v.Args[3] v.reset(OpARMMOVHstore) v.AuxInt = c v.AddArg(ptr) @@ -8610,7 +8408,7 @@ func rewriteValueARM_OpARMMOVHstoreidx_0(v *Value) bool { // cond: // result: (MOVHstore [c] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break @@ -8618,7 +8416,6 @@ func rewriteValueARM_OpARMMOVHstoreidx_0(v *Value) bool { c := v_0.AuxInt ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(OpARMMOVHstore) v.AuxInt = c v.AddArg(ptr) @@ -8630,23 +8427,20 @@ func rewriteValueARM_OpARMMOVHstoreidx_0(v *Value) bool { } func rewriteValueARM_OpARMMOVWload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVWload [off1] {sym} (ADDconst [off2] ptr) mem) // cond: // result: (MOVWload [off1+off2] {sym} ptr mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] v.reset(OpARMMOVWload) v.AuxInt = off1 + off2 v.Aux = sym @@ -8660,14 +8454,13 @@ func rewriteValueARM_OpARMMOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSUBconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] v.reset(OpARMMOVWload) v.AuxInt = off1 - off2 v.Aux = sym @@ -8681,7 +8474,7 @@ func rewriteValueARM_OpARMMOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWaddr { break @@ -8689,7 +8482,6 @@ func rewriteValueARM_OpARMMOVWload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2)) { break } @@ -8733,15 +8525,13 @@ func rewriteValueARM_OpARMMOVWload_0(v *Value) bool { break } sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(sym == nil && !config.nacl) { break } @@ -8759,16 +8549,14 @@ func rewriteValueARM_OpARMMOVWload_0(v *Value) bool { break } sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMADDshiftLL { break } c := v_0.AuxInt - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(sym == nil && !config.nacl) { break } @@ -8787,16 +8575,14 @@ func rewriteValueARM_OpARMMOVWload_0(v *Value) bool { break } sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMADDshiftRL { break } c := v_0.AuxInt - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(sym == nil && !config.nacl) { break } @@ -8815,16 +8601,14 @@ func rewriteValueARM_OpARMMOVWload_0(v *Value) bool { break } sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMADDshiftRA { break } c := v_0.AuxInt - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(sym == nil && !config.nacl) { break } @@ -8885,14 +8669,13 @@ func rewriteValueARM_OpARMMOVWloadidx_0(v *Value) bool { // cond: // result: (MOVWload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARMMOVWload) v.AuxInt = c v.AddArg(ptr) @@ -8903,14 +8686,13 @@ func rewriteValueARM_OpARMMOVWloadidx_0(v *Value) bool { // cond: // result: (MOVWload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVWload) v.AuxInt = c v.AddArg(ptr) @@ -8921,7 +8703,7 @@ func rewriteValueARM_OpARMMOVWloadidx_0(v *Value) bool { // cond: // result: (MOVWloadshiftLL ptr idx [c] mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSLLconst { @@ -8929,7 +8711,6 @@ func rewriteValueARM_OpARMMOVWloadidx_0(v *Value) bool { } c := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] v.reset(OpARMMOVWloadshiftLL) v.AuxInt = c v.AddArg(ptr) @@ -8941,7 +8722,7 @@ func rewriteValueARM_OpARMMOVWloadidx_0(v *Value) bool { // cond: // result: (MOVWloadshiftLL ptr idx [c] mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSLLconst { break @@ -8949,7 +8730,6 @@ func rewriteValueARM_OpARMMOVWloadidx_0(v *Value) bool { c := v_0.AuxInt idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVWloadshiftLL) v.AuxInt = c v.AddArg(ptr) @@ -8961,7 +8741,7 @@ func rewriteValueARM_OpARMMOVWloadidx_0(v *Value) bool { // cond: // result: (MOVWloadshiftRL ptr idx [c] mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSRLconst { @@ -8969,7 +8749,6 @@ func rewriteValueARM_OpARMMOVWloadidx_0(v *Value) bool { } c := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] v.reset(OpARMMOVWloadshiftRL) v.AuxInt = c v.AddArg(ptr) @@ -8981,7 +8760,7 @@ func rewriteValueARM_OpARMMOVWloadidx_0(v *Value) bool { // cond: // result: (MOVWloadshiftRL ptr idx [c] mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSRLconst { break @@ -8989,7 +8768,6 @@ func rewriteValueARM_OpARMMOVWloadidx_0(v *Value) bool { c := v_0.AuxInt idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVWloadshiftRL) v.AuxInt = c v.AddArg(ptr) @@ -9001,7 +8779,7 @@ func rewriteValueARM_OpARMMOVWloadidx_0(v *Value) bool { // cond: // result: (MOVWloadshiftRA ptr idx [c] mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSRAconst { @@ -9009,7 +8787,6 @@ func rewriteValueARM_OpARMMOVWloadidx_0(v *Value) bool { } c := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] v.reset(OpARMMOVWloadshiftRA) v.AuxInt = c v.AddArg(ptr) @@ -9021,7 +8798,7 @@ func rewriteValueARM_OpARMMOVWloadidx_0(v *Value) bool { // cond: // result: (MOVWloadshiftRA ptr idx [c] mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSRAconst { break @@ -9029,7 +8806,6 @@ func rewriteValueARM_OpARMMOVWloadidx_0(v *Value) bool { c := v_0.AuxInt idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVWloadshiftRA) v.AuxInt = c v.AddArg(ptr) @@ -9072,14 +8848,13 @@ func rewriteValueARM_OpARMMOVWloadshiftLL_0(v *Value) bool { // result: (MOVWload [int64(uint32(c)<>uint64(d))] ptr mem) for { d := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARMMOVWload) v.AuxInt = int64(int32(c) >> uint64(d)) v.AddArg(ptr) @@ -9170,14 +8944,13 @@ func rewriteValueARM_OpARMMOVWloadshiftRL_0(v *Value) bool { // result: (MOVWload [int64(uint32(c)>>uint64(d))] ptr mem) for { d := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARMMOVWload) v.AuxInt = int64(uint32(c) >> uint64(d)) v.AddArg(ptr) @@ -9216,16 +8989,14 @@ func rewriteValueARM_OpARMMOVWreg_0(v *Value) bool { } func rewriteValueARM_OpARMMOVWstore_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVWstore [off1] {sym} (ADDconst [off2] ptr) val mem) // cond: // result: (MOVWstore [off1+off2] {sym} ptr val mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMADDconst { break @@ -9233,7 +9004,6 @@ func rewriteValueARM_OpARMMOVWstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVWstore) v.AuxInt = off1 + off2 v.Aux = sym @@ -9248,7 +9018,7 @@ func rewriteValueARM_OpARMMOVWstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSUBconst { break @@ -9256,7 +9026,6 @@ func rewriteValueARM_OpARMMOVWstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVWstore) v.AuxInt = off1 - off2 v.Aux = sym @@ -9271,7 +9040,7 @@ func rewriteValueARM_OpARMMOVWstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWaddr { break @@ -9280,7 +9049,6 @@ func rewriteValueARM_OpARMMOVWstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2)) { break } @@ -9300,16 +9068,14 @@ func rewriteValueARM_OpARMMOVWstore_0(v *Value) bool { break } sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(sym == nil && !config.nacl) { break } @@ -9328,17 +9094,15 @@ func rewriteValueARM_OpARMMOVWstore_0(v *Value) bool { break } sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMADDshiftLL { break } c := v_0.AuxInt - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(sym == nil && !config.nacl) { break } @@ -9358,17 +9122,15 @@ func rewriteValueARM_OpARMMOVWstore_0(v *Value) bool { break } sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMADDshiftRL { break } c := v_0.AuxInt - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(sym == nil && !config.nacl) { break } @@ -9388,17 +9150,15 @@ func rewriteValueARM_OpARMMOVWstore_0(v *Value) bool { break } sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMADDshiftRA { break } c := v_0.AuxInt - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(sym == nil && !config.nacl) { break } @@ -9417,7 +9177,7 @@ func rewriteValueARM_OpARMMOVWstoreidx_0(v *Value) bool { // cond: // result: (MOVWstore [c] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { @@ -9425,7 +9185,6 @@ func rewriteValueARM_OpARMMOVWstoreidx_0(v *Value) bool { } c := v_1.AuxInt val := v.Args[2] - mem := v.Args[3] v.reset(OpARMMOVWstore) v.AuxInt = c v.AddArg(ptr) @@ -9437,7 +9196,7 @@ func rewriteValueARM_OpARMMOVWstoreidx_0(v *Value) bool { // cond: // result: (MOVWstore [c] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break @@ -9445,7 +9204,6 @@ func rewriteValueARM_OpARMMOVWstoreidx_0(v *Value) bool { c := v_0.AuxInt ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(OpARMMOVWstore) v.AuxInt = c v.AddArg(ptr) @@ -9457,7 +9215,7 @@ func rewriteValueARM_OpARMMOVWstoreidx_0(v *Value) bool { // cond: // result: (MOVWstoreshiftLL ptr idx [c] val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSLLconst { @@ -9466,7 +9224,6 @@ func rewriteValueARM_OpARMMOVWstoreidx_0(v *Value) bool { c := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(OpARMMOVWstoreshiftLL) v.AuxInt = c v.AddArg(ptr) @@ -9479,7 +9236,7 @@ func rewriteValueARM_OpARMMOVWstoreidx_0(v *Value) bool { // cond: // result: (MOVWstoreshiftLL ptr idx [c] val mem) for { - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARMSLLconst { break @@ -9488,7 +9245,6 @@ func rewriteValueARM_OpARMMOVWstoreidx_0(v *Value) bool { idx := v_0.Args[0] ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(OpARMMOVWstoreshiftLL) v.AuxInt = c v.AddArg(ptr) @@ -9501,7 +9257,7 @@ func rewriteValueARM_OpARMMOVWstoreidx_0(v *Value) bool { // cond: // result: (MOVWstoreshiftRL ptr idx [c] val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSRLconst { @@ -9510,7 +9266,6 @@ func rewriteValueARM_OpARMMOVWstoreidx_0(v *Value) bool { c := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(OpARMMOVWstoreshiftRL) v.AuxInt = c v.AddArg(ptr) @@ -9523,7 +9278,7 @@ func rewriteValueARM_OpARMMOVWstoreidx_0(v *Value) bool { // cond: // result: (MOVWstoreshiftRL ptr idx [c] val mem) for { - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARMSRLconst { break @@ -9532,7 +9287,6 @@ func rewriteValueARM_OpARMMOVWstoreidx_0(v *Value) bool { idx := v_0.Args[0] ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(OpARMMOVWstoreshiftRL) v.AuxInt = c v.AddArg(ptr) @@ -9545,7 +9299,7 @@ func rewriteValueARM_OpARMMOVWstoreidx_0(v *Value) bool { // cond: // result: (MOVWstoreshiftRA ptr idx [c] val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSRAconst { @@ -9554,7 +9308,6 @@ func rewriteValueARM_OpARMMOVWstoreidx_0(v *Value) bool { c := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(OpARMMOVWstoreshiftRA) v.AuxInt = c v.AddArg(ptr) @@ -9567,7 +9320,7 @@ func rewriteValueARM_OpARMMOVWstoreidx_0(v *Value) bool { // cond: // result: (MOVWstoreshiftRA ptr idx [c] val mem) for { - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARMSRAconst { break @@ -9576,7 +9329,6 @@ func rewriteValueARM_OpARMMOVWstoreidx_0(v *Value) bool { idx := v_0.Args[0] ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(OpARMMOVWstoreshiftRA) v.AuxInt = c v.AddArg(ptr) @@ -9593,7 +9345,7 @@ func rewriteValueARM_OpARMMOVWstoreshiftLL_0(v *Value) bool { // result: (MOVWstore [int64(uint32(c)<>uint64(d))] ptr val mem) for { d := v.AuxInt - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { @@ -9625,7 +9376,6 @@ func rewriteValueARM_OpARMMOVWstoreshiftRA_0(v *Value) bool { } c := v_1.AuxInt val := v.Args[2] - mem := v.Args[3] v.reset(OpARMMOVWstore) v.AuxInt = int64(int32(c) >> uint64(d)) v.AddArg(ptr) @@ -9641,7 +9391,7 @@ func rewriteValueARM_OpARMMOVWstoreshiftRL_0(v *Value) bool { // result: (MOVWstore [int64(uint32(c)>>uint64(d))] ptr val mem) for { d := v.AuxInt - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { @@ -9649,7 +9399,6 @@ func rewriteValueARM_OpARMMOVWstoreshiftRL_0(v *Value) bool { } c := v_1.AuxInt val := v.Args[2] - mem := v.Args[3] v.reset(OpARMMOVWstore) v.AuxInt = int64(uint32(c) >> uint64(d)) v.AddArg(ptr) @@ -9683,13 +9432,12 @@ func rewriteValueARM_OpARMMUL_0(v *Value) bool { // cond: int32(c) == -1 // result: (RSBconst [0] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] if !(int32(c) == -1) { break } @@ -9752,7 +9500,7 @@ func rewriteValueARM_OpARMMUL_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break @@ -9760,7 +9508,6 @@ func rewriteValueARM_OpARMMUL_0(v *Value) bool { if v_0.AuxInt != 1 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -9789,13 +9536,12 @@ func rewriteValueARM_OpARMMUL_0(v *Value) bool { // cond: isPowerOfTwo(c) // result: (SLLconst [log2(c)] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isPowerOfTwo(c)) { break } @@ -9828,13 +9574,12 @@ func rewriteValueARM_OpARMMUL_0(v *Value) bool { // cond: isPowerOfTwo(c-1) && int32(c) >= 3 // result: (ADDshiftLL x x [log2(c-1)]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isPowerOfTwo(c-1) && int32(c) >= 3) { break } @@ -9848,7 +9593,6 @@ func rewriteValueARM_OpARMMUL_0(v *Value) bool { } func rewriteValueARM_OpARMMUL_10(v *Value) bool { b := v.Block - _ = b // match: (MUL x (MOVWconst [c])) // cond: isPowerOfTwo(c+1) && int32(c) >= 7 // result: (RSBshiftLL x x [log2(c+1)]) @@ -9873,13 +9617,12 @@ func rewriteValueARM_OpARMMUL_10(v *Value) bool { // cond: isPowerOfTwo(c+1) && int32(c) >= 7 // result: (RSBshiftLL x x [log2(c+1)]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isPowerOfTwo(c+1) && int32(c) >= 7) { break } @@ -9916,13 +9659,12 @@ func rewriteValueARM_OpARMMUL_10(v *Value) bool { // cond: c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c) // result: (SLLconst [log2(c/3)] (ADDshiftLL x x [1])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] if !(c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c)) { break } @@ -9962,13 +9704,12 @@ func rewriteValueARM_OpARMMUL_10(v *Value) bool { // cond: c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c) // result: (SLLconst [log2(c/5)] (ADDshiftLL x x [2])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] if !(c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c)) { break } @@ -10008,13 +9749,12 @@ func rewriteValueARM_OpARMMUL_10(v *Value) bool { // cond: c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c) // result: (SLLconst [log2(c/7)] (RSBshiftLL x x [3])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] if !(c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c)) { break } @@ -10054,13 +9794,12 @@ func rewriteValueARM_OpARMMUL_10(v *Value) bool { // cond: c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c) // result: (SLLconst [log2(c/9)] (ADDshiftLL x x [3])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] if !(c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c)) { break } @@ -10118,19 +9857,17 @@ func rewriteValueARM_OpARMMUL_20(v *Value) bool { } func rewriteValueARM_OpARMMULA_0(v *Value) bool { b := v.Block - _ = b // match: (MULA x (MOVWconst [c]) a) // cond: int32(c) == -1 // result: (SUB a x) for { - _ = v.Args[2] + a := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - a := v.Args[2] if !(int32(c) == -1) { break } @@ -10143,7 +9880,7 @@ func rewriteValueARM_OpARMMULA_0(v *Value) bool { // cond: // result: a for { - _ = v.Args[2] + a := v.Args[2] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break @@ -10151,7 +9888,6 @@ func rewriteValueARM_OpARMMULA_0(v *Value) bool { if v_1.AuxInt != 0 { break } - a := v.Args[2] v.reset(OpCopy) v.Type = a.Type v.AddArg(a) @@ -10161,7 +9897,7 @@ func rewriteValueARM_OpARMMULA_0(v *Value) bool { // cond: // result: (ADD x a) for { - _ = v.Args[2] + a := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { @@ -10170,7 +9906,6 @@ func rewriteValueARM_OpARMMULA_0(v *Value) bool { if v_1.AuxInt != 1 { break } - a := v.Args[2] v.reset(OpARMADD) v.AddArg(x) v.AddArg(a) @@ -10180,14 +9915,13 @@ func rewriteValueARM_OpARMMULA_0(v *Value) bool { // cond: isPowerOfTwo(c) // result: (ADD (SLLconst [log2(c)] x) a) for { - _ = v.Args[2] + a := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - a := v.Args[2] if !(isPowerOfTwo(c)) { break } @@ -10203,14 +9937,13 @@ func rewriteValueARM_OpARMMULA_0(v *Value) bool { // cond: isPowerOfTwo(c-1) && int32(c) >= 3 // result: (ADD (ADDshiftLL x x [log2(c-1)]) a) for { - _ = v.Args[2] + a := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - a := v.Args[2] if !(isPowerOfTwo(c-1) && int32(c) >= 3) { break } @@ -10227,14 +9960,13 @@ func rewriteValueARM_OpARMMULA_0(v *Value) bool { // cond: isPowerOfTwo(c+1) && int32(c) >= 7 // result: (ADD (RSBshiftLL x x [log2(c+1)]) a) for { - _ = v.Args[2] + a := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - a := v.Args[2] if !(isPowerOfTwo(c+1) && int32(c) >= 7) { break } @@ -10251,14 +9983,13 @@ func rewriteValueARM_OpARMMULA_0(v *Value) bool { // cond: c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c) // result: (ADD (SLLconst [log2(c/3)] (ADDshiftLL x x [1])) a) for { - _ = v.Args[2] + a := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - a := v.Args[2] if !(c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c)) { break } @@ -10278,14 +10009,13 @@ func rewriteValueARM_OpARMMULA_0(v *Value) bool { // cond: c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c) // result: (ADD (SLLconst [log2(c/5)] (ADDshiftLL x x [2])) a) for { - _ = v.Args[2] + a := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - a := v.Args[2] if !(c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c)) { break } @@ -10305,14 +10035,13 @@ func rewriteValueARM_OpARMMULA_0(v *Value) bool { // cond: c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c) // result: (ADD (SLLconst [log2(c/7)] (RSBshiftLL x x [3])) a) for { - _ = v.Args[2] + a := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - a := v.Args[2] if !(c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c)) { break } @@ -10332,14 +10061,13 @@ func rewriteValueARM_OpARMMULA_0(v *Value) bool { // cond: c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c) // result: (ADD (SLLconst [log2(c/9)] (ADDshiftLL x x [3])) a) for { - _ = v.Args[2] + a := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - a := v.Args[2] if !(c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c)) { break } @@ -10359,19 +10087,17 @@ func rewriteValueARM_OpARMMULA_0(v *Value) bool { } func rewriteValueARM_OpARMMULA_10(v *Value) bool { b := v.Block - _ = b // match: (MULA (MOVWconst [c]) x a) // cond: int32(c) == -1 // result: (SUB a x) for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - a := v.Args[2] if !(int32(c) == -1) { break } @@ -10384,7 +10110,7 @@ func rewriteValueARM_OpARMMULA_10(v *Value) bool { // cond: // result: a for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break @@ -10392,7 +10118,6 @@ func rewriteValueARM_OpARMMULA_10(v *Value) bool { if v_0.AuxInt != 0 { break } - a := v.Args[2] v.reset(OpCopy) v.Type = a.Type v.AddArg(a) @@ -10402,7 +10127,7 @@ func rewriteValueARM_OpARMMULA_10(v *Value) bool { // cond: // result: (ADD x a) for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break @@ -10411,7 +10136,6 @@ func rewriteValueARM_OpARMMULA_10(v *Value) bool { break } x := v.Args[1] - a := v.Args[2] v.reset(OpARMADD) v.AddArg(x) v.AddArg(a) @@ -10421,14 +10145,13 @@ func rewriteValueARM_OpARMMULA_10(v *Value) bool { // cond: isPowerOfTwo(c) // result: (ADD (SLLconst [log2(c)] x) a) for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - a := v.Args[2] if !(isPowerOfTwo(c)) { break } @@ -10444,14 +10167,13 @@ func rewriteValueARM_OpARMMULA_10(v *Value) bool { // cond: isPowerOfTwo(c-1) && int32(c) >= 3 // result: (ADD (ADDshiftLL x x [log2(c-1)]) a) for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - a := v.Args[2] if !(isPowerOfTwo(c-1) && int32(c) >= 3) { break } @@ -10468,14 +10190,13 @@ func rewriteValueARM_OpARMMULA_10(v *Value) bool { // cond: isPowerOfTwo(c+1) && int32(c) >= 7 // result: (ADD (RSBshiftLL x x [log2(c+1)]) a) for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - a := v.Args[2] if !(isPowerOfTwo(c+1) && int32(c) >= 7) { break } @@ -10492,14 +10213,13 @@ func rewriteValueARM_OpARMMULA_10(v *Value) bool { // cond: c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c) // result: (ADD (SLLconst [log2(c/3)] (ADDshiftLL x x [1])) a) for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - a := v.Args[2] if !(c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c)) { break } @@ -10519,14 +10239,13 @@ func rewriteValueARM_OpARMMULA_10(v *Value) bool { // cond: c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c) // result: (ADD (SLLconst [log2(c/5)] (ADDshiftLL x x [2])) a) for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - a := v.Args[2] if !(c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c)) { break } @@ -10546,14 +10265,13 @@ func rewriteValueARM_OpARMMULA_10(v *Value) bool { // cond: c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c) // result: (ADD (SLLconst [log2(c/7)] (RSBshiftLL x x [3])) a) for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - a := v.Args[2] if !(c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c)) { break } @@ -10573,14 +10291,13 @@ func rewriteValueARM_OpARMMULA_10(v *Value) bool { // cond: c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c) // result: (ADD (SLLconst [log2(c/9)] (ADDshiftLL x x [3])) a) for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - a := v.Args[2] if !(c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c)) { break } @@ -10603,7 +10320,7 @@ func rewriteValueARM_OpARMMULA_20(v *Value) bool { // cond: // result: (ADDconst [int64(int32(c*d))] a) for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break @@ -10614,7 +10331,6 @@ func rewriteValueARM_OpARMMULA_20(v *Value) bool { break } d := v_1.AuxInt - a := v.Args[2] v.reset(OpARMADDconst) v.AuxInt = int64(int32(c * d)) v.AddArg(a) @@ -10627,13 +10343,12 @@ func rewriteValueARM_OpARMMULD_0(v *Value) bool { // cond: objabi.GOARM >= 6 // result: (NMULD x y) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMNEGD { break } x := v_0.Args[0] - y := v.Args[1] if !(objabi.GOARM >= 6) { break } @@ -10668,13 +10383,12 @@ func rewriteValueARM_OpARMMULF_0(v *Value) bool { // cond: objabi.GOARM >= 6 // result: (NMULF x y) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMNEGF { break } x := v_0.Args[0] - y := v.Args[1] if !(objabi.GOARM >= 6) { break } @@ -10706,19 +10420,17 @@ func rewriteValueARM_OpARMMULF_0(v *Value) bool { } func rewriteValueARM_OpARMMULS_0(v *Value) bool { b := v.Block - _ = b // match: (MULS x (MOVWconst [c]) a) // cond: int32(c) == -1 // result: (ADD a x) for { - _ = v.Args[2] + a := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - a := v.Args[2] if !(int32(c) == -1) { break } @@ -10731,7 +10443,7 @@ func rewriteValueARM_OpARMMULS_0(v *Value) bool { // cond: // result: a for { - _ = v.Args[2] + a := v.Args[2] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break @@ -10739,7 +10451,6 @@ func rewriteValueARM_OpARMMULS_0(v *Value) bool { if v_1.AuxInt != 0 { break } - a := v.Args[2] v.reset(OpCopy) v.Type = a.Type v.AddArg(a) @@ -10749,7 +10460,7 @@ func rewriteValueARM_OpARMMULS_0(v *Value) bool { // cond: // result: (RSB x a) for { - _ = v.Args[2] + a := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { @@ -10758,7 +10469,6 @@ func rewriteValueARM_OpARMMULS_0(v *Value) bool { if v_1.AuxInt != 1 { break } - a := v.Args[2] v.reset(OpARMRSB) v.AddArg(x) v.AddArg(a) @@ -10768,14 +10478,13 @@ func rewriteValueARM_OpARMMULS_0(v *Value) bool { // cond: isPowerOfTwo(c) // result: (RSB (SLLconst [log2(c)] x) a) for { - _ = v.Args[2] + a := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - a := v.Args[2] if !(isPowerOfTwo(c)) { break } @@ -10791,14 +10500,13 @@ func rewriteValueARM_OpARMMULS_0(v *Value) bool { // cond: isPowerOfTwo(c-1) && int32(c) >= 3 // result: (RSB (ADDshiftLL x x [log2(c-1)]) a) for { - _ = v.Args[2] + a := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - a := v.Args[2] if !(isPowerOfTwo(c-1) && int32(c) >= 3) { break } @@ -10815,14 +10523,13 @@ func rewriteValueARM_OpARMMULS_0(v *Value) bool { // cond: isPowerOfTwo(c+1) && int32(c) >= 7 // result: (RSB (RSBshiftLL x x [log2(c+1)]) a) for { - _ = v.Args[2] + a := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - a := v.Args[2] if !(isPowerOfTwo(c+1) && int32(c) >= 7) { break } @@ -10839,14 +10546,13 @@ func rewriteValueARM_OpARMMULS_0(v *Value) bool { // cond: c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c) // result: (RSB (SLLconst [log2(c/3)] (ADDshiftLL x x [1])) a) for { - _ = v.Args[2] + a := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - a := v.Args[2] if !(c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c)) { break } @@ -10866,14 +10572,13 @@ func rewriteValueARM_OpARMMULS_0(v *Value) bool { // cond: c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c) // result: (RSB (SLLconst [log2(c/5)] (ADDshiftLL x x [2])) a) for { - _ = v.Args[2] + a := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - a := v.Args[2] if !(c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c)) { break } @@ -10893,14 +10598,13 @@ func rewriteValueARM_OpARMMULS_0(v *Value) bool { // cond: c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c) // result: (RSB (SLLconst [log2(c/7)] (RSBshiftLL x x [3])) a) for { - _ = v.Args[2] + a := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - a := v.Args[2] if !(c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c)) { break } @@ -10920,14 +10624,13 @@ func rewriteValueARM_OpARMMULS_0(v *Value) bool { // cond: c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c) // result: (RSB (SLLconst [log2(c/9)] (ADDshiftLL x x [3])) a) for { - _ = v.Args[2] + a := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - a := v.Args[2] if !(c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c)) { break } @@ -10947,19 +10650,17 @@ func rewriteValueARM_OpARMMULS_0(v *Value) bool { } func rewriteValueARM_OpARMMULS_10(v *Value) bool { b := v.Block - _ = b // match: (MULS (MOVWconst [c]) x a) // cond: int32(c) == -1 // result: (ADD a x) for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - a := v.Args[2] if !(int32(c) == -1) { break } @@ -10972,7 +10673,7 @@ func rewriteValueARM_OpARMMULS_10(v *Value) bool { // cond: // result: a for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break @@ -10980,7 +10681,6 @@ func rewriteValueARM_OpARMMULS_10(v *Value) bool { if v_0.AuxInt != 0 { break } - a := v.Args[2] v.reset(OpCopy) v.Type = a.Type v.AddArg(a) @@ -10990,7 +10690,7 @@ func rewriteValueARM_OpARMMULS_10(v *Value) bool { // cond: // result: (RSB x a) for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break @@ -10999,7 +10699,6 @@ func rewriteValueARM_OpARMMULS_10(v *Value) bool { break } x := v.Args[1] - a := v.Args[2] v.reset(OpARMRSB) v.AddArg(x) v.AddArg(a) @@ -11009,14 +10708,13 @@ func rewriteValueARM_OpARMMULS_10(v *Value) bool { // cond: isPowerOfTwo(c) // result: (RSB (SLLconst [log2(c)] x) a) for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - a := v.Args[2] if !(isPowerOfTwo(c)) { break } @@ -11032,14 +10730,13 @@ func rewriteValueARM_OpARMMULS_10(v *Value) bool { // cond: isPowerOfTwo(c-1) && int32(c) >= 3 // result: (RSB (ADDshiftLL x x [log2(c-1)]) a) for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - a := v.Args[2] if !(isPowerOfTwo(c-1) && int32(c) >= 3) { break } @@ -11056,14 +10753,13 @@ func rewriteValueARM_OpARMMULS_10(v *Value) bool { // cond: isPowerOfTwo(c+1) && int32(c) >= 7 // result: (RSB (RSBshiftLL x x [log2(c+1)]) a) for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - a := v.Args[2] if !(isPowerOfTwo(c+1) && int32(c) >= 7) { break } @@ -11080,14 +10776,13 @@ func rewriteValueARM_OpARMMULS_10(v *Value) bool { // cond: c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c) // result: (RSB (SLLconst [log2(c/3)] (ADDshiftLL x x [1])) a) for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - a := v.Args[2] if !(c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c)) { break } @@ -11107,14 +10802,13 @@ func rewriteValueARM_OpARMMULS_10(v *Value) bool { // cond: c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c) // result: (RSB (SLLconst [log2(c/5)] (ADDshiftLL x x [2])) a) for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - a := v.Args[2] if !(c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c)) { break } @@ -11134,14 +10828,13 @@ func rewriteValueARM_OpARMMULS_10(v *Value) bool { // cond: c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c) // result: (RSB (SLLconst [log2(c/7)] (RSBshiftLL x x [3])) a) for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - a := v.Args[2] if !(c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c)) { break } @@ -11161,14 +10854,13 @@ func rewriteValueARM_OpARMMULS_10(v *Value) bool { // cond: c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c) // result: (RSB (SLLconst [log2(c/9)] (ADDshiftLL x x [3])) a) for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - a := v.Args[2] if !(c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c)) { break } @@ -11191,7 +10883,7 @@ func rewriteValueARM_OpARMMULS_20(v *Value) bool { // cond: // result: (SUBconst [int64(int32(c*d))] a) for { - _ = v.Args[2] + a := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break @@ -11202,7 +10894,6 @@ func rewriteValueARM_OpARMMULS_20(v *Value) bool { break } d := v_1.AuxInt - a := v.Args[2] v.reset(OpARMSUBconst) v.AuxInt = int64(int32(c * d)) v.AddArg(a) @@ -11277,9 +10968,8 @@ func rewriteValueARM_OpARMMVN_0(v *Value) bool { if v_0.Op != OpARMSLL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpARMMVNshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -11293,9 +10983,8 @@ func rewriteValueARM_OpARMMVN_0(v *Value) bool { if v_0.Op != OpARMSRL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpARMMVNshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -11309,9 +10998,8 @@ func rewriteValueARM_OpARMMVN_0(v *Value) bool { if v_0.Op != OpARMSRA { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpARMMVNshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -11436,9 +11124,8 @@ func rewriteValueARM_OpARMNEGD_0(v *Value) bool { if v_0.Op != OpARMMULD { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] if !(objabi.GOARM >= 6) { break } @@ -11458,9 +11145,8 @@ func rewriteValueARM_OpARMNEGF_0(v *Value) bool { if v_0.Op != OpARMMULF { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] if !(objabi.GOARM >= 6) { break } @@ -11476,13 +11162,12 @@ func rewriteValueARM_OpARMNMULD_0(v *Value) bool { // cond: // result: (MULD x y) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMNEGD { break } x := v_0.Args[0] - y := v.Args[1] v.reset(OpARMMULD) v.AddArg(x) v.AddArg(y) @@ -11511,13 +11196,12 @@ func rewriteValueARM_OpARMNMULF_0(v *Value) bool { // cond: // result: (MULF x y) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMNEGF { break } x := v_0.Args[0] - y := v.Args[1] v.reset(OpARMMULF) v.AddArg(x) v.AddArg(y) @@ -11638,13 +11322,12 @@ func rewriteValueARM_OpARMOR_0(v *Value) bool { // cond: // result: (ORconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMORconst) v.AuxInt = c v.AddArg(x) @@ -11672,14 +11355,13 @@ func rewriteValueARM_OpARMOR_0(v *Value) bool { // cond: // result: (ORshiftLL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMORshiftLL) v.AuxInt = c v.AddArg(x) @@ -11708,14 +11390,13 @@ func rewriteValueARM_OpARMOR_0(v *Value) bool { // cond: // result: (ORshiftRL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMORshiftRL) v.AuxInt = c v.AddArg(x) @@ -11744,14 +11425,13 @@ func rewriteValueARM_OpARMOR_0(v *Value) bool { // cond: // result: (ORshiftRA x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRAconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMORshiftRA) v.AuxInt = c v.AddArg(x) @@ -11768,9 +11448,8 @@ func rewriteValueARM_OpARMOR_0(v *Value) bool { if v_1.Op != OpARMSLL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMORshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -11781,15 +11460,13 @@ func rewriteValueARM_OpARMOR_0(v *Value) bool { // cond: // result: (ORshiftLLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMORshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -11809,9 +11486,8 @@ func rewriteValueARM_OpARMOR_10(v *Value) bool { if v_1.Op != OpARMSRL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMORshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -11822,15 +11498,13 @@ func rewriteValueARM_OpARMOR_10(v *Value) bool { // cond: // result: (ORshiftRLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMORshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -11847,9 +11521,8 @@ func rewriteValueARM_OpARMOR_10(v *Value) bool { if v_1.Op != OpARMSRA { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMORshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -11860,15 +11533,13 @@ func rewriteValueARM_OpARMOR_10(v *Value) bool { // cond: // result: (ORshiftRAreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRA { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMORshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -11879,9 +11550,8 @@ func rewriteValueARM_OpARMOR_10(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -11951,19 +11621,18 @@ func rewriteValueARM_OpARMORconst_0(v *Value) bool { } func rewriteValueARM_OpARMORshiftLL_0(v *Value) bool { b := v.Block - _ = b + typ := &b.Func.Config.Types // match: (ORshiftLL (MOVWconst [c]) x [d]) // cond: // result: (ORconst [c] (SLLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMORconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type) @@ -11994,7 +11663,7 @@ func rewriteValueARM_OpARMORshiftLL_0(v *Value) bool { // result: (SRRconst [32-c] x) for { c := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRLconst { break @@ -12002,8 +11671,7 @@ func rewriteValueARM_OpARMORshiftLL_0(v *Value) bool { if v_0.AuxInt != 32-c { break } - x := v_0.Args[0] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpARMSRRconst) @@ -12011,6 +11679,72 @@ func rewriteValueARM_OpARMORshiftLL_0(v *Value) bool { v.AddArg(x) return true } + // match: (ORshiftLL [8] (BFXU [armBFAuxInt(8, 8)] x) x) + // cond: + // result: (REV16 x) + for { + if v.Type != typ.UInt16 { + break + } + if v.AuxInt != 8 { + break + } + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpARMBFXU { + break + } + if v_0.Type != typ.UInt16 { + break + } + if v_0.AuxInt != armBFAuxInt(8, 8) { + break + } + if x != v_0.Args[0] { + break + } + v.reset(OpARMREV16) + v.AddArg(x) + return true + } + // match: (ORshiftLL [8] (SRLconst [24] (SLLconst [16] x)) x) + // cond: objabi.GOARM>=6 + // result: (REV16 x) + for { + if v.Type != typ.UInt16 { + break + } + if v.AuxInt != 8 { + break + } + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpARMSRLconst { + break + } + if v_0.Type != typ.UInt16 { + break + } + if v_0.AuxInt != 24 { + break + } + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpARMSLLconst { + break + } + if v_0_0.AuxInt != 16 { + break + } + if x != v_0_0.Args[0] { + break + } + if !(objabi.GOARM >= 6) { + break + } + v.reset(OpARMREV16) + v.AddArg(x) + return true + } // match: (ORshiftLL x y:(SLLconst x [c]) [d]) // cond: c==d // result: y @@ -12038,19 +11772,17 @@ func rewriteValueARM_OpARMORshiftLL_0(v *Value) bool { } func rewriteValueARM_OpARMORshiftLLreg_0(v *Value) bool { b := v.Block - _ = b // match: (ORshiftLLreg (MOVWconst [c]) x y) // cond: // result: (ORconst [c] (SLL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMORconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type) @@ -12081,19 +11813,17 @@ func rewriteValueARM_OpARMORshiftLLreg_0(v *Value) bool { } func rewriteValueARM_OpARMORshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (ORshiftRA (MOVWconst [c]) x [d]) // cond: // result: (ORconst [c] (SRAconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMORconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type) @@ -12146,19 +11876,17 @@ func rewriteValueARM_OpARMORshiftRA_0(v *Value) bool { } func rewriteValueARM_OpARMORshiftRAreg_0(v *Value) bool { b := v.Block - _ = b // match: (ORshiftRAreg (MOVWconst [c]) x y) // cond: // result: (ORconst [c] (SRA x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMORconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type) @@ -12189,19 +11917,17 @@ func rewriteValueARM_OpARMORshiftRAreg_0(v *Value) bool { } func rewriteValueARM_OpARMORshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (ORshiftRL (MOVWconst [c]) x [d]) // cond: // result: (ORconst [c] (SRLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMORconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type) @@ -12232,7 +11958,7 @@ func rewriteValueARM_OpARMORshiftRL_0(v *Value) bool { // result: (SRRconst [ c] x) for { c := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLLconst { break @@ -12240,8 +11966,7 @@ func rewriteValueARM_OpARMORshiftRL_0(v *Value) bool { if v_0.AuxInt != 32-c { break } - x := v_0.Args[0] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpARMSRRconst) @@ -12276,19 +12001,17 @@ func rewriteValueARM_OpARMORshiftRL_0(v *Value) bool { } func rewriteValueARM_OpARMORshiftRLreg_0(v *Value) bool { b := v.Block - _ = b // match: (ORshiftRLreg (MOVWconst [c]) x y) // cond: // result: (ORconst [c] (SRL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMORconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type) @@ -12322,13 +12045,12 @@ func rewriteValueARM_OpARMRSB_0(v *Value) bool { // cond: // result: (SUBconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMSUBconst) v.AuxInt = c v.AddArg(x) @@ -12372,14 +12094,13 @@ func rewriteValueARM_OpARMRSB_0(v *Value) bool { // cond: // result: (SUBshiftLL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMSUBshiftLL) v.AuxInt = c v.AddArg(x) @@ -12408,14 +12129,13 @@ func rewriteValueARM_OpARMRSB_0(v *Value) bool { // cond: // result: (SUBshiftRL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMSUBshiftRL) v.AuxInt = c v.AddArg(x) @@ -12444,14 +12164,13 @@ func rewriteValueARM_OpARMRSB_0(v *Value) bool { // cond: // result: (SUBshiftRA x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRAconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMSUBshiftRA) v.AuxInt = c v.AddArg(x) @@ -12468,9 +12187,8 @@ func rewriteValueARM_OpARMRSB_0(v *Value) bool { if v_1.Op != OpARMSLL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMRSBshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -12481,15 +12199,13 @@ func rewriteValueARM_OpARMRSB_0(v *Value) bool { // cond: // result: (SUBshiftLLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMSUBshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -12509,9 +12225,8 @@ func rewriteValueARM_OpARMRSB_10(v *Value) bool { if v_1.Op != OpARMSRL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMRSBshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -12522,15 +12237,13 @@ func rewriteValueARM_OpARMRSB_10(v *Value) bool { // cond: // result: (SUBshiftRLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMSUBshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -12547,9 +12260,8 @@ func rewriteValueARM_OpARMRSB_10(v *Value) bool { if v_1.Op != OpARMSRA { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMRSBshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -12560,15 +12272,13 @@ func rewriteValueARM_OpARMRSB_10(v *Value) bool { // cond: // result: (SUBshiftRAreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRA { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMSUBshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -12579,9 +12289,8 @@ func rewriteValueARM_OpARMRSB_10(v *Value) bool { // cond: // result: (MOVWconst [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpARMMOVWconst) @@ -12592,15 +12301,13 @@ func rewriteValueARM_OpARMRSB_10(v *Value) bool { // cond: objabi.GOARM == 7 // result: (MULS x y a) for { - _ = v.Args[1] + a := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMUL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - a := v.Args[1] + x := v_0.Args[0] if !(objabi.GOARM == 7) { break } @@ -12614,19 +12321,17 @@ func rewriteValueARM_OpARMRSB_10(v *Value) bool { } func rewriteValueARM_OpARMRSBSshiftLL_0(v *Value) bool { b := v.Block - _ = b // match: (RSBSshiftLL (MOVWconst [c]) x [d]) // cond: // result: (SUBSconst [c] (SLLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMSUBSconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type) @@ -12656,19 +12361,17 @@ func rewriteValueARM_OpARMRSBSshiftLL_0(v *Value) bool { } func rewriteValueARM_OpARMRSBSshiftLLreg_0(v *Value) bool { b := v.Block - _ = b // match: (RSBSshiftLLreg (MOVWconst [c]) x y) // cond: // result: (SUBSconst [c] (SLL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMSUBSconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type) @@ -12699,19 +12402,17 @@ func rewriteValueARM_OpARMRSBSshiftLLreg_0(v *Value) bool { } func rewriteValueARM_OpARMRSBSshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (RSBSshiftRA (MOVWconst [c]) x [d]) // cond: // result: (SUBSconst [c] (SRAconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMSUBSconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type) @@ -12741,19 +12442,17 @@ func rewriteValueARM_OpARMRSBSshiftRA_0(v *Value) bool { } func rewriteValueARM_OpARMRSBSshiftRAreg_0(v *Value) bool { b := v.Block - _ = b // match: (RSBSshiftRAreg (MOVWconst [c]) x y) // cond: // result: (SUBSconst [c] (SRA x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMSUBSconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type) @@ -12784,19 +12483,17 @@ func rewriteValueARM_OpARMRSBSshiftRAreg_0(v *Value) bool { } func rewriteValueARM_OpARMRSBSshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (RSBSshiftRL (MOVWconst [c]) x [d]) // cond: // result: (SUBSconst [c] (SRLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMSUBSconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type) @@ -12826,19 +12523,17 @@ func rewriteValueARM_OpARMRSBSshiftRL_0(v *Value) bool { } func rewriteValueARM_OpARMRSBSshiftRLreg_0(v *Value) bool { b := v.Block - _ = b // match: (RSBSshiftRLreg (MOVWconst [c]) x y) // cond: // result: (SUBSconst [c] (SRL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMSUBSconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type) @@ -12934,19 +12629,17 @@ func rewriteValueARM_OpARMRSBconst_0(v *Value) bool { } func rewriteValueARM_OpARMRSBshiftLL_0(v *Value) bool { b := v.Block - _ = b // match: (RSBshiftLL (MOVWconst [c]) x [d]) // cond: // result: (SUBconst [c] (SLLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMSUBconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type) @@ -12998,19 +12691,17 @@ func rewriteValueARM_OpARMRSBshiftLL_0(v *Value) bool { } func rewriteValueARM_OpARMRSBshiftLLreg_0(v *Value) bool { b := v.Block - _ = b // match: (RSBshiftLLreg (MOVWconst [c]) x y) // cond: // result: (SUBconst [c] (SLL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMSUBconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type) @@ -13041,19 +12732,17 @@ func rewriteValueARM_OpARMRSBshiftLLreg_0(v *Value) bool { } func rewriteValueARM_OpARMRSBshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (RSBshiftRA (MOVWconst [c]) x [d]) // cond: // result: (SUBconst [c] (SRAconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMSUBconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type) @@ -13105,19 +12794,17 @@ func rewriteValueARM_OpARMRSBshiftRA_0(v *Value) bool { } func rewriteValueARM_OpARMRSBshiftRAreg_0(v *Value) bool { b := v.Block - _ = b // match: (RSBshiftRAreg (MOVWconst [c]) x y) // cond: // result: (SUBconst [c] (SRA x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMSUBconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type) @@ -13148,19 +12835,17 @@ func rewriteValueARM_OpARMRSBshiftRAreg_0(v *Value) bool { } func rewriteValueARM_OpARMRSBshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (RSBshiftRL (MOVWconst [c]) x [d]) // cond: // result: (SUBconst [c] (SRLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMSUBconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type) @@ -13212,19 +12897,17 @@ func rewriteValueARM_OpARMRSBshiftRL_0(v *Value) bool { } func rewriteValueARM_OpARMRSBshiftRLreg_0(v *Value) bool { b := v.Block - _ = b // match: (RSBshiftRLreg (MOVWconst [c]) x y) // cond: // result: (SUBconst [c] (SRL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMSUBconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type) @@ -13259,14 +12942,13 @@ func rewriteValueARM_OpARMRSCconst_0(v *Value) bool { // result: (RSCconst [int64(int32(c-d))] x flags) for { c := v.AuxInt - _ = v.Args[1] + flags := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMADDconst { break } d := v_0.AuxInt x := v_0.Args[0] - flags := v.Args[1] v.reset(OpARMRSCconst) v.AuxInt = int64(int32(c - d)) v.AddArg(x) @@ -13278,14 +12960,13 @@ func rewriteValueARM_OpARMRSCconst_0(v *Value) bool { // result: (RSCconst [int64(int32(c+d))] x flags) for { c := v.AuxInt - _ = v.Args[1] + flags := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSUBconst { break } d := v_0.AuxInt x := v_0.Args[0] - flags := v.Args[1] v.reset(OpARMRSCconst) v.AuxInt = int64(int32(c + d)) v.AddArg(x) @@ -13296,20 +12977,18 @@ func rewriteValueARM_OpARMRSCconst_0(v *Value) bool { } func rewriteValueARM_OpARMRSCshiftLL_0(v *Value) bool { b := v.Block - _ = b // match: (RSCshiftLL (MOVWconst [c]) x [d] flags) // cond: // result: (SBCconst [c] (SLLconst x [d]) flags) for { d := v.AuxInt - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - flags := v.Args[2] v.reset(OpARMSBCconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type) @@ -13324,14 +13003,13 @@ func rewriteValueARM_OpARMRSCshiftLL_0(v *Value) bool { // result: (RSCconst x [int64(int32(uint32(c)< x y) flags) for { - _ = v.Args[3] + flags := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break @@ -13355,7 +13032,6 @@ func rewriteValueARM_OpARMRSCshiftLLreg_0(v *Value) bool { c := v_0.AuxInt x := v.Args[1] y := v.Args[2] - flags := v.Args[3] v.reset(OpARMSBCconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type) @@ -13369,7 +13045,7 @@ func rewriteValueARM_OpARMRSCshiftLLreg_0(v *Value) bool { // cond: // result: (RSCshiftLL x y [c] flags) for { - _ = v.Args[3] + flags := v.Args[3] x := v.Args[0] y := v.Args[1] v_2 := v.Args[2] @@ -13377,7 +13053,6 @@ func rewriteValueARM_OpARMRSCshiftLLreg_0(v *Value) bool { break } c := v_2.AuxInt - flags := v.Args[3] v.reset(OpARMRSCshiftLL) v.AuxInt = c v.AddArg(x) @@ -13389,20 +13064,18 @@ func rewriteValueARM_OpARMRSCshiftLLreg_0(v *Value) bool { } func rewriteValueARM_OpARMRSCshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (RSCshiftRA (MOVWconst [c]) x [d] flags) // cond: // result: (SBCconst [c] (SRAconst x [d]) flags) for { d := v.AuxInt - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - flags := v.Args[2] v.reset(OpARMSBCconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type) @@ -13417,14 +13090,13 @@ func rewriteValueARM_OpARMRSCshiftRA_0(v *Value) bool { // result: (RSCconst x [int64(int32(c)>>uint64(d))] flags) for { d := v.AuxInt - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - flags := v.Args[2] v.reset(OpARMRSCconst) v.AuxInt = int64(int32(c) >> uint64(d)) v.AddArg(x) @@ -13435,12 +13107,11 @@ func rewriteValueARM_OpARMRSCshiftRA_0(v *Value) bool { } func rewriteValueARM_OpARMRSCshiftRAreg_0(v *Value) bool { b := v.Block - _ = b // match: (RSCshiftRAreg (MOVWconst [c]) x y flags) // cond: // result: (SBCconst [c] (SRA x y) flags) for { - _ = v.Args[3] + flags := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break @@ -13448,7 +13119,6 @@ func rewriteValueARM_OpARMRSCshiftRAreg_0(v *Value) bool { c := v_0.AuxInt x := v.Args[1] y := v.Args[2] - flags := v.Args[3] v.reset(OpARMSBCconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type) @@ -13462,7 +13132,7 @@ func rewriteValueARM_OpARMRSCshiftRAreg_0(v *Value) bool { // cond: // result: (RSCshiftRA x y [c] flags) for { - _ = v.Args[3] + flags := v.Args[3] x := v.Args[0] y := v.Args[1] v_2 := v.Args[2] @@ -13470,7 +13140,6 @@ func rewriteValueARM_OpARMRSCshiftRAreg_0(v *Value) bool { break } c := v_2.AuxInt - flags := v.Args[3] v.reset(OpARMRSCshiftRA) v.AuxInt = c v.AddArg(x) @@ -13482,20 +13151,18 @@ func rewriteValueARM_OpARMRSCshiftRAreg_0(v *Value) bool { } func rewriteValueARM_OpARMRSCshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (RSCshiftRL (MOVWconst [c]) x [d] flags) // cond: // result: (SBCconst [c] (SRLconst x [d]) flags) for { d := v.AuxInt - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - flags := v.Args[2] v.reset(OpARMSBCconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type) @@ -13510,14 +13177,13 @@ func rewriteValueARM_OpARMRSCshiftRL_0(v *Value) bool { // result: (RSCconst x [int64(int32(uint32(c)>>uint64(d)))] flags) for { d := v.AuxInt - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - flags := v.Args[2] v.reset(OpARMRSCconst) v.AuxInt = int64(int32(uint32(c) >> uint64(d))) v.AddArg(x) @@ -13528,12 +13194,11 @@ func rewriteValueARM_OpARMRSCshiftRL_0(v *Value) bool { } func rewriteValueARM_OpARMRSCshiftRLreg_0(v *Value) bool { b := v.Block - _ = b // match: (RSCshiftRLreg (MOVWconst [c]) x y flags) // cond: // result: (SBCconst [c] (SRL x y) flags) for { - _ = v.Args[3] + flags := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break @@ -13541,7 +13206,6 @@ func rewriteValueARM_OpARMRSCshiftRLreg_0(v *Value) bool { c := v_0.AuxInt x := v.Args[1] y := v.Args[2] - flags := v.Args[3] v.reset(OpARMSBCconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type) @@ -13555,7 +13219,7 @@ func rewriteValueARM_OpARMRSCshiftRLreg_0(v *Value) bool { // cond: // result: (RSCshiftRL x y [c] flags) for { - _ = v.Args[3] + flags := v.Args[3] x := v.Args[0] y := v.Args[1] v_2 := v.Args[2] @@ -13563,7 +13227,6 @@ func rewriteValueARM_OpARMRSCshiftRLreg_0(v *Value) bool { break } c := v_2.AuxInt - flags := v.Args[3] v.reset(OpARMRSCshiftRL) v.AuxInt = c v.AddArg(x) @@ -13578,14 +13241,13 @@ func rewriteValueARM_OpARMSBC_0(v *Value) bool { // cond: // result: (RSCconst [c] x flags) for { - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - flags := v.Args[2] v.reset(OpARMRSCconst) v.AuxInt = c v.AddArg(x) @@ -13596,14 +13258,13 @@ func rewriteValueARM_OpARMSBC_0(v *Value) bool { // cond: // result: (SBCconst [c] x flags) for { - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - flags := v.Args[2] v.reset(OpARMSBCconst) v.AuxInt = c v.AddArg(x) @@ -13614,7 +13275,7 @@ func rewriteValueARM_OpARMSBC_0(v *Value) bool { // cond: // result: (SBCshiftLL x y [c] flags) for { - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSLLconst { @@ -13622,7 +13283,6 @@ func rewriteValueARM_OpARMSBC_0(v *Value) bool { } c := v_1.AuxInt y := v_1.Args[0] - flags := v.Args[2] v.reset(OpARMSBCshiftLL) v.AuxInt = c v.AddArg(x) @@ -13634,7 +13294,7 @@ func rewriteValueARM_OpARMSBC_0(v *Value) bool { // cond: // result: (RSCshiftLL x y [c] flags) for { - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSLLconst { break @@ -13642,7 +13302,6 @@ func rewriteValueARM_OpARMSBC_0(v *Value) bool { c := v_0.AuxInt y := v_0.Args[0] x := v.Args[1] - flags := v.Args[2] v.reset(OpARMRSCshiftLL) v.AuxInt = c v.AddArg(x) @@ -13654,7 +13313,7 @@ func rewriteValueARM_OpARMSBC_0(v *Value) bool { // cond: // result: (SBCshiftRL x y [c] flags) for { - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSRLconst { @@ -13662,7 +13321,6 @@ func rewriteValueARM_OpARMSBC_0(v *Value) bool { } c := v_1.AuxInt y := v_1.Args[0] - flags := v.Args[2] v.reset(OpARMSBCshiftRL) v.AuxInt = c v.AddArg(x) @@ -13674,7 +13332,7 @@ func rewriteValueARM_OpARMSBC_0(v *Value) bool { // cond: // result: (RSCshiftRL x y [c] flags) for { - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSRLconst { break @@ -13682,7 +13340,6 @@ func rewriteValueARM_OpARMSBC_0(v *Value) bool { c := v_0.AuxInt y := v_0.Args[0] x := v.Args[1] - flags := v.Args[2] v.reset(OpARMRSCshiftRL) v.AuxInt = c v.AddArg(x) @@ -13694,7 +13351,7 @@ func rewriteValueARM_OpARMSBC_0(v *Value) bool { // cond: // result: (SBCshiftRA x y [c] flags) for { - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSRAconst { @@ -13702,7 +13359,6 @@ func rewriteValueARM_OpARMSBC_0(v *Value) bool { } c := v_1.AuxInt y := v_1.Args[0] - flags := v.Args[2] v.reset(OpARMSBCshiftRA) v.AuxInt = c v.AddArg(x) @@ -13714,7 +13370,7 @@ func rewriteValueARM_OpARMSBC_0(v *Value) bool { // cond: // result: (RSCshiftRA x y [c] flags) for { - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSRAconst { break @@ -13722,7 +13378,6 @@ func rewriteValueARM_OpARMSBC_0(v *Value) bool { c := v_0.AuxInt y := v_0.Args[0] x := v.Args[1] - flags := v.Args[2] v.reset(OpARMRSCshiftRA) v.AuxInt = c v.AddArg(x) @@ -13734,16 +13389,14 @@ func rewriteValueARM_OpARMSBC_0(v *Value) bool { // cond: // result: (SBCshiftLLreg x y z flags) for { - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSLL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] - flags := v.Args[2] + y := v_1.Args[0] v.reset(OpARMSBCshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -13755,16 +13408,14 @@ func rewriteValueARM_OpARMSBC_0(v *Value) bool { // cond: // result: (RSCshiftLLreg x y z flags) for { - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSLL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] + y := v_0.Args[0] x := v.Args[1] - flags := v.Args[2] v.reset(OpARMRSCshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -13779,16 +13430,14 @@ func rewriteValueARM_OpARMSBC_10(v *Value) bool { // cond: // result: (SBCshiftRLreg x y z flags) for { - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSRL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] - flags := v.Args[2] + y := v_1.Args[0] v.reset(OpARMSBCshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -13800,16 +13449,14 @@ func rewriteValueARM_OpARMSBC_10(v *Value) bool { // cond: // result: (RSCshiftRLreg x y z flags) for { - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSRL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] + y := v_0.Args[0] x := v.Args[1] - flags := v.Args[2] v.reset(OpARMRSCshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -13821,16 +13468,14 @@ func rewriteValueARM_OpARMSBC_10(v *Value) bool { // cond: // result: (SBCshiftRAreg x y z flags) for { - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMSRA { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] - flags := v.Args[2] + y := v_1.Args[0] v.reset(OpARMSBCshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -13842,16 +13487,14 @@ func rewriteValueARM_OpARMSBC_10(v *Value) bool { // cond: // result: (RSCshiftRAreg x y z flags) for { - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMSRA { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] + y := v_0.Args[0] x := v.Args[1] - flags := v.Args[2] v.reset(OpARMRSCshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -13867,14 +13510,13 @@ func rewriteValueARM_OpARMSBCconst_0(v *Value) bool { // result: (SBCconst [int64(int32(c-d))] x flags) for { c := v.AuxInt - _ = v.Args[1] + flags := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMADDconst { break } d := v_0.AuxInt x := v_0.Args[0] - flags := v.Args[1] v.reset(OpARMSBCconst) v.AuxInt = int64(int32(c - d)) v.AddArg(x) @@ -13886,14 +13528,13 @@ func rewriteValueARM_OpARMSBCconst_0(v *Value) bool { // result: (SBCconst [int64(int32(c+d))] x flags) for { c := v.AuxInt - _ = v.Args[1] + flags := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSUBconst { break } d := v_0.AuxInt x := v_0.Args[0] - flags := v.Args[1] v.reset(OpARMSBCconst) v.AuxInt = int64(int32(c + d)) v.AddArg(x) @@ -13904,20 +13545,18 @@ func rewriteValueARM_OpARMSBCconst_0(v *Value) bool { } func rewriteValueARM_OpARMSBCshiftLL_0(v *Value) bool { b := v.Block - _ = b // match: (SBCshiftLL (MOVWconst [c]) x [d] flags) // cond: // result: (RSCconst [c] (SLLconst x [d]) flags) for { d := v.AuxInt - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - flags := v.Args[2] v.reset(OpARMRSCconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type) @@ -13932,14 +13571,13 @@ func rewriteValueARM_OpARMSBCshiftLL_0(v *Value) bool { // result: (SBCconst x [int64(int32(uint32(c)< x y) flags) for { - _ = v.Args[3] + flags := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break @@ -13963,7 +13600,6 @@ func rewriteValueARM_OpARMSBCshiftLLreg_0(v *Value) bool { c := v_0.AuxInt x := v.Args[1] y := v.Args[2] - flags := v.Args[3] v.reset(OpARMRSCconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type) @@ -13977,7 +13613,7 @@ func rewriteValueARM_OpARMSBCshiftLLreg_0(v *Value) bool { // cond: // result: (SBCshiftLL x y [c] flags) for { - _ = v.Args[3] + flags := v.Args[3] x := v.Args[0] y := v.Args[1] v_2 := v.Args[2] @@ -13985,7 +13621,6 @@ func rewriteValueARM_OpARMSBCshiftLLreg_0(v *Value) bool { break } c := v_2.AuxInt - flags := v.Args[3] v.reset(OpARMSBCshiftLL) v.AuxInt = c v.AddArg(x) @@ -13997,20 +13632,18 @@ func rewriteValueARM_OpARMSBCshiftLLreg_0(v *Value) bool { } func rewriteValueARM_OpARMSBCshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (SBCshiftRA (MOVWconst [c]) x [d] flags) // cond: // result: (RSCconst [c] (SRAconst x [d]) flags) for { d := v.AuxInt - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - flags := v.Args[2] v.reset(OpARMRSCconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type) @@ -14025,14 +13658,13 @@ func rewriteValueARM_OpARMSBCshiftRA_0(v *Value) bool { // result: (SBCconst x [int64(int32(c)>>uint64(d))] flags) for { d := v.AuxInt - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - flags := v.Args[2] v.reset(OpARMSBCconst) v.AuxInt = int64(int32(c) >> uint64(d)) v.AddArg(x) @@ -14043,12 +13675,11 @@ func rewriteValueARM_OpARMSBCshiftRA_0(v *Value) bool { } func rewriteValueARM_OpARMSBCshiftRAreg_0(v *Value) bool { b := v.Block - _ = b // match: (SBCshiftRAreg (MOVWconst [c]) x y flags) // cond: // result: (RSCconst [c] (SRA x y) flags) for { - _ = v.Args[3] + flags := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break @@ -14056,7 +13687,6 @@ func rewriteValueARM_OpARMSBCshiftRAreg_0(v *Value) bool { c := v_0.AuxInt x := v.Args[1] y := v.Args[2] - flags := v.Args[3] v.reset(OpARMRSCconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type) @@ -14070,7 +13700,7 @@ func rewriteValueARM_OpARMSBCshiftRAreg_0(v *Value) bool { // cond: // result: (SBCshiftRA x y [c] flags) for { - _ = v.Args[3] + flags := v.Args[3] x := v.Args[0] y := v.Args[1] v_2 := v.Args[2] @@ -14078,7 +13708,6 @@ func rewriteValueARM_OpARMSBCshiftRAreg_0(v *Value) bool { break } c := v_2.AuxInt - flags := v.Args[3] v.reset(OpARMSBCshiftRA) v.AuxInt = c v.AddArg(x) @@ -14090,20 +13719,18 @@ func rewriteValueARM_OpARMSBCshiftRAreg_0(v *Value) bool { } func rewriteValueARM_OpARMSBCshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (SBCshiftRL (MOVWconst [c]) x [d] flags) // cond: // result: (RSCconst [c] (SRLconst x [d]) flags) for { d := v.AuxInt - _ = v.Args[2] + flags := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - flags := v.Args[2] v.reset(OpARMRSCconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type) @@ -14118,14 +13745,13 @@ func rewriteValueARM_OpARMSBCshiftRL_0(v *Value) bool { // result: (SBCconst x [int64(int32(uint32(c)>>uint64(d)))] flags) for { d := v.AuxInt - _ = v.Args[2] + flags := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARMMOVWconst { break } c := v_1.AuxInt - flags := v.Args[2] v.reset(OpARMSBCconst) v.AuxInt = int64(int32(uint32(c) >> uint64(d))) v.AddArg(x) @@ -14136,12 +13762,11 @@ func rewriteValueARM_OpARMSBCshiftRL_0(v *Value) bool { } func rewriteValueARM_OpARMSBCshiftRLreg_0(v *Value) bool { b := v.Block - _ = b // match: (SBCshiftRLreg (MOVWconst [c]) x y flags) // cond: // result: (RSCconst [c] (SRL x y) flags) for { - _ = v.Args[3] + flags := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break @@ -14149,7 +13774,6 @@ func rewriteValueARM_OpARMSBCshiftRLreg_0(v *Value) bool { c := v_0.AuxInt x := v.Args[1] y := v.Args[2] - flags := v.Args[3] v.reset(OpARMRSCconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type) @@ -14163,7 +13787,7 @@ func rewriteValueARM_OpARMSBCshiftRLreg_0(v *Value) bool { // cond: // result: (SBCshiftRL x y [c] flags) for { - _ = v.Args[3] + flags := v.Args[3] x := v.Args[0] y := v.Args[1] v_2 := v.Args[2] @@ -14171,7 +13795,6 @@ func rewriteValueARM_OpARMSBCshiftRLreg_0(v *Value) bool { break } c := v_2.AuxInt - flags := v.Args[3] v.reset(OpARMSBCshiftRL) v.AuxInt = c v.AddArg(x) @@ -14412,13 +14035,12 @@ func rewriteValueARM_OpARMSUB_0(v *Value) bool { // cond: // result: (RSBconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMRSBconst) v.AuxInt = c v.AddArg(x) @@ -14462,14 +14084,13 @@ func rewriteValueARM_OpARMSUB_0(v *Value) bool { // cond: // result: (RSBshiftLL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMRSBshiftLL) v.AuxInt = c v.AddArg(x) @@ -14498,14 +14119,13 @@ func rewriteValueARM_OpARMSUB_0(v *Value) bool { // cond: // result: (RSBshiftRL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMRSBshiftRL) v.AuxInt = c v.AddArg(x) @@ -14534,14 +14154,13 @@ func rewriteValueARM_OpARMSUB_0(v *Value) bool { // cond: // result: (RSBshiftRA x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRAconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMRSBshiftRA) v.AuxInt = c v.AddArg(x) @@ -14558,9 +14177,8 @@ func rewriteValueARM_OpARMSUB_0(v *Value) bool { if v_1.Op != OpARMSLL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMSUBshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -14571,15 +14189,13 @@ func rewriteValueARM_OpARMSUB_0(v *Value) bool { // cond: // result: (RSBshiftLLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMRSBshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -14599,9 +14215,8 @@ func rewriteValueARM_OpARMSUB_10(v *Value) bool { if v_1.Op != OpARMSRL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMSUBshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -14612,15 +14227,13 @@ func rewriteValueARM_OpARMSUB_10(v *Value) bool { // cond: // result: (RSBshiftRLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMRSBshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -14637,9 +14250,8 @@ func rewriteValueARM_OpARMSUB_10(v *Value) bool { if v_1.Op != OpARMSRA { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMSUBshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -14650,15 +14262,13 @@ func rewriteValueARM_OpARMSUB_10(v *Value) bool { // cond: // result: (RSBshiftRAreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRA { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMRSBshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -14669,9 +14279,8 @@ func rewriteValueARM_OpARMSUB_10(v *Value) bool { // cond: // result: (MOVWconst [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpARMMOVWconst) @@ -14688,9 +14297,8 @@ func rewriteValueARM_OpARMSUB_10(v *Value) bool { if v_1.Op != OpARMMUL { break } - _ = v_1.Args[1] - x := v_1.Args[0] y := v_1.Args[1] + x := v_1.Args[0] if !(objabi.GOARM == 7) { break } @@ -14713,9 +14321,8 @@ func rewriteValueARM_OpARMSUBD_0(v *Value) bool { if v_1.Op != OpARMMULD { break } - _ = v_1.Args[1] - x := v_1.Args[0] y := v_1.Args[1] + x := v_1.Args[0] if !(a.Uses == 1 && objabi.GOARM >= 6) { break } @@ -14735,9 +14342,8 @@ func rewriteValueARM_OpARMSUBD_0(v *Value) bool { if v_1.Op != OpARMNMULD { break } - _ = v_1.Args[1] - x := v_1.Args[0] y := v_1.Args[1] + x := v_1.Args[0] if !(a.Uses == 1 && objabi.GOARM >= 6) { break } @@ -14760,9 +14366,8 @@ func rewriteValueARM_OpARMSUBF_0(v *Value) bool { if v_1.Op != OpARMMULF { break } - _ = v_1.Args[1] - x := v_1.Args[0] y := v_1.Args[1] + x := v_1.Args[0] if !(a.Uses == 1 && objabi.GOARM >= 6) { break } @@ -14782,9 +14387,8 @@ func rewriteValueARM_OpARMSUBF_0(v *Value) bool { if v_1.Op != OpARMNMULF { break } - _ = v_1.Args[1] - x := v_1.Args[0] y := v_1.Args[1] + x := v_1.Args[0] if !(a.Uses == 1 && objabi.GOARM >= 6) { break } @@ -14835,14 +14439,13 @@ func rewriteValueARM_OpARMSUBS_0(v *Value) bool { // cond: // result: (RSBSshiftLL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMRSBSshiftLL) v.AuxInt = c v.AddArg(x) @@ -14871,14 +14474,13 @@ func rewriteValueARM_OpARMSUBS_0(v *Value) bool { // cond: // result: (RSBSshiftRL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMRSBSshiftRL) v.AuxInt = c v.AddArg(x) @@ -14907,14 +14509,13 @@ func rewriteValueARM_OpARMSUBS_0(v *Value) bool { // cond: // result: (RSBSshiftRA x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRAconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMRSBSshiftRA) v.AuxInt = c v.AddArg(x) @@ -14931,9 +14532,8 @@ func rewriteValueARM_OpARMSUBS_0(v *Value) bool { if v_1.Op != OpARMSLL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMSUBSshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -14944,15 +14544,13 @@ func rewriteValueARM_OpARMSUBS_0(v *Value) bool { // cond: // result: (RSBSshiftLLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMRSBSshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -14969,9 +14567,8 @@ func rewriteValueARM_OpARMSUBS_0(v *Value) bool { if v_1.Op != OpARMSRL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMSUBSshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -14985,15 +14582,13 @@ func rewriteValueARM_OpARMSUBS_10(v *Value) bool { // cond: // result: (RSBSshiftRLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMRSBSshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -15010,9 +14605,8 @@ func rewriteValueARM_OpARMSUBS_10(v *Value) bool { if v_1.Op != OpARMSRA { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMSUBSshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -15023,15 +14617,13 @@ func rewriteValueARM_OpARMSUBS_10(v *Value) bool { // cond: // result: (RSBSshiftRAreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRA { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMRSBSshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -15042,19 +14634,17 @@ func rewriteValueARM_OpARMSUBS_10(v *Value) bool { } func rewriteValueARM_OpARMSUBSshiftLL_0(v *Value) bool { b := v.Block - _ = b // match: (SUBSshiftLL (MOVWconst [c]) x [d]) // cond: // result: (RSBSconst [c] (SLLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMRSBSconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type) @@ -15084,19 +14674,17 @@ func rewriteValueARM_OpARMSUBSshiftLL_0(v *Value) bool { } func rewriteValueARM_OpARMSUBSshiftLLreg_0(v *Value) bool { b := v.Block - _ = b // match: (SUBSshiftLLreg (MOVWconst [c]) x y) // cond: // result: (RSBSconst [c] (SLL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMRSBSconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type) @@ -15127,19 +14715,17 @@ func rewriteValueARM_OpARMSUBSshiftLLreg_0(v *Value) bool { } func rewriteValueARM_OpARMSUBSshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (SUBSshiftRA (MOVWconst [c]) x [d]) // cond: // result: (RSBSconst [c] (SRAconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMRSBSconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type) @@ -15169,19 +14755,17 @@ func rewriteValueARM_OpARMSUBSshiftRA_0(v *Value) bool { } func rewriteValueARM_OpARMSUBSshiftRAreg_0(v *Value) bool { b := v.Block - _ = b // match: (SUBSshiftRAreg (MOVWconst [c]) x y) // cond: // result: (RSBSconst [c] (SRA x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMRSBSconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type) @@ -15212,19 +14796,17 @@ func rewriteValueARM_OpARMSUBSshiftRAreg_0(v *Value) bool { } func rewriteValueARM_OpARMSUBSshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (SUBSshiftRL (MOVWconst [c]) x [d]) // cond: // result: (RSBSconst [c] (SRLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMRSBSconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type) @@ -15254,19 +14836,17 @@ func rewriteValueARM_OpARMSUBSshiftRL_0(v *Value) bool { } func rewriteValueARM_OpARMSUBSshiftRLreg_0(v *Value) bool { b := v.Block - _ = b // match: (SUBSshiftRLreg (MOVWconst [c]) x y) // cond: // result: (RSBSconst [c] (SRL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMRSBSconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type) @@ -15421,19 +15001,17 @@ func rewriteValueARM_OpARMSUBconst_0(v *Value) bool { } func rewriteValueARM_OpARMSUBshiftLL_0(v *Value) bool { b := v.Block - _ = b // match: (SUBshiftLL (MOVWconst [c]) x [d]) // cond: // result: (RSBconst [c] (SLLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMRSBconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type) @@ -15485,19 +15063,17 @@ func rewriteValueARM_OpARMSUBshiftLL_0(v *Value) bool { } func rewriteValueARM_OpARMSUBshiftLLreg_0(v *Value) bool { b := v.Block - _ = b // match: (SUBshiftLLreg (MOVWconst [c]) x y) // cond: // result: (RSBconst [c] (SLL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMRSBconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type) @@ -15528,19 +15104,17 @@ func rewriteValueARM_OpARMSUBshiftLLreg_0(v *Value) bool { } func rewriteValueARM_OpARMSUBshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (SUBshiftRA (MOVWconst [c]) x [d]) // cond: // result: (RSBconst [c] (SRAconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMRSBconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type) @@ -15592,19 +15166,17 @@ func rewriteValueARM_OpARMSUBshiftRA_0(v *Value) bool { } func rewriteValueARM_OpARMSUBshiftRAreg_0(v *Value) bool { b := v.Block - _ = b // match: (SUBshiftRAreg (MOVWconst [c]) x y) // cond: // result: (RSBconst [c] (SRA x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMRSBconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type) @@ -15635,19 +15207,17 @@ func rewriteValueARM_OpARMSUBshiftRAreg_0(v *Value) bool { } func rewriteValueARM_OpARMSUBshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (SUBshiftRL (MOVWconst [c]) x [d]) // cond: // result: (RSBconst [c] (SRLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMRSBconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type) @@ -15699,19 +15269,17 @@ func rewriteValueARM_OpARMSUBshiftRL_0(v *Value) bool { } func rewriteValueARM_OpARMSUBshiftRLreg_0(v *Value) bool { b := v.Block - _ = b // match: (SUBshiftRLreg (MOVWconst [c]) x y) // cond: // result: (RSBconst [c] (SRL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMRSBconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type) @@ -15761,13 +15329,12 @@ func rewriteValueARM_OpARMTEQ_0(v *Value) bool { // cond: // result: (TEQconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMTEQconst) v.AuxInt = c v.AddArg(x) @@ -15795,14 +15362,13 @@ func rewriteValueARM_OpARMTEQ_0(v *Value) bool { // cond: // result: (TEQshiftLL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMTEQshiftLL) v.AuxInt = c v.AddArg(x) @@ -15831,14 +15397,13 @@ func rewriteValueARM_OpARMTEQ_0(v *Value) bool { // cond: // result: (TEQshiftRL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMTEQshiftRL) v.AuxInt = c v.AddArg(x) @@ -15867,14 +15432,13 @@ func rewriteValueARM_OpARMTEQ_0(v *Value) bool { // cond: // result: (TEQshiftRA x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRAconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMTEQshiftRA) v.AuxInt = c v.AddArg(x) @@ -15891,9 +15455,8 @@ func rewriteValueARM_OpARMTEQ_0(v *Value) bool { if v_1.Op != OpARMSLL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMTEQshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -15904,15 +15467,13 @@ func rewriteValueARM_OpARMTEQ_0(v *Value) bool { // cond: // result: (TEQshiftLLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMTEQshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -15932,9 +15493,8 @@ func rewriteValueARM_OpARMTEQ_10(v *Value) bool { if v_1.Op != OpARMSRL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMTEQshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -15945,15 +15505,13 @@ func rewriteValueARM_OpARMTEQ_10(v *Value) bool { // cond: // result: (TEQshiftRLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMTEQshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -15970,9 +15528,8 @@ func rewriteValueARM_OpARMTEQ_10(v *Value) bool { if v_1.Op != OpARMSRA { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMTEQshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -15983,15 +15540,13 @@ func rewriteValueARM_OpARMTEQ_10(v *Value) bool { // cond: // result: (TEQshiftRAreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRA { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMTEQshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -16053,19 +15608,17 @@ func rewriteValueARM_OpARMTEQconst_0(v *Value) bool { } func rewriteValueARM_OpARMTEQshiftLL_0(v *Value) bool { b := v.Block - _ = b // match: (TEQshiftLL (MOVWconst [c]) x [d]) // cond: // result: (TEQconst [c] (SLLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMTEQconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type) @@ -16095,19 +15648,17 @@ func rewriteValueARM_OpARMTEQshiftLL_0(v *Value) bool { } func rewriteValueARM_OpARMTEQshiftLLreg_0(v *Value) bool { b := v.Block - _ = b // match: (TEQshiftLLreg (MOVWconst [c]) x y) // cond: // result: (TEQconst [c] (SLL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMTEQconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type) @@ -16138,19 +15689,17 @@ func rewriteValueARM_OpARMTEQshiftLLreg_0(v *Value) bool { } func rewriteValueARM_OpARMTEQshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (TEQshiftRA (MOVWconst [c]) x [d]) // cond: // result: (TEQconst [c] (SRAconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMTEQconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type) @@ -16180,19 +15729,17 @@ func rewriteValueARM_OpARMTEQshiftRA_0(v *Value) bool { } func rewriteValueARM_OpARMTEQshiftRAreg_0(v *Value) bool { b := v.Block - _ = b // match: (TEQshiftRAreg (MOVWconst [c]) x y) // cond: // result: (TEQconst [c] (SRA x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMTEQconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type) @@ -16223,19 +15770,17 @@ func rewriteValueARM_OpARMTEQshiftRAreg_0(v *Value) bool { } func rewriteValueARM_OpARMTEQshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (TEQshiftRL (MOVWconst [c]) x [d]) // cond: // result: (TEQconst [c] (SRLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMTEQconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type) @@ -16265,19 +15810,17 @@ func rewriteValueARM_OpARMTEQshiftRL_0(v *Value) bool { } func rewriteValueARM_OpARMTEQshiftRLreg_0(v *Value) bool { b := v.Block - _ = b // match: (TEQshiftRLreg (MOVWconst [c]) x y) // cond: // result: (TEQconst [c] (SRL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMTEQconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type) @@ -16327,13 +15870,12 @@ func rewriteValueARM_OpARMTST_0(v *Value) bool { // cond: // result: (TSTconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMTSTconst) v.AuxInt = c v.AddArg(x) @@ -16361,14 +15903,13 @@ func rewriteValueARM_OpARMTST_0(v *Value) bool { // cond: // result: (TSTshiftLL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMTSTshiftLL) v.AuxInt = c v.AddArg(x) @@ -16397,14 +15938,13 @@ func rewriteValueARM_OpARMTST_0(v *Value) bool { // cond: // result: (TSTshiftRL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMTSTshiftRL) v.AuxInt = c v.AddArg(x) @@ -16433,14 +15973,13 @@ func rewriteValueARM_OpARMTST_0(v *Value) bool { // cond: // result: (TSTshiftRA x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRAconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMTSTshiftRA) v.AuxInt = c v.AddArg(x) @@ -16457,9 +15996,8 @@ func rewriteValueARM_OpARMTST_0(v *Value) bool { if v_1.Op != OpARMSLL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMTSTshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -16470,15 +16008,13 @@ func rewriteValueARM_OpARMTST_0(v *Value) bool { // cond: // result: (TSTshiftLLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMTSTshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -16498,9 +16034,8 @@ func rewriteValueARM_OpARMTST_10(v *Value) bool { if v_1.Op != OpARMSRL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMTSTshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -16511,15 +16046,13 @@ func rewriteValueARM_OpARMTST_10(v *Value) bool { // cond: // result: (TSTshiftRLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMTSTshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -16536,9 +16069,8 @@ func rewriteValueARM_OpARMTST_10(v *Value) bool { if v_1.Op != OpARMSRA { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMTSTshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -16549,15 +16081,13 @@ func rewriteValueARM_OpARMTST_10(v *Value) bool { // cond: // result: (TSTshiftRAreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRA { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMTSTshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -16619,19 +16149,17 @@ func rewriteValueARM_OpARMTSTconst_0(v *Value) bool { } func rewriteValueARM_OpARMTSTshiftLL_0(v *Value) bool { b := v.Block - _ = b // match: (TSTshiftLL (MOVWconst [c]) x [d]) // cond: // result: (TSTconst [c] (SLLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMTSTconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type) @@ -16661,19 +16189,17 @@ func rewriteValueARM_OpARMTSTshiftLL_0(v *Value) bool { } func rewriteValueARM_OpARMTSTshiftLLreg_0(v *Value) bool { b := v.Block - _ = b // match: (TSTshiftLLreg (MOVWconst [c]) x y) // cond: // result: (TSTconst [c] (SLL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMTSTconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type) @@ -16704,19 +16230,17 @@ func rewriteValueARM_OpARMTSTshiftLLreg_0(v *Value) bool { } func rewriteValueARM_OpARMTSTshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (TSTshiftRA (MOVWconst [c]) x [d]) // cond: // result: (TSTconst [c] (SRAconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMTSTconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type) @@ -16746,19 +16270,17 @@ func rewriteValueARM_OpARMTSTshiftRA_0(v *Value) bool { } func rewriteValueARM_OpARMTSTshiftRAreg_0(v *Value) bool { b := v.Block - _ = b // match: (TSTshiftRAreg (MOVWconst [c]) x y) // cond: // result: (TSTconst [c] (SRA x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMTSTconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type) @@ -16789,19 +16311,17 @@ func rewriteValueARM_OpARMTSTshiftRAreg_0(v *Value) bool { } func rewriteValueARM_OpARMTSTshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (TSTshiftRL (MOVWconst [c]) x [d]) // cond: // result: (TSTconst [c] (SRLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMTSTconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type) @@ -16831,19 +16351,17 @@ func rewriteValueARM_OpARMTSTshiftRL_0(v *Value) bool { } func rewriteValueARM_OpARMTSTshiftRLreg_0(v *Value) bool { b := v.Block - _ = b // match: (TSTshiftRLreg (MOVWconst [c]) x y) // cond: // result: (TSTconst [c] (SRL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMTSTconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type) @@ -16893,13 +16411,12 @@ func rewriteValueARM_OpARMXOR_0(v *Value) bool { // cond: // result: (XORconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMXORconst) v.AuxInt = c v.AddArg(x) @@ -16927,14 +16444,13 @@ func rewriteValueARM_OpARMXOR_0(v *Value) bool { // cond: // result: (XORshiftLL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMXORshiftLL) v.AuxInt = c v.AddArg(x) @@ -16963,14 +16479,13 @@ func rewriteValueARM_OpARMXOR_0(v *Value) bool { // cond: // result: (XORshiftRL x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRLconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMXORshiftRL) v.AuxInt = c v.AddArg(x) @@ -16999,14 +16514,13 @@ func rewriteValueARM_OpARMXOR_0(v *Value) bool { // cond: // result: (XORshiftRA x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRAconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMXORshiftRA) v.AuxInt = c v.AddArg(x) @@ -17035,14 +16549,13 @@ func rewriteValueARM_OpARMXOR_0(v *Value) bool { // cond: // result: (XORshiftRR x y [c]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRRconst { break } c := v_0.AuxInt y := v_0.Args[0] - x := v.Args[1] v.reset(OpARMXORshiftRR) v.AuxInt = c v.AddArg(x) @@ -17062,9 +16575,8 @@ func rewriteValueARM_OpARMXOR_10(v *Value) bool { if v_1.Op != OpARMSLL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMXORshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -17075,15 +16587,13 @@ func rewriteValueARM_OpARMXOR_10(v *Value) bool { // cond: // result: (XORshiftLLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMXORshiftLLreg) v.AddArg(x) v.AddArg(y) @@ -17100,9 +16610,8 @@ func rewriteValueARM_OpARMXOR_10(v *Value) bool { if v_1.Op != OpARMSRL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMXORshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -17113,15 +16622,13 @@ func rewriteValueARM_OpARMXOR_10(v *Value) bool { // cond: // result: (XORshiftRLreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMXORshiftRLreg) v.AddArg(x) v.AddArg(y) @@ -17138,9 +16645,8 @@ func rewriteValueARM_OpARMXOR_10(v *Value) bool { if v_1.Op != OpARMSRA { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARMXORshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -17151,15 +16657,13 @@ func rewriteValueARM_OpARMXOR_10(v *Value) bool { // cond: // result: (XORshiftRAreg x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRA { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpARMXORshiftRAreg) v.AddArg(x) v.AddArg(y) @@ -17170,9 +16674,8 @@ func rewriteValueARM_OpARMXOR_10(v *Value) bool { // cond: // result: (MOVWconst [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpARMMOVWconst) @@ -17229,19 +16732,18 @@ func rewriteValueARM_OpARMXORconst_0(v *Value) bool { } func rewriteValueARM_OpARMXORshiftLL_0(v *Value) bool { b := v.Block - _ = b + typ := &b.Func.Config.Types // match: (XORshiftLL (MOVWconst [c]) x [d]) // cond: // result: (XORconst [c] (SLLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMXORconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLLconst, x.Type) @@ -17272,7 +16774,7 @@ func rewriteValueARM_OpARMXORshiftLL_0(v *Value) bool { // result: (SRRconst [32-c] x) for { c := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSRLconst { break @@ -17280,8 +16782,7 @@ func rewriteValueARM_OpARMXORshiftLL_0(v *Value) bool { if v_0.AuxInt != 32-c { break } - x := v_0.Args[0] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpARMSRRconst) @@ -17289,6 +16790,72 @@ func rewriteValueARM_OpARMXORshiftLL_0(v *Value) bool { v.AddArg(x) return true } + // match: (XORshiftLL [8] (BFXU [armBFAuxInt(8, 8)] x) x) + // cond: + // result: (REV16 x) + for { + if v.Type != typ.UInt16 { + break + } + if v.AuxInt != 8 { + break + } + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpARMBFXU { + break + } + if v_0.Type != typ.UInt16 { + break + } + if v_0.AuxInt != armBFAuxInt(8, 8) { + break + } + if x != v_0.Args[0] { + break + } + v.reset(OpARMREV16) + v.AddArg(x) + return true + } + // match: (XORshiftLL [8] (SRLconst [24] (SLLconst [16] x)) x) + // cond: objabi.GOARM>=6 + // result: (REV16 x) + for { + if v.Type != typ.UInt16 { + break + } + if v.AuxInt != 8 { + break + } + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpARMSRLconst { + break + } + if v_0.Type != typ.UInt16 { + break + } + if v_0.AuxInt != 24 { + break + } + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpARMSLLconst { + break + } + if v_0_0.AuxInt != 16 { + break + } + if x != v_0_0.Args[0] { + break + } + if !(objabi.GOARM >= 6) { + break + } + v.reset(OpARMREV16) + v.AddArg(x) + return true + } // match: (XORshiftLL x (SLLconst x [c]) [d]) // cond: c==d // result: (MOVWconst [0]) @@ -17315,19 +16882,17 @@ func rewriteValueARM_OpARMXORshiftLL_0(v *Value) bool { } func rewriteValueARM_OpARMXORshiftLLreg_0(v *Value) bool { b := v.Block - _ = b // match: (XORshiftLLreg (MOVWconst [c]) x y) // cond: // result: (XORconst [c] (SLL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMXORconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type) @@ -17358,19 +16923,17 @@ func rewriteValueARM_OpARMXORshiftLLreg_0(v *Value) bool { } func rewriteValueARM_OpARMXORshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (XORshiftRA (MOVWconst [c]) x [d]) // cond: // result: (XORconst [c] (SRAconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMXORconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRAconst, x.Type) @@ -17422,19 +16985,17 @@ func rewriteValueARM_OpARMXORshiftRA_0(v *Value) bool { } func rewriteValueARM_OpARMXORshiftRAreg_0(v *Value) bool { b := v.Block - _ = b // match: (XORshiftRAreg (MOVWconst [c]) x y) // cond: // result: (XORconst [c] (SRA x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMXORconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRA, x.Type) @@ -17465,19 +17026,17 @@ func rewriteValueARM_OpARMXORshiftRAreg_0(v *Value) bool { } func rewriteValueARM_OpARMXORshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (XORshiftRL (MOVWconst [c]) x [d]) // cond: // result: (XORconst [c] (SRLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMXORconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRLconst, x.Type) @@ -17508,7 +17067,7 @@ func rewriteValueARM_OpARMXORshiftRL_0(v *Value) bool { // result: (SRRconst [ c] x) for { c := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMSLLconst { break @@ -17516,8 +17075,7 @@ func rewriteValueARM_OpARMXORshiftRL_0(v *Value) bool { if v_0.AuxInt != 32-c { break } - x := v_0.Args[0] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpARMSRRconst) @@ -17551,19 +17109,17 @@ func rewriteValueARM_OpARMXORshiftRL_0(v *Value) bool { } func rewriteValueARM_OpARMXORshiftRLreg_0(v *Value) bool { b := v.Block - _ = b // match: (XORshiftRLreg (MOVWconst [c]) x y) // cond: // result: (XORconst [c] (SRL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARMXORconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type) @@ -17594,19 +17150,17 @@ func rewriteValueARM_OpARMXORshiftRLreg_0(v *Value) bool { } func rewriteValueARM_OpARMXORshiftRR_0(v *Value) bool { b := v.Block - _ = b // match: (XORshiftRR (MOVWconst [c]) x [d]) // cond: // result: (XORconst [c] (SRRconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARMMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARMXORconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARMSRRconst, x.Type) @@ -17639,9 +17193,8 @@ func rewriteValueARM_OpAdd16_0(v *Value) bool { // cond: // result: (ADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMADD) v.AddArg(x) v.AddArg(y) @@ -17653,9 +17206,8 @@ func rewriteValueARM_OpAdd32_0(v *Value) bool { // cond: // result: (ADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMADD) v.AddArg(x) v.AddArg(y) @@ -17667,9 +17219,8 @@ func rewriteValueARM_OpAdd32F_0(v *Value) bool { // cond: // result: (ADDF x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMADDF) v.AddArg(x) v.AddArg(y) @@ -17681,9 +17232,8 @@ func rewriteValueARM_OpAdd32carry_0(v *Value) bool { // cond: // result: (ADDS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMADDS) v.AddArg(x) v.AddArg(y) @@ -17695,10 +17245,9 @@ func rewriteValueARM_OpAdd32withcarry_0(v *Value) bool { // cond: // result: (ADC x y c) for { - _ = v.Args[2] + c := v.Args[2] x := v.Args[0] y := v.Args[1] - c := v.Args[2] v.reset(OpARMADC) v.AddArg(x) v.AddArg(y) @@ -17711,9 +17260,8 @@ func rewriteValueARM_OpAdd64F_0(v *Value) bool { // cond: // result: (ADDD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMADDD) v.AddArg(x) v.AddArg(y) @@ -17725,9 +17273,8 @@ func rewriteValueARM_OpAdd8_0(v *Value) bool { // cond: // result: (ADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMADD) v.AddArg(x) v.AddArg(y) @@ -17739,9 +17286,8 @@ func rewriteValueARM_OpAddPtr_0(v *Value) bool { // cond: // result: (ADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMADD) v.AddArg(x) v.AddArg(y) @@ -17766,9 +17312,8 @@ func rewriteValueARM_OpAnd16_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMAND) v.AddArg(x) v.AddArg(y) @@ -17780,9 +17325,8 @@ func rewriteValueARM_OpAnd32_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMAND) v.AddArg(x) v.AddArg(y) @@ -17794,9 +17338,8 @@ func rewriteValueARM_OpAnd8_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMAND) v.AddArg(x) v.AddArg(y) @@ -17808,9 +17351,8 @@ func rewriteValueARM_OpAndB_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMAND) v.AddArg(x) v.AddArg(y) @@ -17819,15 +17361,13 @@ func rewriteValueARM_OpAndB_0(v *Value) bool { } func rewriteValueARM_OpAvg32u_0(v *Value) bool { b := v.Block - _ = b // match: (Avg32u x y) // cond: // result: (ADD (SRLconst (SUB x y) [1]) y) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMADD) v0 := b.NewValue0(v.Pos, OpARMSRLconst, t) v0.AuxInt = 1 @@ -17842,7 +17382,6 @@ func rewriteValueARM_OpAvg32u_0(v *Value) bool { } func rewriteValueARM_OpBitLen32_0(v *Value) bool { b := v.Block - _ = b // match: (BitLen32 x) // cond: // result: (RSBconst [32] (CLZ x)) @@ -17859,7 +17398,6 @@ func rewriteValueARM_OpBitLen32_0(v *Value) bool { } func rewriteValueARM_OpBswap32_0(v *Value) bool { b := v.Block - _ = b // match: (Bswap32 x) // cond: objabi.GOARM==5 // result: (XOR (SRLconst (BICconst (XOR x (SRRconst [16] x)) [0xff0000]) [8]) (SRRconst x [8])) @@ -17910,10 +17448,9 @@ func rewriteValueARM_OpClosureCall_0(v *Value) bool { // result: (CALLclosure [argwid] entry closure mem) for { argwid := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] entry := v.Args[0] closure := v.Args[1] - mem := v.Args[2] v.reset(OpARMCALLclosure) v.AuxInt = argwid v.AddArg(entry) @@ -18031,9 +17568,74 @@ func rewriteValueARM_OpConstNil_0(v *Value) bool { return true } } +func rewriteValueARM_OpCtz16_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Ctz16 x) + // cond: objabi.GOARM<=6 + // result: (RSBconst [32] (CLZ (SUBconst (AND (ORconst [0x10000] x) (RSBconst [0] (ORconst [0x10000] x))) [1]))) + for { + t := v.Type + x := v.Args[0] + if !(objabi.GOARM <= 6) { + break + } + v.reset(OpARMRSBconst) + v.AuxInt = 32 + v0 := b.NewValue0(v.Pos, OpARMCLZ, t) + v1 := b.NewValue0(v.Pos, OpARMSUBconst, typ.UInt32) + v1.AuxInt = 1 + v2 := b.NewValue0(v.Pos, OpARMAND, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpARMORconst, typ.UInt32) + v3.AuxInt = 0x10000 + v3.AddArg(x) + v2.AddArg(v3) + v4 := b.NewValue0(v.Pos, OpARMRSBconst, typ.UInt32) + v4.AuxInt = 0 + v5 := b.NewValue0(v.Pos, OpARMORconst, typ.UInt32) + v5.AuxInt = 0x10000 + v5.AddArg(x) + v4.AddArg(v5) + v2.AddArg(v4) + v1.AddArg(v2) + v0.AddArg(v1) + v.AddArg(v0) + return true + } + // match: (Ctz16 x) + // cond: objabi.GOARM==7 + // result: (CLZ (RBIT (ORconst [0x10000] x))) + for { + t := v.Type + x := v.Args[0] + if !(objabi.GOARM == 7) { + break + } + v.reset(OpARMCLZ) + v.Type = t + v0 := b.NewValue0(v.Pos, OpARMRBIT, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpARMORconst, typ.UInt32) + v1.AuxInt = 0x10000 + v1.AddArg(x) + v0.AddArg(v1) + v.AddArg(v0) + return true + } + return false +} +func rewriteValueARM_OpCtz16NonZero_0(v *Value) bool { + // match: (Ctz16NonZero x) + // cond: + // result: (Ctz32 x) + for { + x := v.Args[0] + v.reset(OpCtz32) + v.AddArg(x) + return true + } +} func rewriteValueARM_OpCtz32_0(v *Value) bool { b := v.Block - _ = b // match: (Ctz32 x) // cond: objabi.GOARM<=6 // result: (RSBconst [32] (CLZ (SUBconst (AND x (RSBconst [0] x)) [1]))) @@ -18088,6 +17690,72 @@ func rewriteValueARM_OpCtz32NonZero_0(v *Value) bool { return true } } +func rewriteValueARM_OpCtz8_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Ctz8 x) + // cond: objabi.GOARM<=6 + // result: (RSBconst [32] (CLZ (SUBconst (AND (ORconst [0x100] x) (RSBconst [0] (ORconst [0x100] x))) [1]))) + for { + t := v.Type + x := v.Args[0] + if !(objabi.GOARM <= 6) { + break + } + v.reset(OpARMRSBconst) + v.AuxInt = 32 + v0 := b.NewValue0(v.Pos, OpARMCLZ, t) + v1 := b.NewValue0(v.Pos, OpARMSUBconst, typ.UInt32) + v1.AuxInt = 1 + v2 := b.NewValue0(v.Pos, OpARMAND, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpARMORconst, typ.UInt32) + v3.AuxInt = 0x100 + v3.AddArg(x) + v2.AddArg(v3) + v4 := b.NewValue0(v.Pos, OpARMRSBconst, typ.UInt32) + v4.AuxInt = 0 + v5 := b.NewValue0(v.Pos, OpARMORconst, typ.UInt32) + v5.AuxInt = 0x100 + v5.AddArg(x) + v4.AddArg(v5) + v2.AddArg(v4) + v1.AddArg(v2) + v0.AddArg(v1) + v.AddArg(v0) + return true + } + // match: (Ctz8 x) + // cond: objabi.GOARM==7 + // result: (CLZ (RBIT (ORconst [0x100] x))) + for { + t := v.Type + x := v.Args[0] + if !(objabi.GOARM == 7) { + break + } + v.reset(OpARMCLZ) + v.Type = t + v0 := b.NewValue0(v.Pos, OpARMRBIT, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpARMORconst, typ.UInt32) + v1.AuxInt = 0x100 + v1.AddArg(x) + v0.AddArg(v1) + v.AddArg(v0) + return true + } + return false +} +func rewriteValueARM_OpCtz8NonZero_0(v *Value) bool { + // match: (Ctz8NonZero x) + // cond: + // result: (Ctz32 x) + for { + x := v.Args[0] + v.reset(OpCtz32) + v.AddArg(x) + return true + } +} func rewriteValueARM_OpCvt32Fto32_0(v *Value) bool { // match: (Cvt32Fto32 x) // cond: @@ -18200,16 +17868,13 @@ func rewriteValueARM_OpCvt64Fto32U_0(v *Value) bool { } func rewriteValueARM_OpDiv16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div16 x y) // cond: // result: (Div32 (SignExt16to32 x) (SignExt16to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpDiv32) v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) v0.AddArg(x) @@ -18222,16 +17887,13 @@ func rewriteValueARM_OpDiv16_0(v *Value) bool { } func rewriteValueARM_OpDiv16u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div16u x y) // cond: // result: (Div32u (ZeroExt16to32 x) (ZeroExt16to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpDiv32u) v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) v0.AddArg(x) @@ -18244,16 +17906,13 @@ func rewriteValueARM_OpDiv16u_0(v *Value) bool { } func rewriteValueARM_OpDiv32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div32 x y) // cond: // result: (SUB (XOR (Select0 (CALLudiv (SUB (XOR x (Signmask x)) (Signmask x)) (SUB (XOR y (Signmask y)) (Signmask y)))) (Signmask (XOR x y))) (Signmask (XOR x y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSUB) v0 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32) v1 := b.NewValue0(v.Pos, OpSelect0, typ.UInt32) @@ -18303,9 +17962,8 @@ func rewriteValueARM_OpDiv32F_0(v *Value) bool { // cond: // result: (DIVF x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMDIVF) v.AddArg(x) v.AddArg(y) @@ -18314,16 +17972,13 @@ func rewriteValueARM_OpDiv32F_0(v *Value) bool { } func rewriteValueARM_OpDiv32u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div32u x y) // cond: // result: (Select0 (CALLudiv x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v.Type = typ.UInt32 v0 := b.NewValue0(v.Pos, OpARMCALLudiv, types.NewTuple(typ.UInt32, typ.UInt32)) @@ -18338,9 +17993,8 @@ func rewriteValueARM_OpDiv64F_0(v *Value) bool { // cond: // result: (DIVD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMDIVD) v.AddArg(x) v.AddArg(y) @@ -18349,16 +18003,13 @@ func rewriteValueARM_OpDiv64F_0(v *Value) bool { } func rewriteValueARM_OpDiv8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div8 x y) // cond: // result: (Div32 (SignExt8to32 x) (SignExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpDiv32) v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) v0.AddArg(x) @@ -18371,16 +18022,13 @@ func rewriteValueARM_OpDiv8_0(v *Value) bool { } func rewriteValueARM_OpDiv8u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div8u x y) // cond: // result: (Div32u (ZeroExt8to32 x) (ZeroExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpDiv32u) v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) v0.AddArg(x) @@ -18393,16 +18041,13 @@ func rewriteValueARM_OpDiv8u_0(v *Value) bool { } func rewriteValueARM_OpEq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq16 x y) // cond: // result: (Equal (CMP (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMEqual) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -18417,14 +18062,12 @@ func rewriteValueARM_OpEq16_0(v *Value) bool { } func rewriteValueARM_OpEq32_0(v *Value) bool { b := v.Block - _ = b // match: (Eq32 x y) // cond: // result: (Equal (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMEqual) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v0.AddArg(x) @@ -18435,14 +18078,12 @@ func rewriteValueARM_OpEq32_0(v *Value) bool { } func rewriteValueARM_OpEq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Eq32F x y) // cond: // result: (Equal (CMPF x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMEqual) v0 := b.NewValue0(v.Pos, OpARMCMPF, types.TypeFlags) v0.AddArg(x) @@ -18453,14 +18094,12 @@ func rewriteValueARM_OpEq32F_0(v *Value) bool { } func rewriteValueARM_OpEq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Eq64F x y) // cond: // result: (Equal (CMPD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMEqual) v0 := b.NewValue0(v.Pos, OpARMCMPD, types.TypeFlags) v0.AddArg(x) @@ -18471,16 +18110,13 @@ func rewriteValueARM_OpEq64F_0(v *Value) bool { } func rewriteValueARM_OpEq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq8 x y) // cond: // result: (Equal (CMP (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMEqual) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -18495,16 +18131,13 @@ func rewriteValueARM_OpEq8_0(v *Value) bool { } func rewriteValueARM_OpEqB_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (EqB x y) // cond: // result: (XORconst [1] (XOR x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMXORconst) v.AuxInt = 1 v0 := b.NewValue0(v.Pos, OpARMXOR, typ.Bool) @@ -18516,14 +18149,12 @@ func rewriteValueARM_OpEqB_0(v *Value) bool { } func rewriteValueARM_OpEqPtr_0(v *Value) bool { b := v.Block - _ = b // match: (EqPtr x y) // cond: // result: (Equal (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMEqual) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v0.AddArg(x) @@ -18534,16 +18165,13 @@ func rewriteValueARM_OpEqPtr_0(v *Value) bool { } func rewriteValueARM_OpGeq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq16 x y) // cond: // result: (GreaterEqual (CMP (SignExt16to32 x) (SignExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMGreaterEqual) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) @@ -18558,16 +18186,13 @@ func rewriteValueARM_OpGeq16_0(v *Value) bool { } func rewriteValueARM_OpGeq16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq16U x y) // cond: // result: (GreaterEqualU (CMP (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMGreaterEqualU) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -18582,14 +18207,12 @@ func rewriteValueARM_OpGeq16U_0(v *Value) bool { } func rewriteValueARM_OpGeq32_0(v *Value) bool { b := v.Block - _ = b // match: (Geq32 x y) // cond: // result: (GreaterEqual (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMGreaterEqual) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v0.AddArg(x) @@ -18600,14 +18223,12 @@ func rewriteValueARM_OpGeq32_0(v *Value) bool { } func rewriteValueARM_OpGeq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Geq32F x y) // cond: // result: (GreaterEqual (CMPF x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMGreaterEqual) v0 := b.NewValue0(v.Pos, OpARMCMPF, types.TypeFlags) v0.AddArg(x) @@ -18618,14 +18239,12 @@ func rewriteValueARM_OpGeq32F_0(v *Value) bool { } func rewriteValueARM_OpGeq32U_0(v *Value) bool { b := v.Block - _ = b // match: (Geq32U x y) // cond: // result: (GreaterEqualU (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMGreaterEqualU) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v0.AddArg(x) @@ -18636,14 +18255,12 @@ func rewriteValueARM_OpGeq32U_0(v *Value) bool { } func rewriteValueARM_OpGeq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Geq64F x y) // cond: // result: (GreaterEqual (CMPD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMGreaterEqual) v0 := b.NewValue0(v.Pos, OpARMCMPD, types.TypeFlags) v0.AddArg(x) @@ -18654,16 +18271,13 @@ func rewriteValueARM_OpGeq64F_0(v *Value) bool { } func rewriteValueARM_OpGeq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq8 x y) // cond: // result: (GreaterEqual (CMP (SignExt8to32 x) (SignExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMGreaterEqual) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) @@ -18678,16 +18292,13 @@ func rewriteValueARM_OpGeq8_0(v *Value) bool { } func rewriteValueARM_OpGeq8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq8U x y) // cond: // result: (GreaterEqualU (CMP (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMGreaterEqualU) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -18729,16 +18340,13 @@ func rewriteValueARM_OpGetClosurePtr_0(v *Value) bool { } func rewriteValueARM_OpGreater16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater16 x y) // cond: // result: (GreaterThan (CMP (SignExt16to32 x) (SignExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMGreaterThan) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) @@ -18753,16 +18361,13 @@ func rewriteValueARM_OpGreater16_0(v *Value) bool { } func rewriteValueARM_OpGreater16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater16U x y) // cond: // result: (GreaterThanU (CMP (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMGreaterThanU) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -18777,14 +18382,12 @@ func rewriteValueARM_OpGreater16U_0(v *Value) bool { } func rewriteValueARM_OpGreater32_0(v *Value) bool { b := v.Block - _ = b // match: (Greater32 x y) // cond: // result: (GreaterThan (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMGreaterThan) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v0.AddArg(x) @@ -18795,14 +18398,12 @@ func rewriteValueARM_OpGreater32_0(v *Value) bool { } func rewriteValueARM_OpGreater32F_0(v *Value) bool { b := v.Block - _ = b // match: (Greater32F x y) // cond: // result: (GreaterThan (CMPF x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMGreaterThan) v0 := b.NewValue0(v.Pos, OpARMCMPF, types.TypeFlags) v0.AddArg(x) @@ -18813,14 +18414,12 @@ func rewriteValueARM_OpGreater32F_0(v *Value) bool { } func rewriteValueARM_OpGreater32U_0(v *Value) bool { b := v.Block - _ = b // match: (Greater32U x y) // cond: // result: (GreaterThanU (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMGreaterThanU) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v0.AddArg(x) @@ -18831,14 +18430,12 @@ func rewriteValueARM_OpGreater32U_0(v *Value) bool { } func rewriteValueARM_OpGreater64F_0(v *Value) bool { b := v.Block - _ = b // match: (Greater64F x y) // cond: // result: (GreaterThan (CMPD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMGreaterThan) v0 := b.NewValue0(v.Pos, OpARMCMPD, types.TypeFlags) v0.AddArg(x) @@ -18849,16 +18446,13 @@ func rewriteValueARM_OpGreater64F_0(v *Value) bool { } func rewriteValueARM_OpGreater8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater8 x y) // cond: // result: (GreaterThan (CMP (SignExt8to32 x) (SignExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMGreaterThan) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) @@ -18873,16 +18467,13 @@ func rewriteValueARM_OpGreater8_0(v *Value) bool { } func rewriteValueARM_OpGreater8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater8U x y) // cond: // result: (GreaterThanU (CMP (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMGreaterThanU) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -18900,9 +18491,8 @@ func rewriteValueARM_OpHmul32_0(v *Value) bool { // cond: // result: (HMUL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMHMUL) v.AddArg(x) v.AddArg(y) @@ -18914,9 +18504,8 @@ func rewriteValueARM_OpHmul32u_0(v *Value) bool { // cond: // result: (HMULU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMHMULU) v.AddArg(x) v.AddArg(y) @@ -18929,9 +18518,8 @@ func rewriteValueARM_OpInterCall_0(v *Value) bool { // result: (CALLinter [argwid] entry mem) for { argwid := v.AuxInt - _ = v.Args[1] - entry := v.Args[0] mem := v.Args[1] + entry := v.Args[0] v.reset(OpARMCALLinter) v.AuxInt = argwid v.AddArg(entry) @@ -18941,14 +18529,12 @@ func rewriteValueARM_OpInterCall_0(v *Value) bool { } func rewriteValueARM_OpIsInBounds_0(v *Value) bool { b := v.Block - _ = b // match: (IsInBounds idx len) // cond: // result: (LessThanU (CMP idx len)) for { - _ = v.Args[1] - idx := v.Args[0] len := v.Args[1] + idx := v.Args[0] v.reset(OpARMLessThanU) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v0.AddArg(idx) @@ -18959,7 +18545,6 @@ func rewriteValueARM_OpIsInBounds_0(v *Value) bool { } func rewriteValueARM_OpIsNonNil_0(v *Value) bool { b := v.Block - _ = b // match: (IsNonNil ptr) // cond: // result: (NotEqual (CMPconst [0] ptr)) @@ -18975,14 +18560,12 @@ func rewriteValueARM_OpIsNonNil_0(v *Value) bool { } func rewriteValueARM_OpIsSliceInBounds_0(v *Value) bool { b := v.Block - _ = b // match: (IsSliceInBounds idx len) // cond: // result: (LessEqualU (CMP idx len)) for { - _ = v.Args[1] - idx := v.Args[0] len := v.Args[1] + idx := v.Args[0] v.reset(OpARMLessEqualU) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v0.AddArg(idx) @@ -18993,16 +18576,13 @@ func rewriteValueARM_OpIsSliceInBounds_0(v *Value) bool { } func rewriteValueARM_OpLeq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq16 x y) // cond: // result: (LessEqual (CMP (SignExt16to32 x) (SignExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMLessEqual) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) @@ -19017,16 +18597,13 @@ func rewriteValueARM_OpLeq16_0(v *Value) bool { } func rewriteValueARM_OpLeq16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq16U x y) // cond: // result: (LessEqualU (CMP (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMLessEqualU) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -19041,14 +18618,12 @@ func rewriteValueARM_OpLeq16U_0(v *Value) bool { } func rewriteValueARM_OpLeq32_0(v *Value) bool { b := v.Block - _ = b // match: (Leq32 x y) // cond: // result: (LessEqual (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMLessEqual) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v0.AddArg(x) @@ -19059,14 +18634,12 @@ func rewriteValueARM_OpLeq32_0(v *Value) bool { } func rewriteValueARM_OpLeq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Leq32F x y) // cond: // result: (GreaterEqual (CMPF y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMGreaterEqual) v0 := b.NewValue0(v.Pos, OpARMCMPF, types.TypeFlags) v0.AddArg(y) @@ -19077,14 +18650,12 @@ func rewriteValueARM_OpLeq32F_0(v *Value) bool { } func rewriteValueARM_OpLeq32U_0(v *Value) bool { b := v.Block - _ = b // match: (Leq32U x y) // cond: // result: (LessEqualU (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMLessEqualU) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v0.AddArg(x) @@ -19095,14 +18666,12 @@ func rewriteValueARM_OpLeq32U_0(v *Value) bool { } func rewriteValueARM_OpLeq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Leq64F x y) // cond: // result: (GreaterEqual (CMPD y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMGreaterEqual) v0 := b.NewValue0(v.Pos, OpARMCMPD, types.TypeFlags) v0.AddArg(y) @@ -19113,16 +18682,13 @@ func rewriteValueARM_OpLeq64F_0(v *Value) bool { } func rewriteValueARM_OpLeq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq8 x y) // cond: // result: (LessEqual (CMP (SignExt8to32 x) (SignExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMLessEqual) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) @@ -19137,16 +18703,13 @@ func rewriteValueARM_OpLeq8_0(v *Value) bool { } func rewriteValueARM_OpLeq8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq8U x y) // cond: // result: (LessEqualU (CMP (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMLessEqualU) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -19161,16 +18724,13 @@ func rewriteValueARM_OpLeq8U_0(v *Value) bool { } func rewriteValueARM_OpLess16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less16 x y) // cond: // result: (LessThan (CMP (SignExt16to32 x) (SignExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMLessThan) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) @@ -19185,16 +18745,13 @@ func rewriteValueARM_OpLess16_0(v *Value) bool { } func rewriteValueARM_OpLess16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less16U x y) // cond: // result: (LessThanU (CMP (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMLessThanU) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -19209,14 +18766,12 @@ func rewriteValueARM_OpLess16U_0(v *Value) bool { } func rewriteValueARM_OpLess32_0(v *Value) bool { b := v.Block - _ = b // match: (Less32 x y) // cond: // result: (LessThan (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMLessThan) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v0.AddArg(x) @@ -19227,14 +18782,12 @@ func rewriteValueARM_OpLess32_0(v *Value) bool { } func rewriteValueARM_OpLess32F_0(v *Value) bool { b := v.Block - _ = b // match: (Less32F x y) // cond: // result: (GreaterThan (CMPF y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMGreaterThan) v0 := b.NewValue0(v.Pos, OpARMCMPF, types.TypeFlags) v0.AddArg(y) @@ -19245,14 +18798,12 @@ func rewriteValueARM_OpLess32F_0(v *Value) bool { } func rewriteValueARM_OpLess32U_0(v *Value) bool { b := v.Block - _ = b // match: (Less32U x y) // cond: // result: (LessThanU (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMLessThanU) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v0.AddArg(x) @@ -19263,14 +18814,12 @@ func rewriteValueARM_OpLess32U_0(v *Value) bool { } func rewriteValueARM_OpLess64F_0(v *Value) bool { b := v.Block - _ = b // match: (Less64F x y) // cond: // result: (GreaterThan (CMPD y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMGreaterThan) v0 := b.NewValue0(v.Pos, OpARMCMPD, types.TypeFlags) v0.AddArg(y) @@ -19281,16 +18830,13 @@ func rewriteValueARM_OpLess64F_0(v *Value) bool { } func rewriteValueARM_OpLess8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less8 x y) // cond: // result: (LessThan (CMP (SignExt8to32 x) (SignExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMLessThan) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) @@ -19305,16 +18851,13 @@ func rewriteValueARM_OpLess8_0(v *Value) bool { } func rewriteValueARM_OpLess8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less8U x y) // cond: // result: (LessThanU (CMP (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMLessThanU) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -19333,9 +18876,8 @@ func rewriteValueARM_OpLoad_0(v *Value) bool { // result: (MOVBUload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.IsBoolean()) { break } @@ -19349,9 +18891,8 @@ func rewriteValueARM_OpLoad_0(v *Value) bool { // result: (MOVBload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is8BitInt(t) && isSigned(t)) { break } @@ -19365,9 +18906,8 @@ func rewriteValueARM_OpLoad_0(v *Value) bool { // result: (MOVBUload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is8BitInt(t) && !isSigned(t)) { break } @@ -19381,9 +18921,8 @@ func rewriteValueARM_OpLoad_0(v *Value) bool { // result: (MOVHload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is16BitInt(t) && isSigned(t)) { break } @@ -19397,9 +18936,8 @@ func rewriteValueARM_OpLoad_0(v *Value) bool { // result: (MOVHUload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is16BitInt(t) && !isSigned(t)) { break } @@ -19413,9 +18951,8 @@ func rewriteValueARM_OpLoad_0(v *Value) bool { // result: (MOVWload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is32BitInt(t) || isPtr(t)) { break } @@ -19429,9 +18966,8 @@ func rewriteValueARM_OpLoad_0(v *Value) bool { // result: (MOVFload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is32BitFloat(t)) { break } @@ -19445,9 +18981,8 @@ func rewriteValueARM_OpLoad_0(v *Value) bool { // result: (MOVDload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is64BitFloat(t)) { break } @@ -19474,16 +19009,13 @@ func rewriteValueARM_OpLocalAddr_0(v *Value) bool { } func rewriteValueARM_OpLsh16x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x16 x y) // cond: // result: (CMOVWHSconst (SLL x (ZeroExt16to32 y)) (CMPconst [256] (ZeroExt16to32 y)) [0]) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMCMOVWHSconst) v.AuxInt = 0 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type) @@ -19503,14 +19035,12 @@ func rewriteValueARM_OpLsh16x16_0(v *Value) bool { } func rewriteValueARM_OpLsh16x32_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh16x32 x y) // cond: // result: (CMOVWHSconst (SLL x y) (CMPconst [256] y) [0]) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMCMOVWHSconst) v.AuxInt = 0 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type) @@ -19565,16 +19095,13 @@ func rewriteValueARM_OpLsh16x64_0(v *Value) bool { } func rewriteValueARM_OpLsh16x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x8 x y) // cond: // result: (SLL x (ZeroExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSLL) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -19585,16 +19112,13 @@ func rewriteValueARM_OpLsh16x8_0(v *Value) bool { } func rewriteValueARM_OpLsh32x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x16 x y) // cond: // result: (CMOVWHSconst (SLL x (ZeroExt16to32 y)) (CMPconst [256] (ZeroExt16to32 y)) [0]) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMCMOVWHSconst) v.AuxInt = 0 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type) @@ -19614,14 +19138,12 @@ func rewriteValueARM_OpLsh32x16_0(v *Value) bool { } func rewriteValueARM_OpLsh32x32_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh32x32 x y) // cond: // result: (CMOVWHSconst (SLL x y) (CMPconst [256] y) [0]) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMCMOVWHSconst) v.AuxInt = 0 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type) @@ -19676,16 +19198,13 @@ func rewriteValueARM_OpLsh32x64_0(v *Value) bool { } func rewriteValueARM_OpLsh32x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x8 x y) // cond: // result: (SLL x (ZeroExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSLL) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -19696,16 +19215,13 @@ func rewriteValueARM_OpLsh32x8_0(v *Value) bool { } func rewriteValueARM_OpLsh8x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x16 x y) // cond: // result: (CMOVWHSconst (SLL x (ZeroExt16to32 y)) (CMPconst [256] (ZeroExt16to32 y)) [0]) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMCMOVWHSconst) v.AuxInt = 0 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type) @@ -19725,14 +19241,12 @@ func rewriteValueARM_OpLsh8x16_0(v *Value) bool { } func rewriteValueARM_OpLsh8x32_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh8x32 x y) // cond: // result: (CMOVWHSconst (SLL x y) (CMPconst [256] y) [0]) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMCMOVWHSconst) v.AuxInt = 0 v0 := b.NewValue0(v.Pos, OpARMSLL, x.Type) @@ -19787,16 +19301,13 @@ func rewriteValueARM_OpLsh8x64_0(v *Value) bool { } func rewriteValueARM_OpLsh8x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x8 x y) // cond: // result: (SLL x (ZeroExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSLL) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -19807,16 +19318,13 @@ func rewriteValueARM_OpLsh8x8_0(v *Value) bool { } func rewriteValueARM_OpMod16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod16 x y) // cond: // result: (Mod32 (SignExt16to32 x) (SignExt16to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMod32) v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) v0.AddArg(x) @@ -19829,16 +19337,13 @@ func rewriteValueARM_OpMod16_0(v *Value) bool { } func rewriteValueARM_OpMod16u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod16u x y) // cond: // result: (Mod32u (ZeroExt16to32 x) (ZeroExt16to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMod32u) v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) v0.AddArg(x) @@ -19851,16 +19356,13 @@ func rewriteValueARM_OpMod16u_0(v *Value) bool { } func rewriteValueARM_OpMod32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod32 x y) // cond: // result: (SUB (XOR (Select1 (CALLudiv (SUB (XOR x (Signmask x)) (Signmask x)) (SUB (XOR y (Signmask y)) (Signmask y)))) (Signmask x)) (Signmask x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSUB) v0 := b.NewValue0(v.Pos, OpARMXOR, typ.UInt32) v1 := b.NewValue0(v.Pos, OpSelect1, typ.UInt32) @@ -19901,16 +19403,13 @@ func rewriteValueARM_OpMod32_0(v *Value) bool { } func rewriteValueARM_OpMod32u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod32u x y) // cond: // result: (Select1 (CALLudiv x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v.Type = typ.UInt32 v0 := b.NewValue0(v.Pos, OpARMCALLudiv, types.NewTuple(typ.UInt32, typ.UInt32)) @@ -19922,16 +19421,13 @@ func rewriteValueARM_OpMod32u_0(v *Value) bool { } func rewriteValueARM_OpMod8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod8 x y) // cond: // result: (Mod32 (SignExt8to32 x) (SignExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMod32) v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) v0.AddArg(x) @@ -19944,16 +19440,13 @@ func rewriteValueARM_OpMod8_0(v *Value) bool { } func rewriteValueARM_OpMod8u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod8u x y) // cond: // result: (Mod32u (ZeroExt8to32 x) (ZeroExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMod32u) v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) v0.AddArg(x) @@ -19966,11 +19459,8 @@ func rewriteValueARM_OpMod8u_0(v *Value) bool { } func rewriteValueARM_OpMove_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Move [0] _ _ mem) // cond: // result: mem @@ -19978,7 +19468,6 @@ func rewriteValueARM_OpMove_0(v *Value) bool { if v.AuxInt != 0 { break } - _ = v.Args[2] mem := v.Args[2] v.reset(OpCopy) v.Type = mem.Type @@ -19992,10 +19481,9 @@ func rewriteValueARM_OpMove_0(v *Value) bool { if v.AuxInt != 1 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVBstore) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpARMMOVBUload, typ.UInt8) @@ -20013,10 +19501,9 @@ func rewriteValueARM_OpMove_0(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%2 == 0) { break } @@ -20036,10 +19523,9 @@ func rewriteValueARM_OpMove_0(v *Value) bool { if v.AuxInt != 2 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVBstore) v.AuxInt = 1 v.AddArg(dst) @@ -20066,10 +19552,9 @@ func rewriteValueARM_OpMove_0(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -20090,10 +19575,9 @@ func rewriteValueARM_OpMove_0(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%2 == 0) { break } @@ -20122,10 +19606,9 @@ func rewriteValueARM_OpMove_0(v *Value) bool { if v.AuxInt != 4 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVBstore) v.AuxInt = 3 v.AddArg(dst) @@ -20169,10 +19652,9 @@ func rewriteValueARM_OpMove_0(v *Value) bool { if v.AuxInt != 3 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpARMMOVBstore) v.AuxInt = 2 v.AddArg(dst) @@ -20206,10 +19688,9 @@ func rewriteValueARM_OpMove_0(v *Value) bool { for { s := v.AuxInt t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s%4 == 0 && s > 4 && s <= 512 && t.(*types.Type).Alignment()%4 == 0 && !config.noDuffDevice) { break } @@ -20226,10 +19707,9 @@ func rewriteValueARM_OpMove_0(v *Value) bool { for { s := v.AuxInt t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !((s > 512 || config.noDuffDevice) || t.(*types.Type).Alignment()%4 != 0) { break } @@ -20251,9 +19731,8 @@ func rewriteValueARM_OpMul16_0(v *Value) bool { // cond: // result: (MUL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMMUL) v.AddArg(x) v.AddArg(y) @@ -20265,9 +19744,8 @@ func rewriteValueARM_OpMul32_0(v *Value) bool { // cond: // result: (MUL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMMUL) v.AddArg(x) v.AddArg(y) @@ -20279,9 +19757,8 @@ func rewriteValueARM_OpMul32F_0(v *Value) bool { // cond: // result: (MULF x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMMULF) v.AddArg(x) v.AddArg(y) @@ -20293,9 +19770,8 @@ func rewriteValueARM_OpMul32uhilo_0(v *Value) bool { // cond: // result: (MULLU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMMULLU) v.AddArg(x) v.AddArg(y) @@ -20307,9 +19783,8 @@ func rewriteValueARM_OpMul64F_0(v *Value) bool { // cond: // result: (MULD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMMULD) v.AddArg(x) v.AddArg(y) @@ -20321,9 +19796,8 @@ func rewriteValueARM_OpMul8_0(v *Value) bool { // cond: // result: (MUL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMMUL) v.AddArg(x) v.AddArg(y) @@ -20390,16 +19864,13 @@ func rewriteValueARM_OpNeg8_0(v *Value) bool { } func rewriteValueARM_OpNeq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq16 x y) // cond: // result: (NotEqual (CMP (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMNotEqual) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -20414,14 +19885,12 @@ func rewriteValueARM_OpNeq16_0(v *Value) bool { } func rewriteValueARM_OpNeq32_0(v *Value) bool { b := v.Block - _ = b // match: (Neq32 x y) // cond: // result: (NotEqual (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMNotEqual) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v0.AddArg(x) @@ -20432,14 +19901,12 @@ func rewriteValueARM_OpNeq32_0(v *Value) bool { } func rewriteValueARM_OpNeq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Neq32F x y) // cond: // result: (NotEqual (CMPF x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMNotEqual) v0 := b.NewValue0(v.Pos, OpARMCMPF, types.TypeFlags) v0.AddArg(x) @@ -20450,14 +19917,12 @@ func rewriteValueARM_OpNeq32F_0(v *Value) bool { } func rewriteValueARM_OpNeq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Neq64F x y) // cond: // result: (NotEqual (CMPD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMNotEqual) v0 := b.NewValue0(v.Pos, OpARMCMPD, types.TypeFlags) v0.AddArg(x) @@ -20468,16 +19933,13 @@ func rewriteValueARM_OpNeq64F_0(v *Value) bool { } func rewriteValueARM_OpNeq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq8 x y) // cond: // result: (NotEqual (CMP (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMNotEqual) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -20495,9 +19957,8 @@ func rewriteValueARM_OpNeqB_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMXOR) v.AddArg(x) v.AddArg(y) @@ -20506,14 +19967,12 @@ func rewriteValueARM_OpNeqB_0(v *Value) bool { } func rewriteValueARM_OpNeqPtr_0(v *Value) bool { b := v.Block - _ = b // match: (NeqPtr x y) // cond: // result: (NotEqual (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMNotEqual) v0 := b.NewValue0(v.Pos, OpARMCMP, types.TypeFlags) v0.AddArg(x) @@ -20527,9 +19986,8 @@ func rewriteValueARM_OpNilCheck_0(v *Value) bool { // cond: // result: (LoweredNilCheck ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARMLoweredNilCheck) v.AddArg(ptr) v.AddArg(mem) @@ -20580,9 +20038,8 @@ func rewriteValueARM_OpOr16_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMOR) v.AddArg(x) v.AddArg(y) @@ -20594,9 +20051,8 @@ func rewriteValueARM_OpOr32_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMOR) v.AddArg(x) v.AddArg(y) @@ -20608,9 +20064,8 @@ func rewriteValueARM_OpOr8_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMOR) v.AddArg(x) v.AddArg(y) @@ -20622,15 +20077,217 @@ func rewriteValueARM_OpOrB_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMOR) v.AddArg(x) v.AddArg(y) return true } } +func rewriteValueARM_OpPanicBounds_0(v *Value) bool { + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 0 + // result: (LoweredPanicBoundsA [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 0) { + break + } + v.reset(OpARMLoweredPanicBoundsA) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 1 + // result: (LoweredPanicBoundsB [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 1) { + break + } + v.reset(OpARMLoweredPanicBoundsB) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 2 + // result: (LoweredPanicBoundsC [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 2) { + break + } + v.reset(OpARMLoweredPanicBoundsC) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + return false +} +func rewriteValueARM_OpPanicExtend_0(v *Value) bool { + // match: (PanicExtend [kind] hi lo y mem) + // cond: boundsABI(kind) == 0 + // result: (LoweredPanicExtendA [kind] hi lo y mem) + for { + kind := v.AuxInt + mem := v.Args[3] + hi := v.Args[0] + lo := v.Args[1] + y := v.Args[2] + if !(boundsABI(kind) == 0) { + break + } + v.reset(OpARMLoweredPanicExtendA) + v.AuxInt = kind + v.AddArg(hi) + v.AddArg(lo) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicExtend [kind] hi lo y mem) + // cond: boundsABI(kind) == 1 + // result: (LoweredPanicExtendB [kind] hi lo y mem) + for { + kind := v.AuxInt + mem := v.Args[3] + hi := v.Args[0] + lo := v.Args[1] + y := v.Args[2] + if !(boundsABI(kind) == 1) { + break + } + v.reset(OpARMLoweredPanicExtendB) + v.AuxInt = kind + v.AddArg(hi) + v.AddArg(lo) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicExtend [kind] hi lo y mem) + // cond: boundsABI(kind) == 2 + // result: (LoweredPanicExtendC [kind] hi lo y mem) + for { + kind := v.AuxInt + mem := v.Args[3] + hi := v.Args[0] + lo := v.Args[1] + y := v.Args[2] + if !(boundsABI(kind) == 2) { + break + } + v.reset(OpARMLoweredPanicExtendC) + v.AuxInt = kind + v.AddArg(hi) + v.AddArg(lo) + v.AddArg(y) + v.AddArg(mem) + return true + } + return false +} +func rewriteValueARM_OpRotateLeft16_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (RotateLeft16 x (MOVWconst [c])) + // cond: + // result: (Or16 (Lsh16x32 x (MOVWconst [c&15])) (Rsh16Ux32 x (MOVWconst [-c&15]))) + for { + t := v.Type + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpARMMOVWconst { + break + } + c := v_1.AuxInt + v.reset(OpOr16) + v0 := b.NewValue0(v.Pos, OpLsh16x32, t) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32) + v1.AuxInt = c & 15 + v0.AddArg(v1) + v.AddArg(v0) + v2 := b.NewValue0(v.Pos, OpRsh16Ux32, t) + v2.AddArg(x) + v3 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32) + v3.AuxInt = -c & 15 + v2.AddArg(v3) + v.AddArg(v2) + return true + } + return false +} +func rewriteValueARM_OpRotateLeft32_0(v *Value) bool { + // match: (RotateLeft32 x (MOVWconst [c])) + // cond: + // result: (SRRconst [-c&31] x) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpARMMOVWconst { + break + } + c := v_1.AuxInt + v.reset(OpARMSRRconst) + v.AuxInt = -c & 31 + v.AddArg(x) + return true + } + return false +} +func rewriteValueARM_OpRotateLeft8_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (RotateLeft8 x (MOVWconst [c])) + // cond: + // result: (Or8 (Lsh8x32 x (MOVWconst [c&7])) (Rsh8Ux32 x (MOVWconst [-c&7]))) + for { + t := v.Type + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpARMMOVWconst { + break + } + c := v_1.AuxInt + v.reset(OpOr8) + v0 := b.NewValue0(v.Pos, OpLsh8x32, t) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32) + v1.AuxInt = c & 7 + v0.AddArg(v1) + v.AddArg(v0) + v2 := b.NewValue0(v.Pos, OpRsh8Ux32, t) + v2.AddArg(x) + v3 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32) + v3.AuxInt = -c & 7 + v2.AddArg(v3) + v.AddArg(v2) + return true + } + return false +} func rewriteValueARM_OpRound32F_0(v *Value) bool { // match: (Round32F x) // cond: @@ -20657,16 +20314,13 @@ func rewriteValueARM_OpRound64F_0(v *Value) bool { } func rewriteValueARM_OpRsh16Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux16 x y) // cond: // result: (CMOVWHSconst (SRL (ZeroExt16to32 x) (ZeroExt16to32 y)) (CMPconst [256] (ZeroExt16to32 y)) [0]) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMCMOVWHSconst) v.AuxInt = 0 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type) @@ -20688,16 +20342,13 @@ func rewriteValueARM_OpRsh16Ux16_0(v *Value) bool { } func rewriteValueARM_OpRsh16Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux32 x y) // cond: // result: (CMOVWHSconst (SRL (ZeroExt16to32 x) y) (CMPconst [256] y) [0]) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMCMOVWHSconst) v.AuxInt = 0 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type) @@ -20715,9 +20366,7 @@ func rewriteValueARM_OpRsh16Ux32_0(v *Value) bool { } func rewriteValueARM_OpRsh16Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux64 x (Const64 [c])) // cond: uint64(c) < 16 // result: (SRLconst (SLLconst x [16]) [c+16]) @@ -20761,16 +20410,13 @@ func rewriteValueARM_OpRsh16Ux64_0(v *Value) bool { } func rewriteValueARM_OpRsh16Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux8 x y) // cond: // result: (SRL (ZeroExt16to32 x) (ZeroExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSRL) v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) v0.AddArg(x) @@ -20783,16 +20429,13 @@ func rewriteValueARM_OpRsh16Ux8_0(v *Value) bool { } func rewriteValueARM_OpRsh16x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x16 x y) // cond: // result: (SRAcond (SignExt16to32 x) (ZeroExt16to32 y) (CMPconst [256] (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSRAcond) v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) v0.AddArg(x) @@ -20811,16 +20454,13 @@ func rewriteValueARM_OpRsh16x16_0(v *Value) bool { } func rewriteValueARM_OpRsh16x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x32 x y) // cond: // result: (SRAcond (SignExt16to32 x) y (CMPconst [256] y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSRAcond) v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) v0.AddArg(x) @@ -20835,9 +20475,7 @@ func rewriteValueARM_OpRsh16x32_0(v *Value) bool { } func rewriteValueARM_OpRsh16x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x64 x (Const64 [c])) // cond: uint64(c) < 16 // result: (SRAconst (SLLconst x [16]) [c+16]) @@ -20886,16 +20524,13 @@ func rewriteValueARM_OpRsh16x64_0(v *Value) bool { } func rewriteValueARM_OpRsh16x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x8 x y) // cond: // result: (SRA (SignExt16to32 x) (ZeroExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSRA) v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) v0.AddArg(x) @@ -20908,16 +20543,13 @@ func rewriteValueARM_OpRsh16x8_0(v *Value) bool { } func rewriteValueARM_OpRsh32Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux16 x y) // cond: // result: (CMOVWHSconst (SRL x (ZeroExt16to32 y)) (CMPconst [256] (ZeroExt16to32 y)) [0]) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMCMOVWHSconst) v.AuxInt = 0 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type) @@ -20937,14 +20569,12 @@ func rewriteValueARM_OpRsh32Ux16_0(v *Value) bool { } func rewriteValueARM_OpRsh32Ux32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32Ux32 x y) // cond: // result: (CMOVWHSconst (SRL x y) (CMPconst [256] y) [0]) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMCMOVWHSconst) v.AuxInt = 0 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type) @@ -20999,16 +20629,13 @@ func rewriteValueARM_OpRsh32Ux64_0(v *Value) bool { } func rewriteValueARM_OpRsh32Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux8 x y) // cond: // result: (SRL x (ZeroExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSRL) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -21019,16 +20646,13 @@ func rewriteValueARM_OpRsh32Ux8_0(v *Value) bool { } func rewriteValueARM_OpRsh32x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x16 x y) // cond: // result: (SRAcond x (ZeroExt16to32 y) (CMPconst [256] (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSRAcond) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -21045,14 +20669,12 @@ func rewriteValueARM_OpRsh32x16_0(v *Value) bool { } func rewriteValueARM_OpRsh32x32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32x32 x y) // cond: // result: (SRAcond x y (CMPconst [256] y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSRAcond) v.AddArg(x) v.AddArg(y) @@ -21106,16 +20728,13 @@ func rewriteValueARM_OpRsh32x64_0(v *Value) bool { } func rewriteValueARM_OpRsh32x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x8 x y) // cond: // result: (SRA x (ZeroExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSRA) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -21126,16 +20745,13 @@ func rewriteValueARM_OpRsh32x8_0(v *Value) bool { } func rewriteValueARM_OpRsh8Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux16 x y) // cond: // result: (CMOVWHSconst (SRL (ZeroExt8to32 x) (ZeroExt16to32 y)) (CMPconst [256] (ZeroExt16to32 y)) [0]) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMCMOVWHSconst) v.AuxInt = 0 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type) @@ -21157,16 +20773,13 @@ func rewriteValueARM_OpRsh8Ux16_0(v *Value) bool { } func rewriteValueARM_OpRsh8Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux32 x y) // cond: // result: (CMOVWHSconst (SRL (ZeroExt8to32 x) y) (CMPconst [256] y) [0]) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMCMOVWHSconst) v.AuxInt = 0 v0 := b.NewValue0(v.Pos, OpARMSRL, x.Type) @@ -21184,9 +20797,7 @@ func rewriteValueARM_OpRsh8Ux32_0(v *Value) bool { } func rewriteValueARM_OpRsh8Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux64 x (Const64 [c])) // cond: uint64(c) < 8 // result: (SRLconst (SLLconst x [24]) [c+24]) @@ -21230,16 +20841,13 @@ func rewriteValueARM_OpRsh8Ux64_0(v *Value) bool { } func rewriteValueARM_OpRsh8Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux8 x y) // cond: // result: (SRL (ZeroExt8to32 x) (ZeroExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSRL) v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) v0.AddArg(x) @@ -21252,16 +20860,13 @@ func rewriteValueARM_OpRsh8Ux8_0(v *Value) bool { } func rewriteValueARM_OpRsh8x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x16 x y) // cond: // result: (SRAcond (SignExt8to32 x) (ZeroExt16to32 y) (CMPconst [256] (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSRAcond) v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) v0.AddArg(x) @@ -21280,16 +20885,13 @@ func rewriteValueARM_OpRsh8x16_0(v *Value) bool { } func rewriteValueARM_OpRsh8x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x32 x y) // cond: // result: (SRAcond (SignExt8to32 x) y (CMPconst [256] y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSRAcond) v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) v0.AddArg(x) @@ -21304,9 +20906,7 @@ func rewriteValueARM_OpRsh8x32_0(v *Value) bool { } func rewriteValueARM_OpRsh8x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x64 x (Const64 [c])) // cond: uint64(c) < 8 // result: (SRAconst (SLLconst x [24]) [c+24]) @@ -21355,16 +20955,13 @@ func rewriteValueARM_OpRsh8x64_0(v *Value) bool { } func rewriteValueARM_OpRsh8x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x8 x y) // cond: // result: (SRA (SignExt8to32 x) (ZeroExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSRA) v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) v0.AddArg(x) @@ -21562,7 +21159,6 @@ func rewriteValueARM_OpSignmask_0(v *Value) bool { } func rewriteValueARM_OpSlicemask_0(v *Value) bool { b := v.Block - _ = b // match: (Slicemask x) // cond: // result: (SRAconst (RSBconst [0] x) [31]) @@ -21610,10 +21206,9 @@ func rewriteValueARM_OpStore_0(v *Value) bool { // result: (MOVBstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 1) { break } @@ -21628,10 +21223,9 @@ func rewriteValueARM_OpStore_0(v *Value) bool { // result: (MOVHstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 2) { break } @@ -21646,10 +21240,9 @@ func rewriteValueARM_OpStore_0(v *Value) bool { // result: (MOVWstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 4 && !is32BitFloat(val.Type)) { break } @@ -21664,10 +21257,9 @@ func rewriteValueARM_OpStore_0(v *Value) bool { // result: (MOVFstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 4 && is32BitFloat(val.Type)) { break } @@ -21682,10 +21274,9 @@ func rewriteValueARM_OpStore_0(v *Value) bool { // result: (MOVDstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 8 && is64BitFloat(val.Type)) { break } @@ -21702,9 +21293,8 @@ func rewriteValueARM_OpSub16_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSUB) v.AddArg(x) v.AddArg(y) @@ -21716,9 +21306,8 @@ func rewriteValueARM_OpSub32_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSUB) v.AddArg(x) v.AddArg(y) @@ -21730,9 +21319,8 @@ func rewriteValueARM_OpSub32F_0(v *Value) bool { // cond: // result: (SUBF x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSUBF) v.AddArg(x) v.AddArg(y) @@ -21744,9 +21332,8 @@ func rewriteValueARM_OpSub32carry_0(v *Value) bool { // cond: // result: (SUBS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSUBS) v.AddArg(x) v.AddArg(y) @@ -21758,10 +21345,9 @@ func rewriteValueARM_OpSub32withcarry_0(v *Value) bool { // cond: // result: (SBC x y c) for { - _ = v.Args[2] + c := v.Args[2] x := v.Args[0] y := v.Args[1] - c := v.Args[2] v.reset(OpARMSBC) v.AddArg(x) v.AddArg(y) @@ -21774,9 +21360,8 @@ func rewriteValueARM_OpSub64F_0(v *Value) bool { // cond: // result: (SUBD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSUBD) v.AddArg(x) v.AddArg(y) @@ -21788,9 +21373,8 @@ func rewriteValueARM_OpSub8_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSUB) v.AddArg(x) v.AddArg(y) @@ -21802,9 +21386,8 @@ func rewriteValueARM_OpSubPtr_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMSUB) v.AddArg(x) v.AddArg(y) @@ -21853,10 +21436,9 @@ func rewriteValueARM_OpWB_0(v *Value) bool { // result: (LoweredWB {fn} destptr srcptr mem) for { fn := v.Aux - _ = v.Args[2] + mem := v.Args[2] destptr := v.Args[0] srcptr := v.Args[1] - mem := v.Args[2] v.reset(OpARMLoweredWB) v.Aux = fn v.AddArg(destptr) @@ -21870,9 +21452,8 @@ func rewriteValueARM_OpXor16_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMXOR) v.AddArg(x) v.AddArg(y) @@ -21884,9 +21465,8 @@ func rewriteValueARM_OpXor32_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMXOR) v.AddArg(x) v.AddArg(y) @@ -21898,9 +21478,8 @@ func rewriteValueARM_OpXor8_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARMXOR) v.AddArg(x) v.AddArg(y) @@ -21909,11 +21488,8 @@ func rewriteValueARM_OpXor8_0(v *Value) bool { } func rewriteValueARM_OpZero_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Zero [0] _ mem) // cond: // result: mem @@ -21921,7 +21497,6 @@ func rewriteValueARM_OpZero_0(v *Value) bool { if v.AuxInt != 0 { break } - _ = v.Args[1] mem := v.Args[1] v.reset(OpCopy) v.Type = mem.Type @@ -21935,9 +21510,8 @@ func rewriteValueARM_OpZero_0(v *Value) bool { if v.AuxInt != 1 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARMMOVBstore) v.AddArg(ptr) v0 := b.NewValue0(v.Pos, OpARMMOVWconst, typ.UInt32) @@ -21954,9 +21528,8 @@ func rewriteValueARM_OpZero_0(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.(*types.Type).Alignment()%2 == 0) { break } @@ -21975,9 +21548,8 @@ func rewriteValueARM_OpZero_0(v *Value) bool { if v.AuxInt != 2 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARMMOVBstore) v.AuxInt = 1 v.AddArg(ptr) @@ -22002,9 +21574,8 @@ func rewriteValueARM_OpZero_0(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -22024,9 +21595,8 @@ func rewriteValueARM_OpZero_0(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.(*types.Type).Alignment()%2 == 0) { break } @@ -22053,9 +21623,8 @@ func rewriteValueARM_OpZero_0(v *Value) bool { if v.AuxInt != 4 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARMMOVBstore) v.AuxInt = 3 v.AddArg(ptr) @@ -22093,9 +21662,8 @@ func rewriteValueARM_OpZero_0(v *Value) bool { if v.AuxInt != 3 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARMMOVBstore) v.AuxInt = 2 v.AddArg(ptr) @@ -22125,9 +21693,8 @@ func rewriteValueARM_OpZero_0(v *Value) bool { for { s := v.AuxInt t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(s%4 == 0 && s > 4 && s <= 512 && t.(*types.Type).Alignment()%4 == 0 && !config.noDuffDevice) { break } @@ -22146,9 +21713,8 @@ func rewriteValueARM_OpZero_0(v *Value) bool { for { s := v.AuxInt t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !((s > 512 || config.noDuffDevice) || t.(*types.Type).Alignment()%4 != 0) { break } @@ -22202,9 +21768,7 @@ func rewriteValueARM_OpZeroExt8to32_0(v *Value) bool { } func rewriteValueARM_OpZeromask_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Zeromask x) // cond: // result: (SRAconst (RSBshiftRL x x [1]) [31]) @@ -22222,21 +21786,16 @@ func rewriteValueARM_OpZeromask_0(v *Value) bool { } func rewriteBlockARM(b *Block) bool { config := b.Func.Config - _ = config - fe := b.Func.fe - _ = fe typ := &config.Types _ = typ + v := b.Control + _ = v switch b.Kind { case BlockARMEQ: // match: (EQ (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagEQ { - break - } + for v.Op == OpARMFlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -22245,11 +21804,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (FlagLT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagLT_ULT { - break - } + for v.Op == OpARMFlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -22259,11 +21814,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (FlagLT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagLT_UGT { - break - } + for v.Op == OpARMFlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -22273,11 +21824,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (FlagGT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagGT_ULT { - break - } + for v.Op == OpARMFlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -22287,11 +21834,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (FlagGT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagGT_UGT { - break - } + for v.Op == OpARMFlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -22301,11 +21844,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (InvertFlags cmp) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != OpARMInvertFlags { - break - } + for v.Op == OpARMInvertFlags { cmp := v.Args[0] b.Kind = BlockARMEQ b.SetControl(cmp) @@ -22315,11 +21854,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(SUB x y)) yes no) // cond: l.Uses==1 // result: (EQ (CMP x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22327,9 +21862,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUB { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -22344,11 +21878,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(MULS x y a)) yes no) // cond: l.Uses==1 // result: (EQ (CMP a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22356,10 +21886,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMMULS { break } - _ = l.Args[2] + a := l.Args[2] x := l.Args[0] y := l.Args[1] - a := l.Args[2] if !(l.Uses == 1) { break } @@ -22377,11 +21906,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(SUBconst [c] x)) yes no) // cond: l.Uses==1 // result: (EQ (CMPconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22405,11 +21930,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(SUBshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (EQ (CMPshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22418,9 +21939,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -22436,11 +21956,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(SUBshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (EQ (CMPshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22449,9 +21965,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -22467,11 +21982,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(SUBshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (EQ (CMPshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22480,9 +21991,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -22498,11 +22008,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(SUBshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (EQ (CMPshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22510,10 +22016,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUBshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -22529,11 +22034,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(SUBshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (EQ (CMPshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22541,10 +22042,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUBshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -22560,11 +22060,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(SUBshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (EQ (CMPshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22572,10 +22068,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUBshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -22591,11 +22086,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(ADD x y)) yes no) // cond: l.Uses==1 // result: (EQ (CMN x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22603,9 +22094,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADD { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -22620,11 +22110,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(MULA x y a)) yes no) // cond: l.Uses==1 // result: (EQ (CMN a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22632,10 +22118,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMMULA { break } - _ = l.Args[2] + a := l.Args[2] x := l.Args[0] y := l.Args[1] - a := l.Args[2] if !(l.Uses == 1) { break } @@ -22653,11 +22138,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(ADDconst [c] x)) yes no) // cond: l.Uses==1 // result: (EQ (CMNconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22681,11 +22162,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(ADDshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (EQ (CMNshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22694,9 +22171,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -22712,11 +22188,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(ADDshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (EQ (CMNshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22725,9 +22197,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -22743,11 +22214,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(ADDshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (EQ (CMNshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22756,9 +22223,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -22774,11 +22240,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(ADDshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (EQ (CMNshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22786,10 +22248,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADDshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -22805,11 +22266,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(ADDshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (EQ (CMNshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22817,10 +22274,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADDshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -22836,11 +22292,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(ADDshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (EQ (CMNshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22848,10 +22300,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADDshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -22867,11 +22318,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(AND x y)) yes no) // cond: l.Uses==1 // result: (EQ (TST x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22879,9 +22326,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMAND { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -22896,11 +22342,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(ANDconst [c] x)) yes no) // cond: l.Uses==1 // result: (EQ (TSTconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22924,11 +22366,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(ANDshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (EQ (TSTshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22937,9 +22375,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -22955,11 +22392,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(ANDshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (EQ (TSTshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22968,9 +22401,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -22986,11 +22418,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(ANDshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (EQ (TSTshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -22999,9 +22427,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -23017,11 +22444,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(ANDshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (EQ (TSTshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23029,10 +22452,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMANDshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -23048,11 +22470,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(ANDshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (EQ (TSTshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23060,10 +22478,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMANDshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -23079,11 +22496,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(ANDshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (EQ (TSTshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23091,10 +22504,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMANDshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -23110,11 +22522,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(XOR x y)) yes no) // cond: l.Uses==1 // result: (EQ (TEQ x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23122,9 +22530,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXOR { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -23139,11 +22546,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(XORconst [c] x)) yes no) // cond: l.Uses==1 // result: (EQ (TEQconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23167,11 +22570,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(XORshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (EQ (TEQshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23180,9 +22579,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -23198,11 +22596,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(XORshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (EQ (TEQshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23211,9 +22605,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -23229,11 +22622,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(XORshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (EQ (TEQshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23242,9 +22631,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -23260,11 +22648,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(XORshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (EQ (TEQshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23272,10 +22656,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXORshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -23291,11 +22674,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(XORshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (EQ (TEQshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23303,10 +22682,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXORshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -23322,11 +22700,7 @@ func rewriteBlockARM(b *Block) bool { // match: (EQ (CMPconst [0] l:(XORshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (EQ (TEQshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23334,10 +22708,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXORshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -23354,11 +22727,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagEQ { - break - } + for v.Op == OpARMFlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -23367,11 +22736,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (FlagLT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagLT_ULT { - break - } + for v.Op == OpARMFlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -23381,11 +22746,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (FlagLT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagLT_UGT { - break - } + for v.Op == OpARMFlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -23395,11 +22756,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (FlagGT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagGT_ULT { - break - } + for v.Op == OpARMFlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -23408,11 +22765,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (FlagGT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagGT_UGT { - break - } + for v.Op == OpARMFlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -23421,11 +22774,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (InvertFlags cmp) yes no) // cond: // result: (LE cmp yes no) - for { - v := b.Control - if v.Op != OpARMInvertFlags { - break - } + for v.Op == OpARMInvertFlags { cmp := v.Args[0] b.Kind = BlockARMLE b.SetControl(cmp) @@ -23435,11 +22784,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(SUB x y)) yes no) // cond: l.Uses==1 // result: (GE (CMP x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23447,9 +22792,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUB { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -23464,11 +22808,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(MULS x y a)) yes no) // cond: l.Uses==1 // result: (GE (CMP a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23476,10 +22816,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMMULS { break } - _ = l.Args[2] + a := l.Args[2] x := l.Args[0] y := l.Args[1] - a := l.Args[2] if !(l.Uses == 1) { break } @@ -23497,11 +22836,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(SUBconst [c] x)) yes no) // cond: l.Uses==1 // result: (GE (CMPconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23525,11 +22860,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(SUBshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (GE (CMPshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23538,9 +22869,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -23556,11 +22886,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(SUBshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (GE (CMPshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23569,9 +22895,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -23587,11 +22912,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(SUBshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (GE (CMPshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23600,9 +22921,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -23618,11 +22938,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(SUBshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (GE (CMPshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23630,10 +22946,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUBshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -23649,11 +22964,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(SUBshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (GE (CMPshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23661,10 +22972,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUBshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -23680,11 +22990,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(SUBshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (GE (CMPshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23692,10 +22998,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUBshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -23711,11 +23016,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(ADD x y)) yes no) // cond: l.Uses==1 // result: (GE (CMN x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23723,9 +23024,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADD { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -23740,11 +23040,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(MULA x y a)) yes no) // cond: l.Uses==1 // result: (GE (CMN a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23752,10 +23048,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMMULA { break } - _ = l.Args[2] + a := l.Args[2] x := l.Args[0] y := l.Args[1] - a := l.Args[2] if !(l.Uses == 1) { break } @@ -23773,11 +23068,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(ADDconst [c] x)) yes no) // cond: l.Uses==1 // result: (GE (CMNconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23801,11 +23092,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(ADDshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (GE (CMNshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23814,9 +23101,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -23832,11 +23118,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(ADDshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (GE (CMNshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23845,9 +23127,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -23863,11 +23144,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(ADDshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (GE (CMNshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23876,9 +23153,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -23894,11 +23170,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(ADDshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (GE (CMNshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23906,10 +23178,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADDshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -23925,11 +23196,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(ADDshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (GE (CMNshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23937,10 +23204,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADDshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -23956,11 +23222,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(ADDshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (GE (CMNshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23968,10 +23230,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADDshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -23987,11 +23248,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(AND x y)) yes no) // cond: l.Uses==1 // result: (GE (TST x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -23999,9 +23256,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMAND { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -24016,11 +23272,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(ANDconst [c] x)) yes no) // cond: l.Uses==1 // result: (GE (TSTconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24044,11 +23296,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(ANDshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (GE (TSTshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24057,9 +23305,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -24075,11 +23322,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(ANDshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (GE (TSTshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24088,9 +23331,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -24106,11 +23348,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(ANDshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (GE (TSTshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24119,9 +23357,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -24137,11 +23374,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(ANDshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (GE (TSTshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24149,10 +23382,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMANDshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -24168,11 +23400,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(ANDshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (GE (TSTshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24180,10 +23408,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMANDshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -24199,11 +23426,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(ANDshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (GE (TSTshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24211,10 +23434,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMANDshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -24230,11 +23452,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(XOR x y)) yes no) // cond: l.Uses==1 // result: (GE (TEQ x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24242,9 +23460,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXOR { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -24259,11 +23476,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(XORconst [c] x)) yes no) // cond: l.Uses==1 // result: (GE (TEQconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24287,11 +23500,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(XORshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (GE (TEQshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24300,9 +23509,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -24318,11 +23526,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(XORshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (GE (TEQshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24331,9 +23535,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -24349,11 +23552,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(XORshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (GE (TEQshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24362,9 +23561,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -24380,11 +23578,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(XORshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (GE (TEQshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24392,10 +23586,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXORshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -24411,11 +23604,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(XORshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (GE (TEQshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24423,10 +23612,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXORshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -24442,11 +23630,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GE (CMPconst [0] l:(XORshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (GE (TEQshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24454,10 +23638,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXORshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -24474,11 +23657,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagEQ { - break - } + for v.Op == OpARMFlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -24488,11 +23667,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (FlagLT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagLT_ULT { - break - } + for v.Op == OpARMFlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -24502,11 +23677,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (FlagLT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagLT_UGT { - break - } + for v.Op == OpARMFlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -24516,11 +23687,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (FlagGT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagGT_ULT { - break - } + for v.Op == OpARMFlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -24529,11 +23696,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (FlagGT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagGT_UGT { - break - } + for v.Op == OpARMFlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -24542,11 +23705,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (InvertFlags cmp) yes no) // cond: // result: (LT cmp yes no) - for { - v := b.Control - if v.Op != OpARMInvertFlags { - break - } + for v.Op == OpARMInvertFlags { cmp := v.Args[0] b.Kind = BlockARMLT b.SetControl(cmp) @@ -24556,11 +23715,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(SUB x y)) yes no) // cond: l.Uses==1 // result: (GT (CMP x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24568,9 +23723,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUB { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -24585,11 +23739,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(MULS x y a)) yes no) // cond: l.Uses==1 // result: (GT (CMP a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24597,10 +23747,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMMULS { break } - _ = l.Args[2] + a := l.Args[2] x := l.Args[0] y := l.Args[1] - a := l.Args[2] if !(l.Uses == 1) { break } @@ -24618,11 +23767,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(SUBconst [c] x)) yes no) // cond: l.Uses==1 // result: (GT (CMPconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24646,11 +23791,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(SUBshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (GT (CMPshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24659,9 +23800,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -24677,11 +23817,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(SUBshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (GT (CMPshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24690,9 +23826,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -24708,11 +23843,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(SUBshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (GT (CMPshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24721,9 +23852,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -24739,11 +23869,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(SUBshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (GT (CMPshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24751,10 +23877,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUBshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -24770,11 +23895,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(SUBshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (GT (CMPshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24782,10 +23903,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUBshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -24801,11 +23921,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(SUBshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (GT (CMPshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24813,10 +23929,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUBshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -24832,11 +23947,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(ADD x y)) yes no) // cond: l.Uses==1 // result: (GT (CMN x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24844,9 +23955,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADD { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -24861,11 +23971,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(ADDconst [c] x)) yes no) // cond: l.Uses==1 // result: (GT (CMNconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24889,11 +23995,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(ADDshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (GT (CMNshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24902,9 +24004,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -24920,11 +24021,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(ADDshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (GT (CMNshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24933,9 +24030,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -24951,11 +24047,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(ADDshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (GT (CMNshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24964,9 +24056,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -24982,11 +24073,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(ADDshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (GT (CMNshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -24994,10 +24081,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADDshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -25013,11 +24099,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(ADDshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (GT (CMNshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25025,10 +24107,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADDshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -25044,11 +24125,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(ADDshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (GT (CMNshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25056,10 +24133,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADDshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -25075,11 +24151,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(AND x y)) yes no) // cond: l.Uses==1 // result: (GT (TST x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25087,9 +24159,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMAND { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -25104,11 +24175,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(MULA x y a)) yes no) // cond: l.Uses==1 // result: (GT (CMN a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25116,10 +24183,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMMULA { break } - _ = l.Args[2] + a := l.Args[2] x := l.Args[0] y := l.Args[1] - a := l.Args[2] if !(l.Uses == 1) { break } @@ -25137,11 +24203,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(ANDconst [c] x)) yes no) // cond: l.Uses==1 // result: (GT (TSTconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25165,11 +24227,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(ANDshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (GT (TSTshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25178,9 +24236,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -25196,11 +24253,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(ANDshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (GT (TSTshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25209,9 +24262,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -25227,11 +24279,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(ANDshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (GT (TSTshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25240,9 +24288,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -25258,11 +24305,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(ANDshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (GT (TSTshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25270,10 +24313,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMANDshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -25289,11 +24331,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(ANDshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (GT (TSTshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25301,10 +24339,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMANDshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -25320,11 +24357,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(ANDshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (GT (TSTshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25332,10 +24365,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMANDshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -25351,11 +24383,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(XOR x y)) yes no) // cond: l.Uses==1 // result: (GT (TEQ x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25363,9 +24391,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXOR { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -25380,11 +24407,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(XORconst [c] x)) yes no) // cond: l.Uses==1 // result: (GT (TEQconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25408,11 +24431,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(XORshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (GT (TEQshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25421,9 +24440,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -25439,11 +24457,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(XORshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (GT (TEQshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25452,9 +24466,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -25470,11 +24483,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(XORshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (GT (TEQshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25483,9 +24492,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -25501,11 +24509,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(XORshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (GT (TEQshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25513,10 +24517,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXORshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -25532,11 +24535,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(XORshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (GT (TEQshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25544,10 +24543,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXORshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -25563,11 +24561,7 @@ func rewriteBlockARM(b *Block) bool { // match: (GT (CMPconst [0] l:(XORshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (GT (TEQshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25575,10 +24569,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXORshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -25595,11 +24588,7 @@ func rewriteBlockARM(b *Block) bool { // match: (If (Equal cc) yes no) // cond: // result: (EQ cc yes no) - for { - v := b.Control - if v.Op != OpARMEqual { - break - } + for v.Op == OpARMEqual { cc := v.Args[0] b.Kind = BlockARMEQ b.SetControl(cc) @@ -25609,11 +24598,7 @@ func rewriteBlockARM(b *Block) bool { // match: (If (NotEqual cc) yes no) // cond: // result: (NE cc yes no) - for { - v := b.Control - if v.Op != OpARMNotEqual { - break - } + for v.Op == OpARMNotEqual { cc := v.Args[0] b.Kind = BlockARMNE b.SetControl(cc) @@ -25623,11 +24608,7 @@ func rewriteBlockARM(b *Block) bool { // match: (If (LessThan cc) yes no) // cond: // result: (LT cc yes no) - for { - v := b.Control - if v.Op != OpARMLessThan { - break - } + for v.Op == OpARMLessThan { cc := v.Args[0] b.Kind = BlockARMLT b.SetControl(cc) @@ -25637,11 +24618,7 @@ func rewriteBlockARM(b *Block) bool { // match: (If (LessThanU cc) yes no) // cond: // result: (ULT cc yes no) - for { - v := b.Control - if v.Op != OpARMLessThanU { - break - } + for v.Op == OpARMLessThanU { cc := v.Args[0] b.Kind = BlockARMULT b.SetControl(cc) @@ -25651,11 +24628,7 @@ func rewriteBlockARM(b *Block) bool { // match: (If (LessEqual cc) yes no) // cond: // result: (LE cc yes no) - for { - v := b.Control - if v.Op != OpARMLessEqual { - break - } + for v.Op == OpARMLessEqual { cc := v.Args[0] b.Kind = BlockARMLE b.SetControl(cc) @@ -25665,11 +24638,7 @@ func rewriteBlockARM(b *Block) bool { // match: (If (LessEqualU cc) yes no) // cond: // result: (ULE cc yes no) - for { - v := b.Control - if v.Op != OpARMLessEqualU { - break - } + for v.Op == OpARMLessEqualU { cc := v.Args[0] b.Kind = BlockARMULE b.SetControl(cc) @@ -25679,11 +24648,7 @@ func rewriteBlockARM(b *Block) bool { // match: (If (GreaterThan cc) yes no) // cond: // result: (GT cc yes no) - for { - v := b.Control - if v.Op != OpARMGreaterThan { - break - } + for v.Op == OpARMGreaterThan { cc := v.Args[0] b.Kind = BlockARMGT b.SetControl(cc) @@ -25693,11 +24658,7 @@ func rewriteBlockARM(b *Block) bool { // match: (If (GreaterThanU cc) yes no) // cond: // result: (UGT cc yes no) - for { - v := b.Control - if v.Op != OpARMGreaterThanU { - break - } + for v.Op == OpARMGreaterThanU { cc := v.Args[0] b.Kind = BlockARMUGT b.SetControl(cc) @@ -25707,11 +24668,7 @@ func rewriteBlockARM(b *Block) bool { // match: (If (GreaterEqual cc) yes no) // cond: // result: (GE cc yes no) - for { - v := b.Control - if v.Op != OpARMGreaterEqual { - break - } + for v.Op == OpARMGreaterEqual { cc := v.Args[0] b.Kind = BlockARMGE b.SetControl(cc) @@ -25721,11 +24678,7 @@ func rewriteBlockARM(b *Block) bool { // match: (If (GreaterEqualU cc) yes no) // cond: // result: (UGE cc yes no) - for { - v := b.Control - if v.Op != OpARMGreaterEqualU { - break - } + for v.Op == OpARMGreaterEqualU { cc := v.Args[0] b.Kind = BlockARMUGE b.SetControl(cc) @@ -25736,8 +24689,6 @@ func rewriteBlockARM(b *Block) bool { // cond: // result: (NE (CMPconst [0] cond) yes no) for { - v := b.Control - _ = v cond := b.Control b.Kind = BlockARMNE v0 := b.NewValue0(v.Pos, OpARMCMPconst, types.TypeFlags) @@ -25751,11 +24702,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagEQ { - break - } + for v.Op == OpARMFlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25764,11 +24711,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (FlagLT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagLT_ULT { - break - } + for v.Op == OpARMFlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25777,11 +24720,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (FlagLT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagLT_UGT { - break - } + for v.Op == OpARMFlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25790,11 +24729,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (FlagGT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagGT_ULT { - break - } + for v.Op == OpARMFlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25804,11 +24739,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (FlagGT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagGT_UGT { - break - } + for v.Op == OpARMFlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -25818,11 +24749,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (InvertFlags cmp) yes no) // cond: // result: (GE cmp yes no) - for { - v := b.Control - if v.Op != OpARMInvertFlags { - break - } + for v.Op == OpARMInvertFlags { cmp := v.Args[0] b.Kind = BlockARMGE b.SetControl(cmp) @@ -25832,11 +24759,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(SUB x y)) yes no) // cond: l.Uses==1 // result: (LE (CMP x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25844,9 +24767,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUB { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -25861,11 +24783,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(MULS x y a)) yes no) // cond: l.Uses==1 // result: (LE (CMP a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25873,10 +24791,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMMULS { break } - _ = l.Args[2] + a := l.Args[2] x := l.Args[0] y := l.Args[1] - a := l.Args[2] if !(l.Uses == 1) { break } @@ -25894,11 +24811,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(SUBconst [c] x)) yes no) // cond: l.Uses==1 // result: (LE (CMPconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25922,11 +24835,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(SUBshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (LE (CMPshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25935,9 +24844,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -25953,11 +24861,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(SUBshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (LE (CMPshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25966,9 +24870,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -25984,11 +24887,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(SUBshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (LE (CMPshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -25997,9 +24896,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -26015,11 +24913,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(SUBshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (LE (CMPshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26027,10 +24921,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUBshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -26046,11 +24939,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(SUBshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (LE (CMPshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26058,10 +24947,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUBshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -26077,11 +24965,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(SUBshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (LE (CMPshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26089,10 +24973,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUBshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -26108,11 +24991,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(ADD x y)) yes no) // cond: l.Uses==1 // result: (LE (CMN x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26120,9 +24999,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADD { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -26137,11 +25015,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(MULA x y a)) yes no) // cond: l.Uses==1 // result: (LE (CMN a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26149,10 +25023,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMMULA { break } - _ = l.Args[2] + a := l.Args[2] x := l.Args[0] y := l.Args[1] - a := l.Args[2] if !(l.Uses == 1) { break } @@ -26170,11 +25043,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(ADDconst [c] x)) yes no) // cond: l.Uses==1 // result: (LE (CMNconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26198,11 +25067,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(ADDshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (LE (CMNshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26211,9 +25076,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -26229,11 +25093,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(ADDshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (LE (CMNshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26242,9 +25102,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -26260,11 +25119,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(ADDshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (LE (CMNshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26273,9 +25128,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -26291,11 +25145,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(ADDshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (LE (CMNshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26303,10 +25153,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADDshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -26322,11 +25171,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(ADDshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (LE (CMNshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26334,10 +25179,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADDshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -26353,11 +25197,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(ADDshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (LE (CMNshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26365,10 +25205,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADDshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -26384,11 +25223,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(AND x y)) yes no) // cond: l.Uses==1 // result: (LE (TST x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26396,9 +25231,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMAND { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -26413,11 +25247,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(ANDconst [c] x)) yes no) // cond: l.Uses==1 // result: (LE (TSTconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26441,11 +25271,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(ANDshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (LE (TSTshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26454,9 +25280,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -26472,11 +25297,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(ANDshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (LE (TSTshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26485,9 +25306,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -26503,11 +25323,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(ANDshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (LE (TSTshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26516,9 +25332,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -26534,11 +25349,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(ANDshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (LE (TSTshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26546,10 +25357,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMANDshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -26565,11 +25375,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(ANDshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (LE (TSTshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26577,10 +25383,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMANDshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -26596,11 +25401,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(ANDshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (LE (TSTshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26608,10 +25409,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMANDshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -26627,11 +25427,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(XOR x y)) yes no) // cond: l.Uses==1 // result: (LE (TEQ x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26639,9 +25435,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXOR { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -26656,11 +25451,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(XORconst [c] x)) yes no) // cond: l.Uses==1 // result: (LE (TEQconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26684,11 +25475,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(XORshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (LE (TEQshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26697,9 +25484,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -26715,11 +25501,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(XORshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (LE (TEQshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26728,9 +25510,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -26746,11 +25527,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(XORshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (LE (TEQshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26759,9 +25536,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -26777,11 +25553,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(XORshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (LE (TEQshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26789,10 +25561,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXORshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -26808,11 +25579,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(XORshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (LE (TEQshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26820,10 +25587,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXORshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -26839,11 +25605,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LE (CMPconst [0] l:(XORshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (LE (TEQshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26851,10 +25613,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXORshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -26871,11 +25632,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagEQ { - break - } + for v.Op == OpARMFlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -26885,11 +25642,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (FlagLT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagLT_ULT { - break - } + for v.Op == OpARMFlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -26898,11 +25651,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (FlagLT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagLT_UGT { - break - } + for v.Op == OpARMFlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -26911,11 +25660,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (FlagGT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagGT_ULT { - break - } + for v.Op == OpARMFlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -26925,11 +25670,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (FlagGT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagGT_UGT { - break - } + for v.Op == OpARMFlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -26939,11 +25680,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (InvertFlags cmp) yes no) // cond: // result: (GT cmp yes no) - for { - v := b.Control - if v.Op != OpARMInvertFlags { - break - } + for v.Op == OpARMInvertFlags { cmp := v.Args[0] b.Kind = BlockARMGT b.SetControl(cmp) @@ -26953,11 +25690,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(SUB x y)) yes no) // cond: l.Uses==1 // result: (LT (CMP x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26965,9 +25698,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUB { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -26982,11 +25714,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(MULS x y a)) yes no) // cond: l.Uses==1 // result: (LT (CMP a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -26994,10 +25722,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMMULS { break } - _ = l.Args[2] + a := l.Args[2] x := l.Args[0] y := l.Args[1] - a := l.Args[2] if !(l.Uses == 1) { break } @@ -27015,11 +25742,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(SUBconst [c] x)) yes no) // cond: l.Uses==1 // result: (LT (CMPconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27043,11 +25766,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(SUBshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (LT (CMPshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27056,9 +25775,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -27074,11 +25792,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(SUBshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (LT (CMPshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27087,9 +25801,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -27105,11 +25818,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(SUBshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (LT (CMPshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27118,9 +25827,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -27136,11 +25844,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(SUBshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (LT (CMPshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27148,10 +25852,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUBshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -27167,11 +25870,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(SUBshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (LT (CMPshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27179,10 +25878,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUBshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -27198,11 +25896,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(SUBshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (LT (CMPshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27210,10 +25904,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUBshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -27229,11 +25922,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(ADD x y)) yes no) // cond: l.Uses==1 // result: (LT (CMN x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27241,9 +25930,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADD { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -27258,11 +25946,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(MULA x y a)) yes no) // cond: l.Uses==1 // result: (LT (CMN a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27270,10 +25954,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMMULA { break } - _ = l.Args[2] + a := l.Args[2] x := l.Args[0] y := l.Args[1] - a := l.Args[2] if !(l.Uses == 1) { break } @@ -27291,11 +25974,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(ADDconst [c] x)) yes no) // cond: l.Uses==1 // result: (LT (CMNconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27319,11 +25998,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(ADDshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (LT (CMNshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27332,9 +26007,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -27350,11 +26024,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(ADDshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (LT (CMNshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27363,9 +26033,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -27381,11 +26050,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(ADDshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (LT (CMNshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27394,9 +26059,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -27412,11 +26076,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(ADDshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (LT (CMNshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27424,10 +26084,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADDshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -27443,11 +26102,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(ADDshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (LT (CMNshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27455,10 +26110,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADDshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -27474,11 +26128,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(ADDshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (LT (CMNshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27486,10 +26136,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADDshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -27505,11 +26154,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(AND x y)) yes no) // cond: l.Uses==1 // result: (LT (TST x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27517,9 +26162,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMAND { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -27534,11 +26178,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(ANDconst [c] x)) yes no) // cond: l.Uses==1 // result: (LT (TSTconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27562,11 +26202,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(ANDshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (LT (TSTshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27575,9 +26211,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -27593,11 +26228,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(ANDshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (LT (TSTshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27606,9 +26237,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -27624,11 +26254,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(ANDshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (LT (TSTshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27637,9 +26263,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -27655,11 +26280,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(ANDshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (LT (TSTshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27667,10 +26288,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMANDshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -27686,11 +26306,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(ANDshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (LT (TSTshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27698,10 +26314,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMANDshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -27717,11 +26332,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(ANDshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (LT (TSTshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27729,10 +26340,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMANDshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -27748,11 +26358,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(XOR x y)) yes no) // cond: l.Uses==1 // result: (LT (TEQ x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27760,9 +26366,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXOR { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -27777,11 +26382,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(XORconst [c] x)) yes no) // cond: l.Uses==1 // result: (LT (TEQconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27805,11 +26406,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(XORshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (LT (TEQshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27818,9 +26415,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -27836,11 +26432,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(XORshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (LT (TEQshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27849,9 +26441,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -27867,11 +26458,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(XORshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (LT (TEQshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27880,9 +26467,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -27898,11 +26484,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(XORshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (LT (TEQshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27910,10 +26492,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXORshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -27929,11 +26510,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(XORshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (LT (TEQshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27941,10 +26518,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXORshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -27960,11 +26536,7 @@ func rewriteBlockARM(b *Block) bool { // match: (LT (CMPconst [0] l:(XORshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (LT (TEQshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -27972,10 +26544,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXORshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -27992,11 +26563,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] (Equal cc)) yes no) // cond: // result: (EQ cc yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28013,11 +26580,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] (NotEqual cc)) yes no) // cond: // result: (NE cc yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28034,11 +26597,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] (LessThan cc)) yes no) // cond: // result: (LT cc yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28055,11 +26614,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] (LessThanU cc)) yes no) // cond: // result: (ULT cc yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28076,11 +26631,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] (LessEqual cc)) yes no) // cond: // result: (LE cc yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28097,11 +26648,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] (LessEqualU cc)) yes no) // cond: // result: (ULE cc yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28118,11 +26665,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] (GreaterThan cc)) yes no) // cond: // result: (GT cc yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28139,11 +26682,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] (GreaterThanU cc)) yes no) // cond: // result: (UGT cc yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28160,11 +26699,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] (GreaterEqual cc)) yes no) // cond: // result: (GE cc yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28181,11 +26716,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] (GreaterEqualU cc)) yes no) // cond: // result: (UGE cc yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28202,11 +26733,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagEQ { - break - } + for v.Op == OpARMFlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -28216,11 +26743,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (FlagLT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagLT_ULT { - break - } + for v.Op == OpARMFlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -28229,11 +26752,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (FlagLT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagLT_UGT { - break - } + for v.Op == OpARMFlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -28242,11 +26761,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (FlagGT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagGT_ULT { - break - } + for v.Op == OpARMFlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -28255,11 +26770,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (FlagGT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagGT_UGT { - break - } + for v.Op == OpARMFlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -28268,11 +26779,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (InvertFlags cmp) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != OpARMInvertFlags { - break - } + for v.Op == OpARMInvertFlags { cmp := v.Args[0] b.Kind = BlockARMNE b.SetControl(cmp) @@ -28282,11 +26789,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(SUB x y)) yes no) // cond: l.Uses==1 // result: (NE (CMP x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28294,9 +26797,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUB { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -28311,11 +26813,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(MULS x y a)) yes no) // cond: l.Uses==1 // result: (NE (CMP a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28323,10 +26821,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMMULS { break } - _ = l.Args[2] + a := l.Args[2] x := l.Args[0] y := l.Args[1] - a := l.Args[2] if !(l.Uses == 1) { break } @@ -28344,11 +26841,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(SUBconst [c] x)) yes no) // cond: l.Uses==1 // result: (NE (CMPconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28372,11 +26865,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(SUBshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (NE (CMPshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28385,9 +26874,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -28403,11 +26891,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(SUBshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (NE (CMPshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28416,9 +26900,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -28434,11 +26917,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(SUBshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (NE (CMPshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28447,9 +26926,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -28465,11 +26943,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(SUBshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (NE (CMPshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28477,10 +26951,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUBshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -28496,11 +26969,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(SUBshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (NE (CMPshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28508,10 +26977,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUBshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -28527,11 +26995,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(SUBshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (NE (CMPshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28539,10 +27003,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMSUBshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -28558,11 +27021,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(ADD x y)) yes no) // cond: l.Uses==1 // result: (NE (CMN x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28570,9 +27029,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADD { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -28587,11 +27045,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(MULA x y a)) yes no) // cond: l.Uses==1 // result: (NE (CMN a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28599,10 +27053,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMMULA { break } - _ = l.Args[2] + a := l.Args[2] x := l.Args[0] y := l.Args[1] - a := l.Args[2] if !(l.Uses == 1) { break } @@ -28620,11 +27073,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(ADDconst [c] x)) yes no) // cond: l.Uses==1 // result: (NE (CMNconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28648,11 +27097,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(ADDshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (NE (CMNshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28661,9 +27106,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -28679,11 +27123,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(ADDshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (NE (CMNshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28692,9 +27132,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -28710,11 +27149,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(ADDshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (NE (CMNshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28723,9 +27158,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -28741,11 +27175,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(ADDshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (NE (CMNshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28753,10 +27183,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADDshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -28772,11 +27201,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(ADDshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (NE (CMNshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28784,10 +27209,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADDshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -28803,11 +27227,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(ADDshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (NE (CMNshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28815,10 +27235,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMADDshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -28834,11 +27253,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(AND x y)) yes no) // cond: l.Uses==1 // result: (NE (TST x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28846,9 +27261,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMAND { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -28863,11 +27277,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(ANDconst [c] x)) yes no) // cond: l.Uses==1 // result: (NE (TSTconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28891,11 +27301,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(ANDshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (NE (TSTshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28904,9 +27310,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -28922,11 +27327,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(ANDshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (NE (TSTshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28935,9 +27336,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -28953,11 +27353,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(ANDshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (NE (TSTshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28966,9 +27362,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -28984,11 +27379,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(ANDshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (NE (TSTshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -28996,10 +27387,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMANDshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -29015,11 +27405,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(ANDshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (NE (TSTshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -29027,10 +27413,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMANDshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -29046,11 +27431,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(ANDshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (NE (TSTshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -29058,10 +27439,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMANDshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -29077,11 +27457,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(XOR x y)) yes no) // cond: l.Uses==1 // result: (NE (TEQ x y) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -29089,9 +27465,8 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXOR { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -29106,11 +27481,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(XORconst [c] x)) yes no) // cond: l.Uses==1 // result: (NE (TEQconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -29134,11 +27505,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(XORshiftLL x y [c])) yes no) // cond: l.Uses==1 // result: (NE (TEQshiftLL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -29147,9 +27514,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -29165,11 +27531,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(XORshiftRL x y [c])) yes no) // cond: l.Uses==1 // result: (NE (TEQshiftRL x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -29178,9 +27540,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -29196,11 +27557,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(XORshiftRA x y [c])) yes no) // cond: l.Uses==1 // result: (NE (TEQshiftRA x y [c]) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -29209,9 +27566,8 @@ func rewriteBlockARM(b *Block) bool { break } c := l.AuxInt - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1) { break } @@ -29227,11 +27583,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(XORshiftLLreg x y z)) yes no) // cond: l.Uses==1 // result: (NE (TEQshiftLLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -29239,10 +27591,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXORshiftLLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -29258,11 +27609,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(XORshiftRLreg x y z)) yes no) // cond: l.Uses==1 // result: (NE (TEQshiftRLreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -29270,10 +27617,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXORshiftRLreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -29289,11 +27635,7 @@ func rewriteBlockARM(b *Block) bool { // match: (NE (CMPconst [0] l:(XORshiftRAreg x y z)) yes no) // cond: l.Uses==1 // result: (NE (TEQshiftRAreg x y z) yes no) - for { - v := b.Control - if v.Op != OpARMCMPconst { - break - } + for v.Op == OpARMCMPconst { if v.AuxInt != 0 { break } @@ -29301,10 +27643,9 @@ func rewriteBlockARM(b *Block) bool { if l.Op != OpARMXORshiftRAreg { break } - _ = l.Args[2] + z := l.Args[2] x := l.Args[0] y := l.Args[1] - z := l.Args[2] if !(l.Uses == 1) { break } @@ -29321,11 +27662,7 @@ func rewriteBlockARM(b *Block) bool { // match: (UGE (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagEQ { - break - } + for v.Op == OpARMFlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -29334,11 +27671,7 @@ func rewriteBlockARM(b *Block) bool { // match: (UGE (FlagLT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagLT_ULT { - break - } + for v.Op == OpARMFlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -29348,11 +27681,7 @@ func rewriteBlockARM(b *Block) bool { // match: (UGE (FlagLT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagLT_UGT { - break - } + for v.Op == OpARMFlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -29361,11 +27690,7 @@ func rewriteBlockARM(b *Block) bool { // match: (UGE (FlagGT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagGT_ULT { - break - } + for v.Op == OpARMFlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -29375,11 +27700,7 @@ func rewriteBlockARM(b *Block) bool { // match: (UGE (FlagGT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagGT_UGT { - break - } + for v.Op == OpARMFlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -29388,11 +27709,7 @@ func rewriteBlockARM(b *Block) bool { // match: (UGE (InvertFlags cmp) yes no) // cond: // result: (ULE cmp yes no) - for { - v := b.Control - if v.Op != OpARMInvertFlags { - break - } + for v.Op == OpARMInvertFlags { cmp := v.Args[0] b.Kind = BlockARMULE b.SetControl(cmp) @@ -29403,11 +27720,7 @@ func rewriteBlockARM(b *Block) bool { // match: (UGT (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagEQ { - break - } + for v.Op == OpARMFlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -29417,11 +27730,7 @@ func rewriteBlockARM(b *Block) bool { // match: (UGT (FlagLT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagLT_ULT { - break - } + for v.Op == OpARMFlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -29431,11 +27740,7 @@ func rewriteBlockARM(b *Block) bool { // match: (UGT (FlagLT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagLT_UGT { - break - } + for v.Op == OpARMFlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -29444,11 +27749,7 @@ func rewriteBlockARM(b *Block) bool { // match: (UGT (FlagGT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagGT_ULT { - break - } + for v.Op == OpARMFlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -29458,11 +27759,7 @@ func rewriteBlockARM(b *Block) bool { // match: (UGT (FlagGT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagGT_UGT { - break - } + for v.Op == OpARMFlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -29471,11 +27768,7 @@ func rewriteBlockARM(b *Block) bool { // match: (UGT (InvertFlags cmp) yes no) // cond: // result: (ULT cmp yes no) - for { - v := b.Control - if v.Op != OpARMInvertFlags { - break - } + for v.Op == OpARMInvertFlags { cmp := v.Args[0] b.Kind = BlockARMULT b.SetControl(cmp) @@ -29486,11 +27779,7 @@ func rewriteBlockARM(b *Block) bool { // match: (ULE (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagEQ { - break - } + for v.Op == OpARMFlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -29499,11 +27788,7 @@ func rewriteBlockARM(b *Block) bool { // match: (ULE (FlagLT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagLT_ULT { - break - } + for v.Op == OpARMFlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -29512,11 +27797,7 @@ func rewriteBlockARM(b *Block) bool { // match: (ULE (FlagLT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagLT_UGT { - break - } + for v.Op == OpARMFlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -29526,11 +27807,7 @@ func rewriteBlockARM(b *Block) bool { // match: (ULE (FlagGT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagGT_ULT { - break - } + for v.Op == OpARMFlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -29539,11 +27816,7 @@ func rewriteBlockARM(b *Block) bool { // match: (ULE (FlagGT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagGT_UGT { - break - } + for v.Op == OpARMFlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -29553,11 +27826,7 @@ func rewriteBlockARM(b *Block) bool { // match: (ULE (InvertFlags cmp) yes no) // cond: // result: (UGE cmp yes no) - for { - v := b.Control - if v.Op != OpARMInvertFlags { - break - } + for v.Op == OpARMInvertFlags { cmp := v.Args[0] b.Kind = BlockARMUGE b.SetControl(cmp) @@ -29568,11 +27837,7 @@ func rewriteBlockARM(b *Block) bool { // match: (ULT (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagEQ { - break - } + for v.Op == OpARMFlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -29582,11 +27847,7 @@ func rewriteBlockARM(b *Block) bool { // match: (ULT (FlagLT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagLT_ULT { - break - } + for v.Op == OpARMFlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -29595,11 +27856,7 @@ func rewriteBlockARM(b *Block) bool { // match: (ULT (FlagLT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagLT_UGT { - break - } + for v.Op == OpARMFlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -29609,11 +27866,7 @@ func rewriteBlockARM(b *Block) bool { // match: (ULT (FlagGT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARMFlagGT_ULT { - break - } + for v.Op == OpARMFlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -29622,11 +27875,7 @@ func rewriteBlockARM(b *Block) bool { // match: (ULT (FlagGT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARMFlagGT_UGT { - break - } + for v.Op == OpARMFlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -29636,11 +27885,7 @@ func rewriteBlockARM(b *Block) bool { // match: (ULT (InvertFlags cmp) yes no) // cond: // result: (UGT cmp yes no) - for { - v := b.Control - if v.Op != OpARMInvertFlags { - break - } + for v.Op == OpARMInvertFlags { cmp := v.Args[0] b.Kind = BlockARMUGT b.SetControl(cmp) diff --git a/src/cmd/compile/internal/ssa/rewriteARM64.go b/src/cmd/compile/internal/ssa/rewriteARM64.go index 2afd0f335e..9dfd848bc4 100644 --- a/src/cmd/compile/internal/ssa/rewriteARM64.go +++ b/src/cmd/compile/internal/ssa/rewriteARM64.go @@ -17,6 +17,8 @@ var _ = types.TypeMem // in case not otherwise used func rewriteValueARM64(v *Value) bool { switch v.Op { + case OpARM64ADCSflags: + return rewriteValueARM64_OpARM64ADCSflags_0(v) case OpARM64ADD: return rewriteValueARM64_OpARM64ADD_0(v) || rewriteValueARM64_OpARM64ADD_10(v) || rewriteValueARM64_OpARM64ADD_20(v) case OpARM64ADDconst: @@ -95,6 +97,10 @@ func rewriteValueARM64(v *Value) bool { return rewriteValueARM64_OpARM64FADDD_0(v) case OpARM64FADDS: return rewriteValueARM64_OpARM64FADDS_0(v) + case OpARM64FCMPD: + return rewriteValueARM64_OpARM64FCMPD_0(v) + case OpARM64FCMPS: + return rewriteValueARM64_OpARM64FCMPS_0(v) case OpARM64FMOVDfpgp: return rewriteValueARM64_OpARM64FMOVDfpgp_0(v) case OpARM64FMOVDgpfp: @@ -133,18 +139,26 @@ func rewriteValueARM64(v *Value) bool { return rewriteValueARM64_OpARM64FSUBS_0(v) case OpARM64GreaterEqual: return rewriteValueARM64_OpARM64GreaterEqual_0(v) + case OpARM64GreaterEqualF: + return rewriteValueARM64_OpARM64GreaterEqualF_0(v) case OpARM64GreaterEqualU: return rewriteValueARM64_OpARM64GreaterEqualU_0(v) case OpARM64GreaterThan: return rewriteValueARM64_OpARM64GreaterThan_0(v) + case OpARM64GreaterThanF: + return rewriteValueARM64_OpARM64GreaterThanF_0(v) case OpARM64GreaterThanU: return rewriteValueARM64_OpARM64GreaterThanU_0(v) case OpARM64LessEqual: return rewriteValueARM64_OpARM64LessEqual_0(v) + case OpARM64LessEqualF: + return rewriteValueARM64_OpARM64LessEqualF_0(v) case OpARM64LessEqualU: return rewriteValueARM64_OpARM64LessEqualU_0(v) case OpARM64LessThan: return rewriteValueARM64_OpARM64LessThan_0(v) + case OpARM64LessThanF: + return rewriteValueARM64_OpARM64LessThanF_0(v) case OpARM64LessThanU: return rewriteValueARM64_OpARM64LessThanU_0(v) case OpARM64MADD: @@ -305,6 +319,8 @@ func rewriteValueARM64(v *Value) bool { return rewriteValueARM64_OpARM64RORWconst_0(v) case OpARM64RORconst: return rewriteValueARM64_OpARM64RORconst_0(v) + case OpARM64SBCSflags: + return rewriteValueARM64_OpARM64SBCSflags_0(v) case OpARM64SLL: return rewriteValueARM64_OpARM64SLL_0(v) case OpARM64SLLconst: @@ -415,6 +431,8 @@ func rewriteValueARM64(v *Value) bool { return rewriteValueARM64_OpAtomicLoad32_0(v) case OpAtomicLoad64: return rewriteValueARM64_OpAtomicLoad64_0(v) + case OpAtomicLoad8: + return rewriteValueARM64_OpAtomicLoad8_0(v) case OpAtomicLoadPtr: return rewriteValueARM64_OpAtomicLoadPtr_0(v) case OpAtomicOr8: @@ -427,6 +445,8 @@ func rewriteValueARM64(v *Value) bool { return rewriteValueARM64_OpAtomicStorePtrNoWB_0(v) case OpAvg64u: return rewriteValueARM64_OpAvg64u_0(v) + case OpBitLen32: + return rewriteValueARM64_OpBitLen32_0(v) case OpBitLen64: return rewriteValueARM64_OpBitLen64_0(v) case OpBitRev16: @@ -471,6 +491,10 @@ func rewriteValueARM64(v *Value) bool { return rewriteValueARM64_OpConstBool_0(v) case OpConstNil: return rewriteValueARM64_OpConstNil_0(v) + case OpCtz16: + return rewriteValueARM64_OpCtz16_0(v) + case OpCtz16NonZero: + return rewriteValueARM64_OpCtz16NonZero_0(v) case OpCtz32: return rewriteValueARM64_OpCtz32_0(v) case OpCtz32NonZero: @@ -479,6 +503,10 @@ func rewriteValueARM64(v *Value) bool { return rewriteValueARM64_OpCtz64_0(v) case OpCtz64NonZero: return rewriteValueARM64_OpCtz64NonZero_0(v) + case OpCtz8: + return rewriteValueARM64_OpCtz8_0(v) + case OpCtz8NonZero: + return rewriteValueARM64_OpCtz8NonZero_0(v) case OpCvt32Fto32: return rewriteValueARM64_OpCvt32Fto32_0(v) case OpCvt32Fto32U: @@ -767,16 +795,22 @@ func rewriteValueARM64(v *Value) bool { return rewriteValueARM64_OpOr8_0(v) case OpOrB: return rewriteValueARM64_OpOrB_0(v) + case OpPanicBounds: + return rewriteValueARM64_OpPanicBounds_0(v) case OpPopCount16: return rewriteValueARM64_OpPopCount16_0(v) case OpPopCount32: return rewriteValueARM64_OpPopCount32_0(v) case OpPopCount64: return rewriteValueARM64_OpPopCount64_0(v) + case OpRotateLeft16: + return rewriteValueARM64_OpRotateLeft16_0(v) case OpRotateLeft32: return rewriteValueARM64_OpRotateLeft32_0(v) case OpRotateLeft64: return rewriteValueARM64_OpRotateLeft64_0(v) + case OpRotateLeft8: + return rewriteValueARM64_OpRotateLeft8_0(v) case OpRound: return rewriteValueARM64_OpRound_0(v) case OpRound32F: @@ -849,6 +883,10 @@ func rewriteValueARM64(v *Value) bool { return rewriteValueARM64_OpRsh8x64_0(v) case OpRsh8x8: return rewriteValueARM64_OpRsh8x8_0(v) + case OpSelect0: + return rewriteValueARM64_OpSelect0_0(v) + case OpSelect1: + return rewriteValueARM64_OpSelect1_0(v) case OpSignExt16to32: return rewriteValueARM64_OpSignExt16to32_0(v) case OpSignExt16to64: @@ -924,6 +962,79 @@ func rewriteValueARM64(v *Value) bool { } return false } +func rewriteValueARM64_OpARM64ADCSflags_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (ADCSflags x y (Select1 (ADDSconstflags [-1] (ADCzerocarry c)))) + // cond: + // result: (ADCSflags x y c) + for { + _ = v.Args[2] + x := v.Args[0] + y := v.Args[1] + v_2 := v.Args[2] + if v_2.Op != OpSelect1 { + break + } + if v_2.Type != types.TypeFlags { + break + } + v_2_0 := v_2.Args[0] + if v_2_0.Op != OpARM64ADDSconstflags { + break + } + if v_2_0.AuxInt != -1 { + break + } + v_2_0_0 := v_2_0.Args[0] + if v_2_0_0.Op != OpARM64ADCzerocarry { + break + } + if v_2_0_0.Type != typ.UInt64 { + break + } + c := v_2_0_0.Args[0] + v.reset(OpARM64ADCSflags) + v.AddArg(x) + v.AddArg(y) + v.AddArg(c) + return true + } + // match: (ADCSflags x y (Select1 (ADDSconstflags [-1] (MOVDconst [0])))) + // cond: + // result: (ADDSflags x y) + for { + _ = v.Args[2] + x := v.Args[0] + y := v.Args[1] + v_2 := v.Args[2] + if v_2.Op != OpSelect1 { + break + } + if v_2.Type != types.TypeFlags { + break + } + v_2_0 := v_2.Args[0] + if v_2_0.Op != OpARM64ADDSconstflags { + break + } + if v_2_0.AuxInt != -1 { + break + } + v_2_0_0 := v_2_0.Args[0] + if v_2_0_0.Op != OpARM64MOVDconst { + break + } + if v_2_0_0.AuxInt != 0 { + break + } + v.reset(OpARM64ADDSflags) + v.AddArg(x) + v.AddArg(y) + return true + } + return false +} func rewriteValueARM64_OpARM64ADD_0(v *Value) bool { // match: (ADD x (MOVDconst [c])) // cond: @@ -945,13 +1056,12 @@ func rewriteValueARM64_OpARM64ADD_0(v *Value) bool { // cond: // result: (ADDconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64ADDconst) v.AuxInt = c v.AddArg(x) @@ -967,9 +1077,8 @@ func rewriteValueARM64_OpARM64ADD_0(v *Value) bool { if l.Op != OpARM64MUL { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1 && clobber(l)) { break } @@ -983,15 +1092,13 @@ func rewriteValueARM64_OpARM64ADD_0(v *Value) bool { // cond: l.Uses==1 && clobber(l) // result: (MADD a x y) for { - _ = v.Args[1] + a := v.Args[1] l := v.Args[0] if l.Op != OpARM64MUL { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] - a := v.Args[1] + x := l.Args[0] if !(l.Uses == 1 && clobber(l)) { break } @@ -1011,9 +1118,8 @@ func rewriteValueARM64_OpARM64ADD_0(v *Value) bool { if l.Op != OpARM64MNEG { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1 && clobber(l)) { break } @@ -1027,15 +1133,13 @@ func rewriteValueARM64_OpARM64ADD_0(v *Value) bool { // cond: l.Uses==1 && clobber(l) // result: (MSUB a x y) for { - _ = v.Args[1] + a := v.Args[1] l := v.Args[0] if l.Op != OpARM64MNEG { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] - a := v.Args[1] + x := l.Args[0] if !(l.Uses == 1 && clobber(l)) { break } @@ -1055,9 +1159,8 @@ func rewriteValueARM64_OpARM64ADD_0(v *Value) bool { if l.Op != OpARM64MULW { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(a.Type.Size() != 8 && l.Uses == 1 && clobber(l)) { break } @@ -1071,15 +1174,13 @@ func rewriteValueARM64_OpARM64ADD_0(v *Value) bool { // cond: a.Type.Size() != 8 && l.Uses==1 && clobber(l) // result: (MADDW a x y) for { - _ = v.Args[1] + a := v.Args[1] l := v.Args[0] if l.Op != OpARM64MULW { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] - a := v.Args[1] + x := l.Args[0] if !(a.Type.Size() != 8 && l.Uses == 1 && clobber(l)) { break } @@ -1099,9 +1200,8 @@ func rewriteValueARM64_OpARM64ADD_0(v *Value) bool { if l.Op != OpARM64MNEGW { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(a.Type.Size() != 8 && l.Uses == 1 && clobber(l)) { break } @@ -1115,15 +1215,13 @@ func rewriteValueARM64_OpARM64ADD_0(v *Value) bool { // cond: a.Type.Size() != 8 && l.Uses==1 && clobber(l) // result: (MSUBW a x y) for { - _ = v.Args[1] + a := v.Args[1] l := v.Args[0] if l.Op != OpARM64MNEGW { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] - a := v.Args[1] + x := l.Args[0] if !(a.Type.Size() != 8 && l.Uses == 1 && clobber(l)) { break } @@ -1137,9 +1235,7 @@ func rewriteValueARM64_OpARM64ADD_0(v *Value) bool { } func rewriteValueARM64_OpARM64ADD_10(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ADD x (NEG y)) // cond: // result: (SUB x y) @@ -1160,13 +1256,12 @@ func rewriteValueARM64_OpARM64ADD_10(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64NEG { break } y := v_0.Args[0] - x := v.Args[1] v.reset(OpARM64SUB) v.AddArg(x) v.AddArg(y) @@ -1197,14 +1292,13 @@ func rewriteValueARM64_OpARM64ADD_10(v *Value) bool { // cond: clobberIfDead(x1) // result: (ADDshiftLL x0 y [c]) for { - _ = v.Args[1] + x0 := v.Args[1] x1 := v.Args[0] if x1.Op != OpARM64SLLconst { break } c := x1.AuxInt y := x1.Args[0] - x0 := v.Args[1] if !(clobberIfDead(x1)) { break } @@ -1239,14 +1333,13 @@ func rewriteValueARM64_OpARM64ADD_10(v *Value) bool { // cond: clobberIfDead(x1) // result: (ADDshiftRL x0 y [c]) for { - _ = v.Args[1] + x0 := v.Args[1] x1 := v.Args[0] if x1.Op != OpARM64SRLconst { break } c := x1.AuxInt y := x1.Args[0] - x0 := v.Args[1] if !(clobberIfDead(x1)) { break } @@ -1281,14 +1374,13 @@ func rewriteValueARM64_OpARM64ADD_10(v *Value) bool { // cond: clobberIfDead(x1) // result: (ADDshiftRA x0 y [c]) for { - _ = v.Args[1] + x0 := v.Args[1] x1 := v.Args[0] if x1.Op != OpARM64SRAconst { break } c := x1.AuxInt y := x1.Args[0] - x0 := v.Args[1] if !(clobberIfDead(x1)) { break } @@ -1528,9 +1620,7 @@ func rewriteValueARM64_OpARM64ADD_10(v *Value) bool { } func rewriteValueARM64_OpARM64ADD_20(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ADD (SRL x (ANDconst [63] y)) (CSEL0 {cc} (SLL x (SUB (MOVDconst [64]) (ANDconst [63] y))) (CMPconst [64] (SUB (MOVDconst [64]) (ANDconst [63] y))))) // cond: cc.(Op) == OpARM64LessThanU // result: (ROR x y) @@ -2301,19 +2391,18 @@ func rewriteValueARM64_OpARM64ADDconst_0(v *Value) bool { } func rewriteValueARM64_OpARM64ADDshiftLL_0(v *Value) bool { b := v.Block - _ = b + typ := &b.Func.Config.Types // match: (ADDshiftLL (MOVDconst [c]) x [d]) // cond: // result: (ADDconst [c] (SLLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64ADDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64SLLconst, x.Type) @@ -2344,7 +2433,7 @@ func rewriteValueARM64_OpARM64ADDshiftLL_0(v *Value) bool { // result: (RORconst [64-c] x) for { c := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64SRLconst { break @@ -2352,8 +2441,7 @@ func rewriteValueARM64_OpARM64ADDshiftLL_0(v *Value) bool { if v_0.AuxInt != 64-c { break } - x := v_0.Args[0] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpARM64RORconst) @@ -2362,22 +2450,21 @@ func rewriteValueARM64_OpARM64ADDshiftLL_0(v *Value) bool { return true } // match: (ADDshiftLL [c] (UBFX [bfc] x) x) - // cond: c < 32 && t.Size() == 4 && bfc == arm64BFAuxInt(32-c, c) + // cond: c < 32 && t.Size() == 4 && bfc == armBFAuxInt(32-c, c) // result: (RORWconst [32-c] x) for { t := v.Type c := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64UBFX { break } bfc := v_0.AuxInt - x := v_0.Args[0] - if x != v.Args[1] { + if x != v_0.Args[0] { break } - if !(c < 32 && t.Size() == 4 && bfc == arm64BFAuxInt(32-c, c)) { + if !(c < 32 && t.Size() == 4 && bfc == armBFAuxInt(32-c, c)) { break } v.reset(OpARM64RORWconst) @@ -2385,12 +2472,40 @@ func rewriteValueARM64_OpARM64ADDshiftLL_0(v *Value) bool { v.AddArg(x) return true } + // match: (ADDshiftLL [8] (UBFX [armBFAuxInt(8, 8)] x) x) + // cond: + // result: (REV16W x) + for { + if v.Type != typ.UInt16 { + break + } + if v.AuxInt != 8 { + break + } + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpARM64UBFX { + break + } + if v_0.Type != typ.UInt16 { + break + } + if v_0.AuxInt != armBFAuxInt(8, 8) { + break + } + if x != v_0.Args[0] { + break + } + v.reset(OpARM64REV16W) + v.AddArg(x) + return true + } // match: (ADDshiftLL [c] (SRLconst x [64-c]) x2) // cond: // result: (EXTRconst [64-c] x2 x) for { c := v.AuxInt - _ = v.Args[1] + x2 := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64SRLconst { break @@ -2399,7 +2514,6 @@ func rewriteValueARM64_OpARM64ADDshiftLL_0(v *Value) bool { break } x := v_0.Args[0] - x2 := v.Args[1] v.reset(OpARM64EXTRconst) v.AuxInt = 64 - c v.AddArg(x2) @@ -2407,20 +2521,19 @@ func rewriteValueARM64_OpARM64ADDshiftLL_0(v *Value) bool { return true } // match: (ADDshiftLL [c] (UBFX [bfc] x) x2) - // cond: c < 32 && t.Size() == 4 && bfc == arm64BFAuxInt(32-c, c) + // cond: c < 32 && t.Size() == 4 && bfc == armBFAuxInt(32-c, c) // result: (EXTRWconst [32-c] x2 x) for { t := v.Type c := v.AuxInt - _ = v.Args[1] + x2 := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64UBFX { break } bfc := v_0.AuxInt x := v_0.Args[0] - x2 := v.Args[1] - if !(c < 32 && t.Size() == 4 && bfc == arm64BFAuxInt(32-c, c)) { + if !(c < 32 && t.Size() == 4 && bfc == armBFAuxInt(32-c, c)) { break } v.reset(OpARM64EXTRWconst) @@ -2433,19 +2546,17 @@ func rewriteValueARM64_OpARM64ADDshiftLL_0(v *Value) bool { } func rewriteValueARM64_OpARM64ADDshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (ADDshiftRA (MOVDconst [c]) x [d]) // cond: // result: (ADDconst [c] (SRAconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64ADDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64SRAconst, x.Type) @@ -2475,19 +2586,17 @@ func rewriteValueARM64_OpARM64ADDshiftRA_0(v *Value) bool { } func rewriteValueARM64_OpARM64ADDshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (ADDshiftRL (MOVDconst [c]) x [d]) // cond: // result: (ADDconst [c] (SRLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64ADDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64SRLconst, x.Type) @@ -2518,7 +2627,7 @@ func rewriteValueARM64_OpARM64ADDshiftRL_0(v *Value) bool { // result: (RORconst [ c] x) for { c := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64SLLconst { break @@ -2526,8 +2635,7 @@ func rewriteValueARM64_OpARM64ADDshiftRL_0(v *Value) bool { if v_0.AuxInt != 64-c { break } - x := v_0.Args[0] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpARM64RORconst) @@ -2588,13 +2696,12 @@ func rewriteValueARM64_OpARM64AND_0(v *Value) bool { // cond: // result: (ANDconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64ANDconst) v.AuxInt = c v.AddArg(x) @@ -2604,9 +2711,8 @@ func rewriteValueARM64_OpARM64AND_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -2634,13 +2740,12 @@ func rewriteValueARM64_OpARM64AND_0(v *Value) bool { // cond: // result: (BIC x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MVN { break } y := v_0.Args[0] - x := v.Args[1] v.reset(OpARM64BIC) v.AddArg(x) v.AddArg(y) @@ -2671,14 +2776,13 @@ func rewriteValueARM64_OpARM64AND_0(v *Value) bool { // cond: clobberIfDead(x1) // result: (ANDshiftLL x0 y [c]) for { - _ = v.Args[1] + x0 := v.Args[1] x1 := v.Args[0] if x1.Op != OpARM64SLLconst { break } c := x1.AuxInt y := x1.Args[0] - x0 := v.Args[1] if !(clobberIfDead(x1)) { break } @@ -2713,14 +2817,13 @@ func rewriteValueARM64_OpARM64AND_0(v *Value) bool { // cond: clobberIfDead(x1) // result: (ANDshiftRL x0 y [c]) for { - _ = v.Args[1] + x0 := v.Args[1] x1 := v.Args[0] if x1.Op != OpARM64SRLconst { break } c := x1.AuxInt y := x1.Args[0] - x0 := v.Args[1] if !(clobberIfDead(x1)) { break } @@ -2758,14 +2861,13 @@ func rewriteValueARM64_OpARM64AND_10(v *Value) bool { // cond: clobberIfDead(x1) // result: (ANDshiftRA x0 y [c]) for { - _ = v.Args[1] + x0 := v.Args[1] x1 := v.Args[0] if x1.Op != OpARM64SRAconst { break } c := x1.AuxInt y := x1.Args[0] - x0 := v.Args[1] if !(clobberIfDead(x1)) { break } @@ -2879,7 +2981,7 @@ func rewriteValueARM64_OpARM64ANDconst_0(v *Value) bool { } // match: (ANDconst [ac] (SLLconst [sc] x)) // cond: isARM64BFMask(sc, ac, sc) - // result: (UBFIZ [arm64BFAuxInt(sc, arm64BFWidth(ac, sc))] x) + // result: (UBFIZ [armBFAuxInt(sc, arm64BFWidth(ac, sc))] x) for { ac := v.AuxInt v_0 := v.Args[0] @@ -2892,13 +2994,13 @@ func rewriteValueARM64_OpARM64ANDconst_0(v *Value) bool { break } v.reset(OpARM64UBFIZ) - v.AuxInt = arm64BFAuxInt(sc, arm64BFWidth(ac, sc)) + v.AuxInt = armBFAuxInt(sc, arm64BFWidth(ac, sc)) v.AddArg(x) return true } // match: (ANDconst [ac] (SRLconst [sc] x)) // cond: isARM64BFMask(sc, ac, 0) - // result: (UBFX [arm64BFAuxInt(sc, arm64BFWidth(ac, 0))] x) + // result: (UBFX [armBFAuxInt(sc, arm64BFWidth(ac, 0))] x) for { ac := v.AuxInt v_0 := v.Args[0] @@ -2911,7 +3013,7 @@ func rewriteValueARM64_OpARM64ANDconst_0(v *Value) bool { break } v.reset(OpARM64UBFX) - v.AuxInt = arm64BFAuxInt(sc, arm64BFWidth(ac, 0)) + v.AuxInt = armBFAuxInt(sc, arm64BFWidth(ac, 0)) v.AddArg(x) return true } @@ -2919,19 +3021,17 @@ func rewriteValueARM64_OpARM64ANDconst_0(v *Value) bool { } func rewriteValueARM64_OpARM64ANDshiftLL_0(v *Value) bool { b := v.Block - _ = b // match: (ANDshiftLL (MOVDconst [c]) x [d]) // cond: // result: (ANDconst [c] (SLLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64ANDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64SLLconst, x.Type) @@ -2984,19 +3084,17 @@ func rewriteValueARM64_OpARM64ANDshiftLL_0(v *Value) bool { } func rewriteValueARM64_OpARM64ANDshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (ANDshiftRA (MOVDconst [c]) x [d]) // cond: // result: (ANDconst [c] (SRAconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64ANDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64SRAconst, x.Type) @@ -3049,19 +3147,17 @@ func rewriteValueARM64_OpARM64ANDshiftRA_0(v *Value) bool { } func rewriteValueARM64_OpARM64ANDshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (ANDshiftRL (MOVDconst [c]) x [d]) // cond: // result: (ANDconst [c] (SRLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64ANDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64SRLconst, x.Type) @@ -3133,9 +3229,8 @@ func rewriteValueARM64_OpARM64BIC_0(v *Value) bool { // cond: // result: (MOVDconst [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpARM64MOVDconst) @@ -3354,13 +3449,12 @@ func rewriteValueARM64_OpARM64CMN_0(v *Value) bool { // cond: // result: (CMNconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64CMNconst) v.AuxInt = c v.AddArg(x) @@ -3391,14 +3485,13 @@ func rewriteValueARM64_OpARM64CMN_0(v *Value) bool { // cond: clobberIfDead(x1) // result: (CMNshiftLL x0 y [c]) for { - _ = v.Args[1] + x0 := v.Args[1] x1 := v.Args[0] if x1.Op != OpARM64SLLconst { break } c := x1.AuxInt y := x1.Args[0] - x0 := v.Args[1] if !(clobberIfDead(x1)) { break } @@ -3433,14 +3526,13 @@ func rewriteValueARM64_OpARM64CMN_0(v *Value) bool { // cond: clobberIfDead(x1) // result: (CMNshiftRL x0 y [c]) for { - _ = v.Args[1] + x0 := v.Args[1] x1 := v.Args[0] if x1.Op != OpARM64SRLconst { break } c := x1.AuxInt y := x1.Args[0] - x0 := v.Args[1] if !(clobberIfDead(x1)) { break } @@ -3475,14 +3567,13 @@ func rewriteValueARM64_OpARM64CMN_0(v *Value) bool { // cond: clobberIfDead(x1) // result: (CMNshiftRA x0 y [c]) for { - _ = v.Args[1] + x0 := v.Args[1] x1 := v.Args[0] if x1.Op != OpARM64SRAconst { break } c := x1.AuxInt y := x1.Args[0] - x0 := v.Args[1] if !(clobberIfDead(x1)) { break } @@ -3515,13 +3606,12 @@ func rewriteValueARM64_OpARM64CMNW_0(v *Value) bool { // cond: // result: (CMNWconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64CMNWconst) v.AuxInt = c v.AddArg(x) @@ -3697,19 +3787,17 @@ func rewriteValueARM64_OpARM64CMNconst_0(v *Value) bool { } func rewriteValueARM64_OpARM64CMNshiftLL_0(v *Value) bool { b := v.Block - _ = b // match: (CMNshiftLL (MOVDconst [c]) x [d]) // cond: // result: (CMNconst [c] (SLLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64CMNconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64SLLconst, x.Type) @@ -3739,19 +3827,17 @@ func rewriteValueARM64_OpARM64CMNshiftLL_0(v *Value) bool { } func rewriteValueARM64_OpARM64CMNshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (CMNshiftRA (MOVDconst [c]) x [d]) // cond: // result: (CMNconst [c] (SRAconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64CMNconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64SRAconst, x.Type) @@ -3781,19 +3867,17 @@ func rewriteValueARM64_OpARM64CMNshiftRA_0(v *Value) bool { } func rewriteValueARM64_OpARM64CMNshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (CMNshiftRL (MOVDconst [c]) x [d]) // cond: // result: (CMNconst [c] (SRLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64CMNconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64SRLconst, x.Type) @@ -3823,7 +3907,6 @@ func rewriteValueARM64_OpARM64CMNshiftRL_0(v *Value) bool { } func rewriteValueARM64_OpARM64CMP_0(v *Value) bool { b := v.Block - _ = b // match: (CMP x (MOVDconst [c])) // cond: // result: (CMPconst [c] x) @@ -3844,13 +3927,12 @@ func rewriteValueARM64_OpARM64CMP_0(v *Value) bool { // cond: // result: (InvertFlags (CMPconst [c] x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64InvertFlags) v0 := b.NewValue0(v.Pos, OpARM64CMPconst, types.TypeFlags) v0.AuxInt = c @@ -3883,14 +3965,13 @@ func rewriteValueARM64_OpARM64CMP_0(v *Value) bool { // cond: clobberIfDead(x0) // result: (InvertFlags (CMPshiftLL x1 y [c])) for { - _ = v.Args[1] + x1 := v.Args[1] x0 := v.Args[0] if x0.Op != OpARM64SLLconst { break } c := x0.AuxInt y := x0.Args[0] - x1 := v.Args[1] if !(clobberIfDead(x0)) { break } @@ -3927,14 +4008,13 @@ func rewriteValueARM64_OpARM64CMP_0(v *Value) bool { // cond: clobberIfDead(x0) // result: (InvertFlags (CMPshiftRL x1 y [c])) for { - _ = v.Args[1] + x1 := v.Args[1] x0 := v.Args[0] if x0.Op != OpARM64SRLconst { break } c := x0.AuxInt y := x0.Args[0] - x1 := v.Args[1] if !(clobberIfDead(x0)) { break } @@ -3971,14 +4051,13 @@ func rewriteValueARM64_OpARM64CMP_0(v *Value) bool { // cond: clobberIfDead(x0) // result: (InvertFlags (CMPshiftRA x1 y [c])) for { - _ = v.Args[1] + x1 := v.Args[1] x0 := v.Args[0] if x0.Op != OpARM64SRAconst { break } c := x0.AuxInt y := x0.Args[0] - x1 := v.Args[1] if !(clobberIfDead(x0)) { break } @@ -3994,7 +4073,6 @@ func rewriteValueARM64_OpARM64CMP_0(v *Value) bool { } func rewriteValueARM64_OpARM64CMPW_0(v *Value) bool { b := v.Block - _ = b // match: (CMPW x (MOVDconst [c])) // cond: // result: (CMPWconst [int64(int32(c))] x) @@ -4015,13 +4093,12 @@ func rewriteValueARM64_OpARM64CMPW_0(v *Value) bool { // cond: // result: (InvertFlags (CMPWconst [int64(int32(c))] x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64InvertFlags) v0 := b.NewValue0(v.Pos, OpARM64CMPWconst, types.TypeFlags) v0.AuxInt = int64(int32(c)) @@ -4306,19 +4383,17 @@ func rewriteValueARM64_OpARM64CMPconst_0(v *Value) bool { } func rewriteValueARM64_OpARM64CMPshiftLL_0(v *Value) bool { b := v.Block - _ = b // match: (CMPshiftLL (MOVDconst [c]) x [d]) // cond: // result: (InvertFlags (CMPconst [c] (SLLconst x [d]))) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64InvertFlags) v0 := b.NewValue0(v.Pos, OpARM64CMPconst, types.TypeFlags) v0.AuxInt = c @@ -4350,19 +4425,17 @@ func rewriteValueARM64_OpARM64CMPshiftLL_0(v *Value) bool { } func rewriteValueARM64_OpARM64CMPshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (CMPshiftRA (MOVDconst [c]) x [d]) // cond: // result: (InvertFlags (CMPconst [c] (SRAconst x [d]))) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64InvertFlags) v0 := b.NewValue0(v.Pos, OpARM64CMPconst, types.TypeFlags) v0.AuxInt = c @@ -4394,19 +4467,17 @@ func rewriteValueARM64_OpARM64CMPshiftRA_0(v *Value) bool { } func rewriteValueARM64_OpARM64CMPshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (CMPshiftRL (MOVDconst [c]) x [d]) // cond: // result: (InvertFlags (CMPconst [c] (SRLconst x [d]))) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64InvertFlags) v0 := b.NewValue0(v.Pos, OpARM64CMPconst, types.TypeFlags) v0.AuxInt = c @@ -4442,7 +4513,7 @@ func rewriteValueARM64_OpARM64CSEL_0(v *Value) bool { // result: (CSEL0 {cc} x flag) for { cc := v.Aux - _ = v.Args[2] + flag := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { @@ -4451,7 +4522,6 @@ func rewriteValueARM64_OpARM64CSEL_0(v *Value) bool { if v_1.AuxInt != 0 { break } - flag := v.Args[2] v.reset(OpARM64CSEL0) v.Aux = cc v.AddArg(x) @@ -4463,7 +4533,7 @@ func rewriteValueARM64_OpARM64CSEL_0(v *Value) bool { // result: (CSEL0 {arm64Negate(cc.(Op))} y flag) for { cc := v.Aux - _ = v.Args[2] + flag := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break @@ -4472,7 +4542,6 @@ func rewriteValueARM64_OpARM64CSEL_0(v *Value) bool { break } y := v.Args[1] - flag := v.Args[2] v.reset(OpARM64CSEL0) v.Aux = arm64Negate(cc.(Op)) v.AddArg(y) @@ -4504,9 +4573,8 @@ func rewriteValueARM64_OpARM64CSEL_0(v *Value) bool { // result: x for { cc := v.Aux - _ = v.Args[2] - x := v.Args[0] flag := v.Args[2] + x := v.Args[0] if !(ccARM64Eval(cc, flag) > 0) { break } @@ -4520,9 +4588,8 @@ func rewriteValueARM64_OpARM64CSEL_0(v *Value) bool { // result: y for { cc := v.Aux - _ = v.Args[2] - y := v.Args[1] flag := v.Args[2] + y := v.Args[1] if !(ccARM64Eval(cc, flag) < 0) { break } @@ -4531,9 +4598,9 @@ func rewriteValueARM64_OpARM64CSEL_0(v *Value) bool { v.AddArg(y) return true } - // match: (CSEL {cc} x y (CMPWconst [0] bool)) - // cond: cc.(Op) == OpARM64NotEqual && flagArg(bool) != nil - // result: (CSEL {bool.Op} x y flagArg(bool)) + // match: (CSEL {cc} x y (CMPWconst [0] boolval)) + // cond: cc.(Op) == OpARM64NotEqual && flagArg(boolval) != nil + // result: (CSEL {boolval.Op} x y flagArg(boolval)) for { cc := v.Aux _ = v.Args[2] @@ -4546,20 +4613,20 @@ func rewriteValueARM64_OpARM64CSEL_0(v *Value) bool { if v_2.AuxInt != 0 { break } - bool := v_2.Args[0] - if !(cc.(Op) == OpARM64NotEqual && flagArg(bool) != nil) { + boolval := v_2.Args[0] + if !(cc.(Op) == OpARM64NotEqual && flagArg(boolval) != nil) { break } v.reset(OpARM64CSEL) - v.Aux = bool.Op + v.Aux = boolval.Op v.AddArg(x) v.AddArg(y) - v.AddArg(flagArg(bool)) + v.AddArg(flagArg(boolval)) return true } - // match: (CSEL {cc} x y (CMPWconst [0] bool)) - // cond: cc.(Op) == OpARM64Equal && flagArg(bool) != nil - // result: (CSEL {arm64Negate(bool.Op)} x y flagArg(bool)) + // match: (CSEL {cc} x y (CMPWconst [0] boolval)) + // cond: cc.(Op) == OpARM64Equal && flagArg(boolval) != nil + // result: (CSEL {arm64Negate(boolval.Op)} x y flagArg(boolval)) for { cc := v.Aux _ = v.Args[2] @@ -4572,15 +4639,15 @@ func rewriteValueARM64_OpARM64CSEL_0(v *Value) bool { if v_2.AuxInt != 0 { break } - bool := v_2.Args[0] - if !(cc.(Op) == OpARM64Equal && flagArg(bool) != nil) { + boolval := v_2.Args[0] + if !(cc.(Op) == OpARM64Equal && flagArg(boolval) != nil) { break } v.reset(OpARM64CSEL) - v.Aux = arm64Negate(bool.Op) + v.Aux = arm64Negate(boolval.Op) v.AddArg(x) v.AddArg(y) - v.AddArg(flagArg(bool)) + v.AddArg(flagArg(boolval)) return true } return false @@ -4609,9 +4676,8 @@ func rewriteValueARM64_OpARM64CSEL0_0(v *Value) bool { // result: x for { cc := v.Aux - _ = v.Args[1] - x := v.Args[0] flag := v.Args[1] + x := v.Args[0] if !(ccARM64Eval(cc, flag) > 0) { break } @@ -4625,7 +4691,6 @@ func rewriteValueARM64_OpARM64CSEL0_0(v *Value) bool { // result: (MOVDconst [0]) for { cc := v.Aux - _ = v.Args[1] flag := v.Args[1] if !(ccARM64Eval(cc, flag) < 0) { break @@ -4634,9 +4699,9 @@ func rewriteValueARM64_OpARM64CSEL0_0(v *Value) bool { v.AuxInt = 0 return true } - // match: (CSEL0 {cc} x (CMPWconst [0] bool)) - // cond: cc.(Op) == OpARM64NotEqual && flagArg(bool) != nil - // result: (CSEL0 {bool.Op} x flagArg(bool)) + // match: (CSEL0 {cc} x (CMPWconst [0] boolval)) + // cond: cc.(Op) == OpARM64NotEqual && flagArg(boolval) != nil + // result: (CSEL0 {boolval.Op} x flagArg(boolval)) for { cc := v.Aux _ = v.Args[1] @@ -4648,19 +4713,19 @@ func rewriteValueARM64_OpARM64CSEL0_0(v *Value) bool { if v_1.AuxInt != 0 { break } - bool := v_1.Args[0] - if !(cc.(Op) == OpARM64NotEqual && flagArg(bool) != nil) { + boolval := v_1.Args[0] + if !(cc.(Op) == OpARM64NotEqual && flagArg(boolval) != nil) { break } v.reset(OpARM64CSEL0) - v.Aux = bool.Op + v.Aux = boolval.Op v.AddArg(x) - v.AddArg(flagArg(bool)) + v.AddArg(flagArg(boolval)) return true } - // match: (CSEL0 {cc} x (CMPWconst [0] bool)) - // cond: cc.(Op) == OpARM64Equal && flagArg(bool) != nil - // result: (CSEL0 {arm64Negate(bool.Op)} x flagArg(bool)) + // match: (CSEL0 {cc} x (CMPWconst [0] boolval)) + // cond: cc.(Op) == OpARM64Equal && flagArg(boolval) != nil + // result: (CSEL0 {arm64Negate(boolval.Op)} x flagArg(boolval)) for { cc := v.Aux _ = v.Args[1] @@ -4672,14 +4737,14 @@ func rewriteValueARM64_OpARM64CSEL0_0(v *Value) bool { if v_1.AuxInt != 0 { break } - bool := v_1.Args[0] - if !(cc.(Op) == OpARM64Equal && flagArg(bool) != nil) { + boolval := v_1.Args[0] + if !(cc.(Op) == OpARM64Equal && flagArg(boolval) != nil) { break } v.reset(OpARM64CSEL0) - v.Aux = arm64Negate(bool.Op) + v.Aux = arm64Negate(boolval.Op) v.AddArg(x) - v.AddArg(flagArg(bool)) + v.AddArg(flagArg(boolval)) return true } return false @@ -4749,9 +4814,8 @@ func rewriteValueARM64_OpARM64EON_0(v *Value) bool { // cond: // result: (MOVDconst [-1]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpARM64MOVDconst) @@ -5036,9 +5100,8 @@ func rewriteValueARM64_OpARM64FADDD_0(v *Value) bool { if v_1.Op != OpARM64FMULD { break } - _ = v_1.Args[1] - x := v_1.Args[0] y := v_1.Args[1] + x := v_1.Args[0] v.reset(OpARM64FMADDD) v.AddArg(a) v.AddArg(x) @@ -5049,15 +5112,13 @@ func rewriteValueARM64_OpARM64FADDD_0(v *Value) bool { // cond: // result: (FMADDD a x y) for { - _ = v.Args[1] + a := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64FMULD { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - a := v.Args[1] + x := v_0.Args[0] v.reset(OpARM64FMADDD) v.AddArg(a) v.AddArg(x) @@ -5074,9 +5135,8 @@ func rewriteValueARM64_OpARM64FADDD_0(v *Value) bool { if v_1.Op != OpARM64FNMULD { break } - _ = v_1.Args[1] - x := v_1.Args[0] y := v_1.Args[1] + x := v_1.Args[0] v.reset(OpARM64FMSUBD) v.AddArg(a) v.AddArg(x) @@ -5087,15 +5147,13 @@ func rewriteValueARM64_OpARM64FADDD_0(v *Value) bool { // cond: // result: (FMSUBD a x y) for { - _ = v.Args[1] + a := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64FNMULD { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - a := v.Args[1] + x := v_0.Args[0] v.reset(OpARM64FMSUBD) v.AddArg(a) v.AddArg(x) @@ -5115,9 +5173,8 @@ func rewriteValueARM64_OpARM64FADDS_0(v *Value) bool { if v_1.Op != OpARM64FMULS { break } - _ = v_1.Args[1] - x := v_1.Args[0] y := v_1.Args[1] + x := v_1.Args[0] v.reset(OpARM64FMADDS) v.AddArg(a) v.AddArg(x) @@ -5128,15 +5185,13 @@ func rewriteValueARM64_OpARM64FADDS_0(v *Value) bool { // cond: // result: (FMADDS a x y) for { - _ = v.Args[1] + a := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64FMULS { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - a := v.Args[1] + x := v_0.Args[0] v.reset(OpARM64FMADDS) v.AddArg(a) v.AddArg(x) @@ -5153,9 +5208,8 @@ func rewriteValueARM64_OpARM64FADDS_0(v *Value) bool { if v_1.Op != OpARM64FNMULS { break } - _ = v_1.Args[1] - x := v_1.Args[0] y := v_1.Args[1] + x := v_1.Args[0] v.reset(OpARM64FMSUBS) v.AddArg(a) v.AddArg(x) @@ -5166,15 +5220,13 @@ func rewriteValueARM64_OpARM64FADDS_0(v *Value) bool { // cond: // result: (FMSUBS a x y) for { - _ = v.Args[1] + a := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64FNMULS { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - a := v.Args[1] + x := v_0.Args[0] v.reset(OpARM64FMSUBS) v.AddArg(a) v.AddArg(x) @@ -5183,9 +5235,86 @@ func rewriteValueARM64_OpARM64FADDS_0(v *Value) bool { } return false } +func rewriteValueARM64_OpARM64FCMPD_0(v *Value) bool { + b := v.Block + // match: (FCMPD x (FMOVDconst [0])) + // cond: + // result: (FCMPD0 x) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpARM64FMOVDconst { + break + } + if v_1.AuxInt != 0 { + break + } + v.reset(OpARM64FCMPD0) + v.AddArg(x) + return true + } + // match: (FCMPD (FMOVDconst [0]) x) + // cond: + // result: (InvertFlags (FCMPD0 x)) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpARM64FMOVDconst { + break + } + if v_0.AuxInt != 0 { + break + } + v.reset(OpARM64InvertFlags) + v0 := b.NewValue0(v.Pos, OpARM64FCMPD0, types.TypeFlags) + v0.AddArg(x) + v.AddArg(v0) + return true + } + return false +} +func rewriteValueARM64_OpARM64FCMPS_0(v *Value) bool { + b := v.Block + // match: (FCMPS x (FMOVSconst [0])) + // cond: + // result: (FCMPS0 x) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpARM64FMOVSconst { + break + } + if v_1.AuxInt != 0 { + break + } + v.reset(OpARM64FCMPS0) + v.AddArg(x) + return true + } + // match: (FCMPS (FMOVSconst [0]) x) + // cond: + // result: (InvertFlags (FCMPS0 x)) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpARM64FMOVSconst { + break + } + if v_0.AuxInt != 0 { + break + } + v.reset(OpARM64InvertFlags) + v0 := b.NewValue0(v.Pos, OpARM64FCMPS0, types.TypeFlags) + v0.AddArg(x) + v.AddArg(v0) + return true + } + return false +} func rewriteValueARM64_OpARM64FMOVDfpgp_0(v *Value) bool { b := v.Block - _ = b // match: (FMOVDfpgp (Arg [off] {sym})) // cond: // result: @b.Func.Entry (Arg [off] {sym}) @@ -5209,7 +5338,6 @@ func rewriteValueARM64_OpARM64FMOVDfpgp_0(v *Value) bool { } func rewriteValueARM64_OpARM64FMOVDgpfp_0(v *Value) bool { b := v.Block - _ = b // match: (FMOVDgpfp (Arg [off] {sym})) // cond: // result: @b.Func.Entry (Arg [off] {sym}) @@ -5233,9 +5361,7 @@ func rewriteValueARM64_OpARM64FMOVDgpfp_0(v *Value) bool { } func rewriteValueARM64_OpARM64FMOVDload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (FMOVDload [off] {sym} ptr (MOVDstore [off] {sym} ptr val _)) // cond: // result: (FMOVDgpfp val) @@ -5269,14 +5395,13 @@ func rewriteValueARM64_OpARM64FMOVDload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -5293,15 +5418,13 @@ func rewriteValueARM64_OpARM64FMOVDload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(off == 0 && sym == nil) { break } @@ -5317,7 +5440,7 @@ func rewriteValueARM64_OpARM64FMOVDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDaddr { break @@ -5325,7 +5448,6 @@ func rewriteValueARM64_OpARM64FMOVDload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -5343,14 +5465,13 @@ func rewriteValueARM64_OpARM64FMOVDloadidx_0(v *Value) bool { // cond: // result: (FMOVDload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARM64FMOVDload) v.AuxInt = c v.AddArg(ptr) @@ -5361,14 +5482,13 @@ func rewriteValueARM64_OpARM64FMOVDloadidx_0(v *Value) bool { // cond: // result: (FMOVDload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARM64FMOVDload) v.AuxInt = c v.AddArg(ptr) @@ -5379,23 +5499,20 @@ func rewriteValueARM64_OpARM64FMOVDloadidx_0(v *Value) bool { } func rewriteValueARM64_OpARM64FMOVDstore_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (FMOVDstore [off] {sym} ptr (FMOVDgpfp val) mem) // cond: // result: (MOVDstore [off] {sym} ptr val mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64FMOVDgpfp { break } val := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVDstore) v.AuxInt = off v.Aux = sym @@ -5410,7 +5527,7 @@ func rewriteValueARM64_OpARM64FMOVDstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64ADDconst { break @@ -5418,7 +5535,6 @@ func rewriteValueARM64_OpARM64FMOVDstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -5436,16 +5552,14 @@ func rewriteValueARM64_OpARM64FMOVDstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(off == 0 && sym == nil) { break } @@ -5462,7 +5576,7 @@ func rewriteValueARM64_OpARM64FMOVDstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDaddr { break @@ -5471,7 +5585,6 @@ func rewriteValueARM64_OpARM64FMOVDstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -5490,7 +5603,7 @@ func rewriteValueARM64_OpARM64FMOVDstoreidx_0(v *Value) bool { // cond: // result: (FMOVDstore [c] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { @@ -5498,7 +5611,6 @@ func rewriteValueARM64_OpARM64FMOVDstoreidx_0(v *Value) bool { } c := v_1.AuxInt val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64FMOVDstore) v.AuxInt = c v.AddArg(ptr) @@ -5510,7 +5622,7 @@ func rewriteValueARM64_OpARM64FMOVDstoreidx_0(v *Value) bool { // cond: // result: (FMOVDstore [c] idx val mem) for { - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break @@ -5518,7 +5630,6 @@ func rewriteValueARM64_OpARM64FMOVDstoreidx_0(v *Value) bool { c := v_0.AuxInt idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64FMOVDstore) v.AuxInt = c v.AddArg(idx) @@ -5530,9 +5641,7 @@ func rewriteValueARM64_OpARM64FMOVDstoreidx_0(v *Value) bool { } func rewriteValueARM64_OpARM64FMOVSload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (FMOVSload [off] {sym} ptr (MOVWstore [off] {sym} ptr val _)) // cond: // result: (FMOVSgpfp val) @@ -5566,14 +5675,13 @@ func rewriteValueARM64_OpARM64FMOVSload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -5590,15 +5698,13 @@ func rewriteValueARM64_OpARM64FMOVSload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(off == 0 && sym == nil) { break } @@ -5614,7 +5720,7 @@ func rewriteValueARM64_OpARM64FMOVSload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDaddr { break @@ -5622,7 +5728,6 @@ func rewriteValueARM64_OpARM64FMOVSload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -5640,14 +5745,13 @@ func rewriteValueARM64_OpARM64FMOVSloadidx_0(v *Value) bool { // cond: // result: (FMOVSload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARM64FMOVSload) v.AuxInt = c v.AddArg(ptr) @@ -5658,14 +5762,13 @@ func rewriteValueARM64_OpARM64FMOVSloadidx_0(v *Value) bool { // cond: // result: (FMOVSload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARM64FMOVSload) v.AuxInt = c v.AddArg(ptr) @@ -5676,23 +5779,20 @@ func rewriteValueARM64_OpARM64FMOVSloadidx_0(v *Value) bool { } func rewriteValueARM64_OpARM64FMOVSstore_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (FMOVSstore [off] {sym} ptr (FMOVSgpfp val) mem) // cond: // result: (MOVWstore [off] {sym} ptr val mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64FMOVSgpfp { break } val := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVWstore) v.AuxInt = off v.Aux = sym @@ -5707,7 +5807,7 @@ func rewriteValueARM64_OpARM64FMOVSstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64ADDconst { break @@ -5715,7 +5815,6 @@ func rewriteValueARM64_OpARM64FMOVSstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -5733,16 +5832,14 @@ func rewriteValueARM64_OpARM64FMOVSstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(off == 0 && sym == nil) { break } @@ -5759,7 +5856,7 @@ func rewriteValueARM64_OpARM64FMOVSstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDaddr { break @@ -5768,7 +5865,6 @@ func rewriteValueARM64_OpARM64FMOVSstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -5787,7 +5883,7 @@ func rewriteValueARM64_OpARM64FMOVSstoreidx_0(v *Value) bool { // cond: // result: (FMOVSstore [c] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { @@ -5795,7 +5891,6 @@ func rewriteValueARM64_OpARM64FMOVSstoreidx_0(v *Value) bool { } c := v_1.AuxInt val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64FMOVSstore) v.AuxInt = c v.AddArg(ptr) @@ -5807,7 +5902,7 @@ func rewriteValueARM64_OpARM64FMOVSstoreidx_0(v *Value) bool { // cond: // result: (FMOVSstore [c] idx val mem) for { - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break @@ -5815,7 +5910,6 @@ func rewriteValueARM64_OpARM64FMOVSstoreidx_0(v *Value) bool { c := v_0.AuxInt idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64FMOVSstore) v.AuxInt = c v.AddArg(idx) @@ -5830,13 +5924,12 @@ func rewriteValueARM64_OpARM64FMULD_0(v *Value) bool { // cond: // result: (FNMULD x y) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64FNEGD { break } x := v_0.Args[0] - y := v.Args[1] v.reset(OpARM64FNMULD) v.AddArg(x) v.AddArg(y) @@ -5865,13 +5958,12 @@ func rewriteValueARM64_OpARM64FMULS_0(v *Value) bool { // cond: // result: (FNMULS x y) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64FNEGS { break } x := v_0.Args[0] - y := v.Args[1] v.reset(OpARM64FNMULS) v.AddArg(x) v.AddArg(y) @@ -5904,9 +5996,8 @@ func rewriteValueARM64_OpARM64FNEGD_0(v *Value) bool { if v_0.Op != OpARM64FMULD { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpARM64FNMULD) v.AddArg(x) v.AddArg(y) @@ -5920,9 +6011,8 @@ func rewriteValueARM64_OpARM64FNEGD_0(v *Value) bool { if v_0.Op != OpARM64FNMULD { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpARM64FMULD) v.AddArg(x) v.AddArg(y) @@ -5939,9 +6029,8 @@ func rewriteValueARM64_OpARM64FNEGS_0(v *Value) bool { if v_0.Op != OpARM64FMULS { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpARM64FNMULS) v.AddArg(x) v.AddArg(y) @@ -5955,9 +6044,8 @@ func rewriteValueARM64_OpARM64FNEGS_0(v *Value) bool { if v_0.Op != OpARM64FNMULS { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpARM64FMULS) v.AddArg(x) v.AddArg(y) @@ -5970,13 +6058,12 @@ func rewriteValueARM64_OpARM64FNMULD_0(v *Value) bool { // cond: // result: (FMULD x y) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64FNEGD { break } x := v_0.Args[0] - y := v.Args[1] v.reset(OpARM64FMULD) v.AddArg(x) v.AddArg(y) @@ -6005,13 +6092,12 @@ func rewriteValueARM64_OpARM64FNMULS_0(v *Value) bool { // cond: // result: (FMULS x y) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64FNEGS { break } x := v_0.Args[0] - y := v.Args[1] v.reset(OpARM64FMULS) v.AddArg(x) v.AddArg(y) @@ -6046,9 +6132,8 @@ func rewriteValueARM64_OpARM64FSUBD_0(v *Value) bool { if v_1.Op != OpARM64FMULD { break } - _ = v_1.Args[1] - x := v_1.Args[0] y := v_1.Args[1] + x := v_1.Args[0] v.reset(OpARM64FMSUBD) v.AddArg(a) v.AddArg(x) @@ -6059,15 +6144,13 @@ func rewriteValueARM64_OpARM64FSUBD_0(v *Value) bool { // cond: // result: (FNMSUBD a x y) for { - _ = v.Args[1] + a := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64FMULD { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - a := v.Args[1] + x := v_0.Args[0] v.reset(OpARM64FNMSUBD) v.AddArg(a) v.AddArg(x) @@ -6084,9 +6167,8 @@ func rewriteValueARM64_OpARM64FSUBD_0(v *Value) bool { if v_1.Op != OpARM64FNMULD { break } - _ = v_1.Args[1] - x := v_1.Args[0] y := v_1.Args[1] + x := v_1.Args[0] v.reset(OpARM64FMADDD) v.AddArg(a) v.AddArg(x) @@ -6097,15 +6179,13 @@ func rewriteValueARM64_OpARM64FSUBD_0(v *Value) bool { // cond: // result: (FNMADDD a x y) for { - _ = v.Args[1] + a := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64FNMULD { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - a := v.Args[1] + x := v_0.Args[0] v.reset(OpARM64FNMADDD) v.AddArg(a) v.AddArg(x) @@ -6125,9 +6205,8 @@ func rewriteValueARM64_OpARM64FSUBS_0(v *Value) bool { if v_1.Op != OpARM64FMULS { break } - _ = v_1.Args[1] - x := v_1.Args[0] y := v_1.Args[1] + x := v_1.Args[0] v.reset(OpARM64FMSUBS) v.AddArg(a) v.AddArg(x) @@ -6138,15 +6217,13 @@ func rewriteValueARM64_OpARM64FSUBS_0(v *Value) bool { // cond: // result: (FNMSUBS a x y) for { - _ = v.Args[1] + a := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64FMULS { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - a := v.Args[1] + x := v_0.Args[0] v.reset(OpARM64FNMSUBS) v.AddArg(a) v.AddArg(x) @@ -6163,9 +6240,8 @@ func rewriteValueARM64_OpARM64FSUBS_0(v *Value) bool { if v_1.Op != OpARM64FNMULS { break } - _ = v_1.Args[1] - x := v_1.Args[0] y := v_1.Args[1] + x := v_1.Args[0] v.reset(OpARM64FMADDS) v.AddArg(a) v.AddArg(x) @@ -6176,15 +6252,13 @@ func rewriteValueARM64_OpARM64FSUBS_0(v *Value) bool { // cond: // result: (FNMADDS a x y) for { - _ = v.Args[1] + a := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64FNMULS { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - a := v.Args[1] + x := v_0.Args[0] v.reset(OpARM64FNMADDS) v.AddArg(a) v.AddArg(x) @@ -6269,6 +6343,22 @@ func rewriteValueARM64_OpARM64GreaterEqual_0(v *Value) bool { } return false } +func rewriteValueARM64_OpARM64GreaterEqualF_0(v *Value) bool { + // match: (GreaterEqualF (InvertFlags x)) + // cond: + // result: (LessEqualF x) + for { + v_0 := v.Args[0] + if v_0.Op != OpARM64InvertFlags { + break + } + x := v_0.Args[0] + v.reset(OpARM64LessEqualF) + v.AddArg(x) + return true + } + return false +} func rewriteValueARM64_OpARM64GreaterEqualU_0(v *Value) bool { // match: (GreaterEqualU (FlagEQ)) // cond: @@ -6421,6 +6511,22 @@ func rewriteValueARM64_OpARM64GreaterThan_0(v *Value) bool { } return false } +func rewriteValueARM64_OpARM64GreaterThanF_0(v *Value) bool { + // match: (GreaterThanF (InvertFlags x)) + // cond: + // result: (LessThanF x) + for { + v_0 := v.Args[0] + if v_0.Op != OpARM64InvertFlags { + break + } + x := v_0.Args[0] + v.reset(OpARM64LessThanF) + v.AddArg(x) + return true + } + return false +} func rewriteValueARM64_OpARM64GreaterThanU_0(v *Value) bool { // match: (GreaterThanU (FlagEQ)) // cond: @@ -6573,6 +6679,22 @@ func rewriteValueARM64_OpARM64LessEqual_0(v *Value) bool { } return false } +func rewriteValueARM64_OpARM64LessEqualF_0(v *Value) bool { + // match: (LessEqualF (InvertFlags x)) + // cond: + // result: (GreaterEqualF x) + for { + v_0 := v.Args[0] + if v_0.Op != OpARM64InvertFlags { + break + } + x := v_0.Args[0] + v.reset(OpARM64GreaterEqualF) + v.AddArg(x) + return true + } + return false +} func rewriteValueARM64_OpARM64LessEqualU_0(v *Value) bool { // match: (LessEqualU (FlagEQ)) // cond: @@ -6725,6 +6847,22 @@ func rewriteValueARM64_OpARM64LessThan_0(v *Value) bool { } return false } +func rewriteValueARM64_OpARM64LessThanF_0(v *Value) bool { + // match: (LessThanF (InvertFlags x)) + // cond: + // result: (GreaterThanF x) + for { + v_0 := v.Args[0] + if v_0.Op != OpARM64InvertFlags { + break + } + x := v_0.Args[0] + v.reset(OpARM64GreaterThanF) + v.AddArg(x) + return true + } + return false +} func rewriteValueARM64_OpARM64LessThanU_0(v *Value) bool { // match: (LessThanU (FlagEQ)) // cond: @@ -6803,7 +6941,6 @@ func rewriteValueARM64_OpARM64LessThanU_0(v *Value) bool { } func rewriteValueARM64_OpARM64MADD_0(v *Value) bool { b := v.Block - _ = b // match: (MADD a x (MOVDconst [-1])) // cond: // result: (SUB a x) @@ -7033,12 +7170,11 @@ func rewriteValueARM64_OpARM64MADD_0(v *Value) bool { } func rewriteValueARM64_OpARM64MADD_10(v *Value) bool { b := v.Block - _ = b // match: (MADD a (MOVDconst [-1]) x) // cond: // result: (SUB a x) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { @@ -7047,7 +7183,6 @@ func rewriteValueARM64_OpARM64MADD_10(v *Value) bool { if v_1.AuxInt != -1 { break } - x := v.Args[2] v.reset(OpARM64SUB) v.AddArg(a) v.AddArg(x) @@ -7075,7 +7210,7 @@ func rewriteValueARM64_OpARM64MADD_10(v *Value) bool { // cond: // result: (ADD a x) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { @@ -7084,7 +7219,6 @@ func rewriteValueARM64_OpARM64MADD_10(v *Value) bool { if v_1.AuxInt != 1 { break } - x := v.Args[2] v.reset(OpARM64ADD) v.AddArg(a) v.AddArg(x) @@ -7094,14 +7228,13 @@ func rewriteValueARM64_OpARM64MADD_10(v *Value) bool { // cond: isPowerOfTwo(c) // result: (ADDshiftLL a x [log2(c)]) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(isPowerOfTwo(c)) { break } @@ -7115,14 +7248,13 @@ func rewriteValueARM64_OpARM64MADD_10(v *Value) bool { // cond: isPowerOfTwo(c-1) && c>=3 // result: (ADD a (ADDshiftLL x x [log2(c-1)])) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(isPowerOfTwo(c-1) && c >= 3) { break } @@ -7139,14 +7271,13 @@ func rewriteValueARM64_OpARM64MADD_10(v *Value) bool { // cond: isPowerOfTwo(c+1) && c>=7 // result: (SUB a (SUBshiftLL x x [log2(c+1)])) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(isPowerOfTwo(c+1) && c >= 7) { break } @@ -7163,14 +7294,13 @@ func rewriteValueARM64_OpARM64MADD_10(v *Value) bool { // cond: c%3 == 0 && isPowerOfTwo(c/3) // result: (SUBshiftLL a (SUBshiftLL x x [2]) [log2(c/3)]) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(c%3 == 0 && isPowerOfTwo(c/3)) { break } @@ -7188,14 +7318,13 @@ func rewriteValueARM64_OpARM64MADD_10(v *Value) bool { // cond: c%5 == 0 && isPowerOfTwo(c/5) // result: (ADDshiftLL a (ADDshiftLL x x [2]) [log2(c/5)]) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(c%5 == 0 && isPowerOfTwo(c/5)) { break } @@ -7213,14 +7342,13 @@ func rewriteValueARM64_OpARM64MADD_10(v *Value) bool { // cond: c%7 == 0 && isPowerOfTwo(c/7) // result: (SUBshiftLL a (SUBshiftLL x x [3]) [log2(c/7)]) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(c%7 == 0 && isPowerOfTwo(c/7)) { break } @@ -7238,14 +7366,13 @@ func rewriteValueARM64_OpARM64MADD_10(v *Value) bool { // cond: c%9 == 0 && isPowerOfTwo(c/9) // result: (ADDshiftLL a (ADDshiftLL x x [3]) [log2(c/9)]) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(c%9 == 0 && isPowerOfTwo(c/9)) { break } @@ -7263,19 +7390,17 @@ func rewriteValueARM64_OpARM64MADD_10(v *Value) bool { } func rewriteValueARM64_OpARM64MADD_20(v *Value) bool { b := v.Block - _ = b // match: (MADD (MOVDconst [c]) x y) // cond: // result: (ADDconst [c] (MUL x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARM64ADDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64MUL, x.Type) @@ -7309,7 +7434,6 @@ func rewriteValueARM64_OpARM64MADD_20(v *Value) bool { } func rewriteValueARM64_OpARM64MADDW_0(v *Value) bool { b := v.Block - _ = b // match: (MADDW a x (MOVDconst [c])) // cond: int32(c)==-1 // result: (SUB a x) @@ -7542,19 +7666,17 @@ func rewriteValueARM64_OpARM64MADDW_0(v *Value) bool { } func rewriteValueARM64_OpARM64MADDW_10(v *Value) bool { b := v.Block - _ = b // match: (MADDW a (MOVDconst [c]) x) // cond: int32(c)==-1 // result: (SUB a x) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(int32(c) == -1) { break } @@ -7586,14 +7708,13 @@ func rewriteValueARM64_OpARM64MADDW_10(v *Value) bool { // cond: int32(c)==1 // result: (ADD a x) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(int32(c) == 1) { break } @@ -7606,14 +7727,13 @@ func rewriteValueARM64_OpARM64MADDW_10(v *Value) bool { // cond: isPowerOfTwo(c) // result: (ADDshiftLL a x [log2(c)]) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(isPowerOfTwo(c)) { break } @@ -7627,14 +7747,13 @@ func rewriteValueARM64_OpARM64MADDW_10(v *Value) bool { // cond: isPowerOfTwo(c-1) && int32(c)>=3 // result: (ADD a (ADDshiftLL x x [log2(c-1)])) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(isPowerOfTwo(c-1) && int32(c) >= 3) { break } @@ -7651,14 +7770,13 @@ func rewriteValueARM64_OpARM64MADDW_10(v *Value) bool { // cond: isPowerOfTwo(c+1) && int32(c)>=7 // result: (SUB a (SUBshiftLL x x [log2(c+1)])) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(isPowerOfTwo(c+1) && int32(c) >= 7) { break } @@ -7675,14 +7793,13 @@ func rewriteValueARM64_OpARM64MADDW_10(v *Value) bool { // cond: c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c) // result: (SUBshiftLL a (SUBshiftLL x x [2]) [log2(c/3)]) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c)) { break } @@ -7700,14 +7817,13 @@ func rewriteValueARM64_OpARM64MADDW_10(v *Value) bool { // cond: c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c) // result: (ADDshiftLL a (ADDshiftLL x x [2]) [log2(c/5)]) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c)) { break } @@ -7725,14 +7841,13 @@ func rewriteValueARM64_OpARM64MADDW_10(v *Value) bool { // cond: c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c) // result: (SUBshiftLL a (SUBshiftLL x x [3]) [log2(c/7)]) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c)) { break } @@ -7750,14 +7865,13 @@ func rewriteValueARM64_OpARM64MADDW_10(v *Value) bool { // cond: c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c) // result: (ADDshiftLL a (ADDshiftLL x x [3]) [log2(c/9)]) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c)) { break } @@ -7775,19 +7889,17 @@ func rewriteValueARM64_OpARM64MADDW_10(v *Value) bool { } func rewriteValueARM64_OpARM64MADDW_20(v *Value) bool { b := v.Block - _ = b // match: (MADDW (MOVDconst [c]) x y) // cond: // result: (ADDconst [c] (MULW x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARM64ADDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64MULW, x.Type) @@ -7821,7 +7933,6 @@ func rewriteValueARM64_OpARM64MADDW_20(v *Value) bool { } func rewriteValueARM64_OpARM64MNEG_0(v *Value) bool { b := v.Block - _ = b // match: (MNEG x (MOVDconst [-1])) // cond: // result: x @@ -7844,7 +7955,7 @@ func rewriteValueARM64_OpARM64MNEG_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break @@ -7852,7 +7963,6 @@ func rewriteValueARM64_OpARM64MNEG_0(v *Value) bool { if v_0.AuxInt != -1 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -7911,7 +8021,7 @@ func rewriteValueARM64_OpARM64MNEG_0(v *Value) bool { // cond: // result: (NEG x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break @@ -7919,7 +8029,6 @@ func rewriteValueARM64_OpARM64MNEG_0(v *Value) bool { if v_0.AuxInt != 1 { break } - x := v.Args[1] v.reset(OpARM64NEG) v.AddArg(x) return true @@ -7949,13 +8058,12 @@ func rewriteValueARM64_OpARM64MNEG_0(v *Value) bool { // cond: isPowerOfTwo(c) // result: (NEG (SLLconst [log2(c)] x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isPowerOfTwo(c)) { break } @@ -7992,13 +8100,12 @@ func rewriteValueARM64_OpARM64MNEG_0(v *Value) bool { // cond: isPowerOfTwo(c-1) && c >= 3 // result: (NEG (ADDshiftLL x x [log2(c-1)])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isPowerOfTwo(c-1) && c >= 3) { break } @@ -8014,7 +8121,6 @@ func rewriteValueARM64_OpARM64MNEG_0(v *Value) bool { } func rewriteValueARM64_OpARM64MNEG_10(v *Value) bool { b := v.Block - _ = b // match: (MNEG x (MOVDconst [c])) // cond: isPowerOfTwo(c+1) && c >= 7 // result: (NEG (ADDshiftLL (NEG x) x [log2(c+1)])) @@ -8043,13 +8149,12 @@ func rewriteValueARM64_OpARM64MNEG_10(v *Value) bool { // cond: isPowerOfTwo(c+1) && c >= 7 // result: (NEG (ADDshiftLL (NEG x) x [log2(c+1)])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isPowerOfTwo(c+1) && c >= 7) { break } @@ -8091,13 +8196,12 @@ func rewriteValueARM64_OpARM64MNEG_10(v *Value) bool { // cond: c%3 == 0 && isPowerOfTwo(c/3) // result: (SLLconst [log2(c/3)] (SUBshiftLL x x [2])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(c%3 == 0 && isPowerOfTwo(c/3)) { break } @@ -8140,13 +8244,12 @@ func rewriteValueARM64_OpARM64MNEG_10(v *Value) bool { // cond: c%5 == 0 && isPowerOfTwo(c/5) // result: (NEG (SLLconst [log2(c/5)] (ADDshiftLL x x [2]))) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(c%5 == 0 && isPowerOfTwo(c/5)) { break } @@ -8189,13 +8292,12 @@ func rewriteValueARM64_OpARM64MNEG_10(v *Value) bool { // cond: c%7 == 0 && isPowerOfTwo(c/7) // result: (SLLconst [log2(c/7)] (SUBshiftLL x x [3])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(c%7 == 0 && isPowerOfTwo(c/7)) { break } @@ -8238,13 +8340,12 @@ func rewriteValueARM64_OpARM64MNEG_10(v *Value) bool { // cond: c%9 == 0 && isPowerOfTwo(c/9) // result: (NEG (SLLconst [log2(c/9)] (ADDshiftLL x x [3]))) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(c%9 == 0 && isPowerOfTwo(c/9)) { break } @@ -8304,7 +8405,6 @@ func rewriteValueARM64_OpARM64MNEG_20(v *Value) bool { } func rewriteValueARM64_OpARM64MNEGW_0(v *Value) bool { b := v.Block - _ = b // match: (MNEGW x (MOVDconst [c])) // cond: int32(c)==-1 // result: x @@ -8328,13 +8428,12 @@ func rewriteValueARM64_OpARM64MNEGW_0(v *Value) bool { // cond: int32(c)==-1 // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(int32(c) == -1) { break } @@ -8399,13 +8498,12 @@ func rewriteValueARM64_OpARM64MNEGW_0(v *Value) bool { // cond: int32(c)==1 // result: (NEG x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(int32(c) == 1) { break } @@ -8438,13 +8536,12 @@ func rewriteValueARM64_OpARM64MNEGW_0(v *Value) bool { // cond: isPowerOfTwo(c) // result: (NEG (SLLconst [log2(c)] x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isPowerOfTwo(c)) { break } @@ -8481,13 +8578,12 @@ func rewriteValueARM64_OpARM64MNEGW_0(v *Value) bool { // cond: isPowerOfTwo(c-1) && int32(c) >= 3 // result: (NEG (ADDshiftLL x x [log2(c-1)])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isPowerOfTwo(c-1) && int32(c) >= 3) { break } @@ -8503,7 +8599,6 @@ func rewriteValueARM64_OpARM64MNEGW_0(v *Value) bool { } func rewriteValueARM64_OpARM64MNEGW_10(v *Value) bool { b := v.Block - _ = b // match: (MNEGW x (MOVDconst [c])) // cond: isPowerOfTwo(c+1) && int32(c) >= 7 // result: (NEG (ADDshiftLL (NEG x) x [log2(c+1)])) @@ -8532,13 +8627,12 @@ func rewriteValueARM64_OpARM64MNEGW_10(v *Value) bool { // cond: isPowerOfTwo(c+1) && int32(c) >= 7 // result: (NEG (ADDshiftLL (NEG x) x [log2(c+1)])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isPowerOfTwo(c+1) && int32(c) >= 7) { break } @@ -8580,13 +8674,12 @@ func rewriteValueARM64_OpARM64MNEGW_10(v *Value) bool { // cond: c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c) // result: (SLLconst [log2(c/3)] (SUBshiftLL x x [2])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c)) { break } @@ -8629,13 +8722,12 @@ func rewriteValueARM64_OpARM64MNEGW_10(v *Value) bool { // cond: c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c) // result: (NEG (SLLconst [log2(c/5)] (ADDshiftLL x x [2]))) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c)) { break } @@ -8678,13 +8770,12 @@ func rewriteValueARM64_OpARM64MNEGW_10(v *Value) bool { // cond: c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c) // result: (SLLconst [log2(c/7)] (SUBshiftLL x x [3])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c)) { break } @@ -8727,13 +8818,12 @@ func rewriteValueARM64_OpARM64MNEGW_10(v *Value) bool { // cond: c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c) // result: (NEG (SLLconst [log2(c/9)] (ADDshiftLL x x [3]))) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c)) { break } @@ -8837,23 +8927,20 @@ func rewriteValueARM64_OpARM64MODW_0(v *Value) bool { } func rewriteValueARM64_OpARM64MOVBUload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVBUload [off1] {sym} (ADDconst [off2] ptr) mem) // cond: is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared) // result: (MOVBUload [off1+off2] {sym} ptr mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -8870,15 +8957,13 @@ func rewriteValueARM64_OpARM64MOVBUload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(off == 0 && sym == nil) { break } @@ -8894,7 +8979,7 @@ func rewriteValueARM64_OpARM64MOVBUload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDaddr { break @@ -8902,7 +8987,6 @@ func rewriteValueARM64_OpARM64MOVBUload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -8961,14 +9045,13 @@ func rewriteValueARM64_OpARM64MOVBUloadidx_0(v *Value) bool { // cond: // result: (MOVBUload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARM64MOVBUload) v.AuxInt = c v.AddArg(ptr) @@ -8979,14 +9062,13 @@ func rewriteValueARM64_OpARM64MOVBUloadidx_0(v *Value) bool { // cond: // result: (MOVBUload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVBUload) v.AuxInt = c v.AddArg(ptr) @@ -9097,7 +9179,7 @@ func rewriteValueARM64_OpARM64MOVBUreg_0(v *Value) bool { } // match: (MOVBUreg (SLLconst [sc] x)) // cond: isARM64BFMask(sc, 1<<8-1, sc) - // result: (UBFIZ [arm64BFAuxInt(sc, arm64BFWidth(1<<8-1, sc))] x) + // result: (UBFIZ [armBFAuxInt(sc, arm64BFWidth(1<<8-1, sc))] x) for { v_0 := v.Args[0] if v_0.Op != OpARM64SLLconst { @@ -9109,13 +9191,13 @@ func rewriteValueARM64_OpARM64MOVBUreg_0(v *Value) bool { break } v.reset(OpARM64UBFIZ) - v.AuxInt = arm64BFAuxInt(sc, arm64BFWidth(1<<8-1, sc)) + v.AuxInt = armBFAuxInt(sc, arm64BFWidth(1<<8-1, sc)) v.AddArg(x) return true } // match: (MOVBUreg (SRLconst [sc] x)) // cond: isARM64BFMask(sc, 1<<8-1, 0) - // result: (UBFX [arm64BFAuxInt(sc, 8)] x) + // result: (UBFX [armBFAuxInt(sc, 8)] x) for { v_0 := v.Args[0] if v_0.Op != OpARM64SRLconst { @@ -9127,7 +9209,7 @@ func rewriteValueARM64_OpARM64MOVBUreg_0(v *Value) bool { break } v.reset(OpARM64UBFX) - v.AuxInt = arm64BFAuxInt(sc, 8) + v.AuxInt = armBFAuxInt(sc, 8) v.AddArg(x) return true } @@ -9135,23 +9217,20 @@ func rewriteValueARM64_OpARM64MOVBUreg_0(v *Value) bool { } func rewriteValueARM64_OpARM64MOVBload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVBload [off1] {sym} (ADDconst [off2] ptr) mem) // cond: is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared) // result: (MOVBload [off1+off2] {sym} ptr mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -9168,15 +9247,13 @@ func rewriteValueARM64_OpARM64MOVBload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(off == 0 && sym == nil) { break } @@ -9192,7 +9269,7 @@ func rewriteValueARM64_OpARM64MOVBload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDaddr { break @@ -9200,7 +9277,6 @@ func rewriteValueARM64_OpARM64MOVBload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -9241,14 +9317,13 @@ func rewriteValueARM64_OpARM64MOVBloadidx_0(v *Value) bool { // cond: // result: (MOVBload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARM64MOVBload) v.AuxInt = c v.AddArg(ptr) @@ -9259,14 +9334,13 @@ func rewriteValueARM64_OpARM64MOVBloadidx_0(v *Value) bool { // cond: // result: (MOVBload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVBload) v.AuxInt = c v.AddArg(ptr) @@ -9350,7 +9424,7 @@ func rewriteValueARM64_OpARM64MOVBreg_0(v *Value) bool { } // match: (MOVBreg (SLLconst [lc] x)) // cond: lc < 8 - // result: (SBFIZ [arm64BFAuxInt(lc, 8-lc)] x) + // result: (SBFIZ [armBFAuxInt(lc, 8-lc)] x) for { v_0 := v.Args[0] if v_0.Op != OpARM64SLLconst { @@ -9362,7 +9436,7 @@ func rewriteValueARM64_OpARM64MOVBreg_0(v *Value) bool { break } v.reset(OpARM64SBFIZ) - v.AuxInt = arm64BFAuxInt(lc, 8-lc) + v.AuxInt = armBFAuxInt(lc, 8-lc) v.AddArg(x) return true } @@ -9370,16 +9444,14 @@ func rewriteValueARM64_OpARM64MOVBreg_0(v *Value) bool { } func rewriteValueARM64_OpARM64MOVBstore_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVBstore [off1] {sym} (ADDconst [off2] ptr) val mem) // cond: is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared) // result: (MOVBstore [off1+off2] {sym} ptr val mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64ADDconst { break @@ -9387,7 +9459,6 @@ func rewriteValueARM64_OpARM64MOVBstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -9405,16 +9476,14 @@ func rewriteValueARM64_OpARM64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(off == 0 && sym == nil) { break } @@ -9431,7 +9500,7 @@ func rewriteValueARM64_OpARM64MOVBstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDaddr { break @@ -9440,7 +9509,6 @@ func rewriteValueARM64_OpARM64MOVBstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -9458,7 +9526,7 @@ func rewriteValueARM64_OpARM64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { @@ -9467,7 +9535,6 @@ func rewriteValueARM64_OpARM64MOVBstore_0(v *Value) bool { if v_1.AuxInt != 0 { break } - mem := v.Args[2] v.reset(OpARM64MOVBstorezero) v.AuxInt = off v.Aux = sym @@ -9481,14 +9548,13 @@ func rewriteValueARM64_OpARM64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVBreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVBstore) v.AuxInt = off v.Aux = sym @@ -9503,14 +9569,13 @@ func rewriteValueARM64_OpARM64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVBUreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVBstore) v.AuxInt = off v.Aux = sym @@ -9525,14 +9590,13 @@ func rewriteValueARM64_OpARM64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVHreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVBstore) v.AuxInt = off v.Aux = sym @@ -9547,14 +9611,13 @@ func rewriteValueARM64_OpARM64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVHUreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVBstore) v.AuxInt = off v.Aux = sym @@ -9569,14 +9632,13 @@ func rewriteValueARM64_OpARM64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVWreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVBstore) v.AuxInt = off v.Aux = sym @@ -9591,14 +9653,13 @@ func rewriteValueARM64_OpARM64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVWUreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVBstore) v.AuxInt = off v.Aux = sym @@ -9636,12 +9697,11 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] ptr1 := x.Args[0] if w != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && isSamePtr(ptr0, ptr1) && clobber(x)) { break } @@ -9666,9 +9726,8 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SRLconst { break @@ -9681,13 +9740,12 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { if x.Op != OpARM64MOVBstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] ptr1 := x.Args[0] idx1 := x.Args[1] if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x)) { break } @@ -9698,7 +9756,7 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { v.AddArg(mem) return true } - // match: (MOVBstore [i] {s} ptr0 (UBFX [arm64BFAuxInt(8, 8)] w) x:(MOVBstore [i-1] {s} ptr1 w mem)) + // match: (MOVBstore [i] {s} ptr0 (UBFX [armBFAuxInt(8, 8)] w) x:(MOVBstore [i-1] {s} ptr1 w mem)) // cond: x.Uses == 1 && isSamePtr(ptr0, ptr1) && clobber(x) // result: (MOVHstore [i-1] {s} ptr0 w mem) for { @@ -9710,7 +9768,7 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { if v_1.Op != OpARM64UBFX { break } - if v_1.AuxInt != arm64BFAuxInt(8, 8) { + if v_1.AuxInt != armBFAuxInt(8, 8) { break } w := v_1.Args[0] @@ -9724,12 +9782,11 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] ptr1 := x.Args[0] if w != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && isSamePtr(ptr0, ptr1) && clobber(x)) { break } @@ -9741,7 +9798,7 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { v.AddArg(mem) return true } - // match: (MOVBstore [1] {s} (ADD ptr0 idx0) (UBFX [arm64BFAuxInt(8, 8)] w) x:(MOVBstoreidx ptr1 idx1 w mem)) + // match: (MOVBstore [1] {s} (ADD ptr0 idx0) (UBFX [armBFAuxInt(8, 8)] w) x:(MOVBstoreidx ptr1 idx1 w mem)) // cond: x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x) // result: (MOVHstoreidx ptr1 idx1 w mem) for { @@ -9754,14 +9811,13 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64UBFX { break } - if v_1.AuxInt != arm64BFAuxInt(8, 8) { + if v_1.AuxInt != armBFAuxInt(8, 8) { break } w := v_1.Args[0] @@ -9769,13 +9825,12 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { if x.Op != OpARM64MOVBstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] ptr1 := x.Args[0] idx1 := x.Args[1] if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x)) { break } @@ -9786,7 +9841,7 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { v.AddArg(mem) return true } - // match: (MOVBstore [i] {s} ptr0 (UBFX [arm64BFAuxInt(8, 24)] w) x:(MOVBstore [i-1] {s} ptr1 w mem)) + // match: (MOVBstore [i] {s} ptr0 (UBFX [armBFAuxInt(8, 24)] w) x:(MOVBstore [i-1] {s} ptr1 w mem)) // cond: x.Uses == 1 && isSamePtr(ptr0, ptr1) && clobber(x) // result: (MOVHstore [i-1] {s} ptr0 w mem) for { @@ -9798,7 +9853,7 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { if v_1.Op != OpARM64UBFX { break } - if v_1.AuxInt != arm64BFAuxInt(8, 24) { + if v_1.AuxInt != armBFAuxInt(8, 24) { break } w := v_1.Args[0] @@ -9812,12 +9867,11 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] ptr1 := x.Args[0] if w != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && isSamePtr(ptr0, ptr1) && clobber(x)) { break } @@ -9829,7 +9883,7 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { v.AddArg(mem) return true } - // match: (MOVBstore [1] {s} (ADD ptr0 idx0) (UBFX [arm64BFAuxInt(8, 24)] w) x:(MOVBstoreidx ptr1 idx1 w mem)) + // match: (MOVBstore [1] {s} (ADD ptr0 idx0) (UBFX [armBFAuxInt(8, 24)] w) x:(MOVBstoreidx ptr1 idx1 w mem)) // cond: x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x) // result: (MOVHstoreidx ptr1 idx1 w mem) for { @@ -9842,14 +9896,13 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64UBFX { break } - if v_1.AuxInt != arm64BFAuxInt(8, 24) { + if v_1.AuxInt != armBFAuxInt(8, 24) { break } w := v_1.Args[0] @@ -9857,13 +9910,12 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { if x.Op != OpARM64MOVBstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] ptr1 := x.Args[0] idx1 := x.Args[1] if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x)) { break } @@ -9904,12 +9956,11 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] ptr1 := x.Args[0] if w != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && isSamePtr(ptr0, ptr1) && clobber(x)) { break } @@ -9934,9 +9985,8 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SRLconst { break @@ -9953,13 +10003,12 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { if x.Op != OpARM64MOVBstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] ptr1 := x.Args[0] idx1 := x.Args[1] if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x)) { break } @@ -9994,7 +10043,7 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] ptr1 := x.Args[0] w0 := x.Args[1] if w0.Op != OpARM64SRLconst { @@ -10006,7 +10055,6 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && isSamePtr(ptr0, ptr1) && clobber(x)) { break } @@ -10031,9 +10079,8 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SRLconst { break @@ -10044,7 +10091,7 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { if x.Op != OpARM64MOVBstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] ptr1 := x.Args[0] idx1 := x.Args[1] w0 := x.Args[2] @@ -10057,7 +10104,6 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x)) { break } @@ -10072,7 +10118,6 @@ func rewriteValueARM64_OpARM64MOVBstore_10(v *Value) bool { } func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { b := v.Block - _ = b // match: (MOVBstore [i] {s} ptr0 (UBFX [bfc] w) x:(MOVBstore [i-1] {s} ptr1 w0:(UBFX [bfc2] w) mem)) // cond: x.Uses == 1 && isSamePtr(ptr0, ptr1) && getARM64BFwidth(bfc) == 32 - getARM64BFlsb(bfc) && getARM64BFwidth(bfc2) == 32 - getARM64BFlsb(bfc2) && getARM64BFlsb(bfc2) == getARM64BFlsb(bfc) - 8 && clobber(x) // result: (MOVHstore [i-1] {s} ptr0 w0 mem) @@ -10097,7 +10142,7 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] ptr1 := x.Args[0] w0 := x.Args[1] if w0.Op != OpARM64UBFX { @@ -10107,7 +10152,6 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && isSamePtr(ptr0, ptr1) && getARM64BFwidth(bfc) == 32-getARM64BFlsb(bfc) && getARM64BFwidth(bfc2) == 32-getARM64BFlsb(bfc2) && getARM64BFlsb(bfc2) == getARM64BFlsb(bfc)-8 && clobber(x)) { break } @@ -10132,9 +10176,8 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64UBFX { break @@ -10145,7 +10188,7 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if x.Op != OpARM64MOVBstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] ptr1 := x.Args[0] idx1 := x.Args[1] w0 := x.Args[2] @@ -10156,7 +10199,6 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && getARM64BFwidth(bfc) == 32-getARM64BFlsb(bfc) && getARM64BFwidth(bfc2) == 32-getARM64BFlsb(bfc2) && getARM64BFlsb(bfc2) == getARM64BFlsb(bfc)-8 && clobber(x)) { break } @@ -10195,7 +10237,7 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] ptr1 := x.Args[0] w0 := x.Args[1] if w0.Op != OpARM64SRLconst { @@ -10211,7 +10253,6 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if w != w0_0.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && isSamePtr(ptr0, ptr1) && clobber(x)) { break } @@ -10236,9 +10277,8 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SRLconst { break @@ -10253,7 +10293,7 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if x.Op != OpARM64MOVBstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] ptr1 := x.Args[0] idx1 := x.Args[1] w0 := x.Args[2] @@ -10270,7 +10310,6 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if w != w0_0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x)) { break } @@ -10444,7 +10483,7 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if x6.Aux != s { break } - _ = x6.Args[2] + mem := x6.Args[2] if ptr != x6.Args[0] { break } @@ -10458,7 +10497,6 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if w != x6_1.Args[0] { break } - mem := x6.Args[2] if !(x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6)) { break } @@ -10618,9 +10656,8 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if p1.Op != OpARM64ADD { break } - _ = p1.Args[1] - ptr1 := p1.Args[0] idx1 := p1.Args[1] + ptr1 := p1.Args[0] x5_1 := x5.Args[1] if x5_1.Op != OpARM64SRLconst { break @@ -10635,7 +10672,7 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if x6.Op != OpARM64MOVBstoreidx { break } - _ = x6.Args[3] + mem := x6.Args[3] ptr0 := x6.Args[0] idx0 := x6.Args[1] x6_2 := x6.Args[2] @@ -10648,7 +10685,6 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if w != x6_2.Args[0] { break } - mem := x6.Args[3] if !(x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && isSamePtr(p1, p) && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6)) { break } @@ -10661,7 +10697,7 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { v.AddArg(mem) return true } - // match: (MOVBstore [i] {s} ptr w x0:(MOVBstore [i-1] {s} ptr (UBFX [arm64BFAuxInt(8, 24)] w) x1:(MOVBstore [i-2] {s} ptr (UBFX [arm64BFAuxInt(16, 16)] w) x2:(MOVBstore [i-3] {s} ptr (UBFX [arm64BFAuxInt(24, 8)] w) mem)))) + // match: (MOVBstore [i] {s} ptr w x0:(MOVBstore [i-1] {s} ptr (UBFX [armBFAuxInt(8, 24)] w) x1:(MOVBstore [i-2] {s} ptr (UBFX [armBFAuxInt(16, 16)] w) x2:(MOVBstore [i-3] {s} ptr (UBFX [armBFAuxInt(24, 8)] w) mem)))) // cond: x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && clobber(x0) && clobber(x1) && clobber(x2) // result: (MOVWstore [i-3] {s} ptr (REVW w) mem) for { @@ -10688,7 +10724,7 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if x0_1.Op != OpARM64UBFX { break } - if x0_1.AuxInt != arm64BFAuxInt(8, 24) { + if x0_1.AuxInt != armBFAuxInt(8, 24) { break } if w != x0_1.Args[0] { @@ -10712,7 +10748,7 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if x1_1.Op != OpARM64UBFX { break } - if x1_1.AuxInt != arm64BFAuxInt(16, 16) { + if x1_1.AuxInt != armBFAuxInt(16, 16) { break } if w != x1_1.Args[0] { @@ -10728,7 +10764,7 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if x2.Aux != s { break } - _ = x2.Args[2] + mem := x2.Args[2] if ptr != x2.Args[0] { break } @@ -10736,13 +10772,12 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if x2_1.Op != OpARM64UBFX { break } - if x2_1.AuxInt != arm64BFAuxInt(24, 8) { + if x2_1.AuxInt != armBFAuxInt(24, 8) { break } if w != x2_1.Args[0] { break } - mem := x2.Args[2] if !(x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && clobber(x0) && clobber(x1) && clobber(x2)) { break } @@ -10756,7 +10791,7 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { v.AddArg(mem) return true } - // match: (MOVBstore [3] {s} p w x0:(MOVBstore [2] {s} p (UBFX [arm64BFAuxInt(8, 24)] w) x1:(MOVBstore [1] {s} p1:(ADD ptr1 idx1) (UBFX [arm64BFAuxInt(16, 16)] w) x2:(MOVBstoreidx ptr0 idx0 (UBFX [arm64BFAuxInt(24, 8)] w) mem)))) + // match: (MOVBstore [3] {s} p w x0:(MOVBstore [2] {s} p (UBFX [armBFAuxInt(8, 24)] w) x1:(MOVBstore [1] {s} p1:(ADD ptr1 idx1) (UBFX [armBFAuxInt(16, 16)] w) x2:(MOVBstoreidx ptr0 idx0 (UBFX [armBFAuxInt(24, 8)] w) mem)))) // cond: x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && isSamePtr(p1, p) && clobber(x0) && clobber(x1) && clobber(x2) // result: (MOVWstoreidx ptr0 idx0 (REVW w) mem) for { @@ -10785,7 +10820,7 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if x0_1.Op != OpARM64UBFX { break } - if x0_1.AuxInt != arm64BFAuxInt(8, 24) { + if x0_1.AuxInt != armBFAuxInt(8, 24) { break } if w != x0_1.Args[0] { @@ -10806,14 +10841,13 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if p1.Op != OpARM64ADD { break } - _ = p1.Args[1] - ptr1 := p1.Args[0] idx1 := p1.Args[1] + ptr1 := p1.Args[0] x1_1 := x1.Args[1] if x1_1.Op != OpARM64UBFX { break } - if x1_1.AuxInt != arm64BFAuxInt(16, 16) { + if x1_1.AuxInt != armBFAuxInt(16, 16) { break } if w != x1_1.Args[0] { @@ -10823,20 +10857,19 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if x2.Op != OpARM64MOVBstoreidx { break } - _ = x2.Args[3] + mem := x2.Args[3] ptr0 := x2.Args[0] idx0 := x2.Args[1] x2_2 := x2.Args[2] if x2_2.Op != OpARM64UBFX { break } - if x2_2.AuxInt != arm64BFAuxInt(24, 8) { + if x2_2.AuxInt != armBFAuxInt(24, 8) { break } if w != x2_2.Args[0] { break } - mem := x2.Args[3] if !(x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && isSamePtr(p1, p) && clobber(x0) && clobber(x1) && clobber(x2)) { break } @@ -10924,7 +10957,7 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if x2.Aux != s { break } - _ = x2.Args[2] + mem := x2.Args[2] if ptr != x2.Args[0] { break } @@ -10942,7 +10975,6 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if w != x2_1_0.Args[0] { break } - mem := x2.Args[2] if !(x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && clobber(x0) && clobber(x1) && clobber(x2)) { break } @@ -11010,9 +11042,8 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if p1.Op != OpARM64ADD { break } - _ = p1.Args[1] - ptr1 := p1.Args[0] idx1 := p1.Args[1] + ptr1 := p1.Args[0] x1_1 := x1.Args[1] if x1_1.Op != OpARM64SRLconst { break @@ -11031,7 +11062,7 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if x2.Op != OpARM64MOVBstoreidx { break } - _ = x2.Args[3] + mem := x2.Args[3] ptr0 := x2.Args[0] idx0 := x2.Args[1] x2_2 := x2.Args[2] @@ -11048,7 +11079,6 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { if w != x2_2_0.Args[0] { break } - mem := x2.Args[3] if !(x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && isSamePtr(p1, p) && clobber(x0) && clobber(x1) && clobber(x2)) { break } @@ -11065,7 +11095,6 @@ func rewriteValueARM64_OpARM64MOVBstore_20(v *Value) bool { } func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { b := v.Block - _ = b // match: (MOVBstore [i] {s} ptr w x0:(MOVBstore [i-1] {s} ptr (SRLconst [8] w) x1:(MOVBstore [i-2] {s} ptr (SRLconst [16] w) x2:(MOVBstore [i-3] {s} ptr (SRLconst [24] w) mem)))) // cond: x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && clobber(x0) && clobber(x1) && clobber(x2) // result: (MOVWstore [i-3] {s} ptr (REVW w) mem) @@ -11133,7 +11162,7 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { if x2.Aux != s { break } - _ = x2.Args[2] + mem := x2.Args[2] if ptr != x2.Args[0] { break } @@ -11147,7 +11176,6 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { if w != x2_1.Args[0] { break } - mem := x2.Args[2] if !(x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && clobber(x0) && clobber(x1) && clobber(x2)) { break } @@ -11211,9 +11239,8 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { if p1.Op != OpARM64ADD { break } - _ = p1.Args[1] - ptr1 := p1.Args[0] idx1 := p1.Args[1] + ptr1 := p1.Args[0] x1_1 := x1.Args[1] if x1_1.Op != OpARM64SRLconst { break @@ -11228,7 +11255,7 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { if x2.Op != OpARM64MOVBstoreidx { break } - _ = x2.Args[3] + mem := x2.Args[3] ptr0 := x2.Args[0] idx0 := x2.Args[1] x2_2 := x2.Args[2] @@ -11241,7 +11268,6 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { if w != x2_2.Args[0] { break } - mem := x2.Args[3] if !(x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && isSamePtr(p1, p) && clobber(x0) && clobber(x1) && clobber(x2)) { break } @@ -11273,7 +11299,7 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if ptr != x.Args[0] { break } @@ -11287,7 +11313,6 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { if w != x_1.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -11314,15 +11339,14 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr1 := v_0.Args[0] idx1 := v_0.Args[1] + ptr1 := v_0.Args[0] w := v.Args[1] x := v.Args[2] if x.Op != OpARM64MOVBstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] ptr0 := x.Args[0] idx0 := x.Args[1] x_2 := x.Args[2] @@ -11335,7 +11359,6 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x)) { break } @@ -11348,7 +11371,7 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { v.AddArg(mem) return true } - // match: (MOVBstore [i] {s} ptr w x:(MOVBstore [i-1] {s} ptr (UBFX [arm64BFAuxInt(8, 8)] w) mem)) + // match: (MOVBstore [i] {s} ptr w x:(MOVBstore [i-1] {s} ptr (UBFX [armBFAuxInt(8, 8)] w) mem)) // cond: x.Uses == 1 && clobber(x) // result: (MOVHstore [i-1] {s} ptr (REV16W w) mem) for { @@ -11367,7 +11390,7 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if ptr != x.Args[0] { break } @@ -11375,13 +11398,12 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { if x_1.Op != OpARM64UBFX { break } - if x_1.AuxInt != arm64BFAuxInt(8, 8) { + if x_1.AuxInt != armBFAuxInt(8, 8) { break } if w != x_1.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -11395,7 +11417,7 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { v.AddArg(mem) return true } - // match: (MOVBstore [1] {s} (ADD ptr1 idx1) w x:(MOVBstoreidx ptr0 idx0 (UBFX [arm64BFAuxInt(8, 8)] w) mem)) + // match: (MOVBstore [1] {s} (ADD ptr1 idx1) w x:(MOVBstoreidx ptr0 idx0 (UBFX [armBFAuxInt(8, 8)] w) mem)) // cond: x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x) // result: (MOVHstoreidx ptr0 idx0 (REV16W w) mem) for { @@ -11408,28 +11430,26 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr1 := v_0.Args[0] idx1 := v_0.Args[1] + ptr1 := v_0.Args[0] w := v.Args[1] x := v.Args[2] if x.Op != OpARM64MOVBstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] ptr0 := x.Args[0] idx0 := x.Args[1] x_2 := x.Args[2] if x_2.Op != OpARM64UBFX { break } - if x_2.AuxInt != arm64BFAuxInt(8, 8) { + if x_2.AuxInt != armBFAuxInt(8, 8) { break } if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x)) { break } @@ -11461,7 +11481,7 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if ptr != x.Args[0] { break } @@ -11479,7 +11499,6 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { if w != x_1_0.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -11506,15 +11525,14 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr1 := v_0.Args[0] idx1 := v_0.Args[1] + ptr1 := v_0.Args[0] w := v.Args[1] x := v.Args[2] if x.Op != OpARM64MOVBstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] ptr0 := x.Args[0] idx0 := x.Args[1] x_2 := x.Args[2] @@ -11531,7 +11549,6 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { if w != x_2_0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x)) { break } @@ -11544,7 +11561,7 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { v.AddArg(mem) return true } - // match: (MOVBstore [i] {s} ptr w x:(MOVBstore [i-1] {s} ptr (UBFX [arm64BFAuxInt(8, 24)] w) mem)) + // match: (MOVBstore [i] {s} ptr w x:(MOVBstore [i-1] {s} ptr (UBFX [armBFAuxInt(8, 24)] w) mem)) // cond: x.Uses == 1 && clobber(x) // result: (MOVHstore [i-1] {s} ptr (REV16W w) mem) for { @@ -11563,7 +11580,7 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if ptr != x.Args[0] { break } @@ -11571,13 +11588,12 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { if x_1.Op != OpARM64UBFX { break } - if x_1.AuxInt != arm64BFAuxInt(8, 24) { + if x_1.AuxInt != armBFAuxInt(8, 24) { break } if w != x_1.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -11591,7 +11607,7 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { v.AddArg(mem) return true } - // match: (MOVBstore [1] {s} (ADD ptr1 idx1) w x:(MOVBstoreidx ptr0 idx0 (UBFX [arm64BFAuxInt(8, 24)] w) mem)) + // match: (MOVBstore [1] {s} (ADD ptr1 idx1) w x:(MOVBstoreidx ptr0 idx0 (UBFX [armBFAuxInt(8, 24)] w) mem)) // cond: x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x) // result: (MOVHstoreidx ptr0 idx0 (REV16W w) mem) for { @@ -11604,28 +11620,26 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr1 := v_0.Args[0] idx1 := v_0.Args[1] + ptr1 := v_0.Args[0] w := v.Args[1] x := v.Args[2] if x.Op != OpARM64MOVBstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] ptr0 := x.Args[0] idx0 := x.Args[1] x_2 := x.Args[2] if x_2.Op != OpARM64UBFX { break } - if x_2.AuxInt != arm64BFAuxInt(8, 24) { + if x_2.AuxInt != armBFAuxInt(8, 24) { break } if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x)) { break } @@ -11642,7 +11656,6 @@ func rewriteValueARM64_OpARM64MOVBstore_30(v *Value) bool { } func rewriteValueARM64_OpARM64MOVBstore_40(v *Value) bool { b := v.Block - _ = b // match: (MOVBstore [i] {s} ptr w x:(MOVBstore [i-1] {s} ptr (SRLconst [8] (MOVDreg w)) mem)) // cond: x.Uses == 1 && clobber(x) // result: (MOVHstore [i-1] {s} ptr (REV16W w) mem) @@ -11662,7 +11675,7 @@ func rewriteValueARM64_OpARM64MOVBstore_40(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if ptr != x.Args[0] { break } @@ -11680,7 +11693,6 @@ func rewriteValueARM64_OpARM64MOVBstore_40(v *Value) bool { if w != x_1_0.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -11707,15 +11719,14 @@ func rewriteValueARM64_OpARM64MOVBstore_40(v *Value) bool { if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr1 := v_0.Args[0] idx1 := v_0.Args[1] + ptr1 := v_0.Args[0] w := v.Args[1] x := v.Args[2] if x.Op != OpARM64MOVBstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] ptr0 := x.Args[0] idx0 := x.Args[1] x_2 := x.Args[2] @@ -11732,7 +11743,6 @@ func rewriteValueARM64_OpARM64MOVBstore_40(v *Value) bool { if w != x_2_0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x)) { break } @@ -11752,7 +11762,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_0(v *Value) bool { // cond: // result: (MOVBstore [c] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { @@ -11760,7 +11770,6 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_0(v *Value) bool { } c := v_1.AuxInt val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64MOVBstore) v.AuxInt = c v.AddArg(ptr) @@ -11772,7 +11781,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_0(v *Value) bool { // cond: // result: (MOVBstore [c] idx val mem) for { - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break @@ -11780,7 +11789,6 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_0(v *Value) bool { c := v_0.AuxInt idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64MOVBstore) v.AuxInt = c v.AddArg(idx) @@ -11792,7 +11800,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_0(v *Value) bool { // cond: // result: (MOVBstorezeroidx ptr idx mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -11802,7 +11810,6 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_0(v *Value) bool { if v_2.AuxInt != 0 { break } - mem := v.Args[3] v.reset(OpARM64MOVBstorezeroidx) v.AddArg(ptr) v.AddArg(idx) @@ -11813,7 +11820,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_0(v *Value) bool { // cond: // result: (MOVBstoreidx ptr idx x mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -11821,7 +11828,6 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpARM64MOVBstoreidx) v.AddArg(ptr) v.AddArg(idx) @@ -11833,7 +11839,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_0(v *Value) bool { // cond: // result: (MOVBstoreidx ptr idx x mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -11841,7 +11847,6 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpARM64MOVBstoreidx) v.AddArg(ptr) v.AddArg(idx) @@ -11853,7 +11858,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_0(v *Value) bool { // cond: // result: (MOVBstoreidx ptr idx x mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -11861,7 +11866,6 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpARM64MOVBstoreidx) v.AddArg(ptr) v.AddArg(idx) @@ -11873,7 +11877,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_0(v *Value) bool { // cond: // result: (MOVBstoreidx ptr idx x mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -11881,7 +11885,6 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpARM64MOVBstoreidx) v.AddArg(ptr) v.AddArg(idx) @@ -11893,7 +11896,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_0(v *Value) bool { // cond: // result: (MOVBstoreidx ptr idx x mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -11901,7 +11904,6 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpARM64MOVBstoreidx) v.AddArg(ptr) v.AddArg(idx) @@ -11913,7 +11915,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_0(v *Value) bool { // cond: // result: (MOVBstoreidx ptr idx x mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -11921,7 +11923,6 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpARM64MOVBstoreidx) v.AddArg(ptr) v.AddArg(idx) @@ -11955,7 +11956,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_0(v *Value) bool { if x.Op != OpARM64MOVBstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] if ptr != x.Args[0] { break } @@ -11965,7 +11966,6 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -11980,8 +11980,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_0(v *Value) bool { } func rewriteValueARM64_OpARM64MOVBstoreidx_10(v *Value) bool { b := v.Block - _ = b - // match: (MOVBstoreidx ptr (ADDconst [3] idx) w x0:(MOVBstoreidx ptr (ADDconst [2] idx) (UBFX [arm64BFAuxInt(8, 24)] w) x1:(MOVBstoreidx ptr (ADDconst [1] idx) (UBFX [arm64BFAuxInt(16, 16)] w) x2:(MOVBstoreidx ptr idx (UBFX [arm64BFAuxInt(24, 8)] w) mem)))) + // match: (MOVBstoreidx ptr (ADDconst [3] idx) w x0:(MOVBstoreidx ptr (ADDconst [2] idx) (UBFX [armBFAuxInt(8, 24)] w) x1:(MOVBstoreidx ptr (ADDconst [1] idx) (UBFX [armBFAuxInt(16, 16)] w) x2:(MOVBstoreidx ptr idx (UBFX [armBFAuxInt(24, 8)] w) mem)))) // cond: x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && clobber(x0) && clobber(x1) && clobber(x2) // result: (MOVWstoreidx ptr idx (REVW w) mem) for { @@ -12018,7 +12017,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_10(v *Value) bool { if x0_2.Op != OpARM64UBFX { break } - if x0_2.AuxInt != arm64BFAuxInt(8, 24) { + if x0_2.AuxInt != armBFAuxInt(8, 24) { break } if w != x0_2.Args[0] { @@ -12046,7 +12045,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_10(v *Value) bool { if x1_2.Op != OpARM64UBFX { break } - if x1_2.AuxInt != arm64BFAuxInt(16, 16) { + if x1_2.AuxInt != armBFAuxInt(16, 16) { break } if w != x1_2.Args[0] { @@ -12056,7 +12055,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_10(v *Value) bool { if x2.Op != OpARM64MOVBstoreidx { break } - _ = x2.Args[3] + mem := x2.Args[3] if ptr != x2.Args[0] { break } @@ -12067,13 +12066,12 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_10(v *Value) bool { if x2_2.Op != OpARM64UBFX { break } - if x2_2.AuxInt != arm64BFAuxInt(24, 8) { + if x2_2.AuxInt != armBFAuxInt(24, 8) { break } if w != x2_2.Args[0] { break } - mem := x2.Args[3] if !(x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && clobber(x0) && clobber(x1) && clobber(x2)) { break } @@ -12086,7 +12084,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_10(v *Value) bool { v.AddArg(mem) return true } - // match: (MOVBstoreidx ptr idx w x0:(MOVBstoreidx ptr (ADDconst [1] idx) (UBFX [arm64BFAuxInt(8, 24)] w) x1:(MOVBstoreidx ptr (ADDconst [2] idx) (UBFX [arm64BFAuxInt(16, 16)] w) x2:(MOVBstoreidx ptr (ADDconst [3] idx) (UBFX [arm64BFAuxInt(24, 8)] w) mem)))) + // match: (MOVBstoreidx ptr idx w x0:(MOVBstoreidx ptr (ADDconst [1] idx) (UBFX [armBFAuxInt(8, 24)] w) x1:(MOVBstoreidx ptr (ADDconst [2] idx) (UBFX [armBFAuxInt(16, 16)] w) x2:(MOVBstoreidx ptr (ADDconst [3] idx) (UBFX [armBFAuxInt(24, 8)] w) mem)))) // cond: x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && clobber(x0) && clobber(x1) && clobber(x2) // result: (MOVWstoreidx ptr idx w mem) for { @@ -12116,7 +12114,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_10(v *Value) bool { if x0_2.Op != OpARM64UBFX { break } - if x0_2.AuxInt != arm64BFAuxInt(8, 24) { + if x0_2.AuxInt != armBFAuxInt(8, 24) { break } if w != x0_2.Args[0] { @@ -12144,7 +12142,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_10(v *Value) bool { if x1_2.Op != OpARM64UBFX { break } - if x1_2.AuxInt != arm64BFAuxInt(16, 16) { + if x1_2.AuxInt != armBFAuxInt(16, 16) { break } if w != x1_2.Args[0] { @@ -12154,7 +12152,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_10(v *Value) bool { if x2.Op != OpARM64MOVBstoreidx { break } - _ = x2.Args[3] + mem := x2.Args[3] if ptr != x2.Args[0] { break } @@ -12172,13 +12170,12 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_10(v *Value) bool { if x2_2.Op != OpARM64UBFX { break } - if x2_2.AuxInt != arm64BFAuxInt(24, 8) { + if x2_2.AuxInt != armBFAuxInt(24, 8) { break } if w != x2_2.Args[0] { break } - mem := x2.Args[3] if !(x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && clobber(x0) && clobber(x1) && clobber(x2)) { break } @@ -12189,7 +12186,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_10(v *Value) bool { v.AddArg(mem) return true } - // match: (MOVBstoreidx ptr (ADDconst [1] idx) w x:(MOVBstoreidx ptr idx (UBFX [arm64BFAuxInt(8, 8)] w) mem)) + // match: (MOVBstoreidx ptr (ADDconst [1] idx) w x:(MOVBstoreidx ptr idx (UBFX [armBFAuxInt(8, 8)] w) mem)) // cond: x.Uses == 1 && clobber(x) // result: (MOVHstoreidx ptr idx (REV16W w) mem) for { @@ -12208,7 +12205,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_10(v *Value) bool { if x.Op != OpARM64MOVBstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] if ptr != x.Args[0] { break } @@ -12219,13 +12216,12 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_10(v *Value) bool { if x_2.Op != OpARM64UBFX { break } - if x_2.AuxInt != arm64BFAuxInt(8, 8) { + if x_2.AuxInt != armBFAuxInt(8, 8) { break } if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -12238,7 +12234,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_10(v *Value) bool { v.AddArg(mem) return true } - // match: (MOVBstoreidx ptr idx w x:(MOVBstoreidx ptr (ADDconst [1] idx) (UBFX [arm64BFAuxInt(8, 8)] w) mem)) + // match: (MOVBstoreidx ptr idx w x:(MOVBstoreidx ptr (ADDconst [1] idx) (UBFX [armBFAuxInt(8, 8)] w) mem)) // cond: x.Uses == 1 && clobber(x) // result: (MOVHstoreidx ptr idx w mem) for { @@ -12250,7 +12246,7 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_10(v *Value) bool { if x.Op != OpARM64MOVBstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] if ptr != x.Args[0] { break } @@ -12268,13 +12264,12 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_10(v *Value) bool { if x_2.Op != OpARM64UBFX { break } - if x_2.AuxInt != arm64BFAuxInt(8, 8) { + if x_2.AuxInt != armBFAuxInt(8, 8) { break } if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -12289,23 +12284,20 @@ func rewriteValueARM64_OpARM64MOVBstoreidx_10(v *Value) bool { } func rewriteValueARM64_OpARM64MOVBstorezero_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVBstorezero [off1] {sym} (ADDconst [off2] ptr) mem) // cond: is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared) // result: (MOVBstorezero [off1+off2] {sym} ptr mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -12322,7 +12314,7 @@ func rewriteValueARM64_OpARM64MOVBstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDaddr { break @@ -12330,7 +12322,6 @@ func rewriteValueARM64_OpARM64MOVBstorezero_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -12347,15 +12338,13 @@ func rewriteValueARM64_OpARM64MOVBstorezero_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(off == 0 && sym == nil) { break } @@ -12381,9 +12370,8 @@ func rewriteValueARM64_OpARM64MOVBstorezero_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[1] - ptr1 := x.Args[0] mem := x.Args[1] + ptr1 := x.Args[0] if !(x.Uses == 1 && areAdjacentOffsets(i, j, 1) && is32Bit(min(i, j)) && isSamePtr(ptr0, ptr1) && clobber(x)) { break } @@ -12407,17 +12395,15 @@ func rewriteValueARM64_OpARM64MOVBstorezero_0(v *Value) bool { if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] x := v.Args[1] if x.Op != OpARM64MOVBstorezeroidx { break } - _ = x.Args[2] + mem := x.Args[2] ptr1 := x.Args[0] idx1 := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x)) { break } @@ -12434,14 +12420,13 @@ func rewriteValueARM64_OpARM64MOVBstorezeroidx_0(v *Value) bool { // cond: // result: (MOVBstorezero [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARM64MOVBstorezero) v.AuxInt = c v.AddArg(ptr) @@ -12452,14 +12437,13 @@ func rewriteValueARM64_OpARM64MOVBstorezeroidx_0(v *Value) bool { // cond: // result: (MOVBstorezero [c] idx mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt idx := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVBstorezero) v.AuxInt = c v.AddArg(idx) @@ -12484,14 +12468,13 @@ func rewriteValueARM64_OpARM64MOVBstorezeroidx_0(v *Value) bool { if x.Op != OpARM64MOVBstorezeroidx { break } - _ = x.Args[2] + mem := x.Args[2] if ptr != x.Args[0] { break } if idx != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -12505,9 +12488,7 @@ func rewriteValueARM64_OpARM64MOVBstorezeroidx_0(v *Value) bool { } func rewriteValueARM64_OpARM64MOVDload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVDload [off] {sym} ptr (FMOVDstore [off] {sym} ptr val _)) // cond: // result: (FMOVDfpgp val) @@ -12541,14 +12522,13 @@ func rewriteValueARM64_OpARM64MOVDload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -12565,15 +12545,13 @@ func rewriteValueARM64_OpARM64MOVDload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(off == 0 && sym == nil) { break } @@ -12589,7 +12567,7 @@ func rewriteValueARM64_OpARM64MOVDload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDshiftLL { break @@ -12597,10 +12575,8 @@ func rewriteValueARM64_OpARM64MOVDload_0(v *Value) bool { if v_0.AuxInt != 3 { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(off == 0 && sym == nil) { break } @@ -12616,7 +12592,7 @@ func rewriteValueARM64_OpARM64MOVDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDaddr { break @@ -12624,7 +12600,6 @@ func rewriteValueARM64_OpARM64MOVDload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -12683,14 +12658,13 @@ func rewriteValueARM64_OpARM64MOVDloadidx_0(v *Value) bool { // cond: // result: (MOVDload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARM64MOVDload) v.AuxInt = c v.AddArg(ptr) @@ -12701,14 +12675,13 @@ func rewriteValueARM64_OpARM64MOVDloadidx_0(v *Value) bool { // cond: // result: (MOVDload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVDload) v.AuxInt = c v.AddArg(ptr) @@ -12719,7 +12692,7 @@ func rewriteValueARM64_OpARM64MOVDloadidx_0(v *Value) bool { // cond: // result: (MOVDloadidx8 ptr idx mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SLLconst { @@ -12729,7 +12702,6 @@ func rewriteValueARM64_OpARM64MOVDloadidx_0(v *Value) bool { break } idx := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVDloadidx8) v.AddArg(ptr) v.AddArg(idx) @@ -12740,7 +12712,7 @@ func rewriteValueARM64_OpARM64MOVDloadidx_0(v *Value) bool { // cond: // result: (MOVDloadidx8 ptr idx mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64SLLconst { break @@ -12750,7 +12722,6 @@ func rewriteValueARM64_OpARM64MOVDloadidx_0(v *Value) bool { } idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVDloadidx8) v.AddArg(ptr) v.AddArg(idx) @@ -12785,14 +12756,13 @@ func rewriteValueARM64_OpARM64MOVDloadidx8_0(v *Value) bool { // cond: // result: (MOVDload [c<<3] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARM64MOVDload) v.AuxInt = c << 3 v.AddArg(ptr) @@ -12852,23 +12822,20 @@ func rewriteValueARM64_OpARM64MOVDreg_0(v *Value) bool { } func rewriteValueARM64_OpARM64MOVDstore_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVDstore [off] {sym} ptr (FMOVDfpgp val) mem) // cond: // result: (FMOVDstore [off] {sym} ptr val mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64FMOVDfpgp { break } val := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64FMOVDstore) v.AuxInt = off v.Aux = sym @@ -12883,7 +12850,7 @@ func rewriteValueARM64_OpARM64MOVDstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64ADDconst { break @@ -12891,7 +12858,6 @@ func rewriteValueARM64_OpARM64MOVDstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -12909,16 +12875,14 @@ func rewriteValueARM64_OpARM64MOVDstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(off == 0 && sym == nil) { break } @@ -12935,7 +12899,7 @@ func rewriteValueARM64_OpARM64MOVDstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64ADDshiftLL { break @@ -12943,11 +12907,9 @@ func rewriteValueARM64_OpARM64MOVDstore_0(v *Value) bool { if v_0.AuxInt != 3 { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(off == 0 && sym == nil) { break } @@ -12964,7 +12926,7 @@ func rewriteValueARM64_OpARM64MOVDstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDaddr { break @@ -12973,7 +12935,6 @@ func rewriteValueARM64_OpARM64MOVDstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -12991,7 +12952,7 @@ func rewriteValueARM64_OpARM64MOVDstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { @@ -13000,7 +12961,6 @@ func rewriteValueARM64_OpARM64MOVDstore_0(v *Value) bool { if v_1.AuxInt != 0 { break } - mem := v.Args[2] v.reset(OpARM64MOVDstorezero) v.AuxInt = off v.Aux = sym @@ -13015,7 +12975,7 @@ func rewriteValueARM64_OpARM64MOVDstoreidx_0(v *Value) bool { // cond: // result: (MOVDstore [c] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { @@ -13023,7 +12983,6 @@ func rewriteValueARM64_OpARM64MOVDstoreidx_0(v *Value) bool { } c := v_1.AuxInt val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64MOVDstore) v.AuxInt = c v.AddArg(ptr) @@ -13035,7 +12994,7 @@ func rewriteValueARM64_OpARM64MOVDstoreidx_0(v *Value) bool { // cond: // result: (MOVDstore [c] idx val mem) for { - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break @@ -13043,7 +13002,6 @@ func rewriteValueARM64_OpARM64MOVDstoreidx_0(v *Value) bool { c := v_0.AuxInt idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64MOVDstore) v.AuxInt = c v.AddArg(idx) @@ -13055,7 +13013,7 @@ func rewriteValueARM64_OpARM64MOVDstoreidx_0(v *Value) bool { // cond: // result: (MOVDstoreidx8 ptr idx val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SLLconst { @@ -13066,7 +13024,6 @@ func rewriteValueARM64_OpARM64MOVDstoreidx_0(v *Value) bool { } idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64MOVDstoreidx8) v.AddArg(ptr) v.AddArg(idx) @@ -13078,7 +13035,7 @@ func rewriteValueARM64_OpARM64MOVDstoreidx_0(v *Value) bool { // cond: // result: (MOVDstoreidx8 ptr idx val mem) for { - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARM64SLLconst { break @@ -13089,7 +13046,6 @@ func rewriteValueARM64_OpARM64MOVDstoreidx_0(v *Value) bool { idx := v_0.Args[0] ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64MOVDstoreidx8) v.AddArg(ptr) v.AddArg(idx) @@ -13101,7 +13057,7 @@ func rewriteValueARM64_OpARM64MOVDstoreidx_0(v *Value) bool { // cond: // result: (MOVDstorezeroidx ptr idx mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -13111,7 +13067,6 @@ func rewriteValueARM64_OpARM64MOVDstoreidx_0(v *Value) bool { if v_2.AuxInt != 0 { break } - mem := v.Args[3] v.reset(OpARM64MOVDstorezeroidx) v.AddArg(ptr) v.AddArg(idx) @@ -13125,7 +13080,7 @@ func rewriteValueARM64_OpARM64MOVDstoreidx8_0(v *Value) bool { // cond: // result: (MOVDstore [c<<3] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { @@ -13133,7 +13088,6 @@ func rewriteValueARM64_OpARM64MOVDstoreidx8_0(v *Value) bool { } c := v_1.AuxInt val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64MOVDstore) v.AuxInt = c << 3 v.AddArg(ptr) @@ -13145,7 +13099,7 @@ func rewriteValueARM64_OpARM64MOVDstoreidx8_0(v *Value) bool { // cond: // result: (MOVDstorezeroidx8 ptr idx mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -13155,7 +13109,6 @@ func rewriteValueARM64_OpARM64MOVDstoreidx8_0(v *Value) bool { if v_2.AuxInt != 0 { break } - mem := v.Args[3] v.reset(OpARM64MOVDstorezeroidx8) v.AddArg(ptr) v.AddArg(idx) @@ -13166,23 +13119,20 @@ func rewriteValueARM64_OpARM64MOVDstoreidx8_0(v *Value) bool { } func rewriteValueARM64_OpARM64MOVDstorezero_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVDstorezero [off1] {sym} (ADDconst [off2] ptr) mem) // cond: is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared) // result: (MOVDstorezero [off1+off2] {sym} ptr mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -13199,7 +13149,7 @@ func rewriteValueARM64_OpARM64MOVDstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDaddr { break @@ -13207,7 +13157,6 @@ func rewriteValueARM64_OpARM64MOVDstorezero_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -13224,15 +13173,13 @@ func rewriteValueARM64_OpARM64MOVDstorezero_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(off == 0 && sym == nil) { break } @@ -13248,7 +13195,7 @@ func rewriteValueARM64_OpARM64MOVDstorezero_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDshiftLL { break @@ -13256,10 +13203,8 @@ func rewriteValueARM64_OpARM64MOVDstorezero_0(v *Value) bool { if v_0.AuxInt != 3 { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(off == 0 && sym == nil) { break } @@ -13285,9 +13230,8 @@ func rewriteValueARM64_OpARM64MOVDstorezero_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[1] - ptr1 := x.Args[0] mem := x.Args[1] + ptr1 := x.Args[0] if !(x.Uses == 1 && areAdjacentOffsets(i, j, 8) && is32Bit(min(i, j)) && isSamePtr(ptr0, ptr1) && clobber(x)) { break } @@ -13311,17 +13255,15 @@ func rewriteValueARM64_OpARM64MOVDstorezero_0(v *Value) bool { if p0.Op != OpARM64ADD { break } - _ = p0.Args[1] - ptr0 := p0.Args[0] idx0 := p0.Args[1] + ptr0 := p0.Args[0] x := v.Args[1] if x.Op != OpARM64MOVDstorezeroidx { break } - _ = x.Args[2] + mem := x.Args[2] ptr1 := x.Args[0] idx1 := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x)) { break } @@ -13348,17 +13290,15 @@ func rewriteValueARM64_OpARM64MOVDstorezero_0(v *Value) bool { if p0.AuxInt != 3 { break } - _ = p0.Args[1] - ptr0 := p0.Args[0] idx0 := p0.Args[1] + ptr0 := p0.Args[0] x := v.Args[1] if x.Op != OpARM64MOVDstorezeroidx8 { break } - _ = x.Args[2] + mem := x.Args[2] ptr1 := x.Args[0] idx1 := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && s == nil && isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) && clobber(x)) { break } @@ -13376,14 +13316,13 @@ func rewriteValueARM64_OpARM64MOVDstorezeroidx_0(v *Value) bool { // cond: // result: (MOVDstorezero [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARM64MOVDstorezero) v.AuxInt = c v.AddArg(ptr) @@ -13394,14 +13333,13 @@ func rewriteValueARM64_OpARM64MOVDstorezeroidx_0(v *Value) bool { // cond: // result: (MOVDstorezero [c] idx mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt idx := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVDstorezero) v.AuxInt = c v.AddArg(idx) @@ -13412,7 +13350,7 @@ func rewriteValueARM64_OpARM64MOVDstorezeroidx_0(v *Value) bool { // cond: // result: (MOVDstorezeroidx8 ptr idx mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SLLconst { @@ -13422,7 +13360,6 @@ func rewriteValueARM64_OpARM64MOVDstorezeroidx_0(v *Value) bool { break } idx := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVDstorezeroidx8) v.AddArg(ptr) v.AddArg(idx) @@ -13433,7 +13370,7 @@ func rewriteValueARM64_OpARM64MOVDstorezeroidx_0(v *Value) bool { // cond: // result: (MOVDstorezeroidx8 ptr idx mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64SLLconst { break @@ -13443,7 +13380,6 @@ func rewriteValueARM64_OpARM64MOVDstorezeroidx_0(v *Value) bool { } idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVDstorezeroidx8) v.AddArg(ptr) v.AddArg(idx) @@ -13457,14 +13393,13 @@ func rewriteValueARM64_OpARM64MOVDstorezeroidx8_0(v *Value) bool { // cond: // result: (MOVDstorezero [c<<3] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARM64MOVDstorezero) v.AuxInt = c << 3 v.AddArg(ptr) @@ -13475,23 +13410,20 @@ func rewriteValueARM64_OpARM64MOVDstorezeroidx8_0(v *Value) bool { } func rewriteValueARM64_OpARM64MOVHUload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVHUload [off1] {sym} (ADDconst [off2] ptr) mem) // cond: is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared) // result: (MOVHUload [off1+off2] {sym} ptr mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -13508,15 +13440,13 @@ func rewriteValueARM64_OpARM64MOVHUload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(off == 0 && sym == nil) { break } @@ -13532,7 +13462,7 @@ func rewriteValueARM64_OpARM64MOVHUload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDshiftLL { break @@ -13540,10 +13470,8 @@ func rewriteValueARM64_OpARM64MOVHUload_0(v *Value) bool { if v_0.AuxInt != 1 { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(off == 0 && sym == nil) { break } @@ -13559,7 +13487,7 @@ func rewriteValueARM64_OpARM64MOVHUload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDaddr { break @@ -13567,7 +13495,6 @@ func rewriteValueARM64_OpARM64MOVHUload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -13626,14 +13553,13 @@ func rewriteValueARM64_OpARM64MOVHUloadidx_0(v *Value) bool { // cond: // result: (MOVHUload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARM64MOVHUload) v.AuxInt = c v.AddArg(ptr) @@ -13644,14 +13570,13 @@ func rewriteValueARM64_OpARM64MOVHUloadidx_0(v *Value) bool { // cond: // result: (MOVHUload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVHUload) v.AuxInt = c v.AddArg(ptr) @@ -13662,7 +13587,7 @@ func rewriteValueARM64_OpARM64MOVHUloadidx_0(v *Value) bool { // cond: // result: (MOVHUloadidx2 ptr idx mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SLLconst { @@ -13672,7 +13597,6 @@ func rewriteValueARM64_OpARM64MOVHUloadidx_0(v *Value) bool { break } idx := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVHUloadidx2) v.AddArg(ptr) v.AddArg(idx) @@ -13683,18 +13607,16 @@ func rewriteValueARM64_OpARM64MOVHUloadidx_0(v *Value) bool { // cond: // result: (MOVHUloadidx2 ptr idx mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64ADD { break } - _ = v_1.Args[1] - idx := v_1.Args[0] - if idx != v_1.Args[1] { + idx := v_1.Args[1] + if idx != v_1.Args[0] { break } - mem := v.Args[2] v.reset(OpARM64MOVHUloadidx2) v.AddArg(ptr) v.AddArg(idx) @@ -13705,18 +13627,16 @@ func rewriteValueARM64_OpARM64MOVHUloadidx_0(v *Value) bool { // cond: // result: (MOVHUloadidx2 ptr idx mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - idx := v_0.Args[0] - if idx != v_0.Args[1] { + idx := v_0.Args[1] + if idx != v_0.Args[0] { break } ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVHUloadidx2) v.AddArg(ptr) v.AddArg(idx) @@ -13751,14 +13671,13 @@ func rewriteValueARM64_OpARM64MOVHUloadidx2_0(v *Value) bool { // cond: // result: (MOVHUload [c<<1] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARM64MOVHUload) v.AuxInt = c << 1 v.AddArg(ptr) @@ -13908,7 +13827,7 @@ func rewriteValueARM64_OpARM64MOVHUreg_0(v *Value) bool { } // match: (MOVHUreg (SLLconst [sc] x)) // cond: isARM64BFMask(sc, 1<<16-1, sc) - // result: (UBFIZ [arm64BFAuxInt(sc, arm64BFWidth(1<<16-1, sc))] x) + // result: (UBFIZ [armBFAuxInt(sc, arm64BFWidth(1<<16-1, sc))] x) for { v_0 := v.Args[0] if v_0.Op != OpARM64SLLconst { @@ -13920,7 +13839,7 @@ func rewriteValueARM64_OpARM64MOVHUreg_0(v *Value) bool { break } v.reset(OpARM64UBFIZ) - v.AuxInt = arm64BFAuxInt(sc, arm64BFWidth(1<<16-1, sc)) + v.AuxInt = armBFAuxInt(sc, arm64BFWidth(1<<16-1, sc)) v.AddArg(x) return true } @@ -13929,7 +13848,7 @@ func rewriteValueARM64_OpARM64MOVHUreg_0(v *Value) bool { func rewriteValueARM64_OpARM64MOVHUreg_10(v *Value) bool { // match: (MOVHUreg (SRLconst [sc] x)) // cond: isARM64BFMask(sc, 1<<16-1, 0) - // result: (UBFX [arm64BFAuxInt(sc, 16)] x) + // result: (UBFX [armBFAuxInt(sc, 16)] x) for { v_0 := v.Args[0] if v_0.Op != OpARM64SRLconst { @@ -13941,7 +13860,7 @@ func rewriteValueARM64_OpARM64MOVHUreg_10(v *Value) bool { break } v.reset(OpARM64UBFX) - v.AuxInt = arm64BFAuxInt(sc, 16) + v.AuxInt = armBFAuxInt(sc, 16) v.AddArg(x) return true } @@ -13949,23 +13868,20 @@ func rewriteValueARM64_OpARM64MOVHUreg_10(v *Value) bool { } func rewriteValueARM64_OpARM64MOVHload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVHload [off1] {sym} (ADDconst [off2] ptr) mem) // cond: is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared) // result: (MOVHload [off1+off2] {sym} ptr mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -13982,15 +13898,13 @@ func rewriteValueARM64_OpARM64MOVHload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(off == 0 && sym == nil) { break } @@ -14006,7 +13920,7 @@ func rewriteValueARM64_OpARM64MOVHload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDshiftLL { break @@ -14014,10 +13928,8 @@ func rewriteValueARM64_OpARM64MOVHload_0(v *Value) bool { if v_0.AuxInt != 1 { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(off == 0 && sym == nil) { break } @@ -14033,7 +13945,7 @@ func rewriteValueARM64_OpARM64MOVHload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDaddr { break @@ -14041,7 +13953,6 @@ func rewriteValueARM64_OpARM64MOVHload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -14082,14 +13993,13 @@ func rewriteValueARM64_OpARM64MOVHloadidx_0(v *Value) bool { // cond: // result: (MOVHload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARM64MOVHload) v.AuxInt = c v.AddArg(ptr) @@ -14100,14 +14010,13 @@ func rewriteValueARM64_OpARM64MOVHloadidx_0(v *Value) bool { // cond: // result: (MOVHload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVHload) v.AuxInt = c v.AddArg(ptr) @@ -14118,7 +14027,7 @@ func rewriteValueARM64_OpARM64MOVHloadidx_0(v *Value) bool { // cond: // result: (MOVHloadidx2 ptr idx mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SLLconst { @@ -14128,7 +14037,6 @@ func rewriteValueARM64_OpARM64MOVHloadidx_0(v *Value) bool { break } idx := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVHloadidx2) v.AddArg(ptr) v.AddArg(idx) @@ -14139,18 +14047,16 @@ func rewriteValueARM64_OpARM64MOVHloadidx_0(v *Value) bool { // cond: // result: (MOVHloadidx2 ptr idx mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64ADD { break } - _ = v_1.Args[1] - idx := v_1.Args[0] - if idx != v_1.Args[1] { + idx := v_1.Args[1] + if idx != v_1.Args[0] { break } - mem := v.Args[2] v.reset(OpARM64MOVHloadidx2) v.AddArg(ptr) v.AddArg(idx) @@ -14161,18 +14067,16 @@ func rewriteValueARM64_OpARM64MOVHloadidx_0(v *Value) bool { // cond: // result: (MOVHloadidx2 ptr idx mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - idx := v_0.Args[0] - if idx != v_0.Args[1] { + idx := v_0.Args[1] + if idx != v_0.Args[0] { break } ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVHloadidx2) v.AddArg(ptr) v.AddArg(idx) @@ -14207,14 +14111,13 @@ func rewriteValueARM64_OpARM64MOVHloadidx2_0(v *Value) bool { // cond: // result: (MOVHload [c<<1] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARM64MOVHload) v.AuxInt = c << 1 v.AddArg(ptr) @@ -14390,7 +14293,7 @@ func rewriteValueARM64_OpARM64MOVHreg_10(v *Value) bool { } // match: (MOVHreg (SLLconst [lc] x)) // cond: lc < 16 - // result: (SBFIZ [arm64BFAuxInt(lc, 16-lc)] x) + // result: (SBFIZ [armBFAuxInt(lc, 16-lc)] x) for { v_0 := v.Args[0] if v_0.Op != OpARM64SLLconst { @@ -14402,7 +14305,7 @@ func rewriteValueARM64_OpARM64MOVHreg_10(v *Value) bool { break } v.reset(OpARM64SBFIZ) - v.AuxInt = arm64BFAuxInt(lc, 16-lc) + v.AuxInt = armBFAuxInt(lc, 16-lc) v.AddArg(x) return true } @@ -14410,16 +14313,14 @@ func rewriteValueARM64_OpARM64MOVHreg_10(v *Value) bool { } func rewriteValueARM64_OpARM64MOVHstore_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVHstore [off1] {sym} (ADDconst [off2] ptr) val mem) // cond: is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared) // result: (MOVHstore [off1+off2] {sym} ptr val mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64ADDconst { break @@ -14427,7 +14328,6 @@ func rewriteValueARM64_OpARM64MOVHstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -14445,16 +14345,14 @@ func rewriteValueARM64_OpARM64MOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(off == 0 && sym == nil) { break } @@ -14471,7 +14369,7 @@ func rewriteValueARM64_OpARM64MOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64ADDshiftLL { break @@ -14479,11 +14377,9 @@ func rewriteValueARM64_OpARM64MOVHstore_0(v *Value) bool { if v_0.AuxInt != 1 { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(off == 0 && sym == nil) { break } @@ -14500,7 +14396,7 @@ func rewriteValueARM64_OpARM64MOVHstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDaddr { break @@ -14509,7 +14405,6 @@ func rewriteValueARM64_OpARM64MOVHstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -14527,7 +14422,7 @@ func rewriteValueARM64_OpARM64MOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { @@ -14536,7 +14431,6 @@ func rewriteValueARM64_OpARM64MOVHstore_0(v *Value) bool { if v_1.AuxInt != 0 { break } - mem := v.Args[2] v.reset(OpARM64MOVHstorezero) v.AuxInt = off v.Aux = sym @@ -14550,14 +14444,13 @@ func rewriteValueARM64_OpARM64MOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVHreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVHstore) v.AuxInt = off v.Aux = sym @@ -14572,14 +14465,13 @@ func rewriteValueARM64_OpARM64MOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVHUreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVHstore) v.AuxInt = off v.Aux = sym @@ -14594,14 +14486,13 @@ func rewriteValueARM64_OpARM64MOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVWreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVHstore) v.AuxInt = off v.Aux = sym @@ -14616,14 +14507,13 @@ func rewriteValueARM64_OpARM64MOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVWUreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVHstore) v.AuxInt = off v.Aux = sym @@ -14658,12 +14548,11 @@ func rewriteValueARM64_OpARM64MOVHstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] ptr1 := x.Args[0] if w != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && isSamePtr(ptr0, ptr1) && clobber(x)) { break } @@ -14679,7 +14568,6 @@ func rewriteValueARM64_OpARM64MOVHstore_0(v *Value) bool { } func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { b := v.Block - _ = b // match: (MOVHstore [2] {s} (ADD ptr0 idx0) (SRLconst [16] w) x:(MOVHstoreidx ptr1 idx1 w mem)) // cond: x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x) // result: (MOVWstoreidx ptr1 idx1 w mem) @@ -14693,9 +14581,8 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SRLconst { break @@ -14708,13 +14595,12 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { if x.Op != OpARM64MOVHstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] ptr1 := x.Args[0] idx1 := x.Args[1] if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x)) { break } @@ -14741,9 +14627,8 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { if v_0.AuxInt != 1 { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SRLconst { break @@ -14756,13 +14641,12 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { if x.Op != OpARM64MOVHstoreidx2 { break } - _ = x.Args[3] + mem := x.Args[3] ptr1 := x.Args[0] idx1 := x.Args[1] if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) && clobber(x)) { break } @@ -14776,7 +14660,7 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { v.AddArg(mem) return true } - // match: (MOVHstore [i] {s} ptr0 (UBFX [arm64BFAuxInt(16, 16)] w) x:(MOVHstore [i-2] {s} ptr1 w mem)) + // match: (MOVHstore [i] {s} ptr0 (UBFX [armBFAuxInt(16, 16)] w) x:(MOVHstore [i-2] {s} ptr1 w mem)) // cond: x.Uses == 1 && isSamePtr(ptr0, ptr1) && clobber(x) // result: (MOVWstore [i-2] {s} ptr0 w mem) for { @@ -14788,7 +14672,7 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { if v_1.Op != OpARM64UBFX { break } - if v_1.AuxInt != arm64BFAuxInt(16, 16) { + if v_1.AuxInt != armBFAuxInt(16, 16) { break } w := v_1.Args[0] @@ -14802,12 +14686,11 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] ptr1 := x.Args[0] if w != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && isSamePtr(ptr0, ptr1) && clobber(x)) { break } @@ -14819,7 +14702,7 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { v.AddArg(mem) return true } - // match: (MOVHstore [2] {s} (ADD ptr0 idx0) (UBFX [arm64BFAuxInt(16, 16)] w) x:(MOVHstoreidx ptr1 idx1 w mem)) + // match: (MOVHstore [2] {s} (ADD ptr0 idx0) (UBFX [armBFAuxInt(16, 16)] w) x:(MOVHstoreidx ptr1 idx1 w mem)) // cond: x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x) // result: (MOVWstoreidx ptr1 idx1 w mem) for { @@ -14832,14 +14715,13 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64UBFX { break } - if v_1.AuxInt != arm64BFAuxInt(16, 16) { + if v_1.AuxInt != armBFAuxInt(16, 16) { break } w := v_1.Args[0] @@ -14847,13 +14729,12 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { if x.Op != OpARM64MOVHstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] ptr1 := x.Args[0] idx1 := x.Args[1] if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x)) { break } @@ -14864,7 +14745,7 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { v.AddArg(mem) return true } - // match: (MOVHstore [2] {s} (ADDshiftLL [1] ptr0 idx0) (UBFX [arm64BFAuxInt(16, 16)] w) x:(MOVHstoreidx2 ptr1 idx1 w mem)) + // match: (MOVHstore [2] {s} (ADDshiftLL [1] ptr0 idx0) (UBFX [armBFAuxInt(16, 16)] w) x:(MOVHstoreidx2 ptr1 idx1 w mem)) // cond: x.Uses == 1 && s == nil && isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) && clobber(x) // result: (MOVWstoreidx ptr1 (SLLconst [1] idx1) w mem) for { @@ -14880,14 +14761,13 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { if v_0.AuxInt != 1 { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64UBFX { break } - if v_1.AuxInt != arm64BFAuxInt(16, 16) { + if v_1.AuxInt != armBFAuxInt(16, 16) { break } w := v_1.Args[0] @@ -14895,13 +14775,12 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { if x.Op != OpARM64MOVHstoreidx2 { break } - _ = x.Args[3] + mem := x.Args[3] ptr1 := x.Args[0] idx1 := x.Args[1] if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) && clobber(x)) { break } @@ -14945,12 +14824,11 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] ptr1 := x.Args[0] if w != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && isSamePtr(ptr0, ptr1) && clobber(x)) { break } @@ -14975,9 +14853,8 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SRLconst { break @@ -14994,13 +14871,12 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { if x.Op != OpARM64MOVHstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] ptr1 := x.Args[0] idx1 := x.Args[1] if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x)) { break } @@ -15027,9 +14903,8 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { if v_0.AuxInt != 1 { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SRLconst { break @@ -15046,13 +14921,12 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { if x.Op != OpARM64MOVHstoreidx2 { break } - _ = x.Args[3] + mem := x.Args[3] ptr1 := x.Args[0] idx1 := x.Args[1] if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) && clobber(x)) { break } @@ -15090,7 +14964,7 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] ptr1 := x.Args[0] w0 := x.Args[1] if w0.Op != OpARM64SRLconst { @@ -15102,7 +14976,6 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && isSamePtr(ptr0, ptr1) && clobber(x)) { break } @@ -15127,9 +15000,8 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SRLconst { break @@ -15140,7 +15012,7 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { if x.Op != OpARM64MOVHstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] ptr1 := x.Args[0] idx1 := x.Args[1] w0 := x.Args[2] @@ -15153,7 +15025,6 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x)) { break } @@ -15168,7 +15039,6 @@ func rewriteValueARM64_OpARM64MOVHstore_10(v *Value) bool { } func rewriteValueARM64_OpARM64MOVHstore_20(v *Value) bool { b := v.Block - _ = b // match: (MOVHstore [2] {s} (ADDshiftLL [1] ptr0 idx0) (SRLconst [j] w) x:(MOVHstoreidx2 ptr1 idx1 w0:(SRLconst [j-16] w) mem)) // cond: x.Uses == 1 && s == nil && isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) && clobber(x) // result: (MOVWstoreidx ptr1 (SLLconst [1] idx1) w0 mem) @@ -15185,9 +15055,8 @@ func rewriteValueARM64_OpARM64MOVHstore_20(v *Value) bool { if v_0.AuxInt != 1 { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SRLconst { break @@ -15198,7 +15067,7 @@ func rewriteValueARM64_OpARM64MOVHstore_20(v *Value) bool { if x.Op != OpARM64MOVHstoreidx2 { break } - _ = x.Args[3] + mem := x.Args[3] ptr1 := x.Args[0] idx1 := x.Args[1] w0 := x.Args[2] @@ -15211,7 +15080,6 @@ func rewriteValueARM64_OpARM64MOVHstore_20(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) && clobber(x)) { break } @@ -15232,7 +15100,7 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_0(v *Value) bool { // cond: // result: (MOVHstore [c] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { @@ -15240,7 +15108,6 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_0(v *Value) bool { } c := v_1.AuxInt val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64MOVHstore) v.AuxInt = c v.AddArg(ptr) @@ -15252,7 +15119,7 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_0(v *Value) bool { // cond: // result: (MOVHstore [c] idx val mem) for { - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break @@ -15260,7 +15127,6 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_0(v *Value) bool { c := v_0.AuxInt idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64MOVHstore) v.AuxInt = c v.AddArg(idx) @@ -15272,7 +15138,7 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_0(v *Value) bool { // cond: // result: (MOVHstoreidx2 ptr idx val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SLLconst { @@ -15283,7 +15149,6 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_0(v *Value) bool { } idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64MOVHstoreidx2) v.AddArg(ptr) v.AddArg(idx) @@ -15295,19 +15160,17 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_0(v *Value) bool { // cond: // result: (MOVHstoreidx2 ptr idx val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64ADD { break } - _ = v_1.Args[1] - idx := v_1.Args[0] - if idx != v_1.Args[1] { + idx := v_1.Args[1] + if idx != v_1.Args[0] { break } val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64MOVHstoreidx2) v.AddArg(ptr) v.AddArg(idx) @@ -15319,7 +15182,7 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_0(v *Value) bool { // cond: // result: (MOVHstoreidx2 ptr idx val mem) for { - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARM64SLLconst { break @@ -15330,7 +15193,6 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_0(v *Value) bool { idx := v_0.Args[0] ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64MOVHstoreidx2) v.AddArg(ptr) v.AddArg(idx) @@ -15342,19 +15204,17 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_0(v *Value) bool { // cond: // result: (MOVHstoreidx2 ptr idx val mem) for { - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - idx := v_0.Args[0] - if idx != v_0.Args[1] { + idx := v_0.Args[1] + if idx != v_0.Args[0] { break } ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64MOVHstoreidx2) v.AddArg(ptr) v.AddArg(idx) @@ -15366,7 +15226,7 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_0(v *Value) bool { // cond: // result: (MOVHstorezeroidx ptr idx mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -15376,7 +15236,6 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_0(v *Value) bool { if v_2.AuxInt != 0 { break } - mem := v.Args[3] v.reset(OpARM64MOVHstorezeroidx) v.AddArg(ptr) v.AddArg(idx) @@ -15387,7 +15246,7 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_0(v *Value) bool { // cond: // result: (MOVHstoreidx ptr idx x mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -15395,7 +15254,6 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpARM64MOVHstoreidx) v.AddArg(ptr) v.AddArg(idx) @@ -15407,7 +15265,7 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_0(v *Value) bool { // cond: // result: (MOVHstoreidx ptr idx x mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -15415,7 +15273,6 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpARM64MOVHstoreidx) v.AddArg(ptr) v.AddArg(idx) @@ -15427,7 +15284,7 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_0(v *Value) bool { // cond: // result: (MOVHstoreidx ptr idx x mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -15435,7 +15292,6 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpARM64MOVHstoreidx) v.AddArg(ptr) v.AddArg(idx) @@ -15450,7 +15306,7 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_10(v *Value) bool { // cond: // result: (MOVHstoreidx ptr idx x mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -15458,7 +15314,6 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_10(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpARM64MOVHstoreidx) v.AddArg(ptr) v.AddArg(idx) @@ -15492,7 +15347,7 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_10(v *Value) bool { if x.Op != OpARM64MOVHstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] if ptr != x.Args[0] { break } @@ -15502,7 +15357,6 @@ func rewriteValueARM64_OpARM64MOVHstoreidx_10(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -15520,7 +15374,7 @@ func rewriteValueARM64_OpARM64MOVHstoreidx2_0(v *Value) bool { // cond: // result: (MOVHstore [c<<1] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { @@ -15528,7 +15382,6 @@ func rewriteValueARM64_OpARM64MOVHstoreidx2_0(v *Value) bool { } c := v_1.AuxInt val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64MOVHstore) v.AuxInt = c << 1 v.AddArg(ptr) @@ -15540,7 +15393,7 @@ func rewriteValueARM64_OpARM64MOVHstoreidx2_0(v *Value) bool { // cond: // result: (MOVHstorezeroidx2 ptr idx mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -15550,7 +15403,6 @@ func rewriteValueARM64_OpARM64MOVHstoreidx2_0(v *Value) bool { if v_2.AuxInt != 0 { break } - mem := v.Args[3] v.reset(OpARM64MOVHstorezeroidx2) v.AddArg(ptr) v.AddArg(idx) @@ -15561,7 +15413,7 @@ func rewriteValueARM64_OpARM64MOVHstoreidx2_0(v *Value) bool { // cond: // result: (MOVHstoreidx2 ptr idx x mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -15569,7 +15421,6 @@ func rewriteValueARM64_OpARM64MOVHstoreidx2_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpARM64MOVHstoreidx2) v.AddArg(ptr) v.AddArg(idx) @@ -15581,7 +15432,7 @@ func rewriteValueARM64_OpARM64MOVHstoreidx2_0(v *Value) bool { // cond: // result: (MOVHstoreidx2 ptr idx x mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -15589,7 +15440,6 @@ func rewriteValueARM64_OpARM64MOVHstoreidx2_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpARM64MOVHstoreidx2) v.AddArg(ptr) v.AddArg(idx) @@ -15601,7 +15451,7 @@ func rewriteValueARM64_OpARM64MOVHstoreidx2_0(v *Value) bool { // cond: // result: (MOVHstoreidx2 ptr idx x mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -15609,7 +15459,6 @@ func rewriteValueARM64_OpARM64MOVHstoreidx2_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpARM64MOVHstoreidx2) v.AddArg(ptr) v.AddArg(idx) @@ -15621,7 +15470,7 @@ func rewriteValueARM64_OpARM64MOVHstoreidx2_0(v *Value) bool { // cond: // result: (MOVHstoreidx2 ptr idx x mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -15629,7 +15478,6 @@ func rewriteValueARM64_OpARM64MOVHstoreidx2_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpARM64MOVHstoreidx2) v.AddArg(ptr) v.AddArg(idx) @@ -15641,23 +15489,20 @@ func rewriteValueARM64_OpARM64MOVHstoreidx2_0(v *Value) bool { } func rewriteValueARM64_OpARM64MOVHstorezero_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVHstorezero [off1] {sym} (ADDconst [off2] ptr) mem) // cond: is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared) // result: (MOVHstorezero [off1+off2] {sym} ptr mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -15674,7 +15519,7 @@ func rewriteValueARM64_OpARM64MOVHstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDaddr { break @@ -15682,7 +15527,6 @@ func rewriteValueARM64_OpARM64MOVHstorezero_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -15699,15 +15543,13 @@ func rewriteValueARM64_OpARM64MOVHstorezero_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(off == 0 && sym == nil) { break } @@ -15723,7 +15565,7 @@ func rewriteValueARM64_OpARM64MOVHstorezero_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDshiftLL { break @@ -15731,10 +15573,8 @@ func rewriteValueARM64_OpARM64MOVHstorezero_0(v *Value) bool { if v_0.AuxInt != 1 { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(off == 0 && sym == nil) { break } @@ -15760,9 +15600,8 @@ func rewriteValueARM64_OpARM64MOVHstorezero_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[1] - ptr1 := x.Args[0] mem := x.Args[1] + ptr1 := x.Args[0] if !(x.Uses == 1 && areAdjacentOffsets(i, j, 2) && is32Bit(min(i, j)) && isSamePtr(ptr0, ptr1) && clobber(x)) { break } @@ -15786,17 +15625,15 @@ func rewriteValueARM64_OpARM64MOVHstorezero_0(v *Value) bool { if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] x := v.Args[1] if x.Op != OpARM64MOVHstorezeroidx { break } - _ = x.Args[2] + mem := x.Args[2] ptr1 := x.Args[0] idx1 := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x)) { break } @@ -15822,17 +15659,15 @@ func rewriteValueARM64_OpARM64MOVHstorezero_0(v *Value) bool { if v_0.AuxInt != 1 { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] x := v.Args[1] if x.Op != OpARM64MOVHstorezeroidx2 { break } - _ = x.Args[2] + mem := x.Args[2] ptr1 := x.Args[0] idx1 := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && s == nil && isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) && clobber(x)) { break } @@ -15852,14 +15687,13 @@ func rewriteValueARM64_OpARM64MOVHstorezeroidx_0(v *Value) bool { // cond: // result: (MOVHstorezero [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARM64MOVHstorezero) v.AuxInt = c v.AddArg(ptr) @@ -15870,14 +15704,13 @@ func rewriteValueARM64_OpARM64MOVHstorezeroidx_0(v *Value) bool { // cond: // result: (MOVHstorezero [c] idx mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt idx := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVHstorezero) v.AuxInt = c v.AddArg(idx) @@ -15888,7 +15721,7 @@ func rewriteValueARM64_OpARM64MOVHstorezeroidx_0(v *Value) bool { // cond: // result: (MOVHstorezeroidx2 ptr idx mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SLLconst { @@ -15898,7 +15731,6 @@ func rewriteValueARM64_OpARM64MOVHstorezeroidx_0(v *Value) bool { break } idx := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVHstorezeroidx2) v.AddArg(ptr) v.AddArg(idx) @@ -15909,18 +15741,16 @@ func rewriteValueARM64_OpARM64MOVHstorezeroidx_0(v *Value) bool { // cond: // result: (MOVHstorezeroidx2 ptr idx mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64ADD { break } - _ = v_1.Args[1] - idx := v_1.Args[0] - if idx != v_1.Args[1] { + idx := v_1.Args[1] + if idx != v_1.Args[0] { break } - mem := v.Args[2] v.reset(OpARM64MOVHstorezeroidx2) v.AddArg(ptr) v.AddArg(idx) @@ -15931,7 +15761,7 @@ func rewriteValueARM64_OpARM64MOVHstorezeroidx_0(v *Value) bool { // cond: // result: (MOVHstorezeroidx2 ptr idx mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64SLLconst { break @@ -15941,7 +15771,6 @@ func rewriteValueARM64_OpARM64MOVHstorezeroidx_0(v *Value) bool { } idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVHstorezeroidx2) v.AddArg(ptr) v.AddArg(idx) @@ -15952,18 +15781,16 @@ func rewriteValueARM64_OpARM64MOVHstorezeroidx_0(v *Value) bool { // cond: // result: (MOVHstorezeroidx2 ptr idx mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - idx := v_0.Args[0] - if idx != v_0.Args[1] { + idx := v_0.Args[1] + if idx != v_0.Args[0] { break } ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVHstorezeroidx2) v.AddArg(ptr) v.AddArg(idx) @@ -15988,14 +15815,13 @@ func rewriteValueARM64_OpARM64MOVHstorezeroidx_0(v *Value) bool { if x.Op != OpARM64MOVHstorezeroidx { break } - _ = x.Args[2] + mem := x.Args[2] if ptr != x.Args[0] { break } if idx != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -16012,14 +15838,13 @@ func rewriteValueARM64_OpARM64MOVHstorezeroidx2_0(v *Value) bool { // cond: // result: (MOVHstorezero [c<<1] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARM64MOVHstorezero) v.AuxInt = c << 1 v.AddArg(ptr) @@ -16030,23 +15855,20 @@ func rewriteValueARM64_OpARM64MOVHstorezeroidx2_0(v *Value) bool { } func rewriteValueARM64_OpARM64MOVQstorezero_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVQstorezero [off1] {sym} (ADDconst [off2] ptr) mem) // cond: is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared) // result: (MOVQstorezero [off1+off2] {sym} ptr mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -16063,7 +15885,7 @@ func rewriteValueARM64_OpARM64MOVQstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDaddr { break @@ -16071,7 +15893,6 @@ func rewriteValueARM64_OpARM64MOVQstorezero_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -16086,9 +15907,7 @@ func rewriteValueARM64_OpARM64MOVQstorezero_0(v *Value) bool { } func rewriteValueARM64_OpARM64MOVWUload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVWUload [off] {sym} ptr (FMOVSstore [off] {sym} ptr val _)) // cond: // result: (FMOVSfpgp val) @@ -16122,14 +15941,13 @@ func rewriteValueARM64_OpARM64MOVWUload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -16146,15 +15964,13 @@ func rewriteValueARM64_OpARM64MOVWUload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(off == 0 && sym == nil) { break } @@ -16170,7 +15986,7 @@ func rewriteValueARM64_OpARM64MOVWUload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDshiftLL { break @@ -16178,10 +15994,8 @@ func rewriteValueARM64_OpARM64MOVWUload_0(v *Value) bool { if v_0.AuxInt != 2 { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(off == 0 && sym == nil) { break } @@ -16197,7 +16011,7 @@ func rewriteValueARM64_OpARM64MOVWUload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDaddr { break @@ -16205,7 +16019,6 @@ func rewriteValueARM64_OpARM64MOVWUload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -16264,14 +16077,13 @@ func rewriteValueARM64_OpARM64MOVWUloadidx_0(v *Value) bool { // cond: // result: (MOVWUload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARM64MOVWUload) v.AuxInt = c v.AddArg(ptr) @@ -16282,14 +16094,13 @@ func rewriteValueARM64_OpARM64MOVWUloadidx_0(v *Value) bool { // cond: // result: (MOVWUload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVWUload) v.AuxInt = c v.AddArg(ptr) @@ -16300,7 +16111,7 @@ func rewriteValueARM64_OpARM64MOVWUloadidx_0(v *Value) bool { // cond: // result: (MOVWUloadidx4 ptr idx mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SLLconst { @@ -16310,7 +16121,6 @@ func rewriteValueARM64_OpARM64MOVWUloadidx_0(v *Value) bool { break } idx := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVWUloadidx4) v.AddArg(ptr) v.AddArg(idx) @@ -16321,7 +16131,7 @@ func rewriteValueARM64_OpARM64MOVWUloadidx_0(v *Value) bool { // cond: // result: (MOVWUloadidx4 ptr idx mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64SLLconst { break @@ -16331,7 +16141,6 @@ func rewriteValueARM64_OpARM64MOVWUloadidx_0(v *Value) bool { } idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVWUloadidx4) v.AddArg(ptr) v.AddArg(idx) @@ -16366,14 +16175,13 @@ func rewriteValueARM64_OpARM64MOVWUloadidx4_0(v *Value) bool { // cond: // result: (MOVWUload [c<<2] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARM64MOVWUload) v.AuxInt = c << 2 v.AddArg(ptr) @@ -16577,7 +16385,7 @@ func rewriteValueARM64_OpARM64MOVWUreg_10(v *Value) bool { } // match: (MOVWUreg (SLLconst [sc] x)) // cond: isARM64BFMask(sc, 1<<32-1, sc) - // result: (UBFIZ [arm64BFAuxInt(sc, arm64BFWidth(1<<32-1, sc))] x) + // result: (UBFIZ [armBFAuxInt(sc, arm64BFWidth(1<<32-1, sc))] x) for { v_0 := v.Args[0] if v_0.Op != OpARM64SLLconst { @@ -16589,13 +16397,13 @@ func rewriteValueARM64_OpARM64MOVWUreg_10(v *Value) bool { break } v.reset(OpARM64UBFIZ) - v.AuxInt = arm64BFAuxInt(sc, arm64BFWidth(1<<32-1, sc)) + v.AuxInt = armBFAuxInt(sc, arm64BFWidth(1<<32-1, sc)) v.AddArg(x) return true } // match: (MOVWUreg (SRLconst [sc] x)) // cond: isARM64BFMask(sc, 1<<32-1, 0) - // result: (UBFX [arm64BFAuxInt(sc, 32)] x) + // result: (UBFX [armBFAuxInt(sc, 32)] x) for { v_0 := v.Args[0] if v_0.Op != OpARM64SRLconst { @@ -16607,7 +16415,7 @@ func rewriteValueARM64_OpARM64MOVWUreg_10(v *Value) bool { break } v.reset(OpARM64UBFX) - v.AuxInt = arm64BFAuxInt(sc, 32) + v.AuxInt = armBFAuxInt(sc, 32) v.AddArg(x) return true } @@ -16615,23 +16423,20 @@ func rewriteValueARM64_OpARM64MOVWUreg_10(v *Value) bool { } func rewriteValueARM64_OpARM64MOVWload_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVWload [off1] {sym} (ADDconst [off2] ptr) mem) // cond: is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared) // result: (MOVWload [off1+off2] {sym} ptr mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -16648,15 +16453,13 @@ func rewriteValueARM64_OpARM64MOVWload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(off == 0 && sym == nil) { break } @@ -16672,7 +16475,7 @@ func rewriteValueARM64_OpARM64MOVWload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDshiftLL { break @@ -16680,10 +16483,8 @@ func rewriteValueARM64_OpARM64MOVWload_0(v *Value) bool { if v_0.AuxInt != 2 { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(off == 0 && sym == nil) { break } @@ -16699,7 +16500,7 @@ func rewriteValueARM64_OpARM64MOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDaddr { break @@ -16707,7 +16508,6 @@ func rewriteValueARM64_OpARM64MOVWload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -16748,14 +16548,13 @@ func rewriteValueARM64_OpARM64MOVWloadidx_0(v *Value) bool { // cond: // result: (MOVWload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARM64MOVWload) v.AuxInt = c v.AddArg(ptr) @@ -16766,14 +16565,13 @@ func rewriteValueARM64_OpARM64MOVWloadidx_0(v *Value) bool { // cond: // result: (MOVWload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVWload) v.AuxInt = c v.AddArg(ptr) @@ -16784,7 +16582,7 @@ func rewriteValueARM64_OpARM64MOVWloadidx_0(v *Value) bool { // cond: // result: (MOVWloadidx4 ptr idx mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SLLconst { @@ -16794,7 +16592,6 @@ func rewriteValueARM64_OpARM64MOVWloadidx_0(v *Value) bool { break } idx := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVWloadidx4) v.AddArg(ptr) v.AddArg(idx) @@ -16805,7 +16602,7 @@ func rewriteValueARM64_OpARM64MOVWloadidx_0(v *Value) bool { // cond: // result: (MOVWloadidx4 ptr idx mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64SLLconst { break @@ -16815,7 +16612,6 @@ func rewriteValueARM64_OpARM64MOVWloadidx_0(v *Value) bool { } idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVWloadidx4) v.AddArg(ptr) v.AddArg(idx) @@ -16850,14 +16646,13 @@ func rewriteValueARM64_OpARM64MOVWloadidx4_0(v *Value) bool { // cond: // result: (MOVWload [c<<2] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARM64MOVWload) v.AuxInt = c << 2 v.AddArg(ptr) @@ -17135,7 +16930,7 @@ func rewriteValueARM64_OpARM64MOVWreg_10(v *Value) bool { } // match: (MOVWreg (SLLconst [lc] x)) // cond: lc < 32 - // result: (SBFIZ [arm64BFAuxInt(lc, 32-lc)] x) + // result: (SBFIZ [armBFAuxInt(lc, 32-lc)] x) for { v_0 := v.Args[0] if v_0.Op != OpARM64SLLconst { @@ -17147,7 +16942,7 @@ func rewriteValueARM64_OpARM64MOVWreg_10(v *Value) bool { break } v.reset(OpARM64SBFIZ) - v.AuxInt = arm64BFAuxInt(lc, 32-lc) + v.AuxInt = armBFAuxInt(lc, 32-lc) v.AddArg(x) return true } @@ -17155,23 +16950,20 @@ func rewriteValueARM64_OpARM64MOVWreg_10(v *Value) bool { } func rewriteValueARM64_OpARM64MOVWstore_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVWstore [off] {sym} ptr (FMOVSfpgp val) mem) // cond: // result: (FMOVSstore [off] {sym} ptr val mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64FMOVSfpgp { break } val := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64FMOVSstore) v.AuxInt = off v.Aux = sym @@ -17186,7 +16978,7 @@ func rewriteValueARM64_OpARM64MOVWstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64ADDconst { break @@ -17194,7 +16986,6 @@ func rewriteValueARM64_OpARM64MOVWstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -17212,16 +17003,14 @@ func rewriteValueARM64_OpARM64MOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(off == 0 && sym == nil) { break } @@ -17238,7 +17027,7 @@ func rewriteValueARM64_OpARM64MOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64ADDshiftLL { break @@ -17246,11 +17035,9 @@ func rewriteValueARM64_OpARM64MOVWstore_0(v *Value) bool { if v_0.AuxInt != 2 { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(off == 0 && sym == nil) { break } @@ -17267,7 +17054,7 @@ func rewriteValueARM64_OpARM64MOVWstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDaddr { break @@ -17276,7 +17063,6 @@ func rewriteValueARM64_OpARM64MOVWstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -17294,7 +17080,7 @@ func rewriteValueARM64_OpARM64MOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { @@ -17303,7 +17089,6 @@ func rewriteValueARM64_OpARM64MOVWstore_0(v *Value) bool { if v_1.AuxInt != 0 { break } - mem := v.Args[2] v.reset(OpARM64MOVWstorezero) v.AuxInt = off v.Aux = sym @@ -17317,14 +17102,13 @@ func rewriteValueARM64_OpARM64MOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVWreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVWstore) v.AuxInt = off v.Aux = sym @@ -17339,14 +17123,13 @@ func rewriteValueARM64_OpARM64MOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVWUreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVWstore) v.AuxInt = off v.Aux = sym @@ -17381,12 +17164,11 @@ func rewriteValueARM64_OpARM64MOVWstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] ptr1 := x.Args[0] if w != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && isSamePtr(ptr0, ptr1) && clobber(x)) { break } @@ -17411,9 +17193,8 @@ func rewriteValueARM64_OpARM64MOVWstore_0(v *Value) bool { if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SRLconst { break @@ -17426,13 +17207,12 @@ func rewriteValueARM64_OpARM64MOVWstore_0(v *Value) bool { if x.Op != OpARM64MOVWstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] ptr1 := x.Args[0] idx1 := x.Args[1] if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x)) { break } @@ -17447,7 +17227,6 @@ func rewriteValueARM64_OpARM64MOVWstore_0(v *Value) bool { } func rewriteValueARM64_OpARM64MOVWstore_10(v *Value) bool { b := v.Block - _ = b // match: (MOVWstore [4] {s} (ADDshiftLL [2] ptr0 idx0) (SRLconst [32] w) x:(MOVWstoreidx4 ptr1 idx1 w mem)) // cond: x.Uses == 1 && s == nil && isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) && clobber(x) // result: (MOVDstoreidx ptr1 (SLLconst [2] idx1) w mem) @@ -17464,9 +17243,8 @@ func rewriteValueARM64_OpARM64MOVWstore_10(v *Value) bool { if v_0.AuxInt != 2 { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SRLconst { break @@ -17479,13 +17257,12 @@ func rewriteValueARM64_OpARM64MOVWstore_10(v *Value) bool { if x.Op != OpARM64MOVWstoreidx4 { break } - _ = x.Args[3] + mem := x.Args[3] ptr1 := x.Args[0] idx1 := x.Args[1] if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) && clobber(x)) { break } @@ -17523,7 +17300,7 @@ func rewriteValueARM64_OpARM64MOVWstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] ptr1 := x.Args[0] w0 := x.Args[1] if w0.Op != OpARM64SRLconst { @@ -17535,7 +17312,6 @@ func rewriteValueARM64_OpARM64MOVWstore_10(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && isSamePtr(ptr0, ptr1) && clobber(x)) { break } @@ -17560,9 +17336,8 @@ func rewriteValueARM64_OpARM64MOVWstore_10(v *Value) bool { if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SRLconst { break @@ -17573,7 +17348,7 @@ func rewriteValueARM64_OpARM64MOVWstore_10(v *Value) bool { if x.Op != OpARM64MOVWstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] ptr1 := x.Args[0] idx1 := x.Args[1] w0 := x.Args[2] @@ -17586,7 +17361,6 @@ func rewriteValueARM64_OpARM64MOVWstore_10(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x)) { break } @@ -17613,9 +17387,8 @@ func rewriteValueARM64_OpARM64MOVWstore_10(v *Value) bool { if v_0.AuxInt != 2 { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SRLconst { break @@ -17626,7 +17399,7 @@ func rewriteValueARM64_OpARM64MOVWstore_10(v *Value) bool { if x.Op != OpARM64MOVWstoreidx4 { break } - _ = x.Args[3] + mem := x.Args[3] ptr1 := x.Args[0] idx1 := x.Args[1] w0 := x.Args[2] @@ -17639,7 +17412,6 @@ func rewriteValueARM64_OpARM64MOVWstore_10(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && s == nil && isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) && clobber(x)) { break } @@ -17660,7 +17432,7 @@ func rewriteValueARM64_OpARM64MOVWstoreidx_0(v *Value) bool { // cond: // result: (MOVWstore [c] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { @@ -17668,7 +17440,6 @@ func rewriteValueARM64_OpARM64MOVWstoreidx_0(v *Value) bool { } c := v_1.AuxInt val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64MOVWstore) v.AuxInt = c v.AddArg(ptr) @@ -17680,7 +17451,7 @@ func rewriteValueARM64_OpARM64MOVWstoreidx_0(v *Value) bool { // cond: // result: (MOVWstore [c] idx val mem) for { - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break @@ -17688,7 +17459,6 @@ func rewriteValueARM64_OpARM64MOVWstoreidx_0(v *Value) bool { c := v_0.AuxInt idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64MOVWstore) v.AuxInt = c v.AddArg(idx) @@ -17700,7 +17470,7 @@ func rewriteValueARM64_OpARM64MOVWstoreidx_0(v *Value) bool { // cond: // result: (MOVWstoreidx4 ptr idx val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SLLconst { @@ -17711,7 +17481,6 @@ func rewriteValueARM64_OpARM64MOVWstoreidx_0(v *Value) bool { } idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64MOVWstoreidx4) v.AddArg(ptr) v.AddArg(idx) @@ -17723,7 +17492,7 @@ func rewriteValueARM64_OpARM64MOVWstoreidx_0(v *Value) bool { // cond: // result: (MOVWstoreidx4 ptr idx val mem) for { - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARM64SLLconst { break @@ -17734,7 +17503,6 @@ func rewriteValueARM64_OpARM64MOVWstoreidx_0(v *Value) bool { idx := v_0.Args[0] ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64MOVWstoreidx4) v.AddArg(ptr) v.AddArg(idx) @@ -17746,7 +17514,7 @@ func rewriteValueARM64_OpARM64MOVWstoreidx_0(v *Value) bool { // cond: // result: (MOVWstorezeroidx ptr idx mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -17756,7 +17524,6 @@ func rewriteValueARM64_OpARM64MOVWstoreidx_0(v *Value) bool { if v_2.AuxInt != 0 { break } - mem := v.Args[3] v.reset(OpARM64MOVWstorezeroidx) v.AddArg(ptr) v.AddArg(idx) @@ -17767,7 +17534,7 @@ func rewriteValueARM64_OpARM64MOVWstoreidx_0(v *Value) bool { // cond: // result: (MOVWstoreidx ptr idx x mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -17775,7 +17542,6 @@ func rewriteValueARM64_OpARM64MOVWstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpARM64MOVWstoreidx) v.AddArg(ptr) v.AddArg(idx) @@ -17787,7 +17553,7 @@ func rewriteValueARM64_OpARM64MOVWstoreidx_0(v *Value) bool { // cond: // result: (MOVWstoreidx ptr idx x mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -17795,7 +17561,6 @@ func rewriteValueARM64_OpARM64MOVWstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpARM64MOVWstoreidx) v.AddArg(ptr) v.AddArg(idx) @@ -17829,7 +17594,7 @@ func rewriteValueARM64_OpARM64MOVWstoreidx_0(v *Value) bool { if x.Op != OpARM64MOVWstoreidx { break } - _ = x.Args[3] + mem := x.Args[3] if ptr != x.Args[0] { break } @@ -17839,7 +17604,6 @@ func rewriteValueARM64_OpARM64MOVWstoreidx_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -17857,7 +17621,7 @@ func rewriteValueARM64_OpARM64MOVWstoreidx4_0(v *Value) bool { // cond: // result: (MOVWstore [c<<2] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { @@ -17865,7 +17629,6 @@ func rewriteValueARM64_OpARM64MOVWstoreidx4_0(v *Value) bool { } c := v_1.AuxInt val := v.Args[2] - mem := v.Args[3] v.reset(OpARM64MOVWstore) v.AuxInt = c << 2 v.AddArg(ptr) @@ -17877,7 +17640,7 @@ func rewriteValueARM64_OpARM64MOVWstoreidx4_0(v *Value) bool { // cond: // result: (MOVWstorezeroidx4 ptr idx mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -17887,7 +17650,6 @@ func rewriteValueARM64_OpARM64MOVWstoreidx4_0(v *Value) bool { if v_2.AuxInt != 0 { break } - mem := v.Args[3] v.reset(OpARM64MOVWstorezeroidx4) v.AddArg(ptr) v.AddArg(idx) @@ -17898,7 +17660,7 @@ func rewriteValueARM64_OpARM64MOVWstoreidx4_0(v *Value) bool { // cond: // result: (MOVWstoreidx4 ptr idx x mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -17906,7 +17668,6 @@ func rewriteValueARM64_OpARM64MOVWstoreidx4_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpARM64MOVWstoreidx4) v.AddArg(ptr) v.AddArg(idx) @@ -17918,7 +17679,7 @@ func rewriteValueARM64_OpARM64MOVWstoreidx4_0(v *Value) bool { // cond: // result: (MOVWstoreidx4 ptr idx x mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -17926,7 +17687,6 @@ func rewriteValueARM64_OpARM64MOVWstoreidx4_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpARM64MOVWstoreidx4) v.AddArg(ptr) v.AddArg(idx) @@ -17938,23 +17698,20 @@ func rewriteValueARM64_OpARM64MOVWstoreidx4_0(v *Value) bool { } func rewriteValueARM64_OpARM64MOVWstorezero_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVWstorezero [off1] {sym} (ADDconst [off2] ptr) mem) // cond: is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared) // result: (MOVWstorezero [off1+off2] {sym} ptr mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -17971,7 +17728,7 @@ func rewriteValueARM64_OpARM64MOVWstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDaddr { break @@ -17979,7 +17736,6 @@ func rewriteValueARM64_OpARM64MOVWstorezero_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -17996,15 +17752,13 @@ func rewriteValueARM64_OpARM64MOVWstorezero_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(off == 0 && sym == nil) { break } @@ -18020,7 +17774,7 @@ func rewriteValueARM64_OpARM64MOVWstorezero_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64ADDshiftLL { break @@ -18028,10 +17782,8 @@ func rewriteValueARM64_OpARM64MOVWstorezero_0(v *Value) bool { if v_0.AuxInt != 2 { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(off == 0 && sym == nil) { break } @@ -18057,9 +17809,8 @@ func rewriteValueARM64_OpARM64MOVWstorezero_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[1] - ptr1 := x.Args[0] mem := x.Args[1] + ptr1 := x.Args[0] if !(x.Uses == 1 && areAdjacentOffsets(i, j, 4) && is32Bit(min(i, j)) && isSamePtr(ptr0, ptr1) && clobber(x)) { break } @@ -18083,17 +17834,15 @@ func rewriteValueARM64_OpARM64MOVWstorezero_0(v *Value) bool { if v_0.Op != OpARM64ADD { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] x := v.Args[1] if x.Op != OpARM64MOVWstorezeroidx { break } - _ = x.Args[2] + mem := x.Args[2] ptr1 := x.Args[0] idx1 := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && s == nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x)) { break } @@ -18119,17 +17868,15 @@ func rewriteValueARM64_OpARM64MOVWstorezero_0(v *Value) bool { if v_0.AuxInt != 2 { break } - _ = v_0.Args[1] - ptr0 := v_0.Args[0] idx0 := v_0.Args[1] + ptr0 := v_0.Args[0] x := v.Args[1] if x.Op != OpARM64MOVWstorezeroidx4 { break } - _ = x.Args[2] + mem := x.Args[2] ptr1 := x.Args[0] idx1 := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && s == nil && isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) && clobber(x)) { break } @@ -18149,14 +17896,13 @@ func rewriteValueARM64_OpARM64MOVWstorezeroidx_0(v *Value) bool { // cond: // result: (MOVWstorezero [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARM64MOVWstorezero) v.AuxInt = c v.AddArg(ptr) @@ -18167,14 +17913,13 @@ func rewriteValueARM64_OpARM64MOVWstorezeroidx_0(v *Value) bool { // cond: // result: (MOVWstorezero [c] idx mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt idx := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVWstorezero) v.AuxInt = c v.AddArg(idx) @@ -18185,7 +17930,7 @@ func rewriteValueARM64_OpARM64MOVWstorezeroidx_0(v *Value) bool { // cond: // result: (MOVWstorezeroidx4 ptr idx mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64SLLconst { @@ -18195,7 +17940,6 @@ func rewriteValueARM64_OpARM64MOVWstorezeroidx_0(v *Value) bool { break } idx := v_1.Args[0] - mem := v.Args[2] v.reset(OpARM64MOVWstorezeroidx4) v.AddArg(ptr) v.AddArg(idx) @@ -18206,7 +17950,7 @@ func rewriteValueARM64_OpARM64MOVWstorezeroidx_0(v *Value) bool { // cond: // result: (MOVWstorezeroidx4 ptr idx mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64SLLconst { break @@ -18216,7 +17960,6 @@ func rewriteValueARM64_OpARM64MOVWstorezeroidx_0(v *Value) bool { } idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVWstorezeroidx4) v.AddArg(ptr) v.AddArg(idx) @@ -18241,14 +17984,13 @@ func rewriteValueARM64_OpARM64MOVWstorezeroidx_0(v *Value) bool { if x.Op != OpARM64MOVWstorezeroidx { break } - _ = x.Args[2] + mem := x.Args[2] if ptr != x.Args[0] { break } if idx != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -18265,14 +18007,13 @@ func rewriteValueARM64_OpARM64MOVWstorezeroidx4_0(v *Value) bool { // cond: // result: (MOVWstorezero [c<<2] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] v.reset(OpARM64MOVWstorezero) v.AuxInt = c << 2 v.AddArg(ptr) @@ -18283,7 +18024,6 @@ func rewriteValueARM64_OpARM64MOVWstorezeroidx4_0(v *Value) bool { } func rewriteValueARM64_OpARM64MSUB_0(v *Value) bool { b := v.Block - _ = b // match: (MSUB a x (MOVDconst [-1])) // cond: // result: (ADD a x) @@ -18513,12 +18253,11 @@ func rewriteValueARM64_OpARM64MSUB_0(v *Value) bool { } func rewriteValueARM64_OpARM64MSUB_10(v *Value) bool { b := v.Block - _ = b // match: (MSUB a (MOVDconst [-1]) x) // cond: // result: (ADD a x) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { @@ -18527,7 +18266,6 @@ func rewriteValueARM64_OpARM64MSUB_10(v *Value) bool { if v_1.AuxInt != -1 { break } - x := v.Args[2] v.reset(OpARM64ADD) v.AddArg(a) v.AddArg(x) @@ -18555,7 +18293,7 @@ func rewriteValueARM64_OpARM64MSUB_10(v *Value) bool { // cond: // result: (SUB a x) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { @@ -18564,7 +18302,6 @@ func rewriteValueARM64_OpARM64MSUB_10(v *Value) bool { if v_1.AuxInt != 1 { break } - x := v.Args[2] v.reset(OpARM64SUB) v.AddArg(a) v.AddArg(x) @@ -18574,14 +18311,13 @@ func rewriteValueARM64_OpARM64MSUB_10(v *Value) bool { // cond: isPowerOfTwo(c) // result: (SUBshiftLL a x [log2(c)]) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(isPowerOfTwo(c)) { break } @@ -18595,14 +18331,13 @@ func rewriteValueARM64_OpARM64MSUB_10(v *Value) bool { // cond: isPowerOfTwo(c-1) && c>=3 // result: (SUB a (ADDshiftLL x x [log2(c-1)])) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(isPowerOfTwo(c-1) && c >= 3) { break } @@ -18619,14 +18354,13 @@ func rewriteValueARM64_OpARM64MSUB_10(v *Value) bool { // cond: isPowerOfTwo(c+1) && c>=7 // result: (ADD a (SUBshiftLL x x [log2(c+1)])) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(isPowerOfTwo(c+1) && c >= 7) { break } @@ -18643,14 +18377,13 @@ func rewriteValueARM64_OpARM64MSUB_10(v *Value) bool { // cond: c%3 == 0 && isPowerOfTwo(c/3) // result: (ADDshiftLL a (SUBshiftLL x x [2]) [log2(c/3)]) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(c%3 == 0 && isPowerOfTwo(c/3)) { break } @@ -18668,14 +18401,13 @@ func rewriteValueARM64_OpARM64MSUB_10(v *Value) bool { // cond: c%5 == 0 && isPowerOfTwo(c/5) // result: (SUBshiftLL a (ADDshiftLL x x [2]) [log2(c/5)]) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(c%5 == 0 && isPowerOfTwo(c/5)) { break } @@ -18693,14 +18425,13 @@ func rewriteValueARM64_OpARM64MSUB_10(v *Value) bool { // cond: c%7 == 0 && isPowerOfTwo(c/7) // result: (ADDshiftLL a (SUBshiftLL x x [3]) [log2(c/7)]) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(c%7 == 0 && isPowerOfTwo(c/7)) { break } @@ -18718,14 +18449,13 @@ func rewriteValueARM64_OpARM64MSUB_10(v *Value) bool { // cond: c%9 == 0 && isPowerOfTwo(c/9) // result: (SUBshiftLL a (ADDshiftLL x x [3]) [log2(c/9)]) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(c%9 == 0 && isPowerOfTwo(c/9)) { break } @@ -18743,19 +18473,17 @@ func rewriteValueARM64_OpARM64MSUB_10(v *Value) bool { } func rewriteValueARM64_OpARM64MSUB_20(v *Value) bool { b := v.Block - _ = b // match: (MSUB (MOVDconst [c]) x y) // cond: // result: (ADDconst [c] (MNEG x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARM64ADDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64MNEG, x.Type) @@ -18789,7 +18517,6 @@ func rewriteValueARM64_OpARM64MSUB_20(v *Value) bool { } func rewriteValueARM64_OpARM64MSUBW_0(v *Value) bool { b := v.Block - _ = b // match: (MSUBW a x (MOVDconst [c])) // cond: int32(c)==-1 // result: (ADD a x) @@ -19022,19 +18749,17 @@ func rewriteValueARM64_OpARM64MSUBW_0(v *Value) bool { } func rewriteValueARM64_OpARM64MSUBW_10(v *Value) bool { b := v.Block - _ = b // match: (MSUBW a (MOVDconst [c]) x) // cond: int32(c)==-1 // result: (ADD a x) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(int32(c) == -1) { break } @@ -19066,14 +18791,13 @@ func rewriteValueARM64_OpARM64MSUBW_10(v *Value) bool { // cond: int32(c)==1 // result: (SUB a x) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(int32(c) == 1) { break } @@ -19086,14 +18810,13 @@ func rewriteValueARM64_OpARM64MSUBW_10(v *Value) bool { // cond: isPowerOfTwo(c) // result: (SUBshiftLL a x [log2(c)]) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(isPowerOfTwo(c)) { break } @@ -19107,14 +18830,13 @@ func rewriteValueARM64_OpARM64MSUBW_10(v *Value) bool { // cond: isPowerOfTwo(c-1) && int32(c)>=3 // result: (SUB a (ADDshiftLL x x [log2(c-1)])) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(isPowerOfTwo(c-1) && int32(c) >= 3) { break } @@ -19131,14 +18853,13 @@ func rewriteValueARM64_OpARM64MSUBW_10(v *Value) bool { // cond: isPowerOfTwo(c+1) && int32(c)>=7 // result: (ADD a (SUBshiftLL x x [log2(c+1)])) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(isPowerOfTwo(c+1) && int32(c) >= 7) { break } @@ -19155,14 +18876,13 @@ func rewriteValueARM64_OpARM64MSUBW_10(v *Value) bool { // cond: c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c) // result: (ADDshiftLL a (SUBshiftLL x x [2]) [log2(c/3)]) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c)) { break } @@ -19180,14 +18900,13 @@ func rewriteValueARM64_OpARM64MSUBW_10(v *Value) bool { // cond: c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c) // result: (SUBshiftLL a (ADDshiftLL x x [2]) [log2(c/5)]) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c)) { break } @@ -19205,14 +18924,13 @@ func rewriteValueARM64_OpARM64MSUBW_10(v *Value) bool { // cond: c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c) // result: (ADDshiftLL a (SUBshiftLL x x [3]) [log2(c/7)]) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c)) { break } @@ -19230,14 +18948,13 @@ func rewriteValueARM64_OpARM64MSUBW_10(v *Value) bool { // cond: c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c) // result: (SUBshiftLL a (ADDshiftLL x x [3]) [log2(c/9)]) for { - _ = v.Args[2] + x := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { break } c := v_1.AuxInt - x := v.Args[2] if !(c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c)) { break } @@ -19255,19 +18972,17 @@ func rewriteValueARM64_OpARM64MSUBW_10(v *Value) bool { } func rewriteValueARM64_OpARM64MSUBW_20(v *Value) bool { b := v.Block - _ = b // match: (MSUBW (MOVDconst [c]) x y) // cond: // result: (ADDconst [c] (MNEGW x y)) for { - _ = v.Args[2] + y := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt x := v.Args[1] - y := v.Args[2] v.reset(OpARM64ADDconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64MNEGW, x.Type) @@ -19304,13 +19019,12 @@ func rewriteValueARM64_OpARM64MUL_0(v *Value) bool { // cond: // result: (MNEG x y) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64NEG { break } x := v_0.Args[0] - y := v.Args[1] v.reset(OpARM64MNEG) v.AddArg(x) v.AddArg(y) @@ -19353,7 +19067,7 @@ func rewriteValueARM64_OpARM64MUL_0(v *Value) bool { // cond: // result: (NEG x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break @@ -19361,7 +19075,6 @@ func rewriteValueARM64_OpARM64MUL_0(v *Value) bool { if v_0.AuxInt != -1 { break } - x := v.Args[1] v.reset(OpARM64NEG) v.AddArg(x) return true @@ -19420,7 +19133,7 @@ func rewriteValueARM64_OpARM64MUL_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break @@ -19428,7 +19141,6 @@ func rewriteValueARM64_OpARM64MUL_0(v *Value) bool { if v_0.AuxInt != 1 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -19457,13 +19169,12 @@ func rewriteValueARM64_OpARM64MUL_0(v *Value) bool { // cond: isPowerOfTwo(c) // result: (SLLconst [log2(c)] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isPowerOfTwo(c)) { break } @@ -19476,7 +19187,6 @@ func rewriteValueARM64_OpARM64MUL_0(v *Value) bool { } func rewriteValueARM64_OpARM64MUL_10(v *Value) bool { b := v.Block - _ = b // match: (MUL x (MOVDconst [c])) // cond: isPowerOfTwo(c-1) && c >= 3 // result: (ADDshiftLL x x [log2(c-1)]) @@ -19501,13 +19211,12 @@ func rewriteValueARM64_OpARM64MUL_10(v *Value) bool { // cond: isPowerOfTwo(c-1) && c >= 3 // result: (ADDshiftLL x x [log2(c-1)]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isPowerOfTwo(c-1) && c >= 3) { break } @@ -19543,13 +19252,12 @@ func rewriteValueARM64_OpARM64MUL_10(v *Value) bool { // cond: isPowerOfTwo(c+1) && c >= 7 // result: (ADDshiftLL (NEG x) x [log2(c+1)]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isPowerOfTwo(c+1) && c >= 7) { break } @@ -19588,13 +19296,12 @@ func rewriteValueARM64_OpARM64MUL_10(v *Value) bool { // cond: c%3 == 0 && isPowerOfTwo(c/3) // result: (SLLconst [log2(c/3)] (ADDshiftLL x x [1])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(c%3 == 0 && isPowerOfTwo(c/3)) { break } @@ -19634,13 +19341,12 @@ func rewriteValueARM64_OpARM64MUL_10(v *Value) bool { // cond: c%5 == 0 && isPowerOfTwo(c/5) // result: (SLLconst [log2(c/5)] (ADDshiftLL x x [2])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(c%5 == 0 && isPowerOfTwo(c/5)) { break } @@ -19682,13 +19388,12 @@ func rewriteValueARM64_OpARM64MUL_10(v *Value) bool { // cond: c%7 == 0 && isPowerOfTwo(c/7) // result: (SLLconst [log2(c/7)] (ADDshiftLL (NEG x) x [3])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(c%7 == 0 && isPowerOfTwo(c/7)) { break } @@ -19707,7 +19412,6 @@ func rewriteValueARM64_OpARM64MUL_10(v *Value) bool { } func rewriteValueARM64_OpARM64MUL_20(v *Value) bool { b := v.Block - _ = b // match: (MUL x (MOVDconst [c])) // cond: c%9 == 0 && isPowerOfTwo(c/9) // result: (SLLconst [log2(c/9)] (ADDshiftLL x x [3])) @@ -19735,13 +19439,12 @@ func rewriteValueARM64_OpARM64MUL_20(v *Value) bool { // cond: c%9 == 0 && isPowerOfTwo(c/9) // result: (SLLconst [log2(c/9)] (ADDshiftLL x x [3])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(c%9 == 0 && isPowerOfTwo(c/9)) { break } @@ -19799,13 +19502,12 @@ func rewriteValueARM64_OpARM64MULW_0(v *Value) bool { // cond: // result: (MNEGW x y) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64NEG { break } x := v_0.Args[0] - y := v.Args[1] v.reset(OpARM64MNEGW) v.AddArg(x) v.AddArg(y) @@ -19849,13 +19551,12 @@ func rewriteValueARM64_OpARM64MULW_0(v *Value) bool { // cond: int32(c)==-1 // result: (NEG x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(int32(c) == -1) { break } @@ -19920,13 +19621,12 @@ func rewriteValueARM64_OpARM64MULW_0(v *Value) bool { // cond: int32(c)==1 // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(int32(c) == 1) { break } @@ -19958,13 +19658,12 @@ func rewriteValueARM64_OpARM64MULW_0(v *Value) bool { // cond: isPowerOfTwo(c) // result: (SLLconst [log2(c)] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isPowerOfTwo(c)) { break } @@ -19977,7 +19676,6 @@ func rewriteValueARM64_OpARM64MULW_0(v *Value) bool { } func rewriteValueARM64_OpARM64MULW_10(v *Value) bool { b := v.Block - _ = b // match: (MULW x (MOVDconst [c])) // cond: isPowerOfTwo(c-1) && int32(c) >= 3 // result: (ADDshiftLL x x [log2(c-1)]) @@ -20002,13 +19700,12 @@ func rewriteValueARM64_OpARM64MULW_10(v *Value) bool { // cond: isPowerOfTwo(c-1) && int32(c) >= 3 // result: (ADDshiftLL x x [log2(c-1)]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isPowerOfTwo(c-1) && int32(c) >= 3) { break } @@ -20044,13 +19741,12 @@ func rewriteValueARM64_OpARM64MULW_10(v *Value) bool { // cond: isPowerOfTwo(c+1) && int32(c) >= 7 // result: (ADDshiftLL (NEG x) x [log2(c+1)]) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isPowerOfTwo(c+1) && int32(c) >= 7) { break } @@ -20089,13 +19785,12 @@ func rewriteValueARM64_OpARM64MULW_10(v *Value) bool { // cond: c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c) // result: (SLLconst [log2(c/3)] (ADDshiftLL x x [1])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c)) { break } @@ -20135,13 +19830,12 @@ func rewriteValueARM64_OpARM64MULW_10(v *Value) bool { // cond: c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c) // result: (SLLconst [log2(c/5)] (ADDshiftLL x x [2])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c)) { break } @@ -20183,13 +19877,12 @@ func rewriteValueARM64_OpARM64MULW_10(v *Value) bool { // cond: c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c) // result: (SLLconst [log2(c/7)] (ADDshiftLL (NEG x) x [3])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c)) { break } @@ -20208,7 +19901,6 @@ func rewriteValueARM64_OpARM64MULW_10(v *Value) bool { } func rewriteValueARM64_OpARM64MULW_20(v *Value) bool { b := v.Block - _ = b // match: (MULW x (MOVDconst [c])) // cond: c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c) // result: (SLLconst [log2(c/9)] (ADDshiftLL x x [3])) @@ -20236,13 +19928,12 @@ func rewriteValueARM64_OpARM64MULW_20(v *Value) bool { // cond: c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c) // result: (SLLconst [log2(c/9)] (ADDshiftLL x x [3])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c)) { break } @@ -20425,9 +20116,8 @@ func rewriteValueARM64_OpARM64NEG_0(v *Value) bool { if v_0.Op != OpARM64MUL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpARM64MNEG) v.AddArg(x) v.AddArg(y) @@ -20441,9 +20131,8 @@ func rewriteValueARM64_OpARM64NEG_0(v *Value) bool { if v_0.Op != OpARM64MULW { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpARM64MNEGW) v.AddArg(x) v.AddArg(y) @@ -20666,13 +20355,12 @@ func rewriteValueARM64_OpARM64OR_0(v *Value) bool { // cond: // result: (ORconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64ORconst) v.AuxInt = c v.AddArg(x) @@ -20682,9 +20370,8 @@ func rewriteValueARM64_OpARM64OR_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -20712,13 +20399,12 @@ func rewriteValueARM64_OpARM64OR_0(v *Value) bool { // cond: // result: (ORN x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MVN { break } y := v_0.Args[0] - x := v.Args[1] v.reset(OpARM64ORN) v.AddArg(x) v.AddArg(y) @@ -20749,14 +20435,13 @@ func rewriteValueARM64_OpARM64OR_0(v *Value) bool { // cond: clobberIfDead(x1) // result: (ORshiftLL x0 y [c]) for { - _ = v.Args[1] + x0 := v.Args[1] x1 := v.Args[0] if x1.Op != OpARM64SLLconst { break } c := x1.AuxInt y := x1.Args[0] - x0 := v.Args[1] if !(clobberIfDead(x1)) { break } @@ -20791,14 +20476,13 @@ func rewriteValueARM64_OpARM64OR_0(v *Value) bool { // cond: clobberIfDead(x1) // result: (ORshiftRL x0 y [c]) for { - _ = v.Args[1] + x0 := v.Args[1] x1 := v.Args[0] if x1.Op != OpARM64SRLconst { break } c := x1.AuxInt y := x1.Args[0] - x0 := v.Args[1] if !(clobberIfDead(x1)) { break } @@ -20833,21 +20517,18 @@ func rewriteValueARM64_OpARM64OR_0(v *Value) bool { } func rewriteValueARM64_OpARM64OR_10(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (OR x1:(SRAconst [c] y) x0) // cond: clobberIfDead(x1) // result: (ORshiftRA x0 y [c]) for { - _ = v.Args[1] + x0 := v.Args[1] x1 := v.Args[0] if x1.Op != OpARM64SRAconst { break } c := x1.AuxInt y := x1.Args[0] - x0 := v.Args[1] if !(clobberIfDead(x1)) { break } @@ -21799,7 +21480,6 @@ func rewriteValueARM64_OpARM64OR_10(v *Value) bool { } func rewriteValueARM64_OpARM64OR_20(v *Value) bool { b := v.Block - _ = b // match: (OR (ANDconst [ac] y) (UBFIZ [bfc] x)) // cond: ac == ^((1< y7:(MOVDnop x7:(MOVBUload [i0] {s} p mem)) o0:(ORshiftLL [8] o1:(ORshiftLL [16] o2:(ORshiftLL [24] o3:(ORshiftLL [32] o4:(ORshiftLL [40] o5:(ORshiftLL [48] s0:(SLLconst [56] y0:(MOVDnop x0:(MOVBUload [i7] {s} p mem))) y1:(MOVDnop x1:(MOVBUload [i6] {s} p mem))) y2:(MOVDnop x2:(MOVBUload [i5] {s} p mem))) y3:(MOVDnop x3:(MOVBUload [i4] {s} p mem))) y4:(MOVDnop x4:(MOVBUload [i3] {s} p mem))) y5:(MOVDnop x5:(MOVBUload [i2] {s} p mem))) y6:(MOVDnop x6:(MOVBUload [i1] {s} p mem)))) // cond: i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && y0.Uses == 1 && y1.Uses == 1 && y2.Uses == 1 && y3.Uses == 1 && y4.Uses == 1 && y5.Uses == 1 && y6.Uses == 1 && y7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(y0) && clobber(y1) && clobber(y2) && clobber(y3) && clobber(y4) && clobber(y5) && clobber(y6) && clobber(y7) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload {s} (OffPtr [i0] p) mem) @@ -22837,9 +22507,8 @@ func rewriteValueARM64_OpARM64OR_30(v *Value) bool { } i0 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o0 := v.Args[1] if o0.Op != OpARM64ORshiftLL { break @@ -23116,9 +22785,8 @@ func rewriteValueARM64_OpARM64OR_30(v *Value) bool { break } s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] y1 := o5.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -23243,9 +22911,8 @@ func rewriteValueARM64_OpARM64OR_30(v *Value) bool { if p1.Op != OpARM64ADD { break } - _ = p1.Args[1] - ptr1 := p1.Args[0] idx1 := p1.Args[1] + ptr1 := p1.Args[0] if mem != x6.Args[1] { break } @@ -23289,10 +22956,9 @@ func rewriteValueARM64_OpARM64OR_30(v *Value) bool { if x7.Op != OpARM64MOVBUloadidx { break } - _ = x7.Args[2] + mem := x7.Args[2] ptr0 := x7.Args[0] idx0 := x7.Args[1] - mem := x7.Args[2] o0 := v.Args[1] if o0.Op != OpARM64ORshiftLL { break @@ -23489,9 +23155,8 @@ func rewriteValueARM64_OpARM64OR_30(v *Value) bool { if p1.Op != OpARM64ADD { break } - _ = p1.Args[1] - ptr1 := p1.Args[0] idx1 := p1.Args[1] + ptr1 := p1.Args[0] if mem != x6.Args[1] { break } @@ -23576,7 +23241,7 @@ func rewriteValueARM64_OpARM64OR_30(v *Value) bool { if x0.Op != OpARM64MOVBUloadidx { break } - _ = x0.Args[2] + mem := x0.Args[2] ptr := x0.Args[0] x0_1 := x0.Args[1] if x0_1.Op != OpARM64ADDconst { @@ -23586,7 +23251,6 @@ func rewriteValueARM64_OpARM64OR_30(v *Value) bool { break } idx := x0_1.Args[0] - mem := x0.Args[2] y1 := o5.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -23781,10 +23445,9 @@ func rewriteValueARM64_OpARM64OR_30(v *Value) bool { if x7.Op != OpARM64MOVBUloadidx { break } - _ = x7.Args[2] + mem := x7.Args[2] ptr := x7.Args[0] idx := x7.Args[1] - mem := x7.Args[2] o0 := v.Args[1] if o0.Op != OpARM64ORshiftLL { break @@ -24066,9 +23729,8 @@ func rewriteValueARM64_OpARM64OR_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] y1 := o1.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -24159,9 +23821,8 @@ func rewriteValueARM64_OpARM64OR_30(v *Value) bool { } i3 := x3.AuxInt s := x3.Aux - _ = x3.Args[1] - p := x3.Args[0] mem := x3.Args[1] + p := x3.Args[0] o0 := v.Args[1] if o0.Op != OpARM64ORshiftLL { break @@ -24296,10 +23957,9 @@ func rewriteValueARM64_OpARM64OR_30(v *Value) bool { if x0.Op != OpARM64MOVBUloadidx { break } - _ = x0.Args[2] + mem := x0.Args[2] ptr0 := x0.Args[0] idx0 := x0.Args[1] - mem := x0.Args[2] y1 := o1.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -24317,9 +23977,8 @@ func rewriteValueARM64_OpARM64OR_30(v *Value) bool { if p1.Op != OpARM64ADD { break } - _ = p1.Args[1] - ptr1 := p1.Args[0] idx1 := p1.Args[1] + ptr1 := p1.Args[0] if mem != x1.Args[1] { break } @@ -24395,9 +24054,8 @@ func rewriteValueARM64_OpARM64OR_30(v *Value) bool { break } s := x3.Aux - _ = x3.Args[1] - p := x3.Args[0] mem := x3.Args[1] + p := x3.Args[0] o0 := v.Args[1] if o0.Op != OpARM64ORshiftLL { break @@ -24454,9 +24112,8 @@ func rewriteValueARM64_OpARM64OR_30(v *Value) bool { if p1.Op != OpARM64ADD { break } - _ = p1.Args[1] - ptr1 := p1.Args[0] idx1 := p1.Args[1] + ptr1 := p1.Args[0] if mem != x1.Args[1] { break } @@ -24532,10 +24189,9 @@ func rewriteValueARM64_OpARM64OR_30(v *Value) bool { if x0.Op != OpARM64MOVBUloadidx { break } - _ = x0.Args[2] + mem := x0.Args[2] ptr := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] y1 := o1.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -24629,7 +24285,6 @@ func rewriteValueARM64_OpARM64OR_30(v *Value) bool { } func rewriteValueARM64_OpARM64OR_40(v *Value) bool { b := v.Block - _ = b // match: (OR y3:(MOVDnop x3:(MOVBUloadidx ptr (ADDconst [3] idx) mem)) o0:(ORshiftLL [8] o1:(ORshiftLL [16] s0:(SLLconst [24] y0:(MOVDnop x0:(MOVBUloadidx ptr idx mem))) y1:(MOVDnop x1:(MOVBUloadidx ptr (ADDconst [1] idx) mem))) y2:(MOVDnop x2:(MOVBUloadidx ptr (ADDconst [2] idx) mem)))) // cond: x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && y0.Uses == 1 && y1.Uses == 1 && y2.Uses == 1 && y3.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && s0.Uses == 1 && mergePoint(b,x0,x1,x2,x3) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(y0) && clobber(y1) && clobber(y2) && clobber(y3) && clobber(o0) && clobber(o1) && clobber(s0) // result: @mergePoint(b,x0,x1,x2,x3) (REVW (MOVWUloadidx ptr idx mem)) @@ -24644,7 +24299,7 @@ func rewriteValueARM64_OpARM64OR_40(v *Value) bool { if x3.Op != OpARM64MOVBUloadidx { break } - _ = x3.Args[2] + mem := x3.Args[2] ptr := x3.Args[0] x3_1 := x3.Args[1] if x3_1.Op != OpARM64ADDconst { @@ -24654,7 +24309,6 @@ func rewriteValueARM64_OpARM64OR_40(v *Value) bool { break } idx := x3_1.Args[0] - mem := x3.Args[2] o0 := v.Args[1] if o0.Op != OpARM64ORshiftLL { break @@ -24831,9 +24485,8 @@ func rewriteValueARM64_OpARM64OR_40(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] y1 := o5.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -25000,9 +24653,8 @@ func rewriteValueARM64_OpARM64OR_40(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o0 := v.Args[1] if o0.Op != OpARM64ORshiftLL { break @@ -25277,10 +24929,9 @@ func rewriteValueARM64_OpARM64OR_40(v *Value) bool { if x0.Op != OpARM64MOVBUloadidx { break } - _ = x0.Args[2] + mem := x0.Args[2] ptr0 := x0.Args[0] idx0 := x0.Args[1] - mem := x0.Args[2] y1 := o5.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -25298,9 +24949,8 @@ func rewriteValueARM64_OpARM64OR_40(v *Value) bool { if p1.Op != OpARM64ADD { break } - _ = p1.Args[1] - ptr1 := p1.Args[0] idx1 := p1.Args[1] + ptr1 := p1.Args[0] if mem != x1.Args[1] { break } @@ -25460,9 +25110,8 @@ func rewriteValueARM64_OpARM64OR_40(v *Value) bool { break } s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o0 := v.Args[1] if o0.Op != OpARM64ORshiftLL { break @@ -25551,9 +25200,8 @@ func rewriteValueARM64_OpARM64OR_40(v *Value) bool { if p1.Op != OpARM64ADD { break } - _ = p1.Args[1] - ptr1 := p1.Args[0] idx1 := p1.Args[1] + ptr1 := p1.Args[0] if mem != x1.Args[1] { break } @@ -25745,10 +25393,9 @@ func rewriteValueARM64_OpARM64OR_40(v *Value) bool { if x0.Op != OpARM64MOVBUloadidx { break } - _ = x0.Args[2] + mem := x0.Args[2] ptr := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] y1 := o5.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -25952,7 +25599,7 @@ func rewriteValueARM64_OpARM64OR_40(v *Value) bool { if x7.Op != OpARM64MOVBUloadidx { break } - _ = x7.Args[2] + mem := x7.Args[2] ptr := x7.Args[0] x7_1 := x7.Args[1] if x7_1.Op != OpARM64ADDconst { @@ -25962,7 +25609,6 @@ func rewriteValueARM64_OpARM64OR_40(v *Value) bool { break } idx := x7_1.Args[0] - mem := x7.Args[2] o0 := v.Args[1] if o0.Op != OpARM64ORshiftLL { break @@ -26223,9 +25869,8 @@ func rewriteValueARM64_OpARM64ORN_0(v *Value) bool { // cond: // result: (MOVDconst [-1]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpARM64MOVDconst) @@ -26501,19 +26146,18 @@ func rewriteValueARM64_OpARM64ORconst_0(v *Value) bool { } func rewriteValueARM64_OpARM64ORshiftLL_0(v *Value) bool { b := v.Block - _ = b + typ := &b.Func.Config.Types // match: (ORshiftLL (MOVDconst [c]) x [d]) // cond: // result: (ORconst [c] (SLLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64ORconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64SLLconst, x.Type) @@ -26567,7 +26211,7 @@ func rewriteValueARM64_OpARM64ORshiftLL_0(v *Value) bool { // result: (RORconst [64-c] x) for { c := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64SRLconst { break @@ -26575,8 +26219,7 @@ func rewriteValueARM64_OpARM64ORshiftLL_0(v *Value) bool { if v_0.AuxInt != 64-c { break } - x := v_0.Args[0] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpARM64RORconst) @@ -26585,22 +26228,21 @@ func rewriteValueARM64_OpARM64ORshiftLL_0(v *Value) bool { return true } // match: (ORshiftLL [c] (UBFX [bfc] x) x) - // cond: c < 32 && t.Size() == 4 && bfc == arm64BFAuxInt(32-c, c) + // cond: c < 32 && t.Size() == 4 && bfc == armBFAuxInt(32-c, c) // result: (RORWconst [32-c] x) for { t := v.Type c := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64UBFX { break } bfc := v_0.AuxInt - x := v_0.Args[0] - if x != v.Args[1] { + if x != v_0.Args[0] { break } - if !(c < 32 && t.Size() == 4 && bfc == arm64BFAuxInt(32-c, c)) { + if !(c < 32 && t.Size() == 4 && bfc == armBFAuxInt(32-c, c)) { break } v.reset(OpARM64RORWconst) @@ -26608,12 +26250,40 @@ func rewriteValueARM64_OpARM64ORshiftLL_0(v *Value) bool { v.AddArg(x) return true } + // match: (ORshiftLL [8] (UBFX [armBFAuxInt(8, 8)] x) x) + // cond: + // result: (REV16W x) + for { + if v.Type != typ.UInt16 { + break + } + if v.AuxInt != 8 { + break + } + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpARM64UBFX { + break + } + if v_0.Type != typ.UInt16 { + break + } + if v_0.AuxInt != armBFAuxInt(8, 8) { + break + } + if x != v_0.Args[0] { + break + } + v.reset(OpARM64REV16W) + v.AddArg(x) + return true + } // match: (ORshiftLL [c] (SRLconst x [64-c]) x2) // cond: // result: (EXTRconst [64-c] x2 x) for { c := v.AuxInt - _ = v.Args[1] + x2 := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64SRLconst { break @@ -26622,7 +26292,6 @@ func rewriteValueARM64_OpARM64ORshiftLL_0(v *Value) bool { break } x := v_0.Args[0] - x2 := v.Args[1] v.reset(OpARM64EXTRconst) v.AuxInt = 64 - c v.AddArg(x2) @@ -26630,20 +26299,19 @@ func rewriteValueARM64_OpARM64ORshiftLL_0(v *Value) bool { return true } // match: (ORshiftLL [c] (UBFX [bfc] x) x2) - // cond: c < 32 && t.Size() == 4 && bfc == arm64BFAuxInt(32-c, c) + // cond: c < 32 && t.Size() == 4 && bfc == armBFAuxInt(32-c, c) // result: (EXTRWconst [32-c] x2 x) for { t := v.Type c := v.AuxInt - _ = v.Args[1] + x2 := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64UBFX { break } bfc := v_0.AuxInt x := v_0.Args[0] - x2 := v.Args[1] - if !(c < 32 && t.Size() == 4 && bfc == arm64BFAuxInt(32-c, c)) { + if !(c < 32 && t.Size() == 4 && bfc == armBFAuxInt(32-c, c)) { break } v.reset(OpARM64EXTRWconst) @@ -26700,9 +26368,8 @@ func rewriteValueARM64_OpARM64ORshiftLL_0(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] y1 := v.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -26737,6 +26404,10 @@ func rewriteValueARM64_OpARM64ORshiftLL_0(v *Value) bool { v0.AddArg(mem) return true } + return false +} +func rewriteValueARM64_OpARM64ORshiftLL_10(v *Value) bool { + b := v.Block // match: (ORshiftLL [8] y0:(MOVDnop x0:(MOVBUloadidx ptr0 idx0 mem)) y1:(MOVDnop x1:(MOVBUload [1] {s} p1:(ADD ptr1 idx1) mem))) // cond: s == nil && x0.Uses == 1 && x1.Uses == 1 && y0.Uses == 1 && y1.Uses == 1 && mergePoint(b,x0,x1) != nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x0) && clobber(x1) && clobber(y0) && clobber(y1) // result: @mergePoint(b,x0,x1) (MOVHUloadidx ptr0 idx0 mem) @@ -26754,10 +26425,9 @@ func rewriteValueARM64_OpARM64ORshiftLL_0(v *Value) bool { if x0.Op != OpARM64MOVBUloadidx { break } - _ = x0.Args[2] + mem := x0.Args[2] ptr0 := x0.Args[0] idx0 := x0.Args[1] - mem := x0.Args[2] y1 := v.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -26775,9 +26445,8 @@ func rewriteValueARM64_OpARM64ORshiftLL_0(v *Value) bool { if p1.Op != OpARM64ADD { break } - _ = p1.Args[1] - ptr1 := p1.Args[0] idx1 := p1.Args[1] + ptr1 := p1.Args[0] if mem != x1.Args[1] { break } @@ -26793,11 +26462,6 @@ func rewriteValueARM64_OpARM64ORshiftLL_0(v *Value) bool { v0.AddArg(mem) return true } - return false -} -func rewriteValueARM64_OpARM64ORshiftLL_10(v *Value) bool { - b := v.Block - _ = b // match: (ORshiftLL [8] y0:(MOVDnop x0:(MOVBUloadidx ptr idx mem)) y1:(MOVDnop x1:(MOVBUloadidx ptr (ADDconst [1] idx) mem))) // cond: x0.Uses == 1 && x1.Uses == 1 && y0.Uses == 1 && y1.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(y0) && clobber(y1) // result: @mergePoint(b,x0,x1) (MOVHUloadidx ptr idx mem) @@ -26815,10 +26479,9 @@ func rewriteValueARM64_OpARM64ORshiftLL_10(v *Value) bool { if x0.Op != OpARM64MOVBUloadidx { break } - _ = x0.Args[2] + mem := x0.Args[2] ptr := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] y1 := v.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -26879,9 +26542,8 @@ func rewriteValueARM64_OpARM64ORshiftLL_10(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] y1 := o0.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -26956,10 +26618,9 @@ func rewriteValueARM64_OpARM64ORshiftLL_10(v *Value) bool { if x0.Op != OpARM64MOVHUloadidx { break } - _ = x0.Args[2] + mem := x0.Args[2] ptr0 := x0.Args[0] idx0 := x0.Args[1] - mem := x0.Args[2] y1 := o0.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -26977,9 +26638,8 @@ func rewriteValueARM64_OpARM64ORshiftLL_10(v *Value) bool { if p1.Op != OpARM64ADD { break } - _ = p1.Args[1] - ptr1 := p1.Args[0] idx1 := p1.Args[1] + ptr1 := p1.Args[0] if mem != x1.Args[1] { break } @@ -27035,10 +26695,9 @@ func rewriteValueARM64_OpARM64ORshiftLL_10(v *Value) bool { if x0.Op != OpARM64MOVHUloadidx { break } - _ = x0.Args[2] + mem := x0.Args[2] ptr := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] y1 := o0.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -27122,10 +26781,9 @@ func rewriteValueARM64_OpARM64ORshiftLL_10(v *Value) bool { if x0.Op != OpARM64MOVHUloadidx2 { break } - _ = x0.Args[2] + mem := x0.Args[2] ptr0 := x0.Args[0] idx0 := x0.Args[1] - mem := x0.Args[2] y1 := o0.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -27146,9 +26804,8 @@ func rewriteValueARM64_OpARM64ORshiftLL_10(v *Value) bool { if p1.AuxInt != 1 { break } - _ = p1.Args[1] - ptr1 := p1.Args[0] idx1 := p1.Args[1] + ptr1 := p1.Args[0] if mem != x1.Args[1] { break } @@ -27225,9 +26882,8 @@ func rewriteValueARM64_OpARM64ORshiftLL_10(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] y1 := o2.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -27356,10 +27012,9 @@ func rewriteValueARM64_OpARM64ORshiftLL_10(v *Value) bool { if x0.Op != OpARM64MOVWUloadidx { break } - _ = x0.Args[2] + mem := x0.Args[2] ptr0 := x0.Args[0] idx0 := x0.Args[1] - mem := x0.Args[2] y1 := o2.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -27377,9 +27032,8 @@ func rewriteValueARM64_OpARM64ORshiftLL_10(v *Value) bool { if p1.Op != OpARM64ADD { break } - _ = p1.Args[1] - ptr1 := p1.Args[0] idx1 := p1.Args[1] + ptr1 := p1.Args[0] if mem != x1.Args[1] { break } @@ -27493,10 +27147,9 @@ func rewriteValueARM64_OpARM64ORshiftLL_10(v *Value) bool { if x0.Op != OpARM64MOVWUloadidx4 { break } - _ = x0.Args[2] + mem := x0.Args[2] ptr0 := x0.Args[0] idx0 := x0.Args[1] - mem := x0.Args[2] y1 := o2.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -27517,9 +27170,8 @@ func rewriteValueARM64_OpARM64ORshiftLL_10(v *Value) bool { if p1.AuxInt != 2 { break } - _ = p1.Args[1] - ptr1 := p1.Args[0] idx1 := p1.Args[1] + ptr1 := p1.Args[0] if mem != x1.Args[1] { break } @@ -27636,10 +27288,9 @@ func rewriteValueARM64_OpARM64ORshiftLL_10(v *Value) bool { if x0.Op != OpARM64MOVWUloadidx { break } - _ = x0.Args[2] + mem := x0.Args[2] ptr := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] y1 := o2.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -27752,6 +27403,10 @@ func rewriteValueARM64_OpARM64ORshiftLL_10(v *Value) bool { v0.AddArg(mem) return true } + return false +} +func rewriteValueARM64_OpARM64ORshiftLL_20(v *Value) bool { + b := v.Block // match: (ORshiftLL [8] y0:(MOVDnop x0:(MOVBUload [i1] {s} p mem)) y1:(MOVDnop x1:(MOVBUload [i0] {s} p mem))) // cond: i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && y0.Uses == 1 && y1.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(y0) && clobber(y1) // result: @mergePoint(b,x0,x1) (REV16W (MOVHUload [i0] {s} p mem)) @@ -27771,9 +27426,8 @@ func rewriteValueARM64_OpARM64ORshiftLL_10(v *Value) bool { } i1 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] y1 := v.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -27808,11 +27462,6 @@ func rewriteValueARM64_OpARM64ORshiftLL_10(v *Value) bool { v0.AddArg(v1) return true } - return false -} -func rewriteValueARM64_OpARM64ORshiftLL_20(v *Value) bool { - b := v.Block - _ = b // match: (ORshiftLL [8] y0:(MOVDnop x0:(MOVBUload [1] {s} p1:(ADD ptr1 idx1) mem)) y1:(MOVDnop x1:(MOVBUloadidx ptr0 idx0 mem))) // cond: s == nil && x0.Uses == 1 && x1.Uses == 1 && y0.Uses == 1 && y1.Uses == 1 && mergePoint(b,x0,x1) != nil && (isSamePtr(ptr0, ptr1) && isSamePtr(idx0, idx1) || isSamePtr(ptr0, idx1) && isSamePtr(idx0, ptr1)) && clobber(x0) && clobber(x1) && clobber(y0) && clobber(y1) // result: @mergePoint(b,x0,x1) (REV16W (MOVHUloadidx ptr0 idx0 mem)) @@ -27834,15 +27483,13 @@ func rewriteValueARM64_OpARM64ORshiftLL_20(v *Value) bool { break } s := x0.Aux - _ = x0.Args[1] + mem := x0.Args[1] p1 := x0.Args[0] if p1.Op != OpARM64ADD { break } - _ = p1.Args[1] - ptr1 := p1.Args[0] idx1 := p1.Args[1] - mem := x0.Args[1] + ptr1 := p1.Args[0] y1 := v.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -27888,7 +27535,7 @@ func rewriteValueARM64_OpARM64ORshiftLL_20(v *Value) bool { if x0.Op != OpARM64MOVBUloadidx { break } - _ = x0.Args[2] + mem := x0.Args[2] ptr := x0.Args[0] x0_1 := x0.Args[1] if x0_1.Op != OpARM64ADDconst { @@ -27898,7 +27545,6 @@ func rewriteValueARM64_OpARM64ORshiftLL_20(v *Value) bool { break } idx := x0_1.Args[0] - mem := x0.Args[2] y1 := v.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -27958,9 +27604,8 @@ func rewriteValueARM64_OpARM64ORshiftLL_20(v *Value) bool { } i2 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] y1 := o0.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -28045,9 +27690,8 @@ func rewriteValueARM64_OpARM64ORshiftLL_20(v *Value) bool { break } s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] y1 := o0.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -28067,9 +27711,8 @@ func rewriteValueARM64_OpARM64ORshiftLL_20(v *Value) bool { if p1.Op != OpARM64ADD { break } - _ = p1.Args[1] - ptr1 := p1.Args[0] idx1 := p1.Args[1] + ptr1 := p1.Args[0] if mem != x1.Args[1] { break } @@ -28126,7 +27769,7 @@ func rewriteValueARM64_OpARM64ORshiftLL_20(v *Value) bool { if x0.Op != OpARM64MOVHUloadidx { break } - _ = x0.Args[2] + mem := x0.Args[2] ptr := x0.Args[0] x0_1 := x0.Args[1] if x0_1.Op != OpARM64ADDconst { @@ -28136,7 +27779,6 @@ func rewriteValueARM64_OpARM64ORshiftLL_20(v *Value) bool { break } idx := x0_1.Args[0] - mem := x0.Args[2] y1 := o0.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -28237,9 +27879,8 @@ func rewriteValueARM64_OpARM64ORshiftLL_20(v *Value) bool { } i4 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] y1 := o2.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -28378,9 +28019,8 @@ func rewriteValueARM64_OpARM64ORshiftLL_20(v *Value) bool { break } s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] y1 := o2.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -28442,9 +28082,8 @@ func rewriteValueARM64_OpARM64ORshiftLL_20(v *Value) bool { if p1.Op != OpARM64ADD { break } - _ = p1.Args[1] - ptr1 := p1.Args[0] idx1 := p1.Args[1] + ptr1 := p1.Args[0] if mem != x3.Args[1] { break } @@ -28517,7 +28156,7 @@ func rewriteValueARM64_OpARM64ORshiftLL_20(v *Value) bool { if x0.Op != OpARM64MOVWUloadidx { break } - _ = x0.Args[2] + mem := x0.Args[2] ptr := x0.Args[0] x0_1 := x0.Args[1] if x0_1.Op != OpARM64ADDconst { @@ -28527,7 +28166,6 @@ func rewriteValueARM64_OpARM64ORshiftLL_20(v *Value) bool { break } idx := x0_1.Args[0] - mem := x0.Args[2] y1 := o2.Args[1] if y1.Op != OpARM64MOVDnop { break @@ -28639,19 +28277,17 @@ func rewriteValueARM64_OpARM64ORshiftLL_20(v *Value) bool { } func rewriteValueARM64_OpARM64ORshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (ORshiftRA (MOVDconst [c]) x [d]) // cond: // result: (ORconst [c] (SRAconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64ORconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64SRAconst, x.Type) @@ -28704,19 +28340,17 @@ func rewriteValueARM64_OpARM64ORshiftRA_0(v *Value) bool { } func rewriteValueARM64_OpARM64ORshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (ORshiftRL (MOVDconst [c]) x [d]) // cond: // result: (ORconst [c] (SRLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64ORconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64SRLconst, x.Type) @@ -28770,7 +28404,7 @@ func rewriteValueARM64_OpARM64ORshiftRL_0(v *Value) bool { // result: (RORconst [ c] x) for { c := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64SLLconst { break @@ -28778,8 +28412,7 @@ func rewriteValueARM64_OpARM64ORshiftRL_0(v *Value) bool { if v_0.AuxInt != 64-c { break } - x := v_0.Args[0] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpARM64RORconst) @@ -28819,7 +28452,7 @@ func rewriteValueARM64_OpARM64ORshiftRL_0(v *Value) bool { } // match: (ORshiftRL [rc] (ANDconst [ac] x) (SLLconst [lc] y)) // cond: lc > rc && ac == ^((1< (NEGSflags (NEG (NGCzerocarry bo))))) + // cond: + // result: (SBCSflags x y bo) + for { + _ = v.Args[2] + x := v.Args[0] + y := v.Args[1] + v_2 := v.Args[2] + if v_2.Op != OpSelect1 { + break + } + if v_2.Type != types.TypeFlags { + break + } + v_2_0 := v_2.Args[0] + if v_2_0.Op != OpARM64NEGSflags { + break + } + v_2_0_0 := v_2_0.Args[0] + if v_2_0_0.Op != OpARM64NEG { + break + } + if v_2_0_0.Type != typ.UInt64 { + break + } + v_2_0_0_0 := v_2_0_0.Args[0] + if v_2_0_0_0.Op != OpARM64NGCzerocarry { + break + } + if v_2_0_0_0.Type != typ.UInt64 { + break + } + bo := v_2_0_0_0.Args[0] + v.reset(OpARM64SBCSflags) + v.AddArg(x) + v.AddArg(y) + v.AddArg(bo) + return true + } + // match: (SBCSflags x y (Select1 (NEGSflags (MOVDconst [0])))) + // cond: + // result: (SUBSflags x y) + for { + _ = v.Args[2] + x := v.Args[0] + y := v.Args[1] + v_2 := v.Args[2] + if v_2.Op != OpSelect1 { + break + } + if v_2.Type != types.TypeFlags { + break + } + v_2_0 := v_2.Args[0] + if v_2_0.Op != OpARM64NEGSflags { + break + } + v_2_0_0 := v_2_0.Args[0] + if v_2_0_0.Op != OpARM64MOVDconst { + break + } + if v_2_0_0.AuxInt != 0 { + break + } + v.reset(OpARM64SUBSflags) + v.AddArg(x) + v.AddArg(y) + return true + } + return false +} func rewriteValueARM64_OpARM64SLL_0(v *Value) bool { // match: (SLL x (MOVDconst [c])) // cond: @@ -28941,7 +28648,7 @@ func rewriteValueARM64_OpARM64SLLconst_0(v *Value) bool { } // match: (SLLconst [sc] (ANDconst [ac] x)) // cond: isARM64BFMask(sc, ac, 0) - // result: (UBFIZ [arm64BFAuxInt(sc, arm64BFWidth(ac, 0))] x) + // result: (UBFIZ [armBFAuxInt(sc, arm64BFWidth(ac, 0))] x) for { sc := v.AuxInt v_0 := v.Args[0] @@ -28954,13 +28661,13 @@ func rewriteValueARM64_OpARM64SLLconst_0(v *Value) bool { break } v.reset(OpARM64UBFIZ) - v.AuxInt = arm64BFAuxInt(sc, arm64BFWidth(ac, 0)) + v.AuxInt = armBFAuxInt(sc, arm64BFWidth(ac, 0)) v.AddArg(x) return true } // match: (SLLconst [sc] (MOVWUreg x)) // cond: isARM64BFMask(sc, 1<<32-1, 0) - // result: (UBFIZ [arm64BFAuxInt(sc, 32)] x) + // result: (UBFIZ [armBFAuxInt(sc, 32)] x) for { sc := v.AuxInt v_0 := v.Args[0] @@ -28972,13 +28679,13 @@ func rewriteValueARM64_OpARM64SLLconst_0(v *Value) bool { break } v.reset(OpARM64UBFIZ) - v.AuxInt = arm64BFAuxInt(sc, 32) + v.AuxInt = armBFAuxInt(sc, 32) v.AddArg(x) return true } // match: (SLLconst [sc] (MOVHUreg x)) // cond: isARM64BFMask(sc, 1<<16-1, 0) - // result: (UBFIZ [arm64BFAuxInt(sc, 16)] x) + // result: (UBFIZ [armBFAuxInt(sc, 16)] x) for { sc := v.AuxInt v_0 := v.Args[0] @@ -28990,13 +28697,13 @@ func rewriteValueARM64_OpARM64SLLconst_0(v *Value) bool { break } v.reset(OpARM64UBFIZ) - v.AuxInt = arm64BFAuxInt(sc, 16) + v.AuxInt = armBFAuxInt(sc, 16) v.AddArg(x) return true } // match: (SLLconst [sc] (MOVBUreg x)) // cond: isARM64BFMask(sc, 1<<8-1, 0) - // result: (UBFIZ [arm64BFAuxInt(sc, 8)] x) + // result: (UBFIZ [armBFAuxInt(sc, 8)] x) for { sc := v.AuxInt v_0 := v.Args[0] @@ -29008,13 +28715,13 @@ func rewriteValueARM64_OpARM64SLLconst_0(v *Value) bool { break } v.reset(OpARM64UBFIZ) - v.AuxInt = arm64BFAuxInt(sc, 8) + v.AuxInt = armBFAuxInt(sc, 8) v.AddArg(x) return true } // match: (SLLconst [sc] (UBFIZ [bfc] x)) // cond: sc+getARM64BFwidth(bfc)+getARM64BFlsb(bfc) < 64 - // result: (UBFIZ [arm64BFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc))] x) + // result: (UBFIZ [armBFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc))] x) for { sc := v.AuxInt v_0 := v.Args[0] @@ -29027,7 +28734,7 @@ func rewriteValueARM64_OpARM64SLLconst_0(v *Value) bool { break } v.reset(OpARM64UBFIZ) - v.AuxInt = arm64BFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc)) + v.AuxInt = armBFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc)) v.AddArg(x) return true } @@ -29069,7 +28776,7 @@ func rewriteValueARM64_OpARM64SRAconst_0(v *Value) bool { } // match: (SRAconst [rc] (SLLconst [lc] x)) // cond: lc > rc - // result: (SBFIZ [arm64BFAuxInt(lc-rc, 64-lc)] x) + // result: (SBFIZ [armBFAuxInt(lc-rc, 64-lc)] x) for { rc := v.AuxInt v_0 := v.Args[0] @@ -29082,13 +28789,13 @@ func rewriteValueARM64_OpARM64SRAconst_0(v *Value) bool { break } v.reset(OpARM64SBFIZ) - v.AuxInt = arm64BFAuxInt(lc-rc, 64-lc) + v.AuxInt = armBFAuxInt(lc-rc, 64-lc) v.AddArg(x) return true } // match: (SRAconst [rc] (SLLconst [lc] x)) // cond: lc <= rc - // result: (SBFX [arm64BFAuxInt(rc-lc, 64-rc)] x) + // result: (SBFX [armBFAuxInt(rc-lc, 64-rc)] x) for { rc := v.AuxInt v_0 := v.Args[0] @@ -29101,13 +28808,13 @@ func rewriteValueARM64_OpARM64SRAconst_0(v *Value) bool { break } v.reset(OpARM64SBFX) - v.AuxInt = arm64BFAuxInt(rc-lc, 64-rc) + v.AuxInt = armBFAuxInt(rc-lc, 64-rc) v.AddArg(x) return true } // match: (SRAconst [rc] (MOVWreg x)) // cond: rc < 32 - // result: (SBFX [arm64BFAuxInt(rc, 32-rc)] x) + // result: (SBFX [armBFAuxInt(rc, 32-rc)] x) for { rc := v.AuxInt v_0 := v.Args[0] @@ -29119,13 +28826,13 @@ func rewriteValueARM64_OpARM64SRAconst_0(v *Value) bool { break } v.reset(OpARM64SBFX) - v.AuxInt = arm64BFAuxInt(rc, 32-rc) + v.AuxInt = armBFAuxInt(rc, 32-rc) v.AddArg(x) return true } // match: (SRAconst [rc] (MOVHreg x)) // cond: rc < 16 - // result: (SBFX [arm64BFAuxInt(rc, 16-rc)] x) + // result: (SBFX [armBFAuxInt(rc, 16-rc)] x) for { rc := v.AuxInt v_0 := v.Args[0] @@ -29137,13 +28844,13 @@ func rewriteValueARM64_OpARM64SRAconst_0(v *Value) bool { break } v.reset(OpARM64SBFX) - v.AuxInt = arm64BFAuxInt(rc, 16-rc) + v.AuxInt = armBFAuxInt(rc, 16-rc) v.AddArg(x) return true } // match: (SRAconst [rc] (MOVBreg x)) // cond: rc < 8 - // result: (SBFX [arm64BFAuxInt(rc, 8-rc)] x) + // result: (SBFX [armBFAuxInt(rc, 8-rc)] x) for { rc := v.AuxInt v_0 := v.Args[0] @@ -29155,13 +28862,13 @@ func rewriteValueARM64_OpARM64SRAconst_0(v *Value) bool { break } v.reset(OpARM64SBFX) - v.AuxInt = arm64BFAuxInt(rc, 8-rc) + v.AuxInt = armBFAuxInt(rc, 8-rc) v.AddArg(x) return true } // match: (SRAconst [sc] (SBFIZ [bfc] x)) // cond: sc < getARM64BFlsb(bfc) - // result: (SBFIZ [arm64BFAuxInt(getARM64BFlsb(bfc)-sc, getARM64BFwidth(bfc))] x) + // result: (SBFIZ [armBFAuxInt(getARM64BFlsb(bfc)-sc, getARM64BFwidth(bfc))] x) for { sc := v.AuxInt v_0 := v.Args[0] @@ -29174,13 +28881,13 @@ func rewriteValueARM64_OpARM64SRAconst_0(v *Value) bool { break } v.reset(OpARM64SBFIZ) - v.AuxInt = arm64BFAuxInt(getARM64BFlsb(bfc)-sc, getARM64BFwidth(bfc)) + v.AuxInt = armBFAuxInt(getARM64BFlsb(bfc)-sc, getARM64BFwidth(bfc)) v.AddArg(x) return true } // match: (SRAconst [sc] (SBFIZ [bfc] x)) // cond: sc >= getARM64BFlsb(bfc) && sc < getARM64BFlsb(bfc)+getARM64BFwidth(bfc) - // result: (SBFX [arm64BFAuxInt(sc-getARM64BFlsb(bfc), getARM64BFlsb(bfc)+getARM64BFwidth(bfc)-sc)] x) + // result: (SBFX [armBFAuxInt(sc-getARM64BFlsb(bfc), getARM64BFlsb(bfc)+getARM64BFwidth(bfc)-sc)] x) for { sc := v.AuxInt v_0 := v.Args[0] @@ -29193,7 +28900,7 @@ func rewriteValueARM64_OpARM64SRAconst_0(v *Value) bool { break } v.reset(OpARM64SBFX) - v.AuxInt = arm64BFAuxInt(sc-getARM64BFlsb(bfc), getARM64BFlsb(bfc)+getARM64BFwidth(bfc)-sc) + v.AuxInt = armBFAuxInt(sc-getARM64BFlsb(bfc), getARM64BFlsb(bfc)+getARM64BFwidth(bfc)-sc) v.AddArg(x) return true } @@ -29256,7 +28963,7 @@ func rewriteValueARM64_OpARM64SRLconst_0(v *Value) bool { } // match: (SRLconst [rc] (SLLconst [lc] x)) // cond: lc > rc - // result: (UBFIZ [arm64BFAuxInt(lc-rc, 64-lc)] x) + // result: (UBFIZ [armBFAuxInt(lc-rc, 64-lc)] x) for { rc := v.AuxInt v_0 := v.Args[0] @@ -29269,13 +28976,13 @@ func rewriteValueARM64_OpARM64SRLconst_0(v *Value) bool { break } v.reset(OpARM64UBFIZ) - v.AuxInt = arm64BFAuxInt(lc-rc, 64-lc) + v.AuxInt = armBFAuxInt(lc-rc, 64-lc) v.AddArg(x) return true } // match: (SRLconst [sc] (ANDconst [ac] x)) // cond: isARM64BFMask(sc, ac, sc) - // result: (UBFX [arm64BFAuxInt(sc, arm64BFWidth(ac, sc))] x) + // result: (UBFX [armBFAuxInt(sc, arm64BFWidth(ac, sc))] x) for { sc := v.AuxInt v_0 := v.Args[0] @@ -29288,13 +28995,13 @@ func rewriteValueARM64_OpARM64SRLconst_0(v *Value) bool { break } v.reset(OpARM64UBFX) - v.AuxInt = arm64BFAuxInt(sc, arm64BFWidth(ac, sc)) + v.AuxInt = armBFAuxInt(sc, arm64BFWidth(ac, sc)) v.AddArg(x) return true } // match: (SRLconst [sc] (MOVWUreg x)) // cond: isARM64BFMask(sc, 1<<32-1, sc) - // result: (UBFX [arm64BFAuxInt(sc, arm64BFWidth(1<<32-1, sc))] x) + // result: (UBFX [armBFAuxInt(sc, arm64BFWidth(1<<32-1, sc))] x) for { sc := v.AuxInt v_0 := v.Args[0] @@ -29306,13 +29013,13 @@ func rewriteValueARM64_OpARM64SRLconst_0(v *Value) bool { break } v.reset(OpARM64UBFX) - v.AuxInt = arm64BFAuxInt(sc, arm64BFWidth(1<<32-1, sc)) + v.AuxInt = armBFAuxInt(sc, arm64BFWidth(1<<32-1, sc)) v.AddArg(x) return true } // match: (SRLconst [sc] (MOVHUreg x)) // cond: isARM64BFMask(sc, 1<<16-1, sc) - // result: (UBFX [arm64BFAuxInt(sc, arm64BFWidth(1<<16-1, sc))] x) + // result: (UBFX [armBFAuxInt(sc, arm64BFWidth(1<<16-1, sc))] x) for { sc := v.AuxInt v_0 := v.Args[0] @@ -29324,13 +29031,13 @@ func rewriteValueARM64_OpARM64SRLconst_0(v *Value) bool { break } v.reset(OpARM64UBFX) - v.AuxInt = arm64BFAuxInt(sc, arm64BFWidth(1<<16-1, sc)) + v.AuxInt = armBFAuxInt(sc, arm64BFWidth(1<<16-1, sc)) v.AddArg(x) return true } // match: (SRLconst [sc] (MOVBUreg x)) // cond: isARM64BFMask(sc, 1<<8-1, sc) - // result: (UBFX [arm64BFAuxInt(sc, arm64BFWidth(1<<8-1, sc))] x) + // result: (UBFX [armBFAuxInt(sc, arm64BFWidth(1<<8-1, sc))] x) for { sc := v.AuxInt v_0 := v.Args[0] @@ -29342,13 +29049,13 @@ func rewriteValueARM64_OpARM64SRLconst_0(v *Value) bool { break } v.reset(OpARM64UBFX) - v.AuxInt = arm64BFAuxInt(sc, arm64BFWidth(1<<8-1, sc)) + v.AuxInt = armBFAuxInt(sc, arm64BFWidth(1<<8-1, sc)) v.AddArg(x) return true } // match: (SRLconst [rc] (SLLconst [lc] x)) // cond: lc < rc - // result: (UBFX [arm64BFAuxInt(rc-lc, 64-rc)] x) + // result: (UBFX [armBFAuxInt(rc-lc, 64-rc)] x) for { rc := v.AuxInt v_0 := v.Args[0] @@ -29361,13 +29068,13 @@ func rewriteValueARM64_OpARM64SRLconst_0(v *Value) bool { break } v.reset(OpARM64UBFX) - v.AuxInt = arm64BFAuxInt(rc-lc, 64-rc) + v.AuxInt = armBFAuxInt(rc-lc, 64-rc) v.AddArg(x) return true } // match: (SRLconst [sc] (UBFX [bfc] x)) // cond: sc < getARM64BFwidth(bfc) - // result: (UBFX [arm64BFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc)-sc)] x) + // result: (UBFX [armBFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc)-sc)] x) for { sc := v.AuxInt v_0 := v.Args[0] @@ -29380,7 +29087,7 @@ func rewriteValueARM64_OpARM64SRLconst_0(v *Value) bool { break } v.reset(OpARM64UBFX) - v.AuxInt = arm64BFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc)-sc) + v.AuxInt = armBFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc)-sc) v.AddArg(x) return true } @@ -29408,7 +29115,7 @@ func rewriteValueARM64_OpARM64SRLconst_0(v *Value) bool { func rewriteValueARM64_OpARM64SRLconst_10(v *Value) bool { // match: (SRLconst [sc] (UBFIZ [bfc] x)) // cond: sc < getARM64BFlsb(bfc) - // result: (UBFIZ [arm64BFAuxInt(getARM64BFlsb(bfc)-sc, getARM64BFwidth(bfc))] x) + // result: (UBFIZ [armBFAuxInt(getARM64BFlsb(bfc)-sc, getARM64BFwidth(bfc))] x) for { sc := v.AuxInt v_0 := v.Args[0] @@ -29421,13 +29128,13 @@ func rewriteValueARM64_OpARM64SRLconst_10(v *Value) bool { break } v.reset(OpARM64UBFIZ) - v.AuxInt = arm64BFAuxInt(getARM64BFlsb(bfc)-sc, getARM64BFwidth(bfc)) + v.AuxInt = armBFAuxInt(getARM64BFlsb(bfc)-sc, getARM64BFwidth(bfc)) v.AddArg(x) return true } // match: (SRLconst [sc] (UBFIZ [bfc] x)) // cond: sc > getARM64BFlsb(bfc) && sc < getARM64BFlsb(bfc)+getARM64BFwidth(bfc) - // result: (UBFX [arm64BFAuxInt(sc-getARM64BFlsb(bfc), getARM64BFlsb(bfc)+getARM64BFwidth(bfc)-sc)] x) + // result: (UBFX [armBFAuxInt(sc-getARM64BFlsb(bfc), getARM64BFlsb(bfc)+getARM64BFwidth(bfc)-sc)] x) for { sc := v.AuxInt v_0 := v.Args[0] @@ -29440,7 +29147,7 @@ func rewriteValueARM64_OpARM64SRLconst_10(v *Value) bool { break } v.reset(OpARM64UBFX) - v.AuxInt = arm64BFAuxInt(sc-getARM64BFlsb(bfc), getARM64BFlsb(bfc)+getARM64BFwidth(bfc)-sc) + v.AuxInt = armBFAuxInt(sc-getARM64BFlsb(bfc), getARM64BFlsb(bfc)+getARM64BFwidth(bfc)-sc) v.AddArg(x) return true } @@ -29448,16 +29155,14 @@ func rewriteValueARM64_OpARM64SRLconst_10(v *Value) bool { } func rewriteValueARM64_OpARM64STP_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (STP [off1] {sym} (ADDconst [off2] ptr) val1 val2 mem) // cond: is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared) // result: (STP [off1+off2] {sym} ptr val1 val2 mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARM64ADDconst { break @@ -29466,7 +29171,6 @@ func rewriteValueARM64_OpARM64STP_0(v *Value) bool { ptr := v_0.Args[0] val1 := v.Args[1] val2 := v.Args[2] - mem := v.Args[3] if !(is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -29485,7 +29189,7 @@ func rewriteValueARM64_OpARM64STP_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDaddr { break @@ -29495,7 +29199,6 @@ func rewriteValueARM64_OpARM64STP_0(v *Value) bool { ptr := v_0.Args[0] val1 := v.Args[1] val2 := v.Args[2] - mem := v.Args[3] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_shared)) { break } @@ -29514,7 +29217,7 @@ func rewriteValueARM64_OpARM64STP_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpARM64MOVDconst { @@ -29530,7 +29233,6 @@ func rewriteValueARM64_OpARM64STP_0(v *Value) bool { if v_2.AuxInt != 0 { break } - mem := v.Args[3] v.reset(OpARM64MOVQstorezero) v.AuxInt = off v.Aux = sym @@ -29542,7 +29244,6 @@ func rewriteValueARM64_OpARM64STP_0(v *Value) bool { } func rewriteValueARM64_OpARM64SUB_0(v *Value) bool { b := v.Block - _ = b // match: (SUB x (MOVDconst [c])) // cond: // result: (SUBconst [c] x) @@ -29569,9 +29270,8 @@ func rewriteValueARM64_OpARM64SUB_0(v *Value) bool { if l.Op != OpARM64MUL { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1 && clobber(l)) { break } @@ -29591,9 +29291,8 @@ func rewriteValueARM64_OpARM64SUB_0(v *Value) bool { if l.Op != OpARM64MNEG { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(l.Uses == 1 && clobber(l)) { break } @@ -29613,9 +29312,8 @@ func rewriteValueARM64_OpARM64SUB_0(v *Value) bool { if l.Op != OpARM64MULW { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(a.Type.Size() != 8 && l.Uses == 1 && clobber(l)) { break } @@ -29635,9 +29333,8 @@ func rewriteValueARM64_OpARM64SUB_0(v *Value) bool { if l.Op != OpARM64MNEGW { break } - _ = l.Args[1] - x := l.Args[0] y := l.Args[1] + x := l.Args[0] if !(a.Type.Size() != 8 && l.Uses == 1 && clobber(l)) { break } @@ -29651,9 +29348,8 @@ func rewriteValueARM64_OpARM64SUB_0(v *Value) bool { // cond: // result: (MOVDconst [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpARM64MOVDconst) @@ -29670,9 +29366,8 @@ func rewriteValueARM64_OpARM64SUB_0(v *Value) bool { if v_1.Op != OpARM64SUB { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpARM64SUB) v0 := b.NewValue0(v.Pos, OpARM64ADD, v.Type) v0.AddArg(x) @@ -29685,15 +29380,13 @@ func rewriteValueARM64_OpARM64SUB_0(v *Value) bool { // cond: // result: (SUB x (ADD y z)) for { - _ = v.Args[1] + z := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64SUB { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - z := v.Args[1] + x := v_0.Args[0] v.reset(OpARM64SUB) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpARM64ADD, y.Type) @@ -29979,13 +29672,12 @@ func rewriteValueARM64_OpARM64TST_0(v *Value) bool { // cond: // result: (TSTconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64TSTconst) v.AuxInt = c v.AddArg(x) @@ -30016,14 +29708,13 @@ func rewriteValueARM64_OpARM64TST_0(v *Value) bool { // cond: clobberIfDead(x1) // result: (TSTshiftLL x0 y [c]) for { - _ = v.Args[1] + x0 := v.Args[1] x1 := v.Args[0] if x1.Op != OpARM64SLLconst { break } c := x1.AuxInt y := x1.Args[0] - x0 := v.Args[1] if !(clobberIfDead(x1)) { break } @@ -30058,14 +29749,13 @@ func rewriteValueARM64_OpARM64TST_0(v *Value) bool { // cond: clobberIfDead(x1) // result: (TSTshiftRL x0 y [c]) for { - _ = v.Args[1] + x0 := v.Args[1] x1 := v.Args[0] if x1.Op != OpARM64SRLconst { break } c := x1.AuxInt y := x1.Args[0] - x0 := v.Args[1] if !(clobberIfDead(x1)) { break } @@ -30100,14 +29790,13 @@ func rewriteValueARM64_OpARM64TST_0(v *Value) bool { // cond: clobberIfDead(x1) // result: (TSTshiftRA x0 y [c]) for { - _ = v.Args[1] + x0 := v.Args[1] x1 := v.Args[0] if x1.Op != OpARM64SRAconst { break } c := x1.AuxInt y := x1.Args[0] - x0 := v.Args[1] if !(clobberIfDead(x1)) { break } @@ -30140,13 +29829,12 @@ func rewriteValueARM64_OpARM64TSTW_0(v *Value) bool { // cond: // result: (TSTWconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64TSTWconst) v.AuxInt = c v.AddArg(x) @@ -30258,19 +29946,17 @@ func rewriteValueARM64_OpARM64TSTconst_0(v *Value) bool { } func rewriteValueARM64_OpARM64TSTshiftLL_0(v *Value) bool { b := v.Block - _ = b // match: (TSTshiftLL (MOVDconst [c]) x [d]) // cond: // result: (TSTconst [c] (SLLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64TSTconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64SLLconst, x.Type) @@ -30300,19 +29986,17 @@ func rewriteValueARM64_OpARM64TSTshiftLL_0(v *Value) bool { } func rewriteValueARM64_OpARM64TSTshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (TSTshiftRA (MOVDconst [c]) x [d]) // cond: // result: (TSTconst [c] (SRAconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64TSTconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64SRAconst, x.Type) @@ -30342,19 +30026,17 @@ func rewriteValueARM64_OpARM64TSTshiftRA_0(v *Value) bool { } func rewriteValueARM64_OpARM64TSTshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (TSTshiftRL (MOVDconst [c]) x [d]) // cond: // result: (TSTconst [c] (SRLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64TSTconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64SRLconst, x.Type) @@ -30385,7 +30067,7 @@ func rewriteValueARM64_OpARM64TSTshiftRL_0(v *Value) bool { func rewriteValueARM64_OpARM64UBFIZ_0(v *Value) bool { // match: (UBFIZ [bfc] (SLLconst [sc] x)) // cond: sc < getARM64BFwidth(bfc) - // result: (UBFIZ [arm64BFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc)-sc)] x) + // result: (UBFIZ [armBFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc)-sc)] x) for { bfc := v.AuxInt v_0 := v.Args[0] @@ -30398,7 +30080,7 @@ func rewriteValueARM64_OpARM64UBFIZ_0(v *Value) bool { break } v.reset(OpARM64UBFIZ) - v.AuxInt = arm64BFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc)-sc) + v.AuxInt = armBFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc)-sc) v.AddArg(x) return true } @@ -30407,7 +30089,7 @@ func rewriteValueARM64_OpARM64UBFIZ_0(v *Value) bool { func rewriteValueARM64_OpARM64UBFX_0(v *Value) bool { // match: (UBFX [bfc] (SRLconst [sc] x)) // cond: sc+getARM64BFwidth(bfc)+getARM64BFlsb(bfc) < 64 - // result: (UBFX [arm64BFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc))] x) + // result: (UBFX [armBFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc))] x) for { bfc := v.AuxInt v_0 := v.Args[0] @@ -30420,7 +30102,7 @@ func rewriteValueARM64_OpARM64UBFX_0(v *Value) bool { break } v.reset(OpARM64UBFX) - v.AuxInt = arm64BFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc)) + v.AuxInt = armBFAuxInt(getARM64BFlsb(bfc)+sc, getARM64BFwidth(bfc)) v.AddArg(x) return true } @@ -30445,7 +30127,7 @@ func rewriteValueARM64_OpARM64UBFX_0(v *Value) bool { } // match: (UBFX [bfc] (SLLconst [sc] x)) // cond: sc < getARM64BFlsb(bfc) - // result: (UBFX [arm64BFAuxInt(getARM64BFlsb(bfc)-sc, getARM64BFwidth(bfc))] x) + // result: (UBFX [armBFAuxInt(getARM64BFlsb(bfc)-sc, getARM64BFwidth(bfc))] x) for { bfc := v.AuxInt v_0 := v.Args[0] @@ -30458,13 +30140,13 @@ func rewriteValueARM64_OpARM64UBFX_0(v *Value) bool { break } v.reset(OpARM64UBFX) - v.AuxInt = arm64BFAuxInt(getARM64BFlsb(bfc)-sc, getARM64BFwidth(bfc)) + v.AuxInt = armBFAuxInt(getARM64BFlsb(bfc)-sc, getARM64BFwidth(bfc)) v.AddArg(x) return true } // match: (UBFX [bfc] (SLLconst [sc] x)) // cond: sc > getARM64BFlsb(bfc) && sc < getARM64BFlsb(bfc)+getARM64BFwidth(bfc) - // result: (UBFIZ [arm64BFAuxInt(sc-getARM64BFlsb(bfc), getARM64BFlsb(bfc)+getARM64BFwidth(bfc)-sc)] x) + // result: (UBFIZ [armBFAuxInt(sc-getARM64BFlsb(bfc), getARM64BFlsb(bfc)+getARM64BFwidth(bfc)-sc)] x) for { bfc := v.AuxInt v_0 := v.Args[0] @@ -30477,7 +30159,7 @@ func rewriteValueARM64_OpARM64UBFX_0(v *Value) bool { break } v.reset(OpARM64UBFIZ) - v.AuxInt = arm64BFAuxInt(sc-getARM64BFlsb(bfc), getARM64BFlsb(bfc)+getARM64BFwidth(bfc)-sc) + v.AuxInt = armBFAuxInt(sc-getARM64BFlsb(bfc), getARM64BFlsb(bfc)+getARM64BFwidth(bfc)-sc) v.AddArg(x) return true } @@ -30603,6 +30285,27 @@ func rewriteValueARM64_OpARM64UDIVW_0(v *Value) bool { return false } func rewriteValueARM64_OpARM64UMOD_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (UMOD x y) + // cond: + // result: (MSUB x y (UDIV x y)) + for { + if v.Type != typ.UInt64 { + break + } + y := v.Args[1] + x := v.Args[0] + v.reset(OpARM64MSUB) + v.Type = typ.UInt64 + v.AddArg(x) + v.AddArg(y) + v0 := b.NewValue0(v.Pos, OpARM64UDIV, typ.UInt64) + v0.AddArg(x) + v0.AddArg(y) + v.AddArg(v0) + return true + } // match: (UMOD _ (MOVDconst [1])) // cond: // result: (MOVDconst [0]) @@ -30660,6 +30363,27 @@ func rewriteValueARM64_OpARM64UMOD_0(v *Value) bool { return false } func rewriteValueARM64_OpARM64UMODW_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (UMODW x y) + // cond: + // result: (MSUBW x y (UDIVW x y)) + for { + if v.Type != typ.UInt32 { + break + } + y := v.Args[1] + x := v.Args[0] + v.reset(OpARM64MSUBW) + v.Type = typ.UInt32 + v.AddArg(x) + v.AddArg(y) + v0 := b.NewValue0(v.Pos, OpARM64UDIVW, typ.UInt32) + v0.AddArg(x) + v0.AddArg(y) + v.AddArg(v0) + return true + } // match: (UMODW _ (MOVDconst [c])) // cond: uint32(c)==1 // result: (MOVDconst [0]) @@ -30738,13 +30462,12 @@ func rewriteValueARM64_OpARM64XOR_0(v *Value) bool { // cond: // result: (XORconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64XORconst) v.AuxInt = c v.AddArg(x) @@ -30754,9 +30477,8 @@ func rewriteValueARM64_OpARM64XOR_0(v *Value) bool { // cond: // result: (MOVDconst [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpARM64MOVDconst) @@ -30783,13 +30505,12 @@ func rewriteValueARM64_OpARM64XOR_0(v *Value) bool { // cond: // result: (EON x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MVN { break } y := v_0.Args[0] - x := v.Args[1] v.reset(OpARM64EON) v.AddArg(x) v.AddArg(y) @@ -30820,14 +30541,13 @@ func rewriteValueARM64_OpARM64XOR_0(v *Value) bool { // cond: clobberIfDead(x1) // result: (XORshiftLL x0 y [c]) for { - _ = v.Args[1] + x0 := v.Args[1] x1 := v.Args[0] if x1.Op != OpARM64SLLconst { break } c := x1.AuxInt y := x1.Args[0] - x0 := v.Args[1] if !(clobberIfDead(x1)) { break } @@ -30862,14 +30582,13 @@ func rewriteValueARM64_OpARM64XOR_0(v *Value) bool { // cond: clobberIfDead(x1) // result: (XORshiftRL x0 y [c]) for { - _ = v.Args[1] + x0 := v.Args[1] x1 := v.Args[0] if x1.Op != OpARM64SRLconst { break } c := x1.AuxInt y := x1.Args[0] - x0 := v.Args[1] if !(clobberIfDead(x1)) { break } @@ -30904,21 +30623,18 @@ func rewriteValueARM64_OpARM64XOR_0(v *Value) bool { } func rewriteValueARM64_OpARM64XOR_10(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (XOR x1:(SRAconst [c] y) x0) // cond: clobberIfDead(x1) // result: (XORshiftRA x0 y [c]) for { - _ = v.Args[1] + x0 := v.Args[1] x1 := v.Args[0] if x1.Op != OpARM64SRAconst { break } c := x1.AuxInt y := x1.Args[0] - x0 := v.Args[1] if !(clobberIfDead(x1)) { break } @@ -31902,19 +31618,18 @@ func rewriteValueARM64_OpARM64XORconst_0(v *Value) bool { } func rewriteValueARM64_OpARM64XORshiftLL_0(v *Value) bool { b := v.Block - _ = b + typ := &b.Func.Config.Types // match: (XORshiftLL (MOVDconst [c]) x [d]) // cond: // result: (XORconst [c] (SLLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64XORconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64SLLconst, x.Type) @@ -31967,7 +31682,7 @@ func rewriteValueARM64_OpARM64XORshiftLL_0(v *Value) bool { // result: (RORconst [64-c] x) for { c := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64SRLconst { break @@ -31975,8 +31690,7 @@ func rewriteValueARM64_OpARM64XORshiftLL_0(v *Value) bool { if v_0.AuxInt != 64-c { break } - x := v_0.Args[0] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpARM64RORconst) @@ -31985,22 +31699,21 @@ func rewriteValueARM64_OpARM64XORshiftLL_0(v *Value) bool { return true } // match: (XORshiftLL [c] (UBFX [bfc] x) x) - // cond: c < 32 && t.Size() == 4 && bfc == arm64BFAuxInt(32-c, c) + // cond: c < 32 && t.Size() == 4 && bfc == armBFAuxInt(32-c, c) // result: (RORWconst [32-c] x) for { t := v.Type c := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64UBFX { break } bfc := v_0.AuxInt - x := v_0.Args[0] - if x != v.Args[1] { + if x != v_0.Args[0] { break } - if !(c < 32 && t.Size() == 4 && bfc == arm64BFAuxInt(32-c, c)) { + if !(c < 32 && t.Size() == 4 && bfc == armBFAuxInt(32-c, c)) { break } v.reset(OpARM64RORWconst) @@ -32008,12 +31721,40 @@ func rewriteValueARM64_OpARM64XORshiftLL_0(v *Value) bool { v.AddArg(x) return true } + // match: (XORshiftLL [8] (UBFX [armBFAuxInt(8, 8)] x) x) + // cond: + // result: (REV16W x) + for { + if v.Type != typ.UInt16 { + break + } + if v.AuxInt != 8 { + break + } + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpARM64UBFX { + break + } + if v_0.Type != typ.UInt16 { + break + } + if v_0.AuxInt != armBFAuxInt(8, 8) { + break + } + if x != v_0.Args[0] { + break + } + v.reset(OpARM64REV16W) + v.AddArg(x) + return true + } // match: (XORshiftLL [c] (SRLconst x [64-c]) x2) // cond: // result: (EXTRconst [64-c] x2 x) for { c := v.AuxInt - _ = v.Args[1] + x2 := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64SRLconst { break @@ -32022,7 +31763,6 @@ func rewriteValueARM64_OpARM64XORshiftLL_0(v *Value) bool { break } x := v_0.Args[0] - x2 := v.Args[1] v.reset(OpARM64EXTRconst) v.AuxInt = 64 - c v.AddArg(x2) @@ -32030,20 +31770,19 @@ func rewriteValueARM64_OpARM64XORshiftLL_0(v *Value) bool { return true } // match: (XORshiftLL [c] (UBFX [bfc] x) x2) - // cond: c < 32 && t.Size() == 4 && bfc == arm64BFAuxInt(32-c, c) + // cond: c < 32 && t.Size() == 4 && bfc == armBFAuxInt(32-c, c) // result: (EXTRWconst [32-c] x2 x) for { t := v.Type c := v.AuxInt - _ = v.Args[1] + x2 := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64UBFX { break } bfc := v_0.AuxInt x := v_0.Args[0] - x2 := v.Args[1] - if !(c < 32 && t.Size() == 4 && bfc == arm64BFAuxInt(32-c, c)) { + if !(c < 32 && t.Size() == 4 && bfc == armBFAuxInt(32-c, c)) { break } v.reset(OpARM64EXTRWconst) @@ -32056,19 +31795,17 @@ func rewriteValueARM64_OpARM64XORshiftLL_0(v *Value) bool { } func rewriteValueARM64_OpARM64XORshiftRA_0(v *Value) bool { b := v.Block - _ = b // match: (XORshiftRA (MOVDconst [c]) x [d]) // cond: // result: (XORconst [c] (SRAconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64XORconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64SRAconst, x.Type) @@ -32120,19 +31857,17 @@ func rewriteValueARM64_OpARM64XORshiftRA_0(v *Value) bool { } func rewriteValueARM64_OpARM64XORshiftRL_0(v *Value) bool { b := v.Block - _ = b // match: (XORshiftRL (MOVDconst [c]) x [d]) // cond: // result: (XORconst [c] (SRLconst x [d])) for { d := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpARM64XORconst) v.AuxInt = c v0 := b.NewValue0(v.Pos, OpARM64SRLconst, x.Type) @@ -32185,7 +31920,7 @@ func rewriteValueARM64_OpARM64XORshiftRL_0(v *Value) bool { // result: (RORconst [ c] x) for { c := v.AuxInt - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpARM64SLLconst { break @@ -32193,8 +31928,7 @@ func rewriteValueARM64_OpARM64XORshiftRL_0(v *Value) bool { if v_0.AuxInt != 64-c { break } - x := v_0.Args[0] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpARM64RORconst) @@ -32250,9 +31984,8 @@ func rewriteValueARM64_OpAdd16_0(v *Value) bool { // cond: // result: (ADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64ADD) v.AddArg(x) v.AddArg(y) @@ -32264,9 +31997,8 @@ func rewriteValueARM64_OpAdd32_0(v *Value) bool { // cond: // result: (ADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64ADD) v.AddArg(x) v.AddArg(y) @@ -32278,9 +32010,8 @@ func rewriteValueARM64_OpAdd32F_0(v *Value) bool { // cond: // result: (FADDS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64FADDS) v.AddArg(x) v.AddArg(y) @@ -32292,9 +32023,8 @@ func rewriteValueARM64_OpAdd64_0(v *Value) bool { // cond: // result: (ADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64ADD) v.AddArg(x) v.AddArg(y) @@ -32306,9 +32036,8 @@ func rewriteValueARM64_OpAdd64F_0(v *Value) bool { // cond: // result: (FADDD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64FADDD) v.AddArg(x) v.AddArg(y) @@ -32320,9 +32049,8 @@ func rewriteValueARM64_OpAdd8_0(v *Value) bool { // cond: // result: (ADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64ADD) v.AddArg(x) v.AddArg(y) @@ -32334,9 +32062,8 @@ func rewriteValueARM64_OpAddPtr_0(v *Value) bool { // cond: // result: (ADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64ADD) v.AddArg(x) v.AddArg(y) @@ -32361,9 +32088,8 @@ func rewriteValueARM64_OpAnd16_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64AND) v.AddArg(x) v.AddArg(y) @@ -32375,9 +32101,8 @@ func rewriteValueARM64_OpAnd32_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64AND) v.AddArg(x) v.AddArg(y) @@ -32389,9 +32114,8 @@ func rewriteValueARM64_OpAnd64_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64AND) v.AddArg(x) v.AddArg(y) @@ -32403,9 +32127,8 @@ func rewriteValueARM64_OpAnd8_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64AND) v.AddArg(x) v.AddArg(y) @@ -32417,9 +32140,8 @@ func rewriteValueARM64_OpAndB_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64AND) v.AddArg(x) v.AddArg(y) @@ -32431,10 +32153,9 @@ func rewriteValueARM64_OpAtomicAdd32_0(v *Value) bool { // cond: // result: (LoweredAtomicAdd32 ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpARM64LoweredAtomicAdd32) v.AddArg(ptr) v.AddArg(val) @@ -32447,10 +32168,9 @@ func rewriteValueARM64_OpAtomicAdd32Variant_0(v *Value) bool { // cond: // result: (LoweredAtomicAdd32Variant ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpARM64LoweredAtomicAdd32Variant) v.AddArg(ptr) v.AddArg(val) @@ -32463,10 +32183,9 @@ func rewriteValueARM64_OpAtomicAdd64_0(v *Value) bool { // cond: // result: (LoweredAtomicAdd64 ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpARM64LoweredAtomicAdd64) v.AddArg(ptr) v.AddArg(val) @@ -32479,10 +32198,9 @@ func rewriteValueARM64_OpAtomicAdd64Variant_0(v *Value) bool { // cond: // result: (LoweredAtomicAdd64Variant ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpARM64LoweredAtomicAdd64Variant) v.AddArg(ptr) v.AddArg(val) @@ -32492,17 +32210,14 @@ func rewriteValueARM64_OpAtomicAdd64Variant_0(v *Value) bool { } func rewriteValueARM64_OpAtomicAnd8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (AtomicAnd8 ptr val mem) // cond: // result: (Select1 (LoweredAtomicAnd8 ptr val mem)) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpARM64LoweredAtomicAnd8, types.NewTuple(typ.UInt8, types.TypeMem)) v0.AddArg(ptr) @@ -32517,11 +32232,10 @@ func rewriteValueARM64_OpAtomicCompareAndSwap32_0(v *Value) bool { // cond: // result: (LoweredAtomicCas32 ptr old new_ mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] old := v.Args[1] new_ := v.Args[2] - mem := v.Args[3] v.reset(OpARM64LoweredAtomicCas32) v.AddArg(ptr) v.AddArg(old) @@ -32535,11 +32249,10 @@ func rewriteValueARM64_OpAtomicCompareAndSwap64_0(v *Value) bool { // cond: // result: (LoweredAtomicCas64 ptr old new_ mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] old := v.Args[1] new_ := v.Args[2] - mem := v.Args[3] v.reset(OpARM64LoweredAtomicCas64) v.AddArg(ptr) v.AddArg(old) @@ -32553,10 +32266,9 @@ func rewriteValueARM64_OpAtomicExchange32_0(v *Value) bool { // cond: // result: (LoweredAtomicExchange32 ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpARM64LoweredAtomicExchange32) v.AddArg(ptr) v.AddArg(val) @@ -32569,10 +32281,9 @@ func rewriteValueARM64_OpAtomicExchange64_0(v *Value) bool { // cond: // result: (LoweredAtomicExchange64 ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpARM64LoweredAtomicExchange64) v.AddArg(ptr) v.AddArg(val) @@ -32585,9 +32296,8 @@ func rewriteValueARM64_OpAtomicLoad32_0(v *Value) bool { // cond: // result: (LDARW ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64LDARW) v.AddArg(ptr) v.AddArg(mem) @@ -32599,23 +32309,34 @@ func rewriteValueARM64_OpAtomicLoad64_0(v *Value) bool { // cond: // result: (LDAR ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64LDAR) v.AddArg(ptr) v.AddArg(mem) return true } } +func rewriteValueARM64_OpAtomicLoad8_0(v *Value) bool { + // match: (AtomicLoad8 ptr mem) + // cond: + // result: (LDARB ptr mem) + for { + mem := v.Args[1] + ptr := v.Args[0] + v.reset(OpARM64LDARB) + v.AddArg(ptr) + v.AddArg(mem) + return true + } +} func rewriteValueARM64_OpAtomicLoadPtr_0(v *Value) bool { // match: (AtomicLoadPtr ptr mem) // cond: // result: (LDAR ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64LDAR) v.AddArg(ptr) v.AddArg(mem) @@ -32624,17 +32345,14 @@ func rewriteValueARM64_OpAtomicLoadPtr_0(v *Value) bool { } func rewriteValueARM64_OpAtomicOr8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (AtomicOr8 ptr val mem) // cond: // result: (Select1 (LoweredAtomicOr8 ptr val mem)) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpARM64LoweredAtomicOr8, types.NewTuple(typ.UInt8, types.TypeMem)) v0.AddArg(ptr) @@ -32649,10 +32367,9 @@ func rewriteValueARM64_OpAtomicStore32_0(v *Value) bool { // cond: // result: (STLRW ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpARM64STLRW) v.AddArg(ptr) v.AddArg(val) @@ -32665,10 +32382,9 @@ func rewriteValueARM64_OpAtomicStore64_0(v *Value) bool { // cond: // result: (STLR ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpARM64STLR) v.AddArg(ptr) v.AddArg(val) @@ -32681,10 +32397,9 @@ func rewriteValueARM64_OpAtomicStorePtrNoWB_0(v *Value) bool { // cond: // result: (STLR ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpARM64STLR) v.AddArg(ptr) v.AddArg(val) @@ -32694,15 +32409,13 @@ func rewriteValueARM64_OpAtomicStorePtrNoWB_0(v *Value) bool { } func rewriteValueARM64_OpAvg64u_0(v *Value) bool { b := v.Block - _ = b // match: (Avg64u x y) // cond: // result: (ADD (SRLconst (SUB x y) [1]) y) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64ADD) v0 := b.NewValue0(v.Pos, OpARM64SRLconst, t) v0.AuxInt = 1 @@ -32715,11 +32428,27 @@ func rewriteValueARM64_OpAvg64u_0(v *Value) bool { return true } } +func rewriteValueARM64_OpBitLen32_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (BitLen32 x) + // cond: + // result: (SUB (MOVDconst [32]) (CLZW x)) + for { + x := v.Args[0] + v.reset(OpARM64SUB) + v0 := b.NewValue0(v.Pos, OpARM64MOVDconst, typ.UInt64) + v0.AuxInt = 32 + v.AddArg(v0) + v1 := b.NewValue0(v.Pos, OpARM64CLZW, typ.Int) + v1.AddArg(x) + v.AddArg(v1) + return true + } +} func rewriteValueARM64_OpBitLen64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (BitLen64 x) // cond: // result: (SUB (MOVDconst [64]) (CLZ x)) @@ -32737,9 +32466,7 @@ func rewriteValueARM64_OpBitLen64_0(v *Value) bool { } func rewriteValueARM64_OpBitRev16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (BitRev16 x) // cond: // result: (SRLconst [48] (RBIT x)) @@ -32777,9 +32504,7 @@ func rewriteValueARM64_OpBitRev64_0(v *Value) bool { } func rewriteValueARM64_OpBitRev8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (BitRev8 x) // cond: // result: (SRLconst [56] (RBIT x)) @@ -32832,10 +32557,9 @@ func rewriteValueARM64_OpClosureCall_0(v *Value) bool { // result: (CALLclosure [argwid] entry closure mem) for { argwid := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] entry := v.Args[0] closure := v.Args[1] - mem := v.Args[2] v.reset(OpARM64CALLclosure) v.AuxInt = argwid v.AddArg(entry) @@ -32890,34 +32614,31 @@ func rewriteValueARM64_OpCom8_0(v *Value) bool { } func rewriteValueARM64_OpCondSelect_0(v *Value) bool { b := v.Block - _ = b - // match: (CondSelect x y bool) - // cond: flagArg(bool) != nil - // result: (CSEL {bool.Op} x y flagArg(bool)) + // match: (CondSelect x y boolval) + // cond: flagArg(boolval) != nil + // result: (CSEL {boolval.Op} x y flagArg(boolval)) for { - _ = v.Args[2] + boolval := v.Args[2] x := v.Args[0] y := v.Args[1] - bool := v.Args[2] - if !(flagArg(bool) != nil) { + if !(flagArg(boolval) != nil) { break } v.reset(OpARM64CSEL) - v.Aux = bool.Op + v.Aux = boolval.Op v.AddArg(x) v.AddArg(y) - v.AddArg(flagArg(bool)) + v.AddArg(flagArg(boolval)) return true } - // match: (CondSelect x y bool) - // cond: flagArg(bool) == nil - // result: (CSEL {OpARM64NotEqual} x y (CMPWconst [0] bool)) + // match: (CondSelect x y boolval) + // cond: flagArg(boolval) == nil + // result: (CSEL {OpARM64NotEqual} x y (CMPWconst [0] boolval)) for { - _ = v.Args[2] + boolval := v.Args[2] x := v.Args[0] y := v.Args[1] - bool := v.Args[2] - if !(flagArg(bool) == nil) { + if !(flagArg(boolval) == nil) { break } v.reset(OpARM64CSEL) @@ -32926,7 +32647,7 @@ func rewriteValueARM64_OpCondSelect_0(v *Value) bool { v.AddArg(y) v0 := b.NewValue0(v.Pos, OpARM64CMPWconst, types.TypeFlags) v0.AuxInt = 0 - v0.AddArg(bool) + v0.AddArg(boolval) v.AddArg(v0) return true } @@ -33019,9 +32740,39 @@ func rewriteValueARM64_OpConstNil_0(v *Value) bool { return true } } +func rewriteValueARM64_OpCtz16_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Ctz16 x) + // cond: + // result: (CLZW (RBITW (ORconst [0x10000] x))) + for { + t := v.Type + x := v.Args[0] + v.reset(OpARM64CLZW) + v.Type = t + v0 := b.NewValue0(v.Pos, OpARM64RBITW, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpARM64ORconst, typ.UInt32) + v1.AuxInt = 0x10000 + v1.AddArg(x) + v0.AddArg(v1) + v.AddArg(v0) + return true + } +} +func rewriteValueARM64_OpCtz16NonZero_0(v *Value) bool { + // match: (Ctz16NonZero x) + // cond: + // result: (Ctz32 x) + for { + x := v.Args[0] + v.reset(OpCtz32) + v.AddArg(x) + return true + } +} func rewriteValueARM64_OpCtz32_0(v *Value) bool { b := v.Block - _ = b // match: (Ctz32 x) // cond: // result: (CLZW (RBITW x)) @@ -33048,7 +32799,6 @@ func rewriteValueARM64_OpCtz32NonZero_0(v *Value) bool { } func rewriteValueARM64_OpCtz64_0(v *Value) bool { b := v.Block - _ = b // match: (Ctz64 x) // cond: // result: (CLZ (RBIT x)) @@ -33073,6 +32823,37 @@ func rewriteValueARM64_OpCtz64NonZero_0(v *Value) bool { return true } } +func rewriteValueARM64_OpCtz8_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Ctz8 x) + // cond: + // result: (CLZW (RBITW (ORconst [0x100] x))) + for { + t := v.Type + x := v.Args[0] + v.reset(OpARM64CLZW) + v.Type = t + v0 := b.NewValue0(v.Pos, OpARM64RBITW, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpARM64ORconst, typ.UInt32) + v1.AuxInt = 0x100 + v1.AddArg(x) + v0.AddArg(v1) + v.AddArg(v0) + return true + } +} +func rewriteValueARM64_OpCtz8NonZero_0(v *Value) bool { + // match: (Ctz8NonZero x) + // cond: + // result: (Ctz32 x) + for { + x := v.Args[0] + v.reset(OpCtz32) + v.AddArg(x) + return true + } +} func rewriteValueARM64_OpCvt32Fto32_0(v *Value) bool { // match: (Cvt32Fto32 x) // cond: @@ -33273,16 +33054,13 @@ func rewriteValueARM64_OpCvt64to64F_0(v *Value) bool { } func rewriteValueARM64_OpDiv16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div16 x y) // cond: // result: (DIVW (SignExt16to32 x) (SignExt16to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64DIVW) v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) v0.AddArg(x) @@ -33295,16 +33073,13 @@ func rewriteValueARM64_OpDiv16_0(v *Value) bool { } func rewriteValueARM64_OpDiv16u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div16u x y) // cond: // result: (UDIVW (ZeroExt16to32 x) (ZeroExt16to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64UDIVW) v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) v0.AddArg(x) @@ -33320,9 +33095,8 @@ func rewriteValueARM64_OpDiv32_0(v *Value) bool { // cond: // result: (DIVW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64DIVW) v.AddArg(x) v.AddArg(y) @@ -33334,9 +33108,8 @@ func rewriteValueARM64_OpDiv32F_0(v *Value) bool { // cond: // result: (FDIVS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64FDIVS) v.AddArg(x) v.AddArg(y) @@ -33348,9 +33121,8 @@ func rewriteValueARM64_OpDiv32u_0(v *Value) bool { // cond: // result: (UDIVW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64UDIVW) v.AddArg(x) v.AddArg(y) @@ -33362,9 +33134,8 @@ func rewriteValueARM64_OpDiv64_0(v *Value) bool { // cond: // result: (DIV x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64DIV) v.AddArg(x) v.AddArg(y) @@ -33376,9 +33147,8 @@ func rewriteValueARM64_OpDiv64F_0(v *Value) bool { // cond: // result: (FDIVD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64FDIVD) v.AddArg(x) v.AddArg(y) @@ -33390,9 +33160,8 @@ func rewriteValueARM64_OpDiv64u_0(v *Value) bool { // cond: // result: (UDIV x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64UDIV) v.AddArg(x) v.AddArg(y) @@ -33401,16 +33170,13 @@ func rewriteValueARM64_OpDiv64u_0(v *Value) bool { } func rewriteValueARM64_OpDiv8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div8 x y) // cond: // result: (DIVW (SignExt8to32 x) (SignExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64DIVW) v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) v0.AddArg(x) @@ -33423,16 +33189,13 @@ func rewriteValueARM64_OpDiv8_0(v *Value) bool { } func rewriteValueARM64_OpDiv8u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div8u x y) // cond: // result: (UDIVW (ZeroExt8to32 x) (ZeroExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64UDIVW) v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) v0.AddArg(x) @@ -33445,16 +33208,13 @@ func rewriteValueARM64_OpDiv8u_0(v *Value) bool { } func rewriteValueARM64_OpEq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq16 x y) // cond: // result: (Equal (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64Equal) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -33469,14 +33229,12 @@ func rewriteValueARM64_OpEq16_0(v *Value) bool { } func rewriteValueARM64_OpEq32_0(v *Value) bool { b := v.Block - _ = b // match: (Eq32 x y) // cond: // result: (Equal (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64Equal) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v0.AddArg(x) @@ -33487,14 +33245,12 @@ func rewriteValueARM64_OpEq32_0(v *Value) bool { } func rewriteValueARM64_OpEq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Eq32F x y) // cond: // result: (Equal (FCMPS x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64Equal) v0 := b.NewValue0(v.Pos, OpARM64FCMPS, types.TypeFlags) v0.AddArg(x) @@ -33505,14 +33261,12 @@ func rewriteValueARM64_OpEq32F_0(v *Value) bool { } func rewriteValueARM64_OpEq64_0(v *Value) bool { b := v.Block - _ = b // match: (Eq64 x y) // cond: // result: (Equal (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64Equal) v0 := b.NewValue0(v.Pos, OpARM64CMP, types.TypeFlags) v0.AddArg(x) @@ -33523,14 +33277,12 @@ func rewriteValueARM64_OpEq64_0(v *Value) bool { } func rewriteValueARM64_OpEq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Eq64F x y) // cond: // result: (Equal (FCMPD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64Equal) v0 := b.NewValue0(v.Pos, OpARM64FCMPD, types.TypeFlags) v0.AddArg(x) @@ -33541,16 +33293,13 @@ func rewriteValueARM64_OpEq64F_0(v *Value) bool { } func rewriteValueARM64_OpEq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq8 x y) // cond: // result: (Equal (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64Equal) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -33565,16 +33314,13 @@ func rewriteValueARM64_OpEq8_0(v *Value) bool { } func rewriteValueARM64_OpEqB_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (EqB x y) // cond: // result: (XOR (MOVDconst [1]) (XOR x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64XOR) v0 := b.NewValue0(v.Pos, OpARM64MOVDconst, typ.UInt64) v0.AuxInt = 1 @@ -33588,14 +33334,12 @@ func rewriteValueARM64_OpEqB_0(v *Value) bool { } func rewriteValueARM64_OpEqPtr_0(v *Value) bool { b := v.Block - _ = b // match: (EqPtr x y) // cond: // result: (Equal (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64Equal) v0 := b.NewValue0(v.Pos, OpARM64CMP, types.TypeFlags) v0.AddArg(x) @@ -33617,16 +33361,13 @@ func rewriteValueARM64_OpFloor_0(v *Value) bool { } func rewriteValueARM64_OpGeq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq16 x y) // cond: // result: (GreaterEqual (CMPW (SignExt16to32 x) (SignExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64GreaterEqual) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) @@ -33641,16 +33382,13 @@ func rewriteValueARM64_OpGeq16_0(v *Value) bool { } func rewriteValueARM64_OpGeq16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq16U x y) // cond: // result: (GreaterEqualU (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64GreaterEqualU) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -33665,14 +33403,12 @@ func rewriteValueARM64_OpGeq16U_0(v *Value) bool { } func rewriteValueARM64_OpGeq32_0(v *Value) bool { b := v.Block - _ = b // match: (Geq32 x y) // cond: // result: (GreaterEqual (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64GreaterEqual) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v0.AddArg(x) @@ -33683,15 +33419,13 @@ func rewriteValueARM64_OpGeq32_0(v *Value) bool { } func rewriteValueARM64_OpGeq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Geq32F x y) // cond: - // result: (GreaterEqual (FCMPS x y)) + // result: (GreaterEqualF (FCMPS x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] - v.reset(OpARM64GreaterEqual) + x := v.Args[0] + v.reset(OpARM64GreaterEqualF) v0 := b.NewValue0(v.Pos, OpARM64FCMPS, types.TypeFlags) v0.AddArg(x) v0.AddArg(y) @@ -33701,14 +33435,12 @@ func rewriteValueARM64_OpGeq32F_0(v *Value) bool { } func rewriteValueARM64_OpGeq32U_0(v *Value) bool { b := v.Block - _ = b // match: (Geq32U x y) // cond: // result: (GreaterEqualU (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64GreaterEqualU) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v0.AddArg(x) @@ -33719,14 +33451,12 @@ func rewriteValueARM64_OpGeq32U_0(v *Value) bool { } func rewriteValueARM64_OpGeq64_0(v *Value) bool { b := v.Block - _ = b // match: (Geq64 x y) // cond: // result: (GreaterEqual (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64GreaterEqual) v0 := b.NewValue0(v.Pos, OpARM64CMP, types.TypeFlags) v0.AddArg(x) @@ -33737,15 +33467,13 @@ func rewriteValueARM64_OpGeq64_0(v *Value) bool { } func rewriteValueARM64_OpGeq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Geq64F x y) // cond: - // result: (GreaterEqual (FCMPD x y)) + // result: (GreaterEqualF (FCMPD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] - v.reset(OpARM64GreaterEqual) + x := v.Args[0] + v.reset(OpARM64GreaterEqualF) v0 := b.NewValue0(v.Pos, OpARM64FCMPD, types.TypeFlags) v0.AddArg(x) v0.AddArg(y) @@ -33755,14 +33483,12 @@ func rewriteValueARM64_OpGeq64F_0(v *Value) bool { } func rewriteValueARM64_OpGeq64U_0(v *Value) bool { b := v.Block - _ = b // match: (Geq64U x y) // cond: // result: (GreaterEqualU (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64GreaterEqualU) v0 := b.NewValue0(v.Pos, OpARM64CMP, types.TypeFlags) v0.AddArg(x) @@ -33773,16 +33499,13 @@ func rewriteValueARM64_OpGeq64U_0(v *Value) bool { } func rewriteValueARM64_OpGeq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq8 x y) // cond: // result: (GreaterEqual (CMPW (SignExt8to32 x) (SignExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64GreaterEqual) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) @@ -33797,16 +33520,13 @@ func rewriteValueARM64_OpGeq8_0(v *Value) bool { } func rewriteValueARM64_OpGeq8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq8U x y) // cond: // result: (GreaterEqualU (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64GreaterEqualU) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -33848,16 +33568,13 @@ func rewriteValueARM64_OpGetClosurePtr_0(v *Value) bool { } func rewriteValueARM64_OpGreater16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater16 x y) // cond: // result: (GreaterThan (CMPW (SignExt16to32 x) (SignExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64GreaterThan) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) @@ -33872,16 +33589,13 @@ func rewriteValueARM64_OpGreater16_0(v *Value) bool { } func rewriteValueARM64_OpGreater16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater16U x y) // cond: // result: (GreaterThanU (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64GreaterThanU) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -33896,14 +33610,12 @@ func rewriteValueARM64_OpGreater16U_0(v *Value) bool { } func rewriteValueARM64_OpGreater32_0(v *Value) bool { b := v.Block - _ = b // match: (Greater32 x y) // cond: // result: (GreaterThan (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64GreaterThan) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v0.AddArg(x) @@ -33914,15 +33626,13 @@ func rewriteValueARM64_OpGreater32_0(v *Value) bool { } func rewriteValueARM64_OpGreater32F_0(v *Value) bool { b := v.Block - _ = b // match: (Greater32F x y) // cond: - // result: (GreaterThan (FCMPS x y)) + // result: (GreaterThanF (FCMPS x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] - v.reset(OpARM64GreaterThan) + x := v.Args[0] + v.reset(OpARM64GreaterThanF) v0 := b.NewValue0(v.Pos, OpARM64FCMPS, types.TypeFlags) v0.AddArg(x) v0.AddArg(y) @@ -33932,14 +33642,12 @@ func rewriteValueARM64_OpGreater32F_0(v *Value) bool { } func rewriteValueARM64_OpGreater32U_0(v *Value) bool { b := v.Block - _ = b // match: (Greater32U x y) // cond: // result: (GreaterThanU (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64GreaterThanU) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v0.AddArg(x) @@ -33950,14 +33658,12 @@ func rewriteValueARM64_OpGreater32U_0(v *Value) bool { } func rewriteValueARM64_OpGreater64_0(v *Value) bool { b := v.Block - _ = b // match: (Greater64 x y) // cond: // result: (GreaterThan (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64GreaterThan) v0 := b.NewValue0(v.Pos, OpARM64CMP, types.TypeFlags) v0.AddArg(x) @@ -33968,15 +33674,13 @@ func rewriteValueARM64_OpGreater64_0(v *Value) bool { } func rewriteValueARM64_OpGreater64F_0(v *Value) bool { b := v.Block - _ = b // match: (Greater64F x y) // cond: - // result: (GreaterThan (FCMPD x y)) + // result: (GreaterThanF (FCMPD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] - v.reset(OpARM64GreaterThan) + x := v.Args[0] + v.reset(OpARM64GreaterThanF) v0 := b.NewValue0(v.Pos, OpARM64FCMPD, types.TypeFlags) v0.AddArg(x) v0.AddArg(y) @@ -33986,14 +33690,12 @@ func rewriteValueARM64_OpGreater64F_0(v *Value) bool { } func rewriteValueARM64_OpGreater64U_0(v *Value) bool { b := v.Block - _ = b // match: (Greater64U x y) // cond: // result: (GreaterThanU (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64GreaterThanU) v0 := b.NewValue0(v.Pos, OpARM64CMP, types.TypeFlags) v0.AddArg(x) @@ -34004,16 +33706,13 @@ func rewriteValueARM64_OpGreater64U_0(v *Value) bool { } func rewriteValueARM64_OpGreater8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater8 x y) // cond: // result: (GreaterThan (CMPW (SignExt8to32 x) (SignExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64GreaterThan) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) @@ -34028,16 +33727,13 @@ func rewriteValueARM64_OpGreater8_0(v *Value) bool { } func rewriteValueARM64_OpGreater8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater8U x y) // cond: // result: (GreaterThanU (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64GreaterThanU) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -34052,16 +33748,13 @@ func rewriteValueARM64_OpGreater8U_0(v *Value) bool { } func rewriteValueARM64_OpHmul32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Hmul32 x y) // cond: // result: (SRAconst (MULL x y) [32]) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SRAconst) v.AuxInt = 32 v0 := b.NewValue0(v.Pos, OpARM64MULL, typ.Int64) @@ -34073,16 +33766,13 @@ func rewriteValueARM64_OpHmul32_0(v *Value) bool { } func rewriteValueARM64_OpHmul32u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Hmul32u x y) // cond: // result: (SRAconst (UMULL x y) [32]) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SRAconst) v.AuxInt = 32 v0 := b.NewValue0(v.Pos, OpARM64UMULL, typ.UInt64) @@ -34097,9 +33787,8 @@ func rewriteValueARM64_OpHmul64_0(v *Value) bool { // cond: // result: (MULH x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64MULH) v.AddArg(x) v.AddArg(y) @@ -34111,9 +33800,8 @@ func rewriteValueARM64_OpHmul64u_0(v *Value) bool { // cond: // result: (UMULH x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64UMULH) v.AddArg(x) v.AddArg(y) @@ -34126,9 +33814,8 @@ func rewriteValueARM64_OpInterCall_0(v *Value) bool { // result: (CALLinter [argwid] entry mem) for { argwid := v.AuxInt - _ = v.Args[1] - entry := v.Args[0] mem := v.Args[1] + entry := v.Args[0] v.reset(OpARM64CALLinter) v.AuxInt = argwid v.AddArg(entry) @@ -34138,14 +33825,12 @@ func rewriteValueARM64_OpInterCall_0(v *Value) bool { } func rewriteValueARM64_OpIsInBounds_0(v *Value) bool { b := v.Block - _ = b // match: (IsInBounds idx len) // cond: // result: (LessThanU (CMP idx len)) for { - _ = v.Args[1] - idx := v.Args[0] len := v.Args[1] + idx := v.Args[0] v.reset(OpARM64LessThanU) v0 := b.NewValue0(v.Pos, OpARM64CMP, types.TypeFlags) v0.AddArg(idx) @@ -34156,7 +33841,6 @@ func rewriteValueARM64_OpIsInBounds_0(v *Value) bool { } func rewriteValueARM64_OpIsNonNil_0(v *Value) bool { b := v.Block - _ = b // match: (IsNonNil ptr) // cond: // result: (NotEqual (CMPconst [0] ptr)) @@ -34172,14 +33856,12 @@ func rewriteValueARM64_OpIsNonNil_0(v *Value) bool { } func rewriteValueARM64_OpIsSliceInBounds_0(v *Value) bool { b := v.Block - _ = b // match: (IsSliceInBounds idx len) // cond: // result: (LessEqualU (CMP idx len)) for { - _ = v.Args[1] - idx := v.Args[0] len := v.Args[1] + idx := v.Args[0] v.reset(OpARM64LessEqualU) v0 := b.NewValue0(v.Pos, OpARM64CMP, types.TypeFlags) v0.AddArg(idx) @@ -34190,16 +33872,13 @@ func rewriteValueARM64_OpIsSliceInBounds_0(v *Value) bool { } func rewriteValueARM64_OpLeq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq16 x y) // cond: // result: (LessEqual (CMPW (SignExt16to32 x) (SignExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64LessEqual) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) @@ -34214,16 +33893,13 @@ func rewriteValueARM64_OpLeq16_0(v *Value) bool { } func rewriteValueARM64_OpLeq16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq16U x y) // cond: // result: (LessEqualU (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64LessEqualU) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -34238,14 +33914,12 @@ func rewriteValueARM64_OpLeq16U_0(v *Value) bool { } func rewriteValueARM64_OpLeq32_0(v *Value) bool { b := v.Block - _ = b // match: (Leq32 x y) // cond: // result: (LessEqual (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64LessEqual) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v0.AddArg(x) @@ -34256,32 +33930,28 @@ func rewriteValueARM64_OpLeq32_0(v *Value) bool { } func rewriteValueARM64_OpLeq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Leq32F x y) // cond: - // result: (GreaterEqual (FCMPS y x)) + // result: (LessEqualF (FCMPS x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] - v.reset(OpARM64GreaterEqual) + x := v.Args[0] + v.reset(OpARM64LessEqualF) v0 := b.NewValue0(v.Pos, OpARM64FCMPS, types.TypeFlags) - v0.AddArg(y) v0.AddArg(x) + v0.AddArg(y) v.AddArg(v0) return true } } func rewriteValueARM64_OpLeq32U_0(v *Value) bool { b := v.Block - _ = b // match: (Leq32U x y) // cond: // result: (LessEqualU (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64LessEqualU) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v0.AddArg(x) @@ -34292,14 +33962,12 @@ func rewriteValueARM64_OpLeq32U_0(v *Value) bool { } func rewriteValueARM64_OpLeq64_0(v *Value) bool { b := v.Block - _ = b // match: (Leq64 x y) // cond: // result: (LessEqual (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64LessEqual) v0 := b.NewValue0(v.Pos, OpARM64CMP, types.TypeFlags) v0.AddArg(x) @@ -34310,32 +33978,28 @@ func rewriteValueARM64_OpLeq64_0(v *Value) bool { } func rewriteValueARM64_OpLeq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Leq64F x y) // cond: - // result: (GreaterEqual (FCMPD y x)) + // result: (LessEqualF (FCMPD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] - v.reset(OpARM64GreaterEqual) + x := v.Args[0] + v.reset(OpARM64LessEqualF) v0 := b.NewValue0(v.Pos, OpARM64FCMPD, types.TypeFlags) - v0.AddArg(y) v0.AddArg(x) + v0.AddArg(y) v.AddArg(v0) return true } } func rewriteValueARM64_OpLeq64U_0(v *Value) bool { b := v.Block - _ = b // match: (Leq64U x y) // cond: // result: (LessEqualU (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64LessEqualU) v0 := b.NewValue0(v.Pos, OpARM64CMP, types.TypeFlags) v0.AddArg(x) @@ -34346,16 +34010,13 @@ func rewriteValueARM64_OpLeq64U_0(v *Value) bool { } func rewriteValueARM64_OpLeq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq8 x y) // cond: // result: (LessEqual (CMPW (SignExt8to32 x) (SignExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64LessEqual) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) @@ -34370,16 +34031,13 @@ func rewriteValueARM64_OpLeq8_0(v *Value) bool { } func rewriteValueARM64_OpLeq8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq8U x y) // cond: // result: (LessEqualU (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64LessEqualU) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -34394,16 +34052,13 @@ func rewriteValueARM64_OpLeq8U_0(v *Value) bool { } func rewriteValueARM64_OpLess16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less16 x y) // cond: // result: (LessThan (CMPW (SignExt16to32 x) (SignExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64LessThan) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) @@ -34418,16 +34073,13 @@ func rewriteValueARM64_OpLess16_0(v *Value) bool { } func rewriteValueARM64_OpLess16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less16U x y) // cond: // result: (LessThanU (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64LessThanU) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -34442,14 +34094,12 @@ func rewriteValueARM64_OpLess16U_0(v *Value) bool { } func rewriteValueARM64_OpLess32_0(v *Value) bool { b := v.Block - _ = b // match: (Less32 x y) // cond: // result: (LessThan (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64LessThan) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v0.AddArg(x) @@ -34460,32 +34110,28 @@ func rewriteValueARM64_OpLess32_0(v *Value) bool { } func rewriteValueARM64_OpLess32F_0(v *Value) bool { b := v.Block - _ = b // match: (Less32F x y) // cond: - // result: (GreaterThan (FCMPS y x)) + // result: (LessThanF (FCMPS x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] - v.reset(OpARM64GreaterThan) + x := v.Args[0] + v.reset(OpARM64LessThanF) v0 := b.NewValue0(v.Pos, OpARM64FCMPS, types.TypeFlags) - v0.AddArg(y) v0.AddArg(x) + v0.AddArg(y) v.AddArg(v0) return true } } func rewriteValueARM64_OpLess32U_0(v *Value) bool { b := v.Block - _ = b // match: (Less32U x y) // cond: // result: (LessThanU (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64LessThanU) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v0.AddArg(x) @@ -34496,14 +34142,12 @@ func rewriteValueARM64_OpLess32U_0(v *Value) bool { } func rewriteValueARM64_OpLess64_0(v *Value) bool { b := v.Block - _ = b // match: (Less64 x y) // cond: // result: (LessThan (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64LessThan) v0 := b.NewValue0(v.Pos, OpARM64CMP, types.TypeFlags) v0.AddArg(x) @@ -34514,32 +34158,28 @@ func rewriteValueARM64_OpLess64_0(v *Value) bool { } func rewriteValueARM64_OpLess64F_0(v *Value) bool { b := v.Block - _ = b // match: (Less64F x y) // cond: - // result: (GreaterThan (FCMPD y x)) + // result: (LessThanF (FCMPD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] - v.reset(OpARM64GreaterThan) + x := v.Args[0] + v.reset(OpARM64LessThanF) v0 := b.NewValue0(v.Pos, OpARM64FCMPD, types.TypeFlags) - v0.AddArg(y) v0.AddArg(x) + v0.AddArg(y) v.AddArg(v0) return true } } func rewriteValueARM64_OpLess64U_0(v *Value) bool { b := v.Block - _ = b // match: (Less64U x y) // cond: // result: (LessThanU (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64LessThanU) v0 := b.NewValue0(v.Pos, OpARM64CMP, types.TypeFlags) v0.AddArg(x) @@ -34550,16 +34190,13 @@ func rewriteValueARM64_OpLess64U_0(v *Value) bool { } func rewriteValueARM64_OpLess8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less8 x y) // cond: // result: (LessThan (CMPW (SignExt8to32 x) (SignExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64LessThan) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) @@ -34574,16 +34211,13 @@ func rewriteValueARM64_OpLess8_0(v *Value) bool { } func rewriteValueARM64_OpLess8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less8U x y) // cond: // result: (LessThanU (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64LessThanU) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -34602,9 +34236,8 @@ func rewriteValueARM64_OpLoad_0(v *Value) bool { // result: (MOVBUload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.IsBoolean()) { break } @@ -34618,9 +34251,8 @@ func rewriteValueARM64_OpLoad_0(v *Value) bool { // result: (MOVBload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is8BitInt(t) && isSigned(t)) { break } @@ -34634,9 +34266,8 @@ func rewriteValueARM64_OpLoad_0(v *Value) bool { // result: (MOVBUload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is8BitInt(t) && !isSigned(t)) { break } @@ -34650,9 +34281,8 @@ func rewriteValueARM64_OpLoad_0(v *Value) bool { // result: (MOVHload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is16BitInt(t) && isSigned(t)) { break } @@ -34666,9 +34296,8 @@ func rewriteValueARM64_OpLoad_0(v *Value) bool { // result: (MOVHUload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is16BitInt(t) && !isSigned(t)) { break } @@ -34682,9 +34311,8 @@ func rewriteValueARM64_OpLoad_0(v *Value) bool { // result: (MOVWload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is32BitInt(t) && isSigned(t)) { break } @@ -34698,9 +34326,8 @@ func rewriteValueARM64_OpLoad_0(v *Value) bool { // result: (MOVWUload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is32BitInt(t) && !isSigned(t)) { break } @@ -34714,9 +34341,8 @@ func rewriteValueARM64_OpLoad_0(v *Value) bool { // result: (MOVDload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is64BitInt(t) || isPtr(t)) { break } @@ -34730,9 +34356,8 @@ func rewriteValueARM64_OpLoad_0(v *Value) bool { // result: (FMOVSload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is32BitFloat(t)) { break } @@ -34746,9 +34371,8 @@ func rewriteValueARM64_OpLoad_0(v *Value) bool { // result: (FMOVDload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is64BitFloat(t)) { break } @@ -34775,17 +34399,14 @@ func rewriteValueARM64_OpLocalAddr_0(v *Value) bool { } func rewriteValueARM64_OpLsh16x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x16 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SLL x (ZeroExt16to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt16to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SLL, t) @@ -34808,17 +34429,14 @@ func rewriteValueARM64_OpLsh16x16_0(v *Value) bool { } func rewriteValueARM64_OpLsh16x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x32 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SLL x (ZeroExt32to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt32to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SLL, t) @@ -34841,15 +34459,13 @@ func rewriteValueARM64_OpLsh16x32_0(v *Value) bool { } func rewriteValueARM64_OpLsh16x64_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh16x64 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SLL x y) (Const64 [0]) (CMPconst [64] y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SLL, t) @@ -34868,17 +34484,14 @@ func rewriteValueARM64_OpLsh16x64_0(v *Value) bool { } func rewriteValueARM64_OpLsh16x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x8 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SLL x (ZeroExt8to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt8to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SLL, t) @@ -34901,17 +34514,14 @@ func rewriteValueARM64_OpLsh16x8_0(v *Value) bool { } func rewriteValueARM64_OpLsh32x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x16 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SLL x (ZeroExt16to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt16to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SLL, t) @@ -34934,17 +34544,14 @@ func rewriteValueARM64_OpLsh32x16_0(v *Value) bool { } func rewriteValueARM64_OpLsh32x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x32 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SLL x (ZeroExt32to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt32to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SLL, t) @@ -34967,15 +34574,13 @@ func rewriteValueARM64_OpLsh32x32_0(v *Value) bool { } func rewriteValueARM64_OpLsh32x64_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh32x64 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SLL x y) (Const64 [0]) (CMPconst [64] y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SLL, t) @@ -34994,17 +34599,14 @@ func rewriteValueARM64_OpLsh32x64_0(v *Value) bool { } func rewriteValueARM64_OpLsh32x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x8 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SLL x (ZeroExt8to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt8to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SLL, t) @@ -35027,17 +34629,14 @@ func rewriteValueARM64_OpLsh32x8_0(v *Value) bool { } func rewriteValueARM64_OpLsh64x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x16 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SLL x (ZeroExt16to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt16to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SLL, t) @@ -35060,17 +34659,14 @@ func rewriteValueARM64_OpLsh64x16_0(v *Value) bool { } func rewriteValueARM64_OpLsh64x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x32 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SLL x (ZeroExt32to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt32to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SLL, t) @@ -35093,15 +34689,13 @@ func rewriteValueARM64_OpLsh64x32_0(v *Value) bool { } func rewriteValueARM64_OpLsh64x64_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh64x64 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SLL x y) (Const64 [0]) (CMPconst [64] y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SLL, t) @@ -35120,17 +34714,14 @@ func rewriteValueARM64_OpLsh64x64_0(v *Value) bool { } func rewriteValueARM64_OpLsh64x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x8 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SLL x (ZeroExt8to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt8to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SLL, t) @@ -35153,17 +34744,14 @@ func rewriteValueARM64_OpLsh64x8_0(v *Value) bool { } func rewriteValueARM64_OpLsh8x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x16 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SLL x (ZeroExt16to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt16to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SLL, t) @@ -35186,17 +34774,14 @@ func rewriteValueARM64_OpLsh8x16_0(v *Value) bool { } func rewriteValueARM64_OpLsh8x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x32 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SLL x (ZeroExt32to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt32to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SLL, t) @@ -35219,15 +34804,13 @@ func rewriteValueARM64_OpLsh8x32_0(v *Value) bool { } func rewriteValueARM64_OpLsh8x64_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh8x64 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SLL x y) (Const64 [0]) (CMPconst [64] y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SLL, t) @@ -35246,17 +34829,14 @@ func rewriteValueARM64_OpLsh8x64_0(v *Value) bool { } func rewriteValueARM64_OpLsh8x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x8 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SLL x (ZeroExt8to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt8to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SLL, t) @@ -35279,16 +34859,13 @@ func rewriteValueARM64_OpLsh8x8_0(v *Value) bool { } func rewriteValueARM64_OpMod16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod16 x y) // cond: // result: (MODW (SignExt16to32 x) (SignExt16to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64MODW) v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) v0.AddArg(x) @@ -35301,16 +34878,13 @@ func rewriteValueARM64_OpMod16_0(v *Value) bool { } func rewriteValueARM64_OpMod16u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod16u x y) // cond: // result: (UMODW (ZeroExt16to32 x) (ZeroExt16to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64UMODW) v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) v0.AddArg(x) @@ -35326,9 +34900,8 @@ func rewriteValueARM64_OpMod32_0(v *Value) bool { // cond: // result: (MODW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64MODW) v.AddArg(x) v.AddArg(y) @@ -35340,9 +34913,8 @@ func rewriteValueARM64_OpMod32u_0(v *Value) bool { // cond: // result: (UMODW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64UMODW) v.AddArg(x) v.AddArg(y) @@ -35354,9 +34926,8 @@ func rewriteValueARM64_OpMod64_0(v *Value) bool { // cond: // result: (MOD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64MOD) v.AddArg(x) v.AddArg(y) @@ -35368,9 +34939,8 @@ func rewriteValueARM64_OpMod64u_0(v *Value) bool { // cond: // result: (UMOD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64UMOD) v.AddArg(x) v.AddArg(y) @@ -35379,16 +34949,13 @@ func rewriteValueARM64_OpMod64u_0(v *Value) bool { } func rewriteValueARM64_OpMod8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod8 x y) // cond: // result: (MODW (SignExt8to32 x) (SignExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64MODW) v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) v0.AddArg(x) @@ -35401,16 +34968,13 @@ func rewriteValueARM64_OpMod8_0(v *Value) bool { } func rewriteValueARM64_OpMod8u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod8u x y) // cond: // result: (UMODW (ZeroExt8to32 x) (ZeroExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64UMODW) v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) v0.AddArg(x) @@ -35423,9 +34987,7 @@ func rewriteValueARM64_OpMod8u_0(v *Value) bool { } func rewriteValueARM64_OpMove_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Move [0] _ _ mem) // cond: // result: mem @@ -35433,7 +34995,6 @@ func rewriteValueARM64_OpMove_0(v *Value) bool { if v.AuxInt != 0 { break } - _ = v.Args[2] mem := v.Args[2] v.reset(OpCopy) v.Type = mem.Type @@ -35447,10 +35008,9 @@ func rewriteValueARM64_OpMove_0(v *Value) bool { if v.AuxInt != 1 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVBstore) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpARM64MOVBUload, typ.UInt8) @@ -35467,10 +35027,9 @@ func rewriteValueARM64_OpMove_0(v *Value) bool { if v.AuxInt != 2 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVHstore) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpARM64MOVHUload, typ.UInt16) @@ -35487,10 +35046,9 @@ func rewriteValueARM64_OpMove_0(v *Value) bool { if v.AuxInt != 4 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVWstore) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpARM64MOVWUload, typ.UInt32) @@ -35507,10 +35065,9 @@ func rewriteValueARM64_OpMove_0(v *Value) bool { if v.AuxInt != 8 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVDstore) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpARM64MOVDload, typ.UInt64) @@ -35527,10 +35084,9 @@ func rewriteValueARM64_OpMove_0(v *Value) bool { if v.AuxInt != 3 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVBstore) v.AuxInt = 2 v.AddArg(dst) @@ -35556,10 +35112,9 @@ func rewriteValueARM64_OpMove_0(v *Value) bool { if v.AuxInt != 5 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVBstore) v.AuxInt = 4 v.AddArg(dst) @@ -35585,10 +35140,9 @@ func rewriteValueARM64_OpMove_0(v *Value) bool { if v.AuxInt != 6 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVHstore) v.AuxInt = 4 v.AddArg(dst) @@ -35614,10 +35168,9 @@ func rewriteValueARM64_OpMove_0(v *Value) bool { if v.AuxInt != 7 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVBstore) v.AuxInt = 6 v.AddArg(dst) @@ -35652,10 +35205,9 @@ func rewriteValueARM64_OpMove_0(v *Value) bool { if v.AuxInt != 12 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVWstore) v.AuxInt = 8 v.AddArg(dst) @@ -35678,11 +35230,8 @@ func rewriteValueARM64_OpMove_0(v *Value) bool { } func rewriteValueARM64_OpMove_10(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Move [16] dst src mem) // cond: // result: (MOVDstore [8] dst (MOVDload [8] src mem) (MOVDstore dst (MOVDload src mem) mem)) @@ -35690,10 +35239,9 @@ func rewriteValueARM64_OpMove_10(v *Value) bool { if v.AuxInt != 16 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVDstore) v.AuxInt = 8 v.AddArg(dst) @@ -35719,10 +35267,9 @@ func rewriteValueARM64_OpMove_10(v *Value) bool { if v.AuxInt != 24 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpARM64MOVDstore) v.AuxInt = 16 v.AddArg(dst) @@ -35755,10 +35302,9 @@ func rewriteValueARM64_OpMove_10(v *Value) bool { // result: (Move [s%8] (OffPtr dst [s-s%8]) (OffPtr src [s-s%8]) (Move [s-s%8] dst src mem)) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s%8 != 0 && s > 8) { break } @@ -35785,10 +35331,9 @@ func rewriteValueARM64_OpMove_10(v *Value) bool { // result: (MOVDstore [s-8] dst (MOVDload [s-8] src mem) (DUFFCOPY [8*(64-(s-8)/16)] dst src mem)) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s > 32 && s <= 16*64 && s%16 == 8 && !config.noDuffDevice) { break } @@ -35813,10 +35358,9 @@ func rewriteValueARM64_OpMove_10(v *Value) bool { // result: (DUFFCOPY [8 * (64 - s/16)] dst src mem) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s > 32 && s <= 16*64 && s%16 == 0 && !config.noDuffDevice) { break } @@ -35832,10 +35376,9 @@ func rewriteValueARM64_OpMove_10(v *Value) bool { // result: (LoweredMove dst src (ADDconst src [s-8]) mem) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s > 24 && s%8 == 0) { break } @@ -35856,9 +35399,8 @@ func rewriteValueARM64_OpMul16_0(v *Value) bool { // cond: // result: (MULW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64MULW) v.AddArg(x) v.AddArg(y) @@ -35870,9 +35412,8 @@ func rewriteValueARM64_OpMul32_0(v *Value) bool { // cond: // result: (MULW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64MULW) v.AddArg(x) v.AddArg(y) @@ -35884,9 +35425,8 @@ func rewriteValueARM64_OpMul32F_0(v *Value) bool { // cond: // result: (FMULS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64FMULS) v.AddArg(x) v.AddArg(y) @@ -35898,9 +35438,8 @@ func rewriteValueARM64_OpMul64_0(v *Value) bool { // cond: // result: (MUL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64MUL) v.AddArg(x) v.AddArg(y) @@ -35912,9 +35451,8 @@ func rewriteValueARM64_OpMul64F_0(v *Value) bool { // cond: // result: (FMULD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64FMULD) v.AddArg(x) v.AddArg(y) @@ -35926,9 +35464,8 @@ func rewriteValueARM64_OpMul64uhilo_0(v *Value) bool { // cond: // result: (LoweredMuluhilo x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64LoweredMuluhilo) v.AddArg(x) v.AddArg(y) @@ -35940,9 +35477,8 @@ func rewriteValueARM64_OpMul8_0(v *Value) bool { // cond: // result: (MULW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64MULW) v.AddArg(x) v.AddArg(y) @@ -36017,16 +35553,13 @@ func rewriteValueARM64_OpNeg8_0(v *Value) bool { } func rewriteValueARM64_OpNeq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq16 x y) // cond: // result: (NotEqual (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64NotEqual) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -36041,14 +35574,12 @@ func rewriteValueARM64_OpNeq16_0(v *Value) bool { } func rewriteValueARM64_OpNeq32_0(v *Value) bool { b := v.Block - _ = b // match: (Neq32 x y) // cond: // result: (NotEqual (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64NotEqual) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v0.AddArg(x) @@ -36059,14 +35590,12 @@ func rewriteValueARM64_OpNeq32_0(v *Value) bool { } func rewriteValueARM64_OpNeq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Neq32F x y) // cond: // result: (NotEqual (FCMPS x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64NotEqual) v0 := b.NewValue0(v.Pos, OpARM64FCMPS, types.TypeFlags) v0.AddArg(x) @@ -36077,14 +35606,12 @@ func rewriteValueARM64_OpNeq32F_0(v *Value) bool { } func rewriteValueARM64_OpNeq64_0(v *Value) bool { b := v.Block - _ = b // match: (Neq64 x y) // cond: // result: (NotEqual (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64NotEqual) v0 := b.NewValue0(v.Pos, OpARM64CMP, types.TypeFlags) v0.AddArg(x) @@ -36095,14 +35622,12 @@ func rewriteValueARM64_OpNeq64_0(v *Value) bool { } func rewriteValueARM64_OpNeq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Neq64F x y) // cond: // result: (NotEqual (FCMPD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64NotEqual) v0 := b.NewValue0(v.Pos, OpARM64FCMPD, types.TypeFlags) v0.AddArg(x) @@ -36113,16 +35638,13 @@ func rewriteValueARM64_OpNeq64F_0(v *Value) bool { } func rewriteValueARM64_OpNeq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq8 x y) // cond: // result: (NotEqual (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64NotEqual) v0 := b.NewValue0(v.Pos, OpARM64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -36140,9 +35662,8 @@ func rewriteValueARM64_OpNeqB_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64XOR) v.AddArg(x) v.AddArg(y) @@ -36151,14 +35672,12 @@ func rewriteValueARM64_OpNeqB_0(v *Value) bool { } func rewriteValueARM64_OpNeqPtr_0(v *Value) bool { b := v.Block - _ = b // match: (NeqPtr x y) // cond: // result: (NotEqual (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64NotEqual) v0 := b.NewValue0(v.Pos, OpARM64CMP, types.TypeFlags) v0.AddArg(x) @@ -36172,9 +35691,8 @@ func rewriteValueARM64_OpNilCheck_0(v *Value) bool { // cond: // result: (LoweredNilCheck ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64LoweredNilCheck) v.AddArg(ptr) v.AddArg(mem) @@ -36183,9 +35701,7 @@ func rewriteValueARM64_OpNilCheck_0(v *Value) bool { } func rewriteValueARM64_OpNot_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Not x) // cond: // result: (XOR (MOVDconst [1]) x) @@ -36231,9 +35747,8 @@ func rewriteValueARM64_OpOr16_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64OR) v.AddArg(x) v.AddArg(y) @@ -36245,9 +35760,8 @@ func rewriteValueARM64_OpOr32_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64OR) v.AddArg(x) v.AddArg(y) @@ -36259,9 +35773,8 @@ func rewriteValueARM64_OpOr64_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64OR) v.AddArg(x) v.AddArg(y) @@ -36273,9 +35786,8 @@ func rewriteValueARM64_OpOr8_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64OR) v.AddArg(x) v.AddArg(y) @@ -36287,20 +35799,74 @@ func rewriteValueARM64_OpOrB_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64OR) v.AddArg(x) v.AddArg(y) return true } } +func rewriteValueARM64_OpPanicBounds_0(v *Value) bool { + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 0 + // result: (LoweredPanicBoundsA [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 0) { + break + } + v.reset(OpARM64LoweredPanicBoundsA) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 1 + // result: (LoweredPanicBoundsB [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 1) { + break + } + v.reset(OpARM64LoweredPanicBoundsB) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 2 + // result: (LoweredPanicBoundsC [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 2) { + break + } + v.reset(OpARM64LoweredPanicBoundsC) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + return false +} func rewriteValueARM64_OpPopCount16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (PopCount16 x) // cond: // result: (FMOVDfpgp (VUADDLV (VCNT (FMOVDgpfp (ZeroExt16to64 x))))) @@ -36323,9 +35889,7 @@ func rewriteValueARM64_OpPopCount16_0(v *Value) bool { } func rewriteValueARM64_OpPopCount32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (PopCount32 x) // cond: // result: (FMOVDfpgp (VUADDLV (VCNT (FMOVDgpfp (ZeroExt32to64 x))))) @@ -36348,9 +35912,7 @@ func rewriteValueARM64_OpPopCount32_0(v *Value) bool { } func rewriteValueARM64_OpPopCount64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (PopCount64 x) // cond: // result: (FMOVDfpgp (VUADDLV (VCNT (FMOVDgpfp x)))) @@ -36369,16 +35931,46 @@ func rewriteValueARM64_OpPopCount64_0(v *Value) bool { return true } } +func rewriteValueARM64_OpRotateLeft16_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (RotateLeft16 x (MOVDconst [c])) + // cond: + // result: (Or16 (Lsh16x64 x (MOVDconst [c&15])) (Rsh16Ux64 x (MOVDconst [-c&15]))) + for { + t := v.Type + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpARM64MOVDconst { + break + } + c := v_1.AuxInt + v.reset(OpOr16) + v0 := b.NewValue0(v.Pos, OpLsh16x64, t) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpARM64MOVDconst, typ.UInt64) + v1.AuxInt = c & 15 + v0.AddArg(v1) + v.AddArg(v0) + v2 := b.NewValue0(v.Pos, OpRsh16Ux64, t) + v2.AddArg(x) + v3 := b.NewValue0(v.Pos, OpARM64MOVDconst, typ.UInt64) + v3.AuxInt = -c & 15 + v2.AddArg(v3) + v.AddArg(v2) + return true + } + return false +} func rewriteValueARM64_OpRotateLeft32_0(v *Value) bool { b := v.Block - _ = b // match: (RotateLeft32 x y) // cond: // result: (RORW x (NEG y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64RORW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpARM64NEG, y.Type) @@ -36389,14 +35981,12 @@ func rewriteValueARM64_OpRotateLeft32_0(v *Value) bool { } func rewriteValueARM64_OpRotateLeft64_0(v *Value) bool { b := v.Block - _ = b // match: (RotateLeft64 x y) // cond: // result: (ROR x (NEG y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64ROR) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpARM64NEG, y.Type) @@ -36405,6 +35995,38 @@ func rewriteValueARM64_OpRotateLeft64_0(v *Value) bool { return true } } +func rewriteValueARM64_OpRotateLeft8_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (RotateLeft8 x (MOVDconst [c])) + // cond: + // result: (Or8 (Lsh8x64 x (MOVDconst [c&7])) (Rsh8Ux64 x (MOVDconst [-c&7]))) + for { + t := v.Type + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpARM64MOVDconst { + break + } + c := v_1.AuxInt + v.reset(OpOr8) + v0 := b.NewValue0(v.Pos, OpLsh8x64, t) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpARM64MOVDconst, typ.UInt64) + v1.AuxInt = c & 7 + v0.AddArg(v1) + v.AddArg(v0) + v2 := b.NewValue0(v.Pos, OpRsh8Ux64, t) + v2.AddArg(x) + v3 := b.NewValue0(v.Pos, OpARM64MOVDconst, typ.UInt64) + v3.AuxInt = -c & 7 + v2.AddArg(v3) + v.AddArg(v2) + return true + } + return false +} func rewriteValueARM64_OpRound_0(v *Value) bool { // match: (Round x) // cond: @@ -36451,17 +36073,14 @@ func rewriteValueARM64_OpRoundToEven_0(v *Value) bool { } func rewriteValueARM64_OpRsh16Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux16 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SRL (ZeroExt16to64 x) (ZeroExt16to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt16to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SRL, t) @@ -36486,17 +36105,14 @@ func rewriteValueARM64_OpRsh16Ux16_0(v *Value) bool { } func rewriteValueARM64_OpRsh16Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux32 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SRL (ZeroExt16to64 x) (ZeroExt32to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt32to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SRL, t) @@ -36521,17 +36137,14 @@ func rewriteValueARM64_OpRsh16Ux32_0(v *Value) bool { } func rewriteValueARM64_OpRsh16Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux64 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SRL (ZeroExt16to64 x) y) (Const64 [0]) (CMPconst [64] y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SRL, t) @@ -36552,17 +36165,14 @@ func rewriteValueARM64_OpRsh16Ux64_0(v *Value) bool { } func rewriteValueARM64_OpRsh16Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux8 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SRL (ZeroExt16to64 x) (ZeroExt8to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt8to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SRL, t) @@ -36587,16 +36197,13 @@ func rewriteValueARM64_OpRsh16Ux8_0(v *Value) bool { } func rewriteValueARM64_OpRsh16x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x16 x y) // cond: // result: (SRA (SignExt16to64 x) (CSEL {OpARM64LessThanU} (ZeroExt16to64 y) (Const64 [63]) (CMPconst [64] (ZeroExt16to64 y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SRA) v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) v0.AddArg(x) @@ -36621,16 +36228,13 @@ func rewriteValueARM64_OpRsh16x16_0(v *Value) bool { } func rewriteValueARM64_OpRsh16x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x32 x y) // cond: // result: (SRA (SignExt16to64 x) (CSEL {OpARM64LessThanU} (ZeroExt32to64 y) (Const64 [63]) (CMPconst [64] (ZeroExt32to64 y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SRA) v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) v0.AddArg(x) @@ -36655,16 +36259,13 @@ func rewriteValueARM64_OpRsh16x32_0(v *Value) bool { } func rewriteValueARM64_OpRsh16x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x64 x y) // cond: // result: (SRA (SignExt16to64 x) (CSEL {OpARM64LessThanU} y (Const64 [63]) (CMPconst [64] y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SRA) v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) v0.AddArg(x) @@ -36685,16 +36286,13 @@ func rewriteValueARM64_OpRsh16x64_0(v *Value) bool { } func rewriteValueARM64_OpRsh16x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x8 x y) // cond: // result: (SRA (SignExt16to64 x) (CSEL {OpARM64LessThanU} (ZeroExt8to64 y) (Const64 [63]) (CMPconst [64] (ZeroExt8to64 y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SRA) v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) v0.AddArg(x) @@ -36719,17 +36317,14 @@ func rewriteValueARM64_OpRsh16x8_0(v *Value) bool { } func rewriteValueARM64_OpRsh32Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux16 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SRL (ZeroExt32to64 x) (ZeroExt16to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt16to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SRL, t) @@ -36754,17 +36349,14 @@ func rewriteValueARM64_OpRsh32Ux16_0(v *Value) bool { } func rewriteValueARM64_OpRsh32Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux32 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SRL (ZeroExt32to64 x) (ZeroExt32to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt32to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SRL, t) @@ -36789,17 +36381,14 @@ func rewriteValueARM64_OpRsh32Ux32_0(v *Value) bool { } func rewriteValueARM64_OpRsh32Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux64 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SRL (ZeroExt32to64 x) y) (Const64 [0]) (CMPconst [64] y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SRL, t) @@ -36820,17 +36409,14 @@ func rewriteValueARM64_OpRsh32Ux64_0(v *Value) bool { } func rewriteValueARM64_OpRsh32Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux8 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SRL (ZeroExt32to64 x) (ZeroExt8to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt8to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SRL, t) @@ -36855,16 +36441,13 @@ func rewriteValueARM64_OpRsh32Ux8_0(v *Value) bool { } func rewriteValueARM64_OpRsh32x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x16 x y) // cond: // result: (SRA (SignExt32to64 x) (CSEL {OpARM64LessThanU} (ZeroExt16to64 y) (Const64 [63]) (CMPconst [64] (ZeroExt16to64 y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SRA) v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v0.AddArg(x) @@ -36889,16 +36472,13 @@ func rewriteValueARM64_OpRsh32x16_0(v *Value) bool { } func rewriteValueARM64_OpRsh32x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x32 x y) // cond: // result: (SRA (SignExt32to64 x) (CSEL {OpARM64LessThanU} (ZeroExt32to64 y) (Const64 [63]) (CMPconst [64] (ZeroExt32to64 y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SRA) v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v0.AddArg(x) @@ -36923,16 +36503,13 @@ func rewriteValueARM64_OpRsh32x32_0(v *Value) bool { } func rewriteValueARM64_OpRsh32x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x64 x y) // cond: // result: (SRA (SignExt32to64 x) (CSEL {OpARM64LessThanU} y (Const64 [63]) (CMPconst [64] y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SRA) v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v0.AddArg(x) @@ -36953,16 +36530,13 @@ func rewriteValueARM64_OpRsh32x64_0(v *Value) bool { } func rewriteValueARM64_OpRsh32x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x8 x y) // cond: // result: (SRA (SignExt32to64 x) (CSEL {OpARM64LessThanU} (ZeroExt8to64 y) (Const64 [63]) (CMPconst [64] (ZeroExt8to64 y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SRA) v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v0.AddArg(x) @@ -36987,17 +36561,14 @@ func rewriteValueARM64_OpRsh32x8_0(v *Value) bool { } func rewriteValueARM64_OpRsh64Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux16 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SRL x (ZeroExt16to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt16to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SRL, t) @@ -37020,17 +36591,14 @@ func rewriteValueARM64_OpRsh64Ux16_0(v *Value) bool { } func rewriteValueARM64_OpRsh64Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux32 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SRL x (ZeroExt32to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt32to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SRL, t) @@ -37053,15 +36621,13 @@ func rewriteValueARM64_OpRsh64Ux32_0(v *Value) bool { } func rewriteValueARM64_OpRsh64Ux64_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh64Ux64 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SRL x y) (Const64 [0]) (CMPconst [64] y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SRL, t) @@ -37080,17 +36646,14 @@ func rewriteValueARM64_OpRsh64Ux64_0(v *Value) bool { } func rewriteValueARM64_OpRsh64Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux8 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SRL x (ZeroExt8to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt8to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SRL, t) @@ -37113,16 +36676,13 @@ func rewriteValueARM64_OpRsh64Ux8_0(v *Value) bool { } func rewriteValueARM64_OpRsh64x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x16 x y) // cond: // result: (SRA x (CSEL {OpARM64LessThanU} (ZeroExt16to64 y) (Const64 [63]) (CMPconst [64] (ZeroExt16to64 y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SRA) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpARM64CSEL, y.Type) @@ -37145,16 +36705,13 @@ func rewriteValueARM64_OpRsh64x16_0(v *Value) bool { } func rewriteValueARM64_OpRsh64x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x32 x y) // cond: // result: (SRA x (CSEL {OpARM64LessThanU} (ZeroExt32to64 y) (Const64 [63]) (CMPconst [64] (ZeroExt32to64 y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SRA) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpARM64CSEL, y.Type) @@ -37177,14 +36734,12 @@ func rewriteValueARM64_OpRsh64x32_0(v *Value) bool { } func rewriteValueARM64_OpRsh64x64_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh64x64 x y) // cond: // result: (SRA x (CSEL {OpARM64LessThanU} y (Const64 [63]) (CMPconst [64] y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SRA) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpARM64CSEL, y.Type) @@ -37203,16 +36758,13 @@ func rewriteValueARM64_OpRsh64x64_0(v *Value) bool { } func rewriteValueARM64_OpRsh64x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x8 x y) // cond: // result: (SRA x (CSEL {OpARM64LessThanU} (ZeroExt8to64 y) (Const64 [63]) (CMPconst [64] (ZeroExt8to64 y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SRA) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpARM64CSEL, y.Type) @@ -37235,17 +36787,14 @@ func rewriteValueARM64_OpRsh64x8_0(v *Value) bool { } func rewriteValueARM64_OpRsh8Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux16 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SRL (ZeroExt8to64 x) (ZeroExt16to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt16to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SRL, t) @@ -37270,17 +36819,14 @@ func rewriteValueARM64_OpRsh8Ux16_0(v *Value) bool { } func rewriteValueARM64_OpRsh8Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux32 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SRL (ZeroExt8to64 x) (ZeroExt32to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt32to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SRL, t) @@ -37305,17 +36851,14 @@ func rewriteValueARM64_OpRsh8Ux32_0(v *Value) bool { } func rewriteValueARM64_OpRsh8Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux64 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SRL (ZeroExt8to64 x) y) (Const64 [0]) (CMPconst [64] y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SRL, t) @@ -37336,17 +36879,14 @@ func rewriteValueARM64_OpRsh8Ux64_0(v *Value) bool { } func rewriteValueARM64_OpRsh8Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux8 x y) // cond: // result: (CSEL {OpARM64LessThanU} (SRL (ZeroExt8to64 x) (ZeroExt8to64 y)) (Const64 [0]) (CMPconst [64] (ZeroExt8to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64CSEL) v.Aux = OpARM64LessThanU v0 := b.NewValue0(v.Pos, OpARM64SRL, t) @@ -37371,16 +36911,13 @@ func rewriteValueARM64_OpRsh8Ux8_0(v *Value) bool { } func rewriteValueARM64_OpRsh8x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x16 x y) // cond: // result: (SRA (SignExt8to64 x) (CSEL {OpARM64LessThanU} (ZeroExt16to64 y) (Const64 [63]) (CMPconst [64] (ZeroExt16to64 y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SRA) v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) v0.AddArg(x) @@ -37405,16 +36942,13 @@ func rewriteValueARM64_OpRsh8x16_0(v *Value) bool { } func rewriteValueARM64_OpRsh8x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x32 x y) // cond: // result: (SRA (SignExt8to64 x) (CSEL {OpARM64LessThanU} (ZeroExt32to64 y) (Const64 [63]) (CMPconst [64] (ZeroExt32to64 y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SRA) v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) v0.AddArg(x) @@ -37439,16 +36973,13 @@ func rewriteValueARM64_OpRsh8x32_0(v *Value) bool { } func rewriteValueARM64_OpRsh8x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x64 x y) // cond: // result: (SRA (SignExt8to64 x) (CSEL {OpARM64LessThanU} y (Const64 [63]) (CMPconst [64] y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SRA) v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) v0.AddArg(x) @@ -37469,16 +37000,13 @@ func rewriteValueARM64_OpRsh8x64_0(v *Value) bool { } func rewriteValueARM64_OpRsh8x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x8 x y) // cond: // result: (SRA (SignExt8to64 x) (CSEL {OpARM64LessThanU} (ZeroExt8to64 y) (Const64 [63]) (CMPconst [64] (ZeroExt8to64 y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SRA) v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) v0.AddArg(x) @@ -37501,6 +37029,120 @@ func rewriteValueARM64_OpRsh8x8_0(v *Value) bool { return true } } +func rewriteValueARM64_OpSelect0_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Select0 (Add64carry x y c)) + // cond: + // result: (Select0 (ADCSflags x y (Select1 (ADDSconstflags [-1] c)))) + for { + v_0 := v.Args[0] + if v_0.Op != OpAdd64carry { + break + } + c := v_0.Args[2] + x := v_0.Args[0] + y := v_0.Args[1] + v.reset(OpSelect0) + v.Type = typ.UInt64 + v0 := b.NewValue0(v.Pos, OpARM64ADCSflags, types.NewTuple(typ.UInt64, types.TypeFlags)) + v0.AddArg(x) + v0.AddArg(y) + v1 := b.NewValue0(v.Pos, OpSelect1, types.TypeFlags) + v2 := b.NewValue0(v.Pos, OpARM64ADDSconstflags, types.NewTuple(typ.UInt64, types.TypeFlags)) + v2.AuxInt = -1 + v2.AddArg(c) + v1.AddArg(v2) + v0.AddArg(v1) + v.AddArg(v0) + return true + } + // match: (Select0 (Sub64borrow x y bo)) + // cond: + // result: (Select0 (SBCSflags x y (Select1 (NEGSflags bo)))) + for { + v_0 := v.Args[0] + if v_0.Op != OpSub64borrow { + break + } + bo := v_0.Args[2] + x := v_0.Args[0] + y := v_0.Args[1] + v.reset(OpSelect0) + v.Type = typ.UInt64 + v0 := b.NewValue0(v.Pos, OpARM64SBCSflags, types.NewTuple(typ.UInt64, types.TypeFlags)) + v0.AddArg(x) + v0.AddArg(y) + v1 := b.NewValue0(v.Pos, OpSelect1, types.TypeFlags) + v2 := b.NewValue0(v.Pos, OpARM64NEGSflags, types.NewTuple(typ.UInt64, types.TypeFlags)) + v2.AddArg(bo) + v1.AddArg(v2) + v0.AddArg(v1) + v.AddArg(v0) + return true + } + return false +} +func rewriteValueARM64_OpSelect1_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Select1 (Add64carry x y c)) + // cond: + // result: (ADCzerocarry (Select1 (ADCSflags x y (Select1 (ADDSconstflags [-1] c))))) + for { + v_0 := v.Args[0] + if v_0.Op != OpAdd64carry { + break + } + c := v_0.Args[2] + x := v_0.Args[0] + y := v_0.Args[1] + v.reset(OpARM64ADCzerocarry) + v.Type = typ.UInt64 + v0 := b.NewValue0(v.Pos, OpSelect1, types.TypeFlags) + v1 := b.NewValue0(v.Pos, OpARM64ADCSflags, types.NewTuple(typ.UInt64, types.TypeFlags)) + v1.AddArg(x) + v1.AddArg(y) + v2 := b.NewValue0(v.Pos, OpSelect1, types.TypeFlags) + v3 := b.NewValue0(v.Pos, OpARM64ADDSconstflags, types.NewTuple(typ.UInt64, types.TypeFlags)) + v3.AuxInt = -1 + v3.AddArg(c) + v2.AddArg(v3) + v1.AddArg(v2) + v0.AddArg(v1) + v.AddArg(v0) + return true + } + // match: (Select1 (Sub64borrow x y bo)) + // cond: + // result: (NEG (NGCzerocarry (Select1 (SBCSflags x y (Select1 (NEGSflags bo)))))) + for { + v_0 := v.Args[0] + if v_0.Op != OpSub64borrow { + break + } + bo := v_0.Args[2] + x := v_0.Args[0] + y := v_0.Args[1] + v.reset(OpARM64NEG) + v.Type = typ.UInt64 + v0 := b.NewValue0(v.Pos, OpARM64NGCzerocarry, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpSelect1, types.TypeFlags) + v2 := b.NewValue0(v.Pos, OpARM64SBCSflags, types.NewTuple(typ.UInt64, types.TypeFlags)) + v2.AddArg(x) + v2.AddArg(y) + v3 := b.NewValue0(v.Pos, OpSelect1, types.TypeFlags) + v4 := b.NewValue0(v.Pos, OpARM64NEGSflags, types.NewTuple(typ.UInt64, types.TypeFlags)) + v4.AddArg(bo) + v3.AddArg(v4) + v2.AddArg(v3) + v1.AddArg(v2) + v0.AddArg(v1) + v.AddArg(v0) + return true + } + return false +} func rewriteValueARM64_OpSignExt16to32_0(v *Value) bool { // match: (SignExt16to32 x) // cond: @@ -37569,7 +37211,6 @@ func rewriteValueARM64_OpSignExt8to64_0(v *Value) bool { } func rewriteValueARM64_OpSlicemask_0(v *Value) bool { b := v.Block - _ = b // match: (Slicemask x) // cond: // result: (SRAconst (NEG x) [63]) @@ -37616,10 +37257,9 @@ func rewriteValueARM64_OpStore_0(v *Value) bool { // result: (MOVBstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 1) { break } @@ -37634,10 +37274,9 @@ func rewriteValueARM64_OpStore_0(v *Value) bool { // result: (MOVHstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 2) { break } @@ -37652,10 +37291,9 @@ func rewriteValueARM64_OpStore_0(v *Value) bool { // result: (MOVWstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 4 && !is32BitFloat(val.Type)) { break } @@ -37670,10 +37308,9 @@ func rewriteValueARM64_OpStore_0(v *Value) bool { // result: (MOVDstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 8 && !is64BitFloat(val.Type)) { break } @@ -37688,10 +37325,9 @@ func rewriteValueARM64_OpStore_0(v *Value) bool { // result: (FMOVSstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 4 && is32BitFloat(val.Type)) { break } @@ -37706,10 +37342,9 @@ func rewriteValueARM64_OpStore_0(v *Value) bool { // result: (FMOVDstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 8 && is64BitFloat(val.Type)) { break } @@ -37726,9 +37361,8 @@ func rewriteValueARM64_OpSub16_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SUB) v.AddArg(x) v.AddArg(y) @@ -37740,9 +37374,8 @@ func rewriteValueARM64_OpSub32_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SUB) v.AddArg(x) v.AddArg(y) @@ -37754,9 +37387,8 @@ func rewriteValueARM64_OpSub32F_0(v *Value) bool { // cond: // result: (FSUBS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64FSUBS) v.AddArg(x) v.AddArg(y) @@ -37768,9 +37400,8 @@ func rewriteValueARM64_OpSub64_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SUB) v.AddArg(x) v.AddArg(y) @@ -37782,9 +37413,8 @@ func rewriteValueARM64_OpSub64F_0(v *Value) bool { // cond: // result: (FSUBD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64FSUBD) v.AddArg(x) v.AddArg(y) @@ -37796,9 +37426,8 @@ func rewriteValueARM64_OpSub8_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SUB) v.AddArg(x) v.AddArg(y) @@ -37810,9 +37439,8 @@ func rewriteValueARM64_OpSubPtr_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64SUB) v.AddArg(x) v.AddArg(y) @@ -37908,10 +37536,9 @@ func rewriteValueARM64_OpWB_0(v *Value) bool { // result: (LoweredWB {fn} destptr srcptr mem) for { fn := v.Aux - _ = v.Args[2] + mem := v.Args[2] destptr := v.Args[0] srcptr := v.Args[1] - mem := v.Args[2] v.reset(OpARM64LoweredWB) v.Aux = fn v.AddArg(destptr) @@ -37925,9 +37552,8 @@ func rewriteValueARM64_OpXor16_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64XOR) v.AddArg(x) v.AddArg(y) @@ -37939,9 +37565,8 @@ func rewriteValueARM64_OpXor32_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64XOR) v.AddArg(x) v.AddArg(y) @@ -37953,9 +37578,8 @@ func rewriteValueARM64_OpXor64_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64XOR) v.AddArg(x) v.AddArg(y) @@ -37967,9 +37591,8 @@ func rewriteValueARM64_OpXor8_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpARM64XOR) v.AddArg(x) v.AddArg(y) @@ -37978,9 +37601,7 @@ func rewriteValueARM64_OpXor8_0(v *Value) bool { } func rewriteValueARM64_OpZero_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Zero [0] _ mem) // cond: // result: mem @@ -37988,7 +37609,6 @@ func rewriteValueARM64_OpZero_0(v *Value) bool { if v.AuxInt != 0 { break } - _ = v.Args[1] mem := v.Args[1] v.reset(OpCopy) v.Type = mem.Type @@ -38002,9 +37622,8 @@ func rewriteValueARM64_OpZero_0(v *Value) bool { if v.AuxInt != 1 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64MOVBstore) v.AddArg(ptr) v0 := b.NewValue0(v.Pos, OpARM64MOVDconst, typ.UInt64) @@ -38020,9 +37639,8 @@ func rewriteValueARM64_OpZero_0(v *Value) bool { if v.AuxInt != 2 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64MOVHstore) v.AddArg(ptr) v0 := b.NewValue0(v.Pos, OpARM64MOVDconst, typ.UInt64) @@ -38038,9 +37656,8 @@ func rewriteValueARM64_OpZero_0(v *Value) bool { if v.AuxInt != 4 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64MOVWstore) v.AddArg(ptr) v0 := b.NewValue0(v.Pos, OpARM64MOVDconst, typ.UInt64) @@ -38056,9 +37673,8 @@ func rewriteValueARM64_OpZero_0(v *Value) bool { if v.AuxInt != 8 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64MOVDstore) v.AddArg(ptr) v0 := b.NewValue0(v.Pos, OpARM64MOVDconst, typ.UInt64) @@ -38074,9 +37690,8 @@ func rewriteValueARM64_OpZero_0(v *Value) bool { if v.AuxInt != 3 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64MOVBstore) v.AuxInt = 2 v.AddArg(ptr) @@ -38099,9 +37714,8 @@ func rewriteValueARM64_OpZero_0(v *Value) bool { if v.AuxInt != 5 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64MOVBstore) v.AuxInt = 4 v.AddArg(ptr) @@ -38124,9 +37738,8 @@ func rewriteValueARM64_OpZero_0(v *Value) bool { if v.AuxInt != 6 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64MOVHstore) v.AuxInt = 4 v.AddArg(ptr) @@ -38149,9 +37762,8 @@ func rewriteValueARM64_OpZero_0(v *Value) bool { if v.AuxInt != 7 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64MOVBstore) v.AuxInt = 6 v.AddArg(ptr) @@ -38181,9 +37793,8 @@ func rewriteValueARM64_OpZero_0(v *Value) bool { if v.AuxInt != 9 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64MOVBstore) v.AuxInt = 8 v.AddArg(ptr) @@ -38203,9 +37814,7 @@ func rewriteValueARM64_OpZero_0(v *Value) bool { } func rewriteValueARM64_OpZero_10(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Zero [10] ptr mem) // cond: // result: (MOVHstore [8] ptr (MOVDconst [0]) (MOVDstore ptr (MOVDconst [0]) mem)) @@ -38213,9 +37822,8 @@ func rewriteValueARM64_OpZero_10(v *Value) bool { if v.AuxInt != 10 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64MOVHstore) v.AuxInt = 8 v.AddArg(ptr) @@ -38238,9 +37846,8 @@ func rewriteValueARM64_OpZero_10(v *Value) bool { if v.AuxInt != 11 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64MOVBstore) v.AuxInt = 10 v.AddArg(ptr) @@ -38270,9 +37877,8 @@ func rewriteValueARM64_OpZero_10(v *Value) bool { if v.AuxInt != 12 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64MOVWstore) v.AuxInt = 8 v.AddArg(ptr) @@ -38295,9 +37901,8 @@ func rewriteValueARM64_OpZero_10(v *Value) bool { if v.AuxInt != 13 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64MOVBstore) v.AuxInt = 12 v.AddArg(ptr) @@ -38327,9 +37932,8 @@ func rewriteValueARM64_OpZero_10(v *Value) bool { if v.AuxInt != 14 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64MOVHstore) v.AuxInt = 12 v.AddArg(ptr) @@ -38359,9 +37963,8 @@ func rewriteValueARM64_OpZero_10(v *Value) bool { if v.AuxInt != 15 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64MOVBstore) v.AuxInt = 14 v.AddArg(ptr) @@ -38398,9 +38001,8 @@ func rewriteValueARM64_OpZero_10(v *Value) bool { if v.AuxInt != 16 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64STP) v.AuxInt = 0 v.AddArg(ptr) @@ -38420,9 +38022,8 @@ func rewriteValueARM64_OpZero_10(v *Value) bool { if v.AuxInt != 32 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64STP) v.AuxInt = 16 v.AddArg(ptr) @@ -38452,9 +38053,8 @@ func rewriteValueARM64_OpZero_10(v *Value) bool { if v.AuxInt != 48 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64STP) v.AuxInt = 32 v.AddArg(ptr) @@ -38494,9 +38094,8 @@ func rewriteValueARM64_OpZero_10(v *Value) bool { if v.AuxInt != 64 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpARM64STP) v.AuxInt = 48 v.AddArg(ptr) @@ -38543,17 +38142,14 @@ func rewriteValueARM64_OpZero_10(v *Value) bool { } func rewriteValueARM64_OpZero_20(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (Zero [s] ptr mem) // cond: s%16 != 0 && s%16 <= 8 && s > 16 // result: (Zero [8] (OffPtr ptr [s-8]) (Zero [s-s%16] ptr mem)) for { s := v.AuxInt - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(s%16 != 0 && s%16 <= 8 && s > 16) { break } @@ -38575,9 +38171,8 @@ func rewriteValueARM64_OpZero_20(v *Value) bool { // result: (Zero [16] (OffPtr ptr [s-16]) (Zero [s-s%16] ptr mem)) for { s := v.AuxInt - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(s%16 != 0 && s%16 > 8 && s > 16) { break } @@ -38599,9 +38194,8 @@ func rewriteValueARM64_OpZero_20(v *Value) bool { // result: (DUFFZERO [4 * (64 - s/16)] ptr mem) for { s := v.AuxInt - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(s%16 == 0 && s > 64 && s <= 16*64 && !config.noDuffDevice) { break } @@ -38616,9 +38210,8 @@ func rewriteValueARM64_OpZero_20(v *Value) bool { // result: (LoweredZero ptr (ADDconst [s-16] ptr) mem) for { s := v.AuxInt - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(s%16 == 0 && (s > 16*64 || config.noDuffDevice)) { break } @@ -38701,21 +38294,16 @@ func rewriteValueARM64_OpZeroExt8to64_0(v *Value) bool { } func rewriteBlockARM64(b *Block) bool { config := b.Func.Config - _ = config - fe := b.Func.fe - _ = fe typ := &config.Types _ = typ + v := b.Control + _ = v switch b.Kind { case BlockARM64EQ: // match: (EQ (CMPWconst [0] x:(ANDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (EQ (TSTWconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -38739,11 +38327,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (CMPconst [0] z:(AND x y)) yes no) // cond: z.Uses == 1 // result: (EQ (TST x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -38751,9 +38335,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64AND { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -38768,11 +38351,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (CMPWconst [0] z:(AND x y)) yes no) // cond: z.Uses == 1 // result: (EQ (TSTW x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -38780,9 +38359,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64AND { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -38797,11 +38375,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (CMPconst [0] x:(ANDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (EQ (TSTconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -38825,11 +38399,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (CMPconst [0] x:(ADDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (EQ (CMNconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -38853,11 +38423,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (CMPWconst [0] x:(ADDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (EQ (CMNWconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -38881,11 +38447,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (CMPconst [0] z:(ADD x y)) yes no) // cond: z.Uses == 1 // result: (EQ (CMN x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -38893,9 +38455,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64ADD { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -38910,11 +38471,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (CMPWconst [0] z:(ADD x y)) yes no) // cond: z.Uses == 1 // result: (EQ (CMNW x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -38922,9 +38479,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64ADD { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -38939,11 +38495,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (CMP x z:(NEG y)) yes no) // cond: z.Uses == 1 // result: (EQ (CMN x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMP { - break - } + for v.Op == OpARM64CMP { _ = v.Args[1] x := v.Args[0] z := v.Args[1] @@ -38965,11 +38517,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (CMPW x z:(NEG y)) yes no) // cond: z.Uses == 1 // result: (EQ (CMNW x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPW { - break - } + for v.Op == OpARM64CMPW { _ = v.Args[1] x := v.Args[0] z := v.Args[1] @@ -38991,11 +38539,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (CMPconst [0] x) yes no) // cond: // result: (Z x yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -39008,11 +38552,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (CMPWconst [0] x) yes no) // cond: // result: (ZW x yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -39025,11 +38565,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (CMPconst [0] z:(MADD a x y)) yes no) // cond: z.Uses==1 // result: (EQ (CMN a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -39037,10 +38573,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MADD { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -39058,11 +38593,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (CMPconst [0] z:(MSUB a x y)) yes no) // cond: z.Uses==1 // result: (EQ (CMP a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -39070,10 +38601,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MSUB { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -39091,11 +38621,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (CMPWconst [0] z:(MADDW a x y)) yes no) // cond: z.Uses==1 // result: (EQ (CMNW a (MULW x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -39103,10 +38629,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MADDW { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -39124,11 +38649,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (CMPWconst [0] z:(MSUBW a x y)) yes no) // cond: z.Uses==1 // result: (EQ (CMPW a (MULW x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -39136,10 +38657,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MSUBW { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -39157,11 +38677,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (TSTconst [c] x) yes no) // cond: oneBit(c) // result: (TBZ {ntz(c)} x yes no) - for { - v := b.Control - if v.Op != OpARM64TSTconst { - break - } + for v.Op == OpARM64TSTconst { c := v.AuxInt x := v.Args[0] if !(oneBit(c)) { @@ -39175,11 +38691,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (TSTWconst [c] x) yes no) // cond: oneBit(int64(uint32(c))) // result: (TBZ {ntz(int64(uint32(c)))} x yes no) - for { - v := b.Control - if v.Op != OpARM64TSTWconst { - break - } + for v.Op == OpARM64TSTWconst { c := v.AuxInt x := v.Args[0] if !(oneBit(int64(uint32(c)))) { @@ -39193,11 +38705,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagEQ { - break - } + for v.Op == OpARM64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -39206,11 +38714,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (FlagLT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagLT_ULT { - break - } + for v.Op == OpARM64FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -39220,11 +38724,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (FlagLT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagLT_UGT { - break - } + for v.Op == OpARM64FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -39234,11 +38734,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (FlagGT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagGT_ULT { - break - } + for v.Op == OpARM64FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -39248,11 +38744,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (FlagGT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagGT_UGT { - break - } + for v.Op == OpARM64FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -39262,26 +38754,62 @@ func rewriteBlockARM64(b *Block) bool { // match: (EQ (InvertFlags cmp) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != OpARM64InvertFlags { - break - } + for v.Op == OpARM64InvertFlags { cmp := v.Args[0] b.Kind = BlockARM64EQ b.SetControl(cmp) b.Aux = nil return true } + case BlockARM64FGE: + // match: (FGE (InvertFlags cmp) yes no) + // cond: + // result: (FLE cmp yes no) + for v.Op == OpARM64InvertFlags { + cmp := v.Args[0] + b.Kind = BlockARM64FLE + b.SetControl(cmp) + b.Aux = nil + return true + } + case BlockARM64FGT: + // match: (FGT (InvertFlags cmp) yes no) + // cond: + // result: (FLT cmp yes no) + for v.Op == OpARM64InvertFlags { + cmp := v.Args[0] + b.Kind = BlockARM64FLT + b.SetControl(cmp) + b.Aux = nil + return true + } + case BlockARM64FLE: + // match: (FLE (InvertFlags cmp) yes no) + // cond: + // result: (FGE cmp yes no) + for v.Op == OpARM64InvertFlags { + cmp := v.Args[0] + b.Kind = BlockARM64FGE + b.SetControl(cmp) + b.Aux = nil + return true + } + case BlockARM64FLT: + // match: (FLT (InvertFlags cmp) yes no) + // cond: + // result: (FGT cmp yes no) + for v.Op == OpARM64InvertFlags { + cmp := v.Args[0] + b.Kind = BlockARM64FGT + b.SetControl(cmp) + b.Aux = nil + return true + } case BlockARM64GE: // match: (GE (CMPWconst [0] x:(ANDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (GE (TSTWconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -39305,11 +38833,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GE (CMPconst [0] z:(AND x y)) yes no) // cond: z.Uses == 1 // result: (GE (TST x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -39317,9 +38841,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64AND { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -39334,11 +38857,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GE (CMPWconst [0] z:(AND x y)) yes no) // cond: z.Uses == 1 // result: (GE (TSTW x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -39346,9 +38865,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64AND { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -39363,11 +38881,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GE (CMPconst [0] x:(ANDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (GE (TSTconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -39391,11 +38905,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GE (CMPconst [0] x:(ADDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (GE (CMNconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -39419,11 +38929,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GE (CMPWconst [0] x:(ADDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (GE (CMNWconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -39447,11 +38953,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GE (CMPconst [0] z:(ADD x y)) yes no) // cond: z.Uses == 1 // result: (GE (CMN x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -39459,9 +38961,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64ADD { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -39476,11 +38977,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GE (CMPWconst [0] z:(ADD x y)) yes no) // cond: z.Uses == 1 // result: (GE (CMNW x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -39488,9 +38985,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64ADD { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -39505,11 +39001,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GE (CMP x z:(NEG y)) yes no) // cond: z.Uses == 1 // result: (GE (CMN x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMP { - break - } + for v.Op == OpARM64CMP { _ = v.Args[1] x := v.Args[0] z := v.Args[1] @@ -39531,11 +39023,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GE (CMPW x z:(NEG y)) yes no) // cond: z.Uses == 1 // result: (GE (CMNW x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPW { - break - } + for v.Op == OpARM64CMPW { _ = v.Args[1] x := v.Args[0] z := v.Args[1] @@ -39557,11 +39045,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GE (CMPconst [0] z:(MADD a x y)) yes no) // cond: z.Uses==1 // result: (GE (CMN a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -39569,10 +39053,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MADD { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -39590,11 +39073,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GE (CMPconst [0] z:(MSUB a x y)) yes no) // cond: z.Uses==1 // result: (GE (CMP a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -39602,10 +39081,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MSUB { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -39623,11 +39101,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GE (CMPWconst [0] z:(MADDW a x y)) yes no) // cond: z.Uses==1 // result: (GE (CMNW a (MULW x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -39635,10 +39109,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MADDW { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -39656,11 +39129,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GE (CMPWconst [0] z:(MSUBW a x y)) yes no) // cond: z.Uses==1 // result: (GE (CMPW a (MULW x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -39668,10 +39137,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MSUBW { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -39689,11 +39157,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GE (CMPWconst [0] x) yes no) // cond: // result: (TBZ {int64(31)} x yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -39706,11 +39170,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GE (CMPconst [0] x) yes no) // cond: // result: (TBZ {int64(63)} x yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -39723,11 +39183,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GE (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagEQ { - break - } + for v.Op == OpARM64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -39736,11 +39192,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GE (FlagLT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagLT_ULT { - break - } + for v.Op == OpARM64FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -39750,11 +39202,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GE (FlagLT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagLT_UGT { - break - } + for v.Op == OpARM64FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -39764,11 +39212,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GE (FlagGT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagGT_ULT { - break - } + for v.Op == OpARM64FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -39777,11 +39221,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GE (FlagGT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagGT_UGT { - break - } + for v.Op == OpARM64FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -39790,11 +39230,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GE (InvertFlags cmp) yes no) // cond: // result: (LE cmp yes no) - for { - v := b.Control - if v.Op != OpARM64InvertFlags { - break - } + for v.Op == OpARM64InvertFlags { cmp := v.Args[0] b.Kind = BlockARM64LE b.SetControl(cmp) @@ -39805,11 +39241,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GT (CMPWconst [0] x:(ANDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (GT (TSTWconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -39833,11 +39265,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GT (CMPconst [0] z:(AND x y)) yes no) // cond: z.Uses == 1 // result: (GT (TST x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -39845,9 +39273,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64AND { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -39862,11 +39289,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GT (CMPWconst [0] z:(AND x y)) yes no) // cond: z.Uses == 1 // result: (GT (TSTW x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -39874,9 +39297,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64AND { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -39891,11 +39313,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GT (CMPconst [0] x:(ANDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (GT (TSTconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -39919,11 +39337,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GT (CMPconst [0] x:(ADDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (GT (CMNconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -39947,11 +39361,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GT (CMPWconst [0] x:(ADDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (GT (CMNWconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -39975,11 +39385,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GT (CMPconst [0] z:(ADD x y)) yes no) // cond: z.Uses == 1 // result: (GT (CMN x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -39987,9 +39393,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64ADD { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -40004,11 +39409,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GT (CMPWconst [0] z:(ADD x y)) yes no) // cond: z.Uses == 1 // result: (GT (CMNW x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -40016,9 +39417,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64ADD { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -40033,11 +39433,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GT (CMP x z:(NEG y)) yes no) // cond: z.Uses == 1 // result: (GT (CMN x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMP { - break - } + for v.Op == OpARM64CMP { _ = v.Args[1] x := v.Args[0] z := v.Args[1] @@ -40059,11 +39455,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GT (CMPW x z:(NEG y)) yes no) // cond: z.Uses == 1 // result: (GT (CMNW x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPW { - break - } + for v.Op == OpARM64CMPW { _ = v.Args[1] x := v.Args[0] z := v.Args[1] @@ -40085,11 +39477,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GT (CMPconst [0] z:(MADD a x y)) yes no) // cond: z.Uses==1 // result: (GT (CMN a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -40097,10 +39485,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MADD { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -40118,11 +39505,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GT (CMPconst [0] z:(MSUB a x y)) yes no) // cond: z.Uses==1 // result: (GT (CMP a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -40130,10 +39513,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MSUB { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -40151,11 +39533,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GT (CMPWconst [0] z:(MADDW a x y)) yes no) // cond: z.Uses==1 // result: (GT (CMNW a (MULW x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -40163,10 +39541,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MADDW { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -40184,11 +39561,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GT (CMPWconst [0] z:(MSUBW a x y)) yes no) // cond: z.Uses==1 // result: (GT (CMPW a (MULW x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -40196,10 +39569,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MSUBW { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -40217,11 +39589,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GT (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagEQ { - break - } + for v.Op == OpARM64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -40231,11 +39599,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GT (FlagLT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagLT_ULT { - break - } + for v.Op == OpARM64FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -40245,11 +39609,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GT (FlagLT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagLT_UGT { - break - } + for v.Op == OpARM64FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -40259,11 +39619,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GT (FlagGT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagGT_ULT { - break - } + for v.Op == OpARM64FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -40272,11 +39628,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GT (FlagGT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagGT_UGT { - break - } + for v.Op == OpARM64FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -40285,11 +39637,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (GT (InvertFlags cmp) yes no) // cond: // result: (LT cmp yes no) - for { - v := b.Control - if v.Op != OpARM64InvertFlags { - break - } + for v.Op == OpARM64InvertFlags { cmp := v.Args[0] b.Kind = BlockARM64LT b.SetControl(cmp) @@ -40300,11 +39648,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (If (Equal cc) yes no) // cond: // result: (EQ cc yes no) - for { - v := b.Control - if v.Op != OpARM64Equal { - break - } + for v.Op == OpARM64Equal { cc := v.Args[0] b.Kind = BlockARM64EQ b.SetControl(cc) @@ -40314,11 +39658,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (If (NotEqual cc) yes no) // cond: // result: (NE cc yes no) - for { - v := b.Control - if v.Op != OpARM64NotEqual { - break - } + for v.Op == OpARM64NotEqual { cc := v.Args[0] b.Kind = BlockARM64NE b.SetControl(cc) @@ -40328,11 +39668,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (If (LessThan cc) yes no) // cond: // result: (LT cc yes no) - for { - v := b.Control - if v.Op != OpARM64LessThan { - break - } + for v.Op == OpARM64LessThan { cc := v.Args[0] b.Kind = BlockARM64LT b.SetControl(cc) @@ -40342,11 +39678,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (If (LessThanU cc) yes no) // cond: // result: (ULT cc yes no) - for { - v := b.Control - if v.Op != OpARM64LessThanU { - break - } + for v.Op == OpARM64LessThanU { cc := v.Args[0] b.Kind = BlockARM64ULT b.SetControl(cc) @@ -40356,11 +39688,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (If (LessEqual cc) yes no) // cond: // result: (LE cc yes no) - for { - v := b.Control - if v.Op != OpARM64LessEqual { - break - } + for v.Op == OpARM64LessEqual { cc := v.Args[0] b.Kind = BlockARM64LE b.SetControl(cc) @@ -40370,11 +39698,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (If (LessEqualU cc) yes no) // cond: // result: (ULE cc yes no) - for { - v := b.Control - if v.Op != OpARM64LessEqualU { - break - } + for v.Op == OpARM64LessEqualU { cc := v.Args[0] b.Kind = BlockARM64ULE b.SetControl(cc) @@ -40384,11 +39708,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (If (GreaterThan cc) yes no) // cond: // result: (GT cc yes no) - for { - v := b.Control - if v.Op != OpARM64GreaterThan { - break - } + for v.Op == OpARM64GreaterThan { cc := v.Args[0] b.Kind = BlockARM64GT b.SetControl(cc) @@ -40398,11 +39718,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (If (GreaterThanU cc) yes no) // cond: // result: (UGT cc yes no) - for { - v := b.Control - if v.Op != OpARM64GreaterThanU { - break - } + for v.Op == OpARM64GreaterThanU { cc := v.Args[0] b.Kind = BlockARM64UGT b.SetControl(cc) @@ -40412,11 +39728,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (If (GreaterEqual cc) yes no) // cond: // result: (GE cc yes no) - for { - v := b.Control - if v.Op != OpARM64GreaterEqual { - break - } + for v.Op == OpARM64GreaterEqual { cc := v.Args[0] b.Kind = BlockARM64GE b.SetControl(cc) @@ -40426,23 +39738,57 @@ func rewriteBlockARM64(b *Block) bool { // match: (If (GreaterEqualU cc) yes no) // cond: // result: (UGE cc yes no) - for { - v := b.Control - if v.Op != OpARM64GreaterEqualU { - break - } + for v.Op == OpARM64GreaterEqualU { cc := v.Args[0] b.Kind = BlockARM64UGE b.SetControl(cc) b.Aux = nil return true } + // match: (If (LessThanF cc) yes no) + // cond: + // result: (FLT cc yes no) + for v.Op == OpARM64LessThanF { + cc := v.Args[0] + b.Kind = BlockARM64FLT + b.SetControl(cc) + b.Aux = nil + return true + } + // match: (If (LessEqualF cc) yes no) + // cond: + // result: (FLE cc yes no) + for v.Op == OpARM64LessEqualF { + cc := v.Args[0] + b.Kind = BlockARM64FLE + b.SetControl(cc) + b.Aux = nil + return true + } + // match: (If (GreaterThanF cc) yes no) + // cond: + // result: (FGT cc yes no) + for v.Op == OpARM64GreaterThanF { + cc := v.Args[0] + b.Kind = BlockARM64FGT + b.SetControl(cc) + b.Aux = nil + return true + } + // match: (If (GreaterEqualF cc) yes no) + // cond: + // result: (FGE cc yes no) + for v.Op == OpARM64GreaterEqualF { + cc := v.Args[0] + b.Kind = BlockARM64FGE + b.SetControl(cc) + b.Aux = nil + return true + } // match: (If cond yes no) // cond: // result: (NZ cond yes no) for { - v := b.Control - _ = v cond := b.Control b.Kind = BlockARM64NZ b.SetControl(cond) @@ -40453,11 +39799,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LE (CMPWconst [0] x:(ANDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (LE (TSTWconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -40481,11 +39823,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LE (CMPconst [0] z:(AND x y)) yes no) // cond: z.Uses == 1 // result: (LE (TST x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -40493,9 +39831,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64AND { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -40510,11 +39847,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LE (CMPWconst [0] z:(AND x y)) yes no) // cond: z.Uses == 1 // result: (LE (TSTW x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -40522,9 +39855,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64AND { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -40539,11 +39871,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LE (CMPconst [0] x:(ANDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (LE (TSTconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -40567,11 +39895,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LE (CMPconst [0] x:(ADDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (LE (CMNconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -40595,11 +39919,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LE (CMPWconst [0] x:(ADDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (LE (CMNWconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -40623,11 +39943,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LE (CMPconst [0] z:(ADD x y)) yes no) // cond: z.Uses == 1 // result: (LE (CMN x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -40635,9 +39951,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64ADD { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -40652,11 +39967,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LE (CMPWconst [0] z:(ADD x y)) yes no) // cond: z.Uses == 1 // result: (LE (CMNW x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -40664,9 +39975,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64ADD { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -40681,11 +39991,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LE (CMP x z:(NEG y)) yes no) // cond: z.Uses == 1 // result: (LE (CMN x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMP { - break - } + for v.Op == OpARM64CMP { _ = v.Args[1] x := v.Args[0] z := v.Args[1] @@ -40707,11 +40013,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LE (CMPW x z:(NEG y)) yes no) // cond: z.Uses == 1 // result: (LE (CMNW x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPW { - break - } + for v.Op == OpARM64CMPW { _ = v.Args[1] x := v.Args[0] z := v.Args[1] @@ -40733,11 +40035,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LE (CMPconst [0] z:(MADD a x y)) yes no) // cond: z.Uses==1 // result: (LE (CMN a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -40745,10 +40043,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MADD { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -40766,11 +40063,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LE (CMPconst [0] z:(MSUB a x y)) yes no) // cond: z.Uses==1 // result: (LE (CMP a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -40778,10 +40071,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MSUB { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -40799,11 +40091,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LE (CMPWconst [0] z:(MADDW a x y)) yes no) // cond: z.Uses==1 // result: (LE (CMNW a (MULW x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -40811,10 +40099,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MADDW { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -40832,11 +40119,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LE (CMPWconst [0] z:(MSUBW a x y)) yes no) // cond: z.Uses==1 // result: (LE (CMPW a (MULW x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -40844,10 +40127,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MSUBW { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -40865,11 +40147,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LE (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagEQ { - break - } + for v.Op == OpARM64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -40878,11 +40156,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LE (FlagLT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagLT_ULT { - break - } + for v.Op == OpARM64FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -40891,11 +40165,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LE (FlagLT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagLT_UGT { - break - } + for v.Op == OpARM64FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -40904,11 +40174,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LE (FlagGT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagGT_ULT { - break - } + for v.Op == OpARM64FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -40918,11 +40184,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LE (FlagGT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagGT_UGT { - break - } + for v.Op == OpARM64FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -40932,11 +40194,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LE (InvertFlags cmp) yes no) // cond: // result: (GE cmp yes no) - for { - v := b.Control - if v.Op != OpARM64InvertFlags { - break - } + for v.Op == OpARM64InvertFlags { cmp := v.Args[0] b.Kind = BlockARM64GE b.SetControl(cmp) @@ -40947,11 +40205,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (CMPWconst [0] x:(ANDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (LT (TSTWconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -40975,11 +40229,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (CMPconst [0] z:(AND x y)) yes no) // cond: z.Uses == 1 // result: (LT (TST x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -40987,9 +40237,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64AND { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -41004,11 +40253,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (CMPWconst [0] z:(AND x y)) yes no) // cond: z.Uses == 1 // result: (LT (TSTW x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -41016,9 +40261,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64AND { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -41033,11 +40277,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (CMPconst [0] x:(ANDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (LT (TSTconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -41061,11 +40301,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (CMPconst [0] x:(ADDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (LT (CMNconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -41089,11 +40325,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (CMPWconst [0] x:(ADDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (LT (CMNWconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -41117,11 +40349,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (CMPconst [0] z:(ADD x y)) yes no) // cond: z.Uses == 1 // result: (LT (CMN x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -41129,9 +40357,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64ADD { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -41146,11 +40373,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (CMPWconst [0] z:(ADD x y)) yes no) // cond: z.Uses == 1 // result: (LT (CMNW x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -41158,9 +40381,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64ADD { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -41175,11 +40397,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (CMP x z:(NEG y)) yes no) // cond: z.Uses == 1 // result: (LT (CMN x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMP { - break - } + for v.Op == OpARM64CMP { _ = v.Args[1] x := v.Args[0] z := v.Args[1] @@ -41201,11 +40419,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (CMPW x z:(NEG y)) yes no) // cond: z.Uses == 1 // result: (LT (CMNW x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPW { - break - } + for v.Op == OpARM64CMPW { _ = v.Args[1] x := v.Args[0] z := v.Args[1] @@ -41227,11 +40441,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (CMPconst [0] z:(MADD a x y)) yes no) // cond: z.Uses==1 // result: (LT (CMN a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -41239,10 +40449,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MADD { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -41260,11 +40469,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (CMPconst [0] z:(MSUB a x y)) yes no) // cond: z.Uses==1 // result: (LT (CMP a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -41272,10 +40477,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MSUB { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -41293,11 +40497,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (CMPWconst [0] z:(MADDW a x y)) yes no) // cond: z.Uses==1 // result: (LT (CMNW a (MULW x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -41305,10 +40505,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MADDW { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -41326,11 +40525,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (CMPWconst [0] z:(MSUBW a x y)) yes no) // cond: z.Uses==1 // result: (LT (CMPW a (MULW x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -41338,10 +40533,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MSUBW { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -41359,11 +40553,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (CMPWconst [0] x) yes no) // cond: // result: (TBNZ {int64(31)} x yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -41376,11 +40566,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (CMPconst [0] x) yes no) // cond: // result: (TBNZ {int64(63)} x yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -41393,11 +40579,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagEQ { - break - } + for v.Op == OpARM64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -41407,11 +40589,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (FlagLT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagLT_ULT { - break - } + for v.Op == OpARM64FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -41420,11 +40598,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (FlagLT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagLT_UGT { - break - } + for v.Op == OpARM64FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -41433,11 +40607,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (FlagGT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagGT_ULT { - break - } + for v.Op == OpARM64FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -41447,11 +40617,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (FlagGT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagGT_UGT { - break - } + for v.Op == OpARM64FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -41461,11 +40627,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (LT (InvertFlags cmp) yes no) // cond: // result: (GT cmp yes no) - for { - v := b.Control - if v.Op != OpARM64InvertFlags { - break - } + for v.Op == OpARM64InvertFlags { cmp := v.Args[0] b.Kind = BlockARM64GT b.SetControl(cmp) @@ -41476,11 +40638,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (CMPWconst [0] x:(ANDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (NE (TSTWconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -41504,11 +40662,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (CMPconst [0] z:(AND x y)) yes no) // cond: z.Uses == 1 // result: (NE (TST x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -41516,9 +40670,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64AND { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -41533,11 +40686,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (CMPWconst [0] z:(AND x y)) yes no) // cond: z.Uses == 1 // result: (NE (TSTW x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -41545,9 +40694,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64AND { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -41562,11 +40710,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (CMPconst [0] x:(ANDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (NE (TSTconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -41590,11 +40734,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (CMPconst [0] x:(ADDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (NE (CMNconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -41618,11 +40758,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (CMPWconst [0] x:(ADDconst [c] y)) yes no) // cond: x.Uses == 1 // result: (NE (CMNWconst [c] y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -41646,11 +40782,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (CMPconst [0] z:(ADD x y)) yes no) // cond: z.Uses == 1 // result: (NE (CMN x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -41658,9 +40790,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64ADD { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -41675,11 +40806,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (CMPWconst [0] z:(ADD x y)) yes no) // cond: z.Uses == 1 // result: (NE (CMNW x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -41687,9 +40814,8 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64ADD { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -41704,11 +40830,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (CMP x z:(NEG y)) yes no) // cond: z.Uses == 1 // result: (NE (CMN x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMP { - break - } + for v.Op == OpARM64CMP { _ = v.Args[1] x := v.Args[0] z := v.Args[1] @@ -41730,11 +40852,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (CMPW x z:(NEG y)) yes no) // cond: z.Uses == 1 // result: (NE (CMNW x y) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPW { - break - } + for v.Op == OpARM64CMPW { _ = v.Args[1] x := v.Args[0] z := v.Args[1] @@ -41756,11 +40874,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (CMPconst [0] x) yes no) // cond: // result: (NZ x yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -41773,11 +40887,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (CMPWconst [0] x) yes no) // cond: // result: (NZW x yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -41790,11 +40900,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (CMPconst [0] z:(MADD a x y)) yes no) // cond: z.Uses==1 // result: (NE (CMN a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -41802,10 +40908,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MADD { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -41823,11 +40928,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (CMPconst [0] z:(MSUB a x y)) yes no) // cond: z.Uses==1 // result: (NE (CMP a (MUL x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPconst { - break - } + for v.Op == OpARM64CMPconst { if v.AuxInt != 0 { break } @@ -41835,10 +40936,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MSUB { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -41856,11 +40956,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (CMPWconst [0] z:(MADDW a x y)) yes no) // cond: z.Uses==1 // result: (NE (CMNW a (MULW x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -41868,10 +40964,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MADDW { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -41889,11 +40984,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (CMPWconst [0] z:(MSUBW a x y)) yes no) // cond: z.Uses==1 // result: (NE (CMPW a (MULW x y)) yes no) - for { - v := b.Control - if v.Op != OpARM64CMPWconst { - break - } + for v.Op == OpARM64CMPWconst { if v.AuxInt != 0 { break } @@ -41901,10 +40992,9 @@ func rewriteBlockARM64(b *Block) bool { if z.Op != OpARM64MSUBW { break } - _ = z.Args[2] + y := z.Args[2] a := z.Args[0] x := z.Args[1] - y := z.Args[2] if !(z.Uses == 1) { break } @@ -41922,11 +41012,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (TSTconst [c] x) yes no) // cond: oneBit(c) // result: (TBNZ {ntz(c)} x yes no) - for { - v := b.Control - if v.Op != OpARM64TSTconst { - break - } + for v.Op == OpARM64TSTconst { c := v.AuxInt x := v.Args[0] if !(oneBit(c)) { @@ -41940,11 +41026,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (TSTWconst [c] x) yes no) // cond: oneBit(int64(uint32(c))) // result: (TBNZ {ntz(int64(uint32(c)))} x yes no) - for { - v := b.Control - if v.Op != OpARM64TSTWconst { - break - } + for v.Op == OpARM64TSTWconst { c := v.AuxInt x := v.Args[0] if !(oneBit(int64(uint32(c)))) { @@ -41958,11 +41040,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagEQ { - break - } + for v.Op == OpARM64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -41972,11 +41050,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (FlagLT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagLT_ULT { - break - } + for v.Op == OpARM64FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -41985,11 +41059,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (FlagLT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagLT_UGT { - break - } + for v.Op == OpARM64FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -41998,11 +41068,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (FlagGT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagGT_ULT { - break - } + for v.Op == OpARM64FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42011,11 +41077,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (FlagGT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagGT_UGT { - break - } + for v.Op == OpARM64FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42024,11 +41086,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NE (InvertFlags cmp) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != OpARM64InvertFlags { - break - } + for v.Op == OpARM64InvertFlags { cmp := v.Args[0] b.Kind = BlockARM64NE b.SetControl(cmp) @@ -42039,11 +41097,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NZ (Equal cc) yes no) // cond: // result: (EQ cc yes no) - for { - v := b.Control - if v.Op != OpARM64Equal { - break - } + for v.Op == OpARM64Equal { cc := v.Args[0] b.Kind = BlockARM64EQ b.SetControl(cc) @@ -42053,11 +41107,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NZ (NotEqual cc) yes no) // cond: // result: (NE cc yes no) - for { - v := b.Control - if v.Op != OpARM64NotEqual { - break - } + for v.Op == OpARM64NotEqual { cc := v.Args[0] b.Kind = BlockARM64NE b.SetControl(cc) @@ -42067,11 +41117,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NZ (LessThan cc) yes no) // cond: // result: (LT cc yes no) - for { - v := b.Control - if v.Op != OpARM64LessThan { - break - } + for v.Op == OpARM64LessThan { cc := v.Args[0] b.Kind = BlockARM64LT b.SetControl(cc) @@ -42081,11 +41127,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NZ (LessThanU cc) yes no) // cond: // result: (ULT cc yes no) - for { - v := b.Control - if v.Op != OpARM64LessThanU { - break - } + for v.Op == OpARM64LessThanU { cc := v.Args[0] b.Kind = BlockARM64ULT b.SetControl(cc) @@ -42095,11 +41137,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NZ (LessEqual cc) yes no) // cond: // result: (LE cc yes no) - for { - v := b.Control - if v.Op != OpARM64LessEqual { - break - } + for v.Op == OpARM64LessEqual { cc := v.Args[0] b.Kind = BlockARM64LE b.SetControl(cc) @@ -42109,11 +41147,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NZ (LessEqualU cc) yes no) // cond: // result: (ULE cc yes no) - for { - v := b.Control - if v.Op != OpARM64LessEqualU { - break - } + for v.Op == OpARM64LessEqualU { cc := v.Args[0] b.Kind = BlockARM64ULE b.SetControl(cc) @@ -42123,11 +41157,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NZ (GreaterThan cc) yes no) // cond: // result: (GT cc yes no) - for { - v := b.Control - if v.Op != OpARM64GreaterThan { - break - } + for v.Op == OpARM64GreaterThan { cc := v.Args[0] b.Kind = BlockARM64GT b.SetControl(cc) @@ -42137,11 +41167,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NZ (GreaterThanU cc) yes no) // cond: // result: (UGT cc yes no) - for { - v := b.Control - if v.Op != OpARM64GreaterThanU { - break - } + for v.Op == OpARM64GreaterThanU { cc := v.Args[0] b.Kind = BlockARM64UGT b.SetControl(cc) @@ -42151,11 +41177,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NZ (GreaterEqual cc) yes no) // cond: // result: (GE cc yes no) - for { - v := b.Control - if v.Op != OpARM64GreaterEqual { - break - } + for v.Op == OpARM64GreaterEqual { cc := v.Args[0] b.Kind = BlockARM64GE b.SetControl(cc) @@ -42165,25 +41187,57 @@ func rewriteBlockARM64(b *Block) bool { // match: (NZ (GreaterEqualU cc) yes no) // cond: // result: (UGE cc yes no) - for { - v := b.Control - if v.Op != OpARM64GreaterEqualU { - break - } + for v.Op == OpARM64GreaterEqualU { cc := v.Args[0] b.Kind = BlockARM64UGE b.SetControl(cc) b.Aux = nil return true } + // match: (NZ (LessThanF cc) yes no) + // cond: + // result: (FLT cc yes no) + for v.Op == OpARM64LessThanF { + cc := v.Args[0] + b.Kind = BlockARM64FLT + b.SetControl(cc) + b.Aux = nil + return true + } + // match: (NZ (LessEqualF cc) yes no) + // cond: + // result: (FLE cc yes no) + for v.Op == OpARM64LessEqualF { + cc := v.Args[0] + b.Kind = BlockARM64FLE + b.SetControl(cc) + b.Aux = nil + return true + } + // match: (NZ (GreaterThanF cc) yes no) + // cond: + // result: (FGT cc yes no) + for v.Op == OpARM64GreaterThanF { + cc := v.Args[0] + b.Kind = BlockARM64FGT + b.SetControl(cc) + b.Aux = nil + return true + } + // match: (NZ (GreaterEqualF cc) yes no) + // cond: + // result: (FGE cc yes no) + for v.Op == OpARM64GreaterEqualF { + cc := v.Args[0] + b.Kind = BlockARM64FGE + b.SetControl(cc) + b.Aux = nil + return true + } // match: (NZ (ANDconst [c] x) yes no) // cond: oneBit(c) // result: (TBNZ {ntz(c)} x yes no) - for { - v := b.Control - if v.Op != OpARM64ANDconst { - break - } + for v.Op == OpARM64ANDconst { c := v.AuxInt x := v.Args[0] if !(oneBit(c)) { @@ -42197,11 +41251,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NZ (MOVDconst [0]) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64MOVDconst { - break - } + for v.Op == OpARM64MOVDconst { if v.AuxInt != 0 { break } @@ -42214,11 +41264,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NZ (MOVDconst [c]) yes no) // cond: c != 0 // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64MOVDconst { - break - } + for v.Op == OpARM64MOVDconst { c := v.AuxInt if !(c != 0) { break @@ -42232,11 +41278,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NZW (ANDconst [c] x) yes no) // cond: oneBit(int64(uint32(c))) // result: (TBNZ {ntz(int64(uint32(c)))} x yes no) - for { - v := b.Control - if v.Op != OpARM64ANDconst { - break - } + for v.Op == OpARM64ANDconst { c := v.AuxInt x := v.Args[0] if !(oneBit(int64(uint32(c)))) { @@ -42250,11 +41292,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NZW (MOVDconst [c]) yes no) // cond: int32(c) == 0 // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64MOVDconst { - break - } + for v.Op == OpARM64MOVDconst { c := v.AuxInt if !(int32(c) == 0) { break @@ -42268,11 +41306,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (NZW (MOVDconst [c]) yes no) // cond: int32(c) != 0 // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64MOVDconst { - break - } + for v.Op == OpARM64MOVDconst { c := v.AuxInt if !(int32(c) != 0) { break @@ -42286,11 +41320,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (UGE (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagEQ { - break - } + for v.Op == OpARM64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42299,11 +41329,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (UGE (FlagLT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagLT_ULT { - break - } + for v.Op == OpARM64FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42313,11 +41339,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (UGE (FlagLT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagLT_UGT { - break - } + for v.Op == OpARM64FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42326,11 +41348,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (UGE (FlagGT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagGT_ULT { - break - } + for v.Op == OpARM64FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42340,11 +41358,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (UGE (FlagGT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagGT_UGT { - break - } + for v.Op == OpARM64FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42353,11 +41367,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (UGE (InvertFlags cmp) yes no) // cond: // result: (ULE cmp yes no) - for { - v := b.Control - if v.Op != OpARM64InvertFlags { - break - } + for v.Op == OpARM64InvertFlags { cmp := v.Args[0] b.Kind = BlockARM64ULE b.SetControl(cmp) @@ -42368,11 +41378,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (UGT (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagEQ { - break - } + for v.Op == OpARM64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42382,11 +41388,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (UGT (FlagLT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagLT_ULT { - break - } + for v.Op == OpARM64FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42396,11 +41398,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (UGT (FlagLT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagLT_UGT { - break - } + for v.Op == OpARM64FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42409,11 +41407,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (UGT (FlagGT_ULT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagGT_ULT { - break - } + for v.Op == OpARM64FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42423,11 +41417,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (UGT (FlagGT_UGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagGT_UGT { - break - } + for v.Op == OpARM64FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42436,11 +41426,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (UGT (InvertFlags cmp) yes no) // cond: // result: (ULT cmp yes no) - for { - v := b.Control - if v.Op != OpARM64InvertFlags { - break - } + for v.Op == OpARM64InvertFlags { cmp := v.Args[0] b.Kind = BlockARM64ULT b.SetControl(cmp) @@ -42451,11 +41437,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (ULE (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagEQ { - break - } + for v.Op == OpARM64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42464,11 +41446,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (ULE (FlagLT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagLT_ULT { - break - } + for v.Op == OpARM64FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42477,11 +41455,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (ULE (FlagLT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagLT_UGT { - break - } + for v.Op == OpARM64FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42491,11 +41465,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (ULE (FlagGT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagGT_ULT { - break - } + for v.Op == OpARM64FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42504,11 +41474,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (ULE (FlagGT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagGT_UGT { - break - } + for v.Op == OpARM64FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42518,11 +41484,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (ULE (InvertFlags cmp) yes no) // cond: // result: (UGE cmp yes no) - for { - v := b.Control - if v.Op != OpARM64InvertFlags { - break - } + for v.Op == OpARM64InvertFlags { cmp := v.Args[0] b.Kind = BlockARM64UGE b.SetControl(cmp) @@ -42533,11 +41495,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (ULT (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagEQ { - break - } + for v.Op == OpARM64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42547,11 +41505,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (ULT (FlagLT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagLT_ULT { - break - } + for v.Op == OpARM64FlagLT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42560,11 +41514,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (ULT (FlagLT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagLT_UGT { - break - } + for v.Op == OpARM64FlagLT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42574,11 +41524,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (ULT (FlagGT_ULT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64FlagGT_ULT { - break - } + for v.Op == OpARM64FlagGT_ULT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42587,11 +41533,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (ULT (FlagGT_UGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64FlagGT_UGT { - break - } + for v.Op == OpARM64FlagGT_UGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42601,11 +41543,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (ULT (InvertFlags cmp) yes no) // cond: // result: (UGT cmp yes no) - for { - v := b.Control - if v.Op != OpARM64InvertFlags { - break - } + for v.Op == OpARM64InvertFlags { cmp := v.Args[0] b.Kind = BlockARM64UGT b.SetControl(cmp) @@ -42616,11 +41554,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (Z (ANDconst [c] x) yes no) // cond: oneBit(c) // result: (TBZ {ntz(c)} x yes no) - for { - v := b.Control - if v.Op != OpARM64ANDconst { - break - } + for v.Op == OpARM64ANDconst { c := v.AuxInt x := v.Args[0] if !(oneBit(c)) { @@ -42634,11 +41568,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (Z (MOVDconst [0]) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64MOVDconst { - break - } + for v.Op == OpARM64MOVDconst { if v.AuxInt != 0 { break } @@ -42650,11 +41580,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (Z (MOVDconst [c]) yes no) // cond: c != 0 // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64MOVDconst { - break - } + for v.Op == OpARM64MOVDconst { c := v.AuxInt if !(c != 0) { break @@ -42669,11 +41595,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (ZW (ANDconst [c] x) yes no) // cond: oneBit(int64(uint32(c))) // result: (TBZ {ntz(int64(uint32(c)))} x yes no) - for { - v := b.Control - if v.Op != OpARM64ANDconst { - break - } + for v.Op == OpARM64ANDconst { c := v.AuxInt x := v.Args[0] if !(oneBit(int64(uint32(c)))) { @@ -42687,11 +41609,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (ZW (MOVDconst [c]) yes no) // cond: int32(c) == 0 // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpARM64MOVDconst { - break - } + for v.Op == OpARM64MOVDconst { c := v.AuxInt if !(int32(c) == 0) { break @@ -42704,11 +41622,7 @@ func rewriteBlockARM64(b *Block) bool { // match: (ZW (MOVDconst [c]) yes no) // cond: int32(c) != 0 // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpARM64MOVDconst { - break - } + for v.Op == OpARM64MOVDconst { c := v.AuxInt if !(int32(c) != 0) { break diff --git a/src/cmd/compile/internal/ssa/rewriteMIPS.go b/src/cmd/compile/internal/ssa/rewriteMIPS.go index 55bef5a792..6e0fa2b891 100644 --- a/src/cmd/compile/internal/ssa/rewriteMIPS.go +++ b/src/cmd/compile/internal/ssa/rewriteMIPS.go @@ -405,6 +405,18 @@ func rewriteValueMIPS(v *Value) bool { return rewriteValueMIPS_OpOr8_0(v) case OpOrB: return rewriteValueMIPS_OpOrB_0(v) + case OpPanicBounds: + return rewriteValueMIPS_OpPanicBounds_0(v) + case OpPanicExtend: + return rewriteValueMIPS_OpPanicExtend_0(v) + case OpRotateLeft16: + return rewriteValueMIPS_OpRotateLeft16_0(v) + case OpRotateLeft32: + return rewriteValueMIPS_OpRotateLeft32_0(v) + case OpRotateLeft64: + return rewriteValueMIPS_OpRotateLeft64_0(v) + case OpRotateLeft8: + return rewriteValueMIPS_OpRotateLeft8_0(v) case OpRound32F: return rewriteValueMIPS_OpRound32F_0(v) case OpRound64F: @@ -523,9 +535,8 @@ func rewriteValueMIPS_OpAdd16_0(v *Value) bool { // cond: // result: (ADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSADD) v.AddArg(x) v.AddArg(y) @@ -537,9 +548,8 @@ func rewriteValueMIPS_OpAdd32_0(v *Value) bool { // cond: // result: (ADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSADD) v.AddArg(x) v.AddArg(y) @@ -551,9 +561,8 @@ func rewriteValueMIPS_OpAdd32F_0(v *Value) bool { // cond: // result: (ADDF x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSADDF) v.AddArg(x) v.AddArg(y) @@ -562,16 +571,14 @@ func rewriteValueMIPS_OpAdd32F_0(v *Value) bool { } func rewriteValueMIPS_OpAdd32withcarry_0(v *Value) bool { b := v.Block - _ = b // match: (Add32withcarry x y c) // cond: // result: (ADD c (ADD x y)) for { t := v.Type - _ = v.Args[2] + c := v.Args[2] x := v.Args[0] y := v.Args[1] - c := v.Args[2] v.reset(OpMIPSADD) v.AddArg(c) v0 := b.NewValue0(v.Pos, OpMIPSADD, t) @@ -586,9 +593,8 @@ func rewriteValueMIPS_OpAdd64F_0(v *Value) bool { // cond: // result: (ADDD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSADDD) v.AddArg(x) v.AddArg(y) @@ -600,9 +606,8 @@ func rewriteValueMIPS_OpAdd8_0(v *Value) bool { // cond: // result: (ADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSADD) v.AddArg(x) v.AddArg(y) @@ -614,9 +619,8 @@ func rewriteValueMIPS_OpAddPtr_0(v *Value) bool { // cond: // result: (ADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSADD) v.AddArg(x) v.AddArg(y) @@ -641,9 +645,8 @@ func rewriteValueMIPS_OpAnd16_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSAND) v.AddArg(x) v.AddArg(y) @@ -655,9 +658,8 @@ func rewriteValueMIPS_OpAnd32_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSAND) v.AddArg(x) v.AddArg(y) @@ -669,9 +671,8 @@ func rewriteValueMIPS_OpAnd8_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSAND) v.AddArg(x) v.AddArg(y) @@ -683,9 +684,8 @@ func rewriteValueMIPS_OpAndB_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSAND) v.AddArg(x) v.AddArg(y) @@ -697,10 +697,9 @@ func rewriteValueMIPS_OpAtomicAdd32_0(v *Value) bool { // cond: // result: (LoweredAtomicAdd ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpMIPSLoweredAtomicAdd) v.AddArg(ptr) v.AddArg(val) @@ -710,19 +709,15 @@ func rewriteValueMIPS_OpAtomicAdd32_0(v *Value) bool { } func rewriteValueMIPS_OpAtomicAnd8_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (AtomicAnd8 ptr val mem) // cond: !config.BigEndian // result: (LoweredAtomicAnd (AND (MOVWconst [^3]) ptr) (OR (SLL (ZeroExt8to32 val) (SLLconst [3] (ANDconst [3] ptr))) (NORconst [0] (SLL (MOVWconst [0xff]) (SLLconst [3] (ANDconst [3] ptr))))) mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(!config.BigEndian) { break } @@ -769,10 +764,9 @@ func rewriteValueMIPS_OpAtomicAnd8_0(v *Value) bool { // cond: config.BigEndian // result: (LoweredAtomicAnd (AND (MOVWconst [^3]) ptr) (OR (SLL (ZeroExt8to32 val) (SLLconst [3] (ANDconst [3] (XORconst [3] ptr)))) (NORconst [0] (SLL (MOVWconst [0xff]) (SLLconst [3] (ANDconst [3] (XORconst [3] ptr)))))) mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(config.BigEndian) { break } @@ -828,11 +822,10 @@ func rewriteValueMIPS_OpAtomicCompareAndSwap32_0(v *Value) bool { // cond: // result: (LoweredAtomicCas ptr old new_ mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] old := v.Args[1] new_ := v.Args[2] - mem := v.Args[3] v.reset(OpMIPSLoweredAtomicCas) v.AddArg(ptr) v.AddArg(old) @@ -846,10 +839,9 @@ func rewriteValueMIPS_OpAtomicExchange32_0(v *Value) bool { // cond: // result: (LoweredAtomicExchange ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpMIPSLoweredAtomicExchange) v.AddArg(ptr) v.AddArg(val) @@ -862,9 +854,8 @@ func rewriteValueMIPS_OpAtomicLoad32_0(v *Value) bool { // cond: // result: (LoweredAtomicLoad ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpMIPSLoweredAtomicLoad) v.AddArg(ptr) v.AddArg(mem) @@ -876,9 +867,8 @@ func rewriteValueMIPS_OpAtomicLoadPtr_0(v *Value) bool { // cond: // result: (LoweredAtomicLoad ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpMIPSLoweredAtomicLoad) v.AddArg(ptr) v.AddArg(mem) @@ -887,19 +877,15 @@ func rewriteValueMIPS_OpAtomicLoadPtr_0(v *Value) bool { } func rewriteValueMIPS_OpAtomicOr8_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (AtomicOr8 ptr val mem) // cond: !config.BigEndian // result: (LoweredAtomicOr (AND (MOVWconst [^3]) ptr) (SLL (ZeroExt8to32 val) (SLLconst [3] (ANDconst [3] ptr))) mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(!config.BigEndian) { break } @@ -929,10 +915,9 @@ func rewriteValueMIPS_OpAtomicOr8_0(v *Value) bool { // cond: config.BigEndian // result: (LoweredAtomicOr (AND (MOVWconst [^3]) ptr) (SLL (ZeroExt8to32 val) (SLLconst [3] (ANDconst [3] (XORconst [3] ptr)))) mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(config.BigEndian) { break } @@ -968,10 +953,9 @@ func rewriteValueMIPS_OpAtomicStore32_0(v *Value) bool { // cond: // result: (LoweredAtomicStore ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpMIPSLoweredAtomicStore) v.AddArg(ptr) v.AddArg(val) @@ -984,10 +968,9 @@ func rewriteValueMIPS_OpAtomicStorePtrNoWB_0(v *Value) bool { // cond: // result: (LoweredAtomicStore ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpMIPSLoweredAtomicStore) v.AddArg(ptr) v.AddArg(val) @@ -997,15 +980,13 @@ func rewriteValueMIPS_OpAtomicStorePtrNoWB_0(v *Value) bool { } func rewriteValueMIPS_OpAvg32u_0(v *Value) bool { b := v.Block - _ = b // match: (Avg32u x y) // cond: // result: (ADD (SRLconst (SUB x y) [1]) y) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSADD) v0 := b.NewValue0(v.Pos, OpMIPSSRLconst, t) v0.AuxInt = 1 @@ -1020,9 +1001,7 @@ func rewriteValueMIPS_OpAvg32u_0(v *Value) bool { } func rewriteValueMIPS_OpBitLen32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (BitLen32 x) // cond: // result: (SUB (MOVWconst [32]) (CLZ x)) @@ -1045,10 +1024,9 @@ func rewriteValueMIPS_OpClosureCall_0(v *Value) bool { // result: (CALLclosure [argwid] entry closure mem) for { argwid := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] entry := v.Args[0] closure := v.Args[1] - mem := v.Args[2] v.reset(OpMIPSCALLclosure) v.AuxInt = argwid v.AddArg(entry) @@ -1171,9 +1149,7 @@ func rewriteValueMIPS_OpConstNil_0(v *Value) bool { } func rewriteValueMIPS_OpCtz32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Ctz32 x) // cond: // result: (SUB (MOVWconst [32]) (CLZ (SUBconst [1] (AND x (NEG x))))) @@ -1277,16 +1253,13 @@ func rewriteValueMIPS_OpCvt64Fto32F_0(v *Value) bool { } func rewriteValueMIPS_OpDiv16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div16 x y) // cond: // result: (Select1 (DIV (SignExt16to32 x) (SignExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpMIPSDIV, types.NewTuple(typ.Int32, typ.Int32)) v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) @@ -1301,16 +1274,13 @@ func rewriteValueMIPS_OpDiv16_0(v *Value) bool { } func rewriteValueMIPS_OpDiv16u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div16u x y) // cond: // result: (Select1 (DIVU (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpMIPSDIVU, types.NewTuple(typ.UInt32, typ.UInt32)) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -1325,16 +1295,13 @@ func rewriteValueMIPS_OpDiv16u_0(v *Value) bool { } func rewriteValueMIPS_OpDiv32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div32 x y) // cond: // result: (Select1 (DIV x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpMIPSDIV, types.NewTuple(typ.Int32, typ.Int32)) v0.AddArg(x) @@ -1348,9 +1315,8 @@ func rewriteValueMIPS_OpDiv32F_0(v *Value) bool { // cond: // result: (DIVF x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSDIVF) v.AddArg(x) v.AddArg(y) @@ -1359,16 +1325,13 @@ func rewriteValueMIPS_OpDiv32F_0(v *Value) bool { } func rewriteValueMIPS_OpDiv32u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div32u x y) // cond: // result: (Select1 (DIVU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpMIPSDIVU, types.NewTuple(typ.UInt32, typ.UInt32)) v0.AddArg(x) @@ -1382,9 +1345,8 @@ func rewriteValueMIPS_OpDiv64F_0(v *Value) bool { // cond: // result: (DIVD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSDIVD) v.AddArg(x) v.AddArg(y) @@ -1393,16 +1355,13 @@ func rewriteValueMIPS_OpDiv64F_0(v *Value) bool { } func rewriteValueMIPS_OpDiv8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div8 x y) // cond: // result: (Select1 (DIV (SignExt8to32 x) (SignExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpMIPSDIV, types.NewTuple(typ.Int32, typ.Int32)) v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) @@ -1417,16 +1376,13 @@ func rewriteValueMIPS_OpDiv8_0(v *Value) bool { } func rewriteValueMIPS_OpDiv8u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div8u x y) // cond: // result: (Select1 (DIVU (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpMIPSDIVU, types.NewTuple(typ.UInt32, typ.UInt32)) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -1441,16 +1397,13 @@ func rewriteValueMIPS_OpDiv8u_0(v *Value) bool { } func rewriteValueMIPS_OpEq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq16 x y) // cond: // result: (SGTUconst [1] (XOR (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSGTUconst) v.AuxInt = 1 v0 := b.NewValue0(v.Pos, OpMIPSXOR, typ.UInt32) @@ -1466,16 +1419,13 @@ func rewriteValueMIPS_OpEq16_0(v *Value) bool { } func rewriteValueMIPS_OpEq32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq32 x y) // cond: // result: (SGTUconst [1] (XOR x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSGTUconst) v.AuxInt = 1 v0 := b.NewValue0(v.Pos, OpMIPSXOR, typ.UInt32) @@ -1487,14 +1437,12 @@ func rewriteValueMIPS_OpEq32_0(v *Value) bool { } func rewriteValueMIPS_OpEq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Eq32F x y) // cond: // result: (FPFlagTrue (CMPEQF x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSFPFlagTrue) v0 := b.NewValue0(v.Pos, OpMIPSCMPEQF, types.TypeFlags) v0.AddArg(x) @@ -1505,14 +1453,12 @@ func rewriteValueMIPS_OpEq32F_0(v *Value) bool { } func rewriteValueMIPS_OpEq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Eq64F x y) // cond: // result: (FPFlagTrue (CMPEQD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSFPFlagTrue) v0 := b.NewValue0(v.Pos, OpMIPSCMPEQD, types.TypeFlags) v0.AddArg(x) @@ -1523,16 +1469,13 @@ func rewriteValueMIPS_OpEq64F_0(v *Value) bool { } func rewriteValueMIPS_OpEq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq8 x y) // cond: // result: (SGTUconst [1] (XOR (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSGTUconst) v.AuxInt = 1 v0 := b.NewValue0(v.Pos, OpMIPSXOR, typ.UInt32) @@ -1548,16 +1491,13 @@ func rewriteValueMIPS_OpEq8_0(v *Value) bool { } func rewriteValueMIPS_OpEqB_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (EqB x y) // cond: // result: (XORconst [1] (XOR x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSXORconst) v.AuxInt = 1 v0 := b.NewValue0(v.Pos, OpMIPSXOR, typ.Bool) @@ -1569,16 +1509,13 @@ func rewriteValueMIPS_OpEqB_0(v *Value) bool { } func rewriteValueMIPS_OpEqPtr_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (EqPtr x y) // cond: // result: (SGTUconst [1] (XOR x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSGTUconst) v.AuxInt = 1 v0 := b.NewValue0(v.Pos, OpMIPSXOR, typ.UInt32) @@ -1590,16 +1527,13 @@ func rewriteValueMIPS_OpEqPtr_0(v *Value) bool { } func rewriteValueMIPS_OpGeq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq16 x y) // cond: // result: (XORconst [1] (SGT (SignExt16to32 y) (SignExt16to32 x))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSXORconst) v.AuxInt = 1 v0 := b.NewValue0(v.Pos, OpMIPSSGT, typ.Bool) @@ -1615,16 +1549,13 @@ func rewriteValueMIPS_OpGeq16_0(v *Value) bool { } func rewriteValueMIPS_OpGeq16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq16U x y) // cond: // result: (XORconst [1] (SGTU (ZeroExt16to32 y) (ZeroExt16to32 x))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSXORconst) v.AuxInt = 1 v0 := b.NewValue0(v.Pos, OpMIPSSGTU, typ.Bool) @@ -1640,16 +1571,13 @@ func rewriteValueMIPS_OpGeq16U_0(v *Value) bool { } func rewriteValueMIPS_OpGeq32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq32 x y) // cond: // result: (XORconst [1] (SGT y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSXORconst) v.AuxInt = 1 v0 := b.NewValue0(v.Pos, OpMIPSSGT, typ.Bool) @@ -1661,14 +1589,12 @@ func rewriteValueMIPS_OpGeq32_0(v *Value) bool { } func rewriteValueMIPS_OpGeq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Geq32F x y) // cond: // result: (FPFlagTrue (CMPGEF x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSFPFlagTrue) v0 := b.NewValue0(v.Pos, OpMIPSCMPGEF, types.TypeFlags) v0.AddArg(x) @@ -1679,16 +1605,13 @@ func rewriteValueMIPS_OpGeq32F_0(v *Value) bool { } func rewriteValueMIPS_OpGeq32U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq32U x y) // cond: // result: (XORconst [1] (SGTU y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSXORconst) v.AuxInt = 1 v0 := b.NewValue0(v.Pos, OpMIPSSGTU, typ.Bool) @@ -1700,14 +1623,12 @@ func rewriteValueMIPS_OpGeq32U_0(v *Value) bool { } func rewriteValueMIPS_OpGeq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Geq64F x y) // cond: // result: (FPFlagTrue (CMPGED x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSFPFlagTrue) v0 := b.NewValue0(v.Pos, OpMIPSCMPGED, types.TypeFlags) v0.AddArg(x) @@ -1718,16 +1639,13 @@ func rewriteValueMIPS_OpGeq64F_0(v *Value) bool { } func rewriteValueMIPS_OpGeq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq8 x y) // cond: // result: (XORconst [1] (SGT (SignExt8to32 y) (SignExt8to32 x))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSXORconst) v.AuxInt = 1 v0 := b.NewValue0(v.Pos, OpMIPSSGT, typ.Bool) @@ -1743,16 +1661,13 @@ func rewriteValueMIPS_OpGeq8_0(v *Value) bool { } func rewriteValueMIPS_OpGeq8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq8U x y) // cond: // result: (XORconst [1] (SGTU (ZeroExt8to32 y) (ZeroExt8to32 x))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSXORconst) v.AuxInt = 1 v0 := b.NewValue0(v.Pos, OpMIPSSGTU, typ.Bool) @@ -1795,16 +1710,13 @@ func rewriteValueMIPS_OpGetClosurePtr_0(v *Value) bool { } func rewriteValueMIPS_OpGreater16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater16 x y) // cond: // result: (SGT (SignExt16to32 x) (SignExt16to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSGT) v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) v0.AddArg(x) @@ -1817,16 +1729,13 @@ func rewriteValueMIPS_OpGreater16_0(v *Value) bool { } func rewriteValueMIPS_OpGreater16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater16U x y) // cond: // result: (SGTU (ZeroExt16to32 x) (ZeroExt16to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSGTU) v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) v0.AddArg(x) @@ -1842,9 +1751,8 @@ func rewriteValueMIPS_OpGreater32_0(v *Value) bool { // cond: // result: (SGT x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSGT) v.AddArg(x) v.AddArg(y) @@ -1853,14 +1761,12 @@ func rewriteValueMIPS_OpGreater32_0(v *Value) bool { } func rewriteValueMIPS_OpGreater32F_0(v *Value) bool { b := v.Block - _ = b // match: (Greater32F x y) // cond: // result: (FPFlagTrue (CMPGTF x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSFPFlagTrue) v0 := b.NewValue0(v.Pos, OpMIPSCMPGTF, types.TypeFlags) v0.AddArg(x) @@ -1874,9 +1780,8 @@ func rewriteValueMIPS_OpGreater32U_0(v *Value) bool { // cond: // result: (SGTU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSGTU) v.AddArg(x) v.AddArg(y) @@ -1885,14 +1790,12 @@ func rewriteValueMIPS_OpGreater32U_0(v *Value) bool { } func rewriteValueMIPS_OpGreater64F_0(v *Value) bool { b := v.Block - _ = b // match: (Greater64F x y) // cond: // result: (FPFlagTrue (CMPGTD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSFPFlagTrue) v0 := b.NewValue0(v.Pos, OpMIPSCMPGTD, types.TypeFlags) v0.AddArg(x) @@ -1903,16 +1806,13 @@ func rewriteValueMIPS_OpGreater64F_0(v *Value) bool { } func rewriteValueMIPS_OpGreater8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater8 x y) // cond: // result: (SGT (SignExt8to32 x) (SignExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSGT) v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) v0.AddArg(x) @@ -1925,16 +1825,13 @@ func rewriteValueMIPS_OpGreater8_0(v *Value) bool { } func rewriteValueMIPS_OpGreater8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater8U x y) // cond: // result: (SGTU (ZeroExt8to32 x) (ZeroExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSGTU) v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) v0.AddArg(x) @@ -1947,16 +1844,13 @@ func rewriteValueMIPS_OpGreater8U_0(v *Value) bool { } func rewriteValueMIPS_OpHmul32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Hmul32 x y) // cond: // result: (Select0 (MULT x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpMIPSMULT, types.NewTuple(typ.Int32, typ.Int32)) v0.AddArg(x) @@ -1967,16 +1861,13 @@ func rewriteValueMIPS_OpHmul32_0(v *Value) bool { } func rewriteValueMIPS_OpHmul32u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Hmul32u x y) // cond: // result: (Select0 (MULTU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpMIPSMULTU, types.NewTuple(typ.UInt32, typ.UInt32)) v0.AddArg(x) @@ -1991,9 +1882,8 @@ func rewriteValueMIPS_OpInterCall_0(v *Value) bool { // result: (CALLinter [argwid] entry mem) for { argwid := v.AuxInt - _ = v.Args[1] - entry := v.Args[0] mem := v.Args[1] + entry := v.Args[0] v.reset(OpMIPSCALLinter) v.AuxInt = argwid v.AddArg(entry) @@ -2006,9 +1896,8 @@ func rewriteValueMIPS_OpIsInBounds_0(v *Value) bool { // cond: // result: (SGTU len idx) for { - _ = v.Args[1] - idx := v.Args[0] len := v.Args[1] + idx := v.Args[0] v.reset(OpMIPSSGTU) v.AddArg(len) v.AddArg(idx) @@ -2017,9 +1906,7 @@ func rewriteValueMIPS_OpIsInBounds_0(v *Value) bool { } func rewriteValueMIPS_OpIsNonNil_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (IsNonNil ptr) // cond: // result: (SGTU ptr (MOVWconst [0])) @@ -2035,16 +1922,13 @@ func rewriteValueMIPS_OpIsNonNil_0(v *Value) bool { } func rewriteValueMIPS_OpIsSliceInBounds_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (IsSliceInBounds idx len) // cond: // result: (XORconst [1] (SGTU idx len)) for { - _ = v.Args[1] - idx := v.Args[0] len := v.Args[1] + idx := v.Args[0] v.reset(OpMIPSXORconst) v.AuxInt = 1 v0 := b.NewValue0(v.Pos, OpMIPSSGTU, typ.Bool) @@ -2056,16 +1940,13 @@ func rewriteValueMIPS_OpIsSliceInBounds_0(v *Value) bool { } func rewriteValueMIPS_OpLeq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq16 x y) // cond: // result: (XORconst [1] (SGT (SignExt16to32 x) (SignExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSXORconst) v.AuxInt = 1 v0 := b.NewValue0(v.Pos, OpMIPSSGT, typ.Bool) @@ -2081,16 +1962,13 @@ func rewriteValueMIPS_OpLeq16_0(v *Value) bool { } func rewriteValueMIPS_OpLeq16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq16U x y) // cond: // result: (XORconst [1] (SGTU (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSXORconst) v.AuxInt = 1 v0 := b.NewValue0(v.Pos, OpMIPSSGTU, typ.Bool) @@ -2106,16 +1984,13 @@ func rewriteValueMIPS_OpLeq16U_0(v *Value) bool { } func rewriteValueMIPS_OpLeq32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq32 x y) // cond: // result: (XORconst [1] (SGT x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSXORconst) v.AuxInt = 1 v0 := b.NewValue0(v.Pos, OpMIPSSGT, typ.Bool) @@ -2127,14 +2002,12 @@ func rewriteValueMIPS_OpLeq32_0(v *Value) bool { } func rewriteValueMIPS_OpLeq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Leq32F x y) // cond: // result: (FPFlagTrue (CMPGEF y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSFPFlagTrue) v0 := b.NewValue0(v.Pos, OpMIPSCMPGEF, types.TypeFlags) v0.AddArg(y) @@ -2145,16 +2018,13 @@ func rewriteValueMIPS_OpLeq32F_0(v *Value) bool { } func rewriteValueMIPS_OpLeq32U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq32U x y) // cond: // result: (XORconst [1] (SGTU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSXORconst) v.AuxInt = 1 v0 := b.NewValue0(v.Pos, OpMIPSSGTU, typ.Bool) @@ -2166,14 +2036,12 @@ func rewriteValueMIPS_OpLeq32U_0(v *Value) bool { } func rewriteValueMIPS_OpLeq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Leq64F x y) // cond: // result: (FPFlagTrue (CMPGED y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSFPFlagTrue) v0 := b.NewValue0(v.Pos, OpMIPSCMPGED, types.TypeFlags) v0.AddArg(y) @@ -2184,16 +2052,13 @@ func rewriteValueMIPS_OpLeq64F_0(v *Value) bool { } func rewriteValueMIPS_OpLeq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq8 x y) // cond: // result: (XORconst [1] (SGT (SignExt8to32 x) (SignExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSXORconst) v.AuxInt = 1 v0 := b.NewValue0(v.Pos, OpMIPSSGT, typ.Bool) @@ -2209,16 +2074,13 @@ func rewriteValueMIPS_OpLeq8_0(v *Value) bool { } func rewriteValueMIPS_OpLeq8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq8U x y) // cond: // result: (XORconst [1] (SGTU (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSXORconst) v.AuxInt = 1 v0 := b.NewValue0(v.Pos, OpMIPSSGTU, typ.Bool) @@ -2234,16 +2096,13 @@ func rewriteValueMIPS_OpLeq8U_0(v *Value) bool { } func rewriteValueMIPS_OpLess16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less16 x y) // cond: // result: (SGT (SignExt16to32 y) (SignExt16to32 x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSGT) v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) v0.AddArg(y) @@ -2256,16 +2115,13 @@ func rewriteValueMIPS_OpLess16_0(v *Value) bool { } func rewriteValueMIPS_OpLess16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less16U x y) // cond: // result: (SGTU (ZeroExt16to32 y) (ZeroExt16to32 x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSGTU) v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) v0.AddArg(y) @@ -2281,9 +2137,8 @@ func rewriteValueMIPS_OpLess32_0(v *Value) bool { // cond: // result: (SGT y x) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSGT) v.AddArg(y) v.AddArg(x) @@ -2292,14 +2147,12 @@ func rewriteValueMIPS_OpLess32_0(v *Value) bool { } func rewriteValueMIPS_OpLess32F_0(v *Value) bool { b := v.Block - _ = b // match: (Less32F x y) // cond: // result: (FPFlagTrue (CMPGTF y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSFPFlagTrue) v0 := b.NewValue0(v.Pos, OpMIPSCMPGTF, types.TypeFlags) v0.AddArg(y) @@ -2313,9 +2166,8 @@ func rewriteValueMIPS_OpLess32U_0(v *Value) bool { // cond: // result: (SGTU y x) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSGTU) v.AddArg(y) v.AddArg(x) @@ -2324,14 +2176,12 @@ func rewriteValueMIPS_OpLess32U_0(v *Value) bool { } func rewriteValueMIPS_OpLess64F_0(v *Value) bool { b := v.Block - _ = b // match: (Less64F x y) // cond: // result: (FPFlagTrue (CMPGTD y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSFPFlagTrue) v0 := b.NewValue0(v.Pos, OpMIPSCMPGTD, types.TypeFlags) v0.AddArg(y) @@ -2342,16 +2192,13 @@ func rewriteValueMIPS_OpLess64F_0(v *Value) bool { } func rewriteValueMIPS_OpLess8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less8 x y) // cond: // result: (SGT (SignExt8to32 y) (SignExt8to32 x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSGT) v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) v0.AddArg(y) @@ -2364,16 +2211,13 @@ func rewriteValueMIPS_OpLess8_0(v *Value) bool { } func rewriteValueMIPS_OpLess8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less8U x y) // cond: // result: (SGTU (ZeroExt8to32 y) (ZeroExt8to32 x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSGTU) v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) v0.AddArg(y) @@ -2390,9 +2234,8 @@ func rewriteValueMIPS_OpLoad_0(v *Value) bool { // result: (MOVBUload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.IsBoolean()) { break } @@ -2406,9 +2249,8 @@ func rewriteValueMIPS_OpLoad_0(v *Value) bool { // result: (MOVBload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is8BitInt(t) && isSigned(t)) { break } @@ -2422,9 +2264,8 @@ func rewriteValueMIPS_OpLoad_0(v *Value) bool { // result: (MOVBUload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is8BitInt(t) && !isSigned(t)) { break } @@ -2438,9 +2279,8 @@ func rewriteValueMIPS_OpLoad_0(v *Value) bool { // result: (MOVHload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is16BitInt(t) && isSigned(t)) { break } @@ -2454,9 +2294,8 @@ func rewriteValueMIPS_OpLoad_0(v *Value) bool { // result: (MOVHUload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is16BitInt(t) && !isSigned(t)) { break } @@ -2470,9 +2309,8 @@ func rewriteValueMIPS_OpLoad_0(v *Value) bool { // result: (MOVWload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is32BitInt(t) || isPtr(t)) { break } @@ -2486,9 +2324,8 @@ func rewriteValueMIPS_OpLoad_0(v *Value) bool { // result: (MOVFload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is32BitFloat(t)) { break } @@ -2502,9 +2339,8 @@ func rewriteValueMIPS_OpLoad_0(v *Value) bool { // result: (MOVDload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is64BitFloat(t)) { break } @@ -2531,17 +2367,14 @@ func rewriteValueMIPS_OpLocalAddr_0(v *Value) bool { } func rewriteValueMIPS_OpLsh16x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x16 x y) // cond: // result: (CMOVZ (SLL x (ZeroExt16to32 y) ) (MOVWconst [0]) (SGTUconst [32] (ZeroExt16to32 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSCMOVZ) v0 := b.NewValue0(v.Pos, OpMIPSSLL, t) v0.AddArg(x) @@ -2563,17 +2396,14 @@ func rewriteValueMIPS_OpLsh16x16_0(v *Value) bool { } func rewriteValueMIPS_OpLsh16x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x32 x y) // cond: // result: (CMOVZ (SLL x y) (MOVWconst [0]) (SGTUconst [32] y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSCMOVZ) v0 := b.NewValue0(v.Pos, OpMIPSSLL, t) v0.AddArg(x) @@ -2630,17 +2460,14 @@ func rewriteValueMIPS_OpLsh16x64_0(v *Value) bool { } func rewriteValueMIPS_OpLsh16x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x8 x y) // cond: // result: (CMOVZ (SLL x (ZeroExt8to32 y) ) (MOVWconst [0]) (SGTUconst [32] (ZeroExt8to32 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSCMOVZ) v0 := b.NewValue0(v.Pos, OpMIPSSLL, t) v0.AddArg(x) @@ -2662,17 +2489,14 @@ func rewriteValueMIPS_OpLsh16x8_0(v *Value) bool { } func rewriteValueMIPS_OpLsh32x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x16 x y) // cond: // result: (CMOVZ (SLL x (ZeroExt16to32 y) ) (MOVWconst [0]) (SGTUconst [32] (ZeroExt16to32 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSCMOVZ) v0 := b.NewValue0(v.Pos, OpMIPSSLL, t) v0.AddArg(x) @@ -2694,17 +2518,14 @@ func rewriteValueMIPS_OpLsh32x16_0(v *Value) bool { } func rewriteValueMIPS_OpLsh32x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x32 x y) // cond: // result: (CMOVZ (SLL x y) (MOVWconst [0]) (SGTUconst [32] y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSCMOVZ) v0 := b.NewValue0(v.Pos, OpMIPSSLL, t) v0.AddArg(x) @@ -2761,17 +2582,14 @@ func rewriteValueMIPS_OpLsh32x64_0(v *Value) bool { } func rewriteValueMIPS_OpLsh32x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x8 x y) // cond: // result: (CMOVZ (SLL x (ZeroExt8to32 y) ) (MOVWconst [0]) (SGTUconst [32] (ZeroExt8to32 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSCMOVZ) v0 := b.NewValue0(v.Pos, OpMIPSSLL, t) v0.AddArg(x) @@ -2793,17 +2611,14 @@ func rewriteValueMIPS_OpLsh32x8_0(v *Value) bool { } func rewriteValueMIPS_OpLsh8x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x16 x y) // cond: // result: (CMOVZ (SLL x (ZeroExt16to32 y) ) (MOVWconst [0]) (SGTUconst [32] (ZeroExt16to32 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSCMOVZ) v0 := b.NewValue0(v.Pos, OpMIPSSLL, t) v0.AddArg(x) @@ -2825,17 +2640,14 @@ func rewriteValueMIPS_OpLsh8x16_0(v *Value) bool { } func rewriteValueMIPS_OpLsh8x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x32 x y) // cond: // result: (CMOVZ (SLL x y) (MOVWconst [0]) (SGTUconst [32] y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSCMOVZ) v0 := b.NewValue0(v.Pos, OpMIPSSLL, t) v0.AddArg(x) @@ -2892,17 +2704,14 @@ func rewriteValueMIPS_OpLsh8x64_0(v *Value) bool { } func rewriteValueMIPS_OpLsh8x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x8 x y) // cond: // result: (CMOVZ (SLL x (ZeroExt8to32 y) ) (MOVWconst [0]) (SGTUconst [32] (ZeroExt8to32 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSCMOVZ) v0 := b.NewValue0(v.Pos, OpMIPSSLL, t) v0.AddArg(x) @@ -2943,13 +2752,12 @@ func rewriteValueMIPS_OpMIPSADD_0(v *Value) bool { // cond: // result: (ADDconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpMIPSADDconst) v.AuxInt = c v.AddArg(x) @@ -2975,13 +2783,12 @@ func rewriteValueMIPS_OpMIPSADD_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSNEG { break } y := v_0.Args[0] - x := v.Args[1] v.reset(OpMIPSSUB) v.AddArg(x) v.AddArg(y) @@ -3071,7 +2878,6 @@ func rewriteValueMIPS_OpMIPSADDconst_0(v *Value) bool { } func rewriteValueMIPS_OpMIPSAND_0(v *Value) bool { b := v.Block - _ = b // match: (AND x (MOVWconst [c])) // cond: // result: (ANDconst [c] x) @@ -3092,13 +2898,12 @@ func rewriteValueMIPS_OpMIPSAND_0(v *Value) bool { // cond: // result: (ANDconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpMIPSANDconst) v.AuxInt = c v.AddArg(x) @@ -3108,9 +2913,8 @@ func rewriteValueMIPS_OpMIPSAND_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -3236,14 +3040,12 @@ func rewriteValueMIPS_OpMIPSANDconst_0(v *Value) bool { return false } func rewriteValueMIPS_OpMIPSCMOVZ_0(v *Value) bool { - b := v.Block - _ = b - // match: (CMOVZ _ b (MOVWconst [0])) + // match: (CMOVZ _ f (MOVWconst [0])) // cond: - // result: b + // result: f for { _ = v.Args[2] - b := v.Args[1] + f := v.Args[1] v_2 := v.Args[2] if v_2.Op != OpMIPSMOVWconst { break @@ -3252,8 +3054,8 @@ func rewriteValueMIPS_OpMIPSCMOVZ_0(v *Value) bool { break } v.reset(OpCopy) - v.Type = b.Type - v.AddArg(b) + v.Type = f.Type + v.AddArg(f) return true } // match: (CMOVZ a _ (MOVWconst [c])) @@ -3279,7 +3081,7 @@ func rewriteValueMIPS_OpMIPSCMOVZ_0(v *Value) bool { // cond: // result: (CMOVZzero a c) for { - _ = v.Args[2] + c := v.Args[2] a := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPSMOVWconst { @@ -3288,7 +3090,6 @@ func rewriteValueMIPS_OpMIPSCMOVZ_0(v *Value) bool { if v_1.AuxInt != 0 { break } - c := v.Args[2] v.reset(OpMIPSCMOVZzero) v.AddArg(a) v.AddArg(c) @@ -3339,14 +3140,13 @@ func rewriteValueMIPS_OpMIPSLoweredAtomicAdd_0(v *Value) bool { // cond: is16Bit(c) // result: (LoweredAtomicAddconst [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPSMOVWconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is16Bit(c)) { break } @@ -3363,7 +3163,7 @@ func rewriteValueMIPS_OpMIPSLoweredAtomicStore_0(v *Value) bool { // cond: // result: (LoweredAtomicStorezero ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPSMOVWconst { @@ -3372,7 +3172,6 @@ func rewriteValueMIPS_OpMIPSLoweredAtomicStore_0(v *Value) bool { if v_1.AuxInt != 0 { break } - mem := v.Args[2] v.reset(OpMIPSLoweredAtomicStorezero) v.AddArg(ptr) v.AddArg(mem) @@ -3387,14 +3186,13 @@ func rewriteValueMIPS_OpMIPSMOVBUload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] x := v.Args[0] if x.Op != OpMIPSADDconst { break } off2 := x.AuxInt ptr := x.Args[0] - mem := v.Args[1] if !(is16Bit(off1+off2) || x.Uses == 1) { break } @@ -3411,7 +3209,7 @@ func rewriteValueMIPS_OpMIPSMOVBUload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWaddr { break @@ -3419,7 +3217,6 @@ func rewriteValueMIPS_OpMIPSMOVBUload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2)) { break } @@ -3458,7 +3255,6 @@ func rewriteValueMIPS_OpMIPSMOVBUload_0(v *Value) bool { } func rewriteValueMIPS_OpMIPSMOVBUreg_0(v *Value) bool { b := v.Block - _ = b // match: (MOVBUreg x:(MOVBUload _ _)) // cond: // result: (MOVWreg x) @@ -3495,9 +3291,8 @@ func rewriteValueMIPS_OpMIPSMOVBUreg_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -3548,14 +3343,13 @@ func rewriteValueMIPS_OpMIPSMOVBload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] x := v.Args[0] if x.Op != OpMIPSADDconst { break } off2 := x.AuxInt ptr := x.Args[0] - mem := v.Args[1] if !(is16Bit(off1+off2) || x.Uses == 1) { break } @@ -3572,7 +3366,7 @@ func rewriteValueMIPS_OpMIPSMOVBload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWaddr { break @@ -3580,7 +3374,6 @@ func rewriteValueMIPS_OpMIPSMOVBload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2)) { break } @@ -3619,7 +3412,6 @@ func rewriteValueMIPS_OpMIPSMOVBload_0(v *Value) bool { } func rewriteValueMIPS_OpMIPSMOVBreg_0(v *Value) bool { b := v.Block - _ = b // match: (MOVBreg x:(MOVBload _ _)) // cond: // result: (MOVWreg x) @@ -3656,9 +3448,8 @@ func rewriteValueMIPS_OpMIPSMOVBreg_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -3712,7 +3503,7 @@ func rewriteValueMIPS_OpMIPSMOVBstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] if x.Op != OpMIPSADDconst { break @@ -3720,7 +3511,6 @@ func rewriteValueMIPS_OpMIPSMOVBstore_0(v *Value) bool { off2 := x.AuxInt ptr := x.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is16Bit(off1+off2) || x.Uses == 1) { break } @@ -3738,7 +3528,7 @@ func rewriteValueMIPS_OpMIPSMOVBstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWaddr { break @@ -3747,7 +3537,6 @@ func rewriteValueMIPS_OpMIPSMOVBstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2)) { break } @@ -3765,7 +3554,7 @@ func rewriteValueMIPS_OpMIPSMOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPSMOVWconst { @@ -3774,7 +3563,6 @@ func rewriteValueMIPS_OpMIPSMOVBstore_0(v *Value) bool { if v_1.AuxInt != 0 { break } - mem := v.Args[2] v.reset(OpMIPSMOVBstorezero) v.AuxInt = off v.Aux = sym @@ -3788,14 +3576,13 @@ func rewriteValueMIPS_OpMIPSMOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPSMOVBreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpMIPSMOVBstore) v.AuxInt = off v.Aux = sym @@ -3810,14 +3597,13 @@ func rewriteValueMIPS_OpMIPSMOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPSMOVBUreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpMIPSMOVBstore) v.AuxInt = off v.Aux = sym @@ -3832,14 +3618,13 @@ func rewriteValueMIPS_OpMIPSMOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPSMOVHreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpMIPSMOVBstore) v.AuxInt = off v.Aux = sym @@ -3854,14 +3639,13 @@ func rewriteValueMIPS_OpMIPSMOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPSMOVHUreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpMIPSMOVBstore) v.AuxInt = off v.Aux = sym @@ -3876,14 +3660,13 @@ func rewriteValueMIPS_OpMIPSMOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPSMOVWreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpMIPSMOVBstore) v.AuxInt = off v.Aux = sym @@ -3901,14 +3684,13 @@ func rewriteValueMIPS_OpMIPSMOVBstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] x := v.Args[0] if x.Op != OpMIPSADDconst { break } off2 := x.AuxInt ptr := x.Args[0] - mem := v.Args[1] if !(is16Bit(off1+off2) || x.Uses == 1) { break } @@ -3925,7 +3707,7 @@ func rewriteValueMIPS_OpMIPSMOVBstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWaddr { break @@ -3933,7 +3715,6 @@ func rewriteValueMIPS_OpMIPSMOVBstorezero_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2)) { break } @@ -3953,14 +3734,13 @@ func rewriteValueMIPS_OpMIPSMOVDload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] x := v.Args[0] if x.Op != OpMIPSADDconst { break } off2 := x.AuxInt ptr := x.Args[0] - mem := v.Args[1] if !(is16Bit(off1+off2) || x.Uses == 1) { break } @@ -3977,7 +3757,7 @@ func rewriteValueMIPS_OpMIPSMOVDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWaddr { break @@ -3985,7 +3765,6 @@ func rewriteValueMIPS_OpMIPSMOVDload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2)) { break } @@ -4030,7 +3809,7 @@ func rewriteValueMIPS_OpMIPSMOVDstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] if x.Op != OpMIPSADDconst { break @@ -4038,7 +3817,6 @@ func rewriteValueMIPS_OpMIPSMOVDstore_0(v *Value) bool { off2 := x.AuxInt ptr := x.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is16Bit(off1+off2) || x.Uses == 1) { break } @@ -4056,7 +3834,7 @@ func rewriteValueMIPS_OpMIPSMOVDstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWaddr { break @@ -4065,7 +3843,6 @@ func rewriteValueMIPS_OpMIPSMOVDstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2)) { break } @@ -4086,14 +3863,13 @@ func rewriteValueMIPS_OpMIPSMOVFload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] x := v.Args[0] if x.Op != OpMIPSADDconst { break } off2 := x.AuxInt ptr := x.Args[0] - mem := v.Args[1] if !(is16Bit(off1+off2) || x.Uses == 1) { break } @@ -4110,7 +3886,7 @@ func rewriteValueMIPS_OpMIPSMOVFload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWaddr { break @@ -4118,7 +3894,6 @@ func rewriteValueMIPS_OpMIPSMOVFload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2)) { break } @@ -4163,7 +3938,7 @@ func rewriteValueMIPS_OpMIPSMOVFstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] if x.Op != OpMIPSADDconst { break @@ -4171,7 +3946,6 @@ func rewriteValueMIPS_OpMIPSMOVFstore_0(v *Value) bool { off2 := x.AuxInt ptr := x.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is16Bit(off1+off2) || x.Uses == 1) { break } @@ -4189,7 +3963,7 @@ func rewriteValueMIPS_OpMIPSMOVFstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWaddr { break @@ -4198,7 +3972,6 @@ func rewriteValueMIPS_OpMIPSMOVFstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2)) { break } @@ -4219,14 +3992,13 @@ func rewriteValueMIPS_OpMIPSMOVHUload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] x := v.Args[0] if x.Op != OpMIPSADDconst { break } off2 := x.AuxInt ptr := x.Args[0] - mem := v.Args[1] if !(is16Bit(off1+off2) || x.Uses == 1) { break } @@ -4243,7 +4015,7 @@ func rewriteValueMIPS_OpMIPSMOVHUload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWaddr { break @@ -4251,7 +4023,6 @@ func rewriteValueMIPS_OpMIPSMOVHUload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2)) { break } @@ -4290,7 +4061,6 @@ func rewriteValueMIPS_OpMIPSMOVHUload_0(v *Value) bool { } func rewriteValueMIPS_OpMIPSMOVHUreg_0(v *Value) bool { b := v.Block - _ = b // match: (MOVHUreg x:(MOVBUload _ _)) // cond: // result: (MOVWreg x) @@ -4352,9 +4122,8 @@ func rewriteValueMIPS_OpMIPSMOVHUreg_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -4405,14 +4174,13 @@ func rewriteValueMIPS_OpMIPSMOVHload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] x := v.Args[0] if x.Op != OpMIPSADDconst { break } off2 := x.AuxInt ptr := x.Args[0] - mem := v.Args[1] if !(is16Bit(off1+off2) || x.Uses == 1) { break } @@ -4429,7 +4197,7 @@ func rewriteValueMIPS_OpMIPSMOVHload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWaddr { break @@ -4437,7 +4205,6 @@ func rewriteValueMIPS_OpMIPSMOVHload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2)) { break } @@ -4476,7 +4243,6 @@ func rewriteValueMIPS_OpMIPSMOVHload_0(v *Value) bool { } func rewriteValueMIPS_OpMIPSMOVHreg_0(v *Value) bool { b := v.Block - _ = b // match: (MOVHreg x:(MOVBload _ _)) // cond: // result: (MOVWreg x) @@ -4563,9 +4329,8 @@ func rewriteValueMIPS_OpMIPSMOVHreg_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -4619,7 +4384,7 @@ func rewriteValueMIPS_OpMIPSMOVHstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] if x.Op != OpMIPSADDconst { break @@ -4627,7 +4392,6 @@ func rewriteValueMIPS_OpMIPSMOVHstore_0(v *Value) bool { off2 := x.AuxInt ptr := x.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is16Bit(off1+off2) || x.Uses == 1) { break } @@ -4645,7 +4409,7 @@ func rewriteValueMIPS_OpMIPSMOVHstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWaddr { break @@ -4654,7 +4418,6 @@ func rewriteValueMIPS_OpMIPSMOVHstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2)) { break } @@ -4672,7 +4435,7 @@ func rewriteValueMIPS_OpMIPSMOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPSMOVWconst { @@ -4681,7 +4444,6 @@ func rewriteValueMIPS_OpMIPSMOVHstore_0(v *Value) bool { if v_1.AuxInt != 0 { break } - mem := v.Args[2] v.reset(OpMIPSMOVHstorezero) v.AuxInt = off v.Aux = sym @@ -4695,14 +4457,13 @@ func rewriteValueMIPS_OpMIPSMOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPSMOVHreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpMIPSMOVHstore) v.AuxInt = off v.Aux = sym @@ -4717,14 +4478,13 @@ func rewriteValueMIPS_OpMIPSMOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPSMOVHUreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpMIPSMOVHstore) v.AuxInt = off v.Aux = sym @@ -4739,14 +4499,13 @@ func rewriteValueMIPS_OpMIPSMOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPSMOVWreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpMIPSMOVHstore) v.AuxInt = off v.Aux = sym @@ -4764,14 +4523,13 @@ func rewriteValueMIPS_OpMIPSMOVHstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] x := v.Args[0] if x.Op != OpMIPSADDconst { break } off2 := x.AuxInt ptr := x.Args[0] - mem := v.Args[1] if !(is16Bit(off1+off2) || x.Uses == 1) { break } @@ -4788,7 +4546,7 @@ func rewriteValueMIPS_OpMIPSMOVHstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWaddr { break @@ -4796,7 +4554,6 @@ func rewriteValueMIPS_OpMIPSMOVHstorezero_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2)) { break } @@ -4816,14 +4573,13 @@ func rewriteValueMIPS_OpMIPSMOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] x := v.Args[0] if x.Op != OpMIPSADDconst { break } off2 := x.AuxInt ptr := x.Args[0] - mem := v.Args[1] if !(is16Bit(off1+off2) || x.Uses == 1) { break } @@ -4840,7 +4596,7 @@ func rewriteValueMIPS_OpMIPSMOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWaddr { break @@ -4848,7 +4604,6 @@ func rewriteValueMIPS_OpMIPSMOVWload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2)) { break } @@ -4921,7 +4676,7 @@ func rewriteValueMIPS_OpMIPSMOVWstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] if x.Op != OpMIPSADDconst { break @@ -4929,7 +4684,6 @@ func rewriteValueMIPS_OpMIPSMOVWstore_0(v *Value) bool { off2 := x.AuxInt ptr := x.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is16Bit(off1+off2) || x.Uses == 1) { break } @@ -4947,7 +4701,7 @@ func rewriteValueMIPS_OpMIPSMOVWstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWaddr { break @@ -4956,7 +4710,6 @@ func rewriteValueMIPS_OpMIPSMOVWstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2)) { break } @@ -4974,7 +4727,7 @@ func rewriteValueMIPS_OpMIPSMOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPSMOVWconst { @@ -4983,7 +4736,6 @@ func rewriteValueMIPS_OpMIPSMOVWstore_0(v *Value) bool { if v_1.AuxInt != 0 { break } - mem := v.Args[2] v.reset(OpMIPSMOVWstorezero) v.AuxInt = off v.Aux = sym @@ -4997,14 +4749,13 @@ func rewriteValueMIPS_OpMIPSMOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPSMOVWreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpMIPSMOVWstore) v.AuxInt = off v.Aux = sym @@ -5022,14 +4773,13 @@ func rewriteValueMIPS_OpMIPSMOVWstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] x := v.Args[0] if x.Op != OpMIPSADDconst { break } off2 := x.AuxInt ptr := x.Args[0] - mem := v.Args[1] if !(is16Bit(off1+off2) || x.Uses == 1) { break } @@ -5046,7 +4796,7 @@ func rewriteValueMIPS_OpMIPSMOVWstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWaddr { break @@ -5054,7 +4804,6 @@ func rewriteValueMIPS_OpMIPSMOVWstorezero_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2)) { break } @@ -5104,7 +4853,7 @@ func rewriteValueMIPS_OpMIPSMUL_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWconst { break @@ -5112,7 +4861,6 @@ func rewriteValueMIPS_OpMIPSMUL_0(v *Value) bool { if v_0.AuxInt != 1 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -5140,7 +4888,7 @@ func rewriteValueMIPS_OpMIPSMUL_0(v *Value) bool { // cond: // result: (NEG x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWconst { break @@ -5148,7 +4896,6 @@ func rewriteValueMIPS_OpMIPSMUL_0(v *Value) bool { if v_0.AuxInt != -1 { break } - x := v.Args[1] v.reset(OpMIPSNEG) v.AddArg(x) return true @@ -5174,13 +4921,12 @@ func rewriteValueMIPS_OpMIPSMUL_0(v *Value) bool { // cond: isPowerOfTwo(int64(uint32(c))) // result: (SLLconst [log2(int64(uint32(c)))] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isPowerOfTwo(int64(uint32(c)))) { break } @@ -5285,13 +5031,12 @@ func rewriteValueMIPS_OpMIPSNOR_0(v *Value) bool { // cond: // result: (NORconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpMIPSNORconst) v.AuxInt = c v.AddArg(x) @@ -5318,7 +5063,6 @@ func rewriteValueMIPS_OpMIPSNORconst_0(v *Value) bool { } func rewriteValueMIPS_OpMIPSOR_0(v *Value) bool { b := v.Block - _ = b // match: (OR x (MOVWconst [c])) // cond: // result: (ORconst [c] x) @@ -5339,13 +5083,12 @@ func rewriteValueMIPS_OpMIPSOR_0(v *Value) bool { // cond: // result: (ORconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpMIPSORconst) v.AuxInt = c v.AddArg(x) @@ -5355,9 +5098,8 @@ func rewriteValueMIPS_OpMIPSOR_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -5473,13 +5215,12 @@ func rewriteValueMIPS_OpMIPSSGT_0(v *Value) bool { // cond: // result: (SGTconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpMIPSSGTconst) v.AuxInt = c v.AddArg(x) @@ -5509,13 +5250,12 @@ func rewriteValueMIPS_OpMIPSSGTU_0(v *Value) bool { // cond: // result: (SGTUconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpMIPSSGTUconst) v.AuxInt = c v.AddArg(x) @@ -6097,9 +5837,8 @@ func rewriteValueMIPS_OpMIPSSUB_0(v *Value) bool { // cond: // result: (MOVWconst [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpMIPSMOVWconst) @@ -6110,7 +5849,7 @@ func rewriteValueMIPS_OpMIPSSUB_0(v *Value) bool { // cond: // result: (NEG x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWconst { break @@ -6118,7 +5857,6 @@ func rewriteValueMIPS_OpMIPSSUB_0(v *Value) bool { if v_0.AuxInt != 0 { break } - x := v.Args[1] v.reset(OpMIPSNEG) v.AddArg(x) return true @@ -6208,13 +5946,12 @@ func rewriteValueMIPS_OpMIPSXOR_0(v *Value) bool { // cond: // result: (XORconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPSMOVWconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpMIPSXORconst) v.AuxInt = c v.AddArg(x) @@ -6224,9 +5961,8 @@ func rewriteValueMIPS_OpMIPSXOR_0(v *Value) bool { // cond: // result: (MOVWconst [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpMIPSMOVWconst) @@ -6296,16 +6032,13 @@ func rewriteValueMIPS_OpMIPSXORconst_0(v *Value) bool { } func rewriteValueMIPS_OpMod16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod16 x y) // cond: // result: (Select0 (DIV (SignExt16to32 x) (SignExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpMIPSDIV, types.NewTuple(typ.Int32, typ.Int32)) v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) @@ -6320,16 +6053,13 @@ func rewriteValueMIPS_OpMod16_0(v *Value) bool { } func rewriteValueMIPS_OpMod16u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod16u x y) // cond: // result: (Select0 (DIVU (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpMIPSDIVU, types.NewTuple(typ.UInt32, typ.UInt32)) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -6344,16 +6074,13 @@ func rewriteValueMIPS_OpMod16u_0(v *Value) bool { } func rewriteValueMIPS_OpMod32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod32 x y) // cond: // result: (Select0 (DIV x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpMIPSDIV, types.NewTuple(typ.Int32, typ.Int32)) v0.AddArg(x) @@ -6364,16 +6091,13 @@ func rewriteValueMIPS_OpMod32_0(v *Value) bool { } func rewriteValueMIPS_OpMod32u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod32u x y) // cond: // result: (Select0 (DIVU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpMIPSDIVU, types.NewTuple(typ.UInt32, typ.UInt32)) v0.AddArg(x) @@ -6384,16 +6108,13 @@ func rewriteValueMIPS_OpMod32u_0(v *Value) bool { } func rewriteValueMIPS_OpMod8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod8 x y) // cond: // result: (Select0 (DIV (SignExt8to32 x) (SignExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpMIPSDIV, types.NewTuple(typ.Int32, typ.Int32)) v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) @@ -6408,16 +6129,13 @@ func rewriteValueMIPS_OpMod8_0(v *Value) bool { } func rewriteValueMIPS_OpMod8u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod8u x y) // cond: // result: (Select0 (DIVU (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpMIPSDIVU, types.NewTuple(typ.UInt32, typ.UInt32)) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -6432,9 +6150,7 @@ func rewriteValueMIPS_OpMod8u_0(v *Value) bool { } func rewriteValueMIPS_OpMove_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Move [0] _ _ mem) // cond: // result: mem @@ -6442,7 +6158,6 @@ func rewriteValueMIPS_OpMove_0(v *Value) bool { if v.AuxInt != 0 { break } - _ = v.Args[2] mem := v.Args[2] v.reset(OpCopy) v.Type = mem.Type @@ -6456,10 +6171,9 @@ func rewriteValueMIPS_OpMove_0(v *Value) bool { if v.AuxInt != 1 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpMIPSMOVBstore) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpMIPSMOVBUload, typ.UInt8) @@ -6477,10 +6191,9 @@ func rewriteValueMIPS_OpMove_0(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%2 == 0) { break } @@ -6500,10 +6213,9 @@ func rewriteValueMIPS_OpMove_0(v *Value) bool { if v.AuxInt != 2 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpMIPSMOVBstore) v.AuxInt = 1 v.AddArg(dst) @@ -6530,10 +6242,9 @@ func rewriteValueMIPS_OpMove_0(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -6554,10 +6265,9 @@ func rewriteValueMIPS_OpMove_0(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%2 == 0) { break } @@ -6586,10 +6296,9 @@ func rewriteValueMIPS_OpMove_0(v *Value) bool { if v.AuxInt != 4 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpMIPSMOVBstore) v.AuxInt = 3 v.AddArg(dst) @@ -6633,10 +6342,9 @@ func rewriteValueMIPS_OpMove_0(v *Value) bool { if v.AuxInt != 3 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpMIPSMOVBstore) v.AuxInt = 2 v.AddArg(dst) @@ -6672,10 +6380,9 @@ func rewriteValueMIPS_OpMove_0(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -6705,10 +6412,9 @@ func rewriteValueMIPS_OpMove_0(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%2 == 0) { break } @@ -6752,11 +6458,8 @@ func rewriteValueMIPS_OpMove_0(v *Value) bool { } func rewriteValueMIPS_OpMove_10(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Move [6] {t} dst src mem) // cond: t.(*types.Type).Alignment()%2 == 0 // result: (MOVHstore [4] dst (MOVHload [4] src mem) (MOVHstore [2] dst (MOVHload [2] src mem) (MOVHstore dst (MOVHload src mem) mem))) @@ -6765,10 +6468,9 @@ func rewriteValueMIPS_OpMove_10(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%2 == 0) { break } @@ -6807,10 +6509,9 @@ func rewriteValueMIPS_OpMove_10(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -6849,10 +6550,9 @@ func rewriteValueMIPS_OpMove_10(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -6898,10 +6598,9 @@ func rewriteValueMIPS_OpMove_10(v *Value) bool { for { s := v.AuxInt t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s > 16 || t.(*types.Type).Alignment()%4 != 0) { break } @@ -6923,9 +6622,8 @@ func rewriteValueMIPS_OpMul16_0(v *Value) bool { // cond: // result: (MUL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSMUL) v.AddArg(x) v.AddArg(y) @@ -6937,9 +6635,8 @@ func rewriteValueMIPS_OpMul32_0(v *Value) bool { // cond: // result: (MUL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSMUL) v.AddArg(x) v.AddArg(y) @@ -6951,9 +6648,8 @@ func rewriteValueMIPS_OpMul32F_0(v *Value) bool { // cond: // result: (MULF x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSMULF) v.AddArg(x) v.AddArg(y) @@ -6965,9 +6661,8 @@ func rewriteValueMIPS_OpMul32uhilo_0(v *Value) bool { // cond: // result: (MULTU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSMULTU) v.AddArg(x) v.AddArg(y) @@ -6979,9 +6674,8 @@ func rewriteValueMIPS_OpMul64F_0(v *Value) bool { // cond: // result: (MULD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSMULD) v.AddArg(x) v.AddArg(y) @@ -6993,9 +6687,8 @@ func rewriteValueMIPS_OpMul8_0(v *Value) bool { // cond: // result: (MUL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSMUL) v.AddArg(x) v.AddArg(y) @@ -7059,16 +6752,13 @@ func rewriteValueMIPS_OpNeg8_0(v *Value) bool { } func rewriteValueMIPS_OpNeq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq16 x y) // cond: // result: (SGTU (XOR (ZeroExt16to32 x) (ZeroExt16to32 y)) (MOVWconst [0])) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSGTU) v0 := b.NewValue0(v.Pos, OpMIPSXOR, typ.UInt32) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -7086,16 +6776,13 @@ func rewriteValueMIPS_OpNeq16_0(v *Value) bool { } func rewriteValueMIPS_OpNeq32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq32 x y) // cond: // result: (SGTU (XOR x y) (MOVWconst [0])) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSGTU) v0 := b.NewValue0(v.Pos, OpMIPSXOR, typ.UInt32) v0.AddArg(x) @@ -7109,14 +6796,12 @@ func rewriteValueMIPS_OpNeq32_0(v *Value) bool { } func rewriteValueMIPS_OpNeq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Neq32F x y) // cond: // result: (FPFlagFalse (CMPEQF x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSFPFlagFalse) v0 := b.NewValue0(v.Pos, OpMIPSCMPEQF, types.TypeFlags) v0.AddArg(x) @@ -7127,14 +6812,12 @@ func rewriteValueMIPS_OpNeq32F_0(v *Value) bool { } func rewriteValueMIPS_OpNeq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Neq64F x y) // cond: // result: (FPFlagFalse (CMPEQD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSFPFlagFalse) v0 := b.NewValue0(v.Pos, OpMIPSCMPEQD, types.TypeFlags) v0.AddArg(x) @@ -7145,16 +6828,13 @@ func rewriteValueMIPS_OpNeq64F_0(v *Value) bool { } func rewriteValueMIPS_OpNeq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq8 x y) // cond: // result: (SGTU (XOR (ZeroExt8to32 x) (ZeroExt8to32 y)) (MOVWconst [0])) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSGTU) v0 := b.NewValue0(v.Pos, OpMIPSXOR, typ.UInt32) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -7175,9 +6855,8 @@ func rewriteValueMIPS_OpNeqB_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSXOR) v.AddArg(x) v.AddArg(y) @@ -7186,16 +6865,13 @@ func rewriteValueMIPS_OpNeqB_0(v *Value) bool { } func rewriteValueMIPS_OpNeqPtr_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (NeqPtr x y) // cond: // result: (SGTU (XOR x y) (MOVWconst [0])) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSGTU) v0 := b.NewValue0(v.Pos, OpMIPSXOR, typ.UInt32) v0.AddArg(x) @@ -7212,9 +6888,8 @@ func rewriteValueMIPS_OpNilCheck_0(v *Value) bool { // cond: // result: (LoweredNilCheck ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpMIPSLoweredNilCheck) v.AddArg(ptr) v.AddArg(mem) @@ -7265,9 +6940,8 @@ func rewriteValueMIPS_OpOr16_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSOR) v.AddArg(x) v.AddArg(y) @@ -7279,9 +6953,8 @@ func rewriteValueMIPS_OpOr32_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSOR) v.AddArg(x) v.AddArg(y) @@ -7293,9 +6966,8 @@ func rewriteValueMIPS_OpOr8_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSOR) v.AddArg(x) v.AddArg(y) @@ -7307,15 +6979,262 @@ func rewriteValueMIPS_OpOrB_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSOR) v.AddArg(x) v.AddArg(y) return true } } +func rewriteValueMIPS_OpPanicBounds_0(v *Value) bool { + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 0 + // result: (LoweredPanicBoundsA [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 0) { + break + } + v.reset(OpMIPSLoweredPanicBoundsA) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 1 + // result: (LoweredPanicBoundsB [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 1) { + break + } + v.reset(OpMIPSLoweredPanicBoundsB) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 2 + // result: (LoweredPanicBoundsC [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 2) { + break + } + v.reset(OpMIPSLoweredPanicBoundsC) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + return false +} +func rewriteValueMIPS_OpPanicExtend_0(v *Value) bool { + // match: (PanicExtend [kind] hi lo y mem) + // cond: boundsABI(kind) == 0 + // result: (LoweredPanicExtendA [kind] hi lo y mem) + for { + kind := v.AuxInt + mem := v.Args[3] + hi := v.Args[0] + lo := v.Args[1] + y := v.Args[2] + if !(boundsABI(kind) == 0) { + break + } + v.reset(OpMIPSLoweredPanicExtendA) + v.AuxInt = kind + v.AddArg(hi) + v.AddArg(lo) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicExtend [kind] hi lo y mem) + // cond: boundsABI(kind) == 1 + // result: (LoweredPanicExtendB [kind] hi lo y mem) + for { + kind := v.AuxInt + mem := v.Args[3] + hi := v.Args[0] + lo := v.Args[1] + y := v.Args[2] + if !(boundsABI(kind) == 1) { + break + } + v.reset(OpMIPSLoweredPanicExtendB) + v.AuxInt = kind + v.AddArg(hi) + v.AddArg(lo) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicExtend [kind] hi lo y mem) + // cond: boundsABI(kind) == 2 + // result: (LoweredPanicExtendC [kind] hi lo y mem) + for { + kind := v.AuxInt + mem := v.Args[3] + hi := v.Args[0] + lo := v.Args[1] + y := v.Args[2] + if !(boundsABI(kind) == 2) { + break + } + v.reset(OpMIPSLoweredPanicExtendC) + v.AuxInt = kind + v.AddArg(hi) + v.AddArg(lo) + v.AddArg(y) + v.AddArg(mem) + return true + } + return false +} +func rewriteValueMIPS_OpRotateLeft16_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (RotateLeft16 x (MOVWconst [c])) + // cond: + // result: (Or16 (Lsh16x32 x (MOVWconst [c&15])) (Rsh16Ux32 x (MOVWconst [-c&15]))) + for { + t := v.Type + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMIPSMOVWconst { + break + } + c := v_1.AuxInt + v.reset(OpOr16) + v0 := b.NewValue0(v.Pos, OpLsh16x32, t) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpMIPSMOVWconst, typ.UInt32) + v1.AuxInt = c & 15 + v0.AddArg(v1) + v.AddArg(v0) + v2 := b.NewValue0(v.Pos, OpRsh16Ux32, t) + v2.AddArg(x) + v3 := b.NewValue0(v.Pos, OpMIPSMOVWconst, typ.UInt32) + v3.AuxInt = -c & 15 + v2.AddArg(v3) + v.AddArg(v2) + return true + } + return false +} +func rewriteValueMIPS_OpRotateLeft32_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (RotateLeft32 x (MOVWconst [c])) + // cond: + // result: (Or32 (Lsh32x32 x (MOVWconst [c&31])) (Rsh32Ux32 x (MOVWconst [-c&31]))) + for { + t := v.Type + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMIPSMOVWconst { + break + } + c := v_1.AuxInt + v.reset(OpOr32) + v0 := b.NewValue0(v.Pos, OpLsh32x32, t) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpMIPSMOVWconst, typ.UInt32) + v1.AuxInt = c & 31 + v0.AddArg(v1) + v.AddArg(v0) + v2 := b.NewValue0(v.Pos, OpRsh32Ux32, t) + v2.AddArg(x) + v3 := b.NewValue0(v.Pos, OpMIPSMOVWconst, typ.UInt32) + v3.AuxInt = -c & 31 + v2.AddArg(v3) + v.AddArg(v2) + return true + } + return false +} +func rewriteValueMIPS_OpRotateLeft64_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (RotateLeft64 x (MOVWconst [c])) + // cond: + // result: (Or64 (Lsh64x32 x (MOVWconst [c&63])) (Rsh64Ux32 x (MOVWconst [-c&63]))) + for { + t := v.Type + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMIPSMOVWconst { + break + } + c := v_1.AuxInt + v.reset(OpOr64) + v0 := b.NewValue0(v.Pos, OpLsh64x32, t) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpMIPSMOVWconst, typ.UInt32) + v1.AuxInt = c & 63 + v0.AddArg(v1) + v.AddArg(v0) + v2 := b.NewValue0(v.Pos, OpRsh64Ux32, t) + v2.AddArg(x) + v3 := b.NewValue0(v.Pos, OpMIPSMOVWconst, typ.UInt32) + v3.AuxInt = -c & 63 + v2.AddArg(v3) + v.AddArg(v2) + return true + } + return false +} +func rewriteValueMIPS_OpRotateLeft8_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (RotateLeft8 x (MOVWconst [c])) + // cond: + // result: (Or8 (Lsh8x32 x (MOVWconst [c&7])) (Rsh8Ux32 x (MOVWconst [-c&7]))) + for { + t := v.Type + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMIPSMOVWconst { + break + } + c := v_1.AuxInt + v.reset(OpOr8) + v0 := b.NewValue0(v.Pos, OpLsh8x32, t) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpMIPSMOVWconst, typ.UInt32) + v1.AuxInt = c & 7 + v0.AddArg(v1) + v.AddArg(v0) + v2 := b.NewValue0(v.Pos, OpRsh8Ux32, t) + v2.AddArg(x) + v3 := b.NewValue0(v.Pos, OpMIPSMOVWconst, typ.UInt32) + v3.AuxInt = -c & 7 + v2.AddArg(v3) + v.AddArg(v2) + return true + } + return false +} func rewriteValueMIPS_OpRound32F_0(v *Value) bool { // match: (Round32F x) // cond: @@ -7342,17 +7261,14 @@ func rewriteValueMIPS_OpRound64F_0(v *Value) bool { } func rewriteValueMIPS_OpRsh16Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux16 x y) // cond: // result: (CMOVZ (SRL (ZeroExt16to32 x) (ZeroExt16to32 y) ) (MOVWconst [0]) (SGTUconst [32] (ZeroExt16to32 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSCMOVZ) v0 := b.NewValue0(v.Pos, OpMIPSSRL, t) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -7376,17 +7292,14 @@ func rewriteValueMIPS_OpRsh16Ux16_0(v *Value) bool { } func rewriteValueMIPS_OpRsh16Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux32 x y) // cond: // result: (CMOVZ (SRL (ZeroExt16to32 x) y) (MOVWconst [0]) (SGTUconst [32] y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSCMOVZ) v0 := b.NewValue0(v.Pos, OpMIPSSRL, t) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -7406,9 +7319,7 @@ func rewriteValueMIPS_OpRsh16Ux32_0(v *Value) bool { } func rewriteValueMIPS_OpRsh16Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux64 x (Const64 [c])) // cond: uint32(c) < 16 // result: (SRLconst (SLLconst x [16]) [c+16]) @@ -7452,17 +7363,14 @@ func rewriteValueMIPS_OpRsh16Ux64_0(v *Value) bool { } func rewriteValueMIPS_OpRsh16Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux8 x y) // cond: // result: (CMOVZ (SRL (ZeroExt16to32 x) (ZeroExt8to32 y) ) (MOVWconst [0]) (SGTUconst [32] (ZeroExt8to32 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSCMOVZ) v0 := b.NewValue0(v.Pos, OpMIPSSRL, t) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -7486,16 +7394,13 @@ func rewriteValueMIPS_OpRsh16Ux8_0(v *Value) bool { } func rewriteValueMIPS_OpRsh16x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x16 x y) // cond: // result: (SRA (SignExt16to32 x) ( CMOVZ (ZeroExt16to32 y) (MOVWconst [-1]) (SGTUconst [32] (ZeroExt16to32 y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSRA) v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) v0.AddArg(x) @@ -7519,16 +7424,13 @@ func rewriteValueMIPS_OpRsh16x16_0(v *Value) bool { } func rewriteValueMIPS_OpRsh16x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x32 x y) // cond: // result: (SRA (SignExt16to32 x) ( CMOVZ y (MOVWconst [-1]) (SGTUconst [32] y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSRA) v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) v0.AddArg(x) @@ -7548,9 +7450,7 @@ func rewriteValueMIPS_OpRsh16x32_0(v *Value) bool { } func rewriteValueMIPS_OpRsh16x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x64 x (Const64 [c])) // cond: uint32(c) < 16 // result: (SRAconst (SLLconst x [16]) [c+16]) @@ -7599,16 +7499,13 @@ func rewriteValueMIPS_OpRsh16x64_0(v *Value) bool { } func rewriteValueMIPS_OpRsh16x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x8 x y) // cond: // result: (SRA (SignExt16to32 x) ( CMOVZ (ZeroExt8to32 y) (MOVWconst [-1]) (SGTUconst [32] (ZeroExt8to32 y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSRA) v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) v0.AddArg(x) @@ -7632,17 +7529,14 @@ func rewriteValueMIPS_OpRsh16x8_0(v *Value) bool { } func rewriteValueMIPS_OpRsh32Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux16 x y) // cond: // result: (CMOVZ (SRL x (ZeroExt16to32 y) ) (MOVWconst [0]) (SGTUconst [32] (ZeroExt16to32 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSCMOVZ) v0 := b.NewValue0(v.Pos, OpMIPSSRL, t) v0.AddArg(x) @@ -7664,17 +7558,14 @@ func rewriteValueMIPS_OpRsh32Ux16_0(v *Value) bool { } func rewriteValueMIPS_OpRsh32Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux32 x y) // cond: // result: (CMOVZ (SRL x y) (MOVWconst [0]) (SGTUconst [32] y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSCMOVZ) v0 := b.NewValue0(v.Pos, OpMIPSSRL, t) v0.AddArg(x) @@ -7731,17 +7622,14 @@ func rewriteValueMIPS_OpRsh32Ux64_0(v *Value) bool { } func rewriteValueMIPS_OpRsh32Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux8 x y) // cond: // result: (CMOVZ (SRL x (ZeroExt8to32 y) ) (MOVWconst [0]) (SGTUconst [32] (ZeroExt8to32 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSCMOVZ) v0 := b.NewValue0(v.Pos, OpMIPSSRL, t) v0.AddArg(x) @@ -7763,16 +7651,13 @@ func rewriteValueMIPS_OpRsh32Ux8_0(v *Value) bool { } func rewriteValueMIPS_OpRsh32x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x16 x y) // cond: // result: (SRA x ( CMOVZ (ZeroExt16to32 y) (MOVWconst [-1]) (SGTUconst [32] (ZeroExt16to32 y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSRA) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpMIPSCMOVZ, typ.UInt32) @@ -7794,16 +7679,13 @@ func rewriteValueMIPS_OpRsh32x16_0(v *Value) bool { } func rewriteValueMIPS_OpRsh32x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x32 x y) // cond: // result: (SRA x ( CMOVZ y (MOVWconst [-1]) (SGTUconst [32] y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSRA) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpMIPSCMOVZ, typ.UInt32) @@ -7862,16 +7744,13 @@ func rewriteValueMIPS_OpRsh32x64_0(v *Value) bool { } func rewriteValueMIPS_OpRsh32x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x8 x y) // cond: // result: (SRA x ( CMOVZ (ZeroExt8to32 y) (MOVWconst [-1]) (SGTUconst [32] (ZeroExt8to32 y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSRA) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpMIPSCMOVZ, typ.UInt32) @@ -7893,17 +7772,14 @@ func rewriteValueMIPS_OpRsh32x8_0(v *Value) bool { } func rewriteValueMIPS_OpRsh8Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux16 x y) // cond: // result: (CMOVZ (SRL (ZeroExt8to32 x) (ZeroExt16to32 y) ) (MOVWconst [0]) (SGTUconst [32] (ZeroExt16to32 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSCMOVZ) v0 := b.NewValue0(v.Pos, OpMIPSSRL, t) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -7927,17 +7803,14 @@ func rewriteValueMIPS_OpRsh8Ux16_0(v *Value) bool { } func rewriteValueMIPS_OpRsh8Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux32 x y) // cond: // result: (CMOVZ (SRL (ZeroExt8to32 x) y) (MOVWconst [0]) (SGTUconst [32] y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSCMOVZ) v0 := b.NewValue0(v.Pos, OpMIPSSRL, t) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -7957,9 +7830,7 @@ func rewriteValueMIPS_OpRsh8Ux32_0(v *Value) bool { } func rewriteValueMIPS_OpRsh8Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux64 x (Const64 [c])) // cond: uint32(c) < 8 // result: (SRLconst (SLLconst x [24]) [c+24]) @@ -8003,17 +7874,14 @@ func rewriteValueMIPS_OpRsh8Ux64_0(v *Value) bool { } func rewriteValueMIPS_OpRsh8Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux8 x y) // cond: // result: (CMOVZ (SRL (ZeroExt8to32 x) (ZeroExt8to32 y) ) (MOVWconst [0]) (SGTUconst [32] (ZeroExt8to32 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSCMOVZ) v0 := b.NewValue0(v.Pos, OpMIPSSRL, t) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -8037,16 +7905,13 @@ func rewriteValueMIPS_OpRsh8Ux8_0(v *Value) bool { } func rewriteValueMIPS_OpRsh8x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x16 x y) // cond: // result: (SRA (SignExt16to32 x) ( CMOVZ (ZeroExt16to32 y) (MOVWconst [-1]) (SGTUconst [32] (ZeroExt16to32 y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSRA) v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) v0.AddArg(x) @@ -8070,16 +7935,13 @@ func rewriteValueMIPS_OpRsh8x16_0(v *Value) bool { } func rewriteValueMIPS_OpRsh8x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x32 x y) // cond: // result: (SRA (SignExt16to32 x) ( CMOVZ y (MOVWconst [-1]) (SGTUconst [32] y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSRA) v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) v0.AddArg(x) @@ -8099,9 +7961,7 @@ func rewriteValueMIPS_OpRsh8x32_0(v *Value) bool { } func rewriteValueMIPS_OpRsh8x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x64 x (Const64 [c])) // cond: uint32(c) < 8 // result: (SRAconst (SLLconst x [24]) [c+24]) @@ -8150,16 +8010,13 @@ func rewriteValueMIPS_OpRsh8x64_0(v *Value) bool { } func rewriteValueMIPS_OpRsh8x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x8 x y) // cond: // result: (SRA (SignExt16to32 x) ( CMOVZ (ZeroExt8to32 y) (MOVWconst [-1]) (SGTUconst [32] (ZeroExt8to32 y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSRA) v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) v0.AddArg(x) @@ -8183,9 +8040,7 @@ func rewriteValueMIPS_OpRsh8x8_0(v *Value) bool { } func rewriteValueMIPS_OpSelect0_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Select0 (Add32carry x y)) // cond: // result: (ADD x y) @@ -8195,9 +8050,8 @@ func rewriteValueMIPS_OpSelect0_0(v *Value) bool { break } t := v_0.Type - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpMIPSADD) v.Type = t.FieldType(0) v.AddArg(x) @@ -8213,9 +8067,8 @@ func rewriteValueMIPS_OpSelect0_0(v *Value) bool { break } t := v_0.Type - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpMIPSSUB) v.Type = t.FieldType(0) v.AddArg(x) @@ -8310,7 +8163,7 @@ func rewriteValueMIPS_OpSelect0_0(v *Value) bool { if v_0.Op != OpMIPSMULTU { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpMIPSMOVWconst { break @@ -8318,7 +8171,6 @@ func rewriteValueMIPS_OpSelect0_0(v *Value) bool { if v_0_0.AuxInt != -1 { break } - x := v_0.Args[1] v.reset(OpMIPSCMOVZ) v0 := b.NewValue0(v.Pos, OpMIPSADDconst, x.Type) v0.AuxInt = -1 @@ -8366,13 +8218,12 @@ func rewriteValueMIPS_OpSelect0_0(v *Value) bool { if v_0.Op != OpMIPSMULTU { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpMIPSMOVWconst { break } c := v_0_0.AuxInt - x := v_0.Args[1] if !(isPowerOfTwo(int64(uint32(c)))) { break } @@ -8503,9 +8354,7 @@ func rewriteValueMIPS_OpSelect0_10(v *Value) bool { } func rewriteValueMIPS_OpSelect1_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Select1 (Add32carry x y)) // cond: // result: (SGTU x (ADD x y)) @@ -8515,9 +8364,8 @@ func rewriteValueMIPS_OpSelect1_0(v *Value) bool { break } t := v_0.Type - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpMIPSSGTU) v.Type = typ.Bool v.AddArg(x) @@ -8536,9 +8384,8 @@ func rewriteValueMIPS_OpSelect1_0(v *Value) bool { break } t := v_0.Type - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpMIPSSGTU) v.Type = typ.Bool v0 := b.NewValue0(v.Pos, OpMIPSSUB, t.FieldType(0)) @@ -8596,7 +8443,7 @@ func rewriteValueMIPS_OpSelect1_0(v *Value) bool { if v_0.Op != OpMIPSMULTU { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpMIPSMOVWconst { break @@ -8604,7 +8451,6 @@ func rewriteValueMIPS_OpSelect1_0(v *Value) bool { if v_0_0.AuxInt != 1 { break } - x := v_0.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -8640,7 +8486,7 @@ func rewriteValueMIPS_OpSelect1_0(v *Value) bool { if v_0.Op != OpMIPSMULTU { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpMIPSMOVWconst { break @@ -8648,7 +8494,6 @@ func rewriteValueMIPS_OpSelect1_0(v *Value) bool { if v_0_0.AuxInt != -1 { break } - x := v_0.Args[1] v.reset(OpMIPSNEG) v.Type = x.Type v.AddArg(x) @@ -8684,13 +8529,12 @@ func rewriteValueMIPS_OpSelect1_0(v *Value) bool { if v_0.Op != OpMIPSMULTU { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpMIPSMOVWconst { break } c := v_0_0.AuxInt - x := v_0.Args[1] if !(isPowerOfTwo(int64(uint32(c)))) { break } @@ -8866,7 +8710,6 @@ func rewriteValueMIPS_OpSignmask_0(v *Value) bool { } func rewriteValueMIPS_OpSlicemask_0(v *Value) bool { b := v.Block - _ = b // match: (Slicemask x) // cond: // result: (SRAconst (NEG x) [31]) @@ -8913,10 +8756,9 @@ func rewriteValueMIPS_OpStore_0(v *Value) bool { // result: (MOVBstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 1) { break } @@ -8931,10 +8773,9 @@ func rewriteValueMIPS_OpStore_0(v *Value) bool { // result: (MOVHstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 2) { break } @@ -8949,10 +8790,9 @@ func rewriteValueMIPS_OpStore_0(v *Value) bool { // result: (MOVWstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 4 && !is32BitFloat(val.Type)) { break } @@ -8967,10 +8807,9 @@ func rewriteValueMIPS_OpStore_0(v *Value) bool { // result: (MOVFstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 4 && is32BitFloat(val.Type)) { break } @@ -8985,10 +8824,9 @@ func rewriteValueMIPS_OpStore_0(v *Value) bool { // result: (MOVDstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 8 && is64BitFloat(val.Type)) { break } @@ -9005,9 +8843,8 @@ func rewriteValueMIPS_OpSub16_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSUB) v.AddArg(x) v.AddArg(y) @@ -9019,9 +8856,8 @@ func rewriteValueMIPS_OpSub32_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSUB) v.AddArg(x) v.AddArg(y) @@ -9033,9 +8869,8 @@ func rewriteValueMIPS_OpSub32F_0(v *Value) bool { // cond: // result: (SUBF x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSUBF) v.AddArg(x) v.AddArg(y) @@ -9044,16 +8879,14 @@ func rewriteValueMIPS_OpSub32F_0(v *Value) bool { } func rewriteValueMIPS_OpSub32withcarry_0(v *Value) bool { b := v.Block - _ = b // match: (Sub32withcarry x y c) // cond: // result: (SUB (SUB x y) c) for { t := v.Type - _ = v.Args[2] + c := v.Args[2] x := v.Args[0] y := v.Args[1] - c := v.Args[2] v.reset(OpMIPSSUB) v0 := b.NewValue0(v.Pos, OpMIPSSUB, t) v0.AddArg(x) @@ -9068,9 +8901,8 @@ func rewriteValueMIPS_OpSub64F_0(v *Value) bool { // cond: // result: (SUBD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSUBD) v.AddArg(x) v.AddArg(y) @@ -9082,9 +8914,8 @@ func rewriteValueMIPS_OpSub8_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSUB) v.AddArg(x) v.AddArg(y) @@ -9096,9 +8927,8 @@ func rewriteValueMIPS_OpSubPtr_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSSUB) v.AddArg(x) v.AddArg(y) @@ -9147,10 +8977,9 @@ func rewriteValueMIPS_OpWB_0(v *Value) bool { // result: (LoweredWB {fn} destptr srcptr mem) for { fn := v.Aux - _ = v.Args[2] + mem := v.Args[2] destptr := v.Args[0] srcptr := v.Args[1] - mem := v.Args[2] v.reset(OpMIPSLoweredWB) v.Aux = fn v.AddArg(destptr) @@ -9164,9 +8993,8 @@ func rewriteValueMIPS_OpXor16_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSXOR) v.AddArg(x) v.AddArg(y) @@ -9178,9 +9006,8 @@ func rewriteValueMIPS_OpXor32_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSXOR) v.AddArg(x) v.AddArg(y) @@ -9192,9 +9019,8 @@ func rewriteValueMIPS_OpXor8_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPSXOR) v.AddArg(x) v.AddArg(y) @@ -9203,9 +9029,7 @@ func rewriteValueMIPS_OpXor8_0(v *Value) bool { } func rewriteValueMIPS_OpZero_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Zero [0] _ mem) // cond: // result: mem @@ -9213,7 +9037,6 @@ func rewriteValueMIPS_OpZero_0(v *Value) bool { if v.AuxInt != 0 { break } - _ = v.Args[1] mem := v.Args[1] v.reset(OpCopy) v.Type = mem.Type @@ -9227,9 +9050,8 @@ func rewriteValueMIPS_OpZero_0(v *Value) bool { if v.AuxInt != 1 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpMIPSMOVBstore) v.AddArg(ptr) v0 := b.NewValue0(v.Pos, OpMIPSMOVWconst, typ.UInt32) @@ -9246,9 +9068,8 @@ func rewriteValueMIPS_OpZero_0(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.(*types.Type).Alignment()%2 == 0) { break } @@ -9267,9 +9088,8 @@ func rewriteValueMIPS_OpZero_0(v *Value) bool { if v.AuxInt != 2 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpMIPSMOVBstore) v.AuxInt = 1 v.AddArg(ptr) @@ -9294,9 +9114,8 @@ func rewriteValueMIPS_OpZero_0(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -9316,9 +9135,8 @@ func rewriteValueMIPS_OpZero_0(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.(*types.Type).Alignment()%2 == 0) { break } @@ -9345,9 +9163,8 @@ func rewriteValueMIPS_OpZero_0(v *Value) bool { if v.AuxInt != 4 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpMIPSMOVBstore) v.AuxInt = 3 v.AddArg(ptr) @@ -9385,9 +9202,8 @@ func rewriteValueMIPS_OpZero_0(v *Value) bool { if v.AuxInt != 3 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpMIPSMOVBstore) v.AuxInt = 2 v.AddArg(ptr) @@ -9419,9 +9235,8 @@ func rewriteValueMIPS_OpZero_0(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.(*types.Type).Alignment()%2 == 0) { break } @@ -9456,9 +9271,8 @@ func rewriteValueMIPS_OpZero_0(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -9482,11 +9296,8 @@ func rewriteValueMIPS_OpZero_0(v *Value) bool { } func rewriteValueMIPS_OpZero_10(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Zero [12] {t} ptr mem) // cond: t.(*types.Type).Alignment()%4 == 0 // result: (MOVWstore [8] ptr (MOVWconst [0]) (MOVWstore [4] ptr (MOVWconst [0]) (MOVWstore [0] ptr (MOVWconst [0]) mem))) @@ -9495,9 +9306,8 @@ func rewriteValueMIPS_OpZero_10(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -9532,9 +9342,8 @@ func rewriteValueMIPS_OpZero_10(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -9574,9 +9383,8 @@ func rewriteValueMIPS_OpZero_10(v *Value) bool { for { s := v.AuxInt t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(s > 16 || t.(*types.Type).Alignment()%4 != 0) { break } @@ -9627,9 +9435,7 @@ func rewriteValueMIPS_OpZeroExt8to32_0(v *Value) bool { } func rewriteValueMIPS_OpZeromask_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Zeromask x) // cond: // result: (NEG (SGTU x (MOVWconst [0]))) @@ -9647,21 +9453,16 @@ func rewriteValueMIPS_OpZeromask_0(v *Value) bool { } func rewriteBlockMIPS(b *Block) bool { config := b.Func.Config - _ = config - fe := b.Func.fe - _ = fe typ := &config.Types _ = typ + v := b.Control + _ = v switch b.Kind { case BlockMIPSEQ: // match: (EQ (FPFlagTrue cmp) yes no) // cond: // result: (FPF cmp yes no) - for { - v := b.Control - if v.Op != OpMIPSFPFlagTrue { - break - } + for v.Op == OpMIPSFPFlagTrue { cmp := v.Args[0] b.Kind = BlockMIPSFPF b.SetControl(cmp) @@ -9671,11 +9472,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (EQ (FPFlagFalse cmp) yes no) // cond: // result: (FPT cmp yes no) - for { - v := b.Control - if v.Op != OpMIPSFPFlagFalse { - break - } + for v.Op == OpMIPSFPFlagFalse { cmp := v.Args[0] b.Kind = BlockMIPSFPT b.SetControl(cmp) @@ -9685,11 +9482,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (EQ (XORconst [1] cmp:(SGT _ _)) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != OpMIPSXORconst { - break - } + for v.Op == OpMIPSXORconst { if v.AuxInt != 1 { break } @@ -9706,11 +9499,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (EQ (XORconst [1] cmp:(SGTU _ _)) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != OpMIPSXORconst { - break - } + for v.Op == OpMIPSXORconst { if v.AuxInt != 1 { break } @@ -9727,11 +9516,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (EQ (XORconst [1] cmp:(SGTconst _)) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != OpMIPSXORconst { - break - } + for v.Op == OpMIPSXORconst { if v.AuxInt != 1 { break } @@ -9747,11 +9532,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (EQ (XORconst [1] cmp:(SGTUconst _)) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != OpMIPSXORconst { - break - } + for v.Op == OpMIPSXORconst { if v.AuxInt != 1 { break } @@ -9767,11 +9548,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (EQ (XORconst [1] cmp:(SGTzero _)) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != OpMIPSXORconst { - break - } + for v.Op == OpMIPSXORconst { if v.AuxInt != 1 { break } @@ -9787,11 +9564,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (EQ (XORconst [1] cmp:(SGTUzero _)) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != OpMIPSXORconst { - break - } + for v.Op == OpMIPSXORconst { if v.AuxInt != 1 { break } @@ -9807,11 +9580,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (EQ (SGTUconst [1] x) yes no) // cond: // result: (NE x yes no) - for { - v := b.Control - if v.Op != OpMIPSSGTUconst { - break - } + for v.Op == OpMIPSSGTUconst { if v.AuxInt != 1 { break } @@ -9824,11 +9593,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (EQ (SGTUzero x) yes no) // cond: // result: (EQ x yes no) - for { - v := b.Control - if v.Op != OpMIPSSGTUzero { - break - } + for v.Op == OpMIPSSGTUzero { x := v.Args[0] b.Kind = BlockMIPSEQ b.SetControl(x) @@ -9838,11 +9603,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (EQ (SGTconst [0] x) yes no) // cond: // result: (GEZ x yes no) - for { - v := b.Control - if v.Op != OpMIPSSGTconst { - break - } + for v.Op == OpMIPSSGTconst { if v.AuxInt != 0 { break } @@ -9855,11 +9616,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (EQ (SGTzero x) yes no) // cond: // result: (LEZ x yes no) - for { - v := b.Control - if v.Op != OpMIPSSGTzero { - break - } + for v.Op == OpMIPSSGTzero { x := v.Args[0] b.Kind = BlockMIPSLEZ b.SetControl(x) @@ -9869,11 +9626,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (EQ (MOVWconst [0]) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpMIPSMOVWconst { - break - } + for v.Op == OpMIPSMOVWconst { if v.AuxInt != 0 { break } @@ -9885,11 +9638,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (EQ (MOVWconst [c]) yes no) // cond: c != 0 // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpMIPSMOVWconst { - break - } + for v.Op == OpMIPSMOVWconst { c := v.AuxInt if !(c != 0) { break @@ -9904,11 +9653,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (GEZ (MOVWconst [c]) yes no) // cond: int32(c) >= 0 // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpMIPSMOVWconst { - break - } + for v.Op == OpMIPSMOVWconst { c := v.AuxInt if !(int32(c) >= 0) { break @@ -9921,11 +9666,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (GEZ (MOVWconst [c]) yes no) // cond: int32(c) < 0 // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpMIPSMOVWconst { - break - } + for v.Op == OpMIPSMOVWconst { c := v.AuxInt if !(int32(c) < 0) { break @@ -9940,11 +9681,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (GTZ (MOVWconst [c]) yes no) // cond: int32(c) > 0 // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpMIPSMOVWconst { - break - } + for v.Op == OpMIPSMOVWconst { c := v.AuxInt if !(int32(c) > 0) { break @@ -9957,11 +9694,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (GTZ (MOVWconst [c]) yes no) // cond: int32(c) <= 0 // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpMIPSMOVWconst { - break - } + for v.Op == OpMIPSMOVWconst { c := v.AuxInt if !(int32(c) <= 0) { break @@ -9977,8 +9710,6 @@ func rewriteBlockMIPS(b *Block) bool { // cond: // result: (NE cond yes no) for { - v := b.Control - _ = v cond := b.Control b.Kind = BlockMIPSNE b.SetControl(cond) @@ -9989,11 +9720,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (LEZ (MOVWconst [c]) yes no) // cond: int32(c) <= 0 // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpMIPSMOVWconst { - break - } + for v.Op == OpMIPSMOVWconst { c := v.AuxInt if !(int32(c) <= 0) { break @@ -10006,11 +9733,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (LEZ (MOVWconst [c]) yes no) // cond: int32(c) > 0 // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpMIPSMOVWconst { - break - } + for v.Op == OpMIPSMOVWconst { c := v.AuxInt if !(int32(c) > 0) { break @@ -10025,11 +9748,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (LTZ (MOVWconst [c]) yes no) // cond: int32(c) < 0 // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpMIPSMOVWconst { - break - } + for v.Op == OpMIPSMOVWconst { c := v.AuxInt if !(int32(c) < 0) { break @@ -10042,11 +9761,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (LTZ (MOVWconst [c]) yes no) // cond: int32(c) >= 0 // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpMIPSMOVWconst { - break - } + for v.Op == OpMIPSMOVWconst { c := v.AuxInt if !(int32(c) >= 0) { break @@ -10061,11 +9776,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (NE (FPFlagTrue cmp) yes no) // cond: // result: (FPT cmp yes no) - for { - v := b.Control - if v.Op != OpMIPSFPFlagTrue { - break - } + for v.Op == OpMIPSFPFlagTrue { cmp := v.Args[0] b.Kind = BlockMIPSFPT b.SetControl(cmp) @@ -10075,11 +9786,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (NE (FPFlagFalse cmp) yes no) // cond: // result: (FPF cmp yes no) - for { - v := b.Control - if v.Op != OpMIPSFPFlagFalse { - break - } + for v.Op == OpMIPSFPFlagFalse { cmp := v.Args[0] b.Kind = BlockMIPSFPF b.SetControl(cmp) @@ -10089,11 +9796,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (NE (XORconst [1] cmp:(SGT _ _)) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != OpMIPSXORconst { - break - } + for v.Op == OpMIPSXORconst { if v.AuxInt != 1 { break } @@ -10110,11 +9813,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (NE (XORconst [1] cmp:(SGTU _ _)) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != OpMIPSXORconst { - break - } + for v.Op == OpMIPSXORconst { if v.AuxInt != 1 { break } @@ -10131,11 +9830,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (NE (XORconst [1] cmp:(SGTconst _)) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != OpMIPSXORconst { - break - } + for v.Op == OpMIPSXORconst { if v.AuxInt != 1 { break } @@ -10151,11 +9846,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (NE (XORconst [1] cmp:(SGTUconst _)) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != OpMIPSXORconst { - break - } + for v.Op == OpMIPSXORconst { if v.AuxInt != 1 { break } @@ -10171,11 +9862,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (NE (XORconst [1] cmp:(SGTzero _)) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != OpMIPSXORconst { - break - } + for v.Op == OpMIPSXORconst { if v.AuxInt != 1 { break } @@ -10191,11 +9878,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (NE (XORconst [1] cmp:(SGTUzero _)) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != OpMIPSXORconst { - break - } + for v.Op == OpMIPSXORconst { if v.AuxInt != 1 { break } @@ -10211,11 +9894,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (NE (SGTUconst [1] x) yes no) // cond: // result: (EQ x yes no) - for { - v := b.Control - if v.Op != OpMIPSSGTUconst { - break - } + for v.Op == OpMIPSSGTUconst { if v.AuxInt != 1 { break } @@ -10228,11 +9907,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (NE (SGTUzero x) yes no) // cond: // result: (NE x yes no) - for { - v := b.Control - if v.Op != OpMIPSSGTUzero { - break - } + for v.Op == OpMIPSSGTUzero { x := v.Args[0] b.Kind = BlockMIPSNE b.SetControl(x) @@ -10242,11 +9917,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (NE (SGTconst [0] x) yes no) // cond: // result: (LTZ x yes no) - for { - v := b.Control - if v.Op != OpMIPSSGTconst { - break - } + for v.Op == OpMIPSSGTconst { if v.AuxInt != 0 { break } @@ -10259,11 +9930,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (NE (SGTzero x) yes no) // cond: // result: (GTZ x yes no) - for { - v := b.Control - if v.Op != OpMIPSSGTzero { - break - } + for v.Op == OpMIPSSGTzero { x := v.Args[0] b.Kind = BlockMIPSGTZ b.SetControl(x) @@ -10273,11 +9940,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (NE (MOVWconst [0]) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpMIPSMOVWconst { - break - } + for v.Op == OpMIPSMOVWconst { if v.AuxInt != 0 { break } @@ -10290,11 +9953,7 @@ func rewriteBlockMIPS(b *Block) bool { // match: (NE (MOVWconst [c]) yes no) // cond: c != 0 // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpMIPSMOVWconst { - break - } + for v.Op == OpMIPSMOVWconst { c := v.AuxInt if !(c != 0) { break diff --git a/src/cmd/compile/internal/ssa/rewriteMIPS64.go b/src/cmd/compile/internal/ssa/rewriteMIPS64.go index 9e12780664..db104504e9 100644 --- a/src/cmd/compile/internal/ssa/rewriteMIPS64.go +++ b/src/cmd/compile/internal/ssa/rewriteMIPS64.go @@ -59,6 +59,8 @@ func rewriteValueMIPS64(v *Value) bool { return rewriteValueMIPS64_OpAtomicLoad32_0(v) case OpAtomicLoad64: return rewriteValueMIPS64_OpAtomicLoad64_0(v) + case OpAtomicLoad8: + return rewriteValueMIPS64_OpAtomicLoad8_0(v) case OpAtomicLoadPtr: return rewriteValueMIPS64_OpAtomicLoadPtr_0(v) case OpAtomicStore32: @@ -469,6 +471,16 @@ func rewriteValueMIPS64(v *Value) bool { return rewriteValueMIPS64_OpOr8_0(v) case OpOrB: return rewriteValueMIPS64_OpOrB_0(v) + case OpPanicBounds: + return rewriteValueMIPS64_OpPanicBounds_0(v) + case OpRotateLeft16: + return rewriteValueMIPS64_OpRotateLeft16_0(v) + case OpRotateLeft32: + return rewriteValueMIPS64_OpRotateLeft32_0(v) + case OpRotateLeft64: + return rewriteValueMIPS64_OpRotateLeft64_0(v) + case OpRotateLeft8: + return rewriteValueMIPS64_OpRotateLeft8_0(v) case OpRound32F: return rewriteValueMIPS64_OpRound32F_0(v) case OpRound64F: @@ -619,9 +631,8 @@ func rewriteValueMIPS64_OpAdd16_0(v *Value) bool { // cond: // result: (ADDV x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64ADDV) v.AddArg(x) v.AddArg(y) @@ -633,9 +644,8 @@ func rewriteValueMIPS64_OpAdd32_0(v *Value) bool { // cond: // result: (ADDV x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64ADDV) v.AddArg(x) v.AddArg(y) @@ -647,9 +657,8 @@ func rewriteValueMIPS64_OpAdd32F_0(v *Value) bool { // cond: // result: (ADDF x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64ADDF) v.AddArg(x) v.AddArg(y) @@ -661,9 +670,8 @@ func rewriteValueMIPS64_OpAdd64_0(v *Value) bool { // cond: // result: (ADDV x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64ADDV) v.AddArg(x) v.AddArg(y) @@ -675,9 +683,8 @@ func rewriteValueMIPS64_OpAdd64F_0(v *Value) bool { // cond: // result: (ADDD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64ADDD) v.AddArg(x) v.AddArg(y) @@ -689,9 +696,8 @@ func rewriteValueMIPS64_OpAdd8_0(v *Value) bool { // cond: // result: (ADDV x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64ADDV) v.AddArg(x) v.AddArg(y) @@ -703,9 +709,8 @@ func rewriteValueMIPS64_OpAddPtr_0(v *Value) bool { // cond: // result: (ADDV x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64ADDV) v.AddArg(x) v.AddArg(y) @@ -730,9 +735,8 @@ func rewriteValueMIPS64_OpAnd16_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v.AddArg(x) v.AddArg(y) @@ -744,9 +748,8 @@ func rewriteValueMIPS64_OpAnd32_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v.AddArg(x) v.AddArg(y) @@ -758,9 +761,8 @@ func rewriteValueMIPS64_OpAnd64_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v.AddArg(x) v.AddArg(y) @@ -772,9 +774,8 @@ func rewriteValueMIPS64_OpAnd8_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v.AddArg(x) v.AddArg(y) @@ -786,9 +787,8 @@ func rewriteValueMIPS64_OpAndB_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v.AddArg(x) v.AddArg(y) @@ -800,10 +800,9 @@ func rewriteValueMIPS64_OpAtomicAdd32_0(v *Value) bool { // cond: // result: (LoweredAtomicAdd32 ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpMIPS64LoweredAtomicAdd32) v.AddArg(ptr) v.AddArg(val) @@ -816,10 +815,9 @@ func rewriteValueMIPS64_OpAtomicAdd64_0(v *Value) bool { // cond: // result: (LoweredAtomicAdd64 ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpMIPS64LoweredAtomicAdd64) v.AddArg(ptr) v.AddArg(val) @@ -832,11 +830,10 @@ func rewriteValueMIPS64_OpAtomicCompareAndSwap32_0(v *Value) bool { // cond: // result: (LoweredAtomicCas32 ptr old new_ mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] old := v.Args[1] new_ := v.Args[2] - mem := v.Args[3] v.reset(OpMIPS64LoweredAtomicCas32) v.AddArg(ptr) v.AddArg(old) @@ -850,11 +847,10 @@ func rewriteValueMIPS64_OpAtomicCompareAndSwap64_0(v *Value) bool { // cond: // result: (LoweredAtomicCas64 ptr old new_ mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] old := v.Args[1] new_ := v.Args[2] - mem := v.Args[3] v.reset(OpMIPS64LoweredAtomicCas64) v.AddArg(ptr) v.AddArg(old) @@ -868,10 +864,9 @@ func rewriteValueMIPS64_OpAtomicExchange32_0(v *Value) bool { // cond: // result: (LoweredAtomicExchange32 ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpMIPS64LoweredAtomicExchange32) v.AddArg(ptr) v.AddArg(val) @@ -884,10 +879,9 @@ func rewriteValueMIPS64_OpAtomicExchange64_0(v *Value) bool { // cond: // result: (LoweredAtomicExchange64 ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpMIPS64LoweredAtomicExchange64) v.AddArg(ptr) v.AddArg(val) @@ -900,9 +894,8 @@ func rewriteValueMIPS64_OpAtomicLoad32_0(v *Value) bool { // cond: // result: (LoweredAtomicLoad32 ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpMIPS64LoweredAtomicLoad32) v.AddArg(ptr) v.AddArg(mem) @@ -914,23 +907,34 @@ func rewriteValueMIPS64_OpAtomicLoad64_0(v *Value) bool { // cond: // result: (LoweredAtomicLoad64 ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpMIPS64LoweredAtomicLoad64) v.AddArg(ptr) v.AddArg(mem) return true } } +func rewriteValueMIPS64_OpAtomicLoad8_0(v *Value) bool { + // match: (AtomicLoad8 ptr mem) + // cond: + // result: (LoweredAtomicLoad8 ptr mem) + for { + mem := v.Args[1] + ptr := v.Args[0] + v.reset(OpMIPS64LoweredAtomicLoad8) + v.AddArg(ptr) + v.AddArg(mem) + return true + } +} func rewriteValueMIPS64_OpAtomicLoadPtr_0(v *Value) bool { // match: (AtomicLoadPtr ptr mem) // cond: // result: (LoweredAtomicLoad64 ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpMIPS64LoweredAtomicLoad64) v.AddArg(ptr) v.AddArg(mem) @@ -942,10 +946,9 @@ func rewriteValueMIPS64_OpAtomicStore32_0(v *Value) bool { // cond: // result: (LoweredAtomicStore32 ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpMIPS64LoweredAtomicStore32) v.AddArg(ptr) v.AddArg(val) @@ -958,10 +961,9 @@ func rewriteValueMIPS64_OpAtomicStore64_0(v *Value) bool { // cond: // result: (LoweredAtomicStore64 ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpMIPS64LoweredAtomicStore64) v.AddArg(ptr) v.AddArg(val) @@ -974,10 +976,9 @@ func rewriteValueMIPS64_OpAtomicStorePtrNoWB_0(v *Value) bool { // cond: // result: (LoweredAtomicStore64 ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpMIPS64LoweredAtomicStore64) v.AddArg(ptr) v.AddArg(val) @@ -987,15 +988,13 @@ func rewriteValueMIPS64_OpAtomicStorePtrNoWB_0(v *Value) bool { } func rewriteValueMIPS64_OpAvg64u_0(v *Value) bool { b := v.Block - _ = b // match: (Avg64u x y) // cond: // result: (ADDV (SRLVconst (SUBV x y) [1]) y) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64ADDV) v0 := b.NewValue0(v.Pos, OpMIPS64SRLVconst, t) v0.AuxInt = 1 @@ -1014,10 +1013,9 @@ func rewriteValueMIPS64_OpClosureCall_0(v *Value) bool { // result: (CALLclosure [argwid] entry closure mem) for { argwid := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] entry := v.Args[0] closure := v.Args[1] - mem := v.Args[2] v.reset(OpMIPS64CALLclosure) v.AuxInt = argwid v.AddArg(entry) @@ -1028,9 +1026,7 @@ func rewriteValueMIPS64_OpClosureCall_0(v *Value) bool { } func rewriteValueMIPS64_OpCom16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Com16 x) // cond: // result: (NOR (MOVVconst [0]) x) @@ -1046,9 +1042,7 @@ func rewriteValueMIPS64_OpCom16_0(v *Value) bool { } func rewriteValueMIPS64_OpCom32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Com32 x) // cond: // result: (NOR (MOVVconst [0]) x) @@ -1064,9 +1058,7 @@ func rewriteValueMIPS64_OpCom32_0(v *Value) bool { } func rewriteValueMIPS64_OpCom64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Com64 x) // cond: // result: (NOR (MOVVconst [0]) x) @@ -1082,9 +1074,7 @@ func rewriteValueMIPS64_OpCom64_0(v *Value) bool { } func rewriteValueMIPS64_OpCom8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Com8 x) // cond: // result: (NOR (MOVVconst [0]) x) @@ -1297,16 +1287,13 @@ func rewriteValueMIPS64_OpCvt64to64F_0(v *Value) bool { } func rewriteValueMIPS64_OpDiv16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div16 x y) // cond: // result: (Select1 (DIVV (SignExt16to64 x) (SignExt16to64 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpMIPS64DIVV, types.NewTuple(typ.Int64, typ.Int64)) v1 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) @@ -1321,16 +1308,13 @@ func rewriteValueMIPS64_OpDiv16_0(v *Value) bool { } func rewriteValueMIPS64_OpDiv16u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div16u x y) // cond: // result: (Select1 (DIVVU (ZeroExt16to64 x) (ZeroExt16to64 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpMIPS64DIVVU, types.NewTuple(typ.UInt64, typ.UInt64)) v1 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) @@ -1345,16 +1329,13 @@ func rewriteValueMIPS64_OpDiv16u_0(v *Value) bool { } func rewriteValueMIPS64_OpDiv32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div32 x y) // cond: // result: (Select1 (DIVV (SignExt32to64 x) (SignExt32to64 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpMIPS64DIVV, types.NewTuple(typ.Int64, typ.Int64)) v1 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) @@ -1372,9 +1353,8 @@ func rewriteValueMIPS64_OpDiv32F_0(v *Value) bool { // cond: // result: (DIVF x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64DIVF) v.AddArg(x) v.AddArg(y) @@ -1383,16 +1363,13 @@ func rewriteValueMIPS64_OpDiv32F_0(v *Value) bool { } func rewriteValueMIPS64_OpDiv32u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div32u x y) // cond: // result: (Select1 (DIVVU (ZeroExt32to64 x) (ZeroExt32to64 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpMIPS64DIVVU, types.NewTuple(typ.UInt64, typ.UInt64)) v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) @@ -1407,16 +1384,13 @@ func rewriteValueMIPS64_OpDiv32u_0(v *Value) bool { } func rewriteValueMIPS64_OpDiv64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div64 x y) // cond: // result: (Select1 (DIVV x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpMIPS64DIVV, types.NewTuple(typ.Int64, typ.Int64)) v0.AddArg(x) @@ -1430,9 +1404,8 @@ func rewriteValueMIPS64_OpDiv64F_0(v *Value) bool { // cond: // result: (DIVD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64DIVD) v.AddArg(x) v.AddArg(y) @@ -1441,16 +1414,13 @@ func rewriteValueMIPS64_OpDiv64F_0(v *Value) bool { } func rewriteValueMIPS64_OpDiv64u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div64u x y) // cond: // result: (Select1 (DIVVU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpMIPS64DIVVU, types.NewTuple(typ.UInt64, typ.UInt64)) v0.AddArg(x) @@ -1461,16 +1431,13 @@ func rewriteValueMIPS64_OpDiv64u_0(v *Value) bool { } func rewriteValueMIPS64_OpDiv8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div8 x y) // cond: // result: (Select1 (DIVV (SignExt8to64 x) (SignExt8to64 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpMIPS64DIVV, types.NewTuple(typ.Int64, typ.Int64)) v1 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) @@ -1485,16 +1452,13 @@ func rewriteValueMIPS64_OpDiv8_0(v *Value) bool { } func rewriteValueMIPS64_OpDiv8u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div8u x y) // cond: // result: (Select1 (DIVVU (ZeroExt8to64 x) (ZeroExt8to64 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpMIPS64DIVVU, types.NewTuple(typ.UInt64, typ.UInt64)) v1 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) @@ -1509,16 +1473,13 @@ func rewriteValueMIPS64_OpDiv8u_0(v *Value) bool { } func rewriteValueMIPS64_OpEq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq16 x y) // cond: // result: (SGTU (MOVVconst [1]) (XOR (ZeroExt16to64 x) (ZeroExt16to64 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGTU) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -1536,16 +1497,13 @@ func rewriteValueMIPS64_OpEq16_0(v *Value) bool { } func rewriteValueMIPS64_OpEq32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq32 x y) // cond: // result: (SGTU (MOVVconst [1]) (XOR (ZeroExt32to64 x) (ZeroExt32to64 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGTU) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -1563,14 +1521,12 @@ func rewriteValueMIPS64_OpEq32_0(v *Value) bool { } func rewriteValueMIPS64_OpEq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Eq32F x y) // cond: // result: (FPFlagTrue (CMPEQF x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64FPFlagTrue) v0 := b.NewValue0(v.Pos, OpMIPS64CMPEQF, types.TypeFlags) v0.AddArg(x) @@ -1581,16 +1537,13 @@ func rewriteValueMIPS64_OpEq32F_0(v *Value) bool { } func rewriteValueMIPS64_OpEq64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq64 x y) // cond: // result: (SGTU (MOVVconst [1]) (XOR x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGTU) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -1604,14 +1557,12 @@ func rewriteValueMIPS64_OpEq64_0(v *Value) bool { } func rewriteValueMIPS64_OpEq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Eq64F x y) // cond: // result: (FPFlagTrue (CMPEQD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64FPFlagTrue) v0 := b.NewValue0(v.Pos, OpMIPS64CMPEQD, types.TypeFlags) v0.AddArg(x) @@ -1622,16 +1573,13 @@ func rewriteValueMIPS64_OpEq64F_0(v *Value) bool { } func rewriteValueMIPS64_OpEq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq8 x y) // cond: // result: (SGTU (MOVVconst [1]) (XOR (ZeroExt8to64 x) (ZeroExt8to64 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGTU) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -1649,16 +1597,13 @@ func rewriteValueMIPS64_OpEq8_0(v *Value) bool { } func rewriteValueMIPS64_OpEqB_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (EqB x y) // cond: // result: (XOR (MOVVconst [1]) (XOR x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -1672,16 +1617,13 @@ func rewriteValueMIPS64_OpEqB_0(v *Value) bool { } func rewriteValueMIPS64_OpEqPtr_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (EqPtr x y) // cond: // result: (SGTU (MOVVconst [1]) (XOR x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGTU) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -1695,16 +1637,13 @@ func rewriteValueMIPS64_OpEqPtr_0(v *Value) bool { } func rewriteValueMIPS64_OpGeq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq16 x y) // cond: // result: (XOR (MOVVconst [1]) (SGT (SignExt16to64 y) (SignExt16to64 x))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -1722,16 +1661,13 @@ func rewriteValueMIPS64_OpGeq16_0(v *Value) bool { } func rewriteValueMIPS64_OpGeq16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq16U x y) // cond: // result: (XOR (MOVVconst [1]) (SGTU (ZeroExt16to64 y) (ZeroExt16to64 x))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -1749,16 +1685,13 @@ func rewriteValueMIPS64_OpGeq16U_0(v *Value) bool { } func rewriteValueMIPS64_OpGeq32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq32 x y) // cond: // result: (XOR (MOVVconst [1]) (SGT (SignExt32to64 y) (SignExt32to64 x))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -1776,14 +1709,12 @@ func rewriteValueMIPS64_OpGeq32_0(v *Value) bool { } func rewriteValueMIPS64_OpGeq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Geq32F x y) // cond: // result: (FPFlagTrue (CMPGEF x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64FPFlagTrue) v0 := b.NewValue0(v.Pos, OpMIPS64CMPGEF, types.TypeFlags) v0.AddArg(x) @@ -1794,16 +1725,13 @@ func rewriteValueMIPS64_OpGeq32F_0(v *Value) bool { } func rewriteValueMIPS64_OpGeq32U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq32U x y) // cond: // result: (XOR (MOVVconst [1]) (SGTU (ZeroExt32to64 y) (ZeroExt32to64 x))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -1821,16 +1749,13 @@ func rewriteValueMIPS64_OpGeq32U_0(v *Value) bool { } func rewriteValueMIPS64_OpGeq64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq64 x y) // cond: // result: (XOR (MOVVconst [1]) (SGT y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -1844,14 +1769,12 @@ func rewriteValueMIPS64_OpGeq64_0(v *Value) bool { } func rewriteValueMIPS64_OpGeq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Geq64F x y) // cond: // result: (FPFlagTrue (CMPGED x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64FPFlagTrue) v0 := b.NewValue0(v.Pos, OpMIPS64CMPGED, types.TypeFlags) v0.AddArg(x) @@ -1862,16 +1785,13 @@ func rewriteValueMIPS64_OpGeq64F_0(v *Value) bool { } func rewriteValueMIPS64_OpGeq64U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq64U x y) // cond: // result: (XOR (MOVVconst [1]) (SGTU y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -1885,16 +1805,13 @@ func rewriteValueMIPS64_OpGeq64U_0(v *Value) bool { } func rewriteValueMIPS64_OpGeq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq8 x y) // cond: // result: (XOR (MOVVconst [1]) (SGT (SignExt8to64 y) (SignExt8to64 x))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -1912,16 +1829,13 @@ func rewriteValueMIPS64_OpGeq8_0(v *Value) bool { } func rewriteValueMIPS64_OpGeq8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq8U x y) // cond: // result: (XOR (MOVVconst [1]) (SGTU (ZeroExt8to64 y) (ZeroExt8to64 x))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -1966,16 +1880,13 @@ func rewriteValueMIPS64_OpGetClosurePtr_0(v *Value) bool { } func rewriteValueMIPS64_OpGreater16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater16 x y) // cond: // result: (SGT (SignExt16to64 x) (SignExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGT) v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) v0.AddArg(x) @@ -1988,16 +1899,13 @@ func rewriteValueMIPS64_OpGreater16_0(v *Value) bool { } func rewriteValueMIPS64_OpGreater16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater16U x y) // cond: // result: (SGTU (ZeroExt16to64 x) (ZeroExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGTU) v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) v0.AddArg(x) @@ -2010,16 +1918,13 @@ func rewriteValueMIPS64_OpGreater16U_0(v *Value) bool { } func rewriteValueMIPS64_OpGreater32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater32 x y) // cond: // result: (SGT (SignExt32to64 x) (SignExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGT) v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v0.AddArg(x) @@ -2032,14 +1937,12 @@ func rewriteValueMIPS64_OpGreater32_0(v *Value) bool { } func rewriteValueMIPS64_OpGreater32F_0(v *Value) bool { b := v.Block - _ = b // match: (Greater32F x y) // cond: // result: (FPFlagTrue (CMPGTF x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64FPFlagTrue) v0 := b.NewValue0(v.Pos, OpMIPS64CMPGTF, types.TypeFlags) v0.AddArg(x) @@ -2050,16 +1953,13 @@ func rewriteValueMIPS64_OpGreater32F_0(v *Value) bool { } func rewriteValueMIPS64_OpGreater32U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater32U x y) // cond: // result: (SGTU (ZeroExt32to64 x) (ZeroExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGTU) v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) v0.AddArg(x) @@ -2075,9 +1975,8 @@ func rewriteValueMIPS64_OpGreater64_0(v *Value) bool { // cond: // result: (SGT x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGT) v.AddArg(x) v.AddArg(y) @@ -2086,14 +1985,12 @@ func rewriteValueMIPS64_OpGreater64_0(v *Value) bool { } func rewriteValueMIPS64_OpGreater64F_0(v *Value) bool { b := v.Block - _ = b // match: (Greater64F x y) // cond: // result: (FPFlagTrue (CMPGTD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64FPFlagTrue) v0 := b.NewValue0(v.Pos, OpMIPS64CMPGTD, types.TypeFlags) v0.AddArg(x) @@ -2107,9 +2004,8 @@ func rewriteValueMIPS64_OpGreater64U_0(v *Value) bool { // cond: // result: (SGTU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGTU) v.AddArg(x) v.AddArg(y) @@ -2118,16 +2014,13 @@ func rewriteValueMIPS64_OpGreater64U_0(v *Value) bool { } func rewriteValueMIPS64_OpGreater8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater8 x y) // cond: // result: (SGT (SignExt8to64 x) (SignExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGT) v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) v0.AddArg(x) @@ -2140,16 +2033,13 @@ func rewriteValueMIPS64_OpGreater8_0(v *Value) bool { } func rewriteValueMIPS64_OpGreater8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater8U x y) // cond: // result: (SGTU (ZeroExt8to64 x) (ZeroExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGTU) v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) v0.AddArg(x) @@ -2162,16 +2052,13 @@ func rewriteValueMIPS64_OpGreater8U_0(v *Value) bool { } func rewriteValueMIPS64_OpHmul32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Hmul32 x y) // cond: // result: (SRAVconst (Select1 (MULV (SignExt32to64 x) (SignExt32to64 y))) [32]) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SRAVconst) v.AuxInt = 32 v0 := b.NewValue0(v.Pos, OpSelect1, typ.Int64) @@ -2189,16 +2076,13 @@ func rewriteValueMIPS64_OpHmul32_0(v *Value) bool { } func rewriteValueMIPS64_OpHmul32u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Hmul32u x y) // cond: // result: (SRLVconst (Select1 (MULVU (ZeroExt32to64 x) (ZeroExt32to64 y))) [32]) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SRLVconst) v.AuxInt = 32 v0 := b.NewValue0(v.Pos, OpSelect1, typ.UInt64) @@ -2216,16 +2100,13 @@ func rewriteValueMIPS64_OpHmul32u_0(v *Value) bool { } func rewriteValueMIPS64_OpHmul64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Hmul64 x y) // cond: // result: (Select0 (MULV x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpMIPS64MULV, types.NewTuple(typ.Int64, typ.Int64)) v0.AddArg(x) @@ -2236,16 +2117,13 @@ func rewriteValueMIPS64_OpHmul64_0(v *Value) bool { } func rewriteValueMIPS64_OpHmul64u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Hmul64u x y) // cond: // result: (Select0 (MULVU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpMIPS64MULVU, types.NewTuple(typ.UInt64, typ.UInt64)) v0.AddArg(x) @@ -2260,9 +2138,8 @@ func rewriteValueMIPS64_OpInterCall_0(v *Value) bool { // result: (CALLinter [argwid] entry mem) for { argwid := v.AuxInt - _ = v.Args[1] - entry := v.Args[0] mem := v.Args[1] + entry := v.Args[0] v.reset(OpMIPS64CALLinter) v.AuxInt = argwid v.AddArg(entry) @@ -2275,9 +2152,8 @@ func rewriteValueMIPS64_OpIsInBounds_0(v *Value) bool { // cond: // result: (SGTU len idx) for { - _ = v.Args[1] - idx := v.Args[0] len := v.Args[1] + idx := v.Args[0] v.reset(OpMIPS64SGTU) v.AddArg(len) v.AddArg(idx) @@ -2286,9 +2162,7 @@ func rewriteValueMIPS64_OpIsInBounds_0(v *Value) bool { } func rewriteValueMIPS64_OpIsNonNil_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (IsNonNil ptr) // cond: // result: (SGTU ptr (MOVVconst [0])) @@ -2304,16 +2178,13 @@ func rewriteValueMIPS64_OpIsNonNil_0(v *Value) bool { } func rewriteValueMIPS64_OpIsSliceInBounds_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (IsSliceInBounds idx len) // cond: // result: (XOR (MOVVconst [1]) (SGTU idx len)) for { - _ = v.Args[1] - idx := v.Args[0] len := v.Args[1] + idx := v.Args[0] v.reset(OpMIPS64XOR) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -2327,16 +2198,13 @@ func rewriteValueMIPS64_OpIsSliceInBounds_0(v *Value) bool { } func rewriteValueMIPS64_OpLeq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq16 x y) // cond: // result: (XOR (MOVVconst [1]) (SGT (SignExt16to64 x) (SignExt16to64 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -2354,16 +2222,13 @@ func rewriteValueMIPS64_OpLeq16_0(v *Value) bool { } func rewriteValueMIPS64_OpLeq16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq16U x y) // cond: // result: (XOR (MOVVconst [1]) (SGTU (ZeroExt16to64 x) (ZeroExt16to64 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -2381,16 +2246,13 @@ func rewriteValueMIPS64_OpLeq16U_0(v *Value) bool { } func rewriteValueMIPS64_OpLeq32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq32 x y) // cond: // result: (XOR (MOVVconst [1]) (SGT (SignExt32to64 x) (SignExt32to64 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -2408,14 +2270,12 @@ func rewriteValueMIPS64_OpLeq32_0(v *Value) bool { } func rewriteValueMIPS64_OpLeq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Leq32F x y) // cond: // result: (FPFlagTrue (CMPGEF y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64FPFlagTrue) v0 := b.NewValue0(v.Pos, OpMIPS64CMPGEF, types.TypeFlags) v0.AddArg(y) @@ -2426,16 +2286,13 @@ func rewriteValueMIPS64_OpLeq32F_0(v *Value) bool { } func rewriteValueMIPS64_OpLeq32U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq32U x y) // cond: // result: (XOR (MOVVconst [1]) (SGTU (ZeroExt32to64 x) (ZeroExt32to64 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -2453,16 +2310,13 @@ func rewriteValueMIPS64_OpLeq32U_0(v *Value) bool { } func rewriteValueMIPS64_OpLeq64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq64 x y) // cond: // result: (XOR (MOVVconst [1]) (SGT x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -2476,14 +2330,12 @@ func rewriteValueMIPS64_OpLeq64_0(v *Value) bool { } func rewriteValueMIPS64_OpLeq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Leq64F x y) // cond: // result: (FPFlagTrue (CMPGED y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64FPFlagTrue) v0 := b.NewValue0(v.Pos, OpMIPS64CMPGED, types.TypeFlags) v0.AddArg(y) @@ -2494,16 +2346,13 @@ func rewriteValueMIPS64_OpLeq64F_0(v *Value) bool { } func rewriteValueMIPS64_OpLeq64U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq64U x y) // cond: // result: (XOR (MOVVconst [1]) (SGTU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -2517,16 +2366,13 @@ func rewriteValueMIPS64_OpLeq64U_0(v *Value) bool { } func rewriteValueMIPS64_OpLeq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq8 x y) // cond: // result: (XOR (MOVVconst [1]) (SGT (SignExt8to64 x) (SignExt8to64 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -2544,16 +2390,13 @@ func rewriteValueMIPS64_OpLeq8_0(v *Value) bool { } func rewriteValueMIPS64_OpLeq8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq8U x y) // cond: // result: (XOR (MOVVconst [1]) (SGTU (ZeroExt8to64 x) (ZeroExt8to64 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) v0.AuxInt = 1 @@ -2571,16 +2414,13 @@ func rewriteValueMIPS64_OpLeq8U_0(v *Value) bool { } func rewriteValueMIPS64_OpLess16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less16 x y) // cond: // result: (SGT (SignExt16to64 y) (SignExt16to64 x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGT) v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) v0.AddArg(y) @@ -2593,16 +2433,13 @@ func rewriteValueMIPS64_OpLess16_0(v *Value) bool { } func rewriteValueMIPS64_OpLess16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less16U x y) // cond: // result: (SGTU (ZeroExt16to64 y) (ZeroExt16to64 x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGTU) v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) v0.AddArg(y) @@ -2615,16 +2452,13 @@ func rewriteValueMIPS64_OpLess16U_0(v *Value) bool { } func rewriteValueMIPS64_OpLess32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less32 x y) // cond: // result: (SGT (SignExt32to64 y) (SignExt32to64 x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGT) v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v0.AddArg(y) @@ -2637,14 +2471,12 @@ func rewriteValueMIPS64_OpLess32_0(v *Value) bool { } func rewriteValueMIPS64_OpLess32F_0(v *Value) bool { b := v.Block - _ = b // match: (Less32F x y) // cond: // result: (FPFlagTrue (CMPGTF y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64FPFlagTrue) v0 := b.NewValue0(v.Pos, OpMIPS64CMPGTF, types.TypeFlags) v0.AddArg(y) @@ -2655,16 +2487,13 @@ func rewriteValueMIPS64_OpLess32F_0(v *Value) bool { } func rewriteValueMIPS64_OpLess32U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less32U x y) // cond: // result: (SGTU (ZeroExt32to64 y) (ZeroExt32to64 x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGTU) v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) v0.AddArg(y) @@ -2680,9 +2509,8 @@ func rewriteValueMIPS64_OpLess64_0(v *Value) bool { // cond: // result: (SGT y x) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGT) v.AddArg(y) v.AddArg(x) @@ -2691,14 +2519,12 @@ func rewriteValueMIPS64_OpLess64_0(v *Value) bool { } func rewriteValueMIPS64_OpLess64F_0(v *Value) bool { b := v.Block - _ = b // match: (Less64F x y) // cond: // result: (FPFlagTrue (CMPGTD y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64FPFlagTrue) v0 := b.NewValue0(v.Pos, OpMIPS64CMPGTD, types.TypeFlags) v0.AddArg(y) @@ -2712,9 +2538,8 @@ func rewriteValueMIPS64_OpLess64U_0(v *Value) bool { // cond: // result: (SGTU y x) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGTU) v.AddArg(y) v.AddArg(x) @@ -2723,16 +2548,13 @@ func rewriteValueMIPS64_OpLess64U_0(v *Value) bool { } func rewriteValueMIPS64_OpLess8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less8 x y) // cond: // result: (SGT (SignExt8to64 y) (SignExt8to64 x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGT) v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) v0.AddArg(y) @@ -2745,16 +2567,13 @@ func rewriteValueMIPS64_OpLess8_0(v *Value) bool { } func rewriteValueMIPS64_OpLess8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less8U x y) // cond: // result: (SGTU (ZeroExt8to64 y) (ZeroExt8to64 x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGTU) v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) v0.AddArg(y) @@ -2771,9 +2590,8 @@ func rewriteValueMIPS64_OpLoad_0(v *Value) bool { // result: (MOVBUload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.IsBoolean()) { break } @@ -2787,9 +2605,8 @@ func rewriteValueMIPS64_OpLoad_0(v *Value) bool { // result: (MOVBload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is8BitInt(t) && isSigned(t)) { break } @@ -2803,9 +2620,8 @@ func rewriteValueMIPS64_OpLoad_0(v *Value) bool { // result: (MOVBUload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is8BitInt(t) && !isSigned(t)) { break } @@ -2819,9 +2635,8 @@ func rewriteValueMIPS64_OpLoad_0(v *Value) bool { // result: (MOVHload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is16BitInt(t) && isSigned(t)) { break } @@ -2835,9 +2650,8 @@ func rewriteValueMIPS64_OpLoad_0(v *Value) bool { // result: (MOVHUload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is16BitInt(t) && !isSigned(t)) { break } @@ -2851,9 +2665,8 @@ func rewriteValueMIPS64_OpLoad_0(v *Value) bool { // result: (MOVWload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is32BitInt(t) && isSigned(t)) { break } @@ -2867,9 +2680,8 @@ func rewriteValueMIPS64_OpLoad_0(v *Value) bool { // result: (MOVWUload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is32BitInt(t) && !isSigned(t)) { break } @@ -2883,9 +2695,8 @@ func rewriteValueMIPS64_OpLoad_0(v *Value) bool { // result: (MOVVload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is64BitInt(t) || isPtr(t)) { break } @@ -2899,9 +2710,8 @@ func rewriteValueMIPS64_OpLoad_0(v *Value) bool { // result: (MOVFload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is32BitFloat(t)) { break } @@ -2915,9 +2725,8 @@ func rewriteValueMIPS64_OpLoad_0(v *Value) bool { // result: (MOVDload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is64BitFloat(t)) { break } @@ -2944,17 +2753,14 @@ func rewriteValueMIPS64_OpLocalAddr_0(v *Value) bool { } func rewriteValueMIPS64_OpLsh16x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x16 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt16to64 y))) (SLLV x (ZeroExt16to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -2977,17 +2783,14 @@ func rewriteValueMIPS64_OpLsh16x16_0(v *Value) bool { } func rewriteValueMIPS64_OpLsh16x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x32 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt32to64 y))) (SLLV x (ZeroExt32to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -3010,17 +2813,14 @@ func rewriteValueMIPS64_OpLsh16x32_0(v *Value) bool { } func rewriteValueMIPS64_OpLsh16x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x64 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) y)) (SLLV x y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -3039,17 +2839,14 @@ func rewriteValueMIPS64_OpLsh16x64_0(v *Value) bool { } func rewriteValueMIPS64_OpLsh16x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x8 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt8to64 y))) (SLLV x (ZeroExt8to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -3072,17 +2869,14 @@ func rewriteValueMIPS64_OpLsh16x8_0(v *Value) bool { } func rewriteValueMIPS64_OpLsh32x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x16 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt16to64 y))) (SLLV x (ZeroExt16to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -3105,17 +2899,14 @@ func rewriteValueMIPS64_OpLsh32x16_0(v *Value) bool { } func rewriteValueMIPS64_OpLsh32x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x32 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt32to64 y))) (SLLV x (ZeroExt32to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -3138,17 +2929,14 @@ func rewriteValueMIPS64_OpLsh32x32_0(v *Value) bool { } func rewriteValueMIPS64_OpLsh32x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x64 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) y)) (SLLV x y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -3167,17 +2955,14 @@ func rewriteValueMIPS64_OpLsh32x64_0(v *Value) bool { } func rewriteValueMIPS64_OpLsh32x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x8 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt8to64 y))) (SLLV x (ZeroExt8to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -3200,17 +2985,14 @@ func rewriteValueMIPS64_OpLsh32x8_0(v *Value) bool { } func rewriteValueMIPS64_OpLsh64x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x16 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt16to64 y))) (SLLV x (ZeroExt16to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -3233,17 +3015,14 @@ func rewriteValueMIPS64_OpLsh64x16_0(v *Value) bool { } func rewriteValueMIPS64_OpLsh64x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x32 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt32to64 y))) (SLLV x (ZeroExt32to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -3266,17 +3045,14 @@ func rewriteValueMIPS64_OpLsh64x32_0(v *Value) bool { } func rewriteValueMIPS64_OpLsh64x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x64 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) y)) (SLLV x y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -3295,17 +3071,14 @@ func rewriteValueMIPS64_OpLsh64x64_0(v *Value) bool { } func rewriteValueMIPS64_OpLsh64x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x8 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt8to64 y))) (SLLV x (ZeroExt8to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -3328,17 +3101,14 @@ func rewriteValueMIPS64_OpLsh64x8_0(v *Value) bool { } func rewriteValueMIPS64_OpLsh8x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x16 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt16to64 y))) (SLLV x (ZeroExt16to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -3361,17 +3131,14 @@ func rewriteValueMIPS64_OpLsh8x16_0(v *Value) bool { } func rewriteValueMIPS64_OpLsh8x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x32 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt32to64 y))) (SLLV x (ZeroExt32to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -3394,17 +3161,14 @@ func rewriteValueMIPS64_OpLsh8x32_0(v *Value) bool { } func rewriteValueMIPS64_OpLsh8x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x64 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) y)) (SLLV x y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -3423,17 +3187,14 @@ func rewriteValueMIPS64_OpLsh8x64_0(v *Value) bool { } func rewriteValueMIPS64_OpLsh8x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x8 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt8to64 y))) (SLLV x (ZeroExt8to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -3478,13 +3239,12 @@ func rewriteValueMIPS64_OpMIPS64ADDV_0(v *Value) bool { // cond: is32Bit(c) // result: (ADDVconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c)) { break } @@ -3513,13 +3273,12 @@ func rewriteValueMIPS64_OpMIPS64ADDV_0(v *Value) bool { // cond: // result: (SUBV x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64NEGV { break } y := v_0.Args[0] - x := v.Args[1] v.reset(OpMIPS64SUBV) v.AddArg(x) v.AddArg(y) @@ -3637,13 +3396,12 @@ func rewriteValueMIPS64_OpMIPS64AND_0(v *Value) bool { // cond: is32Bit(c) // result: (ANDconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c)) { break } @@ -3656,9 +3414,8 @@ func rewriteValueMIPS64_OpMIPS64AND_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -3730,14 +3487,13 @@ func rewriteValueMIPS64_OpMIPS64LoweredAtomicAdd32_0(v *Value) bool { // cond: is32Bit(c) // result: (LoweredAtomicAddconst32 [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPS64MOVVconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is32Bit(c)) { break } @@ -3754,14 +3510,13 @@ func rewriteValueMIPS64_OpMIPS64LoweredAtomicAdd64_0(v *Value) bool { // cond: is32Bit(c) // result: (LoweredAtomicAddconst64 [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPS64MOVVconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is32Bit(c)) { break } @@ -3778,7 +3533,7 @@ func rewriteValueMIPS64_OpMIPS64LoweredAtomicStore32_0(v *Value) bool { // cond: // result: (LoweredAtomicStorezero32 ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPS64MOVVconst { @@ -3787,7 +3542,6 @@ func rewriteValueMIPS64_OpMIPS64LoweredAtomicStore32_0(v *Value) bool { if v_1.AuxInt != 0 { break } - mem := v.Args[2] v.reset(OpMIPS64LoweredAtomicStorezero32) v.AddArg(ptr) v.AddArg(mem) @@ -3800,7 +3554,7 @@ func rewriteValueMIPS64_OpMIPS64LoweredAtomicStore64_0(v *Value) bool { // cond: // result: (LoweredAtomicStorezero64 ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPS64MOVVconst { @@ -3809,7 +3563,6 @@ func rewriteValueMIPS64_OpMIPS64LoweredAtomicStore64_0(v *Value) bool { if v_1.AuxInt != 0 { break } - mem := v.Args[2] v.reset(OpMIPS64LoweredAtomicStorezero64) v.AddArg(ptr) v.AddArg(mem) @@ -3824,14 +3577,13 @@ func rewriteValueMIPS64_OpMIPS64MOVBUload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64ADDVconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -3848,7 +3600,7 @@ func rewriteValueMIPS64_OpMIPS64MOVBUload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVaddr { break @@ -3856,7 +3608,6 @@ func rewriteValueMIPS64_OpMIPS64MOVBUload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -3917,14 +3668,13 @@ func rewriteValueMIPS64_OpMIPS64MOVBload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64ADDVconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -3941,7 +3691,7 @@ func rewriteValueMIPS64_OpMIPS64MOVBload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVaddr { break @@ -3949,7 +3699,6 @@ func rewriteValueMIPS64_OpMIPS64MOVBload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -4010,7 +3759,7 @@ func rewriteValueMIPS64_OpMIPS64MOVBstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpMIPS64ADDVconst { break @@ -4018,7 +3767,6 @@ func rewriteValueMIPS64_OpMIPS64MOVBstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -4036,7 +3784,7 @@ func rewriteValueMIPS64_OpMIPS64MOVBstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVaddr { break @@ -4045,7 +3793,6 @@ func rewriteValueMIPS64_OpMIPS64MOVBstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -4063,7 +3810,7 @@ func rewriteValueMIPS64_OpMIPS64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPS64MOVVconst { @@ -4072,7 +3819,6 @@ func rewriteValueMIPS64_OpMIPS64MOVBstore_0(v *Value) bool { if v_1.AuxInt != 0 { break } - mem := v.Args[2] v.reset(OpMIPS64MOVBstorezero) v.AuxInt = off v.Aux = sym @@ -4086,14 +3832,13 @@ func rewriteValueMIPS64_OpMIPS64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPS64MOVBreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpMIPS64MOVBstore) v.AuxInt = off v.Aux = sym @@ -4108,14 +3853,13 @@ func rewriteValueMIPS64_OpMIPS64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPS64MOVBUreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpMIPS64MOVBstore) v.AuxInt = off v.Aux = sym @@ -4130,14 +3874,13 @@ func rewriteValueMIPS64_OpMIPS64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPS64MOVHreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpMIPS64MOVBstore) v.AuxInt = off v.Aux = sym @@ -4152,14 +3895,13 @@ func rewriteValueMIPS64_OpMIPS64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPS64MOVHUreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpMIPS64MOVBstore) v.AuxInt = off v.Aux = sym @@ -4174,14 +3916,13 @@ func rewriteValueMIPS64_OpMIPS64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPS64MOVWreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpMIPS64MOVBstore) v.AuxInt = off v.Aux = sym @@ -4196,14 +3937,13 @@ func rewriteValueMIPS64_OpMIPS64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPS64MOVWUreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpMIPS64MOVBstore) v.AuxInt = off v.Aux = sym @@ -4221,14 +3961,13 @@ func rewriteValueMIPS64_OpMIPS64MOVBstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64ADDVconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -4245,7 +3984,7 @@ func rewriteValueMIPS64_OpMIPS64MOVBstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVaddr { break @@ -4253,7 +3992,6 @@ func rewriteValueMIPS64_OpMIPS64MOVBstorezero_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -4273,14 +4011,13 @@ func rewriteValueMIPS64_OpMIPS64MOVDload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64ADDVconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -4297,7 +4034,7 @@ func rewriteValueMIPS64_OpMIPS64MOVDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVaddr { break @@ -4305,7 +4042,6 @@ func rewriteValueMIPS64_OpMIPS64MOVDload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -4325,7 +4061,7 @@ func rewriteValueMIPS64_OpMIPS64MOVDstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpMIPS64ADDVconst { break @@ -4333,7 +4069,6 @@ func rewriteValueMIPS64_OpMIPS64MOVDstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -4351,7 +4086,7 @@ func rewriteValueMIPS64_OpMIPS64MOVDstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVaddr { break @@ -4360,7 +4095,6 @@ func rewriteValueMIPS64_OpMIPS64MOVDstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -4381,14 +4115,13 @@ func rewriteValueMIPS64_OpMIPS64MOVFload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64ADDVconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -4405,7 +4138,7 @@ func rewriteValueMIPS64_OpMIPS64MOVFload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVaddr { break @@ -4413,7 +4146,6 @@ func rewriteValueMIPS64_OpMIPS64MOVFload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -4433,7 +4165,7 @@ func rewriteValueMIPS64_OpMIPS64MOVFstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpMIPS64ADDVconst { break @@ -4441,7 +4173,6 @@ func rewriteValueMIPS64_OpMIPS64MOVFstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -4459,7 +4190,7 @@ func rewriteValueMIPS64_OpMIPS64MOVFstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVaddr { break @@ -4468,7 +4199,6 @@ func rewriteValueMIPS64_OpMIPS64MOVFstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -4489,14 +4219,13 @@ func rewriteValueMIPS64_OpMIPS64MOVHUload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64ADDVconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -4513,7 +4242,7 @@ func rewriteValueMIPS64_OpMIPS64MOVHUload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVaddr { break @@ -4521,7 +4250,6 @@ func rewriteValueMIPS64_OpMIPS64MOVHUload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -4607,14 +4335,13 @@ func rewriteValueMIPS64_OpMIPS64MOVHload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64ADDVconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -4631,7 +4358,7 @@ func rewriteValueMIPS64_OpMIPS64MOVHload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVaddr { break @@ -4639,7 +4366,6 @@ func rewriteValueMIPS64_OpMIPS64MOVHload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -4750,7 +4476,7 @@ func rewriteValueMIPS64_OpMIPS64MOVHstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpMIPS64ADDVconst { break @@ -4758,7 +4484,6 @@ func rewriteValueMIPS64_OpMIPS64MOVHstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -4776,7 +4501,7 @@ func rewriteValueMIPS64_OpMIPS64MOVHstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVaddr { break @@ -4785,7 +4510,6 @@ func rewriteValueMIPS64_OpMIPS64MOVHstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -4803,7 +4527,7 @@ func rewriteValueMIPS64_OpMIPS64MOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPS64MOVVconst { @@ -4812,7 +4536,6 @@ func rewriteValueMIPS64_OpMIPS64MOVHstore_0(v *Value) bool { if v_1.AuxInt != 0 { break } - mem := v.Args[2] v.reset(OpMIPS64MOVHstorezero) v.AuxInt = off v.Aux = sym @@ -4826,14 +4549,13 @@ func rewriteValueMIPS64_OpMIPS64MOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPS64MOVHreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpMIPS64MOVHstore) v.AuxInt = off v.Aux = sym @@ -4848,14 +4570,13 @@ func rewriteValueMIPS64_OpMIPS64MOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPS64MOVHUreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpMIPS64MOVHstore) v.AuxInt = off v.Aux = sym @@ -4870,14 +4591,13 @@ func rewriteValueMIPS64_OpMIPS64MOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPS64MOVWreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpMIPS64MOVHstore) v.AuxInt = off v.Aux = sym @@ -4892,14 +4612,13 @@ func rewriteValueMIPS64_OpMIPS64MOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPS64MOVWUreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpMIPS64MOVHstore) v.AuxInt = off v.Aux = sym @@ -4917,14 +4636,13 @@ func rewriteValueMIPS64_OpMIPS64MOVHstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64ADDVconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -4941,7 +4659,7 @@ func rewriteValueMIPS64_OpMIPS64MOVHstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVaddr { break @@ -4949,7 +4667,6 @@ func rewriteValueMIPS64_OpMIPS64MOVHstorezero_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -4969,14 +4686,13 @@ func rewriteValueMIPS64_OpMIPS64MOVVload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64ADDVconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -4993,7 +4709,7 @@ func rewriteValueMIPS64_OpMIPS64MOVVload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVaddr { break @@ -5001,7 +4717,6 @@ func rewriteValueMIPS64_OpMIPS64MOVVload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -5049,7 +4764,7 @@ func rewriteValueMIPS64_OpMIPS64MOVVstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpMIPS64ADDVconst { break @@ -5057,7 +4772,6 @@ func rewriteValueMIPS64_OpMIPS64MOVVstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -5075,7 +4789,7 @@ func rewriteValueMIPS64_OpMIPS64MOVVstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVaddr { break @@ -5084,7 +4798,6 @@ func rewriteValueMIPS64_OpMIPS64MOVVstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -5102,7 +4815,7 @@ func rewriteValueMIPS64_OpMIPS64MOVVstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPS64MOVVconst { @@ -5111,7 +4824,6 @@ func rewriteValueMIPS64_OpMIPS64MOVVstore_0(v *Value) bool { if v_1.AuxInt != 0 { break } - mem := v.Args[2] v.reset(OpMIPS64MOVVstorezero) v.AuxInt = off v.Aux = sym @@ -5128,14 +4840,13 @@ func rewriteValueMIPS64_OpMIPS64MOVVstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64ADDVconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -5152,7 +4863,7 @@ func rewriteValueMIPS64_OpMIPS64MOVVstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVaddr { break @@ -5160,7 +4871,6 @@ func rewriteValueMIPS64_OpMIPS64MOVVstorezero_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -5180,14 +4890,13 @@ func rewriteValueMIPS64_OpMIPS64MOVWUload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64ADDVconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -5204,7 +4913,7 @@ func rewriteValueMIPS64_OpMIPS64MOVWUload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVaddr { break @@ -5212,7 +4921,6 @@ func rewriteValueMIPS64_OpMIPS64MOVWUload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -5323,14 +5031,13 @@ func rewriteValueMIPS64_OpMIPS64MOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64ADDVconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -5347,7 +5054,7 @@ func rewriteValueMIPS64_OpMIPS64MOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVaddr { break @@ -5355,7 +5062,6 @@ func rewriteValueMIPS64_OpMIPS64MOVWload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -5519,7 +5225,7 @@ func rewriteValueMIPS64_OpMIPS64MOVWstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpMIPS64ADDVconst { break @@ -5527,7 +5233,6 @@ func rewriteValueMIPS64_OpMIPS64MOVWstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1 + off2)) { break } @@ -5545,7 +5250,7 @@ func rewriteValueMIPS64_OpMIPS64MOVWstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVaddr { break @@ -5554,7 +5259,6 @@ func rewriteValueMIPS64_OpMIPS64MOVWstore_0(v *Value) bool { sym2 := v_0.Aux ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -5572,7 +5276,7 @@ func rewriteValueMIPS64_OpMIPS64MOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPS64MOVVconst { @@ -5581,7 +5285,6 @@ func rewriteValueMIPS64_OpMIPS64MOVWstore_0(v *Value) bool { if v_1.AuxInt != 0 { break } - mem := v.Args[2] v.reset(OpMIPS64MOVWstorezero) v.AuxInt = off v.Aux = sym @@ -5595,14 +5298,13 @@ func rewriteValueMIPS64_OpMIPS64MOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPS64MOVWreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpMIPS64MOVWstore) v.AuxInt = off v.Aux = sym @@ -5617,14 +5319,13 @@ func rewriteValueMIPS64_OpMIPS64MOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpMIPS64MOVWUreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpMIPS64MOVWstore) v.AuxInt = off v.Aux = sym @@ -5642,14 +5343,13 @@ func rewriteValueMIPS64_OpMIPS64MOVWstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64ADDVconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1 + off2)) { break } @@ -5666,7 +5366,7 @@ func rewriteValueMIPS64_OpMIPS64MOVWstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVaddr { break @@ -5674,7 +5374,6 @@ func rewriteValueMIPS64_OpMIPS64MOVWstorezero_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && is32Bit(off1+off2)) { break } @@ -5727,13 +5426,12 @@ func rewriteValueMIPS64_OpMIPS64NOR_0(v *Value) bool { // cond: is32Bit(c) // result: (NORconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c)) { break } @@ -5785,13 +5483,12 @@ func rewriteValueMIPS64_OpMIPS64OR_0(v *Value) bool { // cond: is32Bit(c) // result: (ORconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c)) { break } @@ -5804,9 +5501,8 @@ func rewriteValueMIPS64_OpMIPS64OR_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -5881,13 +5577,12 @@ func rewriteValueMIPS64_OpMIPS64SGT_0(v *Value) bool { // cond: is32Bit(c) // result: (SGTconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c)) { break } @@ -5903,13 +5598,12 @@ func rewriteValueMIPS64_OpMIPS64SGTU_0(v *Value) bool { // cond: is32Bit(c) // result: (SGTUconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c)) { break } @@ -6426,9 +6120,8 @@ func rewriteValueMIPS64_OpMIPS64SUBV_0(v *Value) bool { // cond: // result: (MOVVconst [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpMIPS64MOVVconst) @@ -6439,7 +6132,7 @@ func rewriteValueMIPS64_OpMIPS64SUBV_0(v *Value) bool { // cond: // result: (NEGV x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVconst { break @@ -6447,7 +6140,6 @@ func rewriteValueMIPS64_OpMIPS64SUBV_0(v *Value) bool { if v_0.AuxInt != 0 { break } - x := v.Args[1] v.reset(OpMIPS64NEGV) v.AddArg(x) return true @@ -6546,13 +6238,12 @@ func rewriteValueMIPS64_OpMIPS64XOR_0(v *Value) bool { // cond: is32Bit(c) // result: (XORconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMIPS64MOVVconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c)) { break } @@ -6565,9 +6256,8 @@ func rewriteValueMIPS64_OpMIPS64XOR_0(v *Value) bool { // cond: // result: (MOVVconst [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpMIPS64MOVVconst) @@ -6640,16 +6330,13 @@ func rewriteValueMIPS64_OpMIPS64XORconst_0(v *Value) bool { } func rewriteValueMIPS64_OpMod16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod16 x y) // cond: // result: (Select0 (DIVV (SignExt16to64 x) (SignExt16to64 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpMIPS64DIVV, types.NewTuple(typ.Int64, typ.Int64)) v1 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) @@ -6664,16 +6351,13 @@ func rewriteValueMIPS64_OpMod16_0(v *Value) bool { } func rewriteValueMIPS64_OpMod16u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod16u x y) // cond: // result: (Select0 (DIVVU (ZeroExt16to64 x) (ZeroExt16to64 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpMIPS64DIVVU, types.NewTuple(typ.UInt64, typ.UInt64)) v1 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) @@ -6688,16 +6372,13 @@ func rewriteValueMIPS64_OpMod16u_0(v *Value) bool { } func rewriteValueMIPS64_OpMod32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod32 x y) // cond: // result: (Select0 (DIVV (SignExt32to64 x) (SignExt32to64 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpMIPS64DIVV, types.NewTuple(typ.Int64, typ.Int64)) v1 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) @@ -6712,16 +6393,13 @@ func rewriteValueMIPS64_OpMod32_0(v *Value) bool { } func rewriteValueMIPS64_OpMod32u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod32u x y) // cond: // result: (Select0 (DIVVU (ZeroExt32to64 x) (ZeroExt32to64 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpMIPS64DIVVU, types.NewTuple(typ.UInt64, typ.UInt64)) v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) @@ -6736,16 +6414,13 @@ func rewriteValueMIPS64_OpMod32u_0(v *Value) bool { } func rewriteValueMIPS64_OpMod64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod64 x y) // cond: // result: (Select0 (DIVV x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpMIPS64DIVV, types.NewTuple(typ.Int64, typ.Int64)) v0.AddArg(x) @@ -6756,16 +6431,13 @@ func rewriteValueMIPS64_OpMod64_0(v *Value) bool { } func rewriteValueMIPS64_OpMod64u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod64u x y) // cond: // result: (Select0 (DIVVU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpMIPS64DIVVU, types.NewTuple(typ.UInt64, typ.UInt64)) v0.AddArg(x) @@ -6776,16 +6448,13 @@ func rewriteValueMIPS64_OpMod64u_0(v *Value) bool { } func rewriteValueMIPS64_OpMod8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod8 x y) // cond: // result: (Select0 (DIVV (SignExt8to64 x) (SignExt8to64 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpMIPS64DIVV, types.NewTuple(typ.Int64, typ.Int64)) v1 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) @@ -6800,16 +6469,13 @@ func rewriteValueMIPS64_OpMod8_0(v *Value) bool { } func rewriteValueMIPS64_OpMod8u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod8u x y) // cond: // result: (Select0 (DIVVU (ZeroExt8to64 x) (ZeroExt8to64 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect0) v0 := b.NewValue0(v.Pos, OpMIPS64DIVVU, types.NewTuple(typ.UInt64, typ.UInt64)) v1 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) @@ -6824,9 +6490,7 @@ func rewriteValueMIPS64_OpMod8u_0(v *Value) bool { } func rewriteValueMIPS64_OpMove_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Move [0] _ _ mem) // cond: // result: mem @@ -6834,7 +6498,6 @@ func rewriteValueMIPS64_OpMove_0(v *Value) bool { if v.AuxInt != 0 { break } - _ = v.Args[2] mem := v.Args[2] v.reset(OpCopy) v.Type = mem.Type @@ -6848,10 +6511,9 @@ func rewriteValueMIPS64_OpMove_0(v *Value) bool { if v.AuxInt != 1 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpMIPS64MOVBstore) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpMIPS64MOVBload, typ.Int8) @@ -6869,10 +6531,9 @@ func rewriteValueMIPS64_OpMove_0(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%2 == 0) { break } @@ -6892,10 +6553,9 @@ func rewriteValueMIPS64_OpMove_0(v *Value) bool { if v.AuxInt != 2 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpMIPS64MOVBstore) v.AuxInt = 1 v.AddArg(dst) @@ -6922,10 +6582,9 @@ func rewriteValueMIPS64_OpMove_0(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -6946,10 +6605,9 @@ func rewriteValueMIPS64_OpMove_0(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%2 == 0) { break } @@ -6978,10 +6636,9 @@ func rewriteValueMIPS64_OpMove_0(v *Value) bool { if v.AuxInt != 4 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpMIPS64MOVBstore) v.AuxInt = 3 v.AddArg(dst) @@ -7026,10 +6683,9 @@ func rewriteValueMIPS64_OpMove_0(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%8 == 0) { break } @@ -7050,10 +6706,9 @@ func rewriteValueMIPS64_OpMove_0(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -7083,10 +6738,9 @@ func rewriteValueMIPS64_OpMove_0(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%2 == 0) { break } @@ -7130,11 +6784,8 @@ func rewriteValueMIPS64_OpMove_0(v *Value) bool { } func rewriteValueMIPS64_OpMove_10(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Move [3] dst src mem) // cond: // result: (MOVBstore [2] dst (MOVBload [2] src mem) (MOVBstore [1] dst (MOVBload [1] src mem) (MOVBstore dst (MOVBload src mem) mem))) @@ -7142,10 +6793,9 @@ func rewriteValueMIPS64_OpMove_10(v *Value) bool { if v.AuxInt != 3 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpMIPS64MOVBstore) v.AuxInt = 2 v.AddArg(dst) @@ -7181,10 +6831,9 @@ func rewriteValueMIPS64_OpMove_10(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%2 == 0) { break } @@ -7223,10 +6872,9 @@ func rewriteValueMIPS64_OpMove_10(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -7265,10 +6913,9 @@ func rewriteValueMIPS64_OpMove_10(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%8 == 0) { break } @@ -7298,10 +6945,9 @@ func rewriteValueMIPS64_OpMove_10(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%8 == 0) { break } @@ -7338,10 +6984,9 @@ func rewriteValueMIPS64_OpMove_10(v *Value) bool { for { s := v.AuxInt t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s > 24 || t.(*types.Type).Alignment()%8 != 0) { break } @@ -7360,16 +7005,13 @@ func rewriteValueMIPS64_OpMove_10(v *Value) bool { } func rewriteValueMIPS64_OpMul16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mul16 x y) // cond: // result: (Select1 (MULVU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpMIPS64MULVU, types.NewTuple(typ.UInt64, typ.UInt64)) v0.AddArg(x) @@ -7380,16 +7022,13 @@ func rewriteValueMIPS64_OpMul16_0(v *Value) bool { } func rewriteValueMIPS64_OpMul32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mul32 x y) // cond: // result: (Select1 (MULVU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpMIPS64MULVU, types.NewTuple(typ.UInt64, typ.UInt64)) v0.AddArg(x) @@ -7403,9 +7042,8 @@ func rewriteValueMIPS64_OpMul32F_0(v *Value) bool { // cond: // result: (MULF x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64MULF) v.AddArg(x) v.AddArg(y) @@ -7414,16 +7052,13 @@ func rewriteValueMIPS64_OpMul32F_0(v *Value) bool { } func rewriteValueMIPS64_OpMul64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mul64 x y) // cond: // result: (Select1 (MULVU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpMIPS64MULVU, types.NewTuple(typ.UInt64, typ.UInt64)) v0.AddArg(x) @@ -7437,9 +7072,8 @@ func rewriteValueMIPS64_OpMul64F_0(v *Value) bool { // cond: // result: (MULD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64MULD) v.AddArg(x) v.AddArg(y) @@ -7448,16 +7082,13 @@ func rewriteValueMIPS64_OpMul64F_0(v *Value) bool { } func rewriteValueMIPS64_OpMul8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mul8 x y) // cond: // result: (Select1 (MULVU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpSelect1) v0 := b.NewValue0(v.Pos, OpMIPS64MULVU, types.NewTuple(typ.UInt64, typ.UInt64)) v0.AddArg(x) @@ -7534,16 +7165,13 @@ func rewriteValueMIPS64_OpNeg8_0(v *Value) bool { } func rewriteValueMIPS64_OpNeq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq16 x y) // cond: // result: (SGTU (XOR (ZeroExt16to32 x) (ZeroExt16to64 y)) (MOVVconst [0])) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGTU) v0 := b.NewValue0(v.Pos, OpMIPS64XOR, typ.UInt64) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -7561,16 +7189,13 @@ func rewriteValueMIPS64_OpNeq16_0(v *Value) bool { } func rewriteValueMIPS64_OpNeq32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq32 x y) // cond: // result: (SGTU (XOR (ZeroExt32to64 x) (ZeroExt32to64 y)) (MOVVconst [0])) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGTU) v0 := b.NewValue0(v.Pos, OpMIPS64XOR, typ.UInt64) v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) @@ -7588,14 +7213,12 @@ func rewriteValueMIPS64_OpNeq32_0(v *Value) bool { } func rewriteValueMIPS64_OpNeq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Neq32F x y) // cond: // result: (FPFlagFalse (CMPEQF x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64FPFlagFalse) v0 := b.NewValue0(v.Pos, OpMIPS64CMPEQF, types.TypeFlags) v0.AddArg(x) @@ -7606,16 +7229,13 @@ func rewriteValueMIPS64_OpNeq32F_0(v *Value) bool { } func rewriteValueMIPS64_OpNeq64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq64 x y) // cond: // result: (SGTU (XOR x y) (MOVVconst [0])) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGTU) v0 := b.NewValue0(v.Pos, OpMIPS64XOR, typ.UInt64) v0.AddArg(x) @@ -7629,14 +7249,12 @@ func rewriteValueMIPS64_OpNeq64_0(v *Value) bool { } func rewriteValueMIPS64_OpNeq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Neq64F x y) // cond: // result: (FPFlagFalse (CMPEQD x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64FPFlagFalse) v0 := b.NewValue0(v.Pos, OpMIPS64CMPEQD, types.TypeFlags) v0.AddArg(x) @@ -7647,16 +7265,13 @@ func rewriteValueMIPS64_OpNeq64F_0(v *Value) bool { } func rewriteValueMIPS64_OpNeq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq8 x y) // cond: // result: (SGTU (XOR (ZeroExt8to64 x) (ZeroExt8to64 y)) (MOVVconst [0])) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGTU) v0 := b.NewValue0(v.Pos, OpMIPS64XOR, typ.UInt64) v1 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) @@ -7677,9 +7292,8 @@ func rewriteValueMIPS64_OpNeqB_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v.AddArg(x) v.AddArg(y) @@ -7688,16 +7302,13 @@ func rewriteValueMIPS64_OpNeqB_0(v *Value) bool { } func rewriteValueMIPS64_OpNeqPtr_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (NeqPtr x y) // cond: // result: (SGTU (XOR x y) (MOVVconst [0])) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SGTU) v0 := b.NewValue0(v.Pos, OpMIPS64XOR, typ.UInt64) v0.AddArg(x) @@ -7714,9 +7325,8 @@ func rewriteValueMIPS64_OpNilCheck_0(v *Value) bool { // cond: // result: (LoweredNilCheck ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpMIPS64LoweredNilCheck) v.AddArg(ptr) v.AddArg(mem) @@ -7767,9 +7377,8 @@ func rewriteValueMIPS64_OpOr16_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64OR) v.AddArg(x) v.AddArg(y) @@ -7781,9 +7390,8 @@ func rewriteValueMIPS64_OpOr32_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64OR) v.AddArg(x) v.AddArg(y) @@ -7795,9 +7403,8 @@ func rewriteValueMIPS64_OpOr64_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64OR) v.AddArg(x) v.AddArg(y) @@ -7809,9 +7416,8 @@ func rewriteValueMIPS64_OpOr8_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64OR) v.AddArg(x) v.AddArg(y) @@ -7823,15 +7429,199 @@ func rewriteValueMIPS64_OpOrB_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64OR) v.AddArg(x) v.AddArg(y) return true } } +func rewriteValueMIPS64_OpPanicBounds_0(v *Value) bool { + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 0 + // result: (LoweredPanicBoundsA [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 0) { + break + } + v.reset(OpMIPS64LoweredPanicBoundsA) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 1 + // result: (LoweredPanicBoundsB [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 1) { + break + } + v.reset(OpMIPS64LoweredPanicBoundsB) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 2 + // result: (LoweredPanicBoundsC [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 2) { + break + } + v.reset(OpMIPS64LoweredPanicBoundsC) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + return false +} +func rewriteValueMIPS64_OpRotateLeft16_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (RotateLeft16 x (MOVVconst [c])) + // cond: + // result: (Or16 (Lsh16x64 x (MOVVconst [c&15])) (Rsh16Ux64 x (MOVVconst [-c&15]))) + for { + t := v.Type + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMIPS64MOVVconst { + break + } + c := v_1.AuxInt + v.reset(OpOr16) + v0 := b.NewValue0(v.Pos, OpLsh16x64, t) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) + v1.AuxInt = c & 15 + v0.AddArg(v1) + v.AddArg(v0) + v2 := b.NewValue0(v.Pos, OpRsh16Ux64, t) + v2.AddArg(x) + v3 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) + v3.AuxInt = -c & 15 + v2.AddArg(v3) + v.AddArg(v2) + return true + } + return false +} +func rewriteValueMIPS64_OpRotateLeft32_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (RotateLeft32 x (MOVVconst [c])) + // cond: + // result: (Or32 (Lsh32x64 x (MOVVconst [c&31])) (Rsh32Ux64 x (MOVVconst [-c&31]))) + for { + t := v.Type + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMIPS64MOVVconst { + break + } + c := v_1.AuxInt + v.reset(OpOr32) + v0 := b.NewValue0(v.Pos, OpLsh32x64, t) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) + v1.AuxInt = c & 31 + v0.AddArg(v1) + v.AddArg(v0) + v2 := b.NewValue0(v.Pos, OpRsh32Ux64, t) + v2.AddArg(x) + v3 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) + v3.AuxInt = -c & 31 + v2.AddArg(v3) + v.AddArg(v2) + return true + } + return false +} +func rewriteValueMIPS64_OpRotateLeft64_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (RotateLeft64 x (MOVVconst [c])) + // cond: + // result: (Or64 (Lsh64x64 x (MOVVconst [c&63])) (Rsh64Ux64 x (MOVVconst [-c&63]))) + for { + t := v.Type + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMIPS64MOVVconst { + break + } + c := v_1.AuxInt + v.reset(OpOr64) + v0 := b.NewValue0(v.Pos, OpLsh64x64, t) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) + v1.AuxInt = c & 63 + v0.AddArg(v1) + v.AddArg(v0) + v2 := b.NewValue0(v.Pos, OpRsh64Ux64, t) + v2.AddArg(x) + v3 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) + v3.AuxInt = -c & 63 + v2.AddArg(v3) + v.AddArg(v2) + return true + } + return false +} +func rewriteValueMIPS64_OpRotateLeft8_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (RotateLeft8 x (MOVVconst [c])) + // cond: + // result: (Or8 (Lsh8x64 x (MOVVconst [c&7])) (Rsh8Ux64 x (MOVVconst [-c&7]))) + for { + t := v.Type + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMIPS64MOVVconst { + break + } + c := v_1.AuxInt + v.reset(OpOr8) + v0 := b.NewValue0(v.Pos, OpLsh8x64, t) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) + v1.AuxInt = c & 7 + v0.AddArg(v1) + v.AddArg(v0) + v2 := b.NewValue0(v.Pos, OpRsh8Ux64, t) + v2.AddArg(x) + v3 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) + v3.AuxInt = -c & 7 + v2.AddArg(v3) + v.AddArg(v2) + return true + } + return false +} func rewriteValueMIPS64_OpRound32F_0(v *Value) bool { // match: (Round32F x) // cond: @@ -7858,17 +7648,14 @@ func rewriteValueMIPS64_OpRound64F_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh16Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux16 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt16to64 y))) (SRLV (ZeroExt16to64 x) (ZeroExt16to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -7893,17 +7680,14 @@ func rewriteValueMIPS64_OpRsh16Ux16_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh16Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux32 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt32to64 y))) (SRLV (ZeroExt16to64 x) (ZeroExt32to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -7928,17 +7712,14 @@ func rewriteValueMIPS64_OpRsh16Ux32_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh16Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux64 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) y)) (SRLV (ZeroExt16to64 x) y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -7959,17 +7740,14 @@ func rewriteValueMIPS64_OpRsh16Ux64_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh16Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux8 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt8to64 y))) (SRLV (ZeroExt16to64 x) (ZeroExt8to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -7994,17 +7772,14 @@ func rewriteValueMIPS64_OpRsh16Ux8_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh16x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x16 x y) // cond: // result: (SRAV (SignExt16to64 x) (OR (NEGV (SGTU (ZeroExt16to64 y) (MOVVconst [63]))) (ZeroExt16to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SRAV) v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) v0.AddArg(x) @@ -8029,17 +7804,14 @@ func rewriteValueMIPS64_OpRsh16x16_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh16x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x32 x y) // cond: // result: (SRAV (SignExt16to64 x) (OR (NEGV (SGTU (ZeroExt32to64 y) (MOVVconst [63]))) (ZeroExt32to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SRAV) v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) v0.AddArg(x) @@ -8064,17 +7836,14 @@ func rewriteValueMIPS64_OpRsh16x32_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh16x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x64 x y) // cond: // result: (SRAV (SignExt16to64 x) (OR (NEGV (SGTU y (MOVVconst [63]))) y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SRAV) v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) v0.AddArg(x) @@ -8095,17 +7864,14 @@ func rewriteValueMIPS64_OpRsh16x64_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh16x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x8 x y) // cond: // result: (SRAV (SignExt16to64 x) (OR (NEGV (SGTU (ZeroExt8to64 y) (MOVVconst [63]))) (ZeroExt8to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SRAV) v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) v0.AddArg(x) @@ -8130,17 +7896,14 @@ func rewriteValueMIPS64_OpRsh16x8_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh32Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux16 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt16to64 y))) (SRLV (ZeroExt32to64 x) (ZeroExt16to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -8165,17 +7928,14 @@ func rewriteValueMIPS64_OpRsh32Ux16_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh32Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux32 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt32to64 y))) (SRLV (ZeroExt32to64 x) (ZeroExt32to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -8200,17 +7960,14 @@ func rewriteValueMIPS64_OpRsh32Ux32_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh32Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux64 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) y)) (SRLV (ZeroExt32to64 x) y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -8231,17 +7988,14 @@ func rewriteValueMIPS64_OpRsh32Ux64_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh32Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux8 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt8to64 y))) (SRLV (ZeroExt32to64 x) (ZeroExt8to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -8266,17 +8020,14 @@ func rewriteValueMIPS64_OpRsh32Ux8_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh32x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x16 x y) // cond: // result: (SRAV (SignExt32to64 x) (OR (NEGV (SGTU (ZeroExt16to64 y) (MOVVconst [63]))) (ZeroExt16to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SRAV) v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v0.AddArg(x) @@ -8301,17 +8052,14 @@ func rewriteValueMIPS64_OpRsh32x16_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh32x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x32 x y) // cond: // result: (SRAV (SignExt32to64 x) (OR (NEGV (SGTU (ZeroExt32to64 y) (MOVVconst [63]))) (ZeroExt32to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SRAV) v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v0.AddArg(x) @@ -8336,17 +8084,14 @@ func rewriteValueMIPS64_OpRsh32x32_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh32x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x64 x y) // cond: // result: (SRAV (SignExt32to64 x) (OR (NEGV (SGTU y (MOVVconst [63]))) y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SRAV) v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v0.AddArg(x) @@ -8367,17 +8112,14 @@ func rewriteValueMIPS64_OpRsh32x64_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh32x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x8 x y) // cond: // result: (SRAV (SignExt32to64 x) (OR (NEGV (SGTU (ZeroExt8to64 y) (MOVVconst [63]))) (ZeroExt8to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SRAV) v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v0.AddArg(x) @@ -8402,17 +8144,14 @@ func rewriteValueMIPS64_OpRsh32x8_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh64Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux16 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt16to64 y))) (SRLV x (ZeroExt16to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -8435,17 +8174,14 @@ func rewriteValueMIPS64_OpRsh64Ux16_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh64Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux32 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt32to64 y))) (SRLV x (ZeroExt32to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -8468,17 +8204,14 @@ func rewriteValueMIPS64_OpRsh64Ux32_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh64Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux64 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) y)) (SRLV x y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -8497,17 +8230,14 @@ func rewriteValueMIPS64_OpRsh64Ux64_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh64Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux8 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt8to64 y))) (SRLV x (ZeroExt8to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -8530,17 +8260,14 @@ func rewriteValueMIPS64_OpRsh64Ux8_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh64x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x16 x y) // cond: // result: (SRAV x (OR (NEGV (SGTU (ZeroExt16to64 y) (MOVVconst [63]))) (ZeroExt16to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SRAV) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpMIPS64OR, t) @@ -8563,17 +8290,14 @@ func rewriteValueMIPS64_OpRsh64x16_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh64x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x32 x y) // cond: // result: (SRAV x (OR (NEGV (SGTU (ZeroExt32to64 y) (MOVVconst [63]))) (ZeroExt32to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SRAV) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpMIPS64OR, t) @@ -8596,17 +8320,14 @@ func rewriteValueMIPS64_OpRsh64x32_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh64x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x64 x y) // cond: // result: (SRAV x (OR (NEGV (SGTU y (MOVVconst [63]))) y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SRAV) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpMIPS64OR, t) @@ -8625,17 +8346,14 @@ func rewriteValueMIPS64_OpRsh64x64_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh64x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x8 x y) // cond: // result: (SRAV x (OR (NEGV (SGTU (ZeroExt8to64 y) (MOVVconst [63]))) (ZeroExt8to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SRAV) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpMIPS64OR, t) @@ -8658,17 +8376,14 @@ func rewriteValueMIPS64_OpRsh64x8_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh8Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux16 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt16to64 y))) (SRLV (ZeroExt8to64 x) (ZeroExt16to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -8693,17 +8408,14 @@ func rewriteValueMIPS64_OpRsh8Ux16_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh8Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux32 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt32to64 y))) (SRLV (ZeroExt8to64 x) (ZeroExt32to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -8728,17 +8440,14 @@ func rewriteValueMIPS64_OpRsh8Ux32_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh8Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux64 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) y)) (SRLV (ZeroExt8to64 x) y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -8759,17 +8468,14 @@ func rewriteValueMIPS64_OpRsh8Ux64_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh8Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux8 x y) // cond: // result: (AND (NEGV (SGTU (MOVVconst [64]) (ZeroExt8to64 y))) (SRLV (ZeroExt8to64 x) (ZeroExt8to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64AND) v0 := b.NewValue0(v.Pos, OpMIPS64NEGV, t) v1 := b.NewValue0(v.Pos, OpMIPS64SGTU, typ.Bool) @@ -8794,17 +8500,14 @@ func rewriteValueMIPS64_OpRsh8Ux8_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh8x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x16 x y) // cond: // result: (SRAV (SignExt8to64 x) (OR (NEGV (SGTU (ZeroExt16to64 y) (MOVVconst [63]))) (ZeroExt16to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SRAV) v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) v0.AddArg(x) @@ -8829,17 +8532,14 @@ func rewriteValueMIPS64_OpRsh8x16_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh8x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x32 x y) // cond: // result: (SRAV (SignExt8to64 x) (OR (NEGV (SGTU (ZeroExt32to64 y) (MOVVconst [63]))) (ZeroExt32to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SRAV) v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) v0.AddArg(x) @@ -8864,17 +8564,14 @@ func rewriteValueMIPS64_OpRsh8x32_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh8x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x64 x y) // cond: // result: (SRAV (SignExt8to64 x) (OR (NEGV (SGTU y (MOVVconst [63]))) y)) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SRAV) v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) v0.AddArg(x) @@ -8895,17 +8592,14 @@ func rewriteValueMIPS64_OpRsh8x64_0(v *Value) bool { } func rewriteValueMIPS64_OpRsh8x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x8 x y) // cond: // result: (SRAV (SignExt8to64 x) (OR (NEGV (SGTU (ZeroExt8to64 y) (MOVVconst [63]))) (ZeroExt8to64 y))) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SRAV) v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) v0.AddArg(x) @@ -9050,7 +8744,7 @@ func rewriteValueMIPS64_OpSelect1_0(v *Value) bool { if v_0.Op != OpMIPS64MULVU { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpMIPS64MOVVconst { break @@ -9058,7 +8752,6 @@ func rewriteValueMIPS64_OpSelect1_0(v *Value) bool { if v_0_0.AuxInt != -1 { break } - x := v_0.Args[1] v.reset(OpMIPS64NEGV) v.AddArg(x) return true @@ -9133,7 +8826,7 @@ func rewriteValueMIPS64_OpSelect1_0(v *Value) bool { if v_0.Op != OpMIPS64MULVU { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpMIPS64MOVVconst { break @@ -9141,7 +8834,6 @@ func rewriteValueMIPS64_OpSelect1_0(v *Value) bool { if v_0_0.AuxInt != 1 { break } - x := v_0.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -9178,13 +8870,12 @@ func rewriteValueMIPS64_OpSelect1_0(v *Value) bool { if v_0.Op != OpMIPS64MULVU { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpMIPS64MOVVconst { break } c := v_0_0.AuxInt - x := v_0.Args[1] if !(isPowerOfTwo(c)) { break } @@ -9201,7 +8892,7 @@ func rewriteValueMIPS64_OpSelect1_0(v *Value) bool { if v_0.Op != OpMIPS64MULVU { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpMIPS64MOVVconst { break @@ -9209,7 +8900,6 @@ func rewriteValueMIPS64_OpSelect1_0(v *Value) bool { if v_0_0.AuxInt != -1 { break } - x := v_0.Args[1] v.reset(OpMIPS64NEGV) v.AddArg(x) return true @@ -9286,7 +8976,7 @@ func rewriteValueMIPS64_OpSelect1_10(v *Value) bool { if v_0.Op != OpMIPS64MULVU { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpMIPS64MOVVconst { break @@ -9294,7 +8984,6 @@ func rewriteValueMIPS64_OpSelect1_10(v *Value) bool { if v_0_0.AuxInt != 1 { break } - x := v_0.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -9330,13 +9019,12 @@ func rewriteValueMIPS64_OpSelect1_10(v *Value) bool { if v_0.Op != OpMIPS64MULVU { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpMIPS64MOVVconst { break } c := v_0_0.AuxInt - x := v_0.Args[1] if !(isPowerOfTwo(c)) { break } @@ -9578,7 +9266,6 @@ func rewriteValueMIPS64_OpSignExt8to64_0(v *Value) bool { } func rewriteValueMIPS64_OpSlicemask_0(v *Value) bool { b := v.Block - _ = b // match: (Slicemask x) // cond: // result: (SRAVconst (NEGV x) [63]) @@ -9625,10 +9312,9 @@ func rewriteValueMIPS64_OpStore_0(v *Value) bool { // result: (MOVBstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 1) { break } @@ -9643,10 +9329,9 @@ func rewriteValueMIPS64_OpStore_0(v *Value) bool { // result: (MOVHstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 2) { break } @@ -9661,10 +9346,9 @@ func rewriteValueMIPS64_OpStore_0(v *Value) bool { // result: (MOVWstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 4 && !is32BitFloat(val.Type)) { break } @@ -9679,10 +9363,9 @@ func rewriteValueMIPS64_OpStore_0(v *Value) bool { // result: (MOVVstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 8 && !is64BitFloat(val.Type)) { break } @@ -9697,10 +9380,9 @@ func rewriteValueMIPS64_OpStore_0(v *Value) bool { // result: (MOVFstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 4 && is32BitFloat(val.Type)) { break } @@ -9715,10 +9397,9 @@ func rewriteValueMIPS64_OpStore_0(v *Value) bool { // result: (MOVDstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 8 && is64BitFloat(val.Type)) { break } @@ -9735,9 +9416,8 @@ func rewriteValueMIPS64_OpSub16_0(v *Value) bool { // cond: // result: (SUBV x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SUBV) v.AddArg(x) v.AddArg(y) @@ -9749,9 +9429,8 @@ func rewriteValueMIPS64_OpSub32_0(v *Value) bool { // cond: // result: (SUBV x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SUBV) v.AddArg(x) v.AddArg(y) @@ -9763,9 +9442,8 @@ func rewriteValueMIPS64_OpSub32F_0(v *Value) bool { // cond: // result: (SUBF x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SUBF) v.AddArg(x) v.AddArg(y) @@ -9777,9 +9455,8 @@ func rewriteValueMIPS64_OpSub64_0(v *Value) bool { // cond: // result: (SUBV x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SUBV) v.AddArg(x) v.AddArg(y) @@ -9791,9 +9468,8 @@ func rewriteValueMIPS64_OpSub64F_0(v *Value) bool { // cond: // result: (SUBD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SUBD) v.AddArg(x) v.AddArg(y) @@ -9805,9 +9481,8 @@ func rewriteValueMIPS64_OpSub8_0(v *Value) bool { // cond: // result: (SUBV x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SUBV) v.AddArg(x) v.AddArg(y) @@ -9819,9 +9494,8 @@ func rewriteValueMIPS64_OpSubPtr_0(v *Value) bool { // cond: // result: (SUBV x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64SUBV) v.AddArg(x) v.AddArg(y) @@ -9906,10 +9580,9 @@ func rewriteValueMIPS64_OpWB_0(v *Value) bool { // result: (LoweredWB {fn} destptr srcptr mem) for { fn := v.Aux - _ = v.Args[2] + mem := v.Args[2] destptr := v.Args[0] srcptr := v.Args[1] - mem := v.Args[2] v.reset(OpMIPS64LoweredWB) v.Aux = fn v.AddArg(destptr) @@ -9923,9 +9596,8 @@ func rewriteValueMIPS64_OpXor16_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v.AddArg(x) v.AddArg(y) @@ -9937,9 +9609,8 @@ func rewriteValueMIPS64_OpXor32_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v.AddArg(x) v.AddArg(y) @@ -9951,9 +9622,8 @@ func rewriteValueMIPS64_OpXor64_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v.AddArg(x) v.AddArg(y) @@ -9965,9 +9635,8 @@ func rewriteValueMIPS64_OpXor8_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMIPS64XOR) v.AddArg(x) v.AddArg(y) @@ -9976,9 +9645,7 @@ func rewriteValueMIPS64_OpXor8_0(v *Value) bool { } func rewriteValueMIPS64_OpZero_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Zero [0] _ mem) // cond: // result: mem @@ -9986,7 +9653,6 @@ func rewriteValueMIPS64_OpZero_0(v *Value) bool { if v.AuxInt != 0 { break } - _ = v.Args[1] mem := v.Args[1] v.reset(OpCopy) v.Type = mem.Type @@ -10000,9 +9666,8 @@ func rewriteValueMIPS64_OpZero_0(v *Value) bool { if v.AuxInt != 1 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpMIPS64MOVBstore) v.AddArg(ptr) v0 := b.NewValue0(v.Pos, OpMIPS64MOVVconst, typ.UInt64) @@ -10019,9 +9684,8 @@ func rewriteValueMIPS64_OpZero_0(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.(*types.Type).Alignment()%2 == 0) { break } @@ -10040,9 +9704,8 @@ func rewriteValueMIPS64_OpZero_0(v *Value) bool { if v.AuxInt != 2 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpMIPS64MOVBstore) v.AuxInt = 1 v.AddArg(ptr) @@ -10067,9 +9730,8 @@ func rewriteValueMIPS64_OpZero_0(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -10089,9 +9751,8 @@ func rewriteValueMIPS64_OpZero_0(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.(*types.Type).Alignment()%2 == 0) { break } @@ -10118,9 +9779,8 @@ func rewriteValueMIPS64_OpZero_0(v *Value) bool { if v.AuxInt != 4 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpMIPS64MOVBstore) v.AuxInt = 3 v.AddArg(ptr) @@ -10159,9 +9819,8 @@ func rewriteValueMIPS64_OpZero_0(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.(*types.Type).Alignment()%8 == 0) { break } @@ -10181,9 +9840,8 @@ func rewriteValueMIPS64_OpZero_0(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -10211,9 +9869,8 @@ func rewriteValueMIPS64_OpZero_0(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.(*types.Type).Alignment()%2 == 0) { break } @@ -10251,11 +9908,8 @@ func rewriteValueMIPS64_OpZero_0(v *Value) bool { } func rewriteValueMIPS64_OpZero_10(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Zero [3] ptr mem) // cond: // result: (MOVBstore [2] ptr (MOVVconst [0]) (MOVBstore [1] ptr (MOVVconst [0]) (MOVBstore [0] ptr (MOVVconst [0]) mem))) @@ -10263,9 +9917,8 @@ func rewriteValueMIPS64_OpZero_10(v *Value) bool { if v.AuxInt != 3 { break } - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpMIPS64MOVBstore) v.AuxInt = 2 v.AddArg(ptr) @@ -10297,9 +9950,8 @@ func rewriteValueMIPS64_OpZero_10(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.(*types.Type).Alignment()%2 == 0) { break } @@ -10334,9 +9986,8 @@ func rewriteValueMIPS64_OpZero_10(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -10371,9 +10022,8 @@ func rewriteValueMIPS64_OpZero_10(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.(*types.Type).Alignment()%8 == 0) { break } @@ -10401,9 +10051,8 @@ func rewriteValueMIPS64_OpZero_10(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.(*types.Type).Alignment()%8 == 0) { break } @@ -10436,9 +10085,8 @@ func rewriteValueMIPS64_OpZero_10(v *Value) bool { for { s := v.AuxInt t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(s%8 == 0 && s > 24 && s <= 8*128 && t.(*types.Type).Alignment()%8 == 0 && !config.noDuffDevice) { break } @@ -10454,9 +10102,8 @@ func rewriteValueMIPS64_OpZero_10(v *Value) bool { for { s := v.AuxInt t := v.Aux - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !((s > 8*128 || config.noDuffDevice) || t.(*types.Type).Alignment()%8 != 0) { break } @@ -10540,21 +10187,16 @@ func rewriteValueMIPS64_OpZeroExt8to64_0(v *Value) bool { } func rewriteBlockMIPS64(b *Block) bool { config := b.Func.Config - _ = config - fe := b.Func.fe - _ = fe typ := &config.Types _ = typ + v := b.Control + _ = v switch b.Kind { case BlockMIPS64EQ: // match: (EQ (FPFlagTrue cmp) yes no) // cond: // result: (FPF cmp yes no) - for { - v := b.Control - if v.Op != OpMIPS64FPFlagTrue { - break - } + for v.Op == OpMIPS64FPFlagTrue { cmp := v.Args[0] b.Kind = BlockMIPS64FPF b.SetControl(cmp) @@ -10564,11 +10206,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (EQ (FPFlagFalse cmp) yes no) // cond: // result: (FPT cmp yes no) - for { - v := b.Control - if v.Op != OpMIPS64FPFlagFalse { - break - } + for v.Op == OpMIPS64FPFlagFalse { cmp := v.Args[0] b.Kind = BlockMIPS64FPT b.SetControl(cmp) @@ -10578,11 +10216,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (EQ (XORconst [1] cmp:(SGT _ _)) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != OpMIPS64XORconst { - break - } + for v.Op == OpMIPS64XORconst { if v.AuxInt != 1 { break } @@ -10599,11 +10233,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (EQ (XORconst [1] cmp:(SGTU _ _)) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != OpMIPS64XORconst { - break - } + for v.Op == OpMIPS64XORconst { if v.AuxInt != 1 { break } @@ -10620,11 +10250,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (EQ (XORconst [1] cmp:(SGTconst _)) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != OpMIPS64XORconst { - break - } + for v.Op == OpMIPS64XORconst { if v.AuxInt != 1 { break } @@ -10640,11 +10266,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (EQ (XORconst [1] cmp:(SGTUconst _)) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != OpMIPS64XORconst { - break - } + for v.Op == OpMIPS64XORconst { if v.AuxInt != 1 { break } @@ -10660,11 +10282,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (EQ (SGTUconst [1] x) yes no) // cond: // result: (NE x yes no) - for { - v := b.Control - if v.Op != OpMIPS64SGTUconst { - break - } + for v.Op == OpMIPS64SGTUconst { if v.AuxInt != 1 { break } @@ -10677,11 +10295,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (EQ (SGTU x (MOVVconst [0])) yes no) // cond: // result: (EQ x yes no) - for { - v := b.Control - if v.Op != OpMIPS64SGTU { - break - } + for v.Op == OpMIPS64SGTU { _ = v.Args[1] x := v.Args[0] v_1 := v.Args[1] @@ -10699,11 +10313,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (EQ (SGTconst [0] x) yes no) // cond: // result: (GEZ x yes no) - for { - v := b.Control - if v.Op != OpMIPS64SGTconst { - break - } + for v.Op == OpMIPS64SGTconst { if v.AuxInt != 0 { break } @@ -10716,11 +10326,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (EQ (SGT x (MOVVconst [0])) yes no) // cond: // result: (LEZ x yes no) - for { - v := b.Control - if v.Op != OpMIPS64SGT { - break - } + for v.Op == OpMIPS64SGT { _ = v.Args[1] x := v.Args[0] v_1 := v.Args[1] @@ -10738,11 +10344,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (EQ (MOVVconst [0]) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpMIPS64MOVVconst { - break - } + for v.Op == OpMIPS64MOVVconst { if v.AuxInt != 0 { break } @@ -10754,11 +10356,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (EQ (MOVVconst [c]) yes no) // cond: c != 0 // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpMIPS64MOVVconst { - break - } + for v.Op == OpMIPS64MOVVconst { c := v.AuxInt if !(c != 0) { break @@ -10773,11 +10371,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (GEZ (MOVVconst [c]) yes no) // cond: c >= 0 // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpMIPS64MOVVconst { - break - } + for v.Op == OpMIPS64MOVVconst { c := v.AuxInt if !(c >= 0) { break @@ -10790,11 +10384,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (GEZ (MOVVconst [c]) yes no) // cond: c < 0 // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpMIPS64MOVVconst { - break - } + for v.Op == OpMIPS64MOVVconst { c := v.AuxInt if !(c < 0) { break @@ -10809,11 +10399,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (GTZ (MOVVconst [c]) yes no) // cond: c > 0 // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpMIPS64MOVVconst { - break - } + for v.Op == OpMIPS64MOVVconst { c := v.AuxInt if !(c > 0) { break @@ -10826,11 +10412,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (GTZ (MOVVconst [c]) yes no) // cond: c <= 0 // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpMIPS64MOVVconst { - break - } + for v.Op == OpMIPS64MOVVconst { c := v.AuxInt if !(c <= 0) { break @@ -10846,8 +10428,6 @@ func rewriteBlockMIPS64(b *Block) bool { // cond: // result: (NE cond yes no) for { - v := b.Control - _ = v cond := b.Control b.Kind = BlockMIPS64NE b.SetControl(cond) @@ -10858,11 +10438,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (LEZ (MOVVconst [c]) yes no) // cond: c <= 0 // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpMIPS64MOVVconst { - break - } + for v.Op == OpMIPS64MOVVconst { c := v.AuxInt if !(c <= 0) { break @@ -10875,11 +10451,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (LEZ (MOVVconst [c]) yes no) // cond: c > 0 // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpMIPS64MOVVconst { - break - } + for v.Op == OpMIPS64MOVVconst { c := v.AuxInt if !(c > 0) { break @@ -10894,11 +10466,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (LTZ (MOVVconst [c]) yes no) // cond: c < 0 // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpMIPS64MOVVconst { - break - } + for v.Op == OpMIPS64MOVVconst { c := v.AuxInt if !(c < 0) { break @@ -10911,11 +10479,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (LTZ (MOVVconst [c]) yes no) // cond: c >= 0 // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpMIPS64MOVVconst { - break - } + for v.Op == OpMIPS64MOVVconst { c := v.AuxInt if !(c >= 0) { break @@ -10930,11 +10494,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (NE (FPFlagTrue cmp) yes no) // cond: // result: (FPT cmp yes no) - for { - v := b.Control - if v.Op != OpMIPS64FPFlagTrue { - break - } + for v.Op == OpMIPS64FPFlagTrue { cmp := v.Args[0] b.Kind = BlockMIPS64FPT b.SetControl(cmp) @@ -10944,11 +10504,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (NE (FPFlagFalse cmp) yes no) // cond: // result: (FPF cmp yes no) - for { - v := b.Control - if v.Op != OpMIPS64FPFlagFalse { - break - } + for v.Op == OpMIPS64FPFlagFalse { cmp := v.Args[0] b.Kind = BlockMIPS64FPF b.SetControl(cmp) @@ -10958,11 +10514,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (NE (XORconst [1] cmp:(SGT _ _)) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != OpMIPS64XORconst { - break - } + for v.Op == OpMIPS64XORconst { if v.AuxInt != 1 { break } @@ -10979,11 +10531,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (NE (XORconst [1] cmp:(SGTU _ _)) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != OpMIPS64XORconst { - break - } + for v.Op == OpMIPS64XORconst { if v.AuxInt != 1 { break } @@ -11000,11 +10548,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (NE (XORconst [1] cmp:(SGTconst _)) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != OpMIPS64XORconst { - break - } + for v.Op == OpMIPS64XORconst { if v.AuxInt != 1 { break } @@ -11020,11 +10564,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (NE (XORconst [1] cmp:(SGTUconst _)) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != OpMIPS64XORconst { - break - } + for v.Op == OpMIPS64XORconst { if v.AuxInt != 1 { break } @@ -11040,11 +10580,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (NE (SGTUconst [1] x) yes no) // cond: // result: (EQ x yes no) - for { - v := b.Control - if v.Op != OpMIPS64SGTUconst { - break - } + for v.Op == OpMIPS64SGTUconst { if v.AuxInt != 1 { break } @@ -11057,11 +10593,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (NE (SGTU x (MOVVconst [0])) yes no) // cond: // result: (NE x yes no) - for { - v := b.Control - if v.Op != OpMIPS64SGTU { - break - } + for v.Op == OpMIPS64SGTU { _ = v.Args[1] x := v.Args[0] v_1 := v.Args[1] @@ -11079,11 +10611,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (NE (SGTconst [0] x) yes no) // cond: // result: (LTZ x yes no) - for { - v := b.Control - if v.Op != OpMIPS64SGTconst { - break - } + for v.Op == OpMIPS64SGTconst { if v.AuxInt != 0 { break } @@ -11096,11 +10624,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (NE (SGT x (MOVVconst [0])) yes no) // cond: // result: (GTZ x yes no) - for { - v := b.Control - if v.Op != OpMIPS64SGT { - break - } + for v.Op == OpMIPS64SGT { _ = v.Args[1] x := v.Args[0] v_1 := v.Args[1] @@ -11118,11 +10642,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (NE (MOVVconst [0]) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpMIPS64MOVVconst { - break - } + for v.Op == OpMIPS64MOVVconst { if v.AuxInt != 0 { break } @@ -11135,11 +10655,7 @@ func rewriteBlockMIPS64(b *Block) bool { // match: (NE (MOVVconst [c]) yes no) // cond: c != 0 // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpMIPS64MOVVconst { - break - } + for v.Op == OpMIPS64MOVVconst { c := v.AuxInt if !(c != 0) { break diff --git a/src/cmd/compile/internal/ssa/rewritePPC64.go b/src/cmd/compile/internal/ssa/rewritePPC64.go index fdb34aec0a..d35cf6eeac 100644 --- a/src/cmd/compile/internal/ssa/rewritePPC64.go +++ b/src/cmd/compile/internal/ssa/rewritePPC64.go @@ -29,6 +29,8 @@ func rewriteValuePPC64(v *Value) bool { return rewriteValuePPC64_OpAdd64_0(v) case OpAdd64F: return rewriteValuePPC64_OpAdd64F_0(v) + case OpAdd64carry: + return rewriteValuePPC64_OpAdd64carry_0(v) case OpAdd8: return rewriteValuePPC64_OpAdd8_0(v) case OpAddPtr: @@ -65,6 +67,8 @@ func rewriteValuePPC64(v *Value) bool { return rewriteValuePPC64_OpAtomicLoad32_0(v) case OpAtomicLoad64: return rewriteValuePPC64_OpAtomicLoad64_0(v) + case OpAtomicLoad8: + return rewriteValuePPC64_OpAtomicLoad8_0(v) case OpAtomicLoadAcq32: return rewriteValuePPC64_OpAtomicLoadAcq32_0(v) case OpAtomicLoadPtr: @@ -537,12 +541,18 @@ func rewriteValuePPC64(v *Value) bool { return rewriteValuePPC64_OpPPC64ORN_0(v) case OpPPC64ORconst: return rewriteValuePPC64_OpPPC64ORconst_0(v) + case OpPPC64ROTL: + return rewriteValuePPC64_OpPPC64ROTL_0(v) + case OpPPC64ROTLW: + return rewriteValuePPC64_OpPPC64ROTLW_0(v) case OpPPC64SUB: return rewriteValuePPC64_OpPPC64SUB_0(v) case OpPPC64XOR: return rewriteValuePPC64_OpPPC64XOR_0(v) || rewriteValuePPC64_OpPPC64XOR_10(v) case OpPPC64XORconst: return rewriteValuePPC64_OpPPC64XORconst_0(v) + case OpPanicBounds: + return rewriteValuePPC64_OpPanicBounds_0(v) case OpPopCount16: return rewriteValuePPC64_OpPopCount16_0(v) case OpPopCount32: @@ -551,6 +561,14 @@ func rewriteValuePPC64(v *Value) bool { return rewriteValuePPC64_OpPopCount64_0(v) case OpPopCount8: return rewriteValuePPC64_OpPopCount8_0(v) + case OpRotateLeft16: + return rewriteValuePPC64_OpRotateLeft16_0(v) + case OpRotateLeft32: + return rewriteValuePPC64_OpRotateLeft32_0(v) + case OpRotateLeft64: + return rewriteValuePPC64_OpRotateLeft64_0(v) + case OpRotateLeft8: + return rewriteValuePPC64_OpRotateLeft8_0(v) case OpRound: return rewriteValuePPC64_OpRound_0(v) case OpRound32F: @@ -712,9 +730,8 @@ func rewriteValuePPC64_OpAdd16_0(v *Value) bool { // cond: // result: (ADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64ADD) v.AddArg(x) v.AddArg(y) @@ -726,9 +743,8 @@ func rewriteValuePPC64_OpAdd32_0(v *Value) bool { // cond: // result: (ADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64ADD) v.AddArg(x) v.AddArg(y) @@ -740,9 +756,8 @@ func rewriteValuePPC64_OpAdd32F_0(v *Value) bool { // cond: // result: (FADDS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64FADDS) v.AddArg(x) v.AddArg(y) @@ -754,9 +769,8 @@ func rewriteValuePPC64_OpAdd64_0(v *Value) bool { // cond: // result: (ADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64ADD) v.AddArg(x) v.AddArg(y) @@ -768,23 +782,36 @@ func rewriteValuePPC64_OpAdd64F_0(v *Value) bool { // cond: // result: (FADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64FADD) v.AddArg(x) v.AddArg(y) return true } } +func rewriteValuePPC64_OpAdd64carry_0(v *Value) bool { + // match: (Add64carry x y c) + // cond: + // result: (LoweredAdd64Carry x y c) + for { + c := v.Args[2] + x := v.Args[0] + y := v.Args[1] + v.reset(OpPPC64LoweredAdd64Carry) + v.AddArg(x) + v.AddArg(y) + v.AddArg(c) + return true + } +} func rewriteValuePPC64_OpAdd8_0(v *Value) bool { // match: (Add8 x y) // cond: // result: (ADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64ADD) v.AddArg(x) v.AddArg(y) @@ -796,9 +823,8 @@ func rewriteValuePPC64_OpAddPtr_0(v *Value) bool { // cond: // result: (ADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64ADD) v.AddArg(x) v.AddArg(y) @@ -823,9 +849,8 @@ func rewriteValuePPC64_OpAnd16_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64AND) v.AddArg(x) v.AddArg(y) @@ -837,9 +862,8 @@ func rewriteValuePPC64_OpAnd32_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64AND) v.AddArg(x) v.AddArg(y) @@ -851,9 +875,8 @@ func rewriteValuePPC64_OpAnd64_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64AND) v.AddArg(x) v.AddArg(y) @@ -865,9 +888,8 @@ func rewriteValuePPC64_OpAnd8_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64AND) v.AddArg(x) v.AddArg(y) @@ -879,9 +901,8 @@ func rewriteValuePPC64_OpAndB_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64AND) v.AddArg(x) v.AddArg(y) @@ -893,10 +914,9 @@ func rewriteValuePPC64_OpAtomicAdd32_0(v *Value) bool { // cond: // result: (LoweredAtomicAdd32 ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpPPC64LoweredAtomicAdd32) v.AddArg(ptr) v.AddArg(val) @@ -909,10 +929,9 @@ func rewriteValuePPC64_OpAtomicAdd64_0(v *Value) bool { // cond: // result: (LoweredAtomicAdd64 ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpPPC64LoweredAtomicAdd64) v.AddArg(ptr) v.AddArg(val) @@ -925,10 +944,9 @@ func rewriteValuePPC64_OpAtomicAnd8_0(v *Value) bool { // cond: // result: (LoweredAtomicAnd8 ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpPPC64LoweredAtomicAnd8) v.AddArg(ptr) v.AddArg(val) @@ -941,11 +959,10 @@ func rewriteValuePPC64_OpAtomicCompareAndSwap32_0(v *Value) bool { // cond: // result: (LoweredAtomicCas32 [1] ptr old new_ mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] old := v.Args[1] new_ := v.Args[2] - mem := v.Args[3] v.reset(OpPPC64LoweredAtomicCas32) v.AuxInt = 1 v.AddArg(ptr) @@ -960,11 +977,10 @@ func rewriteValuePPC64_OpAtomicCompareAndSwap64_0(v *Value) bool { // cond: // result: (LoweredAtomicCas64 [1] ptr old new_ mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] old := v.Args[1] new_ := v.Args[2] - mem := v.Args[3] v.reset(OpPPC64LoweredAtomicCas64) v.AuxInt = 1 v.AddArg(ptr) @@ -979,11 +995,10 @@ func rewriteValuePPC64_OpAtomicCompareAndSwapRel32_0(v *Value) bool { // cond: // result: (LoweredAtomicCas32 [0] ptr old new_ mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] old := v.Args[1] new_ := v.Args[2] - mem := v.Args[3] v.reset(OpPPC64LoweredAtomicCas32) v.AuxInt = 0 v.AddArg(ptr) @@ -998,10 +1013,9 @@ func rewriteValuePPC64_OpAtomicExchange32_0(v *Value) bool { // cond: // result: (LoweredAtomicExchange32 ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpPPC64LoweredAtomicExchange32) v.AddArg(ptr) v.AddArg(val) @@ -1014,10 +1028,9 @@ func rewriteValuePPC64_OpAtomicExchange64_0(v *Value) bool { // cond: // result: (LoweredAtomicExchange64 ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpPPC64LoweredAtomicExchange64) v.AddArg(ptr) v.AddArg(val) @@ -1030,9 +1043,8 @@ func rewriteValuePPC64_OpAtomicLoad32_0(v *Value) bool { // cond: // result: (LoweredAtomicLoad32 [1] ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpPPC64LoweredAtomicLoad32) v.AuxInt = 1 v.AddArg(ptr) @@ -1045,9 +1057,8 @@ func rewriteValuePPC64_OpAtomicLoad64_0(v *Value) bool { // cond: // result: (LoweredAtomicLoad64 [1] ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpPPC64LoweredAtomicLoad64) v.AuxInt = 1 v.AddArg(ptr) @@ -1055,14 +1066,27 @@ func rewriteValuePPC64_OpAtomicLoad64_0(v *Value) bool { return true } } +func rewriteValuePPC64_OpAtomicLoad8_0(v *Value) bool { + // match: (AtomicLoad8 ptr mem) + // cond: + // result: (LoweredAtomicLoad8 [1] ptr mem) + for { + mem := v.Args[1] + ptr := v.Args[0] + v.reset(OpPPC64LoweredAtomicLoad8) + v.AuxInt = 1 + v.AddArg(ptr) + v.AddArg(mem) + return true + } +} func rewriteValuePPC64_OpAtomicLoadAcq32_0(v *Value) bool { // match: (AtomicLoadAcq32 ptr mem) // cond: // result: (LoweredAtomicLoad32 [0] ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpPPC64LoweredAtomicLoad32) v.AuxInt = 0 v.AddArg(ptr) @@ -1075,9 +1099,8 @@ func rewriteValuePPC64_OpAtomicLoadPtr_0(v *Value) bool { // cond: // result: (LoweredAtomicLoadPtr [1] ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpPPC64LoweredAtomicLoadPtr) v.AuxInt = 1 v.AddArg(ptr) @@ -1090,10 +1113,9 @@ func rewriteValuePPC64_OpAtomicOr8_0(v *Value) bool { // cond: // result: (LoweredAtomicOr8 ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpPPC64LoweredAtomicOr8) v.AddArg(ptr) v.AddArg(val) @@ -1106,10 +1128,9 @@ func rewriteValuePPC64_OpAtomicStore32_0(v *Value) bool { // cond: // result: (LoweredAtomicStore32 [1] ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpPPC64LoweredAtomicStore32) v.AuxInt = 1 v.AddArg(ptr) @@ -1123,10 +1144,9 @@ func rewriteValuePPC64_OpAtomicStore64_0(v *Value) bool { // cond: // result: (LoweredAtomicStore64 [1] ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpPPC64LoweredAtomicStore64) v.AuxInt = 1 v.AddArg(ptr) @@ -1140,10 +1160,9 @@ func rewriteValuePPC64_OpAtomicStoreRel32_0(v *Value) bool { // cond: // result: (LoweredAtomicStore32 [0] ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpPPC64LoweredAtomicStore32) v.AuxInt = 0 v.AddArg(ptr) @@ -1154,15 +1173,13 @@ func rewriteValuePPC64_OpAtomicStoreRel32_0(v *Value) bool { } func rewriteValuePPC64_OpAvg64u_0(v *Value) bool { b := v.Block - _ = b // match: (Avg64u x y) // cond: // result: (ADD (SRDconst (SUB x y) [1]) y) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64ADD) v0 := b.NewValue0(v.Pos, OpPPC64SRDconst, t) v0.AuxInt = 1 @@ -1177,9 +1194,7 @@ func rewriteValuePPC64_OpAvg64u_0(v *Value) bool { } func rewriteValuePPC64_OpBitLen32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (BitLen32 x) // cond: // result: (SUB (MOVDconst [32]) (CNTLZW x)) @@ -1197,9 +1212,7 @@ func rewriteValuePPC64_OpBitLen32_0(v *Value) bool { } func rewriteValuePPC64_OpBitLen64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (BitLen64 x) // cond: // result: (SUB (MOVDconst [64]) (CNTLZD x)) @@ -1232,10 +1245,9 @@ func rewriteValuePPC64_OpClosureCall_0(v *Value) bool { // result: (CALLclosure [argwid] entry closure mem) for { argwid := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] entry := v.Args[0] closure := v.Args[1] - mem := v.Args[2] v.reset(OpPPC64CALLclosure) v.AuxInt = argwid v.AddArg(entry) @@ -1384,9 +1396,8 @@ func rewriteValuePPC64_OpCopysign_0(v *Value) bool { // cond: // result: (FCPSGN y x) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64FCPSGN) v.AddArg(y) v.AddArg(x) @@ -1395,9 +1406,7 @@ func rewriteValuePPC64_OpCopysign_0(v *Value) bool { } func rewriteValuePPC64_OpCtz16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Ctz16 x) // cond: // result: (POPCNTW (MOVHZreg (ANDN (ADDconst [-1] x) x))) @@ -1418,14 +1427,15 @@ func rewriteValuePPC64_OpCtz16_0(v *Value) bool { } func rewriteValuePPC64_OpCtz32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Ctz32 x) - // cond: + // cond: objabi.GOPPC64<=8 // result: (POPCNTW (MOVWZreg (ANDN (ADDconst [-1] x) x))) for { x := v.Args[0] + if !(objabi.GOPPC64 <= 8) { + break + } v.reset(OpPPC64POPCNTW) v0 := b.NewValue0(v.Pos, OpPPC64MOVWZreg, typ.Int64) v1 := b.NewValue0(v.Pos, OpPPC64ANDN, typ.Int) @@ -1438,6 +1448,17 @@ func rewriteValuePPC64_OpCtz32_0(v *Value) bool { v.AddArg(v0) return true } + // match: (Ctz32 x) + // cond: + // result: (CNTTZW (MOVWZreg x)) + for { + x := v.Args[0] + v.reset(OpPPC64CNTTZW) + v0 := b.NewValue0(v.Pos, OpPPC64MOVWZreg, typ.Int64) + v0.AddArg(x) + v.AddArg(v0) + return true + } } func rewriteValuePPC64_OpCtz32NonZero_0(v *Value) bool { // match: (Ctz32NonZero x) @@ -1452,14 +1473,15 @@ func rewriteValuePPC64_OpCtz32NonZero_0(v *Value) bool { } func rewriteValuePPC64_OpCtz64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Ctz64 x) - // cond: + // cond: objabi.GOPPC64<=8 // result: (POPCNTD (ANDN (ADDconst [-1] x) x)) for { x := v.Args[0] + if !(objabi.GOPPC64 <= 8) { + break + } v.reset(OpPPC64POPCNTD) v0 := b.NewValue0(v.Pos, OpPPC64ANDN, typ.Int64) v1 := b.NewValue0(v.Pos, OpPPC64ADDconst, typ.Int64) @@ -1470,6 +1492,15 @@ func rewriteValuePPC64_OpCtz64_0(v *Value) bool { v.AddArg(v0) return true } + // match: (Ctz64 x) + // cond: + // result: (CNTTZD x) + for { + x := v.Args[0] + v.reset(OpPPC64CNTTZD) + v.AddArg(x) + return true + } } func rewriteValuePPC64_OpCtz64NonZero_0(v *Value) bool { // match: (Ctz64NonZero x) @@ -1484,9 +1515,7 @@ func rewriteValuePPC64_OpCtz64NonZero_0(v *Value) bool { } func rewriteValuePPC64_OpCtz8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Ctz8 x) // cond: // result: (POPCNTB (MOVBZreg (ANDN (ADDconst [-1] x) x))) @@ -1507,9 +1536,7 @@ func rewriteValuePPC64_OpCtz8_0(v *Value) bool { } func rewriteValuePPC64_OpCvt32Fto32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Cvt32Fto32 x) // cond: // result: (MFVSRD (FCTIWZ x)) @@ -1524,9 +1551,7 @@ func rewriteValuePPC64_OpCvt32Fto32_0(v *Value) bool { } func rewriteValuePPC64_OpCvt32Fto64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Cvt32Fto64 x) // cond: // result: (MFVSRD (FCTIDZ x)) @@ -1553,9 +1578,7 @@ func rewriteValuePPC64_OpCvt32Fto64F_0(v *Value) bool { } func rewriteValuePPC64_OpCvt32to32F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Cvt32to32F x) // cond: // result: (FCFIDS (MTVSRD (SignExt32to64 x))) @@ -1572,9 +1595,7 @@ func rewriteValuePPC64_OpCvt32to32F_0(v *Value) bool { } func rewriteValuePPC64_OpCvt32to64F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Cvt32to64F x) // cond: // result: (FCFID (MTVSRD (SignExt32to64 x))) @@ -1591,9 +1612,7 @@ func rewriteValuePPC64_OpCvt32to64F_0(v *Value) bool { } func rewriteValuePPC64_OpCvt64Fto32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Cvt64Fto32 x) // cond: // result: (MFVSRD (FCTIWZ x)) @@ -1619,9 +1638,7 @@ func rewriteValuePPC64_OpCvt64Fto32F_0(v *Value) bool { } func rewriteValuePPC64_OpCvt64Fto64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Cvt64Fto64 x) // cond: // result: (MFVSRD (FCTIDZ x)) @@ -1636,9 +1653,7 @@ func rewriteValuePPC64_OpCvt64Fto64_0(v *Value) bool { } func rewriteValuePPC64_OpCvt64to32F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Cvt64to32F x) // cond: // result: (FCFIDS (MTVSRD x)) @@ -1653,9 +1668,7 @@ func rewriteValuePPC64_OpCvt64to32F_0(v *Value) bool { } func rewriteValuePPC64_OpCvt64to64F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Cvt64to64F x) // cond: // result: (FCFID (MTVSRD x)) @@ -1670,16 +1683,13 @@ func rewriteValuePPC64_OpCvt64to64F_0(v *Value) bool { } func rewriteValuePPC64_OpDiv16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div16 x y) // cond: // result: (DIVW (SignExt16to32 x) (SignExt16to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64DIVW) v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) v0.AddArg(x) @@ -1692,16 +1702,13 @@ func rewriteValuePPC64_OpDiv16_0(v *Value) bool { } func rewriteValuePPC64_OpDiv16u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div16u x y) // cond: // result: (DIVWU (ZeroExt16to32 x) (ZeroExt16to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64DIVWU) v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) v0.AddArg(x) @@ -1717,9 +1724,8 @@ func rewriteValuePPC64_OpDiv32_0(v *Value) bool { // cond: // result: (DIVW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64DIVW) v.AddArg(x) v.AddArg(y) @@ -1731,9 +1737,8 @@ func rewriteValuePPC64_OpDiv32F_0(v *Value) bool { // cond: // result: (FDIVS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64FDIVS) v.AddArg(x) v.AddArg(y) @@ -1745,9 +1750,8 @@ func rewriteValuePPC64_OpDiv32u_0(v *Value) bool { // cond: // result: (DIVWU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64DIVWU) v.AddArg(x) v.AddArg(y) @@ -1759,9 +1763,8 @@ func rewriteValuePPC64_OpDiv64_0(v *Value) bool { // cond: // result: (DIVD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64DIVD) v.AddArg(x) v.AddArg(y) @@ -1773,9 +1776,8 @@ func rewriteValuePPC64_OpDiv64F_0(v *Value) bool { // cond: // result: (FDIV x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64FDIV) v.AddArg(x) v.AddArg(y) @@ -1787,9 +1789,8 @@ func rewriteValuePPC64_OpDiv64u_0(v *Value) bool { // cond: // result: (DIVDU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64DIVDU) v.AddArg(x) v.AddArg(y) @@ -1798,16 +1799,13 @@ func rewriteValuePPC64_OpDiv64u_0(v *Value) bool { } func rewriteValuePPC64_OpDiv8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div8 x y) // cond: // result: (DIVW (SignExt8to32 x) (SignExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64DIVW) v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) v0.AddArg(x) @@ -1820,16 +1818,13 @@ func rewriteValuePPC64_OpDiv8_0(v *Value) bool { } func rewriteValuePPC64_OpDiv8u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div8u x y) // cond: // result: (DIVWU (ZeroExt8to32 x) (ZeroExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64DIVWU) v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) v0.AddArg(x) @@ -1842,16 +1837,13 @@ func rewriteValuePPC64_OpDiv8u_0(v *Value) bool { } func rewriteValuePPC64_OpEq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq16 x y) // cond: isSigned(x.Type) && isSigned(y.Type) // result: (Equal (CMPW (SignExt16to32 x) (SignExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(isSigned(x.Type) && isSigned(y.Type)) { break } @@ -1870,9 +1862,8 @@ func rewriteValuePPC64_OpEq16_0(v *Value) bool { // cond: // result: (Equal (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64Equal) v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -1887,14 +1878,12 @@ func rewriteValuePPC64_OpEq16_0(v *Value) bool { } func rewriteValuePPC64_OpEq32_0(v *Value) bool { b := v.Block - _ = b // match: (Eq32 x y) // cond: // result: (Equal (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64Equal) v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) v0.AddArg(x) @@ -1905,14 +1894,12 @@ func rewriteValuePPC64_OpEq32_0(v *Value) bool { } func rewriteValuePPC64_OpEq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Eq32F x y) // cond: // result: (Equal (FCMPU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64Equal) v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) v0.AddArg(x) @@ -1923,14 +1910,12 @@ func rewriteValuePPC64_OpEq32F_0(v *Value) bool { } func rewriteValuePPC64_OpEq64_0(v *Value) bool { b := v.Block - _ = b // match: (Eq64 x y) // cond: // result: (Equal (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64Equal) v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) v0.AddArg(x) @@ -1941,14 +1926,12 @@ func rewriteValuePPC64_OpEq64_0(v *Value) bool { } func rewriteValuePPC64_OpEq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Eq64F x y) // cond: // result: (Equal (FCMPU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64Equal) v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) v0.AddArg(x) @@ -1959,16 +1942,13 @@ func rewriteValuePPC64_OpEq64F_0(v *Value) bool { } func rewriteValuePPC64_OpEq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq8 x y) // cond: isSigned(x.Type) && isSigned(y.Type) // result: (Equal (CMPW (SignExt8to32 x) (SignExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(isSigned(x.Type) && isSigned(y.Type)) { break } @@ -1987,9 +1967,8 @@ func rewriteValuePPC64_OpEq8_0(v *Value) bool { // cond: // result: (Equal (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64Equal) v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -2004,16 +1983,13 @@ func rewriteValuePPC64_OpEq8_0(v *Value) bool { } func rewriteValuePPC64_OpEqB_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (EqB x y) // cond: // result: (ANDconst [1] (EQV x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64ANDconst) v.AuxInt = 1 v0 := b.NewValue0(v.Pos, OpPPC64EQV, typ.Int64) @@ -2025,14 +2001,12 @@ func rewriteValuePPC64_OpEqB_0(v *Value) bool { } func rewriteValuePPC64_OpEqPtr_0(v *Value) bool { b := v.Block - _ = b // match: (EqPtr x y) // cond: // result: (Equal (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64Equal) v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) v0.AddArg(x) @@ -2054,16 +2028,13 @@ func rewriteValuePPC64_OpFloor_0(v *Value) bool { } func rewriteValuePPC64_OpGeq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq16 x y) // cond: // result: (GreaterEqual (CMPW (SignExt16to32 x) (SignExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64GreaterEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) @@ -2078,16 +2049,13 @@ func rewriteValuePPC64_OpGeq16_0(v *Value) bool { } func rewriteValuePPC64_OpGeq16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq16U x y) // cond: // result: (GreaterEqual (CMPWU (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64GreaterEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -2102,14 +2070,12 @@ func rewriteValuePPC64_OpGeq16U_0(v *Value) bool { } func rewriteValuePPC64_OpGeq32_0(v *Value) bool { b := v.Block - _ = b // match: (Geq32 x y) // cond: // result: (GreaterEqual (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64GreaterEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) v0.AddArg(x) @@ -2120,14 +2086,12 @@ func rewriteValuePPC64_OpGeq32_0(v *Value) bool { } func rewriteValuePPC64_OpGeq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Geq32F x y) // cond: // result: (FGreaterEqual (FCMPU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64FGreaterEqual) v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) v0.AddArg(x) @@ -2138,14 +2102,12 @@ func rewriteValuePPC64_OpGeq32F_0(v *Value) bool { } func rewriteValuePPC64_OpGeq32U_0(v *Value) bool { b := v.Block - _ = b // match: (Geq32U x y) // cond: // result: (GreaterEqual (CMPWU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64GreaterEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) v0.AddArg(x) @@ -2156,14 +2118,12 @@ func rewriteValuePPC64_OpGeq32U_0(v *Value) bool { } func rewriteValuePPC64_OpGeq64_0(v *Value) bool { b := v.Block - _ = b // match: (Geq64 x y) // cond: // result: (GreaterEqual (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64GreaterEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) v0.AddArg(x) @@ -2174,14 +2134,12 @@ func rewriteValuePPC64_OpGeq64_0(v *Value) bool { } func rewriteValuePPC64_OpGeq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Geq64F x y) // cond: // result: (FGreaterEqual (FCMPU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64FGreaterEqual) v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) v0.AddArg(x) @@ -2192,14 +2150,12 @@ func rewriteValuePPC64_OpGeq64F_0(v *Value) bool { } func rewriteValuePPC64_OpGeq64U_0(v *Value) bool { b := v.Block - _ = b // match: (Geq64U x y) // cond: // result: (GreaterEqual (CMPU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64GreaterEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags) v0.AddArg(x) @@ -2210,16 +2166,13 @@ func rewriteValuePPC64_OpGeq64U_0(v *Value) bool { } func rewriteValuePPC64_OpGeq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq8 x y) // cond: // result: (GreaterEqual (CMPW (SignExt8to32 x) (SignExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64GreaterEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) @@ -2234,16 +2187,13 @@ func rewriteValuePPC64_OpGeq8_0(v *Value) bool { } func rewriteValuePPC64_OpGeq8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq8U x y) // cond: // result: (GreaterEqual (CMPWU (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64GreaterEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -2285,16 +2235,13 @@ func rewriteValuePPC64_OpGetClosurePtr_0(v *Value) bool { } func rewriteValuePPC64_OpGreater16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater16 x y) // cond: // result: (GreaterThan (CMPW (SignExt16to32 x) (SignExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64GreaterThan) v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) @@ -2309,16 +2256,13 @@ func rewriteValuePPC64_OpGreater16_0(v *Value) bool { } func rewriteValuePPC64_OpGreater16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater16U x y) // cond: // result: (GreaterThan (CMPWU (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64GreaterThan) v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -2333,14 +2277,12 @@ func rewriteValuePPC64_OpGreater16U_0(v *Value) bool { } func rewriteValuePPC64_OpGreater32_0(v *Value) bool { b := v.Block - _ = b // match: (Greater32 x y) // cond: // result: (GreaterThan (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64GreaterThan) v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) v0.AddArg(x) @@ -2351,14 +2293,12 @@ func rewriteValuePPC64_OpGreater32_0(v *Value) bool { } func rewriteValuePPC64_OpGreater32F_0(v *Value) bool { b := v.Block - _ = b // match: (Greater32F x y) // cond: // result: (FGreaterThan (FCMPU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64FGreaterThan) v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) v0.AddArg(x) @@ -2369,14 +2309,12 @@ func rewriteValuePPC64_OpGreater32F_0(v *Value) bool { } func rewriteValuePPC64_OpGreater32U_0(v *Value) bool { b := v.Block - _ = b // match: (Greater32U x y) // cond: // result: (GreaterThan (CMPWU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64GreaterThan) v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) v0.AddArg(x) @@ -2387,14 +2325,12 @@ func rewriteValuePPC64_OpGreater32U_0(v *Value) bool { } func rewriteValuePPC64_OpGreater64_0(v *Value) bool { b := v.Block - _ = b // match: (Greater64 x y) // cond: // result: (GreaterThan (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64GreaterThan) v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) v0.AddArg(x) @@ -2405,14 +2341,12 @@ func rewriteValuePPC64_OpGreater64_0(v *Value) bool { } func rewriteValuePPC64_OpGreater64F_0(v *Value) bool { b := v.Block - _ = b // match: (Greater64F x y) // cond: // result: (FGreaterThan (FCMPU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64FGreaterThan) v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) v0.AddArg(x) @@ -2423,14 +2357,12 @@ func rewriteValuePPC64_OpGreater64F_0(v *Value) bool { } func rewriteValuePPC64_OpGreater64U_0(v *Value) bool { b := v.Block - _ = b // match: (Greater64U x y) // cond: // result: (GreaterThan (CMPU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64GreaterThan) v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags) v0.AddArg(x) @@ -2441,16 +2373,13 @@ func rewriteValuePPC64_OpGreater64U_0(v *Value) bool { } func rewriteValuePPC64_OpGreater8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater8 x y) // cond: // result: (GreaterThan (CMPW (SignExt8to32 x) (SignExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64GreaterThan) v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) @@ -2465,16 +2394,13 @@ func rewriteValuePPC64_OpGreater8_0(v *Value) bool { } func rewriteValuePPC64_OpGreater8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater8U x y) // cond: // result: (GreaterThan (CMPWU (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64GreaterThan) v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -2492,9 +2418,8 @@ func rewriteValuePPC64_OpHmul32_0(v *Value) bool { // cond: // result: (MULHW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64MULHW) v.AddArg(x) v.AddArg(y) @@ -2506,9 +2431,8 @@ func rewriteValuePPC64_OpHmul32u_0(v *Value) bool { // cond: // result: (MULHWU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64MULHWU) v.AddArg(x) v.AddArg(y) @@ -2520,9 +2444,8 @@ func rewriteValuePPC64_OpHmul64_0(v *Value) bool { // cond: // result: (MULHD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64MULHD) v.AddArg(x) v.AddArg(y) @@ -2534,9 +2457,8 @@ func rewriteValuePPC64_OpHmul64u_0(v *Value) bool { // cond: // result: (MULHDU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64MULHDU) v.AddArg(x) v.AddArg(y) @@ -2549,9 +2471,8 @@ func rewriteValuePPC64_OpInterCall_0(v *Value) bool { // result: (CALLinter [argwid] entry mem) for { argwid := v.AuxInt - _ = v.Args[1] - entry := v.Args[0] mem := v.Args[1] + entry := v.Args[0] v.reset(OpPPC64CALLinter) v.AuxInt = argwid v.AddArg(entry) @@ -2561,14 +2482,12 @@ func rewriteValuePPC64_OpInterCall_0(v *Value) bool { } func rewriteValuePPC64_OpIsInBounds_0(v *Value) bool { b := v.Block - _ = b // match: (IsInBounds idx len) // cond: // result: (LessThan (CMPU idx len)) for { - _ = v.Args[1] - idx := v.Args[0] len := v.Args[1] + idx := v.Args[0] v.reset(OpPPC64LessThan) v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags) v0.AddArg(idx) @@ -2579,7 +2498,6 @@ func rewriteValuePPC64_OpIsInBounds_0(v *Value) bool { } func rewriteValuePPC64_OpIsNonNil_0(v *Value) bool { b := v.Block - _ = b // match: (IsNonNil ptr) // cond: // result: (NotEqual (CMPconst [0] ptr)) @@ -2595,14 +2513,12 @@ func rewriteValuePPC64_OpIsNonNil_0(v *Value) bool { } func rewriteValuePPC64_OpIsSliceInBounds_0(v *Value) bool { b := v.Block - _ = b // match: (IsSliceInBounds idx len) // cond: // result: (LessEqual (CMPU idx len)) for { - _ = v.Args[1] - idx := v.Args[0] len := v.Args[1] + idx := v.Args[0] v.reset(OpPPC64LessEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags) v0.AddArg(idx) @@ -2613,16 +2529,13 @@ func rewriteValuePPC64_OpIsSliceInBounds_0(v *Value) bool { } func rewriteValuePPC64_OpLeq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq16 x y) // cond: // result: (LessEqual (CMPW (SignExt16to32 x) (SignExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64LessEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) @@ -2637,16 +2550,13 @@ func rewriteValuePPC64_OpLeq16_0(v *Value) bool { } func rewriteValuePPC64_OpLeq16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq16U x y) // cond: // result: (LessEqual (CMPWU (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64LessEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -2661,14 +2571,12 @@ func rewriteValuePPC64_OpLeq16U_0(v *Value) bool { } func rewriteValuePPC64_OpLeq32_0(v *Value) bool { b := v.Block - _ = b // match: (Leq32 x y) // cond: // result: (LessEqual (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64LessEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) v0.AddArg(x) @@ -2679,14 +2587,12 @@ func rewriteValuePPC64_OpLeq32_0(v *Value) bool { } func rewriteValuePPC64_OpLeq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Leq32F x y) // cond: // result: (FLessEqual (FCMPU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64FLessEqual) v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) v0.AddArg(x) @@ -2697,14 +2603,12 @@ func rewriteValuePPC64_OpLeq32F_0(v *Value) bool { } func rewriteValuePPC64_OpLeq32U_0(v *Value) bool { b := v.Block - _ = b // match: (Leq32U x y) // cond: // result: (LessEqual (CMPWU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64LessEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) v0.AddArg(x) @@ -2715,14 +2619,12 @@ func rewriteValuePPC64_OpLeq32U_0(v *Value) bool { } func rewriteValuePPC64_OpLeq64_0(v *Value) bool { b := v.Block - _ = b // match: (Leq64 x y) // cond: // result: (LessEqual (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64LessEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) v0.AddArg(x) @@ -2733,14 +2635,12 @@ func rewriteValuePPC64_OpLeq64_0(v *Value) bool { } func rewriteValuePPC64_OpLeq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Leq64F x y) // cond: // result: (FLessEqual (FCMPU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64FLessEqual) v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) v0.AddArg(x) @@ -2751,14 +2651,12 @@ func rewriteValuePPC64_OpLeq64F_0(v *Value) bool { } func rewriteValuePPC64_OpLeq64U_0(v *Value) bool { b := v.Block - _ = b // match: (Leq64U x y) // cond: // result: (LessEqual (CMPU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64LessEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags) v0.AddArg(x) @@ -2769,16 +2667,13 @@ func rewriteValuePPC64_OpLeq64U_0(v *Value) bool { } func rewriteValuePPC64_OpLeq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq8 x y) // cond: // result: (LessEqual (CMPW (SignExt8to32 x) (SignExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64LessEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) @@ -2793,16 +2688,13 @@ func rewriteValuePPC64_OpLeq8_0(v *Value) bool { } func rewriteValuePPC64_OpLeq8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq8U x y) // cond: // result: (LessEqual (CMPWU (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64LessEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -2817,16 +2709,13 @@ func rewriteValuePPC64_OpLeq8U_0(v *Value) bool { } func rewriteValuePPC64_OpLess16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less16 x y) // cond: // result: (LessThan (CMPW (SignExt16to32 x) (SignExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64LessThan) v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) @@ -2841,16 +2730,13 @@ func rewriteValuePPC64_OpLess16_0(v *Value) bool { } func rewriteValuePPC64_OpLess16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less16U x y) // cond: // result: (LessThan (CMPWU (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64LessThan) v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -2865,14 +2751,12 @@ func rewriteValuePPC64_OpLess16U_0(v *Value) bool { } func rewriteValuePPC64_OpLess32_0(v *Value) bool { b := v.Block - _ = b // match: (Less32 x y) // cond: // result: (LessThan (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64LessThan) v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) v0.AddArg(x) @@ -2883,14 +2767,12 @@ func rewriteValuePPC64_OpLess32_0(v *Value) bool { } func rewriteValuePPC64_OpLess32F_0(v *Value) bool { b := v.Block - _ = b // match: (Less32F x y) // cond: // result: (FLessThan (FCMPU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64FLessThan) v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) v0.AddArg(x) @@ -2901,14 +2783,12 @@ func rewriteValuePPC64_OpLess32F_0(v *Value) bool { } func rewriteValuePPC64_OpLess32U_0(v *Value) bool { b := v.Block - _ = b // match: (Less32U x y) // cond: // result: (LessThan (CMPWU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64LessThan) v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) v0.AddArg(x) @@ -2919,14 +2799,12 @@ func rewriteValuePPC64_OpLess32U_0(v *Value) bool { } func rewriteValuePPC64_OpLess64_0(v *Value) bool { b := v.Block - _ = b // match: (Less64 x y) // cond: // result: (LessThan (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64LessThan) v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) v0.AddArg(x) @@ -2937,14 +2815,12 @@ func rewriteValuePPC64_OpLess64_0(v *Value) bool { } func rewriteValuePPC64_OpLess64F_0(v *Value) bool { b := v.Block - _ = b // match: (Less64F x y) // cond: // result: (FLessThan (FCMPU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64FLessThan) v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) v0.AddArg(x) @@ -2955,14 +2831,12 @@ func rewriteValuePPC64_OpLess64F_0(v *Value) bool { } func rewriteValuePPC64_OpLess64U_0(v *Value) bool { b := v.Block - _ = b // match: (Less64U x y) // cond: // result: (LessThan (CMPU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64LessThan) v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags) v0.AddArg(x) @@ -2973,16 +2847,13 @@ func rewriteValuePPC64_OpLess64U_0(v *Value) bool { } func rewriteValuePPC64_OpLess8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less8 x y) // cond: // result: (LessThan (CMPW (SignExt8to32 x) (SignExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64LessThan) v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) @@ -2997,16 +2868,13 @@ func rewriteValuePPC64_OpLess8_0(v *Value) bool { } func rewriteValuePPC64_OpLess8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less8U x y) // cond: // result: (LessThan (CMPWU (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64LessThan) v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -3021,17 +2889,14 @@ func rewriteValuePPC64_OpLess8U_0(v *Value) bool { } func rewriteValuePPC64_OpLoad_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Load ptr mem) // cond: (is64BitInt(t) || isPtr(t)) // result: (MOVDload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is64BitInt(t) || isPtr(t)) { break } @@ -3045,9 +2910,8 @@ func rewriteValuePPC64_OpLoad_0(v *Value) bool { // result: (MOVWload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is32BitInt(t) && isSigned(t)) { break } @@ -3061,9 +2925,8 @@ func rewriteValuePPC64_OpLoad_0(v *Value) bool { // result: (MOVWZload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is32BitInt(t) && !isSigned(t)) { break } @@ -3077,9 +2940,8 @@ func rewriteValuePPC64_OpLoad_0(v *Value) bool { // result: (MOVHload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is16BitInt(t) && isSigned(t)) { break } @@ -3093,9 +2955,8 @@ func rewriteValuePPC64_OpLoad_0(v *Value) bool { // result: (MOVHZload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is16BitInt(t) && !isSigned(t)) { break } @@ -3109,9 +2970,8 @@ func rewriteValuePPC64_OpLoad_0(v *Value) bool { // result: (MOVBZload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.IsBoolean()) { break } @@ -3125,9 +2985,8 @@ func rewriteValuePPC64_OpLoad_0(v *Value) bool { // result: (MOVBreg (MOVBZload ptr mem)) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is8BitInt(t) && isSigned(t)) { break } @@ -3143,9 +3002,8 @@ func rewriteValuePPC64_OpLoad_0(v *Value) bool { // result: (MOVBZload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is8BitInt(t) && !isSigned(t)) { break } @@ -3159,9 +3017,8 @@ func rewriteValuePPC64_OpLoad_0(v *Value) bool { // result: (FMOVSload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is32BitFloat(t)) { break } @@ -3175,9 +3032,8 @@ func rewriteValuePPC64_OpLoad_0(v *Value) bool { // result: (FMOVDload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is64BitFloat(t)) { break } @@ -3204,16 +3060,13 @@ func rewriteValuePPC64_OpLocalAddr_0(v *Value) bool { } func rewriteValuePPC64_OpLsh16x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x16 x y) // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -3226,9 +3079,8 @@ func rewriteValuePPC64_OpLsh16x16_0(v *Value) bool { // cond: // result: (SLW x (ORN y (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt16to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SLW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -3247,9 +3099,7 @@ func rewriteValuePPC64_OpLsh16x16_0(v *Value) bool { } func rewriteValuePPC64_OpLsh16x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x32 x (Const64 [c])) // cond: uint32(c) < 16 // result: (SLWconst x [c]) @@ -3292,9 +3142,8 @@ func rewriteValuePPC64_OpLsh16x32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -3307,9 +3156,8 @@ func rewriteValuePPC64_OpLsh16x32_0(v *Value) bool { // cond: // result: (SLW x (ORN y (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt32to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SLW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -3328,9 +3176,7 @@ func rewriteValuePPC64_OpLsh16x32_0(v *Value) bool { } func rewriteValuePPC64_OpLsh16x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x64 x (Const64 [c])) // cond: uint64(c) < 16 // result: (SLWconst x [c]) @@ -3390,9 +3236,8 @@ func rewriteValuePPC64_OpLsh16x64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -3405,9 +3250,8 @@ func rewriteValuePPC64_OpLsh16x64_0(v *Value) bool { // cond: // result: (SLW x (ORN y (MaskIfNotCarry (ADDconstForCarry [-16] y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SLW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -3424,16 +3268,13 @@ func rewriteValuePPC64_OpLsh16x64_0(v *Value) bool { } func rewriteValuePPC64_OpLsh16x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x8 x y) // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -3446,9 +3287,8 @@ func rewriteValuePPC64_OpLsh16x8_0(v *Value) bool { // cond: // result: (SLW x (ORN y (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt8to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SLW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -3467,16 +3307,13 @@ func rewriteValuePPC64_OpLsh16x8_0(v *Value) bool { } func rewriteValuePPC64_OpLsh32x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x16 x y) // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -3489,9 +3326,8 @@ func rewriteValuePPC64_OpLsh32x16_0(v *Value) bool { // cond: // result: (SLW x (ORN y (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt16to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SLW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -3510,9 +3346,7 @@ func rewriteValuePPC64_OpLsh32x16_0(v *Value) bool { } func rewriteValuePPC64_OpLsh32x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x32 x (Const64 [c])) // cond: uint32(c) < 32 // result: (SLWconst x [c]) @@ -3555,9 +3389,8 @@ func rewriteValuePPC64_OpLsh32x32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -3570,9 +3403,8 @@ func rewriteValuePPC64_OpLsh32x32_0(v *Value) bool { // cond: // result: (SLW x (ORN y (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt32to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SLW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -3591,9 +3423,7 @@ func rewriteValuePPC64_OpLsh32x32_0(v *Value) bool { } func rewriteValuePPC64_OpLsh32x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x64 x (Const64 [c])) // cond: uint64(c) < 32 // result: (SLWconst x [c]) @@ -3653,9 +3483,8 @@ func rewriteValuePPC64_OpLsh32x64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -3701,7 +3530,7 @@ func rewriteValuePPC64_OpLsh32x64_0(v *Value) bool { if v_1.Op != OpPPC64AND { break } - _ = v_1.Args[1] + y := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpPPC64MOVDconst { break @@ -3709,7 +3538,6 @@ func rewriteValuePPC64_OpLsh32x64_0(v *Value) bool { if v_1_0.AuxInt != 31 { break } - y := v_1.Args[1] v.reset(OpPPC64SLW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int32) @@ -3747,9 +3575,8 @@ func rewriteValuePPC64_OpLsh32x64_0(v *Value) bool { // cond: // result: (SLW x (ORN y (MaskIfNotCarry (ADDconstForCarry [-32] y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SLW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -3766,16 +3593,13 @@ func rewriteValuePPC64_OpLsh32x64_0(v *Value) bool { } func rewriteValuePPC64_OpLsh32x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x8 x y) // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -3788,9 +3612,8 @@ func rewriteValuePPC64_OpLsh32x8_0(v *Value) bool { // cond: // result: (SLW x (ORN y (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt8to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SLW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -3809,16 +3632,13 @@ func rewriteValuePPC64_OpLsh32x8_0(v *Value) bool { } func rewriteValuePPC64_OpLsh64x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x16 x y) // cond: shiftIsBounded(v) // result: (SLD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -3831,9 +3651,8 @@ func rewriteValuePPC64_OpLsh64x16_0(v *Value) bool { // cond: // result: (SLD x (ORN y (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt16to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SLD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -3852,9 +3671,7 @@ func rewriteValuePPC64_OpLsh64x16_0(v *Value) bool { } func rewriteValuePPC64_OpLsh64x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x32 x (Const64 [c])) // cond: uint32(c) < 64 // result: (SLDconst x [c]) @@ -3897,9 +3714,8 @@ func rewriteValuePPC64_OpLsh64x32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SLD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -3912,9 +3728,8 @@ func rewriteValuePPC64_OpLsh64x32_0(v *Value) bool { // cond: // result: (SLD x (ORN y (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt32to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SLD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -3933,9 +3748,7 @@ func rewriteValuePPC64_OpLsh64x32_0(v *Value) bool { } func rewriteValuePPC64_OpLsh64x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x64 x (Const64 [c])) // cond: uint64(c) < 64 // result: (SLDconst x [c]) @@ -3995,9 +3808,8 @@ func rewriteValuePPC64_OpLsh64x64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SLD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -4043,7 +3855,7 @@ func rewriteValuePPC64_OpLsh64x64_0(v *Value) bool { if v_1.Op != OpPPC64AND { break } - _ = v_1.Args[1] + y := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpPPC64MOVDconst { break @@ -4051,7 +3863,6 @@ func rewriteValuePPC64_OpLsh64x64_0(v *Value) bool { if v_1_0.AuxInt != 63 { break } - y := v_1.Args[1] v.reset(OpPPC64SLD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int64) @@ -4089,9 +3900,8 @@ func rewriteValuePPC64_OpLsh64x64_0(v *Value) bool { // cond: // result: (SLD x (ORN y (MaskIfNotCarry (ADDconstForCarry [-64] y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SLD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -4108,16 +3918,13 @@ func rewriteValuePPC64_OpLsh64x64_0(v *Value) bool { } func rewriteValuePPC64_OpLsh64x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x8 x y) // cond: shiftIsBounded(v) // result: (SLD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -4130,9 +3937,8 @@ func rewriteValuePPC64_OpLsh64x8_0(v *Value) bool { // cond: // result: (SLD x (ORN y (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt8to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SLD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -4151,16 +3957,13 @@ func rewriteValuePPC64_OpLsh64x8_0(v *Value) bool { } func rewriteValuePPC64_OpLsh8x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x16 x y) // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -4173,9 +3976,8 @@ func rewriteValuePPC64_OpLsh8x16_0(v *Value) bool { // cond: // result: (SLW x (ORN y (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt16to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SLW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -4194,9 +3996,7 @@ func rewriteValuePPC64_OpLsh8x16_0(v *Value) bool { } func rewriteValuePPC64_OpLsh8x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x32 x (Const64 [c])) // cond: uint32(c) < 8 // result: (SLWconst x [c]) @@ -4239,9 +4039,8 @@ func rewriteValuePPC64_OpLsh8x32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -4254,9 +4053,8 @@ func rewriteValuePPC64_OpLsh8x32_0(v *Value) bool { // cond: // result: (SLW x (ORN y (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt32to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SLW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -4275,9 +4073,7 @@ func rewriteValuePPC64_OpLsh8x32_0(v *Value) bool { } func rewriteValuePPC64_OpLsh8x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x64 x (Const64 [c])) // cond: uint64(c) < 8 // result: (SLWconst x [c]) @@ -4337,9 +4133,8 @@ func rewriteValuePPC64_OpLsh8x64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -4352,9 +4147,8 @@ func rewriteValuePPC64_OpLsh8x64_0(v *Value) bool { // cond: // result: (SLW x (ORN y (MaskIfNotCarry (ADDconstForCarry [-8] y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SLW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -4371,16 +4165,13 @@ func rewriteValuePPC64_OpLsh8x64_0(v *Value) bool { } func rewriteValuePPC64_OpLsh8x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x8 x y) // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -4393,9 +4184,8 @@ func rewriteValuePPC64_OpLsh8x8_0(v *Value) bool { // cond: // result: (SLW x (ORN y (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt8to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SLW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -4414,16 +4204,13 @@ func rewriteValuePPC64_OpLsh8x8_0(v *Value) bool { } func rewriteValuePPC64_OpMod16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod16 x y) // cond: // result: (Mod32 (SignExt16to32 x) (SignExt16to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMod32) v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) v0.AddArg(x) @@ -4436,16 +4223,13 @@ func rewriteValuePPC64_OpMod16_0(v *Value) bool { } func rewriteValuePPC64_OpMod16u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod16u x y) // cond: // result: (Mod32u (ZeroExt16to32 x) (ZeroExt16to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMod32u) v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) v0.AddArg(x) @@ -4458,16 +4242,13 @@ func rewriteValuePPC64_OpMod16u_0(v *Value) bool { } func rewriteValuePPC64_OpMod32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod32 x y) // cond: // result: (SUB x (MULLW y (DIVW x y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SUB) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64MULLW, typ.Int32) @@ -4482,16 +4263,13 @@ func rewriteValuePPC64_OpMod32_0(v *Value) bool { } func rewriteValuePPC64_OpMod32u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod32u x y) // cond: // result: (SUB x (MULLW y (DIVWU x y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SUB) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64MULLW, typ.Int32) @@ -4506,16 +4284,13 @@ func rewriteValuePPC64_OpMod32u_0(v *Value) bool { } func rewriteValuePPC64_OpMod64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod64 x y) // cond: // result: (SUB x (MULLD y (DIVD x y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SUB) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64MULLD, typ.Int64) @@ -4530,16 +4305,13 @@ func rewriteValuePPC64_OpMod64_0(v *Value) bool { } func rewriteValuePPC64_OpMod64u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod64u x y) // cond: // result: (SUB x (MULLD y (DIVDU x y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SUB) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64MULLD, typ.Int64) @@ -4554,16 +4326,13 @@ func rewriteValuePPC64_OpMod64u_0(v *Value) bool { } func rewriteValuePPC64_OpMod8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod8 x y) // cond: // result: (Mod32 (SignExt8to32 x) (SignExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMod32) v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) v0.AddArg(x) @@ -4576,16 +4345,13 @@ func rewriteValuePPC64_OpMod8_0(v *Value) bool { } func rewriteValuePPC64_OpMod8u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod8u x y) // cond: // result: (Mod32u (ZeroExt8to32 x) (ZeroExt8to32 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpMod32u) v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) v0.AddArg(x) @@ -4598,9 +4364,7 @@ func rewriteValuePPC64_OpMod8u_0(v *Value) bool { } func rewriteValuePPC64_OpMove_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Move [0] _ _ mem) // cond: // result: mem @@ -4608,7 +4372,6 @@ func rewriteValuePPC64_OpMove_0(v *Value) bool { if v.AuxInt != 0 { break } - _ = v.Args[2] mem := v.Args[2] v.reset(OpCopy) v.Type = mem.Type @@ -4622,10 +4385,9 @@ func rewriteValuePPC64_OpMove_0(v *Value) bool { if v.AuxInt != 1 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpPPC64MOVBstore) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpPPC64MOVBZload, typ.UInt8) @@ -4642,10 +4404,9 @@ func rewriteValuePPC64_OpMove_0(v *Value) bool { if v.AuxInt != 2 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpPPC64MOVHstore) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpPPC64MOVHZload, typ.UInt16) @@ -4662,10 +4423,9 @@ func rewriteValuePPC64_OpMove_0(v *Value) bool { if v.AuxInt != 4 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpPPC64MOVWstore) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpPPC64MOVWZload, typ.UInt32) @@ -4683,10 +4443,9 @@ func rewriteValuePPC64_OpMove_0(v *Value) bool { break } t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -4706,10 +4465,9 @@ func rewriteValuePPC64_OpMove_0(v *Value) bool { if v.AuxInt != 8 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpPPC64MOVWstore) v.AuxInt = 4 v.AddArg(dst) @@ -4735,10 +4493,9 @@ func rewriteValuePPC64_OpMove_0(v *Value) bool { if v.AuxInt != 3 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpPPC64MOVBstore) v.AuxInt = 2 v.AddArg(dst) @@ -4764,10 +4521,9 @@ func rewriteValuePPC64_OpMove_0(v *Value) bool { if v.AuxInt != 5 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpPPC64MOVBstore) v.AuxInt = 4 v.AddArg(dst) @@ -4793,10 +4549,9 @@ func rewriteValuePPC64_OpMove_0(v *Value) bool { if v.AuxInt != 6 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpPPC64MOVHstore) v.AuxInt = 4 v.AddArg(dst) @@ -4822,10 +4577,9 @@ func rewriteValuePPC64_OpMove_0(v *Value) bool { if v.AuxInt != 7 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpPPC64MOVBstore) v.AuxInt = 6 v.AddArg(dst) @@ -4861,10 +4615,9 @@ func rewriteValuePPC64_OpMove_10(v *Value) bool { // result: (LoweredMove [s] dst src mem) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s > 8) { break } @@ -4882,9 +4635,8 @@ func rewriteValuePPC64_OpMul16_0(v *Value) bool { // cond: // result: (MULLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64MULLW) v.AddArg(x) v.AddArg(y) @@ -4896,9 +4648,8 @@ func rewriteValuePPC64_OpMul32_0(v *Value) bool { // cond: // result: (MULLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64MULLW) v.AddArg(x) v.AddArg(y) @@ -4910,9 +4661,8 @@ func rewriteValuePPC64_OpMul32F_0(v *Value) bool { // cond: // result: (FMULS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64FMULS) v.AddArg(x) v.AddArg(y) @@ -4924,9 +4674,8 @@ func rewriteValuePPC64_OpMul64_0(v *Value) bool { // cond: // result: (MULLD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64MULLD) v.AddArg(x) v.AddArg(y) @@ -4938,9 +4687,8 @@ func rewriteValuePPC64_OpMul64F_0(v *Value) bool { // cond: // result: (FMUL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64FMUL) v.AddArg(x) v.AddArg(y) @@ -4952,9 +4700,8 @@ func rewriteValuePPC64_OpMul64uhilo_0(v *Value) bool { // cond: // result: (LoweredMuluhilo x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64LoweredMuluhilo) v.AddArg(x) v.AddArg(y) @@ -4966,9 +4713,8 @@ func rewriteValuePPC64_OpMul8_0(v *Value) bool { // cond: // result: (MULLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64MULLW) v.AddArg(x) v.AddArg(y) @@ -5043,16 +4789,13 @@ func rewriteValuePPC64_OpNeg8_0(v *Value) bool { } func rewriteValuePPC64_OpNeq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq16 x y) // cond: isSigned(x.Type) && isSigned(y.Type) // result: (NotEqual (CMPW (SignExt16to32 x) (SignExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(isSigned(x.Type) && isSigned(y.Type)) { break } @@ -5071,9 +4814,8 @@ func rewriteValuePPC64_OpNeq16_0(v *Value) bool { // cond: // result: (NotEqual (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64NotEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) @@ -5088,14 +4830,12 @@ func rewriteValuePPC64_OpNeq16_0(v *Value) bool { } func rewriteValuePPC64_OpNeq32_0(v *Value) bool { b := v.Block - _ = b // match: (Neq32 x y) // cond: // result: (NotEqual (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64NotEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) v0.AddArg(x) @@ -5106,14 +4846,12 @@ func rewriteValuePPC64_OpNeq32_0(v *Value) bool { } func rewriteValuePPC64_OpNeq32F_0(v *Value) bool { b := v.Block - _ = b // match: (Neq32F x y) // cond: // result: (NotEqual (FCMPU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64NotEqual) v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) v0.AddArg(x) @@ -5124,14 +4862,12 @@ func rewriteValuePPC64_OpNeq32F_0(v *Value) bool { } func rewriteValuePPC64_OpNeq64_0(v *Value) bool { b := v.Block - _ = b // match: (Neq64 x y) // cond: // result: (NotEqual (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64NotEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) v0.AddArg(x) @@ -5142,14 +4878,12 @@ func rewriteValuePPC64_OpNeq64_0(v *Value) bool { } func rewriteValuePPC64_OpNeq64F_0(v *Value) bool { b := v.Block - _ = b // match: (Neq64F x y) // cond: // result: (NotEqual (FCMPU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64NotEqual) v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) v0.AddArg(x) @@ -5160,16 +4894,13 @@ func rewriteValuePPC64_OpNeq64F_0(v *Value) bool { } func rewriteValuePPC64_OpNeq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq8 x y) // cond: isSigned(x.Type) && isSigned(y.Type) // result: (NotEqual (CMPW (SignExt8to32 x) (SignExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(isSigned(x.Type) && isSigned(y.Type)) { break } @@ -5188,9 +4919,8 @@ func rewriteValuePPC64_OpNeq8_0(v *Value) bool { // cond: // result: (NotEqual (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64NotEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) @@ -5208,9 +4938,8 @@ func rewriteValuePPC64_OpNeqB_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64XOR) v.AddArg(x) v.AddArg(y) @@ -5219,14 +4948,12 @@ func rewriteValuePPC64_OpNeqB_0(v *Value) bool { } func rewriteValuePPC64_OpNeqPtr_0(v *Value) bool { b := v.Block - _ = b // match: (NeqPtr x y) // cond: // result: (NotEqual (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64NotEqual) v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) v0.AddArg(x) @@ -5240,9 +4967,8 @@ func rewriteValuePPC64_OpNilCheck_0(v *Value) bool { // cond: // result: (LoweredNilCheck ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpPPC64LoweredNilCheck) v.AddArg(ptr) v.AddArg(mem) @@ -5263,9 +4989,7 @@ func rewriteValuePPC64_OpNot_0(v *Value) bool { } func rewriteValuePPC64_OpOffPtr_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (OffPtr [off] ptr) // cond: // result: (ADD (MOVDconst [off]) ptr) @@ -5285,9 +5009,8 @@ func rewriteValuePPC64_OpOr16_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64OR) v.AddArg(x) v.AddArg(y) @@ -5299,9 +5022,8 @@ func rewriteValuePPC64_OpOr32_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64OR) v.AddArg(x) v.AddArg(y) @@ -5313,9 +5035,8 @@ func rewriteValuePPC64_OpOr64_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64OR) v.AddArg(x) v.AddArg(y) @@ -5327,9 +5048,8 @@ func rewriteValuePPC64_OpOr8_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64OR) v.AddArg(x) v.AddArg(y) @@ -5341,9 +5061,8 @@ func rewriteValuePPC64_OpOrB_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64OR) v.AddArg(x) v.AddArg(y) @@ -5352,9 +5071,7 @@ func rewriteValuePPC64_OpOrB_0(v *Value) bool { } func rewriteValuePPC64_OpPPC64ADD_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ADD (SLDconst x [c]) (SRDconst x [d])) // cond: d == 64-c // result: (ROTLconst [c] x) @@ -5738,13 +5455,12 @@ func rewriteValuePPC64_OpPPC64ADD_0(v *Value) bool { // cond: is32Bit(c) // result: (ADDconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c)) { break } @@ -5819,9 +5535,8 @@ func rewriteValuePPC64_OpPPC64AND_0(v *Value) bool { if v_1.Op != OpPPC64NOR { break } - _ = v_1.Args[1] - y := v_1.Args[0] - if y != v_1.Args[1] { + y := v_1.Args[1] + if y != v_1.Args[0] { break } v.reset(OpPPC64ANDN) @@ -5833,17 +5548,15 @@ func rewriteValuePPC64_OpPPC64AND_0(v *Value) bool { // cond: // result: (ANDN x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64NOR { break } - _ = v_0.Args[1] - y := v_0.Args[0] - if y != v_0.Args[1] { + y := v_0.Args[1] + if y != v_0.Args[0] { break } - x := v.Args[1] v.reset(OpPPC64ANDN) v.AddArg(x) v.AddArg(y) @@ -5910,13 +5623,12 @@ func rewriteValuePPC64_OpPPC64AND_0(v *Value) bool { // cond: isU16Bit(c) // result: (ANDconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isU16Bit(c)) { break } @@ -6300,7 +6012,6 @@ func rewriteValuePPC64_OpPPC64ANDconst_10(v *Value) bool { } func rewriteValuePPC64_OpPPC64CMP_0(v *Value) bool { b := v.Block - _ = b // match: (CMP x (MOVDconst [c])) // cond: is16Bit(c) // result: (CMPconst x [c]) @@ -6324,13 +6035,12 @@ func rewriteValuePPC64_OpPPC64CMP_0(v *Value) bool { // cond: is16Bit(c) // result: (InvertFlags (CMPconst y [c])) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64MOVDconst { break } c := v_0.AuxInt - y := v.Args[1] if !(is16Bit(c)) { break } @@ -6345,7 +6055,6 @@ func rewriteValuePPC64_OpPPC64CMP_0(v *Value) bool { } func rewriteValuePPC64_OpPPC64CMPU_0(v *Value) bool { b := v.Block - _ = b // match: (CMPU x (MOVDconst [c])) // cond: isU16Bit(c) // result: (CMPUconst x [c]) @@ -6369,13 +6078,12 @@ func rewriteValuePPC64_OpPPC64CMPU_0(v *Value) bool { // cond: isU16Bit(c) // result: (InvertFlags (CMPUconst y [c])) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64MOVDconst { break } c := v_0.AuxInt - y := v.Args[1] if !(isU16Bit(c)) { break } @@ -6441,7 +6149,6 @@ func rewriteValuePPC64_OpPPC64CMPUconst_0(v *Value) bool { } func rewriteValuePPC64_OpPPC64CMPW_0(v *Value) bool { b := v.Block - _ = b // match: (CMPW x (MOVWreg y)) // cond: // result: (CMPW x y) @@ -6462,13 +6169,12 @@ func rewriteValuePPC64_OpPPC64CMPW_0(v *Value) bool { // cond: // result: (CMPW x y) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64MOVWreg { break } x := v_0.Args[0] - y := v.Args[1] v.reset(OpPPC64CMPW) v.AddArg(x) v.AddArg(y) @@ -6497,13 +6203,12 @@ func rewriteValuePPC64_OpPPC64CMPW_0(v *Value) bool { // cond: is16Bit(c) // result: (InvertFlags (CMPWconst y [c])) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64MOVDconst { break } c := v_0.AuxInt - y := v.Args[1] if !(is16Bit(c)) { break } @@ -6518,7 +6223,6 @@ func rewriteValuePPC64_OpPPC64CMPW_0(v *Value) bool { } func rewriteValuePPC64_OpPPC64CMPWU_0(v *Value) bool { b := v.Block - _ = b // match: (CMPWU x (MOVWZreg y)) // cond: // result: (CMPWU x y) @@ -6539,13 +6243,12 @@ func rewriteValuePPC64_OpPPC64CMPWU_0(v *Value) bool { // cond: // result: (CMPWU x y) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64MOVWZreg { break } x := v_0.Args[0] - y := v.Args[1] v.reset(OpPPC64CMPWU) v.AddArg(x) v.AddArg(y) @@ -6574,13 +6277,12 @@ func rewriteValuePPC64_OpPPC64CMPWU_0(v *Value) bool { // cond: isU16Bit(c) // result: (InvertFlags (CMPWUconst y [c])) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64MOVDconst { break } c := v_0.AuxInt - y := v.Args[1] if !(isU16Bit(c)) { break } @@ -6819,15 +6521,13 @@ func rewriteValuePPC64_OpPPC64FADD_0(v *Value) bool { // cond: // result: (FMADD x y z) for { - _ = v.Args[1] + z := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64FMUL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - z := v.Args[1] + x := v_0.Args[0] v.reset(OpPPC64FMADD) v.AddArg(x) v.AddArg(y) @@ -6844,9 +6544,8 @@ func rewriteValuePPC64_OpPPC64FADD_0(v *Value) bool { if v_1.Op != OpPPC64FMUL { break } - _ = v_1.Args[1] - x := v_1.Args[0] y := v_1.Args[1] + x := v_1.Args[0] v.reset(OpPPC64FMADD) v.AddArg(x) v.AddArg(y) @@ -6860,15 +6559,13 @@ func rewriteValuePPC64_OpPPC64FADDS_0(v *Value) bool { // cond: // result: (FMADDS x y z) for { - _ = v.Args[1] + z := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64FMULS { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - z := v.Args[1] + x := v_0.Args[0] v.reset(OpPPC64FMADDS) v.AddArg(x) v.AddArg(y) @@ -6885,9 +6582,8 @@ func rewriteValuePPC64_OpPPC64FADDS_0(v *Value) bool { if v_1.Op != OpPPC64FMULS { break } - _ = v_1.Args[1] - x := v_1.Args[0] y := v_1.Args[1] + x := v_1.Args[0] v.reset(OpPPC64FMADDS) v.AddArg(x) v.AddArg(y) @@ -6962,7 +6658,7 @@ func rewriteValuePPC64_OpPPC64FMOVDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] p := v.Args[0] if p.Op != OpPPC64MOVDaddr { break @@ -6970,7 +6666,6 @@ func rewriteValuePPC64_OpPPC64FMOVDload_0(v *Value) bool { off2 := p.AuxInt sym2 := p.Aux ptr := p.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { break } @@ -6987,14 +6682,13 @@ func rewriteValuePPC64_OpPPC64FMOVDload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64ADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is16Bit(off1 + off2)) { break } @@ -7014,14 +6708,13 @@ func rewriteValuePPC64_OpPPC64FMOVDstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MTVSRD { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpPPC64MOVDstore) v.AuxInt = off v.Aux = sym @@ -7036,7 +6729,7 @@ func rewriteValuePPC64_OpPPC64FMOVDstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpPPC64ADDconst { break @@ -7044,7 +6737,6 @@ func rewriteValuePPC64_OpPPC64FMOVDstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is16Bit(off1 + off2)) { break } @@ -7062,7 +6754,7 @@ func rewriteValuePPC64_OpPPC64FMOVDstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] if p.Op != OpPPC64MOVDaddr { break @@ -7071,7 +6763,6 @@ func rewriteValuePPC64_OpPPC64FMOVDstore_0(v *Value) bool { sym2 := p.Aux ptr := p.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { break } @@ -7092,7 +6783,7 @@ func rewriteValuePPC64_OpPPC64FMOVSload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] p := v.Args[0] if p.Op != OpPPC64MOVDaddr { break @@ -7100,7 +6791,6 @@ func rewriteValuePPC64_OpPPC64FMOVSload_0(v *Value) bool { off2 := p.AuxInt sym2 := p.Aux ptr := p.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { break } @@ -7117,14 +6807,13 @@ func rewriteValuePPC64_OpPPC64FMOVSload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64ADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is16Bit(off1 + off2)) { break } @@ -7144,7 +6833,7 @@ func rewriteValuePPC64_OpPPC64FMOVSstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpPPC64ADDconst { break @@ -7152,7 +6841,6 @@ func rewriteValuePPC64_OpPPC64FMOVSstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is16Bit(off1 + off2)) { break } @@ -7170,7 +6858,7 @@ func rewriteValuePPC64_OpPPC64FMOVSstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] if p.Op != OpPPC64MOVDaddr { break @@ -7179,7 +6867,6 @@ func rewriteValuePPC64_OpPPC64FMOVSstore_0(v *Value) bool { sym2 := p.Aux ptr := p.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { break } @@ -7243,15 +6930,13 @@ func rewriteValuePPC64_OpPPC64FSUB_0(v *Value) bool { // cond: // result: (FMSUB x y z) for { - _ = v.Args[1] + z := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64FMUL { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - z := v.Args[1] + x := v_0.Args[0] v.reset(OpPPC64FMSUB) v.AddArg(x) v.AddArg(y) @@ -7265,15 +6950,13 @@ func rewriteValuePPC64_OpPPC64FSUBS_0(v *Value) bool { // cond: // result: (FMSUBS x y z) for { - _ = v.Args[1] + z := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64FMULS { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - z := v.Args[1] + x := v_0.Args[0] v.reset(OpPPC64FMSUBS) v.AddArg(x) v.AddArg(y) @@ -7508,9 +7191,7 @@ func rewriteValuePPC64_OpPPC64LessThan_0(v *Value) bool { } func rewriteValuePPC64_OpPPC64MFVSRD_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MFVSRD (FMOVDconst [c])) // cond: // result: (MOVDconst [c]) @@ -7534,9 +7215,8 @@ func rewriteValuePPC64_OpPPC64MFVSRD_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -7559,7 +7239,7 @@ func rewriteValuePPC64_OpPPC64MOVBZload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] p := v.Args[0] if p.Op != OpPPC64MOVDaddr { break @@ -7567,7 +7247,6 @@ func rewriteValuePPC64_OpPPC64MOVBZload_0(v *Value) bool { off2 := p.AuxInt sym2 := p.Aux ptr := p.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { break } @@ -7584,14 +7263,13 @@ func rewriteValuePPC64_OpPPC64MOVBZload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64ADDconst { break } off2 := v_0.AuxInt x := v_0.Args[0] - mem := v.Args[1] if !(is16Bit(off1 + off2)) { break } @@ -7610,15 +7288,13 @@ func rewriteValuePPC64_OpPPC64MOVBZload_0(v *Value) bool { break } sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] p := v.Args[0] if p.Op != OpPPC64ADD { break } - _ = p.Args[1] - ptr := p.Args[0] idx := p.Args[1] - mem := v.Args[1] + ptr := p.Args[0] if !(sym == nil && p.Uses == 1) { break } @@ -7635,14 +7311,13 @@ func rewriteValuePPC64_OpPPC64MOVBZloadidx_0(v *Value) bool { // cond: is16Bit(c) // result: (MOVBZload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is16Bit(c)) { break } @@ -7656,14 +7331,13 @@ func rewriteValuePPC64_OpPPC64MOVBZloadidx_0(v *Value) bool { // cond: is16Bit(c) // result: (MOVBZload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpPPC64MOVDconst { break } c := v_0.AuxInt ptr := v.Args[1] - mem := v.Args[2] if !(is16Bit(c)) { break } @@ -7677,9 +7351,7 @@ func rewriteValuePPC64_OpPPC64MOVBZloadidx_0(v *Value) bool { } func rewriteValuePPC64_OpPPC64MOVBZreg_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MOVBZreg y:(ANDconst [c] _)) // cond: uint64(c) <= 0xFF // result: y @@ -7863,9 +7535,7 @@ func rewriteValuePPC64_OpPPC64MOVBZreg_10(v *Value) bool { } func rewriteValuePPC64_OpPPC64MOVBreg_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MOVBreg y:(ANDconst [c] _)) // cond: uint64(c) <= 0x7F // result: y @@ -8062,7 +7732,7 @@ func rewriteValuePPC64_OpPPC64MOVBstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpPPC64ADDconst { break @@ -8070,7 +7740,6 @@ func rewriteValuePPC64_OpPPC64MOVBstore_0(v *Value) bool { off2 := v_0.AuxInt x := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is16Bit(off1 + off2)) { break } @@ -8088,7 +7757,7 @@ func rewriteValuePPC64_OpPPC64MOVBstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] if p.Op != OpPPC64MOVDaddr { break @@ -8097,7 +7766,6 @@ func rewriteValuePPC64_OpPPC64MOVBstore_0(v *Value) bool { sym2 := p.Aux ptr := p.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { break } @@ -8115,7 +7783,7 @@ func rewriteValuePPC64_OpPPC64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVDconst { @@ -8124,7 +7792,6 @@ func rewriteValuePPC64_OpPPC64MOVBstore_0(v *Value) bool { if v_1.AuxInt != 0 { break } - mem := v.Args[2] v.reset(OpPPC64MOVBstorezero) v.AuxInt = off v.Aux = sym @@ -8138,16 +7805,14 @@ func rewriteValuePPC64_OpPPC64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] if p.Op != OpPPC64ADD { break } - _ = p.Args[1] - ptr := p.Args[0] idx := p.Args[1] + ptr := p.Args[0] val := v.Args[1] - mem := v.Args[2] if !(off == 0 && sym == nil && p.Uses == 1) { break } @@ -8164,14 +7829,13 @@ func rewriteValuePPC64_OpPPC64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVBreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpPPC64MOVBstore) v.AuxInt = off v.Aux = sym @@ -8186,14 +7850,13 @@ func rewriteValuePPC64_OpPPC64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVBZreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpPPC64MOVBstore) v.AuxInt = off v.Aux = sym @@ -8208,14 +7871,13 @@ func rewriteValuePPC64_OpPPC64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVHreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpPPC64MOVBstore) v.AuxInt = off v.Aux = sym @@ -8230,14 +7892,13 @@ func rewriteValuePPC64_OpPPC64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVHZreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpPPC64MOVBstore) v.AuxInt = off v.Aux = sym @@ -8252,14 +7913,13 @@ func rewriteValuePPC64_OpPPC64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVWreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpPPC64MOVBstore) v.AuxInt = off v.Aux = sym @@ -8274,14 +7934,13 @@ func rewriteValuePPC64_OpPPC64MOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVWZreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpPPC64MOVBstore) v.AuxInt = off v.Aux = sym @@ -8294,18 +7953,15 @@ func rewriteValuePPC64_OpPPC64MOVBstore_0(v *Value) bool { } func rewriteValuePPC64_OpPPC64MOVBstore_10(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (MOVBstore [off] {sym} ptr (SRWconst (MOVHreg x) [c]) mem) // cond: c <= 8 // result: (MOVBstore [off] {sym} ptr (SRWconst x [c]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64SRWconst { @@ -8317,7 +7973,6 @@ func rewriteValuePPC64_OpPPC64MOVBstore_10(v *Value) bool { break } x := v_1_0.Args[0] - mem := v.Args[2] if !(c <= 8) { break } @@ -8338,7 +7993,7 @@ func rewriteValuePPC64_OpPPC64MOVBstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64SRWconst { @@ -8350,7 +8005,6 @@ func rewriteValuePPC64_OpPPC64MOVBstore_10(v *Value) bool { break } x := v_1_0.Args[0] - mem := v.Args[2] if !(c <= 8) { break } @@ -8371,7 +8025,7 @@ func rewriteValuePPC64_OpPPC64MOVBstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64SRWconst { @@ -8383,7 +8037,6 @@ func rewriteValuePPC64_OpPPC64MOVBstore_10(v *Value) bool { break } x := v_1_0.Args[0] - mem := v.Args[2] if !(c <= 24) { break } @@ -8404,7 +8057,7 @@ func rewriteValuePPC64_OpPPC64MOVBstore_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64SRWconst { @@ -8416,7 +8069,6 @@ func rewriteValuePPC64_OpPPC64MOVBstore_10(v *Value) bool { break } x := v_1_0.Args[0] - mem := v.Args[2] if !(c <= 24) { break } @@ -8455,7 +8107,7 @@ func rewriteValuePPC64_OpPPC64MOVBstore_10(v *Value) bool { if x0.Aux != s { break } - _ = x0.Args[2] + mem := x0.Args[2] if p != x0.Args[0] { break } @@ -8469,7 +8121,6 @@ func rewriteValuePPC64_OpPPC64MOVBstore_10(v *Value) bool { if w != x0_1.Args[0] { break } - mem := x0.Args[2] if !(!config.BigEndian && x0.Uses == 1 && i1 == i0+1 && clobber(x0)) { break } @@ -8508,7 +8159,7 @@ func rewriteValuePPC64_OpPPC64MOVBstore_10(v *Value) bool { if x0.Aux != s { break } - _ = x0.Args[2] + mem := x0.Args[2] if p != x0.Args[0] { break } @@ -8522,7 +8173,6 @@ func rewriteValuePPC64_OpPPC64MOVBstore_10(v *Value) bool { if w != x0_1.Args[0] { break } - mem := x0.Args[2] if !(!config.BigEndian && x0.Uses == 1 && i1 == i0+1 && clobber(x0)) { break } @@ -8561,14 +8211,13 @@ func rewriteValuePPC64_OpPPC64MOVBstore_10(v *Value) bool { if x0.Aux != s { break } - _ = x0.Args[2] + mem := x0.Args[2] if p != x0.Args[0] { break } if w != x0.Args[1] { break } - mem := x0.Args[2] if !(!config.BigEndian && x0.Uses == 1 && i1 == i0+1 && clobber(x0)) { break } @@ -8604,14 +8253,13 @@ func rewriteValuePPC64_OpPPC64MOVBstore_10(v *Value) bool { if x0.Aux != s { break } - _ = x0.Args[2] + mem := x0.Args[2] if p != x0.Args[0] { break } if w != x0.Args[1] { break } - mem := x0.Args[2] if !(!config.BigEndian && x0.Uses == 1 && i1 == i0+1 && clobber(x0)) { break } @@ -8684,7 +8332,7 @@ func rewriteValuePPC64_OpPPC64MOVBstore_10(v *Value) bool { if x2.Aux != s { break } - _ = x2.Args[2] + mem := x2.Args[2] if p != x2.Args[0] { break } @@ -8698,7 +8346,6 @@ func rewriteValuePPC64_OpPPC64MOVBstore_10(v *Value) bool { if w != x2_1.Args[0] { break } - mem := x2.Args[2] if !(!config.BigEndian && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && clobber(x0) && clobber(x1) && clobber(x2)) { break } @@ -8729,7 +8376,7 @@ func rewriteValuePPC64_OpPPC64MOVBstore_10(v *Value) bool { if x0.Aux != s { break } - _ = x0.Args[2] + mem := x0.Args[2] if p != x0.Args[0] { break } @@ -8743,7 +8390,6 @@ func rewriteValuePPC64_OpPPC64MOVBstore_10(v *Value) bool { if w != x0_1.Args[0] { break } - mem := x0.Args[2] if !(!config.BigEndian && x0.Uses == 1 && i1 == i0+1 && clobber(x0)) { break } @@ -8761,11 +8407,8 @@ func rewriteValuePPC64_OpPPC64MOVBstore_10(v *Value) bool { } func rewriteValuePPC64_OpPPC64MOVBstore_20(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (MOVBstore [i7] {s} p (SRDconst w [56]) x0:(MOVBstore [i6] {s} p (SRDconst w [48]) x1:(MOVBstore [i5] {s} p (SRDconst w [40]) x2:(MOVBstore [i4] {s} p (SRDconst w [32]) x3:(MOVWstore [i0] {s} p w mem))))) // cond: !config.BigEndian && i0%4 == 0 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) // result: (MOVDstore [i0] {s} p w mem) @@ -8856,14 +8499,13 @@ func rewriteValuePPC64_OpPPC64MOVBstore_20(v *Value) bool { if x3.Aux != s { break } - _ = x3.Args[2] + mem := x3.Args[2] if p != x3.Args[0] { break } if w != x3.Args[1] { break } - mem := x3.Args[2] if !(!config.BigEndian && i0%4 == 0 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3)) { break } @@ -9024,7 +8666,7 @@ func rewriteValuePPC64_OpPPC64MOVBstore_20(v *Value) bool { if x6.Aux != s { break } - _ = x6.Args[2] + mem := x6.Args[2] if p != x6.Args[0] { break } @@ -9038,7 +8680,6 @@ func rewriteValuePPC64_OpPPC64MOVBstore_20(v *Value) bool { if w != x6_1.Args[0] { break } - mem := x6.Args[2] if !(!config.BigEndian && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6)) { break } @@ -9056,14 +8697,12 @@ func rewriteValuePPC64_OpPPC64MOVBstore_20(v *Value) bool { } func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MOVBstoreidx ptr (MOVDconst [c]) val mem) // cond: is16Bit(c) // result: (MOVBstore [c] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVDconst { @@ -9071,7 +8710,6 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool { } c := v_1.AuxInt val := v.Args[2] - mem := v.Args[3] if !(is16Bit(c)) { break } @@ -9086,7 +8724,7 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool { // cond: is16Bit(c) // result: (MOVBstore [c] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpPPC64MOVDconst { break @@ -9094,7 +8732,6 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool { c := v_0.AuxInt ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is16Bit(c)) { break } @@ -9111,7 +8748,7 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -9119,7 +8756,6 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpPPC64MOVBstoreidx) v.AuxInt = off v.Aux = sym @@ -9135,7 +8771,7 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -9143,7 +8779,6 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpPPC64MOVBstoreidx) v.AuxInt = off v.Aux = sym @@ -9159,7 +8794,7 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -9167,7 +8802,6 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpPPC64MOVBstoreidx) v.AuxInt = off v.Aux = sym @@ -9183,7 +8817,7 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -9191,7 +8825,6 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpPPC64MOVBstoreidx) v.AuxInt = off v.Aux = sym @@ -9207,7 +8840,7 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -9215,7 +8848,6 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpPPC64MOVBstoreidx) v.AuxInt = off v.Aux = sym @@ -9231,7 +8863,7 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -9239,7 +8871,6 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpPPC64MOVBstoreidx) v.AuxInt = off v.Aux = sym @@ -9255,7 +8886,7 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -9268,7 +8899,6 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool { break } x := v_2_0.Args[0] - mem := v.Args[3] if !(c <= 8) { break } @@ -9290,7 +8920,7 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -9303,7 +8933,6 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool { break } x := v_2_0.Args[0] - mem := v.Args[3] if !(c <= 8) { break } @@ -9323,16 +8952,14 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_0(v *Value) bool { } func rewriteValuePPC64_OpPPC64MOVBstoreidx_10(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MOVBstoreidx [off] {sym} ptr idx (SRWconst (MOVWreg x) [c]) mem) // cond: c <= 24 // result: (MOVBstoreidx [off] {sym} ptr idx (SRWconst x [c]) mem) for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -9345,7 +8972,6 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_10(v *Value) bool { break } x := v_2_0.Args[0] - mem := v.Args[3] if !(c <= 24) { break } @@ -9367,7 +8993,7 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_10(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -9380,7 +9006,6 @@ func rewriteValuePPC64_OpPPC64MOVBstoreidx_10(v *Value) bool { break } x := v_2_0.Args[0] - mem := v.Args[3] if !(c <= 24) { break } @@ -9405,14 +9030,13 @@ func rewriteValuePPC64_OpPPC64MOVBstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64ADDconst { break } off2 := v_0.AuxInt x := v_0.Args[0] - mem := v.Args[1] if !(is16Bit(off1 + off2)) { break } @@ -9429,7 +9053,7 @@ func rewriteValuePPC64_OpPPC64MOVBstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] p := v.Args[0] if p.Op != OpPPC64MOVDaddr { break @@ -9437,7 +9061,6 @@ func rewriteValuePPC64_OpPPC64MOVBstorezero_0(v *Value) bool { off2 := p.AuxInt sym2 := p.Aux x := p.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && (x.Op != OpSB || p.Uses == 1)) { break } @@ -9484,7 +9107,7 @@ func rewriteValuePPC64_OpPPC64MOVDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] p := v.Args[0] if p.Op != OpPPC64MOVDaddr { break @@ -9492,7 +9115,6 @@ func rewriteValuePPC64_OpPPC64MOVDload_0(v *Value) bool { off2 := p.AuxInt sym2 := p.Aux ptr := p.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { break } @@ -9509,14 +9131,13 @@ func rewriteValuePPC64_OpPPC64MOVDload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64ADDconst { break } off2 := v_0.AuxInt x := v_0.Args[0] - mem := v.Args[1] if !(is16Bit(off1 + off2)) { break } @@ -9535,15 +9156,13 @@ func rewriteValuePPC64_OpPPC64MOVDload_0(v *Value) bool { break } sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] p := v.Args[0] if p.Op != OpPPC64ADD { break } - _ = p.Args[1] - ptr := p.Args[0] idx := p.Args[1] - mem := v.Args[1] + ptr := p.Args[0] if !(sym == nil && p.Uses == 1) { break } @@ -9560,14 +9179,13 @@ func rewriteValuePPC64_OpPPC64MOVDloadidx_0(v *Value) bool { // cond: is16Bit(c) // result: (MOVDload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is16Bit(c)) { break } @@ -9581,14 +9199,13 @@ func rewriteValuePPC64_OpPPC64MOVDloadidx_0(v *Value) bool { // cond: is16Bit(c) // result: (MOVDload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpPPC64MOVDconst { break } c := v_0.AuxInt ptr := v.Args[1] - mem := v.Args[2] if !(is16Bit(c)) { break } @@ -9607,14 +9224,13 @@ func rewriteValuePPC64_OpPPC64MOVDstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MFVSRD { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpPPC64FMOVDstore) v.AuxInt = off v.Aux = sym @@ -9629,7 +9245,7 @@ func rewriteValuePPC64_OpPPC64MOVDstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpPPC64ADDconst { break @@ -9637,7 +9253,6 @@ func rewriteValuePPC64_OpPPC64MOVDstore_0(v *Value) bool { off2 := v_0.AuxInt x := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is16Bit(off1 + off2)) { break } @@ -9655,7 +9270,7 @@ func rewriteValuePPC64_OpPPC64MOVDstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] if p.Op != OpPPC64MOVDaddr { break @@ -9664,7 +9279,6 @@ func rewriteValuePPC64_OpPPC64MOVDstore_0(v *Value) bool { sym2 := p.Aux ptr := p.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { break } @@ -9682,7 +9296,7 @@ func rewriteValuePPC64_OpPPC64MOVDstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVDconst { @@ -9691,7 +9305,6 @@ func rewriteValuePPC64_OpPPC64MOVDstore_0(v *Value) bool { if v_1.AuxInt != 0 { break } - mem := v.Args[2] v.reset(OpPPC64MOVDstorezero) v.AuxInt = off v.Aux = sym @@ -9705,16 +9318,14 @@ func rewriteValuePPC64_OpPPC64MOVDstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] if p.Op != OpPPC64ADD { break } - _ = p.Args[1] - ptr := p.Args[0] idx := p.Args[1] + ptr := p.Args[0] val := v.Args[1] - mem := v.Args[2] if !(off == 0 && sym == nil && p.Uses == 1) { break } @@ -9732,7 +9343,7 @@ func rewriteValuePPC64_OpPPC64MOVDstoreidx_0(v *Value) bool { // cond: is16Bit(c) // result: (MOVDstore [c] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVDconst { @@ -9740,7 +9351,6 @@ func rewriteValuePPC64_OpPPC64MOVDstoreidx_0(v *Value) bool { } c := v_1.AuxInt val := v.Args[2] - mem := v.Args[3] if !(is16Bit(c)) { break } @@ -9755,7 +9365,7 @@ func rewriteValuePPC64_OpPPC64MOVDstoreidx_0(v *Value) bool { // cond: is16Bit(c) // result: (MOVDstore [c] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpPPC64MOVDconst { break @@ -9763,7 +9373,6 @@ func rewriteValuePPC64_OpPPC64MOVDstoreidx_0(v *Value) bool { c := v_0.AuxInt ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is16Bit(c)) { break } @@ -9783,14 +9392,13 @@ func rewriteValuePPC64_OpPPC64MOVDstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64ADDconst { break } off2 := v_0.AuxInt x := v_0.Args[0] - mem := v.Args[1] if !(is16Bit(off1 + off2)) { break } @@ -9807,7 +9415,7 @@ func rewriteValuePPC64_OpPPC64MOVDstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] p := v.Args[0] if p.Op != OpPPC64MOVDaddr { break @@ -9815,7 +9423,6 @@ func rewriteValuePPC64_OpPPC64MOVDstorezero_0(v *Value) bool { off2 := p.AuxInt sym2 := p.Aux x := p.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && (x.Op != OpSB || p.Uses == 1)) { break } @@ -9834,14 +9441,13 @@ func rewriteValuePPC64_OpPPC64MOVHBRstore_0(v *Value) bool { // result: (MOVHBRstore {sym} ptr x mem) for { sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVHreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpPPC64MOVHBRstore) v.Aux = sym v.AddArg(ptr) @@ -9854,14 +9460,13 @@ func rewriteValuePPC64_OpPPC64MOVHBRstore_0(v *Value) bool { // result: (MOVHBRstore {sym} ptr x mem) for { sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVHZreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpPPC64MOVHBRstore) v.Aux = sym v.AddArg(ptr) @@ -9874,14 +9479,13 @@ func rewriteValuePPC64_OpPPC64MOVHBRstore_0(v *Value) bool { // result: (MOVHBRstore {sym} ptr x mem) for { sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVWreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpPPC64MOVHBRstore) v.Aux = sym v.AddArg(ptr) @@ -9894,14 +9498,13 @@ func rewriteValuePPC64_OpPPC64MOVHBRstore_0(v *Value) bool { // result: (MOVHBRstore {sym} ptr x mem) for { sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVWZreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpPPC64MOVHBRstore) v.Aux = sym v.AddArg(ptr) @@ -9918,7 +9521,7 @@ func rewriteValuePPC64_OpPPC64MOVHZload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] p := v.Args[0] if p.Op != OpPPC64MOVDaddr { break @@ -9926,7 +9529,6 @@ func rewriteValuePPC64_OpPPC64MOVHZload_0(v *Value) bool { off2 := p.AuxInt sym2 := p.Aux ptr := p.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { break } @@ -9943,14 +9545,13 @@ func rewriteValuePPC64_OpPPC64MOVHZload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64ADDconst { break } off2 := v_0.AuxInt x := v_0.Args[0] - mem := v.Args[1] if !(is16Bit(off1 + off2)) { break } @@ -9969,15 +9570,13 @@ func rewriteValuePPC64_OpPPC64MOVHZload_0(v *Value) bool { break } sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] p := v.Args[0] if p.Op != OpPPC64ADD { break } - _ = p.Args[1] - ptr := p.Args[0] idx := p.Args[1] - mem := v.Args[1] + ptr := p.Args[0] if !(sym == nil && p.Uses == 1) { break } @@ -9994,14 +9593,13 @@ func rewriteValuePPC64_OpPPC64MOVHZloadidx_0(v *Value) bool { // cond: is16Bit(c) // result: (MOVHZload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is16Bit(c)) { break } @@ -10015,14 +9613,13 @@ func rewriteValuePPC64_OpPPC64MOVHZloadidx_0(v *Value) bool { // cond: is16Bit(c) // result: (MOVHZload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpPPC64MOVDconst { break } c := v_0.AuxInt ptr := v.Args[1] - mem := v.Args[2] if !(is16Bit(c)) { break } @@ -10036,9 +9633,7 @@ func rewriteValuePPC64_OpPPC64MOVHZloadidx_0(v *Value) bool { } func rewriteValuePPC64_OpPPC64MOVHZreg_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MOVHZreg y:(ANDconst [c] _)) // cond: uint64(c) <= 0xFFFF // result: y @@ -10303,7 +9898,7 @@ func rewriteValuePPC64_OpPPC64MOVHload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] p := v.Args[0] if p.Op != OpPPC64MOVDaddr { break @@ -10311,7 +9906,6 @@ func rewriteValuePPC64_OpPPC64MOVHload_0(v *Value) bool { off2 := p.AuxInt sym2 := p.Aux ptr := p.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { break } @@ -10328,14 +9922,13 @@ func rewriteValuePPC64_OpPPC64MOVHload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64ADDconst { break } off2 := v_0.AuxInt x := v_0.Args[0] - mem := v.Args[1] if !(is16Bit(off1 + off2)) { break } @@ -10354,15 +9947,13 @@ func rewriteValuePPC64_OpPPC64MOVHload_0(v *Value) bool { break } sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] p := v.Args[0] if p.Op != OpPPC64ADD { break } - _ = p.Args[1] - ptr := p.Args[0] idx := p.Args[1] - mem := v.Args[1] + ptr := p.Args[0] if !(sym == nil && p.Uses == 1) { break } @@ -10379,14 +9970,13 @@ func rewriteValuePPC64_OpPPC64MOVHloadidx_0(v *Value) bool { // cond: is16Bit(c) // result: (MOVHload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is16Bit(c)) { break } @@ -10400,14 +9990,13 @@ func rewriteValuePPC64_OpPPC64MOVHloadidx_0(v *Value) bool { // cond: is16Bit(c) // result: (MOVHload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpPPC64MOVDconst { break } c := v_0.AuxInt ptr := v.Args[1] - mem := v.Args[2] if !(is16Bit(c)) { break } @@ -10421,9 +10010,7 @@ func rewriteValuePPC64_OpPPC64MOVHloadidx_0(v *Value) bool { } func rewriteValuePPC64_OpPPC64MOVHreg_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MOVHreg y:(ANDconst [c] _)) // cond: uint64(c) <= 0x7FFF // result: y @@ -10677,16 +10264,14 @@ func rewriteValuePPC64_OpPPC64MOVHreg_10(v *Value) bool { } func rewriteValuePPC64_OpPPC64MOVHstore_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (MOVHstore [off1] {sym} (ADDconst [off2] x) val mem) // cond: is16Bit(off1+off2) // result: (MOVHstore [off1+off2] {sym} x val mem) for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpPPC64ADDconst { break @@ -10694,7 +10279,6 @@ func rewriteValuePPC64_OpPPC64MOVHstore_0(v *Value) bool { off2 := v_0.AuxInt x := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is16Bit(off1 + off2)) { break } @@ -10712,7 +10296,7 @@ func rewriteValuePPC64_OpPPC64MOVHstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] if p.Op != OpPPC64MOVDaddr { break @@ -10721,7 +10305,6 @@ func rewriteValuePPC64_OpPPC64MOVHstore_0(v *Value) bool { sym2 := p.Aux ptr := p.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { break } @@ -10739,7 +10322,7 @@ func rewriteValuePPC64_OpPPC64MOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVDconst { @@ -10748,7 +10331,6 @@ func rewriteValuePPC64_OpPPC64MOVHstore_0(v *Value) bool { if v_1.AuxInt != 0 { break } - mem := v.Args[2] v.reset(OpPPC64MOVHstorezero) v.AuxInt = off v.Aux = sym @@ -10762,16 +10344,14 @@ func rewriteValuePPC64_OpPPC64MOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] if p.Op != OpPPC64ADD { break } - _ = p.Args[1] - ptr := p.Args[0] idx := p.Args[1] + ptr := p.Args[0] val := v.Args[1] - mem := v.Args[2] if !(off == 0 && sym == nil && p.Uses == 1) { break } @@ -10788,14 +10368,13 @@ func rewriteValuePPC64_OpPPC64MOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVHreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpPPC64MOVHstore) v.AuxInt = off v.Aux = sym @@ -10810,14 +10389,13 @@ func rewriteValuePPC64_OpPPC64MOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVHZreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpPPC64MOVHstore) v.AuxInt = off v.Aux = sym @@ -10832,14 +10410,13 @@ func rewriteValuePPC64_OpPPC64MOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVWreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpPPC64MOVHstore) v.AuxInt = off v.Aux = sym @@ -10854,14 +10431,13 @@ func rewriteValuePPC64_OpPPC64MOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVWZreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpPPC64MOVHstore) v.AuxInt = off v.Aux = sym @@ -10894,14 +10470,13 @@ func rewriteValuePPC64_OpPPC64MOVHstore_0(v *Value) bool { if x0.Aux != s { break } - _ = x0.Args[2] + mem := x0.Args[2] if p != x0.Args[0] { break } if w != x0.Args[1] { break } - mem := x0.Args[2] if !(!config.BigEndian && x0.Uses == 1 && i1 == i0+2 && clobber(x0)) { break } @@ -10937,14 +10512,13 @@ func rewriteValuePPC64_OpPPC64MOVHstore_0(v *Value) bool { if x0.Aux != s { break } - _ = x0.Args[2] + mem := x0.Args[2] if p != x0.Args[0] { break } if w != x0.Args[1] { break } - mem := x0.Args[2] if !(!config.BigEndian && x0.Uses == 1 && i1 == i0+2 && clobber(x0)) { break } @@ -10963,7 +10537,7 @@ func rewriteValuePPC64_OpPPC64MOVHstoreidx_0(v *Value) bool { // cond: is16Bit(c) // result: (MOVHstore [c] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVDconst { @@ -10971,7 +10545,6 @@ func rewriteValuePPC64_OpPPC64MOVHstoreidx_0(v *Value) bool { } c := v_1.AuxInt val := v.Args[2] - mem := v.Args[3] if !(is16Bit(c)) { break } @@ -10986,7 +10559,7 @@ func rewriteValuePPC64_OpPPC64MOVHstoreidx_0(v *Value) bool { // cond: is16Bit(c) // result: (MOVHstore [c] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpPPC64MOVDconst { break @@ -10994,7 +10567,6 @@ func rewriteValuePPC64_OpPPC64MOVHstoreidx_0(v *Value) bool { c := v_0.AuxInt ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is16Bit(c)) { break } @@ -11011,7 +10583,7 @@ func rewriteValuePPC64_OpPPC64MOVHstoreidx_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -11019,7 +10591,6 @@ func rewriteValuePPC64_OpPPC64MOVHstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpPPC64MOVHstoreidx) v.AuxInt = off v.Aux = sym @@ -11035,7 +10606,7 @@ func rewriteValuePPC64_OpPPC64MOVHstoreidx_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -11043,7 +10614,6 @@ func rewriteValuePPC64_OpPPC64MOVHstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpPPC64MOVHstoreidx) v.AuxInt = off v.Aux = sym @@ -11059,7 +10629,7 @@ func rewriteValuePPC64_OpPPC64MOVHstoreidx_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -11067,7 +10637,6 @@ func rewriteValuePPC64_OpPPC64MOVHstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpPPC64MOVHstoreidx) v.AuxInt = off v.Aux = sym @@ -11083,7 +10652,7 @@ func rewriteValuePPC64_OpPPC64MOVHstoreidx_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -11091,7 +10660,6 @@ func rewriteValuePPC64_OpPPC64MOVHstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpPPC64MOVHstoreidx) v.AuxInt = off v.Aux = sym @@ -11110,14 +10678,13 @@ func rewriteValuePPC64_OpPPC64MOVHstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64ADDconst { break } off2 := v_0.AuxInt x := v_0.Args[0] - mem := v.Args[1] if !(is16Bit(off1 + off2)) { break } @@ -11134,7 +10701,7 @@ func rewriteValuePPC64_OpPPC64MOVHstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] p := v.Args[0] if p.Op != OpPPC64MOVDaddr { break @@ -11142,7 +10709,6 @@ func rewriteValuePPC64_OpPPC64MOVHstorezero_0(v *Value) bool { off2 := p.AuxInt sym2 := p.Aux x := p.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && (x.Op != OpSB || p.Uses == 1)) { break } @@ -11161,14 +10727,13 @@ func rewriteValuePPC64_OpPPC64MOVWBRstore_0(v *Value) bool { // result: (MOVWBRstore {sym} ptr x mem) for { sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVWreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpPPC64MOVWBRstore) v.Aux = sym v.AddArg(ptr) @@ -11181,14 +10746,13 @@ func rewriteValuePPC64_OpPPC64MOVWBRstore_0(v *Value) bool { // result: (MOVWBRstore {sym} ptr x mem) for { sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVWZreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpPPC64MOVWBRstore) v.Aux = sym v.AddArg(ptr) @@ -11205,7 +10769,7 @@ func rewriteValuePPC64_OpPPC64MOVWZload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] p := v.Args[0] if p.Op != OpPPC64MOVDaddr { break @@ -11213,7 +10777,6 @@ func rewriteValuePPC64_OpPPC64MOVWZload_0(v *Value) bool { off2 := p.AuxInt sym2 := p.Aux ptr := p.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { break } @@ -11230,14 +10793,13 @@ func rewriteValuePPC64_OpPPC64MOVWZload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64ADDconst { break } off2 := v_0.AuxInt x := v_0.Args[0] - mem := v.Args[1] if !(is16Bit(off1 + off2)) { break } @@ -11256,15 +10818,13 @@ func rewriteValuePPC64_OpPPC64MOVWZload_0(v *Value) bool { break } sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] p := v.Args[0] if p.Op != OpPPC64ADD { break } - _ = p.Args[1] - ptr := p.Args[0] idx := p.Args[1] - mem := v.Args[1] + ptr := p.Args[0] if !(sym == nil && p.Uses == 1) { break } @@ -11281,14 +10841,13 @@ func rewriteValuePPC64_OpPPC64MOVWZloadidx_0(v *Value) bool { // cond: is16Bit(c) // result: (MOVWZload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is16Bit(c)) { break } @@ -11302,14 +10861,13 @@ func rewriteValuePPC64_OpPPC64MOVWZloadidx_0(v *Value) bool { // cond: is16Bit(c) // result: (MOVWZload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpPPC64MOVDconst { break } c := v_0.AuxInt ptr := v.Args[1] - mem := v.Args[2] if !(is16Bit(c)) { break } @@ -11323,9 +10881,7 @@ func rewriteValuePPC64_OpPPC64MOVWZloadidx_0(v *Value) bool { } func rewriteValuePPC64_OpPPC64MOVWZreg_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MOVWZreg y:(ANDconst [c] _)) // cond: uint64(c) <= 0xFFFFFFFF // result: y @@ -11695,7 +11251,7 @@ func rewriteValuePPC64_OpPPC64MOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] p := v.Args[0] if p.Op != OpPPC64MOVDaddr { break @@ -11703,7 +11259,6 @@ func rewriteValuePPC64_OpPPC64MOVWload_0(v *Value) bool { off2 := p.AuxInt sym2 := p.Aux ptr := p.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { break } @@ -11720,14 +11275,13 @@ func rewriteValuePPC64_OpPPC64MOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64ADDconst { break } off2 := v_0.AuxInt x := v_0.Args[0] - mem := v.Args[1] if !(is16Bit(off1 + off2)) { break } @@ -11746,15 +11300,13 @@ func rewriteValuePPC64_OpPPC64MOVWload_0(v *Value) bool { break } sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] p := v.Args[0] if p.Op != OpPPC64ADD { break } - _ = p.Args[1] - ptr := p.Args[0] idx := p.Args[1] - mem := v.Args[1] + ptr := p.Args[0] if !(sym == nil && p.Uses == 1) { break } @@ -11771,14 +11323,13 @@ func rewriteValuePPC64_OpPPC64MOVWloadidx_0(v *Value) bool { // cond: is16Bit(c) // result: (MOVWload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is16Bit(c)) { break } @@ -11792,14 +11343,13 @@ func rewriteValuePPC64_OpPPC64MOVWloadidx_0(v *Value) bool { // cond: is16Bit(c) // result: (MOVWload [c] ptr mem) for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpPPC64MOVDconst { break } c := v_0.AuxInt ptr := v.Args[1] - mem := v.Args[2] if !(is16Bit(c)) { break } @@ -11813,9 +11363,7 @@ func rewriteValuePPC64_OpPPC64MOVWloadidx_0(v *Value) bool { } func rewriteValuePPC64_OpPPC64MOVWreg_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MOVWreg y:(ANDconst [c] _)) // cond: uint64(c) <= 0xFFFF // result: y @@ -12144,7 +11692,7 @@ func rewriteValuePPC64_OpPPC64MOVWstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpPPC64ADDconst { break @@ -12152,7 +11700,6 @@ func rewriteValuePPC64_OpPPC64MOVWstore_0(v *Value) bool { off2 := v_0.AuxInt x := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is16Bit(off1 + off2)) { break } @@ -12170,7 +11717,7 @@ func rewriteValuePPC64_OpPPC64MOVWstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] if p.Op != OpPPC64MOVDaddr { break @@ -12179,7 +11726,6 @@ func rewriteValuePPC64_OpPPC64MOVWstore_0(v *Value) bool { sym2 := p.Aux ptr := p.Args[0] val := v.Args[1] - mem := v.Args[2] if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { break } @@ -12197,7 +11743,7 @@ func rewriteValuePPC64_OpPPC64MOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVDconst { @@ -12206,7 +11752,6 @@ func rewriteValuePPC64_OpPPC64MOVWstore_0(v *Value) bool { if v_1.AuxInt != 0 { break } - mem := v.Args[2] v.reset(OpPPC64MOVWstorezero) v.AuxInt = off v.Aux = sym @@ -12220,16 +11765,14 @@ func rewriteValuePPC64_OpPPC64MOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] p := v.Args[0] if p.Op != OpPPC64ADD { break } - _ = p.Args[1] - ptr := p.Args[0] idx := p.Args[1] + ptr := p.Args[0] val := v.Args[1] - mem := v.Args[2] if !(off == 0 && sym == nil && p.Uses == 1) { break } @@ -12246,14 +11789,13 @@ func rewriteValuePPC64_OpPPC64MOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVWreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpPPC64MOVWstore) v.AuxInt = off v.Aux = sym @@ -12268,14 +11810,13 @@ func rewriteValuePPC64_OpPPC64MOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVWZreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpPPC64MOVWstore) v.AuxInt = off v.Aux = sym @@ -12291,7 +11832,7 @@ func rewriteValuePPC64_OpPPC64MOVWstoreidx_0(v *Value) bool { // cond: is16Bit(c) // result: (MOVWstore [c] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpPPC64MOVDconst { @@ -12299,7 +11840,6 @@ func rewriteValuePPC64_OpPPC64MOVWstoreidx_0(v *Value) bool { } c := v_1.AuxInt val := v.Args[2] - mem := v.Args[3] if !(is16Bit(c)) { break } @@ -12314,7 +11854,7 @@ func rewriteValuePPC64_OpPPC64MOVWstoreidx_0(v *Value) bool { // cond: is16Bit(c) // result: (MOVWstore [c] ptr val mem) for { - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpPPC64MOVDconst { break @@ -12322,7 +11862,6 @@ func rewriteValuePPC64_OpPPC64MOVWstoreidx_0(v *Value) bool { c := v_0.AuxInt ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is16Bit(c)) { break } @@ -12339,7 +11878,7 @@ func rewriteValuePPC64_OpPPC64MOVWstoreidx_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -12347,7 +11886,6 @@ func rewriteValuePPC64_OpPPC64MOVWstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpPPC64MOVWstoreidx) v.AuxInt = off v.Aux = sym @@ -12363,7 +11901,7 @@ func rewriteValuePPC64_OpPPC64MOVWstoreidx_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] idx := v.Args[1] v_2 := v.Args[2] @@ -12371,7 +11909,6 @@ func rewriteValuePPC64_OpPPC64MOVWstoreidx_0(v *Value) bool { break } x := v_2.Args[0] - mem := v.Args[3] v.reset(OpPPC64MOVWstoreidx) v.AuxInt = off v.Aux = sym @@ -12390,14 +11927,13 @@ func rewriteValuePPC64_OpPPC64MOVWstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64ADDconst { break } off2 := v_0.AuxInt x := v_0.Args[0] - mem := v.Args[1] if !(is16Bit(off1 + off2)) { break } @@ -12414,7 +11950,7 @@ func rewriteValuePPC64_OpPPC64MOVWstorezero_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] p := v.Args[0] if p.Op != OpPPC64MOVDaddr { break @@ -12422,7 +11958,6 @@ func rewriteValuePPC64_OpPPC64MOVWstorezero_0(v *Value) bool { off2 := p.AuxInt sym2 := p.Aux x := p.Args[0] - mem := v.Args[1] if !(canMergeSym(sym1, sym2) && (x.Op != OpSB || p.Uses == 1)) { break } @@ -12437,9 +11972,7 @@ func rewriteValuePPC64_OpPPC64MOVWstorezero_0(v *Value) bool { } func rewriteValuePPC64_OpPPC64MTVSRD_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MTVSRD (MOVDconst [c])) // cond: // result: (FMOVDconst [c]) @@ -12463,9 +11996,8 @@ func rewriteValuePPC64_OpPPC64MTVSRD_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -12559,9 +12091,7 @@ func rewriteValuePPC64_OpPPC64NotEqual_0(v *Value) bool { } func rewriteValuePPC64_OpPPC64OR_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (OR (SLDconst x [c]) (SRDconst x [d])) // cond: d == 64-c // result: (ROTLconst [c] x) @@ -12964,11 +12494,8 @@ func rewriteValuePPC64_OpPPC64OR_0(v *Value) bool { } func rewriteValuePPC64_OpPPC64OR_10(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (OR x (MOVDconst [c])) // cond: isU32Bit(c) // result: (ORconst [c] x) @@ -12992,13 +12519,12 @@ func rewriteValuePPC64_OpPPC64OR_10(v *Value) bool { // cond: isU32Bit(c) // result: (ORconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isU32Bit(c)) { break } @@ -13019,9 +12545,8 @@ func rewriteValuePPC64_OpPPC64OR_10(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] o1 := v.Args[1] if o1.Op != OpPPC64SLWconst { break @@ -13076,9 +12601,8 @@ func rewriteValuePPC64_OpPPC64OR_10(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] x0 := v.Args[1] if x0.Op != OpPPC64MOVBZload { break @@ -13119,9 +12643,8 @@ func rewriteValuePPC64_OpPPC64OR_10(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] o1 := v.Args[1] if o1.Op != OpPPC64SLDconst { break @@ -13176,9 +12699,8 @@ func rewriteValuePPC64_OpPPC64OR_10(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] x0 := v.Args[1] if x0.Op != OpPPC64MOVBZload { break @@ -13219,9 +12741,8 @@ func rewriteValuePPC64_OpPPC64OR_10(v *Value) bool { } i1 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] o1 := v.Args[1] if o1.Op != OpPPC64SLWconst { break @@ -13278,9 +12799,8 @@ func rewriteValuePPC64_OpPPC64OR_10(v *Value) bool { } i0 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] x0 := v.Args[1] if x0.Op != OpPPC64MOVBZload { break @@ -13323,9 +12843,8 @@ func rewriteValuePPC64_OpPPC64OR_10(v *Value) bool { } i1 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] o1 := v.Args[1] if o1.Op != OpPPC64SLDconst { break @@ -13382,9 +12901,8 @@ func rewriteValuePPC64_OpPPC64OR_10(v *Value) bool { } i0 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] x0 := v.Args[1] if x0.Op != OpPPC64MOVBZload { break @@ -13419,11 +12937,8 @@ func rewriteValuePPC64_OpPPC64OR_10(v *Value) bool { } func rewriteValuePPC64_OpPPC64OR_20(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (OR s0:(SLWconst x0:(MOVBZload [i1] {s} p mem) [n1]) s1:(SLWconst x1:(MOVBZload [i0] {s} p mem) [n2])) // cond: !config.BigEndian && i1 == i0+1 && n1%8 == 0 && n2 == n1+8 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) // result: @mergePoint(b,x0,x1) (SLDconst (MOVHBRload (MOVDaddr [i0] {s} p) mem) [n1]) @@ -13441,9 +12956,8 @@ func rewriteValuePPC64_OpPPC64OR_20(v *Value) bool { } i1 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] s1 := v.Args[1] if s1.Op != OpPPC64SLWconst { break @@ -13499,9 +13013,8 @@ func rewriteValuePPC64_OpPPC64OR_20(v *Value) bool { } i0 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] s0 := v.Args[1] if s0.Op != OpPPC64SLWconst { break @@ -13557,9 +13070,8 @@ func rewriteValuePPC64_OpPPC64OR_20(v *Value) bool { } i1 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] s1 := v.Args[1] if s1.Op != OpPPC64SLDconst { break @@ -13615,9 +13127,8 @@ func rewriteValuePPC64_OpPPC64OR_20(v *Value) bool { } i0 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] s0 := v.Args[1] if s0.Op != OpPPC64SLDconst { break @@ -13675,9 +13186,8 @@ func rewriteValuePPC64_OpPPC64OR_20(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[1] - p := x2.Args[0] mem := x2.Args[1] + p := x2.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -13755,9 +13265,8 @@ func rewriteValuePPC64_OpPPC64OR_20(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[1] - p := x2.Args[0] mem := x2.Args[1] + p := x2.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -13843,9 +13352,8 @@ func rewriteValuePPC64_OpPPC64OR_20(v *Value) bool { } i2 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] x0 := o0.Args[1] if x0.Op != OpPPC64MOVHZload { break @@ -13916,9 +13424,8 @@ func rewriteValuePPC64_OpPPC64OR_20(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] s0 := o0.Args[1] if s0.Op != OpPPC64SLWconst { break @@ -13995,9 +13502,8 @@ func rewriteValuePPC64_OpPPC64OR_20(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[1] - p := x2.Args[0] mem := x2.Args[1] + p := x2.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -14075,9 +13581,8 @@ func rewriteValuePPC64_OpPPC64OR_20(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[1] - p := x2.Args[0] mem := x2.Args[1] + p := x2.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -14140,11 +13645,8 @@ func rewriteValuePPC64_OpPPC64OR_20(v *Value) bool { } func rewriteValuePPC64_OpPPC64OR_30(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (OR o0:(OR s0:(SLDconst x1:(MOVBZload [i2] {s} p mem) [16]) x0:(MOVHZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i3] {s} p mem) [24])) // cond: !config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses ==1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0) // result: @mergePoint(b,x0,x1,x2) (MOVWZload {s} [i0] p mem) @@ -14172,9 +13674,8 @@ func rewriteValuePPC64_OpPPC64OR_30(v *Value) bool { } i2 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] x0 := o0.Args[1] if x0.Op != OpPPC64MOVHZload { break @@ -14245,9 +13746,8 @@ func rewriteValuePPC64_OpPPC64OR_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] s0 := o0.Args[1] if s0.Op != OpPPC64SLDconst { break @@ -14324,9 +13824,8 @@ func rewriteValuePPC64_OpPPC64OR_30(v *Value) bool { } i0 := x2.AuxInt s := x2.Aux - _ = x2.Args[1] - p := x2.Args[0] mem := x2.Args[1] + p := x2.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -14416,9 +13915,8 @@ func rewriteValuePPC64_OpPPC64OR_30(v *Value) bool { } i0 := x2.AuxInt s := x2.Aux - _ = x2.Args[1] - p := x2.Args[0] mem := x2.Args[1] + p := x2.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -14516,9 +14014,8 @@ func rewriteValuePPC64_OpPPC64OR_30(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] x0 := o0.Args[1] if x0.Op != OpPPC64MOVHBRload { break @@ -14602,7 +14099,7 @@ func rewriteValuePPC64_OpPPC64OR_30(v *Value) bool { if x0.Type != t { break } - _ = x0.Args[1] + mem := x0.Args[1] x0_0 := x0.Args[0] if x0_0.Op != OpPPC64MOVDaddr { break @@ -14613,7 +14110,6 @@ func rewriteValuePPC64_OpPPC64OR_30(v *Value) bool { i2 := x0_0.AuxInt s := x0_0.Aux p := x0_0.Args[0] - mem := x0.Args[1] s0 := o0.Args[1] if s0.Op != OpPPC64SLWconst { break @@ -14692,9 +14188,8 @@ func rewriteValuePPC64_OpPPC64OR_30(v *Value) bool { } i0 := x2.AuxInt s := x2.Aux - _ = x2.Args[1] - p := x2.Args[0] mem := x2.Args[1] + p := x2.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -14784,9 +14279,8 @@ func rewriteValuePPC64_OpPPC64OR_30(v *Value) bool { } i0 := x2.AuxInt s := x2.Aux - _ = x2.Args[1] - p := x2.Args[0] mem := x2.Args[1] + p := x2.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -14884,9 +14378,8 @@ func rewriteValuePPC64_OpPPC64OR_30(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] x0 := o0.Args[1] if x0.Op != OpPPC64MOVHBRload { break @@ -14970,7 +14463,7 @@ func rewriteValuePPC64_OpPPC64OR_30(v *Value) bool { if x0.Type != t { break } - _ = x0.Args[1] + mem := x0.Args[1] x0_0 := x0.Args[0] if x0_0.Op != OpPPC64MOVDaddr { break @@ -14981,7 +14474,6 @@ func rewriteValuePPC64_OpPPC64OR_30(v *Value) bool { i2 := x0_0.AuxInt s := x0_0.Aux p := x0_0.Args[0] - mem := x0.Args[1] s0 := o0.Args[1] if s0.Op != OpPPC64SLDconst { break @@ -15045,11 +14537,8 @@ func rewriteValuePPC64_OpPPC64OR_30(v *Value) bool { } func rewriteValuePPC64_OpPPC64OR_40(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (OR x0:(MOVBZload [i3] {s} p mem) o0:(OR s0:(SLWconst x1:(MOVBZload [i2] {s} p mem) [8]) s1:(SLWconst x2:(MOVHBRload (MOVDaddr [i0] {s} p) mem) [16]))) // cond: !config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0) // result: @mergePoint(b,x0,x1,x2) (MOVWBRload (MOVDaddr [i0] {s} p) mem) @@ -15062,9 +14551,8 @@ func rewriteValuePPC64_OpPPC64OR_40(v *Value) bool { } i3 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -15154,9 +14642,8 @@ func rewriteValuePPC64_OpPPC64OR_40(v *Value) bool { } i3 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -15261,9 +14748,8 @@ func rewriteValuePPC64_OpPPC64OR_40(v *Value) bool { } i2 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] s1 := o0.Args[1] if s1.Op != OpPPC64SLWconst { break @@ -15354,7 +14840,7 @@ func rewriteValuePPC64_OpPPC64OR_40(v *Value) bool { if x2.Type != t { break } - _ = x2.Args[1] + mem := x2.Args[1] x2_0 := x2.Args[0] if x2_0.Op != OpPPC64MOVDaddr { break @@ -15365,7 +14851,6 @@ func rewriteValuePPC64_OpPPC64OR_40(v *Value) bool { i0 := x2_0.AuxInt s := x2_0.Aux p := x2_0.Args[0] - mem := x2.Args[1] s0 := o0.Args[1] if s0.Op != OpPPC64SLWconst { break @@ -15430,9 +14915,8 @@ func rewriteValuePPC64_OpPPC64OR_40(v *Value) bool { } i3 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -15522,9 +15006,8 @@ func rewriteValuePPC64_OpPPC64OR_40(v *Value) bool { } i3 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -15629,9 +15112,8 @@ func rewriteValuePPC64_OpPPC64OR_40(v *Value) bool { } i2 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] s1 := o0.Args[1] if s1.Op != OpPPC64SLDconst { break @@ -15722,7 +15204,7 @@ func rewriteValuePPC64_OpPPC64OR_40(v *Value) bool { if x2.Type != t { break } - _ = x2.Args[1] + mem := x2.Args[1] x2_0 := x2.Args[0] if x2_0.Op != OpPPC64MOVDaddr { break @@ -15733,7 +15215,6 @@ func rewriteValuePPC64_OpPPC64OR_40(v *Value) bool { i0 := x2_0.AuxInt s := x2_0.Aux p := x2_0.Args[0] - mem := x2.Args[1] s0 := o0.Args[1] if s0.Op != OpPPC64SLDconst { break @@ -15805,9 +15286,8 @@ func rewriteValuePPC64_OpPPC64OR_40(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[1] - p := x2.Args[0] mem := x2.Args[1] + p := x2.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -15907,9 +15387,8 @@ func rewriteValuePPC64_OpPPC64OR_40(v *Value) bool { } i3 := x2.AuxInt s := x2.Aux - _ = x2.Args[1] - p := x2.Args[0] mem := x2.Args[1] + p := x2.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -15994,11 +15473,8 @@ func rewriteValuePPC64_OpPPC64OR_40(v *Value) bool { } func rewriteValuePPC64_OpPPC64OR_50(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (OR o0:(OR s1:(SLDconst x1:(MOVBZload [i2] {s} p mem) [40]) s0:(SLDconst x0:(MOVHBRload (MOVDaddr [i0] {s} p) mem) [48])) s2:(SLDconst x2:(MOVBZload [i3] {s} p mem) [32])) // cond: !config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(o0) // result: @mergePoint(b,x0,x1,x2) (SLDconst (MOVWBRload (MOVDaddr [i0] {s} p) mem) [32]) @@ -16026,9 +15502,8 @@ func rewriteValuePPC64_OpPPC64OR_50(v *Value) bool { } i2 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] s0 := o0.Args[1] if s0.Op != OpPPC64SLDconst { break @@ -16129,7 +15604,7 @@ func rewriteValuePPC64_OpPPC64OR_50(v *Value) bool { if x0.Type != t { break } - _ = x0.Args[1] + mem := x0.Args[1] x0_0 := x0.Args[0] if x0_0.Op != OpPPC64MOVDaddr { break @@ -16140,7 +15615,6 @@ func rewriteValuePPC64_OpPPC64OR_50(v *Value) bool { i0 := x0_0.AuxInt s := x0_0.Aux p := x0_0.Args[0] - mem := x0.Args[1] s1 := o0.Args[1] if s1.Op != OpPPC64SLDconst { break @@ -16222,9 +15696,8 @@ func rewriteValuePPC64_OpPPC64OR_50(v *Value) bool { } i0 := x2.AuxInt s := x2.Aux - _ = x2.Args[1] - p := x2.Args[0] mem := x2.Args[1] + p := x2.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -16324,9 +15797,8 @@ func rewriteValuePPC64_OpPPC64OR_50(v *Value) bool { } i0 := x2.AuxInt s := x2.Aux - _ = x2.Args[1] - p := x2.Args[0] mem := x2.Args[1] + p := x2.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -16434,9 +15906,8 @@ func rewriteValuePPC64_OpPPC64OR_50(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] s0 := o0.Args[1] if s0.Op != OpPPC64SLDconst { break @@ -16537,7 +16008,7 @@ func rewriteValuePPC64_OpPPC64OR_50(v *Value) bool { if x0.Type != t { break } - _ = x0.Args[1] + mem := x0.Args[1] x0_0 := x0.Args[0] if x0_0.Op != OpPPC64MOVDaddr { break @@ -16548,7 +16019,6 @@ func rewriteValuePPC64_OpPPC64OR_50(v *Value) bool { i2 := x0_0.AuxInt s := x0_0.Aux p := x0_0.Args[0] - mem := x0.Args[1] s1 := o0.Args[1] if s1.Op != OpPPC64SLDconst { break @@ -16630,9 +16100,8 @@ func rewriteValuePPC64_OpPPC64OR_50(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -16770,9 +16239,8 @@ func rewriteValuePPC64_OpPPC64OR_50(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -16910,9 +16378,8 @@ func rewriteValuePPC64_OpPPC64OR_50(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -17050,9 +16517,8 @@ func rewriteValuePPC64_OpPPC64OR_50(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -17175,9 +16641,7 @@ func rewriteValuePPC64_OpPPC64OR_50(v *Value) bool { } func rewriteValuePPC64_OpPPC64OR_60(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (OR s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR o4:(OR s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) x0:(MOVWZload {s} [i0] p mem))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]))) // cond: !config.BigEndian && i0%4 == 0 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6) && clobber(o3) && clobber(o4) && clobber(o5) // result: @mergePoint(b,x0,x4,x5,x6,x7) (MOVDload {s} [i0] p mem) @@ -17197,9 +16661,8 @@ func rewriteValuePPC64_OpPPC64OR_60(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -17337,9 +16800,8 @@ func rewriteValuePPC64_OpPPC64OR_60(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -17477,9 +16939,8 @@ func rewriteValuePPC64_OpPPC64OR_60(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -17617,9 +17078,8 @@ func rewriteValuePPC64_OpPPC64OR_60(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -17765,9 +17225,8 @@ func rewriteValuePPC64_OpPPC64OR_60(v *Value) bool { } i6 := x6.AuxInt s := x6.Aux - _ = x6.Args[1] - p := x6.Args[0] mem := x6.Args[1] + p := x6.Args[0] o4 := o5.Args[1] if o4.Op != OpPPC64OR { break @@ -17905,9 +17364,8 @@ func rewriteValuePPC64_OpPPC64OR_60(v *Value) bool { } i6 := x6.AuxInt s := x6.Aux - _ = x6.Args[1] - p := x6.Args[0] mem := x6.Args[1] + p := x6.Args[0] o4 := o5.Args[1] if o4.Op != OpPPC64OR { break @@ -18045,9 +17503,8 @@ func rewriteValuePPC64_OpPPC64OR_60(v *Value) bool { } i6 := x6.AuxInt s := x6.Aux - _ = x6.Args[1] - p := x6.Args[0] mem := x6.Args[1] + p := x6.Args[0] o4 := o5.Args[1] if o4.Op != OpPPC64OR { break @@ -18185,9 +17642,8 @@ func rewriteValuePPC64_OpPPC64OR_60(v *Value) bool { } i6 := x6.AuxInt s := x6.Aux - _ = x6.Args[1] - p := x6.Args[0] mem := x6.Args[1] + p := x6.Args[0] o4 := o5.Args[1] if o4.Op != OpPPC64OR { break @@ -18333,9 +17789,8 @@ func rewriteValuePPC64_OpPPC64OR_60(v *Value) bool { } i5 := x5.AuxInt s := x5.Aux - _ = x5.Args[1] - p := x5.Args[0] mem := x5.Args[1] + p := x5.Args[0] o3 := o4.Args[1] if o3.Op != OpPPC64OR { break @@ -18473,9 +17928,8 @@ func rewriteValuePPC64_OpPPC64OR_60(v *Value) bool { } i5 := x5.AuxInt s := x5.Aux - _ = x5.Args[1] - p := x5.Args[0] mem := x5.Args[1] + p := x5.Args[0] o3 := o4.Args[1] if o3.Op != OpPPC64OR { break @@ -18582,11 +18036,8 @@ func rewriteValuePPC64_OpPPC64OR_60(v *Value) bool { } func rewriteValuePPC64_OpPPC64OR_70(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (OR o5:(OR o4:(OR o3:(OR s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) x0:(MOVWZload {s} [i0] p mem)) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56])) // cond: !config.BigEndian && i0%4 == 0 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6) && clobber(o3) && clobber(o4) && clobber(o5) // result: @mergePoint(b,x0,x4,x5,x6,x7) (MOVDload {s} [i0] p mem) @@ -18630,9 +18081,8 @@ func rewriteValuePPC64_OpPPC64OR_70(v *Value) bool { } i4 := x4.AuxInt s := x4.Aux - _ = x4.Args[1] - p := x4.Args[0] mem := x4.Args[1] + p := x4.Args[0] x0 := o3.Args[1] if x0.Op != OpPPC64MOVWZload { break @@ -18763,9 +18213,8 @@ func rewriteValuePPC64_OpPPC64OR_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] s3 := o3.Args[1] if s3.Op != OpPPC64SLDconst { break @@ -18886,9 +18335,8 @@ func rewriteValuePPC64_OpPPC64OR_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -19035,9 +18483,8 @@ func rewriteValuePPC64_OpPPC64OR_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -19184,9 +18631,8 @@ func rewriteValuePPC64_OpPPC64OR_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -19333,9 +18779,8 @@ func rewriteValuePPC64_OpPPC64OR_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -19482,9 +18927,8 @@ func rewriteValuePPC64_OpPPC64OR_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -19631,9 +19075,8 @@ func rewriteValuePPC64_OpPPC64OR_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -19780,9 +19223,8 @@ func rewriteValuePPC64_OpPPC64OR_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -19929,9 +19371,8 @@ func rewriteValuePPC64_OpPPC64OR_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] o0 := v.Args[1] if o0.Op != OpPPC64OR { break @@ -20063,11 +19504,8 @@ func rewriteValuePPC64_OpPPC64OR_70(v *Value) bool { } func rewriteValuePPC64_OpPPC64OR_80(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (OR o0:(OR s1:(SLDconst x1:(MOVBZload [i1] {s} p mem) [48]) o1:(OR s2:(SLDconst x2:(MOVBZload [i2] {s} p mem) [40]) o2:(OR s3:(SLDconst x3:(MOVBZload [i3] {s} p mem) [32]) x4:(MOVWBRload (MOVDaddr [i4] p) mem)))) s0:(SLDconst x0:(MOVBZload [i0] {s} p mem) [56])) // cond: !config.BigEndian && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) // result: @mergePoint(b,x0,x1,x2,x3,x4) (MOVDBRload (MOVDaddr [i0] {s} p) mem) @@ -20095,9 +19533,8 @@ func rewriteValuePPC64_OpPPC64OR_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] o1 := o0.Args[1] if o1.Op != OpPPC64OR { break @@ -20244,9 +19681,8 @@ func rewriteValuePPC64_OpPPC64OR_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] o1 := o0.Args[1] if o1.Op != OpPPC64OR { break @@ -20393,9 +19829,8 @@ func rewriteValuePPC64_OpPPC64OR_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] o1 := o0.Args[1] if o1.Op != OpPPC64OR { break @@ -20542,9 +19977,8 @@ func rewriteValuePPC64_OpPPC64OR_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] o1 := o0.Args[1] if o1.Op != OpPPC64OR { break @@ -20699,9 +20133,8 @@ func rewriteValuePPC64_OpPPC64OR_80(v *Value) bool { } i2 := x2.AuxInt s := x2.Aux - _ = x2.Args[1] - p := x2.Args[0] mem := x2.Args[1] + p := x2.Args[0] o2 := o1.Args[1] if o2.Op != OpPPC64OR { break @@ -20848,9 +20281,8 @@ func rewriteValuePPC64_OpPPC64OR_80(v *Value) bool { } i2 := x2.AuxInt s := x2.Aux - _ = x2.Args[1] - p := x2.Args[0] mem := x2.Args[1] + p := x2.Args[0] o2 := o1.Args[1] if o2.Op != OpPPC64OR { break @@ -21005,9 +20437,8 @@ func rewriteValuePPC64_OpPPC64OR_80(v *Value) bool { } i3 := x3.AuxInt s := x3.Aux - _ = x3.Args[1] - p := x3.Args[0] mem := x3.Args[1] + p := x3.Args[0] x4 := o2.Args[1] if x4.Op != OpPPC64MOVWBRload { break @@ -21148,7 +20579,7 @@ func rewriteValuePPC64_OpPPC64OR_80(v *Value) bool { if x4.Type != t { break } - _ = x4.Args[1] + mem := x4.Args[1] x4_0 := x4.Args[0] if x4_0.Op != OpPPC64MOVDaddr { break @@ -21158,7 +20589,6 @@ func rewriteValuePPC64_OpPPC64OR_80(v *Value) bool { } i4 := x4_0.AuxInt p := x4_0.Args[0] - mem := x4.Args[1] s3 := o2.Args[1] if s3.Op != OpPPC64SLDconst { break @@ -21272,9 +20702,8 @@ func rewriteValuePPC64_OpPPC64OR_80(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -21424,9 +20853,8 @@ func rewriteValuePPC64_OpPPC64OR_80(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -21568,11 +20996,8 @@ func rewriteValuePPC64_OpPPC64OR_80(v *Value) bool { } func rewriteValuePPC64_OpPPC64OR_90(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (OR x7:(MOVBZload [i7] {s} p mem) o5:(OR s6:(SLDconst x6:(MOVBZload [i6] {s} p mem) [8]) o4:(OR o3:(OR s4:(SLDconst x4:(MOVBZload [i4] {s} p mem) [24]) s0:(SLWconst x3:(MOVWBRload (MOVDaddr [i0] {s} p) mem) [32])) s5:(SLDconst x5:(MOVBZload [i5] {s} p mem) [16])))) // cond: !config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6) // result: @mergePoint(b,x3,x4,x5,x6,x7) (MOVDBRload (MOVDaddr [i0] {s} p) mem) @@ -21585,9 +21010,8 @@ func rewriteValuePPC64_OpPPC64OR_90(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -21737,9 +21161,8 @@ func rewriteValuePPC64_OpPPC64OR_90(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -21889,9 +21312,8 @@ func rewriteValuePPC64_OpPPC64OR_90(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -22041,9 +21463,8 @@ func rewriteValuePPC64_OpPPC64OR_90(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -22193,9 +21614,8 @@ func rewriteValuePPC64_OpPPC64OR_90(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -22345,9 +21765,8 @@ func rewriteValuePPC64_OpPPC64OR_90(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -22512,9 +21931,8 @@ func rewriteValuePPC64_OpPPC64OR_90(v *Value) bool { } i6 := x6.AuxInt s := x6.Aux - _ = x6.Args[1] - p := x6.Args[0] mem := x6.Args[1] + p := x6.Args[0] o4 := o5.Args[1] if o4.Op != OpPPC64OR { break @@ -22664,9 +22082,8 @@ func rewriteValuePPC64_OpPPC64OR_90(v *Value) bool { } i6 := x6.AuxInt s := x6.Aux - _ = x6.Args[1] - p := x6.Args[0] mem := x6.Args[1] + p := x6.Args[0] o4 := o5.Args[1] if o4.Op != OpPPC64OR { break @@ -22816,9 +22233,8 @@ func rewriteValuePPC64_OpPPC64OR_90(v *Value) bool { } i6 := x6.AuxInt s := x6.Aux - _ = x6.Args[1] - p := x6.Args[0] mem := x6.Args[1] + p := x6.Args[0] o4 := o5.Args[1] if o4.Op != OpPPC64OR { break @@ -22968,9 +22384,8 @@ func rewriteValuePPC64_OpPPC64OR_90(v *Value) bool { } i6 := x6.AuxInt s := x6.Aux - _ = x6.Args[1] - p := x6.Args[0] mem := x6.Args[1] + p := x6.Args[0] o4 := o5.Args[1] if o4.Op != OpPPC64OR { break @@ -23097,11 +22512,8 @@ func rewriteValuePPC64_OpPPC64OR_90(v *Value) bool { } func rewriteValuePPC64_OpPPC64OR_100(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (OR o5:(OR o4:(OR s5:(SLDconst x5:(MOVBZload [i5] {s} p mem) [16]) o3:(OR s4:(SLDconst x4:(MOVBZload [i4] {s} p mem) [24]) s0:(SLWconst x3:(MOVWBRload (MOVDaddr [i0] {s} p) mem) [32]))) s6:(SLDconst x6:(MOVBZload [i6] {s} p mem) [8])) x7:(MOVBZload [i7] {s} p mem)) // cond: !config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6) // result: @mergePoint(b,x3,x4,x5,x6,x7) (MOVDBRload (MOVDaddr [i0] {s} p) mem) @@ -23137,9 +22549,8 @@ func rewriteValuePPC64_OpPPC64OR_100(v *Value) bool { } i5 := x5.AuxInt s := x5.Aux - _ = x5.Args[1] - p := x5.Args[0] mem := x5.Args[1] + p := x5.Args[0] o3 := o4.Args[1] if o3.Op != OpPPC64OR { break @@ -23289,9 +22700,8 @@ func rewriteValuePPC64_OpPPC64OR_100(v *Value) bool { } i5 := x5.AuxInt s := x5.Aux - _ = x5.Args[1] - p := x5.Args[0] mem := x5.Args[1] + p := x5.Args[0] o3 := o4.Args[1] if o3.Op != OpPPC64OR { break @@ -23449,9 +22859,8 @@ func rewriteValuePPC64_OpPPC64OR_100(v *Value) bool { } i4 := x4.AuxInt s := x4.Aux - _ = x4.Args[1] - p := x4.Args[0] mem := x4.Args[1] + p := x4.Args[0] s0 := o3.Args[1] if s0.Op != OpPPC64SLWconst { break @@ -23602,7 +23011,7 @@ func rewriteValuePPC64_OpPPC64OR_100(v *Value) bool { if x3.Type != t { break } - _ = x3.Args[1] + mem := x3.Args[1] x3_0 := x3.Args[0] if x3_0.Op != OpPPC64MOVDaddr { break @@ -23613,7 +23022,6 @@ func rewriteValuePPC64_OpPPC64OR_100(v *Value) bool { i0 := x3_0.AuxInt s := x3_0.Aux p := x3_0.Args[0] - mem := x3.Args[1] s4 := o3.Args[1] if s4.Op != OpPPC64SLDconst { break @@ -23722,9 +23130,8 @@ func rewriteValuePPC64_OpPPC64OR_100(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -23874,9 +23281,8 @@ func rewriteValuePPC64_OpPPC64OR_100(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -24026,9 +23432,8 @@ func rewriteValuePPC64_OpPPC64OR_100(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -24178,9 +23583,8 @@ func rewriteValuePPC64_OpPPC64OR_100(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -24330,9 +23734,8 @@ func rewriteValuePPC64_OpPPC64OR_100(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -24482,9 +23885,8 @@ func rewriteValuePPC64_OpPPC64OR_100(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -24626,11 +24028,8 @@ func rewriteValuePPC64_OpPPC64OR_100(v *Value) bool { } func rewriteValuePPC64_OpPPC64OR_110(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (OR x7:(MOVBZload [i7] {s} p mem) o5:(OR o4:(OR o3:(OR s4:(SLDconst x4:(MOVBZload [i4] {s} p mem) [24]) s0:(SLDconst x3:(MOVWBRload (MOVDaddr [i0] {s} p) mem) [32])) s5:(SLDconst x5:(MOVBZload [i5] {s} p mem) [16])) s6:(SLDconst x6:(MOVBZload [i6] {s} p mem) [8]))) // cond: !config.BigEndian && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x3, x4, x5, x6, x7) != nil && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(o3) && clobber(o4) && clobber(o5) && clobber(s0) && clobber(s4) && clobber(s5) && clobber(s6) // result: @mergePoint(b,x3,x4,x5,x6,x7) (MOVDBRload (MOVDaddr [i0] {s} p) mem) @@ -24643,9 +24042,8 @@ func rewriteValuePPC64_OpPPC64OR_110(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -24795,9 +24193,8 @@ func rewriteValuePPC64_OpPPC64OR_110(v *Value) bool { } i7 := x7.AuxInt s := x7.Aux - _ = x7.Args[1] - p := x7.Args[0] mem := x7.Args[1] + p := x7.Args[0] o5 := v.Args[1] if o5.Op != OpPPC64OR { break @@ -24962,9 +24359,8 @@ func rewriteValuePPC64_OpPPC64OR_110(v *Value) bool { } i6 := x6.AuxInt s := x6.Aux - _ = x6.Args[1] - p := x6.Args[0] mem := x6.Args[1] + p := x6.Args[0] o4 := o5.Args[1] if o4.Op != OpPPC64OR { break @@ -25114,9 +24510,8 @@ func rewriteValuePPC64_OpPPC64OR_110(v *Value) bool { } i6 := x6.AuxInt s := x6.Aux - _ = x6.Args[1] - p := x6.Args[0] mem := x6.Args[1] + p := x6.Args[0] o4 := o5.Args[1] if o4.Op != OpPPC64OR { break @@ -25266,9 +24661,8 @@ func rewriteValuePPC64_OpPPC64OR_110(v *Value) bool { } i6 := x6.AuxInt s := x6.Aux - _ = x6.Args[1] - p := x6.Args[0] mem := x6.Args[1] + p := x6.Args[0] o4 := o5.Args[1] if o4.Op != OpPPC64OR { break @@ -25418,9 +24812,8 @@ func rewriteValuePPC64_OpPPC64OR_110(v *Value) bool { } i6 := x6.AuxInt s := x6.Aux - _ = x6.Args[1] - p := x6.Args[0] mem := x6.Args[1] + p := x6.Args[0] o4 := o5.Args[1] if o4.Op != OpPPC64OR { break @@ -25578,9 +24971,8 @@ func rewriteValuePPC64_OpPPC64OR_110(v *Value) bool { } i5 := x5.AuxInt s := x5.Aux - _ = x5.Args[1] - p := x5.Args[0] mem := x5.Args[1] + p := x5.Args[0] o3 := o4.Args[1] if o3.Op != OpPPC64OR { break @@ -25730,9 +25122,8 @@ func rewriteValuePPC64_OpPPC64OR_110(v *Value) bool { } i5 := x5.AuxInt s := x5.Aux - _ = x5.Args[1] - p := x5.Args[0] mem := x5.Args[1] + p := x5.Args[0] o3 := o4.Args[1] if o3.Op != OpPPC64OR { break @@ -25890,9 +25281,8 @@ func rewriteValuePPC64_OpPPC64OR_110(v *Value) bool { } i4 := x4.AuxInt s := x4.Aux - _ = x4.Args[1] - p := x4.Args[0] mem := x4.Args[1] + p := x4.Args[0] s0 := o3.Args[1] if s0.Op != OpPPC64SLDconst { break @@ -26043,7 +25433,7 @@ func rewriteValuePPC64_OpPPC64OR_110(v *Value) bool { if x3.Type != t { break } - _ = x3.Args[1] + mem := x3.Args[1] x3_0 := x3.Args[0] if x3_0.Op != OpPPC64MOVDaddr { break @@ -26054,7 +25444,6 @@ func rewriteValuePPC64_OpPPC64OR_110(v *Value) bool { i0 := x3_0.AuxInt s := x3_0.Aux p := x3_0.Args[0] - mem := x3.Args[1] s4 := o3.Args[1] if s4.Op != OpPPC64SLDconst { break @@ -26217,6 +25606,44 @@ func rewriteValuePPC64_OpPPC64ORconst_0(v *Value) bool { } return false } +func rewriteValuePPC64_OpPPC64ROTL_0(v *Value) bool { + // match: (ROTL x (MOVDconst [c])) + // cond: + // result: (ROTLconst x [c&63]) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpPPC64MOVDconst { + break + } + c := v_1.AuxInt + v.reset(OpPPC64ROTLconst) + v.AuxInt = c & 63 + v.AddArg(x) + return true + } + return false +} +func rewriteValuePPC64_OpPPC64ROTLW_0(v *Value) bool { + // match: (ROTLW x (MOVDconst [c])) + // cond: + // result: (ROTLWconst x [c&31]) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpPPC64MOVDconst { + break + } + c := v_1.AuxInt + v.reset(OpPPC64ROTLWconst) + v.AuxInt = c & 31 + v.AddArg(x) + return true + } + return false +} func rewriteValuePPC64_OpPPC64SUB_0(v *Value) bool { // match: (SUB x (MOVDconst [c])) // cond: is32Bit(-c) @@ -26241,9 +25668,7 @@ func rewriteValuePPC64_OpPPC64SUB_0(v *Value) bool { } func rewriteValuePPC64_OpPPC64XOR_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (XOR (SLDconst x [c]) (SRDconst x [d])) // cond: d == 64-c // result: (ROTLconst [c] x) @@ -26668,13 +26093,12 @@ func rewriteValuePPC64_OpPPC64XOR_10(v *Value) bool { // cond: isU32Bit(c) // result: (XORconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpPPC64MOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isU32Bit(c)) { break } @@ -26717,11 +26141,66 @@ func rewriteValuePPC64_OpPPC64XORconst_0(v *Value) bool { } return false } +func rewriteValuePPC64_OpPanicBounds_0(v *Value) bool { + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 0 + // result: (LoweredPanicBoundsA [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 0) { + break + } + v.reset(OpPPC64LoweredPanicBoundsA) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 1 + // result: (LoweredPanicBoundsB [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 1) { + break + } + v.reset(OpPPC64LoweredPanicBoundsB) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 2 + // result: (LoweredPanicBoundsC [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 2) { + break + } + v.reset(OpPPC64LoweredPanicBoundsC) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + return false +} func rewriteValuePPC64_OpPopCount16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (PopCount16 x) // cond: // result: (POPCNTW (MOVHZreg x)) @@ -26736,9 +26215,7 @@ func rewriteValuePPC64_OpPopCount16_0(v *Value) bool { } func rewriteValuePPC64_OpPopCount32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (PopCount32 x) // cond: // result: (POPCNTW (MOVWZreg x)) @@ -26764,9 +26241,7 @@ func rewriteValuePPC64_OpPopCount64_0(v *Value) bool { } func rewriteValuePPC64_OpPopCount8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (PopCount8 x) // cond: // result: (POPCNTB (MOVBZreg x)) @@ -26779,6 +26254,128 @@ func rewriteValuePPC64_OpPopCount8_0(v *Value) bool { return true } } +func rewriteValuePPC64_OpRotateLeft16_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (RotateLeft16 x (MOVDconst [c])) + // cond: + // result: (Or16 (Lsh16x64 x (MOVDconst [c&15])) (Rsh16Ux64 x (MOVDconst [-c&15]))) + for { + t := v.Type + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpPPC64MOVDconst { + break + } + c := v_1.AuxInt + v.reset(OpOr16) + v0 := b.NewValue0(v.Pos, OpLsh16x64, t) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) + v1.AuxInt = c & 15 + v0.AddArg(v1) + v.AddArg(v0) + v2 := b.NewValue0(v.Pos, OpRsh16Ux64, t) + v2.AddArg(x) + v3 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) + v3.AuxInt = -c & 15 + v2.AddArg(v3) + v.AddArg(v2) + return true + } + return false +} +func rewriteValuePPC64_OpRotateLeft32_0(v *Value) bool { + // match: (RotateLeft32 x (MOVDconst [c])) + // cond: + // result: (ROTLWconst [c&31] x) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpPPC64MOVDconst { + break + } + c := v_1.AuxInt + v.reset(OpPPC64ROTLWconst) + v.AuxInt = c & 31 + v.AddArg(x) + return true + } + // match: (RotateLeft32 x y) + // cond: + // result: (ROTLW x y) + for { + y := v.Args[1] + x := v.Args[0] + v.reset(OpPPC64ROTLW) + v.AddArg(x) + v.AddArg(y) + return true + } +} +func rewriteValuePPC64_OpRotateLeft64_0(v *Value) bool { + // match: (RotateLeft64 x (MOVDconst [c])) + // cond: + // result: (ROTLconst [c&63] x) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpPPC64MOVDconst { + break + } + c := v_1.AuxInt + v.reset(OpPPC64ROTLconst) + v.AuxInt = c & 63 + v.AddArg(x) + return true + } + // match: (RotateLeft64 x y) + // cond: + // result: (ROTL x y) + for { + y := v.Args[1] + x := v.Args[0] + v.reset(OpPPC64ROTL) + v.AddArg(x) + v.AddArg(y) + return true + } +} +func rewriteValuePPC64_OpRotateLeft8_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (RotateLeft8 x (MOVDconst [c])) + // cond: + // result: (Or8 (Lsh8x64 x (MOVDconst [c&7])) (Rsh8Ux64 x (MOVDconst [-c&7]))) + for { + t := v.Type + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpPPC64MOVDconst { + break + } + c := v_1.AuxInt + v.reset(OpOr8) + v0 := b.NewValue0(v.Pos, OpLsh8x64, t) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) + v1.AuxInt = c & 7 + v0.AddArg(v1) + v.AddArg(v0) + v2 := b.NewValue0(v.Pos, OpRsh8Ux64, t) + v2.AddArg(x) + v3 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) + v3.AuxInt = -c & 7 + v2.AddArg(v3) + v.AddArg(v2) + return true + } + return false +} func rewriteValuePPC64_OpRound_0(v *Value) bool { // match: (Round x) // cond: @@ -26814,16 +26411,13 @@ func rewriteValuePPC64_OpRound64F_0(v *Value) bool { } func rewriteValuePPC64_OpRsh16Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux16 x y) // cond: shiftIsBounded(v) // result: (SRW (MOVHZreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -26838,9 +26432,8 @@ func rewriteValuePPC64_OpRsh16Ux16_0(v *Value) bool { // cond: // result: (SRW (ZeroExt16to32 x) (ORN y (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt16to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRW) v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) v0.AddArg(x) @@ -26861,9 +26454,7 @@ func rewriteValuePPC64_OpRsh16Ux16_0(v *Value) bool { } func rewriteValuePPC64_OpRsh16Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux32 x (Const64 [c])) // cond: uint32(c) < 16 // result: (SRWconst (ZeroExt16to32 x) [c]) @@ -26910,9 +26501,8 @@ func rewriteValuePPC64_OpRsh16Ux32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SRW (MOVHZreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -26927,9 +26517,8 @@ func rewriteValuePPC64_OpRsh16Ux32_0(v *Value) bool { // cond: // result: (SRW (ZeroExt16to32 x) (ORN y (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt32to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRW) v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) v0.AddArg(x) @@ -26950,9 +26539,7 @@ func rewriteValuePPC64_OpRsh16Ux32_0(v *Value) bool { } func rewriteValuePPC64_OpRsh16Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux64 x (Const64 [c])) // cond: uint64(c) < 16 // result: (SRWconst (ZeroExt16to32 x) [c]) @@ -27016,9 +26603,8 @@ func rewriteValuePPC64_OpRsh16Ux64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SRW (MOVHZreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -27033,9 +26619,8 @@ func rewriteValuePPC64_OpRsh16Ux64_0(v *Value) bool { // cond: // result: (SRW (ZeroExt16to32 x) (ORN y (MaskIfNotCarry (ADDconstForCarry [-16] y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRW) v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) v0.AddArg(x) @@ -27054,16 +26639,13 @@ func rewriteValuePPC64_OpRsh16Ux64_0(v *Value) bool { } func rewriteValuePPC64_OpRsh16Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux8 x y) // cond: shiftIsBounded(v) // result: (SRW (MOVHZreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -27078,9 +26660,8 @@ func rewriteValuePPC64_OpRsh16Ux8_0(v *Value) bool { // cond: // result: (SRW (ZeroExt16to32 x) (ORN y (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt8to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRW) v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) v0.AddArg(x) @@ -27101,16 +26682,13 @@ func rewriteValuePPC64_OpRsh16Ux8_0(v *Value) bool { } func rewriteValuePPC64_OpRsh16x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x16 x y) // cond: shiftIsBounded(v) // result: (SRAW (MOVHreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -27125,9 +26703,8 @@ func rewriteValuePPC64_OpRsh16x16_0(v *Value) bool { // cond: // result: (SRAW (SignExt16to32 x) (ORN y (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt16to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRAW) v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) v0.AddArg(x) @@ -27148,9 +26725,7 @@ func rewriteValuePPC64_OpRsh16x16_0(v *Value) bool { } func rewriteValuePPC64_OpRsh16x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x32 x (Const64 [c])) // cond: uint32(c) < 16 // result: (SRAWconst (SignExt16to32 x) [c]) @@ -27197,9 +26772,8 @@ func rewriteValuePPC64_OpRsh16x32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SRAW (MOVHreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -27214,9 +26788,8 @@ func rewriteValuePPC64_OpRsh16x32_0(v *Value) bool { // cond: // result: (SRAW (SignExt16to32 x) (ORN y (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt32to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRAW) v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) v0.AddArg(x) @@ -27237,9 +26810,7 @@ func rewriteValuePPC64_OpRsh16x32_0(v *Value) bool { } func rewriteValuePPC64_OpRsh16x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x64 x (Const64 [c])) // cond: uint64(c) < 16 // result: (SRAWconst (SignExt16to32 x) [c]) @@ -27307,9 +26878,8 @@ func rewriteValuePPC64_OpRsh16x64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SRAW (MOVHreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -27324,9 +26894,8 @@ func rewriteValuePPC64_OpRsh16x64_0(v *Value) bool { // cond: // result: (SRAW (SignExt16to32 x) (ORN y (MaskIfNotCarry (ADDconstForCarry [-16] y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRAW) v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) v0.AddArg(x) @@ -27345,16 +26914,13 @@ func rewriteValuePPC64_OpRsh16x64_0(v *Value) bool { } func rewriteValuePPC64_OpRsh16x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x8 x y) // cond: shiftIsBounded(v) // result: (SRAW (MOVHreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -27369,9 +26935,8 @@ func rewriteValuePPC64_OpRsh16x8_0(v *Value) bool { // cond: // result: (SRAW (SignExt16to32 x) (ORN y (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt8to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRAW) v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) v0.AddArg(x) @@ -27392,16 +26957,13 @@ func rewriteValuePPC64_OpRsh16x8_0(v *Value) bool { } func rewriteValuePPC64_OpRsh32Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux16 x y) // cond: shiftIsBounded(v) // result: (SRW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -27414,9 +26976,8 @@ func rewriteValuePPC64_OpRsh32Ux16_0(v *Value) bool { // cond: // result: (SRW x (ORN y (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt16to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -27435,9 +26996,7 @@ func rewriteValuePPC64_OpRsh32Ux16_0(v *Value) bool { } func rewriteValuePPC64_OpRsh32Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux32 x (Const64 [c])) // cond: uint32(c) < 32 // result: (SRWconst x [c]) @@ -27480,9 +27039,8 @@ func rewriteValuePPC64_OpRsh32Ux32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SRW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -27495,9 +27053,8 @@ func rewriteValuePPC64_OpRsh32Ux32_0(v *Value) bool { // cond: // result: (SRW x (ORN y (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt32to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -27516,9 +27073,7 @@ func rewriteValuePPC64_OpRsh32Ux32_0(v *Value) bool { } func rewriteValuePPC64_OpRsh32Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux64 x (Const64 [c])) // cond: uint64(c) < 32 // result: (SRWconst x [c]) @@ -27578,9 +27133,8 @@ func rewriteValuePPC64_OpRsh32Ux64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SRW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -27626,7 +27180,7 @@ func rewriteValuePPC64_OpRsh32Ux64_0(v *Value) bool { if v_1.Op != OpPPC64AND { break } - _ = v_1.Args[1] + y := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpPPC64MOVDconst { break @@ -27634,7 +27188,6 @@ func rewriteValuePPC64_OpRsh32Ux64_0(v *Value) bool { if v_1_0.AuxInt != 31 { break } - y := v_1.Args[1] v.reset(OpPPC64SRW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int32) @@ -27791,7 +27344,7 @@ func rewriteValuePPC64_OpRsh32Ux64_0(v *Value) bool { if v_1_1.Type != typ.UInt { break } - _ = v_1_1.Args[1] + y := v_1_1.Args[1] v_1_1_0 := v_1_1.Args[0] if v_1_1_0.Op != OpPPC64MOVDconst { break @@ -27799,7 +27352,6 @@ func rewriteValuePPC64_OpRsh32Ux64_0(v *Value) bool { if v_1_1_0.AuxInt != 31 { break } - y := v_1_1.Args[1] v.reset(OpPPC64SRW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt) @@ -27817,16 +27369,13 @@ func rewriteValuePPC64_OpRsh32Ux64_0(v *Value) bool { } func rewriteValuePPC64_OpRsh32Ux64_10(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux64 x y) // cond: // result: (SRW x (ORN y (MaskIfNotCarry (ADDconstForCarry [-32] y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -27843,16 +27392,13 @@ func rewriteValuePPC64_OpRsh32Ux64_10(v *Value) bool { } func rewriteValuePPC64_OpRsh32Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux8 x y) // cond: shiftIsBounded(v) // result: (SRW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -27865,9 +27411,8 @@ func rewriteValuePPC64_OpRsh32Ux8_0(v *Value) bool { // cond: // result: (SRW x (ORN y (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt8to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -27886,16 +27431,13 @@ func rewriteValuePPC64_OpRsh32Ux8_0(v *Value) bool { } func rewriteValuePPC64_OpRsh32x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x16 x y) // cond: shiftIsBounded(v) // result: (SRAW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -27908,9 +27450,8 @@ func rewriteValuePPC64_OpRsh32x16_0(v *Value) bool { // cond: // result: (SRAW x (ORN y (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt16to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRAW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -27929,9 +27470,7 @@ func rewriteValuePPC64_OpRsh32x16_0(v *Value) bool { } func rewriteValuePPC64_OpRsh32x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x32 x (Const64 [c])) // cond: uint32(c) < 32 // result: (SRAWconst x [c]) @@ -27974,9 +27513,8 @@ func rewriteValuePPC64_OpRsh32x32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SRAW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -27989,9 +27527,8 @@ func rewriteValuePPC64_OpRsh32x32_0(v *Value) bool { // cond: // result: (SRAW x (ORN y (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt32to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRAW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -28010,9 +27547,7 @@ func rewriteValuePPC64_OpRsh32x32_0(v *Value) bool { } func rewriteValuePPC64_OpRsh32x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x64 x (Const64 [c])) // cond: uint64(c) < 32 // result: (SRAWconst x [c]) @@ -28074,9 +27609,8 @@ func rewriteValuePPC64_OpRsh32x64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SRAW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -28122,7 +27656,7 @@ func rewriteValuePPC64_OpRsh32x64_0(v *Value) bool { if v_1.Op != OpPPC64AND { break } - _ = v_1.Args[1] + y := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpPPC64MOVDconst { break @@ -28130,7 +27664,6 @@ func rewriteValuePPC64_OpRsh32x64_0(v *Value) bool { if v_1_0.AuxInt != 31 { break } - y := v_1.Args[1] v.reset(OpPPC64SRAW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int32) @@ -28287,7 +27820,7 @@ func rewriteValuePPC64_OpRsh32x64_0(v *Value) bool { if v_1_1.Type != typ.UInt { break } - _ = v_1_1.Args[1] + y := v_1_1.Args[1] v_1_1_0 := v_1_1.Args[0] if v_1_1_0.Op != OpPPC64MOVDconst { break @@ -28295,7 +27828,6 @@ func rewriteValuePPC64_OpRsh32x64_0(v *Value) bool { if v_1_1_0.AuxInt != 31 { break } - y := v_1_1.Args[1] v.reset(OpPPC64SRAW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt) @@ -28313,16 +27845,13 @@ func rewriteValuePPC64_OpRsh32x64_0(v *Value) bool { } func rewriteValuePPC64_OpRsh32x64_10(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x64 x y) // cond: // result: (SRAW x (ORN y (MaskIfNotCarry (ADDconstForCarry [-32] y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRAW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -28339,16 +27868,13 @@ func rewriteValuePPC64_OpRsh32x64_10(v *Value) bool { } func rewriteValuePPC64_OpRsh32x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x8 x y) // cond: shiftIsBounded(v) // result: (SRAW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -28361,9 +27887,8 @@ func rewriteValuePPC64_OpRsh32x8_0(v *Value) bool { // cond: // result: (SRAW x (ORN y (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt8to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRAW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -28382,16 +27907,13 @@ func rewriteValuePPC64_OpRsh32x8_0(v *Value) bool { } func rewriteValuePPC64_OpRsh64Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux16 x y) // cond: shiftIsBounded(v) // result: (SRD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -28404,9 +27926,8 @@ func rewriteValuePPC64_OpRsh64Ux16_0(v *Value) bool { // cond: // result: (SRD x (ORN y (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt16to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -28425,9 +27946,7 @@ func rewriteValuePPC64_OpRsh64Ux16_0(v *Value) bool { } func rewriteValuePPC64_OpRsh64Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux32 x (Const64 [c])) // cond: uint32(c) < 64 // result: (SRDconst x [c]) @@ -28470,9 +27989,8 @@ func rewriteValuePPC64_OpRsh64Ux32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SRD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -28485,9 +28003,8 @@ func rewriteValuePPC64_OpRsh64Ux32_0(v *Value) bool { // cond: // result: (SRD x (ORN y (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt32to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -28506,9 +28023,7 @@ func rewriteValuePPC64_OpRsh64Ux32_0(v *Value) bool { } func rewriteValuePPC64_OpRsh64Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux64 x (Const64 [c])) // cond: uint64(c) < 64 // result: (SRDconst x [c]) @@ -28568,9 +28083,8 @@ func rewriteValuePPC64_OpRsh64Ux64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SRD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -28616,7 +28130,7 @@ func rewriteValuePPC64_OpRsh64Ux64_0(v *Value) bool { if v_1.Op != OpPPC64AND { break } - _ = v_1.Args[1] + y := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpPPC64MOVDconst { break @@ -28624,7 +28138,6 @@ func rewriteValuePPC64_OpRsh64Ux64_0(v *Value) bool { if v_1_0.AuxInt != 63 { break } - y := v_1.Args[1] v.reset(OpPPC64SRD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int64) @@ -28781,7 +28294,7 @@ func rewriteValuePPC64_OpRsh64Ux64_0(v *Value) bool { if v_1_1.Type != typ.UInt { break } - _ = v_1_1.Args[1] + y := v_1_1.Args[1] v_1_1_0 := v_1_1.Args[0] if v_1_1_0.Op != OpPPC64MOVDconst { break @@ -28789,7 +28302,6 @@ func rewriteValuePPC64_OpRsh64Ux64_0(v *Value) bool { if v_1_1_0.AuxInt != 63 { break } - y := v_1_1.Args[1] v.reset(OpPPC64SRD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt) @@ -28807,16 +28319,13 @@ func rewriteValuePPC64_OpRsh64Ux64_0(v *Value) bool { } func rewriteValuePPC64_OpRsh64Ux64_10(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux64 x y) // cond: // result: (SRD x (ORN y (MaskIfNotCarry (ADDconstForCarry [-64] y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -28833,16 +28342,13 @@ func rewriteValuePPC64_OpRsh64Ux64_10(v *Value) bool { } func rewriteValuePPC64_OpRsh64Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux8 x y) // cond: shiftIsBounded(v) // result: (SRD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -28855,9 +28361,8 @@ func rewriteValuePPC64_OpRsh64Ux8_0(v *Value) bool { // cond: // result: (SRD x (ORN y (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt8to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -28876,16 +28381,13 @@ func rewriteValuePPC64_OpRsh64Ux8_0(v *Value) bool { } func rewriteValuePPC64_OpRsh64x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x16 x y) // cond: shiftIsBounded(v) // result: (SRAD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -28898,9 +28400,8 @@ func rewriteValuePPC64_OpRsh64x16_0(v *Value) bool { // cond: // result: (SRAD x (ORN y (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt16to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRAD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -28919,9 +28420,7 @@ func rewriteValuePPC64_OpRsh64x16_0(v *Value) bool { } func rewriteValuePPC64_OpRsh64x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x32 x (Const64 [c])) // cond: uint32(c) < 64 // result: (SRADconst x [c]) @@ -28964,9 +28463,8 @@ func rewriteValuePPC64_OpRsh64x32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SRAD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -28979,9 +28477,8 @@ func rewriteValuePPC64_OpRsh64x32_0(v *Value) bool { // cond: // result: (SRAD x (ORN y (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt32to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRAD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -29000,9 +28497,7 @@ func rewriteValuePPC64_OpRsh64x32_0(v *Value) bool { } func rewriteValuePPC64_OpRsh64x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x64 x (Const64 [c])) // cond: uint64(c) < 64 // result: (SRADconst x [c]) @@ -29064,9 +28559,8 @@ func rewriteValuePPC64_OpRsh64x64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SRAD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -29112,7 +28606,7 @@ func rewriteValuePPC64_OpRsh64x64_0(v *Value) bool { if v_1.Op != OpPPC64AND { break } - _ = v_1.Args[1] + y := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpPPC64MOVDconst { break @@ -29120,7 +28614,6 @@ func rewriteValuePPC64_OpRsh64x64_0(v *Value) bool { if v_1_0.AuxInt != 63 { break } - y := v_1.Args[1] v.reset(OpPPC64SRAD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int64) @@ -29277,7 +28770,7 @@ func rewriteValuePPC64_OpRsh64x64_0(v *Value) bool { if v_1_1.Type != typ.UInt { break } - _ = v_1_1.Args[1] + y := v_1_1.Args[1] v_1_1_0 := v_1_1.Args[0] if v_1_1_0.Op != OpPPC64MOVDconst { break @@ -29285,7 +28778,6 @@ func rewriteValuePPC64_OpRsh64x64_0(v *Value) bool { if v_1_1_0.AuxInt != 63 { break } - y := v_1_1.Args[1] v.reset(OpPPC64SRAD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt) @@ -29303,16 +28795,13 @@ func rewriteValuePPC64_OpRsh64x64_0(v *Value) bool { } func rewriteValuePPC64_OpRsh64x64_10(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x64 x y) // cond: // result: (SRAD x (ORN y (MaskIfNotCarry (ADDconstForCarry [-64] y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRAD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -29329,16 +28818,13 @@ func rewriteValuePPC64_OpRsh64x64_10(v *Value) bool { } func rewriteValuePPC64_OpRsh64x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x8 x y) // cond: shiftIsBounded(v) // result: (SRAD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -29351,9 +28837,8 @@ func rewriteValuePPC64_OpRsh64x8_0(v *Value) bool { // cond: // result: (SRAD x (ORN y (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt8to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRAD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) @@ -29372,16 +28857,13 @@ func rewriteValuePPC64_OpRsh64x8_0(v *Value) bool { } func rewriteValuePPC64_OpRsh8Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux16 x y) // cond: shiftIsBounded(v) // result: (SRW (MOVBZreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -29396,9 +28878,8 @@ func rewriteValuePPC64_OpRsh8Ux16_0(v *Value) bool { // cond: // result: (SRW (ZeroExt8to32 x) (ORN y (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt16to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRW) v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) v0.AddArg(x) @@ -29419,9 +28900,7 @@ func rewriteValuePPC64_OpRsh8Ux16_0(v *Value) bool { } func rewriteValuePPC64_OpRsh8Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux32 x (Const64 [c])) // cond: uint32(c) < 8 // result: (SRWconst (ZeroExt8to32 x) [c]) @@ -29468,9 +28947,8 @@ func rewriteValuePPC64_OpRsh8Ux32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SRW (MOVBZreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -29485,9 +28963,8 @@ func rewriteValuePPC64_OpRsh8Ux32_0(v *Value) bool { // cond: // result: (SRW (ZeroExt8to32 x) (ORN y (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt32to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRW) v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) v0.AddArg(x) @@ -29508,9 +28985,7 @@ func rewriteValuePPC64_OpRsh8Ux32_0(v *Value) bool { } func rewriteValuePPC64_OpRsh8Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux64 x (Const64 [c])) // cond: uint64(c) < 8 // result: (SRWconst (ZeroExt8to32 x) [c]) @@ -29574,9 +29049,8 @@ func rewriteValuePPC64_OpRsh8Ux64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SRW (MOVBZreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -29591,9 +29065,8 @@ func rewriteValuePPC64_OpRsh8Ux64_0(v *Value) bool { // cond: // result: (SRW (ZeroExt8to32 x) (ORN y (MaskIfNotCarry (ADDconstForCarry [-8] y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRW) v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) v0.AddArg(x) @@ -29612,16 +29085,13 @@ func rewriteValuePPC64_OpRsh8Ux64_0(v *Value) bool { } func rewriteValuePPC64_OpRsh8Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux8 x y) // cond: shiftIsBounded(v) // result: (SRW (MOVBZreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -29636,9 +29106,8 @@ func rewriteValuePPC64_OpRsh8Ux8_0(v *Value) bool { // cond: // result: (SRW (ZeroExt8to32 x) (ORN y (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt8to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRW) v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) v0.AddArg(x) @@ -29659,16 +29128,13 @@ func rewriteValuePPC64_OpRsh8Ux8_0(v *Value) bool { } func rewriteValuePPC64_OpRsh8x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x16 x y) // cond: shiftIsBounded(v) // result: (SRAW (MOVBreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -29683,9 +29149,8 @@ func rewriteValuePPC64_OpRsh8x16_0(v *Value) bool { // cond: // result: (SRAW (SignExt8to32 x) (ORN y (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt16to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRAW) v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) v0.AddArg(x) @@ -29706,9 +29171,7 @@ func rewriteValuePPC64_OpRsh8x16_0(v *Value) bool { } func rewriteValuePPC64_OpRsh8x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x32 x (Const64 [c])) // cond: uint32(c) < 8 // result: (SRAWconst (SignExt8to32 x) [c]) @@ -29755,9 +29218,8 @@ func rewriteValuePPC64_OpRsh8x32_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SRAW (MOVBreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -29772,9 +29234,8 @@ func rewriteValuePPC64_OpRsh8x32_0(v *Value) bool { // cond: // result: (SRAW (SignExt8to32 x) (ORN y (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt32to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRAW) v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) v0.AddArg(x) @@ -29795,9 +29256,7 @@ func rewriteValuePPC64_OpRsh8x32_0(v *Value) bool { } func rewriteValuePPC64_OpRsh8x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x64 x (Const64 [c])) // cond: uint64(c) < 8 // result: (SRAWconst (SignExt8to32 x) [c]) @@ -29865,9 +29324,8 @@ func rewriteValuePPC64_OpRsh8x64_0(v *Value) bool { // cond: shiftIsBounded(v) // result: (SRAW (MOVBreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -29882,9 +29340,8 @@ func rewriteValuePPC64_OpRsh8x64_0(v *Value) bool { // cond: // result: (SRAW (SignExt8to32 x) (ORN y (MaskIfNotCarry (ADDconstForCarry [-8] y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRAW) v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) v0.AddArg(x) @@ -29903,16 +29360,13 @@ func rewriteValuePPC64_OpRsh8x64_0(v *Value) bool { } func rewriteValuePPC64_OpRsh8x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x8 x y) // cond: shiftIsBounded(v) // result: (SRAW (MOVBreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -29927,9 +29381,8 @@ func rewriteValuePPC64_OpRsh8x8_0(v *Value) bool { // cond: // result: (SRAW (SignExt8to32 x) (ORN y (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt8to64 y))))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SRAW) v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) v0.AddArg(x) @@ -30016,7 +29469,6 @@ func rewriteValuePPC64_OpSignExt8to64_0(v *Value) bool { } func rewriteValuePPC64_OpSlicemask_0(v *Value) bool { b := v.Block - _ = b // match: (Slicemask x) // cond: // result: (SRADconst (NEG x) [63]) @@ -30063,10 +29515,9 @@ func rewriteValuePPC64_OpStore_0(v *Value) bool { // result: (FMOVDstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 8 && is64BitFloat(val.Type)) { break } @@ -30081,10 +29532,9 @@ func rewriteValuePPC64_OpStore_0(v *Value) bool { // result: (FMOVDstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 8 && is32BitFloat(val.Type)) { break } @@ -30099,10 +29549,9 @@ func rewriteValuePPC64_OpStore_0(v *Value) bool { // result: (FMOVSstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 4 && is32BitFloat(val.Type)) { break } @@ -30117,10 +29566,9 @@ func rewriteValuePPC64_OpStore_0(v *Value) bool { // result: (MOVDstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 8 && (is64BitInt(val.Type) || isPtr(val.Type))) { break } @@ -30135,10 +29583,9 @@ func rewriteValuePPC64_OpStore_0(v *Value) bool { // result: (MOVWstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 4 && is32BitInt(val.Type)) { break } @@ -30153,10 +29600,9 @@ func rewriteValuePPC64_OpStore_0(v *Value) bool { // result: (MOVHstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 2) { break } @@ -30171,10 +29617,9 @@ func rewriteValuePPC64_OpStore_0(v *Value) bool { // result: (MOVBstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 1) { break } @@ -30191,9 +29636,8 @@ func rewriteValuePPC64_OpSub16_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SUB) v.AddArg(x) v.AddArg(y) @@ -30205,9 +29649,8 @@ func rewriteValuePPC64_OpSub32_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SUB) v.AddArg(x) v.AddArg(y) @@ -30219,9 +29662,8 @@ func rewriteValuePPC64_OpSub32F_0(v *Value) bool { // cond: // result: (FSUBS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64FSUBS) v.AddArg(x) v.AddArg(y) @@ -30233,9 +29675,8 @@ func rewriteValuePPC64_OpSub64_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SUB) v.AddArg(x) v.AddArg(y) @@ -30247,9 +29688,8 @@ func rewriteValuePPC64_OpSub64F_0(v *Value) bool { // cond: // result: (FSUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64FSUB) v.AddArg(x) v.AddArg(y) @@ -30261,9 +29701,8 @@ func rewriteValuePPC64_OpSub8_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SUB) v.AddArg(x) v.AddArg(y) @@ -30275,9 +29714,8 @@ func rewriteValuePPC64_OpSubPtr_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64SUB) v.AddArg(x) v.AddArg(y) @@ -30445,10 +29883,9 @@ func rewriteValuePPC64_OpWB_0(v *Value) bool { // result: (LoweredWB {fn} destptr srcptr mem) for { fn := v.Aux - _ = v.Args[2] + mem := v.Args[2] destptr := v.Args[0] srcptr := v.Args[1] - mem := v.Args[2] v.reset(OpPPC64LoweredWB) v.Aux = fn v.AddArg(destptr) @@ -30462,9 +29899,8 @@ func rewriteValuePPC64_OpXor16_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64XOR) v.AddArg(x) v.AddArg(y) @@ -30476,9 +29912,8 @@ func rewriteValuePPC64_OpXor32_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64XOR) v.AddArg(x) v.AddArg(y) @@ -30490,9 +29925,8 @@ func rewriteValuePPC64_OpXor64_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64XOR) v.AddArg(x) v.AddArg(y) @@ -30504,9 +29938,8 @@ func rewriteValuePPC64_OpXor8_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpPPC64XOR) v.AddArg(x) v.AddArg(y) @@ -30515,7 +29948,6 @@ func rewriteValuePPC64_OpXor8_0(v *Value) bool { } func rewriteValuePPC64_OpZero_0(v *Value) bool { b := v.Block - _ = b // match: (Zero [0] _ mem) // cond: // result: mem @@ -30523,7 +29955,6 @@ func rewriteValuePPC64_OpZero_0(v *Value) bool { if v.AuxInt != 0 { break } - _ = v.Args[1] mem := v.Args[1] v.reset(OpCopy) v.Type = mem.Type @@ -30537,9 +29968,8 @@ func rewriteValuePPC64_OpZero_0(v *Value) bool { if v.AuxInt != 1 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpPPC64MOVBstorezero) v.AddArg(destptr) v.AddArg(mem) @@ -30552,9 +29982,8 @@ func rewriteValuePPC64_OpZero_0(v *Value) bool { if v.AuxInt != 2 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpPPC64MOVHstorezero) v.AddArg(destptr) v.AddArg(mem) @@ -30567,9 +29996,8 @@ func rewriteValuePPC64_OpZero_0(v *Value) bool { if v.AuxInt != 3 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpPPC64MOVBstorezero) v.AuxInt = 2 v.AddArg(destptr) @@ -30586,9 +30014,8 @@ func rewriteValuePPC64_OpZero_0(v *Value) bool { if v.AuxInt != 4 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpPPC64MOVWstorezero) v.AddArg(destptr) v.AddArg(mem) @@ -30601,9 +30028,8 @@ func rewriteValuePPC64_OpZero_0(v *Value) bool { if v.AuxInt != 5 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpPPC64MOVBstorezero) v.AuxInt = 4 v.AddArg(destptr) @@ -30620,9 +30046,8 @@ func rewriteValuePPC64_OpZero_0(v *Value) bool { if v.AuxInt != 6 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpPPC64MOVHstorezero) v.AuxInt = 4 v.AddArg(destptr) @@ -30639,9 +30064,8 @@ func rewriteValuePPC64_OpZero_0(v *Value) bool { if v.AuxInt != 7 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpPPC64MOVBstorezero) v.AuxInt = 6 v.AddArg(destptr) @@ -30663,9 +30087,8 @@ func rewriteValuePPC64_OpZero_0(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -30681,9 +30104,8 @@ func rewriteValuePPC64_OpZero_0(v *Value) bool { if v.AuxInt != 8 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpPPC64MOVWstorezero) v.AuxInt = 4 v.AddArg(destptr) @@ -30698,7 +30120,6 @@ func rewriteValuePPC64_OpZero_0(v *Value) bool { } func rewriteValuePPC64_OpZero_10(v *Value) bool { b := v.Block - _ = b // match: (Zero [12] {t} destptr mem) // cond: t.(*types.Type).Alignment()%4 == 0 // result: (MOVWstorezero [8] destptr (MOVDstorezero [0] destptr mem)) @@ -30707,9 +30128,8 @@ func rewriteValuePPC64_OpZero_10(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -30731,9 +30151,8 @@ func rewriteValuePPC64_OpZero_10(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -30755,9 +30174,8 @@ func rewriteValuePPC64_OpZero_10(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -30783,9 +30201,8 @@ func rewriteValuePPC64_OpZero_10(v *Value) bool { break } t := v.Aux - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(t.(*types.Type).Alignment()%4 == 0) { break } @@ -30812,9 +30229,8 @@ func rewriteValuePPC64_OpZero_10(v *Value) bool { // result: (LoweredZero [s] ptr mem) for { s := v.AuxInt - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpPPC64LoweredZero) v.AuxInt = s v.AddArg(ptr) @@ -30890,21 +30306,16 @@ func rewriteValuePPC64_OpZeroExt8to64_0(v *Value) bool { } func rewriteBlockPPC64(b *Block) bool { config := b.Func.Config - _ = config - fe := b.Func.fe - _ = fe typ := &config.Types _ = typ + v := b.Control + _ = v switch b.Kind { case BlockPPC64EQ: // match: (EQ (CMPconst [0] (ANDconst [c] x)) yes no) // cond: // result: (EQ (ANDCCconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -30925,11 +30336,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (EQ (CMPWconst [0] (ANDconst [c] x)) yes no) // cond: // result: (EQ (ANDCCconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPWconst { - break - } + for v.Op == OpPPC64CMPWconst { if v.AuxInt != 0 { break } @@ -30950,11 +30357,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (EQ (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpPPC64FlagEQ { - break - } + for v.Op == OpPPC64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -30963,11 +30366,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (EQ (FlagLT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpPPC64FlagLT { - break - } + for v.Op == OpPPC64FlagLT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -30977,11 +30376,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (EQ (FlagGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpPPC64FlagGT { - break - } + for v.Op == OpPPC64FlagGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -30991,11 +30386,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (EQ (InvertFlags cmp) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != OpPPC64InvertFlags { - break - } + for v.Op == OpPPC64InvertFlags { cmp := v.Args[0] b.Kind = BlockPPC64EQ b.SetControl(cmp) @@ -31005,11 +30396,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (EQ (CMPconst [0] (ANDconst [c] x)) yes no) // cond: // result: (EQ (ANDCCconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -31030,11 +30417,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (EQ (CMPWconst [0] (ANDconst [c] x)) yes no) // cond: // result: (EQ (ANDCCconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPWconst { - break - } + for v.Op == OpPPC64CMPWconst { if v.AuxInt != 0 { break } @@ -31055,11 +30438,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (EQ (CMPconst [0] z:(AND x y)) yes no) // cond: z.Uses == 1 // result: (EQ (ANDCC x y) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -31067,9 +30446,8 @@ func rewriteBlockPPC64(b *Block) bool { if z.Op != OpPPC64AND { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -31084,11 +30462,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (EQ (CMPconst [0] z:(OR x y)) yes no) // cond: z.Uses == 1 // result: (EQ (ORCC x y) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -31096,9 +30470,8 @@ func rewriteBlockPPC64(b *Block) bool { if z.Op != OpPPC64OR { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -31113,11 +30486,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (EQ (CMPconst [0] z:(XOR x y)) yes no) // cond: z.Uses == 1 // result: (EQ (XORCC x y) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -31125,9 +30494,8 @@ func rewriteBlockPPC64(b *Block) bool { if z.Op != OpPPC64XOR { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -31143,11 +30511,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (GE (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpPPC64FlagEQ { - break - } + for v.Op == OpPPC64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -31156,11 +30520,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (GE (FlagLT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpPPC64FlagLT { - break - } + for v.Op == OpPPC64FlagLT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -31170,11 +30530,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (GE (FlagGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpPPC64FlagGT { - break - } + for v.Op == OpPPC64FlagGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -31183,11 +30539,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (GE (InvertFlags cmp) yes no) // cond: // result: (LE cmp yes no) - for { - v := b.Control - if v.Op != OpPPC64InvertFlags { - break - } + for v.Op == OpPPC64InvertFlags { cmp := v.Args[0] b.Kind = BlockPPC64LE b.SetControl(cmp) @@ -31197,11 +30549,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (GE (CMPconst [0] (ANDconst [c] x)) yes no) // cond: // result: (GE (ANDCCconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -31222,11 +30570,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (GE (CMPWconst [0] (ANDconst [c] x)) yes no) // cond: // result: (GE (ANDCCconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPWconst { - break - } + for v.Op == OpPPC64CMPWconst { if v.AuxInt != 0 { break } @@ -31247,11 +30591,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (GE (CMPconst [0] z:(AND x y)) yes no) // cond: z.Uses == 1 // result: (GE (ANDCC x y) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -31259,9 +30599,8 @@ func rewriteBlockPPC64(b *Block) bool { if z.Op != OpPPC64AND { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -31276,11 +30615,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (GE (CMPconst [0] z:(OR x y)) yes no) // cond: z.Uses == 1 // result: (GE (ORCC x y) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -31288,9 +30623,8 @@ func rewriteBlockPPC64(b *Block) bool { if z.Op != OpPPC64OR { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -31305,11 +30639,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (GE (CMPconst [0] z:(XOR x y)) yes no) // cond: z.Uses == 1 // result: (GE (XORCC x y) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -31317,9 +30647,8 @@ func rewriteBlockPPC64(b *Block) bool { if z.Op != OpPPC64XOR { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -31335,11 +30664,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (GT (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpPPC64FlagEQ { - break - } + for v.Op == OpPPC64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -31349,11 +30674,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (GT (FlagLT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpPPC64FlagLT { - break - } + for v.Op == OpPPC64FlagLT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -31363,11 +30684,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (GT (FlagGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpPPC64FlagGT { - break - } + for v.Op == OpPPC64FlagGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -31376,11 +30693,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (GT (InvertFlags cmp) yes no) // cond: // result: (LT cmp yes no) - for { - v := b.Control - if v.Op != OpPPC64InvertFlags { - break - } + for v.Op == OpPPC64InvertFlags { cmp := v.Args[0] b.Kind = BlockPPC64LT b.SetControl(cmp) @@ -31390,11 +30703,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (GT (CMPconst [0] (ANDconst [c] x)) yes no) // cond: // result: (GT (ANDCCconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -31415,11 +30724,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (GT (CMPWconst [0] (ANDconst [c] x)) yes no) // cond: // result: (GT (ANDCCconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPWconst { - break - } + for v.Op == OpPPC64CMPWconst { if v.AuxInt != 0 { break } @@ -31440,11 +30745,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (GT (CMPconst [0] z:(AND x y)) yes no) // cond: z.Uses == 1 // result: (GT (ANDCC x y) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -31452,9 +30753,8 @@ func rewriteBlockPPC64(b *Block) bool { if z.Op != OpPPC64AND { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -31469,11 +30769,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (GT (CMPconst [0] z:(OR x y)) yes no) // cond: z.Uses == 1 // result: (GT (ORCC x y) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -31481,9 +30777,8 @@ func rewriteBlockPPC64(b *Block) bool { if z.Op != OpPPC64OR { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -31498,11 +30793,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (GT (CMPconst [0] z:(XOR x y)) yes no) // cond: z.Uses == 1 // result: (GT (XORCC x y) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -31510,9 +30801,8 @@ func rewriteBlockPPC64(b *Block) bool { if z.Op != OpPPC64XOR { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -31528,11 +30818,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (If (Equal cc) yes no) // cond: // result: (EQ cc yes no) - for { - v := b.Control - if v.Op != OpPPC64Equal { - break - } + for v.Op == OpPPC64Equal { cc := v.Args[0] b.Kind = BlockPPC64EQ b.SetControl(cc) @@ -31542,11 +30828,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (If (NotEqual cc) yes no) // cond: // result: (NE cc yes no) - for { - v := b.Control - if v.Op != OpPPC64NotEqual { - break - } + for v.Op == OpPPC64NotEqual { cc := v.Args[0] b.Kind = BlockPPC64NE b.SetControl(cc) @@ -31556,11 +30838,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (If (LessThan cc) yes no) // cond: // result: (LT cc yes no) - for { - v := b.Control - if v.Op != OpPPC64LessThan { - break - } + for v.Op == OpPPC64LessThan { cc := v.Args[0] b.Kind = BlockPPC64LT b.SetControl(cc) @@ -31570,11 +30848,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (If (LessEqual cc) yes no) // cond: // result: (LE cc yes no) - for { - v := b.Control - if v.Op != OpPPC64LessEqual { - break - } + for v.Op == OpPPC64LessEqual { cc := v.Args[0] b.Kind = BlockPPC64LE b.SetControl(cc) @@ -31584,11 +30858,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (If (GreaterThan cc) yes no) // cond: // result: (GT cc yes no) - for { - v := b.Control - if v.Op != OpPPC64GreaterThan { - break - } + for v.Op == OpPPC64GreaterThan { cc := v.Args[0] b.Kind = BlockPPC64GT b.SetControl(cc) @@ -31598,11 +30868,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (If (GreaterEqual cc) yes no) // cond: // result: (GE cc yes no) - for { - v := b.Control - if v.Op != OpPPC64GreaterEqual { - break - } + for v.Op == OpPPC64GreaterEqual { cc := v.Args[0] b.Kind = BlockPPC64GE b.SetControl(cc) @@ -31612,11 +30878,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (If (FLessThan cc) yes no) // cond: // result: (FLT cc yes no) - for { - v := b.Control - if v.Op != OpPPC64FLessThan { - break - } + for v.Op == OpPPC64FLessThan { cc := v.Args[0] b.Kind = BlockPPC64FLT b.SetControl(cc) @@ -31626,11 +30888,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (If (FLessEqual cc) yes no) // cond: // result: (FLE cc yes no) - for { - v := b.Control - if v.Op != OpPPC64FLessEqual { - break - } + for v.Op == OpPPC64FLessEqual { cc := v.Args[0] b.Kind = BlockPPC64FLE b.SetControl(cc) @@ -31640,11 +30898,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (If (FGreaterThan cc) yes no) // cond: // result: (FGT cc yes no) - for { - v := b.Control - if v.Op != OpPPC64FGreaterThan { - break - } + for v.Op == OpPPC64FGreaterThan { cc := v.Args[0] b.Kind = BlockPPC64FGT b.SetControl(cc) @@ -31654,11 +30908,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (If (FGreaterEqual cc) yes no) // cond: // result: (FGE cc yes no) - for { - v := b.Control - if v.Op != OpPPC64FGreaterEqual { - break - } + for v.Op == OpPPC64FGreaterEqual { cc := v.Args[0] b.Kind = BlockPPC64FGE b.SetControl(cc) @@ -31669,8 +30919,6 @@ func rewriteBlockPPC64(b *Block) bool { // cond: // result: (NE (CMPWconst [0] cond) yes no) for { - v := b.Control - _ = v cond := b.Control b.Kind = BlockPPC64NE v0 := b.NewValue0(v.Pos, OpPPC64CMPWconst, types.TypeFlags) @@ -31684,11 +30932,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (LE (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpPPC64FlagEQ { - break - } + for v.Op == OpPPC64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -31697,11 +30941,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (LE (FlagLT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpPPC64FlagLT { - break - } + for v.Op == OpPPC64FlagLT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -31710,11 +30950,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (LE (FlagGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpPPC64FlagGT { - break - } + for v.Op == OpPPC64FlagGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -31724,11 +30960,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (LE (InvertFlags cmp) yes no) // cond: // result: (GE cmp yes no) - for { - v := b.Control - if v.Op != OpPPC64InvertFlags { - break - } + for v.Op == OpPPC64InvertFlags { cmp := v.Args[0] b.Kind = BlockPPC64GE b.SetControl(cmp) @@ -31738,11 +30970,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (LE (CMPconst [0] (ANDconst [c] x)) yes no) // cond: // result: (LE (ANDCCconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -31763,11 +30991,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (LE (CMPWconst [0] (ANDconst [c] x)) yes no) // cond: // result: (LE (ANDCCconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPWconst { - break - } + for v.Op == OpPPC64CMPWconst { if v.AuxInt != 0 { break } @@ -31788,11 +31012,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (LE (CMPconst [0] z:(AND x y)) yes no) // cond: z.Uses == 1 // result: (LE (ANDCC x y) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -31800,9 +31020,8 @@ func rewriteBlockPPC64(b *Block) bool { if z.Op != OpPPC64AND { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -31817,11 +31036,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (LE (CMPconst [0] z:(OR x y)) yes no) // cond: z.Uses == 1 // result: (LE (ORCC x y) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -31829,9 +31044,8 @@ func rewriteBlockPPC64(b *Block) bool { if z.Op != OpPPC64OR { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -31846,11 +31060,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (LE (CMPconst [0] z:(XOR x y)) yes no) // cond: z.Uses == 1 // result: (LE (XORCC x y) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -31858,9 +31068,8 @@ func rewriteBlockPPC64(b *Block) bool { if z.Op != OpPPC64XOR { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -31876,11 +31085,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (LT (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpPPC64FlagEQ { - break - } + for v.Op == OpPPC64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -31890,11 +31095,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (LT (FlagLT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpPPC64FlagLT { - break - } + for v.Op == OpPPC64FlagLT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -31903,11 +31104,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (LT (FlagGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpPPC64FlagGT { - break - } + for v.Op == OpPPC64FlagGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -31917,11 +31114,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (LT (InvertFlags cmp) yes no) // cond: // result: (GT cmp yes no) - for { - v := b.Control - if v.Op != OpPPC64InvertFlags { - break - } + for v.Op == OpPPC64InvertFlags { cmp := v.Args[0] b.Kind = BlockPPC64GT b.SetControl(cmp) @@ -31931,11 +31124,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (LT (CMPconst [0] (ANDconst [c] x)) yes no) // cond: // result: (LT (ANDCCconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -31956,11 +31145,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (LT (CMPWconst [0] (ANDconst [c] x)) yes no) // cond: // result: (LT (ANDCCconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPWconst { - break - } + for v.Op == OpPPC64CMPWconst { if v.AuxInt != 0 { break } @@ -31981,11 +31166,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (LT (CMPconst [0] z:(AND x y)) yes no) // cond: z.Uses == 1 // result: (LT (ANDCC x y) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -31993,9 +31174,8 @@ func rewriteBlockPPC64(b *Block) bool { if z.Op != OpPPC64AND { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -32010,11 +31190,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (LT (CMPconst [0] z:(OR x y)) yes no) // cond: z.Uses == 1 // result: (LT (ORCC x y) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -32022,9 +31198,8 @@ func rewriteBlockPPC64(b *Block) bool { if z.Op != OpPPC64OR { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -32039,11 +31214,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (LT (CMPconst [0] z:(XOR x y)) yes no) // cond: z.Uses == 1 // result: (LT (XORCC x y) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -32051,9 +31222,8 @@ func rewriteBlockPPC64(b *Block) bool { if z.Op != OpPPC64XOR { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -32069,11 +31239,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (NE (CMPWconst [0] (Equal cc)) yes no) // cond: // result: (EQ cc yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPWconst { - break - } + for v.Op == OpPPC64CMPWconst { if v.AuxInt != 0 { break } @@ -32090,11 +31256,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (NE (CMPWconst [0] (NotEqual cc)) yes no) // cond: // result: (NE cc yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPWconst { - break - } + for v.Op == OpPPC64CMPWconst { if v.AuxInt != 0 { break } @@ -32111,11 +31273,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (NE (CMPWconst [0] (LessThan cc)) yes no) // cond: // result: (LT cc yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPWconst { - break - } + for v.Op == OpPPC64CMPWconst { if v.AuxInt != 0 { break } @@ -32132,11 +31290,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (NE (CMPWconst [0] (LessEqual cc)) yes no) // cond: // result: (LE cc yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPWconst { - break - } + for v.Op == OpPPC64CMPWconst { if v.AuxInt != 0 { break } @@ -32153,11 +31307,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (NE (CMPWconst [0] (GreaterThan cc)) yes no) // cond: // result: (GT cc yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPWconst { - break - } + for v.Op == OpPPC64CMPWconst { if v.AuxInt != 0 { break } @@ -32174,11 +31324,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (NE (CMPWconst [0] (GreaterEqual cc)) yes no) // cond: // result: (GE cc yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPWconst { - break - } + for v.Op == OpPPC64CMPWconst { if v.AuxInt != 0 { break } @@ -32195,11 +31341,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (NE (CMPWconst [0] (FLessThan cc)) yes no) // cond: // result: (FLT cc yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPWconst { - break - } + for v.Op == OpPPC64CMPWconst { if v.AuxInt != 0 { break } @@ -32216,11 +31358,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (NE (CMPWconst [0] (FLessEqual cc)) yes no) // cond: // result: (FLE cc yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPWconst { - break - } + for v.Op == OpPPC64CMPWconst { if v.AuxInt != 0 { break } @@ -32237,11 +31375,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (NE (CMPWconst [0] (FGreaterThan cc)) yes no) // cond: // result: (FGT cc yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPWconst { - break - } + for v.Op == OpPPC64CMPWconst { if v.AuxInt != 0 { break } @@ -32258,11 +31392,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (NE (CMPWconst [0] (FGreaterEqual cc)) yes no) // cond: // result: (FGE cc yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPWconst { - break - } + for v.Op == OpPPC64CMPWconst { if v.AuxInt != 0 { break } @@ -32279,11 +31409,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (NE (CMPconst [0] (ANDconst [c] x)) yes no) // cond: // result: (NE (ANDCCconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -32304,11 +31430,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (NE (CMPWconst [0] (ANDconst [c] x)) yes no) // cond: // result: (NE (ANDCCconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPWconst { - break - } + for v.Op == OpPPC64CMPWconst { if v.AuxInt != 0 { break } @@ -32329,11 +31451,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (NE (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpPPC64FlagEQ { - break - } + for v.Op == OpPPC64FlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -32343,11 +31461,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (NE (FlagLT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpPPC64FlagLT { - break - } + for v.Op == OpPPC64FlagLT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -32356,11 +31470,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (NE (FlagGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpPPC64FlagGT { - break - } + for v.Op == OpPPC64FlagGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -32369,11 +31479,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (NE (InvertFlags cmp) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != OpPPC64InvertFlags { - break - } + for v.Op == OpPPC64InvertFlags { cmp := v.Args[0] b.Kind = BlockPPC64NE b.SetControl(cmp) @@ -32383,11 +31489,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (NE (CMPconst [0] (ANDconst [c] x)) yes no) // cond: // result: (NE (ANDCCconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -32408,11 +31510,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (NE (CMPWconst [0] (ANDconst [c] x)) yes no) // cond: // result: (NE (ANDCCconst [c] x) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPWconst { - break - } + for v.Op == OpPPC64CMPWconst { if v.AuxInt != 0 { break } @@ -32433,11 +31531,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (NE (CMPconst [0] z:(AND x y)) yes no) // cond: z.Uses == 1 // result: (NE (ANDCC x y) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -32445,9 +31539,8 @@ func rewriteBlockPPC64(b *Block) bool { if z.Op != OpPPC64AND { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -32462,11 +31555,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (NE (CMPconst [0] z:(OR x y)) yes no) // cond: z.Uses == 1 // result: (NE (ORCC x y) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -32474,9 +31563,8 @@ func rewriteBlockPPC64(b *Block) bool { if z.Op != OpPPC64OR { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } @@ -32491,11 +31579,7 @@ func rewriteBlockPPC64(b *Block) bool { // match: (NE (CMPconst [0] z:(XOR x y)) yes no) // cond: z.Uses == 1 // result: (NE (XORCC x y) yes no) - for { - v := b.Control - if v.Op != OpPPC64CMPconst { - break - } + for v.Op == OpPPC64CMPconst { if v.AuxInt != 0 { break } @@ -32503,9 +31587,8 @@ func rewriteBlockPPC64(b *Block) bool { if z.Op != OpPPC64XOR { break } - _ = z.Args[1] - x := z.Args[0] y := z.Args[1] + x := z.Args[0] if !(z.Uses == 1) { break } diff --git a/src/cmd/compile/internal/ssa/rewriteS390X.go b/src/cmd/compile/internal/ssa/rewriteS390X.go index ce501a74ef..c5b7e564bb 100644 --- a/src/cmd/compile/internal/ssa/rewriteS390X.go +++ b/src/cmd/compile/internal/ssa/rewriteS390X.go @@ -59,6 +59,8 @@ func rewriteValueS390X(v *Value) bool { return rewriteValueS390X_OpAtomicLoad32_0(v) case OpAtomicLoad64: return rewriteValueS390X_OpAtomicLoad64_0(v) + case OpAtomicLoad8: + return rewriteValueS390X_OpAtomicLoad8_0(v) case OpAtomicLoadPtr: return rewriteValueS390X_OpAtomicLoadPtr_0(v) case OpAtomicStore32: @@ -385,6 +387,8 @@ func rewriteValueS390X(v *Value) bool { return rewriteValueS390X_OpOr8_0(v) case OpOrB: return rewriteValueS390X_OpOrB_0(v) + case OpPanicBounds: + return rewriteValueS390X_OpPanicBounds_0(v) case OpPopCount16: return rewriteValueS390X_OpPopCount16_0(v) case OpPopCount32: @@ -393,10 +397,14 @@ func rewriteValueS390X(v *Value) bool { return rewriteValueS390X_OpPopCount64_0(v) case OpPopCount8: return rewriteValueS390X_OpPopCount8_0(v) + case OpRotateLeft16: + return rewriteValueS390X_OpRotateLeft16_0(v) case OpRotateLeft32: return rewriteValueS390X_OpRotateLeft32_0(v) case OpRotateLeft64: return rewriteValueS390X_OpRotateLeft64_0(v) + case OpRotateLeft8: + return rewriteValueS390X_OpRotateLeft8_0(v) case OpRound: return rewriteValueS390X_OpRound_0(v) case OpRound32F: @@ -471,6 +479,10 @@ func rewriteValueS390X(v *Value) bool { return rewriteValueS390X_OpRsh8x8_0(v) case OpS390XADD: return rewriteValueS390X_OpS390XADD_0(v) || rewriteValueS390X_OpS390XADD_10(v) + case OpS390XADDC: + return rewriteValueS390X_OpS390XADDC_0(v) + case OpS390XADDE: + return rewriteValueS390X_OpS390XADDE_0(v) case OpS390XADDW: return rewriteValueS390X_OpS390XADDW_0(v) || rewriteValueS390X_OpS390XADDW_10(v) case OpS390XADDWconst: @@ -699,6 +711,8 @@ func rewriteValueS390X(v *Value) bool { return rewriteValueS390X_OpS390XSTMG2_0(v) case OpS390XSUB: return rewriteValueS390X_OpS390XSUB_0(v) + case OpS390XSUBE: + return rewriteValueS390X_OpS390XSUBE_0(v) case OpS390XSUBW: return rewriteValueS390X_OpS390XSUBW_0(v) case OpS390XSUBWconst: @@ -811,9 +825,8 @@ func rewriteValueS390X_OpAdd16_0(v *Value) bool { // cond: // result: (ADDW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XADDW) v.AddArg(x) v.AddArg(y) @@ -825,9 +838,8 @@ func rewriteValueS390X_OpAdd32_0(v *Value) bool { // cond: // result: (ADDW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XADDW) v.AddArg(x) v.AddArg(y) @@ -839,9 +851,8 @@ func rewriteValueS390X_OpAdd32F_0(v *Value) bool { // cond: // result: (FADDS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XFADDS) v.AddArg(x) v.AddArg(y) @@ -853,9 +864,8 @@ func rewriteValueS390X_OpAdd64_0(v *Value) bool { // cond: // result: (ADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XADD) v.AddArg(x) v.AddArg(y) @@ -867,9 +877,8 @@ func rewriteValueS390X_OpAdd64F_0(v *Value) bool { // cond: // result: (FADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XFADD) v.AddArg(x) v.AddArg(y) @@ -881,9 +890,8 @@ func rewriteValueS390X_OpAdd8_0(v *Value) bool { // cond: // result: (ADDW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XADDW) v.AddArg(x) v.AddArg(y) @@ -895,9 +903,8 @@ func rewriteValueS390X_OpAddPtr_0(v *Value) bool { // cond: // result: (ADD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XADD) v.AddArg(x) v.AddArg(y) @@ -922,9 +929,8 @@ func rewriteValueS390X_OpAnd16_0(v *Value) bool { // cond: // result: (ANDW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XANDW) v.AddArg(x) v.AddArg(y) @@ -936,9 +942,8 @@ func rewriteValueS390X_OpAnd32_0(v *Value) bool { // cond: // result: (ANDW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XANDW) v.AddArg(x) v.AddArg(y) @@ -950,9 +955,8 @@ func rewriteValueS390X_OpAnd64_0(v *Value) bool { // cond: // result: (AND x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XAND) v.AddArg(x) v.AddArg(y) @@ -964,9 +968,8 @@ func rewriteValueS390X_OpAnd8_0(v *Value) bool { // cond: // result: (ANDW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XANDW) v.AddArg(x) v.AddArg(y) @@ -978,9 +981,8 @@ func rewriteValueS390X_OpAndB_0(v *Value) bool { // cond: // result: (ANDW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XANDW) v.AddArg(x) v.AddArg(y) @@ -989,17 +991,14 @@ func rewriteValueS390X_OpAndB_0(v *Value) bool { } func rewriteValueS390X_OpAtomicAdd32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (AtomicAdd32 ptr val mem) // cond: // result: (AddTupleFirst32 val (LAA ptr val mem)) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpS390XAddTupleFirst32) v.AddArg(val) v0 := b.NewValue0(v.Pos, OpS390XLAA, types.NewTuple(typ.UInt32, types.TypeMem)) @@ -1012,17 +1011,14 @@ func rewriteValueS390X_OpAtomicAdd32_0(v *Value) bool { } func rewriteValueS390X_OpAtomicAdd64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (AtomicAdd64 ptr val mem) // cond: // result: (AddTupleFirst64 val (LAAG ptr val mem)) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpS390XAddTupleFirst64) v.AddArg(val) v0 := b.NewValue0(v.Pos, OpS390XLAAG, types.NewTuple(typ.UInt64, types.TypeMem)) @@ -1038,11 +1034,10 @@ func rewriteValueS390X_OpAtomicCompareAndSwap32_0(v *Value) bool { // cond: // result: (LoweredAtomicCas32 ptr old new_ mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] old := v.Args[1] new_ := v.Args[2] - mem := v.Args[3] v.reset(OpS390XLoweredAtomicCas32) v.AddArg(ptr) v.AddArg(old) @@ -1056,11 +1051,10 @@ func rewriteValueS390X_OpAtomicCompareAndSwap64_0(v *Value) bool { // cond: // result: (LoweredAtomicCas64 ptr old new_ mem) for { - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] old := v.Args[1] new_ := v.Args[2] - mem := v.Args[3] v.reset(OpS390XLoweredAtomicCas64) v.AddArg(ptr) v.AddArg(old) @@ -1074,10 +1068,9 @@ func rewriteValueS390X_OpAtomicExchange32_0(v *Value) bool { // cond: // result: (LoweredAtomicExchange32 ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpS390XLoweredAtomicExchange32) v.AddArg(ptr) v.AddArg(val) @@ -1090,10 +1083,9 @@ func rewriteValueS390X_OpAtomicExchange64_0(v *Value) bool { // cond: // result: (LoweredAtomicExchange64 ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpS390XLoweredAtomicExchange64) v.AddArg(ptr) v.AddArg(val) @@ -1106,9 +1098,8 @@ func rewriteValueS390X_OpAtomicLoad32_0(v *Value) bool { // cond: // result: (MOVWZatomicload ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpS390XMOVWZatomicload) v.AddArg(ptr) v.AddArg(mem) @@ -1120,23 +1111,34 @@ func rewriteValueS390X_OpAtomicLoad64_0(v *Value) bool { // cond: // result: (MOVDatomicload ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpS390XMOVDatomicload) v.AddArg(ptr) v.AddArg(mem) return true } } +func rewriteValueS390X_OpAtomicLoad8_0(v *Value) bool { + // match: (AtomicLoad8 ptr mem) + // cond: + // result: (MOVBZatomicload ptr mem) + for { + mem := v.Args[1] + ptr := v.Args[0] + v.reset(OpS390XMOVBZatomicload) + v.AddArg(ptr) + v.AddArg(mem) + return true + } +} func rewriteValueS390X_OpAtomicLoadPtr_0(v *Value) bool { // match: (AtomicLoadPtr ptr mem) // cond: // result: (MOVDatomicload ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpS390XMOVDatomicload) v.AddArg(ptr) v.AddArg(mem) @@ -1148,10 +1150,9 @@ func rewriteValueS390X_OpAtomicStore32_0(v *Value) bool { // cond: // result: (MOVWatomicstore ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpS390XMOVWatomicstore) v.AddArg(ptr) v.AddArg(val) @@ -1164,10 +1165,9 @@ func rewriteValueS390X_OpAtomicStore64_0(v *Value) bool { // cond: // result: (MOVDatomicstore ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpS390XMOVDatomicstore) v.AddArg(ptr) v.AddArg(val) @@ -1180,10 +1180,9 @@ func rewriteValueS390X_OpAtomicStorePtrNoWB_0(v *Value) bool { // cond: // result: (MOVDatomicstore ptr val mem) for { - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] v.reset(OpS390XMOVDatomicstore) v.AddArg(ptr) v.AddArg(val) @@ -1193,15 +1192,13 @@ func rewriteValueS390X_OpAtomicStorePtrNoWB_0(v *Value) bool { } func rewriteValueS390X_OpAvg64u_0(v *Value) bool { b := v.Block - _ = b // match: (Avg64u x y) // cond: // result: (ADD (SRDconst (SUB x y) [1]) y) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XADD) v0 := b.NewValue0(v.Pos, OpS390XSRDconst, t) v0.AuxInt = 1 @@ -1216,9 +1213,7 @@ func rewriteValueS390X_OpAvg64u_0(v *Value) bool { } func rewriteValueS390X_OpBitLen64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (BitLen64 x) // cond: // result: (SUB (MOVDconst [64]) (FLOGR x)) @@ -1274,10 +1269,9 @@ func rewriteValueS390X_OpClosureCall_0(v *Value) bool { // result: (CALLclosure [argwid] entry closure mem) for { argwid := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] entry := v.Args[0] closure := v.Args[1] - mem := v.Args[2] v.reset(OpS390XCALLclosure) v.AuxInt = argwid v.AddArg(entry) @@ -1419,9 +1413,7 @@ func rewriteValueS390X_OpConstNil_0(v *Value) bool { } func rewriteValueS390X_OpCtz32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Ctz32 x) // cond: // result: (SUB (MOVDconst [64]) (FLOGR (MOVWZreg (ANDW (SUBWconst [1] x) (NOTW x))))) @@ -1461,9 +1453,7 @@ func rewriteValueS390X_OpCtz32NonZero_0(v *Value) bool { } func rewriteValueS390X_OpCtz64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Ctz64 x) // cond: // result: (SUB (MOVDconst [64]) (FLOGR (AND (SUBconst [1] x) (NOT x)))) @@ -1611,16 +1601,13 @@ func rewriteValueS390X_OpCvt64to64F_0(v *Value) bool { } func rewriteValueS390X_OpDiv16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div16 x y) // cond: // result: (DIVW (MOVHreg x) (MOVHreg y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XDIVW) v0 := b.NewValue0(v.Pos, OpS390XMOVHreg, typ.Int64) v0.AddArg(x) @@ -1633,16 +1620,13 @@ func rewriteValueS390X_OpDiv16_0(v *Value) bool { } func rewriteValueS390X_OpDiv16u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div16u x y) // cond: // result: (DIVWU (MOVHZreg x) (MOVHZreg y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XDIVWU) v0 := b.NewValue0(v.Pos, OpS390XMOVHZreg, typ.UInt64) v0.AddArg(x) @@ -1655,16 +1639,13 @@ func rewriteValueS390X_OpDiv16u_0(v *Value) bool { } func rewriteValueS390X_OpDiv32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div32 x y) // cond: // result: (DIVW (MOVWreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XDIVW) v0 := b.NewValue0(v.Pos, OpS390XMOVWreg, typ.Int64) v0.AddArg(x) @@ -1678,9 +1659,8 @@ func rewriteValueS390X_OpDiv32F_0(v *Value) bool { // cond: // result: (FDIVS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XFDIVS) v.AddArg(x) v.AddArg(y) @@ -1689,16 +1669,13 @@ func rewriteValueS390X_OpDiv32F_0(v *Value) bool { } func rewriteValueS390X_OpDiv32u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div32u x y) // cond: // result: (DIVWU (MOVWZreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XDIVWU) v0 := b.NewValue0(v.Pos, OpS390XMOVWZreg, typ.UInt64) v0.AddArg(x) @@ -1712,9 +1689,8 @@ func rewriteValueS390X_OpDiv64_0(v *Value) bool { // cond: // result: (DIVD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XDIVD) v.AddArg(x) v.AddArg(y) @@ -1726,9 +1702,8 @@ func rewriteValueS390X_OpDiv64F_0(v *Value) bool { // cond: // result: (FDIV x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XFDIV) v.AddArg(x) v.AddArg(y) @@ -1740,9 +1715,8 @@ func rewriteValueS390X_OpDiv64u_0(v *Value) bool { // cond: // result: (DIVDU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XDIVDU) v.AddArg(x) v.AddArg(y) @@ -1751,16 +1725,13 @@ func rewriteValueS390X_OpDiv64u_0(v *Value) bool { } func rewriteValueS390X_OpDiv8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div8 x y) // cond: // result: (DIVW (MOVBreg x) (MOVBreg y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XDIVW) v0 := b.NewValue0(v.Pos, OpS390XMOVBreg, typ.Int64) v0.AddArg(x) @@ -1773,16 +1744,13 @@ func rewriteValueS390X_OpDiv8_0(v *Value) bool { } func rewriteValueS390X_OpDiv8u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div8u x y) // cond: // result: (DIVWU (MOVBZreg x) (MOVBZreg y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XDIVWU) v0 := b.NewValue0(v.Pos, OpS390XMOVBZreg, typ.UInt64) v0.AddArg(x) @@ -1795,16 +1763,13 @@ func rewriteValueS390X_OpDiv8u_0(v *Value) bool { } func rewriteValueS390X_OpEq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq16 x y) // cond: // result: (MOVDEQ (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOVHreg x) (MOVHreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDEQ) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -1825,16 +1790,13 @@ func rewriteValueS390X_OpEq16_0(v *Value) bool { } func rewriteValueS390X_OpEq32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq32 x y) // cond: // result: (MOVDEQ (MOVDconst [0]) (MOVDconst [1]) (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDEQ) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -1851,16 +1813,13 @@ func rewriteValueS390X_OpEq32_0(v *Value) bool { } func rewriteValueS390X_OpEq32F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq32F x y) // cond: // result: (MOVDEQ (MOVDconst [0]) (MOVDconst [1]) (FCMPS x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDEQ) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -1877,16 +1836,13 @@ func rewriteValueS390X_OpEq32F_0(v *Value) bool { } func rewriteValueS390X_OpEq64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq64 x y) // cond: // result: (MOVDEQ (MOVDconst [0]) (MOVDconst [1]) (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDEQ) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -1903,16 +1859,13 @@ func rewriteValueS390X_OpEq64_0(v *Value) bool { } func rewriteValueS390X_OpEq64F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq64F x y) // cond: // result: (MOVDEQ (MOVDconst [0]) (MOVDconst [1]) (FCMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDEQ) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -1929,16 +1882,13 @@ func rewriteValueS390X_OpEq64F_0(v *Value) bool { } func rewriteValueS390X_OpEq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq8 x y) // cond: // result: (MOVDEQ (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOVBreg x) (MOVBreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDEQ) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -1959,16 +1909,13 @@ func rewriteValueS390X_OpEq8_0(v *Value) bool { } func rewriteValueS390X_OpEqB_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (EqB x y) // cond: // result: (MOVDEQ (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOVBreg x) (MOVBreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDEQ) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -1989,16 +1936,13 @@ func rewriteValueS390X_OpEqB_0(v *Value) bool { } func rewriteValueS390X_OpEqPtr_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (EqPtr x y) // cond: // result: (MOVDEQ (MOVDconst [0]) (MOVDconst [1]) (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDEQ) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2027,16 +1971,13 @@ func rewriteValueS390X_OpFloor_0(v *Value) bool { } func rewriteValueS390X_OpGeq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq16 x y) // cond: // result: (MOVDGE (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOVHreg x) (MOVHreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2057,16 +1998,13 @@ func rewriteValueS390X_OpGeq16_0(v *Value) bool { } func rewriteValueS390X_OpGeq16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq16U x y) // cond: // result: (MOVDGE (MOVDconst [0]) (MOVDconst [1]) (CMPWU (MOVHZreg x) (MOVHZreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2087,16 +2025,13 @@ func rewriteValueS390X_OpGeq16U_0(v *Value) bool { } func rewriteValueS390X_OpGeq32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq32 x y) // cond: // result: (MOVDGE (MOVDconst [0]) (MOVDconst [1]) (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2113,16 +2048,13 @@ func rewriteValueS390X_OpGeq32_0(v *Value) bool { } func rewriteValueS390X_OpGeq32F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq32F x y) // cond: // result: (MOVDGEnoinv (MOVDconst [0]) (MOVDconst [1]) (FCMPS x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGEnoinv) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2139,16 +2071,13 @@ func rewriteValueS390X_OpGeq32F_0(v *Value) bool { } func rewriteValueS390X_OpGeq32U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq32U x y) // cond: // result: (MOVDGE (MOVDconst [0]) (MOVDconst [1]) (CMPWU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2165,16 +2094,13 @@ func rewriteValueS390X_OpGeq32U_0(v *Value) bool { } func rewriteValueS390X_OpGeq64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq64 x y) // cond: // result: (MOVDGE (MOVDconst [0]) (MOVDconst [1]) (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2191,16 +2117,13 @@ func rewriteValueS390X_OpGeq64_0(v *Value) bool { } func rewriteValueS390X_OpGeq64F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq64F x y) // cond: // result: (MOVDGEnoinv (MOVDconst [0]) (MOVDconst [1]) (FCMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGEnoinv) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2217,16 +2140,13 @@ func rewriteValueS390X_OpGeq64F_0(v *Value) bool { } func rewriteValueS390X_OpGeq64U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq64U x y) // cond: // result: (MOVDGE (MOVDconst [0]) (MOVDconst [1]) (CMPU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2243,16 +2163,13 @@ func rewriteValueS390X_OpGeq64U_0(v *Value) bool { } func rewriteValueS390X_OpGeq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq8 x y) // cond: // result: (MOVDGE (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOVBreg x) (MOVBreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2273,16 +2190,13 @@ func rewriteValueS390X_OpGeq8_0(v *Value) bool { } func rewriteValueS390X_OpGeq8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq8U x y) // cond: // result: (MOVDGE (MOVDconst [0]) (MOVDconst [1]) (CMPWU (MOVBZreg x) (MOVBZreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2341,16 +2255,13 @@ func rewriteValueS390X_OpGetG_0(v *Value) bool { } func rewriteValueS390X_OpGreater16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater16 x y) // cond: // result: (MOVDGT (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOVHreg x) (MOVHreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGT) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2371,16 +2282,13 @@ func rewriteValueS390X_OpGreater16_0(v *Value) bool { } func rewriteValueS390X_OpGreater16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater16U x y) // cond: // result: (MOVDGT (MOVDconst [0]) (MOVDconst [1]) (CMPWU (MOVHZreg x) (MOVHZreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGT) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2401,16 +2309,13 @@ func rewriteValueS390X_OpGreater16U_0(v *Value) bool { } func rewriteValueS390X_OpGreater32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater32 x y) // cond: // result: (MOVDGT (MOVDconst [0]) (MOVDconst [1]) (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGT) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2427,16 +2332,13 @@ func rewriteValueS390X_OpGreater32_0(v *Value) bool { } func rewriteValueS390X_OpGreater32F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater32F x y) // cond: // result: (MOVDGTnoinv (MOVDconst [0]) (MOVDconst [1]) (FCMPS x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGTnoinv) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2453,16 +2355,13 @@ func rewriteValueS390X_OpGreater32F_0(v *Value) bool { } func rewriteValueS390X_OpGreater32U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater32U x y) // cond: // result: (MOVDGT (MOVDconst [0]) (MOVDconst [1]) (CMPWU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGT) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2479,16 +2378,13 @@ func rewriteValueS390X_OpGreater32U_0(v *Value) bool { } func rewriteValueS390X_OpGreater64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater64 x y) // cond: // result: (MOVDGT (MOVDconst [0]) (MOVDconst [1]) (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGT) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2505,16 +2401,13 @@ func rewriteValueS390X_OpGreater64_0(v *Value) bool { } func rewriteValueS390X_OpGreater64F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater64F x y) // cond: // result: (MOVDGTnoinv (MOVDconst [0]) (MOVDconst [1]) (FCMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGTnoinv) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2531,16 +2424,13 @@ func rewriteValueS390X_OpGreater64F_0(v *Value) bool { } func rewriteValueS390X_OpGreater64U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater64U x y) // cond: // result: (MOVDGT (MOVDconst [0]) (MOVDconst [1]) (CMPU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGT) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2557,16 +2447,13 @@ func rewriteValueS390X_OpGreater64U_0(v *Value) bool { } func rewriteValueS390X_OpGreater8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater8 x y) // cond: // result: (MOVDGT (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOVBreg x) (MOVBreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGT) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2587,16 +2474,13 @@ func rewriteValueS390X_OpGreater8_0(v *Value) bool { } func rewriteValueS390X_OpGreater8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater8U x y) // cond: // result: (MOVDGT (MOVDconst [0]) (MOVDconst [1]) (CMPWU (MOVBZreg x) (MOVBZreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGT) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2617,16 +2501,13 @@ func rewriteValueS390X_OpGreater8U_0(v *Value) bool { } func rewriteValueS390X_OpHmul32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Hmul32 x y) // cond: // result: (SRDconst [32] (MULLD (MOVWreg x) (MOVWreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSRDconst) v.AuxInt = 32 v0 := b.NewValue0(v.Pos, OpS390XMULLD, typ.Int64) @@ -2642,16 +2523,13 @@ func rewriteValueS390X_OpHmul32_0(v *Value) bool { } func rewriteValueS390X_OpHmul32u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Hmul32u x y) // cond: // result: (SRDconst [32] (MULLD (MOVWZreg x) (MOVWZreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSRDconst) v.AuxInt = 32 v0 := b.NewValue0(v.Pos, OpS390XMULLD, typ.Int64) @@ -2670,9 +2548,8 @@ func rewriteValueS390X_OpHmul64_0(v *Value) bool { // cond: // result: (MULHD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMULHD) v.AddArg(x) v.AddArg(y) @@ -2684,9 +2561,8 @@ func rewriteValueS390X_OpHmul64u_0(v *Value) bool { // cond: // result: (MULHDU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMULHDU) v.AddArg(x) v.AddArg(y) @@ -2702,9 +2578,8 @@ func rewriteValueS390X_OpITab_0(v *Value) bool { if v_0.Op != OpLoad { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] mem := v_0.Args[1] + ptr := v_0.Args[0] v.reset(OpS390XMOVDload) v.AddArg(ptr) v.AddArg(mem) @@ -2718,9 +2593,8 @@ func rewriteValueS390X_OpInterCall_0(v *Value) bool { // result: (CALLinter [argwid] entry mem) for { argwid := v.AuxInt - _ = v.Args[1] - entry := v.Args[0] mem := v.Args[1] + entry := v.Args[0] v.reset(OpS390XCALLinter) v.AuxInt = argwid v.AddArg(entry) @@ -2730,16 +2604,13 @@ func rewriteValueS390X_OpInterCall_0(v *Value) bool { } func rewriteValueS390X_OpIsInBounds_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (IsInBounds idx len) // cond: // result: (MOVDLT (MOVDconst [0]) (MOVDconst [1]) (CMPU idx len)) for { - _ = v.Args[1] - idx := v.Args[0] len := v.Args[1] + idx := v.Args[0] v.reset(OpS390XMOVDLT) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2756,9 +2627,7 @@ func rewriteValueS390X_OpIsInBounds_0(v *Value) bool { } func rewriteValueS390X_OpIsNonNil_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (IsNonNil p) // cond: // result: (MOVDNE (MOVDconst [0]) (MOVDconst [1]) (CMPconst p [0])) @@ -2780,16 +2649,13 @@ func rewriteValueS390X_OpIsNonNil_0(v *Value) bool { } func rewriteValueS390X_OpIsSliceInBounds_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (IsSliceInBounds idx len) // cond: // result: (MOVDLE (MOVDconst [0]) (MOVDconst [1]) (CMPU idx len)) for { - _ = v.Args[1] - idx := v.Args[0] len := v.Args[1] + idx := v.Args[0] v.reset(OpS390XMOVDLE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2806,16 +2672,13 @@ func rewriteValueS390X_OpIsSliceInBounds_0(v *Value) bool { } func rewriteValueS390X_OpLeq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq16 x y) // cond: // result: (MOVDLE (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOVHreg x) (MOVHreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDLE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2836,16 +2699,13 @@ func rewriteValueS390X_OpLeq16_0(v *Value) bool { } func rewriteValueS390X_OpLeq16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq16U x y) // cond: // result: (MOVDLE (MOVDconst [0]) (MOVDconst [1]) (CMPWU (MOVHZreg x) (MOVHZreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDLE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2866,16 +2726,13 @@ func rewriteValueS390X_OpLeq16U_0(v *Value) bool { } func rewriteValueS390X_OpLeq32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq32 x y) // cond: // result: (MOVDLE (MOVDconst [0]) (MOVDconst [1]) (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDLE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2892,16 +2749,13 @@ func rewriteValueS390X_OpLeq32_0(v *Value) bool { } func rewriteValueS390X_OpLeq32F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq32F x y) // cond: // result: (MOVDGEnoinv (MOVDconst [0]) (MOVDconst [1]) (FCMPS y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGEnoinv) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2918,16 +2772,13 @@ func rewriteValueS390X_OpLeq32F_0(v *Value) bool { } func rewriteValueS390X_OpLeq32U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq32U x y) // cond: // result: (MOVDLE (MOVDconst [0]) (MOVDconst [1]) (CMPWU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDLE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2944,16 +2795,13 @@ func rewriteValueS390X_OpLeq32U_0(v *Value) bool { } func rewriteValueS390X_OpLeq64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq64 x y) // cond: // result: (MOVDLE (MOVDconst [0]) (MOVDconst [1]) (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDLE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2970,16 +2818,13 @@ func rewriteValueS390X_OpLeq64_0(v *Value) bool { } func rewriteValueS390X_OpLeq64F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq64F x y) // cond: // result: (MOVDGEnoinv (MOVDconst [0]) (MOVDconst [1]) (FCMP y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGEnoinv) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -2996,16 +2841,13 @@ func rewriteValueS390X_OpLeq64F_0(v *Value) bool { } func rewriteValueS390X_OpLeq64U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq64U x y) // cond: // result: (MOVDLE (MOVDconst [0]) (MOVDconst [1]) (CMPU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDLE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -3022,16 +2864,13 @@ func rewriteValueS390X_OpLeq64U_0(v *Value) bool { } func rewriteValueS390X_OpLeq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq8 x y) // cond: // result: (MOVDLE (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOVBreg x) (MOVBreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDLE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -3052,16 +2891,13 @@ func rewriteValueS390X_OpLeq8_0(v *Value) bool { } func rewriteValueS390X_OpLeq8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq8U x y) // cond: // result: (MOVDLE (MOVDconst [0]) (MOVDconst [1]) (CMPWU (MOVBZreg x) (MOVBZreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDLE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -3082,16 +2918,13 @@ func rewriteValueS390X_OpLeq8U_0(v *Value) bool { } func rewriteValueS390X_OpLess16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less16 x y) // cond: // result: (MOVDLT (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOVHreg x) (MOVHreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDLT) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -3112,16 +2945,13 @@ func rewriteValueS390X_OpLess16_0(v *Value) bool { } func rewriteValueS390X_OpLess16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less16U x y) // cond: // result: (MOVDLT (MOVDconst [0]) (MOVDconst [1]) (CMPWU (MOVHZreg x) (MOVHZreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDLT) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -3142,16 +2972,13 @@ func rewriteValueS390X_OpLess16U_0(v *Value) bool { } func rewriteValueS390X_OpLess32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less32 x y) // cond: // result: (MOVDLT (MOVDconst [0]) (MOVDconst [1]) (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDLT) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -3168,16 +2995,13 @@ func rewriteValueS390X_OpLess32_0(v *Value) bool { } func rewriteValueS390X_OpLess32F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less32F x y) // cond: // result: (MOVDGTnoinv (MOVDconst [0]) (MOVDconst [1]) (FCMPS y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGTnoinv) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -3194,16 +3018,13 @@ func rewriteValueS390X_OpLess32F_0(v *Value) bool { } func rewriteValueS390X_OpLess32U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less32U x y) // cond: // result: (MOVDLT (MOVDconst [0]) (MOVDconst [1]) (CMPWU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDLT) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -3220,16 +3041,13 @@ func rewriteValueS390X_OpLess32U_0(v *Value) bool { } func rewriteValueS390X_OpLess64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less64 x y) // cond: // result: (MOVDLT (MOVDconst [0]) (MOVDconst [1]) (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDLT) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -3246,16 +3064,13 @@ func rewriteValueS390X_OpLess64_0(v *Value) bool { } func rewriteValueS390X_OpLess64F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less64F x y) // cond: // result: (MOVDGTnoinv (MOVDconst [0]) (MOVDconst [1]) (FCMP y x)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGTnoinv) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -3272,16 +3087,13 @@ func rewriteValueS390X_OpLess64F_0(v *Value) bool { } func rewriteValueS390X_OpLess64U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less64U x y) // cond: // result: (MOVDLT (MOVDconst [0]) (MOVDconst [1]) (CMPU x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDLT) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -3298,16 +3110,13 @@ func rewriteValueS390X_OpLess64U_0(v *Value) bool { } func rewriteValueS390X_OpLess8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less8 x y) // cond: // result: (MOVDLT (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOVBreg x) (MOVBreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDLT) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -3328,16 +3137,13 @@ func rewriteValueS390X_OpLess8_0(v *Value) bool { } func rewriteValueS390X_OpLess8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less8U x y) // cond: // result: (MOVDLT (MOVDconst [0]) (MOVDconst [1]) (CMPWU (MOVBZreg x) (MOVBZreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDLT) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -3362,9 +3168,8 @@ func rewriteValueS390X_OpLoad_0(v *Value) bool { // result: (MOVDload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is64BitInt(t) || isPtr(t)) { break } @@ -3378,9 +3183,8 @@ func rewriteValueS390X_OpLoad_0(v *Value) bool { // result: (MOVWload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is32BitInt(t) && isSigned(t)) { break } @@ -3394,9 +3198,8 @@ func rewriteValueS390X_OpLoad_0(v *Value) bool { // result: (MOVWZload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is32BitInt(t) && !isSigned(t)) { break } @@ -3410,9 +3213,8 @@ func rewriteValueS390X_OpLoad_0(v *Value) bool { // result: (MOVHload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is16BitInt(t) && isSigned(t)) { break } @@ -3426,9 +3228,8 @@ func rewriteValueS390X_OpLoad_0(v *Value) bool { // result: (MOVHZload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is16BitInt(t) && !isSigned(t)) { break } @@ -3442,9 +3243,8 @@ func rewriteValueS390X_OpLoad_0(v *Value) bool { // result: (MOVBload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is8BitInt(t) && isSigned(t)) { break } @@ -3458,9 +3258,8 @@ func rewriteValueS390X_OpLoad_0(v *Value) bool { // result: (MOVBZload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.IsBoolean() || (is8BitInt(t) && !isSigned(t))) { break } @@ -3474,9 +3273,8 @@ func rewriteValueS390X_OpLoad_0(v *Value) bool { // result: (FMOVSload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is32BitFloat(t)) { break } @@ -3490,9 +3288,8 @@ func rewriteValueS390X_OpLoad_0(v *Value) bool { // result: (FMOVDload ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is64BitFloat(t)) { break } @@ -3519,16 +3316,13 @@ func rewriteValueS390X_OpLocalAddr_0(v *Value) bool { } func rewriteValueS390X_OpLsh16x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x16 x y) // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -3542,9 +3336,8 @@ func rewriteValueS390X_OpLsh16x16_0(v *Value) bool { // result: (MOVDGE (SLW x y) (MOVDconst [0]) (CMPWUconst (MOVHZreg y) [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSLW, t) @@ -3565,16 +3358,13 @@ func rewriteValueS390X_OpLsh16x16_0(v *Value) bool { } func rewriteValueS390X_OpLsh16x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x32 x y) // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -3588,9 +3378,8 @@ func rewriteValueS390X_OpLsh16x32_0(v *Value) bool { // result: (MOVDGE (SLW x y) (MOVDconst [0]) (CMPWUconst y [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSLW, t) @@ -3609,16 +3398,13 @@ func rewriteValueS390X_OpLsh16x32_0(v *Value) bool { } func rewriteValueS390X_OpLsh16x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x64 x y) // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -3632,9 +3418,8 @@ func rewriteValueS390X_OpLsh16x64_0(v *Value) bool { // result: (MOVDGE (SLW x y) (MOVDconst [0]) (CMPUconst y [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSLW, t) @@ -3653,16 +3438,13 @@ func rewriteValueS390X_OpLsh16x64_0(v *Value) bool { } func rewriteValueS390X_OpLsh16x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x8 x y) // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -3676,9 +3458,8 @@ func rewriteValueS390X_OpLsh16x8_0(v *Value) bool { // result: (MOVDGE (SLW x y) (MOVDconst [0]) (CMPWUconst (MOVBZreg y) [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSLW, t) @@ -3699,16 +3480,13 @@ func rewriteValueS390X_OpLsh16x8_0(v *Value) bool { } func rewriteValueS390X_OpLsh32x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x16 x y) // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -3722,9 +3500,8 @@ func rewriteValueS390X_OpLsh32x16_0(v *Value) bool { // result: (MOVDGE (SLW x y) (MOVDconst [0]) (CMPWUconst (MOVHZreg y) [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSLW, t) @@ -3745,16 +3522,13 @@ func rewriteValueS390X_OpLsh32x16_0(v *Value) bool { } func rewriteValueS390X_OpLsh32x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x32 x y) // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -3768,9 +3542,8 @@ func rewriteValueS390X_OpLsh32x32_0(v *Value) bool { // result: (MOVDGE (SLW x y) (MOVDconst [0]) (CMPWUconst y [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSLW, t) @@ -3789,16 +3562,13 @@ func rewriteValueS390X_OpLsh32x32_0(v *Value) bool { } func rewriteValueS390X_OpLsh32x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x64 x y) // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -3812,9 +3582,8 @@ func rewriteValueS390X_OpLsh32x64_0(v *Value) bool { // result: (MOVDGE (SLW x y) (MOVDconst [0]) (CMPUconst y [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSLW, t) @@ -3833,16 +3602,13 @@ func rewriteValueS390X_OpLsh32x64_0(v *Value) bool { } func rewriteValueS390X_OpLsh32x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x8 x y) // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -3856,9 +3622,8 @@ func rewriteValueS390X_OpLsh32x8_0(v *Value) bool { // result: (MOVDGE (SLW x y) (MOVDconst [0]) (CMPWUconst (MOVBZreg y) [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSLW, t) @@ -3879,16 +3644,13 @@ func rewriteValueS390X_OpLsh32x8_0(v *Value) bool { } func rewriteValueS390X_OpLsh64x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x16 x y) // cond: shiftIsBounded(v) // result: (SLD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -3902,9 +3664,8 @@ func rewriteValueS390X_OpLsh64x16_0(v *Value) bool { // result: (MOVDGE (SLD x y) (MOVDconst [0]) (CMPWUconst (MOVHZreg y) [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSLD, t) @@ -3925,16 +3686,13 @@ func rewriteValueS390X_OpLsh64x16_0(v *Value) bool { } func rewriteValueS390X_OpLsh64x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x32 x y) // cond: shiftIsBounded(v) // result: (SLD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -3948,9 +3706,8 @@ func rewriteValueS390X_OpLsh64x32_0(v *Value) bool { // result: (MOVDGE (SLD x y) (MOVDconst [0]) (CMPWUconst y [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSLD, t) @@ -3969,16 +3726,13 @@ func rewriteValueS390X_OpLsh64x32_0(v *Value) bool { } func rewriteValueS390X_OpLsh64x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x64 x y) // cond: shiftIsBounded(v) // result: (SLD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -3992,9 +3746,8 @@ func rewriteValueS390X_OpLsh64x64_0(v *Value) bool { // result: (MOVDGE (SLD x y) (MOVDconst [0]) (CMPUconst y [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSLD, t) @@ -4013,16 +3766,13 @@ func rewriteValueS390X_OpLsh64x64_0(v *Value) bool { } func rewriteValueS390X_OpLsh64x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x8 x y) // cond: shiftIsBounded(v) // result: (SLD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -4036,9 +3786,8 @@ func rewriteValueS390X_OpLsh64x8_0(v *Value) bool { // result: (MOVDGE (SLD x y) (MOVDconst [0]) (CMPWUconst (MOVBZreg y) [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSLD, t) @@ -4059,16 +3808,13 @@ func rewriteValueS390X_OpLsh64x8_0(v *Value) bool { } func rewriteValueS390X_OpLsh8x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x16 x y) // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -4082,9 +3828,8 @@ func rewriteValueS390X_OpLsh8x16_0(v *Value) bool { // result: (MOVDGE (SLW x y) (MOVDconst [0]) (CMPWUconst (MOVHZreg y) [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSLW, t) @@ -4105,16 +3850,13 @@ func rewriteValueS390X_OpLsh8x16_0(v *Value) bool { } func rewriteValueS390X_OpLsh8x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x32 x y) // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -4128,9 +3870,8 @@ func rewriteValueS390X_OpLsh8x32_0(v *Value) bool { // result: (MOVDGE (SLW x y) (MOVDconst [0]) (CMPWUconst y [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSLW, t) @@ -4149,16 +3890,13 @@ func rewriteValueS390X_OpLsh8x32_0(v *Value) bool { } func rewriteValueS390X_OpLsh8x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x64 x y) // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -4172,9 +3910,8 @@ func rewriteValueS390X_OpLsh8x64_0(v *Value) bool { // result: (MOVDGE (SLW x y) (MOVDconst [0]) (CMPUconst y [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSLW, t) @@ -4193,16 +3930,13 @@ func rewriteValueS390X_OpLsh8x64_0(v *Value) bool { } func rewriteValueS390X_OpLsh8x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x8 x y) // cond: shiftIsBounded(v) // result: (SLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -4216,9 +3950,8 @@ func rewriteValueS390X_OpLsh8x8_0(v *Value) bool { // result: (MOVDGE (SLW x y) (MOVDconst [0]) (CMPWUconst (MOVBZreg y) [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSLW, t) @@ -4239,16 +3972,13 @@ func rewriteValueS390X_OpLsh8x8_0(v *Value) bool { } func rewriteValueS390X_OpMod16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod16 x y) // cond: // result: (MODW (MOVHreg x) (MOVHreg y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMODW) v0 := b.NewValue0(v.Pos, OpS390XMOVHreg, typ.Int64) v0.AddArg(x) @@ -4261,16 +3991,13 @@ func rewriteValueS390X_OpMod16_0(v *Value) bool { } func rewriteValueS390X_OpMod16u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod16u x y) // cond: // result: (MODWU (MOVHZreg x) (MOVHZreg y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMODWU) v0 := b.NewValue0(v.Pos, OpS390XMOVHZreg, typ.UInt64) v0.AddArg(x) @@ -4283,16 +4010,13 @@ func rewriteValueS390X_OpMod16u_0(v *Value) bool { } func rewriteValueS390X_OpMod32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod32 x y) // cond: // result: (MODW (MOVWreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMODW) v0 := b.NewValue0(v.Pos, OpS390XMOVWreg, typ.Int64) v0.AddArg(x) @@ -4303,16 +4027,13 @@ func rewriteValueS390X_OpMod32_0(v *Value) bool { } func rewriteValueS390X_OpMod32u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod32u x y) // cond: // result: (MODWU (MOVWZreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMODWU) v0 := b.NewValue0(v.Pos, OpS390XMOVWZreg, typ.UInt64) v0.AddArg(x) @@ -4326,9 +4047,8 @@ func rewriteValueS390X_OpMod64_0(v *Value) bool { // cond: // result: (MODD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMODD) v.AddArg(x) v.AddArg(y) @@ -4340,9 +4060,8 @@ func rewriteValueS390X_OpMod64u_0(v *Value) bool { // cond: // result: (MODDU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMODDU) v.AddArg(x) v.AddArg(y) @@ -4351,16 +4070,13 @@ func rewriteValueS390X_OpMod64u_0(v *Value) bool { } func rewriteValueS390X_OpMod8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod8 x y) // cond: // result: (MODW (MOVBreg x) (MOVBreg y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMODW) v0 := b.NewValue0(v.Pos, OpS390XMOVBreg, typ.Int64) v0.AddArg(x) @@ -4373,16 +4089,13 @@ func rewriteValueS390X_OpMod8_0(v *Value) bool { } func rewriteValueS390X_OpMod8u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod8u x y) // cond: // result: (MODWU (MOVBZreg x) (MOVBZreg y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMODWU) v0 := b.NewValue0(v.Pos, OpS390XMOVBZreg, typ.UInt64) v0.AddArg(x) @@ -4395,9 +4108,7 @@ func rewriteValueS390X_OpMod8u_0(v *Value) bool { } func rewriteValueS390X_OpMove_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Move [0] _ _ mem) // cond: // result: mem @@ -4405,7 +4116,6 @@ func rewriteValueS390X_OpMove_0(v *Value) bool { if v.AuxInt != 0 { break } - _ = v.Args[2] mem := v.Args[2] v.reset(OpCopy) v.Type = mem.Type @@ -4419,10 +4129,9 @@ func rewriteValueS390X_OpMove_0(v *Value) bool { if v.AuxInt != 1 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpS390XMOVBstore) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpS390XMOVBZload, typ.UInt8) @@ -4439,10 +4148,9 @@ func rewriteValueS390X_OpMove_0(v *Value) bool { if v.AuxInt != 2 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpS390XMOVHstore) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpS390XMOVHZload, typ.UInt16) @@ -4459,10 +4167,9 @@ func rewriteValueS390X_OpMove_0(v *Value) bool { if v.AuxInt != 4 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpS390XMOVWstore) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpS390XMOVWZload, typ.UInt32) @@ -4479,10 +4186,9 @@ func rewriteValueS390X_OpMove_0(v *Value) bool { if v.AuxInt != 8 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpS390XMOVDstore) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpS390XMOVDload, typ.UInt64) @@ -4499,10 +4205,9 @@ func rewriteValueS390X_OpMove_0(v *Value) bool { if v.AuxInt != 16 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpS390XMOVDstore) v.AuxInt = 8 v.AddArg(dst) @@ -4528,10 +4233,9 @@ func rewriteValueS390X_OpMove_0(v *Value) bool { if v.AuxInt != 24 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpS390XMOVDstore) v.AuxInt = 16 v.AddArg(dst) @@ -4566,10 +4270,9 @@ func rewriteValueS390X_OpMove_0(v *Value) bool { if v.AuxInt != 3 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpS390XMOVBstore) v.AuxInt = 2 v.AddArg(dst) @@ -4595,10 +4298,9 @@ func rewriteValueS390X_OpMove_0(v *Value) bool { if v.AuxInt != 5 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpS390XMOVBstore) v.AuxInt = 4 v.AddArg(dst) @@ -4624,10 +4326,9 @@ func rewriteValueS390X_OpMove_0(v *Value) bool { if v.AuxInt != 6 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpS390XMOVHstore) v.AuxInt = 4 v.AddArg(dst) @@ -4650,9 +4351,7 @@ func rewriteValueS390X_OpMove_0(v *Value) bool { } func rewriteValueS390X_OpMove_10(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Move [7] dst src mem) // cond: // result: (MOVBstore [6] dst (MOVBZload [6] src mem) (MOVHstore [4] dst (MOVHZload [4] src mem) (MOVWstore dst (MOVWZload src mem) mem))) @@ -4660,10 +4359,9 @@ func rewriteValueS390X_OpMove_10(v *Value) bool { if v.AuxInt != 7 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpS390XMOVBstore) v.AuxInt = 6 v.AddArg(dst) @@ -4696,10 +4394,9 @@ func rewriteValueS390X_OpMove_10(v *Value) bool { // result: (MVC [makeValAndOff(s, 0)] dst src mem) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s > 0 && s <= 256) { break } @@ -4715,10 +4412,9 @@ func rewriteValueS390X_OpMove_10(v *Value) bool { // result: (MVC [makeValAndOff(s-256, 256)] dst src (MVC [makeValAndOff(256, 0)] dst src mem)) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s > 256 && s <= 512) { break } @@ -4739,10 +4435,9 @@ func rewriteValueS390X_OpMove_10(v *Value) bool { // result: (MVC [makeValAndOff(s-512, 512)] dst src (MVC [makeValAndOff(256, 256)] dst src (MVC [makeValAndOff(256, 0)] dst src mem))) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s > 512 && s <= 768) { break } @@ -4768,10 +4463,9 @@ func rewriteValueS390X_OpMove_10(v *Value) bool { // result: (MVC [makeValAndOff(s-768, 768)] dst src (MVC [makeValAndOff(256, 512)] dst src (MVC [makeValAndOff(256, 256)] dst src (MVC [makeValAndOff(256, 0)] dst src mem)))) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s > 768 && s <= 1024) { break } @@ -4802,10 +4496,9 @@ func rewriteValueS390X_OpMove_10(v *Value) bool { // result: (LoweredMove [s%256] dst src (ADD src (MOVDconst [(s/256)*256])) mem) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s > 1024) { break } @@ -4829,9 +4522,8 @@ func rewriteValueS390X_OpMul16_0(v *Value) bool { // cond: // result: (MULLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMULLW) v.AddArg(x) v.AddArg(y) @@ -4843,9 +4535,8 @@ func rewriteValueS390X_OpMul32_0(v *Value) bool { // cond: // result: (MULLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMULLW) v.AddArg(x) v.AddArg(y) @@ -4857,9 +4548,8 @@ func rewriteValueS390X_OpMul32F_0(v *Value) bool { // cond: // result: (FMULS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XFMULS) v.AddArg(x) v.AddArg(y) @@ -4871,9 +4561,8 @@ func rewriteValueS390X_OpMul64_0(v *Value) bool { // cond: // result: (MULLD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMULLD) v.AddArg(x) v.AddArg(y) @@ -4885,9 +4574,8 @@ func rewriteValueS390X_OpMul64F_0(v *Value) bool { // cond: // result: (FMUL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XFMUL) v.AddArg(x) v.AddArg(y) @@ -4899,9 +4587,8 @@ func rewriteValueS390X_OpMul8_0(v *Value) bool { // cond: // result: (MULLW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMULLW) v.AddArg(x) v.AddArg(y) @@ -4976,16 +4663,13 @@ func rewriteValueS390X_OpNeg8_0(v *Value) bool { } func rewriteValueS390X_OpNeq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq16 x y) // cond: // result: (MOVDNE (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOVHreg x) (MOVHreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDNE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -5006,16 +4690,13 @@ func rewriteValueS390X_OpNeq16_0(v *Value) bool { } func rewriteValueS390X_OpNeq32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq32 x y) // cond: // result: (MOVDNE (MOVDconst [0]) (MOVDconst [1]) (CMPW x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDNE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -5032,16 +4713,13 @@ func rewriteValueS390X_OpNeq32_0(v *Value) bool { } func rewriteValueS390X_OpNeq32F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq32F x y) // cond: // result: (MOVDNE (MOVDconst [0]) (MOVDconst [1]) (FCMPS x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDNE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -5058,16 +4736,13 @@ func rewriteValueS390X_OpNeq32F_0(v *Value) bool { } func rewriteValueS390X_OpNeq64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq64 x y) // cond: // result: (MOVDNE (MOVDconst [0]) (MOVDconst [1]) (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDNE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -5084,16 +4759,13 @@ func rewriteValueS390X_OpNeq64_0(v *Value) bool { } func rewriteValueS390X_OpNeq64F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq64F x y) // cond: // result: (MOVDNE (MOVDconst [0]) (MOVDconst [1]) (FCMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDNE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -5110,16 +4782,13 @@ func rewriteValueS390X_OpNeq64F_0(v *Value) bool { } func rewriteValueS390X_OpNeq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq8 x y) // cond: // result: (MOVDNE (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOVBreg x) (MOVBreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDNE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -5140,16 +4809,13 @@ func rewriteValueS390X_OpNeq8_0(v *Value) bool { } func rewriteValueS390X_OpNeqB_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (NeqB x y) // cond: // result: (MOVDNE (MOVDconst [0]) (MOVDconst [1]) (CMPW (MOVBreg x) (MOVBreg y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDNE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -5170,16 +4836,13 @@ func rewriteValueS390X_OpNeqB_0(v *Value) bool { } func rewriteValueS390X_OpNeqPtr_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (NeqPtr x y) // cond: // result: (MOVDNE (MOVDconst [0]) (MOVDconst [1]) (CMP x y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDNE) v0 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) v0.AuxInt = 0 @@ -5199,9 +4862,8 @@ func rewriteValueS390X_OpNilCheck_0(v *Value) bool { // cond: // result: (LoweredNilCheck ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpS390XLoweredNilCheck) v.AddArg(ptr) v.AddArg(mem) @@ -5222,9 +4884,7 @@ func rewriteValueS390X_OpNot_0(v *Value) bool { } func rewriteValueS390X_OpOffPtr_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (OffPtr [off] ptr:(SP)) // cond: // result: (MOVDaddr [off] ptr) @@ -5272,9 +4932,8 @@ func rewriteValueS390X_OpOr16_0(v *Value) bool { // cond: // result: (ORW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XORW) v.AddArg(x) v.AddArg(y) @@ -5286,9 +4945,8 @@ func rewriteValueS390X_OpOr32_0(v *Value) bool { // cond: // result: (ORW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XORW) v.AddArg(x) v.AddArg(y) @@ -5300,9 +4958,8 @@ func rewriteValueS390X_OpOr64_0(v *Value) bool { // cond: // result: (OR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XOR) v.AddArg(x) v.AddArg(y) @@ -5314,9 +4971,8 @@ func rewriteValueS390X_OpOr8_0(v *Value) bool { // cond: // result: (ORW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XORW) v.AddArg(x) v.AddArg(y) @@ -5328,20 +4984,74 @@ func rewriteValueS390X_OpOrB_0(v *Value) bool { // cond: // result: (ORW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XORW) v.AddArg(x) v.AddArg(y) return true } } +func rewriteValueS390X_OpPanicBounds_0(v *Value) bool { + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 0 + // result: (LoweredPanicBoundsA [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 0) { + break + } + v.reset(OpS390XLoweredPanicBoundsA) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 1 + // result: (LoweredPanicBoundsB [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 1) { + break + } + v.reset(OpS390XLoweredPanicBoundsB) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + // match: (PanicBounds [kind] x y mem) + // cond: boundsABI(kind) == 2 + // result: (LoweredPanicBoundsC [kind] x y mem) + for { + kind := v.AuxInt + mem := v.Args[2] + x := v.Args[0] + y := v.Args[1] + if !(boundsABI(kind) == 2) { + break + } + v.reset(OpS390XLoweredPanicBoundsC) + v.AuxInt = kind + v.AddArg(x) + v.AddArg(y) + v.AddArg(mem) + return true + } + return false +} func rewriteValueS390X_OpPopCount16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (PopCount16 x) // cond: // result: (MOVBZreg (SumBytes2 (POPCNT x))) @@ -5358,9 +5068,7 @@ func rewriteValueS390X_OpPopCount16_0(v *Value) bool { } func rewriteValueS390X_OpPopCount32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (PopCount32 x) // cond: // result: (MOVBZreg (SumBytes4 (POPCNT x))) @@ -5377,9 +5085,7 @@ func rewriteValueS390X_OpPopCount32_0(v *Value) bool { } func rewriteValueS390X_OpPopCount64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (PopCount64 x) // cond: // result: (MOVBZreg (SumBytes8 (POPCNT x))) @@ -5396,9 +5102,7 @@ func rewriteValueS390X_OpPopCount64_0(v *Value) bool { } func rewriteValueS390X_OpPopCount8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (PopCount8 x) // cond: // result: (POPCNT (MOVBZreg x)) @@ -5411,14 +5115,45 @@ func rewriteValueS390X_OpPopCount8_0(v *Value) bool { return true } } +func rewriteValueS390X_OpRotateLeft16_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (RotateLeft16 x (MOVDconst [c])) + // cond: + // result: (Or16 (Lsh16x64 x (MOVDconst [c&15])) (Rsh16Ux64 x (MOVDconst [-c&15]))) + for { + t := v.Type + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpS390XMOVDconst { + break + } + c := v_1.AuxInt + v.reset(OpOr16) + v0 := b.NewValue0(v.Pos, OpLsh16x64, t) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) + v1.AuxInt = c & 15 + v0.AddArg(v1) + v.AddArg(v0) + v2 := b.NewValue0(v.Pos, OpRsh16Ux64, t) + v2.AddArg(x) + v3 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) + v3.AuxInt = -c & 15 + v2.AddArg(v3) + v.AddArg(v2) + return true + } + return false +} func rewriteValueS390X_OpRotateLeft32_0(v *Value) bool { // match: (RotateLeft32 x y) // cond: // result: (RLL x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XRLL) v.AddArg(x) v.AddArg(y) @@ -5430,15 +5165,46 @@ func rewriteValueS390X_OpRotateLeft64_0(v *Value) bool { // cond: // result: (RLLG x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XRLLG) v.AddArg(x) v.AddArg(y) return true } } +func rewriteValueS390X_OpRotateLeft8_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (RotateLeft8 x (MOVDconst [c])) + // cond: + // result: (Or8 (Lsh8x64 x (MOVDconst [c&7])) (Rsh8Ux64 x (MOVDconst [-c&7]))) + for { + t := v.Type + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpS390XMOVDconst { + break + } + c := v_1.AuxInt + v.reset(OpOr8) + v0 := b.NewValue0(v.Pos, OpLsh8x64, t) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) + v1.AuxInt = c & 7 + v0.AddArg(v1) + v.AddArg(v0) + v2 := b.NewValue0(v.Pos, OpRsh8Ux64, t) + v2.AddArg(x) + v3 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) + v3.AuxInt = -c & 7 + v2.AddArg(v3) + v.AddArg(v2) + return true + } + return false +} func rewriteValueS390X_OpRound_0(v *Value) bool { // match: (Round x) // cond: @@ -5487,16 +5253,13 @@ func rewriteValueS390X_OpRoundToEven_0(v *Value) bool { } func rewriteValueS390X_OpRsh16Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux16 x y) // cond: shiftIsBounded(v) // result: (SRW (MOVHZreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -5512,9 +5275,8 @@ func rewriteValueS390X_OpRsh16Ux16_0(v *Value) bool { // result: (MOVDGE (SRW (MOVHZreg x) y) (MOVDconst [0]) (CMPWUconst (MOVHZreg y) [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSRW, t) @@ -5537,16 +5299,13 @@ func rewriteValueS390X_OpRsh16Ux16_0(v *Value) bool { } func rewriteValueS390X_OpRsh16Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux32 x y) // cond: shiftIsBounded(v) // result: (SRW (MOVHZreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -5562,9 +5321,8 @@ func rewriteValueS390X_OpRsh16Ux32_0(v *Value) bool { // result: (MOVDGE (SRW (MOVHZreg x) y) (MOVDconst [0]) (CMPWUconst y [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSRW, t) @@ -5585,16 +5343,13 @@ func rewriteValueS390X_OpRsh16Ux32_0(v *Value) bool { } func rewriteValueS390X_OpRsh16Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux64 x y) // cond: shiftIsBounded(v) // result: (SRW (MOVHZreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -5610,9 +5365,8 @@ func rewriteValueS390X_OpRsh16Ux64_0(v *Value) bool { // result: (MOVDGE (SRW (MOVHZreg x) y) (MOVDconst [0]) (CMPUconst y [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSRW, t) @@ -5633,16 +5387,13 @@ func rewriteValueS390X_OpRsh16Ux64_0(v *Value) bool { } func rewriteValueS390X_OpRsh16Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux8 x y) // cond: shiftIsBounded(v) // result: (SRW (MOVHZreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -5658,9 +5409,8 @@ func rewriteValueS390X_OpRsh16Ux8_0(v *Value) bool { // result: (MOVDGE (SRW (MOVHZreg x) y) (MOVDconst [0]) (CMPWUconst (MOVBZreg y) [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSRW, t) @@ -5683,16 +5433,13 @@ func rewriteValueS390X_OpRsh16Ux8_0(v *Value) bool { } func rewriteValueS390X_OpRsh16x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x16 x y) // cond: shiftIsBounded(v) // result: (SRAW (MOVHreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -5707,9 +5454,8 @@ func rewriteValueS390X_OpRsh16x16_0(v *Value) bool { // cond: // result: (SRAW (MOVHreg x) (MOVDGE y (MOVDconst [63]) (CMPWUconst (MOVHZreg y) [64]))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSRAW) v0 := b.NewValue0(v.Pos, OpS390XMOVHreg, typ.Int64) v0.AddArg(x) @@ -5731,16 +5477,13 @@ func rewriteValueS390X_OpRsh16x16_0(v *Value) bool { } func rewriteValueS390X_OpRsh16x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x32 x y) // cond: shiftIsBounded(v) // result: (SRAW (MOVHreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -5755,9 +5498,8 @@ func rewriteValueS390X_OpRsh16x32_0(v *Value) bool { // cond: // result: (SRAW (MOVHreg x) (MOVDGE y (MOVDconst [63]) (CMPWUconst y [64]))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSRAW) v0 := b.NewValue0(v.Pos, OpS390XMOVHreg, typ.Int64) v0.AddArg(x) @@ -5777,16 +5519,13 @@ func rewriteValueS390X_OpRsh16x32_0(v *Value) bool { } func rewriteValueS390X_OpRsh16x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x64 x y) // cond: shiftIsBounded(v) // result: (SRAW (MOVHreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -5801,9 +5540,8 @@ func rewriteValueS390X_OpRsh16x64_0(v *Value) bool { // cond: // result: (SRAW (MOVHreg x) (MOVDGE y (MOVDconst [63]) (CMPUconst y [64]))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSRAW) v0 := b.NewValue0(v.Pos, OpS390XMOVHreg, typ.Int64) v0.AddArg(x) @@ -5823,16 +5561,13 @@ func rewriteValueS390X_OpRsh16x64_0(v *Value) bool { } func rewriteValueS390X_OpRsh16x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x8 x y) // cond: shiftIsBounded(v) // result: (SRAW (MOVHreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -5847,9 +5582,8 @@ func rewriteValueS390X_OpRsh16x8_0(v *Value) bool { // cond: // result: (SRAW (MOVHreg x) (MOVDGE y (MOVDconst [63]) (CMPWUconst (MOVBZreg y) [64]))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSRAW) v0 := b.NewValue0(v.Pos, OpS390XMOVHreg, typ.Int64) v0.AddArg(x) @@ -5871,16 +5605,13 @@ func rewriteValueS390X_OpRsh16x8_0(v *Value) bool { } func rewriteValueS390X_OpRsh32Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux16 x y) // cond: shiftIsBounded(v) // result: (SRW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -5894,9 +5625,8 @@ func rewriteValueS390X_OpRsh32Ux16_0(v *Value) bool { // result: (MOVDGE (SRW x y) (MOVDconst [0]) (CMPWUconst (MOVHZreg y) [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSRW, t) @@ -5917,16 +5647,13 @@ func rewriteValueS390X_OpRsh32Ux16_0(v *Value) bool { } func rewriteValueS390X_OpRsh32Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux32 x y) // cond: shiftIsBounded(v) // result: (SRW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -5940,9 +5667,8 @@ func rewriteValueS390X_OpRsh32Ux32_0(v *Value) bool { // result: (MOVDGE (SRW x y) (MOVDconst [0]) (CMPWUconst y [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSRW, t) @@ -5961,16 +5687,13 @@ func rewriteValueS390X_OpRsh32Ux32_0(v *Value) bool { } func rewriteValueS390X_OpRsh32Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux64 x y) // cond: shiftIsBounded(v) // result: (SRW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -5984,9 +5707,8 @@ func rewriteValueS390X_OpRsh32Ux64_0(v *Value) bool { // result: (MOVDGE (SRW x y) (MOVDconst [0]) (CMPUconst y [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSRW, t) @@ -6005,16 +5727,13 @@ func rewriteValueS390X_OpRsh32Ux64_0(v *Value) bool { } func rewriteValueS390X_OpRsh32Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux8 x y) // cond: shiftIsBounded(v) // result: (SRW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -6028,9 +5747,8 @@ func rewriteValueS390X_OpRsh32Ux8_0(v *Value) bool { // result: (MOVDGE (SRW x y) (MOVDconst [0]) (CMPWUconst (MOVBZreg y) [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSRW, t) @@ -6051,16 +5769,13 @@ func rewriteValueS390X_OpRsh32Ux8_0(v *Value) bool { } func rewriteValueS390X_OpRsh32x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x16 x y) // cond: shiftIsBounded(v) // result: (SRAW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -6073,9 +5788,8 @@ func rewriteValueS390X_OpRsh32x16_0(v *Value) bool { // cond: // result: (SRAW x (MOVDGE y (MOVDconst [63]) (CMPWUconst (MOVHZreg y) [64]))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSRAW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpS390XMOVDGE, y.Type) @@ -6095,14 +5809,12 @@ func rewriteValueS390X_OpRsh32x16_0(v *Value) bool { } func rewriteValueS390X_OpRsh32x32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32x32 x y) // cond: shiftIsBounded(v) // result: (SRAW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -6115,9 +5827,8 @@ func rewriteValueS390X_OpRsh32x32_0(v *Value) bool { // cond: // result: (SRAW x (MOVDGE y (MOVDconst [63]) (CMPWUconst y [64]))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSRAW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpS390XMOVDGE, y.Type) @@ -6135,14 +5846,12 @@ func rewriteValueS390X_OpRsh32x32_0(v *Value) bool { } func rewriteValueS390X_OpRsh32x64_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32x64 x y) // cond: shiftIsBounded(v) // result: (SRAW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -6155,9 +5864,8 @@ func rewriteValueS390X_OpRsh32x64_0(v *Value) bool { // cond: // result: (SRAW x (MOVDGE y (MOVDconst [63]) (CMPUconst y [64]))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSRAW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpS390XMOVDGE, y.Type) @@ -6175,16 +5883,13 @@ func rewriteValueS390X_OpRsh32x64_0(v *Value) bool { } func rewriteValueS390X_OpRsh32x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x8 x y) // cond: shiftIsBounded(v) // result: (SRAW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -6197,9 +5902,8 @@ func rewriteValueS390X_OpRsh32x8_0(v *Value) bool { // cond: // result: (SRAW x (MOVDGE y (MOVDconst [63]) (CMPWUconst (MOVBZreg y) [64]))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSRAW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpS390XMOVDGE, y.Type) @@ -6219,16 +5923,13 @@ func rewriteValueS390X_OpRsh32x8_0(v *Value) bool { } func rewriteValueS390X_OpRsh64Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux16 x y) // cond: shiftIsBounded(v) // result: (SRD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -6242,9 +5943,8 @@ func rewriteValueS390X_OpRsh64Ux16_0(v *Value) bool { // result: (MOVDGE (SRD x y) (MOVDconst [0]) (CMPWUconst (MOVHZreg y) [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSRD, t) @@ -6265,16 +5965,13 @@ func rewriteValueS390X_OpRsh64Ux16_0(v *Value) bool { } func rewriteValueS390X_OpRsh64Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux32 x y) // cond: shiftIsBounded(v) // result: (SRD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -6288,9 +5985,8 @@ func rewriteValueS390X_OpRsh64Ux32_0(v *Value) bool { // result: (MOVDGE (SRD x y) (MOVDconst [0]) (CMPWUconst y [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSRD, t) @@ -6309,16 +6005,13 @@ func rewriteValueS390X_OpRsh64Ux32_0(v *Value) bool { } func rewriteValueS390X_OpRsh64Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux64 x y) // cond: shiftIsBounded(v) // result: (SRD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -6332,9 +6025,8 @@ func rewriteValueS390X_OpRsh64Ux64_0(v *Value) bool { // result: (MOVDGE (SRD x y) (MOVDconst [0]) (CMPUconst y [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSRD, t) @@ -6353,16 +6045,13 @@ func rewriteValueS390X_OpRsh64Ux64_0(v *Value) bool { } func rewriteValueS390X_OpRsh64Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux8 x y) // cond: shiftIsBounded(v) // result: (SRD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -6376,9 +6065,8 @@ func rewriteValueS390X_OpRsh64Ux8_0(v *Value) bool { // result: (MOVDGE (SRD x y) (MOVDconst [0]) (CMPWUconst (MOVBZreg y) [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSRD, t) @@ -6399,16 +6087,13 @@ func rewriteValueS390X_OpRsh64Ux8_0(v *Value) bool { } func rewriteValueS390X_OpRsh64x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x16 x y) // cond: shiftIsBounded(v) // result: (SRAD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -6421,9 +6106,8 @@ func rewriteValueS390X_OpRsh64x16_0(v *Value) bool { // cond: // result: (SRAD x (MOVDGE y (MOVDconst [63]) (CMPWUconst (MOVHZreg y) [64]))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSRAD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpS390XMOVDGE, y.Type) @@ -6443,14 +6127,12 @@ func rewriteValueS390X_OpRsh64x16_0(v *Value) bool { } func rewriteValueS390X_OpRsh64x32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh64x32 x y) // cond: shiftIsBounded(v) // result: (SRAD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -6463,9 +6145,8 @@ func rewriteValueS390X_OpRsh64x32_0(v *Value) bool { // cond: // result: (SRAD x (MOVDGE y (MOVDconst [63]) (CMPWUconst y [64]))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSRAD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpS390XMOVDGE, y.Type) @@ -6483,14 +6164,12 @@ func rewriteValueS390X_OpRsh64x32_0(v *Value) bool { } func rewriteValueS390X_OpRsh64x64_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh64x64 x y) // cond: shiftIsBounded(v) // result: (SRAD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -6503,9 +6182,8 @@ func rewriteValueS390X_OpRsh64x64_0(v *Value) bool { // cond: // result: (SRAD x (MOVDGE y (MOVDconst [63]) (CMPUconst y [64]))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSRAD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpS390XMOVDGE, y.Type) @@ -6523,16 +6201,13 @@ func rewriteValueS390X_OpRsh64x64_0(v *Value) bool { } func rewriteValueS390X_OpRsh64x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x8 x y) // cond: shiftIsBounded(v) // result: (SRAD x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -6545,9 +6220,8 @@ func rewriteValueS390X_OpRsh64x8_0(v *Value) bool { // cond: // result: (SRAD x (MOVDGE y (MOVDconst [63]) (CMPWUconst (MOVBZreg y) [64]))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSRAD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpS390XMOVDGE, y.Type) @@ -6567,16 +6241,13 @@ func rewriteValueS390X_OpRsh64x8_0(v *Value) bool { } func rewriteValueS390X_OpRsh8Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux16 x y) // cond: shiftIsBounded(v) // result: (SRW (MOVBZreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -6592,9 +6263,8 @@ func rewriteValueS390X_OpRsh8Ux16_0(v *Value) bool { // result: (MOVDGE (SRW (MOVBZreg x) y) (MOVDconst [0]) (CMPWUconst (MOVHZreg y) [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSRW, t) @@ -6617,16 +6287,13 @@ func rewriteValueS390X_OpRsh8Ux16_0(v *Value) bool { } func rewriteValueS390X_OpRsh8Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux32 x y) // cond: shiftIsBounded(v) // result: (SRW (MOVBZreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -6642,9 +6309,8 @@ func rewriteValueS390X_OpRsh8Ux32_0(v *Value) bool { // result: (MOVDGE (SRW (MOVBZreg x) y) (MOVDconst [0]) (CMPWUconst y [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSRW, t) @@ -6665,16 +6331,13 @@ func rewriteValueS390X_OpRsh8Ux32_0(v *Value) bool { } func rewriteValueS390X_OpRsh8Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux64 x y) // cond: shiftIsBounded(v) // result: (SRW (MOVBZreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -6690,9 +6353,8 @@ func rewriteValueS390X_OpRsh8Ux64_0(v *Value) bool { // result: (MOVDGE (SRW (MOVBZreg x) y) (MOVDconst [0]) (CMPUconst y [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSRW, t) @@ -6713,16 +6375,13 @@ func rewriteValueS390X_OpRsh8Ux64_0(v *Value) bool { } func rewriteValueS390X_OpRsh8Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux8 x y) // cond: shiftIsBounded(v) // result: (SRW (MOVBZreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -6738,9 +6397,8 @@ func rewriteValueS390X_OpRsh8Ux8_0(v *Value) bool { // result: (MOVDGE (SRW (MOVBZreg x) y) (MOVDconst [0]) (CMPWUconst (MOVBZreg y) [64])) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XMOVDGE) v.Type = t v0 := b.NewValue0(v.Pos, OpS390XSRW, t) @@ -6763,16 +6421,13 @@ func rewriteValueS390X_OpRsh8Ux8_0(v *Value) bool { } func rewriteValueS390X_OpRsh8x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x16 x y) // cond: shiftIsBounded(v) // result: (SRAW (MOVBreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -6787,9 +6442,8 @@ func rewriteValueS390X_OpRsh8x16_0(v *Value) bool { // cond: // result: (SRAW (MOVBreg x) (MOVDGE y (MOVDconst [63]) (CMPWUconst (MOVHZreg y) [64]))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSRAW) v0 := b.NewValue0(v.Pos, OpS390XMOVBreg, typ.Int64) v0.AddArg(x) @@ -6811,16 +6465,13 @@ func rewriteValueS390X_OpRsh8x16_0(v *Value) bool { } func rewriteValueS390X_OpRsh8x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x32 x y) // cond: shiftIsBounded(v) // result: (SRAW (MOVBreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -6835,9 +6486,8 @@ func rewriteValueS390X_OpRsh8x32_0(v *Value) bool { // cond: // result: (SRAW (MOVBreg x) (MOVDGE y (MOVDconst [63]) (CMPWUconst y [64]))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSRAW) v0 := b.NewValue0(v.Pos, OpS390XMOVBreg, typ.Int64) v0.AddArg(x) @@ -6857,16 +6507,13 @@ func rewriteValueS390X_OpRsh8x32_0(v *Value) bool { } func rewriteValueS390X_OpRsh8x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x64 x y) // cond: shiftIsBounded(v) // result: (SRAW (MOVBreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -6881,9 +6528,8 @@ func rewriteValueS390X_OpRsh8x64_0(v *Value) bool { // cond: // result: (SRAW (MOVBreg x) (MOVDGE y (MOVDconst [63]) (CMPUconst y [64]))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSRAW) v0 := b.NewValue0(v.Pos, OpS390XMOVBreg, typ.Int64) v0.AddArg(x) @@ -6903,16 +6549,13 @@ func rewriteValueS390X_OpRsh8x64_0(v *Value) bool { } func rewriteValueS390X_OpRsh8x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x8 x y) // cond: shiftIsBounded(v) // result: (SRAW (MOVBreg x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] if !(shiftIsBounded(v)) { break } @@ -6927,9 +6570,8 @@ func rewriteValueS390X_OpRsh8x8_0(v *Value) bool { // cond: // result: (SRAW (MOVBreg x) (MOVDGE y (MOVDconst [63]) (CMPWUconst (MOVBZreg y) [64]))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSRAW) v0 := b.NewValue0(v.Pos, OpS390XMOVBreg, typ.Int64) v0.AddArg(x) @@ -6973,13 +6615,12 @@ func rewriteValueS390X_OpS390XADD_0(v *Value) bool { // cond: is32Bit(c) // result: (ADDconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c)) { break } @@ -7069,7 +6710,7 @@ func rewriteValueS390X_OpS390XADD_0(v *Value) bool { // cond: ptr.Op != OpSB && idx.Op != OpSB // result: (MOVDaddridx [c] {s} ptr idx) for { - _ = v.Args[1] + idx := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddr { break @@ -7077,7 +6718,6 @@ func rewriteValueS390X_OpS390XADD_0(v *Value) bool { c := v_0.AuxInt s := v_0.Aux ptr := v_0.Args[0] - idx := v.Args[1] if !(ptr.Op != OpSB && idx.Op != OpSB) { break } @@ -7108,13 +6748,12 @@ func rewriteValueS390X_OpS390XADD_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XNEG { break } y := v_0.Args[0] - x := v.Args[1] v.reset(OpS390XSUB) v.AddArg(x) v.AddArg(y) @@ -7133,9 +6772,8 @@ func rewriteValueS390X_OpS390XADD_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -7153,17 +6791,15 @@ func rewriteValueS390X_OpS390XADD_0(v *Value) bool { // result: (ADDload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVDload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -7184,17 +6820,15 @@ func rewriteValueS390X_OpS390XADD_10(v *Value) bool { // result: (ADDload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVDload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -7220,9 +6854,8 @@ func rewriteValueS390X_OpS390XADD_10(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -7237,6 +6870,175 @@ func rewriteValueS390X_OpS390XADD_10(v *Value) bool { } return false } +func rewriteValueS390X_OpS390XADDC_0(v *Value) bool { + // match: (ADDC x (MOVDconst [c])) + // cond: is16Bit(c) + // result: (ADDCconst x [c]) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpS390XMOVDconst { + break + } + c := v_1.AuxInt + if !(is16Bit(c)) { + break + } + v.reset(OpS390XADDCconst) + v.AuxInt = c + v.AddArg(x) + return true + } + // match: (ADDC (MOVDconst [c]) x) + // cond: is16Bit(c) + // result: (ADDCconst x [c]) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpS390XMOVDconst { + break + } + c := v_0.AuxInt + if !(is16Bit(c)) { + break + } + v.reset(OpS390XADDCconst) + v.AuxInt = c + v.AddArg(x) + return true + } + return false +} +func rewriteValueS390X_OpS390XADDE_0(v *Value) bool { + // match: (ADDE x y (FlagEQ)) + // cond: + // result: (ADDC x y) + for { + _ = v.Args[2] + x := v.Args[0] + y := v.Args[1] + v_2 := v.Args[2] + if v_2.Op != OpS390XFlagEQ { + break + } + v.reset(OpS390XADDC) + v.AddArg(x) + v.AddArg(y) + return true + } + // match: (ADDE x y (FlagLT)) + // cond: + // result: (ADDC x y) + for { + _ = v.Args[2] + x := v.Args[0] + y := v.Args[1] + v_2 := v.Args[2] + if v_2.Op != OpS390XFlagLT { + break + } + v.reset(OpS390XADDC) + v.AddArg(x) + v.AddArg(y) + return true + } + // match: (ADDE x y (Select1 (ADDCconst [-1] (Select0 (ADDE (MOVDconst [0]) (MOVDconst [0]) c))))) + // cond: + // result: (ADDE x y c) + for { + _ = v.Args[2] + x := v.Args[0] + y := v.Args[1] + v_2 := v.Args[2] + if v_2.Op != OpSelect1 { + break + } + v_2_0 := v_2.Args[0] + if v_2_0.Op != OpS390XADDCconst { + break + } + if v_2_0.AuxInt != -1 { + break + } + v_2_0_0 := v_2_0.Args[0] + if v_2_0_0.Op != OpSelect0 { + break + } + v_2_0_0_0 := v_2_0_0.Args[0] + if v_2_0_0_0.Op != OpS390XADDE { + break + } + c := v_2_0_0_0.Args[2] + v_2_0_0_0_0 := v_2_0_0_0.Args[0] + if v_2_0_0_0_0.Op != OpS390XMOVDconst { + break + } + if v_2_0_0_0_0.AuxInt != 0 { + break + } + v_2_0_0_0_1 := v_2_0_0_0.Args[1] + if v_2_0_0_0_1.Op != OpS390XMOVDconst { + break + } + if v_2_0_0_0_1.AuxInt != 0 { + break + } + v.reset(OpS390XADDE) + v.AddArg(x) + v.AddArg(y) + v.AddArg(c) + return true + } + // match: (ADDE x y (Select1 (ADDCconst [-1] (Select0 (ADDE (MOVDconst [0]) (MOVDconst [0]) c))))) + // cond: + // result: (ADDE x y c) + for { + _ = v.Args[2] + x := v.Args[0] + y := v.Args[1] + v_2 := v.Args[2] + if v_2.Op != OpSelect1 { + break + } + v_2_0 := v_2.Args[0] + if v_2_0.Op != OpS390XADDCconst { + break + } + if v_2_0.AuxInt != -1 { + break + } + v_2_0_0 := v_2_0.Args[0] + if v_2_0_0.Op != OpSelect0 { + break + } + v_2_0_0_0 := v_2_0_0.Args[0] + if v_2_0_0_0.Op != OpS390XADDE { + break + } + c := v_2_0_0_0.Args[2] + v_2_0_0_0_0 := v_2_0_0_0.Args[0] + if v_2_0_0_0_0.Op != OpS390XMOVDconst { + break + } + if v_2_0_0_0_0.AuxInt != 0 { + break + } + v_2_0_0_0_1 := v_2_0_0_0.Args[1] + if v_2_0_0_0_1.Op != OpS390XMOVDconst { + break + } + if v_2_0_0_0_1.AuxInt != 0 { + break + } + v.reset(OpS390XADDE) + v.AddArg(x) + v.AddArg(y) + v.AddArg(c) + return true + } + return false +} func rewriteValueS390X_OpS390XADDW_0(v *Value) bool { // match: (ADDW x (MOVDconst [c])) // cond: @@ -7258,13 +7060,12 @@ func rewriteValueS390X_OpS390XADDW_0(v *Value) bool { // cond: // result: (ADDWconst [int64(int32(c))] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpS390XADDWconst) v.AuxInt = int64(int32(c)) v.AddArg(x) @@ -7344,13 +7145,12 @@ func rewriteValueS390X_OpS390XADDW_0(v *Value) bool { // cond: // result: (SUBW x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XNEGW { break } y := v_0.Args[0] - x := v.Args[1] v.reset(OpS390XSUBW) v.AddArg(x) v.AddArg(y) @@ -7369,9 +7169,8 @@ func rewriteValueS390X_OpS390XADDW_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -7389,17 +7188,15 @@ func rewriteValueS390X_OpS390XADDW_0(v *Value) bool { // result: (ADDWload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVWload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -7417,17 +7214,15 @@ func rewriteValueS390X_OpS390XADDW_0(v *Value) bool { // result: (ADDWload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVWload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -7453,9 +7248,8 @@ func rewriteValueS390X_OpS390XADDW_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -7484,9 +7278,8 @@ func rewriteValueS390X_OpS390XADDW_10(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -7504,17 +7297,15 @@ func rewriteValueS390X_OpS390XADDW_10(v *Value) bool { // result: (ADDWload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVWZload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -7532,17 +7323,15 @@ func rewriteValueS390X_OpS390XADDW_10(v *Value) bool { // result: (ADDWload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVWZload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -7568,9 +7357,8 @@ func rewriteValueS390X_OpS390XADDW_10(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -7639,7 +7427,7 @@ func rewriteValueS390X_OpS390XADDWload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -7647,7 +7435,6 @@ func rewriteValueS390X_OpS390XADDWload_0(v *Value) bool { } off2 := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(off1+off2)) { break } @@ -7665,7 +7452,7 @@ func rewriteValueS390X_OpS390XADDWload_0(v *Value) bool { for { o1 := v.AuxInt s1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVDaddr { @@ -7674,7 +7461,6 @@ func rewriteValueS390X_OpS390XADDWload_0(v *Value) bool { o2 := v_1.AuxInt s2 := v_1.Aux ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(o1+o2) && canMergeSym(s1, s2)) { break } @@ -7745,9 +7531,8 @@ func rewriteValueS390X_OpS390XADDconst_0(v *Value) bool { } d := v_0.AuxInt s := v_0.Aux - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] if !(is20Bit(c + d)) { break } @@ -7808,7 +7593,6 @@ func rewriteValueS390X_OpS390XADDconst_0(v *Value) bool { } func rewriteValueS390X_OpS390XADDload_0(v *Value) bool { b := v.Block - _ = b // match: (ADDload [off] {sym} x ptr1 (FMOVDstore [off] {sym} ptr2 y _)) // cond: isSamePtr(ptr1, ptr2) // result: (ADD x (LGDR y)) @@ -7848,7 +7632,7 @@ func rewriteValueS390X_OpS390XADDload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -7856,7 +7640,6 @@ func rewriteValueS390X_OpS390XADDload_0(v *Value) bool { } off2 := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(off1+off2)) { break } @@ -7874,7 +7657,7 @@ func rewriteValueS390X_OpS390XADDload_0(v *Value) bool { for { o1 := v.AuxInt s1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVDaddr { @@ -7883,7 +7666,6 @@ func rewriteValueS390X_OpS390XADDload_0(v *Value) bool { o2 := v_1.AuxInt s2 := v_1.Aux ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(o1+o2) && canMergeSym(s1, s2)) { break } @@ -7899,9 +7681,7 @@ func rewriteValueS390X_OpS390XADDload_0(v *Value) bool { } func rewriteValueS390X_OpS390XAND_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (AND x (MOVDconst [c])) // cond: is32Bit(c) && c < 0 // result: (ANDconst [c] x) @@ -7925,13 +7705,12 @@ func rewriteValueS390X_OpS390XAND_0(v *Value) bool { // cond: is32Bit(c) && c < 0 // result: (ANDconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c) && c < 0) { break } @@ -7965,13 +7744,12 @@ func rewriteValueS390X_OpS390XAND_0(v *Value) bool { // cond: is32Bit(c) && c >= 0 // result: (MOVWZreg (ANDWconst [int64(int32(c))] x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c) && c >= 0) { break } @@ -8003,7 +7781,7 @@ func rewriteValueS390X_OpS390XAND_0(v *Value) bool { // cond: // result: (MOVBZreg x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break @@ -8011,7 +7789,6 @@ func rewriteValueS390X_OpS390XAND_0(v *Value) bool { if v_0.AuxInt != 0xFF { break } - x := v.Args[1] v.reset(OpS390XMOVBZreg) v.AddArg(x) return true @@ -8037,7 +7814,7 @@ func rewriteValueS390X_OpS390XAND_0(v *Value) bool { // cond: // result: (MOVHZreg x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break @@ -8045,7 +7822,6 @@ func rewriteValueS390X_OpS390XAND_0(v *Value) bool { if v_0.AuxInt != 0xFFFF { break } - x := v.Args[1] v.reset(OpS390XMOVHZreg) v.AddArg(x) return true @@ -8071,7 +7847,7 @@ func rewriteValueS390X_OpS390XAND_0(v *Value) bool { // cond: // result: (MOVWZreg x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break @@ -8079,7 +7855,6 @@ func rewriteValueS390X_OpS390XAND_0(v *Value) bool { if v_0.AuxInt != 0xFFFFFFFF { break } - x := v.Args[1] v.reset(OpS390XMOVWZreg) v.AddArg(x) return true @@ -8129,9 +7904,8 @@ func rewriteValueS390X_OpS390XAND_10(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -8152,9 +7926,8 @@ func rewriteValueS390X_OpS390XAND_10(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -8172,17 +7945,15 @@ func rewriteValueS390X_OpS390XAND_10(v *Value) bool { // result: (ANDload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVDload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -8200,17 +7971,15 @@ func rewriteValueS390X_OpS390XAND_10(v *Value) bool { // result: (ANDload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVDload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -8236,9 +8005,8 @@ func rewriteValueS390X_OpS390XAND_10(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -8274,13 +8042,12 @@ func rewriteValueS390X_OpS390XANDW_0(v *Value) bool { // cond: // result: (ANDWconst [int64(int32(c))] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpS390XANDWconst) v.AuxInt = int64(int32(c)) v.AddArg(x) @@ -8290,9 +8057,8 @@ func rewriteValueS390X_OpS390XANDW_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -8313,9 +8079,8 @@ func rewriteValueS390X_OpS390XANDW_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -8333,17 +8098,15 @@ func rewriteValueS390X_OpS390XANDW_0(v *Value) bool { // result: (ANDWload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVWload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -8361,17 +8124,15 @@ func rewriteValueS390X_OpS390XANDW_0(v *Value) bool { // result: (ANDWload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVWload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -8397,9 +8158,8 @@ func rewriteValueS390X_OpS390XANDW_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -8425,9 +8185,8 @@ func rewriteValueS390X_OpS390XANDW_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -8445,17 +8204,15 @@ func rewriteValueS390X_OpS390XANDW_0(v *Value) bool { // result: (ANDWload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVWZload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -8473,17 +8230,15 @@ func rewriteValueS390X_OpS390XANDW_0(v *Value) bool { // result: (ANDWload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVWZload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -8512,9 +8267,8 @@ func rewriteValueS390X_OpS390XANDW_10(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -8619,7 +8373,7 @@ func rewriteValueS390X_OpS390XANDWload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -8627,7 +8381,6 @@ func rewriteValueS390X_OpS390XANDWload_0(v *Value) bool { } off2 := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(off1+off2)) { break } @@ -8645,7 +8398,7 @@ func rewriteValueS390X_OpS390XANDWload_0(v *Value) bool { for { o1 := v.AuxInt s1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVDaddr { @@ -8654,7 +8407,6 @@ func rewriteValueS390X_OpS390XANDWload_0(v *Value) bool { o2 := v_1.AuxInt s2 := v_1.Aux ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(o1+o2) && canMergeSym(s1, s2)) { break } @@ -8727,7 +8479,6 @@ func rewriteValueS390X_OpS390XANDconst_0(v *Value) bool { } func rewriteValueS390X_OpS390XANDload_0(v *Value) bool { b := v.Block - _ = b // match: (ANDload [off] {sym} x ptr1 (FMOVDstore [off] {sym} ptr2 y _)) // cond: isSamePtr(ptr1, ptr2) // result: (AND x (LGDR y)) @@ -8767,7 +8518,7 @@ func rewriteValueS390X_OpS390XANDload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -8775,7 +8526,6 @@ func rewriteValueS390X_OpS390XANDload_0(v *Value) bool { } off2 := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(off1+off2)) { break } @@ -8793,7 +8543,7 @@ func rewriteValueS390X_OpS390XANDload_0(v *Value) bool { for { o1 := v.AuxInt s1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVDaddr { @@ -8802,7 +8552,6 @@ func rewriteValueS390X_OpS390XANDload_0(v *Value) bool { o2 := v_1.AuxInt s2 := v_1.Aux ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(o1+o2) && canMergeSym(s1, s2)) { break } @@ -8818,7 +8567,6 @@ func rewriteValueS390X_OpS390XANDload_0(v *Value) bool { } func rewriteValueS390X_OpS390XCMP_0(v *Value) bool { b := v.Block - _ = b // match: (CMP x (MOVDconst [c])) // cond: is32Bit(c) // result: (CMPconst x [c]) @@ -8842,13 +8590,12 @@ func rewriteValueS390X_OpS390XCMP_0(v *Value) bool { // cond: is32Bit(c) // result: (InvertFlags (CMPconst x [c])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c)) { break } @@ -8863,7 +8610,6 @@ func rewriteValueS390X_OpS390XCMP_0(v *Value) bool { } func rewriteValueS390X_OpS390XCMPU_0(v *Value) bool { b := v.Block - _ = b // match: (CMPU x (MOVDconst [c])) // cond: isU32Bit(c) // result: (CMPUconst x [int64(int32(c))]) @@ -8887,13 +8633,12 @@ func rewriteValueS390X_OpS390XCMPU_0(v *Value) bool { // cond: isU32Bit(c) // result: (InvertFlags (CMPUconst x [int64(int32(c))])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isU32Bit(c)) { break } @@ -9093,7 +8838,6 @@ func rewriteValueS390X_OpS390XCMPUconst_10(v *Value) bool { } func rewriteValueS390X_OpS390XCMPW_0(v *Value) bool { b := v.Block - _ = b // match: (CMPW x (MOVDconst [c])) // cond: // result: (CMPWconst x [int64(int32(c))]) @@ -9114,13 +8858,12 @@ func rewriteValueS390X_OpS390XCMPW_0(v *Value) bool { // cond: // result: (InvertFlags (CMPWconst x [int64(int32(c))])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpS390XInvertFlags) v0 := b.NewValue0(v.Pos, OpS390XCMPWconst, types.TypeFlags) v0.AuxInt = int64(int32(c)) @@ -9164,13 +8907,12 @@ func rewriteValueS390X_OpS390XCMPW_0(v *Value) bool { // cond: // result: (CMPW x y) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVWreg { break } x := v_0.Args[0] - y := v.Args[1] v.reset(OpS390XCMPW) v.AddArg(x) v.AddArg(y) @@ -9180,13 +8922,12 @@ func rewriteValueS390X_OpS390XCMPW_0(v *Value) bool { // cond: // result: (CMPW x y) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVWZreg { break } x := v_0.Args[0] - y := v.Args[1] v.reset(OpS390XCMPW) v.AddArg(x) v.AddArg(y) @@ -9196,7 +8937,6 @@ func rewriteValueS390X_OpS390XCMPW_0(v *Value) bool { } func rewriteValueS390X_OpS390XCMPWU_0(v *Value) bool { b := v.Block - _ = b // match: (CMPWU x (MOVDconst [c])) // cond: // result: (CMPWUconst x [int64(int32(c))]) @@ -9217,13 +8957,12 @@ func rewriteValueS390X_OpS390XCMPWU_0(v *Value) bool { // cond: // result: (InvertFlags (CMPWUconst x [int64(int32(c))])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpS390XInvertFlags) v0 := b.NewValue0(v.Pos, OpS390XCMPWUconst, types.TypeFlags) v0.AuxInt = int64(int32(c)) @@ -9267,13 +9006,12 @@ func rewriteValueS390X_OpS390XCMPWU_0(v *Value) bool { // cond: // result: (CMPWU x y) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVWreg { break } x := v_0.Args[0] - y := v.Args[1] v.reset(OpS390XCMPWU) v.AddArg(x) v.AddArg(y) @@ -9283,13 +9021,12 @@ func rewriteValueS390X_OpS390XCMPWU_0(v *Value) bool { // cond: // result: (CMPWU x y) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVWZreg { break } x := v_0.Args[0] - y := v.Args[1] v.reset(OpS390XCMPWU) v.AddArg(x) v.AddArg(y) @@ -9848,15 +9585,13 @@ func rewriteValueS390X_OpS390XFADD_0(v *Value) bool { // cond: // result: (FMADD x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XFMUL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpS390XFMADD) v.AddArg(x) v.AddArg(y) @@ -9873,9 +9608,8 @@ func rewriteValueS390X_OpS390XFADD_0(v *Value) bool { if v_1.Op != OpS390XFMUL { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpS390XFMADD) v.AddArg(x) v.AddArg(y) @@ -9889,15 +9623,13 @@ func rewriteValueS390X_OpS390XFADDS_0(v *Value) bool { // cond: // result: (FMADDS x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XFMULS { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpS390XFMADDS) v.AddArg(x) v.AddArg(y) @@ -9914,9 +9646,8 @@ func rewriteValueS390X_OpS390XFADDS_0(v *Value) bool { if v_1.Op != OpS390XFMULS { break } - _ = v_1.Args[1] - y := v_1.Args[0] z := v_1.Args[1] + y := v_1.Args[0] v.reset(OpS390XFMADDS) v.AddArg(x) v.AddArg(y) @@ -9989,14 +9720,13 @@ func rewriteValueS390X_OpS390XFMOVDload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is20Bit(off1 + off2)) { break } @@ -10013,7 +9743,7 @@ func rewriteValueS390X_OpS390XFMOVDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddr { break @@ -10021,7 +9751,6 @@ func rewriteValueS390X_OpS390XFMOVDload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -10038,17 +9767,15 @@ func rewriteValueS390X_OpS390XFMOVDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddridx { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -10066,15 +9793,13 @@ func rewriteValueS390X_OpS390XFMOVDload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(ptr.Op != OpSB) { break } @@ -10095,7 +9820,7 @@ func rewriteValueS390X_OpS390XFMOVDloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -10103,7 +9828,6 @@ func rewriteValueS390X_OpS390XFMOVDloadidx_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -10121,7 +9845,7 @@ func rewriteValueS390X_OpS390XFMOVDloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -10129,7 +9853,6 @@ func rewriteValueS390X_OpS390XFMOVDloadidx_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -10150,7 +9873,7 @@ func rewriteValueS390X_OpS390XFMOVDstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -10158,7 +9881,6 @@ func rewriteValueS390X_OpS390XFMOVDstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is20Bit(off1 + off2)) { break } @@ -10176,7 +9898,7 @@ func rewriteValueS390X_OpS390XFMOVDstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddr { break @@ -10185,7 +9907,6 @@ func rewriteValueS390X_OpS390XFMOVDstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -10203,18 +9924,16 @@ func rewriteValueS390X_OpS390XFMOVDstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddridx { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -10233,16 +9952,14 @@ func rewriteValueS390X_OpS390XFMOVDstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(ptr.Op != OpSB) { break } @@ -10264,7 +9981,7 @@ func rewriteValueS390X_OpS390XFMOVDstoreidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -10273,7 +9990,6 @@ func rewriteValueS390X_OpS390XFMOVDstoreidx_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is20Bit(c + d)) { break } @@ -10292,7 +10008,7 @@ func rewriteValueS390X_OpS390XFMOVDstoreidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -10301,7 +10017,6 @@ func rewriteValueS390X_OpS390XFMOVDstoreidx_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is20Bit(c + d)) { break } @@ -10352,14 +10067,13 @@ func rewriteValueS390X_OpS390XFMOVSload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is20Bit(off1 + off2)) { break } @@ -10376,7 +10090,7 @@ func rewriteValueS390X_OpS390XFMOVSload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddr { break @@ -10384,7 +10098,6 @@ func rewriteValueS390X_OpS390XFMOVSload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -10401,17 +10114,15 @@ func rewriteValueS390X_OpS390XFMOVSload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddridx { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -10429,15 +10140,13 @@ func rewriteValueS390X_OpS390XFMOVSload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(ptr.Op != OpSB) { break } @@ -10458,7 +10167,7 @@ func rewriteValueS390X_OpS390XFMOVSloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -10466,7 +10175,6 @@ func rewriteValueS390X_OpS390XFMOVSloadidx_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -10484,7 +10192,7 @@ func rewriteValueS390X_OpS390XFMOVSloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -10492,7 +10200,6 @@ func rewriteValueS390X_OpS390XFMOVSloadidx_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -10513,7 +10220,7 @@ func rewriteValueS390X_OpS390XFMOVSstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -10521,7 +10228,6 @@ func rewriteValueS390X_OpS390XFMOVSstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is20Bit(off1 + off2)) { break } @@ -10539,7 +10245,7 @@ func rewriteValueS390X_OpS390XFMOVSstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddr { break @@ -10548,7 +10254,6 @@ func rewriteValueS390X_OpS390XFMOVSstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -10566,18 +10271,16 @@ func rewriteValueS390X_OpS390XFMOVSstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddridx { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -10596,16 +10299,14 @@ func rewriteValueS390X_OpS390XFMOVSstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(ptr.Op != OpSB) { break } @@ -10627,7 +10328,7 @@ func rewriteValueS390X_OpS390XFMOVSstoreidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -10636,7 +10337,6 @@ func rewriteValueS390X_OpS390XFMOVSstoreidx_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is20Bit(c + d)) { break } @@ -10655,7 +10355,7 @@ func rewriteValueS390X_OpS390XFMOVSstoreidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -10664,7 +10364,6 @@ func rewriteValueS390X_OpS390XFMOVSstoreidx_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is20Bit(c + d)) { break } @@ -10742,15 +10441,13 @@ func rewriteValueS390X_OpS390XFSUB_0(v *Value) bool { // cond: // result: (FMSUB x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XFMUL { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpS390XFMSUB) v.AddArg(x) v.AddArg(y) @@ -10764,15 +10461,13 @@ func rewriteValueS390X_OpS390XFSUBS_0(v *Value) bool { // cond: // result: (FMSUBS x y z) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XFMULS { break } - _ = v_0.Args[1] - y := v_0.Args[0] z := v_0.Args[1] - x := v.Args[1] + y := v_0.Args[0] v.reset(OpS390XFMSUBS) v.AddArg(x) v.AddArg(y) @@ -10783,7 +10478,6 @@ func rewriteValueS390X_OpS390XFSUBS_0(v *Value) bool { } func rewriteValueS390X_OpS390XLDGR_0(v *Value) bool { b := v.Block - _ = b // match: (LDGR (SRDconst [1] (SLDconst [1] x))) // cond: // result: (LPDFR (LDGR x)) @@ -10819,7 +10513,7 @@ func rewriteValueS390X_OpS390XLDGR_0(v *Value) bool { if v_0.Op != OpS390XOR { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpS390XMOVDconst { break @@ -10827,7 +10521,6 @@ func rewriteValueS390X_OpS390XLDGR_0(v *Value) bool { if v_0_0.AuxInt != -1<<63 { break } - x := v_0.Args[1] v.reset(OpS390XLNDFR) v0 := b.NewValue0(v.Pos, OpS390XLDGR, t) v0.AddArg(x) @@ -10870,7 +10563,7 @@ func rewriteValueS390X_OpS390XLDGR_0(v *Value) bool { t1 := x.Type off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] x_0 := x.Args[0] if x_0.Op != OpS390XMOVDconst { break @@ -10879,7 +10572,6 @@ func rewriteValueS390X_OpS390XLDGR_0(v *Value) bool { break } ptr := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -11033,14 +10725,13 @@ func rewriteValueS390X_OpS390XMOVBZload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is20Bit(off1 + off2)) { break } @@ -11057,7 +10748,7 @@ func rewriteValueS390X_OpS390XMOVBZload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddr { break @@ -11065,7 +10756,6 @@ func rewriteValueS390X_OpS390XMOVBZload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -11082,17 +10772,15 @@ func rewriteValueS390X_OpS390XMOVBZload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddridx { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -11110,15 +10798,13 @@ func rewriteValueS390X_OpS390XMOVBZload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(ptr.Op != OpSB) { break } @@ -11139,7 +10825,7 @@ func rewriteValueS390X_OpS390XMOVBZloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -11147,7 +10833,6 @@ func rewriteValueS390X_OpS390XMOVBZloadidx_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -11165,7 +10850,7 @@ func rewriteValueS390X_OpS390XMOVBZloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] idx := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -11173,7 +10858,6 @@ func rewriteValueS390X_OpS390XMOVBZloadidx_0(v *Value) bool { } d := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -11191,7 +10875,7 @@ func rewriteValueS390X_OpS390XMOVBZloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -11199,7 +10883,6 @@ func rewriteValueS390X_OpS390XMOVBZloadidx_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -11217,7 +10900,7 @@ func rewriteValueS390X_OpS390XMOVBZloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -11225,7 +10908,6 @@ func rewriteValueS390X_OpS390XMOVBZloadidx_0(v *Value) bool { d := v_0.AuxInt idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -11481,9 +11163,7 @@ func rewriteValueS390X_OpS390XMOVBZreg_0(v *Value) bool { } func rewriteValueS390X_OpS390XMOVBZreg_10(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MOVBZreg x:(MOVBZreg _)) // cond: // result: (MOVDreg x) @@ -11532,9 +11212,8 @@ func rewriteValueS390X_OpS390XMOVBZreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -11558,9 +11237,8 @@ func rewriteValueS390X_OpS390XMOVBZreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -11584,10 +11262,9 @@ func rewriteValueS390X_OpS390XMOVBZreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -11612,10 +11289,9 @@ func rewriteValueS390X_OpS390XMOVBZreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -11684,14 +11360,13 @@ func rewriteValueS390X_OpS390XMOVBload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is20Bit(off1 + off2)) { break } @@ -11708,7 +11383,7 @@ func rewriteValueS390X_OpS390XMOVBload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddr { break @@ -11716,7 +11391,6 @@ func rewriteValueS390X_OpS390XMOVBload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -11733,17 +11407,15 @@ func rewriteValueS390X_OpS390XMOVBload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddridx { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -11761,15 +11433,13 @@ func rewriteValueS390X_OpS390XMOVBload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(ptr.Op != OpSB) { break } @@ -11790,7 +11460,7 @@ func rewriteValueS390X_OpS390XMOVBloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -11798,7 +11468,6 @@ func rewriteValueS390X_OpS390XMOVBloadidx_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -11816,7 +11485,7 @@ func rewriteValueS390X_OpS390XMOVBloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] idx := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -11824,7 +11493,6 @@ func rewriteValueS390X_OpS390XMOVBloadidx_0(v *Value) bool { } d := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -11842,7 +11510,7 @@ func rewriteValueS390X_OpS390XMOVBloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -11850,7 +11518,6 @@ func rewriteValueS390X_OpS390XMOVBloadidx_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -11868,7 +11535,7 @@ func rewriteValueS390X_OpS390XMOVBloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -11876,7 +11543,6 @@ func rewriteValueS390X_OpS390XMOVBloadidx_0(v *Value) bool { d := v_0.AuxInt idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -11892,9 +11558,7 @@ func rewriteValueS390X_OpS390XMOVBloadidx_0(v *Value) bool { } func rewriteValueS390X_OpS390XMOVBreg_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MOVBreg x:(MOVBload _ _)) // cond: // result: (MOVDreg x) @@ -11972,9 +11636,8 @@ func rewriteValueS390X_OpS390XMOVBreg_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -11998,9 +11661,8 @@ func rewriteValueS390X_OpS390XMOVBreg_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -12024,10 +11686,9 @@ func rewriteValueS390X_OpS390XMOVBreg_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -12052,10 +11713,9 @@ func rewriteValueS390X_OpS390XMOVBreg_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -12099,14 +11759,13 @@ func rewriteValueS390X_OpS390XMOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVBreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpS390XMOVBstore) v.AuxInt = off v.Aux = sym @@ -12121,14 +11780,13 @@ func rewriteValueS390X_OpS390XMOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVBZreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpS390XMOVBstore) v.AuxInt = off v.Aux = sym @@ -12143,7 +11801,7 @@ func rewriteValueS390X_OpS390XMOVBstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -12151,7 +11809,6 @@ func rewriteValueS390X_OpS390XMOVBstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is20Bit(off1 + off2)) { break } @@ -12169,14 +11826,13 @@ func rewriteValueS390X_OpS390XMOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is20Bit(off) && ptr.Op != OpSB) { break } @@ -12193,7 +11849,7 @@ func rewriteValueS390X_OpS390XMOVBstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddr { break @@ -12202,7 +11858,6 @@ func rewriteValueS390X_OpS390XMOVBstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -12220,18 +11875,16 @@ func rewriteValueS390X_OpS390XMOVBstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddridx { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -12250,16 +11903,14 @@ func rewriteValueS390X_OpS390XMOVBstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(ptr.Op != OpSB) { break } @@ -12291,7 +11942,7 @@ func rewriteValueS390X_OpS390XMOVBstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -12305,7 +11956,6 @@ func rewriteValueS390X_OpS390XMOVBstore_0(v *Value) bool { if w != x_1.Args[0] { break } - mem := x.Args[2] if !(p.Op != OpSB && x.Uses == 1 && clobber(x)) { break } @@ -12341,7 +11991,7 @@ func rewriteValueS390X_OpS390XMOVBstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -12355,7 +12005,6 @@ func rewriteValueS390X_OpS390XMOVBstore_0(v *Value) bool { if w != x_1.Args[0] { break } - mem := x.Args[2] if !(p.Op != OpSB && x.Uses == 1 && clobber(x)) { break } @@ -12386,7 +12035,7 @@ func rewriteValueS390X_OpS390XMOVBstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -12400,7 +12049,6 @@ func rewriteValueS390X_OpS390XMOVBstore_0(v *Value) bool { if w != x_1.Args[0] { break } - mem := x.Args[2] if !(p.Op != OpSB && x.Uses == 1 && clobber(x)) { break } @@ -12439,7 +12087,7 @@ func rewriteValueS390X_OpS390XMOVBstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -12453,7 +12101,6 @@ func rewriteValueS390X_OpS390XMOVBstore_10(v *Value) bool { if w != x_1.Args[0] { break } - mem := x.Args[2] if !(p.Op != OpSB && x.Uses == 1 && clobber(x)) { break } @@ -12491,14 +12138,13 @@ func rewriteValueS390X_OpS390XMOVBstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if w != x.Args[1] { break } - mem := x.Args[2] if !(p.Op != OpSB && x.Uses == 1 && clobber(x)) { break } @@ -12534,7 +12180,7 @@ func rewriteValueS390X_OpS390XMOVBstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -12548,7 +12194,6 @@ func rewriteValueS390X_OpS390XMOVBstore_10(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[2] if !(p.Op != OpSB && x.Uses == 1 && clobber(x)) { break } @@ -12586,14 +12231,13 @@ func rewriteValueS390X_OpS390XMOVBstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if w != x.Args[1] { break } - mem := x.Args[2] if !(p.Op != OpSB && x.Uses == 1 && clobber(x)) { break } @@ -12629,7 +12273,7 @@ func rewriteValueS390X_OpS390XMOVBstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -12643,7 +12287,6 @@ func rewriteValueS390X_OpS390XMOVBstore_10(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[2] if !(p.Op != OpSB && x.Uses == 1 && clobber(x)) { break } @@ -12664,14 +12307,13 @@ func rewriteValueS390X_OpS390XMOVBstoreconst_0(v *Value) bool { for { sc := v.AuxInt s := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break } off := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is20Bit(ValAndOff(sc).Off() + off)) { break } @@ -12688,7 +12330,7 @@ func rewriteValueS390X_OpS390XMOVBstoreconst_0(v *Value) bool { for { sc := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddr { break @@ -12696,7 +12338,6 @@ func rewriteValueS390X_OpS390XMOVBstoreconst_0(v *Value) bool { off := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(ptr.Op != OpSB && canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd(off)) { break } @@ -12723,11 +12364,10 @@ func rewriteValueS390X_OpS390XMOVBstoreconst_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[1] + mem := x.Args[1] if p != x.Args[0] { break } - mem := x.Args[1] if !(p.Op != OpSB && x.Uses == 1 && ValAndOff(a).Off()+1 == ValAndOff(c).Off() && clobber(x)) { break } @@ -12747,7 +12387,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -12756,7 +12396,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is20Bit(c + d)) { break } @@ -12775,7 +12414,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] idx := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -12784,7 +12423,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_0(v *Value) bool { d := v_1.AuxInt ptr := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is20Bit(c + d)) { break } @@ -12803,7 +12441,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -12812,7 +12450,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is20Bit(c + d)) { break } @@ -12831,7 +12468,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -12840,7 +12477,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_0(v *Value) bool { idx := v_0.Args[0] ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is20Bit(c + d)) { break } @@ -12873,7 +12509,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -12890,7 +12526,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_0(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -12923,7 +12558,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -12940,7 +12575,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_0(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -12973,7 +12607,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -12990,7 +12624,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_0(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -13023,7 +12656,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -13040,7 +12673,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_0(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -13078,7 +12710,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -13095,7 +12727,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_0(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -13133,7 +12764,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -13150,7 +12781,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_0(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -13191,7 +12821,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -13208,7 +12838,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -13246,7 +12875,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -13263,7 +12892,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -13296,7 +12924,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -13313,7 +12941,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -13346,7 +12973,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -13363,7 +12990,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -13396,7 +13022,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -13413,7 +13039,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -13446,7 +13071,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -13463,7 +13088,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -13501,7 +13125,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -13518,7 +13142,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -13556,7 +13179,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -13573,7 +13196,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -13611,7 +13233,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -13628,7 +13250,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -13666,7 +13287,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -13683,7 +13304,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -13726,7 +13346,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -13736,7 +13356,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_20(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -13776,7 +13395,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -13786,7 +13405,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_20(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -13826,7 +13444,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -13836,7 +13454,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_20(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -13876,7 +13493,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -13886,7 +13503,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_20(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -13924,7 +13540,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -13941,7 +13557,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_20(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -13979,7 +13594,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -13996,7 +13611,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_20(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -14034,7 +13648,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -14051,7 +13665,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_20(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -14089,7 +13702,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -14106,7 +13719,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_20(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -14146,7 +13758,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -14156,7 +13768,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_20(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -14196,7 +13807,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_20(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -14206,7 +13817,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_20(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -14249,7 +13859,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_30(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -14259,7 +13869,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_30(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -14299,7 +13908,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_30(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -14309,7 +13918,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_30(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -14347,7 +13955,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_30(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -14364,7 +13972,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_30(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -14402,7 +14009,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_30(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -14419,7 +14026,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_30(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -14457,7 +14063,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_30(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -14474,7 +14080,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_30(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -14512,7 +14117,7 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_30(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -14529,7 +14134,6 @@ func rewriteValueS390X_OpS390XMOVBstoreidx_30(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -14947,14 +14551,13 @@ func rewriteValueS390X_OpS390XMOVDaddridx_0(v *Value) bool { for { c := v.AuxInt s := v.Aux - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break } d := v_0.AuxInt x := v_0.Args[0] - y := v.Args[1] if !(is20Bit(c+d) && x.Op != OpSB) { break } @@ -14995,7 +14598,7 @@ func rewriteValueS390X_OpS390XMOVDaddridx_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddr { break @@ -15003,7 +14606,6 @@ func rewriteValueS390X_OpS390XMOVDaddridx_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux x := v_0.Args[0] - y := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && x.Op != OpSB) { break } @@ -15104,14 +14706,13 @@ func rewriteValueS390X_OpS390XMOVDload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is20Bit(off1 + off2)) { break } @@ -15128,7 +14729,7 @@ func rewriteValueS390X_OpS390XMOVDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddr { break @@ -15137,7 +14738,6 @@ func rewriteValueS390X_OpS390XMOVDload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || (t.IsPtr() && t.Elem().Alignment()%8 == 0 && (off1+off2)%8 == 0))) { break } @@ -15154,17 +14754,15 @@ func rewriteValueS390X_OpS390XMOVDload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddridx { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -15182,15 +14780,13 @@ func rewriteValueS390X_OpS390XMOVDload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(ptr.Op != OpSB) { break } @@ -15211,7 +14807,7 @@ func rewriteValueS390X_OpS390XMOVDloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -15219,7 +14815,6 @@ func rewriteValueS390X_OpS390XMOVDloadidx_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -15237,7 +14832,7 @@ func rewriteValueS390X_OpS390XMOVDloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] idx := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -15245,7 +14840,6 @@ func rewriteValueS390X_OpS390XMOVDloadidx_0(v *Value) bool { } d := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -15263,7 +14857,7 @@ func rewriteValueS390X_OpS390XMOVDloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -15271,7 +14865,6 @@ func rewriteValueS390X_OpS390XMOVDloadidx_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -15289,7 +14882,7 @@ func rewriteValueS390X_OpS390XMOVDloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -15297,7 +14890,6 @@ func rewriteValueS390X_OpS390XMOVDloadidx_0(v *Value) bool { d := v_0.AuxInt idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -15313,7 +14905,6 @@ func rewriteValueS390X_OpS390XMOVDloadidx_0(v *Value) bool { } func rewriteValueS390X_OpS390XMOVDnop_0(v *Value) bool { b := v.Block - _ = b // match: (MOVDnop x) // cond: t.Compare(x.Type) == types.CMPeq // result: x @@ -15352,9 +14943,8 @@ func rewriteValueS390X_OpS390XMOVDnop_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -15379,9 +14969,8 @@ func rewriteValueS390X_OpS390XMOVDnop_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -15406,9 +14995,8 @@ func rewriteValueS390X_OpS390XMOVDnop_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -15433,9 +15021,8 @@ func rewriteValueS390X_OpS390XMOVDnop_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -15460,9 +15047,8 @@ func rewriteValueS390X_OpS390XMOVDnop_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -15487,9 +15073,8 @@ func rewriteValueS390X_OpS390XMOVDnop_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -15514,9 +15099,8 @@ func rewriteValueS390X_OpS390XMOVDnop_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -15541,10 +15125,9 @@ func rewriteValueS390X_OpS390XMOVDnop_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -15563,7 +15146,6 @@ func rewriteValueS390X_OpS390XMOVDnop_0(v *Value) bool { } func rewriteValueS390X_OpS390XMOVDnop_10(v *Value) bool { b := v.Block - _ = b // match: (MOVDnop x:(MOVBloadidx [off] {sym} ptr idx mem)) // cond: x.Uses == 1 && clobber(x) // result: @x.Block (MOVBloadidx [off] {sym} ptr idx mem) @@ -15575,10 +15157,9 @@ func rewriteValueS390X_OpS390XMOVDnop_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -15604,10 +15185,9 @@ func rewriteValueS390X_OpS390XMOVDnop_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -15633,10 +15213,9 @@ func rewriteValueS390X_OpS390XMOVDnop_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -15662,10 +15241,9 @@ func rewriteValueS390X_OpS390XMOVDnop_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -15691,10 +15269,9 @@ func rewriteValueS390X_OpS390XMOVDnop_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -15720,10 +15297,9 @@ func rewriteValueS390X_OpS390XMOVDnop_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -15742,7 +15318,6 @@ func rewriteValueS390X_OpS390XMOVDnop_10(v *Value) bool { } func rewriteValueS390X_OpS390XMOVDreg_0(v *Value) bool { b := v.Block - _ = b // match: (MOVDreg x) // cond: t.Compare(x.Type) == types.CMPeq // result: x @@ -15793,9 +15368,8 @@ func rewriteValueS390X_OpS390XMOVDreg_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -15820,9 +15394,8 @@ func rewriteValueS390X_OpS390XMOVDreg_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -15847,9 +15420,8 @@ func rewriteValueS390X_OpS390XMOVDreg_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -15874,9 +15446,8 @@ func rewriteValueS390X_OpS390XMOVDreg_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -15901,9 +15472,8 @@ func rewriteValueS390X_OpS390XMOVDreg_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -15928,9 +15498,8 @@ func rewriteValueS390X_OpS390XMOVDreg_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -15955,9 +15524,8 @@ func rewriteValueS390X_OpS390XMOVDreg_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -15975,7 +15543,6 @@ func rewriteValueS390X_OpS390XMOVDreg_0(v *Value) bool { } func rewriteValueS390X_OpS390XMOVDreg_10(v *Value) bool { b := v.Block - _ = b // match: (MOVDreg x:(MOVBZloadidx [off] {sym} ptr idx mem)) // cond: x.Uses == 1 && clobber(x) // result: @x.Block (MOVBZloadidx [off] {sym} ptr idx mem) @@ -15987,10 +15554,9 @@ func rewriteValueS390X_OpS390XMOVDreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -16016,10 +15582,9 @@ func rewriteValueS390X_OpS390XMOVDreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -16045,10 +15610,9 @@ func rewriteValueS390X_OpS390XMOVDreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -16074,10 +15638,9 @@ func rewriteValueS390X_OpS390XMOVDreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -16103,10 +15666,9 @@ func rewriteValueS390X_OpS390XMOVDreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -16132,10 +15694,9 @@ func rewriteValueS390X_OpS390XMOVDreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -16161,10 +15722,9 @@ func rewriteValueS390X_OpS390XMOVDreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -16188,7 +15748,7 @@ func rewriteValueS390X_OpS390XMOVDstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -16196,7 +15756,6 @@ func rewriteValueS390X_OpS390XMOVDstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is20Bit(off1 + off2)) { break } @@ -16214,14 +15773,13 @@ func rewriteValueS390X_OpS390XMOVDstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is16Bit(c) && isU12Bit(off) && ptr.Op != OpSB) { break } @@ -16238,7 +15796,7 @@ func rewriteValueS390X_OpS390XMOVDstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddr { break @@ -16248,7 +15806,6 @@ func rewriteValueS390X_OpS390XMOVDstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || (t.IsPtr() && t.Elem().Alignment()%8 == 0 && (off1+off2)%8 == 0))) { break } @@ -16266,18 +15823,16 @@ func rewriteValueS390X_OpS390XMOVDstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddridx { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -16296,16 +15851,14 @@ func rewriteValueS390X_OpS390XMOVDstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(ptr.Op != OpSB) { break } @@ -16337,12 +15890,11 @@ func rewriteValueS390X_OpS390XMOVDstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } w0 := x.Args[1] - mem := x.Args[2] if !(p.Op != OpSB && x.Uses == 1 && is20Bit(i-8) && clobber(x)) { break } @@ -16374,13 +15926,12 @@ func rewriteValueS390X_OpS390XMOVDstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } w0 := x.Args[1] w1 := x.Args[2] - mem := x.Args[3] if !(x.Uses == 1 && is20Bit(i-16) && clobber(x)) { break } @@ -16413,14 +15964,13 @@ func rewriteValueS390X_OpS390XMOVDstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[4] + mem := x.Args[4] if p != x.Args[0] { break } w0 := x.Args[1] w1 := x.Args[2] w2 := x.Args[3] - mem := x.Args[4] if !(x.Uses == 1 && is20Bit(i-24) && clobber(x)) { break } @@ -16444,14 +15994,13 @@ func rewriteValueS390X_OpS390XMOVDstoreconst_0(v *Value) bool { for { sc := v.AuxInt s := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break } off := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(isU12Bit(ValAndOff(sc).Off() + off)) { break } @@ -16468,7 +16017,7 @@ func rewriteValueS390X_OpS390XMOVDstoreconst_0(v *Value) bool { for { sc := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddr { break @@ -16476,7 +16025,6 @@ func rewriteValueS390X_OpS390XMOVDstoreconst_0(v *Value) bool { off := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(ptr.Op != OpSB && canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd(off)) { break } @@ -16496,7 +16044,7 @@ func rewriteValueS390X_OpS390XMOVDstoreidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -16505,7 +16053,6 @@ func rewriteValueS390X_OpS390XMOVDstoreidx_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is20Bit(c + d)) { break } @@ -16524,7 +16071,7 @@ func rewriteValueS390X_OpS390XMOVDstoreidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] idx := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -16533,7 +16080,6 @@ func rewriteValueS390X_OpS390XMOVDstoreidx_0(v *Value) bool { d := v_1.AuxInt ptr := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is20Bit(c + d)) { break } @@ -16552,7 +16098,7 @@ func rewriteValueS390X_OpS390XMOVDstoreidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -16561,7 +16107,6 @@ func rewriteValueS390X_OpS390XMOVDstoreidx_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is20Bit(c + d)) { break } @@ -16580,7 +16125,7 @@ func rewriteValueS390X_OpS390XMOVDstoreidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -16589,7 +16134,6 @@ func rewriteValueS390X_OpS390XMOVDstoreidx_0(v *Value) bool { idx := v_0.Args[0] ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is20Bit(c + d)) { break } @@ -16631,14 +16175,13 @@ func rewriteValueS390X_OpS390XMOVHBRstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if w != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -16674,7 +16217,7 @@ func rewriteValueS390X_OpS390XMOVHBRstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -16688,7 +16231,6 @@ func rewriteValueS390X_OpS390XMOVHBRstore_0(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -16726,14 +16268,13 @@ func rewriteValueS390X_OpS390XMOVHBRstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if w != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -16769,7 +16310,7 @@ func rewriteValueS390X_OpS390XMOVHBRstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -16783,7 +16324,6 @@ func rewriteValueS390X_OpS390XMOVHBRstore_0(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -16825,7 +16365,7 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -16835,7 +16375,6 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -16875,7 +16414,7 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -16885,7 +16424,6 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -16925,7 +16463,7 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -16935,7 +16473,6 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -16975,7 +16512,7 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -16985,7 +16522,6 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -17023,7 +16559,7 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -17040,7 +16576,6 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_0(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -17078,7 +16613,7 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -17095,7 +16630,6 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_0(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -17133,7 +16667,7 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -17150,7 +16684,6 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_0(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -17188,7 +16721,7 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -17205,7 +16738,6 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_0(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -17245,7 +16777,7 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -17255,7 +16787,6 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -17295,7 +16826,7 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -17305,7 +16836,6 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -17348,7 +16878,7 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -17358,7 +16888,6 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_10(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -17398,7 +16927,7 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -17408,7 +16937,6 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_10(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -17446,7 +16974,7 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -17463,7 +16991,6 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_10(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -17501,7 +17028,7 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -17518,7 +17045,6 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_10(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -17556,7 +17082,7 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -17573,7 +17099,6 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_10(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -17611,7 +17136,7 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -17628,7 +17153,6 @@ func rewriteValueS390X_OpS390XMOVHBRstoreidx_10(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -17678,14 +17202,13 @@ func rewriteValueS390X_OpS390XMOVHZload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is20Bit(off1 + off2)) { break } @@ -17702,7 +17225,7 @@ func rewriteValueS390X_OpS390XMOVHZload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddr { break @@ -17711,7 +17234,6 @@ func rewriteValueS390X_OpS390XMOVHZload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || (t.IsPtr() && t.Elem().Alignment()%2 == 0 && (off1+off2)%2 == 0))) { break } @@ -17728,17 +17250,15 @@ func rewriteValueS390X_OpS390XMOVHZload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddridx { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -17756,15 +17276,13 @@ func rewriteValueS390X_OpS390XMOVHZload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(ptr.Op != OpSB) { break } @@ -17785,7 +17303,7 @@ func rewriteValueS390X_OpS390XMOVHZloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -17793,7 +17311,6 @@ func rewriteValueS390X_OpS390XMOVHZloadidx_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -17811,7 +17328,7 @@ func rewriteValueS390X_OpS390XMOVHZloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] idx := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -17819,7 +17336,6 @@ func rewriteValueS390X_OpS390XMOVHZloadidx_0(v *Value) bool { } d := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -17837,7 +17353,7 @@ func rewriteValueS390X_OpS390XMOVHZloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -17845,7 +17361,6 @@ func rewriteValueS390X_OpS390XMOVHZloadidx_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -17863,7 +17378,7 @@ func rewriteValueS390X_OpS390XMOVHZloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -17871,7 +17386,6 @@ func rewriteValueS390X_OpS390XMOVHZloadidx_0(v *Value) bool { d := v_0.AuxInt idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -17887,7 +17401,6 @@ func rewriteValueS390X_OpS390XMOVHZloadidx_0(v *Value) bool { } func rewriteValueS390X_OpS390XMOVHZreg_0(v *Value) bool { b := v.Block - _ = b // match: (MOVHZreg x:(MOVBZload _ _)) // cond: // result: (MOVDreg x) @@ -17990,9 +17503,8 @@ func rewriteValueS390X_OpS390XMOVHZreg_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -18016,9 +17528,8 @@ func rewriteValueS390X_OpS390XMOVHZreg_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -18042,10 +17553,9 @@ func rewriteValueS390X_OpS390XMOVHZreg_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -18064,9 +17574,7 @@ func rewriteValueS390X_OpS390XMOVHZreg_0(v *Value) bool { } func rewriteValueS390X_OpS390XMOVHZreg_10(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MOVHZreg x:(MOVHloadidx [off] {sym} ptr idx mem)) // cond: x.Uses == 1 && clobber(x) // result: @x.Block (MOVHZloadidx [off] {sym} ptr idx mem) @@ -18077,10 +17585,9 @@ func rewriteValueS390X_OpS390XMOVHZreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -18149,14 +17656,13 @@ func rewriteValueS390X_OpS390XMOVHload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is20Bit(off1 + off2)) { break } @@ -18173,7 +17679,7 @@ func rewriteValueS390X_OpS390XMOVHload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddr { break @@ -18182,7 +17688,6 @@ func rewriteValueS390X_OpS390XMOVHload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || (t.IsPtr() && t.Elem().Alignment()%2 == 0 && (off1+off2)%2 == 0))) { break } @@ -18199,17 +17704,15 @@ func rewriteValueS390X_OpS390XMOVHload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddridx { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -18227,15 +17730,13 @@ func rewriteValueS390X_OpS390XMOVHload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(ptr.Op != OpSB) { break } @@ -18256,7 +17757,7 @@ func rewriteValueS390X_OpS390XMOVHloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -18264,7 +17765,6 @@ func rewriteValueS390X_OpS390XMOVHloadidx_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -18282,7 +17782,7 @@ func rewriteValueS390X_OpS390XMOVHloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] idx := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -18290,7 +17790,6 @@ func rewriteValueS390X_OpS390XMOVHloadidx_0(v *Value) bool { } d := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -18308,7 +17807,7 @@ func rewriteValueS390X_OpS390XMOVHloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -18316,7 +17815,6 @@ func rewriteValueS390X_OpS390XMOVHloadidx_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -18334,7 +17832,7 @@ func rewriteValueS390X_OpS390XMOVHloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -18342,7 +17840,6 @@ func rewriteValueS390X_OpS390XMOVHloadidx_0(v *Value) bool { d := v_0.AuxInt idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -18358,7 +17855,6 @@ func rewriteValueS390X_OpS390XMOVHloadidx_0(v *Value) bool { } func rewriteValueS390X_OpS390XMOVHreg_0(v *Value) bool { b := v.Block - _ = b // match: (MOVHreg x:(MOVBload _ _)) // cond: // result: (MOVDreg x) @@ -18486,9 +17982,8 @@ func rewriteValueS390X_OpS390XMOVHreg_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -18506,9 +18001,7 @@ func rewriteValueS390X_OpS390XMOVHreg_0(v *Value) bool { } func rewriteValueS390X_OpS390XMOVHreg_10(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MOVHreg x:(MOVHload [off] {sym} ptr mem)) // cond: x.Uses == 1 && clobber(x) // result: @x.Block (MOVHload [off] {sym} ptr mem) @@ -18519,9 +18012,8 @@ func rewriteValueS390X_OpS390XMOVHreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -18545,10 +18037,9 @@ func rewriteValueS390X_OpS390XMOVHreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -18573,10 +18064,9 @@ func rewriteValueS390X_OpS390XMOVHreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -18620,14 +18110,13 @@ func rewriteValueS390X_OpS390XMOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVHreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpS390XMOVHstore) v.AuxInt = off v.Aux = sym @@ -18642,14 +18131,13 @@ func rewriteValueS390X_OpS390XMOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVHZreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpS390XMOVHstore) v.AuxInt = off v.Aux = sym @@ -18664,7 +18152,7 @@ func rewriteValueS390X_OpS390XMOVHstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -18672,7 +18160,6 @@ func rewriteValueS390X_OpS390XMOVHstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is20Bit(off1 + off2)) { break } @@ -18690,14 +18177,13 @@ func rewriteValueS390X_OpS390XMOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(isU12Bit(off) && ptr.Op != OpSB) { break } @@ -18714,7 +18200,7 @@ func rewriteValueS390X_OpS390XMOVHstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddr { break @@ -18724,7 +18210,6 @@ func rewriteValueS390X_OpS390XMOVHstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || (t.IsPtr() && t.Elem().Alignment()%2 == 0 && (off1+off2)%2 == 0))) { break } @@ -18742,18 +18227,16 @@ func rewriteValueS390X_OpS390XMOVHstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddridx { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -18772,16 +18255,14 @@ func rewriteValueS390X_OpS390XMOVHstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(ptr.Op != OpSB) { break } @@ -18813,7 +18294,7 @@ func rewriteValueS390X_OpS390XMOVHstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -18827,7 +18308,6 @@ func rewriteValueS390X_OpS390XMOVHstore_0(v *Value) bool { if w != x_1.Args[0] { break } - mem := x.Args[2] if !(p.Op != OpSB && x.Uses == 1 && clobber(x)) { break } @@ -18863,7 +18343,7 @@ func rewriteValueS390X_OpS390XMOVHstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -18877,7 +18357,6 @@ func rewriteValueS390X_OpS390XMOVHstore_0(v *Value) bool { if w != x_1.Args[0] { break } - mem := x.Args[2] if !(p.Op != OpSB && x.Uses == 1 && clobber(x)) { break } @@ -18908,7 +18387,7 @@ func rewriteValueS390X_OpS390XMOVHstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -18922,7 +18401,6 @@ func rewriteValueS390X_OpS390XMOVHstore_0(v *Value) bool { if w != x_1.Args[0] { break } - mem := x.Args[2] if !(p.Op != OpSB && x.Uses == 1 && clobber(x)) { break } @@ -18961,7 +18439,7 @@ func rewriteValueS390X_OpS390XMOVHstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -18975,7 +18453,6 @@ func rewriteValueS390X_OpS390XMOVHstore_10(v *Value) bool { if w != x_1.Args[0] { break } - mem := x.Args[2] if !(p.Op != OpSB && x.Uses == 1 && clobber(x)) { break } @@ -18991,23 +18468,20 @@ func rewriteValueS390X_OpS390XMOVHstore_10(v *Value) bool { } func rewriteValueS390X_OpS390XMOVHstoreconst_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MOVHstoreconst [sc] {s} (ADDconst [off] ptr) mem) // cond: isU12Bit(ValAndOff(sc).Off()+off) // result: (MOVHstoreconst [ValAndOff(sc).add(off)] {s} ptr mem) for { sc := v.AuxInt s := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break } off := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(isU12Bit(ValAndOff(sc).Off() + off)) { break } @@ -19024,7 +18498,7 @@ func rewriteValueS390X_OpS390XMOVHstoreconst_0(v *Value) bool { for { sc := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddr { break @@ -19032,7 +18506,6 @@ func rewriteValueS390X_OpS390XMOVHstoreconst_0(v *Value) bool { off := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(ptr.Op != OpSB && canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd(off)) { break } @@ -19059,11 +18532,10 @@ func rewriteValueS390X_OpS390XMOVHstoreconst_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[1] + mem := x.Args[1] if p != x.Args[0] { break } - mem := x.Args[1] if !(p.Op != OpSB && x.Uses == 1 && ValAndOff(a).Off()+2 == ValAndOff(c).Off() && clobber(x)) { break } @@ -19086,7 +18558,7 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -19095,7 +18567,6 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is20Bit(c + d)) { break } @@ -19114,7 +18585,7 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] idx := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -19123,7 +18594,6 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_0(v *Value) bool { d := v_1.AuxInt ptr := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is20Bit(c + d)) { break } @@ -19142,7 +18612,7 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -19151,7 +18621,6 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is20Bit(c + d)) { break } @@ -19170,7 +18639,7 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -19179,7 +18648,6 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_0(v *Value) bool { idx := v_0.Args[0] ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is20Bit(c + d)) { break } @@ -19212,7 +18680,7 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -19229,7 +18697,6 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_0(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -19262,7 +18729,7 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -19279,7 +18746,6 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_0(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -19312,7 +18778,7 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -19329,7 +18795,6 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_0(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -19362,7 +18827,7 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -19379,7 +18844,6 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_0(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -19417,7 +18881,7 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -19434,7 +18898,6 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_0(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -19472,7 +18935,7 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -19489,7 +18952,6 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_0(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -19530,7 +18992,7 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -19547,7 +19009,6 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -19585,7 +19046,7 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -19602,7 +19063,6 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -19635,7 +19095,7 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -19652,7 +19112,6 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -19685,7 +19144,7 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -19702,7 +19161,6 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -19735,7 +19193,7 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -19752,7 +19210,6 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -19785,7 +19242,7 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -19802,7 +19259,6 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -19840,7 +19296,7 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -19857,7 +19313,6 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -19895,7 +19350,7 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -19912,7 +19367,6 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -19950,7 +19404,7 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -19967,7 +19421,6 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -20005,7 +19458,7 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -20022,7 +19475,6 @@ func rewriteValueS390X_OpS390XMOVHstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -20064,14 +19516,13 @@ func rewriteValueS390X_OpS390XMOVWBRstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if w != x.Args[1] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -20107,7 +19558,7 @@ func rewriteValueS390X_OpS390XMOVWBRstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -20121,7 +19572,6 @@ func rewriteValueS390X_OpS390XMOVWBRstore_0(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -20163,7 +19613,7 @@ func rewriteValueS390X_OpS390XMOVWBRstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -20173,7 +19623,6 @@ func rewriteValueS390X_OpS390XMOVWBRstoreidx_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -20213,7 +19662,7 @@ func rewriteValueS390X_OpS390XMOVWBRstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -20223,7 +19672,6 @@ func rewriteValueS390X_OpS390XMOVWBRstoreidx_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -20263,7 +19711,7 @@ func rewriteValueS390X_OpS390XMOVWBRstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -20273,7 +19721,6 @@ func rewriteValueS390X_OpS390XMOVWBRstoreidx_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -20313,7 +19760,7 @@ func rewriteValueS390X_OpS390XMOVWBRstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -20323,7 +19770,6 @@ func rewriteValueS390X_OpS390XMOVWBRstoreidx_0(v *Value) bool { if w != x.Args[2] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -20361,7 +19807,7 @@ func rewriteValueS390X_OpS390XMOVWBRstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -20378,7 +19824,6 @@ func rewriteValueS390X_OpS390XMOVWBRstoreidx_0(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -20416,7 +19861,7 @@ func rewriteValueS390X_OpS390XMOVWBRstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -20433,7 +19878,6 @@ func rewriteValueS390X_OpS390XMOVWBRstoreidx_0(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -20471,7 +19915,7 @@ func rewriteValueS390X_OpS390XMOVWBRstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -20488,7 +19932,6 @@ func rewriteValueS390X_OpS390XMOVWBRstoreidx_0(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -20526,7 +19969,7 @@ func rewriteValueS390X_OpS390XMOVWBRstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -20543,7 +19986,6 @@ func rewriteValueS390X_OpS390XMOVWBRstoreidx_0(v *Value) bool { if w != w0.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -20593,14 +20035,13 @@ func rewriteValueS390X_OpS390XMOVWZload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is20Bit(off1 + off2)) { break } @@ -20617,7 +20058,7 @@ func rewriteValueS390X_OpS390XMOVWZload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddr { break @@ -20626,7 +20067,6 @@ func rewriteValueS390X_OpS390XMOVWZload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || (t.IsPtr() && t.Elem().Alignment()%4 == 0 && (off1+off2)%4 == 0))) { break } @@ -20643,17 +20083,15 @@ func rewriteValueS390X_OpS390XMOVWZload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddridx { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -20671,15 +20109,13 @@ func rewriteValueS390X_OpS390XMOVWZload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(ptr.Op != OpSB) { break } @@ -20700,7 +20136,7 @@ func rewriteValueS390X_OpS390XMOVWZloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -20708,7 +20144,6 @@ func rewriteValueS390X_OpS390XMOVWZloadidx_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -20726,7 +20161,7 @@ func rewriteValueS390X_OpS390XMOVWZloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] idx := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -20734,7 +20169,6 @@ func rewriteValueS390X_OpS390XMOVWZloadidx_0(v *Value) bool { } d := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -20752,7 +20186,7 @@ func rewriteValueS390X_OpS390XMOVWZloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -20760,7 +20194,6 @@ func rewriteValueS390X_OpS390XMOVWZloadidx_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -20778,7 +20211,7 @@ func rewriteValueS390X_OpS390XMOVWZloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -20786,7 +20219,6 @@ func rewriteValueS390X_OpS390XMOVWZloadidx_0(v *Value) bool { d := v_0.AuxInt idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -20802,7 +20234,6 @@ func rewriteValueS390X_OpS390XMOVWZloadidx_0(v *Value) bool { } func rewriteValueS390X_OpS390XMOVWZreg_0(v *Value) bool { b := v.Block - _ = b // match: (MOVWZreg x:(MOVBZload _ _)) // cond: // result: (MOVDreg x) @@ -20930,9 +20361,8 @@ func rewriteValueS390X_OpS390XMOVWZreg_0(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -20950,7 +20380,6 @@ func rewriteValueS390X_OpS390XMOVWZreg_0(v *Value) bool { } func rewriteValueS390X_OpS390XMOVWZreg_10(v *Value) bool { b := v.Block - _ = b // match: (MOVWZreg x:(MOVWload [off] {sym} ptr mem)) // cond: x.Uses == 1 && clobber(x) // result: @x.Block (MOVWZload [off] {sym} ptr mem) @@ -20961,9 +20390,8 @@ func rewriteValueS390X_OpS390XMOVWZreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -20987,10 +20415,9 @@ func rewriteValueS390X_OpS390XMOVWZreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -21015,10 +20442,9 @@ func rewriteValueS390X_OpS390XMOVWZreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -21070,14 +20496,13 @@ func rewriteValueS390X_OpS390XMOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(is20Bit(off1 + off2)) { break } @@ -21094,7 +20519,7 @@ func rewriteValueS390X_OpS390XMOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddr { break @@ -21103,7 +20528,6 @@ func rewriteValueS390X_OpS390XMOVWload_0(v *Value) bool { off2 := v_0.AuxInt sym2 := v_0.Aux base := v_0.Args[0] - mem := v.Args[1] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || (t.IsPtr() && t.Elem().Alignment()%4 == 0 && (off1+off2)%4 == 0))) { break } @@ -21120,17 +20544,15 @@ func rewriteValueS390X_OpS390XMOVWload_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddridx { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -21148,15 +20570,13 @@ func rewriteValueS390X_OpS390XMOVWload_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] - mem := v.Args[1] + ptr := v_0.Args[0] if !(ptr.Op != OpSB) { break } @@ -21177,7 +20597,7 @@ func rewriteValueS390X_OpS390XMOVWloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -21185,7 +20605,6 @@ func rewriteValueS390X_OpS390XMOVWloadidx_0(v *Value) bool { d := v_0.AuxInt ptr := v_0.Args[0] idx := v.Args[1] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -21203,7 +20622,7 @@ func rewriteValueS390X_OpS390XMOVWloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] idx := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -21211,7 +20630,6 @@ func rewriteValueS390X_OpS390XMOVWloadidx_0(v *Value) bool { } d := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -21229,7 +20647,7 @@ func rewriteValueS390X_OpS390XMOVWloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -21237,7 +20655,6 @@ func rewriteValueS390X_OpS390XMOVWloadidx_0(v *Value) bool { } d := v_1.AuxInt idx := v_1.Args[0] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -21255,7 +20672,7 @@ func rewriteValueS390X_OpS390XMOVWloadidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -21263,7 +20680,6 @@ func rewriteValueS390X_OpS390XMOVWloadidx_0(v *Value) bool { d := v_0.AuxInt idx := v_0.Args[0] ptr := v.Args[1] - mem := v.Args[2] if !(is20Bit(c + d)) { break } @@ -21411,7 +20827,6 @@ func rewriteValueS390X_OpS390XMOVWreg_0(v *Value) bool { } func rewriteValueS390X_OpS390XMOVWreg_10(v *Value) bool { b := v.Block - _ = b // match: (MOVWreg x:(MOVWreg _)) // cond: // result: (MOVDreg x) @@ -21460,9 +20875,8 @@ func rewriteValueS390X_OpS390XMOVWreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -21486,9 +20900,8 @@ func rewriteValueS390X_OpS390XMOVWreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(x.Uses == 1 && clobber(x)) { break } @@ -21512,10 +20925,9 @@ func rewriteValueS390X_OpS390XMOVWreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -21540,10 +20952,9 @@ func rewriteValueS390X_OpS390XMOVWreg_10(v *Value) bool { } off := x.AuxInt sym := x.Aux - _ = x.Args[2] + mem := x.Args[2] ptr := x.Args[0] idx := x.Args[1] - mem := x.Args[2] if !(x.Uses == 1 && clobber(x)) { break } @@ -21567,14 +20978,13 @@ func rewriteValueS390X_OpS390XMOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVWreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpS390XMOVWstore) v.AuxInt = off v.Aux = sym @@ -21589,14 +20999,13 @@ func rewriteValueS390X_OpS390XMOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVWZreg { break } x := v_1.Args[0] - mem := v.Args[2] v.reset(OpS390XMOVWstore) v.AuxInt = off v.Aux = sym @@ -21611,7 +21020,7 @@ func rewriteValueS390X_OpS390XMOVWstore_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -21619,7 +21028,6 @@ func rewriteValueS390X_OpS390XMOVWstore_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is20Bit(off1 + off2)) { break } @@ -21637,14 +21045,13 @@ func rewriteValueS390X_OpS390XMOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVDconst { break } c := v_1.AuxInt - mem := v.Args[2] if !(is16Bit(c) && isU12Bit(off) && ptr.Op != OpSB) { break } @@ -21661,7 +21068,7 @@ func rewriteValueS390X_OpS390XMOVWstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddr { break @@ -21671,7 +21078,6 @@ func rewriteValueS390X_OpS390XMOVWstore_0(v *Value) bool { sym2 := v_0.Aux base := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2) && (base.Op != OpSB || (t.IsPtr() && t.Elem().Alignment()%4 == 0 && (off1+off2)%4 == 0))) { break } @@ -21689,18 +21095,16 @@ func rewriteValueS390X_OpS390XMOVWstore_0(v *Value) bool { for { off1 := v.AuxInt sym1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddridx { break } off2 := v_0.AuxInt sym2 := v_0.Aux - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32Bit(off1+off2) && canMergeSym(sym1, sym2)) { break } @@ -21719,16 +21123,14 @@ func rewriteValueS390X_OpS390XMOVWstore_0(v *Value) bool { for { off := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XADD { break } - _ = v_0.Args[1] - ptr := v_0.Args[0] idx := v_0.Args[1] + ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(ptr.Op != OpSB) { break } @@ -21767,14 +21169,13 @@ func rewriteValueS390X_OpS390XMOVWstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } if w != x.Args[1] { break } - mem := x.Args[2] if !(p.Op != OpSB && x.Uses == 1 && clobber(x)) { break } @@ -21810,7 +21211,7 @@ func rewriteValueS390X_OpS390XMOVWstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } @@ -21824,7 +21225,6 @@ func rewriteValueS390X_OpS390XMOVWstore_0(v *Value) bool { if w != x_1.Args[0] { break } - mem := x.Args[2] if !(p.Op != OpSB && x.Uses == 1 && clobber(x)) { break } @@ -21855,12 +21255,11 @@ func rewriteValueS390X_OpS390XMOVWstore_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[2] + mem := x.Args[2] if p != x.Args[0] { break } w0 := x.Args[1] - mem := x.Args[2] if !(p.Op != OpSB && x.Uses == 1 && is20Bit(i-4) && clobber(x)) { break } @@ -21895,13 +21294,12 @@ func rewriteValueS390X_OpS390XMOVWstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } w0 := x.Args[1] w1 := x.Args[2] - mem := x.Args[3] if !(x.Uses == 1 && is20Bit(i-8) && clobber(x)) { break } @@ -21934,14 +21332,13 @@ func rewriteValueS390X_OpS390XMOVWstore_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[4] + mem := x.Args[4] if p != x.Args[0] { break } w0 := x.Args[1] w1 := x.Args[2] w2 := x.Args[3] - mem := x.Args[4] if !(x.Uses == 1 && is20Bit(i-12) && clobber(x)) { break } @@ -21960,23 +21357,20 @@ func rewriteValueS390X_OpS390XMOVWstore_10(v *Value) bool { } func rewriteValueS390X_OpS390XMOVWstoreconst_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (MOVWstoreconst [sc] {s} (ADDconst [off] ptr) mem) // cond: isU12Bit(ValAndOff(sc).Off()+off) // result: (MOVWstoreconst [ValAndOff(sc).add(off)] {s} ptr mem) for { sc := v.AuxInt s := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break } off := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(isU12Bit(ValAndOff(sc).Off() + off)) { break } @@ -21993,7 +21387,7 @@ func rewriteValueS390X_OpS390XMOVWstoreconst_0(v *Value) bool { for { sc := v.AuxInt sym1 := v.Aux - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDaddr { break @@ -22001,7 +21395,6 @@ func rewriteValueS390X_OpS390XMOVWstoreconst_0(v *Value) bool { off := v_0.AuxInt sym2 := v_0.Aux ptr := v_0.Args[0] - mem := v.Args[1] if !(ptr.Op != OpSB && canMergeSym(sym1, sym2) && ValAndOff(sc).canAdd(off)) { break } @@ -22028,11 +21421,10 @@ func rewriteValueS390X_OpS390XMOVWstoreconst_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[1] + mem := x.Args[1] if p != x.Args[0] { break } - mem := x.Args[1] if !(p.Op != OpSB && x.Uses == 1 && ValAndOff(a).Off()+4 == ValAndOff(c).Off() && clobber(x)) { break } @@ -22055,7 +21447,7 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -22064,7 +21456,6 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_0(v *Value) bool { ptr := v_0.Args[0] idx := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is20Bit(c + d)) { break } @@ -22083,7 +21474,7 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] idx := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -22092,7 +21483,6 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_0(v *Value) bool { d := v_1.AuxInt ptr := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is20Bit(c + d)) { break } @@ -22111,7 +21501,7 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] ptr := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -22120,7 +21510,6 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_0(v *Value) bool { d := v_1.AuxInt idx := v_1.Args[0] val := v.Args[2] - mem := v.Args[3] if !(is20Bit(c + d)) { break } @@ -22139,7 +21528,7 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_0(v *Value) bool { for { c := v.AuxInt sym := v.Aux - _ = v.Args[3] + mem := v.Args[3] v_0 := v.Args[0] if v_0.Op != OpS390XADDconst { break @@ -22148,7 +21537,6 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_0(v *Value) bool { idx := v_0.Args[0] ptr := v.Args[1] val := v.Args[2] - mem := v.Args[3] if !(is20Bit(c + d)) { break } @@ -22181,7 +21569,7 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -22198,7 +21586,6 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_0(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -22231,7 +21618,7 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -22248,7 +21635,6 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_0(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -22281,7 +21667,7 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -22298,7 +21684,6 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_0(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -22331,7 +21716,7 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -22348,7 +21733,6 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_0(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -22386,7 +21770,7 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -22403,7 +21787,6 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_0(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -22441,7 +21824,7 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -22458,7 +21841,6 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_0(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -22499,7 +21881,7 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } @@ -22516,7 +21898,6 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -22554,7 +21935,7 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_10(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if idx != x.Args[0] { break } @@ -22571,7 +21952,6 @@ func rewriteValueS390X_OpS390XMOVWstoreidx_10(v *Value) bool { if w != x_2.Args[0] { break } - mem := x.Args[3] if !(x.Uses == 1 && clobber(x)) { break } @@ -22610,13 +21990,12 @@ func rewriteValueS390X_OpS390XMULLD_0(v *Value) bool { // cond: is32Bit(c) // result: (MULLDconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c)) { break } @@ -22638,9 +22017,8 @@ func rewriteValueS390X_OpS390XMULLD_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -22658,17 +22036,15 @@ func rewriteValueS390X_OpS390XMULLD_0(v *Value) bool { // result: (MULLDload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVDload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -22686,17 +22062,15 @@ func rewriteValueS390X_OpS390XMULLD_0(v *Value) bool { // result: (MULLDload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVDload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -22722,9 +22096,8 @@ func rewriteValueS390X_OpS390XMULLD_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -22741,7 +22114,6 @@ func rewriteValueS390X_OpS390XMULLD_0(v *Value) bool { } func rewriteValueS390X_OpS390XMULLDconst_0(v *Value) bool { b := v.Block - _ = b // match: (MULLDconst [-1] x) // cond: // result: (NEG x) @@ -22844,7 +22216,6 @@ func rewriteValueS390X_OpS390XMULLDconst_0(v *Value) bool { } func rewriteValueS390X_OpS390XMULLDload_0(v *Value) bool { b := v.Block - _ = b // match: (MULLDload [off] {sym} x ptr1 (FMOVDstore [off] {sym} ptr2 y _)) // cond: isSamePtr(ptr1, ptr2) // result: (MULLD x (LGDR y)) @@ -22884,7 +22255,7 @@ func rewriteValueS390X_OpS390XMULLDload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -22892,7 +22263,6 @@ func rewriteValueS390X_OpS390XMULLDload_0(v *Value) bool { } off2 := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(off1+off2)) { break } @@ -22910,7 +22280,7 @@ func rewriteValueS390X_OpS390XMULLDload_0(v *Value) bool { for { o1 := v.AuxInt s1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVDaddr { @@ -22919,7 +22289,6 @@ func rewriteValueS390X_OpS390XMULLDload_0(v *Value) bool { o2 := v_1.AuxInt s2 := v_1.Aux ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(o1+o2) && canMergeSym(s1, s2)) { break } @@ -22954,13 +22323,12 @@ func rewriteValueS390X_OpS390XMULLW_0(v *Value) bool { // cond: // result: (MULLWconst [int64(int32(c))] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpS390XMULLWconst) v.AuxInt = int64(int32(c)) v.AddArg(x) @@ -22979,9 +22347,8 @@ func rewriteValueS390X_OpS390XMULLW_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -22999,17 +22366,15 @@ func rewriteValueS390X_OpS390XMULLW_0(v *Value) bool { // result: (MULLWload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVWload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -23027,17 +22392,15 @@ func rewriteValueS390X_OpS390XMULLW_0(v *Value) bool { // result: (MULLWload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVWload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -23063,9 +22426,8 @@ func rewriteValueS390X_OpS390XMULLW_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -23091,9 +22453,8 @@ func rewriteValueS390X_OpS390XMULLW_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -23111,17 +22472,15 @@ func rewriteValueS390X_OpS390XMULLW_0(v *Value) bool { // result: (MULLWload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVWZload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -23139,17 +22498,15 @@ func rewriteValueS390X_OpS390XMULLW_0(v *Value) bool { // result: (MULLWload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVWZload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -23175,9 +22532,8 @@ func rewriteValueS390X_OpS390XMULLW_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -23194,7 +22550,6 @@ func rewriteValueS390X_OpS390XMULLW_0(v *Value) bool { } func rewriteValueS390X_OpS390XMULLWconst_0(v *Value) bool { b := v.Block - _ = b // match: (MULLWconst [-1] x) // cond: // result: (NEGW x) @@ -23302,7 +22657,7 @@ func rewriteValueS390X_OpS390XMULLWload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -23310,7 +22665,6 @@ func rewriteValueS390X_OpS390XMULLWload_0(v *Value) bool { } off2 := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(off1+off2)) { break } @@ -23328,7 +22682,7 @@ func rewriteValueS390X_OpS390XMULLWload_0(v *Value) bool { for { o1 := v.AuxInt s1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVDaddr { @@ -23337,7 +22691,6 @@ func rewriteValueS390X_OpS390XMULLWload_0(v *Value) bool { o2 := v_1.AuxInt s2 := v_1.Aux ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(o1+o2) && canMergeSym(s1, s2)) { break } @@ -23407,9 +22760,7 @@ func rewriteValueS390X_OpS390XNEGW_0(v *Value) bool { } func rewriteValueS390X_OpS390XNOT_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (NOT x) // cond: true // result: (XOR (MOVDconst [-1]) x) @@ -23445,7 +22796,6 @@ func rewriteValueS390X_OpS390XNOTW_0(v *Value) bool { } func rewriteValueS390X_OpS390XOR_0(v *Value) bool { b := v.Block - _ = b // match: (OR x (MOVDconst [c])) // cond: isU32Bit(c) // result: (ORconst [c] x) @@ -23469,13 +22819,12 @@ func rewriteValueS390X_OpS390XOR_0(v *Value) bool { // cond: isU32Bit(c) // result: (ORconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isU32Bit(c)) { break } @@ -23756,9 +23105,7 @@ func rewriteValueS390X_OpS390XOR_0(v *Value) bool { } func rewriteValueS390X_OpS390XOR_10(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (OR (MOVDconst [c]) (MOVDconst [d])) // cond: // result: (MOVDconst [c|d]) @@ -23801,9 +23148,8 @@ func rewriteValueS390X_OpS390XOR_10(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -23824,9 +23170,8 @@ func rewriteValueS390X_OpS390XOR_10(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -23844,17 +23189,15 @@ func rewriteValueS390X_OpS390XOR_10(v *Value) bool { // result: (ORload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVDload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -23872,17 +23215,15 @@ func rewriteValueS390X_OpS390XOR_10(v *Value) bool { // result: (ORload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVDload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -23908,9 +23249,8 @@ func rewriteValueS390X_OpS390XOR_10(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -23934,9 +23274,8 @@ func rewriteValueS390X_OpS390XOR_10(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -23990,9 +23329,8 @@ func rewriteValueS390X_OpS390XOR_10(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] x1 := v.Args[1] if x1.Op != OpS390XMOVBZload { break @@ -24032,9 +23370,8 @@ func rewriteValueS390X_OpS390XOR_10(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -24074,9 +23411,7 @@ func rewriteValueS390X_OpS390XOR_10(v *Value) bool { } func rewriteValueS390X_OpS390XOR_20(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (OR sh:(SLDconst [16] x0:(MOVHZload [i0] {s} p mem)) x1:(MOVHZload [i1] {s} p mem)) // cond: i1 == i0+2 && p.Op != OpSB && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh) // result: @mergePoint(b,x0,x1) (MOVWZload [i0] {s} p mem) @@ -24095,9 +23430,8 @@ func rewriteValueS390X_OpS390XOR_20(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] x1 := v.Args[1] if x1.Op != OpS390XMOVHZload { break @@ -24137,9 +23471,8 @@ func rewriteValueS390X_OpS390XOR_20(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -24193,9 +23526,8 @@ func rewriteValueS390X_OpS390XOR_20(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] x1 := v.Args[1] if x1.Op != OpS390XMOVWZload { break @@ -24240,14 +23572,13 @@ func rewriteValueS390X_OpS390XOR_20(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] or := v.Args[1] if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLDconst { break @@ -24268,7 +23599,6 @@ func rewriteValueS390X_OpS390XOR_20(v *Value) bool { if mem != x1.Args[1] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0-8 && j1%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -24304,9 +23634,8 @@ func rewriteValueS390X_OpS390XOR_20(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] or := v.Args[1] if or.Op != OpS390XOR { break @@ -24361,7 +23690,7 @@ func rewriteValueS390X_OpS390XOR_20(v *Value) bool { if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLDconst { break @@ -24373,10 +23702,8 @@ func rewriteValueS390X_OpS390XOR_20(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] - y := or.Args[1] + p := x1.Args[0] s0 := v.Args[1] if s0.Op != OpS390XSLDconst { break @@ -24438,9 +23765,8 @@ func rewriteValueS390X_OpS390XOR_20(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] s0 := v.Args[1] if s0.Op != OpS390XSLDconst { break @@ -24496,14 +23822,13 @@ func rewriteValueS390X_OpS390XOR_20(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] or := v.Args[1] if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLDconst { break @@ -24524,7 +23849,6 @@ func rewriteValueS390X_OpS390XOR_20(v *Value) bool { if mem != x1.Args[1] { break } - y := or.Args[1] if !(i1 == i0+2 && j1 == j0-16 && j1%32 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -24560,9 +23884,8 @@ func rewriteValueS390X_OpS390XOR_20(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] or := v.Args[1] if or.Op != OpS390XOR { break @@ -24617,7 +23940,7 @@ func rewriteValueS390X_OpS390XOR_20(v *Value) bool { if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLDconst { break @@ -24629,10 +23952,8 @@ func rewriteValueS390X_OpS390XOR_20(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] - y := or.Args[1] + p := x1.Args[0] s0 := v.Args[1] if s0.Op != OpS390XSLDconst { break @@ -24676,9 +23997,7 @@ func rewriteValueS390X_OpS390XOR_20(v *Value) bool { } func rewriteValueS390X_OpS390XOR_30(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (OR or:(OR y s1:(SLDconst [j1] x1:(MOVHZload [i1] {s} p mem))) s0:(SLDconst [j0] x0:(MOVHZload [i0] {s} p mem))) // cond: i1 == i0+2 && j1 == j0-16 && j1 % 32 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (OR (SLDconst [j1] (MOVWZload [i0] {s} p mem)) y) @@ -24701,9 +24020,8 @@ func rewriteValueS390X_OpS390XOR_30(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] s0 := v.Args[1] if s0.Op != OpS390XSLDconst { break @@ -24754,10 +24072,9 @@ func rewriteValueS390X_OpS390XOR_30(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -24808,10 +24125,9 @@ func rewriteValueS390X_OpS390XOR_30(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -24862,10 +24178,9 @@ func rewriteValueS390X_OpS390XOR_30(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -24916,10 +24231,9 @@ func rewriteValueS390X_OpS390XOR_30(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -24977,10 +24291,9 @@ func rewriteValueS390X_OpS390XOR_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpS390XMOVBZloadidx { break @@ -25031,10 +24344,9 @@ func rewriteValueS390X_OpS390XOR_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpS390XMOVBZloadidx { break @@ -25085,10 +24397,9 @@ func rewriteValueS390X_OpS390XOR_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpS390XMOVBZloadidx { break @@ -25139,10 +24450,9 @@ func rewriteValueS390X_OpS390XOR_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpS390XMOVBZloadidx { break @@ -25186,10 +24496,9 @@ func rewriteValueS390X_OpS390XOR_30(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -25233,9 +24542,7 @@ func rewriteValueS390X_OpS390XOR_30(v *Value) bool { } func rewriteValueS390X_OpS390XOR_40(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (OR x1:(MOVHZloadidx [i1] {s} idx p mem) sh:(SLDconst [16] x0:(MOVHZloadidx [i0] {s} p idx mem))) // cond: i1 == i0+2 && p.Op != OpSB && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh) // result: @mergePoint(b,x0,x1) (MOVWZloadidx [i0] {s} p idx mem) @@ -25247,10 +24554,9 @@ func rewriteValueS390X_OpS390XOR_40(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -25301,10 +24607,9 @@ func rewriteValueS390X_OpS390XOR_40(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -25355,10 +24660,9 @@ func rewriteValueS390X_OpS390XOR_40(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -25416,10 +24720,9 @@ func rewriteValueS390X_OpS390XOR_40(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpS390XMOVHZloadidx { break @@ -25470,10 +24773,9 @@ func rewriteValueS390X_OpS390XOR_40(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpS390XMOVHZloadidx { break @@ -25524,10 +24826,9 @@ func rewriteValueS390X_OpS390XOR_40(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpS390XMOVHZloadidx { break @@ -25578,10 +24879,9 @@ func rewriteValueS390X_OpS390XOR_40(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpS390XMOVHZloadidx { break @@ -25625,10 +24925,9 @@ func rewriteValueS390X_OpS390XOR_40(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -25679,10 +24978,9 @@ func rewriteValueS390X_OpS390XOR_40(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -25733,10 +25031,9 @@ func rewriteValueS390X_OpS390XOR_40(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -25780,9 +25077,7 @@ func rewriteValueS390X_OpS390XOR_40(v *Value) bool { } func rewriteValueS390X_OpS390XOR_50(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (OR x1:(MOVWZloadidx [i1] {s} idx p mem) sh:(SLDconst [32] x0:(MOVWZloadidx [i0] {s} idx p mem))) // cond: i1 == i0+4 && p.Op != OpSB && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh) // result: @mergePoint(b,x0,x1) (MOVDloadidx [i0] {s} p idx mem) @@ -25794,10 +25089,9 @@ func rewriteValueS390X_OpS390XOR_50(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -25855,10 +25149,9 @@ func rewriteValueS390X_OpS390XOR_50(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpS390XMOVWZloadidx { break @@ -25909,10 +25202,9 @@ func rewriteValueS390X_OpS390XOR_50(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpS390XMOVWZloadidx { break @@ -25963,10 +25255,9 @@ func rewriteValueS390X_OpS390XOR_50(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpS390XMOVWZloadidx { break @@ -26017,10 +25308,9 @@ func rewriteValueS390X_OpS390XOR_50(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpS390XMOVWZloadidx { break @@ -26069,15 +25359,14 @@ func rewriteValueS390X_OpS390XOR_50(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLDconst { break @@ -26101,7 +25390,6 @@ func rewriteValueS390X_OpS390XOR_50(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0-8 && j1%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -26138,15 +25426,14 @@ func rewriteValueS390X_OpS390XOR_50(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLDconst { break @@ -26170,7 +25457,6 @@ func rewriteValueS390X_OpS390XOR_50(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0-8 && j1%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -26207,15 +25493,14 @@ func rewriteValueS390X_OpS390XOR_50(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLDconst { break @@ -26239,7 +25524,6 @@ func rewriteValueS390X_OpS390XOR_50(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0-8 && j1%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -26276,15 +25560,14 @@ func rewriteValueS390X_OpS390XOR_50(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLDconst { break @@ -26308,7 +25591,6 @@ func rewriteValueS390X_OpS390XOR_50(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0-8 && j1%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -26345,10 +25627,9 @@ func rewriteValueS390X_OpS390XOR_50(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break @@ -26402,9 +25683,7 @@ func rewriteValueS390X_OpS390XOR_50(v *Value) bool { } func rewriteValueS390X_OpS390XOR_60(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (OR s0:(SLDconst [j0] x0:(MOVBZloadidx [i0] {s} idx p mem)) or:(OR y s1:(SLDconst [j1] x1:(MOVBZloadidx [i1] {s} p idx mem)))) // cond: i1 == i0+1 && j1 == j0-8 && j1 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (OR (SLDconst [j1] (MOVHZloadidx [i0] {s} p idx mem)) y) @@ -26421,10 +25700,9 @@ func rewriteValueS390X_OpS390XOR_60(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break @@ -26490,10 +25768,9 @@ func rewriteValueS390X_OpS390XOR_60(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break @@ -26559,10 +25836,9 @@ func rewriteValueS390X_OpS390XOR_60(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break @@ -26621,7 +25897,7 @@ func rewriteValueS390X_OpS390XOR_60(v *Value) bool { if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLDconst { break @@ -26633,11 +25909,9 @@ func rewriteValueS390X_OpS390XOR_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpS390XSLDconst { break @@ -26690,7 +25964,7 @@ func rewriteValueS390X_OpS390XOR_60(v *Value) bool { if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLDconst { break @@ -26702,11 +25976,9 @@ func rewriteValueS390X_OpS390XOR_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpS390XSLDconst { break @@ -26772,10 +26044,9 @@ func rewriteValueS390X_OpS390XOR_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpS390XSLDconst { break @@ -26841,10 +26112,9 @@ func rewriteValueS390X_OpS390XOR_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpS390XSLDconst { break @@ -26897,7 +26167,7 @@ func rewriteValueS390X_OpS390XOR_60(v *Value) bool { if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLDconst { break @@ -26909,11 +26179,9 @@ func rewriteValueS390X_OpS390XOR_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpS390XSLDconst { break @@ -26966,7 +26234,7 @@ func rewriteValueS390X_OpS390XOR_60(v *Value) bool { if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLDconst { break @@ -26978,11 +26246,9 @@ func rewriteValueS390X_OpS390XOR_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpS390XSLDconst { break @@ -27048,10 +26314,9 @@ func rewriteValueS390X_OpS390XOR_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpS390XSLDconst { break @@ -27099,9 +26364,7 @@ func rewriteValueS390X_OpS390XOR_60(v *Value) bool { } func rewriteValueS390X_OpS390XOR_70(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (OR or:(OR y s1:(SLDconst [j1] x1:(MOVBZloadidx [i1] {s} idx p mem))) s0:(SLDconst [j0] x0:(MOVBZloadidx [i0] {s} idx p mem))) // cond: i1 == i0+1 && j1 == j0-8 && j1 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (OR (SLDconst [j1] (MOVHZloadidx [i0] {s} p idx mem)) y) @@ -27124,10 +26387,9 @@ func rewriteValueS390X_OpS390XOR_70(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpS390XSLDconst { break @@ -27187,15 +26449,14 @@ func rewriteValueS390X_OpS390XOR_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLDconst { break @@ -27219,7 +26480,6 @@ func rewriteValueS390X_OpS390XOR_70(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+2 && j1 == j0-16 && j1%32 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -27256,15 +26516,14 @@ func rewriteValueS390X_OpS390XOR_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLDconst { break @@ -27288,7 +26547,6 @@ func rewriteValueS390X_OpS390XOR_70(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+2 && j1 == j0-16 && j1%32 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -27325,15 +26583,14 @@ func rewriteValueS390X_OpS390XOR_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLDconst { break @@ -27357,7 +26614,6 @@ func rewriteValueS390X_OpS390XOR_70(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+2 && j1 == j0-16 && j1%32 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -27394,15 +26650,14 @@ func rewriteValueS390X_OpS390XOR_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLDconst { break @@ -27426,7 +26681,6 @@ func rewriteValueS390X_OpS390XOR_70(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+2 && j1 == j0-16 && j1%32 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -27463,10 +26717,9 @@ func rewriteValueS390X_OpS390XOR_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break @@ -27532,10 +26785,9 @@ func rewriteValueS390X_OpS390XOR_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break @@ -27601,10 +26853,9 @@ func rewriteValueS390X_OpS390XOR_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break @@ -27670,10 +26921,9 @@ func rewriteValueS390X_OpS390XOR_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break @@ -27732,7 +26982,7 @@ func rewriteValueS390X_OpS390XOR_70(v *Value) bool { if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLDconst { break @@ -27744,11 +26994,9 @@ func rewriteValueS390X_OpS390XOR_70(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpS390XSLDconst { break @@ -27796,9 +27044,7 @@ func rewriteValueS390X_OpS390XOR_70(v *Value) bool { } func rewriteValueS390X_OpS390XOR_80(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (OR or:(OR s1:(SLDconst [j1] x1:(MOVHZloadidx [i1] {s} idx p mem)) y) s0:(SLDconst [j0] x0:(MOVHZloadidx [i0] {s} p idx mem))) // cond: i1 == i0+2 && j1 == j0-16 && j1 % 32 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (OR (SLDconst [j1] (MOVWZloadidx [i0] {s} p idx mem)) y) @@ -27808,7 +27054,7 @@ func rewriteValueS390X_OpS390XOR_80(v *Value) bool { if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLDconst { break @@ -27820,11 +27066,9 @@ func rewriteValueS390X_OpS390XOR_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpS390XSLDconst { break @@ -27890,10 +27134,9 @@ func rewriteValueS390X_OpS390XOR_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpS390XSLDconst { break @@ -27959,10 +27202,9 @@ func rewriteValueS390X_OpS390XOR_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpS390XSLDconst { break @@ -28015,7 +27257,7 @@ func rewriteValueS390X_OpS390XOR_80(v *Value) bool { if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLDconst { break @@ -28027,11 +27269,9 @@ func rewriteValueS390X_OpS390XOR_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpS390XSLDconst { break @@ -28084,7 +27324,7 @@ func rewriteValueS390X_OpS390XOR_80(v *Value) bool { if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLDconst { break @@ -28096,11 +27336,9 @@ func rewriteValueS390X_OpS390XOR_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpS390XSLDconst { break @@ -28166,10 +27404,9 @@ func rewriteValueS390X_OpS390XOR_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpS390XSLDconst { break @@ -28235,10 +27472,9 @@ func rewriteValueS390X_OpS390XOR_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpS390XSLDconst { break @@ -28293,9 +27529,8 @@ func rewriteValueS390X_OpS390XOR_80(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -28351,9 +27586,8 @@ func rewriteValueS390X_OpS390XOR_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] x0 := v.Args[1] if x0.Op != OpS390XMOVBZload { break @@ -28399,9 +27633,8 @@ func rewriteValueS390X_OpS390XOR_80(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -28447,9 +27680,7 @@ func rewriteValueS390X_OpS390XOR_80(v *Value) bool { } func rewriteValueS390X_OpS390XOR_90(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (OR sh:(SLDconst [16] r1:(MOVHZreg x1:(MOVHBRload [i1] {s} p mem))) r0:(MOVHZreg x0:(MOVHBRload [i0] {s} p mem))) // cond: i1 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(sh) // result: @mergePoint(b,x0,x1) (MOVWZreg (MOVWBRload [i0] {s} p mem)) @@ -28472,9 +27703,8 @@ func rewriteValueS390X_OpS390XOR_90(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] r0 := v.Args[1] if r0.Op != OpS390XMOVHZreg { break @@ -28524,9 +27754,8 @@ func rewriteValueS390X_OpS390XOR_90(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -28588,9 +27817,8 @@ func rewriteValueS390X_OpS390XOR_90(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] r0 := v.Args[1] if r0.Op != OpS390XMOVWZreg { break @@ -28639,14 +27867,13 @@ func rewriteValueS390X_OpS390XOR_90(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] or := v.Args[1] if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLDconst { break @@ -28667,7 +27894,6 @@ func rewriteValueS390X_OpS390XOR_90(v *Value) bool { if mem != x0.Args[1] { break } - y := or.Args[1] if !(p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -28705,9 +27931,8 @@ func rewriteValueS390X_OpS390XOR_90(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] or := v.Args[1] if or.Op != OpS390XOR { break @@ -28764,7 +27989,7 @@ func rewriteValueS390X_OpS390XOR_90(v *Value) bool { if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLDconst { break @@ -28776,10 +28001,8 @@ func rewriteValueS390X_OpS390XOR_90(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] - y := or.Args[1] + p := x0.Args[0] s1 := v.Args[1] if s1.Op != OpS390XSLDconst { break @@ -28843,9 +28066,8 @@ func rewriteValueS390X_OpS390XOR_90(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] s1 := v.Args[1] if s1.Op != OpS390XSLDconst { break @@ -28907,14 +28129,13 @@ func rewriteValueS390X_OpS390XOR_90(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] or := v.Args[1] if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLDconst { break @@ -28939,7 +28160,6 @@ func rewriteValueS390X_OpS390XOR_90(v *Value) bool { if mem != x0.Args[1] { break } - y := or.Args[1] if !(i1 == i0+2 && j1 == j0+16 && j0%32 == 0 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -28981,9 +28201,8 @@ func rewriteValueS390X_OpS390XOR_90(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] or := v.Args[1] if or.Op != OpS390XOR { break @@ -29044,7 +28263,7 @@ func rewriteValueS390X_OpS390XOR_90(v *Value) bool { if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLDconst { break @@ -29060,10 +28279,8 @@ func rewriteValueS390X_OpS390XOR_90(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] - y := or.Args[1] + p := x0.Args[0] s1 := v.Args[1] if s1.Op != OpS390XSLDconst { break @@ -29113,9 +28330,7 @@ func rewriteValueS390X_OpS390XOR_90(v *Value) bool { } func rewriteValueS390X_OpS390XOR_100(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (OR or:(OR y s0:(SLDconst [j0] r0:(MOVHZreg x0:(MOVHBRload [i0] {s} p mem)))) s1:(SLDconst [j1] r1:(MOVHZreg x1:(MOVHBRload [i1] {s} p mem)))) // cond: i1 == i0+2 && j1 == j0+16 && j0 % 32 == 0 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (OR (SLDconst [j0] (MOVWZreg (MOVWBRload [i0] {s} p mem))) y) @@ -29142,9 +28357,8 @@ func rewriteValueS390X_OpS390XOR_100(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] s1 := v.Args[1] if s1.Op != OpS390XSLDconst { break @@ -29201,10 +28415,9 @@ func rewriteValueS390X_OpS390XOR_100(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -29257,10 +28470,9 @@ func rewriteValueS390X_OpS390XOR_100(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -29313,10 +28525,9 @@ func rewriteValueS390X_OpS390XOR_100(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -29369,10 +28580,9 @@ func rewriteValueS390X_OpS390XOR_100(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -29432,10 +28642,9 @@ func rewriteValueS390X_OpS390XOR_100(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpS390XMOVBZloadidx { break @@ -29488,10 +28697,9 @@ func rewriteValueS390X_OpS390XOR_100(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpS390XMOVBZloadidx { break @@ -29544,10 +28752,9 @@ func rewriteValueS390X_OpS390XOR_100(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpS390XMOVBZloadidx { break @@ -29600,10 +28807,9 @@ func rewriteValueS390X_OpS390XOR_100(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpS390XMOVBZloadidx { break @@ -29653,10 +28859,9 @@ func rewriteValueS390X_OpS390XOR_100(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -29706,9 +28911,7 @@ func rewriteValueS390X_OpS390XOR_100(v *Value) bool { } func rewriteValueS390X_OpS390XOR_110(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (OR r0:(MOVHZreg x0:(MOVHBRloadidx [i0] {s} idx p mem)) sh:(SLDconst [16] r1:(MOVHZreg x1:(MOVHBRloadidx [i1] {s} p idx mem)))) // cond: i1 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(sh) // result: @mergePoint(b,x0,x1) (MOVWZreg (MOVWBRloadidx [i0] {s} p idx mem)) @@ -29724,10 +28927,9 @@ func rewriteValueS390X_OpS390XOR_110(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -29788,10 +28990,9 @@ func rewriteValueS390X_OpS390XOR_110(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -29852,10 +29053,9 @@ func rewriteValueS390X_OpS390XOR_110(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -29923,10 +29123,9 @@ func rewriteValueS390X_OpS390XOR_110(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] r0 := v.Args[1] if r0.Op != OpS390XMOVHZreg { break @@ -29987,10 +29186,9 @@ func rewriteValueS390X_OpS390XOR_110(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] r0 := v.Args[1] if r0.Op != OpS390XMOVHZreg { break @@ -30051,10 +29249,9 @@ func rewriteValueS390X_OpS390XOR_110(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] r0 := v.Args[1] if r0.Op != OpS390XMOVHZreg { break @@ -30115,10 +29312,9 @@ func rewriteValueS390X_OpS390XOR_110(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] r0 := v.Args[1] if r0.Op != OpS390XMOVHZreg { break @@ -30172,10 +29368,9 @@ func rewriteValueS390X_OpS390XOR_110(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -30234,10 +29429,9 @@ func rewriteValueS390X_OpS390XOR_110(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -30296,10 +29490,9 @@ func rewriteValueS390X_OpS390XOR_110(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -30347,9 +29540,7 @@ func rewriteValueS390X_OpS390XOR_110(v *Value) bool { } func rewriteValueS390X_OpS390XOR_120(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (OR r0:(MOVWZreg x0:(MOVWBRloadidx [i0] {s} idx p mem)) sh:(SLDconst [32] r1:(MOVWZreg x1:(MOVWBRloadidx [i1] {s} idx p mem)))) // cond: i1 == i0+4 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(sh) // result: @mergePoint(b,x0,x1) (MOVDBRloadidx [i0] {s} p idx mem) @@ -30365,10 +29556,9 @@ func rewriteValueS390X_OpS390XOR_120(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLDconst { break @@ -30434,10 +29624,9 @@ func rewriteValueS390X_OpS390XOR_120(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] r0 := v.Args[1] if r0.Op != OpS390XMOVWZreg { break @@ -30496,10 +29685,9 @@ func rewriteValueS390X_OpS390XOR_120(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] r0 := v.Args[1] if r0.Op != OpS390XMOVWZreg { break @@ -30558,10 +29746,9 @@ func rewriteValueS390X_OpS390XOR_120(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] r0 := v.Args[1] if r0.Op != OpS390XMOVWZreg { break @@ -30620,10 +29807,9 @@ func rewriteValueS390X_OpS390XOR_120(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] r0 := v.Args[1] if r0.Op != OpS390XMOVWZreg { break @@ -30676,15 +29862,14 @@ func rewriteValueS390X_OpS390XOR_120(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLDconst { break @@ -30708,7 +29893,6 @@ func rewriteValueS390X_OpS390XOR_120(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -30747,15 +29931,14 @@ func rewriteValueS390X_OpS390XOR_120(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLDconst { break @@ -30779,7 +29962,6 @@ func rewriteValueS390X_OpS390XOR_120(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -30818,15 +30000,14 @@ func rewriteValueS390X_OpS390XOR_120(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLDconst { break @@ -30850,7 +30031,6 @@ func rewriteValueS390X_OpS390XOR_120(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -30889,15 +30069,14 @@ func rewriteValueS390X_OpS390XOR_120(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLDconst { break @@ -30921,7 +30100,6 @@ func rewriteValueS390X_OpS390XOR_120(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -30960,10 +30138,9 @@ func rewriteValueS390X_OpS390XOR_120(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break @@ -31019,9 +30196,7 @@ func rewriteValueS390X_OpS390XOR_120(v *Value) bool { } func rewriteValueS390X_OpS390XOR_130(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (OR s1:(SLDconst [j1] x1:(MOVBZloadidx [i1] {s} idx p mem)) or:(OR y s0:(SLDconst [j0] x0:(MOVBZloadidx [i0] {s} p idx mem)))) // cond: p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (OR (SLDconst [j0] (MOVHZreg (MOVHBRloadidx [i0] {s} p idx mem))) y) @@ -31038,10 +30213,9 @@ func rewriteValueS390X_OpS390XOR_130(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break @@ -31109,10 +30283,9 @@ func rewriteValueS390X_OpS390XOR_130(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break @@ -31180,10 +30353,9 @@ func rewriteValueS390X_OpS390XOR_130(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break @@ -31244,7 +30416,7 @@ func rewriteValueS390X_OpS390XOR_130(v *Value) bool { if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLDconst { break @@ -31256,11 +30428,9 @@ func rewriteValueS390X_OpS390XOR_130(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpS390XSLDconst { break @@ -31315,7 +30485,7 @@ func rewriteValueS390X_OpS390XOR_130(v *Value) bool { if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLDconst { break @@ -31327,11 +30497,9 @@ func rewriteValueS390X_OpS390XOR_130(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpS390XSLDconst { break @@ -31399,10 +30567,9 @@ func rewriteValueS390X_OpS390XOR_130(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpS390XSLDconst { break @@ -31470,10 +30637,9 @@ func rewriteValueS390X_OpS390XOR_130(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpS390XSLDconst { break @@ -31528,7 +30694,7 @@ func rewriteValueS390X_OpS390XOR_130(v *Value) bool { if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLDconst { break @@ -31540,11 +30706,9 @@ func rewriteValueS390X_OpS390XOR_130(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpS390XSLDconst { break @@ -31599,7 +30763,7 @@ func rewriteValueS390X_OpS390XOR_130(v *Value) bool { if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLDconst { break @@ -31611,11 +30775,9 @@ func rewriteValueS390X_OpS390XOR_130(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpS390XSLDconst { break @@ -31683,10 +30845,9 @@ func rewriteValueS390X_OpS390XOR_130(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpS390XSLDconst { break @@ -31736,9 +30897,7 @@ func rewriteValueS390X_OpS390XOR_130(v *Value) bool { } func rewriteValueS390X_OpS390XOR_140(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (OR or:(OR y s0:(SLDconst [j0] x0:(MOVBZloadidx [i0] {s} idx p mem))) s1:(SLDconst [j1] x1:(MOVBZloadidx [i1] {s} idx p mem))) // cond: p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (OR (SLDconst [j0] (MOVHZreg (MOVHBRloadidx [i0] {s} p idx mem))) y) @@ -31761,10 +30920,9 @@ func rewriteValueS390X_OpS390XOR_140(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpS390XSLDconst { break @@ -31830,15 +30988,14 @@ func rewriteValueS390X_OpS390XOR_140(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLDconst { break @@ -31866,7 +31023,6 @@ func rewriteValueS390X_OpS390XOR_140(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(i1 == i0+2 && j1 == j0+16 && j0%32 == 0 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -31909,15 +31065,14 @@ func rewriteValueS390X_OpS390XOR_140(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLDconst { break @@ -31945,7 +31100,6 @@ func rewriteValueS390X_OpS390XOR_140(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(i1 == i0+2 && j1 == j0+16 && j0%32 == 0 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -31988,15 +31142,14 @@ func rewriteValueS390X_OpS390XOR_140(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLDconst { break @@ -32024,7 +31177,6 @@ func rewriteValueS390X_OpS390XOR_140(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(i1 == i0+2 && j1 == j0+16 && j0%32 == 0 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -32067,15 +31219,14 @@ func rewriteValueS390X_OpS390XOR_140(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLDconst { break @@ -32103,7 +31254,6 @@ func rewriteValueS390X_OpS390XOR_140(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(i1 == i0+2 && j1 == j0+16 && j0%32 == 0 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -32146,10 +31296,9 @@ func rewriteValueS390X_OpS390XOR_140(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break @@ -32225,10 +31374,9 @@ func rewriteValueS390X_OpS390XOR_140(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break @@ -32304,10 +31452,9 @@ func rewriteValueS390X_OpS390XOR_140(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break @@ -32383,10 +31530,9 @@ func rewriteValueS390X_OpS390XOR_140(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XOR { break @@ -32451,7 +31597,7 @@ func rewriteValueS390X_OpS390XOR_140(v *Value) bool { if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLDconst { break @@ -32467,11 +31613,9 @@ func rewriteValueS390X_OpS390XOR_140(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpS390XSLDconst { break @@ -32525,9 +31669,7 @@ func rewriteValueS390X_OpS390XOR_140(v *Value) bool { } func rewriteValueS390X_OpS390XOR_150(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (OR or:(OR s0:(SLDconst [j0] r0:(MOVHZreg x0:(MOVHBRloadidx [i0] {s} idx p mem))) y) s1:(SLDconst [j1] r1:(MOVHZreg x1:(MOVHBRloadidx [i1] {s} p idx mem)))) // cond: i1 == i0+2 && j1 == j0+16 && j0 % 32 == 0 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (OR (SLDconst [j0] (MOVWZreg (MOVWBRloadidx [i0] {s} p idx mem))) y) @@ -32537,7 +31679,7 @@ func rewriteValueS390X_OpS390XOR_150(v *Value) bool { if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLDconst { break @@ -32553,11 +31695,9 @@ func rewriteValueS390X_OpS390XOR_150(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpS390XSLDconst { break @@ -32633,10 +31773,9 @@ func rewriteValueS390X_OpS390XOR_150(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpS390XSLDconst { break @@ -32712,10 +31851,9 @@ func rewriteValueS390X_OpS390XOR_150(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpS390XSLDconst { break @@ -32774,7 +31912,7 @@ func rewriteValueS390X_OpS390XOR_150(v *Value) bool { if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLDconst { break @@ -32790,11 +31928,9 @@ func rewriteValueS390X_OpS390XOR_150(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpS390XSLDconst { break @@ -32853,7 +31989,7 @@ func rewriteValueS390X_OpS390XOR_150(v *Value) bool { if or.Op != OpS390XOR { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLDconst { break @@ -32869,11 +32005,9 @@ func rewriteValueS390X_OpS390XOR_150(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpS390XSLDconst { break @@ -32949,10 +32083,9 @@ func rewriteValueS390X_OpS390XOR_150(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpS390XSLDconst { break @@ -33028,10 +32161,9 @@ func rewriteValueS390X_OpS390XOR_150(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpS390XSLDconst { break @@ -33104,13 +32236,12 @@ func rewriteValueS390X_OpS390XORW_0(v *Value) bool { // cond: // result: (ORWconst [int64(int32(c))] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpS390XORWconst) v.AuxInt = int64(int32(c)) v.AddArg(x) @@ -33174,9 +32305,8 @@ func rewriteValueS390X_OpS390XORW_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -33197,9 +32327,8 @@ func rewriteValueS390X_OpS390XORW_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -33217,17 +32346,15 @@ func rewriteValueS390X_OpS390XORW_0(v *Value) bool { // result: (ORWload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVWload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -33245,17 +32372,15 @@ func rewriteValueS390X_OpS390XORW_0(v *Value) bool { // result: (ORWload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVWload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -33281,9 +32406,8 @@ func rewriteValueS390X_OpS390XORW_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -33309,9 +32433,8 @@ func rewriteValueS390X_OpS390XORW_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -33328,25 +32451,21 @@ func rewriteValueS390X_OpS390XORW_0(v *Value) bool { } func rewriteValueS390X_OpS390XORW_10(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORW g:(MOVWZload [off] {sym} ptr mem) x) // cond: ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g) // result: (ORWload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVWZload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -33364,17 +32483,15 @@ func rewriteValueS390X_OpS390XORW_10(v *Value) bool { // result: (ORWload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVWZload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -33400,9 +32517,8 @@ func rewriteValueS390X_OpS390XORW_10(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -33426,9 +32542,8 @@ func rewriteValueS390X_OpS390XORW_10(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] sh := v.Args[1] if sh.Op != OpS390XSLWconst { break @@ -33482,9 +32597,8 @@ func rewriteValueS390X_OpS390XORW_10(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] x1 := v.Args[1] if x1.Op != OpS390XMOVBZload { break @@ -33524,9 +32638,8 @@ func rewriteValueS390X_OpS390XORW_10(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] sh := v.Args[1] if sh.Op != OpS390XSLWconst { break @@ -33580,9 +32693,8 @@ func rewriteValueS390X_OpS390XORW_10(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] x1 := v.Args[1] if x1.Op != OpS390XMOVHZload { break @@ -33627,14 +32739,13 @@ func rewriteValueS390X_OpS390XORW_10(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] or := v.Args[1] if or.Op != OpS390XORW { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLWconst { break @@ -33655,7 +32766,6 @@ func rewriteValueS390X_OpS390XORW_10(v *Value) bool { if mem != x1.Args[1] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0-8 && j1%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -33691,9 +32801,8 @@ func rewriteValueS390X_OpS390XORW_10(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] or := v.Args[1] if or.Op != OpS390XORW { break @@ -33748,7 +32857,7 @@ func rewriteValueS390X_OpS390XORW_10(v *Value) bool { if or.Op != OpS390XORW { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLWconst { break @@ -33760,10 +32869,8 @@ func rewriteValueS390X_OpS390XORW_10(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] - y := or.Args[1] + p := x1.Args[0] s0 := v.Args[1] if s0.Op != OpS390XSLWconst { break @@ -33807,9 +32914,7 @@ func rewriteValueS390X_OpS390XORW_10(v *Value) bool { } func rewriteValueS390X_OpS390XORW_20(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORW or:(ORW y s1:(SLWconst [j1] x1:(MOVBZload [i1] {s} p mem))) s0:(SLWconst [j0] x0:(MOVBZload [i0] {s} p mem))) // cond: i1 == i0+1 && j1 == j0-8 && j1 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (ORW (SLWconst [j1] (MOVHZload [i0] {s} p mem)) y) @@ -33832,9 +32937,8 @@ func rewriteValueS390X_OpS390XORW_20(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] s0 := v.Args[1] if s0.Op != OpS390XSLWconst { break @@ -33885,10 +32989,9 @@ func rewriteValueS390X_OpS390XORW_20(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLWconst { break @@ -33939,10 +33042,9 @@ func rewriteValueS390X_OpS390XORW_20(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLWconst { break @@ -33993,10 +33095,9 @@ func rewriteValueS390X_OpS390XORW_20(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLWconst { break @@ -34047,10 +33148,9 @@ func rewriteValueS390X_OpS390XORW_20(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLWconst { break @@ -34108,10 +33208,9 @@ func rewriteValueS390X_OpS390XORW_20(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpS390XMOVBZloadidx { break @@ -34162,10 +33261,9 @@ func rewriteValueS390X_OpS390XORW_20(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpS390XMOVBZloadidx { break @@ -34216,10 +33314,9 @@ func rewriteValueS390X_OpS390XORW_20(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpS390XMOVBZloadidx { break @@ -34270,10 +33367,9 @@ func rewriteValueS390X_OpS390XORW_20(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpS390XMOVBZloadidx { break @@ -34317,10 +33413,9 @@ func rewriteValueS390X_OpS390XORW_20(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLWconst { break @@ -34364,9 +33459,7 @@ func rewriteValueS390X_OpS390XORW_20(v *Value) bool { } func rewriteValueS390X_OpS390XORW_30(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORW x1:(MOVHZloadidx [i1] {s} idx p mem) sh:(SLWconst [16] x0:(MOVHZloadidx [i0] {s} p idx mem))) // cond: i1 == i0+2 && p.Op != OpSB && x0.Uses == 1 && x1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(sh) // result: @mergePoint(b,x0,x1) (MOVWZloadidx [i0] {s} p idx mem) @@ -34378,10 +33471,9 @@ func rewriteValueS390X_OpS390XORW_30(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLWconst { break @@ -34432,10 +33524,9 @@ func rewriteValueS390X_OpS390XORW_30(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLWconst { break @@ -34486,10 +33577,9 @@ func rewriteValueS390X_OpS390XORW_30(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLWconst { break @@ -34547,10 +33637,9 @@ func rewriteValueS390X_OpS390XORW_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpS390XMOVHZloadidx { break @@ -34601,10 +33690,9 @@ func rewriteValueS390X_OpS390XORW_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpS390XMOVHZloadidx { break @@ -34655,10 +33743,9 @@ func rewriteValueS390X_OpS390XORW_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpS390XMOVHZloadidx { break @@ -34709,10 +33796,9 @@ func rewriteValueS390X_OpS390XORW_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] x1 := v.Args[1] if x1.Op != OpS390XMOVHZloadidx { break @@ -34761,15 +33847,14 @@ func rewriteValueS390X_OpS390XORW_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XORW { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLWconst { break @@ -34793,7 +33878,6 @@ func rewriteValueS390X_OpS390XORW_30(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0-8 && j1%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -34830,15 +33914,14 @@ func rewriteValueS390X_OpS390XORW_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XORW { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLWconst { break @@ -34862,7 +33945,6 @@ func rewriteValueS390X_OpS390XORW_30(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0-8 && j1%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -34899,15 +33981,14 @@ func rewriteValueS390X_OpS390XORW_30(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XORW { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLWconst { break @@ -34931,7 +34012,6 @@ func rewriteValueS390X_OpS390XORW_30(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0-8 && j1%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -34956,9 +34036,7 @@ func rewriteValueS390X_OpS390XORW_30(v *Value) bool { } func rewriteValueS390X_OpS390XORW_40(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORW s0:(SLWconst [j0] x0:(MOVBZloadidx [i0] {s} idx p mem)) or:(ORW s1:(SLWconst [j1] x1:(MOVBZloadidx [i1] {s} idx p mem)) y)) // cond: i1 == i0+1 && j1 == j0-8 && j1 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (ORW (SLWconst [j1] (MOVHZloadidx [i0] {s} p idx mem)) y) @@ -34975,15 +34053,14 @@ func rewriteValueS390X_OpS390XORW_40(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XORW { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLWconst { break @@ -35007,7 +34084,6 @@ func rewriteValueS390X_OpS390XORW_40(v *Value) bool { if mem != x1.Args[2] { break } - y := or.Args[1] if !(i1 == i0+1 && j1 == j0-8 && j1%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -35044,10 +34120,9 @@ func rewriteValueS390X_OpS390XORW_40(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XORW { break @@ -35113,10 +34188,9 @@ func rewriteValueS390X_OpS390XORW_40(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XORW { break @@ -35182,10 +34256,9 @@ func rewriteValueS390X_OpS390XORW_40(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XORW { break @@ -35251,10 +34324,9 @@ func rewriteValueS390X_OpS390XORW_40(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] or := v.Args[1] if or.Op != OpS390XORW { break @@ -35313,7 +34385,7 @@ func rewriteValueS390X_OpS390XORW_40(v *Value) bool { if or.Op != OpS390XORW { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLWconst { break @@ -35325,11 +34397,9 @@ func rewriteValueS390X_OpS390XORW_40(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpS390XSLWconst { break @@ -35382,7 +34452,7 @@ func rewriteValueS390X_OpS390XORW_40(v *Value) bool { if or.Op != OpS390XORW { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLWconst { break @@ -35394,11 +34464,9 @@ func rewriteValueS390X_OpS390XORW_40(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpS390XSLWconst { break @@ -35464,10 +34532,9 @@ func rewriteValueS390X_OpS390XORW_40(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpS390XSLWconst { break @@ -35533,10 +34600,9 @@ func rewriteValueS390X_OpS390XORW_40(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpS390XSLWconst { break @@ -35589,7 +34655,7 @@ func rewriteValueS390X_OpS390XORW_40(v *Value) bool { if or.Op != OpS390XORW { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLWconst { break @@ -35601,11 +34667,9 @@ func rewriteValueS390X_OpS390XORW_40(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpS390XSLWconst { break @@ -35653,9 +34717,7 @@ func rewriteValueS390X_OpS390XORW_40(v *Value) bool { } func rewriteValueS390X_OpS390XORW_50(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORW or:(ORW s1:(SLWconst [j1] x1:(MOVBZloadidx [i1] {s} idx p mem)) y) s0:(SLWconst [j0] x0:(MOVBZloadidx [i0] {s} idx p mem))) // cond: i1 == i0+1 && j1 == j0-8 && j1 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (ORW (SLWconst [j1] (MOVHZloadidx [i0] {s} p idx mem)) y) @@ -35665,7 +34727,7 @@ func rewriteValueS390X_OpS390XORW_50(v *Value) bool { if or.Op != OpS390XORW { break } - _ = or.Args[1] + y := or.Args[1] s1 := or.Args[0] if s1.Op != OpS390XSLWconst { break @@ -35677,11 +34739,9 @@ func rewriteValueS390X_OpS390XORW_50(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] - y := or.Args[1] s0 := v.Args[1] if s0.Op != OpS390XSLWconst { break @@ -35747,10 +34807,9 @@ func rewriteValueS390X_OpS390XORW_50(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpS390XSLWconst { break @@ -35816,10 +34875,9 @@ func rewriteValueS390X_OpS390XORW_50(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] s0 := v.Args[1] if s0.Op != OpS390XSLWconst { break @@ -35874,9 +34932,8 @@ func rewriteValueS390X_OpS390XORW_50(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] sh := v.Args[1] if sh.Op != OpS390XSLWconst { break @@ -35932,9 +34989,8 @@ func rewriteValueS390X_OpS390XORW_50(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] x0 := v.Args[1] if x0.Op != OpS390XMOVBZload { break @@ -35980,9 +35036,8 @@ func rewriteValueS390X_OpS390XORW_50(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] sh := v.Args[1] if sh.Op != OpS390XSLWconst { break @@ -36044,9 +35099,8 @@ func rewriteValueS390X_OpS390XORW_50(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] r0 := v.Args[1] if r0.Op != OpS390XMOVHZreg { break @@ -36095,14 +35149,13 @@ func rewriteValueS390X_OpS390XORW_50(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] or := v.Args[1] if or.Op != OpS390XORW { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLWconst { break @@ -36123,7 +35176,6 @@ func rewriteValueS390X_OpS390XORW_50(v *Value) bool { if mem != x0.Args[1] { break } - y := or.Args[1] if !(p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -36161,9 +35213,8 @@ func rewriteValueS390X_OpS390XORW_50(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[1] - p := x1.Args[0] mem := x1.Args[1] + p := x1.Args[0] or := v.Args[1] if or.Op != OpS390XORW { break @@ -36220,7 +35271,7 @@ func rewriteValueS390X_OpS390XORW_50(v *Value) bool { if or.Op != OpS390XORW { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLWconst { break @@ -36232,10 +35283,8 @@ func rewriteValueS390X_OpS390XORW_50(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] - y := or.Args[1] + p := x0.Args[0] s1 := v.Args[1] if s1.Op != OpS390XSLWconst { break @@ -36281,9 +35330,7 @@ func rewriteValueS390X_OpS390XORW_50(v *Value) bool { } func rewriteValueS390X_OpS390XORW_60(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORW or:(ORW y s0:(SLWconst [j0] x0:(MOVBZload [i0] {s} p mem))) s1:(SLWconst [j1] x1:(MOVBZload [i1] {s} p mem))) // cond: p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (ORW (SLWconst [j0] (MOVHZreg (MOVHBRload [i0] {s} p mem))) y) @@ -36306,9 +35353,8 @@ func rewriteValueS390X_OpS390XORW_60(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[1] - p := x0.Args[0] mem := x0.Args[1] + p := x0.Args[0] s1 := v.Args[1] if s1.Op != OpS390XSLWconst { break @@ -36361,10 +35407,9 @@ func rewriteValueS390X_OpS390XORW_60(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLWconst { break @@ -36417,10 +35462,9 @@ func rewriteValueS390X_OpS390XORW_60(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLWconst { break @@ -36473,10 +35517,9 @@ func rewriteValueS390X_OpS390XORW_60(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLWconst { break @@ -36529,10 +35572,9 @@ func rewriteValueS390X_OpS390XORW_60(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLWconst { break @@ -36592,10 +35634,9 @@ func rewriteValueS390X_OpS390XORW_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpS390XMOVBZloadidx { break @@ -36648,10 +35689,9 @@ func rewriteValueS390X_OpS390XORW_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpS390XMOVBZloadidx { break @@ -36704,10 +35744,9 @@ func rewriteValueS390X_OpS390XORW_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpS390XMOVBZloadidx { break @@ -36760,10 +35799,9 @@ func rewriteValueS390X_OpS390XORW_60(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] x0 := v.Args[1] if x0.Op != OpS390XMOVBZloadidx { break @@ -36813,10 +35851,9 @@ func rewriteValueS390X_OpS390XORW_60(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLWconst { break @@ -36864,9 +35901,7 @@ func rewriteValueS390X_OpS390XORW_60(v *Value) bool { } func rewriteValueS390X_OpS390XORW_70(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORW r0:(MOVHZreg x0:(MOVHBRloadidx [i0] {s} idx p mem)) sh:(SLWconst [16] r1:(MOVHZreg x1:(MOVHBRloadidx [i1] {s} p idx mem)))) // cond: i1 == i0+2 && x0.Uses == 1 && x1.Uses == 1 && r0.Uses == 1 && r1.Uses == 1 && sh.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(r0) && clobber(r1) && clobber(sh) // result: @mergePoint(b,x0,x1) (MOVWBRloadidx [i0] {s} p idx mem) @@ -36882,10 +35917,9 @@ func rewriteValueS390X_OpS390XORW_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLWconst { break @@ -36944,10 +35978,9 @@ func rewriteValueS390X_OpS390XORW_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLWconst { break @@ -37006,10 +36039,9 @@ func rewriteValueS390X_OpS390XORW_70(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] sh := v.Args[1] if sh.Op != OpS390XSLWconst { break @@ -37075,10 +36107,9 @@ func rewriteValueS390X_OpS390XORW_70(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] r0 := v.Args[1] if r0.Op != OpS390XMOVHZreg { break @@ -37137,10 +36168,9 @@ func rewriteValueS390X_OpS390XORW_70(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] r0 := v.Args[1] if r0.Op != OpS390XMOVHZreg { break @@ -37199,10 +36229,9 @@ func rewriteValueS390X_OpS390XORW_70(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] r0 := v.Args[1] if r0.Op != OpS390XMOVHZreg { break @@ -37261,10 +36290,9 @@ func rewriteValueS390X_OpS390XORW_70(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] r0 := v.Args[1] if r0.Op != OpS390XMOVHZreg { break @@ -37317,15 +36345,14 @@ func rewriteValueS390X_OpS390XORW_70(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XORW { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLWconst { break @@ -37349,7 +36376,6 @@ func rewriteValueS390X_OpS390XORW_70(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -37388,15 +36414,14 @@ func rewriteValueS390X_OpS390XORW_70(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XORW { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLWconst { break @@ -37420,7 +36445,6 @@ func rewriteValueS390X_OpS390XORW_70(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -37459,15 +36483,14 @@ func rewriteValueS390X_OpS390XORW_70(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XORW { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLWconst { break @@ -37491,7 +36514,6 @@ func rewriteValueS390X_OpS390XORW_70(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -37518,9 +36540,7 @@ func rewriteValueS390X_OpS390XORW_70(v *Value) bool { } func rewriteValueS390X_OpS390XORW_80(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORW s1:(SLWconst [j1] x1:(MOVBZloadidx [i1] {s} idx p mem)) or:(ORW s0:(SLWconst [j0] x0:(MOVBZloadidx [i0] {s} idx p mem)) y)) // cond: p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (ORW (SLWconst [j0] (MOVHZreg (MOVHBRloadidx [i0] {s} p idx mem))) y) @@ -37537,15 +36557,14 @@ func rewriteValueS390X_OpS390XORW_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XORW { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLWconst { break @@ -37569,7 +36588,6 @@ func rewriteValueS390X_OpS390XORW_80(v *Value) bool { if mem != x0.Args[2] { break } - y := or.Args[1] if !(p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0%16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or)) { break } @@ -37608,10 +36626,9 @@ func rewriteValueS390X_OpS390XORW_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XORW { break @@ -37679,10 +36696,9 @@ func rewriteValueS390X_OpS390XORW_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XORW { break @@ -37750,10 +36766,9 @@ func rewriteValueS390X_OpS390XORW_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] p := x1.Args[0] idx := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XORW { break @@ -37821,10 +36836,9 @@ func rewriteValueS390X_OpS390XORW_80(v *Value) bool { } i1 := x1.AuxInt s := x1.Aux - _ = x1.Args[2] + mem := x1.Args[2] idx := x1.Args[0] p := x1.Args[1] - mem := x1.Args[2] or := v.Args[1] if or.Op != OpS390XORW { break @@ -37885,7 +36899,7 @@ func rewriteValueS390X_OpS390XORW_80(v *Value) bool { if or.Op != OpS390XORW { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLWconst { break @@ -37897,11 +36911,9 @@ func rewriteValueS390X_OpS390XORW_80(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpS390XSLWconst { break @@ -37956,7 +36968,7 @@ func rewriteValueS390X_OpS390XORW_80(v *Value) bool { if or.Op != OpS390XORW { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLWconst { break @@ -37968,11 +36980,9 @@ func rewriteValueS390X_OpS390XORW_80(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpS390XSLWconst { break @@ -38040,10 +37050,9 @@ func rewriteValueS390X_OpS390XORW_80(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpS390XSLWconst { break @@ -38111,10 +37120,9 @@ func rewriteValueS390X_OpS390XORW_80(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpS390XSLWconst { break @@ -38169,7 +37177,7 @@ func rewriteValueS390X_OpS390XORW_80(v *Value) bool { if or.Op != OpS390XORW { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLWconst { break @@ -38181,11 +37189,9 @@ func rewriteValueS390X_OpS390XORW_80(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpS390XSLWconst { break @@ -38235,9 +37241,7 @@ func rewriteValueS390X_OpS390XORW_80(v *Value) bool { } func rewriteValueS390X_OpS390XORW_90(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ORW or:(ORW s0:(SLWconst [j0] x0:(MOVBZloadidx [i0] {s} idx p mem)) y) s1:(SLWconst [j1] x1:(MOVBZloadidx [i1] {s} idx p mem))) // cond: p.Op != OpSB && i1 == i0+1 && j1 == j0+8 && j0 % 16 == 0 && x0.Uses == 1 && x1.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && or.Uses == 1 && mergePoint(b,x0,x1) != nil && clobber(x0) && clobber(x1) && clobber(s0) && clobber(s1) && clobber(or) // result: @mergePoint(b,x0,x1) (ORW (SLWconst [j0] (MOVHZreg (MOVHBRloadidx [i0] {s} p idx mem))) y) @@ -38247,7 +37251,7 @@ func rewriteValueS390X_OpS390XORW_90(v *Value) bool { if or.Op != OpS390XORW { break } - _ = or.Args[1] + y := or.Args[1] s0 := or.Args[0] if s0.Op != OpS390XSLWconst { break @@ -38259,11 +37263,9 @@ func rewriteValueS390X_OpS390XORW_90(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] - y := or.Args[1] s1 := v.Args[1] if s1.Op != OpS390XSLWconst { break @@ -38331,10 +37333,9 @@ func rewriteValueS390X_OpS390XORW_90(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] p := x0.Args[0] idx := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpS390XSLWconst { break @@ -38402,10 +37403,9 @@ func rewriteValueS390X_OpS390XORW_90(v *Value) bool { } i0 := x0.AuxInt s := x0.Aux - _ = x0.Args[2] + mem := x0.Args[2] idx := x0.Args[0] p := x0.Args[1] - mem := x0.Args[2] s1 := v.Args[1] if s1.Op != OpS390XSLWconst { break @@ -38503,7 +37503,7 @@ func rewriteValueS390X_OpS390XORWload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -38511,7 +37511,6 @@ func rewriteValueS390X_OpS390XORWload_0(v *Value) bool { } off2 := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(off1+off2)) { break } @@ -38529,7 +37528,7 @@ func rewriteValueS390X_OpS390XORWload_0(v *Value) bool { for { o1 := v.AuxInt s1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVDaddr { @@ -38538,7 +37537,6 @@ func rewriteValueS390X_OpS390XORWload_0(v *Value) bool { o2 := v_1.AuxInt s2 := v_1.Aux ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(o1+o2) && canMergeSym(s1, s2)) { break } @@ -38595,7 +37593,6 @@ func rewriteValueS390X_OpS390XORconst_0(v *Value) bool { } func rewriteValueS390X_OpS390XORload_0(v *Value) bool { b := v.Block - _ = b // match: (ORload [off] {sym} x ptr1 (FMOVDstore [off] {sym} ptr2 y _)) // cond: isSamePtr(ptr1, ptr2) // result: (OR x (LGDR y)) @@ -38635,7 +37632,7 @@ func rewriteValueS390X_OpS390XORload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -38643,7 +37640,6 @@ func rewriteValueS390X_OpS390XORload_0(v *Value) bool { } off2 := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(off1+off2)) { break } @@ -38661,7 +37657,7 @@ func rewriteValueS390X_OpS390XORload_0(v *Value) bool { for { o1 := v.AuxInt s1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVDaddr { @@ -38670,7 +37666,6 @@ func rewriteValueS390X_OpS390XORload_0(v *Value) bool { o2 := v_1.AuxInt s2 := v_1.Aux ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(o1+o2) && canMergeSym(s1, s2)) { break } @@ -38724,9 +37719,7 @@ func rewriteValueS390X_OpS390XRLLG_0(v *Value) bool { } func rewriteValueS390X_OpS390XSLD_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SLD x (MOVDconst [c])) // cond: // result: (SLDconst x [c&63]) @@ -38753,13 +37746,12 @@ func rewriteValueS390X_OpS390XSLD_0(v *Value) bool { if v_1.Op != OpS390XAND { break } - _ = v_1.Args[1] + y := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpS390XMOVDconst { break } c := v_1_0.AuxInt - y := v_1.Args[1] v.reset(OpS390XSLD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpS390XANDWconst, typ.UInt32) @@ -38932,9 +37924,7 @@ func rewriteValueS390X_OpS390XSLD_10(v *Value) bool { } func rewriteValueS390X_OpS390XSLW_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SLW x (MOVDconst [c])) // cond: // result: (SLWconst x [c&63]) @@ -38961,13 +37951,12 @@ func rewriteValueS390X_OpS390XSLW_0(v *Value) bool { if v_1.Op != OpS390XAND { break } - _ = v_1.Args[1] + y := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpS390XMOVDconst { break } c := v_1_0.AuxInt - y := v_1.Args[1] v.reset(OpS390XSLW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpS390XANDWconst, typ.UInt32) @@ -39140,9 +38129,7 @@ func rewriteValueS390X_OpS390XSLW_10(v *Value) bool { } func rewriteValueS390X_OpS390XSRAD_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SRAD x (MOVDconst [c])) // cond: // result: (SRADconst x [c&63]) @@ -39169,13 +38156,12 @@ func rewriteValueS390X_OpS390XSRAD_0(v *Value) bool { if v_1.Op != OpS390XAND { break } - _ = v_1.Args[1] + y := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpS390XMOVDconst { break } c := v_1_0.AuxInt - y := v_1.Args[1] v.reset(OpS390XSRAD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpS390XANDWconst, typ.UInt32) @@ -39365,9 +38351,7 @@ func rewriteValueS390X_OpS390XSRADconst_0(v *Value) bool { } func rewriteValueS390X_OpS390XSRAW_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SRAW x (MOVDconst [c])) // cond: // result: (SRAWconst x [c&63]) @@ -39394,13 +38378,12 @@ func rewriteValueS390X_OpS390XSRAW_0(v *Value) bool { if v_1.Op != OpS390XAND { break } - _ = v_1.Args[1] + y := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpS390XMOVDconst { break } c := v_1_0.AuxInt - y := v_1.Args[1] v.reset(OpS390XSRAW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpS390XANDWconst, typ.UInt32) @@ -39590,9 +38573,7 @@ func rewriteValueS390X_OpS390XSRAWconst_0(v *Value) bool { } func rewriteValueS390X_OpS390XSRD_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SRD x (MOVDconst [c])) // cond: // result: (SRDconst x [c&63]) @@ -39619,13 +38600,12 @@ func rewriteValueS390X_OpS390XSRD_0(v *Value) bool { if v_1.Op != OpS390XAND { break } - _ = v_1.Args[1] + y := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpS390XMOVDconst { break } c := v_1_0.AuxInt - y := v_1.Args[1] v.reset(OpS390XSRD) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpS390XANDWconst, typ.UInt32) @@ -39798,7 +38778,6 @@ func rewriteValueS390X_OpS390XSRD_10(v *Value) bool { } func rewriteValueS390X_OpS390XSRDconst_0(v *Value) bool { b := v.Block - _ = b // match: (SRDconst [1] (SLDconst [1] (LGDR x))) // cond: // result: (LGDR (LPDFR x)) @@ -39830,9 +38809,7 @@ func rewriteValueS390X_OpS390XSRDconst_0(v *Value) bool { } func rewriteValueS390X_OpS390XSRW_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SRW x (MOVDconst [c])) // cond: // result: (SRWconst x [c&63]) @@ -39859,13 +38836,12 @@ func rewriteValueS390X_OpS390XSRW_0(v *Value) bool { if v_1.Op != OpS390XAND { break } - _ = v_1.Args[1] + y := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpS390XMOVDconst { break } c := v_1_0.AuxInt - y := v_1.Args[1] v.reset(OpS390XSRW) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpS390XANDWconst, typ.UInt32) @@ -40057,13 +39033,12 @@ func rewriteValueS390X_OpS390XSTM2_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } w0 := x.Args[1] w1 := x.Args[2] - mem := x.Args[3] if !(x.Uses == 1 && is20Bit(i-8) && clobber(x)) { break } @@ -40084,7 +39059,7 @@ func rewriteValueS390X_OpS390XSTM2_0(v *Value) bool { for { i := v.AuxInt s := v.Aux - _ = v.Args[3] + mem := v.Args[3] p := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XSRDconst { @@ -40097,7 +39072,6 @@ func rewriteValueS390X_OpS390XSTM2_0(v *Value) bool { if x != v.Args[2] { break } - mem := v.Args[3] v.reset(OpS390XMOVDstore) v.AuxInt = i v.Aux = s @@ -40129,13 +39103,12 @@ func rewriteValueS390X_OpS390XSTMG2_0(v *Value) bool { if x.Aux != s { break } - _ = x.Args[3] + mem := x.Args[3] if p != x.Args[0] { break } w0 := x.Args[1] w1 := x.Args[2] - mem := x.Args[3] if !(x.Uses == 1 && is20Bit(i-16) && clobber(x)) { break } @@ -40154,7 +39127,6 @@ func rewriteValueS390X_OpS390XSTMG2_0(v *Value) bool { } func rewriteValueS390X_OpS390XSUB_0(v *Value) bool { b := v.Block - _ = b // match: (SUB x (MOVDconst [c])) // cond: is32Bit(c) // result: (SUBconst x [c]) @@ -40178,13 +39150,12 @@ func rewriteValueS390X_OpS390XSUB_0(v *Value) bool { // cond: is32Bit(c) // result: (NEG (SUBconst x [c])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(is32Bit(c)) { break } @@ -40199,9 +39170,8 @@ func rewriteValueS390X_OpS390XSUB_0(v *Value) bool { // cond: // result: (MOVDconst [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpS390XMOVDconst) @@ -40221,9 +39191,8 @@ func rewriteValueS390X_OpS390XSUB_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -40238,9 +39207,99 @@ func rewriteValueS390X_OpS390XSUB_0(v *Value) bool { } return false } +func rewriteValueS390X_OpS390XSUBE_0(v *Value) bool { + // match: (SUBE x y (FlagGT)) + // cond: + // result: (SUBC x y) + for { + _ = v.Args[2] + x := v.Args[0] + y := v.Args[1] + v_2 := v.Args[2] + if v_2.Op != OpS390XFlagGT { + break + } + v.reset(OpS390XSUBC) + v.AddArg(x) + v.AddArg(y) + return true + } + // match: (SUBE x y (FlagOV)) + // cond: + // result: (SUBC x y) + for { + _ = v.Args[2] + x := v.Args[0] + y := v.Args[1] + v_2 := v.Args[2] + if v_2.Op != OpS390XFlagOV { + break + } + v.reset(OpS390XSUBC) + v.AddArg(x) + v.AddArg(y) + return true + } + // match: (SUBE x y (Select1 (SUBC (MOVDconst [0]) (NEG (Select0 (SUBE (MOVDconst [0]) (MOVDconst [0]) c)))))) + // cond: + // result: (SUBE x y c) + for { + _ = v.Args[2] + x := v.Args[0] + y := v.Args[1] + v_2 := v.Args[2] + if v_2.Op != OpSelect1 { + break + } + v_2_0 := v_2.Args[0] + if v_2_0.Op != OpS390XSUBC { + break + } + _ = v_2_0.Args[1] + v_2_0_0 := v_2_0.Args[0] + if v_2_0_0.Op != OpS390XMOVDconst { + break + } + if v_2_0_0.AuxInt != 0 { + break + } + v_2_0_1 := v_2_0.Args[1] + if v_2_0_1.Op != OpS390XNEG { + break + } + v_2_0_1_0 := v_2_0_1.Args[0] + if v_2_0_1_0.Op != OpSelect0 { + break + } + v_2_0_1_0_0 := v_2_0_1_0.Args[0] + if v_2_0_1_0_0.Op != OpS390XSUBE { + break + } + c := v_2_0_1_0_0.Args[2] + v_2_0_1_0_0_0 := v_2_0_1_0_0.Args[0] + if v_2_0_1_0_0_0.Op != OpS390XMOVDconst { + break + } + if v_2_0_1_0_0_0.AuxInt != 0 { + break + } + v_2_0_1_0_0_1 := v_2_0_1_0_0.Args[1] + if v_2_0_1_0_0_1.Op != OpS390XMOVDconst { + break + } + if v_2_0_1_0_0_1.AuxInt != 0 { + break + } + v.reset(OpS390XSUBE) + v.AddArg(x) + v.AddArg(y) + v.AddArg(c) + return true + } + return false +} func rewriteValueS390X_OpS390XSUBW_0(v *Value) bool { b := v.Block - _ = b // match: (SUBW x (MOVDconst [c])) // cond: // result: (SUBWconst x [int64(int32(c))]) @@ -40261,13 +39320,12 @@ func rewriteValueS390X_OpS390XSUBW_0(v *Value) bool { // cond: // result: (NEGW (SUBWconst x [int64(int32(c))])) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpS390XNEGW) v0 := b.NewValue0(v.Pos, OpS390XSUBWconst, v.Type) v0.AuxInt = int64(int32(c)) @@ -40279,9 +39337,8 @@ func rewriteValueS390X_OpS390XSUBW_0(v *Value) bool { // cond: // result: (MOVDconst [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpS390XMOVDconst) @@ -40301,9 +39358,8 @@ func rewriteValueS390X_OpS390XSUBW_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -40329,9 +39385,8 @@ func rewriteValueS390X_OpS390XSUBW_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -40380,7 +39435,7 @@ func rewriteValueS390X_OpS390XSUBWload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -40388,7 +39443,6 @@ func rewriteValueS390X_OpS390XSUBWload_0(v *Value) bool { } off2 := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(off1+off2)) { break } @@ -40406,7 +39460,7 @@ func rewriteValueS390X_OpS390XSUBWload_0(v *Value) bool { for { o1 := v.AuxInt s1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVDaddr { @@ -40415,7 +39469,6 @@ func rewriteValueS390X_OpS390XSUBWload_0(v *Value) bool { o2 := v_1.AuxInt s2 := v_1.Aux ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(o1+o2) && canMergeSym(s1, s2)) { break } @@ -40494,7 +39547,6 @@ func rewriteValueS390X_OpS390XSUBconst_0(v *Value) bool { } func rewriteValueS390X_OpS390XSUBload_0(v *Value) bool { b := v.Block - _ = b // match: (SUBload [off] {sym} x ptr1 (FMOVDstore [off] {sym} ptr2 y _)) // cond: isSamePtr(ptr1, ptr2) // result: (SUB x (LGDR y)) @@ -40534,7 +39586,7 @@ func rewriteValueS390X_OpS390XSUBload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -40542,7 +39594,6 @@ func rewriteValueS390X_OpS390XSUBload_0(v *Value) bool { } off2 := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(off1+off2)) { break } @@ -40560,7 +39611,7 @@ func rewriteValueS390X_OpS390XSUBload_0(v *Value) bool { for { o1 := v.AuxInt s1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVDaddr { @@ -40569,7 +39620,6 @@ func rewriteValueS390X_OpS390XSUBload_0(v *Value) bool { o2 := v_1.AuxInt s2 := v_1.Aux ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(o1+o2) && canMergeSym(s1, s2)) { break } @@ -40585,9 +39635,7 @@ func rewriteValueS390X_OpS390XSUBload_0(v *Value) bool { } func rewriteValueS390X_OpS390XSumBytes2_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SumBytes2 x) // cond: // result: (ADDW (SRWconst x [8]) x) @@ -40604,9 +39652,7 @@ func rewriteValueS390X_OpS390XSumBytes2_0(v *Value) bool { } func rewriteValueS390X_OpS390XSumBytes4_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SumBytes4 x) // cond: // result: (SumBytes2 (ADDW (SRWconst x [16]) x)) @@ -40625,9 +39671,7 @@ func rewriteValueS390X_OpS390XSumBytes4_0(v *Value) bool { } func rewriteValueS390X_OpS390XSumBytes8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SumBytes8 x) // cond: // result: (SumBytes4 (ADDW (SRDconst x [32]) x)) @@ -40668,13 +39712,12 @@ func rewriteValueS390X_OpS390XXOR_0(v *Value) bool { // cond: isU32Bit(c) // result: (XORconst [c] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break } c := v_0.AuxInt - x := v.Args[1] if !(isU32Bit(c)) { break } @@ -40779,9 +39822,8 @@ func rewriteValueS390X_OpS390XXOR_0(v *Value) bool { // cond: // result: (MOVDconst [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpS390XMOVDconst) @@ -40801,9 +39843,8 @@ func rewriteValueS390X_OpS390XXOR_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -40821,17 +39862,15 @@ func rewriteValueS390X_OpS390XXOR_0(v *Value) bool { // result: (XORload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVDload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -40849,17 +39888,15 @@ func rewriteValueS390X_OpS390XXOR_0(v *Value) bool { // result: (XORload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVDload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -40888,9 +39925,8 @@ func rewriteValueS390X_OpS390XXOR_10(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -40926,13 +39962,12 @@ func rewriteValueS390X_OpS390XXORW_0(v *Value) bool { // cond: // result: (XORWconst [int64(int32(c))] x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break } c := v_0.AuxInt - x := v.Args[1] v.reset(OpS390XXORWconst) v.AuxInt = int64(int32(c)) v.AddArg(x) @@ -40996,9 +40031,8 @@ func rewriteValueS390X_OpS390XXORW_0(v *Value) bool { // cond: // result: (MOVDconst [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpS390XMOVDconst) @@ -41018,9 +40052,8 @@ func rewriteValueS390X_OpS390XXORW_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -41038,17 +40071,15 @@ func rewriteValueS390X_OpS390XXORW_0(v *Value) bool { // result: (XORWload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVWload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -41066,17 +40097,15 @@ func rewriteValueS390X_OpS390XXORW_0(v *Value) bool { // result: (XORWload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVWload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -41102,9 +40131,8 @@ func rewriteValueS390X_OpS390XXORW_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -41130,9 +40158,8 @@ func rewriteValueS390X_OpS390XXORW_0(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -41153,17 +40180,15 @@ func rewriteValueS390X_OpS390XXORW_10(v *Value) bool { // result: (XORWload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVWZload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -41181,17 +40206,15 @@ func rewriteValueS390X_OpS390XXORW_10(v *Value) bool { // result: (XORWload [off] {sym} x ptr mem) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] g := v.Args[0] if g.Op != OpS390XMOVWZload { break } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] - x := v.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -41217,9 +40240,8 @@ func rewriteValueS390X_OpS390XXORW_10(v *Value) bool { } off := g.AuxInt sym := g.Aux - _ = g.Args[1] - ptr := g.Args[0] mem := g.Args[1] + ptr := g.Args[0] if !(ptr.Op != OpSB && is20Bit(off) && canMergeLoadClobber(v, g, x) && clobber(g)) { break } @@ -41272,7 +40294,7 @@ func rewriteValueS390X_OpS390XXORWload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -41280,7 +40302,6 @@ func rewriteValueS390X_OpS390XXORWload_0(v *Value) bool { } off2 := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(off1+off2)) { break } @@ -41298,7 +40319,7 @@ func rewriteValueS390X_OpS390XXORWload_0(v *Value) bool { for { o1 := v.AuxInt s1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVDaddr { @@ -41307,7 +40328,6 @@ func rewriteValueS390X_OpS390XXORWload_0(v *Value) bool { o2 := v_1.AuxInt s2 := v_1.Aux ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(o1+o2) && canMergeSym(s1, s2)) { break } @@ -41353,7 +40373,6 @@ func rewriteValueS390X_OpS390XXORconst_0(v *Value) bool { } func rewriteValueS390X_OpS390XXORload_0(v *Value) bool { b := v.Block - _ = b // match: (XORload [off] {sym} x ptr1 (FMOVDstore [off] {sym} ptr2 y _)) // cond: isSamePtr(ptr1, ptr2) // result: (XOR x (LGDR y)) @@ -41393,7 +40412,7 @@ func rewriteValueS390X_OpS390XXORload_0(v *Value) bool { for { off1 := v.AuxInt sym := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XADDconst { @@ -41401,7 +40420,6 @@ func rewriteValueS390X_OpS390XXORload_0(v *Value) bool { } off2 := v_1.AuxInt ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(off1+off2)) { break } @@ -41419,7 +40437,7 @@ func rewriteValueS390X_OpS390XXORload_0(v *Value) bool { for { o1 := v.AuxInt s1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] x := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpS390XMOVDaddr { @@ -41428,7 +40446,6 @@ func rewriteValueS390X_OpS390XXORload_0(v *Value) bool { o2 := v_1.AuxInt s2 := v_1.Aux ptr := v_1.Args[0] - mem := v.Args[2] if !(ptr.Op != OpSB && is20Bit(o1+o2) && canMergeSym(s1, s2)) { break } @@ -41444,7 +40461,59 @@ func rewriteValueS390X_OpS390XXORload_0(v *Value) bool { } func rewriteValueS390X_OpSelect0_0(v *Value) bool { b := v.Block - _ = b + typ := &b.Func.Config.Types + // match: (Select0 (Add64carry x y c)) + // cond: + // result: (Select0 (ADDE x y (Select1 (ADDCconst c [-1])))) + for { + v_0 := v.Args[0] + if v_0.Op != OpAdd64carry { + break + } + c := v_0.Args[2] + x := v_0.Args[0] + y := v_0.Args[1] + v.reset(OpSelect0) + v.Type = typ.UInt64 + v0 := b.NewValue0(v.Pos, OpS390XADDE, types.NewTuple(typ.UInt64, types.TypeFlags)) + v0.AddArg(x) + v0.AddArg(y) + v1 := b.NewValue0(v.Pos, OpSelect1, types.TypeFlags) + v2 := b.NewValue0(v.Pos, OpS390XADDCconst, types.NewTuple(typ.UInt64, types.TypeFlags)) + v2.AuxInt = -1 + v2.AddArg(c) + v1.AddArg(v2) + v0.AddArg(v1) + v.AddArg(v0) + return true + } + // match: (Select0 (Sub64borrow x y c)) + // cond: + // result: (Select0 (SUBE x y (Select1 (SUBC (MOVDconst [0]) c)))) + for { + v_0 := v.Args[0] + if v_0.Op != OpSub64borrow { + break + } + c := v_0.Args[2] + x := v_0.Args[0] + y := v_0.Args[1] + v.reset(OpSelect0) + v.Type = typ.UInt64 + v0 := b.NewValue0(v.Pos, OpS390XSUBE, types.NewTuple(typ.UInt64, types.TypeFlags)) + v0.AddArg(x) + v0.AddArg(y) + v1 := b.NewValue0(v.Pos, OpSelect1, types.TypeFlags) + v2 := b.NewValue0(v.Pos, OpS390XSUBC, types.NewTuple(typ.UInt64, types.TypeFlags)) + v3 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) + v3.AuxInt = 0 + v2.AddArg(v3) + v2.AddArg(c) + v1.AddArg(v2) + v0.AddArg(v1) + v.AddArg(v0) + return true + } // match: (Select0 (AddTupleFirst32 val tuple)) // cond: // result: (ADDW val (Select0 tuple)) @@ -41454,9 +40523,8 @@ func rewriteValueS390X_OpSelect0_0(v *Value) bool { if v_0.Op != OpS390XAddTupleFirst32 { break } - _ = v_0.Args[1] - val := v_0.Args[0] tuple := v_0.Args[1] + val := v_0.Args[0] v.reset(OpS390XADDW) v.AddArg(val) v0 := b.NewValue0(v.Pos, OpSelect0, t) @@ -41473,9 +40541,8 @@ func rewriteValueS390X_OpSelect0_0(v *Value) bool { if v_0.Op != OpS390XAddTupleFirst64 { break } - _ = v_0.Args[1] - val := v_0.Args[0] tuple := v_0.Args[1] + val := v_0.Args[0] v.reset(OpS390XADD) v.AddArg(val) v0 := b.NewValue0(v.Pos, OpSelect0, t) @@ -41483,9 +40550,125 @@ func rewriteValueS390X_OpSelect0_0(v *Value) bool { v.AddArg(v0) return true } + // match: (Select0 (ADDCconst (MOVDconst [c]) [d])) + // cond: + // result: (MOVDconst [c+d]) + for { + v_0 := v.Args[0] + if v_0.Op != OpS390XADDCconst { + break + } + d := v_0.AuxInt + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpS390XMOVDconst { + break + } + c := v_0_0.AuxInt + v.reset(OpS390XMOVDconst) + v.AuxInt = c + d + return true + } + // match: (Select0 (SUBC (MOVDconst [c]) (MOVDconst [d]))) + // cond: + // result: (MOVDconst [c-d]) + for { + v_0 := v.Args[0] + if v_0.Op != OpS390XSUBC { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpS390XMOVDconst { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpS390XMOVDconst { + break + } + d := v_0_1.AuxInt + v.reset(OpS390XMOVDconst) + v.AuxInt = c - d + return true + } return false } func rewriteValueS390X_OpSelect1_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Select1 (Add64carry x y c)) + // cond: + // result: (Select0 (ADDE (MOVDconst [0]) (MOVDconst [0]) (Select1 (ADDE x y (Select1 (ADDCconst c [-1])))))) + for { + v_0 := v.Args[0] + if v_0.Op != OpAdd64carry { + break + } + c := v_0.Args[2] + x := v_0.Args[0] + y := v_0.Args[1] + v.reset(OpSelect0) + v.Type = typ.UInt64 + v0 := b.NewValue0(v.Pos, OpS390XADDE, types.NewTuple(typ.UInt64, types.TypeFlags)) + v1 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) + v1.AuxInt = 0 + v0.AddArg(v1) + v2 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) + v2.AuxInt = 0 + v0.AddArg(v2) + v3 := b.NewValue0(v.Pos, OpSelect1, types.TypeFlags) + v4 := b.NewValue0(v.Pos, OpS390XADDE, types.NewTuple(typ.UInt64, types.TypeFlags)) + v4.AddArg(x) + v4.AddArg(y) + v5 := b.NewValue0(v.Pos, OpSelect1, types.TypeFlags) + v6 := b.NewValue0(v.Pos, OpS390XADDCconst, types.NewTuple(typ.UInt64, types.TypeFlags)) + v6.AuxInt = -1 + v6.AddArg(c) + v5.AddArg(v6) + v4.AddArg(v5) + v3.AddArg(v4) + v0.AddArg(v3) + v.AddArg(v0) + return true + } + // match: (Select1 (Sub64borrow x y c)) + // cond: + // result: (NEG (Select0 (SUBE (MOVDconst [0]) (MOVDconst [0]) (Select1 (SUBE x y (Select1 (SUBC (MOVDconst [0]) c))))))) + for { + v_0 := v.Args[0] + if v_0.Op != OpSub64borrow { + break + } + c := v_0.Args[2] + x := v_0.Args[0] + y := v_0.Args[1] + v.reset(OpS390XNEG) + v0 := b.NewValue0(v.Pos, OpSelect0, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpS390XSUBE, types.NewTuple(typ.UInt64, types.TypeFlags)) + v2 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) + v2.AuxInt = 0 + v1.AddArg(v2) + v3 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) + v3.AuxInt = 0 + v1.AddArg(v3) + v4 := b.NewValue0(v.Pos, OpSelect1, types.TypeFlags) + v5 := b.NewValue0(v.Pos, OpS390XSUBE, types.NewTuple(typ.UInt64, types.TypeFlags)) + v5.AddArg(x) + v5.AddArg(y) + v6 := b.NewValue0(v.Pos, OpSelect1, types.TypeFlags) + v7 := b.NewValue0(v.Pos, OpS390XSUBC, types.NewTuple(typ.UInt64, types.TypeFlags)) + v8 := b.NewValue0(v.Pos, OpS390XMOVDconst, typ.UInt64) + v8.AuxInt = 0 + v7.AddArg(v8) + v7.AddArg(c) + v6.AddArg(v7) + v5.AddArg(v6) + v4.AddArg(v5) + v1.AddArg(v4) + v0.AddArg(v1) + v.AddArg(v0) + return true + } // match: (Select1 (AddTupleFirst32 _ tuple)) // cond: // result: (Select1 tuple) @@ -41494,7 +40677,6 @@ func rewriteValueS390X_OpSelect1_0(v *Value) bool { if v_0.Op != OpS390XAddTupleFirst32 { break } - _ = v_0.Args[1] tuple := v_0.Args[1] v.reset(OpSelect1) v.AddArg(tuple) @@ -41508,12 +40690,101 @@ func rewriteValueS390X_OpSelect1_0(v *Value) bool { if v_0.Op != OpS390XAddTupleFirst64 { break } - _ = v_0.Args[1] tuple := v_0.Args[1] v.reset(OpSelect1) v.AddArg(tuple) return true } + // match: (Select1 (ADDCconst (MOVDconst [c]) [d])) + // cond: uint64(c+d) >= uint64(c) && c+d == 0 + // result: (FlagEQ) + for { + v_0 := v.Args[0] + if v_0.Op != OpS390XADDCconst { + break + } + d := v_0.AuxInt + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpS390XMOVDconst { + break + } + c := v_0_0.AuxInt + if !(uint64(c+d) >= uint64(c) && c+d == 0) { + break + } + v.reset(OpS390XFlagEQ) + return true + } + // match: (Select1 (ADDCconst (MOVDconst [c]) [d])) + // cond: uint64(c+d) >= uint64(c) && c+d != 0 + // result: (FlagLT) + for { + v_0 := v.Args[0] + if v_0.Op != OpS390XADDCconst { + break + } + d := v_0.AuxInt + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpS390XMOVDconst { + break + } + c := v_0_0.AuxInt + if !(uint64(c+d) >= uint64(c) && c+d != 0) { + break + } + v.reset(OpS390XFlagLT) + return true + } + // match: (Select1 (SUBC (MOVDconst [c]) (MOVDconst [d]))) + // cond: uint64(d) <= uint64(c) && c-d == 0 + // result: (FlagGT) + for { + v_0 := v.Args[0] + if v_0.Op != OpS390XSUBC { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpS390XMOVDconst { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpS390XMOVDconst { + break + } + d := v_0_1.AuxInt + if !(uint64(d) <= uint64(c) && c-d == 0) { + break + } + v.reset(OpS390XFlagGT) + return true + } + // match: (Select1 (SUBC (MOVDconst [c]) (MOVDconst [d]))) + // cond: uint64(d) <= uint64(c) && c-d != 0 + // result: (FlagOV) + for { + v_0 := v.Args[0] + if v_0.Op != OpS390XSUBC { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpS390XMOVDconst { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpS390XMOVDconst { + break + } + d := v_0_1.AuxInt + if !(uint64(d) <= uint64(c) && c-d != 0) { + break + } + v.reset(OpS390XFlagOV) + return true + } return false } func rewriteValueS390X_OpSignExt16to32_0(v *Value) bool { @@ -41584,7 +40855,6 @@ func rewriteValueS390X_OpSignExt8to64_0(v *Value) bool { } func rewriteValueS390X_OpSlicemask_0(v *Value) bool { b := v.Block - _ = b // match: (Slicemask x) // cond: // result: (SRADconst (NEG x) [63]) @@ -41631,10 +40901,9 @@ func rewriteValueS390X_OpStore_0(v *Value) bool { // result: (FMOVDstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 8 && is64BitFloat(val.Type)) { break } @@ -41649,10 +40918,9 @@ func rewriteValueS390X_OpStore_0(v *Value) bool { // result: (FMOVSstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 4 && is32BitFloat(val.Type)) { break } @@ -41667,10 +40935,9 @@ func rewriteValueS390X_OpStore_0(v *Value) bool { // result: (MOVDstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 8) { break } @@ -41685,10 +40952,9 @@ func rewriteValueS390X_OpStore_0(v *Value) bool { // result: (MOVWstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 4) { break } @@ -41703,10 +40969,9 @@ func rewriteValueS390X_OpStore_0(v *Value) bool { // result: (MOVHstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 2) { break } @@ -41721,10 +40986,9 @@ func rewriteValueS390X_OpStore_0(v *Value) bool { // result: (MOVBstore ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 1) { break } @@ -41741,9 +41005,8 @@ func rewriteValueS390X_OpSub16_0(v *Value) bool { // cond: // result: (SUBW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSUBW) v.AddArg(x) v.AddArg(y) @@ -41755,9 +41018,8 @@ func rewriteValueS390X_OpSub32_0(v *Value) bool { // cond: // result: (SUBW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSUBW) v.AddArg(x) v.AddArg(y) @@ -41769,9 +41031,8 @@ func rewriteValueS390X_OpSub32F_0(v *Value) bool { // cond: // result: (FSUBS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XFSUBS) v.AddArg(x) v.AddArg(y) @@ -41783,9 +41044,8 @@ func rewriteValueS390X_OpSub64_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSUB) v.AddArg(x) v.AddArg(y) @@ -41797,9 +41057,8 @@ func rewriteValueS390X_OpSub64F_0(v *Value) bool { // cond: // result: (FSUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XFSUB) v.AddArg(x) v.AddArg(y) @@ -41811,9 +41070,8 @@ func rewriteValueS390X_OpSub8_0(v *Value) bool { // cond: // result: (SUBW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSUBW) v.AddArg(x) v.AddArg(y) @@ -41825,9 +41083,8 @@ func rewriteValueS390X_OpSubPtr_0(v *Value) bool { // cond: // result: (SUB x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XSUB) v.AddArg(x) v.AddArg(y) @@ -41924,10 +41181,9 @@ func rewriteValueS390X_OpWB_0(v *Value) bool { // result: (LoweredWB {fn} destptr srcptr mem) for { fn := v.Aux - _ = v.Args[2] + mem := v.Args[2] destptr := v.Args[0] srcptr := v.Args[1] - mem := v.Args[2] v.reset(OpS390XLoweredWB) v.Aux = fn v.AddArg(destptr) @@ -41941,9 +41197,8 @@ func rewriteValueS390X_OpXor16_0(v *Value) bool { // cond: // result: (XORW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XXORW) v.AddArg(x) v.AddArg(y) @@ -41955,9 +41210,8 @@ func rewriteValueS390X_OpXor32_0(v *Value) bool { // cond: // result: (XORW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XXORW) v.AddArg(x) v.AddArg(y) @@ -41969,9 +41223,8 @@ func rewriteValueS390X_OpXor64_0(v *Value) bool { // cond: // result: (XOR x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XXOR) v.AddArg(x) v.AddArg(y) @@ -41983,9 +41236,8 @@ func rewriteValueS390X_OpXor8_0(v *Value) bool { // cond: // result: (XORW x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpS390XXORW) v.AddArg(x) v.AddArg(y) @@ -41994,7 +41246,6 @@ func rewriteValueS390X_OpXor8_0(v *Value) bool { } func rewriteValueS390X_OpZero_0(v *Value) bool { b := v.Block - _ = b // match: (Zero [0] _ mem) // cond: // result: mem @@ -42002,7 +41253,6 @@ func rewriteValueS390X_OpZero_0(v *Value) bool { if v.AuxInt != 0 { break } - _ = v.Args[1] mem := v.Args[1] v.reset(OpCopy) v.Type = mem.Type @@ -42016,9 +41266,8 @@ func rewriteValueS390X_OpZero_0(v *Value) bool { if v.AuxInt != 1 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpS390XMOVBstoreconst) v.AuxInt = 0 v.AddArg(destptr) @@ -42032,9 +41281,8 @@ func rewriteValueS390X_OpZero_0(v *Value) bool { if v.AuxInt != 2 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpS390XMOVHstoreconst) v.AuxInt = 0 v.AddArg(destptr) @@ -42048,9 +41296,8 @@ func rewriteValueS390X_OpZero_0(v *Value) bool { if v.AuxInt != 4 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpS390XMOVWstoreconst) v.AuxInt = 0 v.AddArg(destptr) @@ -42064,9 +41311,8 @@ func rewriteValueS390X_OpZero_0(v *Value) bool { if v.AuxInt != 8 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpS390XMOVDstoreconst) v.AuxInt = 0 v.AddArg(destptr) @@ -42080,9 +41326,8 @@ func rewriteValueS390X_OpZero_0(v *Value) bool { if v.AuxInt != 3 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpS390XMOVBstoreconst) v.AuxInt = makeValAndOff(0, 2) v.AddArg(destptr) @@ -42100,9 +41345,8 @@ func rewriteValueS390X_OpZero_0(v *Value) bool { if v.AuxInt != 5 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpS390XMOVBstoreconst) v.AuxInt = makeValAndOff(0, 4) v.AddArg(destptr) @@ -42120,9 +41364,8 @@ func rewriteValueS390X_OpZero_0(v *Value) bool { if v.AuxInt != 6 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpS390XMOVHstoreconst) v.AuxInt = makeValAndOff(0, 4) v.AddArg(destptr) @@ -42140,9 +41383,8 @@ func rewriteValueS390X_OpZero_0(v *Value) bool { if v.AuxInt != 7 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpS390XMOVWstoreconst) v.AuxInt = makeValAndOff(0, 3) v.AddArg(destptr) @@ -42158,9 +41400,8 @@ func rewriteValueS390X_OpZero_0(v *Value) bool { // result: (CLEAR [makeValAndOff(s, 0)] destptr mem) for { s := v.AuxInt - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(s > 0 && s <= 1024) { break } @@ -42174,15 +41415,13 @@ func rewriteValueS390X_OpZero_0(v *Value) bool { } func rewriteValueS390X_OpZero_10(v *Value) bool { b := v.Block - _ = b // match: (Zero [s] destptr mem) // cond: s > 1024 // result: (LoweredZero [s%256] destptr (ADDconst destptr [(s/256)*256]) mem) for { s := v.AuxInt - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(s > 1024) { break } @@ -42266,21 +41505,16 @@ func rewriteValueS390X_OpZeroExt8to64_0(v *Value) bool { } func rewriteBlockS390X(b *Block) bool { config := b.Func.Config - _ = config - fe := b.Func.fe - _ = fe typ := &config.Types _ = typ + v := b.Control + _ = v switch b.Kind { case BlockS390XEQ: // match: (EQ (InvertFlags cmp) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != OpS390XInvertFlags { - break - } + for v.Op == OpS390XInvertFlags { cmp := v.Args[0] b.Kind = BlockS390XEQ b.SetControl(cmp) @@ -42290,11 +41524,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (EQ (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpS390XFlagEQ { - break - } + for v.Op == OpS390XFlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42303,11 +41533,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (EQ (FlagLT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpS390XFlagLT { - break - } + for v.Op == OpS390XFlagLT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42317,11 +41543,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (EQ (FlagGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpS390XFlagGT { - break - } + for v.Op == OpS390XFlagGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42332,11 +41554,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (GE (InvertFlags cmp) yes no) // cond: // result: (LE cmp yes no) - for { - v := b.Control - if v.Op != OpS390XInvertFlags { - break - } + for v.Op == OpS390XInvertFlags { cmp := v.Args[0] b.Kind = BlockS390XLE b.SetControl(cmp) @@ -42346,11 +41564,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (GE (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpS390XFlagEQ { - break - } + for v.Op == OpS390XFlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42359,11 +41573,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (GE (FlagLT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpS390XFlagLT { - break - } + for v.Op == OpS390XFlagLT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42373,11 +41583,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (GE (FlagGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpS390XFlagGT { - break - } + for v.Op == OpS390XFlagGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42387,11 +41593,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (GT (InvertFlags cmp) yes no) // cond: // result: (LT cmp yes no) - for { - v := b.Control - if v.Op != OpS390XInvertFlags { - break - } + for v.Op == OpS390XInvertFlags { cmp := v.Args[0] b.Kind = BlockS390XLT b.SetControl(cmp) @@ -42401,11 +41603,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (GT (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpS390XFlagEQ { - break - } + for v.Op == OpS390XFlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42415,11 +41613,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (GT (FlagLT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpS390XFlagLT { - break - } + for v.Op == OpS390XFlagLT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42429,11 +41623,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (GT (FlagGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpS390XFlagGT { - break - } + for v.Op == OpS390XFlagGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42443,12 +41633,8 @@ func rewriteBlockS390X(b *Block) bool { // match: (If (MOVDLT (MOVDconst [0]) (MOVDconst [1]) cmp) yes no) // cond: // result: (LT cmp yes no) - for { - v := b.Control - if v.Op != OpS390XMOVDLT { - break - } - _ = v.Args[2] + for v.Op == OpS390XMOVDLT { + cmp := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break @@ -42463,7 +41649,6 @@ func rewriteBlockS390X(b *Block) bool { if v_1.AuxInt != 1 { break } - cmp := v.Args[2] b.Kind = BlockS390XLT b.SetControl(cmp) b.Aux = nil @@ -42472,12 +41657,8 @@ func rewriteBlockS390X(b *Block) bool { // match: (If (MOVDLE (MOVDconst [0]) (MOVDconst [1]) cmp) yes no) // cond: // result: (LE cmp yes no) - for { - v := b.Control - if v.Op != OpS390XMOVDLE { - break - } - _ = v.Args[2] + for v.Op == OpS390XMOVDLE { + cmp := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break @@ -42492,7 +41673,6 @@ func rewriteBlockS390X(b *Block) bool { if v_1.AuxInt != 1 { break } - cmp := v.Args[2] b.Kind = BlockS390XLE b.SetControl(cmp) b.Aux = nil @@ -42501,12 +41681,8 @@ func rewriteBlockS390X(b *Block) bool { // match: (If (MOVDGT (MOVDconst [0]) (MOVDconst [1]) cmp) yes no) // cond: // result: (GT cmp yes no) - for { - v := b.Control - if v.Op != OpS390XMOVDGT { - break - } - _ = v.Args[2] + for v.Op == OpS390XMOVDGT { + cmp := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break @@ -42521,7 +41697,6 @@ func rewriteBlockS390X(b *Block) bool { if v_1.AuxInt != 1 { break } - cmp := v.Args[2] b.Kind = BlockS390XGT b.SetControl(cmp) b.Aux = nil @@ -42530,12 +41705,8 @@ func rewriteBlockS390X(b *Block) bool { // match: (If (MOVDGE (MOVDconst [0]) (MOVDconst [1]) cmp) yes no) // cond: // result: (GE cmp yes no) - for { - v := b.Control - if v.Op != OpS390XMOVDGE { - break - } - _ = v.Args[2] + for v.Op == OpS390XMOVDGE { + cmp := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break @@ -42550,7 +41721,6 @@ func rewriteBlockS390X(b *Block) bool { if v_1.AuxInt != 1 { break } - cmp := v.Args[2] b.Kind = BlockS390XGE b.SetControl(cmp) b.Aux = nil @@ -42559,12 +41729,8 @@ func rewriteBlockS390X(b *Block) bool { // match: (If (MOVDEQ (MOVDconst [0]) (MOVDconst [1]) cmp) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != OpS390XMOVDEQ { - break - } - _ = v.Args[2] + for v.Op == OpS390XMOVDEQ { + cmp := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break @@ -42579,7 +41745,6 @@ func rewriteBlockS390X(b *Block) bool { if v_1.AuxInt != 1 { break } - cmp := v.Args[2] b.Kind = BlockS390XEQ b.SetControl(cmp) b.Aux = nil @@ -42588,12 +41753,8 @@ func rewriteBlockS390X(b *Block) bool { // match: (If (MOVDNE (MOVDconst [0]) (MOVDconst [1]) cmp) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != OpS390XMOVDNE { - break - } - _ = v.Args[2] + for v.Op == OpS390XMOVDNE { + cmp := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break @@ -42608,7 +41769,6 @@ func rewriteBlockS390X(b *Block) bool { if v_1.AuxInt != 1 { break } - cmp := v.Args[2] b.Kind = BlockS390XNE b.SetControl(cmp) b.Aux = nil @@ -42617,12 +41777,8 @@ func rewriteBlockS390X(b *Block) bool { // match: (If (MOVDGTnoinv (MOVDconst [0]) (MOVDconst [1]) cmp) yes no) // cond: // result: (GTF cmp yes no) - for { - v := b.Control - if v.Op != OpS390XMOVDGTnoinv { - break - } - _ = v.Args[2] + for v.Op == OpS390XMOVDGTnoinv { + cmp := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break @@ -42637,7 +41793,6 @@ func rewriteBlockS390X(b *Block) bool { if v_1.AuxInt != 1 { break } - cmp := v.Args[2] b.Kind = BlockS390XGTF b.SetControl(cmp) b.Aux = nil @@ -42646,12 +41801,8 @@ func rewriteBlockS390X(b *Block) bool { // match: (If (MOVDGEnoinv (MOVDconst [0]) (MOVDconst [1]) cmp) yes no) // cond: // result: (GEF cmp yes no) - for { - v := b.Control - if v.Op != OpS390XMOVDGEnoinv { - break - } - _ = v.Args[2] + for v.Op == OpS390XMOVDGEnoinv { + cmp := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpS390XMOVDconst { break @@ -42666,7 +41817,6 @@ func rewriteBlockS390X(b *Block) bool { if v_1.AuxInt != 1 { break } - cmp := v.Args[2] b.Kind = BlockS390XGEF b.SetControl(cmp) b.Aux = nil @@ -42676,8 +41826,6 @@ func rewriteBlockS390X(b *Block) bool { // cond: // result: (NE (CMPWconst [0] (MOVBZreg cond)) yes no) for { - v := b.Control - _ = v cond := b.Control b.Kind = BlockS390XNE v0 := b.NewValue0(v.Pos, OpS390XCMPWconst, types.TypeFlags) @@ -42693,11 +41841,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (LE (InvertFlags cmp) yes no) // cond: // result: (GE cmp yes no) - for { - v := b.Control - if v.Op != OpS390XInvertFlags { - break - } + for v.Op == OpS390XInvertFlags { cmp := v.Args[0] b.Kind = BlockS390XGE b.SetControl(cmp) @@ -42707,11 +41851,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (LE (FlagEQ) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpS390XFlagEQ { - break - } + for v.Op == OpS390XFlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42720,11 +41860,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (LE (FlagLT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpS390XFlagLT { - break - } + for v.Op == OpS390XFlagLT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42733,11 +41869,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (LE (FlagGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpS390XFlagGT { - break - } + for v.Op == OpS390XFlagGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42748,11 +41880,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (LT (InvertFlags cmp) yes no) // cond: // result: (GT cmp yes no) - for { - v := b.Control - if v.Op != OpS390XInvertFlags { - break - } + for v.Op == OpS390XInvertFlags { cmp := v.Args[0] b.Kind = BlockS390XGT b.SetControl(cmp) @@ -42762,11 +41890,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (LT (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpS390XFlagEQ { - break - } + for v.Op == OpS390XFlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42776,11 +41900,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (LT (FlagLT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpS390XFlagLT { - break - } + for v.Op == OpS390XFlagLT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42789,11 +41909,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (LT (FlagGT) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpS390XFlagGT { - break - } + for v.Op == OpS390XFlagGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -42804,11 +41920,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (NE (CMPWconst [0] (MOVDLT (MOVDconst [0]) (MOVDconst [1]) cmp)) yes no) // cond: // result: (LT cmp yes no) - for { - v := b.Control - if v.Op != OpS390XCMPWconst { - break - } + for v.Op == OpS390XCMPWconst { if v.AuxInt != 0 { break } @@ -42816,7 +41928,7 @@ func rewriteBlockS390X(b *Block) bool { if v_0.Op != OpS390XMOVDLT { break } - _ = v_0.Args[2] + cmp := v_0.Args[2] v_0_0 := v_0.Args[0] if v_0_0.Op != OpS390XMOVDconst { break @@ -42831,7 +41943,6 @@ func rewriteBlockS390X(b *Block) bool { if v_0_1.AuxInt != 1 { break } - cmp := v_0.Args[2] b.Kind = BlockS390XLT b.SetControl(cmp) b.Aux = nil @@ -42840,11 +41951,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (NE (CMPWconst [0] (MOVDLE (MOVDconst [0]) (MOVDconst [1]) cmp)) yes no) // cond: // result: (LE cmp yes no) - for { - v := b.Control - if v.Op != OpS390XCMPWconst { - break - } + for v.Op == OpS390XCMPWconst { if v.AuxInt != 0 { break } @@ -42852,7 +41959,7 @@ func rewriteBlockS390X(b *Block) bool { if v_0.Op != OpS390XMOVDLE { break } - _ = v_0.Args[2] + cmp := v_0.Args[2] v_0_0 := v_0.Args[0] if v_0_0.Op != OpS390XMOVDconst { break @@ -42867,7 +41974,6 @@ func rewriteBlockS390X(b *Block) bool { if v_0_1.AuxInt != 1 { break } - cmp := v_0.Args[2] b.Kind = BlockS390XLE b.SetControl(cmp) b.Aux = nil @@ -42876,11 +41982,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (NE (CMPWconst [0] (MOVDGT (MOVDconst [0]) (MOVDconst [1]) cmp)) yes no) // cond: // result: (GT cmp yes no) - for { - v := b.Control - if v.Op != OpS390XCMPWconst { - break - } + for v.Op == OpS390XCMPWconst { if v.AuxInt != 0 { break } @@ -42888,7 +41990,7 @@ func rewriteBlockS390X(b *Block) bool { if v_0.Op != OpS390XMOVDGT { break } - _ = v_0.Args[2] + cmp := v_0.Args[2] v_0_0 := v_0.Args[0] if v_0_0.Op != OpS390XMOVDconst { break @@ -42903,7 +42005,6 @@ func rewriteBlockS390X(b *Block) bool { if v_0_1.AuxInt != 1 { break } - cmp := v_0.Args[2] b.Kind = BlockS390XGT b.SetControl(cmp) b.Aux = nil @@ -42912,11 +42013,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (NE (CMPWconst [0] (MOVDGE (MOVDconst [0]) (MOVDconst [1]) cmp)) yes no) // cond: // result: (GE cmp yes no) - for { - v := b.Control - if v.Op != OpS390XCMPWconst { - break - } + for v.Op == OpS390XCMPWconst { if v.AuxInt != 0 { break } @@ -42924,7 +42021,7 @@ func rewriteBlockS390X(b *Block) bool { if v_0.Op != OpS390XMOVDGE { break } - _ = v_0.Args[2] + cmp := v_0.Args[2] v_0_0 := v_0.Args[0] if v_0_0.Op != OpS390XMOVDconst { break @@ -42939,7 +42036,6 @@ func rewriteBlockS390X(b *Block) bool { if v_0_1.AuxInt != 1 { break } - cmp := v_0.Args[2] b.Kind = BlockS390XGE b.SetControl(cmp) b.Aux = nil @@ -42948,11 +42044,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (NE (CMPWconst [0] (MOVDEQ (MOVDconst [0]) (MOVDconst [1]) cmp)) yes no) // cond: // result: (EQ cmp yes no) - for { - v := b.Control - if v.Op != OpS390XCMPWconst { - break - } + for v.Op == OpS390XCMPWconst { if v.AuxInt != 0 { break } @@ -42960,7 +42052,7 @@ func rewriteBlockS390X(b *Block) bool { if v_0.Op != OpS390XMOVDEQ { break } - _ = v_0.Args[2] + cmp := v_0.Args[2] v_0_0 := v_0.Args[0] if v_0_0.Op != OpS390XMOVDconst { break @@ -42975,7 +42067,6 @@ func rewriteBlockS390X(b *Block) bool { if v_0_1.AuxInt != 1 { break } - cmp := v_0.Args[2] b.Kind = BlockS390XEQ b.SetControl(cmp) b.Aux = nil @@ -42984,11 +42075,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (NE (CMPWconst [0] (MOVDNE (MOVDconst [0]) (MOVDconst [1]) cmp)) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != OpS390XCMPWconst { - break - } + for v.Op == OpS390XCMPWconst { if v.AuxInt != 0 { break } @@ -42996,7 +42083,7 @@ func rewriteBlockS390X(b *Block) bool { if v_0.Op != OpS390XMOVDNE { break } - _ = v_0.Args[2] + cmp := v_0.Args[2] v_0_0 := v_0.Args[0] if v_0_0.Op != OpS390XMOVDconst { break @@ -43011,7 +42098,6 @@ func rewriteBlockS390X(b *Block) bool { if v_0_1.AuxInt != 1 { break } - cmp := v_0.Args[2] b.Kind = BlockS390XNE b.SetControl(cmp) b.Aux = nil @@ -43020,11 +42106,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (NE (CMPWconst [0] (MOVDGTnoinv (MOVDconst [0]) (MOVDconst [1]) cmp)) yes no) // cond: // result: (GTF cmp yes no) - for { - v := b.Control - if v.Op != OpS390XCMPWconst { - break - } + for v.Op == OpS390XCMPWconst { if v.AuxInt != 0 { break } @@ -43032,7 +42114,7 @@ func rewriteBlockS390X(b *Block) bool { if v_0.Op != OpS390XMOVDGTnoinv { break } - _ = v_0.Args[2] + cmp := v_0.Args[2] v_0_0 := v_0.Args[0] if v_0_0.Op != OpS390XMOVDconst { break @@ -43047,7 +42129,6 @@ func rewriteBlockS390X(b *Block) bool { if v_0_1.AuxInt != 1 { break } - cmp := v_0.Args[2] b.Kind = BlockS390XGTF b.SetControl(cmp) b.Aux = nil @@ -43056,11 +42137,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (NE (CMPWconst [0] (MOVDGEnoinv (MOVDconst [0]) (MOVDconst [1]) cmp)) yes no) // cond: // result: (GEF cmp yes no) - for { - v := b.Control - if v.Op != OpS390XCMPWconst { - break - } + for v.Op == OpS390XCMPWconst { if v.AuxInt != 0 { break } @@ -43068,7 +42145,7 @@ func rewriteBlockS390X(b *Block) bool { if v_0.Op != OpS390XMOVDGEnoinv { break } - _ = v_0.Args[2] + cmp := v_0.Args[2] v_0_0 := v_0.Args[0] if v_0_0.Op != OpS390XMOVDconst { break @@ -43083,7 +42160,6 @@ func rewriteBlockS390X(b *Block) bool { if v_0_1.AuxInt != 1 { break } - cmp := v_0.Args[2] b.Kind = BlockS390XGEF b.SetControl(cmp) b.Aux = nil @@ -43092,11 +42168,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (NE (InvertFlags cmp) yes no) // cond: // result: (NE cmp yes no) - for { - v := b.Control - if v.Op != OpS390XInvertFlags { - break - } + for v.Op == OpS390XInvertFlags { cmp := v.Args[0] b.Kind = BlockS390XNE b.SetControl(cmp) @@ -43106,11 +42178,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (NE (FlagEQ) yes no) // cond: // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpS390XFlagEQ { - break - } + for v.Op == OpS390XFlagEQ { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -43120,11 +42188,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (NE (FlagLT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpS390XFlagLT { - break - } + for v.Op == OpS390XFlagLT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil @@ -43133,11 +42197,7 @@ func rewriteBlockS390X(b *Block) bool { // match: (NE (FlagGT) yes no) // cond: // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpS390XFlagGT { - break - } + for v.Op == OpS390XFlagGT { b.Kind = BlockFirst b.SetControl(nil) b.Aux = nil diff --git a/src/cmd/compile/internal/ssa/rewriteWasm.go b/src/cmd/compile/internal/ssa/rewriteWasm.go index c17ed54b3c..acfbb24f10 100644 --- a/src/cmd/compile/internal/ssa/rewriteWasm.go +++ b/src/cmd/compile/internal/ssa/rewriteWasm.go @@ -17,6 +17,8 @@ var _ = types.TypeMem // in case not otherwise used func rewriteValueWasm(v *Value) bool { switch v.Op { + case OpAbs: + return rewriteValueWasm_OpAbs_0(v) case OpAdd16: return rewriteValueWasm_OpAdd16_0(v) case OpAdd32: @@ -43,6 +45,10 @@ func rewriteValueWasm(v *Value) bool { return rewriteValueWasm_OpAnd8_0(v) case OpAndB: return rewriteValueWasm_OpAndB_0(v) + case OpBitLen64: + return rewriteValueWasm_OpBitLen64_0(v) + case OpCeil: + return rewriteValueWasm_OpCeil_0(v) case OpClosureCall: return rewriteValueWasm_OpClosureCall_0(v) case OpCom16: @@ -71,6 +77,24 @@ func rewriteValueWasm(v *Value) bool { return rewriteValueWasm_OpConstNil_0(v) case OpConvert: return rewriteValueWasm_OpConvert_0(v) + case OpCopysign: + return rewriteValueWasm_OpCopysign_0(v) + case OpCtz16: + return rewriteValueWasm_OpCtz16_0(v) + case OpCtz16NonZero: + return rewriteValueWasm_OpCtz16NonZero_0(v) + case OpCtz32: + return rewriteValueWasm_OpCtz32_0(v) + case OpCtz32NonZero: + return rewriteValueWasm_OpCtz32NonZero_0(v) + case OpCtz64: + return rewriteValueWasm_OpCtz64_0(v) + case OpCtz64NonZero: + return rewriteValueWasm_OpCtz64NonZero_0(v) + case OpCtz8: + return rewriteValueWasm_OpCtz8_0(v) + case OpCtz8NonZero: + return rewriteValueWasm_OpCtz8NonZero_0(v) case OpCvt32Fto32: return rewriteValueWasm_OpCvt32Fto32_0(v) case OpCvt32Fto32U: @@ -143,6 +167,8 @@ func rewriteValueWasm(v *Value) bool { return rewriteValueWasm_OpEqB_0(v) case OpEqPtr: return rewriteValueWasm_OpEqPtr_0(v) + case OpFloor: + return rewriteValueWasm_OpFloor_0(v) case OpGeq16: return rewriteValueWasm_OpGeq16_0(v) case OpGeq16U: @@ -347,10 +373,28 @@ func rewriteValueWasm(v *Value) bool { return rewriteValueWasm_OpOr8_0(v) case OpOrB: return rewriteValueWasm_OpOrB_0(v) + case OpPopCount16: + return rewriteValueWasm_OpPopCount16_0(v) + case OpPopCount32: + return rewriteValueWasm_OpPopCount32_0(v) + case OpPopCount64: + return rewriteValueWasm_OpPopCount64_0(v) + case OpPopCount8: + return rewriteValueWasm_OpPopCount8_0(v) + case OpRotateLeft16: + return rewriteValueWasm_OpRotateLeft16_0(v) + case OpRotateLeft32: + return rewriteValueWasm_OpRotateLeft32_0(v) + case OpRotateLeft64: + return rewriteValueWasm_OpRotateLeft64_0(v) + case OpRotateLeft8: + return rewriteValueWasm_OpRotateLeft8_0(v) case OpRound32F: return rewriteValueWasm_OpRound32F_0(v) case OpRound64F: return rewriteValueWasm_OpRound64F_0(v) + case OpRoundToEven: + return rewriteValueWasm_OpRoundToEven_0(v) case OpRsh16Ux16: return rewriteValueWasm_OpRsh16Ux16_0(v) case OpRsh16Ux32: @@ -429,6 +473,8 @@ func rewriteValueWasm(v *Value) bool { return rewriteValueWasm_OpSignExt8to64_0(v) case OpSlicemask: return rewriteValueWasm_OpSlicemask_0(v) + case OpSqrt: + return rewriteValueWasm_OpSqrt_0(v) case OpStaticCall: return rewriteValueWasm_OpStaticCall_0(v) case OpStore: @@ -447,6 +493,8 @@ func rewriteValueWasm(v *Value) bool { return rewriteValueWasm_OpSub8_0(v) case OpSubPtr: return rewriteValueWasm_OpSubPtr_0(v) + case OpTrunc: + return rewriteValueWasm_OpTrunc_0(v) case OpTrunc16to8: return rewriteValueWasm_OpTrunc16to8_0(v) case OpTrunc32to16: @@ -536,14 +584,24 @@ func rewriteValueWasm(v *Value) bool { } return false } +func rewriteValueWasm_OpAbs_0(v *Value) bool { + // match: (Abs x) + // cond: + // result: (F64Abs x) + for { + x := v.Args[0] + v.reset(OpWasmF64Abs) + v.AddArg(x) + return true + } +} func rewriteValueWasm_OpAdd16_0(v *Value) bool { // match: (Add16 x y) // cond: // result: (I64Add x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Add) v.AddArg(x) v.AddArg(y) @@ -555,9 +613,8 @@ func rewriteValueWasm_OpAdd32_0(v *Value) bool { // cond: // result: (I64Add x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Add) v.AddArg(x) v.AddArg(y) @@ -569,9 +626,8 @@ func rewriteValueWasm_OpAdd32F_0(v *Value) bool { // cond: // result: (F64Add x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmF64Add) v.AddArg(x) v.AddArg(y) @@ -583,9 +639,8 @@ func rewriteValueWasm_OpAdd64_0(v *Value) bool { // cond: // result: (I64Add x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Add) v.AddArg(x) v.AddArg(y) @@ -597,9 +652,8 @@ func rewriteValueWasm_OpAdd64F_0(v *Value) bool { // cond: // result: (F64Add x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmF64Add) v.AddArg(x) v.AddArg(y) @@ -611,9 +665,8 @@ func rewriteValueWasm_OpAdd8_0(v *Value) bool { // cond: // result: (I64Add x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Add) v.AddArg(x) v.AddArg(y) @@ -625,9 +678,8 @@ func rewriteValueWasm_OpAddPtr_0(v *Value) bool { // cond: // result: (I64Add x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Add) v.AddArg(x) v.AddArg(y) @@ -652,9 +704,8 @@ func rewriteValueWasm_OpAnd16_0(v *Value) bool { // cond: // result: (I64And x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64And) v.AddArg(x) v.AddArg(y) @@ -666,9 +717,8 @@ func rewriteValueWasm_OpAnd32_0(v *Value) bool { // cond: // result: (I64And x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64And) v.AddArg(x) v.AddArg(y) @@ -680,9 +730,8 @@ func rewriteValueWasm_OpAnd64_0(v *Value) bool { // cond: // result: (I64And x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64And) v.AddArg(x) v.AddArg(y) @@ -694,9 +743,8 @@ func rewriteValueWasm_OpAnd8_0(v *Value) bool { // cond: // result: (I64And x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64And) v.AddArg(x) v.AddArg(y) @@ -708,25 +756,52 @@ func rewriteValueWasm_OpAndB_0(v *Value) bool { // cond: // result: (I64And x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64And) v.AddArg(x) v.AddArg(y) return true } } +func rewriteValueWasm_OpBitLen64_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (BitLen64 x) + // cond: + // result: (I64Sub (I64Const [64]) (I64Clz x)) + for { + x := v.Args[0] + v.reset(OpWasmI64Sub) + v0 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) + v0.AuxInt = 64 + v.AddArg(v0) + v1 := b.NewValue0(v.Pos, OpWasmI64Clz, typ.Int64) + v1.AddArg(x) + v.AddArg(v1) + return true + } +} +func rewriteValueWasm_OpCeil_0(v *Value) bool { + // match: (Ceil x) + // cond: + // result: (F64Ceil x) + for { + x := v.Args[0] + v.reset(OpWasmF64Ceil) + v.AddArg(x) + return true + } +} func rewriteValueWasm_OpClosureCall_0(v *Value) bool { // match: (ClosureCall [argwid] entry closure mem) // cond: // result: (LoweredClosureCall [argwid] entry closure mem) for { argwid := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] entry := v.Args[0] closure := v.Args[1] - mem := v.Args[2] v.reset(OpWasmLoweredClosureCall) v.AuxInt = argwid v.AddArg(entry) @@ -737,9 +812,7 @@ func rewriteValueWasm_OpClosureCall_0(v *Value) bool { } func rewriteValueWasm_OpCom16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Com16 x) // cond: // result: (I64Xor x (I64Const [-1])) @@ -755,9 +828,7 @@ func rewriteValueWasm_OpCom16_0(v *Value) bool { } func rewriteValueWasm_OpCom32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Com32 x) // cond: // result: (I64Xor x (I64Const [-1])) @@ -773,9 +844,7 @@ func rewriteValueWasm_OpCom32_0(v *Value) bool { } func rewriteValueWasm_OpCom64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Com64 x) // cond: // result: (I64Xor x (I64Const [-1])) @@ -791,9 +860,7 @@ func rewriteValueWasm_OpCom64_0(v *Value) bool { } func rewriteValueWasm_OpCom8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Com8 x) // cond: // result: (I64Xor x (I64Const [-1])) @@ -900,9 +967,8 @@ func rewriteValueWasm_OpConvert_0(v *Value) bool { // result: (LoweredConvert x mem) for { t := v.Type - _ = v.Args[1] - x := v.Args[0] mem := v.Args[1] + x := v.Args[0] v.reset(OpWasmLoweredConvert) v.Type = t v.AddArg(x) @@ -910,13 +976,135 @@ func rewriteValueWasm_OpConvert_0(v *Value) bool { return true } } +func rewriteValueWasm_OpCopysign_0(v *Value) bool { + // match: (Copysign x y) + // cond: + // result: (F64Copysign x y) + for { + y := v.Args[1] + x := v.Args[0] + v.reset(OpWasmF64Copysign) + v.AddArg(x) + v.AddArg(y) + return true + } +} +func rewriteValueWasm_OpCtz16_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Ctz16 x) + // cond: + // result: (I64Ctz (I64Or x (I64Const [0x10000]))) + for { + x := v.Args[0] + v.reset(OpWasmI64Ctz) + v0 := b.NewValue0(v.Pos, OpWasmI64Or, typ.Int64) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) + v1.AuxInt = 0x10000 + v0.AddArg(v1) + v.AddArg(v0) + return true + } +} +func rewriteValueWasm_OpCtz16NonZero_0(v *Value) bool { + // match: (Ctz16NonZero x) + // cond: + // result: (I64Ctz x) + for { + x := v.Args[0] + v.reset(OpWasmI64Ctz) + v.AddArg(x) + return true + } +} +func rewriteValueWasm_OpCtz32_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Ctz32 x) + // cond: + // result: (I64Ctz (I64Or x (I64Const [0x100000000]))) + for { + x := v.Args[0] + v.reset(OpWasmI64Ctz) + v0 := b.NewValue0(v.Pos, OpWasmI64Or, typ.Int64) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) + v1.AuxInt = 0x100000000 + v0.AddArg(v1) + v.AddArg(v0) + return true + } +} +func rewriteValueWasm_OpCtz32NonZero_0(v *Value) bool { + // match: (Ctz32NonZero x) + // cond: + // result: (I64Ctz x) + for { + x := v.Args[0] + v.reset(OpWasmI64Ctz) + v.AddArg(x) + return true + } +} +func rewriteValueWasm_OpCtz64_0(v *Value) bool { + // match: (Ctz64 x) + // cond: + // result: (I64Ctz x) + for { + x := v.Args[0] + v.reset(OpWasmI64Ctz) + v.AddArg(x) + return true + } +} +func rewriteValueWasm_OpCtz64NonZero_0(v *Value) bool { + // match: (Ctz64NonZero x) + // cond: + // result: (I64Ctz x) + for { + x := v.Args[0] + v.reset(OpWasmI64Ctz) + v.AddArg(x) + return true + } +} +func rewriteValueWasm_OpCtz8_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Ctz8 x) + // cond: + // result: (I64Ctz (I64Or x (I64Const [0x100]))) + for { + x := v.Args[0] + v.reset(OpWasmI64Ctz) + v0 := b.NewValue0(v.Pos, OpWasmI64Or, typ.Int64) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) + v1.AuxInt = 0x100 + v0.AddArg(v1) + v.AddArg(v0) + return true + } +} +func rewriteValueWasm_OpCtz8NonZero_0(v *Value) bool { + // match: (Ctz8NonZero x) + // cond: + // result: (I64Ctz x) + for { + x := v.Args[0] + v.reset(OpWasmI64Ctz) + v.AddArg(x) + return true + } +} func rewriteValueWasm_OpCvt32Fto32_0(v *Value) bool { // match: (Cvt32Fto32 x) // cond: - // result: (I64TruncSF64 x) + // result: (I64TruncSatF64S x) for { x := v.Args[0] - v.reset(OpWasmI64TruncSF64) + v.reset(OpWasmI64TruncSatF64S) v.AddArg(x) return true } @@ -924,10 +1112,10 @@ func rewriteValueWasm_OpCvt32Fto32_0(v *Value) bool { func rewriteValueWasm_OpCvt32Fto32U_0(v *Value) bool { // match: (Cvt32Fto32U x) // cond: - // result: (I64TruncUF64 x) + // result: (I64TruncSatF64U x) for { x := v.Args[0] - v.reset(OpWasmI64TruncUF64) + v.reset(OpWasmI64TruncSatF64U) v.AddArg(x) return true } @@ -935,10 +1123,10 @@ func rewriteValueWasm_OpCvt32Fto32U_0(v *Value) bool { func rewriteValueWasm_OpCvt32Fto64_0(v *Value) bool { // match: (Cvt32Fto64 x) // cond: - // result: (I64TruncSF64 x) + // result: (I64TruncSatF64S x) for { x := v.Args[0] - v.reset(OpWasmI64TruncSF64) + v.reset(OpWasmI64TruncSatF64S) v.AddArg(x) return true } @@ -958,26 +1146,24 @@ func rewriteValueWasm_OpCvt32Fto64F_0(v *Value) bool { func rewriteValueWasm_OpCvt32Fto64U_0(v *Value) bool { // match: (Cvt32Fto64U x) // cond: - // result: (I64TruncUF64 x) + // result: (I64TruncSatF64U x) for { x := v.Args[0] - v.reset(OpWasmI64TruncUF64) + v.reset(OpWasmI64TruncSatF64U) v.AddArg(x) return true } } func rewriteValueWasm_OpCvt32Uto32F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Cvt32Uto32F x) // cond: - // result: (LoweredRound32F (F64ConvertUI64 (ZeroExt32to64 x))) + // result: (LoweredRound32F (F64ConvertI64U (ZeroExt32to64 x))) for { x := v.Args[0] v.reset(OpWasmLoweredRound32F) - v0 := b.NewValue0(v.Pos, OpWasmF64ConvertUI64, typ.Float64) + v0 := b.NewValue0(v.Pos, OpWasmF64ConvertI64U, typ.Float64) v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) v1.AddArg(x) v0.AddArg(v1) @@ -987,15 +1173,13 @@ func rewriteValueWasm_OpCvt32Uto32F_0(v *Value) bool { } func rewriteValueWasm_OpCvt32Uto64F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Cvt32Uto64F x) // cond: - // result: (F64ConvertUI64 (ZeroExt32to64 x)) + // result: (F64ConvertI64U (ZeroExt32to64 x)) for { x := v.Args[0] - v.reset(OpWasmF64ConvertUI64) + v.reset(OpWasmF64ConvertI64U) v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) v0.AddArg(x) v.AddArg(v0) @@ -1004,16 +1188,14 @@ func rewriteValueWasm_OpCvt32Uto64F_0(v *Value) bool { } func rewriteValueWasm_OpCvt32to32F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Cvt32to32F x) // cond: - // result: (LoweredRound32F (F64ConvertSI64 (SignExt32to64 x))) + // result: (LoweredRound32F (F64ConvertI64S (SignExt32to64 x))) for { x := v.Args[0] v.reset(OpWasmLoweredRound32F) - v0 := b.NewValue0(v.Pos, OpWasmF64ConvertSI64, typ.Float64) + v0 := b.NewValue0(v.Pos, OpWasmF64ConvertI64S, typ.Float64) v1 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v1.AddArg(x) v0.AddArg(v1) @@ -1023,15 +1205,13 @@ func rewriteValueWasm_OpCvt32to32F_0(v *Value) bool { } func rewriteValueWasm_OpCvt32to64F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Cvt32to64F x) // cond: - // result: (F64ConvertSI64 (SignExt32to64 x)) + // result: (F64ConvertI64S (SignExt32to64 x)) for { x := v.Args[0] - v.reset(OpWasmF64ConvertSI64) + v.reset(OpWasmF64ConvertI64S) v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v0.AddArg(x) v.AddArg(v0) @@ -1041,10 +1221,10 @@ func rewriteValueWasm_OpCvt32to64F_0(v *Value) bool { func rewriteValueWasm_OpCvt64Fto32_0(v *Value) bool { // match: (Cvt64Fto32 x) // cond: - // result: (I64TruncSF64 x) + // result: (I64TruncSatF64S x) for { x := v.Args[0] - v.reset(OpWasmI64TruncSF64) + v.reset(OpWasmI64TruncSatF64S) v.AddArg(x) return true } @@ -1063,10 +1243,10 @@ func rewriteValueWasm_OpCvt64Fto32F_0(v *Value) bool { func rewriteValueWasm_OpCvt64Fto32U_0(v *Value) bool { // match: (Cvt64Fto32U x) // cond: - // result: (I64TruncUF64 x) + // result: (I64TruncSatF64U x) for { x := v.Args[0] - v.reset(OpWasmI64TruncUF64) + v.reset(OpWasmI64TruncSatF64U) v.AddArg(x) return true } @@ -1074,10 +1254,10 @@ func rewriteValueWasm_OpCvt64Fto32U_0(v *Value) bool { func rewriteValueWasm_OpCvt64Fto64_0(v *Value) bool { // match: (Cvt64Fto64 x) // cond: - // result: (I64TruncSF64 x) + // result: (I64TruncSatF64S x) for { x := v.Args[0] - v.reset(OpWasmI64TruncSF64) + v.reset(OpWasmI64TruncSatF64S) v.AddArg(x) return true } @@ -1085,26 +1265,24 @@ func rewriteValueWasm_OpCvt64Fto64_0(v *Value) bool { func rewriteValueWasm_OpCvt64Fto64U_0(v *Value) bool { // match: (Cvt64Fto64U x) // cond: - // result: (I64TruncUF64 x) + // result: (I64TruncSatF64U x) for { x := v.Args[0] - v.reset(OpWasmI64TruncUF64) + v.reset(OpWasmI64TruncSatF64U) v.AddArg(x) return true } } func rewriteValueWasm_OpCvt64Uto32F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Cvt64Uto32F x) // cond: - // result: (LoweredRound32F (F64ConvertUI64 x)) + // result: (LoweredRound32F (F64ConvertI64U x)) for { x := v.Args[0] v.reset(OpWasmLoweredRound32F) - v0 := b.NewValue0(v.Pos, OpWasmF64ConvertUI64, typ.Float64) + v0 := b.NewValue0(v.Pos, OpWasmF64ConvertI64U, typ.Float64) v0.AddArg(x) v.AddArg(v0) return true @@ -1113,26 +1291,24 @@ func rewriteValueWasm_OpCvt64Uto32F_0(v *Value) bool { func rewriteValueWasm_OpCvt64Uto64F_0(v *Value) bool { // match: (Cvt64Uto64F x) // cond: - // result: (F64ConvertUI64 x) + // result: (F64ConvertI64U x) for { x := v.Args[0] - v.reset(OpWasmF64ConvertUI64) + v.reset(OpWasmF64ConvertI64U) v.AddArg(x) return true } } func rewriteValueWasm_OpCvt64to32F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Cvt64to32F x) // cond: - // result: (LoweredRound32F (F64ConvertSI64 x)) + // result: (LoweredRound32F (F64ConvertI64S x)) for { x := v.Args[0] v.reset(OpWasmLoweredRound32F) - v0 := b.NewValue0(v.Pos, OpWasmF64ConvertSI64, typ.Float64) + v0 := b.NewValue0(v.Pos, OpWasmF64ConvertI64S, typ.Float64) v0.AddArg(x) v.AddArg(v0) return true @@ -1141,26 +1317,23 @@ func rewriteValueWasm_OpCvt64to32F_0(v *Value) bool { func rewriteValueWasm_OpCvt64to64F_0(v *Value) bool { // match: (Cvt64to64F x) // cond: - // result: (F64ConvertSI64 x) + // result: (F64ConvertI64S x) for { x := v.Args[0] - v.reset(OpWasmF64ConvertSI64) + v.reset(OpWasmF64ConvertI64S) v.AddArg(x) return true } } func rewriteValueWasm_OpDiv16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div16 x y) // cond: // result: (I64DivS (SignExt16to64 x) (SignExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64DivS) v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) v0.AddArg(x) @@ -1173,16 +1346,13 @@ func rewriteValueWasm_OpDiv16_0(v *Value) bool { } func rewriteValueWasm_OpDiv16u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div16u x y) // cond: // result: (I64DivU (ZeroExt16to64 x) (ZeroExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64DivU) v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) v0.AddArg(x) @@ -1195,16 +1365,13 @@ func rewriteValueWasm_OpDiv16u_0(v *Value) bool { } func rewriteValueWasm_OpDiv32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div32 x y) // cond: // result: (I64DivS (SignExt32to64 x) (SignExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64DivS) v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v0.AddArg(x) @@ -1220,9 +1387,8 @@ func rewriteValueWasm_OpDiv32F_0(v *Value) bool { // cond: // result: (F64Div x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmF64Div) v.AddArg(x) v.AddArg(y) @@ -1231,16 +1397,13 @@ func rewriteValueWasm_OpDiv32F_0(v *Value) bool { } func rewriteValueWasm_OpDiv32u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div32u x y) // cond: // result: (I64DivU (ZeroExt32to64 x) (ZeroExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64DivU) v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) v0.AddArg(x) @@ -1256,9 +1419,8 @@ func rewriteValueWasm_OpDiv64_0(v *Value) bool { // cond: // result: (I64DivS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64DivS) v.AddArg(x) v.AddArg(y) @@ -1270,9 +1432,8 @@ func rewriteValueWasm_OpDiv64F_0(v *Value) bool { // cond: // result: (F64Div x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmF64Div) v.AddArg(x) v.AddArg(y) @@ -1284,9 +1445,8 @@ func rewriteValueWasm_OpDiv64u_0(v *Value) bool { // cond: // result: (I64DivU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64DivU) v.AddArg(x) v.AddArg(y) @@ -1295,16 +1455,13 @@ func rewriteValueWasm_OpDiv64u_0(v *Value) bool { } func rewriteValueWasm_OpDiv8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div8 x y) // cond: // result: (I64DivS (SignExt8to64 x) (SignExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64DivS) v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) v0.AddArg(x) @@ -1317,16 +1474,13 @@ func rewriteValueWasm_OpDiv8_0(v *Value) bool { } func rewriteValueWasm_OpDiv8u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div8u x y) // cond: // result: (I64DivU (ZeroExt8to64 x) (ZeroExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64DivU) v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) v0.AddArg(x) @@ -1339,16 +1493,13 @@ func rewriteValueWasm_OpDiv8u_0(v *Value) bool { } func rewriteValueWasm_OpEq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq16 x y) // cond: // result: (I64Eq (ZeroExt16to64 x) (ZeroExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Eq) v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) v0.AddArg(x) @@ -1361,16 +1512,13 @@ func rewriteValueWasm_OpEq16_0(v *Value) bool { } func rewriteValueWasm_OpEq32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq32 x y) // cond: // result: (I64Eq (ZeroExt32to64 x) (ZeroExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Eq) v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) v0.AddArg(x) @@ -1383,16 +1531,13 @@ func rewriteValueWasm_OpEq32_0(v *Value) bool { } func rewriteValueWasm_OpEq32F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq32F x y) // cond: // result: (F64Eq (LoweredRound32F x) (LoweredRound32F y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmF64Eq) v0 := b.NewValue0(v.Pos, OpWasmLoweredRound32F, typ.Float32) v0.AddArg(x) @@ -1408,9 +1553,8 @@ func rewriteValueWasm_OpEq64_0(v *Value) bool { // cond: // result: (I64Eq x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Eq) v.AddArg(x) v.AddArg(y) @@ -1422,9 +1566,8 @@ func rewriteValueWasm_OpEq64F_0(v *Value) bool { // cond: // result: (F64Eq x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmF64Eq) v.AddArg(x) v.AddArg(y) @@ -1433,16 +1576,13 @@ func rewriteValueWasm_OpEq64F_0(v *Value) bool { } func rewriteValueWasm_OpEq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq8 x y) // cond: // result: (I64Eq (ZeroExt8to64 x) (ZeroExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Eq) v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) v0.AddArg(x) @@ -1458,9 +1598,8 @@ func rewriteValueWasm_OpEqB_0(v *Value) bool { // cond: // result: (I64Eq x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Eq) v.AddArg(x) v.AddArg(y) @@ -1472,27 +1611,34 @@ func rewriteValueWasm_OpEqPtr_0(v *Value) bool { // cond: // result: (I64Eq x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Eq) v.AddArg(x) v.AddArg(y) return true } } +func rewriteValueWasm_OpFloor_0(v *Value) bool { + // match: (Floor x) + // cond: + // result: (F64Floor x) + for { + x := v.Args[0] + v.reset(OpWasmF64Floor) + v.AddArg(x) + return true + } +} func rewriteValueWasm_OpGeq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq16 x y) // cond: // result: (I64GeS (SignExt16to64 x) (SignExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64GeS) v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) v0.AddArg(x) @@ -1505,16 +1651,13 @@ func rewriteValueWasm_OpGeq16_0(v *Value) bool { } func rewriteValueWasm_OpGeq16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq16U x y) // cond: // result: (I64GeU (ZeroExt16to64 x) (ZeroExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64GeU) v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) v0.AddArg(x) @@ -1527,16 +1670,13 @@ func rewriteValueWasm_OpGeq16U_0(v *Value) bool { } func rewriteValueWasm_OpGeq32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq32 x y) // cond: // result: (I64GeS (SignExt32to64 x) (SignExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64GeS) v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v0.AddArg(x) @@ -1549,16 +1689,13 @@ func rewriteValueWasm_OpGeq32_0(v *Value) bool { } func rewriteValueWasm_OpGeq32F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq32F x y) // cond: // result: (F64Ge (LoweredRound32F x) (LoweredRound32F y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmF64Ge) v0 := b.NewValue0(v.Pos, OpWasmLoweredRound32F, typ.Float32) v0.AddArg(x) @@ -1571,16 +1708,13 @@ func rewriteValueWasm_OpGeq32F_0(v *Value) bool { } func rewriteValueWasm_OpGeq32U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq32U x y) // cond: // result: (I64GeU (ZeroExt32to64 x) (ZeroExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64GeU) v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) v0.AddArg(x) @@ -1596,9 +1730,8 @@ func rewriteValueWasm_OpGeq64_0(v *Value) bool { // cond: // result: (I64GeS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64GeS) v.AddArg(x) v.AddArg(y) @@ -1610,9 +1743,8 @@ func rewriteValueWasm_OpGeq64F_0(v *Value) bool { // cond: // result: (F64Ge x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmF64Ge) v.AddArg(x) v.AddArg(y) @@ -1624,9 +1756,8 @@ func rewriteValueWasm_OpGeq64U_0(v *Value) bool { // cond: // result: (I64GeU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64GeU) v.AddArg(x) v.AddArg(y) @@ -1635,16 +1766,13 @@ func rewriteValueWasm_OpGeq64U_0(v *Value) bool { } func rewriteValueWasm_OpGeq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq8 x y) // cond: // result: (I64GeS (SignExt8to64 x) (SignExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64GeS) v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) v0.AddArg(x) @@ -1657,16 +1785,13 @@ func rewriteValueWasm_OpGeq8_0(v *Value) bool { } func rewriteValueWasm_OpGeq8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq8U x y) // cond: // result: (I64GeU (ZeroExt8to64 x) (ZeroExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64GeU) v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) v0.AddArg(x) @@ -1706,16 +1831,13 @@ func rewriteValueWasm_OpGetClosurePtr_0(v *Value) bool { } func rewriteValueWasm_OpGreater16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater16 x y) // cond: // result: (I64GtS (SignExt16to64 x) (SignExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64GtS) v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) v0.AddArg(x) @@ -1728,16 +1850,13 @@ func rewriteValueWasm_OpGreater16_0(v *Value) bool { } func rewriteValueWasm_OpGreater16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater16U x y) // cond: // result: (I64GtU (ZeroExt16to64 x) (ZeroExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64GtU) v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) v0.AddArg(x) @@ -1750,16 +1869,13 @@ func rewriteValueWasm_OpGreater16U_0(v *Value) bool { } func rewriteValueWasm_OpGreater32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater32 x y) // cond: // result: (I64GtS (SignExt32to64 x) (SignExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64GtS) v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v0.AddArg(x) @@ -1772,16 +1888,13 @@ func rewriteValueWasm_OpGreater32_0(v *Value) bool { } func rewriteValueWasm_OpGreater32F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater32F x y) // cond: // result: (F64Gt (LoweredRound32F x) (LoweredRound32F y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmF64Gt) v0 := b.NewValue0(v.Pos, OpWasmLoweredRound32F, typ.Float32) v0.AddArg(x) @@ -1794,16 +1907,13 @@ func rewriteValueWasm_OpGreater32F_0(v *Value) bool { } func rewriteValueWasm_OpGreater32U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater32U x y) // cond: // result: (I64GtU (ZeroExt32to64 x) (ZeroExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64GtU) v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) v0.AddArg(x) @@ -1819,9 +1929,8 @@ func rewriteValueWasm_OpGreater64_0(v *Value) bool { // cond: // result: (I64GtS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64GtS) v.AddArg(x) v.AddArg(y) @@ -1833,9 +1942,8 @@ func rewriteValueWasm_OpGreater64F_0(v *Value) bool { // cond: // result: (F64Gt x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmF64Gt) v.AddArg(x) v.AddArg(y) @@ -1847,9 +1955,8 @@ func rewriteValueWasm_OpGreater64U_0(v *Value) bool { // cond: // result: (I64GtU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64GtU) v.AddArg(x) v.AddArg(y) @@ -1858,16 +1965,13 @@ func rewriteValueWasm_OpGreater64U_0(v *Value) bool { } func rewriteValueWasm_OpGreater8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater8 x y) // cond: // result: (I64GtS (SignExt8to64 x) (SignExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64GtS) v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) v0.AddArg(x) @@ -1880,16 +1984,13 @@ func rewriteValueWasm_OpGreater8_0(v *Value) bool { } func rewriteValueWasm_OpGreater8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater8U x y) // cond: // result: (I64GtU (ZeroExt8to64 x) (ZeroExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64GtU) v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) v0.AddArg(x) @@ -1906,9 +2007,8 @@ func rewriteValueWasm_OpInterCall_0(v *Value) bool { // result: (LoweredInterCall [argwid] entry mem) for { argwid := v.AuxInt - _ = v.Args[1] - entry := v.Args[0] mem := v.Args[1] + entry := v.Args[0] v.reset(OpWasmLoweredInterCall) v.AuxInt = argwid v.AddArg(entry) @@ -1921,9 +2021,8 @@ func rewriteValueWasm_OpIsInBounds_0(v *Value) bool { // cond: // result: (I64LtU idx len) for { - _ = v.Args[1] - idx := v.Args[0] len := v.Args[1] + idx := v.Args[0] v.reset(OpWasmI64LtU) v.AddArg(idx) v.AddArg(len) @@ -1932,9 +2031,7 @@ func rewriteValueWasm_OpIsInBounds_0(v *Value) bool { } func rewriteValueWasm_OpIsNonNil_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (IsNonNil p) // cond: // result: (I64Eqz (I64Eqz p)) @@ -1952,9 +2049,8 @@ func rewriteValueWasm_OpIsSliceInBounds_0(v *Value) bool { // cond: // result: (I64LeU idx len) for { - _ = v.Args[1] - idx := v.Args[0] len := v.Args[1] + idx := v.Args[0] v.reset(OpWasmI64LeU) v.AddArg(idx) v.AddArg(len) @@ -1963,16 +2059,13 @@ func rewriteValueWasm_OpIsSliceInBounds_0(v *Value) bool { } func rewriteValueWasm_OpLeq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq16 x y) // cond: // result: (I64LeS (SignExt16to64 x) (SignExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64LeS) v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) v0.AddArg(x) @@ -1985,16 +2078,13 @@ func rewriteValueWasm_OpLeq16_0(v *Value) bool { } func rewriteValueWasm_OpLeq16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq16U x y) // cond: // result: (I64LeU (ZeroExt16to64 x) (ZeroExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64LeU) v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) v0.AddArg(x) @@ -2007,16 +2097,13 @@ func rewriteValueWasm_OpLeq16U_0(v *Value) bool { } func rewriteValueWasm_OpLeq32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq32 x y) // cond: // result: (I64LeS (SignExt32to64 x) (SignExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64LeS) v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v0.AddArg(x) @@ -2029,16 +2116,13 @@ func rewriteValueWasm_OpLeq32_0(v *Value) bool { } func rewriteValueWasm_OpLeq32F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq32F x y) // cond: // result: (F64Le (LoweredRound32F x) (LoweredRound32F y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmF64Le) v0 := b.NewValue0(v.Pos, OpWasmLoweredRound32F, typ.Float32) v0.AddArg(x) @@ -2051,16 +2135,13 @@ func rewriteValueWasm_OpLeq32F_0(v *Value) bool { } func rewriteValueWasm_OpLeq32U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq32U x y) // cond: // result: (I64LeU (ZeroExt32to64 x) (ZeroExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64LeU) v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) v0.AddArg(x) @@ -2076,9 +2157,8 @@ func rewriteValueWasm_OpLeq64_0(v *Value) bool { // cond: // result: (I64LeS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64LeS) v.AddArg(x) v.AddArg(y) @@ -2090,9 +2170,8 @@ func rewriteValueWasm_OpLeq64F_0(v *Value) bool { // cond: // result: (F64Le x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmF64Le) v.AddArg(x) v.AddArg(y) @@ -2104,9 +2183,8 @@ func rewriteValueWasm_OpLeq64U_0(v *Value) bool { // cond: // result: (I64LeU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64LeU) v.AddArg(x) v.AddArg(y) @@ -2115,16 +2193,13 @@ func rewriteValueWasm_OpLeq64U_0(v *Value) bool { } func rewriteValueWasm_OpLeq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq8 x y) // cond: // result: (I64LeS (SignExt8to64 x) (SignExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64LeS) v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) v0.AddArg(x) @@ -2137,16 +2212,13 @@ func rewriteValueWasm_OpLeq8_0(v *Value) bool { } func rewriteValueWasm_OpLeq8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq8U x y) // cond: // result: (I64LeU (ZeroExt8to64 x) (ZeroExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64LeU) v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) v0.AddArg(x) @@ -2159,16 +2231,13 @@ func rewriteValueWasm_OpLeq8U_0(v *Value) bool { } func rewriteValueWasm_OpLess16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less16 x y) // cond: // result: (I64LtS (SignExt16to64 x) (SignExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64LtS) v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) v0.AddArg(x) @@ -2181,16 +2250,13 @@ func rewriteValueWasm_OpLess16_0(v *Value) bool { } func rewriteValueWasm_OpLess16U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less16U x y) // cond: // result: (I64LtU (ZeroExt16to64 x) (ZeroExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64LtU) v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) v0.AddArg(x) @@ -2203,16 +2269,13 @@ func rewriteValueWasm_OpLess16U_0(v *Value) bool { } func rewriteValueWasm_OpLess32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less32 x y) // cond: // result: (I64LtS (SignExt32to64 x) (SignExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64LtS) v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v0.AddArg(x) @@ -2225,16 +2288,13 @@ func rewriteValueWasm_OpLess32_0(v *Value) bool { } func rewriteValueWasm_OpLess32F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less32F x y) // cond: // result: (F64Lt (LoweredRound32F x) (LoweredRound32F y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmF64Lt) v0 := b.NewValue0(v.Pos, OpWasmLoweredRound32F, typ.Float32) v0.AddArg(x) @@ -2247,16 +2307,13 @@ func rewriteValueWasm_OpLess32F_0(v *Value) bool { } func rewriteValueWasm_OpLess32U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less32U x y) // cond: // result: (I64LtU (ZeroExt32to64 x) (ZeroExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64LtU) v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) v0.AddArg(x) @@ -2272,9 +2329,8 @@ func rewriteValueWasm_OpLess64_0(v *Value) bool { // cond: // result: (I64LtS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64LtS) v.AddArg(x) v.AddArg(y) @@ -2286,9 +2342,8 @@ func rewriteValueWasm_OpLess64F_0(v *Value) bool { // cond: // result: (F64Lt x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmF64Lt) v.AddArg(x) v.AddArg(y) @@ -2300,9 +2355,8 @@ func rewriteValueWasm_OpLess64U_0(v *Value) bool { // cond: // result: (I64LtU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64LtU) v.AddArg(x) v.AddArg(y) @@ -2311,16 +2365,13 @@ func rewriteValueWasm_OpLess64U_0(v *Value) bool { } func rewriteValueWasm_OpLess8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less8 x y) // cond: // result: (I64LtS (SignExt8to64 x) (SignExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64LtS) v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) v0.AddArg(x) @@ -2333,16 +2384,13 @@ func rewriteValueWasm_OpLess8_0(v *Value) bool { } func rewriteValueWasm_OpLess8U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less8U x y) // cond: // result: (I64LtU (ZeroExt8to64 x) (ZeroExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64LtU) v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) v0.AddArg(x) @@ -2359,9 +2407,8 @@ func rewriteValueWasm_OpLoad_0(v *Value) bool { // result: (F32Load ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is32BitFloat(t)) { break } @@ -2375,9 +2422,8 @@ func rewriteValueWasm_OpLoad_0(v *Value) bool { // result: (F64Load ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is64BitFloat(t)) { break } @@ -2391,9 +2437,8 @@ func rewriteValueWasm_OpLoad_0(v *Value) bool { // result: (I64Load ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.Size() == 8) { break } @@ -2407,9 +2452,8 @@ func rewriteValueWasm_OpLoad_0(v *Value) bool { // result: (I64Load32U ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.Size() == 4 && !t.IsSigned()) { break } @@ -2423,9 +2467,8 @@ func rewriteValueWasm_OpLoad_0(v *Value) bool { // result: (I64Load32S ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.Size() == 4 && t.IsSigned()) { break } @@ -2439,9 +2482,8 @@ func rewriteValueWasm_OpLoad_0(v *Value) bool { // result: (I64Load16U ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.Size() == 2 && !t.IsSigned()) { break } @@ -2455,9 +2497,8 @@ func rewriteValueWasm_OpLoad_0(v *Value) bool { // result: (I64Load16S ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.Size() == 2 && t.IsSigned()) { break } @@ -2471,9 +2512,8 @@ func rewriteValueWasm_OpLoad_0(v *Value) bool { // result: (I64Load8U ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.Size() == 1 && !t.IsSigned()) { break } @@ -2487,9 +2527,8 @@ func rewriteValueWasm_OpLoad_0(v *Value) bool { // result: (I64Load8S ptr mem) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.Size() == 1 && t.IsSigned()) { break } @@ -2516,16 +2555,13 @@ func rewriteValueWasm_OpLocalAddr_0(v *Value) bool { } func rewriteValueWasm_OpLsh16x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x16 x y) // cond: // result: (Lsh64x64 x (ZeroExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpLsh64x64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) @@ -2536,16 +2572,13 @@ func rewriteValueWasm_OpLsh16x16_0(v *Value) bool { } func rewriteValueWasm_OpLsh16x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x32 x y) // cond: // result: (Lsh64x64 x (ZeroExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpLsh64x64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) @@ -2559,9 +2592,8 @@ func rewriteValueWasm_OpLsh16x64_0(v *Value) bool { // cond: // result: (Lsh64x64 x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpLsh64x64) v.AddArg(x) v.AddArg(y) @@ -2570,16 +2602,13 @@ func rewriteValueWasm_OpLsh16x64_0(v *Value) bool { } func rewriteValueWasm_OpLsh16x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x8 x y) // cond: // result: (Lsh64x64 x (ZeroExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpLsh64x64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) @@ -2590,16 +2619,13 @@ func rewriteValueWasm_OpLsh16x8_0(v *Value) bool { } func rewriteValueWasm_OpLsh32x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x16 x y) // cond: // result: (Lsh64x64 x (ZeroExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpLsh64x64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) @@ -2610,16 +2636,13 @@ func rewriteValueWasm_OpLsh32x16_0(v *Value) bool { } func rewriteValueWasm_OpLsh32x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x32 x y) // cond: // result: (Lsh64x64 x (ZeroExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpLsh64x64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) @@ -2633,9 +2656,8 @@ func rewriteValueWasm_OpLsh32x64_0(v *Value) bool { // cond: // result: (Lsh64x64 x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpLsh64x64) v.AddArg(x) v.AddArg(y) @@ -2644,16 +2666,13 @@ func rewriteValueWasm_OpLsh32x64_0(v *Value) bool { } func rewriteValueWasm_OpLsh32x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x8 x y) // cond: // result: (Lsh64x64 x (ZeroExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpLsh64x64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) @@ -2664,16 +2683,13 @@ func rewriteValueWasm_OpLsh32x8_0(v *Value) bool { } func rewriteValueWasm_OpLsh64x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x16 x y) // cond: // result: (Lsh64x64 x (ZeroExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpLsh64x64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) @@ -2684,16 +2700,13 @@ func rewriteValueWasm_OpLsh64x16_0(v *Value) bool { } func rewriteValueWasm_OpLsh64x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x32 x y) // cond: // result: (Lsh64x64 x (ZeroExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpLsh64x64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) @@ -2704,16 +2717,13 @@ func rewriteValueWasm_OpLsh64x32_0(v *Value) bool { } func rewriteValueWasm_OpLsh64x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x64 x y) // cond: // result: (Select (I64Shl x y) (I64Const [0]) (I64LtU y (I64Const [64]))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmSelect) v0 := b.NewValue0(v.Pos, OpWasmI64Shl, typ.Int64) v0.AddArg(x) @@ -2733,16 +2743,13 @@ func rewriteValueWasm_OpLsh64x64_0(v *Value) bool { } func rewriteValueWasm_OpLsh64x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x8 x y) // cond: // result: (Lsh64x64 x (ZeroExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpLsh64x64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) @@ -2753,16 +2760,13 @@ func rewriteValueWasm_OpLsh64x8_0(v *Value) bool { } func rewriteValueWasm_OpLsh8x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x16 x y) // cond: // result: (Lsh64x64 x (ZeroExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpLsh64x64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) @@ -2773,16 +2777,13 @@ func rewriteValueWasm_OpLsh8x16_0(v *Value) bool { } func rewriteValueWasm_OpLsh8x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x32 x y) // cond: // result: (Lsh64x64 x (ZeroExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpLsh64x64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) @@ -2796,9 +2797,8 @@ func rewriteValueWasm_OpLsh8x64_0(v *Value) bool { // cond: // result: (Lsh64x64 x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpLsh64x64) v.AddArg(x) v.AddArg(y) @@ -2807,16 +2807,13 @@ func rewriteValueWasm_OpLsh8x64_0(v *Value) bool { } func rewriteValueWasm_OpLsh8x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x8 x y) // cond: // result: (Lsh64x64 x (ZeroExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpLsh64x64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) @@ -2827,16 +2824,13 @@ func rewriteValueWasm_OpLsh8x8_0(v *Value) bool { } func rewriteValueWasm_OpMod16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod16 x y) // cond: // result: (I64RemS (SignExt16to64 x) (SignExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64RemS) v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) v0.AddArg(x) @@ -2849,16 +2843,13 @@ func rewriteValueWasm_OpMod16_0(v *Value) bool { } func rewriteValueWasm_OpMod16u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod16u x y) // cond: // result: (I64RemU (ZeroExt16to64 x) (ZeroExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64RemU) v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) v0.AddArg(x) @@ -2871,16 +2862,13 @@ func rewriteValueWasm_OpMod16u_0(v *Value) bool { } func rewriteValueWasm_OpMod32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod32 x y) // cond: // result: (I64RemS (SignExt32to64 x) (SignExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64RemS) v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v0.AddArg(x) @@ -2893,16 +2881,13 @@ func rewriteValueWasm_OpMod32_0(v *Value) bool { } func rewriteValueWasm_OpMod32u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod32u x y) // cond: // result: (I64RemU (ZeroExt32to64 x) (ZeroExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64RemU) v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) v0.AddArg(x) @@ -2918,9 +2903,8 @@ func rewriteValueWasm_OpMod64_0(v *Value) bool { // cond: // result: (I64RemS x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64RemS) v.AddArg(x) v.AddArg(y) @@ -2932,9 +2916,8 @@ func rewriteValueWasm_OpMod64u_0(v *Value) bool { // cond: // result: (I64RemU x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64RemU) v.AddArg(x) v.AddArg(y) @@ -2943,16 +2926,13 @@ func rewriteValueWasm_OpMod64u_0(v *Value) bool { } func rewriteValueWasm_OpMod8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod8 x y) // cond: // result: (I64RemS (SignExt8to64 x) (SignExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64RemS) v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) v0.AddArg(x) @@ -2965,16 +2945,13 @@ func rewriteValueWasm_OpMod8_0(v *Value) bool { } func rewriteValueWasm_OpMod8u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mod8u x y) // cond: // result: (I64RemU (ZeroExt8to64 x) (ZeroExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64RemU) v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) v0.AddArg(x) @@ -2987,9 +2964,7 @@ func rewriteValueWasm_OpMod8u_0(v *Value) bool { } func rewriteValueWasm_OpMove_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Move [0] _ _ mem) // cond: // result: mem @@ -2997,7 +2972,6 @@ func rewriteValueWasm_OpMove_0(v *Value) bool { if v.AuxInt != 0 { break } - _ = v.Args[2] mem := v.Args[2] v.reset(OpCopy) v.Type = mem.Type @@ -3011,10 +2985,9 @@ func rewriteValueWasm_OpMove_0(v *Value) bool { if v.AuxInt != 1 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpWasmI64Store8) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpWasmI64Load8U, typ.UInt8) @@ -3031,10 +3004,9 @@ func rewriteValueWasm_OpMove_0(v *Value) bool { if v.AuxInt != 2 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpWasmI64Store16) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpWasmI64Load16U, typ.UInt16) @@ -3051,10 +3023,9 @@ func rewriteValueWasm_OpMove_0(v *Value) bool { if v.AuxInt != 4 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpWasmI64Store32) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpWasmI64Load32U, typ.UInt32) @@ -3071,10 +3042,9 @@ func rewriteValueWasm_OpMove_0(v *Value) bool { if v.AuxInt != 8 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpWasmI64Store) v.AddArg(dst) v0 := b.NewValue0(v.Pos, OpWasmI64Load, typ.UInt64) @@ -3091,10 +3061,9 @@ func rewriteValueWasm_OpMove_0(v *Value) bool { if v.AuxInt != 16 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpWasmI64Store) v.AuxInt = 8 v.AddArg(dst) @@ -3120,10 +3089,9 @@ func rewriteValueWasm_OpMove_0(v *Value) bool { if v.AuxInt != 3 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpWasmI64Store8) v.AuxInt = 2 v.AddArg(dst) @@ -3149,10 +3117,9 @@ func rewriteValueWasm_OpMove_0(v *Value) bool { if v.AuxInt != 5 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpWasmI64Store8) v.AuxInt = 4 v.AddArg(dst) @@ -3178,10 +3145,9 @@ func rewriteValueWasm_OpMove_0(v *Value) bool { if v.AuxInt != 6 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpWasmI64Store16) v.AuxInt = 4 v.AddArg(dst) @@ -3207,10 +3173,9 @@ func rewriteValueWasm_OpMove_0(v *Value) bool { if v.AuxInt != 7 { break } - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] v.reset(OpWasmI64Store32) v.AuxInt = 3 v.AddArg(dst) @@ -3233,18 +3198,15 @@ func rewriteValueWasm_OpMove_0(v *Value) bool { } func rewriteValueWasm_OpMove_10(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Move [s] dst src mem) // cond: s > 8 && s < 16 // result: (I64Store [s-8] dst (I64Load [s-8] src mem) (I64Store dst (I64Load src mem) mem)) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s > 8 && s < 16) { break } @@ -3271,10 +3233,9 @@ func rewriteValueWasm_OpMove_10(v *Value) bool { // result: (Move [s-s%16] (OffPtr dst [s%16]) (OffPtr src [s%16]) (I64Store dst (I64Load src mem) mem)) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s > 16 && s%16 != 0 && s%16 <= 8) { break } @@ -3303,10 +3264,9 @@ func rewriteValueWasm_OpMove_10(v *Value) bool { // result: (Move [s-s%16] (OffPtr dst [s%16]) (OffPtr src [s%16]) (I64Store [8] dst (I64Load [8] src mem) (I64Store dst (I64Load src mem) mem))) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s > 16 && s%16 != 0 && s%16 > 8) { break } @@ -3344,10 +3304,9 @@ func rewriteValueWasm_OpMove_10(v *Value) bool { // result: (LoweredMove [s/8] dst src mem) for { s := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(s%8 == 0) { break } @@ -3365,9 +3324,8 @@ func rewriteValueWasm_OpMul16_0(v *Value) bool { // cond: // result: (I64Mul x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Mul) v.AddArg(x) v.AddArg(y) @@ -3379,9 +3337,8 @@ func rewriteValueWasm_OpMul32_0(v *Value) bool { // cond: // result: (I64Mul x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Mul) v.AddArg(x) v.AddArg(y) @@ -3393,9 +3350,8 @@ func rewriteValueWasm_OpMul32F_0(v *Value) bool { // cond: // result: (F64Mul x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmF64Mul) v.AddArg(x) v.AddArg(y) @@ -3407,9 +3363,8 @@ func rewriteValueWasm_OpMul64_0(v *Value) bool { // cond: // result: (I64Mul x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Mul) v.AddArg(x) v.AddArg(y) @@ -3421,9 +3376,8 @@ func rewriteValueWasm_OpMul64F_0(v *Value) bool { // cond: // result: (F64Mul x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmF64Mul) v.AddArg(x) v.AddArg(y) @@ -3435,9 +3389,8 @@ func rewriteValueWasm_OpMul8_0(v *Value) bool { // cond: // result: (I64Mul x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Mul) v.AddArg(x) v.AddArg(y) @@ -3446,9 +3399,7 @@ func rewriteValueWasm_OpMul8_0(v *Value) bool { } func rewriteValueWasm_OpNeg16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neg16 x) // cond: // result: (I64Sub (I64Const [0]) x) @@ -3464,9 +3415,7 @@ func rewriteValueWasm_OpNeg16_0(v *Value) bool { } func rewriteValueWasm_OpNeg32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neg32 x) // cond: // result: (I64Sub (I64Const [0]) x) @@ -3493,9 +3442,7 @@ func rewriteValueWasm_OpNeg32F_0(v *Value) bool { } func rewriteValueWasm_OpNeg64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neg64 x) // cond: // result: (I64Sub (I64Const [0]) x) @@ -3522,9 +3469,7 @@ func rewriteValueWasm_OpNeg64F_0(v *Value) bool { } func rewriteValueWasm_OpNeg8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neg8 x) // cond: // result: (I64Sub (I64Const [0]) x) @@ -3540,16 +3485,13 @@ func rewriteValueWasm_OpNeg8_0(v *Value) bool { } func rewriteValueWasm_OpNeq16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq16 x y) // cond: // result: (I64Ne (ZeroExt16to64 x) (ZeroExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Ne) v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) v0.AddArg(x) @@ -3562,16 +3504,13 @@ func rewriteValueWasm_OpNeq16_0(v *Value) bool { } func rewriteValueWasm_OpNeq32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq32 x y) // cond: // result: (I64Ne (ZeroExt32to64 x) (ZeroExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Ne) v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) v0.AddArg(x) @@ -3584,16 +3523,13 @@ func rewriteValueWasm_OpNeq32_0(v *Value) bool { } func rewriteValueWasm_OpNeq32F_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq32F x y) // cond: // result: (F64Ne (LoweredRound32F x) (LoweredRound32F y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmF64Ne) v0 := b.NewValue0(v.Pos, OpWasmLoweredRound32F, typ.Float32) v0.AddArg(x) @@ -3609,9 +3545,8 @@ func rewriteValueWasm_OpNeq64_0(v *Value) bool { // cond: // result: (I64Ne x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Ne) v.AddArg(x) v.AddArg(y) @@ -3623,9 +3558,8 @@ func rewriteValueWasm_OpNeq64F_0(v *Value) bool { // cond: // result: (F64Ne x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmF64Ne) v.AddArg(x) v.AddArg(y) @@ -3634,16 +3568,13 @@ func rewriteValueWasm_OpNeq64F_0(v *Value) bool { } func rewriteValueWasm_OpNeq8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq8 x y) // cond: // result: (I64Ne (ZeroExt8to64 x) (ZeroExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Ne) v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) v0.AddArg(x) @@ -3659,9 +3590,8 @@ func rewriteValueWasm_OpNeqB_0(v *Value) bool { // cond: // result: (I64Ne x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Ne) v.AddArg(x) v.AddArg(y) @@ -3673,9 +3603,8 @@ func rewriteValueWasm_OpNeqPtr_0(v *Value) bool { // cond: // result: (I64Ne x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Ne) v.AddArg(x) v.AddArg(y) @@ -3687,9 +3616,8 @@ func rewriteValueWasm_OpNilCheck_0(v *Value) bool { // cond: // result: (LoweredNilCheck ptr mem) for { - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] v.reset(OpWasmLoweredNilCheck) v.AddArg(ptr) v.AddArg(mem) @@ -3725,9 +3653,8 @@ func rewriteValueWasm_OpOr16_0(v *Value) bool { // cond: // result: (I64Or x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Or) v.AddArg(x) v.AddArg(y) @@ -3739,9 +3666,8 @@ func rewriteValueWasm_OpOr32_0(v *Value) bool { // cond: // result: (I64Or x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Or) v.AddArg(x) v.AddArg(y) @@ -3753,9 +3679,8 @@ func rewriteValueWasm_OpOr64_0(v *Value) bool { // cond: // result: (I64Or x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Or) v.AddArg(x) v.AddArg(y) @@ -3767,9 +3692,8 @@ func rewriteValueWasm_OpOr8_0(v *Value) bool { // cond: // result: (I64Or x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Or) v.AddArg(x) v.AddArg(y) @@ -3781,15 +3705,179 @@ func rewriteValueWasm_OpOrB_0(v *Value) bool { // cond: // result: (I64Or x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Or) v.AddArg(x) v.AddArg(y) return true } } +func rewriteValueWasm_OpPopCount16_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (PopCount16 x) + // cond: + // result: (I64Popcnt (ZeroExt16to64 x)) + for { + x := v.Args[0] + v.reset(OpWasmI64Popcnt) + v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) + v0.AddArg(x) + v.AddArg(v0) + return true + } +} +func rewriteValueWasm_OpPopCount32_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (PopCount32 x) + // cond: + // result: (I64Popcnt (ZeroExt32to64 x)) + for { + x := v.Args[0] + v.reset(OpWasmI64Popcnt) + v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) + v0.AddArg(x) + v.AddArg(v0) + return true + } +} +func rewriteValueWasm_OpPopCount64_0(v *Value) bool { + // match: (PopCount64 x) + // cond: + // result: (I64Popcnt x) + for { + x := v.Args[0] + v.reset(OpWasmI64Popcnt) + v.AddArg(x) + return true + } +} +func rewriteValueWasm_OpPopCount8_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (PopCount8 x) + // cond: + // result: (I64Popcnt (ZeroExt8to64 x)) + for { + x := v.Args[0] + v.reset(OpWasmI64Popcnt) + v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) + v0.AddArg(x) + v.AddArg(v0) + return true + } +} +func rewriteValueWasm_OpRotateLeft16_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (RotateLeft16 x (I64Const [c])) + // cond: + // result: (Or16 (Lsh16x64 x (I64Const [c&15])) (Rsh16Ux64 x (I64Const [-c&15]))) + for { + t := v.Type + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpWasmI64Const { + break + } + c := v_1.AuxInt + v.reset(OpOr16) + v0 := b.NewValue0(v.Pos, OpLsh16x64, t) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) + v1.AuxInt = c & 15 + v0.AddArg(v1) + v.AddArg(v0) + v2 := b.NewValue0(v.Pos, OpRsh16Ux64, t) + v2.AddArg(x) + v3 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) + v3.AuxInt = -c & 15 + v2.AddArg(v3) + v.AddArg(v2) + return true + } + return false +} +func rewriteValueWasm_OpRotateLeft32_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (RotateLeft32 x (I64Const [c])) + // cond: + // result: (Or32 (Lsh32x64 x (I64Const [c&31])) (Rsh32Ux64 x (I64Const [-c&31]))) + for { + t := v.Type + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpWasmI64Const { + break + } + c := v_1.AuxInt + v.reset(OpOr32) + v0 := b.NewValue0(v.Pos, OpLsh32x64, t) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) + v1.AuxInt = c & 31 + v0.AddArg(v1) + v.AddArg(v0) + v2 := b.NewValue0(v.Pos, OpRsh32Ux64, t) + v2.AddArg(x) + v3 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) + v3.AuxInt = -c & 31 + v2.AddArg(v3) + v.AddArg(v2) + return true + } + return false +} +func rewriteValueWasm_OpRotateLeft64_0(v *Value) bool { + // match: (RotateLeft64 x y) + // cond: + // result: (I64Rotl x y) + for { + y := v.Args[1] + x := v.Args[0] + v.reset(OpWasmI64Rotl) + v.AddArg(x) + v.AddArg(y) + return true + } +} +func rewriteValueWasm_OpRotateLeft8_0(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (RotateLeft8 x (I64Const [c])) + // cond: + // result: (Or8 (Lsh8x64 x (I64Const [c&7])) (Rsh8Ux64 x (I64Const [-c&7]))) + for { + t := v.Type + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpWasmI64Const { + break + } + c := v_1.AuxInt + v.reset(OpOr8) + v0 := b.NewValue0(v.Pos, OpLsh8x64, t) + v0.AddArg(x) + v1 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) + v1.AuxInt = c & 7 + v0.AddArg(v1) + v.AddArg(v0) + v2 := b.NewValue0(v.Pos, OpRsh8Ux64, t) + v2.AddArg(x) + v3 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) + v3.AuxInt = -c & 7 + v2.AddArg(v3) + v.AddArg(v2) + return true + } + return false +} func rewriteValueWasm_OpRound32F_0(v *Value) bool { // match: (Round32F x) // cond: @@ -3813,18 +3901,26 @@ func rewriteValueWasm_OpRound64F_0(v *Value) bool { return true } } +func rewriteValueWasm_OpRoundToEven_0(v *Value) bool { + // match: (RoundToEven x) + // cond: + // result: (F64Nearest x) + for { + x := v.Args[0] + v.reset(OpWasmF64Nearest) + v.AddArg(x) + return true + } +} func rewriteValueWasm_OpRsh16Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux16 x y) // cond: // result: (Rsh64Ux64 (ZeroExt16to64 x) (ZeroExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64Ux64) v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) v0.AddArg(x) @@ -3837,16 +3933,13 @@ func rewriteValueWasm_OpRsh16Ux16_0(v *Value) bool { } func rewriteValueWasm_OpRsh16Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux32 x y) // cond: // result: (Rsh64Ux64 (ZeroExt16to64 x) (ZeroExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64Ux64) v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) v0.AddArg(x) @@ -3859,16 +3952,13 @@ func rewriteValueWasm_OpRsh16Ux32_0(v *Value) bool { } func rewriteValueWasm_OpRsh16Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux64 x y) // cond: // result: (Rsh64Ux64 (ZeroExt16to64 x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64Ux64) v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) v0.AddArg(x) @@ -3879,16 +3969,13 @@ func rewriteValueWasm_OpRsh16Ux64_0(v *Value) bool { } func rewriteValueWasm_OpRsh16Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux8 x y) // cond: // result: (Rsh64Ux64 (ZeroExt16to64 x) (ZeroExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64Ux64) v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) v0.AddArg(x) @@ -3901,16 +3988,13 @@ func rewriteValueWasm_OpRsh16Ux8_0(v *Value) bool { } func rewriteValueWasm_OpRsh16x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x16 x y) // cond: // result: (Rsh64x64 (SignExt16to64 x) (ZeroExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64x64) v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) v0.AddArg(x) @@ -3923,16 +4007,13 @@ func rewriteValueWasm_OpRsh16x16_0(v *Value) bool { } func rewriteValueWasm_OpRsh16x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x32 x y) // cond: // result: (Rsh64x64 (SignExt16to64 x) (ZeroExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64x64) v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) v0.AddArg(x) @@ -3945,16 +4026,13 @@ func rewriteValueWasm_OpRsh16x32_0(v *Value) bool { } func rewriteValueWasm_OpRsh16x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x64 x y) // cond: // result: (Rsh64x64 (SignExt16to64 x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64x64) v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) v0.AddArg(x) @@ -3965,16 +4043,13 @@ func rewriteValueWasm_OpRsh16x64_0(v *Value) bool { } func rewriteValueWasm_OpRsh16x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x8 x y) // cond: // result: (Rsh64x64 (SignExt16to64 x) (ZeroExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64x64) v0 := b.NewValue0(v.Pos, OpSignExt16to64, typ.Int64) v0.AddArg(x) @@ -3987,16 +4062,13 @@ func rewriteValueWasm_OpRsh16x8_0(v *Value) bool { } func rewriteValueWasm_OpRsh32Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux16 x y) // cond: // result: (Rsh64Ux64 (ZeroExt32to64 x) (ZeroExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64Ux64) v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) v0.AddArg(x) @@ -4009,16 +4081,13 @@ func rewriteValueWasm_OpRsh32Ux16_0(v *Value) bool { } func rewriteValueWasm_OpRsh32Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux32 x y) // cond: // result: (Rsh64Ux64 (ZeroExt32to64 x) (ZeroExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64Ux64) v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) v0.AddArg(x) @@ -4031,16 +4100,13 @@ func rewriteValueWasm_OpRsh32Ux32_0(v *Value) bool { } func rewriteValueWasm_OpRsh32Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux64 x y) // cond: // result: (Rsh64Ux64 (ZeroExt32to64 x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64Ux64) v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) v0.AddArg(x) @@ -4051,16 +4117,13 @@ func rewriteValueWasm_OpRsh32Ux64_0(v *Value) bool { } func rewriteValueWasm_OpRsh32Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux8 x y) // cond: // result: (Rsh64Ux64 (ZeroExt32to64 x) (ZeroExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64Ux64) v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) v0.AddArg(x) @@ -4073,16 +4136,13 @@ func rewriteValueWasm_OpRsh32Ux8_0(v *Value) bool { } func rewriteValueWasm_OpRsh32x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x16 x y) // cond: // result: (Rsh64x64 (SignExt32to64 x) (ZeroExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64x64) v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v0.AddArg(x) @@ -4095,16 +4155,13 @@ func rewriteValueWasm_OpRsh32x16_0(v *Value) bool { } func rewriteValueWasm_OpRsh32x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x32 x y) // cond: // result: (Rsh64x64 (SignExt32to64 x) (ZeroExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64x64) v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v0.AddArg(x) @@ -4117,16 +4174,13 @@ func rewriteValueWasm_OpRsh32x32_0(v *Value) bool { } func rewriteValueWasm_OpRsh32x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x64 x y) // cond: // result: (Rsh64x64 (SignExt32to64 x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64x64) v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v0.AddArg(x) @@ -4137,16 +4191,13 @@ func rewriteValueWasm_OpRsh32x64_0(v *Value) bool { } func rewriteValueWasm_OpRsh32x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x8 x y) // cond: // result: (Rsh64x64 (SignExt32to64 x) (ZeroExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64x64) v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) v0.AddArg(x) @@ -4159,16 +4210,13 @@ func rewriteValueWasm_OpRsh32x8_0(v *Value) bool { } func rewriteValueWasm_OpRsh64Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux16 x y) // cond: // result: (Rsh64Ux64 x (ZeroExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64Ux64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) @@ -4179,16 +4227,13 @@ func rewriteValueWasm_OpRsh64Ux16_0(v *Value) bool { } func rewriteValueWasm_OpRsh64Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux32 x y) // cond: // result: (Rsh64Ux64 x (ZeroExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64Ux64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) @@ -4199,16 +4244,13 @@ func rewriteValueWasm_OpRsh64Ux32_0(v *Value) bool { } func rewriteValueWasm_OpRsh64Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux64 x y) // cond: // result: (Select (I64ShrU x y) (I64Const [0]) (I64LtU y (I64Const [64]))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmSelect) v0 := b.NewValue0(v.Pos, OpWasmI64ShrU, typ.Int64) v0.AddArg(x) @@ -4228,16 +4270,13 @@ func rewriteValueWasm_OpRsh64Ux64_0(v *Value) bool { } func rewriteValueWasm_OpRsh64Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux8 x y) // cond: // result: (Rsh64Ux64 x (ZeroExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64Ux64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) @@ -4248,16 +4287,13 @@ func rewriteValueWasm_OpRsh64Ux8_0(v *Value) bool { } func rewriteValueWasm_OpRsh64x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x16 x y) // cond: // result: (Rsh64x64 x (ZeroExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64x64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) @@ -4268,16 +4304,13 @@ func rewriteValueWasm_OpRsh64x16_0(v *Value) bool { } func rewriteValueWasm_OpRsh64x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x32 x y) // cond: // result: (Rsh64x64 x (ZeroExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64x64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) @@ -4288,16 +4321,13 @@ func rewriteValueWasm_OpRsh64x32_0(v *Value) bool { } func rewriteValueWasm_OpRsh64x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x64 x y) // cond: // result: (I64ShrS x (Select y (I64Const [63]) (I64LtU y (I64Const [64])))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64ShrS) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpWasmSelect, typ.Int64) @@ -4317,16 +4347,13 @@ func rewriteValueWasm_OpRsh64x64_0(v *Value) bool { } func rewriteValueWasm_OpRsh64x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x8 x y) // cond: // result: (Rsh64x64 x (ZeroExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64x64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) @@ -4337,16 +4364,13 @@ func rewriteValueWasm_OpRsh64x8_0(v *Value) bool { } func rewriteValueWasm_OpRsh8Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux16 x y) // cond: // result: (Rsh64Ux64 (ZeroExt8to64 x) (ZeroExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64Ux64) v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) v0.AddArg(x) @@ -4359,16 +4383,13 @@ func rewriteValueWasm_OpRsh8Ux16_0(v *Value) bool { } func rewriteValueWasm_OpRsh8Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux32 x y) // cond: // result: (Rsh64Ux64 (ZeroExt8to64 x) (ZeroExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64Ux64) v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) v0.AddArg(x) @@ -4381,16 +4402,13 @@ func rewriteValueWasm_OpRsh8Ux32_0(v *Value) bool { } func rewriteValueWasm_OpRsh8Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux64 x y) // cond: // result: (Rsh64Ux64 (ZeroExt8to64 x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64Ux64) v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) v0.AddArg(x) @@ -4401,16 +4419,13 @@ func rewriteValueWasm_OpRsh8Ux64_0(v *Value) bool { } func rewriteValueWasm_OpRsh8Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux8 x y) // cond: // result: (Rsh64Ux64 (ZeroExt8to64 x) (ZeroExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64Ux64) v0 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) v0.AddArg(x) @@ -4423,16 +4438,13 @@ func rewriteValueWasm_OpRsh8Ux8_0(v *Value) bool { } func rewriteValueWasm_OpRsh8x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x16 x y) // cond: // result: (Rsh64x64 (SignExt8to64 x) (ZeroExt16to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64x64) v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) v0.AddArg(x) @@ -4445,16 +4457,13 @@ func rewriteValueWasm_OpRsh8x16_0(v *Value) bool { } func rewriteValueWasm_OpRsh8x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x32 x y) // cond: // result: (Rsh64x64 (SignExt8to64 x) (ZeroExt32to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64x64) v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) v0.AddArg(x) @@ -4467,16 +4476,13 @@ func rewriteValueWasm_OpRsh8x32_0(v *Value) bool { } func rewriteValueWasm_OpRsh8x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x64 x y) // cond: // result: (Rsh64x64 (SignExt8to64 x) y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64x64) v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) v0.AddArg(x) @@ -4487,16 +4493,13 @@ func rewriteValueWasm_OpRsh8x64_0(v *Value) bool { } func rewriteValueWasm_OpRsh8x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x8 x y) // cond: // result: (Rsh64x64 (SignExt8to64 x) (ZeroExt8to64 y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpRsh64x64) v0 := b.NewValue0(v.Pos, OpSignExt8to64, typ.Int64) v0.AddArg(x) @@ -4509,9 +4512,7 @@ func rewriteValueWasm_OpRsh8x8_0(v *Value) bool { } func rewriteValueWasm_OpSignExt16to32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SignExt16to32 x:(I64Load16S _ _)) // cond: // result: x @@ -4527,6 +4528,18 @@ func rewriteValueWasm_OpSignExt16to32_0(v *Value) bool { return true } // match: (SignExt16to32 x) + // cond: objabi.GOWASM.SignExt + // result: (I64Extend16S x) + for { + x := v.Args[0] + if !(objabi.GOWASM.SignExt) { + break + } + v.reset(OpWasmI64Extend16S) + v.AddArg(x) + return true + } + // match: (SignExt16to32 x) // cond: // result: (I64ShrS (I64Shl x (I64Const [48])) (I64Const [48])) for { @@ -4546,9 +4559,7 @@ func rewriteValueWasm_OpSignExt16to32_0(v *Value) bool { } func rewriteValueWasm_OpSignExt16to64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SignExt16to64 x:(I64Load16S _ _)) // cond: // result: x @@ -4564,6 +4575,18 @@ func rewriteValueWasm_OpSignExt16to64_0(v *Value) bool { return true } // match: (SignExt16to64 x) + // cond: objabi.GOWASM.SignExt + // result: (I64Extend16S x) + for { + x := v.Args[0] + if !(objabi.GOWASM.SignExt) { + break + } + v.reset(OpWasmI64Extend16S) + v.AddArg(x) + return true + } + // match: (SignExt16to64 x) // cond: // result: (I64ShrS (I64Shl x (I64Const [48])) (I64Const [48])) for { @@ -4583,9 +4606,7 @@ func rewriteValueWasm_OpSignExt16to64_0(v *Value) bool { } func rewriteValueWasm_OpSignExt32to64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SignExt32to64 x:(I64Load32S _ _)) // cond: // result: x @@ -4601,6 +4622,18 @@ func rewriteValueWasm_OpSignExt32to64_0(v *Value) bool { return true } // match: (SignExt32to64 x) + // cond: objabi.GOWASM.SignExt + // result: (I64Extend32S x) + for { + x := v.Args[0] + if !(objabi.GOWASM.SignExt) { + break + } + v.reset(OpWasmI64Extend32S) + v.AddArg(x) + return true + } + // match: (SignExt32to64 x) // cond: // result: (I64ShrS (I64Shl x (I64Const [32])) (I64Const [32])) for { @@ -4620,9 +4653,7 @@ func rewriteValueWasm_OpSignExt32to64_0(v *Value) bool { } func rewriteValueWasm_OpSignExt8to16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SignExt8to16 x:(I64Load8S _ _)) // cond: // result: x @@ -4638,6 +4669,18 @@ func rewriteValueWasm_OpSignExt8to16_0(v *Value) bool { return true } // match: (SignExt8to16 x) + // cond: objabi.GOWASM.SignExt + // result: (I64Extend8S x) + for { + x := v.Args[0] + if !(objabi.GOWASM.SignExt) { + break + } + v.reset(OpWasmI64Extend8S) + v.AddArg(x) + return true + } + // match: (SignExt8to16 x) // cond: // result: (I64ShrS (I64Shl x (I64Const [56])) (I64Const [56])) for { @@ -4657,9 +4700,7 @@ func rewriteValueWasm_OpSignExt8to16_0(v *Value) bool { } func rewriteValueWasm_OpSignExt8to32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SignExt8to32 x:(I64Load8S _ _)) // cond: // result: x @@ -4675,6 +4716,18 @@ func rewriteValueWasm_OpSignExt8to32_0(v *Value) bool { return true } // match: (SignExt8to32 x) + // cond: objabi.GOWASM.SignExt + // result: (I64Extend8S x) + for { + x := v.Args[0] + if !(objabi.GOWASM.SignExt) { + break + } + v.reset(OpWasmI64Extend8S) + v.AddArg(x) + return true + } + // match: (SignExt8to32 x) // cond: // result: (I64ShrS (I64Shl x (I64Const [56])) (I64Const [56])) for { @@ -4694,9 +4747,7 @@ func rewriteValueWasm_OpSignExt8to32_0(v *Value) bool { } func rewriteValueWasm_OpSignExt8to64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SignExt8to64 x:(I64Load8S _ _)) // cond: // result: x @@ -4712,6 +4763,18 @@ func rewriteValueWasm_OpSignExt8to64_0(v *Value) bool { return true } // match: (SignExt8to64 x) + // cond: objabi.GOWASM.SignExt + // result: (I64Extend8S x) + for { + x := v.Args[0] + if !(objabi.GOWASM.SignExt) { + break + } + v.reset(OpWasmI64Extend8S) + v.AddArg(x) + return true + } + // match: (SignExt8to64 x) // cond: // result: (I64ShrS (I64Shl x (I64Const [56])) (I64Const [56])) for { @@ -4731,9 +4794,7 @@ func rewriteValueWasm_OpSignExt8to64_0(v *Value) bool { } func rewriteValueWasm_OpSlicemask_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Slicemask x) // cond: // result: (I64ShrS (I64Sub (I64Const [0]) x) (I64Const [63])) @@ -4752,6 +4813,17 @@ func rewriteValueWasm_OpSlicemask_0(v *Value) bool { return true } } +func rewriteValueWasm_OpSqrt_0(v *Value) bool { + // match: (Sqrt x) + // cond: + // result: (F64Sqrt x) + for { + x := v.Args[0] + v.reset(OpWasmF64Sqrt) + v.AddArg(x) + return true + } +} func rewriteValueWasm_OpStaticCall_0(v *Value) bool { // match: (StaticCall [argwid] {target} mem) // cond: @@ -4773,10 +4845,9 @@ func rewriteValueWasm_OpStore_0(v *Value) bool { // result: (F64Store ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is64BitFloat(t.(*types.Type))) { break } @@ -4791,10 +4862,9 @@ func rewriteValueWasm_OpStore_0(v *Value) bool { // result: (F32Store ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(is32BitFloat(t.(*types.Type))) { break } @@ -4809,10 +4879,9 @@ func rewriteValueWasm_OpStore_0(v *Value) bool { // result: (I64Store ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 8) { break } @@ -4827,10 +4896,9 @@ func rewriteValueWasm_OpStore_0(v *Value) bool { // result: (I64Store32 ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 4) { break } @@ -4845,10 +4913,9 @@ func rewriteValueWasm_OpStore_0(v *Value) bool { // result: (I64Store16 ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 2) { break } @@ -4863,10 +4930,9 @@ func rewriteValueWasm_OpStore_0(v *Value) bool { // result: (I64Store8 ptr val mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] ptr := v.Args[0] val := v.Args[1] - mem := v.Args[2] if !(t.(*types.Type).Size() == 1) { break } @@ -4883,9 +4949,8 @@ func rewriteValueWasm_OpSub16_0(v *Value) bool { // cond: // result: (I64Sub x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Sub) v.AddArg(x) v.AddArg(y) @@ -4897,9 +4962,8 @@ func rewriteValueWasm_OpSub32_0(v *Value) bool { // cond: // result: (I64Sub x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Sub) v.AddArg(x) v.AddArg(y) @@ -4911,9 +4975,8 @@ func rewriteValueWasm_OpSub32F_0(v *Value) bool { // cond: // result: (F64Sub x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmF64Sub) v.AddArg(x) v.AddArg(y) @@ -4925,9 +4988,8 @@ func rewriteValueWasm_OpSub64_0(v *Value) bool { // cond: // result: (I64Sub x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Sub) v.AddArg(x) v.AddArg(y) @@ -4939,9 +5001,8 @@ func rewriteValueWasm_OpSub64F_0(v *Value) bool { // cond: // result: (F64Sub x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmF64Sub) v.AddArg(x) v.AddArg(y) @@ -4953,9 +5014,8 @@ func rewriteValueWasm_OpSub8_0(v *Value) bool { // cond: // result: (I64Sub x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Sub) v.AddArg(x) v.AddArg(y) @@ -4967,15 +5027,25 @@ func rewriteValueWasm_OpSubPtr_0(v *Value) bool { // cond: // result: (I64Sub x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Sub) v.AddArg(x) v.AddArg(y) return true } } +func rewriteValueWasm_OpTrunc_0(v *Value) bool { + // match: (Trunc x) + // cond: + // result: (F64Trunc x) + for { + x := v.Args[0] + v.reset(OpWasmF64Trunc) + v.AddArg(x) + return true + } +} func rewriteValueWasm_OpTrunc16to8_0(v *Value) bool { // match: (Trunc16to8 x) // cond: @@ -5054,10 +5124,9 @@ func rewriteValueWasm_OpWB_0(v *Value) bool { // result: (LoweredWB {fn} destptr srcptr mem) for { fn := v.Aux - _ = v.Args[2] + mem := v.Args[2] destptr := v.Args[0] srcptr := v.Args[1] - mem := v.Args[2] v.reset(OpWasmLoweredWB) v.Aux = fn v.AddArg(destptr) @@ -5068,9 +5137,7 @@ func rewriteValueWasm_OpWB_0(v *Value) bool { } func rewriteValueWasm_OpWasmF64Add_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (F64Add (F64Const [x]) (F64Const [y])) // cond: // result: (F64Const [auxFrom64F(auxTo64F(x) + auxTo64F(y))]) @@ -5094,13 +5161,12 @@ func rewriteValueWasm_OpWasmF64Add_0(v *Value) bool { // cond: // result: (F64Add y (F64Const [x])) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpWasmF64Const { break } x := v_0.AuxInt - y := v.Args[1] v.reset(OpWasmF64Add) v.AddArg(y) v0 := b.NewValue0(v.Pos, OpWasmF64Const, typ.Float64) @@ -5112,9 +5178,7 @@ func rewriteValueWasm_OpWasmF64Add_0(v *Value) bool { } func rewriteValueWasm_OpWasmF64Mul_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (F64Mul (F64Const [x]) (F64Const [y])) // cond: // result: (F64Const [auxFrom64F(auxTo64F(x) * auxTo64F(y))]) @@ -5138,13 +5202,12 @@ func rewriteValueWasm_OpWasmF64Mul_0(v *Value) bool { // cond: // result: (F64Mul y (F64Const [x])) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpWasmF64Const { break } x := v_0.AuxInt - y := v.Args[1] v.reset(OpWasmF64Mul) v.AddArg(y) v0 := b.NewValue0(v.Pos, OpWasmF64Const, typ.Float64) @@ -5156,9 +5219,7 @@ func rewriteValueWasm_OpWasmF64Mul_0(v *Value) bool { } func rewriteValueWasm_OpWasmI64Add_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (I64Add (I64Const [x]) (I64Const [y])) // cond: // result: (I64Const [x + y]) @@ -5182,13 +5243,12 @@ func rewriteValueWasm_OpWasmI64Add_0(v *Value) bool { // cond: // result: (I64Add y (I64Const [x])) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpWasmI64Const { break } x := v_0.AuxInt - y := v.Args[1] v.reset(OpWasmI64Add) v.AddArg(y) v0 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) @@ -5253,9 +5313,7 @@ func rewriteValueWasm_OpWasmI64AddConst_0(v *Value) bool { } func rewriteValueWasm_OpWasmI64And_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (I64And (I64Const [x]) (I64Const [y])) // cond: // result: (I64Const [x & y]) @@ -5279,13 +5337,12 @@ func rewriteValueWasm_OpWasmI64And_0(v *Value) bool { // cond: // result: (I64And y (I64Const [x])) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpWasmI64Const { break } x := v_0.AuxInt - y := v.Args[1] v.reset(OpWasmI64And) v.AddArg(y) v0 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) @@ -5297,9 +5354,7 @@ func rewriteValueWasm_OpWasmI64And_0(v *Value) bool { } func rewriteValueWasm_OpWasmI64Eq_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (I64Eq (I64Const [x]) (I64Const [y])) // cond: x == y // result: (I64Const [1]) @@ -5348,13 +5403,12 @@ func rewriteValueWasm_OpWasmI64Eq_0(v *Value) bool { // cond: // result: (I64Eq y (I64Const [x])) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpWasmI64Const { break } x := v_0.AuxInt - y := v.Args[1] v.reset(OpWasmI64Eq) v.AddArg(y) v0 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) @@ -5407,14 +5461,13 @@ func rewriteValueWasm_OpWasmI64Load_0(v *Value) bool { // result: (I64Load [off+off2] ptr mem) for { off := v.AuxInt - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpWasmI64AddConst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(isU32Bit(off + off2)) { break } @@ -5432,14 +5485,13 @@ func rewriteValueWasm_OpWasmI64Load16S_0(v *Value) bool { // result: (I64Load16S [off+off2] ptr mem) for { off := v.AuxInt - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpWasmI64AddConst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(isU32Bit(off + off2)) { break } @@ -5457,14 +5509,13 @@ func rewriteValueWasm_OpWasmI64Load16U_0(v *Value) bool { // result: (I64Load16U [off+off2] ptr mem) for { off := v.AuxInt - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpWasmI64AddConst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(isU32Bit(off + off2)) { break } @@ -5482,14 +5533,13 @@ func rewriteValueWasm_OpWasmI64Load32S_0(v *Value) bool { // result: (I64Load32S [off+off2] ptr mem) for { off := v.AuxInt - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpWasmI64AddConst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(isU32Bit(off + off2)) { break } @@ -5507,14 +5557,13 @@ func rewriteValueWasm_OpWasmI64Load32U_0(v *Value) bool { // result: (I64Load32U [off+off2] ptr mem) for { off := v.AuxInt - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpWasmI64AddConst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(isU32Bit(off + off2)) { break } @@ -5532,14 +5581,13 @@ func rewriteValueWasm_OpWasmI64Load8S_0(v *Value) bool { // result: (I64Load8S [off+off2] ptr mem) for { off := v.AuxInt - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpWasmI64AddConst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(isU32Bit(off + off2)) { break } @@ -5557,14 +5605,13 @@ func rewriteValueWasm_OpWasmI64Load8U_0(v *Value) bool { // result: (I64Load8U [off+off2] ptr mem) for { off := v.AuxInt - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpWasmI64AddConst { break } off2 := v_0.AuxInt ptr := v_0.Args[0] - mem := v.Args[1] if !(isU32Bit(off + off2)) { break } @@ -5578,9 +5625,7 @@ func rewriteValueWasm_OpWasmI64Load8U_0(v *Value) bool { } func rewriteValueWasm_OpWasmI64Mul_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (I64Mul (I64Const [x]) (I64Const [y])) // cond: // result: (I64Const [x * y]) @@ -5604,13 +5649,12 @@ func rewriteValueWasm_OpWasmI64Mul_0(v *Value) bool { // cond: // result: (I64Mul y (I64Const [x])) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpWasmI64Const { break } x := v_0.AuxInt - y := v.Args[1] v.reset(OpWasmI64Mul) v.AddArg(y) v0 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) @@ -5622,9 +5666,7 @@ func rewriteValueWasm_OpWasmI64Mul_0(v *Value) bool { } func rewriteValueWasm_OpWasmI64Ne_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (I64Ne (I64Const [x]) (I64Const [y])) // cond: x == y // result: (I64Const [0]) @@ -5673,13 +5715,12 @@ func rewriteValueWasm_OpWasmI64Ne_0(v *Value) bool { // cond: // result: (I64Ne y (I64Const [x])) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpWasmI64Const { break } x := v_0.AuxInt - y := v.Args[1] v.reset(OpWasmI64Ne) v.AddArg(y) v0 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) @@ -5710,9 +5751,7 @@ func rewriteValueWasm_OpWasmI64Ne_0(v *Value) bool { } func rewriteValueWasm_OpWasmI64Or_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (I64Or (I64Const [x]) (I64Const [y])) // cond: // result: (I64Const [x | y]) @@ -5736,13 +5775,12 @@ func rewriteValueWasm_OpWasmI64Or_0(v *Value) bool { // cond: // result: (I64Or y (I64Const [x])) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpWasmI64Const { break } x := v_0.AuxInt - y := v.Args[1] v.reset(OpWasmI64Or) v.AddArg(y) v0 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) @@ -5824,7 +5862,7 @@ func rewriteValueWasm_OpWasmI64Store_0(v *Value) bool { // result: (I64Store [off+off2] ptr val mem) for { off := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpWasmI64AddConst { break @@ -5832,7 +5870,6 @@ func rewriteValueWasm_OpWasmI64Store_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(isU32Bit(off + off2)) { break } @@ -5851,7 +5888,7 @@ func rewriteValueWasm_OpWasmI64Store16_0(v *Value) bool { // result: (I64Store16 [off+off2] ptr val mem) for { off := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpWasmI64AddConst { break @@ -5859,7 +5896,6 @@ func rewriteValueWasm_OpWasmI64Store16_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(isU32Bit(off + off2)) { break } @@ -5878,7 +5914,7 @@ func rewriteValueWasm_OpWasmI64Store32_0(v *Value) bool { // result: (I64Store32 [off+off2] ptr val mem) for { off := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpWasmI64AddConst { break @@ -5886,7 +5922,6 @@ func rewriteValueWasm_OpWasmI64Store32_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(isU32Bit(off + off2)) { break } @@ -5905,7 +5940,7 @@ func rewriteValueWasm_OpWasmI64Store8_0(v *Value) bool { // result: (I64Store8 [off+off2] ptr val mem) for { off := v.AuxInt - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpWasmI64AddConst { break @@ -5913,7 +5948,6 @@ func rewriteValueWasm_OpWasmI64Store8_0(v *Value) bool { off2 := v_0.AuxInt ptr := v_0.Args[0] val := v.Args[1] - mem := v.Args[2] if !(isU32Bit(off + off2)) { break } @@ -5928,9 +5962,7 @@ func rewriteValueWasm_OpWasmI64Store8_0(v *Value) bool { } func rewriteValueWasm_OpWasmI64Xor_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (I64Xor (I64Const [x]) (I64Const [y])) // cond: // result: (I64Const [x ^ y]) @@ -5954,13 +5986,12 @@ func rewriteValueWasm_OpWasmI64Xor_0(v *Value) bool { // cond: // result: (I64Xor y (I64Const [x])) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpWasmI64Const { break } x := v_0.AuxInt - y := v.Args[1] v.reset(OpWasmI64Xor) v.AddArg(y) v0 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) @@ -5975,9 +6006,8 @@ func rewriteValueWasm_OpXor16_0(v *Value) bool { // cond: // result: (I64Xor x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Xor) v.AddArg(x) v.AddArg(y) @@ -5989,9 +6019,8 @@ func rewriteValueWasm_OpXor32_0(v *Value) bool { // cond: // result: (I64Xor x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Xor) v.AddArg(x) v.AddArg(y) @@ -6003,9 +6032,8 @@ func rewriteValueWasm_OpXor64_0(v *Value) bool { // cond: // result: (I64Xor x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Xor) v.AddArg(x) v.AddArg(y) @@ -6017,9 +6045,8 @@ func rewriteValueWasm_OpXor8_0(v *Value) bool { // cond: // result: (I64Xor x y) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpWasmI64Xor) v.AddArg(x) v.AddArg(y) @@ -6028,9 +6055,7 @@ func rewriteValueWasm_OpXor8_0(v *Value) bool { } func rewriteValueWasm_OpZero_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Zero [0] _ mem) // cond: // result: mem @@ -6038,7 +6063,6 @@ func rewriteValueWasm_OpZero_0(v *Value) bool { if v.AuxInt != 0 { break } - _ = v.Args[1] mem := v.Args[1] v.reset(OpCopy) v.Type = mem.Type @@ -6052,9 +6076,8 @@ func rewriteValueWasm_OpZero_0(v *Value) bool { if v.AuxInt != 1 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpWasmI64Store8) v.AddArg(destptr) v0 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) @@ -6070,9 +6093,8 @@ func rewriteValueWasm_OpZero_0(v *Value) bool { if v.AuxInt != 2 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpWasmI64Store16) v.AddArg(destptr) v0 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) @@ -6088,9 +6110,8 @@ func rewriteValueWasm_OpZero_0(v *Value) bool { if v.AuxInt != 4 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpWasmI64Store32) v.AddArg(destptr) v0 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) @@ -6106,9 +6127,8 @@ func rewriteValueWasm_OpZero_0(v *Value) bool { if v.AuxInt != 8 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpWasmI64Store) v.AddArg(destptr) v0 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) @@ -6124,9 +6144,8 @@ func rewriteValueWasm_OpZero_0(v *Value) bool { if v.AuxInt != 3 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpWasmI64Store8) v.AuxInt = 2 v.AddArg(destptr) @@ -6149,9 +6168,8 @@ func rewriteValueWasm_OpZero_0(v *Value) bool { if v.AuxInt != 5 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpWasmI64Store8) v.AuxInt = 4 v.AddArg(destptr) @@ -6174,9 +6192,8 @@ func rewriteValueWasm_OpZero_0(v *Value) bool { if v.AuxInt != 6 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpWasmI64Store16) v.AuxInt = 4 v.AddArg(destptr) @@ -6199,9 +6216,8 @@ func rewriteValueWasm_OpZero_0(v *Value) bool { if v.AuxInt != 7 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpWasmI64Store32) v.AuxInt = 3 v.AddArg(destptr) @@ -6222,9 +6238,8 @@ func rewriteValueWasm_OpZero_0(v *Value) bool { // result: (Zero [s-s%8] (OffPtr destptr [s%8]) (I64Store destptr (I64Const [0]) mem)) for { s := v.AuxInt - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(s%8 != 0 && s > 8) { break } @@ -6247,9 +6262,7 @@ func rewriteValueWasm_OpZero_0(v *Value) bool { } func rewriteValueWasm_OpZero_10(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Zero [16] destptr mem) // cond: // result: (I64Store [8] destptr (I64Const [0]) (I64Store destptr (I64Const [0]) mem)) @@ -6257,9 +6270,8 @@ func rewriteValueWasm_OpZero_10(v *Value) bool { if v.AuxInt != 16 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpWasmI64Store) v.AuxInt = 8 v.AddArg(destptr) @@ -6282,9 +6294,8 @@ func rewriteValueWasm_OpZero_10(v *Value) bool { if v.AuxInt != 24 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpWasmI64Store) v.AuxInt = 16 v.AddArg(destptr) @@ -6314,9 +6325,8 @@ func rewriteValueWasm_OpZero_10(v *Value) bool { if v.AuxInt != 32 { break } - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] v.reset(OpWasmI64Store) v.AuxInt = 24 v.AddArg(destptr) @@ -6351,9 +6361,8 @@ func rewriteValueWasm_OpZero_10(v *Value) bool { // result: (LoweredZero [s/8] destptr mem) for { s := v.AuxInt - _ = v.Args[1] - destptr := v.Args[0] mem := v.Args[1] + destptr := v.Args[0] if !(s%8 == 0 && s > 32) { break } @@ -6367,9 +6376,7 @@ func rewriteValueWasm_OpZero_10(v *Value) bool { } func rewriteValueWasm_OpZeroExt16to32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ZeroExt16to32 x:(I64Load16U _ _)) // cond: // result: x @@ -6386,27 +6393,20 @@ func rewriteValueWasm_OpZeroExt16to32_0(v *Value) bool { } // match: (ZeroExt16to32 x) // cond: - // result: (I64ShrU (I64Shl x (I64Const [48])) (I64Const [48])) + // result: (I64And x (I64Const [0xffff])) for { x := v.Args[0] - v.reset(OpWasmI64ShrU) - v0 := b.NewValue0(v.Pos, OpWasmI64Shl, typ.Int64) - v0.AddArg(x) - v1 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) - v1.AuxInt = 48 - v0.AddArg(v1) + v.reset(OpWasmI64And) + v.AddArg(x) + v0 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) + v0.AuxInt = 0xffff v.AddArg(v0) - v2 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) - v2.AuxInt = 48 - v.AddArg(v2) return true } } func rewriteValueWasm_OpZeroExt16to64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ZeroExt16to64 x:(I64Load16U _ _)) // cond: // result: x @@ -6423,27 +6423,20 @@ func rewriteValueWasm_OpZeroExt16to64_0(v *Value) bool { } // match: (ZeroExt16to64 x) // cond: - // result: (I64ShrU (I64Shl x (I64Const [48])) (I64Const [48])) + // result: (I64And x (I64Const [0xffff])) for { x := v.Args[0] - v.reset(OpWasmI64ShrU) - v0 := b.NewValue0(v.Pos, OpWasmI64Shl, typ.Int64) - v0.AddArg(x) - v1 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) - v1.AuxInt = 48 - v0.AddArg(v1) + v.reset(OpWasmI64And) + v.AddArg(x) + v0 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) + v0.AuxInt = 0xffff v.AddArg(v0) - v2 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) - v2.AuxInt = 48 - v.AddArg(v2) return true } } func rewriteValueWasm_OpZeroExt32to64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ZeroExt32to64 x:(I64Load32U _ _)) // cond: // result: x @@ -6460,27 +6453,20 @@ func rewriteValueWasm_OpZeroExt32to64_0(v *Value) bool { } // match: (ZeroExt32to64 x) // cond: - // result: (I64ShrU (I64Shl x (I64Const [32])) (I64Const [32])) + // result: (I64And x (I64Const [0xffffffff])) for { x := v.Args[0] - v.reset(OpWasmI64ShrU) - v0 := b.NewValue0(v.Pos, OpWasmI64Shl, typ.Int64) - v0.AddArg(x) - v1 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) - v1.AuxInt = 32 - v0.AddArg(v1) + v.reset(OpWasmI64And) + v.AddArg(x) + v0 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) + v0.AuxInt = 0xffffffff v.AddArg(v0) - v2 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) - v2.AuxInt = 32 - v.AddArg(v2) return true } } func rewriteValueWasm_OpZeroExt8to16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ZeroExt8to16 x:(I64Load8U _ _)) // cond: // result: x @@ -6497,27 +6483,20 @@ func rewriteValueWasm_OpZeroExt8to16_0(v *Value) bool { } // match: (ZeroExt8to16 x) // cond: - // result: (I64ShrU (I64Shl x (I64Const [56])) (I64Const [56])) + // result: (I64And x (I64Const [0xff])) for { x := v.Args[0] - v.reset(OpWasmI64ShrU) - v0 := b.NewValue0(v.Pos, OpWasmI64Shl, typ.Int64) - v0.AddArg(x) - v1 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) - v1.AuxInt = 56 - v0.AddArg(v1) + v.reset(OpWasmI64And) + v.AddArg(x) + v0 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) + v0.AuxInt = 0xff v.AddArg(v0) - v2 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) - v2.AuxInt = 56 - v.AddArg(v2) return true } } func rewriteValueWasm_OpZeroExt8to32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ZeroExt8to32 x:(I64Load8U _ _)) // cond: // result: x @@ -6534,27 +6513,20 @@ func rewriteValueWasm_OpZeroExt8to32_0(v *Value) bool { } // match: (ZeroExt8to32 x) // cond: - // result: (I64ShrU (I64Shl x (I64Const [56])) (I64Const [56])) + // result: (I64And x (I64Const [0xff])) for { x := v.Args[0] - v.reset(OpWasmI64ShrU) - v0 := b.NewValue0(v.Pos, OpWasmI64Shl, typ.Int64) - v0.AddArg(x) - v1 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) - v1.AuxInt = 56 - v0.AddArg(v1) + v.reset(OpWasmI64And) + v.AddArg(x) + v0 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) + v0.AuxInt = 0xff v.AddArg(v0) - v2 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) - v2.AuxInt = 56 - v.AddArg(v2) return true } } func rewriteValueWasm_OpZeroExt8to64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ZeroExt8to64 x:(I64Load8U _ _)) // cond: // result: x @@ -6571,29 +6543,23 @@ func rewriteValueWasm_OpZeroExt8to64_0(v *Value) bool { } // match: (ZeroExt8to64 x) // cond: - // result: (I64ShrU (I64Shl x (I64Const [56])) (I64Const [56])) + // result: (I64And x (I64Const [0xff])) for { x := v.Args[0] - v.reset(OpWasmI64ShrU) - v0 := b.NewValue0(v.Pos, OpWasmI64Shl, typ.Int64) - v0.AddArg(x) - v1 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) - v1.AuxInt = 56 - v0.AddArg(v1) + v.reset(OpWasmI64And) + v.AddArg(x) + v0 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) + v0.AuxInt = 0xff v.AddArg(v0) - v2 := b.NewValue0(v.Pos, OpWasmI64Const, typ.Int64) - v2.AuxInt = 56 - v.AddArg(v2) return true } } func rewriteBlockWasm(b *Block) bool { config := b.Func.Config - _ = config - fe := b.Func.fe - _ = fe typ := &config.Types _ = typ + v := b.Control + _ = v switch b.Kind { } return false diff --git a/src/cmd/compile/internal/ssa/rewritedec.go b/src/cmd/compile/internal/ssa/rewritedec.go index e980520376..fe135821eb 100644 --- a/src/cmd/compile/internal/ssa/rewritedec.go +++ b/src/cmd/compile/internal/ssa/rewritedec.go @@ -51,7 +51,6 @@ func rewriteValuedec_OpComplexImag_0(v *Value) bool { if v_0.Op != OpComplexMake { break } - _ = v_0.Args[1] imag := v_0.Args[1] v.reset(OpCopy) v.Type = imag.Type @@ -87,7 +86,6 @@ func rewriteValuedec_OpIData_0(v *Value) bool { if v_0.Op != OpIMake { break } - _ = v_0.Args[1] data := v_0.Args[1] v.reset(OpCopy) v.Type = data.Type @@ -97,8 +95,6 @@ func rewriteValuedec_OpIData_0(v *Value) bool { return false } func rewriteValuedec_OpITab_0(v *Value) bool { - b := v.Block - _ = b // match: (ITab (IMake itab _)) // cond: // result: itab @@ -118,19 +114,15 @@ func rewriteValuedec_OpITab_0(v *Value) bool { } func rewriteValuedec_OpLoad_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Load ptr mem) // cond: t.IsComplex() && t.Size() == 8 // result: (ComplexMake (Load ptr mem) (Load (OffPtr [4] ptr) mem) ) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.IsComplex() && t.Size() == 8) { break } @@ -153,9 +145,8 @@ func rewriteValuedec_OpLoad_0(v *Value) bool { // result: (ComplexMake (Load ptr mem) (Load (OffPtr [8] ptr) mem) ) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.IsComplex() && t.Size() == 16) { break } @@ -178,9 +169,8 @@ func rewriteValuedec_OpLoad_0(v *Value) bool { // result: (StringMake (Load ptr mem) (Load (OffPtr [config.PtrSize] ptr) mem)) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.IsString()) { break } @@ -203,9 +193,8 @@ func rewriteValuedec_OpLoad_0(v *Value) bool { // result: (SliceMake (Load ptr mem) (Load (OffPtr [config.PtrSize] ptr) mem) (Load (OffPtr [2*config.PtrSize] ptr) mem)) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.IsSlice()) { break } @@ -235,9 +224,8 @@ func rewriteValuedec_OpLoad_0(v *Value) bool { // result: (IMake (Load ptr mem) (Load (OffPtr [config.PtrSize] ptr) mem)) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.IsInterface()) { break } @@ -266,7 +254,6 @@ func rewriteValuedec_OpSliceCap_0(v *Value) bool { if v_0.Op != OpSliceMake { break } - _ = v_0.Args[2] cap := v_0.Args[2] v.reset(OpCopy) v.Type = cap.Type @@ -313,26 +300,21 @@ func rewriteValuedec_OpSlicePtr_0(v *Value) bool { } func rewriteValuedec_OpStore_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Store {t} dst (ComplexMake real imag) mem) // cond: t.(*types.Type).Size() == 8 // result: (Store {typ.Float32} (OffPtr [4] dst) imag (Store {typ.Float32} dst real mem)) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpComplexMake { break } - _ = v_1.Args[1] - real := v_1.Args[0] imag := v_1.Args[1] - mem := v.Args[2] + real := v_1.Args[0] if !(t.(*types.Type).Size() == 8) { break } @@ -356,16 +338,14 @@ func rewriteValuedec_OpStore_0(v *Value) bool { // result: (Store {typ.Float64} (OffPtr [8] dst) imag (Store {typ.Float64} dst real mem)) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpComplexMake { break } - _ = v_1.Args[1] - real := v_1.Args[0] imag := v_1.Args[1] - mem := v.Args[2] + real := v_1.Args[0] if !(t.(*types.Type).Size() == 16) { break } @@ -388,16 +368,14 @@ func rewriteValuedec_OpStore_0(v *Value) bool { // cond: // result: (Store {typ.Int} (OffPtr [config.PtrSize] dst) len (Store {typ.BytePtr} dst ptr mem)) for { - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpStringMake { break } - _ = v_1.Args[1] - ptr := v_1.Args[0] len := v_1.Args[1] - mem := v.Args[2] + ptr := v_1.Args[0] v.reset(OpStore) v.Aux = typ.Int v0 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr) @@ -417,17 +395,15 @@ func rewriteValuedec_OpStore_0(v *Value) bool { // cond: // result: (Store {typ.Int} (OffPtr [2*config.PtrSize] dst) cap (Store {typ.Int} (OffPtr [config.PtrSize] dst) len (Store {typ.BytePtr} dst ptr mem))) for { - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpSliceMake { break } - _ = v_1.Args[2] + cap := v_1.Args[2] ptr := v_1.Args[0] len := v_1.Args[1] - cap := v_1.Args[2] - mem := v.Args[2] v.reset(OpStore) v.Aux = typ.Int v0 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr) @@ -455,16 +431,14 @@ func rewriteValuedec_OpStore_0(v *Value) bool { // cond: // result: (Store {typ.BytePtr} (OffPtr [config.PtrSize] dst) data (Store {typ.Uintptr} dst itab mem)) for { - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpIMake { break } - _ = v_1.Args[1] - itab := v_1.Args[0] data := v_1.Args[1] - mem := v.Args[2] + itab := v_1.Args[0] v.reset(OpStore) v.Aux = typ.BytePtr v0 := b.NewValue0(v.Pos, OpOffPtr, typ.BytePtrPtr) @@ -491,7 +465,6 @@ func rewriteValuedec_OpStringLen_0(v *Value) bool { if v_0.Op != OpStringMake { break } - _ = v_0.Args[1] len := v_0.Args[1] v.reset(OpCopy) v.Type = len.Type @@ -520,11 +493,10 @@ func rewriteValuedec_OpStringPtr_0(v *Value) bool { } func rewriteBlockdec(b *Block) bool { config := b.Func.Config - _ = config - fe := b.Func.fe - _ = fe typ := &config.Types _ = typ + v := b.Control + _ = v switch b.Kind { } return false diff --git a/src/cmd/compile/internal/ssa/rewritedec64.go b/src/cmd/compile/internal/ssa/rewritedec64.go index f88fce8076..a67ae1ed52 100644 --- a/src/cmd/compile/internal/ssa/rewritedec64.go +++ b/src/cmd/compile/internal/ssa/rewritedec64.go @@ -138,16 +138,13 @@ func rewriteValuedec64(v *Value) bool { } func rewriteValuedec64_OpAdd64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Add64 x y) // cond: // result: (Int64Make (Add32withcarry (Int64Hi x) (Int64Hi y) (Select1 (Add32carry (Int64Lo x) (Int64Lo y)))) (Select0 (Add32carry (Int64Lo x) (Int64Lo y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpInt64Make) v0 := b.NewValue0(v.Pos, OpAdd32withcarry, typ.Int32) v1 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32) @@ -182,16 +179,13 @@ func rewriteValuedec64_OpAdd64_0(v *Value) bool { } func rewriteValuedec64_OpAnd64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (And64 x y) // cond: // result: (Int64Make (And32 (Int64Hi x) (Int64Hi y)) (And32 (Int64Lo x) (Int64Lo y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpInt64Make) v0 := b.NewValue0(v.Pos, OpAnd32, typ.UInt32) v1 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32) @@ -214,11 +208,8 @@ func rewriteValuedec64_OpAnd64_0(v *Value) bool { } func rewriteValuedec64_OpArg_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Arg {n} [off]) // cond: is64BitInt(v.Type) && !config.BigEndian && v.Type.IsSigned() // result: (Int64Make (Arg {n} [off+4]) (Arg {n} [off])) @@ -303,9 +294,7 @@ func rewriteValuedec64_OpArg_0(v *Value) bool { } func rewriteValuedec64_OpBitLen64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (BitLen64 x) // cond: // result: (Add32 (BitLen32 (Int64Hi x)) (BitLen32 (Or32 (Int64Lo x) (Zeromask (Int64Hi x))))) @@ -335,9 +324,7 @@ func rewriteValuedec64_OpBitLen64_0(v *Value) bool { } func rewriteValuedec64_OpBswap64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Bswap64 x) // cond: // result: (Int64Make (Bswap32 (Int64Lo x)) (Bswap32 (Int64Hi x))) @@ -359,9 +346,7 @@ func rewriteValuedec64_OpBswap64_0(v *Value) bool { } func rewriteValuedec64_OpCom64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Com64 x) // cond: // result: (Int64Make (Com32 (Int64Hi x)) (Com32 (Int64Lo x))) @@ -383,9 +368,7 @@ func rewriteValuedec64_OpCom64_0(v *Value) bool { } func rewriteValuedec64_OpConst64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Const64 [c]) // cond: t.IsSigned() // result: (Int64Make (Const32 [c>>32]) (Const32 [int64(int32(c))])) @@ -426,9 +409,7 @@ func rewriteValuedec64_OpConst64_0(v *Value) bool { } func rewriteValuedec64_OpCtz64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Ctz64 x) // cond: // result: (Add32 (Ctz32 (Int64Lo x)) (And32 (Com32 (Zeromask (Int64Lo x))) (Ctz32 (Int64Hi x)))) @@ -471,16 +452,13 @@ func rewriteValuedec64_OpCtz64NonZero_0(v *Value) bool { } func rewriteValuedec64_OpEq64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Eq64 x y) // cond: // result: (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Eq32 (Int64Lo x) (Int64Lo y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpAndB) v0 := b.NewValue0(v.Pos, OpEq32, typ.Bool) v1 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32) @@ -503,16 +481,13 @@ func rewriteValuedec64_OpEq64_0(v *Value) bool { } func rewriteValuedec64_OpGeq64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq64 x y) // cond: // result: (OrB (Greater32 (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Geq32U (Int64Lo x) (Int64Lo y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpOrB) v0 := b.NewValue0(v.Pos, OpGreater32, typ.Bool) v1 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32) @@ -545,16 +520,13 @@ func rewriteValuedec64_OpGeq64_0(v *Value) bool { } func rewriteValuedec64_OpGeq64U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Geq64U x y) // cond: // result: (OrB (Greater32U (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Geq32U (Int64Lo x) (Int64Lo y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpOrB) v0 := b.NewValue0(v.Pos, OpGreater32U, typ.Bool) v1 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32) @@ -587,16 +559,13 @@ func rewriteValuedec64_OpGeq64U_0(v *Value) bool { } func rewriteValuedec64_OpGreater64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater64 x y) // cond: // result: (OrB (Greater32 (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Greater32U (Int64Lo x) (Int64Lo y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpOrB) v0 := b.NewValue0(v.Pos, OpGreater32, typ.Bool) v1 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32) @@ -629,16 +598,13 @@ func rewriteValuedec64_OpGreater64_0(v *Value) bool { } func rewriteValuedec64_OpGreater64U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Greater64U x y) // cond: // result: (OrB (Greater32U (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Greater32U (Int64Lo x) (Int64Lo y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpOrB) v0 := b.NewValue0(v.Pos, OpGreater32U, typ.Bool) v1 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32) @@ -696,7 +662,6 @@ func rewriteValuedec64_OpInt64Lo_0(v *Value) bool { if v_0.Op != OpInt64Make { break } - _ = v_0.Args[1] lo := v_0.Args[1] v.reset(OpCopy) v.Type = lo.Type @@ -707,16 +672,13 @@ func rewriteValuedec64_OpInt64Lo_0(v *Value) bool { } func rewriteValuedec64_OpLeq64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq64 x y) // cond: // result: (OrB (Less32 (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Leq32U (Int64Lo x) (Int64Lo y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpOrB) v0 := b.NewValue0(v.Pos, OpLess32, typ.Bool) v1 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32) @@ -749,16 +711,13 @@ func rewriteValuedec64_OpLeq64_0(v *Value) bool { } func rewriteValuedec64_OpLeq64U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Leq64U x y) // cond: // result: (OrB (Less32U (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Leq32U (Int64Lo x) (Int64Lo y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpOrB) v0 := b.NewValue0(v.Pos, OpLess32U, typ.Bool) v1 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32) @@ -791,16 +750,13 @@ func rewriteValuedec64_OpLeq64U_0(v *Value) bool { } func rewriteValuedec64_OpLess64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less64 x y) // cond: // result: (OrB (Less32 (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Less32U (Int64Lo x) (Int64Lo y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpOrB) v0 := b.NewValue0(v.Pos, OpLess32, typ.Bool) v1 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32) @@ -833,16 +789,13 @@ func rewriteValuedec64_OpLess64_0(v *Value) bool { } func rewriteValuedec64_OpLess64U_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Less64U x y) // cond: // result: (OrB (Less32U (Int64Hi x) (Int64Hi y)) (AndB (Eq32 (Int64Hi x) (Int64Hi y)) (Less32U (Int64Lo x) (Int64Lo y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpOrB) v0 := b.NewValue0(v.Pos, OpLess32U, typ.Bool) v1 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32) @@ -875,19 +828,15 @@ func rewriteValuedec64_OpLess64U_0(v *Value) bool { } func rewriteValuedec64_OpLoad_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Load ptr mem) // cond: is64BitInt(t) && !config.BigEndian && t.IsSigned() // result: (Int64Make (Load (OffPtr [4] ptr) mem) (Load ptr mem)) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is64BitInt(t) && !config.BigEndian && t.IsSigned()) { break } @@ -910,9 +859,8 @@ func rewriteValuedec64_OpLoad_0(v *Value) bool { // result: (Int64Make (Load (OffPtr [4] ptr) mem) (Load ptr mem)) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is64BitInt(t) && !config.BigEndian && !t.IsSigned()) { break } @@ -935,9 +883,8 @@ func rewriteValuedec64_OpLoad_0(v *Value) bool { // result: (Int64Make (Load ptr mem) (Load (OffPtr [4] ptr) mem)) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is64BitInt(t) && config.BigEndian && t.IsSigned()) { break } @@ -960,9 +907,8 @@ func rewriteValuedec64_OpLoad_0(v *Value) bool { // result: (Int64Make (Load ptr mem) (Load (OffPtr [4] ptr) mem)) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(is64BitInt(t) && config.BigEndian && !t.IsSigned()) { break } @@ -984,9 +930,7 @@ func rewriteValuedec64_OpLoad_0(v *Value) bool { } func rewriteValuedec64_OpLsh16x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x64 _ (Int64Make (Const32 [c]) _)) // cond: c != 0 // result: (Const32 [0]) @@ -1019,7 +963,7 @@ func rewriteValuedec64_OpLsh16x64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] + lo := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break @@ -1027,7 +971,6 @@ func rewriteValuedec64_OpLsh16x64_0(v *Value) bool { if v_1_0.AuxInt != 0 { break } - lo := v_1.Args[1] v.reset(OpLsh16x32) v.AddArg(x) v.AddArg(lo) @@ -1043,9 +986,8 @@ func rewriteValuedec64_OpLsh16x64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] - hi := v_1.Args[0] lo := v_1.Args[1] + hi := v_1.Args[0] if !(hi.Op != OpConst32) { break } @@ -1063,9 +1005,7 @@ func rewriteValuedec64_OpLsh16x64_0(v *Value) bool { } func rewriteValuedec64_OpLsh32x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x64 _ (Int64Make (Const32 [c]) _)) // cond: c != 0 // result: (Const32 [0]) @@ -1098,7 +1038,7 @@ func rewriteValuedec64_OpLsh32x64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] + lo := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break @@ -1106,7 +1046,6 @@ func rewriteValuedec64_OpLsh32x64_0(v *Value) bool { if v_1_0.AuxInt != 0 { break } - lo := v_1.Args[1] v.reset(OpLsh32x32) v.AddArg(x) v.AddArg(lo) @@ -1122,9 +1061,8 @@ func rewriteValuedec64_OpLsh32x64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] - hi := v_1.Args[0] lo := v_1.Args[1] + hi := v_1.Args[0] if !(hi.Op != OpConst32) { break } @@ -1142,22 +1080,18 @@ func rewriteValuedec64_OpLsh32x64_0(v *Value) bool { } func rewriteValuedec64_OpLsh64x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x16 (Int64Make hi lo) s) // cond: // result: (Int64Make (Or32 (Or32 (Lsh32x16 hi s) (Rsh32Ux16 lo (Sub16 (Const16 [32]) s))) (Lsh32x16 lo (Sub16 s (Const16 [32])))) (Lsh32x16 lo s)) for { - _ = v.Args[1] + s := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpInt64Make { break } - _ = v_0.Args[1] - hi := v_0.Args[0] lo := v_0.Args[1] - s := v.Args[1] + hi := v_0.Args[0] v.reset(OpInt64Make) v0 := b.NewValue0(v.Pos, OpOr32, typ.UInt32) v1 := b.NewValue0(v.Pos, OpOr32, typ.UInt32) @@ -1195,22 +1129,18 @@ func rewriteValuedec64_OpLsh64x16_0(v *Value) bool { } func rewriteValuedec64_OpLsh64x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x32 (Int64Make hi lo) s) // cond: // result: (Int64Make (Or32 (Or32 (Lsh32x32 hi s) (Rsh32Ux32 lo (Sub32 (Const32 [32]) s))) (Lsh32x32 lo (Sub32 s (Const32 [32])))) (Lsh32x32 lo s)) for { - _ = v.Args[1] + s := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpInt64Make { break } - _ = v_0.Args[1] - hi := v_0.Args[0] lo := v_0.Args[1] - s := v.Args[1] + hi := v_0.Args[0] v.reset(OpInt64Make) v0 := b.NewValue0(v.Pos, OpOr32, typ.UInt32) v1 := b.NewValue0(v.Pos, OpOr32, typ.UInt32) @@ -1248,9 +1178,7 @@ func rewriteValuedec64_OpLsh64x32_0(v *Value) bool { } func rewriteValuedec64_OpLsh64x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x64 _ (Int64Make (Const32 [c]) _)) // cond: c != 0 // result: (Const64 [0]) @@ -1283,7 +1211,7 @@ func rewriteValuedec64_OpLsh64x64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] + lo := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break @@ -1291,7 +1219,6 @@ func rewriteValuedec64_OpLsh64x64_0(v *Value) bool { if v_1_0.AuxInt != 0 { break } - lo := v_1.Args[1] v.reset(OpLsh64x32) v.AddArg(x) v.AddArg(lo) @@ -1307,9 +1234,8 @@ func rewriteValuedec64_OpLsh64x64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] - hi := v_1.Args[0] lo := v_1.Args[1] + hi := v_1.Args[0] if !(hi.Op != OpConst32) { break } @@ -1327,22 +1253,18 @@ func rewriteValuedec64_OpLsh64x64_0(v *Value) bool { } func rewriteValuedec64_OpLsh64x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x8 (Int64Make hi lo) s) // cond: // result: (Int64Make (Or32 (Or32 (Lsh32x8 hi s) (Rsh32Ux8 lo (Sub8 (Const8 [32]) s))) (Lsh32x8 lo (Sub8 s (Const8 [32])))) (Lsh32x8 lo s)) for { - _ = v.Args[1] + s := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpInt64Make { break } - _ = v_0.Args[1] - hi := v_0.Args[0] lo := v_0.Args[1] - s := v.Args[1] + hi := v_0.Args[0] v.reset(OpInt64Make) v0 := b.NewValue0(v.Pos, OpOr32, typ.UInt32) v1 := b.NewValue0(v.Pos, OpOr32, typ.UInt32) @@ -1380,9 +1302,7 @@ func rewriteValuedec64_OpLsh64x8_0(v *Value) bool { } func rewriteValuedec64_OpLsh8x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x64 _ (Int64Make (Const32 [c]) _)) // cond: c != 0 // result: (Const32 [0]) @@ -1415,7 +1335,7 @@ func rewriteValuedec64_OpLsh8x64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] + lo := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break @@ -1423,7 +1343,6 @@ func rewriteValuedec64_OpLsh8x64_0(v *Value) bool { if v_1_0.AuxInt != 0 { break } - lo := v_1.Args[1] v.reset(OpLsh8x32) v.AddArg(x) v.AddArg(lo) @@ -1439,9 +1358,8 @@ func rewriteValuedec64_OpLsh8x64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] - hi := v_1.Args[0] lo := v_1.Args[1] + hi := v_1.Args[0] if !(hi.Op != OpConst32) { break } @@ -1459,16 +1377,13 @@ func rewriteValuedec64_OpLsh8x64_0(v *Value) bool { } func rewriteValuedec64_OpMul64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mul64 x y) // cond: // result: (Int64Make (Add32 (Mul32 (Int64Lo x) (Int64Hi y)) (Add32 (Mul32 (Int64Hi x) (Int64Lo y)) (Select0 (Mul32uhilo (Int64Lo x) (Int64Lo y))))) (Select1 (Mul32uhilo (Int64Lo x) (Int64Lo y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpInt64Make) v0 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) @@ -1515,7 +1430,6 @@ func rewriteValuedec64_OpMul64_0(v *Value) bool { } func rewriteValuedec64_OpNeg64_0(v *Value) bool { b := v.Block - _ = b // match: (Neg64 x) // cond: // result: (Sub64 (Const64 [0]) x) @@ -1532,16 +1446,13 @@ func rewriteValuedec64_OpNeg64_0(v *Value) bool { } func rewriteValuedec64_OpNeq64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Neq64 x y) // cond: // result: (OrB (Neq32 (Int64Hi x) (Int64Hi y)) (Neq32 (Int64Lo x) (Int64Lo y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpOrB) v0 := b.NewValue0(v.Pos, OpNeq32, typ.Bool) v1 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32) @@ -1564,16 +1475,13 @@ func rewriteValuedec64_OpNeq64_0(v *Value) bool { } func rewriteValuedec64_OpOr64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Or64 x y) // cond: // result: (Int64Make (Or32 (Int64Hi x) (Int64Hi y)) (Or32 (Int64Lo x) (Int64Lo y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpInt64Make) v0 := b.NewValue0(v.Pos, OpOr32, typ.UInt32) v1 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32) @@ -1596,9 +1504,7 @@ func rewriteValuedec64_OpOr64_0(v *Value) bool { } func rewriteValuedec64_OpRsh16Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux64 _ (Int64Make (Const32 [c]) _)) // cond: c != 0 // result: (Const32 [0]) @@ -1631,7 +1537,7 @@ func rewriteValuedec64_OpRsh16Ux64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] + lo := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break @@ -1639,7 +1545,6 @@ func rewriteValuedec64_OpRsh16Ux64_0(v *Value) bool { if v_1_0.AuxInt != 0 { break } - lo := v_1.Args[1] v.reset(OpRsh16Ux32) v.AddArg(x) v.AddArg(lo) @@ -1655,9 +1560,8 @@ func rewriteValuedec64_OpRsh16Ux64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] - hi := v_1.Args[0] lo := v_1.Args[1] + hi := v_1.Args[0] if !(hi.Op != OpConst32) { break } @@ -1675,9 +1579,7 @@ func rewriteValuedec64_OpRsh16Ux64_0(v *Value) bool { } func rewriteValuedec64_OpRsh16x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x64 x (Int64Make (Const32 [c]) _)) // cond: c != 0 // result: (Signmask (SignExt16to32 x)) @@ -1713,7 +1615,7 @@ func rewriteValuedec64_OpRsh16x64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] + lo := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break @@ -1721,7 +1623,6 @@ func rewriteValuedec64_OpRsh16x64_0(v *Value) bool { if v_1_0.AuxInt != 0 { break } - lo := v_1.Args[1] v.reset(OpRsh16x32) v.AddArg(x) v.AddArg(lo) @@ -1737,9 +1638,8 @@ func rewriteValuedec64_OpRsh16x64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] - hi := v_1.Args[0] lo := v_1.Args[1] + hi := v_1.Args[0] if !(hi.Op != OpConst32) { break } @@ -1757,9 +1657,7 @@ func rewriteValuedec64_OpRsh16x64_0(v *Value) bool { } func rewriteValuedec64_OpRsh32Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux64 _ (Int64Make (Const32 [c]) _)) // cond: c != 0 // result: (Const32 [0]) @@ -1792,7 +1690,7 @@ func rewriteValuedec64_OpRsh32Ux64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] + lo := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break @@ -1800,7 +1698,6 @@ func rewriteValuedec64_OpRsh32Ux64_0(v *Value) bool { if v_1_0.AuxInt != 0 { break } - lo := v_1.Args[1] v.reset(OpRsh32Ux32) v.AddArg(x) v.AddArg(lo) @@ -1816,9 +1713,8 @@ func rewriteValuedec64_OpRsh32Ux64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] - hi := v_1.Args[0] lo := v_1.Args[1] + hi := v_1.Args[0] if !(hi.Op != OpConst32) { break } @@ -1836,9 +1732,7 @@ func rewriteValuedec64_OpRsh32Ux64_0(v *Value) bool { } func rewriteValuedec64_OpRsh32x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x64 x (Int64Make (Const32 [c]) _)) // cond: c != 0 // result: (Signmask x) @@ -1872,7 +1766,7 @@ func rewriteValuedec64_OpRsh32x64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] + lo := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break @@ -1880,7 +1774,6 @@ func rewriteValuedec64_OpRsh32x64_0(v *Value) bool { if v_1_0.AuxInt != 0 { break } - lo := v_1.Args[1] v.reset(OpRsh32x32) v.AddArg(x) v.AddArg(lo) @@ -1896,9 +1789,8 @@ func rewriteValuedec64_OpRsh32x64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] - hi := v_1.Args[0] lo := v_1.Args[1] + hi := v_1.Args[0] if !(hi.Op != OpConst32) { break } @@ -1916,22 +1808,18 @@ func rewriteValuedec64_OpRsh32x64_0(v *Value) bool { } func rewriteValuedec64_OpRsh64Ux16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux16 (Int64Make hi lo) s) // cond: // result: (Int64Make (Rsh32Ux16 hi s) (Or32 (Or32 (Rsh32Ux16 lo s) (Lsh32x16 hi (Sub16 (Const16 [32]) s))) (Rsh32Ux16 hi (Sub16 s (Const16 [32]))))) for { - _ = v.Args[1] + s := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpInt64Make { break } - _ = v_0.Args[1] - hi := v_0.Args[0] lo := v_0.Args[1] - s := v.Args[1] + hi := v_0.Args[0] v.reset(OpInt64Make) v0 := b.NewValue0(v.Pos, OpRsh32Ux16, typ.UInt32) v0.AddArg(hi) @@ -1969,22 +1857,18 @@ func rewriteValuedec64_OpRsh64Ux16_0(v *Value) bool { } func rewriteValuedec64_OpRsh64Ux32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux32 (Int64Make hi lo) s) // cond: // result: (Int64Make (Rsh32Ux32 hi s) (Or32 (Or32 (Rsh32Ux32 lo s) (Lsh32x32 hi (Sub32 (Const32 [32]) s))) (Rsh32Ux32 hi (Sub32 s (Const32 [32]))))) for { - _ = v.Args[1] + s := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpInt64Make { break } - _ = v_0.Args[1] - hi := v_0.Args[0] lo := v_0.Args[1] - s := v.Args[1] + hi := v_0.Args[0] v.reset(OpInt64Make) v0 := b.NewValue0(v.Pos, OpRsh32Ux32, typ.UInt32) v0.AddArg(hi) @@ -2022,9 +1906,7 @@ func rewriteValuedec64_OpRsh64Ux32_0(v *Value) bool { } func rewriteValuedec64_OpRsh64Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux64 _ (Int64Make (Const32 [c]) _)) // cond: c != 0 // result: (Const64 [0]) @@ -2057,7 +1939,7 @@ func rewriteValuedec64_OpRsh64Ux64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] + lo := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break @@ -2065,7 +1947,6 @@ func rewriteValuedec64_OpRsh64Ux64_0(v *Value) bool { if v_1_0.AuxInt != 0 { break } - lo := v_1.Args[1] v.reset(OpRsh64Ux32) v.AddArg(x) v.AddArg(lo) @@ -2081,9 +1962,8 @@ func rewriteValuedec64_OpRsh64Ux64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] - hi := v_1.Args[0] lo := v_1.Args[1] + hi := v_1.Args[0] if !(hi.Op != OpConst32) { break } @@ -2101,22 +1981,18 @@ func rewriteValuedec64_OpRsh64Ux64_0(v *Value) bool { } func rewriteValuedec64_OpRsh64Ux8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux8 (Int64Make hi lo) s) // cond: // result: (Int64Make (Rsh32Ux8 hi s) (Or32 (Or32 (Rsh32Ux8 lo s) (Lsh32x8 hi (Sub8 (Const8 [32]) s))) (Rsh32Ux8 hi (Sub8 s (Const8 [32]))))) for { - _ = v.Args[1] + s := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpInt64Make { break } - _ = v_0.Args[1] - hi := v_0.Args[0] lo := v_0.Args[1] - s := v.Args[1] + hi := v_0.Args[0] v.reset(OpInt64Make) v0 := b.NewValue0(v.Pos, OpRsh32Ux8, typ.UInt32) v0.AddArg(hi) @@ -2154,22 +2030,18 @@ func rewriteValuedec64_OpRsh64Ux8_0(v *Value) bool { } func rewriteValuedec64_OpRsh64x16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x16 (Int64Make hi lo) s) // cond: // result: (Int64Make (Rsh32x16 hi s) (Or32 (Or32 (Rsh32Ux16 lo s) (Lsh32x16 hi (Sub16 (Const16 [32]) s))) (And32 (Rsh32x16 hi (Sub16 s (Const16 [32]))) (Zeromask (ZeroExt16to32 (Rsh16Ux32 s (Const32 [5]))))))) for { - _ = v.Args[1] + s := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpInt64Make { break } - _ = v_0.Args[1] - hi := v_0.Args[0] lo := v_0.Args[1] - s := v.Args[1] + hi := v_0.Args[0] v.reset(OpInt64Make) v0 := b.NewValue0(v.Pos, OpRsh32x16, typ.UInt32) v0.AddArg(hi) @@ -2219,22 +2091,18 @@ func rewriteValuedec64_OpRsh64x16_0(v *Value) bool { } func rewriteValuedec64_OpRsh64x32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x32 (Int64Make hi lo) s) // cond: // result: (Int64Make (Rsh32x32 hi s) (Or32 (Or32 (Rsh32Ux32 lo s) (Lsh32x32 hi (Sub32 (Const32 [32]) s))) (And32 (Rsh32x32 hi (Sub32 s (Const32 [32]))) (Zeromask (Rsh32Ux32 s (Const32 [5])))))) for { - _ = v.Args[1] + s := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpInt64Make { break } - _ = v_0.Args[1] - hi := v_0.Args[0] lo := v_0.Args[1] - s := v.Args[1] + hi := v_0.Args[0] v.reset(OpInt64Make) v0 := b.NewValue0(v.Pos, OpRsh32x32, typ.UInt32) v0.AddArg(hi) @@ -2282,9 +2150,7 @@ func rewriteValuedec64_OpRsh64x32_0(v *Value) bool { } func rewriteValuedec64_OpRsh64x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x64 x (Int64Make (Const32 [c]) _)) // cond: c != 0 // result: (Int64Make (Signmask (Int64Hi x)) (Signmask (Int64Hi x))) @@ -2327,7 +2193,7 @@ func rewriteValuedec64_OpRsh64x64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] + lo := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break @@ -2335,7 +2201,6 @@ func rewriteValuedec64_OpRsh64x64_0(v *Value) bool { if v_1_0.AuxInt != 0 { break } - lo := v_1.Args[1] v.reset(OpRsh64x32) v.AddArg(x) v.AddArg(lo) @@ -2351,9 +2216,8 @@ func rewriteValuedec64_OpRsh64x64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] - hi := v_1.Args[0] lo := v_1.Args[1] + hi := v_1.Args[0] if !(hi.Op != OpConst32) { break } @@ -2371,22 +2235,18 @@ func rewriteValuedec64_OpRsh64x64_0(v *Value) bool { } func rewriteValuedec64_OpRsh64x8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x8 (Int64Make hi lo) s) // cond: // result: (Int64Make (Rsh32x8 hi s) (Or32 (Or32 (Rsh32Ux8 lo s) (Lsh32x8 hi (Sub8 (Const8 [32]) s))) (And32 (Rsh32x8 hi (Sub8 s (Const8 [32]))) (Zeromask (ZeroExt8to32 (Rsh8Ux32 s (Const32 [5]))))))) for { - _ = v.Args[1] + s := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpInt64Make { break } - _ = v_0.Args[1] - hi := v_0.Args[0] lo := v_0.Args[1] - s := v.Args[1] + hi := v_0.Args[0] v.reset(OpInt64Make) v0 := b.NewValue0(v.Pos, OpRsh32x8, typ.UInt32) v0.AddArg(hi) @@ -2436,9 +2296,7 @@ func rewriteValuedec64_OpRsh64x8_0(v *Value) bool { } func rewriteValuedec64_OpRsh8Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux64 _ (Int64Make (Const32 [c]) _)) // cond: c != 0 // result: (Const32 [0]) @@ -2471,7 +2329,7 @@ func rewriteValuedec64_OpRsh8Ux64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] + lo := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break @@ -2479,7 +2337,6 @@ func rewriteValuedec64_OpRsh8Ux64_0(v *Value) bool { if v_1_0.AuxInt != 0 { break } - lo := v_1.Args[1] v.reset(OpRsh8Ux32) v.AddArg(x) v.AddArg(lo) @@ -2495,9 +2352,8 @@ func rewriteValuedec64_OpRsh8Ux64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] - hi := v_1.Args[0] lo := v_1.Args[1] + hi := v_1.Args[0] if !(hi.Op != OpConst32) { break } @@ -2515,9 +2371,7 @@ func rewriteValuedec64_OpRsh8Ux64_0(v *Value) bool { } func rewriteValuedec64_OpRsh8x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8x64 x (Int64Make (Const32 [c]) _)) // cond: c != 0 // result: (Signmask (SignExt8to32 x)) @@ -2553,7 +2407,7 @@ func rewriteValuedec64_OpRsh8x64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] + lo := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break @@ -2561,7 +2415,6 @@ func rewriteValuedec64_OpRsh8x64_0(v *Value) bool { if v_1_0.AuxInt != 0 { break } - lo := v_1.Args[1] v.reset(OpRsh8x32) v.AddArg(x) v.AddArg(lo) @@ -2577,9 +2430,8 @@ func rewriteValuedec64_OpRsh8x64_0(v *Value) bool { if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] - hi := v_1.Args[0] lo := v_1.Args[1] + hi := v_1.Args[0] if !(hi.Op != OpConst32) { break } @@ -2597,9 +2449,7 @@ func rewriteValuedec64_OpRsh8x64_0(v *Value) bool { } func rewriteValuedec64_OpSignExt16to64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SignExt16to64 x) // cond: // result: (SignExt32to64 (SignExt16to32 x)) @@ -2614,9 +2464,7 @@ func rewriteValuedec64_OpSignExt16to64_0(v *Value) bool { } func rewriteValuedec64_OpSignExt32to64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SignExt32to64 x) // cond: // result: (Int64Make (Signmask x) x) @@ -2632,9 +2480,7 @@ func rewriteValuedec64_OpSignExt32to64_0(v *Value) bool { } func rewriteValuedec64_OpSignExt8to64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (SignExt8to64 x) // cond: // result: (SignExt32to64 (SignExt8to32 x)) @@ -2649,24 +2495,20 @@ func rewriteValuedec64_OpSignExt8to64_0(v *Value) bool { } func rewriteValuedec64_OpStore_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (Store {t} dst (Int64Make hi lo) mem) // cond: t.(*types.Type).Size() == 8 && !config.BigEndian // result: (Store {hi.Type} (OffPtr [4] dst) hi (Store {lo.Type} dst lo mem)) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] - hi := v_1.Args[0] lo := v_1.Args[1] - mem := v.Args[2] + hi := v_1.Args[0] if !(t.(*types.Type).Size() == 8 && !config.BigEndian) { break } @@ -2690,16 +2532,14 @@ func rewriteValuedec64_OpStore_0(v *Value) bool { // result: (Store {lo.Type} (OffPtr [4] dst) lo (Store {hi.Type} dst hi mem)) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpInt64Make { break } - _ = v_1.Args[1] - hi := v_1.Args[0] lo := v_1.Args[1] - mem := v.Args[2] + hi := v_1.Args[0] if !(t.(*types.Type).Size() == 8 && config.BigEndian) { break } @@ -2722,16 +2562,13 @@ func rewriteValuedec64_OpStore_0(v *Value) bool { } func rewriteValuedec64_OpSub64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Sub64 x y) // cond: // result: (Int64Make (Sub32withcarry (Int64Hi x) (Int64Hi y) (Select1 (Sub32carry (Int64Lo x) (Int64Lo y)))) (Select0 (Sub32carry (Int64Lo x) (Int64Lo y)))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpInt64Make) v0 := b.NewValue0(v.Pos, OpSub32withcarry, typ.Int32) v1 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32) @@ -2773,7 +2610,6 @@ func rewriteValuedec64_OpTrunc64to16_0(v *Value) bool { if v_0.Op != OpInt64Make { break } - _ = v_0.Args[1] lo := v_0.Args[1] v.reset(OpTrunc32to16) v.AddArg(lo) @@ -2790,7 +2626,6 @@ func rewriteValuedec64_OpTrunc64to32_0(v *Value) bool { if v_0.Op != OpInt64Make { break } - _ = v_0.Args[1] lo := v_0.Args[1] v.reset(OpCopy) v.Type = lo.Type @@ -2808,7 +2643,6 @@ func rewriteValuedec64_OpTrunc64to8_0(v *Value) bool { if v_0.Op != OpInt64Make { break } - _ = v_0.Args[1] lo := v_0.Args[1] v.reset(OpTrunc32to8) v.AddArg(lo) @@ -2818,16 +2652,13 @@ func rewriteValuedec64_OpTrunc64to8_0(v *Value) bool { } func rewriteValuedec64_OpXor64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Xor64 x y) // cond: // result: (Int64Make (Xor32 (Int64Hi x) (Int64Hi y)) (Xor32 (Int64Lo x) (Int64Lo y))) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpInt64Make) v0 := b.NewValue0(v.Pos, OpXor32, typ.UInt32) v1 := b.NewValue0(v.Pos, OpInt64Hi, typ.UInt32) @@ -2850,9 +2681,7 @@ func rewriteValuedec64_OpXor64_0(v *Value) bool { } func rewriteValuedec64_OpZeroExt16to64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ZeroExt16to64 x) // cond: // result: (ZeroExt32to64 (ZeroExt16to32 x)) @@ -2867,9 +2696,7 @@ func rewriteValuedec64_OpZeroExt16to64_0(v *Value) bool { } func rewriteValuedec64_OpZeroExt32to64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ZeroExt32to64 x) // cond: // result: (Int64Make (Const32 [0]) x) @@ -2885,9 +2712,7 @@ func rewriteValuedec64_OpZeroExt32to64_0(v *Value) bool { } func rewriteValuedec64_OpZeroExt8to64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ZeroExt8to64 x) // cond: // result: (ZeroExt32to64 (ZeroExt8to32 x)) @@ -2902,11 +2727,10 @@ func rewriteValuedec64_OpZeroExt8to64_0(v *Value) bool { } func rewriteBlockdec64(b *Block) bool { config := b.Func.Config - _ = config - fe := b.Func.fe - _ = fe typ := &config.Types _ = typ + v := b.Control + _ = v switch b.Kind { } return false diff --git a/src/cmd/compile/internal/ssa/rewritedecArgs.go b/src/cmd/compile/internal/ssa/rewritedecArgs.go index 6b823252ea..6b811297b3 100644 --- a/src/cmd/compile/internal/ssa/rewritedecArgs.go +++ b/src/cmd/compile/internal/ssa/rewritedecArgs.go @@ -24,13 +24,9 @@ func rewriteValuedecArgs(v *Value) bool { } func rewriteValuedecArgs_OpArg_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config fe := b.Func.fe - _ = fe typ := &b.Func.Config.Types - _ = typ // match: (Arg {n} [off]) // cond: v.Type.IsString() // result: (StringMake (Arg {n} [off]) (Arg {n} [off+config.PtrSize])) @@ -242,9 +238,7 @@ func rewriteValuedecArgs_OpArg_0(v *Value) bool { } func rewriteValuedecArgs_OpArg_10(v *Value) bool { b := v.Block - _ = b fe := b.Func.fe - _ = fe // match: (Arg ) // cond: t.IsArray() && t.NumElem() == 0 // result: (ArrayMake0) @@ -277,11 +271,10 @@ func rewriteValuedecArgs_OpArg_10(v *Value) bool { } func rewriteBlockdecArgs(b *Block) bool { config := b.Func.Config - _ = config - fe := b.Func.fe - _ = fe typ := &config.Types _ = typ + v := b.Control + _ = v switch b.Kind { } return false diff --git a/src/cmd/compile/internal/ssa/rewritegeneric.go b/src/cmd/compile/internal/ssa/rewritegeneric.go index f2c7529e02..7117f77d24 100644 --- a/src/cmd/compile/internal/ssa/rewritegeneric.go +++ b/src/cmd/compile/internal/ssa/rewritegeneric.go @@ -98,17 +98,17 @@ func rewriteValuegeneric(v *Value) bool { case OpDiv8u: return rewriteValuegeneric_OpDiv8u_0(v) case OpEq16: - return rewriteValuegeneric_OpEq16_0(v) + return rewriteValuegeneric_OpEq16_0(v) || rewriteValuegeneric_OpEq16_10(v) || rewriteValuegeneric_OpEq16_20(v) || rewriteValuegeneric_OpEq16_30(v) || rewriteValuegeneric_OpEq16_40(v) || rewriteValuegeneric_OpEq16_50(v) case OpEq32: - return rewriteValuegeneric_OpEq32_0(v) + return rewriteValuegeneric_OpEq32_0(v) || rewriteValuegeneric_OpEq32_10(v) || rewriteValuegeneric_OpEq32_20(v) || rewriteValuegeneric_OpEq32_30(v) || rewriteValuegeneric_OpEq32_40(v) || rewriteValuegeneric_OpEq32_50(v) || rewriteValuegeneric_OpEq32_60(v) || rewriteValuegeneric_OpEq32_70(v) || rewriteValuegeneric_OpEq32_80(v) || rewriteValuegeneric_OpEq32_90(v) case OpEq32F: return rewriteValuegeneric_OpEq32F_0(v) case OpEq64: - return rewriteValuegeneric_OpEq64_0(v) + return rewriteValuegeneric_OpEq64_0(v) || rewriteValuegeneric_OpEq64_10(v) || rewriteValuegeneric_OpEq64_20(v) || rewriteValuegeneric_OpEq64_30(v) || rewriteValuegeneric_OpEq64_40(v) || rewriteValuegeneric_OpEq64_50(v) || rewriteValuegeneric_OpEq64_60(v) case OpEq64F: return rewriteValuegeneric_OpEq64F_0(v) case OpEq8: - return rewriteValuegeneric_OpEq8_0(v) + return rewriteValuegeneric_OpEq8_0(v) || rewriteValuegeneric_OpEq8_10(v) || rewriteValuegeneric_OpEq8_20(v) || rewriteValuegeneric_OpEq8_30(v) case OpEqB: return rewriteValuegeneric_OpEqB_0(v) case OpEqInter: @@ -321,6 +321,14 @@ func rewriteValuegeneric(v *Value) bool { return rewriteValuegeneric_OpPhi_0(v) case OpPtrIndex: return rewriteValuegeneric_OpPtrIndex_0(v) + case OpRotateLeft16: + return rewriteValuegeneric_OpRotateLeft16_0(v) + case OpRotateLeft32: + return rewriteValuegeneric_OpRotateLeft32_0(v) + case OpRotateLeft64: + return rewriteValuegeneric_OpRotateLeft64_0(v) + case OpRotateLeft8: + return rewriteValuegeneric_OpRotateLeft8_0(v) case OpRound32F: return rewriteValuegeneric_OpRound32F_0(v) case OpRound64F: @@ -389,6 +397,10 @@ func rewriteValuegeneric(v *Value) bool { return rewriteValuegeneric_OpRsh8x64_0(v) case OpRsh8x8: return rewriteValuegeneric_OpRsh8x8_0(v) + case OpSelect0: + return rewriteValuegeneric_OpSelect0_0(v) + case OpSelect1: + return rewriteValuegeneric_OpSelect1_0(v) case OpSignExt16to32: return rewriteValuegeneric_OpSignExt16to32_0(v) case OpSignExt16to64: @@ -472,7 +484,6 @@ func rewriteValuegeneric(v *Value) bool { } func rewriteValuegeneric_OpAdd16_0(v *Value) bool { b := v.Block - _ = b // match: (Add16 (Const16 [c]) (Const16 [d])) // cond: // result: (Const16 [int64(int16(c+d))]) @@ -521,18 +532,16 @@ func rewriteValuegeneric_OpAdd16_0(v *Value) bool { if v_0.Op != OpMul16 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul16 { break } - _ = v_1.Args[1] + z := v_1.Args[1] if x != v_1.Args[0] { break } - z := v_1.Args[1] v.reset(OpMul16) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpAdd16, t) @@ -551,18 +560,16 @@ func rewriteValuegeneric_OpAdd16_0(v *Value) bool { if v_0.Op != OpMul16 { break } - _ = v_0.Args[1] - y := v_0.Args[0] x := v_0.Args[1] + y := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul16 { break } - _ = v_1.Args[1] + z := v_1.Args[1] if x != v_1.Args[0] { break } - z := v_1.Args[1] v.reset(OpMul16) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpAdd16, t) @@ -581,9 +588,8 @@ func rewriteValuegeneric_OpAdd16_0(v *Value) bool { if v_0.Op != OpMul16 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul16 { break @@ -611,9 +617,8 @@ func rewriteValuegeneric_OpAdd16_0(v *Value) bool { if v_0.Op != OpMul16 { break } - _ = v_0.Args[1] - y := v_0.Args[0] x := v_0.Args[1] + y := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul16 { break @@ -641,18 +646,16 @@ func rewriteValuegeneric_OpAdd16_0(v *Value) bool { if v_0.Op != OpMul16 { break } - _ = v_0.Args[1] - x := v_0.Args[0] z := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul16 { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpMul16) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpAdd16, t) @@ -671,18 +674,16 @@ func rewriteValuegeneric_OpAdd16_0(v *Value) bool { if v_0.Op != OpMul16 { break } - _ = v_0.Args[1] - z := v_0.Args[0] x := v_0.Args[1] + z := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul16 { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpMul16) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpAdd16, t) @@ -701,9 +702,8 @@ func rewriteValuegeneric_OpAdd16_0(v *Value) bool { if v_0.Op != OpMul16 { break } - _ = v_0.Args[1] - x := v_0.Args[0] z := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul16 { break @@ -731,9 +731,8 @@ func rewriteValuegeneric_OpAdd16_0(v *Value) bool { if v_0.Op != OpMul16 { break } - _ = v_0.Args[1] - z := v_0.Args[0] x := v_0.Args[1] + z := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul16 { break @@ -755,12 +754,11 @@ func rewriteValuegeneric_OpAdd16_0(v *Value) bool { } func rewriteValuegeneric_OpAdd16_10(v *Value) bool { b := v.Block - _ = b // match: (Add16 (Const16 [0]) x) // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst16 { break @@ -768,7 +766,6 @@ func rewriteValuegeneric_OpAdd16_10(v *Value) bool { if v_0.AuxInt != 0 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -838,19 +835,17 @@ func rewriteValuegeneric_OpAdd16_10(v *Value) bool { // cond: (z.Op != OpConst16 && x.Op != OpConst16) // result: (Add16 i (Add16 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd16 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst16 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst16 && x.Op != OpConst16) { break } @@ -866,7 +861,7 @@ func rewriteValuegeneric_OpAdd16_10(v *Value) bool { // cond: (z.Op != OpConst16 && x.Op != OpConst16) // result: (Add16 i (Add16 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd16 { break @@ -878,7 +873,6 @@ func rewriteValuegeneric_OpAdd16_10(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst16 && x.Op != OpConst16) { break } @@ -900,13 +894,12 @@ func rewriteValuegeneric_OpAdd16_10(v *Value) bool { if v_1.Op != OpAdd16 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst16 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst16 && x.Op != OpConst16) { break } @@ -950,19 +943,17 @@ func rewriteValuegeneric_OpAdd16_10(v *Value) bool { // cond: (z.Op != OpConst16 && x.Op != OpConst16) // result: (Add16 i (Sub16 x z)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpSub16 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst16 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst16 && x.Op != OpConst16) { break } @@ -984,13 +975,12 @@ func rewriteValuegeneric_OpAdd16_10(v *Value) bool { if v_1.Op != OpSub16 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst16 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst16 && x.Op != OpConst16) { break } @@ -1006,7 +996,6 @@ func rewriteValuegeneric_OpAdd16_10(v *Value) bool { } func rewriteValuegeneric_OpAdd16_20(v *Value) bool { b := v.Block - _ = b // match: (Add16 x (Sub16 i:(Const16 ) z)) // cond: (z.Op != OpConst16 && x.Op != OpConst16) // result: (Add16 i (Sub16 x z)) @@ -1017,13 +1006,12 @@ func rewriteValuegeneric_OpAdd16_20(v *Value) bool { if v_1.Op != OpSub16 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst16 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst16 && x.Op != OpConst16) { break } @@ -1039,19 +1027,17 @@ func rewriteValuegeneric_OpAdd16_20(v *Value) bool { // cond: (z.Op != OpConst16 && x.Op != OpConst16) // result: (Add16 i (Sub16 x z)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpSub16 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst16 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst16 && x.Op != OpConst16) { break } @@ -1067,7 +1053,7 @@ func rewriteValuegeneric_OpAdd16_20(v *Value) bool { // cond: (z.Op != OpConst16 && x.Op != OpConst16) // result: (Sub16 (Add16 x z) i) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpSub16 { break @@ -1079,7 +1065,6 @@ func rewriteValuegeneric_OpAdd16_20(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst16 && x.Op != OpConst16) { break } @@ -1151,7 +1136,7 @@ func rewriteValuegeneric_OpAdd16_20(v *Value) bool { // cond: (z.Op != OpConst16 && x.Op != OpConst16) // result: (Sub16 (Add16 x z) i) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpSub16 { break @@ -1163,7 +1148,6 @@ func rewriteValuegeneric_OpAdd16_20(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst16 && x.Op != OpConst16) { break } @@ -1190,7 +1174,7 @@ func rewriteValuegeneric_OpAdd16_20(v *Value) bool { if v_1.Op != OpAdd16 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst16 { break @@ -1199,7 +1183,6 @@ func rewriteValuegeneric_OpAdd16_20(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpAdd16) v0 := b.NewValue0(v.Pos, OpConst16, t) v0.AuxInt = int64(int16(c + d)) @@ -1248,14 +1231,13 @@ func rewriteValuegeneric_OpAdd16_20(v *Value) bool { if v_0.Op != OpAdd16 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst16 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst16 { break @@ -1307,7 +1289,6 @@ func rewriteValuegeneric_OpAdd16_20(v *Value) bool { } func rewriteValuegeneric_OpAdd16_30(v *Value) bool { b := v.Block - _ = b // match: (Add16 (Const16 [c]) (Sub16 (Const16 [d]) x)) // cond: // result: (Sub16 (Const16 [int64(int16(c+d))]) x) @@ -1323,7 +1304,7 @@ func rewriteValuegeneric_OpAdd16_30(v *Value) bool { if v_1.Op != OpSub16 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst16 { break @@ -1332,7 +1313,6 @@ func rewriteValuegeneric_OpAdd16_30(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpSub16) v0 := b.NewValue0(v.Pos, OpConst16, t) v0.AuxInt = int64(int16(c + d)) @@ -1349,14 +1329,13 @@ func rewriteValuegeneric_OpAdd16_30(v *Value) bool { if v_0.Op != OpSub16 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst16 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst16 { break @@ -1440,7 +1419,6 @@ func rewriteValuegeneric_OpAdd16_30(v *Value) bool { } func rewriteValuegeneric_OpAdd32_0(v *Value) bool { b := v.Block - _ = b // match: (Add32 (Const32 [c]) (Const32 [d])) // cond: // result: (Const32 [int64(int32(c+d))]) @@ -1489,18 +1467,16 @@ func rewriteValuegeneric_OpAdd32_0(v *Value) bool { if v_0.Op != OpMul32 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul32 { break } - _ = v_1.Args[1] + z := v_1.Args[1] if x != v_1.Args[0] { break } - z := v_1.Args[1] v.reset(OpMul32) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpAdd32, t) @@ -1519,18 +1495,16 @@ func rewriteValuegeneric_OpAdd32_0(v *Value) bool { if v_0.Op != OpMul32 { break } - _ = v_0.Args[1] - y := v_0.Args[0] x := v_0.Args[1] + y := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul32 { break } - _ = v_1.Args[1] + z := v_1.Args[1] if x != v_1.Args[0] { break } - z := v_1.Args[1] v.reset(OpMul32) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpAdd32, t) @@ -1549,9 +1523,8 @@ func rewriteValuegeneric_OpAdd32_0(v *Value) bool { if v_0.Op != OpMul32 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul32 { break @@ -1579,9 +1552,8 @@ func rewriteValuegeneric_OpAdd32_0(v *Value) bool { if v_0.Op != OpMul32 { break } - _ = v_0.Args[1] - y := v_0.Args[0] x := v_0.Args[1] + y := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul32 { break @@ -1609,18 +1581,16 @@ func rewriteValuegeneric_OpAdd32_0(v *Value) bool { if v_0.Op != OpMul32 { break } - _ = v_0.Args[1] - x := v_0.Args[0] z := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul32 { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpMul32) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpAdd32, t) @@ -1639,18 +1609,16 @@ func rewriteValuegeneric_OpAdd32_0(v *Value) bool { if v_0.Op != OpMul32 { break } - _ = v_0.Args[1] - z := v_0.Args[0] x := v_0.Args[1] + z := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul32 { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpMul32) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpAdd32, t) @@ -1669,9 +1637,8 @@ func rewriteValuegeneric_OpAdd32_0(v *Value) bool { if v_0.Op != OpMul32 { break } - _ = v_0.Args[1] - x := v_0.Args[0] z := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul32 { break @@ -1699,9 +1666,8 @@ func rewriteValuegeneric_OpAdd32_0(v *Value) bool { if v_0.Op != OpMul32 { break } - _ = v_0.Args[1] - z := v_0.Args[0] x := v_0.Args[1] + z := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul32 { break @@ -1723,12 +1689,11 @@ func rewriteValuegeneric_OpAdd32_0(v *Value) bool { } func rewriteValuegeneric_OpAdd32_10(v *Value) bool { b := v.Block - _ = b // match: (Add32 (Const32 [0]) x) // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst32 { break @@ -1736,7 +1701,6 @@ func rewriteValuegeneric_OpAdd32_10(v *Value) bool { if v_0.AuxInt != 0 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -1806,19 +1770,17 @@ func rewriteValuegeneric_OpAdd32_10(v *Value) bool { // cond: (z.Op != OpConst32 && x.Op != OpConst32) // result: (Add32 i (Add32 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd32 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst32 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst32 && x.Op != OpConst32) { break } @@ -1834,7 +1796,7 @@ func rewriteValuegeneric_OpAdd32_10(v *Value) bool { // cond: (z.Op != OpConst32 && x.Op != OpConst32) // result: (Add32 i (Add32 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd32 { break @@ -1846,7 +1808,6 @@ func rewriteValuegeneric_OpAdd32_10(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst32 && x.Op != OpConst32) { break } @@ -1868,13 +1829,12 @@ func rewriteValuegeneric_OpAdd32_10(v *Value) bool { if v_1.Op != OpAdd32 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst32 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst32 && x.Op != OpConst32) { break } @@ -1918,19 +1878,17 @@ func rewriteValuegeneric_OpAdd32_10(v *Value) bool { // cond: (z.Op != OpConst32 && x.Op != OpConst32) // result: (Add32 i (Sub32 x z)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpSub32 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst32 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst32 && x.Op != OpConst32) { break } @@ -1952,13 +1910,12 @@ func rewriteValuegeneric_OpAdd32_10(v *Value) bool { if v_1.Op != OpSub32 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst32 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst32 && x.Op != OpConst32) { break } @@ -1974,7 +1931,6 @@ func rewriteValuegeneric_OpAdd32_10(v *Value) bool { } func rewriteValuegeneric_OpAdd32_20(v *Value) bool { b := v.Block - _ = b // match: (Add32 x (Sub32 i:(Const32 ) z)) // cond: (z.Op != OpConst32 && x.Op != OpConst32) // result: (Add32 i (Sub32 x z)) @@ -1985,13 +1941,12 @@ func rewriteValuegeneric_OpAdd32_20(v *Value) bool { if v_1.Op != OpSub32 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst32 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst32 && x.Op != OpConst32) { break } @@ -2007,19 +1962,17 @@ func rewriteValuegeneric_OpAdd32_20(v *Value) bool { // cond: (z.Op != OpConst32 && x.Op != OpConst32) // result: (Add32 i (Sub32 x z)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpSub32 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst32 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst32 && x.Op != OpConst32) { break } @@ -2035,7 +1988,7 @@ func rewriteValuegeneric_OpAdd32_20(v *Value) bool { // cond: (z.Op != OpConst32 && x.Op != OpConst32) // result: (Sub32 (Add32 x z) i) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpSub32 { break @@ -2047,7 +2000,6 @@ func rewriteValuegeneric_OpAdd32_20(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst32 && x.Op != OpConst32) { break } @@ -2119,7 +2071,7 @@ func rewriteValuegeneric_OpAdd32_20(v *Value) bool { // cond: (z.Op != OpConst32 && x.Op != OpConst32) // result: (Sub32 (Add32 x z) i) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpSub32 { break @@ -2131,7 +2083,6 @@ func rewriteValuegeneric_OpAdd32_20(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst32 && x.Op != OpConst32) { break } @@ -2158,7 +2109,7 @@ func rewriteValuegeneric_OpAdd32_20(v *Value) bool { if v_1.Op != OpAdd32 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break @@ -2167,7 +2118,6 @@ func rewriteValuegeneric_OpAdd32_20(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpAdd32) v0 := b.NewValue0(v.Pos, OpConst32, t) v0.AuxInt = int64(int32(c + d)) @@ -2216,14 +2166,13 @@ func rewriteValuegeneric_OpAdd32_20(v *Value) bool { if v_0.Op != OpAdd32 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst32 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst32 { break @@ -2275,7 +2224,6 @@ func rewriteValuegeneric_OpAdd32_20(v *Value) bool { } func rewriteValuegeneric_OpAdd32_30(v *Value) bool { b := v.Block - _ = b // match: (Add32 (Const32 [c]) (Sub32 (Const32 [d]) x)) // cond: // result: (Sub32 (Const32 [int64(int32(c+d))]) x) @@ -2291,7 +2239,7 @@ func rewriteValuegeneric_OpAdd32_30(v *Value) bool { if v_1.Op != OpSub32 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break @@ -2300,7 +2248,6 @@ func rewriteValuegeneric_OpAdd32_30(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpSub32) v0 := b.NewValue0(v.Pos, OpConst32, t) v0.AuxInt = int64(int32(c + d)) @@ -2317,14 +2264,13 @@ func rewriteValuegeneric_OpAdd32_30(v *Value) bool { if v_0.Op != OpSub32 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst32 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst32 { break @@ -2449,7 +2395,6 @@ func rewriteValuegeneric_OpAdd32F_0(v *Value) bool { } func rewriteValuegeneric_OpAdd64_0(v *Value) bool { b := v.Block - _ = b // match: (Add64 (Const64 [c]) (Const64 [d])) // cond: // result: (Const64 [c+d]) @@ -2498,18 +2443,16 @@ func rewriteValuegeneric_OpAdd64_0(v *Value) bool { if v_0.Op != OpMul64 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul64 { break } - _ = v_1.Args[1] + z := v_1.Args[1] if x != v_1.Args[0] { break } - z := v_1.Args[1] v.reset(OpMul64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpAdd64, t) @@ -2528,18 +2471,16 @@ func rewriteValuegeneric_OpAdd64_0(v *Value) bool { if v_0.Op != OpMul64 { break } - _ = v_0.Args[1] - y := v_0.Args[0] x := v_0.Args[1] + y := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul64 { break } - _ = v_1.Args[1] + z := v_1.Args[1] if x != v_1.Args[0] { break } - z := v_1.Args[1] v.reset(OpMul64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpAdd64, t) @@ -2558,9 +2499,8 @@ func rewriteValuegeneric_OpAdd64_0(v *Value) bool { if v_0.Op != OpMul64 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul64 { break @@ -2588,9 +2528,8 @@ func rewriteValuegeneric_OpAdd64_0(v *Value) bool { if v_0.Op != OpMul64 { break } - _ = v_0.Args[1] - y := v_0.Args[0] x := v_0.Args[1] + y := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul64 { break @@ -2618,18 +2557,16 @@ func rewriteValuegeneric_OpAdd64_0(v *Value) bool { if v_0.Op != OpMul64 { break } - _ = v_0.Args[1] - x := v_0.Args[0] z := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul64 { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpMul64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpAdd64, t) @@ -2648,18 +2585,16 @@ func rewriteValuegeneric_OpAdd64_0(v *Value) bool { if v_0.Op != OpMul64 { break } - _ = v_0.Args[1] - z := v_0.Args[0] x := v_0.Args[1] + z := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul64 { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpMul64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpAdd64, t) @@ -2678,9 +2613,8 @@ func rewriteValuegeneric_OpAdd64_0(v *Value) bool { if v_0.Op != OpMul64 { break } - _ = v_0.Args[1] - x := v_0.Args[0] z := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul64 { break @@ -2708,9 +2642,8 @@ func rewriteValuegeneric_OpAdd64_0(v *Value) bool { if v_0.Op != OpMul64 { break } - _ = v_0.Args[1] - z := v_0.Args[0] x := v_0.Args[1] + z := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul64 { break @@ -2732,12 +2665,11 @@ func rewriteValuegeneric_OpAdd64_0(v *Value) bool { } func rewriteValuegeneric_OpAdd64_10(v *Value) bool { b := v.Block - _ = b // match: (Add64 (Const64 [0]) x) // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst64 { break @@ -2745,7 +2677,6 @@ func rewriteValuegeneric_OpAdd64_10(v *Value) bool { if v_0.AuxInt != 0 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -2815,19 +2746,17 @@ func rewriteValuegeneric_OpAdd64_10(v *Value) bool { // cond: (z.Op != OpConst64 && x.Op != OpConst64) // result: (Add64 i (Add64 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd64 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst64 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst64 && x.Op != OpConst64) { break } @@ -2843,7 +2772,7 @@ func rewriteValuegeneric_OpAdd64_10(v *Value) bool { // cond: (z.Op != OpConst64 && x.Op != OpConst64) // result: (Add64 i (Add64 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd64 { break @@ -2855,7 +2784,6 @@ func rewriteValuegeneric_OpAdd64_10(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst64 && x.Op != OpConst64) { break } @@ -2877,13 +2805,12 @@ func rewriteValuegeneric_OpAdd64_10(v *Value) bool { if v_1.Op != OpAdd64 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst64 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst64 && x.Op != OpConst64) { break } @@ -2927,19 +2854,17 @@ func rewriteValuegeneric_OpAdd64_10(v *Value) bool { // cond: (z.Op != OpConst64 && x.Op != OpConst64) // result: (Add64 i (Sub64 x z)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpSub64 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst64 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst64 && x.Op != OpConst64) { break } @@ -2961,13 +2886,12 @@ func rewriteValuegeneric_OpAdd64_10(v *Value) bool { if v_1.Op != OpSub64 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst64 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst64 && x.Op != OpConst64) { break } @@ -2983,7 +2907,6 @@ func rewriteValuegeneric_OpAdd64_10(v *Value) bool { } func rewriteValuegeneric_OpAdd64_20(v *Value) bool { b := v.Block - _ = b // match: (Add64 x (Sub64 i:(Const64 ) z)) // cond: (z.Op != OpConst64 && x.Op != OpConst64) // result: (Add64 i (Sub64 x z)) @@ -2994,13 +2917,12 @@ func rewriteValuegeneric_OpAdd64_20(v *Value) bool { if v_1.Op != OpSub64 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst64 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst64 && x.Op != OpConst64) { break } @@ -3016,19 +2938,17 @@ func rewriteValuegeneric_OpAdd64_20(v *Value) bool { // cond: (z.Op != OpConst64 && x.Op != OpConst64) // result: (Add64 i (Sub64 x z)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpSub64 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst64 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst64 && x.Op != OpConst64) { break } @@ -3044,7 +2964,7 @@ func rewriteValuegeneric_OpAdd64_20(v *Value) bool { // cond: (z.Op != OpConst64 && x.Op != OpConst64) // result: (Sub64 (Add64 x z) i) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpSub64 { break @@ -3056,7 +2976,6 @@ func rewriteValuegeneric_OpAdd64_20(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst64 && x.Op != OpConst64) { break } @@ -3128,7 +3047,7 @@ func rewriteValuegeneric_OpAdd64_20(v *Value) bool { // cond: (z.Op != OpConst64 && x.Op != OpConst64) // result: (Sub64 (Add64 x z) i) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpSub64 { break @@ -3140,7 +3059,6 @@ func rewriteValuegeneric_OpAdd64_20(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst64 && x.Op != OpConst64) { break } @@ -3167,7 +3085,7 @@ func rewriteValuegeneric_OpAdd64_20(v *Value) bool { if v_1.Op != OpAdd64 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst64 { break @@ -3176,7 +3094,6 @@ func rewriteValuegeneric_OpAdd64_20(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpAdd64) v0 := b.NewValue0(v.Pos, OpConst64, t) v0.AuxInt = c + d @@ -3225,14 +3142,13 @@ func rewriteValuegeneric_OpAdd64_20(v *Value) bool { if v_0.Op != OpAdd64 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst64 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst64 { break @@ -3284,7 +3200,6 @@ func rewriteValuegeneric_OpAdd64_20(v *Value) bool { } func rewriteValuegeneric_OpAdd64_30(v *Value) bool { b := v.Block - _ = b // match: (Add64 (Const64 [c]) (Sub64 (Const64 [d]) x)) // cond: // result: (Sub64 (Const64 [c+d]) x) @@ -3300,7 +3215,7 @@ func rewriteValuegeneric_OpAdd64_30(v *Value) bool { if v_1.Op != OpSub64 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst64 { break @@ -3309,7 +3224,6 @@ func rewriteValuegeneric_OpAdd64_30(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpSub64) v0 := b.NewValue0(v.Pos, OpConst64, t) v0.AuxInt = c + d @@ -3326,14 +3240,13 @@ func rewriteValuegeneric_OpAdd64_30(v *Value) bool { if v_0.Op != OpSub64 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst64 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst64 { break @@ -3458,7 +3371,6 @@ func rewriteValuegeneric_OpAdd64F_0(v *Value) bool { } func rewriteValuegeneric_OpAdd8_0(v *Value) bool { b := v.Block - _ = b // match: (Add8 (Const8 [c]) (Const8 [d])) // cond: // result: (Const8 [int64(int8(c+d))]) @@ -3507,18 +3419,16 @@ func rewriteValuegeneric_OpAdd8_0(v *Value) bool { if v_0.Op != OpMul8 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul8 { break } - _ = v_1.Args[1] + z := v_1.Args[1] if x != v_1.Args[0] { break } - z := v_1.Args[1] v.reset(OpMul8) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpAdd8, t) @@ -3537,18 +3447,16 @@ func rewriteValuegeneric_OpAdd8_0(v *Value) bool { if v_0.Op != OpMul8 { break } - _ = v_0.Args[1] - y := v_0.Args[0] x := v_0.Args[1] + y := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul8 { break } - _ = v_1.Args[1] + z := v_1.Args[1] if x != v_1.Args[0] { break } - z := v_1.Args[1] v.reset(OpMul8) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpAdd8, t) @@ -3567,9 +3475,8 @@ func rewriteValuegeneric_OpAdd8_0(v *Value) bool { if v_0.Op != OpMul8 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul8 { break @@ -3597,9 +3504,8 @@ func rewriteValuegeneric_OpAdd8_0(v *Value) bool { if v_0.Op != OpMul8 { break } - _ = v_0.Args[1] - y := v_0.Args[0] x := v_0.Args[1] + y := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul8 { break @@ -3627,18 +3533,16 @@ func rewriteValuegeneric_OpAdd8_0(v *Value) bool { if v_0.Op != OpMul8 { break } - _ = v_0.Args[1] - x := v_0.Args[0] z := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul8 { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpMul8) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpAdd8, t) @@ -3657,18 +3561,16 @@ func rewriteValuegeneric_OpAdd8_0(v *Value) bool { if v_0.Op != OpMul8 { break } - _ = v_0.Args[1] - z := v_0.Args[0] x := v_0.Args[1] + z := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul8 { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpMul8) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpAdd8, t) @@ -3687,9 +3589,8 @@ func rewriteValuegeneric_OpAdd8_0(v *Value) bool { if v_0.Op != OpMul8 { break } - _ = v_0.Args[1] - x := v_0.Args[0] z := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul8 { break @@ -3717,9 +3618,8 @@ func rewriteValuegeneric_OpAdd8_0(v *Value) bool { if v_0.Op != OpMul8 { break } - _ = v_0.Args[1] - z := v_0.Args[0] x := v_0.Args[1] + z := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul8 { break @@ -3741,12 +3641,11 @@ func rewriteValuegeneric_OpAdd8_0(v *Value) bool { } func rewriteValuegeneric_OpAdd8_10(v *Value) bool { b := v.Block - _ = b // match: (Add8 (Const8 [0]) x) // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst8 { break @@ -3754,7 +3653,6 @@ func rewriteValuegeneric_OpAdd8_10(v *Value) bool { if v_0.AuxInt != 0 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -3824,19 +3722,17 @@ func rewriteValuegeneric_OpAdd8_10(v *Value) bool { // cond: (z.Op != OpConst8 && x.Op != OpConst8) // result: (Add8 i (Add8 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd8 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst8 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst8 && x.Op != OpConst8) { break } @@ -3852,7 +3748,7 @@ func rewriteValuegeneric_OpAdd8_10(v *Value) bool { // cond: (z.Op != OpConst8 && x.Op != OpConst8) // result: (Add8 i (Add8 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd8 { break @@ -3864,7 +3760,6 @@ func rewriteValuegeneric_OpAdd8_10(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst8 && x.Op != OpConst8) { break } @@ -3886,13 +3781,12 @@ func rewriteValuegeneric_OpAdd8_10(v *Value) bool { if v_1.Op != OpAdd8 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst8 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst8 && x.Op != OpConst8) { break } @@ -3936,19 +3830,17 @@ func rewriteValuegeneric_OpAdd8_10(v *Value) bool { // cond: (z.Op != OpConst8 && x.Op != OpConst8) // result: (Add8 i (Sub8 x z)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpSub8 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst8 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst8 && x.Op != OpConst8) { break } @@ -3970,13 +3862,12 @@ func rewriteValuegeneric_OpAdd8_10(v *Value) bool { if v_1.Op != OpSub8 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst8 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst8 && x.Op != OpConst8) { break } @@ -3992,7 +3883,6 @@ func rewriteValuegeneric_OpAdd8_10(v *Value) bool { } func rewriteValuegeneric_OpAdd8_20(v *Value) bool { b := v.Block - _ = b // match: (Add8 x (Sub8 i:(Const8 ) z)) // cond: (z.Op != OpConst8 && x.Op != OpConst8) // result: (Add8 i (Sub8 x z)) @@ -4003,13 +3893,12 @@ func rewriteValuegeneric_OpAdd8_20(v *Value) bool { if v_1.Op != OpSub8 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst8 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst8 && x.Op != OpConst8) { break } @@ -4025,19 +3914,17 @@ func rewriteValuegeneric_OpAdd8_20(v *Value) bool { // cond: (z.Op != OpConst8 && x.Op != OpConst8) // result: (Add8 i (Sub8 x z)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpSub8 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst8 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst8 && x.Op != OpConst8) { break } @@ -4053,7 +3940,7 @@ func rewriteValuegeneric_OpAdd8_20(v *Value) bool { // cond: (z.Op != OpConst8 && x.Op != OpConst8) // result: (Sub8 (Add8 x z) i) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpSub8 { break @@ -4065,7 +3952,6 @@ func rewriteValuegeneric_OpAdd8_20(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst8 && x.Op != OpConst8) { break } @@ -4137,7 +4023,7 @@ func rewriteValuegeneric_OpAdd8_20(v *Value) bool { // cond: (z.Op != OpConst8 && x.Op != OpConst8) // result: (Sub8 (Add8 x z) i) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpSub8 { break @@ -4149,7 +4035,6 @@ func rewriteValuegeneric_OpAdd8_20(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst8 && x.Op != OpConst8) { break } @@ -4176,7 +4061,7 @@ func rewriteValuegeneric_OpAdd8_20(v *Value) bool { if v_1.Op != OpAdd8 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst8 { break @@ -4185,7 +4070,6 @@ func rewriteValuegeneric_OpAdd8_20(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpAdd8) v0 := b.NewValue0(v.Pos, OpConst8, t) v0.AuxInt = int64(int8(c + d)) @@ -4234,14 +4118,13 @@ func rewriteValuegeneric_OpAdd8_20(v *Value) bool { if v_0.Op != OpAdd8 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst8 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst8 { break @@ -4293,7 +4176,6 @@ func rewriteValuegeneric_OpAdd8_20(v *Value) bool { } func rewriteValuegeneric_OpAdd8_30(v *Value) bool { b := v.Block - _ = b // match: (Add8 (Const8 [c]) (Sub8 (Const8 [d]) x)) // cond: // result: (Sub8 (Const8 [int64(int8(c+d))]) x) @@ -4309,7 +4191,7 @@ func rewriteValuegeneric_OpAdd8_30(v *Value) bool { if v_1.Op != OpSub8 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst8 { break @@ -4318,7 +4200,6 @@ func rewriteValuegeneric_OpAdd8_30(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpSub8) v0 := b.NewValue0(v.Pos, OpConst8, t) v0.AuxInt = int64(int8(c + d)) @@ -4335,14 +4216,13 @@ func rewriteValuegeneric_OpAdd8_30(v *Value) bool { if v_0.Op != OpSub8 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst8 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst8 { break @@ -4614,9 +4494,8 @@ func rewriteValuegeneric_OpAnd16_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -4628,7 +4507,7 @@ func rewriteValuegeneric_OpAnd16_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst16 { break @@ -4636,7 +4515,6 @@ func rewriteValuegeneric_OpAnd16_0(v *Value) bool { if v_0.AuxInt != -1 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -4680,7 +4558,6 @@ func rewriteValuegeneric_OpAnd16_0(v *Value) bool { } func rewriteValuegeneric_OpAnd16_10(v *Value) bool { b := v.Block - _ = b // match: (And16 _ (Const16 [0])) // cond: // result: (Const16 [0]) @@ -4707,11 +4584,10 @@ func rewriteValuegeneric_OpAnd16_10(v *Value) bool { if v_1.Op != OpAnd16 { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpAnd16) v.AddArg(x) v.AddArg(y) @@ -4741,15 +4617,13 @@ func rewriteValuegeneric_OpAnd16_10(v *Value) bool { // cond: // result: (And16 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAnd16 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpAnd16) @@ -4761,15 +4635,14 @@ func rewriteValuegeneric_OpAnd16_10(v *Value) bool { // cond: // result: (And16 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAnd16 { break } _ = v_0.Args[1] y := v_0.Args[0] - x := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[1] { break } v.reset(OpAnd16) @@ -4781,19 +4654,17 @@ func rewriteValuegeneric_OpAnd16_10(v *Value) bool { // cond: (z.Op != OpConst16 && x.Op != OpConst16) // result: (And16 i (And16 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAnd16 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst16 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst16 && x.Op != OpConst16) { break } @@ -4809,7 +4680,7 @@ func rewriteValuegeneric_OpAnd16_10(v *Value) bool { // cond: (z.Op != OpConst16 && x.Op != OpConst16) // result: (And16 i (And16 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAnd16 { break @@ -4821,7 +4692,6 @@ func rewriteValuegeneric_OpAnd16_10(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst16 && x.Op != OpConst16) { break } @@ -4843,13 +4713,12 @@ func rewriteValuegeneric_OpAnd16_10(v *Value) bool { if v_1.Op != OpAnd16 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst16 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst16 && x.Op != OpConst16) { break } @@ -4904,7 +4773,7 @@ func rewriteValuegeneric_OpAnd16_10(v *Value) bool { if v_1.Op != OpAnd16 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst16 { break @@ -4913,7 +4782,6 @@ func rewriteValuegeneric_OpAnd16_10(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpAnd16) v0 := b.NewValue0(v.Pos, OpConst16, t) v0.AuxInt = int64(int16(c & d)) @@ -4925,7 +4793,6 @@ func rewriteValuegeneric_OpAnd16_10(v *Value) bool { } func rewriteValuegeneric_OpAnd16_20(v *Value) bool { b := v.Block - _ = b // match: (And16 (Const16 [c]) (And16 x (Const16 [d]))) // cond: // result: (And16 (Const16 [int64(int16(c&d))]) x) @@ -4967,14 +4834,13 @@ func rewriteValuegeneric_OpAnd16_20(v *Value) bool { if v_0.Op != OpAnd16 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst16 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst16 { break @@ -5175,9 +5041,8 @@ func rewriteValuegeneric_OpAnd32_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -5189,7 +5054,7 @@ func rewriteValuegeneric_OpAnd32_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst32 { break @@ -5197,7 +5062,6 @@ func rewriteValuegeneric_OpAnd32_0(v *Value) bool { if v_0.AuxInt != -1 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -5241,7 +5105,6 @@ func rewriteValuegeneric_OpAnd32_0(v *Value) bool { } func rewriteValuegeneric_OpAnd32_10(v *Value) bool { b := v.Block - _ = b // match: (And32 _ (Const32 [0])) // cond: // result: (Const32 [0]) @@ -5268,11 +5131,10 @@ func rewriteValuegeneric_OpAnd32_10(v *Value) bool { if v_1.Op != OpAnd32 { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpAnd32) v.AddArg(x) v.AddArg(y) @@ -5302,15 +5164,13 @@ func rewriteValuegeneric_OpAnd32_10(v *Value) bool { // cond: // result: (And32 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAnd32 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpAnd32) @@ -5322,15 +5182,14 @@ func rewriteValuegeneric_OpAnd32_10(v *Value) bool { // cond: // result: (And32 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAnd32 { break } _ = v_0.Args[1] y := v_0.Args[0] - x := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[1] { break } v.reset(OpAnd32) @@ -5342,19 +5201,17 @@ func rewriteValuegeneric_OpAnd32_10(v *Value) bool { // cond: (z.Op != OpConst32 && x.Op != OpConst32) // result: (And32 i (And32 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAnd32 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst32 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst32 && x.Op != OpConst32) { break } @@ -5370,7 +5227,7 @@ func rewriteValuegeneric_OpAnd32_10(v *Value) bool { // cond: (z.Op != OpConst32 && x.Op != OpConst32) // result: (And32 i (And32 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAnd32 { break @@ -5382,7 +5239,6 @@ func rewriteValuegeneric_OpAnd32_10(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst32 && x.Op != OpConst32) { break } @@ -5404,13 +5260,12 @@ func rewriteValuegeneric_OpAnd32_10(v *Value) bool { if v_1.Op != OpAnd32 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst32 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst32 && x.Op != OpConst32) { break } @@ -5465,7 +5320,7 @@ func rewriteValuegeneric_OpAnd32_10(v *Value) bool { if v_1.Op != OpAnd32 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break @@ -5474,7 +5329,6 @@ func rewriteValuegeneric_OpAnd32_10(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpAnd32) v0 := b.NewValue0(v.Pos, OpConst32, t) v0.AuxInt = int64(int32(c & d)) @@ -5486,7 +5340,6 @@ func rewriteValuegeneric_OpAnd32_10(v *Value) bool { } func rewriteValuegeneric_OpAnd32_20(v *Value) bool { b := v.Block - _ = b // match: (And32 (Const32 [c]) (And32 x (Const32 [d]))) // cond: // result: (And32 (Const32 [int64(int32(c&d))]) x) @@ -5528,14 +5381,13 @@ func rewriteValuegeneric_OpAnd32_20(v *Value) bool { if v_0.Op != OpAnd32 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst32 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst32 { break @@ -5736,9 +5588,8 @@ func rewriteValuegeneric_OpAnd64_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -5750,7 +5601,7 @@ func rewriteValuegeneric_OpAnd64_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst64 { break @@ -5758,7 +5609,6 @@ func rewriteValuegeneric_OpAnd64_0(v *Value) bool { if v_0.AuxInt != -1 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -5802,7 +5652,6 @@ func rewriteValuegeneric_OpAnd64_0(v *Value) bool { } func rewriteValuegeneric_OpAnd64_10(v *Value) bool { b := v.Block - _ = b // match: (And64 _ (Const64 [0])) // cond: // result: (Const64 [0]) @@ -5829,11 +5678,10 @@ func rewriteValuegeneric_OpAnd64_10(v *Value) bool { if v_1.Op != OpAnd64 { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpAnd64) v.AddArg(x) v.AddArg(y) @@ -5863,15 +5711,13 @@ func rewriteValuegeneric_OpAnd64_10(v *Value) bool { // cond: // result: (And64 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAnd64 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpAnd64) @@ -5883,15 +5729,14 @@ func rewriteValuegeneric_OpAnd64_10(v *Value) bool { // cond: // result: (And64 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAnd64 { break } _ = v_0.Args[1] y := v_0.Args[0] - x := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[1] { break } v.reset(OpAnd64) @@ -5904,13 +5749,12 @@ func rewriteValuegeneric_OpAnd64_10(v *Value) bool { // result: (Rsh64Ux64 (Lsh64x64 x (Const64 [nlz(y)])) (Const64 [nlz(y)])) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst64 { break } y := v_0.AuxInt - x := v.Args[1] if !(nlz(y)+nto(y) == 64 && nto(y) >= 32) { break } @@ -5958,13 +5802,12 @@ func rewriteValuegeneric_OpAnd64_10(v *Value) bool { // result: (Lsh64x64 (Rsh64Ux64 x (Const64 [ntz(y)])) (Const64 [ntz(y)])) for { t := v.Type - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst64 { break } y := v_0.AuxInt - x := v.Args[1] if !(nlo(y)+ntz(y) == 64 && ntz(y) >= 32) { break } @@ -6011,19 +5854,17 @@ func rewriteValuegeneric_OpAnd64_10(v *Value) bool { // cond: (z.Op != OpConst64 && x.Op != OpConst64) // result: (And64 i (And64 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAnd64 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst64 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst64 && x.Op != OpConst64) { break } @@ -6039,12 +5880,11 @@ func rewriteValuegeneric_OpAnd64_10(v *Value) bool { } func rewriteValuegeneric_OpAnd64_20(v *Value) bool { b := v.Block - _ = b // match: (And64 (And64 z i:(Const64 )) x) // cond: (z.Op != OpConst64 && x.Op != OpConst64) // result: (And64 i (And64 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAnd64 { break @@ -6056,7 +5896,6 @@ func rewriteValuegeneric_OpAnd64_20(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst64 && x.Op != OpConst64) { break } @@ -6078,13 +5917,12 @@ func rewriteValuegeneric_OpAnd64_20(v *Value) bool { if v_1.Op != OpAnd64 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst64 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst64 && x.Op != OpConst64) { break } @@ -6139,7 +5977,7 @@ func rewriteValuegeneric_OpAnd64_20(v *Value) bool { if v_1.Op != OpAnd64 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst64 { break @@ -6148,7 +5986,6 @@ func rewriteValuegeneric_OpAnd64_20(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpAnd64) v0 := b.NewValue0(v.Pos, OpConst64, t) v0.AuxInt = c & d @@ -6197,14 +6034,13 @@ func rewriteValuegeneric_OpAnd64_20(v *Value) bool { if v_0.Op != OpAnd64 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst64 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst64 { break @@ -6405,9 +6241,8 @@ func rewriteValuegeneric_OpAnd8_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -6419,7 +6254,7 @@ func rewriteValuegeneric_OpAnd8_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst8 { break @@ -6427,7 +6262,6 @@ func rewriteValuegeneric_OpAnd8_0(v *Value) bool { if v_0.AuxInt != -1 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -6471,7 +6305,6 @@ func rewriteValuegeneric_OpAnd8_0(v *Value) bool { } func rewriteValuegeneric_OpAnd8_10(v *Value) bool { b := v.Block - _ = b // match: (And8 _ (Const8 [0])) // cond: // result: (Const8 [0]) @@ -6498,11 +6331,10 @@ func rewriteValuegeneric_OpAnd8_10(v *Value) bool { if v_1.Op != OpAnd8 { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpAnd8) v.AddArg(x) v.AddArg(y) @@ -6532,15 +6364,13 @@ func rewriteValuegeneric_OpAnd8_10(v *Value) bool { // cond: // result: (And8 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAnd8 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpAnd8) @@ -6552,15 +6382,14 @@ func rewriteValuegeneric_OpAnd8_10(v *Value) bool { // cond: // result: (And8 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAnd8 { break } _ = v_0.Args[1] y := v_0.Args[0] - x := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[1] { break } v.reset(OpAnd8) @@ -6572,19 +6401,17 @@ func rewriteValuegeneric_OpAnd8_10(v *Value) bool { // cond: (z.Op != OpConst8 && x.Op != OpConst8) // result: (And8 i (And8 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAnd8 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst8 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst8 && x.Op != OpConst8) { break } @@ -6600,7 +6427,7 @@ func rewriteValuegeneric_OpAnd8_10(v *Value) bool { // cond: (z.Op != OpConst8 && x.Op != OpConst8) // result: (And8 i (And8 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAnd8 { break @@ -6612,7 +6439,6 @@ func rewriteValuegeneric_OpAnd8_10(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst8 && x.Op != OpConst8) { break } @@ -6634,13 +6460,12 @@ func rewriteValuegeneric_OpAnd8_10(v *Value) bool { if v_1.Op != OpAnd8 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst8 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst8 && x.Op != OpConst8) { break } @@ -6695,7 +6520,7 @@ func rewriteValuegeneric_OpAnd8_10(v *Value) bool { if v_1.Op != OpAnd8 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst8 { break @@ -6704,7 +6529,6 @@ func rewriteValuegeneric_OpAnd8_10(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpAnd8) v0 := b.NewValue0(v.Pos, OpConst8, t) v0.AuxInt = int64(int8(c & d)) @@ -6716,7 +6540,6 @@ func rewriteValuegeneric_OpAnd8_10(v *Value) bool { } func rewriteValuegeneric_OpAnd8_20(v *Value) bool { b := v.Block - _ = b // match: (And8 (Const8 [c]) (And8 x (Const8 [d]))) // cond: // result: (And8 (Const8 [int64(int8(c&d))]) x) @@ -6758,14 +6581,13 @@ func rewriteValuegeneric_OpAnd8_20(v *Value) bool { if v_0.Op != OpAnd8 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst8 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst8 { break @@ -6970,9 +6792,7 @@ func rewriteValuegeneric_OpCom8_0(v *Value) bool { } func rewriteValuegeneric_OpConstInterface_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (ConstInterface) // cond: // result: (IMake (ConstNil ) (ConstNil )) @@ -6987,11 +6807,8 @@ func rewriteValuegeneric_OpConstInterface_0(v *Value) bool { } func rewriteValuegeneric_OpConstSlice_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (ConstSlice) // cond: config.PtrSize == 4 // result: (SliceMake (ConstNil ) (Const32 [0]) (Const32 [0])) @@ -7032,13 +6849,9 @@ func rewriteValuegeneric_OpConstSlice_0(v *Value) bool { } func rewriteValuegeneric_OpConstString_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config fe := b.Func.fe - _ = fe typ := &b.Func.Config.Types - _ = typ // match: (ConstString {s}) // cond: config.PtrSize == 4 && s.(string) == "" // result: (StringMake (ConstNil) (Const32 [0])) @@ -7116,21 +6929,19 @@ func rewriteValuegeneric_OpConvert_0(v *Value) bool { // cond: // result: (Add64 ptr off) for { - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd64 { break } - _ = v_0.Args[1] + off := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConvert { break } _ = v_0_0.Args[1] ptr := v_0_0.Args[0] - mem := v_0_0.Args[1] - off := v_0.Args[1] - if mem != v.Args[1] { + if mem != v_0_0.Args[1] { break } v.reset(OpAdd64) @@ -7142,7 +6953,7 @@ func rewriteValuegeneric_OpConvert_0(v *Value) bool { // cond: // result: (Add64 ptr off) for { - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd64 { break @@ -7155,8 +6966,7 @@ func rewriteValuegeneric_OpConvert_0(v *Value) bool { } _ = v_0_1.Args[1] ptr := v_0_1.Args[0] - mem := v_0_1.Args[1] - if mem != v.Args[1] { + if mem != v_0_1.Args[1] { break } v.reset(OpAdd64) @@ -7168,21 +6978,19 @@ func rewriteValuegeneric_OpConvert_0(v *Value) bool { // cond: // result: (Add32 ptr off) for { - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd32 { break } - _ = v_0.Args[1] + off := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConvert { break } _ = v_0_0.Args[1] ptr := v_0_0.Args[0] - mem := v_0_0.Args[1] - off := v_0.Args[1] - if mem != v.Args[1] { + if mem != v_0_0.Args[1] { break } v.reset(OpAdd32) @@ -7194,7 +7002,7 @@ func rewriteValuegeneric_OpConvert_0(v *Value) bool { // cond: // result: (Add32 ptr off) for { - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd32 { break @@ -7207,8 +7015,7 @@ func rewriteValuegeneric_OpConvert_0(v *Value) bool { } _ = v_0_1.Args[1] ptr := v_0_1.Args[0] - mem := v_0_1.Args[1] - if mem != v.Args[1] { + if mem != v_0_1.Args[1] { break } v.reset(OpAdd32) @@ -7220,15 +7027,14 @@ func rewriteValuegeneric_OpConvert_0(v *Value) bool { // cond: // result: ptr for { - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConvert { break } _ = v_0.Args[1] ptr := v_0.Args[0] - mem := v_0.Args[1] - if mem != v.Args[1] { + if mem != v_0.Args[1] { break } v.reset(OpCopy) @@ -7400,9 +7206,7 @@ func rewriteValuegeneric_OpCvt64to64F_0(v *Value) bool { } func rewriteValuegeneric_OpDiv16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div16 (Const16 [c]) (Const16 [d])) // cond: d != 0 // result: (Const16 [int64(int16(c)/int16(d))]) @@ -7575,11 +7379,8 @@ func rewriteValuegeneric_OpDiv16_0(v *Value) bool { } func rewriteValuegeneric_OpDiv16u_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Div16u (Const16 [c]) (Const16 [d])) // cond: d != 0 // result: (Const16 [int64(int16(uint16(c)/uint16(d)))]) @@ -7762,11 +7563,8 @@ func rewriteValuegeneric_OpDiv16u_0(v *Value) bool { } func rewriteValuegeneric_OpDiv32_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Div32 (Const32 [c]) (Const32 [d])) // cond: d != 0 // result: (Const32 [int64(int32(c)/int32(d))]) @@ -8014,7 +7812,6 @@ func rewriteValuegeneric_OpDiv32_0(v *Value) bool { } func rewriteValuegeneric_OpDiv32F_0(v *Value) bool { b := v.Block - _ = b // match: (Div32F (Const32F [c]) (Const32F [d])) // cond: // result: (Const32F [auxFrom32F(auxTo32F(c) / auxTo32F(d))]) @@ -8060,11 +7857,8 @@ func rewriteValuegeneric_OpDiv32F_0(v *Value) bool { } func rewriteValuegeneric_OpDiv32u_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Div32u (Const32 [c]) (Const32 [d])) // cond: d != 0 // result: (Const32 [int64(int32(uint32(c)/uint32(d)))]) @@ -8306,11 +8100,8 @@ func rewriteValuegeneric_OpDiv32u_0(v *Value) bool { } func rewriteValuegeneric_OpDiv64_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Div64 (Const64 [c]) (Const64 [d])) // cond: d != 0 // result: (Const64 [c/d]) @@ -8538,7 +8329,6 @@ func rewriteValuegeneric_OpDiv64_0(v *Value) bool { } func rewriteValuegeneric_OpDiv64F_0(v *Value) bool { b := v.Block - _ = b // match: (Div64F (Const64F [c]) (Const64F [d])) // cond: // result: (Const64F [auxFrom64F(auxTo64F(c) / auxTo64F(d))]) @@ -8584,11 +8374,8 @@ func rewriteValuegeneric_OpDiv64F_0(v *Value) bool { } func rewriteValuegeneric_OpDiv64u_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (Div64u (Const64 [c]) (Const64 [d])) // cond: d != 0 // result: (Const64 [int64(uint64(c)/uint64(d))]) @@ -8745,9 +8532,7 @@ func rewriteValuegeneric_OpDiv64u_0(v *Value) bool { } func rewriteValuegeneric_OpDiv8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div8 (Const8 [c]) (Const8 [d])) // cond: d != 0 // result: (Const8 [int64(int8(c)/int8(d))]) @@ -8920,9 +8705,7 @@ func rewriteValuegeneric_OpDiv8_0(v *Value) bool { } func rewriteValuegeneric_OpDiv8u_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Div8u (Const8 [c]) (Const8 [d])) // cond: d != 0 // result: (Const8 [int64(int8(uint8(c)/uint8(d)))]) @@ -9000,14 +8783,14 @@ func rewriteValuegeneric_OpDiv8u_0(v *Value) bool { } func rewriteValuegeneric_OpEq16_0(v *Value) bool { b := v.Block - _ = b + config := b.Func.Config + typ := &b.Func.Config.Types // match: (Eq16 x x) // cond: // result: (ConstBool [1]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpConstBool) @@ -9029,7 +8812,7 @@ func rewriteValuegeneric_OpEq16_0(v *Value) bool { if v_1.Op != OpAdd16 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst16 { break @@ -9038,7 +8821,6 @@ func rewriteValuegeneric_OpEq16_0(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpEq16) v0 := b.NewValue0(v.Pos, OpConst16, t) v0.AuxInt = int64(int16(c - d)) @@ -9087,14 +8869,13 @@ func rewriteValuegeneric_OpEq16_0(v *Value) bool { if v_0.Op != OpAdd16 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst16 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst16 { break @@ -9180,6 +8961,3718 @@ func rewriteValuegeneric_OpEq16_0(v *Value) bool { v.AuxInt = b2i(c == d) return true } + // match: (Eq16 (Mod16u x (Const16 [c])) (Const16 [0])) + // cond: x.Op != OpConst16 && udivisibleOK(16,c) && !hasSmallRotate(config) + // result: (Eq32 (Mod32u (ZeroExt16to32 x) (Const32 [c&0xffff])) (Const32 [0])) + for { + _ = v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMod16u { + break + } + _ = v_0.Args[1] + x := v_0.Args[0] + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst16 { + break + } + c := v_0_1.AuxInt + v_1 := v.Args[1] + if v_1.Op != OpConst16 { + break + } + if v_1.AuxInt != 0 { + break + } + if !(x.Op != OpConst16 && udivisibleOK(16, c) && !hasSmallRotate(config)) { + break + } + v.reset(OpEq32) + v0 := b.NewValue0(v.Pos, OpMod32u, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) + v1.AddArg(x) + v0.AddArg(v1) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = c & 0xffff + v0.AddArg(v2) + v.AddArg(v0) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = 0 + v.AddArg(v3) + return true + } + // match: (Eq16 (Const16 [0]) (Mod16u x (Const16 [c]))) + // cond: x.Op != OpConst16 && udivisibleOK(16,c) && !hasSmallRotate(config) + // result: (Eq32 (Mod32u (ZeroExt16to32 x) (Const32 [c&0xffff])) (Const32 [0])) + for { + _ = v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpConst16 { + break + } + if v_0.AuxInt != 0 { + break + } + v_1 := v.Args[1] + if v_1.Op != OpMod16u { + break + } + _ = v_1.Args[1] + x := v_1.Args[0] + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst16 { + break + } + c := v_1_1.AuxInt + if !(x.Op != OpConst16 && udivisibleOK(16, c) && !hasSmallRotate(config)) { + break + } + v.reset(OpEq32) + v0 := b.NewValue0(v.Pos, OpMod32u, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) + v1.AddArg(x) + v0.AddArg(v1) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = c & 0xffff + v0.AddArg(v2) + v.AddArg(v0) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = 0 + v.AddArg(v3) + return true + } + // match: (Eq16 (Mod16 x (Const16 [c])) (Const16 [0])) + // cond: x.Op != OpConst16 && sdivisibleOK(16,c) && !hasSmallRotate(config) + // result: (Eq32 (Mod32 (SignExt16to32 x) (Const32 [c])) (Const32 [0])) + for { + _ = v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMod16 { + break + } + _ = v_0.Args[1] + x := v_0.Args[0] + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst16 { + break + } + c := v_0_1.AuxInt + v_1 := v.Args[1] + if v_1.Op != OpConst16 { + break + } + if v_1.AuxInt != 0 { + break + } + if !(x.Op != OpConst16 && sdivisibleOK(16, c) && !hasSmallRotate(config)) { + break + } + v.reset(OpEq32) + v0 := b.NewValue0(v.Pos, OpMod32, typ.Int32) + v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) + v1.AddArg(x) + v0.AddArg(v1) + v2 := b.NewValue0(v.Pos, OpConst32, typ.Int32) + v2.AuxInt = c + v0.AddArg(v2) + v.AddArg(v0) + v3 := b.NewValue0(v.Pos, OpConst32, typ.Int32) + v3.AuxInt = 0 + v.AddArg(v3) + return true + } + return false +} +func rewriteValuegeneric_OpEq16_10(v *Value) bool { + b := v.Block + config := b.Func.Config + typ := &b.Func.Config.Types + // match: (Eq16 (Const16 [0]) (Mod16 x (Const16 [c]))) + // cond: x.Op != OpConst16 && sdivisibleOK(16,c) && !hasSmallRotate(config) + // result: (Eq32 (Mod32 (SignExt16to32 x) (Const32 [c])) (Const32 [0])) + for { + _ = v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpConst16 { + break + } + if v_0.AuxInt != 0 { + break + } + v_1 := v.Args[1] + if v_1.Op != OpMod16 { + break + } + _ = v_1.Args[1] + x := v_1.Args[0] + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst16 { + break + } + c := v_1_1.AuxInt + if !(x.Op != OpConst16 && sdivisibleOK(16, c) && !hasSmallRotate(config)) { + break + } + v.reset(OpEq32) + v0 := b.NewValue0(v.Pos, OpMod32, typ.Int32) + v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) + v1.AddArg(x) + v0.AddArg(v1) + v2 := b.NewValue0(v.Pos, OpConst32, typ.Int32) + v2.AuxInt = c + v0.AddArg(v2) + v.AddArg(v0) + v3 := b.NewValue0(v.Pos, OpConst32, typ.Int32) + v3.AuxInt = 0 + v.AddArg(v3) + return true + } + // match: (Eq16 x (Mul16 (Const16 [c]) (Trunc64to16 (Rsh64Ux64 mul:(Mul64 (Const64 [m]) (ZeroExt16to64 x)) (Const64 [s]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16,c).m) && s == 16+umagic(16,c).s && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul16 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst16 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpTrunc64to16 { + break + } + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt16to64 { + break + } + if x != mul_1.Args[0] { + break + } + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16, c).m) && s == 16+umagic(16, c).s && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 x (Mul16 (Const16 [c]) (Trunc64to16 (Rsh64Ux64 mul:(Mul64 (ZeroExt16to64 x) (Const64 [m])) (Const64 [s]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16,c).m) && s == 16+umagic(16,c).s && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul16 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst16 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpTrunc64to16 { + break + } + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt16to64 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16, c).m) && s == 16+umagic(16, c).s && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 x (Mul16 (Trunc64to16 (Rsh64Ux64 mul:(Mul64 (Const64 [m]) (ZeroExt16to64 x)) (Const64 [s]))) (Const16 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16,c).m) && s == 16+umagic(16,c).s && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul16 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpTrunc64to16 { + break + } + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt16to64 { + break + } + if x != mul_1.Args[0] { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst16 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16, c).m) && s == 16+umagic(16, c).s && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 x (Mul16 (Trunc64to16 (Rsh64Ux64 mul:(Mul64 (ZeroExt16to64 x) (Const64 [m])) (Const64 [s]))) (Const16 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16,c).m) && s == 16+umagic(16,c).s && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul16 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpTrunc64to16 { + break + } + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt16to64 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst16 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16, c).m) && s == 16+umagic(16, c).s && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 (Mul16 (Const16 [c]) (Trunc64to16 (Rsh64Ux64 mul:(Mul64 (Const64 [m]) (ZeroExt16to64 x)) (Const64 [s])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16,c).m) && s == 16+umagic(16,c).s && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul16 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst16 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpTrunc64to16 { + break + } + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt16to64 { + break + } + if x != mul_1.Args[0] { + break + } + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16, c).m) && s == 16+umagic(16, c).s && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 (Mul16 (Const16 [c]) (Trunc64to16 (Rsh64Ux64 mul:(Mul64 (ZeroExt16to64 x) (Const64 [m])) (Const64 [s])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16,c).m) && s == 16+umagic(16,c).s && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul16 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst16 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpTrunc64to16 { + break + } + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt16to64 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16, c).m) && s == 16+umagic(16, c).s && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 (Mul16 (Trunc64to16 (Rsh64Ux64 mul:(Mul64 (Const64 [m]) (ZeroExt16to64 x)) (Const64 [s]))) (Const16 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16,c).m) && s == 16+umagic(16,c).s && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul16 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpTrunc64to16 { + break + } + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt16to64 { + break + } + if x != mul_1.Args[0] { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst16 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16, c).m) && s == 16+umagic(16, c).s && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 (Mul16 (Trunc64to16 (Rsh64Ux64 mul:(Mul64 (ZeroExt16to64 x) (Const64 [m])) (Const64 [s]))) (Const16 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16,c).m) && s == 16+umagic(16,c).s && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul16 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpTrunc64to16 { + break + } + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt16to64 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst16 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<16+umagic(16, c).m) && s == 16+umagic(16, c).s && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 x (Mul16 (Const16 [c]) (Trunc32to16 (Rsh32Ux64 mul:(Mul32 (Const32 [m]) (ZeroExt16to32 x)) (Const64 [s]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16,c).m/2) && s == 16+umagic(16,c).s-1 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul16 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst16 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpTrunc32to16 { + break + } + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt16to32 { + break + } + if x != mul_1.Args[0] { + break + } + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16, c).m/2) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + return false +} +func rewriteValuegeneric_OpEq16_20(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Eq16 x (Mul16 (Const16 [c]) (Trunc32to16 (Rsh32Ux64 mul:(Mul32 (ZeroExt16to32 x) (Const32 [m])) (Const64 [s]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16,c).m/2) && s == 16+umagic(16,c).s-1 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul16 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst16 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpTrunc32to16 { + break + } + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt16to32 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16, c).m/2) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 x (Mul16 (Trunc32to16 (Rsh32Ux64 mul:(Mul32 (Const32 [m]) (ZeroExt16to32 x)) (Const64 [s]))) (Const16 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16,c).m/2) && s == 16+umagic(16,c).s-1 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul16 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpTrunc32to16 { + break + } + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt16to32 { + break + } + if x != mul_1.Args[0] { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst16 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16, c).m/2) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 x (Mul16 (Trunc32to16 (Rsh32Ux64 mul:(Mul32 (ZeroExt16to32 x) (Const32 [m])) (Const64 [s]))) (Const16 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16,c).m/2) && s == 16+umagic(16,c).s-1 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul16 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpTrunc32to16 { + break + } + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt16to32 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst16 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16, c).m/2) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 (Mul16 (Const16 [c]) (Trunc32to16 (Rsh32Ux64 mul:(Mul32 (Const32 [m]) (ZeroExt16to32 x)) (Const64 [s])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16,c).m/2) && s == 16+umagic(16,c).s-1 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul16 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst16 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpTrunc32to16 { + break + } + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt16to32 { + break + } + if x != mul_1.Args[0] { + break + } + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16, c).m/2) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 (Mul16 (Const16 [c]) (Trunc32to16 (Rsh32Ux64 mul:(Mul32 (ZeroExt16to32 x) (Const32 [m])) (Const64 [s])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16,c).m/2) && s == 16+umagic(16,c).s-1 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul16 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst16 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpTrunc32to16 { + break + } + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt16to32 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16, c).m/2) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 (Mul16 (Trunc32to16 (Rsh32Ux64 mul:(Mul32 (Const32 [m]) (ZeroExt16to32 x)) (Const64 [s]))) (Const16 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16,c).m/2) && s == 16+umagic(16,c).s-1 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul16 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpTrunc32to16 { + break + } + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt16to32 { + break + } + if x != mul_1.Args[0] { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst16 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16, c).m/2) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 (Mul16 (Trunc32to16 (Rsh32Ux64 mul:(Mul32 (ZeroExt16to32 x) (Const32 [m])) (Const64 [s]))) (Const16 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16,c).m/2) && s == 16+umagic(16,c).s-1 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul16 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpTrunc32to16 { + break + } + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt16to32 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst16 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+umagic(16, c).m/2) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 x (Mul16 (Const16 [c]) (Trunc32to16 (Rsh32Ux64 mul:(Mul32 (Const32 [m]) (Rsh32Ux64 (ZeroExt16to32 x) (Const64 [1]))) (Const64 [s]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16,c).m+1)/2) && s == 16+umagic(16,c).s-2 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul16 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst16 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpTrunc32to16 { + break + } + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpRsh32Ux64 { + break + } + _ = mul_1.Args[1] + mul_1_0 := mul_1.Args[0] + if mul_1_0.Op != OpZeroExt16to32 { + break + } + if x != mul_1_0.Args[0] { + break + } + mul_1_1 := mul_1.Args[1] + if mul_1_1.Op != OpConst64 { + break + } + if mul_1_1.AuxInt != 1 { + break + } + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16, c).m+1)/2) && s == 16+umagic(16, c).s-2 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 x (Mul16 (Const16 [c]) (Trunc32to16 (Rsh32Ux64 mul:(Mul32 (Rsh32Ux64 (ZeroExt16to32 x) (Const64 [1])) (Const32 [m])) (Const64 [s]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16,c).m+1)/2) && s == 16+umagic(16,c).s-2 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul16 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst16 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpTrunc32to16 { + break + } + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpRsh32Ux64 { + break + } + _ = mul_0.Args[1] + mul_0_0 := mul_0.Args[0] + if mul_0_0.Op != OpZeroExt16to32 { + break + } + if x != mul_0_0.Args[0] { + break + } + mul_0_1 := mul_0.Args[1] + if mul_0_1.Op != OpConst64 { + break + } + if mul_0_1.AuxInt != 1 { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16, c).m+1)/2) && s == 16+umagic(16, c).s-2 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 x (Mul16 (Trunc32to16 (Rsh32Ux64 mul:(Mul32 (Const32 [m]) (Rsh32Ux64 (ZeroExt16to32 x) (Const64 [1]))) (Const64 [s]))) (Const16 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16,c).m+1)/2) && s == 16+umagic(16,c).s-2 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul16 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpTrunc32to16 { + break + } + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpRsh32Ux64 { + break + } + _ = mul_1.Args[1] + mul_1_0 := mul_1.Args[0] + if mul_1_0.Op != OpZeroExt16to32 { + break + } + if x != mul_1_0.Args[0] { + break + } + mul_1_1 := mul_1.Args[1] + if mul_1_1.Op != OpConst64 { + break + } + if mul_1_1.AuxInt != 1 { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst16 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16, c).m+1)/2) && s == 16+umagic(16, c).s-2 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + return false +} +func rewriteValuegeneric_OpEq16_30(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Eq16 x (Mul16 (Trunc32to16 (Rsh32Ux64 mul:(Mul32 (Rsh32Ux64 (ZeroExt16to32 x) (Const64 [1])) (Const32 [m])) (Const64 [s]))) (Const16 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16,c).m+1)/2) && s == 16+umagic(16,c).s-2 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul16 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpTrunc32to16 { + break + } + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpRsh32Ux64 { + break + } + _ = mul_0.Args[1] + mul_0_0 := mul_0.Args[0] + if mul_0_0.Op != OpZeroExt16to32 { + break + } + if x != mul_0_0.Args[0] { + break + } + mul_0_1 := mul_0.Args[1] + if mul_0_1.Op != OpConst64 { + break + } + if mul_0_1.AuxInt != 1 { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst16 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16, c).m+1)/2) && s == 16+umagic(16, c).s-2 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 (Mul16 (Const16 [c]) (Trunc32to16 (Rsh32Ux64 mul:(Mul32 (Const32 [m]) (Rsh32Ux64 (ZeroExt16to32 x) (Const64 [1]))) (Const64 [s])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16,c).m+1)/2) && s == 16+umagic(16,c).s-2 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul16 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst16 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpTrunc32to16 { + break + } + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpRsh32Ux64 { + break + } + _ = mul_1.Args[1] + mul_1_0 := mul_1.Args[0] + if mul_1_0.Op != OpZeroExt16to32 { + break + } + if x != mul_1_0.Args[0] { + break + } + mul_1_1 := mul_1.Args[1] + if mul_1_1.Op != OpConst64 { + break + } + if mul_1_1.AuxInt != 1 { + break + } + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16, c).m+1)/2) && s == 16+umagic(16, c).s-2 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 (Mul16 (Const16 [c]) (Trunc32to16 (Rsh32Ux64 mul:(Mul32 (Rsh32Ux64 (ZeroExt16to32 x) (Const64 [1])) (Const32 [m])) (Const64 [s])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16,c).m+1)/2) && s == 16+umagic(16,c).s-2 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul16 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst16 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpTrunc32to16 { + break + } + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpRsh32Ux64 { + break + } + _ = mul_0.Args[1] + mul_0_0 := mul_0.Args[0] + if mul_0_0.Op != OpZeroExt16to32 { + break + } + if x != mul_0_0.Args[0] { + break + } + mul_0_1 := mul_0.Args[1] + if mul_0_1.Op != OpConst64 { + break + } + if mul_0_1.AuxInt != 1 { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16, c).m+1)/2) && s == 16+umagic(16, c).s-2 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 (Mul16 (Trunc32to16 (Rsh32Ux64 mul:(Mul32 (Const32 [m]) (Rsh32Ux64 (ZeroExt16to32 x) (Const64 [1]))) (Const64 [s]))) (Const16 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16,c).m+1)/2) && s == 16+umagic(16,c).s-2 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul16 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpTrunc32to16 { + break + } + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpRsh32Ux64 { + break + } + _ = mul_1.Args[1] + mul_1_0 := mul_1.Args[0] + if mul_1_0.Op != OpZeroExt16to32 { + break + } + if x != mul_1_0.Args[0] { + break + } + mul_1_1 := mul_1.Args[1] + if mul_1_1.Op != OpConst64 { + break + } + if mul_1_1.AuxInt != 1 { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst16 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16, c).m+1)/2) && s == 16+umagic(16, c).s-2 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 (Mul16 (Trunc32to16 (Rsh32Ux64 mul:(Mul32 (Rsh32Ux64 (ZeroExt16to32 x) (Const64 [1])) (Const32 [m])) (Const64 [s]))) (Const16 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16,c).m+1)/2) && s == 16+umagic(16,c).s-2 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul16 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpTrunc32to16 { + break + } + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpRsh32Ux64 { + break + } + _ = mul_0.Args[1] + mul_0_0 := mul_0.Args[0] + if mul_0_0.Op != OpZeroExt16to32 { + break + } + if x != mul_0_0.Args[0] { + break + } + mul_0_1 := mul_0.Args[1] + if mul_0_1.Op != OpConst64 { + break + } + if mul_0_1.AuxInt != 1 { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst16 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<15+(umagic(16, c).m+1)/2) && s == 16+umagic(16, c).s-2 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 x (Mul16 (Const16 [c]) (Trunc32to16 (Rsh32Ux64 (Avg32u (Lsh32x64 (ZeroExt16to32 x) (Const64 [16])) mul:(Mul32 (Const32 [m]) (ZeroExt16to32 x))) (Const64 [s]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16,c).m) && s == 16+umagic(16,c).s-1 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul16 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst16 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpTrunc32to16 { + break + } + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_1_0.Args[1] + v_1_1_0_0 := v_1_1_0.Args[0] + if v_1_1_0_0.Op != OpAvg32u { + break + } + _ = v_1_1_0_0.Args[1] + v_1_1_0_0_0 := v_1_1_0_0.Args[0] + if v_1_1_0_0_0.Op != OpLsh32x64 { + break + } + _ = v_1_1_0_0_0.Args[1] + v_1_1_0_0_0_0 := v_1_1_0_0_0.Args[0] + if v_1_1_0_0_0_0.Op != OpZeroExt16to32 { + break + } + if x != v_1_1_0_0_0_0.Args[0] { + break + } + v_1_1_0_0_0_1 := v_1_1_0_0_0.Args[1] + if v_1_1_0_0_0_1.Op != OpConst64 { + break + } + if v_1_1_0_0_0_1.AuxInt != 16 { + break + } + mul := v_1_1_0_0.Args[1] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt16to32 { + break + } + if x != mul_1.Args[0] { + break + } + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16, c).m) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 x (Mul16 (Const16 [c]) (Trunc32to16 (Rsh32Ux64 (Avg32u (Lsh32x64 (ZeroExt16to32 x) (Const64 [16])) mul:(Mul32 (ZeroExt16to32 x) (Const32 [m]))) (Const64 [s]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16,c).m) && s == 16+umagic(16,c).s-1 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul16 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst16 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpTrunc32to16 { + break + } + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_1_0.Args[1] + v_1_1_0_0 := v_1_1_0.Args[0] + if v_1_1_0_0.Op != OpAvg32u { + break + } + _ = v_1_1_0_0.Args[1] + v_1_1_0_0_0 := v_1_1_0_0.Args[0] + if v_1_1_0_0_0.Op != OpLsh32x64 { + break + } + _ = v_1_1_0_0_0.Args[1] + v_1_1_0_0_0_0 := v_1_1_0_0_0.Args[0] + if v_1_1_0_0_0_0.Op != OpZeroExt16to32 { + break + } + if x != v_1_1_0_0_0_0.Args[0] { + break + } + v_1_1_0_0_0_1 := v_1_1_0_0_0.Args[1] + if v_1_1_0_0_0_1.Op != OpConst64 { + break + } + if v_1_1_0_0_0_1.AuxInt != 16 { + break + } + mul := v_1_1_0_0.Args[1] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt16to32 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16, c).m) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 x (Mul16 (Trunc32to16 (Rsh32Ux64 (Avg32u (Lsh32x64 (ZeroExt16to32 x) (Const64 [16])) mul:(Mul32 (Const32 [m]) (ZeroExt16to32 x))) (Const64 [s]))) (Const16 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16,c).m) && s == 16+umagic(16,c).s-1 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul16 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpTrunc32to16 { + break + } + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_0_0.Args[1] + v_1_0_0_0 := v_1_0_0.Args[0] + if v_1_0_0_0.Op != OpAvg32u { + break + } + _ = v_1_0_0_0.Args[1] + v_1_0_0_0_0 := v_1_0_0_0.Args[0] + if v_1_0_0_0_0.Op != OpLsh32x64 { + break + } + _ = v_1_0_0_0_0.Args[1] + v_1_0_0_0_0_0 := v_1_0_0_0_0.Args[0] + if v_1_0_0_0_0_0.Op != OpZeroExt16to32 { + break + } + if x != v_1_0_0_0_0_0.Args[0] { + break + } + v_1_0_0_0_0_1 := v_1_0_0_0_0.Args[1] + if v_1_0_0_0_0_1.Op != OpConst64 { + break + } + if v_1_0_0_0_0_1.AuxInt != 16 { + break + } + mul := v_1_0_0_0.Args[1] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt16to32 { + break + } + if x != mul_1.Args[0] { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst16 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16, c).m) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 x (Mul16 (Trunc32to16 (Rsh32Ux64 (Avg32u (Lsh32x64 (ZeroExt16to32 x) (Const64 [16])) mul:(Mul32 (ZeroExt16to32 x) (Const32 [m]))) (Const64 [s]))) (Const16 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16,c).m) && s == 16+umagic(16,c).s-1 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul16 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpTrunc32to16 { + break + } + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_0_0.Args[1] + v_1_0_0_0 := v_1_0_0.Args[0] + if v_1_0_0_0.Op != OpAvg32u { + break + } + _ = v_1_0_0_0.Args[1] + v_1_0_0_0_0 := v_1_0_0_0.Args[0] + if v_1_0_0_0_0.Op != OpLsh32x64 { + break + } + _ = v_1_0_0_0_0.Args[1] + v_1_0_0_0_0_0 := v_1_0_0_0_0.Args[0] + if v_1_0_0_0_0_0.Op != OpZeroExt16to32 { + break + } + if x != v_1_0_0_0_0_0.Args[0] { + break + } + v_1_0_0_0_0_1 := v_1_0_0_0_0.Args[1] + if v_1_0_0_0_0_1.Op != OpConst64 { + break + } + if v_1_0_0_0_0_1.AuxInt != 16 { + break + } + mul := v_1_0_0_0.Args[1] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt16to32 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst16 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16, c).m) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 (Mul16 (Const16 [c]) (Trunc32to16 (Rsh32Ux64 (Avg32u (Lsh32x64 (ZeroExt16to32 x) (Const64 [16])) mul:(Mul32 (Const32 [m]) (ZeroExt16to32 x))) (Const64 [s])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16,c).m) && s == 16+umagic(16,c).s-1 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul16 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst16 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpTrunc32to16 { + break + } + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_1_0.Args[1] + v_0_1_0_0 := v_0_1_0.Args[0] + if v_0_1_0_0.Op != OpAvg32u { + break + } + _ = v_0_1_0_0.Args[1] + v_0_1_0_0_0 := v_0_1_0_0.Args[0] + if v_0_1_0_0_0.Op != OpLsh32x64 { + break + } + _ = v_0_1_0_0_0.Args[1] + v_0_1_0_0_0_0 := v_0_1_0_0_0.Args[0] + if v_0_1_0_0_0_0.Op != OpZeroExt16to32 { + break + } + if x != v_0_1_0_0_0_0.Args[0] { + break + } + v_0_1_0_0_0_1 := v_0_1_0_0_0.Args[1] + if v_0_1_0_0_0_1.Op != OpConst64 { + break + } + if v_0_1_0_0_0_1.AuxInt != 16 { + break + } + mul := v_0_1_0_0.Args[1] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt16to32 { + break + } + if x != mul_1.Args[0] { + break + } + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16, c).m) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + return false +} +func rewriteValuegeneric_OpEq16_40(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Eq16 (Mul16 (Const16 [c]) (Trunc32to16 (Rsh32Ux64 (Avg32u (Lsh32x64 (ZeroExt16to32 x) (Const64 [16])) mul:(Mul32 (ZeroExt16to32 x) (Const32 [m]))) (Const64 [s])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16,c).m) && s == 16+umagic(16,c).s-1 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul16 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst16 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpTrunc32to16 { + break + } + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_1_0.Args[1] + v_0_1_0_0 := v_0_1_0.Args[0] + if v_0_1_0_0.Op != OpAvg32u { + break + } + _ = v_0_1_0_0.Args[1] + v_0_1_0_0_0 := v_0_1_0_0.Args[0] + if v_0_1_0_0_0.Op != OpLsh32x64 { + break + } + _ = v_0_1_0_0_0.Args[1] + v_0_1_0_0_0_0 := v_0_1_0_0_0.Args[0] + if v_0_1_0_0_0_0.Op != OpZeroExt16to32 { + break + } + if x != v_0_1_0_0_0_0.Args[0] { + break + } + v_0_1_0_0_0_1 := v_0_1_0_0_0.Args[1] + if v_0_1_0_0_0_1.Op != OpConst64 { + break + } + if v_0_1_0_0_0_1.AuxInt != 16 { + break + } + mul := v_0_1_0_0.Args[1] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt16to32 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16, c).m) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 (Mul16 (Trunc32to16 (Rsh32Ux64 (Avg32u (Lsh32x64 (ZeroExt16to32 x) (Const64 [16])) mul:(Mul32 (Const32 [m]) (ZeroExt16to32 x))) (Const64 [s]))) (Const16 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16,c).m) && s == 16+umagic(16,c).s-1 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul16 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpTrunc32to16 { + break + } + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_0_0.Args[1] + v_0_0_0_0 := v_0_0_0.Args[0] + if v_0_0_0_0.Op != OpAvg32u { + break + } + _ = v_0_0_0_0.Args[1] + v_0_0_0_0_0 := v_0_0_0_0.Args[0] + if v_0_0_0_0_0.Op != OpLsh32x64 { + break + } + _ = v_0_0_0_0_0.Args[1] + v_0_0_0_0_0_0 := v_0_0_0_0_0.Args[0] + if v_0_0_0_0_0_0.Op != OpZeroExt16to32 { + break + } + if x != v_0_0_0_0_0_0.Args[0] { + break + } + v_0_0_0_0_0_1 := v_0_0_0_0_0.Args[1] + if v_0_0_0_0_0_1.Op != OpConst64 { + break + } + if v_0_0_0_0_0_1.AuxInt != 16 { + break + } + mul := v_0_0_0_0.Args[1] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt16to32 { + break + } + if x != mul_1.Args[0] { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst16 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16, c).m) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 (Mul16 (Trunc32to16 (Rsh32Ux64 (Avg32u (Lsh32x64 (ZeroExt16to32 x) (Const64 [16])) mul:(Mul32 (ZeroExt16to32 x) (Const32 [m]))) (Const64 [s]))) (Const16 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16,c).m) && s == 16+umagic(16,c).s-1 && x.Op != OpConst16 && udivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Mul16 (Const16 [int64(int16(udivisible(16,c).m))]) x) (Const16 [int64(16-udivisible(16,c).k)]) ) (Const16 [int64(int16(udivisible(16,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul16 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpTrunc32to16 { + break + } + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_0_0.Args[1] + v_0_0_0_0 := v_0_0_0.Args[0] + if v_0_0_0_0.Op != OpAvg32u { + break + } + _ = v_0_0_0_0.Args[1] + v_0_0_0_0_0 := v_0_0_0_0.Args[0] + if v_0_0_0_0_0.Op != OpLsh32x64 { + break + } + _ = v_0_0_0_0_0.Args[1] + v_0_0_0_0_0_0 := v_0_0_0_0_0.Args[0] + if v_0_0_0_0_0_0.Op != OpZeroExt16to32 { + break + } + if x != v_0_0_0_0_0_0.Args[0] { + break + } + v_0_0_0_0_0_1 := v_0_0_0_0_0.Args[1] + if v_0_0_0_0_0_1.Op != OpConst64 { + break + } + if v_0_0_0_0_0_1.AuxInt != 16 { + break + } + mul := v_0_0_0_0.Args[1] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt16to32 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst16 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(16, c).m) && s == 16+umagic(16, c).s-1 && x.Op != OpConst16 && udivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v2.AuxInt = int64(int16(udivisible(16, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(16 - udivisible(16, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(udivisible(16, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq16 x (Mul16 (Const16 [c]) (Sub16 (Rsh32x64 mul:(Mul32 (Const32 [m]) (SignExt16to32 x)) (Const64 [s])) (Rsh32x64 (SignExt16to32 x) (Const64 [31]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16,c).m) && s == 16+smagic(16,c).s && x.Op != OpConst16 && sdivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Add16 (Mul16 (Const16 [int64(int16(sdivisible(16,c).m))]) x) (Const16 [int64(int16(sdivisible(16,c).a))]) ) (Const16 [int64(16-sdivisible(16,c).k)]) ) (Const16 [int64(int16(sdivisible(16,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul16 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst16 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpSub16 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh32x64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpSignExt16to32 { + break + } + if x != mul_1.Args[0] { + break + } + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpRsh32x64 { + break + } + _ = v_1_1_1.Args[1] + v_1_1_1_0 := v_1_1_1.Args[0] + if v_1_1_1_0.Op != OpSignExt16to32 { + break + } + if x != v_1_1_1_0.Args[0] { + break + } + v_1_1_1_1 := v_1_1_1.Args[1] + if v_1_1_1_1.Op != OpConst64 { + break + } + if v_1_1_1_1.AuxInt != 31 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16, c).m) && s == 16+smagic(16, c).s && x.Op != OpConst16 && sdivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpAdd16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(int16(sdivisible(16, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(sdivisible(16, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v5.AuxInt = int64(16 - sdivisible(16, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v6.AuxInt = int64(int16(sdivisible(16, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq16 x (Mul16 (Const16 [c]) (Sub16 (Rsh32x64 mul:(Mul32 (SignExt16to32 x) (Const32 [m])) (Const64 [s])) (Rsh32x64 (SignExt16to32 x) (Const64 [31]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16,c).m) && s == 16+smagic(16,c).s && x.Op != OpConst16 && sdivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Add16 (Mul16 (Const16 [int64(int16(sdivisible(16,c).m))]) x) (Const16 [int64(int16(sdivisible(16,c).a))]) ) (Const16 [int64(16-sdivisible(16,c).k)]) ) (Const16 [int64(int16(sdivisible(16,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul16 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst16 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpSub16 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh32x64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpSignExt16to32 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpRsh32x64 { + break + } + _ = v_1_1_1.Args[1] + v_1_1_1_0 := v_1_1_1.Args[0] + if v_1_1_1_0.Op != OpSignExt16to32 { + break + } + if x != v_1_1_1_0.Args[0] { + break + } + v_1_1_1_1 := v_1_1_1.Args[1] + if v_1_1_1_1.Op != OpConst64 { + break + } + if v_1_1_1_1.AuxInt != 31 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16, c).m) && s == 16+smagic(16, c).s && x.Op != OpConst16 && sdivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpAdd16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(int16(sdivisible(16, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(sdivisible(16, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v5.AuxInt = int64(16 - sdivisible(16, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v6.AuxInt = int64(int16(sdivisible(16, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq16 x (Mul16 (Sub16 (Rsh32x64 mul:(Mul32 (Const32 [m]) (SignExt16to32 x)) (Const64 [s])) (Rsh32x64 (SignExt16to32 x) (Const64 [31]))) (Const16 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16,c).m) && s == 16+smagic(16,c).s && x.Op != OpConst16 && sdivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Add16 (Mul16 (Const16 [int64(int16(sdivisible(16,c).m))]) x) (Const16 [int64(int16(sdivisible(16,c).a))]) ) (Const16 [int64(16-sdivisible(16,c).k)]) ) (Const16 [int64(int16(sdivisible(16,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul16 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpSub16 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh32x64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpSignExt16to32 { + break + } + if x != mul_1.Args[0] { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpRsh32x64 { + break + } + _ = v_1_0_1.Args[1] + v_1_0_1_0 := v_1_0_1.Args[0] + if v_1_0_1_0.Op != OpSignExt16to32 { + break + } + if x != v_1_0_1_0.Args[0] { + break + } + v_1_0_1_1 := v_1_0_1.Args[1] + if v_1_0_1_1.Op != OpConst64 { + break + } + if v_1_0_1_1.AuxInt != 31 { + break + } + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst16 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16, c).m) && s == 16+smagic(16, c).s && x.Op != OpConst16 && sdivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpAdd16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(int16(sdivisible(16, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(sdivisible(16, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v5.AuxInt = int64(16 - sdivisible(16, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v6.AuxInt = int64(int16(sdivisible(16, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq16 x (Mul16 (Sub16 (Rsh32x64 mul:(Mul32 (SignExt16to32 x) (Const32 [m])) (Const64 [s])) (Rsh32x64 (SignExt16to32 x) (Const64 [31]))) (Const16 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16,c).m) && s == 16+smagic(16,c).s && x.Op != OpConst16 && sdivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Add16 (Mul16 (Const16 [int64(int16(sdivisible(16,c).m))]) x) (Const16 [int64(int16(sdivisible(16,c).a))]) ) (Const16 [int64(16-sdivisible(16,c).k)]) ) (Const16 [int64(int16(sdivisible(16,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul16 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpSub16 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh32x64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpSignExt16to32 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpRsh32x64 { + break + } + _ = v_1_0_1.Args[1] + v_1_0_1_0 := v_1_0_1.Args[0] + if v_1_0_1_0.Op != OpSignExt16to32 { + break + } + if x != v_1_0_1_0.Args[0] { + break + } + v_1_0_1_1 := v_1_0_1.Args[1] + if v_1_0_1_1.Op != OpConst64 { + break + } + if v_1_0_1_1.AuxInt != 31 { + break + } + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst16 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16, c).m) && s == 16+smagic(16, c).s && x.Op != OpConst16 && sdivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpAdd16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(int16(sdivisible(16, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(sdivisible(16, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v5.AuxInt = int64(16 - sdivisible(16, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v6.AuxInt = int64(int16(sdivisible(16, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq16 (Mul16 (Const16 [c]) (Sub16 (Rsh32x64 mul:(Mul32 (Const32 [m]) (SignExt16to32 x)) (Const64 [s])) (Rsh32x64 (SignExt16to32 x) (Const64 [31])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16,c).m) && s == 16+smagic(16,c).s && x.Op != OpConst16 && sdivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Add16 (Mul16 (Const16 [int64(int16(sdivisible(16,c).m))]) x) (Const16 [int64(int16(sdivisible(16,c).a))]) ) (Const16 [int64(16-sdivisible(16,c).k)]) ) (Const16 [int64(int16(sdivisible(16,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul16 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst16 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpSub16 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh32x64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpSignExt16to32 { + break + } + if x != mul_1.Args[0] { + break + } + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpRsh32x64 { + break + } + _ = v_0_1_1.Args[1] + v_0_1_1_0 := v_0_1_1.Args[0] + if v_0_1_1_0.Op != OpSignExt16to32 { + break + } + if x != v_0_1_1_0.Args[0] { + break + } + v_0_1_1_1 := v_0_1_1.Args[1] + if v_0_1_1_1.Op != OpConst64 { + break + } + if v_0_1_1_1.AuxInt != 31 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16, c).m) && s == 16+smagic(16, c).s && x.Op != OpConst16 && sdivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpAdd16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(int16(sdivisible(16, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(sdivisible(16, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v5.AuxInt = int64(16 - sdivisible(16, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v6.AuxInt = int64(int16(sdivisible(16, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq16 (Mul16 (Const16 [c]) (Sub16 (Rsh32x64 mul:(Mul32 (SignExt16to32 x) (Const32 [m])) (Const64 [s])) (Rsh32x64 (SignExt16to32 x) (Const64 [31])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16,c).m) && s == 16+smagic(16,c).s && x.Op != OpConst16 && sdivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Add16 (Mul16 (Const16 [int64(int16(sdivisible(16,c).m))]) x) (Const16 [int64(int16(sdivisible(16,c).a))]) ) (Const16 [int64(16-sdivisible(16,c).k)]) ) (Const16 [int64(int16(sdivisible(16,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul16 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst16 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpSub16 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh32x64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpSignExt16to32 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpRsh32x64 { + break + } + _ = v_0_1_1.Args[1] + v_0_1_1_0 := v_0_1_1.Args[0] + if v_0_1_1_0.Op != OpSignExt16to32 { + break + } + if x != v_0_1_1_0.Args[0] { + break + } + v_0_1_1_1 := v_0_1_1.Args[1] + if v_0_1_1_1.Op != OpConst64 { + break + } + if v_0_1_1_1.AuxInt != 31 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16, c).m) && s == 16+smagic(16, c).s && x.Op != OpConst16 && sdivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpAdd16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(int16(sdivisible(16, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(sdivisible(16, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v5.AuxInt = int64(16 - sdivisible(16, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v6.AuxInt = int64(int16(sdivisible(16, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq16 (Mul16 (Sub16 (Rsh32x64 mul:(Mul32 (Const32 [m]) (SignExt16to32 x)) (Const64 [s])) (Rsh32x64 (SignExt16to32 x) (Const64 [31]))) (Const16 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16,c).m) && s == 16+smagic(16,c).s && x.Op != OpConst16 && sdivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Add16 (Mul16 (Const16 [int64(int16(sdivisible(16,c).m))]) x) (Const16 [int64(int16(sdivisible(16,c).a))]) ) (Const16 [int64(16-sdivisible(16,c).k)]) ) (Const16 [int64(int16(sdivisible(16,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul16 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpSub16 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh32x64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpSignExt16to32 { + break + } + if x != mul_1.Args[0] { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpRsh32x64 { + break + } + _ = v_0_0_1.Args[1] + v_0_0_1_0 := v_0_0_1.Args[0] + if v_0_0_1_0.Op != OpSignExt16to32 { + break + } + if x != v_0_0_1_0.Args[0] { + break + } + v_0_0_1_1 := v_0_0_1.Args[1] + if v_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_1_1.AuxInt != 31 { + break + } + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst16 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16, c).m) && s == 16+smagic(16, c).s && x.Op != OpConst16 && sdivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpAdd16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(int16(sdivisible(16, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(sdivisible(16, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v5.AuxInt = int64(16 - sdivisible(16, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v6.AuxInt = int64(int16(sdivisible(16, c).max)) + v.AddArg(v6) + return true + } + return false +} +func rewriteValuegeneric_OpEq16_50(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Eq16 (Mul16 (Sub16 (Rsh32x64 mul:(Mul32 (SignExt16to32 x) (Const32 [m])) (Const64 [s])) (Rsh32x64 (SignExt16to32 x) (Const64 [31]))) (Const16 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16,c).m) && s == 16+smagic(16,c).s && x.Op != OpConst16 && sdivisibleOK(16,c) + // result: (Leq16U (RotateLeft16 (Add16 (Mul16 (Const16 [int64(int16(sdivisible(16,c).m))]) x) (Const16 [int64(int16(sdivisible(16,c).a))]) ) (Const16 [int64(16-sdivisible(16,c).k)]) ) (Const16 [int64(int16(sdivisible(16,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul16 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpSub16 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh32x64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpSignExt16to32 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpRsh32x64 { + break + } + _ = v_0_0_1.Args[1] + v_0_0_1_0 := v_0_0_1.Args[0] + if v_0_0_1_0.Op != OpSignExt16to32 { + break + } + if x != v_0_0_1_0.Args[0] { + break + } + v_0_0_1_1 := v_0_0_1.Args[1] + if v_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_1_1.AuxInt != 31 { + break + } + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst16 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(16, c).m) && s == 16+smagic(16, c).s && x.Op != OpConst16 && sdivisibleOK(16, c)) { + break + } + v.reset(OpLeq16U) + v0 := b.NewValue0(v.Pos, OpRotateLeft16, typ.UInt16) + v1 := b.NewValue0(v.Pos, OpAdd16, typ.UInt16) + v2 := b.NewValue0(v.Pos, OpMul16, typ.UInt16) + v3 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v3.AuxInt = int64(int16(sdivisible(16, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v4.AuxInt = int64(int16(sdivisible(16, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v5.AuxInt = int64(16 - sdivisible(16, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst16, typ.UInt16) + v6.AuxInt = int64(int16(sdivisible(16, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq16 n (Lsh16x64 (Rsh16x64 (Add16 n (Rsh16Ux64 (Rsh16x64 n (Const64 [15])) (Const64 [kbar]))) (Const64 [k])) (Const64 [k]))) + // cond: k > 0 && k < 15 && kbar == 16 - k + // result: (Eq16 (And16 n (Const16 [int64(1< [0])) + for { + _ = v.Args[1] + n := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpLsh16x64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpRsh16x64 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpAdd16 { + break + } + t := v_1_0_0.Type + _ = v_1_0_0.Args[1] + if n != v_1_0_0.Args[0] { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpRsh16Ux64 { + break + } + if v_1_0_0_1.Type != t { + break + } + _ = v_1_0_0_1.Args[1] + v_1_0_0_1_0 := v_1_0_0_1.Args[0] + if v_1_0_0_1_0.Op != OpRsh16x64 { + break + } + if v_1_0_0_1_0.Type != t { + break + } + _ = v_1_0_0_1_0.Args[1] + if n != v_1_0_0_1_0.Args[0] { + break + } + v_1_0_0_1_0_1 := v_1_0_0_1_0.Args[1] + if v_1_0_0_1_0_1.Op != OpConst64 { + break + } + if v_1_0_0_1_0_1.Type != typ.UInt64 { + break + } + if v_1_0_0_1_0_1.AuxInt != 15 { + break + } + v_1_0_0_1_1 := v_1_0_0_1.Args[1] + if v_1_0_0_1_1.Op != OpConst64 { + break + } + if v_1_0_0_1_1.Type != typ.UInt64 { + break + } + kbar := v_1_0_0_1_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpConst64 { + break + } + if v_1_0_1.Type != typ.UInt64 { + break + } + k := v_1_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst64 { + break + } + if v_1_1.Type != typ.UInt64 { + break + } + if v_1_1.AuxInt != k { + break + } + if !(k > 0 && k < 15 && kbar == 16-k) { + break + } + v.reset(OpEq16) + v0 := b.NewValue0(v.Pos, OpAnd16, t) + v0.AddArg(n) + v1 := b.NewValue0(v.Pos, OpConst16, t) + v1.AuxInt = int64(1< (Rsh16Ux64 (Rsh16x64 n (Const64 [15])) (Const64 [kbar])) n) (Const64 [k])) (Const64 [k]))) + // cond: k > 0 && k < 15 && kbar == 16 - k + // result: (Eq16 (And16 n (Const16 [int64(1< [0])) + for { + _ = v.Args[1] + n := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpLsh16x64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpRsh16x64 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpAdd16 { + break + } + t := v_1_0_0.Type + _ = v_1_0_0.Args[1] + v_1_0_0_0 := v_1_0_0.Args[0] + if v_1_0_0_0.Op != OpRsh16Ux64 { + break + } + if v_1_0_0_0.Type != t { + break + } + _ = v_1_0_0_0.Args[1] + v_1_0_0_0_0 := v_1_0_0_0.Args[0] + if v_1_0_0_0_0.Op != OpRsh16x64 { + break + } + if v_1_0_0_0_0.Type != t { + break + } + _ = v_1_0_0_0_0.Args[1] + if n != v_1_0_0_0_0.Args[0] { + break + } + v_1_0_0_0_0_1 := v_1_0_0_0_0.Args[1] + if v_1_0_0_0_0_1.Op != OpConst64 { + break + } + if v_1_0_0_0_0_1.Type != typ.UInt64 { + break + } + if v_1_0_0_0_0_1.AuxInt != 15 { + break + } + v_1_0_0_0_1 := v_1_0_0_0.Args[1] + if v_1_0_0_0_1.Op != OpConst64 { + break + } + if v_1_0_0_0_1.Type != typ.UInt64 { + break + } + kbar := v_1_0_0_0_1.AuxInt + if n != v_1_0_0.Args[1] { + break + } + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpConst64 { + break + } + if v_1_0_1.Type != typ.UInt64 { + break + } + k := v_1_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst64 { + break + } + if v_1_1.Type != typ.UInt64 { + break + } + if v_1_1.AuxInt != k { + break + } + if !(k > 0 && k < 15 && kbar == 16-k) { + break + } + v.reset(OpEq16) + v0 := b.NewValue0(v.Pos, OpAnd16, t) + v0.AddArg(n) + v1 := b.NewValue0(v.Pos, OpConst16, t) + v1.AuxInt = int64(1< n (Rsh16Ux64 (Rsh16x64 n (Const64 [15])) (Const64 [kbar]))) (Const64 [k])) (Const64 [k])) n) + // cond: k > 0 && k < 15 && kbar == 16 - k + // result: (Eq16 (And16 n (Const16 [int64(1< [0])) + for { + n := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpLsh16x64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpRsh16x64 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpAdd16 { + break + } + t := v_0_0_0.Type + _ = v_0_0_0.Args[1] + if n != v_0_0_0.Args[0] { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpRsh16Ux64 { + break + } + if v_0_0_0_1.Type != t { + break + } + _ = v_0_0_0_1.Args[1] + v_0_0_0_1_0 := v_0_0_0_1.Args[0] + if v_0_0_0_1_0.Op != OpRsh16x64 { + break + } + if v_0_0_0_1_0.Type != t { + break + } + _ = v_0_0_0_1_0.Args[1] + if n != v_0_0_0_1_0.Args[0] { + break + } + v_0_0_0_1_0_1 := v_0_0_0_1_0.Args[1] + if v_0_0_0_1_0_1.Op != OpConst64 { + break + } + if v_0_0_0_1_0_1.Type != typ.UInt64 { + break + } + if v_0_0_0_1_0_1.AuxInt != 15 { + break + } + v_0_0_0_1_1 := v_0_0_0_1.Args[1] + if v_0_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_0_1_1.Type != typ.UInt64 { + break + } + kbar := v_0_0_0_1_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpConst64 { + break + } + if v_0_0_1.Type != typ.UInt64 { + break + } + k := v_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + if v_0_1.Type != typ.UInt64 { + break + } + if v_0_1.AuxInt != k { + break + } + if !(k > 0 && k < 15 && kbar == 16-k) { + break + } + v.reset(OpEq16) + v0 := b.NewValue0(v.Pos, OpAnd16, t) + v0.AddArg(n) + v1 := b.NewValue0(v.Pos, OpConst16, t) + v1.AuxInt = int64(1< (Rsh16Ux64 (Rsh16x64 n (Const64 [15])) (Const64 [kbar])) n) (Const64 [k])) (Const64 [k])) n) + // cond: k > 0 && k < 15 && kbar == 16 - k + // result: (Eq16 (And16 n (Const16 [int64(1< [0])) + for { + n := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpLsh16x64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpRsh16x64 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpAdd16 { + break + } + t := v_0_0_0.Type + _ = v_0_0_0.Args[1] + v_0_0_0_0 := v_0_0_0.Args[0] + if v_0_0_0_0.Op != OpRsh16Ux64 { + break + } + if v_0_0_0_0.Type != t { + break + } + _ = v_0_0_0_0.Args[1] + v_0_0_0_0_0 := v_0_0_0_0.Args[0] + if v_0_0_0_0_0.Op != OpRsh16x64 { + break + } + if v_0_0_0_0_0.Type != t { + break + } + _ = v_0_0_0_0_0.Args[1] + if n != v_0_0_0_0_0.Args[0] { + break + } + v_0_0_0_0_0_1 := v_0_0_0_0_0.Args[1] + if v_0_0_0_0_0_1.Op != OpConst64 { + break + } + if v_0_0_0_0_0_1.Type != typ.UInt64 { + break + } + if v_0_0_0_0_0_1.AuxInt != 15 { + break + } + v_0_0_0_0_1 := v_0_0_0_0.Args[1] + if v_0_0_0_0_1.Op != OpConst64 { + break + } + if v_0_0_0_0_1.Type != typ.UInt64 { + break + } + kbar := v_0_0_0_0_1.AuxInt + if n != v_0_0_0.Args[1] { + break + } + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpConst64 { + break + } + if v_0_0_1.Type != typ.UInt64 { + break + } + k := v_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + if v_0_1.Type != typ.UInt64 { + break + } + if v_0_1.AuxInt != k { + break + } + if !(k > 0 && k < 15 && kbar == 16-k) { + break + } + v.reset(OpEq16) + v0 := b.NewValue0(v.Pos, OpAnd16, t) + v0.AddArg(n) + v1 := b.NewValue0(v.Pos, OpConst16, t) + v1.AuxInt = int64(1< (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst32 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpRsh32Ux64 { + break + } + _ = v_1_1.Args[1] + mul := v_1_1.Args[0] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpConst64 { + break + } + s := v_1_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32, c).m/2)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 x (Mul32 (Const32 [c]) (Rsh32Ux64 mul:(Hmul32u x (Const32 [m])) (Const64 [s])))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32,c).m/2)) && s == umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst32 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpRsh32Ux64 { + break + } + _ = v_1_1.Args[1] + mul := v_1_1.Args[0] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpConst64 { + break + } + s := v_1_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32, c).m/2)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 x (Mul32 (Rsh32Ux64 mul:(Hmul32u (Const32 [m]) x) (Const64 [s])) (Const32 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32,c).m/2)) && s == umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_0.Args[1] + mul := v_1_0.Args[0] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpConst64 { + break + } + s := v_1_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst32 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32, c).m/2)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + return false +} +func rewriteValuegeneric_OpEq32_10(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Eq32 x (Mul32 (Rsh32Ux64 mul:(Hmul32u x (Const32 [m])) (Const64 [s])) (Const32 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32,c).m/2)) && s == umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_0.Args[1] + mul := v_1_0.Args[0] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpConst64 { + break + } + s := v_1_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst32 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32, c).m/2)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Const32 [c]) (Rsh32Ux64 mul:(Hmul32u (Const32 [m]) x) (Const64 [s]))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32,c).m/2)) && s == umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst32 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpRsh32Ux64 { + break + } + _ = v_0_1.Args[1] + mul := v_0_1.Args[0] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpConst64 { + break + } + s := v_0_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32, c).m/2)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Const32 [c]) (Rsh32Ux64 mul:(Hmul32u x (Const32 [m])) (Const64 [s]))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32,c).m/2)) && s == umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst32 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpRsh32Ux64 { + break + } + _ = v_0_1.Args[1] + mul := v_0_1.Args[0] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpConst64 { + break + } + s := v_0_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32, c).m/2)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Rsh32Ux64 mul:(Hmul32u (Const32 [m]) x) (Const64 [s])) (Const32 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32,c).m/2)) && s == umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_0.Args[1] + mul := v_0_0.Args[0] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst32 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32, c).m/2)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Rsh32Ux64 mul:(Hmul32u x (Const32 [m])) (Const64 [s])) (Const32 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32,c).m/2)) && s == umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_0.Args[1] + mul := v_0_0.Args[0] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst32 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+umagic(32, c).m/2)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 x (Mul32 (Const32 [c]) (Rsh32Ux64 mul:(Hmul32u (Const32 [m]) (Rsh32Ux64 x (Const64 [1]))) (Const64 [s])))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32,c).m+1)/2)) && s == umagic(32,c).s-2 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst32 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpRsh32Ux64 { + break + } + _ = v_1_1.Args[1] + mul := v_1_1.Args[0] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + if mul_0.Type != typ.UInt32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpRsh32Ux64 { + break + } + _ = mul_1.Args[1] + if x != mul_1.Args[0] { + break + } + mul_1_1 := mul_1.Args[1] + if mul_1_1.Op != OpConst64 { + break + } + if mul_1_1.AuxInt != 1 { + break + } + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpConst64 { + break + } + s := v_1_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32, c).m+1)/2)) && s == umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 x (Mul32 (Const32 [c]) (Rsh32Ux64 mul:(Hmul32u (Rsh32Ux64 x (Const64 [1])) (Const32 [m])) (Const64 [s])))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32,c).m+1)/2)) && s == umagic(32,c).s-2 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst32 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpRsh32Ux64 { + break + } + _ = v_1_1.Args[1] + mul := v_1_1.Args[0] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpRsh32Ux64 { + break + } + _ = mul_0.Args[1] + if x != mul_0.Args[0] { + break + } + mul_0_1 := mul_0.Args[1] + if mul_0_1.Op != OpConst64 { + break + } + if mul_0_1.AuxInt != 1 { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + if mul_1.Type != typ.UInt32 { + break + } + m := mul_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpConst64 { + break + } + s := v_1_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32, c).m+1)/2)) && s == umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 x (Mul32 (Rsh32Ux64 mul:(Hmul32u (Const32 [m]) (Rsh32Ux64 x (Const64 [1]))) (Const64 [s])) (Const32 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32,c).m+1)/2)) && s == umagic(32,c).s-2 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_0.Args[1] + mul := v_1_0.Args[0] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + if mul_0.Type != typ.UInt32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpRsh32Ux64 { + break + } + _ = mul_1.Args[1] + if x != mul_1.Args[0] { + break + } + mul_1_1 := mul_1.Args[1] + if mul_1_1.Op != OpConst64 { + break + } + if mul_1_1.AuxInt != 1 { + break + } + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpConst64 { + break + } + s := v_1_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst32 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32, c).m+1)/2)) && s == umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 x (Mul32 (Rsh32Ux64 mul:(Hmul32u (Rsh32Ux64 x (Const64 [1])) (Const32 [m])) (Const64 [s])) (Const32 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32,c).m+1)/2)) && s == umagic(32,c).s-2 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_0.Args[1] + mul := v_1_0.Args[0] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpRsh32Ux64 { + break + } + _ = mul_0.Args[1] + if x != mul_0.Args[0] { + break + } + mul_0_1 := mul_0.Args[1] + if mul_0_1.Op != OpConst64 { + break + } + if mul_0_1.AuxInt != 1 { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + if mul_1.Type != typ.UInt32 { + break + } + m := mul_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpConst64 { + break + } + s := v_1_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst32 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32, c).m+1)/2)) && s == umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Const32 [c]) (Rsh32Ux64 mul:(Hmul32u (Const32 [m]) (Rsh32Ux64 x (Const64 [1]))) (Const64 [s]))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32,c).m+1)/2)) && s == umagic(32,c).s-2 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst32 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpRsh32Ux64 { + break + } + _ = v_0_1.Args[1] + mul := v_0_1.Args[0] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + if mul_0.Type != typ.UInt32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpRsh32Ux64 { + break + } + _ = mul_1.Args[1] + if x != mul_1.Args[0] { + break + } + mul_1_1 := mul_1.Args[1] + if mul_1_1.Op != OpConst64 { + break + } + if mul_1_1.AuxInt != 1 { + break + } + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpConst64 { + break + } + s := v_0_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32, c).m+1)/2)) && s == umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + return false +} +func rewriteValuegeneric_OpEq32_20(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Eq32 (Mul32 (Const32 [c]) (Rsh32Ux64 mul:(Hmul32u (Rsh32Ux64 x (Const64 [1])) (Const32 [m])) (Const64 [s]))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32,c).m+1)/2)) && s == umagic(32,c).s-2 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst32 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpRsh32Ux64 { + break + } + _ = v_0_1.Args[1] + mul := v_0_1.Args[0] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpRsh32Ux64 { + break + } + _ = mul_0.Args[1] + if x != mul_0.Args[0] { + break + } + mul_0_1 := mul_0.Args[1] + if mul_0_1.Op != OpConst64 { + break + } + if mul_0_1.AuxInt != 1 { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + if mul_1.Type != typ.UInt32 { + break + } + m := mul_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpConst64 { + break + } + s := v_0_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32, c).m+1)/2)) && s == umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Rsh32Ux64 mul:(Hmul32u (Const32 [m]) (Rsh32Ux64 x (Const64 [1]))) (Const64 [s])) (Const32 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32,c).m+1)/2)) && s == umagic(32,c).s-2 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_0.Args[1] + mul := v_0_0.Args[0] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + if mul_0.Type != typ.UInt32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpRsh32Ux64 { + break + } + _ = mul_1.Args[1] + if x != mul_1.Args[0] { + break + } + mul_1_1 := mul_1.Args[1] + if mul_1_1.Op != OpConst64 { + break + } + if mul_1_1.AuxInt != 1 { + break + } + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst32 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32, c).m+1)/2)) && s == umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Rsh32Ux64 mul:(Hmul32u (Rsh32Ux64 x (Const64 [1])) (Const32 [m])) (Const64 [s])) (Const32 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32,c).m+1)/2)) && s == umagic(32,c).s-2 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_0.Args[1] + mul := v_0_0.Args[0] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpRsh32Ux64 { + break + } + _ = mul_0.Args[1] + if x != mul_0.Args[0] { + break + } + mul_0_1 := mul_0.Args[1] + if mul_0_1.Op != OpConst64 { + break + } + if mul_0_1.AuxInt != 1 { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + if mul_1.Type != typ.UInt32 { + break + } + m := mul_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst32 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(1<<31+(umagic(32, c).m+1)/2)) && s == umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 x (Mul32 (Const32 [c]) (Rsh32Ux64 (Avg32u x mul:(Hmul32u (Const32 [m]) x)) (Const64 [s])))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32,c).m)) && s == umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst32 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpRsh32Ux64 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpAvg32u { + break + } + _ = v_1_1_0.Args[1] + if x != v_1_1_0.Args[0] { + break + } + mul := v_1_1_0.Args[1] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpConst64 { + break + } + s := v_1_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32, c).m)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 x (Mul32 (Const32 [c]) (Rsh32Ux64 (Avg32u x mul:(Hmul32u x (Const32 [m]))) (Const64 [s])))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32,c).m)) && s == umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst32 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpRsh32Ux64 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpAvg32u { + break + } + _ = v_1_1_0.Args[1] + if x != v_1_1_0.Args[0] { + break + } + mul := v_1_1_0.Args[1] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpConst64 { + break + } + s := v_1_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32, c).m)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 x (Mul32 (Rsh32Ux64 (Avg32u x mul:(Hmul32u (Const32 [m]) x)) (Const64 [s])) (Const32 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32,c).m)) && s == umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpAvg32u { + break + } + _ = v_1_0_0.Args[1] + if x != v_1_0_0.Args[0] { + break + } + mul := v_1_0_0.Args[1] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpConst64 { + break + } + s := v_1_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst32 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32, c).m)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 x (Mul32 (Rsh32Ux64 (Avg32u x mul:(Hmul32u x (Const32 [m]))) (Const64 [s])) (Const32 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32,c).m)) && s == umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpAvg32u { + break + } + _ = v_1_0_0.Args[1] + if x != v_1_0_0.Args[0] { + break + } + mul := v_1_0_0.Args[1] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpConst64 { + break + } + s := v_1_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst32 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32, c).m)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Const32 [c]) (Rsh32Ux64 (Avg32u x mul:(Hmul32u (Const32 [m]) x)) (Const64 [s]))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32,c).m)) && s == umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst32 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpRsh32Ux64 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpAvg32u { + break + } + _ = v_0_1_0.Args[1] + if x != v_0_1_0.Args[0] { + break + } + mul := v_0_1_0.Args[1] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpConst64 { + break + } + s := v_0_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32, c).m)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Const32 [c]) (Rsh32Ux64 (Avg32u x mul:(Hmul32u x (Const32 [m]))) (Const64 [s]))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32,c).m)) && s == umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst32 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpRsh32Ux64 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpAvg32u { + break + } + _ = v_0_1_0.Args[1] + if x != v_0_1_0.Args[0] { + break + } + mul := v_0_1_0.Args[1] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpConst64 { + break + } + s := v_0_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32, c).m)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Rsh32Ux64 (Avg32u x mul:(Hmul32u (Const32 [m]) x)) (Const64 [s])) (Const32 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32,c).m)) && s == umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpAvg32u { + break + } + _ = v_0_0_0.Args[1] + if x != v_0_0_0.Args[0] { + break + } + mul := v_0_0_0.Args[1] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst32 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32, c).m)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + return false +} +func rewriteValuegeneric_OpEq32_30(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Eq32 (Mul32 (Rsh32Ux64 (Avg32u x mul:(Hmul32u x (Const32 [m]))) (Const64 [s])) (Const32 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32,c).m)) && s == umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpAvg32u { + break + } + _ = v_0_0_0.Args[1] + if x != v_0_0_0.Args[0] { + break + } + mul := v_0_0_0.Args[1] + if mul.Op != OpHmul32u { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst32 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(umagic(32, c).m)) && s == umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 x (Mul32 (Const32 [c]) (Trunc64to32 (Rsh64Ux64 mul:(Mul64 (Const64 [m]) (ZeroExt32to64 x)) (Const64 [s]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32,c).m/2) && s == 32+umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst32 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpTrunc64to32 { + break + } + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt32to64 { + break + } + if x != mul_1.Args[0] { + break + } + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32, c).m/2) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 x (Mul32 (Const32 [c]) (Trunc64to32 (Rsh64Ux64 mul:(Mul64 (ZeroExt32to64 x) (Const64 [m])) (Const64 [s]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32,c).m/2) && s == 32+umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst32 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpTrunc64to32 { + break + } + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt32to64 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32, c).m/2) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 x (Mul32 (Trunc64to32 (Rsh64Ux64 mul:(Mul64 (Const64 [m]) (ZeroExt32to64 x)) (Const64 [s]))) (Const32 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32,c).m/2) && s == 32+umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpTrunc64to32 { + break + } + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt32to64 { + break + } + if x != mul_1.Args[0] { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst32 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32, c).m/2) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 x (Mul32 (Trunc64to32 (Rsh64Ux64 mul:(Mul64 (ZeroExt32to64 x) (Const64 [m])) (Const64 [s]))) (Const32 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32,c).m/2) && s == 32+umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpTrunc64to32 { + break + } + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt32to64 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst32 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32, c).m/2) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Const32 [c]) (Trunc64to32 (Rsh64Ux64 mul:(Mul64 (Const64 [m]) (ZeroExt32to64 x)) (Const64 [s])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32,c).m/2) && s == 32+umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst32 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpTrunc64to32 { + break + } + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt32to64 { + break + } + if x != mul_1.Args[0] { + break + } + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32, c).m/2) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Const32 [c]) (Trunc64to32 (Rsh64Ux64 mul:(Mul64 (ZeroExt32to64 x) (Const64 [m])) (Const64 [s])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32,c).m/2) && s == 32+umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst32 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpTrunc64to32 { + break + } + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt32to64 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32, c).m/2) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Trunc64to32 (Rsh64Ux64 mul:(Mul64 (Const64 [m]) (ZeroExt32to64 x)) (Const64 [s]))) (Const32 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32,c).m/2) && s == 32+umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpTrunc64to32 { + break + } + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt32to64 { + break + } + if x != mul_1.Args[0] { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst32 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32, c).m/2) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Trunc64to32 (Rsh64Ux64 mul:(Mul64 (ZeroExt32to64 x) (Const64 [m])) (Const64 [s]))) (Const32 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32,c).m/2) && s == 32+umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpTrunc64to32 { + break + } + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt32to64 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst32 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+umagic(32, c).m/2) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 x (Mul32 (Const32 [c]) (Trunc64to32 (Rsh64Ux64 mul:(Mul64 (Const64 [m]) (Rsh64Ux64 (ZeroExt32to64 x) (Const64 [1]))) (Const64 [s]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32,c).m+1)/2) && s == 32+umagic(32,c).s-2 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst32 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpTrunc64to32 { + break + } + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpRsh64Ux64 { + break + } + _ = mul_1.Args[1] + mul_1_0 := mul_1.Args[0] + if mul_1_0.Op != OpZeroExt32to64 { + break + } + if x != mul_1_0.Args[0] { + break + } + mul_1_1 := mul_1.Args[1] + if mul_1_1.Op != OpConst64 { + break + } + if mul_1_1.AuxInt != 1 { + break + } + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32, c).m+1)/2) && s == 32+umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + return false +} +func rewriteValuegeneric_OpEq32_40(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Eq32 x (Mul32 (Const32 [c]) (Trunc64to32 (Rsh64Ux64 mul:(Mul64 (Rsh64Ux64 (ZeroExt32to64 x) (Const64 [1])) (Const64 [m])) (Const64 [s]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32,c).m+1)/2) && s == 32+umagic(32,c).s-2 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst32 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpTrunc64to32 { + break + } + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpRsh64Ux64 { + break + } + _ = mul_0.Args[1] + mul_0_0 := mul_0.Args[0] + if mul_0_0.Op != OpZeroExt32to64 { + break + } + if x != mul_0_0.Args[0] { + break + } + mul_0_1 := mul_0.Args[1] + if mul_0_1.Op != OpConst64 { + break + } + if mul_0_1.AuxInt != 1 { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32, c).m+1)/2) && s == 32+umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 x (Mul32 (Trunc64to32 (Rsh64Ux64 mul:(Mul64 (Const64 [m]) (Rsh64Ux64 (ZeroExt32to64 x) (Const64 [1]))) (Const64 [s]))) (Const32 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32,c).m+1)/2) && s == 32+umagic(32,c).s-2 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpTrunc64to32 { + break + } + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpRsh64Ux64 { + break + } + _ = mul_1.Args[1] + mul_1_0 := mul_1.Args[0] + if mul_1_0.Op != OpZeroExt32to64 { + break + } + if x != mul_1_0.Args[0] { + break + } + mul_1_1 := mul_1.Args[1] + if mul_1_1.Op != OpConst64 { + break + } + if mul_1_1.AuxInt != 1 { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst32 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32, c).m+1)/2) && s == 32+umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 x (Mul32 (Trunc64to32 (Rsh64Ux64 mul:(Mul64 (Rsh64Ux64 (ZeroExt32to64 x) (Const64 [1])) (Const64 [m])) (Const64 [s]))) (Const32 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32,c).m+1)/2) && s == 32+umagic(32,c).s-2 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpTrunc64to32 { + break + } + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpRsh64Ux64 { + break + } + _ = mul_0.Args[1] + mul_0_0 := mul_0.Args[0] + if mul_0_0.Op != OpZeroExt32to64 { + break + } + if x != mul_0_0.Args[0] { + break + } + mul_0_1 := mul_0.Args[1] + if mul_0_1.Op != OpConst64 { + break + } + if mul_0_1.AuxInt != 1 { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst32 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32, c).m+1)/2) && s == 32+umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Const32 [c]) (Trunc64to32 (Rsh64Ux64 mul:(Mul64 (Const64 [m]) (Rsh64Ux64 (ZeroExt32to64 x) (Const64 [1]))) (Const64 [s])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32,c).m+1)/2) && s == 32+umagic(32,c).s-2 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst32 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpTrunc64to32 { + break + } + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpRsh64Ux64 { + break + } + _ = mul_1.Args[1] + mul_1_0 := mul_1.Args[0] + if mul_1_0.Op != OpZeroExt32to64 { + break + } + if x != mul_1_0.Args[0] { + break + } + mul_1_1 := mul_1.Args[1] + if mul_1_1.Op != OpConst64 { + break + } + if mul_1_1.AuxInt != 1 { + break + } + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32, c).m+1)/2) && s == 32+umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Const32 [c]) (Trunc64to32 (Rsh64Ux64 mul:(Mul64 (Rsh64Ux64 (ZeroExt32to64 x) (Const64 [1])) (Const64 [m])) (Const64 [s])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32,c).m+1)/2) && s == 32+umagic(32,c).s-2 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst32 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpTrunc64to32 { + break + } + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpRsh64Ux64 { + break + } + _ = mul_0.Args[1] + mul_0_0 := mul_0.Args[0] + if mul_0_0.Op != OpZeroExt32to64 { + break + } + if x != mul_0_0.Args[0] { + break + } + mul_0_1 := mul_0.Args[1] + if mul_0_1.Op != OpConst64 { + break + } + if mul_0_1.AuxInt != 1 { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32, c).m+1)/2) && s == 32+umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Trunc64to32 (Rsh64Ux64 mul:(Mul64 (Const64 [m]) (Rsh64Ux64 (ZeroExt32to64 x) (Const64 [1]))) (Const64 [s]))) (Const32 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32,c).m+1)/2) && s == 32+umagic(32,c).s-2 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpTrunc64to32 { + break + } + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpRsh64Ux64 { + break + } + _ = mul_1.Args[1] + mul_1_0 := mul_1.Args[0] + if mul_1_0.Op != OpZeroExt32to64 { + break + } + if x != mul_1_0.Args[0] { + break + } + mul_1_1 := mul_1.Args[1] + if mul_1_1.Op != OpConst64 { + break + } + if mul_1_1.AuxInt != 1 { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst32 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32, c).m+1)/2) && s == 32+umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Trunc64to32 (Rsh64Ux64 mul:(Mul64 (Rsh64Ux64 (ZeroExt32to64 x) (Const64 [1])) (Const64 [m])) (Const64 [s]))) (Const32 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32,c).m+1)/2) && s == 32+umagic(32,c).s-2 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpTrunc64to32 { + break + } + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpRsh64Ux64 { + break + } + _ = mul_0.Args[1] + mul_0_0 := mul_0.Args[0] + if mul_0_0.Op != OpZeroExt32to64 { + break + } + if x != mul_0_0.Args[0] { + break + } + mul_0_1 := mul_0.Args[1] + if mul_0_1.Op != OpConst64 { + break + } + if mul_0_1.AuxInt != 1 { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst32 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<31+(umagic(32, c).m+1)/2) && s == 32+umagic(32, c).s-2 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 x (Mul32 (Const32 [c]) (Trunc64to32 (Rsh64Ux64 (Avg64u (Lsh64x64 (ZeroExt32to64 x) (Const64 [32])) mul:(Mul64 (Const64 [m]) (ZeroExt32to64 x))) (Const64 [s]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32,c).m) && s == 32+umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst32 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpTrunc64to32 { + break + } + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_1_0.Args[1] + v_1_1_0_0 := v_1_1_0.Args[0] + if v_1_1_0_0.Op != OpAvg64u { + break + } + _ = v_1_1_0_0.Args[1] + v_1_1_0_0_0 := v_1_1_0_0.Args[0] + if v_1_1_0_0_0.Op != OpLsh64x64 { + break + } + _ = v_1_1_0_0_0.Args[1] + v_1_1_0_0_0_0 := v_1_1_0_0_0.Args[0] + if v_1_1_0_0_0_0.Op != OpZeroExt32to64 { + break + } + if x != v_1_1_0_0_0_0.Args[0] { + break + } + v_1_1_0_0_0_1 := v_1_1_0_0_0.Args[1] + if v_1_1_0_0_0_1.Op != OpConst64 { + break + } + if v_1_1_0_0_0_1.AuxInt != 32 { + break + } + mul := v_1_1_0_0.Args[1] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt32to64 { + break + } + if x != mul_1.Args[0] { + break + } + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32, c).m) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 x (Mul32 (Const32 [c]) (Trunc64to32 (Rsh64Ux64 (Avg64u (Lsh64x64 (ZeroExt32to64 x) (Const64 [32])) mul:(Mul64 (ZeroExt32to64 x) (Const64 [m]))) (Const64 [s]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32,c).m) && s == 32+umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst32 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpTrunc64to32 { + break + } + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_1_0.Args[1] + v_1_1_0_0 := v_1_1_0.Args[0] + if v_1_1_0_0.Op != OpAvg64u { + break + } + _ = v_1_1_0_0.Args[1] + v_1_1_0_0_0 := v_1_1_0_0.Args[0] + if v_1_1_0_0_0.Op != OpLsh64x64 { + break + } + _ = v_1_1_0_0_0.Args[1] + v_1_1_0_0_0_0 := v_1_1_0_0_0.Args[0] + if v_1_1_0_0_0_0.Op != OpZeroExt32to64 { + break + } + if x != v_1_1_0_0_0_0.Args[0] { + break + } + v_1_1_0_0_0_1 := v_1_1_0_0_0.Args[1] + if v_1_1_0_0_0_1.Op != OpConst64 { + break + } + if v_1_1_0_0_0_1.AuxInt != 32 { + break + } + mul := v_1_1_0_0.Args[1] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt32to64 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32, c).m) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 x (Mul32 (Trunc64to32 (Rsh64Ux64 (Avg64u (Lsh64x64 (ZeroExt32to64 x) (Const64 [32])) mul:(Mul64 (Const64 [m]) (ZeroExt32to64 x))) (Const64 [s]))) (Const32 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32,c).m) && s == 32+umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpTrunc64to32 { + break + } + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_0_0.Args[1] + v_1_0_0_0 := v_1_0_0.Args[0] + if v_1_0_0_0.Op != OpAvg64u { + break + } + _ = v_1_0_0_0.Args[1] + v_1_0_0_0_0 := v_1_0_0_0.Args[0] + if v_1_0_0_0_0.Op != OpLsh64x64 { + break + } + _ = v_1_0_0_0_0.Args[1] + v_1_0_0_0_0_0 := v_1_0_0_0_0.Args[0] + if v_1_0_0_0_0_0.Op != OpZeroExt32to64 { + break + } + if x != v_1_0_0_0_0_0.Args[0] { + break + } + v_1_0_0_0_0_1 := v_1_0_0_0_0.Args[1] + if v_1_0_0_0_0_1.Op != OpConst64 { + break + } + if v_1_0_0_0_0_1.AuxInt != 32 { + break + } + mul := v_1_0_0_0.Args[1] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt32to64 { + break + } + if x != mul_1.Args[0] { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst32 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32, c).m) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + return false +} +func rewriteValuegeneric_OpEq32_50(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Eq32 x (Mul32 (Trunc64to32 (Rsh64Ux64 (Avg64u (Lsh64x64 (ZeroExt32to64 x) (Const64 [32])) mul:(Mul64 (ZeroExt32to64 x) (Const64 [m]))) (Const64 [s]))) (Const32 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32,c).m) && s == 32+umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpTrunc64to32 { + break + } + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_0_0.Args[1] + v_1_0_0_0 := v_1_0_0.Args[0] + if v_1_0_0_0.Op != OpAvg64u { + break + } + _ = v_1_0_0_0.Args[1] + v_1_0_0_0_0 := v_1_0_0_0.Args[0] + if v_1_0_0_0_0.Op != OpLsh64x64 { + break + } + _ = v_1_0_0_0_0.Args[1] + v_1_0_0_0_0_0 := v_1_0_0_0_0.Args[0] + if v_1_0_0_0_0_0.Op != OpZeroExt32to64 { + break + } + if x != v_1_0_0_0_0_0.Args[0] { + break + } + v_1_0_0_0_0_1 := v_1_0_0_0_0.Args[1] + if v_1_0_0_0_0_1.Op != OpConst64 { + break + } + if v_1_0_0_0_0_1.AuxInt != 32 { + break + } + mul := v_1_0_0_0.Args[1] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt32to64 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst32 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32, c).m) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Const32 [c]) (Trunc64to32 (Rsh64Ux64 (Avg64u (Lsh64x64 (ZeroExt32to64 x) (Const64 [32])) mul:(Mul64 (Const64 [m]) (ZeroExt32to64 x))) (Const64 [s])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32,c).m) && s == 32+umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst32 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpTrunc64to32 { + break + } + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_1_0.Args[1] + v_0_1_0_0 := v_0_1_0.Args[0] + if v_0_1_0_0.Op != OpAvg64u { + break + } + _ = v_0_1_0_0.Args[1] + v_0_1_0_0_0 := v_0_1_0_0.Args[0] + if v_0_1_0_0_0.Op != OpLsh64x64 { + break + } + _ = v_0_1_0_0_0.Args[1] + v_0_1_0_0_0_0 := v_0_1_0_0_0.Args[0] + if v_0_1_0_0_0_0.Op != OpZeroExt32to64 { + break + } + if x != v_0_1_0_0_0_0.Args[0] { + break + } + v_0_1_0_0_0_1 := v_0_1_0_0_0.Args[1] + if v_0_1_0_0_0_1.Op != OpConst64 { + break + } + if v_0_1_0_0_0_1.AuxInt != 32 { + break + } + mul := v_0_1_0_0.Args[1] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt32to64 { + break + } + if x != mul_1.Args[0] { + break + } + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32, c).m) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Const32 [c]) (Trunc64to32 (Rsh64Ux64 (Avg64u (Lsh64x64 (ZeroExt32to64 x) (Const64 [32])) mul:(Mul64 (ZeroExt32to64 x) (Const64 [m]))) (Const64 [s])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32,c).m) && s == 32+umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst32 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpTrunc64to32 { + break + } + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_1_0.Args[1] + v_0_1_0_0 := v_0_1_0.Args[0] + if v_0_1_0_0.Op != OpAvg64u { + break + } + _ = v_0_1_0_0.Args[1] + v_0_1_0_0_0 := v_0_1_0_0.Args[0] + if v_0_1_0_0_0.Op != OpLsh64x64 { + break + } + _ = v_0_1_0_0_0.Args[1] + v_0_1_0_0_0_0 := v_0_1_0_0_0.Args[0] + if v_0_1_0_0_0_0.Op != OpZeroExt32to64 { + break + } + if x != v_0_1_0_0_0_0.Args[0] { + break + } + v_0_1_0_0_0_1 := v_0_1_0_0_0.Args[1] + if v_0_1_0_0_0_1.Op != OpConst64 { + break + } + if v_0_1_0_0_0_1.AuxInt != 32 { + break + } + mul := v_0_1_0_0.Args[1] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt32to64 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32, c).m) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Trunc64to32 (Rsh64Ux64 (Avg64u (Lsh64x64 (ZeroExt32to64 x) (Const64 [32])) mul:(Mul64 (Const64 [m]) (ZeroExt32to64 x))) (Const64 [s]))) (Const32 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32,c).m) && s == 32+umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpTrunc64to32 { + break + } + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_0_0.Args[1] + v_0_0_0_0 := v_0_0_0.Args[0] + if v_0_0_0_0.Op != OpAvg64u { + break + } + _ = v_0_0_0_0.Args[1] + v_0_0_0_0_0 := v_0_0_0_0.Args[0] + if v_0_0_0_0_0.Op != OpLsh64x64 { + break + } + _ = v_0_0_0_0_0.Args[1] + v_0_0_0_0_0_0 := v_0_0_0_0_0.Args[0] + if v_0_0_0_0_0_0.Op != OpZeroExt32to64 { + break + } + if x != v_0_0_0_0_0_0.Args[0] { + break + } + v_0_0_0_0_0_1 := v_0_0_0_0_0.Args[1] + if v_0_0_0_0_0_1.Op != OpConst64 { + break + } + if v_0_0_0_0_0_1.AuxInt != 32 { + break + } + mul := v_0_0_0_0.Args[1] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt32to64 { + break + } + if x != mul_1.Args[0] { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst32 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32, c).m) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 (Mul32 (Trunc64to32 (Rsh64Ux64 (Avg64u (Lsh64x64 (ZeroExt32to64 x) (Const64 [32])) mul:(Mul64 (ZeroExt32to64 x) (Const64 [m]))) (Const64 [s]))) (Const32 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32,c).m) && s == 32+umagic(32,c).s-1 && x.Op != OpConst32 && udivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Mul32 (Const32 [int64(int32(udivisible(32,c).m))]) x) (Const32 [int64(32-udivisible(32,c).k)]) ) (Const32 [int64(int32(udivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpTrunc64to32 { + break + } + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_0_0.Args[1] + v_0_0_0_0 := v_0_0_0.Args[0] + if v_0_0_0_0.Op != OpAvg64u { + break + } + _ = v_0_0_0_0.Args[1] + v_0_0_0_0_0 := v_0_0_0_0.Args[0] + if v_0_0_0_0_0.Op != OpLsh64x64 { + break + } + _ = v_0_0_0_0_0.Args[1] + v_0_0_0_0_0_0 := v_0_0_0_0_0.Args[0] + if v_0_0_0_0_0_0.Op != OpZeroExt32to64 { + break + } + if x != v_0_0_0_0_0_0.Args[0] { + break + } + v_0_0_0_0_0_1 := v_0_0_0_0_0.Args[1] + if v_0_0_0_0_0_1.Op != OpConst64 { + break + } + if v_0_0_0_0_0_1.AuxInt != 32 { + break + } + mul := v_0_0_0_0.Args[1] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt32to64 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst32 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(32, c).m) && s == 32+umagic(32, c).s-1 && x.Op != OpConst32 && udivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = int64(int32(udivisible(32, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(32 - udivisible(32, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(udivisible(32, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq32 x (Mul32 (Const32 [c]) (Sub32 (Rsh64x64 mul:(Mul64 (Const64 [m]) (SignExt32to64 x)) (Const64 [s])) (Rsh64x64 (SignExt32to64 x) (Const64 [63]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32,c).m) && s == 32+smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst32 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpSub32 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh64x64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpSignExt32to64 { + break + } + if x != mul_1.Args[0] { + break + } + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpRsh64x64 { + break + } + _ = v_1_1_1.Args[1] + v_1_1_1_0 := v_1_1_1.Args[0] + if v_1_1_1_0.Op != OpSignExt32to64 { + break + } + if x != v_1_1_1_0.Args[0] { + break + } + v_1_1_1_1 := v_1_1_1.Args[1] + if v_1_1_1_1.Op != OpConst64 { + break + } + if v_1_1_1_1.AuxInt != 63 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32, c).m) && s == 32+smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 x (Mul32 (Const32 [c]) (Sub32 (Rsh64x64 mul:(Mul64 (SignExt32to64 x) (Const64 [m])) (Const64 [s])) (Rsh64x64 (SignExt32to64 x) (Const64 [63]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32,c).m) && s == 32+smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst32 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpSub32 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh64x64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpSignExt32to64 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpRsh64x64 { + break + } + _ = v_1_1_1.Args[1] + v_1_1_1_0 := v_1_1_1.Args[0] + if v_1_1_1_0.Op != OpSignExt32to64 { + break + } + if x != v_1_1_1_0.Args[0] { + break + } + v_1_1_1_1 := v_1_1_1.Args[1] + if v_1_1_1_1.Op != OpConst64 { + break + } + if v_1_1_1_1.AuxInt != 63 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32, c).m) && s == 32+smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 x (Mul32 (Sub32 (Rsh64x64 mul:(Mul64 (Const64 [m]) (SignExt32to64 x)) (Const64 [s])) (Rsh64x64 (SignExt32to64 x) (Const64 [63]))) (Const32 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32,c).m) && s == 32+smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpSub32 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh64x64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpSignExt32to64 { + break + } + if x != mul_1.Args[0] { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpRsh64x64 { + break + } + _ = v_1_0_1.Args[1] + v_1_0_1_0 := v_1_0_1.Args[0] + if v_1_0_1_0.Op != OpSignExt32to64 { + break + } + if x != v_1_0_1_0.Args[0] { + break + } + v_1_0_1_1 := v_1_0_1.Args[1] + if v_1_0_1_1.Op != OpConst64 { + break + } + if v_1_0_1_1.AuxInt != 63 { + break + } + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst32 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32, c).m) && s == 32+smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 x (Mul32 (Sub32 (Rsh64x64 mul:(Mul64 (SignExt32to64 x) (Const64 [m])) (Const64 [s])) (Rsh64x64 (SignExt32to64 x) (Const64 [63]))) (Const32 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32,c).m) && s == 32+smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpSub32 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh64x64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpSignExt32to64 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpRsh64x64 { + break + } + _ = v_1_0_1.Args[1] + v_1_0_1_0 := v_1_0_1.Args[0] + if v_1_0_1_0.Op != OpSignExt32to64 { + break + } + if x != v_1_0_1_0.Args[0] { + break + } + v_1_0_1_1 := v_1_0_1.Args[1] + if v_1_0_1_1.Op != OpConst64 { + break + } + if v_1_0_1_1.AuxInt != 63 { + break + } + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst32 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32, c).m) && s == 32+smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 (Mul32 (Const32 [c]) (Sub32 (Rsh64x64 mul:(Mul64 (Const64 [m]) (SignExt32to64 x)) (Const64 [s])) (Rsh64x64 (SignExt32to64 x) (Const64 [63])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32,c).m) && s == 32+smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst32 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpSub32 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh64x64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpSignExt32to64 { + break + } + if x != mul_1.Args[0] { + break + } + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpRsh64x64 { + break + } + _ = v_0_1_1.Args[1] + v_0_1_1_0 := v_0_1_1.Args[0] + if v_0_1_1_0.Op != OpSignExt32to64 { + break + } + if x != v_0_1_1_0.Args[0] { + break + } + v_0_1_1_1 := v_0_1_1.Args[1] + if v_0_1_1_1.Op != OpConst64 { + break + } + if v_0_1_1_1.AuxInt != 63 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32, c).m) && s == 32+smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + return false +} +func rewriteValuegeneric_OpEq32_60(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Eq32 (Mul32 (Const32 [c]) (Sub32 (Rsh64x64 mul:(Mul64 (SignExt32to64 x) (Const64 [m])) (Const64 [s])) (Rsh64x64 (SignExt32to64 x) (Const64 [63])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32,c).m) && s == 32+smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst32 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpSub32 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh64x64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpSignExt32to64 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpRsh64x64 { + break + } + _ = v_0_1_1.Args[1] + v_0_1_1_0 := v_0_1_1.Args[0] + if v_0_1_1_0.Op != OpSignExt32to64 { + break + } + if x != v_0_1_1_0.Args[0] { + break + } + v_0_1_1_1 := v_0_1_1.Args[1] + if v_0_1_1_1.Op != OpConst64 { + break + } + if v_0_1_1_1.AuxInt != 63 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32, c).m) && s == 32+smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 (Mul32 (Sub32 (Rsh64x64 mul:(Mul64 (Const64 [m]) (SignExt32to64 x)) (Const64 [s])) (Rsh64x64 (SignExt32to64 x) (Const64 [63]))) (Const32 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32,c).m) && s == 32+smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpSub32 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh64x64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpSignExt32to64 { + break + } + if x != mul_1.Args[0] { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpRsh64x64 { + break + } + _ = v_0_0_1.Args[1] + v_0_0_1_0 := v_0_0_1.Args[0] + if v_0_0_1_0.Op != OpSignExt32to64 { + break + } + if x != v_0_0_1_0.Args[0] { + break + } + v_0_0_1_1 := v_0_0_1.Args[1] + if v_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_1_1.AuxInt != 63 { + break + } + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst32 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32, c).m) && s == 32+smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 (Mul32 (Sub32 (Rsh64x64 mul:(Mul64 (SignExt32to64 x) (Const64 [m])) (Const64 [s])) (Rsh64x64 (SignExt32to64 x) (Const64 [63]))) (Const32 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32,c).m) && s == 32+smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpSub32 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh64x64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpMul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpSignExt32to64 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpRsh64x64 { + break + } + _ = v_0_0_1.Args[1] + v_0_0_1_0 := v_0_0_1.Args[0] + if v_0_0_1_0.Op != OpSignExt32to64 { + break + } + if x != v_0_0_1_0.Args[0] { + break + } + v_0_0_1_1 := v_0_0_1.Args[1] + if v_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_1_1.AuxInt != 63 { + break + } + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst32 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(32, c).m) && s == 32+smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 x (Mul32 (Const32 [c]) (Sub32 (Rsh32x64 mul:(Hmul32 (Const32 [m]) x) (Const64 [s])) (Rsh32x64 x (Const64 [31]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m/2)) && s == smagic(32,c).s-1 && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst32 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpSub32 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh32x64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpRsh32x64 { + break + } + _ = v_1_1_1.Args[1] + if x != v_1_1_1.Args[0] { + break + } + v_1_1_1_1 := v_1_1_1.Args[1] + if v_1_1_1_1.Op != OpConst64 { + break + } + if v_1_1_1_1.AuxInt != 31 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m/2)) && s == smagic(32, c).s-1 && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 x (Mul32 (Const32 [c]) (Sub32 (Rsh32x64 mul:(Hmul32 x (Const32 [m])) (Const64 [s])) (Rsh32x64 x (Const64 [31]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m/2)) && s == smagic(32,c).s-1 && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst32 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpSub32 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh32x64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpRsh32x64 { + break + } + _ = v_1_1_1.Args[1] + if x != v_1_1_1.Args[0] { + break + } + v_1_1_1_1 := v_1_1_1.Args[1] + if v_1_1_1_1.Op != OpConst64 { + break + } + if v_1_1_1_1.AuxInt != 31 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m/2)) && s == smagic(32, c).s-1 && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 x (Mul32 (Sub32 (Rsh32x64 mul:(Hmul32 (Const32 [m]) x) (Const64 [s])) (Rsh32x64 x (Const64 [31]))) (Const32 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m/2)) && s == smagic(32,c).s-1 && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpSub32 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh32x64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpRsh32x64 { + break + } + _ = v_1_0_1.Args[1] + if x != v_1_0_1.Args[0] { + break + } + v_1_0_1_1 := v_1_0_1.Args[1] + if v_1_0_1_1.Op != OpConst64 { + break + } + if v_1_0_1_1.AuxInt != 31 { + break + } + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst32 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m/2)) && s == smagic(32, c).s-1 && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 x (Mul32 (Sub32 (Rsh32x64 mul:(Hmul32 x (Const32 [m])) (Const64 [s])) (Rsh32x64 x (Const64 [31]))) (Const32 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m/2)) && s == smagic(32,c).s-1 && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpSub32 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh32x64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpRsh32x64 { + break + } + _ = v_1_0_1.Args[1] + if x != v_1_0_1.Args[0] { + break + } + v_1_0_1_1 := v_1_0_1.Args[1] + if v_1_0_1_1.Op != OpConst64 { + break + } + if v_1_0_1_1.AuxInt != 31 { + break + } + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst32 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m/2)) && s == smagic(32, c).s-1 && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 (Mul32 (Const32 [c]) (Sub32 (Rsh32x64 mul:(Hmul32 (Const32 [m]) x) (Const64 [s])) (Rsh32x64 x (Const64 [31])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m/2)) && s == smagic(32,c).s-1 && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst32 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpSub32 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh32x64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpRsh32x64 { + break + } + _ = v_0_1_1.Args[1] + if x != v_0_1_1.Args[0] { + break + } + v_0_1_1_1 := v_0_1_1.Args[1] + if v_0_1_1_1.Op != OpConst64 { + break + } + if v_0_1_1_1.AuxInt != 31 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m/2)) && s == smagic(32, c).s-1 && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 (Mul32 (Const32 [c]) (Sub32 (Rsh32x64 mul:(Hmul32 x (Const32 [m])) (Const64 [s])) (Rsh32x64 x (Const64 [31])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m/2)) && s == smagic(32,c).s-1 && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst32 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpSub32 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh32x64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpRsh32x64 { + break + } + _ = v_0_1_1.Args[1] + if x != v_0_1_1.Args[0] { + break + } + v_0_1_1_1 := v_0_1_1.Args[1] + if v_0_1_1_1.Op != OpConst64 { + break + } + if v_0_1_1_1.AuxInt != 31 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m/2)) && s == smagic(32, c).s-1 && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 (Mul32 (Sub32 (Rsh32x64 mul:(Hmul32 (Const32 [m]) x) (Const64 [s])) (Rsh32x64 x (Const64 [31]))) (Const32 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m/2)) && s == smagic(32,c).s-1 && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpSub32 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh32x64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpRsh32x64 { + break + } + _ = v_0_0_1.Args[1] + if x != v_0_0_1.Args[0] { + break + } + v_0_0_1_1 := v_0_0_1.Args[1] + if v_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_1_1.AuxInt != 31 { + break + } + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst32 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m/2)) && s == smagic(32, c).s-1 && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + return false +} +func rewriteValuegeneric_OpEq32_70(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Eq32 (Mul32 (Sub32 (Rsh32x64 mul:(Hmul32 x (Const32 [m])) (Const64 [s])) (Rsh32x64 x (Const64 [31]))) (Const32 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m/2)) && s == smagic(32,c).s-1 && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpSub32 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh32x64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpRsh32x64 { + break + } + _ = v_0_0_1.Args[1] + if x != v_0_0_1.Args[0] { + break + } + v_0_0_1_1 := v_0_0_1.Args[1] + if v_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_1_1.AuxInt != 31 { + break + } + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst32 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m/2)) && s == smagic(32, c).s-1 && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 x (Mul32 (Const32 [c]) (Sub32 (Rsh32x64 (Add32 mul:(Hmul32 (Const32 [m]) x) x) (Const64 [s])) (Rsh32x64 x (Const64 [31]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m)) && s == smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst32 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpSub32 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh32x64 { + break + } + _ = v_1_1_0.Args[1] + v_1_1_0_0 := v_1_1_0.Args[0] + if v_1_1_0_0.Op != OpAdd32 { + break + } + _ = v_1_1_0_0.Args[1] + mul := v_1_1_0_0.Args[0] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + if x != v_1_1_0_0.Args[1] { + break + } + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpRsh32x64 { + break + } + _ = v_1_1_1.Args[1] + if x != v_1_1_1.Args[0] { + break + } + v_1_1_1_1 := v_1_1_1.Args[1] + if v_1_1_1_1.Op != OpConst64 { + break + } + if v_1_1_1_1.AuxInt != 31 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 x (Mul32 (Const32 [c]) (Sub32 (Rsh32x64 (Add32 mul:(Hmul32 x (Const32 [m])) x) (Const64 [s])) (Rsh32x64 x (Const64 [31]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m)) && s == smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst32 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpSub32 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh32x64 { + break + } + _ = v_1_1_0.Args[1] + v_1_1_0_0 := v_1_1_0.Args[0] + if v_1_1_0_0.Op != OpAdd32 { + break + } + _ = v_1_1_0_0.Args[1] + mul := v_1_1_0_0.Args[0] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + if x != v_1_1_0_0.Args[1] { + break + } + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpRsh32x64 { + break + } + _ = v_1_1_1.Args[1] + if x != v_1_1_1.Args[0] { + break + } + v_1_1_1_1 := v_1_1_1.Args[1] + if v_1_1_1_1.Op != OpConst64 { + break + } + if v_1_1_1_1.AuxInt != 31 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 x (Mul32 (Const32 [c]) (Sub32 (Rsh32x64 (Add32 x mul:(Hmul32 (Const32 [m]) x)) (Const64 [s])) (Rsh32x64 x (Const64 [31]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m)) && s == smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst32 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpSub32 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh32x64 { + break + } + _ = v_1_1_0.Args[1] + v_1_1_0_0 := v_1_1_0.Args[0] + if v_1_1_0_0.Op != OpAdd32 { + break + } + _ = v_1_1_0_0.Args[1] + if x != v_1_1_0_0.Args[0] { + break + } + mul := v_1_1_0_0.Args[1] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpRsh32x64 { + break + } + _ = v_1_1_1.Args[1] + if x != v_1_1_1.Args[0] { + break + } + v_1_1_1_1 := v_1_1_1.Args[1] + if v_1_1_1_1.Op != OpConst64 { + break + } + if v_1_1_1_1.AuxInt != 31 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 x (Mul32 (Const32 [c]) (Sub32 (Rsh32x64 (Add32 x mul:(Hmul32 x (Const32 [m]))) (Const64 [s])) (Rsh32x64 x (Const64 [31]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m)) && s == smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst32 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpSub32 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh32x64 { + break + } + _ = v_1_1_0.Args[1] + v_1_1_0_0 := v_1_1_0.Args[0] + if v_1_1_0_0.Op != OpAdd32 { + break + } + _ = v_1_1_0_0.Args[1] + if x != v_1_1_0_0.Args[0] { + break + } + mul := v_1_1_0_0.Args[1] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpRsh32x64 { + break + } + _ = v_1_1_1.Args[1] + if x != v_1_1_1.Args[0] { + break + } + v_1_1_1_1 := v_1_1_1.Args[1] + if v_1_1_1_1.Op != OpConst64 { + break + } + if v_1_1_1_1.AuxInt != 31 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 x (Mul32 (Sub32 (Rsh32x64 (Add32 mul:(Hmul32 (Const32 [m]) x) x) (Const64 [s])) (Rsh32x64 x (Const64 [31]))) (Const32 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m)) && s == smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpSub32 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh32x64 { + break + } + _ = v_1_0_0.Args[1] + v_1_0_0_0 := v_1_0_0.Args[0] + if v_1_0_0_0.Op != OpAdd32 { + break + } + _ = v_1_0_0_0.Args[1] + mul := v_1_0_0_0.Args[0] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + if x != v_1_0_0_0.Args[1] { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpRsh32x64 { + break + } + _ = v_1_0_1.Args[1] + if x != v_1_0_1.Args[0] { + break + } + v_1_0_1_1 := v_1_0_1.Args[1] + if v_1_0_1_1.Op != OpConst64 { + break + } + if v_1_0_1_1.AuxInt != 31 { + break + } + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst32 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 x (Mul32 (Sub32 (Rsh32x64 (Add32 mul:(Hmul32 x (Const32 [m])) x) (Const64 [s])) (Rsh32x64 x (Const64 [31]))) (Const32 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m)) && s == smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpSub32 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh32x64 { + break + } + _ = v_1_0_0.Args[1] + v_1_0_0_0 := v_1_0_0.Args[0] + if v_1_0_0_0.Op != OpAdd32 { + break + } + _ = v_1_0_0_0.Args[1] + mul := v_1_0_0_0.Args[0] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + if x != v_1_0_0_0.Args[1] { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpRsh32x64 { + break + } + _ = v_1_0_1.Args[1] + if x != v_1_0_1.Args[0] { + break + } + v_1_0_1_1 := v_1_0_1.Args[1] + if v_1_0_1_1.Op != OpConst64 { + break + } + if v_1_0_1_1.AuxInt != 31 { + break + } + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst32 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 x (Mul32 (Sub32 (Rsh32x64 (Add32 x mul:(Hmul32 (Const32 [m]) x)) (Const64 [s])) (Rsh32x64 x (Const64 [31]))) (Const32 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m)) && s == smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpSub32 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh32x64 { + break + } + _ = v_1_0_0.Args[1] + v_1_0_0_0 := v_1_0_0.Args[0] + if v_1_0_0_0.Op != OpAdd32 { + break + } + _ = v_1_0_0_0.Args[1] + if x != v_1_0_0_0.Args[0] { + break + } + mul := v_1_0_0_0.Args[1] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpRsh32x64 { + break + } + _ = v_1_0_1.Args[1] + if x != v_1_0_1.Args[0] { + break + } + v_1_0_1_1 := v_1_0_1.Args[1] + if v_1_0_1_1.Op != OpConst64 { + break + } + if v_1_0_1_1.AuxInt != 31 { + break + } + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst32 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 x (Mul32 (Sub32 (Rsh32x64 (Add32 x mul:(Hmul32 x (Const32 [m]))) (Const64 [s])) (Rsh32x64 x (Const64 [31]))) (Const32 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m)) && s == smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul32 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpSub32 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh32x64 { + break + } + _ = v_1_0_0.Args[1] + v_1_0_0_0 := v_1_0_0.Args[0] + if v_1_0_0_0.Op != OpAdd32 { + break + } + _ = v_1_0_0_0.Args[1] + if x != v_1_0_0_0.Args[0] { + break + } + mul := v_1_0_0_0.Args[1] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpRsh32x64 { + break + } + _ = v_1_0_1.Args[1] + if x != v_1_0_1.Args[0] { + break + } + v_1_0_1_1 := v_1_0_1.Args[1] + if v_1_0_1_1.Op != OpConst64 { + break + } + if v_1_0_1_1.AuxInt != 31 { + break + } + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst32 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 (Mul32 (Const32 [c]) (Sub32 (Rsh32x64 (Add32 mul:(Hmul32 (Const32 [m]) x) x) (Const64 [s])) (Rsh32x64 x (Const64 [31])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m)) && s == smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst32 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpSub32 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh32x64 { + break + } + _ = v_0_1_0.Args[1] + v_0_1_0_0 := v_0_1_0.Args[0] + if v_0_1_0_0.Op != OpAdd32 { + break + } + _ = v_0_1_0_0.Args[1] + mul := v_0_1_0_0.Args[0] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + if x != v_0_1_0_0.Args[1] { + break + } + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpRsh32x64 { + break + } + _ = v_0_1_1.Args[1] + if x != v_0_1_1.Args[0] { + break + } + v_0_1_1_1 := v_0_1_1.Args[1] + if v_0_1_1_1.Op != OpConst64 { + break + } + if v_0_1_1_1.AuxInt != 31 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + return false +} +func rewriteValuegeneric_OpEq32_80(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Eq32 (Mul32 (Const32 [c]) (Sub32 (Rsh32x64 (Add32 mul:(Hmul32 x (Const32 [m])) x) (Const64 [s])) (Rsh32x64 x (Const64 [31])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m)) && s == smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst32 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpSub32 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh32x64 { + break + } + _ = v_0_1_0.Args[1] + v_0_1_0_0 := v_0_1_0.Args[0] + if v_0_1_0_0.Op != OpAdd32 { + break + } + _ = v_0_1_0_0.Args[1] + mul := v_0_1_0_0.Args[0] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + if x != v_0_1_0_0.Args[1] { + break + } + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpRsh32x64 { + break + } + _ = v_0_1_1.Args[1] + if x != v_0_1_1.Args[0] { + break + } + v_0_1_1_1 := v_0_1_1.Args[1] + if v_0_1_1_1.Op != OpConst64 { + break + } + if v_0_1_1_1.AuxInt != 31 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 (Mul32 (Const32 [c]) (Sub32 (Rsh32x64 (Add32 x mul:(Hmul32 (Const32 [m]) x)) (Const64 [s])) (Rsh32x64 x (Const64 [31])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m)) && s == smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst32 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpSub32 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh32x64 { + break + } + _ = v_0_1_0.Args[1] + v_0_1_0_0 := v_0_1_0.Args[0] + if v_0_1_0_0.Op != OpAdd32 { + break + } + _ = v_0_1_0_0.Args[1] + if x != v_0_1_0_0.Args[0] { + break + } + mul := v_0_1_0_0.Args[1] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpRsh32x64 { + break + } + _ = v_0_1_1.Args[1] + if x != v_0_1_1.Args[0] { + break + } + v_0_1_1_1 := v_0_1_1.Args[1] + if v_0_1_1_1.Op != OpConst64 { + break + } + if v_0_1_1_1.AuxInt != 31 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 (Mul32 (Const32 [c]) (Sub32 (Rsh32x64 (Add32 x mul:(Hmul32 x (Const32 [m]))) (Const64 [s])) (Rsh32x64 x (Const64 [31])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m)) && s == smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst32 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpSub32 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh32x64 { + break + } + _ = v_0_1_0.Args[1] + v_0_1_0_0 := v_0_1_0.Args[0] + if v_0_1_0_0.Op != OpAdd32 { + break + } + _ = v_0_1_0_0.Args[1] + if x != v_0_1_0_0.Args[0] { + break + } + mul := v_0_1_0_0.Args[1] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpRsh32x64 { + break + } + _ = v_0_1_1.Args[1] + if x != v_0_1_1.Args[0] { + break + } + v_0_1_1_1 := v_0_1_1.Args[1] + if v_0_1_1_1.Op != OpConst64 { + break + } + if v_0_1_1_1.AuxInt != 31 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 (Mul32 (Sub32 (Rsh32x64 (Add32 mul:(Hmul32 (Const32 [m]) x) x) (Const64 [s])) (Rsh32x64 x (Const64 [31]))) (Const32 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m)) && s == smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpSub32 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh32x64 { + break + } + _ = v_0_0_0.Args[1] + v_0_0_0_0 := v_0_0_0.Args[0] + if v_0_0_0_0.Op != OpAdd32 { + break + } + _ = v_0_0_0_0.Args[1] + mul := v_0_0_0_0.Args[0] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + if x != v_0_0_0_0.Args[1] { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpRsh32x64 { + break + } + _ = v_0_0_1.Args[1] + if x != v_0_0_1.Args[0] { + break + } + v_0_0_1_1 := v_0_0_1.Args[1] + if v_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_1_1.AuxInt != 31 { + break + } + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst32 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 (Mul32 (Sub32 (Rsh32x64 (Add32 mul:(Hmul32 x (Const32 [m])) x) (Const64 [s])) (Rsh32x64 x (Const64 [31]))) (Const32 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m)) && s == smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpSub32 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh32x64 { + break + } + _ = v_0_0_0.Args[1] + v_0_0_0_0 := v_0_0_0.Args[0] + if v_0_0_0_0.Op != OpAdd32 { + break + } + _ = v_0_0_0_0.Args[1] + mul := v_0_0_0_0.Args[0] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + if x != v_0_0_0_0.Args[1] { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpRsh32x64 { + break + } + _ = v_0_0_1.Args[1] + if x != v_0_0_1.Args[0] { + break + } + v_0_0_1_1 := v_0_0_1.Args[1] + if v_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_1_1.AuxInt != 31 { + break + } + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst32 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 (Mul32 (Sub32 (Rsh32x64 (Add32 x mul:(Hmul32 (Const32 [m]) x)) (Const64 [s])) (Rsh32x64 x (Const64 [31]))) (Const32 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m)) && s == smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpSub32 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh32x64 { + break + } + _ = v_0_0_0.Args[1] + v_0_0_0_0 := v_0_0_0.Args[0] + if v_0_0_0_0.Op != OpAdd32 { + break + } + _ = v_0_0_0_0.Args[1] + if x != v_0_0_0_0.Args[0] { + break + } + mul := v_0_0_0_0.Args[1] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpRsh32x64 { + break + } + _ = v_0_0_1.Args[1] + if x != v_0_0_1.Args[0] { + break + } + v_0_0_1_1 := v_0_0_1.Args[1] + if v_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_1_1.AuxInt != 31 { + break + } + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst32 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 (Mul32 (Sub32 (Rsh32x64 (Add32 x mul:(Hmul32 x (Const32 [m]))) (Const64 [s])) (Rsh32x64 x (Const64 [31]))) (Const32 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32,c).m)) && s == smagic(32,c).s && x.Op != OpConst32 && sdivisibleOK(32,c) + // result: (Leq32U (RotateLeft32 (Add32 (Mul32 (Const32 [int64(int32(sdivisible(32,c).m))]) x) (Const32 [int64(int32(sdivisible(32,c).a))]) ) (Const32 [int64(32-sdivisible(32,c).k)]) ) (Const32 [int64(int32(sdivisible(32,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpSub32 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh32x64 { + break + } + _ = v_0_0_0.Args[1] + v_0_0_0_0 := v_0_0_0.Args[0] + if v_0_0_0_0.Op != OpAdd32 { + break + } + _ = v_0_0_0_0.Args[1] + if x != v_0_0_0_0.Args[0] { + break + } + mul := v_0_0_0_0.Args[1] + if mul.Op != OpHmul32 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpRsh32x64 { + break + } + _ = v_0_0_1.Args[1] + if x != v_0_0_1.Args[0] { + break + } + v_0_0_1_1 := v_0_0_1.Args[1] + if v_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_1_1.AuxInt != 31 { + break + } + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst32 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(int32(smagic(32, c).m)) && s == smagic(32, c).s && x.Op != OpConst32 && sdivisibleOK(32, c)) { + break + } + v.reset(OpLeq32U) + v0 := b.NewValue0(v.Pos, OpRotateLeft32, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpAdd32, typ.UInt32) + v2 := b.NewValue0(v.Pos, OpMul32, typ.UInt32) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = int64(int32(sdivisible(32, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v4.AuxInt = int64(int32(sdivisible(32, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v5.AuxInt = int64(32 - sdivisible(32, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v6.AuxInt = int64(int32(sdivisible(32, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq32 n (Lsh32x64 (Rsh32x64 (Add32 n (Rsh32Ux64 (Rsh32x64 n (Const64 [31])) (Const64 [kbar]))) (Const64 [k])) (Const64 [k]))) + // cond: k > 0 && k < 31 && kbar == 32 - k + // result: (Eq32 (And32 n (Const32 [int64(1< [0])) + for { + _ = v.Args[1] + n := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpLsh32x64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpRsh32x64 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpAdd32 { + break + } + t := v_1_0_0.Type + _ = v_1_0_0.Args[1] + if n != v_1_0_0.Args[0] { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpRsh32Ux64 { + break + } + if v_1_0_0_1.Type != t { + break + } + _ = v_1_0_0_1.Args[1] + v_1_0_0_1_0 := v_1_0_0_1.Args[0] + if v_1_0_0_1_0.Op != OpRsh32x64 { + break + } + if v_1_0_0_1_0.Type != t { + break + } + _ = v_1_0_0_1_0.Args[1] + if n != v_1_0_0_1_0.Args[0] { + break + } + v_1_0_0_1_0_1 := v_1_0_0_1_0.Args[1] + if v_1_0_0_1_0_1.Op != OpConst64 { + break + } + if v_1_0_0_1_0_1.Type != typ.UInt64 { + break + } + if v_1_0_0_1_0_1.AuxInt != 31 { + break + } + v_1_0_0_1_1 := v_1_0_0_1.Args[1] + if v_1_0_0_1_1.Op != OpConst64 { + break + } + if v_1_0_0_1_1.Type != typ.UInt64 { + break + } + kbar := v_1_0_0_1_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpConst64 { + break + } + if v_1_0_1.Type != typ.UInt64 { + break + } + k := v_1_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst64 { + break + } + if v_1_1.Type != typ.UInt64 { + break + } + if v_1_1.AuxInt != k { + break + } + if !(k > 0 && k < 31 && kbar == 32-k) { + break + } + v.reset(OpEq32) + v0 := b.NewValue0(v.Pos, OpAnd32, t) + v0.AddArg(n) + v1 := b.NewValue0(v.Pos, OpConst32, t) + v1.AuxInt = int64(1< (Rsh32Ux64 (Rsh32x64 n (Const64 [31])) (Const64 [kbar])) n) (Const64 [k])) (Const64 [k]))) + // cond: k > 0 && k < 31 && kbar == 32 - k + // result: (Eq32 (And32 n (Const32 [int64(1< [0])) + for { + _ = v.Args[1] + n := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpLsh32x64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpRsh32x64 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpAdd32 { + break + } + t := v_1_0_0.Type + _ = v_1_0_0.Args[1] + v_1_0_0_0 := v_1_0_0.Args[0] + if v_1_0_0_0.Op != OpRsh32Ux64 { + break + } + if v_1_0_0_0.Type != t { + break + } + _ = v_1_0_0_0.Args[1] + v_1_0_0_0_0 := v_1_0_0_0.Args[0] + if v_1_0_0_0_0.Op != OpRsh32x64 { + break + } + if v_1_0_0_0_0.Type != t { + break + } + _ = v_1_0_0_0_0.Args[1] + if n != v_1_0_0_0_0.Args[0] { + break + } + v_1_0_0_0_0_1 := v_1_0_0_0_0.Args[1] + if v_1_0_0_0_0_1.Op != OpConst64 { + break + } + if v_1_0_0_0_0_1.Type != typ.UInt64 { + break + } + if v_1_0_0_0_0_1.AuxInt != 31 { + break + } + v_1_0_0_0_1 := v_1_0_0_0.Args[1] + if v_1_0_0_0_1.Op != OpConst64 { + break + } + if v_1_0_0_0_1.Type != typ.UInt64 { + break + } + kbar := v_1_0_0_0_1.AuxInt + if n != v_1_0_0.Args[1] { + break + } + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpConst64 { + break + } + if v_1_0_1.Type != typ.UInt64 { + break + } + k := v_1_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst64 { + break + } + if v_1_1.Type != typ.UInt64 { + break + } + if v_1_1.AuxInt != k { + break + } + if !(k > 0 && k < 31 && kbar == 32-k) { + break + } + v.reset(OpEq32) + v0 := b.NewValue0(v.Pos, OpAnd32, t) + v0.AddArg(n) + v1 := b.NewValue0(v.Pos, OpConst32, t) + v1.AuxInt = int64(1< n (Rsh32Ux64 (Rsh32x64 n (Const64 [31])) (Const64 [kbar]))) (Const64 [k])) (Const64 [k])) n) + // cond: k > 0 && k < 31 && kbar == 32 - k + // result: (Eq32 (And32 n (Const32 [int64(1< [0])) + for { + n := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpLsh32x64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpRsh32x64 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpAdd32 { + break + } + t := v_0_0_0.Type + _ = v_0_0_0.Args[1] + if n != v_0_0_0.Args[0] { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpRsh32Ux64 { + break + } + if v_0_0_0_1.Type != t { + break + } + _ = v_0_0_0_1.Args[1] + v_0_0_0_1_0 := v_0_0_0_1.Args[0] + if v_0_0_0_1_0.Op != OpRsh32x64 { + break + } + if v_0_0_0_1_0.Type != t { + break + } + _ = v_0_0_0_1_0.Args[1] + if n != v_0_0_0_1_0.Args[0] { + break + } + v_0_0_0_1_0_1 := v_0_0_0_1_0.Args[1] + if v_0_0_0_1_0_1.Op != OpConst64 { + break + } + if v_0_0_0_1_0_1.Type != typ.UInt64 { + break + } + if v_0_0_0_1_0_1.AuxInt != 31 { + break + } + v_0_0_0_1_1 := v_0_0_0_1.Args[1] + if v_0_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_0_1_1.Type != typ.UInt64 { + break + } + kbar := v_0_0_0_1_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpConst64 { + break + } + if v_0_0_1.Type != typ.UInt64 { + break + } + k := v_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + if v_0_1.Type != typ.UInt64 { + break + } + if v_0_1.AuxInt != k { + break + } + if !(k > 0 && k < 31 && kbar == 32-k) { + break + } + v.reset(OpEq32) + v0 := b.NewValue0(v.Pos, OpAnd32, t) + v0.AddArg(n) + v1 := b.NewValue0(v.Pos, OpConst32, t) + v1.AuxInt = int64(1< (Rsh32Ux64 (Rsh32x64 n (Const64 [31])) (Const64 [kbar])) n) (Const64 [k])) (Const64 [k])) n) + // cond: k > 0 && k < 31 && kbar == 32 - k + // result: (Eq32 (And32 n (Const32 [int64(1< [0])) + for { + n := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpLsh32x64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpRsh32x64 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpAdd32 { + break + } + t := v_0_0_0.Type + _ = v_0_0_0.Args[1] + v_0_0_0_0 := v_0_0_0.Args[0] + if v_0_0_0_0.Op != OpRsh32Ux64 { + break + } + if v_0_0_0_0.Type != t { + break + } + _ = v_0_0_0_0.Args[1] + v_0_0_0_0_0 := v_0_0_0_0.Args[0] + if v_0_0_0_0_0.Op != OpRsh32x64 { + break + } + if v_0_0_0_0_0.Type != t { + break + } + _ = v_0_0_0_0_0.Args[1] + if n != v_0_0_0_0_0.Args[0] { + break + } + v_0_0_0_0_0_1 := v_0_0_0_0_0.Args[1] + if v_0_0_0_0_0_1.Op != OpConst64 { + break + } + if v_0_0_0_0_0_1.Type != typ.UInt64 { + break + } + if v_0_0_0_0_0_1.AuxInt != 31 { + break + } + v_0_0_0_0_1 := v_0_0_0_0.Args[1] + if v_0_0_0_0_1.Op != OpConst64 { + break + } + if v_0_0_0_0_1.Type != typ.UInt64 { + break + } + kbar := v_0_0_0_0_1.AuxInt + if n != v_0_0_0.Args[1] { + break + } + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpConst64 { + break + } + if v_0_0_1.Type != typ.UInt64 { + break + } + k := v_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + if v_0_1.Type != typ.UInt64 { + break + } + if v_0_1.AuxInt != k { + break + } + if !(k > 0 && k < 31 && kbar == 32-k) { + break + } + v.reset(OpEq32) + v0 := b.NewValue0(v.Pos, OpAnd32, t) + v0.AddArg(n) + v1 := b.NewValue0(v.Pos, OpConst32, t) + v1.AuxInt = int64(1< (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst64 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpRsh64Ux64 { + break + } + _ = v_1_1.Args[1] + mul := v_1_1.Args[0] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpConst64 { + break + } + s := v_1_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64, c).m/2) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + // match: (Eq64 x (Mul64 (Const64 [c]) (Rsh64Ux64 mul:(Hmul64u x (Const64 [m])) (Const64 [s])))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64,c).m/2) && s == umagic(64,c).s-1 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst64 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpRsh64Ux64 { + break + } + _ = v_1_1.Args[1] + mul := v_1_1.Args[0] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpConst64 { + break + } + s := v_1_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64, c).m/2) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + // match: (Eq64 x (Mul64 (Rsh64Ux64 mul:(Hmul64u (Const64 [m]) x) (Const64 [s])) (Const64 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64,c).m/2) && s == umagic(64,c).s-1 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_0.Args[1] + mul := v_1_0.Args[0] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpConst64 { + break + } + s := v_1_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst64 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64, c).m/2) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + return false +} +func rewriteValuegeneric_OpEq64_10(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Eq64 x (Mul64 (Rsh64Ux64 mul:(Hmul64u x (Const64 [m])) (Const64 [s])) (Const64 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64,c).m/2) && s == umagic(64,c).s-1 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_0.Args[1] + mul := v_1_0.Args[0] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpConst64 { + break + } + s := v_1_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst64 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64, c).m/2) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + // match: (Eq64 (Mul64 (Const64 [c]) (Rsh64Ux64 mul:(Hmul64u (Const64 [m]) x) (Const64 [s]))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64,c).m/2) && s == umagic(64,c).s-1 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst64 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpRsh64Ux64 { + break + } + _ = v_0_1.Args[1] + mul := v_0_1.Args[0] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpConst64 { + break + } + s := v_0_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64, c).m/2) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + // match: (Eq64 (Mul64 (Const64 [c]) (Rsh64Ux64 mul:(Hmul64u x (Const64 [m])) (Const64 [s]))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64,c).m/2) && s == umagic(64,c).s-1 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst64 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpRsh64Ux64 { + break + } + _ = v_0_1.Args[1] + mul := v_0_1.Args[0] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpConst64 { + break + } + s := v_0_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64, c).m/2) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + // match: (Eq64 (Mul64 (Rsh64Ux64 mul:(Hmul64u (Const64 [m]) x) (Const64 [s])) (Const64 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64,c).m/2) && s == umagic(64,c).s-1 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_0.Args[1] + mul := v_0_0.Args[0] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64, c).m/2) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + // match: (Eq64 (Mul64 (Rsh64Ux64 mul:(Hmul64u x (Const64 [m])) (Const64 [s])) (Const64 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64,c).m/2) && s == umagic(64,c).s-1 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_0.Args[1] + mul := v_0_0.Args[0] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+umagic(64, c).m/2) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + // match: (Eq64 x (Mul64 (Const64 [c]) (Rsh64Ux64 mul:(Hmul64u (Const64 [m]) (Rsh64Ux64 x (Const64 [1]))) (Const64 [s])))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64,c).m+1)/2) && s == umagic(64,c).s-2 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst64 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpRsh64Ux64 { + break + } + _ = v_1_1.Args[1] + mul := v_1_1.Args[0] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpRsh64Ux64 { + break + } + _ = mul_1.Args[1] + if x != mul_1.Args[0] { + break + } + mul_1_1 := mul_1.Args[1] + if mul_1_1.Op != OpConst64 { + break + } + if mul_1_1.AuxInt != 1 { + break + } + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpConst64 { + break + } + s := v_1_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64, c).m+1)/2) && s == umagic(64, c).s-2 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + // match: (Eq64 x (Mul64 (Const64 [c]) (Rsh64Ux64 mul:(Hmul64u (Rsh64Ux64 x (Const64 [1])) (Const64 [m])) (Const64 [s])))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64,c).m+1)/2) && s == umagic(64,c).s-2 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst64 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpRsh64Ux64 { + break + } + _ = v_1_1.Args[1] + mul := v_1_1.Args[0] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpRsh64Ux64 { + break + } + _ = mul_0.Args[1] + if x != mul_0.Args[0] { + break + } + mul_0_1 := mul_0.Args[1] + if mul_0_1.Op != OpConst64 { + break + } + if mul_0_1.AuxInt != 1 { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpConst64 { + break + } + s := v_1_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64, c).m+1)/2) && s == umagic(64, c).s-2 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + // match: (Eq64 x (Mul64 (Rsh64Ux64 mul:(Hmul64u (Const64 [m]) (Rsh64Ux64 x (Const64 [1]))) (Const64 [s])) (Const64 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64,c).m+1)/2) && s == umagic(64,c).s-2 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_0.Args[1] + mul := v_1_0.Args[0] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpRsh64Ux64 { + break + } + _ = mul_1.Args[1] + if x != mul_1.Args[0] { + break + } + mul_1_1 := mul_1.Args[1] + if mul_1_1.Op != OpConst64 { + break + } + if mul_1_1.AuxInt != 1 { + break + } + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpConst64 { + break + } + s := v_1_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst64 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64, c).m+1)/2) && s == umagic(64, c).s-2 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + // match: (Eq64 x (Mul64 (Rsh64Ux64 mul:(Hmul64u (Rsh64Ux64 x (Const64 [1])) (Const64 [m])) (Const64 [s])) (Const64 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64,c).m+1)/2) && s == umagic(64,c).s-2 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_0.Args[1] + mul := v_1_0.Args[0] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpRsh64Ux64 { + break + } + _ = mul_0.Args[1] + if x != mul_0.Args[0] { + break + } + mul_0_1 := mul_0.Args[1] + if mul_0_1.Op != OpConst64 { + break + } + if mul_0_1.AuxInt != 1 { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpConst64 { + break + } + s := v_1_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst64 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64, c).m+1)/2) && s == umagic(64, c).s-2 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + // match: (Eq64 (Mul64 (Const64 [c]) (Rsh64Ux64 mul:(Hmul64u (Const64 [m]) (Rsh64Ux64 x (Const64 [1]))) (Const64 [s]))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64,c).m+1)/2) && s == umagic(64,c).s-2 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst64 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpRsh64Ux64 { + break + } + _ = v_0_1.Args[1] + mul := v_0_1.Args[0] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpRsh64Ux64 { + break + } + _ = mul_1.Args[1] + if x != mul_1.Args[0] { + break + } + mul_1_1 := mul_1.Args[1] + if mul_1_1.Op != OpConst64 { + break + } + if mul_1_1.AuxInt != 1 { + break + } + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpConst64 { + break + } + s := v_0_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64, c).m+1)/2) && s == umagic(64, c).s-2 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + return false +} +func rewriteValuegeneric_OpEq64_20(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Eq64 (Mul64 (Const64 [c]) (Rsh64Ux64 mul:(Hmul64u (Rsh64Ux64 x (Const64 [1])) (Const64 [m])) (Const64 [s]))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64,c).m+1)/2) && s == umagic(64,c).s-2 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst64 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpRsh64Ux64 { + break + } + _ = v_0_1.Args[1] + mul := v_0_1.Args[0] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpRsh64Ux64 { + break + } + _ = mul_0.Args[1] + if x != mul_0.Args[0] { + break + } + mul_0_1 := mul_0.Args[1] + if mul_0_1.Op != OpConst64 { + break + } + if mul_0_1.AuxInt != 1 { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpConst64 { + break + } + s := v_0_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64, c).m+1)/2) && s == umagic(64, c).s-2 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + // match: (Eq64 (Mul64 (Rsh64Ux64 mul:(Hmul64u (Const64 [m]) (Rsh64Ux64 x (Const64 [1]))) (Const64 [s])) (Const64 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64,c).m+1)/2) && s == umagic(64,c).s-2 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_0.Args[1] + mul := v_0_0.Args[0] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpRsh64Ux64 { + break + } + _ = mul_1.Args[1] + if x != mul_1.Args[0] { + break + } + mul_1_1 := mul_1.Args[1] + if mul_1_1.Op != OpConst64 { + break + } + if mul_1_1.AuxInt != 1 { + break + } + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64, c).m+1)/2) && s == umagic(64, c).s-2 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + // match: (Eq64 (Mul64 (Rsh64Ux64 mul:(Hmul64u (Rsh64Ux64 x (Const64 [1])) (Const64 [m])) (Const64 [s])) (Const64 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64,c).m+1)/2) && s == umagic(64,c).s-2 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_0.Args[1] + mul := v_0_0.Args[0] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpRsh64Ux64 { + break + } + _ = mul_0.Args[1] + if x != mul_0.Args[0] { + break + } + mul_0_1 := mul_0.Args[1] + if mul_0_1.Op != OpConst64 { + break + } + if mul_0_1.AuxInt != 1 { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<63+(umagic(64, c).m+1)/2) && s == umagic(64, c).s-2 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + // match: (Eq64 x (Mul64 (Const64 [c]) (Rsh64Ux64 (Avg64u x mul:(Hmul64u (Const64 [m]) x)) (Const64 [s])))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64,c).m) && s == umagic(64,c).s-1 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst64 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpRsh64Ux64 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpAvg64u { + break + } + _ = v_1_1_0.Args[1] + if x != v_1_1_0.Args[0] { + break + } + mul := v_1_1_0.Args[1] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpConst64 { + break + } + s := v_1_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64, c).m) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + // match: (Eq64 x (Mul64 (Const64 [c]) (Rsh64Ux64 (Avg64u x mul:(Hmul64u x (Const64 [m]))) (Const64 [s])))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64,c).m) && s == umagic(64,c).s-1 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst64 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpRsh64Ux64 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpAvg64u { + break + } + _ = v_1_1_0.Args[1] + if x != v_1_1_0.Args[0] { + break + } + mul := v_1_1_0.Args[1] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpConst64 { + break + } + s := v_1_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64, c).m) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + // match: (Eq64 x (Mul64 (Rsh64Ux64 (Avg64u x mul:(Hmul64u (Const64 [m]) x)) (Const64 [s])) (Const64 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64,c).m) && s == umagic(64,c).s-1 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpAvg64u { + break + } + _ = v_1_0_0.Args[1] + if x != v_1_0_0.Args[0] { + break + } + mul := v_1_0_0.Args[1] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpConst64 { + break + } + s := v_1_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst64 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64, c).m) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + // match: (Eq64 x (Mul64 (Rsh64Ux64 (Avg64u x mul:(Hmul64u x (Const64 [m]))) (Const64 [s])) (Const64 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64,c).m) && s == umagic(64,c).s-1 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpRsh64Ux64 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpAvg64u { + break + } + _ = v_1_0_0.Args[1] + if x != v_1_0_0.Args[0] { + break + } + mul := v_1_0_0.Args[1] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpConst64 { + break + } + s := v_1_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst64 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64, c).m) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + // match: (Eq64 (Mul64 (Const64 [c]) (Rsh64Ux64 (Avg64u x mul:(Hmul64u (Const64 [m]) x)) (Const64 [s]))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64,c).m) && s == umagic(64,c).s-1 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst64 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpRsh64Ux64 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpAvg64u { + break + } + _ = v_0_1_0.Args[1] + if x != v_0_1_0.Args[0] { + break + } + mul := v_0_1_0.Args[1] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpConst64 { + break + } + s := v_0_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64, c).m) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + // match: (Eq64 (Mul64 (Const64 [c]) (Rsh64Ux64 (Avg64u x mul:(Hmul64u x (Const64 [m]))) (Const64 [s]))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64,c).m) && s == umagic(64,c).s-1 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst64 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpRsh64Ux64 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpAvg64u { + break + } + _ = v_0_1_0.Args[1] + if x != v_0_1_0.Args[0] { + break + } + mul := v_0_1_0.Args[1] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpConst64 { + break + } + s := v_0_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64, c).m) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + // match: (Eq64 (Mul64 (Rsh64Ux64 (Avg64u x mul:(Hmul64u (Const64 [m]) x)) (Const64 [s])) (Const64 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64,c).m) && s == umagic(64,c).s-1 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpAvg64u { + break + } + _ = v_0_0_0.Args[1] + if x != v_0_0_0.Args[0] { + break + } + mul := v_0_0_0.Args[1] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64, c).m) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + return false +} +func rewriteValuegeneric_OpEq64_30(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Eq64 (Mul64 (Rsh64Ux64 (Avg64u x mul:(Hmul64u x (Const64 [m]))) (Const64 [s])) (Const64 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64,c).m) && s == umagic(64,c).s-1 && x.Op != OpConst64 && udivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Mul64 (Const64 [int64(udivisible(64,c).m)]) x) (Const64 [int64(64-udivisible(64,c).k)]) ) (Const64 [int64(udivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpRsh64Ux64 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpAvg64u { + break + } + _ = v_0_0_0.Args[1] + if x != v_0_0_0.Args[0] { + break + } + mul := v_0_0_0.Args[1] + if mul.Op != OpHmul64u { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(umagic(64, c).m) && s == umagic(64, c).s-1 && x.Op != OpConst64 && udivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v2.AuxInt = int64(udivisible(64, c).m) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(64 - udivisible(64, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(udivisible(64, c).max) + v.AddArg(v4) + return true + } + // match: (Eq64 x (Mul64 (Const64 [c]) (Sub64 (Rsh64x64 mul:(Hmul64 (Const64 [m]) x) (Const64 [s])) (Rsh64x64 x (Const64 [63]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m/2) && s == smagic(64,c).s-1 && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst64 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpSub64 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh64x64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpRsh64x64 { + break + } + _ = v_1_1_1.Args[1] + if x != v_1_1_1.Args[0] { + break + } + v_1_1_1_1 := v_1_1_1.Args[1] + if v_1_1_1_1.Op != OpConst64 { + break + } + if v_1_1_1_1.AuxInt != 63 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m/2) && s == smagic(64, c).s-1 && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 x (Mul64 (Const64 [c]) (Sub64 (Rsh64x64 mul:(Hmul64 x (Const64 [m])) (Const64 [s])) (Rsh64x64 x (Const64 [63]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m/2) && s == smagic(64,c).s-1 && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst64 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpSub64 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh64x64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpRsh64x64 { + break + } + _ = v_1_1_1.Args[1] + if x != v_1_1_1.Args[0] { + break + } + v_1_1_1_1 := v_1_1_1.Args[1] + if v_1_1_1_1.Op != OpConst64 { + break + } + if v_1_1_1_1.AuxInt != 63 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m/2) && s == smagic(64, c).s-1 && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 x (Mul64 (Sub64 (Rsh64x64 mul:(Hmul64 (Const64 [m]) x) (Const64 [s])) (Rsh64x64 x (Const64 [63]))) (Const64 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m/2) && s == smagic(64,c).s-1 && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpSub64 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh64x64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpRsh64x64 { + break + } + _ = v_1_0_1.Args[1] + if x != v_1_0_1.Args[0] { + break + } + v_1_0_1_1 := v_1_0_1.Args[1] + if v_1_0_1_1.Op != OpConst64 { + break + } + if v_1_0_1_1.AuxInt != 63 { + break + } + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst64 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m/2) && s == smagic(64, c).s-1 && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 x (Mul64 (Sub64 (Rsh64x64 mul:(Hmul64 x (Const64 [m])) (Const64 [s])) (Rsh64x64 x (Const64 [63]))) (Const64 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m/2) && s == smagic(64,c).s-1 && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpSub64 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh64x64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpRsh64x64 { + break + } + _ = v_1_0_1.Args[1] + if x != v_1_0_1.Args[0] { + break + } + v_1_0_1_1 := v_1_0_1.Args[1] + if v_1_0_1_1.Op != OpConst64 { + break + } + if v_1_0_1_1.AuxInt != 63 { + break + } + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst64 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m/2) && s == smagic(64, c).s-1 && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 (Mul64 (Const64 [c]) (Sub64 (Rsh64x64 mul:(Hmul64 (Const64 [m]) x) (Const64 [s])) (Rsh64x64 x (Const64 [63])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m/2) && s == smagic(64,c).s-1 && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst64 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpSub64 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh64x64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpRsh64x64 { + break + } + _ = v_0_1_1.Args[1] + if x != v_0_1_1.Args[0] { + break + } + v_0_1_1_1 := v_0_1_1.Args[1] + if v_0_1_1_1.Op != OpConst64 { + break + } + if v_0_1_1_1.AuxInt != 63 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m/2) && s == smagic(64, c).s-1 && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 (Mul64 (Const64 [c]) (Sub64 (Rsh64x64 mul:(Hmul64 x (Const64 [m])) (Const64 [s])) (Rsh64x64 x (Const64 [63])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m/2) && s == smagic(64,c).s-1 && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst64 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpSub64 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh64x64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpRsh64x64 { + break + } + _ = v_0_1_1.Args[1] + if x != v_0_1_1.Args[0] { + break + } + v_0_1_1_1 := v_0_1_1.Args[1] + if v_0_1_1_1.Op != OpConst64 { + break + } + if v_0_1_1_1.AuxInt != 63 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m/2) && s == smagic(64, c).s-1 && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 (Mul64 (Sub64 (Rsh64x64 mul:(Hmul64 (Const64 [m]) x) (Const64 [s])) (Rsh64x64 x (Const64 [63]))) (Const64 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m/2) && s == smagic(64,c).s-1 && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpSub64 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh64x64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpRsh64x64 { + break + } + _ = v_0_0_1.Args[1] + if x != v_0_0_1.Args[0] { + break + } + v_0_0_1_1 := v_0_0_1.Args[1] + if v_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_1_1.AuxInt != 63 { + break + } + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m/2) && s == smagic(64, c).s-1 && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 (Mul64 (Sub64 (Rsh64x64 mul:(Hmul64 x (Const64 [m])) (Const64 [s])) (Rsh64x64 x (Const64 [63]))) (Const64 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m/2) && s == smagic(64,c).s-1 && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpSub64 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh64x64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpRsh64x64 { + break + } + _ = v_0_0_1.Args[1] + if x != v_0_0_1.Args[0] { + break + } + v_0_0_1_1 := v_0_0_1.Args[1] + if v_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_1_1.AuxInt != 63 { + break + } + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m/2) && s == smagic(64, c).s-1 && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 x (Mul64 (Const64 [c]) (Sub64 (Rsh64x64 (Add64 mul:(Hmul64 (Const64 [m]) x) x) (Const64 [s])) (Rsh64x64 x (Const64 [63]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m) && s == smagic(64,c).s && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst64 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpSub64 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh64x64 { + break + } + _ = v_1_1_0.Args[1] + v_1_1_0_0 := v_1_1_0.Args[0] + if v_1_1_0_0.Op != OpAdd64 { + break + } + _ = v_1_1_0_0.Args[1] + mul := v_1_1_0_0.Args[0] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + if x != v_1_1_0_0.Args[1] { + break + } + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpRsh64x64 { + break + } + _ = v_1_1_1.Args[1] + if x != v_1_1_1.Args[0] { + break + } + v_1_1_1_1 := v_1_1_1.Args[1] + if v_1_1_1_1.Op != OpConst64 { + break + } + if v_1_1_1_1.AuxInt != 63 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + return false +} +func rewriteValuegeneric_OpEq64_40(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Eq64 x (Mul64 (Const64 [c]) (Sub64 (Rsh64x64 (Add64 mul:(Hmul64 x (Const64 [m])) x) (Const64 [s])) (Rsh64x64 x (Const64 [63]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m) && s == smagic(64,c).s && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst64 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpSub64 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh64x64 { + break + } + _ = v_1_1_0.Args[1] + v_1_1_0_0 := v_1_1_0.Args[0] + if v_1_1_0_0.Op != OpAdd64 { + break + } + _ = v_1_1_0_0.Args[1] + mul := v_1_1_0_0.Args[0] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + if x != v_1_1_0_0.Args[1] { + break + } + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpRsh64x64 { + break + } + _ = v_1_1_1.Args[1] + if x != v_1_1_1.Args[0] { + break + } + v_1_1_1_1 := v_1_1_1.Args[1] + if v_1_1_1_1.Op != OpConst64 { + break + } + if v_1_1_1_1.AuxInt != 63 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 x (Mul64 (Const64 [c]) (Sub64 (Rsh64x64 (Add64 x mul:(Hmul64 (Const64 [m]) x)) (Const64 [s])) (Rsh64x64 x (Const64 [63]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m) && s == smagic(64,c).s && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst64 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpSub64 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh64x64 { + break + } + _ = v_1_1_0.Args[1] + v_1_1_0_0 := v_1_1_0.Args[0] + if v_1_1_0_0.Op != OpAdd64 { + break + } + _ = v_1_1_0_0.Args[1] + if x != v_1_1_0_0.Args[0] { + break + } + mul := v_1_1_0_0.Args[1] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpRsh64x64 { + break + } + _ = v_1_1_1.Args[1] + if x != v_1_1_1.Args[0] { + break + } + v_1_1_1_1 := v_1_1_1.Args[1] + if v_1_1_1_1.Op != OpConst64 { + break + } + if v_1_1_1_1.AuxInt != 63 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 x (Mul64 (Const64 [c]) (Sub64 (Rsh64x64 (Add64 x mul:(Hmul64 x (Const64 [m]))) (Const64 [s])) (Rsh64x64 x (Const64 [63]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m) && s == smagic(64,c).s && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst64 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpSub64 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh64x64 { + break + } + _ = v_1_1_0.Args[1] + v_1_1_0_0 := v_1_1_0.Args[0] + if v_1_1_0_0.Op != OpAdd64 { + break + } + _ = v_1_1_0_0.Args[1] + if x != v_1_1_0_0.Args[0] { + break + } + mul := v_1_1_0_0.Args[1] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpRsh64x64 { + break + } + _ = v_1_1_1.Args[1] + if x != v_1_1_1.Args[0] { + break + } + v_1_1_1_1 := v_1_1_1.Args[1] + if v_1_1_1_1.Op != OpConst64 { + break + } + if v_1_1_1_1.AuxInt != 63 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 x (Mul64 (Sub64 (Rsh64x64 (Add64 mul:(Hmul64 (Const64 [m]) x) x) (Const64 [s])) (Rsh64x64 x (Const64 [63]))) (Const64 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m) && s == smagic(64,c).s && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpSub64 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh64x64 { + break + } + _ = v_1_0_0.Args[1] + v_1_0_0_0 := v_1_0_0.Args[0] + if v_1_0_0_0.Op != OpAdd64 { + break + } + _ = v_1_0_0_0.Args[1] + mul := v_1_0_0_0.Args[0] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + if x != v_1_0_0_0.Args[1] { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpRsh64x64 { + break + } + _ = v_1_0_1.Args[1] + if x != v_1_0_1.Args[0] { + break + } + v_1_0_1_1 := v_1_0_1.Args[1] + if v_1_0_1_1.Op != OpConst64 { + break + } + if v_1_0_1_1.AuxInt != 63 { + break + } + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst64 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 x (Mul64 (Sub64 (Rsh64x64 (Add64 mul:(Hmul64 x (Const64 [m])) x) (Const64 [s])) (Rsh64x64 x (Const64 [63]))) (Const64 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m) && s == smagic(64,c).s && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpSub64 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh64x64 { + break + } + _ = v_1_0_0.Args[1] + v_1_0_0_0 := v_1_0_0.Args[0] + if v_1_0_0_0.Op != OpAdd64 { + break + } + _ = v_1_0_0_0.Args[1] + mul := v_1_0_0_0.Args[0] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + if x != v_1_0_0_0.Args[1] { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpRsh64x64 { + break + } + _ = v_1_0_1.Args[1] + if x != v_1_0_1.Args[0] { + break + } + v_1_0_1_1 := v_1_0_1.Args[1] + if v_1_0_1_1.Op != OpConst64 { + break + } + if v_1_0_1_1.AuxInt != 63 { + break + } + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst64 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 x (Mul64 (Sub64 (Rsh64x64 (Add64 x mul:(Hmul64 (Const64 [m]) x)) (Const64 [s])) (Rsh64x64 x (Const64 [63]))) (Const64 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m) && s == smagic(64,c).s && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpSub64 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh64x64 { + break + } + _ = v_1_0_0.Args[1] + v_1_0_0_0 := v_1_0_0.Args[0] + if v_1_0_0_0.Op != OpAdd64 { + break + } + _ = v_1_0_0_0.Args[1] + if x != v_1_0_0_0.Args[0] { + break + } + mul := v_1_0_0_0.Args[1] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpRsh64x64 { + break + } + _ = v_1_0_1.Args[1] + if x != v_1_0_1.Args[0] { + break + } + v_1_0_1_1 := v_1_0_1.Args[1] + if v_1_0_1_1.Op != OpConst64 { + break + } + if v_1_0_1_1.AuxInt != 63 { + break + } + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst64 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 x (Mul64 (Sub64 (Rsh64x64 (Add64 x mul:(Hmul64 x (Const64 [m]))) (Const64 [s])) (Rsh64x64 x (Const64 [63]))) (Const64 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m) && s == smagic(64,c).s && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpSub64 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh64x64 { + break + } + _ = v_1_0_0.Args[1] + v_1_0_0_0 := v_1_0_0.Args[0] + if v_1_0_0_0.Op != OpAdd64 { + break + } + _ = v_1_0_0_0.Args[1] + if x != v_1_0_0_0.Args[0] { + break + } + mul := v_1_0_0_0.Args[1] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpRsh64x64 { + break + } + _ = v_1_0_1.Args[1] + if x != v_1_0_1.Args[0] { + break + } + v_1_0_1_1 := v_1_0_1.Args[1] + if v_1_0_1_1.Op != OpConst64 { + break + } + if v_1_0_1_1.AuxInt != 63 { + break + } + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst64 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 (Mul64 (Const64 [c]) (Sub64 (Rsh64x64 (Add64 mul:(Hmul64 (Const64 [m]) x) x) (Const64 [s])) (Rsh64x64 x (Const64 [63])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m) && s == smagic(64,c).s && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst64 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpSub64 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh64x64 { + break + } + _ = v_0_1_0.Args[1] + v_0_1_0_0 := v_0_1_0.Args[0] + if v_0_1_0_0.Op != OpAdd64 { + break + } + _ = v_0_1_0_0.Args[1] + mul := v_0_1_0_0.Args[0] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + if x != v_0_1_0_0.Args[1] { + break + } + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpRsh64x64 { + break + } + _ = v_0_1_1.Args[1] + if x != v_0_1_1.Args[0] { + break + } + v_0_1_1_1 := v_0_1_1.Args[1] + if v_0_1_1_1.Op != OpConst64 { + break + } + if v_0_1_1_1.AuxInt != 63 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 (Mul64 (Const64 [c]) (Sub64 (Rsh64x64 (Add64 mul:(Hmul64 x (Const64 [m])) x) (Const64 [s])) (Rsh64x64 x (Const64 [63])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m) && s == smagic(64,c).s && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst64 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpSub64 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh64x64 { + break + } + _ = v_0_1_0.Args[1] + v_0_1_0_0 := v_0_1_0.Args[0] + if v_0_1_0_0.Op != OpAdd64 { + break + } + _ = v_0_1_0_0.Args[1] + mul := v_0_1_0_0.Args[0] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + if x != v_0_1_0_0.Args[1] { + break + } + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpRsh64x64 { + break + } + _ = v_0_1_1.Args[1] + if x != v_0_1_1.Args[0] { + break + } + v_0_1_1_1 := v_0_1_1.Args[1] + if v_0_1_1_1.Op != OpConst64 { + break + } + if v_0_1_1_1.AuxInt != 63 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 (Mul64 (Const64 [c]) (Sub64 (Rsh64x64 (Add64 x mul:(Hmul64 (Const64 [m]) x)) (Const64 [s])) (Rsh64x64 x (Const64 [63])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m) && s == smagic(64,c).s && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst64 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpSub64 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh64x64 { + break + } + _ = v_0_1_0.Args[1] + v_0_1_0_0 := v_0_1_0.Args[0] + if v_0_1_0_0.Op != OpAdd64 { + break + } + _ = v_0_1_0_0.Args[1] + if x != v_0_1_0_0.Args[0] { + break + } + mul := v_0_1_0_0.Args[1] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpRsh64x64 { + break + } + _ = v_0_1_1.Args[1] + if x != v_0_1_1.Args[0] { + break + } + v_0_1_1_1 := v_0_1_1.Args[1] + if v_0_1_1_1.Op != OpConst64 { + break + } + if v_0_1_1_1.AuxInt != 63 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + return false +} +func rewriteValuegeneric_OpEq64_50(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Eq64 (Mul64 (Const64 [c]) (Sub64 (Rsh64x64 (Add64 x mul:(Hmul64 x (Const64 [m]))) (Const64 [s])) (Rsh64x64 x (Const64 [63])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m) && s == smagic(64,c).s && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst64 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpSub64 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh64x64 { + break + } + _ = v_0_1_0.Args[1] + v_0_1_0_0 := v_0_1_0.Args[0] + if v_0_1_0_0.Op != OpAdd64 { + break + } + _ = v_0_1_0_0.Args[1] + if x != v_0_1_0_0.Args[0] { + break + } + mul := v_0_1_0_0.Args[1] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpRsh64x64 { + break + } + _ = v_0_1_1.Args[1] + if x != v_0_1_1.Args[0] { + break + } + v_0_1_1_1 := v_0_1_1.Args[1] + if v_0_1_1_1.Op != OpConst64 { + break + } + if v_0_1_1_1.AuxInt != 63 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 (Mul64 (Sub64 (Rsh64x64 (Add64 mul:(Hmul64 (Const64 [m]) x) x) (Const64 [s])) (Rsh64x64 x (Const64 [63]))) (Const64 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m) && s == smagic(64,c).s && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpSub64 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh64x64 { + break + } + _ = v_0_0_0.Args[1] + v_0_0_0_0 := v_0_0_0.Args[0] + if v_0_0_0_0.Op != OpAdd64 { + break + } + _ = v_0_0_0_0.Args[1] + mul := v_0_0_0_0.Args[0] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + if x != v_0_0_0_0.Args[1] { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpRsh64x64 { + break + } + _ = v_0_0_1.Args[1] + if x != v_0_0_1.Args[0] { + break + } + v_0_0_1_1 := v_0_0_1.Args[1] + if v_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_1_1.AuxInt != 63 { + break + } + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 (Mul64 (Sub64 (Rsh64x64 (Add64 mul:(Hmul64 x (Const64 [m])) x) (Const64 [s])) (Rsh64x64 x (Const64 [63]))) (Const64 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m) && s == smagic(64,c).s && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpSub64 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh64x64 { + break + } + _ = v_0_0_0.Args[1] + v_0_0_0_0 := v_0_0_0.Args[0] + if v_0_0_0_0.Op != OpAdd64 { + break + } + _ = v_0_0_0_0.Args[1] + mul := v_0_0_0_0.Args[0] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + if x != v_0_0_0_0.Args[1] { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpRsh64x64 { + break + } + _ = v_0_0_1.Args[1] + if x != v_0_0_1.Args[0] { + break + } + v_0_0_1_1 := v_0_0_1.Args[1] + if v_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_1_1.AuxInt != 63 { + break + } + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 (Mul64 (Sub64 (Rsh64x64 (Add64 x mul:(Hmul64 (Const64 [m]) x)) (Const64 [s])) (Rsh64x64 x (Const64 [63]))) (Const64 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m) && s == smagic(64,c).s && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpSub64 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh64x64 { + break + } + _ = v_0_0_0.Args[1] + v_0_0_0_0 := v_0_0_0.Args[0] + if v_0_0_0_0.Op != OpAdd64 { + break + } + _ = v_0_0_0_0.Args[1] + if x != v_0_0_0_0.Args[0] { + break + } + mul := v_0_0_0_0.Args[1] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst64 { + break + } + m := mul_0.AuxInt + if x != mul.Args[1] { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpRsh64x64 { + break + } + _ = v_0_0_1.Args[1] + if x != v_0_0_1.Args[0] { + break + } + v_0_0_1_1 := v_0_0_1.Args[1] + if v_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_1_1.AuxInt != 63 { + break + } + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 (Mul64 (Sub64 (Rsh64x64 (Add64 x mul:(Hmul64 x (Const64 [m]))) (Const64 [s])) (Rsh64x64 x (Const64 [63]))) (Const64 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64,c).m) && s == smagic(64,c).s && x.Op != OpConst64 && sdivisibleOK(64,c) + // result: (Leq64U (RotateLeft64 (Add64 (Mul64 (Const64 [int64(sdivisible(64,c).m)]) x) (Const64 [int64(sdivisible(64,c).a)]) ) (Const64 [int64(64-sdivisible(64,c).k)]) ) (Const64 [int64(sdivisible(64,c).max)]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpSub64 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh64x64 { + break + } + _ = v_0_0_0.Args[1] + v_0_0_0_0 := v_0_0_0.Args[0] + if v_0_0_0_0.Op != OpAdd64 { + break + } + _ = v_0_0_0_0.Args[1] + if x != v_0_0_0_0.Args[0] { + break + } + mul := v_0_0_0_0.Args[1] + if mul.Op != OpHmul64 { + break + } + _ = mul.Args[1] + if x != mul.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst64 { + break + } + m := mul_1.AuxInt + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpRsh64x64 { + break + } + _ = v_0_0_1.Args[1] + if x != v_0_0_1.Args[0] { + break + } + v_0_0_1_1 := v_0_0_1.Args[1] + if v_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_1_1.AuxInt != 63 { + break + } + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(64, c).m) && s == smagic(64, c).s && x.Op != OpConst64 && sdivisibleOK(64, c)) { + break + } + v.reset(OpLeq64U) + v0 := b.NewValue0(v.Pos, OpRotateLeft64, typ.UInt64) + v1 := b.NewValue0(v.Pos, OpAdd64, typ.UInt64) + v2 := b.NewValue0(v.Pos, OpMul64, typ.UInt64) + v3 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v3.AuxInt = int64(sdivisible(64, c).m) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v4.AuxInt = int64(sdivisible(64, c).a) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v5.AuxInt = int64(64 - sdivisible(64, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst64, typ.UInt64) + v6.AuxInt = int64(sdivisible(64, c).max) + v.AddArg(v6) + return true + } + // match: (Eq64 n (Lsh64x64 (Rsh64x64 (Add64 n (Rsh64Ux64 (Rsh64x64 n (Const64 [63])) (Const64 [kbar]))) (Const64 [k])) (Const64 [k]))) + // cond: k > 0 && k < 63 && kbar == 64 - k + // result: (Eq64 (And64 n (Const64 [int64(1< [0])) + for { + _ = v.Args[1] + n := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpLsh64x64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpRsh64x64 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpAdd64 { + break + } + t := v_1_0_0.Type + _ = v_1_0_0.Args[1] + if n != v_1_0_0.Args[0] { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpRsh64Ux64 { + break + } + if v_1_0_0_1.Type != t { + break + } + _ = v_1_0_0_1.Args[1] + v_1_0_0_1_0 := v_1_0_0_1.Args[0] + if v_1_0_0_1_0.Op != OpRsh64x64 { + break + } + if v_1_0_0_1_0.Type != t { + break + } + _ = v_1_0_0_1_0.Args[1] + if n != v_1_0_0_1_0.Args[0] { + break + } + v_1_0_0_1_0_1 := v_1_0_0_1_0.Args[1] + if v_1_0_0_1_0_1.Op != OpConst64 { + break + } + if v_1_0_0_1_0_1.Type != typ.UInt64 { + break + } + if v_1_0_0_1_0_1.AuxInt != 63 { + break + } + v_1_0_0_1_1 := v_1_0_0_1.Args[1] + if v_1_0_0_1_1.Op != OpConst64 { + break + } + if v_1_0_0_1_1.Type != typ.UInt64 { + break + } + kbar := v_1_0_0_1_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpConst64 { + break + } + if v_1_0_1.Type != typ.UInt64 { + break + } + k := v_1_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst64 { + break + } + if v_1_1.Type != typ.UInt64 { + break + } + if v_1_1.AuxInt != k { + break + } + if !(k > 0 && k < 63 && kbar == 64-k) { + break + } + v.reset(OpEq64) + v0 := b.NewValue0(v.Pos, OpAnd64, t) + v0.AddArg(n) + v1 := b.NewValue0(v.Pos, OpConst64, t) + v1.AuxInt = int64(1< (Rsh64Ux64 (Rsh64x64 n (Const64 [63])) (Const64 [kbar])) n) (Const64 [k])) (Const64 [k]))) + // cond: k > 0 && k < 63 && kbar == 64 - k + // result: (Eq64 (And64 n (Const64 [int64(1< [0])) + for { + _ = v.Args[1] + n := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpLsh64x64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpRsh64x64 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpAdd64 { + break + } + t := v_1_0_0.Type + _ = v_1_0_0.Args[1] + v_1_0_0_0 := v_1_0_0.Args[0] + if v_1_0_0_0.Op != OpRsh64Ux64 { + break + } + if v_1_0_0_0.Type != t { + break + } + _ = v_1_0_0_0.Args[1] + v_1_0_0_0_0 := v_1_0_0_0.Args[0] + if v_1_0_0_0_0.Op != OpRsh64x64 { + break + } + if v_1_0_0_0_0.Type != t { + break + } + _ = v_1_0_0_0_0.Args[1] + if n != v_1_0_0_0_0.Args[0] { + break + } + v_1_0_0_0_0_1 := v_1_0_0_0_0.Args[1] + if v_1_0_0_0_0_1.Op != OpConst64 { + break + } + if v_1_0_0_0_0_1.Type != typ.UInt64 { + break + } + if v_1_0_0_0_0_1.AuxInt != 63 { + break + } + v_1_0_0_0_1 := v_1_0_0_0.Args[1] + if v_1_0_0_0_1.Op != OpConst64 { + break + } + if v_1_0_0_0_1.Type != typ.UInt64 { + break + } + kbar := v_1_0_0_0_1.AuxInt + if n != v_1_0_0.Args[1] { + break + } + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpConst64 { + break + } + if v_1_0_1.Type != typ.UInt64 { + break + } + k := v_1_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst64 { + break + } + if v_1_1.Type != typ.UInt64 { + break + } + if v_1_1.AuxInt != k { + break + } + if !(k > 0 && k < 63 && kbar == 64-k) { + break + } + v.reset(OpEq64) + v0 := b.NewValue0(v.Pos, OpAnd64, t) + v0.AddArg(n) + v1 := b.NewValue0(v.Pos, OpConst64, t) + v1.AuxInt = int64(1< n (Rsh64Ux64 (Rsh64x64 n (Const64 [63])) (Const64 [kbar]))) (Const64 [k])) (Const64 [k])) n) + // cond: k > 0 && k < 63 && kbar == 64 - k + // result: (Eq64 (And64 n (Const64 [int64(1< [0])) + for { + n := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpLsh64x64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpRsh64x64 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpAdd64 { + break + } + t := v_0_0_0.Type + _ = v_0_0_0.Args[1] + if n != v_0_0_0.Args[0] { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpRsh64Ux64 { + break + } + if v_0_0_0_1.Type != t { + break + } + _ = v_0_0_0_1.Args[1] + v_0_0_0_1_0 := v_0_0_0_1.Args[0] + if v_0_0_0_1_0.Op != OpRsh64x64 { + break + } + if v_0_0_0_1_0.Type != t { + break + } + _ = v_0_0_0_1_0.Args[1] + if n != v_0_0_0_1_0.Args[0] { + break + } + v_0_0_0_1_0_1 := v_0_0_0_1_0.Args[1] + if v_0_0_0_1_0_1.Op != OpConst64 { + break + } + if v_0_0_0_1_0_1.Type != typ.UInt64 { + break + } + if v_0_0_0_1_0_1.AuxInt != 63 { + break + } + v_0_0_0_1_1 := v_0_0_0_1.Args[1] + if v_0_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_0_1_1.Type != typ.UInt64 { + break + } + kbar := v_0_0_0_1_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpConst64 { + break + } + if v_0_0_1.Type != typ.UInt64 { + break + } + k := v_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + if v_0_1.Type != typ.UInt64 { + break + } + if v_0_1.AuxInt != k { + break + } + if !(k > 0 && k < 63 && kbar == 64-k) { + break + } + v.reset(OpEq64) + v0 := b.NewValue0(v.Pos, OpAnd64, t) + v0.AddArg(n) + v1 := b.NewValue0(v.Pos, OpConst64, t) + v1.AuxInt = int64(1< (Rsh64Ux64 (Rsh64x64 n (Const64 [63])) (Const64 [kbar])) n) (Const64 [k])) (Const64 [k])) n) + // cond: k > 0 && k < 63 && kbar == 64 - k + // result: (Eq64 (And64 n (Const64 [int64(1< [0])) + for { + n := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpLsh64x64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpRsh64x64 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpAdd64 { + break + } + t := v_0_0_0.Type + _ = v_0_0_0.Args[1] + v_0_0_0_0 := v_0_0_0.Args[0] + if v_0_0_0_0.Op != OpRsh64Ux64 { + break + } + if v_0_0_0_0.Type != t { + break + } + _ = v_0_0_0_0.Args[1] + v_0_0_0_0_0 := v_0_0_0_0.Args[0] + if v_0_0_0_0_0.Op != OpRsh64x64 { + break + } + if v_0_0_0_0_0.Type != t { + break + } + _ = v_0_0_0_0_0.Args[1] + if n != v_0_0_0_0_0.Args[0] { + break + } + v_0_0_0_0_0_1 := v_0_0_0_0_0.Args[1] + if v_0_0_0_0_0_1.Op != OpConst64 { + break + } + if v_0_0_0_0_0_1.Type != typ.UInt64 { + break + } + if v_0_0_0_0_0_1.AuxInt != 63 { + break + } + v_0_0_0_0_1 := v_0_0_0_0.Args[1] + if v_0_0_0_0_1.Op != OpConst64 { + break + } + if v_0_0_0_0_1.Type != typ.UInt64 { + break + } + kbar := v_0_0_0_0_1.AuxInt + if n != v_0_0_0.Args[1] { + break + } + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpConst64 { + break + } + if v_0_0_1.Type != typ.UInt64 { + break + } + k := v_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + if v_0_1.Type != typ.UInt64 { + break + } + if v_0_1.AuxInt != k { + break + } + if !(k > 0 && k < 63 && kbar == 64-k) { + break + } + v.reset(OpEq64) + v0 := b.NewValue0(v.Pos, OpAnd64, t) + v0.AddArg(n) + v1 := b.NewValue0(v.Pos, OpConst64, t) + v1.AuxInt = int64(1< (ZeroExt8to32 x) (Const32 [c&0xff])) (Const32 [0])) + for { + _ = v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMod8u { + break + } + _ = v_0.Args[1] + x := v_0.Args[0] + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst8 { + break + } + c := v_0_1.AuxInt + v_1 := v.Args[1] + if v_1.Op != OpConst8 { + break + } + if v_1.AuxInt != 0 { + break + } + if !(x.Op != OpConst8 && udivisibleOK(8, c) && !hasSmallRotate(config)) { + break + } + v.reset(OpEq32) + v0 := b.NewValue0(v.Pos, OpMod32u, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) + v1.AddArg(x) + v0.AddArg(v1) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = c & 0xff + v0.AddArg(v2) + v.AddArg(v0) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = 0 + v.AddArg(v3) + return true + } + // match: (Eq8 (Const8 [0]) (Mod8u x (Const8 [c]))) + // cond: x.Op != OpConst8 && udivisibleOK(8,c) && !hasSmallRotate(config) + // result: (Eq32 (Mod32u (ZeroExt8to32 x) (Const32 [c&0xff])) (Const32 [0])) + for { + _ = v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpConst8 { + break + } + if v_0.AuxInt != 0 { + break + } + v_1 := v.Args[1] + if v_1.Op != OpMod8u { + break + } + _ = v_1.Args[1] + x := v_1.Args[0] + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst8 { + break + } + c := v_1_1.AuxInt + if !(x.Op != OpConst8 && udivisibleOK(8, c) && !hasSmallRotate(config)) { + break + } + v.reset(OpEq32) + v0 := b.NewValue0(v.Pos, OpMod32u, typ.UInt32) + v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) + v1.AddArg(x) + v0.AddArg(v1) + v2 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v2.AuxInt = c & 0xff + v0.AddArg(v2) + v.AddArg(v0) + v3 := b.NewValue0(v.Pos, OpConst32, typ.UInt32) + v3.AuxInt = 0 + v.AddArg(v3) + return true + } + // match: (Eq8 (Mod8 x (Const8 [c])) (Const8 [0])) + // cond: x.Op != OpConst8 && sdivisibleOK(8,c) && !hasSmallRotate(config) + // result: (Eq32 (Mod32 (SignExt8to32 x) (Const32 [c])) (Const32 [0])) + for { + _ = v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMod8 { + break + } + _ = v_0.Args[1] + x := v_0.Args[0] + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst8 { + break + } + c := v_0_1.AuxInt + v_1 := v.Args[1] + if v_1.Op != OpConst8 { + break + } + if v_1.AuxInt != 0 { + break + } + if !(x.Op != OpConst8 && sdivisibleOK(8, c) && !hasSmallRotate(config)) { + break + } + v.reset(OpEq32) + v0 := b.NewValue0(v.Pos, OpMod32, typ.Int32) + v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) + v1.AddArg(x) + v0.AddArg(v1) + v2 := b.NewValue0(v.Pos, OpConst32, typ.Int32) + v2.AuxInt = c + v0.AddArg(v2) + v.AddArg(v0) + v3 := b.NewValue0(v.Pos, OpConst32, typ.Int32) + v3.AuxInt = 0 + v.AddArg(v3) + return true + } + return false +} +func rewriteValuegeneric_OpEq8_10(v *Value) bool { + b := v.Block + config := b.Func.Config + typ := &b.Func.Config.Types + // match: (Eq8 (Const8 [0]) (Mod8 x (Const8 [c]))) + // cond: x.Op != OpConst8 && sdivisibleOK(8,c) && !hasSmallRotate(config) + // result: (Eq32 (Mod32 (SignExt8to32 x) (Const32 [c])) (Const32 [0])) + for { + _ = v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpConst8 { + break + } + if v_0.AuxInt != 0 { + break + } + v_1 := v.Args[1] + if v_1.Op != OpMod8 { + break + } + _ = v_1.Args[1] + x := v_1.Args[0] + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst8 { + break + } + c := v_1_1.AuxInt + if !(x.Op != OpConst8 && sdivisibleOK(8, c) && !hasSmallRotate(config)) { + break + } + v.reset(OpEq32) + v0 := b.NewValue0(v.Pos, OpMod32, typ.Int32) + v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) + v1.AddArg(x) + v0.AddArg(v1) + v2 := b.NewValue0(v.Pos, OpConst32, typ.Int32) + v2.AuxInt = c + v0.AddArg(v2) + v.AddArg(v0) + v3 := b.NewValue0(v.Pos, OpConst32, typ.Int32) + v3.AuxInt = 0 + v.AddArg(v3) + return true + } + // match: (Eq8 x (Mul8 (Const8 [c]) (Trunc32to8 (Rsh32Ux64 mul:(Mul32 (Const32 [m]) (ZeroExt8to32 x)) (Const64 [s]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8,c).m) && s == 8+umagic(8,c).s && x.Op != OpConst8 && udivisibleOK(8,c) + // result: (Leq8U (RotateLeft8 (Mul8 (Const8 [int64(int8(udivisible(8,c).m))]) x) (Const8 [int64(8-udivisible(8,c).k)]) ) (Const8 [int64(int8(udivisible(8,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul8 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst8 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpTrunc32to8 { + break + } + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt8to32 { + break + } + if x != mul_1.Args[0] { + break + } + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8, c).m) && s == 8+umagic(8, c).s && x.Op != OpConst8 && udivisibleOK(8, c)) { + break + } + v.reset(OpLeq8U) + v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8) + v1 := b.NewValue0(v.Pos, OpMul8, typ.UInt8) + v2 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v2.AuxInt = int64(int8(udivisible(8, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v3.AuxInt = int64(8 - udivisible(8, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v4.AuxInt = int64(int8(udivisible(8, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq8 x (Mul8 (Const8 [c]) (Trunc32to8 (Rsh32Ux64 mul:(Mul32 (ZeroExt8to32 x) (Const32 [m])) (Const64 [s]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8,c).m) && s == 8+umagic(8,c).s && x.Op != OpConst8 && udivisibleOK(8,c) + // result: (Leq8U (RotateLeft8 (Mul8 (Const8 [int64(int8(udivisible(8,c).m))]) x) (Const8 [int64(8-udivisible(8,c).k)]) ) (Const8 [int64(int8(udivisible(8,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul8 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst8 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpTrunc32to8 { + break + } + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt8to32 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8, c).m) && s == 8+umagic(8, c).s && x.Op != OpConst8 && udivisibleOK(8, c)) { + break + } + v.reset(OpLeq8U) + v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8) + v1 := b.NewValue0(v.Pos, OpMul8, typ.UInt8) + v2 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v2.AuxInt = int64(int8(udivisible(8, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v3.AuxInt = int64(8 - udivisible(8, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v4.AuxInt = int64(int8(udivisible(8, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq8 x (Mul8 (Trunc32to8 (Rsh32Ux64 mul:(Mul32 (Const32 [m]) (ZeroExt8to32 x)) (Const64 [s]))) (Const8 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8,c).m) && s == 8+umagic(8,c).s && x.Op != OpConst8 && udivisibleOK(8,c) + // result: (Leq8U (RotateLeft8 (Mul8 (Const8 [int64(int8(udivisible(8,c).m))]) x) (Const8 [int64(8-udivisible(8,c).k)]) ) (Const8 [int64(int8(udivisible(8,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul8 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpTrunc32to8 { + break + } + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt8to32 { + break + } + if x != mul_1.Args[0] { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst8 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8, c).m) && s == 8+umagic(8, c).s && x.Op != OpConst8 && udivisibleOK(8, c)) { + break + } + v.reset(OpLeq8U) + v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8) + v1 := b.NewValue0(v.Pos, OpMul8, typ.UInt8) + v2 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v2.AuxInt = int64(int8(udivisible(8, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v3.AuxInt = int64(8 - udivisible(8, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v4.AuxInt = int64(int8(udivisible(8, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq8 x (Mul8 (Trunc32to8 (Rsh32Ux64 mul:(Mul32 (ZeroExt8to32 x) (Const32 [m])) (Const64 [s]))) (Const8 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8,c).m) && s == 8+umagic(8,c).s && x.Op != OpConst8 && udivisibleOK(8,c) + // result: (Leq8U (RotateLeft8 (Mul8 (Const8 [int64(int8(udivisible(8,c).m))]) x) (Const8 [int64(8-udivisible(8,c).k)]) ) (Const8 [int64(int8(udivisible(8,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul8 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpTrunc32to8 { + break + } + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt8to32 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst8 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8, c).m) && s == 8+umagic(8, c).s && x.Op != OpConst8 && udivisibleOK(8, c)) { + break + } + v.reset(OpLeq8U) + v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8) + v1 := b.NewValue0(v.Pos, OpMul8, typ.UInt8) + v2 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v2.AuxInt = int64(int8(udivisible(8, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v3.AuxInt = int64(8 - udivisible(8, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v4.AuxInt = int64(int8(udivisible(8, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq8 (Mul8 (Const8 [c]) (Trunc32to8 (Rsh32Ux64 mul:(Mul32 (Const32 [m]) (ZeroExt8to32 x)) (Const64 [s])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8,c).m) && s == 8+umagic(8,c).s && x.Op != OpConst8 && udivisibleOK(8,c) + // result: (Leq8U (RotateLeft8 (Mul8 (Const8 [int64(int8(udivisible(8,c).m))]) x) (Const8 [int64(8-udivisible(8,c).k)]) ) (Const8 [int64(int8(udivisible(8,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul8 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst8 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpTrunc32to8 { + break + } + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt8to32 { + break + } + if x != mul_1.Args[0] { + break + } + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8, c).m) && s == 8+umagic(8, c).s && x.Op != OpConst8 && udivisibleOK(8, c)) { + break + } + v.reset(OpLeq8U) + v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8) + v1 := b.NewValue0(v.Pos, OpMul8, typ.UInt8) + v2 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v2.AuxInt = int64(int8(udivisible(8, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v3.AuxInt = int64(8 - udivisible(8, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v4.AuxInt = int64(int8(udivisible(8, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq8 (Mul8 (Const8 [c]) (Trunc32to8 (Rsh32Ux64 mul:(Mul32 (ZeroExt8to32 x) (Const32 [m])) (Const64 [s])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8,c).m) && s == 8+umagic(8,c).s && x.Op != OpConst8 && udivisibleOK(8,c) + // result: (Leq8U (RotateLeft8 (Mul8 (Const8 [int64(int8(udivisible(8,c).m))]) x) (Const8 [int64(8-udivisible(8,c).k)]) ) (Const8 [int64(int8(udivisible(8,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul8 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst8 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpTrunc32to8 { + break + } + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt8to32 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8, c).m) && s == 8+umagic(8, c).s && x.Op != OpConst8 && udivisibleOK(8, c)) { + break + } + v.reset(OpLeq8U) + v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8) + v1 := b.NewValue0(v.Pos, OpMul8, typ.UInt8) + v2 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v2.AuxInt = int64(int8(udivisible(8, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v3.AuxInt = int64(8 - udivisible(8, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v4.AuxInt = int64(int8(udivisible(8, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq8 (Mul8 (Trunc32to8 (Rsh32Ux64 mul:(Mul32 (Const32 [m]) (ZeroExt8to32 x)) (Const64 [s]))) (Const8 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8,c).m) && s == 8+umagic(8,c).s && x.Op != OpConst8 && udivisibleOK(8,c) + // result: (Leq8U (RotateLeft8 (Mul8 (Const8 [int64(int8(udivisible(8,c).m))]) x) (Const8 [int64(8-udivisible(8,c).k)]) ) (Const8 [int64(int8(udivisible(8,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul8 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpTrunc32to8 { + break + } + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpZeroExt8to32 { + break + } + if x != mul_1.Args[0] { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst8 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8, c).m) && s == 8+umagic(8, c).s && x.Op != OpConst8 && udivisibleOK(8, c)) { + break + } + v.reset(OpLeq8U) + v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8) + v1 := b.NewValue0(v.Pos, OpMul8, typ.UInt8) + v2 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v2.AuxInt = int64(int8(udivisible(8, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v3.AuxInt = int64(8 - udivisible(8, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v4.AuxInt = int64(int8(udivisible(8, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq8 (Mul8 (Trunc32to8 (Rsh32Ux64 mul:(Mul32 (ZeroExt8to32 x) (Const32 [m])) (Const64 [s]))) (Const8 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8,c).m) && s == 8+umagic(8,c).s && x.Op != OpConst8 && udivisibleOK(8,c) + // result: (Leq8U (RotateLeft8 (Mul8 (Const8 [int64(int8(udivisible(8,c).m))]) x) (Const8 [int64(8-udivisible(8,c).k)]) ) (Const8 [int64(int8(udivisible(8,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul8 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpTrunc32to8 { + break + } + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh32Ux64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpZeroExt8to32 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst8 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(1<<8+umagic(8, c).m) && s == 8+umagic(8, c).s && x.Op != OpConst8 && udivisibleOK(8, c)) { + break + } + v.reset(OpLeq8U) + v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8) + v1 := b.NewValue0(v.Pos, OpMul8, typ.UInt8) + v2 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v2.AuxInt = int64(int8(udivisible(8, c).m)) + v1.AddArg(v2) + v1.AddArg(x) + v0.AddArg(v1) + v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v3.AuxInt = int64(8 - udivisible(8, c).k) + v0.AddArg(v3) + v.AddArg(v0) + v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v4.AuxInt = int64(int8(udivisible(8, c).max)) + v.AddArg(v4) + return true + } + // match: (Eq8 x (Mul8 (Const8 [c]) (Sub8 (Rsh32x64 mul:(Mul32 (Const32 [m]) (SignExt8to32 x)) (Const64 [s])) (Rsh32x64 (SignExt8to32 x) (Const64 [31]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8,c).m) && s == 8+smagic(8,c).s && x.Op != OpConst8 && sdivisibleOK(8,c) + // result: (Leq8U (RotateLeft8 (Add8 (Mul8 (Const8 [int64(int8(sdivisible(8,c).m))]) x) (Const8 [int64(int8(sdivisible(8,c).a))]) ) (Const8 [int64(8-sdivisible(8,c).k)]) ) (Const8 [int64(int8(sdivisible(8,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul8 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst8 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpSub8 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh32x64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpSignExt8to32 { + break + } + if x != mul_1.Args[0] { + break + } + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpRsh32x64 { + break + } + _ = v_1_1_1.Args[1] + v_1_1_1_0 := v_1_1_1.Args[0] + if v_1_1_1_0.Op != OpSignExt8to32 { + break + } + if x != v_1_1_1_0.Args[0] { + break + } + v_1_1_1_1 := v_1_1_1.Args[1] + if v_1_1_1_1.Op != OpConst64 { + break + } + if v_1_1_1_1.AuxInt != 31 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8, c).m) && s == 8+smagic(8, c).s && x.Op != OpConst8 && sdivisibleOK(8, c)) { + break + } + v.reset(OpLeq8U) + v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8) + v1 := b.NewValue0(v.Pos, OpAdd8, typ.UInt8) + v2 := b.NewValue0(v.Pos, OpMul8, typ.UInt8) + v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v3.AuxInt = int64(int8(sdivisible(8, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v4.AuxInt = int64(int8(sdivisible(8, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v5.AuxInt = int64(8 - sdivisible(8, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v6.AuxInt = int64(int8(sdivisible(8, c).max)) + v.AddArg(v6) + return true + } + return false +} +func rewriteValuegeneric_OpEq8_20(v *Value) bool { + b := v.Block + typ := &b.Func.Config.Types + // match: (Eq8 x (Mul8 (Const8 [c]) (Sub8 (Rsh32x64 mul:(Mul32 (SignExt8to32 x) (Const32 [m])) (Const64 [s])) (Rsh32x64 (SignExt8to32 x) (Const64 [31]))))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8,c).m) && s == 8+smagic(8,c).s && x.Op != OpConst8 && sdivisibleOK(8,c) + // result: (Leq8U (RotateLeft8 (Add8 (Mul8 (Const8 [int64(int8(sdivisible(8,c).m))]) x) (Const8 [int64(int8(sdivisible(8,c).a))]) ) (Const8 [int64(8-sdivisible(8,c).k)]) ) (Const8 [int64(int8(sdivisible(8,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul8 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpConst8 { + break + } + c := v_1_0.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpSub8 { + break + } + _ = v_1_1.Args[1] + v_1_1_0 := v_1_1.Args[0] + if v_1_1_0.Op != OpRsh32x64 { + break + } + _ = v_1_1_0.Args[1] + mul := v_1_1_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpSignExt8to32 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_1_1_0_1 := v_1_1_0.Args[1] + if v_1_1_0_1.Op != OpConst64 { + break + } + s := v_1_1_0_1.AuxInt + v_1_1_1 := v_1_1.Args[1] + if v_1_1_1.Op != OpRsh32x64 { + break + } + _ = v_1_1_1.Args[1] + v_1_1_1_0 := v_1_1_1.Args[0] + if v_1_1_1_0.Op != OpSignExt8to32 { + break + } + if x != v_1_1_1_0.Args[0] { + break + } + v_1_1_1_1 := v_1_1_1.Args[1] + if v_1_1_1_1.Op != OpConst64 { + break + } + if v_1_1_1_1.AuxInt != 31 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8, c).m) && s == 8+smagic(8, c).s && x.Op != OpConst8 && sdivisibleOK(8, c)) { + break + } + v.reset(OpLeq8U) + v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8) + v1 := b.NewValue0(v.Pos, OpAdd8, typ.UInt8) + v2 := b.NewValue0(v.Pos, OpMul8, typ.UInt8) + v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v3.AuxInt = int64(int8(sdivisible(8, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v4.AuxInt = int64(int8(sdivisible(8, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v5.AuxInt = int64(8 - sdivisible(8, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v6.AuxInt = int64(int8(sdivisible(8, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq8 x (Mul8 (Sub8 (Rsh32x64 mul:(Mul32 (Const32 [m]) (SignExt8to32 x)) (Const64 [s])) (Rsh32x64 (SignExt8to32 x) (Const64 [31]))) (Const8 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8,c).m) && s == 8+smagic(8,c).s && x.Op != OpConst8 && sdivisibleOK(8,c) + // result: (Leq8U (RotateLeft8 (Add8 (Mul8 (Const8 [int64(int8(sdivisible(8,c).m))]) x) (Const8 [int64(int8(sdivisible(8,c).a))]) ) (Const8 [int64(8-sdivisible(8,c).k)]) ) (Const8 [int64(int8(sdivisible(8,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul8 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpSub8 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh32x64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpSignExt8to32 { + break + } + if x != mul_1.Args[0] { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpRsh32x64 { + break + } + _ = v_1_0_1.Args[1] + v_1_0_1_0 := v_1_0_1.Args[0] + if v_1_0_1_0.Op != OpSignExt8to32 { + break + } + if x != v_1_0_1_0.Args[0] { + break + } + v_1_0_1_1 := v_1_0_1.Args[1] + if v_1_0_1_1.Op != OpConst64 { + break + } + if v_1_0_1_1.AuxInt != 31 { + break + } + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst8 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8, c).m) && s == 8+smagic(8, c).s && x.Op != OpConst8 && sdivisibleOK(8, c)) { + break + } + v.reset(OpLeq8U) + v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8) + v1 := b.NewValue0(v.Pos, OpAdd8, typ.UInt8) + v2 := b.NewValue0(v.Pos, OpMul8, typ.UInt8) + v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v3.AuxInt = int64(int8(sdivisible(8, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v4.AuxInt = int64(int8(sdivisible(8, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v5.AuxInt = int64(8 - sdivisible(8, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v6.AuxInt = int64(int8(sdivisible(8, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq8 x (Mul8 (Sub8 (Rsh32x64 mul:(Mul32 (SignExt8to32 x) (Const32 [m])) (Const64 [s])) (Rsh32x64 (SignExt8to32 x) (Const64 [31]))) (Const8 [c]))) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8,c).m) && s == 8+smagic(8,c).s && x.Op != OpConst8 && sdivisibleOK(8,c) + // result: (Leq8U (RotateLeft8 (Add8 (Mul8 (Const8 [int64(int8(sdivisible(8,c).m))]) x) (Const8 [int64(int8(sdivisible(8,c).a))]) ) (Const8 [int64(8-sdivisible(8,c).k)]) ) (Const8 [int64(int8(sdivisible(8,c).max))]) ) + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpMul8 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpSub8 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpRsh32x64 { + break + } + _ = v_1_0_0.Args[1] + mul := v_1_0_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpSignExt8to32 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpConst64 { + break + } + s := v_1_0_0_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpRsh32x64 { + break + } + _ = v_1_0_1.Args[1] + v_1_0_1_0 := v_1_0_1.Args[0] + if v_1_0_1_0.Op != OpSignExt8to32 { + break + } + if x != v_1_0_1_0.Args[0] { + break + } + v_1_0_1_1 := v_1_0_1.Args[1] + if v_1_0_1_1.Op != OpConst64 { + break + } + if v_1_0_1_1.AuxInt != 31 { + break + } + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst8 { + break + } + c := v_1_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8, c).m) && s == 8+smagic(8, c).s && x.Op != OpConst8 && sdivisibleOK(8, c)) { + break + } + v.reset(OpLeq8U) + v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8) + v1 := b.NewValue0(v.Pos, OpAdd8, typ.UInt8) + v2 := b.NewValue0(v.Pos, OpMul8, typ.UInt8) + v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v3.AuxInt = int64(int8(sdivisible(8, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v4.AuxInt = int64(int8(sdivisible(8, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v5.AuxInt = int64(8 - sdivisible(8, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v6.AuxInt = int64(int8(sdivisible(8, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq8 (Mul8 (Const8 [c]) (Sub8 (Rsh32x64 mul:(Mul32 (Const32 [m]) (SignExt8to32 x)) (Const64 [s])) (Rsh32x64 (SignExt8to32 x) (Const64 [31])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8,c).m) && s == 8+smagic(8,c).s && x.Op != OpConst8 && sdivisibleOK(8,c) + // result: (Leq8U (RotateLeft8 (Add8 (Mul8 (Const8 [int64(int8(sdivisible(8,c).m))]) x) (Const8 [int64(int8(sdivisible(8,c).a))]) ) (Const8 [int64(8-sdivisible(8,c).k)]) ) (Const8 [int64(int8(sdivisible(8,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul8 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst8 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpSub8 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh32x64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpSignExt8to32 { + break + } + if x != mul_1.Args[0] { + break + } + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpRsh32x64 { + break + } + _ = v_0_1_1.Args[1] + v_0_1_1_0 := v_0_1_1.Args[0] + if v_0_1_1_0.Op != OpSignExt8to32 { + break + } + if x != v_0_1_1_0.Args[0] { + break + } + v_0_1_1_1 := v_0_1_1.Args[1] + if v_0_1_1_1.Op != OpConst64 { + break + } + if v_0_1_1_1.AuxInt != 31 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8, c).m) && s == 8+smagic(8, c).s && x.Op != OpConst8 && sdivisibleOK(8, c)) { + break + } + v.reset(OpLeq8U) + v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8) + v1 := b.NewValue0(v.Pos, OpAdd8, typ.UInt8) + v2 := b.NewValue0(v.Pos, OpMul8, typ.UInt8) + v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v3.AuxInt = int64(int8(sdivisible(8, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v4.AuxInt = int64(int8(sdivisible(8, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v5.AuxInt = int64(8 - sdivisible(8, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v6.AuxInt = int64(int8(sdivisible(8, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq8 (Mul8 (Const8 [c]) (Sub8 (Rsh32x64 mul:(Mul32 (SignExt8to32 x) (Const32 [m])) (Const64 [s])) (Rsh32x64 (SignExt8to32 x) (Const64 [31])))) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8,c).m) && s == 8+smagic(8,c).s && x.Op != OpConst8 && sdivisibleOK(8,c) + // result: (Leq8U (RotateLeft8 (Add8 (Mul8 (Const8 [int64(int8(sdivisible(8,c).m))]) x) (Const8 [int64(int8(sdivisible(8,c).a))]) ) (Const8 [int64(8-sdivisible(8,c).k)]) ) (Const8 [int64(int8(sdivisible(8,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul8 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst8 { + break + } + c := v_0_0.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpSub8 { + break + } + _ = v_0_1.Args[1] + v_0_1_0 := v_0_1.Args[0] + if v_0_1_0.Op != OpRsh32x64 { + break + } + _ = v_0_1_0.Args[1] + mul := v_0_1_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpSignExt8to32 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_0_1_0_1 := v_0_1_0.Args[1] + if v_0_1_0_1.Op != OpConst64 { + break + } + s := v_0_1_0_1.AuxInt + v_0_1_1 := v_0_1.Args[1] + if v_0_1_1.Op != OpRsh32x64 { + break + } + _ = v_0_1_1.Args[1] + v_0_1_1_0 := v_0_1_1.Args[0] + if v_0_1_1_0.Op != OpSignExt8to32 { + break + } + if x != v_0_1_1_0.Args[0] { + break + } + v_0_1_1_1 := v_0_1_1.Args[1] + if v_0_1_1_1.Op != OpConst64 { + break + } + if v_0_1_1_1.AuxInt != 31 { + break + } + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8, c).m) && s == 8+smagic(8, c).s && x.Op != OpConst8 && sdivisibleOK(8, c)) { + break + } + v.reset(OpLeq8U) + v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8) + v1 := b.NewValue0(v.Pos, OpAdd8, typ.UInt8) + v2 := b.NewValue0(v.Pos, OpMul8, typ.UInt8) + v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v3.AuxInt = int64(int8(sdivisible(8, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v4.AuxInt = int64(int8(sdivisible(8, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v5.AuxInt = int64(8 - sdivisible(8, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v6.AuxInt = int64(int8(sdivisible(8, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq8 (Mul8 (Sub8 (Rsh32x64 mul:(Mul32 (Const32 [m]) (SignExt8to32 x)) (Const64 [s])) (Rsh32x64 (SignExt8to32 x) (Const64 [31]))) (Const8 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8,c).m) && s == 8+smagic(8,c).s && x.Op != OpConst8 && sdivisibleOK(8,c) + // result: (Leq8U (RotateLeft8 (Add8 (Mul8 (Const8 [int64(int8(sdivisible(8,c).m))]) x) (Const8 [int64(int8(sdivisible(8,c).a))]) ) (Const8 [int64(8-sdivisible(8,c).k)]) ) (Const8 [int64(int8(sdivisible(8,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul8 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpSub8 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh32x64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpConst32 { + break + } + m := mul_0.AuxInt + mul_1 := mul.Args[1] + if mul_1.Op != OpSignExt8to32 { + break + } + if x != mul_1.Args[0] { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpRsh32x64 { + break + } + _ = v_0_0_1.Args[1] + v_0_0_1_0 := v_0_0_1.Args[0] + if v_0_0_1_0.Op != OpSignExt8to32 { + break + } + if x != v_0_0_1_0.Args[0] { + break + } + v_0_0_1_1 := v_0_0_1.Args[1] + if v_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_1_1.AuxInt != 31 { + break + } + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst8 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8, c).m) && s == 8+smagic(8, c).s && x.Op != OpConst8 && sdivisibleOK(8, c)) { + break + } + v.reset(OpLeq8U) + v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8) + v1 := b.NewValue0(v.Pos, OpAdd8, typ.UInt8) + v2 := b.NewValue0(v.Pos, OpMul8, typ.UInt8) + v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v3.AuxInt = int64(int8(sdivisible(8, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v4.AuxInt = int64(int8(sdivisible(8, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v5.AuxInt = int64(8 - sdivisible(8, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v6.AuxInt = int64(int8(sdivisible(8, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq8 (Mul8 (Sub8 (Rsh32x64 mul:(Mul32 (SignExt8to32 x) (Const32 [m])) (Const64 [s])) (Rsh32x64 (SignExt8to32 x) (Const64 [31]))) (Const8 [c])) x) + // cond: v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8,c).m) && s == 8+smagic(8,c).s && x.Op != OpConst8 && sdivisibleOK(8,c) + // result: (Leq8U (RotateLeft8 (Add8 (Mul8 (Const8 [int64(int8(sdivisible(8,c).m))]) x) (Const8 [int64(int8(sdivisible(8,c).a))]) ) (Const8 [int64(8-sdivisible(8,c).k)]) ) (Const8 [int64(int8(sdivisible(8,c).max))]) ) + for { + x := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpMul8 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpSub8 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpRsh32x64 { + break + } + _ = v_0_0_0.Args[1] + mul := v_0_0_0.Args[0] + if mul.Op != OpMul32 { + break + } + _ = mul.Args[1] + mul_0 := mul.Args[0] + if mul_0.Op != OpSignExt8to32 { + break + } + if x != mul_0.Args[0] { + break + } + mul_1 := mul.Args[1] + if mul_1.Op != OpConst32 { + break + } + m := mul_1.AuxInt + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpConst64 { + break + } + s := v_0_0_0_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpRsh32x64 { + break + } + _ = v_0_0_1.Args[1] + v_0_0_1_0 := v_0_0_1.Args[0] + if v_0_0_1_0.Op != OpSignExt8to32 { + break + } + if x != v_0_0_1_0.Args[0] { + break + } + v_0_0_1_1 := v_0_0_1.Args[1] + if v_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_1_1.AuxInt != 31 { + break + } + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst8 { + break + } + c := v_0_1.AuxInt + if !(v.Block.Func.pass.name != "opt" && mul.Uses == 1 && m == int64(smagic(8, c).m) && s == 8+smagic(8, c).s && x.Op != OpConst8 && sdivisibleOK(8, c)) { + break + } + v.reset(OpLeq8U) + v0 := b.NewValue0(v.Pos, OpRotateLeft8, typ.UInt8) + v1 := b.NewValue0(v.Pos, OpAdd8, typ.UInt8) + v2 := b.NewValue0(v.Pos, OpMul8, typ.UInt8) + v3 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v3.AuxInt = int64(int8(sdivisible(8, c).m)) + v2.AddArg(v3) + v2.AddArg(x) + v1.AddArg(v2) + v4 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v4.AuxInt = int64(int8(sdivisible(8, c).a)) + v1.AddArg(v4) + v0.AddArg(v1) + v5 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v5.AuxInt = int64(8 - sdivisible(8, c).k) + v0.AddArg(v5) + v.AddArg(v0) + v6 := b.NewValue0(v.Pos, OpConst8, typ.UInt8) + v6.AuxInt = int64(int8(sdivisible(8, c).max)) + v.AddArg(v6) + return true + } + // match: (Eq8 n (Lsh8x64 (Rsh8x64 (Add8 n (Rsh8Ux64 (Rsh8x64 n (Const64 [ 7])) (Const64 [kbar]))) (Const64 [k])) (Const64 [k]))) + // cond: k > 0 && k < 7 && kbar == 8 - k + // result: (Eq8 (And8 n (Const8 [int64(1< [0])) + for { + _ = v.Args[1] + n := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpLsh8x64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpRsh8x64 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpAdd8 { + break + } + t := v_1_0_0.Type + _ = v_1_0_0.Args[1] + if n != v_1_0_0.Args[0] { + break + } + v_1_0_0_1 := v_1_0_0.Args[1] + if v_1_0_0_1.Op != OpRsh8Ux64 { + break + } + if v_1_0_0_1.Type != t { + break + } + _ = v_1_0_0_1.Args[1] + v_1_0_0_1_0 := v_1_0_0_1.Args[0] + if v_1_0_0_1_0.Op != OpRsh8x64 { + break + } + if v_1_0_0_1_0.Type != t { + break + } + _ = v_1_0_0_1_0.Args[1] + if n != v_1_0_0_1_0.Args[0] { + break + } + v_1_0_0_1_0_1 := v_1_0_0_1_0.Args[1] + if v_1_0_0_1_0_1.Op != OpConst64 { + break + } + if v_1_0_0_1_0_1.Type != typ.UInt64 { + break + } + if v_1_0_0_1_0_1.AuxInt != 7 { + break + } + v_1_0_0_1_1 := v_1_0_0_1.Args[1] + if v_1_0_0_1_1.Op != OpConst64 { + break + } + if v_1_0_0_1_1.Type != typ.UInt64 { + break + } + kbar := v_1_0_0_1_1.AuxInt + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpConst64 { + break + } + if v_1_0_1.Type != typ.UInt64 { + break + } + k := v_1_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst64 { + break + } + if v_1_1.Type != typ.UInt64 { + break + } + if v_1_1.AuxInt != k { + break + } + if !(k > 0 && k < 7 && kbar == 8-k) { + break + } + v.reset(OpEq8) + v0 := b.NewValue0(v.Pos, OpAnd8, t) + v0.AddArg(n) + v1 := b.NewValue0(v.Pos, OpConst8, t) + v1.AuxInt = int64(1< (Rsh8Ux64 (Rsh8x64 n (Const64 [ 7])) (Const64 [kbar])) n) (Const64 [k])) (Const64 [k]))) + // cond: k > 0 && k < 7 && kbar == 8 - k + // result: (Eq8 (And8 n (Const8 [int64(1< [0])) + for { + _ = v.Args[1] + n := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpLsh8x64 { + break + } + _ = v_1.Args[1] + v_1_0 := v_1.Args[0] + if v_1_0.Op != OpRsh8x64 { + break + } + _ = v_1_0.Args[1] + v_1_0_0 := v_1_0.Args[0] + if v_1_0_0.Op != OpAdd8 { + break + } + t := v_1_0_0.Type + _ = v_1_0_0.Args[1] + v_1_0_0_0 := v_1_0_0.Args[0] + if v_1_0_0_0.Op != OpRsh8Ux64 { + break + } + if v_1_0_0_0.Type != t { + break + } + _ = v_1_0_0_0.Args[1] + v_1_0_0_0_0 := v_1_0_0_0.Args[0] + if v_1_0_0_0_0.Op != OpRsh8x64 { + break + } + if v_1_0_0_0_0.Type != t { + break + } + _ = v_1_0_0_0_0.Args[1] + if n != v_1_0_0_0_0.Args[0] { + break + } + v_1_0_0_0_0_1 := v_1_0_0_0_0.Args[1] + if v_1_0_0_0_0_1.Op != OpConst64 { + break + } + if v_1_0_0_0_0_1.Type != typ.UInt64 { + break + } + if v_1_0_0_0_0_1.AuxInt != 7 { + break + } + v_1_0_0_0_1 := v_1_0_0_0.Args[1] + if v_1_0_0_0_1.Op != OpConst64 { + break + } + if v_1_0_0_0_1.Type != typ.UInt64 { + break + } + kbar := v_1_0_0_0_1.AuxInt + if n != v_1_0_0.Args[1] { + break + } + v_1_0_1 := v_1_0.Args[1] + if v_1_0_1.Op != OpConst64 { + break + } + if v_1_0_1.Type != typ.UInt64 { + break + } + k := v_1_0_1.AuxInt + v_1_1 := v_1.Args[1] + if v_1_1.Op != OpConst64 { + break + } + if v_1_1.Type != typ.UInt64 { + break + } + if v_1_1.AuxInt != k { + break + } + if !(k > 0 && k < 7 && kbar == 8-k) { + break + } + v.reset(OpEq8) + v0 := b.NewValue0(v.Pos, OpAnd8, t) + v0.AddArg(n) + v1 := b.NewValue0(v.Pos, OpConst8, t) + v1.AuxInt = int64(1< n (Rsh8Ux64 (Rsh8x64 n (Const64 [ 7])) (Const64 [kbar]))) (Const64 [k])) (Const64 [k])) n) + // cond: k > 0 && k < 7 && kbar == 8 - k + // result: (Eq8 (And8 n (Const8 [int64(1< [0])) + for { + n := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpLsh8x64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpRsh8x64 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpAdd8 { + break + } + t := v_0_0_0.Type + _ = v_0_0_0.Args[1] + if n != v_0_0_0.Args[0] { + break + } + v_0_0_0_1 := v_0_0_0.Args[1] + if v_0_0_0_1.Op != OpRsh8Ux64 { + break + } + if v_0_0_0_1.Type != t { + break + } + _ = v_0_0_0_1.Args[1] + v_0_0_0_1_0 := v_0_0_0_1.Args[0] + if v_0_0_0_1_0.Op != OpRsh8x64 { + break + } + if v_0_0_0_1_0.Type != t { + break + } + _ = v_0_0_0_1_0.Args[1] + if n != v_0_0_0_1_0.Args[0] { + break + } + v_0_0_0_1_0_1 := v_0_0_0_1_0.Args[1] + if v_0_0_0_1_0_1.Op != OpConst64 { + break + } + if v_0_0_0_1_0_1.Type != typ.UInt64 { + break + } + if v_0_0_0_1_0_1.AuxInt != 7 { + break + } + v_0_0_0_1_1 := v_0_0_0_1.Args[1] + if v_0_0_0_1_1.Op != OpConst64 { + break + } + if v_0_0_0_1_1.Type != typ.UInt64 { + break + } + kbar := v_0_0_0_1_1.AuxInt + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpConst64 { + break + } + if v_0_0_1.Type != typ.UInt64 { + break + } + k := v_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + if v_0_1.Type != typ.UInt64 { + break + } + if v_0_1.AuxInt != k { + break + } + if !(k > 0 && k < 7 && kbar == 8-k) { + break + } + v.reset(OpEq8) + v0 := b.NewValue0(v.Pos, OpAnd8, t) + v0.AddArg(n) + v1 := b.NewValue0(v.Pos, OpConst8, t) + v1.AuxInt = int64(1< (Rsh8Ux64 (Rsh8x64 n (Const64 [ 7])) (Const64 [kbar])) n) (Const64 [k])) (Const64 [k])) n) + // cond: k > 0 && k < 7 && kbar == 8 - k + // result: (Eq8 (And8 n (Const8 [int64(1< [0])) + for { + n := v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpLsh8x64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpRsh8x64 { + break + } + _ = v_0_0.Args[1] + v_0_0_0 := v_0_0.Args[0] + if v_0_0_0.Op != OpAdd8 { + break + } + t := v_0_0_0.Type + _ = v_0_0_0.Args[1] + v_0_0_0_0 := v_0_0_0.Args[0] + if v_0_0_0_0.Op != OpRsh8Ux64 { + break + } + if v_0_0_0_0.Type != t { + break + } + _ = v_0_0_0_0.Args[1] + v_0_0_0_0_0 := v_0_0_0_0.Args[0] + if v_0_0_0_0_0.Op != OpRsh8x64 { + break + } + if v_0_0_0_0_0.Type != t { + break + } + _ = v_0_0_0_0_0.Args[1] + if n != v_0_0_0_0_0.Args[0] { + break + } + v_0_0_0_0_0_1 := v_0_0_0_0_0.Args[1] + if v_0_0_0_0_0_1.Op != OpConst64 { + break + } + if v_0_0_0_0_0_1.Type != typ.UInt64 { + break + } + if v_0_0_0_0_0_1.AuxInt != 7 { + break + } + v_0_0_0_0_1 := v_0_0_0_0.Args[1] + if v_0_0_0_0_1.Op != OpConst64 { + break + } + if v_0_0_0_0_1.Type != typ.UInt64 { + break + } + kbar := v_0_0_0_0_1.AuxInt + if n != v_0_0_0.Args[1] { + break + } + v_0_0_1 := v_0_0.Args[1] + if v_0_0_1.Op != OpConst64 { + break + } + if v_0_0_1.Type != typ.UInt64 { + break + } + k := v_0_0_1.AuxInt + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + if v_0_1.Type != typ.UInt64 { + break + } + if v_0_1.AuxInt != k { + break + } + if !(k > 0 && k < 7 && kbar == 8-k) { + break + } + v.reset(OpEq8) + v0 := b.NewValue0(v.Pos, OpAnd8, t) + v0.AddArg(n) + v1 := b.NewValue0(v.Pos, OpConst8, t) + v1.AuxInt = int64(1<= d) return true } + // match: (Geq16 (And16 _ (Const16 [c])) (Const16 [0])) + // cond: int16(c) >= 0 + // result: (ConstBool [1]) + for { + _ = v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpAnd16 { + break + } + _ = v_0.Args[1] + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst16 { + break + } + c := v_0_1.AuxInt + v_1 := v.Args[1] + if v_1.Op != OpConst16 { + break + } + if v_1.AuxInt != 0 { + break + } + if !(int16(c) >= 0) { + break + } + v.reset(OpConstBool) + v.AuxInt = 1 + return true + } + // match: (Geq16 (And16 (Const16 [c]) _) (Const16 [0])) + // cond: int16(c) >= 0 + // result: (ConstBool [1]) + for { + _ = v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpAnd16 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst16 { + break + } + c := v_0_0.AuxInt + v_1 := v.Args[1] + if v_1.Op != OpConst16 { + break + } + if v_1.AuxInt != 0 { + break + } + if !(int16(c) >= 0) { + break + } + v.reset(OpConstBool) + v.AuxInt = 1 + return true + } return false } func rewriteValuegeneric_OpGeq16U_0(v *Value) bool { @@ -10747,6 +26941,64 @@ func rewriteValuegeneric_OpGeq32_0(v *Value) bool { v.AuxInt = b2i(c >= d) return true } + // match: (Geq32 (And32 _ (Const32 [c])) (Const32 [0])) + // cond: int32(c) >= 0 + // result: (ConstBool [1]) + for { + _ = v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpAnd32 { + break + } + _ = v_0.Args[1] + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst32 { + break + } + c := v_0_1.AuxInt + v_1 := v.Args[1] + if v_1.Op != OpConst32 { + break + } + if v_1.AuxInt != 0 { + break + } + if !(int32(c) >= 0) { + break + } + v.reset(OpConstBool) + v.AuxInt = 1 + return true + } + // match: (Geq32 (And32 (Const32 [c]) _) (Const32 [0])) + // cond: int32(c) >= 0 + // result: (ConstBool [1]) + for { + _ = v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpAnd32 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst32 { + break + } + c := v_0_0.AuxInt + v_1 := v.Args[1] + if v_1.Op != OpConst32 { + break + } + if v_1.AuxInt != 0 { + break + } + if !(int32(c) >= 0) { + break + } + v.reset(OpConstBool) + v.AuxInt = 1 + return true + } return false } func rewriteValuegeneric_OpGeq32F_0(v *Value) bool { @@ -10813,6 +27065,93 @@ func rewriteValuegeneric_OpGeq64_0(v *Value) bool { v.AuxInt = b2i(c >= d) return true } + // match: (Geq64 (And64 _ (Const64 [c])) (Const64 [0])) + // cond: int64(c) >= 0 + // result: (ConstBool [1]) + for { + _ = v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpAnd64 { + break + } + _ = v_0.Args[1] + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + c := v_0_1.AuxInt + v_1 := v.Args[1] + if v_1.Op != OpConst64 { + break + } + if v_1.AuxInt != 0 { + break + } + if !(int64(c) >= 0) { + break + } + v.reset(OpConstBool) + v.AuxInt = 1 + return true + } + // match: (Geq64 (And64 (Const64 [c]) _) (Const64 [0])) + // cond: int64(c) >= 0 + // result: (ConstBool [1]) + for { + _ = v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpAnd64 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst64 { + break + } + c := v_0_0.AuxInt + v_1 := v.Args[1] + if v_1.Op != OpConst64 { + break + } + if v_1.AuxInt != 0 { + break + } + if !(int64(c) >= 0) { + break + } + v.reset(OpConstBool) + v.AuxInt = 1 + return true + } + // match: (Geq64 (Rsh64Ux64 _ (Const64 [c])) (Const64 [0])) + // cond: c > 0 + // result: (ConstBool [1]) + for { + _ = v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpRsh64Ux64 { + break + } + _ = v_0.Args[1] + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst64 { + break + } + c := v_0_1.AuxInt + v_1 := v.Args[1] + if v_1.Op != OpConst64 { + break + } + if v_1.AuxInt != 0 { + break + } + if !(c > 0) { + break + } + v.reset(OpConstBool) + v.AuxInt = 1 + return true + } return false } func rewriteValuegeneric_OpGeq64F_0(v *Value) bool { @@ -10879,6 +27218,64 @@ func rewriteValuegeneric_OpGeq8_0(v *Value) bool { v.AuxInt = b2i(c >= d) return true } + // match: (Geq8 (And8 _ (Const8 [c])) (Const8 [0])) + // cond: int8(c) >= 0 + // result: (ConstBool [1]) + for { + _ = v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpAnd8 { + break + } + _ = v_0.Args[1] + v_0_1 := v_0.Args[1] + if v_0_1.Op != OpConst8 { + break + } + c := v_0_1.AuxInt + v_1 := v.Args[1] + if v_1.Op != OpConst8 { + break + } + if v_1.AuxInt != 0 { + break + } + if !(int8(c) >= 0) { + break + } + v.reset(OpConstBool) + v.AuxInt = 1 + return true + } + // match: (Geq8 (And8 (Const8 [c]) _) (Const8 [0])) + // cond: int8(c) >= 0 + // result: (ConstBool [1]) + for { + _ = v.Args[1] + v_0 := v.Args[0] + if v_0.Op != OpAnd8 { + break + } + _ = v_0.Args[1] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst8 { + break + } + c := v_0_0.AuxInt + v_1 := v.Args[1] + if v_1.Op != OpConst8 { + break + } + if v_1.AuxInt != 0 { + break + } + if !(int8(c) >= 0) { + break + } + v.reset(OpConstBool) + v.AuxInt = 1 + return true + } return false } func rewriteValuegeneric_OpGeq8U_0(v *Value) bool { @@ -11164,7 +27561,7 @@ func rewriteValuegeneric_OpInterCall_0(v *Value) bool { // result: (StaticCall [argsize] {devirt(v, itab, off)} mem) for { argsize := v.AuxInt - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpLoad { break @@ -11193,7 +27590,6 @@ func rewriteValuegeneric_OpInterCall_0(v *Value) bool { if v_0_0_0_0_0_0.Op != OpSB { break } - mem := v.Args[1] if !(devirt(v, itab, off) != nil) { break } @@ -11294,9 +27690,8 @@ func rewriteValuegeneric_OpIsInBounds_0(v *Value) bool { // cond: // result: (ConstBool [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpConstBool) @@ -11939,14 +28334,13 @@ func rewriteValuegeneric_OpIsInBounds_20(v *Value) bool { // cond: // result: (ConstBool [1]) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMod32u { break } _ = v_0.Args[1] - y := v_0.Args[1] - if y != v.Args[1] { + if y != v_0.Args[1] { break } v.reset(OpConstBool) @@ -11957,14 +28351,13 @@ func rewriteValuegeneric_OpIsInBounds_20(v *Value) bool { // cond: // result: (ConstBool [1]) for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpMod64u { break } _ = v_0.Args[1] - y := v_0.Args[1] - if y != v.Args[1] { + if y != v_0.Args[1] { break } v.reset(OpConstBool) @@ -12341,9 +28734,8 @@ func rewriteValuegeneric_OpIsSliceInBounds_0(v *Value) bool { // cond: // result: (ConstBool [1]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpConstBool) @@ -12993,9 +29385,7 @@ func rewriteValuegeneric_OpLess8U_0(v *Value) bool { } func rewriteValuegeneric_OpLoad_0(v *Value) bool { b := v.Block - _ = b fe := b.Func.fe - _ = fe // match: (Load p1 (Store {t2} p2 x _)) // cond: isSamePtr(p1, p2) && t1.Compare(x.Type) == types.CMPeq && t1.Size() == sizeof(t2) // result: x @@ -13325,9 +29715,7 @@ func rewriteValuegeneric_OpLoad_0(v *Value) bool { } func rewriteValuegeneric_OpLoad_10(v *Value) bool { b := v.Block - _ = b fe := b.Func.fe - _ = fe // match: (Load op:(OffPtr [o1] p1) (Store {t2} p2 _ (Store {t3} p3 _ (Store {t4} p4 _ mem:(Zero [n] p5 _))))) // cond: o1 >= 0 && o1+t1.Size() <= n && isSamePtr(p1, p5) && fe.CanSSA(t1) && disjoint(op, t1.Size(), p2, sizeof(t2)) && disjoint(op, t1.Size(), p3, sizeof(t3)) && disjoint(op, t1.Size(), p4, sizeof(t4)) // result: @mem.Block (Load (OffPtr [o1] p5) mem) @@ -13641,17 +30029,14 @@ func rewriteValuegeneric_OpLoad_10(v *Value) bool { } func rewriteValuegeneric_OpLoad_20(v *Value) bool { b := v.Block - _ = b fe := b.Func.fe - _ = fe // match: (Load ptr mem) // cond: t.IsStruct() && t.NumFields() == 1 && fe.CanSSA(t) // result: (StructMake1 (Load (OffPtr [0] ptr) mem)) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.IsStruct() && t.NumFields() == 1 && fe.CanSSA(t)) { break } @@ -13670,9 +30055,8 @@ func rewriteValuegeneric_OpLoad_20(v *Value) bool { // result: (StructMake2 (Load (OffPtr [0] ptr) mem) (Load (OffPtr [t.FieldOff(1)] ptr) mem)) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.IsStruct() && t.NumFields() == 2 && fe.CanSSA(t)) { break } @@ -13698,9 +30082,8 @@ func rewriteValuegeneric_OpLoad_20(v *Value) bool { // result: (StructMake3 (Load (OffPtr [0] ptr) mem) (Load (OffPtr [t.FieldOff(1)] ptr) mem) (Load (OffPtr [t.FieldOff(2)] ptr) mem)) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.IsStruct() && t.NumFields() == 3 && fe.CanSSA(t)) { break } @@ -13733,9 +30116,8 @@ func rewriteValuegeneric_OpLoad_20(v *Value) bool { // result: (StructMake4 (Load (OffPtr [0] ptr) mem) (Load (OffPtr [t.FieldOff(1)] ptr) mem) (Load (OffPtr [t.FieldOff(2)] ptr) mem) (Load (OffPtr [t.FieldOff(3)] ptr) mem)) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.IsStruct() && t.NumFields() == 4 && fe.CanSSA(t)) { break } @@ -13787,9 +30169,8 @@ func rewriteValuegeneric_OpLoad_20(v *Value) bool { // result: (ArrayMake1 (Load ptr mem)) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] mem := v.Args[1] + ptr := v.Args[0] if !(t.IsArray() && t.NumElem() == 1 && fe.CanSSA(t)) { break } @@ -13804,7 +30185,6 @@ func rewriteValuegeneric_OpLoad_20(v *Value) bool { } func rewriteValuegeneric_OpLsh16x16_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh16x16 x (Const16 [c])) // cond: // result: (Lsh16x64 x (Const64 [int64(uint16(c))])) @@ -13844,7 +30224,6 @@ func rewriteValuegeneric_OpLsh16x16_0(v *Value) bool { } func rewriteValuegeneric_OpLsh16x32_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh16x32 x (Const32 [c])) // cond: // result: (Lsh16x64 x (Const64 [int64(uint32(c))])) @@ -13884,9 +30263,7 @@ func rewriteValuegeneric_OpLsh16x32_0(v *Value) bool { } func rewriteValuegeneric_OpLsh16x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh16x64 (Const16 [c]) (Const64 [d])) // cond: // result: (Const16 [int64(int16(c) << uint64(d))]) @@ -14034,7 +30411,6 @@ func rewriteValuegeneric_OpLsh16x64_0(v *Value) bool { } func rewriteValuegeneric_OpLsh16x8_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh16x8 x (Const8 [c])) // cond: // result: (Lsh16x64 x (Const64 [int64(uint8(c))])) @@ -14074,7 +30450,6 @@ func rewriteValuegeneric_OpLsh16x8_0(v *Value) bool { } func rewriteValuegeneric_OpLsh32x16_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh32x16 x (Const16 [c])) // cond: // result: (Lsh32x64 x (Const64 [int64(uint16(c))])) @@ -14114,7 +30489,6 @@ func rewriteValuegeneric_OpLsh32x16_0(v *Value) bool { } func rewriteValuegeneric_OpLsh32x32_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh32x32 x (Const32 [c])) // cond: // result: (Lsh32x64 x (Const64 [int64(uint32(c))])) @@ -14154,9 +30528,7 @@ func rewriteValuegeneric_OpLsh32x32_0(v *Value) bool { } func rewriteValuegeneric_OpLsh32x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh32x64 (Const32 [c]) (Const64 [d])) // cond: // result: (Const32 [int64(int32(c) << uint64(d))]) @@ -14304,7 +30676,6 @@ func rewriteValuegeneric_OpLsh32x64_0(v *Value) bool { } func rewriteValuegeneric_OpLsh32x8_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh32x8 x (Const8 [c])) // cond: // result: (Lsh32x64 x (Const64 [int64(uint8(c))])) @@ -14344,7 +30715,6 @@ func rewriteValuegeneric_OpLsh32x8_0(v *Value) bool { } func rewriteValuegeneric_OpLsh64x16_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh64x16 x (Const16 [c])) // cond: // result: (Lsh64x64 x (Const64 [int64(uint16(c))])) @@ -14384,7 +30754,6 @@ func rewriteValuegeneric_OpLsh64x16_0(v *Value) bool { } func rewriteValuegeneric_OpLsh64x32_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh64x32 x (Const32 [c])) // cond: // result: (Lsh64x64 x (Const64 [int64(uint32(c))])) @@ -14424,9 +30793,7 @@ func rewriteValuegeneric_OpLsh64x32_0(v *Value) bool { } func rewriteValuegeneric_OpLsh64x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh64x64 (Const64 [c]) (Const64 [d])) // cond: // result: (Const64 [c << uint64(d)]) @@ -14574,7 +30941,6 @@ func rewriteValuegeneric_OpLsh64x64_0(v *Value) bool { } func rewriteValuegeneric_OpLsh64x8_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh64x8 x (Const8 [c])) // cond: // result: (Lsh64x64 x (Const64 [int64(uint8(c))])) @@ -14614,7 +30980,6 @@ func rewriteValuegeneric_OpLsh64x8_0(v *Value) bool { } func rewriteValuegeneric_OpLsh8x16_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh8x16 x (Const16 [c])) // cond: // result: (Lsh8x64 x (Const64 [int64(uint16(c))])) @@ -14654,7 +31019,6 @@ func rewriteValuegeneric_OpLsh8x16_0(v *Value) bool { } func rewriteValuegeneric_OpLsh8x32_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh8x32 x (Const32 [c])) // cond: // result: (Lsh8x64 x (Const64 [int64(uint32(c))])) @@ -14694,9 +31058,7 @@ func rewriteValuegeneric_OpLsh8x32_0(v *Value) bool { } func rewriteValuegeneric_OpLsh8x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Lsh8x64 (Const8 [c]) (Const64 [d])) // cond: // result: (Const8 [int64(int8(c) << uint64(d))]) @@ -14844,7 +31206,6 @@ func rewriteValuegeneric_OpLsh8x64_0(v *Value) bool { } func rewriteValuegeneric_OpLsh8x8_0(v *Value) bool { b := v.Block - _ = b // match: (Lsh8x8 x (Const8 [c])) // cond: // result: (Lsh8x64 x (Const64 [int64(uint8(c))])) @@ -14884,7 +31245,6 @@ func rewriteValuegeneric_OpLsh8x8_0(v *Value) bool { } func rewriteValuegeneric_OpMod16_0(v *Value) bool { b := v.Block - _ = b // match: (Mod16 (Const16 [c]) (Const16 [d])) // cond: d != 0 // result: (Const16 [int64(int16(c % d))]) @@ -14986,7 +31346,6 @@ func rewriteValuegeneric_OpMod16_0(v *Value) bool { } func rewriteValuegeneric_OpMod16u_0(v *Value) bool { b := v.Block - _ = b // match: (Mod16u (Const16 [c]) (Const16 [d])) // cond: d != 0 // result: (Const16 [int64(uint16(c) % uint16(d))]) @@ -15065,7 +31424,6 @@ func rewriteValuegeneric_OpMod16u_0(v *Value) bool { } func rewriteValuegeneric_OpMod32_0(v *Value) bool { b := v.Block - _ = b // match: (Mod32 (Const32 [c]) (Const32 [d])) // cond: d != 0 // result: (Const32 [int64(int32(c % d))]) @@ -15167,7 +31525,6 @@ func rewriteValuegeneric_OpMod32_0(v *Value) bool { } func rewriteValuegeneric_OpMod32u_0(v *Value) bool { b := v.Block - _ = b // match: (Mod32u (Const32 [c]) (Const32 [d])) // cond: d != 0 // result: (Const32 [int64(uint32(c) % uint32(d))]) @@ -15246,7 +31603,6 @@ func rewriteValuegeneric_OpMod32u_0(v *Value) bool { } func rewriteValuegeneric_OpMod64_0(v *Value) bool { b := v.Block - _ = b // match: (Mod64 (Const64 [c]) (Const64 [d])) // cond: d != 0 // result: (Const64 [c % d]) @@ -15369,7 +31725,6 @@ func rewriteValuegeneric_OpMod64_0(v *Value) bool { } func rewriteValuegeneric_OpMod64u_0(v *Value) bool { b := v.Block - _ = b // match: (Mod64u (Const64 [c]) (Const64 [d])) // cond: d != 0 // result: (Const64 [int64(uint64(c) % uint64(d))]) @@ -15469,7 +31824,6 @@ func rewriteValuegeneric_OpMod64u_0(v *Value) bool { } func rewriteValuegeneric_OpMod8_0(v *Value) bool { b := v.Block - _ = b // match: (Mod8 (Const8 [c]) (Const8 [d])) // cond: d != 0 // result: (Const8 [int64(int8(c % d))]) @@ -15571,7 +31925,6 @@ func rewriteValuegeneric_OpMod8_0(v *Value) bool { } func rewriteValuegeneric_OpMod8u_0(v *Value) bool { b := v.Block - _ = b // match: (Mod8u (Const8 [c]) (Const8 [d])) // cond: d != 0 // result: (Const8 [int64(uint8(c) % uint8(d))]) @@ -15617,7 +31970,7 @@ func rewriteValuegeneric_OpMod8u_0(v *Value) bool { return true } // match: (Mod8u x (Const8 [c])) - // cond: x.Op != OpConst8 && c > 0 && umagicOK(8 ,c) + // cond: x.Op != OpConst8 && c > 0 && umagicOK(8, c) // result: (Sub8 x (Mul8 (Div8u x (Const8 [c])) (Const8 [c]))) for { t := v.Type @@ -15650,7 +32003,6 @@ func rewriteValuegeneric_OpMod8u_0(v *Value) bool { } func rewriteValuegeneric_OpMove_0(v *Value) bool { b := v.Block - _ = b // match: (Move {t} [n] dst1 src mem:(Zero {t} [n] dst2 _)) // cond: isSamePtr(src, dst2) // result: (Zero {t} [n] dst1 mem) @@ -15731,14 +32083,13 @@ func rewriteValuegeneric_OpMove_0(v *Value) bool { break } t2 := store.Aux - _ = store.Args[2] + mem := store.Args[2] op := store.Args[0] if op.Op != OpOffPtr { break } o2 := op.AuxInt dst2 := op.Args[0] - mem := store.Args[2] if !(isSamePtr(dst1, dst2) && store.Uses == 1 && n >= o2+sizeof(t2) && disjoint(src1, n, op, sizeof(t2)) && clobber(store)) { break } @@ -15769,9 +32120,8 @@ func rewriteValuegeneric_OpMove_0(v *Value) bool { if move.Aux != t { break } - _ = move.Args[2] - dst2 := move.Args[0] mem := move.Args[2] + dst2 := move.Args[0] if !(move.Uses == 1 && isSamePtr(dst1, dst2) && disjoint(src1, n, dst2, n) && clobber(move)) { break } @@ -15807,9 +32157,8 @@ func rewriteValuegeneric_OpMove_0(v *Value) bool { if move.Aux != t { break } - _ = move.Args[2] - dst2 := move.Args[0] mem := move.Args[2] + dst2 := move.Args[0] if !(move.Uses == 1 && vardef.Uses == 1 && isSamePtr(dst1, dst2) && disjoint(src1, n, dst2, n) && clobber(move) && clobber(vardef)) { break } @@ -15843,9 +32192,8 @@ func rewriteValuegeneric_OpMove_0(v *Value) bool { if zero.Aux != t { break } - _ = zero.Args[1] - dst2 := zero.Args[0] mem := zero.Args[1] + dst2 := zero.Args[0] if !(zero.Uses == 1 && isSamePtr(dst1, dst2) && disjoint(src1, n, dst2, n) && clobber(zero)) { break } @@ -15881,9 +32229,8 @@ func rewriteValuegeneric_OpMove_0(v *Value) bool { if zero.Aux != t { break } - _ = zero.Args[1] - dst2 := zero.Args[0] mem := zero.Args[1] + dst2 := zero.Args[0] if !(zero.Uses == 1 && vardef.Uses == 1 && isSamePtr(dst1, dst2) && disjoint(src1, n, dst2, n) && clobber(zero) && clobber(vardef)) { break } @@ -16148,7 +32495,6 @@ func rewriteValuegeneric_OpMove_0(v *Value) bool { } func rewriteValuegeneric_OpMove_10(v *Value) bool { b := v.Block - _ = b // match: (Move {t1} [n] dst p1 mem:(VarDef (Store {t2} op2:(OffPtr [o2] p2) d1 (Store {t3} op3:(OffPtr [0] p3) d2 _)))) // cond: isSamePtr(p1, p2) && isSamePtr(p2, p3) && alignof(t2) <= alignof(t1) && alignof(t3) <= alignof(t1) && registerizable(b, t2) && registerizable(b, t3) && o2 == sizeof(t3) && n == sizeof(t2) + sizeof(t3) // result: (Store {t2} (OffPtr [o2] dst) d1 (Store {t3} (OffPtr [0] dst) d2 mem)) @@ -16978,9 +33324,7 @@ func rewriteValuegeneric_OpMove_10(v *Value) bool { } func rewriteValuegeneric_OpMove_20(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (Move {t1} [n] dst p1 mem:(VarDef (Store {t2} (OffPtr [o2] p2) d1 (Store {t3} (OffPtr [o3] p3) d2 (Store {t4} (OffPtr [o4] p4) d3 (Store {t5} (OffPtr [o5] p5) d4 (Zero {t6} [n] p6 _))))))) // cond: isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && isSamePtr(p4, p5) && isSamePtr(p5, p6) && alignof(t2) <= alignof(t1) && alignof(t3) <= alignof(t1) && alignof(t4) <= alignof(t1) && alignof(t5) <= alignof(t1) && alignof(t6) <= alignof(t1) && registerizable(b, t2) && registerizable(b, t3) && registerizable(b, t4) && registerizable(b, t5) && n >= o2 + sizeof(t2) && n >= o3 + sizeof(t3) && n >= o4 + sizeof(t4) && n >= o5 + sizeof(t5) // result: (Store {t2} (OffPtr [o2] dst) d1 (Store {t3} (OffPtr [o3] dst) d2 (Store {t4} (OffPtr [o4] dst) d3 (Store {t5} (OffPtr [o5] dst) d4 (Zero {t1} [n] dst mem))))) @@ -17172,10 +33516,9 @@ func rewriteValuegeneric_OpMove_20(v *Value) bool { // cond: isSamePtr(dst, src) // result: mem for { - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] src := v.Args[1] - mem := v.Args[2] if !(isSamePtr(dst, src)) { break } @@ -17188,9 +33531,7 @@ func rewriteValuegeneric_OpMove_20(v *Value) bool { } func rewriteValuegeneric_OpMul16_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mul16 (Const16 [c]) (Const16 [d])) // cond: // result: (Const16 [int64(int16(c*d))]) @@ -17233,7 +33574,7 @@ func rewriteValuegeneric_OpMul16_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst16 { break @@ -17241,7 +33582,6 @@ func rewriteValuegeneric_OpMul16_0(v *Value) bool { if v_0.AuxInt != 1 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -17269,7 +33609,7 @@ func rewriteValuegeneric_OpMul16_0(v *Value) bool { // cond: // result: (Neg16 x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst16 { break @@ -17277,7 +33617,6 @@ func rewriteValuegeneric_OpMul16_0(v *Value) bool { if v_0.AuxInt != -1 { break } - x := v.Args[1] v.reset(OpNeg16) v.AddArg(x) return true @@ -17327,13 +33666,12 @@ func rewriteValuegeneric_OpMul16_0(v *Value) bool { // result: (Lsh16x64 n (Const64 [log2(c)])) for { t := v.Type - _ = v.Args[1] + n := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst16 { break } c := v_0.AuxInt - n := v.Args[1] if !(isPowerOfTwo(c)) { break } @@ -17374,13 +33712,12 @@ func rewriteValuegeneric_OpMul16_0(v *Value) bool { // result: (Neg16 (Lsh16x64 n (Const64 [log2(-c)]))) for { t := v.Type - _ = v.Args[1] + n := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst16 { break } c := v_0.AuxInt - n := v.Args[1] if !(t.IsSigned() && isPowerOfTwo(-c)) { break } @@ -17397,7 +33734,6 @@ func rewriteValuegeneric_OpMul16_0(v *Value) bool { } func rewriteValuegeneric_OpMul16_10(v *Value) bool { b := v.Block - _ = b // match: (Mul16 (Const16 [0]) _) // cond: // result: (Const16 [0]) @@ -17445,7 +33781,7 @@ func rewriteValuegeneric_OpMul16_10(v *Value) bool { if v_1.Op != OpMul16 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst16 { break @@ -17454,7 +33790,6 @@ func rewriteValuegeneric_OpMul16_10(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpMul16) v0 := b.NewValue0(v.Pos, OpConst16, t) v0.AuxInt = int64(int16(c * d)) @@ -17503,14 +33838,13 @@ func rewriteValuegeneric_OpMul16_10(v *Value) bool { if v_0.Op != OpMul16 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst16 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst16 { break @@ -17562,9 +33896,7 @@ func rewriteValuegeneric_OpMul16_10(v *Value) bool { } func rewriteValuegeneric_OpMul32_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mul32 (Const32 [c]) (Const32 [d])) // cond: // result: (Const32 [int64(int32(c*d))]) @@ -17607,7 +33939,7 @@ func rewriteValuegeneric_OpMul32_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst32 { break @@ -17615,7 +33947,6 @@ func rewriteValuegeneric_OpMul32_0(v *Value) bool { if v_0.AuxInt != 1 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -17643,7 +33974,7 @@ func rewriteValuegeneric_OpMul32_0(v *Value) bool { // cond: // result: (Neg32 x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst32 { break @@ -17651,7 +33982,6 @@ func rewriteValuegeneric_OpMul32_0(v *Value) bool { if v_0.AuxInt != -1 { break } - x := v.Args[1] v.reset(OpNeg32) v.AddArg(x) return true @@ -17701,13 +34031,12 @@ func rewriteValuegeneric_OpMul32_0(v *Value) bool { // result: (Lsh32x64 n (Const64 [log2(c)])) for { t := v.Type - _ = v.Args[1] + n := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst32 { break } c := v_0.AuxInt - n := v.Args[1] if !(isPowerOfTwo(c)) { break } @@ -17748,13 +34077,12 @@ func rewriteValuegeneric_OpMul32_0(v *Value) bool { // result: (Neg32 (Lsh32x64 n (Const64 [log2(-c)]))) for { t := v.Type - _ = v.Args[1] + n := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst32 { break } c := v_0.AuxInt - n := v.Args[1] if !(t.IsSigned() && isPowerOfTwo(-c)) { break } @@ -17771,7 +34099,6 @@ func rewriteValuegeneric_OpMul32_0(v *Value) bool { } func rewriteValuegeneric_OpMul32_10(v *Value) bool { b := v.Block - _ = b // match: (Mul32 (Const32 [c]) (Add32 (Const32 [d]) x)) // cond: // result: (Add32 (Const32 [int64(int32(c*d))]) (Mul32 (Const32 [c]) x)) @@ -17790,7 +34117,7 @@ func rewriteValuegeneric_OpMul32_10(v *Value) bool { if v_1.Type != t { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break @@ -17799,7 +34126,6 @@ func rewriteValuegeneric_OpMul32_10(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpAdd32) v0 := b.NewValue0(v.Pos, OpConst32, t) v0.AuxInt = int64(int32(c * d)) @@ -17862,7 +34188,7 @@ func rewriteValuegeneric_OpMul32_10(v *Value) bool { break } t := v_0.Type - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst32 { break @@ -17871,7 +34197,6 @@ func rewriteValuegeneric_OpMul32_10(v *Value) bool { break } d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst32 { break @@ -17979,7 +34304,7 @@ func rewriteValuegeneric_OpMul32_10(v *Value) bool { if v_1.Op != OpMul32 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break @@ -17988,7 +34313,6 @@ func rewriteValuegeneric_OpMul32_10(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpMul32) v0 := b.NewValue0(v.Pos, OpConst32, t) v0.AuxInt = int64(int32(c * d)) @@ -18037,14 +34361,13 @@ func rewriteValuegeneric_OpMul32_10(v *Value) bool { if v_0.Op != OpMul32 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst32 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst32 { break @@ -18155,7 +34478,7 @@ func rewriteValuegeneric_OpMul32F_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst32F { break @@ -18163,7 +34486,6 @@ func rewriteValuegeneric_OpMul32F_0(v *Value) bool { if v_0.AuxInt != auxFrom64F(1) { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -18190,7 +34512,7 @@ func rewriteValuegeneric_OpMul32F_0(v *Value) bool { // cond: // result: (Neg32F x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst32F { break @@ -18198,7 +34520,6 @@ func rewriteValuegeneric_OpMul32F_0(v *Value) bool { if v_0.AuxInt != auxFrom32F(-1) { break } - x := v.Args[1] v.reset(OpNeg32F) v.AddArg(x) return true @@ -18225,7 +34546,7 @@ func rewriteValuegeneric_OpMul32F_0(v *Value) bool { // cond: // result: (Add32F x x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst32F { break @@ -18233,7 +34554,6 @@ func rewriteValuegeneric_OpMul32F_0(v *Value) bool { if v_0.AuxInt != auxFrom32F(2) { break } - x := v.Args[1] v.reset(OpAdd32F) v.AddArg(x) v.AddArg(x) @@ -18243,9 +34563,7 @@ func rewriteValuegeneric_OpMul32F_0(v *Value) bool { } func rewriteValuegeneric_OpMul64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mul64 (Const64 [c]) (Const64 [d])) // cond: // result: (Const64 [c*d]) @@ -18288,7 +34606,7 @@ func rewriteValuegeneric_OpMul64_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst64 { break @@ -18296,7 +34614,6 @@ func rewriteValuegeneric_OpMul64_0(v *Value) bool { if v_0.AuxInt != 1 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -18324,7 +34641,7 @@ func rewriteValuegeneric_OpMul64_0(v *Value) bool { // cond: // result: (Neg64 x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst64 { break @@ -18332,7 +34649,6 @@ func rewriteValuegeneric_OpMul64_0(v *Value) bool { if v_0.AuxInt != -1 { break } - x := v.Args[1] v.reset(OpNeg64) v.AddArg(x) return true @@ -18382,13 +34698,12 @@ func rewriteValuegeneric_OpMul64_0(v *Value) bool { // result: (Lsh64x64 n (Const64 [log2(c)])) for { t := v.Type - _ = v.Args[1] + n := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst64 { break } c := v_0.AuxInt - n := v.Args[1] if !(isPowerOfTwo(c)) { break } @@ -18429,13 +34744,12 @@ func rewriteValuegeneric_OpMul64_0(v *Value) bool { // result: (Neg64 (Lsh64x64 n (Const64 [log2(-c)]))) for { t := v.Type - _ = v.Args[1] + n := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst64 { break } c := v_0.AuxInt - n := v.Args[1] if !(t.IsSigned() && isPowerOfTwo(-c)) { break } @@ -18452,7 +34766,6 @@ func rewriteValuegeneric_OpMul64_0(v *Value) bool { } func rewriteValuegeneric_OpMul64_10(v *Value) bool { b := v.Block - _ = b // match: (Mul64 (Const64 [c]) (Add64 (Const64 [d]) x)) // cond: // result: (Add64 (Const64 [c*d]) (Mul64 (Const64 [c]) x)) @@ -18471,7 +34784,7 @@ func rewriteValuegeneric_OpMul64_10(v *Value) bool { if v_1.Type != t { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst64 { break @@ -18480,7 +34793,6 @@ func rewriteValuegeneric_OpMul64_10(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpAdd64) v0 := b.NewValue0(v.Pos, OpConst64, t) v0.AuxInt = c * d @@ -18543,7 +34855,7 @@ func rewriteValuegeneric_OpMul64_10(v *Value) bool { break } t := v_0.Type - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst64 { break @@ -18552,7 +34864,6 @@ func rewriteValuegeneric_OpMul64_10(v *Value) bool { break } d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst64 { break @@ -18660,7 +34971,7 @@ func rewriteValuegeneric_OpMul64_10(v *Value) bool { if v_1.Op != OpMul64 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst64 { break @@ -18669,7 +34980,6 @@ func rewriteValuegeneric_OpMul64_10(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpMul64) v0 := b.NewValue0(v.Pos, OpConst64, t) v0.AuxInt = c * d @@ -18718,14 +35028,13 @@ func rewriteValuegeneric_OpMul64_10(v *Value) bool { if v_0.Op != OpMul64 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst64 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst64 { break @@ -18836,7 +35145,7 @@ func rewriteValuegeneric_OpMul64F_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst64F { break @@ -18844,7 +35153,6 @@ func rewriteValuegeneric_OpMul64F_0(v *Value) bool { if v_0.AuxInt != auxFrom64F(1) { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -18871,7 +35179,7 @@ func rewriteValuegeneric_OpMul64F_0(v *Value) bool { // cond: // result: (Neg64F x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst64F { break @@ -18879,7 +35187,6 @@ func rewriteValuegeneric_OpMul64F_0(v *Value) bool { if v_0.AuxInt != auxFrom64F(-1) { break } - x := v.Args[1] v.reset(OpNeg64F) v.AddArg(x) return true @@ -18906,7 +35213,7 @@ func rewriteValuegeneric_OpMul64F_0(v *Value) bool { // cond: // result: (Add64F x x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst64F { break @@ -18914,7 +35221,6 @@ func rewriteValuegeneric_OpMul64F_0(v *Value) bool { if v_0.AuxInt != auxFrom64F(2) { break } - x := v.Args[1] v.reset(OpAdd64F) v.AddArg(x) v.AddArg(x) @@ -18924,9 +35230,7 @@ func rewriteValuegeneric_OpMul64F_0(v *Value) bool { } func rewriteValuegeneric_OpMul8_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Mul8 (Const8 [c]) (Const8 [d])) // cond: // result: (Const8 [int64(int8(c*d))]) @@ -18969,7 +35273,7 @@ func rewriteValuegeneric_OpMul8_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst8 { break @@ -18977,7 +35281,6 @@ func rewriteValuegeneric_OpMul8_0(v *Value) bool { if v_0.AuxInt != 1 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -19005,7 +35308,7 @@ func rewriteValuegeneric_OpMul8_0(v *Value) bool { // cond: // result: (Neg8 x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst8 { break @@ -19013,7 +35316,6 @@ func rewriteValuegeneric_OpMul8_0(v *Value) bool { if v_0.AuxInt != -1 { break } - x := v.Args[1] v.reset(OpNeg8) v.AddArg(x) return true @@ -19063,13 +35365,12 @@ func rewriteValuegeneric_OpMul8_0(v *Value) bool { // result: (Lsh8x64 n (Const64 [log2(c)])) for { t := v.Type - _ = v.Args[1] + n := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst8 { break } c := v_0.AuxInt - n := v.Args[1] if !(isPowerOfTwo(c)) { break } @@ -19110,13 +35411,12 @@ func rewriteValuegeneric_OpMul8_0(v *Value) bool { // result: (Neg8 (Lsh8x64 n (Const64 [log2(-c)]))) for { t := v.Type - _ = v.Args[1] + n := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst8 { break } c := v_0.AuxInt - n := v.Args[1] if !(t.IsSigned() && isPowerOfTwo(-c)) { break } @@ -19133,7 +35433,6 @@ func rewriteValuegeneric_OpMul8_0(v *Value) bool { } func rewriteValuegeneric_OpMul8_10(v *Value) bool { b := v.Block - _ = b // match: (Mul8 (Const8 [0]) _) // cond: // result: (Const8 [0]) @@ -19181,7 +35480,7 @@ func rewriteValuegeneric_OpMul8_10(v *Value) bool { if v_1.Op != OpMul8 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst8 { break @@ -19190,7 +35489,6 @@ func rewriteValuegeneric_OpMul8_10(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpMul8) v0 := b.NewValue0(v.Pos, OpConst8, t) v0.AuxInt = int64(int8(c * d)) @@ -19239,14 +35537,13 @@ func rewriteValuegeneric_OpMul8_10(v *Value) bool { if v_0.Op != OpMul8 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst8 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst8 { break @@ -19318,9 +35615,8 @@ func rewriteValuegeneric_OpNeg16_0(v *Value) bool { if v_0.Op != OpSub16 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpSub16) v.AddArg(y) v.AddArg(x) @@ -19350,9 +35646,8 @@ func rewriteValuegeneric_OpNeg32_0(v *Value) bool { if v_0.Op != OpSub32 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpSub32) v.AddArg(y) v.AddArg(x) @@ -19401,9 +35696,8 @@ func rewriteValuegeneric_OpNeg64_0(v *Value) bool { if v_0.Op != OpSub64 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpSub64) v.AddArg(y) v.AddArg(x) @@ -19452,9 +35746,8 @@ func rewriteValuegeneric_OpNeg8_0(v *Value) bool { if v_0.Op != OpSub8 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpSub8) v.AddArg(y) v.AddArg(x) @@ -19464,14 +35757,12 @@ func rewriteValuegeneric_OpNeg8_0(v *Value) bool { } func rewriteValuegeneric_OpNeq16_0(v *Value) bool { b := v.Block - _ = b // match: (Neq16 x x) // cond: // result: (ConstBool [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpConstBool) @@ -19493,7 +35784,7 @@ func rewriteValuegeneric_OpNeq16_0(v *Value) bool { if v_1.Op != OpAdd16 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst16 { break @@ -19502,7 +35793,6 @@ func rewriteValuegeneric_OpNeq16_0(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpNeq16) v0 := b.NewValue0(v.Pos, OpConst16, t) v0.AuxInt = int64(int16(c - d)) @@ -19551,14 +35841,13 @@ func rewriteValuegeneric_OpNeq16_0(v *Value) bool { if v_0.Op != OpAdd16 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst16 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst16 { break @@ -19653,9 +35942,8 @@ func rewriteValuegeneric_OpNeq16_0(v *Value) bool { if s.Op != OpSub16 { break } - _ = s.Args[1] - x := s.Args[0] y := s.Args[1] + x := s.Args[0] v_1 := v.Args[1] if v_1.Op != OpConst16 { break @@ -19687,9 +35975,8 @@ func rewriteValuegeneric_OpNeq16_0(v *Value) bool { if s.Op != OpSub16 { break } - _ = s.Args[1] - x := s.Args[0] y := s.Args[1] + x := s.Args[0] if !(s.Uses == 1) { break } @@ -19702,14 +35989,12 @@ func rewriteValuegeneric_OpNeq16_0(v *Value) bool { } func rewriteValuegeneric_OpNeq32_0(v *Value) bool { b := v.Block - _ = b // match: (Neq32 x x) // cond: // result: (ConstBool [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpConstBool) @@ -19731,7 +36016,7 @@ func rewriteValuegeneric_OpNeq32_0(v *Value) bool { if v_1.Op != OpAdd32 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break @@ -19740,7 +36025,6 @@ func rewriteValuegeneric_OpNeq32_0(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpNeq32) v0 := b.NewValue0(v.Pos, OpConst32, t) v0.AuxInt = int64(int32(c - d)) @@ -19789,14 +36073,13 @@ func rewriteValuegeneric_OpNeq32_0(v *Value) bool { if v_0.Op != OpAdd32 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst32 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst32 { break @@ -19891,9 +36174,8 @@ func rewriteValuegeneric_OpNeq32_0(v *Value) bool { if s.Op != OpSub32 { break } - _ = s.Args[1] - x := s.Args[0] y := s.Args[1] + x := s.Args[0] v_1 := v.Args[1] if v_1.Op != OpConst32 { break @@ -19925,9 +36207,8 @@ func rewriteValuegeneric_OpNeq32_0(v *Value) bool { if s.Op != OpSub32 { break } - _ = s.Args[1] - x := s.Args[0] y := s.Args[1] + x := s.Args[0] if !(s.Uses == 1) { break } @@ -19981,14 +36262,12 @@ func rewriteValuegeneric_OpNeq32F_0(v *Value) bool { } func rewriteValuegeneric_OpNeq64_0(v *Value) bool { b := v.Block - _ = b // match: (Neq64 x x) // cond: // result: (ConstBool [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpConstBool) @@ -20010,7 +36289,7 @@ func rewriteValuegeneric_OpNeq64_0(v *Value) bool { if v_1.Op != OpAdd64 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst64 { break @@ -20019,7 +36298,6 @@ func rewriteValuegeneric_OpNeq64_0(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpNeq64) v0 := b.NewValue0(v.Pos, OpConst64, t) v0.AuxInt = c - d @@ -20068,14 +36346,13 @@ func rewriteValuegeneric_OpNeq64_0(v *Value) bool { if v_0.Op != OpAdd64 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst64 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst64 { break @@ -20170,9 +36447,8 @@ func rewriteValuegeneric_OpNeq64_0(v *Value) bool { if s.Op != OpSub64 { break } - _ = s.Args[1] - x := s.Args[0] y := s.Args[1] + x := s.Args[0] v_1 := v.Args[1] if v_1.Op != OpConst64 { break @@ -20204,9 +36480,8 @@ func rewriteValuegeneric_OpNeq64_0(v *Value) bool { if s.Op != OpSub64 { break } - _ = s.Args[1] - x := s.Args[0] y := s.Args[1] + x := s.Args[0] if !(s.Uses == 1) { break } @@ -20260,14 +36535,12 @@ func rewriteValuegeneric_OpNeq64F_0(v *Value) bool { } func rewriteValuegeneric_OpNeq8_0(v *Value) bool { b := v.Block - _ = b // match: (Neq8 x x) // cond: // result: (ConstBool [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpConstBool) @@ -20289,7 +36562,7 @@ func rewriteValuegeneric_OpNeq8_0(v *Value) bool { if v_1.Op != OpAdd8 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst8 { break @@ -20298,7 +36571,6 @@ func rewriteValuegeneric_OpNeq8_0(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpNeq8) v0 := b.NewValue0(v.Pos, OpConst8, t) v0.AuxInt = int64(int8(c - d)) @@ -20347,14 +36619,13 @@ func rewriteValuegeneric_OpNeq8_0(v *Value) bool { if v_0.Op != OpAdd8 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst8 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst8 { break @@ -20449,9 +36720,8 @@ func rewriteValuegeneric_OpNeq8_0(v *Value) bool { if s.Op != OpSub8 { break } - _ = s.Args[1] - x := s.Args[0] y := s.Args[1] + x := s.Args[0] v_1 := v.Args[1] if v_1.Op != OpConst8 { break @@ -20483,9 +36753,8 @@ func rewriteValuegeneric_OpNeq8_0(v *Value) bool { if s.Op != OpSub8 { break } - _ = s.Args[1] - x := s.Args[0] y := s.Args[1] + x := s.Args[0] if !(s.Uses == 1) { break } @@ -20539,7 +36808,7 @@ func rewriteValuegeneric_OpNeqB_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConstBool { break @@ -20547,7 +36816,6 @@ func rewriteValuegeneric_OpNeqB_0(v *Value) bool { if v_0.AuxInt != 0 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -20575,7 +36843,7 @@ func rewriteValuegeneric_OpNeqB_0(v *Value) bool { // cond: // result: (Not x) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConstBool { break @@ -20583,7 +36851,6 @@ func rewriteValuegeneric_OpNeqB_0(v *Value) bool { if v_0.AuxInt != 1 { break } - x := v.Args[1] v.reset(OpNot) v.AddArg(x) return true @@ -20649,16 +36916,13 @@ func rewriteValuegeneric_OpNeqB_0(v *Value) bool { } func rewriteValuegeneric_OpNeqInter_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (NeqInter x y) // cond: // result: (NeqPtr (ITab x) (ITab y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpNeqPtr) v0 := b.NewValue0(v.Pos, OpITab, typ.Uintptr) v0.AddArg(x) @@ -20674,9 +36938,8 @@ func rewriteValuegeneric_OpNeqPtr_0(v *Value) bool { // cond: // result: (ConstBool [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpConstBool) @@ -20767,14 +37030,13 @@ func rewriteValuegeneric_OpNeqPtr_0(v *Value) bool { // cond: isSamePtr(p1, p2) // result: (ConstBool [b2i(o1 != 0)]) for { - _ = v.Args[1] + p2 := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpOffPtr { break } o1 := v_0.AuxInt p1 := v_0.Args[0] - p2 := v.Args[1] if !(isSamePtr(p1, p2)) { break } @@ -21004,15 +37266,13 @@ func rewriteValuegeneric_OpNeqPtr_10(v *Value) bool { // cond: isSamePtr(p1, p2) // result: (IsNonNil o1) for { - _ = v.Args[1] + p2 := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAddPtr { break } - _ = v_0.Args[1] - p1 := v_0.Args[0] o1 := v_0.Args[1] - p2 := v.Args[1] + p1 := v_0.Args[0] if !(isSamePtr(p1, p2)) { break } @@ -21030,9 +37290,8 @@ func rewriteValuegeneric_OpNeqPtr_10(v *Value) bool { if v_1.Op != OpAddPtr { break } - _ = v_1.Args[1] - p1 := v_1.Args[0] o1 := v_1.Args[1] + p1 := v_1.Args[0] if !(isSamePtr(p1, p2)) { break } @@ -21044,7 +37303,7 @@ func rewriteValuegeneric_OpNeqPtr_10(v *Value) bool { // cond: // result: (IsNonNil p) for { - _ = v.Args[1] + p := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst32 { break @@ -21052,7 +37311,6 @@ func rewriteValuegeneric_OpNeqPtr_10(v *Value) bool { if v_0.AuxInt != 0 { break } - p := v.Args[1] v.reset(OpIsNonNil) v.AddArg(p) return true @@ -21081,7 +37339,7 @@ func rewriteValuegeneric_OpNeqPtr_20(v *Value) bool { // cond: // result: (IsNonNil p) for { - _ = v.Args[1] + p := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst64 { break @@ -21089,7 +37347,6 @@ func rewriteValuegeneric_OpNeqPtr_20(v *Value) bool { if v_0.AuxInt != 0 { break } - p := v.Args[1] v.reset(OpIsNonNil) v.AddArg(p) return true @@ -21115,12 +37372,11 @@ func rewriteValuegeneric_OpNeqPtr_20(v *Value) bool { // cond: // result: (IsNonNil p) for { - _ = v.Args[1] + p := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConstNil { break } - p := v.Args[1] v.reset(OpIsNonNil) v.AddArg(p) return true @@ -21143,16 +37399,13 @@ func rewriteValuegeneric_OpNeqPtr_20(v *Value) bool { } func rewriteValuegeneric_OpNeqSlice_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (NeqSlice x y) // cond: // result: (NeqPtr (SlicePtr x) (SlicePtr y)) for { - _ = v.Args[1] - x := v.Args[0] y := v.Args[1] + x := v.Args[0] v.reset(OpNeqPtr) v0 := b.NewValue0(v.Pos, OpSlicePtr, typ.BytePtr) v0.AddArg(x) @@ -21165,22 +37418,18 @@ func rewriteValuegeneric_OpNeqSlice_0(v *Value) bool { } func rewriteValuegeneric_OpNilCheck_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config fe := b.Func.fe - _ = fe // match: (NilCheck (GetG mem) mem) // cond: // result: mem for { - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpGetG { break } - mem := v_0.Args[0] - if mem != v.Args[1] { + if mem != v_0.Args[0] { break } v.reset(OpCopy) @@ -21276,9 +37525,8 @@ func rewriteValuegeneric_OpNot_0(v *Value) bool { if v_0.Op != OpEq64 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpNeq64) v.AddArg(x) v.AddArg(y) @@ -21292,9 +37540,8 @@ func rewriteValuegeneric_OpNot_0(v *Value) bool { if v_0.Op != OpEq32 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpNeq32) v.AddArg(x) v.AddArg(y) @@ -21308,9 +37555,8 @@ func rewriteValuegeneric_OpNot_0(v *Value) bool { if v_0.Op != OpEq16 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpNeq16) v.AddArg(x) v.AddArg(y) @@ -21324,9 +37570,8 @@ func rewriteValuegeneric_OpNot_0(v *Value) bool { if v_0.Op != OpEq8 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpNeq8) v.AddArg(x) v.AddArg(y) @@ -21340,9 +37585,8 @@ func rewriteValuegeneric_OpNot_0(v *Value) bool { if v_0.Op != OpEqB { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpNeqB) v.AddArg(x) v.AddArg(y) @@ -21356,9 +37600,8 @@ func rewriteValuegeneric_OpNot_0(v *Value) bool { if v_0.Op != OpNeq64 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpEq64) v.AddArg(x) v.AddArg(y) @@ -21372,9 +37615,8 @@ func rewriteValuegeneric_OpNot_0(v *Value) bool { if v_0.Op != OpNeq32 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpEq32) v.AddArg(x) v.AddArg(y) @@ -21388,9 +37630,8 @@ func rewriteValuegeneric_OpNot_0(v *Value) bool { if v_0.Op != OpNeq16 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpEq16) v.AddArg(x) v.AddArg(y) @@ -21404,9 +37645,8 @@ func rewriteValuegeneric_OpNot_0(v *Value) bool { if v_0.Op != OpNeq8 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpEq8) v.AddArg(x) v.AddArg(y) @@ -21423,9 +37663,8 @@ func rewriteValuegeneric_OpNot_10(v *Value) bool { if v_0.Op != OpNeqB { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpEqB) v.AddArg(x) v.AddArg(y) @@ -21439,9 +37678,8 @@ func rewriteValuegeneric_OpNot_10(v *Value) bool { if v_0.Op != OpGreater64 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpLeq64) v.AddArg(x) v.AddArg(y) @@ -21455,9 +37693,8 @@ func rewriteValuegeneric_OpNot_10(v *Value) bool { if v_0.Op != OpGreater32 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpLeq32) v.AddArg(x) v.AddArg(y) @@ -21471,9 +37708,8 @@ func rewriteValuegeneric_OpNot_10(v *Value) bool { if v_0.Op != OpGreater16 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpLeq16) v.AddArg(x) v.AddArg(y) @@ -21487,9 +37723,8 @@ func rewriteValuegeneric_OpNot_10(v *Value) bool { if v_0.Op != OpGreater8 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpLeq8) v.AddArg(x) v.AddArg(y) @@ -21503,9 +37738,8 @@ func rewriteValuegeneric_OpNot_10(v *Value) bool { if v_0.Op != OpGreater64U { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpLeq64U) v.AddArg(x) v.AddArg(y) @@ -21519,9 +37753,8 @@ func rewriteValuegeneric_OpNot_10(v *Value) bool { if v_0.Op != OpGreater32U { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpLeq32U) v.AddArg(x) v.AddArg(y) @@ -21535,9 +37768,8 @@ func rewriteValuegeneric_OpNot_10(v *Value) bool { if v_0.Op != OpGreater16U { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpLeq16U) v.AddArg(x) v.AddArg(y) @@ -21551,9 +37783,8 @@ func rewriteValuegeneric_OpNot_10(v *Value) bool { if v_0.Op != OpGreater8U { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpLeq8U) v.AddArg(x) v.AddArg(y) @@ -21567,9 +37798,8 @@ func rewriteValuegeneric_OpNot_10(v *Value) bool { if v_0.Op != OpGeq64 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpLess64) v.AddArg(x) v.AddArg(y) @@ -21586,9 +37816,8 @@ func rewriteValuegeneric_OpNot_20(v *Value) bool { if v_0.Op != OpGeq32 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpLess32) v.AddArg(x) v.AddArg(y) @@ -21602,9 +37831,8 @@ func rewriteValuegeneric_OpNot_20(v *Value) bool { if v_0.Op != OpGeq16 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpLess16) v.AddArg(x) v.AddArg(y) @@ -21618,9 +37846,8 @@ func rewriteValuegeneric_OpNot_20(v *Value) bool { if v_0.Op != OpGeq8 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpLess8) v.AddArg(x) v.AddArg(y) @@ -21634,9 +37861,8 @@ func rewriteValuegeneric_OpNot_20(v *Value) bool { if v_0.Op != OpGeq64U { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpLess64U) v.AddArg(x) v.AddArg(y) @@ -21650,9 +37876,8 @@ func rewriteValuegeneric_OpNot_20(v *Value) bool { if v_0.Op != OpGeq32U { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpLess32U) v.AddArg(x) v.AddArg(y) @@ -21666,9 +37891,8 @@ func rewriteValuegeneric_OpNot_20(v *Value) bool { if v_0.Op != OpGeq16U { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpLess16U) v.AddArg(x) v.AddArg(y) @@ -21682,9 +37906,8 @@ func rewriteValuegeneric_OpNot_20(v *Value) bool { if v_0.Op != OpGeq8U { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpLess8U) v.AddArg(x) v.AddArg(y) @@ -21698,9 +37921,8 @@ func rewriteValuegeneric_OpNot_20(v *Value) bool { if v_0.Op != OpLess64 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpGeq64) v.AddArg(x) v.AddArg(y) @@ -21714,9 +37936,8 @@ func rewriteValuegeneric_OpNot_20(v *Value) bool { if v_0.Op != OpLess32 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpGeq32) v.AddArg(x) v.AddArg(y) @@ -21730,9 +37951,8 @@ func rewriteValuegeneric_OpNot_20(v *Value) bool { if v_0.Op != OpLess16 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpGeq16) v.AddArg(x) v.AddArg(y) @@ -21749,9 +37969,8 @@ func rewriteValuegeneric_OpNot_30(v *Value) bool { if v_0.Op != OpLess8 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpGeq8) v.AddArg(x) v.AddArg(y) @@ -21765,9 +37984,8 @@ func rewriteValuegeneric_OpNot_30(v *Value) bool { if v_0.Op != OpLess64U { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpGeq64U) v.AddArg(x) v.AddArg(y) @@ -21781,9 +37999,8 @@ func rewriteValuegeneric_OpNot_30(v *Value) bool { if v_0.Op != OpLess32U { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpGeq32U) v.AddArg(x) v.AddArg(y) @@ -21797,9 +38014,8 @@ func rewriteValuegeneric_OpNot_30(v *Value) bool { if v_0.Op != OpLess16U { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpGeq16U) v.AddArg(x) v.AddArg(y) @@ -21813,9 +38029,8 @@ func rewriteValuegeneric_OpNot_30(v *Value) bool { if v_0.Op != OpLess8U { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpGeq8U) v.AddArg(x) v.AddArg(y) @@ -21829,9 +38044,8 @@ func rewriteValuegeneric_OpNot_30(v *Value) bool { if v_0.Op != OpLeq64 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpGreater64) v.AddArg(x) v.AddArg(y) @@ -21845,9 +38059,8 @@ func rewriteValuegeneric_OpNot_30(v *Value) bool { if v_0.Op != OpLeq32 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpGreater32) v.AddArg(x) v.AddArg(y) @@ -21861,9 +38074,8 @@ func rewriteValuegeneric_OpNot_30(v *Value) bool { if v_0.Op != OpLeq16 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpGreater16) v.AddArg(x) v.AddArg(y) @@ -21877,9 +38089,8 @@ func rewriteValuegeneric_OpNot_30(v *Value) bool { if v_0.Op != OpLeq8 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpGreater8) v.AddArg(x) v.AddArg(y) @@ -21893,9 +38104,8 @@ func rewriteValuegeneric_OpNot_30(v *Value) bool { if v_0.Op != OpLeq64U { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpGreater64U) v.AddArg(x) v.AddArg(y) @@ -21912,9 +38122,8 @@ func rewriteValuegeneric_OpNot_40(v *Value) bool { if v_0.Op != OpLeq32U { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpGreater32U) v.AddArg(x) v.AddArg(y) @@ -21928,9 +38137,8 @@ func rewriteValuegeneric_OpNot_40(v *Value) bool { if v_0.Op != OpLeq16U { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpGreater16U) v.AddArg(x) v.AddArg(y) @@ -21944,9 +38152,8 @@ func rewriteValuegeneric_OpNot_40(v *Value) bool { if v_0.Op != OpLeq8U { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v.reset(OpGreater8U) v.AddArg(x) v.AddArg(y) @@ -22032,9 +38239,8 @@ func rewriteValuegeneric_OpOr16_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -22046,7 +38252,7 @@ func rewriteValuegeneric_OpOr16_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst16 { break @@ -22054,7 +38260,6 @@ func rewriteValuegeneric_OpOr16_0(v *Value) bool { if v_0.AuxInt != 0 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -22120,11 +38325,10 @@ func rewriteValuegeneric_OpOr16_0(v *Value) bool { if v_1.Op != OpOr16 { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpOr16) v.AddArg(x) v.AddArg(y) @@ -22154,15 +38358,13 @@ func rewriteValuegeneric_OpOr16_0(v *Value) bool { // cond: // result: (Or16 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpOr16 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpOr16) @@ -22174,20 +38376,18 @@ func rewriteValuegeneric_OpOr16_0(v *Value) bool { } func rewriteValuegeneric_OpOr16_10(v *Value) bool { b := v.Block - _ = b // match: (Or16 (Or16 y x) x) // cond: // result: (Or16 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpOr16 { break } _ = v_0.Args[1] y := v_0.Args[0] - x := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[1] { break } v.reset(OpOr16) @@ -22236,13 +38436,12 @@ func rewriteValuegeneric_OpOr16_10(v *Value) bool { if v_0.Op != OpAnd16 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst16 { break } c2 := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst16 { break @@ -22306,13 +38505,12 @@ func rewriteValuegeneric_OpOr16_10(v *Value) bool { if v_1.Op != OpAnd16 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst16 { break } c2 := v_1_0.AuxInt - x := v_1.Args[1] if !(^(c1 | c2) == 0) { break } @@ -22327,19 +38525,17 @@ func rewriteValuegeneric_OpOr16_10(v *Value) bool { // cond: (z.Op != OpConst16 && x.Op != OpConst16) // result: (Or16 i (Or16 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpOr16 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst16 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst16 && x.Op != OpConst16) { break } @@ -22355,7 +38551,7 @@ func rewriteValuegeneric_OpOr16_10(v *Value) bool { // cond: (z.Op != OpConst16 && x.Op != OpConst16) // result: (Or16 i (Or16 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpOr16 { break @@ -22367,7 +38563,6 @@ func rewriteValuegeneric_OpOr16_10(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst16 && x.Op != OpConst16) { break } @@ -22389,13 +38584,12 @@ func rewriteValuegeneric_OpOr16_10(v *Value) bool { if v_1.Op != OpOr16 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst16 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst16 && x.Op != OpConst16) { break } @@ -22450,7 +38644,7 @@ func rewriteValuegeneric_OpOr16_10(v *Value) bool { if v_1.Op != OpOr16 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst16 { break @@ -22459,7 +38653,6 @@ func rewriteValuegeneric_OpOr16_10(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpOr16) v0 := b.NewValue0(v.Pos, OpConst16, t) v0.AuxInt = int64(int16(c | d)) @@ -22471,7 +38664,6 @@ func rewriteValuegeneric_OpOr16_10(v *Value) bool { } func rewriteValuegeneric_OpOr16_20(v *Value) bool { b := v.Block - _ = b // match: (Or16 (Const16 [c]) (Or16 x (Const16 [d]))) // cond: // result: (Or16 (Const16 [int64(int16(c|d))]) x) @@ -22513,14 +38705,13 @@ func rewriteValuegeneric_OpOr16_20(v *Value) bool { if v_0.Op != OpOr16 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst16 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst16 { break @@ -22613,9 +38804,8 @@ func rewriteValuegeneric_OpOr32_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -22627,7 +38817,7 @@ func rewriteValuegeneric_OpOr32_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst32 { break @@ -22635,7 +38825,6 @@ func rewriteValuegeneric_OpOr32_0(v *Value) bool { if v_0.AuxInt != 0 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -22701,11 +38890,10 @@ func rewriteValuegeneric_OpOr32_0(v *Value) bool { if v_1.Op != OpOr32 { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpOr32) v.AddArg(x) v.AddArg(y) @@ -22735,15 +38923,13 @@ func rewriteValuegeneric_OpOr32_0(v *Value) bool { // cond: // result: (Or32 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpOr32 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpOr32) @@ -22755,20 +38941,18 @@ func rewriteValuegeneric_OpOr32_0(v *Value) bool { } func rewriteValuegeneric_OpOr32_10(v *Value) bool { b := v.Block - _ = b // match: (Or32 (Or32 y x) x) // cond: // result: (Or32 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpOr32 { break } _ = v_0.Args[1] y := v_0.Args[0] - x := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[1] { break } v.reset(OpOr32) @@ -22817,13 +39001,12 @@ func rewriteValuegeneric_OpOr32_10(v *Value) bool { if v_0.Op != OpAnd32 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst32 { break } c2 := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst32 { break @@ -22887,13 +39070,12 @@ func rewriteValuegeneric_OpOr32_10(v *Value) bool { if v_1.Op != OpAnd32 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break } c2 := v_1_0.AuxInt - x := v_1.Args[1] if !(^(c1 | c2) == 0) { break } @@ -22908,19 +39090,17 @@ func rewriteValuegeneric_OpOr32_10(v *Value) bool { // cond: (z.Op != OpConst32 && x.Op != OpConst32) // result: (Or32 i (Or32 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpOr32 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst32 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst32 && x.Op != OpConst32) { break } @@ -22936,7 +39116,7 @@ func rewriteValuegeneric_OpOr32_10(v *Value) bool { // cond: (z.Op != OpConst32 && x.Op != OpConst32) // result: (Or32 i (Or32 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpOr32 { break @@ -22948,7 +39128,6 @@ func rewriteValuegeneric_OpOr32_10(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst32 && x.Op != OpConst32) { break } @@ -22970,13 +39149,12 @@ func rewriteValuegeneric_OpOr32_10(v *Value) bool { if v_1.Op != OpOr32 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst32 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst32 && x.Op != OpConst32) { break } @@ -23031,7 +39209,7 @@ func rewriteValuegeneric_OpOr32_10(v *Value) bool { if v_1.Op != OpOr32 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break @@ -23040,7 +39218,6 @@ func rewriteValuegeneric_OpOr32_10(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpOr32) v0 := b.NewValue0(v.Pos, OpConst32, t) v0.AuxInt = int64(int32(c | d)) @@ -23052,7 +39229,6 @@ func rewriteValuegeneric_OpOr32_10(v *Value) bool { } func rewriteValuegeneric_OpOr32_20(v *Value) bool { b := v.Block - _ = b // match: (Or32 (Const32 [c]) (Or32 x (Const32 [d]))) // cond: // result: (Or32 (Const32 [int64(int32(c|d))]) x) @@ -23094,14 +39270,13 @@ func rewriteValuegeneric_OpOr32_20(v *Value) bool { if v_0.Op != OpOr32 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst32 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst32 { break @@ -23194,9 +39369,8 @@ func rewriteValuegeneric_OpOr64_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -23208,7 +39382,7 @@ func rewriteValuegeneric_OpOr64_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst64 { break @@ -23216,7 +39390,6 @@ func rewriteValuegeneric_OpOr64_0(v *Value) bool { if v_0.AuxInt != 0 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -23282,11 +39455,10 @@ func rewriteValuegeneric_OpOr64_0(v *Value) bool { if v_1.Op != OpOr64 { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpOr64) v.AddArg(x) v.AddArg(y) @@ -23316,15 +39488,13 @@ func rewriteValuegeneric_OpOr64_0(v *Value) bool { // cond: // result: (Or64 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpOr64 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpOr64) @@ -23336,20 +39506,18 @@ func rewriteValuegeneric_OpOr64_0(v *Value) bool { } func rewriteValuegeneric_OpOr64_10(v *Value) bool { b := v.Block - _ = b // match: (Or64 (Or64 y x) x) // cond: // result: (Or64 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpOr64 { break } _ = v_0.Args[1] y := v_0.Args[0] - x := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[1] { break } v.reset(OpOr64) @@ -23398,13 +39566,12 @@ func rewriteValuegeneric_OpOr64_10(v *Value) bool { if v_0.Op != OpAnd64 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst64 { break } c2 := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst64 { break @@ -23468,13 +39635,12 @@ func rewriteValuegeneric_OpOr64_10(v *Value) bool { if v_1.Op != OpAnd64 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst64 { break } c2 := v_1_0.AuxInt - x := v_1.Args[1] if !(^(c1 | c2) == 0) { break } @@ -23489,19 +39655,17 @@ func rewriteValuegeneric_OpOr64_10(v *Value) bool { // cond: (z.Op != OpConst64 && x.Op != OpConst64) // result: (Or64 i (Or64 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpOr64 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst64 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst64 && x.Op != OpConst64) { break } @@ -23517,7 +39681,7 @@ func rewriteValuegeneric_OpOr64_10(v *Value) bool { // cond: (z.Op != OpConst64 && x.Op != OpConst64) // result: (Or64 i (Or64 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpOr64 { break @@ -23529,7 +39693,6 @@ func rewriteValuegeneric_OpOr64_10(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst64 && x.Op != OpConst64) { break } @@ -23551,13 +39714,12 @@ func rewriteValuegeneric_OpOr64_10(v *Value) bool { if v_1.Op != OpOr64 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst64 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst64 && x.Op != OpConst64) { break } @@ -23612,7 +39774,7 @@ func rewriteValuegeneric_OpOr64_10(v *Value) bool { if v_1.Op != OpOr64 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst64 { break @@ -23621,7 +39783,6 @@ func rewriteValuegeneric_OpOr64_10(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpOr64) v0 := b.NewValue0(v.Pos, OpConst64, t) v0.AuxInt = c | d @@ -23633,7 +39794,6 @@ func rewriteValuegeneric_OpOr64_10(v *Value) bool { } func rewriteValuegeneric_OpOr64_20(v *Value) bool { b := v.Block - _ = b // match: (Or64 (Const64 [c]) (Or64 x (Const64 [d]))) // cond: // result: (Or64 (Const64 [c|d]) x) @@ -23675,14 +39835,13 @@ func rewriteValuegeneric_OpOr64_20(v *Value) bool { if v_0.Op != OpOr64 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst64 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst64 { break @@ -23775,9 +39934,8 @@ func rewriteValuegeneric_OpOr8_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpCopy) @@ -23789,7 +39947,7 @@ func rewriteValuegeneric_OpOr8_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst8 { break @@ -23797,7 +39955,6 @@ func rewriteValuegeneric_OpOr8_0(v *Value) bool { if v_0.AuxInt != 0 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -23863,11 +40020,10 @@ func rewriteValuegeneric_OpOr8_0(v *Value) bool { if v_1.Op != OpOr8 { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpOr8) v.AddArg(x) v.AddArg(y) @@ -23897,15 +40053,13 @@ func rewriteValuegeneric_OpOr8_0(v *Value) bool { // cond: // result: (Or8 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpOr8 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpOr8) @@ -23917,20 +40071,18 @@ func rewriteValuegeneric_OpOr8_0(v *Value) bool { } func rewriteValuegeneric_OpOr8_10(v *Value) bool { b := v.Block - _ = b // match: (Or8 (Or8 y x) x) // cond: // result: (Or8 x y) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpOr8 { break } _ = v_0.Args[1] y := v_0.Args[0] - x := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[1] { break } v.reset(OpOr8) @@ -23979,13 +40131,12 @@ func rewriteValuegeneric_OpOr8_10(v *Value) bool { if v_0.Op != OpAnd8 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst8 { break } c2 := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst8 { break @@ -24049,13 +40200,12 @@ func rewriteValuegeneric_OpOr8_10(v *Value) bool { if v_1.Op != OpAnd8 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst8 { break } c2 := v_1_0.AuxInt - x := v_1.Args[1] if !(^(c1 | c2) == 0) { break } @@ -24070,19 +40220,17 @@ func rewriteValuegeneric_OpOr8_10(v *Value) bool { // cond: (z.Op != OpConst8 && x.Op != OpConst8) // result: (Or8 i (Or8 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpOr8 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst8 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst8 && x.Op != OpConst8) { break } @@ -24098,7 +40246,7 @@ func rewriteValuegeneric_OpOr8_10(v *Value) bool { // cond: (z.Op != OpConst8 && x.Op != OpConst8) // result: (Or8 i (Or8 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpOr8 { break @@ -24110,7 +40258,6 @@ func rewriteValuegeneric_OpOr8_10(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst8 && x.Op != OpConst8) { break } @@ -24132,13 +40279,12 @@ func rewriteValuegeneric_OpOr8_10(v *Value) bool { if v_1.Op != OpOr8 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst8 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst8 && x.Op != OpConst8) { break } @@ -24193,7 +40339,7 @@ func rewriteValuegeneric_OpOr8_10(v *Value) bool { if v_1.Op != OpOr8 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst8 { break @@ -24202,7 +40348,6 @@ func rewriteValuegeneric_OpOr8_10(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpOr8) v0 := b.NewValue0(v.Pos, OpConst8, t) v0.AuxInt = int64(int8(c | d)) @@ -24214,7 +40359,6 @@ func rewriteValuegeneric_OpOr8_10(v *Value) bool { } func rewriteValuegeneric_OpOr8_20(v *Value) bool { b := v.Block - _ = b // match: (Or8 (Const8 [c]) (Or8 x (Const8 [d]))) // cond: // result: (Or8 (Const8 [int64(int8(c|d))]) x) @@ -24256,14 +40400,13 @@ func rewriteValuegeneric_OpOr8_20(v *Value) bool { if v_0.Op != OpOr8 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst8 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst8 { break @@ -24414,19 +40557,15 @@ func rewriteValuegeneric_OpPhi_0(v *Value) bool { } func rewriteValuegeneric_OpPtrIndex_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config typ := &b.Func.Config.Types - _ = typ // match: (PtrIndex ptr idx) // cond: config.PtrSize == 4 // result: (AddPtr ptr (Mul32 idx (Const32 [t.Elem().Size()]))) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] idx := v.Args[1] + ptr := v.Args[0] if !(config.PtrSize == 4) { break } @@ -24445,9 +40584,8 @@ func rewriteValuegeneric_OpPtrIndex_0(v *Value) bool { // result: (AddPtr ptr (Mul64 idx (Const64 [t.Elem().Size()]))) for { t := v.Type - _ = v.Args[1] - ptr := v.Args[0] idx := v.Args[1] + ptr := v.Args[0] if !(config.PtrSize == 8) { break } @@ -24463,6 +40601,94 @@ func rewriteValuegeneric_OpPtrIndex_0(v *Value) bool { } return false } +func rewriteValuegeneric_OpRotateLeft16_0(v *Value) bool { + // match: (RotateLeft16 x (Const16 [c])) + // cond: c%16 == 0 + // result: x + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpConst16 { + break + } + c := v_1.AuxInt + if !(c%16 == 0) { + break + } + v.reset(OpCopy) + v.Type = x.Type + v.AddArg(x) + return true + } + return false +} +func rewriteValuegeneric_OpRotateLeft32_0(v *Value) bool { + // match: (RotateLeft32 x (Const32 [c])) + // cond: c%32 == 0 + // result: x + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpConst32 { + break + } + c := v_1.AuxInt + if !(c%32 == 0) { + break + } + v.reset(OpCopy) + v.Type = x.Type + v.AddArg(x) + return true + } + return false +} +func rewriteValuegeneric_OpRotateLeft64_0(v *Value) bool { + // match: (RotateLeft64 x (Const64 [c])) + // cond: c%64 == 0 + // result: x + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpConst64 { + break + } + c := v_1.AuxInt + if !(c%64 == 0) { + break + } + v.reset(OpCopy) + v.Type = x.Type + v.AddArg(x) + return true + } + return false +} +func rewriteValuegeneric_OpRotateLeft8_0(v *Value) bool { + // match: (RotateLeft8 x (Const8 [c])) + // cond: c%8 == 0 + // result: x + for { + _ = v.Args[1] + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpConst8 { + break + } + c := v_1.AuxInt + if !(c%8 == 0) { + break + } + v.reset(OpCopy) + v.Type = x.Type + v.AddArg(x) + return true + } + return false +} func rewriteValuegeneric_OpRound32F_0(v *Value) bool { // match: (Round32F x:(Const32F)) // cond: @@ -24497,7 +40723,6 @@ func rewriteValuegeneric_OpRound64F_0(v *Value) bool { } func rewriteValuegeneric_OpRsh16Ux16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh16Ux16 x (Const16 [c])) // cond: // result: (Rsh16Ux64 x (Const64 [int64(uint16(c))])) @@ -24537,7 +40762,6 @@ func rewriteValuegeneric_OpRsh16Ux16_0(v *Value) bool { } func rewriteValuegeneric_OpRsh16Ux32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh16Ux32 x (Const32 [c])) // cond: // result: (Rsh16Ux64 x (Const64 [int64(uint32(c))])) @@ -24577,9 +40801,7 @@ func rewriteValuegeneric_OpRsh16Ux32_0(v *Value) bool { } func rewriteValuegeneric_OpRsh16Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16Ux64 (Const16 [c]) (Const64 [d])) // cond: // result: (Const16 [int64(int16(uint16(c) >> uint64(d)))]) @@ -24784,7 +41006,6 @@ func rewriteValuegeneric_OpRsh16Ux64_0(v *Value) bool { } func rewriteValuegeneric_OpRsh16Ux8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh16Ux8 x (Const8 [c])) // cond: // result: (Rsh16Ux64 x (Const64 [int64(uint8(c))])) @@ -24824,7 +41045,6 @@ func rewriteValuegeneric_OpRsh16Ux8_0(v *Value) bool { } func rewriteValuegeneric_OpRsh16x16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh16x16 x (Const16 [c])) // cond: // result: (Rsh16x64 x (Const64 [int64(uint16(c))])) @@ -24864,7 +41084,6 @@ func rewriteValuegeneric_OpRsh16x16_0(v *Value) bool { } func rewriteValuegeneric_OpRsh16x32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh16x32 x (Const32 [c])) // cond: // result: (Rsh16x64 x (Const64 [int64(uint32(c))])) @@ -24904,9 +41123,7 @@ func rewriteValuegeneric_OpRsh16x32_0(v *Value) bool { } func rewriteValuegeneric_OpRsh16x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh16x64 (Const16 [c]) (Const64 [d])) // cond: // result: (Const16 [int64(int16(c) >> uint64(d))]) @@ -25027,7 +41244,6 @@ func rewriteValuegeneric_OpRsh16x64_0(v *Value) bool { } func rewriteValuegeneric_OpRsh16x8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh16x8 x (Const8 [c])) // cond: // result: (Rsh16x64 x (Const64 [int64(uint8(c))])) @@ -25067,7 +41283,6 @@ func rewriteValuegeneric_OpRsh16x8_0(v *Value) bool { } func rewriteValuegeneric_OpRsh32Ux16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32Ux16 x (Const16 [c])) // cond: // result: (Rsh32Ux64 x (Const64 [int64(uint16(c))])) @@ -25107,7 +41322,6 @@ func rewriteValuegeneric_OpRsh32Ux16_0(v *Value) bool { } func rewriteValuegeneric_OpRsh32Ux32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32Ux32 x (Const32 [c])) // cond: // result: (Rsh32Ux64 x (Const64 [int64(uint32(c))])) @@ -25147,9 +41361,7 @@ func rewriteValuegeneric_OpRsh32Ux32_0(v *Value) bool { } func rewriteValuegeneric_OpRsh32Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32Ux64 (Const32 [c]) (Const64 [d])) // cond: // result: (Const32 [int64(int32(uint32(c) >> uint64(d)))]) @@ -25385,7 +41597,6 @@ func rewriteValuegeneric_OpRsh32Ux64_0(v *Value) bool { } func rewriteValuegeneric_OpRsh32Ux8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32Ux8 x (Const8 [c])) // cond: // result: (Rsh32Ux64 x (Const64 [int64(uint8(c))])) @@ -25425,7 +41636,6 @@ func rewriteValuegeneric_OpRsh32Ux8_0(v *Value) bool { } func rewriteValuegeneric_OpRsh32x16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32x16 x (Const16 [c])) // cond: // result: (Rsh32x64 x (Const64 [int64(uint16(c))])) @@ -25465,7 +41675,6 @@ func rewriteValuegeneric_OpRsh32x16_0(v *Value) bool { } func rewriteValuegeneric_OpRsh32x32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32x32 x (Const32 [c])) // cond: // result: (Rsh32x64 x (Const64 [int64(uint32(c))])) @@ -25505,9 +41714,7 @@ func rewriteValuegeneric_OpRsh32x32_0(v *Value) bool { } func rewriteValuegeneric_OpRsh32x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh32x64 (Const32 [c]) (Const64 [d])) // cond: // result: (Const32 [int64(int32(c) >> uint64(d))]) @@ -25659,7 +41866,6 @@ func rewriteValuegeneric_OpRsh32x64_0(v *Value) bool { } func rewriteValuegeneric_OpRsh32x8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh32x8 x (Const8 [c])) // cond: // result: (Rsh32x64 x (Const64 [int64(uint8(c))])) @@ -25699,7 +41905,6 @@ func rewriteValuegeneric_OpRsh32x8_0(v *Value) bool { } func rewriteValuegeneric_OpRsh64Ux16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh64Ux16 x (Const16 [c])) // cond: // result: (Rsh64Ux64 x (Const64 [int64(uint16(c))])) @@ -25739,7 +41944,6 @@ func rewriteValuegeneric_OpRsh64Ux16_0(v *Value) bool { } func rewriteValuegeneric_OpRsh64Ux32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh64Ux32 x (Const32 [c])) // cond: // result: (Rsh64Ux64 x (Const64 [int64(uint32(c))])) @@ -25779,9 +41983,7 @@ func rewriteValuegeneric_OpRsh64Ux32_0(v *Value) bool { } func rewriteValuegeneric_OpRsh64Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64Ux64 (Const64 [c]) (Const64 [d])) // cond: // result: (Const64 [int64(uint64(c) >> uint64(d))]) @@ -26048,7 +42250,6 @@ func rewriteValuegeneric_OpRsh64Ux64_0(v *Value) bool { } func rewriteValuegeneric_OpRsh64Ux8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh64Ux8 x (Const8 [c])) // cond: // result: (Rsh64Ux64 x (Const64 [int64(uint8(c))])) @@ -26088,7 +42289,6 @@ func rewriteValuegeneric_OpRsh64Ux8_0(v *Value) bool { } func rewriteValuegeneric_OpRsh64x16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh64x16 x (Const16 [c])) // cond: // result: (Rsh64x64 x (Const64 [int64(uint16(c))])) @@ -26128,7 +42328,6 @@ func rewriteValuegeneric_OpRsh64x16_0(v *Value) bool { } func rewriteValuegeneric_OpRsh64x32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh64x32 x (Const32 [c])) // cond: // result: (Rsh64x64 x (Const64 [int64(uint32(c))])) @@ -26168,9 +42367,7 @@ func rewriteValuegeneric_OpRsh64x32_0(v *Value) bool { } func rewriteValuegeneric_OpRsh64x64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh64x64 (Const64 [c]) (Const64 [d])) // cond: // result: (Const64 [c >> uint64(d)]) @@ -26353,7 +42550,6 @@ func rewriteValuegeneric_OpRsh64x64_0(v *Value) bool { } func rewriteValuegeneric_OpRsh64x8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh64x8 x (Const8 [c])) // cond: // result: (Rsh64x64 x (Const64 [int64(uint8(c))])) @@ -26393,7 +42589,6 @@ func rewriteValuegeneric_OpRsh64x8_0(v *Value) bool { } func rewriteValuegeneric_OpRsh8Ux16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh8Ux16 x (Const16 [c])) // cond: // result: (Rsh8Ux64 x (Const64 [int64(uint16(c))])) @@ -26433,7 +42628,6 @@ func rewriteValuegeneric_OpRsh8Ux16_0(v *Value) bool { } func rewriteValuegeneric_OpRsh8Ux32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh8Ux32 x (Const32 [c])) // cond: // result: (Rsh8Ux64 x (Const64 [int64(uint32(c))])) @@ -26473,9 +42667,7 @@ func rewriteValuegeneric_OpRsh8Ux32_0(v *Value) bool { } func rewriteValuegeneric_OpRsh8Ux64_0(v *Value) bool { b := v.Block - _ = b typ := &b.Func.Config.Types - _ = typ // match: (Rsh8Ux64 (Const8 [c]) (Const64 [d])) // cond: // result: (Const8 [int64(int8(uint8(c) >> uint64(d)))]) @@ -26649,7 +42841,6 @@ func rewriteValuegeneric_OpRsh8Ux64_0(v *Value) bool { } func rewriteValuegeneric_OpRsh8Ux8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh8Ux8 x (Const8 [c])) // cond: // result: (Rsh8Ux64 x (Const64 [int64(uint8(c))])) @@ -26689,7 +42880,6 @@ func rewriteValuegeneric_OpRsh8Ux8_0(v *Value) bool { } func rewriteValuegeneric_OpRsh8x16_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh8x16 x (Const16 [c])) // cond: // result: (Rsh8x64 x (Const64 [int64(uint16(c))])) @@ -26729,7 +42919,6 @@ func rewriteValuegeneric_OpRsh8x16_0(v *Value) bool { } func rewriteValuegeneric_OpRsh8x32_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh8x32 x (Const32 [c])) // cond: // result: (Rsh8x64 x (Const64 [int64(uint32(c))])) @@ -26769,7 +42958,6 @@ func rewriteValuegeneric_OpRsh8x32_0(v *Value) bool { } func rewriteValuegeneric_OpRsh8x64_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh8x64 (Const8 [c]) (Const64 [d])) // cond: // result: (Const8 [int64(int8(c) >> uint64(d))]) @@ -26859,7 +43047,6 @@ func rewriteValuegeneric_OpRsh8x64_0(v *Value) bool { } func rewriteValuegeneric_OpRsh8x8_0(v *Value) bool { b := v.Block - _ = b // match: (Rsh8x8 x (Const8 [c])) // cond: // result: (Rsh8x64 x (Const64 [int64(uint8(c))])) @@ -26897,6 +43084,56 @@ func rewriteValuegeneric_OpRsh8x8_0(v *Value) bool { } return false } +func rewriteValuegeneric_OpSelect0_0(v *Value) bool { + // match: (Select0 (Div128u (Const64 [0]) lo y)) + // cond: + // result: (Div64u lo y) + for { + v_0 := v.Args[0] + if v_0.Op != OpDiv128u { + break + } + y := v_0.Args[2] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst64 { + break + } + if v_0_0.AuxInt != 0 { + break + } + lo := v_0.Args[1] + v.reset(OpDiv64u) + v.AddArg(lo) + v.AddArg(y) + return true + } + return false +} +func rewriteValuegeneric_OpSelect1_0(v *Value) bool { + // match: (Select1 (Div128u (Const64 [0]) lo y)) + // cond: + // result: (Mod64u lo y) + for { + v_0 := v.Args[0] + if v_0.Op != OpDiv128u { + break + } + y := v_0.Args[2] + v_0_0 := v_0.Args[0] + if v_0_0.Op != OpConst64 { + break + } + if v_0_0.AuxInt != 0 { + break + } + lo := v_0.Args[1] + v.reset(OpMod64u) + v.AddArg(lo) + v.AddArg(y) + return true + } + return false +} func rewriteValuegeneric_OpSignExt16to32_0(v *Value) bool { // match: (SignExt16to32 (Const16 [c])) // cond: @@ -27393,9 +43630,7 @@ func rewriteValuegeneric_OpSqrt_0(v *Value) bool { } func rewriteValuegeneric_OpStaticCall_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (StaticCall {sym} s1:(Store _ (Const64 [sz]) s2:(Store _ src s3:(Store {t} _ dst mem)))) // cond: isSameSym(sym,"runtime.memmove") && t.(*types.Type).IsPtr() && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && isInlinableMemmove(dst,src,sz,config) && clobber(s1) && clobber(s2) && clobber(s3) // result: (Move {t.(*types.Type).Elem()} [sz] dst src mem) @@ -27422,9 +43657,8 @@ func rewriteValuegeneric_OpStaticCall_0(v *Value) bool { break } t := s3.Aux - _ = s3.Args[2] - dst := s3.Args[1] mem := s3.Args[2] + dst := s3.Args[1] if !(isSameSym(sym, "runtime.memmove") && t.(*types.Type).IsPtr() && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && isInlinableMemmove(dst, src, sz, config) && clobber(s1) && clobber(s2) && clobber(s3)) { break } @@ -27462,9 +43696,8 @@ func rewriteValuegeneric_OpStaticCall_0(v *Value) bool { break } t := s3.Aux - _ = s3.Args[2] - dst := s3.Args[1] mem := s3.Args[2] + dst := s3.Args[1] if !(isSameSym(sym, "runtime.memmove") && t.(*types.Type).IsPtr() && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && isInlinableMemmove(dst, src, sz, config) && clobber(s1) && clobber(s2) && clobber(s3)) { break } @@ -27494,13 +43727,12 @@ func rewriteValuegeneric_OpStaticCall_0(v *Value) bool { } func rewriteValuegeneric_OpStore_0(v *Value) bool { b := v.Block - _ = b // match: (Store {t1} p1 (Load p2 mem) mem) // cond: isSamePtr(p1, p2) && t2.Size() == sizeof(t1) // result: mem for { t1 := v.Aux - _ = v.Args[2] + mem := v.Args[2] p1 := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpLoad { @@ -27509,8 +43741,7 @@ func rewriteValuegeneric_OpStore_0(v *Value) bool { t2 := v_1.Type _ = v_1.Args[1] p2 := v_1.Args[0] - mem := v_1.Args[1] - if mem != v.Args[2] { + if mem != v_1.Args[1] { break } if !(isSamePtr(p1, p2) && t2.Size() == sizeof(t1)) { @@ -27533,9 +43764,8 @@ func rewriteValuegeneric_OpStore_0(v *Value) bool { break } t2 := v_1.Type - _ = v_1.Args[1] - p2 := v_1.Args[0] oldmem := v_1.Args[1] + p2 := v_1.Args[0] mem := v.Args[2] if mem.Op != OpStore { break @@ -27566,9 +43796,8 @@ func rewriteValuegeneric_OpStore_0(v *Value) bool { break } t2 := v_1.Type - _ = v_1.Args[1] - p2 := v_1.Args[0] oldmem := v_1.Args[1] + p2 := v_1.Args[0] mem := v.Args[2] if mem.Op != OpStore { break @@ -27606,9 +43835,8 @@ func rewriteValuegeneric_OpStore_0(v *Value) bool { break } t2 := v_1.Type - _ = v_1.Args[1] - p2 := v_1.Args[0] oldmem := v_1.Args[1] + p2 := v_1.Args[0] mem := v.Args[2] if mem.Op != OpStore { break @@ -27799,12 +44027,11 @@ func rewriteValuegeneric_OpStore_0(v *Value) bool { // cond: // result: mem for { - _ = v.Args[2] + mem := v.Args[2] v_1 := v.Args[1] if v_1.Op != OpStructMake0 { break } - mem := v.Args[2] v.reset(OpCopy) v.Type = mem.Type v.AddArg(mem) @@ -27814,7 +44041,7 @@ func rewriteValuegeneric_OpStore_0(v *Value) bool { // cond: // result: (Store {t.FieldType(0)} (OffPtr [0] dst) f0 mem) for { - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpStructMake1 { @@ -27822,7 +44049,6 @@ func rewriteValuegeneric_OpStore_0(v *Value) bool { } t := v_1.Type f0 := v_1.Args[0] - mem := v.Args[2] v.reset(OpStore) v.Aux = t.FieldType(0) v0 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(0).PtrTo()) @@ -27837,26 +44063,21 @@ func rewriteValuegeneric_OpStore_0(v *Value) bool { } func rewriteValuegeneric_OpStore_10(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config fe := b.Func.fe - _ = fe // match: (Store dst (StructMake2 f0 f1) mem) // cond: // result: (Store {t.FieldType(1)} (OffPtr [t.FieldOff(1)] dst) f1 (Store {t.FieldType(0)} (OffPtr [0] dst) f0 mem)) for { - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpStructMake2 { break } t := v_1.Type - _ = v_1.Args[1] - f0 := v_1.Args[0] f1 := v_1.Args[1] - mem := v.Args[2] + f0 := v_1.Args[0] v.reset(OpStore) v.Aux = t.FieldType(1) v0 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(1).PtrTo()) @@ -27879,18 +44100,16 @@ func rewriteValuegeneric_OpStore_10(v *Value) bool { // cond: // result: (Store {t.FieldType(2)} (OffPtr [t.FieldOff(2)] dst) f2 (Store {t.FieldType(1)} (OffPtr [t.FieldOff(1)] dst) f1 (Store {t.FieldType(0)} (OffPtr [0] dst) f0 mem))) for { - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpStructMake3 { break } t := v_1.Type - _ = v_1.Args[2] + f2 := v_1.Args[2] f0 := v_1.Args[0] f1 := v_1.Args[1] - f2 := v_1.Args[2] - mem := v.Args[2] v.reset(OpStore) v.Aux = t.FieldType(2) v0 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(2).PtrTo()) @@ -27921,19 +44140,17 @@ func rewriteValuegeneric_OpStore_10(v *Value) bool { // cond: // result: (Store {t.FieldType(3)} (OffPtr [t.FieldOff(3)] dst) f3 (Store {t.FieldType(2)} (OffPtr [t.FieldOff(2)] dst) f2 (Store {t.FieldType(1)} (OffPtr [t.FieldOff(1)] dst) f1 (Store {t.FieldType(0)} (OffPtr [0] dst) f0 mem)))) for { - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpStructMake4 { break } t := v_1.Type - _ = v_1.Args[3] + f3 := v_1.Args[3] f0 := v_1.Args[0] f1 := v_1.Args[1] f2 := v_1.Args[2] - f3 := v_1.Args[3] - mem := v.Args[2] v.reset(OpStore) v.Aux = t.FieldType(3) v0 := b.NewValue0(v.Pos, OpOffPtr, t.FieldType(3).PtrTo()) @@ -27973,7 +44190,7 @@ func rewriteValuegeneric_OpStore_10(v *Value) bool { // result: (Move {t} [sizeof(t)] dst src mem) for { t := v.Aux - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpLoad { @@ -27981,8 +44198,7 @@ func rewriteValuegeneric_OpStore_10(v *Value) bool { } _ = v_1.Args[1] src := v_1.Args[0] - mem := v_1.Args[1] - if mem != v.Args[2] { + if mem != v_1.Args[1] { break } if !(!fe.CanSSA(t.(*types.Type))) { @@ -28007,9 +44223,8 @@ func rewriteValuegeneric_OpStore_10(v *Value) bool { if v_1.Op != OpLoad { break } - _ = v_1.Args[1] - src := v_1.Args[0] mem := v_1.Args[1] + src := v_1.Args[0] v_2 := v.Args[2] if v_2.Op != OpVarDef { break @@ -28036,12 +44251,11 @@ func rewriteValuegeneric_OpStore_10(v *Value) bool { // cond: // result: mem for { - _ = v.Args[2] + mem := v.Args[2] v_1 := v.Args[1] if v_1.Op != OpArrayMake0 { break } - mem := v.Args[2] v.reset(OpCopy) v.Type = mem.Type v.AddArg(mem) @@ -28051,14 +44265,13 @@ func rewriteValuegeneric_OpStore_10(v *Value) bool { // cond: // result: (Store {e.Type} dst e mem) for { - _ = v.Args[2] + mem := v.Args[2] dst := v.Args[0] v_1 := v.Args[1] if v_1.Op != OpArrayMake1 { break } e := v_1.Args[0] - mem := v.Args[2] v.reset(OpStore) v.Aux = e.Type v.AddArg(dst) @@ -28070,7 +44283,7 @@ func rewriteValuegeneric_OpStore_10(v *Value) bool { // cond: isConstZero(x) && mem.Op == OpStaticCall && isSameSym(mem.Aux, "runtime.newobject") && c == config.ctxt.FixedFrameSize() + config.RegSize // result: mem for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpLoad { break @@ -28085,11 +44298,10 @@ func rewriteValuegeneric_OpStore_10(v *Value) bool { if v_0_0_0.Op != OpSP { break } - mem := v_0.Args[1] - x := v.Args[1] - if mem != v.Args[2] { + if mem != v_0.Args[1] { break } + x := v.Args[1] if !(isConstZero(x) && mem.Op == OpStaticCall && isSameSym(mem.Aux, "runtime.newobject") && c == config.ctxt.FixedFrameSize()+config.RegSize) { break } @@ -28102,7 +44314,7 @@ func rewriteValuegeneric_OpStore_10(v *Value) bool { // cond: isConstZero(x) && mem.Op == OpStaticCall && isSameSym(mem.Aux, "runtime.newobject") && c == config.ctxt.FixedFrameSize() + config.RegSize // result: mem for { - _ = v.Args[2] + mem := v.Args[2] v_0 := v.Args[0] if v_0.Op != OpOffPtr { break @@ -28121,11 +44333,10 @@ func rewriteValuegeneric_OpStore_10(v *Value) bool { if v_0_0_0_0.Op != OpSP { break } - mem := v_0_0.Args[1] - x := v.Args[1] - if mem != v.Args[2] { + if mem != v_0_0.Args[1] { break } + x := v.Args[1] if !(isConstZero(x) && mem.Op == OpStaticCall && isSameSym(mem.Aux, "runtime.newobject") && c == config.ctxt.FixedFrameSize()+config.RegSize) { break } @@ -28167,9 +44378,8 @@ func rewriteValuegeneric_OpStore_10(v *Value) bool { break } n := m3.AuxInt - _ = m3.Args[2] - p3 := m3.Args[0] mem := m3.Args[2] + p3 := m3.Args[0] if !(m2.Uses == 1 && m3.Uses == 1 && o1 == sizeof(t2) && n == sizeof(t2)+sizeof(t1) && isSamePtr(p1, p2) && isSamePtr(p2, p3) && clobber(m2) && clobber(m3)) { break } @@ -28189,7 +44399,6 @@ func rewriteValuegeneric_OpStore_10(v *Value) bool { } func rewriteValuegeneric_OpStore_20(v *Value) bool { b := v.Block - _ = b // match: (Store {t1} op1:(OffPtr [o1] p1) d1 m2:(Store {t2} op2:(OffPtr [o2] p2) d2 m3:(Store {t3} op3:(OffPtr [0] p3) d3 m4:(Move [n] p4 _ mem)))) // cond: m2.Uses == 1 && m3.Uses == 1 && m4.Uses == 1 && o2 == sizeof(t3) && o1-o2 == sizeof(t2) && n == sizeof(t3) + sizeof(t2) + sizeof(t1) && isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && clobber(m2) && clobber(m3) && clobber(m4) // result: (Store {t1} op1 d1 (Store {t2} op2 d2 (Store {t3} op3 d3 mem))) @@ -28236,9 +44445,8 @@ func rewriteValuegeneric_OpStore_20(v *Value) bool { break } n := m4.AuxInt - _ = m4.Args[2] - p4 := m4.Args[0] mem := m4.Args[2] + p4 := m4.Args[0] if !(m2.Uses == 1 && m3.Uses == 1 && m4.Uses == 1 && o2 == sizeof(t3) && o1-o2 == sizeof(t2) && n == sizeof(t3)+sizeof(t2)+sizeof(t1) && isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && clobber(m2) && clobber(m3) && clobber(m4)) { break } @@ -28318,9 +44526,8 @@ func rewriteValuegeneric_OpStore_20(v *Value) bool { break } n := m5.AuxInt - _ = m5.Args[2] - p5 := m5.Args[0] mem := m5.Args[2] + p5 := m5.Args[0] if !(m2.Uses == 1 && m3.Uses == 1 && m4.Uses == 1 && m5.Uses == 1 && o3 == sizeof(t4) && o2-o3 == sizeof(t3) && o1-o2 == sizeof(t2) && n == sizeof(t4)+sizeof(t3)+sizeof(t2)+sizeof(t1) && isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && isSamePtr(p4, p5) && clobber(m2) && clobber(m3) && clobber(m4) && clobber(m5)) { break } @@ -28379,9 +44586,8 @@ func rewriteValuegeneric_OpStore_20(v *Value) bool { break } n := m3.AuxInt - _ = m3.Args[1] - p3 := m3.Args[0] mem := m3.Args[1] + p3 := m3.Args[0] if !(m2.Uses == 1 && m3.Uses == 1 && o1 == sizeof(t2) && n == sizeof(t2)+sizeof(t1) && isSamePtr(p1, p2) && isSamePtr(p2, p3) && clobber(m2) && clobber(m3)) { break } @@ -28443,9 +44649,8 @@ func rewriteValuegeneric_OpStore_20(v *Value) bool { break } n := m4.AuxInt - _ = m4.Args[1] - p4 := m4.Args[0] mem := m4.Args[1] + p4 := m4.Args[0] if !(m2.Uses == 1 && m3.Uses == 1 && m4.Uses == 1 && o2 == sizeof(t3) && o1-o2 == sizeof(t2) && n == sizeof(t3)+sizeof(t2)+sizeof(t1) && isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && clobber(m2) && clobber(m3) && clobber(m4)) { break } @@ -28525,9 +44730,8 @@ func rewriteValuegeneric_OpStore_20(v *Value) bool { break } n := m5.AuxInt - _ = m5.Args[1] - p5 := m5.Args[0] mem := m5.Args[1] + p5 := m5.Args[0] if !(m2.Uses == 1 && m3.Uses == 1 && m4.Uses == 1 && m5.Uses == 1 && o3 == sizeof(t4) && o2-o3 == sizeof(t3) && o1-o2 == sizeof(t2) && n == sizeof(t4)+sizeof(t3)+sizeof(t2)+sizeof(t1) && isSamePtr(p1, p2) && isSamePtr(p2, p3) && isSamePtr(p3, p4) && isSamePtr(p4, p5) && clobber(m2) && clobber(m3) && clobber(m4) && clobber(m5)) { break } @@ -28647,7 +44851,6 @@ func rewriteValuegeneric_OpStructSelect_0(v *Value) bool { if v_0.Op != OpStructMake2 { break } - _ = v_0.Args[1] x := v_0.Args[1] v.reset(OpCopy) v.Type = x.Type @@ -28701,7 +44904,6 @@ func rewriteValuegeneric_OpStructSelect_0(v *Value) bool { if v_0.Op != OpStructMake3 { break } - _ = v_0.Args[2] x := v_0.Args[2] v.reset(OpCopy) v.Type = x.Type @@ -28773,7 +44975,6 @@ func rewriteValuegeneric_OpStructSelect_0(v *Value) bool { if v_0.Op != OpStructMake4 { break } - _ = v_0.Args[3] x := v_0.Args[3] v.reset(OpCopy) v.Type = x.Type @@ -28784,9 +44985,7 @@ func rewriteValuegeneric_OpStructSelect_0(v *Value) bool { } func rewriteValuegeneric_OpStructSelect_10(v *Value) bool { b := v.Block - _ = b fe := b.Func.fe - _ = fe // match: (StructSelect [i] x:(Load ptr mem)) // cond: !fe.CanSSA(t) // result: @x.Block (Load (OffPtr [t.FieldOff(int(i))] ptr) mem) @@ -28797,9 +44996,8 @@ func rewriteValuegeneric_OpStructSelect_10(v *Value) bool { break } t := x.Type - _ = x.Args[1] - ptr := x.Args[0] mem := x.Args[1] + ptr := x.Args[0] if !(!fe.CanSSA(t)) { break } @@ -28834,7 +45032,6 @@ func rewriteValuegeneric_OpStructSelect_10(v *Value) bool { } func rewriteValuegeneric_OpSub16_0(v *Value) bool { b := v.Block - _ = b // match: (Sub16 (Const16 [c]) (Const16 [d])) // cond: // result: (Const16 [int64(int16(c-d))]) @@ -28886,18 +45083,16 @@ func rewriteValuegeneric_OpSub16_0(v *Value) bool { if v_0.Op != OpMul16 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul16 { break } - _ = v_1.Args[1] + z := v_1.Args[1] if x != v_1.Args[0] { break } - z := v_1.Args[1] v.reset(OpMul16) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpSub16, t) @@ -28916,18 +45111,16 @@ func rewriteValuegeneric_OpSub16_0(v *Value) bool { if v_0.Op != OpMul16 { break } - _ = v_0.Args[1] - y := v_0.Args[0] x := v_0.Args[1] + y := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul16 { break } - _ = v_1.Args[1] + z := v_1.Args[1] if x != v_1.Args[0] { break } - z := v_1.Args[1] v.reset(OpMul16) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpSub16, t) @@ -28946,9 +45139,8 @@ func rewriteValuegeneric_OpSub16_0(v *Value) bool { if v_0.Op != OpMul16 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul16 { break @@ -28976,9 +45168,8 @@ func rewriteValuegeneric_OpSub16_0(v *Value) bool { if v_0.Op != OpMul16 { break } - _ = v_0.Args[1] - y := v_0.Args[0] x := v_0.Args[1] + y := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul16 { break @@ -29000,9 +45191,8 @@ func rewriteValuegeneric_OpSub16_0(v *Value) bool { // cond: // result: (Const16 [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpConst16) @@ -29013,15 +45203,13 @@ func rewriteValuegeneric_OpSub16_0(v *Value) bool { // cond: // result: y for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd16 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpCopy) @@ -29033,15 +45221,14 @@ func rewriteValuegeneric_OpSub16_0(v *Value) bool { // cond: // result: y for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd16 { break } _ = v_0.Args[1] y := v_0.Args[0] - x := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[1] { break } v.reset(OpCopy) @@ -29053,15 +45240,14 @@ func rewriteValuegeneric_OpSub16_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd16 { break } _ = v_0.Args[1] x := v_0.Args[0] - y := v_0.Args[1] - if y != v.Args[1] { + if y != v_0.Args[1] { break } v.reset(OpCopy) @@ -29073,20 +45259,17 @@ func rewriteValuegeneric_OpSub16_0(v *Value) bool { } func rewriteValuegeneric_OpSub16_10(v *Value) bool { b := v.Block - _ = b // match: (Sub16 (Add16 y x) y) // cond: // result: x for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd16 { break } - _ = v_0.Args[1] - y := v_0.Args[0] x := v_0.Args[1] - if y != v.Args[1] { + if y != v_0.Args[0] { break } v.reset(OpCopy) @@ -29104,13 +45287,12 @@ func rewriteValuegeneric_OpSub16_10(v *Value) bool { if v_1.Op != OpSub16 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst16 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst16 && x.Op != OpConst16) { break } @@ -29197,7 +45379,7 @@ func rewriteValuegeneric_OpSub16_10(v *Value) bool { if v_1.Op != OpSub16 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst16 { break @@ -29206,7 +45388,6 @@ func rewriteValuegeneric_OpSub16_10(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpAdd16) v0 := b.NewValue0(v.Pos, OpConst16, t) v0.AuxInt = int64(int16(c - d)) @@ -29218,7 +45399,6 @@ func rewriteValuegeneric_OpSub16_10(v *Value) bool { } func rewriteValuegeneric_OpSub32_0(v *Value) bool { b := v.Block - _ = b // match: (Sub32 (Const32 [c]) (Const32 [d])) // cond: // result: (Const32 [int64(int32(c-d))]) @@ -29270,18 +45450,16 @@ func rewriteValuegeneric_OpSub32_0(v *Value) bool { if v_0.Op != OpMul32 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul32 { break } - _ = v_1.Args[1] + z := v_1.Args[1] if x != v_1.Args[0] { break } - z := v_1.Args[1] v.reset(OpMul32) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpSub32, t) @@ -29300,18 +45478,16 @@ func rewriteValuegeneric_OpSub32_0(v *Value) bool { if v_0.Op != OpMul32 { break } - _ = v_0.Args[1] - y := v_0.Args[0] x := v_0.Args[1] + y := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul32 { break } - _ = v_1.Args[1] + z := v_1.Args[1] if x != v_1.Args[0] { break } - z := v_1.Args[1] v.reset(OpMul32) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpSub32, t) @@ -29330,9 +45506,8 @@ func rewriteValuegeneric_OpSub32_0(v *Value) bool { if v_0.Op != OpMul32 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul32 { break @@ -29360,9 +45535,8 @@ func rewriteValuegeneric_OpSub32_0(v *Value) bool { if v_0.Op != OpMul32 { break } - _ = v_0.Args[1] - y := v_0.Args[0] x := v_0.Args[1] + y := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul32 { break @@ -29384,9 +45558,8 @@ func rewriteValuegeneric_OpSub32_0(v *Value) bool { // cond: // result: (Const32 [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpConst32) @@ -29397,15 +45570,13 @@ func rewriteValuegeneric_OpSub32_0(v *Value) bool { // cond: // result: y for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd32 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpCopy) @@ -29417,15 +45588,14 @@ func rewriteValuegeneric_OpSub32_0(v *Value) bool { // cond: // result: y for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd32 { break } _ = v_0.Args[1] y := v_0.Args[0] - x := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[1] { break } v.reset(OpCopy) @@ -29437,15 +45607,14 @@ func rewriteValuegeneric_OpSub32_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd32 { break } _ = v_0.Args[1] x := v_0.Args[0] - y := v_0.Args[1] - if y != v.Args[1] { + if y != v_0.Args[1] { break } v.reset(OpCopy) @@ -29457,20 +45626,17 @@ func rewriteValuegeneric_OpSub32_0(v *Value) bool { } func rewriteValuegeneric_OpSub32_10(v *Value) bool { b := v.Block - _ = b // match: (Sub32 (Add32 y x) y) // cond: // result: x for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd32 { break } - _ = v_0.Args[1] - y := v_0.Args[0] x := v_0.Args[1] - if y != v.Args[1] { + if y != v_0.Args[0] { break } v.reset(OpCopy) @@ -29488,13 +45654,12 @@ func rewriteValuegeneric_OpSub32_10(v *Value) bool { if v_1.Op != OpSub32 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst32 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst32 && x.Op != OpConst32) { break } @@ -29581,7 +45746,7 @@ func rewriteValuegeneric_OpSub32_10(v *Value) bool { if v_1.Op != OpSub32 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break @@ -29590,7 +45755,6 @@ func rewriteValuegeneric_OpSub32_10(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpAdd32) v0 := b.NewValue0(v.Pos, OpConst32, t) v0.AuxInt = int64(int32(c - d)) @@ -29624,7 +45788,6 @@ func rewriteValuegeneric_OpSub32F_0(v *Value) bool { } func rewriteValuegeneric_OpSub64_0(v *Value) bool { b := v.Block - _ = b // match: (Sub64 (Const64 [c]) (Const64 [d])) // cond: // result: (Const64 [c-d]) @@ -29676,18 +45839,16 @@ func rewriteValuegeneric_OpSub64_0(v *Value) bool { if v_0.Op != OpMul64 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul64 { break } - _ = v_1.Args[1] + z := v_1.Args[1] if x != v_1.Args[0] { break } - z := v_1.Args[1] v.reset(OpMul64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpSub64, t) @@ -29706,18 +45867,16 @@ func rewriteValuegeneric_OpSub64_0(v *Value) bool { if v_0.Op != OpMul64 { break } - _ = v_0.Args[1] - y := v_0.Args[0] x := v_0.Args[1] + y := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul64 { break } - _ = v_1.Args[1] + z := v_1.Args[1] if x != v_1.Args[0] { break } - z := v_1.Args[1] v.reset(OpMul64) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpSub64, t) @@ -29736,9 +45895,8 @@ func rewriteValuegeneric_OpSub64_0(v *Value) bool { if v_0.Op != OpMul64 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul64 { break @@ -29766,9 +45924,8 @@ func rewriteValuegeneric_OpSub64_0(v *Value) bool { if v_0.Op != OpMul64 { break } - _ = v_0.Args[1] - y := v_0.Args[0] x := v_0.Args[1] + y := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul64 { break @@ -29790,9 +45947,8 @@ func rewriteValuegeneric_OpSub64_0(v *Value) bool { // cond: // result: (Const64 [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpConst64) @@ -29803,15 +45959,13 @@ func rewriteValuegeneric_OpSub64_0(v *Value) bool { // cond: // result: y for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd64 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpCopy) @@ -29823,15 +45977,14 @@ func rewriteValuegeneric_OpSub64_0(v *Value) bool { // cond: // result: y for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd64 { break } _ = v_0.Args[1] y := v_0.Args[0] - x := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[1] { break } v.reset(OpCopy) @@ -29843,15 +45996,14 @@ func rewriteValuegeneric_OpSub64_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd64 { break } _ = v_0.Args[1] x := v_0.Args[0] - y := v_0.Args[1] - if y != v.Args[1] { + if y != v_0.Args[1] { break } v.reset(OpCopy) @@ -29863,20 +46015,17 @@ func rewriteValuegeneric_OpSub64_0(v *Value) bool { } func rewriteValuegeneric_OpSub64_10(v *Value) bool { b := v.Block - _ = b // match: (Sub64 (Add64 y x) y) // cond: // result: x for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd64 { break } - _ = v_0.Args[1] - y := v_0.Args[0] x := v_0.Args[1] - if y != v.Args[1] { + if y != v_0.Args[0] { break } v.reset(OpCopy) @@ -29894,13 +46043,12 @@ func rewriteValuegeneric_OpSub64_10(v *Value) bool { if v_1.Op != OpSub64 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst64 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst64 && x.Op != OpConst64) { break } @@ -29987,7 +46135,7 @@ func rewriteValuegeneric_OpSub64_10(v *Value) bool { if v_1.Op != OpSub64 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst64 { break @@ -29996,7 +46144,6 @@ func rewriteValuegeneric_OpSub64_10(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpAdd64) v0 := b.NewValue0(v.Pos, OpConst64, t) v0.AuxInt = c - d @@ -30030,7 +46177,6 @@ func rewriteValuegeneric_OpSub64F_0(v *Value) bool { } func rewriteValuegeneric_OpSub8_0(v *Value) bool { b := v.Block - _ = b // match: (Sub8 (Const8 [c]) (Const8 [d])) // cond: // result: (Const8 [int64(int8(c-d))]) @@ -30082,18 +46228,16 @@ func rewriteValuegeneric_OpSub8_0(v *Value) bool { if v_0.Op != OpMul8 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul8 { break } - _ = v_1.Args[1] + z := v_1.Args[1] if x != v_1.Args[0] { break } - z := v_1.Args[1] v.reset(OpMul8) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpSub8, t) @@ -30112,18 +46256,16 @@ func rewriteValuegeneric_OpSub8_0(v *Value) bool { if v_0.Op != OpMul8 { break } - _ = v_0.Args[1] - y := v_0.Args[0] x := v_0.Args[1] + y := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul8 { break } - _ = v_1.Args[1] + z := v_1.Args[1] if x != v_1.Args[0] { break } - z := v_1.Args[1] v.reset(OpMul8) v.AddArg(x) v0 := b.NewValue0(v.Pos, OpSub8, t) @@ -30142,9 +46284,8 @@ func rewriteValuegeneric_OpSub8_0(v *Value) bool { if v_0.Op != OpMul8 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] + x := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul8 { break @@ -30172,9 +46313,8 @@ func rewriteValuegeneric_OpSub8_0(v *Value) bool { if v_0.Op != OpMul8 { break } - _ = v_0.Args[1] - y := v_0.Args[0] x := v_0.Args[1] + y := v_0.Args[0] v_1 := v.Args[1] if v_1.Op != OpMul8 { break @@ -30196,9 +46336,8 @@ func rewriteValuegeneric_OpSub8_0(v *Value) bool { // cond: // result: (Const8 [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpConst8) @@ -30209,15 +46348,13 @@ func rewriteValuegeneric_OpSub8_0(v *Value) bool { // cond: // result: y for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd8 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpCopy) @@ -30229,15 +46366,14 @@ func rewriteValuegeneric_OpSub8_0(v *Value) bool { // cond: // result: y for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd8 { break } _ = v_0.Args[1] y := v_0.Args[0] - x := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[1] { break } v.reset(OpCopy) @@ -30249,15 +46385,14 @@ func rewriteValuegeneric_OpSub8_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd8 { break } _ = v_0.Args[1] x := v_0.Args[0] - y := v_0.Args[1] - if y != v.Args[1] { + if y != v_0.Args[1] { break } v.reset(OpCopy) @@ -30269,20 +46404,17 @@ func rewriteValuegeneric_OpSub8_0(v *Value) bool { } func rewriteValuegeneric_OpSub8_10(v *Value) bool { b := v.Block - _ = b // match: (Sub8 (Add8 y x) y) // cond: // result: x for { - _ = v.Args[1] + y := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpAdd8 { break } - _ = v_0.Args[1] - y := v_0.Args[0] x := v_0.Args[1] - if y != v.Args[1] { + if y != v_0.Args[0] { break } v.reset(OpCopy) @@ -30300,13 +46432,12 @@ func rewriteValuegeneric_OpSub8_10(v *Value) bool { if v_1.Op != OpSub8 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst8 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst8 && x.Op != OpConst8) { break } @@ -30393,7 +46524,7 @@ func rewriteValuegeneric_OpSub8_10(v *Value) bool { if v_1.Op != OpSub8 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst8 { break @@ -30402,7 +46533,6 @@ func rewriteValuegeneric_OpSub8_10(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpAdd8) v0 := b.NewValue0(v.Pos, OpConst8, t) v0.AuxInt = int64(int8(c - d)) @@ -30462,13 +46592,12 @@ func rewriteValuegeneric_OpTrunc16to8_0(v *Value) bool { if v_0.Op != OpAnd16 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst16 { break } y := v_0_0.AuxInt - x := v_0.Args[1] if !(y&0xFF == 0xFF) { break } @@ -30576,13 +46705,12 @@ func rewriteValuegeneric_OpTrunc32to16_0(v *Value) bool { if v_0.Op != OpAnd32 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst32 { break } y := v_0_0.AuxInt - x := v_0.Args[1] if !(y&0xFFFF == 0xFFFF) { break } @@ -30664,13 +46792,12 @@ func rewriteValuegeneric_OpTrunc32to8_0(v *Value) bool { if v_0.Op != OpAnd32 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst32 { break } y := v_0_0.AuxInt - x := v_0.Args[1] if !(y&0xFF == 0xFF) { break } @@ -30778,13 +46905,12 @@ func rewriteValuegeneric_OpTrunc64to16_0(v *Value) bool { if v_0.Op != OpAnd64 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst64 { break } y := v_0_0.AuxInt - x := v_0.Args[1] if !(y&0xFFFF == 0xFFFF) { break } @@ -30918,13 +47044,12 @@ func rewriteValuegeneric_OpTrunc64to32_0(v *Value) bool { if v_0.Op != OpAnd64 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst64 { break } y := v_0_0.AuxInt - x := v_0.Args[1] if !(y&0xFFFFFFFF == 0xFFFFFFFF) { break } @@ -31006,13 +47131,12 @@ func rewriteValuegeneric_OpTrunc64to8_0(v *Value) bool { if v_0.Op != OpAnd64 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst64 { break } y := v_0_0.AuxInt - x := v_0.Args[1] if !(y&0xFF == 0xFF) { break } @@ -31046,7 +47170,6 @@ func rewriteValuegeneric_OpTrunc64to8_0(v *Value) bool { } func rewriteValuegeneric_OpXor16_0(v *Value) bool { b := v.Block - _ = b // match: (Xor16 (Const16 [c]) (Const16 [d])) // cond: // result: (Const16 [int64(int16(c^d))]) @@ -31089,9 +47212,8 @@ func rewriteValuegeneric_OpXor16_0(v *Value) bool { // cond: // result: (Const16 [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpConst16) @@ -31102,7 +47224,7 @@ func rewriteValuegeneric_OpXor16_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst16 { break @@ -31110,7 +47232,6 @@ func rewriteValuegeneric_OpXor16_0(v *Value) bool { if v_0.AuxInt != 0 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -31144,11 +47265,10 @@ func rewriteValuegeneric_OpXor16_0(v *Value) bool { if v_1.Op != OpXor16 { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpCopy) v.Type = y.Type v.AddArg(y) @@ -31178,15 +47298,13 @@ func rewriteValuegeneric_OpXor16_0(v *Value) bool { // cond: // result: y for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpXor16 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpCopy) @@ -31198,15 +47316,14 @@ func rewriteValuegeneric_OpXor16_0(v *Value) bool { // cond: // result: y for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpXor16 { break } _ = v_0.Args[1] y := v_0.Args[0] - x := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[1] { break } v.reset(OpCopy) @@ -31218,19 +47335,17 @@ func rewriteValuegeneric_OpXor16_0(v *Value) bool { // cond: (z.Op != OpConst16 && x.Op != OpConst16) // result: (Xor16 i (Xor16 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpXor16 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst16 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst16 && x.Op != OpConst16) { break } @@ -31246,12 +47361,11 @@ func rewriteValuegeneric_OpXor16_0(v *Value) bool { } func rewriteValuegeneric_OpXor16_10(v *Value) bool { b := v.Block - _ = b // match: (Xor16 (Xor16 z i:(Const16 )) x) // cond: (z.Op != OpConst16 && x.Op != OpConst16) // result: (Xor16 i (Xor16 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpXor16 { break @@ -31263,7 +47377,6 @@ func rewriteValuegeneric_OpXor16_10(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst16 && x.Op != OpConst16) { break } @@ -31285,13 +47398,12 @@ func rewriteValuegeneric_OpXor16_10(v *Value) bool { if v_1.Op != OpXor16 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst16 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst16 && x.Op != OpConst16) { break } @@ -31346,7 +47458,7 @@ func rewriteValuegeneric_OpXor16_10(v *Value) bool { if v_1.Op != OpXor16 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst16 { break @@ -31355,7 +47467,6 @@ func rewriteValuegeneric_OpXor16_10(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpXor16) v0 := b.NewValue0(v.Pos, OpConst16, t) v0.AuxInt = int64(int16(c ^ d)) @@ -31404,14 +47515,13 @@ func rewriteValuegeneric_OpXor16_10(v *Value) bool { if v_0.Op != OpXor16 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst16 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst16 { break @@ -31463,7 +47573,6 @@ func rewriteValuegeneric_OpXor16_10(v *Value) bool { } func rewriteValuegeneric_OpXor32_0(v *Value) bool { b := v.Block - _ = b // match: (Xor32 (Const32 [c]) (Const32 [d])) // cond: // result: (Const32 [int64(int32(c^d))]) @@ -31506,9 +47615,8 @@ func rewriteValuegeneric_OpXor32_0(v *Value) bool { // cond: // result: (Const32 [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpConst32) @@ -31519,7 +47627,7 @@ func rewriteValuegeneric_OpXor32_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst32 { break @@ -31527,7 +47635,6 @@ func rewriteValuegeneric_OpXor32_0(v *Value) bool { if v_0.AuxInt != 0 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -31561,11 +47668,10 @@ func rewriteValuegeneric_OpXor32_0(v *Value) bool { if v_1.Op != OpXor32 { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpCopy) v.Type = y.Type v.AddArg(y) @@ -31595,15 +47701,13 @@ func rewriteValuegeneric_OpXor32_0(v *Value) bool { // cond: // result: y for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpXor32 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpCopy) @@ -31615,15 +47719,14 @@ func rewriteValuegeneric_OpXor32_0(v *Value) bool { // cond: // result: y for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpXor32 { break } _ = v_0.Args[1] y := v_0.Args[0] - x := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[1] { break } v.reset(OpCopy) @@ -31635,19 +47738,17 @@ func rewriteValuegeneric_OpXor32_0(v *Value) bool { // cond: (z.Op != OpConst32 && x.Op != OpConst32) // result: (Xor32 i (Xor32 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpXor32 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst32 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst32 && x.Op != OpConst32) { break } @@ -31663,12 +47764,11 @@ func rewriteValuegeneric_OpXor32_0(v *Value) bool { } func rewriteValuegeneric_OpXor32_10(v *Value) bool { b := v.Block - _ = b // match: (Xor32 (Xor32 z i:(Const32 )) x) // cond: (z.Op != OpConst32 && x.Op != OpConst32) // result: (Xor32 i (Xor32 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpXor32 { break @@ -31680,7 +47780,6 @@ func rewriteValuegeneric_OpXor32_10(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst32 && x.Op != OpConst32) { break } @@ -31702,13 +47801,12 @@ func rewriteValuegeneric_OpXor32_10(v *Value) bool { if v_1.Op != OpXor32 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst32 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst32 && x.Op != OpConst32) { break } @@ -31763,7 +47861,7 @@ func rewriteValuegeneric_OpXor32_10(v *Value) bool { if v_1.Op != OpXor32 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst32 { break @@ -31772,7 +47870,6 @@ func rewriteValuegeneric_OpXor32_10(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpXor32) v0 := b.NewValue0(v.Pos, OpConst32, t) v0.AuxInt = int64(int32(c ^ d)) @@ -31821,14 +47918,13 @@ func rewriteValuegeneric_OpXor32_10(v *Value) bool { if v_0.Op != OpXor32 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst32 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst32 { break @@ -31880,7 +47976,6 @@ func rewriteValuegeneric_OpXor32_10(v *Value) bool { } func rewriteValuegeneric_OpXor64_0(v *Value) bool { b := v.Block - _ = b // match: (Xor64 (Const64 [c]) (Const64 [d])) // cond: // result: (Const64 [c^d]) @@ -31923,9 +48018,8 @@ func rewriteValuegeneric_OpXor64_0(v *Value) bool { // cond: // result: (Const64 [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpConst64) @@ -31936,7 +48030,7 @@ func rewriteValuegeneric_OpXor64_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst64 { break @@ -31944,7 +48038,6 @@ func rewriteValuegeneric_OpXor64_0(v *Value) bool { if v_0.AuxInt != 0 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -31978,11 +48071,10 @@ func rewriteValuegeneric_OpXor64_0(v *Value) bool { if v_1.Op != OpXor64 { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpCopy) v.Type = y.Type v.AddArg(y) @@ -32012,15 +48104,13 @@ func rewriteValuegeneric_OpXor64_0(v *Value) bool { // cond: // result: y for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpXor64 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpCopy) @@ -32032,15 +48122,14 @@ func rewriteValuegeneric_OpXor64_0(v *Value) bool { // cond: // result: y for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpXor64 { break } _ = v_0.Args[1] y := v_0.Args[0] - x := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[1] { break } v.reset(OpCopy) @@ -32052,19 +48141,17 @@ func rewriteValuegeneric_OpXor64_0(v *Value) bool { // cond: (z.Op != OpConst64 && x.Op != OpConst64) // result: (Xor64 i (Xor64 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpXor64 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst64 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst64 && x.Op != OpConst64) { break } @@ -32080,12 +48167,11 @@ func rewriteValuegeneric_OpXor64_0(v *Value) bool { } func rewriteValuegeneric_OpXor64_10(v *Value) bool { b := v.Block - _ = b // match: (Xor64 (Xor64 z i:(Const64 )) x) // cond: (z.Op != OpConst64 && x.Op != OpConst64) // result: (Xor64 i (Xor64 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpXor64 { break @@ -32097,7 +48183,6 @@ func rewriteValuegeneric_OpXor64_10(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst64 && x.Op != OpConst64) { break } @@ -32119,13 +48204,12 @@ func rewriteValuegeneric_OpXor64_10(v *Value) bool { if v_1.Op != OpXor64 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst64 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst64 && x.Op != OpConst64) { break } @@ -32180,7 +48264,7 @@ func rewriteValuegeneric_OpXor64_10(v *Value) bool { if v_1.Op != OpXor64 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst64 { break @@ -32189,7 +48273,6 @@ func rewriteValuegeneric_OpXor64_10(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpXor64) v0 := b.NewValue0(v.Pos, OpConst64, t) v0.AuxInt = c ^ d @@ -32238,14 +48321,13 @@ func rewriteValuegeneric_OpXor64_10(v *Value) bool { if v_0.Op != OpXor64 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst64 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst64 { break @@ -32297,7 +48379,6 @@ func rewriteValuegeneric_OpXor64_10(v *Value) bool { } func rewriteValuegeneric_OpXor8_0(v *Value) bool { b := v.Block - _ = b // match: (Xor8 (Const8 [c]) (Const8 [d])) // cond: // result: (Const8 [int64(int8(c^d))]) @@ -32340,9 +48421,8 @@ func rewriteValuegeneric_OpXor8_0(v *Value) bool { // cond: // result: (Const8 [0]) for { - _ = v.Args[1] - x := v.Args[0] - if x != v.Args[1] { + x := v.Args[1] + if x != v.Args[0] { break } v.reset(OpConst8) @@ -32353,7 +48433,7 @@ func rewriteValuegeneric_OpXor8_0(v *Value) bool { // cond: // result: x for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpConst8 { break @@ -32361,7 +48441,6 @@ func rewriteValuegeneric_OpXor8_0(v *Value) bool { if v_0.AuxInt != 0 { break } - x := v.Args[1] v.reset(OpCopy) v.Type = x.Type v.AddArg(x) @@ -32395,11 +48474,10 @@ func rewriteValuegeneric_OpXor8_0(v *Value) bool { if v_1.Op != OpXor8 { break } - _ = v_1.Args[1] + y := v_1.Args[1] if x != v_1.Args[0] { break } - y := v_1.Args[1] v.reset(OpCopy) v.Type = y.Type v.AddArg(y) @@ -32429,15 +48507,13 @@ func rewriteValuegeneric_OpXor8_0(v *Value) bool { // cond: // result: y for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpXor8 { break } - _ = v_0.Args[1] - x := v_0.Args[0] y := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[0] { break } v.reset(OpCopy) @@ -32449,15 +48525,14 @@ func rewriteValuegeneric_OpXor8_0(v *Value) bool { // cond: // result: y for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpXor8 { break } _ = v_0.Args[1] y := v_0.Args[0] - x := v_0.Args[1] - if x != v.Args[1] { + if x != v_0.Args[1] { break } v.reset(OpCopy) @@ -32469,19 +48544,17 @@ func rewriteValuegeneric_OpXor8_0(v *Value) bool { // cond: (z.Op != OpConst8 && x.Op != OpConst8) // result: (Xor8 i (Xor8 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpXor8 { break } - _ = v_0.Args[1] + z := v_0.Args[1] i := v_0.Args[0] if i.Op != OpConst8 { break } t := i.Type - z := v_0.Args[1] - x := v.Args[1] if !(z.Op != OpConst8 && x.Op != OpConst8) { break } @@ -32497,12 +48570,11 @@ func rewriteValuegeneric_OpXor8_0(v *Value) bool { } func rewriteValuegeneric_OpXor8_10(v *Value) bool { b := v.Block - _ = b // match: (Xor8 (Xor8 z i:(Const8 )) x) // cond: (z.Op != OpConst8 && x.Op != OpConst8) // result: (Xor8 i (Xor8 z x)) for { - _ = v.Args[1] + x := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpXor8 { break @@ -32514,7 +48586,6 @@ func rewriteValuegeneric_OpXor8_10(v *Value) bool { break } t := i.Type - x := v.Args[1] if !(z.Op != OpConst8 && x.Op != OpConst8) { break } @@ -32536,13 +48607,12 @@ func rewriteValuegeneric_OpXor8_10(v *Value) bool { if v_1.Op != OpXor8 { break } - _ = v_1.Args[1] + z := v_1.Args[1] i := v_1.Args[0] if i.Op != OpConst8 { break } t := i.Type - z := v_1.Args[1] if !(z.Op != OpConst8 && x.Op != OpConst8) { break } @@ -32597,7 +48667,7 @@ func rewriteValuegeneric_OpXor8_10(v *Value) bool { if v_1.Op != OpXor8 { break } - _ = v_1.Args[1] + x := v_1.Args[1] v_1_0 := v_1.Args[0] if v_1_0.Op != OpConst8 { break @@ -32606,7 +48676,6 @@ func rewriteValuegeneric_OpXor8_10(v *Value) bool { break } d := v_1_0.AuxInt - x := v_1.Args[1] v.reset(OpXor8) v0 := b.NewValue0(v.Pos, OpConst8, t) v0.AuxInt = int64(int8(c ^ d)) @@ -32655,14 +48724,13 @@ func rewriteValuegeneric_OpXor8_10(v *Value) bool { if v_0.Op != OpXor8 { break } - _ = v_0.Args[1] + x := v_0.Args[1] v_0_0 := v_0.Args[0] if v_0_0.Op != OpConst8 { break } t := v_0_0.Type d := v_0_0.AuxInt - x := v_0.Args[1] v_1 := v.Args[1] if v_1.Op != OpConst8 { break @@ -32714,14 +48782,12 @@ func rewriteValuegeneric_OpXor8_10(v *Value) bool { } func rewriteValuegeneric_OpZero_0(v *Value) bool { b := v.Block - _ = b config := b.Func.Config - _ = config // match: (Zero (Load (OffPtr [c] (SP)) mem) mem) // cond: mem.Op == OpStaticCall && isSameSym(mem.Aux, "runtime.newobject") && c == config.ctxt.FixedFrameSize() + config.RegSize // result: mem for { - _ = v.Args[1] + mem := v.Args[1] v_0 := v.Args[0] if v_0.Op != OpLoad { break @@ -32736,8 +48802,7 @@ func rewriteValuegeneric_OpZero_0(v *Value) bool { if v_0_0_0.Op != OpSP { break } - mem := v_0.Args[1] - if mem != v.Args[1] { + if mem != v_0.Args[1] { break } if !(mem.Op == OpStaticCall && isSameSym(mem.Aux, "runtime.newobject") && c == config.ctxt.FixedFrameSize()+config.RegSize) { @@ -32761,14 +48826,13 @@ func rewriteValuegeneric_OpZero_0(v *Value) bool { break } t2 := store.Aux - _ = store.Args[2] + mem := store.Args[2] store_0 := store.Args[0] if store_0.Op != OpOffPtr { break } o2 := store_0.AuxInt p2 := store_0.Args[0] - mem := store.Args[2] if !(isSamePtr(p1, p2) && store.Uses == 1 && n >= o2+sizeof(t2) && clobber(store)) { break } @@ -32797,9 +48861,8 @@ func rewriteValuegeneric_OpZero_0(v *Value) bool { if move.Aux != t { break } - _ = move.Args[2] - dst2 := move.Args[0] mem := move.Args[2] + dst2 := move.Args[0] if !(move.Uses == 1 && isSamePtr(dst1, dst2) && clobber(move)) { break } @@ -32833,9 +48896,8 @@ func rewriteValuegeneric_OpZero_0(v *Value) bool { if move.Aux != t { break } - _ = move.Args[2] - dst2 := move.Args[0] mem := move.Args[2] + dst2 := move.Args[0] if !(move.Uses == 1 && vardef.Uses == 1 && isSamePtr(dst1, dst2) && clobber(move) && clobber(vardef)) { break } @@ -33105,21 +49167,16 @@ func rewriteValuegeneric_OpZeroExt8to64_0(v *Value) bool { } func rewriteBlockgeneric(b *Block) bool { config := b.Func.Config - _ = config - fe := b.Func.fe - _ = fe typ := &config.Types _ = typ + v := b.Control + _ = v switch b.Kind { case BlockIf: // match: (If (Not cond) yes no) // cond: // result: (If cond no yes) - for { - v := b.Control - if v.Op != OpNot { - break - } + for v.Op == OpNot { cond := v.Args[0] b.Kind = BlockIf b.SetControl(cond) @@ -33130,11 +49187,7 @@ func rewriteBlockgeneric(b *Block) bool { // match: (If (ConstBool [c]) yes no) // cond: c == 1 // result: (First nil yes no) - for { - v := b.Control - if v.Op != OpConstBool { - break - } + for v.Op == OpConstBool { c := v.AuxInt if !(c == 1) { break @@ -33147,11 +49200,7 @@ func rewriteBlockgeneric(b *Block) bool { // match: (If (ConstBool [c]) yes no) // cond: c == 0 // result: (First nil no yes) - for { - v := b.Control - if v.Op != OpConstBool { - break - } + for v.Op == OpConstBool { c := v.AuxInt if !(c == 0) { break diff --git a/src/cmd/compile/internal/ssa/schedule.go b/src/cmd/compile/internal/ssa/schedule.go index c5b4c53843..ca0e82953e 100644 --- a/src/cmd/compile/internal/ssa/schedule.go +++ b/src/cmd/compile/internal/ssa/schedule.go @@ -233,14 +233,10 @@ func schedule(f *Func) { // Schedule highest priority value, update use counts, repeat. order = order[:0] tuples := make(map[ID][]*Value) - for { + for priq.Len() > 0 { // Find highest priority schedulable value. // Note that schedule is assembled backwards. - if priq.Len() == 0 { - break - } - v := heap.Pop(priq).(*Value) // Add it to the schedule. diff --git a/src/cmd/compile/internal/ssa/stmtlines_test.go b/src/cmd/compile/internal/ssa/stmtlines_test.go index c71f8befd9..b8a9388b61 100644 --- a/src/cmd/compile/internal/ssa/stmtlines_test.go +++ b/src/cmd/compile/internal/ssa/stmtlines_test.go @@ -1,6 +1,7 @@ package ssa_test import ( + cmddwarf "cmd/internal/dwarf" "debug/dwarf" "debug/elf" "debug/macho" @@ -9,6 +10,7 @@ import ( "internal/testenv" "internal/xcoff" "io" + "os" "runtime" "testing" ) @@ -49,6 +51,20 @@ func TestStmtLines(t *testing.T) { t.Skip("skipping on plan9; no DWARF symbol table in executables") } + if runtime.GOOS == "aix" { + extld := os.Getenv("CC") + if extld == "" { + extld = "gcc" + } + enabled, err := cmddwarf.IsDWARFEnabledOnAIXLd(extld) + if err != nil { + t.Fatal(err) + } + if !enabled { + t.Skip("skipping on aix: no DWARF with ld version < 7.2.2 ") + } + } + lines := map[Line]bool{} dw, err := open(testenv.GoToolPath(t)) must(err) diff --git a/src/cmd/compile/internal/ssa/testdata/i22558.gdb-dbg.nexts b/src/cmd/compile/internal/ssa/testdata/i22558.gdb-dbg.nexts index 8a49b168bf..70dfa07b87 100644 --- a/src/cmd/compile/internal/ssa/testdata/i22558.gdb-dbg.nexts +++ b/src/cmd/compile/internal/ssa/testdata/i22558.gdb-dbg.nexts @@ -2,3 +2,10 @@ 19: func test(t *thing, u *thing) { 20: if t.next != nil { 23: fmt.Fprintf(os.Stderr, "%s\n", t.name) +24: u.self = u +25: t.self = t +26: t.next = u +27: for _, p := range t.stuff { +28: if isFoo(t, p) { +29: return +44: } diff --git a/src/cmd/compile/internal/ssa/testdata/infloop.dlv-opt.nexts b/src/cmd/compile/internal/ssa/testdata/infloop.dlv-opt.nexts new file mode 100644 index 0000000000..19496de660 --- /dev/null +++ b/src/cmd/compile/internal/ssa/testdata/infloop.dlv-opt.nexts @@ -0,0 +1,12 @@ + ./testdata/infloop.go +6: func test() { +8: go func() {}() +10: for { +1048575: +10: for { +1048575: +10: for { +1048575: +10: for { +1048575: +10: for { diff --git a/src/cmd/compile/internal/ssa/testdata/infloop.gdb-opt.nexts b/src/cmd/compile/internal/ssa/testdata/infloop.gdb-opt.nexts new file mode 100644 index 0000000000..d465ad1396 --- /dev/null +++ b/src/cmd/compile/internal/ssa/testdata/infloop.gdb-opt.nexts @@ -0,0 +1,4 @@ + src/cmd/compile/internal/ssa/testdata/infloop.go +6: func test() { +8: go func() {}() +10: for { diff --git a/src/cmd/compile/internal/ssa/testdata/infloop.go b/src/cmd/compile/internal/ssa/testdata/infloop.go new file mode 100644 index 0000000000..cdb374fb57 --- /dev/null +++ b/src/cmd/compile/internal/ssa/testdata/infloop.go @@ -0,0 +1,16 @@ +package main + +var sink int + +//go:noinline +func test() { + // This is for #30167, incorrect line numbers in an infinite loop + go func() {}() + + for { + } +} + +func main() { + test() +} diff --git a/src/cmd/compile/internal/ssa/writebarrier.go b/src/cmd/compile/internal/ssa/writebarrier.go index 49770018f8..3c64da20a7 100644 --- a/src/cmd/compile/internal/ssa/writebarrier.go +++ b/src/cmd/compile/internal/ssa/writebarrier.go @@ -11,9 +11,18 @@ import ( "strings" ) +// A ZeroRegion records a range of an object which is known to be zero. +// A ZeroRegion only applies to a single memory state. +type ZeroRegion struct { + base *Value + min int64 + max int64 +} + // needwb reports whether we need write barrier for store op v. // v must be Store/Move/Zero. -func needwb(v *Value) bool { +// zeroes provides known zero information (keyed by ID of memory-type values). +func needwb(v *Value, zeroes map[ID]ZeroRegion) bool { t, ok := v.Aux.(*types.Type) if !ok { v.Fatalf("store aux is not a type: %s", v.LongString()) @@ -24,14 +33,24 @@ func needwb(v *Value) bool { if IsStackAddr(v.Args[0]) { return false // write on stack doesn't need write barrier } - if v.Op == OpStore && IsGlobalAddr(v.Args[1]) && IsNewObject(v.Args[0], v.MemoryArg()) { - // Storing pointers to non-heap locations into a fresh object doesn't need a write barrier. - return false - } if v.Op == OpMove && IsReadOnlyGlobalAddr(v.Args[1]) && IsNewObject(v.Args[0], v.MemoryArg()) { // Copying data from readonly memory into a fresh object doesn't need a write barrier. return false } + if v.Op == OpStore && IsGlobalAddr(v.Args[1]) { + // Storing pointers to non-heap locations into zeroed memory doesn't need a write barrier. + ptr := v.Args[0] + var off int64 + size := v.Aux.(*types.Type).Size() + for ptr.Op == OpOffPtr { + off += ptr.AuxInt + ptr = ptr.Args[0] + } + z := zeroes[v.MemoryArg().ID] + if ptr == z.base && off >= z.min && off+size <= z.max { + return false + } + } return true } @@ -58,6 +77,7 @@ func writebarrier(f *Func) { var sset *sparseSet var storeNumber []int32 + zeroes := f.computeZeroMap() for _, b := range f.Blocks { // range loop is safe since the blocks we added contain no stores to expand // first, identify all the stores that need to insert a write barrier. // mark them with WB ops temporarily. record presence of WB ops. @@ -65,7 +85,7 @@ func writebarrier(f *Func) { for _, v := range b.Values { switch v.Op { case OpStore, OpMove, OpZero: - if needwb(v) { + if needwb(v, zeroes) { switch v.Op { case OpStore: v.Op = OpStoreWB @@ -196,6 +216,43 @@ func writebarrier(f *Func) { // and simple store version to bElse memThen := mem memElse := mem + + // If the source of a MoveWB is volatile (will be clobbered by a + // function call), we need to copy it to a temporary location, as + // marshaling the args of typedmemmove might clobber the value we're + // trying to move. + // Look for volatile source, copy it to temporary before we emit any + // call. + // It is unlikely to have more than one of them. Just do a linear + // search instead of using a map. + type volatileCopy struct { + src *Value // address of original volatile value + tmp *Value // address of temporary we've copied the volatile value into + } + var volatiles []volatileCopy + copyLoop: + for _, w := range stores { + if w.Op == OpMoveWB { + val := w.Args[1] + if isVolatile(val) { + for _, c := range volatiles { + if val == c.src { + continue copyLoop // already copied + } + } + + t := val.Type.Elem() + tmp := f.fe.Auto(w.Pos, t) + memThen = bThen.NewValue1A(w.Pos, OpVarDef, types.TypeMem, tmp, memThen) + tmpaddr := bThen.NewValue2A(w.Pos, OpLocalAddr, t.PtrTo(), tmp, sp, memThen) + siz := t.Size() + memThen = bThen.NewValue3I(w.Pos, OpMove, types.TypeMem, siz, tmpaddr, val, memThen) + memThen.Aux = t + volatiles = append(volatiles, volatileCopy{val, tmpaddr}) + } + } + } + for _, w := range stores { ptr := w.Args[0] pos := w.Pos @@ -222,11 +279,19 @@ func writebarrier(f *Func) { // then block: emit write barrier call switch w.Op { case OpStoreWB, OpMoveWB, OpZeroWB: - volatile := w.Op == OpMoveWB && isVolatile(val) if w.Op == OpStoreWB { memThen = bThen.NewValue3A(pos, OpWB, types.TypeMem, gcWriteBarrier, ptr, val, memThen) } else { - memThen = wbcall(pos, bThen, fn, typ, ptr, val, memThen, sp, sb, volatile) + srcval := val + if w.Op == OpMoveWB && isVolatile(srcval) { + for _, c := range volatiles { + if srcval == c.src { + srcval = c.tmp + break + } + } + } + memThen = wbcall(pos, bThen, fn, typ, ptr, srcval, memThen, sp, sb) } // Note that we set up a writebarrier function call. f.fe.SetWBPos(pos) @@ -249,6 +314,12 @@ func writebarrier(f *Func) { } } + // mark volatile temps dead + for _, c := range volatiles { + tmpNode := c.tmp.Aux + memThen = bThen.NewValue1A(memThen.Pos, OpVarKill, types.TypeMem, tmpNode, memThen) + } + // merge memory // Splice memory Phi into the last memory of the original sequence, // which may be used in subsequent blocks. Other memories in the @@ -301,25 +372,90 @@ func writebarrier(f *Func) { } } -// wbcall emits write barrier runtime call in b, returns memory. -// if valIsVolatile, it moves val into temp space before making the call. -func wbcall(pos src.XPos, b *Block, fn, typ *obj.LSym, ptr, val, mem, sp, sb *Value, valIsVolatile bool) *Value { - config := b.Func.Config - - var tmp GCNode - if valIsVolatile { - // Copy to temp location if the source is volatile (will be clobbered by - // a function call). Marshaling the args to typedmemmove might clobber the - // value we're trying to move. - t := val.Type.Elem() - tmp = b.Func.fe.Auto(val.Pos, t) - mem = b.NewValue1A(pos, OpVarDef, types.TypeMem, tmp, mem) - tmpaddr := b.NewValue2A(pos, OpLocalAddr, t.PtrTo(), tmp, sp, mem) - siz := t.Size() - mem = b.NewValue3I(pos, OpMove, types.TypeMem, siz, tmpaddr, val, mem) - mem.Aux = t - val = tmpaddr +// computeZeroMap returns a map from an ID of a memory value to +// a set of locations that are known to be zeroed at that memory value. +func (f *Func) computeZeroMap() map[ID]ZeroRegion { + // Keep track of which parts of memory are known to be zero. + // This helps with removing write barriers for various initialization patterns. + // This analysis is conservative. We only keep track, for each memory state, of + // a single constant range of a single object which is known to be zero. + zeroes := map[ID]ZeroRegion{} + // Find new objects. + for _, b := range f.Blocks { + for _, v := range b.Values { + if v.Op != OpLoad { + continue + } + mem := v.MemoryArg() + if IsNewObject(v, mem) { + zeroes[mem.ID] = ZeroRegion{v, 0, v.Type.Elem().Size()} + } + } } + // Find stores to those new objects. + for { + changed := false + for _, b := range f.Blocks { + // Note: iterating forwards helps convergence, as values are + // typically (but not always!) in store order. + for _, v := range b.Values { + if v.Op != OpStore { + continue + } + z, ok := zeroes[v.MemoryArg().ID] + if !ok { + continue + } + ptr := v.Args[0] + var off int64 + size := v.Aux.(*types.Type).Size() + for ptr.Op == OpOffPtr { + off += ptr.AuxInt + ptr = ptr.Args[0] + } + if ptr != z.base { + // Different base object - we don't know anything. + // We could even be writing to the base object we know + // about, but through an aliased but offset pointer. + // So we have to throw all the zero information we have away. + continue + } + if off < z.min || off+size > z.max { + // Writing, at least partially, outside the known zeroes. + // We could salvage some zero information, but probably + // not worth it. + continue + } + // We now know we're storing to a zeroed area. + // We need to make a smaller zero range for the result of this store. + if off == z.min { + z.min += size + } else if off+size == z.max { + z.max -= size + } else { + // The store splits the known zero range in two. + // Keep track of the upper one, as we tend to initialize + // things in increasing memory order. + // TODO: keep track of larger one instead? + z.min = off + size + } + // Save updated zero range. + if zeroes[v.ID] != z { + zeroes[v.ID] = z + changed = true + } + } + } + if !changed { + break + } + } + return zeroes +} + +// wbcall emits write barrier runtime call in b, returns memory. +func wbcall(pos src.XPos, b *Block, fn, typ *obj.LSym, ptr, val, mem, sp, sb *Value) *Value { + config := b.Func.Config // put arguments on stack off := config.ctxt.FixedFrameSize() @@ -348,11 +484,6 @@ func wbcall(pos src.XPos, b *Block, fn, typ *obj.LSym, ptr, val, mem, sp, sb *Va // issue call mem = b.NewValue1A(pos, OpStaticCall, types.TypeMem, fn, mem) mem.AuxInt = off - config.ctxt.FixedFrameSize() - - if valIsVolatile { - mem = b.NewValue1A(pos, OpVarKill, types.TypeMem, tmp, mem) // mark temp dead - } - return mem } @@ -373,9 +504,15 @@ func IsStackAddr(v *Value) bool { return false } -// IsGlobalAddr reports whether v is known to be an address of a global. +// IsGlobalAddr reports whether v is known to be an address of a global (or nil). func IsGlobalAddr(v *Value) bool { - return v.Op == OpAddr && v.Args[0].Op == OpSB + if v.Op == OpAddr && v.Args[0].Op == OpSB { + return true // address of a global + } + if v.Op == OpConst64 || v.Op == OpConst32 { + return true // nil, the only possible pointer constant + } + return false } // IsReadOnlyGlobalAddr reports whether v is known to be an address of a read-only global. @@ -388,10 +525,6 @@ func IsReadOnlyGlobalAddr(v *Value) bool { } // IsNewObject reports whether v is a pointer to a freshly allocated & zeroed object at memory state mem. -// TODO: Be more precise. We really want "IsNilPointer" for the particular field in question. -// Right now, we can only detect a new object before any writes have been done to it. -// We could ignore non-pointer writes, writes to offsets which -// are known not to overlap the write in question, etc. func IsNewObject(v *Value, mem *Value) bool { if v.Op != OpLoad { return false diff --git a/src/cmd/compile/internal/ssa/xposmap.go b/src/cmd/compile/internal/ssa/xposmap.go new file mode 100644 index 0000000000..93582e1373 --- /dev/null +++ b/src/cmd/compile/internal/ssa/xposmap.go @@ -0,0 +1,116 @@ +// 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 ssa + +import ( + "cmd/internal/src" + "fmt" +) + +type lineRange struct { + first, last uint32 +} + +// An xposmap is a map from fileindex and line of src.XPos to int32, +// implemented sparsely to save space (column and statement status are ignored). +// The sparse skeleton is constructed once, and then reused by ssa phases +// that (re)move values with statements attached. +type xposmap struct { + // A map from file index to maps from line range to integers (block numbers) + maps map[int32]*biasedSparseMap + // The next two fields provide a single-item cache for common case of repeated lines from same file. + lastIndex int32 // -1 means no entry in cache + lastMap *biasedSparseMap // map found at maps[lastIndex] +} + +// newXposmap constructs an xposmap valid for inputs which have a file index in the keys of x, +// and line numbers in the range x[file index]. +// The resulting xposmap will panic if a caller attempts to set or add an XPos not in that range. +func newXposmap(x map[int]lineRange) *xposmap { + maps := make(map[int32]*biasedSparseMap) + for i, p := range x { + maps[int32(i)] = newBiasedSparseMap(int(p.first), int(p.last)) + } + return &xposmap{maps: maps, lastIndex: -1} // zero for the rest is okay +} + +// clear removes data from the map but leaves the sparse skeleton. +func (m *xposmap) clear() { + for _, l := range m.maps { + if l != nil { + l.clear() + } + } + m.lastIndex = -1 + m.lastMap = nil +} + +// mapFor returns the line range map for a given file index. +func (m *xposmap) mapFor(index int32) *biasedSparseMap { + if index == m.lastIndex { + return m.lastMap + } + mf := m.maps[index] + m.lastIndex = index + m.lastMap = mf + return mf +} + +// set inserts p->v into the map. +// If p does not fall within the set of fileindex->lineRange used to construct m, this will panic. +func (m *xposmap) set(p src.XPos, v int32) { + s := m.mapFor(p.FileIndex()) + if s == nil { + panic(fmt.Sprintf("xposmap.set(%d), file index not found in map\n", p.FileIndex())) + } + s.set(p.Line(), v) +} + +// get returns the int32 associated with the file index and line of p. +func (m *xposmap) get(p src.XPos) int32 { + s := m.mapFor(p.FileIndex()) + if s == nil { + return -1 + } + return s.get(p.Line()) +} + +// add adds p to m, treating m as a set instead of as a map. +// If p does not fall within the set of fileindex->lineRange used to construct m, this will panic. +// Use clear() in between set/map interpretations of m. +func (m *xposmap) add(p src.XPos) { + m.set(p, 0) +} + +// contains returns whether the file index and line of p are in m, +// treating m as a set instead of as a map. +func (m *xposmap) contains(p src.XPos) bool { + s := m.mapFor(p.FileIndex()) + if s == nil { + return false + } + return s.contains(p.Line()) +} + +// remove removes the file index and line for p from m, +// whether m is currently treated as a map or set. +func (m *xposmap) remove(p src.XPos) { + s := m.mapFor(p.FileIndex()) + if s == nil { + return + } + s.remove(p.Line()) +} + +// foreachEntry applies f to each (fileindex, line, value) triple in m. +func (m *xposmap) foreachEntry(f func(j int32, l uint, v int32)) { + for j, mm := range m.maps { + s := mm.size() + for i := 0; i < s; i++ { + l, v := mm.getEntry(i) + f(j, l, v) + } + } +} diff --git a/src/cmd/compile/internal/syntax/parser.go b/src/cmd/compile/internal/syntax/parser.go index e1cd8f9f5a..d4e9bf2f96 100644 --- a/src/cmd/compile/internal/syntax/parser.go +++ b/src/cmd/compile/internal/syntax/parser.go @@ -170,6 +170,20 @@ func (p *parser) want(tok token) { } } +// gotAssign is like got(_Assign) but it also accepts ":=" +// (and reports an error) for better parser error recovery. +func (p *parser) gotAssign() bool { + switch p.tok { + case _Define: + p.syntaxError("expecting =") + fallthrough + case _Assign: + p.next() + return true + } + return false +} + // ---------------------------------------------------------------------------- // Error handling @@ -514,7 +528,7 @@ func (p *parser) constDecl(group *Group) Decl { d.NameList = p.nameList(p.name()) if p.tok != _EOF && p.tok != _Semi && p.tok != _Rparen { d.Type = p.typeOrNil() - if p.got(_Assign) { + if p.gotAssign() { d.Values = p.exprList() } } @@ -533,7 +547,7 @@ func (p *parser) typeDecl(group *Group) Decl { d.pos = p.pos() d.Name = p.name() - d.Alias = p.got(_Assign) + d.Alias = p.gotAssign() d.Type = p.typeOrNil() if d.Type == nil { d.Type = p.bad() @@ -556,11 +570,11 @@ func (p *parser) varDecl(group *Group) Decl { d.pos = p.pos() d.NameList = p.nameList(p.name()) - if p.got(_Assign) { + if p.gotAssign() { d.Values = p.exprList() } else { d.Type = p.type_() - if p.got(_Assign) { + if p.gotAssign() { d.Values = p.exprList() } } diff --git a/src/cmd/compile/internal/syntax/testdata/issue31092.src b/src/cmd/compile/internal/syntax/testdata/issue31092.src new file mode 100644 index 0000000000..b1839b8f46 --- /dev/null +++ b/src/cmd/compile/internal/syntax/testdata/issue31092.src @@ -0,0 +1,16 @@ +// 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. + +// Test cases for issue 31092: Better synchronization of +// parser after seeing an := rather than an = in a const, +// type, or variable declaration. + +package p + +const _ /* ERROR unexpected := */ := 0 +type _ /* ERROR unexpected := */ := int +var _ /* ERROR unexpected := */ := 0 + +const _ int /* ERROR unexpected := */ := 0 +var _ int /* ERROR unexpected := */ := 0 diff --git a/src/cmd/compile/internal/test/divconst_test.go b/src/cmd/compile/internal/test/divconst_test.go index f585a5b51f..b03550058f 100644 --- a/src/cmd/compile/internal/test/divconst_test.go +++ b/src/cmd/compile/internal/test/divconst_test.go @@ -8,6 +8,8 @@ import ( "testing" ) +var boolres bool + var i64res int64 func BenchmarkDivconstI64(b *testing.B) { @@ -16,6 +18,30 @@ func BenchmarkDivconstI64(b *testing.B) { } } +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 BenchmarkDivconstU64(b *testing.B) { @@ -24,6 +50,25 @@ func BenchmarkDivconstU64(b *testing.B) { } } +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) { @@ -32,6 +77,31 @@ func BenchmarkDivconstI32(b *testing.B) { } } +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) { @@ -40,6 +110,25 @@ func BenchmarkDivconstU32(b *testing.B) { } } +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) { @@ -48,6 +137,31 @@ func BenchmarkDivconstI16(b *testing.B) { } } +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) { @@ -56,6 +170,25 @@ func BenchmarkDivconstU16(b *testing.B) { } } +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) { @@ -64,6 +197,31 @@ func BenchmarkDivconstI8(b *testing.B) { } } +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) { @@ -71,3 +229,22 @@ func BenchmarkDivconstU8(b *testing.B) { 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 + } +} diff --git a/src/cmd/compile/internal/types/sym_test.go b/src/cmd/compile/internal/types/sym_test.go index a2bb02deda..94efd42aa4 100644 --- a/src/cmd/compile/internal/types/sym_test.go +++ b/src/cmd/compile/internal/types/sym_test.go @@ -6,8 +6,8 @@ package types_test import ( "cmd/compile/internal/types" - "cmd/internal/obj" "reflect" + "sort" "testing" ) @@ -50,7 +50,7 @@ func TestSymLess(t *testing.T) { if reflect.DeepEqual(data, want) { t.Fatal("data must be shuffled") } - obj.SortSlice(data, func(i, j int) bool { return data[i].Less(data[j]) }) + sort.Slice(data, func(i, j int) bool { return data[i].Less(data[j]) }) if !reflect.DeepEqual(data, want) { t.Logf("want: %#v", want) t.Logf("data: %#v", data) diff --git a/src/cmd/compile/internal/types/type.go b/src/cmd/compile/internal/types/type.go index 7d123e4610..e2f3e66d8b 100644 --- a/src/cmd/compile/internal/types/type.go +++ b/src/cmd/compile/internal/types/type.go @@ -1395,6 +1395,28 @@ func (t *Type) NumComponents(countBlank componentsIncludeBlankFields) int64 { return 1 } +// SoleComponent returns the only primitive component in t, +// if there is exactly one. Otherwise, it returns nil. +// Components are counted as in NumComponents, including blank fields. +func (t *Type) SoleComponent() *Type { + switch t.Etype { + case TSTRUCT: + if t.IsFuncArgStruct() { + Fatalf("SoleComponent func arg struct") + } + if t.NumFields() != 1 { + return nil + } + return t.Field(0).Type.SoleComponent() + case TARRAY: + if t.NumElem() != 1 { + return nil + } + return t.Elem().SoleComponent() + } + return t +} + // ChanDir returns the direction of a channel type t. // The direction will be one of Crecv, Csend, or Cboth. func (t *Type) ChanDir() ChanDir { diff --git a/src/cmd/compile/internal/wasm/ssa.go b/src/cmd/compile/internal/wasm/ssa.go index 897d6146c5..7fdd335ee9 100644 --- a/src/cmd/compile/internal/wasm/ssa.go +++ b/src/cmd/compile/internal/wasm/ssa.go @@ -10,6 +10,7 @@ import ( "cmd/compile/internal/types" "cmd/internal/obj" "cmd/internal/obj/wasm" + "cmd/internal/objabi" ) func Init(arch *gc.Arch) { @@ -96,7 +97,6 @@ func ssaGenBlock(s *gc.SSAGenState, b, next *ssa.Block) { p.To.Sym = b.Aux.(*obj.LSym) case ssa.BlockExit: - s.Prog(obj.AUNDEF) case ssa.BlockDefer: p := s.Prog(wasm.AGet) @@ -283,15 +283,15 @@ func ssaGenValueOnStack(s *gc.SSAGenState, v *ssa.Value) { case ssa.OpWasmI64Eqz: getValue64(s, v.Args[0]) s.Prog(v.Op.Asm()) - s.Prog(wasm.AI64ExtendUI32) + s.Prog(wasm.AI64ExtendI32U) case ssa.OpWasmI64Eq, ssa.OpWasmI64Ne, ssa.OpWasmI64LtS, ssa.OpWasmI64LtU, ssa.OpWasmI64GtS, ssa.OpWasmI64GtU, ssa.OpWasmI64LeS, ssa.OpWasmI64LeU, ssa.OpWasmI64GeS, ssa.OpWasmI64GeU, ssa.OpWasmF64Eq, ssa.OpWasmF64Ne, ssa.OpWasmF64Lt, ssa.OpWasmF64Gt, ssa.OpWasmF64Le, ssa.OpWasmF64Ge: getValue64(s, v.Args[0]) getValue64(s, v.Args[1]) s.Prog(v.Op.Asm()) - s.Prog(wasm.AI64ExtendUI32) + s.Prog(wasm.AI64ExtendI32U) - case ssa.OpWasmI64Add, ssa.OpWasmI64Sub, ssa.OpWasmI64Mul, ssa.OpWasmI64DivU, ssa.OpWasmI64RemS, ssa.OpWasmI64RemU, ssa.OpWasmI64And, ssa.OpWasmI64Or, ssa.OpWasmI64Xor, ssa.OpWasmI64Shl, ssa.OpWasmI64ShrS, ssa.OpWasmI64ShrU, ssa.OpWasmF64Add, ssa.OpWasmF64Sub, ssa.OpWasmF64Mul, ssa.OpWasmF64Div: + case ssa.OpWasmI64Add, ssa.OpWasmI64Sub, ssa.OpWasmI64Mul, ssa.OpWasmI64DivU, ssa.OpWasmI64RemS, ssa.OpWasmI64RemU, ssa.OpWasmI64And, ssa.OpWasmI64Or, ssa.OpWasmI64Xor, ssa.OpWasmI64Shl, ssa.OpWasmI64ShrS, ssa.OpWasmI64ShrU, ssa.OpWasmF64Add, ssa.OpWasmF64Sub, ssa.OpWasmF64Mul, ssa.OpWasmF64Div, ssa.OpWasmF64Copysign, ssa.OpWasmI64Rotl: getValue64(s, v.Args[0]) getValue64(s, v.Args[1]) s.Prog(v.Op.Asm()) @@ -307,17 +307,28 @@ func ssaGenValueOnStack(s *gc.SSAGenState, v *ssa.Value) { } s.Prog(wasm.AI64DivS) - case ssa.OpWasmI64TruncSF64: + case ssa.OpWasmI64TruncSatF64S: getValue64(s, v.Args[0]) - p := s.Prog(wasm.ACall) - p.To = obj.Addr{Type: obj.TYPE_MEM, Name: obj.NAME_EXTERN, Sym: gc.WasmTruncS} + if objabi.GOWASM.SatConv { + s.Prog(v.Op.Asm()) + } else { + p := s.Prog(wasm.ACall) + p.To = obj.Addr{Type: obj.TYPE_MEM, Name: obj.NAME_EXTERN, Sym: gc.WasmTruncS} + } - case ssa.OpWasmI64TruncUF64: + case ssa.OpWasmI64TruncSatF64U: getValue64(s, v.Args[0]) - p := s.Prog(wasm.ACall) - p.To = obj.Addr{Type: obj.TYPE_MEM, Name: obj.NAME_EXTERN, Sym: gc.WasmTruncU} + if objabi.GOWASM.SatConv { + s.Prog(v.Op.Asm()) + } else { + p := s.Prog(wasm.ACall) + p.To = obj.Addr{Type: obj.TYPE_MEM, Name: obj.NAME_EXTERN, Sym: gc.WasmTruncU} + } - case ssa.OpWasmF64Neg, ssa.OpWasmF64ConvertSI64, ssa.OpWasmF64ConvertUI64: + case + ssa.OpWasmF64Neg, ssa.OpWasmF64ConvertI64S, ssa.OpWasmF64ConvertI64U, + ssa.OpWasmI64Extend8S, ssa.OpWasmI64Extend16S, ssa.OpWasmI64Extend32S, + ssa.OpWasmF64Sqrt, ssa.OpWasmF64Trunc, ssa.OpWasmF64Ceil, ssa.OpWasmF64Floor, ssa.OpWasmF64Nearest, ssa.OpWasmF64Abs, ssa.OpWasmI64Ctz, ssa.OpWasmI64Clz, ssa.OpWasmI64Popcnt: getValue64(s, v.Args[0]) s.Prog(v.Op.Asm()) @@ -362,7 +373,7 @@ func getValue64(s *gc.SSAGenState, v *ssa.Value) { reg := v.Reg() getReg(s, reg) if reg == wasm.REG_SP { - s.Prog(wasm.AI64ExtendUI32) + s.Prog(wasm.AI64ExtendI32U) } } diff --git a/src/cmd/compile/internal/x86/ssa.go b/src/cmd/compile/internal/x86/ssa.go index 24ba9649be..66c7b753c6 100644 --- a/src/cmd/compile/internal/x86/ssa.go +++ b/src/cmd/compile/internal/x86/ssa.go @@ -758,6 +758,20 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { p.To.Name = obj.NAME_EXTERN p.To.Sym = v.Aux.(*obj.LSym) + case ssa.Op386LoweredPanicBoundsA, ssa.Op386LoweredPanicBoundsB, ssa.Op386LoweredPanicBoundsC: + p := s.Prog(obj.ACALL) + p.To.Type = obj.TYPE_MEM + p.To.Name = obj.NAME_EXTERN + p.To.Sym = gc.BoundsCheckFunc[v.AuxInt] + s.UseArgs(8) // space used in callee args area by assembly stubs + + case ssa.Op386LoweredPanicExtendA, ssa.Op386LoweredPanicExtendB, ssa.Op386LoweredPanicExtendC: + p := s.Prog(obj.ACALL) + p.To.Type = obj.TYPE_MEM + p.To.Name = obj.NAME_EXTERN + p.To.Sym = gc.ExtendCheckFunc[v.AuxInt] + s.UseArgs(12) // space used in callee args area by assembly stubs + case ssa.Op386CALLstatic, ssa.Op386CALLclosure, ssa.Op386CALLinter: s.Call(v) case ssa.Op386NEGL, @@ -902,7 +916,6 @@ func ssaGenBlock(s *gc.SSAGenState, b, next *ssa.Block) { s.Branches = append(s.Branches, gc.Branch{P: p, B: b.Succs[0].Block()}) } case ssa.BlockExit: - s.Prog(obj.AUNDEF) // tell plive.go that we never reach here case ssa.BlockRet: s.Prog(obj.ARET) case ssa.BlockRetJmp: diff --git a/src/cmd/cover/cover.go b/src/cmd/cover/cover.go index 0348849578..1748606c5e 100644 --- a/src/cmd/cover/cover.go +++ b/src/cmd/cover/cover.go @@ -16,7 +16,6 @@ import ( "log" "os" "sort" - "unicode" "cmd/internal/edit" "cmd/internal/objabi" @@ -117,7 +116,7 @@ func parseFlags() error { return fmt.Errorf("too many options") } - if *varVar != "" && !isValidIdentifier(*varVar) { + if *varVar != "" && !token.IsIdentifier(*varVar) { return fmt.Errorf("-var: %q is not a valid identifier", *varVar) } @@ -646,20 +645,11 @@ func (f *File) addVariables(w io.Writer) { // - 32-bit starting line number // - 32-bit ending line number // - (16 bit ending column number << 16) | (16-bit starting column number). - var lastStart, lastEnd token.Position for i, block := range f.blocks { start := f.fset.Position(block.startByte) end := f.fset.Position(block.endByte) - // It is possible for positions to repeat when there is a - // line directive that does not specify column information - // and the input has not been passed through gofmt. - // See issue #27350 and TestHtmlUnformatted. - if samePos(start, lastStart) && samePos(end, lastEnd) { - end.Column++ - } - lastStart = start - lastEnd = end + start, end = dedup(start, end) fmt.Fprintf(w, "\t\t%d, %d, %#x, // [%d]\n", start.Line, end.Line, (end.Column&0xFFFF)<<16|(start.Column&0xFFFF), i) } @@ -694,26 +684,39 @@ func (f *File) addVariables(w io.Writer) { } } -func isValidIdentifier(ident string) bool { - if len(ident) == 0 { - return false - } - for i, c := range ident { - if i > 0 && unicode.IsDigit(c) { - continue - } - if c == '_' || unicode.IsLetter(c) { - continue - } - return false - } - return true +// It is possible for positions to repeat when there is a line +// directive that does not specify column information and the input +// has not been passed through gofmt. +// See issues #27530 and #30746. +// Tests are TestHtmlUnformatted and TestLineDup. +// We use a map to avoid duplicates. + +// pos2 is a pair of token.Position values, used as a map key type. +type pos2 struct { + p1, p2 token.Position } -// samePos returns whether two positions have the same file/line/column. -// We don't use p1 == p2 because token.Position also has an Offset field, -// and when the input uses //line directives two Positions can have different -// Offset values while having the same file/line/dolumn. -func samePos(p1, p2 token.Position) bool { - return p1.Filename == p2.Filename && p1.Line == p2.Line && p1.Column == p2.Column +// seenPos2 tracks whether we have seen a token.Position pair. +var seenPos2 = make(map[pos2]bool) + +// dedup takes a token.Position pair and returns a pair that does not +// duplicate any existing pair. The returned pair will have the Offset +// fields cleared. +func dedup(p1, p2 token.Position) (r1, r2 token.Position) { + key := pos2{ + p1: p1, + p2: p2, + } + + // We want to ignore the Offset fields in the map, + // since cover uses only file/line/column. + key.p1.Offset = 0 + key.p2.Offset = 0 + + for seenPos2[key] { + key.p2.Column++ + } + seenPos2[key] = true + + return key.p1, key.p2 } diff --git a/src/cmd/cover/cover_test.go b/src/cmd/cover/cover_test.go index f002442b63..ea970a61da 100644 --- a/src/cmd/cover/cover_test.go +++ b/src/cmd/cover/cover_test.go @@ -40,16 +40,20 @@ var ( htmlGolden = filepath.Join(testdata, "html", "html.golden") // Temporary files. - tmpTestMain string - coverInput string - coverOutput string - htmlProfile string - htmlHTML string - htmlUDir string - htmlU string - htmlUTest string - htmlUProfile string - htmlUHTML string + tmpTestMain string + coverInput string + coverOutput string + htmlProfile string + htmlHTML string + htmlUDir string + htmlU string + htmlUTest string + htmlUProfile string + htmlUHTML string + lineDupDir string + lineDupGo string + lineDupTestGo string + lineDupProfile string ) var ( @@ -77,11 +81,12 @@ var debug = flag.Bool("debug", false, "keep rewritten files for debugging") // We use TestMain to set up a temporary directory and remove it when // the tests are done. func TestMain(m *testing.M) { - dir, err := ioutil.TempDir("", "gotestcover") + dir, err := ioutil.TempDir("", "go-testcover") if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } + os.Setenv("GOPATH", filepath.Join(dir, "_gopath")) testTempDir = dir @@ -95,6 +100,10 @@ func TestMain(m *testing.M) { htmlUTest = filepath.Join(htmlUDir, "htmlunformatted_test.go") htmlUProfile = filepath.Join(htmlUDir, "htmlunformatted.cov") htmlUHTML = filepath.Join(htmlUDir, "htmlunformatted.html") + lineDupDir = filepath.Join(dir, "linedup") + lineDupGo = filepath.Join(lineDupDir, "linedup.go") + lineDupTestGo = filepath.Join(lineDupDir, "linedup_test.go") + lineDupProfile = filepath.Join(lineDupDir, "linedup.out") status := m.Run() @@ -483,6 +492,75 @@ lab: run(cmd, t) } +// lineDupContents becomes linedup.go in TestFuncWithDuplicateLines. +const lineDupContents = ` +package linedup + +var G int + +func LineDup(c int) { + for i := 0; i < c; i++ { +//line ld.go:100 + if i % 2 == 0 { + G++ + } + if i % 3 == 0 { + G++; G++ + } +//line ld.go:100 + if i % 4 == 0 { + G++; G++; G++ + } + if i % 5 == 0 { + G++; G++; G++; G++ + } + } +} +` + +// lineDupTestContents becomes linedup_test.go in TestFuncWithDuplicateLines. +const lineDupTestContents = ` +package linedup + +import "testing" + +func TestLineDup(t *testing.T) { + LineDup(100) +} +` + +// Test -func with duplicate //line directives with different numbers +// of statements. +func TestFuncWithDuplicateLines(t *testing.T) { + t.Parallel() + testenv.MustHaveGoRun(t) + buildCover(t) + + if err := os.Mkdir(lineDupDir, 0777); err != nil { + t.Fatal(err) + } + + if err := ioutil.WriteFile(filepath.Join(lineDupDir, "go.mod"), []byte("module linedup\n"), 0444); err != nil { + t.Fatal(err) + } + if err := ioutil.WriteFile(lineDupGo, []byte(lineDupContents), 0444); err != nil { + t.Fatal(err) + } + if err := ioutil.WriteFile(lineDupTestGo, []byte(lineDupTestContents), 0444); err != nil { + t.Fatal(err) + } + + // go test -cover -covermode count -coverprofile TMPDIR/linedup.out + cmd := exec.Command(testenv.GoToolPath(t), "test", toolexecArg, "-cover", "-covermode", "count", "-coverprofile", lineDupProfile) + cmd.Dir = lineDupDir + run(cmd, t) + + // testcover -func=TMPDIR/linedup.out + cmd = exec.Command(testcover, "-func", lineDupProfile) + cmd.Dir = lineDupDir + run(cmd, t) +} + func run(c *exec.Cmd, t *testing.T) { t.Helper() t.Log("running", c.Args) diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go index 43e1fe66f3..3df7f09abc 100644 --- a/src/cmd/dist/build.go +++ b/src/cmd/dist/build.go @@ -33,6 +33,7 @@ var ( go386 string gomips string gomips64 string + goppc64 string goroot string goroot_final string goextlinkenabled string @@ -48,6 +49,7 @@ var ( defaultcflags string defaultldflags string defaultpkgconfig string + defaultldso string rebuildall bool defaultclang bool @@ -78,6 +80,7 @@ var okgoarch = []string{ var okgoos = []string{ "darwin", "dragonfly", + "illumos", "js", "linux", "android", @@ -158,6 +161,12 @@ func xinit() { } gomips64 = b + b = os.Getenv("GOPPC64") + if b == "" { + b = "power8" + } + goppc64 = b + if p := pathf("%s/src/all.bash", goroot); !isfile(p) { fatalf("$GOROOT is not set correctly or not exported\n"+ "\tGOROOT=%s\n"+ @@ -190,6 +199,7 @@ func xinit() { } gogcflags = os.Getenv("BOOT_GO_GCFLAGS") + goldflags = os.Getenv("BOOT_GO_LDFLAGS") cc, cxx := "gcc", "g++" if defaultclang { @@ -207,6 +217,8 @@ func xinit() { } defaultpkgconfig = b + defaultldso = os.Getenv("GO_LDSO") + // For tools being invoked but also for os.ExpandEnv. os.Setenv("GO386", go386) os.Setenv("GOARCH", goarch) @@ -216,6 +228,7 @@ func xinit() { os.Setenv("GOOS", goos) os.Setenv("GOMIPS", gomips) os.Setenv("GOMIPS64", gomips64) + os.Setenv("GOPPC64", goppc64) os.Setenv("GOROOT", goroot) os.Setenv("GOROOT_FINAL", goroot_final) @@ -483,6 +496,7 @@ func setup() { xremoveall(p) } xmkdirall(p) + xatexit(func() { xremoveall(p) }) // Create tool directory. // We keep it in pkg/, just like the object directory above. @@ -646,7 +660,15 @@ func runInstall(dir string, ch chan struct{}) { if elem == "go" { elem = "go_bootstrap" } - link = []string{pathf("%s/link", tooldir), "-o", pathf("%s/%s%s", tooldir, elem, exe)} + link = []string{pathf("%s/link", tooldir)} + if goos == "android" { + link = append(link, "-buildmode=pie") + } + if goldflags != "" { + link = append(link, goldflags) + } + link = append(link, "-extld="+compilerEnvLookup(defaultcc, goos, goarch)) + link = append(link, "-o", pathf("%s/%s%s", tooldir, elem, exe)) targ = len(link) - 1 } ttarg := mtime(link[targ]) @@ -851,6 +873,9 @@ func runInstall(dir string, ch chan struct{}) { // compiler to generate ABI wrappers for everything. compile = append(compile, "-allabis") } + if goos == "android" { + compile = append(compile, "-shared") + } compile = append(compile, gofiles...) var wg sync.WaitGroup @@ -914,7 +939,7 @@ func matchtag(tag string) bool { } return !matchtag(tag[1:]) } - return tag == "gc" || tag == goos || tag == goarch || tag == "cmd_go_bootstrap" || tag == "go1.1" || (goos == "android" && tag == "linux") + return tag == "gc" || tag == goos || tag == goarch || tag == "cmd_go_bootstrap" || tag == "go1.1" || (goos == "android" && tag == "linux") || (goos == "illumos" && tag == "solaris") } // shouldbuild reports whether we should build this file. @@ -928,7 +953,7 @@ func shouldbuild(file, dir string) bool { name := filepath.Base(file) excluded := func(list []string, ok string) bool { for _, x := range list { - if x == ok || ok == "android" && x == "linux" { + if x == ok || (ok == "android" && x == "linux") || (ok == "illumos" && x == "solaris") { continue } i := strings.Index(name, x) @@ -1114,6 +1139,9 @@ func cmdenv() { if goarch == "mips64" || goarch == "mips64le" { xprintf(format, "GOMIPS64", gomips64) } + if goarch == "ppc64" || goarch == "ppc64le" { + xprintf(format, "GOPPC64", goppc64) + } if *path { sep := ":" @@ -1190,6 +1218,13 @@ func cmdbootstrap() { xflagparse(0) + // Set GOPATH to an internal directory. We shouldn't actually + // need to store files here, since the toolchain won't + // depend on modules outside of vendor directories, but if + // GOPATH points somewhere else (e.g., to GOROOT), the + // go tool may complain. + os.Setenv("GOPATH", pathf("%s/pkg/obj/gopath", goroot)) + if debug { // cmd/buildid is used in debug mode. toolchain = append(toolchain, "cmd/buildid") @@ -1237,7 +1272,7 @@ func cmdbootstrap() { } gogcflags = os.Getenv("GO_GCFLAGS") // we were using $BOOT_GO_GCFLAGS until now - goldflags = os.Getenv("GO_LDFLAGS") + goldflags = os.Getenv("GO_LDFLAGS") // we were using $BOOT_GO_LDFLAGS until now goBootstrap := pathf("%s/go_bootstrap", tooldir) cmdGo := pathf("%s/go", gobin) if debug { @@ -1393,9 +1428,13 @@ func cmdbootstrap() { func wrapperPathFor(goos, goarch string) string { switch { case goos == "android": - return pathf("%s/misc/android/go_android_exec.go", goroot) + if gohostos != "android" { + return pathf("%s/misc/android/go_android_exec.go", goroot) + } case goos == "darwin" && (goarch == "arm" || goarch == "arm64"): - return pathf("%s/misc/ios/go_darwin_arm_exec.go", goroot) + if gohostos != "darwin" || (gohostarch != "arm" && gohostarch != "arm64") { + return pathf("%s/misc/ios/go_darwin_arm_exec.go", goroot) + } } return "" } @@ -1405,17 +1444,17 @@ func goInstall(goBinary string, args ...string) { } func goCmd(goBinary string, cmd string, args ...string) { - installCmd := []string{goBinary, cmd, "-gcflags=all=" + gogcflags, "-ldflags=all=" + goldflags} + goCmd := []string{goBinary, cmd, "-gcflags=all=" + gogcflags, "-ldflags=all=" + goldflags} if vflag > 0 { - installCmd = append(installCmd, "-v") + goCmd = append(goCmd, "-v") } // Force only one process at a time on vx32 emulation. if gohostos == "plan9" && os.Getenv("sysname") == "vx32" { - installCmd = append(installCmd, "-p=1") + goCmd = append(goCmd, "-p=1") } - run(goroot, ShowOutput|CheckExit, append(installCmd, args...)...) + run(goroot, ShowOutput|CheckExit, append(goCmd, args...)...) } func checkNotStale(goBinary string, targets ...string) { @@ -1445,15 +1484,16 @@ func checkNotStale(goBinary string, targets ...string) { // single point of truth for supported platforms. This list is used // by 'go tool dist list'. var cgoEnabled = map[string]bool{ - "aix/ppc64": false, - "darwin/386": true, + "aix/ppc64": true, + "darwin/386": false, // Issue 31751 "darwin/amd64": true, "darwin/arm": true, "darwin/arm64": true, "dragonfly/amd64": true, "freebsd/386": true, "freebsd/amd64": true, - "freebsd/arm": false, + "freebsd/arm": true, + "illumos/amd64": true, "linux/386": true, "linux/amd64": true, "linux/arm": true, @@ -1478,9 +1518,11 @@ var cgoEnabled = map[string]bool{ "netbsd/386": true, "netbsd/amd64": true, "netbsd/arm": true, + "netbsd/arm64": true, "openbsd/386": true, "openbsd/amd64": true, "openbsd/arm": true, + "openbsd/arm64": true, "plan9/386": false, "plan9/amd64": false, "plan9/arm": false, diff --git a/src/cmd/dist/buildruntime.go b/src/cmd/dist/buildruntime.go index 5aadc8da67..2744951597 100644 --- a/src/cmd/dist/buildruntime.go +++ b/src/cmd/dist/buildruntime.go @@ -45,6 +45,7 @@ func mkzversion(dir, file string) { // const defaultGOARM = // const defaultGOMIPS = // const defaultGOMIPS64 = +// const defaultGOPPC64 = // const defaultGOOS = runtime.GOOS // const defaultGOARCH = runtime.GOARCH // const defaultGO_EXTLINK_ENABLED = @@ -73,9 +74,11 @@ func mkzbootstrap(file string) { fmt.Fprintf(&buf, "const defaultGOARM = `%s`\n", goarm) fmt.Fprintf(&buf, "const defaultGOMIPS = `%s`\n", gomips) fmt.Fprintf(&buf, "const defaultGOMIPS64 = `%s`\n", gomips64) + fmt.Fprintf(&buf, "const defaultGOPPC64 = `%s`\n", goppc64) fmt.Fprintf(&buf, "const defaultGOOS = runtime.GOOS\n") fmt.Fprintf(&buf, "const defaultGOARCH = runtime.GOARCH\n") fmt.Fprintf(&buf, "const defaultGO_EXTLINK_ENABLED = `%s`\n", goextlinkenabled) + fmt.Fprintf(&buf, "const defaultGO_LDSO = `%s`\n", defaultldso) fmt.Fprintf(&buf, "const version = `%s`\n", findgoversion()) fmt.Fprintf(&buf, "const stackGuardMultiplierDefault = %d\n", stackGuardMultiplierDefault()) fmt.Fprintf(&buf, "const goexperiment = `%s`\n", os.Getenv("GOEXPERIMENT")) diff --git a/src/cmd/dist/buildtool.go b/src/cmd/dist/buildtool.go index 71ed4ba8bc..190b592b6e 100644 --- a/src/cmd/dist/buildtool.go +++ b/src/cmd/dist/buildtool.go @@ -89,6 +89,7 @@ var bootstrapDirs = []string{ "debug/elf", "debug/macho", "debug/pe", + "internal/goversion", "internal/xcoff", "math/big", "math/bits", @@ -127,10 +128,12 @@ func bootstrapBuildTools() { // but it is easier to debug on failure if the files are in a known location. workspace := pathf("%s/pkg/bootstrap", goroot) xremoveall(workspace) + xatexit(func() { xremoveall(workspace) }) base := pathf("%s/src/bootstrap", workspace) xmkdirall(base) // Copy source code into $GOROOT/pkg/bootstrap and rewrite import paths. + writefile("module bootstrap\n", pathf("%s/%s", base, "go.mod"), 0) for _, dir := range bootstrapDirs { src := pathf("%s/src/%s", goroot, dir) dst := pathf("%s/%s", base, dir) @@ -204,7 +207,7 @@ func bootstrapBuildTools() { cmd = append(cmd, "-toolexec="+tool) } cmd = append(cmd, "bootstrap/cmd/...") - run(workspace, ShowOutput|CheckExit, cmd...) + run(base, ShowOutput|CheckExit, cmd...) // Copy binaries into tool binary directory. for _, name := range bootstrapDirs { @@ -244,6 +247,7 @@ func isUnneededSSARewriteFile(srcFile string) (archCaps string, unneeded bool) { } archCaps = fileArch fileArch = strings.ToLower(fileArch) + fileArch = strings.TrimSuffix(fileArch, "splitload") if fileArch == strings.TrimSuffix(runtime.GOARCH, "le") { return "", false } diff --git a/src/cmd/dist/main.go b/src/cmd/dist/main.go index bab8ab781a..07361d828f 100644 --- a/src/cmd/dist/main.go +++ b/src/cmd/dist/main.go @@ -56,10 +56,10 @@ func main() { gohostos = runtime.GOOS switch gohostos { + case "aix": + // uname -m doesn't work under AIX + gohostarch = "ppc64" case "darwin": - // Even on 64-bit platform, darwin uname -m prints i386. - // We don't support any of the OS X versions that run on 32-bit-only hardware anymore. - gohostarch = "amd64" // macOS 10.9 and later require clang defaultclang = true case "freebsd": @@ -68,12 +68,21 @@ func main() { case "openbsd": // The gcc available on OpenBSD armv7 is old/inadequate (for example, lacks // __sync_fetch_and_*/__sync_*_and_fetch) and will likely be removed in the - // not-to-distant future - use clang instead. - if runtime.GOARCH == "arm" { + // not-to-distant future - use clang instead. OpenBSD arm64 does not ship + // with gcc. + if runtime.GOARCH == "arm" || runtime.GOARCH == "arm64" { defaultclang = true } - case "solaris": - // Even on 64-bit platform, solaris uname -m prints i86pc. + case "plan9": + gohostarch = os.Getenv("objtype") + if gohostarch == "" { + fatalf("$objtype is unset") + } + case "solaris", "illumos": + // Solaris and illumos systems have multi-arch userlands, and + // "uname -m" reports the machine hardware name; e.g., + // "i86pc" on both 32- and 64-bit x86 systems. Check for the + // native (widest) instruction set on the running kernel: out := run("", CheckExit, "isainfo", "-n") if strings.Contains(out, "amd64") { gohostarch = "amd64" @@ -81,16 +90,8 @@ func main() { if strings.Contains(out, "i386") { gohostarch = "386" } - case "plan9": - gohostarch = os.Getenv("objtype") - if gohostarch == "" { - fatalf("$objtype is unset") - } case "windows": exe = ".exe" - case "aix": - // uname -m doesn't work under AIX - gohostarch = "ppc64" } sysinit() @@ -103,10 +104,15 @@ func main() { gohostarch = "amd64" case strings.Contains(out, "86"): gohostarch = "386" + if gohostos == "darwin" { + // Even on 64-bit platform, some versions of macOS uname -m prints i386. + // We don't support any of the OS X versions that run on 32-bit-only hardware anymore. + gohostarch = "amd64" + } + case strings.Contains(out, "aarch64"), strings.Contains(out, "arm64"): + gohostarch = "arm64" case strings.Contains(out, "arm"): gohostarch = "arm" - case strings.Contains(out, "aarch64"): - gohostarch = "arm64" case strings.Contains(out, "ppc64le"): gohostarch = "ppc64le" case strings.Contains(out, "ppc64"): @@ -124,8 +130,8 @@ func main() { case strings.Contains(out, "s390x"): gohostarch = "s390x" case gohostos == "darwin": - if strings.Contains(run("", CheckExit, "uname", "-v"), "RELEASE_ARM_") { - gohostarch = "arm" + if strings.Contains(run("", CheckExit, "uname", "-v"), "RELEASE_ARM64_") { + gohostarch = "arm64" } default: fatalf("unknown architecture: %s", out) diff --git a/src/cmd/dist/test.go b/src/cmd/dist/test.go index 6f2eee19df..56ab64b8cf 100644 --- a/src/cmd/dist/test.go +++ b/src/cmd/dist/test.go @@ -190,6 +190,11 @@ func (t *tester) run() { } } + // On a few builders, make GOROOT unwritable to catch tests writing to it. + if strings.HasPrefix(os.Getenv("GO_BUILDER_NAME"), "linux-") { + t.makeGOROOTUnwritable() + } + for _, dt := range t.tests { if !t.shouldRunTest(dt.name) { t.partial = true @@ -326,8 +331,6 @@ func (t *tester) registerStdTest(pkg string) { } if t.compileOnly { args = append(args, "-run=^$") - } else if goos == "js" && goarch == "wasm" { - args = append(args, "-run=^Test") // exclude examples; Issue 25913 } args = append(args, stdMatches...) cmd := exec.Command("go", args...) @@ -380,22 +383,6 @@ func (t *tester) registerRaceBenchTest(pkg string) { var stdOutErrAreTerminals func() bool func (t *tester) registerTests() { - if strings.HasSuffix(os.Getenv("GO_BUILDER_NAME"), "-vetall") { - // Run vet over std and cmd and call it quits. - for k := range cgoEnabled { - osarch := k - t.tests = append(t.tests, distTest{ - name: "vet/" + osarch, - heading: "cmd/vet/all", - fn: func(dt *distTest) error { - t.addCmd(dt, "src/cmd/vet/all", "go", "run", "main.go", "-p="+osarch) - return nil - }, - }) - } - return - } - // Fast path to avoid the ~1 second of `go list std cmd` when // the caller lists specific tests to run. (as the continuous // build coordinator does). @@ -419,9 +406,10 @@ func (t *tester) registerTests() { if !t.race { cmd.Args = append(cmd.Args, "cmd") } + cmd.Stderr = new(bytes.Buffer) all, err := cmd.Output() if err != nil { - log.Fatalf("Error running go list std cmd: %v, %s", err, all) + log.Fatalf("Error running go list std cmd: %v:\n%s", err, cmd.Stderr) } pkgs := strings.Fields(string(all)) for _, pkg := range pkgs { @@ -570,10 +558,7 @@ func (t *tester) registerTests() { } // Test internal linking of PIE binaries where it is supported. - if goos == "linux" && goarch == "amd64" && !isAlpineLinux() { - // Issue 18243: We don't have a way to set the default - // dynamic linker used in internal linking mode. So - // this test is skipped on Alpine. + if goos == "linux" && (goarch == "amd64" || goarch == "arm64") { t.tests = append(t.tests, distTest{ name: "pie_internal", heading: "internal linking of -buildmode=pie", @@ -582,6 +567,17 @@ func (t *tester) registerTests() { return nil }, }) + // Also test a cgo package. + if t.cgoEnabled { + t.tests = append(t.tests, distTest{ + name: "pie_internal_cgo", + heading: "internal linking of -buildmode=pie", + fn: func(dt *distTest) error { + t.addCmd(dt, "src", t.goTest(), "os/user", "-buildmode=pie", "-ldflags=-linkmode=internal", t.timeout(60)) + return nil + }, + }) + } } // sync tests @@ -606,22 +602,8 @@ func (t *tester) registerTests() { if t.cgoEnabled && !t.iOS() { // Disabled on iOS. golang.org/issue/15919 - t.tests = append(t.tests, distTest{ - name: "cgo_stdio", - heading: "../misc/cgo/stdio", - fn: func(dt *distTest) error { - t.addCmd(dt, "misc/cgo/stdio", t.goTest(), t.timeout(120)) - return nil - }, - }) - t.tests = append(t.tests, distTest{ - name: "cgo_life", - heading: "../misc/cgo/life", - fn: func(dt *distTest) error { - t.addCmd(dt, "misc/cgo/life", t.goTest(), t.timeout(120)) - return nil - }, - }) + t.registerHostTest("cgo_stdio", "../misc/cgo/stdio", "misc/cgo/stdio", ".") + t.registerHostTest("cgo_life", "../misc/cgo/life", "misc/cgo/life", ".") fortran := os.Getenv("FC") if fortran == "" { fortran, _ = exec.LookPath("gfortran") @@ -674,8 +656,8 @@ func (t *tester) registerTests() { // recompile the entire standard library. If make.bash ran with // special -gcflags, that's not true. if t.cgoEnabled && gogcflags == "" { - t.registerHostTest("testso", "../misc/cgo/testso", "misc/cgo/testso", ".") - t.registerHostTest("testsovar", "../misc/cgo/testsovar", "misc/cgo/testsovar", ".") + t.registerTest("testso", "../misc/cgo/testso", t.goTest(), t.timeout(600), ".") + t.registerTest("testsovar", "../misc/cgo/testsovar", t.goTest(), t.timeout(600), ".") if t.supportedBuildmode("c-archive") { t.registerHostTest("testcarchive", "../misc/cgo/testcarchive", "misc/cgo/testcarchive", ".") } @@ -683,10 +665,10 @@ func (t *tester) registerTests() { t.registerHostTest("testcshared", "../misc/cgo/testcshared", "misc/cgo/testcshared", ".") } if t.supportedBuildmode("shared") { - t.registerTest("testshared", "../misc/cgo/testshared", t.goTest(), t.timeout(600)) + t.registerTest("testshared", "../misc/cgo/testshared", t.goTest(), t.timeout(600), ".") } if t.supportedBuildmode("plugin") { - t.registerTest("testplugin", "../misc/cgo/testplugin", t.goTest(), t.timeout(600)) + t.registerTest("testplugin", "../misc/cgo/testplugin", t.goTest(), t.timeout(600), ".") } if gohostos == "linux" && goarch == "amd64" { t.registerTest("testasan", "../misc/cgo/testasan", "go", "run", "main.go") @@ -716,11 +698,14 @@ func (t *tester) registerTests() { if goos != "android" && !t.iOS() { // Only start multiple test dir shards on builders, // where they get distributed to multiple machines. - // See issue 20141. + // See issues 20141 and 31834. nShards := 1 if os.Getenv("GO_BUILDER_NAME") != "" { nShards = 10 } + if n, err := strconv.Atoi(os.Getenv("GO_TEST_SHARDS")); err == nil { + nShards = n + } for shard := 0; shard < nShards; shard++ { shard := shard t.tests = append(t.tests, distTest{ @@ -744,6 +729,12 @@ func (t *tester) registerTests() { }, }) } + + // Ensure that the toolchain can bootstrap itself. + // This test adds another ~45s to all.bash if run sequentially, so run it only on the builders. + if os.Getenv("GO_BUILDER_NAME") != "" && goos != "android" && !t.iOS() { + t.registerHostTest("reboot", "../misc/reboot", "misc/reboot", ".") + } } // isRegisteredTestName reports whether a test named testName has already @@ -878,7 +869,8 @@ func (t *tester) out(v string) { func (t *tester) extLink() bool { pair := gohostos + "-" + goarch switch pair { - case "android-arm", + case "aix-ppc64", + "android-arm", "darwin-386", "darwin-amd64", "darwin-arm", "darwin-arm64", "dragonfly-amd64", "freebsd-386", "freebsd-amd64", "freebsd-arm", @@ -910,11 +902,11 @@ func (t *tester) internalLink() bool { // Internally linking cgo is incomplete on some architectures. // https://golang.org/issue/10373 // https://golang.org/issue/14449 - if goarch == "arm64" || goarch == "mips64" || goarch == "mips64le" || goarch == "mips" || goarch == "mipsle" { + if goarch == "mips64" || goarch == "mips64le" || goarch == "mips" || goarch == "mipsle" { return false } - if isAlpineLinux() { - // Issue 18243. + if goos == "aix" { + // linkmode=internal isn't supported. return false } return true @@ -928,7 +920,8 @@ func (t *tester) supportedBuildmode(mode string) bool { return false } switch pair { - case "darwin-386", "darwin-amd64", "darwin-arm", "darwin-arm64", + case "aix-ppc64", + "darwin-386", "darwin-amd64", "darwin-arm", "darwin-arm64", "linux-amd64", "linux-386", "linux-ppc64le", "linux-s390x", "freebsd-amd64", "windows-amd64", "windows-386": @@ -963,7 +956,8 @@ func (t *tester) supportedBuildmode(mode string) bool { return false case "pie": switch pair { - case "linux-386", "linux-amd64", "linux-arm", "linux-arm64", "linux-ppc64le", "linux-s390x", + case "aix/ppc64", + "linux-386", "linux-amd64", "linux-arm", "linux-arm64", "linux-ppc64le", "linux-s390x", "android-amd64", "android-arm", "android-arm64", "android-386": return true case "darwin-amd64": @@ -997,14 +991,16 @@ func (t *tester) runHostTest(dir, pkg string) error { if err := cmd.Run(); err != nil { return err } - return t.dirCmd(dir, "./test.test").Run() + return t.dirCmd(dir, "./test.test", "-test.short").Run() } func (t *tester) cgoTest(dt *distTest) error { - t.addCmd(dt, "misc/cgo/test", t.goTest(), "-ldflags", "-linkmode=auto") + cmd := t.addCmd(dt, "misc/cgo/test", t.goTest()) + cmd.Env = append(os.Environ(), "GOFLAGS=-ldflags=-linkmode=auto") if t.internalLink() { - t.addCmd(dt, "misc/cgo/test", t.goTest(), "-tags=internal", "-ldflags", "-linkmode=internal") + cmd := t.addCmd(dt, "misc/cgo/test", t.goTest(), "-tags=internal") + cmd.Env = append(os.Environ(), "GOFLAGS=-ldflags=-linkmode=internal") } pair := gohostos + "-" + goarch @@ -1016,23 +1012,28 @@ func (t *tester) cgoTest(dt *distTest) error { if !t.extLink() { break } - t.addCmd(dt, "misc/cgo/test", t.goTest(), "-ldflags", "-linkmode=external") - t.addCmd(dt, "misc/cgo/test", t.goTest(), "-ldflags", "-linkmode=external -s") - case "android-arm", + cmd := t.addCmd(dt, "misc/cgo/test", t.goTest()) + cmd.Env = append(os.Environ(), "GOFLAGS=-ldflags=-linkmode=external") + + cmd = t.addCmd(dt, "misc/cgo/test", t.goTest(), "-ldflags", "-linkmode=external -s") + + case "aix-ppc64", + "android-arm", "dragonfly-amd64", "freebsd-386", "freebsd-amd64", "freebsd-arm", "linux-386", "linux-amd64", "linux-arm", "linux-ppc64le", "linux-s390x", - "netbsd-386", "netbsd-amd64": + "netbsd-386", "netbsd-amd64", "linux-arm64": - cmd := t.addCmd(dt, "misc/cgo/test", t.goTest(), "-ldflags", "-linkmode=external") + cmd := t.addCmd(dt, "misc/cgo/test", t.goTest()) + cmd.Env = append(os.Environ(), "GOFLAGS=-ldflags=-linkmode=external") // A -g argument in CGO_CFLAGS should not affect how the test runs. - cmd.Env = append(os.Environ(), "CGO_CFLAGS=-g0") + cmd.Env = append(cmd.Env, "CGO_CFLAGS=-g0") t.addCmd(dt, "misc/cgo/testtls", t.goTest(), "-ldflags", "-linkmode=auto") t.addCmd(dt, "misc/cgo/testtls", t.goTest(), "-ldflags", "-linkmode=external") switch pair { - case "netbsd-386", "netbsd-amd64": + case "aix-ppc64", "netbsd-386", "netbsd-amd64": // no static linking case "freebsd-arm": // -fPIC compiled tls code will use __tls_get_addr instead @@ -1094,6 +1095,13 @@ func (t *tester) runPending(nextTest *distTest) { } else { timelog("start", w.dt.name) w.out, w.err = w.cmd.CombinedOutput() + if w.err != nil { + if isUnsupportedVMASize(w) { + timelog("skip", w.dt.name) + w.out = []byte(fmt.Sprintf("skipped due to unsupported VMA\n")) + w.err = nil + } + } } timelog("end", w.dt.name) w.end <- true @@ -1105,7 +1113,6 @@ func (t *tester) runPending(nextTest *distTest) { var last *distTest for ended < len(worklist) { for started < len(worklist) && started-ended < maxbg { - //println("start", started) w := worklist[started] started++ w.start <- !t.failed || t.keepGoing @@ -1126,7 +1133,6 @@ func (t *tester) runPending(nextTest *distTest) { if vflag > 1 { errprintf("%s\n", strings.Join(w.cmd.Args, " ")) } - //println("wait", ended) ended++ <-w.end os.Stdout.Write(w.out) @@ -1273,9 +1279,6 @@ func (t *tester) runFlag(rx string) string { if t.compileOnly { return "-run=^$" } - if rx == "" && goos == "js" && goarch == "wasm" { - return "-run=^Test" // exclude examples; Issue 25913 - } return "-run=" + rx } @@ -1374,9 +1377,44 @@ func (t *tester) packageHasBenchmarks(pkg string) bool { return false } +// makeGOROOTUnwritable makes all $GOROOT files & directories non-writable to +// check that no tests accidentally write to $GOROOT. +func (t *tester) makeGOROOTUnwritable() { + if os.Getenv("GO_BUILDER_NAME") == "" { + panic("not a builder") + } + if os.Getenv("GOROOT") == "" { + panic("GOROOT not set") + } + err := filepath.Walk(os.Getenv("GOROOT"), func(name string, fi os.FileInfo, err error) error { + if err != nil { + return err + } + if !fi.Mode().IsRegular() && !fi.IsDir() { + return nil + } + mode := fi.Mode() + newMode := mode & ^os.FileMode(0222) + if newMode != mode { + if err := os.Chmod(name, newMode); err != nil { + return err + } + } + return nil + }) + if err != nil { + log.Fatalf("making builder's files read-only: %v", err) + } +} + // raceDetectorSupported is a copy of the function // cmd/internal/sys.RaceDetectorSupported, which can't be used here // because cmd/dist has to be buildable by Go 1.4. +// The race detector only supports 48-bit VMA on arm64. But we don't have +// a good solution to check VMA size(See https://golang.org/issue/29948) +// raceDetectorSupported will always return true for arm64. But race +// detector tests may abort on non 48-bit VMA configuration, the tests +// will be marked as "skipped" in this case. func raceDetectorSupported(goos, goarch string) bool { switch goos { case "linux": @@ -1398,3 +1436,11 @@ func mSanSupported(goos, goarch string) bool { return false } } + +// isUnsupportedVMASize reports whether the failure is caused by an unsupported +// VMA for the race detector (for example, running the race detector on an +// arm64 machine configured with 39-bit VMA) +func isUnsupportedVMASize(w *work) bool { + unsupportedVMA := []byte("unsupported VMA range") + return w.dt.name == "race" && bytes.Contains(w.out, unsupportedVMA) +} diff --git a/src/cmd/dist/util.go b/src/cmd/dist/util.go index 996e058b31..e6a3887a72 100644 --- a/src/cmd/dist/util.go +++ b/src/cmd/dist/util.go @@ -397,10 +397,6 @@ func xgetgoarm() string { // Conservative default for cross-compilation. return "5" } - if goos == "freebsd" { - // FreeBSD has broken VFP support. - return "5" - } // Try to exec ourselves in a mode to detect VFP support. // Seeing how far it gets determines which instructions failed. diff --git a/src/cmd/doc/doc_test.go b/src/cmd/doc/doc_test.go index 0761c6ddb3..22468db1ff 100644 --- a/src/cmd/doc/doc_test.go +++ b/src/cmd/doc/doc_test.go @@ -496,6 +496,7 @@ var tests = []test{ `func ReturnExported\(\) ExportedType`, `func \(ExportedType\) ExportedMethod\(a int\) bool`, `Comment about exported method.`, + `func \(ExportedType\) Uncommented\(a int\) bool\n\n`, // Ensure line gap after method with no comment }, []string{ `unexportedType`, @@ -720,6 +721,37 @@ var tests = []test{ []string{"Foo struct"}, nil, }, + { + "formatted doc on function", + []string{p, "ExportedFormattedDoc"}, + []string{ + `func ExportedFormattedDoc\(a int\) bool`, + ` Comment about exported function with formatting\. + + Example + + fmt\.Println\(FormattedDoc\(\)\) + + Text after pre-formatted block\.`, + }, + nil, + }, + { + "formatted doc on type field", + []string{p, "ExportedFormattedType.ExportedField"}, + []string{ + `type ExportedFormattedType struct`, + ` // Comment before exported field with formatting\. + //[ ] + // Example + //[ ] + // a\.ExportedField = 123 + //[ ] + // Text after pre-formatted block\.`, + `ExportedField int`, + }, + nil, + }, } func TestDoc(t *testing.T) { diff --git a/src/cmd/doc/main.go b/src/cmd/doc/main.go index ec15ec5826..9e3ad0c0e7 100644 --- a/src/cmd/doc/main.go +++ b/src/cmd/doc/main.go @@ -42,14 +42,13 @@ import ( "flag" "fmt" "go/build" + "go/token" "io" "log" "os" "path" "path/filepath" "strings" - "unicode" - "unicode/utf8" ) var ( @@ -234,7 +233,7 @@ func parseArgs(args []string) (pkg *build.Package, path, symbol string, more boo // case letter, it can only be a symbol in the current directory. // Kills the problem caused by case-insensitive file systems // matching an upper case name as a package name. - if isUpper(arg) { + if token.IsExported(arg) { pkg, err := build.ImportDir(".", build.ImportComment) if err == nil { return pkg, "", arg, false @@ -333,47 +332,31 @@ func parseSymbol(str string) (symbol, method string) { case 1: case 2: method = elem[1] - isIdentifier(method) + if !token.IsIdentifier(method) { + log.Fatalf("invalid identifier %q", method) + } default: log.Printf("too many periods in symbol specification") usage() } symbol = elem[0] - isIdentifier(symbol) + if !token.IsIdentifier(symbol) { + log.Fatalf("invalid identifier %q", symbol) + } return } -// isIdentifier checks that the name is valid Go identifier, and -// logs and exits if it is not. -func isIdentifier(name string) { - if len(name) == 0 { - log.Fatal("empty symbol") - } - for i, ch := range name { - if unicode.IsLetter(ch) || ch == '_' || i > 0 && unicode.IsDigit(ch) { - continue - } - log.Fatalf("invalid identifier %q", name) - } -} - // isExported reports whether the name is an exported identifier. // If the unexported flag (-u) is true, isExported returns true because // it means that we treat the name as if it is exported. func isExported(name string) bool { - return unexported || isUpper(name) -} - -// isUpper reports whether the name starts with an upper case letter. -func isUpper(name string) bool { - ch, _ := utf8.DecodeRuneInString(name) - return unicode.IsUpper(ch) + return unexported || token.IsExported(name) } // findNextPackage returns the next full file name path that matches the // (perhaps partial) package path pkg. The boolean reports if any match was found. func findNextPackage(pkg string) (string, bool) { - if pkg == "" || isUpper(pkg) { // Upper case symbol cannot be a package name. + if pkg == "" || token.IsExported(pkg) { // Upper case symbol cannot be a package name. return "", false } if filepath.IsAbs(pkg) { diff --git a/src/cmd/doc/pkg.go b/src/cmd/doc/pkg.go index 7c4e00767d..12b76c2ad0 100644 --- a/src/cmd/doc/pkg.go +++ b/src/cmd/doc/pkg.go @@ -5,6 +5,7 @@ package main import ( + "bufio" "bytes" "fmt" "go/ast" @@ -221,7 +222,7 @@ func (pkg *Package) emit(comment string, node ast.Node) { } if comment != "" && !showSrc { pkg.newlines(1) - doc.ToText(&pkg.buf, comment, " ", indent, indentedWidth) + doc.ToText(&pkg.buf, comment, indent, indent+indent, indentedWidth) pkg.newlines(2) // Blank line after comment to separate from next item. } else { pkg.newlines(1) @@ -808,6 +809,9 @@ func (pkg *Package) typeDoc(typ *doc.Type) { for _, fun := range funcs { if isExported(fun.Name) { pkg.emit(fun.Doc, fun.Decl) + if fun.Doc == "" { + pkg.newlines(2) + } } } } else { @@ -1002,8 +1006,13 @@ func (pkg *Package) printFieldDoc(symbol, fieldName string) bool { pkg.Printf("type %s struct {\n", typ.Name) } if field.Doc != nil { - for _, comment := range field.Doc.List { - doc.ToText(&pkg.buf, comment.Text, indent, indent, indentedWidth) + // To present indented blocks in comments correctly, process the comment as + // a unit before adding the leading // to each line. + docBuf := bytes.Buffer{} + doc.ToText(&docBuf, field.Doc.Text(), "", indent, indentedWidth) + scanner := bufio.NewScanner(&docBuf) + for scanner.Scan() { + fmt.Fprintf(&pkg.buf, "%s// %s\n", indent, scanner.Bytes()) } } s := pkg.oneLineNode(field.Type) diff --git a/src/cmd/doc/testdata/pkg.go b/src/cmd/doc/testdata/pkg.go index 50105b5fcc..759b7723a6 100644 --- a/src/cmd/doc/testdata/pkg.go +++ b/src/cmd/doc/testdata/pkg.go @@ -80,6 +80,10 @@ func (ExportedType) ExportedMethod(a int) bool { return true != true } +func (ExportedType) Uncommented(a int) bool { + return true != true +} + // Comment about unexported method. func (ExportedType) unexportedMethod(a int) bool { return true @@ -203,3 +207,25 @@ const ( Duplicate = iota duplicate ) + +// Comment about exported function with formatting. +// +// Example +// +// fmt.Println(FormattedDoc()) +// +// Text after pre-formatted block. +func ExportedFormattedDoc(a int) bool { + return true +} + +type ExportedFormattedType struct { + // Comment before exported field with formatting. + // + // Example + // + // a.ExportedField = 123 + // + // Text after pre-formatted block. + ExportedField int +} diff --git a/src/cmd/fix/main_test.go b/src/cmd/fix/main_test.go index c2ace28caa..8868140ade 100644 --- a/src/cmd/fix/main_test.go +++ b/src/cmd/fix/main_test.go @@ -37,18 +37,18 @@ func fnop(*ast.File) bool { return false } func parseFixPrint(t *testing.T, fn func(*ast.File) bool, desc, in string, mustBeGofmt bool) (out string, fixed, ok bool) { file, err := parser.ParseFile(fset, desc, in, parserMode) if err != nil { - t.Errorf("%s: parsing: %v", desc, err) + t.Errorf("parsing: %v", err) return } outb, err := gofmtFile(file) if err != nil { - t.Errorf("%s: printing: %v", desc, err) + t.Errorf("printing: %v", err) return } if s := string(outb); in != s && mustBeGofmt { - t.Errorf("%s: not gofmt-formatted.\n--- %s\n%s\n--- %s | gofmt\n%s", - desc, desc, in, desc, s) + t.Errorf("not gofmt-formatted.\n--- %s\n%s\n--- %s | gofmt\n%s", + desc, in, desc, s) tdiff(t, in, s) return } @@ -65,7 +65,7 @@ func parseFixPrint(t *testing.T, fn func(*ast.File) bool, desc, in string, mustB outb, err = gofmtFile(file) if err != nil { - t.Errorf("%s: printing: %v", desc, err) + t.Errorf("printing: %v", err) return } @@ -74,48 +74,51 @@ func parseFixPrint(t *testing.T, fn func(*ast.File) bool, desc, in string, mustB func TestRewrite(t *testing.T) { for _, tt := range testCases { - // Apply fix: should get tt.Out. - out, fixed, ok := parseFixPrint(t, tt.Fn, tt.Name, tt.In, true) - if !ok { - continue - } - - // reformat to get printing right - out, _, ok = parseFixPrint(t, fnop, tt.Name, out, false) - if !ok { - continue - } - - if out != tt.Out { - t.Errorf("%s: incorrect output.\n", tt.Name) - if !strings.HasPrefix(tt.Name, "testdata/") { - t.Errorf("--- have\n%s\n--- want\n%s", out, tt.Out) + t.Run(tt.Name, func(t *testing.T) { + t.Parallel() + // Apply fix: should get tt.Out. + out, fixed, ok := parseFixPrint(t, tt.Fn, tt.Name, tt.In, true) + if !ok { + return } - tdiff(t, out, tt.Out) - continue - } - if changed := out != tt.In; changed != fixed { - t.Errorf("%s: changed=%v != fixed=%v", tt.Name, changed, fixed) - continue - } + // reformat to get printing right + out, _, ok = parseFixPrint(t, fnop, tt.Name, out, false) + if !ok { + return + } - // Should not change if run again. - out2, fixed2, ok := parseFixPrint(t, tt.Fn, tt.Name+" output", out, true) - if !ok { - continue - } + if out != tt.Out { + t.Errorf("incorrect output.\n") + if !strings.HasPrefix(tt.Name, "testdata/") { + t.Errorf("--- have\n%s\n--- want\n%s", out, tt.Out) + } + tdiff(t, out, tt.Out) + return + } - if fixed2 { - t.Errorf("%s: applied fixes during second round", tt.Name) - continue - } + if changed := out != tt.In; changed != fixed { + t.Errorf("changed=%v != fixed=%v", changed, fixed) + return + } - if out2 != out { - t.Errorf("%s: changed output after second round of fixes.\n--- output after first round\n%s\n--- output after second round\n%s", - tt.Name, out, out2) - tdiff(t, out, out2) - } + // Should not change if run again. + out2, fixed2, ok := parseFixPrint(t, tt.Fn, tt.Name+" output", out, true) + if !ok { + return + } + + if fixed2 { + t.Errorf("applied fixes during second round") + return + } + + if out2 != out { + t.Errorf("changed output after second round of fixes.\n--- output after first round\n%s\n--- output after second round\n%s", + out, out2) + tdiff(t, out, out2) + } + }) } } diff --git a/src/cmd/go.mod b/src/cmd/go.mod new file mode 100644 index 0000000000..407f12b3e0 --- /dev/null +++ b/src/cmd/go.mod @@ -0,0 +1,12 @@ +module cmd + +go 1.12 + +require ( + github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57 + github.com/ianlancetaylor/demangle v0.0.0-20180524225900-fc6590592b44 // indirect + golang.org/x/arch v0.0.0-20181203225421-5a4828bb7045 + golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c + golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82 // indirect + golang.org/x/tools v0.0.0-20190514135123-4789ca9922f0 +) diff --git a/src/cmd/go.sum b/src/cmd/go.sum new file mode 100644 index 0000000000..92886bba7b --- /dev/null +++ b/src/cmd/go.sum @@ -0,0 +1,23 @@ +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57 h1:eqyIo2HjKhKe/mJzTG8n4VqvLXIOEG+SLdDqX7xGtkY= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/ianlancetaylor/demangle v0.0.0-20180524225900-fc6590592b44 h1:pKqc8lAAA6rcwpvsephnRuZp4VHbfszZRClvqAE6Sq8= +github.com/ianlancetaylor/demangle v0.0.0-20180524225900-fc6590592b44/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +golang.org/x/arch v0.0.0-20181203225421-5a4828bb7045 h1:Pn8fQdvx+z1avAi7fdM2kRYWQNxGlavNDSyzrQg2SsU= +golang.org/x/arch v0.0.0-20181203225421-5a4828bb7045/go.mod h1:cYlCBUl1MsqxdiKgmc4uh7TxZfWSFLOGSRR090WDxt8= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c h1:Vj5n4GlwjmQteupaxJ9+0FNOmBrHfq7vN4btdGoDZgI= +golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82 h1:vsphBvatvfbhlb4PO1BYSr9dzugGxJ/SQHoNufZJq1w= +golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/tools v0.0.0-20190509153222-73554e0f7805 h1:1ufBXAsTpUhSmmPXEEs5PrGQSfnBhsjAd2SmVhp9xrY= +golang.org/x/tools v0.0.0-20190509153222-73554e0f7805/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190510144052-35884eef200b h1:4muk7BhMes67ZgDeK3n4Jvi+FvNDRZzh6ZRqIXZNYwQ= +golang.org/x/tools v0.0.0-20190510144052-35884eef200b/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190513233021-7d589f28aaf4 h1:sIGsLZaMtLBc5sLK7s2xtr7VaKk8h31mrJyHwEZq2WQ= +golang.org/x/tools v0.0.0-20190513233021-7d589f28aaf4/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190514135123-4789ca9922f0 h1:0Bz67IMuNMofIoO/F+rX8oPltlfrAC5HU68DEyynMQg= +golang.org/x/tools v0.0.0-20190514135123-4789ca9922f0/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= diff --git a/src/cmd/go/alldocs.go b/src/cmd/go/alldocs.go index 186f42156a..b774ac2da7 100644 --- a/src/cmd/go/alldocs.go +++ b/src/cmd/go/alldocs.go @@ -21,7 +21,7 @@ // fix update packages to use new APIs // fmt gofmt (reformat) package sources // generate generate Go files by processing source -// get download and install packages and dependencies +// get add dependencies to current module and install them // install compile and install packages and dependencies // list list packages or modules // mod module maintenance @@ -48,6 +48,7 @@ // modules modules, module versions, and more // module-get module-aware go get // packages package lists and patterns +// module-auth module authentication using go.sum // testflag testing flags // testfunc testing functions // @@ -73,8 +74,8 @@ // Build compiles the packages named by the import paths, // along with their dependencies, but it does not install the results. // -// If the arguments to build are a list of .go files, build treats -// them as a list of source files specifying a single package. +// If the arguments to build are a list of .go files from a single directory, +// build treats them as a list of source files specifying a single package. // // When compiling a single main package, build writes // the resulting executable to an output file named after @@ -88,10 +89,10 @@ // // When compiling packages, build ignores files that end in '_test.go'. // -// The -o flag, only allowed when compiling a single package, -// forces build to write the resulting executable or object -// to the named output file, instead of the default behavior described -// in the last two paragraphs. +// The -o flag forces build to write the resulting executable or object +// to the named output file or directory, instead of the default behavior described +// in the last two paragraphs. If the named output is a directory that exists, +// then any resulting executables will be written to that directory. // // The -i flag installs the packages that are dependencies of the target. // @@ -150,10 +151,18 @@ // install and load all packages from dir instead of the usual locations. // For example, when building with a non-standard configuration, // use -pkgdir to keep generated packages in a separate location. -// -tags 'tag list' -// a space-separated list of build tags to consider satisfied during the +// -tags tag,list +// a comma-separated list of build tags to consider satisfied during the // build. For more information about build tags, see the description of // build constraints in the documentation for the go/build package. +// (Earlier versions of Go used a space-separated list, and that form +// is deprecated but still recognized.) +// -trimpath +// remove all file system paths from the resulting executable. +// Instead of absolute file system paths, the recorded file names +// will begin with either "go" (for the standard library), +// or a module path@version (when using modules), +// or a plain import path (when using GOPATH). // -toolexec 'cmd args' // a program to use to invoke toolchain programs like vet and asm. // For example, instead of running asm, the go command will run @@ -201,7 +210,8 @@ // so go clean is mainly concerned with object files left by other // tools or by manual invocations of go build. // -// Specifically, clean removes the following files from each of the +// If a package argument is given or the -i or -r flag is set, +// clean removes the following files from each of the // source directories corresponding to the import paths: // // _obj/ old object directory, left from Makefiles @@ -366,7 +376,7 @@ // // Usage: // -// go env [-json] [var ...] +// go env [-json] [-u] [-w] [var ...] // // Env prints Go environment information. // @@ -378,6 +388,14 @@ // The -json flag prints the environment in JSON format // instead of as a shell script. // +// The -u flag requires one or more arguments and unsets +// the default setting for the named environment variables, +// if one has been set with 'go env -w'. +// +// The -w flag requires one or more arguments of the +// form NAME=VALUE and changes the default settings +// of the named environment variables to the given values. +// // For more about environment variables, see 'go help environment'. // // @@ -503,11 +521,13 @@ // "go tool foo". // // Generate processes packages in the order given on the command line, -// one at a time. If the command line lists .go files, they are treated -// as a single package. Within a package, generate processes the +// one at a time. If the command line lists .go files from a single directory, +// they are treated as a single package. Within a package, generate processes the // source files in a package in file name order, one at a time. Within // a source file, generate runs generators in the order they appear -// in the file, one at a time. +// in the file, one at a time. The go generate tool also sets the build +// tag "generate" so that files may be examined by go generate but ignored +// during build. // // If any generator returns an error exit status, "go generate" skips // all further processing for that package. @@ -533,67 +553,118 @@ // For more about specifying packages, see 'go help packages'. // // -// Download and install packages and dependencies +// Add dependencies to current module and install them // // Usage: // -// go get [-d] [-f] [-t] [-u] [-v] [-fix] [-insecure] [build flags] [packages] +// go get [-d] [-m] [-u] [-v] [-insecure] [build flags] [packages] // -// Get downloads the packages named by the import paths, along with their -// dependencies. It then installs the named packages, like 'go install'. +// Get resolves and adds dependencies to the current development module +// and then builds and installs them. // -// The -d flag instructs get to stop after downloading the packages; that is, -// it instructs get not to install the packages. +// The first step is to resolve which dependencies to add. // -// The -f flag, valid only when -u is set, forces get -u not to verify that -// each package has been checked out from the source control repository -// implied by its import path. This can be useful if the source is a local fork -// of the original. +// For each named package or package pattern, get must decide which version of +// the corresponding module to use. By default, get chooses the latest tagged +// release version, such as v0.4.5 or v1.2.3. If there are no tagged release +// versions, get chooses the latest tagged pre-release version, such as +// v0.0.1-pre1. If there are no tagged versions at all, get chooses the latest +// known commit. // -// The -fix flag instructs get to run the fix tool on the downloaded packages -// before resolving dependencies or building the code. +// This default version selection can be overridden by adding an @version +// suffix to the package argument, as in 'go get golang.org/x/text@v0.3.0'. +// For modules stored in source control repositories, the version suffix can +// also be a commit hash, branch identifier, or other syntax known to the +// source control system, as in 'go get golang.org/x/text@master'. +// +// If a module under consideration is already a dependency of the current +// development module, then get will update the required version. +// Specifying a version earlier than the current required version is valid and +// downgrades the dependency. The version suffix @none indicates that the +// dependency should be removed entirely, downgrading or removing modules +// depending on it as needed. +// +// The version suffix @latest explicitly requests the latest minor release of the +// given path. +// +// The suffix @patch requests the latest patch release: if the path is already in +// the build list, the selected version will have the same minor version. +// If the path is not already in the build list, @patch is equivalent to @latest. +// +// Although get defaults to using the latest version of the module containing +// a named package, it does not use the latest version of that module's +// dependencies. Instead it prefers to use the specific dependency versions +// requested by that module. For example, if the latest A requires module +// B v1.2.3, while B v1.2.4 and v1.3.1 are also available, then 'go get A' +// will use the latest A but then use B v1.2.3, as requested by A. (If there +// are competing requirements for a particular module, then 'go get' resolves +// those requirements by taking the maximum requested version.) +// +// The -u flag instructs get to update dependencies to use newer minor or +// patch releases when available. Continuing the previous example, +// 'go get -u A' will use the latest A with B v1.3.1 (not B v1.2.3). +// +// The -u=patch flag (not -u patch) also instructs get to update dependencies, +// but changes the default to select patch releases. +// Continuing the previous example, +// 'go get -u=patch A@latest' will use the latest A with B v1.2.4 (not B v1.2.3), +// while 'go get -u=patch A' will use a patch release of A instead. +// +// In general, adding a new dependency may require upgrading +// existing dependencies to keep a working build, and 'go get' does +// this automatically. Similarly, downgrading one dependency may +// require downgrading other dependencies, and 'go get' does +// this automatically as well. +// +// The -m flag instructs get to stop here, after resolving, upgrading, +// and downgrading modules and updating go.mod. When using -m, +// each specified package path must be a module path as well, +// not the import path of a package below the module root. +// +// When the -m and -u flags are used together, 'go get' will upgrade +// modules that provide packages depended on by the modules named on +// the command line. For example, 'go get -u -m A' will upgrade A and +// any module providing packages imported by packages in A. +// 'go get -u -m' will upgrade modules that provided packages needed +// by the main module. // // The -insecure flag permits fetching from repositories and resolving // custom domains using insecure schemes such as HTTP. Use with caution. // -// The -t flag instructs get to also download the packages required to build -// the tests for the specified packages. +// The second step is to download (if needed), build, and install +// the named packages. // -// The -u flag instructs get to use the network to update the named packages -// and their dependencies. By default, get uses the network to check out -// missing packages but does not use it to look for updates to existing packages. +// If an argument names a module but not a package (because there is no +// Go source code in the module's root directory), then the install step +// is skipped for that argument, instead of causing a build failure. +// For example 'go get golang.org/x/perf' succeeds even though there +// is no code corresponding to that import path. // -// The -v flag enables verbose progress and debug output. +// Note that package patterns are allowed and are expanded after resolving +// the module versions. For example, 'go get golang.org/x/perf/cmd/...' +// adds the latest golang.org/x/perf and then installs the commands in that +// latest version. // -// Get also accepts build flags to control the installation. See 'go help build'. +// The -d flag instructs get to download the source code needed to build +// the named packages, including downloading necessary dependencies, +// but not to build and install them. // -// When checking out a new package, get creates the target directory -// GOPATH/src/. If the GOPATH contains multiple entries, -// get uses the first one. For more details see: 'go help gopath'. +// With no package arguments, 'go get' applies to Go package in the +// current directory, if any. In particular, 'go get -u' and +// 'go get -u=patch' update all the dependencies of that package. +// With no package arguments and also without -u, 'go get' is not much more +// than 'go install', and 'go get -d' not much more than 'go list'. // -// When checking out or updating a package, get looks for a branch or tag -// that matches the locally installed version of Go. The most important -// rule is that if the local installation is running version "go1", get -// searches for a branch or tag named "go1". If no such version exists -// it retrieves the default branch of the package. -// -// When go get checks out or updates a Git repository, -// it also updates any git submodules referenced by the repository. -// -// Get never checks out or updates code stored in vendor directories. +// For more about modules, see 'go help modules'. // // For more about specifying packages, see 'go help packages'. // -// For more about how 'go get' finds source code to -// download, see 'go help importpath'. +// This text describes the behavior of get using modules to manage source +// code and dependencies. If instead the go command is running in GOPATH +// mode, the details of get's flags and effects change, as does 'go help get'. +// See 'go help modules' and 'go help gopath-get'. // -// This text describes the behavior of get when using GOPATH -// to manage source code and dependencies. -// If instead the go command is running in module-aware mode, -// the details of get's flags and effects change, as does 'go help get'. -// See 'go help modules' and 'go help module-get'. -// -// See also: go build, go install, go clean. +// See also: go build, go install, go clean, go mod. // // // Compile and install packages and dependencies @@ -648,7 +719,7 @@ // StaleReason string // explanation for Stale==true // Root string // Go root or Go path dir containing this package // ConflictDir string // this directory shadows Dir in $GOPATH -// BinaryOnly bool // binary-only package: cannot be recompiled from sources +// BinaryOnly bool // binary-only package (no longer supported) // ForTest string // package is only for use in named test // Export string // file containing export data (when using -export) // Module *Module // info about package's containing module, if any (can be nil) @@ -790,17 +861,18 @@ // applied to a Go struct, but now a Module struct: // // type Module struct { -// Path string // module path -// Version string // module version -// Versions []string // available module versions (with -versions) -// Replace *Module // replaced by this module -// Time *time.Time // time version was created -// Update *Module // available update, if any (with -u) -// Main bool // is this the main module? -// Indirect bool // is this module only an indirect dependency of main module? -// Dir string // directory holding files for this module, if any -// GoMod string // path to go.mod file for this module, if any -// Error *ModuleError // error loading module +// Path string // module path +// Version string // module version +// Versions []string // available module versions (with -versions) +// Replace *Module // replaced by this module +// Time *time.Time // time version was created +// Update *Module // available update, if any (with -u) +// Main bool // is this the main module? +// Indirect bool // is this module only an indirect dependency of main module? +// Dir string // directory holding files for this module, if any +// GoMod string // path to go.mod file for this module, if any +// GoVersion string // go version used in module +// Error *ModuleError // error loading module // } // // type ModuleError struct { @@ -1129,7 +1201,7 @@ // go run [build flags] [-exec xprog] package [arguments...] // // Run compiles and runs the named main Go package. -// Typically the package is specified as a list of .go source files, +// Typically the package is specified as a list of .go source files from a single directory, // but it may also be an import path, file system path, or pattern // matching a single known package, as in 'go run .' or 'go run my/cmd'. // @@ -1213,7 +1285,10 @@ // 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. +// 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 @@ -1293,9 +1368,27 @@ // // Usage: // -// go version +// go version [-m] [-v] [file ...] // -// Version prints the Go version, as reported by runtime.Version. +// Version prints the build information for Go executables. +// +// Go version reports the Go version used to build each of the named +// executable files. +// +// If no files are named on the command line, go version prints its own +// version information. +// +// If a directory is named, go version walks that directory, recursively, +// looking for recognized Go binaries and reporting their versions. +// By default, go version does not report unrecognized files found +// during a directory scan. The -v flag causes it to report unrecognized files. +// +// The -m flag causes go version to print each executable's embedded +// module version information, when available. In the output, the module +// information consists of multiple lines following the version line, each +// indented by a leading tab character. +// +// See also: go doc runtime/debug.BuildInfo. // // // Report likely mistakes in packages @@ -1373,6 +1466,9 @@ // Build the listed main packages, plus all packages that they // import, into a Go plugin. Packages not named main are ignored. // +// On AIX, when linking a C program that uses a Go archive built with +// -buildmode=c-archive, you must pass -Wl,-bnoobjreorder to the C compiler. +// // // Calling between Go and C // @@ -1434,10 +1530,17 @@ // // Environment variables // -// The go command, and the tools it invokes, examine a few different -// environment variables. For many of these, you can see the default -// value of on your system by running 'go env NAME', where NAME is the -// name of the variable. +// The go command and the tools it invokes consult environment variables +// for configuration. If an environment variable is unset, the go command +// uses a sensible default setting. To see the effective setting of the +// variable , run 'go env '. To change the default setting, +// run 'go env -w ='. Defaults changed using 'go env -w' +// are recorded in a Go environment configuration file stored in the +// per-user configuration directory, as reported by os.UserConfigDir. +// The location of the configuration file can be changed by setting +// the environment variable GOENV, and 'go env GOENV' prints the +// effective location, but 'go env -w' cannot change the default location. +// See 'go help env' for details. // // General-purpose environment variables: // @@ -1451,10 +1554,15 @@ // GOCACHE // The directory where the go command will store cached // information for reuse in future builds. +// GOENV +// The location of the Go environment configuration file. +// Cannot be set using 'go env -w'. // GOFLAGS // A space-separated list of -flag=value settings to apply // to go commands by default, when the given flag is known by -// the current command. Flags listed on the command-line +// the current command. Each entry must be a standalone flag. +// Because the entries are space-separated, flag values must +// not contain spaces. Flags listed on the command line // are applied after this list and therefore override it. // GOOS // The operating system for which to compile code. @@ -1463,21 +1571,18 @@ // For more details see: 'go help gopath'. // GOPROXY // URL of Go module proxy. See 'go help goproxy'. -// GORACE -// Options for the race detector. -// See https://golang.org/doc/articles/race_detector.html. // GOROOT // The root of the go tree. // GOTMPDIR // The directory where the go command will write // temporary source files, packages, and binaries. // -// Each entry in the GOFLAGS list must be a standalone flag. -// Because the entries are space-separated, flag values must -// not contain spaces. -// // Environment variables for use with cgo: // +// AR +// The command to use to manipulate library archives when +// building with the gccgo compiler. +// The default is 'ar'. // CC // The command to use to compile C code. // CGO_ENABLED @@ -1507,12 +1612,10 @@ // but for the linker. // CXX // The command to use to compile C++ code. +// FC +// The command to use to compile Fortran code. // PKG_CONFIG // Path to pkg-config tool. -// AR -// The command to use to manipulate library archives when -// building with the gccgo compiler. -// The default is 'ar'. // // Architecture-specific environment variables: // @@ -1528,6 +1631,9 @@ // GOMIPS64 // For GOARCH=mips64{,le}, whether to use floating point instructions. // Valid values are hardfloat (default), softfloat. +// GOWASM +// For GOARCH=wasm, comma-separated list of experimental WebAssembly features to use. +// Valid values are satconv, signext. // // Special-purpose environment variables: // @@ -1544,14 +1650,18 @@ // when using -linkmode=auto with code that uses cgo. // Set to 0 to disable external linking mode, 1 to enable it. // GIT_ALLOW_PROTOCOL -// Defined by Git. A colon-separated list of schemes that are allowed to be used -// with git fetch/clone. If set, any scheme not explicitly mentioned will be -// considered insecure by 'go get'. +// Defined by Git. A colon-separated list of schemes that are allowed +// to be used with git fetch/clone. If set, any scheme not explicitly +// mentioned will be considered insecure by 'go get'. +// Because the variable is defined by Git, the default value cannot +// be set using 'go env -w'. // // Additional information available from 'go env' but not read from the environment: // // GOEXE // The executable file name suffix (".exe" on Windows, "" on other systems). +// GOGCCFLAGS +// A space-separated list of arguments supplied to the CC command. // GOHOSTARCH // The architecture (GOARCH) of the Go toolchain binaries. // GOHOSTOS @@ -1598,15 +1708,6 @@ // line comment. See the go/build package documentation for // more details. // -// Through the Go 1.12 release, non-test Go source files can also include -// a //go:binary-only-package comment, indicating that the package -// sources are included for documentation only and must not be used to -// build the package binary. This enables distribution of Go packages in -// their compiled form alone. Even binary-only packages require accurate -// import blocks listing required dependencies, so that those -// dependencies can be supplied when linking the resulting command. -// Note that this feature is scheduled to be removed after the Go 1.12 release. -// // // The go.mod file // @@ -1845,6 +1946,72 @@ // See https://golang.org/s/go15vendor for details. // // +// Legacy GOPATH go get +// +// The 'go get' command changes behavior depending on whether the +// go command is running in module-aware mode or legacy GOPATH mode. +// This help text, accessible as 'go help gopath-get' even in module-aware mode, +// describes 'go get' as it operates in legacy GOPATH mode. +// +// Usage: go get [-d] [-f] [-t] [-u] [-v] [-fix] [-insecure] [build flags] [packages] +// +// Get downloads the packages named by the import paths, along with their +// dependencies. It then installs the named packages, like 'go install'. +// +// The -d flag instructs get to stop after downloading the packages; that is, +// it instructs get not to install the packages. +// +// The -f flag, valid only when -u is set, forces get -u not to verify that +// each package has been checked out from the source control repository +// implied by its import path. This can be useful if the source is a local fork +// of the original. +// +// The -fix flag instructs get to run the fix tool on the downloaded packages +// before resolving dependencies or building the code. +// +// The -insecure flag permits fetching from repositories and resolving +// custom domains using insecure schemes such as HTTP. Use with caution. +// +// The -t flag instructs get to also download the packages required to build +// the tests for the specified packages. +// +// The -u flag instructs get to use the network to update the named packages +// and their dependencies. By default, get uses the network to check out +// missing packages but does not use it to look for updates to existing packages. +// +// The -v flag enables verbose progress and debug output. +// +// Get also accepts build flags to control the installation. See 'go help build'. +// +// When checking out a new package, get creates the target directory +// GOPATH/src/. If the GOPATH contains multiple entries, +// get uses the first one. For more details see: 'go help gopath'. +// +// When checking out or updating a package, get looks for a branch or tag +// that matches the locally installed version of Go. The most important +// rule is that if the local installation is running version "go1", get +// searches for a branch or tag named "go1". If no such version exists +// it retrieves the default branch of the package. +// +// When go get checks out or updates a Git repository, +// it also updates any git submodules referenced by the repository. +// +// Get never checks out or updates code stored in vendor directories. +// +// For more about specifying packages, see 'go help packages'. +// +// For more about how 'go get' finds source code to +// download, see 'go help importpath'. +// +// This text describes the behavior of get when using GOPATH +// to manage source code and dependencies. +// If instead the go command is running in module-aware mode, +// the details of get's flags and effects change, as does 'go help get'. +// See 'go help modules' and 'go help module-get'. +// +// See also: go build, go install, go clean. +// +// // Module proxy protocol // // The go command by default downloads modules from version control systems @@ -1852,8 +2019,13 @@ // further control over the download source. If GOPROXY is unset, is the empty string, // or is the string "direct", downloads use the default direct connection to version // control systems. Setting GOPROXY to "off" disallows downloading modules from -// any source. Otherwise, GOPROXY is expected to be the URL of a module proxy, -// in which case the go command will fetch all modules from that proxy. +// any source. Otherwise, GOPROXY is expected to be a comma-separated list of +// the URLs of module proxies, in which case the go command will fetch modules +// from those proxies. For each request, the go command tries each proxy in sequence, +// only moving to the next if the current proxy returns a 404 or 410 HTTP response. +// The string "direct" may appear in the proxy list, to cause a direct connection to +// be attempted at that point in the search. +// // No matter the source of the modules, downloaded modules must match existing // entries in go.sum (see 'go help modules' for discussion of verification). // @@ -2104,34 +2276,25 @@ // Modules replace the old GOPATH-based approach to specifying // which source files are used in a given build. // -// Preliminary module support +// Module support // -// Go 1.11 includes preliminary support for Go modules, -// including a new module-aware 'go get' command. -// We intend to keep revising this support, while preserving compatibility, -// until it can be declared official (no longer preliminary), -// and then at a later point we may remove support for work -// in GOPATH and the old 'go get' command. +// Go 1.13 includes official support for Go modules, +// including a module-aware 'go get' command. +// Module-aware mode is active by default. // -// The quickest way to take advantage of the new Go 1.11 module support -// is to check out your repository into a directory outside GOPATH/src, -// create a go.mod file (described in the next section) there, and run -// go commands from within that file tree. -// -// For more fine-grained control, the module support in Go 1.11 respects +// For more fine-grained control, Go 1.13 continues to respect // a temporary environment variable, GO111MODULE, which can be set to one -// of three string values: off, on, or auto (the default). -// If GO111MODULE=off, then the go command never uses the -// new module support. Instead it looks in vendor directories and GOPATH +// of three string values: off, auto, or on (the default). +// If GO111MODULE=on or is unset, then the go command requires the use of +// modules, never consulting GOPATH. We refer to this as the command +// being module-aware or running in "module-aware mode". +// If GO111MODULE=auto, then the go command enables or disables module +// support based on the current directory. Module support is enabled only +// when the current directory is outside GOPATH/src and itself contains a +// go.mod file or is below a directory containing a go.mod file. +// If GO111MODULE=off, then the go command never uses +// module support. Instead it looks in vendor directories and GOPATH // to find dependencies; we now refer to this as "GOPATH mode." -// If GO111MODULE=on, then the go command requires the use of modules, -// never consulting GOPATH. We refer to this as the command being -// module-aware or running in "module-aware mode". -// If GO111MODULE=auto or is unset, then the go command enables or -// disables module support based on the current directory. -// Module support is enabled only when the current directory is outside -// GOPATH/src and itself contains a go.mod file or is below a directory -// containing a go.mod file. // // In module-aware mode, GOPATH no longer defines the meaning of imports // during a build, but it still stores downloaded dependencies (in GOPATH/pkg/mod) @@ -2422,19 +2585,9 @@ // // Module downloading and verification // -// The go command maintains, in the main module's root directory alongside -// go.mod, a file named go.sum containing the expected cryptographic checksums -// of the content of specific module versions. Each time a dependency is -// used, its checksum is added to go.sum if missing or else required to match -// the existing entry in go.sum. -// -// The go command maintains a cache of downloaded packages and computes -// and records the cryptographic checksum of each package at download time. -// In normal operation, the go command checks these pre-computed checksums -// against the main module's go.sum file, instead of recomputing them on -// each command invocation. The 'go mod verify' command checks that -// the cached copies of module downloads still match both their recorded -// checksums and the entries in go.sum. +// The go command checks downloads against known checksums, +// to detect unexpected changes in the content of any specific module +// version from one day to the next. See 'go help module-auth' for details. // // The go command can fetch modules from a proxy instead of connecting // to source control systems directly, according to the setting of the GOPROXY @@ -2463,110 +2616,6 @@ // are still ignored. // // -// Module-aware go get -// -// The 'go get' command changes behavior depending on whether the -// go command is running in module-aware mode or legacy GOPATH mode. -// This help text, accessible as 'go help module-get' even in legacy GOPATH mode, -// describes 'go get' as it operates in module-aware mode. -// -// Usage: go get [-d] [-m] [-u] [-v] [-insecure] [build flags] [packages] -// -// Get resolves and adds dependencies to the current development module -// and then builds and installs them. -// -// The first step is to resolve which dependencies to add. -// -// For each named package or package pattern, get must decide which version of -// the corresponding module to use. By default, get chooses the latest tagged -// release version, such as v0.4.5 or v1.2.3. If there are no tagged release -// versions, get chooses the latest tagged prerelease version, such as -// v0.0.1-pre1. If there are no tagged versions at all, get chooses the latest -// known commit. -// -// This default version selection can be overridden by adding an @version -// suffix to the package argument, as in 'go get golang.org/x/text@v0.3.0'. -// For modules stored in source control repositories, the version suffix can -// also be a commit hash, branch identifier, or other syntax known to the -// source control system, as in 'go get golang.org/x/text@master'. -// The version suffix @latest explicitly requests the default behavior -// described above. -// -// If a module under consideration is already a dependency of the current -// development module, then get will update the required version. -// Specifying a version earlier than the current required version is valid and -// downgrades the dependency. The version suffix @none indicates that the -// dependency should be removed entirely, downgrading or removing modules -// depending on it as needed. -// -// Although get defaults to using the latest version of the module containing -// a named package, it does not use the latest version of that module's -// dependencies. Instead it prefers to use the specific dependency versions -// requested by that module. For example, if the latest A requires module -// B v1.2.3, while B v1.2.4 and v1.3.1 are also available, then 'go get A' -// will use the latest A but then use B v1.2.3, as requested by A. (If there -// are competing requirements for a particular module, then 'go get' resolves -// those requirements by taking the maximum requested version.) -// -// The -u flag instructs get to update dependencies to use newer minor or -// patch releases when available. Continuing the previous example, -// 'go get -u A' will use the latest A with B v1.3.1 (not B v1.2.3). -// -// The -u=patch flag (not -u patch) instructs get to update dependencies -// to use newer patch releases when available. Continuing the previous example, -// 'go get -u=patch A' will use the latest A with B v1.2.4 (not B v1.2.3). -// -// In general, adding a new dependency may require upgrading -// existing dependencies to keep a working build, and 'go get' does -// this automatically. Similarly, downgrading one dependency may -// require downgrading other dependencies, and 'go get' does -// this automatically as well. -// -// The -m flag instructs get to stop here, after resolving, upgrading, -// and downgrading modules and updating go.mod. When using -m, -// each specified package path must be a module path as well, -// not the import path of a package below the module root. -// -// The -insecure flag permits fetching from repositories and resolving -// custom domains using insecure schemes such as HTTP. Use with caution. -// -// The second step is to download (if needed), build, and install -// the named packages. -// -// If an argument names a module but not a package (because there is no -// Go source code in the module's root directory), then the install step -// is skipped for that argument, instead of causing a build failure. -// For example 'go get golang.org/x/perf' succeeds even though there -// is no code corresponding to that import path. -// -// Note that package patterns are allowed and are expanded after resolving -// the module versions. For example, 'go get golang.org/x/perf/cmd/...' -// adds the latest golang.org/x/perf and then installs the commands in that -// latest version. -// -// The -d flag instructs get to download the source code needed to build -// the named packages, including downloading necessary dependencies, -// but not to build and install them. -// -// With no package arguments, 'go get' applies to the main module, -// and to the Go package in the current directory, if any. In particular, -// 'go get -u' and 'go get -u=patch' update all the dependencies of the -// main module. With no package arguments and also without -u, -// 'go get' is not much more than 'go install', and 'go get -d' not much -// more than 'go list'. -// -// For more about modules, see 'go help modules'. -// -// For more about specifying packages, see 'go help packages'. -// -// This text describes the behavior of get using modules to manage source -// code and dependencies. If instead the go command is running in GOPATH -// mode, the details of get's flags and effects change, as does 'go help get'. -// See 'go help modules' and 'go help gopath-get'. -// -// See also: go build, go install, go clean, go mod. -// -// // Package lists and patterns // // Many commands apply to a set of packages: @@ -2651,6 +2700,100 @@ // by the go tool, as are directories named "testdata". // // +// Module authentication using go.sum +// +// The go command tries to authenticate every downloaded module, +// checking that the bits downloaded for a specific module version today +// match bits downloaded yesterday. This ensures repeatable builds +// and detects introduction of unexpected changes, malicious or not. +// +// In each module's root, alongside go.mod, the go command maintains +// a file named go.sum containing the cryptographic checksums of the +// module's dependencies. +// +// The form of each line in go.sum is three fields: +// +// [/go.mod] +// +// Each known module version results in two lines in the go.sum file. +// The first line gives the hash of the module version's file tree. +// The second line appends "/go.mod" to the version and gives the hash +// of only the module version's (possibly synthesized) go.mod file. +// The go.mod-only hash allows downloading and authenticating a +// module version's go.mod file, which is needed to compute the +// dependency graph, without also downloading all the module's source code. +// +// The hash begins with an algorithm prefix of the form "h:". +// The only defined algorithm prefix is "h1:", which uses SHA-256. +// +// Module authentication failures +// +// The go command maintains a cache of downloaded packages and computes +// and records the cryptographic checksum of each package at download time. +// In normal operation, the go command checks the main module's go.sum file +// against these precomputed checksums instead of recomputing them on +// each command invocation. The 'go mod verify' command checks that +// the cached copies of module downloads still match both their recorded +// checksums and the entries in go.sum. +// +// In day-to-day development, the checksum of a given module version +// should never change. Each time a dependency is used by a given main +// module, the go command checks its local cached copy, freshly +// downloaded or not, against the main module's go.sum. If the checksums +// don't match, the go command reports the mismatch as a security error +// and refuses to run the build. When this happens, proceed with caution: +// code changing unexpectedly means today's build will not match +// yesterday's, and the unexpected change may not be beneficial. +// +// If the go command reports a mismatch in go.sum, the downloaded code +// for the reported module version does not match the one used in a +// previous build of the main module. It is important at that point +// to find out what the right checksum should be, to decide whether +// go.sum is wrong or the downloaded code is wrong. Usually go.sum is right: +// you want to use the same code you used yesterday. +// +// If a downloaded module is not yet included in go.sum and it is a publicly +// available module, the go command consults the Go checksum database to fetch +// the expected go.sum lines. If the downloaded code does not match those +// lines, the go command reports the mismatch and exits. Note that the +// database is not consulted for module versions already listed in go.sum. +// +// If a go.sum mismatch is reported, it is always worth investigating why +// the code downloaded today differs from what was downloaded yesterday. +// +// The GOSUMDB environment variable identifies the name of checksum database +// to use and optionally its public key and URL, as in: +// +// GOSUMDB="sum.golang.org" +// GOSUMDB="sum.golang.org+" +// GOSUMDB="sum.golang.org+ https://sum.golang.org" +// +// The go command knows the public key of sum.golang.org; use of any other +// database requires giving the public key explicitly. The URL defaults to +// "https://" followed by the database name. +// +// GOSUMDB defaults to "sum.golang.org" when GOPROXY="https://proxy.golang.org" +// and otherwise defaults to "off". NOTE: The GOSUMDB will later default to +// "sum.golang.org" unconditionally. +// +// If GOSUMDB is set to "off", or if "go get" is invoked with the -insecure flag, +// the checksum database is never consulted, but at the cost of giving up the +// security guarantee of verified repeatable downloads for all modules. +// A better way to bypass the checksum database for specific modules is +// to use the GONOSUMDB environment variable. +// +// The GONOSUMDB environment variable is a comma-separated list of +// patterns (in the syntax of Go's path.Match) of module path prefixes +// that should not be compared against the checksum database. +// For example, +// +// GONOSUMDB=*.corp.example.com,rsc.io/private +// +// disables checksum database lookups for modules with path prefixes matching +// either pattern, including "git.corp.example.com/xyzzy", "rsc.io/private", +// and "rsc.io/private/quux". +// +// // Testing flags // // The 'go test' command takes both flags that apply to 'go test' itself diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go index e85d3d2507..bee9384d76 100644 --- a/src/cmd/go/go_test.go +++ b/src/cmd/go/go_test.go @@ -6,7 +6,6 @@ package main_test import ( "bytes" - "cmd/internal/sys" "context" "debug/elf" "debug/macho" @@ -27,6 +26,10 @@ import ( "strings" "testing" "time" + + "cmd/go/internal/cache" + "cmd/go/internal/cfg" + "cmd/internal/sys" ) var ( @@ -118,6 +121,8 @@ var testCtx = context.Background() // The TestMain function creates a go command for testing purposes and // deletes it after the tests have been run. func TestMain(m *testing.M) { + // $GO_GCFLAGS a compiler debug flag known to cmd/dist, make.bash, etc. + // It is not a standard go command flag; use os.Getenv, not cfg.Getenv. if os.Getenv("GO_GCFLAGS") != "" { fmt.Fprintf(os.Stderr, "testing: warning: no tests to run\n") // magic string for cmd/go fmt.Printf("cmd/go test is not compatible with $GO_GCFLAGS being set\n") @@ -146,7 +151,18 @@ func TestMain(m *testing.M) { select {} } - dir, err := ioutil.TempDir(os.Getenv("GOTMPDIR"), "cmd-go-test-") + // Run with a temporary TMPDIR to check that the tests don't + // leave anything behind. + topTmpdir, err := ioutil.TempDir("", "cmd-go-test-") + if err != nil { + log.Fatal(err) + } + if !*testWork { + defer removeAll(topTmpdir) + } + os.Setenv(tempEnvName(), topTmpdir) + + dir, err := ioutil.TempDir(topTmpdir, "tmpdir") if err != nil { log.Fatal(err) } @@ -155,6 +171,7 @@ func TestMain(m *testing.M) { defer removeAll(testTmpDir) } + testGOCACHE = cache.DefaultDir() if canRun { testBin = filepath.Join(testTmpDir, "testbin") if err := os.Mkdir(testBin, 0777); err != nil { @@ -201,7 +218,9 @@ func TestMain(m *testing.M) { return } - out, err := exec.Command(gotool, args...).CombinedOutput() + buildCmd := exec.Command(gotool, args...) + buildCmd.Env = append(os.Environ(), "GOFLAGS=-mod=vendor") + out, err := buildCmd.CombinedOutput() if err != nil { fmt.Fprintf(os.Stderr, "building testgo failed: %v\n%s", err, out) os.Exit(2) @@ -241,6 +260,7 @@ func TestMain(m *testing.M) { } } // Don't let these environment variables confuse the test. + os.Setenv("GOENV", "off") os.Unsetenv("GOBIN") os.Unsetenv("GOPATH") os.Unsetenv("GIT_ALLOW_PROTOCOL") @@ -249,7 +269,7 @@ func TestMain(m *testing.M) { // Setting HOME to a non-existent directory will break // those systems. Disable ccache and use real compiler. Issue 17668. os.Setenv("CCACHE_DISABLE", "1") - if os.Getenv("GOCACHE") == "" { + if cfg.Getenv("GOCACHE") == "" { os.Setenv("GOCACHE", testGOCACHE) // because $HOME is gone } @@ -258,6 +278,23 @@ func TestMain(m *testing.M) { removeAll(testTmpDir) // os.Exit won't run defer } + if !*testWork { + // There shouldn't be anything left in topTmpdir. + dirf, err := os.Open(topTmpdir) + if err != nil { + log.Fatal(err) + } + names, err := dirf.Readdirnames(0) + if err != nil { + log.Fatal(err) + } + if len(names) > 0 { + log.Fatalf("unexpected files left in tmpdir: %v", names) + } + + removeAll(topTmpdir) + } + os.Exit(r) } @@ -1856,11 +1893,12 @@ func TestGoListTest(t *testing.T) { tg.grepStdout(`^runtime/cgo$`, "missing runtime/cgo") tg.run("list", "-deps", "-f", "{{if .DepOnly}}{{.ImportPath}}{{end}}", "sort") - tg.grepStdout(`^reflect$`, "missing reflect") + tg.grepStdout(`^internal/reflectlite$`, "missing internal/reflectlite") tg.grepStdoutNot(`^sort`, "unexpected sort") } func TestGoListCompiledCgo(t *testing.T) { + tooSlow(t) tg := testgo(t) defer tg.cleanup() tg.parallel() @@ -2500,6 +2538,7 @@ func TestCoverageRuns(t *testing.T) { func TestCoverageDotImport(t *testing.T) { skipIfGccgo(t, "gccgo has no cover tool") + tooSlow(t) tg := testgo(t) defer tg.cleanup() tg.parallel() @@ -2582,6 +2621,14 @@ func TestCoverageDepLoop(t *testing.T) { tg.grepStdout("coverage: 100.0% of statements", "expected 100.0% coverage") } +func TestCoverageNoStatements(t *testing.T) { + tooSlow(t) + tg := testgo(t) + defer tg.cleanup() + tg.run("test", "-cover", "./testdata/testcover/pkg4") + tg.grepStdout("[no statements]", "expected [no statements] for pkg4") +} + func TestCoverageImportMainLoop(t *testing.T) { skipIfGccgo(t, "gccgo has no cover tool") tg := testgo(t) @@ -2671,6 +2718,7 @@ func TestCoverageFunc(t *testing.T) { // Issue 24588. func TestCoverageDashC(t *testing.T) { skipIfGccgo(t, "gccgo has no cover tool") + tooSlow(t) tg := testgo(t) defer tg.cleanup() tg.parallel() @@ -3346,6 +3394,7 @@ func TestVetWithOnlyCgoFiles(t *testing.T) { if !canCgo { t.Skip("skipping because cgo not enabled") } + tooSlow(t) tg := testgo(t) defer tg.cleanup() @@ -3367,22 +3416,6 @@ func TestGoGetDotSlashDownload(t *testing.T) { tg.run("get", "./pprof_mac_fix") } -// Issue 13037: Was not parsing tags in 404 served over HTTPS -func TestGoGetHTTPS404(t *testing.T) { - testenv.MustHaveExternalNetwork(t) - switch runtime.GOOS { - case "darwin", "linux", "freebsd": - default: - t.Skipf("test case does not work on %s", runtime.GOOS) - } - - tg := testgo(t) - defer tg.cleanup() - tg.tempDir("src") - tg.setenv("GOPATH", tg.path(".")) - tg.run("get", "bazil.org/fuse/fs/fstestutil") -} - // Test that you cannot import a main package. // See golang.org/issue/4210 and golang.org/issue/17475. func TestImportMain(t *testing.T) { @@ -3597,7 +3630,7 @@ func TestImportLocal(t *testing.T) { var _ = x.X `) tg.runFail("build", "dir/x") - tg.grepStderr("local import.*in non-local package", "did not diagnose local import") + tg.grepStderr("cannot import current directory", "did not diagnose import current directory") // ... even in a test. tg.tempFile("src/dir/x/xx.go", `package x @@ -3610,7 +3643,7 @@ func TestImportLocal(t *testing.T) { `) tg.run("build", "dir/x") tg.runFail("test", "dir/x") - tg.grepStderr("local import.*in non-local package", "did not diagnose local import") + tg.grepStderr("cannot import current directory", "did not diagnose import current directory") // ... even in an xtest. tg.tempFile("src/dir/x/xx.go", `package x @@ -3623,7 +3656,7 @@ func TestImportLocal(t *testing.T) { `) tg.run("build", "dir/x") tg.runFail("test", "dir/x") - tg.grepStderr("local import.*in non-local package", "did not diagnose local import") + tg.grepStderr("cannot import current directory", "did not diagnose import current directory") } func TestGoGetInsecure(t *testing.T) { @@ -3640,6 +3673,7 @@ func TestGoGetInsecure(t *testing.T) { tg.tempFile("go.mod", "module m") tg.cd(tg.path(".")) tg.setenv("GO111MODULE", "on") + tg.setenv("GOPROXY", "") } else { tg.setenv("GOPATH", tg.path(".")) tg.setenv("GO111MODULE", "off") @@ -4103,7 +4137,7 @@ func TestCgoConsistentResults(t *testing.T) { t.Skip("skipping because cgo not enabled") } switch runtime.GOOS { - case "solaris": + case "solaris", "illumos": testenv.SkipFlaky(t, 13247) } @@ -4175,9 +4209,9 @@ func TestBinaryOnlyPackages(t *testing.T) { package p1 `) - tg.wantStale("p1", "missing or invalid binary-only package", "p1 is binary-only but has no binary, should be stale") + tg.wantStale("p1", "binary-only packages are no longer supported", "p1 is binary-only, and this message should always be printed") tg.runFail("install", "p1") - tg.grepStderr("missing or invalid binary-only package", "did not report attempt to compile binary-only package") + tg.grepStderr("binary-only packages are no longer supported", "did not report attempt to compile binary-only package") tg.tempFile("src/p1/p1.go", ` package p1 @@ -4203,48 +4237,13 @@ func TestBinaryOnlyPackages(t *testing.T) { import _ "fmt" func G() `) - tg.wantNotStale("p1", "binary-only package", "should NOT want to rebuild p1 (first)") - tg.run("install", "-x", "p1") // no-op, up to date - tg.grepBothNot(`[\\/]compile`, "should not have run compiler") - tg.run("install", "p2") // does not rebuild p1 (or else p2 will fail) - tg.wantNotStale("p2", "", "should NOT want to rebuild p2") + tg.wantStale("p1", "binary-only package", "should NOT want to rebuild p1 (first)") + tg.runFail("install", "p2") + tg.grepStderr("p1: binary-only packages are no longer supported", "did not report error for binary-only p1") - // changes to the non-source-code do not matter, - // and only one file needs the special comment. - tg.tempFile("src/p1/missing2.go", ` - package p1 - func H() - `) - tg.wantNotStale("p1", "binary-only package", "should NOT want to rebuild p1 (second)") - tg.wantNotStale("p2", "", "should NOT want to rebuild p2") - - tg.tempFile("src/p3/p3.go", ` - package main - import ( - "p1" - "p2" - ) - func main() { - p1.F(false) - p2.F() - } - `) - tg.run("install", "p3") - - tg.run("run", tg.path("src/p3/p3.go")) - tg.grepStdout("hello from p1", "did not see message from p1") - - tg.tempFile("src/p4/p4.go", `package main`) - // The odd string split below avoids vet complaining about - // a // +build line appearing too late in this source file. - tg.tempFile("src/p4/p4not.go", `//go:binary-only-package - - /`+`/ +build asdf - - package main - `) - tg.run("list", "-f", "{{.BinaryOnly}}", "p4") - tg.grepStdout("false", "did not see BinaryOnly=false for p4") + tg.run("list", "-deps", "-f", "{{.ImportPath}}: {{.BinaryOnly}}", "p2") + tg.grepStdout("p1: true", "p1 not listed as BinaryOnly") + tg.grepStdout("p2: false", "p2 listed as BinaryOnly") } // Issue 16050 and 21884. @@ -4657,7 +4656,7 @@ func TestBuildTagsNoComma(t *testing.T) { tg.makeTempdir() tg.setenv("GOPATH", tg.path("go")) tg.run("build", "-tags", "tag1 tag2", "math") - tg.runFail("build", "-tags", "tag1,tag2", "math") + tg.runFail("build", "-tags", "tag1,tag2 tag3", "math") tg.grepBoth("space-separated list contains comma", "-tags with a comma-separated list didn't error") } @@ -4949,14 +4948,14 @@ func TestTestRegexps(t *testing.T) { x_test.go:15: LOG: Y running N=10000 x_test.go:15: LOG: Y running N=1000000 x_test.go:15: LOG: Y running N=100000000 - x_test.go:15: LOG: Y running N=2000000000 + x_test.go:15: LOG: Y running N=1000000000 --- BENCH: BenchmarkX/Y x_test.go:15: LOG: Y running N=1 x_test.go:15: LOG: Y running N=100 x_test.go:15: LOG: Y running N=10000 x_test.go:15: LOG: Y running N=1000000 x_test.go:15: LOG: Y running N=100000000 - x_test.go:15: LOG: Y running N=2000000000 + x_test.go:15: LOG: Y running N=1000000000 --- BENCH: BenchmarkX x_test.go:13: LOG: X running N=1 --- BENCH: BenchmarkXX @@ -5067,7 +5066,8 @@ func TestExecBuildX(t *testing.T) { obj := tg.path("main") tg.run("build", "-x", "-o", obj, src) sh := tg.path("test.sh") - err := ioutil.WriteFile(sh, []byte("set -e\n"+tg.getStderr()), 0666) + cmds := tg.getStderr() + err := ioutil.WriteFile(sh, []byte("set -e\n"+cmds), 0666) if err != nil { t.Fatal(err) } @@ -5098,6 +5098,12 @@ func TestExecBuildX(t *testing.T) { if string(out) != "hello" { t.Fatalf("got %q; want %q", out, "hello") } + + matches := regexp.MustCompile(`^WORK=(.*)\n`).FindStringSubmatch(cmds) + if len(matches) == 0 { + t.Fatal("no WORK directory") + } + tg.must(os.RemoveAll(matches[1])) } func TestParallelNumber(t *testing.T) { @@ -5269,8 +5275,14 @@ func TestCacheVet(t *testing.T) { if strings.Contains(os.Getenv("GODEBUG"), "gocacheverify") { t.Skip("GODEBUG gocacheverify") } - if os.Getenv("GOCACHE") == "off" { - tooSlow(t) + if testing.Short() { + // In short mode, reuse cache. + // Test failures may be masked if the cache has just the right entries already + // (not a concern during all.bash, which runs in a clean cache). + if cfg.Getenv("GOCACHE") == "off" { + tooSlow(t) + } + } else { tg.makeTempdir() tg.setenv("GOCACHE", tg.path("cache")) } @@ -5654,6 +5666,7 @@ func TestTestSkipVetAfterFailedBuild(t *testing.T) { } func TestTestVetRebuild(t *testing.T) { + tooSlow(t) tg := testgo(t) defer tg.cleanup() tg.parallel() @@ -5933,6 +5946,7 @@ func TestBadCgoDirectives(t *testing.T) { if !canCgo { t.Skip("no cgo") } + tooSlow(t) tg := testgo(t) defer tg.cleanup() @@ -5965,7 +5979,7 @@ func TestBadCgoDirectives(t *testing.T) { if runtime.Compiler == "gc" { tg.runFail("build", tg.path("src/x/_cgo_yy.go")) // ... but if forced, the comment is rejected // Actually, today there is a separate issue that _ files named - // on the command-line are ignored. Once that is fixed, + // on the command line are ignored. Once that is fixed, // we want to see the cgo_ldflag error. tg.grepStderr("//go:cgo_ldflag only allowed in cgo-generated code|no Go files", "did not reject //go:cgo_ldflag directive") } @@ -6047,6 +6061,7 @@ func TestTwoPkgConfigs(t *testing.T) { if runtime.GOOS == "windows" || runtime.GOOS == "plan9" { t.Skipf("no shell scripts on %s", runtime.GOOS) } + tooSlow(t) tg := testgo(t) defer tg.cleanup() tg.parallel() @@ -6077,6 +6092,8 @@ func TestCgoCache(t *testing.T) { if !canCgo { t.Skip("no cgo") } + tooSlow(t) + tg := testgo(t) defer tg.cleanup() tg.parallel() @@ -6127,6 +6144,7 @@ func TestLinkerTmpDirIsDeleted(t *testing.T) { if !canCgo { t.Skip("skipping because cgo not enabled") } + tooSlow(t) tg := testgo(t) defer tg.cleanup() @@ -6216,6 +6234,7 @@ func TestGoTestWithoutTests(t *testing.T) { // Issue 25579. func TestGoBuildDashODevNull(t *testing.T) { + tooSlow(t) tg := testgo(t) defer tg.cleanup() tg.parallel() @@ -6228,6 +6247,7 @@ func TestGoBuildDashODevNull(t *testing.T) { // Issue 25093. func TestCoverpkgTestOnly(t *testing.T) { skipIfGccgo(t, "gccgo has no cover tool") + tooSlow(t) tg := testgo(t) defer tg.cleanup() tg.parallel() diff --git a/src/cmd/go/go_windows_test.go b/src/cmd/go/go_windows_test.go index 99af3d43dc..d65d91f712 100644 --- a/src/cmd/go/go_windows_test.go +++ b/src/cmd/go/go_windows_test.go @@ -5,7 +5,6 @@ package main import ( - "fmt" "internal/testenv" "io/ioutil" "os" @@ -16,6 +15,8 @@ import ( ) func TestAbsolutePath(t *testing.T) { + t.Parallel() + tmp, err := ioutil.TempDir("", "TestAbsolutePath") if err != nil { t.Fatal(err) @@ -33,21 +34,11 @@ func TestAbsolutePath(t *testing.T) { t.Fatal(err) } - wd, err := os.Getwd() - if err != nil { - t.Fatal(err) - } - defer os.Chdir(wd) - - // Chdir so current directory and a.go reside on the same drive. - err = os.Chdir(dir) - if err != nil { - t.Fatal(err) - } - noVolume := file[len(filepath.VolumeName(file)):] wrongPath := filepath.Join(dir, noVolume) - output, err := exec.Command(testenv.GoToolPath(t), "build", noVolume).CombinedOutput() + cmd := exec.Command(testenv.GoToolPath(t), "build", noVolume) + cmd.Dir = dir + output, err := cmd.CombinedOutput() if err == nil { t.Fatal("build should fail") } @@ -55,69 +46,3 @@ func TestAbsolutePath(t *testing.T) { t.Fatalf("wrong output found: %v %v", err, string(output)) } } - -func runIcacls(t *testing.T, args ...string) string { - t.Helper() - out, err := exec.Command("icacls", args...).CombinedOutput() - if err != nil { - t.Fatalf("icacls failed: %v\n%v", err, string(out)) - } - return string(out) -} - -func runGetACL(t *testing.T, path string) string { - t.Helper() - cmd := fmt.Sprintf(`Get-Acl "%s" | Select -expand AccessToString`, path) - out, err := exec.Command("powershell", "-Command", cmd).CombinedOutput() - if err != nil { - t.Fatalf("Get-Acl failed: %v\n%v", err, string(out)) - } - return string(out) -} - -// For issue 22343: verify that executable file created by "go build" command -// has discretionary access control list (DACL) set as if the file -// was created in the destination directory. -func TestACL(t *testing.T) { - tmpdir, err := ioutil.TempDir("", "TestACL") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(tmpdir) - - newtmpdir := filepath.Join(tmpdir, "tmp") - err = os.Mkdir(newtmpdir, 0777) - if err != nil { - t.Fatal(err) - } - - // When TestACL/tmp directory is created, it will have - // the same security attributes as TestACL. - // Add Guest account full access to TestACL/tmp - this - // will make all files created in TestACL/tmp have different - // security attributes to the files created in TestACL. - runIcacls(t, newtmpdir, - "/grant", "*S-1-5-32-546:(oi)(ci)f", // add Guests group to have full access - ) - - src := filepath.Join(tmpdir, "main.go") - err = ioutil.WriteFile(src, []byte("package main; func main() { }\n"), 0644) - if err != nil { - t.Fatal(err) - } - exe := filepath.Join(tmpdir, "main.exe") - cmd := exec.Command(testenv.GoToolPath(t), "build", "-o", exe, src) - cmd.Env = append(os.Environ(), - "TMP="+newtmpdir, - "TEMP="+newtmpdir, - ) - out, err := cmd.CombinedOutput() - if err != nil { - t.Fatalf("go command failed: %v\n%v", err, string(out)) - } - - // exe file is expected to have the same security attributes as the src. - if got, expected := runGetACL(t, exe), runGetACL(t, src); got != expected { - t.Fatalf("expected Get-Acl output of \n%v\n, got \n%v\n", expected, got) - } -} diff --git a/src/cmd/go/help_test.go b/src/cmd/go/help_test.go index ec6a9d11cb..9c0fa8411e 100644 --- a/src/cmd/go/help_test.go +++ b/src/cmd/go/help_test.go @@ -12,9 +12,14 @@ import ( "testing" "cmd/go/internal/help" + "cmd/go/internal/modload" ) func TestDocsUpToDate(t *testing.T) { + if !modload.Enabled() { + t.Skipf("help.Help in GOPATH mode is configured by main.main") + } + buf := new(bytes.Buffer) // Match the command in mkalldocs.sh that generates alldocs.go. help.Help(buf, []string{"documentation"}) diff --git a/src/cmd/go/init_test.go b/src/cmd/go/init_test.go new file mode 100644 index 0000000000..ed90a77841 --- /dev/null +++ b/src/cmd/go/init_test.go @@ -0,0 +1,34 @@ +// 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 main_test + +import ( + "internal/testenv" + "os/exec" + "testing" +) + +// BenchmarkExecGoEnv measures how long it takes for 'go env GOARCH' to run. +// Since 'go' is executed, remember to run 'go install cmd/go' before running +// the benchmark if any changes were done. +func BenchmarkExecGoEnv(b *testing.B) { + testenv.MustHaveExec(b) + b.StopTimer() + gotool, err := testenv.GoTool() + if err != nil { + b.Fatal(err) + } + for i := 0; i < b.N; i++ { + cmd := exec.Command(gotool, "env", "GOARCH") + + b.StartTimer() + err := cmd.Run() + b.StopTimer() + + if err != nil { + b.Fatal(err) + } + } +} diff --git a/src/cmd/go/internal/auth/auth.go b/src/cmd/go/internal/auth/auth.go new file mode 100644 index 0000000000..12e3c74dcc --- /dev/null +++ b/src/cmd/go/internal/auth/auth.go @@ -0,0 +1,23 @@ +// 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 auth provides access to user-provided authentication credentials. +package auth + +import "net/http" + +// AddCredentials fills in the user's credentials for req, if any. +// The return value reports whether any matching credentials were found. +func AddCredentials(req *http.Request) (added bool) { + // TODO(golang.org/issue/26232): Support arbitrary user-provided credentials. + netrcOnce.Do(readNetrc) + for _, l := range netrc { + if l.machine == req.URL.Host { + req.SetBasicAuth(l.login, l.password) + return true + } + } + + return false +} diff --git a/src/cmd/go/internal/auth/netrc.go b/src/cmd/go/internal/auth/netrc.go new file mode 100644 index 0000000000..7a9bdbb72c --- /dev/null +++ b/src/cmd/go/internal/auth/netrc.go @@ -0,0 +1,111 @@ +// 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 auth + +import ( + "io/ioutil" + "os" + "path/filepath" + "runtime" + "strings" + "sync" +) + +type netrcLine struct { + machine string + login string + password string +} + +var ( + netrcOnce sync.Once + netrc []netrcLine + netrcErr error +) + +func parseNetrc(data string) []netrcLine { + // See https://www.gnu.org/software/inetutils/manual/html_node/The-_002enetrc-file.html + // for documentation on the .netrc format. + var nrc []netrcLine + var l netrcLine + inMacro := false + for _, line := range strings.Split(data, "\n") { + if inMacro { + if line == "" { + inMacro = false + } + continue + } + + f := strings.Fields(line) + i := 0 + for ; i < len(f)-1; i += 2 { + // Reset at each "machine" token. + // “The auto-login process searches the .netrc file for a machine token + // that matches […]. Once a match is made, the subsequent .netrc tokens + // are processed, stopping when the end of file is reached or another + // machine or a default token is encountered.†+ switch f[i] { + case "machine": + l = netrcLine{machine: f[i+1]} + case "default": + break + case "login": + l.login = f[i+1] + case "password": + l.password = f[i+1] + case "macdef": + // “A macro is defined with the specified name; its contents begin with + // the next .netrc line and continue until a null line (consecutive + // new-line characters) is encountered.†+ inMacro = true + } + if l.machine != "" && l.login != "" && l.password != "" { + nrc = append(nrc, l) + l = netrcLine{} + } + } + + if i < len(f) && f[i] == "default" { + // “There can be only one default token, and it must be after all machine tokens.†+ break + } + } + + return nrc +} + +func netrcPath() (string, error) { + if env := os.Getenv("NETRC"); env != "" { + return env, nil + } + dir, err := os.UserHomeDir() + if err != nil { + return "", err + } + base := ".netrc" + if runtime.GOOS == "windows" { + base = "_netrc" + } + return filepath.Join(dir, base), nil +} + +func readNetrc() { + path, err := netrcPath() + if err != nil { + netrcErr = err + return + } + + data, err := ioutil.ReadFile(path) + if err != nil { + if !os.IsNotExist(err) { + netrcErr = err + } + return + } + + netrc = parseNetrc(string(data)) +} diff --git a/src/cmd/go/internal/web2/web_test.go b/src/cmd/go/internal/auth/netrc_test.go similarity index 54% rename from src/cmd/go/internal/web2/web_test.go rename to src/cmd/go/internal/auth/netrc_test.go index c6f6b1eff4..e06c545390 100644 --- a/src/cmd/go/internal/web2/web_test.go +++ b/src/cmd/go/internal/auth/netrc_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -package web2 +package auth import ( "reflect" @@ -10,23 +10,46 @@ import ( ) var testNetrc = ` +machine incomplete +password none + machine api.github.com login user password pwd machine incomlete.host login justlogin - + machine test.host login user2 password pwd2 + +machine oneline login user3 password pwd3 + +machine ignore.host macdef ignore + login nobody + password nothing + +machine hasmacro.too macdef ignore-next-lines login user4 password pwd4 + login nobody + password nothing + +default +login anonymous +password gopher@golang.org + +machine after.default +login oops +password too-late-in-file ` -func TestReadNetrc(t *testing.T) { +func TestParseNetrc(t *testing.T) { lines := parseNetrc(testNetrc) want := []netrcLine{ {"api.github.com", "user", "pwd"}, {"test.host", "user2", "pwd2"}, + {"oneline", "user3", "pwd3"}, + {"hasmacro.too", "user4", "pwd4"}, } if !reflect.DeepEqual(lines, want) { diff --git a/src/cmd/go/internal/base/base.go b/src/cmd/go/internal/base/base.go index e7f54c9a36..272da55681 100644 --- a/src/cmd/go/internal/base/base.go +++ b/src/cmd/go/internal/base/base.go @@ -30,7 +30,7 @@ type Command struct { Run func(cmd *Command, args []string) // UsageLine is the one-line usage message. - // The first word in the line is taken to be the command name. + // The words between "go" and the first flag or argument in the line are taken to be the command name. UsageLine string // Short is the short description shown in the 'go help' output. @@ -82,7 +82,8 @@ func (c *Command) Name() string { func (c *Command) Usage() { fmt.Fprintf(os.Stderr, "usage: %s\n", c.UsageLine) fmt.Fprintf(os.Stderr, "Run 'go help %s' for details.\n", c.LongName()) - os.Exit(2) + SetExitStatus(2) + Exit() } // Runnable reports whether the command can be run; otherwise @@ -131,6 +132,10 @@ func SetExitStatus(n int) { exitMu.Unlock() } +func GetExitStatus() int { + return exitStatus +} + // Run runs the command, with stdout and stderr // connected to the go command's own stdout and stderr. // If the command fails, Run reports the error using Errorf. diff --git a/src/cmd/go/internal/base/env.go b/src/cmd/go/internal/base/env.go index fcade9d84e..077295e0ef 100644 --- a/src/cmd/go/internal/base/env.go +++ b/src/cmd/go/internal/base/env.go @@ -4,34 +4,12 @@ package base -import "strings" - -// EnvForDir returns a copy of the environment -// suitable for running in the given directory. -// The environment is the current process's environment -// but with an updated $PWD, so that an os.Getwd in the -// child will be faster. +// EnvForDir returns a modified environment suitable for running in the given +// directory. +// The environment is the supplied base environment but with an updated $PWD, so +// that an os.Getwd in the child will be faster. func EnvForDir(dir string, base []string) []string { // Internally we only use rooted paths, so dir is rooted. // Even if dir is not rooted, no harm done. - return MergeEnvLists([]string{"PWD=" + dir}, base) -} - -// MergeEnvLists merges the two environment lists such that -// variables with the same name in "in" replace those in "out". -// This always returns a newly allocated slice. -func MergeEnvLists(in, out []string) []string { - out = append([]string(nil), out...) -NextVar: - for _, inkv := range in { - k := strings.SplitAfterN(inkv, "=", 2)[0] - for i, outkv := range out { - if strings.HasPrefix(outkv, k) { - out[i] = inkv - continue NextVar - } - } - out = append(out, inkv) - } - return out + return append(base, "PWD="+dir) } diff --git a/src/cmd/go/internal/base/goflags.go b/src/cmd/go/internal/base/goflags.go index 2f50b50bfc..187c2a1472 100644 --- a/src/cmd/go/internal/base/goflags.go +++ b/src/cmd/go/internal/base/goflags.go @@ -7,7 +7,6 @@ package base import ( "flag" "fmt" - "os" "runtime" "strings" @@ -62,7 +61,7 @@ func InitGOFLAGS() { // (Both will show the GOFLAGS setting if let succeed.) hideErrors := cfg.CmdName == "env" || cfg.CmdName == "bug" - goflags = strings.Fields(os.Getenv("GOFLAGS")) + goflags = strings.Fields(cfg.Getenv("GOFLAGS")) if goflags == nil { goflags = []string{} // avoid work on later InitGOFLAGS call } diff --git a/src/cmd/go/internal/bug/bug.go b/src/cmd/go/internal/bug/bug.go index e701f6eac9..fe71281ef0 100644 --- a/src/cmd/go/internal/bug/bug.go +++ b/src/cmd/go/internal/bug/bug.go @@ -10,6 +10,7 @@ import ( "fmt" "io" "io/ioutil" + urlpkg "net/url" "os" "os/exec" "path/filepath" @@ -19,7 +20,6 @@ import ( "cmd/go/internal/base" "cmd/go/internal/cfg" - "cmd/go/internal/envcmd" "cmd/go/internal/web" ) @@ -43,48 +43,60 @@ func runBug(cmd *base.Command, args []string) { } var buf bytes.Buffer buf.WriteString(bugHeader) - inspectGoVersion(&buf) - fmt.Fprint(&buf, "#### System details\n\n") - fmt.Fprintln(&buf, "```") - fmt.Fprintf(&buf, "go version %s %s/%s\n", runtime.Version(), runtime.GOOS, runtime.GOARCH) - env := cfg.CmdEnv - env = append(env, envcmd.ExtraEnvVars()...) - for _, e := range env { - // Hide the TERM environment variable from "go bug". - // See issue #18128 - if e.Name != "TERM" { - fmt.Fprintf(&buf, "%s=\"%s\"\n", e.Name, e.Value) - } - } - printGoDetails(&buf) - printOSDetails(&buf) - printCDetails(&buf) - fmt.Fprintln(&buf, "```") + printGoVersion(&buf) + buf.WriteString("### Does this issue reproduce with the latest release?\n\n\n") + printEnvDetails(&buf) + buf.WriteString(bugFooter) body := buf.String() - url := "https://github.com/golang/go/issues/new?body=" + web.QueryEscape(body) + url := "https://github.com/golang/go/issues/new?body=" + urlpkg.QueryEscape(body) if !web.OpenBrowser(url) { fmt.Print("Please file a new issue at golang.org/issue/new using this template:\n\n") fmt.Print(body) } } -const bugHeader = `Please answer these questions before submitting your issue. Thanks! +const bugHeader = ` -#### What did you do? +` +const bugFooter = `### What did you do? + + -#### What did you expect to see? + +### What did you expect to see? -#### What did you see instead? +### What did you see instead? ` +func printGoVersion(w io.Writer) { + fmt.Fprintf(w, "### What version of Go are you using (`go version`)?\n\n") + fmt.Fprintf(w, "
    \n")
    +	fmt.Fprintf(w, "$ go version\n")
    +	printCmdOut(w, "", "go", "version")
    +	fmt.Fprintf(w, "
    \n") + fmt.Fprintf(w, "\n") +} + +func printEnvDetails(w io.Writer) { + fmt.Fprintf(w, "### What operating system and processor architecture are you using (`go env`)?\n\n") + fmt.Fprintf(w, "
    go env Output
    \n")
    +	fmt.Fprintf(w, "$ go env\n")
    +	printCmdOut(w, "", "go", "env")
    +	printGoDetails(w)
    +	printOSDetails(w)
    +	printCDetails(w)
    +	fmt.Fprintf(w, "
    \n\n") +} + func printGoDetails(w io.Writer) { printCmdOut(w, "GOROOT/bin/go version: ", filepath.Join(runtime.GOROOT(), "bin/go"), "version") printCmdOut(w, "GOROOT/bin/go tool compile -V: ", filepath.Join(runtime.GOROOT(), "bin/go"), "tool", "compile", "-V") @@ -101,7 +113,9 @@ func printOSDetails(w io.Writer) { printGlibcVersion(w) case "openbsd", "netbsd", "freebsd", "dragonfly": printCmdOut(w, "uname -v: ", "uname", "-v") - case "solaris": + case "illumos", "solaris": + // Be sure to use the OS-supplied uname, in "/usr/bin": + printCmdOut(w, "uname -srv: ", "/usr/bin/uname", "-srv") out, err := ioutil.ReadFile("/etc/release") if err == nil { fmt.Fprintf(w, "/etc/release: %s\n", out) @@ -129,30 +143,6 @@ func printCDetails(w io.Writer) { } } -func inspectGoVersion(w io.Writer) { - data, err := web.Get("https://golang.org/VERSION?m=text") - if err != nil { - if cfg.BuildV { - fmt.Printf("failed to read from golang.org/VERSION: %v\n", err) - } - return - } - - // golang.org/VERSION currently returns a whitespace-free string, - // but just in case, protect against that changing. - // Similarly so for runtime.Version. - release := string(bytes.TrimSpace(data)) - vers := strings.TrimSpace(runtime.Version()) - - if vers == release { - // Up to date - return - } - - // Devel version or outdated release. Either way, this request is apropos. - fmt.Fprintf(w, "#### Does this issue reproduce with the latest release (%s)?\n\n\n", release) -} - // printCmdOut prints the output of running the given command. // It ignores failures; 'go bug' is best effort. func printCmdOut(w io.Writer, prefix, path string, args ...string) { diff --git a/src/cmd/go/internal/cache/cache.go b/src/cmd/go/internal/cache/cache.go index ab84cf6302..c1d073806e 100644 --- a/src/cmd/go/internal/cache/cache.go +++ b/src/cmd/go/internal/cache/cache.go @@ -33,7 +33,6 @@ type OutputID [HashSize]byte // A Cache is a package cache, backed by a file system directory tree. type Cache struct { dir string - log *os.File now func() time.Time } @@ -63,13 +62,8 @@ func Open(dir string) (*Cache, error) { return nil, err } } - f, err := os.OpenFile(filepath.Join(dir, "log.txt"), os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666) - if err != nil { - return nil, err - } c := &Cache{ dir: dir, - log: f, now: time.Now, } return c, nil @@ -141,7 +135,6 @@ type Entry struct { // get is Get but does not respect verify mode, so that Put can use it. func (c *Cache) get(id ActionID) (Entry, error) { missing := func() (Entry, error) { - fmt.Fprintf(c.log, "%d miss %x\n", c.now().Unix(), id) return Entry{}, errMissing } f, err := os.Open(c.fileName(id, "a")) @@ -184,8 +177,6 @@ func (c *Cache) get(id ActionID) (Entry, error) { return missing() } - fmt.Fprintf(c.log, "%d get %x\n", c.now().Unix(), id) - c.used(c.fileName(id, "a")) return Entry{buf, size, time.Unix(0, tm)}, nil @@ -287,7 +278,7 @@ func (c *Cache) Trim() { // Ignore errors from here: if we don't write the complete timestamp, the // cache will appear older than it is, and we'll trim it again next time. - renameio.WriteFile(filepath.Join(c.dir, "trim.txt"), []byte(fmt.Sprintf("%d", now.Unix()))) + renameio.WriteFile(filepath.Join(c.dir, "trim.txt"), []byte(fmt.Sprintf("%d", now.Unix())), 0666) } // trimSubdir trims a single cache subdirectory. @@ -349,7 +340,6 @@ func (c *Cache) putIndexEntry(id ActionID, out OutputID, size int64, allowVerify } os.Chtimes(file, c.now(), c.now()) // mainly for tests - fmt.Fprintf(c.log, "%d put %x %x %d\n", c.now().Unix(), id, out, size) return nil } diff --git a/src/cmd/go/internal/cache/cache_test.go b/src/cmd/go/internal/cache/cache_test.go index d3dafccd13..7229bc4cec 100644 --- a/src/cmd/go/internal/cache/cache_test.go +++ b/src/cmd/go/internal/cache/cache_test.go @@ -144,55 +144,6 @@ func TestVerifyPanic(t *testing.T) { t.Fatal("mismatched Put did not panic in verify mode") } -func TestCacheLog(t *testing.T) { - dir, err := ioutil.TempDir("", "cachetest-") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) - - c, err := Open(dir) - if err != nil { - t.Fatalf("Open: %v", err) - } - c.now = func() time.Time { return time.Unix(1e9, 0) } - - id := ActionID(dummyID(1)) - c.Get(id) - c.PutBytes(id, []byte("abc")) - c.Get(id) - - c, err = Open(dir) - if err != nil { - t.Fatalf("Open #2: %v", err) - } - c.now = func() time.Time { return time.Unix(1e9+1, 0) } - c.Get(id) - - id2 := ActionID(dummyID(2)) - c.Get(id2) - c.PutBytes(id2, []byte("abc")) - c.Get(id2) - c.Get(id) - - data, err := ioutil.ReadFile(filepath.Join(dir, "log.txt")) - if err != nil { - t.Fatal(err) - } - want := `1000000000 miss 0100000000000000000000000000000000000000000000000000000000000000 -1000000000 put 0100000000000000000000000000000000000000000000000000000000000000 ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad 3 -1000000000 get 0100000000000000000000000000000000000000000000000000000000000000 -1000000001 get 0100000000000000000000000000000000000000000000000000000000000000 -1000000001 miss 0200000000000000000000000000000000000000000000000000000000000000 -1000000001 put 0200000000000000000000000000000000000000000000000000000000000000 ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad 3 -1000000001 get 0200000000000000000000000000000000000000000000000000000000000000 -1000000001 get 0100000000000000000000000000000000000000000000000000000000000000 -` - if string(data) != want { - t.Fatalf("log:\n%s\nwant:\n%s", string(data), want) - } -} - func dummyID(x int) [HashSize]byte { var out [HashSize]byte binary.LittleEndian.PutUint64(out[:], uint64(x)) diff --git a/src/cmd/go/internal/cache/default.go b/src/cmd/go/internal/cache/default.go index f545c14700..9f8dd8af4b 100644 --- a/src/cmd/go/internal/cache/default.go +++ b/src/cmd/go/internal/cache/default.go @@ -12,6 +12,7 @@ import ( "sync" "cmd/go/internal/base" + "cmd/go/internal/cfg" ) // Default returns the default cache to use, or nil if no cache should be used. @@ -37,7 +38,7 @@ See golang.org to learn more about Go. // the first time Default is called. func initDefaultCache() { dir := DefaultDir() - if dir == "off" || dir == "" { + if dir == "off" { if defaultDirErr != nil { base.Fatalf("build cache is required, but could not be located: %v", defaultDirErr) } @@ -73,8 +74,13 @@ func DefaultDir() string { // otherwise distinguish between an explicit "off" and a UserCacheDir error. defaultDirOnce.Do(func() { - defaultDir = os.Getenv("GOCACHE") + defaultDir = cfg.Getenv("GOCACHE") + if filepath.IsAbs(defaultDir) || defaultDir == "off" { + return + } if defaultDir != "" { + defaultDir = "off" + defaultDirErr = fmt.Errorf("GOCACHE is not an absolute path") return } diff --git a/src/cmd/go/internal/cfg/cfg.go b/src/cmd/go/internal/cfg/cfg.go index 8dc4d1fbd2..2d17d104a6 100644 --- a/src/cmd/go/internal/cfg/cfg.go +++ b/src/cmd/go/internal/cfg/cfg.go @@ -7,11 +7,15 @@ package cfg import ( + "bytes" "fmt" "go/build" + "io/ioutil" "os" "path/filepath" "runtime" + "strings" + "sync" "cmd/internal/objabi" ) @@ -34,11 +38,12 @@ var ( BuildToolchainName string BuildToolchainCompiler func() string BuildToolchainLinker func() string + BuildTrimpath bool // -trimpath flag BuildV bool // -v flag BuildWork bool // -work flag BuildX bool // -x flag - CmdName string // "build", "install", "list", etc. + CmdName string // "build", "install", "list", "mod tidy", etc. DebugActiongraph string // -debug-actiongraph flag (undocumented, unstable) ) @@ -46,6 +51,50 @@ var ( func defaultContext() build.Context { ctxt := build.Default ctxt.JoinPath = filepath.Join // back door to say "do not use go command" + + ctxt.GOROOT = findGOROOT() + if runtime.Compiler != "gccgo" { + // Note that we must use runtime.GOOS and runtime.GOARCH here, + // as the tool directory does not move based on environment + // variables. This matches the initialization of ToolDir in + // go/build, except for using ctxt.GOROOT rather than + // runtime.GOROOT. + build.ToolDir = filepath.Join(ctxt.GOROOT, "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH) + } + + ctxt.GOPATH = envOr("GOPATH", ctxt.GOPATH) + + // Override defaults computed in go/build with defaults + // from go environment configuration file, if known. + ctxt.GOOS = envOr("GOOS", ctxt.GOOS) + ctxt.GOARCH = envOr("GOARCH", ctxt.GOARCH) + + // The go/build rule for whether cgo is enabled is: + // 1. If $CGO_ENABLED is set, respect it. + // 2. Otherwise, if this is a cross-compile, disable cgo. + // 3. Otherwise, use built-in default for GOOS/GOARCH. + // Recreate that logic here with the new GOOS/GOARCH setting. + if v := Getenv("CGO_ENABLED"); v == "0" || v == "1" { + ctxt.CgoEnabled = v[0] == '1' + } else if ctxt.GOOS != runtime.GOOS || ctxt.GOARCH != runtime.GOARCH { + ctxt.CgoEnabled = false + } else { + // Use built-in default cgo setting for GOOS/GOARCH. + // Note that ctxt.GOOS/GOARCH are derived from the preference list + // (1) environment, (2) go/env file, (3) runtime constants, + // while go/build.Default.GOOS/GOARCH are derived from the preference list + // (1) environment, (2) runtime constants. + // We know ctxt.GOOS/GOARCH == runtime.GOOS/GOARCH; + // no matter how that happened, go/build.Default will make the + // same decision (either the environment variables are set explicitly + // to match the runtime constants, or else they are unset, in which + // case go/build falls back to the runtime constants), so + // go/build.Default.GOOS/GOARCH == runtime.GOOS/GOARCH. + // So ctxt.CgoEnabled (== go/build.Default.CgoEnabled) is correct + // as is and can be left unmodified. + // Nothing to do here. + } + return ctxt } @@ -70,54 +119,245 @@ var CmdEnv []EnvVar // Global build parameters (used during package load) var ( - Goarch = BuildContext.GOARCH - Goos = BuildContext.GOOS - ExeSuffix string - Gopath = filepath.SplitList(BuildContext.GOPATH) + Goarch = BuildContext.GOARCH + Goos = BuildContext.GOOS + + ExeSuffix = exeSuffix() // ModulesEnabled specifies whether the go command is running // in module-aware mode (as opposed to GOPATH mode). // It is equal to modload.Enabled, but not all packages can import modload. ModulesEnabled bool - - // GoModInGOPATH records whether we've found a go.mod in GOPATH/src - // in GO111MODULE=auto mode. In that case, we don't use modules - // but people might expect us to, so 'go get' warns. - GoModInGOPATH string ) -func init() { +func exeSuffix() string { if Goos == "windows" { - ExeSuffix = ".exe" + return ".exe" + } + return "" +} + +var envCache struct { + once sync.Once + m map[string]string +} + +// EnvFile returns the name of the Go environment configuration file. +func EnvFile() (string, error) { + if file := os.Getenv("GOENV"); file != "" { + if file == "off" { + return "", fmt.Errorf("GOENV=off") + } + return file, nil + } + dir, err := os.UserConfigDir() + if err != nil { + return "", err + } + if dir == "" { + return "", fmt.Errorf("missing user-config dir") + } + return filepath.Join(dir, "go/env"), nil +} + +func initEnvCache() { + envCache.m = make(map[string]string) + file, _ := EnvFile() + if file == "" { + return + } + data, err := ioutil.ReadFile(file) + if err != nil { + return + } + + for len(data) > 0 { + // Get next line. + line := data + i := bytes.IndexByte(data, '\n') + if i >= 0 { + line, data = line[:i], data[i+1:] + } else { + data = nil + } + + i = bytes.IndexByte(line, '=') + if i < 0 || line[0] < 'A' || 'Z' < line[0] { + // Line is missing = (or empty) or a comment or not a valid env name. Ignore. + // (This should not happen, since the file should be maintained almost + // exclusively by "go env -w", but better to silently ignore than to make + // the go command unusable just because somehow the env file has + // gotten corrupted.) + continue + } + key, val := line[:i], line[i+1:] + envCache.m[string(key)] = string(val) } } +// Getenv gets the value for the configuration key. +// It consults the operating system environment +// and then the go/env file. +// If Getenv is called for a key that cannot be set +// in the go/env file (for example GODEBUG), it panics. +// This ensures that CanGetenv is accurate, so that +// 'go env -w' stays in sync with what Getenv can retrieve. +func Getenv(key string) string { + if !CanGetenv(key) { + switch key { + case "CGO_TEST_ALLOW", "CGO_TEST_DISALLOW", "CGO_test_ALLOW", "CGO_test_DISALLOW": + // used by internal/work/security_test.go; allow + default: + panic("internal error: invalid Getenv " + key) + } + } + val := os.Getenv(key) + if val != "" { + return val + } + envCache.once.Do(initEnvCache) + return envCache.m[key] +} + +// CanGetenv reports whether key is a valid go/env configuration key. +func CanGetenv(key string) bool { + return strings.Contains(knownEnv, "\t"+key+"\n") +} + +var knownEnv = ` + AR + CC + CGO_CFLAGS + CGO_CFLAGS_ALLOW + CGO_CFLAGS_DISALLOW + CGO_CPPFLAGS + CGO_CPPFLAGS_ALLOW + CGO_CPPFLAGS_DISALLOW + CGO_CXXFLAGS + CGO_CXXFLAGS_ALLOW + CGO_CXXFLAGS_DISALLOW + CGO_ENABLED + CGO_FFLAGS + CGO_FFLAGS_ALLOW + CGO_FFLAGS_DISALLOW + CGO_LDFLAGS + CGO_LDFLAGS_ALLOW + CGO_LDFLAGS_DISALLOW + CXX + FC + GCCGO + GO111MODULE + GO386 + GOARCH + GOARM + GOBIN + GOCACHE + GOENV + GOEXE + GOFLAGS + GOGCCFLAGS + GOHOSTARCH + GOHOSTOS + GOMIPS + GOMIPS64 + GONOPROXY + GONOSUMDB + GOOS + GOPATH + GOPPC64 + GOPROXY + GOROOT + GOSUMDB + GOTMPDIR + GOTOOLDIR + GOWASM + GO_EXTLINK_ENABLED + PKG_CONFIG +` + var ( - GOROOT = findGOROOT() - GOBIN = os.Getenv("GOBIN") + GOROOT = BuildContext.GOROOT + GOBIN = Getenv("GOBIN") GOROOTbin = filepath.Join(GOROOT, "bin") GOROOTpkg = filepath.Join(GOROOT, "pkg") GOROOTsrc = filepath.Join(GOROOT, "src") GOROOT_FINAL = findGOROOT_FINAL() // Used in envcmd.MkEnv and build ID computations. - GOARM = fmt.Sprint(objabi.GOARM) - GO386 = objabi.GO386 - GOMIPS = objabi.GOMIPS - GOMIPS64 = objabi.GOMIPS64 + GOARM = envOr("GOARM", fmt.Sprint(objabi.GOARM)) + GO386 = envOr("GO386", objabi.GO386) + GOMIPS = envOr("GOMIPS", objabi.GOMIPS) + GOMIPS64 = envOr("GOMIPS64", objabi.GOMIPS64) + GOPPC64 = envOr("GOPPC64", fmt.Sprintf("%s%d", "power", objabi.GOPPC64)) + GOWASM = envOr("GOWASM", fmt.Sprint(objabi.GOWASM)) + + GOPROXY = goproxy() + GOSUMDB = gosumdb() + GONOPROXY = Getenv("GONOPROXY") + GONOSUMDB = Getenv("GONOSUMDB") ) -// Update build context to use our computed GOROOT. -func init() { - BuildContext.GOROOT = GOROOT - if runtime.Compiler != "gccgo" { - // Note that we must use runtime.GOOS and runtime.GOARCH here, - // as the tool directory does not move based on environment - // variables. This matches the initialization of ToolDir in - // go/build, except for using GOROOT rather than - // runtime.GOROOT. - build.ToolDir = filepath.Join(GOROOT, "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH) +func goproxy() string { + v := Getenv("GOPROXY") + if v != "" { + return v } + + // Proxy is off by default for now. + // TODO(rsc): Remove this condition, turning it on always. + // (But do NOT do this without approval from rsc.) + if true { + return "direct" + } + + return "https://proxy.golang.org" +} + +func gosumdb() string { + v := Getenv("GOSUMDB") + if v != "" { + return v + } + + // Checksum database is off by default except when GOPROXY is proxy.golang.org. + // TODO(rsc): Remove this condition, turning it on always. + // (But do NOT do this without approval from rsc.) + if !strings.HasPrefix(GOPROXY, "https://proxy.golang.org") { + return "off" + } + + return "sum.golang.org" +} + +// GetArchEnv returns the name and setting of the +// GOARCH-specific architecture environment variable. +// If the current architecture has no GOARCH-specific variable, +// GetArchEnv returns empty key and value. +func GetArchEnv() (key, val string) { + switch Goarch { + case "arm": + return "GOARM", GOARM + case "386": + return "GO386", GO386 + case "mips", "mipsle": + return "GOMIPS", GOMIPS + case "mips64", "mips64le": + return "GOMIPS64", GOMIPS64 + case "ppc64", "ppc64le": + return "GOPPC64", GOPPC64 + case "wasm": + return "GOWASM", GOWASM + } + return "", "" +} + +// envOr returns Getenv(key) if set, or else def. +func envOr(key, def string) string { + val := Getenv(key) + if val == "" { + val = def + } + return val } // There is a copy of findGOROOT, isSameDir, and isGOROOT in @@ -131,7 +371,7 @@ func init() { // // There is a copy of this code in x/tools/cmd/godoc/goroot.go. func findGOROOT() string { - if env := os.Getenv("GOROOT"); env != "" { + if env := Getenv("GOROOT"); env != "" { return filepath.Clean(env) } def := filepath.Clean(runtime.GOROOT()) @@ -167,6 +407,8 @@ func findGOROOT() string { } func findGOROOT_FINAL() string { + // $GOROOT_FINAL is only for use during make.bash + // so it is not settable using go/env, so we use os.Getenv here. def := GOROOT if env := os.Getenv("GOROOT_FINAL"); env != "" { def = filepath.Clean(env) diff --git a/src/cmd/go/internal/clean/clean.go b/src/cmd/go/internal/clean/clean.go index 27121ed2ae..f7d80ff6dc 100644 --- a/src/cmd/go/internal/clean/clean.go +++ b/src/cmd/go/internal/clean/clean.go @@ -33,7 +33,8 @@ The go command builds most objects in a temporary directory, so go clean is mainly concerned with object files left by other tools or by manual invocations of go build. -Specifically, clean removes the following files from each of the +If a package argument is given or the -i or -r flag is set, +clean removes the following files from each of the source directories corresponding to the import paths: _obj/ old object directory, left from Makefiles @@ -105,7 +106,16 @@ func init() { } func runClean(cmd *base.Command, args []string) { - if len(args) > 0 || !modload.Enabled() || modload.HasModRoot() { + // golang.org/issue/29925: only load packages before cleaning if + // either the flags and arguments explicitly imply a package, + // or no other target (such as a cache) was requested to be cleaned. + cleanPkg := len(args) > 0 || cleanI || cleanR + if (!modload.Enabled() || modload.HasModRoot()) && + !cleanCache && !cleanModcache && !cleanTestcache { + cleanPkg = true + } + + if cleanPkg { for _, pkg := range load.PackagesAndErrors(args) { clean(pkg) } @@ -122,11 +132,11 @@ func runClean(cmd *base.Command, args []string) { // and not something that we want to remove. Also, we'd like to preserve // the access log for future analysis, even if the cache is cleared. subdirs, _ := filepath.Glob(filepath.Join(dir, "[0-9a-f][0-9a-f]")) + printedErrors := false if len(subdirs) > 0 { if cfg.BuildN || cfg.BuildX { b.Showcmd("", "rm -r %s", strings.Join(subdirs, " ")) } - printedErrors := false for _, d := range subdirs { // Only print the first error - there may be many. // This also mimics what os.RemoveAll(dir) would do. @@ -136,6 +146,12 @@ func runClean(cmd *base.Command, args []string) { } } } + + logFile := filepath.Join(dir, "log.txt") + if err := os.RemoveAll(logFile); err != nil && !printedErrors { + printedErrors = true + base.Errorf("go clean -cache: %v", err) + } } } diff --git a/src/cmd/go/internal/cmdflag/flag.go b/src/cmd/go/internal/cmdflag/flag.go index 7f2c53def8..3f934328fe 100644 --- a/src/cmd/go/internal/cmdflag/flag.go +++ b/src/cmd/go/internal/cmdflag/flag.go @@ -66,7 +66,8 @@ func SyntaxError(cmd, msg string) { } else { fmt.Fprintf(os.Stderr, `run "go help %s" for more information`+"\n", cmd) } - os.Exit(2) + base.SetExitStatus(2) + base.Exit() } // AddKnownFlags registers the flags in defns with base.AddKnownFlag. diff --git a/src/cmd/go/internal/envcmd/env.go b/src/cmd/go/internal/envcmd/env.go index ae98d3999a..00f10977bb 100644 --- a/src/cmd/go/internal/envcmd/env.go +++ b/src/cmd/go/internal/envcmd/env.go @@ -8,10 +8,13 @@ package envcmd import ( "encoding/json" "fmt" + "io/ioutil" "os" "path/filepath" "runtime" + "sort" "strings" + "unicode/utf8" "cmd/go/internal/base" "cmd/go/internal/cache" @@ -22,7 +25,7 @@ import ( ) var CmdEnv = &base.Command{ - UsageLine: "go env [-json] [var ...]", + UsageLine: "go env [-json] [-u] [-w] [var ...]", Short: "print Go environment information", Long: ` Env prints Go environment information. @@ -35,6 +38,14 @@ each named variable on its own line. The -json flag prints the environment in JSON format instead of as a shell script. +The -u flag requires one or more arguments and unsets +the default setting for the named environment variables, +if one has been set with 'go env -w'. + +The -w flag requires one or more arguments of the +form NAME=VALUE and changes the default settings +of the named environment variables to the given values. + For more about environment variables, see 'go help environment'. `, } @@ -43,26 +54,34 @@ func init() { CmdEnv.Run = runEnv // break init cycle } -var envJson = CmdEnv.Flag.Bool("json", false, "") +var ( + envJson = CmdEnv.Flag.Bool("json", false, "") + envU = CmdEnv.Flag.Bool("u", false, "") + envW = CmdEnv.Flag.Bool("w", false, "") +) func MkEnv() []cfg.EnvVar { var b work.Builder b.Init() + envFile, _ := cfg.EnvFile() env := []cfg.EnvVar{ {Name: "GOARCH", Value: cfg.Goarch}, {Name: "GOBIN", Value: cfg.GOBIN}, {Name: "GOCACHE", Value: cache.DefaultDir()}, + {Name: "GOENV", Value: envFile}, {Name: "GOEXE", Value: cfg.ExeSuffix}, - {Name: "GOFLAGS", Value: os.Getenv("GOFLAGS")}, + {Name: "GOFLAGS", Value: cfg.Getenv("GOFLAGS")}, {Name: "GOHOSTARCH", Value: runtime.GOARCH}, {Name: "GOHOSTOS", Value: runtime.GOOS}, + {Name: "GONOPROXY", Value: cfg.GONOPROXY}, + {Name: "GONOSUMDB", Value: cfg.GONOSUMDB}, {Name: "GOOS", Value: cfg.Goos}, {Name: "GOPATH", Value: cfg.BuildContext.GOPATH}, - {Name: "GOPROXY", Value: os.Getenv("GOPROXY")}, - {Name: "GORACE", Value: os.Getenv("GORACE")}, + {Name: "GOPROXY", Value: cfg.GOPROXY}, {Name: "GOROOT", Value: cfg.GOROOT}, - {Name: "GOTMPDIR", Value: os.Getenv("GOTMPDIR")}, + {Name: "GOSUMDB", Value: cfg.GOSUMDB}, + {Name: "GOTMPDIR", Value: cfg.Getenv("GOTMPDIR")}, {Name: "GOTOOLDIR", Value: base.ToolDir}, } @@ -72,25 +91,20 @@ func MkEnv() []cfg.EnvVar { env = append(env, cfg.EnvVar{Name: "GCCGO", Value: work.GccgoName}) } - switch cfg.Goarch { - case "arm": - env = append(env, cfg.EnvVar{Name: "GOARM", Value: cfg.GOARM}) - case "386": - env = append(env, cfg.EnvVar{Name: "GO386", Value: cfg.GO386}) - case "mips", "mipsle": - env = append(env, cfg.EnvVar{Name: "GOMIPS", Value: cfg.GOMIPS}) - case "mips64", "mips64le": - env = append(env, cfg.EnvVar{Name: "GOMIPS64", Value: cfg.GOMIPS64}) + key, val := cfg.GetArchEnv() + if key != "" { + env = append(env, cfg.EnvVar{Name: key, Value: val}) } cc := cfg.DefaultCC(cfg.Goos, cfg.Goarch) - if env := strings.Fields(os.Getenv("CC")); len(env) > 0 { + if env := strings.Fields(cfg.Getenv("CC")); len(env) > 0 { cc = env[0] } cxx := cfg.DefaultCXX(cfg.Goos, cfg.Goarch) - if env := strings.Fields(os.Getenv("CXX")); len(env) > 0 { + if env := strings.Fields(cfg.Getenv("CXX")); len(env) > 0 { cxx = env[0] } + env = append(env, cfg.EnvVar{Name: "AR", Value: envOr("AR", "ar")}) env = append(env, cfg.EnvVar{Name: "CC", Value: cc}) env = append(env, cfg.EnvVar{Name: "CXX", Value: cxx}) @@ -103,6 +117,14 @@ func MkEnv() []cfg.EnvVar { return env } +func envOr(name, def string) string { + val := cfg.Getenv(name) + if val != "" { + return val + } + return def +} + func findEnv(env []cfg.EnvVar, name string) string { for _, e := range env { if e.Name == name { @@ -150,7 +172,25 @@ func ExtraEnvVarsCostly() []cfg.EnvVar { } } +// argKey returns the KEY part of the arg KEY=VAL, or else arg itself. +func argKey(arg string) string { + i := strings.Index(arg, "=") + if i < 0 { + return arg + } + return arg[:i] +} + func runEnv(cmd *base.Command, args []string) { + if *envJson && *envU { + base.Fatalf("go env: cannot use -json with -u") + } + if *envJson && *envW { + base.Fatalf("go env: cannot use -json with -w") + } + if *envU && *envW { + base.Fatalf("go env: cannot use -u with -w") + } env := cfg.CmdEnv env = append(env, ExtraEnvVars()...) @@ -161,7 +201,7 @@ func runEnv(cmd *base.Command, args []string) { if len(args) > 0 { needCostly = false for _, arg := range args { - switch arg { + switch argKey(arg) { case "CGO_CFLAGS", "CGO_CPPFLAGS", "CGO_CXXFLAGS", @@ -177,6 +217,55 @@ func runEnv(cmd *base.Command, args []string) { env = append(env, ExtraEnvVarsCostly()...) } + if *envW { + // Process and sanity-check command line. + if len(args) == 0 { + base.Fatalf("go env -w: no KEY=VALUE arguments given") + } + osEnv := make(map[string]string) + for _, e := range cfg.OrigEnv { + if i := strings.Index(e, "="); i >= 0 { + osEnv[e[:i]] = e[i+1:] + } + } + add := make(map[string]string) + for _, arg := range args { + i := strings.Index(arg, "=") + if i < 0 { + base.Fatalf("go env -w: arguments must be KEY=VALUE: invalid argument: %s", arg) + } + key, val := arg[:i], arg[i+1:] + if err := checkEnvWrite(key, val, env); err != nil { + base.Fatalf("go env -w: %v", err) + } + if _, ok := add[key]; ok { + base.Fatalf("go env -w: multiple values for key: %s", key) + } + add[key] = val + if osVal := osEnv[key]; osVal != "" && osVal != val { + fmt.Fprintf(os.Stderr, "warning: go env -w %s=... does not override conflicting OS environment variable\n", key) + } + } + updateEnvFile(add, nil) + return + } + + if *envU { + // Process and sanity-check command line. + if len(args) == 0 { + base.Fatalf("go env -u: no arguments given") + } + del := make(map[string]bool) + for _, arg := range args { + if err := checkEnvWrite(arg, "", env); err != nil { + base.Fatalf("go env -u: %v", err) + } + del[arg] = true + } + updateEnvFile(nil, del) + return + } + if len(args) > 0 { if *envJson { var es []cfg.EnvVar @@ -235,6 +324,118 @@ func printEnvAsJSON(env []cfg.EnvVar) { enc := json.NewEncoder(os.Stdout) enc.SetIndent("", "\t") if err := enc.Encode(m); err != nil { - base.Fatalf("%s", err) + base.Fatalf("go env -json: %s", err) } } + +func checkEnvWrite(key, val string, env []cfg.EnvVar) error { + switch key { + case "GOEXE", "GOGCCFLAGS", "GOHOSTARCH", "GOHOSTOS", "GOMOD", "GOTOOLDIR": + return fmt.Errorf("%s cannot be modified", key) + case "GOENV": + return fmt.Errorf("%s can only be set using the OS environment", key) + } + + // To catch typos and the like, check that we know the variable. + if !cfg.CanGetenv(key) { + return fmt.Errorf("unknown go command variable %s", key) + } + + if !utf8.ValidString(val) { + return fmt.Errorf("invalid UTF-8 in %s=... value", key) + } + if strings.Contains(val, "\x00") { + return fmt.Errorf("invalid NUL in %s=... value", key) + } + if strings.ContainsAny(val, "\v\r\n") { + return fmt.Errorf("invalid newline in %s=... value", key) + } + return nil +} + +func updateEnvFile(add map[string]string, del map[string]bool) { + file, err := cfg.EnvFile() + if file == "" { + base.Fatalf("go env: cannot find go env config: %v", err) + } + data, err := ioutil.ReadFile(file) + if err != nil && (!os.IsNotExist(err) || len(add) == 0) { + base.Fatalf("go env: reading go env config: %v", err) + } + + lines := strings.SplitAfter(string(data), "\n") + if lines[len(lines)-1] == "" { + lines = lines[:len(lines)-1] + } else { + lines[len(lines)-1] += "\n" + } + + // Delete all but last copy of any duplicated variables, + // since the last copy is the one that takes effect. + prev := make(map[string]int) + for l, line := range lines { + if key := lineToKey(line); key != "" { + if p, ok := prev[key]; ok { + lines[p] = "" + } + prev[key] = l + } + } + + // Add variables (go env -w). Update existing lines in file if present, add to end otherwise. + for key, val := range add { + if p, ok := prev[key]; ok { + lines[p] = key + "=" + val + "\n" + delete(add, key) + } + } + for key, val := range add { + lines = append(lines, key+"="+val+"\n") + } + + // Delete requested variables (go env -u). + for key := range del { + if p, ok := prev[key]; ok { + lines[p] = "" + } + } + + // Sort runs of KEY=VALUE lines + // (that is, blocks of lines where blocks are separated + // by comments, blank lines, or invalid lines). + start := 0 + for i := 0; i <= len(lines); i++ { + if i == len(lines) || lineToKey(lines[i]) == "" { + sortKeyValues(lines[start:i]) + start = i + 1 + } + } + + data = []byte(strings.Join(lines, "")) + err = ioutil.WriteFile(file, data, 0666) + if err != nil { + // Try creating directory. + os.MkdirAll(filepath.Dir(file), 0777) + err = ioutil.WriteFile(file, data, 0666) + if err != nil { + base.Fatalf("go env: writing go env config: %v", err) + } + } +} + +// lineToKey returns the KEY part of the line KEY=VALUE or else an empty string. +func lineToKey(line string) string { + i := strings.Index(line, "=") + if i < 0 || strings.Contains(line[:i], "#") { + return "" + } + return line[:i] +} + +// sortKeyValues sorts a sequence of lines by key. +// It differs from sort.Strings in that GO386= sorts after GO=. +func sortKeyValues(lines []string) { + sort.Slice(lines, func(i, j int) bool { + return lineToKey(lines[i]) < lineToKey(lines[j]) + }) +} diff --git a/src/cmd/go/internal/generate/generate.go b/src/cmd/go/internal/generate/generate.go index 124dbc05f5..f2ae80e5dc 100644 --- a/src/cmd/go/internal/generate/generate.go +++ b/src/cmd/go/internal/generate/generate.go @@ -110,11 +110,13 @@ specifies that the command "foo" represents the generator "go tool foo". Generate processes packages in the order given on the command line, -one at a time. If the command line lists .go files, they are treated -as a single package. Within a package, generate processes the +one at a time. If the command line lists .go files from a single directory, +they are treated as a single package. Within a package, generate processes the source files in a package in file name order, one at a time. Within a source file, generate runs generators in the order they appear -in the file, one at a time. +in the file, one at a time. The go generate tool also sets the build +tag "generate" so that files may be examined by go generate but ignored +during build. If any generator returns an error exit status, "go generate" skips all further processing for that package. @@ -161,6 +163,9 @@ func runGenerate(cmd *base.Command, args []string) { log.Fatalf("generate: %s", err) } } + + cfg.BuildContext.BuildTags = append(cfg.BuildContext.BuildTags, "generate") + // Even if the arguments are .go files, this loop suffices. printed := false for _, pkg := range load.Packages(args) { @@ -374,7 +379,12 @@ Words: // Substitute command if required. if len(words) > 0 && g.commands[words[0]] != nil { // Replace 0th word by command substitution. - words = append(g.commands[words[0]], words[1:]...) + // + // Force a copy of the command definition to + // ensure words doesn't end up as a reference + // to the g.commands content. + tmpCmdWords := append([]string(nil), (g.commands[words[0]])...) + words = append(tmpCmdWords, words[1:]...) } // Substitute environment variables. for i, word := range words { @@ -428,7 +438,7 @@ func (g *Generator) exec(words []string) { cmd.Stderr = os.Stderr // Run the command in the package directory. cmd.Dir = g.dir - cmd.Env = base.MergeEnvLists(g.env, cfg.OrigEnv) + cmd.Env = append(cfg.OrigEnv, g.env...) err := cmd.Run() if err != nil { g.errorf("running %q: %s", words[0], err) diff --git a/src/cmd/go/internal/generate/generate_test.go b/src/cmd/go/internal/generate/generate_test.go index defc15387f..b546218a3c 100644 --- a/src/cmd/go/internal/generate/generate_test.go +++ b/src/cmd/go/internal/generate/generate_test.go @@ -5,6 +5,7 @@ package generate import ( + "os" "reflect" "runtime" "testing" @@ -15,6 +16,15 @@ type splitTest struct { out []string } +// Same as above, except including source line number to set +type splitTestWithLine struct { + in string + out []string + lineNumber int +} + +const anyLineNo = 0 + var splitTests = []splitTest{ {"", nil}, {"x", []string{"x"}}, @@ -54,3 +64,191 @@ func TestGenerateCommandParse(t *testing.T) { } } } + +// These environment variables will be undefined before the splitTestWithLine tests +var undefEnvList = []string{ + "_XYZZY_", +} + +// These environment variables will be defined before the splitTestWithLine tests +var defEnvMap = map[string]string{ + "_PLUGH_": "SomeVal", + "_X": "Y", +} + +// TestGenerateCommandShortHand - similar to TestGenerateCommandParse, +// except: +// 1. if the result starts with -command, record that shorthand +// before moving on to the next test. +// 2. If a source line number is specified, set that in the parser +// before executing the test. i.e., execute the split as if it +// processing that source line. +func TestGenerateCommandShorthand(t *testing.T) { + g := &Generator{ + r: nil, // Unused here. + path: "/usr/ken/sys/proc.go", + dir: "/usr/ken/sys", + file: "proc.go", + pkg: "sys", + commands: make(map[string][]string), + } + + var inLine string + var expected, got []string + + g.setEnv() + + // Set up the system environment variables + for i := range undefEnvList { + os.Unsetenv(undefEnvList[i]) + } + for k := range defEnvMap { + os.Setenv(k, defEnvMap[k]) + } + + // simple command from environment variable + inLine = "//go:generate -command CMD0 \"ab${_X}cd\"" + expected = []string{"-command", "CMD0", "abYcd"} + got = g.split(inLine + "\n") + + if !reflect.DeepEqual(got, expected) { + t.Errorf("split(%q): got %q expected %q", inLine, got, expected) + } + + // try again, with an extra level of indirection (should leave variable in command) + inLine = "//go:generate -command CMD0 \"ab${DOLLAR}{_X}cd\"" + expected = []string{"-command", "CMD0", "ab${_X}cd"} + got = g.split(inLine + "\n") + + if !reflect.DeepEqual(got, expected) { + t.Errorf("split(%q): got %q expected %q", inLine, got, expected) + } + + // Now the interesting part, record that output as a command + g.setShorthand(got) + + // see that the command still substitutes correctly from env. variable + inLine = "//go:generate CMD0" + expected = []string{"abYcd"} + got = g.split(inLine + "\n") + + if !reflect.DeepEqual(got, expected) { + t.Errorf("split(%q): got %q expected %q", inLine, got, expected) + } + + // Now change the value of $X and see if the recorded definition is + // still intact (vs. having the $_X already substituted out) + + os.Setenv("_X", "Z") + inLine = "//go:generate CMD0" + expected = []string{"abZcd"} + got = g.split(inLine + "\n") + + if !reflect.DeepEqual(got, expected) { + t.Errorf("split(%q): got %q expected %q", inLine, got, expected) + } + + // What if the variable is now undefined? Should be empty substitution. + + os.Unsetenv("_X") + inLine = "//go:generate CMD0" + expected = []string{"abcd"} + got = g.split(inLine + "\n") + + if !reflect.DeepEqual(got, expected) { + t.Errorf("split(%q): got %q expected %q", inLine, got, expected) + } + + // Try another undefined variable as an extra check + os.Unsetenv("_Z") + inLine = "//go:generate -command CMD1 \"ab${_Z}cd\"" + expected = []string{"-command", "CMD1", "abcd"} + got = g.split(inLine + "\n") + + if !reflect.DeepEqual(got, expected) { + t.Errorf("split(%q): got %q expected %q", inLine, got, expected) + } + + g.setShorthand(got) + + inLine = "//go:generate CMD1" + expected = []string{"abcd"} + got = g.split(inLine + "\n") + + if !reflect.DeepEqual(got, expected) { + t.Errorf("split(%q): got %q expected %q", inLine, got, expected) + } + + const val = "someNewValue" + os.Setenv("_Z", val) + + // try again with the properly-escaped variable. + + inLine = "//go:generate -command CMD2 \"ab${DOLLAR}{_Z}cd\"" + expected = []string{"-command", "CMD2", "ab${_Z}cd"} + got = g.split(inLine + "\n") + + if !reflect.DeepEqual(got, expected) { + t.Errorf("split(%q): got %q expected %q", inLine, got, expected) + } + + g.setShorthand(got) + + inLine = "//go:generate CMD2" + expected = []string{"ab" + val + "cd"} + got = g.split(inLine + "\n") + + if !reflect.DeepEqual(got, expected) { + t.Errorf("split(%q): got %q expected %q", inLine, got, expected) + } +} + +// Command-related tests for TestGenerateCommandShortHand2 +// -- Note line numbers included to check substitutions from "build-in" variable - $GOLINE +var splitTestsLines = []splitTestWithLine{ + {"-command TEST1 $GOLINE", []string{"-command", "TEST1", "22"}, 22}, + {"-command TEST2 ${DOLLAR}GOLINE", []string{"-command", "TEST2", "$GOLINE"}, 26}, + {"TEST1", []string{"22"}, 33}, + {"TEST2", []string{"66"}, 66}, + {"TEST1 ''", []string{"22", "''"}, 99}, + {"TEST2 ''", []string{"44", "''"}, 44}, +} + +// TestGenerateCommandShortHand - similar to TestGenerateCommandParse, +// except: +// 1. if the result starts with -command, record that shorthand +// before moving on to the next test. +// 2. If a source line number is specified, set that in the parser +// before executing the test. i.e., execute the split as if it +// processing that source line. +func TestGenerateCommandShortHand2(t *testing.T) { + g := &Generator{ + r: nil, // Unused here. + path: "/usr/ken/sys/proc.go", + dir: "/usr/ken/sys", + file: "proc.go", + pkg: "sys", + commands: make(map[string][]string), + } + g.setEnv() + for _, test := range splitTestsLines { + // if the test specified a line number, reflect that + if test.lineNumber != anyLineNo { + g.lineNum = test.lineNumber + g.setEnv() + } + // First with newlines. + got := g.split("//go:generate " + test.in + "\n") + if !reflect.DeepEqual(got, test.out) { + t.Errorf("split(%q): got %q expected %q", test.in, got, test.out) + } + // Then with CRLFs, thank you Windows. + got = g.split("//go:generate " + test.in + "\r\n") + if !reflect.DeepEqual(got, test.out) { + t.Errorf("split(%q): got %q expected %q", test.in, got, test.out) + } + if got[0] == "-command" { // record commands + g.setShorthand(got) + } + } +} diff --git a/src/cmd/go/internal/get/get.go b/src/cmd/go/internal/get/get.go index a314c57160..e4945fe144 100644 --- a/src/cmd/go/internal/get/get.go +++ b/src/cmd/go/internal/get/get.go @@ -118,11 +118,6 @@ func runGet(cmd *base.Command, args []string) { // Should not happen: main.go should install the separate module-enabled get code. base.Fatalf("go get: modules not implemented") } - if cfg.GoModInGOPATH != "" { - // Warn about not using modules with GO111MODULE=auto when go.mod exists. - // To silence the warning, users can set GO111MODULE=off. - fmt.Fprintf(os.Stderr, "go get: warning: modules disabled by GO111MODULE=auto in GOPATH/src;\n\tignoring %s;\n\tsee 'go help modules'\n", base.ShortPath(cfg.GoModInGOPATH)) - } work.BuildInit() @@ -177,12 +172,6 @@ func runGet(cmd *base.Command, args []string) { // everything. load.ClearPackageCache() - // In order to rebuild packages information completely, - // we need to clear commands cache. Command packages are - // referring to evicted packages from the package cache. - // This leads to duplicated loads of the standard packages. - load.ClearCmdCache() - pkgs := load.PackagesForBuild(args) // Phase 3. Install. @@ -240,7 +229,8 @@ func download(arg string, parent *load.Package, stk *load.ImportStack, mode int) } load1 := func(path string, mode int) *load.Package { if parent == nil { - return load.LoadPackageNoFlags(path, stk) + mode := 0 // don't do module or vendor resolution + return load.LoadImport(path, base.Cwd, nil, stk, nil, mode) } return load.LoadImport(path, parent.Dir, parent, stk, nil, mode|load.ResolveModule) } @@ -397,7 +387,7 @@ func downloadPackage(p *load.Package) error { blindRepo bool // set if the repo has unusual configuration ) - security := web.Secure + security := web.SecureOnly if Insecure { security = web.Insecure } diff --git a/src/cmd/go/internal/get/vcs.go b/src/cmd/go/internal/get/vcs.go index a7a2ba32cc..c6516c8bb3 100644 --- a/src/cmd/go/internal/get/vcs.go +++ b/src/cmd/go/internal/get/vcs.go @@ -8,9 +8,10 @@ import ( "encoding/json" "errors" "fmt" + "internal/lazyregexp" "internal/singleflight" "log" - "net/url" + urlpkg "net/url" "os" "os/exec" "path/filepath" @@ -53,7 +54,7 @@ var defaultSecureScheme = map[string]bool{ } func (v *vcsCmd) isSecure(repo string) bool { - u, err := url.Parse(repo) + u, err := urlpkg.Parse(repo) if err != nil { // If repo is not a URL, it's not secure. return false @@ -170,7 +171,7 @@ var vcsGit = &vcsCmd{ // scpSyntaxRe matches the SCP-like addresses used by Git to access // repositories by SSH. -var scpSyntaxRe = regexp.MustCompile(`^([a-zA-Z0-9_]+)@([a-zA-Z0-9._-]+):(.*)$`) +var scpSyntaxRe = lazyregexp.New(`^([a-zA-Z0-9_]+)@([a-zA-Z0-9._-]+):(.*)$`) func gitRemoteRepo(vcsGit *vcsCmd, rootDir string) (remoteRepo string, err error) { cmd := "config remote.origin.url" @@ -187,19 +188,19 @@ func gitRemoteRepo(vcsGit *vcsCmd, rootDir string) (remoteRepo string, err error } out := strings.TrimSpace(string(outb)) - var repoURL *url.URL + var repoURL *urlpkg.URL if m := scpSyntaxRe.FindStringSubmatch(out); m != nil { // Match SCP-like syntax and convert it to a URL. // Eg, "git@github.com:user/repo" becomes // "ssh://git@github.com/user/repo". - repoURL = &url.URL{ + repoURL = &urlpkg.URL{ Scheme: "ssh", - User: url.User(m[1]), + User: urlpkg.User(m[1]), Host: m[2], Path: m[3], } } else { - repoURL, err = url.Parse(out) + repoURL, err = urlpkg.Parse(out) if err != nil { return "", err } @@ -424,8 +425,8 @@ func (v *vcsCmd) run1(dir string, cmdline string, keyval []string, verbose bool) cmd.Dir = dir cmd.Env = base.EnvForDir(cmd.Dir, os.Environ()) if cfg.BuildX { - fmt.Printf("cd %s\n", dir) - fmt.Printf("%s %s\n", v.cmd, strings.Join(args, " ")) + fmt.Fprintf(os.Stderr, "cd %s\n", dir) + fmt.Fprintf(os.Stderr, "%s %s\n", v.cmd, strings.Join(args, " ")) } out, err := cmd.Output() if err != nil { @@ -525,13 +526,11 @@ func (v *vcsCmd) tagSync(dir, tag string) error { // version control system and repository name. type vcsPath struct { prefix string // prefix this description applies to - re string // pattern for import path + regexp *lazyregexp.Regexp // compiled pattern for import path repo string // repository to use (expand with match of re) vcs string // version control system to use (expand with match of re) check func(match map[string]string) error // additional checks ping bool // ping for scheme to use to download repo - - regexp *regexp.Regexp // cached compiled form of re } // vcsFromDir inspects dir and its parents to determine the @@ -632,7 +631,14 @@ type RepoRoot struct { vcs *vcsCmd // internal: vcs command access } -var httpPrefixRE = regexp.MustCompile(`^https?:`) +func httpPrefix(s string) string { + for _, prefix := range [...]string{"http:", "https:"} { + if strings.HasPrefix(s, prefix) { + return prefix + } + } + return "" +} // ModuleMode specifies whether to prefer modules when looking up code sources. type ModuleMode int @@ -677,10 +683,10 @@ var errUnknownSite = errors.New("dynamic lookup required to find mapping") func repoRootFromVCSPaths(importPath, scheme string, security web.SecurityMode, vcsPaths []*vcsPath) (*RepoRoot, error) { // A common error is to use https://packagepath because that's what // hg and git require. Diagnose this helpfully. - if loc := httpPrefixRE.FindStringIndex(importPath); loc != nil { + if prefix := httpPrefix(importPath); prefix != "" { // The importPath has been cleaned, so has only one slash. The pattern // ignores the slashes; the error message puts them back on the RHS at least. - return nil, fmt.Errorf("%q not allowed in import path", importPath[loc[0]:loc[1]]+"//") + return nil, fmt.Errorf("%q not allowed in import path", prefix+"//") } for _, srv := range vcsPaths { if !strings.HasPrefix(importPath, srv.prefix) { @@ -724,7 +730,7 @@ func repoRootFromVCSPaths(importPath, scheme string, security web.SecurityMode, match["repo"] = scheme + "://" + match["repo"] } else { for _, scheme := range vcs.scheme { - if security == web.Secure && !vcs.isSecureScheme(scheme) { + if security == web.SecureOnly && !vcs.isSecureScheme(scheme) { continue } if vcs.pingCmd != "" && vcs.ping(scheme, match["repo"]) == nil { @@ -748,20 +754,35 @@ func repoRootFromVCSPaths(importPath, scheme string, security web.SecurityMode, return nil, errUnknownSite } +// urlForImportPath returns a partially-populated URL for the given Go import path. +// +// The URL leaves the Scheme field blank so that web.Get will try any scheme +// allowed by the selected security mode. +func urlForImportPath(importPath string) (*urlpkg.URL, error) { + slash := strings.Index(importPath, "/") + if slash < 0 { + slash = len(importPath) + } + host, path := importPath[:slash], importPath[slash:] + if !strings.Contains(host, ".") { + return nil, errors.New("import path does not begin with hostname") + } + if len(path) == 0 { + path = "/" + } + return &urlpkg.URL{Host: host, Path: path, RawQuery: "go-get=1"}, nil +} + // repoRootForImportDynamic finds a *RepoRoot for a custom domain that's not // statically known by repoRootForImportPathStatic. // // This handles custom import paths like "name.tld/pkg/foo" or just "name.tld". func repoRootForImportDynamic(importPath string, mod ModuleMode, security web.SecurityMode) (*RepoRoot, error) { - slash := strings.Index(importPath, "/") - if slash < 0 { - slash = len(importPath) + url, err := urlForImportPath(importPath) + if err != nil { + return nil, err } - host := importPath[:slash] - if !strings.Contains(host, ".") { - return nil, errors.New("import path does not begin with hostname") - } - urlStr, body, err := web.GetMaybeInsecure(importPath, security) + resp, err := web.Get(security, url) if err != nil { msg := "https fetch: %v" if security == web.Insecure { @@ -769,6 +790,7 @@ func repoRootForImportDynamic(importPath string, mod ModuleMode, security web.Se } return nil, fmt.Errorf(msg, err) } + body := resp.Body defer body.Close() imports, err := parseMetaGoImports(body, mod) if err != nil { @@ -778,12 +800,12 @@ func repoRootForImportDynamic(importPath string, mod ModuleMode, security web.Se mmi, err := matchGoImport(imports, importPath) if err != nil { if _, ok := err.(ImportMismatchError); !ok { - return nil, fmt.Errorf("parse %s: %v", urlStr, err) + return nil, fmt.Errorf("parse %s: %v", url, err) } - return nil, fmt.Errorf("parse %s: no go-import meta tags (%s)", urlStr, err) + return nil, fmt.Errorf("parse %s: no go-import meta tags (%s)", resp.URL, err) } if cfg.BuildV { - log.Printf("get %q: found meta tag %#v at %s", importPath, mmi, urlStr) + log.Printf("get %q: found meta tag %#v at %s", importPath, mmi, url) } // If the import was "uni.edu/bob/project", which said the // prefix was "uni.edu" and the RepoRoot was "evilroot.com", @@ -795,24 +817,23 @@ func repoRootForImportDynamic(importPath string, mod ModuleMode, security web.Se if cfg.BuildV { log.Printf("get %q: verifying non-authoritative meta tag", importPath) } - urlStr0 := urlStr var imports []metaImport - urlStr, imports, err = metaImportsForPrefix(mmi.Prefix, mod, security) + url, imports, err = metaImportsForPrefix(mmi.Prefix, mod, security) if err != nil { return nil, err } metaImport2, err := matchGoImport(imports, importPath) if err != nil || mmi != metaImport2 { - return nil, fmt.Errorf("%s and %s disagree about go-import for %s", urlStr0, urlStr, mmi.Prefix) + return nil, fmt.Errorf("%s and %s disagree about go-import for %s", resp.URL, url, mmi.Prefix) } } if err := validateRepoRoot(mmi.RepoRoot); err != nil { - return nil, fmt.Errorf("%s: invalid repo root %q: %v", urlStr, mmi.RepoRoot, err) + return nil, fmt.Errorf("%s: invalid repo root %q: %v", resp.URL, mmi.RepoRoot, err) } vcs := vcsByCmd(mmi.VCS) if vcs == nil && mmi.VCS != "mod" { - return nil, fmt.Errorf("%s: unknown vcs %q", urlStr, mmi.VCS) + return nil, fmt.Errorf("%s: unknown vcs %q", resp.URL, mmi.VCS) } rr := &RepoRoot{ @@ -828,7 +849,7 @@ func repoRootForImportDynamic(importPath string, mod ModuleMode, security web.Se // validateRepoRoot returns an error if repoRoot does not seem to be // a valid URL with scheme. func validateRepoRoot(repoRoot string) error { - url, err := url.Parse(repoRoot) + url, err := urlpkg.Parse(repoRoot) if err != nil { return err } @@ -850,9 +871,9 @@ var ( // // The importPath is of the form "golang.org/x/tools". // It is an error if no imports are found. -// urlStr will still be valid if err != nil. -// The returned urlStr will be of the form "https://golang.org/x/tools?go-get=1" -func metaImportsForPrefix(importPrefix string, mod ModuleMode, security web.SecurityMode) (urlStr string, imports []metaImport, err error) { +// url will still be valid if err != nil. +// The returned url will be of the form "https://golang.org/x/tools?go-get=1" +func metaImportsForPrefix(importPrefix string, mod ModuleMode, security web.SecurityMode) (*urlpkg.URL, []metaImport, error) { setCache := func(res fetchResult) (fetchResult, error) { fetchCacheMu.Lock() defer fetchCacheMu.Unlock() @@ -868,25 +889,31 @@ func metaImportsForPrefix(importPrefix string, mod ModuleMode, security web.Secu } fetchCacheMu.Unlock() - urlStr, body, err := web.GetMaybeInsecure(importPrefix, security) + url, err := urlForImportPath(importPrefix) if err != nil { - return setCache(fetchResult{urlStr: urlStr, err: fmt.Errorf("fetch %s: %v", urlStr, err)}) + return setCache(fetchResult{err: err}) } + resp, err := web.Get(security, url) + if err != nil { + return setCache(fetchResult{url: url, err: fmt.Errorf("fetch %s: %v", resp.URL, err)}) + } + body := resp.Body + defer body.Close() imports, err := parseMetaGoImports(body, mod) if err != nil { - return setCache(fetchResult{urlStr: urlStr, err: fmt.Errorf("parsing %s: %v", urlStr, err)}) + return setCache(fetchResult{url: url, err: fmt.Errorf("parsing %s: %v", resp.URL, err)}) } if len(imports) == 0 { - err = fmt.Errorf("fetch %s: no go-import meta tag", urlStr) + err = fmt.Errorf("fetch %s: no go-import meta tag", url) } - return setCache(fetchResult{urlStr: urlStr, imports: imports, err: err}) + return setCache(fetchResult{url: url, imports: imports, err: err}) }) res := resi.(fetchResult) - return res.urlStr, res.imports, res.err + return res.url, res.imports, res.err } type fetchResult struct { - urlStr string // e.g. "https://foo.com/x/bar?go-get=1" + url *urlpkg.URL imports []metaImport err error } @@ -975,7 +1002,7 @@ var vcsPaths = []*vcsPath{ // Github { prefix: "github.com/", - re: `^(?Pgithub\.com/[A-Za-z0-9_.\-]+/[A-Za-z0-9_.\-]+)(/[\p{L}0-9_.\-]+)*$`, + regexp: lazyregexp.New(`^(?Pgithub\.com/[A-Za-z0-9_.\-]+/[A-Za-z0-9_.\-]+)(/[\p{L}0-9_.\-]+)*$`), vcs: "git", repo: "https://{root}", check: noVCSSuffix, @@ -984,7 +1011,7 @@ var vcsPaths = []*vcsPath{ // Bitbucket { prefix: "bitbucket.org/", - re: `^(?Pbitbucket\.org/(?P[A-Za-z0-9_.\-]+/[A-Za-z0-9_.\-]+))(/[A-Za-z0-9_.\-]+)*$`, + regexp: lazyregexp.New(`^(?Pbitbucket\.org/(?P[A-Za-z0-9_.\-]+/[A-Za-z0-9_.\-]+))(/[A-Za-z0-9_.\-]+)*$`), repo: "https://{root}", check: bitbucketVCS, }, @@ -992,7 +1019,7 @@ var vcsPaths = []*vcsPath{ // IBM DevOps Services (JazzHub) { prefix: "hub.jazz.net/git/", - re: `^(?Phub\.jazz\.net/git/[a-z0-9]+/[A-Za-z0-9_.\-]+)(/[A-Za-z0-9_.\-]+)*$`, + regexp: lazyregexp.New(`^(?Phub\.jazz\.net/git/[a-z0-9]+/[A-Za-z0-9_.\-]+)(/[A-Za-z0-9_.\-]+)*$`), vcs: "git", repo: "https://{root}", check: noVCSSuffix, @@ -1001,7 +1028,7 @@ var vcsPaths = []*vcsPath{ // Git at Apache { prefix: "git.apache.org/", - re: `^(?Pgit\.apache\.org/[a-z0-9_.\-]+\.git)(/[A-Za-z0-9_.\-]+)*$`, + regexp: lazyregexp.New(`^(?Pgit\.apache\.org/[a-z0-9_.\-]+\.git)(/[A-Za-z0-9_.\-]+)*$`), vcs: "git", repo: "https://{root}", }, @@ -1009,7 +1036,7 @@ var vcsPaths = []*vcsPath{ // Git at OpenStack { prefix: "git.openstack.org/", - re: `^(?Pgit\.openstack\.org/[A-Za-z0-9_.\-]+/[A-Za-z0-9_.\-]+)(\.git)?(/[A-Za-z0-9_.\-]+)*$`, + regexp: lazyregexp.New(`^(?Pgit\.openstack\.org/[A-Za-z0-9_.\-]+/[A-Za-z0-9_.\-]+)(\.git)?(/[A-Za-z0-9_.\-]+)*$`), vcs: "git", repo: "https://{root}", }, @@ -1017,7 +1044,7 @@ var vcsPaths = []*vcsPath{ // chiselapp.com for fossil { prefix: "chiselapp.com/", - re: `^(?Pchiselapp\.com/user/[A-Za-z0-9]+/repository/[A-Za-z0-9_.\-]+)$`, + regexp: lazyregexp.New(`^(?Pchiselapp\.com/user/[A-Za-z0-9]+/repository/[A-Za-z0-9_.\-]+)$`), vcs: "fossil", repo: "https://{root}", }, @@ -1025,8 +1052,8 @@ var vcsPaths = []*vcsPath{ // General syntax for any server. // Must be last. { - re: `^(?P(?P([a-z0-9.\-]+\.)+[a-z0-9.\-]+(:[0-9]+)?(/~?[A-Za-z0-9_.\-]+)+?)\.(?Pbzr|fossil|git|hg|svn))(/~?[A-Za-z0-9_.\-]+)*$`, - ping: true, + regexp: lazyregexp.New(`(?P(?P([a-z0-9.\-]+\.)+[a-z0-9.\-]+(:[0-9]+)?(/~?[A-Za-z0-9_.\-]+)+?)\.(?Pbzr|fossil|git|hg|svn))(/~?[A-Za-z0-9_.\-]+)*$`), + ping: true, }, } @@ -1038,25 +1065,13 @@ var vcsPathsAfterDynamic = []*vcsPath{ // Launchpad. See golang.org/issue/11436. { prefix: "launchpad.net/", - re: `^(?Plaunchpad\.net/((?P[A-Za-z0-9_.\-]+)(?P/[A-Za-z0-9_.\-]+)?|~[A-Za-z0-9_.\-]+/(\+junk|[A-Za-z0-9_.\-]+)/[A-Za-z0-9_.\-]+))(/[A-Za-z0-9_.\-]+)*$`, + regexp: lazyregexp.New(`^(?Plaunchpad\.net/((?P[A-Za-z0-9_.\-]+)(?P/[A-Za-z0-9_.\-]+)?|~[A-Za-z0-9_.\-]+/(\+junk|[A-Za-z0-9_.\-]+)/[A-Za-z0-9_.\-]+))(/[A-Za-z0-9_.\-]+)*$`), vcs: "bzr", repo: "https://{root}", check: launchpadVCS, }, } -func init() { - // fill in cached regexps. - // Doing this eagerly discovers invalid regexp syntax - // without having to run a command that needs that regexp. - for _, srv := range vcsPaths { - srv.regexp = regexp.MustCompile(srv.re) - } - for _, srv := range vcsPathsAfterDynamic { - srv.regexp = regexp.MustCompile(srv.re) - } -} - // noVCSSuffix checks that the repository name does not // end in .foo for any version control system foo. // The usual culprit is ".git". @@ -1080,8 +1095,13 @@ func bitbucketVCS(match map[string]string) error { var resp struct { SCM string `json:"scm"` } - url := expand(match, "https://api.bitbucket.org/2.0/repositories/{bitname}?fields=scm") - data, err := web.Get(url) + url := &urlpkg.URL{ + Scheme: "https", + Host: "api.bitbucket.org", + Path: expand(match, "/2.0/repositories/{bitname}"), + RawQuery: "fields=scm", + } + data, err := web.GetBytes(url) if err != nil { if httpErr, ok := err.(*web.HTTPError); ok && httpErr.StatusCode == 403 { // this may be a private repository. If so, attempt to determine which @@ -1123,7 +1143,12 @@ func launchpadVCS(match map[string]string) error { if match["project"] == "" || match["series"] == "" { return nil } - _, err := web.Get(expand(match, "https://code.launchpad.net/{project}{series}/.bzr/branch-format")) + url := &urlpkg.URL{ + Scheme: "https", + Host: "code.launchpad.net", + Path: expand(match, "/{project}{series}/.bzr/branch-format"), + } + _, err := web.GetBytes(url) if err != nil { match["root"] = expand(match, "launchpad.net/{project}") match["repo"] = expand(match, "https://{root}") diff --git a/src/cmd/go/internal/get/vcs_test.go b/src/cmd/go/internal/get/vcs_test.go index d13721bed1..91800baa83 100644 --- a/src/cmd/go/internal/get/vcs_test.go +++ b/src/cmd/go/internal/get/vcs_test.go @@ -181,7 +181,7 @@ func TestRepoRootForImportPath(t *testing.T) { } for _, test := range tests { - got, err := RepoRootForImportPath(test.path, IgnoreMod, web.Secure) + got, err := RepoRootForImportPath(test.path, IgnoreMod, web.SecureOnly) want := test.want if want == nil { diff --git a/src/cmd/go/internal/help/help.go b/src/cmd/go/internal/help/help.go index 312a29590f..d373771ab5 100644 --- a/src/cmd/go/internal/help/help.go +++ b/src/cmd/go/internal/help/help.go @@ -17,6 +17,7 @@ import ( "unicode/utf8" "cmd/go/internal/base" + "cmd/go/internal/modload" ) // Help implements the 'help' command. @@ -35,8 +36,10 @@ func Help(w io.Writer, args []string) { usage := &base.Command{Long: buf.String()} cmds := []*base.Command{usage} for _, cmd := range base.Go.Commands { - if cmd.UsageLine == "gopath-get" { - // Avoid duplication of the "get" documentation. + // Avoid duplication of the "get" documentation. + if cmd.UsageLine == "module-get" && modload.Enabled() { + continue + } else if cmd.UsageLine == "gopath-get" && !modload.Enabled() { continue } cmds = append(cmds, cmd) @@ -63,7 +66,8 @@ Args: helpSuccess = " " + strings.Join(args[:i], " ") } fmt.Fprintf(os.Stderr, "go help %s: unknown help topic. Run '%s'.\n", strings.Join(args, " "), helpSuccess) - os.Exit(2) // failed at 'go help cmd' + base.SetExitStatus(2) // failed at 'go help cmd' + base.Exit() } if len(cmd.Commands) > 0 { @@ -167,7 +171,8 @@ func tmpl(w io.Writer, text string, data interface{}) { if ew.err != nil { // I/O error writing. Ignore write on closed pipe. if strings.Contains(ew.err.Error(), "pipe") { - os.Exit(1) + base.SetExitStatus(1) + base.Exit() } base.Fatalf("writing output: %v", ew.err) } diff --git a/src/cmd/go/internal/help/helpdoc.go b/src/cmd/go/internal/help/helpdoc.go index c219a45d74..43ad57f2c0 100644 --- a/src/cmd/go/internal/help/helpdoc.go +++ b/src/cmd/go/internal/help/helpdoc.go @@ -469,10 +469,17 @@ var HelpEnvironment = &base.Command{ Short: "environment variables", Long: ` -The go command, and the tools it invokes, examine a few different -environment variables. For many of these, you can see the default -value of on your system by running 'go env NAME', where NAME is the -name of the variable. +The go command and the tools it invokes consult environment variables +for configuration. If an environment variable is unset, the go command +uses a sensible default setting. To see the effective setting of the +variable , run 'go env '. To change the default setting, +run 'go env -w ='. Defaults changed using 'go env -w' +are recorded in a Go environment configuration file stored in the +per-user configuration directory, as reported by os.UserConfigDir. +The location of the configuration file can be changed by setting +the environment variable GOENV, and 'go env GOENV' prints the +effective location, but 'go env -w' cannot change the default location. +See 'go help env' for details. General-purpose environment variables: @@ -486,10 +493,15 @@ General-purpose environment variables: GOCACHE The directory where the go command will store cached information for reuse in future builds. + GOENV + The location of the Go environment configuration file. + Cannot be set using 'go env -w'. GOFLAGS A space-separated list of -flag=value settings to apply to go commands by default, when the given flag is known by - the current command. Flags listed on the command-line + the current command. Each entry must be a standalone flag. + Because the entries are space-separated, flag values must + not contain spaces. Flags listed on the command line are applied after this list and therefore override it. GOOS The operating system for which to compile code. @@ -498,21 +510,18 @@ General-purpose environment variables: For more details see: 'go help gopath'. GOPROXY URL of Go module proxy. See 'go help goproxy'. - GORACE - Options for the race detector. - See https://golang.org/doc/articles/race_detector.html. GOROOT The root of the go tree. GOTMPDIR The directory where the go command will write temporary source files, packages, and binaries. -Each entry in the GOFLAGS list must be a standalone flag. -Because the entries are space-separated, flag values must -not contain spaces. - Environment variables for use with cgo: + AR + The command to use to manipulate library archives when + building with the gccgo compiler. + The default is 'ar'. CC The command to use to compile C code. CGO_ENABLED @@ -542,12 +551,10 @@ Environment variables for use with cgo: but for the linker. CXX The command to use to compile C++ code. + FC + The command to use to compile Fortran code. PKG_CONFIG Path to pkg-config tool. - AR - The command to use to manipulate library archives when - building with the gccgo compiler. - The default is 'ar'. Architecture-specific environment variables: @@ -563,6 +570,9 @@ Architecture-specific environment variables: GOMIPS64 For GOARCH=mips64{,le}, whether to use floating point instructions. Valid values are hardfloat (default), softfloat. + GOWASM + For GOARCH=wasm, comma-separated list of experimental WebAssembly features to use. + Valid values are satconv, signext. Special-purpose environment variables: @@ -579,14 +589,18 @@ Special-purpose environment variables: when using -linkmode=auto with code that uses cgo. Set to 0 to disable external linking mode, 1 to enable it. GIT_ALLOW_PROTOCOL - Defined by Git. A colon-separated list of schemes that are allowed to be used - with git fetch/clone. If set, any scheme not explicitly mentioned will be - considered insecure by 'go get'. + Defined by Git. A colon-separated list of schemes that are allowed + to be used with git fetch/clone. If set, any scheme not explicitly + mentioned will be considered insecure by 'go get'. + Because the variable is defined by Git, the default value cannot + be set using 'go env -w'. Additional information available from 'go env' but not read from the environment: GOEXE The executable file name suffix (".exe" on Windows, "" on other systems). + GOGCCFLAGS + A space-separated list of arguments supplied to the CC command. GOHOSTARCH The architecture (GOARCH) of the Go toolchain binaries. GOHOSTOS @@ -635,15 +649,6 @@ constraints, but the go command stops scanning for build constraints at the first item in the file that is not a blank line or //-style line comment. See the go/build package documentation for more details. - -Through the Go 1.12 release, non-test Go source files can also include -a //go:binary-only-package comment, indicating that the package -sources are included for documentation only and must not be used to -build the package binary. This enables distribution of Go packages in -their compiled form alone. Even binary-only packages require accurate -import blocks listing required dependencies, so that those -dependencies can be supplied when linking the resulting command. -Note that this feature is scheduled to be removed after the Go 1.12 release. `, } @@ -693,6 +698,9 @@ are: -buildmode=plugin Build the listed main packages, plus all packages that they import, into a Go plugin. Packages not named main are ignored. + +On AIX, when linking a C program that uses a Go archive built with +-buildmode=c-archive, you must pass -Wl,-bnoobjreorder to the C compiler. `, } diff --git a/src/cmd/go/internal/imports/build.go b/src/cmd/go/internal/imports/build.go index ddf425b020..1e44a83c72 100644 --- a/src/cmd/go/internal/imports/build.go +++ b/src/cmd/go/internal/imports/build.go @@ -184,28 +184,58 @@ func MatchFile(name string, tags map[string]bool) bool { } n := len(l) if n >= 2 && KnownOS[l[n-2]] && KnownArch[l[n-1]] { - return tags[l[n-2]] && tags[l[n-1]] + return matchTag(l[n-2], tags, true) && matchTag(l[n-1], tags, true) } if n >= 1 && KnownOS[l[n-1]] { - return tags[l[n-1]] + return matchTag(l[n-1], tags, true) } if n >= 1 && KnownArch[l[n-1]] { - return tags[l[n-1]] + return matchTag(l[n-1], tags, true) } return true } -var KnownOS = make(map[string]bool) -var KnownArch = make(map[string]bool) - -func init() { - for _, v := range strings.Fields(goosList) { - KnownOS[v] = true - } - for _, v := range strings.Fields(goarchList) { - KnownArch[v] = true - } +var KnownOS = map[string]bool{ + "aix": true, + "android": true, + "darwin": true, + "dragonfly": true, + "freebsd": true, + "hurd": true, + "illumos": true, + "js": true, + "linux": true, + "nacl": true, + "netbsd": true, + "openbsd": true, + "plan9": true, + "solaris": true, + "windows": true, + "zos": true, } -const goosList = "aix android darwin dragonfly freebsd hurd js linux nacl netbsd openbsd plan9 solaris windows zos " -const goarchList = "386 amd64 amd64p32 arm armbe arm64 arm64be ppc64 ppc64le mips mipsle mips64 mips64le mips64p32 mips64p32le ppc riscv riscv64 s390 s390x sparc sparc64 wasm " +var KnownArch = map[string]bool{ + "386": true, + "amd64": true, + "amd64p32": true, + "arm": true, + "armbe": true, + "arm64": true, + "arm64be": true, + "ppc64": true, + "ppc64le": true, + "mips": true, + "mipsle": true, + "mips64": true, + "mips64le": true, + "mips64p32": true, + "mips64p32le": true, + "ppc": true, + "riscv": true, + "riscv64": true, + "s390": true, + "s390x": true, + "sparc": true, + "sparc64": true, + "wasm": true, +} diff --git a/src/cmd/go/internal/imports/scan_test.go b/src/cmd/go/internal/imports/scan_test.go index 6a2ff62ba7..e424656cae 100644 --- a/src/cmd/go/internal/imports/scan_test.go +++ b/src/cmd/go/internal/imports/scan_test.go @@ -5,10 +5,13 @@ package imports import ( + "bytes" "internal/testenv" + "io/ioutil" + "path" "path/filepath" - "reflect" "runtime" + "strings" "testing" ) @@ -51,17 +54,41 @@ func TestScan(t *testing.T) { t.Errorf("json missing test import net/http (%q)", testImports) } } - -func TestScanStar(t *testing.T) { +func TestScanDir(t *testing.T) { testenv.MustHaveGoBuild(t) - imports, _, err := ScanDir("testdata/import1", map[string]bool{"*": true}) + dirs, err := ioutil.ReadDir("testdata") if err != nil { t.Fatal(err) } + for _, dir := range dirs { + if !dir.IsDir() || strings.HasPrefix(dir.Name(), ".") { + continue + } + t.Run(dir.Name(), func(t *testing.T) { + tagsData, err := ioutil.ReadFile(filepath.Join("testdata", dir.Name(), "tags.txt")) + if err != nil { + t.Fatalf("error reading tags: %v", err) + } + tags := make(map[string]bool) + for _, t := range strings.Fields(string(tagsData)) { + tags[t] = true + } - want := []string{"import1", "import2", "import3", "import4"} - if !reflect.DeepEqual(imports, want) { - t.Errorf("ScanDir testdata/import1:\nhave %v\nwant %v", imports, want) + wantData, err := ioutil.ReadFile(filepath.Join("testdata", dir.Name(), "want.txt")) + if err != nil { + t.Fatalf("error reading want: %v", err) + } + want := string(bytes.TrimSpace(wantData)) + + imports, _, err := ScanDir(path.Join("testdata", dir.Name()), tags) + if err != nil { + t.Fatal(err) + } + got := strings.Join(imports, "\n") + if got != want { + t.Errorf("ScanDir: got imports:\n%s\n\nwant:\n%s", got, want) + } + }) } } diff --git a/src/cmd/go/internal/imports/testdata/android/a_android.go b/src/cmd/go/internal/imports/testdata/android/a_android.go new file mode 100644 index 0000000000..2ed972eca5 --- /dev/null +++ b/src/cmd/go/internal/imports/testdata/android/a_android.go @@ -0,0 +1,3 @@ +package android + +import _ "a" diff --git a/src/cmd/go/internal/imports/testdata/android/b_android_arm64.go b/src/cmd/go/internal/imports/testdata/android/b_android_arm64.go new file mode 100644 index 0000000000..ee9c312b5d --- /dev/null +++ b/src/cmd/go/internal/imports/testdata/android/b_android_arm64.go @@ -0,0 +1,3 @@ +package android + +import _ "b" diff --git a/src/cmd/go/internal/imports/testdata/android/c_linux.go b/src/cmd/go/internal/imports/testdata/android/c_linux.go new file mode 100644 index 0000000000..91624ce637 --- /dev/null +++ b/src/cmd/go/internal/imports/testdata/android/c_linux.go @@ -0,0 +1,3 @@ +package android + +import _ "c" diff --git a/src/cmd/go/internal/imports/testdata/android/d_linux_arm64.go b/src/cmd/go/internal/imports/testdata/android/d_linux_arm64.go new file mode 100644 index 0000000000..34e07df247 --- /dev/null +++ b/src/cmd/go/internal/imports/testdata/android/d_linux_arm64.go @@ -0,0 +1,3 @@ +package android + +import _ "d" diff --git a/src/cmd/go/internal/imports/testdata/android/e.go b/src/cmd/go/internal/imports/testdata/android/e.go new file mode 100644 index 0000000000..d9b2db769b --- /dev/null +++ b/src/cmd/go/internal/imports/testdata/android/e.go @@ -0,0 +1,5 @@ +// +build android + +package android + +import _ "e" diff --git a/src/cmd/go/internal/imports/testdata/android/f.go b/src/cmd/go/internal/imports/testdata/android/f.go new file mode 100644 index 0000000000..281e4dd6b9 --- /dev/null +++ b/src/cmd/go/internal/imports/testdata/android/f.go @@ -0,0 +1,5 @@ +// +build linux + +package android + +import _ "f" diff --git a/src/cmd/go/internal/imports/testdata/android/g.go b/src/cmd/go/internal/imports/testdata/android/g.go new file mode 100644 index 0000000000..66a789c0ad --- /dev/null +++ b/src/cmd/go/internal/imports/testdata/android/g.go @@ -0,0 +1,5 @@ +// +build !android + +package android + +import _ "g" diff --git a/src/cmd/go/internal/imports/testdata/android/tags.txt b/src/cmd/go/internal/imports/testdata/android/tags.txt new file mode 100644 index 0000000000..aaf5a6b91d --- /dev/null +++ b/src/cmd/go/internal/imports/testdata/android/tags.txt @@ -0,0 +1 @@ +android arm64 \ No newline at end of file diff --git a/src/cmd/go/internal/imports/testdata/android/want.txt b/src/cmd/go/internal/imports/testdata/android/want.txt new file mode 100644 index 0000000000..0fdf397db0 --- /dev/null +++ b/src/cmd/go/internal/imports/testdata/android/want.txt @@ -0,0 +1,6 @@ +a +b +c +d +e +f diff --git a/src/cmd/go/internal/imports/testdata/star/tags.txt b/src/cmd/go/internal/imports/testdata/star/tags.txt new file mode 100644 index 0000000000..f59ec20aab --- /dev/null +++ b/src/cmd/go/internal/imports/testdata/star/tags.txt @@ -0,0 +1 @@ +* \ No newline at end of file diff --git a/src/cmd/go/internal/imports/testdata/star/want.txt b/src/cmd/go/internal/imports/testdata/star/want.txt new file mode 100644 index 0000000000..139f5f4975 --- /dev/null +++ b/src/cmd/go/internal/imports/testdata/star/want.txt @@ -0,0 +1,4 @@ +import1 +import2 +import3 +import4 diff --git a/src/cmd/go/internal/imports/testdata/import1/x.go b/src/cmd/go/internal/imports/testdata/star/x.go similarity index 100% rename from src/cmd/go/internal/imports/testdata/import1/x.go rename to src/cmd/go/internal/imports/testdata/star/x.go diff --git a/src/cmd/go/internal/imports/testdata/import1/x1.go b/src/cmd/go/internal/imports/testdata/star/x1.go similarity index 100% rename from src/cmd/go/internal/imports/testdata/import1/x1.go rename to src/cmd/go/internal/imports/testdata/star/x1.go diff --git a/src/cmd/go/internal/imports/testdata/import1/x_darwin.go b/src/cmd/go/internal/imports/testdata/star/x_darwin.go similarity index 100% rename from src/cmd/go/internal/imports/testdata/import1/x_darwin.go rename to src/cmd/go/internal/imports/testdata/star/x_darwin.go diff --git a/src/cmd/go/internal/imports/testdata/import1/x_windows.go b/src/cmd/go/internal/imports/testdata/star/x_windows.go similarity index 100% rename from src/cmd/go/internal/imports/testdata/import1/x_windows.go rename to src/cmd/go/internal/imports/testdata/star/x_windows.go diff --git a/src/cmd/go/internal/list/list.go b/src/cmd/go/internal/list/list.go index f3cb4e47ec..e7e78e7c59 100644 --- a/src/cmd/go/internal/list/list.go +++ b/src/cmd/go/internal/list/list.go @@ -60,7 +60,7 @@ to -f '{{.ImportPath}}'. The struct being passed to the template is: StaleReason string // explanation for Stale==true Root string // Go root or Go path dir containing this package ConflictDir string // this directory shadows Dir in $GOPATH - BinaryOnly bool // binary-only package: cannot be recompiled from sources + BinaryOnly bool // binary-only package (no longer supported) ForTest string // package is only for use in named test Export string // file containing export data (when using -export) Module *Module // info about package's containing module, if any (can be nil) @@ -202,17 +202,18 @@ When listing modules, the -f flag still specifies a format template applied to a Go struct, but now a Module struct: type Module struct { - Path string // module path - Version string // module version - Versions []string // available module versions (with -versions) - Replace *Module // replaced by this module - Time *time.Time // time version was created - Update *Module // available update, if any (with -u) - Main bool // is this the main module? - Indirect bool // is this module only an indirect dependency of main module? - Dir string // directory holding files for this module, if any - GoMod string // path to go.mod file for this module, if any - Error *ModuleError // error loading module + Path string // module path + Version string // module version + Versions []string // available module versions (with -versions) + Replace *Module // replaced by this module + Time *time.Time // time version was created + Update *Module // available update, if any (with -u) + Main bool // is this the main module? + Indirect bool // is this module only an indirect dependency of main module? + Dir string // directory holding files for this module, if any + GoMod string // path to go.mod file for this module, if any + GoVersion string // go version used in module + Error *ModuleError // error loading module } type ModuleError struct { @@ -446,37 +447,34 @@ func runList(cmd *base.Command, args []string) { continue } if len(p.TestGoFiles)+len(p.XTestGoFiles) > 0 { - pmain, ptest, pxtest, err := load.TestPackagesFor(p, nil) - if err != nil { - if *listE { - pkgs = append(pkgs, &load.Package{ - PackagePublic: load.PackagePublic{ - ImportPath: p.ImportPath + ".test", - Error: &load.PackageError{Err: err.Error()}, - }, - }) - continue + var pmain, ptest, pxtest *load.Package + var err error + if *listE { + pmain, ptest, pxtest = load.TestPackagesAndErrors(p, nil) + } else { + pmain, ptest, pxtest, err = load.TestPackagesFor(p, nil) + if err != nil { + base.Errorf("can't load test package: %s", err) } - base.Errorf("can't load test package: %s", err) - continue } - pkgs = append(pkgs, pmain) - if ptest != nil { + if pmain != nil { + pkgs = append(pkgs, pmain) + data := pmain.Internal.TestmainGo + h := cache.NewHash("testmain") + h.Write([]byte("testmain\n")) + h.Write(data) + out, _, err := c.Put(h.Sum(), bytes.NewReader(data)) + if err != nil { + base.Fatalf("%s", err) + } + pmain.GoFiles[0] = c.OutputFile(out) + } + if ptest != nil && ptest != p { pkgs = append(pkgs, ptest) } if pxtest != nil { pkgs = append(pkgs, pxtest) } - - data := *pmain.Internal.TestmainGo - h := cache.NewHash("testmain") - h.Write([]byte("testmain\n")) - h.Write(data) - out, _, err := c.Put(h.Sum(), bytes.NewReader(data)) - if err != nil { - base.Fatalf("%s", err) - } - pmain.GoFiles[0] = c.OutputFile(out) } } } diff --git a/src/cmd/go/internal/load/pkg.go b/src/cmd/go/internal/load/pkg.go index 49bd98216c..12bf0e1f7a 100644 --- a/src/cmd/go/internal/load/pkg.go +++ b/src/cmd/go/internal/load/pkg.go @@ -7,6 +7,7 @@ package load import ( "bytes" + "errors" "fmt" "go/build" "go/token" @@ -14,6 +15,7 @@ import ( "os" pathpkg "path" "path/filepath" + "runtime" "sort" "strconv" "strings" @@ -23,6 +25,7 @@ import ( "cmd/go/internal/base" "cmd/go/internal/cfg" "cmd/go/internal/modinfo" + "cmd/go/internal/par" "cmd/go/internal/search" "cmd/go/internal/str" ) @@ -32,14 +35,14 @@ var ( ModInit func() // module hooks; nil if module use is disabled - ModBinDir func() string // return effective bin directory - ModLookup func(path string) (dir, realPath string, err error) // lookup effective meaning of import - ModPackageModuleInfo func(path string) *modinfo.ModulePublic // return module info for Package struct - ModImportPaths func(args []string) []*search.Match // expand import paths - ModPackageBuildInfo func(main string, deps []string) string // return module info to embed in binary - ModInfoProg func(info string) []byte // wrap module info in .go code for binary - ModImportFromFiles func([]string) // update go.mod to add modules for imports in these files - ModDirImportPath func(string) string // return effective import path for directory + ModBinDir func() string // return effective bin directory + ModLookup func(parentPath string, parentIsStd bool, path string) (dir, realPath string, err error) // lookup effective meaning of import + ModPackageModuleInfo func(path string) *modinfo.ModulePublic // return module info for Package struct + ModImportPaths func(args []string) []*search.Match // expand import paths + ModPackageBuildInfo func(main string, deps []string) string // return module info to embed in binary + ModInfoProg func(info string) []byte // wrap module info in .go code for binary + ModImportFromFiles func([]string) // update go.mod to add modules for imports in these files + ModDirImportPath func(string) string // return effective import path for directory ) var IgnoreImports bool // control whether we ignore imports in packages @@ -174,7 +177,8 @@ type PackageInternal struct { OmitDebug bool // tell linker not to write debug information GobinSubdir bool // install target would be subdir of GOBIN BuildInfo string // add this info to package main - TestmainGo *[]byte // content for _testmain.go + TestinginitGo []byte // content for _testinginit.go + TestmainGo []byte // content for _testmain.go Asmflags []string // -asmflags for this package Gcflags []string // -gcflags for this package @@ -362,38 +366,56 @@ func (sp *ImportStack) shorterThan(t []string) bool { return false // they are equal } -// packageCache is a lookup cache for loadPackage, +// packageCache is a lookup cache for LoadImport, // so that if we look up a package multiple times // we return the same pointer each time. var packageCache = map[string]*Package{} +// ClearPackageCache clears the in-memory package cache and the preload caches. +// It is only for use by GOPATH-based "go get". +// TODO(jayconrod): When GOPATH-based "go get" is removed, delete this function. func ClearPackageCache() { for name := range packageCache { delete(packageCache, name) } + resolvedImportCache.Clear() + packageDataCache.Clear() } +// ClearPackageCachePartial clears packages with the given import paths from the +// in-memory package cache and the preload caches. It is only for use by +// GOPATH-based "go get". +// TODO(jayconrod): When GOPATH-based "go get" is removed, delete this function. func ClearPackageCachePartial(args []string) { + shouldDelete := make(map[string]bool) for _, arg := range args { - p := packageCache[arg] - if p != nil { - delete(packageCache, p.Dir) - delete(packageCache, p.ImportPath) + shouldDelete[arg] = true + if p := packageCache[arg]; p != nil { + delete(packageCache, arg) } } + resolvedImportCache.DeleteIf(func(key interface{}) bool { + return shouldDelete[key.(importSpec).path] + }) + packageDataCache.DeleteIf(func(key interface{}) bool { + return shouldDelete[key.(string)] + }) } -// ReloadPackageNoFlags is like LoadPackageNoFlags but makes sure +// ReloadPackageNoFlags is like LoadImport but makes sure // not to use the package cache. // It is only for use by GOPATH-based "go get". // TODO(rsc): When GOPATH-based "go get" is removed, delete this function. func ReloadPackageNoFlags(arg string, stk *ImportStack) *Package { p := packageCache[arg] if p != nil { - delete(packageCache, p.Dir) - delete(packageCache, p.ImportPath) + delete(packageCache, arg) + resolvedImportCache.DeleteIf(func(key interface{}) bool { + return key.(importSpec).path == p.ImportPath + }) + packageDataCache.Delete(p.ImportPath) } - return LoadPackageNoFlags(arg, stk) + return LoadImport(arg, base.Cwd, nil, stk, nil, 0) } // dirToImportPath returns the pseudo-import path we use for a package @@ -446,6 +468,10 @@ const ( // this package, as part of a bigger load operation, and by GOPATH-based "go get". // TODO(rsc): When GOPATH-based "go get" is removed, unexport this function. func LoadImport(path, srcDir string, parent *Package, stk *ImportStack, importPos []token.Position, mode int) *Package { + return loadImport(nil, path, srcDir, parent, stk, importPos, mode) +} + +func loadImport(pre *preload, path, srcDir string, parent *Package, stk *ImportStack, importPos []token.Position, mode int) *Package { if path == "" { panic("LoadImport called with empty package path") } @@ -453,125 +479,51 @@ func LoadImport(path, srcDir string, parent *Package, stk *ImportStack, importPo stk.Push(path) defer stk.Pop() - if strings.HasPrefix(path, "mod/") { - // Paths beginning with "mod/" might accidentally - // look in the module cache directory tree in $GOPATH/pkg/mod/. - // This prefix is owned by the Go core for possible use in the - // standard library (since it does not begin with a domain name), - // so it's OK to disallow entirely. - return &Package{ - PackagePublic: PackagePublic{ - ImportPath: path, - Error: &PackageError{ - ImportStack: stk.Copy(), - Err: fmt.Sprintf("disallowed import path %q", path), - }, - }, - } - } - - if strings.Contains(path, "@") { - var text string - if cfg.ModulesEnabled { - text = "can only use path@version syntax with 'go get'" - } else { - text = "cannot use path@version syntax in GOPATH mode" - } - return &Package{ - PackagePublic: PackagePublic{ - ImportPath: path, - Error: &PackageError{ - ImportStack: stk.Copy(), - Err: text, - }, - }, - } - } - - parentPath := "" + var parentPath, parentRoot string + parentIsStd := false if parent != nil { parentPath = parent.ImportPath + parentRoot = parent.Root + parentIsStd = parent.Standard } - - // Determine canonical identifier for this package. - // For a local import the identifier is the pseudo-import path - // we create from the full directory to the package. - // Otherwise it is the usual import path. - // For vendored imports, it is the expanded form. - importPath := path - origPath := path - isLocal := build.IsLocalImport(path) - var modDir string - var modErr error - if isLocal { - importPath = dirToImportPath(filepath.Join(srcDir, path)) - } else if cfg.ModulesEnabled { - var p string - modDir, p, modErr = ModLookup(path) - if modErr == nil { - importPath = p + bp, loaded, err := loadPackageData(path, parentPath, srcDir, parentRoot, parentIsStd, mode) + if loaded && pre != nil && !IgnoreImports { + pre.preloadImports(bp.Imports, bp) + } + if bp == nil { + return &Package{ + PackagePublic: PackagePublic{ + ImportPath: path, + Error: &PackageError{ + ImportStack: stk.Copy(), + Err: err.Error(), + }, + }, } - } else if mode&ResolveImport != 0 { - // We do our own path resolution, because we want to - // find out the key to use in packageCache without the - // overhead of repeated calls to buildContext.Import. - // The code is also needed in a few other places anyway. - path = ResolveImportPath(parent, path) - importPath = path - } else if mode&ResolveModule != 0 { - path = ModuleImportPath(parent, path) - importPath = path } + importPath := bp.ImportPath p := packageCache[importPath] if p != nil { p = reusePackage(p, stk) } else { p = new(Package) - p.Internal.Local = isLocal + p.Internal.Local = build.IsLocalImport(path) p.ImportPath = importPath packageCache[importPath] = p // Load package. - // Import always returns bp != nil, even if an error occurs, + // loadPackageData may return bp != nil even if an error occurs, // in order to return partial information. - var bp *build.Package - var err error - if modDir != "" { - bp, err = cfg.BuildContext.ImportDir(modDir, 0) - } else if modErr != nil { - bp = new(build.Package) - err = fmt.Errorf("unknown import path %q: %v", importPath, modErr) - } else if cfg.ModulesEnabled && path != "unsafe" { - bp = new(build.Package) - err = fmt.Errorf("unknown import path %q: internal error: module loader did not resolve import", importPath) - } else { - buildMode := build.ImportComment - if mode&ResolveImport == 0 || path != origPath { - // Not vendoring, or we already found the vendored path. - buildMode |= build.IgnoreVendor - } - bp, err = cfg.BuildContext.Import(path, srcDir, buildMode) - } - bp.ImportPath = importPath - if cfg.GOBIN != "" { - bp.BinDir = cfg.GOBIN - } else if cfg.ModulesEnabled { - bp.BinDir = ModBinDir() - } - if modDir == "" && err == nil && !isLocal && bp.ImportComment != "" && bp.ImportComment != path && - !strings.Contains(path, "/vendor/") && !strings.HasPrefix(path, "vendor/") { - err = fmt.Errorf("code in directory %s expects import %q", bp.Dir, bp.ImportComment) - } p.load(stk, bp, err) if p.Error != nil && p.Error.Pos == "" { p = setErrorPos(p, importPos) } - if modDir == "" && origPath != cleanImport(origPath) { + if !cfg.ModulesEnabled && path != cleanImport(path) { p.Error = &PackageError{ ImportStack: stk.Copy(), - Err: fmt.Sprintf("non-canonical import path: %q should be %q", origPath, pathpkg.Clean(origPath)), + Err: fmt.Sprintf("non-canonical import path: %q should be %q", path, pathpkg.Clean(path)), } p.Incomplete = true } @@ -582,7 +534,7 @@ func LoadImport(path, srcDir string, parent *Package, stk *ImportStack, importPo return setErrorPos(perr, importPos) } if mode&ResolveImport != 0 { - if perr := disallowVendor(srcDir, parent, parentPath, origPath, p, stk); perr != p { + if perr := disallowVendor(srcDir, parent, parentPath, path, p, stk); perr != p { return setErrorPos(perr, importPos) } } @@ -598,9 +550,13 @@ func LoadImport(path, srcDir string, parent *Package, stk *ImportStack, importPo if p.Internal.Local && parent != nil && !parent.Internal.Local { perr := *p + errMsg := fmt.Sprintf("local import %q in non-local package", path) + if path == "." { + errMsg = "cannot import current directory" + } perr.Error = &PackageError{ ImportStack: stk.Copy(), - Err: fmt.Sprintf("local import %q in non-local package", path), + Err: errMsg, } return setErrorPos(&perr, importPos) } @@ -617,6 +573,244 @@ func setErrorPos(p *Package, importPos []token.Position) *Package { return p } +// loadPackageData loads information needed to construct a *Package. The result +// is cached, and later calls to loadPackageData for the same package will return +// the same data. +// +// loadPackageData returns a non-nil package even if err is non-nil unless +// the package path is malformed (for example, the path contains "mod/" or "@"). +// +// loadPackageData returns a boolean, loaded, which is true if this is the +// first time the package was loaded. Callers may preload imports in this case. +func loadPackageData(path, parentPath, parentDir, parentRoot string, parentIsStd bool, mode int) (bp *build.Package, loaded bool, err error) { + if path == "" { + panic("loadPackageData called with empty package path") + } + + if strings.HasPrefix(path, "mod/") { + // Paths beginning with "mod/" might accidentally + // look in the module cache directory tree in $GOPATH/pkg/mod/. + // This prefix is owned by the Go core for possible use in the + // standard library (since it does not begin with a domain name), + // so it's OK to disallow entirely. + return nil, false, fmt.Errorf("disallowed import path %q", path) + } + + if strings.Contains(path, "@") { + if cfg.ModulesEnabled { + return nil, false, errors.New("can only use path@version syntax with 'go get'") + } else { + return nil, false, errors.New("cannot use path@version syntax in GOPATH mode") + } + } + + // Determine canonical package path and directory. + // For a local import the identifier is the pseudo-import path + // we create from the full directory to the package. + // Otherwise it is the usual import path. + // For vendored imports, it is the expanded form. + importKey := importSpec{ + path: path, + parentPath: parentPath, + parentDir: parentDir, + parentRoot: parentRoot, + parentIsStd: parentIsStd, + mode: mode, + } + r := resolvedImportCache.Do(importKey, func() interface{} { + var r resolvedImport + if build.IsLocalImport(path) { + r.dir = filepath.Join(parentDir, path) + r.path = dirToImportPath(r.dir) + } else if cfg.ModulesEnabled { + r.dir, r.path, r.err = ModLookup(parentPath, parentIsStd, path) + } else if mode&ResolveImport != 0 { + // We do our own path resolution, because we want to + // find out the key to use in packageCache without the + // overhead of repeated calls to buildContext.Import. + // The code is also needed in a few other places anyway. + r.path = resolveImportPath(path, parentPath, parentDir, parentRoot, parentIsStd) + } else if mode&ResolveModule != 0 { + r.path = moduleImportPath(path, parentPath, parentDir, parentRoot) + } + if r.path == "" { + r.path = path + } + return r + }).(resolvedImport) + // Invariant: r.path is set to the resolved import path. If the path cannot + // be resolved, r.path is set to path, the source import path. + // r.path is never empty. + + // Load the package from its directory. If we already found the package's + // directory when resolving its import path, use that. + data := packageDataCache.Do(r.path, func() interface{} { + loaded = true + var data packageData + if r.dir != "" { + var buildMode build.ImportMode + if !cfg.ModulesEnabled { + buildMode = build.ImportComment + } + data.p, data.err = cfg.BuildContext.ImportDir(r.dir, buildMode) + } else if r.err != nil { + data.p = new(build.Package) + data.err = fmt.Errorf("unknown import path %q: %v", r.path, r.err) + } else if cfg.ModulesEnabled && path != "unsafe" { + data.p = new(build.Package) + data.err = fmt.Errorf("unknown import path %q: internal error: module loader did not resolve import", r.path) + } else { + buildMode := build.ImportComment + if mode&ResolveImport == 0 || r.path != path { + // Not vendoring, or we already found the vendored path. + buildMode |= build.IgnoreVendor + } + data.p, data.err = cfg.BuildContext.Import(r.path, parentDir, buildMode) + } + data.p.ImportPath = r.path + if cfg.GOBIN != "" { + data.p.BinDir = cfg.GOBIN + } else if cfg.ModulesEnabled && !data.p.Goroot { + data.p.BinDir = ModBinDir() + } + if !cfg.ModulesEnabled && data.err == nil && + data.p.ImportComment != "" && data.p.ImportComment != path && + !strings.Contains(path, "/vendor/") && !strings.HasPrefix(path, "vendor/") { + data.err = fmt.Errorf("code in directory %s expects import %q", data.p.Dir, data.p.ImportComment) + } + return data + }).(packageData) + + return data.p, loaded, data.err +} + +// importSpec describes an import declaration in source code. It is used as a +// cache key for resolvedImportCache. +type importSpec struct { + path string + parentPath, parentDir, parentRoot string + parentIsStd bool + mode int +} + +// resolvedImport holds a canonical identifier for a package. It may also contain +// a path to the package's directory and an error if one occurred. resolvedImport +// is the value type in resolvedImportCache. +type resolvedImport struct { + path, dir string + err error +} + +// packageData holds information loaded from a package. It is the value type +// in packageDataCache. +type packageData struct { + p *build.Package + err error +} + +// resolvedImportCache maps import strings (importSpec) to canonical package names +// (resolvedImport). +var resolvedImportCache par.Cache + +// packageDataCache maps canonical package names (string) to package metadata +// (packageData). +var packageDataCache par.Cache + +// preloadWorkerCount is the number of concurrent goroutines that can load +// packages. Experimentally, there are diminishing returns with more than +// 4 workers. This was measured on the following machines. +// +// * MacBookPro with a 4-core Intel Core i7 CPU +// * Linux workstation with 6-core Intel Xeon CPU +// * Linux workstation with 24-core Intel Xeon CPU +// +// It is very likely (though not confirmed) that this workload is limited +// by memory bandwidth. We don't have a good way to determine the number of +// workers that would saturate the bus though, so runtime.GOMAXPROCS +// seems like a reasonable default. +var preloadWorkerCount = runtime.GOMAXPROCS(0) + +// preload holds state for managing concurrent preloading of package data. +// +// A preload should be created with newPreload before loading a large +// package graph. flush must be called when package loading is complete +// to ensure preload goroutines are no longer active. This is necessary +// because of global mutable state that cannot safely be read and written +// concurrently. In particular, packageDataCache may be cleared by "go get" +// in GOPATH mode, and modload.loaded (accessed via ModLookup) may be +// modified by modload.ImportPaths (ModImportPaths). +type preload struct { + cancel chan struct{} + sema chan struct{} +} + +// newPreload creates a new preloader. flush must be called later to avoid +// accessing global state while it is being modified. +func newPreload() *preload { + pre := &preload{ + cancel: make(chan struct{}), + sema: make(chan struct{}, preloadWorkerCount), + } + return pre +} + +// preloadMatches loads data for package paths matched by patterns. +// When preloadMatches returns, some packages may not be loaded yet, but +// loadPackageData and loadImport are always safe to call. +func (pre *preload) preloadMatches(matches []*search.Match) { + for _, m := range matches { + for _, pkg := range m.Pkgs { + select { + case <-pre.cancel: + return + case pre.sema <- struct{}{}: + go func(pkg string) { + mode := 0 // don't use vendoring or module import resolution + bp, loaded, err := loadPackageData(pkg, "", base.Cwd, "", false, mode) + <-pre.sema + if bp != nil && loaded && err == nil && !IgnoreImports { + pre.preloadImports(bp.Imports, bp) + } + }(pkg) + } + } + } +} + +// preloadImports queues a list of imports for preloading. +// When preloadImports returns, some packages may not be loaded yet, +// but loadPackageData and loadImport are always safe to call. +func (pre *preload) preloadImports(imports []string, parent *build.Package) { + parentIsStd := parent.Goroot && parent.ImportPath != "" && search.IsStandardImportPath(parent.ImportPath) + for _, path := range imports { + if path == "C" || path == "unsafe" { + continue + } + select { + case <-pre.cancel: + return + case pre.sema <- struct{}{}: + go func(path string) { + bp, loaded, err := loadPackageData(path, parent.ImportPath, parent.Dir, parent.Root, parentIsStd, ResolveImport) + <-pre.sema + if bp != nil && loaded && err == nil && !IgnoreImports { + pre.preloadImports(bp.Imports, bp) + } + }(path) + } + } +} + +// flush stops pending preload operations. flush blocks until preload calls to +// loadPackageData have completed. The preloader will not make any new calls +// to loadPackageData. +func (pre *preload) flush() { + close(pre.cancel) + for i := 0; i < preloadWorkerCount; i++ { + pre.sema <- struct{}{} + } +} + func cleanImport(path string) string { orig := path path = pathpkg.Clean(path) @@ -626,18 +820,13 @@ func cleanImport(path string) string { return path } -var isDirCache = map[string]bool{} +var isDirCache par.Cache func isDir(path string) bool { - result, ok := isDirCache[path] - if ok { - return result - } - - fi, err := os.Stat(path) - result = err == nil && fi.IsDir() - isDirCache[path] = result - return result + return isDirCache.Do(path, func() interface{} { + fi, err := os.Stat(path) + return err == nil && fi.IsDir() + }).(bool) } // ResolveImportPath returns the true meaning of path when it appears in parent. @@ -646,31 +835,44 @@ func isDir(path string) bool { // If vendor expansion doesn't trigger, then the path is also subject to // Go 1.11 module legacy conversion (golang.org/issue/25069). func ResolveImportPath(parent *Package, path string) (found string) { + var parentPath, parentDir, parentRoot string + parentIsStd := false + if parent != nil { + parentPath = parent.ImportPath + parentDir = parent.Dir + parentRoot = parent.Root + parentIsStd = parent.Standard + } + return resolveImportPath(path, parentPath, parentDir, parentRoot, parentIsStd) +} + +func resolveImportPath(path, parentPath, parentDir, parentRoot string, parentIsStd bool) (found string) { if cfg.ModulesEnabled { - if _, p, e := ModLookup(path); e == nil { + if _, p, e := ModLookup(parentPath, parentIsStd, path); e == nil { return p } return path } - found = VendoredImportPath(parent, path) + found = vendoredImportPath(path, parentPath, parentDir, parentRoot) if found != path { return found } - return ModuleImportPath(parent, path) + return moduleImportPath(path, parentPath, parentDir, parentRoot) } // dirAndRoot returns the source directory and workspace root // for the package p, guaranteeing that root is a path prefix of dir. -func dirAndRoot(p *Package) (dir, root string) { - dir = filepath.Clean(p.Dir) - root = filepath.Join(p.Root, "src") - if !str.HasFilePathPrefix(dir, root) || p.ImportPath != "command-line-arguments" && filepath.Join(root, p.ImportPath) != dir { +func dirAndRoot(path string, dir, root string) (string, string) { + origDir, origRoot := dir, root + dir = filepath.Clean(dir) + root = filepath.Join(root, "src") + if !str.HasFilePathPrefix(dir, root) || path != "command-line-arguments" && filepath.Join(root, path) != dir { // Look for symlinks before reporting error. dir = expandPath(dir) root = expandPath(root) } - if !str.HasFilePathPrefix(dir, root) || len(dir) <= len(root) || dir[len(root)] != filepath.Separator || p.ImportPath != "command-line-arguments" && !p.Internal.Local && filepath.Join(root, p.ImportPath) != dir { + if !str.HasFilePathPrefix(dir, root) || len(dir) <= len(root) || dir[len(root)] != filepath.Separator || path != "command-line-arguments" && !build.IsLocalImport(path) && filepath.Join(root, path) != dir { base.Fatalf("unexpected directory layout:\n"+ " import path: %s\n"+ " root: %s\n"+ @@ -678,27 +880,27 @@ func dirAndRoot(p *Package) (dir, root string) { " expand root: %s\n"+ " expand dir: %s\n"+ " separator: %s", - p.ImportPath, - filepath.Join(p.Root, "src"), - filepath.Clean(p.Dir), - root, - dir, + path, + filepath.Join(origRoot, "src"), + filepath.Clean(origDir), + origRoot, + origDir, string(filepath.Separator)) } return dir, root } -// VendoredImportPath returns the vendor-expansion of path when it appears in parent. +// vendoredImportPath returns the vendor-expansion of path when it appears in parent. // If parent is x/y/z, then path might expand to x/y/z/vendor/path, x/y/vendor/path, // x/vendor/path, vendor/path, or else stay path if none of those exist. -// VendoredImportPath returns the expanded path or, if no expansion is found, the original. -func VendoredImportPath(parent *Package, path string) (found string) { - if parent == nil || parent.Root == "" { +// vendoredImportPath returns the expanded path or, if no expansion is found, the original. +func vendoredImportPath(path, parentPath, parentDir, parentRoot string) (found string) { + if parentRoot == "" { return path } - dir, root := dirAndRoot(parent) + dir, root := dirAndRoot(parentPath, parentDir, parentRoot) vpath := "vendor/" + path for i := len(dir); i >= len(root); i-- { @@ -714,7 +916,7 @@ func VendoredImportPath(parent *Package, path string) (found string) { } targ := filepath.Join(dir[:i], vpath) if isDir(targ) && hasGoFiles(targ) { - importPath := parent.ImportPath + importPath := parentPath if importPath == "command-line-arguments" { // If parent.ImportPath is 'command-line-arguments'. // set to relative directory to root (also chopped root directory) @@ -744,54 +946,48 @@ func VendoredImportPath(parent *Package, path string) (found string) { var ( modulePrefix = []byte("\nmodule ") - goModPathCache = make(map[string]string) + goModPathCache par.Cache ) // goModPath returns the module path in the go.mod in dir, if any. func goModPath(dir string) (path string) { - path, ok := goModPathCache[dir] - if ok { - return path - } - defer func() { - goModPathCache[dir] = path - }() - - data, err := ioutil.ReadFile(filepath.Join(dir, "go.mod")) - if err != nil { - return "" - } - var i int - if bytes.HasPrefix(data, modulePrefix[1:]) { - i = 0 - } else { - i = bytes.Index(data, modulePrefix) - if i < 0 { - return "" - } - i++ - } - line := data[i:] - - // Cut line at \n, drop trailing \r if present. - if j := bytes.IndexByte(line, '\n'); j >= 0 { - line = line[:j] - } - if line[len(line)-1] == '\r' { - line = line[:len(line)-1] - } - line = line[len("module "):] - - // If quoted, unquote. - path = strings.TrimSpace(string(line)) - if path != "" && path[0] == '"' { - s, err := strconv.Unquote(path) + return goModPathCache.Do(dir, func() interface{} { + data, err := ioutil.ReadFile(filepath.Join(dir, "go.mod")) if err != nil { return "" } - path = s - } - return path + var i int + if bytes.HasPrefix(data, modulePrefix[1:]) { + i = 0 + } else { + i = bytes.Index(data, modulePrefix) + if i < 0 { + return "" + } + i++ + } + line := data[i:] + + // Cut line at \n, drop trailing \r if present. + if j := bytes.IndexByte(line, '\n'); j >= 0 { + line = line[:j] + } + if line[len(line)-1] == '\r' { + line = line[:len(line)-1] + } + line = line[len("module "):] + + // If quoted, unquote. + path = strings.TrimSpace(string(line)) + if path != "" && path[0] == '"' { + s, err := strconv.Unquote(path) + if err != nil { + return "" + } + path = s + } + return path + }).(string) } // findVersionElement returns the slice indices of the final version element /vN in path. @@ -800,7 +996,7 @@ func findVersionElement(path string) (i, j int) { j = len(path) for i = len(path) - 1; i >= 0; i-- { if path[i] == '/' { - if isVersionElement(path[i:j]) { + if isVersionElement(path[i+1 : j]) { return i, j } j = i @@ -812,10 +1008,10 @@ func findVersionElement(path string) (i, j int) { // isVersionElement reports whether s is a well-formed path version element: // v2, v3, v10, etc, but not v0, v05, v1. func isVersionElement(s string) bool { - if len(s) < 3 || s[0] != '/' || s[1] != 'v' || s[2] == '0' || s[2] == '1' && len(s) == 3 { + if len(s) < 2 || s[0] != 'v' || s[1] == '0' || s[1] == '1' && len(s) == 2 { return false } - for i := 2; i < len(s); i++ { + for i := 1; i < len(s); i++ { if s[i] < '0' || '9' < s[i] { return false } @@ -823,7 +1019,7 @@ func isVersionElement(s string) bool { return true } -// ModuleImportPath translates import paths found in go modules +// moduleImportPath translates import paths found in go modules // back down to paths that can be resolved in ordinary builds. // // Define “new†code as code with a go.mod file in the same directory @@ -831,8 +1027,8 @@ func isVersionElement(s string) bool { // x/y/v2/z does not exist and x/y/go.mod says “module x/y/v2â€, // then go build will read the import as x/y/z instead. // See golang.org/issue/25069. -func ModuleImportPath(parent *Package, path string) (found string) { - if parent == nil || parent.Root == "" { +func moduleImportPath(path, parentPath, parentDir, parentRoot string) (found string) { + if parentRoot == "" { return path } @@ -844,7 +1040,7 @@ func ModuleImportPath(parent *Package, path string) (found string) { return path } - dir, root := dirAndRoot(parent) + dir, root := dirAndRoot(parentPath, parentDir, parentRoot) // Consider dir and parents, up to and including root. for i := len(dir); i >= len(root); i-- { @@ -967,6 +1163,13 @@ func disallowInternal(srcDir string, importer *Package, importerPath string, p * return p } + // The sort package depends on internal/reflectlite, but during bootstrap + // the path rewriting causes the normal internal checks to fail. + // Instead, just ignore the internal rules during bootstrap. + if p.Standard && strings.HasPrefix(importerPath, "bootstrap/") { + return p + } + // The stack includes p.ImportPath. // If that's the only thing on the stack, we started // with a name given on the command line, not an @@ -1184,6 +1387,26 @@ var cgoSyscallExclude = map[string]bool{ var foldPath = make(map[string]string) +// DefaultExecName returns the default executable name +// for a package with the import path importPath. +// +// The default executable name is the last element of the import path. +// In module-aware mode, an additional rule is used on import paths +// consisting of two or more path elements. If the last element is +// a vN path element specifying the major version, then the +// second last element of the import path is used instead. +func DefaultExecName(importPath string) string { + _, elem := pathpkg.Split(importPath) + if cfg.ModulesEnabled { + // If this is example.com/mycmd/v2, it's more useful to + // install it as mycmd than as v2. See golang.org/issue/24667. + if elem != importPath && isVersionElement(elem) { + _, elem = pathpkg.Split(pathpkg.Dir(importPath)) + } + } + return elem +} + // load populates p using information from bp, err, which should // be the result of calling build.Context.Import. func (p *Package) load(stk *ImportStack, bp *build.Package, err error) { @@ -1224,38 +1447,7 @@ func (p *Package) load(stk *ImportStack, bp *build.Package, err error) { p.Error = &PackageError{Err: e} return } - _, elem := filepath.Split(p.Dir) - if cfg.ModulesEnabled { - // NOTE(rsc): Using p.ImportPath instead of p.Dir - // makes sure we install a package in the root of a - // cached module directory as that package name - // not name@v1.2.3. - // Using p.ImportPath instead of p.Dir - // is probably correct all the time, - // even for non-module-enabled code, - // but I'm not brave enough to change the - // non-module behavior this late in the - // release cycle. Maybe for Go 1.12. - // See golang.org/issue/26869. - _, elem = pathpkg.Split(p.ImportPath) - - // If this is example.com/mycmd/v2, it's more useful to install it as mycmd than as v2. - // See golang.org/issue/24667. - isVersion := func(v string) bool { - if len(v) < 2 || v[0] != 'v' || v[1] < '1' || '9' < v[1] { - return false - } - for i := 2; i < len(v); i++ { - if c := v[i]; c < '0' || '9' < c { - return false - } - } - return true - } - if isVersion(elem) { - _, elem = pathpkg.Split(pathpkg.Dir(p.ImportPath)) - } - } + elem := DefaultExecName(p.ImportPath) full := cfg.BuildContext.GOOS + "_" + cfg.BuildContext.GOARCH + "/" + elem if cfg.BuildContext.GOOS != base.ToolGOOS || cfg.BuildContext.GOARCH != base.ToolGOARCH { // Install cross-compiled binaries to subdirectories of bin. @@ -1407,16 +1599,6 @@ func (p *Package) load(stk *ImportStack, bp *build.Package, err error) { continue } p1 := LoadImport(path, p.Dir, p, stk, p.Internal.Build.ImportPos[path], ResolveImport) - if p.Standard && p.Error == nil && !p1.Standard && p1.Error == nil { - p.Error = &PackageError{ - ImportStack: stk.Copy(), - Err: fmt.Sprintf("non-standard import %q in standard package %q", path, p.ImportPath), - } - pos := p.Internal.Build.ImportPos[path] - if len(pos) > 0 { - p.Error.Pos = pos[0].String() - } - } path = p1.ImportPath importPaths[i] = path @@ -1430,41 +1612,7 @@ func (p *Package) load(stk *ImportStack, bp *build.Package, err error) { } } p.Internal.Imports = imports - - deps := make(map[string]*Package) - var q []*Package - q = append(q, imports...) - for i := 0; i < len(q); i++ { - p1 := q[i] - path := p1.ImportPath - // The same import path could produce an error or not, - // depending on what tries to import it. - // Prefer to record entries with errors, so we can report them. - p0 := deps[path] - if p0 == nil || p1.Error != nil && (p0.Error == nil || len(p0.Error.ImportStack) > len(p1.Error.ImportStack)) { - deps[path] = p1 - for _, p2 := range p1.Internal.Imports { - if deps[p2.ImportPath] != p2 { - q = append(q, p2) - } - } - } - } - - p.Deps = make([]string, 0, len(deps)) - for dep := range deps { - p.Deps = append(p.Deps, dep) - } - sort.Strings(p.Deps) - for _, dep := range p.Deps { - p1 := deps[dep] - if p1 == nil { - panic("impossible: missing entry in package cache for " + dep + " imported by " + p.ImportPath) - } - if p1.Error != nil { - p.DepsErrors = append(p.DepsErrors, p1.Error) - } - } + p.collectDeps() // unsafe is a fake package. if p.Standard && (p.ImportPath == "unsafe" || cfg.BuildContext.Compiler == "gccgo") { @@ -1534,6 +1682,48 @@ func (p *Package) load(stk *ImportStack, bp *build.Package, err error) { } } +// collectDeps populates p.Deps and p.DepsErrors by iterating over +// p.Internal.Imports. +// +// TODO(jayconrod): collectDeps iterates over transitive imports for every +// package. We should only need to visit direct imports. +func (p *Package) collectDeps() { + deps := make(map[string]*Package) + var q []*Package + q = append(q, p.Internal.Imports...) + for i := 0; i < len(q); i++ { + p1 := q[i] + path := p1.ImportPath + // The same import path could produce an error or not, + // depending on what tries to import it. + // Prefer to record entries with errors, so we can report them. + p0 := deps[path] + if p0 == nil || p1.Error != nil && (p0.Error == nil || len(p0.Error.ImportStack) > len(p1.Error.ImportStack)) { + deps[path] = p1 + for _, p2 := range p1.Internal.Imports { + if deps[p2.ImportPath] != p2 { + q = append(q, p2) + } + } + } + } + + p.Deps = make([]string, 0, len(deps)) + for dep := range deps { + p.Deps = append(p.Deps, dep) + } + sort.Strings(p.Deps) + for _, dep := range p.Deps { + p1 := deps[dep] + if p1 == nil { + panic("impossible: missing entry in package cache for " + dep + " imported by " + p.ImportPath) + } + if p1.Error != nil { + p.DepsErrors = append(p.DepsErrors, p1.Error) + } + } +} + // SafeArg reports whether arg is a "safe" command-line argument, // meaning that when it appears in a command-line, it probably // doesn't have some special meaning other than its own name. @@ -1720,99 +1910,17 @@ func TestPackageList(roots []*Package) []*Package { return all } -var cmdCache = map[string]*Package{} - -func ClearCmdCache() { - for name := range cmdCache { - delete(cmdCache, name) - } -} - -// LoadPackage loads the package named by arg. -func LoadPackage(arg string, stk *ImportStack) *Package { - p := loadPackage(arg, stk) +// LoadImportWithFlags loads the package with the given import path and +// sets tool flags on that package. This function is useful loading implicit +// dependencies (like sync/atomic for coverage). +// TODO(jayconrod): delete this function and set flags automatically +// in LoadImport instead. +func LoadImportWithFlags(path, srcDir string, parent *Package, stk *ImportStack, importPos []token.Position, mode int) *Package { + p := LoadImport(path, srcDir, parent, stk, importPos, mode) setToolFlags(p) return p } -// LoadPackageNoFlags is like LoadPackage -// but does not guarantee that the build tool flags are set in the result. -// It is only for use by GOPATH-based "go get" -// and is only appropriate for preliminary loading of packages. -// A real load using LoadPackage or (more likely) -// Packages, PackageAndErrors, or PackagesForBuild -// must be done before passing the package to any build -// steps, so that the tool flags can be set properly. -// TODO(rsc): When GOPATH-based "go get" is removed, delete this function. -func LoadPackageNoFlags(arg string, stk *ImportStack) *Package { - return loadPackage(arg, stk) -} - -// loadPackage is like loadImport but is used for command-line arguments, -// not for paths found in import statements. In addition to ordinary import paths, -// loadPackage accepts pseudo-paths beginning with cmd/ to denote commands -// in the Go command directory, as well as paths to those directories. -func loadPackage(arg string, stk *ImportStack) *Package { - if arg == "" { - panic("loadPackage called with empty package path") - } - if build.IsLocalImport(arg) { - dir := arg - if !filepath.IsAbs(dir) { - if abs, err := filepath.Abs(dir); err == nil { - // interpret relative to current directory - dir = abs - } - } - if sub, ok := hasSubdir(cfg.GOROOTsrc, dir); ok && strings.HasPrefix(sub, "cmd/") && !strings.Contains(sub[4:], "/") { - arg = sub - } - } - if strings.HasPrefix(arg, "cmd/") && !strings.Contains(arg[4:], "/") { - if p := cmdCache[arg]; p != nil { - return p - } - stk.Push(arg) - defer stk.Pop() - - bp, err := cfg.BuildContext.ImportDir(filepath.Join(cfg.GOROOTsrc, arg), 0) - bp.ImportPath = arg - bp.Goroot = true - bp.BinDir = cfg.GOROOTbin - bp.Root = cfg.GOROOT - bp.SrcRoot = cfg.GOROOTsrc - p := new(Package) - cmdCache[arg] = p - p.load(stk, bp, err) - if p.Error == nil && p.Name != "main" { - p.Error = &PackageError{ - ImportStack: stk.Copy(), - Err: fmt.Sprintf("expected package main but found package %s in %s", p.Name, p.Dir), - } - } - return p - } - - // Wasn't a command; must be a package. - // If it is a local import path but names a standard package, - // we treat it as if the user specified the standard package. - // This lets you run go test ./ioutil in package io and be - // referring to io/ioutil rather than a hypothetical import of - // "./ioutil". - if build.IsLocalImport(arg) || filepath.IsAbs(arg) { - dir := arg - if !filepath.IsAbs(arg) { - dir = filepath.Join(base.Cwd, arg) - } - bp, _ := cfg.BuildContext.ImportDir(dir, build.FindOnly) - if bp.ImportPath != "" && bp.ImportPath != "." { - arg = bp.ImportPath - } - } - - return LoadImport(arg, base.Cwd, nil, stk, nil, 0) -} - // Packages returns the packages named by the // command line arguments 'args'. If a named package // cannot be loaded at all (for example, if the directory does not exist), @@ -1838,8 +1946,12 @@ func Packages(args []string) []*Package { // cannot be loaded at all. // The packages that fail to load will have p.Error != nil. func PackagesAndErrors(patterns []string) []*Package { - if len(patterns) > 0 && strings.HasSuffix(patterns[0], ".go") { - return []*Package{GoFilesPackage(patterns)} + if len(patterns) > 0 { + for _, p := range patterns { + if strings.HasSuffix(p, ".go") { + return []*Package{GoFilesPackage(patterns)} + } + } } matches := ImportPaths(patterns) @@ -1849,12 +1961,16 @@ func PackagesAndErrors(patterns []string) []*Package { seenPkg = make(map[*Package]bool) ) + pre := newPreload() + defer pre.flush() + pre.preloadMatches(matches) + for _, m := range matches { for _, pkg := range m.Pkgs { if pkg == "" { panic(fmt.Sprintf("ImportPaths returned empty package for pattern %s", m.Pattern)) } - p := loadPackage(pkg, &stk) + p := loadImport(pre, pkg, base.Cwd, nil, &stk, nil, 0) p.Match = append(p.Match, m.Pattern) p.Internal.CmdlinePkg = true if m.Literal { @@ -1947,7 +2063,14 @@ func GoFilesPackage(gofiles []string) *Package { for _, f := range gofiles { if !strings.HasSuffix(f, ".go") { - base.Fatalf("named files must be .go files") + pkg := new(Package) + pkg.Internal.Local = true + pkg.Internal.CmdlineFiles = true + pkg.Name = f + pkg.Error = &PackageError{ + Err: fmt.Sprintf("named files must be .go files: %s", pkg.Name), + } + return pkg } } diff --git a/src/cmd/go/internal/load/pkg_test.go b/src/cmd/go/internal/load/pkg_test.go new file mode 100644 index 0000000000..9ddc20d050 --- /dev/null +++ b/src/cmd/go/internal/load/pkg_test.go @@ -0,0 +1,68 @@ +package load + +import ( + "cmd/go/internal/cfg" + "testing" +) + +func TestDefaultExecName(t *testing.T) { + oldModulesEnabled := cfg.ModulesEnabled + defer func() { cfg.ModulesEnabled = oldModulesEnabled }() + for _, tt := range []struct { + in string + wantMod string + wantGopath string + }{ + {"example.com/mycmd", "mycmd", "mycmd"}, + {"example.com/mycmd/v0", "v0", "v0"}, + {"example.com/mycmd/v1", "v1", "v1"}, + {"example.com/mycmd/v2", "mycmd", "v2"}, // Semantic import versioning, use second last element in module mode. + {"example.com/mycmd/v3", "mycmd", "v3"}, // Semantic import versioning, use second last element in module mode. + {"mycmd", "mycmd", "mycmd"}, + {"mycmd/v0", "v0", "v0"}, + {"mycmd/v1", "v1", "v1"}, + {"mycmd/v2", "mycmd", "v2"}, // Semantic import versioning, use second last element in module mode. + {"v0", "v0", "v0"}, + {"v1", "v1", "v1"}, + {"v2", "v2", "v2"}, + } { + { + cfg.ModulesEnabled = true + gotMod := DefaultExecName(tt.in) + if gotMod != tt.wantMod { + t.Errorf("DefaultExecName(%q) in module mode = %v; want %v", tt.in, gotMod, tt.wantMod) + } + } + { + cfg.ModulesEnabled = false + gotGopath := DefaultExecName(tt.in) + if gotGopath != tt.wantGopath { + t.Errorf("DefaultExecName(%q) in gopath mode = %v; want %v", tt.in, gotGopath, tt.wantGopath) + } + } + } +} + +func TestIsVersionElement(t *testing.T) { + t.Parallel() + for _, tt := range []struct { + in string + want bool + }{ + {"v0", false}, + {"v05", false}, + {"v1", false}, + {"v2", true}, + {"v3", true}, + {"v9", true}, + {"v10", true}, + {"v11", true}, + {"v", false}, + {"vx", false}, + } { + got := isVersionElement(tt.in) + if got != tt.want { + t.Errorf("isVersionElement(%q) = %v; want %v", tt.in, got, tt.want) + } + } +} diff --git a/src/cmd/go/internal/load/test.go b/src/cmd/go/internal/load/test.go index bd6f00bb66..c247d56c81 100644 --- a/src/cmd/go/internal/load/test.go +++ b/src/cmd/go/internal/load/test.go @@ -15,10 +15,10 @@ import ( "go/doc" "go/parser" "go/token" + "internal/lazytemplate" "path/filepath" "sort" "strings" - "text/template" "unicode" "unicode/utf8" ) @@ -39,10 +39,43 @@ type TestCover struct { DeclVars func(*Package, ...string) map[string]*CoverVar } -// TestPackagesFor returns three packages: +// TestPackagesFor is like TestPackagesAndErrors but it returns +// an error if the test packages or their dependencies have errors. +// Only test packages without errors are returned. +func TestPackagesFor(p *Package, cover *TestCover) (pmain, ptest, pxtest *Package, err error) { + pmain, ptest, pxtest = TestPackagesAndErrors(p, cover) + for _, p1 := range []*Package{ptest, pxtest, pmain} { + if p1 == nil { + // pxtest may be nil + continue + } + if p1.Error != nil { + err = p1.Error + break + } + if len(p1.DepsErrors) > 0 { + perr := p1.DepsErrors[0] + perr.Pos = "" // show full import stack + err = perr + break + } + } + if pmain.Error != nil || len(pmain.DepsErrors) > 0 { + pmain = nil + } + if ptest.Error != nil || len(ptest.DepsErrors) > 0 { + ptest = nil + } + if pxtest != nil && (pxtest.Error != nil || len(pxtest.DepsErrors) > 0) { + pxtest = nil + } + return pmain, ptest, pxtest, err +} + +// TestPackagesAndErrors returns three packages: +// - pmain, the package main corresponding to the test binary (running tests in ptest and pxtest). // - ptest, the package p compiled with added "package p" test files. // - pxtest, the result of compiling any "package p_test" (external) test files. -// - pmain, the package main corresponding to the test binary (running tests in ptest and pxtest). // // If the package has no "package p_test" test files, pxtest will be nil. // If the non-test compilation of package p can be reused @@ -50,57 +83,59 @@ type TestCover struct { // package p need not be instrumented for coverage or any other reason), // then the returned ptest == p. // +// An error is returned if the testmain source cannot be completely generated +// (for example, due to a syntax error in a test file). No error will be +// returned for errors loading packages, but the Error or DepsError fields +// of the returned packages may be set. +// // The caller is expected to have checked that len(p.TestGoFiles)+len(p.XTestGoFiles) > 0, // or else there's no point in any of this. -func TestPackagesFor(p *Package, cover *TestCover) (pmain, ptest, pxtest *Package, err error) { +func TestPackagesAndErrors(p *Package, cover *TestCover) (pmain, ptest, pxtest *Package) { + pre := newPreload() + defer pre.flush() + allImports := append([]string{}, p.TestImports...) + allImports = append(allImports, p.XTestImports...) + pre.preloadImports(allImports, p.Internal.Build) + + var ptestErr, pxtestErr *PackageError var imports, ximports []*Package var stk ImportStack stk.Push(p.ImportPath + " (test)") rawTestImports := str.StringList(p.TestImports) + var ptestImportsTesting, pxtestImportsTesting bool for i, path := range p.TestImports { - p1 := LoadImport(path, p.Dir, p, &stk, p.Internal.Build.TestImportPos[path], ResolveImport) - if p1.Error != nil { - return nil, nil, nil, p1.Error - } - if len(p1.DepsErrors) > 0 { - err := p1.DepsErrors[0] - err.Pos = "" // show full import stack - return nil, nil, nil, err - } + p1 := loadImport(pre, path, p.Dir, p, &stk, p.Internal.Build.TestImportPos[path], ResolveImport) if str.Contains(p1.Deps, p.ImportPath) || p1.ImportPath == p.ImportPath { // Same error that loadPackage returns (via reusePackage) in pkg.go. // Can't change that code, because that code is only for loading the // non-test copy of a package. - err := &PackageError{ + ptestErr = &PackageError{ ImportStack: testImportStack(stk[0], p1, p.ImportPath), Err: "import cycle not allowed in test", IsImportCycle: true, } - return nil, nil, nil, err } p.TestImports[i] = p1.ImportPath imports = append(imports, p1) + if path == "testing" { + ptestImportsTesting = true + } } stk.Pop() stk.Push(p.ImportPath + "_test") pxtestNeedsPtest := false rawXTestImports := str.StringList(p.XTestImports) for i, path := range p.XTestImports { - p1 := LoadImport(path, p.Dir, p, &stk, p.Internal.Build.XTestImportPos[path], ResolveImport) - if p1.Error != nil { - return nil, nil, nil, p1.Error - } - if len(p1.DepsErrors) > 0 { - err := p1.DepsErrors[0] - err.Pos = "" // show full import stack - return nil, nil, nil, err - } + p1 := loadImport(pre, path, p.Dir, p, &stk, p.Internal.Build.XTestImportPos[path], ResolveImport) if p1.ImportPath == p.ImportPath { pxtestNeedsPtest = true } else { ximports = append(ximports, p1) } p.XTestImports[i] = p1.ImportPath + if path == "testing" { + pxtestImportsTesting = true + } } stk.Pop() @@ -108,7 +143,11 @@ func TestPackagesFor(p *Package, cover *TestCover) (pmain, ptest, pxtest *Packag if len(p.TestGoFiles) > 0 || p.Name == "main" || cover != nil && cover.Local { ptest = new(Package) *ptest = *p + ptest.Error = ptestErr ptest.ForTest = p.ImportPath + if ptestImportsTesting { + ptest.Internal.TestinginitGo = formatTestinginit(p) + } ptest.GoFiles = nil ptest.GoFiles = append(ptest.GoFiles, p.GoFiles...) ptest.GoFiles = append(ptest.GoFiles, p.TestGoFiles...) @@ -129,6 +168,7 @@ func TestPackagesFor(p *Package, cover *TestCover) (pmain, ptest, pxtest *Packag ptest.Internal.Imports = append(imports, p.Internal.Imports...) ptest.Internal.RawImports = str.StringList(rawTestImports, p.Internal.RawImports) ptest.Internal.ForceLibrary = true + ptest.Internal.BuildInfo = "" ptest.Internal.Build = new(build.Package) *ptest.Internal.Build = *p.Internal.Build m := map[string][]token.Position{} @@ -139,6 +179,7 @@ func TestPackagesFor(p *Package, cover *TestCover) (pmain, ptest, pxtest *Packag m[k] = append(m[k], v...) } ptest.Internal.Build.ImportPos = m + ptest.collectDeps() } else { ptest = p } @@ -151,9 +192,11 @@ func TestPackagesFor(p *Package, cover *TestCover) (pmain, ptest, pxtest *Packag ImportPath: p.ImportPath + "_test", Root: p.Root, Dir: p.Dir, + Goroot: p.Goroot, GoFiles: p.XTestGoFiles, Imports: p.XTestImports, ForTest: p.ImportPath, + Error: pxtestErr, }, Internal: PackageInternal{ LocalPrefix: p.Internal.LocalPrefix, @@ -169,9 +212,13 @@ func TestPackagesFor(p *Package, cover *TestCover) (pmain, ptest, pxtest *Packag Gccgoflags: p.Internal.Gccgoflags, }, } + if pxtestImportsTesting { + pxtest.Internal.TestinginitGo = formatTestinginit(pxtest) + } if pxtestNeedsPtest { pxtest.Internal.Imports = append(pxtest.Internal.Imports, ptest) } + pxtest.collectDeps() } // Build main package. @@ -186,6 +233,7 @@ func TestPackagesFor(p *Package, cover *TestCover) (pmain, ptest, pxtest *Packag }, Internal: PackageInternal{ Build: &build.Package{Name: "main"}, + BuildInfo: p.Internal.BuildInfo, Asmflags: p.Internal.Asmflags, Gcflags: p.Internal.Gcflags, Ldflags: p.Internal.Ldflags, @@ -204,10 +252,7 @@ func TestPackagesFor(p *Package, cover *TestCover) (pmain, ptest, pxtest *Packag if dep == ptest.ImportPath { pmain.Internal.Imports = append(pmain.Internal.Imports, ptest) } else { - p1 := LoadImport(dep, "", nil, &stk, nil, 0) - if p1.Error != nil { - return nil, nil, nil, p1.Error - } + p1 := loadImport(pre, dep, "", nil, &stk, nil, 0) pmain.Internal.Imports = append(pmain.Internal.Imports, p1) } } @@ -238,8 +283,8 @@ func TestPackagesFor(p *Package, cover *TestCover) (pmain, ptest, pxtest *Packag // The list of imports is used by recompileForTest and by the loop // afterward that gathers t.Cover information. t, err := loadTestFuncs(ptest) - if err != nil { - return nil, nil, nil, err + if err != nil && pmain.Error == nil { + pmain.Error = &PackageError{Err: err.Error()} } t.Cover = cover if len(ptest.GoFiles)+len(ptest.CgoFiles) > 0 { @@ -252,6 +297,7 @@ func TestPackagesFor(p *Package, cover *TestCover) (pmain, ptest, pxtest *Packag pmain.Imports = append(pmain.Imports, pxtest.ImportPath) t.ImportXtest = true } + pmain.collectDeps() // Sort and dedup pmain.Imports. // Only matters for go list -test output. @@ -266,17 +312,8 @@ func TestPackagesFor(p *Package, cover *TestCover) (pmain, ptest, pxtest *Packag pmain.Imports = pmain.Imports[:w] pmain.Internal.RawImports = str.StringList(pmain.Imports) - if ptest != p { - // We have made modifications to the package p being tested - // and are rebuilding p (as ptest). - // Arrange to rebuild all packages q such that - // the test depends on q and q depends on p. - // This makes sure that q sees the modifications to p. - // Strictly speaking, the rebuild is only necessary if the - // modifications to p change its export metadata, but - // determining that is a bit tricky, so we rebuild always. - recompileForTest(pmain, p, ptest, pxtest) - } + // Replace pmain's transitive dependencies with test copies, as necessary. + recompileForTest(pmain, p, ptest, pxtest) // Should we apply coverage analysis locally, // only for this package and only for this test? @@ -297,12 +334,12 @@ func TestPackagesFor(p *Package, cover *TestCover) (pmain, ptest, pxtest *Packag } data, err := formatTestmain(t) - if err != nil { - return nil, nil, nil, err + if err != nil && pmain.Error == nil { + pmain.Error = &PackageError{Err: err.Error()} } - pmain.Internal.TestmainGo = &data + pmain.Internal.TestmainGo = data - return pmain, ptest, pxtest, nil + return pmain, ptest, pxtest } func testImportStack(top string, p *Package, target string) []string { @@ -323,6 +360,15 @@ Search: return stk } +// recompileForTest copies and replaces certain packages in pmain's dependency +// graph. This is necessary for two reasons. First, if ptest is different than +// preal, packages that import the package under test should get ptest instead +// of preal. This is particularly important if pxtest depends on functionality +// exposed in test sources in ptest. Second, if there is a main package +// (other than pmain) anywhere, we need to set p.Internal.ForceLibrary and +// clear p.Internal.BuildInfo in the test copy to prevent link conflicts. +// This may happen if both -coverpkg and the command line patterns include +// multiple main packages. func recompileForTest(pmain, preal, ptest, pxtest *Package) { // The "test copy" of preal is ptest. // For each package that depends on preal, make a "test copy" @@ -352,6 +398,8 @@ func recompileForTest(pmain, preal, ptest, pxtest *Package) { copy(p1.Imports, p.Imports) p = p1 p.Target = "" + p.Internal.BuildInfo = "" + p.Internal.ForceLibrary = true } // Update p.Internal.Imports to use test copies. @@ -361,6 +409,13 @@ func recompileForTest(pmain, preal, ptest, pxtest *Package) { p.Internal.Imports[i] = p1 } } + + // Don't compile build info from a main package. This can happen + // if -coverpkg patterns include main packages, since those packages + // are imported by pmain. See golang.org/issue/30907. + if p.Internal.BuildInfo != "" && p != pmain { + split() + } } } @@ -410,21 +465,33 @@ type coverInfo struct { } // loadTestFuncs returns the testFuncs describing the tests that will be run. +// The returned testFuncs is always non-nil, even if an error occurred while +// processing test files. func loadTestFuncs(ptest *Package) (*testFuncs, error) { t := &testFuncs{ Package: ptest, } + var err error for _, file := range ptest.TestGoFiles { - if err := t.load(filepath.Join(ptest.Dir, file), "_test", &t.ImportTest, &t.NeedTest); err != nil { - return nil, err + if lerr := t.load(filepath.Join(ptest.Dir, file), "_test", &t.ImportTest, &t.NeedTest); lerr != nil && err == nil { + err = lerr } } for _, file := range ptest.XTestGoFiles { - if err := t.load(filepath.Join(ptest.Dir, file), "_xtest", &t.ImportXtest, &t.NeedXtest); err != nil { - return nil, err + if lerr := t.load(filepath.Join(ptest.Dir, file), "_xtest", &t.ImportXtest, &t.NeedXtest); lerr != nil && err == nil { + err = lerr } } - return t, nil + return t, err +} + +// formatTestinginit returns the content of the _testinginit.go file for p. +func formatTestinginit(p *Package) []byte { + var buf bytes.Buffer + if err := testinginitTmpl.Execute(&buf, p); err != nil { + panic("testinginit template execution failed") // shouldn't be possible + } + return buf.Bytes() } // formatTestmain returns the content of the _testmain.go file for t. @@ -556,7 +623,26 @@ func checkTestFunc(fn *ast.FuncDecl, arg string) error { return nil } -var testmainTmpl = template.Must(template.New("main").Parse(` +var testinginitTmpl = lazytemplate.New("init", ` +package {{.Name}} + +import _go_testing "testing" + +{{/* +Call testing.Init before any other user initialization code runs. +(This file is passed to the compiler first.) +This provides the illusion of the old behavior where testing flags +were registered as part of the testing package's initialization. +*/}} +var _ = func() bool { + _go_testing.Init() + return true +}() +`) + +var testmainTmpl = lazytemplate.New("main", ` +// Code generated by 'go test'. DO NOT EDIT. + package main import ( @@ -657,4 +743,4 @@ func main() { {{end}} } -`)) +`) diff --git a/src/cmd/go/internal/lockedfile/internal/filelock/filelock_test.go b/src/cmd/go/internal/lockedfile/internal/filelock/filelock_test.go index aa67093a48..581a978ef8 100644 --- a/src/cmd/go/internal/lockedfile/internal/filelock/filelock_test.go +++ b/src/cmd/go/internal/lockedfile/internal/filelock/filelock_test.go @@ -159,7 +159,9 @@ func TestRLockExcludesOnlyLock(t *testing.T) { f2 := mustOpen(t, f.Name()) defer f2.Close() - if runtime.GOOS == "solaris" || runtime.GOOS == "aix" { + doUnlockTF := false + switch runtime.GOOS { + case "aix", "illumos", "solaris": // When using POSIX locks (as on Solaris), we can't safely read-lock the // same inode through two different descriptors at the same time: when the // first descriptor is closed, the second descriptor would still be open but @@ -167,8 +169,9 @@ func TestRLockExcludesOnlyLock(t *testing.T) { lockF2 := mustBlock(t, "RLock", f2) unlock(t, f) lockF2(t) - } else { + default: rLock(t, f2) + doUnlockTF = true } other := mustOpen(t, f.Name()) @@ -176,7 +179,7 @@ func TestRLockExcludesOnlyLock(t *testing.T) { lockOther := mustBlock(t, "Lock", other) unlock(t, f2) - if runtime.GOOS != "solaris" && runtime.GOOS != "aix" { + if doUnlockTF { unlock(t, f) } lockOther(t) diff --git a/src/cmd/go/internal/lockedfile/mutex.go b/src/cmd/go/internal/lockedfile/mutex.go index 17f3751c37..180a36c620 100644 --- a/src/cmd/go/internal/lockedfile/mutex.go +++ b/src/cmd/go/internal/lockedfile/mutex.go @@ -7,6 +7,7 @@ package lockedfile import ( "fmt" "os" + "sync" ) // A Mutex provides mutual exclusion within and across processes by locking a @@ -21,7 +22,8 @@ import ( // must not be copied after first use. The Path field must be set before first // use and must not be change thereafter. type Mutex struct { - Path string // The path to the well-known lock file. Must be non-empty. + Path string // The path to the well-known lock file. Must be non-empty. + mu sync.Mutex // A redundant mutex. The race detector doesn't know about file locking, so in tests we may need to lock something that it understands. } // MutexAt returns a new Mutex with Path set to the given non-empty path. @@ -56,5 +58,10 @@ func (mu *Mutex) Lock() (unlock func(), err error) { if err != nil { return nil, err } - return func() { f.Close() }, nil + mu.mu.Lock() + + return func() { + mu.mu.Unlock() + f.Close() + }, nil } diff --git a/src/cmd/go/internal/modcmd/download.go b/src/cmd/go/internal/modcmd/download.go index bbaba444f5..9f8c410b82 100644 --- a/src/cmd/go/internal/modcmd/download.go +++ b/src/cmd/go/internal/modcmd/download.go @@ -5,13 +5,14 @@ package modcmd import ( + "encoding/json" + "os" + "cmd/go/internal/base" "cmd/go/internal/modfetch" "cmd/go/internal/modload" "cmd/go/internal/module" "cmd/go/internal/par" - "encoding/json" - "os" ) var cmdDownload = &base.Command{ diff --git a/src/cmd/go/internal/modcmd/edit.go b/src/cmd/go/internal/modcmd/edit.go index 5066e4ddf7..1be8b7cb2f 100644 --- a/src/cmd/go/internal/modcmd/edit.go +++ b/src/cmd/go/internal/modcmd/edit.go @@ -385,7 +385,9 @@ type replaceJSON struct { // editPrintJSON prints the -json output. func editPrintJSON(modFile *modfile.File) { var f fileJSON - f.Module = modFile.Module.Mod + if modFile.Module != nil { + f.Module = modFile.Module.Mod + } if modFile.Go != nil { f.Go = modFile.Go.Version } diff --git a/src/cmd/go/internal/modcmd/init.go b/src/cmd/go/internal/modcmd/init.go index 0f7421e584..b94453bab0 100644 --- a/src/cmd/go/internal/modcmd/init.go +++ b/src/cmd/go/internal/modcmd/init.go @@ -35,6 +35,9 @@ func runInit(cmd *base.Command, args []string) { if len(args) == 1 { modload.CmdModModule = args[0] } + if os.Getenv("GO111MODULE") == "off" { + base.Fatalf("go mod init: modules disabled by GO111MODULE=off; see 'go help modules'") + } if _, err := os.Stat("go.mod"); err == nil { base.Fatalf("go mod init: go.mod already exists") } diff --git a/src/cmd/go/internal/modcmd/vendor.go b/src/cmd/go/internal/modcmd/vendor.go index b70f25cec3..44cabd5dea 100644 --- a/src/cmd/go/internal/modcmd/vendor.go +++ b/src/cmd/go/internal/modcmd/vendor.go @@ -11,10 +11,12 @@ import ( "io/ioutil" "os" "path/filepath" + "sort" "strings" "cmd/go/internal/base" "cmd/go/internal/cfg" + "cmd/go/internal/imports" "cmd/go/internal/modload" "cmd/go/internal/module" ) @@ -71,6 +73,7 @@ func runVendor(cmd *base.Command, args []string) { if cfg.BuildV { fmt.Fprintf(os.Stderr, "# %s %s%s\n", m.Path, m.Version, repl) } + sort.Strings(pkgs) for _, pkg := range pkgs { fmt.Fprintf(&buf, "%s\n", pkg) if cfg.BuildV { @@ -100,7 +103,7 @@ func vendorPkg(vdir, pkg string) { if src == "" { fmt.Fprintf(os.Stderr, "internal error: no pkg for %s -> %s\n", pkg, realPath) } - copyDir(dst, src, matchNonTest) + copyDir(dst, src, matchPotentialSourceFile) if m := modload.PackageModule(realPath); m.Path != "" { copyMetadata(m.Path, realPath, dst, src) } @@ -153,7 +156,7 @@ var metaPrefixes = []string{ } // matchMetadata reports whether info is a metadata file. -func matchMetadata(info os.FileInfo) bool { +func matchMetadata(dir string, info os.FileInfo) bool { name := info.Name() for _, p := range metaPrefixes { if strings.HasPrefix(name, p) { @@ -163,13 +166,36 @@ func matchMetadata(info os.FileInfo) bool { return false } -// matchNonTest reports whether info is any non-test file (including non-Go files). -func matchNonTest(info os.FileInfo) bool { - return !strings.HasSuffix(info.Name(), "_test.go") +var anyTagsExceptIgnore = map[string]bool{"*": true} + +// matchPotentialSourceFile reports whether info may be relevant to a build operation. +func matchPotentialSourceFile(dir string, info os.FileInfo) bool { + if strings.HasSuffix(info.Name(), "_test.go") { + return false + } + if strings.HasSuffix(info.Name(), ".go") { + f, err := os.Open(filepath.Join(dir, info.Name())) + if err != nil { + base.Fatalf("go mod vendor: %v", err) + } + defer f.Close() + + content, err := imports.ReadImports(f, false, nil) + if err == nil && !imports.ShouldBuild(content, anyTagsExceptIgnore) { + // The file is explicitly tagged "ignore", so it can't affect the build. + // Leave it out. + return false + } + return true + } + + // We don't know anything about this file, so optimistically assume that it is + // needed. + return true } // copyDir copies all regular files satisfying match(info) from src to dst. -func copyDir(dst, src string, match func(os.FileInfo) bool) { +func copyDir(dst, src string, match func(dir string, info os.FileInfo) bool) { files, err := ioutil.ReadDir(src) if err != nil { base.Fatalf("go mod vendor: %v", err) @@ -178,7 +204,7 @@ func copyDir(dst, src string, match func(os.FileInfo) bool) { base.Fatalf("go mod vendor: %v", err) } for _, file := range files { - if file.IsDir() || !file.Mode().IsRegular() || !match(file) { + if file.IsDir() || !file.Mode().IsRegular() || !match(src, file) { continue } r, err := os.Open(filepath.Join(src, file.Name())) diff --git a/src/cmd/go/internal/modconv/convert.go b/src/cmd/go/internal/modconv/convert.go index 6fc6718e47..558664a8b3 100644 --- a/src/cmd/go/internal/modconv/convert.go +++ b/src/cmd/go/internal/modconv/convert.go @@ -41,19 +41,29 @@ func ConvertLegacyConfig(f *modfile.File, file string, data []byte) error { // Convert requirements block, which may use raw SHA1 hashes as versions, // to valid semver requirement list, respecting major versions. - var work par.Work + var ( + work par.Work + mu sync.Mutex + need = make(map[string]string) + replace = make(map[string]*modfile.Replace) + ) + + for _, r := range mf.Replace { + replace[r.New.Path] = r + replace[r.Old.Path] = r + } for _, r := range mf.Require { m := r.Mod if m.Path == "" { continue } + if re, ok := replace[m.Path]; ok { + work.Add(re.New) + continue + } work.Add(r.Mod) } - var ( - mu sync.Mutex - need = make(map[string]string) - ) work.Do(10, func(item interface{}) { r := item.(module.Version) repo, info, err := modfetch.ImportRepoRev(r.Path, r.Version) @@ -76,15 +86,15 @@ func ConvertLegacyConfig(f *modfile.File, file string, data []byte) error { } sort.Strings(paths) for _, path := range paths { + if re, ok := replace[path]; ok { + err := f.AddReplace(re.Old.Path, re.Old.Version, path, need[path]) + if err != nil { + return fmt.Errorf("add replace: %v", err) + } + } f.AddNewRequire(path, need[path], false) } - for _, r := range mf.Replace { - err := f.AddReplace(r.Old.Path, r.Old.Version, r.New.Path, r.New.Version) - if err != nil { - return fmt.Errorf("add replace: %v", err) - } - } f.Cleanup() return nil } diff --git a/src/cmd/go/internal/modconv/convert_test.go b/src/cmd/go/internal/modconv/convert_test.go index 4d55d73f21..d6316e36e9 100644 --- a/src/cmd/go/internal/modconv/convert_test.go +++ b/src/cmd/go/internal/modconv/convert_test.go @@ -28,6 +28,8 @@ func TestMain(m *testing.M) { } func testMain(m *testing.M) int { + modfetch.SetProxy("direct") + if _, err := exec.LookPath("git"); err != nil { fmt.Fprintln(os.Stderr, "skipping because git binary not found") fmt.Println("PASS") diff --git a/src/cmd/go/internal/modconv/dep.go b/src/cmd/go/internal/modconv/dep.go index 690c206a13..f433300171 100644 --- a/src/cmd/go/internal/modconv/dep.go +++ b/src/cmd/go/internal/modconv/dep.go @@ -6,6 +6,9 @@ package modconv import ( "fmt" + "net/url" + "path" + "regexp" "strconv" "strings" @@ -15,9 +18,14 @@ import ( ) func ParseGopkgLock(file string, data []byte) (*modfile.File, error) { + type pkg struct { + Path string + Version string + Source string + } mf := new(modfile.File) - var list []module.Version - var r *module.Version + var list []pkg + var r *pkg for lineno, line := range strings.Split(string(data), "\n") { lineno++ if i := strings.Index(line, "#"); i >= 0 { @@ -25,7 +33,7 @@ func ParseGopkgLock(file string, data []byte) (*modfile.File, error) { } line = strings.TrimSpace(line) if line == "[[projects]]" { - list = append(list, module.Version{}) + list = append(list, pkg{}) r = &list[len(list)-1] continue } @@ -52,6 +60,8 @@ func ParseGopkgLock(file string, data []byte) (*modfile.File, error) { switch key { case "name": r.Path = val + case "source": + r.Source = val case "revision", "version": // Note: key "version" should take priority over "revision", // and it does, because dep writes toml keys in alphabetical order, @@ -68,7 +78,55 @@ func ParseGopkgLock(file string, data []byte) (*modfile.File, error) { if r.Path == "" || r.Version == "" { return nil, fmt.Errorf("%s: empty [[projects]] stanza (%s)", file, r.Path) } - mf.Require = append(mf.Require, &modfile.Require{Mod: r}) + mf.Require = append(mf.Require, &modfile.Require{Mod: module.Version{Path: r.Path, Version: r.Version}}) + + if r.Source != "" { + // Convert "source" to import path, such as + // git@test.com:x/y.git and https://test.com/x/y.git. + // We get "test.com/x/y" at last. + source, err := decodeSource(r.Source) + if err != nil { + return nil, err + } + old := module.Version{Path: r.Path, Version: r.Version} + new := module.Version{Path: source, Version: r.Version} + mf.Replace = append(mf.Replace, &modfile.Replace{Old: old, New: new}) + } } return mf, nil } + +var scpSyntaxReg = regexp.MustCompile(`^([a-zA-Z0-9_]+)@([a-zA-Z0-9._-]+):(.*)$`) + +func decodeSource(source string) (string, error) { + var u *url.URL + var p string + if m := scpSyntaxReg.FindStringSubmatch(source); m != nil { + // Match SCP-like syntax and convert it to a URL. + // Eg, "git@github.com:user/repo" becomes + // "ssh://git@github.com/user/repo". + u = &url.URL{ + Scheme: "ssh", + User: url.User(m[1]), + Host: m[2], + Path: "/" + m[3], + } + } else { + var err error + u, err = url.Parse(source) + if err != nil { + return "", fmt.Errorf("%q is not a valid URI", source) + } + } + + // If no scheme was passed, then the entire path will have been put into + // u.Path. Either way, construct the normalized path correctly. + if u.Host == "" { + p = source + } else { + p = path.Join(u.Host, u.Path) + } + p = strings.TrimSuffix(p, ".git") + p = strings.TrimSuffix(p, ".hg") + return p, nil +} diff --git a/src/cmd/go/internal/modconv/glide.go b/src/cmd/go/internal/modconv/glide.go index 3bc675fcc0..18ab57814d 100644 --- a/src/cmd/go/internal/modconv/glide.go +++ b/src/cmd/go/internal/modconv/glide.go @@ -15,8 +15,7 @@ func ParseGlideLock(file string, data []byte) (*modfile.File, error) { mf := new(modfile.File) imports := false name := "" - for lineno, line := range strings.Split(string(data), "\n") { - lineno++ + for _, line := range strings.Split(string(data), "\n") { if line == "" { continue } diff --git a/src/cmd/go/internal/modconv/glock.go b/src/cmd/go/internal/modconv/glock.go index 1b786a939c..164a8e70d9 100644 --- a/src/cmd/go/internal/modconv/glock.go +++ b/src/cmd/go/internal/modconv/glock.go @@ -13,8 +13,7 @@ import ( func ParseGLOCKFILE(file string, data []byte) (*modfile.File, error) { mf := new(modfile.File) - for lineno, line := range strings.Split(string(data), "\n") { - lineno++ + for _, line := range strings.Split(string(data), "\n") { f := strings.Fields(line) if len(f) >= 2 && f[0] != "cmd" { mf.Require = append(mf.Require, &modfile.Require{Mod: module.Version{Path: f[0], Version: f[1]}}) diff --git a/src/cmd/go/internal/modconv/modconv_test.go b/src/cmd/go/internal/modconv/modconv_test.go index 353161bc5a..ccc4f3d576 100644 --- a/src/cmd/go/internal/modconv/modconv_test.go +++ b/src/cmd/go/internal/modconv/modconv_test.go @@ -58,6 +58,9 @@ func Test(t *testing.T) { for _, r := range out.Require { fmt.Fprintf(&buf, "%s %s\n", r.Mod.Path, r.Mod.Version) } + for _, r := range out.Replace { + fmt.Fprintf(&buf, "replace: %s %s %s %s\n", r.Old.Path, r.Old.Version, r.New.Path, r.New.Version) + } if !bytes.Equal(buf.Bytes(), want) { t.Errorf("have:\n%s\nwant:\n%s", buf.Bytes(), want) } diff --git a/src/cmd/go/internal/modconv/testdata/traefik.dep b/src/cmd/go/internal/modconv/testdata/traefik.dep new file mode 100644 index 0000000000..8510f0f849 --- /dev/null +++ b/src/cmd/go/internal/modconv/testdata/traefik.dep @@ -0,0 +1,79 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + +[[projects]] + name = "github.com/Nvveen/Gotty" + packages = ["."] + revision = "a8b993ba6abdb0e0c12b0125c603323a71c7790c" + source = "github.com/ijc25/Gotty" + +[[projects]] + branch = "master" + name = "github.com/OpenDNS/vegadns2client" + packages = ["."] + revision = "a3fa4a771d87bda2514a90a157e1fed1b6897d2e" + +[[projects]] + name = "github.com/PuerkitoBio/purell" + packages = ["."] + revision = "8a290539e2e8629dbc4e6bad948158f790ec31f4" + version = "v1.0.0" + +[[projects]] + name = "github.com/PuerkitoBio/urlesc" + packages = ["."] + revision = "5bd2802263f21d8788851d5305584c82a5c75d7e" + +[[projects]] + name = "github.com/Shopify/sarama" + packages = ["."] + revision = "70f6a705d4a17af059acbc6946fb2bd30762acd7" + +[[projects]] + name = "github.com/VividCortex/gohistogram" + packages = ["."] + revision = "51564d9861991fb0ad0f531c99ef602d0f9866e6" + version = "v1.0.0" + +[[projects]] + branch = "containous-fork" + name = "github.com/abbot/go-http-auth" + packages = ["."] + revision = "65b0cdae8d7fe5c05c7430e055938ef6d24a66c9" + source = "github.com/containous/go-http-auth" + +[[projects]] + branch = "master" + name = "github.com/abronan/valkeyrie" + packages = [ + ".", + "store", + "store/boltdb", + "store/consul", + "store/etcd/v2", + "store/etcd/v3", + "store/zookeeper" + ] + revision = "063d875e3c5fd734fa2aa12fac83829f62acfc70" + +[[projects]] + branch = "master" + name = "github.com/mesosphere/mesos-dns" + packages = [ + "detect", + "errorutil", + "logging", + "models", + "records", + "records/labels", + "records/state", + "util" + ] + revision = "b47dc4c19f215e98da687b15b4c64e70f629bea5" + source = "git@github.com:containous/mesos-dns.git" + + [[projects]] + name = "gopkg.in/fsnotify.v1" + packages = ["."] + revision = "629574ca2a5df945712d3079857300b5e4da0236" + source = "github.com/fsnotify/fsnotify" + version = "v1.4.2" \ No newline at end of file diff --git a/src/cmd/go/internal/modconv/testdata/traefik.out b/src/cmd/go/internal/modconv/testdata/traefik.out new file mode 100644 index 0000000000..5054295383 --- /dev/null +++ b/src/cmd/go/internal/modconv/testdata/traefik.out @@ -0,0 +1,14 @@ +github.com/Nvveen/Gotty a8b993ba6abdb0e0c12b0125c603323a71c7790c +github.com/OpenDNS/vegadns2client a3fa4a771d87bda2514a90a157e1fed1b6897d2e +github.com/PuerkitoBio/purell v1.0.0 +github.com/PuerkitoBio/urlesc 5bd2802263f21d8788851d5305584c82a5c75d7e +github.com/Shopify/sarama 70f6a705d4a17af059acbc6946fb2bd30762acd7 +github.com/VividCortex/gohistogram v1.0.0 +github.com/abbot/go-http-auth 65b0cdae8d7fe5c05c7430e055938ef6d24a66c9 +github.com/abronan/valkeyrie 063d875e3c5fd734fa2aa12fac83829f62acfc70 +github.com/mesosphere/mesos-dns b47dc4c19f215e98da687b15b4c64e70f629bea5 +gopkg.in/fsnotify.v1 v1.4.2 +replace: github.com/Nvveen/Gotty a8b993ba6abdb0e0c12b0125c603323a71c7790c github.com/ijc25/Gotty a8b993ba6abdb0e0c12b0125c603323a71c7790c +replace: github.com/abbot/go-http-auth 65b0cdae8d7fe5c05c7430e055938ef6d24a66c9 github.com/containous/go-http-auth 65b0cdae8d7fe5c05c7430e055938ef6d24a66c9 +replace: github.com/mesosphere/mesos-dns b47dc4c19f215e98da687b15b4c64e70f629bea5 github.com/containous/mesos-dns b47dc4c19f215e98da687b15b4c64e70f629bea5 +replace: gopkg.in/fsnotify.v1 v1.4.2 github.com/fsnotify/fsnotify v1.4.2 diff --git a/src/cmd/go/internal/modconv/tsv.go b/src/cmd/go/internal/modconv/tsv.go index feba181e05..106cddedd3 100644 --- a/src/cmd/go/internal/modconv/tsv.go +++ b/src/cmd/go/internal/modconv/tsv.go @@ -13,8 +13,7 @@ import ( func ParseDependenciesTSV(file string, data []byte) (*modfile.File, error) { mf := new(modfile.File) - for lineno, line := range strings.Split(string(data), "\n") { - lineno++ + for _, line := range strings.Split(string(data), "\n") { f := strings.Split(line, "\t") if len(f) >= 3 { mf.Require = append(mf.Require, &modfile.Require{Mod: module.Version{Path: f[0], Version: f[2]}}) diff --git a/src/cmd/go/internal/modconv/vconf.go b/src/cmd/go/internal/modconv/vconf.go index a9a8e62518..f62eba7762 100644 --- a/src/cmd/go/internal/modconv/vconf.go +++ b/src/cmd/go/internal/modconv/vconf.go @@ -13,8 +13,7 @@ import ( func ParseVendorConf(file string, data []byte) (*modfile.File, error) { mf := new(modfile.File) - for lineno, line := range strings.Split(string(data), "\n") { - lineno++ + for _, line := range strings.Split(string(data), "\n") { if i := strings.Index(line, "#"); i >= 0 { line = line[:i] } diff --git a/src/cmd/go/internal/modconv/vyml.go b/src/cmd/go/internal/modconv/vyml.go index 0f017a3c7a..8a06519932 100644 --- a/src/cmd/go/internal/modconv/vyml.go +++ b/src/cmd/go/internal/modconv/vyml.go @@ -15,8 +15,7 @@ func ParseVendorYML(file string, data []byte) (*modfile.File, error) { mf := new(modfile.File) vendors := false path := "" - for lineno, line := range strings.Split(string(data), "\n") { - lineno++ + for _, line := range strings.Split(string(data), "\n") { if line == "" { continue } diff --git a/src/cmd/go/internal/modfetch/bootstrap.go b/src/cmd/go/internal/modfetch/bootstrap.go new file mode 100644 index 0000000000..8f31589ebf --- /dev/null +++ b/src/cmd/go/internal/modfetch/bootstrap.go @@ -0,0 +1,17 @@ +// 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. + +// +build cmd_go_bootstrap + +package modfetch + +import "cmd/go/internal/module" + +func useSumDB(mod module.Version) bool { + return false +} + +func lookupSumDB(mod module.Version) (string, []string, error) { + panic("bootstrap") +} diff --git a/src/cmd/go/internal/modfetch/cache.go b/src/cmd/go/internal/modfetch/cache.go index 1ccd43dc2a..f269c47f59 100644 --- a/src/cmd/go/internal/modfetch/cache.go +++ b/src/cmd/go/internal/modfetch/cache.go @@ -488,7 +488,7 @@ func writeDiskCache(file string, data []byte) error { return err } - if err := renameio.WriteFile(file, data); err != nil { + if err := renameio.WriteFile(file, data, 0666); err != nil { return err } @@ -550,7 +550,7 @@ func rewriteVersionList(dir string) { return } - if err := renameio.WriteFile(listFile, buf.Bytes()); err != nil { + if err := renameio.WriteFile(listFile, buf.Bytes(), 0666); err != nil { base.Fatalf("go: failed to write version list: %v", err) } } diff --git a/src/cmd/go/internal/modfetch/codehost/git.go b/src/cmd/go/internal/modfetch/codehost/git.go index 588e7496cc..272eadcb23 100644 --- a/src/cmd/go/internal/modfetch/codehost/git.go +++ b/src/cmd/go/internal/modfetch/codehost/git.go @@ -19,6 +19,7 @@ import ( "cmd/go/internal/lockedfile" "cmd/go/internal/par" + "cmd/go/internal/semver" ) // GitRepo returns the code repository at the given Git remote reference. @@ -32,7 +33,7 @@ func LocalGitRepo(remote string) (Repo, error) { return newGitRepoCached(remote, true) } -const gitWorkDirType = "git2" +const gitWorkDirType = "git3" var gitRepoCache par.Cache @@ -166,7 +167,7 @@ func (r *gitRepo) loadRefs() { if err != nil { if rerr, ok := err.(*RunError); ok { if bytes.Contains(rerr.Stderr, []byte("fatal: could not read Username")) { - rerr.HelpText = "If this is a private repository, see https://golang.org/doc/faq#git_https for additional information." + rerr.HelpText = "Confirm the import path was entered correctly.\nIf this is a private repository, see https://golang.org/doc/faq#git_https for additional information." } } r.refsErr = err @@ -339,8 +340,14 @@ func (r *gitRepo) stat(rev string) (*RevInfo, error) { } } - // If we know a specific commit we need, fetch it. - if r.fetchLevel <= fetchSome && hash != "" && !r.local { + // If we know a specific commit we need and its ref, fetch it. + // We do NOT fetch arbitrary hashes (when we don't know the ref) + // because we want to avoid ever importing a commit that isn't + // reachable from refs/tags/* or refs/heads/* or HEAD. + // Both Gerrit and GitHub expose every CL/PR as a named ref, + // and we don't want those commits masquerading as being real + // pseudo-versions in the main repo. + if r.fetchLevel <= fetchSome && ref != "" && hash != "" && !r.local { r.fetchLevel = fetchSome var refspec string if ref != "" && ref != "HEAD" { @@ -646,16 +653,41 @@ func (r *gitRepo) RecentTag(rev, prefix string) (tag string, err error) { } rev = info.Name // expand hash prefixes - // describe sets tag and err using 'git describe' and reports whether the + // describe sets tag and err using 'git for-each-ref' and reports whether the // result is definitive. describe := func() (definitive bool) { var out []byte - out, err = Run(r.dir, "git", "describe", "--first-parent", "--always", "--abbrev=0", "--match", prefix+"v[0-9]*.[0-9]*.[0-9]*", "--tags", rev) + out, err = Run(r.dir, "git", "for-each-ref", "--format", "%(refname)", "refs/tags", "--merged", rev) if err != nil { - return true // Because we use "--always", describe should never fail. + return true + } + + // prefixed tags aren't valid semver tags so compare without prefix, but only tags with correct prefix + var highest string + for _, line := range strings.Split(string(out), "\n") { + line = strings.TrimSpace(line) + // git do support lstrip in for-each-ref format, but it was added in v2.13.0. Stripping here + // instead gives support for git v2.7.0. + if !strings.HasPrefix(line, "refs/tags/") { + continue + } + line = line[len("refs/tags/"):] + + if !strings.HasPrefix(line, prefix) { + continue + } + + semtag := line[len(prefix):] + // Consider only tags that are valid and complete (not just major.minor prefixes). + if c := semver.Canonical(semtag); c != "" && strings.HasPrefix(semtag, c) { + highest = semver.Max(highest, semtag) + } + } + + if highest != "" { + tag = prefix + highest } - tag = string(bytes.TrimSpace(out)) return tag != "" && !AllHex(tag) } diff --git a/src/cmd/go/internal/modfetch/codehost/vcs.go b/src/cmd/go/internal/modfetch/codehost/vcs.go index 59c2b15d19..bad802c9c3 100644 --- a/src/cmd/go/internal/modfetch/codehost/vcs.go +++ b/src/cmd/go/internal/modfetch/codehost/vcs.go @@ -7,11 +7,11 @@ package codehost import ( "encoding/xml" "fmt" + "internal/lazyregexp" "io" "io/ioutil" "os" "path/filepath" - "regexp" "sort" "strconv" "strings" @@ -29,8 +29,9 @@ import ( // The caller should report this error instead of continuing to probe // other possible module paths. // -// TODO(bcmills): See if we can invert this. (Return a distinguished error for -// “repo not found†and treat everything else as terminal.) +// TODO(golang.org/issue/31730): See if we can invert this. (Return a +// distinguished error for “repo not found†and treat everything else +// as terminal.) type VCSError struct { Err error } @@ -124,10 +125,10 @@ type vcsCmd struct { vcs string // vcs name "hg" init func(remote string) []string // cmd to init repo to track remote tags func(remote string) []string // cmd to list local tags - tagRE *regexp.Regexp // regexp to extract tag names from output of tags cmd + tagRE *lazyregexp.Regexp // regexp to extract tag names from output of tags cmd branches func(remote string) []string // cmd to list local branches - branchRE *regexp.Regexp // regexp to extract branch names from output of tags cmd - badLocalRevRE *regexp.Regexp // regexp of names that must not be served out of local cache without doing fetch first + branchRE *lazyregexp.Regexp // regexp to extract branch names from output of tags cmd + badLocalRevRE *lazyregexp.Regexp // regexp of names that must not be served out of local cache without doing fetch first statLocal func(rev, remote string) []string // cmd to stat local rev parseStat func(rev, out string) (*RevInfo, error) // cmd to parse output of statLocal fetch []string // cmd to fetch everything from remote @@ -136,7 +137,7 @@ type vcsCmd struct { readZip func(rev, subdir, remote, target string) []string // cmd to read rev's subdir as zip file } -var re = regexp.MustCompile +var re = lazyregexp.New var vcsCmds = map[string]*vcsCmd{ "hg": { diff --git a/src/cmd/go/internal/modfetch/coderepo.go b/src/cmd/go/internal/modfetch/coderepo.go index 5018b6d8af..3581f93fe7 100644 --- a/src/cmd/go/internal/modfetch/coderepo.go +++ b/src/cmd/go/internal/modfetch/coderepo.go @@ -23,55 +23,99 @@ import ( type codeRepo struct { modPath string - code codehost.Repo + // code is the repository containing this module. + code codehost.Repo + // codeRoot is the import path at the root of code. codeRoot string - codeDir string + // codeDir is the directory (relative to root) at which we expect to find the module. + // If pathMajor is non-empty and codeRoot is not the full modPath, + // then we look in both codeDir and codeDir+modPath + codeDir string - path string - pathPrefix string - pathMajor string + // pathMajor is the suffix of modPath that indicates its major version, + // or the empty string if modPath is at major version 0 or 1. + // + // pathMajor is typically of the form "/vN", but possibly ".vN", or + // ".vN-unstable" for modules resolved using gopkg.in. + pathMajor string + // pathPrefix is the prefix of modPath that excludes pathMajor. + // It is used only for logging. + pathPrefix string + + // pseudoMajor is the major version prefix to use when generating + // pseudo-versions for this module, derived from the module path. + // + // TODO(golang.org/issue/29262): We can't distinguish v0 from v1 using the + // path alone: we have to compute it by examining the tags at a particular + // revision. pseudoMajor string } -func newCodeRepo(code codehost.Repo, root, path string) (Repo, error) { - if !hasPathPrefix(path, root) { - return nil, fmt.Errorf("mismatched repo: found %s for %s", root, path) +// newCodeRepo returns a Repo that reads the source code for the module with the +// given path, from the repo stored in code, with the root of the repo +// containing the path given by codeRoot. +func newCodeRepo(code codehost.Repo, codeRoot, path string) (Repo, error) { + if !hasPathPrefix(path, codeRoot) { + return nil, fmt.Errorf("mismatched repo: found %s for %s", codeRoot, path) } pathPrefix, pathMajor, ok := module.SplitPathVersion(path) if !ok { return nil, fmt.Errorf("invalid module path %q", path) } + if codeRoot == path { + pathPrefix = path + } pseudoMajor := "v0" if pathMajor != "" { pseudoMajor = pathMajor[1:] } + // Compute codeDir = bar, the subdirectory within the repo + // corresponding to the module root. + // // At this point we might have: - // codeRoot = github.com/rsc/foo // path = github.com/rsc/foo/bar/v2 + // codeRoot = github.com/rsc/foo // pathPrefix = github.com/rsc/foo/bar // pathMajor = /v2 // pseudoMajor = v2 // - // Compute codeDir = bar, the subdirectory within the repo - // corresponding to the module root. - codeDir := strings.Trim(strings.TrimPrefix(pathPrefix, root), "/") - if strings.HasPrefix(path, "gopkg.in/") { - // But gopkg.in is a special legacy case, in which pathPrefix does not start with codeRoot. - // For example we might have: - // codeRoot = gopkg.in/yaml.v2 - // pathPrefix = gopkg.in/yaml - // pathMajor = .v2 - // pseudoMajor = v2 - // codeDir = pathPrefix (because codeRoot is not a prefix of pathPrefix) - // Clear codeDir - the module root is the repo root for gopkg.in repos. - codeDir = "" + // which gives + // codeDir = bar + // + // We know that pathPrefix is a prefix of path, and codeRoot is a prefix of + // path, but codeRoot may or may not be a prefix of pathPrefix, because + // codeRoot may be the entire path (in which case codeDir should be empty). + // That occurs in two situations. + // + // One is when a go-import meta tag resolves the complete module path, + // including the pathMajor suffix: + // path = nanomsg.org/go/mangos/v2 + // codeRoot = nanomsg.org/go/mangos/v2 + // pathPrefix = nanomsg.org/go/mangos + // pathMajor = /v2 + // pseudoMajor = v2 + // + // The other is similar: for gopkg.in only, the major version is encoded + // with a dot rather than a slash, and thus can't be in a subdirectory. + // path = gopkg.in/yaml.v2 + // codeRoot = gopkg.in/yaml.v2 + // pathPrefix = gopkg.in/yaml + // pathMajor = .v2 + // pseudoMajor = v2 + // + codeDir := "" + if codeRoot != path { + if !hasPathPrefix(pathPrefix, codeRoot) { + return nil, fmt.Errorf("repository rooted at %s cannot contain module %s", codeRoot, path) + } + codeDir = strings.Trim(pathPrefix[len(codeRoot):], "/") } r := &codeRepo{ modPath: path, code: code, - codeRoot: root, + codeRoot: codeRoot, codeDir: codeDir, pathPrefix: pathPrefix, pathMajor: pathMajor, @@ -149,9 +193,6 @@ func (r *codeRepo) Stat(rev string) (*RevInfo, error) { return r.Latest() } codeRev := r.revToRev(rev) - if semver.IsValid(codeRev) && r.codeDir != "" { - codeRev = r.codeDir + "/" + codeRev - } info, err := r.code.Stat(codeRev) if err != nil { return nil, err @@ -290,7 +331,7 @@ func (r *codeRepo) findDir(version string) (rev, dir string, gomod []byte, err e found1 := err1 == nil && isMajor(mpath1, r.pathMajor) var file2 string - if r.pathMajor != "" && !strings.HasPrefix(r.pathMajor, ".") { + if r.pathMajor != "" && r.codeRoot != r.modPath && !strings.HasPrefix(r.pathMajor, ".") { // Suppose pathMajor is "/v2". // Either go.mod should claim v2 and v2/go.mod should not exist, // or v2/go.mod should exist and claim v2. Not both. @@ -298,6 +339,9 @@ func (r *codeRepo) findDir(version string) (rev, dir string, gomod []byte, err e // because of replacement modules. This might be a fork of // the real module, found at a different path, usable only in // a replace directive. + // + // TODO(bcmills): This doesn't seem right. Investigate futher. + // (Notably: why can't we replace foo/v2 with fork-of-foo/v3?) dir2 := path.Join(r.codeDir, r.pathMajor[1:]) file2 = path.Join(dir2, "go.mod") gomod2, err2 := r.code.ReadFile(rev, file2, codehost.MaxGoMod) @@ -418,7 +462,7 @@ func (r *codeRepo) Zip(dst io.Writer, version string) error { } defer dl.Close() if actualDir != "" && !hasPathPrefix(dir, actualDir) { - return fmt.Errorf("internal error: downloading %v %v: dir=%q but actualDir=%q", r.path, rev, dir, actualDir) + return fmt.Errorf("internal error: downloading %v %v: dir=%q but actualDir=%q", r.modPath, rev, dir, actualDir) } subdir := strings.Trim(strings.TrimPrefix(dir, actualDir), "/") @@ -541,6 +585,9 @@ func (r *codeRepo) Zip(dst io.Writer, version string) error { return err } w, err := zw.Create(r.modPrefix(version) + "/" + name) + if err != nil { + return err + } lr := &io.LimitedReader{R: rc, N: size + 1} if _, err := io.Copy(w, lr); err != nil { return err @@ -587,6 +634,19 @@ func isVendoredPackage(name string) bool { if strings.HasPrefix(name, "vendor/") { i += len("vendor/") } else if j := strings.Index(name, "/vendor/"); j >= 0 { + // This offset looks incorrect; this should probably be + // + // i = j + len("/vendor/") + // + // (See https://golang.org/issue/31562.) + // + // Unfortunately, we can't fix it without invalidating checksums. + // Fortunately, the error appears to be strictly conservative: we'll retain + // vendored packages that we should have pruned, but we won't prune + // non-vendored packages that we should have retained. + // + // Since this defect doesn't seem to break anything, it's not worth fixing + // for now. i += len("/vendor/") } else { return false diff --git a/src/cmd/go/internal/modfetch/coderepo_test.go b/src/cmd/go/internal/modfetch/coderepo_test.go index c93d8dbe44..724602233c 100644 --- a/src/cmd/go/internal/modfetch/coderepo_test.go +++ b/src/cmd/go/internal/modfetch/coderepo_test.go @@ -16,6 +16,7 @@ import ( "testing" "time" + "cmd/go/internal/cfg" "cmd/go/internal/modfetch/codehost" ) @@ -24,6 +25,14 @@ func TestMain(m *testing.M) { } func testMain(m *testing.M) int { + SetProxy("direct") + + // The sum database is populated using a released version of the go command, + // but this test may include fixes for additional modules that previously + // could not be fetched. Since this test isn't executing any of the resolved + // code, bypass the sum database. + cfg.GOSUMDB = "off" + dir, err := ioutil.TempDir("", "gitrepo-test-") if err != nil { log.Fatal(err) @@ -43,7 +52,7 @@ var altVgotests = []string{ vgotest1hg, } -var codeRepoTests = []struct { +type codeRepoTest struct { path string lookerr string mpath string @@ -57,7 +66,9 @@ var codeRepoTests = []struct { gomoderr string zip []string ziperr string -}{ +} + +var codeRepoTests = []codeRepoTest{ { path: "github.com/rsc/vgotest1", rev: "v0.0.0", @@ -284,10 +295,10 @@ var codeRepoTests = []struct { { path: "gopkg.in/yaml.v2", rev: "v2", - version: "v2.2.2", - name: "51d6538a90f86fe93ac480b35f37b2be17fef232", - short: "51d6538a90f8", - time: time.Date(2018, 11, 15, 11, 05, 04, 0, time.UTC), + version: "v2.2.3-0.20190319135612-7b8349ac747c", + name: "7b8349ac747c6a24702b762d2c4fd9266cf4f1d6", + short: "7b8349ac747c", + time: time.Date(2019, 03, 19, 13, 56, 12, 0, time.UTC), gomod: "module \"gopkg.in/yaml.v2\"\n\nrequire (\n\t\"gopkg.in/check.v1\" v0.0.0-20161208181325-20d25e280405\n)\n", }, { @@ -323,136 +334,152 @@ var codeRepoTests = []struct { time: time.Date(2017, 5, 31, 16, 3, 50, 0, time.UTC), gomod: "module gopkg.in/natefinch/lumberjack.v2\n", }, + { + path: "vcs-test.golang.org/go/v2module/v2", + rev: "v2.0.0", + version: "v2.0.0", + name: "203b91c896acd173aa719e4cdcb7d463c4b090fa", + short: "203b91c896ac", + time: time.Date(2019, 4, 3, 15, 52, 15, 0, time.UTC), + gomod: "module vcs-test.golang.org/go/v2module/v2\n\ngo 1.12\n", + }, } func TestCodeRepo(t *testing.T) { testenv.MustHaveExternalNetwork(t) - tmpdir, err := ioutil.TempDir("", "vgo-modfetch-test-") + tmpdir, err := ioutil.TempDir("", "modfetch-test-") if err != nil { t.Fatal(err) } defer os.RemoveAll(tmpdir) - for _, tt := range codeRepoTests { - f := func(t *testing.T) { - repo, err := Lookup(tt.path) - if tt.lookerr != "" { - if err != nil && err.Error() == tt.lookerr { - return - } - t.Errorf("Lookup(%q): %v, want error %q", tt.path, err, tt.lookerr) - } - if err != nil { - t.Fatalf("Lookup(%q): %v", tt.path, err) - } - if tt.mpath == "" { - tt.mpath = tt.path - } - if mpath := repo.ModulePath(); mpath != tt.mpath { - t.Errorf("repo.ModulePath() = %q, want %q", mpath, tt.mpath) - } - info, err := repo.Stat(tt.rev) - if err != nil { - if tt.err != "" { - if !strings.Contains(err.Error(), tt.err) { - t.Fatalf("repoStat(%q): %v, wanted %q", tt.rev, err, tt.err) - } - return - } - t.Fatalf("repo.Stat(%q): %v", tt.rev, err) - } - if tt.err != "" { - t.Errorf("repo.Stat(%q): success, wanted error", tt.rev) - } - if info.Version != tt.version { - t.Errorf("info.Version = %q, want %q", info.Version, tt.version) - } - if info.Name != tt.name { - t.Errorf("info.Name = %q, want %q", info.Name, tt.name) - } - if info.Short != tt.short { - t.Errorf("info.Short = %q, want %q", info.Short, tt.short) - } - if !info.Time.Equal(tt.time) { - t.Errorf("info.Time = %v, want %v", info.Time, tt.time) - } - if tt.gomod != "" || tt.gomoderr != "" { - data, err := repo.GoMod(tt.version) - if err != nil && tt.gomoderr == "" { - t.Errorf("repo.GoMod(%q): %v", tt.version, err) - } else if err != nil && tt.gomoderr != "" { - if err.Error() != tt.gomoderr { - t.Errorf("repo.GoMod(%q): %v, want %q", tt.version, err, tt.gomoderr) - } - } else if tt.gomoderr != "" { - t.Errorf("repo.GoMod(%q) = %q, want error %q", tt.version, data, tt.gomoderr) - } else if string(data) != tt.gomod { - t.Errorf("repo.GoMod(%q) = %q, want %q", tt.version, data, tt.gomod) - } - } - if tt.zip != nil || tt.ziperr != "" { - f, err := ioutil.TempFile(tmpdir, tt.version+".zip.") - if err != nil { - t.Fatalf("ioutil.TempFile: %v", err) - } - zipfile := f.Name() - err = repo.Zip(f, tt.version) - f.Close() - if err != nil { - if tt.ziperr != "" { - if err.Error() == tt.ziperr { + + t.Run("parallel", func(t *testing.T) { + for _, tt := range codeRepoTests { + f := func(tt codeRepoTest) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + + repo, err := Lookup(tt.path) + if tt.lookerr != "" { + if err != nil && err.Error() == tt.lookerr { return } - t.Fatalf("repo.Zip(%q): %v, want error %q", tt.version, err, tt.ziperr) + t.Errorf("Lookup(%q): %v, want error %q", tt.path, err, tt.lookerr) } - t.Fatalf("repo.Zip(%q): %v", tt.version, err) - } - if tt.ziperr != "" { - t.Errorf("repo.Zip(%q): success, want error %q", tt.version, tt.ziperr) - } - prefix := tt.path + "@" + tt.version + "/" - z, err := zip.OpenReader(zipfile) - if err != nil { - t.Fatalf("open zip %s: %v", zipfile, err) - } - var names []string - for _, file := range z.File { - if !strings.HasPrefix(file.Name, prefix) { - t.Errorf("zip entry %v does not start with prefix %v", file.Name, prefix) - continue + if err != nil { + t.Fatalf("Lookup(%q): %v", tt.path, err) + } + if tt.mpath == "" { + tt.mpath = tt.path + } + if mpath := repo.ModulePath(); mpath != tt.mpath { + t.Errorf("repo.ModulePath() = %q, want %q", mpath, tt.mpath) + } + info, err := repo.Stat(tt.rev) + if err != nil { + if tt.err != "" { + if !strings.Contains(err.Error(), tt.err) { + t.Fatalf("repoStat(%q): %v, wanted %q", tt.rev, err, tt.err) + } + return + } + t.Fatalf("repo.Stat(%q): %v", tt.rev, err) + } + if tt.err != "" { + t.Errorf("repo.Stat(%q): success, wanted error", tt.rev) + } + if info.Version != tt.version { + t.Errorf("info.Version = %q, want %q", info.Version, tt.version) + } + if info.Name != tt.name { + t.Errorf("info.Name = %q, want %q", info.Name, tt.name) + } + if info.Short != tt.short { + t.Errorf("info.Short = %q, want %q", info.Short, tt.short) + } + if !info.Time.Equal(tt.time) { + t.Errorf("info.Time = %v, want %v", info.Time, tt.time) + } + if tt.gomod != "" || tt.gomoderr != "" { + data, err := repo.GoMod(tt.version) + if err != nil && tt.gomoderr == "" { + t.Errorf("repo.GoMod(%q): %v", tt.version, err) + } else if err != nil && tt.gomoderr != "" { + if err.Error() != tt.gomoderr { + t.Errorf("repo.GoMod(%q): %v, want %q", tt.version, err, tt.gomoderr) + } + } else if tt.gomoderr != "" { + t.Errorf("repo.GoMod(%q) = %q, want error %q", tt.version, data, tt.gomoderr) + } else if string(data) != tt.gomod { + t.Errorf("repo.GoMod(%q) = %q, want %q", tt.version, data, tt.gomod) + } + } + if tt.zip != nil || tt.ziperr != "" { + f, err := ioutil.TempFile(tmpdir, tt.version+".zip.") + if err != nil { + t.Fatalf("ioutil.TempFile: %v", err) + } + zipfile := f.Name() + err = repo.Zip(f, tt.version) + f.Close() + if err != nil { + if tt.ziperr != "" { + if err.Error() == tt.ziperr { + return + } + t.Fatalf("repo.Zip(%q): %v, want error %q", tt.version, err, tt.ziperr) + } + t.Fatalf("repo.Zip(%q): %v", tt.version, err) + } + if tt.ziperr != "" { + t.Errorf("repo.Zip(%q): success, want error %q", tt.version, tt.ziperr) + } + prefix := tt.path + "@" + tt.version + "/" + z, err := zip.OpenReader(zipfile) + if err != nil { + t.Fatalf("open zip %s: %v", zipfile, err) + } + var names []string + for _, file := range z.File { + if !strings.HasPrefix(file.Name, prefix) { + t.Errorf("zip entry %v does not start with prefix %v", file.Name, prefix) + continue + } + names = append(names, file.Name[len(prefix):]) + } + z.Close() + if !reflect.DeepEqual(names, tt.zip) { + t.Fatalf("zip = %v\nwant %v\n", names, tt.zip) + } } - names = append(names, file.Name[len(prefix):]) } - z.Close() - if !reflect.DeepEqual(names, tt.zip) { - t.Fatalf("zip = %v\nwant %v\n", names, tt.zip) + } + t.Run(strings.ReplaceAll(tt.path, "/", "_")+"/"+tt.rev, f(tt)) + if strings.HasPrefix(tt.path, vgotest1git) { + for _, alt := range altVgotests { + // Note: Communicating with f through tt; should be cleaned up. + old := tt + tt.path = alt + strings.TrimPrefix(tt.path, vgotest1git) + if strings.HasPrefix(tt.mpath, vgotest1git) { + tt.mpath = alt + strings.TrimPrefix(tt.mpath, vgotest1git) + } + var m map[string]string + if alt == vgotest1hg { + m = hgmap + } + tt.version = remap(tt.version, m) + tt.name = remap(tt.name, m) + tt.short = remap(tt.short, m) + tt.rev = remap(tt.rev, m) + tt.gomoderr = remap(tt.gomoderr, m) + tt.ziperr = remap(tt.ziperr, m) + t.Run(strings.ReplaceAll(tt.path, "/", "_")+"/"+tt.rev, f(tt)) + tt = old } } } - t.Run(strings.ReplaceAll(tt.path, "/", "_")+"/"+tt.rev, f) - if strings.HasPrefix(tt.path, vgotest1git) { - for _, alt := range altVgotests { - // Note: Communicating with f through tt; should be cleaned up. - old := tt - tt.path = alt + strings.TrimPrefix(tt.path, vgotest1git) - if strings.HasPrefix(tt.mpath, vgotest1git) { - tt.mpath = alt + strings.TrimPrefix(tt.mpath, vgotest1git) - } - var m map[string]string - if alt == vgotest1hg { - m = hgmap - } - tt.version = remap(tt.version, m) - tt.name = remap(tt.name, m) - tt.short = remap(tt.short, m) - tt.rev = remap(tt.rev, m) - tt.gomoderr = remap(tt.gomoderr, m) - tt.ziperr = remap(tt.ziperr, m) - t.Run(strings.ReplaceAll(tt.path, "/", "_")+"/"+tt.rev, f) - tt = old - } - } - } + }) } var hgmap = map[string]string{ @@ -527,21 +554,27 @@ func TestCodeRepoVersions(t *testing.T) { t.Fatal(err) } defer os.RemoveAll(tmpdir) - for _, tt := range codeRepoVersionsTests { - t.Run(strings.ReplaceAll(tt.path, "/", "_"), func(t *testing.T) { - repo, err := Lookup(tt.path) - if err != nil { - t.Fatalf("Lookup(%q): %v", tt.path, err) - } - list, err := repo.Versions(tt.prefix) - if err != nil { - t.Fatalf("Versions(%q): %v", tt.prefix, err) - } - if !reflect.DeepEqual(list, tt.versions) { - t.Fatalf("Versions(%q):\nhave %v\nwant %v", tt.prefix, list, tt.versions) - } - }) - } + + t.Run("parallel", func(t *testing.T) { + for _, tt := range codeRepoVersionsTests { + t.Run(strings.ReplaceAll(tt.path, "/", "_"), func(t *testing.T) { + tt := tt + t.Parallel() + + repo, err := Lookup(tt.path) + if err != nil { + t.Fatalf("Lookup(%q): %v", tt.path, err) + } + list, err := repo.Versions(tt.prefix) + if err != nil { + t.Fatalf("Versions(%q): %v", tt.prefix, err) + } + if !reflect.DeepEqual(list, tt.versions) { + t.Fatalf("Versions(%q):\nhave %v\nwant %v", tt.prefix, list, tt.versions) + } + }) + } + }) } var latestTests = []struct { @@ -575,31 +608,37 @@ func TestLatest(t *testing.T) { t.Fatal(err) } defer os.RemoveAll(tmpdir) - for _, tt := range latestTests { - name := strings.ReplaceAll(tt.path, "/", "_") - t.Run(name, func(t *testing.T) { - repo, err := Lookup(tt.path) - if err != nil { - t.Fatalf("Lookup(%q): %v", tt.path, err) - } - info, err := repo.Latest() - if err != nil { - if tt.err != "" { - if err.Error() == tt.err { - return - } - t.Fatalf("Latest(): %v, want %q", err, tt.err) + + t.Run("parallel", func(t *testing.T) { + for _, tt := range latestTests { + name := strings.ReplaceAll(tt.path, "/", "_") + t.Run(name, func(t *testing.T) { + tt := tt + t.Parallel() + + repo, err := Lookup(tt.path) + if err != nil { + t.Fatalf("Lookup(%q): %v", tt.path, err) } - t.Fatalf("Latest(): %v", err) - } - if tt.err != "" { - t.Fatalf("Latest() = %v, want error %q", info.Version, tt.err) - } - if info.Version != tt.version { - t.Fatalf("Latest() = %v, want %v", info.Version, tt.version) - } - }) - } + info, err := repo.Latest() + if err != nil { + if tt.err != "" { + if err.Error() == tt.err { + return + } + t.Fatalf("Latest(): %v, want %q", err, tt.err) + } + t.Fatalf("Latest(): %v", err) + } + if tt.err != "" { + t.Fatalf("Latest() = %v, want error %q", info.Version, tt.err) + } + if info.Version != tt.version { + t.Fatalf("Latest() = %v, want %v", info.Version, tt.version) + } + }) + } + }) } // fixedTagsRepo is a fake codehost.Repo that returns a fixed list of tags diff --git a/src/cmd/go/internal/modfetch/fetch.go b/src/cmd/go/internal/modfetch/fetch.go index 81a6c843ab..817f7657e2 100644 --- a/src/cmd/go/internal/modfetch/fetch.go +++ b/src/cmd/go/internal/modfetch/fetch.go @@ -48,7 +48,7 @@ func Download(mod module.Version) (dir string, err error) { if err := download(mod, dir); err != nil { return cached{"", err} } - checkSum(mod) + checkMod(mod) return cached{dir, nil} }).(cached) return c.dir, c.err @@ -246,9 +246,9 @@ func downloadZip(mod module.Version, zipfile string) (err error) { if err != nil { return err } - checkOneSum(mod, hash) + checkModSum(mod, hash) - if err := renameio.WriteFile(zipfile+"hash", []byte(hash)); err != nil { + if err := renameio.WriteFile(zipfile+"hash", []byte(hash), 0666); err != nil { return err } if err := os.Rename(f.Name(), zipfile); err != nil { @@ -305,7 +305,7 @@ func initGoSum() bool { readGoSum(migrate, alt, data) for mod, sums := range migrate { for _, sum := range sums { - checkOneSumLocked(mod, sum) + addModSumLocked(mod, sum) } } goSum.modverify = alt @@ -348,8 +348,8 @@ func readGoSum(dst map[module.Version][]string, file string, data []byte) { } } -// checkSum checks the given module's checksum. -func checkSum(mod module.Version) { +// checkMod checks the given module's checksum. +func checkMod(mod module.Version) { if PkgMod == "" { // Do not use current directory. return @@ -373,7 +373,7 @@ func checkSum(mod module.Version) { base.Fatalf("verifying %s@%s: unexpected ziphash: %q", mod.Path, mod.Version, h) } - checkOneSum(mod, h) + checkModSum(mod, h) } // goModSum returns the checksum for the go.mod contents. @@ -391,36 +391,90 @@ func checkGoMod(path, version string, data []byte) { base.Fatalf("verifying %s %s go.mod: %v", path, version, err) } - checkOneSum(module.Version{Path: path, Version: version + "/go.mod"}, h) + checkModSum(module.Version{Path: path, Version: version + "/go.mod"}, h) } -// checkOneSum checks that the recorded hash for mod is h. -func checkOneSum(mod module.Version, h string) { +// checkModSum checks that the recorded checksum for mod is h. +func checkModSum(mod module.Version, h string) { + // We lock goSum when manipulating it, + // but we arrange to release the lock when calling checkSumDB, + // so that parallel calls to checkModHash can execute parallel calls + // to checkSumDB. + + // Check whether mod+h is listed in go.sum already. If so, we're done. goSum.mu.Lock() - defer goSum.mu.Unlock() - if initGoSum() { - checkOneSumLocked(mod, h) + inited := initGoSum() + done := inited && haveModSumLocked(mod, h) + goSum.mu.Unlock() + + if done { + return + } + + // Not listed, so we want to add them. + // Consult checksum database if appropriate. + if useSumDB(mod) { + // Calls base.Fatalf if mismatch detected. + checkSumDB(mod, h) + } + + // Add mod+h to go.sum, if it hasn't appeared already. + if inited { + goSum.mu.Lock() + addModSumLocked(mod, h) + goSum.mu.Unlock() } } -func checkOneSumLocked(mod module.Version, h string) { +// haveModSumLocked reports whether the pair mod,h is already listed in go.sum. +// If it finds a conflicting pair instead, it calls base.Fatalf. +// goSum.mu must be locked. +func haveModSumLocked(mod module.Version, h string) bool { goSum.checked[modSum{mod, h}] = true - for _, vh := range goSum.m[mod] { if h == vh { - return + return true } if strings.HasPrefix(vh, "h1:") { - base.Fatalf("verifying %s@%s: checksum mismatch\n\tdownloaded: %v\n\tgo.sum: %v", mod.Path, mod.Version, h, vh) + base.Fatalf("verifying %s@%s: checksum mismatch\n\tdownloaded: %v\n\tgo.sum: %v"+goSumMismatch, mod.Path, mod.Version, h, vh) } } + return false +} + +// addModSumLocked adds the pair mod,h to go.sum. +// goSum.mu must be locked. +func addModSumLocked(mod module.Version, h string) { + if haveModSumLocked(mod, h) { + return + } if len(goSum.m[mod]) > 0 { - fmt.Fprintf(os.Stderr, "warning: verifying %s@%s: unknown hashes in go.sum: %v; adding %v", mod.Path, mod.Version, strings.Join(goSum.m[mod], ", "), h) + fmt.Fprintf(os.Stderr, "warning: verifying %s@%s: unknown hashes in go.sum: %v; adding %v"+hashVersionMismatch, mod.Path, mod.Version, strings.Join(goSum.m[mod], ", "), h) } goSum.m[mod] = append(goSum.m[mod], h) goSum.dirty = true } +// checkSumDB checks the mod, h pair against the Go checksum database. +// It calls base.Fatalf if the hash is to be rejected. +func checkSumDB(mod module.Version, h string) { + db, lines, err := lookupSumDB(mod) + if err != nil { + base.Fatalf("verifying %s@%s: %v", mod.Path, mod.Version, err) + } + + have := mod.Path + " " + mod.Version + " " + h + prefix := mod.Path + " " + mod.Version + " h1:" + for _, line := range lines { + if line == have { + return + } + if strings.HasPrefix(line, prefix) { + base.Fatalf("verifying %s@%s: checksum mismatch\n\tdownloaded: %v\n\t%s: %v"+sumdbMismatch, mod.Path, mod.Version, h, db, line[len(prefix)-len("h1:"):]) + } + } +} + // Sum returns the checksum for the downloaded copy of the given module, // if present in the download cache. func Sum(mod module.Version) string { @@ -455,6 +509,9 @@ func WriteGoSum() { // Don't bother opening the go.sum file if we don't have anything to add. return } + if cfg.BuildMod == "readonly" { + base.Fatalf("go: updates to go.sum needed, disabled by -mod=readonly") + } // We want to avoid races between creating the lockfile and deleting it, but // we also don't want to leave a permanent lockfile in the user's repository. @@ -489,7 +546,8 @@ func WriteGoSum() { goSum.m = make(map[module.Version][]string, len(goSum.m)) readGoSum(goSum.m, GoSumFile, data) for ms := range goSum.checked { - checkOneSumLocked(ms.mod, ms.sum) + addModSumLocked(ms.mod, ms.sum) + goSum.dirty = true } } @@ -507,7 +565,7 @@ func WriteGoSum() { } } - if err := renameio.WriteFile(GoSumFile, buf.Bytes()); err != nil { + if err := renameio.WriteFile(GoSumFile, buf.Bytes(), 0666); err != nil { base.Fatalf("go: writing go.sum: %v", err) } @@ -539,3 +597,130 @@ func TrimGoSum(keep map[module.Version]bool) { } } } + +const goSumMismatch = ` + +SECURITY ERROR +This download does NOT match an earlier download recorded in go.sum. +The bits may have been replaced on the origin server, or an attacker may +have intercepted the download attempt. + +For more information, see 'go help module-auth'. +` + +const sumdbMismatch = ` + +SECURITY ERROR +This download does NOT match the one reported by the checksum server. +The bits may have been replaced on the origin server, or an attacker may +have intercepted the download attempt. + +For more information, see 'go help module-auth'. +` + +const hashVersionMismatch = ` + +SECURITY WARNING +This download is listed in go.sum, but using an unknown hash algorithm. +The download cannot be verified. + +For more information, see 'go help module-auth'. + +` + +var HelpSum = &base.Command{ + UsageLine: "module-auth", + Short: "module authentication using go.sum", + Long: ` +The go command tries to authenticate every downloaded module, +checking that the bits downloaded for a specific module version today +match bits downloaded yesterday. This ensures repeatable builds +and detects introduction of unexpected changes, malicious or not. + +In each module's root, alongside go.mod, the go command maintains +a file named go.sum containing the cryptographic checksums of the +module's dependencies. + +The form of each line in go.sum is three fields: + + [/go.mod] + +Each known module version results in two lines in the go.sum file. +The first line gives the hash of the module version's file tree. +The second line appends "/go.mod" to the version and gives the hash +of only the module version's (possibly synthesized) go.mod file. +The go.mod-only hash allows downloading and authenticating a +module version's go.mod file, which is needed to compute the +dependency graph, without also downloading all the module's source code. + +The hash begins with an algorithm prefix of the form "h:". +The only defined algorithm prefix is "h1:", which uses SHA-256. + +Module authentication failures + +The go command maintains a cache of downloaded packages and computes +and records the cryptographic checksum of each package at download time. +In normal operation, the go command checks the main module's go.sum file +against these precomputed checksums instead of recomputing them on +each command invocation. The 'go mod verify' command checks that +the cached copies of module downloads still match both their recorded +checksums and the entries in go.sum. + +In day-to-day development, the checksum of a given module version +should never change. Each time a dependency is used by a given main +module, the go command checks its local cached copy, freshly +downloaded or not, against the main module's go.sum. If the checksums +don't match, the go command reports the mismatch as a security error +and refuses to run the build. When this happens, proceed with caution: +code changing unexpectedly means today's build will not match +yesterday's, and the unexpected change may not be beneficial. + +If the go command reports a mismatch in go.sum, the downloaded code +for the reported module version does not match the one used in a +previous build of the main module. It is important at that point +to find out what the right checksum should be, to decide whether +go.sum is wrong or the downloaded code is wrong. Usually go.sum is right: +you want to use the same code you used yesterday. + +If a downloaded module is not yet included in go.sum and it is a publicly +available module, the go command consults the Go checksum database to fetch +the expected go.sum lines. If the downloaded code does not match those +lines, the go command reports the mismatch and exits. Note that the +database is not consulted for module versions already listed in go.sum. + +If a go.sum mismatch is reported, it is always worth investigating why +the code downloaded today differs from what was downloaded yesterday. + +The GOSUMDB environment variable identifies the name of checksum database +to use and optionally its public key and URL, as in: + + GOSUMDB="sum.golang.org" + GOSUMDB="sum.golang.org+" + GOSUMDB="sum.golang.org+ https://sum.golang.org" + +The go command knows the public key of sum.golang.org; use of any other +database requires giving the public key explicitly. The URL defaults to +"https://" followed by the database name. + +GOSUMDB defaults to "sum.golang.org" when GOPROXY="https://proxy.golang.org" +and otherwise defaults to "off". NOTE: The GOSUMDB will later default to +"sum.golang.org" unconditionally. + +If GOSUMDB is set to "off", or if "go get" is invoked with the -insecure flag, +the checksum database is never consulted, but at the cost of giving up the +security guarantee of verified repeatable downloads for all modules. +A better way to bypass the checksum database for specific modules is +to use the GONOSUMDB environment variable. + +The GONOSUMDB environment variable is a comma-separated list of +patterns (in the syntax of Go's path.Match) of module path prefixes +that should not be compared against the checksum database. +For example, + + GONOSUMDB=*.corp.example.com,rsc.io/private + +disables checksum database lookups for modules with path prefixes matching +either pattern, including "git.corp.example.com/xyzzy", "rsc.io/private", +and "rsc.io/private/quux". +`, +} diff --git a/src/cmd/go/internal/modfetch/key.go b/src/cmd/go/internal/modfetch/key.go new file mode 100644 index 0000000000..06f9989b9d --- /dev/null +++ b/src/cmd/go/internal/modfetch/key.go @@ -0,0 +1,9 @@ +// 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 modfetch + +var knownGOSUMDB = map[string]string{ + "sum.golang.org": "sum.golang.org+033de0ae+Ac4zctda0e5eza+HJyk9SxEdh+s3Ux18htTTAD8OuAn8", +} diff --git a/src/cmd/go/internal/modfetch/noweb.go b/src/cmd/go/internal/modfetch/noweb.go deleted file mode 100644 index 9d713dcc66..0000000000 --- a/src/cmd/go/internal/modfetch/noweb.go +++ /dev/null @@ -1,24 +0,0 @@ -// 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. - -// +build cmd_go_bootstrap - -package modfetch - -import ( - "fmt" - "io" -) - -func webGetGoGet(url string, body *io.ReadCloser) error { - return fmt.Errorf("no network in go_bootstrap") -} - -func webGetBytes(url string, body *[]byte) error { - return fmt.Errorf("no network in go_bootstrap") -} - -func webGetBody(url string, body *io.ReadCloser) error { - return fmt.Errorf("no network in go_bootstrap") -} diff --git a/src/cmd/go/internal/modfetch/proxy.go b/src/cmd/go/internal/modfetch/proxy.go index 60ed2a3796..605c72c0ab 100644 --- a/src/cmd/go/internal/modfetch/proxy.go +++ b/src/cmd/go/internal/modfetch/proxy.go @@ -6,17 +6,26 @@ package modfetch import ( "encoding/json" + "errors" "fmt" "io" + "io/ioutil" "net/url" "os" + pathpkg "path" + "path/filepath" + "runtime" "strings" + "sync" "time" + "unicode" "cmd/go/internal/base" + "cmd/go/internal/cfg" "cmd/go/internal/modfetch/codehost" "cmd/go/internal/module" "cmd/go/internal/semver" + "cmd/go/internal/web" ) var HelpGoproxy = &base.Command{ @@ -28,8 +37,13 @@ directly, just as 'go get' always has. The GOPROXY environment variable allows further control over the download source. If GOPROXY is unset, is the empty string, or is the string "direct", downloads use the default direct connection to version control systems. Setting GOPROXY to "off" disallows downloading modules from -any source. Otherwise, GOPROXY is expected to be the URL of a module proxy, -in which case the go command will fetch all modules from that proxy. +any source. Otherwise, GOPROXY is expected to be a comma-separated list of +the URLs of module proxies, in which case the go command will fetch modules +from those proxies. For each request, the go command tries each proxy in sequence, +only moving to the next if the current proxy returns a 404 or 410 HTTP response. +The string "direct" may appear in the proxy list, to cause a direct connection to +be attempted at that point in the search. + No matter the source of the modules, downloaded modules must match existing entries in go.sum (see 'go help modules' for discussion of verification). @@ -85,40 +99,153 @@ cached module versions with GOPROXY=https://example.com/proxy. `, } -var proxyURL = os.Getenv("GOPROXY") +var proxyURL = cfg.Getenv("GOPROXY") + +// SetProxy sets the proxy to use when fetching modules. +// It accepts the same syntax as the GOPROXY environment variable, +// which also provides its default configuration. +// SetProxy must not be called after the first module fetch has begun. +func SetProxy(url string) { + proxyURL = url +} + +var proxyOnce struct { + sync.Once + list []string + err error +} + +func proxyURLs() ([]string, error) { + proxyOnce.Do(func() { + for _, proxyURL := range strings.Split(proxyURL, ",") { + if proxyURL == "" { + continue + } + if proxyURL == "direct" { + proxyOnce.list = append(proxyOnce.list, "direct") + continue + } + + // Check that newProxyRepo accepts the URL. + // It won't do anything with the path. + _, err := newProxyRepo(proxyURL, "golang.org/x/text") + if err != nil { + proxyOnce.err = err + return + } + proxyOnce.list = append(proxyOnce.list, proxyURL) + } + }) + + return proxyOnce.list, proxyOnce.err +} func lookupProxy(path string) (Repo, error) { - if strings.Contains(proxyURL, ",") { - return nil, fmt.Errorf("invalid $GOPROXY setting: cannot have comma") + list, err := proxyURLs() + if err != nil { + return nil, err } - u, err := url.Parse(proxyURL) - if err != nil || u.Scheme != "http" && u.Scheme != "https" && u.Scheme != "file" { - // Don't echo $GOPROXY back in case it has user:password in it (sigh). - return nil, fmt.Errorf("invalid $GOPROXY setting: malformed URL or invalid scheme (must be http, https, file)") + + var repos listRepo + for _, u := range list { + var r Repo + if u == "direct" { + // lookupDirect does actual network traffic. + // Especially if GOPROXY="http://mainproxy,direct", + // avoid the network until we need it by using a lazyRepo wrapper. + r = &lazyRepo{setup: lookupDirect, path: path} + } else { + // The URL itself was checked in proxyURLs. + // The only possible error here is a bad path, + // so we can return it unconditionally. + r, err = newProxyRepo(u, path) + if err != nil { + return nil, err + } + } + repos = append(repos, r) } - return newProxyRepo(u.String(), path) + return repos, nil } type proxyRepo struct { - url string + url *url.URL path string } func newProxyRepo(baseURL, path string) (Repo, error) { + base, err := url.Parse(baseURL) + if err != nil { + return nil, err + } + switch base.Scheme { + case "http", "https": + // ok + case "file": + if *base != (url.URL{Scheme: base.Scheme, Path: base.Path, RawPath: base.RawPath}) { + return nil, fmt.Errorf("invalid file:// proxy URL with non-path elements: %s", web.Redacted(base)) + } + case "": + return nil, fmt.Errorf("invalid proxy URL missing scheme: %s", web.Redacted(base)) + default: + return nil, fmt.Errorf("invalid proxy URL scheme (must be https, http, file): %s", web.Redacted(base)) + } + enc, err := module.EncodePath(path) if err != nil { return nil, err } - return &proxyRepo{strings.TrimSuffix(baseURL, "/") + "/" + pathEscape(enc), path}, nil + + base.Path = strings.TrimSuffix(base.Path, "/") + "/" + enc + base.RawPath = strings.TrimSuffix(base.RawPath, "/") + "/" + pathEscape(enc) + return &proxyRepo{base, path}, nil } func (p *proxyRepo) ModulePath() string { return p.path } +func (p *proxyRepo) getBytes(path string) ([]byte, error) { + body, err := p.getBody(path) + if err != nil { + return nil, err + } + defer body.Close() + return ioutil.ReadAll(body) +} + +func (p *proxyRepo) getBody(path string) (io.ReadCloser, error) { + fullPath := pathpkg.Join(p.url.Path, path) + if p.url.Scheme == "file" { + rawPath, err := url.PathUnescape(fullPath) + if err != nil { + return nil, err + } + if runtime.GOOS == "windows" && len(rawPath) >= 4 && rawPath[0] == '/' && unicode.IsLetter(rune(rawPath[1])) && rawPath[2] == ':' { + // On Windows, file URLs look like "file:///C:/foo/bar". url.Path will + // start with a slash which must be removed. See golang.org/issue/6027. + rawPath = rawPath[1:] + } + return os.Open(filepath.FromSlash(rawPath)) + } + + target := *p.url + target.Path = fullPath + target.RawPath = pathpkg.Join(target.RawPath, pathEscape(path)) + + resp, err := web.Get(web.DefaultSecurity, &target) + if err != nil { + return nil, err + } + if err := resp.Err(); err != nil { + resp.Body.Close() + return nil, err + } + return resp.Body, nil +} + func (p *proxyRepo) Versions(prefix string) ([]string, error) { - var data []byte - err := webGetBytes(p.url+"/@v/list", &data) + data, err := p.getBytes("@v/list") if err != nil { return nil, err } @@ -134,8 +261,7 @@ func (p *proxyRepo) Versions(prefix string) ([]string, error) { } func (p *proxyRepo) latest() (*RevInfo, error) { - var data []byte - err := webGetBytes(p.url+"/@v/list", &data) + data, err := p.getBytes("@v/list") if err != nil { return nil, err } @@ -164,12 +290,11 @@ func (p *proxyRepo) latest() (*RevInfo, error) { } func (p *proxyRepo) Stat(rev string) (*RevInfo, error) { - var data []byte encRev, err := module.EncodeVersion(rev) if err != nil { return nil, err } - err = webGetBytes(p.url+"/@v/"+pathEscape(encRev)+".info", &data) + data, err := p.getBytes("@v/" + encRev + ".info") if err != nil { return nil, err } @@ -181,9 +306,7 @@ func (p *proxyRepo) Stat(rev string) (*RevInfo, error) { } func (p *proxyRepo) Latest() (*RevInfo, error) { - var data []byte - u := p.url + "/@latest" - err := webGetBytes(u, &data) + data, err := p.getBytes("@latest") if err != nil { // TODO return err if not 404 return p.latest() @@ -196,12 +319,11 @@ func (p *proxyRepo) Latest() (*RevInfo, error) { } func (p *proxyRepo) GoMod(version string) ([]byte, error) { - var data []byte encVer, err := module.EncodeVersion(version) if err != nil { return nil, err } - err = webGetBytes(p.url+"/@v/"+pathEscape(encVer)+".mod", &data) + data, err := p.getBytes("@v/" + encVer + ".mod") if err != nil { return nil, err } @@ -209,12 +331,11 @@ func (p *proxyRepo) GoMod(version string) ([]byte, error) { } func (p *proxyRepo) Zip(dst io.Writer, version string) error { - var body io.ReadCloser encVer, err := module.EncodeVersion(version) if err != nil { return err } - err = webGetBody(p.url+"/@v/"+pathEscape(encVer)+".zip", &body) + body, err := p.getBody("@v/" + encVer + ".zip") if err != nil { return err } @@ -236,3 +357,117 @@ func (p *proxyRepo) Zip(dst io.Writer, version string) error { func pathEscape(s string) string { return strings.ReplaceAll(url.PathEscape(s), "%2F", "/") } + +// A lazyRepo is a lazily-initialized Repo, +// constructed on demand by calling setup. +type lazyRepo struct { + path string + setup func(string) (Repo, error) + once sync.Once + repo Repo + err error +} + +func (r *lazyRepo) init() { + r.repo, r.err = r.setup(r.path) +} + +func (r *lazyRepo) ModulePath() string { + return r.path +} + +func (r *lazyRepo) Versions(prefix string) ([]string, error) { + if r.once.Do(r.init); r.err != nil { + return nil, r.err + } + return r.repo.Versions(prefix) +} + +func (r *lazyRepo) Stat(rev string) (*RevInfo, error) { + if r.once.Do(r.init); r.err != nil { + return nil, r.err + } + return r.repo.Stat(rev) +} + +func (r *lazyRepo) Latest() (*RevInfo, error) { + if r.once.Do(r.init); r.err != nil { + return nil, r.err + } + return r.repo.Latest() +} + +func (r *lazyRepo) GoMod(version string) ([]byte, error) { + if r.once.Do(r.init); r.err != nil { + return nil, r.err + } + return r.repo.GoMod(version) +} + +func (r *lazyRepo) Zip(dst io.Writer, version string) error { + if r.once.Do(r.init); r.err != nil { + return r.err + } + return r.repo.Zip(dst, version) +} + +// A listRepo is a preference list of Repos. +// The list must be non-empty and all Repos +// must return the same result from ModulePath. +// For each method, the repos are tried in order +// until one succeeds or returns a non-ErrNotExist (non-404) error. +type listRepo []Repo + +func (l listRepo) ModulePath() string { + return l[0].ModulePath() +} + +func (l listRepo) Versions(prefix string) ([]string, error) { + for i, r := range l { + v, err := r.Versions(prefix) + if i == len(l)-1 || !errors.Is(err, os.ErrNotExist) { + return v, err + } + } + panic("no repos") +} + +func (l listRepo) Stat(rev string) (*RevInfo, error) { + for i, r := range l { + info, err := r.Stat(rev) + if i == len(l)-1 || !errors.Is(err, os.ErrNotExist) { + return info, err + } + } + panic("no repos") +} + +func (l listRepo) Latest() (*RevInfo, error) { + for i, r := range l { + info, err := r.Latest() + if i == len(l)-1 || !errors.Is(err, os.ErrNotExist) { + return info, err + } + } + panic("no repos") +} + +func (l listRepo) GoMod(version string) ([]byte, error) { + for i, r := range l { + data, err := r.GoMod(version) + if i == len(l)-1 || !errors.Is(err, os.ErrNotExist) { + return data, err + } + } + panic("no repos") +} + +func (l listRepo) Zip(dst io.Writer, version string) error { + for i, r := range l { + err := r.Zip(dst, version) + if i == len(l)-1 || !errors.Is(err, os.ErrNotExist) { + return err + } + } + panic("no repos") +} diff --git a/src/cmd/go/internal/modfetch/pseudo.go b/src/cmd/go/internal/modfetch/pseudo.go index 32c7bf883b..e13607ac2b 100644 --- a/src/cmd/go/internal/modfetch/pseudo.go +++ b/src/cmd/go/internal/modfetch/pseudo.go @@ -37,7 +37,7 @@ package modfetch import ( "cmd/go/internal/semver" "fmt" - "regexp" + "internal/lazyregexp" "strings" "time" ) @@ -62,9 +62,8 @@ func PseudoVersion(major, older string, t time.Time, rev string) string { // Form (2), (3). // Extract patch from vMAJOR.MINOR.PATCH - v := older[:len(older)] - i := strings.LastIndex(v, ".") + 1 - v, patch := v[:i], v[i:] + i := strings.LastIndex(older, ".") + 1 + v, patch := older[:i], older[i:] // Increment PATCH by adding 1 to decimal: // scan right to left turning 9s to 0s until you find a digit to increment. @@ -86,7 +85,7 @@ func PseudoVersion(major, older string, t time.Time, rev string) string { return v + patch + "-0." + segment + build } -var pseudoVersionRE = regexp.MustCompile(`^v[0-9]+\.(0\.0-|\d+\.\d+-([^+]*\.)?0\.)\d{14}-[A-Za-z0-9]+(\+incompatible)?$`) +var pseudoVersionRE = lazyregexp.New(`^v[0-9]+\.(0\.0-|\d+\.\d+-([^+]*\.)?0\.)\d{14}-[A-Za-z0-9]+(\+incompatible)?$`) // IsPseudoVersion reports whether v is a pseudo-version. func IsPseudoVersion(v string) bool { @@ -98,6 +97,9 @@ func IsPseudoVersion(v string) bool { // embedded in the pseudo-version is not a valid time. func PseudoVersionTime(v string) (time.Time, error) { timestamp, _, err := parsePseudoVersion(v) + if err != nil { + return time.Time{}, err + } t, err := time.Parse("20060102150405", timestamp) if err != nil { return time.Time{}, fmt.Errorf("pseudo-version with malformed time %s: %q", timestamp, v) diff --git a/src/cmd/go/internal/modfetch/pseudo_test.go b/src/cmd/go/internal/modfetch/pseudo_test.go index 3c2fa51468..d0e800b450 100644 --- a/src/cmd/go/internal/modfetch/pseudo_test.go +++ b/src/cmd/go/internal/modfetch/pseudo_test.go @@ -60,6 +60,13 @@ func TestPseudoVersionTime(t *testing.T) { } } +func TestInvalidPseudoVersionTime(t *testing.T) { + const v = "---" + if _, err := PseudoVersionTime(v); err == nil { + t.Error("expected error, got nil instead") + } +} + func TestPseudoVersionRev(t *testing.T) { for _, tt := range pseudoTests { rev, err := PseudoVersionRev(tt.version) diff --git a/src/cmd/go/internal/modfetch/repo.go b/src/cmd/go/internal/modfetch/repo.go index c63f6b0422..053256be4b 100644 --- a/src/cmd/go/internal/modfetch/repo.go +++ b/src/cmd/go/internal/modfetch/repo.go @@ -17,6 +17,7 @@ import ( "cmd/go/internal/modfetch/codehost" "cmd/go/internal/par" "cmd/go/internal/semver" + "cmd/go/internal/str" web "cmd/go/internal/web" ) @@ -160,12 +161,6 @@ type RevInfo struct { // To avoid version control access except when absolutely necessary, // Lookup does not attempt to connect to the repository itself. // -// The Import function takes an import path found in source code and -// determines which module to add to the requirement list to satisfy -// that import. It checks successive truncations of the import path -// to determine possible modules and stops when it finds a module -// in which the latest version satisfies the import path. -// // The ImportRepoRev function is a variant of Import which is limited // to code in a source code repository at a particular revision identifier // (usually a commit hash or source code repository tag, not necessarily @@ -211,11 +206,14 @@ func lookup(path string) (r Repo, err error) { if proxyURL == "off" { return nil, fmt.Errorf("module lookup disabled by GOPROXY=%s", proxyURL) } - if proxyURL != "" && proxyURL != "direct" { + if proxyURL != "" && proxyURL != "direct" && !str.GlobsMatchPath(cfg.GONOPROXY, path) { return lookupProxy(path) } + return lookupDirect(path) +} - security := web.Secure +func lookupDirect(path string) (Repo, error) { + security := web.SecureOnly if get.Insecure { security = web.Insecure } @@ -260,7 +258,7 @@ func ImportRepoRev(path, rev string) (Repo, *RevInfo, error) { // Note: Because we are converting a code reference from a legacy // version control system, we ignore meta tags about modules // and use only direct source control entries (get.IgnoreMod). - security := web.Secure + security := web.SecureOnly if get.Insecure { security = web.Insecure } diff --git a/src/cmd/go/internal/modfetch/sumdb.go b/src/cmd/go/internal/modfetch/sumdb.go new file mode 100644 index 0000000000..0af7219914 --- /dev/null +++ b/src/cmd/go/internal/modfetch/sumdb.go @@ -0,0 +1,260 @@ +// 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 checksum database lookup + +// +build !cmd_go_bootstrap + +package modfetch + +import ( + "bytes" + "errors" + "fmt" + "io/ioutil" + "net/url" + "os" + "path/filepath" + "strings" + "sync" + "time" + + "cmd/go/internal/base" + "cmd/go/internal/cfg" + "cmd/go/internal/get" + "cmd/go/internal/lockedfile" + "cmd/go/internal/module" + "cmd/go/internal/note" + "cmd/go/internal/str" + "cmd/go/internal/sumweb" + "cmd/go/internal/web" +) + +// useSumDB reports whether to use the Go checksum database for the given module. +func useSumDB(mod module.Version) bool { + return cfg.GOSUMDB != "off" && !get.Insecure && !str.GlobsMatchPath(cfg.GONOSUMDB, mod.Path) +} + +// lookupSumDB returns the Go checksum database's go.sum lines for the given module, +// along with the name of the database. +func lookupSumDB(mod module.Version) (dbname string, lines []string, err error) { + dbOnce.Do(func() { + dbName, db, dbErr = dbDial() + }) + if dbErr != nil { + return "", nil, dbErr + } + lines, err = db.Lookup(mod.Path, mod.Version) + return dbName, lines, err +} + +var ( + dbOnce sync.Once + dbName string + db *sumweb.Conn + dbErr error +) + +func dbDial() (dbName string, db *sumweb.Conn, err error) { + // $GOSUMDB can be "key" or "key url", + // and the key can be a full verifier key + // or a host on our list of known keys. + key := strings.Fields(cfg.GOSUMDB) + if len(key) >= 1 { + if k := knownGOSUMDB[key[0]]; k != "" { + key[0] = k + } + } + if len(key) == 0 { + return "", nil, fmt.Errorf("missing GOSUMDB") + } + if len(key) > 2 { + return "", nil, fmt.Errorf("invalid GOSUMDB: too many fields") + } + vkey, err := note.NewVerifier(key[0]) + if err != nil { + return "", nil, fmt.Errorf("invalid GOSUMDB: %v", err) + } + name := vkey.Name() + + // No funny business in the database name. + direct, err := url.Parse("https://" + name) + if err != nil || strings.HasSuffix(name, "/") || *direct != (url.URL{Scheme: "https", Host: direct.Host, Path: direct.Path, RawPath: direct.RawPath}) || direct.RawPath != "" || direct.Host == "" { + return "", nil, fmt.Errorf("invalid sumdb name (must be host[/path]): %s %+v", name, *direct) + } + + // Determine how to get to database. + var base *url.URL + if len(key) >= 2 { + // Use explicit alternate URL listed in $GOSUMDB, + // bypassing both the default URL derivation and any proxies. + u, err := url.Parse(key[1]) + if err != nil { + return "", nil, fmt.Errorf("invalid GOSUMDB URL: %v", err) + } + base = u + } + + return name, sumweb.NewConn(&dbClient{key: key[0], name: name, direct: direct, base: base}), nil +} + +type dbClient struct { + key string + name string + direct *url.URL + + once sync.Once + base *url.URL + baseErr error +} + +func (c *dbClient) ReadRemote(path string) ([]byte, error) { + c.once.Do(c.initBase) + if c.baseErr != nil { + return nil, c.baseErr + } + + var data []byte + start := time.Now() + targ := web.Join(c.base, path) + data, err := web.GetBytes(targ) + if false { + fmt.Fprintf(os.Stderr, "%.3fs %s\n", time.Since(start).Seconds(), web.Redacted(targ)) + } + return data, err +} + +// initBase determines the base URL for connecting to the database. +// Determining the URL requires sending network traffic to proxies, +// so this work is delayed until we need to download something from +// the database. If everything we need is in the local cache and +// c.ReadRemote is never called, we will never do this work. +func (c *dbClient) initBase() { + if c.base != nil { + return + } + + // Try proxies in turn until we find out how to connect to this database. + urls, err := proxyURLs() + if err != nil { + c.baseErr = err + return + } + for _, proxyURL := range urls { + if proxyURL == "direct" { + break + } + proxy, err := url.Parse(proxyURL) + if err != nil { + c.baseErr = err + return + } + // Quoting https://golang.org/design/25530-sumdb#proxying-a-checksum-database: + // + // Before accessing any checksum database URL using a proxy, + // the proxy client should first fetch /sumdb//supported. + // If that request returns a successful (HTTP 200) response, then the proxy supports + // proxying checksum database requests. In that case, the client should use + // the proxied access method only, never falling back to a direct connection to the database. + // If the /sumdb//supported check fails with a “not found†(HTTP 404) + // or “gone†(HTTP 410) response, the proxy is unwilling to proxy the checksum database, + // and the client should connect directly to the database. + // Any other response is treated as the database being unavailable. + _, err = web.GetBytes(web.Join(proxy, "sumdb/"+c.name+"/supported")) + if err == nil { + // Success! This proxy will help us. + c.base = web.Join(proxy, "sumdb/"+c.name) + return + } + // If the proxy serves a non-404/410, give up. + if !errors.Is(err, os.ErrNotExist) { + c.baseErr = err + return + } + } + + // No proxies, or all proxies said 404, or we reached an explicit "direct". + c.base = c.direct +} + +// ReadConfig reads the key from c.key +// and otherwise reads the config (a latest tree head) from GOPATH/pkg/sumdb/. +func (c *dbClient) ReadConfig(file string) (data []byte, err error) { + if file == "key" { + return []byte(c.key), nil + } + + // GOPATH/pkg is PkgMod/.. + targ := filepath.Join(PkgMod, "../sumdb/"+file) + data, err = lockedfile.Read(targ) + if errors.Is(err, os.ErrNotExist) { + // Treat non-existent as empty, to bootstrap the "latest" file + // the first time we connect to a given database. + return []byte{}, nil + } + return data, err +} + +// WriteConfig rewrites the latest tree head. +func (*dbClient) WriteConfig(file string, old, new []byte) error { + if file == "key" { + // Should not happen. + return fmt.Errorf("cannot write key") + } + targ := filepath.Join(PkgMod, "../sumdb/"+file) + os.MkdirAll(filepath.Dir(targ), 0777) + f, err := lockedfile.Edit(targ) + if err != nil { + return err + } + defer f.Close() + data, err := ioutil.ReadAll(f) + if err != nil { + return err + } + if len(data) > 0 && !bytes.Equal(data, old) { + return sumweb.ErrWriteConflict + } + if _, err := f.Seek(0, 0); err != nil { + return err + } + if err := f.Truncate(0); err != nil { + return err + } + if _, err := f.Write(new); err != nil { + return err + } + return f.Close() +} + +// ReadCache reads cached lookups or tiles from +// GOPATH/pkg/mod/download/cache/sumdb, +// which will be deleted by "go clean -modcache". +func (*dbClient) ReadCache(file string) ([]byte, error) { + targ := filepath.Join(PkgMod, "download/cache/sumdb", file) + data, err := lockedfile.Read(targ) + // lockedfile.Write does not atomically create the file with contents. + // There is a moment between file creation and locking the file for writing, + // during which the empty file can be locked for reading. + // Treat observing an empty file as file not found. + if err == nil && len(data) == 0 { + err = &os.PathError{Op: "read", Path: targ, Err: os.ErrNotExist} + } + return data, err +} + +// WriteCache updates cached lookups or tiles. +func (*dbClient) WriteCache(file string, data []byte) { + targ := filepath.Join(PkgMod, "download/cache/sumdb", file) + os.MkdirAll(filepath.Dir(targ), 0777) + lockedfile.Write(targ, bytes.NewReader(data), 0666) +} + +func (*dbClient) Log(msg string) { + // nothing for now +} + +func (*dbClient) SecurityError(msg string) { + base.Fatalf("%s", msg) +} diff --git a/src/cmd/go/internal/modfetch/web.go b/src/cmd/go/internal/modfetch/web.go deleted file mode 100644 index b327bf293d..0000000000 --- a/src/cmd/go/internal/modfetch/web.go +++ /dev/null @@ -1,31 +0,0 @@ -// 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. - -// +build !cmd_go_bootstrap - -package modfetch - -import ( - "io" - - web "cmd/go/internal/web2" -) - -// webGetGoGet fetches a go-get=1 URL and returns the body in *body. -// It allows non-200 responses, as usual for these URLs. -func webGetGoGet(url string, body *io.ReadCloser) error { - return web.Get(url, web.Non200OK(), web.Body(body)) -} - -// webGetBytes returns the body returned by an HTTP GET, as a []byte. -// It insists on a 200 response. -func webGetBytes(url string, body *[]byte) error { - return web.Get(url, web.ReadAllBody(body)) -} - -// webGetBody returns the body returned by an HTTP GET, as a io.ReadCloser. -// It insists on a 200 response. -func webGetBody(url string, body *io.ReadCloser) error { - return web.Get(url, web.Body(body)) -} diff --git a/src/cmd/go/internal/modfile/rule.go b/src/cmd/go/internal/modfile/rule.go index 7f9a18c6c2..8fa4f125a5 100644 --- a/src/cmd/go/internal/modfile/rule.go +++ b/src/cmd/go/internal/modfile/rule.go @@ -8,8 +8,8 @@ import ( "bytes" "errors" "fmt" + "internal/lazyregexp" "path/filepath" - "regexp" "sort" "strconv" "strings" @@ -154,7 +154,7 @@ func parseToFile(file string, data []byte, fix VersionFixer, strict bool) (*File return f, nil } -var GoVersionRE = regexp.MustCompile(`([1-9][0-9]*)\.(0|[1-9][0-9]*)`) +var GoVersionRE = lazyregexp.New(`([1-9][0-9]*)\.(0|[1-9][0-9]*)`) func (f *File) add(errs *bytes.Buffer, line *Line, verb string, args []string, fix VersionFixer, strict bool) { // If strict is false, this module is a dependency. @@ -195,7 +195,7 @@ func (f *File) add(errs *bytes.Buffer, line *Line, verb string, args []string, f f.Module = &Module{Syntax: line} if len(args) != 1 { - fmt.Fprintf(errs, "%s:%d: usage: module module/path [version]\n", f.Syntax.Name, line.Start.Line) + fmt.Fprintf(errs, "%s:%d: usage: module module/path\n", f.Syntax.Name, line.Start.Line) return } s, err := parseString(&args[0]) diff --git a/src/cmd/go/internal/modget/get.go b/src/cmd/go/internal/modget/get.go index 17a0ed45e2..7a5d550997 100644 --- a/src/cmd/go/internal/modget/get.go +++ b/src/cmd/go/internal/modget/get.go @@ -19,11 +19,13 @@ import ( "cmd/go/internal/semver" "cmd/go/internal/str" "cmd/go/internal/work" + "errors" "fmt" "os" - pathpkg "path" "path/filepath" + "sort" "strings" + "sync" ) var CmdGet = &base.Command{ @@ -40,7 +42,7 @@ The first step is to resolve which dependencies to add. For each named package or package pattern, get must decide which version of the corresponding module to use. By default, get chooses the latest tagged release version, such as v0.4.5 or v1.2.3. If there are no tagged release -versions, get chooses the latest tagged prerelease version, such as +versions, get chooses the latest tagged pre-release version, such as v0.0.1-pre1. If there are no tagged versions at all, get chooses the latest known commit. @@ -49,8 +51,6 @@ suffix to the package argument, as in 'go get golang.org/x/text@v0.3.0'. For modules stored in source control repositories, the version suffix can also be a commit hash, branch identifier, or other syntax known to the source control system, as in 'go get golang.org/x/text@master'. -The version suffix @latest explicitly requests the default behavior -described above. If a module under consideration is already a dependency of the current development module, then get will update the required version. @@ -59,6 +59,13 @@ downgrades the dependency. The version suffix @none indicates that the dependency should be removed entirely, downgrading or removing modules depending on it as needed. +The version suffix @latest explicitly requests the latest minor release of the +given path. + +The suffix @patch requests the latest patch release: if the path is already in +the build list, the selected version will have the same minor version. +If the path is not already in the build list, @patch is equivalent to @latest. + Although get defaults to using the latest version of the module containing a named package, it does not use the latest version of that module's dependencies. Instead it prefers to use the specific dependency versions @@ -72,9 +79,11 @@ The -u flag instructs get to update dependencies to use newer minor or patch releases when available. Continuing the previous example, 'go get -u A' will use the latest A with B v1.3.1 (not B v1.2.3). -The -u=patch flag (not -u patch) instructs get to update dependencies -to use newer patch releases when available. Continuing the previous example, -'go get -u=patch A' will use the latest A with B v1.2.4 (not B v1.2.3). +The -u=patch flag (not -u patch) also instructs get to update dependencies, +but changes the default to select patch releases. +Continuing the previous example, +'go get -u=patch A@latest' will use the latest A with B v1.2.4 (not B v1.2.3), +while 'go get -u=patch A' will use a patch release of A instead. In general, adding a new dependency may require upgrading existing dependencies to keep a working build, and 'go get' does @@ -87,6 +96,13 @@ and downgrading modules and updating go.mod. When using -m, each specified package path must be a module path as well, not the import path of a package below the module root. +When the -m and -u flags are used together, 'go get' will upgrade +modules that provide packages depended on by the modules named on +the command line. For example, 'go get -u -m A' will upgrade A and +any module providing packages imported by packages in A. +'go get -u -m' will upgrade modules that provided packages needed +by the main module. + The -insecure flag permits fetching from repositories and resolving custom domains using insecure schemes such as HTTP. Use with caution. @@ -108,12 +124,11 @@ The -d flag instructs get to download the source code needed to build the named packages, including downloading necessary dependencies, but not to build and install them. -With no package arguments, 'go get' applies to the main module, -and to the Go package in the current directory, if any. In particular, -'go get -u' and 'go get -u=patch' update all the dependencies of the -main module. With no package arguments and also without -u, -'go get' is not much more than 'go install', and 'go get -d' not much -more than 'go list'. +With no package arguments, 'go get' applies to Go package in the +current directory, if any. In particular, 'go get -u' and +'go get -u=patch' update all the dependencies of that package. +With no package arguments and also without -u, 'go get' is not much more +than 'go install', and 'go get -d' not much more than 'go list'. For more about modules, see 'go help modules'. @@ -165,6 +180,9 @@ func (v *upgradeFlag) Set(s string) error { if s == "false" { s = "" } + if s == "true" { + s = "latest" + } *v = upgradeFlag(s) return nil } @@ -178,15 +196,51 @@ func init() { CmdGet.Flag.Var(&getU, "u", "") } -// A task holds the state for processing a single get argument (path@vers). -type task struct { - arg string // original argument - index int - path string // package path part of arg - forceModulePath bool // path must be interpreted as a module path - vers string // version part of arg - m module.Version // module version indicated by argument - req []module.Version // m's requirement list (not upgraded) +// A getArg holds a parsed positional argument for go get (path@vers). +type getArg struct { + // raw is the original argument, to be printed in error messages. + raw string + + // path is the part of the argument before "@" (or the whole argument + // if there is no "@"). path specifies the modules or packages to get. + path string + + // vers is the part of the argument after "@" (or "" if there is no "@"). + // vers specifies the module version to get. + vers string +} + +// querySpec describes a query for a specific module. path may be a +// module path, package path, or package pattern. vers is a version +// query string from a command line argument. +type querySpec struct { + // path is a module path, package path, or package pattern that + // specifies which module to query. + path string + + // vers specifies what version of the module to get. + vers string + + // forceModulePath is true if path should be interpreted as a module path + // even if -m is not specified. + forceModulePath bool + + // prevM is the previous version of the module. prevM is needed + // if vers is "patch", and the module was previously in the build list. + prevM module.Version +} + +// query holds the state for a query made for a specific module. +// After a query is performed, we know the actual module path and +// version and whether any packages were matched by the query path. +type query struct { + querySpec + + // arg is the command line argument that matched the specified module. + arg string + + // m is the module path and version found by the query. + m module.Version } func runGet(cmd *base.Command, args []string) { @@ -196,7 +250,7 @@ func runGet(cmd *base.Command, args []string) { } switch getU { - case "", "patch", "true": + case "", "latest", "patch": // ok default: base.Fatalf("go get: unknown upgrade flag -u=%s", getU) @@ -222,14 +276,11 @@ func runGet(cmd *base.Command, args []string) { // what was requested. modload.DisallowWriteGoMod() - // Build task and install lists. - // The command-line arguments are of the form path@version - // or simply path, with implicit @latest. path@none is "downgrade away". - // At the end of the loop, we've resolved the list of arguments into - // a list of tasks (a path@vers that needs further processing) - // and a list of install targets (for the "go install" at the end). - var tasks []*task - var install []string + // Parse command-line arguments and report errors. The command-line + // arguments are of the form path@version or simply path, with implicit + // @latest. path@none is "downgrade away". + var gets []getArg + var queries []*query for _, arg := range search.CleanPatterns(args) { // Argument is module query path@vers, or else path with implicit @latest. path := arg @@ -241,226 +292,302 @@ func runGet(cmd *base.Command, args []string) { base.Errorf("go get %s: invalid module version syntax", arg) continue } - if vers != "none" { - install = append(install, path) + + // If the user runs 'go get -u=patch some/module', update some/module to a + // patch release, not a minor version. + if vers == "" && getU != "" { + vers = string(getU) } - // Deciding which module to upgrade/downgrade for a particular argument is difficult. - // Patterns only make it more difficult. - // We impose restrictions to avoid needing to interlace pattern expansion, - // like in modload.ImportPaths. - // Specifically, these patterns are supported: - // - // - Relative paths like ../../foo or ../../foo... are restricted to matching directories - // in the current module and therefore map to the current module. - // It's possible that the pattern matches no packages, but we will still treat it - // as mapping to the current module. - // TODO: In followup, could just expand the full list and remove the discrepancy. - // - The pattern "all" has its usual package meaning and maps to the list of modules - // from which the matched packages are drawn. This is potentially a subset of the - // module pattern "all". If module A requires B requires C but A does not import - // the parts of B that import C, the packages matched by "all" are only from A and B, - // so only A and B end up on the tasks list. - // TODO: Even in -m mode? - // - The patterns "std" and "cmd" expand to packages in the standard library, - // which aren't upgradable, so we skip over those. - // In -m mode they expand to non-module-paths, so they are disallowed. - // - Import path patterns like foo/bar... are matched against the module list, - // assuming any package match would imply a module pattern match. - // TODO: What about -m mode? - // - Import paths without patterns are left as is, for resolution by getQuery (eventually modload.Import). - // - if search.IsRelativePath(path) { - // Check that this relative pattern only matches directories in the current module, - // and then record the current module as the target. - dir := path - if i := strings.Index(path, "..."); i >= 0 { - dir, _ = pathpkg.Split(path[:i]) - } - abs, err := filepath.Abs(dir) - if err != nil { - base.Errorf("go get %s: %v", arg, err) - continue - } - if !str.HasFilePathPrefix(abs, modload.ModRoot()) { - base.Errorf("go get %s: directory %s is outside module root %s", arg, abs, modload.ModRoot()) - continue - } - // TODO: Check if abs is inside a nested module. - tasks = append(tasks, &task{arg: arg, path: modload.Target.Path, vers: ""}) - continue - } - if path == "all" { - // TODO: If *getM, should this be the module pattern "all"? + gets = append(gets, getArg{raw: arg, path: path, vers: vers}) - // This is the package pattern "all" not the module pattern "all": - // enumerate all the modules actually needed by builds of the packages - // in the main module, not incidental modules that happen to be - // in the package graph (and therefore build list). - // Note that LoadALL may add new modules to the build list to - // satisfy new imports, but vers == "latest" implicitly anyway, - // so we'll assume that's OK. - seen := make(map[module.Version]bool) - pkgs := modload.LoadALL() - for _, pkg := range pkgs { - m := modload.PackageModule(pkg) - if m.Path != "" && !seen[m] { - seen[m] = true - tasks = append(tasks, &task{arg: arg, path: m.Path, vers: "latest", forceModulePath: true}) + // Determine the modules that path refers to, and create queries + // to lookup modules at target versions before loading packages. + // This is an imprecise process, but it helps reduce unnecessary + // queries and package loading. It's also necessary for handling + // patterns like golang.org/x/tools/..., which can't be expanded + // during package loading until they're in the build list. + switch { + case search.IsRelativePath(path): + // Relative paths like ../../foo or ../../foo... are restricted to + // matching packages in the main module. If the path is explicit and + // contains no wildcards (...), check that it is a package in + // the main module. If the path contains wildcards but matches no + // packages, we'll warn after package loading. + if len(args) > 0 && *getM { + base.Errorf("go get %s: -m requires a module path, but a relative path must be a package in the main module", arg) + continue + } + + if !*getM && !strings.Contains(path, "...") { + pkgPath := modload.DirImportPath(filepath.FromSlash(path)) + if pkgs := modload.TargetPackages(pkgPath); len(pkgs) == 0 { + abs, err := filepath.Abs(path) + if err != nil { + abs = path + } + base.Errorf("go get %s: path %s is not a package in module rooted at %s", arg, abs, modload.ModRoot()) + continue } } - continue - } - if search.IsMetaPackage(path) { - // Already handled "all", so this must be "std" or "cmd", - // which are entirely in the standard library. + if path != arg { - base.Errorf("go get %s: cannot use pattern %q with explicit version", arg, arg) - } - if *getM { - base.Errorf("go get %s: cannot use pattern %q with -m", arg, arg) + base.Errorf("go get %s: can't request explicit version of path in main module", arg) continue } + + case strings.Contains(path, "..."): + // If we're using -m, look up modules in the build list that match + // the pattern. Report an error if no modules match. + if *getM { + match := search.MatchPattern(path) + matched := false + for _, m := range modload.BuildList() { + if match(m.Path) || str.HasPathPrefix(path, m.Path) { + queries = append(queries, &query{querySpec: querySpec{path: m.Path, vers: vers, prevM: m, forceModulePath: true}, arg: arg}) + matched = true + } + } + if !matched { + base.Errorf("go get %s: pattern matches no modules in build list", arg) + continue + } + break + } + + // If we're not using -m, wait until we load packages to look up modules. + // We don't know yet whether any modules in the build list provide + // packages matching the pattern. For example, suppose + // golang.org/x/tools and golang.org/x/tools/playground are separate + // modules, and only golang.org/x/tools is in the build list. If the + // user runs 'go get golang.org/x/tools/playground/...', we should + // add a requirement for golang.org/x/tools/playground. We should not + // upgrade golang.org/x/tools. + + case path == "all": + // This is the package pattern "all" not the module pattern "all", + // even if *getM. We won't create any queries yet, since we're going to + // need to load packages anyway. + + case search.IsMetaPackage(path): + base.Errorf("go get %s: explicit requirement on standard-library module %s not allowed", path, path) + continue + + default: + // The argument is a package path or module path or both. + q := &query{querySpec: querySpec{path: path, vers: vers}, arg: arg} + if vers == "patch" { + if *getM { + for _, m := range modload.BuildList() { + if m.Path == path { + q.prevM = m + break + } + } + queries = append(queries, q) + } else { + // We need to know the module containing path before asking for + // a specific version. Wait until we load packages later. + } + } else { + // The requested version of path doesn't depend on the existing version, + // so don't bother resolving it. + queries = append(queries, q) + } + } + } + base.ExitIfErrors() + + // Query modules referenced by command line arguments at requested versions, + // and add them to the build list. We need to do this before loading packages + // since patterns that refer to packages in unknown modules can't be + // expanded. This also avoids looking up new modules while loading packages, + // only to downgrade later. + queryCache := make(map[querySpec]*query) + byPath := runQueries(queryCache, queries, nil) + + // Add queried modules to the build list. This prevents some additional + // lookups for modules at "latest" when we load packages later. + buildList, err := mvs.UpgradeAll(modload.Target, newUpgrader(byPath, nil)) + if err != nil { + base.Fatalf("go get: %v", err) + } + modload.SetBuildList(buildList) + base.ExitIfErrors() + prevBuildList := buildList + + // Build a set of module paths that we don't plan to load packages from. + // This includes explicitly requested modules that don't have a root package + // and modules with a target version of "none". + var wg sync.WaitGroup + modOnly := make(map[string]*query) + for _, q := range queries { + if q.m.Version == "none" { + modOnly[q.m.Path] = q continue } - if strings.Contains(path, "...") { - // Apply to modules in build list matched by pattern (golang.org/x/...), if any. - match := search.MatchPattern(path) - matched := false - for _, m := range modload.BuildList() { - if match(m.Path) || str.HasPathPrefix(path, m.Path) { - tasks = append(tasks, &task{arg: arg, path: m.Path, vers: vers, forceModulePath: true}) - matched = true + if !*getM && q.path == q.m.Path { + wg.Add(1) + go func(q *query) { + if hasPkg, err := modload.ModuleHasRootPackage(q.m); err != nil { + base.Errorf("go get: %v", err) + } else if !hasPkg { + modOnly[q.m.Path] = q + } + wg.Done() + }(q) + } + } + wg.Wait() + base.ExitIfErrors() + + // Build a list of arguments that may refer to packages. + var pkgPatterns []string + var pkgGets []getArg + for _, arg := range gets { + if modOnly[arg.path] == nil && arg.vers != "none" { + pkgPatterns = append(pkgPatterns, arg.path) + pkgGets = append(pkgGets, arg) + } + } + + // Load packages and upgrade the modules that provide them. We do this until + // we reach a fixed point, since modules providing packages may change as we + // change versions. This must terminate because the module graph is finite, + // and the load and upgrade operations may only add and upgrade modules + // in the build list. + var matches []*search.Match + var install []string + for { + var seenPkgs map[string]bool + seenQuery := make(map[querySpec]bool) + var queries []*query + addQuery := func(q *query) { + if !seenQuery[q.querySpec] { + seenQuery[q.querySpec] = true + queries = append(queries, q) + } + } + + if len(pkgPatterns) > 0 { + // Don't load packages if pkgPatterns is empty. Both + // modload.ImportPathsQuiet and ModulePackages convert an empty list + // of patterns to []string{"."}, which is not what we want. + if *getM { + matches = modload.ModulePackages(pkgPatterns) + } else { + matches = modload.ImportPathsQuiet(pkgPatterns) + } + seenPkgs = make(map[string]bool) + install = make([]string, 0, len(pkgPatterns)) + for i, match := range matches { + arg := pkgGets[i] + + if !*getM && len(match.Pkgs) == 0 { + // If the pattern did not match any packages, look up a new module. + // If the pattern doesn't match anything on the last iteration, + // we'll print a warning after the outer loop. + if !search.IsRelativePath(arg.path) && !match.Literal && arg.path != "all" { + addQuery(&query{querySpec: querySpec{path: arg.path, vers: arg.vers}, arg: arg.raw}) + } + continue + } + + install = append(install, arg.path) + allStd := true + for _, pkg := range match.Pkgs { + if !seenPkgs[pkg] { + seenPkgs[pkg] = true + if _, _, err := modload.Lookup("", false, pkg); err != nil { + allStd = false + base.Errorf("go get %s: %v", arg.raw, err) + continue + } + } + m := modload.PackageModule(pkg) + if m.Path == "" { + // pkg is in the standard library. + continue + } + allStd = false + addQuery(&query{querySpec: querySpec{path: m.Path, vers: arg.vers, forceModulePath: true, prevM: m}, arg: arg.raw}) + } + if allStd { + if *getM { + base.Errorf("go get %s: cannot use pattern %q with -m", arg.raw, arg.raw) + } else if arg.path != arg.raw { + base.Errorf("go get %s: cannot use pattern %q with explicit version", arg.raw, arg.raw) + } } } - // If matched, we're done. - // Otherwise assume pattern is inside a single module - // (golang.org/x/text/unicode/...) and leave for usual lookup. - // Unless we're using -m. - if matched { - continue - } - if *getM { - base.Errorf("go get %s: pattern matches no modules in build list", arg) - continue - } } - tasks = append(tasks, &task{arg: arg, path: path, vers: vers}) - } - base.ExitIfErrors() + base.ExitIfErrors() - // Now we've reduced the upgrade/downgrade work to a list of path@vers pairs (tasks). - // Resolve each one in parallel. - reqs := modload.Reqs() - var lookup par.Work - for _, t := range tasks { - lookup.Add(t) - } - lookup.Do(10, func(item interface{}) { - t := item.(*task) - if t.vers == "none" { - // Wait for downgrade step. - t.m = module.Version{Path: t.path, Version: "none"} - return - } - m, err := getQuery(t.path, t.vers, t.forceModulePath) - if err != nil { - base.Errorf("go get %v: %v", t.arg, err) - return - } - t.m = m - }) - base.ExitIfErrors() + // Query target versions for modules providing packages matched by + // command line arguments. + byPath = runQueries(queryCache, queries, modOnly) - // Now we know the specific version of each path@vers. - // The final build list will be the union of three build lists: - // 1. the original build list - // 2. the modules named on the command line (other than @none) - // 3. the upgraded requirements of those modules (if upgrading) - // Start building those lists. - // This loop collects (2). - // Also, because the list of paths might have named multiple packages in a single module - // (or even the same package multiple times), now that we know the module for each - // package, this loop deduplicates multiple references to a given module. - // (If a module is mentioned multiple times, the listed target version must be the same each time.) - var named []module.Version - byPath := make(map[string]*task) - for _, t := range tasks { - prev, ok := byPath[t.m.Path] - if prev != nil && prev.m != t.m { - base.Errorf("go get: conflicting versions for module %s: %s and %s", t.m.Path, prev.m.Version, t.m.Version) - byPath[t.m.Path] = nil // sentinel to stop errors - continue - } - if ok { - continue // already added - } - byPath[t.m.Path] = t - if t.m.Version != "none" { - named = append(named, t.m) - } - } - base.ExitIfErrors() - - // If the modules named on the command line have any dependencies - // and we're supposed to upgrade dependencies, - // chase down the full list of upgraded dependencies. - // This turns required from a not-yet-upgraded (3) to the final (3). - // (See list above.) - var required []module.Version - if getU != "" { - upgraded, err := mvs.UpgradeAll(upgradeTarget, &upgrader{ - Reqs: modload.Reqs(), - targets: named, - patch: getU == "patch", - tasks: byPath, - }) + // Handle upgrades. This is needed for arguments that didn't match + // modules or matched different modules from a previous iteration. It + // also upgrades modules providing package dependencies if -u is set. + buildList, err := mvs.UpgradeAll(modload.Target, newUpgrader(byPath, seenPkgs)) if err != nil { base.Fatalf("go get: %v", err) } - required = upgraded[1:] // slice off upgradeTarget + modload.SetBuildList(buildList) base.ExitIfErrors() + + // Stop if no changes have been made to the build list. + buildList = modload.BuildList() + eq := len(buildList) == len(prevBuildList) + for i := 0; eq && i < len(buildList); i++ { + eq = buildList[i] == prevBuildList[i] + } + if eq { + break + } + prevBuildList = buildList + } + if !*getM { + search.WarnUnmatched(matches) // don't warn on every iteration } - // Put together the final build list as described above (1) (2) (3). - // If we're not using -u, then len(required) == 0 and ReloadBuildList - // chases down the dependencies of all the named module versions - // in one operation. - var list []module.Version - list = append(list, modload.BuildList()...) - list = append(list, named...) - list = append(list, required...) - modload.SetBuildList(list) - modload.ReloadBuildList() // note: does not update go.mod - base.ExitIfErrors() - - // Scan for and apply any needed downgrades. + // Handle downgrades. var down []module.Version for _, m := range modload.BuildList() { - t := byPath[m.Path] - if t != nil && semver.Compare(m.Version, t.m.Version) > 0 { - down = append(down, module.Version{Path: m.Path, Version: t.m.Version}) + q := byPath[m.Path] + if q != nil && semver.Compare(m.Version, q.m.Version) > 0 { + down = append(down, module.Version{Path: m.Path, Version: q.m.Version}) } } if len(down) > 0 { - list, err := mvs.Downgrade(modload.Target, modload.Reqs(), down...) + buildList, err := mvs.Downgrade(modload.Target, modload.Reqs(), down...) if err != nil { - base.Fatalf("go get: %v", err) + base.Fatalf("go: %v", err) } - modload.SetBuildList(list) + modload.SetBuildList(buildList) modload.ReloadBuildList() // note: does not update go.mod + base.ExitIfErrors() } - base.ExitIfErrors() // Scan for any upgrades lost by the downgrades. - lost := make(map[string]string) - for _, m := range modload.BuildList() { - t := byPath[m.Path] - if t != nil && semver.Compare(m.Version, t.m.Version) != 0 { - lost[m.Path] = m.Version + var lostUpgrades []*query + var versionByPath map[string]string + if len(down) > 0 { + versionByPath = make(map[string]string) + for _, m := range modload.BuildList() { + versionByPath[m.Path] = m.Version } + for _, q := range byPath { + if v, ok := versionByPath[q.m.Path]; q.m.Version != "none" && (!ok || semver.Compare(v, q.m.Version) != 0) { + lostUpgrades = append(lostUpgrades, q) + } + } + sort.Slice(lostUpgrades, func(i, j int) bool { + return lostUpgrades[i].m.Path < lostUpgrades[j].m.Path + }) } - if len(lost) > 0 { + if len(lostUpgrades) > 0 { desc := func(m module.Version) string { s := m.Path + "@" + m.Version t := byPath[m.Path] @@ -473,23 +600,22 @@ func runGet(cmd *base.Command, args []string) { for _, d := range down { downByPath[d.Path] = d } + var buf strings.Builder fmt.Fprintf(&buf, "go get: inconsistent versions:") - for _, t := range tasks { - if lost[t.m.Path] == "" { - continue - } - // We lost t because its build list requires a newer version of something in down. + reqs := modload.Reqs() + for _, q := range lostUpgrades { + // We lost q because its build list requires a newer version of something in down. // Figure out exactly what. // Repeatedly constructing the build list is inefficient // if there are MANY command-line arguments, // but at least all the necessary requirement lists are cached at this point. - list, err := mvs.BuildList(t.m, reqs) + list, err := buildListForLostUpgrade(q.m, reqs) if err != nil { - base.Fatalf("go get: %v", err) + base.Fatalf("go: %v", err) } - fmt.Fprintf(&buf, "\n\t%s", desc(t.m)) + fmt.Fprintf(&buf, "\n\t%s", desc(q.m)) sep := " requires" for _, m := range list { if down, ok := downByPath[m.Path]; ok && semver.Compare(down.Version, m.Version) < 0 { @@ -500,7 +626,12 @@ func runGet(cmd *base.Command, args []string) { if sep != "," { // We have no idea why this happened. // At least report the problem. - fmt.Fprintf(&buf, " ended up at %v unexpectedly (please report at golang.org/issue/new)", lost[t.m.Path]) + if v := versionByPath[q.m.Path]; v == "" { + fmt.Fprintf(&buf, " removed unexpectedly") + } else { + fmt.Fprintf(&buf, " ended up at %s unexpectedly", v) + } + fmt.Fprintf(&buf, " (please report at golang.org/issue/new)") } } base.Fatalf("%v", buf.String()) @@ -510,114 +641,232 @@ func runGet(cmd *base.Command, args []string) { modload.AllowWriteGoMod() modload.WriteGoMod() - // If -m was specified, we're done after the module work. No download, no build. - if *getM { + // If -m or -d was specified, we're done after the module work. We've + // already downloaded modules by loading packages above. If neither flag + // we specified, we need build and install the packages. + // Note that 'go get -u' without any arguments results in len(install) == 1: + // search.CleanImportPaths returns "." for empty args. + if *getM || *getD || len(install) == 0 { return } + work.BuildInit() + pkgs := load.PackagesForBuild(install) + work.InstallPackages(install, pkgs) +} - if len(install) > 0 { - // All requested versions were explicitly @none. - // Note that 'go get -u' without any arguments results in len(install) == 1: - // search.CleanImportPaths returns "." for empty args. - work.BuildInit() - pkgs := load.PackagesAndErrors(install) - var todo []*load.Package - for _, p := range pkgs { - // Ignore "no Go source files" errors for 'go get' operations on modules. - if p.Error != nil { - if len(args) == 0 && getU != "" && strings.HasPrefix(p.Error.Err, "no Go files") { - // Upgrading modules: skip the implicitly-requested package at the - // current directory, even if it is not tho module root. - continue - } - if strings.Contains(p.Error.Err, "cannot find module providing") && modload.ModuleInfo(p.ImportPath) != nil { - // Explicitly-requested module, but it doesn't contain a package at the - // module root. - continue - } - base.Errorf("%s", p.Error) - } - todo = append(todo, p) - } - base.ExitIfErrors() - - // If -d was specified, we're done after the download: no build. - // (The load.PackagesAndErrors is what did the download - // of the named packages and their dependencies.) - if len(todo) > 0 && !*getD { - work.InstallPackages(install, todo) +// runQueries looks up modules at target versions in parallel. Results will be +// cached. If the same module is referenced by multiple queries at different +// versions (including earlier queries in the modOnly map), an error will be +// reported. A map from module paths to queries is returned, which includes +// queries and modOnly. +func runQueries(cache map[querySpec]*query, queries []*query, modOnly map[string]*query) map[string]*query { + var lookup par.Work + for _, q := range queries { + if cached := cache[q.querySpec]; cached != nil { + *q = *cached + } else { + cache[q.querySpec] = q + lookup.Add(q) } } + + lookup.Do(10, func(item interface{}) { + q := item.(*query) + if q.vers == "none" { + // Wait for downgrade step. + q.m = module.Version{Path: q.path, Version: "none"} + return + } + m, err := getQuery(q.path, q.vers, q.prevM, q.forceModulePath) + if err != nil { + base.Errorf("go get %s: %v", q.arg, err) + } + q.m = m + }) + base.ExitIfErrors() + + byPath := make(map[string]*query) + check := func(q *query) { + if prev, ok := byPath[q.m.Path]; prev != nil && prev.m != q.m { + base.Errorf("go get: conflicting versions for module %s: %s and %s", q.m.Path, prev.m.Version, q.m.Version) + byPath[q.m.Path] = nil // sentinel to stop errors + return + } else if !ok { + byPath[q.m.Path] = q + } + } + for _, q := range queries { + check(q) + } + for _, q := range modOnly { + check(q) + } + base.ExitIfErrors() + + return byPath } // getQuery evaluates the given package path, version pair // to determine the underlying module version being requested. // If forceModulePath is set, getQuery must interpret path // as a module path. -func getQuery(path, vers string, forceModulePath bool) (module.Version, error) { - if vers == "" { +func getQuery(path, vers string, prevM module.Version, forceModulePath bool) (module.Version, error) { + switch vers { + case "": vers = "latest" + case "patch": + if prevM.Version == "" { + vers = "latest" + } else { + vers = semver.MajorMinor(prevM.Version) + } } - // First choice is always to assume path is a module path. - // If that works out, we're done. - info, err := modload.Query(path, vers, modload.Allowed) - if err == nil { - return module.Version{Path: path, Version: info.Version}, nil + if forceModulePath || *getM || !strings.Contains(path, "...") { + if path == modload.Target.Path { + if vers != "latest" { + return module.Version{}, fmt.Errorf("can't get a specific version of the main module") + } + } + + // If the path doesn't contain a wildcard, try interpreting it as a module path. + info, err := modload.Query(path, vers, modload.Allowed) + if err == nil { + return module.Version{Path: path, Version: info.Version}, nil + } + + // If the query fails, and the path must be a real module, report the query error. + if forceModulePath || *getM { + return module.Version{}, err + } } - // Even if the query fails, if the path must be a real module, then report the query error. - if forceModulePath || *getM { + // Otherwise, try a package path or pattern. + results, err := modload.QueryPattern(path, vers, modload.Allowed) + if err != nil { return module.Version{}, err } - - // Otherwise, try a package path. - m, _, err := modload.QueryPackage(path, vers, modload.Allowed) - return m, err + return results[0].Mod, nil } // An upgrader adapts an underlying mvs.Reqs to apply an // upgrade policy to a list of targets and their dependencies. -// If patch=false, the upgrader implements "get -u". -// If patch=true, the upgrader implements "get -u=patch". type upgrader struct { mvs.Reqs - targets []module.Version - patch bool - tasks map[string]*task + + // cmdline maps a module path to a query made for that module at a + // specific target version. Each query corresponds to a module + // matched by a command line argument. + cmdline map[string]*query + + // upgrade is a set of modules providing dependencies of packages + // matched by command line arguments. If -u or -u=patch is set, + // these modules are upgraded accordingly. + upgrade map[string]bool } -// upgradeTarget is a fake "target" requiring all the modules to be upgraded. -var upgradeTarget = module.Version{Path: "upgrade target", Version: ""} +// newUpgrader creates an upgrader. cmdline contains queries made at +// specific versions for modules matched by command line arguments. pkgs +// is the set of packages matched by command line arguments. If -u or -u=patch +// is set, modules providing dependencies of pkgs are upgraded accordingly. +func newUpgrader(cmdline map[string]*query, pkgs map[string]bool) *upgrader { + u := &upgrader{ + Reqs: modload.Reqs(), + cmdline: cmdline, + } + if getU != "" { + u.upgrade = make(map[string]bool) + + // Traverse package import graph. + // Initialize work queue with root packages. + seen := make(map[string]bool) + var work []string + for pkg := range pkgs { + seen[pkg] = true + for _, imp := range modload.PackageImports(pkg) { + if !pkgs[imp] && !seen[imp] { + seen[imp] = true + work = append(work, imp) + } + } + } + for len(work) > 0 { + pkg := work[0] + work = work[1:] + m := modload.PackageModule(pkg) + u.upgrade[m.Path] = true + for _, imp := range modload.PackageImports(pkg) { + if !seen[imp] { + seen[imp] = true + work = append(work, imp) + } + } + } + } + return u +} // Required returns the requirement list for m. -// Other than the upgradeTarget, we defer to u.Reqs. +// For the main module, we override requirements with the modules named +// one the command line, and we include new requirements. Otherwise, +// we defer to u.Reqs. func (u *upgrader) Required(m module.Version) ([]module.Version, error) { - if m == upgradeTarget { - return u.targets, nil + rs, err := u.Reqs.Required(m) + if err != nil { + return nil, err } - return u.Reqs.Required(m) + if m != modload.Target { + return rs, nil + } + + overridden := make(map[string]bool) + for i, m := range rs { + if q := u.cmdline[m.Path]; q != nil && q.m.Version != "none" { + rs[i] = q.m + overridden[q.m.Path] = true + } + } + for _, q := range u.cmdline { + if !overridden[q.m.Path] && q.m.Path != modload.Target.Path && q.m.Version != "none" { + rs = append(rs, q.m) + } + } + return rs, nil } // Upgrade returns the desired upgrade for m. -// If m is a tagged version, then Upgrade returns the latest tagged version. +// +// If m was requested at a specific version on the command line, then +// Upgrade returns that version. +// +// If -u is set and m provides a dependency of a package matched by +// command line arguments, then Upgrade may provider a newer tagged version. +// If m is a tagged version, then Upgrade will return the latest tagged +// version (with the same minor version number if -u=patch). // If m is a pseudo-version, then Upgrade returns the latest tagged version -// when that version has a time-stamp newer than m. -// Otherwise Upgrade returns m (preserving the pseudo-version). -// This special case prevents accidental downgrades -// when already using a pseudo-version newer than the latest tagged version. +// only if that version has a time-stamp newer than m. This special case +// prevents accidental downgrades when already using a pseudo-version +// newer than the latest tagged version. +// +// If none of the above cases apply, then Upgrade returns m. func (u *upgrader) Upgrade(m module.Version) (module.Version, error) { // Allow pkg@vers on the command line to override the upgrade choice v. - // If t's version is < v, then we're going to downgrade anyway, + // If q's version is < m.Version, then we're going to downgrade anyway, // and it's cleaner to avoid moving back and forth and picking up // extraneous other newer dependencies. - // If t's version is > v, then we're going to upgrade past v anyway, - // and again it's cleaner to avoid moving back and forth picking up - // extraneous other newer dependencies. - if t := u.tasks[m.Path]; t != nil { - return t.m, nil + // If q's version is > m.Version, then we're going to upgrade past + // m.Version anyway, and again it's cleaner to avoid moving back and forth + // picking up extraneous other newer dependencies. + if q := u.cmdline[m.Path]; q != nil { + return q.m, nil } + if !u.upgrade[m.Path] { + // Not involved in upgrade. Leave alone. + return m, nil + } + + // Run query required by upgrade semantics. // Note that query "latest" is not the same as // using repo.Latest. // The query only falls back to untagged versions @@ -625,7 +874,7 @@ func (u *upgrader) Upgrade(m module.Version) (module.Version, error) { // only ever returns untagged versions, // which is not what we want. query := "latest" - if u.patch { + if getU == "patch" { // For patch upgrade, query "v1.2". query = semver.MajorMinor(m.Version) } @@ -637,7 +886,8 @@ func (u *upgrader) Upgrade(m module.Version) (module.Version, error) { // even report the error. Because Query does not consider pseudo-versions, // it may happen that we have a pseudo-version but during -u=patch // the query v0.0 matches no versions (not even the one we're using). - if !strings.Contains(err.Error(), "no matching versions") { + var noMatch *modload.NoMatchingVersionError + if !errors.As(err, &noMatch) { base.Errorf("go get: upgrading %s@%s: %v", m.Path, m.Version, err) } return m, nil @@ -657,3 +907,29 @@ func (u *upgrader) Upgrade(m module.Version) (module.Version, error) { return module.Version{Path: m.Path, Version: info.Version}, nil } + +// buildListForLostUpgrade returns the build list for the module graph +// rooted at lost. Unlike mvs.BuildList, the target module (lost) is not +// treated specially. The returned build list may contain a newer version +// of lost. +// +// buildListForLostUpgrade is used after a downgrade has removed a module +// requested at a specific version. This helps us understand the requirements +// implied by each downgrade. +func buildListForLostUpgrade(lost module.Version, reqs mvs.Reqs) ([]module.Version, error) { + return mvs.BuildList(lostUpgradeRoot, &lostUpgradeReqs{Reqs: reqs, lost: lost}) +} + +var lostUpgradeRoot = module.Version{Path: "lost-upgrade-root", Version: ""} + +type lostUpgradeReqs struct { + mvs.Reqs + lost module.Version +} + +func (r *lostUpgradeReqs) Required(mod module.Version) ([]module.Version, error) { + if mod == lostUpgradeRoot { + return []module.Version{r.lost}, nil + } + return r.Reqs.Required(mod) +} diff --git a/src/cmd/go/internal/modinfo/info.go b/src/cmd/go/internal/modinfo/info.go index 7341ce44d2..07248d1a61 100644 --- a/src/cmd/go/internal/modinfo/info.go +++ b/src/cmd/go/internal/modinfo/info.go @@ -20,8 +20,8 @@ type ModulePublic struct { Indirect bool `json:",omitempty"` // module is only indirectly needed by main module Dir string `json:",omitempty"` // directory holding local copy of files, if any GoMod string `json:",omitempty"` // path to go.mod file describing module, if any - Error *ModuleError `json:",omitempty"` // error loading module GoVersion string `json:",omitempty"` // go version used in module + Error *ModuleError `json:",omitempty"` // error loading module } type ModuleError struct { diff --git a/src/cmd/go/internal/modload/build.go b/src/cmd/go/internal/modload/build.go index 2a8be90b78..66a0a75d96 100644 --- a/src/cmd/go/internal/modload/build.go +++ b/src/cmd/go/internal/modload/build.go @@ -12,6 +12,7 @@ import ( "cmd/go/internal/modinfo" "cmd/go/internal/module" "cmd/go/internal/search" + "cmd/go/internal/semver" "encoding/hex" "fmt" "internal/goroot" @@ -38,9 +39,6 @@ func findStandardImportPath(path string) string { if goroot.IsStandardPackage(cfg.GOROOT, cfg.BuildContext.Compiler, path) { return filepath.Join(cfg.GOROOT, "src", path) } - if goroot.IsStandardPackage(cfg.GOROOT, cfg.BuildContext.Compiler, "vendor/"+path) { - return filepath.Join(cfg.GOROOT, "src/vendor", path) - } } return "" } @@ -77,13 +75,15 @@ func ModuleInfo(path string) *modinfo.ModulePublic { // addUpdate fills in m.Update if an updated version is available. func addUpdate(m *modinfo.ModulePublic) { - if m.Version != "" { - if info, err := Query(m.Path, "latest", Allowed); err == nil && info.Version != m.Version { - m.Update = &modinfo.ModulePublic{ - Path: m.Path, - Version: info.Version, - Time: &info.Time, - } + if m.Version == "" { + return + } + + if info, err := Query(m.Path, "latest", Allowed); err == nil && semver.Compare(info.Version, m.Version) > 0 { + m.Update = &modinfo.ModulePublic{ + Path: m.Path, + Version: info.Version, + Time: &info.Time, } } } @@ -219,7 +219,7 @@ func PackageBuildInfo(path string, deps []string) string { if r.Path == "" { h = "\t" + modfetch.Sum(mod) } - fmt.Fprintf(&buf, "dep\t%s\t%s%s\n", mod.Path, mod.Version, h) + fmt.Fprintf(&buf, "dep\t%s\t%s%s\n", mod.Path, mv, h) if r.Path != "" { fmt.Fprintf(&buf, "=>\t%s\t%s\t%s\n", r.Path, r.Version, modfetch.Sum(r)) } @@ -250,21 +250,15 @@ func findModule(target, path string) module.Version { } func ModInfoProg(info string) []byte { - // Inject a variable with the debug information as runtime/debug.modinfo, + // Inject a variable with the debug information as runtime.modinfo, // but compile it in package main so that it is specific to the binary. - // // The variable must be a literal so that it will have the correct value // before the initializer for package main runs. // - // We also want the value to be present even if runtime/debug.modinfo is - // otherwise unused in the rest of the program. Reading it in an init function - // suffices for now. - + // The runtime startup code refers to the variable, which keeps it live in all binaries. return []byte(fmt.Sprintf(`package main import _ "unsafe" -//go:linkname __debug_modinfo__ runtime/debug.modinfo +//go:linkname __debug_modinfo__ runtime.modinfo var __debug_modinfo__ = %q -var keepalive_modinfo = __debug_modinfo__ -func init() { keepalive_modinfo = __debug_modinfo__ } `, string(infoStart)+info+string(infoEnd))) } diff --git a/src/cmd/go/internal/modload/help.go b/src/cmd/go/internal/modload/help.go index d9c8ae40d8..c1685ff08e 100644 --- a/src/cmd/go/internal/modload/help.go +++ b/src/cmd/go/internal/modload/help.go @@ -19,34 +19,25 @@ including recording and resolving dependencies on other modules. Modules replace the old GOPATH-based approach to specifying which source files are used in a given build. -Preliminary module support +Module support -Go 1.11 includes preliminary support for Go modules, -including a new module-aware 'go get' command. -We intend to keep revising this support, while preserving compatibility, -until it can be declared official (no longer preliminary), -and then at a later point we may remove support for work -in GOPATH and the old 'go get' command. +Go 1.13 includes official support for Go modules, +including a module-aware 'go get' command. +Module-aware mode is active by default. -The quickest way to take advantage of the new Go 1.11 module support -is to check out your repository into a directory outside GOPATH/src, -create a go.mod file (described in the next section) there, and run -go commands from within that file tree. - -For more fine-grained control, the module support in Go 1.11 respects +For more fine-grained control, Go 1.13 continues to respect a temporary environment variable, GO111MODULE, which can be set to one -of three string values: off, on, or auto (the default). -If GO111MODULE=off, then the go command never uses the -new module support. Instead it looks in vendor directories and GOPATH +of three string values: off, auto, or on (the default). +If GO111MODULE=on or is unset, then the go command requires the use of +modules, never consulting GOPATH. We refer to this as the command +being module-aware or running in "module-aware mode". +If GO111MODULE=auto, then the go command enables or disables module +support based on the current directory. Module support is enabled only +when the current directory is outside GOPATH/src and itself contains a +go.mod file or is below a directory containing a go.mod file. +If GO111MODULE=off, then the go command never uses +module support. Instead it looks in vendor directories and GOPATH to find dependencies; we now refer to this as "GOPATH mode." -If GO111MODULE=on, then the go command requires the use of modules, -never consulting GOPATH. We refer to this as the command being -module-aware or running in "module-aware mode". -If GO111MODULE=auto or is unset, then the go command enables or -disables module support based on the current directory. -Module support is enabled only when the current directory is outside -GOPATH/src and itself contains a go.mod file or is below a directory -containing a go.mod file. In module-aware mode, GOPATH no longer defines the meaning of imports during a build, but it still stores downloaded dependencies (in GOPATH/pkg/mod) @@ -337,19 +328,9 @@ module file trees. Module downloading and verification -The go command maintains, in the main module's root directory alongside -go.mod, a file named go.sum containing the expected cryptographic checksums -of the content of specific module versions. Each time a dependency is -used, its checksum is added to go.sum if missing or else required to match -the existing entry in go.sum. - -The go command maintains a cache of downloaded packages and computes -and records the cryptographic checksum of each package at download time. -In normal operation, the go command checks these pre-computed checksums -against the main module's go.sum file, instead of recomputing them on -each command invocation. The 'go mod verify' command checks that -the cached copies of module downloads still match both their recorded -checksums and the entries in go.sum. +The go command checks downloads against known checksums, +to detect unexpected changes in the content of any specific module +version from one day to the next. See 'go help module-auth' for details. The go command can fetch modules from a proxy instead of connecting to source control systems directly, according to the setting of the GOPROXY diff --git a/src/cmd/go/internal/modload/import.go b/src/cmd/go/internal/modload/import.go index 3210e16c25..3f2007ca2b 100644 --- a/src/cmd/go/internal/modload/import.go +++ b/src/cmd/go/internal/modload/import.go @@ -28,6 +28,10 @@ import ( type ImportMissingError struct { ImportPath string Module module.Version + + // newMissingVersion is set to a newer version of Module if one is present + // in the build list. When set, we can't automatically upgrade. + newMissingVersion string } func (e *ImportMissingError) Error() string { @@ -61,17 +65,21 @@ func Import(path string) (m module.Version, dir string, err error) { } // Is the package in the standard library? - if search.IsStandardImportPath(path) { - if goroot.IsStandardPackage(cfg.GOROOT, cfg.BuildContext.Compiler, path) { - dir := filepath.Join(cfg.GOROOT, "src", path) - return module.Version{}, dir, nil + if search.IsStandardImportPath(path) && + goroot.IsStandardPackage(cfg.GOROOT, cfg.BuildContext.Compiler, path) { + if targetInGorootSrc { + if dir, ok := dirInModule(path, targetPrefix, ModRoot(), true); ok { + return Target, dir, nil + } } + dir := filepath.Join(cfg.GOROOT, "src", path) + return module.Version{}, dir, nil } // -mod=vendor is special. // Everything must be in the main module or the main module's vendor directory. if cfg.BuildMod == "vendor" { - mainDir, mainOK := dirInModule(path, Target.Path, ModRoot(), true) + mainDir, mainOK := dirInModule(path, targetPrefix, ModRoot(), true) vendorDir, vendorOK := dirInModule(path, "", filepath.Join(ModRoot(), "vendor"), false) if mainOK && vendorOK { return module.Version{}, "", fmt.Errorf("ambiguous import: found %s in multiple directories:\n\t%s\n\t%s", path, mainDir, vendorDir) @@ -178,14 +186,34 @@ func Import(path string) (m module.Version, dir string, err error) { } } - m, _, err = QueryPackage(path, "latest", Allowed) + candidates, err := QueryPackage(path, "latest", Allowed) if err != nil { if _, ok := err.(*codehost.VCSError); ok { return module.Version{}, "", err } return module.Version{}, "", &ImportMissingError{ImportPath: path} } - return m, "", &ImportMissingError{ImportPath: path, Module: m} + m = candidates[0].Mod + newMissingVersion := "" + for _, c := range candidates { + cm := c.Mod + for _, bm := range buildList { + if bm.Path == cm.Path && semver.Compare(bm.Version, cm.Version) > 0 { + // QueryPackage proposed that we add module cm to provide the package, + // but we already depend on a newer version of that module (and we don't + // have the package). + // + // This typically happens when a package is present at the "@latest" + // version (e.g., v1.0.0) of a module, but we have a newer version + // of the same module in the build list (e.g., v1.0.1-beta), and + // the package is not present there. + m = cm + newMissingVersion = bm.Version + break + } + } + } + return m, "", &ImportMissingError{ImportPath: path, Module: m, newMissingVersion: newMissingVersion} } // maybeInModule reports whether, syntactically, @@ -229,8 +257,8 @@ func dirInModule(path, mpath, mdir string, isLocal bool) (dir string, haveGoFile if isLocal { for d := dir; d != mdir && len(d) > len(mdir); { haveGoMod := haveGoModCache.Do(d, func() interface{} { - _, err := os.Stat(filepath.Join(d, "go.mod")) - return err == nil + fi, err := os.Stat(filepath.Join(d, "go.mod")) + return err == nil && !fi.IsDir() }).(bool) if haveGoMod { diff --git a/src/cmd/go/internal/modload/init.go b/src/cmd/go/internal/modload/init.go index a0514d425e..14fadbf74e 100644 --- a/src/cmd/go/internal/modload/init.go +++ b/src/cmd/go/internal/modload/init.go @@ -6,6 +6,18 @@ package modload import ( "bytes" + "encoding/json" + "fmt" + "go/build" + "internal/lazyregexp" + "io/ioutil" + "os" + "path" + "path/filepath" + "runtime/debug" + "strconv" + "strings" + "cmd/go/internal/base" "cmd/go/internal/cache" "cmd/go/internal/cfg" @@ -18,22 +30,11 @@ import ( "cmd/go/internal/mvs" "cmd/go/internal/renameio" "cmd/go/internal/search" - "encoding/json" - "fmt" - "go/build" - "io/ioutil" - "os" - "path" - "path/filepath" - "regexp" - "runtime/debug" - "strconv" - "strings" ) var ( cwd string // TODO(bcmills): Is this redundant with base.Cwd? - MustUseModules = mustUseModules() + mustUseModules = false initialized bool modRoot string @@ -42,6 +43,15 @@ var ( excluded map[module.Version]bool Target module.Version + // targetPrefix is the path prefix for packages in Target, without a trailing + // slash. For most modules, targetPrefix is just Target.Path, but the + // standard-library module "std" has an empty prefix. + targetPrefix string + + // targetInGorootSrc caches whether modRoot is within GOROOT/src. + // The "std" module is special within GOROOT/src, but not otherwise. + targetInGorootSrc bool + gopath string CmdModInit bool // running 'go mod init' @@ -69,18 +79,6 @@ func BinDir() string { return filepath.Join(gopath, "bin") } -// mustUseModules reports whether we are invoked as vgo -// (as opposed to go). -// If so, we only support builds with go.mod files. -func mustUseModules() bool { - name := os.Args[0] - name = name[strings.LastIndex(name, "/")+1:] - name = name[strings.LastIndex(name, `\`)+1:] - return strings.HasPrefix(name, "vgo") -} - -var inGOPATH bool // running in GOPATH/src - // Init determines whether module mode is enabled, locates the root of the // current module (if any), sets environment variables for Git subprocesses, and // configures the cfg, codehost, load, modfetch, and search packages for use @@ -91,18 +89,17 @@ func Init() { } initialized = true - env := os.Getenv("GO111MODULE") + env := cfg.Getenv("GO111MODULE") switch env { default: base.Fatalf("go: unknown environment setting GO111MODULE=%s", env) - case "", "auto": - // leave MustUseModules alone + case "auto", "": + mustUseModules = false case "on": - MustUseModules = true + mustUseModules = true case "off": - if !MustUseModules { - return - } + mustUseModules = false + return } // Disable any prompting for passwords by Git. @@ -138,36 +135,14 @@ func Init() { base.Fatalf("go: %v", err) } - inGOPATH = false - for _, gopath := range filepath.SplitList(cfg.BuildContext.GOPATH) { - if gopath == "" { - continue - } - if search.InDir(cwd, filepath.Join(gopath, "src")) != "" { - inGOPATH = true - break - } - } - - if inGOPATH && !MustUseModules { - if CmdModInit { - die() // Don't init a module that we're just going to ignore. - } - // No automatic enabling in GOPATH. - if root := findModuleRoot(cwd); root != "" { - cfg.GoModInGOPATH = filepath.Join(root, "go.mod") - } - return - } - if CmdModInit { // Running 'go mod init': go.mod will be created in current directory. modRoot = cwd } else { modRoot = findModuleRoot(cwd) if modRoot == "" { - if !MustUseModules { - // GO111MODULE is 'auto' (or unset), and we can't find a module root. + if !mustUseModules { + // GO111MODULE is 'auto', and we can't find a module root. // Stay in GOPATH mode. return } @@ -254,9 +229,11 @@ func Init() { func init() { load.ModInit = Init - // Set modfetch.PkgMod unconditionally, so that go clean -modcache can run even without modules enabled. + // Set modfetch.PkgMod and codehost.WorkRoot unconditionally, + // so that go clean -modcache and go mod download can run even without modules enabled. if list := filepath.SplitList(cfg.BuildContext.GOPATH); len(list) > 0 && list[0] != "" { modfetch.PkgMod = filepath.Join(list[0], "pkg/mod") + codehost.WorkRoot = filepath.Join(list[0], "pkg/mod/cache/vcs") } } @@ -266,7 +243,7 @@ func init() { // (usually through MustModRoot). func Enabled() bool { Init() - return modRoot != "" || MustUseModules + return modRoot != "" || mustUseModules } // ModRoot returns the root of the main module. @@ -296,12 +273,9 @@ func die() { if printStackInDie { debug.PrintStack() } - if os.Getenv("GO111MODULE") == "off" { + if cfg.Getenv("GO111MODULE") == "off" { base.Fatalf("go: modules disabled by GO111MODULE=off; see 'go help modules'") } - if inGOPATH && !MustUseModules { - base.Fatalf("go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules'") - } if cwd != "" { if dir, name := findAltConfig(cwd); dir != "" { rel, err := filepath.Rel(cwd, dir) @@ -328,6 +302,7 @@ func InitMod() { Init() if modRoot == "" { Target = module.Version{Path: "command-line-arguments"} + targetPrefix = "command-line-arguments" buildList = []module.Version{Target} return } @@ -374,12 +349,21 @@ func InitMod() { excluded[x.Mod] = true } modFileToBuildList() + stdVendorMode() WriteGoMod() } // modFileToBuildList initializes buildList from the modFile. func modFileToBuildList() { Target = modFile.Module.Mod + targetPrefix = Target.Path + if rel := search.InDir(cwd, cfg.GOROOTsrc); rel != "" { + targetInGorootSrc = true + if Target.Path == "std" { + targetPrefix = "" + } + } + list := []module.Version{Target} for _, r := range modFile.Require { list = append(list, r.Mod) @@ -387,6 +371,42 @@ func modFileToBuildList() { buildList = list } +// stdVendorMode applies inside $GOROOT/src. +// It checks that the go.mod matches vendor/modules.txt +// and then sets -mod=vendor unless this is a command +// that has to do explicitly with modules. +func stdVendorMode() { + if !targetInGorootSrc { + return + } + if cfg.CmdName == "get" || strings.HasPrefix(cfg.CmdName, "mod ") { + return + } + + readVendorList() +BuildList: + for _, m := range buildList { + if m.Path == "cmd" || m.Path == "std" { + continue + } + for _, v := range vendorList { + if m.Path == v.Path { + if m.Version != v.Version { + base.Fatalf("go: inconsistent vendoring in %s:\n"+ + "\tgo.mod requires %s %s but vendor/modules.txt has %s.\n"+ + "\trun 'go mod tidy; go mod vendor' to sync", + modRoot, m.Path, m.Version, v.Version) + } + continue BuildList + } + } + base.Fatalf("go: inconsistent vendoring in %s:\n"+ + "\tgo.mod requires %s %s but vendor/modules.txt does not include it.\n"+ + "\trun 'go mod tidy; go mod vendor' to sync", modRoot, m.Path, m.Version) + } + cfg.BuildMod = "vendor" +} + // Allowed reports whether module m is allowed (not excluded) by the main module's go.mod. func Allowed(m module.Version) bool { return !excluded[m] @@ -401,10 +421,9 @@ func legacyModInit() { fmt.Fprintf(os.Stderr, "go: creating new go.mod: module %s\n", path) modFile = new(modfile.File) modFile.AddModuleStmt(path) + addGoStmt() // Add the go directive before converted module requirements. } - addGoStmt() - for _, name := range altConfigs { cfg := filepath.Join(modRoot, name) data, err := ioutil.ReadFile(cfg) @@ -427,15 +446,12 @@ func legacyModInit() { } } -// InitGoStmt adds a go statement, unless there already is one. -func InitGoStmt() { - if modFile.Go == nil { - addGoStmt() - } -} - -// addGoStmt adds a go statement referring to the current version. +// addGoStmt adds a go directive to the go.mod file if it does not already include one. +// The 'go' version added, if any, is the latest version supported by this toolchain. func addGoStmt() { + if modFile.Go != nil && modFile.Go.Version != "" { + return + } tags := build.Default.ReleaseTags version := tags[len(tags)-1] if !strings.HasPrefix(version, "go") || !modfile.GoVersionRE.MatchString(version[2:]) { @@ -508,7 +524,8 @@ func findModulePath(dir string) (string, error) { // TODO(bcmills): once we have located a plausible module path, we should // query version control (if available) to verify that it matches the major // version of the most recent tag. - // See https://golang.org/issue/29433 and https://golang.org/issue/27009. + // See https://golang.org/issue/29433, https://golang.org/issue/27009, and + // https://golang.org/issue/31549. // Cast about for import comments, // first in top-level directory, then in subdirectories. @@ -559,18 +576,19 @@ func findModulePath(dir string) (string, error) { } } - // Look for .git/config with github origin as last resort. - data, _ = ioutil.ReadFile(filepath.Join(dir, ".git/config")) - if m := gitOriginRE.FindSubmatch(data); m != nil { - return "github.com/" + string(m[1]), nil - } + msg := `cannot determine module path for source directory %s (outside GOPATH, module path must be specified) - return "", fmt.Errorf("cannot determine module path for source directory %s (outside GOPATH, no import comments)", dir) +Example usage: + 'go mod init example.com/m' to initialize a v0 or v1 module + 'go mod init example.com/m/v2' to initialize a v2 module + +Run 'go help mod init' for more information. +` + return "", fmt.Errorf(msg, dir) } var ( - gitOriginRE = regexp.MustCompile(`(?m)^\[remote "origin"\]\r?\n\turl = (?:https://github.com/|git@github.com:|gh:)([^/]+/[^/]+?)(\.git)?\r?\n`) - importCommentRE = regexp.MustCompile(`(?m)^package[ \t]+[^ \t\r\n/]+[ \t]+//[ \t]+import[ \t]+(\"[^"]+\")[ \t]*\r?\n`) + importCommentRE = lazyregexp.New(`(?m)^package[ \t]+[^ \t\r\n/]+[ \t]+//[ \t]+import[ \t]+(\"[^"]+\")[ \t]*\r?\n`) ) func findImportComment(file string) string { @@ -634,6 +652,8 @@ func WriteGoMod() { return } + addGoStmt() + if loaded != nil { reqs := MinReqs() min, err := reqs.Required(Target) @@ -656,18 +676,21 @@ func WriteGoMod() { base.Fatalf("go: %v", err) } + dirty := !bytes.Equal(new, modFileData) + if dirty && cfg.BuildMod == "readonly" { + // If we're about to fail due to -mod=readonly, + // prefer to report a dirty go.mod over a dirty go.sum + base.Fatalf("go: updates to go.mod needed, disabled by -mod=readonly") + } // Always update go.sum, even if we didn't change go.mod: we may have // downloaded modules that we didn't have before. modfetch.WriteGoSum() - if bytes.Equal(new, modFileData) { + if !dirty { // We don't need to modify go.mod from what we read previously. // Ignore any intervening edits. return } - if cfg.BuildMod == "readonly" { - base.Fatalf("go: updates to go.mod needed, disabled by -mod=readonly") - } unlock := modfetch.SideLock() defer unlock() @@ -693,7 +716,7 @@ func WriteGoMod() { } - if err := renameio.WriteFile(file, new); err != nil { + if err := renameio.WriteFile(file, new, 0666); err != nil { base.Fatalf("error writing go.mod: %v", err) } modFileData = new diff --git a/src/cmd/go/internal/modload/load.go b/src/cmd/go/internal/modload/load.go index 6d6c037af2..579ef50382 100644 --- a/src/cmd/go/internal/modload/load.go +++ b/src/cmd/go/internal/modload/load.go @@ -12,6 +12,7 @@ import ( "io/ioutil" "os" "path" + pathpkg "path" "path/filepath" "sort" "strings" @@ -32,7 +33,8 @@ import ( // buildList is the list of modules to use for building packages. // It is initialized by calling ImportPaths, ImportFromFiles, -// LoadALL, or LoadBuildList, each of which uses loaded.load. +// ModulePackages, LoadALL, or LoadBuildList, each of which uses +// loaded.load. // // Ideally, exactly ONE of those functions would be called, // and exactly once. Most of the time, that's true. @@ -52,27 +54,22 @@ var loaded *loader // ImportPaths returns the set of packages matching the args (patterns), // adding modules to the build list as needed to satisfy new imports. func ImportPaths(patterns []string) []*search.Match { - InitMod() + matches := ImportPathsQuiet(patterns) + search.WarnUnmatched(matches) + return matches +} - var matches []*search.Match - for _, pattern := range search.CleanPatterns(patterns) { - m := &search.Match{ - Pattern: pattern, - Literal: !strings.Contains(pattern, "...") && !search.IsMetaPackage(pattern), - } - if m.Literal { - m.Pkgs = []string{pattern} - } - matches = append(matches, m) - } - - fsDirs := make([][]string, len(matches)) - loaded = newLoader() - updateMatches := func(iterating bool) { +// ImportPathsQuiet is like ImportPaths but does not warn about patterns with no matches. +func ImportPathsQuiet(patterns []string) []*search.Match { + var fsDirs [][]string + updateMatches := func(matches []*search.Match, iterating bool) { for i, m := range matches { switch { case build.IsLocalImport(m.Pattern) || filepath.IsAbs(m.Pattern): // Evaluate list of file system directories on first iteration. + if fsDirs == nil { + fsDirs = make([][]string, len(matches)) + } if fsDirs[i] == nil { var dirs []string if m.Literal { @@ -90,7 +87,9 @@ func ImportPaths(patterns []string) []*search.Match { // the exact version of a particular module increases during // the loader iterations. m.Pkgs = str.StringList(fsDirs[i]) - for j, pkg := range m.Pkgs { + pkgs := m.Pkgs + m.Pkgs = m.Pkgs[:0] + for _, pkg := range pkgs { dir := pkg if !filepath.IsAbs(dir) { dir = filepath.Join(cwd, pkg) @@ -108,6 +107,16 @@ func ImportPaths(patterns []string) []*search.Match { if strings.HasPrefix(suffix, "/vendor/") { // TODO getmode vendor check pkg = strings.TrimPrefix(suffix, "/vendor/") + } else if targetInGorootSrc && Target.Path == "std" { + // Don't add the prefix "std/" to packages in the "std" module. + // It's the one module path that isn't a prefix of its packages. + pkg = strings.TrimPrefix(suffix, "/") + if pkg == "builtin" { + // "builtin" is a pseudo-package with a real source file. + // It's not included in "std", so it shouldn't be included in + // "./..." within module "std" either. + continue + } } else { pkg = Target.Path + suffix } @@ -129,10 +138,10 @@ func ImportPaths(patterns []string) []*search.Match { // After loader is done iterating, we still need to return the // path, so that "go list -e" produces valid output. if iterating { - pkg = "" + continue } } - m.Pkgs[j] = pkg + m.Pkgs = append(m.Pkgs, pkg) } case strings.Contains(m.Pattern, "..."): @@ -154,25 +163,113 @@ func ImportPaths(patterns []string) []*search.Match { if len(m.Pkgs) == 0 { m.Pkgs = search.MatchPackages(m.Pattern).Pkgs } + + default: + m.Pkgs = []string{m.Pattern} } } } - loaded.load(func() []string { - var roots []string - updateMatches(true) + return loadPatterns(patterns, true, updateMatches) +} + +// ModulePackages returns packages provided by each module in patterns. +// patterns may contain module paths, patterns matching module paths, +// "all" (interpreted as package pattern "all"), and "." (interpreted +// as the main module). Additional modules (including modules providing +// dependencies) may be added to the build list or upgraded. +func ModulePackages(patterns []string) []*search.Match { + updateMatches := func(matches []*search.Match, iterating bool) { for _, m := range matches { - for _, pkg := range m.Pkgs { - if pkg != "" { - roots = append(roots, pkg) + switch { + case search.IsRelativePath(m.Pattern) || filepath.IsAbs(m.Pattern): + if m.Pattern != "." { + base.Errorf("go: path %s is not a module", m.Pattern) + continue + } + m.Pkgs = matchPackages("...", loaded.tags, false, []module.Version{Target}) + + case strings.Contains(m.Pattern, "..."): + match := search.MatchPattern(m.Pattern) + var matched []module.Version + for _, mod := range buildList { + if match(mod.Path) || str.HasPathPrefix(m.Pattern, mod.Path) { + matched = append(matched, mod) + } + } + m.Pkgs = matchPackages(m.Pattern, loaded.tags, false, matched) + + case m.Pattern == "all": + loaded.testAll = true + if iterating { + // Enumerate the packages in the main module. + // We'll load the dependencies as we find them. + m.Pkgs = matchPackages("...", loaded.tags, false, []module.Version{Target}) + } else { + // Starting with the packages in the main module, + // enumerate the full list of "all". + m.Pkgs = loaded.computePatternAll(m.Pkgs) + } + + default: + found := false + for _, mod := range buildList { + if mod.Path == m.Pattern { + found = true + m.Pkgs = matchPackages("...", loaded.tags, false, []module.Version{mod}) + break + } + } + if !found { + base.Errorf("go %s: module not in build list", m.Pattern) } } } + } + return loadPatterns(patterns, false, updateMatches) +} + +// loadPatterns returns a set of packages matching the args (patterns), +// adding modules to the build list as needed to satisfy new imports. +// +// useTags indicates whether to use the default build constraints to +// filter source files. If useTags is false, only "ignore" and malformed +// build tag requirements are considered false. +// +// The interpretation of patterns is determined by updateMatches, which will be +// called repeatedly until the build list is finalized. updateMatches should +// should store a list of matching packages in each search.Match when it is +// called. The iterating parameter is true if the build list has not been +// finalized yet. +// +// If errors are encountered, loadPatterns will print them and exit. +// On success, loadPatterns will update the build list and write go.mod. +func loadPatterns(patterns []string, useTags bool, updateMatches func(matches []*search.Match, iterating bool)) []*search.Match { + InitMod() + + var matches []*search.Match + for _, pattern := range search.CleanPatterns(patterns) { + matches = append(matches, &search.Match{ + Pattern: pattern, + Literal: !strings.Contains(pattern, "...") && !search.IsMetaPackage(pattern), + }) + } + + loaded = newLoader() + if !useTags { + loaded.tags = anyTags + } + loaded.load(func() []string { + var roots []string + updateMatches(matches, true) + for _, m := range matches { + roots = append(roots, m.Pkgs...) + } return roots }) // One last pass to finalize wildcards. - updateMatches(false) + updateMatches(matches, false) // A given module path may be used as itself or as a replacement for another // module, but not both at the same time. Otherwise, the aliasing behavior is @@ -193,7 +290,6 @@ func ImportPaths(patterns []string) []*search.Match { base.ExitIfErrors() WriteGoMod() - search.WarnUnmatched(matches) return matches } @@ -201,7 +297,18 @@ func ImportPaths(patterns []string) []*search.Match { // if dir is in the module cache copy of a module in our build list. func pathInModuleCache(dir string) string { for _, m := range buildList[1:] { - root, err := modfetch.DownloadDir(m) + var root string + var err error + if repl := Replacement(m); repl.Path != "" && repl.Version == "" { + root = repl.Path + if !filepath.IsAbs(root) { + root = filepath.Join(ModRoot(), root) + } + } else if repl.Path != "" { + root, err = modfetch.DownloadDir(repl) + } else { + root, err = modfetch.DownloadDir(m) + } if err != nil { continue } @@ -259,14 +366,14 @@ func DirImportPath(dir string) string { } if dir == modRoot { - return Target.Path + return targetPrefix } if strings.HasPrefix(dir, modRoot+string(filepath.Separator)) { suffix := filepath.ToSlash(dir[len(modRoot):]) if strings.HasPrefix(suffix, "/vendor/") { return strings.TrimPrefix(suffix, "/vendor/") } - return Target.Path + suffix + return targetPrefix + suffix } return "." } @@ -317,7 +424,7 @@ func loadAll(testAll bool) []string { if !testAll { loaded.testRoots = true } - all := TargetPackages() + all := TargetPackages("...") loaded.load(func() []string { return all }) WriteGoMod() @@ -335,10 +442,11 @@ func loadAll(testAll bool) []string { // Only "ignore" and malformed build tag requirements are considered false. var anyTags = map[string]bool{"*": true} -// TargetPackages returns the list of packages in the target (top-level) module, -// under all build tag settings. -func TargetPackages() []string { - return matchPackages("...", anyTags, false, []module.Version{Target}) +// TargetPackages returns the list of packages in the target (top-level) module +// matching pattern, which may be relative to the working directory, under all +// build tag settings. +func TargetPackages(pattern string) []string { + return matchPackages(pattern, anyTags, false, []module.Version{Target}) } // BuildList returns the module build list, @@ -387,6 +495,20 @@ func PackageModule(path string) module.Version { return pkg.mod } +// PackageImports returns the imports for the package named by the import path. +// It does not include test imports. It returns nil for unknown packages. +func PackageImports(path string) []string { + pkg, ok := loaded.pkgCache.Get(path).(*loadPkg) + if !ok { + return nil + } + imports := make([]string, len(pkg.imports)) + for i, p := range pkg.imports { + imports[i] = p.path + } + return imports +} + // ModuleUsedDirectly reports whether the main module directly imports // some package in the module with the given path. func ModuleUsedDirectly(path string) bool { @@ -394,13 +516,17 @@ func ModuleUsedDirectly(path string) bool { } // Lookup returns the source directory, import path, and any loading error for -// the package at path. +// the package at path as imported from the package in parentDir. // Lookup requires that one of the Load functions in this package has already // been called. -func Lookup(path string) (dir, realPath string, err error) { +func Lookup(parentPath string, parentIsStd bool, path string) (dir, realPath string, err error) { if path == "" { panic("Lookup called with empty package path") } + + if parentIsStd { + path = loaded.stdVendor(parentPath, path) + } pkg, ok := loaded.pkgCache.Get(path).(*loadPkg) if !ok { // The loader should have found all the relevant paths. @@ -434,10 +560,11 @@ func Lookup(path string) (dir, realPath string, err error) { // TODO(rsc): It might be nice to make the loader take and return // a buildList rather than hard-coding use of the global. type loader struct { - tags map[string]bool // tags for scanDir - testRoots bool // include tests for roots - isALL bool // created with LoadALL - testAll bool // include tests for all packages + tags map[string]bool // tags for scanDir + testRoots bool // include tests for roots + isALL bool // created with LoadALL + testAll bool // include tests for all packages + forceStdVendor bool // if true, load standard-library dependencies from the vendor subtree // reset on each iteration roots []*loadPkg @@ -457,6 +584,13 @@ func newLoader() *loader { ld := new(loader) ld.tags = imports.Tags() ld.testRoots = LoadTests + + // Inside the "std" and "cmd" modules, we prefer to use the vendor directory + // unless the command explicitly changes the module graph. + if !targetInGorootSrc || (cfg.CmdName != "get" && !strings.HasPrefix(cfg.CmdName, "mod ")) { + ld.forceStdVendor = true + } + return ld } @@ -511,8 +645,12 @@ func (ld *loader) load(roots func() []string) { for _, m := range buildList { haveMod[m] = true } + modAddedBy := make(map[module.Version]*loadPkg) for _, pkg := range ld.pkgs { if err, ok := pkg.err.(*ImportMissingError); ok && err.Module.Path != "" { + if err.newMissingVersion != "" { + base.Fatalf("go: %s: package provided by %s at latest version %s but not at required version %s", pkg.stackText(), err.Module.Path, err.Module.Version, err.newMissingVersion) + } if added[pkg.path] { base.Fatalf("go: %s: looping trying to add package", pkg.stackText()) } @@ -520,6 +658,7 @@ func (ld *loader) load(roots func() []string) { numAdded++ if !haveMod[err.Module] { haveMod[err.Module] = true + modAddedBy[err.Module] = pkg buildList = append(buildList, err.Module) } continue @@ -535,6 +674,14 @@ func (ld *loader) load(roots func() []string) { reqs = Reqs() buildList, err = mvs.BuildList(Target, reqs) if err != nil { + // If an error was found in a newly added module, report the package + // import stack instead of the module requirement stack. Packages + // are more descriptive. + if err, ok := err.(*mvs.BuildListError); ok { + if pkg := modAddedBy[err.Module()]; pkg != nil { + base.Fatalf("go: %s: %v", pkg.stackText(), err.Err) + } + } base.Fatalf("go: %v", err) } } @@ -631,7 +778,11 @@ func (ld *loader) doPkg(item interface{}) { } } + inStd := (search.IsStandardImportPath(pkg.path) && search.InDir(pkg.dir, cfg.GOROOTsrc) != "") for _, path := range imports { + if inStd { + path = ld.stdVendor(pkg.path, path) + } pkg.imports = append(pkg.imports, ld.pkg(path, false)) } @@ -642,6 +793,31 @@ func (ld *loader) doPkg(item interface{}) { } } +// stdVendor returns the canonical import path for the package with the given +// path when imported from the standard-library package at parentPath. +func (ld *loader) stdVendor(parentPath, path string) string { + if search.IsStandardImportPath(path) { + return path + } + + if str.HasPathPrefix(parentPath, "cmd") { + if ld.forceStdVendor || Target.Path != "cmd" { + vendorPath := pathpkg.Join("cmd", "vendor", path) + if _, err := os.Stat(filepath.Join(cfg.GOROOTsrc, filepath.FromSlash(vendorPath))); err == nil { + return vendorPath + } + } + } else if ld.forceStdVendor || Target.Path != "std" { + vendorPath := pathpkg.Join("vendor", path) + if _, err := os.Stat(filepath.Join(cfg.GOROOTsrc, filepath.FromSlash(vendorPath))); err == nil { + return vendorPath + } + } + + // Not vendored: resolve from modules. + return path +} + // computePatternAll returns the list of packages matching pattern "all", // starting with a list of the import paths for the packages in the main module. func (ld *loader) computePatternAll(paths []string) []string { @@ -737,27 +913,33 @@ func (ld *loader) buildStacks() { // stackText builds the import stack text to use when // reporting an error in pkg. It has the general form // -// import root -> -// import other -> -// import other2 -> -// import pkg +// root imports +// other imports +// other2 tested by +// other2.test imports +// pkg // func (pkg *loadPkg) stackText() string { var stack []*loadPkg - for p := pkg.stack; p != nil; p = p.stack { + for p := pkg; p != nil; p = p.stack { stack = append(stack, p) } var buf bytes.Buffer for i := len(stack) - 1; i >= 0; i-- { p := stack[i] + fmt.Fprint(&buf, p.path) if p.testOf != nil { - fmt.Fprintf(&buf, "test ->\n\t") - } else { - fmt.Fprintf(&buf, "import %q ->\n\t", p.path) + fmt.Fprint(&buf, ".test") + } + if i > 0 { + if stack[i-1].testOf == p { + fmt.Fprint(&buf, " tested by\n\t") + } else { + fmt.Fprint(&buf, " imports\n\t") + } } } - fmt.Fprintf(&buf, "import %q", pkg.path) return buf.String() } @@ -909,27 +1091,40 @@ func readVendorList() { } func (r *mvsReqs) modFileToList(f *modfile.File) []module.Version { - var list []module.Version + list := make([]module.Version, 0, len(f.Require)) for _, r := range f.Require { list = append(list, r.Mod) } return list } +// required returns a unique copy of the requirements of mod. func (r *mvsReqs) required(mod module.Version) ([]module.Version, error) { if mod == Target { if modFile != nil && modFile.Go != nil { r.versions.LoadOrStore(mod, modFile.Go.Version) } - var list []module.Version - return append(list, r.buildList[1:]...), nil + return append([]module.Version(nil), r.buildList[1:]...), nil } if cfg.BuildMod == "vendor" { // For every module other than the target, // return the full list of modules from modules.txt. readVendorList() - return vendorList, nil + return append([]module.Version(nil), vendorList...), nil + } + + if targetInGorootSrc { + // When inside "std" or "cmd", only fetch and read go.mod files if we're + // explicitly running a command that can change the module graph. If we have + // to resolve a new dependency, we might pick the wrong version, but 'go mod + // tidy' will fix it — and new standard-library dependencies should be rare + // anyway. + // + // TODO(golang.org/issue/30240): Drop this special-case. + if cfg.CmdName != "get" && !strings.HasPrefix(cfg.CmdName, "mod ") { + return nil, nil + } } origPath := mod.Path @@ -943,13 +1138,11 @@ func (r *mvsReqs) required(mod module.Version) ([]module.Version, error) { gomod := filepath.Join(dir, "go.mod") data, err := ioutil.ReadFile(gomod) if err != nil { - base.Errorf("go: parsing %s: %v", base.ShortPath(gomod), err) - return nil, ErrRequire + return nil, fmt.Errorf("parsing %s: %v", base.ShortPath(gomod), err) } f, err := modfile.ParseLax(gomod, data, nil) if err != nil { - base.Errorf("go: parsing %s: %v", base.ShortPath(gomod), err) - return nil, ErrRequire + return nil, fmt.Errorf("parsing %s: %v", base.ShortPath(gomod), err) } if f.Go != nil { r.versions.LoadOrStore(mod, f.Go.Version) @@ -970,22 +1163,18 @@ func (r *mvsReqs) required(mod module.Version) ([]module.Version, error) { data, err := modfetch.GoMod(mod.Path, mod.Version) if err != nil { - base.Errorf("go: %s@%s: %v\n", mod.Path, mod.Version, err) - return nil, ErrRequire + return nil, fmt.Errorf("%s@%s: %v", mod.Path, mod.Version, err) } f, err := modfile.ParseLax("go.mod", data, nil) if err != nil { - base.Errorf("go: %s@%s: parsing go.mod: %v", mod.Path, mod.Version, err) - return nil, ErrRequire + return nil, fmt.Errorf("%s@%s: parsing go.mod: %v", mod.Path, mod.Version, err) } if f.Module == nil { - base.Errorf("go: %s@%s: parsing go.mod: missing module line", mod.Path, mod.Version) - return nil, ErrRequire + return nil, fmt.Errorf("%s@%s: parsing go.mod: missing module line", mod.Path, mod.Version) } if mpath := f.Module.Mod.Path; mpath != origPath && mpath != mod.Path { - base.Errorf("go: %s@%s: parsing go.mod: unexpected module path %q", mod.Path, mod.Version, mpath) - return nil, ErrRequire + return nil, fmt.Errorf("%s@%s: parsing go.mod: unexpected module path %q", mod.Path, mod.Version, mpath) } if f.Go != nil { r.versions.LoadOrStore(mod, f.Go.Version) @@ -994,11 +1183,6 @@ func (r *mvsReqs) required(mod module.Version) ([]module.Version, error) { return r.modFileToList(f), nil } -// ErrRequire is the sentinel error returned when Require encounters problems. -// It prints the problems directly to standard error, so that multiple errors -// can be displayed easily. -var ErrRequire = errors.New("error loading module requirements") - func (*mvsReqs) Max(v1, v2 string) string { if v1 != "" && semver.Compare(v1, v2) == -1 { return v2 diff --git a/src/cmd/go/internal/modload/query.go b/src/cmd/go/internal/modload/query.go index 0856486c21..f0f67c193c 100644 --- a/src/cmd/go/internal/modload/query.go +++ b/src/cmd/go/internal/modload/query.go @@ -5,13 +5,17 @@ package modload import ( - "cmd/go/internal/modfetch" - "cmd/go/internal/modfetch/codehost" - "cmd/go/internal/module" - "cmd/go/internal/semver" "fmt" pathpkg "path" "strings" + "sync" + + "cmd/go/internal/modfetch" + "cmd/go/internal/modfetch/codehost" + "cmd/go/internal/module" + "cmd/go/internal/search" + "cmd/go/internal/semver" + "cmd/go/internal/str" ) // Query looks up a revision of a given module given a version query string. @@ -27,7 +31,7 @@ import ( // - v1.2.3, >=v1.2.3, // denoting the version closest to the target and satisfying the given operator, // with non-prereleases preferred over prereleases. -// - a repository commit identifier, denoting that commit. +// - a repository commit identifier or tag, denoting that commit. // // If the allowed function is non-nil, Query excludes any versions for which allowed returns false. // @@ -102,18 +106,24 @@ func Query(path, query string, allowed func(module.Version) bool) (*modfetch.Rev } prefix = query + "." - case semver.IsValid(query): - vers := module.CanonicalVersion(query) - if !allowed(module.Version{Path: path, Version: vers}) { - return nil, fmt.Errorf("%s@%s excluded", path, vers) - } - return modfetch.Stat(path, vers) - default: // Direct lookup of semantic version or commit identifier. + // + // If the identifier is not a canonical semver tag — including if it's a + // semver tag with a +metadata suffix — then modfetch.Stat will populate + // info.Version with a suitable pseudo-version. info, err := modfetch.Stat(path, query) if err != nil { - return nil, err + queryErr := err + // The full query doesn't correspond to a tag. If it is a semantic version + // with a +metadata suffix, see if there is a tag without that suffix: + // semantic versioning defines them to be equivalent. + if vers := module.CanonicalVersion(query); vers != "" && vers != query { + info, err = modfetch.Stat(path, vers) + } + if err != nil { + return nil, queryErr + } } if !allowed(module.Version{Path: path, Version: info.Version}) { return nil, fmt.Errorf("%s@%s excluded", path, info.Version) @@ -131,6 +141,10 @@ func Query(path, query string, allowed func(module.Version) bool) (*modfetch.Rev return &modfetch.RevInfo{Version: Target.Version}, nil } + if str.HasPathPrefix(path, "std") || str.HasPathPrefix(path, "cmd") { + return nil, fmt.Errorf("explicit requirement on standard-library module %s not allowed", path) + } + // Load versions and execute query. repo, err := modfetch.Lookup(path) if err != nil { @@ -175,10 +189,10 @@ func Query(path, query string, allowed func(module.Version) bool) (*modfetch.Rev } } - return nil, fmt.Errorf("no matching versions for query %q", query) + return nil, &NoMatchingVersionError{query: query} } -// isSemverPrefix reports whether v is a semantic version prefix: v1 or v1.2 (not v1.2.3). +// isSemverPrefix reports whether v is a semantic version prefix: v1 or v1.2 (not v1.2.3). // The caller is assumed to have checked that semver.IsValid(v) is true. func isSemverPrefix(v string) bool { dots := 0 @@ -199,53 +213,248 @@ func isSemverPrefix(v string) bool { // matchSemverPrefix reports whether the shortened semantic version p // matches the full-width (non-shortened) semantic version v. func matchSemverPrefix(p, v string) bool { - return len(v) > len(p) && v[len(p)] == '.' && v[:len(p)] == p + return len(v) > len(p) && v[len(p)] == '.' && v[:len(p)] == p && semver.Prerelease(v) == "" } -// QueryPackage looks up a revision of a module containing path. +type QueryResult struct { + Mod module.Version + Rev *modfetch.RevInfo + Packages []string +} + +// QueryPackage looks up the module(s) containing path at a revision matching +// query. The results are sorted by module path length in descending order. // -// If multiple modules with revisions matching the query provide the requested -// package, QueryPackage picks the one with the longest module path. +// If the package is in the main module, QueryPackage considers only the main +// module and only the version "latest", without checking for other possible +// modules. +func QueryPackage(path, query string, allowed func(module.Version) bool) ([]QueryResult, error) { + if search.IsMetaPackage(path) || strings.Contains(path, "...") { + return nil, fmt.Errorf("pattern %s is not an importable package", path) + } + return QueryPattern(path, query, allowed) +} + +// QueryPattern looks up the module(s) containing at least one package matching +// the given pattern at the given version. The results are sorted by module path +// length in descending order. // -// If the path is in the main module and the query is "latest", -// QueryPackage returns Target as the version. -func QueryPackage(path, query string, allowed func(module.Version) bool) (module.Version, *modfetch.RevInfo, error) { +// QueryPattern queries modules with package paths up to the first "..." +// in the pattern. For the pattern "example.com/a/b.../c", QueryPattern would +// consider prefixes of "example.com/a". If multiple modules have versions +// that match the query and packages that match the pattern, QueryPattern +// picks the one with the longest module path. +// +// If any matching package is in the main module, QueryPattern considers only +// the main module and only the version "latest", without checking for other +// possible modules. +func QueryPattern(pattern string, query string, allowed func(module.Version) bool) ([]QueryResult, error) { + base := pattern + var match func(m module.Version, root string, isLocal bool) (pkgs []string) + + if i := strings.Index(pattern, "..."); i >= 0 { + base = pathpkg.Dir(pattern[:i+3]) + match = func(m module.Version, root string, isLocal bool) []string { + return matchPackages(pattern, anyTags, false, []module.Version{m}) + } + } else { + match = func(m module.Version, root string, isLocal bool) []string { + prefix := m.Path + if m == Target { + prefix = targetPrefix + } + if _, ok := dirInModule(pattern, prefix, root, isLocal); ok { + return []string{pattern} + } else { + return nil + } + } + } + if HasModRoot() { - if _, ok := dirInModule(path, Target.Path, modRoot, true); ok { + pkgs := match(Target, modRoot, true) + if len(pkgs) > 0 { if query != "latest" { - return module.Version{}, nil, fmt.Errorf("can't query specific version (%q) for package %s in the main module (%s)", query, path, Target.Path) + return nil, fmt.Errorf("can't query specific version for package %s in the main module (%s)", pattern, Target.Path) } if !allowed(Target) { - return module.Version{}, nil, fmt.Errorf("internal error: package %s is in the main module (%s), but version is not allowed", path, Target.Path) + return nil, fmt.Errorf("internal error: package %s is in the main module (%s), but version is not allowed", pattern, Target.Path) } - return Target, &modfetch.RevInfo{Version: Target.Version}, nil + return []QueryResult{{ + Mod: Target, + Rev: &modfetch.RevInfo{Version: Target.Version}, + Packages: pkgs, + }}, nil } } - finalErr := errMissing - for p := path; p != "." && p != "/"; p = pathpkg.Dir(p) { - info, err := Query(p, query, allowed) - if err != nil { - if _, ok := err.(*codehost.VCSError); ok { - // A VCSError means we know where to find the code, - // we just can't. Abort search. - return module.Version{}, nil, err + // If the path we're attempting is not in the module cache and we don't have a + // fetch result cached either, we'll end up making a (potentially slow) + // request to the proxy or (often even slower) the origin server. + // To minimize latency, execute all of those requests in parallel. + type result struct { + QueryResult + err error + } + results := make([]result, strings.Count(base, "/")+1) // by descending path length + i, p := 0, base + var wg sync.WaitGroup + wg.Add(len(results)) + for { + go func(p string, r *result) (err error) { + defer func() { + r.err = err + wg.Done() + }() + + r.Mod.Path = p + if HasModRoot() && p == Target.Path { + r.Mod.Version = Target.Version + r.Rev = &modfetch.RevInfo{Version: Target.Version} + // We already know (from above) that Target does not contain any + // packages matching pattern, so leave r.Packages empty. + } else { + r.Rev, err = Query(p, query, allowed) + if err != nil { + return err + } + r.Mod.Version = r.Rev.Version + root, isLocal, err := fetch(r.Mod) + if err != nil { + return err + } + r.Packages = match(r.Mod, root, isLocal) } - if finalErr == errMissing { - finalErr = err + if len(r.Packages) == 0 { + return &packageNotInModuleError{ + mod: r.Mod, + query: query, + pattern: pattern, + } } + return nil + }(p, &results[i]) + + j := strings.LastIndexByte(p, '/') + if i++; i == len(results) { + if j >= 0 { + panic("undercounted slashes") + } + break + } + if j < 0 { + panic("overcounted slashes") + } + p = p[:j] + } + wg.Wait() + + // Classify the results. In case of failure, identify the error that the user + // is most likely to find helpful. + var ( + successes []QueryResult + mostUseful result + ) + for _, r := range results { + if r.err == nil { + successes = append(successes, r.QueryResult) continue } - m := module.Version{Path: p, Version: info.Version} - root, isLocal, err := fetch(m) - if err != nil { - return module.Version{}, nil, err + + switch mostUseful.err.(type) { + case nil: + mostUseful = r + continue + case *packageNotInModuleError: + // Any other error is more useful than one that reports that the main + // module does not contain the requested packages. + if mostUseful.Mod.Path == Target.Path { + mostUseful = r + continue + } } - _, ok := dirInModule(path, m.Path, root, isLocal) - if ok { - return m, info, nil + + switch r.err.(type) { + case *codehost.VCSError: + // A VCSError means that we've located a repository, but couldn't look + // inside it for packages. That's a very strong signal, and should + // override any others. + return nil, r.err + case *packageNotInModuleError: + if r.Mod.Path == Target.Path { + // Don't override a potentially-useful error for some other module with + // a trivial error for the main module. + continue + } + // A module with an appropriate prefix exists at the requested version, + // but it does not contain the requested package(s). + if _, worsePath := mostUseful.err.(*packageNotInModuleError); !worsePath { + mostUseful = r + } + case *NoMatchingVersionError: + // A module with an appropriate prefix exists, but not at the requested + // version. + _, worseError := mostUseful.err.(*packageNotInModuleError) + _, worsePath := mostUseful.err.(*NoMatchingVersionError) + if !(worseError || worsePath) { + mostUseful = r + } } } - return module.Version{}, nil, finalErr + // TODO(#26232): If len(successes) == 0 and some of the errors are 4xx HTTP + // codes, have the auth package recheck the failed paths. + // If we obtain new credentials for any of them, re-run the above loop. + + if len(successes) == 0 { + // All of the possible module paths either did not exist at the requested + // version, or did not contain the requested package(s). + return nil, mostUseful.err + } + + // At least one module at the requested version contained the requested + // package(s). Any remaining errors only describe the non-existence of + // alternatives, so ignore them. + return successes, nil +} + +// A NoMatchingVersionError indicates that Query found a module at the requested +// path, but not at any versions satisfying the query string and allow-function. +type NoMatchingVersionError struct { + query string +} + +func (e *NoMatchingVersionError) Error() string { + return fmt.Sprintf("no matching versions for query %q", e.query) +} + +// A packageNotInModuleError indicates that QueryPattern found a candidate +// module at the requested version, but that module did not contain any packages +// matching the requested pattern. +type packageNotInModuleError struct { + mod module.Version + query string + pattern string +} + +func (e *packageNotInModuleError) Error() string { + found := "" + if e.query != e.mod.Version { + found = fmt.Sprintf(" (%s)", e.mod.Version) + } + + if strings.Contains(e.pattern, "...") { + return fmt.Sprintf("module %s@%s%s found, but does not contain packages matching %s", e.mod.Path, e.query, found, e.pattern) + } + return fmt.Sprintf("module %s@%s%s found, but does not contain package %s", e.mod.Path, e.query, found, e.pattern) +} + +// ModuleHasRootPackage returns whether module m contains a package m.Path. +func ModuleHasRootPackage(m module.Version) (bool, error) { + root, isLocal, err := fetch(m) + if err != nil { + return false, err + } + _, ok := dirInModule(m.Path, m.Path, root, isLocal) + return ok, nil } diff --git a/src/cmd/go/internal/modload/query_test.go b/src/cmd/go/internal/modload/query_test.go index 9b07383217..d2b9baa4d5 100644 --- a/src/cmd/go/internal/modload/query_test.go +++ b/src/cmd/go/internal/modload/query_test.go @@ -14,6 +14,7 @@ import ( "strings" "testing" + "cmd/go/internal/cfg" "cmd/go/internal/modfetch" "cmd/go/internal/modfetch/codehost" "cmd/go/internal/module" @@ -24,11 +25,16 @@ func TestMain(m *testing.M) { } func testMain(m *testing.M) int { + modfetch.SetProxy("direct") + dir, err := ioutil.TempDir("", "modload-test-") if err != nil { log.Fatal(err) } defer os.RemoveAll(dir) + + os.Setenv("GOPATH", dir) + cfg.BuildContext.GOPATH = dir modfetch.PkgMod = filepath.Join(dir, "pkg/mod") codehost.WorkRoot = filepath.Join(dir, "codework") return m.Run() @@ -56,7 +62,7 @@ var queryTests = []struct { git add go.mod git commit -m v1 go.mod git tag start - for i in v0.0.0-pre1 v0.0.0 v0.0.1 v0.0.2 v0.0.3 v0.1.0 v0.1.1 v0.1.2 v0.3.0 v1.0.0 v1.1.0 v1.9.0 v1.9.9 v1.9.10-pre1; do + for i in v0.0.0-pre1 v0.0.0 v0.0.1 v0.0.2 v0.0.3 v0.1.0 v0.1.1 v0.1.2 v0.3.0 v1.0.0 v1.1.0 v1.9.0 v1.9.9 v1.9.10-pre1 v1.9.10-pre2+metadata; do echo before $i >status git add status git commit -m "before $i" status @@ -70,7 +76,7 @@ var queryTests = []struct { git checkout v2 echo module vcs-test.golang.org/git/querytest.git/v2 >go.mod git commit -m v2 go.mod - for i in v2.0.0 v2.1.0 v2.2.0 v2.5.5; do + for i in v2.0.0 v2.1.0 v2.2.0 v2.5.5 v2.6.0-pre1; do echo before $i >status git add status git commit -m "before $i" status @@ -78,6 +84,7 @@ var queryTests = []struct { git commit -m "at $i" status git tag $i done + git checkout v2.5.5 echo after v2.5.5 >status git commit -m 'after v2.5.5' status git checkout master @@ -97,6 +104,9 @@ var queryTests = []struct { {path: queryRepo, query: "v0.1", vers: "v0.1.2"}, {path: queryRepo, query: "v0.2", err: `no matching versions for query "v0.2"`}, {path: queryRepo, query: "v0.0", vers: "v0.0.3"}, + {path: queryRepo, query: "v1.9.10-pre2+metadata", vers: "v1.9.10-pre2.0.20190513201126-42abcb6df8ee"}, + {path: queryRepo, query: "v1.9.10-pre2+wrongmetadata", err: `unknown revision v1.9.10-pre2+wrongmetadata`}, + {path: queryRepo, query: "v1.9.10-pre2", err: `unknown revision v1.9.10-pre2`}, {path: queryRepo, query: "latest", vers: "v1.9.9"}, {path: queryRepo, query: "latest", allow: "NOMATCH", err: `no matching versions for query "latest"`}, {path: queryRepo, query: ">v1.9.9", vers: "v1.9.10-pre1"}, @@ -111,6 +121,10 @@ var queryTests = []struct { {path: queryRepoV2, query: ">v0.0.0", vers: "v2.0.0"}, {path: queryRepoV2, query: ">=v0.0.0", vers: "v2.0.0"}, {path: queryRepoV2, query: "v0.0.1+foo", vers: "v2.0.0-20180704023347-179bc86b1be3"}, + {path: queryRepoV2, query: "v2", vers: "v2.5.5"}, + {path: queryRepoV2, query: "v2.5", vers: "v2.5.5"}, + {path: queryRepoV2, query: "v2.6", err: `no matching versions for query "v2.6"`}, + {path: queryRepoV2, query: "v2.6.0-pre1", vers: "v2.6.0-pre1"}, {path: queryRepoV2, query: "latest", vers: "v2.5.5"}, {path: queryRepoV3, query: "latest", vers: "v3.0.0-20180704024501-e0cf3de987e6"}, diff --git a/src/cmd/go/internal/modload/search.go b/src/cmd/go/internal/modload/search.go index 7d8852d01d..d82386eca3 100644 --- a/src/cmd/go/internal/modload/search.go +++ b/src/cmd/go/internal/modload/search.go @@ -35,12 +35,14 @@ func matchPackages(pattern string, tags map[string]bool, useStd bool, modules [] } var pkgs []string - walkPkgs := func(root, importPathRoot string) { + type pruning int8 + const ( + pruneVendor = pruning(1 << iota) + pruneGoMod + ) + + walkPkgs := func(root, importPathRoot string, prune pruning) { root = filepath.Clean(root) - var cmd string - if root == cfg.GOROOTsrc { - cmd = filepath.Join(root, "cmd") - } filepath.Walk(root, func(path string, fi os.FileInfo, err error) error { if err != nil { return nil @@ -51,14 +53,6 @@ func matchPackages(pattern string, tags map[string]bool, useStd bool, modules [] return nil } - // GOROOT/src/cmd makes use of GOROOT/src/cmd/vendor, - // which module mode can't deal with. Eventually we'll stop using - // that vendor directory, and then we can remove this exclusion. - // golang.org/issue/26924. - if path == cmd { - return filepath.SkipDir - } - want := true // Avoid .foo, _foo, and testdata directory trees. _, elem := filepath.Split(path) @@ -86,8 +80,9 @@ func matchPackages(pattern string, tags map[string]bool, useStd bool, modules [] if !want { return filepath.SkipDir } - if path != root { - if _, err := os.Stat(filepath.Join(path, "go.mod")); err == nil { + // Stop at module boundaries. + if (prune&pruneGoMod != 0) && path != root { + if fi, err := os.Stat(filepath.Join(path, "go.mod")); err == nil && !fi.IsDir() { return filepath.SkipDir } } @@ -101,7 +96,7 @@ func matchPackages(pattern string, tags map[string]bool, useStd bool, modules [] } } - if elem == "vendor" { + if elem == "vendor" && (prune&pruneVendor != 0) { return filepath.SkipDir } return nil @@ -109,28 +104,51 @@ func matchPackages(pattern string, tags map[string]bool, useStd bool, modules [] } if useStd { - walkPkgs(cfg.GOROOTsrc, "") + walkPkgs(cfg.GOROOTsrc, "", pruneGoMod) + if treeCanMatch("cmd") { + walkPkgs(filepath.Join(cfg.GOROOTsrc, "cmd"), "cmd", pruneGoMod) + } + } + + if cfg.BuildMod == "vendor" { + if HasModRoot() { + walkPkgs(ModRoot(), targetPrefix, pruneGoMod|pruneVendor) + walkPkgs(filepath.Join(ModRoot(), "vendor"), "", pruneVendor) + } + return pkgs } for _, mod := range modules { if !treeCanMatch(mod.Path) { continue } - var root string - if mod.Version == "" { + + var ( + root, modPrefix string + isLocal bool + ) + if mod == Target { if !HasModRoot() { continue // If there is no main module, we can't search in it. } root = ModRoot() + modPrefix = targetPrefix + isLocal = true } else { var err error - root, _, err = fetch(mod) + root, isLocal, err = fetch(mod) if err != nil { base.Errorf("go: %v", err) continue } + modPrefix = mod.Path } - walkPkgs(root, mod.Path) + + prune := pruneVendor + if isLocal { + prune |= pruneGoMod + } + walkPkgs(root, modPrefix, prune) } return pkgs diff --git a/src/cmd/go/internal/mvs/mvs.go b/src/cmd/go/internal/mvs/mvs.go index aa109693f3..90f8f269b5 100644 --- a/src/cmd/go/internal/mvs/mvs.go +++ b/src/cmd/go/internal/mvs/mvs.go @@ -9,7 +9,9 @@ package mvs import ( "fmt" "sort" + "strings" "sync" + "sync/atomic" "cmd/go/internal/base" "cmd/go/internal/module" @@ -59,12 +61,55 @@ type Reqs interface { Previous(m module.Version) (module.Version, error) } -type MissingModuleError struct { - Module module.Version +// BuildListError decorates an error that occurred gathering requirements +// while constructing a build list. BuildListError prints the chain +// of requirements to the module where the error occurred. +type BuildListError struct { + Err error + stack []buildListErrorElem } -func (e *MissingModuleError) Error() string { - return fmt.Sprintf("missing module: %v", e.Module) +type buildListErrorElem struct { + m module.Version + + // nextReason is the reason this module depends on the next module in the + // stack. Typically either "requires", or "upgraded to". + nextReason string +} + +// Module returns the module where the error occurred. If the module stack +// is empty, this returns a zero value. +func (e *BuildListError) Module() module.Version { + if len(e.stack) == 0 { + return module.Version{} + } + return e.stack[0].m +} + +func (e *BuildListError) Error() string { + b := &strings.Builder{} + errMsg := e.Err.Error() + stack := e.stack + + // Don't print modules at the beginning of the chain without a + // version. These always seem to be the main module or a + // synthetic module ("target@"). + for len(stack) > 0 && stack[len(stack)-1].m.Version == "" { + stack = stack[:len(stack)-1] + } + + // Don't print the last module if the error message already + // starts with module path and version. + errMentionsLast := len(stack) > 0 && strings.HasPrefix(errMsg, fmt.Sprintf("%s@%s: ", stack[0].m.Path, stack[0].m.Version)) + for i := len(stack) - 1; i >= 1; i-- { + fmt.Fprintf(b, "%s@%s %s\n\t", stack[i].m.Path, stack[i].m.Version, stack[i].nextReason) + } + if errMentionsLast || len(stack) == 0 { + b.WriteString(errMsg) + } else { + fmt.Fprintf(b, "%s@%s: %s", stack[0].m.Path, stack[0].m.Version, errMsg) + } + return b.String() } // BuildList returns the build list for the target module. @@ -76,35 +121,40 @@ func BuildList(target module.Version, reqs Reqs) ([]module.Version, error) { func buildList(target module.Version, reqs Reqs, upgrade func(module.Version) module.Version) ([]module.Version, error) { // Explore work graph in parallel in case reqs.Required // does high-latency network operations. - var work par.Work - work.Add(target) + type modGraphNode struct { + m module.Version + required []module.Version + upgrade module.Version + err error + } var ( mu sync.Mutex - min = map[string]string{target.Path: target.Version} - firstErr error + modGraph = map[module.Version]*modGraphNode{} + min = map[string]string{} // maps module path to minimum required version + haveErr int32 ) + + var work par.Work + work.Add(target) work.Do(10, func(item interface{}) { m := item.(module.Version) - required, err := reqs.Required(m) + node := &modGraphNode{m: m} mu.Lock() - if err != nil && firstErr == nil { - firstErr = err - } - if firstErr != nil { - mu.Unlock() - return - } + modGraph[m] = node if v, ok := min[m.Path]; !ok || reqs.Max(v, m.Version) != v { min[m.Path] = m.Version } mu.Unlock() - for _, r := range required { - if r.Path == "" { - base.Errorf("Required(%v) returned zero module in list", m) - continue - } + required, err := reqs.Required(m) + if err != nil { + node.err = err + atomic.StoreInt32(&haveErr, 1) + return + } + node.required = required + for _, r := range node.required { work.Add(r) } @@ -114,25 +164,70 @@ func buildList(target module.Version, reqs Reqs, upgrade func(module.Version) mo base.Errorf("Upgrade(%v) returned zero module", m) return } - work.Add(u) + if u != m { + node.upgrade = u + work.Add(u) + } } }) - if firstErr != nil { - return nil, firstErr + // If there was an error, find the shortest path from the target to the + // node where the error occurred so we can report a useful error message. + if haveErr != 0 { + // neededBy[a] = b means a was added to the module graph by b. + neededBy := make(map[*modGraphNode]*modGraphNode) + q := make([]*modGraphNode, 0, len(modGraph)) + q = append(q, modGraph[target]) + for len(q) > 0 { + node := q[0] + q = q[1:] + + if node.err != nil { + err := &BuildListError{ + Err: node.err, + stack: []buildListErrorElem{{m: node.m}}, + } + for n, prev := neededBy[node], node; n != nil; n, prev = neededBy[n], n { + reason := "requires" + if n.upgrade == prev.m { + reason = "updating to" + } + err.stack = append(err.stack, buildListErrorElem{m: n.m, nextReason: reason}) + } + return nil, err + } + + neighbors := node.required + if node.upgrade.Path != "" { + neighbors = append(neighbors, node.upgrade) + } + for _, neighbor := range neighbors { + nn := modGraph[neighbor] + if neededBy[nn] != nil { + continue + } + neededBy[nn] = node + q = append(q, nn) + } + } } + + // Construct the list by traversing the graph again, replacing older + // modules with required minimum versions. if v := min[target.Path]; v != target.Version { + // TODO(jayconrod): there is a special case in modload.mvsReqs.Max + // that prevents us from selecting a newer version of a module + // when the module has no version. This may only be the case for target. + // Should we always panic when target has a version? + // See golang.org/issue/31491, golang.org/issue/29773. panic(fmt.Sprintf("mistake: chose version %q instead of target %+v", v, target)) // TODO: Don't panic. } list := []module.Version{target} listed := map[string]bool{target.Path: true} for i := 0; i < len(list); i++ { - m := list[i] - required, err := reqs.Required(m) - if err != nil { - return nil, err - } + n := modGraph[list[i]] + required := n.required for _, r := range required { v := min[r.Path] if r.Path != target.Path && reqs.Max(v, r.Version) != v { diff --git a/src/cmd/go/internal/mvs/mvs_test.go b/src/cmd/go/internal/mvs/mvs_test.go index 2a27dfb288..cab4bb241b 100644 --- a/src/cmd/go/internal/mvs/mvs_test.go +++ b/src/cmd/go/internal/mvs/mvs_test.go @@ -5,6 +5,7 @@ package mvs import ( + "fmt" "reflect" "strings" "testing" @@ -446,7 +447,7 @@ func (r reqsMap) Upgrade(m module.Version) (module.Version, error) { } } if u.Path == "" { - return module.Version{}, &MissingModuleError{module.Version{Path: m.Path, Version: ""}} + return module.Version{}, fmt.Errorf("missing module: %v", module.Version{Path: m.Path}) } return u, nil } @@ -467,7 +468,7 @@ func (r reqsMap) Previous(m module.Version) (module.Version, error) { func (r reqsMap) Required(m module.Version) ([]module.Version, error) { rr, ok := r[m] if !ok { - return nil, &MissingModuleError{m} + return nil, fmt.Errorf("missing module: %v", m) } return rr, nil } diff --git a/src/cmd/go/internal/note/example_test.go b/src/cmd/go/internal/note/example_test.go new file mode 100644 index 0000000000..53554b4c23 --- /dev/null +++ b/src/cmd/go/internal/note/example_test.go @@ -0,0 +1,128 @@ +// 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 note_test + +import ( + "fmt" + "io" + "os" + + "cmd/go/internal/note" +) + +func ExampleSign() { + skey := "PRIVATE+KEY+PeterNeumann+c74f20a3+AYEKFALVFGyNhPJEMzD1QIDr+Y7hfZx09iUvxdXHKDFz" + text := "If you think cryptography is the answer to your problem,\n" + + "then you don't know what your problem is.\n" + + signer, err := note.NewSigner(skey) + if err != nil { + fmt.Println(err) + return + } + + msg, err := note.Sign(¬e.Note{Text: text}, signer) + if err != nil { + fmt.Println(err) + return + } + os.Stdout.Write(msg) + + // Output: + // If you think cryptography is the answer to your problem, + // then you don't know what your problem is. + // + // — PeterNeumann x08go/ZJkuBS9UG/SffcvIAQxVBtiFupLLr8pAcElZInNIuGUgYN1FFYC2pZSNXgKvqfqdngotpRZb6KE6RyyBwJnAM= +} + +func ExampleOpen() { + vkey := "PeterNeumann+c74f20a3+ARpc2QcUPDhMQegwxbzhKqiBfsVkmqq/LDE4izWy10TW" + msg := []byte("If you think cryptography is the answer to your problem,\n" + + "then you don't know what your problem is.\n" + + "\n" + + "— PeterNeumann x08go/ZJkuBS9UG/SffcvIAQxVBtiFupLLr8pAcElZInNIuGUgYN1FFYC2pZSNXgKvqfqdngotpRZb6KE6RyyBwJnAM=\n") + + verifier, err := note.NewVerifier(vkey) + if err != nil { + fmt.Println(err) + return + } + verifiers := note.VerifierList(verifier) + + n, err := note.Open(msg, verifiers) + if err != nil { + fmt.Println(err) + return + } + fmt.Printf("%s (%08x):\n%s", n.Sigs[0].Name, n.Sigs[0].Hash, n.Text) + + // Output: + // PeterNeumann (c74f20a3): + // If you think cryptography is the answer to your problem, + // then you don't know what your problem is. +} + +var rand = struct { + Reader io.Reader +}{ + zeroReader{}, +} + +type zeroReader struct{} + +func (zeroReader) Read(buf []byte) (int, error) { + for i := range buf { + buf[i] = 0 + } + return len(buf), nil +} + +func ExampleSign_add_signatures() { + vkey := "PeterNeumann+c74f20a3+ARpc2QcUPDhMQegwxbzhKqiBfsVkmqq/LDE4izWy10TW" + msg := []byte("If you think cryptography is the answer to your problem,\n" + + "then you don't know what your problem is.\n" + + "\n" + + "— PeterNeumann x08go/ZJkuBS9UG/SffcvIAQxVBtiFupLLr8pAcElZInNIuGUgYN1FFYC2pZSNXgKvqfqdngotpRZb6KE6RyyBwJnAM=\n") + + verifier, err := note.NewVerifier(vkey) + if err != nil { + fmt.Println(err) + return + } + verifiers := note.VerifierList(verifier) + + n, err := note.Open([]byte(msg), verifiers) + if err != nil { + fmt.Println(err) + return + } + + skey, vkey, err := note.GenerateKey(rand.Reader, "EnochRoot") + if err != nil { + fmt.Println(err) + return + } + _ = vkey // give to verifiers + + me, err := note.NewSigner(skey) + if err != nil { + fmt.Println(err) + return + } + + msg, err = note.Sign(n, me) + if err != nil { + fmt.Println(err) + return + } + os.Stdout.Write(msg) + + // Output: + // If you think cryptography is the answer to your problem, + // then you don't know what your problem is. + // + // — PeterNeumann x08go/ZJkuBS9UG/SffcvIAQxVBtiFupLLr8pAcElZInNIuGUgYN1FFYC2pZSNXgKvqfqdngotpRZb6KE6RyyBwJnAM= + // — EnochRoot rwz+eBzmZa0SO3NbfRGzPCpDckykFXSdeX+MNtCOXm2/5n2tiOHp+vAF1aGrQ5ovTG01oOTGwnWLox33WWd1RvMc+QQ= +} diff --git a/src/cmd/go/internal/note/note.go b/src/cmd/go/internal/note/note.go new file mode 100644 index 0000000000..f770da24b3 --- /dev/null +++ b/src/cmd/go/internal/note/note.go @@ -0,0 +1,683 @@ +// 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 note defines the notes signed by the Go module database server. +// +// This package is part of a DRAFT of what the Go module database server will look like. +// Do not assume the details here are final! +// +// A note is text signed by one or more server keys. +// The text should be ignored unless the note is signed by +// a trusted server key and the signature has been verified +// using the server's public key. +// +// A server's public key is identified by a name, typically the "host[/path]" +// giving the base URL of the server's transparency log. +// The syntactic restrictions on a name are that it be non-empty, +// well-formed UTF-8 containing neither Unicode spaces nor plus (U+002B). +// +// A Go module database server signs texts using public key cryptography. +// A given server may have multiple public keys, each +// identified by the first 32 bits of the SHA-256 hash of +// the concatenation of the server name, a newline, and +// the encoded public key. +// +// Verifying Notes +// +// A Verifier allows verification of signatures by one server public key. +// It can report the name of the server and the uint32 hash of the key, +// and it can verify a purported signature by that key. +// +// The standard implementation of a Verifier is constructed +// by NewVerifier starting from a verifier key, which is a +// plain text string of the form "++". +// +// A Verifiers allows looking up a Verifier by the combination +// of server name and key hash. +// +// The standard implementation of a Verifiers is constructed +// by VerifierList from a list of known verifiers. +// +// A Note represents a text with one or more signatures. +// An implementation can reject a note with too many signatures +// (for example, more than 100 signatures). +// +// A Signature represents a signature on a note, verified or not. +// +// The Open function takes as input a signed message +// and a set of known verifiers. It decodes and verifies +// the message signatures and returns a Note structure +// containing the message text and (verified or unverified) signatures. +// +// Signing Notes +// +// A Signer allows signing a text with a given key. +// It can report the name of the server and the hash of the key +// and can sign a raw text using that key. +// +// The standard implementation of a Signer is constructed +// by NewSigner starting from an encoded signer key, which is a +// plain text string of the form "PRIVATE+KEY+++". +// Anyone with an encoded signer key can sign messages using that key, +// so it must be kept secret. The encoding begins with the literal text +// "PRIVATE+KEY" to avoid confusion with the public server key. +// +// The Sign function takes as input a Note and a list of Signers +// and returns an encoded, signed message. +// +// Signed Note Format +// +// A signed note consists of a text ending in newline (U+000A), +// followed by a blank line (only a newline), +// followed by one or more signature lines of this form: +// em dash (U+2014), space (U+0020), +// server name, space, base64-encoded signature, newline. +// +// Signed notes must be valid UTF-8 and must not contain any +// ASCII control characters (those below U+0020) other than newline. +// +// A signature is a base64 encoding of 4+n bytes. +// +// The first four bytes in the signature are the uint32 key hash +// stored in big-endian order, which is to say they are the first +// four bytes of the truncated SHA-256 used to derive the key hash +// in the first place. +// +// The remaining n bytes are the result of using the specified key +// to sign the note text (including the final newline but not the +// separating blank line). +// +// Generating Keys +// +// There is only one key type, Ed25519 with algorithm identifier 1. +// New key types may be introduced in the future as needed, +// although doing so will require deploying the new algorithms to all clients +// before starting to depend on them for signatures. +// +// The GenerateKey function generates and returns a new signer +// and corresponding verifier. +// +// Example +// +// Here is a well-formed signed note: +// +// If you think cryptography is the answer to your problem, +// then you don't know what your problem is. +// +// — PeterNeumann x08go/ZJkuBS9UG/SffcvIAQxVBtiFupLLr8pAcElZInNIuGUgYN1FFYC2pZSNXgKvqfqdngotpRZb6KE6RyyBwJnAM= +// +// It can be constructed and displayed using: +// +// skey := "PRIVATE+KEY+PeterNeumann+c74f20a3+AYEKFALVFGyNhPJEMzD1QIDr+Y7hfZx09iUvxdXHKDFz" +// text := "If you think cryptography is the answer to your problem,\n" + +// "then you don't know what your problem is.\n" +// +// signer, err := note.NewSigner(skey) +// if err != nil { +// log.Fatal(err) +// } +// +// msg, err := note.Sign(¬e.Note{Text: text}, signer) +// if err != nil { +// log.Fatal(err) +// } +// os.Stdout.Write(msg) +// +// The note's text is two lines, including the final newline, +// and the text is purportedly signed by a server named +// "PeterNeumann". (Although server names are canonically +// base URLs, the only syntactic requirement is that they +// not contain spaces or newlines). +// +// If Open is given access to a Verifiers including the +// Verifier for this key, then it will succeed at verifiying +// the encoded message and returning the parsed Note: +// +// vkey := "PeterNeumann+c74f20a3+ARpc2QcUPDhMQegwxbzhKqiBfsVkmqq/LDE4izWy10TW" +// msg := []byte("If you think cryptography is the answer to your problem,\n" + +// "then you don't know what your problem is.\n" + +// "\n" + +// "— PeterNeumann x08go/ZJkuBS9UG/SffcvIAQxVBtiFupLLr8pAcElZInNIuGUgYN1FFYC2pZSNXgKvqfqdngotpRZb6KE6RyyBwJnAM=\n") +// +// verifier, err := note.NewVerifier(vkey) +// if err != nil { +// log.Fatal(err) +// } +// verifiers := note.VerifierList(verifier) +// +// n, err := note.Open([]byte(msg), verifiers) +// if err != nil { +// log.Fatal(err) +// } +// fmt.Printf("%s (%08x):\n%s", n.Sigs[0].Name, n.Sigs[0].Hash, n.Text) +// +// You can add your own signature to this message by re-signing the note: +// +// skey, vkey, err := note.GenerateKey(rand.Reader, "EnochRoot") +// if err != nil { +// log.Fatal(err) +// } +// _ = vkey // give to verifiers +// +// me, err := note.NewSigner(skey) +// if err != nil { +// log.Fatal(err) +// } +// +// msg, err := note.Sign(n, me) +// if err != nil { +// log.Fatal(err) +// } +// os.Stdout.Write(msg) +// +// This will print a doubly-signed message, like: +// +// If you think cryptography is the answer to your problem, +// then you don't know what your problem is. +// +// — PeterNeumann x08go/ZJkuBS9UG/SffcvIAQxVBtiFupLLr8pAcElZInNIuGUgYN1FFYC2pZSNXgKvqfqdngotpRZb6KE6RyyBwJnAM= +// — EnochRoot rwz+eBzmZa0SO3NbfRGzPCpDckykFXSdeX+MNtCOXm2/5n2tiOHp+vAF1aGrQ5ovTG01oOTGwnWLox33WWd1RvMc+QQ= +// +package note + +import ( + "bytes" + "crypto/ed25519" + "crypto/sha256" + "encoding/base64" + "encoding/binary" + "errors" + "fmt" + "io" + "strconv" + "strings" + "unicode" + "unicode/utf8" +) + +// A Verifier verifies messages signed with a specific key. +type Verifier interface { + // Name returns the server name associated with the key. + Name() string + + // KeyHash returns the key hash. + KeyHash() uint32 + + // Verify reports whether sig is a valid signature of msg. + Verify(msg, sig []byte) bool +} + +// A Signer signs messages using a specific key. +type Signer interface { + // Name returns the server name associated with the key. + Name() string + + // KeyHash returns the key hash. + KeyHash() uint32 + + // Sign returns a signature for the given message. + Sign(msg []byte) ([]byte, error) +} + +// keyHash computes the key hash for the given server name and encoded public key. +func keyHash(name string, key []byte) uint32 { + h := sha256.New() + h.Write([]byte(name)) + h.Write([]byte("\n")) + h.Write(key) + sum := h.Sum(nil) + return binary.BigEndian.Uint32(sum) +} + +var ( + errVerifierID = errors.New("malformed verifier id") + errVerifierAlg = errors.New("unknown verifier algorithm") + errVerifierHash = errors.New("invalid verifier hash") +) + +const ( + algEd25519 = 1 +) + +// isValidName reports whether name is valid. +// It must be non-empty and not have any Unicode spaces or pluses. +func isValidName(name string) bool { + return name != "" && utf8.ValidString(name) && strings.IndexFunc(name, unicode.IsSpace) < 0 && !strings.Contains(name, "+") +} + +// NewVerifier construct a new Verifier from an encoded verifier key. +func NewVerifier(vkey string) (Verifier, error) { + name, vkey := chop(vkey, "+") + hash16, key64 := chop(vkey, "+") + hash, err1 := strconv.ParseUint(hash16, 16, 32) + key, err2 := base64.StdEncoding.DecodeString(key64) + if len(hash16) != 8 || err1 != nil || err2 != nil || !isValidName(name) || len(key) == 0 { + return nil, errVerifierID + } + if uint32(hash) != keyHash(name, key) { + return nil, errVerifierHash + } + + v := &verifier{ + name: name, + hash: uint32(hash), + } + + alg, key := key[0], key[1:] + switch alg { + default: + return nil, errVerifierAlg + + case algEd25519: + if len(key) != 32 { + return nil, errVerifierID + } + v.verify = func(msg, sig []byte) bool { + return ed25519.Verify(key, msg, sig) + } + } + + return v, nil +} + +// chop chops s at the first instance of sep, if any, +// and returns the text before and after sep. +// If sep is not present, chop returns before is s and after is empty. +func chop(s, sep string) (before, after string) { + i := strings.Index(s, sep) + if i < 0 { + return s, "" + } + return s[:i], s[i+len(sep):] +} + +// verifier is a trivial Verifier implementation. +type verifier struct { + name string + hash uint32 + verify func([]byte, []byte) bool +} + +func (v *verifier) Name() string { return v.name } +func (v *verifier) KeyHash() uint32 { return v.hash } +func (v *verifier) Verify(msg, sig []byte) bool { return v.verify(msg, sig) } + +// NewSigner constructs a new Signer from an encoded signer key. +func NewSigner(skey string) (Signer, error) { + priv1, skey := chop(skey, "+") + priv2, skey := chop(skey, "+") + name, skey := chop(skey, "+") + hash16, key64 := chop(skey, "+") + hash, err1 := strconv.ParseUint(hash16, 16, 32) + key, err2 := base64.StdEncoding.DecodeString(key64) + if priv1 != "PRIVATE" || priv2 != "KEY" || len(hash16) != 8 || err1 != nil || err2 != nil || !isValidName(name) || len(key) == 0 { + return nil, errSignerID + } + + // Note: hash is the hash of the public key and we have the private key. + // Must verify hash after deriving public key. + + s := &signer{ + name: name, + hash: uint32(hash), + } + + var pubkey []byte + + alg, key := key[0], key[1:] + switch alg { + default: + return nil, errSignerAlg + + case algEd25519: + if len(key) != 32 { + return nil, errSignerID + } + key = ed25519.NewKeyFromSeed(key) + pubkey = append([]byte{algEd25519}, key[32:]...) + s.sign = func(msg []byte) ([]byte, error) { + return ed25519.Sign(key, msg), nil + } + } + + if uint32(hash) != keyHash(name, pubkey) { + return nil, errSignerHash + } + + return s, nil +} + +var ( + errSignerID = errors.New("malformed verifier id") + errSignerAlg = errors.New("unknown verifier algorithm") + errSignerHash = errors.New("invalid verifier hash") +) + +// signer is a trivial Signer implementation. +type signer struct { + name string + hash uint32 + sign func([]byte) ([]byte, error) +} + +func (s *signer) Name() string { return s.name } +func (s *signer) KeyHash() uint32 { return s.hash } +func (s *signer) Sign(msg []byte) ([]byte, error) { return s.sign(msg) } + +// GenerateKey generates a signer and verifier key pair for a named server. +// The signer key skey is private and must be kept secret. +func GenerateKey(rand io.Reader, name string) (skey, vkey string, err error) { + pub, priv, err := ed25519.GenerateKey(rand) + if err != nil { + return "", "", err + } + pubkey := append([]byte{algEd25519}, pub...) + privkey := append([]byte{algEd25519}, priv.Seed()...) + h := keyHash(name, pubkey) + + skey = fmt.Sprintf("PRIVATE+KEY+%s+%08x+%s", name, h, base64.StdEncoding.EncodeToString(privkey)) + vkey = fmt.Sprintf("%s+%08x+%s", name, h, base64.StdEncoding.EncodeToString(pubkey)) + return skey, vkey, nil +} + +// NewEd25519VerifierKey returns an encoded verifier key using the given name +// and Ed25519 public key. +func NewEd25519VerifierKey(name string, key ed25519.PublicKey) (string, error) { + if len(key) != ed25519.PublicKeySize { + return "", fmt.Errorf("invalid public key size %d, expected %d", len(key), ed25519.PublicKeySize) + } + + pubkey := append([]byte{algEd25519}, key...) + hash := keyHash(name, pubkey) + + b64Key := base64.StdEncoding.EncodeToString(pubkey) + return fmt.Sprintf("%s+%08x+%s", name, hash, b64Key), nil +} + +// A Verifiers is a collection of known verifier keys. +type Verifiers interface { + // Verifier returns the Verifier associated with the key + // identified by the name and hash. + // If the name, hash pair is unknown, Verifier should return + // an UnknownVerifierError. + Verifier(name string, hash uint32) (Verifier, error) +} + +// An UnknownVerifierError indicates that the given key is not known. +// The Open function records signatures without associated verifiers as +// unverified signatures. +type UnknownVerifierError struct { + Name string + KeyHash uint32 +} + +func (e *UnknownVerifierError) Error() string { + return fmt.Sprintf("unknown key %s+%08x", e.Name, e.KeyHash) +} + +// An ambiguousVerifierError indicates that the given name and hash +// match multiple keys passed to VerifierList. +// (If this happens, some malicious actor has taken control of the +// verifier list, at which point we may as well give up entirely, +// but we diagnose the problem instead.) +type ambiguousVerifierError struct { + name string + hash uint32 +} + +func (e *ambiguousVerifierError) Error() string { + return fmt.Sprintf("ambiguous key %s+%08x", e.name, e.hash) +} + +// VerifierList returns a Verifiers implementation that uses the given list of verifiers. +func VerifierList(list ...Verifier) Verifiers { + m := make(verifierMap) + for _, v := range list { + k := nameHash{v.Name(), v.KeyHash()} + m[k] = append(m[k], v) + } + return m +} + +type nameHash struct { + name string + hash uint32 +} + +type verifierMap map[nameHash][]Verifier + +func (m verifierMap) Verifier(name string, hash uint32) (Verifier, error) { + v, ok := m[nameHash{name, hash}] + if !ok { + return nil, &UnknownVerifierError{name, hash} + } + if len(v) > 1 { + return nil, &ambiguousVerifierError{name, hash} + } + return v[0], nil +} + +// A Note is a text and signatures. +type Note struct { + Text string // text of note + Sigs []Signature // verified signatures + UnverifiedSigs []Signature // unverified signatures +} + +// A Signature is a single signature found in a note. +type Signature struct { + // Name and Hash give the name and key hash + // for the key that generated the signature. + Name string + Hash uint32 + + // Base64 records the base64-encoded signature bytes. + Base64 string +} + +// An UnverifiedNoteError indicates that the note +// successfully parsed but had no verifiable signatures. +type UnverifiedNoteError struct { + Note *Note +} + +func (e *UnverifiedNoteError) Error() string { + return "note has no verifiable signatures" +} + +// An InvalidSignatureError indicates that the given key was known +// and the associated Verifier rejected the signature. +type InvalidSignatureError struct { + Name string + Hash uint32 +} + +func (e *InvalidSignatureError) Error() string { + return fmt.Sprintf("invalid signature for key %s+%08x", e.Name, e.Hash) +} + +var ( + errMalformedNote = errors.New("malformed note") + errInvalidSigner = errors.New("invalid signer") + + sigSplit = []byte("\n\n") + sigPrefix = []byte("— ") +) + +// Open opens and parses the message msg, checking signatures from the known verifiers. +// +// For each signature in the message, Open calls known.Verifier to find a verifier. +// If known.Verifier returns a verifier and the verifier accepts the signature, +// Open records the signature in the returned note's Sigs field. +// If known.Verifier returns a verifier but the verifier rejects the signature, +// Open returns an InvalidSignatureError. +// If known.Verifier returns an UnknownVerifierError, +// Open records the signature in the returned note's UnverifiedSigs field. +// If known.Verifier returns any other error, Open returns that error. +// +// If no known verifier has signed an otherwise valid note, +// Open returns an UnverifiedNoteError. +// In this case, the unverified note can be fetched from inside the error. +func Open(msg []byte, known Verifiers) (*Note, error) { + if known == nil { + // Treat nil Verifiers as empty list, to produce useful error instead of crash. + known = VerifierList() + } + + // Must have valid UTF-8 with no non-newline ASCII control characters. + for i := 0; i < len(msg); { + r, size := utf8.DecodeRune(msg[i:]) + if r < 0x20 && r != '\n' || r == utf8.RuneError && size == 1 { + return nil, errMalformedNote + } + i += size + } + + // Must end with signature block preceded by blank line. + split := bytes.LastIndex(msg, sigSplit) + if split < 0 { + return nil, errMalformedNote + } + text, sigs := msg[:split+1], msg[split+2:] + if len(sigs) == 0 || sigs[len(sigs)-1] != '\n' { + return nil, errMalformedNote + } + + n := &Note{ + Text: string(text), + } + + var buf bytes.Buffer + buf.Write(text) + + // Parse and verify signatures. + // Ignore duplicate signatures. + seen := make(map[nameHash]bool) + seenUnverified := make(map[string]bool) + numSig := 0 + for len(sigs) > 0 { + // Pull out next signature line. + // We know sigs[len(sigs)-1] == '\n', so IndexByte always finds one. + i := bytes.IndexByte(sigs, '\n') + line := sigs[:i] + sigs = sigs[i+1:] + + if !bytes.HasPrefix(line, sigPrefix) { + return nil, errMalformedNote + } + line = line[len(sigPrefix):] + name, b64 := chop(string(line), " ") + sig, err := base64.StdEncoding.DecodeString(b64) + if err != nil || !isValidName(name) || b64 == "" || len(sig) < 5 { + return nil, errMalformedNote + } + hash := binary.BigEndian.Uint32(sig[0:4]) + sig = sig[4:] + + if numSig++; numSig > 100 { + // Avoid spending forever parsing a note with many signatures. + return nil, errMalformedNote + } + + v, err := known.Verifier(name, hash) + if _, ok := err.(*UnknownVerifierError); ok { + // Drop repeated identical unverified signatures. + if seenUnverified[string(line)] { + continue + } + seenUnverified[string(line)] = true + n.UnverifiedSigs = append(n.UnverifiedSigs, Signature{Name: name, Hash: hash, Base64: b64}) + continue + } + if err != nil { + return nil, err + } + + // Drop repeated signatures by a single verifier. + if seen[nameHash{name, hash}] { + continue + } + seen[nameHash{name, hash}] = true + + ok := v.Verify(text, sig) + if !ok { + return nil, &InvalidSignatureError{name, hash} + } + + n.Sigs = append(n.Sigs, Signature{Name: name, Hash: hash, Base64: b64}) + } + + // Parsed and verified all the signatures. + if len(n.Sigs) == 0 { + return nil, &UnverifiedNoteError{n} + } + return n, nil +} + +// Sign signs the note with the given signers and returns the encoded message. +// The new signatures from signers are listed in the encoded message after +// the existing signatures already present in n.Sigs. +// If any signer uses the same key as an existing signature, +// the existing signature is elided from the output. +func Sign(n *Note, signers ...Signer) ([]byte, error) { + var buf bytes.Buffer + if !strings.HasSuffix(n.Text, "\n") { + return nil, errMalformedNote + } + buf.WriteString(n.Text) + + // Prepare signatures. + var sigs bytes.Buffer + have := make(map[nameHash]bool) + for _, s := range signers { + name := s.Name() + hash := s.KeyHash() + have[nameHash{name, hash}] = true + if !isValidName(name) { + return nil, errInvalidSigner + } + + sig, err := s.Sign(buf.Bytes()) // buf holds n.Text + if err != nil { + return nil, err + } + + var hbuf [4]byte + binary.BigEndian.PutUint32(hbuf[:], hash) + b64 := base64.StdEncoding.EncodeToString(append(hbuf[:], sig...)) + sigs.WriteString("— ") + sigs.WriteString(name) + sigs.WriteString(" ") + sigs.WriteString(b64) + sigs.WriteString("\n") + } + + buf.WriteString("\n") + + // Emit existing signatures not replaced by new ones. + for _, list := range [][]Signature{n.Sigs, n.UnverifiedSigs} { + for _, sig := range list { + name, hash := sig.Name, sig.Hash + if !isValidName(name) { + return nil, errMalformedNote + } + if have[nameHash{name, hash}] { + continue + } + // Double-check hash against base64. + raw, err := base64.StdEncoding.DecodeString(sig.Base64) + if err != nil || len(raw) < 4 || binary.BigEndian.Uint32(raw) != hash { + return nil, errMalformedNote + } + buf.WriteString("— ") + buf.WriteString(sig.Name) + buf.WriteString(" ") + buf.WriteString(sig.Base64) + buf.WriteString("\n") + } + } + buf.Write(sigs.Bytes()) + + return buf.Bytes(), nil +} diff --git a/src/cmd/go/internal/note/note_test.go b/src/cmd/go/internal/note/note_test.go new file mode 100644 index 0000000000..729324647e --- /dev/null +++ b/src/cmd/go/internal/note/note_test.go @@ -0,0 +1,472 @@ +// 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 note + +import ( + "crypto/ed25519" + "crypto/rand" + "errors" + "strings" + "testing" + "testing/iotest" +) + +func TestNewVerifier(t *testing.T) { + vkey := "PeterNeumann+c74f20a3+ARpc2QcUPDhMQegwxbzhKqiBfsVkmqq/LDE4izWy10TW" + _, err := NewVerifier(vkey) + if err != nil { + t.Fatal(err) + } + + // Check various manglings are not accepted. + badKey := func(k string) { + _, err := NewVerifier(k) + if err == nil { + t.Errorf("NewVerifier(%q) succeeded, should have failed", k) + } + } + + b := []byte(vkey) + for i := 0; i <= len(b); i++ { + for j := i + 1; j <= len(b); j++ { + if i != 0 || j != len(b) { + badKey(string(b[i:j])) + } + } + } + for i := 0; i < len(b); i++ { + b[i]++ + badKey(string(b)) + b[i]-- + } + + badKey("PeterNeumann+cc469956+ARpc2QcUPDhMQegwxbzhKqiBfsVkmqq/LDE4izWy10TWBADKEY==") // wrong length key, with adjusted key hash + badKey("PeterNeumann+173116ae+ZRpc2QcUPDhMQegwxbzhKqiBfsVkmqq/LDE4izWy10TW") // unknown algorithm, with adjusted key hash +} + +func TestNewSigner(t *testing.T) { + skey := "PRIVATE+KEY+PeterNeumann+c74f20a3+AYEKFALVFGyNhPJEMzD1QIDr+Y7hfZx09iUvxdXHKDFz" + _, err := NewSigner(skey) + if err != nil { + t.Fatal(err) + } + + // Check various manglings are not accepted. + b := []byte(skey) + for i := 0; i <= len(b); i++ { + for j := i + 1; j <= len(b); j++ { + if i == 0 && j == len(b) { + continue + } + _, err := NewSigner(string(b[i:j])) + if err == nil { + t.Errorf("NewSigner(%q) succeeded, should have failed", b[i:j]) + } + } + } + for i := 0; i < len(b); i++ { + b[i]++ + _, err := NewSigner(string(b)) + if err == nil { + t.Errorf("NewSigner(%q) succeeded, should have failed", b) + } + b[i]-- + } +} + +func testSignerAndVerifier(t *testing.T, Name string, signer Signer, verifier Verifier) { + if name := signer.Name(); name != Name { + t.Errorf("signer.Name() = %q, want %q", name, Name) + } + if name := verifier.Name(); name != Name { + t.Errorf("verifier.Name() = %q, want %q", name, Name) + } + shash := signer.KeyHash() + vhash := verifier.KeyHash() + if shash != vhash { + t.Errorf("signer.KeyHash() = %#08x != verifier.KeyHash() = %#08x", shash, vhash) + } + + msg := []byte("hi") + sig, err := signer.Sign(msg) + if err != nil { + t.Fatalf("signer.Sign: %v", err) + } + if !verifier.Verify(msg, sig) { + t.Fatalf("verifier.Verify failed on signature returned by signer.Sign") + } + sig[0]++ + if verifier.Verify(msg, sig) { + t.Fatalf("verifier.Verify succceeded on corrupt signature") + } + sig[0]-- + msg[0]++ + if verifier.Verify(msg, sig) { + t.Fatalf("verifier.Verify succceeded on corrupt message") + } +} + +func TestGenerateKey(t *testing.T) { + // Generate key pair, make sure it is all self-consistent. + const Name = "EnochRoot" + + skey, vkey, err := GenerateKey(rand.Reader, Name) + if err != nil { + t.Fatalf("GenerateKey: %v", err) + } + signer, err := NewSigner(skey) + if err != nil { + t.Fatalf("NewSigner: %v", err) + } + verifier, err := NewVerifier(vkey) + if err != nil { + t.Fatalf("NewVerifier: %v", err) + } + + testSignerAndVerifier(t, Name, signer, verifier) + + // Check that GenerateKey returns error from rand reader. + _, _, err = GenerateKey(iotest.TimeoutReader(iotest.OneByteReader(rand.Reader)), Name) + if err == nil { + t.Fatalf("GenerateKey succeeded with error-returning rand reader") + } +} + +func TestFromEd25519(t *testing.T) { + const Name = "EnochRoot" + + pub, priv, err := ed25519.GenerateKey(rand.Reader) + if err != nil { + t.Fatalf("GenerateKey: %v", err) + } + signer, err := newSignerFromEd25519Seed(Name, priv.Seed()) + if err != nil { + t.Fatalf("newSignerFromEd25519Seed: %v", err) + } + vkey, err := NewEd25519VerifierKey(Name, pub) + if err != nil { + t.Fatalf("NewEd25519VerifierKey: %v", err) + } + verifier, err := NewVerifier(vkey) + if err != nil { + t.Fatalf("NewVerifier: %v", err) + } + + testSignerAndVerifier(t, Name, signer, verifier) + + // Check that wrong key sizes return errors. + _, err = NewEd25519VerifierKey(Name, pub[:len(pub)-1]) + if err == nil { + t.Errorf("NewEd25519VerifierKey succeeded with a seed of the wrong size") + } +} + +// newSignerFromEd25519Seed constructs a new signer from a verifier name and a +// crypto/ed25519 private key seed. +func newSignerFromEd25519Seed(name string, seed []byte) (Signer, error) { + if len(seed) != ed25519.SeedSize { + return nil, errors.New("invalid seed size") + } + priv := ed25519.NewKeyFromSeed(seed) + pub := priv[32:] + + pubkey := append([]byte{algEd25519}, pub...) + hash := keyHash(name, pubkey) + + s := &signer{ + name: name, + hash: uint32(hash), + sign: func(msg []byte) ([]byte, error) { + return ed25519.Sign(priv, msg), nil + }, + } + return s, nil +} + +func TestSign(t *testing.T) { + skey := "PRIVATE+KEY+PeterNeumann+c74f20a3+AYEKFALVFGyNhPJEMzD1QIDr+Y7hfZx09iUvxdXHKDFz" + text := "If you think cryptography is the answer to your problem,\n" + + "then you don't know what your problem is.\n" + + signer, err := NewSigner(skey) + if err != nil { + t.Fatal(err) + } + + msg, err := Sign(&Note{Text: text}, signer) + if err != nil { + t.Fatal(err) + } + + want := `If you think cryptography is the answer to your problem, +then you don't know what your problem is. + +— PeterNeumann x08go/ZJkuBS9UG/SffcvIAQxVBtiFupLLr8pAcElZInNIuGUgYN1FFYC2pZSNXgKvqfqdngotpRZb6KE6RyyBwJnAM= +` + if string(msg) != want { + t.Errorf("Sign: wrong output\nhave:\n%s\nwant:\n%s", msg, want) + } + + // Check that existing signature is replaced by new one. + msg, err = Sign(&Note{Text: text, Sigs: []Signature{{Name: "PeterNeumann", Hash: 0xc74f20a3, Base64: "BADSIGN="}}}, signer) + if err != nil { + t.Fatal(err) + } + if string(msg) != want { + t.Errorf("Sign replacing signature: wrong output\nhave:\n%s\nwant:\n%s", msg, want) + } + + // Check various bad inputs. + _, err = Sign(&Note{Text: "abc"}, signer) + if err == nil || err.Error() != "malformed note" { + t.Fatalf("Sign with short text: %v, want malformed note error", err) + } + + _, err = Sign(&Note{Text: text, Sigs: []Signature{{Name: "a+b", Base64: "ABCD"}}}) + if err == nil || err.Error() != "malformed note" { + t.Fatalf("Sign with bad name: %v, want malformed note error", err) + } + + _, err = Sign(&Note{Text: text, Sigs: []Signature{{Name: "PeterNeumann", Hash: 0xc74f20a3, Base64: "BADHASH="}}}) + if err == nil || err.Error() != "malformed note" { + t.Fatalf("Sign with bad pre-filled signature: %v, want malformed note error", err) + } + + _, err = Sign(&Note{Text: text}, &badSigner{signer}) + if err == nil || err.Error() != "invalid signer" { + t.Fatalf("Sign with bad signer: %v, want invalid signer error", err) + } + + _, err = Sign(&Note{Text: text}, &errSigner{signer}) + if err != errSurprise { + t.Fatalf("Sign with failing signer: %v, want errSurprise", err) + } +} + +func TestVerifierList(t *testing.T) { + peterKey := "PeterNeumann+c74f20a3+ARpc2QcUPDhMQegwxbzhKqiBfsVkmqq/LDE4izWy10TW" + peterVerifier, err := NewVerifier(peterKey) + if err != nil { + t.Fatal(err) + } + + enochKey := "EnochRoot+af0cfe78+ATtqJ7zOtqQtYqOo0CpvDXNlMhV3HeJDpjrASKGLWdop" + enochVerifier, err := NewVerifier(enochKey) + if err != nil { + t.Fatal(err) + } + + list := VerifierList(peterVerifier, enochVerifier, enochVerifier) + v, err := list.Verifier("PeterNeumann", 0xc74f20a3) + if v != peterVerifier || err != nil { + t.Fatalf("list.Verifier(peter) = %v, %v, want %v, nil", v, err, peterVerifier) + } + v, err = list.Verifier("PeterNeumann", 0xc74f20a4) + if v != nil || err == nil || err.Error() != "unknown key PeterNeumann+c74f20a4" { + t.Fatalf("list.Verifier(peter bad hash) = %v, %v, want nil, unknown key error", v, err) + } + + v, err = list.Verifier("PeterNeuman", 0xc74f20a3) + if v != nil || err == nil || err.Error() != "unknown key PeterNeuman+c74f20a3" { + t.Fatalf("list.Verifier(peter bad name) = %v, %v, want nil, unknown key error", v, err) + } + v, err = list.Verifier("EnochRoot", 0xaf0cfe78) + if v != nil || err == nil || err.Error() != "ambiguous key EnochRoot+af0cfe78" { + t.Fatalf("list.Verifier(enoch) = %v, %v, want nil, ambiguous key error", v, err) + } +} + +type badSigner struct { + Signer +} + +func (b *badSigner) Name() string { + return "bad name" +} + +var errSurprise = errors.New("surprise!") + +type errSigner struct { + Signer +} + +func (e *errSigner) Sign([]byte) ([]byte, error) { + return nil, errSurprise +} + +func TestOpen(t *testing.T) { + peterKey := "PeterNeumann+c74f20a3+ARpc2QcUPDhMQegwxbzhKqiBfsVkmqq/LDE4izWy10TW" + peterVerifier, err := NewVerifier(peterKey) + if err != nil { + t.Fatal(err) + } + + enochKey := "EnochRoot+af0cfe78+ATtqJ7zOtqQtYqOo0CpvDXNlMhV3HeJDpjrASKGLWdop" + enochVerifier, err := NewVerifier(enochKey) + if err != nil { + t.Fatal(err) + } + + text := `If you think cryptography is the answer to your problem, +then you don't know what your problem is. +` + peterSig := "— PeterNeumann x08go/ZJkuBS9UG/SffcvIAQxVBtiFupLLr8pAcElZInNIuGUgYN1FFYC2pZSNXgKvqfqdngotpRZb6KE6RyyBwJnAM=\n" + enochSig := "— EnochRoot rwz+eBzmZa0SO3NbfRGzPCpDckykFXSdeX+MNtCOXm2/5n2tiOHp+vAF1aGrQ5ovTG01oOTGwnWLox33WWd1RvMc+QQ=\n" + + peter := Signature{"PeterNeumann", 0xc74f20a3, "x08go/ZJkuBS9UG/SffcvIAQxVBtiFupLLr8pAcElZInNIuGUgYN1FFYC2pZSNXgKvqfqdngotpRZb6KE6RyyBwJnAM="} + enoch := Signature{"EnochRoot", 0xaf0cfe78, "rwz+eBzmZa0SO3NbfRGzPCpDckykFXSdeX+MNtCOXm2/5n2tiOHp+vAF1aGrQ5ovTG01oOTGwnWLox33WWd1RvMc+QQ="} + + // Check one signature verified, one not. + n, err := Open([]byte(text+"\n"+peterSig+enochSig), VerifierList(peterVerifier)) + if err != nil { + t.Fatal(err) + } + if n.Text != text { + t.Errorf("n.Text = %q, want %q", n.Text, text) + } + if len(n.Sigs) != 1 || n.Sigs[0] != peter { + t.Errorf("n.Sigs:\nhave %v\nwant %v", n.Sigs, []Signature{peter}) + } + if len(n.UnverifiedSigs) != 1 || n.UnverifiedSigs[0] != enoch { + t.Errorf("n.UnverifiedSigs:\nhave %v\nwant %v", n.Sigs, []Signature{peter}) + } + + // Check both verified. + n, err = Open([]byte(text+"\n"+peterSig+enochSig), VerifierList(peterVerifier, enochVerifier)) + if err != nil { + t.Fatal(err) + } + if len(n.Sigs) != 2 || n.Sigs[0] != peter || n.Sigs[1] != enoch { + t.Errorf("n.Sigs:\nhave %v\nwant %v", n.Sigs, []Signature{peter, enoch}) + } + if len(n.UnverifiedSigs) != 0 { + t.Errorf("n.UnverifiedSigs:\nhave %v\nwant %v", n.Sigs, []Signature{}) + } + + // Check both unverified. + n, err = Open([]byte(text+"\n"+peterSig+enochSig), VerifierList()) + if n != nil || err == nil { + t.Fatalf("Open unverified = %v, %v, want nil, error", n, err) + } + e, ok := err.(*UnverifiedNoteError) + if !ok { + t.Fatalf("Open unverified: err is %T, want *UnverifiedNoteError", err) + } + if err.Error() != "note has no verifiable signatures" { + t.Fatalf("Open unverified: err.Error() = %q, want %q", err.Error(), "note has no verifiable signatures") + } + + n = e.Note + if n == nil { + t.Fatalf("Open unverified: missing note in UnverifiedNoteError") + } + if len(n.Sigs) != 0 { + t.Errorf("n.Sigs:\nhave %v\nwant %v", n.Sigs, []Signature{}) + } + if len(n.UnverifiedSigs) != 2 || n.UnverifiedSigs[0] != peter || n.UnverifiedSigs[1] != enoch { + t.Errorf("n.UnverifiedSigs:\nhave %v\nwant %v", n.Sigs, []Signature{peter, enoch}) + } + + // Check duplicated verifier. + _, err = Open([]byte(text+"\n"+enochSig), VerifierList(enochVerifier, peterVerifier, enochVerifier)) + if err == nil || err.Error() != "ambiguous key EnochRoot+af0cfe78" { + t.Fatalf("Open with duplicated verifier: err=%v, want ambiguous key", err) + } + + // Check unused duplicated verifier. + _, err = Open([]byte(text+"\n"+peterSig), VerifierList(enochVerifier, peterVerifier, enochVerifier)) + if err != nil { + t.Fatal(err) + } + + // Check too many signatures. + n, err = Open([]byte(text+"\n"+strings.Repeat(peterSig, 101)), VerifierList(peterVerifier)) + if n != nil || err == nil || err.Error() != "malformed note" { + t.Fatalf("Open too many verified signatures = %v, %v, want nil, malformed note error", n, err) + } + n, err = Open([]byte(text+"\n"+strings.Repeat(peterSig, 101)), VerifierList()) + if n != nil || err == nil || err.Error() != "malformed note" { + t.Fatalf("Open too many verified signatures = %v, %v, want nil, malformed note error", n, err) + } + + // Invalid signature. + n, err = Open([]byte(text+"\n"+peterSig[:60]+"ABCD"+peterSig[60:]), VerifierList(peterVerifier)) + if n != nil || err == nil || err.Error() != "invalid signature for key PeterNeumann+c74f20a3" { + t.Fatalf("Open too many verified signatures = %v, %v, want nil, invalid signature error", n, err) + } + + // Duplicated verified and unverified signatures. + enochABCD := Signature{"EnochRoot", 0xaf0cfe78, "rwz+eBzmZa0SO3NbfRGzPCpDckykFXSdeX+MNtCOXm2/5n" + "ABCD" + "2tiOHp+vAF1aGrQ5ovTG01oOTGwnWLox33WWd1RvMc+QQ="} + n, err = Open([]byte(text+"\n"+peterSig+peterSig+enochSig+enochSig+enochSig[:60]+"ABCD"+enochSig[60:]), VerifierList(peterVerifier)) + if err != nil { + t.Fatal(err) + } + if len(n.Sigs) != 1 || n.Sigs[0] != peter { + t.Errorf("n.Sigs:\nhave %v\nwant %v", n.Sigs, []Signature{peter}) + } + if len(n.UnverifiedSigs) != 2 || n.UnverifiedSigs[0] != enoch || n.UnverifiedSigs[1] != enochABCD { + t.Errorf("n.UnverifiedSigs:\nhave %v\nwant %v", n.UnverifiedSigs, []Signature{enoch, enochABCD}) + } + + // Invalid encoded message syntax. + badMsgs := []string{ + text, + text + "\n", + text + "\n" + peterSig[:len(peterSig)-1], + "\x01" + text + "\n" + peterSig, + "\xff" + text + "\n" + peterSig, + text + "\n" + "— Bad Name x08go/ZJkuBS9UG/SffcvIAQxVBtiFupLLr8pAcElZInNIuGUgYN1FFYC2pZSNXgKvqfqdngotpRZb6KE6RyyBwJnAM=", + text + "\n" + peterSig + "Unexpected line.\n", + } + for _, msg := range badMsgs { + n, err := Open([]byte(msg), VerifierList(peterVerifier)) + if n != nil || err == nil || err.Error() != "malformed note" { + t.Fatalf("Open bad msg = %v, %v, want nil, malformed note error\nmsg:\n%s", n, err, msg) + } + } +} + +func BenchmarkOpen(b *testing.B) { + vkey := "PeterNeumann+c74f20a3+ARpc2QcUPDhMQegwxbzhKqiBfsVkmqq/LDE4izWy10TW" + msg := []byte("If you think cryptography is the answer to your problem,\n" + + "then you don't know what your problem is.\n" + + "\n" + + "— PeterNeumann x08go/ZJkuBS9UG/SffcvIAQxVBtiFupLLr8pAcElZInNIuGUgYN1FFYC2pZSNXgKvqfqdngotpRZb6KE6RyyBwJnAM=\n") + + verifier, err := NewVerifier(vkey) + if err != nil { + b.Fatal(err) + } + verifiers := VerifierList(verifier) + verifiers0 := VerifierList() + + // Try with 0 signatures and 1 signature so we can tell how much each signature adds. + + b.Run("Sig0", func(b *testing.B) { + for i := 0; i < b.N; i++ { + _, err := Open(msg, verifiers0) + e, ok := err.(*UnverifiedNoteError) + if !ok { + b.Fatal("expected UnverifiedNoteError") + } + n := e.Note + if len(n.Sigs) != 0 || len(n.UnverifiedSigs) != 1 { + b.Fatal("wrong signature count") + } + } + }) + + b.Run("Sig1", func(b *testing.B) { + for i := 0; i < b.N; i++ { + n, err := Open(msg, verifiers) + if err != nil { + b.Fatal(err) + } + if len(n.Sigs) != 1 || len(n.UnverifiedSigs) != 0 { + b.Fatal("wrong signature count") + } + } + }) +} diff --git a/src/cmd/go/internal/par/work.go b/src/cmd/go/internal/par/work.go index a568c86f60..960cec6fb1 100644 --- a/src/cmd/go/internal/par/work.go +++ b/src/cmd/go/internal/par/work.go @@ -147,3 +147,44 @@ func (c *Cache) Get(key interface{}) interface{} { } return e.result } + +// Clear removes all entries in the cache. +// +// Concurrent calls to Get may return old values. Concurrent calls to Do +// may return old values or store results in entries that have been deleted. +// +// TODO(jayconrod): Delete this after the package cache clearing functions +// in internal/load have been removed. +func (c *Cache) Clear() { + c.m.Range(func(key, value interface{}) bool { + c.m.Delete(key) + return true + }) +} + +// Delete removes an entry from the map. It is safe to call Delete for an +// entry that does not exist. Delete will return quickly, even if the result +// for a key is still being computed; the computation will finish, but the +// result won't be accessible through the cache. +// +// TODO(jayconrod): Delete this after the package cache clearing functions +// in internal/load have been removed. +func (c *Cache) Delete(key interface{}) { + c.m.Delete(key) +} + +// DeleteIf calls pred for each key in the map. If pred returns true for a key, +// DeleteIf removes the corresponding entry. If the result for a key is +// still being computed, DeleteIf will remove the entry without waiting for +// the computation to finish. The result won't be accessible through the cache. +// +// TODO(jayconrod): Delete this after the package cache clearing functions +// in internal/load have been removed. +func (c *Cache) DeleteIf(pred func(key interface{}) bool) { + c.m.Range(func(key, _ interface{}) bool { + if pred(key) { + c.Delete(key) + } + return true + }) +} diff --git a/src/cmd/go/internal/renameio/error.go b/src/cmd/go/internal/renameio/error.go new file mode 100644 index 0000000000..14943e3e6e --- /dev/null +++ b/src/cmd/go/internal/renameio/error.go @@ -0,0 +1,12 @@ +// 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. + +// +build !windows + +package renameio + +// isAccessDeniedError always returns false on non-windows. +func isAccessDeniedError(err error) bool { + return false +} diff --git a/src/cmd/go/internal/renameio/error_windows.go b/src/cmd/go/internal/renameio/error_windows.go new file mode 100644 index 0000000000..30d0879e7f --- /dev/null +++ b/src/cmd/go/internal/renameio/error_windows.go @@ -0,0 +1,23 @@ +// 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 renameio + +import ( + "os" + "syscall" +) + +// isAccessDeniedError returns true if err was caused by ERROR_ACCESS_DENIED. +func isAccessDeniedError(err error) bool { + linkerr, ok := err.(*os.LinkError) + if !ok { + return false + } + errno, ok := linkerr.Err.(syscall.Errno) + if !ok { + return false + } + return errno == syscall.ERROR_ACCESS_DENIED +} diff --git a/src/cmd/go/internal/renameio/renameio.go b/src/cmd/go/internal/renameio/renameio.go index 8f59e1a577..5fe5bb7dd4 100644 --- a/src/cmd/go/internal/renameio/renameio.go +++ b/src/cmd/go/internal/renameio/renameio.go @@ -8,12 +8,14 @@ package renameio import ( "bytes" "io" - "io/ioutil" + "math/rand" "os" "path/filepath" + "strconv" + "time" ) -const patternSuffix = "*.tmp" +const patternSuffix = ".tmp" // Pattern returns a glob pattern that matches the unrenamed temporary files // created when writing to filename. @@ -26,14 +28,14 @@ func Pattern(filename string) string { // final name. // // That ensures that the final location, if it exists, is always a complete file. -func WriteFile(filename string, data []byte) (err error) { - return WriteToFile(filename, bytes.NewReader(data)) +func WriteFile(filename string, data []byte, perm os.FileMode) (err error) { + return WriteToFile(filename, bytes.NewReader(data), perm) } // WriteToFile is a variant of WriteFile that accepts the data as an io.Reader // instead of a slice. -func WriteToFile(filename string, data io.Reader) (err error) { - f, err := ioutil.TempFile(filepath.Dir(filename), filepath.Base(filename)+patternSuffix) +func WriteToFile(filename string, data io.Reader, perm os.FileMode) (err error) { + f, err := tempFile(filepath.Dir(filename), filepath.Base(filename), perm) if err != nil { return err } @@ -59,5 +61,35 @@ func WriteToFile(filename string, data io.Reader) (err error) { if err := f.Close(); err != nil { return err } - return os.Rename(f.Name(), filename) + + var start time.Time + for { + err := os.Rename(f.Name(), filename) + if err == nil || !isAccessDeniedError(err) { + return err + } + + // Windows seems to occasionally trigger spurious "Access is denied" errors + // here (see golang.org/issue/31247). We're not sure why. It's probably + // worth a little extra latency to avoid propagating the spurious errors. + if start.IsZero() { + start = time.Now() + } else if time.Since(start) >= 500*time.Millisecond { + return err + } + time.Sleep(5 * time.Millisecond) + } +} + +// tempFile creates a new temporary file with given permission bits. +func tempFile(dir, prefix string, perm os.FileMode) (f *os.File, err error) { + for i := 0; i < 10000; i++ { + name := filepath.Join(dir, prefix+strconv.Itoa(rand.Intn(1000000000))+patternSuffix) + f, err = os.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_EXCL, perm) + if os.IsExist(err) { + continue + } + break + } + return } diff --git a/src/cmd/go/internal/renameio/renameio_test.go b/src/cmd/go/internal/renameio/renameio_test.go new file mode 100644 index 0000000000..53f879803e --- /dev/null +++ b/src/cmd/go/internal/renameio/renameio_test.go @@ -0,0 +1,44 @@ +// 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 renameio writes files atomically by renaming temporary files. + +//+build !nacl,!plan9,!windows,!js + +package renameio + +import ( + "io/ioutil" + "os" + "path/filepath" + "syscall" + "testing" +) + +func TestWriteFileModeAppliesUmask(t *testing.T) { + dir, err := ioutil.TempDir("", "renameio") + if err != nil { + t.Fatalf("Failed to create temporary directory: %v", err) + } + + const mode = 0644 + const umask = 0007 + defer syscall.Umask(syscall.Umask(umask)) + + file := filepath.Join(dir, "testWrite") + err = WriteFile(file, []byte("go-build"), mode) + if err != nil { + t.Fatalf("Failed to write file: %v", err) + } + defer os.RemoveAll(dir) + + fi, err := os.Stat(file) + if err != nil { + t.Fatalf("Stat %q (looking for mode %#o): %s", file, mode, err) + } + + if fi.Mode()&os.ModePerm != 0640 { + t.Errorf("Stat %q: mode %#o want %#o", file, fi.Mode()&os.ModePerm, 0640) + } +} diff --git a/src/cmd/go/internal/run/run.go b/src/cmd/go/internal/run/run.go index feccf23b27..71da5adc93 100644 --- a/src/cmd/go/internal/run/run.go +++ b/src/cmd/go/internal/run/run.go @@ -8,6 +8,7 @@ package run import ( "fmt" "os" + "path" "strings" "cmd/go/internal/base" @@ -22,7 +23,7 @@ var CmdRun = &base.Command{ Short: "compile and run Go program", Long: ` Run compiles and runs the named main Go package. -Typically the package is specified as a list of .go source files, +Typically the package is specified as a list of .go source files from a single directory, but it may also be an import path, file system path, or pattern matching a single known package, as in 'go run .' or 'go run my/cmd'. @@ -94,10 +95,10 @@ func runRun(cmd *base.Command, args []string) { base.Fatalf("go run: no go files listed") } cmdArgs := args[i:] - if p.Error != nil { base.Fatalf("%s", p.Error) } + p.Internal.OmitDebug = true if len(p.DepsErrors) > 0 { // Since these are errors in dependencies, @@ -117,21 +118,26 @@ func runRun(cmd *base.Command, args []string) { base.Fatalf("go run: cannot run non-main package") } p.Target = "" // must build - not up to date - var src string - if len(p.GoFiles) > 0 { - src = p.GoFiles[0] - } else if len(p.CgoFiles) > 0 { - src = p.CgoFiles[0] - } else { - // this case could only happen if the provided source uses cgo - // while cgo is disabled. - hint := "" - if !cfg.BuildContext.CgoEnabled { - hint = " (cgo is disabled)" + if p.Internal.CmdlineFiles { + //set executable name if go file is given as cmd-argument + var src string + if len(p.GoFiles) > 0 { + src = p.GoFiles[0] + } else if len(p.CgoFiles) > 0 { + src = p.CgoFiles[0] + } else { + // this case could only happen if the provided source uses cgo + // while cgo is disabled. + hint := "" + if !cfg.BuildContext.CgoEnabled { + hint = " (cgo is disabled)" + } + base.Fatalf("go run: no suitable source files%s", hint) } - base.Fatalf("go run: no suitable source files%s", hint) + p.Internal.ExeName = src[:len(src)-len(".go")] + } else { + p.Internal.ExeName = path.Base(p.ImportPath) } - p.Internal.ExeName = src[:len(src)-len(".go")] // name temporary executable for first go file a1 := b.LinkAction(work.ModeBuild, work.ModeBuild, p) a := &work.Action{Mode: "go run", Func: buildRunProgram, Args: cmdArgs, Deps: []*work.Action{a1}} b.Do(a) diff --git a/src/cmd/go/internal/search/search.go b/src/cmd/go/internal/search/search.go index 0ca60e7349..0167c8d755 100644 --- a/src/cmd/go/internal/search/search.go +++ b/src/cmd/go/internal/search/search.go @@ -190,7 +190,7 @@ func MatchPackagesInFS(pattern string) *Match { if !top && cfg.ModulesEnabled { // Ignore other modules found in subdirectories. - if _, err := os.Stat(filepath.Join(path, "go.mod")); err == nil { + if fi, err := os.Stat(filepath.Join(path, "go.mod")); err == nil && !fi.IsDir() { return filepath.SkipDir } } @@ -327,14 +327,35 @@ func ImportPathsQuiet(patterns []string) []*Match { out = append(out, MatchPackages(a)) continue } - if strings.Contains(a, "...") { - if build.IsLocalImport(a) { - out = append(out, MatchPackagesInFS(a)) + + if build.IsLocalImport(a) || filepath.IsAbs(a) { + var m *Match + if strings.Contains(a, "...") { + m = MatchPackagesInFS(a) } else { - out = append(out, MatchPackages(a)) + m = &Match{Pattern: a, Literal: true, Pkgs: []string{a}} } + + // Change the file import path to a regular import path if the package + // is in GOPATH or GOROOT. We don't report errors here; LoadImport + // (or something similar) will report them later. + for i, dir := range m.Pkgs { + if !filepath.IsAbs(dir) { + dir = filepath.Join(base.Cwd, dir) + } + if bp, _ := cfg.BuildContext.ImportDir(dir, build.FindOnly); bp.ImportPath != "" && bp.ImportPath != "." { + m.Pkgs[i] = bp.ImportPath + } + } + out = append(out, m) continue } + + if strings.Contains(a, "...") { + out = append(out, MatchPackages(a)) + continue + } + out = append(out, &Match{Pattern: a, Literal: true, Pkgs: []string{a}}) } return out diff --git a/src/cmd/go/internal/str/path.go b/src/cmd/go/internal/str/path.go index a9b4d759a6..a4ffc5f131 100644 --- a/src/cmd/go/internal/str/path.go +++ b/src/cmd/go/internal/str/path.go @@ -5,6 +5,7 @@ package str import ( + "path" "path/filepath" "strings" ) @@ -49,3 +50,47 @@ func HasFilePathPrefix(s, prefix string) bool { return s[len(prefix)] == filepath.Separator && s[:len(prefix)] == prefix } } + +// GlobsMatchPath reports whether any path prefix of target +// matches one of the glob patterns (as defined by path.Match) +// in the comma-separated globs list. +// It ignores any empty or malformed patterns in the list. +func GlobsMatchPath(globs, target string) bool { + for globs != "" { + // Extract next non-empty glob in comma-separated list. + var glob string + if i := strings.Index(globs, ","); i >= 0 { + glob, globs = globs[:i], globs[i+1:] + } else { + glob, globs = globs, "" + } + if glob == "" { + continue + } + + // A glob with N+1 path elements (N slashes) needs to be matched + // against the first N+1 path elements of target, + // which end just before the N+1'th slash. + n := strings.Count(glob, "/") + prefix := target + // Walk target, counting slashes, truncating at the N+1'th slash. + for i := 0; i < len(target); i++ { + if target[i] == '/' { + if n == 0 { + prefix = target[:i] + break + } + n-- + } + } + if n > 0 { + // Not enough prefix elements. + continue + } + matched, _ := path.Match(glob, prefix) + if matched { + return true + } + } + return false +} diff --git a/src/cmd/go/internal/sumweb/cache.go b/src/cmd/go/internal/sumweb/cache.go new file mode 100644 index 0000000000..a8117a71b7 --- /dev/null +++ b/src/cmd/go/internal/sumweb/cache.go @@ -0,0 +1,59 @@ +// 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. + +// Parallel cache. +// This file is copied from cmd/go/internal/par. + +package sumweb + +import ( + "sync" + "sync/atomic" +) + +// parCache runs an action once per key and caches the result. +type parCache struct { + m sync.Map +} + +type cacheEntry struct { + done uint32 + mu sync.Mutex + result interface{} +} + +// Do calls the function f if and only if Do is being called for the first time with this key. +// No call to Do with a given key returns until the one call to f returns. +// Do returns the value returned by the one call to f. +func (c *parCache) Do(key interface{}, f func() interface{}) interface{} { + entryIface, ok := c.m.Load(key) + if !ok { + entryIface, _ = c.m.LoadOrStore(key, new(cacheEntry)) + } + e := entryIface.(*cacheEntry) + if atomic.LoadUint32(&e.done) == 0 { + e.mu.Lock() + if atomic.LoadUint32(&e.done) == 0 { + e.result = f() + atomic.StoreUint32(&e.done, 1) + } + e.mu.Unlock() + } + return e.result +} + +// Get returns the cached result associated with key. +// It returns nil if there is no such result. +// If the result for key is being computed, Get does not wait for the computation to finish. +func (c *parCache) Get(key interface{}) interface{} { + entryIface, ok := c.m.Load(key) + if !ok { + return nil + } + e := entryIface.(*cacheEntry) + if atomic.LoadUint32(&e.done) == 0 { + return nil + } + return e.result +} diff --git a/src/cmd/go/internal/sumweb/client.go b/src/cmd/go/internal/sumweb/client.go new file mode 100644 index 0000000000..6973e5ac17 --- /dev/null +++ b/src/cmd/go/internal/sumweb/client.go @@ -0,0 +1,619 @@ +// 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 sumweb + +import ( + "bytes" + "errors" + "fmt" + "strings" + "sync" + "sync/atomic" + + "cmd/go/internal/note" + "cmd/go/internal/str" + "cmd/go/internal/tlog" +) + +// A Client provides the external operations +// (file caching, HTTP fetches, and so on) +// needed to implement the HTTP client Conn. +// The methods must be safe for concurrent use by multiple goroutines. +type Client interface { + // ReadRemote reads and returns the content served at the given path + // on the remote database server. The path begins with "/lookup" or "/tile/". + // It is the implementation's responsibility to turn that path into a full URL + // and make the HTTP request. ReadRemote should return an error for + // any non-200 HTTP response status. + ReadRemote(path string) ([]byte, error) + + // ReadConfig reads and returns the content of the named configuration file. + // There are only a fixed set of configuration files. + // + // "key" returns a file containing the verifier key for the server. + // + // serverName + "/latest" returns a file containing the latest known + // signed tree from the server. It is read and written (using WriteConfig). + // To signal that the client wishes to start with an "empty" signed tree, + // ReadConfig can return a successful empty result (0 bytes of data). + ReadConfig(file string) ([]byte, error) + + // WriteConfig updates the content of the named configuration file, + // changing it from the old []byte to the new []byte. + // If the old []byte does not match the stored configuration, + // WriteConfig must return ErrWriteConflict. + // Otherwise, WriteConfig should atomically replace old with new. + WriteConfig(file string, old, new []byte) error + + // ReadCache reads and returns the content of the named cache file. + // Any returned error will be treated as equivalent to the file not existing. + // There can be arbitrarily many cache files, such as: + // serverName/lookup/pkg@version + // serverName/tile/8/1/x123/456 + ReadCache(file string) ([]byte, error) + + // WriteCache writes the named cache file. + WriteCache(file string, data []byte) + + // Log prints the given log message (such as with log.Print) + Log(msg string) + + // SecurityError prints the given security error log message. + // The Conn returns ErrSecurity from any operation that invokes SecurityError, + // but the return value is mainly for testing. In a real program, + // SecurityError should typically print the message and call log.Fatal or os.Exit. + SecurityError(msg string) +} + +// ErrWriteConflict signals a write conflict during Client.WriteConfig. +var ErrWriteConflict = errors.New("write conflict") + +// ErrSecurity is returned by Conn operations that invoke Client.SecurityError. +var ErrSecurity = errors.New("security error: misbehaving server") + +// A Conn is a client connection to a go.sum database. +// All the methods are safe for simultaneous use by multiple goroutines. +type Conn struct { + client Client // client-provided external world + + didLookup uint32 + + // one-time initialized data + initOnce sync.Once + initErr error // init error, if any + name string // name of accepted verifier + verifiers note.Verifiers // accepted verifiers (just one, but Verifiers for note.Open) + tileReader tileReader + tileHeight int + nosumdb string + + record parCache // cache of record lookup, keyed by path@vers + tileCache parCache // cache of c.readTile, keyed by tile + + latestMu sync.Mutex + latest tlog.Tree // latest known tree head + latestMsg []byte // encoded signed note for latest + + tileSavedMu sync.Mutex + tileSaved map[tlog.Tile]bool // which tiles have been saved using c.client.WriteCache already +} + +// NewConn returns a new Conn using the given Client. +func NewConn(client Client) *Conn { + return &Conn{ + client: client, + } +} + +// init initiailzes the conn (if not already initialized) +// and returns any initialization error. +func (c *Conn) init() error { + c.initOnce.Do(c.initWork) + return c.initErr +} + +// initWork does the actual initialization work. +func (c *Conn) initWork() { + defer func() { + if c.initErr != nil { + c.initErr = fmt.Errorf("initializing sumweb.Conn: %v", c.initErr) + } + }() + + c.tileReader.c = c + if c.tileHeight == 0 { + c.tileHeight = 8 + } + c.tileSaved = make(map[tlog.Tile]bool) + + vkey, err := c.client.ReadConfig("key") + if err != nil { + c.initErr = err + return + } + verifier, err := note.NewVerifier(strings.TrimSpace(string(vkey))) + if err != nil { + c.initErr = err + return + } + c.verifiers = note.VerifierList(verifier) + c.name = verifier.Name() + + data, err := c.client.ReadConfig(c.name + "/latest") + if err != nil { + c.initErr = err + return + } + if err := c.mergeLatest(data); err != nil { + c.initErr = err + return + } +} + +// SetTileHeight sets the tile height for the Conn. +// Any call to SetTileHeight must happen before the first call to Lookup. +// If SetTileHeight is not called, the Conn defaults to tile height 8. +func (c *Conn) SetTileHeight(height int) { + if atomic.LoadUint32(&c.didLookup) != 0 { + panic("SetTileHeight used after Lookup") + } + if c.tileHeight != 0 { + panic("multiple calls to SetTileHeight") + } + c.tileHeight = height +} + +// SetGONOSUMDB sets the list of comma-separated GONOSUMDB patterns for the Conn. +// For any module path matching one of the patterns, +// Lookup will return ErrGONOSUMDB. +// Any call to SetGONOSUMDB must happen before the first call to Lookup. +func (c *Conn) SetGONOSUMDB(list string) { + if atomic.LoadUint32(&c.didLookup) != 0 { + panic("SetGONOSUMDB used after Lookup") + } + if c.nosumdb != "" { + panic("multiple calls to SetGONOSUMDB") + } + c.nosumdb = list +} + +// ErrGONOSUMDB is returned by Lookup for paths that match +// a pattern listed in the GONOSUMDB list (set by SetGONOSUMDB, +// usually from the environment variable). +var ErrGONOSUMDB = errors.New("skipped (listed in GONOSUMDB)") + +func (c *Conn) skip(target string) bool { + return str.GlobsMatchPath(c.nosumdb, target) +} + +// Lookup returns the go.sum lines for the given module path and version. +// The version may end in a /go.mod suffix, in which case Lookup returns +// the go.sum lines for the module's go.mod-only hash. +func (c *Conn) Lookup(path, vers string) (lines []string, err error) { + atomic.StoreUint32(&c.didLookup, 1) + + if c.skip(path) { + return nil, ErrGONOSUMDB + } + + defer func() { + if err != nil { + err = fmt.Errorf("%s@%s: %v", path, vers, err) + } + }() + + if err := c.init(); err != nil { + return nil, err + } + + // Prepare encoded cache filename / URL. + epath, err := encodePath(path) + if err != nil { + return nil, err + } + evers, err := encodeVersion(strings.TrimSuffix(vers, "/go.mod")) + if err != nil { + return nil, err + } + file := c.name + "/lookup/" + epath + "@" + evers + remotePath := "/lookup/" + epath + "@" + evers + + // Fetch the data. + // The lookupCache avoids redundant ReadCache/GetURL operations + // (especially since go.sum lines tend to come in pairs for a given + // path and version) and also avoids having multiple of the same + // request in flight at once. + type cached struct { + data []byte + err error + } + result := c.record.Do(file, func() interface{} { + // Try the on-disk cache, or else get from web. + writeCache := false + data, err := c.client.ReadCache(file) + if err != nil { + data, err = c.client.ReadRemote(remotePath) + if err != nil { + return cached{nil, err} + } + writeCache = true + } + + // Validate the record before using it for anything. + id, text, treeMsg, err := tlog.ParseRecord(data) + if err != nil { + return cached{nil, err} + } + if err := c.mergeLatest(treeMsg); err != nil { + return cached{nil, err} + } + if err := c.checkRecord(id, text); err != nil { + return cached{nil, err} + } + + // Now that we've validated the record, + // save it to the on-disk cache (unless that's where it came from). + if writeCache { + c.client.WriteCache(file, data) + } + + return cached{data, nil} + }).(cached) + if result.err != nil { + return nil, result.err + } + + // Extract the lines for the specific version we want + // (with or without /go.mod). + prefix := path + " " + vers + " " + var hashes []string + for _, line := range strings.Split(string(result.data), "\n") { + if strings.HasPrefix(line, prefix) { + hashes = append(hashes, line) + } + } + return hashes, nil +} + +// mergeLatest merges the tree head in msg +// with the Conn's current latest tree head, +// ensuring the result is a consistent timeline. +// If the result is inconsistent, mergeLatest calls c.client.SecurityError +// with a detailed security error message and then +// (only if c.client.SecurityError does not exit the program) returns ErrSecurity. +// If the Conn's current latest tree head moves forward, +// mergeLatest updates the underlying configuration file as well, +// taking care to merge any independent updates to that configuration. +func (c *Conn) mergeLatest(msg []byte) error { + // Merge msg into our in-memory copy of the latest tree head. + when, err := c.mergeLatestMem(msg) + if err != nil { + return err + } + if when != msgFuture { + // msg matched our present or was in the past. + // No change to our present, so no update of config file. + return nil + } + + // Flush our extended timeline back out to the configuration file. + // If the configuration file has been updated in the interim, + // we need to merge any updates made there as well. + // Note that writeConfig is an atomic compare-and-swap. + for { + msg, err := c.client.ReadConfig(c.name + "/latest") + if err != nil { + return err + } + when, err := c.mergeLatestMem(msg) + if err != nil { + return err + } + if when != msgPast { + // msg matched our present or was from the future, + // and now our in-memory copy matches. + return nil + } + + // msg (== config) is in the past, so we need to update it. + c.latestMu.Lock() + latestMsg := c.latestMsg + c.latestMu.Unlock() + if err := c.client.WriteConfig(c.name+"/latest", msg, latestMsg); err != ErrWriteConflict { + // Success or a non-write-conflict error. + return err + } + } +} + +const ( + msgPast = 1 + iota + msgNow + msgFuture +) + +// mergeLatestMem is like mergeLatest but is only concerned with +// updating the in-memory copy of the latest tree head (c.latest) +// not the configuration file. +// The when result explains when msg happened relative to our +// previous idea of c.latest: +// msgPast means msg was from before c.latest, +// msgNow means msg was exactly c.latest, and +// msgFuture means msg was from after c.latest, which has now been updated. +func (c *Conn) mergeLatestMem(msg []byte) (when int, err error) { + if len(msg) == 0 { + // Accept empty msg as the unsigned, empty timeline. + c.latestMu.Lock() + latest := c.latest + c.latestMu.Unlock() + if latest.N == 0 { + return msgNow, nil + } + return msgPast, nil + } + + note, err := note.Open(msg, c.verifiers) + if err != nil { + return 0, fmt.Errorf("reading tree note: %v\nnote:\n%s", err, msg) + } + tree, err := tlog.ParseTree([]byte(note.Text)) + if err != nil { + return 0, fmt.Errorf("reading tree: %v\ntree:\n%s", err, note.Text) + } + + // Other lookups may be calling mergeLatest with other heads, + // so c.latest is changing underfoot. We don't want to hold the + // c.mu lock during tile fetches, so loop trying to update c.latest. + c.latestMu.Lock() + latest := c.latest + latestMsg := c.latestMsg + c.latestMu.Unlock() + + for { + // If the tree head looks old, check that it is on our timeline. + if tree.N <= latest.N { + if err := c.checkTrees(tree, msg, latest, latestMsg); err != nil { + return 0, err + } + if tree.N < latest.N { + return msgPast, nil + } + return msgNow, nil + } + + // The tree head looks new. Check that we are on its timeline and try to move our timeline forward. + if err := c.checkTrees(latest, latestMsg, tree, msg); err != nil { + return 0, err + } + + // Install our msg if possible. + // Otherwise we will go around again. + c.latestMu.Lock() + installed := false + if c.latest == latest { + installed = true + c.latest = tree + c.latestMsg = msg + } else { + latest = c.latest + latestMsg = c.latestMsg + } + c.latestMu.Unlock() + + if installed { + return msgFuture, nil + } + } +} + +// checkTrees checks that older (from olderNote) is contained in newer (from newerNote). +// If an error occurs, such as malformed data or a network problem, checkTrees returns that error. +// If on the other hand checkTrees finds evidence of misbehavior, it prepares a detailed +// message and calls log.Fatal. +func (c *Conn) checkTrees(older tlog.Tree, olderNote []byte, newer tlog.Tree, newerNote []byte) error { + thr := tlog.TileHashReader(newer, &c.tileReader) + h, err := tlog.TreeHash(older.N, thr) + if err != nil { + if older.N == newer.N { + return fmt.Errorf("checking tree#%d: %v", older.N, err) + } + return fmt.Errorf("checking tree#%d against tree#%d: %v", older.N, newer.N, err) + } + if h == older.Hash { + return nil + } + + // Detected a fork in the tree timeline. + // Start by reporting the inconsistent signed tree notes. + var buf bytes.Buffer + fmt.Fprintf(&buf, "SECURITY ERROR\n") + fmt.Fprintf(&buf, "go.sum database server misbehavior detected!\n\n") + indent := func(b []byte) []byte { + return bytes.Replace(b, []byte("\n"), []byte("\n\t"), -1) + } + fmt.Fprintf(&buf, "old database:\n\t%s\n", indent(olderNote)) + fmt.Fprintf(&buf, "new database:\n\t%s\n", indent(newerNote)) + + // The notes alone are not enough to prove the inconsistency. + // We also need to show that the newer note's tree hash for older.N + // does not match older.Hash. The consumer of this report could + // of course consult the server to try to verify the inconsistency, + // but we are holding all the bits we need to prove it right now, + // so we might as well print them and make the report not depend + // on the continued availability of the misbehaving server. + // Preparing this data only reuses the tiled hashes needed for + // tlog.TreeHash(older.N, thr) above, so assuming thr is caching tiles, + // there are no new access to the server here, and these operations cannot fail. + fmt.Fprintf(&buf, "proof of misbehavior:\n\t%v", h) + if p, err := tlog.ProveTree(newer.N, older.N, thr); err != nil { + fmt.Fprintf(&buf, "\tinternal error: %v\n", err) + } else if err := tlog.CheckTree(p, newer.N, newer.Hash, older.N, h); err != nil { + fmt.Fprintf(&buf, "\tinternal error: generated inconsistent proof\n") + } else { + for _, h := range p { + fmt.Fprintf(&buf, "\n\t%v", h) + } + } + c.client.SecurityError(buf.String()) + return ErrSecurity +} + +// checkRecord checks that record #id's hash matches data. +func (c *Conn) checkRecord(id int64, data []byte) error { + c.latestMu.Lock() + latest := c.latest + c.latestMu.Unlock() + + if id >= latest.N { + return fmt.Errorf("cannot validate record %d in tree of size %d", id, latest.N) + } + hashes, err := tlog.TileHashReader(latest, &c.tileReader).ReadHashes([]int64{tlog.StoredHashIndex(0, id)}) + if err != nil { + return err + } + if hashes[0] == tlog.RecordHash(data) { + return nil + } + return fmt.Errorf("cannot authenticate record data in server response") +} + +// tileReader is a *Conn wrapper that implements tlog.TileReader. +// The separate type avoids exposing the ReadTiles and SaveTiles +// methods on Conn itself. +type tileReader struct { + c *Conn +} + +func (r *tileReader) Height() int { + return r.c.tileHeight +} + +// ReadTiles reads and returns the requested tiles, +// either from the on-disk cache or the server. +func (r *tileReader) ReadTiles(tiles []tlog.Tile) ([][]byte, error) { + // Read all the tiles in parallel. + data := make([][]byte, len(tiles)) + errs := make([]error, len(tiles)) + var wg sync.WaitGroup + for i, tile := range tiles { + wg.Add(1) + go func(i int, tile tlog.Tile) { + defer wg.Done() + data[i], errs[i] = r.c.readTile(tile) + }(i, tile) + } + wg.Wait() + + for _, err := range errs { + if err != nil { + return nil, err + } + } + + return data, nil +} + +// tileCacheKey returns the cache key for the tile. +func (c *Conn) tileCacheKey(tile tlog.Tile) string { + return c.name + "/" + tile.Path() +} + +// tileRemotePath returns the remote path for the tile. +func (c *Conn) tileRemotePath(tile tlog.Tile) string { + return "/" + tile.Path() +} + +// readTile reads a single tile, either from the on-disk cache or the server. +func (c *Conn) readTile(tile tlog.Tile) ([]byte, error) { + type cached struct { + data []byte + err error + } + + result := c.tileCache.Do(tile, func() interface{} { + // Try the requested tile in on-disk cache. + data, err := c.client.ReadCache(c.tileCacheKey(tile)) + if err == nil { + c.markTileSaved(tile) + return cached{data, nil} + } + + // Try the full tile in on-disk cache (if requested tile not already full). + // We only save authenticated tiles to the on-disk cache, + // so the recreated prefix is equally authenticated. + full := tile + full.W = 1 << tile.H + if tile != full { + data, err := c.client.ReadCache(c.tileCacheKey(full)) + if err == nil { + c.markTileSaved(tile) // don't save tile later; we already have full + return cached{data[:len(data)/full.W*tile.W], nil} + } + } + + // Try requested tile from server. + data, err = c.client.ReadRemote(c.tileRemotePath(tile)) + if err == nil { + return cached{data, nil} + } + + // Try full tile on server. + // If the partial tile does not exist, it should be because + // the tile has been completed and only the complete one + // is available. + if tile != full { + data, err := c.client.ReadRemote(c.tileRemotePath(full)) + if err == nil { + // Note: We could save the full tile in the on-disk cache here, + // but we don't know if it is valid yet, and we will only find out + // about the partial data, not the full data. So let SaveTiles + // save the partial tile, and we'll just refetch the full tile later + // once we can validate more (or all) of it. + return cached{data[:len(data)/full.W*tile.W], nil} + } + } + + // Nothing worked. + // Return the error from the server fetch for the requested (not full) tile. + return cached{nil, err} + }).(cached) + + return result.data, result.err +} + +// markTileSaved records that tile is already present in the on-disk cache, +// so that a future SaveTiles for that tile can be ignored. +func (c *Conn) markTileSaved(tile tlog.Tile) { + c.tileSavedMu.Lock() + c.tileSaved[tile] = true + c.tileSavedMu.Unlock() +} + +// SaveTiles saves the now validated tiles. +func (r *tileReader) SaveTiles(tiles []tlog.Tile, data [][]byte) { + c := r.c + + // Determine which tiles need saving. + // (Tiles that came from the cache need not be saved back.) + save := make([]bool, len(tiles)) + c.tileSavedMu.Lock() + for i, tile := range tiles { + if !c.tileSaved[tile] { + save[i] = true + c.tileSaved[tile] = true + } + } + c.tileSavedMu.Unlock() + + for i, tile := range tiles { + if save[i] { + // If WriteCache fails here (out of disk space? i/o error?), + // c.tileSaved[tile] is still true and we will not try to write it again. + // Next time we run maybe we'll redownload it again and be + // more successful. + c.client.WriteCache(c.name+"/"+tile.Path(), data[i]) + } + } +} diff --git a/src/cmd/go/internal/sumweb/client_test.go b/src/cmd/go/internal/sumweb/client_test.go new file mode 100644 index 0000000000..83a182adc5 --- /dev/null +++ b/src/cmd/go/internal/sumweb/client_test.go @@ -0,0 +1,460 @@ +// 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 sumweb + +import ( + "bytes" + "fmt" + "strings" + "sync" + "testing" + + "cmd/go/internal/note" + "cmd/go/internal/tlog" +) + +const ( + testName = "localhost.localdev/sumdb" + testVerifierKey = "localhost.localdev/sumdb+00000c67+AcTrnkbUA+TU4heY3hkjiSES/DSQniBqIeQ/YppAUtK6" + testSignerKey = "PRIVATE+KEY+localhost.localdev/sumdb+00000c67+AXu6+oaVaOYuQOFrf1V59JK1owcFlJcHwwXHDfDGxSPk" +) + +func TestConnLookup(t *testing.T) { + tc := newTestClient(t) + tc.mustHaveLatest(1) + + // Basic lookup. + tc.mustLookup("rsc.io/sampler", "v1.3.0", "rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4=") + tc.mustHaveLatest(3) + + // Everything should now be cached, both for the original package and its /go.mod. + tc.getOK = false + tc.mustLookup("rsc.io/sampler", "v1.3.0", "rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4=") + tc.mustLookup("rsc.io/sampler", "v1.3.0/go.mod", "rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=") + tc.mustHaveLatest(3) + tc.getOK = true + tc.getTileOK = false // the cache has what we need + + // Lookup with multiple returned lines. + tc.mustLookup("rsc.io/quote", "v1.5.2", "rsc.io/quote v1.5.2 h1:w5fcysjrx7yqtD/aO+QwRjYZOKnaM9Uh2b40tElTs3Y=\nrsc.io/quote v1.5.2 h2:xyzzy") + tc.mustHaveLatest(3) + + // Lookup with need for !-encoding. + // rsc.io/Quote is the only record written after rsc.io/samper, + // so it is the only one that should need more tiles. + tc.getTileOK = true + tc.mustLookup("rsc.io/Quote", "v1.5.2", "rsc.io/Quote v1.5.2 h1:uppercase!=") + tc.mustHaveLatest(4) +} + +func TestConnBadTiles(t *testing.T) { + tc := newTestClient(t) + + flipBits := func() { + for url, data := range tc.remote { + if strings.Contains(url, "/tile/") { + for i := range data { + data[i] ^= 0x80 + } + } + } + } + + // Bad tiles in initial download. + tc.mustHaveLatest(1) + flipBits() + _, err := tc.conn.Lookup("rsc.io/sampler", "v1.3.0") + tc.mustError(err, "rsc.io/sampler@v1.3.0: initializing sumweb.Conn: checking tree#1: downloaded inconsistent tile") + flipBits() + tc.newConn() + tc.mustLookup("rsc.io/sampler", "v1.3.0", "rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4=") + + // Bad tiles after initial download. + flipBits() + _, err = tc.conn.Lookup("rsc.io/Quote", "v1.5.2") + tc.mustError(err, "rsc.io/Quote@v1.5.2: checking tree#3 against tree#4: downloaded inconsistent tile") + flipBits() + tc.newConn() + tc.mustLookup("rsc.io/Quote", "v1.5.2", "rsc.io/Quote v1.5.2 h1:uppercase!=") + + // Bad starting tree hash looks like bad tiles. + tc.newConn() + text := tlog.FormatTree(tlog.Tree{N: 1, Hash: tlog.Hash{}}) + data, err := note.Sign(¬e.Note{Text: string(text)}, tc.signer) + if err != nil { + tc.t.Fatal(err) + } + tc.config[testName+"/latest"] = data + _, err = tc.conn.Lookup("rsc.io/sampler", "v1.3.0") + tc.mustError(err, "rsc.io/sampler@v1.3.0: initializing sumweb.Conn: checking tree#1: downloaded inconsistent tile") +} + +func TestConnFork(t *testing.T) { + tc := newTestClient(t) + tc2 := tc.fork() + + tc.addRecord("rsc.io/pkg1@v1.5.2", `rsc.io/pkg1 v1.5.2 h1:hash!= +`) + tc.addRecord("rsc.io/pkg1@v1.5.4", `rsc.io/pkg1 v1.5.4 h1:hash!= +`) + tc.mustLookup("rsc.io/pkg1", "v1.5.2", "rsc.io/pkg1 v1.5.2 h1:hash!=") + + tc2.addRecord("rsc.io/pkg1@v1.5.3", `rsc.io/pkg1 v1.5.3 h1:hash!= +`) + tc2.addRecord("rsc.io/pkg1@v1.5.4", `rsc.io/pkg1 v1.5.4 h1:hash!= +`) + tc2.mustLookup("rsc.io/pkg1", "v1.5.4", "rsc.io/pkg1 v1.5.4 h1:hash!=") + + key := "/lookup/rsc.io/pkg1@v1.5.2" + tc2.remote[key] = tc.remote[key] + _, err := tc2.conn.Lookup("rsc.io/pkg1", "v1.5.2") + tc2.mustError(err, ErrSecurity.Error()) + + /* + SECURITY ERROR + go.sum database server misbehavior detected! + + old database: + go.sum database tree! + 5 + nWzN20+pwMt62p7jbv1/NlN95ePTlHijabv5zO/s36w= + + — localhost.localdev/sumdb AAAMZ5/2FVAdMH58kmnz/0h299pwyskEbzDzoa2/YaPdhvLya4YWDFQQxu2TQb5GpwAH4NdWnTwuhILafisyf3CNbgg= + + new database: + go.sum database tree + 6 + wc4SkQt52o5W2nQ8To2ARs+mWuUJjss+sdleoiqxMmM= + + — localhost.localdev/sumdb AAAMZ6oRNswlEZ6ZZhxrCvgl1MBy+nusq4JU+TG6Fe2NihWLqOzb+y2c2kzRLoCr4tvw9o36ucQEnhc20e4nA4Qc/wc= + + proof of misbehavior: + T7i+H/8ER4nXOiw4Bj0koZOkGjkxoNvlI34GpvhHhQg= + Nsuejv72de9hYNM5bqFv8rv3gm3zJQwv/DT/WNbLDLA= + mOmqqZ1aI/lzS94oq/JSbj7pD8Rv9S+xDyi12BtVSHo= + /7Aw5jVSMM9sFjQhaMg+iiDYPMk6decH7QLOGrL9Lx0= + */ + + wants := []string{ + "SECURITY ERROR", + "go.sum database server misbehavior detected!", + "old database:\n\tgo.sum database tree\n\t5\n", + "— localhost.localdev/sumdb AAAMZ5/2FVAd", + "new database:\n\tgo.sum database tree\n\t6\n", + "— localhost.localdev/sumdb AAAMZ6oRNswl", + "proof of misbehavior:\n\tT7i+H/8ER4nXOiw4Bj0k", + } + text := tc2.security.String() + for _, want := range wants { + if !strings.Contains(text, want) { + t.Fatalf("cannot find %q in security text:\n%s", want, text) + } + } +} + +func TestConnGONOSUMDB(t *testing.T) { + tc := newTestClient(t) + tc.conn.SetGONOSUMDB("p,*/q") + tc.conn.Lookup("rsc.io/sampler", "v1.3.0") // initialize before we turn off network + tc.getOK = false + + ok := []string{ + "abc", + "a/p", + "pq", + "q", + "n/o/p/q", + } + skip := []string{ + "p", + "p/x", + "x/q", + "x/q/z", + } + + for _, path := range ok { + _, err := tc.conn.Lookup(path, "v1.0.0") + if err == ErrGONOSUMDB { + t.Errorf("Lookup(%q): ErrGONOSUMDB, wanted failed actual lookup", path) + } + } + for _, path := range skip { + _, err := tc.conn.Lookup(path, "v1.0.0") + if err != ErrGONOSUMDB { + t.Errorf("Lookup(%q): %v, wanted ErrGONOSUMDB", path, err) + } + } +} + +// A testClient is a self-contained client-side testing environment. +type testClient struct { + t *testing.T // active test + conn *Conn // conn being tested + tileHeight int // tile height to use (default 2) + getOK bool // should tc.GetURL succeed? + getTileOK bool // should tc.GetURL of tiles succeed? + treeSize int64 + hashes []tlog.Hash + remote map[string][]byte + signer note.Signer + + // mu protects config, cache, log, security + // during concurrent use of the exported methods + // by the conn itself (testClient is the Conn's Client, + // and the Client methods can both read and write these fields). + // Unexported methods invoked directly by the test + // (for example, addRecord) need not hold the mutex: + // for proper test execution those methods should only + // be called when the Conn is idle and not using its Client. + // Not holding the mutex in those methods ensures + // that if a mistake is made, go test -race will report it. + // (Holding the mutex would eliminate the race report but + // not the underlying problem.) + // Similarly, the get map is not protected by the mutex, + // because the Client methods only read it. + mu sync.Mutex // prot + config map[string][]byte + cache map[string][]byte + security bytes.Buffer +} + +// newTestClient returns a new testClient that will call t.Fatal on error +// and has a few records already available on the remote server. +func newTestClient(t *testing.T) *testClient { + tc := &testClient{ + t: t, + tileHeight: 2, + getOK: true, + getTileOK: true, + config: make(map[string][]byte), + cache: make(map[string][]byte), + remote: make(map[string][]byte), + } + + tc.config["key"] = []byte(testVerifierKey + "\n") + var err error + tc.signer, err = note.NewSigner(testSignerKey) + if err != nil { + t.Fatal(err) + } + + tc.newConn() + + tc.addRecord("rsc.io/quote@v1.5.2", `rsc.io/quote v1.5.2 h1:w5fcysjrx7yqtD/aO+QwRjYZOKnaM9Uh2b40tElTs3Y= +rsc.io/quote v1.5.2/go.mod h1:LzX7hefJvL54yjefDEDHNONDjII0t9xZLPXsUe+TKr0= +rsc.io/quote v1.5.2 h2:xyzzy +`) + + tc.addRecord("golang.org/x/text@v0.0.0-20170915032832-14c0d48ead0c", `golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c h1:qgOY6WgZOaTkIIMiVjBQcw93ERBE4m30iBm00nkL0i8= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +`) + tc.addRecord("rsc.io/sampler@v1.3.0", `rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +`) + tc.config[testName+"/latest"] = tc.signTree(1) + + tc.addRecord("rsc.io/!quote@v1.5.2", `rsc.io/Quote v1.5.2 h1:uppercase!= +`) + return tc +} + +// newConn resets the Conn associated with tc. +// This clears any in-memory cache from the Conn +// but not tc's on-disk cache. +func (tc *testClient) newConn() { + tc.conn = NewConn(tc) + tc.conn.SetTileHeight(tc.tileHeight) +} + +// mustLookup does a lookup for path@vers and checks that the lines that come back match want. +func (tc *testClient) mustLookup(path, vers, want string) { + tc.t.Helper() + lines, err := tc.conn.Lookup(path, vers) + if err != nil { + tc.t.Fatal(err) + } + if strings.Join(lines, "\n") != want { + tc.t.Fatalf("Lookup(%q, %q):\n\t%s\nwant:\n\t%s", path, vers, strings.Join(lines, "\n\t"), strings.Replace(want, "\n", "\n\t", -1)) + } +} + +// mustHaveLatest checks that the on-disk configuration +// for latest is a tree of size n. +func (tc *testClient) mustHaveLatest(n int64) { + tc.t.Helper() + + latest := tc.config[testName+"/latest"] + lines := strings.Split(string(latest), "\n") + if len(lines) < 2 || lines[1] != fmt.Sprint(n) { + tc.t.Fatalf("/latest should have tree %d, but has:\n%s", n, latest) + } +} + +// mustError checks that err's error string contains the text. +func (tc *testClient) mustError(err error, text string) { + tc.t.Helper() + if err == nil || !strings.Contains(err.Error(), text) { + tc.t.Fatalf("err = %v, want %q", err, text) + } +} + +// fork returns a copy of tc. +// Changes made to the new copy or to tc are not reflected in the other. +func (tc *testClient) fork() *testClient { + tc2 := &testClient{ + t: tc.t, + getOK: tc.getOK, + getTileOK: tc.getTileOK, + tileHeight: tc.tileHeight, + treeSize: tc.treeSize, + hashes: append([]tlog.Hash{}, tc.hashes...), + signer: tc.signer, + config: copyMap(tc.config), + cache: copyMap(tc.cache), + remote: copyMap(tc.remote), + } + tc2.newConn() + return tc2 +} + +func copyMap(m map[string][]byte) map[string][]byte { + m2 := make(map[string][]byte) + for k, v := range m { + m2[k] = v + } + return m2 +} + +// ReadHashes is tc's implementation of tlog.HashReader, for use with +// tlog.TreeHash and so on. +func (tc *testClient) ReadHashes(indexes []int64) ([]tlog.Hash, error) { + var list []tlog.Hash + for _, id := range indexes { + list = append(list, tc.hashes[id]) + } + return list, nil +} + +// addRecord adds a log record using the given (!-encoded) key and data. +func (tc *testClient) addRecord(key, data string) { + tc.t.Helper() + + // Create record, add hashes to log tree. + id := tc.treeSize + tc.treeSize++ + rec, err := tlog.FormatRecord(id, []byte(data)) + if err != nil { + tc.t.Fatal(err) + } + hashes, err := tlog.StoredHashesForRecordHash(id, tlog.RecordHash([]byte(data)), tc) + if err != nil { + tc.t.Fatal(err) + } + tc.hashes = append(tc.hashes, hashes...) + + // Create lookup result. + tc.remote["/lookup/"+key] = append(rec, tc.signTree(tc.treeSize)...) + + // Create new tiles. + tiles := tlog.NewTiles(tc.tileHeight, id, tc.treeSize) + for _, tile := range tiles { + data, err := tlog.ReadTileData(tile, tc) + if err != nil { + tc.t.Fatal(err) + } + tc.remote["/"+tile.Path()] = data + // TODO delete old partial tiles + } +} + +// signTree returns the signed head for the tree of the given size. +func (tc *testClient) signTree(size int64) []byte { + h, err := tlog.TreeHash(size, tc) + if err != nil { + tc.t.Fatal(err) + } + text := tlog.FormatTree(tlog.Tree{N: size, Hash: h}) + data, err := note.Sign(¬e.Note{Text: string(text)}, tc.signer) + if err != nil { + tc.t.Fatal(err) + } + return data +} + +// ReadRemote is for tc's implementation of Client. +func (tc *testClient) ReadRemote(path string) ([]byte, error) { + // No mutex here because only the Client should be running + // and the Client cannot change tc.get. + if !tc.getOK { + return nil, fmt.Errorf("disallowed remote read %s", path) + } + if strings.Contains(path, "/tile/") && !tc.getTileOK { + return nil, fmt.Errorf("disallowed remote tile read %s", path) + } + + data, ok := tc.remote[path] + if !ok { + return nil, fmt.Errorf("no remote path %s", path) + } + return data, nil +} + +// ReadConfig is for tc's implementation of Client. +func (tc *testClient) ReadConfig(file string) ([]byte, error) { + tc.mu.Lock() + defer tc.mu.Unlock() + + data, ok := tc.config[file] + if !ok { + return nil, fmt.Errorf("no config %s", file) + } + return data, nil +} + +// WriteConfig is for tc's implementation of Client. +func (tc *testClient) WriteConfig(file string, old, new []byte) error { + tc.mu.Lock() + defer tc.mu.Unlock() + + data := tc.config[file] + if !bytes.Equal(old, data) { + return ErrWriteConflict + } + tc.config[file] = new + return nil +} + +// ReadCache is for tc's implementation of Client. +func (tc *testClient) ReadCache(file string) ([]byte, error) { + tc.mu.Lock() + defer tc.mu.Unlock() + + data, ok := tc.cache[file] + if !ok { + return nil, fmt.Errorf("no cache %s", file) + } + return data, nil +} + +// WriteCache is for tc's implementation of Client. +func (tc *testClient) WriteCache(file string, data []byte) { + tc.mu.Lock() + defer tc.mu.Unlock() + + tc.cache[file] = data +} + +// Log is for tc's implementation of Client. +func (tc *testClient) Log(msg string) { + tc.t.Log(msg) +} + +// SecurityError is for tc's implementation of Client. +func (tc *testClient) SecurityError(msg string) { + tc.mu.Lock() + defer tc.mu.Unlock() + + fmt.Fprintf(&tc.security, "%s\n", strings.TrimRight(msg, "\n")) +} diff --git a/src/cmd/go/internal/sumweb/encode.go b/src/cmd/go/internal/sumweb/encode.go new file mode 100644 index 0000000000..d044a84f3a --- /dev/null +++ b/src/cmd/go/internal/sumweb/encode.go @@ -0,0 +1,167 @@ +// 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. + +// FS-safe encoding of module paths and versions. +// Copied from cmd/go/internal/module and unexported. + +package sumweb + +import ( + "fmt" + "unicode/utf8" +) + +// Safe encodings +// +// Module paths appear as substrings of file system paths +// (in the download cache) and of web server URLs in the proxy protocol. +// In general we cannot rely on file systems to be case-sensitive, +// nor can we rely on web servers, since they read from file systems. +// That is, we cannot rely on the file system to keep rsc.io/QUOTE +// and rsc.io/quote separate. Windows and macOS don't. +// Instead, we must never require two different casings of a file path. +// Because we want the download cache to match the proxy protocol, +// and because we want the proxy protocol to be possible to serve +// from a tree of static files (which might be stored on a case-insensitive +// file system), the proxy protocol must never require two different casings +// of a URL path either. +// +// One possibility would be to make the safe encoding be the lowercase +// hexadecimal encoding of the actual path bytes. This would avoid ever +// needing different casings of a file path, but it would be fairly illegible +// to most programmers when those paths appeared in the file system +// (including in file paths in compiler errors and stack traces) +// in web server logs, and so on. Instead, we want a safe encoding that +// leaves most paths unaltered. +// +// The safe encoding is this: +// replace every uppercase letter with an exclamation mark +// followed by the letter's lowercase equivalent. +// +// For example, +// github.com/Azure/azure-sdk-for-go -> github.com/!azure/azure-sdk-for-go. +// github.com/GoogleCloudPlatform/cloudsql-proxy -> github.com/!google!cloud!platform/cloudsql-proxy +// github.com/Sirupsen/logrus -> github.com/!sirupsen/logrus. +// +// Import paths that avoid upper-case letters are left unchanged. +// Note that because import paths are ASCII-only and avoid various +// problematic punctuation (like : < and >), the safe encoding is also ASCII-only +// and avoids the same problematic punctuation. +// +// Import paths have never allowed exclamation marks, so there is no +// need to define how to encode a literal !. +// +// Although paths are disallowed from using Unicode (see pathOK above), +// the eventual plan is to allow Unicode letters as well, to assume that +// file systems and URLs are Unicode-safe (storing UTF-8), and apply +// the !-for-uppercase convention. Note however that not all runes that +// are different but case-fold equivalent are an upper/lower pair. +// For example, U+004B ('K'), U+006B ('k'), and U+212A ('K' for Kelvin) +// are considered to case-fold to each other. When we do add Unicode +// letters, we must not assume that upper/lower are the only case-equivalent pairs. +// Perhaps the Kelvin symbol would be disallowed entirely, for example. +// Or perhaps it would encode as "!!k", or perhaps as "(212A)". +// +// Also, it would be nice to allow Unicode marks as well as letters, +// but marks include combining marks, and then we must deal not +// only with case folding but also normalization: both U+00E9 ('é') +// and U+0065 U+0301 ('e' followed by combining acute accent) +// look the same on the page and are treated by some file systems +// as the same path. If we do allow Unicode marks in paths, there +// must be some kind of normalization to allow only one canonical +// encoding of any character used in an import path. + +// encodePath returns the safe encoding of the given module path. +// It fails if the module path is invalid. +func encodePath(path string) (encoding string, err error) { + return encodeString(path) +} + +// encodeVersion returns the safe encoding of the given module version. +// Versions are allowed to be in non-semver form but must be valid file names +// and not contain exclamation marks. +func encodeVersion(v string) (encoding string, err error) { + return encodeString(v) +} + +func encodeString(s string) (encoding string, err error) { + haveUpper := false + for _, r := range s { + if r == '!' || r >= utf8.RuneSelf { + // This should be disallowed by CheckPath, but diagnose anyway. + // The correctness of the encoding loop below depends on it. + return "", fmt.Errorf("internal error: inconsistency in EncodePath") + } + if 'A' <= r && r <= 'Z' { + haveUpper = true + } + } + + if !haveUpper { + return s, nil + } + + var buf []byte + for _, r := range s { + if 'A' <= r && r <= 'Z' { + buf = append(buf, '!', byte(r+'a'-'A')) + } else { + buf = append(buf, byte(r)) + } + } + return string(buf), nil +} + +// decodePath returns the module path of the given safe encoding. +// It fails if the encoding is invalid or encodes an invalid path. +func decodePath(encoding string) (path string, err error) { + path, ok := decodeString(encoding) + if !ok { + return "", fmt.Errorf("invalid module path encoding %q", encoding) + } + return path, nil +} + +// decodeVersion returns the version string for the given safe encoding. +// It fails if the encoding is invalid or encodes an invalid version. +// Versions are allowed to be in non-semver form but must be valid file names +// and not contain exclamation marks. +func decodeVersion(encoding string) (v string, err error) { + v, ok := decodeString(encoding) + if !ok { + return "", fmt.Errorf("invalid version encoding %q", encoding) + } + return v, nil +} + +func decodeString(encoding string) (string, bool) { + var buf []byte + + bang := false + for _, r := range encoding { + if r >= utf8.RuneSelf { + return "", false + } + if bang { + bang = false + if r < 'a' || 'z' < r { + return "", false + } + buf = append(buf, byte(r+'A'-'a')) + continue + } + if r == '!' { + bang = true + continue + } + if 'A' <= r && r <= 'Z' { + return "", false + } + buf = append(buf, byte(r)) + } + if bang { + return "", false + } + return string(buf), true +} diff --git a/src/cmd/go/internal/sumweb/encode_test.go b/src/cmd/go/internal/sumweb/encode_test.go new file mode 100644 index 0000000000..9ed5e4a9a0 --- /dev/null +++ b/src/cmd/go/internal/sumweb/encode_test.go @@ -0,0 +1,67 @@ +// 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 sumweb + +import "testing" + +var encodeTests = []struct { + path string + enc string // empty means same as path +}{ + {path: "ascii.com/abcdefghijklmnopqrstuvwxyz.-+/~_0123456789"}, + {path: "github.com/GoogleCloudPlatform/omega", enc: "github.com/!google!cloud!platform/omega"}, +} + +func TestEncodePath(t *testing.T) { + // Check encodings. + for _, tt := range encodeTests { + enc, err := encodePath(tt.path) + if err != nil { + t.Errorf("encodePath(%q): unexpected error: %v", tt.path, err) + continue + } + want := tt.enc + if want == "" { + want = tt.path + } + if enc != want { + t.Errorf("encodePath(%q) = %q, want %q", tt.path, enc, want) + } + } +} + +var badDecode = []string{ + "github.com/GoogleCloudPlatform/omega", + "github.com/!google!cloud!platform!/omega", + "github.com/!0google!cloud!platform/omega", + "github.com/!_google!cloud!platform/omega", + "github.com/!!google!cloud!platform/omega", +} + +func TestDecodePath(t *testing.T) { + // Check invalid decodings. + for _, bad := range badDecode { + _, err := decodePath(bad) + if err == nil { + t.Errorf("DecodePath(%q): succeeded, want error (invalid decoding)", bad) + } + } + + // Check encodings. + for _, tt := range encodeTests { + enc := tt.enc + if enc == "" { + enc = tt.path + } + path, err := decodePath(enc) + if err != nil { + t.Errorf("decodePath(%q): unexpected error: %v", enc, err) + continue + } + if path != tt.path { + t.Errorf("decodePath(%q) = %q, want %q", enc, path, tt.path) + } + } +} diff --git a/src/cmd/go/internal/sumweb/server.go b/src/cmd/go/internal/sumweb/server.go new file mode 100644 index 0000000000..4619e9719b --- /dev/null +++ b/src/cmd/go/internal/sumweb/server.go @@ -0,0 +1,183 @@ +// 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 sumweb implements the HTTP protocols for serving or accessing a go.sum database. +package sumweb + +import ( + "context" + "net/http" + "os" + "regexp" + "strings" + + "cmd/go/internal/tlog" +) + +// A Server provides the external operations +// (underlying database access and so on) +// needed to implement the HTTP server Handler. +type Server interface { + // NewContext returns the context to use for the request r. + NewContext(r *http.Request) (context.Context, error) + + // Signed returns the signed hash of the latest tree. + Signed(ctx context.Context) ([]byte, error) + + // ReadRecords returns the content for the n records id through id+n-1. + ReadRecords(ctx context.Context, id, n int64) ([][]byte, error) + + // Lookup looks up a record by its associated key ("module@version"), + // returning the record ID. + Lookup(ctx context.Context, key string) (int64, error) + + // ReadTileData reads the content of tile t. + // It is only invoked for hash tiles (t.L ≥ 0). + ReadTileData(ctx context.Context, t tlog.Tile) ([]byte, error) +} + +// A Handler is the go.sum database server handler, +// which should be invoked to serve the paths listed in Paths. +// The calling code is responsible for initializing Server. +type Handler struct { + Server Server +} + +// Paths are the URL paths for which Handler should be invoked. +// +// Typically a server will do: +// +// handler := &sumweb.Handler{Server: srv} +// for _, path := range sumweb.Paths { +// http.HandleFunc(path, handler) +// } +// +var Paths = []string{ + "/lookup/", + "/latest", + "/tile/", +} + +var modVerRE = regexp.MustCompile(`^[^@]+@v[0-9]+\.[0-9]+\.[0-9]+(-[^@]*)?(\+incompatible)?$`) + +func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + ctx, err := h.Server.NewContext(r) + if err != nil { + http.Error(w, err.Error(), 500) + return + } + + switch { + default: + http.NotFound(w, r) + + case strings.HasPrefix(r.URL.Path, "/lookup/"): + mod := strings.TrimPrefix(r.URL.Path, "/lookup/") + if !modVerRE.MatchString(mod) { + http.Error(w, "invalid module@version syntax", http.StatusBadRequest) + return + } + i := strings.Index(mod, "@") + encPath, encVers := mod[:i], mod[i+1:] + path, err := decodePath(encPath) + if err != nil { + reportError(w, r, err) + return + } + vers, err := decodeVersion(encVers) + if err != nil { + reportError(w, r, err) + return + } + id, err := h.Server.Lookup(ctx, path+"@"+vers) + if err != nil { + reportError(w, r, err) + return + } + records, err := h.Server.ReadRecords(ctx, id, 1) + if err != nil { + // This should never happen - the lookup says the record exists. + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + if len(records) != 1 { + http.Error(w, "invalid record count returned by ReadRecords", http.StatusInternalServerError) + return + } + msg, err := tlog.FormatRecord(id, records[0]) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + signed, err := h.Server.Signed(ctx) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + w.Header().Set("Content-Type", "text/plain; charset=UTF-8") + w.Write(msg) + w.Write(signed) + + case r.URL.Path == "/latest": + data, err := h.Server.Signed(ctx) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + w.Header().Set("Content-Type", "text/plain; charset=UTF-8") + w.Write(data) + + case strings.HasPrefix(r.URL.Path, "/tile/"): + t, err := tlog.ParseTilePath(r.URL.Path[1:]) + if err != nil { + http.Error(w, "invalid tile syntax", http.StatusBadRequest) + return + } + if t.L == -1 { + // Record data. + start := t.N << uint(t.H) + records, err := h.Server.ReadRecords(ctx, start, int64(t.W)) + if err != nil { + reportError(w, r, err) + return + } + if len(records) != t.W { + http.Error(w, "invalid record count returned by ReadRecords", http.StatusInternalServerError) + return + } + var data []byte + for i, text := range records { + msg, err := tlog.FormatRecord(start+int64(i), text) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } + data = append(data, msg...) + } + w.Header().Set("Content-Type", "text/plain; charset=UTF-8") + w.Write(data) + return + } + + data, err := h.Server.ReadTileData(ctx, t) + if err != nil { + reportError(w, r, err) + return + } + w.Header().Set("Content-Type", "application/octet-stream") + w.Write(data) + } +} + +// reportError reports err to w. +// If it's a not-found, the reported error is 404. +// Otherwise it is an internal server error. +// The caller must only call reportError in contexts where +// a not-found err should be reported as 404. +func reportError(w http.ResponseWriter, r *http.Request, err error) { + if os.IsNotExist(err) { + http.Error(w, err.Error(), http.StatusNotFound) + return + } + http.Error(w, err.Error(), http.StatusInternalServerError) +} diff --git a/src/cmd/go/internal/sumweb/test.go b/src/cmd/go/internal/sumweb/test.go new file mode 100644 index 0000000000..cce86e7e9a --- /dev/null +++ b/src/cmd/go/internal/sumweb/test.go @@ -0,0 +1,133 @@ +// 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 sumweb + +import ( + "context" + "fmt" + "net/http" + "strings" + "sync" + + "cmd/go/internal/note" + "cmd/go/internal/tlog" +) + +// NewTestServer constructs a new TestServer +// that will sign its tree with the given signer key +// (see cmd/go/internal/note) +// and fetch new records as needed by calling gosum. +func NewTestServer(signer string, gosum func(path, vers string) ([]byte, error)) *TestServer { + return &TestServer{signer: signer, gosum: gosum} +} + +// A TestServer is an in-memory implementation of Server for testing. +type TestServer struct { + signer string + gosum func(path, vers string) ([]byte, error) + + mu sync.Mutex + hashes testHashes + records [][]byte + lookup map[string]int64 +} + +// testHashes implements tlog.HashReader, reading from a slice. +type testHashes []tlog.Hash + +func (h testHashes) ReadHashes(indexes []int64) ([]tlog.Hash, error) { + var list []tlog.Hash + for _, id := range indexes { + list = append(list, h[id]) + } + return list, nil +} + +func (s *TestServer) NewContext(r *http.Request) (context.Context, error) { + return nil, nil +} + +func (s *TestServer) Signed(ctx context.Context) ([]byte, error) { + s.mu.Lock() + defer s.mu.Unlock() + + size := int64(len(s.records)) + h, err := tlog.TreeHash(size, s.hashes) + if err != nil { + return nil, err + } + text := tlog.FormatTree(tlog.Tree{N: size, Hash: h}) + signer, err := note.NewSigner(s.signer) + if err != nil { + return nil, err + } + return note.Sign(¬e.Note{Text: string(text)}, signer) +} + +func (s *TestServer) ReadRecords(ctx context.Context, id, n int64) ([][]byte, error) { + s.mu.Lock() + defer s.mu.Unlock() + + var list [][]byte + for i := int64(0); i < n; i++ { + if id+i >= int64(len(s.records)) { + return nil, fmt.Errorf("missing records") + } + list = append(list, s.records[id+i]) + } + return list, nil +} + +func (s *TestServer) Lookup(ctx context.Context, key string) (int64, error) { + s.mu.Lock() + id, ok := s.lookup[key] + s.mu.Unlock() + if ok { + return id, nil + } + + // Look up module and compute go.sum lines. + i := strings.Index(key, "@") + if i < 0 { + return 0, fmt.Errorf("invalid lookup key %q", key) + } + path, vers := key[:i], key[i+1:] + data, err := s.gosum(path, vers) + if err != nil { + return 0, err + } + + s.mu.Lock() + defer s.mu.Unlock() + + // We ran the fetch without the lock. + // If another fetch happened and committed, use it instead. + id, ok = s.lookup[key] + if ok { + return id, nil + } + + // Add record. + id = int64(len(s.records)) + s.records = append(s.records, data) + if s.lookup == nil { + s.lookup = make(map[string]int64) + } + s.lookup[key] = id + hashes, err := tlog.StoredHashesForRecordHash(id, tlog.RecordHash([]byte(data)), s.hashes) + if err != nil { + panic(err) + } + s.hashes = append(s.hashes, hashes...) + + return id, nil +} + +func (s *TestServer) ReadTileData(ctx context.Context, t tlog.Tile) ([]byte, error) { + s.mu.Lock() + defer s.mu.Unlock() + + return tlog.ReadTileData(t, s.hashes) +} diff --git a/src/cmd/go/internal/test/test.go b/src/cmd/go/internal/test/test.go index 8dfb3df22d..8440a83951 100644 --- a/src/cmd/go/internal/test/test.go +++ b/src/cmd/go/internal/test/test.go @@ -102,7 +102,10 @@ 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. +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 @@ -484,10 +487,14 @@ var ( pkgArgs []string pkgs []*load.Package - testKillTimeout = 10 * time.Minute - testCacheExpire time.Time // ignore cached test results before this time + testActualTimeout = 10 * time.Minute // actual timeout which is passed to tests + testKillTimeout = testActualTimeout + 1*time.Minute // backup alarm + testCacheExpire time.Time // ignore cached test results before this time ) +// testVetExplicit records whether testVetFlags were set by an explicit -vet. +var testVetExplicit = false + // testVetFlags is the list of flags to pass to vet when invoked automatically during go test. var testVetFlags = []string{ // TODO(rsc): Decide which tests are enabled by default. @@ -514,15 +521,22 @@ var testVetFlags = []string{ // "-unusedresult", } +func testCmdUsage() { + 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()) + os.Exit(2) +} + func runTest(cmd *base.Command, args []string) { modload.LoadTests = true - pkgArgs, testArgs = testFlags(cmd.Usage, args) + pkgArgs, testArgs = testFlags(testCmdUsage, args) work.FindExecCmd() // initialize cached result work.BuildInit() work.VetFlags = testVetFlags + work.VetExplicit = testVetExplicit pkgs = load.PackagesForBuild(pkgArgs) if len(pkgs) == 0 { @@ -546,13 +560,21 @@ func runTest(cmd *base.Command, args []string) { // the test wedges with a goroutine spinning and its background // timer does not get a chance to fire. if dt, err := time.ParseDuration(testTimeout); err == nil && dt > 0 { - testKillTimeout = dt + 1*time.Minute + testActualTimeout = dt + testKillTimeout = testActualTimeout + 1*time.Minute } else if err == nil && dt == 0 { // An explicit zero disables the test timeout. + // No timeout is passed to tests. // Let it have one century (almost) before we kill it. + testActualTimeout = -1 testKillTimeout = 100 * 365 * 24 * time.Hour } + // Pass timeout to tests if it exists. + if testActualTimeout > 0 { + testArgs = append(testArgs, "-test.timeout="+testActualTimeout.String()) + } + // show passing test output (after buffering) with -v flag. // must buffer because tests are running in parallel, and // otherwise the output will get mixed. @@ -720,7 +742,7 @@ func runTest(cmd *base.Command, args []string) { } // Ultimately the goal is to print the output. - root := &work.Action{Mode: "go test", Deps: prints} + root := &work.Action{Mode: "go test", Func: printExitStatus, Deps: prints} // Force the printing of results to happen in order, // one at a time. @@ -754,7 +776,7 @@ func ensureImport(p *load.Package, pkg string) { } } - p1 := load.LoadPackage(pkg, &load.ImportStack{}) + p1 := load.LoadImportWithFlags(pkg, p.Dir, p, &load.ImportStack{}, nil, 0) if p1.Error != nil { base.Fatalf("load %s: %v", pkg, p1.Error) } @@ -805,7 +827,7 @@ func builderTest(b *work.Builder, p *load.Package) (buildAction, runAction, prin if p.ImportPath == "command-line-arguments" { elem = p.Name } else { - _, elem = path.Split(p.ImportPath) + elem = load.DefaultExecName(p.ImportPath) } testBinary := elem + ".test" @@ -820,7 +842,7 @@ func builderTest(b *work.Builder, p *load.Package) (buildAction, runAction, prin if !cfg.BuildN { // writeTestmain writes _testmain.go, // using the test description gathered in t. - if err := ioutil.WriteFile(testDir+"_testmain.go", *pmain.Internal.TestmainGo, 0666); err != nil { + if err := ioutil.WriteFile(testDir+"_testmain.go", pmain.Internal.TestmainGo, 0666); err != nil { return nil, nil, nil, err } } @@ -1617,3 +1639,14 @@ func builderNoTest(b *work.Builder, a *work.Action) error { fmt.Fprintf(stdout, "? \t%s\t[no test files]\n", a.Package.ImportPath) return nil } + +// printExitStatus is the action for printing the exit status +func printExitStatus(b *work.Builder, a *work.Action) error { + if !testJSON && len(pkgArgs) != 0 { + if base.GetExitStatus() != 0 { + fmt.Println("FAIL") + return nil + } + } + return nil +} diff --git a/src/cmd/go/internal/test/testflag.go b/src/cmd/go/internal/test/testflag.go index ebcf49a4e9..138e1f9d2a 100644 --- a/src/cmd/go/internal/test/testflag.go +++ b/src/cmd/go/internal/test/testflag.go @@ -202,6 +202,7 @@ func testFlags(usage func(), args []string) (packageNames, passToTest []string) } } + testVetExplicit = testVetList != "" if testVetList != "" && testVetList != "off" { if strings.Contains(testVetList, "=") { base.Fatalf("-vet argument cannot contain equal signs") diff --git a/src/cmd/go/internal/tlog/ct_test.go b/src/cmd/go/internal/tlog/ct_test.go new file mode 100644 index 0000000000..c2d9aebe79 --- /dev/null +++ b/src/cmd/go/internal/tlog/ct_test.go @@ -0,0 +1,96 @@ +// 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 tlog + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + "net/url" + "os" + "testing" +) + +func TestCertificateTransparency(t *testing.T) { + // Test that we can verify actual Certificate Transparency proofs. + // (The other tests check that we can verify our own proofs; + // this is a test that the two are compatible.) + + if testing.Short() { + t.Skip("skipping in -short mode") + } + + var root ctTree + httpGET(t, "http://ct.googleapis.com/logs/argon2020/ct/v1/get-sth", &root) + + var leaf ctEntries + httpGET(t, "http://ct.googleapis.com/logs/argon2020/ct/v1/get-entries?start=10000&end=10000", &leaf) + hash := RecordHash(leaf.Entries[0].Data) + + var rp ctRecordProof + httpGET(t, "http://ct.googleapis.com/logs/argon2020/ct/v1/get-proof-by-hash?tree_size="+fmt.Sprint(root.Size)+"&hash="+url.QueryEscape(hash.String()), &rp) + + err := CheckRecord(rp.Proof, root.Size, root.Hash, 10000, hash) + if err != nil { + t.Fatal(err) + } + + var tp ctTreeProof + httpGET(t, "http://ct.googleapis.com/logs/argon2020/ct/v1/get-sth-consistency?first=3654490&second="+fmt.Sprint(root.Size), &tp) + + oh, _ := ParseHash("AuIZ5V6sDUj1vn3Y1K85oOaQ7y+FJJKtyRTl1edIKBQ=") + err = CheckTree(tp.Proof, root.Size, root.Hash, 3654490, oh) + if err != nil { + t.Fatal(err) + } +} + +type ctTree struct { + Size int64 `json:"tree_size"` + Hash Hash `json:"sha256_root_hash"` +} + +type ctEntries struct { + Entries []*ctEntry +} + +type ctEntry struct { + Data []byte `json:"leaf_input"` +} + +type ctRecordProof struct { + Index int64 `json:"leaf_index"` + Proof RecordProof `json:"audit_path"` +} + +type ctTreeProof struct { + Proof TreeProof `json:"consistency"` +} + +func httpGET(t *testing.T, url string, targ interface{}) { + if testing.Verbose() { + println() + println(url) + } + resp, err := http.Get(url) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + data, err := ioutil.ReadAll(resp.Body) + if err != nil { + t.Fatal(err) + } + if testing.Verbose() { + os.Stdout.Write(data) + } + err = json.Unmarshal(data, targ) + if err != nil { + println(url) + os.Stdout.Write(data) + t.Fatal(err) + } +} diff --git a/src/cmd/go/internal/tlog/note.go b/src/cmd/go/internal/tlog/note.go new file mode 100644 index 0000000000..65c71644ba --- /dev/null +++ b/src/cmd/go/internal/tlog/note.go @@ -0,0 +1,135 @@ +// 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 tlog + +import ( + "bytes" + "encoding/base64" + "errors" + "fmt" + "strconv" + "strings" + "unicode/utf8" +) + +// A Tree is a tree description, to be signed by a go.sum database server. +type Tree struct { + N int64 + Hash Hash +} + +// FormatTree formats a tree description for inclusion in a note. +// +// The encoded form is three lines, each ending in a newline (U+000A): +// +// go.sum database tree +// N +// Hash +// +// where N is in decimal and Hash is in base64. +// +// A future backwards-compatible encoding may add additional lines, +// which the parser can ignore. +// A future backwards-incompatible encoding would use a different +// first line (for example, "go.sum database tree v2"). +func FormatTree(tree Tree) []byte { + return []byte(fmt.Sprintf("go.sum database tree\n%d\n%s\n", tree.N, tree.Hash)) +} + +var errMalformedTree = errors.New("malformed tree note") +var treePrefix = []byte("go.sum database tree\n") + +// ParseTree parses a tree root description. +func ParseTree(text []byte) (tree Tree, err error) { + // The message looks like: + // + // go.sum database tree + // 2 + // nND/nri/U0xuHUrYSy0HtMeal2vzD9V4k/BO79C+QeI= + // + // For forwards compatibility, extra text lines after the encoding are ignored. + if !bytes.HasPrefix(text, treePrefix) || bytes.Count(text, []byte("\n")) < 3 || len(text) > 1e6 { + return Tree{}, errMalformedTree + } + + lines := strings.SplitN(string(text), "\n", 4) + n, err := strconv.ParseInt(lines[1], 10, 64) + if err != nil || n < 0 || lines[1] != strconv.FormatInt(n, 10) { + return Tree{}, errMalformedTree + } + + h, err := base64.StdEncoding.DecodeString(lines[2]) + if err != nil || len(h) != HashSize { + return Tree{}, errMalformedTree + } + + var hash Hash + copy(hash[:], h) + return Tree{n, hash}, nil +} + +var errMalformedRecord = errors.New("malformed record data") + +// FormatRecord formats a record for serving to a client +// in a lookup response or data tile. +// +// The encoded form is the record ID as a single number, +// then the text of the record, and then a terminating blank line. +// Record text must be valid UTF-8 and must not contain any ASCII control +// characters (those below U+0020) other than newline (U+000A). +// It must end in a terminating newline and not contain any blank lines. +func FormatRecord(id int64, text []byte) (msg []byte, err error) { + if !isValidRecordText(text) { + return nil, errMalformedRecord + } + msg = []byte(fmt.Sprintf("%d\n", id)) + msg = append(msg, text...) + msg = append(msg, '\n') + return msg, nil +} + +// isValidRecordText reports whether text is syntactically valid record text. +func isValidRecordText(text []byte) bool { + var last rune + for i := 0; i < len(text); { + r, size := utf8.DecodeRune(text[i:]) + if r < 0x20 && r != '\n' || r == utf8.RuneError && size == 1 || last == '\n' && r == '\n' { + return false + } + i += size + last = r + } + if last != '\n' { + return false + } + return true +} + +// ParseRecord parses a record description at the start of text, +// stopping immediately after the terminating blank line. +// It returns the record id, the record text, and the remainder of text. +func ParseRecord(msg []byte) (id int64, text, rest []byte, err error) { + // Leading record id. + i := bytes.IndexByte(msg, '\n') + if i < 0 { + return 0, nil, nil, errMalformedRecord + } + id, err = strconv.ParseInt(string(msg[:i]), 10, 64) + if err != nil { + return 0, nil, nil, errMalformedRecord + } + msg = msg[i+1:] + + // Record text. + i = bytes.Index(msg, []byte("\n\n")) + if i < 0 { + return 0, nil, nil, errMalformedRecord + } + text, rest = msg[:i+1], msg[i+2:] + if !isValidRecordText(text) { + return 0, nil, nil, errMalformedRecord + } + return id, text, rest, nil +} diff --git a/src/cmd/go/internal/tlog/note_test.go b/src/cmd/go/internal/tlog/note_test.go new file mode 100644 index 0000000000..a32d6d2143 --- /dev/null +++ b/src/cmd/go/internal/tlog/note_test.go @@ -0,0 +1,117 @@ +// 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 tlog + +import ( + "strings" + "testing" +) + +func TestFormatTree(t *testing.T) { + n := int64(123456789012) + h := RecordHash([]byte("hello world")) + golden := "go.sum database tree\n123456789012\nTszzRgjTG6xce+z2AG31kAXYKBgQVtCSCE40HmuwBb0=\n" + b := FormatTree(Tree{n, h}) + if string(b) != golden { + t.Errorf("FormatTree(...) = %q, want %q", b, golden) + } +} + +func TestParseTree(t *testing.T) { + in := "go.sum database tree\n123456789012\nTszzRgjTG6xce+z2AG31kAXYKBgQVtCSCE40HmuwBb0=\n" + goldH := RecordHash([]byte("hello world")) + goldN := int64(123456789012) + tree, err := ParseTree([]byte(in)) + if tree.N != goldN || tree.Hash != goldH || err != nil { + t.Fatalf("ParseTree(...) = Tree{%d, %v}, %v, want Tree{%d, %v}, nil", tree.N, tree.Hash, err, goldN, goldH) + } + + // Check invalid trees. + var badTrees = []string{ + "not-" + in, + "go.sum database tree\n0xabcdef\nTszzRgjTG6xce+z2AG31kAXYKBgQVtCSCE40HmuwBb0=\n", + "go.sum database tree\n123456789012\nTszzRgjTG6xce+z2AG31kAXYKBgQVtCSCE40HmuwBTOOBIG=\n", + } + for _, bad := range badTrees { + _, err := ParseTree([]byte(bad)) + if err == nil { + t.Fatalf("ParseTree(%q) succeeded, want failure", in) + } + } + + // Check junk on end is ignored. + var goodTrees = []string{ + in + "JOE", + in + "JOE\n", + in + strings.Repeat("JOE\n", 1000), + } + for _, good := range goodTrees { + _, err := ParseTree([]byte(good)) + if tree.N != goldN || tree.Hash != goldH || err != nil { + t.Fatalf("ParseTree(...+%q) = Tree{%d, %v}, %v, want Tree{%d, %v}, nil", good[len(in):], tree.N, tree.Hash, err, goldN, goldH) + } + } +} + +func TestFormatRecord(t *testing.T) { + id := int64(123456789012) + text := "hello, world\n" + golden := "123456789012\nhello, world\n\n" + msg, err := FormatRecord(id, []byte(text)) + if err != nil { + t.Fatalf("FormatRecord: %v", err) + } + if string(msg) != golden { + t.Fatalf("FormatRecord(...) = %q, want %q", msg, golden) + } + + var badTexts = []string{ + "", + "hello\nworld", + "hello\n\nworld\n", + "hello\x01world\n", + } + for _, bad := range badTexts { + msg, err := FormatRecord(id, []byte(bad)) + if err == nil { + t.Errorf("FormatRecord(id, %q) = %q, want error", bad, msg) + } + } +} + +func TestParseRecord(t *testing.T) { + in := "123456789012\nhello, world\n\njunk on end\x01\xff" + goldID := int64(123456789012) + goldText := "hello, world\n" + goldRest := "junk on end\x01\xff" + id, text, rest, err := ParseRecord([]byte(in)) + if id != goldID || string(text) != goldText || string(rest) != goldRest || err != nil { + t.Fatalf("ParseRecord(%q) = %d, %q, %q, %v, want %d, %q, %q, nil", in, id, text, rest, err, goldID, goldText, goldRest) + } + + in = "123456789012\nhello, world\n\n" + id, text, rest, err = ParseRecord([]byte(in)) + if id != goldID || string(text) != goldText || len(rest) != 0 || err != nil { + t.Fatalf("ParseRecord(%q) = %d, %q, %q, %v, want %d, %q, %q, nil", in, id, text, rest, err, goldID, goldText, "") + } + if rest == nil { + t.Fatalf("ParseRecord(%q): rest = []byte(nil), want []byte{}", in) + } + + // Check invalid records. + var badRecords = []string{ + "not-" + in, + "123\nhello\x01world\n\n", + "123\nhello\xffworld\n\n", + "123\nhello world\n", + "0x123\nhello world\n\n", + } + for _, bad := range badRecords { + id, text, rest, err := ParseRecord([]byte(bad)) + if err == nil { + t.Fatalf("ParseRecord(%q) = %d, %q, %q, nil, want error", in, id, text, rest) + } + } +} diff --git a/src/cmd/go/internal/tlog/tile.go b/src/cmd/go/internal/tlog/tile.go new file mode 100644 index 0000000000..694d89cdf2 --- /dev/null +++ b/src/cmd/go/internal/tlog/tile.go @@ -0,0 +1,418 @@ +// 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 tlog + +import ( + "fmt" + "strconv" + "strings" +) + +// A Tile is a description of a transparency log tile. +// A tile of height H at level L offset N lists W consecutive hashes +// at level H*L of the tree starting at offset N*(2**H). +// A complete tile lists 2**H hashes; a partial tile lists fewer. +// Note that a tile represents the entire subtree of height H +// with those hashes as the leaves. The levels above H*L +// can be reconstructed by hashing the leaves. +// +// Each Tile can be encoded as a “tile coordinate path†+// of the form tile/H/L/NNN[.p/W]. +// The .p/W suffix is present only for partial tiles, meaning W < 2**H. +// The NNN element is an encoding of N into 3-digit path elements. +// All but the last path element begins with an "x". +// For example, +// Tile{H: 3, L: 4, N: 1234067, W: 1}'s path +// is tile/3/4/x001/x234/067.p/1, and +// Tile{H: 3, L: 4, N: 1234067, W: 8}'s path +// is tile/3/4/x001/x234/067. +// See Tile's Path method and the ParseTilePath function. +// +// The special level L=-1 holds raw record data instead of hashes. +// In this case, the level encodes into a tile path as the path element +// "data" instead of "-1". +type Tile struct { + H int // height of tile (1 ≤ H ≤ 30) + L int // level in tiling (-1 ≤ L ≤ 63) + N int64 // number within level (0 ≤ N, unbounded) + W int // width of tile (1 ≤ W ≤ 2**H; 2**H is complete tile) +} + +// TileForIndex returns the tile of height h ≥ 1 +// and least width storing the given hash storage index. +func TileForIndex(h int, index int64) Tile { + if h < 1 { + panic("TileForIndex: invalid height") + } + t, _, _ := tileForIndex(h, index) + return t +} + +// tileForIndex returns the tile of height h ≥ 1 +// storing the given hash index, which can be +// reconstructed using tileHash(data[start:end]). +func tileForIndex(h int, index int64) (t Tile, start, end int) { + level, n := SplitStoredHashIndex(index) + t.H = h + t.L = level / h + level -= t.L * h // now level within tile + t.N = n << uint(level) >> uint(t.H) + n -= t.N << uint(t.H) >> uint(level) // now n within tile at level + t.W = int((n + 1) << uint(level)) + return t, int(n< 30 || t.L < 0 || t.L >= 64 || t.W < 1 || t.W > 1<>(H*level) > 0; level++ { + oldN := oldTreeSize >> (H * level) + newN := newTreeSize >> (H * level) + for n := oldN >> H; n < newN>>H; n++ { + tiles = append(tiles, Tile{H: h, L: int(level), N: n, W: 1 << H}) + } + n := newN >> H + maxW := int(newN - n< n<= pathBase { + n /= pathBase + nStr = fmt.Sprintf("x%03d/%s", n%pathBase, nStr) + } + pStr := "" + if t.W != 1< 30 { + return Tile{}, &badPathError{path} + } + w := 1 << uint(h) + if dotP := f[len(f)-2]; strings.HasSuffix(dotP, ".p") { + ww, err := strconv.Atoi(f[len(f)-1]) + if err != nil || ww <= 0 || ww >= w { + return Tile{}, &badPathError{path} + } + w = ww + f[len(f)-2] = dotP[:len(dotP)-len(".p")] + f = f[:len(f)-1] + } + f = f[3:] + n := int64(0) + for _, s := range f { + nn, err := strconv.Atoi(strings.TrimPrefix(s, "x")) + if err != nil || nn < 0 || nn >= pathBase { + return Tile{}, &badPathError{path} + } + n = n*pathBase + int64(nn) + } + if isData { + l = -1 + } + t := Tile{H: h, L: l, N: n, W: w} + if path != t.Path() { + return Tile{}, &badPathError{path} + } + return t, nil +} + +type badPathError struct { + path string +} + +func (e *badPathError) Error() string { + return fmt.Sprintf("malformed tile path %q", e.path) +} + +// A TileReader reads tiles from a go.sum database log. +type TileReader interface { + // Height returns the height of the available tiles. + Height() int + + // ReadTiles returns the data for each requested tile. + // If ReadTiles returns err == nil, it must also return + // a data record for each tile (len(data) == len(tiles)) + // and each data record must be the correct length + // (len(data[i]) == tiles[i].W*HashSize). + ReadTiles(tiles []Tile) (data [][]byte, err error) + + // SaveTiles informs the TileReader that the tile data + // returned by ReadTiles has been confirmed as valid + // and can be saved in persistent storage (on disk). + SaveTiles(tiles []Tile, data [][]byte) +} + +// TileHashReader returns a HashReader that satisfies requests +// by loading tiles of the given tree. +// +// The returned HashReader checks that loaded tiles are +// valid for the given tree. Therefore, any hashes returned +// by the HashReader are already proven to be in the tree. +func TileHashReader(tree Tree, tr TileReader) HashReader { + return &tileHashReader{tree: tree, tr: tr} +} + +type tileHashReader struct { + tree Tree + tr TileReader +} + +// tileParent returns t's k'th tile parent in the tiles for a tree of size n. +// If there is no such parent, tileParent returns Tile{}. +func tileParent(t Tile, k int, n int64) Tile { + t.L += k + t.N >>= uint(k * t.H) + t.W = 1 << uint(t.H) + if max := n >> uint(t.L*t.H); t.N<= max { + if t.N<= max { + return Tile{} + } + t.W = int(max - t.N<= StoredHashIndex(0, r.tree.N) { + return nil, fmt.Errorf("indexes not in tree") + } + + tile, _, _ := tileForIndex(h, x) + + // Walk up parent tiles until we find one we've requested. + // That one will be authenticated. + k := 0 + for ; ; k++ { + p := tileParent(tile, k, r.tree.N) + if j, ok := tileOrder[p]; ok { + if k == 0 { + indexTileOrder[i] = j + } + break + } + } + + // Walk back down recording child tiles after parents. + // This loop ends by revisiting the tile for this index + // (tileParent(tile, 0, r.tree.N)) unless k == 0, in which + // case the previous loop did it. + for k--; k >= 0; k-- { + p := tileParent(tile, k, r.tree.N) + if p.W != 1<= 0; i-- { + h, err := HashFromTile(tiles[stxTileOrder[i]], data[stxTileOrder[i]], stx[i]) + if err != nil { + return nil, err + } + th = NodeHash(h, th) + } + if th != r.tree.Hash { + // The tiles do not support the tree hash. + // We know at least one is wrong, but not which one. + return nil, fmt.Errorf("downloaded inconsistent tile") + } + + // Authenticate full tiles against their parents. + for i := len(stx); i < len(tiles); i++ { + tile := tiles[i] + p := tileParent(tile, 1, r.tree.N) + j, ok := tileOrder[p] + if !ok { + return nil, fmt.Errorf("bad math in tileHashReader %d %v: lost parent of %v", r.tree.N, indexes, tile) + } + h, err := HashFromTile(p, data[j], StoredHashIndex(p.L*p.H, tile.N)) + if err != nil { + return nil, fmt.Errorf("bad math in tileHashReader %d %v: lost hash of %v: %v", r.tree.N, indexes, tile, err) + } + if h != tileHash(data[i]) { + return nil, fmt.Errorf("downloaded inconsistent tile") + } + } + + // Now we have all the tiles needed for the requested hashes, + // and we've authenticated the full tile set against the trusted tree hash. + r.tr.SaveTiles(tiles, data) + + // Pull out the requested hashes. + hashes := make([]Hash, len(indexes)) + for i, x := range indexes { + j := indexTileOrder[i] + h, err := HashFromTile(tiles[j], data[j], x) + if err != nil { + return nil, fmt.Errorf("bad math in tileHashReader %d %v: lost hash %v: %v", r.tree.N, indexes, x, err) + } + hashes[i] = h + } + + return hashes, nil +} diff --git a/src/cmd/go/internal/tlog/tlog.go b/src/cmd/go/internal/tlog/tlog.go new file mode 100644 index 0000000000..6703656b19 --- /dev/null +++ b/src/cmd/go/internal/tlog/tlog.go @@ -0,0 +1,601 @@ +// 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 tlog implements a tamper-evident log +// used in the Go module go.sum database server. +// +// This package is part of a DRAFT of what the go.sum database server will look like. +// Do not assume the details here are final! +// +// This package follows the design of Certificate Transparency (RFC 6962) +// and its proofs are compatible with that system. +// See TestCertificateTransparency. +// +package tlog + +import ( + "crypto/sha256" + "encoding/base64" + "errors" + "fmt" + "math/bits" +) + +// A Hash is a hash identifying a log record or tree root. +type Hash [HashSize]byte + +// HashSize is the size of a Hash in bytes. +const HashSize = 32 + +// String returns a base64 representation of the hash for printing. +func (h Hash) String() string { + return base64.StdEncoding.EncodeToString(h[:]) +} + +// MarshalJSON marshals the hash as a JSON string containing the base64-encoded hash. +func (h Hash) MarshalJSON() ([]byte, error) { + return []byte(`"` + h.String() + `"`), nil +} + +// UnmarshalJSON unmarshals a hash from JSON string containing the a base64-encoded hash. +func (h *Hash) UnmarshalJSON(data []byte) error { + if len(data) != 1+44+1 || data[0] != '"' || data[len(data)-2] != '=' || data[len(data)-1] != '"' { + return errors.New("cannot decode hash") + } + + // As of Go 1.12, base64.StdEncoding.Decode insists on + // slicing into target[33:] even when it only writes 32 bytes. + // Since we already checked that the hash ends in = above, + // we can use base64.RawStdEncoding with the = removed; + // RawStdEncoding does not exhibit the same bug. + // We decode into a temporary to avoid writing anything to *h + // unless the entire input is well-formed. + var tmp Hash + n, err := base64.RawStdEncoding.Decode(tmp[:], data[1:len(data)-2]) + if err != nil || n != HashSize { + return errors.New("cannot decode hash") + } + *h = tmp + return nil +} + +// ParseHash parses the base64-encoded string form of a hash. +func ParseHash(s string) (Hash, error) { + data, err := base64.StdEncoding.DecodeString(s) + if err != nil || len(data) != HashSize { + return Hash{}, fmt.Errorf("malformed hash") + } + var h Hash + copy(h[:], data) + return h, nil +} + +// maxpow2 returns k, the maximum power of 2 smaller than n, +// as well as l = logâ‚‚ k (so k = 1< 0; l-- { + n = 2*n + 1 + } + + // Level 0's n'th hash is written at n+n/2+n/4+... (eventually n/2â± hits zero). + i := int64(0) + for ; n > 0; n >>= 1 { + i += n + } + + return i + int64(level) +} + +// SplitStoredHashIndex is the inverse of StoredHashIndex. +// That is, SplitStoredHashIndex(StoredHashIndex(level, n)) == level, n. +func SplitStoredHashIndex(index int64) (level int, n int64) { + // Determine level 0 record before index. + // StoredHashIndex(0, n) < 2*n, + // so the n we want is in [index/2, index/2+logâ‚‚(index)]. + n = index / 2 + indexN := StoredHashIndex(0, n) + if indexN > index { + panic("bad math") + } + for { + // Each new record n adds 1 + trailingZeros(n) hashes. + x := indexN + 1 + int64(bits.TrailingZeros64(uint64(n+1))) + if x > index { + break + } + n++ + indexN = x + } + // The hash we want was commited with record n, + // meaning it is one of (0, n), (1, n/2), (2, n/4), ... + level = int(index - indexN) + return level, n >> uint(level) +} + +// StoredHashCount returns the number of stored hashes +// that are expected for a tree with n records. +func StoredHashCount(n int64) int64 { + if n == 0 { + return 0 + } + // The tree will have the hashes up to the last leaf hash. + numHash := StoredHashIndex(0, n-1) + 1 + // And it will have any hashes for subtrees completed by that leaf. + for i := uint64(n - 1); i&1 != 0; i >>= 1 { + numHash++ + } + return numHash +} + +// StoredHashes returns the hashes that must be stored when writing +// record n with the given data. The hashes should be stored starting +// at StoredHashIndex(0, n). The result will have at most 1 + logâ‚‚ n hashes, +// but it will average just under two per call for a sequence of calls for n=1..k. +// +// StoredHashes may read up to log n earlier hashes from r +// in order to compute hashes for completed subtrees. +func StoredHashes(n int64, data []byte, r HashReader) ([]Hash, error) { + return StoredHashesForRecordHash(n, RecordHash(data), r) +} + +// StoredHashesForRecordHash is like StoredHashes but takes +// as its second argument RecordHash(data) instead of data itself. +func StoredHashesForRecordHash(n int64, h Hash, r HashReader) ([]Hash, error) { + // Start with the record hash. + hashes := []Hash{h} + + // Build list of indexes needed for hashes for completed subtrees. + // Each trailing 1 bit in the binary representation of n completes a subtree + // and consumes a hash from an adjacent subtree. + m := int(bits.TrailingZeros64(uint64(n + 1))) + indexes := make([]int64, m) + for i := 0; i < m; i++ { + // We arrange indexes in sorted order. + // Note that n>>i is always odd. + indexes[m-1-i] = StoredHashIndex(i, n>>uint(i)-1) + } + + // Fetch hashes. + old, err := r.ReadHashes(indexes) + if err != nil { + return nil, err + } + if len(old) != len(indexes) { + return nil, fmt.Errorf("tlog: ReadHashes(%d indexes) = %d hashes", len(indexes), len(old)) + } + + // Build new hashes. + for i := 0; i < m; i++ { + h = NodeHash(old[m-1-i], h) + hashes = append(hashes, h) + } + return hashes, nil +} + +// A HashReader can read hashes for nodes in the log's tree structure. +type HashReader interface { + // ReadHashes returns the hashes with the given stored hash indexes + // (see StoredHashIndex and SplitStoredHashIndex). + // ReadHashes must return a slice of hashes the same length as indexes, + // or else it must return a non-nil error. + // ReadHashes may run faster if indexes is sorted in increasing order. + ReadHashes(indexes []int64) ([]Hash, error) +} + +// A HashReaderFunc is a function implementing HashReader. +type HashReaderFunc func([]int64) ([]Hash, error) + +func (f HashReaderFunc) ReadHashes(indexes []int64) ([]Hash, error) { + return f(indexes) +} + +// TreeHash computes the hash for the root of the tree with n records, +// using the HashReader to obtain previously stored hashes +// (those returned by StoredHashes during the writes of those n records). +// TreeHash makes a single call to ReadHash requesting at most 1 + logâ‚‚ n hashes. +// The tree of size zero is defined to have an all-zero Hash. +func TreeHash(n int64, r HashReader) (Hash, error) { + if n == 0 { + return Hash{}, nil + } + indexes := subTreeIndex(0, n, nil) + hashes, err := r.ReadHashes(indexes) + if err != nil { + return Hash{}, err + } + if len(hashes) != len(indexes) { + return Hash{}, fmt.Errorf("tlog: ReadHashes(%d indexes) = %d hashes", len(indexes), len(hashes)) + } + hash, hashes := subTreeHash(0, n, hashes) + if len(hashes) != 0 { + panic("tlog: bad index math in TreeHash") + } + return hash, nil +} + +// subTreeIndex returns the storage indexes needed to compute +// the hash for the subtree containing records [lo, hi), +// appending them to need and returning the result. +// See https://tools.ietf.org/html/rfc6962#section-2.1 +func subTreeIndex(lo, hi int64, need []int64) []int64 { + // See subTreeHash below for commentary. + for lo < hi { + k, level := maxpow2(hi - lo + 1) + if lo&(k-1) != 0 { + panic("tlog: bad math in subTreeIndex") + } + need = append(need, StoredHashIndex(level, lo>>uint(level))) + lo += k + } + return need +} + +// subTreeHash computes the hash for the subtree containing records [lo, hi), +// assuming that hashes are the hashes corresponding to the indexes +// returned by subTreeIndex(lo, hi). +// It returns any leftover hashes. +func subTreeHash(lo, hi int64, hashes []Hash) (Hash, []Hash) { + // Repeatedly partition the tree into a left side with 2^level nodes, + // for as large a level as possible, and a right side with the fringe. + // The left hash is stored directly and can be read from storage. + // The right side needs further computation. + numTree := 0 + for lo < hi { + k, _ := maxpow2(hi - lo + 1) + if lo&(k-1) != 0 || lo >= hi { + panic("tlog: bad math in subTreeHash") + } + numTree++ + lo += k + } + + if len(hashes) < numTree { + panic("tlog: bad index math in subTreeHash") + } + + // Reconstruct hash. + h := hashes[numTree-1] + for i := numTree - 2; i >= 0; i-- { + h = NodeHash(hashes[i], h) + } + return h, hashes[numTree:] +} + +// A RecordProof is a verifiable proof that a particular log root contains a particular record. +// RFC 6962 calls this a “Merkle audit path.†+type RecordProof []Hash + +// ProveRecord returns the proof that the tree of size t contains the record with index n. +func ProveRecord(t, n int64, r HashReader) (RecordProof, error) { + if t < 0 || n < 0 || n >= t { + return nil, fmt.Errorf("tlog: invalid inputs in ProveRecord") + } + indexes := leafProofIndex(0, t, n, nil) + if len(indexes) == 0 { + return RecordProof{}, nil + } + hashes, err := r.ReadHashes(indexes) + if err != nil { + return nil, err + } + if len(hashes) != len(indexes) { + return nil, fmt.Errorf("tlog: ReadHashes(%d indexes) = %d hashes", len(indexes), len(hashes)) + } + + p, hashes := leafProof(0, t, n, hashes) + if len(hashes) != 0 { + panic("tlog: bad index math in ProveRecord") + } + return p, nil +} + +// leafProofIndex builds the list of indexes needed to construct the proof +// that leaf n is contained in the subtree with leaves [lo, hi). +// It appends those indexes to need and returns the result. +// See https://tools.ietf.org/html/rfc6962#section-2.1.1 +func leafProofIndex(lo, hi, n int64, need []int64) []int64 { + // See leafProof below for commentary. + if !(lo <= n && n < hi) { + panic("tlog: bad math in leafProofIndex") + } + if lo+1 == hi { + return need + } + if k, _ := maxpow2(hi - lo); n < lo+k { + need = leafProofIndex(lo, lo+k, n, need) + need = subTreeIndex(lo+k, hi, need) + } else { + need = subTreeIndex(lo, lo+k, need) + need = leafProofIndex(lo+k, hi, n, need) + } + return need +} + +// leafProof constructs the proof that leaf n is contained in the subtree with leaves [lo, hi). +// It returns any leftover hashes as well. +// See https://tools.ietf.org/html/rfc6962#section-2.1.1 +func leafProof(lo, hi, n int64, hashes []Hash) (RecordProof, []Hash) { + // We must have lo <= n < hi or else the code here has a bug. + if !(lo <= n && n < hi) { + panic("tlog: bad math in leafProof") + } + + if lo+1 == hi { // n == lo + // Reached the leaf node. + // The verifier knows what the leaf hash is, so we don't need to send it. + return RecordProof{}, hashes + } + + // Walk down the tree toward n. + // Record the hash of the path not taken (needed for verifying the proof). + var p RecordProof + var th Hash + if k, _ := maxpow2(hi - lo); n < lo+k { + // n is on left side + p, hashes = leafProof(lo, lo+k, n, hashes) + th, hashes = subTreeHash(lo+k, hi, hashes) + } else { + // n is on right side + th, hashes = subTreeHash(lo, lo+k, hashes) + p, hashes = leafProof(lo+k, hi, n, hashes) + } + return append(p, th), hashes +} + +var errProofFailed = errors.New("invalid transparency proof") + +// CheckRecord verifies that p is a valid proof that the tree of size t +// with hash th has an n'th record with hash h. +func CheckRecord(p RecordProof, t int64, th Hash, n int64, h Hash) error { + if t < 0 || n < 0 || n >= t { + return fmt.Errorf("tlog: invalid inputs in CheckRecord") + } + th2, err := runRecordProof(p, 0, t, n, h) + if err != nil { + return err + } + if th2 == th { + return nil + } + return errProofFailed +} + +// runRecordProof runs the proof p that leaf n is contained in the subtree with leaves [lo, hi). +// Running the proof means constructing and returning the implied hash of that +// subtree. +func runRecordProof(p RecordProof, lo, hi, n int64, leafHash Hash) (Hash, error) { + // We must have lo <= n < hi or else the code here has a bug. + if !(lo <= n && n < hi) { + panic("tlog: bad math in runRecordProof") + } + + if lo+1 == hi { // m == lo + // Reached the leaf node. + // The proof must not have any unnecessary hashes. + if len(p) != 0 { + return Hash{}, errProofFailed + } + return leafHash, nil + } + + if len(p) == 0 { + return Hash{}, errProofFailed + } + + k, _ := maxpow2(hi - lo) + if n < lo+k { + th, err := runRecordProof(p[:len(p)-1], lo, lo+k, n, leafHash) + if err != nil { + return Hash{}, err + } + return NodeHash(th, p[len(p)-1]), nil + } else { + th, err := runRecordProof(p[:len(p)-1], lo+k, hi, n, leafHash) + if err != nil { + return Hash{}, err + } + return NodeHash(p[len(p)-1], th), nil + } +} + +// A TreeProof is a verifiable proof that a particular log tree contains +// as a prefix all records present in an earlier tree. +// RFC 6962 calls this a “Merkle consistency proof.†+type TreeProof []Hash + +// ProveTree returns the proof that the tree of size t contains +// as a prefix all the records from the tree of smaller size n. +func ProveTree(t, n int64, h HashReader) (TreeProof, error) { + if t < 1 || n < 1 || n > t { + return nil, fmt.Errorf("tlog: invalid inputs in ProveTree") + } + indexes := treeProofIndex(0, t, n, nil) + if len(indexes) == 0 { + return TreeProof{}, nil + } + hashes, err := h.ReadHashes(indexes) + if err != nil { + return nil, err + } + if len(hashes) != len(indexes) { + return nil, fmt.Errorf("tlog: ReadHashes(%d indexes) = %d hashes", len(indexes), len(hashes)) + } + + p, hashes := treeProof(0, t, n, hashes) + if len(hashes) != 0 { + panic("tlog: bad index math in ProveTree") + } + return p, nil +} + +// treeProofIndex builds the list of indexes needed to construct +// the sub-proof related to the subtree containing records [lo, hi). +// See https://tools.ietf.org/html/rfc6962#section-2.1.2. +func treeProofIndex(lo, hi, n int64, need []int64) []int64 { + // See treeProof below for commentary. + if !(lo < n && n <= hi) { + panic("tlog: bad math in treeProofIndex") + } + + if n == hi { + if lo == 0 { + return need + } + return subTreeIndex(lo, hi, need) + } + + if k, _ := maxpow2(hi - lo); n <= lo+k { + need = treeProofIndex(lo, lo+k, n, need) + need = subTreeIndex(lo+k, hi, need) + } else { + need = subTreeIndex(lo, lo+k, need) + need = treeProofIndex(lo+k, hi, n, need) + } + return need +} + +// treeProof constructs the sub-proof related to the subtree containing records [lo, hi). +// It returns any leftover hashes as well. +// See https://tools.ietf.org/html/rfc6962#section-2.1.2. +func treeProof(lo, hi, n int64, hashes []Hash) (TreeProof, []Hash) { + // We must have lo < n <= hi or else the code here has a bug. + if !(lo < n && n <= hi) { + panic("tlog: bad math in treeProof") + } + + // Reached common ground. + if n == hi { + if lo == 0 { + // This subtree corresponds exactly to the old tree. + // The verifier knows that hash, so we don't need to send it. + return TreeProof{}, hashes + } + th, hashes := subTreeHash(lo, hi, hashes) + return TreeProof{th}, hashes + } + + // Interior node for the proof. + // Decide whether to walk down the left or right side. + var p TreeProof + var th Hash + if k, _ := maxpow2(hi - lo); n <= lo+k { + // m is on left side + p, hashes = treeProof(lo, lo+k, n, hashes) + th, hashes = subTreeHash(lo+k, hi, hashes) + } else { + // m is on right side + th, hashes = subTreeHash(lo, lo+k, hashes) + p, hashes = treeProof(lo+k, hi, n, hashes) + } + return append(p, th), hashes +} + +// CheckTree verifies that p is a valid proof that the tree of size t with hash th +// contains as a prefix the tree of size n with hash h. +func CheckTree(p TreeProof, t int64, th Hash, n int64, h Hash) error { + if t < 1 || n < 1 || n > t { + return fmt.Errorf("tlog: invalid inputs in CheckTree") + } + h2, th2, err := runTreeProof(p, 0, t, n, h) + if err != nil { + return err + } + if th2 == th && h2 == h { + return nil + } + return errProofFailed +} + +// runTreeProof runs the sub-proof p related to the subtree containing records [lo, hi), +// where old is the hash of the old tree with n records. +// Running the proof means constructing and returning the implied hashes of that +// subtree in both the old and new tree. +func runTreeProof(p TreeProof, lo, hi, n int64, old Hash) (Hash, Hash, error) { + // We must have lo < n <= hi or else the code here has a bug. + if !(lo < n && n <= hi) { + panic("tlog: bad math in runTreeProof") + } + + // Reached common ground. + if n == hi { + if lo == 0 { + if len(p) != 0 { + return Hash{}, Hash{}, errProofFailed + } + return old, old, nil + } + if len(p) != 1 { + return Hash{}, Hash{}, errProofFailed + } + return p[0], p[0], nil + } + + if len(p) == 0 { + return Hash{}, Hash{}, errProofFailed + } + + // Interior node for the proof. + k, _ := maxpow2(hi - lo) + if n <= lo+k { + oh, th, err := runTreeProof(p[:len(p)-1], lo, lo+k, n, old) + if err != nil { + return Hash{}, Hash{}, err + } + return oh, NodeHash(th, p[len(p)-1]), nil + } else { + oh, th, err := runTreeProof(p[:len(p)-1], lo+k, hi, n, old) + if err != nil { + return Hash{}, Hash{}, err + } + return NodeHash(p[len(p)-1], oh), NodeHash(p[len(p)-1], th), nil + } +} diff --git a/src/cmd/go/internal/tlog/tlog_test.go b/src/cmd/go/internal/tlog/tlog_test.go new file mode 100644 index 0000000000..584e728c1b --- /dev/null +++ b/src/cmd/go/internal/tlog/tlog_test.go @@ -0,0 +1,269 @@ +// 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 tlog + +import ( + "bytes" + "fmt" + "testing" +) + +type testHashStorage []Hash + +func (t testHashStorage) ReadHash(level int, n int64) (Hash, error) { + return t[StoredHashIndex(level, n)], nil +} + +func (t testHashStorage) ReadHashes(index []int64) ([]Hash, error) { + // It's not required by HashReader that indexes be in increasing order, + // but check that the functions we are testing only ever ask for + // indexes in increasing order. + for i := 1; i < len(index); i++ { + if index[i-1] >= index[i] { + panic("indexes out of order") + } + } + + out := make([]Hash, len(index)) + for i, x := range index { + out[i] = t[x] + } + return out, nil +} + +type testTilesStorage struct { + unsaved int + m map[Tile][]byte +} + +func (t testTilesStorage) Height() int { + return 2 +} + +func (t *testTilesStorage) SaveTiles(tiles []Tile, data [][]byte) { + t.unsaved -= len(tiles) +} + +func (t *testTilesStorage) ReadTiles(tiles []Tile) ([][]byte, error) { + out := make([][]byte, len(tiles)) + for i, tile := range tiles { + out[i] = t.m[tile] + } + t.unsaved += len(tiles) + return out, nil +} + +func TestTree(t *testing.T) { + var trees []Hash + var leafhashes []Hash + var storage testHashStorage + tiles := make(map[Tile][]byte) + const testH = 2 + for i := int64(0); i < 100; i++ { + data := []byte(fmt.Sprintf("leaf %d", i)) + hashes, err := StoredHashes(i, data, storage) + if err != nil { + t.Fatal(err) + } + leafhashes = append(leafhashes, RecordHash(data)) + oldStorage := len(storage) + storage = append(storage, hashes...) + if count := StoredHashCount(i + 1); count != int64(len(storage)) { + t.Errorf("StoredHashCount(%d) = %d, have %d StoredHashes", i+1, count, len(storage)) + } + th, err := TreeHash(i+1, storage) + if err != nil { + t.Fatal(err) + } + + for _, tile := range NewTiles(testH, i, i+1) { + data, err := ReadTileData(tile, storage) + if err != nil { + t.Fatal(err) + } + old := Tile{H: tile.H, L: tile.L, N: tile.N, W: tile.W - 1} + oldData := tiles[old] + if len(oldData) != len(data)-HashSize || !bytes.Equal(oldData, data[:len(oldData)]) { + t.Fatalf("tile %v not extending earlier tile %v", tile.Path(), old.Path()) + } + tiles[tile] = data + } + for _, tile := range NewTiles(testH, 0, i+1) { + data, err := ReadTileData(tile, storage) + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(tiles[tile], data) { + t.Fatalf("mismatch at %+v", tile) + } + } + for _, tile := range NewTiles(testH, i/2, i+1) { + data, err := ReadTileData(tile, storage) + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(tiles[tile], data) { + t.Fatalf("mismatch at %+v", tile) + } + } + + // Check that all the new hashes are readable from their tiles. + for j := oldStorage; j < len(storage); j++ { + tile := TileForIndex(testH, int64(j)) + data, ok := tiles[tile] + if !ok { + t.Log(NewTiles(testH, 0, i+1)) + t.Fatalf("TileForIndex(%d, %d) = %v, not yet stored (i=%d, stored %d)", testH, j, tile.Path(), i, len(storage)) + continue + } + h, err := HashFromTile(tile, data, int64(j)) + if err != nil { + t.Fatal(err) + } + if h != storage[j] { + t.Errorf("HashFromTile(%v, %d) = %v, want %v", tile.Path(), int64(j), h, storage[j]) + } + } + + trees = append(trees, th) + + // Check that leaf proofs work, for all trees and leaves so far. + for j := int64(0); j <= i; j++ { + p, err := ProveRecord(i+1, j, storage) + if err != nil { + t.Fatalf("ProveRecord(%d, %d): %v", i+1, j, err) + } + if err := CheckRecord(p, i+1, th, j, leafhashes[j]); err != nil { + t.Fatalf("CheckRecord(%d, %d): %v", i+1, j, err) + } + for k := range p { + p[k][0] ^= 1 + if err := CheckRecord(p, i+1, th, j, leafhashes[j]); err == nil { + t.Fatalf("CheckRecord(%d, %d) succeeded with corrupt proof hash #%d!", i+1, j, k) + } + p[k][0] ^= 1 + } + } + + // Check that leaf proofs work using TileReader. + // To prove a leaf that way, all you have to do is read and verify its hash. + storage := &testTilesStorage{m: tiles} + thr := TileHashReader(Tree{i + 1, th}, storage) + for j := int64(0); j <= i; j++ { + h, err := thr.ReadHashes([]int64{StoredHashIndex(0, j)}) + if err != nil { + t.Fatalf("TileHashReader(%d).ReadHashes(%d): %v", i+1, j, err) + } + if h[0] != leafhashes[j] { + t.Fatalf("TileHashReader(%d).ReadHashes(%d) returned wrong hash", i+1, j) + } + + // Even though reading the hash suffices, + // check we can generate the proof too. + p, err := ProveRecord(i+1, j, thr) + if err != nil { + t.Fatalf("ProveRecord(%d, %d, TileHashReader(%d)): %v", i+1, j, i+1, err) + } + if err := CheckRecord(p, i+1, th, j, leafhashes[j]); err != nil { + t.Fatalf("CheckRecord(%d, %d, TileHashReader(%d)): %v", i+1, j, i+1, err) + } + } + if storage.unsaved != 0 { + t.Fatalf("TileHashReader(%d) did not save %d tiles", i+1, storage.unsaved) + } + + // Check that ReadHashes will give an error if the index is not in the tree. + if _, err := thr.ReadHashes([]int64{(i + 1) * 2}); err == nil { + t.Fatalf("TileHashReader(%d).ReadHashes(%d) for index not in tree , want err", i, i+1) + } + if storage.unsaved != 0 { + t.Fatalf("TileHashReader(%d) did not save %d tiles", i+1, storage.unsaved) + } + + // Check that tree proofs work, for all trees so far, using TileReader. + // To prove a tree that way, all you have to do is compute and verify its hash. + for j := int64(0); j <= i; j++ { + h, err := TreeHash(j+1, thr) + if err != nil { + t.Fatalf("TreeHash(%d, TileHashReader(%d)): %v", j, i+1, err) + } + if h != trees[j] { + t.Fatalf("TreeHash(%d, TileHashReader(%d)) = %x, want %x (%v)", j, i+1, h[:], trees[j][:], trees[j]) + } + + // Even though computing the subtree hash suffices, + // check that we can generate the proof too. + p, err := ProveTree(i+1, j+1, thr) + if err != nil { + t.Fatalf("ProveTree(%d, %d): %v", i+1, j+1, err) + } + if err := CheckTree(p, i+1, th, j+1, trees[j]); err != nil { + t.Fatalf("CheckTree(%d, %d): %v [%v]", i+1, j+1, err, p) + } + for k := range p { + p[k][0] ^= 1 + if err := CheckTree(p, i+1, th, j+1, trees[j]); err == nil { + t.Fatalf("CheckTree(%d, %d) succeeded with corrupt proof hash #%d!", i+1, j+1, k) + } + p[k][0] ^= 1 + } + } + if storage.unsaved != 0 { + t.Fatalf("TileHashReader(%d) did not save %d tiles", i+1, storage.unsaved) + } + } +} + +func TestSplitStoredHashIndex(t *testing.T) { + for l := 0; l < 10; l++ { + for n := int64(0); n < 100; n++ { + x := StoredHashIndex(l, n) + l1, n1 := SplitStoredHashIndex(x) + if l1 != l || n1 != n { + t.Fatalf("StoredHashIndex(%d, %d) = %d, but SplitStoredHashIndex(%d) = %d, %d", l, n, x, x, l1, n1) + } + } + } +} + +// TODO(rsc): Test invalid paths too, like "tile/3/5/123/456/078". +var tilePaths = []struct { + path string + tile Tile +}{ + {"tile/4/0/001", Tile{4, 0, 1, 16}}, + {"tile/4/0/001.p/5", Tile{4, 0, 1, 5}}, + {"tile/3/5/x123/x456/078", Tile{3, 5, 123456078, 8}}, + {"tile/3/5/x123/x456/078.p/2", Tile{3, 5, 123456078, 2}}, + {"tile/1/0/x003/x057/500", Tile{1, 0, 3057500, 2}}, + {"tile/3/5/123/456/078", Tile{}}, + {"tile/3/-1/123/456/078", Tile{}}, + {"tile/1/data/x003/x057/500", Tile{1, -1, 3057500, 2}}, +} + +func TestTilePath(t *testing.T) { + for _, tt := range tilePaths { + if tt.tile.H > 0 { + p := tt.tile.Path() + if p != tt.path { + t.Errorf("%+v.Path() = %q, want %q", tt.tile, p, tt.path) + } + } + tile, err := ParseTilePath(tt.path) + if err != nil { + if tt.tile.H == 0 { + // Expected error. + continue + } + t.Errorf("ParseTilePath(%q): %v", tt.path, err) + } else if tile != tt.tile { + if tt.tile.H == 0 { + t.Errorf("ParseTilePath(%q): expected error, got %+v", tt.path, tt.tile) + continue + } + t.Errorf("ParseTilePath(%q) = %+v, want %+v", tt.path, tile, tt.tile) + } + } +} diff --git a/src/cmd/go/internal/tool/tool.go b/src/cmd/go/internal/tool/tool.go index edcf93513d..930eecb63f 100644 --- a/src/cmd/go/internal/tool/tool.go +++ b/src/cmd/go/internal/tool/tool.go @@ -83,8 +83,6 @@ func runTool(cmd *base.Command, args []string) { Stdin: os.Stdin, Stdout: os.Stdout, Stderr: os.Stderr, - // Set $GOROOT, mainly for go tool dist. - Env: base.MergeEnvLists([]string{"GOROOT=" + cfg.GOROOT}, os.Environ()), } err := toolCmd.Run() if err != nil { diff --git a/src/cmd/go/internal/version/exe.go b/src/cmd/go/internal/version/exe.go new file mode 100644 index 0000000000..55da960c02 --- /dev/null +++ b/src/cmd/go/internal/version/exe.go @@ -0,0 +1,252 @@ +// 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 version + +import ( + "bytes" + "debug/elf" + "debug/macho" + "debug/pe" + "fmt" + "internal/xcoff" + "io" + "os" +) + +// An exe is a generic interface to an OS executable (ELF, Mach-O, PE, XCOFF). +type exe interface { + // Close closes the underlying file. + Close() error + + // ReadData reads and returns up to size byte starting at virtual address addr. + ReadData(addr, size uint64) ([]byte, error) + + // DataStart returns the writable data segment start address. + DataStart() uint64 +} + +// openExe opens file and returns it as an exe. +func openExe(file string) (exe, error) { + f, err := os.Open(file) + if err != nil { + return nil, err + } + data := make([]byte, 16) + if _, err := io.ReadFull(f, data); err != nil { + return nil, err + } + f.Seek(0, 0) + if bytes.HasPrefix(data, []byte("\x7FELF")) { + e, err := elf.NewFile(f) + if err != nil { + f.Close() + return nil, err + } + return &elfExe{f, e}, nil + } + if bytes.HasPrefix(data, []byte("MZ")) { + e, err := pe.NewFile(f) + if err != nil { + f.Close() + return nil, err + } + return &peExe{f, e}, nil + } + if bytes.HasPrefix(data, []byte("\xFE\xED\xFA")) || bytes.HasPrefix(data[1:], []byte("\xFA\xED\xFE")) { + e, err := macho.NewFile(f) + if err != nil { + f.Close() + return nil, err + } + return &machoExe{f, e}, nil + } + if bytes.HasPrefix(data, []byte{0x01, 0xDF}) || bytes.HasPrefix(data, []byte{0x01, 0xF7}) { + e, err := xcoff.NewFile(f) + if err != nil { + f.Close() + return nil, err + } + return &xcoffExe{f, e}, nil + + } + return nil, fmt.Errorf("unrecognized executable format") +} + +// elfExe is the ELF implementation of the exe interface. +type elfExe struct { + os *os.File + f *elf.File +} + +func (x *elfExe) Close() error { + return x.os.Close() +} + +func (x *elfExe) ReadData(addr, size uint64) ([]byte, error) { + for _, prog := range x.f.Progs { + if prog.Vaddr <= addr && addr <= prog.Vaddr+prog.Filesz-1 { + n := prog.Vaddr + prog.Filesz - addr + if n > size { + n = size + } + data := make([]byte, n) + _, err := prog.ReadAt(data, int64(addr-prog.Vaddr)) + if err != nil { + return nil, err + } + return data, nil + } + } + return nil, fmt.Errorf("address not mapped") +} + +func (x *elfExe) DataStart() uint64 { + for _, p := range x.f.Progs { + if p.Type == elf.PT_LOAD && p.Flags&(elf.PF_X|elf.PF_W) == elf.PF_W { + return p.Vaddr + } + } + return 0 +} + +// peExe is the PE (Windows Portable Executable) implementation of the exe interface. +type peExe struct { + os *os.File + f *pe.File +} + +func (x *peExe) Close() error { + return x.os.Close() +} + +func (x *peExe) imageBase() uint64 { + switch oh := x.f.OptionalHeader.(type) { + case *pe.OptionalHeader32: + return uint64(oh.ImageBase) + case *pe.OptionalHeader64: + return oh.ImageBase + } + return 0 +} + +func (x *peExe) ReadData(addr, size uint64) ([]byte, error) { + addr -= x.imageBase() + for _, sect := range x.f.Sections { + if uint64(sect.VirtualAddress) <= addr && addr <= uint64(sect.VirtualAddress+sect.Size-1) { + n := uint64(sect.VirtualAddress+sect.Size) - addr + if n > size { + n = size + } + data := make([]byte, n) + _, err := sect.ReadAt(data, int64(addr-uint64(sect.VirtualAddress))) + if err != nil { + return nil, err + } + return data, nil + } + } + return nil, fmt.Errorf("address not mapped") +} + +func (x *peExe) DataStart() uint64 { + // Assume data is first writable section. + const ( + IMAGE_SCN_CNT_CODE = 0x00000020 + IMAGE_SCN_CNT_INITIALIZED_DATA = 0x00000040 + IMAGE_SCN_CNT_UNINITIALIZED_DATA = 0x00000080 + IMAGE_SCN_MEM_EXECUTE = 0x20000000 + IMAGE_SCN_MEM_READ = 0x40000000 + IMAGE_SCN_MEM_WRITE = 0x80000000 + IMAGE_SCN_MEM_DISCARDABLE = 0x2000000 + IMAGE_SCN_LNK_NRELOC_OVFL = 0x1000000 + IMAGE_SCN_ALIGN_32BYTES = 0x600000 + ) + for _, sect := range x.f.Sections { + if sect.VirtualAddress != 0 && sect.Size != 0 && + sect.Characteristics&^IMAGE_SCN_ALIGN_32BYTES == IMAGE_SCN_CNT_INITIALIZED_DATA|IMAGE_SCN_MEM_READ|IMAGE_SCN_MEM_WRITE { + return uint64(sect.VirtualAddress) + x.imageBase() + } + } + return 0 +} + +// machoExe is the Mach-O (Apple macOS/iOS) implementation of the exe interface. +type machoExe struct { + os *os.File + f *macho.File +} + +func (x *machoExe) Close() error { + return x.os.Close() +} + +func (x *machoExe) ReadData(addr, size uint64) ([]byte, error) { + for _, load := range x.f.Loads { + seg, ok := load.(*macho.Segment) + if !ok { + continue + } + if seg.Addr <= addr && addr <= seg.Addr+seg.Filesz-1 { + if seg.Name == "__PAGEZERO" { + continue + } + n := seg.Addr + seg.Filesz - addr + if n > size { + n = size + } + data := make([]byte, n) + _, err := seg.ReadAt(data, int64(addr-seg.Addr)) + if err != nil { + return nil, err + } + return data, nil + } + } + return nil, fmt.Errorf("address not mapped") +} + +func (x *machoExe) DataStart() uint64 { + // Assume data is first non-empty writable segment. + const RW = 3 + for _, load := range x.f.Loads { + seg, ok := load.(*macho.Segment) + if ok && seg.Addr != 0 && seg.Filesz != 0 && seg.Prot == RW && seg.Maxprot == RW { + return seg.Addr + } + } + return 0 +} + +// xcoffExe is the XCOFF (AIX eXtended COFF) implementation of the exe interface. +type xcoffExe struct { + os *os.File + f *xcoff.File +} + +func (x *xcoffExe) Close() error { + return x.os.Close() +} + +func (x *xcoffExe) ReadData(addr, size uint64) ([]byte, error) { + for _, sect := range x.f.Sections { + if uint64(sect.VirtualAddress) <= addr && addr <= uint64(sect.VirtualAddress+sect.Size-1) { + n := uint64(sect.VirtualAddress+sect.Size) - addr + if n > size { + n = size + } + data := make([]byte, n) + _, err := sect.ReadAt(data, int64(addr-uint64(sect.VirtualAddress))) + if err != nil { + return nil, err + } + return data, nil + } + } + return nil, fmt.Errorf("address not mapped") +} + +func (x *xcoffExe) DataStart() uint64 { + return x.f.SectionByType(xcoff.STYP_DATA).VirtualAddress +} diff --git a/src/cmd/go/internal/version/version.go b/src/cmd/go/internal/version/version.go index 9344a28dc3..857548c7ed 100644 --- a/src/cmd/go/internal/version/version.go +++ b/src/cmd/go/internal/version/version.go @@ -6,23 +6,196 @@ package version import ( + "bytes" + "encoding/binary" "fmt" + "os" + "path/filepath" "runtime" + "strings" "cmd/go/internal/base" ) var CmdVersion = &base.Command{ - Run: runVersion, - UsageLine: "go version", + UsageLine: "go version [-m] [-v] [file ...]", Short: "print Go version", - Long: `Version prints the Go version, as reported by runtime.Version.`, + Long: `Version prints the build information for Go executables. + +Go version reports the Go version used to build each of the named +executable files. + +If no files are named on the command line, go version prints its own +version information. + +If a directory is named, go version walks that directory, recursively, +looking for recognized Go binaries and reporting their versions. +By default, go version does not report unrecognized files found +during a directory scan. The -v flag causes it to report unrecognized files. + +The -m flag causes go version to print each executable's embedded +module version information, when available. In the output, the module +information consists of multiple lines following the version line, each +indented by a leading tab character. + +See also: go doc runtime/debug.BuildInfo. +`, } +func init() { + CmdVersion.Run = runVersion // break init cycle +} + +var ( + versionM = CmdVersion.Flag.Bool("m", false, "") + versionV = CmdVersion.Flag.Bool("v", false, "") +) + func runVersion(cmd *base.Command, args []string) { - if len(args) != 0 { - cmd.Usage() + if len(args) == 0 { + fmt.Printf("go version %s %s/%s\n", runtime.Version(), runtime.GOOS, runtime.GOARCH) + return } - fmt.Printf("go version %s %s/%s\n", runtime.Version(), runtime.GOOS, runtime.GOARCH) + for _, arg := range args { + info, err := os.Stat(arg) + if err != nil { + fmt.Fprintf(os.Stderr, "%v\n", err) + continue + } + if info.IsDir() { + scanDir(arg) + } else { + scanFile(arg, info, true) + } + } +} + +// scanDir scans a directory for executables to run scanFile on. +func scanDir(dir string) { + filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { + if info.Mode().IsRegular() || info.Mode()&os.ModeSymlink != 0 { + scanFile(path, info, *versionV) + } + return nil + }) +} + +// isExe reports whether the file should be considered executable. +func isExe(file string, info os.FileInfo) bool { + if runtime.GOOS == "windows" { + return strings.HasSuffix(strings.ToLower(file), ".exe") + } + return info.Mode().IsRegular() && info.Mode()&0111 != 0 +} + +// scanFile scans file to try to report the Go and module versions. +// If mustPrint is true, scanFile will report any error reading file. +// Otherwise (mustPrint is false, because scanFile is being called +// by scanDir) scanFile prints nothing for non-Go executables. +func scanFile(file string, info os.FileInfo, mustPrint bool) { + if info.Mode()&os.ModeSymlink != 0 { + // Accept file symlinks only. + i, err := os.Stat(file) + if err != nil || !i.Mode().IsRegular() { + if mustPrint { + fmt.Fprintf(os.Stderr, "%s: symlink\n", file) + } + return + } + info = i + } + if !isExe(file, info) { + if mustPrint { + fmt.Fprintf(os.Stderr, "%s: not executable file\n", file) + } + return + } + + x, err := openExe(file) + if err != nil { + if mustPrint { + fmt.Fprintf(os.Stderr, "%s: %v\n", file, err) + } + return + } + defer x.Close() + + vers, mod := findVers(x) + if vers == "" { + if mustPrint { + fmt.Fprintf(os.Stderr, "%s: go version not found\n", file) + } + return + } + + fmt.Printf("%s: %s\n", file, vers) + if *versionM && mod != "" { + fmt.Printf("\t%s\n", strings.Replace(mod[:len(mod)-1], "\n", "\n\t", -1)) + } +} + +// The build info blob left by the linker is identified by +// a 16-byte header, consisting of buildInfoMagic (14 bytes), +// the binary's pointer size (1 byte), +// and whether the binary is big endian (1 byte). +var buildInfoMagic = []byte("\xff Go buildinf:") + +// findVers finds and returns the Go version and module version information +// in the executable x. +func findVers(x exe) (vers, mod string) { + // Read the first 64kB of text to find the build info blob. + text := x.DataStart() + data, err := x.ReadData(text, 64*1024) + if err != nil { + return + } + for ; !bytes.HasPrefix(data, buildInfoMagic); data = data[32:] { + if len(data) < 32 { + return + } + } + + // Decode the blob. + ptrSize := int(data[14]) + bigEndian := data[15] != 0 + var bo binary.ByteOrder + if bigEndian { + bo = binary.BigEndian + } else { + bo = binary.LittleEndian + } + var readPtr func([]byte) uint64 + if ptrSize == 4 { + readPtr = func(b []byte) uint64 { return uint64(bo.Uint32(b)) } + } else { + readPtr = bo.Uint64 + } + vers = readString(x, ptrSize, readPtr, readPtr(data[16:])) + if vers == "" { + return + } + mod = readString(x, ptrSize, readPtr, readPtr(data[16+ptrSize:])) + if len(mod) >= 33 && mod[len(mod)-17] == '\n' { + // Strip module framing. + mod = mod[16 : len(mod)-16] + } else { + mod = "" + } + return +} + +// readString returns the string at address addr in the executable x. +func readString(x exe, ptrSize int, readPtr func([]byte) uint64, addr uint64) string { + hdr, err := x.ReadData(addr, uint64(2*ptrSize)) + if err != nil || len(hdr) < 2*ptrSize { + return "" + } + dataAddr := readPtr(hdr) + dataLen := readPtr(hdr[ptrSize:]) + data, err := x.ReadData(dataAddr, dataLen) + if err != nil || uint64(len(data)) < dataLen { + return "" + } + return string(data) } diff --git a/src/cmd/go/internal/vet/vetflag.go b/src/cmd/go/internal/vet/vetflag.go index 37342f4163..cbe7f8ce08 100644 --- a/src/cmd/go/internal/vet/vetflag.go +++ b/src/cmd/go/internal/vet/vetflag.go @@ -76,7 +76,8 @@ func vetFlags(usage func(), args []string) (passToVet, packageNames []string) { vetcmd.Stdout = out if err := vetcmd.Run(); err != nil { fmt.Fprintf(os.Stderr, "go vet: can't execute %s -flags: %v\n", tool, err) - os.Exit(2) + base.SetExitStatus(2) + base.Exit() } var analysisFlags []struct { Name string @@ -85,7 +86,8 @@ func vetFlags(usage func(), args []string) (passToVet, packageNames []string) { } if err := json.Unmarshal(out.Bytes(), &analysisFlags); err != nil { fmt.Fprintf(os.Stderr, "go vet: can't unmarshal JSON from %s -flags: %v", tool, err) - os.Exit(2) + base.SetExitStatus(2) + base.Exit() } // Add vet's flags to vetflagDefn. @@ -134,7 +136,8 @@ func vetFlags(usage func(), args []string) (passToVet, packageNames []string) { if f == nil { fmt.Fprintf(os.Stderr, "vet: flag %q not defined\n", args[i]) fmt.Fprintf(os.Stderr, "Run \"go help vet\" for more information\n") - os.Exit(2) + base.SetExitStatus(2) + base.Exit() } if f.Value != nil { if err := f.Value.Set(value); err != nil { @@ -182,5 +185,6 @@ func usage() { } fmt.Fprintf(os.Stderr, "Run '%s -help' for the vet tool's flags.\n", cmd) - os.Exit(2) + base.SetExitStatus(2) + base.Exit() } diff --git a/src/cmd/go/internal/web/api.go b/src/cmd/go/internal/web/api.go new file mode 100644 index 0000000000..cd0e19d3ff --- /dev/null +++ b/src/cmd/go/internal/web/api.go @@ -0,0 +1,133 @@ +// 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 web defines minimal helper routines for accessing HTTP/HTTPS +// resources without requiring external dependenicies on the net package. +// +// If the cmd_go_bootstrap build tag is present, web avoids the use of the net +// package and returns errors for all network operations. +package web + +import ( + "fmt" + "io" + "io/ioutil" + "net/url" + "os" + "strings" +) + +// SecurityMode specifies whether a function should make network +// calls using insecure transports (eg, plain text HTTP). +// The zero value is "secure". +type SecurityMode int + +const ( + SecureOnly SecurityMode = iota // Reject plain HTTP; validate HTTPS. + DefaultSecurity // Allow plain HTTP if explicit; validate HTTPS. + Insecure // Allow plain HTTP if not explicitly HTTPS; skip HTTPS validation. +) + +// An HTTPError describes an HTTP error response (non-200 result). +type HTTPError struct { + URL string // redacted + Status string + StatusCode int +} + +func (e *HTTPError) Error() string { + return fmt.Sprintf("reading %s: %v", e.URL, e.Status) +} + +func (e *HTTPError) Is(target error) bool { + return target == os.ErrNotExist && (e.StatusCode == 404 || e.StatusCode == 410) +} + +// GetBytes returns the body of the requested resource, or an error if the +// response status was not http.StatusOK. +// +// GetBytes is a convenience wrapper around Get and Response.Err. +func GetBytes(u *url.URL) ([]byte, error) { + resp, err := Get(DefaultSecurity, u) + if err != nil { + return nil, err + } + defer resp.Body.Close() + if err := resp.Err(); err != nil { + return nil, err + } + b, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, fmt.Errorf("reading %s: %v", Redacted(u), err) + } + return b, nil +} + +type Response struct { + URL string // redacted + Status string + StatusCode int + Header map[string][]string + Body io.ReadCloser +} + +// Err returns an *HTTPError corresponding to the response r. +// It returns nil if the response r has StatusCode 200 or 0 (unset). +func (r *Response) Err() error { + if r.StatusCode == 200 || r.StatusCode == 0 { + return nil + } + return &HTTPError{URL: r.URL, Status: r.Status, StatusCode: r.StatusCode} +} + +// Get returns the body of the HTTP or HTTPS resource specified at the given URL. +// +// If the URL does not include an explicit scheme, Get first tries "https". +// If the server does not respond under that scheme and the security mode is +// Insecure, Get then tries "http". +// The URL included in the response indicates which scheme was actually used, +// and it is a redacted URL suitable for use in error messages. +// +// For the "https" scheme only, credentials are attached using the +// cmd/go/internal/auth package. If the URL itself includes a username and +// password, it will not be attempted under the "http" scheme unless the +// security mode is Insecure. +// +// Get returns a non-nil error only if the request did not receive a response +// under any applicable scheme. (A non-2xx response does not cause an error.) +func Get(security SecurityMode, u *url.URL) (*Response, error) { + return get(security, u) +} + +// Redacted returns a redacted string form of the URL, +// suitable for printing in error messages. +// The string form replaces any non-empty password +// in the original URL with "[redacted]". +func Redacted(u *url.URL) string { + if u.User != nil { + if _, ok := u.User.Password(); ok { + redacted := *u + redacted.User = url.UserPassword(u.User.Username(), "[redacted]") + u = &redacted + } + } + return u.String() +} + +// OpenBrowser attempts to open the requested URL in a web browser. +func OpenBrowser(url string) (opened bool) { + return openBrowser(url) +} + +// Join returns the result of adding the slash-separated +// path elements to the end of u's path. +func Join(u *url.URL, path string) *url.URL { + j := *u + if path == "" { + return &j + } + j.Path = strings.TrimSuffix(u.Path, "/") + "/" + strings.TrimPrefix(path, "/") + j.RawPath = strings.TrimSuffix(u.RawPath, "/") + "/" + strings.TrimPrefix(path, "/") + return &j +} diff --git a/src/cmd/go/internal/web/bootstrap.go b/src/cmd/go/internal/web/bootstrap.go index d1d4621a44..781702100a 100644 --- a/src/cmd/go/internal/web/bootstrap.go +++ b/src/cmd/go/internal/web/bootstrap.go @@ -6,32 +6,18 @@ // This code is compiled only into the bootstrap 'go' binary. // These stubs avoid importing packages with large dependency -// trees, like the use of "net/http" in vcs.go. +// trees that potentially require C linking, +// like the use of "net/http" in vcs.go. package web import ( "errors" - "io" + urlpkg "net/url" ) -var errHTTP = errors.New("no http in bootstrap go command") - -type HTTPError struct { - StatusCode int +func get(security SecurityMode, url *urlpkg.URL) (*Response, error) { + return nil, errors.New("no http in bootstrap go command") } -func (e *HTTPError) Error() string { - panic("unreachable") -} - -func Get(url string) ([]byte, error) { - return nil, errHTTP -} - -func GetMaybeInsecure(importPath string, security SecurityMode) (string, io.ReadCloser, error) { - return "", nil, errHTTP -} - -func QueryEscape(s string) string { panic("unreachable") } -func OpenBrowser(url string) bool { panic("unreachable") } +func openBrowser(url string) bool { return false } diff --git a/src/cmd/go/internal/web/http.go b/src/cmd/go/internal/web/http.go index 6e347fbf86..51a5dfc54d 100644 --- a/src/cmd/go/internal/web/http.go +++ b/src/cmd/go/internal/web/http.go @@ -14,21 +14,16 @@ package web import ( "crypto/tls" "fmt" - "io" - "io/ioutil" "log" "net/http" - "net/url" + urlpkg "net/url" "time" + "cmd/go/internal/auth" "cmd/go/internal/cfg" "cmd/internal/browser" ) -// httpClient is the default HTTP client, but a variable so it can be -// changed by tests, without modifying http.DefaultClient. -var httpClient = http.DefaultClient - // impatientInsecureHTTPClient is used in -insecure mode, // when we're connecting to https servers that might not be there // or might be using self-signed certificates. @@ -42,81 +37,106 @@ var impatientInsecureHTTPClient = &http.Client{ }, } -type HTTPError struct { - status string - StatusCode int - url string +// securityPreservingHTTPClient is like the default HTTP client, but rejects +// redirects to plain-HTTP URLs if the original URL was secure. +var securityPreservingHTTPClient = &http.Client{ + CheckRedirect: func(req *http.Request, via []*http.Request) error { + if len(via) > 0 && via[0].URL.Scheme == "https" && req.URL.Scheme != "https" { + lastHop := via[len(via)-1].URL + return fmt.Errorf("redirected from secure URL %s to insecure URL %s", lastHop, req.URL) + } + return nil + }, } -func (e *HTTPError) Error() string { - return fmt.Sprintf("%s: %s", e.url, e.status) -} +func get(security SecurityMode, url *urlpkg.URL) (*Response, error) { + fetch := func(url *urlpkg.URL) (*urlpkg.URL, *http.Response, error) { + if cfg.BuildV { + log.Printf("Fetching %s", url) + } -// Get returns the data from an HTTP GET request for the given URL. -func Get(url string) ([]byte, error) { - resp, err := httpClient.Get(url) - if err != nil { - return nil, err - } - defer resp.Body.Close() - if resp.StatusCode != 200 { - err := &HTTPError{status: resp.Status, StatusCode: resp.StatusCode, url: url} - - return nil, err - } - b, err := ioutil.ReadAll(resp.Body) - if err != nil { - return nil, fmt.Errorf("%s: %v", url, err) - } - return b, nil -} - -// GetMaybeInsecure returns the body of either the importPath's -// https resource or, if unavailable and permitted by the security mode, the http resource. -func GetMaybeInsecure(importPath string, security SecurityMode) (urlStr string, body io.ReadCloser, err error) { - fetch := func(scheme string) (urlStr string, res *http.Response, err error) { - u, err := url.Parse(scheme + "://" + importPath) + req, err := http.NewRequest("GET", url.String(), nil) if err != nil { - return "", nil, err + return nil, nil, err } - u.RawQuery = "go-get=1" - urlStr = u.String() - if cfg.BuildV { - log.Printf("Fetching %s", urlStr) + if url.Scheme == "https" { + auth.AddCredentials(req) } - if security == Insecure && scheme == "https" { // fail earlier - res, err = impatientInsecureHTTPClient.Get(urlStr) + + var res *http.Response + if security == Insecure && url.Scheme == "https" { // fail earlier + res, err = impatientInsecureHTTPClient.Do(req) } else { - res, err = httpClient.Get(urlStr) + res, err = securityPreservingHTTPClient.Do(req) } - return + return url, res, err } - closeBody := func(res *http.Response) { - if res != nil { - res.Body.Close() + + var ( + fetched *urlpkg.URL + res *http.Response + err error + ) + if url.Scheme == "" || url.Scheme == "https" { + secure := new(urlpkg.URL) + *secure = *url + secure.Scheme = "https" + + fetched, res, err = fetch(secure) + if err != nil { + if cfg.BuildV { + log.Printf("https fetch failed: %v", err) + } + if security != Insecure || url.Scheme == "https" { + // HTTPS failed, and we can't fall back to plain HTTP. + // Report the error from the HTTPS attempt. + return nil, err + } } } - urlStr, res, err := fetch("https") - if err != nil { - if cfg.BuildV { - log.Printf("https fetch failed: %v", err) + + if res == nil { + switch url.Scheme { + case "http": + if security == SecureOnly { + return nil, fmt.Errorf("insecure URL: %s", Redacted(url)) + } + case "": + if security != Insecure { + panic("should have returned after HTTPS failure") + } + default: + return nil, fmt.Errorf("unsupported scheme: %s", Redacted(url)) } - if security == Insecure { - closeBody(res) - urlStr, res, err = fetch("http") + + insecure := new(urlpkg.URL) + *insecure = *url + insecure.Scheme = "http" + if insecure.User != nil && security != Insecure { + return nil, fmt.Errorf("refusing to pass credentials to insecure URL: %s", Redacted(insecure)) + } + + fetched, res, err = fetch(insecure) + if err != nil { + // HTTP failed, and we already tried HTTPS if applicable. + // Report the error from the HTTP attempt. + return nil, err } } - if err != nil { - closeBody(res) - return "", nil, err - } + // Note: accepting a non-200 OK here, so people can serve a // meta import in their http 404 page. if cfg.BuildV { - log.Printf("Parsing meta tags from %s (status code %d)", urlStr, res.StatusCode) + log.Printf("reading from %s: status code %d", Redacted(fetched), res.StatusCode) } - return urlStr, res.Body, nil + r := &Response{ + URL: Redacted(fetched), + Status: res.Status, + StatusCode: res.StatusCode, + Header: map[string][]string(res.Header), + Body: res.Body, + } + return r, nil } -func QueryEscape(s string) string { return url.QueryEscape(s) } -func OpenBrowser(url string) bool { return browser.Open(url) } +func openBrowser(url string) bool { return browser.Open(url) } diff --git a/src/cmd/go/internal/web/security.go b/src/cmd/go/internal/web/security.go deleted file mode 100644 index 1dc6f1b076..0000000000 --- a/src/cmd/go/internal/web/security.go +++ /dev/null @@ -1,16 +0,0 @@ -// 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 web defines helper routines for accessing HTTP/HTTPS resources. -package web - -// SecurityMode specifies whether a function should make network -// calls using insecure transports (eg, plain text HTTP). -// The zero value is "secure". -type SecurityMode int - -const ( - Secure SecurityMode = iota - Insecure -) diff --git a/src/cmd/go/internal/web2/web.go b/src/cmd/go/internal/web2/web.go deleted file mode 100644 index 64934f1d50..0000000000 --- a/src/cmd/go/internal/web2/web.go +++ /dev/null @@ -1,299 +0,0 @@ -// 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 web2 - -import ( - "bytes" - "cmd/go/internal/base" - "cmd/go/internal/cfg" - "encoding/json" - "flag" - "fmt" - "io" - "io/ioutil" - "log" - "net/http" - "os" - "path/filepath" - "runtime" - "runtime/debug" - "strings" - "sync" -) - -var TraceGET = false -var webstack = false - -func init() { - flag.BoolVar(&TraceGET, "webtrace", TraceGET, "trace GET requests") - flag.BoolVar(&webstack, "webstack", webstack, "print stack for GET requests") -} - -type netrcLine struct { - machine string - login string - password string -} - -var netrcOnce sync.Once -var netrc []netrcLine - -func parseNetrc(data string) []netrcLine { - var nrc []netrcLine - var l netrcLine - for _, line := range strings.Split(data, "\n") { - f := strings.Fields(line) - for i := 0; i < len(f)-1; i += 2 { - switch f[i] { - case "machine": - l.machine = f[i+1] - case "login": - l.login = f[i+1] - case "password": - l.password = f[i+1] - } - } - if l.machine != "" && l.login != "" && l.password != "" { - nrc = append(nrc, l) - l = netrcLine{} - } - } - return nrc -} - -func havePassword(machine string) bool { - netrcOnce.Do(readNetrc) - for _, line := range netrc { - if line.machine == machine { - return true - } - } - return false -} - -func netrcPath() string { - switch runtime.GOOS { - case "windows": - return filepath.Join(os.Getenv("USERPROFILE"), "_netrc") - case "plan9": - return filepath.Join(os.Getenv("home"), ".netrc") - default: - return filepath.Join(os.Getenv("HOME"), ".netrc") - } -} - -func readNetrc() { - data, err := ioutil.ReadFile(netrcPath()) - if err != nil { - return - } - netrc = parseNetrc(string(data)) -} - -type getState struct { - req *http.Request - resp *http.Response - body io.ReadCloser - non200ok bool -} - -type Option interface { - option(*getState) error -} - -func Non200OK() Option { - return optionFunc(func(g *getState) error { - g.non200ok = true - return nil - }) -} - -type optionFunc func(*getState) error - -func (f optionFunc) option(g *getState) error { - return f(g) -} - -func DecodeJSON(dst interface{}) Option { - return optionFunc(func(g *getState) error { - if g.resp != nil { - return json.NewDecoder(g.body).Decode(dst) - } - return nil - }) -} - -func ReadAllBody(body *[]byte) Option { - return optionFunc(func(g *getState) error { - if g.resp != nil { - var err error - *body, err = ioutil.ReadAll(g.body) - return err - } - return nil - }) -} - -func Body(body *io.ReadCloser) Option { - return optionFunc(func(g *getState) error { - if g.resp != nil { - *body = g.body - g.body = nil - } - return nil - }) -} - -func Header(hdr *http.Header) Option { - return optionFunc(func(g *getState) error { - if g.resp != nil { - *hdr = CopyHeader(g.resp.Header) - } - return nil - }) -} - -func CopyHeader(hdr http.Header) http.Header { - if hdr == nil { - return nil - } - h2 := make(http.Header) - for k, v := range hdr { - v2 := make([]string, len(v)) - copy(v2, v) - h2[k] = v2 - } - return h2 -} - -var cache struct { - mu sync.Mutex - byURL map[string]*cacheEntry -} - -type cacheEntry struct { - mu sync.Mutex - resp *http.Response - body []byte -} - -var httpDo = http.DefaultClient.Do - -func SetHTTPDoForTesting(do func(*http.Request) (*http.Response, error)) { - if do == nil { - do = http.DefaultClient.Do - } - httpDo = do -} - -func Get(url string, options ...Option) error { - if TraceGET || webstack || cfg.BuildV { - log.Printf("Fetching %s", url) - if webstack { - log.Println(string(debug.Stack())) - } - } - - req, err := http.NewRequest("GET", url, nil) - if err != nil { - return err - } - - netrcOnce.Do(readNetrc) - for _, l := range netrc { - if l.machine == req.URL.Host { - req.SetBasicAuth(l.login, l.password) - break - } - } - - g := &getState{req: req} - for _, o := range options { - if err := o.option(g); err != nil { - return err - } - } - - cache.mu.Lock() - e := cache.byURL[url] - if e == nil { - e = new(cacheEntry) - if !strings.HasPrefix(url, "file:") { - if cache.byURL == nil { - cache.byURL = make(map[string]*cacheEntry) - } - cache.byURL[url] = e - } - } - cache.mu.Unlock() - - e.mu.Lock() - if strings.HasPrefix(url, "file:") { - body, err := ioutil.ReadFile(req.URL.Path) - if err != nil { - e.mu.Unlock() - return err - } - e.body = body - e.resp = &http.Response{ - StatusCode: 200, - } - } else if e.resp == nil { - resp, err := httpDo(req) - if err != nil { - e.mu.Unlock() - return err - } - e.resp = resp - // TODO: Spool to temp file. - body, err := ioutil.ReadAll(resp.Body) - resp.Body.Close() - resp.Body = nil - if err != nil { - e.mu.Unlock() - return err - } - e.body = body - } - g.resp = e.resp - g.body = ioutil.NopCloser(bytes.NewReader(e.body)) - e.mu.Unlock() - - defer func() { - if g.body != nil { - g.body.Close() - } - }() - - if g.resp.StatusCode == 403 && req.URL.Host == "api.github.com" && !havePassword("api.github.com") { - base.Errorf("%s", githubMessage) - } - if !g.non200ok && g.resp.StatusCode != 200 { - return fmt.Errorf("unexpected status (%s): %v", url, g.resp.Status) - } - - for _, o := range options { - if err := o.option(g); err != nil { - return err - } - } - return err -} - -var githubMessage = `go: 403 response from api.github.com - -GitHub applies fairly small rate limits to unauthenticated users, and -you appear to be hitting them. To authenticate, please visit -https://github.com/settings/tokens and click "Generate New Token" to -create a Personal Access Token. The token only needs "public_repo" -scope, but you can add "repo" if you want to access private -repositories too. - -Add the token to your $HOME/.netrc (%USERPROFILE%\_netrc on Windows): - - machine api.github.com login YOU password TOKEN - -Sorry for the interruption. -` diff --git a/src/cmd/go/internal/webtest/test.go b/src/cmd/go/internal/webtest/test.go deleted file mode 100644 index 94b20a33ff..0000000000 --- a/src/cmd/go/internal/webtest/test.go +++ /dev/null @@ -1,314 +0,0 @@ -// 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 webtest - -import ( - "bufio" - "bytes" - "encoding/hex" - "flag" - "fmt" - "io" - "io/ioutil" - "log" - "net/http" - "os" - "sort" - "strconv" - "strings" - "sync" - "unicode/utf8" - - web "cmd/go/internal/web2" -) - -var mode = flag.String("webtest", "replay", "set webtest `mode` - record, replay, bypass") - -func Hook() { - if *mode == "bypass" { - return - } - web.SetHTTPDoForTesting(Do) -} - -func Unhook() { - web.SetHTTPDoForTesting(nil) -} - -func Print() { - web.SetHTTPDoForTesting(DoPrint) -} - -var responses struct { - mu sync.Mutex - byURL map[string]*respEntry -} - -type respEntry struct { - status string - code int - hdr http.Header - body []byte -} - -func Serve(url string, status string, hdr http.Header, body []byte) { - if status == "" { - status = "200 OK" - } - code, err := strconv.Atoi(strings.Fields(status)[0]) - if err != nil { - panic("bad Serve status - " + status + " - " + err.Error()) - } - - responses.mu.Lock() - defer responses.mu.Unlock() - - if responses.byURL == nil { - responses.byURL = make(map[string]*respEntry) - } - responses.byURL[url] = &respEntry{status: status, code: code, hdr: web.CopyHeader(hdr), body: body} -} - -func Do(req *http.Request) (*http.Response, error) { - if req.Method != "GET" { - return nil, fmt.Errorf("bad method - must be GET") - } - - responses.mu.Lock() - e := responses.byURL[req.URL.String()] - responses.mu.Unlock() - - if e == nil { - if *mode == "record" { - loaded.mu.Lock() - if len(loaded.did) != 1 { - loaded.mu.Unlock() - return nil, fmt.Errorf("cannot use -webtest=record with multiple loaded response files") - } - var file string - for file = range loaded.did { - break - } - loaded.mu.Unlock() - return doSave(file, req) - } - e = &respEntry{code: 599, status: "599 unexpected request (no canned response)"} - } - resp := &http.Response{ - Status: e.status, - StatusCode: e.code, - Header: web.CopyHeader(e.hdr), - Body: ioutil.NopCloser(bytes.NewReader(e.body)), - } - return resp, nil -} - -func DoPrint(req *http.Request) (*http.Response, error) { - return doSave("", req) -} - -func doSave(file string, req *http.Request) (*http.Response, error) { - resp, err := http.DefaultClient.Do(req) - if err != nil { - return nil, err - } - data, err := ioutil.ReadAll(resp.Body) - resp.Body.Close() - if err != nil { - return nil, err - } - resp.Body = ioutil.NopCloser(bytes.NewReader(data)) - - var f *os.File - if file == "" { - f = os.Stderr - } else { - f, err = os.OpenFile(file, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) - if err != nil { - log.Fatal(err) - } - defer f.Close() - } - - fmt.Fprintf(f, "GET %s\n", req.URL.String()) - fmt.Fprintf(f, "%s\n", resp.Status) - var keys []string - for k := range resp.Header { - keys = append(keys, k) - } - sort.Strings(keys) - for _, k := range keys { - if k == "Set-Cookie" { - continue - } - for _, v := range resp.Header[k] { - fmt.Fprintf(f, "%s: %s\n", k, v) - } - } - fmt.Fprintf(f, "\n") - if utf8.Valid(data) && !bytes.Contains(data, []byte("\nGET")) && !isHexDump(data) { - fmt.Fprintf(f, "%s\n\n", data) - } else { - fmt.Fprintf(f, "%s\n", hex.Dump(data)) - } - return resp, err -} - -var loaded struct { - mu sync.Mutex - did map[string]bool -} - -func LoadOnce(file string) { - loaded.mu.Lock() - if loaded.did[file] { - loaded.mu.Unlock() - return - } - if loaded.did == nil { - loaded.did = make(map[string]bool) - } - loaded.did[file] = true - loaded.mu.Unlock() - - f, err := os.Open(file) - if err != nil { - log.Fatal(err) - } - defer f.Close() - - b := bufio.NewReader(f) - var ungetLine string - nextLine := func() string { - if ungetLine != "" { - l := ungetLine - ungetLine = "" - return l - } - line, err := b.ReadString('\n') - if err != nil { - if err == io.EOF { - return "" - } - log.Fatalf("%s: unexpected read error: %v", file, err) - } - return line - } - - for { - line := nextLine() - if line == "" { // EOF - break - } - line = strings.TrimSpace(line) - if strings.HasPrefix(line, "#") || line == "" { - continue - } - if !strings.HasPrefix(line, "GET ") { - log.Fatalf("%s: malformed GET line: %s", file, line) - } - url := line[len("GET "):] - status := nextLine() - if _, err := strconv.Atoi(strings.Fields(status)[0]); err != nil { - log.Fatalf("%s: malformed status line (after GET %s): %s", file, url, status) - } - hdr := make(http.Header) - for { - kv := strings.TrimSpace(nextLine()) - if kv == "" { - break - } - i := strings.Index(kv, ":") - if i < 0 { - log.Fatalf("%s: malformed header line (after GET %s): %s", file, url, kv) - } - k, v := kv[:i], strings.TrimSpace(kv[i+1:]) - hdr[k] = append(hdr[k], v) - } - - var body []byte - Body: - for n := 0; ; n++ { - line := nextLine() - if n == 0 && isHexDump([]byte(line)) { - ungetLine = line - b, err := parseHexDump(nextLine) - if err != nil { - log.Fatalf("%s: malformed hex dump (after GET %s): %v", file, url, err) - } - body = b - break - } - if line == "" { // EOF - for i := 0; i < 2; i++ { - if len(body) > 0 && body[len(body)-1] == '\n' { - body = body[:len(body)-1] - } - } - break - } - body = append(body, line...) - for line == "\n" { - line = nextLine() - if strings.HasPrefix(line, "GET ") { - ungetLine = line - body = body[:len(body)-1] - if len(body) > 0 { - body = body[:len(body)-1] - } - break Body - } - body = append(body, line...) - } - } - - Serve(url, status, hdr, body) - } -} - -func isHexDump(data []byte) bool { - return bytes.HasPrefix(data, []byte("00000000 ")) || bytes.HasPrefix(data, []byte("0000000 ")) -} - -// parseHexDump parses the hex dump in text, which should be the -// output of "hexdump -C" or Plan 9's "xd -b" or Go's hex.Dump -// and returns the original data used to produce the dump. -// It is meant to enable storing golden binary files as text, so that -// changes to the golden files can be seen during code reviews. -func parseHexDump(nextLine func() string) ([]byte, error) { - var out []byte - for { - line := nextLine() - if line == "" || line == "\n" { - break - } - if i := strings.Index(line, "|"); i >= 0 { // remove text dump - line = line[:i] - } - f := strings.Fields(line) - if len(f) > 1+16 { - return nil, fmt.Errorf("parsing hex dump: too many fields on line %q", line) - } - if len(f) == 0 || len(f) == 1 && f[0] == "*" { // all zeros block omitted - continue - } - addr64, err := strconv.ParseUint(f[0], 16, 0) - if err != nil { - return nil, fmt.Errorf("parsing hex dump: invalid address %q", f[0]) - } - addr := int(addr64) - if len(out) < addr { - out = append(out, make([]byte, addr-len(out))...) - } - for _, x := range f[1:] { - val, err := strconv.ParseUint(x, 16, 8) - if err != nil { - return nil, fmt.Errorf("parsing hexdump: invalid hex byte %q", x) - } - out = append(out, byte(val)) - } - } - return out, nil -} diff --git a/src/cmd/go/internal/work/action.go b/src/cmd/go/internal/work/action.go index 1f91046eb1..33b7818fb2 100644 --- a/src/cmd/go/internal/work/action.go +++ b/src/cmd/go/internal/work/action.go @@ -16,8 +16,10 @@ import ( "io/ioutil" "os" "path/filepath" + "runtime" "strings" "sync" + "time" "cmd/go/internal/base" "cmd/go/internal/cache" @@ -82,15 +84,17 @@ type Action struct { actionID cache.ActionID // cache ID of action input buildID string // build ID of action output - VetxOnly bool // Mode=="vet": only being called to supply info about dependencies - needVet bool // Mode=="build": need to fill in vet config - vetCfg *vetConfig // vet config - output []byte // output redirect buffer (nil means use b.Print) + VetxOnly bool // Mode=="vet": only being called to supply info about dependencies + needVet bool // Mode=="build": need to fill in vet config + needBuild bool // Mode=="build": need to do actual build (can be false if needVet is true) + vetCfg *vetConfig // vet config + output []byte // output redirect buffer (nil means use b.Print) // Execution state. - pending int // number of deps yet to complete - priority int // relative execution priority - Failed bool // whether the action failed + pending int // number of deps yet to complete + priority int // relative execution priority + Failed bool // whether the action failed + json *actionJSON // action graph information } // BuildActionID returns the action ID section of a's build ID. @@ -122,6 +126,9 @@ func (q *actionQueue) Pop() interface{} { } func (q *actionQueue) push(a *Action) { + if a.json != nil { + a.json.TimeReady = time.Now() + } heap.Push(q, a) } @@ -133,16 +140,28 @@ type actionJSON struct { ID int Mode string Package string - Deps []int `json:",omitempty"` - IgnoreFail bool `json:",omitempty"` - Args []string `json:",omitempty"` - Link bool `json:",omitempty"` - Objdir string `json:",omitempty"` - Target string `json:",omitempty"` - Priority int `json:",omitempty"` - Failed bool `json:",omitempty"` - Built string `json:",omitempty"` - VetxOnly bool `json:",omitempty"` + Deps []int `json:",omitempty"` + IgnoreFail bool `json:",omitempty"` + Args []string `json:",omitempty"` + Link bool `json:",omitempty"` + Objdir string `json:",omitempty"` + Target string `json:",omitempty"` + Priority int `json:",omitempty"` + Failed bool `json:",omitempty"` + Built string `json:",omitempty"` + VetxOnly bool `json:",omitempty"` + NeedVet bool `json:",omitempty"` + NeedBuild bool `json:",omitempty"` + ActionID string `json:",omitempty"` + BuildID string `json:",omitempty"` + TimeReady time.Time `json:",omitempty"` + TimeStart time.Time `json:",omitempty"` + TimeDone time.Time `json:",omitempty"` + + Cmd []string // `json:",omitempty"` + CmdReal time.Duration `json:",omitempty"` + CmdUser time.Duration `json:",omitempty"` + CmdSys time.Duration `json:",omitempty"` } // cacheKey is the key for the action cache. @@ -172,26 +191,30 @@ func actionGraphJSON(a *Action) string { var list []*actionJSON for id, a := range workq { - aj := &actionJSON{ - Mode: a.Mode, - ID: id, - IgnoreFail: a.IgnoreFail, - Args: a.Args, - Objdir: a.Objdir, - Target: a.Target, - Failed: a.Failed, - Priority: a.priority, - Built: a.built, - VetxOnly: a.VetxOnly, + if a.json == nil { + a.json = &actionJSON{ + Mode: a.Mode, + ID: id, + IgnoreFail: a.IgnoreFail, + Args: a.Args, + Objdir: a.Objdir, + Target: a.Target, + Failed: a.Failed, + Priority: a.priority, + Built: a.built, + VetxOnly: a.VetxOnly, + NeedBuild: a.needBuild, + NeedVet: a.needVet, + } + if a.Package != nil { + // TODO(rsc): Make this a unique key for a.Package somehow. + a.json.Package = a.Package.ImportPath + } + for _, a1 := range a.Deps { + a.json.Deps = append(a.json.Deps, inWorkq[a1]) + } } - if a.Package != nil { - // TODO(rsc): Make this a unique key for a.Package somehow. - aj.Package = a.Package.ImportPath - } - for _, a1 := range a.Deps { - aj.Deps = append(aj.Deps, inWorkq[a1]) - } - list = append(list, aj) + list = append(list, a.json) } js, err := json.MarshalIndent(list, "", "\t") @@ -210,6 +233,8 @@ const ( ModeBuild BuildMode = iota ModeInstall ModeBuggyInstall + + ModeVetOnly = 1 << 8 ) func (b *Builder) Init() { @@ -224,7 +249,7 @@ func (b *Builder) Init() { if cfg.BuildN { b.WorkDir = "$WORK" } else { - tmp, err := ioutil.TempDir(os.Getenv("GOTMPDIR"), "go-build") + tmp, err := ioutil.TempDir(cfg.Getenv("GOTMPDIR"), "go-build") if err != nil { base.Fatalf("go: creating work dir: %v", err) } @@ -242,18 +267,39 @@ func (b *Builder) Init() { } if !cfg.BuildWork { workdir := b.WorkDir - base.AtExit(func() { os.RemoveAll(workdir) }) + base.AtExit(func() { + start := time.Now() + for { + err := os.RemoveAll(workdir) + if err == nil { + return + } + + // On some configurations of Windows, directories containing executable + // files may be locked for a while after the executable exits (perhaps + // due to antivirus scans?). It's probably worth a little extra latency + // on exit to avoid filling up the user's temporary directory with leaked + // files. (See golang.org/issue/30789.) + if runtime.GOOS != "windows" || time.Since(start) >= 500*time.Millisecond { + fmt.Fprintf(os.Stderr, "go: failed to remove work dir: %s\n", err) + return + } + time.Sleep(5 * time.Millisecond) + } + }) } } if _, ok := cfg.OSArchSupportsCgo[cfg.Goos+"/"+cfg.Goarch]; !ok && cfg.BuildContext.Compiler == "gc" { fmt.Fprintf(os.Stderr, "cmd/go: unsupported GOOS/GOARCH pair %s/%s\n", cfg.Goos, cfg.Goarch) - os.Exit(2) + base.SetExitStatus(2) + base.Exit() } for _, tag := range cfg.BuildContext.BuildTags { if strings.Contains(tag, ",") { fmt.Fprintf(os.Stderr, "cmd/go: -tags space-separated list contains comma\n") - os.Exit(2) + base.SetExitStatus(2) + base.Exit() } } } @@ -287,7 +333,7 @@ func readpkglist(shlibpath string) (pkgs []*load.Package) { if strings.HasPrefix(t, "pkgpath ") { t = strings.TrimPrefix(t, "pkgpath ") t = strings.TrimSuffix(t, ";") - pkgs = append(pkgs, load.LoadPackage(t, &stk)) + pkgs = append(pkgs, load.LoadImportWithFlags(t, base.Cwd, nil, &stk, nil, 0)) } } } else { @@ -298,7 +344,7 @@ func readpkglist(shlibpath string) (pkgs []*load.Package) { scanner := bufio.NewScanner(bytes.NewBuffer(pkglistbytes)) for scanner.Scan() { t := scanner.Text() - pkgs = append(pkgs, load.LoadPackage(t, &stk)) + pkgs = append(pkgs, load.LoadImportWithFlags(t, base.Cwd, nil, &stk, nil, 0)) } } return @@ -331,6 +377,9 @@ func (b *Builder) AutoAction(mode, depMode BuildMode, p *load.Package) *Action { // depMode is the action (build or install) to use when building dependencies. // To turn package main into an executable, call b.Link instead. func (b *Builder) CompileAction(mode, depMode BuildMode, p *load.Package) *Action { + vetOnly := mode&ModeVetOnly != 0 + mode &^= ModeVetOnly + if mode != ModeBuild && (p.Internal.Local || p.Module != nil) && p.Target == "" { // Imported via local path or using modules. No permanent target. mode = ModeBuild @@ -377,6 +426,19 @@ func (b *Builder) CompileAction(mode, depMode BuildMode, p *load.Package) *Actio return a }) + // Find the build action; the cache entry may have been replaced + // by the install action during (*Builder).installAction. + buildAction := a + switch buildAction.Mode { + case "build", "built-in package", "gccgo stdlib": + // ok + case "build-install": + buildAction = a.Deps[0] + default: + panic("lost build action: " + buildAction.Mode) + } + buildAction.needBuild = buildAction.needBuild || !vetOnly + // Construct install action. if mode == ModeInstall || mode == ModeBuggyInstall { a = b.installAction(a, mode) @@ -398,12 +460,12 @@ func (b *Builder) VetAction(mode, depMode BuildMode, p *load.Package) *Action { func (b *Builder) vetAction(mode, depMode BuildMode, p *load.Package) *Action { // Construct vet action. a := b.cacheAction("vet", p, func() *Action { - a1 := b.CompileAction(mode, depMode, p) + a1 := b.CompileAction(mode|ModeVetOnly, depMode, p) // vet expects to be able to import "fmt". var stk load.ImportStack stk.Push("vet") - p1 := load.LoadPackage("fmt", &stk) + p1 := load.LoadImportWithFlags("fmt", p.Dir, p, &stk, nil, 0) stk.Pop() aFmt := b.CompileAction(ModeBuild, depMode, p1) @@ -417,7 +479,7 @@ func (b *Builder) vetAction(mode, depMode BuildMode, p *load.Package) *Action { } else { deps = []*Action{a1, aFmt} } - for _, p1 := range load.PackageList(p.Internal.Imports) { + for _, p1 := range p.Internal.Imports { deps = append(deps, b.vetAction(mode, depMode, p1)) } @@ -703,7 +765,7 @@ func (b *Builder) linkSharedAction(mode, depMode BuildMode, shlib string, a1 *Ac } } var stk load.ImportStack - p := load.LoadPackage(pkg, &stk) + p := load.LoadImportWithFlags(pkg, base.Cwd, nil, &stk, nil, 0) if p.Error != nil { base.Fatalf("load %s: %v", pkg, p.Error) } diff --git a/src/cmd/go/internal/work/build.go b/src/cmd/go/internal/work/build.go index 145b87513a..9c03f0818d 100644 --- a/src/cmd/go/internal/work/build.go +++ b/src/cmd/go/internal/work/build.go @@ -10,7 +10,6 @@ import ( "go/build" "os" "os/exec" - "path" "path/filepath" "runtime" "strings" @@ -28,8 +27,8 @@ var CmdBuild = &base.Command{ Build compiles the packages named by the import paths, along with their dependencies, but it does not install the results. -If the arguments to build are a list of .go files, build treats -them as a list of source files specifying a single package. +If the arguments to build are a list of .go files from a single directory, +build treats them as a list of source files specifying a single package. When compiling a single main package, build writes the resulting executable to an output file named after @@ -43,10 +42,10 @@ serving only as a check that the packages can be built. When compiling packages, build ignores files that end in '_test.go'. -The -o flag, only allowed when compiling a single package, -forces build to write the resulting executable or object -to the named output file, instead of the default behavior described -in the last two paragraphs. +The -o flag forces build to write the resulting executable or object +to the named output file or directory, instead of the default behavior described +in the last two paragraphs. If the named output is a directory that exists, +then any resulting executables will be written to that directory. The -i flag installs the packages that are dependencies of the target. @@ -105,10 +104,18 @@ and test commands: install and load all packages from dir instead of the usual locations. For example, when building with a non-standard configuration, use -pkgdir to keep generated packages in a separate location. - -tags 'tag list' - a space-separated list of build tags to consider satisfied during the + -tags tag,list + a comma-separated list of build tags to consider satisfied during the build. For more information about build tags, see the description of build constraints in the documentation for the go/build package. + (Earlier versions of Go used a space-separated list, and that form + is deprecated but still recognized.) + -trimpath + remove all file system paths from the resulting executable. + Instead of absolute file system paths, the recorded file names + will begin with either "go" (for the standard library), + or a module path@version (when using modules), + or a plain import path (when using GOPATH). -toolexec 'cmd args' a program to use to invoke toolchain programs like vet and asm. For example, instead of running asm, the go command will run @@ -154,7 +161,7 @@ func init() { CmdInstall.Run = runInstall CmdBuild.Flag.BoolVar(&cfg.BuildI, "i", false, "") - CmdBuild.Flag.StringVar(&cfg.BuildO, "o", "", "output file") + CmdBuild.Flag.StringVar(&cfg.BuildO, "o", "", "output file or directory") CmdInstall.Flag.BoolVar(&cfg.BuildI, "i", false, "") @@ -228,14 +235,38 @@ func AddBuildFlags(cmd *base.Command) { cmd.Flag.StringVar(&cfg.BuildPkgdir, "pkgdir", "", "") cmd.Flag.BoolVar(&cfg.BuildRace, "race", false, "") cmd.Flag.BoolVar(&cfg.BuildMSan, "msan", false, "") - cmd.Flag.Var((*base.StringsFlag)(&cfg.BuildContext.BuildTags), "tags", "") + cmd.Flag.Var((*tagsFlag)(&cfg.BuildContext.BuildTags), "tags", "") cmd.Flag.Var((*base.StringsFlag)(&cfg.BuildToolexec), "toolexec", "") + cmd.Flag.BoolVar(&cfg.BuildTrimpath, "trimpath", false, "") cmd.Flag.BoolVar(&cfg.BuildWork, "work", false, "") // Undocumented, unstable debugging flags. cmd.Flag.StringVar(&cfg.DebugActiongraph, "debug-actiongraph", "", "") } +// tagsFlag is the implementation of the -tags flag. +type tagsFlag []string + +func (v *tagsFlag) Set(s string) error { + // For compatibility with Go 1.12 and earlier, allow "-tags='a b c'" or even just "-tags='a'". + if strings.Contains(s, " ") || strings.Contains(s, "'") { + return (*base.StringsFlag)(v).Set(s) + } + + // Split on commas, ignore empty strings. + *v = []string{} + for _, s := range strings.Split(s, ",") { + if s != "" { + *v = append(*v, s) + } + } + return nil +} + +func (v *tagsFlag) String() string { + return "" +} + // fileExtSplit expects a filename and returns the name // and ext (without the dot). If the file has no // extension, ext will be empty. @@ -284,8 +315,10 @@ func runBuild(cmd *base.Command, args []string) { pkgs := load.PackagesForBuild(args) + explicitO := len(cfg.BuildO) > 0 + if len(pkgs) == 1 && pkgs[0].Name == "main" && cfg.BuildO == "" { - _, cfg.BuildO = path.Split(pkgs[0].ImportPath) + cfg.BuildO = load.DefaultExecName(pkgs[0].ImportPath) cfg.BuildO += cfg.ExeSuffix } @@ -317,8 +350,32 @@ func runBuild(cmd *base.Command, args []string) { } if cfg.BuildO != "" { + // If the -o name exists and is a directory, then + // write all main packages to that directory. + // Otherwise require only a single package be built. + if fi, err := os.Stat(cfg.BuildO); err == nil && fi.IsDir() { + if !explicitO { + base.Fatalf("go build: build output %q already exists and is a directory", cfg.BuildO) + } + a := &Action{Mode: "go build"} + for _, p := range pkgs { + if p.Name != "main" { + continue + } + p.Target = filepath.Join(cfg.BuildO, load.DefaultExecName(p.ImportPath)) + p.Target += cfg.ExeSuffix + p.Stale = true + p.StaleReason = "build -o flag in use" + a.Deps = append(a.Deps, b.AutoAction(ModeInstall, depMode, p)) + } + if len(a.Deps) == 0 { + base.Fatalf("go build: no main packages to build") + } + b.Do(a) + return + } if len(pkgs) > 1 { - base.Fatalf("go build: cannot use -o with multiple packages") + base.Fatalf("go build: cannot write multiple packages to non-directory %s", cfg.BuildO) } else if len(pkgs) == 0 { base.Fatalf("no packages to build") } @@ -518,7 +575,7 @@ func InstallPackages(patterns []string, pkgs []*load.Package) { if len(patterns) == 0 && len(pkgs) == 1 && pkgs[0].Name == "main" { // Compute file 'go build' would have created. // If it exists and is an executable file, remove it. - _, targ := filepath.Split(pkgs[0].ImportPath) + targ := load.DefaultExecName(pkgs[0].ImportPath) targ += cfg.ExeSuffix if filepath.Join(pkgs[0].Dir, targ) != pkgs[0].Target { // maybe $GOBIN is the current directory fi, err := os.Stat(targ) diff --git a/src/cmd/go/internal/work/build_test.go b/src/cmd/go/internal/work/build_test.go index ef95a408ca..55e1eea25b 100644 --- a/src/cmd/go/internal/work/build_test.go +++ b/src/cmd/go/internal/work/build_test.go @@ -227,8 +227,8 @@ func TestRespectSetgidDir(t *testing.T) { if runtime.GOARCH == "arm" || runtime.GOARCH == "arm64" { t.Skip("can't set SetGID bit with chmod on iOS") } - case "windows", "plan9", "js": - t.Skip("chown/chmod setgid are not supported on Windows, Plan 9, or JS") + case "windows", "plan9": + t.Skip("chown/chmod setgid are not supported on Windows or Plan 9") } var b Builder diff --git a/src/cmd/go/internal/work/buildid.go b/src/cmd/go/internal/work/buildid.go index 750bc3c6cd..1a98980915 100644 --- a/src/cmd/go/internal/work/buildid.go +++ b/src/cmd/go/internal/work/buildid.go @@ -326,7 +326,7 @@ func (b *Builder) gccgoBuildIDFile(a *Action) (string, error) { var buf bytes.Buffer if cfg.Goos == "aix" { fmt.Fprintf(&buf, "\t.csect .go.buildid[XO]\n") - } else if cfg.Goos != "solaris" || assemblerIsGas() { + } else if (cfg.Goos != "solaris" && cfg.Goos != "illumos") || assemblerIsGas() { fmt.Fprintf(&buf, "\t"+`.section .go.buildid,"e"`+"\n") } else if cfg.Goarch == "sparc" || cfg.Goarch == "sparc64" { fmt.Fprintf(&buf, "\t"+`.section ".go.buildid",#exclude`+"\n") @@ -345,7 +345,7 @@ func (b *Builder) gccgoBuildIDFile(a *Action) (string, error) { fmt.Fprintf(&buf, "%#02x", a.buildID[i]) } fmt.Fprintf(&buf, "\n") - if cfg.Goos != "solaris" && cfg.Goos != "aix" { + if cfg.Goos != "solaris" && cfg.Goos != "illumos" && cfg.Goos != "aix" { secType := "@progbits" if cfg.Goarch == "arm" { secType = "%progbits" @@ -423,6 +423,9 @@ func (b *Builder) useCache(a *Action, p *load.Package, actionHash cache.ActionID // engineered 96-bit partial SHA256 collision. a.actionID = actionHash actionID := hashToString(actionHash) + if a.json != nil { + a.json.ActionID = actionID + } contentID := actionID // temporary placeholder, likely unique a.buildID = actionID + buildIDSeparator + contentID @@ -440,6 +443,9 @@ func (b *Builder) useCache(a *Action, p *load.Package, actionHash cache.ActionID buildID, _ = buildid.ReadFile(target) if strings.HasPrefix(buildID, actionID+buildIDSeparator) { a.buildID = buildID + if a.json != nil { + a.json.BuildID = a.buildID + } a.built = target // Poison a.Target to catch uses later in the build. a.Target = "DO NOT USE - " + a.Mode @@ -482,6 +488,9 @@ func (b *Builder) useCache(a *Action, p *load.Package, actionHash cache.ActionID // Poison a.Target to catch uses later in the build. a.Target = "DO NOT USE - main build pseudo-cache Target" a.built = "DO NOT USE - main build pseudo-cache built" + if a.json != nil { + a.json.BuildID = a.buildID + } return true } // Otherwise restore old build ID for main build. @@ -549,6 +558,9 @@ func (b *Builder) useCache(a *Action, p *load.Package, actionHash cache.ActionID a.built = file a.Target = "DO NOT USE - using cache" a.buildID = buildID + if a.json != nil { + a.json.BuildID = a.buildID + } if p := a.Package; p != nil { // Clearer than explaining that something else is stale. p.StaleReason = "not installed but available in build cache" @@ -644,6 +656,9 @@ func (b *Builder) updateBuildID(a *Action, target string, rewrite bool) error { // Replace with new content-based ID. a.buildID = newID + if a.json != nil { + a.json.BuildID = a.buildID + } if len(matches) == 0 { // Assume the user specified -buildid= to override what we were going to choose. return nil diff --git a/src/cmd/go/internal/work/exec.go b/src/cmd/go/internal/work/exec.go index bbcbdd7568..35e70ddb1e 100644 --- a/src/cmd/go/internal/work/exec.go +++ b/src/cmd/go/internal/work/exec.go @@ -8,9 +8,15 @@ package work import ( "bytes" + "cmd/go/internal/base" + "cmd/go/internal/cache" + "cmd/go/internal/cfg" + "cmd/go/internal/load" + "cmd/go/internal/str" "encoding/json" "errors" "fmt" + "internal/lazyregexp" "io" "io/ioutil" "log" @@ -24,12 +30,6 @@ import ( "strings" "sync" "time" - - "cmd/go/internal/base" - "cmd/go/internal/cache" - "cmd/go/internal/cfg" - "cmd/go/internal/load" - "cmd/go/internal/str" ) // actionList returns the list of actions in the dag rooted at root @@ -75,13 +75,22 @@ func (b *Builder) Do(root *Action) { a.priority = i } - if cfg.DebugActiongraph != "" { - js := actionGraphJSON(root) - if err := ioutil.WriteFile(cfg.DebugActiongraph, []byte(js), 0666); err != nil { - fmt.Fprintf(os.Stderr, "go: writing action graph: %v\n", err) - base.SetExitStatus(1) + // Write action graph, without timing information, in case we fail and exit early. + writeActionGraph := func() { + if file := cfg.DebugActiongraph; file != "" { + if strings.HasSuffix(file, ".go") { + // Do not overwrite Go source code in: + // go build -debug-actiongraph x.go + base.Fatalf("go: refusing to write action graph to %v\n", file) + } + js := actionGraphJSON(root) + if err := ioutil.WriteFile(file, []byte(js), 0666); err != nil { + fmt.Fprintf(os.Stderr, "go: writing action graph: %v\n", err) + base.SetExitStatus(1) + } } } + writeActionGraph() b.readySema = make(chan bool, len(all)) @@ -100,12 +109,15 @@ func (b *Builder) Do(root *Action) { // Handle runs a single action and takes care of triggering // any actions that are runnable as a result. handle := func(a *Action) { + if a.json != nil { + a.json.TimeStart = time.Now() + } var err error - if a.Func != nil && (!a.Failed || a.IgnoreFail) { - if err == nil { - err = a.Func(b, a) - } + err = a.Func(b, a) + } + if a.json != nil { + a.json.TimeDone = time.Now() } // The actions run in parallel but all the updates to the @@ -172,6 +184,9 @@ func (b *Builder) Do(root *Action) { } wg.Wait() + + // Write action graph again, this time with timing information. + writeActionGraph() } // buildActionID computes the action ID for a build action. @@ -214,6 +229,7 @@ func (b *Builder) buildActionID(a *Action) cache.ActionID { if p.Internal.CoverMode != "" { fmt.Fprintf(h, "cover %q %q\n", p.Internal.CoverMode, b.toolID("cover")) } + fmt.Fprintf(h, "modinfo %q\n", p.Internal.BuildInfo) // Configuration specific to compiler toolchain. switch cfg.BuildToolchainName { @@ -224,12 +240,16 @@ func (b *Builder) buildActionID(a *Action) cache.ActionID { if len(p.SFiles) > 0 { fmt.Fprintf(h, "asm %q %q %q\n", b.toolID("asm"), forcedAsmflags, p.Internal.Asmflags) } + // GO386, GOARM, GOMIPS, etc. - baseArch := strings.TrimSuffix(cfg.BuildContext.GOARCH, "le") - fmt.Fprintf(h, "GO$GOARCH=%s\n", os.Getenv("GO"+strings.ToUpper(baseArch))) + key, val := cfg.GetArchEnv() + fmt.Fprintf(h, "%s=%s\n", key, val) // TODO(rsc): Convince compiler team not to add more magic environment variables, // or perhaps restrict the environment variables passed to subprocesses. + // Because these are clumsy, undocumented special-case hacks + // for debugging the compiler, they are not settable using 'go env -w', + // and so here we use os.Getenv, not cfg.Getenv. magic := []string{ "GOCLOBBERDEADHASH", "GOSSAFUNC", @@ -266,8 +286,9 @@ func (b *Builder) buildActionID(a *Action) cache.ActionID { } fmt.Fprintf(h, "compile %s %q %q\n", id, forcedGccgoflags, p.Internal.Gccgoflags) fmt.Fprintf(h, "pkgpath %s\n", gccgoPkgpath(p)) + fmt.Fprintf(h, "ar %q\n", BuildToolchain.(gccgoToolchain).ar()) if len(p.SFiles) > 0 { - id, err = b.gccgoToolID(BuildToolchain.compiler(), "assembler-with-cpp") + id, _ = b.gccgoToolID(BuildToolchain.compiler(), "assembler-with-cpp") // Ignore error; different assembler versions // are unlikely to make any difference anyhow. fmt.Fprintf(h, "asm %q\n", id) @@ -363,8 +384,8 @@ func (b *Builder) build(a *Action) (err error) { return 0 } - cached := false - need := bit(needBuild, !b.IsCmdList || b.NeedExport) | + cachedBuild := false + need := bit(needBuild, !b.IsCmdList && a.needBuild || b.NeedExport) | bit(needCgoHdr, b.needCgoHdr(a)) | bit(needVet, a.needVet) | bit(needCompiledGoFiles, b.NeedCompiledGoFiles) @@ -373,6 +394,11 @@ func (b *Builder) build(a *Action) (err error) { if b.useCache(a, p, b.buildActionID(a), p.Target) { // We found the main output in the cache. // If we don't need any other outputs, we can stop. + // Otherwise, we need to write files to a.Objdir (needVet, needCgoHdr). + // Remember that we might have them in cache + // and check again after we create a.Objdir. + cachedBuild = true + a.output = []byte{} // start saving output in case we miss any cache results need &^= needBuild if b.NeedExport { p.Export = a.built @@ -380,16 +406,11 @@ func (b *Builder) build(a *Action) (err error) { if need&needCompiledGoFiles != 0 && b.loadCachedSrcFiles(a) { need &^= needCompiledGoFiles } - // Otherwise, we need to write files to a.Objdir (needVet, needCgoHdr). - // Remember that we might have them in cache - // and check again after we create a.Objdir. - cached = true - a.output = []byte{} // start saving output in case we miss any cache results } // Source files might be cached, even if the full action is not // (e.g., go list -compiled -find). - if !cached && need&needCompiledGoFiles != 0 && b.loadCachedSrcFiles(a) { + if !cachedBuild && need&needCompiledGoFiles != 0 && b.loadCachedSrcFiles(a) { need &^= needCompiledGoFiles } @@ -421,24 +442,12 @@ func (b *Builder) build(a *Action) (err error) { } if a.Package.BinaryOnly { - _, err := os.Stat(a.Package.Target) - if err == nil { - a.built = a.Package.Target - a.Target = a.Package.Target - if b.NeedExport { - a.Package.Export = a.Package.Target - } - a.buildID = b.fileHash(a.Package.Target) - a.Package.Stale = false - a.Package.StaleReason = "binary-only package" - return nil - } - a.Package.Stale = true - a.Package.StaleReason = "missing or invalid binary-only package" + p.Stale = true + p.StaleReason = "binary-only packages are no longer supported" if b.IsCmdList { return nil } - return fmt.Errorf("missing or invalid binary-only package; expected file %q", a.Package.Target) + return errors.New("binary-only packages are no longer supported") } if err := b.Mkdir(a.Objdir); err != nil { @@ -446,21 +455,20 @@ func (b *Builder) build(a *Action) (err error) { } objdir := a.Objdir - if cached { - if need&needCgoHdr != 0 && b.loadCachedCgoHdr(a) { - need &^= needCgoHdr - } + // Load cached cgo header, but only if we're skipping the main build (cachedBuild==true). + if cachedBuild && need&needCgoHdr != 0 && b.loadCachedCgoHdr(a) { + need &^= needCgoHdr + } - // Load cached vet config, but only if that's all we have left - // (need == needVet, not testing just the one bit). - // If we are going to do a full build anyway, - // we're going to regenerate the files below anyway. - if need == needVet && b.loadCachedVet(a) { - need &^= needVet - } - if need == 0 { - return nil - } + // Load cached vet config, but only if that's all we have left + // (need == needVet, not testing just the one bit). + // If we are going to do a full build anyway, + // we're going to regenerate the files below anyway. + if need == needVet && b.loadCachedVet(a) { + need &^= needVet + } + if need == 0 { + return nil } // make target directory @@ -531,6 +539,15 @@ func (b *Builder) build(a *Action) (err error) { } } + // Write out the _testinginit.go file for any test packages that import "testing". + if a.Package.Internal.TestinginitGo != nil { + initfile := objdir + "_testinginit.go" + if err := b.writeFile(initfile, a.Package.Internal.TestinginitGo); err != nil { + return err + } + gofiles = append([]string{initfile}, gofiles...) + } + // Run cgo. if a.Package.UsesCgo() || a.Package.UsesSwig() { // In a package using cgo, cgo compiles the C, C++ and assembly files with gcc. @@ -721,7 +738,7 @@ func (b *Builder) build(a *Action) (err error) { // This is read by readGccgoArchive in cmd/internal/buildid/buildid.go. if a.buildID != "" && cfg.BuildToolchainName == "gccgo" { switch cfg.Goos { - case "aix", "android", "dragonfly", "freebsd", "linux", "netbsd", "openbsd", "solaris": + case "aix", "android", "dragonfly", "freebsd", "illumos", "linux", "netbsd", "openbsd", "solaris": asmfile, err := b.gccgoBuildIDFile(a) if err != nil { return err @@ -968,10 +985,13 @@ func buildVetConfig(a *Action, srcfiles []string) { // The caller is expected to set it (if needed) before executing any vet actions. var VetTool string -// VetFlags are the flags to pass to vet. +// VetFlags are the default flags to pass to vet. // The caller is expected to set them before executing any vet actions. var VetFlags []string +// VetExplicit records whether the vet flags were set explicitly on the command line. +var VetExplicit bool + func (b *Builder) vet(a *Action) error { // a.Deps[0] is the build of the package being vetted. // a.Deps[1] is the build of the "fmt" package. @@ -998,12 +1018,42 @@ func (b *Builder) vet(a *Action) error { h := cache.NewHash("vet " + a.Package.ImportPath) fmt.Fprintf(h, "vet %q\n", b.toolID("vet")) + vetFlags := VetFlags + + // In GOROOT, we enable all the vet tests during 'go test', + // not just the high-confidence subset. This gets us extra + // checking for the standard library (at some compliance cost) + // and helps us gain experience about how well the checks + // work, to help decide which should be turned on by default. + // The command-line still wins. + // + // Note that this flag change applies even when running vet as + // a dependency of vetting a package outside std. + // (Otherwise we'd have to introduce a whole separate + // space of "vet fmt as a dependency of a std top-level vet" + // versus "vet fmt as a dependency of a non-std top-level vet".) + // This is OK as long as the packages that are farther down the + // dependency tree turn on *more* analysis, as here. + // (The unsafeptr check does not write any facts for use by + // later vet runs.) + if a.Package.Goroot && !VetExplicit { + // Note that $GOROOT/src/buildall.bash + // does the same for the misc-compile trybots + // and should be updated if these flags are + // changed here. + // + // There's too much unsafe.Pointer code + // that vet doesn't like in low-level packages + // like runtime, sync, and reflect. + vetFlags = []string{"-unsafeptr=false"} + } + // Note: We could decide that vet should compute export data for // all analyses, in which case we don't need to include the flags here. // But that would mean that if an analysis causes problems like // unexpected crashes there would be no way to turn it off. // It seems better to let the flags disable export analysis too. - fmt.Fprintf(h, "vetflags %q\n", VetFlags) + fmt.Fprintf(h, "vetflags %q\n", vetFlags) fmt.Fprintf(h, "pkg %q\n", a.Deps[0].actionID) for _, a1 := range a.Deps { @@ -1023,26 +1073,6 @@ func (b *Builder) vet(a *Action) error { } } - // TODO(adonovan): delete this when we use the new vet printf checker. - // https://github.com/golang/go/issues/28756 - if vcfg.ImportMap["fmt"] == "" { - a1 := a.Deps[1] - vcfg.ImportMap["fmt"] = "fmt" - if a1.built != "" { - vcfg.PackageFile["fmt"] = a1.built - } - vcfg.Standard["fmt"] = true - } - - // During go test, ignore type-checking failures during vet. - // We only run vet if the compilation has succeeded, - // so at least for now assume the bug is in vet. - // We know of at least #18395. - // TODO(rsc,gri): Try to remove this for Go 1.11. - // - // Disabled 2018-04-20. Let's see if we can do without it. - // vcfg.SucceedOnTypecheckFailure = cfg.CmdName == "test" - js, err := json.MarshalIndent(vcfg, "", "\t") if err != nil { return fmt.Errorf("internal error marshaling vet config: %v", err) @@ -1062,7 +1092,7 @@ func (b *Builder) vet(a *Action) error { if tool == "" { tool = base.Tool("vet") } - runErr := b.run(a, p.Dir, p.ImportPath, env, cfg.BuildToolexec, tool, VetFlags, a.Objdir+"vet.cfg") + runErr := b.run(a, p.Dir, p.ImportPath, env, cfg.BuildToolexec, tool, vetFlags, a.Objdir+"vet.cfg") // If vet wrote export data, save it for input to future vets. if f, err := os.Open(vcfg.VetxOutput); err == nil { @@ -1127,21 +1157,16 @@ func (b *Builder) printLinkerConfig(h io.Writer, p *load.Package) { if p != nil { fmt.Fprintf(h, "linkflags %q\n", p.Internal.Ldflags) } - fmt.Fprintf(h, "GO$GOARCH=%s\n", os.Getenv("GO"+strings.ToUpper(cfg.BuildContext.GOARCH))) // GO386, GOARM, etc + + // GO386, GOARM, GOMIPS, etc. + key, val := cfg.GetArchEnv() + fmt.Fprintf(h, "%s=%s\n", key, val) // The linker writes source file paths that say GOROOT_FINAL. fmt.Fprintf(h, "GOROOT=%s\n", cfg.GOROOT_FINAL) - // TODO(rsc): Convince linker team not to add more magic environment variables, - // or perhaps restrict the environment variables passed to subprocesses. - magic := []string{ - "GO_EXTLINK_ENABLED", - } - for _, env := range magic { - if x := os.Getenv(env); x != "" { - fmt.Fprintf(h, "magic %s=%s\n", env, x) - } - } + // GO_EXTLINK_ENABLED controls whether the external linker is used. + fmt.Fprintf(h, "GO_EXTLINK_ENABLED=%s\n", cfg.Getenv("GO_EXTLINK_ENABLED")) // TODO(rsc): Do cgo settings and flags need to be included? // Or external linker settings and flags? @@ -1314,7 +1339,7 @@ func (b *Builder) getPkgConfigFlags(p *load.Package) (cflags, ldflags []string, } } var out []byte - out, err = b.runOut(p.Dir, nil, b.PkgconfigCmd(), "--cflags", pcflags, "--", pkgs) + out, err = b.runOut(nil, p.Dir, nil, b.PkgconfigCmd(), "--cflags", pcflags, "--", pkgs) if err != nil { b.showOutput(nil, p.Dir, b.PkgconfigCmd()+" --cflags "+strings.Join(pcflags, " ")+" -- "+strings.Join(pkgs, " "), string(out)) b.Print(err.Error() + "\n") @@ -1329,7 +1354,7 @@ func (b *Builder) getPkgConfigFlags(p *load.Package) (cflags, ldflags []string, return nil, nil, err } } - out, err = b.runOut(p.Dir, nil, b.PkgconfigCmd(), "--libs", pcflags, "--", pkgs) + out, err = b.runOut(nil, p.Dir, nil, b.PkgconfigCmd(), "--libs", pcflags, "--", pkgs) if err != nil { b.showOutput(nil, p.Dir, b.PkgconfigCmd()+" --libs "+strings.Join(pcflags, " ")+" -- "+strings.Join(pkgs, " "), string(out)) b.Print(err.Error() + "\n") @@ -1429,6 +1454,9 @@ func BuildInstallFunc(b *Builder, a *Action) (err error) { a1 := a.Deps[0] a.buildID = a1.buildID + if a.json != nil { + a.json.BuildID = a.buildID + } // If we are using the eventual install target as an up-to-date // cached copy of the thing we built, then there's no need to @@ -1838,14 +1866,14 @@ func (b *Builder) showOutput(a *Action, dir, desc, out string) { // print this error. var errPrintedOutput = errors.New("already printed output - no need to show error") -var cgoLine = regexp.MustCompile(`\[[^\[\]]+\.(cgo1|cover)\.go:[0-9]+(:[0-9]+)?\]`) -var cgoTypeSigRe = regexp.MustCompile(`\b_C2?(type|func|var|macro)_\B`) +var cgoLine = lazyregexp.New(`\[[^\[\]]+\.(cgo1|cover)\.go:[0-9]+(:[0-9]+)?\]`) +var cgoTypeSigRe = lazyregexp.New(`\b_C2?(type|func|var|macro)_\B`) // run runs the command given by cmdline in the directory dir. // If the command fails, run prints information about the failure // and returns a non-nil error. func (b *Builder) run(a *Action, dir string, desc string, env []string, cmdargs ...interface{}) error { - out, err := b.runOut(dir, env, cmdargs...) + out, err := b.runOut(a, dir, env, cmdargs...) if len(out) > 0 { if desc == "" { desc = b.fmtcmd(dir, "%s", strings.Join(str.StringList(cmdargs...), " ")) @@ -1877,7 +1905,8 @@ func (b *Builder) processOutput(out []byte) string { // runOut runs the command given by cmdline in the directory dir. // It returns the command output and any errors that occurred. -func (b *Builder) runOut(dir string, env []string, cmdargs ...interface{}) ([]byte, error) { +// It accumulates execution time in a. +func (b *Builder) runOut(a *Action, dir string, env []string, cmdargs ...interface{}) ([]byte, error) { cmdline := str.StringList(cmdargs...) for _, arg := range cmdline { @@ -1916,8 +1945,19 @@ func (b *Builder) runOut(dir string, env []string, cmdargs ...interface{}) ([]by cleanup := passLongArgsInResponseFiles(cmd) defer cleanup() cmd.Dir = dir - cmd.Env = base.MergeEnvLists(env, base.EnvForDir(cmd.Dir, os.Environ())) + cmd.Env = base.EnvForDir(cmd.Dir, os.Environ()) + cmd.Env = append(cmd.Env, env...) + start := time.Now() err := cmd.Run() + if a != nil && a.json != nil { + aj := a.json + aj.Cmd = append(aj.Cmd, joinUnambiguously(cmdline)) + aj.CmdReal += time.Since(start) + if ps := cmd.ProcessState; ps != nil { + aj.CmdUser += ps.UserTime() + aj.CmdSys += ps.SystemTime() + } + } // err can be something like 'exit status 1'. // Add information about what program was running. @@ -1942,7 +1982,8 @@ func joinUnambiguously(a []string) string { q := strconv.Quote(s) // A gccgo command line can contain -( and -). // Make sure we quote them since they are special to the shell. - if s == "" || strings.ContainsAny(s, " ()") || len(q) > len(s)+2 { + // The trimpath argument can also contain > (part of =>) and ;. Quote those too. + if s == "" || strings.ContainsAny(s, " ()>;") || len(q) > len(s)+2 { buf.WriteString(q) } else { buf.WriteString(s) @@ -2114,7 +2155,7 @@ func (b *Builder) ccompile(a *Action, p *load.Package, outfile string, flags []s if !filepath.IsAbs(outfile) { outfile = filepath.Join(p.Dir, outfile) } - output, err := b.runOut(filepath.Dir(file), b.cCompilerEnv(), compiler, flags, "-o", outfile, "-c", filepath.Base(file)) + output, err := b.runOut(a, filepath.Dir(file), b.cCompilerEnv(), compiler, flags, "-o", outfile, "-c", filepath.Base(file)) if len(output) > 0 { // On FreeBSD 11, when we pass -g to clang 3.8 it // invokes its internal assembler with -dwarf-version=2. @@ -2147,7 +2188,7 @@ func (b *Builder) ccompile(a *Action, p *load.Package, outfile string, flags []s } // gccld runs the gcc linker to create an executable from a set of object files. -func (b *Builder) gccld(p *load.Package, objdir, outfile string, flags []string, objs []string) error { +func (b *Builder) gccld(a *Action, p *load.Package, objdir, outfile string, flags []string, objs []string) error { var cmd []string if len(p.CXXFiles) > 0 || len(p.SwigCXXFiles) > 0 { cmd = b.GxxCmd(p.Dir, objdir) @@ -2157,16 +2198,37 @@ func (b *Builder) gccld(p *load.Package, objdir, outfile string, flags []string, cmdargs := []interface{}{cmd, "-o", outfile, objs, flags} dir := p.Dir - out, err := b.runOut(dir, b.cCompilerEnv(), cmdargs...) + out, err := b.runOut(a, dir, b.cCompilerEnv(), cmdargs...) if len(out) > 0 { // Filter out useless linker warnings caused by bugs outside Go. // See also cmd/link/internal/ld's hostlink method. var save [][]byte + var skipLines int for _, line := range bytes.SplitAfter(out, []byte("\n")) { // golang.org/issue/26073 - Apple Xcode bug if bytes.Contains(line, []byte("ld: warning: text-based stub file")) { continue } + + if skipLines > 0 { + skipLines-- + continue + } + + // Remove duplicate main symbol with runtime/cgo on AIX. + // With runtime/cgo, two main are available: + // One is generated by cgo tool with {return 0;}. + // The other one is the main calling runtime.rt0_go + // in runtime/cgo. + // The second can't be used by cgo programs because + // runtime.rt0_go is unknown to them. + // Therefore, we let ld remove this main version + // and used the cgo generated one. + if p.ImportPath == "runtime/cgo" && bytes.Contains(line, []byte("ld: 0711-224 WARNING: Duplicate symbol: .main")) { + skipLines = 1 + continue + } + save = append(save, line) } out = bytes.Join(save, nil) @@ -2182,8 +2244,8 @@ func (b *Builder) gccld(p *load.Package, objdir, outfile string, flags []string, // Grab these before main helpfully overwrites them. var ( - origCC = os.Getenv("CC") - origCXX = os.Getenv("CXX") + origCC = cfg.Getenv("CC") + origCXX = cfg.Getenv("CXX") ) // gccCmd returns a gcc command line prefix @@ -2215,7 +2277,7 @@ func (b *Builder) cxxExe() []string { // fcExe returns the FC compiler setting without all the extra flags we add implicitly. func (b *Builder) fcExe() []string { - return b.compilerExe(os.Getenv("FC"), "gfortran") + return b.compilerExe(cfg.Getenv("FC"), "gfortran") } // compilerExe returns the compiler to use given an @@ -2257,6 +2319,11 @@ func (b *Builder) compilerCmd(compiler []string, incdir, workdir string) []strin } } + if cfg.Goos == "aix" { + // mcmodel=large must always be enabled to allow large TOC. + a = append(a, "-mcmodel=large") + } + // disable ASCII art in clang errors, if possible if b.gccSupportsFlag(compiler, "-fno-caret-diagnostics") { a = append(a, "-fno-caret-diagnostics") @@ -2326,7 +2393,7 @@ func (b *Builder) gccSupportsFlag(compiler []string, flag string) bool { // version of GCC, so some systems have frozen on it. // Now we pass an empty file on stdin, which should work at least for // GCC and clang. - cmdArgs := str.StringList(compiler, flag, "-c", "-x", "c", "-") + cmdArgs := str.StringList(compiler, flag, "-c", "-x", "c", "-", "-o", os.DevNull) if cfg.BuildN || cfg.BuildX { b.Showcmd(b.WorkDir, "%s || true", joinUnambiguously(cmdArgs)) if cfg.BuildN { @@ -2335,7 +2402,8 @@ func (b *Builder) gccSupportsFlag(compiler []string, flag string) bool { } cmd := exec.Command(cmdArgs[0], cmdArgs[1:]...) cmd.Dir = b.WorkDir - cmd.Env = base.MergeEnvLists([]string{"LC_ALL=C"}, base.EnvForDir(cmd.Dir, os.Environ())) + cmd.Env = base.EnvForDir(cmd.Dir, os.Environ()) + cmd.Env = append(cmd.Env, "LC_ALL=C") out, _ := cmd.CombinedOutput() // GCC says "unrecognized command line option". // clang says "unknown argument". @@ -2375,7 +2443,7 @@ func (b *Builder) gccArchArgs() []string { // envList returns the value of the given environment variable broken // into fields, using the default value when the variable is empty. func envList(key, def string) []string { - v := os.Getenv(key) + v := cfg.Getenv(key) if v == "" { v = def } @@ -2412,7 +2480,7 @@ func buildFlags(name, defaults string, fromPackage []string, check func(string, return str.StringList(envList("CGO_"+name, defaults), fromPackage), nil } -var cgoRe = regexp.MustCompile(`[/\\:]`) +var cgoRe = lazyregexp.New(`[/\\:]`) func (b *Builder) cgo(a *Action, cgoExe, objdir string, pcCFLAGS, pcLDFLAGS, cgofiles, gccfiles, gxxfiles, mfiles, ffiles []string) (outGo, outObj []string, err error) { p := a.Package @@ -2432,7 +2500,7 @@ func (b *Builder) cgo(a *Action, cgoExe, objdir string, pcCFLAGS, pcLDFLAGS, cgo // Support gfortran out of the box and let others pass the correct link options // via CGO_LDFLAGS if len(ffiles) > 0 { - fc := os.Getenv("FC") + fc := cfg.Getenv("FC") if fc == "" { fc = "gfortran" } @@ -2614,7 +2682,7 @@ func (b *Builder) dynimport(a *Action, p *load.Package, objdir, importGo, cgoExe } ldflags = append(n, "-pie") } - if err := b.gccld(p, objdir, dynobj, ldflags, linkobj); err != nil { + if err := b.gccld(a, p, objdir, dynobj, ldflags, linkobj); err != nil { return err } @@ -2673,7 +2741,7 @@ var ( ) func (b *Builder) swigDoVersionCheck() error { - out, err := b.runOut("", nil, "swig", "-version") + out, err := b.runOut(nil, "", nil, "swig", "-version") if err != nil { return err } @@ -2828,7 +2896,7 @@ func (b *Builder) swigOne(a *Action, p *load.Package, file, objdir string, pcCFL args = append(args, "-c++") } - out, err := b.runOut(p.Dir, nil, "swig", args, file) + out, err := b.runOut(a, p.Dir, nil, "swig", args, file) if err != nil { if len(out) > 0 { if bytes.Contains(out, []byte("-intgosize")) || bytes.Contains(out, []byte("-cgo")) { diff --git a/src/cmd/go/internal/work/gc.go b/src/cmd/go/internal/work/gc.go index 3d09f69fcc..6ec24b2855 100644 --- a/src/cmd/go/internal/work/gc.go +++ b/src/cmd/go/internal/work/gc.go @@ -21,6 +21,7 @@ import ( "cmd/go/internal/load" "cmd/go/internal/str" "cmd/internal/objabi" + "cmd/internal/sys" "crypto/sha1" ) @@ -116,7 +117,7 @@ func (gcToolchain) gc(b *Builder, a *Action, archive string, importcfg []byte, s } } - args := []interface{}{cfg.BuildToolexec, base.Tool("compile"), "-o", ofile, "-trimpath", trimDir(a.Objdir), gcflags, gcargs, "-D", p.Internal.LocalPrefix} + args := []interface{}{cfg.BuildToolexec, base.Tool("compile"), "-o", ofile, "-trimpath", a.trimpath(), gcflags, gcargs, "-D", p.Internal.LocalPrefix} if importcfg != nil { if err := b.writeFile(objdir+"importcfg", importcfg); err != nil { return "", nil, err @@ -139,7 +140,7 @@ func (gcToolchain) gc(b *Builder, a *Action, archive string, importcfg []byte, s args = append(args, mkAbs(p.Dir, f)) } - output, err = b.runOut(p.Dir, nil, args...) + output, err = b.runOut(a, p.Dir, nil, args...) return ofile, output, err } @@ -214,17 +215,33 @@ CheckFlags: return c } -func trimDir(dir string) string { - if len(dir) > 1 && dir[len(dir)-1] == filepath.Separator { - dir = dir[:len(dir)-1] +// trimpath returns the -trimpath argument to use +// when compiling the action. +func (a *Action) trimpath() string { + // Strip the object directory entirely. + objdir := a.Objdir + if len(objdir) > 1 && objdir[len(objdir)-1] == filepath.Separator { + objdir = objdir[:len(objdir)-1] } - return dir + rewrite := objdir + "=>" + + // For "go build -trimpath", rewrite package source directory + // to a file system-independent path (just the import path). + if cfg.BuildTrimpath { + if m := a.Package.Module; m != nil { + rewrite += ";" + m.Dir + "=>" + m.Path + "@" + m.Version + } else { + rewrite += ";" + a.Package.Dir + "=>" + a.Package.ImportPath + } + } + + return rewrite } func asmArgs(a *Action, p *load.Package) []interface{} { // Add -I pkg/GOOS_GOARCH so #include "textflag.h" works in .s files. inc := filepath.Join(cfg.GOROOT, "pkg", "include") - args := []interface{}{cfg.BuildToolexec, base.Tool("asm"), "-trimpath", trimDir(a.Objdir), "-I", a.Objdir, "-I", inc, "-D", "GOOS_" + cfg.Goos, "-D", "GOARCH_" + cfg.Goarch, forcedAsmflags, p.Internal.Asmflags} + args := []interface{}{cfg.BuildToolexec, base.Tool("asm"), "-trimpath", a.trimpath(), "-I", a.Objdir, "-I", inc, "-D", "GOOS_" + cfg.Goos, "-D", "GOARCH_" + cfg.Goarch, forcedAsmflags, p.Internal.Asmflags} if p.ImportPath == "runtime" && cfg.Goarch == "386" { for _, arg := range forcedAsmflags { if arg == "-dynlink" { @@ -304,7 +321,7 @@ func (gcToolchain) symabis(b *Builder, a *Action, sfiles []string) (string, erro otherPkgs = []string{"sync/atomic"} } for _, p2name := range otherPkgs { - p2 := load.LoadPackage(p2name, &load.ImportStack{}) + p2 := load.LoadImportWithFlags(p2name, p.Dir, p, &load.ImportStack{}, nil, 0) if len(p2.SFiles) == 0 { continue } @@ -493,7 +510,21 @@ func pluginPath(a *Action) string { return p.ImportPath } h := sha1.New() - fmt.Fprintf(h, "build ID: %s\n", a.buildID) + buildID := a.buildID + if a.Mode == "link" { + // For linking, use the main package's build ID instead of + // the binary's build ID, so it is the same hash used in + // compiling and linking. + // When compiling, we use actionID/actionID (instead of + // actionID/contentID) as a temporary build ID to compute + // the hash. Do the same here. (See buildid.go:useCache) + // The build ID matters because it affects the overall hash + // in the plugin's pseudo-import path returned below. + // We need to use the same import path when compiling and linking. + id := strings.Split(buildID, buildIDSeparator) + buildID = id[1] + buildIDSeparator + id[1] + } + fmt.Fprintf(h, "build ID: %s\n", buildID) for _, file := range str.StringList(p.GoFiles, p.CgoFiles, p.SFiles) { data, err := ioutil.ReadFile(filepath.Join(p.Dir, file)) if err != nil { @@ -525,7 +556,13 @@ func (gcToolchain) ld(b *Builder, root *Action, out, importcfg, mainpkg string) // Store BuildID inside toolchain binaries as a unique identifier of the // tool being run, for use by content-based staleness determination. if root.Package.Goroot && strings.HasPrefix(root.Package.ImportPath, "cmd/") { - ldflags = append(ldflags, "-X=cmd/internal/objabi.buildID="+root.buildID) + // External linking will include our build id in the external + // linker's build id, which will cause our build id to not + // match the next time the tool is built. + // Rely on the external build id instead. + if !sys.MustLinkExternal(cfg.Goos, cfg.Goarch) { + ldflags = append(ldflags, "-X=cmd/internal/objabi.buildID="+root.buildID) + } } // If the user has not specified the -extld option, then specify the @@ -560,7 +597,11 @@ func (gcToolchain) ld(b *Builder, root *Action, out, importcfg, mainpkg string) dir, out = filepath.Split(out) } - return b.run(root, dir, root.Package.ImportPath, nil, cfg.BuildToolexec, base.Tool("link"), "-o", out, "-importcfg", importcfg, ldflags, mainpkg) + env := []string{} + if cfg.BuildTrimpath { + env = append(env, "GOROOT_FINAL=go") + } + return b.run(root, dir, root.Package.ImportPath, env, cfg.BuildToolexec, base.Tool("link"), "-o", out, "-importcfg", importcfg, ldflags, mainpkg) } func (gcToolchain) ldShared(b *Builder, root *Action, toplevelactions []*Action, out, importcfg string, allactions []*Action) error { diff --git a/src/cmd/go/internal/work/gccgo.go b/src/cmd/go/internal/work/gccgo.go index 69a25bea62..67065950b2 100644 --- a/src/cmd/go/internal/work/gccgo.go +++ b/src/cmd/go/internal/work/gccgo.go @@ -26,7 +26,7 @@ var GccgoName, GccgoBin string var gccgoErr error func init() { - GccgoName = os.Getenv("GCCGO") + GccgoName = cfg.Getenv("GCCGO") if GccgoName == "" { GccgoName = "gccgo" } @@ -44,7 +44,7 @@ func (gccgoToolchain) linker() string { } func (gccgoToolchain) ar() string { - ar := os.Getenv("AR") + ar := cfg.Getenv("AR") if ar == "" { ar = "ar" } @@ -56,7 +56,8 @@ func checkGccgoBin() { return } fmt.Fprintf(os.Stderr, "cmd/go: gccgo: %s\n", gccgoErr) - os.Exit(2) + base.SetExitStatus(2) + base.Exit() } func (tools gccgoToolchain) gc(b *Builder, a *Action, archive string, importcfg []byte, symabis string, asmhdr bool, gofiles []string) (ofile string, output []byte, err error) { @@ -93,7 +94,7 @@ func (tools gccgoToolchain) gc(b *Builder, a *Action, archive string, importcfg args = append(args, mkAbs(p.Dir, f)) } - output, err = b.runOut(p.Dir, nil, args) + output, err = b.runOut(a, p.Dir, nil, args) return ofile, output, err } @@ -202,11 +203,14 @@ func (tools gccgoToolchain) pack(b *Builder, a *Action, afile string, ofiles []s if cfg.Goos == "aix" && cfg.Goarch == "ppc64" { // AIX puts both 32-bit and 64-bit objects in the same archive. // Tell the AIX "ar" command to only care about 64-bit objects. - // AIX "ar" command does not know D option. arArgs = []string{"-X64"} } - - return b.run(a, p.Dir, p.ImportPath, nil, tools.ar(), arArgs, "rc", mkAbs(objdir, afile), absOfiles) + absAfile := mkAbs(objdir, afile) + // Try with D modifier first, then without if that fails. + if b.run(a, p.Dir, p.ImportPath, nil, tools.ar(), arArgs, "rcD", absAfile, absOfiles) != nil { + return b.run(a, p.Dir, p.ImportPath, nil, tools.ar(), arArgs, "rc", absAfile, absOfiles) + } + return nil } func (tools gccgoToolchain) link(b *Builder, root *Action, out, importcfg string, allactions []*Action, buildmode, desc string) error { @@ -248,6 +252,13 @@ func (tools gccgoToolchain) link(b *Builder, root *Action, out, importcfg string return nil } + var arArgs []string + if cfg.Goos == "aix" && cfg.Goarch == "ppc64" { + // AIX puts both 32-bit and 64-bit objects in the same archive. + // Tell the AIX "ar" command to only care about 64-bit objects. + arArgs = []string{"-X64"} + } + newID := 0 readAndRemoveCgoFlags := func(archive string) (string, error) { newID++ @@ -265,11 +276,11 @@ func (tools gccgoToolchain) link(b *Builder, root *Action, out, importcfg string return "", nil } } - err := b.run(root, root.Objdir, desc, nil, tools.ar(), "x", newArchive, "_cgo_flags") + err := b.run(root, root.Objdir, desc, nil, tools.ar(), arArgs, "x", newArchive, "_cgo_flags") if err != nil { return "", err } - err = b.run(root, ".", desc, nil, tools.ar(), "d", newArchive, "_cgo_flags") + err = b.run(root, ".", desc, nil, tools.ar(), arArgs, "d", newArchive, "_cgo_flags") if err != nil { return "", err } @@ -407,6 +418,7 @@ func (tools gccgoToolchain) link(b *Builder, root *Action, out, importcfg string } var realOut string + goLibBegin := str.StringList(wholeArchive, "-lgolibbegin", noWholeArchive) switch buildmode { case "exe": if usesCgo && cfg.Goos == "linux" { @@ -428,7 +440,8 @@ func (tools gccgoToolchain) link(b *Builder, root *Action, out, importcfg string // split-stack and non-split-stack code in a single -r // link, and libgo picks up non-split-stack code from // libffi. - ldflags = append(ldflags, "-Wl,-r", "-nostdlib", "-Wl,--whole-archive", "-lgolibbegin", "-Wl,--no-whole-archive") + ldflags = append(ldflags, "-Wl,-r", "-nostdlib") + ldflags = append(ldflags, goLibBegin...) if nopie := b.gccNoPie([]string{tools.linker()}); nopie != "" { ldflags = append(ldflags, nopie) @@ -443,7 +456,10 @@ func (tools gccgoToolchain) link(b *Builder, root *Action, out, importcfg string out = out + ".o" case "c-shared": - ldflags = append(ldflags, "-shared", "-nostdlib", "-Wl,--whole-archive", "-lgolibbegin", "-Wl,--no-whole-archive", "-lgo", "-lgcc_s", "-lgcc", "-lc", "-lgcc") + ldflags = append(ldflags, "-shared", "-nostdlib") + ldflags = append(ldflags, goLibBegin...) + ldflags = append(ldflags, "-lgo", "-lgcc_s", "-lgcc", "-lc", "-lgcc") + case "shared": if cfg.Goos != "aix" { ldflags = append(ldflags, "-zdefs") @@ -463,7 +479,7 @@ func (tools gccgoToolchain) link(b *Builder, root *Action, out, importcfg string ldflags = append(ldflags, "-lobjc") } if fortran { - fc := os.Getenv("FC") + fc := cfg.Getenv("FC") if fc == "" { fc = "gfortran" } @@ -481,7 +497,7 @@ func (tools gccgoToolchain) link(b *Builder, root *Action, out, importcfg string switch buildmode { case "c-archive": - if err := b.run(root, ".", desc, nil, tools.ar(), "rc", realOut, out); err != nil { + if err := b.run(root, ".", desc, nil, tools.ar(), arArgs, "rc", realOut, out); err != nil { return err } } diff --git a/src/cmd/go/internal/work/init.go b/src/cmd/go/internal/work/init.go index 693a53e9ab..35d3a505cc 100644 --- a/src/cmd/go/internal/work/init.go +++ b/src/cmd/go/internal/work/init.go @@ -29,7 +29,8 @@ func BuildInit() { p, err := filepath.Abs(cfg.BuildPkgdir) if err != nil { fmt.Fprintf(os.Stderr, "go %s: evaluating -pkgdir: %v\n", flag.Args()[0], err) - os.Exit(2) + base.SetExitStatus(2) + base.Exit() } cfg.BuildPkgdir = p } @@ -41,16 +42,19 @@ func instrumentInit() { } if cfg.BuildRace && cfg.BuildMSan { fmt.Fprintf(os.Stderr, "go %s: may not use -race and -msan simultaneously\n", flag.Args()[0]) - os.Exit(2) + base.SetExitStatus(2) + base.Exit() } if cfg.BuildMSan && !sys.MSanSupported(cfg.Goos, cfg.Goarch) { fmt.Fprintf(os.Stderr, "-msan is not supported on %s/%s\n", cfg.Goos, cfg.Goarch) - os.Exit(2) + base.SetExitStatus(2) + base.Exit() } if cfg.BuildRace { if !sys.RaceDetectorSupported(cfg.Goos, cfg.Goarch) { fmt.Fprintf(os.Stderr, "go %s: -race is only supported on linux/amd64, linux/ppc64le, linux/arm64, freebsd/amd64, netbsd/amd64, darwin/amd64 and windows/amd64\n", flag.Args()[0]) - os.Exit(2) + base.SetExitStatus(2) + base.Exit() } } mode := "race" @@ -61,7 +65,8 @@ func instrumentInit() { if !cfg.BuildContext.CgoEnabled { fmt.Fprintf(os.Stderr, "go %s: %s requires cgo; enable cgo by setting CGO_ENABLED=1\n", flag.Args()[0], modeFlag) - os.Exit(2) + base.SetExitStatus(2) + base.Exit() } forcedGcflags = append(forcedGcflags, modeFlag) forcedLdflags = append(forcedLdflags, modeFlag) @@ -90,7 +95,7 @@ func buildModeInit() { codegenArg = "-shared" default: switch cfg.Goos { - case "dragonfly", "freebsd", "linux", "netbsd", "openbsd", "solaris": + case "dragonfly", "freebsd", "illumos", "linux", "netbsd", "openbsd", "solaris": if platform == "linux/ppc64" { base.Fatalf("-buildmode=c-archive not supported on %s\n", platform) } @@ -159,6 +164,7 @@ func buildModeInit() { codegenArg = "-shared" case "darwin/amd64": codegenArg = "-shared" + case "aix/ppc64": default: base.Fatalf("-buildmode=pie not supported on %s\n", platform) } diff --git a/src/cmd/go/internal/work/security.go b/src/cmd/go/internal/work/security.go index 1a401b8981..ecfb9df1b2 100644 --- a/src/cmd/go/internal/work/security.go +++ b/src/cmd/go/internal/work/security.go @@ -30,16 +30,18 @@ package work import ( - "cmd/go/internal/load" "fmt" - "os" + "internal/lazyregexp" "regexp" "strings" + + "cmd/go/internal/cfg" + "cmd/go/internal/load" ) -var re = regexp.MustCompile +var re = lazyregexp.New -var validCompilerFlags = []*regexp.Regexp{ +var validCompilerFlags = []*lazyregexp.Regexp{ re(`-D([A-Za-z_].*)`), re(`-F([^@\-].*)`), re(`-I([^@\-].*)`), @@ -100,6 +102,10 @@ var validCompilerFlags = []*regexp.Regexp{ re(`-mmacosx-(.+)`), re(`-mios-simulator-version-min=(.+)`), re(`-miphoneos-version-min=(.+)`), + re(`-mtvos-simulator-version-min=(.+)`), + re(`-mtvos-version-min=(.+)`), + re(`-mwatchos-simulator-version-min=(.+)`), + re(`-mwatchos-version-min=(.+)`), re(`-mnop-fun-dllimport`), re(`-m(no-)?sse[0-9.]*`), re(`-m(no-)?ssse3`), @@ -130,7 +136,7 @@ var validCompilerFlagsWithNextArg = []string{ "-x", } -var validLinkerFlags = []*regexp.Regexp{ +var validLinkerFlags = []*lazyregexp.Regexp{ re(`-F([^@\-].*)`), re(`-l([^@\-].*)`), re(`-L([^@\-].*)`), @@ -166,6 +172,7 @@ var validLinkerFlags = []*regexp.Regexp{ re(`-Wl,--(no-)?allow-shlib-undefined`), re(`-Wl,--(no-)?as-needed`), re(`-Wl,-Bdynamic`), + re(`-Wl,-berok`), re(`-Wl,-Bstatic`), re(`-WL,-O([^@,\-][^,]*)?`), re(`-Wl,-d[ny]`), @@ -217,20 +224,20 @@ func checkLinkerFlags(name, source string, list []string) error { return checkFlags(name, source, list, validLinkerFlags, validLinkerFlagsWithNextArg) } -func checkFlags(name, source string, list []string, valid []*regexp.Regexp, validNext []string) error { +func checkFlags(name, source string, list []string, valid []*lazyregexp.Regexp, validNext []string) error { // Let users override rules with $CGO_CFLAGS_ALLOW, $CGO_CFLAGS_DISALLOW, etc. var ( allow *regexp.Regexp disallow *regexp.Regexp ) - if env := os.Getenv("CGO_" + name + "_ALLOW"); env != "" { + if env := cfg.Getenv("CGO_" + name + "_ALLOW"); env != "" { r, err := regexp.Compile(env) if err != nil { return fmt.Errorf("parsing $CGO_%s_ALLOW: %v", name, err) } allow = r } - if env := os.Getenv("CGO_" + name + "_DISALLOW"); env != "" { + if env := cfg.Getenv("CGO_" + name + "_DISALLOW"); env != "" { r, err := regexp.Compile(env) if err != nil { return fmt.Errorf("parsing $CGO_%s_DISALLOW: %v", name, err) diff --git a/src/cmd/go/main.go b/src/cmd/go/main.go index 4f8ab7f55a..0207862d0b 100644 --- a/src/cmd/go/main.go +++ b/src/cmd/go/main.go @@ -49,7 +49,7 @@ func init() { fix.CmdFix, fmtcmd.CmdFmt, generate.CmdGenerate, - get.CmdGet, + modget.CmdGet, work.CmdInstall, list.CmdList, modcmd.CmdMod, @@ -72,6 +72,7 @@ func init() { modload.HelpModules, modget.HelpModuleGet, help.HelpPackages, + modfetch.HelpSum, test.HelpTestflag, test.HelpTestfunc, } @@ -88,17 +89,10 @@ func main() { base.Usage() } - if modload.MustUseModules { - // If running with modules force-enabled, change get now to change help message. - *get.CmdGet = *modget.CmdGet - } - if args[0] == "get" || args[0] == "help" { - // Replace get with module-aware get if appropriate. - // Note that if MustUseModules is true, this happened already above, - // but no harm in doing it again. - if modload.Init(); modload.Enabled() { - *get.CmdGet = *modget.CmdGet + if modload.Init(); !modload.Enabled() { + // Replace module-aware get with GOPATH get if appropriate. + *modget.CmdGet = *get.CmdGet } } @@ -128,8 +122,14 @@ func main() { os.Exit(2) } if !filepath.IsAbs(p) { - fmt.Fprintf(os.Stderr, "go: GOPATH entry is relative; must be absolute path: %q.\nFor more details see: 'go help gopath'\n", p) - os.Exit(2) + if cfg.Getenv("GOPATH") == "" { + // We inferred $GOPATH from $HOME and did a bad job at it. + // Instead of dying, uninfer it. + cfg.BuildContext.GOPATH = "" + } else { + fmt.Fprintf(os.Stderr, "go: GOPATH entry is relative; must be absolute path: %q.\nFor more details see: 'go help gopath'\n", p) + os.Exit(2) + } } } } @@ -139,37 +139,6 @@ func main() { os.Exit(2) } - // TODO(rsc): Remove all these helper prints in Go 1.12. - switch args[0] { - case "mod": - if len(args) >= 2 { - flag := args[1] - if strings.HasPrefix(flag, "--") { - flag = flag[1:] - } - if i := strings.Index(flag, "="); i >= 0 { - flag = flag[:i] - } - switch flag { - case "-sync", "-fix": - fmt.Fprintf(os.Stderr, "go: go mod %s is now go mod tidy\n", flag) - os.Exit(2) - case "-init", "-graph", "-vendor", "-verify": - fmt.Fprintf(os.Stderr, "go: go mod %s is now go mod %s\n", flag, flag[1:]) - os.Exit(2) - case "-fmt", "-json", "-module", "-require", "-droprequire", "-replace", "-dropreplace", "-exclude", "-dropexclude": - fmt.Fprintf(os.Stderr, "go: go mod %s is now go mod edit %s\n", flag, flag) - os.Exit(2) - } - } - case "vendor": - fmt.Fprintf(os.Stderr, "go: vgo vendor is now go mod vendor\n") - os.Exit(2) - case "verify": - fmt.Fprintf(os.Stderr, "go: vgo verify is now go mod verify\n") - os.Exit(2) - } - // Set environment (GOOS, GOARCH, etc) explicitly. // In theory all the commands we invoke should have // the same default computation of these as we do, diff --git a/src/cmd/go/mkalldocs.sh b/src/cmd/go/mkalldocs.sh index f37d59d2d7..a2b0aca3c9 100755 --- a/src/cmd/go/mkalldocs.sh +++ b/src/cmd/go/mkalldocs.sh @@ -8,6 +8,6 @@ set -e go build -o go.latest # If the command used to generate alldocs.go changes, update TestDocsUpToDate in # help_test.go. -./go.latest help documentation >alldocs.go +GO111MODULE='' ./go.latest help documentation >alldocs.go gofmt -w alldocs.go rm go.latest diff --git a/src/cmd/go/note_test.go b/src/cmd/go/note_test.go index 66c5d39bf7..6d3b9b80f4 100644 --- a/src/cmd/go/note_test.go +++ b/src/cmd/go/note_test.go @@ -32,8 +32,6 @@ func TestNoteReading(t *testing.T) { switch { case !build.Default.CgoEnabled: t.Skipf("skipping - no cgo, so assuming external linking not available") - case runtime.GOOS == "openbsd" && runtime.GOARCH == "arm": - t.Skipf("skipping - external linking not supported, golang.org/issue/10619") case runtime.GOOS == "plan9": t.Skipf("skipping - external linking not supported") } diff --git a/src/cmd/go/proxy_test.go b/src/cmd/go/proxy_test.go index 830cea029b..71f709cb95 100644 --- a/src/cmd/go/proxy_test.go +++ b/src/cmd/go/proxy_test.go @@ -10,21 +10,25 @@ import ( "encoding/json" "flag" "fmt" + "io" "io/ioutil" "log" "net" "net/http" "os" "path/filepath" + "strconv" "strings" "sync" "testing" + "cmd/go/internal/dirhash" "cmd/go/internal/modfetch" "cmd/go/internal/modfetch/codehost" "cmd/go/internal/module" "cmd/go/internal/par" "cmd/go/internal/semver" + "cmd/go/internal/sumweb" "cmd/go/internal/txtar" ) @@ -42,7 +46,6 @@ var proxyOnce sync.Once // The proxy serves from testdata/mod. See testdata/mod/README. func StartProxy() { proxyOnce.Do(func() { - fmt.Fprintf(os.Stderr, "go test proxy starting\n") readModList() addr := *proxyAddr if addr == "" { @@ -58,6 +61,11 @@ func StartProxy() { go func() { log.Fatalf("go proxy: http.Serve: %v", http.Serve(l, http.HandlerFunc(proxyHandler))) }() + + // Prepopulate main sumdb. + for _, mod := range modList { + sumdbHandler.Server.Lookup(nil, mod.Path+"@"+mod.Version) + } }) } @@ -81,7 +89,9 @@ func readModList() { encPath := strings.ReplaceAll(name[:i], "_", "/") path, err := module.DecodePath(encPath) if err != nil { - fmt.Fprintf(os.Stderr, "go proxy_test: %v\n", err) + if encPath != "example.com/invalidpath/v1" { + fmt.Fprintf(os.Stderr, "go proxy_test: %v\n", err) + } continue } encVers := name[i+1:] @@ -96,6 +106,15 @@ func readModList() { var zipCache par.Cache +const ( + testSumDBName = "localhost.localdev/sumdb" + testSumDBVerifierKey = "localhost.localdev/sumdb+00000c67+AcTrnkbUA+TU4heY3hkjiSES/DSQniBqIeQ/YppAUtK6" + testSumDBSignerKey = "PRIVATE+KEY+localhost.localdev/sumdb+00000c67+AXu6+oaVaOYuQOFrf1V59JK1owcFlJcHwwXHDfDGxSPk" +) + +var sumdbHandler = &sumweb.Handler{Server: sumweb.NewTestServer(testSumDBSignerKey, proxyGoSum)} +var sumdbWrongHandler = &sumweb.Handler{Server: sumweb.NewTestServer(testSumDBSignerKey, proxyGoSumWrong)} + // proxyHandler serves the Go module proxy protocol. // See the proxy section of https://research.swtch.com/vgo-module. func proxyHandler(w http.ResponseWriter, r *http.Request) { @@ -103,7 +122,66 @@ func proxyHandler(w http.ResponseWriter, r *http.Request) { http.NotFound(w, r) return } - path := strings.TrimPrefix(r.URL.Path, "/mod/") + path := r.URL.Path[len("/mod/"):] + + // /mod/quiet/ does not print errors. + quiet := false + if strings.HasPrefix(path, "quiet/") { + path = path[len("quiet/"):] + quiet = true + } + + // Next element may opt into special behavior. + if j := strings.Index(path, "/"); j >= 0 { + n, err := strconv.Atoi(path[:j]) + if err == nil && n >= 200 { + w.WriteHeader(n) + return + } + if strings.HasPrefix(path, "sumdb-") { + n, err := strconv.Atoi(path[len("sumdb-"):j]) + if err == nil && n >= 200 { + if strings.HasPrefix(path[j:], "/sumdb/") { + w.WriteHeader(n) + return + } + path = path[j+1:] + } + } + } + + // Request for $GOPROXY/sumdb-direct is direct sumdb access. + // (Client thinks it is talking directly to a sumdb.) + if strings.HasPrefix(path, "sumdb-direct/") { + r.URL.Path = path[len("sumdb-direct"):] + sumdbHandler.ServeHTTP(w, r) + return + } + + // Request for $GOPROXY/sumdb-wrong is direct sumdb access + // but all the hashes are wrong. + // (Client thinks it is talking directly to a sumdb.) + if strings.HasPrefix(path, "sumdb-wrong/") { + r.URL.Path = path[len("sumdb-wrong"):] + sumdbWrongHandler.ServeHTTP(w, r) + return + } + + // Request for $GOPROXY/sumdb//supported + // is checking whether it's OK to access sumdb via the proxy. + if path == "sumdb/"+testSumDBName+"/supported" { + w.WriteHeader(200) + return + } + + // Request for $GOPROXY/sumdb//... goes to sumdb. + if sumdbPrefix := "sumdb/" + testSumDBName + "/"; strings.HasPrefix(path, sumdbPrefix) { + r.URL.Path = path[len(sumdbPrefix)-1:] + sumdbHandler.ServeHTTP(w, r) + return + } + + // Module proxy request: /mod/path/@v/version[.suffix] i := strings.Index(path, "/@v/") if i < 0 { http.NotFound(w, r) @@ -112,7 +190,9 @@ func proxyHandler(w http.ResponseWriter, r *http.Request) { enc, file := path[:i], path[i+len("/@v/"):] path, err := module.DecodePath(enc) if err != nil { - fmt.Fprintf(os.Stderr, "go proxy_test: %v\n", err) + if !quiet { + fmt.Fprintf(os.Stderr, "go proxy_test: %v\n", err) + } http.NotFound(w, r) return } @@ -168,9 +248,11 @@ func proxyHandler(w http.ResponseWriter, r *http.Request) { } } - a := readArchive(path, vers) - if a == nil { - fmt.Fprintf(os.Stderr, "go proxy: no archive %s %s\n", path, vers) + a, err := readArchive(path, vers) + if err != nil { + if !quiet { + fmt.Fprintf(os.Stderr, "go proxy: no archive %s %s: %v\n", path, vers, err) + } http.Error(w, "cannot load archive", 500) return } @@ -218,7 +300,9 @@ func proxyHandler(w http.ResponseWriter, r *http.Request) { }).(cached) if c.err != nil { - fmt.Fprintf(os.Stderr, "go proxy: %v\n", c.err) + if !quiet { + fmt.Fprintf(os.Stderr, "go proxy: %v\n", c.err) + } http.Error(w, c.err.Error(), 500) return } @@ -230,8 +314,8 @@ func proxyHandler(w http.ResponseWriter, r *http.Request) { } func findHash(m module.Version) string { - a := readArchive(m.Path, m.Version) - if a == nil { + a, err := readArchive(m.Path, m.Version) + if err != nil { return "" } var data []byte @@ -250,16 +334,14 @@ var archiveCache par.Cache var cmdGoDir, _ = os.Getwd() -func readArchive(path, vers string) *txtar.Archive { +func readArchive(path, vers string) (*txtar.Archive, error) { enc, err := module.EncodePath(path) if err != nil { - fmt.Fprintf(os.Stderr, "go proxy: %v\n", err) - return nil + return nil, err } encVers, err := module.EncodeVersion(vers) if err != nil { - fmt.Fprintf(os.Stderr, "go proxy: %v\n", err) - return nil + return nil, err } prefix := strings.ReplaceAll(enc, "/", "_") @@ -274,5 +356,51 @@ func readArchive(path, vers string) *txtar.Archive { } return a }).(*txtar.Archive) - return a + if a == nil { + return nil, os.ErrNotExist + } + return a, nil +} + +// proxyGoSum returns the two go.sum lines for path@vers. +func proxyGoSum(path, vers string) ([]byte, error) { + a, err := readArchive(path, vers) + if err != nil { + return nil, err + } + var names []string + files := make(map[string][]byte) + var gomod []byte + for _, f := range a.Files { + if strings.HasPrefix(f.Name, ".") { + if f.Name == ".mod" { + gomod = f.Data + } + continue + } + name := path + "@" + vers + "/" + f.Name + names = append(names, name) + files[name] = f.Data + } + h1, err := dirhash.Hash1(names, func(name string) (io.ReadCloser, error) { + data := files[name] + return ioutil.NopCloser(bytes.NewReader(data)), nil + }) + if err != nil { + return nil, err + } + h1mod, err := dirhash.Hash1([]string{"go.mod"}, func(string) (io.ReadCloser, error) { + return ioutil.NopCloser(bytes.NewReader(gomod)), nil + }) + if err != nil { + return nil, err + } + data := []byte(fmt.Sprintf("%s %s %s\n%s %s/go.mod %s\n", path, vers, h1, path, vers, h1mod)) + return data, nil +} + +// proxyGoSumWrong returns the wrong lines. +func proxyGoSumWrong(path, vers string) ([]byte, error) { + data := []byte(fmt.Sprintf("%s %s %s\n%s %s/go.mod %s\n", path, vers, "h1:wrong", path, vers, "h1:wrong")) + return data, nil } diff --git a/src/cmd/go/script_test.go b/src/cmd/go/script_test.go index c5e0064036..499a1ccd3f 100644 --- a/src/cmd/go/script_test.go +++ b/src/cmd/go/script_test.go @@ -84,6 +84,7 @@ type backgroundCmd struct { var extraEnvKeys = []string{ "SYSTEMROOT", // must be preserved on Windows to find DLLs; golang.org/issue/25210 + "WINDIR", // must be preserved on Windows to be able to run PowerShell command; golang.org/issue/30711 "LD_LIBRARY_PATH", // must be preserved on Unix systems to find shared libraries "CC", // don't lose user settings when invoking cgo "GO_TESTING_GOTOOLS", // for gccgo testing @@ -109,6 +110,9 @@ func (ts *testScript) setup() { "GOPATH=" + filepath.Join(ts.workdir, "gopath"), "GOPROXY=" + proxyURL, "GOROOT=" + testGOROOT, + "GOSUMDB=" + testSumDBVerifierKey, + "GONOPROXY=", + "GONOSUMDB=", tempEnvName() + "=" + filepath.Join(ts.workdir, "tmp"), "devnull=" + os.DevNull, "goversion=" + goVersion(ts), @@ -192,7 +196,7 @@ func (ts *testScript) run() { a, err := txtar.ParseFile(ts.file) ts.check(err) for _, f := range a.Files { - name := ts.mkabs(ts.expand(f.Name)) + name := ts.mkabs(ts.expand(f.Name, false)) ts.check(os.MkdirAll(filepath.Dir(name), 0777)) ts.check(ioutil.WriteFile(name, f.Data, 0666)) } @@ -238,34 +242,24 @@ Script: } // Parse input line. Ignore blanks entirely. - args := ts.parse(line) - if len(args) == 0 { + parsed := ts.parse(line) + if parsed.name == "" { + if parsed.neg || len(parsed.conds) > 0 { + ts.fatalf("missing command") + } continue } // Echo command to log. fmt.Fprintf(&ts.log, "> %s\n", line) - // Command prefix [cond] means only run this command if cond is satisfied. - for strings.HasPrefix(args[0], "[") && strings.HasSuffix(args[0], "]") { - cond := args[0] - cond = cond[1 : len(cond)-1] - cond = strings.TrimSpace(cond) - args = args[1:] - if len(args) == 0 { - ts.fatalf("missing command after condition") - } - want := true - if strings.HasPrefix(cond, "!") { - want = false - cond = strings.TrimSpace(cond[1:]) - } + for _, cond := range parsed.conds { // Known conds are: $GOOS, $GOARCH, runtime.Compiler, and 'short' (for testing.Short). // // NOTE: If you make changes here, update testdata/script/README too! // ok := false - switch cond { + switch cond.tag { case runtime.GOOS, runtime.GOARCH, runtime.Compiler: ok = true case "short": @@ -285,8 +279,8 @@ Script: case "symlink": ok = testenv.HasSymlink() default: - if strings.HasPrefix(cond, "exec:") { - prog := cond[len("exec:"):] + if strings.HasPrefix(cond.tag, "exec:") { + prog := cond.tag[len("exec:"):] ok = execCache.Do(prog, func() interface{} { if runtime.GOOS == "plan9" && prog == "git" { // The Git command is usually not the real Git on Plan 9. @@ -298,33 +292,22 @@ Script: }).(bool) break } - if !imports.KnownArch[cond] && !imports.KnownOS[cond] && cond != "gc" && cond != "gccgo" { - ts.fatalf("unknown condition %q", cond) + if !imports.KnownArch[cond.tag] && !imports.KnownOS[cond.tag] && cond.tag != "gc" && cond.tag != "gccgo" { + ts.fatalf("unknown condition %q", cond.tag) } } - if ok != want { + if ok != cond.want { // Don't run rest of line. continue Script } } - // Command prefix ! means negate the expectations about this command: - // go command should fail, match should not be found, etc. - neg := false - if args[0] == "!" { - neg = true - args = args[1:] - if len(args) == 0 { - ts.fatalf("! on line by itself") - } - } - // Run command. - cmd := scriptCmds[args[0]] + cmd := scriptCmds[parsed.name] if cmd == nil { - ts.fatalf("unknown command %q", args[0]) + ts.fatalf("unknown command %q", parsed.name) } - cmd(ts, neg, args[1:]) + cmd(ts, parsed.neg, parsed.args) // Command can ask script to stop early. if ts.stopped { @@ -376,6 +359,14 @@ var scriptCmds = map[string]func(*testScript, bool, []string){ "wait": (*testScript).cmdWait, } +// When expanding shell variables for these commands, we apply regexp quoting to +// expanded strings within the first argument. +var regexpCmd = map[string]bool{ + "grep": true, + "stderr": true, + "stdout": true, +} + // addcrlf adds CRLF line endings to the named files. func (ts *testScript) cmdAddcrlf(neg bool, args []string) { if len(args) == 0 { @@ -399,6 +390,7 @@ func (ts *testScript) cmdCc(neg bool, args []string) { var b work.Builder b.Init() ts.cmdExec(neg, append(b.GccCmd(".", ""), args...)) + os.RemoveAll(b.WorkDir) } // cd changes to a different directory. @@ -485,8 +477,8 @@ func (ts *testScript) doCmdCmp(args []string, env bool) { text2 = string(data) if env { - text1 = ts.expand(text1) - text2 = ts.expand(text2) + text1 = ts.expand(text1, false) + text2 = ts.expand(text2, false) } if text1 == text2 { @@ -549,6 +541,13 @@ func (ts *testScript) cmdEnv(neg bool, args []string) { if neg { ts.fatalf("unsupported: ! env") } + + conv := func(s string) string { return s } + if len(args) > 0 && args[0] == "-r" { + conv = regexp.QuoteMeta + args = args[1:] + } + if len(args) == 0 { printed := make(map[string]bool) // env list can have duplicates; only print effective value (from envMap) once for _, kv := range ts.env { @@ -566,8 +565,9 @@ func (ts *testScript) cmdEnv(neg bool, args []string) { fmt.Fprintf(&ts.log, "%s=%s\n", env, ts.envMap[env]) continue } - ts.env = append(ts.env, env) - ts.envMap[env[:i]] = env[i+1:] + key, val := env[:i], conv(env[i+1:]) + ts.env = append(ts.env, key+"="+val) + ts.envMap[key] = val } } @@ -753,6 +753,11 @@ func scriptMatch(ts *testScript, neg bool, args []string, text, name string) { } args = args[1:] } + quiet := false + if len(args) >= 1 && args[0] == "-q" { + quiet = true + args = args[1:] + } extraUsage := "" want := 1 @@ -764,9 +769,11 @@ func scriptMatch(ts *testScript, neg bool, args []string, text, name string) { ts.fatalf("usage: %s [-count=N] 'pattern'%s", name, extraUsage) } - pattern := args[0] - re, err := regexp.Compile(`(?m)` + pattern) - ts.check(err) + pattern := `(?m)` + args[0] + re, err := regexp.Compile(pattern) + if err != nil { + ts.fatalf("regexp.Compile(%q): %v", pattern, err) + } isGrep := name == "grep" if isGrep { @@ -781,14 +788,14 @@ func scriptMatch(ts *testScript, neg bool, args []string, text, name string) { if neg { if re.MatchString(text) { - if isGrep { + if isGrep && !quiet { fmt.Fprintf(&ts.log, "[%s]\n%s\n", name, text) } ts.fatalf("unexpected match for %#q found in %s: %s", pattern, name, re.FindString(text)) } } else { if !re.MatchString(text) { - if isGrep { + if isGrep && !quiet { fmt.Fprintf(&ts.log, "[%s]\n%s\n", name, text) } ts.fatalf("no match for %#q found in %s", pattern, name) @@ -796,7 +803,7 @@ func scriptMatch(ts *testScript, neg bool, args []string, text, name string) { if n > 0 { count := len(re.FindAllString(text, -1)) if count != n { - if isGrep { + if isGrep && !quiet { fmt.Fprintf(&ts.log, "[%s]\n%s\n", name, text) } ts.fatalf("have %d matches for %#q, want %d", count, pattern, n) @@ -955,8 +962,20 @@ func interruptProcess(p *os.Process) { } // expand applies environment variable expansion to the string s. -func (ts *testScript) expand(s string) string { - return os.Expand(s, func(key string) string { return ts.envMap[key] }) +func (ts *testScript) expand(s string, inRegexp bool) string { + return os.Expand(s, func(key string) string { + e := ts.envMap[key] + if inRegexp { + // Replace workdir with $WORK, since we have done the same substitution in + // the text we're about to compare against. + e = strings.ReplaceAll(e, ts.workdir, "$WORK") + + // Quote to literal strings: we want paths like C:\work\go1.4 to remain + // paths rather than regular expressions. + e = regexp.QuoteMeta(e) + } + return e + }) } // fatalf aborts the test with the given failure message. @@ -974,27 +993,82 @@ func (ts *testScript) mkabs(file string) string { return filepath.Join(ts.cd, file) } +// A condition guards execution of a command. +type condition struct { + want bool + tag string +} + +// A command is a complete command parsed from a script. +type command struct { + neg bool // if true, expect the command to fail + conds []condition // all must be satisfied + name string // the name of the command; must be non-empty + args []string // shell-expanded arguments following name +} + // parse parses a single line as a list of space-separated arguments // subject to environment variable expansion (but not resplitting). // Single quotes around text disable splitting and expansion. // To embed a single quote, double it: 'Don''t communicate by sharing memory.' -func (ts *testScript) parse(line string) []string { +func (ts *testScript) parse(line string) command { ts.line = line var ( - args []string - arg string // text of current arg so far (need to add line[start:i]) - start = -1 // if >= 0, position where current arg text chunk starts - quoted = false // currently processing quoted text + cmd command + arg string // text of current arg so far (need to add line[start:i]) + start = -1 // if >= 0, position where current arg text chunk starts + quoted = false // currently processing quoted text + isRegexp = false // currently processing unquoted regular expression ) + + flushArg := func() { + defer func() { + arg = "" + start = -1 + }() + + if cmd.name != "" { + cmd.args = append(cmd.args, arg) + isRegexp = false // Commands take only one regexp argument, so no subsequent args are regexps. + return + } + + // Command prefix ! means negate the expectations about this command: + // go command should fail, match should not be found, etc. + if arg == "!" { + if cmd.neg { + ts.fatalf("duplicated '!' token") + } + cmd.neg = true + return + } + + // Command prefix [cond] means only run this command if cond is satisfied. + if strings.HasPrefix(arg, "[") && strings.HasSuffix(arg, "]") { + want := true + arg = strings.TrimSpace(arg[1 : len(arg)-1]) + if strings.HasPrefix(arg, "!") { + want = false + arg = strings.TrimSpace(arg[1:]) + } + if arg == "" { + ts.fatalf("empty condition") + } + cmd.conds = append(cmd.conds, condition{want: want, tag: arg}) + return + } + + cmd.name = arg + isRegexp = regexpCmd[cmd.name] + } + for i := 0; ; i++ { if !quoted && (i >= len(line) || line[i] == ' ' || line[i] == '\t' || line[i] == '\r' || line[i] == '#') { // Found arg-separating space. if start >= 0 { - arg += ts.expand(line[start:i]) - args = append(args, arg) - start = -1 - arg = "" + arg += ts.expand(line[start:i], isRegexp) + flushArg() } if i >= len(line) || line[i] == '#' { break @@ -1008,7 +1082,7 @@ func (ts *testScript) parse(line string) []string { if !quoted { // starting a quoted chunk if start >= 0 { - arg += ts.expand(line[start:i]) + arg += ts.expand(line[start:i], isRegexp) } start = i + 1 quoted = true @@ -1032,7 +1106,7 @@ func (ts *testScript) parse(line string) []string { start = i } } - return args + return cmd } // diff returns a formatted diff of the two texts, diff --git a/src/cmd/go/testdata/flag_test.go b/src/cmd/go/testdata/flag_test.go index ddf613d870..a4e5507f2c 100644 --- a/src/cmd/go/testdata/flag_test.go +++ b/src/cmd/go/testdata/flag_test.go @@ -1,16 +1,19 @@ +// 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 flag_test import ( "flag" - "log" "testing" ) var v = flag.Int("v", 0, "v flag") -// Run this as go test pkg -v=7 +// Run this as go test pkg -args -v=7 func TestVFlagIsSet(t *testing.T) { if *v != 7 { - log.Fatal("v flag not set") + t.Fatal("v flag not set") } } diff --git a/src/cmd/go/testdata/mod/example.com_badchain_a_v1.0.0.txt b/src/cmd/go/testdata/mod/example.com_badchain_a_v1.0.0.txt new file mode 100644 index 0000000000..d7bf6471b7 --- /dev/null +++ b/src/cmd/go/testdata/mod/example.com_badchain_a_v1.0.0.txt @@ -0,0 +1,12 @@ +example.com/badchain/a v1.0.0 + +-- .mod -- +module example.com/badchain/a + +require example.com/badchain/b v1.0.0 +-- .info -- +{"Version":"v1.0.0"} +-- a.go -- +package a + +import _ "example.com/badchain/b" diff --git a/src/cmd/go/testdata/mod/example.com_badchain_a_v1.1.0.txt b/src/cmd/go/testdata/mod/example.com_badchain_a_v1.1.0.txt new file mode 100644 index 0000000000..92190d8ac1 --- /dev/null +++ b/src/cmd/go/testdata/mod/example.com_badchain_a_v1.1.0.txt @@ -0,0 +1,12 @@ +example.com/badchain/a v1.1.0 + +-- .mod -- +module example.com/badchain/a + +require example.com/badchain/b v1.1.0 +-- .info -- +{"Version":"v1.1.0"} +-- a.go -- +package a + +import _ "example.com/badchain/b" diff --git a/src/cmd/go/testdata/mod/example.com_badchain_b_v1.0.0.txt b/src/cmd/go/testdata/mod/example.com_badchain_b_v1.0.0.txt new file mode 100644 index 0000000000..d42b8aab16 --- /dev/null +++ b/src/cmd/go/testdata/mod/example.com_badchain_b_v1.0.0.txt @@ -0,0 +1,12 @@ +example.com/badchain/b v1.0.0 + +-- .mod -- +module example.com/badchain/b + +require example.com/badchain/c v1.0.0 +-- .info -- +{"Version":"v1.0.0"} +-- b.go -- +package b + +import _ "example.com/badchain/c" diff --git a/src/cmd/go/testdata/mod/example.com_badchain_b_v1.1.0.txt b/src/cmd/go/testdata/mod/example.com_badchain_b_v1.1.0.txt new file mode 100644 index 0000000000..664818474c --- /dev/null +++ b/src/cmd/go/testdata/mod/example.com_badchain_b_v1.1.0.txt @@ -0,0 +1,12 @@ +example.com/badchain/b v1.1.0 + +-- .mod -- +module example.com/badchain/b + +require example.com/badchain/c v1.1.0 +-- .info -- +{"Version":"v1.1.0"} +-- b.go -- +package b + +import _ "example.com/badchain/c" diff --git a/src/cmd/go/testdata/mod/example.com_badchain_c_v1.0.0.txt b/src/cmd/go/testdata/mod/example.com_badchain_c_v1.0.0.txt new file mode 100644 index 0000000000..9c717cb0e6 --- /dev/null +++ b/src/cmd/go/testdata/mod/example.com_badchain_c_v1.0.0.txt @@ -0,0 +1,8 @@ +example.com/badchain/c v1.0.0 + +-- .mod -- +module example.com/badchain/c +-- .info -- +{"Version":"v1.0.0"} +-- c.go -- +package c diff --git a/src/cmd/go/testdata/mod/example.com_badchain_c_v1.1.0.txt b/src/cmd/go/testdata/mod/example.com_badchain_c_v1.1.0.txt new file mode 100644 index 0000000000..da19ebd9ec --- /dev/null +++ b/src/cmd/go/testdata/mod/example.com_badchain_c_v1.1.0.txt @@ -0,0 +1,8 @@ +example.com/badchain/c v1.1.0 + +-- .mod -- +module example.com/badchain/wrong +-- .info -- +{"Version":"v1.1.0"} +-- c.go -- +package c diff --git a/src/cmd/go/testdata/mod/example.com_missingpkg_v1.0.0.txt b/src/cmd/go/testdata/mod/example.com_missingpkg_v1.0.0.txt new file mode 100644 index 0000000000..15f3f69557 --- /dev/null +++ b/src/cmd/go/testdata/mod/example.com_missingpkg_v1.0.0.txt @@ -0,0 +1,11 @@ +The deprecated package is present in this version (which is @latest) but +is deleted in a newer prerelease version. + +-- .mod -- +module example.com/missingpkg +-- .info -- +{"Version":"v1.0.0"} +-- lib.go -- +package lib +-- deprecated/deprecated.go -- +package deprecated diff --git a/src/cmd/go/testdata/mod/example.com_missingpkg_v1.0.1-beta.txt b/src/cmd/go/testdata/mod/example.com_missingpkg_v1.0.1-beta.txt new file mode 100644 index 0000000000..44580fe4cb --- /dev/null +++ b/src/cmd/go/testdata/mod/example.com_missingpkg_v1.0.1-beta.txt @@ -0,0 +1,8 @@ +The deprecated package is deleted in this version. + +-- .mod -- +module example.com/missingpkg +-- .info -- +{"Version":"v1.0.1-beta"} +-- lib.go -- +package lib diff --git a/src/cmd/go/testdata/mod/example.com_nest_sub_v1.0.0.txt b/src/cmd/go/testdata/mod/example.com_nest_sub_v1.0.0.txt new file mode 100644 index 0000000000..90f1459803 --- /dev/null +++ b/src/cmd/go/testdata/mod/example.com_nest_sub_v1.0.0.txt @@ -0,0 +1,12 @@ +Written by hand. +Test case for nested modules without an explicit relationship. +This is nested below the top-level module. + +-- .mod -- +module example.com/nest/sub +-- .info -- +{"Version": "v1.0.0"} +-- go.mod -- +module example.com/nest/sub +-- y/y.go -- +package y diff --git a/src/cmd/go/testdata/mod/example.com_nest_v1.0.0.txt b/src/cmd/go/testdata/mod/example.com_nest_v1.0.0.txt new file mode 100644 index 0000000000..593caf1d90 --- /dev/null +++ b/src/cmd/go/testdata/mod/example.com_nest_v1.0.0.txt @@ -0,0 +1,12 @@ +Written by hand. +Test case for nested modules without an explicit relationship. +This is the top-level module. + +-- .mod -- +module example.com/nest +-- .info -- +{"Version": "v1.0.0"} +-- go.mod -- +module example.com/nest +-- sub/x/x.go -- +package x diff --git a/src/cmd/go/testdata/mod/example.com_nest_v1.1.0.txt b/src/cmd/go/testdata/mod/example.com_nest_v1.1.0.txt new file mode 100644 index 0000000000..5a01550fd5 --- /dev/null +++ b/src/cmd/go/testdata/mod/example.com_nest_v1.1.0.txt @@ -0,0 +1,12 @@ +Written by hand. +Test case for nested modules without an explicit relationship. +This is the top-level module. + +-- .mod -- +module example.com/nest +-- .info -- +{"Version": "v1.1.0"} +-- go.mod -- +module example.com/nest +-- sub/x/x.go -- +package x diff --git a/src/cmd/go/testdata/mod/example.com_newcycle_a_v1.0.0.txt b/src/cmd/go/testdata/mod/example.com_newcycle_a_v1.0.0.txt new file mode 100644 index 0000000000..829065df9f --- /dev/null +++ b/src/cmd/go/testdata/mod/example.com_newcycle_a_v1.0.0.txt @@ -0,0 +1,10 @@ +example.com/newcycle/a v1.0.0 + +Transitively requires v1.0.1 of itself via example.com/newcycle/b + +-- .mod -- +module example.com/newcycle/a + +require example.com/newcycle/b v1.0.0 +-- .info -- +{"Version":"v1.0.0"} diff --git a/src/cmd/go/testdata/mod/example.com_newcycle_a_v1.0.1.txt b/src/cmd/go/testdata/mod/example.com_newcycle_a_v1.0.1.txt new file mode 100644 index 0000000000..a03f4b49fd --- /dev/null +++ b/src/cmd/go/testdata/mod/example.com_newcycle_a_v1.0.1.txt @@ -0,0 +1,10 @@ +example.com/newcycle/a v1.0.1 + +Transitively requires itself via example.com/newcycle/b + +-- .mod -- +module example.com/newcycle/a + +require example.com/newcycle/b v1.0.0 +-- .info -- +{"Version":"v1.0.1"} diff --git a/src/cmd/go/testdata/mod/example.com_newcycle_b_v1.0.0.txt b/src/cmd/go/testdata/mod/example.com_newcycle_b_v1.0.0.txt new file mode 100644 index 0000000000..ff9e1f5ea5 --- /dev/null +++ b/src/cmd/go/testdata/mod/example.com_newcycle_b_v1.0.0.txt @@ -0,0 +1,8 @@ +example.com/newcycle/b v1.0.0 + +-- .mod -- +module example.com/newcycle/b + +require example.com/newcycle/a v1.0.1 +-- .info -- +{"Version":"v1.0.0"} diff --git a/src/cmd/go/testdata/mod/example.com_pseudoupgrade_v0.0.0-20190429073000-30950c05d534.txt b/src/cmd/go/testdata/mod/example.com_pseudoupgrade_v0.0.0-20190429073000-30950c05d534.txt new file mode 100644 index 0000000000..421e643d43 --- /dev/null +++ b/src/cmd/go/testdata/mod/example.com_pseudoupgrade_v0.0.0-20190429073000-30950c05d534.txt @@ -0,0 +1,13 @@ +example.com/pseudoupgrade v0.0.0-20190429073000-30950c05d534 +written by hand + +-- .mod -- +module example.com/pseudoupgrade + +-- .info -- +{"Version":"v0.0.0-20190429073000-30950c05d534","Name":"v0.0.0-20190429073000-30950c05d534","Short":"30950c05d534","Time":"2019-04-29T07:30:00Z"} + +-- pseudoupgrade.go -- +package pseudoupgrade + +const X = 1 diff --git a/src/cmd/go/testdata/mod/example.com_pseudoupgrade_v0.1.0.txt b/src/cmd/go/testdata/mod/example.com_pseudoupgrade_v0.1.0.txt new file mode 100644 index 0000000000..7ddb0dc724 --- /dev/null +++ b/src/cmd/go/testdata/mod/example.com_pseudoupgrade_v0.1.0.txt @@ -0,0 +1,13 @@ +example.com/pseudoupgrade v0.1.0 +written by hand + +-- .mod -- +module example.com/pseudoupgrade + +-- .info -- +{"Version":"v0.1.0","Name":"","Short":"","Time":"2019-04-29T07:30:30Z"} + +-- pseudoupgrade.go -- +package pseudoupgrade + +const X = 1 diff --git a/src/cmd/go/testdata/mod/example.com_pseudoupgrade_v0.1.1-0.20190429073117-b5426c86b553.txt b/src/cmd/go/testdata/mod/example.com_pseudoupgrade_v0.1.1-0.20190429073117-b5426c86b553.txt new file mode 100644 index 0000000000..b3f48bbdab --- /dev/null +++ b/src/cmd/go/testdata/mod/example.com_pseudoupgrade_v0.1.1-0.20190429073117-b5426c86b553.txt @@ -0,0 +1,13 @@ +example.com/pseudoupgrade v0.1.1-0.20190429073117-b5426c86b553 +written by hand + +-- .mod -- +module example.com/pseudoupgrade + +-- .info -- +{"Version":"v0.1.1-0.20190429073117-b5426c86b553","Name":"v0.1.1-0.20190429073117-b5426c86b553","Short":"b5426c86b553","Time":"2019-04-29T07:31:00Z"} + +-- pseudoupgrade.go -- +package pseudoupgrade + +const X = 1 diff --git a/src/cmd/go/testdata/mod/example.com_usemissingpre_v1.0.0.txt b/src/cmd/go/testdata/mod/example.com_usemissingpre_v1.0.0.txt new file mode 100644 index 0000000000..5e1c5c815e --- /dev/null +++ b/src/cmd/go/testdata/mod/example.com_usemissingpre_v1.0.0.txt @@ -0,0 +1,13 @@ +This module requires example.com/missingpkg at a prerelease version, which +is newer than @latest. + +-- .mod -- +module example.com/usemissingpre + +require example.com/missingpkg v1.0.1-beta +-- .info -- +{"Version":"v1.0.0"} +-- use.go -- +package use + +import _ "example.com/missingpkg" diff --git a/src/cmd/go/testdata/mod/patch.example.com_depofdirectpatch_v1.0.0.txt b/src/cmd/go/testdata/mod/patch.example.com_depofdirectpatch_v1.0.0.txt new file mode 100644 index 0000000000..40616c668a --- /dev/null +++ b/src/cmd/go/testdata/mod/patch.example.com_depofdirectpatch_v1.0.0.txt @@ -0,0 +1,11 @@ +patch.example.com/depofdirectpatch v1.0.0 +written by hand + +-- .mod -- +module patch.example.com/depofdirectpatch +-- .info -- +{"Version":"v1.0.0"} +-- go.mod -- +module patch.example.com/depofdirectpatch +-- depofdirectpatch.go -- +package depofdirectpatch diff --git a/src/cmd/go/testdata/mod/patch.example.com_depofdirectpatch_v1.0.1.txt b/src/cmd/go/testdata/mod/patch.example.com_depofdirectpatch_v1.0.1.txt new file mode 100644 index 0000000000..e075028656 --- /dev/null +++ b/src/cmd/go/testdata/mod/patch.example.com_depofdirectpatch_v1.0.1.txt @@ -0,0 +1,11 @@ +patch.example.com/depofdirectpatch v1.0.1 +written by hand + +-- .mod -- +module patch.example.com/depofdirectpatch +-- .info -- +{"Version":"v1.0.1"} +-- go.mod -- +module patch.example.com/depofdirectpatch +-- depofdirectpatch.go -- +package depofdirectpatch diff --git a/src/cmd/go/testdata/mod/patch.example.com_direct_v1.0.0.txt b/src/cmd/go/testdata/mod/patch.example.com_direct_v1.0.0.txt new file mode 100644 index 0000000000..1e775fb89b --- /dev/null +++ b/src/cmd/go/testdata/mod/patch.example.com_direct_v1.0.0.txt @@ -0,0 +1,21 @@ +patch.example.com/direct v1.0.0 +written by hand + +-- .mod -- +module patch.example.com/direct + +require ( + patch.example.com/indirect v1.0.0 +) +-- .info -- +{"Version":"v1.0.0"} +-- go.mod -- +module patch.example.com/direct + +require ( + patch.example.com/indirect v1.0.0 +) +-- direct.go -- +package direct + +import _ "patch.example.com/indirect" diff --git a/src/cmd/go/testdata/mod/patch.example.com_direct_v1.0.1.txt b/src/cmd/go/testdata/mod/patch.example.com_direct_v1.0.1.txt new file mode 100644 index 0000000000..64912b7b43 --- /dev/null +++ b/src/cmd/go/testdata/mod/patch.example.com_direct_v1.0.1.txt @@ -0,0 +1,27 @@ +patch.example.com/direct v1.0.1 +written by hand + +-- .mod -- +module patch.example.com/direct + +require ( + patch.example.com/indirect v1.0.0 + patch.example.com/depofdirectpatch v1.0.0 +) +-- .info -- +{"Version":"v1.0.1"} +-- go.mod -- +module patch.example.com/direct + +require ( + patch.example.com/indirect v1.0.0 + patch.example.com/depofdirectpatch v1.0.0 +) +-- direct.go -- +package direct + +import _ "patch.example.com/indirect" +-- usedepofdirectpatch/unused.go -- +package usedepofdirectpatch + +import _ "patch.example.com/depofdirectpatch" diff --git a/src/cmd/go/testdata/mod/patch.example.com_direct_v1.1.0.txt b/src/cmd/go/testdata/mod/patch.example.com_direct_v1.1.0.txt new file mode 100644 index 0000000000..406e3b9f62 --- /dev/null +++ b/src/cmd/go/testdata/mod/patch.example.com_direct_v1.1.0.txt @@ -0,0 +1,21 @@ +patch.example.com/direct v1.1.0 +written by hand + +-- .mod -- +module patch.example.com/direct + +require ( + patch.example.com/indirect v1.0.0 +) +-- .info -- +{"Version":"v1.1.0"} +-- go.mod -- +module patch.example.com/direct + +require ( + patch.example.com/indirect v1.0.0 +) +-- direct.go -- +package direct + +import _ "patch.example.com/indirect" diff --git a/src/cmd/go/testdata/mod/patch.example.com_indirect_v1.0.0.txt b/src/cmd/go/testdata/mod/patch.example.com_indirect_v1.0.0.txt new file mode 100644 index 0000000000..ea7f5e2d8d --- /dev/null +++ b/src/cmd/go/testdata/mod/patch.example.com_indirect_v1.0.0.txt @@ -0,0 +1,11 @@ +patch.example.com/indirect v1.0.0 +written by hand + +-- .mod -- +module patch.example.com/indirect +-- .info -- +{"Version":"v1.0.0"} +-- go.mod -- +module patch.example.com/indirect +-- direct.go -- +package indirect diff --git a/src/cmd/go/testdata/mod/patch.example.com_indirect_v1.0.1.txt b/src/cmd/go/testdata/mod/patch.example.com_indirect_v1.0.1.txt new file mode 100644 index 0000000000..8c6cf8e7bf --- /dev/null +++ b/src/cmd/go/testdata/mod/patch.example.com_indirect_v1.0.1.txt @@ -0,0 +1,11 @@ +patch.example.com/indirect v1.0.1 +written by hand + +-- .mod -- +module patch.example.com/indirect +-- .info -- +{"Version":"v1.0.1"} +-- go.mod -- +module patch.example.com/indirect +-- direct.go -- +package indirect diff --git a/src/cmd/go/testdata/mod/patch.example.com_indirect_v1.1.0.txt b/src/cmd/go/testdata/mod/patch.example.com_indirect_v1.1.0.txt new file mode 100644 index 0000000000..f7229d417a --- /dev/null +++ b/src/cmd/go/testdata/mod/patch.example.com_indirect_v1.1.0.txt @@ -0,0 +1,11 @@ +patch.example.com/indirect v1.1.0 +written by hand + +-- .mod -- +module patch.example.com/indirect +-- .info -- +{"Version":"v1.1.0"} +-- go.mod -- +module patch.example.com/indirect +-- direct.go -- +package indirect diff --git a/src/cmd/go/testdata/mod/rsc.io_badsum_v1.0.0.txt b/src/cmd/go/testdata/mod/rsc.io_badsum_v1.0.0.txt new file mode 100644 index 0000000000..d62db2627a --- /dev/null +++ b/src/cmd/go/testdata/mod/rsc.io_badsum_v1.0.0.txt @@ -0,0 +1,14 @@ +rsc.io/badsum@v1.0.0 + +This module would match the hard-coded hash for rsc.io/badsum v1.0.0 +in modfetch/notary.go if not for the "break hash" line. + +-- .mod -- +module "rsc.io/badsum" +-- .info -- +{"Version":"v1.0.0","Time":"2018-02-14T00:45:20Z"} +-- go.mod -- +module "rsc.io/badsum" +-- badsum.go -- +package badsum +// break hash diff --git a/src/cmd/go/testdata/mod/rsc.io_badsum_v1.0.1.txt b/src/cmd/go/testdata/mod/rsc.io_badsum_v1.0.1.txt new file mode 100644 index 0000000000..5fea50a01d --- /dev/null +++ b/src/cmd/go/testdata/mod/rsc.io_badsum_v1.0.1.txt @@ -0,0 +1,14 @@ +rsc.io/badsum@v1.0.1 + +This module would match the hard-coded hash for rsc.io/badsum v1.0.1/go.mod +in modfetch/notary.go if not for the "break hash" line. + +-- .mod -- +module "rsc.io/badsum" +# break hash +-- .info -- +{"Version":"v1.0.1","Time":"2018-02-14T00:45:20Z"} +-- go.mod -- +module "rsc.io/badsum" +-- badsum.go -- +package badsum diff --git a/src/cmd/go/testdata/mod/rsc.io_fortune_v2_v2.0.0.txt b/src/cmd/go/testdata/mod/rsc.io_fortune_v2_v2.0.0.txt index cfa91f08a5..3acd637931 100644 --- a/src/cmd/go/testdata/mod/rsc.io_fortune_v2_v2.0.0.txt +++ b/src/cmd/go/testdata/mod/rsc.io_fortune_v2_v2.0.0.txt @@ -13,3 +13,9 @@ import "rsc.io/quote" func main() { println(quote.Hello()) } +-- fortune_test.go -- +package main + +import "testing" + +func TestFortuneV2(t *testing.T) {} diff --git a/src/cmd/go/testdata/script/README b/src/cmd/go/testdata/script/README index 0c34333823..3dceb735aa 100644 --- a/src/cmd/go/testdata/script/README +++ b/src/cmd/go/testdata/script/README @@ -111,9 +111,11 @@ The commands are: src can include "stdout" or "stderr" to use the standard output or standard error from the most recent exec or go command. -- env [key=value...] +- env [-r] [key=value...] With no arguments, print the environment (useful for debugging). Otherwise add the listed key=value pairs to the environment. + The -r flag causes the values to be escaped using regexp.QuoteMeta + before being recorded. - [!] exec program [args...] [&] Run the given executable program with the arguments. @@ -135,9 +137,10 @@ The commands are: Run the (test copy of the) go command with the given arguments. It must (or must not) succeed. -- [!] grep [-count=N] pattern file +- [!] grep [-count=N] [-q] pattern file The file's content must (or must not) match the regular expression pattern. For positive matches, -count=N specifies an exact number of matches to require. + The -q flag disables printing the file content on a mismatch. - mkdir path... Create the listed directories, if they do not already exists. diff --git a/src/cmd/go/testdata/script/binary_only.txt b/src/cmd/go/testdata/script/binary_only.txt deleted file mode 100644 index 1842d8cea3..0000000000 --- a/src/cmd/go/testdata/script/binary_only.txt +++ /dev/null @@ -1,12 +0,0 @@ -env GO111MODULE=off - -# check that error for missing binary-only says where it should be -! go build b -stderr pkg[\\/].*a\.a - --- a/a.go -- -//go:binary-only-package - -package a --- b/b.go -- -package b; import "a" diff --git a/src/cmd/go/testdata/script/bug.txt b/src/cmd/go/testdata/script/bug.txt new file mode 100644 index 0000000000..b9bbaaad33 --- /dev/null +++ b/src/cmd/go/testdata/script/bug.txt @@ -0,0 +1,46 @@ +# Verify that go bug creates the appropriate URL issue body + +[!linux] skip + +go install +env BROWSER=$GOPATH/bin/browser +go bug +exists $TMPDIR/browser +grep '^go version' $TMPDIR/browser +grep '^GOROOT/bin/go version: go version' $TMPDIR/browser +grep '^GOROOT/bin/go tool compile -V: compile version' $TMPDIR/browser +grep '^uname -sr: Linux' $TMPDIR/browser + +-- go.mod -- +module browser + +-- main.go -- +package main + +import ( + "fmt" + "net/url" + "os" + "path/filepath" +) + +func main() { + u, err := url.Parse(os.Args[1]) + if err != nil { + panic(err) + } + body, err := url.PathUnescape(u.Query().Get("body")) + if err != nil { + panic(err) + } + out := filepath.Join(os.TempDir(), "browser") + f, err := os.Create(out) + if err != nil { + panic(err) + } + fmt.Fprintln(f, body) + if err := f.Close(); err != nil { + panic(err) + } +} + diff --git a/src/cmd/go/testdata/script/build_GOTMPDIR.txt b/src/cmd/go/testdata/script/build_GOTMPDIR.txt index da54ced524..c93ca932ca 100644 --- a/src/cmd/go/testdata/script/build_GOTMPDIR.txt +++ b/src/cmd/go/testdata/script/build_GOTMPDIR.txt @@ -1,4 +1,5 @@ env GO111MODULE=off +[short] skip # Set GOCACHE to a clean directory to ensure that 'go build' has work to report. env GOCACHE=$WORK/gocache diff --git a/src/cmd/go/testdata/script/build_acl_windows.txt b/src/cmd/go/testdata/script/build_acl_windows.txt new file mode 100644 index 0000000000..13a3ba226a --- /dev/null +++ b/src/cmd/go/testdata/script/build_acl_windows.txt @@ -0,0 +1,44 @@ +[!windows] stop +[!exec:icacls] skip +[!exec:powershell] skip + +# Create $WORK\guest and give the Guests group full access. +# Files created within that directory will have different security attributes by default. +mkdir $WORK\guest +exec icacls $WORK\guest /grant '*S-1-5-32-546:(oi)(ci)f' + +env TMP=$WORK\guest +env TEMP=$WORK\guest + +# Build a binary using the guest directory as an intermediate +cd TestACL +go build -o main.exe main.go +# Build the same binary, but write it to the guest directory. +go build -o $TMP\main.exe main.go + +# Read ACLs for the files. +exec powershell -Command 'Get-Acl main.exe | Select -expand AccessToString' +cp stdout $WORK\exe-acl.txt +exec powershell -Command 'Get-Acl main.go | Select -expand AccessToString' +cp stdout $WORK\src-acl.txt +cd $TMP +exec powershell -Command 'Get-Acl main.exe | Select -expand AccessToString' +cp stdout $WORK\guest-acl.txt + +cd $WORK + +# The executable written to the source directory should have the same ACL as the source file. +cmp $WORK\exe-acl.txt $WORK\src-acl.txt + +# The file written to the guest-allowed directory should give Guests control. +grep 'BUILTIN\\Guests\s+Allow' $WORK\guest-acl.txt + +# The file written to the ordinary directory should not. +! grep 'BUILTIN\\Guests\s+Allow' $WORK\exe-acl.txt + + +-- TestACL/go.mod -- +module TestACL +-- TestACL/main.go -- +package main +func main() {} diff --git a/src/cmd/go/testdata/script/build_cache_compile.txt b/src/cmd/go/testdata/script/build_cache_compile.txt index 04a6f9af1d..64b391f9aa 100644 --- a/src/cmd/go/testdata/script/build_cache_compile.txt +++ b/src/cmd/go/testdata/script/build_cache_compile.txt @@ -1,4 +1,5 @@ env GO111MODULE=off +[short] skip # Set up fresh GOCACHE. env GOCACHE=$WORK/gocache diff --git a/src/cmd/go/testdata/script/build_cache_gomips.txt b/src/cmd/go/testdata/script/build_cache_gomips.txt index 3218354929..0cbf16a923 100644 --- a/src/cmd/go/testdata/script/build_cache_gomips.txt +++ b/src/cmd/go/testdata/script/build_cache_gomips.txt @@ -1,4 +1,5 @@ env GO111MODULE=off +[short] skip # rebuilds std for mips # Set up fresh GOCACHE. env GOCACHE=$WORK/gocache diff --git a/src/cmd/go/testdata/script/build_cache_link.txt b/src/cmd/go/testdata/script/build_cache_link.txt index 658bb88496..e80d776473 100644 --- a/src/cmd/go/testdata/script/build_cache_link.txt +++ b/src/cmd/go/testdata/script/build_cache_link.txt @@ -1,4 +1,5 @@ env GO111MODULE=off +[short] skip # Set up fresh GOCACHE. env GOCACHE=$WORK/gocache diff --git a/src/cmd/go/testdata/script/build_cache_output.txt b/src/cmd/go/testdata/script/build_cache_output.txt index 41c84ace7a..89e3ff0f1e 100644 --- a/src/cmd/go/testdata/script/build_cache_output.txt +++ b/src/cmd/go/testdata/script/build_cache_output.txt @@ -1,6 +1,7 @@ env GO111MODULE=off [!gc] skip +[short] skip # clears cache, rebuilds too much # Set up fresh GOCACHE. env GOCACHE=$WORK/gocache diff --git a/src/cmd/go/testdata/script/build_multi_main.txt b/src/cmd/go/testdata/script/build_multi_main.txt new file mode 100644 index 0000000000..89fe2bec13 --- /dev/null +++ b/src/cmd/go/testdata/script/build_multi_main.txt @@ -0,0 +1,33 @@ +# Verify build -o can output multiple executables to a directory. + +mkdir $WORK/bin +go build -o $WORK/bin ./cmd/c1 ./cmd/c2 +! stderr 'multiple packages' + +! go build -o $WORK/bin ./pkg1 ./pkg1 +stderr 'no main packages' + +! go build ./cmd/c1 +stderr 'already exists and is a directory' + +-- go.mod -- +module exmod + +-- cmd/c1/main.go -- +package main + +func main() {} + +-- cmd/c2/main.go -- +package main + +func main() {} + +-- pkg1/pkg1.go -- +package pkg1 + +-- pkg2/pkg2.go -- +package pkg2 + +-- c1$exe/keep.txt -- +Create c1 directory. diff --git a/src/cmd/go/testdata/script/build_nocache.txt b/src/cmd/go/testdata/script/build_nocache.txt index 46e95fa89d..1059cad45c 100644 --- a/src/cmd/go/testdata/script/build_nocache.txt +++ b/src/cmd/go/testdata/script/build_nocache.txt @@ -12,6 +12,11 @@ env HOME= ! go build -o triv triv.go stderr 'build cache is required, but could not be located: GOCACHE is not defined and .*' +# If GOCACHE is set but is not an absolute path, and we cannot build. +env GOCACHE=test +! go build -o triv triv.go +stderr 'build cache is required, but could not be located: GOCACHE is not an absolute path' + # An explicit GOCACHE=off also disables builds. env GOCACHE=off ! go build -o triv triv.go diff --git a/src/cmd/go/testdata/script/build_runtime_gcflags.txt b/src/cmd/go/testdata/script/build_runtime_gcflags.txt index 5354a73935..da1b65f06c 100644 --- a/src/cmd/go/testdata/script/build_runtime_gcflags.txt +++ b/src/cmd/go/testdata/script/build_runtime_gcflags.txt @@ -1,4 +1,5 @@ env GO111MODULE=off +[short] skip # rebuilds all of std # Set up fresh GOCACHE. env GOCACHE=$WORK/gocache diff --git a/src/cmd/go/testdata/script/build_trimpath.txt b/src/cmd/go/testdata/script/build_trimpath.txt new file mode 100644 index 0000000000..f785b0cb9e --- /dev/null +++ b/src/cmd/go/testdata/script/build_trimpath.txt @@ -0,0 +1,21 @@ +[short] skip + +env -r GOROOT_REGEXP=$GOROOT +env -r WORK_REGEXP=$WORK +env GOROOT GOROOT_REGEXP WORK WORK_REGEXP + +go build -trimpath -o hello.exe hello.go +! grep -q $GOROOT_REGEXP hello.exe +! grep -q $WORK_REGEXP hello.exe + +env GO111MODULE=on +go build -trimpath -o fortune.exe rsc.io/fortune +! grep -q $GOROOT_REGEXP fortune.exe +! grep -q $WORK_REGEXP fortune.exe + +-- hello.go -- +package main +func main() { println("hello") } + +-- go.mod -- +module m diff --git a/src/cmd/go/testdata/script/cgo_syso_issue29253.txt b/src/cmd/go/testdata/script/cgo_syso_issue29253.txt index 9825d1e3e9..4fb5ccab04 100644 --- a/src/cmd/go/testdata/script/cgo_syso_issue29253.txt +++ b/src/cmd/go/testdata/script/cgo_syso_issue29253.txt @@ -1,4 +1,5 @@ env GO111MODULE=off +[short] skip # This test tests that we can link in-package syso files that provides symbols # for cgo. See issue 29253. diff --git a/src/cmd/go/testdata/script/clean_testcache.txt b/src/cmd/go/testdata/script/clean_testcache.txt index 5ac968b7d0..dd7846462e 100644 --- a/src/cmd/go/testdata/script/clean_testcache.txt +++ b/src/cmd/go/testdata/script/clean_testcache.txt @@ -1,4 +1,5 @@ env GO111MODULE=off +[short] skip # go clean -testcache # should work (see golang.org/issue/29757). diff --git a/src/cmd/go/testdata/script/cover_pkgall_multiple_mains.txt b/src/cmd/go/testdata/script/cover_pkgall_multiple_mains.txt new file mode 100644 index 0000000000..ab7cd66949 --- /dev/null +++ b/src/cmd/go/testdata/script/cover_pkgall_multiple_mains.txt @@ -0,0 +1,43 @@ +# This test checks that multiple main packages can be tested +# with -coverpkg=all without duplicate symbol errors. +# Verifies golang.org/issue/30374. + +env GO111MODULE=on + +[short] skip + +go test -coverpkg=all ./... + +-- go.mod -- +module example.com/cov + +-- mainonly/mainonly.go -- +package main + +func main() {} + +-- mainwithtest/mainwithtest.go -- +package main + +func main() {} + +func Foo() {} + +-- mainwithtest/mainwithtest_test.go -- +package main + +import "testing" + +func TestFoo(t *testing.T) { + Foo() +} + +-- xtest/x.go -- +package x + +-- xtest/x_test.go -- +package x_test + +import "testing" + +func TestX(t *testing.T) {} diff --git a/src/cmd/go/testdata/script/env_write.txt b/src/cmd/go/testdata/script/env_write.txt new file mode 100644 index 0000000000..bdc348c953 --- /dev/null +++ b/src/cmd/go/testdata/script/env_write.txt @@ -0,0 +1,87 @@ +env GO111MODULE=off + +# go env should default to the right places +env AppData=$HOME/windowsappdata +env home=$HOME/plan9home +go env GOENV +[aix] stdout $HOME/.config/go/env +[darwin] stdout $HOME/Library/Preferences/go/env +[freebsd] stdout $HOME/.config/go/env +[linux] stdout $HOME/.config/go/env +[netbsd] stdout $HOME/.config/go/env +[openbsd] stdout $HOME/.config/go/env +[plan9] stdout $HOME/plan9home/lib/go/env +[windows] stdout $HOME\\windowsappdata\\go\\env + +# Now override it to something writable. +env GOENV=$WORK/envdir/go/env +go env GOENV +stdout envdir[\\/]go[\\/]env + +# go env shows all variables +go env +stdout GOARCH= +stdout GOOS= +stdout GOROOT= + +# go env -w changes default setting +env root= +[windows] env root=c: +env GOPATH= +go env -w GOPATH=$root/non-exist/gopath +! stderr .+ +grep GOPATH=$root/non-exist/gopath $WORK/envdir/go/env +go env GOPATH +stdout /non-exist/gopath + +# go env -w does not override OS environment, and warns about that +env GOPATH=$root/other +go env -w GOPATH=$root/non-exist/gopath2 +stderr 'warning: go env -w GOPATH=... does not override conflicting OS environment variable' +go env GOPATH +stdout $root/other + +# but go env -w does do the update, and unsetting the env var exposes the change +env GOPATH= +go env GOPATH +stdout $root/non-exist/gopath2 + +# unsetting with go env -u does not warn about OS environment overrides, +# nor does it warn about variables that haven't been set by go env -w. +env GOPATH=$root/other +go env -u GOPATH +! stderr .+ +go env -u GOPATH +! stderr .+ + +# go env -w rejects unknown or bad variables +! go env -w GODEBUG=gctrace=1 +stderr 'unknown go command variable GODEBUG' +! go env -w GOEXE=.bat +stderr 'GOEXE cannot be modified' +! go env -w GOENV=/env +stderr 'GOENV can only be set using the OS environment' + +# go env -w can set multiple variables +env CC= +go env CC +! stdout ^xyc$ +go env -w GOOS=$GOOS CC=xyc +grep CC=xyc $GOENV +# file is maintained in sorted order +grep 'CC=xyc\nGOOS=' $GOENV +go env CC +stdout ^xyc$ + +# go env -u unsets effect of go env -w. +go env -u CC +go env CC +! stdout ^xyc$ + +# go env -w rejects double-set variables +! go env -w GOOS=$GOOS GOOS=$GOOS +stderr 'multiple values for key: GOOS' + +# go env -w rejects missing variables +! go env -w GOOS +stderr 'arguments must be KEY=VALUE: invalid argument: GOOS' diff --git a/src/cmd/go/testdata/script/gcflags_patterns.txt b/src/cmd/go/testdata/script/gcflags_patterns.txt index c790ddda0a..dce8e39715 100644 --- a/src/cmd/go/testdata/script/gcflags_patterns.txt +++ b/src/cmd/go/testdata/script/gcflags_patterns.txt @@ -1,6 +1,7 @@ env GO111MODULE=off [!gc] skip 'using -gcflags and -ldflags' +[short] skip # -gcflags=-e applies to named packages, not dependencies go build -n -v -gcflags=-e z1 z2 diff --git a/src/cmd/go/testdata/script/get_404_meta.txt b/src/cmd/go/testdata/script/get_404_meta.txt new file mode 100644 index 0000000000..32f13c9367 --- /dev/null +++ b/src/cmd/go/testdata/script/get_404_meta.txt @@ -0,0 +1,10 @@ +# golang.org/issue/13037: 'go get' was not parsing tags in 404 served over HTTPS. + +[!net] skip + +env GO111MODULE=off +go get -d -insecure bazil.org/fuse/fs/fstestutil + +env GO111MODULE=on +env GOPROXY=direct +go get -d -insecure bazil.org/fuse/fs/fstestutil diff --git a/src/cmd/go/testdata/script/get_dotfiles.txt b/src/cmd/go/testdata/script/get_dotfiles.txt index 38a3fac612..6757f9dce3 100644 --- a/src/cmd/go/testdata/script/get_dotfiles.txt +++ b/src/cmd/go/testdata/script/get_dotfiles.txt @@ -1,4 +1,5 @@ env GO111MODULE=off +[short] skip [!exec:git] skip diff --git a/src/cmd/go/testdata/script/get_insecure_redirect.txt b/src/cmd/go/testdata/script/get_insecure_redirect.txt new file mode 100644 index 0000000000..6d20418fb2 --- /dev/null +++ b/src/cmd/go/testdata/script/get_insecure_redirect.txt @@ -0,0 +1,11 @@ +# golang.org/issue/29591: 'go get' was following plain-HTTP redirects even without -insecure. + +[!net] skip + +env GO111MODULE=on +env GOPROXY= + +! go get -d vcs-test.golang.org/insecure/go/insecure +stderr 'redirected .* to insecure URL' + +go get -d -insecure vcs-test.golang.org/insecure/go/insecure diff --git a/src/cmd/go/testdata/script/get_tilde.txt b/src/cmd/go/testdata/script/get_tilde.txt index 6d18174acc..e520957359 100644 --- a/src/cmd/go/testdata/script/get_tilde.txt +++ b/src/cmd/go/testdata/script/get_tilde.txt @@ -1,4 +1,5 @@ env GO111MODULE=off +[short] skip # Paths containing windows short names should be rejected before attempting to fetch. ! go get example.com/longna~1.dir/thing diff --git a/src/cmd/go/testdata/script/get_unicode.txt b/src/cmd/go/testdata/script/get_unicode.txt index ab1b914f50..d3b82bdf25 100644 --- a/src/cmd/go/testdata/script/get_unicode.txt +++ b/src/cmd/go/testdata/script/get_unicode.txt @@ -1,6 +1,7 @@ env GO111MODULE=off [!exec:git] skip +[short] skip # Construct a repository that imports a non-ASCII path. cd $WORK/_origin/example.com/unicode diff --git a/src/cmd/go/testdata/script/gopath_std_vendor.txt b/src/cmd/go/testdata/script/gopath_std_vendor.txt new file mode 100644 index 0000000000..a0a41a50de --- /dev/null +++ b/src/cmd/go/testdata/script/gopath_std_vendor.txt @@ -0,0 +1,44 @@ +env GO111MODULE=off + +[!gc] skip + +go list -f '{{.Dir}}' vendor/golang.org/x/net/http2/hpack +stdout $GOPATH[/\\]src[/\\]vendor + +# A package importing 'net/http' should resolve its dependencies +# to the package 'vendor/golang.org/x/net/http2/hpack' within GOROOT. +cd importnethttp +go list -deps -f '{{.ImportPath}} {{.Dir}}' +stdout ^vendor/golang.org/x/net/http2/hpack +stdout $GOROOT[/\\]src[/\\]vendor[/\\]golang.org[/\\]x[/\\]net[/\\]http2[/\\]hpack +! stdout $GOPATH[/\\]src[/\\]vendor + +# In the presence of $GOPATH/src/vendor/golang.org/x/net/http2/hpack, +# a package in GOPATH importing 'golang.org/x/net/http2/hpack' should +# resolve its dependencies in GOPATH/src. +cd ../issue16333 +go build . + +go list -deps -f '{{.ImportPath}} {{.Dir}}' . +stdout $GOPATH[/\\]src[/\\]vendor[/\\]golang.org[/\\]x[/\\]net[/\\]http2[/\\]hpack +! stdout $GOROOT[/\\]src[/\\]vendor + +go list -test -deps -f '{{.ImportPath}} {{.Dir}}' . +stdout $GOPATH[/\\]src[/\\]vendor[/\\]golang.org[/\\]x[/\\]net[/\\]http2[/\\]hpack +! stdout $GOROOT[/\\]src[/\\]vendor + +-- issue16333/issue16333.go -- +package vendoring17 + +import _ "golang.org/x/net/http2/hpack" +-- issue16333/issue16333_test.go -- +package vendoring17 + +import _ "testing" +import _ "golang.org/x/net/http2/hpack" +-- importnethttp/http.go -- +package importnethttp + +import _ "net/http" +-- $GOPATH/src/vendor/golang.org/x/net/http2/hpack/hpack.go -- +package hpack diff --git a/src/cmd/go/testdata/script/help.txt b/src/cmd/go/testdata/script/help.txt index e6cbc82928..9752ede2e3 100644 --- a/src/cmd/go/testdata/script/help.txt +++ b/src/cmd/go/testdata/script/help.txt @@ -42,7 +42,7 @@ stderr 'Run ''go tool vet -help'' for the vet tool''s flags' # lines. ! go test -h stderr 'usage: go test' -stderr 'Run ''go help test'' for details' +stderr 'Run ''go help test'' and ''go help testflag'' for details.' # go help get shows usage for get go help get diff --git a/src/cmd/go/testdata/script/install_cleans_build.txt b/src/cmd/go/testdata/script/install_cleans_build.txt index 7f1b917439..a169a60bda 100644 --- a/src/cmd/go/testdata/script/install_cleans_build.txt +++ b/src/cmd/go/testdata/script/install_cleans_build.txt @@ -1,4 +1,5 @@ env GO111MODULE=off +[short] skip # 'go install' with no arguments should clean up after go build cd mycmd diff --git a/src/cmd/go/testdata/script/install_cross_gobin.txt b/src/cmd/go/testdata/script/install_cross_gobin.txt index d9ab35c2e1..57c18be602 100644 --- a/src/cmd/go/testdata/script/install_cross_gobin.txt +++ b/src/cmd/go/testdata/script/install_cross_gobin.txt @@ -1,4 +1,5 @@ env GO111MODULE=off +[!short] skip # rebuilds std for alternate architecture cd mycmd go build mycmd diff --git a/src/cmd/go/testdata/script/list_bad_import.txt b/src/cmd/go/testdata/script/list_bad_import.txt index 958c576c53..b8f9d586f3 100644 --- a/src/cmd/go/testdata/script/list_bad_import.txt +++ b/src/cmd/go/testdata/script/list_bad_import.txt @@ -1,4 +1,5 @@ env GO111MODULE=off +[short] skip # This test matches mod_list_bad_import, but in GOPATH mode. # Please keep them in sync. diff --git a/src/cmd/go/testdata/script/list_find.txt b/src/cmd/go/testdata/script/list_find.txt index aaac6585dd..d450fc9554 100644 --- a/src/cmd/go/testdata/script/list_find.txt +++ b/src/cmd/go/testdata/script/list_find.txt @@ -12,6 +12,7 @@ stdout '^false \[\]' # should be identical. "go build" derives action IDs (which are used as cache # keys) from dependencies' action IDs. "go list -find" won't know what the # dependencies are, so it's can't construct the same action IDs. +[short] skip go list -find -compiled net go list -find -compiled -x net ! stderr 'cgo' diff --git a/src/cmd/go/testdata/script/list_std.txt b/src/cmd/go/testdata/script/list_std.txt index 88a659f743..6ab1bd1674 100644 --- a/src/cmd/go/testdata/script/list_std.txt +++ b/src/cmd/go/testdata/script/list_std.txt @@ -1,14 +1,25 @@ env GO111MODULE=off [!gc] skip +[short] skip -# listing GOROOT should only find standard packages +# Listing GOROOT should only find standard packages. cd $GOROOT/src go list -f '{{if not .Standard}}{{.ImportPath}}{{end}}' ./... ! stdout . -# TODO: ignore _/blah/go/src in output -# our vendored packages should be reported as standard -go list std cmd -stdout internal/x/net/http2/hpack +# Standard packages should include cmd, but not cmd/vendor. +go list ./... +stdout cmd/compile +! stdout vendor/golang.org +! stdout cmd/vendor + +# In GOPATH mode, packages vendored into GOROOT should be reported as standard. +go list -f '{{if .Standard}}{{.ImportPath}}{{end}}' std cmd +stdout golang.org/x/net/http2/hpack stdout cmd/vendor/golang\.org/x/arch/x86/x86asm + +# However, vendored packages should not match wildcard patterns beginning with cmd. +go list cmd/... +stdout cmd/compile +! stdout cmd/vendor diff --git a/src/cmd/go/testdata/script/list_test_e.txt b/src/cmd/go/testdata/script/list_test_e.txt index 4e36b88e85..263892ba63 100644 --- a/src/cmd/go/testdata/script/list_test_e.txt +++ b/src/cmd/go/testdata/script/list_test_e.txt @@ -1,7 +1,7 @@ env GO111MODULE=off # issue 25980: crash in go list -e -test -go list -e -test -f '{{.Error}}' p +go list -e -test -deps -f '{{.Error}}' p stdout '^p[/\\]d_test.go:2:8: cannot find package "d" in any of:' -- p/d.go -- diff --git a/src/cmd/go/testdata/script/list_test_err.txt b/src/cmd/go/testdata/script/list_test_err.txt new file mode 100644 index 0000000000..a174b5e9ad --- /dev/null +++ b/src/cmd/go/testdata/script/list_test_err.txt @@ -0,0 +1,126 @@ +env GO111MODULE=off + +# issue 28491: errors in test source files should not prevent +# "go list -test" from returning useful information. + +# go list prints information for package, internal test, +# external test, but not testmain package when there is a +# syntax error in test sources. +! go list -test -deps syntaxerr +stdout pkgdep +stdout testdep_a +stdout testdep_b +stdout ^syntaxerr$ +stdout '^syntaxerr \[syntaxerr.test\]' +stdout '^syntaxerr_test \[syntaxerr.test\]' +! stdout '^syntaxerr\.test' +stderr 'expected declaration' + +# go list -e prints information for all test packages. +# The syntax error is shown in the package error field. +go list -e -test -deps -f '{{.ImportPath}} {{.Error | printf "%q"}}' syntaxerr +stdout 'pkgdep ' +stdout 'testdep_a ' +stdout 'testdep_b ' +stdout 'syntaxerr\.test "[^"]*expected declaration' +! stderr 'expected declaration' + +[short] stop + +# go list prints partial information with test naming error +! go list -test -deps nameerr +stdout pkgdep +stdout testdep_a +stdout testdep_b +stderr 'wrong signature for TestBad' + +go list -e -test -deps -f '{{.ImportPath}} {{.Error | printf "%q"}}' nameerr +stdout 'pkgdep ' +stdout 'testdep_a ' +stdout 'testdep_b ' +stdout 'nameerr\.test "[^"]*wrong signature for TestBad' +! stderr 'wrong signature for TestBad' + +# go list prints partial information with error if test has cyclic import +! go list -test -deps cycleerr +stdout cycleerr +stderr 'import cycle not allowed in test' + +go list -e -test -deps -f '{{.ImportPath}} {{.Error | printf "%q"}}' cycleerr +stdout 'cycleerr ' +stdout 'testdep_a ' +stdout 'testdep_cycle ' +stdout 'cycleerr \[cycleerr.test\] "[^"]*import cycle not allowed in test' +! stderr 'import cycle not allowed in test' + +-- syntaxerr/syntaxerr.go -- +package syntaxerr + +import _ "pkgdep" + +-- syntaxerr/syntaxerr_ie_test.go -- +package syntaxerr + +!!!syntax error + +-- syntaxerr/syntaxerr_xe_test.go -- +package syntaxerr_test + +!!!syntax error + +-- syntaxerr/syntaxerr_i_test.go -- +package syntaxerr + +import _ "testdep_a" + +-- syntaxerr/syntaxerr_x_test.go -- +package syntaxerr + +import _ "testdep_b" + +-- nameerr/nameerr.go -- +package nameerr + +import _ "pkgdep" + +-- nameerr/nameerr_i_test.go -- +package nameerr + +import ( + _ "testdep_a" + "testing" +) + +func TestBad(t *testing.B) {} + +-- nameerr/nameerr_x_test.go -- +package nameerr_test + +import ( + _ "testdep_b" + "testing" +) + +func TestBad(t *testing.B) {} + +-- cycleerr/cycleerr_test.go -- +package cycleerr + +import ( + _ "testdep_a" + _ "testdep_cycle" +) + +-- pkgdep/pkgdep.go -- +package pkgdep + +-- testdep_a/testdep_a.go -- +package testdep_a + +-- testdep_b/testdep_b.go -- +package testdep_b + +-- testdep_cycle/testdep_cycle.go -- +package testdep_cycle + +import _ "cycleerr" diff --git a/src/cmd/go/testdata/script/list_test_non_go_files.txt b/src/cmd/go/testdata/script/list_test_non_go_files.txt new file mode 100644 index 0000000000..16b98f4a37 --- /dev/null +++ b/src/cmd/go/testdata/script/list_test_non_go_files.txt @@ -0,0 +1,13 @@ +env GO111MODULE=off + +# issue 29899: handling files with non-Go extension +go list -e -test -json -- c.c x.go +stdout '"Err": "named files must be .go files: c.c"' + +! go list -test -json -- c.c x.go +stderr 'can''t load package: named files must be .go files: c.c' + +-- x.go -- +package main +-- c.c -- +package c diff --git a/src/cmd/go/testdata/script/mod_alt_goroot.txt b/src/cmd/go/testdata/script/mod_alt_goroot.txt new file mode 100644 index 0000000000..32f94c5303 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_alt_goroot.txt @@ -0,0 +1,20 @@ +env GO111MODULE=on + +# If the working directory is a different GOROOT, then the 'std' module should be +# treated as an ordinary module (with an ordinary module prefix). +# It should not override packages in GOROOT, but should not fail the command. +# See golang.org/issue/30756. +go list -e -deps -f '{{.ImportPath}} {{.Dir}}' ./bytes +stdout ^std/bytes.*$PWD[/\\]bytes +stdout '^bytes/modified' + +-- go.mod -- +module std + +go 1.12 +-- bytes/bytes.go -- +package bytes + +import _"bytes/modified" +-- bytes/modified/modified.go -- +package modified diff --git a/src/cmd/go/testdata/script/mod_auth.txt b/src/cmd/go/testdata/script/mod_auth.txt new file mode 100644 index 0000000000..fe1d65794a --- /dev/null +++ b/src/cmd/go/testdata/script/mod_auth.txt @@ -0,0 +1,32 @@ +[!net] skip + +env GO111MODULE=on +env GOPROXY=direct +env GOSUMDB=off + +# Without credentials, downloading a module from a path that requires HTTPS +# basic auth should fail. +env NETRC=$WORK/empty +! go list all + +# With credentials from a netrc file, it should succeed. +env NETRC=$WORK/netrc +go mod tidy +go list all +stdout vcs-test.golang.org/auth/or401 +stdout vcs-test.golang.org/auth/or404 + +-- go.mod -- +module private.example.com +-- main.go -- +package useprivate + +import ( + _ "vcs-test.golang.org/auth/or401" + _ "vcs-test.golang.org/auth/or404" +) +-- $WORK/empty -- +-- $WORK/netrc -- +machine vcs-test.golang.org + login aladdin + password opensesame diff --git a/src/cmd/go/testdata/script/mod_build_tags.txt b/src/cmd/go/testdata/script/mod_build_tags.txt index 1347eaacbf..ae1d605e1f 100644 --- a/src/cmd/go/testdata/script/mod_build_tags.txt +++ b/src/cmd/go/testdata/script/mod_build_tags.txt @@ -16,6 +16,9 @@ stdout '\[y\.go\]' go list -f {{.GoFiles}} -tags 'tag1 tag2' stdout '\[x\.go y\.go\]' +go list -f {{.GoFiles}} -tags tag1,tag2 # commas allowed as of Go 1.13 +stdout '\[x\.go y\.go\]' + -- x/go.mod -- module x diff --git a/src/cmd/go/testdata/script/mod_build_versioned.txt b/src/cmd/go/testdata/script/mod_build_versioned.txt new file mode 100644 index 0000000000..1b387361a7 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_build_versioned.txt @@ -0,0 +1,17 @@ +env GO111MODULE=on +[short] skip + +go get -m rsc.io/fortune/v2 + +# The default executable name shouldn't be v2$exe +go build rsc.io/fortune/v2 +! exists v2$exe +exists fortune$exe + +# The default test binary name shouldn't be v2.test$exe +go test -c rsc.io/fortune/v2 +! exists v2.test$exe +exists fortune.test$exe + +-- go.mod -- +module scratch diff --git a/src/cmd/go/testdata/script/mod_clean_cache.txt b/src/cmd/go/testdata/script/mod_clean_cache.txt index a9519f9d90..01fbc381e0 100644 --- a/src/cmd/go/testdata/script/mod_clean_cache.txt +++ b/src/cmd/go/testdata/script/mod_clean_cache.txt @@ -30,10 +30,9 @@ go clean -r -modcache ! exists ../replaced/test.out # BUG: should still exist # 'go clean -modcache' should not download anything before cleaning. -# BUG(golang.org/issue/28680): Today, it does. go mod edit -require rsc.io/quote@v1.99999999.0-not-a-real-version -! go clean -modcache # BUG: should succeed -stderr 'finding rsc.io' # BUG: should not resolve module +go clean -modcache +! stderr 'finding rsc.io' go mod edit -droprequire rsc.io/quote -- go.mod -- diff --git a/src/cmd/go/testdata/script/mod_dir.txt b/src/cmd/go/testdata/script/mod_dir.txt new file mode 100644 index 0000000000..05548f6366 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_dir.txt @@ -0,0 +1,20 @@ +# The directory named go.mod should be ignored + +env GO111MODULE=on + +cd $WORK/sub + +go list . +stdout 'x/sub' + +mkdir go.mod +exists go.mod + +go list . +stdout 'x/sub' + +-- $WORK/go.mod -- +module x + +-- $WORK/sub/x.go -- +package x \ No newline at end of file diff --git a/src/cmd/go/testdata/script/mod_doc.txt b/src/cmd/go/testdata/script/mod_doc.txt index 223283d5f2..40acbc5ac0 100644 --- a/src/cmd/go/testdata/script/mod_doc.txt +++ b/src/cmd/go/testdata/script/mod_doc.txt @@ -1,6 +1,7 @@ # go doc should find module documentation env GO111MODULE=on +[short] skip go doc y stdout 'Package y is.*alphabet' diff --git a/src/cmd/go/testdata/script/mod_download.txt b/src/cmd/go/testdata/script/mod_download.txt index 22f07c33c7..c6729c71a2 100644 --- a/src/cmd/go/testdata/script/mod_download.txt +++ b/src/cmd/go/testdata/script/mod_download.txt @@ -1,4 +1,5 @@ env GO111MODULE=on +env GOPROXY=$GOPROXY/quiet # download with version should print nothing go mod download rsc.io/quote@v1.5.0 @@ -9,6 +10,7 @@ exists $GOPATH/pkg/mod/cache/download/rsc.io/quote/@v/v1.5.0.mod exists $GOPATH/pkg/mod/cache/download/rsc.io/quote/@v/v1.5.0.zip # download of an invalid path should report the error +[short] skip ! go mod download this.domain.is.invalid/somemodule@v1.0.0 stderr 'this.domain.is.invalid' ! go mod download -json this.domain.is.invalid/somemodule@v1.0.0 @@ -81,5 +83,12 @@ exists $GOPATH/pkg/mod/cache/download/rsc.io/quote/@v/v1.5.3-pre1.zip go mod download -json rsc.io/quote@v1.5.1 exists $GOPATH/pkg/mod/cache/download/rsc.io/quote/@v/v1.5.1.zip +# allow go mod download without go.mod +env GO111MODULE=auto +rm go.mod +rm $GOPATH/pkg/mod/cache/download/rsc.io/quote/@v/v1.2.1.zip +go mod download rsc.io/quote@v1.2.1 +exists $GOPATH/pkg/mod/cache/download/rsc.io/quote/@v/v1.2.1.zip + -- go.mod -- module m diff --git a/src/cmd/go/testdata/script/mod_download_hash.txt b/src/cmd/go/testdata/script/mod_download_hash.txt index 1662043207..07ea78a4fd 100644 --- a/src/cmd/go/testdata/script/mod_download_hash.txt +++ b/src/cmd/go/testdata/script/mod_download_hash.txt @@ -3,7 +3,8 @@ env GO111MODULE=on # Testing mod download with non semantic versions; turn off proxy. [!net] skip [!exec:git] skip -env GOPROXY= +env GOPROXY=direct +env GOSUMDB=off go mod download rsc.io/quote@a91498bed0a73d4bb9c1fb2597925f7883bc40a7 exists $GOPATH/pkg/mod/cache/download/rsc.io/quote/@v/v0.0.0-20180709162918-a91498bed0a7.info diff --git a/src/cmd/go/testdata/script/mod_edit.txt b/src/cmd/go/testdata/script/mod_edit.txt index aa714e8b3c..42007b13d0 100644 --- a/src/cmd/go/testdata/script/mod_edit.txt +++ b/src/cmd/go/testdata/script/mod_edit.txt @@ -25,6 +25,10 @@ cmpenv go.mod $WORK/go.mod.edit2 go mod edit -json cmpenv stdout $WORK/go.mod.json +# go mod edit -json (empty mod file) +go mod edit -json $WORK/go.mod.empty +cmp stdout $WORK/go.mod.empty.json + # go mod edit -replace go mod edit -replace=x.1@v1.3.0=y.1/v2@v2.3.5 -replace=x.1@v1.4.0=y.1/v2@v2.3.5 cmpenv go.mod $WORK/go.mod.edit3 @@ -168,4 +172,14 @@ require x.3 v1.99.0 -- $WORK/m/go.mod.edit -- module x.x/y/z -go $goversion \ No newline at end of file +go $goversion +-- $WORK/go.mod.empty -- +-- $WORK/go.mod.empty.json -- +{ + "Module": { + "Path": "" + }, + "Require": null, + "Exclude": null, + "Replace": null +} diff --git a/src/cmd/go/testdata/script/mod_enabled.txt b/src/cmd/go/testdata/script/mod_enabled.txt index ab5ee3d6df..10fa103fad 100644 --- a/src/cmd/go/testdata/script/mod_enabled.txt +++ b/src/cmd/go/testdata/script/mod_enabled.txt @@ -1,15 +1,15 @@ -# GO111MODULE=auto should only trigger outside GOPATH/src +# GO111MODULE=auto should trigger any time a go.mod exists in a parent directory. env GO111MODULE=auto cd $GOPATH/src/x/y/z go env GOMOD -! stdout . # no non-empty lines -! go list -m -f {{.GoMod}} -stderr 'not using modules' +stdout $GOPATH[/\\]src[/\\]x[/\\]y[/\\]z[/\\]go.mod +go list -m -f {{.GoMod}} +stdout $GOPATH[/\\]src[/\\]x[/\\]y[/\\]z[/\\]go.mod cd $GOPATH/src/x/y/z/w go env GOMOD -! stdout . +stdout $GOPATH[/\\]src[/\\]x[/\\]y[/\\]z[/\\]go.mod cd $GOPATH/src/x/y go env GOMOD @@ -25,6 +25,17 @@ cd $GOPATH/foo/bar/baz go env GOMOD stdout foo[/\\]go.mod +# GO111MODULE unset should be equivalent to auto. +env GO111MODULE= + +cd $GOPATH/src/x/y/z +go env GOMOD +stdout $GOPATH[/\\]src[/\\]x[/\\]y[/\\]z[/\\]go.mod + +cd $GOPATH/src/x/y +go env GOMOD +! stdout . + # GO111MODULE=on should trigger everywhere env GO111MODULE=on diff --git a/src/cmd/go/testdata/script/mod_file_proxy.txt b/src/cmd/go/testdata/script/mod_file_proxy.txt index 8de6d7dbb8..cf097f8c80 100644 --- a/src/cmd/go/testdata/script/mod_file_proxy.txt +++ b/src/cmd/go/testdata/script/mod_file_proxy.txt @@ -1,3 +1,5 @@ +[short] skip + # Allow (cached) downloads for -mod=readonly. env GO111MODULE=on env GOPATH=$WORK/gopath1 @@ -19,7 +21,15 @@ grep v1.5.1 $GOPATH/pkg/mod/cache/download/rsc.io/quote/@v/list -- $WORK/x/go.mod -- module x +go 1.13 require rsc.io/quote v1.5.1 -- $WORK/x/x.go -- package x import _ "rsc.io/quote" +-- $WORK/x/go.sum -- +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c h1:pvCbr/wm8HzDD3fVywevekufpn6tCGPY3spdHeZJEsw= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +rsc.io/quote v1.5.1 h1:ZE3OgnVGrhXtFkGw90HwW992ZRqcdli/33DLqEYsoxA= +rsc.io/quote v1.5.1/go.mod h1:LzX7hefJvL54yjefDEDHNONDjII0t9xZLPXsUe+TKr0= +rsc.io/sampler v1.3.0 h1:HLGR/BgEtI3r0uymSP/nl2uPLsUnNJX8toRyhfpBTII= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/src/cmd/go/testdata/script/mod_find.txt b/src/cmd/go/testdata/script/mod_find.txt index 703a88e99c..7fbe9fb7fe 100644 --- a/src/cmd/go/testdata/script/mod_find.txt +++ b/src/cmd/go/testdata/script/mod_find.txt @@ -1,4 +1,4 @@ -env GO111MODULE=auto +env GO111MODULE=on # Derive module path from import comment. cd $WORK/x @@ -12,14 +12,8 @@ addcrlf x.go go mod init stderr 'module x' -# go mod should die in GOPATH if modules are not enabled for GOPATH -cd $GOPATH/src/example.com/x/y -! go mod init -stderr 'go: modules disabled inside GOPATH/src by GO111MODULE=auto; see ''go help modules''' - -env GO111MODULE=on - # Derive module path from location inside GOPATH. +# 'go mod init' should succeed if modules are not explicitly disabled. cd $GOPATH/src/example.com/x/y go mod init stderr 'module example.com/x/y$' diff --git a/src/cmd/go/testdata/script/mod_get_commit.txt b/src/cmd/go/testdata/script/mod_get_commit.txt index 589a791fd4..f88eb692fd 100644 --- a/src/cmd/go/testdata/script/mod_get_commit.txt +++ b/src/cmd/go/testdata/script/mod_get_commit.txt @@ -1,10 +1,12 @@ env GO111MODULE=on +env GOPROXY=$GOPROXY/quiet +[short] skip # @commit should resolve # golang.org/x/text/language@commit should not resolve with -m, # because that's not a module path. -! go get -m golang.org/x/text/language@14c0d48 +! go get -d -m golang.org/x/text/language@14c0d48 # ... but it should work without -m. # because of -d, the compiler should not run @@ -12,12 +14,13 @@ go get -d -x golang.org/x/text/language@14c0d48 ! stderr 'compile|cp|gccgo .*language\.a$' # go get should skip build with no Go files in root -go get golang.org/x/text@14c0d48 +go get -d golang.org/x/text@14c0d48 # ... and go get should skip build with -m go get -m golang.org/x/text@14c0d48 # dropping -d, we should see a build. +[short] skip go get -x golang.org/x/text/language@14c0d48 stderr 'compile|cp|gccgo .*language\.a$' diff --git a/src/cmd/go/testdata/script/mod_get_downgrade.txt b/src/cmd/go/testdata/script/mod_get_downgrade.txt index ac814dae08..00cd93e598 100644 --- a/src/cmd/go/testdata/script/mod_get_downgrade.txt +++ b/src/cmd/go/testdata/script/mod_get_downgrade.txt @@ -1,4 +1,5 @@ env GO111MODULE=on +[short] skip # downgrade sampler should downgrade quote go get rsc.io/sampler@v1.0.0 diff --git a/src/cmd/go/testdata/script/mod_get_hash.txt b/src/cmd/go/testdata/script/mod_get_hash.txt new file mode 100644 index 0000000000..d35ad362c0 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_get_hash.txt @@ -0,0 +1,19 @@ +env GO111MODULE=on +env GOPROXY=direct +env GOSUMDB=off +[!net] skip + +# fetch commit hash reachable from refs/heads/* and refs/tags/* is OK +go list -m golang.org/x/time@8be79e1e0910c292df4e79c241bb7e8f7e725959 # on master branch + +# fetch other commit hash, even with a non-standard ref, is not OK +! go list -m golang.org/x/time@334d83c35137ac2b376c1dc3e4c7733791855a3a # refs/changes/24/41624/3 +stderr 'unknown revision' +! go list -m golang.org/x/time@v0.0.0-20170424233410-334d83c35137 +stderr 'unknown revision' +! go list -m golang.org/x/time@334d83c35137 +stderr 'unknown revision' + +-- go.mod -- +module m + diff --git a/src/cmd/go/testdata/script/mod_get_indirect.txt b/src/cmd/go/testdata/script/mod_get_indirect.txt index 3ae5833834..f25e170a49 100644 --- a/src/cmd/go/testdata/script/mod_get_indirect.txt +++ b/src/cmd/go/testdata/script/mod_get_indirect.txt @@ -1,6 +1,15 @@ env GO111MODULE=on +[short] skip -# get -u should find quote v1.5.2 +# get -u should not upgrade anything, since the package +# in the current directory doesn't import anything. +go get -u +go list -m all +stdout 'quote v1.5.1$' +grep 'rsc.io/quote v1.5.1$' go.mod + +# get -u should find quote v1.5.2 once there is a use. +cp $WORK/tmp/usequote.go x.go go get -u go list -m all stdout 'quote v1.5.2$' @@ -11,11 +20,10 @@ go list -m -f '{{.Path}} {{.Version}}{{if .Indirect}} // indirect{{end}}' all stdout '^golang.org/x/text [v0-9a-f\.-]+ // indirect' grep 'golang.org/x/text [v0-9a-f\.-]+ // indirect' go.mod -# importing an empty module root as a package makes it direct. -# TODO(bcmills): This doesn't seem correct. Fix is in the next change. +# importing an empty module root as a package does not remove indirect tag. cp $WORK/tmp/usetext.go x.go go list -e -grep 'golang.org/x/text [v0-9a-f\.-]+ // indirect' go.mod +grep 'golang.org/x/text v0.3.0 // indirect$' go.mod # indirect tag should be removed upon seeing direct import. cp $WORK/tmp/uselang.go x.go diff --git a/src/cmd/go/testdata/script/mod_get_local.txt b/src/cmd/go/testdata/script/mod_get_local.txt index 4edda993f1..44a470ecfc 100644 --- a/src/cmd/go/testdata/script/mod_get_local.txt +++ b/src/cmd/go/testdata/script/mod_get_local.txt @@ -1,4 +1,5 @@ # Test 'go get' with a local module with a name that is not valid for network lookup. +[short] skip env GO111MODULE=on go mod edit -fmt @@ -17,33 +18,33 @@ cp go.mod.orig go.mod go get -u -m local cmp go.mod go.mod.implicitmod -# 'go get -u -d' in the empty root of the main module should update the -# dependencies of all packages in the module. +# For the main module, @patch should be a no-op. cp go.mod.orig go.mod -go get -u -d +go get -u -m local@patch cmp go.mod go.mod.implicitmod -# 'go get -u -d .' within a package in the main module updates all dependencies -# of the main module. -# TODO: Determine whether that behavior is a bug. -# (https://golang.org/issue/26902) +# 'go get -u -d' in the empty root of the main module should fail. +# 'go get -u -d .' should also fail. +cp go.mod.orig go.mod +! go get -u -d +! go get -u -d . + +# 'go get -u -d .' within a package in the main module updates the dependencies +# of that package. cp go.mod.orig go.mod cd uselang go get -u -d . cd .. -grep 'rsc.io/quote.*v1.5.2' go.mod +grep 'rsc.io/quote.*v1.3.0' go.mod grep 'golang.org/x/text.*v0.3.0' go.mod cp go.mod go.mod.dotpkg -# 'go get -u -d' with an explicit package in the main module updates -# all dependencies of the main module. -# TODO: Determine whether that behavior is a bug. -# (https://golang.org/issue/26902) +# 'go get -u -d' with an explicit package in the main module updates the +# dependencies of that package. cp go.mod.orig go.mod go get -u -d local/uselang cmp go.mod go.mod.dotpkg - -- go.mod -- module local diff --git a/src/cmd/go/testdata/script/mod_get_main.txt b/src/cmd/go/testdata/script/mod_get_main.txt new file mode 100644 index 0000000000..14dcffeaad --- /dev/null +++ b/src/cmd/go/testdata/script/mod_get_main.txt @@ -0,0 +1,32 @@ +env GO111MODULE=on +[short] skip + +# @patch and @latest within the main module refer to the current version. +# The main module won't be upgraded, but missing dependencies will be added. +cp go.mod.orig go.mod +go get -m rsc.io@latest +grep 'rsc.io/quote v1.5.2' go.mod +cp go.mod.orig go.mod +go get -m rsc.io@patch +grep 'rsc.io/quote v1.5.2' go.mod +cp go.mod.orig go.mod + +# The main module cannot be updated to a specific version. +! go get -m rsc.io@v0.1.0 +stderr '^go get rsc.io@v0.1.0: can.t get a specific version of the main module$' +! go get -d rsc.io/x@v0.1.0 +stderr '^go get rsc.io/x@v0.1.0: can.t query specific version for package rsc.io/x in the main module \(rsc.io\)$' + +# Upgrading a package pattern not contained in the main module should not +# attempt to upgrade the main module. +go get rsc.io/quote/...@v1.5.1 +grep 'rsc.io/quote v1.5.1' go.mod + +-- go.mod.orig -- +module rsc.io + +go 1.13 +-- x/x.go -- +package x + +import _ "rsc.io/quote" diff --git a/src/cmd/go/testdata/script/mod_get_moved.txt b/src/cmd/go/testdata/script/mod_get_moved.txt index be91449155..edc41cf948 100644 --- a/src/cmd/go/testdata/script/mod_get_moved.txt +++ b/src/cmd/go/testdata/script/mod_get_moved.txt @@ -1,4 +1,6 @@ env GO111MODULE=on +env GOPROXY=$GOPROXY/quiet +[short] skip # A 'go get' that worked at a previous version should continue to work at that version, # even if the package was subsequently moved into a submodule. diff --git a/src/cmd/go/testdata/script/mod_get_newcycle.txt b/src/cmd/go/testdata/script/mod_get_newcycle.txt new file mode 100644 index 0000000000..9616863383 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_get_newcycle.txt @@ -0,0 +1,14 @@ +env GO111MODULE=on + +# Download modules to avoid stderr chatter +go mod download example.com/newcycle/a@v1.0.0 +go mod download example.com/newcycle/a@v1.0.1 +go mod download example.com/newcycle/b@v1.0.0 + +go mod init m +! go get example.com/newcycle/a@v1.0.0 +cmp stderr stderr-expected + +-- stderr-expected -- +go get: inconsistent versions: + example.com/newcycle/a@v1.0.0 requires example.com/newcycle/a@v1.0.1 (not example.com/newcycle/a@v1.0.0) diff --git a/src/cmd/go/testdata/script/mod_get_patterns.txt b/src/cmd/go/testdata/script/mod_get_patterns.txt new file mode 100644 index 0000000000..9521c4f84a --- /dev/null +++ b/src/cmd/go/testdata/script/mod_get_patterns.txt @@ -0,0 +1,42 @@ +env GO111MODULE=on +[short] skip + +# If a pattern doesn't match any modules in the build list, +# and -m is used, an error should be reported. +cp go.mod.orig go.mod +! go get -m rsc.io/quote/... +stderr 'pattern matches no modules in build list' + +# If a pattern doesn't match any modules in the build list, +# we assume the pattern matches a single module where the +# part of the pattern before "..." is the module path. +cp go.mod.orig go.mod +go get -d rsc.io/quote/... +grep 'require rsc.io/quote' go.mod + +cp go.mod.orig go.mod +! go get -d rsc.io/quote/x... +stderr 'go get rsc.io/quote/x...: module rsc.io/quote@latest \(v1.5.2\) found, but does not contain packages matching rsc.io/quote/x...' +! grep 'require rsc.io/quote' go.mod + +! go get -d rsc.io/quote/x/... +stderr 'go get rsc.io/quote/x/...: module rsc.io/quote@latest \(v1.5.2\) found, but does not contain packages matching rsc.io/quote/x/...' +! grep 'require rsc.io/quote' go.mod + +# If a pattern matches no packages within a module, the module should not +# be upgraded, even if the module path matches the pattern. +cp go.mod.orig go.mod +go mod edit -require example.com/nest@v1.0.0 +go get example.com/nest/sub/y... +grep 'example.com/nest/sub v1.0.0' go.mod +grep 'example.com/nest v1.0.0' go.mod + +-- go.mod.orig -- +module m + +go 1.13 + +-- use/use.go -- +package use + +import _ "rsc.io/quote" diff --git a/src/cmd/go/testdata/script/mod_get_private_vcs.txt b/src/cmd/go/testdata/script/mod_get_private_vcs.txt index 86d78e8381..1c73182206 100644 --- a/src/cmd/go/testdata/script/mod_get_private_vcs.txt +++ b/src/cmd/go/testdata/script/mod_get_private_vcs.txt @@ -6,5 +6,6 @@ env GO111MODULE=on env GOPROXY= ! go get github.com/golang/nonexist +stderr 'Confirm the import path was entered correctly.' stderr 'If this is a private repository, see https://golang.org/doc/faq#git_https for additional information.' ! stdout . diff --git a/src/cmd/go/testdata/script/mod_get_pseudo.txt b/src/cmd/go/testdata/script/mod_get_pseudo.txt index 3945fdfa89..5b1ec6e96b 100644 --- a/src/cmd/go/testdata/script/mod_get_pseudo.txt +++ b/src/cmd/go/testdata/script/mod_get_pseudo.txt @@ -3,7 +3,8 @@ env GO111MODULE=on # Testing git->module converter's generation of +incompatible tags; turn off proxy. [!net] skip [!exec:git] skip -env GOPROXY= +env GOPROXY=direct +env GOSUMDB=off # We can resolve the @master branch without unshallowing the local repository # (even with older gits), so try that before we do anything else. diff --git a/src/cmd/go/testdata/script/mod_get_pseudo_other_branch.txt b/src/cmd/go/testdata/script/mod_get_pseudo_other_branch.txt new file mode 100644 index 0000000000..fcff9b1ea3 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_get_pseudo_other_branch.txt @@ -0,0 +1,67 @@ +env GO111MODULE=on +env GOPROXY=direct +env GOSUMDB=off + +# Testing that a pseudo-version is based on the semantically-latest +# tag that appears in any commit that is a (transitive) parent of the commit +# supplied to 'go get', regardless of branches + +[!net] skip +[!exec:git] skip + +# For this test repository: +# tag v0.2.1 is most recent tag on master itself +# tag v0.2.2 is on branch2, which was then merged to master +# master is a merge commit with both tags as parents +# +# The pseudo-version hence sorts immediately after v0.2.2 rather +# than v0.2.1, even though the v0.2.2 tag is not on master. + +go get -m vcs-test.golang.org/git/tagtests.git@master +go list -m all +stdout '^vcs-test.golang.org/git/tagtests.git v0.2.3-0\.' + +-- go.mod -- +module x + +go 1.12 +-- x.go -- +package x + +import _ "vcs-test.golang.org/git/tagtests.git" +-- gen_testtags.sh -- +#!/bin/bash + +# This is not part of the test. +# Run this to generate and update the repository on vcs-test.golang.org. + +set -euo pipefail +cd "$(dirname "$0")" +rm -rf tagtests +mkdir tagtests +cd tagtests + +git init +echo module vcs-test.golang.org/git/tagtests.git >go.mod +echo package tagtests >tagtests.go +git add go.mod tagtests.go +git commit -m 'create module tagtests' + +git branch b + +echo v0.2.1 >v0.2.1 +git add v0.2.1 +git commit -m v0.2.1 +git tag v0.2.1 + +git checkout b +echo v0.2.2 >v0.2.2 +git add v0.2.2 +git commit -m v0.2.2 +git tag v0.2.2 + +git checkout master +git merge b -m merge + +zip -r ../tagtests.zip . +gsutil cp ../tagtests.zip gs://vcs-test/git/tagtests.zip diff --git a/src/cmd/go/testdata/script/mod_get_pseudo_prefix.txt b/src/cmd/go/testdata/script/mod_get_pseudo_prefix.txt new file mode 100644 index 0000000000..4d1a8b8632 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_get_pseudo_prefix.txt @@ -0,0 +1,64 @@ +env GO111MODULE=on +env GOPROXY=direct +env GOSUMDB=off + +# Testing that a pseudo-version is based on the semantically-latest +# prefixed tag in any commit that is a parent of the commit supplied +# to 'go get', when using a repo with go.mod in a sub directory. + +[!net] skip +[!exec:git] skip + +# For this test repository go.mod resides in sub/ (only): +# master is not tagged +# tag v0.2.0 is most recent tag before master +# tag sub/v0.0.10 is most recent tag before v0.2.0 +# +# The pseudo-version is based on sub/v0.0.10, since v0.2.0 doesn't +# contain the prefix. +go get -m vcs-test.golang.org/git/prefixtagtests.git/sub +go list -m all +stdout '^vcs-test.golang.org/git/prefixtagtests.git/sub v0.0.10$' + +go get -u -m vcs-test.golang.org/git/prefixtagtests.git/sub@master +go list -m all +stdout '^vcs-test.golang.org/git/prefixtagtests.git/sub v0.0.11-0\.' + +-- go.mod -- +module x + +go 1.12 +-- x.go -- +package x + +import _ "vcs-test.golang.org/prefixtagtests.git/sub" +-- gen_prefixtagtests.sh -- +#!/bin/bash + +# This is not part of the test. +# Run this to generate and update the repository on vcs-test.golang.org. + +set -euo pipefail +cd "$(dirname "$0")" +rm -rf prefixtagtests +mkdir prefixtagtests +cd prefixtagtests + +git init +mkdir sub +echo module vcs-test.golang.org/git/prefixtagtests.git/sub >sub/go.mod +echo package sub >sub/sub.go +git add sub +git commit -m 'create module sub' +for i in v0.1.0 sub/v0.0.9 sub/v0.0.10 v0.2.0; do + echo $i >status + git add status + git commit -m $i + git tag $i +done +echo 'after last tag' >status +git add status +git commit -m 'after last tag' + +zip -r ../prefixtagtests.zip . +gsutil cp ../prefixtagtests.zip gs://vcs-test/git/prefixtagtests.zip diff --git a/src/cmd/go/testdata/script/mod_get_upgrade.txt b/src/cmd/go/testdata/script/mod_get_upgrade.txt index 5eb5ff9657..f6ba53381b 100644 --- a/src/cmd/go/testdata/script/mod_get_upgrade.txt +++ b/src/cmd/go/testdata/script/mod_get_upgrade.txt @@ -5,31 +5,31 @@ go list -m all stdout 'rsc.io/quote v1.5.1' grep 'rsc.io/quote v1.5.1$' go.mod -# get -u should update all dependencies -go get -u +# get -m -u should update all dependencies +go get -d -m -u grep 'rsc.io/quote v1.5.2$' go.mod grep 'golang.org/x/text [v0-9a-f\.-]+ // indirect' go.mod # get -u rsc.io/sampler should update only sampler's dependencies cp go.mod-v1.5.1 go.mod -go get -u rsc.io/sampler +go get -d -u rsc.io/sampler grep 'rsc.io/quote v1.5.1$' go.mod grep 'golang.org/x/text [v0-9a-f\.-]+ // indirect' go.mod # move to a pseudo-version after any tags -go get -m rsc.io/quote@dd9747d +go get -d -m rsc.io/quote@dd9747d grep 'rsc.io/quote v0.0.0-20180628003336-dd9747d19b04' go.mod # get -u should not jump off newer pseudo-version to earlier tag -go get -m -u +go get -d -m -u grep 'rsc.io/quote v0.0.0-20180628003336-dd9747d19b04' go.mod # move to earlier pseudo-version -go get -m rsc.io/quote@e7a685a342 +go get -d -m rsc.io/quote@e7a685a342 grep 'rsc.io/quote v0.0.0-20180214005133-e7a685a342c0' go.mod # get -u should jump off earlier pseudo-version to newer tag -go get -m -u +go get -d -m -u grep 'rsc.io/quote v1.5.2' go.mod -- go.mod -- @@ -39,3 +39,8 @@ require rsc.io/quote v1.1.0 -- go.mod-v1.5.1 -- module x require rsc.io/quote v1.5.1 + +-- use.go -- +package use + +import _ "rsc.io/quote" diff --git a/src/cmd/go/testdata/script/mod_get_upgrade_pseudo.txt b/src/cmd/go/testdata/script/mod_get_upgrade_pseudo.txt new file mode 100644 index 0000000000..80b240130f --- /dev/null +++ b/src/cmd/go/testdata/script/mod_get_upgrade_pseudo.txt @@ -0,0 +1,25 @@ +env GO111MODULE=on + +# For this test module there are three versions: +# * v0.1.1-0.20190429073117-b5426c86b553 +# * v0.1.0 +# * v0.0.0-20190429073000-30950c05d534 +# Only v0.1.0 is tagged. +# +# The latest pseudo-version is semantically higher than the latest tag. +# 'get -u' should not downgrade to the (lower) tagged version. + +go get -m example.com/pseudoupgrade@b5426c8 +go get -u +go list -m -u all +stdout '^example.com/pseudoupgrade v0.1.1-0.20190429073117-b5426c86b553$' + +-- go.mod -- +module x + +go 1.12 + +-- main.go -- +package x + +import _ "example.com/pseudoupgrade" diff --git a/src/cmd/go/testdata/script/mod_get_warning.txt b/src/cmd/go/testdata/script/mod_get_warning.txt deleted file mode 100644 index 36b5434c3b..0000000000 --- a/src/cmd/go/testdata/script/mod_get_warning.txt +++ /dev/null @@ -1,10 +0,0 @@ -# go get in GO111MODULE=auto should warn when not using modules and go.mod exists - -env GO111MODULE=auto -mkdir z -cd z -! go get # fails because no code in directory, not the warning -stderr 'go get: warning: modules disabled by GO111MODULE=auto in GOPATH/src;\n\tignoring ..[/\\]go.mod;\n\tsee ''go help modules''' - --- go.mod -- -module x diff --git a/src/cmd/go/testdata/script/mod_gobuild_import.txt b/src/cmd/go/testdata/script/mod_gobuild_import.txt index d2d1645b83..eb2284e561 100644 --- a/src/cmd/go/testdata/script/mod_gobuild_import.txt +++ b/src/cmd/go/testdata/script/mod_gobuild_import.txt @@ -1,3 +1,5 @@ +[short] skip + # go/build's Import should find modules by invoking the go command go build -o $WORK/testimport.exe ./testimport @@ -8,7 +10,7 @@ env GO111MODULE=off # GO111MODULE=auto in GOPATH/src env GO111MODULE=auto -! exec $WORK/testimport.exe x/y/z/w . +exec $WORK/testimport.exe x/y/z/w . # GO111MODULE=auto outside GOPATH/src cd $GOPATH/other @@ -24,12 +26,18 @@ exec $WORK/testimport.exe other/x/y/z/w . stdout w2.go # GO111MODULE=on outside GOPATH/src +env GO111MODULE= +exec $WORK/testimport.exe other/x/y/z/w . +stdout w2.go env GO111MODULE=on exec $WORK/testimport.exe other/x/y/z/w . stdout w2.go # GO111MODULE=on in GOPATH/src cd $GOPATH/src +env GO111MODULE= +exec $WORK/testimport.exe x/y/z/w . +stdout w1.go env GO111MODULE=on exec $WORK/testimport.exe x/y/z/w . stdout w1.go diff --git a/src/cmd/go/testdata/script/mod_gonoproxy.txt b/src/cmd/go/testdata/script/mod_gonoproxy.txt new file mode 100644 index 0000000000..f038112bf1 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_gonoproxy.txt @@ -0,0 +1,31 @@ +env GO111MODULE=on +env sumdb=$GOSUMDB +env proxy=$GOPROXY +env GOPROXY GONOPROXY GOSUMDB GONOSUMDB +env dbname=localhost.localdev/sumdb + +# disagree with sumdb fails +cp go.mod.orig go.mod +env GOSUMDB=$sumdb' '$proxy/sumdb-wrong +! go get rsc.io/quote +stderr 'SECURITY ERROR' + +# but GONOSUMDB bypasses sumdb, for rsc.io/quote, rsc.io/sampler, golang.org/x/text +env GONOSUMDB='*/quote,*/*mple*,golang.org/x' +go get rsc.io/quote + +# and GONOPROXY bypasses proxy +[!net] skip +env GONOPROXY='*/fortune' +! go get rsc.io/fortune # does not exist in real world, only on test proxy +stderr 'git ls-remote' + +env GOSUMDB= +env GONOPROXY='*/x' +go get golang.org/x/text +go list -m all +! stdout 'text.*v0.0.0-2017' # should not have the version from the proxy + + +-- go.mod.orig -- +module m diff --git a/src/cmd/go/testdata/script/mod_gopkg_unstable.txt b/src/cmd/go/testdata/script/mod_gopkg_unstable.txt index d945cf35b4..b39bdd18bb 100644 --- a/src/cmd/go/testdata/script/mod_gopkg_unstable.txt +++ b/src/cmd/go/testdata/script/mod_gopkg_unstable.txt @@ -9,7 +9,8 @@ go list [!net] skip -env GOPROXY= +env GOPROXY=direct +env GOSUMDB=off go get gopkg.in/macaroon-bakery.v2-unstable/bakery go list -m all stdout 'gopkg.in/macaroon-bakery.v2-unstable v2.0.0-[0-9]+-[0-9a-f]+$' diff --git a/src/cmd/go/testdata/script/mod_init_dep.txt b/src/cmd/go/testdata/script/mod_init_dep.txt index 29c840b383..755076eae8 100644 --- a/src/cmd/go/testdata/script/mod_init_dep.txt +++ b/src/cmd/go/testdata/script/mod_init_dep.txt @@ -21,6 +21,11 @@ go list go list -m all stdout 'rsc.io/sampler v1.0.0' +# test dep replacement +cd y +go mod init +cmpenv go.mod go.mod.replace + -- go.mod1 -- module x @@ -32,3 +37,21 @@ package x name = "rsc.io/sampler" version = "v1.0.0" +-- y/Gopkg.lock -- +[[projects]] + name = "z" + revision = "v1.0.0" + source = "rsc.io/quote" + +-- y/y.go -- +package y // import "y" +import _ "z" + +-- y/go.mod.replace -- +module y + +go $goversion + +replace z v1.0.0 => rsc.io/quote v1.0.0 + +require rsc.io/quote v1.0.0 \ No newline at end of file diff --git a/src/cmd/go/testdata/script/mod_init_empty.txt b/src/cmd/go/testdata/script/mod_init_empty.txt new file mode 100644 index 0000000000..1c3888caed --- /dev/null +++ b/src/cmd/go/testdata/script/mod_init_empty.txt @@ -0,0 +1,18 @@ +env GO111MODULE=on + +env GOPATH=$devnull + +go list -m +stdout '^example.com$' + +go list +stdout '^example.com$' + +-- go.mod -- +module example.com + +go 1.13 +-- main.go -- +package main + +func main() {} diff --git a/src/cmd/go/testdata/script/mod_internal.txt b/src/cmd/go/testdata/script/mod_internal.txt index 5a47c3fa44..5a361a4f42 100644 --- a/src/cmd/go/testdata/script/mod_internal.txt +++ b/src/cmd/go/testdata/script/mod_internal.txt @@ -1,4 +1,5 @@ env GO111MODULE=on +[short] skip # golang.org/x/internal should be importable from other golang.org/x modules. rm go.mod diff --git a/src/cmd/go/testdata/script/mod_list.txt b/src/cmd/go/testdata/script/mod_list.txt index c9797ea836..a15f5bca63 100644 --- a/src/cmd/go/testdata/script/mod_list.txt +++ b/src/cmd/go/testdata/script/mod_list.txt @@ -1,4 +1,5 @@ env GO111MODULE=on +[short] skip # list {{.Dir}} shows main module and go.mod but not not-yet-downloaded dependency dir. go list -m -f '{{.Path}} {{.Main}} {{.GoMod}} {{.Dir}}' all diff --git a/src/cmd/go/testdata/script/mod_list_dir.txt b/src/cmd/go/testdata/script/mod_list_dir.txt index 903651c9d5..c4db045631 100644 --- a/src/cmd/go/testdata/script/mod_list_dir.txt +++ b/src/cmd/go/testdata/script/mod_list_dir.txt @@ -1,3 +1,5 @@ +[short] skip + # go list with path to directory should work env GO111MODULE=off diff --git a/src/cmd/go/testdata/script/mod_list_replace_dir.txt b/src/cmd/go/testdata/script/mod_list_replace_dir.txt new file mode 100644 index 0000000000..37de8825e0 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_list_replace_dir.txt @@ -0,0 +1,19 @@ +# Test that "go list" succeeds when given a directory in a replacement +# module within the module cache. +# Verifies golang.org/issue/29548 + +env GO111MODULE=on +go mod download + +! go list $GOPATH/pkg/mod/rsc.io/quote@v1.5.2 +stderr 'outside available modules' + +go list $GOPATH/pkg/mod/rsc.io/quote@v1.5.1 +stdout 'rsc.io/quote' + +-- go.mod -- +module example.com/quoter + +require rsc.io/quote v1.5.2 + +replace rsc.io/quote => rsc.io/quote v1.5.1 diff --git a/src/cmd/go/testdata/script/mod_list_std.txt b/src/cmd/go/testdata/script/mod_list_std.txt new file mode 100644 index 0000000000..8552aebf42 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_list_std.txt @@ -0,0 +1,58 @@ +env GO111MODULE=on +env GOPROXY=off + +[!gc] skip +[short] skip + +# Outside of GOROOT, our vendored packages should be reported as part of the standard library. +go list -f '{{if .Standard}}{{.ImportPath}}{{end}}' std cmd +stdout ^vendor/golang.org/x/net/http2/hpack +stdout ^cmd/vendor/golang\.org/x/arch/x86/x86asm + +# cmd/... should match the same packages it used to match in GOPATH mode. +go list cmd/... +stdout ^cmd/compile +! stdout ^cmd/vendor/golang\.org/x/arch/x86/x86asm + + +# Within the std module, listing ./... should omit the 'std' prefix: +# the package paths should be the same via ./... or the 'std' meta-pattern. +# TODO(golang.org/issue/30241): Make that work. +# Today, they are listed in 'std' but not './...'. +cd $GOROOT/src +go list ./... +! stdout ^vendor/golang.org/x # TODO: should be included, or should be omitted from 'std'. + +cp stdout $WORK/listdot.txt +go list std +stdout ^vendor/golang.org/x # TODO: remove vendor/ prefix +# TODO: cmp stdout $WORK/listdot.txt + +go list all +stdout ^vendor/golang.org/x # TODO: remove vendor/ prefix. +! stdout ^std/ + + +# Within the std module, the vendored dependencies of std should appear +# to come from the actual modules. +# TODO(golang.org/issue/30241): Make that work. +# Today, they still have the vendor/ prefix. +go list std +stdout ^vendor/golang.org/x/net/http2/hpack # TODO +! stdout ^golang.org/x/net/http2/hpack # TODO + +go list -deps -f '{{if not .Standard}}{{.ImportPath}}{{end}}' std +# ! stdout ^vendor/golang.org/x/net/http2/hpack # TODO +! stdout ^golang.org/x/net/http2/hpack # TODO + + +# Within std, the vendored dependencies of cmd should still appear to be part of cmd. +go list -f '{{if .Standard}}{{.ImportPath}}{{end}}' cmd +stdout ^cmd/vendor/golang\.org/x/arch/x86/x86asm + +go list -f '{{if not .Standard}}{{.ImportPath}}{{end}}' cmd +! stdout . + +go list cmd/... +stdout ^cmd/compile +! stdout ^cmd/vendor/golang\.org/x/arch/x86/x86asm diff --git a/src/cmd/go/testdata/script/mod_list_upgrade_pseudo.txt b/src/cmd/go/testdata/script/mod_list_upgrade_pseudo.txt new file mode 100644 index 0000000000..143e029e52 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_list_upgrade_pseudo.txt @@ -0,0 +1,19 @@ +env GO111MODULE=on + +# For this test module there are three versions: +# * v0.1.1-0.20190429073117-b5426c86b553 +# * v0.1.0 +# * v0.0.0-20190429073000-30950c05d534 +# Only v0.1.0 is tagged. +# +# The latest pseudo-version is semantically higher than the latest tag. +# 'list -u' should not suggest a lower version as an upgrade. + +go get -m example.com/pseudoupgrade@b5426c8 +go list -m -u all +stdout '^example.com/pseudoupgrade v0.1.1-0.20190429073117-b5426c86b553$' + +-- go.mod -- +module x + +go 1.12 diff --git a/src/cmd/go/testdata/script/mod_load_badchain.txt b/src/cmd/go/testdata/script/mod_load_badchain.txt new file mode 100644 index 0000000000..7bde83963d --- /dev/null +++ b/src/cmd/go/testdata/script/mod_load_badchain.txt @@ -0,0 +1,75 @@ +[short] skip +env GO111MODULE=on + +# Download everything to avoid "finding" messages in stderr later. +cp go.mod.orig go.mod +go mod download +go mod download example.com@v1.0.0 +go mod download example.com/badchain/a@v1.1.0 +go mod download example.com/badchain/b@v1.1.0 +go mod download example.com/badchain/c@v1.1.0 + +# Try to update example.com/badchain/a (and its dependencies). +! go get -u example.com/badchain/a +cmp stderr update-a-expected +cmp go.mod go.mod.orig + +# Try to update the main module. This updates everything, including +# modules that aren't direct requirements, so the error stack is shorter. +! go get -m -u +cmp stderr update-main-expected +cmp go.mod go.mod.orig + +# Update manually. Listing modules should produce an error. +go mod edit -require=example.com/badchain/a@v1.1.0 +! go list -m +cmp stderr list-expected + +# Try listing a package that imports a package +# in a module without a requirement. +go mod edit -droprequire example.com/badchain/a +! go list m/use +cmp stderr list-missing-expected + +! go list -test m/testuse +cmp stderr list-missing-test-expected + +-- go.mod.orig -- +module m + +go 1.13 + +require example.com/badchain/a v1.0.0 +-- use/use.go -- +package use + +import _ "example.com/badchain/c" +-- testuse/testuse.go -- +package testuse +-- testuse/testuse_test.go -- +package testuse + +import ( + "testing" + _ "example.com/badchain/c" +) + +func Test(t *testing.T) {} +-- update-main-expected -- +go get: example.com/badchain/c@v1.0.0 updating to + example.com/badchain/c@v1.1.0: parsing go.mod: unexpected module path "example.com/badchain/wrong" +-- update-a-expected -- +go get: example.com/badchain/a@v1.1.0 requires + example.com/badchain/b@v1.1.0 requires + example.com/badchain/c@v1.1.0: parsing go.mod: unexpected module path "example.com/badchain/wrong" +-- list-expected -- +go: example.com/badchain/a@v1.1.0 requires + example.com/badchain/b@v1.1.0 requires + example.com/badchain/c@v1.1.0: parsing go.mod: unexpected module path "example.com/badchain/wrong" +-- list-missing-expected -- +go: m/use imports + example.com/badchain/c: example.com/badchain/c@v1.1.0: parsing go.mod: unexpected module path "example.com/badchain/wrong" +-- list-missing-test-expected -- +go: m/testuse tested by + m/testuse.test imports + example.com/badchain/c: example.com/badchain/c@v1.1.0: parsing go.mod: unexpected module path "example.com/badchain/wrong" diff --git a/src/cmd/go/testdata/script/mod_load_badzip.txt b/src/cmd/go/testdata/script/mod_load_badzip.txt index 95513de4a6..c5ba18e9f0 100644 --- a/src/cmd/go/testdata/script/mod_load_badzip.txt +++ b/src/cmd/go/testdata/script/mod_load_badzip.txt @@ -3,7 +3,11 @@ env GO111MODULE=on ! go get -d rsc.io/badzip stderr 'zip for rsc.io/badzip@v1.0.0 has unexpected file rsc.io/badzip@v1.0.0.txt' +! grep rsc.io/badzip go.mod +# TODO(golang.org/issue/31730): 'go build' should print the error below if the +# requirement is not present. +go mod edit -require rsc.io/badzip@v1.0.0 ! go build rsc.io/badzip stderr 'zip for rsc.io/badzip@v1.0.0 has unexpected file rsc.io/badzip@v1.0.0.txt' diff --git a/src/cmd/go/testdata/script/mod_missingpkg_prerelease.txt b/src/cmd/go/testdata/script/mod_missingpkg_prerelease.txt new file mode 100644 index 0000000000..6203606c22 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_missingpkg_prerelease.txt @@ -0,0 +1,12 @@ +env GO111MODULE=on + +! go list use.go +stderr 'example.com/missingpkg/deprecated: package provided by example.com/missingpkg at latest version v1.0.0 but not at required version v1.0.1-beta' + +-- use.go -- +package use + +import ( + _ "example.com/missingpkg/deprecated" + _ "example.com/usemissingpre" +) diff --git a/src/cmd/go/testdata/script/mod_off_init.txt b/src/cmd/go/testdata/script/mod_off_init.txt new file mode 100644 index 0000000000..1339c8aef9 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_off_init.txt @@ -0,0 +1,5 @@ +# 'go mod init' should refuse to initialize a module if it will be +# ignored anyway due to GO111MODULE=off. +env GO111MODULE=off +! go mod init +stderr 'go mod init: modules disabled by GO111MODULE=off; see ''go help modules''' diff --git a/src/cmd/go/testdata/script/mod_outside.txt b/src/cmd/go/testdata/script/mod_outside.txt index db994a1656..c3d53e035b 100644 --- a/src/cmd/go/testdata/script/mod_outside.txt +++ b/src/cmd/go/testdata/script/mod_outside.txt @@ -1,4 +1,5 @@ env GO111MODULE=on +[short] skip # This script tests commands in module mode outside of any module. # diff --git a/src/cmd/go/testdata/script/mod_patterns.txt b/src/cmd/go/testdata/script/mod_patterns.txt index 5f9ab62704..1b4b4380b4 100644 --- a/src/cmd/go/testdata/script/mod_patterns.txt +++ b/src/cmd/go/testdata/script/mod_patterns.txt @@ -1,4 +1,5 @@ env GO111MODULE=on +[short] skip cd m @@ -7,7 +8,6 @@ cd m # library or active modules. # # 'go list ...' should list packages in all active modules and the standard library. -# But not cmd/* - see golang.org/issue/26924. # # 'go list example.com/m/...' should list packages in all modules that begin with 'example.com/m/'. # @@ -26,14 +26,10 @@ stdout 'example.com/m/nested/useencoding: \[\.\.\. example.com/m/...\]' # but NO stdout '^unicode: \[all \.\.\.\]' stdout '^unsafe: \[all \.\.\.\]' stdout 'index/suffixarray: \[\.\.\.\]' -! stdout cmd/pprof # golang.org/issue/26924 +stdout 'cmd/pprof: \[\.\.\.\]' stderr -count=1 '^go: warning: "./xyz..." matched no packages$' -env CGO_ENABLED=0 -go list -f '{{.ImportPath}}: {{.Match}}' all ... example.com/m/... ./... ./xyz... -! stdout example.com/m/useC - # 'go list ./...' should not try to resolve the main module. cd ../empty go list -deps ./... @@ -41,6 +37,12 @@ go list -deps ./... ! stderr 'finding' stderr -count=1 '^go: warning: "./..." matched no packages' +# disabling cgo should drop useC +[short] skip +env CGO_ENABLED=0 +go list -f '{{.ImportPath}}: {{.Match}}' all ... example.com/m/... ./... ./xyz... +! stdout example.com/m/useC + -- m/go.mod -- module example.com/m diff --git a/src/cmd/go/testdata/script/mod_patterns_vendor.txt b/src/cmd/go/testdata/script/mod_patterns_vendor.txt new file mode 100644 index 0000000000..b4dc401117 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_patterns_vendor.txt @@ -0,0 +1,28 @@ +env GO111MODULE=on + +go list -mod=vendor example.com/... +stdout ^example.com/x$ +stdout ^example.com/x/y$ +! stdout ^example.com/x/vendor + +-- go.mod -- +module example.com/m + +-- vendor/modules.txt -- +# example.com/x v0.0.0 +example.com/x +# example.com/x/y v0.1.0 +example.com/x/y + +-- vendor/example.com/x/go.mod -- +module example.com/x +-- vendor/example.com/x/x.go -- +package x + +-- vendor/example.com/x/y/go.mod -- +module example.com/x/y +-- vendor/example.com/x/y/y.go -- +package y + +-- vendor/example.com/x/vendor/z/z.go -- +package z diff --git a/src/cmd/go/testdata/script/mod_proxy_list.txt b/src/cmd/go/testdata/script/mod_proxy_list.txt new file mode 100644 index 0000000000..a48622814a --- /dev/null +++ b/src/cmd/go/testdata/script/mod_proxy_list.txt @@ -0,0 +1,29 @@ +env GO111MODULE=on +env proxy=$GOPROXY + +# Proxy that can't serve should fail. +env GOPROXY=$proxy/404 +! go get rsc.io/quote@v1.0.0 +stderr '404 Not Found' + +# get should walk down the proxy list past 404 and 410 responses. +env GOPROXY=$proxy/404,$proxy/410,$proxy +go get rsc.io/quote@v1.1.0 + +# get should not walk past other 4xx errors. +env GOPROXY=$proxy/403,$proxy +! go get rsc.io/quote@v1.2.0 +stderr 'reading.*/403/rsc.io/.*: 403 Forbidden' + +# get should not walk past non-4xx errors. +env GOPROXY=$proxy/500,$proxy +! go get rsc.io/quote@v1.3.0 +stderr 'reading.*/500/rsc.io/.*: 500 Internal Server Error' + +# get should return the final 404/410 if that's all we have. +env GOPROXY=$proxy/404,$proxy/410 +! go get rsc.io/quote@v1.4.0 +stderr 'reading.*/410/rsc.io/.*: 410 Gone' + +-- go.mod -- +module x diff --git a/src/cmd/go/testdata/script/mod_query.txt b/src/cmd/go/testdata/script/mod_query.txt index 4baaaa89ed..c41f83d264 100644 --- a/src/cmd/go/testdata/script/mod_query.txt +++ b/src/cmd/go/testdata/script/mod_query.txt @@ -3,13 +3,21 @@ env GO111MODULE=on go list -m -versions rsc.io/quote stdout '^rsc.io/quote v1.0.0 v1.1.0 v1.2.0 v1.2.1 v1.3.0 v1.4.0 v1.5.0 v1.5.1 v1.5.2 v1.5.3-pre1$' -# latest rsc.io/quote should be v1.5.2 not v1.5.3-pre1 +# Latest rsc.io/quote should be v1.5.2, not v1.5.3-pre1. go list -m rsc.io/quote@latest stdout 'rsc.io/quote v1.5.2$' +# Same for rsc.io/quote@v1 and rsc.io/quote@v1.5 (with no patch version). +go list -m rsc.io/quote@v1 +stdout 'rsc.io/quote v1.5.2$' +go list -m rsc.io/quote@v1.5 +stdout 'rsc.io/quote v1.5.2$' + +# We should fall back to prereleases if no release tags match... go list -m rsc.io/quote@>v1.5.2 stdout 'rsc.io/quote v1.5.3-pre1$' +# ...but prefer release versions when given the option. go list -m rsc.io/quote@ ./z' stderr '^z' ! stderr '^w' +grep 'a/foo/bar/b\na/foo/bar/c' vendor/modules.txt # must be sorted go list -f {{.Dir}} x stdout 'src[\\/]x' @@ -38,6 +39,7 @@ stdout 'src[\\/]w' stderr 'src[\\/]vendor[\\/]w' ! exists vendor/x/testdata +! exists vendor/a/foo/bar/b/ignored.go ! exists vendor/a/foo/bar/b/main_test.go exists vendor/a/foo/AUTHORS.txt @@ -102,6 +104,14 @@ replace ( -- a/foo/bar/b/main.go -- package b +-- a/foo/bar/b/ignored.go -- +// This file is intended for use with "go run"; it isn't really part of the package. + +// +build ignore + +package main + +func main() {} -- a/foo/bar/b/main_test.go -- package b @@ -117,6 +127,7 @@ func TestDir(t *testing.T) { } -- a/foo/bar/c/main.go -- package c +import _ "a/foo/bar/b" -- a/foo/bar/c/main_test.go -- package c @@ -181,7 +192,6 @@ import _ "a" -- testdata2.go -- package m -import _ "a/foo/bar/b" import _ "a/foo/bar/c" -- v1.go -- package m diff --git a/src/cmd/go/testdata/script/mod_vendor_build.txt b/src/cmd/go/testdata/script/mod_vendor_build.txt index 7b304dbb70..24920a36b6 100644 --- a/src/cmd/go/testdata/script/mod_vendor_build.txt +++ b/src/cmd/go/testdata/script/mod_vendor_build.txt @@ -1,4 +1,5 @@ env GO111MODULE=on +[short] skip # initial conditions: using sampler v1.3.0, not listed in go.mod. go list -deps @@ -19,6 +20,16 @@ cmp go.mod go.mod.good go list -mod=vendor cmp go.mod go.mod.good +# With a clean (and empty) module cache, 'go list -mod=vendor' should not download modules. +go clean -modcache +env GOPROXY=off +! go list ... +go list -mod=vendor ... + +# However, it should still list packages in the main module. +go list -mod=vendor m/... +stdout m + -- go.mod -- module m diff --git a/src/cmd/go/testdata/script/mod_verify.txt b/src/cmd/go/testdata/script/mod_verify.txt index 50c9b4a437..646bc62bb7 100644 --- a/src/cmd/go/testdata/script/mod_verify.txt +++ b/src/cmd/go/testdata/script/mod_verify.txt @@ -1,4 +1,5 @@ env GO111MODULE=on +[short] skip # With good go.sum, verify succeeds by avoiding download. cp go.sum.good go.sum diff --git a/src/cmd/go/testdata/script/mod_why.txt b/src/cmd/go/testdata/script/mod_why.txt index 4d556fc73f..10a4f9fbea 100644 --- a/src/cmd/go/testdata/script/mod_why.txt +++ b/src/cmd/go/testdata/script/mod_why.txt @@ -1,4 +1,5 @@ env GO111MODULE=on +[short] skip go list -test all stdout rsc.io/quote diff --git a/src/cmd/go/testdata/script/run_set_executable_name.txt b/src/cmd/go/testdata/script/run_set_executable_name.txt new file mode 100644 index 0000000000..54ddee9ae1 --- /dev/null +++ b/src/cmd/go/testdata/script/run_set_executable_name.txt @@ -0,0 +1,50 @@ +env GO111MODULE=on +[short] skip + +# Check for correct naming of temporary executable + +#Test for single file specified +cd x/y/z +go run foo.go +stderr 'foo' + +#Test for current directory +go run . +stderr 'z' + +#Test for set path +go run m/x/y/z/ +stderr 'z' + +-- m/x/y/z/foo.go -- +package main +import( + "os" + "path/filepath" +) +func main() { + println(filepath.Base(os.Args[0])) +} + +-- x/y/z/foo.go -- +package main +import( + "os" + "path/filepath" +) +func main() { + println(filepath.Base(os.Args[0])) +} + +-- x/y/z/foo.go -- +package main +import( + "os" + "path/filepath" +) +func main() { + println(filepath.Base(os.Args[0])) +} + +-- go.mod -- +module m \ No newline at end of file diff --git a/src/cmd/go/testdata/script/std_vendor.txt b/src/cmd/go/testdata/script/std_vendor.txt new file mode 100644 index 0000000000..6cb015fc07 --- /dev/null +++ b/src/cmd/go/testdata/script/std_vendor.txt @@ -0,0 +1,43 @@ +env GO111MODULE=off + +[!gc] skip + +# 'go list' should report imports from _test.go in the TestImports field. +go list -f '{{.TestImports}}' +stdout net/http # from .TestImports + +# 'go list' should report standard-vendored packages by path. +go list -f '{{.Dir}}' vendor/golang.org/x/net/http2/hpack +stdout $GOROOT[/\\]src[/\\]vendor + +# 'go list -test' should report vendored transitive dependencies of _test.go +# imports in the Deps field, with a 'vendor' prefix on their import paths. +go list -test -f '{{.Deps}}' +stdout golang.org/x/crypto # dep of .TestImports + +# Packages outside the standard library should not use its copy of vendored packages. +cd broken +! go build +stderr 'cannot find package' + +-- go.mod -- +module m + +-- x.go -- +package x + +-- x_test.go -- +package x +import "testing" +import _ "net/http" +func Test(t *testing.T) {} + +-- broken/go.mod -- +module broken +-- broken/http.go -- +package broken + +import ( + _ "net/http" + _ "golang.org/x/net/http/httpproxy" +) diff --git a/src/cmd/go/testdata/script/sum_readonly.txt b/src/cmd/go/testdata/script/sum_readonly.txt new file mode 100644 index 0000000000..8aa61166ac --- /dev/null +++ b/src/cmd/go/testdata/script/sum_readonly.txt @@ -0,0 +1,29 @@ +# Test that go.sum does not get updated when -mod=readonly flag is set +env GO111MODULE=on + +go get -d rsc.io/quote +go mod tidy + +# go.sum != dirty; -mod=readonly +go list -mod=readonly + +# dirty up go.sum by removing it. +rm go.sum + +# go.sum == dirty; -mod=readonly +! go list -mod=readonly + +stderr 'go: updates to go.sum needed, disabled by -mod=readonly' + +-- go.mod -- +module m + +-- main.go -- + +package main + +import "rsc.io/quote" + +func main() { + println(quote.Hello()) +} \ No newline at end of file diff --git a/src/cmd/go/testdata/script/test_generated_main.txt b/src/cmd/go/testdata/script/test_generated_main.txt new file mode 100644 index 0000000000..75ffa9cde2 --- /dev/null +++ b/src/cmd/go/testdata/script/test_generated_main.txt @@ -0,0 +1,35 @@ +# Tests that the generated test main file has a generated code comment. +# This is needed by analyzers that access source files through 'go list'. +# Verifies golang.org/issue/31971. +# TODO(jayconrod): This test is brittle. We should write _testmain.go as +# a build action instead of with an ad-hoc WriteFile call +# in internal/test/test.go. Then we could just grep 'go get -n'. +go test x_test.go + +-- x_test.go -- +package x + +import ( + "os" + "path/filepath" + "io/ioutil" + "regexp" + "testing" +) + +func Test(t *testing.T) { + exePath, err := os.Executable() + if err != nil { + t.Fatal(err) + } + testmainPath := filepath.Join(filepath.Dir(exePath), "_testmain.go") + source, err := ioutil.ReadFile(testmainPath) + if err != nil { + t.Fatal(err) + } + if matched, err := regexp.Match(`(?m)^// Code generated .* DO NOT EDIT\.$`, source); err != nil { + t.Fatal(err) + } else if !matched { + t.Error("_testmain.go does not have generated code comment") + } +} diff --git a/src/cmd/go/testdata/script/test_init.txt b/src/cmd/go/testdata/script/test_init.txt new file mode 100644 index 0000000000..73b4f3c768 --- /dev/null +++ b/src/cmd/go/testdata/script/test_init.txt @@ -0,0 +1,86 @@ +# Tests for automatic testing.Init calls when using 'go test'. + +env GO111MODULE=on + +# A TestMain should be able to access testing flags if it calls flag.Parse +# without needing to use testing.Init. +# Test code can use the name 'testing' without colliding with generated +# testinginit code. +# Tests running under 'go test' should observe that testing.Init is called +# before any user package initialization code runs. +go test +stdout TestMain +stdout TestInit +stdout TestExt + +-- go.mod -- +module m + +-- init_test.go -- +package testinitflag + +import ( + "flag" + "fmt" + "os" + Testing "testing" +) + +func testFlagsInitialized() bool { + found := false + flag.VisitAll(func(f *flag.Flag) { + if f.Name == "test.count" { + found = true + } + }) + return found +} + +var testing int +var testingInitAtInitialization = testFlagsInitialized() + +func TestInit(t *Testing.T) { + if !testingInitAtInitialization { + t.Fatal("testing.Init not called before package initialization") + } + fmt.Printf("TestInit\n") +} + +func TestMain(m *Testing.M) { + fmt.Printf("TestMain\n") + flag.Parse() + if !testFlagsInitialized() { + fmt.Println("testing flags not registered") + os.Exit(1) + } + os.Exit(m.Run()) +} + +-- external_test.go -- +package testinitflag_test + +import ( + "flag" + "fmt" + Testing "testing" +) + +func testFlagsInitialized() bool { + found := false + flag.VisitAll(func(f *flag.Flag) { + if f.Name == "test.count" { + found = true + } + }) + return found +} + +var testing int +var testingInitAtInitialization = testFlagsInitialized() + +func TestExt(t *Testing.T) { + fmt.Printf("TestExt\n") + if !testingInitAtInitialization { + t.Fatal("testing.Init not called before package initialization") + } +} diff --git a/src/cmd/go/testdata/script/test_status.txt b/src/cmd/go/testdata/script/test_status.txt new file mode 100644 index 0000000000..aa6ad3c50d --- /dev/null +++ b/src/cmd/go/testdata/script/test_status.txt @@ -0,0 +1,18 @@ +env GO111MODULE=off + +! go test x y +stdout ^FAIL\s+x +stdout ^ok\s+y +stdout (?-m)FAIL\n$ + +-- x/x_test.go -- +package x + +import "testing" + +func TestNothingJustFail(t *testing.T) { + t.Fail() +} + +-- y/y_test.go -- +package y diff --git a/src/cmd/go/testdata/script/test_timeout.txt b/src/cmd/go/testdata/script/test_timeout.txt new file mode 100644 index 0000000000..8dead0a439 --- /dev/null +++ b/src/cmd/go/testdata/script/test_timeout.txt @@ -0,0 +1,22 @@ +[short] skip +env GO111MODULE=off +cd a + +# No timeout is passed via 'go test' command. +go test -v +stdout '10m0s' + +# Timeout is passed via 'go test' command. +go test -v -timeout 30m +stdout '30m0s' + +-- a/timeout_test.go -- +package t +import ( + "flag" + "fmt" + "testing" +) +func TestTimeout(t *testing.T) { + fmt.Println(flag.Lookup("test.timeout").Value.String()) +} \ No newline at end of file diff --git a/src/cmd/go/testdata/script/version.txt b/src/cmd/go/testdata/script/version.txt new file mode 100644 index 0000000000..cb4881f7a7 --- /dev/null +++ b/src/cmd/go/testdata/script/version.txt @@ -0,0 +1,12 @@ +env GO111MODULE=on +[short] skip + +go build -o fortune.exe rsc.io/fortune +go version fortune.exe +stdout '^fortune.exe: .+' +go version -m fortune.exe +stdout '^\tpath\trsc.io/fortune' +stdout '^\tmod\trsc.io/fortune\tv1.0.0' + +-- go.mod -- +module m diff --git a/src/cmd/go/testdata/script/vet_asm.txt b/src/cmd/go/testdata/script/vet_asm.txt index ea920ea866..59b35ec7c2 100644 --- a/src/cmd/go/testdata/script/vet_asm.txt +++ b/src/cmd/go/testdata/script/vet_asm.txt @@ -2,8 +2,7 @@ env GO111MODULE=off # Issue 27665. Verify that "go vet" analyzes non-Go files. -env GOOS=linux -env GOARCH=amd64 +[!amd64] skip ! go vet -asmdecl a stderr 'f: invalid MOVW of x' diff --git a/src/cmd/go/testdata/script/vet_deps.txt b/src/cmd/go/testdata/script/vet_deps.txt new file mode 100644 index 0000000000..b2a8f168b3 --- /dev/null +++ b/src/cmd/go/testdata/script/vet_deps.txt @@ -0,0 +1,34 @@ +env GO111MODULE=off + +# Issue 30296. Verify that "go vet" uses only immediate dependencies. + +# First run fills the cache. +go vet a + +go vet -x a +! stderr 'transitive' + +-- a/a.go -- +package a + +import "b" + +func F() { + b.F() +} + +-- b/b.go -- +package b + +import "transitive" + +func F() { + transitive.F() +} + +-- transitive/c.go -- +package transitive + +func F() { +} + diff --git a/src/cmd/go/testdata/testcover/pkg4/a.go b/src/cmd/go/testdata/testcover/pkg4/a.go new file mode 100644 index 0000000000..cf09e6f1b0 --- /dev/null +++ b/src/cmd/go/testdata/testcover/pkg4/a.go @@ -0,0 +1,5 @@ +package pkg4 + +type T struct { + X bool +} diff --git a/src/cmd/go/testdata/testcover/pkg4/a_test.go b/src/cmd/go/testdata/testcover/pkg4/a_test.go new file mode 100644 index 0000000000..12b8685294 --- /dev/null +++ b/src/cmd/go/testdata/testcover/pkg4/a_test.go @@ -0,0 +1,9 @@ +package pkg4 + +import ( + "testing" +) + +func TestT(t *testing.T) { + _ = T{} +} diff --git a/src/cmd/gofmt/testdata/import.golden b/src/cmd/gofmt/testdata/import.golden index 51d7be79df..f7d742e3e8 100644 --- a/src/cmd/gofmt/testdata/import.golden +++ b/src/cmd/gofmt/testdata/import.golden @@ -1,3 +1,4 @@ +// package comment package main import ( @@ -20,6 +21,10 @@ import ( "io" ) +// We reset the line numbering to test that +// the formatting works independent of line directives +//line :19 + import ( "errors" "fmt" @@ -124,3 +129,58 @@ import ( "dedup_by_group" ) + +import ( + "fmt" // for Printf + /* comment */ io1 "io" + /* comment */ io2 "io" + /* comment */ "log" +) + +import ( + "fmt" + /* comment */ io1 "io" + /* comment */ io2 "io" // hello + "math" /* right side */ + // end +) + +import ( + "errors" // for New + "fmt" + /* comment */ io1 "io" /* before */ // after + io2 "io" // another + // end +) + +import ( + "errors" // for New + /* left */ "fmt" /* right */ + "log" // for Fatal + /* left */ "math" /* right */ +) + +import /* why */ /* comment here? */ ( + /* comment */ "fmt" + "math" +) + +// Reset it again +//line :100 + +// Dedup with different import styles +import ( + "path" + . "path" + _ "path" + pathpkg "path" +) + +/* comment */ +import ( + "fmt" + "math" // for Abs + // This is a new run + "errors" + "fmt" +) diff --git a/src/cmd/gofmt/testdata/import.input b/src/cmd/gofmt/testdata/import.input index 9a4b09dbf9..6e3a3a3bed 100644 --- a/src/cmd/gofmt/testdata/import.input +++ b/src/cmd/gofmt/testdata/import.input @@ -1,3 +1,4 @@ +// package comment package main import ( @@ -20,6 +21,10 @@ import ( "io" ) +// We reset the line numbering to test that +// the formatting works independent of line directives +//line :19 + import ( "fmt" "math" @@ -129,3 +134,60 @@ import ( "dedup_by_group" ) + +import ( + /* comment */ io1 "io" + "fmt" // for Printf + /* comment */ "log" + /* comment */ io2 "io" +) + +import ( + /* comment */ io2 "io" // hello + /* comment */ io1 "io" + "math" /* right side */ + "fmt" + // end +) + +import ( + /* comment */ io1 "io" /* before */ // after + "fmt" + "errors" // for New + io2 "io" // another + // end +) + +import ( + /* left */ "fmt" /* right */ + "errors" // for New + /* left */ "math" /* right */ + "log" // for Fatal +) + +import /* why */ /* comment here? */ ( + /* comment */ "fmt" + "math" +) + +// Reset it again +//line :100 + +// Dedup with different import styles +import ( + "path" + . "path" + _ "path" + "path" + pathpkg "path" +) + +/* comment */ +import ( + "math" // for Abs + "fmt" + // This is a new run + "errors" + "fmt" + "errors" +) diff --git a/src/cmd/internal/bio/buf.go b/src/cmd/internal/bio/buf.go index a3edd74383..470c9797b2 100644 --- a/src/cmd/internal/bio/buf.go +++ b/src/cmd/internal/bio/buf.go @@ -7,6 +7,7 @@ package bio import ( "bufio" + "io" "log" "os" ) @@ -42,7 +43,7 @@ func Open(name string) (*Reader, error) { return &Reader{f: f, Reader: bufio.NewReader(f)}, nil } -func (r *Reader) Seek(offset int64, whence int) int64 { +func (r *Reader) MustSeek(offset int64, whence int) int64 { if whence == 1 { offset -= int64(r.Buffered()) } @@ -54,7 +55,7 @@ func (r *Reader) Seek(offset int64, whence int) int64 { return off } -func (w *Writer) Seek(offset int64, whence int) int64 { +func (w *Writer) MustSeek(offset int64, whence int) int64 { if err := w.Flush(); err != nil { log.Fatalf("writing output: %v", err) } @@ -105,3 +106,38 @@ func (r *Reader) File() *os.File { func (w *Writer) File() *os.File { return w.f } + +// Slice reads the next length bytes of r into a slice. +// +// This slice may be backed by mmap'ed memory. Currently, this memory +// will never be unmapped. The second result reports whether the +// backing memory is read-only. +func (r *Reader) Slice(length uint64) ([]byte, bool, error) { + if length == 0 { + return []byte{}, false, nil + } + + data, ok := r.sliceOS(length) + if ok { + return data, true, nil + } + + data = make([]byte, length) + _, err := io.ReadFull(r, data) + if err != nil { + return nil, false, err + } + return data, false, nil +} + +// SliceRO returns a slice containing the next length bytes of r +// backed by a read-only mmap'd data. If the mmap cannot be +// established (limit exceeded, region too small, etc) a nil slice +// will be returned. If mmap succeeds, it will never be unmapped. +func (r *Reader) SliceRO(length uint64) []byte { + data, ok := r.sliceOS(length) + if ok { + return data + } + return nil +} diff --git a/src/cmd/internal/bio/buf_mmap.go b/src/cmd/internal/bio/buf_mmap.go new file mode 100644 index 0000000000..4b43d74f26 --- /dev/null +++ b/src/cmd/internal/bio/buf_mmap.go @@ -0,0 +1,62 @@ +// 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. + +// +build darwin dragonfly freebsd linux netbsd openbsd + +package bio + +import ( + "runtime" + "sync/atomic" + "syscall" +) + +// mmapLimit is the maximum number of mmaped regions to create before +// falling back to reading into a heap-allocated slice. This exists +// because some operating systems place a limit on the number of +// distinct mapped regions per process. As of this writing: +// +// Darwin unlimited +// DragonFly 1000000 (vm.max_proc_mmap) +// FreeBSD unlimited +// Linux 65530 (vm.max_map_count) // TODO: query /proc/sys/vm/max_map_count? +// NetBSD unlimited +// OpenBSD unlimited +var mmapLimit int32 = 1<<31 - 1 + +func init() { + // Linux is the only practically concerning OS. + if runtime.GOOS == "linux" { + mmapLimit = 30000 + } +} + +func (r *Reader) sliceOS(length uint64) ([]byte, bool) { + // For small slices, don't bother with the overhead of a + // mapping, especially since we have no way to unmap it. + const threshold = 16 << 10 + if length < threshold { + return nil, false + } + + // Have we reached the mmap limit? + if atomic.AddInt32(&mmapLimit, -1) < 0 { + atomic.AddInt32(&mmapLimit, 1) + return nil, false + } + + // Page-align the offset. + off := r.Offset() + align := syscall.Getpagesize() + aoff := off &^ int64(align-1) + + data, err := syscall.Mmap(int(r.f.Fd()), aoff, int(length+uint64(off-aoff)), syscall.PROT_READ, syscall.MAP_SHARED|syscall.MAP_FILE) + if err != nil { + return nil, false + } + + data = data[off-aoff:] + r.MustSeek(int64(length), 1) + return data, true +} diff --git a/src/cmd/internal/bio/buf_nommap.go b/src/cmd/internal/bio/buf_nommap.go new file mode 100644 index 0000000000..f43c67ac2d --- /dev/null +++ b/src/cmd/internal/bio/buf_nommap.go @@ -0,0 +1,11 @@ +// 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. + +// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd + +package bio + +func (r *Reader) sliceOS(length uint64) ([]byte, bool) { + return nil, false +} diff --git a/src/cmd/internal/dwarf/dwarf.go b/src/cmd/internal/dwarf/dwarf.go index 8ad84105a4..1f5786f1ad 100644 --- a/src/cmd/internal/dwarf/dwarf.go +++ b/src/cmd/internal/dwarf/dwarf.go @@ -8,10 +8,13 @@ package dwarf import ( + "bytes" "cmd/internal/objabi" "errors" "fmt" + "os/exec" "sort" + "strconv" "strings" ) @@ -88,18 +91,19 @@ type Range struct { // This container is used by the PutFunc* variants below when // creating the DWARF subprogram DIE(s) for a function. type FnState struct { - Name string - Importpath string - Info Sym - Filesym Sym - Loc Sym - Ranges Sym - Absfn Sym - StartPC Sym - Size int64 - External bool - Scopes []Scope - InlCalls InlCalls + Name string + Importpath string + Info Sym + Filesym Sym + Loc Sym + Ranges Sym + Absfn Sym + StartPC Sym + Size int64 + External bool + Scopes []Scope + InlCalls InlCalls + UseBASEntries bool } func EnableLogging(doit bool) { @@ -141,6 +145,20 @@ func (s *Scope) UnifyRanges(c *Scope) { s.Ranges = out } +// AppendRange adds r to s, if r is non-empty. +// If possible, it extends the last Range in s.Ranges; if not, it creates a new one. +func (s *Scope) AppendRange(r Range) { + if r.End <= r.Start { + return + } + i := len(s.Ranges) + if i > 0 && s.Ranges[i-1].End == r.Start { + s.Ranges[i-1].End = r.End + return + } + s.Ranges = append(s.Ranges, r) +} + type InlCalls struct { Calls []InlCall } @@ -178,6 +196,7 @@ type Context interface { AddInt(s Sym, size int, i int64) AddBytes(s Sym, b []byte) AddAddress(s Sym, t interface{}, ofs int64) + AddCURelativeAddress(s Sym, t interface{}, ofs int64) AddSectionOffset(s Sym, size int, t interface{}, ofs int64) AddDWARFAddrSectionOffset(s Sym, t interface{}, ofs int64) CurrentOffset(s Sym) int64 @@ -275,10 +294,12 @@ func Sleb128put(ctxt Context, s Sym, v int64) { } /* - * Defining Abbrevs. This is hardcoded, and there will be - * only a handful of them. The DWARF spec places no restriction on - * the ordering of attributes in the Abbrevs and DIEs, and we will - * always write them out in the order of declaration in the abbrev. + * Defining Abbrevs. This is hardcoded on a per-platform basis (that is, + * each platform will see a fixed abbrev table for all objects); the number + * of abbrev entries is fairly small (compared to C++ objects). The DWARF + * spec places no restriction on the ordering of attributes in the + * Abbrevs and DIEs, and we will always write them out in the order + * of declaration in the abbrev. */ type dwAttrForm struct { attr uint16 @@ -295,6 +316,8 @@ const ( DW_AT_go_embedded_field = 0x2903 DW_AT_go_runtime_type = 0x2904 + DW_AT_go_package_name = 0x2905 // Attribute for DW_TAG_compile_unit + DW_AT_internal_location = 253 // params and locals; not emitted ) @@ -350,6 +373,45 @@ type dwAbbrev struct { attr []dwAttrForm } +var abbrevsFinalized bool + +// expandPseudoForm takes an input DW_FORM_xxx value and translates it +// into a platform-appropriate concrete form. Existing concrete/real +// DW_FORM values are left untouched. For the moment the only +// pseudo-form is DW_FORM_udata_pseudo, which gets expanded to +// DW_FORM_data4 on Darwin and DW_FORM_udata everywhere else. See +// issue #31459 for more context. +func expandPseudoForm(form uint8) uint8 { + // Is this a pseudo-form? + if form != DW_FORM_udata_pseudo { + return form + } + expandedForm := DW_FORM_udata + if objabi.GOOS == "darwin" { + expandedForm = DW_FORM_data4 + } + return uint8(expandedForm) +} + +// Abbrevs() returns the finalized abbrev array for the platform, +// expanding any DW_FORM pseudo-ops to real values. +func Abbrevs() [DW_NABRV]dwAbbrev { + if abbrevsFinalized { + return abbrevs + } + for i := 1; i < DW_NABRV; i++ { + for j := 0; j < len(abbrevs[i].attr); j++ { + abbrevs[i].attr[j].form = expandPseudoForm(abbrevs[i].attr[j].form) + } + } + abbrevsFinalized = true + return abbrevs +} + +// abbrevs is a raw table of abbrev entries; it needs to be post-processed +// by the Abbrevs() function above prior to being consumed, to expand +// the 'pseudo-form' entries below to real DWARF form values. + var abbrevs = [DW_NABRV]dwAbbrev{ /* The mandatory DW_ABRV_NULL entry. */ {0, 0, []dwAttrForm{}}, @@ -366,6 +428,7 @@ var abbrevs = [DW_NABRV]dwAbbrev{ {DW_AT_ranges, DW_FORM_sec_offset}, {DW_AT_comp_dir, DW_FORM_string}, {DW_AT_producer, DW_FORM_string}, + {DW_AT_go_package_name, DW_FORM_string}, }, }, @@ -378,6 +441,7 @@ var abbrevs = [DW_NABRV]dwAbbrev{ {DW_AT_language, DW_FORM_data1}, {DW_AT_comp_dir, DW_FORM_string}, {DW_AT_producer, DW_FORM_string}, + {DW_AT_go_package_name, DW_FORM_string}, }, }, @@ -427,7 +491,7 @@ var abbrevs = [DW_NABRV]dwAbbrev{ {DW_AT_low_pc, DW_FORM_addr}, {DW_AT_high_pc, DW_FORM_addr}, {DW_AT_call_file, DW_FORM_data4}, - {DW_AT_call_line, DW_FORM_udata}, + {DW_AT_call_line, DW_FORM_udata_pseudo}, // pseudo-form }, }, @@ -439,7 +503,7 @@ var abbrevs = [DW_NABRV]dwAbbrev{ {DW_AT_abstract_origin, DW_FORM_ref_addr}, {DW_AT_ranges, DW_FORM_sec_offset}, {DW_AT_call_file, DW_FORM_data4}, - {DW_AT_call_line, DW_FORM_udata}, + {DW_AT_call_line, DW_FORM_udata_pseudo}, // pseudo-form }, }, @@ -798,6 +862,7 @@ var abbrevs = [DW_NABRV]dwAbbrev{ // GetAbbrev returns the contents of the .debug_abbrev section. func GetAbbrev() []byte { + abbrevs := Abbrevs() var buf []byte for i := 1; i < DW_NABRV; i++ { // See section 7.5.3 @@ -954,6 +1019,7 @@ func putattr(ctxt Context, s Sym, abbrev int, form int, cls int, value int64, da // Note that we can (and do) add arbitrary attributes to a DIE, but // only the ones actually listed in the Abbrev will be written out. func PutAttrs(ctxt Context, s Sym, abbrev int, attr *DWAttr) { + abbrevs := Abbrevs() Outer: for _, f := range abbrevs[abbrev].attr { for ap := attr; ap != nil; ap = ap.Link { @@ -969,6 +1035,7 @@ Outer: // HasChildren reports whether 'die' uses an abbrev that supports children. func HasChildren(die *DWDie) bool { + abbrevs := Abbrevs() return abbrevs[die.Abbrev].children != 0 } @@ -980,18 +1047,11 @@ func PutIntConst(ctxt Context, info, typ Sym, name string, val int64) { putattr(ctxt, info, DW_ABRV_INT_CONSTANT, DW_FORM_sdata, DW_CLS_CONSTANT, val, nil) } -// PutRanges writes a range table to sym. All addresses in ranges are -// relative to some base address. If base is not nil, then they're -// relative to the start of base. If base is nil, then the caller must -// arrange a base address some other way (such as a DW_AT_low_pc -// attribute). -func PutRanges(ctxt Context, sym Sym, base Sym, ranges []Range) { +// PutBasedRanges writes a range table to sym. All addresses in ranges are +// relative to some base address, which must be arranged by the caller +// (e.g., with a DW_AT_low_pc attribute, or in a BASE-prefixed range). +func PutBasedRanges(ctxt Context, sym Sym, ranges []Range) { ps := ctxt.PtrSize() - // Write base address entry. - if base != nil { - ctxt.AddInt(sym, ps, -1) - ctxt.AddAddress(sym, base, 0) - } // Write ranges. for _, r := range ranges { ctxt.AddInt(sym, ps, r.Start) @@ -1002,6 +1062,31 @@ func PutRanges(ctxt Context, sym Sym, base Sym, ranges []Range) { ctxt.AddInt(sym, ps, 0) } +// PutRanges writes a range table to s.Ranges. +// All addresses in ranges are relative to s.base. +func (s *FnState) PutRanges(ctxt Context, ranges []Range) { + ps := ctxt.PtrSize() + sym, base := s.Ranges, s.StartPC + + if s.UseBASEntries { + // Using a Base Address Selection Entry reduces the number of relocations, but + // this is not done on macOS because it is not supported by dsymutil/dwarfdump/lldb + ctxt.AddInt(sym, ps, -1) + ctxt.AddAddress(sym, base, 0) + PutBasedRanges(ctxt, sym, ranges) + return + } + + // Write ranges full of relocations + for _, r := range ranges { + ctxt.AddCURelativeAddress(sym, base, r.Start) + ctxt.AddCURelativeAddress(sym, base, r.End) + } + // Write trailer. + ctxt.AddInt(sym, ps, 0) + ctxt.AddInt(sym, ps, 0) +} + // Return TRUE if the inlined call in the specified slot is empty, // meaning it has a zero-length range (no instructions), and all // of its children are empty. @@ -1195,7 +1280,7 @@ func PutInlinedFunc(ctxt Context, s *FnState, callersym Sym, callIdx int) error if abbrev == DW_ABRV_INLINED_SUBROUTINE_RANGES { putattr(ctxt, s.Info, abbrev, DW_FORM_sec_offset, DW_CLS_PTR, s.Ranges.Len(), s.Ranges) - PutRanges(ctxt, s.Ranges, s.StartPC, ic.Ranges) + s.PutRanges(ctxt, ic.Ranges) } else { st := ic.Ranges[0].Start en := ic.Ranges[0].End @@ -1205,7 +1290,8 @@ func PutInlinedFunc(ctxt Context, s *FnState, callersym Sym, callIdx int) error // Emit call file, line attrs. ctxt.AddFileRef(s.Info, ic.CallFile) - putattr(ctxt, s.Info, abbrev, DW_FORM_udata, DW_CLS_CONSTANT, int64(ic.CallLine), nil) + form := int(expandPseudoForm(DW_FORM_udata_pseudo)) + putattr(ctxt, s.Info, abbrev, form, DW_CLS_CONSTANT, int64(ic.CallLine), nil) // Variables associated with this inlined routine instance. vars := ic.InlVars @@ -1350,7 +1436,7 @@ func putscope(ctxt Context, s *FnState, scopes []Scope, curscope int32, fnabbrev Uleb128put(ctxt, s.Info, DW_ABRV_LEXICAL_BLOCK_RANGES) putattr(ctxt, s.Info, DW_ABRV_LEXICAL_BLOCK_RANGES, DW_FORM_sec_offset, DW_CLS_PTR, s.Ranges.Len(), s.Ranges) - PutRanges(ctxt, s.Ranges, s.StartPC, scope.Ranges) + s.PutRanges(ctxt, scope.Ranges) } curscope = putscope(ctxt, s, scopes, curscope, fnabbrev, encbuf) @@ -1526,3 +1612,42 @@ type byChildIndex []*Var func (s byChildIndex) Len() int { return len(s) } func (s byChildIndex) Less(i, j int) bool { return s[i].ChildIndex < s[j].ChildIndex } func (s byChildIndex) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// IsDWARFEnabledOnAIX returns true if DWARF is possible on the +// current extld. +// AIX ld doesn't support DWARF with -bnoobjreorder with version +// prior to 7.2.2. +func IsDWARFEnabledOnAIXLd(extld string) (bool, error) { + out, err := exec.Command(extld, "-Wl,-V").CombinedOutput() + if err != nil { + // The normal output should display ld version and + // then fails because ".main" is not defined: + // ld: 0711-317 ERROR: Undefined symbol: .main + if !bytes.Contains(out, []byte("0711-317")) { + return false, fmt.Errorf("%s -Wl,-V failed: %v\n%s", extld, err, out) + } + } + // gcc -Wl,-V output should be: + // /usr/bin/ld: LD X.X.X(date) + // ... + out = bytes.TrimPrefix(out, []byte("/usr/bin/ld: LD ")) + vers := string(bytes.Split(out, []byte("("))[0]) + subvers := strings.Split(vers, ".") + if len(subvers) != 3 { + return false, fmt.Errorf("cannot parse %s -Wl,-V (%s): %v\n", extld, out, err) + } + if v, err := strconv.Atoi(subvers[0]); err != nil || v < 7 { + return false, nil + } else if v > 7 { + return true, nil + } + if v, err := strconv.Atoi(subvers[1]); err != nil || v < 2 { + return false, nil + } else if v > 2 { + return true, nil + } + if v, err := strconv.Atoi(subvers[2]); err != nil || v < 2 { + return false, nil + } + return true, nil +} diff --git a/src/cmd/internal/dwarf/dwarf_defs.go b/src/cmd/internal/dwarf/dwarf_defs.go index d37c960014..e2716e5062 100644 --- a/src/cmd/internal/dwarf/dwarf_defs.go +++ b/src/cmd/internal/dwarf/dwarf_defs.go @@ -220,6 +220,8 @@ const ( DW_FORM_exprloc = 0x18 // exprloc DW_FORM_flag_present = 0x19 // flag DW_FORM_ref_sig8 = 0x20 // reference + // Pseudo-form: expanded to data4 on IOS, udata elsewhere. + DW_FORM_udata_pseudo = 0x99 ) // Table 24 (#operands, notes) diff --git a/src/cmd/internal/goobj/goobj_test.go b/src/cmd/internal/goobj/goobj_test.go index 840b45c908..4a4d35a413 100644 --- a/src/cmd/internal/goobj/goobj_test.go +++ b/src/cmd/internal/goobj/goobj_test.go @@ -10,6 +10,7 @@ import ( "debug/pe" "fmt" "internal/testenv" + "internal/xcoff" "io" "io/ioutil" "os" @@ -292,6 +293,24 @@ func TestParseCGOArchive(t *testing.T) { } } } + case "aix": + c1 = "." + c1 + c2 = "." + c2 + for _, obj := range p.Native { + xf, err := xcoff.NewFile(obj) + if err != nil { + t.Fatal(err) + } + for _, s := range xf.Symbols { + switch s.Name { + case c1: + found1 = true + case c2: + found2 = true + } + } + } + default: for _, obj := range p.Native { ef, err := elf.NewFile(obj) diff --git a/src/cmd/internal/goobj/read.go b/src/cmd/internal/goobj/read.go index 84aed6eeea..dd29bacd04 100644 --- a/src/cmd/internal/goobj/read.go +++ b/src/cmd/internal/goobj/read.go @@ -97,6 +97,7 @@ type Func struct { Frame int64 // size in bytes of local variable frame Leaf bool // function omits save of link register (ARM) NoSplit bool // function omits stack split prologue + TopFrame bool // function is the top of the call stack Var []Var // detail about local variables PCSP Data // PC → SP offset map PCFile Data // PC → file number map (index into File) @@ -576,6 +577,7 @@ func (r *objReader) parseObject(prefix []byte) error { f.Frame = r.readInt() flags := r.readInt() f.Leaf = flags&(1<<0) != 0 + f.TopFrame = flags&(1<<4) != 0 f.NoSplit = r.readInt() != 0 f.Var = make([]Var, r.readInt()) for i := range f.Var { diff --git a/src/cmd/internal/obj/arm64/a.out.go b/src/cmd/internal/obj/arm64/a.out.go index 18cdd10f9b..944eab1955 100644 --- a/src/cmd/internal/obj/arm64/a.out.go +++ b/src/cmd/internal/obj/arm64/a.out.go @@ -598,18 +598,38 @@ const ( AHVC AIC AISB + ALDADDAB + ALDADDAD + ALDADDAH + ALDADDAW ALDADDALB + ALDADDALD ALDADDALH ALDADDALW - ALDADDALD ALDADDB + ALDADDD ALDADDH ALDADDW - ALDADDD + ALDADDLB + ALDADDLD + ALDADDLH + ALDADDLW + ALDANDAB + ALDANDAD + ALDANDAH + ALDANDAW + ALDANDALB + ALDANDALD + ALDANDALH + ALDANDALW ALDANDB + ALDANDD ALDANDH ALDANDW - ALDANDD + ALDANDLB + ALDANDLD + ALDANDLH + ALDANDLW ALDAR ALDARB ALDARH @@ -620,14 +640,38 @@ const ( ALDAXRB ALDAXRH ALDAXRW + ALDEORAB + ALDEORAD + ALDEORAH + ALDEORAW + ALDEORALB + ALDEORALD + ALDEORALH + ALDEORALW ALDEORB + ALDEORD ALDEORH ALDEORW - ALDEORD + ALDEORLB + ALDEORLD + ALDEORLH + ALDEORLW + ALDORAB + ALDORAD + ALDORAH + ALDORAW + ALDORALB + ALDORALD + ALDORALH + ALDORALW ALDORB + ALDORD ALDORH ALDORW - ALDORD + ALDORLB + ALDORLD + ALDORLH + ALDORLW ALDP ALDPW ALDPSW @@ -779,14 +823,22 @@ const ( AMOVPS AMOVPSW AMOVPW - ASWPD + ASWPAD + ASWPAW + ASWPAH + ASWPAB ASWPALD - ASWPW ASWPALW - ASWPH ASWPALH - ASWPB ASWPALB + ASWPD + ASWPW + ASWPH + ASWPB + ASWPLD + ASWPLW + ASWPLH + ASWPLB ABEQ ABNE ABCS diff --git a/src/cmd/internal/obj/arm64/anames.go b/src/cmd/internal/obj/arm64/anames.go index 55e2b5bafb..5af6fdc8de 100644 --- a/src/cmd/internal/obj/arm64/anames.go +++ b/src/cmd/internal/obj/arm64/anames.go @@ -95,18 +95,38 @@ var Anames = []string{ "HVC", "IC", "ISB", + "LDADDAB", + "LDADDAD", + "LDADDAH", + "LDADDAW", "LDADDALB", + "LDADDALD", "LDADDALH", "LDADDALW", - "LDADDALD", "LDADDB", + "LDADDD", "LDADDH", "LDADDW", - "LDADDD", + "LDADDLB", + "LDADDLD", + "LDADDLH", + "LDADDLW", + "LDANDAB", + "LDANDAD", + "LDANDAH", + "LDANDAW", + "LDANDALB", + "LDANDALD", + "LDANDALH", + "LDANDALW", "LDANDB", + "LDANDD", "LDANDH", "LDANDW", - "LDANDD", + "LDANDLB", + "LDANDLD", + "LDANDLH", + "LDANDLW", "LDAR", "LDARB", "LDARH", @@ -117,14 +137,38 @@ var Anames = []string{ "LDAXRB", "LDAXRH", "LDAXRW", + "LDEORAB", + "LDEORAD", + "LDEORAH", + "LDEORAW", + "LDEORALB", + "LDEORALD", + "LDEORALH", + "LDEORALW", "LDEORB", + "LDEORD", "LDEORH", "LDEORW", - "LDEORD", + "LDEORLB", + "LDEORLD", + "LDEORLH", + "LDEORLW", + "LDORAB", + "LDORAD", + "LDORAH", + "LDORAW", + "LDORALB", + "LDORALD", + "LDORALH", + "LDORALW", "LDORB", + "LDORD", "LDORH", "LDORW", - "LDORD", + "LDORLB", + "LDORLD", + "LDORLH", + "LDORLW", "LDP", "LDPW", "LDPSW", @@ -276,14 +320,22 @@ var Anames = []string{ "MOVPS", "MOVPSW", "MOVPW", - "SWPD", + "SWPAD", + "SWPAW", + "SWPAH", + "SWPAB", "SWPALD", - "SWPW", "SWPALW", - "SWPH", "SWPALH", - "SWPB", "SWPALB", + "SWPD", + "SWPW", + "SWPH", + "SWPB", + "SWPLD", + "SWPLW", + "SWPLH", + "SWPLB", "BEQ", "BNE", "BCS", diff --git a/src/cmd/internal/obj/arm64/asm7.go b/src/cmd/internal/obj/arm64/asm7.go index cbe5796234..ef9991a36b 100644 --- a/src/cmd/internal/obj/arm64/asm7.go +++ b/src/cmd/internal/obj/arm64/asm7.go @@ -79,6 +79,95 @@ type Optab struct { scond uint16 } +func IsAtomicInstruction(as obj.As) bool { + _, ok := atomicInstructions[as] + return ok +} + +// known field values of an instruction. +var atomicInstructions = map[obj.As]uint32{ + ALDADDAD: 3<<30 | 0x1c5<<21 | 0x00<<10, + ALDADDAW: 2<<30 | 0x1c5<<21 | 0x00<<10, + ALDADDAH: 1<<30 | 0x1c5<<21 | 0x00<<10, + ALDADDAB: 0<<30 | 0x1c5<<21 | 0x00<<10, + ALDADDALD: 3<<30 | 0x1c7<<21 | 0x00<<10, + ALDADDALW: 2<<30 | 0x1c7<<21 | 0x00<<10, + ALDADDALH: 1<<30 | 0x1c7<<21 | 0x00<<10, + ALDADDALB: 0<<30 | 0x1c7<<21 | 0x00<<10, + ALDADDD: 3<<30 | 0x1c1<<21 | 0x00<<10, + ALDADDW: 2<<30 | 0x1c1<<21 | 0x00<<10, + ALDADDH: 1<<30 | 0x1c1<<21 | 0x00<<10, + ALDADDB: 0<<30 | 0x1c1<<21 | 0x00<<10, + ALDADDLD: 3<<30 | 0x1c3<<21 | 0x00<<10, + ALDADDLW: 2<<30 | 0x1c3<<21 | 0x00<<10, + ALDADDLH: 1<<30 | 0x1c3<<21 | 0x00<<10, + ALDADDLB: 0<<30 | 0x1c3<<21 | 0x00<<10, + ALDANDAD: 3<<30 | 0x1c5<<21 | 0x04<<10, + ALDANDAW: 2<<30 | 0x1c5<<21 | 0x04<<10, + ALDANDAH: 1<<30 | 0x1c5<<21 | 0x04<<10, + ALDANDAB: 0<<30 | 0x1c5<<21 | 0x04<<10, + ALDANDALD: 3<<30 | 0x1c7<<21 | 0x04<<10, + ALDANDALW: 2<<30 | 0x1c7<<21 | 0x04<<10, + ALDANDALH: 1<<30 | 0x1c7<<21 | 0x04<<10, + ALDANDALB: 0<<30 | 0x1c7<<21 | 0x04<<10, + ALDANDD: 3<<30 | 0x1c1<<21 | 0x04<<10, + ALDANDW: 2<<30 | 0x1c1<<21 | 0x04<<10, + ALDANDH: 1<<30 | 0x1c1<<21 | 0x04<<10, + ALDANDB: 0<<30 | 0x1c1<<21 | 0x04<<10, + ALDANDLD: 3<<30 | 0x1c3<<21 | 0x04<<10, + ALDANDLW: 2<<30 | 0x1c3<<21 | 0x04<<10, + ALDANDLH: 1<<30 | 0x1c3<<21 | 0x04<<10, + ALDANDLB: 0<<30 | 0x1c3<<21 | 0x04<<10, + ALDEORAD: 3<<30 | 0x1c5<<21 | 0x08<<10, + ALDEORAW: 2<<30 | 0x1c5<<21 | 0x08<<10, + ALDEORAH: 1<<30 | 0x1c5<<21 | 0x08<<10, + ALDEORAB: 0<<30 | 0x1c5<<21 | 0x08<<10, + ALDEORALD: 3<<30 | 0x1c7<<21 | 0x08<<10, + ALDEORALW: 2<<30 | 0x1c7<<21 | 0x08<<10, + ALDEORALH: 1<<30 | 0x1c7<<21 | 0x08<<10, + ALDEORALB: 0<<30 | 0x1c7<<21 | 0x08<<10, + ALDEORD: 3<<30 | 0x1c1<<21 | 0x08<<10, + ALDEORW: 2<<30 | 0x1c1<<21 | 0x08<<10, + ALDEORH: 1<<30 | 0x1c1<<21 | 0x08<<10, + ALDEORB: 0<<30 | 0x1c1<<21 | 0x08<<10, + ALDEORLD: 3<<30 | 0x1c3<<21 | 0x08<<10, + ALDEORLW: 2<<30 | 0x1c3<<21 | 0x08<<10, + ALDEORLH: 1<<30 | 0x1c3<<21 | 0x08<<10, + ALDEORLB: 0<<30 | 0x1c3<<21 | 0x08<<10, + ALDORAD: 3<<30 | 0x1c5<<21 | 0x0c<<10, + ALDORAW: 2<<30 | 0x1c5<<21 | 0x0c<<10, + ALDORAH: 1<<30 | 0x1c5<<21 | 0x0c<<10, + ALDORAB: 0<<30 | 0x1c5<<21 | 0x0c<<10, + ALDORALD: 3<<30 | 0x1c7<<21 | 0x0c<<10, + ALDORALW: 2<<30 | 0x1c7<<21 | 0x0c<<10, + ALDORALH: 1<<30 | 0x1c7<<21 | 0x0c<<10, + ALDORALB: 0<<30 | 0x1c7<<21 | 0x0c<<10, + ALDORD: 3<<30 | 0x1c1<<21 | 0x0c<<10, + ALDORW: 2<<30 | 0x1c1<<21 | 0x0c<<10, + ALDORH: 1<<30 | 0x1c1<<21 | 0x0c<<10, + ALDORB: 0<<30 | 0x1c1<<21 | 0x0c<<10, + ALDORLD: 3<<30 | 0x1c3<<21 | 0x0c<<10, + ALDORLW: 2<<30 | 0x1c3<<21 | 0x0c<<10, + ALDORLH: 1<<30 | 0x1c3<<21 | 0x0c<<10, + ALDORLB: 0<<30 | 0x1c3<<21 | 0x0c<<10, + ASWPAD: 3<<30 | 0x1c5<<21 | 0x20<<10, + ASWPAW: 2<<30 | 0x1c5<<21 | 0x20<<10, + ASWPAH: 1<<30 | 0x1c5<<21 | 0x20<<10, + ASWPAB: 0<<30 | 0x1c5<<21 | 0x20<<10, + ASWPALD: 3<<30 | 0x1c7<<21 | 0x20<<10, + ASWPALW: 2<<30 | 0x1c7<<21 | 0x20<<10, + ASWPALH: 1<<30 | 0x1c7<<21 | 0x20<<10, + ASWPALB: 0<<30 | 0x1c7<<21 | 0x20<<10, + ASWPD: 3<<30 | 0x1c1<<21 | 0x20<<10, + ASWPW: 2<<30 | 0x1c1<<21 | 0x20<<10, + ASWPH: 1<<30 | 0x1c1<<21 | 0x20<<10, + ASWPB: 0<<30 | 0x1c1<<21 | 0x20<<10, + ASWPLD: 3<<30 | 0x1c3<<21 | 0x20<<10, + ASWPLW: 2<<30 | 0x1c3<<21 | 0x20<<10, + ASWPLH: 1<<30 | 0x1c3<<21 | 0x20<<10, + ASWPLB: 0<<30 | 0x1c3<<21 | 0x20<<10, +} + var oprange [ALAST & obj.AMask][]Optab var xcmp [C_NCLASS][C_NCLASS]bool @@ -2213,33 +2302,9 @@ func buildop(ctxt *obj.Link) { oprangeset(AMOVZW, t) case ASWPD: - oprangeset(ASWPALD, t) - oprangeset(ASWPB, t) - oprangeset(ASWPH, t) - oprangeset(ASWPW, t) - oprangeset(ASWPALB, t) - oprangeset(ASWPALH, t) - oprangeset(ASWPALW, t) - oprangeset(ALDADDALB, t) - oprangeset(ALDADDALH, t) - oprangeset(ALDADDALW, t) - oprangeset(ALDADDALD, t) - oprangeset(ALDADDB, t) - oprangeset(ALDADDH, t) - oprangeset(ALDADDW, t) - oprangeset(ALDADDD, t) - oprangeset(ALDANDB, t) - oprangeset(ALDANDH, t) - oprangeset(ALDANDW, t) - oprangeset(ALDANDD, t) - oprangeset(ALDEORB, t) - oprangeset(ALDEORH, t) - oprangeset(ALDEORW, t) - oprangeset(ALDEORD, t) - oprangeset(ALDORB, t) - oprangeset(ALDORH, t) - oprangeset(ALDORW, t) - oprangeset(ALDORD, t) + for i := range atomicInstructions { + oprangeset(i, t) + } case ABEQ: oprangeset(ABNE, t) @@ -3659,39 +3724,17 @@ func (c *ctxt7) asmout(p *obj.Prog, o *Optab, out []uint32) { o1 |= uint32(p.From.Reg&31) << 5 o1 |= uint32(p.To.Reg & 31) - case 47: /* SWPx Rs, (Rb), Rt: Rs -> (Rb) -> Rt */ + case 47: /* SWPx/LDADDx/LDANDx/LDEORx/LDORx Rs, (Rb), Rt */ rs := p.From.Reg rt := p.RegTo2 rb := p.To.Reg - switch p.As { - case ASWPD, ASWPALD, ALDADDALD, ALDADDD, ALDANDD, ALDEORD, ALDORD: // 64-bit - o1 = 3 << 30 - case ASWPW, ASWPALW, ALDADDALW, ALDADDW, ALDANDW, ALDEORW, ALDORW: // 32-bit - o1 = 2 << 30 - case ASWPH, ASWPALH, ALDADDALH, ALDADDH, ALDANDH, ALDEORH, ALDORH: // 16-bit - o1 = 1 << 30 - case ASWPB, ASWPALB, ALDADDALB, ALDADDB, ALDANDB, ALDEORB, ALDORB: // 8-bit - o1 = 0 << 30 - default: - c.ctxt.Diag("illegal instruction: %v\n", p) + + fields := atomicInstructions[p.As] + // rt can't be sp. rt can't be r31 when field A is 0, A bit is the 23rd bit. + if rt == REG_RSP || (rt == REGZERO && (fields&(1<<23) == 0)) { + c.ctxt.Diag("illegal destination register: %v\n", p) } - switch p.As { - case ASWPD, ASWPW, ASWPH, ASWPB, ASWPALD, ASWPALW, ASWPALH, ASWPALB: - o1 |= 0x20 << 10 - case ALDADDALD, ALDADDALW, ALDADDALH, ALDADDALB, ALDADDD, ALDADDW, ALDADDH, ALDADDB: - o1 |= 0x00 << 10 - case ALDANDD, ALDANDW, ALDANDH, ALDANDB: - o1 |= 0x04 << 10 - case ALDEORD, ALDEORW, ALDEORH, ALDEORB: - o1 |= 0x08 << 10 - case ALDORD, ALDORW, ALDORH, ALDORB: - o1 |= 0x0c << 10 - } - switch p.As { - case ALDADDALD, ALDADDALW, ALDADDALH, ALDADDALB, ASWPALD, ASWPALW, ASWPALH, ASWPALB: - o1 |= 3 << 22 - } - o1 |= 0x1c1<<21 | uint32(rs&31)<<16 | uint32(rb&31)<<5 | uint32(rt&31) + o1 |= fields | uint32(rs&31)<<16 | uint32(rb&31)<<5 | uint32(rt&31) case 48: /* ADD $C_ADDCON2, Rm, Rd */ op := c.opirr(p, p.As) @@ -3846,6 +3889,9 @@ func (c *ctxt7) asmout(p *obj.Prog, o *Optab, out []uint32) { c.ctxt.Diag("constrained unpredictable behavior: %v", p) } } + if s == REG_RSP { + c.ctxt.Diag("illegal destination register: %v\n", p) + } o1 = c.opstore(p, p.As) if p.RegTo2 != obj.REG_NONE { diff --git a/src/cmd/internal/obj/bootstrap.go b/src/cmd/internal/obj/bootstrap.go deleted file mode 100644 index 42835e1d9d..0000000000 --- a/src/cmd/internal/obj/bootstrap.go +++ /dev/null @@ -1,34 +0,0 @@ -// 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. - -// +build !go1.8 - -package obj - -import ( - "reflect" - "sort" -) - -func SortSlice(slice interface{}, less func(i, j int) bool) { - val := reflect.ValueOf(slice) - tmp := reflect.New(val.Type().Elem()).Elem() - x := sliceByFn{val: val, tmp: tmp, less: less} - sort.Sort(x) -} - -type sliceByFn struct { - val reflect.Value - tmp reflect.Value - less func(i, j int) bool -} - -func (x sliceByFn) Len() int { return x.val.Len() } -func (x sliceByFn) Less(i, j int) bool { return x.less(i, j) } -func (x sliceByFn) Swap(i, j int) { - a, b := x.val.Index(i), x.val.Index(j) - x.tmp.Set(a) - a.Set(b) - b.Set(x.tmp) -} diff --git a/src/cmd/internal/obj/data.go b/src/cmd/internal/obj/data.go index 1c1681d128..12385b59a0 100644 --- a/src/cmd/internal/obj/data.go +++ b/src/cmd/internal/obj/data.go @@ -112,9 +112,7 @@ func (s *LSym) WriteInt(ctxt *Link, off int64, siz int, i int64) { } } -// WriteAddr writes an address of size siz into s at offset off. -// rsym and roff specify the relocation for the address. -func (s *LSym) WriteAddr(ctxt *Link, off int64, siz int, rsym *LSym, roff int64) { +func (s *LSym) writeAddr(ctxt *Link, off int64, siz int, rsym *LSym, roff int64, rtype objabi.RelocType) { // Allow 4-byte addresses for DWARF. if siz != ctxt.Arch.PtrSize && siz != 4 { ctxt.Diag("WriteAddr: bad address size %d in %s", siz, s.Name) @@ -127,10 +125,24 @@ func (s *LSym) WriteAddr(ctxt *Link, off int64, siz int, rsym *LSym, roff int64) } r.Siz = uint8(siz) r.Sym = rsym - r.Type = objabi.R_ADDR + r.Type = rtype r.Add = roff } +// WriteAddr writes an address of size siz into s at offset off. +// rsym and roff specify the relocation for the address. +func (s *LSym) WriteAddr(ctxt *Link, off int64, siz int, rsym *LSym, roff int64) { + s.writeAddr(ctxt, off, siz, rsym, roff, objabi.R_ADDR) +} + +// WriteCURelativeAddr writes a pointer-sized address into s at offset off. +// rsym and roff specify the relocation for the address which will be +// resolved by the linker to an offset from the DW_AT_low_pc attribute of +// the DWARF Compile Unit of rsym. +func (s *LSym) WriteCURelativeAddr(ctxt *Link, off int64, rsym *LSym, roff int64) { + s.writeAddr(ctxt, off, ctxt.Arch.PtrSize, rsym, roff, objabi.R_ADDRCUOFF) +} + // WriteOff writes a 4 byte offset to rsym+roff into s at offset off. // After linking the 4 bytes stored at s+off will be // rsym+roff-(start of section that s is in). diff --git a/src/cmd/internal/obj/link.go b/src/cmd/internal/obj/link.go index f506f60d06..3ea29a87a9 100644 --- a/src/cmd/internal/obj/link.go +++ b/src/cmd/internal/obj/link.go @@ -489,6 +489,10 @@ const ( // target of an inline during compilation AttrWasInlined + // TopFrame means that this function is an entry point and unwinders should not + // keep unwinding beyond this frame. + AttrTopFrame + // attrABIBase is the value at which the ABI is encoded in // Attribute. This must be last; all bits after this are // assumed to be an ABI value. @@ -511,6 +515,7 @@ func (a Attribute) NeedCtxt() bool { return a&AttrNeedCtxt != 0 } func (a Attribute) NoFrame() bool { return a&AttrNoFrame != 0 } func (a Attribute) Static() bool { return a&AttrStatic != 0 } func (a Attribute) WasInlined() bool { return a&AttrWasInlined != 0 } +func (a Attribute) TopFrame() bool { return a&AttrTopFrame != 0 } func (a *Attribute) Set(flag Attribute, value bool) { if value { @@ -544,6 +549,7 @@ var textAttrStrings = [...]struct { {bit: AttrNoFrame, s: "NOFRAME"}, {bit: AttrStatic, s: "STATIC"}, {bit: AttrWasInlined, s: ""}, + {bit: AttrTopFrame, s: "TOPFRAME"}, } // TextAttrString formats a for printing in as part of a TEXT prog. @@ -642,6 +648,7 @@ type Link struct { InParallel bool // parallel backend phase in effect Framepointer_enabled bool + UseBASEntries bool // Use Base Address Selection Entries in location lists and PC ranges // state for writing objects Text []*LSym diff --git a/src/cmd/internal/obj/mips/a.out.go b/src/cmd/internal/obj/mips/a.out.go index d2ae2f8c0b..026e8db76a 100644 --- a/src/cmd/internal/obj/mips/a.out.go +++ b/src/cmd/internal/obj/mips/a.out.go @@ -319,6 +319,7 @@ const ( ALL ALLV ALUI + AMADD AMOVB AMOVBU AMOVD @@ -334,6 +335,7 @@ const ( AMOVWF AMOVWL AMOVWR + AMSUB AMUL AMULD AMULF diff --git a/src/cmd/internal/obj/mips/anames.go b/src/cmd/internal/obj/mips/anames.go index d588d131bc..9a2e4f5703 100644 --- a/src/cmd/internal/obj/mips/anames.go +++ b/src/cmd/internal/obj/mips/anames.go @@ -46,6 +46,7 @@ var Anames = []string{ "LL", "LLV", "LUI", + "MADD", "MOVB", "MOVBU", "MOVD", @@ -61,6 +62,7 @@ var Anames = []string{ "MOVWF", "MOVWL", "MOVWR", + "MSUB", "MUL", "MULD", "MULF", diff --git a/src/cmd/internal/obj/mips/asm0.go b/src/cmd/internal/obj/mips/asm0.go index e4004be98d..77aa24a4f6 100644 --- a/src/cmd/internal/obj/mips/asm0.go +++ b/src/cmd/internal/obj/mips/asm0.go @@ -722,8 +722,6 @@ func (c *ctxt0) oplook(p *obj.Prog) *Optab { a2 = C_REG } - //print("oplook %P %d %d %d\n", p, a1, a2, a3); - ops := oprange[p.As&obj.AMask] c1 := &xcmp[a1] c3 := &xcmp[a3] @@ -959,6 +957,8 @@ func buildop(ctxt *obj.Link) { opset(ADIVU, r0) opset(AMULU, r0) opset(ADIV, r0) + opset(AMADD, r0) + opset(AMSUB, r0) case AMULV: opset(ADIVV, r0) @@ -1120,9 +1120,11 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { case 1: /* mov r1,r2 ==> OR r1,r0,r2 */ a := AOR if p.As == AMOVW && c.ctxt.Arch.Family == sys.MIPS64 { - a = AADDU // sign-extended to high 32 bits + // on MIPS64, most of the 32-bit instructions have unpredictable behavior, + // but SLL is special that the result is always sign-extended to 64-bit. + a = ASLL } - o1 = OP_RRR(c.oprrr(a), uint32(REGZERO), uint32(p.From.Reg), uint32(p.To.Reg)) + o1 = OP_RRR(c.oprrr(a), uint32(p.From.Reg), uint32(REGZERO), uint32(p.To.Reg)) case 2: /* add/sub r1,[r2],r3 */ r := int(p.Reg) @@ -1275,7 +1277,7 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { r = REGZERO } /* only use 10 bits of trap code */ - o1 = OP_IRR(c.opirr(p.As), (uint32(v)&0x3FF)<<6, uint32(p.Reg), uint32(p.To.Reg)) + o1 = OP_IRR(c.opirr(p.As), (uint32(v)&0x3FF)<<6, uint32(r), uint32(p.To.Reg)) case 16: /* sll $c,[r1],r2 */ v := c.regoff(&p.From) @@ -1783,6 +1785,10 @@ func (c *ctxt0) oprrr(a obj.As) uint32 { return SP(3, 4) | OP(4, 1) case ACLZ: return SP(3, 4) | OP(4, 0) + case AMADD: + return SP(3, 4) | OP(0, 0) + case AMSUB: + return SP(3, 4) | OP(0, 4) } if a < 0 { diff --git a/src/cmd/internal/obj/objfile.go b/src/cmd/internal/obj/objfile.go index c6d2de4273..62d41e11eb 100644 --- a/src/cmd/internal/obj/objfile.go +++ b/src/cmd/internal/obj/objfile.go @@ -15,6 +15,7 @@ import ( "log" "path/filepath" "sort" + "strings" "sync" ) @@ -33,6 +34,8 @@ type objWriter struct { nAutom int nFuncdata int nFile int + + pkgpath string // the package import path (escaped), "" if unknown } func (w *objWriter) addLengths(s *LSym) { @@ -71,15 +74,16 @@ func (w *objWriter) writeLengths() { w.writeInt(int64(w.nFile)) } -func newObjWriter(ctxt *Link, b *bufio.Writer) *objWriter { +func newObjWriter(ctxt *Link, b *bufio.Writer, pkgpath string) *objWriter { return &objWriter{ - ctxt: ctxt, - wr: b, + ctxt: ctxt, + wr: b, + pkgpath: objabi.PathToPrefix(pkgpath), } } -func WriteObjFile(ctxt *Link, b *bufio.Writer) { - w := newObjWriter(ctxt, b) +func WriteObjFile(ctxt *Link, b *bufio.Writer, pkgpath string) { + w := newObjWriter(ctxt, b, pkgpath) // Magic header w.wr.WriteString("\x00go112ld") @@ -104,7 +108,7 @@ func WriteObjFile(ctxt *Link, b *bufio.Writer) { // As they are created during Progedit, two symbols can be switched between // two different compilations. Therefore, BuildID will be different. // TODO: find a better place and optimize to only sort TOC symbols - SortSlice(ctxt.Data, func(i, j int) bool { + sort.Slice(ctxt.Data, func(i, j int) bool { return ctxt.Data[i].Name < ctxt.Data[j].Name }) } @@ -170,6 +174,10 @@ func (w *objWriter) writeRef(s *LSym, isPath bool) { w.wr.WriteByte(symPrefix) if isPath { w.writeString(filepath.ToSlash(s.Name)) + } else if w.pkgpath != "" { + // w.pkgpath is already escaped. + n := strings.Replace(s.Name, "\"\".", w.pkgpath+".", -1) + w.writeString(n) } else { w.writeString(s.Name) } @@ -230,6 +238,9 @@ func (w *objWriter) writeSymDebug(s *LSym) { if s.NoSplit() { fmt.Fprintf(ctxt.Bso, "nosplit ") } + if s.TopFrame() { + fmt.Fprintf(ctxt.Bso, "topframe ") + } fmt.Fprintf(ctxt.Bso, "size=%d", s.Size) if s.Type == objabi.STEXT { fmt.Fprintf(ctxt.Bso, " args=%#x locals=%#x", uint64(s.Func.Args), uint64(s.Func.Locals)) @@ -252,7 +263,7 @@ func (w *objWriter) writeSymDebug(s *LSym) { for i := 0; i < len(s.P); i += 16 { fmt.Fprintf(ctxt.Bso, "\t%#04x", uint(i)) j := i - for j = i; j < i+16 && j < len(s.P); j++ { + for ; j < i+16 && j < len(s.P); j++ { fmt.Fprintf(ctxt.Bso, " %02x", s.P[j]) } for ; j < i+16; j++ { @@ -342,6 +353,9 @@ func (w *objWriter) writeSym(s *LSym) { if ctxt.Flag_shared { flags |= 1 << 3 } + if s.TopFrame() { + flags |= 1 << 4 + } w.writeInt(flags) w.writeInt(int64(len(s.Func.Autom))) for _, a := range s.Func.Autom { @@ -465,6 +479,11 @@ func (c dwCtxt) AddAddress(s dwarf.Sym, data interface{}, value int64) { ls.WriteInt(c.Link, ls.Size, size, value) } } +func (c dwCtxt) AddCURelativeAddress(s dwarf.Sym, data interface{}, value int64) { + ls := s.(*LSym) + rsym := data.(*LSym) + ls.WriteCURelativeAddr(c.Link, ls.Size, rsym, value) +} func (c dwCtxt) AddSectionOffset(s dwarf.Sym, size int, t interface{}, ofs int64) { panic("should be used only in the linker") } @@ -572,18 +591,19 @@ func (ctxt *Link) populateDWARF(curfn interface{}, s *LSym, myimportpath string) dwctxt := dwCtxt{ctxt} filesym := ctxt.fileSymbol(s) fnstate := &dwarf.FnState{ - Name: s.Name, - Importpath: myimportpath, - Info: info, - Filesym: filesym, - Loc: loc, - Ranges: ranges, - Absfn: absfunc, - StartPC: s, - Size: s.Size, - External: !s.Static(), - Scopes: scopes, - InlCalls: inlcalls, + Name: s.Name, + Importpath: myimportpath, + Info: info, + Filesym: filesym, + Loc: loc, + Ranges: ranges, + Absfn: absfunc, + StartPC: s, + Size: s.Size, + External: !s.Static(), + Scopes: scopes, + InlCalls: inlcalls, + UseBASEntries: ctxt.UseBASEntries, } if absfunc != nil { err = dwarf.PutAbstractFunc(dwctxt, fnstate) @@ -624,13 +644,14 @@ func (ctxt *Link) DwarfAbstractFunc(curfn interface{}, s *LSym, myimportpath str dwctxt := dwCtxt{ctxt} filesym := ctxt.fileSymbol(s) fnstate := dwarf.FnState{ - Name: s.Name, - Importpath: myimportpath, - Info: absfn, - Filesym: filesym, - Absfn: absfn, - External: !s.Static(), - Scopes: scopes, + Name: s.Name, + Importpath: myimportpath, + Info: absfn, + Filesym: filesym, + Absfn: absfn, + External: !s.Static(), + Scopes: scopes, + UseBASEntries: ctxt.UseBASEntries, } if err := dwarf.PutAbstractFunc(dwctxt, &fnstate); err != nil { ctxt.Diag("emitting DWARF for %s failed: %v", s.Name, err) diff --git a/src/cmd/internal/obj/pass.go b/src/cmd/internal/obj/pass.go index 87de6a5fd1..0c401710f6 100644 --- a/src/cmd/internal/obj/pass.go +++ b/src/cmd/internal/obj/pass.go @@ -141,10 +141,7 @@ func linkpatch(ctxt *Link, sym *LSym, newprog ProgAlloc) { continue } q := sym.Func.Text - for q != nil { - if p.To.Offset == q.Pc { - break - } + for q != nil && p.To.Offset != q.Pc { if q.Forwd != nil && p.To.Offset >= q.Forwd.Pc { q = q.Forwd } else { diff --git a/src/cmd/internal/obj/pcln.go b/src/cmd/internal/obj/pcln.go index 84dd494930..e7f340595f 100644 --- a/src/cmd/internal/obj/pcln.go +++ b/src/cmd/internal/obj/pcln.go @@ -6,6 +6,7 @@ package obj import ( "cmd/internal/src" + "encoding/binary" "log" ) @@ -14,13 +15,6 @@ const ( EpilogueBegin // overload "is_stmt" to include epilogue_end ) -func addvarint(d *Pcdata, v uint32) { - for ; v >= 0x80; v >>= 7 { - d.P = append(d.P, uint8(v|0x80)) - } - d.P = append(d.P, uint8(v)) -} - // funcpctab writes to dst a pc-value table mapping the code in func to the values // returned by valfunc parameterized by arg. The invocation of valfunc to update the // current value is, for each p, @@ -52,8 +46,8 @@ func funcpctab(ctxt *Link, dst *Pcdata, func_ *LSym, desc string, valfunc func(* ctxt.Logf("%6x %6d %v\n", uint64(pc), val, func_.Func.Text) } + buf := make([]byte, binary.MaxVarintLen32) started := false - var delta uint32 for p := func_.Func.Text; p != nil; p = p.Link { // Update val. If it's not changing, keep going. val = valfunc(ctxt, func_, val, p, 0, arg) @@ -97,17 +91,15 @@ func funcpctab(ctxt *Link, dst *Pcdata, func_ *LSym, desc string, valfunc func(* } if started { - addvarint(dst, uint32((p.Pc-pc)/int64(ctxt.Arch.MinLC))) + pcdelta := (p.Pc - pc) / int64(ctxt.Arch.MinLC) + n := binary.PutUvarint(buf, uint64(pcdelta)) + dst.P = append(dst.P, buf[:n]...) pc = p.Pc } - delta = uint32(val) - uint32(oldval) - if delta>>31 != 0 { - delta = 1 | ^(delta << 1) - } else { - delta <<= 1 - } - addvarint(dst, delta) + delta := val - oldval + n := binary.PutVarint(buf, int64(delta)) + dst.P = append(dst.P, buf[:n]...) oldval = val started = true val = valfunc(ctxt, func_, val, p, 1, arg) @@ -117,8 +109,14 @@ func funcpctab(ctxt *Link, dst *Pcdata, func_ *LSym, desc string, valfunc func(* if dbg { ctxt.Logf("%6x done\n", uint64(func_.Func.Text.Pc+func_.Size)) } - addvarint(dst, uint32((func_.Size-pc)/int64(ctxt.Arch.MinLC))) - addvarint(dst, 0) // terminator + v := (func_.Size - pc) / int64(ctxt.Arch.MinLC) + if v < 0 { + ctxt.Diag("negative pc offset: %v", v) + } + n := binary.PutUvarint(buf, uint64(v)) + dst.P = append(dst.P, buf[:n]...) + // add terminating varint-encoded 0, which is just 0 + dst.P = append(dst.P, 0) } if dbg { diff --git a/src/cmd/internal/obj/plist.go b/src/cmd/internal/obj/plist.go index 9d376f739f..303fa469e4 100644 --- a/src/cmd/internal/obj/plist.go +++ b/src/cmd/internal/obj/plist.go @@ -105,6 +105,9 @@ func Flushplist(ctxt *Link, plist *Plist, newprog ProgAlloc, myimportpath string linkpatch(ctxt, s, newprog) ctxt.Arch.Preprocess(ctxt, s, newprog) ctxt.Arch.Assemble(ctxt, s, newprog) + if ctxt.Errors > 0 { + continue + } linkpcln(ctxt, s) ctxt.populateDWARF(plist.Curfn, s, myimportpath) } @@ -129,6 +132,7 @@ func (ctxt *Link) InitTextSym(s *LSym, flag int) { s.Set(AttrWrapper, flag&WRAPPER != 0) s.Set(AttrNeedCtxt, flag&NEEDCTXT != 0) s.Set(AttrNoFrame, flag&NOFRAME != 0) + s.Set(AttrTopFrame, flag&TOPFRAME != 0) s.Type = objabi.STEXT ctxt.Text = append(ctxt.Text, s) diff --git a/src/cmd/internal/obj/ppc64/a.out.go b/src/cmd/internal/obj/ppc64/a.out.go index 6b248d5c36..c637d54a50 100644 --- a/src/cmd/internal/obj/ppc64/a.out.go +++ b/src/cmd/internal/obj/ppc64/a.out.go @@ -749,6 +749,10 @@ const ( APOPCNTD APOPCNTW APOPCNTB + ACNTTZW + ACNTTZWCC + ACNTTZD + ACNTTZDCC ACOPY APASTECC ADARN diff --git a/src/cmd/internal/obj/ppc64/anames.go b/src/cmd/internal/obj/ppc64/anames.go index fb934e96f9..5a459ee1ce 100644 --- a/src/cmd/internal/obj/ppc64/anames.go +++ b/src/cmd/internal/obj/ppc64/anames.go @@ -341,6 +341,10 @@ var Anames = []string{ "POPCNTD", "POPCNTW", "POPCNTB", + "CNTTZW", + "CNTTZWCC", + "CNTTZD", + "CNTTZDCC", "COPY", "PASTECC", "DARN", diff --git a/src/cmd/internal/obj/ppc64/asm9.go b/src/cmd/internal/obj/ppc64/asm9.go index a2ea492710..a7ac0ff0c0 100644 --- a/src/cmd/internal/obj/ppc64/asm9.go +++ b/src/cmd/internal/obj/ppc64/asm9.go @@ -389,9 +389,10 @@ var optab = []Optab{ {AMOVWZ, C_REG, C_NONE, C_NONE, C_MSR, 54, 4, 0}, /* mtmsr */ /* Other ISA 2.05+ instructions */ - {APOPCNTD, C_REG, C_NONE, C_NONE, C_REG, 93, 4, 0}, /* population count, x-form */ - {ACMPB, C_REG, C_REG, C_NONE, C_REG, 92, 4, 0}, /* compare byte, x-form */ - {ACMPEQB, C_REG, C_REG, C_NONE, C_CREG, 92, 4, 0}, /* compare equal byte, x-form */ + {APOPCNTD, C_REG, C_NONE, C_NONE, C_REG, 93, 4, 0}, /* population count, x-form */ + {ACMPB, C_REG, C_REG, C_NONE, C_REG, 92, 4, 0}, /* compare byte, x-form */ + {ACMPEQB, C_REG, C_REG, C_NONE, C_CREG, 92, 4, 0}, /* compare equal byte, x-form, ISA 3.0 */ + {ACMPEQB, C_REG, C_NONE, C_NONE, C_REG, 70, 4, 0}, {AFTDIV, C_FREG, C_FREG, C_NONE, C_SCON, 92, 4, 0}, /* floating test for sw divide, x-form */ {AFTSQRT, C_FREG, C_NONE, C_NONE, C_SCON, 93, 4, 0}, /* floating test for sw square root, x-form */ {ACOPY, C_REG, C_NONE, C_NONE, C_REG, 92, 4, 0}, /* copy/paste facility, x-form */ @@ -1304,9 +1305,13 @@ func buildop(ctxt *obj.Link) { opset(ADIVDUVCC, r0) opset(ADIVDUCC, r0) - case APOPCNTD: + case APOPCNTD: /* popcntd, popcntw, popcntb, cnttzw, cnttzd */ opset(APOPCNTW, r0) opset(APOPCNTB, r0) + opset(ACNTTZW, r0) + opset(ACNTTZWCC, r0) + opset(ACNTTZD, r0) + opset(ACNTTZDCC, r0) case ACOPY: /* copy, paste. */ opset(APASTECC, r0) @@ -3555,22 +3560,22 @@ func (c *ctxt9) asmout(p *obj.Prog, o *Optab, out []uint32) { if REG_V0 <= xt && xt <= REG_V31 { /* Convert V0-V31 to VS32-VS63 */ xt = xt + 64 - o1 = AOP_XX1(c.oprrr(p.As), uint32(p.To.Reg), uint32(p.From.Reg), uint32(p.Reg)) + o1 = AOP_XX1(c.oprrr(p.As), uint32(xt), uint32(p.From.Reg), uint32(p.Reg)) } else if REG_F0 <= xt && xt <= REG_F31 { /* Convert F0-F31 to VS0-VS31 */ xt = xt + 64 - o1 = AOP_XX1(c.oprrr(p.As), uint32(p.To.Reg), uint32(p.From.Reg), uint32(p.Reg)) + o1 = AOP_XX1(c.oprrr(p.As), uint32(xt), uint32(p.From.Reg), uint32(p.Reg)) } else if REG_VS0 <= xt && xt <= REG_VS63 { - o1 = AOP_XX1(c.oprrr(p.As), uint32(p.To.Reg), uint32(p.From.Reg), uint32(p.Reg)) + o1 = AOP_XX1(c.oprrr(p.As), uint32(xt), uint32(p.From.Reg), uint32(p.Reg)) } else if REG_V0 <= xs && xs <= REG_V31 { /* Likewise for XS */ xs = xs + 64 - o1 = AOP_XX1(c.oprrr(p.As), uint32(p.From.Reg), uint32(p.To.Reg), uint32(p.Reg)) + o1 = AOP_XX1(c.oprrr(p.As), uint32(xs), uint32(p.To.Reg), uint32(p.Reg)) } else if REG_F0 <= xs && xs <= REG_F31 { xs = xs + 64 - o1 = AOP_XX1(c.oprrr(p.As), uint32(p.From.Reg), uint32(p.To.Reg), uint32(p.Reg)) + o1 = AOP_XX1(c.oprrr(p.As), uint32(xs), uint32(p.To.Reg), uint32(p.Reg)) } else if REG_VS0 <= xs && xs <= REG_VS63 { - o1 = AOP_XX1(c.oprrr(p.As), uint32(p.From.Reg), uint32(p.To.Reg), uint32(p.Reg)) + o1 = AOP_XX1(c.oprrr(p.As), uint32(xs), uint32(p.To.Reg), uint32(p.Reg)) } case 89: /* VSX instructions, XX2-form */ @@ -3760,6 +3765,8 @@ func (c *ctxt9) oprrr(a obj.As) uint32 { return OPVCC(31, 32, 0, 0) case ACMPB: return OPVCC(31, 508, 0, 0) /* cmpb - v2.05 */ + case ACMPEQB: + return OPVCC(31, 224, 0, 0) /* cmpeqb - v3.00 */ case ACNTLZW: return OPVCC(31, 26, 0, 0) @@ -4118,6 +4125,14 @@ func (c *ctxt9) oprrr(a obj.As) uint32 { return OPVCC(31, 378, 0, 0) /* popcntw - v2.06 */ case APOPCNTB: return OPVCC(31, 122, 0, 0) /* popcntb - v2.02 */ + case ACNTTZW: + return OPVCC(31, 538, 0, 0) /* cnttzw - v3.00 */ + case ACNTTZWCC: + return OPVCC(31, 538, 0, 1) /* cnttzw. - v3.00 */ + case ACNTTZD: + return OPVCC(31, 570, 0, 0) /* cnttzd - v3.00 */ + case ACNTTZDCC: + return OPVCC(31, 570, 0, 1) /* cnttzd. - v3.00 */ case ARFI: return OPVCC(19, 50, 0, 0) diff --git a/src/cmd/internal/obj/s390x/a.out.go b/src/cmd/internal/obj/s390x/a.out.go index af321f6131..d11a3834b0 100644 --- a/src/cmd/internal/obj/s390x/a.out.go +++ b/src/cmd/internal/obj/s390x/a.out.go @@ -289,6 +289,20 @@ const ( ASRAD ARLL ARLLG + ARNSBG + ARXSBG + AROSBG + ARNSBGT + ARXSBGT + AROSBGT + ARISBG + ARISBGN + ARISBGZ + ARISBGNZ + ARISBHG + ARISBLG + ARISBHGZ + ARISBLGZ // floating point AFABS @@ -366,6 +380,9 @@ const ( ATMLH ATMLL + // insert program mask + AIPM + // compare and swap ACS ACSG diff --git a/src/cmd/internal/obj/s390x/anames.go b/src/cmd/internal/obj/s390x/anames.go index 9cea9f962d..a9bdfcafe9 100644 --- a/src/cmd/internal/obj/s390x/anames.go +++ b/src/cmd/internal/obj/s390x/anames.go @@ -60,6 +60,20 @@ var Anames = []string{ "SRAD", "RLL", "RLLG", + "RNSBG", + "RXSBG", + "ROSBG", + "RNSBGT", + "RXSBGT", + "ROSBGT", + "RISBG", + "RISBGN", + "RISBGZ", + "RISBGNZ", + "RISBHG", + "RISBLG", + "RISBHGZ", + "RISBLGZ", "FABS", "FADD", "FADDS", @@ -120,6 +134,7 @@ var Anames = []string{ "TMHL", "TMLH", "TMLL", + "IPM", "CS", "CSG", "SYNC", diff --git a/src/cmd/internal/obj/s390x/asmz.go b/src/cmd/internal/obj/s390x/asmz.go index 7d49103be6..2b187edca5 100644 --- a/src/cmd/internal/obj/s390x/asmz.go +++ b/src/cmd/internal/obj/s390x/asmz.go @@ -32,6 +32,7 @@ package s390x import ( "cmd/internal/obj" "cmd/internal/objabi" + "fmt" "log" "math" "sort" @@ -55,359 +56,363 @@ const ( ) type Optab struct { - as obj.As // opcode - a1 uint8 // From - a2 uint8 // Reg - a3 uint8 // From3 - a4 uint8 // To - type_ int8 - param int16 // REGSP for auto variables + as obj.As // opcode + i uint8 // handler index + a1 uint8 // From + a2 uint8 // Reg + a3 uint8 // RestArgs[0] + a4 uint8 // RestArgs[1] + a5 uint8 // RestArgs[2] + a6 uint8 // To } var optab = []Optab{ - // instruction, From, Reg, From3, To, type, param - Optab{obj.ATEXT, C_ADDR, C_NONE, C_NONE, C_TEXTSIZE, 0, 0}, - Optab{obj.ATEXT, C_ADDR, C_NONE, C_LCON, C_TEXTSIZE, 0, 0}, + // zero-length instructions + {i: 0, as: obj.ATEXT, a1: C_ADDR, a6: C_TEXTSIZE}, + {i: 0, as: obj.ATEXT, a1: C_ADDR, a3: C_LCON, a6: C_TEXTSIZE}, + {i: 0, as: obj.APCDATA, a1: C_LCON, a6: C_LCON}, + {i: 0, as: obj.AFUNCDATA, a1: C_SCON, a6: C_ADDR}, + {i: 0, as: obj.ANOP}, + {i: 0, as: obj.ANOP, a1: C_SAUTO}, // move register - Optab{AMOVD, C_REG, C_NONE, C_NONE, C_REG, 1, 0}, - Optab{AMOVB, C_REG, C_NONE, C_NONE, C_REG, 1, 0}, - Optab{AMOVBZ, C_REG, C_NONE, C_NONE, C_REG, 1, 0}, - Optab{AMOVW, C_REG, C_NONE, C_NONE, C_REG, 1, 0}, - Optab{AMOVWZ, C_REG, C_NONE, C_NONE, C_REG, 1, 0}, - Optab{AFMOVD, C_FREG, C_NONE, C_NONE, C_FREG, 1, 0}, - Optab{AMOVDBR, C_REG, C_NONE, C_NONE, C_REG, 1, 0}, + {i: 1, as: AMOVD, a1: C_REG, a6: C_REG}, + {i: 1, as: AMOVB, a1: C_REG, a6: C_REG}, + {i: 1, as: AMOVBZ, a1: C_REG, a6: C_REG}, + {i: 1, as: AMOVW, a1: C_REG, a6: C_REG}, + {i: 1, as: AMOVWZ, a1: C_REG, a6: C_REG}, + {i: 1, as: AFMOVD, a1: C_FREG, a6: C_FREG}, + {i: 1, as: AMOVDBR, a1: C_REG, a6: C_REG}, // load constant - Optab{AMOVD, C_LACON, C_NONE, C_NONE, C_REG, 26, REGSP}, - Optab{AMOVW, C_LACON, C_NONE, C_NONE, C_REG, 26, REGSP}, - Optab{AMOVWZ, C_LACON, C_NONE, C_NONE, C_REG, 26, REGSP}, - Optab{AMOVD, C_DCON, C_NONE, C_NONE, C_REG, 3, 0}, - Optab{AMOVW, C_DCON, C_NONE, C_NONE, C_REG, 3, 0}, - Optab{AMOVWZ, C_DCON, C_NONE, C_NONE, C_REG, 3, 0}, - Optab{AMOVB, C_DCON, C_NONE, C_NONE, C_REG, 3, 0}, - Optab{AMOVBZ, C_DCON, C_NONE, C_NONE, C_REG, 3, 0}, + {i: 26, as: AMOVD, a1: C_LACON, a6: C_REG}, + {i: 26, as: AMOVW, a1: C_LACON, a6: C_REG}, + {i: 26, as: AMOVWZ, a1: C_LACON, a6: C_REG}, + {i: 3, as: AMOVD, a1: C_DCON, a6: C_REG}, + {i: 3, as: AMOVW, a1: C_DCON, a6: C_REG}, + {i: 3, as: AMOVWZ, a1: C_DCON, a6: C_REG}, + {i: 3, as: AMOVB, a1: C_DCON, a6: C_REG}, + {i: 3, as: AMOVBZ, a1: C_DCON, a6: C_REG}, // store constant - Optab{AMOVD, C_SCON, C_NONE, C_NONE, C_LAUTO, 72, REGSP}, - Optab{AMOVD, C_ADDCON, C_NONE, C_NONE, C_LAUTO, 72, REGSP}, - Optab{AMOVW, C_SCON, C_NONE, C_NONE, C_LAUTO, 72, REGSP}, - Optab{AMOVW, C_ADDCON, C_NONE, C_NONE, C_LAUTO, 72, REGSP}, - Optab{AMOVWZ, C_SCON, C_NONE, C_NONE, C_LAUTO, 72, REGSP}, - Optab{AMOVWZ, C_ADDCON, C_NONE, C_NONE, C_LAUTO, 72, REGSP}, - Optab{AMOVB, C_SCON, C_NONE, C_NONE, C_LAUTO, 72, REGSP}, - Optab{AMOVB, C_ADDCON, C_NONE, C_NONE, C_LAUTO, 72, REGSP}, - Optab{AMOVBZ, C_SCON, C_NONE, C_NONE, C_LAUTO, 72, REGSP}, - Optab{AMOVBZ, C_ADDCON, C_NONE, C_NONE, C_LAUTO, 72, REGSP}, - Optab{AMOVD, C_SCON, C_NONE, C_NONE, C_LOREG, 72, 0}, - Optab{AMOVD, C_ADDCON, C_NONE, C_NONE, C_LOREG, 72, 0}, - Optab{AMOVW, C_SCON, C_NONE, C_NONE, C_LOREG, 72, 0}, - Optab{AMOVW, C_ADDCON, C_NONE, C_NONE, C_LOREG, 72, 0}, - Optab{AMOVWZ, C_SCON, C_NONE, C_NONE, C_LOREG, 72, 0}, - Optab{AMOVWZ, C_ADDCON, C_NONE, C_NONE, C_LOREG, 72, 0}, - Optab{AMOVB, C_SCON, C_NONE, C_NONE, C_LOREG, 72, 0}, - Optab{AMOVB, C_ADDCON, C_NONE, C_NONE, C_LOREG, 72, 0}, - Optab{AMOVBZ, C_SCON, C_NONE, C_NONE, C_LOREG, 72, 0}, - Optab{AMOVBZ, C_ADDCON, C_NONE, C_NONE, C_LOREG, 72, 0}, + {i: 72, as: AMOVD, a1: C_SCON, a6: C_LAUTO}, + {i: 72, as: AMOVD, a1: C_ADDCON, a6: C_LAUTO}, + {i: 72, as: AMOVW, a1: C_SCON, a6: C_LAUTO}, + {i: 72, as: AMOVW, a1: C_ADDCON, a6: C_LAUTO}, + {i: 72, as: AMOVWZ, a1: C_SCON, a6: C_LAUTO}, + {i: 72, as: AMOVWZ, a1: C_ADDCON, a6: C_LAUTO}, + {i: 72, as: AMOVB, a1: C_SCON, a6: C_LAUTO}, + {i: 72, as: AMOVB, a1: C_ADDCON, a6: C_LAUTO}, + {i: 72, as: AMOVBZ, a1: C_SCON, a6: C_LAUTO}, + {i: 72, as: AMOVBZ, a1: C_ADDCON, a6: C_LAUTO}, + {i: 72, as: AMOVD, a1: C_SCON, a6: C_LOREG}, + {i: 72, as: AMOVD, a1: C_ADDCON, a6: C_LOREG}, + {i: 72, as: AMOVW, a1: C_SCON, a6: C_LOREG}, + {i: 72, as: AMOVW, a1: C_ADDCON, a6: C_LOREG}, + {i: 72, as: AMOVWZ, a1: C_SCON, a6: C_LOREG}, + {i: 72, as: AMOVWZ, a1: C_ADDCON, a6: C_LOREG}, + {i: 72, as: AMOVB, a1: C_SCON, a6: C_LOREG}, + {i: 72, as: AMOVB, a1: C_ADDCON, a6: C_LOREG}, + {i: 72, as: AMOVBZ, a1: C_SCON, a6: C_LOREG}, + {i: 72, as: AMOVBZ, a1: C_ADDCON, a6: C_LOREG}, // store - Optab{AMOVD, C_REG, C_NONE, C_NONE, C_LAUTO, 35, REGSP}, - Optab{AMOVW, C_REG, C_NONE, C_NONE, C_LAUTO, 35, REGSP}, - Optab{AMOVWZ, C_REG, C_NONE, C_NONE, C_LAUTO, 35, REGSP}, - Optab{AMOVBZ, C_REG, C_NONE, C_NONE, C_LAUTO, 35, REGSP}, - Optab{AMOVB, C_REG, C_NONE, C_NONE, C_LAUTO, 35, REGSP}, - Optab{AMOVDBR, C_REG, C_NONE, C_NONE, C_LAUTO, 35, REGSP}, - Optab{AMOVHBR, C_REG, C_NONE, C_NONE, C_LAUTO, 35, REGSP}, - Optab{AMOVD, C_REG, C_NONE, C_NONE, C_LOREG, 35, 0}, - Optab{AMOVW, C_REG, C_NONE, C_NONE, C_LOREG, 35, 0}, - Optab{AMOVWZ, C_REG, C_NONE, C_NONE, C_LOREG, 35, 0}, - Optab{AMOVBZ, C_REG, C_NONE, C_NONE, C_LOREG, 35, 0}, - Optab{AMOVB, C_REG, C_NONE, C_NONE, C_LOREG, 35, 0}, - Optab{AMOVDBR, C_REG, C_NONE, C_NONE, C_LOREG, 35, 0}, - Optab{AMOVHBR, C_REG, C_NONE, C_NONE, C_LOREG, 35, 0}, - Optab{AMOVD, C_REG, C_NONE, C_NONE, C_ADDR, 74, 0}, - Optab{AMOVW, C_REG, C_NONE, C_NONE, C_ADDR, 74, 0}, - Optab{AMOVWZ, C_REG, C_NONE, C_NONE, C_ADDR, 74, 0}, - Optab{AMOVBZ, C_REG, C_NONE, C_NONE, C_ADDR, 74, 0}, - Optab{AMOVB, C_REG, C_NONE, C_NONE, C_ADDR, 74, 0}, + {i: 35, as: AMOVD, a1: C_REG, a6: C_LAUTO}, + {i: 35, as: AMOVW, a1: C_REG, a6: C_LAUTO}, + {i: 35, as: AMOVWZ, a1: C_REG, a6: C_LAUTO}, + {i: 35, as: AMOVBZ, a1: C_REG, a6: C_LAUTO}, + {i: 35, as: AMOVB, a1: C_REG, a6: C_LAUTO}, + {i: 35, as: AMOVDBR, a1: C_REG, a6: C_LAUTO}, + {i: 35, as: AMOVHBR, a1: C_REG, a6: C_LAUTO}, + {i: 35, as: AMOVD, a1: C_REG, a6: C_LOREG}, + {i: 35, as: AMOVW, a1: C_REG, a6: C_LOREG}, + {i: 35, as: AMOVWZ, a1: C_REG, a6: C_LOREG}, + {i: 35, as: AMOVBZ, a1: C_REG, a6: C_LOREG}, + {i: 35, as: AMOVB, a1: C_REG, a6: C_LOREG}, + {i: 35, as: AMOVDBR, a1: C_REG, a6: C_LOREG}, + {i: 35, as: AMOVHBR, a1: C_REG, a6: C_LOREG}, + {i: 74, as: AMOVD, a1: C_REG, a6: C_ADDR}, + {i: 74, as: AMOVW, a1: C_REG, a6: C_ADDR}, + {i: 74, as: AMOVWZ, a1: C_REG, a6: C_ADDR}, + {i: 74, as: AMOVBZ, a1: C_REG, a6: C_ADDR}, + {i: 74, as: AMOVB, a1: C_REG, a6: C_ADDR}, // load - Optab{AMOVD, C_LAUTO, C_NONE, C_NONE, C_REG, 36, REGSP}, - Optab{AMOVW, C_LAUTO, C_NONE, C_NONE, C_REG, 36, REGSP}, - Optab{AMOVWZ, C_LAUTO, C_NONE, C_NONE, C_REG, 36, REGSP}, - Optab{AMOVBZ, C_LAUTO, C_NONE, C_NONE, C_REG, 36, REGSP}, - Optab{AMOVB, C_LAUTO, C_NONE, C_NONE, C_REG, 36, REGSP}, - Optab{AMOVDBR, C_LAUTO, C_NONE, C_NONE, C_REG, 36, REGSP}, - Optab{AMOVHBR, C_LAUTO, C_NONE, C_NONE, C_REG, 36, REGSP}, - Optab{AMOVD, C_LOREG, C_NONE, C_NONE, C_REG, 36, 0}, - Optab{AMOVW, C_LOREG, C_NONE, C_NONE, C_REG, 36, 0}, - Optab{AMOVWZ, C_LOREG, C_NONE, C_NONE, C_REG, 36, 0}, - Optab{AMOVBZ, C_LOREG, C_NONE, C_NONE, C_REG, 36, 0}, - Optab{AMOVB, C_LOREG, C_NONE, C_NONE, C_REG, 36, 0}, - Optab{AMOVDBR, C_LOREG, C_NONE, C_NONE, C_REG, 36, 0}, - Optab{AMOVHBR, C_LOREG, C_NONE, C_NONE, C_REG, 36, 0}, - Optab{AMOVD, C_ADDR, C_NONE, C_NONE, C_REG, 75, 0}, - Optab{AMOVW, C_ADDR, C_NONE, C_NONE, C_REG, 75, 0}, - Optab{AMOVWZ, C_ADDR, C_NONE, C_NONE, C_REG, 75, 0}, - Optab{AMOVBZ, C_ADDR, C_NONE, C_NONE, C_REG, 75, 0}, - Optab{AMOVB, C_ADDR, C_NONE, C_NONE, C_REG, 75, 0}, + {i: 36, as: AMOVD, a1: C_LAUTO, a6: C_REG}, + {i: 36, as: AMOVW, a1: C_LAUTO, a6: C_REG}, + {i: 36, as: AMOVWZ, a1: C_LAUTO, a6: C_REG}, + {i: 36, as: AMOVBZ, a1: C_LAUTO, a6: C_REG}, + {i: 36, as: AMOVB, a1: C_LAUTO, a6: C_REG}, + {i: 36, as: AMOVDBR, a1: C_LAUTO, a6: C_REG}, + {i: 36, as: AMOVHBR, a1: C_LAUTO, a6: C_REG}, + {i: 36, as: AMOVD, a1: C_LOREG, a6: C_REG}, + {i: 36, as: AMOVW, a1: C_LOREG, a6: C_REG}, + {i: 36, as: AMOVWZ, a1: C_LOREG, a6: C_REG}, + {i: 36, as: AMOVBZ, a1: C_LOREG, a6: C_REG}, + {i: 36, as: AMOVB, a1: C_LOREG, a6: C_REG}, + {i: 36, as: AMOVDBR, a1: C_LOREG, a6: C_REG}, + {i: 36, as: AMOVHBR, a1: C_LOREG, a6: C_REG}, + {i: 75, as: AMOVD, a1: C_ADDR, a6: C_REG}, + {i: 75, as: AMOVW, a1: C_ADDR, a6: C_REG}, + {i: 75, as: AMOVWZ, a1: C_ADDR, a6: C_REG}, + {i: 75, as: AMOVBZ, a1: C_ADDR, a6: C_REG}, + {i: 75, as: AMOVB, a1: C_ADDR, a6: C_REG}, // interlocked load and op - Optab{ALAAG, C_REG, C_REG, C_NONE, C_LOREG, 99, 0}, + {i: 99, as: ALAAG, a1: C_REG, a2: C_REG, a6: C_LOREG}, // integer arithmetic - Optab{AADD, C_REG, C_REG, C_NONE, C_REG, 2, 0}, - Optab{AADD, C_REG, C_NONE, C_NONE, C_REG, 2, 0}, - Optab{AADD, C_LCON, C_REG, C_NONE, C_REG, 22, 0}, - Optab{AADD, C_LCON, C_NONE, C_NONE, C_REG, 22, 0}, - Optab{AADD, C_LOREG, C_NONE, C_NONE, C_REG, 12, 0}, - Optab{AADD, C_LAUTO, C_NONE, C_NONE, C_REG, 12, REGSP}, - Optab{ASUB, C_LCON, C_REG, C_NONE, C_REG, 21, 0}, - Optab{ASUB, C_LCON, C_NONE, C_NONE, C_REG, 21, 0}, - Optab{ASUB, C_LOREG, C_NONE, C_NONE, C_REG, 12, 0}, - Optab{ASUB, C_LAUTO, C_NONE, C_NONE, C_REG, 12, REGSP}, - Optab{AMULHD, C_REG, C_NONE, C_NONE, C_REG, 4, 0}, - Optab{AMULHD, C_REG, C_REG, C_NONE, C_REG, 4, 0}, - Optab{ADIVW, C_REG, C_REG, C_NONE, C_REG, 2, 0}, - Optab{ADIVW, C_REG, C_NONE, C_NONE, C_REG, 2, 0}, - Optab{ASUB, C_REG, C_REG, C_NONE, C_REG, 10, 0}, - Optab{ASUB, C_REG, C_NONE, C_NONE, C_REG, 10, 0}, - Optab{ANEG, C_REG, C_NONE, C_NONE, C_REG, 47, 0}, - Optab{ANEG, C_NONE, C_NONE, C_NONE, C_REG, 47, 0}, + {i: 2, as: AADD, a1: C_REG, a2: C_REG, a6: C_REG}, + {i: 2, as: AADD, a1: C_REG, a6: C_REG}, + {i: 22, as: AADD, a1: C_LCON, a2: C_REG, a6: C_REG}, + {i: 22, as: AADD, a1: C_LCON, a6: C_REG}, + {i: 12, as: AADD, a1: C_LOREG, a6: C_REG}, + {i: 12, as: AADD, a1: C_LAUTO, a6: C_REG}, + {i: 21, as: ASUB, a1: C_LCON, a2: C_REG, a6: C_REG}, + {i: 21, as: ASUB, a1: C_LCON, a6: C_REG}, + {i: 12, as: ASUB, a1: C_LOREG, a6: C_REG}, + {i: 12, as: ASUB, a1: C_LAUTO, a6: C_REG}, + {i: 4, as: AMULHD, a1: C_REG, a6: C_REG}, + {i: 4, as: AMULHD, a1: C_REG, a2: C_REG, a6: C_REG}, + {i: 2, as: ADIVW, a1: C_REG, a2: C_REG, a6: C_REG}, + {i: 2, as: ADIVW, a1: C_REG, a6: C_REG}, + {i: 10, as: ASUB, a1: C_REG, a2: C_REG, a6: C_REG}, + {i: 10, as: ASUB, a1: C_REG, a6: C_REG}, + {i: 47, as: ANEG, a1: C_REG, a6: C_REG}, + {i: 47, as: ANEG, a6: C_REG}, // integer logical - Optab{AAND, C_REG, C_REG, C_NONE, C_REG, 6, 0}, - Optab{AAND, C_REG, C_NONE, C_NONE, C_REG, 6, 0}, - Optab{AAND, C_LCON, C_NONE, C_NONE, C_REG, 23, 0}, - Optab{AAND, C_LOREG, C_NONE, C_NONE, C_REG, 12, 0}, - Optab{AAND, C_LAUTO, C_NONE, C_NONE, C_REG, 12, REGSP}, - Optab{AANDW, C_REG, C_REG, C_NONE, C_REG, 6, 0}, - Optab{AANDW, C_REG, C_NONE, C_NONE, C_REG, 6, 0}, - Optab{AANDW, C_LCON, C_NONE, C_NONE, C_REG, 24, 0}, - Optab{AANDW, C_LOREG, C_NONE, C_NONE, C_REG, 12, 0}, - Optab{AANDW, C_LAUTO, C_NONE, C_NONE, C_REG, 12, REGSP}, - Optab{ASLD, C_REG, C_NONE, C_NONE, C_REG, 7, 0}, - Optab{ASLD, C_REG, C_REG, C_NONE, C_REG, 7, 0}, - Optab{ASLD, C_SCON, C_REG, C_NONE, C_REG, 7, 0}, - Optab{ASLD, C_SCON, C_NONE, C_NONE, C_REG, 7, 0}, + {i: 6, as: AAND, a1: C_REG, a2: C_REG, a6: C_REG}, + {i: 6, as: AAND, a1: C_REG, a6: C_REG}, + {i: 23, as: AAND, a1: C_LCON, a6: C_REG}, + {i: 12, as: AAND, a1: C_LOREG, a6: C_REG}, + {i: 12, as: AAND, a1: C_LAUTO, a6: C_REG}, + {i: 6, as: AANDW, a1: C_REG, a2: C_REG, a6: C_REG}, + {i: 6, as: AANDW, a1: C_REG, a6: C_REG}, + {i: 24, as: AANDW, a1: C_LCON, a6: C_REG}, + {i: 12, as: AANDW, a1: C_LOREG, a6: C_REG}, + {i: 12, as: AANDW, a1: C_LAUTO, a6: C_REG}, + {i: 7, as: ASLD, a1: C_REG, a6: C_REG}, + {i: 7, as: ASLD, a1: C_REG, a2: C_REG, a6: C_REG}, + {i: 7, as: ASLD, a1: C_SCON, a2: C_REG, a6: C_REG}, + {i: 7, as: ASLD, a1: C_SCON, a6: C_REG}, + {i: 13, as: ARNSBG, a1: C_SCON, a3: C_SCON, a4: C_SCON, a5: C_REG, a6: C_REG}, // compare and swap - Optab{ACSG, C_REG, C_REG, C_NONE, C_SOREG, 79, 0}, + {i: 79, as: ACSG, a1: C_REG, a2: C_REG, a6: C_SOREG}, // floating point - Optab{AFADD, C_FREG, C_NONE, C_NONE, C_FREG, 32, 0}, - Optab{AFABS, C_FREG, C_NONE, C_NONE, C_FREG, 33, 0}, - Optab{AFABS, C_NONE, C_NONE, C_NONE, C_FREG, 33, 0}, - Optab{AFMADD, C_FREG, C_FREG, C_NONE, C_FREG, 34, 0}, - Optab{AFMUL, C_FREG, C_NONE, C_NONE, C_FREG, 32, 0}, - Optab{AFMOVD, C_LAUTO, C_NONE, C_NONE, C_FREG, 36, REGSP}, - Optab{AFMOVD, C_LOREG, C_NONE, C_NONE, C_FREG, 36, 0}, - Optab{AFMOVD, C_ADDR, C_NONE, C_NONE, C_FREG, 75, 0}, - Optab{AFMOVD, C_FREG, C_NONE, C_NONE, C_LAUTO, 35, REGSP}, - Optab{AFMOVD, C_FREG, C_NONE, C_NONE, C_LOREG, 35, 0}, - Optab{AFMOVD, C_FREG, C_NONE, C_NONE, C_ADDR, 74, 0}, - Optab{AFMOVD, C_ZCON, C_NONE, C_NONE, C_FREG, 67, 0}, - Optab{ALDGR, C_REG, C_NONE, C_NONE, C_FREG, 81, 0}, - Optab{ALGDR, C_FREG, C_NONE, C_NONE, C_REG, 81, 0}, - Optab{ACEFBRA, C_REG, C_NONE, C_NONE, C_FREG, 82, 0}, - Optab{ACFEBRA, C_FREG, C_NONE, C_NONE, C_REG, 83, 0}, - Optab{AFIEBR, C_SCON, C_FREG, C_NONE, C_FREG, 48, 0}, - Optab{ACPSDR, C_FREG, C_FREG, C_NONE, C_FREG, 49, 0}, - Optab{ALTDBR, C_FREG, C_NONE, C_NONE, C_FREG, 50, 0}, - Optab{ATCDB, C_FREG, C_NONE, C_NONE, C_SCON, 51, 0}, + {i: 32, as: AFADD, a1: C_FREG, a6: C_FREG}, + {i: 33, as: AFABS, a1: C_FREG, a6: C_FREG}, + {i: 33, as: AFABS, a6: C_FREG}, + {i: 34, as: AFMADD, a1: C_FREG, a2: C_FREG, a6: C_FREG}, + {i: 32, as: AFMUL, a1: C_FREG, a6: C_FREG}, + {i: 36, as: AFMOVD, a1: C_LAUTO, a6: C_FREG}, + {i: 36, as: AFMOVD, a1: C_LOREG, a6: C_FREG}, + {i: 75, as: AFMOVD, a1: C_ADDR, a6: C_FREG}, + {i: 35, as: AFMOVD, a1: C_FREG, a6: C_LAUTO}, + {i: 35, as: AFMOVD, a1: C_FREG, a6: C_LOREG}, + {i: 74, as: AFMOVD, a1: C_FREG, a6: C_ADDR}, + {i: 67, as: AFMOVD, a1: C_ZCON, a6: C_FREG}, + {i: 81, as: ALDGR, a1: C_REG, a6: C_FREG}, + {i: 81, as: ALGDR, a1: C_FREG, a6: C_REG}, + {i: 82, as: ACEFBRA, a1: C_REG, a6: C_FREG}, + {i: 83, as: ACFEBRA, a1: C_FREG, a6: C_REG}, + {i: 48, as: AFIEBR, a1: C_SCON, a2: C_FREG, a6: C_FREG}, + {i: 49, as: ACPSDR, a1: C_FREG, a2: C_FREG, a6: C_FREG}, + {i: 50, as: ALTDBR, a1: C_FREG, a6: C_FREG}, + {i: 51, as: ATCDB, a1: C_FREG, a6: C_SCON}, // load symbol address (plus offset) - Optab{AMOVD, C_SYMADDR, C_NONE, C_NONE, C_REG, 19, 0}, - Optab{AMOVD, C_GOTADDR, C_NONE, C_NONE, C_REG, 93, 0}, - Optab{AMOVD, C_TLS_LE, C_NONE, C_NONE, C_REG, 94, 0}, - Optab{AMOVD, C_TLS_IE, C_NONE, C_NONE, C_REG, 95, 0}, + {i: 19, as: AMOVD, a1: C_SYMADDR, a6: C_REG}, + {i: 93, as: AMOVD, a1: C_GOTADDR, a6: C_REG}, + {i: 94, as: AMOVD, a1: C_TLS_LE, a6: C_REG}, + {i: 95, as: AMOVD, a1: C_TLS_IE, a6: C_REG}, // system call - Optab{ASYSCALL, C_NONE, C_NONE, C_NONE, C_NONE, 5, 0}, - Optab{ASYSCALL, C_SCON, C_NONE, C_NONE, C_NONE, 77, 0}, + {i: 5, as: ASYSCALL}, + {i: 77, as: ASYSCALL, a1: C_SCON}, // branch - Optab{ABEQ, C_NONE, C_NONE, C_NONE, C_SBRA, 16, 0}, - Optab{ABR, C_NONE, C_NONE, C_NONE, C_LBRA, 11, 0}, - Optab{ABC, C_SCON, C_REG, C_NONE, C_LBRA, 16, 0}, - Optab{ABR, C_NONE, C_NONE, C_NONE, C_REG, 18, 0}, - Optab{ABR, C_REG, C_NONE, C_NONE, C_REG, 18, 0}, - Optab{ABR, C_NONE, C_NONE, C_NONE, C_ZOREG, 15, 0}, - Optab{ABC, C_NONE, C_NONE, C_NONE, C_ZOREG, 15, 0}, - Optab{ACMPBEQ, C_REG, C_REG, C_NONE, C_SBRA, 89, 0}, - Optab{ACMPBEQ, C_REG, C_NONE, C_ADDCON, C_SBRA, 90, 0}, - Optab{ACMPBEQ, C_REG, C_NONE, C_SCON, C_SBRA, 90, 0}, - Optab{ACMPUBEQ, C_REG, C_REG, C_NONE, C_SBRA, 89, 0}, - Optab{ACMPUBEQ, C_REG, C_NONE, C_ANDCON, C_SBRA, 90, 0}, + {i: 16, as: ABEQ, a6: C_SBRA}, + {i: 11, as: ABR, a6: C_LBRA}, + {i: 16, as: ABC, a1: C_SCON, a2: C_REG, a6: C_LBRA}, + {i: 18, as: ABR, a6: C_REG}, + {i: 18, as: ABR, a1: C_REG, a6: C_REG}, + {i: 15, as: ABR, a6: C_ZOREG}, + {i: 15, as: ABC, a6: C_ZOREG}, + {i: 89, as: ACMPBEQ, a1: C_REG, a2: C_REG, a6: C_SBRA}, + {i: 90, as: ACMPBEQ, a1: C_REG, a3: C_ADDCON, a6: C_SBRA}, + {i: 90, as: ACMPBEQ, a1: C_REG, a3: C_SCON, a6: C_SBRA}, + {i: 89, as: ACMPUBEQ, a1: C_REG, a2: C_REG, a6: C_SBRA}, + {i: 90, as: ACMPUBEQ, a1: C_REG, a3: C_ANDCON, a6: C_SBRA}, // move on condition - Optab{AMOVDEQ, C_REG, C_NONE, C_NONE, C_REG, 17, 0}, + {i: 17, as: AMOVDEQ, a1: C_REG, a6: C_REG}, // find leftmost one - Optab{AFLOGR, C_REG, C_NONE, C_NONE, C_REG, 8, 0}, + {i: 8, as: AFLOGR, a1: C_REG, a6: C_REG}, // population count - Optab{APOPCNT, C_REG, C_NONE, C_NONE, C_REG, 9, 0}, + {i: 9, as: APOPCNT, a1: C_REG, a6: C_REG}, // compare - Optab{ACMP, C_REG, C_NONE, C_NONE, C_REG, 70, 0}, - Optab{ACMP, C_REG, C_NONE, C_NONE, C_LCON, 71, 0}, - Optab{ACMPU, C_REG, C_NONE, C_NONE, C_REG, 70, 0}, - Optab{ACMPU, C_REG, C_NONE, C_NONE, C_LCON, 71, 0}, - Optab{AFCMPO, C_FREG, C_NONE, C_NONE, C_FREG, 70, 0}, - Optab{AFCMPO, C_FREG, C_REG, C_NONE, C_FREG, 70, 0}, + {i: 70, as: ACMP, a1: C_REG, a6: C_REG}, + {i: 71, as: ACMP, a1: C_REG, a6: C_LCON}, + {i: 70, as: ACMPU, a1: C_REG, a6: C_REG}, + {i: 71, as: ACMPU, a1: C_REG, a6: C_LCON}, + {i: 70, as: AFCMPO, a1: C_FREG, a6: C_FREG}, + {i: 70, as: AFCMPO, a1: C_FREG, a2: C_REG, a6: C_FREG}, // test under mask - Optab{ATMHH, C_REG, C_NONE, C_NONE, C_ANDCON, 91, 0}, + {i: 91, as: ATMHH, a1: C_REG, a6: C_ANDCON}, + + // insert program mask + {i: 92, as: AIPM, a1: C_REG}, // 32-bit access registers - Optab{AMOVW, C_AREG, C_NONE, C_NONE, C_REG, 68, 0}, - Optab{AMOVWZ, C_AREG, C_NONE, C_NONE, C_REG, 68, 0}, - Optab{AMOVW, C_REG, C_NONE, C_NONE, C_AREG, 69, 0}, - Optab{AMOVWZ, C_REG, C_NONE, C_NONE, C_AREG, 69, 0}, + {i: 68, as: AMOVW, a1: C_AREG, a6: C_REG}, + {i: 68, as: AMOVWZ, a1: C_AREG, a6: C_REG}, + {i: 69, as: AMOVW, a1: C_REG, a6: C_AREG}, + {i: 69, as: AMOVWZ, a1: C_REG, a6: C_AREG}, // macros - Optab{ACLEAR, C_LCON, C_NONE, C_NONE, C_LOREG, 96, 0}, - Optab{ACLEAR, C_LCON, C_NONE, C_NONE, C_LAUTO, 96, REGSP}, + {i: 96, as: ACLEAR, a1: C_LCON, a6: C_LOREG}, + {i: 96, as: ACLEAR, a1: C_LCON, a6: C_LAUTO}, // load/store multiple - Optab{ASTMG, C_REG, C_REG, C_NONE, C_LOREG, 97, 0}, - Optab{ASTMG, C_REG, C_REG, C_NONE, C_LAUTO, 97, REGSP}, - Optab{ALMG, C_LOREG, C_REG, C_NONE, C_REG, 98, 0}, - Optab{ALMG, C_LAUTO, C_REG, C_NONE, C_REG, 98, REGSP}, + {i: 97, as: ASTMG, a1: C_REG, a2: C_REG, a6: C_LOREG}, + {i: 97, as: ASTMG, a1: C_REG, a2: C_REG, a6: C_LAUTO}, + {i: 98, as: ALMG, a1: C_LOREG, a2: C_REG, a6: C_REG}, + {i: 98, as: ALMG, a1: C_LAUTO, a2: C_REG, a6: C_REG}, // bytes - Optab{ABYTE, C_SCON, C_NONE, C_NONE, C_NONE, 40, 0}, - Optab{AWORD, C_LCON, C_NONE, C_NONE, C_NONE, 40, 0}, - Optab{ADWORD, C_LCON, C_NONE, C_NONE, C_NONE, 31, 0}, - Optab{ADWORD, C_DCON, C_NONE, C_NONE, C_NONE, 31, 0}, + {i: 40, as: ABYTE, a1: C_SCON}, + {i: 40, as: AWORD, a1: C_LCON}, + {i: 31, as: ADWORD, a1: C_LCON}, + {i: 31, as: ADWORD, a1: C_DCON}, // fast synchronization - Optab{ASYNC, C_NONE, C_NONE, C_NONE, C_NONE, 80, 0}, + {i: 80, as: ASYNC}, // store clock - Optab{ASTCK, C_NONE, C_NONE, C_NONE, C_SAUTO, 88, REGSP}, - Optab{ASTCK, C_NONE, C_NONE, C_NONE, C_SOREG, 88, 0}, + {i: 88, as: ASTCK, a6: C_SAUTO}, + {i: 88, as: ASTCK, a6: C_SOREG}, // storage and storage - Optab{AMVC, C_SCON, C_NONE, C_LOREG, C_LOREG, 84, 0}, - Optab{AMVC, C_SCON, C_NONE, C_LOREG, C_LAUTO, 84, REGSP}, - Optab{AMVC, C_SCON, C_NONE, C_LAUTO, C_LAUTO, 84, REGSP}, + {i: 84, as: AMVC, a1: C_SCON, a3: C_LOREG, a6: C_LOREG}, + {i: 84, as: AMVC, a1: C_SCON, a3: C_LOREG, a6: C_LAUTO}, + {i: 84, as: AMVC, a1: C_SCON, a3: C_LAUTO, a6: C_LAUTO}, // address - Optab{ALARL, C_LCON, C_NONE, C_NONE, C_REG, 85, 0}, - Optab{ALARL, C_SYMADDR, C_NONE, C_NONE, C_REG, 85, 0}, - Optab{ALA, C_SOREG, C_NONE, C_NONE, C_REG, 86, 0}, - Optab{ALA, C_SAUTO, C_NONE, C_NONE, C_REG, 86, REGSP}, - Optab{AEXRL, C_SYMADDR, C_NONE, C_NONE, C_REG, 87, 0}, + {i: 85, as: ALARL, a1: C_LCON, a6: C_REG}, + {i: 85, as: ALARL, a1: C_SYMADDR, a6: C_REG}, + {i: 86, as: ALA, a1: C_SOREG, a6: C_REG}, + {i: 86, as: ALA, a1: C_SAUTO, a6: C_REG}, + {i: 87, as: AEXRL, a1: C_SYMADDR, a6: C_REG}, - // misc - Optab{obj.AUNDEF, C_NONE, C_NONE, C_NONE, C_NONE, 78, 0}, - Optab{obj.APCDATA, C_LCON, C_NONE, C_NONE, C_LCON, 0, 0}, - Optab{obj.AFUNCDATA, C_SCON, C_NONE, C_NONE, C_ADDR, 0, 0}, - Optab{obj.ANOP, C_NONE, C_NONE, C_NONE, C_NONE, 0, 0}, - Optab{obj.ANOP, C_SAUTO, C_NONE, C_NONE, C_NONE, 0, 0}, + // undefined (deliberate illegal instruction) + {i: 78, as: obj.AUNDEF}, // vector instructions // VRX store - Optab{AVST, C_VREG, C_NONE, C_NONE, C_SOREG, 100, 0}, - Optab{AVST, C_VREG, C_NONE, C_NONE, C_SAUTO, 100, REGSP}, - Optab{AVSTEG, C_SCON, C_VREG, C_NONE, C_SOREG, 100, 0}, - Optab{AVSTEG, C_SCON, C_VREG, C_NONE, C_SAUTO, 100, REGSP}, + {i: 100, as: AVST, a1: C_VREG, a6: C_SOREG}, + {i: 100, as: AVST, a1: C_VREG, a6: C_SAUTO}, + {i: 100, as: AVSTEG, a1: C_SCON, a2: C_VREG, a6: C_SOREG}, + {i: 100, as: AVSTEG, a1: C_SCON, a2: C_VREG, a6: C_SAUTO}, // VRX load - Optab{AVL, C_SOREG, C_NONE, C_NONE, C_VREG, 101, 0}, - Optab{AVL, C_SAUTO, C_NONE, C_NONE, C_VREG, 101, REGSP}, - Optab{AVLEG, C_SCON, C_NONE, C_SOREG, C_VREG, 101, 0}, - Optab{AVLEG, C_SCON, C_NONE, C_SAUTO, C_VREG, 101, REGSP}, + {i: 101, as: AVL, a1: C_SOREG, a6: C_VREG}, + {i: 101, as: AVL, a1: C_SAUTO, a6: C_VREG}, + {i: 101, as: AVLEG, a1: C_SCON, a3: C_SOREG, a6: C_VREG}, + {i: 101, as: AVLEG, a1: C_SCON, a3: C_SAUTO, a6: C_VREG}, // VRV scatter - Optab{AVSCEG, C_SCON, C_VREG, C_NONE, C_SOREG, 102, 0}, - Optab{AVSCEG, C_SCON, C_VREG, C_NONE, C_SAUTO, 102, REGSP}, + {i: 102, as: AVSCEG, a1: C_SCON, a2: C_VREG, a6: C_SOREG}, + {i: 102, as: AVSCEG, a1: C_SCON, a2: C_VREG, a6: C_SAUTO}, // VRV gather - Optab{AVGEG, C_SCON, C_NONE, C_SOREG, C_VREG, 103, 0}, - Optab{AVGEG, C_SCON, C_NONE, C_SAUTO, C_VREG, 103, REGSP}, + {i: 103, as: AVGEG, a1: C_SCON, a3: C_SOREG, a6: C_VREG}, + {i: 103, as: AVGEG, a1: C_SCON, a3: C_SAUTO, a6: C_VREG}, // VRS element shift/rotate and load gr to/from vr element - Optab{AVESLG, C_SCON, C_VREG, C_NONE, C_VREG, 104, 0}, - Optab{AVESLG, C_REG, C_VREG, C_NONE, C_VREG, 104, 0}, - Optab{AVESLG, C_SCON, C_NONE, C_NONE, C_VREG, 104, 0}, - Optab{AVESLG, C_REG, C_NONE, C_NONE, C_VREG, 104, 0}, - Optab{AVLGVG, C_SCON, C_VREG, C_NONE, C_REG, 104, 0}, - Optab{AVLGVG, C_REG, C_VREG, C_NONE, C_REG, 104, 0}, - Optab{AVLVGG, C_SCON, C_REG, C_NONE, C_VREG, 104, 0}, - Optab{AVLVGG, C_REG, C_REG, C_NONE, C_VREG, 104, 0}, + {i: 104, as: AVESLG, a1: C_SCON, a2: C_VREG, a6: C_VREG}, + {i: 104, as: AVESLG, a1: C_REG, a2: C_VREG, a6: C_VREG}, + {i: 104, as: AVESLG, a1: C_SCON, a6: C_VREG}, + {i: 104, as: AVESLG, a1: C_REG, a6: C_VREG}, + {i: 104, as: AVLGVG, a1: C_SCON, a2: C_VREG, a6: C_REG}, + {i: 104, as: AVLGVG, a1: C_REG, a2: C_VREG, a6: C_REG}, + {i: 104, as: AVLVGG, a1: C_SCON, a2: C_REG, a6: C_VREG}, + {i: 104, as: AVLVGG, a1: C_REG, a2: C_REG, a6: C_VREG}, // VRS store multiple - Optab{AVSTM, C_VREG, C_VREG, C_NONE, C_SOREG, 105, 0}, - Optab{AVSTM, C_VREG, C_VREG, C_NONE, C_SAUTO, 105, REGSP}, + {i: 105, as: AVSTM, a1: C_VREG, a2: C_VREG, a6: C_SOREG}, + {i: 105, as: AVSTM, a1: C_VREG, a2: C_VREG, a6: C_SAUTO}, // VRS load multiple - Optab{AVLM, C_SOREG, C_VREG, C_NONE, C_VREG, 106, 0}, - Optab{AVLM, C_SAUTO, C_VREG, C_NONE, C_VREG, 106, REGSP}, + {i: 106, as: AVLM, a1: C_SOREG, a2: C_VREG, a6: C_VREG}, + {i: 106, as: AVLM, a1: C_SAUTO, a2: C_VREG, a6: C_VREG}, // VRS store with length - Optab{AVSTL, C_REG, C_VREG, C_NONE, C_SOREG, 107, 0}, - Optab{AVSTL, C_REG, C_VREG, C_NONE, C_SAUTO, 107, REGSP}, + {i: 107, as: AVSTL, a1: C_REG, a2: C_VREG, a6: C_SOREG}, + {i: 107, as: AVSTL, a1: C_REG, a2: C_VREG, a6: C_SAUTO}, // VRS load with length - Optab{AVLL, C_REG, C_NONE, C_SOREG, C_VREG, 108, 0}, - Optab{AVLL, C_REG, C_NONE, C_SAUTO, C_VREG, 108, REGSP}, + {i: 108, as: AVLL, a1: C_REG, a3: C_SOREG, a6: C_VREG}, + {i: 108, as: AVLL, a1: C_REG, a3: C_SAUTO, a6: C_VREG}, // VRI-a - Optab{AVGBM, C_ANDCON, C_NONE, C_NONE, C_VREG, 109, 0}, - Optab{AVZERO, C_NONE, C_NONE, C_NONE, C_VREG, 109, 0}, - Optab{AVREPIG, C_ADDCON, C_NONE, C_NONE, C_VREG, 109, 0}, - Optab{AVREPIG, C_SCON, C_NONE, C_NONE, C_VREG, 109, 0}, - Optab{AVLEIG, C_SCON, C_NONE, C_ADDCON, C_VREG, 109, 0}, - Optab{AVLEIG, C_SCON, C_NONE, C_SCON, C_VREG, 109, 0}, + {i: 109, as: AVGBM, a1: C_ANDCON, a6: C_VREG}, + {i: 109, as: AVZERO, a6: C_VREG}, + {i: 109, as: AVREPIG, a1: C_ADDCON, a6: C_VREG}, + {i: 109, as: AVREPIG, a1: C_SCON, a6: C_VREG}, + {i: 109, as: AVLEIG, a1: C_SCON, a3: C_ADDCON, a6: C_VREG}, + {i: 109, as: AVLEIG, a1: C_SCON, a3: C_SCON, a6: C_VREG}, // VRI-b generate mask - Optab{AVGMG, C_SCON, C_NONE, C_SCON, C_VREG, 110, 0}, + {i: 110, as: AVGMG, a1: C_SCON, a3: C_SCON, a6: C_VREG}, // VRI-c replicate - Optab{AVREPG, C_UCON, C_VREG, C_NONE, C_VREG, 111, 0}, + {i: 111, as: AVREPG, a1: C_UCON, a2: C_VREG, a6: C_VREG}, // VRI-d element rotate and insert under mask and // shift left double by byte - Optab{AVERIMG, C_SCON, C_VREG, C_VREG, C_VREG, 112, 0}, - Optab{AVSLDB, C_SCON, C_VREG, C_VREG, C_VREG, 112, 0}, + {i: 112, as: AVERIMG, a1: C_SCON, a2: C_VREG, a3: C_VREG, a6: C_VREG}, + {i: 112, as: AVSLDB, a1: C_SCON, a2: C_VREG, a3: C_VREG, a6: C_VREG}, // VRI-d fp test data class immediate - Optab{AVFTCIDB, C_SCON, C_VREG, C_NONE, C_VREG, 113, 0}, + {i: 113, as: AVFTCIDB, a1: C_SCON, a2: C_VREG, a6: C_VREG}, // VRR-a load reg - Optab{AVLR, C_VREG, C_NONE, C_NONE, C_VREG, 114, 0}, + {i: 114, as: AVLR, a1: C_VREG, a6: C_VREG}, // VRR-a compare - Optab{AVECG, C_VREG, C_NONE, C_NONE, C_VREG, 115, 0}, + {i: 115, as: AVECG, a1: C_VREG, a6: C_VREG}, // VRR-b - Optab{AVCEQG, C_VREG, C_VREG, C_NONE, C_VREG, 117, 0}, - Optab{AVFAEF, C_VREG, C_VREG, C_NONE, C_VREG, 117, 0}, - Optab{AVPKSG, C_VREG, C_VREG, C_NONE, C_VREG, 117, 0}, + {i: 117, as: AVCEQG, a1: C_VREG, a2: C_VREG, a6: C_VREG}, + {i: 117, as: AVFAEF, a1: C_VREG, a2: C_VREG, a6: C_VREG}, + {i: 117, as: AVPKSG, a1: C_VREG, a2: C_VREG, a6: C_VREG}, // VRR-c - Optab{AVAQ, C_VREG, C_VREG, C_NONE, C_VREG, 118, 0}, - Optab{AVAQ, C_VREG, C_NONE, C_NONE, C_VREG, 118, 0}, - Optab{AVNOT, C_VREG, C_NONE, C_NONE, C_VREG, 118, 0}, - Optab{AVPDI, C_SCON, C_VREG, C_VREG, C_VREG, 123, 0}, + {i: 118, as: AVAQ, a1: C_VREG, a2: C_VREG, a6: C_VREG}, + {i: 118, as: AVAQ, a1: C_VREG, a6: C_VREG}, + {i: 118, as: AVNOT, a1: C_VREG, a6: C_VREG}, + {i: 123, as: AVPDI, a1: C_SCON, a2: C_VREG, a3: C_VREG, a6: C_VREG}, // VRR-c shifts - Optab{AVERLLVG, C_VREG, C_VREG, C_NONE, C_VREG, 119, 0}, - Optab{AVERLLVG, C_VREG, C_NONE, C_NONE, C_VREG, 119, 0}, + {i: 119, as: AVERLLVG, a1: C_VREG, a2: C_VREG, a6: C_VREG}, + {i: 119, as: AVERLLVG, a1: C_VREG, a6: C_VREG}, // VRR-d - // 2 3 1 4 - Optab{AVACQ, C_VREG, C_VREG, C_VREG, C_VREG, 120, 0}, + {i: 120, as: AVACQ, a1: C_VREG, a2: C_VREG, a3: C_VREG, a6: C_VREG}, // VRR-e - Optab{AVSEL, C_VREG, C_VREG, C_VREG, C_VREG, 121, 0}, + {i: 121, as: AVSEL, a1: C_VREG, a2: C_VREG, a3: C_VREG, a6: C_VREG}, // VRR-f - Optab{AVLVGP, C_REG, C_REG, C_NONE, C_VREG, 122, 0}, + {i: 122, as: AVLVGP, a1: C_REG, a2: C_REG, a6: C_VREG}, } var oprange [ALAST & obj.AMask][]Optab @@ -650,62 +655,69 @@ func (c *ctxtz) aclass(a *obj.Addr) int { } func (c *ctxtz) oplook(p *obj.Prog) *Optab { - a1 := int(p.Optab) - if a1 != 0 { - return &optab[a1-1] + // Return cached optab entry if available. + if p.Optab != 0 { + return &optab[p.Optab-1] } - a1 = int(p.From.Class) - if a1 == 0 { - a1 = c.aclass(&p.From) + 1 - p.From.Class = int8(a1) + if len(p.RestArgs) > 3 { + c.ctxt.Diag("too many RestArgs: got %v, maximum is 3\n", len(p.RestArgs)) + return nil } - a1-- - a3 := C_NONE + 1 - if p.GetFrom3() != nil { - a3 = int(p.GetFrom3().Class) - if a3 == 0 { - a3 = c.aclass(p.GetFrom3()) + 1 - p.GetFrom3().Class = int8(a3) - } + // Initialize classes for all arguments. + p.From.Class = int8(c.aclass(&p.From) + 1) + p.To.Class = int8(c.aclass(&p.To) + 1) + for i := range p.RestArgs { + p.RestArgs[i].Class = int8(c.aclass(&p.RestArgs[i]) + 1) } - a3-- - a4 := int(p.To.Class) - if a4 == 0 { - a4 = c.aclass(&p.To) + 1 - p.To.Class = int8(a4) - } - - a4-- - a2 := C_NONE - if p.Reg != 0 { - if REG_R0 <= p.Reg && p.Reg <= REG_R15 { - a2 = C_REG - } else if REG_V0 <= p.Reg && p.Reg <= REG_V31 { - a2 = C_VREG - } else if REG_F0 <= p.Reg && p.Reg <= REG_F15 { - a2 = C_FREG - } else if REG_AR0 <= p.Reg && p.Reg <= REG_AR15 { - a2 = C_AREG - } + // Mirrors the argument list in Optab. + args := [...]int8{ + p.From.Class - 1, + C_NONE, // p.Reg + C_NONE, // p.RestArgs[0] + C_NONE, // p.RestArgs[1] + C_NONE, // p.RestArgs[2] + p.To.Class - 1, + } + // Fill in argument class for p.Reg. + switch { + case REG_R0 <= p.Reg && p.Reg <= REG_R15: + args[1] = C_REG + case REG_V0 <= p.Reg && p.Reg <= REG_V31: + args[1] = C_VREG + case REG_F0 <= p.Reg && p.Reg <= REG_F15: + args[1] = C_FREG + case REG_AR0 <= p.Reg && p.Reg <= REG_AR15: + args[1] = C_AREG + } + // Fill in argument classes for p.RestArgs. + for i, a := range p.RestArgs { + args[2+i] = a.Class - 1 } + // Lookup op in optab. ops := oprange[p.As&obj.AMask] - c1 := &xcmp[a1] - c2 := &xcmp[a2] - c3 := &xcmp[a3] - c4 := &xcmp[a4] + cmp := [len(args)]*[C_NCLASS]bool{} + for i := range cmp { + cmp[i] = &xcmp[args[i]] + } for i := range ops { op := &ops[i] - if (int(op.a2) == a2 || c2[op.a2]) && c4[op.a4] && c1[op.a1] && c3[op.a3] { + if cmp[0][op.a1] && cmp[1][op.a2] && + cmp[2][op.a3] && cmp[3][op.a4] && + cmp[4][op.a5] && cmp[5][op.a6] { p.Optab = uint16(cap(optab) - cap(ops) + i + 1) return op } } - // cannot find a case; abort - c.ctxt.Diag("illegal combination %v %v %v %v %v\n", p.As, DRconv(a1), DRconv(a2), DRconv(a3), DRconv(a4)) + // Cannot find a case; abort. + s := "" + for _, a := range args { + s += fmt.Sprintf(" %v", DRconv(int(a))) + } + c.ctxt.Diag("illegal combination %v%v\n", p.As, s) c.ctxt.Diag("prog: %v\n", p) return nil } @@ -942,6 +954,20 @@ func buildop(ctxt *obj.Link) { opset(ASRAW, r) opset(ARLL, r) opset(ARLLG, r) + case ARNSBG: + opset(ARXSBG, r) + opset(AROSBG, r) + opset(ARNSBGT, r) + opset(ARXSBGT, r) + opset(AROSBGT, r) + opset(ARISBG, r) + opset(ARISBGN, r) + opset(ARISBGZ, r) + opset(ARISBGNZ, r) + opset(ARISBHG, r) + opset(ARISBLG, r) + opset(ARISBHGZ, r) + opset(ARISBLGZ, r) case ACSG: opset(ACS, r) case ASUB: @@ -2622,9 +2648,9 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { return } - switch o.type_ { + switch o.i { default: - c.ctxt.Diag("unknown type %d", o.type_) + c.ctxt.Diag("unknown index %d", o.i) case 0: // PSEUDO OPS break @@ -2926,7 +2952,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { d2 := c.vregoff(&p.From) b2 := p.From.Reg if b2 == 0 { - b2 = o.param + b2 = REGSP } x2 := p.From.Index if -DISP20/2 > d2 || d2 >= DISP20/2 { @@ -2982,6 +3008,37 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { zRXY(opxy, uint32(r1), uint32(x2), uint32(b2), uint32(d2), asm) } + case 13: // rotate, followed by operation + r1 := p.To.Reg + r2 := p.RestArgs[2].Reg + i3 := uint8(p.From.Offset) // start + i4 := uint8(p.RestArgs[0].Offset) // end + i5 := uint8(p.RestArgs[1].Offset) // rotate amount + switch p.As { + case ARNSBGT, ARXSBGT, AROSBGT: + i3 |= 0x80 // test-results + case ARISBGZ, ARISBGNZ, ARISBHGZ, ARISBLGZ: + i4 |= 0x80 // zero-remaining-bits + } + var opcode uint32 + switch p.As { + case ARNSBG, ARNSBGT: + opcode = op_RNSBG + case ARXSBG, ARXSBGT: + opcode = op_RXSBG + case AROSBG, AROSBGT: + opcode = op_ROSBG + case ARISBG, ARISBGZ: + opcode = op_RISBG + case ARISBGN, ARISBGNZ: + opcode = op_RISBGN + case ARISBHG, ARISBHGZ: + opcode = op_RISBHG + case ARISBLG, ARISBLGZ: + opcode = op_RISBLG + } + zRIE(_f, uint32(opcode), uint32(r1), uint32(r2), 0, uint32(i3), uint32(i4), 0, uint32(i5), asm) + case 15: // br/bl (reg) r := p.To.Reg if p.As == ABCL || p.As == ABL { @@ -3082,14 +3139,12 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { } r = p.To.Reg } - if r == p.To.Reg { - if opri != 0 && int64(int16(v)) == v { - zRI(opri, uint32(p.To.Reg), uint32(v), asm) - } else { - zRIL(_a, opril, uint32(p.To.Reg), uint32(v), asm) - } - } else { + if opri != 0 && r == p.To.Reg && int64(int16(v)) == v { + zRI(opri, uint32(p.To.Reg), uint32(v), asm) + } else if oprie != 0 && int64(int16(v)) == v { zRIE(_d, oprie, uint32(p.To.Reg), uint32(r), uint32(v), 0, 0, 0, 0, asm) + } else { + zRIL(_a, opril, uint32(p.To.Reg), uint32(v), asm) } case 23: // 64-bit logical op $constant reg @@ -3152,7 +3207,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { v := c.regoff(&p.From) r := p.From.Reg if r == 0 { - r = o.param + r = REGSP } i := p.From.Index if v >= 0 && v < DISP12 { @@ -3251,7 +3306,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { d2 := c.regoff(&p.To) b2 := p.To.Reg if b2 == 0 { - b2 = o.param + b2 = REGSP } x2 := p.To.Index if d2 < -DISP20/2 || d2 >= DISP20/2 { @@ -3268,7 +3323,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { d2 := c.regoff(&p.From) b2 := p.From.Reg if b2 == 0 { - b2 = o.param + b2 = REGSP } x2 := p.From.Index if d2 < -DISP20/2 || d2 >= DISP20/2 { @@ -3390,7 +3445,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { c.ctxt.Diag("cannot use index register") } if r == 0 { - r = o.param + r = REGSP } var opcode uint32 switch p.As { @@ -3598,10 +3653,10 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { b1 := p.To.Reg b2 := p.GetFrom3().Reg if b1 == 0 { - b1 = o.param + b1 = REGSP } if b2 == 0 { - b2 = o.param + b2 = REGSP } d1 := c.regoff(&p.To) d2 := c.regoff(p.GetFrom3()) @@ -3668,7 +3723,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { x := p.From.Index b := p.From.Reg if b == 0 { - b = o.param + b = REGSP } switch p.As { case ALA: @@ -3702,9 +3757,9 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { opcode = op_STCKF } v := c.vregoff(&p.To) - r := int(p.To.Reg) + r := p.To.Reg if r == 0 { - r = int(o.param) + r = REGSP } zS(opcode, uint32(r), uint32(v), asm) @@ -3766,6 +3821,9 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { } zRI(opcode, uint32(p.From.Reg), uint32(c.vregoff(&p.To)), asm) + case 92: // insert program mask + zRRE(op_IPM, uint32(p.From.Reg), 0, asm) + case 93: // GOT lookup v := c.vregoff(&p.To) if v != 0 { @@ -3821,7 +3879,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { offset := c.vregoff(&p.To) reg := p.To.Reg if reg == 0 { - reg = o.param + reg = REGSP } if length <= 0 { c.ctxt.Diag("cannot CLEAR %d bytes, must be greater than 0", length) @@ -3867,7 +3925,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { offset := c.regoff(&p.To) reg := p.To.Reg if reg == 0 { - reg = o.param + reg = REGSP } if offset < -DISP20/2 || offset >= DISP20/2 { if reg != REGTMP { @@ -3894,7 +3952,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { offset := c.regoff(&p.From) reg := p.From.Reg if reg == 0 { - reg = o.param + reg = REGSP } if offset < -DISP20/2 || offset >= DISP20/2 { if reg != REGTMP { @@ -3957,7 +4015,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { } b2 := p.To.Reg if b2 == 0 { - b2 = o.param + b2 = REGSP } d2 := uint32(c.vregoff(&p.To)) zVRX(op, uint32(v1), uint32(p.To.Index), uint32(b2), d2, m3, asm) @@ -3971,7 +4029,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { } b2 := src.Reg if b2 == 0 { - b2 = o.param + b2 = REGSP } d2 := uint32(c.vregoff(src)) zVRX(op, uint32(p.To.Reg), uint32(src.Index), uint32(b2), d2, m3, asm) @@ -3981,7 +4039,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { m3 := uint32(c.vregoff(&p.From)) b2 := p.To.Reg if b2 == 0 { - b2 = o.param + b2 = REGSP } d2 := uint32(c.vregoff(&p.To)) zVRV(op, uint32(p.Reg), uint32(p.To.Index), uint32(b2), d2, m3, asm) @@ -3991,7 +4049,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { m3 := uint32(c.vregoff(&p.From)) b2 := p.GetFrom3().Reg if b2 == 0 { - b2 = o.param + b2 = REGSP } d2 := uint32(c.vregoff(p.GetFrom3())) zVRV(op, uint32(p.To.Reg), uint32(p.GetFrom3().Index), uint32(b2), d2, m3, asm) @@ -4010,7 +4068,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { offset := uint32(c.vregoff(&p.To)) reg := p.To.Reg if reg == 0 { - reg = o.param + reg = REGSP } zVRS(op, uint32(p.From.Reg), uint32(p.Reg), uint32(reg), offset, 0, asm) @@ -4019,7 +4077,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { offset := uint32(c.vregoff(&p.From)) reg := p.From.Reg if reg == 0 { - reg = o.param + reg = REGSP } zVRS(op, uint32(p.Reg), uint32(p.To.Reg), uint32(reg), offset, 0, asm) @@ -4028,7 +4086,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { offset := uint32(c.vregoff(&p.To)) reg := p.To.Reg if reg == 0 { - reg = o.param + reg = REGSP } zVRS(op, uint32(p.Reg), uint32(p.From.Reg), uint32(reg), offset, 0, asm) @@ -4037,7 +4095,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { offset := uint32(c.vregoff(p.GetFrom3())) reg := p.GetFrom3().Reg if reg == 0 { - reg = o.param + reg = REGSP } zVRS(op, uint32(p.To.Reg), uint32(p.From.Reg), uint32(reg), offset, 0, asm) diff --git a/src/cmd/internal/obj/textflag.go b/src/cmd/internal/obj/textflag.go index d8a52da4af..d2cec734b1 100644 --- a/src/cmd/internal/obj/textflag.go +++ b/src/cmd/internal/obj/textflag.go @@ -47,4 +47,8 @@ const ( // Function can call reflect.Type.Method or reflect.Type.MethodByName. REFLECTMETHOD = 1024 + + // Function is the top of the call stack. Call stack unwinders should stop + // at this function. + TOPFRAME = 2048 ) diff --git a/src/cmd/internal/obj/wasm/a.out.go b/src/cmd/internal/obj/wasm/a.out.go index 0e8196be60..c686f1d6f0 100644 --- a/src/cmd/internal/obj/wasm/a.out.go +++ b/src/cmd/internal/obj/wasm/a.out.go @@ -186,32 +186,46 @@ const ( AF64Copysign AI32WrapI64 - AI32TruncSF32 - AI32TruncUF32 - AI32TruncSF64 - AI32TruncUF64 - AI64ExtendSI32 - AI64ExtendUI32 - AI64TruncSF32 - AI64TruncUF32 - AI64TruncSF64 - AI64TruncUF64 - AF32ConvertSI32 - AF32ConvertUI32 - AF32ConvertSI64 - AF32ConvertUI64 + AI32TruncF32S + AI32TruncF32U + AI32TruncF64S + AI32TruncF64U + AI64ExtendI32S + AI64ExtendI32U + AI64TruncF32S + AI64TruncF32U + AI64TruncF64S + AI64TruncF64U + AF32ConvertI32S + AF32ConvertI32U + AF32ConvertI64S + AF32ConvertI64U AF32DemoteF64 - AF64ConvertSI32 - AF64ConvertUI32 - AF64ConvertSI64 - AF64ConvertUI64 + AF64ConvertI32S + AF64ConvertI32U + AF64ConvertI64S + AF64ConvertI64U AF64PromoteF32 AI32ReinterpretF32 AI64ReinterpretF64 AF32ReinterpretI32 AF64ReinterpretI64 + AI32Extend8S + AI32Extend16S + AI64Extend8S + AI64Extend16S + AI64Extend32S - // End of low-level WebAssembly instructions. + AI32TruncSatF32S // opcode 0xFC 0x00 + AI32TruncSatF32U + AI32TruncSatF64S + AI32TruncSatF64U + AI64TruncSatF32S + AI64TruncSatF32U + AI64TruncSatF64S + AI64TruncSatF64U + + ALast // Sentinel: End of low-level WebAssembly instructions. ARESUMEPOINT // ACALLNORESUME is a call which is not followed by a resume point. diff --git a/src/cmd/internal/obj/wasm/anames.go b/src/cmd/internal/obj/wasm/anames.go index 369de3092d..c8552e7f18 100644 --- a/src/cmd/internal/obj/wasm/anames.go +++ b/src/cmd/internal/obj/wasm/anames.go @@ -153,30 +153,44 @@ var Anames = []string{ "F64Max", "F64Copysign", "I32WrapI64", - "I32TruncSF32", - "I32TruncUF32", - "I32TruncSF64", - "I32TruncUF64", - "I64ExtendSI32", - "I64ExtendUI32", - "I64TruncSF32", - "I64TruncUF32", - "I64TruncSF64", - "I64TruncUF64", - "F32ConvertSI32", - "F32ConvertUI32", - "F32ConvertSI64", - "F32ConvertUI64", + "I32TruncF32S", + "I32TruncF32U", + "I32TruncF64S", + "I32TruncF64U", + "I64ExtendI32S", + "I64ExtendI32U", + "I64TruncF32S", + "I64TruncF32U", + "I64TruncF64S", + "I64TruncF64U", + "F32ConvertI32S", + "F32ConvertI32U", + "F32ConvertI64S", + "F32ConvertI64U", "F32DemoteF64", - "F64ConvertSI32", - "F64ConvertUI32", - "F64ConvertSI64", - "F64ConvertUI64", + "F64ConvertI32S", + "F64ConvertI32U", + "F64ConvertI64S", + "F64ConvertI64U", "F64PromoteF32", "I32ReinterpretF32", "I64ReinterpretF64", "F32ReinterpretI32", "F64ReinterpretI64", + "I32Extend8S", + "I32Extend16S", + "I64Extend8S", + "I64Extend16S", + "I64Extend32S", + "I32TruncSatF32S", + "I32TruncSatF32U", + "I32TruncSatF64S", + "I32TruncSatF64U", + "I64TruncSatF32S", + "I64TruncSatF32U", + "I64TruncSatF64S", + "I64TruncSatF64U", + "Last", "RESUMEPOINT", "CALLNORESUME", "RETUNWIND", diff --git a/src/cmd/internal/obj/wasm/wasmobj.go b/src/cmd/internal/obj/wasm/wasmobj.go index fbea103dcb..0ad883470e 100644 --- a/src/cmd/internal/obj/wasm/wasmobj.go +++ b/src/cmd/internal/obj/wasm/wasmobj.go @@ -181,7 +181,7 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { // Not // If // Get SP - // I64ExtendUI32 + // I64ExtendI32U // I64Const $framesize+8 // I64Add // I64Load panic_argp(R0) @@ -212,7 +212,7 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { p = appendp(p, AIf) p = appendp(p, AGet, regAddr(REG_SP)) - p = appendp(p, AI64ExtendUI32) + p = appendp(p, AI64ExtendI32U) p = appendp(p, AI64Const, constAddr(framesize+8)) p = appendp(p, AI64Add) p = appendp(p, AI64Load, panicargp) @@ -341,47 +341,20 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { p = appendp(p, AEnd) } - // Add Block instructions for resume points and BrTable to jump to selected resume point. - if numResumePoints > 0 { - p := s.Func.Text - p = appendp(p, ALoop) // entryPointLoop, used to jump between basic blocks - - for i := 0; i < numResumePoints+1; i++ { - p = appendp(p, ABlock) - } - p = appendp(p, AGet, regAddr(REG_PC_B)) // read next basic block from PC_B - p = appendp(p, ABrTable, obj.Addr{Val: tableIdxs}) - p = appendp(p, AEnd) // end of Block - - for p.Link != nil { - p = p.Link - } - - p = appendp(p, AEnd) // end of entryPointLoop - p = appendp(p, obj.AUNDEF) - } - - p := s.Func.Text + // record the branches targeting the entry loop and the unwind exit, + // their targets with be filled in later + var entryPointLoopBranches []*obj.Prog + var unwindExitBranches []*obj.Prog currentDepth := 0 - blockDepths := make(map[*obj.Prog]int) - for p != nil { + for p := s.Func.Text; p != nil; p = p.Link { switch p.As { case ABlock, ALoop, AIf: currentDepth++ - blockDepths[p] = currentDepth case AEnd: currentDepth-- } switch p.As { - case ABr, ABrIf: - if p.To.Type == obj.TYPE_BRANCH { - blockDepth, ok := blockDepths[p.To.Val.(*obj.Prog)] - if !ok { - panic("label not at block") - } - p.To = constAddr(int64(currentDepth - blockDepth)) - } case obj.AJMP: jmp := *p p.As = obj.ANOP @@ -389,8 +362,9 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { if jmp.To.Type == obj.TYPE_BRANCH { // jump to basic block p = appendp(p, AI32Const, constAddr(jmp.To.Val.(*obj.Prog).Pc)) - p = appendp(p, ASet, regAddr(REG_PC_B)) // write next basic block to PC_B - p = appendp(p, ABr, constAddr(int64(currentDepth-1))) // jump to beginning of entryPointLoop + p = appendp(p, ASet, regAddr(REG_PC_B)) // write next basic block to PC_B + p = appendp(p, ABr) // jump to beginning of entryPointLoop + entryPointLoopBranches = append(entryPointLoopBranches, p) break } @@ -478,16 +452,16 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { } // return value of call is on the top of the stack, indicating whether to unwind the WebAssembly stack - p = appendp(p, AIf) if call.As == ACALLNORESUME && call.To.Sym != sigpanic { // sigpanic unwinds the stack, but it never resumes // trying to unwind WebAssembly stack but call has no resume point, terminate with error + p = appendp(p, AIf) p = appendp(p, obj.AUNDEF) + p = appendp(p, AEnd) } else { // unwinding WebAssembly stack to switch goroutine, return 1 - p = appendp(p, AI32Const, constAddr(1)) - p = appendp(p, AReturn) + p = appendp(p, ABrIf) + unwindExitBranches = append(unwindExitBranches, p) } - p = appendp(p, AEnd) // jump to before the call if jmpdefer has reset the return address to the call's PC if call.To.Sym == deferreturn { @@ -550,12 +524,9 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { p = appendp(p, AI32Const, constAddr(0)) p = appendp(p, AReturn) } - - p = p.Link } - p = s.Func.Text - for p != nil { + for p := s.Func.Text; p != nil; p = p.Link { switch p.From.Name { case obj.NAME_AUTO: p.From.Offset += int64(framesize) @@ -584,7 +555,7 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { case obj.NAME_AUTO, obj.NAME_PARAM: p = appendp(p, AGet, regAddr(get.From.Reg)) if get.From.Reg == REG_SP { - p = appendp(p, AI64ExtendUI32) + p = appendp(p, AI64ExtendI32U) } if get.From.Offset != 0 { p = appendp(p, AI64Const, constAddr(get.From.Offset)) @@ -641,7 +612,7 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { case obj.NAME_NONE, obj.NAME_PARAM, obj.NAME_AUTO: p = appendp(p, AGet, regAddr(mov.From.Reg)) if mov.From.Reg == REG_SP { - p = appendp(p, AI64ExtendUI32) + p = appendp(p, AI64ExtendI32U) } p = appendp(p, AI64Const, constAddr(mov.From.Offset)) p = appendp(p, AI64Add) @@ -654,7 +625,7 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { case obj.TYPE_REG: p = appendp(p, AGet, mov.From) if mov.From.Reg == REG_SP { - p = appendp(p, AI64ExtendUI32) + p = appendp(p, AI64ExtendI32U) } case obj.TYPE_MEM: @@ -702,8 +673,65 @@ func preprocess(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { p = appendp(p, ACall, obj.Addr{Type: obj.TYPE_MEM, Name: obj.NAME_EXTERN, Sym: s}) p.Mark = WasmImport } + } - p = p.Link + { + p := s.Func.Text + if len(unwindExitBranches) > 0 { + p = appendp(p, ABlock) // unwindExit, used to return 1 when unwinding the stack + for _, b := range unwindExitBranches { + b.To = obj.Addr{Type: obj.TYPE_BRANCH, Val: p} + } + } + if len(entryPointLoopBranches) > 0 { + p = appendp(p, ALoop) // entryPointLoop, used to jump between basic blocks + for _, b := range entryPointLoopBranches { + b.To = obj.Addr{Type: obj.TYPE_BRANCH, Val: p} + } + } + if numResumePoints > 0 { + // Add Block instructions for resume points and BrTable to jump to selected resume point. + for i := 0; i < numResumePoints+1; i++ { + p = appendp(p, ABlock) + } + p = appendp(p, AGet, regAddr(REG_PC_B)) // read next basic block from PC_B + p = appendp(p, ABrTable, obj.Addr{Val: tableIdxs}) + p = appendp(p, AEnd) // end of Block + } + for p.Link != nil { + p = p.Link // function instructions + } + if len(entryPointLoopBranches) > 0 { + p = appendp(p, AEnd) // end of entryPointLoop + } + p = appendp(p, obj.AUNDEF) + if len(unwindExitBranches) > 0 { + p = appendp(p, AEnd) // end of unwindExit + p = appendp(p, AI32Const, constAddr(1)) + } + } + + currentDepth = 0 + blockDepths := make(map[*obj.Prog]int) + for p := s.Func.Text; p != nil; p = p.Link { + switch p.As { + case ABlock, ALoop, AIf: + currentDepth++ + blockDepths[p] = currentDepth + case AEnd: + currentDepth-- + } + + switch p.As { + case ABr, ABrIf: + if p.To.Type == obj.TYPE_BRANCH { + blockDepth, ok := blockDepths[p.To.Val.(*obj.Prog)] + if !ok { + panic("label not at block") + } + p.To = constAddr(int64(currentDepth - blockDepth)) + } + } } } @@ -746,21 +774,34 @@ func countRegisters(s *obj.LSym) (numI, numF int16) { func assemble(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { w := new(bytes.Buffer) - numI, numF := countRegisters(s) + hasLocalSP := false + var r0, f0 int16 // Function starts with declaration of locals: numbers and types. + // Some functions use a special calling convention. switch s.Name { - // memchr and memcmp don't use the normal Go calling convention and need i32 variables. - case "memchr": - writeUleb128(w, 1) // number of sets of locals - writeUleb128(w, 3) // number of locals - w.WriteByte(0x7F) // i32 - case "memcmp": + case "wasm_export_run", "runtime.wasmMove", "runtime.wasmZero", "runtime.wasmDiv", "runtime.wasmTruncS", "runtime.wasmTruncU", "memeqbody": + writeUleb128(w, 0) // number of sets of locals + case "memchr", "memcmp": writeUleb128(w, 1) // number of sets of locals writeUleb128(w, 2) // number of locals w.WriteByte(0x7F) // i32 + case "cmpbody": + writeUleb128(w, 1) // number of sets of locals + writeUleb128(w, 2) // number of locals + w.WriteByte(0x7E) // i64 + case "runtime.gcWriteBarrier": + writeUleb128(w, 1) // number of sets of locals + writeUleb128(w, 4) // number of locals + w.WriteByte(0x7E) // i64 default: - numTypes := 0 + // Normal calling convention: No WebAssembly parameters. First local variable is local SP cache. + hasLocalSP = true + numI, numF := countRegisters(s) + r0 = 1 + f0 = 1 + numI + + numTypes := 1 if numI > 0 { numTypes++ } @@ -769,6 +810,8 @@ func assemble(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { } writeUleb128(w, uint64(numTypes)) + writeUleb128(w, 1) // number of locals (SP) + w.WriteByte(0x7F) // i32 if numI > 0 { writeUleb128(w, uint64(numI)) // number of locals w.WriteByte(0x7E) // i64 @@ -779,6 +822,10 @@ func assemble(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { } } + if hasLocalSP { + // Copy SP from its global variable into a local variable. Accessing a local variable is more efficient. + updateLocalSP(w) + } for p := s.Func.Text; p != nil; p = p.Link { switch p.As { case AGet: @@ -787,15 +834,18 @@ func assemble(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { } reg := p.From.Reg switch { + case reg == REG_SP && hasLocalSP: + w.WriteByte(0x20) // local.get + writeUleb128(w, 0) // local SP case reg >= REG_PC_F && reg <= REG_PAUSE: - w.WriteByte(0x23) // get_global + w.WriteByte(0x23) // global.get writeUleb128(w, uint64(reg-REG_PC_F)) case reg >= REG_R0 && reg <= REG_R15: - w.WriteByte(0x20) // get_local (i64) - writeUleb128(w, uint64(reg-REG_R0)) + w.WriteByte(0x20) // local.get (i64) + writeUleb128(w, uint64(r0+(reg-REG_R0))) case reg >= REG_F0 && reg <= REG_F15: - w.WriteByte(0x20) // get_local (f64) - writeUleb128(w, uint64(numI+(reg-REG_F0))) + w.WriteByte(0x20) // local.get (f64) + writeUleb128(w, uint64(f0+(reg-REG_F0))) default: panic("bad Get: invalid register") } @@ -808,19 +858,23 @@ func assemble(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { reg := p.To.Reg switch { case reg >= REG_PC_F && reg <= REG_PAUSE: - w.WriteByte(0x24) // set_global + if reg == REG_SP && hasLocalSP { + w.WriteByte(0x22) // local.tee + writeUleb128(w, 0) // local SP + } + w.WriteByte(0x24) // global.set writeUleb128(w, uint64(reg-REG_PC_F)) case reg >= REG_R0 && reg <= REG_F15: if p.Link.As == AGet && p.Link.From.Reg == reg { - w.WriteByte(0x22) // tee_local + w.WriteByte(0x22) // local.tee p = p.Link } else { - w.WriteByte(0x21) // set_local + w.WriteByte(0x21) // local.set } if reg <= REG_R15 { - writeUleb128(w, uint64(reg-REG_R0)) + writeUleb128(w, uint64(r0+(reg-REG_R0))) } else { - writeUleb128(w, uint64(numI+(reg-REG_F0))) + writeUleb128(w, uint64(f0+(reg-REG_F0))) } default: panic("bad Set: invalid register") @@ -834,11 +888,11 @@ func assemble(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { reg := p.To.Reg switch { case reg >= REG_R0 && reg <= REG_R15: - w.WriteByte(0x22) // tee_local (i64) - writeUleb128(w, uint64(reg-REG_R0)) + w.WriteByte(0x22) // local.tee (i64) + writeUleb128(w, uint64(r0+(reg-REG_R0))) case reg >= REG_F0 && reg <= REG_F15: - w.WriteByte(0x22) // tee_local (f64) - writeUleb128(w, uint64(numI+(reg-REG_F0))) + w.WriteByte(0x22) // local.tee (f64) + writeUleb128(w, uint64(f0+(reg-REG_F0))) default: panic("bad Tee: invalid register") } @@ -858,7 +912,7 @@ func assemble(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { } switch { - case p.As < AUnreachable || p.As > AF64ReinterpretI64: + case p.As < AUnreachable: panic(fmt.Sprintf("unexpected assembler op: %s", p.As)) case p.As < AEnd: w.WriteByte(byte(p.As - AUnreachable + 0x00)) @@ -866,8 +920,13 @@ func assemble(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { w.WriteByte(byte(p.As - AEnd + 0x0B)) case p.As < AI32Load: w.WriteByte(byte(p.As - ADrop + 0x1A)) - default: + case p.As < AI32TruncSatF32S: w.WriteByte(byte(p.As - AI32Load + 0x28)) + case p.As < ALast: + w.WriteByte(0xFC) + w.WriteByte(byte(p.As - AI32TruncSatF32S + 0x00)) + default: + panic(fmt.Sprintf("unexpected assembler op: %s", p.As)) } switch p.As { @@ -909,6 +968,10 @@ func assemble(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { r.Type = objabi.R_WASMIMPORT } r.Sym = p.To.Sym + if hasLocalSP { + // The stack may have moved, which changes SP. Update the local SP variable. + updateLocalSP(w) + } default: panic("bad type for Call") @@ -917,6 +980,10 @@ func assemble(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { case ACallIndirect: writeUleb128(w, uint64(p.To.Offset)) w.WriteByte(0x00) // reserved value + if hasLocalSP { + // The stack may have moved, which changes SP. Update the local SP variable. + updateLocalSP(w) + } case AI32Const, AI64Const: if p.From.Name == obj.NAME_EXTERN { @@ -968,6 +1035,13 @@ func assemble(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { s.P = w.Bytes() } +func updateLocalSP(w *bytes.Buffer) { + w.WriteByte(0x23) // global.get + writeUleb128(w, uint64(REG_SP-REG_PC_F)) // SP + w.WriteByte(0x21) // local.set + writeUleb128(w, 0) // local SP +} + func align(as obj.As) uint64 { switch as { case AI32Load8S, AI32Load8U, AI64Load8S, AI64Load8U, AI32Store8, AI64Store8: diff --git a/src/cmd/internal/obj/x86/aenum.go b/src/cmd/internal/obj/x86/aenum.go index 67cf5b1b46..0377b39a41 100644 --- a/src/cmd/internal/obj/x86/aenum.go +++ b/src/cmd/internal/obj/x86/aenum.go @@ -69,7 +69,6 @@ const ( ABSRW ABSWAPL ABSWAPQ - ABSWAPW ABTCL ABTCQ ABTCW diff --git a/src/cmd/internal/obj/x86/anames.go b/src/cmd/internal/obj/x86/anames.go index ba47524201..a928f67bae 100644 --- a/src/cmd/internal/obj/x86/anames.go +++ b/src/cmd/internal/obj/x86/anames.go @@ -67,7 +67,6 @@ var Anames = []string{ "BSRW", "BSWAPL", "BSWAPQ", - "BSWAPW", "BTCL", "BTCQ", "BTCW", diff --git a/src/cmd/internal/obj/x86/asm6.go b/src/cmd/internal/obj/x86/asm6.go index c3da29ce2c..1f668a0166 100644 --- a/src/cmd/internal/obj/x86/asm6.go +++ b/src/cmd/internal/obj/x86/asm6.go @@ -92,7 +92,7 @@ type Optab struct { op opBytes } -type Movtab struct { +type movtab struct { as obj.As ft uint8 f3t uint8 @@ -961,7 +961,6 @@ var optab = {ABSRL, yml_rl, Pm, opBytes{0xbd}}, {ABSRQ, yml_rl, Pw, opBytes{0x0f, 0xbd}}, {ABSRW, yml_rl, Pq, opBytes{0xbd}}, - {ABSWAPW, ybswap, Pe, opBytes{0x0f, 0xc8}}, {ABSWAPL, ybswap, Px, opBytes{0x0f, 0xc8}}, {ABSWAPQ, ybswap, Pw, opBytes{0x0f, 0xc8}}, {ABTCL, ybtl, Pm, opBytes{0xba, 07, 0xbb}}, @@ -1857,63 +1856,42 @@ func span6(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { ctxt.Diag("x86 tables not initialized, call x86.instinit first") } - var ab AsmBuf - for p := s.Func.Text; p != nil; p = p.Link { - if p.To.Type == obj.TYPE_BRANCH { - if p.Pcond == nil { - p.Pcond = p - } + if p.To.Type == obj.TYPE_BRANCH && p.Pcond == nil { + p.Pcond = p } if p.As == AADJSP { p.To.Type = obj.TYPE_REG p.To.Reg = REG_SP - v := int32(-p.From.Offset) - p.From.Offset = int64(v) - p.As = spadjop(ctxt, AADDL, AADDQ) - if v < 0 { - p.As = spadjop(ctxt, ASUBL, ASUBQ) - v = -v - p.From.Offset = int64(v) - } - - if v == 0 { + // Generate 'ADDQ $x, SP' or 'SUBQ $x, SP', with x positive. + // One exception: It is smaller to encode $-0x80 than $0x80. + // For that case, flip the sign and the op: + // Instead of 'ADDQ $0x80, SP', generate 'SUBQ $-0x80, SP'. + switch v := p.From.Offset; { + case v == 0: p.As = obj.ANOP + case v == 0x80 || (v < 0 && v != -0x80): + p.As = spadjop(ctxt, AADDL, AADDQ) + p.From.Offset *= -1 + default: + p.As = spadjop(ctxt, ASUBL, ASUBQ) } } } - var q *obj.Prog var count int64 // rough count of number of instructions for p := s.Func.Text; p != nil; p = p.Link { count++ p.Back = branchShort // use short branches first time through - q = p.Pcond - if q != nil && (q.Back&branchShort != 0) { + if q := p.Pcond; q != nil && (q.Back&branchShort != 0) { p.Back |= branchBackwards q.Back |= branchLoopHead } - - if p.As == AADJSP { - p.To.Type = obj.TYPE_REG - p.To.Reg = REG_SP - v := int32(-p.From.Offset) - p.From.Offset = int64(v) - p.As = spadjop(ctxt, AADDL, AADDQ) - if v < 0 { - p.As = spadjop(ctxt, ASUBL, ASUBQ) - v = -v - p.From.Offset = int64(v) - } - - if v == 0 { - p.As = obj.ANOP - } - } } s.GrowCap(count * 5) // preallocate roughly 5 bytes per instruction - n := 0 + var ab AsmBuf + var n int var c int32 errors := ctxt.Errors for { @@ -1975,7 +1953,7 @@ func span6(ctxt *obj.Link, s *obj.LSym, newprog obj.ProgAlloc) { p.Pc = int64(c) // process forward jumps to p - for q = p.Rel; q != nil; q = q.Forwd { + for q := p.Rel; q != nil; q = q.Forwd { v := int32(p.Pc - (q.Pc + int64(q.Isize))) if q.Back&branchShort != 0 { if v > 127 { @@ -2366,17 +2344,14 @@ func prefixof(ctxt *obj.Link, a *obj.Addr) int { if ctxt.Arch.Family == sys.I386 { if a.Index == REG_TLS && ctxt.Flag_shared { // When building for inclusion into a shared library, an instruction of the form - // MOVL 0(CX)(TLS*1), AX + // MOVL off(CX)(TLS*1), AX // becomes - // mov %gs:(%ecx), %eax + // mov %gs:off(%ecx), %eax // which assumes that the correct TLS offset has been loaded into %ecx (today // there is only one TLS variable -- g -- so this is OK). When not building for // a shared library the instruction it becomes - // mov 0x0(%ecx), $eax + // mov 0x0(%ecx), %eax // and a R_TLS_LE relocation, and so does not require a prefix. - if a.Offset != 0 { - ctxt.Diag("cannot handle non-0 offsets to TLS") - } return 0x65 // GS } return 0 @@ -2395,15 +2370,12 @@ func prefixof(ctxt *obj.Link, a *obj.Addr) int { case REG_TLS: if ctxt.Flag_shared && ctxt.Headtype != objabi.Hwindows { // When building for inclusion into a shared library, an instruction of the form - // MOV 0(CX)(TLS*1), AX + // MOV off(CX)(TLS*1), AX // becomes - // mov %fs:(%rcx), %rax + // mov %fs:off(%rcx), %rax // which assumes that the correct TLS offset has been loaded into %rcx (today // there is only one TLS variable -- g -- so this is OK). When not building for // a shared library the instruction does not require a prefix. - if a.Offset != 0 { - log.Fatalf("cannot handle non-0 offsets to TLS") - } return 0x64 } @@ -3619,7 +3591,7 @@ const ( movTLSReg ) -var ymovtab = []Movtab{ +var ymovtab = []movtab{ // push {APUSHL, Ycs, Ynone, Ynone, movLit, [4]uint8{0x0e, 0}}, {APUSHL, Yss, Ynone, Ynone, movLit, [4]uint8{0x16, 0}}, @@ -3733,8 +3705,8 @@ var ymovtab = []Movtab{ {AMOVW, Ytask, Ynone, Yml, movRegMem2op, [4]uint8{0x0f, 0x00, 1, 0}}, /* load full pointer - unsupported - Movtab{AMOVL, Yml, Ycol, movFullPtr, [4]uint8{0, 0, 0, 0}}, - Movtab{AMOVW, Yml, Ycol, movFullPtr, [4]uint8{Pe, 0, 0, 0}}, + {AMOVL, Yml, Ycol, movFullPtr, [4]uint8{0, 0, 0, 0}}, + {AMOVW, Yml, Ycol, movFullPtr, [4]uint8{Pe, 0, 0, 0}}, */ // double shift @@ -5142,7 +5114,6 @@ bad: } ctxt.Diag("invalid instruction: %v", p) - // ctxt.Diag("doasm: notfound ft=%d tt=%d %v %d %d", p.Ft, p.Tt, p, oclass(ctxt, p, &p.From), oclass(ctxt, p, &p.To)) } // byteswapreg returns a byte-addressable register (AX, BX, CX, DX) @@ -5395,7 +5366,7 @@ func (ab *AsmBuf) asmins(ctxt *obj.Link, cursym *obj.LSym, p *obj.Prog) { if int64(r.Off) < p.Pc { break } - if ab.rexflag != 0 && !ab.vexflag { + if ab.rexflag != 0 && !ab.vexflag && !ab.evexflag { r.Off++ } if r.Type == objabi.R_PCREL { diff --git a/src/cmd/internal/obj/x86/asm_test.go b/src/cmd/internal/obj/x86/asm_test.go index d9caa2ecd3..36c8fce675 100644 --- a/src/cmd/internal/obj/x86/asm_test.go +++ b/src/cmd/internal/obj/x86/asm_test.go @@ -6,14 +6,222 @@ package x86 import ( "cmd/internal/obj" + "cmd/internal/objabi" "testing" ) +type oclassTest struct { + arg *obj.Addr + want int // Expected oclass return value for a given arg +} + +// Filled inside init, because it's easier to do with helper functions. +var ( + oclassTestsAMD64 []*oclassTest + oclassTests386 []*oclassTest +) + func init() { // Required for tests that access any of // opindex/ycover/reg/regrex global tables. var ctxt obj.Link instinit(&ctxt) + + regAddr := func(reg int16) *obj.Addr { + return &obj.Addr{Type: obj.TYPE_REG, Reg: reg} + } + immAddr := func(v int64) *obj.Addr { + return &obj.Addr{Type: obj.TYPE_CONST, Offset: v} + } + regListAddr := func(regFrom, regTo int16) *obj.Addr { + return &obj.Addr{Type: obj.TYPE_REGLIST, Offset: EncodeRegisterRange(regFrom, regTo)} + } + memAddr := func(base, index int16) *obj.Addr { + return &obj.Addr{Type: obj.TYPE_MEM, Reg: base, Index: index} + } + + // TODO(quasilyte): oclass doesn't return Yxxx for X/Y regs with + // ID higher than 7. We don't encode such instructions, but this + // behavior seems inconsistent. It should probably either + // never check for arch or do it in all cases. + + oclassTestsCommon := []*oclassTest{ + {&obj.Addr{Type: obj.TYPE_NONE}, Ynone}, + {&obj.Addr{Type: obj.TYPE_BRANCH}, Ybr}, + {&obj.Addr{Type: obj.TYPE_TEXTSIZE}, Ytextsize}, + + {&obj.Addr{Type: obj.TYPE_INDIR, Name: obj.NAME_EXTERN}, Yindir}, + {&obj.Addr{Type: obj.TYPE_INDIR, Name: obj.NAME_GOTREF}, Yindir}, + + {&obj.Addr{Type: obj.TYPE_ADDR, Name: obj.NAME_AUTO}, Yiauto}, + {&obj.Addr{Type: obj.TYPE_ADDR, Name: obj.NAME_PARAM}, Yiauto}, + {&obj.Addr{Type: obj.TYPE_ADDR, Name: obj.NAME_EXTERN}, Yiauto}, + {&obj.Addr{Type: obj.TYPE_ADDR, Sym: &obj.LSym{Name: "runtime.duff"}}, Yi32}, + {&obj.Addr{Type: obj.TYPE_ADDR, Offset: 4}, Yu7}, + {&obj.Addr{Type: obj.TYPE_ADDR, Offset: 255}, Yu8}, + + {immAddr(0), Yi0}, + {immAddr(1), Yi1}, + {immAddr(2), Yu2}, + {immAddr(3), Yu2}, + {immAddr(4), Yu7}, + {immAddr(86), Yu7}, + {immAddr(127), Yu7}, + {immAddr(128), Yu8}, + {immAddr(200), Yu8}, + {immAddr(255), Yu8}, + {immAddr(-1), Yi8}, + {immAddr(-100), Yi8}, + {immAddr(-128), Yi8}, + + {regAddr(REG_AL), Yal}, + {regAddr(REG_AX), Yax}, + {regAddr(REG_DL), Yrb}, + {regAddr(REG_DH), Yrb}, + {regAddr(REG_BH), Yrb}, + {regAddr(REG_CL), Ycl}, + {regAddr(REG_CX), Ycx}, + {regAddr(REG_DX), Yrx}, + {regAddr(REG_BX), Yrx}, + {regAddr(REG_F0), Yf0}, + {regAddr(REG_F3), Yrf}, + {regAddr(REG_F7), Yrf}, + {regAddr(REG_M0), Ymr}, + {regAddr(REG_M3), Ymr}, + {regAddr(REG_M7), Ymr}, + {regAddr(REG_X0), Yxr0}, + {regAddr(REG_X6), Yxr}, + {regAddr(REG_X13), Yxr}, + {regAddr(REG_X20), YxrEvex}, + {regAddr(REG_X31), YxrEvex}, + {regAddr(REG_Y0), Yyr}, + {regAddr(REG_Y6), Yyr}, + {regAddr(REG_Y13), Yyr}, + {regAddr(REG_Y20), YyrEvex}, + {regAddr(REG_Y31), YyrEvex}, + {regAddr(REG_Z0), Yzr}, + {regAddr(REG_Z6), Yzr}, + {regAddr(REG_K0), Yk0}, + {regAddr(REG_K5), Yknot0}, + {regAddr(REG_K7), Yknot0}, + {regAddr(REG_CS), Ycs}, + {regAddr(REG_SS), Yss}, + {regAddr(REG_DS), Yds}, + {regAddr(REG_ES), Yes}, + {regAddr(REG_FS), Yfs}, + {regAddr(REG_GS), Ygs}, + {regAddr(REG_TLS), Ytls}, + {regAddr(REG_GDTR), Ygdtr}, + {regAddr(REG_IDTR), Yidtr}, + {regAddr(REG_LDTR), Yldtr}, + {regAddr(REG_MSW), Ymsw}, + {regAddr(REG_TASK), Ytask}, + {regAddr(REG_CR0), Ycr0}, + {regAddr(REG_CR5), Ycr5}, + {regAddr(REG_CR8), Ycr8}, + {regAddr(REG_DR0), Ydr0}, + {regAddr(REG_DR5), Ydr5}, + {regAddr(REG_DR7), Ydr7}, + {regAddr(REG_TR0), Ytr0}, + {regAddr(REG_TR5), Ytr5}, + {regAddr(REG_TR7), Ytr7}, + + {regListAddr(REG_X0, REG_X3), YxrEvexMulti4}, + {regListAddr(REG_X4, REG_X7), YxrEvexMulti4}, + {regListAddr(REG_Y0, REG_Y3), YyrEvexMulti4}, + {regListAddr(REG_Y4, REG_Y7), YyrEvexMulti4}, + {regListAddr(REG_Z0, REG_Z3), YzrMulti4}, + {regListAddr(REG_Z4, REG_Z7), YzrMulti4}, + + {memAddr(REG_AL, REG_NONE), Ym}, + {memAddr(REG_AL, REG_SI), Ym}, + {memAddr(REG_SI, REG_CX), Ym}, + {memAddr(REG_DI, REG_X0), Yxvm}, + {memAddr(REG_DI, REG_X7), Yxvm}, + {memAddr(REG_DI, REG_Y0), Yyvm}, + {memAddr(REG_DI, REG_Y7), Yyvm}, + {memAddr(REG_DI, REG_Z0), Yzvm}, + {memAddr(REG_DI, REG_Z7), Yzvm}, + } + + oclassTestsAMD64 = []*oclassTest{ + {immAddr(-200), Ys32}, + {immAddr(500), Ys32}, + {immAddr(0x7FFFFFFF), Ys32}, + {immAddr(0x7FFFFFFF + 1), Yi32}, + {immAddr(0xFFFFFFFF), Yi32}, + {immAddr(0xFFFFFFFF + 1), Yi64}, + + {regAddr(REG_BPB), Yrb}, + {regAddr(REG_SIB), Yrb}, + {regAddr(REG_DIB), Yrb}, + {regAddr(REG_R8B), Yrb}, + {regAddr(REG_R12B), Yrb}, + {regAddr(REG_R8), Yrl}, + {regAddr(REG_R13), Yrl}, + {regAddr(REG_R15), Yrl}, + {regAddr(REG_SP), Yrl}, + {regAddr(REG_SI), Yrl}, + {regAddr(REG_DI), Yrl}, + {regAddr(REG_Z13), Yzr}, + {regAddr(REG_Z20), Yzr}, + {regAddr(REG_Z31), Yzr}, + + {regListAddr(REG_X10, REG_X13), YxrEvexMulti4}, + {regListAddr(REG_X24, REG_X27), YxrEvexMulti4}, + {regListAddr(REG_Y10, REG_Y13), YyrEvexMulti4}, + {regListAddr(REG_Y24, REG_Y27), YyrEvexMulti4}, + {regListAddr(REG_Z10, REG_Z13), YzrMulti4}, + {regListAddr(REG_Z24, REG_Z27), YzrMulti4}, + + {memAddr(REG_DI, REG_X20), YxvmEvex}, + {memAddr(REG_DI, REG_X27), YxvmEvex}, + {memAddr(REG_DI, REG_Y20), YyvmEvex}, + {memAddr(REG_DI, REG_Y27), YyvmEvex}, + {memAddr(REG_DI, REG_Z20), Yzvm}, + {memAddr(REG_DI, REG_Z27), Yzvm}, + } + + oclassTests386 = []*oclassTest{ + {&obj.Addr{Type: obj.TYPE_ADDR, Name: obj.NAME_EXTERN, Sym: &obj.LSym{}}, Yi32}, + + {immAddr(-200), Yi32}, + + {regAddr(REG_SP), Yrl32}, + {regAddr(REG_SI), Yrl32}, + {regAddr(REG_DI), Yrl32}, + } + + // Add tests that are arch-independent for all sets. + oclassTestsAMD64 = append(oclassTestsAMD64, oclassTestsCommon...) + oclassTests386 = append(oclassTests386, oclassTestsCommon...) +} + +func TestOclass(t *testing.T) { + runTest := func(t *testing.T, ctxt *obj.Link, tests []*oclassTest) { + var p obj.Prog + for _, test := range tests { + have := oclass(ctxt, &p, test.arg) + if have != test.want { + t.Errorf("oclass(%q):\nhave: %d\nwant: %d", + obj.Dconv(&p, test.arg), have, test.want) + } + } + } + + // TODO(quasilyte): test edge cases for Hsolaris, etc? + + t.Run("linux/AMD64", func(t *testing.T) { + ctxtAMD64 := obj.Linknew(&Linkamd64) + ctxtAMD64.Headtype = objabi.Hlinux // See #32028 + runTest(t, ctxtAMD64, oclassTestsAMD64) + }) + + t.Run("linux/386", func(t *testing.T) { + ctxt386 := obj.Linknew(&Link386) + ctxt386.Headtype = objabi.Hlinux // See #32028 + runTest(t, ctxt386, oclassTests386) + }) } func TestRegisterListEncDec(t *testing.T) { diff --git a/src/cmd/internal/obj/x86/obj6.go b/src/cmd/internal/obj/x86/obj6.go index a6931e8441..d1ac707fd7 100644 --- a/src/cmd/internal/obj/x86/obj6.go +++ b/src/cmd/internal/obj/x86/obj6.go @@ -41,13 +41,8 @@ import ( func CanUse1InsnTLS(ctxt *obj.Link) bool { if isAndroid { - // For android, we use a disgusting hack that assumes - // the thread-local storage slot for g is allocated - // using pthread_key_create with a fixed offset - // (see src/runtime/cgo/gcc_android_amd64.c). - // This makes access to the TLS storage (for g) doable - // with 1 instruction. - return true + // Android uses a global variable for the tls offset. + return false } if ctxt.Arch.Family == sys.I386 { @@ -162,6 +157,18 @@ func progedit(ctxt *obj.Link, p *obj.Prog, newprog obj.ProgAlloc) { } } + // Android uses a tls offset determined at runtime. Rewrite + // MOVQ TLS, BX + // to + // MOVQ runtime.tls_g(SB), BX + if isAndroid && (p.As == AMOVQ || p.As == AMOVL) && p.From.Type == obj.TYPE_REG && p.From.Reg == REG_TLS && p.To.Type == obj.TYPE_REG && REG_AX <= p.To.Reg && p.To.Reg <= REG_R15 { + p.From.Type = obj.TYPE_MEM + p.From.Name = obj.NAME_EXTERN + p.From.Reg = REG_NONE + p.From.Sym = ctxt.Lookup("runtime.tls_g") + p.From.Index = REG_NONE + } + // TODO: Remove. if ctxt.Headtype == objabi.Hwindows && ctxt.Arch.Family == sys.AMD64 || ctxt.Headtype == objabi.Hplan9 { if p.From.Scale == 1 && p.From.Index == REG_TLS { @@ -968,7 +975,13 @@ func isZeroArgRuntimeCall(s *obj.LSym) bool { return false } switch s.Name { - case "runtime.panicindex", "runtime.panicslice", "runtime.panicdivide", "runtime.panicwrap", "runtime.panicshift": + case "runtime.panicdivide", "runtime.panicwrap", "runtime.panicshift": + return true + } + if strings.HasPrefix(s.Name, "runtime.panicIndex") || strings.HasPrefix(s.Name, "runtime.panicSlice") { + // These functions do take arguments (in registers), + // but use no stack before they do a stack check. We + // should include them. See issue 31219. return true } return false @@ -1007,6 +1020,7 @@ func load_g_cx(ctxt *obj.Link, p *obj.Prog, newprog obj.ProgAlloc) *obj.Prog { progedit(ctxt, p, newprog) for p.Link != next { p = p.Link + progedit(ctxt, p, newprog) } if p.From.Index == REG_TLS { @@ -1192,7 +1206,6 @@ func stacksplit(ctxt *obj.Link, cursym *obj.LSym, p *obj.Prog, newprog obj.ProgA var unaryDst = map[obj.As]bool{ ABSWAPL: true, ABSWAPQ: true, - ABSWAPW: true, ACLFLUSH: true, ACLFLUSHOPT: true, ACMPXCHG16B: true, diff --git a/src/cmd/internal/obj/x86/obj6_test.go b/src/cmd/internal/obj/x86/obj6_test.go index c5399744f2..f9dd584569 100644 --- a/src/cmd/internal/obj/x86/obj6_test.go +++ b/src/cmd/internal/obj/x86/obj6_test.go @@ -99,7 +99,8 @@ func asmOutput(t *testing.T, s string) []byte { testenv.GoToolPath(t), "tool", "asm", "-S", "-dynlink", "-o", filepath.Join(tmpdir, "output.6"), tmpfile.Name()) - cmd.Env = append(os.Environ(), "GOARCH=amd64", "GOOS=linux") + cmd.Env = append(os.Environ(), + "GOARCH=amd64", "GOOS=linux", "GOPATH="+filepath.Join(tmpdir, "_gopath")) asmout, err := cmd.CombinedOutput() if err != nil { t.Fatalf("error %s output %s", err, asmout) diff --git a/src/cmd/internal/obj/x86/issue19518_test.go b/src/cmd/internal/obj/x86/pcrelative_test.go similarity index 61% rename from src/cmd/internal/obj/x86/issue19518_test.go rename to src/cmd/internal/obj/x86/pcrelative_test.go index 4a29285ff1..51b60cf93e 100644 --- a/src/cmd/internal/obj/x86/issue19518_test.go +++ b/src/cmd/internal/obj/x86/pcrelative_test.go @@ -6,6 +6,7 @@ package x86_test import ( "bytes" + "fmt" "internal/testenv" "io/ioutil" "os" @@ -17,7 +18,7 @@ import ( const asmData = ` GLOBL zeros<>(SB),8,$64 TEXT ·testASM(SB),4,$0 -VMOVDQU zeros<>(SB), Y8 // PC relative relocation is off by 1, for Y8-15 +VMOVUPS zeros<>(SB), %s // PC relative relocation is off by 1, for Y8-Y15, Z8-15 and Z24-Z31 RET ` @@ -31,17 +32,13 @@ func main() { } ` -func objdumpOutput(t *testing.T) []byte { - cwd, err := os.Getwd() - if err != nil { - t.Fatal(err) - } - tmpdir, err := ioutil.TempDir("", "19518") +func objdumpOutput(t *testing.T, mname, source string) []byte { + tmpdir, err := ioutil.TempDir("", mname) if err != nil { t.Fatal(err) } defer os.RemoveAll(tmpdir) - err = ioutil.WriteFile(filepath.Join(tmpdir, "go.mod"), []byte("module issue19518\n"), 0666) + err = ioutil.WriteFile(filepath.Join(tmpdir, "go.mod"), []byte(fmt.Sprintf("module %s\n", mname)), 0666) if err != nil { t.Fatal(err) } @@ -50,7 +47,7 @@ func objdumpOutput(t *testing.T) []byte { t.Fatal(err) } defer tmpfile.Close() - _, err = tmpfile.WriteString(asmData) + _, err = tmpfile.WriteString(source) if err != nil { t.Fatal(err) } @@ -63,15 +60,14 @@ func objdumpOutput(t *testing.T) []byte { if err != nil { t.Fatal(err) } - err = os.Chdir(tmpdir) - if err != nil { - t.Fatal(err) - } + cmd := exec.Command( testenv.GoToolPath(t), "build", "-o", filepath.Join(tmpdir, "output")) - cmd.Env = append(os.Environ(), "GOARCH=amd64", "GOOS=linux") + cmd.Env = append(os.Environ(), + "GOARCH=amd64", "GOOS=linux", "GOPATH="+filepath.Join(tmpdir, "_gopath")) + cmd.Dir = tmpdir out, err := cmd.CombinedOutput() if err != nil { @@ -81,28 +77,28 @@ func objdumpOutput(t *testing.T) []byte { testenv.GoToolPath(t), "tool", "objdump", "-s", "testASM", filepath.Join(tmpdir, "output")) cmd2.Env = cmd.Env + cmd2.Dir = tmpdir objout, err := cmd2.CombinedOutput() if err != nil { t.Fatalf("error %s output %s", err, objout) } - err = os.Chdir(cwd) - if err != nil { - t.Fatal(err) - } + return objout } -func TestVexPCrelative(t *testing.T) { +func TestVexEvexPCrelative(t *testing.T) { testenv.MustHaveGoBuild(t) - objout := objdumpOutput(t) - data := bytes.Split(objout, []byte("\n")) - for idx := len(data) - 1; idx >= 0; idx-- { - // OBJDUMP doesn't know about VMOVDQU, - // so instead of checking that it was assembled correctly, - // check that RET wasn't overwritten. - if bytes.Index(data[idx], []byte("RET")) != -1 { - return +LOOP: + for _, reg := range []string{"Y0", "Y8", "Z0", "Z8", "Z16", "Z24"} { + asm := fmt.Sprintf(asmData, reg) + objout := objdumpOutput(t, "pcrelative", asm) + data := bytes.Split(objout, []byte("\n")) + for idx := len(data) - 1; idx >= 0; idx-- { + // check that RET wasn't overwritten. + if bytes.Index(data[idx], []byte("RET")) != -1 { + continue LOOP + } } + t.Errorf("VMOVUPS zeros<>(SB), %s overwrote RET", reg) } - t.Fatal("RET was overwritten") } diff --git a/src/cmd/internal/objabi/funcdata.go b/src/cmd/internal/objabi/funcdata.go index 231d11b185..addbd2ac88 100644 --- a/src/cmd/internal/objabi/funcdata.go +++ b/src/cmd/internal/objabi/funcdata.go @@ -11,14 +11,15 @@ package objabi // ../../../runtime/symtab.go. const ( - PCDATA_StackMapIndex = 0 - PCDATA_InlTreeIndex = 1 - PCDATA_RegMapIndex = 2 + PCDATA_RegMapIndex = 0 + PCDATA_StackMapIndex = 1 + PCDATA_InlTreeIndex = 2 + FUNCDATA_ArgsPointerMaps = 0 FUNCDATA_LocalsPointerMaps = 1 - FUNCDATA_InlTree = 2 - FUNCDATA_RegPointerMaps = 3 - FUNCDATA_StackObjects = 4 + FUNCDATA_RegPointerMaps = 2 + FUNCDATA_StackObjects = 3 + FUNCDATA_InlTree = 4 // ArgsSizeUnknown is set in Func.argsize to mark all functions // whose argument size is unknown (C vararg functions, and diff --git a/src/cmd/internal/objabi/head.go b/src/cmd/internal/objabi/head.go index db2221d6b1..0a54228228 100644 --- a/src/cmd/internal/objabi/head.go +++ b/src/cmd/internal/objabi/head.go @@ -73,7 +73,7 @@ func (h *HeadType) Set(s string) error { *h = Hopenbsd case "plan9": *h = Hplan9 - case "solaris": + case "illumos", "solaris": *h = Hsolaris case "windows": *h = Hwindows diff --git a/src/cmd/internal/objabi/line.go b/src/cmd/internal/objabi/line.go index 1c671b211f..178c8363d9 100644 --- a/src/cmd/internal/objabi/line.go +++ b/src/cmd/internal/objabi/line.go @@ -7,6 +7,7 @@ package objabi import ( "os" "path/filepath" + "strings" ) // WorkingDir returns the current working directory @@ -21,32 +22,63 @@ func WorkingDir() string { return filepath.ToSlash(path) } -// AbsFile returns the absolute filename for file in the given directory. -// It also removes a leading pathPrefix, or else rewrites a leading $GOROOT -// prefix to the literal "$GOROOT". +// AbsFile returns the absolute filename for file in the given directory, +// as rewritten by the rewrites argument. +// For unrewritten paths, AbsFile rewrites a leading $GOROOT prefix to the literal "$GOROOT". // If the resulting path is the empty string, the result is "??". -func AbsFile(dir, file, pathPrefix string) string { +// +// The rewrites argument is a ;-separated list of rewrites. +// Each rewrite is of the form "prefix" or "prefix=>replace", +// where prefix must match a leading sequence of path elements +// and is either removed entirely or replaced by the replacement. +func AbsFile(dir, file, rewrites string) string { abs := file if dir != "" && !filepath.IsAbs(file) { abs = filepath.Join(dir, file) } - if pathPrefix != "" && hasPathPrefix(abs, pathPrefix) { - if abs == pathPrefix { - abs = "" - } else { - abs = abs[len(pathPrefix)+1:] + start := 0 + for i := 0; i <= len(rewrites); i++ { + if i == len(rewrites) || rewrites[i] == ';' { + if new, ok := applyRewrite(abs, rewrites[start:i]); ok { + abs = new + goto Rewritten + } + start = i + 1 } - } else if hasPathPrefix(abs, GOROOT) { + } + if hasPathPrefix(abs, GOROOT) { abs = "$GOROOT" + abs[len(GOROOT):] } + +Rewritten: if abs == "" { abs = "??" } - return abs } +// applyRewrite applies the rewrite to the path, +// returning the rewritten path and a boolean +// indicating whether the rewrite applied at all. +func applyRewrite(path, rewrite string) (string, bool) { + prefix, replace := rewrite, "" + if j := strings.LastIndex(rewrite, "=>"); j >= 0 { + prefix, replace = rewrite[:j], rewrite[j+len("=>"):] + } + + if prefix == "" || !hasPathPrefix(path, prefix) { + return path, false + } + if len(path) == len(prefix) { + return replace, true + } + if replace == "" { + return path[len(prefix)+1:], true + } + return replace + path[len(prefix):], true +} + // Does s have t as a path prefix? // That is, does s == t or does s begin with t followed by a slash? // For portability, we allow ASCII case folding, so that hasPathPrefix("a/b/c", "A/B") is true. diff --git a/src/cmd/internal/objabi/line_test.go b/src/cmd/internal/objabi/line_test.go new file mode 100644 index 0000000000..1fa0ff112c --- /dev/null +++ b/src/cmd/internal/objabi/line_test.go @@ -0,0 +1,50 @@ +// 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 objabi + +import ( + "path/filepath" + "runtime" + "testing" +) + +// On Windows, "/foo" is reported as a relative path +// (it is relative to the current drive letter), +// so we need add a drive letter to test absolute path cases. +func drive() string { + if runtime.GOOS == "windows" { + return "c:" + } + return "" +} + +var absFileTests = []struct { + dir string + file string + rewrites string + abs string +}{ + {"/d", "f", "", "/d/f"}, + {"/d", drive() + "/f", "", drive() + "/f"}, + {"/d", "f/g", "", "/d/f/g"}, + {"/d", drive() + "/f/g", "", drive() + "/f/g"}, + + {"/d", "f", "/d/f", "??"}, + {"/d", "f/g", "/d/f", "g"}, + {"/d", "f/g", "/d/f=>h", "h/g"}, + {"/d", "f/g", "/d/f=>/h", "/h/g"}, + {"/d", "f/g", "/d/f=>/h;/d/e=>/i", "/h/g"}, + {"/d", "e/f", "/d/f=>/h;/d/e=>/i", "/i/f"}, +} + +func TestAbsFile(t *testing.T) { + for _, tt := range absFileTests { + abs := filepath.FromSlash(AbsFile(filepath.FromSlash(tt.dir), filepath.FromSlash(tt.file), tt.rewrites)) + want := filepath.FromSlash(tt.abs) + if abs != want { + t.Errorf("AbsFile(%q, %q, %q) = %q, want %q", tt.dir, tt.file, tt.rewrites, abs, want) + } + } +} diff --git a/src/cmd/internal/objabi/reloctype.go b/src/cmd/internal/objabi/reloctype.go index 355882c638..5dc9356fe1 100644 --- a/src/cmd/internal/objabi/reloctype.go +++ b/src/cmd/internal/objabi/reloctype.go @@ -30,7 +30,7 @@ package objabi -type RelocType int32 +type RelocType int16 //go:generate stringer -type=RelocType const ( @@ -132,6 +132,26 @@ const ( // slot of the referenced symbol. R_ARM64_GOTPCREL + // R_ARM64_GOT resolves a GOT-relative instruction sequence, usually an adrp + // followed by another ld instruction. + R_ARM64_GOT + + // R_ARM64_PCREL resolves a PC-relative addresses instruction sequence, usually an + // adrp followed by another add instruction. + R_ARM64_PCREL + + // R_ARM64_LDST8 sets a LD/ST immediate value to bits [11:0] of a local address. + R_ARM64_LDST8 + + // R_ARM64_LDST32 sets a LD/ST immediate value to bits [11:2] of a local address. + R_ARM64_LDST32 + + // R_ARM64_LDST64 sets a LD/ST immediate value to bits [11:3] of a local address. + R_ARM64_LDST64 + + // R_ARM64_LDST128 sets a LD/ST immediate value to bits [11:4] of a local address. + R_ARM64_LDST128 + // PPC64. // R_POWER_TLS_LE is used to implement the "local exec" model for tls @@ -196,6 +216,11 @@ const ( // R_WASMIMPORT resolves to the index of the WebAssembly function import. R_WASMIMPORT + + // R_XCOFFREF (only used on aix/ppc64) prevents garbage collection by ld + // of a symbol. This isn't a real relocation, it can be placed in anywhere + // in a symbol and target any symbols. + R_XCOFFREF ) // IsDirectJump reports whether r is a relocation for a direct jump. diff --git a/src/cmd/internal/objabi/reloctype_string.go b/src/cmd/internal/objabi/reloctype_string.go index 2cd3a94045..a1c4c1aa51 100644 --- a/src/cmd/internal/objabi/reloctype_string.go +++ b/src/cmd/internal/objabi/reloctype_string.go @@ -4,9 +4,9 @@ package objabi import "strconv" -const _RelocType_name = "R_ADDRR_ADDRPOWERR_ADDRARM64R_ADDRMIPSR_ADDROFFR_WEAKADDROFFR_SIZER_CALLR_CALLARMR_CALLARM64R_CALLINDR_CALLPOWERR_CALLMIPSR_CONSTR_PCRELR_TLS_LER_TLS_IER_GOTOFFR_PLT0R_PLT1R_PLT2R_USEFIELDR_USETYPER_METHODOFFR_POWER_TOCR_GOTPCRELR_JMPMIPSR_DWARFSECREFR_DWARFFILEREFR_ARM64_TLS_LER_ARM64_TLS_IER_ARM64_GOTPCRELR_POWER_TLS_LER_POWER_TLS_IER_POWER_TLSR_ADDRPOWER_DSR_ADDRPOWER_GOTR_ADDRPOWER_PCRELR_ADDRPOWER_TOCRELR_ADDRPOWER_TOCREL_DSR_PCRELDBLR_ADDRMIPSUR_ADDRMIPSTLSR_ADDRCUOFFR_WASMIMPORT" +const _RelocType_name = "R_ADDRR_ADDRPOWERR_ADDRARM64R_ADDRMIPSR_ADDROFFR_WEAKADDROFFR_SIZER_CALLR_CALLARMR_CALLARM64R_CALLINDR_CALLPOWERR_CALLMIPSR_CONSTR_PCRELR_TLS_LER_TLS_IER_GOTOFFR_PLT0R_PLT1R_PLT2R_USEFIELDR_USETYPER_METHODOFFR_POWER_TOCR_GOTPCRELR_JMPMIPSR_DWARFSECREFR_DWARFFILEREFR_ARM64_TLS_LER_ARM64_TLS_IER_ARM64_GOTPCRELR_ARM64_GOTR_ARM64_PCRELR_ARM64_LDST8R_ARM64_LDST32R_ARM64_LDST64R_ARM64_LDST128R_POWER_TLS_LER_POWER_TLS_IER_POWER_TLSR_ADDRPOWER_DSR_ADDRPOWER_GOTR_ADDRPOWER_PCRELR_ADDRPOWER_TOCRELR_ADDRPOWER_TOCREL_DSR_PCRELDBLR_ADDRMIPSUR_ADDRMIPSTLSR_ADDRCUOFFR_WASMIMPORTR_XCOFFREF" -var _RelocType_index = [...]uint16{0, 6, 17, 28, 38, 47, 60, 66, 72, 81, 92, 101, 112, 122, 129, 136, 144, 152, 160, 166, 172, 178, 188, 197, 208, 219, 229, 238, 251, 265, 279, 293, 309, 323, 337, 348, 362, 377, 394, 412, 433, 443, 454, 467, 478, 490} +var _RelocType_index = [...]uint16{0, 6, 17, 28, 38, 47, 60, 66, 72, 81, 92, 101, 112, 122, 129, 136, 144, 152, 160, 166, 172, 178, 188, 197, 208, 219, 229, 238, 251, 265, 279, 293, 309, 320, 333, 346, 360, 374, 389, 403, 417, 428, 442, 457, 474, 492, 513, 523, 534, 547, 558, 570, 580} func (i RelocType) String() string { i -= 1 diff --git a/src/cmd/internal/objabi/typekind.go b/src/cmd/internal/objabi/typekind.go index f0e6f472e5..990ff1888d 100644 --- a/src/cmd/internal/objabi/typekind.go +++ b/src/cmd/internal/objabi/typekind.go @@ -36,6 +36,5 @@ const ( KindUnsafePointer KindDirectIface = 1 << 5 KindGCProg = 1 << 6 - KindNoPointers = 1 << 7 KindMask = (1 << 5) - 1 ) diff --git a/src/cmd/internal/objabi/util.go b/src/cmd/internal/objabi/util.go index da49f706f6..9e41b87aa4 100644 --- a/src/cmd/internal/objabi/util.go +++ b/src/cmd/internal/objabi/util.go @@ -28,9 +28,17 @@ var ( GOARM = goarm() GOMIPS = gomips() GOMIPS64 = gomips64() + GOPPC64 = goppc64() + GOWASM = gowasm() + GO_LDSO = defaultGO_LDSO Version = version ) +const ( + ElfRelocOffset = 256 + MachoRelocOffset = 2048 // reserve enough space for ELF relocations +) + func goarm() int { switch v := envOr("GOARM", defaultGOARM); v { case "5": @@ -63,6 +71,49 @@ func gomips64() string { panic("unreachable") } +func goppc64() int { + switch v := envOr("GOPPC64", defaultGOPPC64); v { + case "power8": + return 8 + case "power9": + return 9 + } + log.Fatalf("Invalid GOPPC64 value. Must be power8 or power9.") + panic("unreachable") +} + +type gowasmFeatures struct { + SignExt bool + SatConv bool +} + +func (f gowasmFeatures) String() string { + var flags []string + if f.SatConv { + flags = append(flags, "satconv") + } + if f.SignExt { + flags = append(flags, "signext") + } + return strings.Join(flags, ",") +} + +func gowasm() (f gowasmFeatures) { + for _, opt := range strings.Split(envOr("GOWASM", ""), ",") { + switch opt { + case "satconv": + f.SatConv = true + case "signext": + f.SignExt = true + case "": + // ignore + default: + log.Fatalf("Invalid GOWASM value. No such feature: " + opt) + } + } + return +} + func Getgoextlinkenabled() string { return envOr("GO_EXTLINK_ENABLED", defaultGO_EXTLINK_ENABLED) } diff --git a/src/cmd/internal/src/pos.go b/src/cmd/internal/src/pos.go index 5063b133f3..c9d3d347db 100644 --- a/src/cmd/internal/src/pos.go +++ b/src/cmd/internal/src/pos.go @@ -301,16 +301,19 @@ type lico uint32 // The bitfield order is chosen to make IsStmt be the least significant // part of a position; its use is to communicate statement edges through // instruction scrambling in code generation, not to impose an order. -// TODO: Prologue and epilogue are perhaps better handled as psuedoops for the assembler, +// TODO: Prologue and epilogue are perhaps better handled as pseudo-ops for the assembler, // because they have almost no interaction with other uses of the position. const ( - lineBits, lineMax = 20, 1< lineMax { // cannot represent line, use max. line so we have some information @@ -365,7 +378,7 @@ func makeLico(line, col uint) lico { col = colMax } // default is not-sure-if-statement - return lico(line<> lineShift } @@ -430,3 +443,7 @@ func (x lico) lineNumberHTML() string { } return fmt.Sprintf("<%s>%s%d", style, pfx, x.Line(), style) } + +func (x lico) atColumn1() lico { + return makeLico(x.Line(), 1).withIsStmt() +} diff --git a/src/cmd/internal/src/xpos.go b/src/cmd/internal/src/xpos.go index d7ec91f92c..d84543369a 100644 --- a/src/cmd/internal/src/xpos.go +++ b/src/cmd/internal/src/xpos.go @@ -60,12 +60,23 @@ func (p XPos) WithIsStmt() XPos { return p } +// WithBogusLine returns a bogus line that won't match any recorded for the source code. +// Its use is to disrupt the statements within an infinite loop so that the debugger +// will not itself loop infinitely waiting for the line number to change. +// gdb chooses not to display the bogus line; delve shows it with a complaint, but the +// alternative behavior is to hang. +func (p XPos) WithBogusLine() XPos { + p.lico = makeBogusLico() + return p +} + // WithXlogue returns the same location but marked with DWARF function prologue/epilogue func (p XPos) WithXlogue(x PosXlogue) XPos { p.lico = p.lico.withXlogue(x) return p } +// LineNumber returns a string for the line number, "?" if it is not known. func (p XPos) LineNumber() string { if !p.IsKnown() { return "?" @@ -73,6 +84,13 @@ func (p XPos) LineNumber() string { return p.lico.lineNumber() } +// FileIndex returns a smallish non-negative integer corresponding to the +// file for this source position. Smallish is relative; it can be thousands +// large, but not millions. +func (p XPos) FileIndex() int32 { + return p.index +} + func (p XPos) LineNumberHTML() string { if !p.IsKnown() { return "?" @@ -80,6 +98,12 @@ func (p XPos) LineNumberHTML() string { return p.lico.lineNumberHTML() } +// AtColumn1 returns the same location but shifted to column 1. +func (p XPos) AtColumn1() XPos { + p.lico = p.lico.atColumn1() + return p +} + // A PosTable tracks Pos -> XPos conversions and vice versa. // Its zero value is a ready-to-use PosTable. type PosTable struct { diff --git a/src/cmd/internal/sys/supported.go b/src/cmd/internal/sys/supported.go index a53da6ed2c..4162858ac1 100644 --- a/src/cmd/internal/sys/supported.go +++ b/src/cmd/internal/sys/supported.go @@ -6,6 +6,9 @@ package sys // RaceDetectorSupported reports whether goos/goarch supports the race // detector. There is a copy of this function in cmd/dist/test.go. +// Race detector only supports 48-bit VMA on arm64. But it will always +// return true for arm64, because we don't have VMA size information during +// the compile time. func RaceDetectorSupported(goos, goarch string) bool { switch goos { case "linux": @@ -27,3 +30,16 @@ func MSanSupported(goos, goarch string) bool { return false } } + +// MustLinkExternal reports whether goos/goarch requires external linking. +func MustLinkExternal(goos, goarch string) bool { + switch goos { + case "android": + return true + case "darwin": + if goarch == "arm" || goarch == "arm64" { + return true + } + } + return false +} diff --git a/src/cmd/link/dwarf_test.go b/src/cmd/link/dwarf_test.go index 710457aeb9..235db39dda 100644 --- a/src/cmd/link/dwarf_test.go +++ b/src/cmd/link/dwarf_test.go @@ -5,6 +5,8 @@ package main import ( + "bytes" + cmddwarf "cmd/internal/dwarf" "cmd/internal/objfile" "debug/dwarf" "internal/testenv" @@ -37,16 +39,30 @@ func testDWARF(t *testing.T, buildmode string, expectDWARF bool, env ...string) t.Fatalf("cmd/link is stale - run go install cmd/link") } - tmpDir, err := ioutil.TempDir("", "go-link-TestDWARF") - if err != nil { - t.Fatal("TempDir failed: ", err) - } - defer os.RemoveAll(tmpDir) - for _, prog := range []string{"testprog", "testprogcgo"} { + prog := prog + expectDWARF := expectDWARF + if runtime.GOOS == "aix" && prog == "testprogcgo" { + extld := os.Getenv("CC") + if extld == "" { + extld = "gcc" + } + expectDWARF, err = cmddwarf.IsDWARFEnabledOnAIXLd(extld) + if err != nil { + t.Fatal(err) + } + + } + t.Run(prog, func(t *testing.T) { t.Parallel() + tmpDir, err := ioutil.TempDir("", "go-link-TestDWARF") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(tmpDir) + exe := filepath.Join(tmpDir, prog+".exe") dir := "../../runtime/testdata/" + prog cmd := exec.Command(testenv.GoToolPath(t), "build", "-o", exe) @@ -71,6 +87,22 @@ func testDWARF(t *testing.T, buildmode string, expectDWARF bool, env ...string) } exe = filepath.Join(tmpDir, "go.o") } + + if runtime.GOOS == "darwin" { + if _, err = exec.LookPath("symbols"); err == nil { + // Ensure Apple's tooling can parse our object for symbols. + out, err = exec.Command("symbols", exe).CombinedOutput() + if err != nil { + t.Fatal(err) + } else { + if bytes.HasPrefix(out, []byte("Unable to find file")) { + // This failure will cause the App Store to reject our binaries. + t.Fatalf("/usr/bin/symbols %v: failed to parse file", filepath.Base(exe)) + } + } + } + } + f, err := objfile.Open(exe) if err != nil { t.Fatal(err) @@ -133,6 +165,9 @@ func testDWARF(t *testing.T, buildmode string, expectDWARF bool, env ...string) func TestDWARF(t *testing.T) { testDWARF(t, "", true) + if runtime.GOOS == "darwin" { + testDWARF(t, "c-archive", true) + } } func TestDWARFiOS(t *testing.T) { diff --git a/src/cmd/link/elf_test.go b/src/cmd/link/elf_test.go new file mode 100644 index 0000000000..3df9869284 --- /dev/null +++ b/src/cmd/link/elf_test.go @@ -0,0 +1,113 @@ +// 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. + +// +build dragonfly freebsd linux netbsd openbsd + +package main + +import ( + "internal/testenv" + "io/ioutil" + "os" + "os/exec" + "path/filepath" + "strings" + "testing" +) + +var asmSource = ` + .section .text1,"ax" +s1: + .byte 0 + .section .text2,"ax" +s2: + .byte 0 +` + +var goSource = ` +package main +func main() {} +` + +// The linker used to crash if an ELF input file had multiple text sections +// with the same name. +func TestSectionsWithSameName(t *testing.T) { + testenv.MustHaveGoBuild(t) + testenv.MustHaveCGO(t) + t.Parallel() + + objcopy, err := exec.LookPath("objcopy") + if err != nil { + t.Skipf("can't find objcopy: %v", err) + } + + dir, err := ioutil.TempDir("", "go-link-TestSectionsWithSameName") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + + gopath := filepath.Join(dir, "GOPATH") + env := append(os.Environ(), "GOPATH="+gopath) + + if err := ioutil.WriteFile(filepath.Join(dir, "go.mod"), []byte("module elf_test\n"), 0666); err != nil { + t.Fatal(err) + } + + asmFile := filepath.Join(dir, "x.s") + if err := ioutil.WriteFile(asmFile, []byte(asmSource), 0444); err != nil { + t.Fatal(err) + } + + goTool := testenv.GoToolPath(t) + cmd := exec.Command(goTool, "env", "CC") + cmd.Env = env + ccb, err := cmd.Output() + if err != nil { + t.Fatal(err) + } + cc := strings.TrimSpace(string(ccb)) + + cmd = exec.Command(goTool, "env", "GOGCCFLAGS") + cmd.Env = env + cflagsb, err := cmd.Output() + if err != nil { + t.Fatal(err) + } + cflags := strings.Fields(string(cflagsb)) + + asmObj := filepath.Join(dir, "x.o") + t.Logf("%s %v -c -o %s %s", cc, cflags, asmObj, asmFile) + if out, err := exec.Command(cc, append(cflags, "-c", "-o", asmObj, asmFile)...).CombinedOutput(); err != nil { + t.Logf("%s", out) + t.Fatal(err) + } + + asm2Obj := filepath.Join(dir, "x2.syso") + t.Logf("%s --rename-section .text2=.text1 %s %s", objcopy, asmObj, asm2Obj) + if out, err := exec.Command(objcopy, "--rename-section", ".text2=.text1", asmObj, asm2Obj).CombinedOutput(); err != nil { + t.Logf("%s", out) + t.Fatal(err) + } + + for _, s := range []string{asmFile, asmObj} { + if err := os.Remove(s); err != nil { + t.Fatal(err) + } + } + + goFile := filepath.Join(dir, "main.go") + if err := ioutil.WriteFile(goFile, []byte(goSource), 0444); err != nil { + t.Fatal(err) + } + + cmd = exec.Command(goTool, "build") + cmd.Dir = dir + cmd.Env = env + t.Logf("%s build", goTool) + if out, err := cmd.CombinedOutput(); err != nil { + t.Logf("%s", out) + t.Fatal(err) + } +} diff --git a/src/cmd/link/internal/amd64/asm.go b/src/cmd/link/internal/amd64/asm.go index e922fe2db9..7dbe99c581 100644 --- a/src/cmd/link/internal/amd64/asm.go +++ b/src/cmd/link/internal/amd64/asm.go @@ -103,13 +103,13 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { switch r.Type { default: - if r.Type >= 256 { + if r.Type >= objabi.ElfRelocOffset { ld.Errorf(s, "unexpected relocation type %d (%s)", r.Type, sym.RelocName(ctxt.Arch, r.Type)) return false } // Handle relocations found in ELF object files. - case 256 + objabi.RelocType(elf.R_X86_64_PC32): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_X86_64_PC32): if targ.Type == sym.SDYNIMPORT { ld.Errorf(s, "unexpected R_X86_64_PC32 relocation for dynamic symbol %s", targ.Name) } @@ -122,7 +122,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { r.Add += 4 return true - case 256 + objabi.RelocType(elf.R_X86_64_PC64): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_X86_64_PC64): if targ.Type == sym.SDYNIMPORT { ld.Errorf(s, "unexpected R_X86_64_PC64 relocation for dynamic symbol %s", targ.Name) } @@ -133,7 +133,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { r.Add += 8 return true - case 256 + objabi.RelocType(elf.R_X86_64_PLT32): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_X86_64_PLT32): r.Type = objabi.R_PCREL r.Add += 4 if targ.Type == sym.SDYNIMPORT { @@ -144,7 +144,9 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { return true - case 256 + objabi.RelocType(elf.R_X86_64_GOTPCREL), 256 + objabi.RelocType(elf.R_X86_64_GOTPCRELX), 256 + objabi.RelocType(elf.R_X86_64_REX_GOTPCRELX): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_X86_64_GOTPCREL), + objabi.ElfRelocOffset + objabi.RelocType(elf.R_X86_64_GOTPCRELX), + objabi.ElfRelocOffset + objabi.RelocType(elf.R_X86_64_REX_GOTPCRELX): if targ.Type != sym.SDYNIMPORT { // have symbol if r.Off >= 2 && s.P[r.Off-2] == 0x8b { @@ -167,7 +169,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { r.Add += int64(targ.Got()) return true - case 256 + objabi.RelocType(elf.R_X86_64_64): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_X86_64_64): if targ.Type == sym.SDYNIMPORT { ld.Errorf(s, "unexpected R_X86_64_64 relocation for dynamic symbol %s", targ.Name) } @@ -175,9 +177,9 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { return true // Handle relocations found in Mach-O object files. - case 512 + ld.MACHO_X86_64_RELOC_UNSIGNED*2 + 0, - 512 + ld.MACHO_X86_64_RELOC_SIGNED*2 + 0, - 512 + ld.MACHO_X86_64_RELOC_BRANCH*2 + 0: + case objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_UNSIGNED*2 + 0, + objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_SIGNED*2 + 0, + objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_BRANCH*2 + 0: // TODO: What is the difference between all these? r.Type = objabi.R_ADDR @@ -186,7 +188,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { } return true - case 512 + ld.MACHO_X86_64_RELOC_BRANCH*2 + 1: + case objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_BRANCH*2 + 1: if targ.Type == sym.SDYNIMPORT { addpltsym(ctxt, targ) r.Sym = ctxt.Syms.Lookup(".plt", 0) @@ -196,11 +198,11 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { } fallthrough - case 512 + ld.MACHO_X86_64_RELOC_UNSIGNED*2 + 1, - 512 + ld.MACHO_X86_64_RELOC_SIGNED*2 + 1, - 512 + ld.MACHO_X86_64_RELOC_SIGNED_1*2 + 1, - 512 + ld.MACHO_X86_64_RELOC_SIGNED_2*2 + 1, - 512 + ld.MACHO_X86_64_RELOC_SIGNED_4*2 + 1: + case objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_UNSIGNED*2 + 1, + objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_SIGNED*2 + 1, + objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_SIGNED_1*2 + 1, + objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_SIGNED_2*2 + 1, + objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_SIGNED_4*2 + 1: r.Type = objabi.R_PCREL if targ.Type == sym.SDYNIMPORT { @@ -208,7 +210,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { } return true - case 512 + ld.MACHO_X86_64_RELOC_GOT_LOAD*2 + 1: + case objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_GOT_LOAD*2 + 1: if targ.Type != sym.SDYNIMPORT { // have symbol // turn MOVQ of GOT entry into LEAQ of symbol itself @@ -223,7 +225,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { } fallthrough - case 512 + ld.MACHO_X86_64_RELOC_GOT*2 + 1: + case objabi.MachoRelocOffset + ld.MACHO_X86_64_RELOC_GOT*2 + 1: if targ.Type != sym.SDYNIMPORT { ld.Errorf(s, "unexpected GOT reloc for non-dynamic symbol %s", targ.Name) } @@ -333,7 +335,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { rela.AddUint64(ctxt.Arch, ld.ELF64_R_INFO(uint32(targ.Dynid), uint32(elf.R_X86_64_32))) } rela.AddUint64(ctxt.Arch, uint64(r.Add)) - r.Type = 256 // ignore during relocsym + r.Type = objabi.ElfRelocOffset // ignore during relocsym return true } @@ -359,7 +361,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { s.Value = got.Size got.AddUint64(ctxt.Arch, 0) ctxt.Syms.Lookup(".linkedit.got", 0).AddUint32(ctxt.Arch, uint32(targ.Dynid)) - r.Type = 256 // ignore during relocsym + r.Type = objabi.ElfRelocOffset // ignore during relocsym return true } } @@ -702,7 +704,9 @@ func asmb(ctxt *ld.Link) { ctxt.Out.SeekSet(int64(ld.Segdwarf.Fileoff)) ld.Dwarfblk(ctxt, int64(ld.Segdwarf.Vaddr), int64(ld.Segdwarf.Filelen)) +} +func asmb2(ctxt *ld.Link) { machlink := int64(0) if ctxt.HeadType == objabi.Hdarwin { machlink = ld.Domacholink(ctxt) diff --git a/src/cmd/link/internal/amd64/obj.go b/src/cmd/link/internal/amd64/obj.go index 87e809166a..23741eb4f6 100644 --- a/src/cmd/link/internal/amd64/obj.go +++ b/src/cmd/link/internal/amd64/obj.go @@ -34,7 +34,6 @@ import ( "cmd/internal/objabi" "cmd/internal/sys" "cmd/link/internal/ld" - "fmt" ) func Init() (*sys.Arch, ld.Arch) { @@ -55,6 +54,7 @@ func Init() (*sys.Arch, ld.Arch) { Archreloc: archreloc, Archrelocvariant: archrelocvariant, Asmb: asmb, + Asmb2: asmb2, Elfreloc1: elfreloc1, Elfsetupplt: elfsetupplt, Gentext: gentext, @@ -84,9 +84,6 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 0x200000 + int64(ld.HEADR) } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 0x200000 } @@ -99,9 +96,6 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 0x1000000 + int64(ld.HEADR) } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } case objabi.Hlinux, /* elf64 executable */ objabi.Hfreebsd, /* freebsd */ @@ -115,9 +109,6 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = (1 << 22) + int64(ld.HEADR) } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 4096 } @@ -130,19 +121,12 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 0x20000 } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 0x10000 } case objabi.Hwindows: /* PE executable */ - // ld.HEADR, ld.FlagTextAddr, ld.FlagDataAddr and ld.FlagRound are set in ld.Peinit + // ld.HEADR, ld.FlagTextAddr, ld.FlagRound are set in ld.Peinit return } - - if *ld.FlagDataAddr != 0 && *ld.FlagRound != 0 { - fmt.Printf("warning: -D0x%x is ignored because of -R0x%x\n", uint64(*ld.FlagDataAddr), uint32(*ld.FlagRound)) - } } diff --git a/src/cmd/link/internal/arm/asm.go b/src/cmd/link/internal/arm/asm.go index efcd41d72b..43d387c862 100644 --- a/src/cmd/link/internal/arm/asm.go +++ b/src/cmd/link/internal/arm/asm.go @@ -120,13 +120,13 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { switch r.Type { default: - if r.Type >= 256 { + if r.Type >= objabi.ElfRelocOffset { ld.Errorf(s, "unexpected relocation type %d (%s)", r.Type, sym.RelocName(ctxt.Arch, r.Type)) return false } // Handle relocations found in ELF object files. - case 256 + objabi.RelocType(elf.R_ARM_PLT32): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_PLT32): r.Type = objabi.R_CALLARM if targ.Type == sym.SDYNIMPORT { @@ -137,11 +137,11 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { return true - case 256 + objabi.RelocType(elf.R_ARM_THM_PC22): // R_ARM_THM_CALL + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_THM_PC22): // R_ARM_THM_CALL ld.Exitf("R_ARM_THM_CALL, are you using -marm?") return false - case 256 + objabi.RelocType(elf.R_ARM_GOT32): // R_ARM_GOT_BREL + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_GOT32): // R_ARM_GOT_BREL if targ.Type != sym.SDYNIMPORT { addgotsyminternal(ctxt, targ) } else { @@ -153,7 +153,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { r.Add += int64(targ.Got()) return true - case 256 + objabi.RelocType(elf.R_ARM_GOT_PREL): // GOT(nil) + A - nil + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_GOT_PREL): // GOT(nil) + A - nil if targ.Type != sym.SDYNIMPORT { addgotsyminternal(ctxt, targ) } else { @@ -165,19 +165,19 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { r.Add += int64(targ.Got()) + 4 return true - case 256 + objabi.RelocType(elf.R_ARM_GOTOFF): // R_ARM_GOTOFF32 + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_GOTOFF): // R_ARM_GOTOFF32 r.Type = objabi.R_GOTOFF return true - case 256 + objabi.RelocType(elf.R_ARM_GOTPC): // R_ARM_BASE_PREL + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_GOTPC): // R_ARM_BASE_PREL r.Type = objabi.R_PCREL r.Sym = ctxt.Syms.Lookup(".got", 0) r.Add += 4 return true - case 256 + objabi.RelocType(elf.R_ARM_CALL): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_CALL): r.Type = objabi.R_CALLARM if targ.Type == sym.SDYNIMPORT { addpltsym(ctxt, targ) @@ -187,13 +187,13 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { return true - case 256 + objabi.RelocType(elf.R_ARM_REL32): // R_ARM_REL32 + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_REL32): // R_ARM_REL32 r.Type = objabi.R_PCREL r.Add += 4 return true - case 256 + objabi.RelocType(elf.R_ARM_ABS32): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_ABS32): if targ.Type == sym.SDYNIMPORT { ld.Errorf(s, "unexpected R_ARM_ABS32 relocation for dynamic symbol %s", targ.Name) } @@ -201,7 +201,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { return true // we can just ignore this, because we are targeting ARM V5+ anyway - case 256 + objabi.RelocType(elf.R_ARM_V4BX): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_V4BX): if r.Sym != nil { // R_ARM_V4BX is ABS relocation, so this symbol is a dummy symbol, ignore it r.Sym.Type = 0 @@ -210,8 +210,8 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { r.Sym = nil return true - case 256 + objabi.RelocType(elf.R_ARM_PC24), - 256 + objabi.RelocType(elf.R_ARM_JUMP24): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_PC24), + objabi.ElfRelocOffset + objabi.RelocType(elf.R_ARM_JUMP24): r.Type = objabi.R_CALLARM if targ.Type == sym.SDYNIMPORT { addpltsym(ctxt, targ) @@ -800,7 +800,9 @@ func asmb(ctxt *ld.Link) { ctxt.Out.SeekSet(int64(ld.Segdwarf.Fileoff)) ld.Dwarfblk(ctxt, int64(ld.Segdwarf.Vaddr), int64(ld.Segdwarf.Filelen)) +} +func asmb2(ctxt *ld.Link) { machlink := uint32(0) if ctxt.HeadType == objabi.Hdarwin { machlink = uint32(ld.Domacholink(ctxt)) diff --git a/src/cmd/link/internal/arm/obj.go b/src/cmd/link/internal/arm/obj.go index 77716bb954..45a406ec06 100644 --- a/src/cmd/link/internal/arm/obj.go +++ b/src/cmd/link/internal/arm/obj.go @@ -34,7 +34,6 @@ import ( "cmd/internal/objabi" "cmd/internal/sys" "cmd/link/internal/ld" - "fmt" ) func Init() (*sys.Arch, ld.Arch) { @@ -53,6 +52,7 @@ func Init() (*sys.Arch, ld.Arch) { Archrelocvariant: archrelocvariant, Trampoline: trampoline, Asmb: asmb, + Asmb2: asmb2, Elfreloc1: elfreloc1, Elfsetupplt: elfsetupplt, Gentext: gentext, @@ -81,9 +81,6 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 4128 } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 4096 } @@ -99,9 +96,6 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 0x10000 + int64(ld.HEADR) } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 0x10000 } @@ -113,9 +107,6 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 0x20000 } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 0x10000 } @@ -125,19 +116,12 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 4096 + int64(ld.HEADR) } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 4096 } case objabi.Hwindows: /* PE executable */ - // ld.HEADR, ld.FlagTextAddr, ld.FlagDataAddr and ld.FlagRound are set in ld.Peinit + // ld.HEADR, ld.FlagTextAddr, ld.FlagRound are set in ld.Peinit return } - - if *ld.FlagDataAddr != 0 && *ld.FlagRound != 0 { - fmt.Printf("warning: -D0x%x is ignored because of -R0x%x\n", uint64(*ld.FlagDataAddr), uint32(*ld.FlagRound)) - } } diff --git a/src/cmd/link/internal/arm64/asm.go b/src/cmd/link/internal/arm64/asm.go index 5ba038d147..e199b22651 100644 --- a/src/cmd/link/internal/arm64/asm.go +++ b/src/cmd/link/internal/arm64/asm.go @@ -92,11 +92,117 @@ func gentext(ctxt *ld.Link) { initarray_entry.AddAddr(ctxt.Arch, initfunc) } -// adddynrel implements just enough to support external linking to -// the system libc functions used by the runtime. func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { targ := r.Sym + switch r.Type { + default: + if r.Type >= objabi.ElfRelocOffset { + ld.Errorf(s, "unexpected relocation type %d (%s)", r.Type, sym.RelocName(ctxt.Arch, r.Type)) + return false + } + + // Handle relocations found in ELF object files. + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_AARCH64_PREL32): + if targ.Type == sym.SDYNIMPORT { + ld.Errorf(s, "unexpected R_AARCH64_PREL32 relocation for dynamic symbol %s", targ.Name) + } + // TODO(mwhudson): the test of VisibilityHidden here probably doesn't make + // sense and should be removed when someone has thought about it properly. + if (targ.Type == 0 || targ.Type == sym.SXREF) && !targ.Attr.VisibilityHidden() { + ld.Errorf(s, "unknown symbol %s in pcrel", targ.Name) + } + r.Type = objabi.R_PCREL + r.Add += 4 + return true + + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_AARCH64_PREL64): + if targ.Type == sym.SDYNIMPORT { + ld.Errorf(s, "unexpected R_AARCH64_PREL64 relocation for dynamic symbol %s", targ.Name) + } + if targ.Type == 0 || targ.Type == sym.SXREF { + ld.Errorf(s, "unknown symbol %s in pcrel", targ.Name) + } + r.Type = objabi.R_PCREL + r.Add += 8 + return true + + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_AARCH64_CALL26), + objabi.ElfRelocOffset + objabi.RelocType(elf.R_AARCH64_JUMP26): + if targ.Type == sym.SDYNIMPORT { + addpltsym(ctxt, targ) + r.Sym = ctxt.Syms.Lookup(".plt", 0) + r.Add += int64(targ.Plt()) + } + if (targ.Type == 0 || targ.Type == sym.SXREF) && !targ.Attr.VisibilityHidden() { + ld.Errorf(s, "unknown symbol %s in callarm64", targ.Name) + } + r.Type = objabi.R_CALLARM64 + return true + + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_AARCH64_ADR_GOT_PAGE), + objabi.ElfRelocOffset + objabi.RelocType(elf.R_AARCH64_LD64_GOT_LO12_NC): + if targ.Type != sym.SDYNIMPORT { + // have symbol + // TODO: turn LDR of GOT entry into ADR of symbol itself + } + + // fall back to using GOT + // TODO: just needs relocation, no need to put in .dynsym + addgotsym(ctxt, targ) + + r.Type = objabi.R_ARM64_GOT + r.Sym = ctxt.Syms.Lookup(".got", 0) + r.Add += int64(targ.Got()) + return true + + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_AARCH64_ADR_PREL_PG_HI21), + objabi.ElfRelocOffset + objabi.RelocType(elf.R_AARCH64_ADD_ABS_LO12_NC): + if targ.Type == sym.SDYNIMPORT { + ld.Errorf(s, "unexpected relocation for dynamic symbol %s", targ.Name) + } + if targ.Type == 0 || targ.Type == sym.SXREF { + ld.Errorf(s, "unknown symbol %s", targ.Name) + } + r.Type = objabi.R_ARM64_PCREL + return true + + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_AARCH64_ABS64): + if targ.Type == sym.SDYNIMPORT { + ld.Errorf(s, "unexpected R_AARCH64_ABS64 relocation for dynamic symbol %s", targ.Name) + } + r.Type = objabi.R_ADDR + return true + + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_AARCH64_LDST8_ABS_LO12_NC): + if targ.Type == sym.SDYNIMPORT { + ld.Errorf(s, "unexpected relocation for dynamic symbol %s", targ.Name) + } + r.Type = objabi.R_ARM64_LDST8 + return true + + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_AARCH64_LDST32_ABS_LO12_NC): + if targ.Type == sym.SDYNIMPORT { + ld.Errorf(s, "unexpected relocation for dynamic symbol %s", targ.Name) + } + r.Type = objabi.R_ARM64_LDST32 + return true + + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_AARCH64_LDST64_ABS_LO12_NC): + if targ.Type == sym.SDYNIMPORT { + ld.Errorf(s, "unexpected relocation for dynamic symbol %s", targ.Name) + } + r.Type = objabi.R_ARM64_LDST64 + return true + + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_AARCH64_LDST128_ABS_LO12_NC): + if targ.Type == sym.SDYNIMPORT { + ld.Errorf(s, "unexpected relocation for dynamic symbol %s", targ.Name) + } + r.Type = objabi.R_ARM64_LDST128 + return true + } + switch r.Type { case objabi.R_CALL, objabi.R_PCREL, @@ -109,8 +215,85 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { // External linker will do this relocation. return true } + + case objabi.R_ADDR: + if s.Type == sym.STEXT && ctxt.IsELF { + // The code is asking for the address of an external + // function. We provide it with the address of the + // correspondent GOT symbol. + addgotsym(ctxt, targ) + + r.Sym = ctxt.Syms.Lookup(".got", 0) + r.Add += int64(targ.Got()) + return true + } + + // Process dynamic relocations for the data sections. + if ctxt.BuildMode == ld.BuildModePIE && ctxt.LinkMode == ld.LinkInternal { + // When internally linking, generate dynamic relocations + // for all typical R_ADDR relocations. The exception + // are those R_ADDR that are created as part of generating + // the dynamic relocations and must be resolved statically. + // + // There are three phases relevant to understanding this: + // + // dodata() // we are here + // address() // symbol address assignment + // reloc() // resolution of static R_ADDR relocs + // + // At this point symbol addresses have not been + // assigned yet (as the final size of the .rela section + // will affect the addresses), and so we cannot write + // the Elf64_Rela.r_offset now. Instead we delay it + // until after the 'address' phase of the linker is + // complete. We do this via Addaddrplus, which creates + // a new R_ADDR relocation which will be resolved in + // the 'reloc' phase. + // + // These synthetic static R_ADDR relocs must be skipped + // now, or else we will be caught in an infinite loop + // of generating synthetic relocs for our synthetic + // relocs. + // + // Furthermore, the rela sections contain dynamic + // relocations with R_ADDR relocations on + // Elf64_Rela.r_offset. This field should contain the + // symbol offset as determined by reloc(), not the + // final dynamically linked address as a dynamic + // relocation would provide. + switch s.Name { + case ".dynsym", ".rela", ".rela.plt", ".got.plt", ".dynamic": + return false + } + } else { + // Either internally linking a static executable, + // in which case we can resolve these relocations + // statically in the 'reloc' phase, or externally + // linking, in which case the relocation will be + // prepared in the 'reloc' phase and passed to the + // external linker in the 'asmb' phase. + if s.Type != sym.SDATA && s.Type != sym.SRODATA { + break + } + } + + if ctxt.IsELF { + // TODO: We generate a R_AARCH64_ABS64 relocation for every R_ADDR, even + // though it would be more efficient (for the dynamic linker) if we + // generated R_AARCH64_RELATIVE instead. + ld.Adddynsym(ctxt, targ) + rela := ctxt.Syms.Lookup(".rela", 0) + rela.AddAddrPlus(ctxt.Arch, s, int64(r.Off)) + if r.Siz == 8 { + rela.AddUint64(ctxt.Arch, ld.ELF64_R_INFO(uint32(targ.Dynid), uint32(elf.R_AARCH64_ABS64))) + } else { + ld.Errorf(s, "unexpected relocation for dynamic symbol %s", targ.Name) + } + rela.AddUint64(ctxt.Arch, uint64(r.Add)) + r.Type = objabi.ElfRelocOffset // ignore during relocsym + return true + } } - log.Fatalf("adddynrel not implemented for relocation type %d (%s)", r.Type, sym.RelocName(ctxt.Arch, r.Type)) return false } @@ -160,11 +343,6 @@ func elfreloc1(ctxt *ld.Link, r *sym.Reloc, sectoff int64) bool { return true } -func elfsetupplt(ctxt *ld.Link) { - // TODO(aram) - return -} - func machoreloc1(arch *sys.Arch, out *ld.OutBuf, s *sym.Symbol, r *sym.Reloc, sectoff int64) bool { var v uint32 @@ -331,8 +509,10 @@ func archreloc(ctxt *ld.Link, r *sym.Reloc, s *sym.Symbol, val int64) (int64, bo switch r.Type { case objabi.R_CONST: return r.Add, true + case objabi.R_GOTOFF: return ld.Symaddr(r.Sym) + r.Add - ld.Symaddr(ctxt.Syms.Lookup(".got", 0)), true + case objabi.R_ADDRARM64: t := ld.Symaddr(r.Sym) + r.Add - ((s.Value + int64(r.Off)) &^ 0xfff) if t >= 1<<32 || t < -1<<32 { @@ -357,9 +537,10 @@ func archreloc(ctxt *ld.Link, r *sym.Reloc, s *sym.Symbol, val int64) (int64, bo return int64(o0)<<32 | int64(o1), true } return int64(o1)<<32 | int64(o0), true + case objabi.R_ARM64_TLS_LE: r.Done = false - if ctxt.HeadType != objabi.Hlinux { + if ctxt.HeadType == objabi.Hdarwin { ld.Errorf(s, "TLS reloc on unsupported OS %v", ctxt.HeadType) } // The TCB is two pointers. This is not documented anywhere, but is @@ -369,12 +550,136 @@ func archreloc(ctxt *ld.Link, r *sym.Reloc, s *sym.Symbol, val int64) (int64, bo ld.Errorf(s, "TLS offset out of range %d", v) } return val | (v << 5), true + + case objabi.R_ARM64_TLS_IE: + if ctxt.BuildMode == ld.BuildModePIE && ctxt.IsELF { + // We are linking the final executable, so we + // can optimize any TLS IE relocation to LE. + r.Done = false + if ctxt.HeadType != objabi.Hlinux { + ld.Errorf(s, "TLS reloc on unsupported OS %v", ctxt.HeadType) + } + + // The TCB is two pointers. This is not documented anywhere, but is + // de facto part of the ABI. + v := ld.Symaddr(r.Sym) + int64(2*ctxt.Arch.PtrSize) + r.Add + if v < 0 || v >= 32678 { + ld.Errorf(s, "TLS offset out of range %d", v) + } + + var o0, o1 uint32 + if ctxt.Arch.ByteOrder == binary.BigEndian { + o0 = uint32(val >> 32) + o1 = uint32(val) + } else { + o0 = uint32(val) + o1 = uint32(val >> 32) + } + + // R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 + // turn ADRP to MOVZ + o0 = 0xd2a00000 | uint32(o0&0x1f) | (uint32((v>>16)&0xffff) << 5) + // R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC + // turn LD64 to MOVK + if v&3 != 0 { + ld.Errorf(s, "invalid address: %x for relocation type: R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC", v) + } + o1 = 0xf2800000 | uint32(o1&0x1f) | (uint32(v&0xffff) << 5) + + // when laid out, the instruction order must always be o0, o1. + if ctxt.Arch.ByteOrder == binary.BigEndian { + return int64(o0)<<32 | int64(o1), true + } + return int64(o1)<<32 | int64(o0), true + } else { + log.Fatalf("cannot handle R_ARM64_TLS_IE (sym %s) when linking internally", s.Name) + } + case objabi.R_CALLARM64: - t := (ld.Symaddr(r.Sym) + r.Add) - (s.Value + int64(r.Off)) + var t int64 + if r.Sym.Type == sym.SDYNIMPORT { + t = (ld.Symaddr(ctxt.Syms.Lookup(".plt", 0)) + r.Add) - (s.Value + int64(r.Off)) + } else { + t = (ld.Symaddr(r.Sym) + r.Add) - (s.Value + int64(r.Off)) + } if t >= 1<<27 || t < -1<<27 { ld.Errorf(s, "program too large, call relocation distance = %d", t) } return val | ((t >> 2) & 0x03ffffff), true + + case objabi.R_ARM64_GOT: + if s.P[r.Off+3]&0x9f == 0x90 { + // R_AARCH64_ADR_GOT_PAGE + // patch instruction: adrp + t := ld.Symaddr(r.Sym) + r.Add - ((s.Value + int64(r.Off)) &^ 0xfff) + if t >= 1<<32 || t < -1<<32 { + ld.Errorf(s, "program too large, address relocation distance = %d", t) + } + var o0 uint32 + o0 |= (uint32((t>>12)&3) << 29) | (uint32((t>>12>>2)&0x7ffff) << 5) + return val | int64(o0), true + } else if s.P[r.Off+3] == 0xf9 { + // R_AARCH64_LD64_GOT_LO12_NC + // patch instruction: ldr + t := ld.Symaddr(r.Sym) + r.Add - ((s.Value + int64(r.Off)) &^ 0xfff) + if t&7 != 0 { + ld.Errorf(s, "invalid address: %x for relocation type: R_AARCH64_LD64_GOT_LO12_NC", t) + } + var o1 uint32 + o1 |= uint32(t&0xfff) << (10 - 3) + return val | int64(uint64(o1)), true + } else { + ld.Errorf(s, "unsupported instruction for %v R_GOTARM64", s.P[r.Off:r.Off+4]) + } + + case objabi.R_ARM64_PCREL: + if s.P[r.Off+3]&0x9f == 0x90 { + // R_AARCH64_ADR_PREL_PG_HI21 + // patch instruction: adrp + t := ld.Symaddr(r.Sym) + r.Add - ((s.Value + int64(r.Off)) &^ 0xfff) + if t >= 1<<32 || t < -1<<32 { + ld.Errorf(s, "program too large, address relocation distance = %d", t) + } + o0 := (uint32((t>>12)&3) << 29) | (uint32((t>>12>>2)&0x7ffff) << 5) + return val | int64(o0), true + } else if s.P[r.Off+3]&0x91 == 0x91 { + // R_AARCH64_ADD_ABS_LO12_NC + // patch instruction: add + t := ld.Symaddr(r.Sym) + r.Add - ((s.Value + int64(r.Off)) &^ 0xfff) + o1 := uint32(t&0xfff) << 10 + return val | int64(o1), true + } else { + ld.Errorf(s, "unsupported instruction for %v R_PCRELARM64", s.P[r.Off:r.Off+4]) + } + + case objabi.R_ARM64_LDST8: + t := ld.Symaddr(r.Sym) + r.Add - ((s.Value + int64(r.Off)) &^ 0xfff) + o0 := uint32(t&0xfff) << 10 + return val | int64(o0), true + + case objabi.R_ARM64_LDST32: + t := ld.Symaddr(r.Sym) + r.Add - ((s.Value + int64(r.Off)) &^ 0xfff) + if t&3 != 0 { + ld.Errorf(s, "invalid address: %x for relocation type: R_AARCH64_LDST32_ABS_LO12_NC", t) + } + o0 := (uint32(t&0xfff) >> 2) << 10 + return val | int64(o0), true + + case objabi.R_ARM64_LDST64: + t := ld.Symaddr(r.Sym) + r.Add - ((s.Value + int64(r.Off)) &^ 0xfff) + if t&7 != 0 { + ld.Errorf(s, "invalid address: %x for relocation type: R_AARCH64_LDST64_ABS_LO12_NC", t) + } + o0 := (uint32(t&0xfff) >> 3) << 10 + return val | int64(o0), true + + case objabi.R_ARM64_LDST128: + t := ld.Symaddr(r.Sym) + r.Add - ((s.Value + int64(r.Off)) &^ 0xfff) + if t&15 != 0 { + ld.Errorf(s, "invalid address: %x for relocation type: R_AARCH64_LDST128_ABS_LO12_NC", t) + } + o0 := (uint32(t&0xfff) >> 4) << 10 + return val | int64(o0), true } return val, false @@ -385,6 +690,118 @@ func archrelocvariant(ctxt *ld.Link, r *sym.Reloc, s *sym.Symbol, t int64) int64 return -1 } +func elfsetupplt(ctxt *ld.Link) { + plt := ctxt.Syms.Lookup(".plt", 0) + gotplt := ctxt.Syms.Lookup(".got.plt", 0) + if plt.Size == 0 { + // stp x16, x30, [sp, #-16]! + // identifying information + plt.AddUint32(ctxt.Arch, 0xa9bf7bf0) + + // the following two instructions (adrp + ldr) load *got[2] into x17 + // adrp x16, &got[0] + plt.AddAddrPlus4(gotplt, 16) + plt.SetUint32(ctxt.Arch, plt.Size-4, 0x90000010) + plt.R[len(plt.R)-1].Type = objabi.R_ARM64_GOT + + // is the offset value of &got[2] to &got[0], the same below + // ldr x17, [x16, ] + plt.AddAddrPlus4(gotplt, 16) + plt.SetUint32(ctxt.Arch, plt.Size-4, 0xf9400211) + plt.R[len(plt.R)-1].Type = objabi.R_ARM64_GOT + + // add x16, x16, + plt.AddAddrPlus4(gotplt, 16) + plt.SetUint32(ctxt.Arch, plt.Size-4, 0x91000210) + plt.R[len(plt.R)-1].Type = objabi.R_ARM64_PCREL + + // br x17 + plt.AddUint32(ctxt.Arch, 0xd61f0220) + + // 3 nop for place holder + plt.AddUint32(ctxt.Arch, 0xd503201f) + plt.AddUint32(ctxt.Arch, 0xd503201f) + plt.AddUint32(ctxt.Arch, 0xd503201f) + + // check gotplt.size == 0 + if gotplt.Size != 0 { + ld.Errorf(gotplt, "got.plt is not empty at the very beginning") + } + gotplt.AddAddrPlus(ctxt.Arch, ctxt.Syms.Lookup(".dynamic", 0), 0) + + gotplt.AddUint64(ctxt.Arch, 0) + gotplt.AddUint64(ctxt.Arch, 0) + } +} + +func addpltsym(ctxt *ld.Link, s *sym.Symbol) { + if s.Plt() >= 0 { + return + } + + ld.Adddynsym(ctxt, s) + + if ctxt.IsELF { + plt := ctxt.Syms.Lookup(".plt", 0) + gotplt := ctxt.Syms.Lookup(".got.plt", 0) + rela := ctxt.Syms.Lookup(".rela.plt", 0) + if plt.Size == 0 { + elfsetupplt(ctxt) + } + + // adrp x16, &got.plt[0] + plt.AddAddrPlus4(gotplt, gotplt.Size) + plt.SetUint32(ctxt.Arch, plt.Size-4, 0x90000010) + plt.R[len(plt.R)-1].Type = objabi.R_ARM64_GOT + + // is the offset value of &got.plt[n] to &got.plt[0] + // ldr x17, [x16, ] + plt.AddAddrPlus4(gotplt, gotplt.Size) + plt.SetUint32(ctxt.Arch, plt.Size-4, 0xf9400211) + plt.R[len(plt.R)-1].Type = objabi.R_ARM64_GOT + + // add x16, x16, + plt.AddAddrPlus4(gotplt, gotplt.Size) + plt.SetUint32(ctxt.Arch, plt.Size-4, 0x91000210) + plt.R[len(plt.R)-1].Type = objabi.R_ARM64_PCREL + + // br x17 + plt.AddUint32(ctxt.Arch, 0xd61f0220) + + // add to got.plt: pointer to plt[0] + gotplt.AddAddrPlus(ctxt.Arch, plt, 0) + + // rela + rela.AddAddrPlus(ctxt.Arch, gotplt, gotplt.Size-8) + rela.AddUint64(ctxt.Arch, ld.ELF64_R_INFO(uint32(s.Dynid), uint32(elf.R_AARCH64_JUMP_SLOT))) + rela.AddUint64(ctxt.Arch, 0) + + s.SetPlt(int32(plt.Size - 16)) + } else { + ld.Errorf(s, "addpltsym: unsupported binary format") + } +} + +func addgotsym(ctxt *ld.Link, s *sym.Symbol) { + if s.Got() >= 0 { + return + } + + ld.Adddynsym(ctxt, s) + got := ctxt.Syms.Lookup(".got", 0) + s.SetGot(int32(got.Size)) + got.AddUint64(ctxt.Arch, 0) + + if ctxt.IsELF { + rela := ctxt.Syms.Lookup(".rela", 0) + rela.AddAddrPlus(ctxt.Arch, got, int64(s.Got())) + rela.AddUint64(ctxt.Arch, ld.ELF64_R_INFO(uint32(s.Dynid), uint32(elf.R_AARCH64_GLOB_DAT))) + rela.AddUint64(ctxt.Arch, 0) + } else { + ld.Errorf(s, "addgotsym: unsupported binary format") + } +} + func asmb(ctxt *ld.Link) { if ctxt.Debugvlog != 0 { ctxt.Logf("%5.2f asmb\n", ld.Cputime()) @@ -426,7 +843,9 @@ func asmb(ctxt *ld.Link) { ctxt.Out.SeekSet(int64(ld.Segdwarf.Fileoff)) ld.Dwarfblk(ctxt, int64(ld.Segdwarf.Vaddr), int64(ld.Segdwarf.Filelen)) +} +func asmb2(ctxt *ld.Link) { machlink := uint32(0) if ctxt.HeadType == objabi.Hdarwin { machlink = uint32(ld.Domacholink(ctxt)) diff --git a/src/cmd/link/internal/arm64/obj.go b/src/cmd/link/internal/arm64/obj.go index 405d22d74f..7c6662302f 100644 --- a/src/cmd/link/internal/arm64/obj.go +++ b/src/cmd/link/internal/arm64/obj.go @@ -34,7 +34,6 @@ import ( "cmd/internal/objabi" "cmd/internal/sys" "cmd/link/internal/ld" - "fmt" ) func Init() (*sys.Arch, ld.Arch) { @@ -52,6 +51,7 @@ func Init() (*sys.Arch, ld.Arch) { Archreloc: archreloc, Archrelocvariant: archrelocvariant, Asmb: asmb, + Asmb2: asmb2, Elfreloc1: elfreloc1, Elfsetupplt: elfsetupplt, Gentext: gentext, @@ -60,8 +60,8 @@ func Init() (*sys.Arch, ld.Arch) { Linuxdynld: "/lib/ld-linux-aarch64.so.1", Freebsddynld: "XXX", - Openbsddynld: "XXX", - Netbsddynld: "XXX", + Openbsddynld: "/usr/libexec/ld.so", + Netbsddynld: "/libexec/ld.elf_so", Dragonflydynld: "XXX", Solarisdynld: "XXX", } @@ -80,22 +80,18 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 4096 + int64(ld.HEADR) } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 4096 } - case objabi.Hlinux: /* arm64 elf */ + case objabi.Hlinux, /* arm64 elf */ + objabi.Hnetbsd, + objabi.Hopenbsd: ld.Elfinit(ctxt) ld.HEADR = ld.ELFRESERVE if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 0x10000 + int64(ld.HEADR) } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 0x10000 } @@ -105,9 +101,6 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 4096 + int64(ld.HEADR) } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 4096 } @@ -119,15 +112,8 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 0x20000 } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 0x10000 } } - - if *ld.FlagDataAddr != 0 && *ld.FlagRound != 0 { - fmt.Printf("warning: -D0x%x is ignored because of -R0x%x\n", uint64(*ld.FlagDataAddr), uint32(*ld.FlagRound)) - } } diff --git a/src/cmd/link/internal/ld/ar.go b/src/cmd/link/internal/ld/ar.go index f41e30d6e7..4a20d96f96 100644 --- a/src/cmd/link/internal/ld/ar.go +++ b/src/cmd/link/internal/ld/ar.go @@ -126,7 +126,7 @@ func hostArchive(ctxt *Link, name string) { libgcc := sym.Library{Pkg: "libgcc"} h := ldobj(ctxt, f, &libgcc, l, pname, name) - f.Seek(h.off, 0) + f.MustSeek(h.off, 0) h.ld(ctxt, f, h.pkg, h.length, h.pn) } diff --git a/src/cmd/link/internal/ld/config.go b/src/cmd/link/internal/ld/config.go index 60b6491859..8525a033da 100644 --- a/src/cmd/link/internal/ld/config.go +++ b/src/cmd/link/internal/ld/config.go @@ -38,7 +38,7 @@ func (mode *BuildMode) Set(s string) error { *mode = BuildModeExe case "pie": switch objabi.GOOS { - case "android", "linux": + case "aix", "android", "linux": case "darwin", "freebsd": switch objabi.GOARCH { case "amd64": @@ -51,7 +51,7 @@ func (mode *BuildMode) Set(s string) error { *mode = BuildModePIE case "c-archive": switch objabi.GOOS { - case "darwin", "linux": + case "aix", "darwin", "linux": case "freebsd": switch objabi.GOARCH { case "amd64": @@ -175,13 +175,8 @@ func mustLinkExternal(ctxt *Link) (res bool, reason string) { }() } - switch objabi.GOOS { - case "android": - return true, "android" - case "darwin": - if ctxt.Arch.InFamily(sys.ARM, sys.ARM64) { - return true, "iOS" - } + if sys.MustLinkExternal(objabi.GOOS, objabi.GOARCH) { + return true, fmt.Sprintf("%s/%s requires external linking", objabi.GOOS, objabi.GOARCH) } if *flagMsan { @@ -189,17 +184,16 @@ func mustLinkExternal(ctxt *Link) (res bool, reason string) { } // Internally linking cgo is incomplete on some architectures. - // https://golang.org/issue/10373 // https://golang.org/issue/14449 // https://golang.org/issue/21961 - if iscgo && ctxt.Arch.InFamily(sys.ARM64, sys.MIPS64, sys.MIPS, sys.PPC64) { + if iscgo && ctxt.Arch.InFamily(sys.MIPS64, sys.MIPS, sys.PPC64) { return true, objabi.GOARCH + " does not support internal cgo" } // When the race flag is set, the LLVM tsan relocatable file is linked // into the final binary, which means external linking is required because // internal linking does not support it. - if *flagRace && ctxt.Arch.InFamily(sys.PPC64, sys.ARM64) { + if *flagRace && ctxt.Arch.InFamily(sys.PPC64) { return true, "race on " + objabi.GOARCH } @@ -211,7 +205,7 @@ func mustLinkExternal(ctxt *Link) (res bool, reason string) { return true, "buildmode=c-shared" case BuildModePIE: switch objabi.GOOS + "/" + objabi.GOARCH { - case "linux/amd64": + case "linux/amd64", "linux/arm64": default: // Internal linking does not support TLS_IE. return true, "buildmode=pie" @@ -247,7 +241,7 @@ func determineLinkMode(ctxt *Link) { } ctxt.LinkMode = LinkInternal case "1": - if objabi.GOARCH == "ppc64" { + if objabi.GOARCH == "ppc64" && objabi.GOOS != "aix" { Exitf("external linking requested via GO_EXTLINK_ENABLED but not supported for %s/ppc64", objabi.GOOS) } ctxt.LinkMode = LinkExternal @@ -257,11 +251,11 @@ func determineLinkMode(ctxt *Link) { } else if iscgo && externalobj { ctxt.LinkMode = LinkExternal } else if ctxt.BuildMode == BuildModePIE { - ctxt.LinkMode = LinkExternal // https://golang.org/issue/18968 + ctxt.LinkMode = LinkExternal } else { ctxt.LinkMode = LinkInternal } - if objabi.GOARCH == "ppc64" && ctxt.LinkMode == LinkExternal { + if objabi.GOARCH == "ppc64" && objabi.GOOS != "aix" && ctxt.LinkMode == LinkExternal { Exitf("external linking is not supported for %s/ppc64", objabi.GOOS) } } @@ -270,7 +264,7 @@ func determineLinkMode(ctxt *Link) { Exitf("internal linking requested but external linking required: %s", reason) } case LinkExternal: - if objabi.GOARCH == "ppc64" { + if objabi.GOARCH == "ppc64" && objabi.GOOS != "aix" { Exitf("external linking not supported for %s/ppc64", objabi.GOOS) } } diff --git a/src/cmd/link/internal/ld/data.go b/src/cmd/link/internal/ld/data.go index e0fad1acfd..8e35f5c9dc 100644 --- a/src/cmd/link/internal/ld/data.go +++ b/src/cmd/link/internal/ld/data.go @@ -32,6 +32,7 @@ package ld import ( + "bufio" "bytes" "cmd/internal/gcprog" "cmd/internal/objabi" @@ -126,6 +127,15 @@ func trampoline(ctxt *Link, s *sym.Symbol) { // This is a performance-critical function for the linker; be careful // to avoid introducing unnecessary allocations in the main loop. func relocsym(ctxt *Link, s *sym.Symbol) { + if len(s.R) == 0 { + return + } + if s.Attr.ReadOnly() { + // The symbol's content is backed by read-only memory. + // Copy it to writable memory to apply relocations. + s.P = append([]byte(nil), s.P...) + s.Attr.Set(sym.AttrReadOnly, false) + } for ri := int32(0); ri < int32(len(s.R)); ri++ { r := &s.R[ri] if r.Done { @@ -148,7 +158,7 @@ func relocsym(ctxt *Link, s *sym.Symbol) { // When putting the runtime but not main into a shared library // these symbols are undefined and that's OK. if ctxt.BuildMode == BuildModeShared { - if r.Sym.Name == "main.main" || r.Sym.Name == "main.init" { + if r.Sym.Name == "main.main" || r.Sym.Name == "main..inittask" { r.Sym.Type = sym.SDYNIMPORT } else if strings.HasPrefix(r.Sym.Name, "go.info.") { // Skip go.info symbols. They are only needed to communicate @@ -161,18 +171,12 @@ func relocsym(ctxt *Link, s *sym.Symbol) { } } - if r.Type >= 256 { + if r.Type >= objabi.ElfRelocOffset { continue } if r.Siz == 0 { // informational relocation - no work to do continue } - if r.Type == objabi.R_DWARFFILEREF { - // These should have been processed previously during - // line table writing. - Errorf(s, "orphan R_DWARFFILEREF reloc to %v", r.Sym.Name) - continue - } // We need to be able to reference dynimport symbols when linking against // shared libraries, and Solaris, Darwin and AIX need it always @@ -185,13 +189,19 @@ func relocsym(ctxt *Link, s *sym.Symbol) { Errorf(s, "unreachable sym in relocation: %s", r.Sym.Name) } + if ctxt.LinkMode == LinkExternal { + r.InitExt() + } + // TODO(mundaym): remove this special case - see issue 14218. if ctxt.Arch.Family == sys.S390X { switch r.Type { case objabi.R_PCRELDBL: + r.InitExt() r.Type = objabi.R_PCREL r.Variant = sym.RV_390_DBL case objabi.R_CALL: + r.InitExt() r.Variant = sym.RV_390_DBL } } @@ -217,9 +227,7 @@ func relocsym(ctxt *Link, s *sym.Symbol) { Errorf(s, "unknown reloc to %v: %d (%s)", r.Sym.Name, r.Type, sym.RelocName(ctxt.Arch, r.Type)) } case objabi.R_TLS_LE: - isAndroidX86 := objabi.GOOS == "android" && (ctxt.Arch.InFamily(sys.AMD64, sys.I386)) - - if ctxt.LinkMode == LinkExternal && ctxt.IsELF && !isAndroidX86 { + if ctxt.LinkMode == LinkExternal && ctxt.IsELF { r.Done = false if r.Sym == nil { r.Sym = ctxt.Tlsg @@ -242,7 +250,7 @@ func relocsym(ctxt *Link, s *sym.Symbol) { // related to the fact that our own TLS storage happens // to take up 8 bytes. o = 8 + r.Sym.Value - } else if ctxt.IsELF || ctxt.HeadType == objabi.Hplan9 || ctxt.HeadType == objabi.Hdarwin || isAndroidX86 { + } else if ctxt.IsELF || ctxt.HeadType == objabi.Hplan9 || ctxt.HeadType == objabi.Hdarwin { o = int64(ctxt.Tlsoffset) + r.Add } else if ctxt.HeadType == objabi.Hwindows { o = r.Add @@ -250,9 +258,7 @@ func relocsym(ctxt *Link, s *sym.Symbol) { log.Fatalf("unexpected R_TLS_LE relocation for %v", ctxt.HeadType) } case objabi.R_TLS_IE: - isAndroidX86 := objabi.GOOS == "android" && (ctxt.Arch.InFamily(sys.AMD64, sys.I386)) - - if ctxt.LinkMode == LinkExternal && ctxt.IsELF && !isAndroidX86 { + if ctxt.LinkMode == LinkExternal && ctxt.IsELF { r.Done = false if r.Sym == nil { r.Sym = ctxt.Tlsg @@ -308,6 +314,8 @@ func relocsym(ctxt *Link, s *sym.Symbol) { } } else if ctxt.HeadType == objabi.Hwindows { // nothing to do + } else if ctxt.HeadType == objabi.Haix { + o = Symaddr(r.Sym) + r.Add } else { Errorf(s, "unhandled pcrel relocation to %s on %v", rs.Name, ctxt.HeadType) } @@ -476,10 +484,32 @@ func relocsym(ctxt *Link, s *sym.Symbol) { o += r.Add - (s.Value + int64(r.Off) + int64(r.Siz)) case objabi.R_SIZE: o = r.Sym.Size + r.Add + + case objabi.R_XCOFFREF: + if ctxt.HeadType != objabi.Haix { + Errorf(s, "find XCOFF R_REF on non-XCOFF files") + } + if ctxt.LinkMode != LinkExternal { + Errorf(s, "find XCOFF R_REF with internal linking") + } + r.Xsym = r.Sym + r.Xadd = r.Add + r.Done = false + + // This isn't a real relocation so it must not update + // its offset value. + continue + + case objabi.R_DWARFFILEREF: + // The final file index is saved in r.Add in dwarf.go:writelines. + o = r.Add } - if r.Variant != sym.RV_NONE { - o = thearch.Archrelocvariant(ctxt, r, s, o) + if ctxt.Arch.Family == sys.PPC64 || ctxt.Arch.Family == sys.S390X { + r.InitExt() + if r.Variant != sym.RV_NONE { + o = thearch.Archrelocvariant(ctxt, r, s, o) + } } if false { @@ -622,7 +652,7 @@ func dynrelocsym(ctxt *Link, s *sym.Symbol) { continue } - if r.Sym != nil && r.Sym.Type == sym.SDYNIMPORT || r.Type >= 256 { + if r.Sym != nil && r.Sym.Type == sym.SDYNIMPORT || r.Type >= objabi.ElfRelocOffset { if r.Sym != nil && !r.Sym.Attr.Reachable() { Errorf(s, "dynamic relocation to unreachable symbol %s", r.Sym.Name) } @@ -667,7 +697,7 @@ func CodeblkPad(ctxt *Link, addr int64, size int64, pad []byte) { ctxt.Logf("codeblk [%#x,%#x) at offset %#x\n", addr, addr+size, ctxt.Out.Offset()) } - blk(ctxt, ctxt.Textp, addr, size, pad) + blk(ctxt.Out, ctxt.Textp, addr, size, pad) /* again for printing */ if !*flagA { @@ -725,7 +755,7 @@ func CodeblkPad(ctxt *Link, addr int64, size int64, pad []byte) { } } -func blk(ctxt *Link, syms []*sym.Symbol, addr, size int64, pad []byte) { +func blk(out *OutBuf, syms []*sym.Symbol, addr, size int64, pad []byte) { for i, s := range syms { if !s.Attr.SubSymbol() && s.Value >= addr { syms = syms[i:] @@ -750,13 +780,13 @@ func blk(ctxt *Link, syms []*sym.Symbol, addr, size int64, pad []byte) { errorexit() } if addr < s.Value { - ctxt.Out.WriteStringPad("", int(s.Value-addr), pad) + out.WriteStringPad("", int(s.Value-addr), pad) addr = s.Value } - ctxt.Out.Write(s.P) + out.WriteSym(s) addr += int64(len(s.P)) if addr < s.Value+s.Size { - ctxt.Out.WriteStringPad("", int(s.Value+s.Size-addr), pad) + out.WriteStringPad("", int(s.Value+s.Size-addr), pad) addr = s.Value + s.Size } if addr != s.Value+s.Size { @@ -769,17 +799,30 @@ func blk(ctxt *Link, syms []*sym.Symbol, addr, size int64, pad []byte) { } if addr < eaddr { - ctxt.Out.WriteStringPad("", int(eaddr-addr), pad) + out.WriteStringPad("", int(eaddr-addr), pad) } - ctxt.Out.Flush() + out.Flush() } func Datblk(ctxt *Link, addr int64, size int64) { + writeDatblkToOutBuf(ctxt, ctxt.Out, addr, size) +} + +// Used only on Wasm for now. +func DatblkBytes(ctxt *Link, addr int64, size int64) []byte { + buf := bytes.NewBuffer(make([]byte, 0, size)) + out := &OutBuf{w: bufio.NewWriter(buf)} + writeDatblkToOutBuf(ctxt, out, addr, size) + out.Flush() + return buf.Bytes() +} + +func writeDatblkToOutBuf(ctxt *Link, out *OutBuf, addr int64, size int64) { if *flagA { ctxt.Logf("datblk [%#x,%#x) at offset %#x\n", addr, addr+size, ctxt.Out.Offset()) } - blk(ctxt, datap, addr, size, zeros[:]) + blk(out, datap, addr, size, zeros[:]) /* again for printing */ if !*flagA { @@ -824,8 +867,10 @@ func Datblk(ctxt *Link, addr int64, size int64) { for i := range sym.R { r := &sym.R[i] // Copying sym.Reloc has measurable impact on performance rsname := "" + rsval := int64(0) if r.Sym != nil { rsname = r.Sym.Name + rsval = r.Sym.Value } typ := "?" switch r.Type { @@ -836,7 +881,7 @@ func Datblk(ctxt *Link, addr int64, size int64) { case objabi.R_CALL: typ = "call" } - ctxt.Logf("\treloc %.8x/%d %s %s+%#x [%#x]\n", uint(sym.Value+int64(r.Off)), r.Siz, typ, rsname, r.Add, r.Sym.Value+r.Add) + ctxt.Logf("\treloc %.8x/%d %s %s+%#x [%#x]\n", uint(sym.Value+int64(r.Off)), r.Siz, typ, rsname, r.Add, rsval+r.Add) } } @@ -851,7 +896,7 @@ func Dwarfblk(ctxt *Link, addr int64, size int64) { ctxt.Logf("dwarfblk [%#x,%#x) at offset %#x\n", addr, addr+size, ctxt.Out.Offset()) } - blk(ctxt, dwarfp, addr, size, zeros[:]) + blk(ctxt.Out, dwarfp, addr, size, zeros[:]) } var zeros [512]byte @@ -903,6 +948,10 @@ func addstrdata(ctxt *Link, name, value string) { s.Size = 0 s.P = s.P[:0] + if s.Attr.ReadOnly() { + s.P = make([]byte, 0, ctxt.Arch.PtrSize*2) + s.Attr.Set(sym.AttrReadOnly, false) + } s.R = s.R[:0] reachable := s.Attr.Reachable() s.AddAddr(ctxt.Arch, sp) @@ -962,19 +1011,6 @@ func addinitarrdata(ctxt *Link, s *sym.Symbol) { sp.AddAddr(ctxt.Arch, s) } -func dosymtype(ctxt *Link) { - switch ctxt.BuildMode { - case BuildModeCArchive, BuildModeCShared: - for _, s := range ctxt.Syms.Allsym { - // Create a new entry in the .init_array section that points to the - // library initializer function. - if s.Name == *flagEntrySymbol { - addinitarrdata(ctxt, s) - } - } - } -} - // symalign returns the required alignment for the given symbol s. func symalign(s *sym.Symbol) int32 { min := int32(thearch.Minalign) @@ -992,6 +1028,7 @@ func symalign(s *sym.Symbol) int32 { for int64(align) > s.Size && align > min { align >>= 1 } + s.Align = align return align } @@ -1110,7 +1147,7 @@ func (ctxt *Link) dodata() { ctxt.Logf("%5.2f dodata\n", Cputime()) } - if ctxt.DynlinkingGo() && ctxt.HeadType == objabi.Hdarwin { + if (ctxt.DynlinkingGo() && ctxt.HeadType == objabi.Hdarwin) || (ctxt.HeadType == objabi.Haix && ctxt.LinkMode == LinkExternal) { // The values in moduledata are filled out by relocations // pointing to the addresses of these special symbols. // Typically these symbols have no size and are not laid @@ -1128,6 +1165,12 @@ func (ctxt *Link) dodata() { // To work around this we lay out the symbls whose // addresses are vital for multi-module programs to work // as normal symbols, and give them a little size. + // + // On AIX, as all DATA sections are merged together, ld might not put + // these symbols at the beginning of their respective section if there + // aren't real symbols, their alignment might not match the + // first symbol alignment. Therefore, there are explicitly put at the + // beginning of their section with the same alignment. bss := ctxt.Syms.Lookup("runtime.bss", 0) bss.Size = 8 bss.Attr.Set(sym.AttrSpecial, false) @@ -1138,7 +1181,12 @@ func (ctxt *Link) dodata() { data.Size = 8 data.Attr.Set(sym.AttrSpecial, false) - ctxt.Syms.Lookup("runtime.edata", 0).Attr.Set(sym.AttrSpecial, false) + edata := ctxt.Syms.Lookup("runtime.edata", 0) + edata.Attr.Set(sym.AttrSpecial, false) + if ctxt.HeadType == objabi.Haix { + // XCOFFTOC symbols are part of .data section. + edata.Type = sym.SXCOFFTOC + } types := ctxt.Syms.Lookup("runtime.types", 0) types.Type = sym.STYPE @@ -1148,6 +1196,16 @@ func (ctxt *Link) dodata() { etypes := ctxt.Syms.Lookup("runtime.etypes", 0) etypes.Type = sym.SFUNCTAB etypes.Attr.Set(sym.AttrSpecial, false) + + if ctxt.HeadType == objabi.Haix { + rodata := ctxt.Syms.Lookup("runtime.rodata", 0) + rodata.Type = sym.SSTRING + rodata.Size = 8 + rodata.Attr.Set(sym.AttrSpecial, false) + + ctxt.Syms.Lookup("runtime.erodata", 0).Attr.Set(sym.AttrSpecial, false) + + } } // Collect data symbols by type into data. @@ -1191,6 +1249,12 @@ func (ctxt *Link) dodata() { // that an Outer symbol has been changed to a // relro Type before it reaches here. isRelro = true + case sym.SFUNCTAB: + if ctxt.HeadType == objabi.Haix && s.Name == "runtime.etypes" { + // runtime.etypes must be at the end of + // the relro datas. + isRelro = true + } } if isRelro { s.Type = symnrelro @@ -1232,6 +1296,13 @@ func (ctxt *Link) dodata() { } wg.Wait() + if ctxt.HeadType == objabi.Haix && ctxt.LinkMode == LinkExternal { + // These symbols must have the same alignment as their section. + // Otherwize, ld might change the layout of Go sections. + ctxt.Syms.ROLookup("runtime.data", 0).Align = dataMaxAlign[sym.SDATA] + ctxt.Syms.ROLookup("runtime.bss", 0).Align = dataMaxAlign[sym.SBSS] + } + // Allocate sections. // Data is processed before segtext, because we need // to see all symbols in the .data and .bss sections in order @@ -1240,6 +1311,7 @@ func (ctxt *Link) dodata() { // Writable data sections that do not need any specialized handling. writable := []sym.SymKind{ + sym.SBUILDINFO, sym.SELFSECT, sym.SMACHO, sym.SMACHOGOT, @@ -1313,6 +1385,13 @@ func (ctxt *Link) dodata() { case BuildModeCArchive, BuildModeCShared, BuildModeShared, BuildModePlugin: hasinitarr = true } + + if ctxt.HeadType == objabi.Haix { + if len(data[sym.SINITARR]) > 0 { + Errorf(nil, "XCOFF format doesn't allow .init_array section") + } + } + if hasinitarr && len(data[sym.SINITARR]) > 0 { sect := addsection(ctxt.Arch, &Segdata, ".init_array", 06) sect.Align = dataMaxAlign[sym.SINITARR] @@ -1345,7 +1424,9 @@ func (ctxt *Link) dodata() { gc.AddSym(s) datsize += s.Size } + gc.End(datsize - int64(sect.Vaddr)) // On AIX, TOC entries must be the last of .data + // These aren't part of gc as they won't change during the runtime. for _, s := range data[sym.SXCOFFTOC] { s.Sect = sect s.Type = sym.SDATA @@ -1355,7 +1436,6 @@ func (ctxt *Link) dodata() { } checkdatsize(ctxt, datsize, sym.SDATA) sect.Length = uint64(datsize) - sect.Vaddr - gc.End(int64(sect.Length)) /* bss */ sect = addsection(ctxt.Arch, &Segdata, ".bss", 06) @@ -1397,7 +1477,7 @@ func (ctxt *Link) dodata() { if len(data[sym.STLSBSS]) > 0 { var sect *sym.Section - if ctxt.IsELF && (ctxt.LinkMode == LinkExternal || !*FlagD) { + if (ctxt.IsELF || ctxt.HeadType == objabi.Haix) && (ctxt.LinkMode == LinkExternal || !*FlagD) { sect = addsection(ctxt.Arch, &Segdata, ".tbss", 06) sect.Align = int32(ctxt.Arch.PtrSize) sect.Vaddr = 0 @@ -1472,6 +1552,7 @@ func (ctxt *Link) dodata() { } datsize = Rnd(datsize, int64(sect.Align)) for _, symn := range sym.ReadOnly { + symnStartValue := datsize for _, s := range data[symn] { datsize = aligndatsize(datsize, s) s.Sect = sect @@ -1480,6 +1561,13 @@ func (ctxt *Link) dodata() { datsize += s.Size } checkdatsize(ctxt, datsize, symn) + if ctxt.HeadType == objabi.Haix { + // Read-only symbols might be wrapped inside their outer + // symbol. + // XCOFF symbol table needs to know the size of + // these outer symbols. + xcoffUpdateOuterSize(ctxt, datsize-symnStartValue, symn) + } } sect.Length = uint64(datsize) - sect.Vaddr @@ -1527,7 +1615,7 @@ func (ctxt *Link) dodata() { if ctxt.UseRelro() { addrelrosection = func(suffix string) *sym.Section { seg := &Segrelrodata - if ctxt.LinkMode == LinkExternal { + if ctxt.LinkMode == LinkExternal && ctxt.HeadType != objabi.Haix { // Using a separate segment with an external // linker results in some programs moving // their data sections unexpectedly, which @@ -1542,8 +1630,15 @@ func (ctxt *Link) dodata() { sect = addrelrosection("") sect.Vaddr = 0 + if ctxt.HeadType == objabi.Haix { + // datsize must be reset because relro datas will end up + // in data segment. + datsize = 0 + } + ctxt.Syms.Lookup("runtime.types", 0).Sect = sect ctxt.Syms.Lookup("runtime.etypes", 0).Sect = sect + for _, symnro := range sym.ReadOnly { symn := sym.RelROMap[symnro] align := dataMaxAlign[symn] @@ -1554,6 +1649,7 @@ func (ctxt *Link) dodata() { datsize = Rnd(datsize, int64(sect.Align)) for _, symnro := range sym.ReadOnly { symn := sym.RelROMap[symnro] + symnStartValue := datsize for _, s := range data[symn] { datsize = aligndatsize(datsize, s) if s.Outer != nil && s.Outer.Sect != nil && s.Outer.Sect != sect { @@ -1565,6 +1661,13 @@ func (ctxt *Link) dodata() { datsize += s.Size } checkdatsize(ctxt, datsize, symn) + if ctxt.HeadType == objabi.Haix { + // Read-only symbols might be wrapped inside their outer + // symbol. + // XCOFF symbol table needs to know the size of + // these outer symbols. + xcoffUpdateOuterSize(ctxt, datsize-symnStartValue, symn) + } } sect.Length = uint64(datsize) - sect.Vaddr @@ -1598,6 +1701,11 @@ func (ctxt *Link) dodata() { } checkdatsize(ctxt, datsize, sym.SITABLINK) sect.Length = uint64(datsize) - sect.Vaddr + if ctxt.HeadType == objabi.Haix { + // Store .itablink size because its symbols are wrapped + // under an outer symbol: runtime.itablink. + xcoffUpdateOuterSize(ctxt, int64(sect.Length), sym.SITABLINK) + } /* gosymtab */ sect = addrelrosection(".gosymtab") @@ -1690,6 +1798,12 @@ func (ctxt *Link) dodata() { s.Value = int64(uint64(datsize) - sect.Vaddr) s.Attr |= sym.AttrLocal datsize += s.Size + + if ctxt.HeadType == objabi.Haix && curType == sym.SDWARFLOC { + // Update the size of .debug_loc for this symbol's + // package. + addDwsectCUSize(".debug_loc", s.File, uint64(s.Size)) + } } sect.Length = uint64(datsize) - sect.Vaddr checkdatsize(ctxt, datsize, curType) @@ -1752,12 +1866,12 @@ func dodataSect(ctxt *Link, symn sym.SymKind, syms []*sym.Symbol) (result []*sym // If the usually-special section-marker symbols are being laid // out as regular symbols, put them either at the beginning or // end of their section. - if ctxt.DynlinkingGo() && ctxt.HeadType == objabi.Hdarwin { + if (ctxt.DynlinkingGo() && ctxt.HeadType == objabi.Hdarwin) || (ctxt.HeadType == objabi.Haix && ctxt.LinkMode == LinkExternal) { switch s.Name { - case "runtime.text", "runtime.bss", "runtime.data", "runtime.types": + case "runtime.text", "runtime.bss", "runtime.data", "runtime.types", "runtime.rodata": head = s continue - case "runtime.etext", "runtime.ebss", "runtime.edata", "runtime.etypes": + case "runtime.etext", "runtime.ebss", "runtime.edata", "runtime.etypes", "runtime.erodata": tail = s continue } @@ -1859,6 +1973,39 @@ func (ctxt *Link) textbuildid() { ctxt.Textp[0] = s } +func (ctxt *Link) buildinfo() { + if ctxt.linkShared || ctxt.BuildMode == BuildModePlugin { + // -linkshared and -buildmode=plugin get confused + // about the relocations in go.buildinfo + // pointing at the other data sections. + // The version information is only available in executables. + return + } + + s := ctxt.Syms.Lookup(".go.buildinfo", 0) + s.Attr |= sym.AttrReachable + s.Type = sym.SBUILDINFO + s.Align = 16 + // The \xff is invalid UTF-8, meant to make it less likely + // to find one of these accidentally. + const prefix = "\xff Go buildinf:" // 14 bytes, plus 2 data bytes filled in below + data := make([]byte, 32) + copy(data, prefix) + data[len(prefix)] = byte(ctxt.Arch.PtrSize) + data[len(prefix)+1] = 0 + if ctxt.Arch.ByteOrder == binary.BigEndian { + data[len(prefix)+1] = 1 + } + s.P = data + s.Size = int64(len(s.P)) + s1 := ctxt.Syms.Lookup("runtime.buildVersion", 0) + s2 := ctxt.Syms.Lookup("runtime.modinfo", 0) + s.R = []sym.Reloc{ + {Off: 16, Siz: uint8(ctxt.Arch.PtrSize), Type: objabi.R_ADDR, Sym: s1}, + {Off: 16 + int32(ctxt.Arch.PtrSize), Siz: uint8(ctxt.Arch.PtrSize), Type: objabi.R_ADDR, Sym: s2}, + } +} + // assign addresses to text func (ctxt *Link) textaddress() { addsection(ctxt.Arch, &Segtext, ".text", 05) @@ -1872,8 +2019,15 @@ func (ctxt *Link) textaddress() { text := ctxt.Syms.Lookup("runtime.text", 0) text.Sect = sect + if ctxt.HeadType == objabi.Haix && ctxt.LinkMode == LinkExternal { + // Setting runtime.text has a real symbol prevents ld to + // change its base address resulting in wrong offsets for + // reflect methods. + text.Align = sect.Align + text.Size = 0x8 + } - if ctxt.DynlinkingGo() && ctxt.HeadType == objabi.Hdarwin { + if (ctxt.DynlinkingGo() && ctxt.HeadType == objabi.Hdarwin) || (ctxt.HeadType == objabi.Haix && ctxt.LinkMode == LinkExternal) { etext := ctxt.Syms.Lookup("runtime.etext", 0) etext.Sect = sect @@ -1894,6 +2048,10 @@ func (ctxt *Link) textaddress() { // lay down trampolines after each function for ; ntramps < len(ctxt.tramps); ntramps++ { tramp := ctxt.tramps[ntramps] + if ctxt.HeadType == objabi.Haix && strings.HasPrefix(tramp.Name, "runtime.text.") { + // Already set in assignAddress + continue + } sect, n, va = assignAddress(ctxt, sect, n, tramp, va, true) } } @@ -1934,10 +2092,6 @@ func assignAddress(ctxt *Link, sect *sym.Section, n int, s *sym.Symbol, va uint6 } else { va = uint64(Rnd(int64(va), int64(Funcalign))) } - s.Value = 0 - for sub := s; sub != nil; sub = sub.Sub { - sub.Value += int64(va) - } funcsize := uint64(MINFUNC) // spacing required for findfunctab if s.Size > MINFUNC { @@ -1953,7 +2107,7 @@ func assignAddress(ctxt *Link, sect *sym.Section, n int, s *sym.Symbol, va uint6 // Only break at outermost syms. - if ctxt.Arch.InFamily(sys.PPC64) && s.Outer == nil && ctxt.IsELF && ctxt.LinkMode == LinkExternal && va-sect.Vaddr+funcsize+maxSizeTrampolinesPPC64(s, isTramp) > 0x1c00000 { + if ctxt.Arch.InFamily(sys.PPC64) && s.Outer == nil && ctxt.LinkMode == LinkExternal && va-sect.Vaddr+funcsize+maxSizeTrampolinesPPC64(s, isTramp) > 0x1c00000 { // Set the length for the previous text section sect.Length = va - sect.Vaddr @@ -1963,9 +2117,35 @@ func assignAddress(ctxt *Link, sect *sym.Section, n int, s *sym.Symbol, va uint6 s.Sect = sect // Create a symbol for the start of the secondary text sections - ctxt.Syms.Lookup(fmt.Sprintf("runtime.text.%d", n), 0).Sect = sect + ntext := ctxt.Syms.Lookup(fmt.Sprintf("runtime.text.%d", n), 0) + ntext.Sect = sect + if ctxt.HeadType == objabi.Haix { + // runtime.text.X must be a real symbol on AIX. + // Assign its address directly in order to be the + // first symbol of this new section. + ntext.Type = sym.STEXT + ntext.Size = int64(MINFUNC) + ntext.Attr |= sym.AttrReachable + ntext.Attr |= sym.AttrOnList + ctxt.tramps = append(ctxt.tramps, ntext) + + ntext.Value = int64(va) + va += uint64(ntext.Size) + + if s.Align != 0 { + va = uint64(Rnd(int64(va), int64(s.Align))) + } else { + va = uint64(Rnd(int64(va), int64(Funcalign))) + } + } n++ } + + s.Value = 0 + for sub := s; sub != nil; sub = sub.Sub { + sub.Value += int64(va) + } + va += funcsize return sect, n, va @@ -2022,6 +2202,10 @@ func (ctxt *Link) address() []*sym.Segment { // align to page boundary so as not to mix // rodata, rel-ro data, and executable text. va = uint64(Rnd(int64(va), int64(*FlagRound))) + if ctxt.HeadType == objabi.Haix { + // Relro data are inside data segment on AIX. + va += uint64(XCOFFDATABASE) - uint64(XCOFFTEXTBASE) + } order = append(order, &Segrelrodata) Segrelrodata.Rwx = 06 @@ -2036,9 +2220,10 @@ func (ctxt *Link) address() []*sym.Segment { } va = uint64(Rnd(int64(va), int64(*FlagRound))) - if ctxt.HeadType == objabi.Haix { + if ctxt.HeadType == objabi.Haix && len(Segrelrodata.Sections) == 0 { // Data sections are moved to an unreachable segment // to ensure that they are position-independent. + // Already done if relro sections exist. va += uint64(XCOFFDATABASE) - uint64(XCOFFTEXTBASE) } order = append(order, &Segdata) @@ -2049,11 +2234,11 @@ func (ctxt *Link) address() []*sym.Segment { var bss *sym.Section var noptrbss *sym.Section for i, s := range Segdata.Sections { - if ctxt.IsELF && s.Name == ".tbss" { + if (ctxt.IsELF || ctxt.HeadType == objabi.Haix) && s.Name == ".tbss" { continue } vlen := int64(s.Length) - if i+1 < len(Segdata.Sections) && !(ctxt.IsELF && Segdata.Sections[i+1].Name == ".tbss") { + if i+1 < len(Segdata.Sections) && !((ctxt.IsELF || ctxt.HeadType == objabi.Haix) && Segdata.Sections[i+1].Name == ".tbss") { vlen = int64(Segdata.Sections[i+1].Vaddr - s.Vaddr) } s.Vaddr = va @@ -2146,7 +2331,11 @@ func (ctxt *Link) address() []*sym.Segment { break } symname := fmt.Sprintf("runtime.text.%d", n) - ctxt.xdefine(symname, sym.STEXT, int64(sect.Vaddr)) + if ctxt.HeadType != objabi.Haix || ctxt.LinkMode != LinkExternal { + // Addresses are already set on AIX with external linker + // because these symbols are part of their sections. + ctxt.xdefine(symname, sym.STEXT, int64(sect.Vaddr)) + } n++ } @@ -2185,7 +2374,8 @@ func (ctxt *Link) address() []*sym.Segment { } // layout assigns file offsets and lengths to the segments in order. -func (ctxt *Link) layout(order []*sym.Segment) { +// Returns the file size containing all the segments. +func (ctxt *Link) layout(order []*sym.Segment) uint64 { var prev *sym.Segment for _, seg := range order { if prev == nil { @@ -2214,7 +2404,7 @@ func (ctxt *Link) layout(order []*sym.Segment) { } prev = seg } - + return prev.Fileoff + prev.Filelen } // add a trampoline with symbol s (to be laid down after the current function) @@ -2250,11 +2440,21 @@ func compressSyms(ctxt *Link, syms []*sym.Symbol) []byte { if err != nil { log.Fatalf("NewWriterLevel failed: %s", err) } - for _, sym := range syms { - if _, err := z.Write(sym.P); err != nil { + for _, s := range syms { + // s.P may be read-only. Apply relocations in a + // temporary buffer, and immediately write it out. + oldP := s.P + wasReadOnly := s.Attr.ReadOnly() + if len(s.R) != 0 && wasReadOnly { + ctxt.relocbuf = append(ctxt.relocbuf[:0], s.P...) + s.P = ctxt.relocbuf + s.Attr.Set(sym.AttrReadOnly, false) + } + relocsym(ctxt, s) + if _, err := z.Write(s.P); err != nil { log.Fatalf("compression failed: %s", err) } - for i := sym.Size - int64(len(sym.P)); i > 0; { + for i := s.Size - int64(len(s.P)); i > 0; { b := zeros[:] if i < int64(len(b)) { b = b[:i] @@ -2265,6 +2465,16 @@ func compressSyms(ctxt *Link, syms []*sym.Symbol) []byte { } i -= int64(n) } + // Restore s.P if a temporary buffer was used. If compression + // is not beneficial, we'll go back to use the uncompressed + // contents, in which case we still need s.P. + if len(s.R) != 0 && wasReadOnly { + s.P = oldP + s.Attr.Set(sym.AttrReadOnly, wasReadOnly) + for i := range s.R { + s.R[i].Done = false + } + } } if err := z.Close(); err != nil { log.Fatalf("compression failed: %s", err) diff --git a/src/cmd/link/internal/ld/deadcode.go b/src/cmd/link/internal/ld/deadcode.go index 627ce05d7a..f9a0ee0f96 100644 --- a/src/cmd/link/internal/ld/deadcode.go +++ b/src/cmd/link/internal/ld/deadcode.go @@ -222,7 +222,7 @@ func (d *deadcodepass) init() { // functions and mark what is reachable from there. if d.ctxt.linkShared && (d.ctxt.BuildMode == BuildModeExe || d.ctxt.BuildMode == BuildModePIE) { - names = append(names, "main.main", "main.init") + names = append(names, "main.main", "main..inittask") } else { // The external linker refers main symbol directly. if d.ctxt.LinkMode == LinkExternal && (d.ctxt.BuildMode == BuildModeExe || d.ctxt.BuildMode == BuildModePIE) { @@ -234,7 +234,7 @@ func (d *deadcodepass) init() { } names = append(names, *flagEntrySymbol) if d.ctxt.BuildMode == BuildModePlugin { - names = append(names, objabi.PathToPrefix(*flagPluginPath)+".init", objabi.PathToPrefix(*flagPluginPath)+".main", "go.plugin.tabs") + names = append(names, objabi.PathToPrefix(*flagPluginPath)+"..inittask", objabi.PathToPrefix(*flagPluginPath)+".main", "go.plugin.tabs") // We don't keep the go.plugin.exports symbol, // but we do keep the symbols it refers to. diff --git a/src/cmd/link/internal/ld/dwarf.go b/src/cmd/link/internal/ld/dwarf.go index a150306df9..39c8a7f120 100644 --- a/src/cmd/link/internal/ld/dwarf.go +++ b/src/cmd/link/internal/ld/dwarf.go @@ -51,6 +51,13 @@ func (c dwctxt) AddAddress(s dwarf.Sym, data interface{}, value int64) { s.(*sym.Symbol).AddAddrPlus(c.linkctxt.Arch, data.(*sym.Symbol), value) } +func (c dwctxt) AddCURelativeAddress(s dwarf.Sym, data interface{}, value int64) { + if value != 0 { + value -= (data.(*sym.Symbol)).Value + } + s.(*sym.Symbol).AddCURelativeAddrPlus(c.linkctxt.Arch, data.(*sym.Symbol), value) +} + func (c dwctxt) AddSectionOffset(s dwarf.Sym, size int, t interface{}, ofs int64) { ls := s.(*sym.Symbol) switch size { @@ -264,15 +271,6 @@ func newrefattr(die *dwarf.DWDie, attr uint16, ref *sym.Symbol) *dwarf.DWAttr { return newattr(die, attr, dwarf.DW_CLS_REFERENCE, 0, ref) } -func putdies(linkctxt *Link, ctxt dwarf.Context, syms []*sym.Symbol, die *dwarf.DWDie) []*sym.Symbol { - for ; die != nil; die = die.Link { - syms = putdie(linkctxt, ctxt, syms, die) - } - syms[len(syms)-1].AddUint8(0) - - return syms -} - func dtolsym(s dwarf.Sym) *sym.Symbol { if s == nil { return nil @@ -294,7 +292,10 @@ func putdie(linkctxt *Link, ctxt dwarf.Context, syms []*sym.Symbol, die *dwarf.D dwarf.Uleb128put(ctxt, s, int64(die.Abbrev)) dwarf.PutAttrs(ctxt, s, die.Abbrev, die.Attr) if dwarf.HasChildren(die) { - return putdies(linkctxt, ctxt, syms, die.Child) + for die := die.Child; die != nil; die = die.Link { + syms = putdie(linkctxt, ctxt, syms, die) + } + syms[len(syms)-1].AddUint8(0) } return syms } @@ -1211,28 +1212,28 @@ func writelines(ctxt *Link, unit *compilationUnit, ls *sym.Symbol) { file := 1 ls.AddAddr(ctxt.Arch, s) - var pcfile Pciter - var pcline Pciter - var pcstmt Pciter + pcfile := newPCIter(ctxt) + pcline := newPCIter(ctxt) + pcstmt := newPCIter(ctxt) for i, s := range unit.lib.Textp { finddebugruntimepath(s) - pciterinit(ctxt, &pcfile, &s.FuncInfo.Pcfile) - pciterinit(ctxt, &pcline, &s.FuncInfo.Pcline) + pcfile.init(s.FuncInfo.Pcfile.P) + pcline.init(s.FuncInfo.Pcline.P) isStmtSym := dwarfFuncSym(ctxt, s, dwarf.IsStmtPrefix, false) if isStmtSym != nil && len(isStmtSym.P) > 0 { - pciterinit(ctxt, &pcstmt, &sym.Pcdata{P: isStmtSym.P}) + pcstmt.init(isStmtSym.P) } else { // Assembly files lack a pcstmt section, we assume that every instruction // is a valid statement. - pcstmt.done = 1 + pcstmt.done = true pcstmt.value = 1 } var thispc uint32 // TODO this loop looks like it could exit with work remaining. - for pcfile.done == 0 && pcline.done == 0 { + for !pcfile.done && !pcline.done { // Only changed if it advanced if int32(file) != pcfile.value { ls.AddUint8(dwarf.DW_LNS_set_file) @@ -1272,18 +1273,18 @@ func writelines(ctxt *Link, unit *compilationUnit, ls *sym.Symbol) { if pcline.nextpc < thispc { thispc = pcline.nextpc } - if pcstmt.done == 0 && pcstmt.nextpc < thispc { + if !pcstmt.done && pcstmt.nextpc < thispc { thispc = pcstmt.nextpc } if pcfile.nextpc == thispc { - pciternext(&pcfile) + pcfile.next() } - if pcstmt.done == 0 && pcstmt.nextpc == thispc { - pciternext(&pcstmt) + if !pcstmt.done && pcstmt.nextpc == thispc { + pcstmt.next() } if pcline.nextpc == thispc { - pciternext(&pcline) + pcline.next() } } if is_stmt == 0 && i < len(unit.lib.Textp)-1 { @@ -1308,7 +1309,7 @@ func writelines(ctxt *Link, unit *compilationUnit, ls *sym.Symbol) { ls.SetUint32(ctxt.Arch, headerLengthOffset, uint32(headerend-headerstart)) } - // Apply any R_DWARFFILEREF relocations, since we now know the + // Process any R_DWARFFILEREF relocations, since we now know the // line table file indices for this compilation unit. Note that // this loop visits only subprogram DIEs: if the compiler is // changed to generate DW_AT_decl_file attributes for other @@ -1321,8 +1322,6 @@ func writelines(ctxt *Link, unit *compilationUnit, ls *sym.Symbol) { if r.Type != objabi.R_DWARFFILEREF { continue } - // Mark relocation as applied (signal to relocsym) - r.Done = true idx, ok := fileNums[int(r.Sym.Value)] if ok { if int(int32(idx)) != idx { @@ -1335,7 +1334,11 @@ func writelines(ctxt *Link, unit *compilationUnit, ls *sym.Symbol) { Errorf(f, "bad R_DWARFFILEREF relocation offset %d + 4 would write past length %d", r.Off, len(s.P)) continue } - ctxt.Arch.ByteOrder.PutUint32(f.P[r.Off:r.Off+4], uint32(idx)) + if r.Add != 0 { + Errorf(f, "bad R_DWARFFILEREF relocation: addend not zero") + } + r.Sym.Attr |= sym.AttrReachable | sym.AttrNotInSymbolTable + r.Add = int64(idx) // record the index in r.Add, we'll apply it in the reloc phase. } else { _, found := missing[int(r.Sym.Value)] if !found { @@ -1348,13 +1351,20 @@ func writelines(ctxt *Link, unit *compilationUnit, ls *sym.Symbol) { } // writepcranges generates the DW_AT_ranges table for compilation unit cu. -func writepcranges(ctxt *Link, cu *dwarf.DWDie, base *sym.Symbol, pcs []dwarf.Range, ranges *sym.Symbol) { +func writepcranges(ctxt *Link, unit *compilationUnit, base *sym.Symbol, pcs []dwarf.Range, ranges *sym.Symbol) { var dwarfctxt dwarf.Context = dwctxt{ctxt} + unitLengthOffset := ranges.Size + // Create PC ranges for this CU. - newattr(cu, dwarf.DW_AT_ranges, dwarf.DW_CLS_PTR, ranges.Size, ranges) - newattr(cu, dwarf.DW_AT_low_pc, dwarf.DW_CLS_ADDRESS, base.Value, base) - dwarf.PutRanges(dwarfctxt, ranges, nil, pcs) + newattr(unit.dwinfo, dwarf.DW_AT_ranges, dwarf.DW_CLS_PTR, ranges.Size, ranges) + newattr(unit.dwinfo, dwarf.DW_AT_low_pc, dwarf.DW_CLS_ADDRESS, base.Value, base) + dwarf.PutBasedRanges(dwarfctxt, ranges, pcs) + + if ctxt.HeadType == objabi.Haix { + addDwsectCUSize(".debug_ranges", unit.lib.String(), uint64(ranges.Size-unitLengthOffset)) + } + } /* @@ -1391,13 +1401,22 @@ func writeframes(ctxt *Link, syms []*sym.Symbol) []*sym.Symbol { fs.Type = sym.SDWARFSECT syms = append(syms, fs) + // Length field is 4 bytes on Dwarf32 and 12 bytes on Dwarf64 + lengthFieldSize := int64(4) + if isDwarf64(ctxt) { + lengthFieldSize += 8 + } + // Emit the CIE, Section 6.4.1 cieReserve := uint32(16) if haslinkregister(ctxt) { cieReserve = 32 } + if isDwarf64(ctxt) { + cieReserve += 4 // 4 bytes added for cid + } createUnitLength(ctxt, fs, uint64(cieReserve)) // initial length, must be multiple of thearch.ptrsize - addDwarfAddrField(ctxt, fs, 0xffffffff) // cid. + addDwarfAddrField(ctxt, fs, ^uint64(0)) // cid fs.AddUint8(3) // dwarf version (appendix F) fs.AddUint8(0) // augmentation "" dwarf.Uleb128put(dwarfctxt, fs, 1) // code_alignment_factor @@ -1423,8 +1442,7 @@ func writeframes(ctxt *Link, syms []*sym.Symbol) []*sym.Symbol { dwarf.Uleb128put(dwarfctxt, fs, int64(-ctxt.Arch.PtrSize)/dataAlignmentFactor) // ...is saved at [CFA - (PtrSize/4)]. } - // 4 is to exclude the length field. - pad := int64(cieReserve) + 4 - fs.Size + pad := int64(cieReserve) + lengthFieldSize - fs.Size if pad < 0 { Exitf("dwarf: cieReserve too small by %d bytes.", -pad) @@ -1433,7 +1451,7 @@ func writeframes(ctxt *Link, syms []*sym.Symbol) []*sym.Symbol { fs.AddBytes(zeros[:pad]) var deltaBuf []byte - var pcsp Pciter + pcsp := newPCIter(ctxt) for _, s := range ctxt.Textp { if s.FuncInfo == nil { continue @@ -1442,7 +1460,14 @@ func writeframes(ctxt *Link, syms []*sym.Symbol) []*sym.Symbol { // Emit a FDE, Section 6.4.1. // First build the section contents into a byte buffer. deltaBuf = deltaBuf[:0] - for pciterinit(ctxt, &pcsp, &s.FuncInfo.Pcsp); pcsp.done == 0; pciternext(&pcsp) { + if haslinkregister(ctxt) && s.Attr.TopFrame() { + // Mark the link register as having an undefined value. + // This stops call stack unwinders progressing any further. + // TODO: similar mark on non-LR architectures. + deltaBuf = append(deltaBuf, dwarf.DW_CFA_undefined) + deltaBuf = dwarf.AppendUleb128(deltaBuf, uint64(thearch.Dwarfreglr)) + } + for pcsp.init(s.FuncInfo.Pcsp.P); !pcsp.done; pcsp.next() { nextpc := pcsp.nextpc // pciterinit goes up to the end of the function, @@ -1454,7 +1479,13 @@ func writeframes(ctxt *Link, syms []*sym.Symbol) []*sym.Symbol { } } - if haslinkregister(ctxt) { + spdelta := int64(pcsp.value) + if !haslinkregister(ctxt) { + // Return address has been pushed onto stack. + spdelta += int64(ctxt.Arch.PtrSize) + } + + if haslinkregister(ctxt) && !s.Attr.TopFrame() { // TODO(bryanpkc): This is imprecise. In general, the instruction // that stores the return address to the stack frame is not the // same one that allocates the frame. @@ -1463,27 +1494,32 @@ func writeframes(ctxt *Link, syms []*sym.Symbol) []*sym.Symbol { // after a stack frame has been allocated. deltaBuf = append(deltaBuf, dwarf.DW_CFA_offset_extended_sf) deltaBuf = dwarf.AppendUleb128(deltaBuf, uint64(thearch.Dwarfreglr)) - deltaBuf = dwarf.AppendSleb128(deltaBuf, -int64(pcsp.value)/dataAlignmentFactor) + deltaBuf = dwarf.AppendSleb128(deltaBuf, -spdelta/dataAlignmentFactor) } else { // The return address is restored into the link register // when a stack frame has been de-allocated. deltaBuf = append(deltaBuf, dwarf.DW_CFA_same_value) deltaBuf = dwarf.AppendUleb128(deltaBuf, uint64(thearch.Dwarfreglr)) } - deltaBuf = appendPCDeltaCFA(ctxt.Arch, deltaBuf, int64(nextpc)-int64(pcsp.pc), int64(pcsp.value)) - } else { - deltaBuf = appendPCDeltaCFA(ctxt.Arch, deltaBuf, int64(nextpc)-int64(pcsp.pc), int64(ctxt.Arch.PtrSize)+int64(pcsp.value)) } + + deltaBuf = appendPCDeltaCFA(ctxt.Arch, deltaBuf, int64(nextpc)-int64(pcsp.pc), spdelta) } pad := int(Rnd(int64(len(deltaBuf)), int64(ctxt.Arch.PtrSize))) - len(deltaBuf) deltaBuf = append(deltaBuf, zeros[:pad]...) // Emit the FDE header, Section 6.4.1. // 4 bytes: length, must be multiple of thearch.ptrsize - // 4 bytes: Pointer to the CIE above, at offset 0 + // 4/8 bytes: Pointer to the CIE above, at offset 0 // ptrsize: initial location // ptrsize: address range - fs.AddUint32(ctxt.Arch, uint32(4+2*ctxt.Arch.PtrSize+len(deltaBuf))) // length (excludes itself) + + fdeLength := uint64(4 + 2*ctxt.Arch.PtrSize + len(deltaBuf)) + if isDwarf64(ctxt) { + fdeLength += 4 // 4 bytes added for CIE pointer + } + createUnitLength(ctxt, fs, fdeLength) + if ctxt.LinkMode == LinkExternal { addDwarfAddrRef(ctxt, fs, fs) } else { @@ -1492,6 +1528,10 @@ func writeframes(ctxt *Link, syms []*sym.Symbol) []*sym.Symbol { fs.AddAddr(ctxt.Arch, s) fs.AddUintXX(ctxt.Arch, uint64(s.Size), ctxt.Arch.PtrSize) // address range fs.AddBytes(deltaBuf) + + if ctxt.HeadType == objabi.Haix { + addDwsectCUSize(".debug_frame", s.File, fdeLength+uint64(lengthFieldSize)) + } } return syms } @@ -1503,7 +1543,7 @@ const ( COMPUNITHEADERSIZE = 4 + 2 + 4 + 1 ) -func writeinfo(ctxt *Link, syms []*sym.Symbol, units []*compilationUnit, abbrevsym *sym.Symbol) []*sym.Symbol { +func writeinfo(ctxt *Link, syms []*sym.Symbol, units []*compilationUnit, abbrevsym *sym.Symbol, pubNames, pubTypes *pubWriter) []*sym.Symbol { infosec := ctxt.Syms.Lookup(".debug_info", 0) infosec.Type = sym.SDWARFINFO infosec.Attr |= sym.AttrReachable @@ -1519,6 +1559,9 @@ func writeinfo(ctxt *Link, syms []*sym.Symbol, units []*compilationUnit, abbrevs continue } + pubNames.beginCompUnit(compunit) + pubTypes.beginCompUnit(compunit) + // Write .debug_info Compilation Unit Header (sec 7.5.1) // Fields marked with (*) must be changed for 64-bit dwarf // This must match COMPUNITHEADERSIZE above. @@ -1539,11 +1582,32 @@ func writeinfo(ctxt *Link, syms []*sym.Symbol, units []*compilationUnit, abbrevs if u.consts != nil { cu = append(cu, u.consts) } - cu = putdies(ctxt, dwarfctxt, cu, compunit.Child) var cusize int64 for _, child := range cu { cusize += child.Size } + + for die := compunit.Child; die != nil; die = die.Link { + l := len(cu) + lastSymSz := cu[l-1].Size + cu = putdie(ctxt, dwarfctxt, cu, die) + if ispubname(die) { + pubNames.add(die, cusize) + } + if ispubtype(die) { + pubTypes.add(die, cusize) + } + if lastSymSz != cu[l-1].Size { + // putdie will sometimes append directly to the last symbol of the list + cusize = cusize - lastSymSz + cu[l-1].Size + } + for _, child := range cu[l:] { + cusize += child.Size + } + } + cu[len(cu)-1].AddUint8(0) // closes compilation unit DIE + cusize++ + // Save size for AIX symbol table. if ctxt.HeadType == objabi.Haix { saveDwsectCUSize(".debug_info", getPkgFromCUSym(s), uint64(cusize)) @@ -1555,9 +1619,8 @@ func writeinfo(ctxt *Link, syms []*sym.Symbol, units []*compilationUnit, abbrevs cusize -= 4 // exclude the length field. s.SetUint32(ctxt.Arch, 0, uint32(cusize)) } - // Leave a breadcrumb for writepub. This does not - // appear in the DWARF output. - newattr(compunit, dwarf.DW_AT_byte_size, dwarf.DW_CLS_CONSTANT, cusize, 0) + pubNames.endCompUnit(compunit, uint32(cusize)+4) + pubTypes.endCompUnit(compunit, uint32(cusize)+4) syms = append(syms, cu...) } return syms @@ -1581,52 +1644,57 @@ func ispubtype(die *dwarf.DWDie) bool { return die.Abbrev >= dwarf.DW_ABRV_NULLTYPE } -func writepub(ctxt *Link, sname string, ispub func(*dwarf.DWDie) bool, syms []*sym.Symbol) []*sym.Symbol { +type pubWriter struct { + ctxt *Link + s *sym.Symbol + sname string + + sectionstart int64 + culengthOff int64 +} + +func newPubWriter(ctxt *Link, sname string) *pubWriter { s := ctxt.Syms.Lookup(sname, 0) s.Type = sym.SDWARFSECT - syms = append(syms, s) + return &pubWriter{ctxt: ctxt, s: s, sname: sname} +} - for _, u := range ctxt.compUnits { - if len(u.lib.Textp) == 0 && u.dwinfo.Child == nil { - continue - } - compunit := u.dwinfo - sectionstart := s.Size - culength := uint32(getattr(compunit, dwarf.DW_AT_byte_size).Value) + 4 +func (pw *pubWriter) beginCompUnit(compunit *dwarf.DWDie) { + pw.sectionstart = pw.s.Size - // Write .debug_pubnames/types Header (sec 6.1.1) - createUnitLength(ctxt, s, 0) // unit_length (*), will be filled in later. - s.AddUint16(ctxt.Arch, 2) // dwarf version (appendix F) - addDwarfAddrRef(ctxt, s, dtolsym(compunit.Sym)) // debug_info_offset (of the Comp unit Header) - addDwarfAddrField(ctxt, s, uint64(culength)) // debug_info_length + // Write .debug_pubnames/types Header (sec 6.1.1) + createUnitLength(pw.ctxt, pw.s, 0) // unit_length (*), will be filled in later. + pw.s.AddUint16(pw.ctxt.Arch, 2) // dwarf version (appendix F) + addDwarfAddrRef(pw.ctxt, pw.s, dtolsym(compunit.Sym)) // debug_info_offset (of the Comp unit Header) + pw.culengthOff = pw.s.Size + addDwarfAddrField(pw.ctxt, pw.s, uint64(0)) // debug_info_length, will be filled in later. - for die := compunit.Child; die != nil; die = die.Link { - if !ispub(die) { - continue - } - dwa := getattr(die, dwarf.DW_AT_name) - name := dwa.Data.(string) - if die.Sym == nil { - fmt.Println("Missing sym for ", name) - } - addDwarfAddrRef(ctxt, s, dtolsym(die.Sym)) - Addstring(s, name) - } +} - addDwarfAddrField(ctxt, s, 0) // Null offset - - // On AIX, save the current size of this compilation unit. - if ctxt.HeadType == objabi.Haix { - saveDwsectCUSize(sname, getPkgFromCUSym(dtolsym(compunit.Sym)), uint64(s.Size-sectionstart)) - } - if isDwarf64(ctxt) { - s.SetUint(ctxt.Arch, sectionstart+4, uint64(s.Size-sectionstart)-12) // exclude the length field. - } else { - s.SetUint32(ctxt.Arch, sectionstart, uint32(s.Size-sectionstart)-4) // exclude the length field. - } +func (pw *pubWriter) add(die *dwarf.DWDie, offset int64) { + dwa := getattr(die, dwarf.DW_AT_name) + name := dwa.Data.(string) + if die.Sym == nil { + fmt.Println("Missing sym for ", name) } + addDwarfAddrField(pw.ctxt, pw.s, uint64(offset)) + Addstring(pw.s, name) +} - return syms +func (pw *pubWriter) endCompUnit(compunit *dwarf.DWDie, culength uint32) { + addDwarfAddrField(pw.ctxt, pw.s, 0) // Null offset + + // On AIX, save the current size of this compilation unit. + if pw.ctxt.HeadType == objabi.Haix { + saveDwsectCUSize(pw.sname, getPkgFromCUSym(dtolsym(compunit.Sym)), uint64(pw.s.Size-pw.sectionstart)) + } + if isDwarf64(pw.ctxt) { + pw.s.SetUint(pw.ctxt.Arch, pw.sectionstart+4, uint64(pw.s.Size-pw.sectionstart)-12) // exclude the length field. + pw.s.SetUint(pw.ctxt.Arch, pw.culengthOff, uint64(culength)) + } else { + pw.s.SetUint32(pw.ctxt.Arch, pw.sectionstart, uint32(pw.s.Size-pw.sectionstart)-4) // exclude the length field. + pw.s.SetUint32(pw.ctxt.Arch, pw.culengthOff, culength) + } } func writegdbscript(ctxt *Link, syms []*sym.Symbol) []*sym.Symbol { @@ -1673,6 +1741,12 @@ func dwarfEnabled(ctxt *Link) bool { case ctxt.IsELF: case ctxt.HeadType == objabi.Hdarwin: case ctxt.HeadType == objabi.Hwindows: + case ctxt.HeadType == objabi.Haix: + res, err := dwarf.IsDWARFEnabledOnAIXLd(ctxt.extld()) + if err != nil { + Exitf("%v", err) + } + return res default: return false } @@ -1693,6 +1767,11 @@ func dwarfGenerateDebugInfo(ctxt *Link) { return } + if ctxt.HeadType == objabi.Haix { + // Initial map used to store package size for each DWARF section. + dwsectCUSize = make(map[string]uint64) + } + ctxt.compUnitByPackage = make(map[*sym.Library]*compilationUnit) // Forctxt.Diagnostic messages. @@ -1739,6 +1818,7 @@ func dwarfGenerateDebugInfo(ctxt *Link) { // fake root DIE for compile unit DIEs var dwroot dwarf.DWDie + flagVariants := make(map[string]bool) for _, lib := range ctxt.Library { unit := &compilationUnit{lib: lib} @@ -1767,9 +1847,19 @@ func dwarfGenerateDebugInfo(ctxt *Link) { // version, so it should be safe for readers to scan // forward to the semicolon. producer += "; " + string(producerExtra.P) + flagVariants[string(producerExtra.P)] = true + } else { + flagVariants[""] = true } + newattr(unit.dwinfo, dwarf.DW_AT_producer, dwarf.DW_CLS_STRING, int64(len(producer)), producer) + var pkgname string + if s := ctxt.Syms.ROLookup(dwarf.CUInfoPrefix+"packagename."+unit.lib.Pkg, 0); s != nil { + pkgname = string(s.P) + } + newattr(unit.dwinfo, dwarf.DW_AT_go_package_name, dwarf.DW_CLS_STRING, int64(len(pkgname)), pkgname) + if len(lib.Textp) == 0 { unit.dwinfo.Abbrev = dwarf.DW_ABRV_COMPUNIT_TEXTLESS } @@ -1788,9 +1878,9 @@ func dwarfGenerateDebugInfo(ctxt *Link) { if rangeSym != nil && rangeSym.Size > 0 { rangeSym.Attr |= sym.AttrReachable | sym.AttrNotInSymbolTable rangeSym.Type = sym.SDWARFRANGE - // LLVM doesn't support base address entries. Strip them out so LLDB and dsymutil don't get confused. - if ctxt.HeadType == objabi.Hdarwin { - removeDwarfAddrListBaseAddress(ctxt, dsym, rangeSym, false) + if ctxt.HeadType == objabi.Haix { + addDwsectCUSize(".debug_ranges", unit.lib.String(), uint64(rangeSym.Size)) + } unit.rangeSyms = append(unit.rangeSyms, rangeSym) } @@ -1814,6 +1904,13 @@ func dwarfGenerateDebugInfo(ctxt *Link) { } } + // Fix for 31034: if the objects feeding into this link were compiled + // with different sets of flags, then don't issue an error if + // the -strictdups checks fail. + if checkStrictDups > 1 && len(flagVariants) > 1 { + checkStrictDups = 1 + } + // Create DIEs for global variables and the types they use. genasmsym(ctxt, defdwsymb) @@ -1854,7 +1951,7 @@ func dwarfGenerateDebugSyms(ctxt *Link) { continue } writelines(ctxt, u, debugLine) - writepcranges(ctxt, u.dwinfo, u.lib.Textp[0], u.pcs, debugRanges) + writepcranges(ctxt, u, u.lib.Textp[0], u.pcs, debugRanges) } // newdie adds DIEs to the *beginning* of the parent's DIE list. @@ -1863,13 +1960,14 @@ func dwarfGenerateDebugSyms(ctxt *Link) { reversetree(&dwtypes.Child) movetomodule(ctxt, &dwtypes) + pubNames := newPubWriter(ctxt, ".debug_pubnames") + pubTypes := newPubWriter(ctxt, ".debug_pubtypes") + // Need to reorder symbols so sym.SDWARFINFO is after all sym.SDWARFSECT - // (but we need to generate dies before writepub) - infosyms := writeinfo(ctxt, nil, ctxt.compUnits, abbrev) + infosyms := writeinfo(ctxt, nil, ctxt.compUnits, abbrev, pubNames, pubTypes) syms = writeframes(ctxt, syms) - syms = writepub(ctxt, ".debug_pubnames", ispubname, syms) - syms = writepub(ctxt, ".debug_pubtypes", ispubtype, syms) + syms = append(syms, pubNames.s, pubTypes.s) syms = writegdbscript(ctxt, syms) // Now we're done writing SDWARFSECT symbols, so we can write // other SDWARF* symbols. @@ -1892,10 +1990,6 @@ func collectlocs(ctxt *Link, syms []*sym.Symbol, units []*compilationUnit) []*sy reloc.Sym.Attr |= sym.AttrReachable | sym.AttrNotInSymbolTable syms = append(syms, reloc.Sym) empty = false - // LLVM doesn't support base address entries. Strip them out so LLDB and dsymutil don't get confused. - if ctxt.HeadType == objabi.Hdarwin { - removeDwarfAddrListBaseAddress(ctxt, fn, reloc.Sym, true) - } // One location list entry per function, but many relocations to it. Don't duplicate. break } @@ -1912,65 +2006,6 @@ func collectlocs(ctxt *Link, syms []*sym.Symbol, units []*compilationUnit) []*sy return syms } -// removeDwarfAddrListBaseAddress removes base address selector entries from -// DWARF location lists and range lists. -func removeDwarfAddrListBaseAddress(ctxt *Link, info, list *sym.Symbol, isloclist bool) { - // The list symbol contains multiple lists, but they're all for the - // same function, and it's not empty. - fn := list.R[0].Sym - - // Discard the relocations for the base address entries. - list.R = list.R[:0] - - // Add relocations for each location entry's start and end addresses, - // so that the base address entries aren't necessary. - // We could remove them entirely, but that's more work for a relatively - // small size win. If dsymutil runs it'll throw them away anyway. - - // relocate adds a CU-relative relocation to fn+addr at offset. - relocate := func(addr uint64, offset int) { - list.R = append(list.R, sym.Reloc{ - Off: int32(offset), - Siz: uint8(ctxt.Arch.PtrSize), - Type: objabi.R_ADDRCUOFF, - Add: int64(addr), - Sym: fn, - }) - } - - for i := 0; i < len(list.P); { - first := readPtr(ctxt, list.P[i:]) - second := readPtr(ctxt, list.P[i+ctxt.Arch.PtrSize:]) - - if (first == 0 && second == 0) || - first == ^uint64(0) || - (ctxt.Arch.PtrSize == 4 && first == uint64(^uint32(0))) { - // Base address selection entry or end of list. Ignore. - i += ctxt.Arch.PtrSize * 2 - continue - } - - relocate(first, i) - relocate(second, i+ctxt.Arch.PtrSize) - - // Skip past the actual location. - i += ctxt.Arch.PtrSize * 2 - if isloclist { - i += 2 + int(ctxt.Arch.ByteOrder.Uint16(list.P[i:])) - } - } - - // Rewrite the DIE's relocations to point to the first location entry, - // not the now-useless base address selection entry. - for i := range info.R { - r := &info.R[i] - if r.Sym != list { - continue - } - r.Add += int64(2 * ctxt.Arch.PtrSize) - } -} - // Read a pointer-sized uint from the beginning of buf. func readPtr(ctxt *Link, buf []byte) uint64 { switch ctxt.Arch.PtrSize { @@ -2030,9 +2065,9 @@ func dwarfaddelfsectionsyms(ctxt *Link) { } } -// dwarfcompress compresses the DWARF sections. This must happen after -// relocations are applied. After this, dwarfp will contain a -// different (new) set of symbols, and sections may have been replaced. +// dwarfcompress compresses the DWARF sections. Relocations are applied +// on the fly. After this, dwarfp will contain a different (new) set of +// symbols, and sections may have been replaced. func dwarfcompress(ctxt *Link) { supported := ctxt.IsELF || ctxt.HeadType == objabi.Hwindows || ctxt.HeadType == objabi.Hdarwin if !ctxt.compressDWARF || !supported || ctxt.LinkMode != LinkInternal { @@ -2066,6 +2101,7 @@ func dwarfcompress(ctxt *Link) { } } dwarfp = newDwarfp + ctxt.relocbuf = nil // no longer needed, don't hold it live // Re-compute the locations of the compressed DWARF symbols // and sections, since the layout of these within the file is @@ -2124,6 +2160,10 @@ func saveDwsectCUSize(sname string, pkgname string, size uint64) { dwsectCUSize[sname+"."+pkgname] = size } +func addDwsectCUSize(sname string, pkgname string, size uint64) { + dwsectCUSize[sname+"."+pkgname] += size +} + // getPkgFromCUSym returns the package name for the compilation unit // represented by s. // The prefix dwarf.InfoPrefix+".pkg." needs to be removed in order to get diff --git a/src/cmd/link/internal/ld/dwarf_test.go b/src/cmd/link/internal/ld/dwarf_test.go index 287ad5c99d..190a54c4c3 100644 --- a/src/cmd/link/internal/ld/dwarf_test.go +++ b/src/cmd/link/internal/ld/dwarf_test.go @@ -164,9 +164,9 @@ func main() { }` want := map[string]map[string]bool{ - "main.Foo": map[string]bool{"v": false}, - "main.Bar": map[string]bool{"Foo": true, "name": false}, - "main.Baz": map[string]bool{"Foo": true, "name": false}, + "main.Foo": {"v": false}, + "main.Bar": {"Foo": true, "name": false}, + "main.Baz": {"Foo": true, "name": false}, } dir, err := ioutil.TempDir("", "TestEmbeddedStructMarker") @@ -574,8 +574,8 @@ func TestInlinedRoutineRecords(t *testing.T) { if runtime.GOOS == "plan9" { t.Skip("skipping on plan9; no DWARF symbol table in executables") } - if runtime.GOOS == "solaris" || runtime.GOOS == "darwin" { - t.Skip("skipping on solaris and darwin, pending resolution of issue #23168") + if runtime.GOOS == "solaris" || runtime.GOOS == "illumos" || runtime.GOOS == "darwin" { + t.Skip("skipping on solaris, illumos, and darwin, pending resolution of issue #23168") } t.Parallel() @@ -801,8 +801,8 @@ func TestAbstractOriginSanity(t *testing.T) { if runtime.GOOS == "plan9" { t.Skip("skipping on plan9; no DWARF symbol table in executables") } - if runtime.GOOS == "solaris" || runtime.GOOS == "darwin" { - t.Skip("skipping on solaris and darwin, pending resolution of issue #23168") + if runtime.GOOS == "solaris" || runtime.GOOS == "illumos" || runtime.GOOS == "darwin" { + t.Skip("skipping on solaris, illumos, and darwin, pending resolution of issue #23168") } if wd, err := os.Getwd(); err == nil { @@ -819,8 +819,8 @@ func TestAbstractOriginSanityIssue25459(t *testing.T) { if runtime.GOOS == "plan9" { t.Skip("skipping on plan9; no DWARF symbol table in executables") } - if runtime.GOOS == "solaris" || runtime.GOOS == "darwin" { - t.Skip("skipping on solaris and darwin, pending resolution of issue #23168") + if runtime.GOOS == "solaris" || runtime.GOOS == "illumos" || runtime.GOOS == "darwin" { + t.Skip("skipping on solaris, illumos, and darwin, pending resolution of issue #23168") } if runtime.GOARCH != "amd64" && runtime.GOARCH != "x86" { t.Skip("skipping on not-amd64 not-x86; location lists not supported") @@ -840,8 +840,8 @@ func TestAbstractOriginSanityIssue26237(t *testing.T) { if runtime.GOOS == "plan9" { t.Skip("skipping on plan9; no DWARF symbol table in executables") } - if runtime.GOOS == "solaris" || runtime.GOOS == "darwin" { - t.Skip("skipping on solaris and darwin, pending resolution of issue #23168") + if runtime.GOOS == "solaris" || runtime.GOOS == "illumos" || runtime.GOOS == "darwin" { + t.Skip("skipping on solaris, illumos, and darwin, pending resolution of issue #23168") } if wd, err := os.Getwd(); err == nil { gopathdir := filepath.Join(wd, "testdata", "issue26237") @@ -1142,3 +1142,56 @@ func main() { } } } + +func TestPackageNameAttr(t *testing.T) { + const dwarfAttrGoPackageName = dwarf.Attr(0x2905) + const dwarfGoLanguage = 22 + + testenv.MustHaveGoBuild(t) + + if runtime.GOOS == "plan9" { + t.Skip("skipping on plan9; no DWARF symbol table in executables") + } + + t.Parallel() + + dir, err := ioutil.TempDir("", "go-build") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + + const prog = "package main\nfunc main() {\nprintln(\"hello world\")\n}\n" + + f := gobuild(t, dir, prog, NoOpt) + + defer f.Close() + + d, err := f.DWARF() + if err != nil { + t.Fatalf("error reading DWARF: %v", err) + } + + rdr := d.Reader() + for { + e, err := rdr.Next() + if err != nil { + t.Fatal(err) + } + if e == nil { + break + } + if e.Tag != dwarf.TagCompileUnit { + continue + } + if lang, _ := e.Val(dwarf.AttrLanguage).(int64); lang != dwarfGoLanguage { + continue + } + + _, ok := e.Val(dwarfAttrGoPackageName).(string) + if !ok { + name, _ := e.Val(dwarf.AttrName).(string) + t.Errorf("found compile unit without package name: %s", name) + } + } +} diff --git a/src/cmd/link/internal/ld/elf.go b/src/cmd/link/internal/ld/elf.go index c2a2b3a7ba..5a3098ce85 100644 --- a/src/cmd/link/internal/ld/elf.go +++ b/src/cmd/link/internal/ld/elf.go @@ -1290,11 +1290,9 @@ func elfshreloc(arch *sys.Arch, sect *sym.Section) *ElfShdr { return nil } - var typ int + typ := SHT_REL if elfRelType == ".rela" { typ = SHT_RELA - } else { - typ = SHT_REL } sh := elfshname(elfRelType + sect.Name) @@ -1441,6 +1439,7 @@ func (ctxt *Link) doelf() { Addstring(shstrtab, ".data") Addstring(shstrtab, ".bss") Addstring(shstrtab, ".noptrbss") + Addstring(shstrtab, ".go.buildinfo") // generate .tbss section for dynamic internal linker or external // linking, so that various binutils could correctly calculate @@ -1487,6 +1486,7 @@ func (ctxt *Link) doelf() { if ctxt.UseRelro() { Addstring(shstrtab, elfRelType+".data.rel.ro") } + Addstring(shstrtab, elfRelType+".go.buildinfo") // add a .note.GNU-stack section to mark the stack as non-executable Addstring(shstrtab, ".note.GNU-stack") @@ -1840,6 +1840,11 @@ func Asmbelf(ctxt *Link, symo int64) { sh.type_ = SHT_PROGBITS sh.flags = SHF_ALLOC sh.addralign = 1 + + if interpreter == "" && objabi.GO_LDSO != "" { + interpreter = objabi.GO_LDSO + } + if interpreter == "" { switch ctxt.HeadType { case objabi.Hlinux: diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go index 91673a8d4d..831e3de829 100644 --- a/src/cmd/link/internal/ld/lib.go +++ b/src/cmd/link/internal/ld/lib.go @@ -44,6 +44,7 @@ import ( "cmd/link/internal/sym" "crypto/sha1" "debug/elf" + "debug/macho" "encoding/base64" "encoding/binary" "encoding/hex" @@ -126,13 +127,21 @@ type Arch struct { // offset value. Archrelocvariant func(link *Link, rel *sym.Reloc, sym *sym.Symbol, offset int64) (relocatedOffset int64) - Trampoline func(*Link, *sym.Reloc, *sym.Symbol) - Asmb func(*Link) + Trampoline func(*Link, *sym.Reloc, *sym.Symbol) + + // Asmb and Asmb2 are arch-specific routines that write the output + // file. Typically, Asmb writes most of the content (sections and + // segments), for which we have computed the size and offset. Asmb2 + // writes the rest. + Asmb func(*Link) + Asmb2 func(*Link) + Elfreloc1 func(*Link, *sym.Reloc, int64) bool Elfsetupplt func(*Link) Gentext func(*Link) Machoreloc1 func(*sys.Arch, *OutBuf, *sym.Symbol, *sym.Reloc, int64) bool PEreloc1 func(*sys.Arch, *OutBuf, *sym.Symbol, *sym.Reloc, int64) bool + Xcoffreloc1 func(*sys.Arch, *OutBuf, *sym.Symbol, *sym.Reloc, int64) bool // TLSIEtoLE converts a TLS Initial Executable relocation to // a TLS Local Executable relocation. @@ -177,9 +186,9 @@ func (ctxt *Link) CanUsePlugins() bool { func (ctxt *Link) UseRelro() bool { switch ctxt.BuildMode { case BuildModeCArchive, BuildModeCShared, BuildModeShared, BuildModePIE, BuildModePlugin: - return ctxt.IsELF + return ctxt.IsELF || ctxt.HeadType == objabi.Haix default: - return ctxt.linkShared + return ctxt.linkShared || (ctxt.HeadType == objabi.Haix && ctxt.LinkMode == LinkExternal) } } @@ -198,6 +207,10 @@ var ( nerrors int liveness int64 + + // See -strictdups command line flag. + checkStrictDups int // 0=off 1=warning 2=error + strictDupMsgCount int ) var ( @@ -255,7 +268,7 @@ func libinit(ctxt *Link) { Lflag(ctxt, filepath.Join(objabi.GOROOT, "pkg", fmt.Sprintf("%s_%s%s%s", objabi.GOOS, objabi.GOARCH, suffixsep, suffix))) mayberemoveoutfile() - f, err := os.OpenFile(*flagOutfile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0775) + f, err := os.OpenFile(*flagOutfile, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0775) if err != nil { Exitf("cannot create %s: %v", *flagOutfile, err) } @@ -281,6 +294,9 @@ func errorexit() { if nerrors != 0 { Exit(2) } + if checkStrictDups > 1 && strictDupMsgCount > 0 { + Exit(2) + } Exit(0) } @@ -321,18 +337,24 @@ func loadinternal(ctxt *Link, name string) *sym.Library { return nil } -// findLibPathCmd uses cmd command to find gcc library libname. -// It returns library full path if found, or "none" if not found. -func (ctxt *Link) findLibPathCmd(cmd, libname string) string { +// extld returns the current external linker. +func (ctxt *Link) extld() string { if *flagExtld == "" { *flagExtld = "gcc" } + return *flagExtld +} + +// findLibPathCmd uses cmd command to find gcc library libname. +// It returns library full path if found, or "none" if not found. +func (ctxt *Link) findLibPathCmd(cmd, libname string) string { + extld := ctxt.extld() args := hostlinkArchArgs(ctxt.Arch) args = append(args, cmd) if ctxt.Debugvlog != 0 { - ctxt.Logf("%s %v\n", *flagExtld, args) + ctxt.Logf("%s %v\n", extld, args) } - out, err := exec.Command(*flagExtld, args...).Output() + out, err := exec.Command(extld, args...).Output() if err != nil { if ctxt.Debugvlog != 0 { ctxt.Logf("not using a %s file because compiler failed\n%v\n%s\n", libname, err, out) @@ -405,7 +427,7 @@ func (ctxt *Link) loadlib() { *FlagTextAddr = 0 } - if ctxt.LinkMode == LinkExternal && ctxt.Arch.Family == sys.PPC64 { + if ctxt.LinkMode == LinkExternal && ctxt.Arch.Family == sys.PPC64 && objabi.GOOS != "aix" { toc := ctxt.Syms.Lookup(".TOC.", 0) toc.Type = sym.SDYNIMPORT } @@ -445,18 +467,23 @@ func (ctxt *Link) loadlib() { } } - tlsg := ctxt.Syms.Lookup("runtime.tlsg", 0) + // The Android Q linker started to complain about underalignment of the our TLS + // section. We don't actually use the section on android, so dont't + // generate it. + if objabi.GOOS != "android" { + tlsg := ctxt.Syms.Lookup("runtime.tlsg", 0) - // runtime.tlsg is used for external linking on platforms that do not define - // a variable to hold g in assembly (currently only intel). - if tlsg.Type == 0 { - tlsg.Type = sym.STLSBSS - tlsg.Size = int64(ctxt.Arch.PtrSize) - } else if tlsg.Type != sym.SDYNIMPORT { - Errorf(nil, "runtime declared tlsg variable %v", tlsg.Type) + // runtime.tlsg is used for external linking on platforms that do not define + // a variable to hold g in assembly (currently only intel). + if tlsg.Type == 0 { + tlsg.Type = sym.STLSBSS + tlsg.Size = int64(ctxt.Arch.PtrSize) + } else if tlsg.Type != sym.SDYNIMPORT { + Errorf(nil, "runtime declared tlsg variable %v", tlsg.Type) + } + tlsg.Attr |= sym.AttrReachable + ctxt.Tlsg = tlsg } - tlsg.Attr |= sym.AttrReachable - ctxt.Tlsg = tlsg var moduledata *sym.Symbol if ctxt.BuildMode == BuildModePlugin { @@ -714,7 +741,7 @@ func nextar(bp *bio.Reader, off int64, a *ArHdr) int64 { if off&1 != 0 { off++ } - bp.Seek(off, 0) + bp.MustSeek(off, 0) var buf [SAR_HDR]byte if n, err := io.ReadFull(bp, buf[:]); err != nil { if n == 0 && err != io.EOF { @@ -837,8 +864,8 @@ func loadobjfile(ctxt *Link, lib *sym.Library) { } /* load it as a regular file */ - l := f.Seek(0, 2) - f.Seek(0, 0) + l := f.MustSeek(0, 2) + f.MustSeek(0, 0) ldobj(ctxt, f, lib, l, lib.File, lib.File) return } @@ -959,7 +986,7 @@ func hostobjs(ctxt *Link) { Exitf("cannot reopen %s: %v", h.pn, err) } - f.Seek(h.off, 0) + f.MustSeek(h.off, 0) h.ld(ctxt, f, h.pkg, h.length, h.pn) f.Close() } @@ -995,7 +1022,7 @@ func hostlinksetup(ctxt *Link) { p := filepath.Join(*flagTmpdir, "go.o") var err error - f, err := os.OpenFile(p, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0775) + f, err := os.OpenFile(p, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0775) if err != nil { Exitf("cannot create %s: %v", p, err) } @@ -1090,7 +1117,11 @@ func (ctxt *Link) archive() { } ctxt.Out.f = nil - argv := []string{*flagExtar, "-q", "-c", "-s", *flagOutfile} + argv := []string{*flagExtar, "-q", "-c", "-s"} + if ctxt.HeadType == objabi.Haix { + argv = append(argv, "-X64") + } + argv = append(argv, *flagOutfile) argv = append(argv, filepath.Join(*flagTmpdir, "go.o")) argv = append(argv, hostobjCopy()...) @@ -1111,12 +1142,8 @@ func (ctxt *Link) hostlink() { return } - if *flagExtld == "" { - *flagExtld = "gcc" - } - var argv []string - argv = append(argv, *flagExtld) + argv = append(argv, ctxt.extld()) argv = append(argv, hostlinkArchArgs(ctxt.Arch)...) if *FlagS || debug_s { @@ -1146,6 +1173,15 @@ func (ctxt *Link) hostlink() { } else { argv = append(argv, "-mconsole") } + case objabi.Haix: + argv = append(argv, "-pthread") + // prevent ld to reorder .text functions to keep the same + // first/last functions for moduledata. + argv = append(argv, "-Wl,-bnoobjreorder") + // mcmodel=large is needed for every gcc generated files, but + // ld still need -bbigtoc in order to allow larger TOC. + argv = append(argv, "-mcmodel=large") + argv = append(argv, "-Wl,-bbigtoc") } switch ctxt.BuildMode { @@ -1161,7 +1197,7 @@ func (ctxt *Link) hostlink() { } case BuildModePIE: // ELF. - if ctxt.HeadType != objabi.Hdarwin { + if ctxt.HeadType != objabi.Hdarwin && ctxt.HeadType != objabi.Haix { if ctxt.UseRelro() { argv = append(argv, "-Wl,-z,relro") } @@ -1261,6 +1297,10 @@ func (ctxt *Link) hostlink() { if ctxt.IsELF { argv = append(argv, "-rdynamic") } + if ctxt.HeadType == objabi.Haix { + fileName := xcoffCreateExportFile(ctxt) + argv = append(argv, "-Wl,-bE:"+fileName) + } if strings.Contains(argv[0], "clang") { argv = append(argv, "-Qunused-arguments") @@ -1273,6 +1313,25 @@ func (ctxt *Link) hostlink() { argv = append(argv, filepath.Join(*flagTmpdir, "go.o")) argv = append(argv, hostobjCopy()...) + if ctxt.HeadType == objabi.Haix { + // We want to have C files after Go files to remove + // trampolines csects made by ld. + argv = append(argv, "-nostartfiles") + argv = append(argv, "/lib/crt0_64.o") + + extld := ctxt.extld() + // Get starting files. + getPathFile := func(file string) string { + args := []string{"-maix64", "--print-file-name=" + file} + out, err := exec.Command(extld, args...).CombinedOutput() + if err != nil { + log.Fatalf("running %s failed: %v\n%s", extld, err, out) + } + return strings.Trim(string(out), "\n") + } + argv = append(argv, getPathFile("crtcxa.o")) + argv = append(argv, getPathFile("crtdbase.o")) + } if ctxt.linkShared { seenDirs := make(map[string]bool) @@ -1376,11 +1435,24 @@ func (ctxt *Link) hostlink() { // Filter out useless linker warnings caused by bugs outside Go. // See also cmd/go/internal/work/exec.go's gccld method. var save [][]byte + var skipLines int for _, line := range bytes.SplitAfter(out, []byte("\n")) { // golang.org/issue/26073 - Apple Xcode bug if bytes.Contains(line, []byte("ld: warning: text-based stub file")) { continue } + + if skipLines > 0 { + skipLines-- + continue + } + + // Remove TOC overflow warning on AIX. + if bytes.Contains(line, []byte("ld: 0711-783")) { + skipLines = 2 + continue + } + save = append(save, line) } out = bytes.Join(save, nil) @@ -1402,11 +1474,20 @@ func (ctxt *Link) hostlink() { } // For os.Rename to work reliably, must be in same directory as outfile. combinedOutput := *flagOutfile + "~" - isIOS, err := machoCombineDwarf(ctxt, *flagOutfile, dsym, combinedOutput) + exef, err := os.Open(*flagOutfile) if err != nil { Exitf("%s: combining dwarf failed: %v", os.Args[0], err) } - if !isIOS { + defer exef.Close() + exem, err := macho.NewFile(exef) + if err != nil { + Exitf("%s: parsing Mach-O header failed: %v", os.Args[0], err) + } + // Only macOS supports unmapped segments such as our __DWARF segment. + if machoPlatform == PLATFORM_MACOS { + if err := machoCombineDwarf(ctxt, exef, exem, dsym, combinedOutput); err != nil { + Exitf("%s: combining dwarf failed: %v", os.Args[0], err) + } os.Remove(*flagOutfile) if err := os.Rename(combinedOutput, *flagOutfile); err != nil { Exitf("%s: %v", os.Args[0], err) @@ -1494,7 +1575,7 @@ func hostlinkArchArgs(arch *sys.Arch) []string { switch arch.Family { case sys.I386: return []string{"-m32"} - case sys.AMD64, sys.PPC64, sys.S390X: + case sys.AMD64, sys.S390X: return []string{"-m64"} case sys.ARM: return []string{"-marm"} @@ -1504,6 +1585,13 @@ func hostlinkArchArgs(arch *sys.Arch) []string { return []string{"-mabi=64"} case sys.MIPS: return []string{"-mabi=32"} + case sys.PPC64: + if objabi.GOOS == "aix" { + return []string{"-maix64"} + } else { + return []string{"-m64"} + } + } return nil } @@ -1520,7 +1608,7 @@ func ldobj(ctxt *Link, f *bio.Reader, lib *sym.Library, length int64, pn string, c2 := bgetc(f) c3 := bgetc(f) c4 := bgetc(f) - f.Seek(start, 0) + f.MustSeek(start, 0) magic := uint32(c1)<<24 | uint32(c2)<<16 | uint32(c3)<<8 | uint32(c4) if magic == 0x7f454c46 { // \x7F E L F @@ -1653,11 +1741,23 @@ func ldobj(ctxt *Link, f *bio.Reader, lib *sym.Library, length int64, pn string, import1 := f.Offset() - f.Seek(import0, 0) + f.MustSeek(import0, 0) ldpkg(ctxt, f, lib, import1-import0-2, pn) // -2 for !\n - f.Seek(import1, 0) + f.MustSeek(import1, 0) - objfile.Load(ctxt.Arch, ctxt.Syms, f, lib, eof-f.Offset(), pn) + flags := 0 + switch *FlagStrictDups { + case 0: + break + case 1: + flags = objfile.StrictDupsWarnFlag + case 2: + flags = objfile.StrictDupsErrFlag + default: + log.Fatalf("invalid -strictdups flag value %d", *FlagStrictDups) + } + c := objfile.Load(ctxt.Arch, ctxt.Syms, f, lib, eof-f.Offset(), pn, flags) + strictDupMsgCount += c addImports(ctxt, lib, pn) return nil } @@ -2016,9 +2116,9 @@ func stkcheck(ctxt *Link, up *chain, depth int) int { endr := len(s.R) var ch1 chain - var pcsp Pciter + pcsp := newPCIter(ctxt) var r *sym.Reloc - for pciterinit(ctxt, &pcsp, &s.FuncInfo.Pcsp); pcsp.done == 0; pciternext(&pcsp) { + for pcsp.init(s.FuncInfo.Pcsp.P); !pcsp.done; pcsp.next() { // pcsp.value is in effect for [pcsp.pc, pcsp.nextpc). // Check stack size in effect for this span. @@ -2125,9 +2225,10 @@ func genasmsym(ctxt *Link, put func(*Link, *sym.Symbol, string, SymbolType, int6 s := ctxt.Syms.Lookup("runtime.text", 0) if s.Type == sym.STEXT { // We've already included this symbol in ctxt.Textp - // if ctxt.DynlinkingGo() && ctxt.HeadType == objabi.Hdarwin. + // if ctxt.DynlinkingGo() && ctxt.HeadType == objabi.Hdarwin or + // on AIX with external linker. // See data.go:/textaddress - if !(ctxt.DynlinkingGo() && ctxt.HeadType == objabi.Hdarwin) { + if !(ctxt.DynlinkingGo() && ctxt.HeadType == objabi.Hdarwin) && !(ctxt.HeadType == objabi.Haix && ctxt.LinkMode == LinkExternal) { put(ctxt, s, s.Name, TextSym, s.Value, nil) } } @@ -2140,7 +2241,8 @@ func genasmsym(ctxt *Link, put func(*Link, *sym.Symbol, string, SymbolType, int6 n++ continue } - if sect.Name != ".text" { + if sect.Name != ".text" || (ctxt.HeadType == objabi.Haix && ctxt.LinkMode == LinkExternal) { + // On AIX, runtime.text.X are symbols already in the symtab. break } s = ctxt.Syms.ROLookup(fmt.Sprintf("runtime.text.%d", n), 0) @@ -2156,18 +2258,31 @@ func genasmsym(ctxt *Link, put func(*Link, *sym.Symbol, string, SymbolType, int6 s = ctxt.Syms.Lookup("runtime.etext", 0) if s.Type == sym.STEXT { // We've already included this symbol in ctxt.Textp - // if ctxt.DynlinkingGo() && ctxt.HeadType == objabi.Hdarwin. + // if ctxt.DynlinkingGo() && ctxt.HeadType == objabi.Hdarwin or + // on AIX with external linker. // See data.go:/textaddress - if !(ctxt.DynlinkingGo() && ctxt.HeadType == objabi.Hdarwin) { + if !(ctxt.DynlinkingGo() && ctxt.HeadType == objabi.Hdarwin) && !(ctxt.HeadType == objabi.Haix && ctxt.LinkMode == LinkExternal) { put(ctxt, s, s.Name, TextSym, s.Value, nil) } } - for _, s := range ctxt.Syms.Allsym { + shouldBeInSymbolTable := func(s *sym.Symbol) bool { if s.Attr.NotInSymbolTable() { - continue + return false + } + if ctxt.HeadType == objabi.Haix && s.Name == ".go.buildinfo" { + // On AIX, .go.buildinfo must be in the symbol table as + // it has relocations. + return true } if (s.Name == "" || s.Name[0] == '.') && !s.IsFileLocal() && s.Name != ".rathole" && s.Name != ".TOC." { + return false + } + return true + } + + for _, s := range ctxt.Syms.Allsym { + if !shouldBeInSymbolTable(s) { continue } switch s.Type { @@ -2378,7 +2493,7 @@ func (ctxt *Link) callgraph() { if r.Sym == nil { continue } - if (r.Type == objabi.R_CALL || r.Type == objabi.R_CALLARM || r.Type == objabi.R_CALLPOWER || r.Type == objabi.R_CALLMIPS) && r.Sym.Type == sym.STEXT { + if (r.Type == objabi.R_CALL || r.Type == objabi.R_CALLARM || r.Type == objabi.R_CALLARM64 || r.Type == objabi.R_CALLPOWER || r.Type == objabi.R_CALLMIPS) && r.Sym.Type == sym.STEXT { ctxt.Logf("%s calls %s\n", s.Name, r.Sym.Name) } } diff --git a/src/cmd/link/internal/ld/link.go b/src/cmd/link/internal/ld/link.go index 8ed5c6e27e..d3ffacf54e 100644 --- a/src/cmd/link/internal/ld/link.go +++ b/src/cmd/link/internal/ld/link.go @@ -93,6 +93,8 @@ type Link struct { compUnits []*compilationUnit // DWARF compilation units compUnitByPackage map[*sym.Library]*compilationUnit + + relocbuf []byte // temporary buffer for applying relocations } type unresolvedSymKey struct { @@ -169,14 +171,3 @@ func addImports(ctxt *Link, l *sym.Library, pn string) { } l.ImportStrings = nil } - -type Pciter struct { - d sym.Pcdata - p []byte - pc uint32 - nextpc uint32 - pcscale uint32 - value int32 - start int - done int -} diff --git a/src/cmd/link/internal/ld/macho.go b/src/cmd/link/internal/ld/macho.go index b935814ff0..cbf88e43d2 100644 --- a/src/cmd/link/internal/ld/macho.go +++ b/src/cmd/link/internal/ld/macho.go @@ -5,9 +5,15 @@ package ld import ( + "bytes" "cmd/internal/objabi" "cmd/internal/sys" "cmd/link/internal/sym" + "debug/macho" + "encoding/binary" + "fmt" + "io" + "os" "sort" "strings" ) @@ -45,11 +51,20 @@ type MachoSeg struct { flag uint32 } +// MachoPlatformLoad represents a LC_VERSION_MIN_* or +// LC_BUILD_VERSION load command. +type MachoPlatformLoad struct { + platform MachoPlatform // One of PLATFORM_* constants. + cmd MachoLoad +} + type MachoLoad struct { type_ uint32 data []uint32 } +type MachoPlatform int + /* * Total amount of space to reserve at the start of the file * for Header, PHeaders, and SHeaders. @@ -167,6 +182,14 @@ const ( S_ATTR_SOME_INSTRUCTIONS = 0x00000400 ) +const ( + PLATFORM_MACOS MachoPlatform = 1 + PLATFORM_IOS MachoPlatform = 2 + PLATFORM_TVOS MachoPlatform = 3 + PLATFORM_WATCHOS MachoPlatform = 4 + PLATFORM_BRIDGEOS MachoPlatform = 5 +) + // Mach-O file writing // https://developer.apple.com/mac/library/DOCUMENTATION/DeveloperTools/Conceptual/MachORuntime/Reference/reference.html @@ -174,6 +197,8 @@ var machohdr MachoHdr var load []MachoLoad +var machoPlatform MachoPlatform + var seg [16]MachoSeg var nseg int @@ -365,6 +390,38 @@ func (ctxt *Link) domacho() { return } + // Copy platform load command. + for _, h := range hostobj { + load, err := hostobjMachoPlatform(&h) + if err != nil { + Exitf("%v", err) + } + if load != nil { + machoPlatform = load.platform + ml := newMachoLoad(ctxt.Arch, load.cmd.type_, uint32(len(load.cmd.data))) + copy(ml.data, load.cmd.data) + break + } + } + if machoPlatform == 0 { + machoPlatform = PLATFORM_MACOS + if ctxt.LinkMode == LinkInternal { + // For lldb, must say LC_VERSION_MIN_MACOSX or else + // it won't know that this Mach-O binary is from OS X + // (could be iOS or WatchOS instead). + // Go on iOS uses linkmode=external, and linkmode=external + // adds this itself. So we only need this code for linkmode=internal + // and we can assume OS X. + // + // See golang.org/issues/12941. + // + // The version must be at least 10.9; see golang.org/issues/30488. + ml := newMachoLoad(ctxt.Arch, LC_VERSION_MIN_MACOSX, 2) + ml.data[0] = 10<<16 | 9<<8 | 0<<0 // OS X version 10.9.0 + ml.data[1] = 10<<16 | 9<<8 | 0<<0 // SDK 10.9.0 + } + } + // empirically, string table must begin with " \x00". s := ctxt.Syms.Lookup(".machosymstr", 0) @@ -395,6 +452,14 @@ func (ctxt *Link) domacho() { s.Type = sym.SMACHOINDIRECTGOT s.Attr |= sym.AttrReachable } + + // Add a dummy symbol that will become the __asm marker section. + if ctxt.LinkMode == LinkExternal { + s := ctxt.Syms.Lookup(".llvmasm", 0) + s.Type = sym.SMACHO + s.Attr |= sym.AttrReachable + s.AddUint8(0) + } } func machoadddynlib(lib string, linkmode LinkMode) { @@ -481,6 +546,17 @@ func machoshbits(ctxt *Link, mseg *MachoSeg, sect *sym.Section, segname string) msect.flag = S_MOD_INIT_FUNC_POINTERS } + // Some platforms such as watchOS and tvOS require binaries with + // bitcode enabled. The Go toolchain can't output bitcode, so use + // a marker section in the __LLVM segment, "__asm", to tell the Apple + // toolchain that the Go text came from assembler and thus has no + // bitcode. This is not true, but Kotlin/Native, Rust and Flutter + // are also using this trick. + if sect.Name == ".llvmasm" { + msect.name = "__asm" + msect.segname = "__LLVM" + } + if segname == "__DWARF" { msect.flag |= S_ATTR_DEBUG } @@ -518,12 +594,8 @@ func Asmbmacho(ctxt *Link) { ms = newMachoSeg("", 40) ms.fileoffset = Segtext.Fileoff - if ctxt.Arch.Family == sys.ARM || ctxt.BuildMode == BuildModeCArchive { - ms.filesize = Segdata.Fileoff + Segdata.Filelen - Segtext.Fileoff - } else { - ms.filesize = Segdwarf.Fileoff + Segdwarf.Filelen - Segtext.Fileoff - ms.vsize = Segdwarf.Vaddr + Segdwarf.Length - Segtext.Vaddr - } + ms.filesize = Segdwarf.Fileoff + Segdwarf.Filelen - Segtext.Fileoff + ms.vsize = Segdwarf.Vaddr + Segdwarf.Length - Segtext.Vaddr } /* segment for zero page */ @@ -653,20 +725,6 @@ func Asmbmacho(ctxt *Link) { } } - if ctxt.LinkMode == LinkInternal { - // For lldb, must say LC_VERSION_MIN_MACOSX or else - // it won't know that this Mach-O binary is from OS X - // (could be iOS or WatchOS instead). - // Go on iOS uses linkmode=external, and linkmode=external - // adds this itself. So we only need this code for linkmode=internal - // and we can assume OS X. - // - // See golang.org/issues/12941. - ml := newMachoLoad(ctxt.Arch, LC_VERSION_MIN_MACOSX, 2) - ml.data[0] = 10<<16 | 7<<8 | 0<<0 // OS X version 10.7.0 - ml.data[1] = 10<<16 | 7<<8 | 0<<0 // SDK 10.7.0 - } - a := machowrite(ctxt.Arch, ctxt.Out, ctxt.LinkMode) if int32(a) > HEADR { Exitf("HEADR too small: %d > %d", a, HEADR) @@ -730,6 +788,27 @@ func (x machoscmp) Less(i, j int) bool { func machogenasmsym(ctxt *Link) { genasmsym(ctxt, addsym) for _, s := range ctxt.Syms.Allsym { + // Some 64-bit functions have a "$INODE64" or "$INODE64$UNIX2003" suffix. + if s.Type == sym.SDYNIMPORT && s.Dynimplib() == "/usr/lib/libSystem.B.dylib" { + // But only on macOS. + if machoPlatform == PLATFORM_MACOS { + switch n := s.Extname(); n { + case "fdopendir": + switch objabi.GOARCH { + case "amd64": + s.SetExtname(n + "$INODE64") + case "386": + s.SetExtname(n + "$INODE64$UNIX2003") + } + case "readdir_r", "getfsstat": + switch objabi.GOARCH { + case "amd64", "386": + s.SetExtname(n + "$INODE64") + } + } + } + } + if s.Type == sym.SDYNIMPORT || s.Type == sym.SHOSTOBJ { if s.Attr.Reachable() { addsym(ctxt, s, "", DataSym, 0, nil) @@ -778,7 +857,7 @@ func machoShouldExport(ctxt *Link, s *sym.Symbol) bool { if strings.HasPrefix(s.Name, "go.link.pkghash") { return true } - return s.Type >= sym.SELFSECT // only writable sections + return s.Type >= sym.SFirstWritable // only writable sections } func machosymtab(ctxt *Link) { @@ -977,3 +1056,58 @@ func Machoemitreloc(ctxt *Link) { machorelocsect(ctxt, sect, dwarfp) } } + +// hostobjMachoPlatform returns the first platform load command found +// in the host object, if any. +func hostobjMachoPlatform(h *Hostobj) (*MachoPlatformLoad, error) { + f, err := os.Open(h.file) + if err != nil { + return nil, fmt.Errorf("%s: failed to open host object: %v\n", h.file, err) + } + defer f.Close() + sr := io.NewSectionReader(f, h.off, h.length) + m, err := macho.NewFile(sr) + if err != nil { + // Not a valid Mach-O file. + return nil, nil + } + return peekMachoPlatform(m) +} + +// peekMachoPlatform returns the first LC_VERSION_MIN_* or LC_BUILD_VERSION +// load command found in the Mach-O file, if any. +func peekMachoPlatform(m *macho.File) (*MachoPlatformLoad, error) { + for _, cmd := range m.Loads { + raw := cmd.Raw() + ml := MachoLoad{ + type_: m.ByteOrder.Uint32(raw), + } + // Skip the type and command length. + data := raw[8:] + var p MachoPlatform + switch ml.type_ { + case LC_VERSION_MIN_IPHONEOS: + p = PLATFORM_IOS + case LC_VERSION_MIN_MACOSX: + p = PLATFORM_MACOS + case LC_VERSION_MIN_WATCHOS: + p = PLATFORM_WATCHOS + case LC_VERSION_MIN_TVOS: + p = PLATFORM_TVOS + case LC_BUILD_VERSION: + p = MachoPlatform(m.ByteOrder.Uint32(data)) + default: + continue + } + ml.data = make([]uint32, len(data)/4) + r := bytes.NewReader(data) + if err := binary.Read(r, m.ByteOrder, &ml.data); err != nil { + return nil, err + } + return &MachoPlatformLoad{ + platform: p, + cmd: ml, + }, nil + } + return nil, nil +} diff --git a/src/cmd/link/internal/ld/macho_combine_dwarf.go b/src/cmd/link/internal/ld/macho_combine_dwarf.go index 95bd4c7c36..dd2ab4c5b0 100644 --- a/src/cmd/link/internal/ld/macho_combine_dwarf.go +++ b/src/cmd/link/internal/ld/macho_combine_dwarf.go @@ -86,55 +86,29 @@ func (r loadCmdReader) WriteAt(offset int64, data interface{}) error { } // machoCombineDwarf merges dwarf info generated by dsymutil into a macho executable. -// machoCombineDwarf returns true and skips merging if the input executable is for iOS. // // With internal linking, DWARF is embedded into the executable, this lets us do the // same for external linking. -// inexe is the path to the executable with no DWARF. It must have enough room in the macho +// exef is the file of the executable with no DWARF. It must have enough room in the macho // header to add the DWARF sections. (Use ld's -headerpad option) +// exem is the macho representation of exef. // dsym is the path to the macho file containing DWARF from dsymutil. // outexe is the path where the combined executable should be saved. -func machoCombineDwarf(ctxt *Link, inexe, dsym, outexe string) (bool, error) { - exef, err := os.Open(inexe) - if err != nil { - return false, err - } - exem, err := macho.NewFile(exef) - if err != nil { - return false, err - } - cmdOffset := unsafe.Sizeof(exem.FileHeader) - is64bit := exem.Magic == macho.Magic64 - if is64bit { - // mach_header_64 has one extra uint32. - cmdOffset += unsafe.Sizeof(exem.Magic) - } - // Check for LC_VERSION_MIN_IPHONEOS. - reader := loadCmdReader{next: int64(cmdOffset), f: exef, order: exem.ByteOrder} - for i := uint32(0); i < exem.Ncmd; i++ { - cmd, err := reader.Next() - if err != nil { - return false, err - } - if cmd.Cmd == LC_VERSION_MIN_IPHONEOS { - // The executable is for iOS, which doesn't support unmapped - // segments such as our __DWARF segment. Skip combining. - return true, nil - } - } +func machoCombineDwarf(ctxt *Link, exef *os.File, exem *macho.File, dsym, outexe string) error { dwarff, err := os.Open(dsym) if err != nil { - return false, err + return err } + defer dwarff.Close() outf, err := os.Create(outexe) if err != nil { - return false, err + return err } outf.Chmod(0755) dwarfm, err := macho.NewFile(dwarff) if err != nil { - return false, err + return err } // The string table needs to be the last thing in the file @@ -142,26 +116,26 @@ func machoCombineDwarf(ctxt *Link, inexe, dsym, outexe string) (bool, error) { // linkedit section, but all the others can be copied directly. linkseg = exem.Segment("__LINKEDIT") if linkseg == nil { - return false, fmt.Errorf("missing __LINKEDIT segment") + return fmt.Errorf("missing __LINKEDIT segment") } if _, err = exef.Seek(0, 0); err != nil { - return false, err + return err } if _, err := io.CopyN(outf, exef, int64(linkseg.Offset)); err != nil { - return false, err + return err } realdwarf = dwarfm.Segment("__DWARF") if realdwarf == nil { - return false, fmt.Errorf("missing __DWARF segment") + return fmt.Errorf("missing __DWARF segment") } // Try to compress the DWARF sections. This includes some Apple // proprietary sections like __apple_types. compressedSects, compressedBytes, err := machoCompressSections(ctxt, dwarfm) if err != nil { - return false, err + return err } // Now copy the dwarf data into the output. @@ -169,12 +143,12 @@ func machoCombineDwarf(ctxt *Link, inexe, dsym, outexe string) (bool, error) { // even though we mark this one as being 0 bytes of virtual address space. dwarfstart = machoCalcStart(realdwarf.Offset, linkseg.Offset, pageAlign) if _, err = outf.Seek(dwarfstart, 0); err != nil { - return false, err + return err } dwarfaddr = int64((linkseg.Addr + linkseg.Memsz + 1<= -cap(it.d.P[len(it.d.P):]) { - it.done = 1 + if len(it.p) == 0 { + it.done = true return } // value delta - v := getvarint(&it.p) + val, n := binary.Varint(it.p) + if n <= 0 { + log.Fatalf("bad value varint in pciternext: read %v", n) + } + it.p = it.p[n:] - if v == 0 && it.start == 0 { - it.done = 1 + if val == 0 && !it.start { + it.done = true return } - it.start = 0 - dv := int32(v>>1) ^ (int32(v<<31) >> 31) - it.value += dv + it.start = false + it.value += int32(val) // pc delta - v = getvarint(&it.p) + pc, n := binary.Uvarint(it.p) + if n <= 0 { + log.Fatalf("bad pc varint in pciternext: read %v", n) + } + it.p = it.p[n:] - it.nextpc = it.pc + v*it.pcscale + it.nextpc = it.pc + uint32(pc)*it.pcscale } -func pciterinit(ctxt *Link, it *Pciter, d *sym.Pcdata) { - it.d = *d - it.p = it.d.P +// init prepares it to iterate over p, +// and advances it to the first pc. +func (it *PCIter) init(p []byte) { + it.p = p it.pc = 0 it.nextpc = 0 it.value = -1 - it.start = 1 - it.done = 0 - it.pcscale = uint32(ctxt.Arch.MinLC) - pciternext(it) + it.start = true + it.done = false + it.next() } -func addvarint(d *sym.Pcdata, val uint32) { - n := int32(0) - for v := val; v >= 0x80; v >>= 7 { - n++ - } - n++ - - old := len(d.P) - for cap(d.P) < len(d.P)+int(n) { - d.P = append(d.P[:cap(d.P)], 0) - } - d.P = d.P[:old+int(n)] - - p := d.P[old:] - var v uint32 - for v = val; v >= 0x80; v >>= 7 { - p[0] = byte(v | 0x80) - p = p[1:] - } - p[0] = byte(v) -} - -func addpctab(ctxt *Link, ftab *sym.Symbol, off int32, d *sym.Pcdata) int32 { - var start int32 - if len(d.P) > 0 { - start = int32(len(ftab.P)) - ftab.AddBytes(d.P) - } - return int32(ftab.SetUint32(ctxt.Arch, int64(off), uint32(start))) -} - -func ftabaddstring(ctxt *Link, ftab *sym.Symbol, s string) int32 { - n := int32(len(s)) + 1 - start := int32(len(ftab.P)) - ftab.Grow(int64(start) + int64(n) + 1) +func ftabaddstring(ftab *sym.Symbol, s string) int32 { + start := len(ftab.P) + ftab.Grow(int64(start + len(s) + 1)) // make room for s plus trailing NUL copy(ftab.P[start:], s) - return start + return int32(start) } // numberfile assigns a file number to the file if it hasn't been assigned already. @@ -129,10 +106,11 @@ func renumberfiles(ctxt *Link, files []*sym.Symbol, d *sym.Pcdata) { numberfile(ctxt, f) } + buf := make([]byte, binary.MaxVarintLen32) newval := int32(-1) var out sym.Pcdata - var it Pciter - for pciterinit(ctxt, &it, d); it.done == 0; pciternext(&it) { + it := newPCIter(ctxt) + for it.init(d.P); !it.done; it.next() { // value delta oldval := it.value @@ -148,15 +126,20 @@ func renumberfiles(ctxt *Link, files []*sym.Symbol, d *sym.Pcdata) { dv := val - newval newval = val - v := (uint32(dv) << 1) ^ uint32(dv>>31) - addvarint(&out, v) + + // value + n := binary.PutVarint(buf, int64(dv)) + out.P = append(out.P, buf[:n]...) // pc delta - addvarint(&out, (it.nextpc-it.pc)/it.pcscale) + pc := (it.nextpc - it.pc) / it.pcscale + n = binary.PutUvarint(buf, uint64(pc)) + out.P = append(out.P, buf[:n]...) } // terminating value delta - addvarint(&out, 0) + // we want to write varint-encoded 0, which is just 0 + out.P = append(out.P, 0) *d = out } @@ -164,7 +147,7 @@ func renumberfiles(ctxt *Link, files []*sym.Symbol, d *sym.Pcdata) { // onlycsymbol reports whether this is a symbol that is referenced by C code. func onlycsymbol(s *sym.Symbol) bool { switch s.Name { - case "_cgo_topofstack", "_cgo_panic", "crosscall2": + case "_cgo_topofstack", "__cgo_topofstack", "_cgo_panic", "crosscall2": return true } if strings.HasPrefix(s.Name, "_cgoexp_") { @@ -182,10 +165,7 @@ func emitPcln(ctxt *Link, s *sym.Symbol) bool { } // We want to generate func table entries only for the "lowest level" symbols, // not containers of subsymbols. - if s.Attr.Container() { - return true - } - return true + return !s.Attr.Container() } // pclntab initializes the pclntab symbol with @@ -212,7 +192,6 @@ func (ctxt *Link) pclntab() { // function table, alternating PC and offset to func struct [each entry thearch.ptrsize bytes] // end PC [thearch.ptrsize bytes] // offset to file table [4 bytes] - nfunc := int32(0) // Find container symbols and mark them as such. for _, s := range ctxt.Textp { @@ -221,9 +200,15 @@ func (ctxt *Link) pclntab() { } } + // Gather some basic stats and info. + var nfunc int32 for _, s := range ctxt.Textp { - if emitPcln(ctxt, s) { - nfunc++ + if !emitPcln(ctxt, s) { + continue + } + nfunc++ + if pclntabFirstFunc == nil { + pclntabFirstFunc = s } } @@ -239,16 +224,28 @@ func (ctxt *Link) pclntab() { nameToOffset := func(name string) int32 { nameoff, ok := funcnameoff[name] if !ok { - nameoff = ftabaddstring(ctxt, ftab, name) + nameoff = ftabaddstring(ftab, name) funcnameoff[name] = nameoff } return nameoff } - nfunc = 0 - var last *sym.Symbol + pctaboff := make(map[string]uint32) + writepctab := func(off int32, p []byte) int32 { + start, ok := pctaboff[string(p)] + if !ok { + if len(p) > 0 { + start = uint32(len(ftab.P)) + ftab.AddBytes(p) + } + pctaboff[string(p)] = start + } + newoff := int32(ftab.SetUint32(ctxt.Arch, int64(off), start)) + return newoff + } + + nfunc = 0 // repurpose nfunc as a running index for _, s := range ctxt.Textp { - last = s if !emitPcln(ctxt, s) { continue } @@ -257,10 +254,6 @@ func (ctxt *Link) pclntab() { pcln = &pclntabZpcln } - if pclntabFirstFunc == nil { - pclntabFirstFunc = s - } - if len(pcln.InlTree) > 0 { if len(pcln.Pcdata) <= objabi.PCDATA_InlTreeIndex { // Create inlining pcdata table. @@ -281,7 +274,7 @@ func (ctxt *Link) pclntab() { } funcstart := int32(len(ftab.P)) - funcstart += int32(-len(ftab.P)) & (int32(ctxt.Arch.PtrSize) - 1) + funcstart += int32(-len(ftab.P)) & (int32(ctxt.Arch.PtrSize) - 1) // align to ptrsize ftab.SetAddr(ctxt.Arch, 8+int64(ctxt.Arch.PtrSize)+int64(nfunc)*2*int64(ctxt.Arch.PtrSize), s) ftab.SetUint(ctxt.Arch, 8+int64(ctxt.Arch.PtrSize)+int64(nfunc)*2*int64(ctxt.Arch.PtrSize)+int64(ctxt.Arch.PtrSize), uint64(funcstart)) @@ -344,8 +337,8 @@ func (ctxt *Link) pclntab() { renumberfiles(ctxt, pcln.File, &pcln.Pcfile) if false { // Sanity check the new numbering - var it Pciter - for pciterinit(ctxt, &it, &pcln.Pcfile); it.done == 0; pciternext(&it) { + it := newPCIter(ctxt) + for it.init(pcln.Pcfile.P); !it.done; it.next() { if it.value < 1 || it.value > int32(len(ctxt.Filesyms)) { Errorf(s, "bad file number in pcfile: %d not in range [1, %d]\n", it.value, len(ctxt.Filesyms)) errorexit() @@ -382,10 +375,9 @@ func (ctxt *Link) pclntab() { } // pcdata - off = addpctab(ctxt, ftab, off, &pcln.Pcsp) - - off = addpctab(ctxt, ftab, off, &pcln.Pcfile) - off = addpctab(ctxt, ftab, off, &pcln.Pcline) + off = writepctab(off, pcln.Pcsp.P) + off = writepctab(off, pcln.Pcfile.P) + off = writepctab(off, pcln.Pcline.P) off = int32(ftab.SetUint32(ctxt.Arch, int64(off), uint32(len(pcln.Pcdata)))) // funcID uint8 @@ -403,7 +395,7 @@ func (ctxt *Link) pclntab() { // nfuncdata must be the final entry. off = int32(ftab.SetUint8(ctxt.Arch, int64(off), uint8(len(pcln.Funcdata)))) for i := range pcln.Pcdata { - off = addpctab(ctxt, ftab, off, &pcln.Pcdata[i]) + off = writepctab(off, pcln.Pcdata[i].P) } // funcdata, must be pointer-aligned and we're only int32-aligned. @@ -413,16 +405,15 @@ func (ctxt *Link) pclntab() { off += 4 } for i := range pcln.Funcdata { + dataoff := int64(off) + int64(ctxt.Arch.PtrSize)*int64(i) if pcln.Funcdata[i] == nil { - ftab.SetUint(ctxt.Arch, int64(off)+int64(ctxt.Arch.PtrSize)*int64(i), uint64(pcln.Funcdataoff[i])) - } else { - // TODO: Dedup. - funcdataBytes += pcln.Funcdata[i].Size - - ftab.SetAddrPlus(ctxt.Arch, int64(off)+int64(ctxt.Arch.PtrSize)*int64(i), pcln.Funcdata[i], pcln.Funcdataoff[i]) + ftab.SetUint(ctxt.Arch, dataoff, uint64(pcln.Funcdataoff[i])) + continue } + // TODO: Dedup. + funcdataBytes += pcln.Funcdata[i].Size + ftab.SetAddrPlus(ctxt.Arch, dataoff, pcln.Funcdata[i], pcln.Funcdataoff[i]) } - off += int32(len(pcln.Funcdata)) * int32(ctxt.Arch.PtrSize) } @@ -434,6 +425,7 @@ func (ctxt *Link) pclntab() { nfunc++ } + last := ctxt.Textp[len(ctxt.Textp)-1] pclntabLastFunc = last // Final entry of table is just end pc. ftab.SetAddrPlus(ctxt.Arch, 8+int64(ctxt.Arch.PtrSize)+int64(nfunc)*2*int64(ctxt.Arch.PtrSize), last, last.Size) @@ -449,7 +441,7 @@ func (ctxt *Link) pclntab() { ftab.SetUint32(ctxt.Arch, int64(start), uint32(len(ctxt.Filesyms)+1)) for i := len(ctxt.Filesyms) - 1; i >= 0; i-- { s := ctxt.Filesyms[i] - ftab.SetUint32(ctxt.Arch, int64(start)+s.Value*4, uint32(ftabaddstring(ctxt, ftab, s.Name))) + ftab.SetUint32(ctxt.Arch, int64(start)+s.Value*4, uint32(ftabaddstring(ftab, s.Name))) } ftab.Size = int64(len(ftab.P)) diff --git a/src/cmd/link/internal/ld/pe.go b/src/cmd/link/internal/ld/pe.go index 68251786ed..ca29da4f01 100644 --- a/src/cmd/link/internal/ld/pe.go +++ b/src/cmd/link/internal/ld/pe.go @@ -975,15 +975,9 @@ func Peinit(ctxt *Link) { if *FlagTextAddr == -1 { *FlagTextAddr = PEBASE + int64(PESECTHEADR) } - if *FlagDataAddr == -1 { - *FlagDataAddr = 0 - } if *FlagRound == -1 { *FlagRound = int(PESECTALIGN) } - if *FlagDataAddr != 0 && *FlagRound != 0 { - fmt.Printf("warning: -D0x%x is ignored because of -R0x%x\n", uint64(*FlagDataAddr), uint32(*FlagRound)) - } } func pewrite(ctxt *Link) { @@ -1407,7 +1401,7 @@ func addPEBaseRelocSym(ctxt *Link, s *sym.Symbol, rt *peBaseRelocTable) { if !r.Sym.Attr.Reachable() { continue } - if r.Type >= 256 { + if r.Type >= objabi.ElfRelocOffset { continue } if r.Siz == 0 { // informational relocation diff --git a/src/cmd/link/internal/ld/sym.go b/src/cmd/link/internal/ld/sym.go index a487b5e5f6..bf7a56aff2 100644 --- a/src/cmd/link/internal/ld/sym.go +++ b/src/cmd/link/internal/ld/sym.go @@ -61,6 +61,7 @@ func linknew(arch *sys.Arch) *Link { } // computeTLSOffset records the thread-local storage offset. +// Not used for Android where the TLS offset is determined at runtime. func (ctxt *Link) computeTLSOffset() { switch ctxt.HeadType { default: @@ -80,21 +81,7 @@ func (ctxt *Link) computeTLSOffset() { objabi.Hopenbsd, objabi.Hdragonfly, objabi.Hsolaris: - if objabi.GOOS == "android" { - switch ctxt.Arch.Family { - case sys.AMD64: - // Android/amd64 constant - offset from 0(FS) to our TLS slot. - // Explained in src/runtime/cgo/gcc_android_*.c - ctxt.Tlsoffset = 0x1d0 - case sys.I386: - // Android/386 constant - offset from 0(GS) to our TLS slot. - ctxt.Tlsoffset = 0xf8 - default: - ctxt.Tlsoffset = -1 * ctxt.Arch.PtrSize - } - } else { - ctxt.Tlsoffset = -1 * ctxt.Arch.PtrSize - } + ctxt.Tlsoffset = -1 * ctxt.Arch.PtrSize case objabi.Hnacl: switch ctxt.Arch.Family { diff --git a/src/cmd/link/internal/ld/symtab.go b/src/cmd/link/internal/ld/symtab.go index 7c296d766c..d686a8a476 100644 --- a/src/cmd/link/internal/ld/symtab.go +++ b/src/cmd/link/internal/ld/symtab.go @@ -326,7 +326,16 @@ func textsectionmap(ctxt *Link) uint32 { } func (ctxt *Link) symtab() { - dosymtype(ctxt) + switch ctxt.BuildMode { + case BuildModeCArchive, BuildModeCShared: + for _, s := range ctxt.Syms.Allsym { + // Create a new entry in the .init_array section that points to the + // library initializer function. + if s.Name == *flagEntrySymbol && ctxt.HeadType != objabi.Haix { + addinitarrdata(ctxt, s) + } + } + } // Define these so that they'll get put into the symbol table. // data.c:/^address will provide the actual values. @@ -562,6 +571,20 @@ func (ctxt *Link) symtab() { moduledata.AddAddr(ctxt.Arch, ctxt.Syms.Lookup("runtime.types", 0)) moduledata.AddAddr(ctxt.Arch, ctxt.Syms.Lookup("runtime.etypes", 0)) + if ctxt.HeadType == objabi.Haix && ctxt.LinkMode == LinkExternal { + // Add R_REF relocation to prevent ld's garbage collection of + // runtime.rodata, runtime.erodata and runtime.epclntab. + addRef := func(name string) { + r := moduledata.AddRel() + r.Sym = ctxt.Syms.Lookup(name, 0) + r.Type = objabi.R_XCOFFREF + r.Siz = uint8(ctxt.Arch.PtrSize) + } + addRef("runtime.rodata") + addRef("runtime.erodata") + addRef("runtime.epclntab") + } + // text section information moduledata.AddAddr(ctxt.Arch, ctxt.Syms.Lookup("runtime.textsectionmap", 0)) moduledata.AddUint(ctxt.Arch, uint64(nsections)) diff --git a/src/cmd/link/internal/ld/xcoff.go b/src/cmd/link/internal/ld/xcoff.go index 1561ce8cd0..67e558a475 100644 --- a/src/cmd/link/internal/ld/xcoff.go +++ b/src/cmd/link/internal/ld/xcoff.go @@ -9,6 +9,10 @@ import ( "cmd/internal/objabi" "cmd/link/internal/sym" "encoding/binary" + "io/ioutil" + "math/bits" + "path/filepath" + "sort" "strings" ) @@ -96,7 +100,6 @@ type XcoffAoutHdr64 struct { Ox64flags uint16 // Additional Flags For 64-Bit Objects Oresv3a int16 // Reserved Oresv3 [2]int32 // Reserved - } // Section Header @@ -153,8 +156,13 @@ const ( LDHDRSZ_32 = 32 LDHDRSZ_64 = 56 LDSYMSZ_64 = 24 + RELSZ_64 = 14 ) +// Type representing all XCOFF symbols. +type xcoffSym interface { +} + // Symbol Table Entry type XcoffSymEnt64 struct { Nvalue uint64 // Symbol value @@ -214,9 +222,12 @@ const ( // File Auxiliary Entry type XcoffAuxFile64 struct { - Xfname [8]byte // Name or offset inside string table - Xftype uint8 // Source file string type - Xauxtype uint8 // Type of auxiliary entry + Xzeroes uint32 // The name is always in the string table + Xoffset uint32 // Offset in the string table + X_pad1 [6]byte + Xftype uint8 // Source file string type + X_pad2 [2]byte + Xauxtype uint8 // Type of auxiliary entry } // Function Auxiliary Entry @@ -240,6 +251,13 @@ type XcoffAuxCSect64 struct { Xauxtype uint8 // Type of auxiliary entry } +// DWARF Auxiliary Entry +type XcoffAuxDWARF64 struct { + Xscnlen uint64 // Length of this symbol section + X_pad [9]byte + Xauxtype uint8 // Type of auxiliary entry +} + // Auxiliary type const ( _AUX_EXCEPT = 255 @@ -348,6 +366,31 @@ type xcoffLoaderReloc struct { const ( XCOFF_R_POS = 0x00 // A(sym) Positive Relocation + XCOFF_R_NEG = 0x01 // -A(sym) Negative Relocation + XCOFF_R_REL = 0x02 // A(sym-*) Relative to self + XCOFF_R_TOC = 0x03 // A(sym-TOC) Relative to TOC + XCOFF_R_TRL = 0x12 // A(sym-TOC) TOC Relative indirect load. + + XCOFF_R_TRLA = 0x13 // A(sym-TOC) TOC Rel load address. modifiable inst + XCOFF_R_GL = 0x05 // A(external TOC of sym) Global Linkage + XCOFF_R_TCL = 0x06 // A(local TOC of sym) Local object TOC address + XCOFF_R_RL = 0x0C // A(sym) Pos indirect load. modifiable instruction + XCOFF_R_RLA = 0x0D // A(sym) Pos Load Address. modifiable instruction + XCOFF_R_REF = 0x0F // AL0(sym) Non relocating ref. No garbage collect + XCOFF_R_BA = 0x08 // A(sym) Branch absolute. Cannot modify instruction + XCOFF_R_RBA = 0x18 // A(sym) Branch absolute. modifiable instruction + XCOFF_R_BR = 0x0A // A(sym-*) Branch rel to self. non modifiable + XCOFF_R_RBR = 0x1A // A(sym-*) Branch rel to self. modifiable instr + + XCOFF_R_TLS = 0x20 // General-dynamic reference to TLS symbol + XCOFF_R_TLS_IE = 0x21 // Initial-exec reference to TLS symbol + XCOFF_R_TLS_LD = 0x22 // Local-dynamic reference to TLS symbol + XCOFF_R_TLS_LE = 0x23 // Local-exec reference to TLS symbol + XCOFF_R_TLSM = 0x24 // Module reference to TLS symbol + XCOFF_R_TLSML = 0x25 // Module reference to local (own) module + + XCOFF_R_TOCU = 0x30 // Relative to TOC - high order bits + XCOFF_R_TOCL = 0x31 // Relative to TOC - low order bits ) type XcoffLdStr64 struct { @@ -360,11 +403,15 @@ type xcoffFile struct { xfhdr XcoffFileHdr64 xahdr XcoffAoutHdr64 sections []*XcoffScnHdr64 + sectText *XcoffScnHdr64 + sectData *XcoffScnHdr64 + sectBss *XcoffScnHdr64 stringTable xcoffStringTable sectNameToScnum map[string]int16 loaderSize uint64 symtabOffset int64 // offset to the start of symbol table symbolCount uint32 // number of symbol table records written + symtabSym []xcoffSym // XCOFF symbols for the symbol table dynLibraries map[string]int // Dynamic libraries in .loader section. The integer represents its import file number (- 1) loaderSymbols []*xcoffLoaderSymbol // symbols inside .loader symbol table loaderReloc []*xcoffLoaderReloc // Reloc that must be made inside loader @@ -454,7 +501,7 @@ func xcoffGetDwarfSubtype(str string) (string, uint32) { case ".debug_pubtypes": return ".dwpbtyp", SSUBTYP_DWPBTYP case ".debug_ranges": - return ".dwrnge", SSUBTYP_DWRNGES + return ".dwrnges", SSUBTYP_DWRNGES } // never used return "", 0 @@ -466,16 +513,18 @@ func (f *xcoffFile) getXCOFFscnum(sect *sym.Section) int16 { case &Segtext: return f.sectNameToScnum[".text"] case &Segdata: - if sect.Name == ".noptrdata" || sect.Name == ".data" { - return f.sectNameToScnum[".data"] - } if sect.Name == ".noptrbss" || sect.Name == ".bss" { return f.sectNameToScnum[".bss"] } - Errorf(nil, "unknown XCOFF segment data section: %s", sect.Name) + if sect.Name == ".tbss" { + return f.sectNameToScnum[".tbss"] + } + return f.sectNameToScnum[".data"] case &Segdwarf: name, _ := xcoffGetDwarfSubtype(sect.Name) return f.sectNameToScnum[name] + case &Segrelrodata: + return f.sectNameToScnum[".data"] } Errorf(nil, "getXCOFFscnum not implemented for section %s", sect.Name) return -1 @@ -491,7 +540,6 @@ func Xcoffinit(ctxt *Link) { Errorf(nil, "-T not available on AIX") } *FlagTextAddr = XCOFFTEXTBASE + int64(HEADR) - *FlagDataAddr = 0 if *FlagRound != -1 { Errorf(nil, "-R not available on AIX") } @@ -504,22 +552,82 @@ func Xcoffinit(ctxt *Link) { // type records C_FILE information needed for genasmsym in XCOFF. type xcoffSymSrcFile struct { name string - fileSymNb uint32 // Symbol number of this C_FILE - csectSymNb uint64 // Symbol number for the current .csect + file *XcoffSymEnt64 // Symbol of this C_FILE + csectAux *XcoffAuxCSect64 // Symbol for the current .csect + csectSymNb uint64 // Symbol number for the current .csect csectSize int64 } var ( currDwscnoff = make(map[string]uint64) // Needed to create C_DWARF symbols currSymSrcFile xcoffSymSrcFile + outerSymSize = make(map[string]int64) ) -// writeSymbol writes a symbol or an auxiliary symbol entry on ctxt.out. -func (f *xcoffFile) writeSymbol(out *OutBuf, byteOrder binary.ByteOrder, sym interface{}) { - binary.Write(out, byteOrder, sym) +// xcoffUpdateOuterSize stores the size of outer symbols in order to have it +// in the symbol table. +func xcoffUpdateOuterSize(ctxt *Link, size int64, stype sym.SymKind) { + if size == 0 { + return + } + + switch stype { + default: + Errorf(nil, "unknown XCOFF outer symbol for type %s", stype.String()) + case sym.SRODATA, sym.SRODATARELRO, sym.SFUNCTAB, sym.SSTRING: + // Nothing to do + case sym.STYPERELRO: + if ctxt.UseRelro() && (ctxt.BuildMode == BuildModeCArchive || ctxt.BuildMode == BuildModeCShared || ctxt.BuildMode == BuildModePIE) { + outerSymSize["typerel.*"] = size + return + } + fallthrough + case sym.STYPE: + if !ctxt.DynlinkingGo() { + // runtime.types size must be removed. + outerSymSize["type.*"] = size - ctxt.Syms.ROLookup("runtime.types", 0).Size + } + case sym.SGOSTRING: + outerSymSize["go.string.*"] = size + case sym.SGOFUNC: + if !ctxt.DynlinkingGo() { + outerSymSize["go.func.*"] = size + } + case sym.SGOFUNCRELRO: + outerSymSize["go.funcrel.*"] = size + case sym.SGCBITS: + outerSymSize["runtime.gcbits.*"] = size + case sym.SITABLINK: + outerSymSize["runtime.itablink"] = size + + } + +} + +// addSymbol writes a symbol or an auxiliary symbol entry on ctxt.out. +func (f *xcoffFile) addSymbol(sym xcoffSym) { + f.symtabSym = append(f.symtabSym, sym) f.symbolCount++ } +// xcoffAlign returns the log base 2 of the symbol's alignment. +func xcoffAlign(x *sym.Symbol, t SymbolType) uint8 { + align := x.Align + if align == 0 { + if t == TextSym { + align = int32(Funcalign) + } else { + align = symalign(x) + } + } + return logBase2(int(align)) +} + +// logBase2 returns the log in base 2 of a. +func logBase2(a int) uint8 { + return uint8(bits.Len(uint(a)) - 1) +} + // Write symbols needed when a new file appared : // - a C_FILE with one auxiliary entry for its name // - C_DWARF symbols to provide debug information @@ -537,27 +645,33 @@ func (f *xcoffFile) writeSymbolNewFile(ctxt *Link, name string, firstEntry uint6 Ntype: 0, // Go isn't inside predefined language. Nnumaux: 1, } - f.writeSymbol(ctxt.Out, ctxt.Arch.ByteOrder, s) + f.addSymbol(s) + currSymSrcFile.file = s // Auxiliary entry for file name. - ctxt.Out.Write32(0) - ctxt.Out.Write32(uint32(f.stringTable.add(name))) - ctxt.Out.Write32(0) // 6 bytes empty - ctxt.Out.Write16(0) - ctxt.Out.Write8(XFT_FN) - ctxt.Out.Write16(0) // 2 bytes empty - ctxt.Out.Write8(_AUX_FILE) - f.symbolCount++ + auxf := &XcoffAuxFile64{ + Xoffset: uint32(f.stringTable.add(name)), + Xftype: XFT_FN, + Xauxtype: _AUX_FILE, + } + f.addSymbol(auxf) /* Dwarf */ for _, sect := range Segdwarf.Sections { - // Find the size of this corresponding package DWARF compilation unit. - // This size is set during DWARF generation (see dwarf.go). - dwsize := getDwsectCUSize(sect.Name, name) - // .debug_abbrev is commun to all packages and not found with the previous function - if sect.Name == ".debug_abbrev" { - s := ctxt.Syms.Lookup(sect.Name, 0) - dwsize = uint64(s.Size) + var dwsize uint64 + if ctxt.LinkMode == LinkInternal { + // Find the size of this corresponding package DWARF compilation unit. + // This size is set during DWARF generation (see dwarf.go). + dwsize = getDwsectCUSize(sect.Name, name) + // .debug_abbrev is commun to all packages and not found with the previous function + if sect.Name == ".debug_abbrev" { + s := ctxt.Syms.ROLookup(sect.Name, 0) + dwsize = uint64(s.Size) + + } + } else { + // There is only one .FILE with external linking. + dwsize = sect.Length } // get XCOFF name @@ -569,7 +683,21 @@ func (f *xcoffFile) writeSymbolNewFile(ctxt *Link, name string, firstEntry uint6 Nscnum: f.getXCOFFscnum(sect), Nnumaux: 1, } - f.writeSymbol(ctxt.Out, ctxt.Arch.ByteOrder, s) + + if currSymSrcFile.csectAux == nil { + // Dwarf relocations need the symbol number of .dw* symbols. + // It doesn't need to know it for each package, one is enough. + // currSymSrcFile.csectAux == nil means first package. + dws := ctxt.Syms.Lookup(sect.Name, 0) + dws.Dynid = int32(f.symbolCount) + + if sect.Name == ".debug_frame" && ctxt.LinkMode != LinkExternal { + // CIE size must be added to the first package. + dwsize += 48 + } + } + + f.addSymbol(s) // update the DWARF section offset in this file if sect.Name != ".debug_abbrev" { @@ -577,11 +705,12 @@ func (f *xcoffFile) writeSymbolNewFile(ctxt *Link, name string, firstEntry uint6 } // Auxiliary dwarf section - ctxt.Out.Write64(dwsize) // section length - ctxt.Out.Write64(0) // nreloc - ctxt.Out.Write8(0) // pad - ctxt.Out.Write8(_AUX_SECT) - f.symbolCount++ + auxd := &XcoffAuxDWARF64{ + Xscnlen: dwsize, + Xauxtype: _AUX_SECT, + } + + f.addSymbol(auxd) } /* .csect */ @@ -592,7 +721,6 @@ func (f *xcoffFile) writeSymbolNewFile(ctxt *Link, name string, firstEntry uint6 } currSymSrcFile.csectSymNb = uint64(f.symbolCount) - currSymSrcFile.csectSize = 0 // No offset because no name s = &XcoffSymEnt64{ @@ -602,15 +730,17 @@ func (f *xcoffFile) writeSymbolNewFile(ctxt *Link, name string, firstEntry uint6 Ntype: 0, // check visibility ? Nnumaux: 1, } - f.writeSymbol(ctxt.Out, ctxt.Arch.ByteOrder, s) + f.addSymbol(s) aux := &XcoffAuxCSect64{ Xsmclas: XMC_PR, - Xsmtyp: XTY_SD | 5<<3, // align = 5 + Xsmtyp: XTY_SD | logBase2(Funcalign)<<3, Xauxtype: _AUX_CSECT, } - f.writeSymbol(ctxt.Out, ctxt.Arch.ByteOrder, aux) + f.addSymbol(aux) + currSymSrcFile.csectAux = aux + currSymSrcFile.csectSize = 0 } // Update values for the previous package. @@ -618,42 +748,37 @@ func (f *xcoffFile) writeSymbolNewFile(ctxt *Link, name string, firstEntry uint6 // - Xsclen of the csect symbol. func (f *xcoffFile) updatePreviousFile(ctxt *Link, last bool) { // first file - if currSymSrcFile.fileSymNb == 0 { + if currSymSrcFile.file == nil { return } - prevOff := f.symtabOffset + int64(currSymSrcFile.fileSymNb*SYMESZ) - currOff := ctxt.Out.Offset() - // Update C_FILE - ctxt.Out.SeekSet(prevOff) + cfile := currSymSrcFile.file if last { - ctxt.Out.Write64(0xFFFFFFFFFFFFFFFF) + cfile.Nvalue = 0xFFFFFFFFFFFFFFFF } else { - ctxt.Out.Write64(uint64(f.symbolCount)) + cfile.Nvalue = uint64(f.symbolCount) } // update csect scnlen in this auxiliary entry - prevOff = f.symtabOffset + int64((currSymSrcFile.csectSymNb+1)*SYMESZ) - ctxt.Out.SeekSet(prevOff) - ctxt.Out.Write32(uint32(currSymSrcFile.csectSize & 0xFFFFFFFF)) - prevOff += 12 - ctxt.Out.SeekSet(prevOff) - ctxt.Out.Write32(uint32(currSymSrcFile.csectSize >> 32)) - - ctxt.Out.SeekSet(currOff) - + aux := currSymSrcFile.csectAux + aux.Xscnlenlo = uint32(currSymSrcFile.csectSize & 0xFFFFFFFF) + aux.Xscnlenhi = uint32(currSymSrcFile.csectSize >> 32) } // Write symbol representing a .text function. // The symbol table is split with C_FILE corresponding to each package // and not to each source file as it should be. -func (f *xcoffFile) writeSymbolFunc(ctxt *Link, x *sym.Symbol) []interface{} { +func (f *xcoffFile) writeSymbolFunc(ctxt *Link, x *sym.Symbol) []xcoffSym { // New XCOFF symbols which will be written. - syms := []interface{}{} + syms := []xcoffSym{} // Check if a new file is detected. - if x.File == "" { // Undefined global symbol + if strings.Contains(x.Name, "-tramp") || strings.HasPrefix(x.Name, "runtime.text.") { + // Trampoline don't have a FILE so there are considered + // in the current file. + // Same goes for runtime.text.X symbols. + } else if x.File == "" { // Undefined global symbol // If this happens, the algorithme must be redone. if currSymSrcFile.name != "" { Exitf("undefined global symbol found inside another file") @@ -661,17 +786,31 @@ func (f *xcoffFile) writeSymbolFunc(ctxt *Link, x *sym.Symbol) []interface{} { } else { // Current file has changed. New C_FILE, C_DWARF, etc must be generated. if currSymSrcFile.name != x.File { - // update previous file values - xfile.updatePreviousFile(ctxt, false) - currSymSrcFile.name = x.File - currSymSrcFile.fileSymNb = f.symbolCount - f.writeSymbolNewFile(ctxt, x.File, uint64(x.Value), xfile.getXCOFFscnum(x.Sect)) + if ctxt.LinkMode == LinkInternal { + // update previous file values + xfile.updatePreviousFile(ctxt, false) + currSymSrcFile.name = x.File + f.writeSymbolNewFile(ctxt, x.File, uint64(x.Value), xfile.getXCOFFscnum(x.Sect)) + } else { + // With external linking, ld will crash if there is several + // .FILE and DWARF debugging enable, somewhere during + // the relocation phase. + // Therefore, all packages are merged under a fake .FILE + // "go_functions". + // TODO(aix); remove once ld has been fixed or the triggering + // relocation has been found and fixed. + if currSymSrcFile.name == "" { + currSymSrcFile.name = x.File + f.writeSymbolNewFile(ctxt, "go_functions", uint64(x.Value), xfile.getXCOFFscnum(x.Sect)) + } + } + } } s := &XcoffSymEnt64{ Nsclass: C_EXT, - Noffset: uint32(xfile.stringTable.add(x.Name)), + Noffset: uint32(xfile.stringTable.add(x.Extname())), Nvalue: uint64(x.Value), Nscnum: f.getXCOFFscnum(x.Sect), Ntype: SYM_TYPE_FUNC, @@ -682,6 +821,7 @@ func (f *xcoffFile) writeSymbolFunc(ctxt *Link, x *sym.Symbol) []interface{} { s.Nsclass = C_HIDEXT } + x.Dynid = int32(xfile.symbolCount) syms = append(syms, s) // Update current csect size @@ -703,6 +843,8 @@ func (f *xcoffFile) writeSymbolFunc(ctxt *Link, x *sym.Symbol) []interface{} { Xsmtyp: XTY_LD, // label definition (based on C) Xauxtype: _AUX_CSECT, } + a4.Xsmtyp |= uint8(xcoffAlign(x, TextSym) << 3) + syms = append(syms, a4) return syms } @@ -712,14 +854,14 @@ func putaixsym(ctxt *Link, x *sym.Symbol, str string, t SymbolType, addr int64, // All XCOFF symbols generated by this GO symbols // Can be a symbol entry or a auxiliary entry - syms := []interface{}{} + syms := []xcoffSym{} switch t { default: return case TextSym: - if x.FuncInfo != nil { + if x.FuncInfo != nil || strings.Contains(x.Name, "-tramp") || strings.HasPrefix(x.Name, "runtime.text.") { // Function within a file syms = xfile.writeSymbolFunc(ctxt, x) } else { @@ -735,6 +877,7 @@ func putaixsym(ctxt *Link, x *sym.Symbol, str string, t SymbolType, addr int64, Ntype: SYM_TYPE_FUNC, Nnumaux: 1, } + x.Dynid = int32(xfile.symbolCount) syms = append(syms, s) size := uint64(x.Size) @@ -745,6 +888,7 @@ func putaixsym(ctxt *Link, x *sym.Symbol, str string, t SymbolType, addr int64, Xsmclas: XMC_PR, Xsmtyp: XTY_SD, } + a4.Xsmtyp |= uint8(xcoffAlign(x, TextSym) << 3) syms = append(syms, a4) } @@ -768,6 +912,7 @@ func putaixsym(ctxt *Link, x *sym.Symbol, str string, t SymbolType, addr int64, s.Nsclass = C_HIDEXT } + x.Dynid = int32(xfile.symbolCount) syms = append(syms, s) // Create auxiliary entry @@ -782,9 +927,20 @@ func putaixsym(ctxt *Link, x *sym.Symbol, str string, t SymbolType, addr int64, Xscnlenlo: uint32(size & 0xFFFFFFFF), Xscnlenhi: uint32(size >> 32), } - // Read only data + if x.Type >= sym.STYPE && x.Type <= sym.SPCLNTAB { - a4.Xsmclas = XMC_RO + if ctxt.LinkMode == LinkExternal && strings.HasPrefix(x.Sect.Name, ".data.rel.ro") { + // During external linking, read-only datas with relocation + // must be in .data. + a4.Xsmclas = XMC_RW + } else { + // Read only data + a4.Xsmclas = XMC_RO + } + } else if x.Type == sym.SDATA && strings.HasPrefix(x.Name, "TOC.") && ctxt.LinkMode == LinkExternal { + a4.Xsmclas = XMC_TC + } else if x.Name == "TOC" { + a4.Xsmclas = XMC_TC0 } else { a4.Xsmclas = XMC_RW } @@ -794,6 +950,8 @@ func putaixsym(ctxt *Link, x *sym.Symbol, str string, t SymbolType, addr int64, a4.Xsmtyp |= XTY_CM } + a4.Xsmtyp |= uint8(xcoffAlign(x, t) << 3) + syms = append(syms, a4) case UndefinedSym: @@ -805,6 +963,7 @@ func putaixsym(ctxt *Link, x *sym.Symbol, str string, t SymbolType, addr int64, Noffset: uint32(xfile.stringTable.add(str)), Nnumaux: 1, } + x.Dynid = int32(xfile.symbolCount) syms = append(syms, s) a4 := &XcoffAuxCSect64{ @@ -820,24 +979,54 @@ func putaixsym(ctxt *Link, x *sym.Symbol, str string, t SymbolType, addr int64, a4.Xsmclas = XMC_RW } + syms = append(syms, a4) + + case TLSSym: + s := &XcoffSymEnt64{ + Nsclass: C_EXT, + Noffset: uint32(xfile.stringTable.add(str)), + Nscnum: xfile.getXCOFFscnum(x.Sect), + Nvalue: uint64(x.Value), + Nnumaux: 1, + } + + x.Dynid = int32(xfile.symbolCount) + syms = append(syms, s) + + size := uint64(x.Size) + a4 := &XcoffAuxCSect64{ + Xauxtype: _AUX_CSECT, + Xsmclas: XMC_UL, + Xsmtyp: XTY_CM, + Xscnlenlo: uint32(size & 0xFFFFFFFF), + Xscnlenhi: uint32(size >> 32), + } + syms = append(syms, a4) } for _, s := range syms { - xfile.writeSymbol(ctxt.Out, ctxt.Arch.ByteOrder, s) + xfile.addSymbol(s) } } -// Generate XCOFF Symbol table and XCOFF String table +// Generate XCOFF Symbol table. +// It will be written in out file in Asmbxcoff, because it must be +// at the very end, especially after relocation sections which needs symbols' index. func (f *xcoffFile) asmaixsym(ctxt *Link) { - // write symbol table + // Get correct size for symbols wrapping others symbols like go.string.* + // sym.Size can be used directly as the symbols have already been written. + for name, size := range outerSymSize { + sym := ctxt.Syms.ROLookup(name, 0) + if sym == nil { + Errorf(nil, "unknown outer symbol with name %s", name) + } else { + sym.Size = size + } + } + genasmsym(ctxt, putaixsym) - - // update last file Svalue xfile.updatePreviousFile(ctxt, true) - - // write string table - xfile.stringTable.write(ctxt.Out) } func (f *xcoffFile) genDynSym(ctxt *Link) { @@ -870,7 +1059,7 @@ func (f *xcoffFile) genDynSym(ctxt *Link) { func (f *xcoffFile) adddynimpsym(ctxt *Link, s *sym.Symbol) { // Check that library name is given. // Pattern is already checked when compiling. - if s.Dynimplib() == "" { + if ctxt.LinkMode == LinkInternal && s.Dynimplib() == "" { Errorf(s, "imported symbol must have a given library") } @@ -907,6 +1096,9 @@ func (f *xcoffFile) adddynimpsym(ctxt *Link, s *sym.Symbol) { // Xcoffadddynrel adds a dynamic relocation in a XCOFF file. // This relocation will be made by the loader. func Xcoffadddynrel(ctxt *Link, s *sym.Symbol, r *sym.Reloc) bool { + if ctxt.LinkMode == LinkExternal { + return true + } if s.Type <= sym.SPCLNTAB { Errorf(s, "cannot have a relocation to %s in a text section symbol", r.Sym.Name) return false @@ -964,13 +1156,11 @@ func (ctxt *Link) doxcoff() { Exitf("-d is not available on AIX") } - // Initial map used to store compilation unit size for each DWARF section (see dwarf.go). - dwsectCUSize = make(map[string]uint64) - // TOC toc := ctxt.Syms.Lookup("TOC", 0) toc.Type = sym.SXCOFFTOC toc.Attr |= sym.AttrReachable + toc.Attr |= sym.AttrVisibilityHidden // XCOFF does not allow relocations of data symbol address to a text symbol. // Such case occurs when a RODATA symbol retrieves a data symbol address. @@ -1009,6 +1199,7 @@ func (ctxt *Link) doxcoff() { if !ep.Attr.Reachable() { Exitf("wrong entry point") } + xfile.loaderSymbols = append(xfile.loaderSymbols, &xcoffLoaderSymbol{ sym: ep, smtype: XTY_ENT | XTY_SD, @@ -1022,6 +1213,32 @@ func (ctxt *Link) doxcoff() { s.Type = sym.SXCOFFTOC } } + + if ctxt.LinkMode == LinkExternal { + // Change rt0_go name to match name in runtime/cgo:main(). + rt0 := ctxt.Syms.ROLookup("runtime.rt0_go", 0) + ctxt.Syms.Rename(rt0.Name, "runtime_rt0_go", 0, ctxt.Reachparent) + + for _, s := range ctxt.Syms.Allsym { + if !s.Attr.CgoExport() { + continue + } + + name := s.Extname() + if s.Type == sym.STEXT { + // On AIX, a exported function must have two symbols: + // - a .text symbol which must start with a ".". + // - a .data symbol which is a function descriptor. + ctxt.Syms.Rename(s.Name, "."+name, 0, ctxt.Reachparent) + + desc := ctxt.Syms.Lookup(name, 0) + desc.Type = sym.SNOPTRDATA + desc.AddAddr(ctxt.Arch, s) + desc.AddAddr(ctxt.Arch, toc) + desc.AddUint64(ctxt.Arch, 0) + } + } + } } // Loader section @@ -1236,7 +1453,7 @@ func (f *xcoffFile) writeFileHeader(ctxt *Link) { f.xfhdr.Fnsyms = int32(f.symbolCount) } - if ctxt.BuildMode == BuildModeExe { + if ctxt.BuildMode == BuildModeExe && ctxt.LinkMode == LinkInternal { f.xfhdr.Fopthdr = AOUTHSZ_EXEC64 f.xfhdr.Fflags = F_EXEC @@ -1251,8 +1468,7 @@ func (f *xcoffFile) writeFileHeader(ctxt *Link) { f.xahdr.Otoc = uint64(toc.Value) f.xahdr.Osntoc = f.getXCOFFscnum(toc.Sect) - // Based on dump -o - f.xahdr.Oalgntext = 0x5 + f.xahdr.Oalgntext = int16(logBase2(int(Funcalign))) f.xahdr.Oalgndata = 0x5 binary.Write(ctxt.Out, binary.BigEndian, &f.xfhdr) @@ -1283,15 +1499,41 @@ func Asmbxcoff(ctxt *Link, fileoff int64) { xfile.xahdr.Otextstart = s.Svaddr xfile.xahdr.Osntext = xfile.sectNameToScnum[".text"] xfile.xahdr.Otsize = s.Ssize + xfile.sectText = s - s = xfile.addSection(".data", Segdata.Vaddr, Segdata.Filelen, Segdata.Fileoff, STYP_DATA) + segdataVaddr := Segdata.Vaddr + segdataFilelen := Segdata.Filelen + segdataFileoff := Segdata.Fileoff + segbssFilelen := Segdata.Length - Segdata.Filelen + if len(Segrelrodata.Sections) > 0 { + // Merge relro segment to data segment as + // relro data are inside data segment on AIX. + segdataVaddr = Segrelrodata.Vaddr + segdataFileoff = Segrelrodata.Fileoff + segdataFilelen = Segdata.Vaddr + Segdata.Filelen - Segrelrodata.Vaddr + } + + s = xfile.addSection(".data", segdataVaddr, segdataFilelen, segdataFileoff, STYP_DATA) xfile.xahdr.Odatastart = s.Svaddr xfile.xahdr.Osndata = xfile.sectNameToScnum[".data"] xfile.xahdr.Odsize = s.Ssize + xfile.sectData = s - s = xfile.addSection(".bss", Segdata.Vaddr+Segdata.Filelen, Segdata.Length-Segdata.Filelen, 0, STYP_BSS) + s = xfile.addSection(".bss", segdataVaddr+segdataFilelen, segbssFilelen, 0, STYP_BSS) xfile.xahdr.Osnbss = xfile.sectNameToScnum[".bss"] xfile.xahdr.Obsize = s.Ssize + xfile.sectBss = s + + if ctxt.LinkMode == LinkExternal { + var tbss *sym.Section + for _, s := range Segdata.Sections { + if s.Name == ".tbss" { + tbss = s + break + } + } + s = xfile.addSection(".tbss", tbss.Vaddr, tbss.Length, 0, STYP_TBSS) + } // add dwarf sections for _, sect := range Segdwarf.Sections { @@ -1305,17 +1547,170 @@ func Asmbxcoff(ctxt *Link, fileoff int64) { Loaderblk(ctxt, uint64(fileoff)) s = xfile.addSection(".loader", 0, xfile.loaderSize, uint64(fileoff), STYP_LOADER) xfile.xahdr.Osnloader = xfile.sectNameToScnum[".loader"] + + // Update fileoff for symbol table + fileoff += int64(xfile.loaderSize) } - } else { - // TODO: Relocation } - // Write symbol table - symo := Rnd(ctxt.Out.Offset(), int64(*FlagRound)) - xfile.symtabOffset = symo - ctxt.Out.SeekSet(int64(symo)) + // Create Symbol table xfile.asmaixsym(ctxt) + if ctxt.LinkMode == LinkExternal { + xfile.emitRelocations(ctxt, fileoff) + } + + // Write Symbol table + xfile.symtabOffset = ctxt.Out.Offset() + for _, s := range xfile.symtabSym { + binary.Write(ctxt.Out, ctxt.Arch.ByteOrder, s) + } + // write string table + xfile.stringTable.write(ctxt.Out) + + ctxt.Out.Flush() + // write headers xcoffwrite(ctxt) } + +// byOffset is used to sort relocations by offset +type byOffset []sym.Reloc + +func (x byOffset) Len() int { return len(x) } + +func (x byOffset) Swap(i, j int) { + x[i], x[j] = x[j], x[i] +} + +func (x byOffset) Less(i, j int) bool { + return x[i].Off < x[j].Off +} + +// emitRelocations emits relocation entries for go.o in external linking. +func (f *xcoffFile) emitRelocations(ctxt *Link, fileoff int64) { + ctxt.Out.SeekSet(fileoff) + for ctxt.Out.Offset()&7 != 0 { + ctxt.Out.Write8(0) + } + + // relocsect relocates symbols from first in section sect, and returns + // the total number of relocations emitted. + relocsect := func(sect *sym.Section, syms []*sym.Symbol, base uint64) uint32 { + // ctxt.Logf("%s 0x%x\n", sect.Name, sect.Vaddr) + // If main section has no bits, nothing to relocate. + if sect.Vaddr >= sect.Seg.Vaddr+sect.Seg.Filelen { + return 0 + } + sect.Reloff = uint64(ctxt.Out.Offset()) + for i, s := range syms { + if !s.Attr.Reachable() { + continue + } + if uint64(s.Value) >= sect.Vaddr { + syms = syms[i:] + break + } + } + eaddr := int64(sect.Vaddr + sect.Length) + for _, s := range syms { + if !s.Attr.Reachable() { + continue + } + if s.Value >= int64(eaddr) { + break + } + + // Relocation must be ordered by address, so s.R is ordered by Off. + sort.Sort(byOffset(s.R)) + + for ri := range s.R { + + r := &s.R[ri] + + if r.Done { + continue + } + if r.Xsym == nil { + Errorf(s, "missing xsym in relocation") + continue + } + if r.Xsym.Dynid < 0 { + Errorf(s, "reloc %s to non-coff symbol %s (outer=%s) %d %d", r.Type.String(), r.Sym.Name, r.Xsym.Name, r.Sym.Type, r.Xsym.Dynid) + } + if !thearch.Xcoffreloc1(ctxt.Arch, ctxt.Out, s, r, int64(uint64(s.Value+int64(r.Off))-base)) { + Errorf(s, "unsupported obj reloc %d(%s)/%d to %s", r.Type, r.Type.String(), r.Siz, r.Sym.Name) + } + } + } + sect.Rellen = uint64(ctxt.Out.Offset()) - sect.Reloff + return uint32(sect.Rellen) / RELSZ_64 + } + sects := []struct { + xcoffSect *XcoffScnHdr64 + segs []*sym.Segment + }{ + {f.sectText, []*sym.Segment{&Segtext}}, + {f.sectData, []*sym.Segment{&Segrelrodata, &Segdata}}, + } + for _, s := range sects { + s.xcoffSect.Srelptr = uint64(ctxt.Out.Offset()) + n := uint32(0) + for _, seg := range s.segs { + for _, sect := range seg.Sections { + if sect.Name == ".text" { + n += relocsect(sect, ctxt.Textp, 0) + } else { + n += relocsect(sect, datap, 0) + } + } + } + s.xcoffSect.Snreloc += n + } + +dwarfLoop: + for _, sect := range Segdwarf.Sections { + for _, xcoffSect := range f.sections { + _, subtyp := xcoffGetDwarfSubtype(sect.Name) + if xcoffSect.Sflags&0xF0000 == subtyp { + xcoffSect.Srelptr = uint64(ctxt.Out.Offset()) + xcoffSect.Snreloc = relocsect(sect, dwarfp, sect.Vaddr) + continue dwarfLoop + } + } + Errorf(nil, "emitRelocations: could not find %q section", sect.Name) + } +} + +// xcoffCreateExportFile creates a file with exported symbols for +// -Wl,-bE option. +// ld won't export symbols unless they are listed in an export file. +func xcoffCreateExportFile(ctxt *Link) (fname string) { + fname = filepath.Join(*flagTmpdir, "export_file.exp") + var buf bytes.Buffer + + for _, s := range ctxt.Syms.Allsym { + if !s.Attr.CgoExport() { + continue + } + if !strings.HasPrefix(s.String(), "_cgoexp_") { + continue + } + + // Retrieve the name of the initial symbol + // exported by cgo. + // The corresponding Go symbol is: + // _cgoexp_hashcode_symname. + name := strings.SplitN(s.Extname(), "_", 4)[3] + + buf.Write([]byte(name + "\n")) + } + + err := ioutil.WriteFile(fname, buf.Bytes(), 0666) + if err != nil { + Errorf(nil, "WriteFile %s failed: %v", fname, err) + } + + return fname + +} diff --git a/src/cmd/link/internal/loadelf/ldelf.go b/src/cmd/link/internal/loadelf/ldelf.go index d85d91948a..e895056bb2 100644 --- a/src/cmd/link/internal/loadelf/ldelf.go +++ b/src/cmd/link/internal/loadelf/ldelf.go @@ -590,9 +590,7 @@ func Load(arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, pkg string, length i elfobj.nsect = uint(elfobj.shnum) for i := 0; uint(i) < elfobj.nsect; i++ { - if f.Seek(int64(uint64(base)+elfobj.shoff+uint64(int64(i)*int64(elfobj.shentsize))), 0) < 0 { - return errorf("malformed elf file: negative seek") - } + f.MustSeek(int64(uint64(base)+elfobj.shoff+uint64(int64(i)*int64(elfobj.shentsize))), 0) sect := &elfobj.sect[i] if is64 != 0 { var b ElfSectBytes64 @@ -678,6 +676,8 @@ func Load(arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, pkg string, length i // as well use one large chunk. // create symbols for elfmapped sections + sectsymNames := make(map[string]bool) + counter := 0 for i := 0; uint(i) < elfobj.nsect; i++ { sect = &elfobj.sect[i] if sect.type_ == SHT_ARM_ATTRIBUTES && sect.name == ".ARM.attributes" { @@ -709,6 +709,12 @@ func Load(arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, pkg string, length i } name := fmt.Sprintf("%s(%s)", pkg, sect.name) + for sectsymNames[name] { + counter++ + name = fmt.Sprintf("%s(%s%d)", pkg, sect.name, counter) + } + sectsymNames[name] = true + s := syms.Lookup(name, localSymVersion) switch int(sect.flags) & (ElfSectFlagAlloc | ElfSectFlagWrite | ElfSectFlagExec) { @@ -786,6 +792,13 @@ func Load(arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, pkg string, length i continue } + if strings.HasPrefix(elfsym.name, "$d") && elfsym.type_ == 0 && sect.name == ".debug_frame" { + // "$d" is a marker, not a real symbol. + // This happens with gcc on ARM64. + // See https://sourceware.org/bugzilla/show_bug.cgi?id=21809 + continue + } + if strings.HasPrefix(elfsym.name, ".LASF") { // gcc on s390x does this continue } @@ -923,7 +936,7 @@ func Load(arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, pkg string, length i rp.Sym = elfsym.sym } - rp.Type = 256 + objabi.RelocType(info) + rp.Type = objabi.ElfRelocOffset + objabi.RelocType(info) rp.Siz, err = relSize(arch, pn, uint32(info)) if err != nil { return nil, 0, err @@ -981,9 +994,7 @@ func elfmap(elfobj *ElfObj, sect *ElfSect) (err error) { } sect.base = make([]byte, sect.size) - if elfobj.f.Seek(int64(uint64(elfobj.base)+sect.off), 0) < 0 { - return fmt.Errorf("short read: seek not successful") - } + elfobj.f.MustSeek(int64(uint64(elfobj.base)+sect.off), 0) if _, err := io.ReadFull(elfobj.f, sect.base); err != nil { return fmt.Errorf("short read: %v", err) } @@ -1056,8 +1067,8 @@ func readelfsym(arch *sys.Arch, syms *sym.Symbols, elfobj *ElfObj, i int, elfsym } case ElfSymBindLocal: - if arch.Family == sys.ARM && (strings.HasPrefix(elfsym.name, "$a") || strings.HasPrefix(elfsym.name, "$d")) { - // binutils for arm generate these mapping + if (arch.Family == sys.ARM || arch.Family == sys.ARM64) && (strings.HasPrefix(elfsym.name, "$a") || strings.HasPrefix(elfsym.name, "$d") || strings.HasPrefix(elfsym.name, "$x")) { + // binutils for arm and arm64 generate these mapping // symbols, ignore these break } @@ -1088,6 +1099,11 @@ func readelfsym(arch *sys.Arch, syms *sym.Symbols, elfobj *ElfObj, i int, elfsym if elfsym.other == 2 { s.Attr |= sym.AttrVisibilityHidden } + + // Allow weak symbols to be duplicated when already defined. + if s.Outer != nil { + s.Attr |= sym.AttrDuplicateOK + } } default: @@ -1114,81 +1130,95 @@ func relSize(arch *sys.Arch, pn string, elftype uint32) (uint8, error) { const ( AMD64 = uint32(sys.AMD64) ARM = uint32(sys.ARM) + ARM64 = uint32(sys.ARM64) I386 = uint32(sys.I386) PPC64 = uint32(sys.PPC64) S390X = uint32(sys.S390X) ) - switch uint32(arch.Family) | elftype<<24 { + switch uint32(arch.Family) | elftype<<16 { default: return 0, fmt.Errorf("%s: unknown relocation type %d; compiled without -fpic?", pn, elftype) - case S390X | uint32(elf.R_390_8)<<24: + case S390X | uint32(elf.R_390_8)<<16: return 1, nil - case PPC64 | uint32(elf.R_PPC64_TOC16)<<24, - PPC64 | uint32(elf.R_PPC64_TOC16_LO)<<24, - PPC64 | uint32(elf.R_PPC64_TOC16_HI)<<24, - PPC64 | uint32(elf.R_PPC64_TOC16_HA)<<24, - PPC64 | uint32(elf.R_PPC64_TOC16_DS)<<24, - PPC64 | uint32(elf.R_PPC64_TOC16_LO_DS)<<24, - PPC64 | uint32(elf.R_PPC64_REL16_LO)<<24, - PPC64 | uint32(elf.R_PPC64_REL16_HI)<<24, - PPC64 | uint32(elf.R_PPC64_REL16_HA)<<24, - S390X | uint32(elf.R_390_16)<<24, - S390X | uint32(elf.R_390_GOT16)<<24, - S390X | uint32(elf.R_390_PC16)<<24, - S390X | uint32(elf.R_390_PC16DBL)<<24, - S390X | uint32(elf.R_390_PLT16DBL)<<24: + case PPC64 | uint32(elf.R_PPC64_TOC16)<<16, + PPC64 | uint32(elf.R_PPC64_TOC16_LO)<<16, + PPC64 | uint32(elf.R_PPC64_TOC16_HI)<<16, + PPC64 | uint32(elf.R_PPC64_TOC16_HA)<<16, + PPC64 | uint32(elf.R_PPC64_TOC16_DS)<<16, + PPC64 | uint32(elf.R_PPC64_TOC16_LO_DS)<<16, + PPC64 | uint32(elf.R_PPC64_REL16_LO)<<16, + PPC64 | uint32(elf.R_PPC64_REL16_HI)<<16, + PPC64 | uint32(elf.R_PPC64_REL16_HA)<<16, + S390X | uint32(elf.R_390_16)<<16, + S390X | uint32(elf.R_390_GOT16)<<16, + S390X | uint32(elf.R_390_PC16)<<16, + S390X | uint32(elf.R_390_PC16DBL)<<16, + S390X | uint32(elf.R_390_PLT16DBL)<<16: return 2, nil - case ARM | uint32(elf.R_ARM_ABS32)<<24, - ARM | uint32(elf.R_ARM_GOT32)<<24, - ARM | uint32(elf.R_ARM_PLT32)<<24, - ARM | uint32(elf.R_ARM_GOTOFF)<<24, - ARM | uint32(elf.R_ARM_GOTPC)<<24, - ARM | uint32(elf.R_ARM_THM_PC22)<<24, - ARM | uint32(elf.R_ARM_REL32)<<24, - ARM | uint32(elf.R_ARM_CALL)<<24, - ARM | uint32(elf.R_ARM_V4BX)<<24, - ARM | uint32(elf.R_ARM_GOT_PREL)<<24, - ARM | uint32(elf.R_ARM_PC24)<<24, - ARM | uint32(elf.R_ARM_JUMP24)<<24, - AMD64 | uint32(elf.R_X86_64_PC32)<<24, - AMD64 | uint32(elf.R_X86_64_PLT32)<<24, - AMD64 | uint32(elf.R_X86_64_GOTPCREL)<<24, - AMD64 | uint32(elf.R_X86_64_GOTPCRELX)<<24, - AMD64 | uint32(elf.R_X86_64_REX_GOTPCRELX)<<24, - I386 | uint32(elf.R_386_32)<<24, - I386 | uint32(elf.R_386_PC32)<<24, - I386 | uint32(elf.R_386_GOT32)<<24, - I386 | uint32(elf.R_386_PLT32)<<24, - I386 | uint32(elf.R_386_GOTOFF)<<24, - I386 | uint32(elf.R_386_GOTPC)<<24, - I386 | uint32(elf.R_386_GOT32X)<<24, - PPC64 | uint32(elf.R_PPC64_REL24)<<24, - PPC64 | uint32(elf.R_PPC_REL32)<<24, - S390X | uint32(elf.R_390_32)<<24, - S390X | uint32(elf.R_390_PC32)<<24, - S390X | uint32(elf.R_390_GOT32)<<24, - S390X | uint32(elf.R_390_PLT32)<<24, - S390X | uint32(elf.R_390_PC32DBL)<<24, - S390X | uint32(elf.R_390_PLT32DBL)<<24, - S390X | uint32(elf.R_390_GOTPCDBL)<<24, - S390X | uint32(elf.R_390_GOTENT)<<24: + case ARM | uint32(elf.R_ARM_ABS32)<<16, + ARM | uint32(elf.R_ARM_GOT32)<<16, + ARM | uint32(elf.R_ARM_PLT32)<<16, + ARM | uint32(elf.R_ARM_GOTOFF)<<16, + ARM | uint32(elf.R_ARM_GOTPC)<<16, + ARM | uint32(elf.R_ARM_THM_PC22)<<16, + ARM | uint32(elf.R_ARM_REL32)<<16, + ARM | uint32(elf.R_ARM_CALL)<<16, + ARM | uint32(elf.R_ARM_V4BX)<<16, + ARM | uint32(elf.R_ARM_GOT_PREL)<<16, + ARM | uint32(elf.R_ARM_PC24)<<16, + ARM | uint32(elf.R_ARM_JUMP24)<<16, + ARM64 | uint32(elf.R_AARCH64_CALL26)<<16, + ARM64 | uint32(elf.R_AARCH64_ADR_GOT_PAGE)<<16, + ARM64 | uint32(elf.R_AARCH64_LD64_GOT_LO12_NC)<<16, + ARM64 | uint32(elf.R_AARCH64_ADR_PREL_PG_HI21)<<16, + ARM64 | uint32(elf.R_AARCH64_ADD_ABS_LO12_NC)<<16, + ARM64 | uint32(elf.R_AARCH64_LDST8_ABS_LO12_NC)<<16, + ARM64 | uint32(elf.R_AARCH64_LDST32_ABS_LO12_NC)<<16, + ARM64 | uint32(elf.R_AARCH64_LDST64_ABS_LO12_NC)<<16, + ARM64 | uint32(elf.R_AARCH64_LDST128_ABS_LO12_NC)<<16, + ARM64 | uint32(elf.R_AARCH64_PREL32)<<16, + ARM64 | uint32(elf.R_AARCH64_JUMP26)<<16, + AMD64 | uint32(elf.R_X86_64_PC32)<<16, + AMD64 | uint32(elf.R_X86_64_PLT32)<<16, + AMD64 | uint32(elf.R_X86_64_GOTPCREL)<<16, + AMD64 | uint32(elf.R_X86_64_GOTPCRELX)<<16, + AMD64 | uint32(elf.R_X86_64_REX_GOTPCRELX)<<16, + I386 | uint32(elf.R_386_32)<<16, + I386 | uint32(elf.R_386_PC32)<<16, + I386 | uint32(elf.R_386_GOT32)<<16, + I386 | uint32(elf.R_386_PLT32)<<16, + I386 | uint32(elf.R_386_GOTOFF)<<16, + I386 | uint32(elf.R_386_GOTPC)<<16, + I386 | uint32(elf.R_386_GOT32X)<<16, + PPC64 | uint32(elf.R_PPC64_REL24)<<16, + PPC64 | uint32(elf.R_PPC_REL32)<<16, + S390X | uint32(elf.R_390_32)<<16, + S390X | uint32(elf.R_390_PC32)<<16, + S390X | uint32(elf.R_390_GOT32)<<16, + S390X | uint32(elf.R_390_PLT32)<<16, + S390X | uint32(elf.R_390_PC32DBL)<<16, + S390X | uint32(elf.R_390_PLT32DBL)<<16, + S390X | uint32(elf.R_390_GOTPCDBL)<<16, + S390X | uint32(elf.R_390_GOTENT)<<16: return 4, nil - case AMD64 | uint32(elf.R_X86_64_64)<<24, - AMD64 | uint32(elf.R_X86_64_PC64)<<24, - PPC64 | uint32(elf.R_PPC64_ADDR64)<<24, - S390X | uint32(elf.R_390_GLOB_DAT)<<24, - S390X | uint32(elf.R_390_RELATIVE)<<24, - S390X | uint32(elf.R_390_GOTOFF)<<24, - S390X | uint32(elf.R_390_GOTPC)<<24, - S390X | uint32(elf.R_390_64)<<24, - S390X | uint32(elf.R_390_PC64)<<24, - S390X | uint32(elf.R_390_GOT64)<<24, - S390X | uint32(elf.R_390_PLT64)<<24: + case AMD64 | uint32(elf.R_X86_64_64)<<16, + AMD64 | uint32(elf.R_X86_64_PC64)<<16, + ARM64 | uint32(elf.R_AARCH64_ABS64)<<16, + ARM64 | uint32(elf.R_AARCH64_PREL64)<<16, + PPC64 | uint32(elf.R_PPC64_ADDR64)<<16, + S390X | uint32(elf.R_390_GLOB_DAT)<<16, + S390X | uint32(elf.R_390_RELATIVE)<<16, + S390X | uint32(elf.R_390_GOTOFF)<<16, + S390X | uint32(elf.R_390_GOTPC)<<16, + S390X | uint32(elf.R_390_64)<<16, + S390X | uint32(elf.R_390_PC64)<<16, + S390X | uint32(elf.R_390_GOT64)<<16, + S390X | uint32(elf.R_390_PLT64)<<16: return 8, nil } } diff --git a/src/cmd/link/internal/loadmacho/ldmacho.go b/src/cmd/link/internal/loadmacho/ldmacho.go index 85aa606ff5..c303752992 100644 --- a/src/cmd/link/internal/loadmacho/ldmacho.go +++ b/src/cmd/link/internal/loadmacho/ldmacho.go @@ -43,11 +43,6 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -const ( - N_EXT = 0x01 - N_TYPE = 0x1e - N_STAB = 0xe0 -) // TODO(crawshaw): de-duplicate these symbols with cmd/internal/ld const ( @@ -161,6 +156,19 @@ type ldMachoDysymtab struct { indir []uint32 } +// ldMachoSym.type_ +const ( + N_EXT = 0x01 + N_TYPE = 0x1e + N_STAB = 0xe0 +) + +// ldMachoSym.desc +const ( + N_WEAK_REF = 0x40 + N_WEAK_DEF = 0x80 +) + const ( LdMachoCpuVax = 1 LdMachoCpu68000 = 6 @@ -313,9 +321,7 @@ func macholoadrel(m *ldMachoObj, sect *ldMachoSect) int { rel := make([]ldMachoRel, sect.nreloc) n := int(sect.nreloc * 8) buf := make([]byte, n) - if m.f.Seek(m.base+int64(sect.reloff), 0) < 0 { - return -1 - } + m.f.MustSeek(m.base+int64(sect.reloff), 0) if _, err := io.ReadFull(m.f, buf); err != nil { return -1 } @@ -359,9 +365,7 @@ func macholoaddsym(m *ldMachoObj, d *ldMachoDysymtab) int { n := int(d.nindirectsyms) p := make([]byte, n*4) - if m.f.Seek(m.base+int64(d.indirectsymoff), 0) < 0 { - return -1 - } + m.f.MustSeek(m.base+int64(d.indirectsymoff), 0) if _, err := io.ReadFull(m.f, p); err != nil { return -1 } @@ -379,9 +383,7 @@ func macholoadsym(m *ldMachoObj, symtab *ldMachoSymtab) int { } strbuf := make([]byte, symtab.strsize) - if m.f.Seek(m.base+int64(symtab.stroff), 0) < 0 { - return -1 - } + m.f.MustSeek(m.base+int64(symtab.stroff), 0) if _, err := io.ReadFull(m.f, strbuf); err != nil { return -1 } @@ -392,9 +394,7 @@ func macholoadsym(m *ldMachoObj, symtab *ldMachoSymtab) int { } n := int(symtab.nsym * uint32(symsize)) symbuf := make([]byte, n) - if m.f.Seek(m.base+int64(symtab.symoff), 0) < 0 { - return -1 - } + m.f.MustSeek(m.base+int64(symtab.symoff), 0) if _, err := io.ReadFull(m.f, symbuf); err != nil { return -1 } @@ -455,7 +455,7 @@ func Load(arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, pkg string, length i } if is64 { - f.Seek(4, 1) // skip reserved word in header + f.MustSeek(4, 1) // skip reserved word in header } m := &ldMachoObj{ @@ -547,9 +547,7 @@ func Load(arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, pkg string, length i return errorf("load segment out of range") } - if f.Seek(m.base+int64(c.seg.fileoff), 0) < 0 { - return errorf("cannot load object data: seek failed") - } + f.MustSeek(m.base+int64(c.seg.fileoff), 0) dat := make([]byte, c.seg.filesz) if _, err := io.ReadFull(f, dat); err != nil { return errorf("cannot load object data: %v", err) @@ -616,6 +614,9 @@ func Load(arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, pkg string, length i if machsym.type_&N_EXT == 0 { s.Attr |= sym.AttrDuplicateOK } + if machsym.desc&(N_WEAK_REF|N_WEAK_DEF) != 0 { + s.Attr |= sym.AttrDuplicateOK + } machsym.sym = s if machsym.sectnum == 0 { // undefined continue @@ -760,7 +761,7 @@ func Load(arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, pkg string, length i // handle reference to __IMPORT/__pointers. // how much worse can this get? // why are we supporting 386 on the mac anyway? - rp.Type = 512 + MACHO_FAKE_GOTPCREL + rp.Type = objabi.MachoRelocOffset + MACHO_FAKE_GOTPCREL // figure out which pointer this is a reference to. k = int(uint64(ks.res1) + (uint64(rel.value)-ks.addr)/4) @@ -794,7 +795,7 @@ func Load(arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, pkg string, length i } rp.Siz = rel.length - rp.Type = 512 + (objabi.RelocType(rel.type_) << 1) + objabi.RelocType(rel.pcrel) + rp.Type = objabi.MachoRelocOffset + (objabi.RelocType(rel.type_) << 1) + objabi.RelocType(rel.pcrel) rp.Off = int32(rel.addr) // Handle X86_64_RELOC_SIGNED referencing a section (rel->extrn == 0). diff --git a/src/cmd/link/internal/loadpe/ldpe.go b/src/cmd/link/internal/loadpe/ldpe.go index ac07d5c35d..f08e1241a7 100644 --- a/src/cmd/link/internal/loadpe/ldpe.go +++ b/src/cmd/link/internal/loadpe/ldpe.go @@ -133,7 +133,7 @@ const ( type peBiobuf bio.Reader func (f *peBiobuf) ReadAt(p []byte, off int64) (int, error) { - ret := ((*bio.Reader)(f)).Seek(off, 0) + ret := ((*bio.Reader)(f)).MustSeek(off, 0) if ret < 0 { return 0, errors.New("fail to seek") } diff --git a/src/cmd/link/internal/loadxcoff/ldxcoff.go b/src/cmd/link/internal/loadxcoff/ldxcoff.go index 7c863d79c5..f52b23ce6a 100644 --- a/src/cmd/link/internal/loadxcoff/ldxcoff.go +++ b/src/cmd/link/internal/loadxcoff/ldxcoff.go @@ -27,7 +27,7 @@ type ldSection struct { type xcoffBiobuf bio.Reader func (f *xcoffBiobuf) ReadAt(p []byte, off int64) (int, error) { - ret := ((*bio.Reader)(f)).Seek(off, 0) + ret := ((*bio.Reader)(f)).MustSeek(off, 0) if ret < 0 { return 0, errors.New("fail to seek") } diff --git a/src/cmd/link/internal/mips/asm.go b/src/cmd/link/internal/mips/asm.go index 8409e43afc..f05455e520 100644 --- a/src/cmd/link/internal/mips/asm.go +++ b/src/cmd/link/internal/mips/asm.go @@ -197,7 +197,9 @@ func asmb(ctxt *ld.Link) { ctxt.Out.SeekSet(int64(ld.Segdwarf.Fileoff)) ld.Dwarfblk(ctxt, int64(ld.Segdwarf.Vaddr), int64(ld.Segdwarf.Filelen)) +} +func asmb2(ctxt *ld.Link) { /* output symbol table */ ld.Symsize = 0 diff --git a/src/cmd/link/internal/mips/obj.go b/src/cmd/link/internal/mips/obj.go index c5d3451c39..231e1ff322 100644 --- a/src/cmd/link/internal/mips/obj.go +++ b/src/cmd/link/internal/mips/obj.go @@ -34,7 +34,6 @@ import ( "cmd/internal/objabi" "cmd/internal/sys" "cmd/link/internal/ld" - "fmt" ) func Init() (*sys.Arch, ld.Arch) { @@ -55,6 +54,7 @@ func Init() (*sys.Arch, ld.Arch) { Archreloc: archreloc, Archrelocvariant: archrelocvariant, Asmb: asmb, + Asmb2: asmb2, Elfreloc1: elfreloc1, Elfsetupplt: elfsetupplt, Gentext: gentext, @@ -82,15 +82,8 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 0x10000 + int64(ld.HEADR) } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 0x10000 } } - - if *ld.FlagDataAddr != 0 && *ld.FlagRound != 0 { - fmt.Printf("warning: -D0x%x is ignored because of -R0x%x\n", uint64(*ld.FlagDataAddr), uint32(*ld.FlagRound)) - } } diff --git a/src/cmd/link/internal/mips64/asm.go b/src/cmd/link/internal/mips64/asm.go index 51eba596dc..25a1d94dcc 100644 --- a/src/cmd/link/internal/mips64/asm.go +++ b/src/cmd/link/internal/mips64/asm.go @@ -209,7 +209,9 @@ func asmb(ctxt *ld.Link) { ctxt.Out.SeekSet(int64(ld.Segdwarf.Fileoff)) ld.Dwarfblk(ctxt, int64(ld.Segdwarf.Vaddr), int64(ld.Segdwarf.Filelen)) +} +func asmb2(ctxt *ld.Link) { /* output symbol table */ ld.Symsize = 0 diff --git a/src/cmd/link/internal/mips64/obj.go b/src/cmd/link/internal/mips64/obj.go index 83974e5b56..96042083f6 100644 --- a/src/cmd/link/internal/mips64/obj.go +++ b/src/cmd/link/internal/mips64/obj.go @@ -34,7 +34,6 @@ import ( "cmd/internal/objabi" "cmd/internal/sys" "cmd/link/internal/ld" - "fmt" ) func Init() (*sys.Arch, ld.Arch) { @@ -54,6 +53,7 @@ func Init() (*sys.Arch, ld.Arch) { Archreloc: archreloc, Archrelocvariant: archrelocvariant, Asmb: asmb, + Asmb2: asmb2, Elfreloc1: elfreloc1, Elfsetupplt: elfsetupplt, Gentext: gentext, @@ -81,9 +81,6 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 16*1024 + int64(ld.HEADR) } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 16 * 1024 } @@ -94,9 +91,6 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 0x10000 + int64(ld.HEADR) } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 0x10000 } @@ -108,15 +102,8 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 0x20000 } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 0x10000 } } - - if *ld.FlagDataAddr != 0 && *ld.FlagRound != 0 { - fmt.Printf("warning: -D0x%x is ignored because of -R0x%x\n", uint64(*ld.FlagDataAddr), uint32(*ld.FlagRound)) - } } diff --git a/src/cmd/link/internal/objfile/objfile.go b/src/cmd/link/internal/objfile/objfile.go index b39e052106..107409b00d 100644 --- a/src/cmd/link/internal/objfile/objfile.go +++ b/src/cmd/link/internal/objfile/objfile.go @@ -17,10 +17,13 @@ import ( "cmd/internal/objabi" "cmd/internal/sys" "cmd/link/internal/sym" + "fmt" "io" "log" + "os" "strconv" "strings" + "unsafe" ) const ( @@ -32,13 +35,16 @@ var emptyPkg = []byte(`"".`) // objReader reads Go object files. type objReader struct { - rd *bufio.Reader + rd *bio.Reader arch *sys.Arch syms *sym.Symbols lib *sym.Library pn string dupSym *sym.Symbol localSymVersion int + flags int + strictDupMsgs int + dataSize int // rdBuf is used by readString and readSymName as scratch for reading strings. rdBuf []byte @@ -52,25 +58,57 @@ type objReader struct { funcdata []*sym.Symbol funcdataoff []int64 file []*sym.Symbol + pkgpref string // objabi.PathToPrefix(r.lib.Pkg) + "." + + roObject []byte // from read-only mmap of object file (may be nil) + roOffset int64 // offset into readonly object data examined so far + + dataReadOnly bool // whether data is backed by read-only memory } +// Flags to enable optional behavior during object loading/reading. + +const ( + NoFlag int = iota + + // Sanity-check duplicate symbol contents, issuing warning + // when duplicates have different lengths or contents. + StrictDupsWarnFlag + + // Similar to StrictDupsWarnFlag, but issue fatal error. + StrictDupsErrFlag +) + // Load loads an object file f into library lib. // The symbols loaded are added to syms. -func Load(arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, lib *sym.Library, length int64, pn string) { +func Load(arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, lib *sym.Library, length int64, pn string, flags int) int { start := f.Offset() + roObject := f.SliceRO(uint64(length)) + if roObject != nil { + f.MustSeek(int64(-length), os.SEEK_CUR) + } r := &objReader{ - rd: f.Reader, + rd: f, lib: lib, arch: arch, syms: syms, pn: pn, dupSym: &sym.Symbol{Name: ".dup"}, localSymVersion: syms.IncVersion(), + flags: flags, + roObject: roObject, + pkgpref: objabi.PathToPrefix(lib.Pkg) + ".", } r.loadObjFile() - if f.Offset() != start+length { + if roObject != nil { + if r.roOffset != length { + log.Fatalf("%s: unexpected end at %d, want %d", pn, r.roOffset, start+length) + } + r.rd.MustSeek(int64(length), os.SEEK_CUR) + } else if f.Offset() != start+length { log.Fatalf("%s: unexpected end at %d, want %d", pn, f.Offset(), start+length) } + return r.strictDupMsgs } func (r *objReader) loadObjFile() { @@ -82,7 +120,7 @@ func (r *objReader) loadObjFile() { } // Version - c, err := r.rd.ReadByte() + c, err := r.readByte() if err != nil || c != 1 { log.Fatalf("%s: invalid file version number %d", r.pn, c) } @@ -99,12 +137,12 @@ func (r *objReader) loadObjFile() { // Symbol references r.refs = []*sym.Symbol{nil} // zeroth ref is nil for { - c, err := r.rd.Peek(1) + c, err := r.peek(1) if err != nil { log.Fatalf("%s: peeking: %v", r.pn, err) } if c[0] == 0xff { - r.rd.ReadByte() + r.readByte() break } r.readRef() @@ -114,11 +152,14 @@ func (r *objReader) loadObjFile() { r.readSlices() // Data section - r.readFull(r.data) + err = r.readDataSection() + if err != nil { + log.Fatalf("%s: error reading %s", r.pn, err) + } // Defined symbols for { - c, err := r.rd.Peek(1) + c, err := r.peek(1) if err != nil { log.Fatalf("%s: peeking: %v", r.pn, err) } @@ -137,9 +178,8 @@ func (r *objReader) loadObjFile() { } func (r *objReader) readSlices() { + r.dataSize = r.readInt() n := r.readInt() - r.data = make([]byte, n) - n = r.readInt() r.reloc = make([]sym.Reloc, n) n = r.readInt() r.pcdata = make([]sym.Pcdata, n) @@ -152,16 +192,27 @@ func (r *objReader) readSlices() { r.file = make([]*sym.Symbol, n) } +func (r *objReader) readDataSection() (err error) { + if r.roObject != nil { + r.data, r.dataReadOnly, err = + r.roObject[r.roOffset:r.roOffset+int64(r.dataSize)], true, nil + r.roOffset += int64(r.dataSize) + return + } + r.data, r.dataReadOnly, err = r.rd.Slice(uint64(r.dataSize)) + return +} + // Symbols are prefixed so their content doesn't get confused with the magic footer. const symPrefix = 0xfe func (r *objReader) readSym() { var c byte var err error - if c, err = r.rd.ReadByte(); c != symPrefix || err != nil { + if c, err = r.readByte(); c != symPrefix || err != nil { log.Fatalln("readSym out of sync") } - if c, err = r.rd.ReadByte(); err != nil { + if c, err = r.readByte(); err != nil { log.Fatalln("error reading input: ", err) } t := sym.AbiSymKindToSymKind[c] @@ -174,7 +225,6 @@ func (r *objReader) readSym() { typ := r.readSymIndex() data := r.readData() nreloc := r.readInt() - pkg := objabi.PathToPrefix(r.lib.Pkg) isdup := false var dup *sym.Symbol @@ -203,7 +253,7 @@ func (r *objReader) readSym() { } overwrite: - s.File = pkg + s.File = r.pkgpref[:len(r.pkgpref)-1] s.Lib = r.lib if dupok { s.Attr |= sym.AttrDuplicateOK @@ -230,6 +280,7 @@ overwrite: dup.Gotype = typ } s.P = data + s.Attr.Set(sym.AttrReadOnly, r.dataReadOnly) if nreloc > 0 { s.R = r.reloc[:nreloc:nreloc] if !isdup { @@ -263,6 +314,9 @@ overwrite: if flags&(1<<3) != 0 { s.Attr |= sym.AttrShared } + if flags&(1<<4) != 0 { + s.Attr |= sym.AttrTopFrame + } n := r.readInt() pc.Autom = r.autom[:n:n] if !isdup { @@ -340,6 +394,32 @@ overwrite: if s.Type == sym.SDWARFINFO { r.patchDWARFName(s) } + + if isdup && r.flags&(StrictDupsWarnFlag|StrictDupsErrFlag) != 0 { + // Compare the just-read symbol with the previously read + // symbol of the same name, verifying that they have the same + // payload. If not, issue a warning and possibly an error. + if !bytes.Equal(s.P, dup.P) { + reason := "same length but different contents" + if len(s.P) != len(dup.P) { + reason = fmt.Sprintf("new length %d != old length %d", + len(data), len(dup.P)) + } + fmt.Fprintf(os.Stderr, "cmd/link: while reading object for '%v': duplicate symbol '%s', previous def at '%v', with mismatched payload: %s\n", r.lib, dup, dup.Lib, reason) + + // For the moment, whitelist DWARF subprogram DIEs for + // auto-generated wrapper functions. What seems to happen + // here is that we get different line numbers on formal + // params; I am guessing that the pos is being inherited + // from the spot where the wrapper is needed. + whitelist := (strings.HasPrefix(dup.Name, "go.info.go.interface") || + strings.HasPrefix(dup.Name, "go.info.go.builtin") || + strings.HasPrefix(dup.Name, "go.isstmt.go.builtin")) + if !whitelist { + r.strictDupMsgs++ + } + } + } } func (r *objReader) patchDWARFName(s *sym.Symbol) { @@ -356,7 +436,7 @@ func (r *objReader) patchDWARFName(s *sym.Symbol) { if p == -1 { return } - pkgprefix := []byte(objabi.PathToPrefix(r.lib.Pkg) + ".") + pkgprefix := []byte(r.pkgpref) patched := bytes.Replace(s.P[:e], emptyPkg, pkgprefix, -1) s.P = append(patched, s.P[e:]...) @@ -371,14 +451,35 @@ func (r *objReader) patchDWARFName(s *sym.Symbol) { } func (r *objReader) readFull(b []byte) { + if r.roObject != nil { + copy(b, r.roObject[r.roOffset:]) + r.roOffset += int64(len(b)) + return + } _, err := io.ReadFull(r.rd, b) if err != nil { log.Fatalf("%s: error reading %s", r.pn, err) } } +func (r *objReader) readByte() (byte, error) { + if r.roObject != nil { + b := r.roObject[r.roOffset] + r.roOffset++ + return b, nil + } + return r.rd.ReadByte() +} + +func (r *objReader) peek(n int) ([]byte, error) { + if r.roObject != nil { + return r.roObject[r.roOffset : r.roOffset+int64(n)], nil + } + return r.rd.Peek(n) +} + func (r *objReader) readRef() { - if c, err := r.rd.ReadByte(); c != symPrefix || err != nil { + if c, err := r.readByte(); c != symPrefix || err != nil { log.Fatalf("readSym out of sync") } name := r.readSymName() @@ -429,7 +530,7 @@ func (r *objReader) readInt64() int64 { if shift >= 64 { log.Fatalf("corrupt input") } - c, err := r.rd.ReadByte() + c, err := r.readByte() if err != nil { log.Fatalln("error reading input: ", err) } @@ -490,9 +591,22 @@ func (r *objReader) readData() []byte { return p } +type stringHeader struct { + str unsafe.Pointer + len int +} + +func mkROString(rodata []byte) string { + if len(rodata) == 0 { + return "" + } + ss := stringHeader{str: unsafe.Pointer(&rodata[0]), len: len(rodata)} + s := *(*string)(unsafe.Pointer(&ss)) + return s +} + // readSymName reads a symbol name, replacing all "". with pkg. func (r *objReader) readSymName() string { - pkg := objabi.PathToPrefix(r.lib.Pkg) n := r.readInt() if n == 0 { r.readInt64() @@ -501,7 +615,8 @@ func (r *objReader) readSymName() string { if cap(r.rdBuf) < n { r.rdBuf = make([]byte, 2*n) } - origName, err := r.rd.Peek(n) + sOffset := r.roOffset + origName, err := r.peek(n) if err == bufio.ErrBufferFull { // Long symbol names are rare but exist. One source is type // symbols for types with long string forms. See #15104. @@ -511,10 +626,16 @@ func (r *objReader) readSymName() string { log.Fatalf("%s: error reading symbol: %v", r.pn, err) } adjName := r.rdBuf[:0] + nPkgRefs := 0 for { i := bytes.Index(origName, emptyPkg) if i == -1 { - s := string(append(adjName, origName...)) + var s string + if r.roObject != nil && nPkgRefs == 0 { + s = mkROString(r.roObject[sOffset : sOffset+int64(n)]) + } else { + s = string(append(adjName, origName...)) + } // Read past the peeked origName, now that we're done with it, // using the rfBuf (also no longer used) as the scratch space. // TODO: use bufio.Reader.Discard if available instead? @@ -524,8 +645,9 @@ func (r *objReader) readSymName() string { r.rdBuf = adjName[:0] // in case 2*n wasn't enough return s } + nPkgRefs++ adjName = append(adjName, origName[:i]...) - adjName = append(adjName, pkg...) + adjName = append(adjName, r.pkgpref[:len(r.pkgpref)-1]...) adjName = append(adjName, '.') origName = origName[i+len(emptyPkg):] } diff --git a/src/cmd/link/internal/ppc64/asm.go b/src/cmd/link/internal/ppc64/asm.go index 6e31668e28..c315b4bfc2 100644 --- a/src/cmd/link/internal/ppc64/asm.go +++ b/src/cmd/link/internal/ppc64/asm.go @@ -95,7 +95,7 @@ func genplt(ctxt *ld.Link) { for _, s := range ctxt.Textp { for i := range s.R { r := &s.R[i] - if r.Type != 256+objabi.RelocType(elf.R_PPC64_REL24) || r.Sym.Type != sym.SDYNIMPORT { + if r.Type != objabi.ElfRelocOffset+objabi.RelocType(elf.R_PPC64_REL24) || r.Sym.Type != sym.SDYNIMPORT { continue } @@ -272,16 +272,17 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { } func addelfdynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { targ := r.Sym + r.InitExt() switch r.Type { default: - if r.Type >= 256 { + if r.Type >= objabi.ElfRelocOffset { ld.Errorf(s, "unexpected relocation type %d (%s)", r.Type, sym.RelocName(ctxt.Arch, r.Type)) return false } // Handle relocations found in ELF object files. - case 256 + objabi.RelocType(elf.R_PPC64_REL24): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_REL24): r.Type = objabi.R_CALLPOWER // This is a local call, so the caller isn't setting @@ -298,7 +299,7 @@ func addelfdynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { return true - case 256 + objabi.RelocType(elf.R_PPC_REL32): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC_REL32): r.Type = objabi.R_PCREL r.Add += 4 @@ -308,7 +309,7 @@ func addelfdynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { return true - case 256 + objabi.RelocType(elf.R_PPC64_ADDR64): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_ADDR64): r.Type = objabi.R_ADDR if targ.Type == sym.SDYNIMPORT { // These happen in .toc sections @@ -318,54 +319,54 @@ func addelfdynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { rela.AddAddrPlus(ctxt.Arch, s, int64(r.Off)) rela.AddUint64(ctxt.Arch, ld.ELF64_R_INFO(uint32(targ.Dynid), uint32(elf.R_PPC64_ADDR64))) rela.AddUint64(ctxt.Arch, uint64(r.Add)) - r.Type = 256 // ignore during relocsym + r.Type = objabi.ElfRelocOffset // ignore during relocsym } return true - case 256 + objabi.RelocType(elf.R_PPC64_TOC16): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_TOC16): r.Type = objabi.R_POWER_TOC r.Variant = sym.RV_POWER_LO | sym.RV_CHECK_OVERFLOW return true - case 256 + objabi.RelocType(elf.R_PPC64_TOC16_LO): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_TOC16_LO): r.Type = objabi.R_POWER_TOC r.Variant = sym.RV_POWER_LO return true - case 256 + objabi.RelocType(elf.R_PPC64_TOC16_HA): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_TOC16_HA): r.Type = objabi.R_POWER_TOC r.Variant = sym.RV_POWER_HA | sym.RV_CHECK_OVERFLOW return true - case 256 + objabi.RelocType(elf.R_PPC64_TOC16_HI): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_TOC16_HI): r.Type = objabi.R_POWER_TOC r.Variant = sym.RV_POWER_HI | sym.RV_CHECK_OVERFLOW return true - case 256 + objabi.RelocType(elf.R_PPC64_TOC16_DS): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_TOC16_DS): r.Type = objabi.R_POWER_TOC r.Variant = sym.RV_POWER_DS | sym.RV_CHECK_OVERFLOW return true - case 256 + objabi.RelocType(elf.R_PPC64_TOC16_LO_DS): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_TOC16_LO_DS): r.Type = objabi.R_POWER_TOC r.Variant = sym.RV_POWER_DS return true - case 256 + objabi.RelocType(elf.R_PPC64_REL16_LO): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_REL16_LO): r.Type = objabi.R_PCREL r.Variant = sym.RV_POWER_LO r.Add += 2 // Compensate for relocation size of 2 return true - case 256 + objabi.RelocType(elf.R_PPC64_REL16_HI): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_REL16_HI): r.Type = objabi.R_PCREL r.Variant = sym.RV_POWER_HI | sym.RV_CHECK_OVERFLOW r.Add += 2 return true - case 256 + objabi.RelocType(elf.R_PPC64_REL16_HA): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_PPC64_REL16_HA): r.Type = objabi.R_PCREL r.Variant = sym.RV_POWER_HA | sym.RV_CHECK_OVERFLOW r.Add += 2 @@ -382,6 +383,46 @@ func addelfdynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { return false } +func xcoffreloc1(arch *sys.Arch, out *ld.OutBuf, s *sym.Symbol, r *sym.Reloc, sectoff int64) bool { + rs := r.Xsym + + emitReloc := func(v uint16, off uint64) { + out.Write64(uint64(sectoff) + off) + out.Write32(uint32(rs.Dynid)) + out.Write16(v) + } + + var v uint16 + switch r.Type { + default: + return false + case objabi.R_ADDR: + v = ld.XCOFF_R_POS + if r.Siz == 4 { + v |= 0x1F << 8 + } else { + v |= 0x3F << 8 + } + emitReloc(v, 0) + case objabi.R_ADDRPOWER_TOCREL: + case objabi.R_ADDRPOWER_TOCREL_DS: + emitReloc(ld.XCOFF_R_TOCU|(0x0F<<8), 2) + emitReloc(ld.XCOFF_R_TOCL|(0x0F<<8), 6) + case objabi.R_POWER_TLS_LE: + emitReloc(ld.XCOFF_R_TLS_LE|0x0F<<8, 2) + case objabi.R_CALLPOWER: + if r.Siz != 4 { + return false + } + emitReloc(ld.XCOFF_R_RBR|0x19<<8, 0) + case objabi.R_XCOFFREF: + emitReloc(ld.XCOFF_R_REF|0x3F<<8, 0) + + } + return true + +} + func elfreloc1(ctxt *ld.Link, r *sym.Reloc, sectoff int64) bool { // Beware that bit0~bit15 start from the third byte of a instruction in Big-Endian machines. if r.Type == objabi.R_ADDR || r.Type == objabi.R_POWER_TLS || r.Type == objabi.R_CALLPOWER { @@ -514,7 +555,7 @@ func archreloctoc(ctxt *ld.Link, r *sym.Reloc, s *sym.Symbol, val int64) int64 { ld.Errorf(s, "archreloctoc called for a symbol without TOC anchor") } - if tarSym != nil && tarSym.Attr.Reachable() && (tarSym.Sect.Seg == &ld.Segdata) { + if ctxt.LinkMode == ld.LinkInternal && tarSym != nil && tarSym.Attr.Reachable() && (tarSym.Sect.Seg == &ld.Segdata) { t = ld.Symaddr(tarSym) + r.Add - ctxt.Syms.ROLookup("TOC", 0).Value // change ld to addi in the second instruction o2 = (o2 & 0x03FF0000) | 0xE<<26 @@ -654,7 +695,7 @@ func trampoline(ctxt *ld.Link, r *sym.Reloc, s *sym.Symbol) { ld.Errorf(s, "unexpected trampoline for shared or dynamic linking\n") } else { ctxt.AddTramp(tramp) - gentramp(ctxt.Arch, ctxt.LinkMode, tramp, r.Sym, r.Add) + gentramp(ctxt, tramp, r.Sym, r.Add) } } r.Sym = tramp @@ -666,47 +707,78 @@ func trampoline(ctxt *ld.Link, r *sym.Reloc, s *sym.Symbol) { } } -func gentramp(arch *sys.Arch, linkmode ld.LinkMode, tramp, target *sym.Symbol, offset int64) { - // Used for default build mode for an executable - // Address of the call target is generated using - // relocation and doesn't depend on r2 (TOC). +func gentramp(ctxt *ld.Link, tramp, target *sym.Symbol, offset int64) { tramp.Size = 16 // 4 instructions tramp.P = make([]byte, tramp.Size) t := ld.Symaddr(target) + offset - o1 := uint32(0x3fe00000) // lis r31,targetaddr hi - o2 := uint32(0x3bff0000) // addi r31,targetaddr lo - // With external linking, the target address must be - // relocated using LO and HA - if linkmode == ld.LinkExternal { + var o1, o2 uint32 + + if ctxt.HeadType == objabi.Haix { + // On AIX, the address is retrieved with a TOC symbol. + // For internal linking, the "Linux" way might still be used. + // However, all text symbols are accessed with a TOC symbol as + // text relocations aren't supposed to be possible. + // So, keep using the external linking way to be more AIX friendly. + o1 = uint32(0x3fe20000) // lis r2, toctargetaddr hi + o2 = uint32(0xebff0000) // ld r31, toctargetaddr lo + + toctramp := ctxt.Syms.Lookup("TOC."+tramp.Name, 0) + toctramp.Type = sym.SXCOFFTOC + toctramp.Attr |= sym.AttrReachable + toctramp.AddAddr(ctxt.Arch, target) + tr := tramp.AddRel() tr.Off = 0 - tr.Type = objabi.R_ADDRPOWER + tr.Type = objabi.R_ADDRPOWER_TOCREL_DS tr.Siz = 8 // generates 2 relocations: HA + LO - tr.Sym = target + tr.Sym = toctramp tr.Add = offset } else { - // adjustment needed if lo has sign bit set - // when using addi to compute address - val := uint32((t & 0xffff0000) >> 16) - if t&0x8000 != 0 { - val += 1 + // Used for default build mode for an executable + // Address of the call target is generated using + // relocation and doesn't depend on r2 (TOC). + o1 = uint32(0x3fe00000) // lis r31,targetaddr hi + o2 = uint32(0x3bff0000) // addi r31,targetaddr lo + + // With external linking, the target address must be + // relocated using LO and HA + if ctxt.LinkMode == ld.LinkExternal { + tr := tramp.AddRel() + tr.Off = 0 + tr.Type = objabi.R_ADDRPOWER + tr.Siz = 8 // generates 2 relocations: HA + LO + tr.Sym = target + tr.Add = offset + + } else { + // adjustment needed if lo has sign bit set + // when using addi to compute address + val := uint32((t & 0xffff0000) >> 16) + if t&0x8000 != 0 { + val += 1 + } + o1 |= val // hi part of addr + o2 |= uint32(t & 0xffff) // lo part of addr } - o1 |= val // hi part of addr - o2 |= uint32(t & 0xffff) // lo part of addr } + o3 := uint32(0x7fe903a6) // mtctr r31 o4 := uint32(0x4e800420) // bctr - arch.ByteOrder.PutUint32(tramp.P, o1) - arch.ByteOrder.PutUint32(tramp.P[4:], o2) - arch.ByteOrder.PutUint32(tramp.P[8:], o3) - arch.ByteOrder.PutUint32(tramp.P[12:], o4) + ctxt.Arch.ByteOrder.PutUint32(tramp.P, o1) + ctxt.Arch.ByteOrder.PutUint32(tramp.P[4:], o2) + ctxt.Arch.ByteOrder.PutUint32(tramp.P[8:], o3) + ctxt.Arch.ByteOrder.PutUint32(tramp.P[12:], o4) } func archreloc(ctxt *ld.Link, r *sym.Reloc, s *sym.Symbol, val int64) (int64, bool) { if ctxt.LinkMode == ld.LinkExternal { + // On AIX, relocations (except TLS ones) must be also done to the + // value with the current addresses. switch r.Type { default: - return val, false + if ctxt.HeadType != objabi.Haix { + return val, false + } case objabi.R_POWER_TLS, objabi.R_POWER_TLS_LE, objabi.R_POWER_TLS_IE: r.Done = false // check Outer is nil, Type is TLSBSS? @@ -734,12 +806,16 @@ func archreloc(ctxt *ld.Link, r *sym.Reloc, s *sym.Symbol, val int64) (int64, bo } r.Xsym = rs - return val, true + if ctxt.HeadType != objabi.Haix { + return val, true + } case objabi.R_CALLPOWER: r.Done = false r.Xsym = r.Sym r.Xadd = r.Add - return val, true + if ctxt.HeadType != objabi.Haix { + return val, true + } } } @@ -1028,7 +1104,9 @@ func asmb(ctxt *ld.Link) { ctxt.Out.SeekSet(int64(ld.Segdwarf.Fileoff)) ld.Dwarfblk(ctxt, int64(ld.Segdwarf.Vaddr), int64(ld.Segdwarf.Filelen)) +} +func asmb2(ctxt *ld.Link) { /* output symbol table */ ld.Symsize = 0 diff --git a/src/cmd/link/internal/ppc64/obj.go b/src/cmd/link/internal/ppc64/obj.go index fbedc728d9..51d1791f21 100644 --- a/src/cmd/link/internal/ppc64/obj.go +++ b/src/cmd/link/internal/ppc64/obj.go @@ -34,7 +34,6 @@ import ( "cmd/internal/objabi" "cmd/internal/sys" "cmd/link/internal/ld" - "fmt" ) func Init() (*sys.Arch, ld.Arch) { @@ -55,11 +54,13 @@ func Init() (*sys.Arch, ld.Arch) { Archreloc: archreloc, Archrelocvariant: archrelocvariant, Asmb: asmb, + Asmb2: asmb2, Elfreloc1: elfreloc1, Elfsetupplt: elfsetupplt, Gentext: gentext, Trampoline: trampoline, Machoreloc1: machoreloc1, + Xcoffreloc1: xcoffreloc1, // TODO(austin): ABI v1 uses /usr/lib/ld.so.1, Linuxdynld: "/lib64/ld64.so.1", @@ -85,9 +86,6 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 4128 } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 4096 } @@ -98,9 +96,6 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 0x10000 + int64(ld.HEADR) } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 0x10000 } @@ -112,19 +107,11 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 0x20000 } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 0x10000 } case objabi.Haix: ld.Xcoffinit(ctxt) - - } - - if *ld.FlagDataAddr != 0 && *ld.FlagRound != 0 { - fmt.Printf("warning: -D0x%x is ignored because of -R0x%x\n", uint64(*ld.FlagDataAddr), uint32(*ld.FlagRound)) } } diff --git a/src/cmd/link/internal/s390x/asm.go b/src/cmd/link/internal/s390x/asm.go index 88199f3a56..ebaf760edf 100644 --- a/src/cmd/link/internal/s390x/asm.go +++ b/src/cmd/link/internal/s390x/asm.go @@ -69,6 +69,7 @@ func gentext(ctxt *ld.Link) { initfunc.AddUint8(0xc0) initfunc.AddUint8(0x20) lmd := initfunc.AddRel() + lmd.InitExt() lmd.Off = int32(initfunc.Size) lmd.Siz = 4 lmd.Sym = ctxt.Moduledata @@ -81,6 +82,7 @@ func gentext(ctxt *ld.Link) { initfunc.AddUint8(0xc0) initfunc.AddUint8(0xf4) rel := initfunc.AddRel() + rel.InitExt() rel.Off = int32(initfunc.Size) rel.Siz = 4 rel.Sym = ctxt.Syms.Lookup("runtime.addmoduledata", 0) @@ -104,33 +106,34 @@ func gentext(ctxt *ld.Link) { func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { targ := r.Sym + r.InitExt() switch r.Type { default: - if r.Type >= 256 { + if r.Type >= objabi.ElfRelocOffset { ld.Errorf(s, "unexpected relocation type %d", r.Type) return false } // Handle relocations found in ELF object files. - case 256 + objabi.RelocType(elf.R_390_12), - 256 + objabi.RelocType(elf.R_390_GOT12): - ld.Errorf(s, "s390x 12-bit relocations have not been implemented (relocation type %d)", r.Type-256) + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_12), + objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_GOT12): + ld.Errorf(s, "s390x 12-bit relocations have not been implemented (relocation type %d)", r.Type-objabi.ElfRelocOffset) return false - case 256 + objabi.RelocType(elf.R_390_8), - 256 + objabi.RelocType(elf.R_390_16), - 256 + objabi.RelocType(elf.R_390_32), - 256 + objabi.RelocType(elf.R_390_64): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_8), + objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_16), + objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_32), + objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_64): if targ.Type == sym.SDYNIMPORT { ld.Errorf(s, "unexpected R_390_nn relocation for dynamic symbol %s", targ.Name) } r.Type = objabi.R_ADDR return true - case 256 + objabi.RelocType(elf.R_390_PC16), - 256 + objabi.RelocType(elf.R_390_PC32), - 256 + objabi.RelocType(elf.R_390_PC64): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_PC16), + objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_PC32), + objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_PC64): if targ.Type == sym.SDYNIMPORT { ld.Errorf(s, "unexpected R_390_PCnn relocation for dynamic symbol %s", targ.Name) } @@ -143,14 +146,14 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { r.Add += int64(r.Siz) return true - case 256 + objabi.RelocType(elf.R_390_GOT16), - 256 + objabi.RelocType(elf.R_390_GOT32), - 256 + objabi.RelocType(elf.R_390_GOT64): - ld.Errorf(s, "unimplemented S390x relocation: %v", r.Type-256) + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_GOT16), + objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_GOT32), + objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_GOT64): + ld.Errorf(s, "unimplemented S390x relocation: %v", r.Type-objabi.ElfRelocOffset) return true - case 256 + objabi.RelocType(elf.R_390_PLT16DBL), - 256 + objabi.RelocType(elf.R_390_PLT32DBL): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_PLT16DBL), + objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_PLT32DBL): r.Type = objabi.R_PCREL r.Variant = sym.RV_390_DBL r.Add += int64(r.Siz) @@ -161,8 +164,8 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { } return true - case 256 + objabi.RelocType(elf.R_390_PLT32), - 256 + objabi.RelocType(elf.R_390_PLT64): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_PLT32), + objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_PLT64): r.Type = objabi.R_PCREL r.Add += int64(r.Siz) if targ.Type == sym.SDYNIMPORT { @@ -172,37 +175,37 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { } return true - case 256 + objabi.RelocType(elf.R_390_COPY): - ld.Errorf(s, "unimplemented S390x relocation: %v", r.Type-256) + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_COPY): + ld.Errorf(s, "unimplemented S390x relocation: %v", r.Type-objabi.ElfRelocOffset) return false - case 256 + objabi.RelocType(elf.R_390_GLOB_DAT): - ld.Errorf(s, "unimplemented S390x relocation: %v", r.Type-256) + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_GLOB_DAT): + ld.Errorf(s, "unimplemented S390x relocation: %v", r.Type-objabi.ElfRelocOffset) return false - case 256 + objabi.RelocType(elf.R_390_JMP_SLOT): - ld.Errorf(s, "unimplemented S390x relocation: %v", r.Type-256) + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_JMP_SLOT): + ld.Errorf(s, "unimplemented S390x relocation: %v", r.Type-objabi.ElfRelocOffset) return false - case 256 + objabi.RelocType(elf.R_390_RELATIVE): - ld.Errorf(s, "unimplemented S390x relocation: %v", r.Type-256) + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_RELATIVE): + ld.Errorf(s, "unimplemented S390x relocation: %v", r.Type-objabi.ElfRelocOffset) return false - case 256 + objabi.RelocType(elf.R_390_GOTOFF): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_GOTOFF): if targ.Type == sym.SDYNIMPORT { ld.Errorf(s, "unexpected R_390_GOTOFF relocation for dynamic symbol %s", targ.Name) } r.Type = objabi.R_GOTOFF return true - case 256 + objabi.RelocType(elf.R_390_GOTPC): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_GOTPC): r.Type = objabi.R_PCREL r.Sym = ctxt.Syms.Lookup(".got", 0) r.Add += int64(r.Siz) return true - case 256 + objabi.RelocType(elf.R_390_PC16DBL), - 256 + objabi.RelocType(elf.R_390_PC32DBL): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_PC16DBL), + objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_PC32DBL): r.Type = objabi.R_PCREL r.Variant = sym.RV_390_DBL r.Add += int64(r.Siz) @@ -211,14 +214,14 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { } return true - case 256 + objabi.RelocType(elf.R_390_GOTPCDBL): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_GOTPCDBL): r.Type = objabi.R_PCREL r.Variant = sym.RV_390_DBL r.Sym = ctxt.Syms.Lookup(".got", 0) r.Add += int64(r.Siz) return true - case 256 + objabi.RelocType(elf.R_390_GOTENT): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_390_GOTENT): addgotsym(ctxt, targ) r.Type = objabi.R_PCREL @@ -540,7 +543,9 @@ func asmb(ctxt *ld.Link) { ctxt.Out.SeekSet(int64(ld.Segdwarf.Fileoff)) ld.Dwarfblk(ctxt, int64(ld.Segdwarf.Vaddr), int64(ld.Segdwarf.Filelen)) +} +func asmb2(ctxt *ld.Link) { /* output symbol table */ ld.Symsize = 0 diff --git a/src/cmd/link/internal/s390x/obj.go b/src/cmd/link/internal/s390x/obj.go index 9ac7eb8217..3454476b0f 100644 --- a/src/cmd/link/internal/s390x/obj.go +++ b/src/cmd/link/internal/s390x/obj.go @@ -34,7 +34,6 @@ import ( "cmd/internal/objabi" "cmd/internal/sys" "cmd/link/internal/ld" - "fmt" ) func Init() (*sys.Arch, ld.Arch) { @@ -51,7 +50,8 @@ func Init() (*sys.Arch, ld.Arch) { Archinit: archinit, Archreloc: archreloc, Archrelocvariant: archrelocvariant, - Asmb: asmb, // in asm.go + Asmb: asmb, // in asm.go + Asmb2: asmb2, // in asm.go Elfreloc1: elfreloc1, Elfsetupplt: elfsetupplt, Gentext: gentext, @@ -81,15 +81,8 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 0x10000 + int64(ld.HEADR) } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 0x10000 } } - - if *ld.FlagDataAddr != 0 && *ld.FlagRound != 0 { - fmt.Printf("warning: -D0x%x is ignored because of -R0x%x\n", uint64(*ld.FlagDataAddr), uint32(*ld.FlagRound)) - } } diff --git a/src/cmd/link/internal/sym/attribute.go b/src/cmd/link/internal/sym/attribute.go index 62ccef91a6..4b69bf32d0 100644 --- a/src/cmd/link/internal/sym/attribute.go +++ b/src/cmd/link/internal/sym/attribute.go @@ -75,7 +75,13 @@ const ( // AttrContainer is set on text symbols that are present as the .Outer for some // other symbol. AttrContainer - // 17 attributes defined so far. + // AttrTopFrame means that the function is an entry point and unwinders + // should stop when they hit this function. + AttrTopFrame + // AttrReadOnly indicates whether the symbol's content (Symbol.P) is backed by + // read-only memory. + AttrReadOnly + // 19 attributes defined so far. ) func (a Attribute) DuplicateOK() bool { return a&AttrDuplicateOK != 0 } @@ -95,6 +101,8 @@ func (a Attribute) Shared() bool { return a&AttrShared != 0 } func (a Attribute) VisibilityHidden() bool { return a&AttrVisibilityHidden != 0 } func (a Attribute) SubSymbol() bool { return a&AttrSubSymbol != 0 } func (a Attribute) Container() bool { return a&AttrContainer != 0 } +func (a Attribute) TopFrame() bool { return a&AttrTopFrame != 0 } +func (a Attribute) ReadOnly() bool { return a&AttrReadOnly != 0 } func (a Attribute) CgoExport() bool { return a.CgoExportDynamic() || a.CgoExportStatic() diff --git a/src/cmd/link/internal/sym/reloc.go b/src/cmd/link/internal/sym/reloc.go index da696d327b..4809db8c80 100644 --- a/src/cmd/link/internal/sym/reloc.go +++ b/src/cmd/link/internal/sym/reloc.go @@ -22,15 +22,27 @@ import ( // // Some relocations are created by cmd/link. type Reloc struct { - Off int32 // offset to rewrite - Siz uint8 // number of bytes to rewrite, 1, 2, or 4 - Done bool // set to true when relocation is complete - Variant RelocVariant // variation on Type - Type objabi.RelocType // the relocation type - Add int64 // addend - Xadd int64 // addend passed to external linker - Sym *Symbol // symbol the relocation addresses - Xsym *Symbol // symbol passed to external linker + Off int32 // offset to rewrite + Siz uint8 // number of bytes to rewrite, 1, 2, or 4 + Done bool // set to true when relocation is complete + Type objabi.RelocType // the relocation type + Add int64 // addend + Sym *Symbol // symbol the relocation addresses + *relocExt // extra fields (see below), may be nil, call InitExt before use +} + +// relocExt contains extra fields in Reloc that are used only in +// certain cases. +type relocExt struct { + Xadd int64 // addend passed to external linker + Xsym *Symbol // symbol passed to external linker + Variant RelocVariant // variation on Type, currently used only on PPC64 and S390X +} + +func (r *Reloc) InitExt() { + if r.relocExt == nil { + r.relocExt = new(relocExt) + } } // RelocVariant is a linker-internal variation on a relocation. @@ -57,8 +69,8 @@ func RelocName(arch *sys.Arch, r objabi.RelocType) string { // Uncomment code when we include those in bootstrap code. switch { - case r >= 512: // Mach-O - // nr := (r - 512)>>1 + case r >= objabi.MachoRelocOffset: // Mach-O + // nr := (r - objabi.MachoRelocOffset)>>1 // switch ctxt.Arch.Family { // case sys.AMD64: // return macho.RelocTypeX86_64(nr).String() @@ -71,8 +83,8 @@ func RelocName(arch *sys.Arch, r objabi.RelocType) string { // default: // panic("unreachable") // } - case r >= 256: // ELF - nr := r - 256 + case r >= objabi.ElfRelocOffset: // ELF + nr := r - objabi.ElfRelocOffset switch arch.Family { case sys.AMD64: return elf.R_X86_64(nr).String() diff --git a/src/cmd/link/internal/sym/symbol.go b/src/cmd/link/internal/sym/symbol.go index 8b70d61846..d115a3326f 100644 --- a/src/cmd/link/internal/sym/symbol.go +++ b/src/cmd/link/internal/sym/symbol.go @@ -172,7 +172,7 @@ func (s *Symbol) SetUint(arch *sys.Arch, r int64, v uint64) int64 { return s.setUintXX(arch, r, v, int64(arch.PtrSize)) } -func (s *Symbol) AddAddrPlus(arch *sys.Arch, t *Symbol, add int64) int64 { +func (s *Symbol) addAddrPlus(arch *sys.Arch, t *Symbol, add int64, typ objabi.RelocType) int64 { if s.Type == 0 { s.Type = SDATA } @@ -184,11 +184,19 @@ func (s *Symbol) AddAddrPlus(arch *sys.Arch, t *Symbol, add int64) int64 { r.Sym = t r.Off = int32(i) r.Siz = uint8(arch.PtrSize) - r.Type = objabi.R_ADDR + r.Type = typ r.Add = add return i + int64(r.Siz) } +func (s *Symbol) AddAddrPlus(arch *sys.Arch, t *Symbol, add int64) int64 { + return s.addAddrPlus(arch, t, add, objabi.R_ADDR) +} + +func (s *Symbol) AddCURelativeAddrPlus(arch *sys.Arch, t *Symbol, add int64) int64 { + return s.addAddrPlus(arch, t, add, objabi.R_ADDRCUOFF) +} + func (s *Symbol) AddPCRelPlus(arch *sys.Arch, t *Symbol, add int64) int64 { if s.Type == 0 { s.Type = SDATA @@ -203,6 +211,9 @@ func (s *Symbol) AddPCRelPlus(arch *sys.Arch, t *Symbol, add int64) int64 { r.Add = add r.Type = objabi.R_PCREL r.Siz = 4 + if arch.Family == sys.S390X || arch.Family == sys.PPC64 { + r.InitExt() + } if arch.Family == sys.S390X { r.Variant = RV_390_DBL } diff --git a/src/cmd/link/internal/sym/symkind.go b/src/cmd/link/internal/sym/symkind.go index 82e4b9eda4..dbc2750732 100644 --- a/src/cmd/link/internal/sym/symkind.go +++ b/src/cmd/link/internal/sym/symkind.go @@ -81,6 +81,8 @@ const ( SPCLNTAB // Writable sections. + SFirstWritable + SBUILDINFO SELFSECT SMACHO SMACHOGOT diff --git a/src/cmd/link/internal/wasm/asm.go b/src/cmd/link/internal/wasm/asm.go index 737de59928..c80e81e5b3 100644 --- a/src/cmd/link/internal/wasm/asm.go +++ b/src/cmd/link/internal/wasm/asm.go @@ -54,21 +54,21 @@ type wasmFuncType struct { } var wasmFuncTypes = map[string]*wasmFuncType{ - "_rt0_wasm_js": &wasmFuncType{Params: []byte{}}, // - "wasm_export_run": &wasmFuncType{Params: []byte{I32, I32}}, // argc, argv - "wasm_export_resume": &wasmFuncType{Params: []byte{}}, // - "wasm_export_getsp": &wasmFuncType{Results: []byte{I32}}, // sp - "wasm_pc_f_loop": &wasmFuncType{Params: []byte{}}, // - "runtime.wasmMove": &wasmFuncType{Params: []byte{I32, I32, I32}}, // dst, src, len - "runtime.wasmZero": &wasmFuncType{Params: []byte{I32, I32}}, // ptr, len - "runtime.wasmDiv": &wasmFuncType{Params: []byte{I64, I64}, Results: []byte{I64}}, // x, y -> x/y - "runtime.wasmTruncS": &wasmFuncType{Params: []byte{F64}, Results: []byte{I64}}, // x -> int(x) - "runtime.wasmTruncU": &wasmFuncType{Params: []byte{F64}, Results: []byte{I64}}, // x -> uint(x) - "runtime.gcWriteBarrier": &wasmFuncType{Params: []byte{I64, I64}}, // ptr, val - "cmpbody": &wasmFuncType{Params: []byte{I64, I64, I64, I64}, Results: []byte{I64}}, // a, alen, b, blen -> -1/0/1 - "memeqbody": &wasmFuncType{Params: []byte{I64, I64, I64}, Results: []byte{I64}}, // a, b, len -> 0/1 - "memcmp": &wasmFuncType{Params: []byte{I32, I32, I32}, Results: []byte{I32}}, // a, b, len -> <0/0/>0 - "memchr": &wasmFuncType{Params: []byte{I32, I32, I32}, Results: []byte{I32}}, // s, c, len -> index + "_rt0_wasm_js": {Params: []byte{}}, // + "wasm_export_run": {Params: []byte{I32, I32}}, // argc, argv + "wasm_export_resume": {Params: []byte{}}, // + "wasm_export_getsp": {Results: []byte{I32}}, // sp + "wasm_pc_f_loop": {Params: []byte{}}, // + "runtime.wasmMove": {Params: []byte{I32, I32, I32}}, // dst, src, len + "runtime.wasmZero": {Params: []byte{I32, I32}}, // ptr, len + "runtime.wasmDiv": {Params: []byte{I64, I64}, Results: []byte{I64}}, // x, y -> x/y + "runtime.wasmTruncS": {Params: []byte{F64}, Results: []byte{I64}}, // x -> int(x) + "runtime.wasmTruncU": {Params: []byte{F64}, Results: []byte{I64}}, // x -> uint(x) + "runtime.gcWriteBarrier": {Params: []byte{I64, I64}}, // ptr, val + "cmpbody": {Params: []byte{I64, I64, I64, I64}, Results: []byte{I64}}, // a, alen, b, blen -> -1/0/1 + "memeqbody": {Params: []byte{I64, I64, I64}, Results: []byte{I64}}, // a, b, len -> 0/1 + "memcmp": {Params: []byte{I32, I32, I32}, Results: []byte{I32}}, // a, b, len -> <0/0/>0 + "memchr": {Params: []byte{I32, I32, I32}, Results: []byte{I32}}, // s, c, len -> index } func assignAddress(ctxt *ld.Link, sect *sym.Section, n int, s *sym.Symbol, va uint64, isTramp bool) (*sym.Section, int, uint64) { @@ -92,9 +92,11 @@ func assignAddress(ctxt *ld.Link, sect *sym.Section, n int, s *sym.Symbol, va ui return sect, n, va } +func asmb(ctxt *ld.Link) {} // dummy + // asmb writes the final WebAssembly module binary. // Spec: https://webassembly.github.io/spec/core/binary/modules.html -func asmb(ctxt *ld.Link) { +func asmb2(ctxt *ld.Link) { if ctxt.Debugvlog != 0 { ctxt.Logf("%5.2f asmb\n", ld.Cputime()) } @@ -103,12 +105,12 @@ func asmb(ctxt *ld.Link) { // For normal Go functions the return value is // 0 if the function returned normally or // 1 if the stack needs to be unwound. - &wasmFuncType{Results: []byte{I32}}, + {Results: []byte{I32}}, } // collect host imports (functions that get imported from the WebAssembly host, usually JavaScript) hostImports := []*wasmFunc{ - &wasmFunc{ + { Name: "debug", Type: lookupType(&wasmFuncType{Params: []byte{I32}}, &types), }, @@ -297,18 +299,18 @@ func writeTableSec(ctxt *ld.Link, fns []*wasmFunc) { } // writeMemorySec writes the section that declares linear memories. Currently one linear memory is being used. +// Linear memory always starts at address zero. More memory can be requested with the GrowMemory instruction. func writeMemorySec(ctxt *ld.Link) { sizeOffset := writeSecHeader(ctxt, sectionMemory) - // Linear memory always starts at address zero. - // The unit of the sizes is "WebAssembly page size", which is 64Ki. - // The minimum is currently set to 1GB, which is a lot. - // More memory can be requested with the grow_memory instruction, - // but this operation currently is rather slow, so we avoid it for now. - // TODO(neelance): Use lower initial memory size. - writeUleb128(ctxt.Out, 1) // number of memories - ctxt.Out.WriteByte(0x00) // no maximum memory size - writeUleb128(ctxt.Out, 1024*16) // minimum (initial) memory size + const ( + initialSize = 16 << 20 // 16MB, enough for runtime init without growing + wasmPageSize = 64 << 10 // 64KB + ) + + writeUleb128(ctxt.Out, 1) // number of memories + ctxt.Out.WriteByte(0x00) // no maximum memory size + writeUleb128(ctxt.Out, initialSize/wasmPageSize) // minimum (initial) memory size writeSecSize(ctxt, sizeOffset) } @@ -417,14 +419,71 @@ func writeDataSec(ctxt *ld.Link) { ctxt.Syms.Lookup("runtime.data", 0).Sect, } - writeUleb128(ctxt.Out, uint64(len(sections))) // number of data entries + type dataSegment struct { + offset int32 + data []byte + } - for _, sec := range sections { + // Omit blocks of zeroes and instead emit data segments with offsets skipping the zeroes. + // This reduces the size of the WebAssembly binary. We use 8 bytes as an estimate for the + // overhead of adding a new segment (same as wasm-opt's memory-packing optimization uses). + const segmentOverhead = 8 + + // Generate at most this many segments. A higher number of segments gets rejected by some WebAssembly runtimes. + const maxNumSegments = 100000 + + var segments []*dataSegment + for secIndex, sec := range sections { + data := ld.DatblkBytes(ctxt, int64(sec.Vaddr), int64(sec.Length)) + offset := int32(sec.Vaddr) + + // skip leading zeroes + for len(data) > 0 && data[0] == 0 { + data = data[1:] + offset++ + } + + for len(data) > 0 { + dataLen := int32(len(data)) + var segmentEnd, zeroEnd int32 + if len(segments)+(len(sections)-secIndex) == maxNumSegments { + segmentEnd = dataLen + zeroEnd = dataLen + } else { + for { + // look for beginning of zeroes + for segmentEnd < dataLen && data[segmentEnd] != 0 { + segmentEnd++ + } + // look for end of zeroes + zeroEnd = segmentEnd + for zeroEnd < dataLen && data[zeroEnd] == 0 { + zeroEnd++ + } + // emit segment if omitting zeroes reduces the output size + if zeroEnd-segmentEnd >= segmentOverhead || zeroEnd == dataLen { + break + } + segmentEnd = zeroEnd + } + } + + segments = append(segments, &dataSegment{ + offset: offset, + data: data[:segmentEnd], + }) + data = data[zeroEnd:] + offset += zeroEnd + } + } + + writeUleb128(ctxt.Out, uint64(len(segments))) // number of data entries + for _, seg := range segments { writeUleb128(ctxt.Out, 0) // memidx - writeI32Const(ctxt.Out, int32(sec.Vaddr)) + writeI32Const(ctxt.Out, seg.offset) ctxt.Out.WriteByte(0x0b) // end - writeUleb128(ctxt.Out, uint64(sec.Length)) - ld.Datblk(ctxt, int64(sec.Vaddr), int64(sec.Length)) + writeUleb128(ctxt.Out, uint64(len(seg.data))) + ctxt.Out.Write(seg.data) } writeSecSize(ctxt, sizeOffset) diff --git a/src/cmd/link/internal/wasm/obj.go b/src/cmd/link/internal/wasm/obj.go index 55f34e335b..f8090a3551 100644 --- a/src/cmd/link/internal/wasm/obj.go +++ b/src/cmd/link/internal/wasm/obj.go @@ -18,6 +18,7 @@ func Init() (*sys.Arch, ld.Arch) { Archinit: archinit, AssignAddress: assignAddress, Asmb: asmb, + Asmb2: asmb2, Gentext: gentext, } diff --git a/src/cmd/link/internal/x86/asm.go b/src/cmd/link/internal/x86/asm.go index 1744ab4d99..427ccaf629 100644 --- a/src/cmd/link/internal/x86/asm.go +++ b/src/cmd/link/internal/x86/asm.go @@ -172,13 +172,13 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { switch r.Type { default: - if r.Type >= 256 { + if r.Type >= objabi.ElfRelocOffset { ld.Errorf(s, "unexpected relocation type %d (%s)", r.Type, sym.RelocName(ctxt.Arch, r.Type)) return false } // Handle relocations found in ELF object files. - case 256 + objabi.RelocType(elf.R_386_PC32): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_386_PC32): if targ.Type == sym.SDYNIMPORT { ld.Errorf(s, "unexpected R_386_PC32 relocation for dynamic symbol %s", targ.Name) } @@ -191,7 +191,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { r.Add += 4 return true - case 256 + objabi.RelocType(elf.R_386_PLT32): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_386_PLT32): r.Type = objabi.R_PCREL r.Add += 4 if targ.Type == sym.SDYNIMPORT { @@ -202,7 +202,8 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { return true - case 256 + objabi.RelocType(elf.R_386_GOT32), 256 + objabi.RelocType(elf.R_386_GOT32X): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_386_GOT32), + objabi.ElfRelocOffset + objabi.RelocType(elf.R_386_GOT32X): if targ.Type != sym.SDYNIMPORT { // have symbol if r.Off >= 2 && s.P[r.Off-2] == 0x8b { @@ -233,31 +234,31 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { r.Add += int64(targ.Got()) return true - case 256 + objabi.RelocType(elf.R_386_GOTOFF): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_386_GOTOFF): r.Type = objabi.R_GOTOFF return true - case 256 + objabi.RelocType(elf.R_386_GOTPC): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_386_GOTPC): r.Type = objabi.R_PCREL r.Sym = ctxt.Syms.Lookup(".got", 0) r.Add += 4 return true - case 256 + objabi.RelocType(elf.R_386_32): + case objabi.ElfRelocOffset + objabi.RelocType(elf.R_386_32): if targ.Type == sym.SDYNIMPORT { ld.Errorf(s, "unexpected R_386_32 relocation for dynamic symbol %s", targ.Name) } r.Type = objabi.R_ADDR return true - case 512 + ld.MACHO_GENERIC_RELOC_VANILLA*2 + 0: + case objabi.MachoRelocOffset + ld.MACHO_GENERIC_RELOC_VANILLA*2 + 0: r.Type = objabi.R_ADDR if targ.Type == sym.SDYNIMPORT { ld.Errorf(s, "unexpected reloc for dynamic symbol %s", targ.Name) } return true - case 512 + ld.MACHO_GENERIC_RELOC_VANILLA*2 + 1: + case objabi.MachoRelocOffset + ld.MACHO_GENERIC_RELOC_VANILLA*2 + 1: if targ.Type == sym.SDYNIMPORT { addpltsym(ctxt, targ) r.Sym = ctxt.Syms.Lookup(".plt", 0) @@ -269,7 +270,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { r.Type = objabi.R_PCREL return true - case 512 + ld.MACHO_FAKE_GOTPCREL: + case objabi.MachoRelocOffset + ld.MACHO_FAKE_GOTPCREL: if targ.Type != sym.SDYNIMPORT { // have symbol // turn MOVL of GOT entry into LEAL of symbol itself @@ -342,7 +343,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool { s.Value = got.Size got.AddUint32(ctxt.Arch, 0) ctxt.Syms.Lookup(".linkedit.got", 0).AddUint32(ctxt.Arch, uint32(targ.Dynid)) - r.Type = 256 // ignore during relocsym + r.Type = objabi.ElfRelocOffset // ignore during relocsym return true } } @@ -661,7 +662,9 @@ func asmb(ctxt *ld.Link) { ctxt.Out.SeekSet(int64(ld.Segdwarf.Fileoff)) ld.Dwarfblk(ctxt, int64(ld.Segdwarf.Vaddr), int64(ld.Segdwarf.Filelen)) +} +func asmb2(ctxt *ld.Link) { machlink := uint32(0) if ctxt.HeadType == objabi.Hdarwin { machlink = uint32(ld.Domacholink(ctxt)) diff --git a/src/cmd/link/internal/x86/obj.go b/src/cmd/link/internal/x86/obj.go index 6a744dc04e..f1fad20081 100644 --- a/src/cmd/link/internal/x86/obj.go +++ b/src/cmd/link/internal/x86/obj.go @@ -34,7 +34,6 @@ import ( "cmd/internal/objabi" "cmd/internal/sys" "cmd/link/internal/ld" - "fmt" ) func Init() (*sys.Arch, ld.Arch) { @@ -52,6 +51,7 @@ func Init() (*sys.Arch, ld.Arch) { Archreloc: archreloc, Archrelocvariant: archrelocvariant, Asmb: asmb, + Asmb2: asmb2, Elfreloc1: elfreloc1, Elfsetupplt: elfsetupplt, Gentext: gentext, @@ -79,9 +79,6 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 4096 + int64(ld.HEADR) } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 4096 } @@ -91,9 +88,6 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 4096 + int64(ld.HEADR) } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 4096 } @@ -108,9 +102,6 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 0x08048000 + int64(ld.HEADR) } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 4096 } @@ -122,19 +113,12 @@ func archinit(ctxt *ld.Link) { if *ld.FlagTextAddr == -1 { *ld.FlagTextAddr = 0x20000 } - if *ld.FlagDataAddr == -1 { - *ld.FlagDataAddr = 0 - } if *ld.FlagRound == -1 { *ld.FlagRound = 0x10000 } case objabi.Hwindows: /* PE executable */ - // ld.HEADR, ld.FlagTextAddr, ld.FlagDataAddr and ld.FlagRound are set in ld.Peinit + // ld.HEADR, ld.FlagTextAddr, ld.FlagRound are set in ld.Peinit return } - - if *ld.FlagDataAddr != 0 && *ld.FlagRound != 0 { - fmt.Printf("warning: -D0x%x is ignored because of -R0x%x\n", uint64(*ld.FlagDataAddr), uint32(*ld.FlagRound)) - } } diff --git a/src/cmd/link/link_test.go b/src/cmd/link/link_test.go index 5200c3a6f0..a783bddc50 100644 --- a/src/cmd/link/link_test.go +++ b/src/cmd/link/link_test.go @@ -1,34 +1,26 @@ package main import ( + "debug/macho" "internal/testenv" "io/ioutil" "os" "os/exec" "path/filepath" "regexp" + "runtime" "strings" "testing" ) var AuthorPaidByTheColumnInch struct { - fog int ` - London. Michaelmas term lately over, and the Lord Chancellor sitting in Lincoln’s Inn Hall. Implacable November weather. As much mud in the streets as if the waters had but newly retired from the face of the earth, and it would not be wonderful to meet a Megalosaurus, forty feet long or so, waddling like an elephantine lizard up Holborn Hill. Smoke lowering down from chimney-pots, making a soft black drizzle, with flakes of soot in it as big as full-grown snowflakes—gone into mourning, one might imagine, for the death of the sun. Dogs, undistinguishable in mire. Horses, scarcely better; splashed to their very blinkers. Foot passengers, jostling one another’s umbrellas in a general infection of ill temper, and losing their foot-hold at street-corners, where tens of thousands of other foot passengers have been slipping and sliding since the day broke (if this day ever broke), adding new deposits to the crust upon crust of mud, sticking at those points tenaciously to the pavement, and accumulating at compound interest. + fog int `text:"London. Michaelmas term lately over, and the Lord Chancellor sitting in Lincoln’s Inn Hall. Implacable November weather. As much mud in the streets as if the waters had but newly retired from the face of the earth, and it would not be wonderful to meet a Megalosaurus, forty feet long or so, waddling like an elephantine lizard up Holborn Hill. Smoke lowering down from chimney-pots, making a soft black drizzle, with flakes of soot in it as big as full-grown snowflakes—gone into mourning, one might imagine, for the death of the sun. Dogs, undistinguishable in mire. Horses, scarcely better; splashed to their very blinkers. Foot passengers, jostling one another’s umbrellas in a general infection of ill temper, and losing their foot-hold at street-corners, where tens of thousands of other foot passengers have been slipping and sliding since the day broke (if this day ever broke), adding new deposits to the crust upon crust of mud, sticking at those points tenaciously to the pavement, and accumulating at compound interest. Fog everywhere. Fog up the river, where it flows among green aits and meadows; fog down the river, where it rolls defiled among the tiers of shipping and the waterside pollutions of a great (and dirty) city. Fog on the Essex marshes, fog on the Kentish heights. Fog creeping into the cabooses of collier-brigs; fog lying out on the yards and hovering in the rigging of great ships; fog drooping on the gunwales of barges and small boats. Fog in the eyes and throats of ancient Greenwich pensioners, wheezing by the firesides of their wards; fog in the stem and bowl of the afternoon pipe of the wrathful skipper, down in his close cabin; fog cruelly pinching the toes and fingers of his shivering little ‘prentice boy on deck. Chance people on the bridges peeping over the parapets into a nether sky of fog, with fog all round them, as if they were up in a balloon and hanging in the misty clouds. Gas looming through the fog in divers places in the streets, much as the sun may, from the spongey fields, be seen to loom by husbandman and ploughboy. Most of the shops lighted two hours before their time—as the gas seems to know, for it has a haggard and unwilling look. The raw afternoon is rawest, and the dense fog is densest, and the muddy streets are muddiest near that leaden-headed old obstruction, appropriate ornament for the threshold of a leaden-headed old corporation, Temple Bar. And hard by Temple Bar, in Lincoln’s Inn Hall, at the very heart of the fog, sits the Lord High Chancellor in his High Court of Chancery."` - Fog everywhere. Fog up the river, where it flows among green aits and meadows; fog down the river, where it rolls defiled among the tiers of shipping and the waterside pollutions of a great (and dirty) city. Fog on the Essex marshes, fog on the Kentish heights. Fog creeping into the cabooses of collier-brigs; fog lying out on the yards and hovering in the rigging of great ships; fog drooping on the gunwales of barges and small boats. Fog in the eyes and throats of ancient Greenwich pensioners, wheezing by the firesides of their wards; fog in the stem and bowl of the afternoon pipe of the wrathful skipper, down in his close cabin; fog cruelly pinching the toes and fingers of his shivering little ‘prentice boy on deck. Chance people on the bridges peeping over the parapets into a nether sky of fog, with fog all round them, as if they were up in a balloon and hanging in the misty clouds. + wind int `text:"It was grand to see how the wind awoke, and bent the trees, and drove the rain before it like a cloud of smoke; and to hear the solemn thunder, and to see the lightning; and while thinking with awe of the tremendous powers by which our little lives are encompassed, to consider how beneficent they are, and how upon the smallest flower and leaf there was already a freshness poured from all this seeming rage, which seemed to make creation new again."` - Gas looming through the fog in divers places in the streets, much as the sun may, from the spongey fields, be seen to loom by husbandman and ploughboy. Most of the shops lighted two hours before their time—as the gas seems to know, for it has a haggard and unwilling look. + jarndyce int `text:"Jarndyce and Jarndyce drones on. This scarecrow of a suit has, over the course of time, become so complicated, that no man alive knows what it means. The parties to it understand it least; but it has been observed that no two Chancery lawyers can talk about it for five minutes, without coming to a total disagreement as to all the premises. Innumerable children have been born into the cause; innumerable young people have married into it; innumerable old people have died out of it. Scores of persons have deliriously found themselves made parties in Jarndyce and Jarndyce, without knowing how or why; whole families have inherited legendary hatreds with the suit. The little plaintiff or defendant, who was promised a new rocking-horse when Jarndyce and Jarndyce should be settled, has grown up, possessed himself of a real horse, and trotted away into the other world. Fair wards of court have faded into mothers and grandmothers; a long procession of Chancellors has come in and gone out; the legion of bills in the suit have been transformed into mere bills of mortality; there are not three Jarndyces left upon the earth perhaps, since old Tom Jarndyce in despair blew his brains out at a coffee-house in Chancery Lane; but Jarndyce and Jarndyce still drags its dreary length before the Court, perennially hopeless."` - The raw afternoon is rawest, and the dense fog is densest, and the muddy streets are muddiest near that leaden-headed old obstruction, appropriate ornament for the threshold of a leaden-headed old corporation, Temple Bar. And hard by Temple Bar, in Lincoln’s Inn Hall, at the very heart of the fog, sits the Lord High Chancellor in his High Court of Chancery.` - - wind int ` - It was grand to see how the wind awoke, and bent the trees, and drove the rain before it like a cloud of smoke; and to hear the solemn thunder, and to see the lightning; and while thinking with awe of the tremendous powers by which our little lives are encompassed, to consider how beneficent they are, and how upon the smallest flower and leaf there was already a freshness poured from all this seeming rage, which seemed to make creation new again.` - - jarndyce int ` - Jarndyce and Jarndyce drones on. This scarecrow of a suit has, over the course of time, become so complicated, that no man alive knows what it means. The parties to it understand it least; but it has been observed that no two Chancery lawyers can talk about it for five minutes, without coming to a total disagreement as to all the premises. Innumerable children have been born into the cause; innumerable young people have married into it; innumerable old people have died out of it. Scores of persons have deliriously found themselves made parties in Jarndyce and Jarndyce, without knowing how or why; whole families have inherited legendary hatreds with the suit. The little plaintiff or defendant, who was promised a new rocking-horse when Jarndyce and Jarndyce should be settled, has grown up, possessed himself of a real horse, and trotted away into the other world. Fair wards of court have faded into mothers and grandmothers; a long procession of Chancellors has come in and gone out; the legion of bills in the suit have been transformed into mere bills of mortality; there are not three Jarndyces left upon the earth perhaps, since old Tom Jarndyce in despair blew his brains out at a coffee-house in Chancery Lane; but Jarndyce and Jarndyce still drags its dreary length before the Court, perennially hopeless.` - - principle int ` - The one great principle of the English law is, to make business for itself. There is no other principle distinctly, certainly, and consistently maintained through all its narrow turnings. Viewed by this light it becomes a coherent scheme, and not the monstrous maze the laity are apt to think it. Let them but once clearly perceive that its grand principle is to make business for itself at their expense, and surely they will cease to grumble.` + principle int `text:"The one great principle of the English law is, to make business for itself. There is no other principle distinctly, certainly, and consistently maintained through all its narrow turnings. Viewed by this light it becomes a coherent scheme, and not the monstrous maze the laity are apt to think it. Let them but once clearly perceive that its grand principle is to make business for itself at their expense, and surely they will cease to grumble."` } func TestLargeSymName(t *testing.T) { @@ -161,7 +153,8 @@ TEXT ·x(SB),0,$0 `) cmd := exec.Command(testenv.GoToolPath(t), "build") cmd.Dir = tmpdir - cmd.Env = append(os.Environ(), []string{"GOARCH=amd64", "GOOS=linux"}...) + cmd.Env = append(os.Environ(), + "GOARCH=amd64", "GOOS=linux", "GOPATH="+filepath.Join(tmpdir, "_gopath")) out, err := cmd.CombinedOutput() if err == nil { t.Fatalf("expected build to fail, but it succeeded") @@ -176,3 +169,146 @@ main.x: relocation target main.zero not defined t.Fatalf("want:\n%sgot:\n%s", want, got) } } + +func TestBuildFortvOS(t *testing.T) { + testenv.MustHaveCGO(t) + testenv.MustHaveGoBuild(t) + + // Only run this on darwin/amd64, where we can cross build for tvOS. + if runtime.GOARCH != "amd64" || runtime.GOOS != "darwin" { + t.Skip("skipping on non-darwin/amd64 platform") + } + if err := exec.Command("xcrun", "--help").Run(); err != nil { + t.Skipf("error running xcrun, required for iOS cross build: %v", err) + } + + sdkPath, err := exec.Command("xcrun", "--sdk", "appletvos", "--show-sdk-path").Output() + if err != nil { + t.Skip("failed to locate appletvos SDK, skipping") + } + CC := []string{ + "clang", + "-arch", + "arm64", + "-isysroot", strings.TrimSpace(string(sdkPath)), + "-mtvos-version-min=12.0", + "-fembed-bitcode", + "-framework", "CoreFoundation", + } + lib := filepath.Join("testdata", "lib.go") + tmpDir, err := ioutil.TempDir("", "go-link-TestBuildFortvOS") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(tmpDir) + + ar := filepath.Join(tmpDir, "lib.a") + cmd := exec.Command(testenv.GoToolPath(t), "build", "-buildmode=c-archive", "-o", ar, lib) + cmd.Env = append(os.Environ(), + "CGO_ENABLED=1", + "GOOS=darwin", + "GOARCH=arm64", + "CC="+strings.Join(CC, " "), + ) + if out, err := cmd.CombinedOutput(); err != nil { + t.Fatalf("%v: %v:\n%s", cmd.Args, err, out) + } + + link := exec.Command(CC[0], CC[1:]...) + link.Args = append(link.Args, ar, filepath.Join("testdata", "main.m")) + if out, err := link.CombinedOutput(); err != nil { + t.Fatalf("%v: %v:\n%s", link.Args, err, out) + } +} + +var testXFlagSrc = ` +package main +var X = "hello" +var Z = [99999]int{99998:12345} // make it large enough to be mmaped +func main() { println(X) } +` + +func TestXFlag(t *testing.T) { + testenv.MustHaveGoBuild(t) + + tmpdir, err := ioutil.TempDir("", "TestXFlag") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(tmpdir) + + src := filepath.Join(tmpdir, "main.go") + err = ioutil.WriteFile(src, []byte(testXFlagSrc), 0666) + if err != nil { + t.Fatal(err) + } + + cmd := exec.Command(testenv.GoToolPath(t), "build", "-ldflags=-X=main.X=meow", "-o", filepath.Join(tmpdir, "main"), src) + if out, err := cmd.CombinedOutput(); err != nil { + t.Errorf("%v: %v:\n%s", cmd.Args, err, out) + } +} + +var testMacOSVersionSrc = ` +package main +func main() { } +` + +func TestMacOSVersion(t *testing.T) { + testenv.MustHaveGoBuild(t) + + tmpdir, err := ioutil.TempDir("", "TestMacOSVersion") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(tmpdir) + + src := filepath.Join(tmpdir, "main.go") + err = ioutil.WriteFile(src, []byte(testMacOSVersionSrc), 0666) + if err != nil { + t.Fatal(err) + } + + exe := filepath.Join(tmpdir, "main") + cmd := exec.Command(testenv.GoToolPath(t), "build", "-ldflags=-linkmode=internal", "-o", exe, src) + cmd.Env = append(os.Environ(), + "CGO_ENABLED=0", + "GOOS=darwin", + "GOARCH=amd64", + ) + if out, err := cmd.CombinedOutput(); err != nil { + t.Fatalf("%v: %v:\n%s", cmd.Args, err, out) + } + exef, err := os.Open(exe) + if err != nil { + t.Fatal(err) + } + exem, err := macho.NewFile(exef) + if err != nil { + t.Fatal(err) + } + found := false + const LC_VERSION_MIN_MACOSX = 0x24 + checkMin := func(ver uint32) { + major, minor := (ver>>16)&0xff, (ver>>8)&0xff + if major != 10 || minor < 9 { + t.Errorf("LC_VERSION_MIN_MACOSX version %d.%d < 10.9", major, minor) + } + } + for _, cmd := range exem.Loads { + raw := cmd.Raw() + type_ := exem.ByteOrder.Uint32(raw) + if type_ != LC_VERSION_MIN_MACOSX { + continue + } + osVer := exem.ByteOrder.Uint32(raw[8:]) + checkMin(osVer) + sdkVer := exem.ByteOrder.Uint32(raw[12:]) + checkMin(sdkVer) + found = true + break + } + if !found { + t.Errorf("no LC_VERSION_MIN_MACOSX load command found") + } +} diff --git a/src/cmd/link/linkbig_test.go b/src/cmd/link/linkbig_test.go index 21208e86e4..78d2bc1afe 100644 --- a/src/cmd/link/linkbig_test.go +++ b/src/cmd/link/linkbig_test.go @@ -28,6 +28,9 @@ func TestLargeText(t *testing.T) { var w bytes.Buffer const FN = 4 tmpdir, err := ioutil.TempDir("", "bigtext") + if err != nil { + t.Fatalf("can't create temp directory: %v\n", err) + } defer os.RemoveAll(tmpdir) diff --git a/src/cmd/link/testdata/lib.go b/src/cmd/link/testdata/lib.go new file mode 100644 index 0000000000..bc6c699440 --- /dev/null +++ b/src/cmd/link/testdata/lib.go @@ -0,0 +1,8 @@ +package main + +import "C" + +//export GoFunc +func GoFunc() {} + +func main() {} diff --git a/src/cmd/link/testdata/main.m b/src/cmd/link/testdata/main.m new file mode 100644 index 0000000000..1c8175f6cc --- /dev/null +++ b/src/cmd/link/testdata/main.m @@ -0,0 +1,5 @@ +extern void GoFunc(); + +int main(int argc, char **argv) { + GoFunc(); +} diff --git a/src/cmd/nm/nm_cgo_test.go b/src/cmd/nm/nm_cgo_test.go index 1dfdf7f21a..475c57b4c2 100644 --- a/src/cmd/nm/nm_cgo_test.go +++ b/src/cmd/nm/nm_cgo_test.go @@ -13,6 +13,8 @@ import ( func canInternalLink() bool { switch runtime.GOOS { + case "aix": + return false case "dragonfly": return false case "linux": @@ -20,6 +22,11 @@ func canInternalLink() bool { case "arm64", "mips64", "mips64le", "mips", "mipsle", "ppc64", "ppc64le": return false } + case "openbsd": + switch runtime.GOARCH { + case "arm64": + return false + } } return true } diff --git a/src/cmd/nm/nm_test.go b/src/cmd/nm/nm_test.go index 8176ddd7f4..dcd9f36005 100644 --- a/src/cmd/nm/nm_test.go +++ b/src/cmd/nm/nm_test.go @@ -136,6 +136,11 @@ func testGoExec(t *testing.T, iscgo, isexternallinker bool) { "runtime.noptrdata": "D", } + if runtime.GOOS == "aix" && iscgo { + // pclntab is moved to .data section on AIX. + runtimeSyms["runtime.epclntab"] = "D" + } + out, err = exec.Command(testnmpath, exe).CombinedOutput() if err != nil { t.Fatalf("go tool nm: %v\n%s", err, string(out)) @@ -146,7 +151,10 @@ func testGoExec(t *testing.T, iscgo, isexternallinker bool) { // On AIX, .data and .bss addresses are changed by the loader. // Therefore, the values returned by the exec aren't the same // than the ones inside the symbol table. + // In case of cgo, .text symbols are also changed. switch code { + case "T", "t", "R", "r": + return iscgo case "D", "d", "B", "b": return true } @@ -258,15 +266,18 @@ func testGoLib(t *testing.T, iscgo bool) { Found bool } var syms = []symType{ - {"B", "%22%22.Testdata", false, false}, - {"T", "%22%22.Testfunc", false, false}, + {"B", "mylib.Testdata", false, false}, + {"T", "mylib.Testfunc", false, false}, } if iscgo { - syms = append(syms, symType{"B", "%22%22.TestCgodata", false, false}) - syms = append(syms, symType{"T", "%22%22.TestCgofunc", false, false}) + syms = append(syms, symType{"B", "mylib.TestCgodata", false, false}) + syms = append(syms, symType{"T", "mylib.TestCgofunc", false, false}) if runtime.GOOS == "darwin" || (runtime.GOOS == "windows" && runtime.GOARCH == "386") { syms = append(syms, symType{"D", "_cgodata", true, false}) syms = append(syms, symType{"T", "_cgofunc", true, false}) + } else if runtime.GOOS == "aix" { + syms = append(syms, symType{"D", "cgodata", true, false}) + syms = append(syms, symType{"T", ".cgofunc", true, false}) } else { syms = append(syms, symType{"D", "cgodata", true, false}) syms = append(syms, symType{"T", "cgofunc", true, false}) diff --git a/src/cmd/objdump/objdump_test.go b/src/cmd/objdump/objdump_test.go index a2ca329609..b24371ddea 100644 --- a/src/cmd/objdump/objdump_test.go +++ b/src/cmd/objdump/objdump_test.go @@ -5,6 +5,7 @@ package main import ( + "crypto/md5" "flag" "fmt" "go/build" @@ -24,6 +25,7 @@ func TestMain(m *testing.M) { if !testenv.HasGoBuild() { return } + var exitcode int if err := buildObjdump(); err == nil { exitcode = m.Run() @@ -86,6 +88,7 @@ var target = flag.String("target", "", "test disassembly of `goos/goarch` binary // can handle that one. func testDisasm(t *testing.T, printCode bool, flags ...string) { + t.Parallel() goarch := runtime.GOARCH if *target != "" { f := strings.Split(*target, "/") @@ -99,7 +102,8 @@ func testDisasm(t *testing.T, printCode bool, flags ...string) { goarch = f[1] } - hello := filepath.Join(tmp, "hello.exe") + hash := md5.Sum([]byte(fmt.Sprintf("%v-%v", flags, printCode))) + hello := filepath.Join(tmp, fmt.Sprintf("hello-%x.exe", hash)) args := []string{"build", "-o", hello} args = append(args, flags...) args = append(args, "testdata/fmthello.go") @@ -193,10 +197,6 @@ func TestDisasmExtld(t *testing.T) { case "s390x": t.Skipf("skipping on %s, issue 15255", runtime.GOARCH) } - // TODO(jsing): Reenable once openbsd/arm has external linking support. - if runtime.GOOS == "openbsd" && runtime.GOARCH == "arm" { - t.Skip("skipping on openbsd/arm, no support for external linking, issue 10619") - } if !build.Default.CgoEnabled { t.Skip("skipping because cgo is not enabled") } diff --git a/src/cmd/trace/pprof.go b/src/cmd/trace/pprof.go index 3389d2799b..a31d71b013 100644 --- a/src/cmd/trace/pprof.go +++ b/src/cmd/trace/pprof.go @@ -358,7 +358,7 @@ func buildProfile(prof map[uint64]Record) *profile.Profile { ID: uint64(len(p.Location) + 1), Address: frame.PC, Line: []profile.Line{ - profile.Line{ + { Function: fn, Line: int64(frame.Line), }, diff --git a/src/cmd/vendor/README b/src/cmd/vendor/README deleted file mode 100644 index 7eb97a1b9b..0000000000 --- a/src/cmd/vendor/README +++ /dev/null @@ -1,25 +0,0 @@ -How to update the vendored packages: - -Assuming the govendor tool is available -run the govendor tool from src/cmd directory - - $ go get -u github.com/kardianos/govendor - -To update packages used by cmd/pprof: - - $ cd $GOROOT/src/cmd - $ GOPATH=$GOROOT govendor fetch github.com/google/pprof/... - -To update packages used by internal/objfile/*: - - $ GOPATH=$GOROOT govendor fetch golang.org/x/arch/... - -GOPATH=$GOROOT in the above commands is a hack to -make govendor work and will create the .cache folder in -$GOROOT as a side-effect. Please make sure to delete -the directory and not to include the directory in the -commit by accident. - -The vendored copy of golang.org/x/tools is maintained by -running the update-xtools.sh script in this directory, -not by govendor. \ No newline at end of file diff --git a/src/cmd/vendor/github.com/google/pprof/AUTHORS b/src/cmd/vendor/github.com/google/pprof/AUTHORS new file mode 100644 index 0000000000..fd736cb1cf --- /dev/null +++ b/src/cmd/vendor/github.com/google/pprof/AUTHORS @@ -0,0 +1,7 @@ +# This is the official list of pprof authors for copyright purposes. +# This file is distinct from the CONTRIBUTORS files. +# See the latter for an explanation. +# Names should be added to this file as: +# Name or Organization +# The email address is not required for organizations. +Google Inc. \ No newline at end of file diff --git a/src/cmd/vendor/github.com/google/pprof/CONTRIBUTORS b/src/cmd/vendor/github.com/google/pprof/CONTRIBUTORS new file mode 100644 index 0000000000..0ef5e2f240 --- /dev/null +++ b/src/cmd/vendor/github.com/google/pprof/CONTRIBUTORS @@ -0,0 +1,15 @@ +# People who have agreed to one of the CLAs and can contribute patches. +# The AUTHORS file lists the copyright holders; this file +# lists people. For example, Google employees are listed here +# but not in AUTHORS, because Google holds the copyright. +# +# https://developers.google.com/open-source/cla/individual +# https://developers.google.com/open-source/cla/corporate +# +# Names should be added to this file as: +# Name +Raul Silvera +Tipp Moseley +Hyoun Kyu Cho +Martin Spier +Taco de Wolff diff --git a/src/cmd/vendor/github.com/google/pprof/internal/binutils/binutils_test.go b/src/cmd/vendor/github.com/google/pprof/internal/binutils/binutils_test.go deleted file mode 100644 index 17d4225a87..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/binutils/binutils_test.go +++ /dev/null @@ -1,392 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package binutils - -import ( - "bytes" - "fmt" - "math" - "path/filepath" - "reflect" - "regexp" - "runtime" - "strings" - "testing" - - "github.com/google/pprof/internal/plugin" -) - -var testAddrMap = map[int]string{ - 1000: "_Z3fooid.clone2", - 2000: "_ZNSaIiEC1Ev.clone18", - 3000: "_ZNSt6vectorIS_IS_IiSaIiEESaIS1_EESaIS3_EEixEm", -} - -func functionName(level int) (name string) { - if name = testAddrMap[level]; name != "" { - return name - } - return fmt.Sprintf("fun%d", level) -} - -func TestAddr2Liner(t *testing.T) { - const offset = 0x500 - - a := addr2Liner{rw: &mockAddr2liner{}, base: offset} - for i := 1; i < 8; i++ { - addr := i*0x1000 + offset - s, err := a.addrInfo(uint64(addr)) - if err != nil { - t.Fatalf("addrInfo(%#x): %v", addr, err) - } - if len(s) != i { - t.Fatalf("addrInfo(%#x): got len==%d, want %d", addr, len(s), i) - } - for l, f := range s { - level := (len(s) - l) * 1000 - want := plugin.Frame{Func: functionName(level), File: fmt.Sprintf("file%d", level), Line: level} - - if f != want { - t.Errorf("AddrInfo(%#x)[%d]: = %+v, want %+v", addr, l, f, want) - } - } - } - s, err := a.addrInfo(0xFFFF) - if err != nil { - t.Fatalf("addrInfo(0xFFFF): %v", err) - } - if len(s) != 0 { - t.Fatalf("AddrInfo(0xFFFF): got len==%d, want 0", len(s)) - } - a.rw.close() -} - -type mockAddr2liner struct { - output []string -} - -func (a *mockAddr2liner) write(s string) error { - var lines []string - switch s { - case "1000": - lines = []string{"_Z3fooid.clone2", "file1000:1000"} - case "2000": - lines = []string{"_ZNSaIiEC1Ev.clone18", "file2000:2000", "_Z3fooid.clone2", "file1000:1000"} - case "3000": - lines = []string{"_ZNSt6vectorIS_IS_IiSaIiEESaIS1_EESaIS3_EEixEm", "file3000:3000", "_ZNSaIiEC1Ev.clone18", "file2000:2000", "_Z3fooid.clone2", "file1000:1000"} - case "4000": - lines = []string{"fun4000", "file4000:4000", "_ZNSt6vectorIS_IS_IiSaIiEESaIS1_EESaIS3_EEixEm", "file3000:3000", "_ZNSaIiEC1Ev.clone18", "file2000:2000", "_Z3fooid.clone2", "file1000:1000"} - case "5000": - lines = []string{"fun5000", "file5000:5000", "fun4000", "file4000:4000", "_ZNSt6vectorIS_IS_IiSaIiEESaIS1_EESaIS3_EEixEm", "file3000:3000", "_ZNSaIiEC1Ev.clone18", "file2000:2000", "_Z3fooid.clone2", "file1000:1000"} - case "6000": - lines = []string{"fun6000", "file6000:6000", "fun5000", "file5000:5000", "fun4000", "file4000:4000", "_ZNSt6vectorIS_IS_IiSaIiEESaIS1_EESaIS3_EEixEm", "file3000:3000", "_ZNSaIiEC1Ev.clone18", "file2000:2000", "_Z3fooid.clone2", "file1000:1000"} - case "7000": - lines = []string{"fun7000", "file7000:7000", "fun6000", "file6000:6000", "fun5000", "file5000:5000", "fun4000", "file4000:4000", "_ZNSt6vectorIS_IS_IiSaIiEESaIS1_EESaIS3_EEixEm", "file3000:3000", "_ZNSaIiEC1Ev.clone18", "file2000:2000", "_Z3fooid.clone2", "file1000:1000"} - case "8000": - lines = []string{"fun8000", "file8000:8000", "fun7000", "file7000:7000", "fun6000", "file6000:6000", "fun5000", "file5000:5000", "fun4000", "file4000:4000", "_ZNSt6vectorIS_IS_IiSaIiEESaIS1_EESaIS3_EEixEm", "file3000:3000", "_ZNSaIiEC1Ev.clone18", "file2000:2000", "_Z3fooid.clone2", "file1000:1000"} - case "9000": - lines = []string{"fun9000", "file9000:9000", "fun8000", "file8000:8000", "fun7000", "file7000:7000", "fun6000", "file6000:6000", "fun5000", "file5000:5000", "fun4000", "file4000:4000", "_ZNSt6vectorIS_IS_IiSaIiEESaIS1_EESaIS3_EEixEm", "file3000:3000", "_ZNSaIiEC1Ev.clone18", "file2000:2000", "_Z3fooid.clone2", "file1000:1000"} - default: - lines = []string{"??", "??:0"} - } - a.output = append(a.output, "0x"+s) - a.output = append(a.output, lines...) - return nil -} - -func (a *mockAddr2liner) readLine() (string, error) { - if len(a.output) == 0 { - return "", fmt.Errorf("end of file") - } - next := a.output[0] - a.output = a.output[1:] - return next, nil -} - -func (a *mockAddr2liner) close() { -} - -func TestAddr2LinerLookup(t *testing.T) { - const oddSizedData = ` -00001000 T 0x1000 -00002000 T 0x2000 -00003000 T 0x3000 -` - const evenSizedData = ` -0000000000001000 T 0x1000 -0000000000002000 T 0x2000 -0000000000003000 T 0x3000 -0000000000004000 T 0x4000 -` - for _, d := range []string{oddSizedData, evenSizedData} { - a, err := parseAddr2LinerNM(0, bytes.NewBufferString(d)) - if err != nil { - t.Errorf("nm parse error: %v", err) - continue - } - for address, want := range map[uint64]string{ - 0x1000: "0x1000", - 0x1001: "0x1000", - 0x1FFF: "0x1000", - 0x2000: "0x2000", - 0x2001: "0x2000", - } { - if got, _ := a.addrInfo(address); !checkAddress(got, address, want) { - t.Errorf("%x: got %v, want %s", address, got, want) - } - } - for _, unknown := range []uint64{0x0fff, 0x4001} { - if got, _ := a.addrInfo(unknown); got != nil { - t.Errorf("%x: got %v, want nil", unknown, got) - } - } - } -} - -func checkAddress(got []plugin.Frame, address uint64, want string) bool { - if len(got) != 1 { - return false - } - return got[0].Func == want -} - -func TestSetTools(t *testing.T) { - // Test that multiple calls work. - bu := &Binutils{} - bu.SetTools("") - bu.SetTools("") -} - -func TestSetFastSymbolization(t *testing.T) { - // Test that multiple calls work. - bu := &Binutils{} - bu.SetFastSymbolization(true) - bu.SetFastSymbolization(false) -} - -func skipUnlessLinuxAmd64(t *testing.T) { - if runtime.GOOS != "linux" || runtime.GOARCH != "amd64" { - t.Skip("This test only works on x86-64 Linux") - } -} - -func skipUnlessDarwinAmd64(t *testing.T) { - if runtime.GOOS != "darwin" || runtime.GOARCH != "amd64" { - t.Skip("This test only works on x86-64 Mac") - } -} - -func TestDisasm(t *testing.T) { - skipUnlessLinuxAmd64(t) - bu := &Binutils{} - insts, err := bu.Disasm(filepath.Join("testdata", "exe_linux_64"), 0, math.MaxUint64) - if err != nil { - t.Fatalf("Disasm: unexpected error %v", err) - } - mainCount := 0 - for _, x := range insts { - if x.Function == "main" { - mainCount++ - } - } - if mainCount == 0 { - t.Error("Disasm: found no main instructions") - } -} - -func findSymbol(syms []*plugin.Sym, name string) *plugin.Sym { - for _, s := range syms { - for _, n := range s.Name { - if n == name { - return s - } - } - } - return nil -} - -func TestObjFile(t *testing.T) { - skipUnlessLinuxAmd64(t) - for _, tc := range []struct { - desc string - start, limit, offset uint64 - addr uint64 - }{ - {"fake mapping", 0, math.MaxUint64, 0, 0x40052d}, - {"fixed load address", 0x400000, 0x4006fc, 0, 0x40052d}, - // True user-mode ASLR binaries are ET_DYN rather than ET_EXEC so this case - // is a bit artificial except that it approximates the - // vmlinux-with-kernel-ASLR case where the binary *is* ET_EXEC. - {"simulated ASLR address", 0x500000, 0x5006fc, 0, 0x50052d}, - } { - t.Run(tc.desc, func(t *testing.T) { - bu := &Binutils{} - f, err := bu.Open(filepath.Join("testdata", "exe_linux_64"), tc.start, tc.limit, tc.offset) - if err != nil { - t.Fatalf("Open: unexpected error %v", err) - } - defer f.Close() - syms, err := f.Symbols(regexp.MustCompile("main"), 0) - if err != nil { - t.Fatalf("Symbols: unexpected error %v", err) - } - - m := findSymbol(syms, "main") - if m == nil { - t.Fatalf("Symbols: did not find main") - } - for _, addr := range []uint64{m.Start + f.Base(), tc.addr} { - gotFrames, err := f.SourceLine(addr) - if err != nil { - t.Fatalf("SourceLine: unexpected error %v", err) - } - wantFrames := []plugin.Frame{ - {Func: "main", File: "/tmp/hello.c", Line: 3}, - } - if !reflect.DeepEqual(gotFrames, wantFrames) { - t.Fatalf("SourceLine for main: got %v; want %v\n", gotFrames, wantFrames) - } - } - }) - } -} - -func TestMachoFiles(t *testing.T) { - skipUnlessDarwinAmd64(t) - - // Load `file`, pretending it was mapped at `start`. Then get the symbol - // table. Check that it contains the symbol `sym` and that the address - // `addr` gives the `expected` stack trace. - for _, tc := range []struct { - desc string - file string - start, limit, offset uint64 - addr uint64 - sym string - expected []plugin.Frame - }{ - {"normal mapping", "exe_mac_64", 0x100000000, math.MaxUint64, 0, - 0x100000f50, "_main", - []plugin.Frame{ - {Func: "main", File: "/tmp/hello.c", Line: 3}, - }}, - {"other mapping", "exe_mac_64", 0x200000000, math.MaxUint64, 0, - 0x200000f50, "_main", - []plugin.Frame{ - {Func: "main", File: "/tmp/hello.c", Line: 3}, - }}, - {"lib normal mapping", "lib_mac_64", 0, math.MaxUint64, 0, - 0xfa0, "_bar", - []plugin.Frame{ - {Func: "bar", File: "/tmp/lib.c", Line: 5}, - }}, - } { - t.Run(tc.desc, func(t *testing.T) { - bu := &Binutils{} - f, err := bu.Open(filepath.Join("testdata", tc.file), tc.start, tc.limit, tc.offset) - if err != nil { - t.Fatalf("Open: unexpected error %v", err) - } - t.Logf("binutils: %v", bu) - if runtime.GOOS == "darwin" && !bu.rep.addr2lineFound && !bu.rep.llvmSymbolizerFound { - // On OSX user needs to install gaddr2line or llvm-symbolizer with - // Homebrew, skip the test when the environment doesn't have it - // installed. - t.Skip("couldn't find addr2line or gaddr2line") - } - defer f.Close() - syms, err := f.Symbols(nil, 0) - if err != nil { - t.Fatalf("Symbols: unexpected error %v", err) - } - - m := findSymbol(syms, tc.sym) - if m == nil { - t.Fatalf("Symbols: could not find symbol %v", tc.sym) - } - gotFrames, err := f.SourceLine(tc.addr) - if err != nil { - t.Fatalf("SourceLine: unexpected error %v", err) - } - if !reflect.DeepEqual(gotFrames, tc.expected) { - t.Fatalf("SourceLine for main: got %v; want %v\n", gotFrames, tc.expected) - } - }) - } -} - -func TestLLVMSymbolizer(t *testing.T) { - if runtime.GOOS != "linux" { - t.Skip("testtdata/llvm-symbolizer has only been tested on linux") - } - - cmd := filepath.Join("testdata", "fake-llvm-symbolizer") - symbolizer, err := newLLVMSymbolizer(cmd, "foo", 0) - if err != nil { - t.Fatalf("newLLVMSymbolizer: unexpected error %v", err) - } - defer symbolizer.rw.close() - - for _, c := range []struct { - addr uint64 - frames []plugin.Frame - }{ - {0x10, []plugin.Frame{ - {Func: "Inlined_0x10", File: "foo.h", Line: 0}, - {Func: "Func_0x10", File: "foo.c", Line: 2}, - }}, - {0x20, []plugin.Frame{ - {Func: "Inlined_0x20", File: "foo.h", Line: 0}, - {Func: "Func_0x20", File: "foo.c", Line: 2}, - }}, - } { - frames, err := symbolizer.addrInfo(c.addr) - if err != nil { - t.Errorf("LLVM: unexpected error %v", err) - continue - } - if !reflect.DeepEqual(frames, c.frames) { - t.Errorf("LLVM: expect %v; got %v\n", c.frames, frames) - } - } -} - -func TestOpenMalformedELF(t *testing.T) { - // Test that opening a malformed ELF file will report an error containing - // the word "ELF". - bu := &Binutils{} - _, err := bu.Open(filepath.Join("testdata", "malformed_elf"), 0, 0, 0) - if err == nil { - t.Fatalf("Open: unexpected success") - } - - if !strings.Contains(err.Error(), "ELF") { - t.Errorf("Open: got %v, want error containing 'ELF'", err) - } -} - -func TestOpenMalformedMachO(t *testing.T) { - // Test that opening a malformed Mach-O file will report an error containing - // the word "Mach-O". - bu := &Binutils{} - _, err := bu.Open(filepath.Join("testdata", "malformed_macho"), 0, 0, 0) - if err == nil { - t.Fatalf("Open: unexpected success") - } - - if !strings.Contains(err.Error(), "Mach-O") { - t.Errorf("Open: got %v, want error containing 'Mach-O'", err) - } -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/binutils/disasm_test.go b/src/cmd/vendor/github.com/google/pprof/internal/binutils/disasm_test.go deleted file mode 100644 index 3563198f48..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/binutils/disasm_test.go +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package binutils - -import ( - "fmt" - "regexp" - "testing" - - "github.com/google/pprof/internal/plugin" -) - -// TestFindSymbols tests the FindSymbols routine using a hardcoded nm output. -func TestFindSymbols(t *testing.T) { - type testcase struct { - query, syms string - want []plugin.Sym - } - - testsyms := `0000000000001000 t lineA001 -0000000000001000 t lineA002 -0000000000001000 t line1000 -0000000000002000 t line200A -0000000000002000 t line2000 -0000000000002000 t line200B -0000000000003000 t line3000 -0000000000003000 t _ZNK4DumbclEPKc -0000000000003000 t lineB00C -0000000000003000 t line300D -0000000000004000 t _the_end - ` - testcases := []testcase{ - { - "line.*[AC]", - testsyms, - []plugin.Sym{ - {Name: []string{"lineA001"}, File: "object.o", Start: 0x1000, End: 0x1FFF}, - {Name: []string{"line200A"}, File: "object.o", Start: 0x2000, End: 0x2FFF}, - {Name: []string{"lineB00C"}, File: "object.o", Start: 0x3000, End: 0x3FFF}, - }, - }, - { - "Dumb::operator", - testsyms, - []plugin.Sym{ - {Name: []string{"Dumb::operator()(char const*) const"}, File: "object.o", Start: 0x3000, End: 0x3FFF}, - }, - }, - } - - for _, tc := range testcases { - syms, err := findSymbols([]byte(tc.syms), "object.o", regexp.MustCompile(tc.query), 0) - if err != nil { - t.Fatalf("%q: findSymbols: %v", tc.query, err) - } - if err := checkSymbol(syms, tc.want); err != nil { - t.Errorf("%q: %v", tc.query, err) - } - } -} - -func checkSymbol(got []*plugin.Sym, want []plugin.Sym) error { - if len(got) != len(want) { - return fmt.Errorf("unexpected number of symbols %d (want %d)", len(got), len(want)) - } - - for i, g := range got { - w := want[i] - if len(g.Name) != len(w.Name) { - return fmt.Errorf("names, got %d, want %d", len(g.Name), len(w.Name)) - } - for n := range g.Name { - if g.Name[n] != w.Name[n] { - return fmt.Errorf("name %d, got %q, want %q", n, g.Name[n], w.Name[n]) - } - } - if g.File != w.File { - return fmt.Errorf("filename, got %q, want %q", g.File, w.File) - } - if g.Start != w.Start { - return fmt.Errorf("start address, got %#x, want %#x", g.Start, w.Start) - } - if g.End != w.End { - return fmt.Errorf("end address, got %#x, want %#x", g.End, w.End) - } - } - return nil -} - -// TestFunctionAssembly tests the FunctionAssembly routine by using a -// fake objdump script. -func TestFunctionAssembly(t *testing.T) { - type testcase struct { - s plugin.Sym - asm string - want []plugin.Inst - } - testcases := []testcase{ - { - plugin.Sym{Name: []string{"symbol1"}, Start: 0x1000, End: 0x1FFF}, - ` 1000: instruction one - 1001: instruction two - 1002: instruction three - 1003: instruction four -`, - []plugin.Inst{ - {Addr: 0x1000, Text: "instruction one"}, - {Addr: 0x1001, Text: "instruction two"}, - {Addr: 0x1002, Text: "instruction three"}, - {Addr: 0x1003, Text: "instruction four"}, - }, - }, - { - plugin.Sym{Name: []string{"symbol2"}, Start: 0x2000, End: 0x2FFF}, - ` 2000: instruction one - 2001: instruction two -`, - []plugin.Inst{ - {Addr: 0x2000, Text: "instruction one"}, - {Addr: 0x2001, Text: "instruction two"}, - }, - }, - } - - for _, tc := range testcases { - insts, err := disassemble([]byte(tc.asm)) - if err != nil { - t.Fatalf("FunctionAssembly: %v", err) - } - - if len(insts) != len(tc.want) { - t.Errorf("Unexpected number of assembly instructions %d (want %d)\n", len(insts), len(tc.want)) - } - for i := range insts { - if insts[i] != tc.want[i] { - t.Errorf("Expected symbol %v, got %v\n", tc.want[i], insts[i]) - } - } - } -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/build_mac.sh b/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/build_mac.sh deleted file mode 100755 index 5ec98f39b5..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/build_mac.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -x - -# This is a script that generates the test MacOS executables in this directory. -# It should be needed very rarely to run this script. It is mostly provided -# as a future reference on how the original binary set was created. - -set -o errexit - -cat </tmp/hello.cc -#include - -int main() { - printf("Hello, world!\n"); - return 0; -} -EOF - -cat </tmp/lib.c -int foo() { - return 1; -} - -int bar() { - return 2; -} -EOF - -cd $(dirname $0) -rm -rf exe_mac_64* lib_mac_64* -clang -g -o exe_mac_64 /tmp/hello.c -clang -g -o lib_mac_64 -dynamiclib /tmp/lib.c diff --git a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/exe_linux_64 b/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/exe_linux_64 deleted file mode 100755 index d86dc7cdfc..0000000000 Binary files a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/exe_linux_64 and /dev/null differ diff --git a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/exe_mac_64 b/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/exe_mac_64 deleted file mode 100755 index dba1ae1581..0000000000 Binary files a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/exe_mac_64 and /dev/null differ diff --git a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/exe_mac_64.dSYM/Contents/Info.plist b/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/exe_mac_64.dSYM/Contents/Info.plist deleted file mode 100644 index 41ce537f5d..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/exe_mac_64.dSYM/Contents/Info.plist +++ /dev/null @@ -1,20 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleIdentifier - com.apple.xcode.dsym.exe_mac_64 - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - dSYM - CFBundleSignature - ???? - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/exe_mac_64.dSYM/Contents/Resources/DWARF/exe_mac_64 b/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/exe_mac_64.dSYM/Contents/Resources/DWARF/exe_mac_64 deleted file mode 100644 index 2cb0e3bf31..0000000000 Binary files a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/exe_mac_64.dSYM/Contents/Resources/DWARF/exe_mac_64 and /dev/null differ diff --git a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/fake-llvm-symbolizer b/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/fake-llvm-symbolizer deleted file mode 100755 index 596713cb04..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/fake-llvm-symbolizer +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh -# -# Copyright 2014 Google Inc. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# Fake llvm-symbolizer to use in tests - -set -f -IFS=" " - -while read line; do - # line has form: - # filename 0xaddr - # Emit dummy output that matches llvm-symbolizer output format. - set -- $line - fname=$1 - addr=$2 - echo "Inlined_$addr" - echo "$fname.h" - echo "Func_$addr" - echo "$fname.c:2" - echo -done diff --git a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/lib_mac_64 b/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/lib_mac_64 deleted file mode 100755 index 933a3f6931..0000000000 Binary files a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/lib_mac_64 and /dev/null differ diff --git a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/lib_mac_64.dSYM/Contents/Info.plist b/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/lib_mac_64.dSYM/Contents/Info.plist deleted file mode 100644 index 409e4cf0c9..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/lib_mac_64.dSYM/Contents/Info.plist +++ /dev/null @@ -1,20 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleIdentifier - com.apple.xcode.dsym.lib_mac_64 - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - dSYM - CFBundleSignature - ???? - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/lib_mac_64.dSYM/Contents/Resources/DWARF/lib_mac_64 b/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/lib_mac_64.dSYM/Contents/Resources/DWARF/lib_mac_64 deleted file mode 100644 index e466c1342e..0000000000 Binary files a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/lib_mac_64.dSYM/Contents/Resources/DWARF/lib_mac_64 and /dev/null differ diff --git a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/malformed_elf b/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/malformed_elf deleted file mode 100644 index f0b503b0b6..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/malformed_elf +++ /dev/null @@ -1 +0,0 @@ -ELFÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/malformed_macho b/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/malformed_macho deleted file mode 100644 index b01ddf69a9..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/binutils/testdata/malformed_macho +++ /dev/null @@ -1 +0,0 @@ -Ïúíþÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/driver_focus.go b/src/cmd/vendor/github.com/google/pprof/internal/driver/driver_focus.go index b23ee81058..bea9cfaf98 100644 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/driver_focus.go +++ b/src/cmd/vendor/github.com/google/pprof/internal/driver/driver_focus.go @@ -25,7 +25,7 @@ import ( "github.com/google/pprof/profile" ) -var tagFilterRangeRx = regexp.MustCompile("([[:digit:]]+)([[:alpha:]]+)") +var tagFilterRangeRx = regexp.MustCompile("([+-]?[[:digit:]]+)([[:alpha:]]+)") // applyFocus filters samples based on the focus/ignore options func applyFocus(prof *profile.Profile, numLabelUnits map[string]string, v variables, ui plugin.UI) error { diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/driver_test.go b/src/cmd/vendor/github.com/google/pprof/internal/driver/driver_test.go deleted file mode 100644 index 90f89dc7bc..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/driver_test.go +++ /dev/null @@ -1,1606 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package driver - -import ( - "bytes" - "flag" - "fmt" - "io/ioutil" - "net" - _ "net/http/pprof" - "os" - "reflect" - "regexp" - "runtime" - "strconv" - "strings" - "testing" - "time" - - "github.com/google/pprof/internal/plugin" - "github.com/google/pprof/internal/proftest" - "github.com/google/pprof/internal/symbolz" - "github.com/google/pprof/profile" -) - -var updateFlag = flag.Bool("update", false, "Update the golden files") - -func TestParse(t *testing.T) { - // Override weblist command to collect output in buffer - pprofCommands["weblist"].postProcess = nil - - // Our mockObjTool.Open will always return success, causing - // driver.locateBinaries to "find" the binaries below in a non-existent - // directory. As a workaround, point the search path to the fake - // directory containing out fake binaries. - savePath := os.Getenv("PPROF_BINARY_PATH") - os.Setenv("PPROF_BINARY_PATH", "/path/to") - defer os.Setenv("PPROF_BINARY_PATH", savePath) - testcase := []struct { - flags, source string - }{ - {"text,functions,flat", "cpu"}, - {"text,functions,noinlines,flat", "cpu"}, - {"text,filefunctions,noinlines,flat", "cpu"}, - {"text,addresses,noinlines,flat", "cpu"}, - {"tree,addresses,flat,nodecount=4", "cpusmall"}, - {"text,functions,flat,nodecount=5,call_tree", "unknown"}, - {"text,alloc_objects,flat", "heap_alloc"}, - {"text,files,flat", "heap"}, - {"text,files,flat,focus=[12]00,taghide=[X3]00", "heap"}, - {"text,inuse_objects,flat", "heap"}, - {"text,lines,cum,hide=line[X3]0", "cpu"}, - {"text,lines,cum,show=[12]00", "cpu"}, - {"text,lines,cum,hide=line[X3]0,focus=[12]00", "cpu"}, - {"topproto,lines,cum,hide=mangled[X3]0", "cpu"}, - {"topproto,lines", "cpu"}, - {"tree,lines,cum,focus=[24]00", "heap"}, - {"tree,relative_percentages,cum,focus=[24]00", "heap"}, - {"tree,lines,cum,show_from=line2", "cpu"}, - {"callgrind", "cpu"}, - {"callgrind,call_tree", "cpu"}, - {"callgrind", "heap"}, - {"dot,functions,flat", "cpu"}, - {"dot,functions,flat,call_tree", "cpu"}, - {"dot,lines,flat,focus=[12]00", "heap"}, - {"dot,unit=minimum", "heap_sizetags"}, - {"dot,addresses,flat,ignore=[X3]002,focus=[X1]000", "contention"}, - {"dot,files,cum", "contention"}, - {"comments,add_comment=some-comment", "cpu"}, - {"comments", "heap"}, - {"tags", "cpu"}, - {"tags,tagignore=tag[13],tagfocus=key[12]", "cpu"}, - {"tags", "heap"}, - {"tags,unit=bytes", "heap"}, - {"traces", "cpu"}, - {"traces", "heap_tags"}, - {"dot,alloc_space,flat,focus=[234]00", "heap_alloc"}, - {"dot,alloc_space,flat,tagshow=[2]00", "heap_alloc"}, - {"dot,alloc_space,flat,hide=line.*1?23?", "heap_alloc"}, - {"dot,inuse_space,flat,tagfocus=1mb:2gb", "heap"}, - {"dot,inuse_space,flat,tagfocus=30kb:,tagignore=1mb:2mb", "heap"}, - {"disasm=line[13],addresses,flat", "cpu"}, - {"peek=line.*01", "cpu"}, - {"weblist=line[13],addresses,flat", "cpu"}, - {"tags,tagfocus=400kb:", "heap_request"}, - {"dot", "longNameFuncs"}, - {"text", "longNameFuncs"}, - } - - baseVars := pprofVariables - defer func() { pprofVariables = baseVars }() - for _, tc := range testcase { - t.Run(tc.flags+":"+tc.source, func(t *testing.T) { - // Reset the pprof variables before processing - pprofVariables = baseVars.makeCopy() - - testUI := &proftest.TestUI{T: t, AllowRx: "Generating report in|Ignoring local file|expression matched no samples|Interpreted .* as range, not regexp"} - - f := baseFlags() - f.args = []string{tc.source} - - flags := strings.Split(tc.flags, ",") - - // Encode profile into a protobuf and decode it again. - protoTempFile, err := ioutil.TempFile("", "profile_proto") - if err != nil { - t.Errorf("cannot create tempfile: %v", err) - } - defer os.Remove(protoTempFile.Name()) - defer protoTempFile.Close() - f.strings["output"] = protoTempFile.Name() - - if flags[0] == "topproto" { - f.bools["proto"] = false - f.bools["topproto"] = true - f.bools["addresses"] = true - } - - // First pprof invocation to save the profile into a profile.proto. - // Pass in flag set hen setting defaults, because otherwise default - // transport will try to add flags to the default flag set. - o1 := setDefaults(&plugin.Options{Flagset: f}) - o1.Fetch = testFetcher{} - o1.Sym = testSymbolizer{} - o1.UI = testUI - if err := PProf(o1); err != nil { - t.Fatalf("%s %q: %v", tc.source, tc.flags, err) - } - // Reset the pprof variables after the proto invocation - pprofVariables = baseVars.makeCopy() - - // Read the profile from the encoded protobuf - outputTempFile, err := ioutil.TempFile("", "profile_output") - if err != nil { - t.Errorf("cannot create tempfile: %v", err) - } - defer os.Remove(outputTempFile.Name()) - defer outputTempFile.Close() - - f = baseFlags() - f.strings["output"] = outputTempFile.Name() - f.args = []string{protoTempFile.Name()} - - delete(f.bools, "proto") - addFlags(&f, flags) - solution := solutionFilename(tc.source, &f) - // Apply the flags for the second pprof run, and identify name of - // the file containing expected results - if flags[0] == "topproto" { - addFlags(&f, flags) - solution = solutionFilename(tc.source, &f) - delete(f.bools, "topproto") - f.bools["text"] = true - } - - // Second pprof invocation to read the profile from profile.proto - // and generate a report. - // Pass in flag set hen setting defaults, because otherwise default - // transport will try to add flags to the default flag set. - o2 := setDefaults(&plugin.Options{Flagset: f}) - o2.Sym = testSymbolizeDemangler{} - o2.Obj = new(mockObjTool) - o2.UI = testUI - - if err := PProf(o2); err != nil { - t.Errorf("%s: %v", tc.source, err) - } - b, err := ioutil.ReadFile(outputTempFile.Name()) - if err != nil { - t.Errorf("Failed to read profile %s: %v", outputTempFile.Name(), err) - } - - // Read data file with expected solution - solution = "testdata/" + solution - sbuf, err := ioutil.ReadFile(solution) - if err != nil { - t.Fatalf("reading solution file %s: %v", solution, err) - } - if runtime.GOOS == "windows" { - sbuf = bytes.Replace(sbuf, []byte("testdata/"), []byte("testdata\\"), -1) - sbuf = bytes.Replace(sbuf, []byte("/path/to/"), []byte("\\path\\to\\"), -1) - } - - if flags[0] == "svg" { - b = removeScripts(b) - sbuf = removeScripts(sbuf) - } - - if string(b) != string(sbuf) { - t.Errorf("diff %s %s", solution, tc.source) - d, err := proftest.Diff(sbuf, b) - if err != nil { - t.Fatalf("diff %s %v", solution, err) - } - t.Errorf("%s\n%s\n", solution, d) - if *updateFlag { - err := ioutil.WriteFile(solution, b, 0644) - if err != nil { - t.Errorf("failed to update the solution file %q: %v", solution, err) - } - } - } - }) - } -} - -// removeScripts removes pairs from its input -func removeScripts(in []byte) []byte { - beginMarker := []byte("") - - if begin := bytes.Index(in, beginMarker); begin > 0 { - if end := bytes.Index(in[begin:], endMarker); end > 0 { - in = append(in[:begin], removeScripts(in[begin+end+len(endMarker):])...) - } - } - return in -} - -// addFlags parses flag descriptions and adds them to the testFlags -func addFlags(f *testFlags, flags []string) { - for _, flag := range flags { - fields := strings.SplitN(flag, "=", 2) - switch len(fields) { - case 1: - f.bools[fields[0]] = true - case 2: - if i, err := strconv.Atoi(fields[1]); err == nil { - f.ints[fields[0]] = i - } else { - f.strings[fields[0]] = fields[1] - } - } - } -} - -func testSourceURL(port int) string { - return fmt.Sprintf("http://%s/", net.JoinHostPort(testSourceAddress, strconv.Itoa(port))) -} - -// solutionFilename returns the name of the solution file for the test -func solutionFilename(source string, f *testFlags) string { - name := []string{"pprof", strings.TrimPrefix(source, testSourceURL(8000))} - name = addString(name, f, []string{"flat", "cum"}) - name = addString(name, f, []string{"functions", "filefunctions", "files", "lines", "addresses"}) - name = addString(name, f, []string{"noinlines"}) - name = addString(name, f, []string{"inuse_space", "inuse_objects", "alloc_space", "alloc_objects"}) - name = addString(name, f, []string{"relative_percentages"}) - name = addString(name, f, []string{"seconds"}) - name = addString(name, f, []string{"call_tree"}) - name = addString(name, f, []string{"text", "tree", "callgrind", "dot", "svg", "tags", "dot", "traces", "disasm", "peek", "weblist", "topproto", "comments"}) - if f.strings["focus"] != "" || f.strings["tagfocus"] != "" { - name = append(name, "focus") - } - if f.strings["ignore"] != "" || f.strings["tagignore"] != "" { - name = append(name, "ignore") - } - if f.strings["show_from"] != "" { - name = append(name, "show_from") - } - name = addString(name, f, []string{"hide", "show"}) - if f.strings["unit"] != "minimum" { - name = addString(name, f, []string{"unit"}) - } - return strings.Join(name, ".") -} - -func addString(name []string, f *testFlags, components []string) []string { - for _, c := range components { - if f.bools[c] || f.strings[c] != "" || f.ints[c] != 0 { - return append(name, c) - } - } - return name -} - -// testFlags implements the plugin.FlagSet interface. -type testFlags struct { - bools map[string]bool - ints map[string]int - floats map[string]float64 - strings map[string]string - args []string - stringLists map[string][]string -} - -func (testFlags) ExtraUsage() string { return "" } - -func (testFlags) AddExtraUsage(eu string) {} - -func (f testFlags) Bool(s string, d bool, c string) *bool { - if b, ok := f.bools[s]; ok { - return &b - } - return &d -} - -func (f testFlags) Int(s string, d int, c string) *int { - if i, ok := f.ints[s]; ok { - return &i - } - return &d -} - -func (f testFlags) Float64(s string, d float64, c string) *float64 { - if g, ok := f.floats[s]; ok { - return &g - } - return &d -} - -func (f testFlags) String(s, d, c string) *string { - if t, ok := f.strings[s]; ok { - return &t - } - return &d -} - -func (f testFlags) BoolVar(p *bool, s string, d bool, c string) { - if b, ok := f.bools[s]; ok { - *p = b - } else { - *p = d - } -} - -func (f testFlags) IntVar(p *int, s string, d int, c string) { - if i, ok := f.ints[s]; ok { - *p = i - } else { - *p = d - } -} - -func (f testFlags) Float64Var(p *float64, s string, d float64, c string) { - if g, ok := f.floats[s]; ok { - *p = g - } else { - *p = d - } -} - -func (f testFlags) StringVar(p *string, s, d, c string) { - if t, ok := f.strings[s]; ok { - *p = t - } else { - *p = d - } -} - -func (f testFlags) StringList(s, d, c string) *[]*string { - if t, ok := f.stringLists[s]; ok { - // convert slice of strings to slice of string pointers before returning. - tp := make([]*string, len(t)) - for i, v := range t { - tp[i] = &v - } - return &tp - } - return &[]*string{} -} - -func (f testFlags) Parse(func()) []string { - return f.args -} - -func baseFlags() testFlags { - return testFlags{ - bools: map[string]bool{ - "proto": true, - "trim": true, - "compact_labels": true, - }, - ints: map[string]int{ - "nodecount": 20, - }, - floats: map[string]float64{ - "nodefraction": 0.05, - "edgefraction": 0.01, - "divide_by": 1.0, - }, - strings: map[string]string{ - "unit": "minimum", - }, - } -} - -const testStart = 0x1000 -const testOffset = 0x5000 - -type testFetcher struct{} - -func (testFetcher) Fetch(s string, d, t time.Duration) (*profile.Profile, string, error) { - var p *profile.Profile - switch s { - case "cpu", "unknown": - p = cpuProfile() - case "cpusmall": - p = cpuProfileSmall() - case "heap": - p = heapProfile() - case "heap_alloc": - p = heapProfile() - p.SampleType = []*profile.ValueType{ - {Type: "alloc_objects", Unit: "count"}, - {Type: "alloc_space", Unit: "bytes"}, - } - case "heap_request": - p = heapProfile() - for _, s := range p.Sample { - s.NumLabel["request"] = s.NumLabel["bytes"] - } - case "heap_sizetags": - p = heapProfile() - tags := []int64{2, 4, 8, 16, 32, 64, 128, 256} - for _, s := range p.Sample { - numValues := append(s.NumLabel["bytes"], tags...) - s.NumLabel["bytes"] = numValues - } - case "heap_tags": - p = heapProfile() - for i := 0; i < len(p.Sample); i += 2 { - s := p.Sample[i] - if s.Label == nil { - s.Label = make(map[string][]string) - } - s.NumLabel["request"] = s.NumLabel["bytes"] - s.Label["key1"] = []string{"tag"} - } - case "contention": - p = contentionProfile() - case "symbolz": - p = symzProfile() - case "longNameFuncs": - p = longNameFuncsProfile() - default: - return nil, "", fmt.Errorf("unexpected source: %s", s) - } - return p, testSourceURL(8000) + s, nil -} - -type testSymbolizer struct{} - -func (testSymbolizer) Symbolize(_ string, _ plugin.MappingSources, _ *profile.Profile) error { - return nil -} - -type testSymbolizeDemangler struct{} - -func (testSymbolizeDemangler) Symbolize(_ string, _ plugin.MappingSources, p *profile.Profile) error { - for _, fn := range p.Function { - if fn.Name == "" || fn.SystemName == fn.Name { - fn.Name = fakeDemangler(fn.SystemName) - } - } - return nil -} - -func testFetchSymbols(source, post string) ([]byte, error) { - var buf bytes.Buffer - - switch source { - case testSourceURL(8000) + "symbolz": - for _, address := range strings.Split(post, "+") { - a, _ := strconv.ParseInt(address, 0, 64) - fmt.Fprintf(&buf, "%v\t", address) - if a-testStart > testOffset { - fmt.Fprintf(&buf, "wrong_source_%v_", address) - continue - } - fmt.Fprintf(&buf, "%#x\n", a-testStart) - } - return buf.Bytes(), nil - case testSourceURL(8001) + "symbolz": - for _, address := range strings.Split(post, "+") { - a, _ := strconv.ParseInt(address, 0, 64) - fmt.Fprintf(&buf, "%v\t", address) - if a-testStart < testOffset { - fmt.Fprintf(&buf, "wrong_source_%v_", address) - continue - } - fmt.Fprintf(&buf, "%#x\n", a-testStart-testOffset) - } - return buf.Bytes(), nil - default: - return nil, fmt.Errorf("unexpected source: %s", source) - } -} - -type testSymbolzSymbolizer struct{} - -func (testSymbolzSymbolizer) Symbolize(variables string, sources plugin.MappingSources, p *profile.Profile) error { - return symbolz.Symbolize(p, false, sources, testFetchSymbols, nil) -} - -func fakeDemangler(name string) string { - switch name { - case "mangled1000": - return "line1000" - case "mangled2000": - return "line2000" - case "mangled2001": - return "line2001" - case "mangled3000": - return "line3000" - case "mangled3001": - return "line3001" - case "mangled3002": - return "line3002" - case "mangledNEW": - return "operator new" - case "mangledMALLOC": - return "malloc" - default: - return name - } -} - -// Returns a profile with function names which should be shortened in -// graph and flame views. -func longNameFuncsProfile() *profile.Profile { - var longNameFuncsM = []*profile.Mapping{ - { - ID: 1, - Start: 0x1000, - Limit: 0x4000, - File: "/path/to/testbinary", - HasFunctions: true, - HasFilenames: true, - HasLineNumbers: true, - HasInlineFrames: true, - }, - } - - var longNameFuncsF = []*profile.Function{ - {ID: 1, Name: "path/to/package1.object.function1", SystemName: "path/to/package1.object.function1", Filename: "path/to/package1.go"}, - {ID: 2, Name: "(anonymous namespace)::Bar::Foo", SystemName: "(anonymous namespace)::Bar::Foo", Filename: "a/long/path/to/package2.cc"}, - {ID: 3, Name: "java.bar.foo.FooBar.run(java.lang.Runnable)", SystemName: "java.bar.foo.FooBar.run(java.lang.Runnable)", Filename: "FooBar.java"}, - } - - var longNameFuncsL = []*profile.Location{ - { - ID: 1000, - Mapping: longNameFuncsM[0], - Address: 0x1000, - Line: []profile.Line{ - {Function: longNameFuncsF[0], Line: 1}, - }, - }, - { - ID: 2000, - Mapping: longNameFuncsM[0], - Address: 0x2000, - Line: []profile.Line{ - {Function: longNameFuncsF[1], Line: 4}, - }, - }, - { - ID: 3000, - Mapping: longNameFuncsM[0], - Address: 0x3000, - Line: []profile.Line{ - {Function: longNameFuncsF[2], Line: 9}, - }, - }, - } - - return &profile.Profile{ - PeriodType: &profile.ValueType{Type: "cpu", Unit: "milliseconds"}, - Period: 1, - DurationNanos: 10e9, - SampleType: []*profile.ValueType{ - {Type: "samples", Unit: "count"}, - {Type: "cpu", Unit: "milliseconds"}, - }, - Sample: []*profile.Sample{ - { - Location: []*profile.Location{longNameFuncsL[0], longNameFuncsL[1], longNameFuncsL[2]}, - Value: []int64{1000, 1000}, - }, - { - Location: []*profile.Location{longNameFuncsL[0], longNameFuncsL[1]}, - Value: []int64{100, 100}, - }, - { - Location: []*profile.Location{longNameFuncsL[2]}, - Value: []int64{10, 10}, - }, - }, - Location: longNameFuncsL, - Function: longNameFuncsF, - Mapping: longNameFuncsM, - } -} - -func cpuProfile() *profile.Profile { - var cpuM = []*profile.Mapping{ - { - ID: 1, - Start: 0x1000, - Limit: 0x4000, - File: "/path/to/testbinary", - HasFunctions: true, - HasFilenames: true, - HasLineNumbers: true, - HasInlineFrames: true, - }, - } - - var cpuF = []*profile.Function{ - {ID: 1, Name: "mangled1000", SystemName: "mangled1000", Filename: "testdata/file1000.src"}, - {ID: 2, Name: "mangled2000", SystemName: "mangled2000", Filename: "testdata/file2000.src"}, - {ID: 3, Name: "mangled2001", SystemName: "mangled2001", Filename: "testdata/file2000.src"}, - {ID: 4, Name: "mangled3000", SystemName: "mangled3000", Filename: "testdata/file3000.src"}, - {ID: 5, Name: "mangled3001", SystemName: "mangled3001", Filename: "testdata/file3000.src"}, - {ID: 6, Name: "mangled3002", SystemName: "mangled3002", Filename: "testdata/file3000.src"}, - } - - var cpuL = []*profile.Location{ - { - ID: 1000, - Mapping: cpuM[0], - Address: 0x1000, - Line: []profile.Line{ - {Function: cpuF[0], Line: 1}, - }, - }, - { - ID: 2000, - Mapping: cpuM[0], - Address: 0x2000, - Line: []profile.Line{ - {Function: cpuF[2], Line: 9}, - {Function: cpuF[1], Line: 4}, - }, - }, - { - ID: 3000, - Mapping: cpuM[0], - Address: 0x3000, - Line: []profile.Line{ - {Function: cpuF[5], Line: 2}, - {Function: cpuF[4], Line: 5}, - {Function: cpuF[3], Line: 6}, - }, - }, - { - ID: 3001, - Mapping: cpuM[0], - Address: 0x3001, - Line: []profile.Line{ - {Function: cpuF[4], Line: 8}, - {Function: cpuF[3], Line: 9}, - }, - }, - { - ID: 3002, - Mapping: cpuM[0], - Address: 0x3002, - Line: []profile.Line{ - {Function: cpuF[5], Line: 5}, - {Function: cpuF[3], Line: 9}, - }, - }, - } - - return &profile.Profile{ - PeriodType: &profile.ValueType{Type: "cpu", Unit: "milliseconds"}, - Period: 1, - DurationNanos: 10e9, - SampleType: []*profile.ValueType{ - {Type: "samples", Unit: "count"}, - {Type: "cpu", Unit: "milliseconds"}, - }, - Sample: []*profile.Sample{ - { - Location: []*profile.Location{cpuL[0], cpuL[1], cpuL[2]}, - Value: []int64{1000, 1000}, - Label: map[string][]string{ - "key1": {"tag1"}, - "key2": {"tag1"}, - }, - }, - { - Location: []*profile.Location{cpuL[0], cpuL[3]}, - Value: []int64{100, 100}, - Label: map[string][]string{ - "key1": {"tag2"}, - "key3": {"tag2"}, - }, - }, - { - Location: []*profile.Location{cpuL[1], cpuL[4]}, - Value: []int64{10, 10}, - Label: map[string][]string{ - "key1": {"tag3"}, - "key2": {"tag2"}, - }, - }, - { - Location: []*profile.Location{cpuL[2]}, - Value: []int64{10, 10}, - Label: map[string][]string{ - "key1": {"tag4"}, - "key2": {"tag1"}, - }, - }, - }, - Location: cpuL, - Function: cpuF, - Mapping: cpuM, - } -} - -func cpuProfileSmall() *profile.Profile { - var cpuM = []*profile.Mapping{ - { - ID: 1, - Start: 0x1000, - Limit: 0x4000, - File: "/path/to/testbinary", - HasFunctions: true, - HasFilenames: true, - HasLineNumbers: true, - HasInlineFrames: true, - }, - } - - var cpuL = []*profile.Location{ - { - ID: 1000, - Mapping: cpuM[0], - Address: 0x1000, - }, - { - ID: 2000, - Mapping: cpuM[0], - Address: 0x2000, - }, - { - ID: 3000, - Mapping: cpuM[0], - Address: 0x3000, - }, - { - ID: 4000, - Mapping: cpuM[0], - Address: 0x4000, - }, - { - ID: 5000, - Mapping: cpuM[0], - Address: 0x5000, - }, - } - - return &profile.Profile{ - PeriodType: &profile.ValueType{Type: "cpu", Unit: "milliseconds"}, - Period: 1, - DurationNanos: 10e9, - SampleType: []*profile.ValueType{ - {Type: "samples", Unit: "count"}, - {Type: "cpu", Unit: "milliseconds"}, - }, - Sample: []*profile.Sample{ - { - Location: []*profile.Location{cpuL[0], cpuL[1], cpuL[2]}, - Value: []int64{1000, 1000}, - }, - { - Location: []*profile.Location{cpuL[3], cpuL[1], cpuL[4]}, - Value: []int64{1000, 1000}, - }, - { - Location: []*profile.Location{cpuL[2]}, - Value: []int64{1000, 1000}, - }, - { - Location: []*profile.Location{cpuL[4]}, - Value: []int64{1000, 1000}, - }, - }, - Location: cpuL, - Function: nil, - Mapping: cpuM, - } -} - -func heapProfile() *profile.Profile { - var heapM = []*profile.Mapping{ - { - ID: 1, - BuildID: "buildid", - Start: 0x1000, - Limit: 0x4000, - HasFunctions: true, - HasFilenames: true, - HasLineNumbers: true, - HasInlineFrames: true, - }, - } - - var heapF = []*profile.Function{ - {ID: 1, Name: "pruneme", SystemName: "pruneme", Filename: "prune.h"}, - {ID: 2, Name: "mangled1000", SystemName: "mangled1000", Filename: "testdata/file1000.src"}, - {ID: 3, Name: "mangled2000", SystemName: "mangled2000", Filename: "testdata/file2000.src"}, - {ID: 4, Name: "mangled2001", SystemName: "mangled2001", Filename: "testdata/file2000.src"}, - {ID: 5, Name: "mangled3000", SystemName: "mangled3000", Filename: "testdata/file3000.src"}, - {ID: 6, Name: "mangled3001", SystemName: "mangled3001", Filename: "testdata/file3000.src"}, - {ID: 7, Name: "mangled3002", SystemName: "mangled3002", Filename: "testdata/file3000.src"}, - {ID: 8, Name: "mangledMALLOC", SystemName: "mangledMALLOC", Filename: "malloc.h"}, - {ID: 9, Name: "mangledNEW", SystemName: "mangledNEW", Filename: "new.h"}, - } - - var heapL = []*profile.Location{ - { - ID: 1000, - Mapping: heapM[0], - Address: 0x1000, - Line: []profile.Line{ - {Function: heapF[0], Line: 100}, - {Function: heapF[7], Line: 100}, - {Function: heapF[1], Line: 1}, - }, - }, - { - ID: 2000, - Mapping: heapM[0], - Address: 0x2000, - Line: []profile.Line{ - {Function: heapF[8], Line: 100}, - {Function: heapF[3], Line: 2}, - {Function: heapF[2], Line: 3}, - }, - }, - { - ID: 3000, - Mapping: heapM[0], - Address: 0x3000, - Line: []profile.Line{ - {Function: heapF[8], Line: 100}, - {Function: heapF[6], Line: 3}, - {Function: heapF[5], Line: 2}, - {Function: heapF[4], Line: 4}, - }, - }, - { - ID: 3001, - Mapping: heapM[0], - Address: 0x3001, - Line: []profile.Line{ - {Function: heapF[0], Line: 100}, - {Function: heapF[8], Line: 100}, - {Function: heapF[5], Line: 2}, - {Function: heapF[4], Line: 4}, - }, - }, - { - ID: 3002, - Mapping: heapM[0], - Address: 0x3002, - Line: []profile.Line{ - {Function: heapF[6], Line: 3}, - {Function: heapF[4], Line: 4}, - }, - }, - } - - return &profile.Profile{ - Comments: []string{"comment", "#hidden comment"}, - PeriodType: &profile.ValueType{Type: "allocations", Unit: "bytes"}, - Period: 524288, - SampleType: []*profile.ValueType{ - {Type: "inuse_objects", Unit: "count"}, - {Type: "inuse_space", Unit: "bytes"}, - }, - Sample: []*profile.Sample{ - { - Location: []*profile.Location{heapL[0], heapL[1], heapL[2]}, - Value: []int64{10, 1024000}, - NumLabel: map[string][]int64{"bytes": {102400}}, - }, - { - Location: []*profile.Location{heapL[0], heapL[3]}, - Value: []int64{20, 4096000}, - NumLabel: map[string][]int64{"bytes": {204800}}, - }, - { - Location: []*profile.Location{heapL[1], heapL[4]}, - Value: []int64{40, 65536000}, - NumLabel: map[string][]int64{"bytes": {1638400}}, - }, - { - Location: []*profile.Location{heapL[2]}, - Value: []int64{80, 32768000}, - NumLabel: map[string][]int64{"bytes": {409600}}, - }, - }, - DropFrames: ".*operator new.*|malloc", - Location: heapL, - Function: heapF, - Mapping: heapM, - } -} - -func contentionProfile() *profile.Profile { - var contentionM = []*profile.Mapping{ - { - ID: 1, - BuildID: "buildid-contention", - Start: 0x1000, - Limit: 0x4000, - HasFunctions: true, - HasFilenames: true, - HasLineNumbers: true, - HasInlineFrames: true, - }, - } - - var contentionF = []*profile.Function{ - {ID: 1, Name: "mangled1000", SystemName: "mangled1000", Filename: "testdata/file1000.src"}, - {ID: 2, Name: "mangled2000", SystemName: "mangled2000", Filename: "testdata/file2000.src"}, - {ID: 3, Name: "mangled2001", SystemName: "mangled2001", Filename: "testdata/file2000.src"}, - {ID: 4, Name: "mangled3000", SystemName: "mangled3000", Filename: "testdata/file3000.src"}, - {ID: 5, Name: "mangled3001", SystemName: "mangled3001", Filename: "testdata/file3000.src"}, - {ID: 6, Name: "mangled3002", SystemName: "mangled3002", Filename: "testdata/file3000.src"}, - } - - var contentionL = []*profile.Location{ - { - ID: 1000, - Mapping: contentionM[0], - Address: 0x1000, - Line: []profile.Line{ - {Function: contentionF[0], Line: 1}, - }, - }, - { - ID: 2000, - Mapping: contentionM[0], - Address: 0x2000, - Line: []profile.Line{ - {Function: contentionF[2], Line: 2}, - {Function: contentionF[1], Line: 3}, - }, - }, - { - ID: 3000, - Mapping: contentionM[0], - Address: 0x3000, - Line: []profile.Line{ - {Function: contentionF[5], Line: 2}, - {Function: contentionF[4], Line: 3}, - {Function: contentionF[3], Line: 5}, - }, - }, - { - ID: 3001, - Mapping: contentionM[0], - Address: 0x3001, - Line: []profile.Line{ - {Function: contentionF[4], Line: 3}, - {Function: contentionF[3], Line: 5}, - }, - }, - { - ID: 3002, - Mapping: contentionM[0], - Address: 0x3002, - Line: []profile.Line{ - {Function: contentionF[5], Line: 4}, - {Function: contentionF[3], Line: 3}, - }, - }, - } - - return &profile.Profile{ - PeriodType: &profile.ValueType{Type: "contentions", Unit: "count"}, - Period: 524288, - SampleType: []*profile.ValueType{ - {Type: "contentions", Unit: "count"}, - {Type: "delay", Unit: "nanoseconds"}, - }, - Sample: []*profile.Sample{ - { - Location: []*profile.Location{contentionL[0], contentionL[1], contentionL[2]}, - Value: []int64{10, 10240000}, - }, - { - Location: []*profile.Location{contentionL[0], contentionL[3]}, - Value: []int64{20, 40960000}, - }, - { - Location: []*profile.Location{contentionL[1], contentionL[4]}, - Value: []int64{40, 65536000}, - }, - { - Location: []*profile.Location{contentionL[2]}, - Value: []int64{80, 32768000}, - }, - }, - Location: contentionL, - Function: contentionF, - Mapping: contentionM, - Comments: []string{"Comment #1", "Comment #2"}, - } -} - -func symzProfile() *profile.Profile { - var symzM = []*profile.Mapping{ - { - ID: 1, - Start: testStart, - Limit: 0x4000, - File: "/path/to/testbinary", - }, - } - - var symzL = []*profile.Location{ - {ID: 1, Mapping: symzM[0], Address: testStart}, - {ID: 2, Mapping: symzM[0], Address: testStart + 0x1000}, - {ID: 3, Mapping: symzM[0], Address: testStart + 0x2000}, - } - - return &profile.Profile{ - PeriodType: &profile.ValueType{Type: "cpu", Unit: "milliseconds"}, - Period: 1, - DurationNanos: 10e9, - SampleType: []*profile.ValueType{ - {Type: "samples", Unit: "count"}, - {Type: "cpu", Unit: "milliseconds"}, - }, - Sample: []*profile.Sample{ - { - Location: []*profile.Location{symzL[0], symzL[1], symzL[2]}, - Value: []int64{1, 1}, - }, - }, - Location: symzL, - Mapping: symzM, - } -} - -var autoCompleteTests = []struct { - in string - out string -}{ - {"", ""}, - {"xyz", "xyz"}, // no match - {"dis", "disasm"}, // single match - {"t", "t"}, // many matches - {"top abc", "top abc"}, // no function name match - {"top mangledM", "top mangledMALLOC"}, // single function name match - {"top cmd cmd mangledM", "top cmd cmd mangledMALLOC"}, - {"top mangled", "top mangled"}, // many function name matches - {"cmd mangledM", "cmd mangledM"}, // invalid command - {"top mangledM cmd", "top mangledM cmd"}, // cursor misplaced - {"top edMA", "top mangledMALLOC"}, // single infix function name match - {"top -mangledM", "top -mangledMALLOC"}, // ignore sign handled - {"lin", "lines"}, // single variable match - {"EdGeF", "edgefraction"}, // single capitalized match - {"help dis", "help disasm"}, // help command match - {"help relative_perc", "help relative_percentages"}, // help variable match - {"help coMpa", "help compact_labels"}, // help variable capitalized match -} - -func TestAutoComplete(t *testing.T) { - complete := newCompleter(functionNames(heapProfile())) - - for _, test := range autoCompleteTests { - if out := complete(test.in); out != test.out { - t.Errorf("autoComplete(%s) = %s; want %s", test.in, out, test.out) - } - } -} - -func TestTagFilter(t *testing.T) { - var tagFilterTests = []struct { - desc, value string - tags map[string][]string - want bool - }{ - { - "1 key with 1 matching value", - "tag2", - map[string][]string{"value1": {"tag1", "tag2"}}, - true, - }, - { - "1 key with no matching values", - "tag3", - map[string][]string{"value1": {"tag1", "tag2"}}, - false, - }, - { - "two keys, each with value matching different one value in list", - "tag1,tag3", - map[string][]string{"value1": {"tag1", "tag2"}, "value2": {"tag3"}}, - true, - }, - {"two keys, all value matching different regex value in list", - "t..[12],t..3", - map[string][]string{"value1": {"tag1", "tag2"}, "value2": {"tag3"}}, - true, - }, - { - "one key, not all values in list matched", - "tag2,tag3", - map[string][]string{"value1": {"tag1", "tag2"}}, - false, - }, - { - "key specified, list of tags where all tags in list matched", - "key1=tag1,tag2", - map[string][]string{"key1": {"tag1", "tag2"}}, - true, - }, - {"key specified, list of tag values where not all are matched", - "key1=tag1,tag2", - map[string][]string{"key1": {"tag1"}}, - true, - }, - { - "key included for regex matching, list of values where all values in list matched", - "key1:tag1,tag2", - map[string][]string{"key1": {"tag1", "tag2"}}, - true, - }, - { - "key included for regex matching, list of values where not only second value matched", - "key1:tag1,tag2", - map[string][]string{"key1": {"tag2"}}, - false, - }, - { - "key included for regex matching, list of values where not only first value matched", - "key1:tag1,tag2", - map[string][]string{"key1": {"tag1"}}, - false, - }, - } - for _, test := range tagFilterTests { - t.Run(test.desc, func(*testing.T) { - filter, err := compileTagFilter(test.desc, test.value, nil, &proftest.TestUI{T: t}, nil) - if err != nil { - t.Fatalf("tagFilter %s:%v", test.desc, err) - } - s := profile.Sample{ - Label: test.tags, - } - if got := filter(&s); got != test.want { - t.Errorf("tagFilter %s: got %v, want %v", test.desc, got, test.want) - } - }) - } -} - -func TestIdentifyNumLabelUnits(t *testing.T) { - var tagFilterTests = []struct { - desc string - tagVals []map[string][]int64 - tagUnits []map[string][]string - wantUnits map[string]string - allowedRx string - wantIgnoreErrCount int - }{ - { - "Multiple keys, no units for all keys", - []map[string][]int64{{"keyA": {131072}, "keyB": {128}}}, - []map[string][]string{{"keyA": {}, "keyB": {""}}}, - map[string]string{"keyA": "keyA", "keyB": "keyB"}, - "", - 0, - }, - { - "Multiple keys, different units for each key", - []map[string][]int64{{"keyA": {131072}, "keyB": {128}}}, - []map[string][]string{{"keyA": {"bytes"}, "keyB": {"kilobytes"}}}, - map[string]string{"keyA": "bytes", "keyB": "kilobytes"}, - "", - 0, - }, - { - "Multiple keys with multiple values, different units for each key", - []map[string][]int64{{"keyC": {131072, 1}, "keyD": {128, 252}}}, - []map[string][]string{{"keyC": {"bytes", "bytes"}, "keyD": {"kilobytes", "kilobytes"}}}, - map[string]string{"keyC": "bytes", "keyD": "kilobytes"}, - "", - 0, - }, - { - "Multiple keys with multiple values, some units missing", - []map[string][]int64{{"key1": {131072, 1}, "A": {128, 252}, "key3": {128}, "key4": {1}}, {"key3": {128}, "key4": {1}}}, - []map[string][]string{{"key1": {"", "bytes"}, "A": {"kilobytes", ""}, "key3": {""}, "key4": {"hour"}}, {"key3": {"seconds"}, "key4": {""}}}, - map[string]string{"key1": "bytes", "A": "kilobytes", "key3": "seconds", "key4": "hour"}, - "", - 0, - }, - { - "One key with three units in same sample", - []map[string][]int64{{"key": {8, 8, 16}}}, - []map[string][]string{{"key": {"bytes", "megabytes", "kilobytes"}}}, - map[string]string{"key": "bytes"}, - `(For tag key used unit bytes, also encountered unit\(s\) kilobytes, megabytes)`, - 1, - }, - { - "One key with four units in same sample", - []map[string][]int64{{"key": {8, 8, 16, 32}}}, - []map[string][]string{{"key": {"bytes", "kilobytes", "a", "megabytes"}}}, - map[string]string{"key": "bytes"}, - `(For tag key used unit bytes, also encountered unit\(s\) a, kilobytes, megabytes)`, - 1, - }, - { - "One key with two units in same sample", - []map[string][]int64{{"key": {8, 8}}}, - []map[string][]string{{"key": {"bytes", "seconds"}}}, - map[string]string{"key": "bytes"}, - `(For tag key used unit bytes, also encountered unit\(s\) seconds)`, - 1, - }, - { - "One key with different units in different samples", - []map[string][]int64{{"key1": {8}}, {"key1": {8}}, {"key1": {8}}}, - []map[string][]string{{"key1": {"bytes"}}, {"key1": {"kilobytes"}}, {"key1": {"megabytes"}}}, - map[string]string{"key1": "bytes"}, - `(For tag key1 used unit bytes, also encountered unit\(s\) kilobytes, megabytes)`, - 1, - }, - { - "Key alignment, unit not specified", - []map[string][]int64{{"alignment": {8}}}, - []map[string][]string{nil}, - map[string]string{"alignment": "bytes"}, - "", - 0, - }, - { - "Key request, unit not specified", - []map[string][]int64{{"request": {8}}, {"request": {8, 8}}}, - []map[string][]string{nil, nil}, - map[string]string{"request": "bytes"}, - "", - 0, - }, - { - "Check units not over-written for keys with default units", - []map[string][]int64{{ - "alignment": {8}, - "request": {8}, - "bytes": {8}, - }}, - []map[string][]string{{ - "alignment": {"seconds"}, - "request": {"minutes"}, - "bytes": {"hours"}, - }}, - map[string]string{ - "alignment": "seconds", - "request": "minutes", - "bytes": "hours", - }, - "", - 0, - }, - } - for _, test := range tagFilterTests { - t.Run(test.desc, func(*testing.T) { - p := profile.Profile{Sample: make([]*profile.Sample, len(test.tagVals))} - for i, numLabel := range test.tagVals { - s := profile.Sample{ - NumLabel: numLabel, - NumUnit: test.tagUnits[i], - } - p.Sample[i] = &s - } - testUI := &proftest.TestUI{T: t, AllowRx: test.allowedRx} - units := identifyNumLabelUnits(&p, testUI) - if !reflect.DeepEqual(test.wantUnits, units) { - t.Errorf("got %v units, want %v", units, test.wantUnits) - } - if got, want := testUI.NumAllowRxMatches, test.wantIgnoreErrCount; want != got { - t.Errorf("got %d errors logged, want %d errors logged", got, want) - } - }) - } -} - -func TestNumericTagFilter(t *testing.T) { - var tagFilterTests = []struct { - desc, value string - tags map[string][]int64 - identifiedUnits map[string]string - want bool - }{ - { - "Match when unit conversion required", - "128kb", - map[string][]int64{"key1": {131072}, "key2": {128}}, - map[string]string{"key1": "bytes", "key2": "kilobytes"}, - true, - }, - { - "Match only when values equal after unit conversion", - "512kb", - map[string][]int64{"key1": {512}, "key2": {128}}, - map[string]string{"key1": "bytes", "key2": "kilobytes"}, - false, - }, - { - "Match when values and units initially equal", - "10bytes", - map[string][]int64{"key1": {10}, "key2": {128}}, - map[string]string{"key1": "bytes", "key2": "kilobytes"}, - true, - }, - { - "Match range without lower bound, no unit conversion required", - ":10bytes", - map[string][]int64{"key1": {8}}, - map[string]string{"key1": "bytes"}, - true, - }, - { - "Match range without lower bound, unit conversion required", - ":10kb", - map[string][]int64{"key1": {8}}, - map[string]string{"key1": "bytes"}, - true, - }, - { - "Match range without upper bound, unit conversion required", - "10b:", - map[string][]int64{"key1": {8}}, - map[string]string{"key1": "kilobytes"}, - true, - }, - { - "Match range without upper bound, no unit conversion required", - "10b:", - map[string][]int64{"key1": {12}}, - map[string]string{"key1": "bytes"}, - true, - }, - { - "Don't match range without upper bound, no unit conversion required", - "10b:", - map[string][]int64{"key1": {8}}, - map[string]string{"key1": "bytes"}, - false, - }, - { - "Multiple keys with different units, don't match range without upper bound", - "10kb:", - map[string][]int64{"key1": {8}}, - map[string]string{"key1": "bytes", "key2": "kilobytes"}, - false, - }, - { - "Match range without upper bound, unit conversion required", - "10b:", - map[string][]int64{"key1": {8}}, - map[string]string{"key1": "kilobytes"}, - true, - }, - { - "Don't match range without lower bound, no unit conversion required", - ":10b", - map[string][]int64{"key1": {12}}, - map[string]string{"key1": "bytes"}, - false, - }, - { - "Match specific key, key present, one of two values match", - "bytes=5b", - map[string][]int64{"bytes": {10, 5}}, - map[string]string{"bytes": "bytes"}, - true, - }, - { - "Match specific key, key present and value matches", - "bytes=1024b", - map[string][]int64{"bytes": {1024}}, - map[string]string{"bytes": "kilobytes"}, - false, - }, - { - "Match specific key, matching key present and value matches, also non-matching key", - "bytes=1024b", - map[string][]int64{"bytes": {1024}, "key2": {5}}, - map[string]string{"bytes": "bytes", "key2": "bytes"}, - true, - }, - { - "Match specific key and range of values, value matches", - "bytes=512b:1024b", - map[string][]int64{"bytes": {780}}, - map[string]string{"bytes": "bytes"}, - true, - }, - { - "Match specific key and range of values, value too large", - "key1=1kb:2kb", - map[string][]int64{"key1": {4096}}, - map[string]string{"key1": "bytes"}, - false, - }, - { - "Match specific key and range of values, value too small", - "key1=1kb:2kb", - map[string][]int64{"key1": {256}}, - map[string]string{"key1": "bytes"}, - false, - }, - { - "Match specific key and value, unit conversion required", - "bytes=1024b", - map[string][]int64{"bytes": {1}}, - map[string]string{"bytes": "kilobytes"}, - true, - }, - { - "Match specific key and value, key does not appear", - "key2=256bytes", - map[string][]int64{"key1": {256}}, - map[string]string{"key1": "bytes"}, - false, - }, - } - for _, test := range tagFilterTests { - t.Run(test.desc, func(*testing.T) { - wantErrMsg := strings.Join([]string{"(", test.desc, ":Interpreted '", test.value[strings.Index(test.value, "=")+1:], "' as range, not regexp", ")"}, "") - filter, err := compileTagFilter(test.desc, test.value, test.identifiedUnits, &proftest.TestUI{T: t, - AllowRx: wantErrMsg}, nil) - if err != nil { - t.Fatalf("%v", err) - } - s := profile.Sample{ - NumLabel: test.tags, - } - if got := filter(&s); got != test.want { - t.Fatalf("got %v, want %v", got, test.want) - } - }) - } -} - -type testSymbolzMergeFetcher struct{} - -func (testSymbolzMergeFetcher) Fetch(s string, d, t time.Duration) (*profile.Profile, string, error) { - var p *profile.Profile - switch s { - case testSourceURL(8000) + "symbolz": - p = symzProfile() - case testSourceURL(8001) + "symbolz": - p = symzProfile() - p.Mapping[0].Start += testOffset - p.Mapping[0].Limit += testOffset - for i := range p.Location { - p.Location[i].Address += testOffset - } - default: - return nil, "", fmt.Errorf("unexpected source: %s", s) - } - return p, s, nil -} - -func TestSymbolzAfterMerge(t *testing.T) { - baseVars := pprofVariables - pprofVariables = baseVars.makeCopy() - defer func() { pprofVariables = baseVars }() - - f := baseFlags() - f.args = []string{ - testSourceURL(8000) + "symbolz", - testSourceURL(8001) + "symbolz", - } - - o := setDefaults(nil) - o.Flagset = f - o.Obj = new(mockObjTool) - src, cmd, err := parseFlags(o) - if err != nil { - t.Fatalf("parseFlags: %v", err) - } - - if len(cmd) != 1 || cmd[0] != "proto" { - t.Fatalf("parseFlags returned command %v, want [proto]", cmd) - } - - o.Fetch = testSymbolzMergeFetcher{} - o.Sym = testSymbolzSymbolizer{} - p, err := fetchProfiles(src, o) - if err != nil { - t.Fatalf("fetchProfiles: %v", err) - } - if len(p.Location) != 3 { - t.Errorf("Got %d locations after merge, want %d", len(p.Location), 3) - } - for i, l := range p.Location { - if len(l.Line) != 1 { - t.Errorf("Number of lines for symbolz %#x in iteration %d, got %d, want %d", l.Address, i, len(l.Line), 1) - continue - } - address := l.Address - l.Mapping.Start - if got, want := l.Line[0].Function.Name, fmt.Sprintf("%#x", address); got != want { - t.Errorf("symbolz %#x, got %s, want %s", address, got, want) - } - } -} - -type mockObjTool struct{} - -func (*mockObjTool) Open(file string, start, limit, offset uint64) (plugin.ObjFile, error) { - return &mockFile{file, "abcdef", 0}, nil -} - -func (m *mockObjTool) Disasm(file string, start, end uint64) ([]plugin.Inst, error) { - switch start { - case 0x1000: - return []plugin.Inst{ - {Addr: 0x1000, Text: "instruction one", File: "file1000.src", Line: 1}, - {Addr: 0x1001, Text: "instruction two", File: "file1000.src", Line: 1}, - {Addr: 0x1002, Text: "instruction three", File: "file1000.src", Line: 2}, - {Addr: 0x1003, Text: "instruction four", File: "file1000.src", Line: 1}, - }, nil - case 0x3000: - return []plugin.Inst{ - {Addr: 0x3000, Text: "instruction one"}, - {Addr: 0x3001, Text: "instruction two"}, - {Addr: 0x3002, Text: "instruction three"}, - {Addr: 0x3003, Text: "instruction four"}, - {Addr: 0x3004, Text: "instruction five"}, - }, nil - } - return nil, fmt.Errorf("unimplemented") -} - -type mockFile struct { - name, buildID string - base uint64 -} - -// Name returns the underlyinf file name, if available -func (m *mockFile) Name() string { - return m.name -} - -// Base returns the base address to use when looking up symbols in the file. -func (m *mockFile) Base() uint64 { - return m.base -} - -// BuildID returns the GNU build ID of the file, or an empty string. -func (m *mockFile) BuildID() string { - return m.buildID -} - -// SourceLine reports the source line information for a given -// address in the file. Due to inlining, the source line information -// is in general a list of positions representing a call stack, -// with the leaf function first. -func (*mockFile) SourceLine(addr uint64) ([]plugin.Frame, error) { - return nil, fmt.Errorf("unimplemented") -} - -// Symbols returns a list of symbols in the object file. -// If r is not nil, Symbols restricts the list to symbols -// with names matching the regular expression. -// If addr is not zero, Symbols restricts the list to symbols -// containing that address. -func (m *mockFile) Symbols(r *regexp.Regexp, addr uint64) ([]*plugin.Sym, error) { - switch r.String() { - case "line[13]": - return []*plugin.Sym{ - { - Name: []string{"line1000"}, File: m.name, - Start: 0x1000, End: 0x1003, - }, - { - Name: []string{"line3000"}, File: m.name, - Start: 0x3000, End: 0x3004, - }, - }, nil - } - return nil, fmt.Errorf("unimplemented") -} - -// Close closes the file, releasing associated resources. -func (*mockFile) Close() error { - return nil -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/fetch_test.go b/src/cmd/vendor/github.com/google/pprof/internal/driver/fetch_test.go deleted file mode 100644 index b9e9dfe8f4..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/fetch_test.go +++ /dev/null @@ -1,758 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package driver - -import ( - "crypto/ecdsa" - "crypto/elliptic" - "crypto/rand" - "crypto/tls" - "crypto/x509" - "encoding/pem" - "fmt" - "io/ioutil" - "math/big" - "net" - "net/http" - "os" - "path/filepath" - "reflect" - "regexp" - "runtime" - "strings" - "testing" - "time" - - "github.com/google/pprof/internal/binutils" - "github.com/google/pprof/internal/plugin" - "github.com/google/pprof/internal/proftest" - "github.com/google/pprof/internal/symbolizer" - "github.com/google/pprof/internal/transport" - "github.com/google/pprof/profile" -) - -func TestSymbolizationPath(t *testing.T) { - if runtime.GOOS == "windows" { - t.Skip("test assumes Unix paths") - } - - // Save environment variables to restore after test - saveHome := os.Getenv(homeEnv()) - savePath := os.Getenv("PPROF_BINARY_PATH") - - tempdir, err := ioutil.TempDir("", "home") - if err != nil { - t.Fatal("creating temp dir: ", err) - } - defer os.RemoveAll(tempdir) - os.MkdirAll(filepath.Join(tempdir, "pprof", "binaries", "abcde10001"), 0700) - os.Create(filepath.Join(tempdir, "pprof", "binaries", "abcde10001", "binary")) - - obj := testObj{tempdir} - os.Setenv(homeEnv(), tempdir) - for _, tc := range []struct { - env, file, buildID, want string - msgCount int - }{ - {"", "/usr/bin/binary", "", "/usr/bin/binary", 0}, - {"", "/usr/bin/binary", "fedcb10000", "/usr/bin/binary", 0}, - {"/usr", "/bin/binary", "", "/usr/bin/binary", 0}, - {"", "/prod/path/binary", "abcde10001", filepath.Join(tempdir, "pprof/binaries/abcde10001/binary"), 0}, - {"/alternate/architecture", "/usr/bin/binary", "", "/alternate/architecture/binary", 0}, - {"/alternate/architecture", "/usr/bin/binary", "abcde10001", "/alternate/architecture/binary", 0}, - {"/nowhere:/alternate/architecture", "/usr/bin/binary", "fedcb10000", "/usr/bin/binary", 1}, - {"/nowhere:/alternate/architecture", "/usr/bin/binary", "abcde10002", "/usr/bin/binary", 1}, - } { - os.Setenv("PPROF_BINARY_PATH", tc.env) - p := &profile.Profile{ - Mapping: []*profile.Mapping{ - { - File: tc.file, - BuildID: tc.buildID, - }, - }, - } - s := &source{} - locateBinaries(p, s, obj, &proftest.TestUI{T: t, Ignore: tc.msgCount}) - if file := p.Mapping[0].File; file != tc.want { - t.Errorf("%s:%s:%s, want %s, got %s", tc.env, tc.file, tc.buildID, tc.want, file) - } - } - os.Setenv(homeEnv(), saveHome) - os.Setenv("PPROF_BINARY_PATH", savePath) -} - -func TestCollectMappingSources(t *testing.T) { - const startAddress uint64 = 0x40000 - const url = "http://example.com" - for _, tc := range []struct { - file, buildID string - want plugin.MappingSources - }{ - {"/usr/bin/binary", "buildId", mappingSources("buildId", url, startAddress)}, - {"/usr/bin/binary", "", mappingSources("/usr/bin/binary", url, startAddress)}, - {"", "", mappingSources(url, url, startAddress)}, - } { - p := &profile.Profile{ - Mapping: []*profile.Mapping{ - { - File: tc.file, - BuildID: tc.buildID, - Start: startAddress, - }, - }, - } - got := collectMappingSources(p, url) - if !reflect.DeepEqual(got, tc.want) { - t.Errorf("%s:%s, want %v, got %v", tc.file, tc.buildID, tc.want, got) - } - } -} - -func TestUnsourceMappings(t *testing.T) { - for _, tc := range []struct { - file, buildID, want string - }{ - {"/usr/bin/binary", "buildId", "/usr/bin/binary"}, - {"http://example.com", "", ""}, - } { - p := &profile.Profile{ - Mapping: []*profile.Mapping{ - { - File: tc.file, - BuildID: tc.buildID, - }, - }, - } - unsourceMappings(p) - if got := p.Mapping[0].File; got != tc.want { - t.Errorf("%s:%s, want %s, got %s", tc.file, tc.buildID, tc.want, got) - } - } -} - -type testObj struct { - home string -} - -func (o testObj) Open(file string, start, limit, offset uint64) (plugin.ObjFile, error) { - switch file { - case "/alternate/architecture/binary": - return testFile{file, "abcde10001"}, nil - case "/usr/bin/binary": - return testFile{file, "fedcb10000"}, nil - case filepath.Join(o.home, "pprof/binaries/abcde10001/binary"): - return testFile{file, "abcde10001"}, nil - } - return nil, fmt.Errorf("not found: %s", file) -} -func (testObj) Demangler(_ string) func(names []string) (map[string]string, error) { - return func(names []string) (map[string]string, error) { return nil, nil } -} -func (testObj) Disasm(file string, start, end uint64) ([]plugin.Inst, error) { return nil, nil } - -type testFile struct{ name, buildID string } - -func (f testFile) Name() string { return f.name } -func (testFile) Base() uint64 { return 0 } -func (f testFile) BuildID() string { return f.buildID } -func (testFile) SourceLine(addr uint64) ([]plugin.Frame, error) { return nil, nil } -func (testFile) Symbols(r *regexp.Regexp, addr uint64) ([]*plugin.Sym, error) { return nil, nil } -func (testFile) Close() error { return nil } - -func TestFetch(t *testing.T) { - const path = "testdata/" - type testcase struct { - source, execName string - } - - for _, tc := range []testcase{ - {path + "go.crc32.cpu", ""}, - {path + "go.nomappings.crash", "/bin/gotest.exe"}, - {"http://localhost/profile?file=cppbench.cpu", ""}, - } { - p, _, _, err := grabProfile(&source{ExecName: tc.execName}, tc.source, nil, testObj{}, &proftest.TestUI{T: t}, &httpTransport{}) - if err != nil { - t.Fatalf("%s: %s", tc.source, err) - } - if len(p.Sample) == 0 { - t.Errorf("%s: want non-zero samples", tc.source) - } - if e := tc.execName; e != "" { - switch { - case len(p.Mapping) == 0 || p.Mapping[0] == nil: - t.Errorf("%s: want mapping[0].execName == %s, got no mappings", tc.source, e) - case p.Mapping[0].File != e: - t.Errorf("%s: want mapping[0].execName == %s, got %s", tc.source, e, p.Mapping[0].File) - } - } - } -} - -func TestFetchWithBase(t *testing.T) { - baseVars := pprofVariables - defer func() { pprofVariables = baseVars }() - - type WantSample struct { - values []int64 - labels map[string][]string - } - - const path = "testdata/" - type testcase struct { - desc string - sources []string - bases []string - diffBases []string - normalize bool - wantSamples []WantSample - wantErrorMsg string - } - - testcases := []testcase{ - { - "not normalized base is same as source", - []string{path + "cppbench.contention"}, - []string{path + "cppbench.contention"}, - nil, - false, - nil, - "", - }, - { - "not normalized base is same as source", - []string{path + "cppbench.contention"}, - []string{path + "cppbench.contention"}, - nil, - false, - nil, - "", - }, - { - "not normalized single source, multiple base (all profiles same)", - []string{path + "cppbench.contention"}, - []string{path + "cppbench.contention", path + "cppbench.contention"}, - nil, - false, - []WantSample{ - { - values: []int64{-2700, -608881724}, - labels: map[string][]string{}, - }, - { - values: []int64{-100, -23992}, - labels: map[string][]string{}, - }, - { - values: []int64{-200, -179943}, - labels: map[string][]string{}, - }, - { - values: []int64{-100, -17778444}, - labels: map[string][]string{}, - }, - { - values: []int64{-100, -75976}, - labels: map[string][]string{}, - }, - { - values: []int64{-300, -63568134}, - labels: map[string][]string{}, - }, - }, - "", - }, - { - "not normalized, different base and source", - []string{path + "cppbench.contention"}, - []string{path + "cppbench.small.contention"}, - nil, - false, - []WantSample{ - { - values: []int64{1700, 608878600}, - labels: map[string][]string{}, - }, - { - values: []int64{100, 23992}, - labels: map[string][]string{}, - }, - { - values: []int64{200, 179943}, - labels: map[string][]string{}, - }, - { - values: []int64{100, 17778444}, - labels: map[string][]string{}, - }, - { - values: []int64{100, 75976}, - labels: map[string][]string{}, - }, - { - values: []int64{300, 63568134}, - labels: map[string][]string{}, - }, - }, - "", - }, - { - "normalized base is same as source", - []string{path + "cppbench.contention"}, - []string{path + "cppbench.contention"}, - nil, - true, - nil, - "", - }, - { - "normalized single source, multiple base (all profiles same)", - []string{path + "cppbench.contention"}, - []string{path + "cppbench.contention", path + "cppbench.contention"}, - nil, - true, - nil, - "", - }, - { - "normalized different base and source", - []string{path + "cppbench.contention"}, - []string{path + "cppbench.small.contention"}, - nil, - true, - []WantSample{ - { - values: []int64{-229, -370}, - labels: map[string][]string{}, - }, - { - values: []int64{28, 0}, - labels: map[string][]string{}, - }, - { - values: []int64{57, 0}, - labels: map[string][]string{}, - }, - { - values: []int64{28, 80}, - labels: map[string][]string{}, - }, - { - values: []int64{28, 0}, - labels: map[string][]string{}, - }, - { - values: []int64{85, 287}, - labels: map[string][]string{}, - }, - }, - "", - }, - { - "not normalized diff base is same as source", - []string{path + "cppbench.contention"}, - nil, - []string{path + "cppbench.contention"}, - false, - []WantSample{ - { - values: []int64{2700, 608881724}, - labels: map[string][]string{}, - }, - { - values: []int64{100, 23992}, - labels: map[string][]string{}, - }, - { - values: []int64{200, 179943}, - labels: map[string][]string{}, - }, - { - values: []int64{100, 17778444}, - labels: map[string][]string{}, - }, - { - values: []int64{100, 75976}, - labels: map[string][]string{}, - }, - { - values: []int64{300, 63568134}, - labels: map[string][]string{}, - }, - { - values: []int64{-2700, -608881724}, - labels: map[string][]string{"pprof::base": {"true"}}, - }, - { - values: []int64{-100, -23992}, - labels: map[string][]string{"pprof::base": {"true"}}, - }, - { - values: []int64{-200, -179943}, - labels: map[string][]string{"pprof::base": {"true"}}, - }, - { - values: []int64{-100, -17778444}, - labels: map[string][]string{"pprof::base": {"true"}}, - }, - { - values: []int64{-100, -75976}, - labels: map[string][]string{"pprof::base": {"true"}}, - }, - { - values: []int64{-300, -63568134}, - labels: map[string][]string{"pprof::base": {"true"}}, - }, - }, - "", - }, - { - "diff_base and base both specified", - []string{path + "cppbench.contention"}, - []string{path + "cppbench.contention"}, - []string{path + "cppbench.contention"}, - false, - nil, - "-base and -diff_base flags cannot both be specified", - }, - } - - for _, tc := range testcases { - t.Run(tc.desc, func(t *testing.T) { - pprofVariables = baseVars.makeCopy() - f := testFlags{ - stringLists: map[string][]string{ - "base": tc.bases, - "diff_base": tc.diffBases, - }, - bools: map[string]bool{ - "normalize": tc.normalize, - }, - } - f.args = tc.sources - - o := setDefaults(&plugin.Options{ - UI: &proftest.TestUI{T: t, AllowRx: "Local symbolization failed|Some binary filenames not available"}, - Flagset: f, - HTTPTransport: transport.New(nil), - }) - src, _, err := parseFlags(o) - - if tc.wantErrorMsg != "" { - if err == nil { - t.Fatalf("got nil, want error %q", tc.wantErrorMsg) - } - - if gotErrMsg := err.Error(); gotErrMsg != tc.wantErrorMsg { - t.Fatalf("got error %q, want error %q", gotErrMsg, tc.wantErrorMsg) - } - return - } - - if err != nil { - t.Fatalf("got error %q, want no error", err) - } - - p, err := fetchProfiles(src, o) - - if err != nil { - t.Fatalf("got error %q, want no error", err) - } - - if got, want := len(p.Sample), len(tc.wantSamples); got != want { - t.Fatalf("got %d samples want %d", got, want) - } - - for i, sample := range p.Sample { - if !reflect.DeepEqual(tc.wantSamples[i].values, sample.Value) { - t.Errorf("for sample %d got values %v, want %v", i, sample.Value, tc.wantSamples[i]) - } - if !reflect.DeepEqual(tc.wantSamples[i].labels, sample.Label) { - t.Errorf("for sample %d got labels %v, want %v", i, sample.Label, tc.wantSamples[i].labels) - } - } - }) - } -} - -// mappingSources creates MappingSources map with a single item. -func mappingSources(key, source string, start uint64) plugin.MappingSources { - return plugin.MappingSources{ - key: []struct { - Source string - Start uint64 - }{ - {Source: source, Start: start}, - }, - } -} - -type httpTransport struct{} - -func (tr *httpTransport) RoundTrip(req *http.Request) (*http.Response, error) { - values := req.URL.Query() - file := values.Get("file") - - if file == "" { - return nil, fmt.Errorf("want .../file?profile, got %s", req.URL.String()) - } - - t := &http.Transport{} - t.RegisterProtocol("file", http.NewFileTransport(http.Dir("testdata/"))) - - c := &http.Client{Transport: t} - return c.Get("file:///" + file) -} - -func closedError() string { - if runtime.GOOS == "plan9" { - return "listen hungup" - } - return "use of closed" -} - -func TestHTTPSInsecure(t *testing.T) { - if runtime.GOOS == "nacl" || runtime.GOOS == "js" { - t.Skip("test assumes tcp available") - } - saveHome := os.Getenv(homeEnv()) - tempdir, err := ioutil.TempDir("", "home") - if err != nil { - t.Fatal("creating temp dir: ", err) - } - defer os.RemoveAll(tempdir) - - // pprof writes to $HOME/pprof by default which is not necessarily - // writeable (e.g. on a Debian buildd) so set $HOME to something we - // know we can write to for the duration of the test. - os.Setenv(homeEnv(), tempdir) - defer os.Setenv(homeEnv(), saveHome) - - baseVars := pprofVariables - pprofVariables = baseVars.makeCopy() - defer func() { pprofVariables = baseVars }() - - tlsCert, _, _ := selfSignedCert(t, "") - tlsConfig := &tls.Config{Certificates: []tls.Certificate{tlsCert}} - - l, err := tls.Listen("tcp", "localhost:0", tlsConfig) - if err != nil { - t.Fatalf("net.Listen: got error %v, want no error", err) - } - - donec := make(chan error, 1) - go func(donec chan<- error) { - donec <- http.Serve(l, nil) - }(donec) - defer func() { - if got, want := <-donec, closedError(); !strings.Contains(got.Error(), want) { - t.Fatalf("Serve got error %v, want %q", got, want) - } - }() - defer l.Close() - - outputTempFile, err := ioutil.TempFile("", "profile_output") - if err != nil { - t.Fatalf("Failed to create tempfile: %v", err) - } - defer os.Remove(outputTempFile.Name()) - defer outputTempFile.Close() - - address := "https+insecure://" + l.Addr().String() + "/debug/pprof/goroutine" - s := &source{ - Sources: []string{address}, - Seconds: 10, - Timeout: 10, - Symbolize: "remote", - } - o := &plugin.Options{ - Obj: &binutils.Binutils{}, - UI: &proftest.TestUI{T: t, AllowRx: "Saved profile in"}, - HTTPTransport: transport.New(nil), - } - o.Sym = &symbolizer.Symbolizer{Obj: o.Obj, UI: o.UI} - p, err := fetchProfiles(s, o) - if err != nil { - t.Fatal(err) - } - if len(p.SampleType) == 0 { - t.Fatalf("fetchProfiles(%s) got empty profile: len(p.SampleType)==0", address) - } - if len(p.Function) == 0 { - t.Fatalf("fetchProfiles(%s) got non-symbolized profile: len(p.Function)==0", address) - } - if err := checkProfileHasFunction(p, "TestHTTPSInsecure"); err != nil { - t.Fatalf("fetchProfiles(%s) %v", address, err) - } -} - -func TestHTTPSWithServerCertFetch(t *testing.T) { - if runtime.GOOS == "nacl" || runtime.GOOS == "js" { - t.Skip("test assumes tcp available") - } - saveHome := os.Getenv(homeEnv()) - tempdir, err := ioutil.TempDir("", "home") - if err != nil { - t.Fatal("creating temp dir: ", err) - } - defer os.RemoveAll(tempdir) - - // pprof writes to $HOME/pprof by default which is not necessarily - // writeable (e.g. on a Debian buildd) so set $HOME to something we - // know we can write to for the duration of the test. - os.Setenv(homeEnv(), tempdir) - defer os.Setenv(homeEnv(), saveHome) - - baseVars := pprofVariables - pprofVariables = baseVars.makeCopy() - defer func() { pprofVariables = baseVars }() - - cert, certBytes, keyBytes := selfSignedCert(t, "localhost") - cas := x509.NewCertPool() - cas.AppendCertsFromPEM(certBytes) - - tlsConfig := &tls.Config{ - RootCAs: cas, - Certificates: []tls.Certificate{cert}, - ClientAuth: tls.RequireAndVerifyClientCert, - ClientCAs: cas, - } - - l, err := tls.Listen("tcp", "localhost:0", tlsConfig) - if err != nil { - t.Fatalf("net.Listen: got error %v, want no error", err) - } - - donec := make(chan error, 1) - go func(donec chan<- error) { - donec <- http.Serve(l, nil) - }(donec) - defer func() { - if got, want := <-donec, closedError(); !strings.Contains(got.Error(), want) { - t.Fatalf("Serve got error %v, want %q", got, want) - } - }() - defer l.Close() - - outputTempFile, err := ioutil.TempFile("", "profile_output") - if err != nil { - t.Fatalf("Failed to create tempfile: %v", err) - } - defer os.Remove(outputTempFile.Name()) - defer outputTempFile.Close() - - // Get port from the address, so request to the server can be made using - // the host name specified in certificates. - _, portStr, err := net.SplitHostPort(l.Addr().String()) - if err != nil { - t.Fatalf("cannot get port from URL: %v", err) - } - address := "https://" + "localhost:" + portStr + "/debug/pprof/goroutine" - s := &source{ - Sources: []string{address}, - Seconds: 10, - Timeout: 10, - Symbolize: "remote", - } - - certTempFile, err := ioutil.TempFile("", "cert_output") - if err != nil { - t.Errorf("cannot create cert tempfile: %v", err) - } - defer os.Remove(certTempFile.Name()) - defer certTempFile.Close() - certTempFile.Write(certBytes) - - keyTempFile, err := ioutil.TempFile("", "key_output") - if err != nil { - t.Errorf("cannot create key tempfile: %v", err) - } - defer os.Remove(keyTempFile.Name()) - defer keyTempFile.Close() - keyTempFile.Write(keyBytes) - - f := &testFlags{ - strings: map[string]string{ - "tls_cert": certTempFile.Name(), - "tls_key": keyTempFile.Name(), - "tls_ca": certTempFile.Name(), - }, - } - o := &plugin.Options{ - Obj: &binutils.Binutils{}, - UI: &proftest.TestUI{T: t, AllowRx: "Saved profile in"}, - Flagset: f, - HTTPTransport: transport.New(f), - } - - o.Sym = &symbolizer.Symbolizer{Obj: o.Obj, UI: o.UI, Transport: o.HTTPTransport} - p, err := fetchProfiles(s, o) - if err != nil { - t.Fatal(err) - } - if len(p.SampleType) == 0 { - t.Fatalf("fetchProfiles(%s) got empty profile: len(p.SampleType)==0", address) - } - if len(p.Function) == 0 { - t.Fatalf("fetchProfiles(%s) got non-symbolized profile: len(p.Function)==0", address) - } - if err := checkProfileHasFunction(p, "TestHTTPSWithServerCertFetch"); err != nil { - t.Fatalf("fetchProfiles(%s) %v", address, err) - } -} - -func checkProfileHasFunction(p *profile.Profile, fname string) error { - for _, f := range p.Function { - if strings.Contains(f.Name, fname) { - return nil - } - } - return fmt.Errorf("got %s, want function %q", p.String(), fname) -} - -// selfSignedCert generates a self-signed certificate, and returns the -// generated certificate, and byte arrays containing the certificate and -// key associated with the certificate. -func selfSignedCert(t *testing.T, host string) (tls.Certificate, []byte, []byte) { - privKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) - if err != nil { - t.Fatalf("failed to generate private key: %v", err) - } - b, err := x509.MarshalECPrivateKey(privKey) - if err != nil { - t.Fatalf("failed to marshal private key: %v", err) - } - bk := pem.EncodeToMemory(&pem.Block{Type: "EC PRIVATE KEY", Bytes: b}) - - tmpl := x509.Certificate{ - SerialNumber: big.NewInt(1), - NotBefore: time.Now(), - NotAfter: time.Now().Add(10 * time.Minute), - IsCA: true, - DNSNames: []string{host}, - } - - b, err = x509.CreateCertificate(rand.Reader, &tmpl, &tmpl, privKey.Public(), privKey) - if err != nil { - t.Fatalf("failed to create cert: %v", err) - } - bc := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: b}) - - cert, err := tls.X509KeyPair(bc, bk) - if err != nil { - t.Fatalf("failed to create TLS key pair: %v", err) - } - return cert, bc, bk -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/flags.go b/src/cmd/vendor/github.com/google/pprof/internal/driver/flags.go index c48fb5cd2e..6ef1397852 100644 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/flags.go +++ b/src/cmd/vendor/github.com/google/pprof/internal/driver/flags.go @@ -1,3 +1,17 @@ +// Copyright 2018 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package driver import ( diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/interactive_test.go b/src/cmd/vendor/github.com/google/pprof/internal/driver/interactive_test.go deleted file mode 100644 index 758adf9bdc..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/interactive_test.go +++ /dev/null @@ -1,316 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package driver - -import ( - "fmt" - "math/rand" - "strings" - "testing" - - "github.com/google/pprof/internal/plugin" - "github.com/google/pprof/internal/proftest" - "github.com/google/pprof/internal/report" - "github.com/google/pprof/internal/transport" - "github.com/google/pprof/profile" -) - -func TestShell(t *testing.T) { - p := &profile.Profile{} - generateReportWrapper = checkValue - defer func() { generateReportWrapper = generateReport }() - - // Use test commands and variables to exercise interactive processing - var savedCommands commands - savedCommands, pprofCommands = pprofCommands, testCommands - defer func() { pprofCommands = savedCommands }() - - savedVariables := pprofVariables - defer func() { pprofVariables = savedVariables }() - - // Random interleave of independent scripts - pprofVariables = testVariables(savedVariables) - - // pass in HTTPTransport when setting defaults, because otherwise default - // transport will try to add flags to the default flag set. - o := setDefaults(&plugin.Options{HTTPTransport: transport.New(nil)}) - o.UI = newUI(t, interleave(script, 0)) - if err := interactive(p, o); err != nil { - t.Error("first attempt:", err) - } - // Random interleave of independent scripts - pprofVariables = testVariables(savedVariables) - o.UI = newUI(t, interleave(script, 1)) - if err := interactive(p, o); err != nil { - t.Error("second attempt:", err) - } - - // Random interleave of independent scripts with shortcuts - pprofVariables = testVariables(savedVariables) - var scScript []string - pprofShortcuts, scScript = makeShortcuts(interleave(script, 2), 1) - o.UI = newUI(t, scScript) - if err := interactive(p, o); err != nil { - t.Error("first shortcut attempt:", err) - } - - // Random interleave of independent scripts with shortcuts - pprofVariables = testVariables(savedVariables) - pprofShortcuts, scScript = makeShortcuts(interleave(script, 1), 2) - o.UI = newUI(t, scScript) - if err := interactive(p, o); err != nil { - t.Error("second shortcut attempt:", err) - } - - // Group with invalid value - pprofVariables = testVariables(savedVariables) - ui := &proftest.TestUI{ - T: t, - Input: []string{"cumulative=this"}, - AllowRx: `Unrecognized value for cumulative: "this". Use one of cum, flat`, - } - o.UI = ui - if err := interactive(p, o); err != nil { - t.Error("invalid group value:", err) - } - // Confirm error message written out once. - if ui.NumAllowRxMatches != 1 { - t.Errorf("want error message to be printed 1 time, got %v", ui.NumAllowRxMatches) - } - // Verify propagation of IO errors - pprofVariables = testVariables(savedVariables) - o.UI = newUI(t, []string{"**error**"}) - if err := interactive(p, o); err == nil { - t.Error("expected IO error, got nil") - } - -} - -var testCommands = commands{ - "check": &command{report.Raw, nil, nil, true, "", ""}, -} - -func testVariables(base variables) variables { - v := base.makeCopy() - - v["b"] = &variable{boolKind, "f", "", ""} - v["bb"] = &variable{boolKind, "f", "", ""} - v["i"] = &variable{intKind, "0", "", ""} - v["ii"] = &variable{intKind, "0", "", ""} - v["f"] = &variable{floatKind, "0", "", ""} - v["ff"] = &variable{floatKind, "0", "", ""} - v["s"] = &variable{stringKind, "", "", ""} - v["ss"] = &variable{stringKind, "", "", ""} - - v["ta"] = &variable{boolKind, "f", "radio", ""} - v["tb"] = &variable{boolKind, "f", "radio", ""} - v["tc"] = &variable{boolKind, "t", "radio", ""} - - return v -} - -// script contains sequences of commands to be executed for testing. Commands -// are split by semicolon and interleaved randomly, so they must be -// independent from each other. -var script = []string{ - "bb=true;bb=false;check bb=false;bb=yes;check bb=true", - "b=1;check b=true;b=n;check b=false", - "i=-1;i=-2;check i=-2;i=999999;check i=999999", - "check ii=0;ii=-1;check ii=-1;ii=100;check ii=100", - "f=-1;f=-2.5;check f=-2.5;f=0.0001;check f=0.0001", - "check ff=0;ff=-1.01;check ff=-1.01;ff=100;check ff=100", - "s=one;s=two;check s=two", - "ss=tree;check ss=tree;ss=;check ss;ss=forest;check ss=forest", - "ta=true;check ta=true;check tb=false;check tc=false;tb=1;check tb=true;check ta=false;check tc=false;tc=yes;check tb=false;check ta=false;check tc=true", -} - -func makeShortcuts(input []string, seed int) (shortcuts, []string) { - rand.Seed(int64(seed)) - - s := shortcuts{} - var output, chunk []string - for _, l := range input { - chunk = append(chunk, l) - switch rand.Intn(3) { - case 0: - // Create a macro for commands in 'chunk'. - macro := fmt.Sprintf("alias%d", len(s)) - s[macro] = chunk - output = append(output, macro) - chunk = nil - case 1: - // Append commands in 'chunk' by themselves. - output = append(output, chunk...) - chunk = nil - case 2: - // Accumulate commands into 'chunk' - } - } - output = append(output, chunk...) - return s, output -} - -func newUI(t *testing.T, input []string) plugin.UI { - return &proftest.TestUI{ - T: t, - Input: input, - } -} - -func checkValue(p *profile.Profile, cmd []string, vars variables, o *plugin.Options) error { - if len(cmd) != 2 { - return fmt.Errorf("expected len(cmd)==2, got %v", cmd) - } - - input := cmd[1] - args := strings.SplitN(input, "=", 2) - if len(args) == 0 { - return fmt.Errorf("unexpected empty input") - } - name, value := args[0], "" - if len(args) == 2 { - value = args[1] - } - - gotv := vars[name] - if gotv == nil { - return fmt.Errorf("Could not find variable named %s", name) - } - - if got := gotv.stringValue(); got != value { - return fmt.Errorf("Variable %s, want %s, got %s", name, value, got) - } - return nil -} - -func interleave(input []string, seed int) []string { - var inputs [][]string - for _, s := range input { - inputs = append(inputs, strings.Split(s, ";")) - } - rand.Seed(int64(seed)) - var output []string - for len(inputs) > 0 { - next := rand.Intn(len(inputs)) - output = append(output, inputs[next][0]) - if tail := inputs[next][1:]; len(tail) > 0 { - inputs[next] = tail - } else { - inputs = append(inputs[:next], inputs[next+1:]...) - } - } - return output -} - -func TestInteractiveCommands(t *testing.T) { - type interactiveTestcase struct { - input string - want map[string]string - } - - testcases := []interactiveTestcase{ - { - "top 10 --cum focus1 -ignore focus2", - map[string]string{ - "functions": "true", - "nodecount": "10", - "cum": "true", - "focus": "focus1|focus2", - "ignore": "ignore", - }, - }, - { - "top10 --cum focus1 -ignore focus2", - map[string]string{ - "functions": "true", - "nodecount": "10", - "cum": "true", - "focus": "focus1|focus2", - "ignore": "ignore", - }, - }, - { - "dot", - map[string]string{ - "functions": "true", - "nodecount": "80", - "cum": "false", - }, - }, - { - "tags -ignore1 -ignore2 focus1 >out", - map[string]string{ - "functions": "true", - "nodecount": "80", - "cum": "false", - "output": "out", - "tagfocus": "focus1", - "tagignore": "ignore1|ignore2", - }, - }, - { - "weblist find -test", - map[string]string{ - "functions": "false", - "addresses": "true", - "noinlines": "true", - "nodecount": "0", - "cum": "false", - "flat": "true", - "ignore": "test", - }, - }, - { - "callgrind fun -ignore >out", - map[string]string{ - "functions": "false", - "addresses": "true", - "nodecount": "0", - "cum": "false", - "flat": "true", - "output": "out", - }, - }, - { - "999", - nil, // Error - }, - } - - for _, tc := range testcases { - cmd, vars, err := parseCommandLine(strings.Fields(tc.input)) - if tc.want == nil && err != nil { - // Error expected - continue - } - if err != nil { - t.Errorf("failed on %q: %v", tc.input, err) - continue - } - - // Get report output format - c := pprofCommands[cmd[0]] - if c == nil { - t.Errorf("unexpected nil command") - } - vars = applyCommandOverrides(cmd[0], c.format, vars) - - for n, want := range tc.want { - if got := vars[n].stringValue(); got != want { - t.Errorf("failed on %q, cmd=%q, %s got %s, want %s", tc.input, cmd, n, got, want) - } - } - } -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/cppbench.contention b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/cppbench.contention deleted file mode 100644 index 66a64c950c..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/cppbench.contention +++ /dev/null @@ -1,24 +0,0 @@ ---- contentionz 1 --- -cycles/second = 3201000000 -sampling period = 100 -ms since reset = 16502830 -discarded samples = 0 - 19490304 27 @ 0xbccc97 0xc61202 0x42ed5f 0x42edc1 0x42e15a 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 768 1 @ 0xbccc97 0xa42dc7 0xa456e4 0x7fcdc2ff214e - 5760 2 @ 0xbccc97 0xb82b73 0xb82bcb 0xb87eab 0xb8814c 0x4e969d 0x4faa17 0x4fc5f6 0x4fd028 0x4fd230 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 569088 1 @ 0xbccc97 0xb82b73 0xb82bcb 0xb87f08 0xb8814c 0x42ed5f 0x42edc1 0x42e15a 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 2432 1 @ 0xbccc97 0xb82b73 0xb82bcb 0xb87eab 0xb8814c 0x7aa74c 0x7ab844 0x7ab914 0x79e9e9 0x79e326 0x4d299e 0x4d4b7b 0x4b7be8 0x4b7ff1 0x4d2dae 0x79e80a - 2034816 3 @ 0xbccc97 0xb82f0f 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e ---- Memory map: --- - 00400000-00fcb000: cppbench_server_main - 7fcdc231e000-7fcdc2321000: /libnss_cache-2.15.so - 7fcdc2522000-7fcdc252e000: /libnss_files-2.15.so - 7fcdc272f000-7fcdc28dd000: /libc-2.15.so - 7fcdc2ae7000-7fcdc2be2000: /libm-2.15.so - 7fcdc2de3000-7fcdc2dea000: /librt-2.15.so - 7fcdc2feb000-7fcdc3003000: /libpthread-2.15.so - 7fcdc3208000-7fcdc320a000: /libdl-2.15.so - 7fcdc340c000-7fcdc3415000: /libcrypt-2.15.so - 7fcdc3645000-7fcdc3669000: /ld-2.15.so - 7fff86bff000-7fff86c00000: [vdso] - ffffffffff600000-ffffffffff601000: [vsyscall] diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/cppbench.cpu b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/cppbench.cpu deleted file mode 100644 index 95c22e1e8d..0000000000 Binary files a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/cppbench.cpu and /dev/null differ diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/cppbench.small.contention b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/cppbench.small.contention deleted file mode 100644 index 230cd90200..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/cppbench.small.contention +++ /dev/null @@ -1,19 +0,0 @@ ---- contentionz 1 --- -cycles/second = 3201000000 -sampling period = 100 -ms since reset = 16502830 -discarded samples = 0 - 100 10 @ 0xbccc97 0xc61202 0x42ed5f 0x42edc1 0x42e15a 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e ---- Memory map: --- - 00400000-00fcb000: cppbench_server_main - 7fcdc231e000-7fcdc2321000: /libnss_cache-2.15.so - 7fcdc2522000-7fcdc252e000: /libnss_files-2.15.so - 7fcdc272f000-7fcdc28dd000: /libc-2.15.so - 7fcdc2ae7000-7fcdc2be2000: /libm-2.15.so - 7fcdc2de3000-7fcdc2dea000: /librt-2.15.so - 7fcdc2feb000-7fcdc3003000: /libpthread-2.15.so - 7fcdc3208000-7fcdc320a000: /libdl-2.15.so - 7fcdc340c000-7fcdc3415000: /libcrypt-2.15.so - 7fcdc3645000-7fcdc3669000: /ld-2.15.so - 7fff86bff000-7fff86c00000: [vdso] - ffffffffff600000-ffffffffff601000: [vsyscall] diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/file1000.src b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/file1000.src deleted file mode 100644 index b53eeca5ec..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/file1000.src +++ /dev/null @@ -1,17 +0,0 @@ -line1 -line2 -line3 -line4 -line5 -line6 -line7 -line8 -line9 -line0 -line1 -line2 -line3 -line4 -line5 - - diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/file2000.src b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/file2000.src deleted file mode 100644 index b53eeca5ec..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/file2000.src +++ /dev/null @@ -1,17 +0,0 @@ -line1 -line2 -line3 -line4 -line5 -line6 -line7 -line8 -line9 -line0 -line1 -line2 -line3 -line4 -line5 - - diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/file3000.src b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/file3000.src deleted file mode 100644 index b53eeca5ec..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/file3000.src +++ /dev/null @@ -1,17 +0,0 @@ -line1 -line2 -line3 -line4 -line5 -line6 -line7 -line8 -line9 -line0 -line1 -line2 -line3 -line4 -line5 - - diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/go.crc32.cpu b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/go.crc32.cpu deleted file mode 100644 index ce08313de0..0000000000 Binary files a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/go.crc32.cpu and /dev/null differ diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/go.nomappings.crash b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/go.nomappings.crash deleted file mode 100644 index 4915d5a2ae..0000000000 Binary files a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/go.nomappings.crash and /dev/null differ diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.contention.cum.files.dot b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.contention.cum.files.dot deleted file mode 100644 index 30cece7a37..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.contention.cum.files.dot +++ /dev/null @@ -1,10 +0,0 @@ -digraph "unnamed" { -node [style=filled fillcolor="#f8f8f8"] -subgraph cluster_L { "Build ID: buildid-contention" [shape=box fontsize=16 label="Build ID: buildid-contention\lComment #1\lComment #2\lType: delay\lShowing nodes accounting for 149.50ms, 100% of 149.50ms total\l"] } -N1 [label="file3000.src\n32.77ms (21.92%)\nof 149.50ms (100%)" id="node1" fontsize=20 shape=box tooltip="testdata/file3000.src (149.50ms)" color="#b20000" fillcolor="#edd5d5"] -N2 [label="file1000.src\n51.20ms (34.25%)" id="node2" fontsize=23 shape=box tooltip="testdata/file1000.src (51.20ms)" color="#b23100" fillcolor="#eddbd5"] -N3 [label="file2000.src\n65.54ms (43.84%)\nof 75.78ms (50.68%)" id="node3" fontsize=24 shape=box tooltip="testdata/file2000.src (75.78ms)" color="#b22000" fillcolor="#edd9d5"] -N1 -> N3 [label=" 75.78ms" weight=51 penwidth=3 color="#b22000" tooltip="testdata/file3000.src -> testdata/file2000.src (75.78ms)" labeltooltip="testdata/file3000.src -> testdata/file2000.src (75.78ms)"] -N1 -> N2 [label=" 40.96ms" weight=28 penwidth=2 color="#b23900" tooltip="testdata/file3000.src -> testdata/file1000.src (40.96ms)" labeltooltip="testdata/file3000.src -> testdata/file1000.src (40.96ms)"] -N3 -> N2 [label=" 10.24ms" weight=7 color="#b29775" tooltip="testdata/file2000.src -> testdata/file1000.src (10.24ms)" labeltooltip="testdata/file2000.src -> testdata/file1000.src (10.24ms)"] -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.contention.flat.addresses.dot.focus.ignore b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.contention.flat.addresses.dot.focus.ignore deleted file mode 100644 index 03fbbb5296..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.contention.flat.addresses.dot.focus.ignore +++ /dev/null @@ -1,9 +0,0 @@ -digraph "unnamed" { -node [style=filled fillcolor="#f8f8f8"] -subgraph cluster_L { "Build ID: buildid-contention" [shape=box fontsize=16 label="Build ID: buildid-contention\lComment #1\lComment #2\lType: delay\lActive filters:\l focus=[X1]000\l ignore=[X3]002\lShowing nodes accounting for 40.96ms, 27.40% of 149.50ms total\l"] } -N1 [label="0000000000001000\nline1000\nfile1000.src:1\n40.96ms (27.40%)" id="node1" fontsize=24 shape=box tooltip="0000000000001000 line1000 testdata/file1000.src:1 (40.96ms)" color="#b23900" fillcolor="#edddd5"] -N2 [label="0000000000003001\nline3000\nfile3000.src:5\n0 of 40.96ms (27.40%)" id="node2" fontsize=8 shape=box tooltip="0000000000003001 line3000 testdata/file3000.src:5 (40.96ms)" color="#b23900" fillcolor="#edddd5"] -N3 [label="0000000000003001\nline3001\nfile3000.src:3\n0 of 40.96ms (27.40%)" id="node3" fontsize=8 shape=box tooltip="0000000000003001 line3001 testdata/file3000.src:3 (40.96ms)" color="#b23900" fillcolor="#edddd5"] -N2 -> N3 [label=" 40.96ms\n (inline)" weight=28 penwidth=2 color="#b23900" tooltip="0000000000003001 line3000 testdata/file3000.src:5 -> 0000000000003001 line3001 testdata/file3000.src:3 (40.96ms)" labeltooltip="0000000000003001 line3000 testdata/file3000.src:5 -> 0000000000003001 line3001 testdata/file3000.src:3 (40.96ms)"] -N3 -> N1 [label=" 40.96ms" weight=28 penwidth=2 color="#b23900" tooltip="0000000000003001 line3001 testdata/file3000.src:3 -> 0000000000001000 line1000 testdata/file1000.src:1 (40.96ms)" labeltooltip="0000000000003001 line3001 testdata/file3000.src:3 -> 0000000000001000 line1000 testdata/file1000.src:1 (40.96ms)"] -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.call_tree.callgrind b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.call_tree.callgrind deleted file mode 100644 index e2286f631a..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.call_tree.callgrind +++ /dev/null @@ -1,99 +0,0 @@ -positions: instr line -events: cpu(ms) - -ob=(1) /path/to/testbinary -fl=(1) testdata/file1000.src -fn=(1) line1000 -0x1000 1 1000 -* 1 100 - -ob=(1) -fl=(2) testdata/file2000.src -fn=(2) line2001 -+4096 9 10 - -ob=(1) -fl=(3) testdata/file3000.src -fn=(3) line3002 -+4096 2 10 -cfl=(2) -cfn=(4) line2000 [1/2] -calls=0 * 4 -* * 1000 - -ob=(1) -fl=(2) -fn=(5) line2000 --4096 4 0 -cfl=(2) -cfn=(6) line2001 [2/2] -calls=0 -4096 9 -* * 1000 -* 4 0 -cfl=(2) -cfn=(7) line2001 [1/2] -calls=0 * 9 -* * 10 - -ob=(1) -fl=(2) -fn=(2) -* 9 0 -cfl=(1) -cfn=(8) line1000 [1/2] -calls=0 -4096 1 -* * 1000 - -ob=(1) -fl=(3) -fn=(9) line3000 -+4096 6 0 -cfl=(3) -cfn=(10) line3001 [1/2] -calls=0 +4096 5 -* * 1010 - -ob=(1) -fl=(3) -fn=(11) line3001 -* 5 0 -cfl=(3) -cfn=(12) line3002 [1/2] -calls=0 * 2 -* * 1010 - -ob=(1) -fl=(3) -fn=(9) -+1 9 0 -cfl=(3) -cfn=(13) line3001 [2/2] -calls=0 +1 8 -* * 100 - -ob=(1) -fl=(3) -fn=(11) -* 8 0 -cfl=(1) -cfn=(14) line1000 [2/2] -calls=0 -8193 1 -* * 100 - -ob=(1) -fl=(3) -fn=(9) -+1 9 0 -cfl=(3) -cfn=(15) line3002 [2/2] -calls=0 +1 5 -* * 10 - -ob=(1) -fl=(3) -fn=(3) -* 5 0 -cfl=(2) -cfn=(16) line2000 [2/2] -calls=0 -4098 4 -* * 10 diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.callgrind b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.callgrind deleted file mode 100644 index 0b0499638c..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.callgrind +++ /dev/null @@ -1,88 +0,0 @@ -positions: instr line -events: cpu(ms) - -ob=(1) /path/to/testbinary -fl=(1) testdata/file1000.src -fn=(1) line1000 -0x1000 1 1100 - -ob=(1) -fl=(2) testdata/file2000.src -fn=(2) line2001 -+4096 9 10 -cfl=(1) -cfn=(1) -calls=0 * 1 -* * 1000 - -ob=(1) -fl=(3) testdata/file3000.src -fn=(3) line3002 -+4096 2 10 -cfl=(2) -cfn=(4) line2000 -calls=0 * 4 -* * 1000 - -ob=(1) -fl=(2) -fn=(4) --4096 4 0 -cfl=(2) -cfn=(2) -calls=0 -4096 9 -* * 1010 - -ob=(1) -fl=(3) -fn=(5) line3000 -+4096 6 0 -cfl=(3) -cfn=(6) line3001 -calls=0 +4096 5 -* * 1010 - -ob=(1) -fl=(3) -fn=(6) -* 5 0 -cfl=(3) -cfn=(3) -calls=0 * 2 -* * 1010 - -ob=(1) -fl=(3) -fn=(5) -+1 9 0 -cfl=(3) -cfn=(6) -calls=0 +1 8 -* * 100 - -ob=(1) -fl=(3) -fn=(6) -* 8 0 -cfl=(1) -cfn=(1) -calls=0 -8193 1 -* * 100 - -ob=(1) -fl=(3) -fn=(5) -+1 9 0 -cfl=(3) -cfn=(3) -calls=0 +1 5 -* * 10 - -ob=(1) -fl=(3) -fn=(3) -* 5 0 -cfl=(2) -cfn=(4) -calls=0 -4098 4 -* * 10 diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.comments b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.comments deleted file mode 100644 index e6d9824e1b..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.comments +++ /dev/null @@ -1 +0,0 @@ -some-comment diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.cum.lines.text.focus.hide b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.cum.lines.text.focus.hide deleted file mode 100644 index f0d928d76f..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.cum.lines.text.focus.hide +++ /dev/null @@ -1,8 +0,0 @@ -Active filters: - focus=[12]00 - hide=line[X3]0 -Showing nodes accounting for 1.11s, 99.11% of 1.12s total - flat flat% sum% cum cum% - 1.10s 98.21% 98.21% 1.10s 98.21% line1000 testdata/file1000.src:1 - 0 0% 98.21% 1.01s 90.18% line2000 testdata/file2000.src:4 - 0.01s 0.89% 99.11% 1.01s 90.18% line2001 testdata/file2000.src:9 (inline) diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.cum.lines.text.hide b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.cum.lines.text.hide deleted file mode 100644 index bf503a57db..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.cum.lines.text.hide +++ /dev/null @@ -1,7 +0,0 @@ -Active filters: - hide=line[X3]0 -Showing nodes accounting for 1.11s, 99.11% of 1.12s total - flat flat% sum% cum cum% - 1.10s 98.21% 98.21% 1.10s 98.21% line1000 testdata/file1000.src:1 - 0 0% 98.21% 1.01s 90.18% line2000 testdata/file2000.src:4 - 0.01s 0.89% 99.11% 1.01s 90.18% line2001 testdata/file2000.src:9 (inline) diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.cum.lines.text.show b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.cum.lines.text.show deleted file mode 100644 index 7604cb8d7b..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.cum.lines.text.show +++ /dev/null @@ -1,7 +0,0 @@ -Active filters: - show=[12]00 -Showing nodes accounting for 1.11s, 99.11% of 1.12s total - flat flat% sum% cum cum% - 1.10s 98.21% 98.21% 1.10s 98.21% line1000 testdata/file1000.src:1 - 0 0% 98.21% 1.01s 90.18% line2000 testdata/file2000.src:4 - 0.01s 0.89% 99.11% 1.01s 90.18% line2001 testdata/file2000.src:9 (inline) diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.cum.lines.topproto.hide b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.cum.lines.topproto.hide deleted file mode 100644 index 94b9be83df..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.cum.lines.topproto.hide +++ /dev/null @@ -1,5 +0,0 @@ -Active filters: - hide=mangled[X3]0 -Showing nodes accounting for 1s, 100% of 1s total - flat flat% sum% cum cum% - 1s 100% 100% 1s 100% mangled1000 testdata/file1000.src:1 diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.cum.lines.tree.show_from b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.cum.lines.tree.show_from deleted file mode 100644 index 112b49b383..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.cum.lines.tree.show_from +++ /dev/null @@ -1,16 +0,0 @@ -Active filters: - show_from=line2 -Showing nodes accounting for 1.01s, 90.18% of 1.12s total -----------------------------------------------------------+------------- - flat flat% sum% cum cum% calls calls% + context -----------------------------------------------------------+------------- - 0 0% 0% 1.01s 90.18% | line2000 testdata/file2000.src:4 - 1.01s 100% | line2001 testdata/file2000.src:9 (inline) -----------------------------------------------------------+------------- - 1.01s 100% | line2000 testdata/file2000.src:4 (inline) - 0.01s 0.89% 0.89% 1.01s 90.18% | line2001 testdata/file2000.src:9 - 1s 99.01% | line1000 testdata/file1000.src:1 -----------------------------------------------------------+------------- - 1s 100% | line2001 testdata/file2000.src:9 - 1s 89.29% 90.18% 1s 89.29% | line1000 testdata/file1000.src:1 -----------------------------------------------------------+------------- diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.addresses.disasm b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.addresses.disasm deleted file mode 100644 index e1df7b1b64..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.addresses.disasm +++ /dev/null @@ -1,14 +0,0 @@ -Total: 1.12s -ROUTINE ======================== line1000 - 1.10s 1.10s (flat, cum) 98.21% of Total - 1.10s 1.10s 1000: instruction one ;line1000 file1000.src:1 - . . 1001: instruction two ;file1000.src:1 - . . 1002: instruction three ;file1000.src:2 - . . 1003: instruction four ;file1000.src:1 -ROUTINE ======================== line3000 - 10ms 1.12s (flat, cum) 100% of Total - 10ms 1.01s 3000: instruction one ;line3000 file3000.src:6 - . 100ms 3001: instruction two ;line3000 file3000.src:9 - . 10ms 3002: instruction three - . . 3003: instruction four - . . 3004: instruction five diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.addresses.noinlines.text b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.addresses.noinlines.text deleted file mode 100644 index d53c44dad9..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.addresses.noinlines.text +++ /dev/null @@ -1,7 +0,0 @@ -Showing nodes accounting for 1.12s, 100% of 1.12s total -Dropped 1 node (cum <= 0.06s) - flat flat% sum% cum cum% - 1.10s 98.21% 98.21% 1.10s 98.21% 0000000000001000 line1000 testdata/file1000.src:1 - 0.01s 0.89% 99.11% 1.01s 90.18% 0000000000002000 line2000 testdata/file2000.src:4 - 0.01s 0.89% 100% 1.01s 90.18% 0000000000003000 line3000 testdata/file3000.src:6 - 0 0% 100% 0.10s 8.93% 0000000000003001 line3000 testdata/file3000.src:9 diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.addresses.weblist b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.addresses.weblist deleted file mode 100644 index 0284292745..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.addresses.weblist +++ /dev/null @@ -1,106 +0,0 @@ - - - - - -Pprof listing - - - - - -
    File: testbinary
    -Type: cpu
    -Duration: 10s, Total samples = 1.12s (11.20%)
    Total: 1.12s

    line1000

    testdata/file1000.src

    -
    -  Total:       1.10s      1.10s (flat, cum) 98.21%
    -      1        1.10s      1.10s           line1                1.10s      1.10s     1000:     instruction one                                                              file1000.src:1
    -                   .          .     1001:     instruction two                                                              file1000.src:1
    -                                     â‹®
    -                   .          .     1003:     instruction four                                                             file1000.src:1
    -
    -      2            .          .           line2                    .          .     1002:     instruction three                                                            file1000.src:2
    -
    -      3            .          .           line3 
    -      4            .          .           line4 
    -      5            .          .           line5 
    -      6            .          .           line6 
    -      7            .          .           line7 
    -
    -

    line3000

    testdata/file3000.src

    -
    -  Total:        10ms      1.12s (flat, cum)   100%
    -      1            .          .           line1 
    -      2            .          .           line2 
    -      3            .          .           line3 
    -      4            .          .           line4 
    -      5            .          .           line5 
    -      6         10ms      1.01s           line6                 10ms      1.01s     3000:     instruction one                                                              file3000.src:6
    -
    -      7            .          .           line7 
    -      8            .          .           line8 
    -      9            .      110ms           line9                    .      100ms     3001:     instruction two                                                              file3000.src:9
    -                   .       10ms     3002:     instruction three                                                            file3000.src:9
    -                   .          .     3003:     instruction four                                                             
    -                   .          .     3004:     instruction five                                                             
    -
    -     10            .          .           line0 
    -     11            .          .           line1 
    -     12            .          .           line2 
    -     13            .          .           line3 
    -     14            .          .           line4 
    -
    - - - - diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.filefunctions.noinlines.text b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.filefunctions.noinlines.text deleted file mode 100644 index 88fb760759..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.filefunctions.noinlines.text +++ /dev/null @@ -1,5 +0,0 @@ -Showing nodes accounting for 1.12s, 100% of 1.12s total - flat flat% sum% cum cum% - 1.10s 98.21% 98.21% 1.10s 98.21% line1000 testdata/file1000.src - 0.01s 0.89% 99.11% 1.01s 90.18% line2000 testdata/file2000.src - 0.01s 0.89% 100% 1.12s 100% line3000 testdata/file3000.src diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.functions.call_tree.dot b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.functions.call_tree.dot deleted file mode 100644 index e854b5d6fa..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.functions.call_tree.dot +++ /dev/null @@ -1,21 +0,0 @@ -digraph "testbinary" { -node [style=filled fillcolor="#f8f8f8"] -subgraph cluster_L { "File: testbinary" [shape=box fontsize=16 label="File: testbinary\lType: cpu\lDuration: 10s, Total samples = 1.12s (11.20%)\lShowing nodes accounting for 1.11s, 99.11% of 1.12s total\lDropped 3 nodes (cum <= 0.06s)\l" tooltip="testbinary"] } -N1 [label="line1000\n1s (89.29%)" id="node1" fontsize=24 shape=box tooltip="line1000 (1s)" color="#b20500" fillcolor="#edd6d5"] -N1_0 [label = "key1:tag1\nkey2:tag1" id="N1_0" fontsize=8 shape=box3d tooltip="1s"] -N1 -> N1_0 [label=" 1s" weight=100 tooltip="1s" labeltooltip="1s"] -N2 [label="line3000\n0 of 1.12s (100%)" id="node2" fontsize=8 shape=box tooltip="line3000 (1.12s)" color="#b20000" fillcolor="#edd5d5"] -N3 [label="line3001\n0 of 1.11s (99.11%)" id="node3" fontsize=8 shape=box tooltip="line3001 (1.11s)" color="#b20000" fillcolor="#edd5d5"] -N4 [label="line1000\n0.10s (8.93%)" id="node4" fontsize=14 shape=box tooltip="line1000 (0.10s)" color="#b28b62" fillcolor="#ede8e2"] -N4_0 [label = "key1:tag2\nkey3:tag2" id="N4_0" fontsize=8 shape=box3d tooltip="0.10s"] -N4 -> N4_0 [label=" 0.10s" weight=100 tooltip="0.10s" labeltooltip="0.10s"] -N5 [label="line3002\n0.01s (0.89%)\nof 1.01s (90.18%)" id="node5" fontsize=10 shape=box tooltip="line3002 (1.01s)" color="#b20500" fillcolor="#edd6d5"] -N6 [label="line2000\n0 of 1s (89.29%)" id="node6" fontsize=8 shape=box tooltip="line2000 (1s)" color="#b20500" fillcolor="#edd6d5"] -N7 [label="line2001\n0 of 1s (89.29%)" id="node7" fontsize=8 shape=box tooltip="line2001 (1s)" color="#b20500" fillcolor="#edd6d5"] -N2 -> N3 [label=" 1.11s\n (inline)" weight=100 penwidth=5 color="#b20000" tooltip="line3000 -> line3001 (1.11s)" labeltooltip="line3000 -> line3001 (1.11s)"] -N3 -> N5 [label=" 1.01s\n (inline)" weight=91 penwidth=5 color="#b20500" tooltip="line3001 -> line3002 (1.01s)" labeltooltip="line3001 -> line3002 (1.01s)"] -N6 -> N7 [label=" 1s\n (inline)" weight=90 penwidth=5 color="#b20500" tooltip="line2000 -> line2001 (1s)" labeltooltip="line2000 -> line2001 (1s)"] -N7 -> N1 [label=" 1s" weight=90 penwidth=5 color="#b20500" tooltip="line2001 -> line1000 (1s)" labeltooltip="line2001 -> line1000 (1s)"] -N5 -> N6 [label=" 1s" weight=90 penwidth=5 color="#b20500" tooltip="line3002 -> line2000 (1s)" labeltooltip="line3002 -> line2000 (1s)"] -N3 -> N4 [label=" 0.10s" weight=9 color="#b28b62" tooltip="line3001 -> line1000 (0.10s)" labeltooltip="line3001 -> line1000 (0.10s)"] -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.functions.dot b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.functions.dot deleted file mode 100644 index f0a5226b89..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.functions.dot +++ /dev/null @@ -1,20 +0,0 @@ -digraph "testbinary" { -node [style=filled fillcolor="#f8f8f8"] -subgraph cluster_L { "File: testbinary" [shape=box fontsize=16 label="File: testbinary\lType: cpu\lDuration: 10s, Total samples = 1.12s (11.20%)\lShowing nodes accounting for 1.12s, 100% of 1.12s total\l" tooltip="testbinary"] } -N1 [label="line1000\n1.10s (98.21%)" id="node1" fontsize=24 shape=box tooltip="line1000 (1.10s)" color="#b20000" fillcolor="#edd5d5"] -N1_0 [label = "key1:tag1\nkey2:tag1" id="N1_0" fontsize=8 shape=box3d tooltip="1s"] -N1 -> N1_0 [label=" 1s" weight=100 tooltip="1s" labeltooltip="1s"] -N1_1 [label = "key1:tag2\nkey3:tag2" id="N1_1" fontsize=8 shape=box3d tooltip="0.10s"] -N1 -> N1_1 [label=" 0.10s" weight=100 tooltip="0.10s" labeltooltip="0.10s"] -N2 [label="line3000\n0 of 1.12s (100%)" id="node2" fontsize=8 shape=box tooltip="line3000 (1.12s)" color="#b20000" fillcolor="#edd5d5"] -N3 [label="line3001\n0 of 1.11s (99.11%)" id="node3" fontsize=8 shape=box tooltip="line3001 (1.11s)" color="#b20000" fillcolor="#edd5d5"] -N4 [label="line3002\n0.01s (0.89%)\nof 1.02s (91.07%)" id="node4" fontsize=10 shape=box tooltip="line3002 (1.02s)" color="#b20400" fillcolor="#edd6d5"] -N5 [label="line2001\n0.01s (0.89%)\nof 1.01s (90.18%)" id="node5" fontsize=10 shape=box tooltip="line2001 (1.01s)" color="#b20500" fillcolor="#edd6d5"] -N6 [label="line2000\n0 of 1.01s (90.18%)" id="node6" fontsize=8 shape=box tooltip="line2000 (1.01s)" color="#b20500" fillcolor="#edd6d5"] -N2 -> N3 [label=" 1.11s\n (inline)" weight=100 penwidth=5 color="#b20000" tooltip="line3000 -> line3001 (1.11s)" labeltooltip="line3000 -> line3001 (1.11s)"] -N6 -> N5 [label=" 1.01s\n (inline)" weight=91 penwidth=5 color="#b20500" tooltip="line2000 -> line2001 (1.01s)" labeltooltip="line2000 -> line2001 (1.01s)"] -N3 -> N4 [label=" 1.01s\n (inline)" weight=91 penwidth=5 color="#b20500" tooltip="line3001 -> line3002 (1.01s)" labeltooltip="line3001 -> line3002 (1.01s)"] -N4 -> N6 [label=" 1.01s" weight=91 penwidth=5 color="#b20500" tooltip="line3002 -> line2000 (1.01s)" labeltooltip="line3002 -> line2000 (1.01s)"] -N5 -> N1 [label=" 1s" weight=90 penwidth=5 color="#b20500" tooltip="line2001 -> line1000 (1s)" labeltooltip="line2001 -> line1000 (1s)"] -N3 -> N1 [label=" 0.10s" weight=9 color="#b28b62" tooltip="line3001 -> line1000 (0.10s)" labeltooltip="line3001 -> line1000 (0.10s)"] -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.functions.noinlines.text b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.functions.noinlines.text deleted file mode 100644 index 493b4912de..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.functions.noinlines.text +++ /dev/null @@ -1,5 +0,0 @@ -Showing nodes accounting for 1.12s, 100% of 1.12s total - flat flat% sum% cum cum% - 1.10s 98.21% 98.21% 1.10s 98.21% line1000 - 0.01s 0.89% 99.11% 1.01s 90.18% line2000 - 0.01s 0.89% 100% 1.12s 100% line3000 diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.functions.text b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.functions.text deleted file mode 100644 index 66e4189e0a..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.flat.functions.text +++ /dev/null @@ -1,8 +0,0 @@ -Showing nodes accounting for 1.12s, 100% of 1.12s total - flat flat% sum% cum cum% - 1.10s 98.21% 98.21% 1.10s 98.21% line1000 - 0.01s 0.89% 99.11% 1.01s 90.18% line2001 (inline) - 0.01s 0.89% 100% 1.02s 91.07% line3002 (inline) - 0 0% 100% 1.01s 90.18% line2000 - 0 0% 100% 1.12s 100% line3000 - 0 0% 100% 1.11s 99.11% line3001 (inline) diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.lines.topproto b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.lines.topproto deleted file mode 100644 index 33bf6814a4..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.lines.topproto +++ /dev/null @@ -1,3 +0,0 @@ -Showing nodes accounting for 1s, 100% of 1s total - flat flat% sum% cum cum% - 1s 100% 100% 1s 100% mangled1000 testdata/file1000.src:1 diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.peek b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.peek deleted file mode 100644 index 3b8a3537b4..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.peek +++ /dev/null @@ -1,13 +0,0 @@ -Showing nodes accounting for 1.12s, 100% of 1.12s total -----------------------------------------------------------+------------- - flat flat% sum% cum cum% calls calls% + context -----------------------------------------------------------+------------- - 1.01s 100% | line2000 (inline) - 0.01s 0.89% 0.89% 1.01s 90.18% | line2001 - 1s 99.01% | line1000 -----------------------------------------------------------+------------- - 1.11s 100% | line3000 (inline) - 0 0% 0.89% 1.11s 99.11% | line3001 - 1.01s 90.99% | line3002 (inline) - 0.10s 9.01% | line1000 -----------------------------------------------------------+------------- diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.tags b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.tags deleted file mode 100644 index 5998b5ba5b..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.tags +++ /dev/null @@ -1,13 +0,0 @@ - key1: Total 1.1s - 1.0s (89.29%): tag1 - 100.0ms ( 8.93%): tag2 - 10.0ms ( 0.89%): tag3 - 10.0ms ( 0.89%): tag4 - - key2: Total 1.0s - 1.0s (99.02%): tag1 - 10.0ms ( 0.98%): tag2 - - key3: Total 100.0ms - 100.0ms ( 100%): tag2 - diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.tags.focus.ignore b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.tags.focus.ignore deleted file mode 100644 index 9b99d4368c..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.tags.focus.ignore +++ /dev/null @@ -1,6 +0,0 @@ - key1: Total 100.0ms - 100.0ms ( 100%): tag2 - - key3: Total 100.0ms - 100.0ms ( 100%): tag2 - diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.traces b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.traces deleted file mode 100644 index d9637c0e42..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpu.traces +++ /dev/null @@ -1,32 +0,0 @@ -File: testbinary -Type: cpu -Duration: 10s, Total samples = 1.12s (11.20%) ------------+------------------------------------------------------- - key1: tag1 - key2: tag1 - 1s line1000 - line2001 - line2000 - line3002 - line3001 - line3000 ------------+------------------------------------------------------- - key1: tag2 - key3: tag2 - 100ms line1000 - line3001 - line3000 ------------+------------------------------------------------------- - key1: tag3 - key2: tag2 - 10ms line2001 - line2000 - line3002 - line3000 ------------+------------------------------------------------------- - key1: tag4 - key2: tag1 - 10ms line3002 - line3001 - line3000 ------------+------------------------------------------------------- diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpusmall.flat.addresses.tree b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpusmall.flat.addresses.tree deleted file mode 100644 index 606db2b887..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.cpusmall.flat.addresses.tree +++ /dev/null @@ -1,17 +0,0 @@ -Showing nodes accounting for 4s, 100% of 4s total -Showing top 4 nodes out of 5 -----------------------------------------------------------+------------- - flat flat% sum% cum cum% calls calls% + context -----------------------------------------------------------+------------- - 1s 100% | 0000000000003000 [testbinary] - 1s 25.00% 25.00% 1s 25.00% | 0000000000001000 [testbinary] -----------------------------------------------------------+------------- - 1s 25.00% 50.00% 2s 50.00% | 0000000000003000 [testbinary] - 1s 50.00% | 0000000000001000 [testbinary] -----------------------------------------------------------+------------- - 1s 100% | 0000000000005000 [testbinary] - 1s 25.00% 75.00% 1s 25.00% | 0000000000004000 [testbinary] -----------------------------------------------------------+------------- - 1s 25.00% 100% 2s 50.00% | 0000000000005000 [testbinary] - 1s 50.00% | 0000000000004000 [testbinary] -----------------------------------------------------------+------------- diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.callgrind b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.callgrind deleted file mode 100644 index bfd96cb7de..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.callgrind +++ /dev/null @@ -1,88 +0,0 @@ -positions: instr line -events: inuse_space(MB) - -ob= -fl=(1) testdata/file2000.src -fn=(1) line2001 -0x2000 2 62 -cfl=(2) testdata/file1000.src -cfn=(2) line1000 -calls=0 0x1000 1 -* * 0 - -ob= -fl=(3) testdata/file3000.src -fn=(3) line3002 -+4096 3 31 -cfl=(1) -cfn=(4) line2000 -calls=0 * 3 -* * 0 - -ob= -fl=(2) -fn=(2) --8192 1 4 - -ob= -fl=(1) -fn=(4) -+4096 3 0 -cfl=(1) -cfn=(1) -calls=0 +4096 2 -* * 63 - -ob= -fl=(3) -fn=(5) line3000 -+4096 4 0 -cfl=(3) -cfn=(6) line3001 -calls=0 +4096 2 -* * 32 - -ob= -fl=(3) -fn=(6) -* 2 0 -cfl=(3) -cfn=(3) -calls=0 * 3 -* * 32 - -ob= -fl=(3) -fn=(5) -+1 4 0 -cfl=(3) -cfn=(6) -calls=0 +1 2 -* * 3 - -ob= -fl=(3) -fn=(6) -* 2 0 -cfl=(2) -cfn=(2) -calls=0 -8193 1 -* * 3 - -ob= -fl=(3) -fn=(5) -+1 4 0 -cfl=(3) -cfn=(3) -calls=0 +1 3 -* * 62 - -ob= -fl=(3) -fn=(3) -* 3 0 -cfl=(1) -cfn=(4) -calls=0 -4098 3 -* * 62 diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.comments b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.comments deleted file mode 100644 index 6eca2fb794..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.comments +++ /dev/null @@ -1,2 +0,0 @@ -comment -#hidden comment diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.cum.lines.tree.focus b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.cum.lines.tree.focus deleted file mode 100644 index 9d4ba72b1f..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.cum.lines.tree.focus +++ /dev/null @@ -1,21 +0,0 @@ -Active filters: - focus=[24]00 -Showing nodes accounting for 62.50MB, 63.37% of 98.63MB total -Dropped 2 nodes (cum <= 4.93MB) -----------------------------------------------------------+------------- - flat flat% sum% cum cum% calls calls% + context -----------------------------------------------------------+------------- - 63.48MB 100% | line3002 testdata/file3000.src:3 - 0 0% 0% 63.48MB 64.36% | line2000 testdata/file2000.src:3 - 63.48MB 100% | line2001 testdata/file2000.src:2 (inline) -----------------------------------------------------------+------------- - 63.48MB 100% | line2000 testdata/file2000.src:3 (inline) - 62.50MB 63.37% 63.37% 63.48MB 64.36% | line2001 testdata/file2000.src:2 -----------------------------------------------------------+------------- - 0 0% 63.37% 63.48MB 64.36% | line3000 testdata/file3000.src:4 - 63.48MB 100% | line3002 testdata/file3000.src:3 (inline) -----------------------------------------------------------+------------- - 63.48MB 100% | line3000 testdata/file3000.src:4 (inline) - 0 0% 63.37% 63.48MB 64.36% | line3002 testdata/file3000.src:3 - 63.48MB 100% | line2000 testdata/file2000.src:3 -----------------------------------------------------------+------------- diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.cum.relative_percentages.tree.focus b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.cum.relative_percentages.tree.focus deleted file mode 100644 index c2d11838fe..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.cum.relative_percentages.tree.focus +++ /dev/null @@ -1,21 +0,0 @@ -Active filters: - focus=[24]00 -Showing nodes accounting for 62.50MB, 98.46% of 63.48MB total -Dropped 2 nodes (cum <= 3.17MB) -----------------------------------------------------------+------------- - flat flat% sum% cum cum% calls calls% + context -----------------------------------------------------------+------------- - 63.48MB 100% | line3002 - 0 0% 0% 63.48MB 100% | line2000 - 63.48MB 100% | line2001 (inline) -----------------------------------------------------------+------------- - 63.48MB 100% | line2000 (inline) - 62.50MB 98.46% 98.46% 63.48MB 100% | line2001 -----------------------------------------------------------+------------- - 0 0% 98.46% 63.48MB 100% | line3000 - 63.48MB 100% | line3002 (inline) -----------------------------------------------------------+------------- - 63.48MB 100% | line3000 (inline) - 0 0% 98.46% 63.48MB 100% | line3002 - 63.48MB 100% | line2000 -----------------------------------------------------------+------------- diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.flat.files.seconds.text b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.flat.files.seconds.text deleted file mode 100644 index b9571ef4ec..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.flat.files.seconds.text +++ /dev/null @@ -1,2 +0,0 @@ -Showing nodes accounting for 0, 0% of 0 total - flat flat% sum% cum cum% diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.flat.files.text b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.flat.files.text deleted file mode 100644 index fd536df573..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.flat.files.text +++ /dev/null @@ -1,5 +0,0 @@ -Showing nodes accounting for 93.75MB, 95.05% of 98.63MB total -Dropped 1 node (cum <= 4.93MB) - flat flat% sum% cum cum% - 62.50MB 63.37% 63.37% 63.48MB 64.36% testdata/file2000.src - 31.25MB 31.68% 95.05% 98.63MB 100% testdata/file3000.src diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.flat.files.text.focus b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.flat.files.text.focus deleted file mode 100644 index 20a503f9b4..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.flat.files.text.focus +++ /dev/null @@ -1,8 +0,0 @@ -Active filters: - focus=[12]00 - taghide=[X3]00 -Showing nodes accounting for 67.38MB, 68.32% of 98.63MB total - flat flat% sum% cum cum% - 62.50MB 63.37% 63.37% 63.48MB 64.36% testdata/file2000.src - 4.88MB 4.95% 68.32% 4.88MB 4.95% testdata/file1000.src - 0 0% 68.32% 67.38MB 68.32% testdata/file3000.src diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.flat.inuse_objects.text b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.flat.inuse_objects.text deleted file mode 100644 index 929461a3c1..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.flat.inuse_objects.text +++ /dev/null @@ -1,8 +0,0 @@ -Showing nodes accounting for 150, 100% of 150 total - flat flat% sum% cum cum% - 80 53.33% 53.33% 130 86.67% line3002 (inline) - 40 26.67% 80.00% 50 33.33% line2001 (inline) - 30 20.00% 100% 30 20.00% line1000 - 0 0% 100% 50 33.33% line2000 - 0 0% 100% 150 100% line3000 - 0 0% 100% 110 73.33% line3001 (inline) diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.flat.inuse_space.dot.focus b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.flat.inuse_space.dot.focus deleted file mode 100644 index 909a824f1e..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.flat.inuse_space.dot.focus +++ /dev/null @@ -1,13 +0,0 @@ -digraph "unnamed" { -node [style=filled fillcolor="#f8f8f8"] -subgraph cluster_L { "Build ID: buildid" [shape=box fontsize=16 label="Build ID: buildid\lcomment\lType: inuse_space\lActive filters:\l tagfocus=1mb:2gb\lShowing nodes accounting for 62.50MB, 63.37% of 98.63MB total\l"] } -N1 [label="line2001\n62.50MB (63.37%)" id="node1" fontsize=24 shape=box tooltip="line2001 (62.50MB)" color="#b21600" fillcolor="#edd8d5"] -NN1_0 [label = "1.56MB" id="NN1_0" fontsize=8 shape=box3d tooltip="62.50MB"] -N1 -> NN1_0 [label=" 62.50MB" weight=100 tooltip="62.50MB" labeltooltip="62.50MB"] -N2 [label="line3000\n0 of 62.50MB (63.37%)" id="node2" fontsize=8 shape=box tooltip="line3000 (62.50MB)" color="#b21600" fillcolor="#edd8d5"] -N3 [label="line2000\n0 of 62.50MB (63.37%)" id="node3" fontsize=8 shape=box tooltip="line2000 (62.50MB)" color="#b21600" fillcolor="#edd8d5"] -N4 [label="line3002\n0 of 62.50MB (63.37%)" id="node4" fontsize=8 shape=box tooltip="line3002 (62.50MB)" color="#b21600" fillcolor="#edd8d5"] -N3 -> N1 [label=" 62.50MB\n (inline)" weight=64 penwidth=4 color="#b21600" tooltip="line2000 -> line2001 (62.50MB)" labeltooltip="line2000 -> line2001 (62.50MB)"] -N2 -> N4 [label=" 62.50MB\n (inline)" weight=64 penwidth=4 color="#b21600" tooltip="line3000 -> line3002 (62.50MB)" labeltooltip="line3000 -> line3002 (62.50MB)"] -N4 -> N3 [label=" 62.50MB" weight=64 penwidth=4 color="#b21600" tooltip="line3002 -> line2000 (62.50MB)" labeltooltip="line3002 -> line2000 (62.50MB)"] -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.flat.inuse_space.dot.focus.ignore b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.flat.inuse_space.dot.focus.ignore deleted file mode 100644 index b2929ae667..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.flat.inuse_space.dot.focus.ignore +++ /dev/null @@ -1,16 +0,0 @@ -digraph "unnamed" { -node [style=filled fillcolor="#f8f8f8"] -subgraph cluster_L { "Build ID: buildid" [shape=box fontsize=16 label="Build ID: buildid\lcomment\lType: inuse_space\lActive filters:\l tagfocus=30kb:\l tagignore=1mb:2mb\lShowing nodes accounting for 36.13MB, 36.63% of 98.63MB total\lDropped 2 nodes (cum <= 4.93MB)\l"] } -N1 [label="line3002\n31.25MB (31.68%)\nof 32.23MB (32.67%)" id="node1" fontsize=24 shape=box tooltip="line3002 (32.23MB)" color="#b23200" fillcolor="#eddcd5"] -NN1_0 [label = "400kB" id="NN1_0" fontsize=8 shape=box3d tooltip="31.25MB"] -N1 -> NN1_0 [label=" 31.25MB" weight=100 tooltip="31.25MB" labeltooltip="31.25MB"] -N2 [label="line3000\n0 of 36.13MB (36.63%)" id="node2" fontsize=8 shape=box tooltip="line3000 (36.13MB)" color="#b22e00" fillcolor="#eddbd5"] -N3 [label="line3001\n0 of 36.13MB (36.63%)" id="node3" fontsize=8 shape=box tooltip="line3001 (36.13MB)" color="#b22e00" fillcolor="#eddbd5"] -N4 [label="line1000\n4.88MB (4.95%)" id="node4" fontsize=15 shape=box tooltip="line1000 (4.88MB)" color="#b2a086" fillcolor="#edeae7"] -NN4_0 [label = "200kB" id="NN4_0" fontsize=8 shape=box3d tooltip="3.91MB"] -N4 -> NN4_0 [label=" 3.91MB" weight=100 tooltip="3.91MB" labeltooltip="3.91MB"] -N2 -> N3 [label=" 36.13MB\n (inline)" weight=37 penwidth=2 color="#b22e00" tooltip="line3000 -> line3001 (36.13MB)" labeltooltip="line3000 -> line3001 (36.13MB)"] -N3 -> N1 [label=" 32.23MB\n (inline)" weight=33 penwidth=2 color="#b23200" tooltip="line3001 -> line3002 (32.23MB)" labeltooltip="line3001 -> line3002 (32.23MB)"] -N3 -> N4 [label=" 3.91MB" weight=4 color="#b2a58f" tooltip="line3001 -> line1000 (3.91MB)" labeltooltip="line3001 -> line1000 (3.91MB)"] -N1 -> N4 [label=" 0.98MB" color="#b2b0a9" tooltip="line3002 ... line1000 (0.98MB)" labeltooltip="line3002 ... line1000 (0.98MB)" style="dotted" minlen=2] -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.flat.lines.dot.focus b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.flat.lines.dot.focus deleted file mode 100644 index 9af0341076..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.flat.lines.dot.focus +++ /dev/null @@ -1,21 +0,0 @@ -digraph "unnamed" { -node [style=filled fillcolor="#f8f8f8"] -subgraph cluster_L { "Build ID: buildid" [shape=box fontsize=16 label="Build ID: buildid\lcomment\lType: inuse_space\lActive filters:\l focus=[12]00\lShowing nodes accounting for 67.38MB, 68.32% of 98.63MB total\l"] } -N1 [label="line3000\nfile3000.src:4\n0 of 67.38MB (68.32%)" id="node1" fontsize=8 shape=box tooltip="line3000 testdata/file3000.src:4 (67.38MB)" color="#b21300" fillcolor="#edd7d5"] -N2 [label="line2001\nfile2000.src:2\n62.50MB (63.37%)\nof 63.48MB (64.36%)" id="node2" fontsize=24 shape=box tooltip="line2001 testdata/file2000.src:2 (63.48MB)" color="#b21600" fillcolor="#edd8d5"] -NN2_0 [label = "1.56MB" id="NN2_0" fontsize=8 shape=box3d tooltip="62.50MB"] -N2 -> NN2_0 [label=" 62.50MB" weight=100 tooltip="62.50MB" labeltooltip="62.50MB"] -N3 [label="line1000\nfile1000.src:1\n4.88MB (4.95%)" id="node3" fontsize=13 shape=box tooltip="line1000 testdata/file1000.src:1 (4.88MB)" color="#b2a086" fillcolor="#edeae7"] -NN3_0 [label = "200kB" id="NN3_0" fontsize=8 shape=box3d tooltip="3.91MB"] -N3 -> NN3_0 [label=" 3.91MB" weight=100 tooltip="3.91MB" labeltooltip="3.91MB"] -N4 [label="line3002\nfile3000.src:3\n0 of 63.48MB (64.36%)" id="node4" fontsize=8 shape=box tooltip="line3002 testdata/file3000.src:3 (63.48MB)" color="#b21600" fillcolor="#edd8d5"] -N5 [label="line3001\nfile3000.src:2\n0 of 4.88MB (4.95%)" id="node5" fontsize=8 shape=box tooltip="line3001 testdata/file3000.src:2 (4.88MB)" color="#b2a086" fillcolor="#edeae7"] -N6 [label="line2000\nfile2000.src:3\n0 of 63.48MB (64.36%)" id="node6" fontsize=8 shape=box tooltip="line2000 testdata/file2000.src:3 (63.48MB)" color="#b21600" fillcolor="#edd8d5"] -N6 -> N2 [label=" 63.48MB\n (inline)" weight=65 penwidth=4 color="#b21600" tooltip="line2000 testdata/file2000.src:3 -> line2001 testdata/file2000.src:2 (63.48MB)" labeltooltip="line2000 testdata/file2000.src:3 -> line2001 testdata/file2000.src:2 (63.48MB)"] -N4 -> N6 [label=" 63.48MB" weight=65 penwidth=4 color="#b21600" tooltip="line3002 testdata/file3000.src:3 -> line2000 testdata/file2000.src:3 (63.48MB)" labeltooltip="line3002 testdata/file3000.src:3 -> line2000 testdata/file2000.src:3 (63.48MB)"] -N1 -> N4 [label=" 62.50MB\n (inline)" weight=64 penwidth=4 color="#b21600" tooltip="line3000 testdata/file3000.src:4 -> line3002 testdata/file3000.src:3 (62.50MB)" labeltooltip="line3000 testdata/file3000.src:4 -> line3002 testdata/file3000.src:3 (62.50MB)"] -N1 -> N5 [label=" 4.88MB\n (inline)" weight=5 color="#b2a086" tooltip="line3000 testdata/file3000.src:4 -> line3001 testdata/file3000.src:2 (4.88MB)" labeltooltip="line3000 testdata/file3000.src:4 -> line3001 testdata/file3000.src:2 (4.88MB)"] -N5 -> N3 [label=" 3.91MB" weight=4 color="#b2a58f" tooltip="line3001 testdata/file3000.src:2 -> line1000 testdata/file1000.src:1 (3.91MB)" labeltooltip="line3001 testdata/file3000.src:2 -> line1000 testdata/file1000.src:1 (3.91MB)"] -N2 -> N3 [label=" 0.98MB" color="#b2b0a9" tooltip="line2001 testdata/file2000.src:2 -> line1000 testdata/file1000.src:1 (0.98MB)" labeltooltip="line2001 testdata/file2000.src:2 -> line1000 testdata/file1000.src:1 (0.98MB)" minlen=2] -N5 -> N4 [label=" 0.98MB\n (inline)" color="#b2b0a9" tooltip="line3001 testdata/file3000.src:2 -> line3002 testdata/file3000.src:3 (0.98MB)" labeltooltip="line3001 testdata/file3000.src:2 -> line3002 testdata/file3000.src:3 (0.98MB)"] -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.tags b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.tags deleted file mode 100644 index 630e452a9f..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.tags +++ /dev/null @@ -1,6 +0,0 @@ - bytes: Total 98.6MB - 62.5MB (63.37%): 1.56MB - 31.2MB (31.68%): 400kB - 3.9MB ( 3.96%): 200kB - 1000.0kB ( 0.99%): 100kB - diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.tags.unit b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.tags.unit deleted file mode 100644 index 5e565fc019..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap.tags.unit +++ /dev/null @@ -1,6 +0,0 @@ - bytes: Total 103424000.0B - 65536000.0B (63.37%): 1638400B - 32768000.0B (31.68%): 409600B - 4096000.0B ( 3.96%): 204800B - 1024000.0B ( 0.99%): 102400B - diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap_alloc.flat.alloc_objects.text b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap_alloc.flat.alloc_objects.text deleted file mode 100644 index 929461a3c1..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap_alloc.flat.alloc_objects.text +++ /dev/null @@ -1,8 +0,0 @@ -Showing nodes accounting for 150, 100% of 150 total - flat flat% sum% cum cum% - 80 53.33% 53.33% 130 86.67% line3002 (inline) - 40 26.67% 80.00% 50 33.33% line2001 (inline) - 30 20.00% 100% 30 20.00% line1000 - 0 0% 100% 50 33.33% line2000 - 0 0% 100% 150 100% line3000 - 0 0% 100% 110 73.33% line3001 (inline) diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap_alloc.flat.alloc_space.dot b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap_alloc.flat.alloc_space.dot deleted file mode 100644 index f0621a0e3c..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap_alloc.flat.alloc_space.dot +++ /dev/null @@ -1,14 +0,0 @@ -digraph "unnamed" { -node [style=filled fillcolor="#f8f8f8"] -subgraph cluster_L { "Build ID: buildid" [shape=box fontsize=16 label="Build ID: buildid\lcomment\lType: alloc_space\lActive filters:\l tagshow=[2]00\lShowing nodes accounting for 93.75MB, 95.05% of 98.63MB total\lDropped 1 node (cum <= 4.93MB)\l"] } -N1 [label="line3002\n31.25MB (31.68%)\nof 94.73MB (96.04%)" id="node1" fontsize=20 shape=box tooltip="line3002 (94.73MB)" color="#b20200" fillcolor="#edd5d5"] -N2 [label="line3000\n0 of 98.63MB (100%)" id="node2" fontsize=8 shape=box tooltip="line3000 (98.63MB)" color="#b20000" fillcolor="#edd5d5"] -N3 [label="line2001\n62.50MB (63.37%)\nof 63.48MB (64.36%)" id="node3" fontsize=24 shape=box tooltip="line2001 (63.48MB)" color="#b21600" fillcolor="#edd8d5"] -N4 [label="line2000\n0 of 63.48MB (64.36%)" id="node4" fontsize=8 shape=box tooltip="line2000 (63.48MB)" color="#b21600" fillcolor="#edd8d5"] -N5 [label="line3001\n0 of 36.13MB (36.63%)" id="node5" fontsize=8 shape=box tooltip="line3001 (36.13MB)" color="#b22e00" fillcolor="#eddbd5"] -N4 -> N3 [label=" 63.48MB\n (inline)" weight=65 penwidth=4 color="#b21600" tooltip="line2000 -> line2001 (63.48MB)" labeltooltip="line2000 -> line2001 (63.48MB)"] -N1 -> N4 [label=" 63.48MB" weight=65 penwidth=4 color="#b21600" tooltip="line3002 -> line2000 (63.48MB)" labeltooltip="line3002 -> line2000 (63.48MB)"] -N2 -> N1 [label=" 62.50MB\n (inline)" weight=64 penwidth=4 color="#b21600" tooltip="line3000 -> line3002 (62.50MB)" labeltooltip="line3000 -> line3002 (62.50MB)"] -N2 -> N5 [label=" 36.13MB\n (inline)" weight=37 penwidth=2 color="#b22e00" tooltip="line3000 -> line3001 (36.13MB)" labeltooltip="line3000 -> line3001 (36.13MB)"] -N5 -> N1 [label=" 32.23MB\n (inline)" weight=33 penwidth=2 color="#b23200" tooltip="line3001 -> line3002 (32.23MB)" labeltooltip="line3001 -> line3002 (32.23MB)"] -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap_alloc.flat.alloc_space.dot.focus b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap_alloc.flat.alloc_space.dot.focus deleted file mode 100644 index e412ff4813..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap_alloc.flat.alloc_space.dot.focus +++ /dev/null @@ -1,18 +0,0 @@ -digraph "unnamed" { -node [style=filled fillcolor="#f8f8f8"] -subgraph cluster_L { "Build ID: buildid" [shape=box fontsize=16 label="Build ID: buildid\lcomment\lType: alloc_space\lActive filters:\l focus=[234]00\lShowing nodes accounting for 93.75MB, 95.05% of 98.63MB total\lDropped 1 node (cum <= 4.93MB)\l"] } -N1 [label="line3002\n31.25MB (31.68%)\nof 94.73MB (96.04%)" id="node1" fontsize=20 shape=box tooltip="line3002 (94.73MB)" color="#b20200" fillcolor="#edd5d5"] -NN1_0 [label = "400kB" id="NN1_0" fontsize=8 shape=box3d tooltip="31.25MB"] -N1 -> NN1_0 [label=" 31.25MB" weight=100 tooltip="31.25MB" labeltooltip="31.25MB"] -N2 [label="line3000\n0 of 98.63MB (100%)" id="node2" fontsize=8 shape=box tooltip="line3000 (98.63MB)" color="#b20000" fillcolor="#edd5d5"] -N3 [label="line2001\n62.50MB (63.37%)\nof 63.48MB (64.36%)" id="node3" fontsize=24 shape=box tooltip="line2001 (63.48MB)" color="#b21600" fillcolor="#edd8d5"] -NN3_0 [label = "1.56MB" id="NN3_0" fontsize=8 shape=box3d tooltip="62.50MB"] -N3 -> NN3_0 [label=" 62.50MB" weight=100 tooltip="62.50MB" labeltooltip="62.50MB"] -N4 [label="line2000\n0 of 63.48MB (64.36%)" id="node4" fontsize=8 shape=box tooltip="line2000 (63.48MB)" color="#b21600" fillcolor="#edd8d5"] -N5 [label="line3001\n0 of 36.13MB (36.63%)" id="node5" fontsize=8 shape=box tooltip="line3001 (36.13MB)" color="#b22e00" fillcolor="#eddbd5"] -N4 -> N3 [label=" 63.48MB\n (inline)" weight=65 penwidth=4 color="#b21600" tooltip="line2000 -> line2001 (63.48MB)" labeltooltip="line2000 -> line2001 (63.48MB)"] -N1 -> N4 [label=" 63.48MB" weight=65 penwidth=4 color="#b21600" tooltip="line3002 -> line2000 (63.48MB)" labeltooltip="line3002 -> line2000 (63.48MB)" minlen=2] -N2 -> N1 [label=" 62.50MB\n (inline)" weight=64 penwidth=4 color="#b21600" tooltip="line3000 -> line3002 (62.50MB)" labeltooltip="line3000 -> line3002 (62.50MB)"] -N2 -> N5 [label=" 36.13MB\n (inline)" weight=37 penwidth=2 color="#b22e00" tooltip="line3000 -> line3001 (36.13MB)" labeltooltip="line3000 -> line3001 (36.13MB)"] -N5 -> N1 [label=" 32.23MB\n (inline)" weight=33 penwidth=2 color="#b23200" tooltip="line3001 -> line3002 (32.23MB)" labeltooltip="line3001 -> line3002 (32.23MB)"] -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap_alloc.flat.alloc_space.dot.hide b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap_alloc.flat.alloc_space.dot.hide deleted file mode 100644 index 6110b114b9..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap_alloc.flat.alloc_space.dot.hide +++ /dev/null @@ -1,11 +0,0 @@ -digraph "unnamed" { -node [style=filled fillcolor="#f8f8f8"] -subgraph cluster_L { "Build ID: buildid" [shape=box fontsize=16 label="Build ID: buildid\lcomment\lType: alloc_space\lActive filters:\l hide=line.*1?23?\lShowing nodes accounting for 93.75MB, 95.05% of 98.63MB total\lDropped 1 node (cum <= 4.93MB)\l"] } -N1 [label="line3000\n62.50MB (63.37%)\nof 98.63MB (100%)" id="node1" fontsize=24 shape=box tooltip="line3000 (98.63MB)" color="#b20000" fillcolor="#edd5d5"] -NN1_0 [label = "1.56MB" id="NN1_0" fontsize=8 shape=box3d tooltip="62.50MB"] -N1 -> NN1_0 [label=" 62.50MB" weight=100 tooltip="62.50MB" labeltooltip="62.50MB"] -N2 [label="line3001\n31.25MB (31.68%)\nof 36.13MB (36.63%)" id="node2" fontsize=20 shape=box tooltip="line3001 (36.13MB)" color="#b22e00" fillcolor="#eddbd5"] -NN2_0 [label = "400kB" id="NN2_0" fontsize=8 shape=box3d tooltip="31.25MB"] -N2 -> NN2_0 [label=" 31.25MB" weight=100 tooltip="31.25MB" labeltooltip="31.25MB"] -N1 -> N2 [label=" 36.13MB\n (inline)" weight=37 penwidth=2 color="#b22e00" tooltip="line3000 -> line3001 (36.13MB)" labeltooltip="line3000 -> line3001 (36.13MB)" minlen=2] -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap_request.tags.focus b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap_request.tags.focus deleted file mode 100644 index b1a5f444d8..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap_request.tags.focus +++ /dev/null @@ -1,8 +0,0 @@ - bytes: Total 93.8MB - 62.5MB (66.67%): 1.56MB - 31.2MB (33.33%): 400kB - - request: Total 93.8MB - 62.5MB (66.67%): 1.56MB - 31.2MB (33.33%): 400kB - diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap_sizetags.dot b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap_sizetags.dot deleted file mode 100644 index 6be6112fd4..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap_sizetags.dot +++ /dev/null @@ -1,30 +0,0 @@ -digraph "unnamed" { -node [style=filled fillcolor="#f8f8f8"] -subgraph cluster_L { "Build ID: buildid" [shape=box fontsize=16 label="Build ID: buildid\lcomment\lType: inuse_space\lShowing nodes accounting for 93.75MB, 95.05% of 98.63MB total\lDropped 1 node (cum <= 4.93MB)\l"] } -N1 [label="line3002\n31.25MB (31.68%)\nof 94.73MB (96.04%)" id="node1" fontsize=20 shape=box tooltip="line3002 (94.73MB)" color="#b20200" fillcolor="#edd5d5"] -NN1_0 [label = "16B..64B" id="NN1_0" fontsize=8 shape=box3d tooltip="93.75MB"] -N1 -> NN1_0 [label=" 93.75MB" weight=100 tooltip="93.75MB" labeltooltip="93.75MB"] -NN1_1 [label = "2B..8B" id="NN1_1" fontsize=8 shape=box3d tooltip="93.75MB"] -N1 -> NN1_1 [label=" 93.75MB" weight=100 tooltip="93.75MB" labeltooltip="93.75MB"] -NN1_2 [label = "256B..1.56MB" id="NN1_2" fontsize=8 shape=box3d tooltip="62.50MB"] -N1 -> NN1_2 [label=" 62.50MB" weight=100 tooltip="62.50MB" labeltooltip="62.50MB"] -NN1_3 [label = "128B" id="NN1_3" fontsize=8 shape=box3d tooltip="31.25MB"] -N1 -> NN1_3 [label=" 31.25MB" weight=100 tooltip="31.25MB" labeltooltip="31.25MB"] -N2 [label="line3000\n0 of 98.63MB (100%)" id="node2" fontsize=8 shape=box tooltip="line3000 (98.63MB)" color="#b20000" fillcolor="#edd5d5"] -N3 [label="line2001\n62.50MB (63.37%)\nof 63.48MB (64.36%)" id="node3" fontsize=24 shape=box tooltip="line2001 (63.48MB)" color="#b21600" fillcolor="#edd8d5"] -NN3_0 [label = "16B..64B" id="NN3_0" fontsize=8 shape=box3d tooltip="190.43MB"] -N3 -> NN3_0 [label=" 190.43MB" weight=100 tooltip="190.43MB" labeltooltip="190.43MB" style="dotted"] -NN3_1 [label = "2B..8B" id="NN3_1" fontsize=8 shape=box3d tooltip="190.43MB"] -N3 -> NN3_1 [label=" 190.43MB" weight=100 tooltip="190.43MB" labeltooltip="190.43MB" style="dotted"] -NN3_2 [label = "256B..1.56MB" id="NN3_2" fontsize=8 shape=box3d tooltip="125.98MB"] -N3 -> NN3_2 [label=" 125.98MB" weight=100 tooltip="125.98MB" labeltooltip="125.98MB" style="dotted"] -NN3_3 [label = "128B" id="NN3_3" fontsize=8 shape=box3d tooltip="63.48MB"] -N3 -> NN3_3 [label=" 63.48MB" weight=100 tooltip="63.48MB" labeltooltip="63.48MB" style="dotted"] -N4 [label="line2000\n0 of 63.48MB (64.36%)" id="node4" fontsize=8 shape=box tooltip="line2000 (63.48MB)" color="#b21600" fillcolor="#edd8d5"] -N5 [label="line3001\n0 of 36.13MB (36.63%)" id="node5" fontsize=8 shape=box tooltip="line3001 (36.13MB)" color="#b22e00" fillcolor="#eddbd5"] -N4 -> N3 [label=" 63.48MB\n (inline)" weight=65 penwidth=4 color="#b21600" tooltip="line2000 -> line2001 (63.48MB)" labeltooltip="line2000 -> line2001 (63.48MB)"] -N1 -> N4 [label=" 63.48MB" weight=65 penwidth=4 color="#b21600" tooltip="line3002 -> line2000 (63.48MB)" labeltooltip="line3002 -> line2000 (63.48MB)" minlen=2] -N2 -> N1 [label=" 62.50MB\n (inline)" weight=64 penwidth=4 color="#b21600" tooltip="line3000 -> line3002 (62.50MB)" labeltooltip="line3000 -> line3002 (62.50MB)"] -N2 -> N5 [label=" 36.13MB\n (inline)" weight=37 penwidth=2 color="#b22e00" tooltip="line3000 -> line3001 (36.13MB)" labeltooltip="line3000 -> line3001 (36.13MB)"] -N5 -> N1 [label=" 32.23MB\n (inline)" weight=33 penwidth=2 color="#b23200" tooltip="line3001 -> line3002 (32.23MB)" labeltooltip="line3001 -> line3002 (32.23MB)"] -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap_tags.traces b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap_tags.traces deleted file mode 100644 index 547aea74c3..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.heap_tags.traces +++ /dev/null @@ -1,32 +0,0 @@ -Build ID: buildid -comment -Type: inuse_space ------------+------------------------------------------------------- - key1: tag - bytes: 100kB - request: 100kB - 1000kB line1000 - line2001 - line2000 - line3002 - line3001 - line3000 ------------+------------------------------------------------------- - bytes: 200kB - 3.91MB line1000 - line3001 - line3000 ------------+------------------------------------------------------- - key1: tag - bytes: 1.56MB - request: 1.56MB - 62.50MB line2001 - line2000 - line3002 - line3000 ------------+------------------------------------------------------- - bytes: 400kB - 31.25MB line3002 - line3001 - line3000 ------------+------------------------------------------------------- diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.longNameFuncs.dot b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.longNameFuncs.dot deleted file mode 100644 index 474a5108ba..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.longNameFuncs.dot +++ /dev/null @@ -1,9 +0,0 @@ -digraph "testbinary" { -node [style=filled fillcolor="#f8f8f8"] -subgraph cluster_L { "File: testbinary" [shape=box fontsize=16 label="File: testbinary\lType: cpu\lDuration: 10s, Total samples = 1.11s (11.10%)\lShowing nodes accounting for 1.11s, 100% of 1.11s total\l" tooltip="testbinary"] } -N1 [label="package1\nobject\nfunction1\n1.10s (99.10%)" id="node1" fontsize=24 shape=box tooltip="path/to/package1.object.function1 (1.10s)" color="#b20000" fillcolor="#edd5d5"] -N2 [label="FooBar\nrun\n0.01s (0.9%)\nof 1.01s (90.99%)" id="node2" fontsize=10 shape=box tooltip="java.bar.foo.FooBar.run(java.lang.Runnable) (1.01s)" color="#b20400" fillcolor="#edd6d5"] -N3 [label="Bar\nFoo\n0 of 1.10s (99.10%)" id="node3" fontsize=8 shape=box tooltip="(anonymous namespace)::Bar::Foo (1.10s)" color="#b20000" fillcolor="#edd5d5"] -N3 -> N1 [label=" 1.10s" weight=100 penwidth=5 color="#b20000" tooltip="(anonymous namespace)::Bar::Foo -> path/to/package1.object.function1 (1.10s)" labeltooltip="(anonymous namespace)::Bar::Foo -> path/to/package1.object.function1 (1.10s)"] -N2 -> N3 [label=" 1s" weight=91 penwidth=5 color="#b20500" tooltip="java.bar.foo.FooBar.run(java.lang.Runnable) -> (anonymous namespace)::Bar::Foo (1s)" labeltooltip="java.bar.foo.FooBar.run(java.lang.Runnable) -> (anonymous namespace)::Bar::Foo (1s)"] -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.longNameFuncs.text b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.longNameFuncs.text deleted file mode 100644 index 39cb24ed6a..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.longNameFuncs.text +++ /dev/null @@ -1,5 +0,0 @@ -Showing nodes accounting for 1.11s, 100% of 1.11s total - flat flat% sum% cum cum% - 1.10s 99.10% 99.10% 1.10s 99.10% path/to/package1.object.function1 - 0.01s 0.9% 100% 1.01s 90.99% java.bar.foo.FooBar.run(java.lang.Runnable) - 0 0% 100% 1.10s 99.10% (anonymous namespace)::Bar::Foo diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.unknown.flat.functions.call_tree.text b/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.unknown.flat.functions.call_tree.text deleted file mode 100644 index 78a2298f95..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/testdata/pprof.unknown.flat.functions.call_tree.text +++ /dev/null @@ -1,8 +0,0 @@ -Showing nodes accounting for 1.12s, 100% of 1.12s total -Showing top 5 nodes out of 6 - flat flat% sum% cum cum% - 1.10s 98.21% 98.21% 1.10s 98.21% line1000 - 0.01s 0.89% 99.11% 1.01s 90.18% line2001 (inline) - 0.01s 0.89% 100% 1.02s 91.07% line3002 (inline) - 0 0% 100% 1.01s 90.18% line2000 - 0 0% 100% 1.12s 100% line3000 diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/webui.go b/src/cmd/vendor/github.com/google/pprof/internal/driver/webui.go index 7becacd202..9bf1d70f16 100644 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/webui.go +++ b/src/cmd/vendor/github.com/google/pprof/internal/driver/webui.go @@ -179,11 +179,18 @@ func defaultWebServer(args *plugin.HTTPServerArgs) error { // https://github.com/google/pprof/pull/348 mux := http.NewServeMux() mux.Handle("/ui/", http.StripPrefix("/ui", handler)) - mux.Handle("/", http.RedirectHandler("/ui/", http.StatusTemporaryRedirect)) + mux.Handle("/", redirectWithQuery("/ui")) s := &http.Server{Handler: mux} return s.Serve(ln) } +func redirectWithQuery(path string) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + pathWithQuery := &gourl.URL{Path: path, RawQuery: r.URL.RawQuery} + http.Redirect(w, r, pathWithQuery.String(), http.StatusTemporaryRedirect) + } +} + func isLocalhost(host string) bool { for _, v := range []string{"localhost", "127.0.0.1", "[::1]", "::1"} { if host == v { diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/webui_test.go b/src/cmd/vendor/github.com/google/pprof/internal/driver/webui_test.go deleted file mode 100644 index 58681bea8f..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/driver/webui_test.go +++ /dev/null @@ -1,285 +0,0 @@ -// Copyright 2017 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package driver - -import ( - "fmt" - "io/ioutil" - "net" - "net/http" - "net/http/httptest" - "net/url" - "os/exec" - "regexp" - "runtime" - "sync" - "testing" - - "github.com/google/pprof/internal/plugin" - "github.com/google/pprof/internal/proftest" - "github.com/google/pprof/profile" -) - -func TestWebInterface(t *testing.T) { - if runtime.GOOS == "nacl" || runtime.GOOS == "js" { - t.Skip("test assumes tcp available") - } - - prof := makeFakeProfile() - - // Custom http server creator - var server *httptest.Server - serverCreated := make(chan bool) - creator := func(a *plugin.HTTPServerArgs) error { - server = httptest.NewServer(http.HandlerFunc( - func(w http.ResponseWriter, r *http.Request) { - if h := a.Handlers[r.URL.Path]; h != nil { - h.ServeHTTP(w, r) - } - })) - serverCreated <- true - return nil - } - - // Start server and wait for it to be initialized - go serveWebInterface("unused:1234", prof, &plugin.Options{ - Obj: fakeObjTool{}, - UI: &proftest.TestUI{}, - HTTPServer: creator, - }) - <-serverCreated - defer server.Close() - - haveDot := false - if _, err := exec.LookPath("dot"); err == nil { - haveDot = true - } - - type testCase struct { - path string - want []string - needDot bool - } - testcases := []testCase{ - {"/", []string{"F1", "F2", "F3", "testbin", "cpu"}, true}, - {"/top", []string{`"Name":"F2","InlineLabel":"","Flat":200,"Cum":300,"FlatFormat":"200ms","CumFormat":"300ms"}`}, false}, - {"/source?f=" + url.QueryEscape("F[12]"), - []string{"F1", "F2", "300ms +line1"}, false}, - {"/peek?f=" + url.QueryEscape("F[12]"), - []string{"300ms.*F1", "200ms.*300ms.*F2"}, false}, - {"/disasm?f=" + url.QueryEscape("F[12]"), - []string{"f1:asm", "f2:asm"}, false}, - {"/flamegraph", []string{"File: testbin", "\"n\":\"root\"", "\"n\":\"F1\"", "var flamegraph = function", "function hierarchy"}, false}, - } - for _, c := range testcases { - if c.needDot && !haveDot { - t.Log("skipping", c.path, "since dot (graphviz) does not seem to be installed") - continue - } - - res, err := http.Get(server.URL + c.path) - if err != nil { - t.Error("could not fetch", c.path, err) - continue - } - data, err := ioutil.ReadAll(res.Body) - if err != nil { - t.Error("could not read response", c.path, err) - continue - } - result := string(data) - for _, w := range c.want { - if match, _ := regexp.MatchString(w, result); !match { - t.Errorf("response for %s does not match "+ - "expected pattern '%s'; "+ - "actual result:\n%s", c.path, w, result) - } - } - } - - // Also fetch all the test case URLs in parallel to test thread - // safety when run under the race detector. - var wg sync.WaitGroup - for _, c := range testcases { - if c.needDot && !haveDot { - continue - } - path := server.URL + c.path - for count := 0; count < 2; count++ { - wg.Add(1) - go func() { - defer wg.Done() - res, err := http.Get(path) - if err != nil { - t.Error("could not fetch", c.path, err) - return - } - if _, err = ioutil.ReadAll(res.Body); err != nil { - t.Error("could not read response", c.path, err) - } - }() - } - } - wg.Wait() -} - -// Implement fake object file support. - -const addrBase = 0x1000 -const fakeSource = "testdata/file1000.src" - -type fakeObj struct{} - -func (f fakeObj) Close() error { return nil } -func (f fakeObj) Name() string { return "testbin" } -func (f fakeObj) Base() uint64 { return 0 } -func (f fakeObj) BuildID() string { return "" } -func (f fakeObj) SourceLine(addr uint64) ([]plugin.Frame, error) { - return nil, fmt.Errorf("SourceLine unimplemented") -} -func (f fakeObj) Symbols(r *regexp.Regexp, addr uint64) ([]*plugin.Sym, error) { - return []*plugin.Sym{ - { - Name: []string{"F1"}, File: fakeSource, - Start: addrBase, End: addrBase + 10, - }, - { - Name: []string{"F2"}, File: fakeSource, - Start: addrBase + 10, End: addrBase + 20, - }, - { - Name: []string{"F3"}, File: fakeSource, - Start: addrBase + 20, End: addrBase + 30, - }, - }, nil -} - -type fakeObjTool struct{} - -func (obj fakeObjTool) Open(file string, start, limit, offset uint64) (plugin.ObjFile, error) { - return fakeObj{}, nil -} - -func (obj fakeObjTool) Disasm(file string, start, end uint64) ([]plugin.Inst, error) { - return []plugin.Inst{ - {Addr: addrBase + 0, Text: "f1:asm", Function: "F1"}, - {Addr: addrBase + 10, Text: "f2:asm", Function: "F2"}, - {Addr: addrBase + 20, Text: "d3:asm", Function: "F3"}, - }, nil -} - -func makeFakeProfile() *profile.Profile { - // Three functions: F1, F2, F3 with three lines, 11, 22, 33. - funcs := []*profile.Function{ - {ID: 1, Name: "F1", Filename: fakeSource, StartLine: 3}, - {ID: 2, Name: "F2", Filename: fakeSource, StartLine: 5}, - {ID: 3, Name: "F3", Filename: fakeSource, StartLine: 7}, - } - lines := []profile.Line{ - {Function: funcs[0], Line: 11}, - {Function: funcs[1], Line: 22}, - {Function: funcs[2], Line: 33}, - } - mapping := []*profile.Mapping{ - { - ID: 1, - Start: addrBase, - Limit: addrBase + 10, - Offset: 0, - File: "testbin", - HasFunctions: true, - HasFilenames: true, - HasLineNumbers: true, - }, - } - - // Three interesting addresses: base+{10,20,30} - locs := []*profile.Location{ - {ID: 1, Address: addrBase + 10, Line: lines[0:1], Mapping: mapping[0]}, - {ID: 2, Address: addrBase + 20, Line: lines[1:2], Mapping: mapping[0]}, - {ID: 3, Address: addrBase + 30, Line: lines[2:3], Mapping: mapping[0]}, - } - - // Two stack traces. - return &profile.Profile{ - PeriodType: &profile.ValueType{Type: "cpu", Unit: "milliseconds"}, - Period: 1, - DurationNanos: 10e9, - SampleType: []*profile.ValueType{ - {Type: "cpu", Unit: "milliseconds"}, - }, - Sample: []*profile.Sample{ - { - Location: []*profile.Location{locs[2], locs[1], locs[0]}, - Value: []int64{100}, - }, - { - Location: []*profile.Location{locs[1], locs[0]}, - Value: []int64{200}, - }, - }, - Location: locs, - Function: funcs, - Mapping: mapping, - } -} - -func TestGetHostAndPort(t *testing.T) { - if runtime.GOOS == "nacl" || runtime.GOOS == "js" { - t.Skip("test assumes tcp available") - } - - type testCase struct { - hostport string - wantHost string - wantPort int - wantRandomPort bool - } - - testCases := []testCase{ - {":", "localhost", 0, true}, - {":4681", "localhost", 4681, false}, - {"localhost:4681", "localhost", 4681, false}, - } - for _, tc := range testCases { - host, port, err := getHostAndPort(tc.hostport) - if err != nil { - t.Errorf("could not get host and port for %q: %v", tc.hostport, err) - } - if got, want := host, tc.wantHost; got != want { - t.Errorf("for %s, got host %s, want %s", tc.hostport, got, want) - continue - } - if !tc.wantRandomPort { - if got, want := port, tc.wantPort; got != want { - t.Errorf("for %s, got port %d, want %d", tc.hostport, got, want) - continue - } - } - } -} - -func TestIsLocalHost(t *testing.T) { - for _, s := range []string{"localhost:10000", "[::1]:10000", "127.0.0.1:10000"} { - host, _, err := net.SplitHostPort(s) - if err != nil { - t.Error("unexpected error when splitting", s) - continue - } - if !isLocalhost(host) { - t.Errorf("host %s from %s not considered local", host, s) - } - } -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/elfexec/elfexec_test.go b/src/cmd/vendor/github.com/google/pprof/internal/elfexec/elfexec_test.go deleted file mode 100644 index ff95c36add..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/elfexec/elfexec_test.go +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package elfexec - -import ( - "debug/elf" - "testing" -) - -func TestGetBase(t *testing.T) { - - fhExec := &elf.FileHeader{ - Type: elf.ET_EXEC, - } - fhRel := &elf.FileHeader{ - Type: elf.ET_REL, - } - fhDyn := &elf.FileHeader{ - Type: elf.ET_DYN, - } - lsOffset := &elf.ProgHeader{ - Vaddr: 0x400000, - Off: 0x200000, - } - kernelHeader := &elf.ProgHeader{ - Vaddr: 0xffffffff81000000, - } - kernelAslrHeader := &elf.ProgHeader{ - Vaddr: 0xffffffff80200000, - Off: 0x1000, - } - ppc64KernelHeader := &elf.ProgHeader{ - Vaddr: 0xc000000000000000, - } - - testcases := []struct { - label string - fh *elf.FileHeader - loadSegment *elf.ProgHeader - stextOffset *uint64 - start, limit, offset uint64 - want uint64 - wanterr bool - }{ - {"exec", fhExec, nil, nil, 0x400000, 0, 0, 0, false}, - {"exec offset", fhExec, lsOffset, nil, 0x400000, 0x800000, 0, 0x200000, false}, - {"exec offset 2", fhExec, lsOffset, nil, 0x200000, 0x600000, 0, 0, false}, - {"exec nomap", fhExec, nil, nil, 0, 0, 0, 0, false}, - {"exec kernel", fhExec, kernelHeader, uint64p(0xffffffff81000198), 0xffffffff82000198, 0xffffffff83000198, 0, 0x1000000, false}, - {"exec kernel", fhExec, kernelHeader, uint64p(0xffffffff810002b8), 0xffffffff81000000, 0xffffffffa0000000, 0x0, 0x0, false}, - {"exec kernel ASLR", fhExec, kernelHeader, uint64p(0xffffffff810002b8), 0xffffffff81000000, 0xffffffffa0000000, 0xffffffff81000000, 0x0, false}, - // TODO(aalexand): Figure out where this test case exactly comes from and - // whether it's still relevant. - {"exec kernel ASLR 2", fhExec, kernelAslrHeader, nil, 0xffffffff83e00000, 0xfffffffffc3fffff, 0x3c00000, 0x3c00000, false}, - {"exec PPC64 kernel", fhExec, ppc64KernelHeader, uint64p(0xc000000000000000), 0xc000000000000000, 0xd00000001a730000, 0x0, 0x0, false}, - {"exec chromeos kernel", fhExec, kernelHeader, uint64p(0xffffffff81000198), 0, 0x10197, 0, 0x7efffe68, false}, - {"exec chromeos kernel 2", fhExec, kernelHeader, uint64p(0xffffffff81000198), 0, 0x10198, 0, 0x7efffe68, false}, - {"exec chromeos kernel 3", fhExec, kernelHeader, uint64p(0xffffffff81000198), 0x198, 0x100000, 0, 0x7f000000, false}, - {"exec chromeos kernel 4", fhExec, kernelHeader, uint64p(0xffffffff81200198), 0x198, 0x100000, 0, 0x7ee00000, false}, - {"exec chromeos kernel unremapped", fhExec, kernelHeader, uint64p(0xffffffff810001c8), 0xffffffff834001c8, 0xffffffffc0000000, 0xffffffff834001c8, 0x2400000, false}, - {"dyn", fhDyn, nil, nil, 0x200000, 0x300000, 0, 0x200000, false}, - {"dyn map", fhDyn, lsOffset, nil, 0x0, 0x300000, 0, 0xFFFFFFFFFFE00000, false}, - {"dyn nomap", fhDyn, nil, nil, 0x0, 0x0, 0, 0, false}, - {"dyn map+offset", fhDyn, lsOffset, nil, 0x900000, 0xa00000, 0x200000, 0x500000, false}, - {"rel", fhRel, nil, nil, 0x2000000, 0x3000000, 0, 0x2000000, false}, - {"rel nomap", fhRel, nil, nil, 0x0, ^uint64(0), 0, 0, false}, - {"rel offset", fhRel, nil, nil, 0x100000, 0x200000, 0x1, 0, true}, - } - - for _, tc := range testcases { - base, err := GetBase(tc.fh, tc.loadSegment, tc.stextOffset, tc.start, tc.limit, tc.offset) - if err != nil { - if !tc.wanterr { - t.Errorf("%s: want no error, got %v", tc.label, err) - } - continue - } - if tc.wanterr { - t.Errorf("%s: want error, got nil", tc.label) - continue - } - if base != tc.want { - t.Errorf("%s: want 0x%x, got 0x%x", tc.label, tc.want, base) - } - } -} - -func uint64p(n uint64) *uint64 { - return &n -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/graph/dotgraph_test.go b/src/cmd/vendor/github.com/google/pprof/internal/graph/dotgraph_test.go deleted file mode 100644 index b8368b8fa4..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/graph/dotgraph_test.go +++ /dev/null @@ -1,335 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package graph - -import ( - "bytes" - "flag" - "fmt" - "io/ioutil" - "path/filepath" - "reflect" - "strconv" - "strings" - "testing" - - "github.com/google/pprof/internal/proftest" -) - -var updateFlag = flag.Bool("update", false, "Update the golden files") - -func TestComposeWithStandardGraph(t *testing.T) { - g := baseGraph() - a, c := baseAttrsAndConfig() - - var buf bytes.Buffer - ComposeDot(&buf, g, a, c) - - compareGraphs(t, buf.Bytes(), "compose1.dot") -} - -func TestComposeWithNodeAttributesAndZeroFlat(t *testing.T) { - g := baseGraph() - a, c := baseAttrsAndConfig() - - // Set NodeAttributes for Node 1. - a.Nodes[g.Nodes[0]] = &DotNodeAttributes{ - Shape: "folder", - Bold: true, - Peripheries: 2, - URL: "www.google.com", - Formatter: func(ni *NodeInfo) string { - return strings.ToUpper(ni.Name) - }, - } - - // Set Flat value to zero on Node 2. - g.Nodes[1].Flat = 0 - - var buf bytes.Buffer - ComposeDot(&buf, g, a, c) - - compareGraphs(t, buf.Bytes(), "compose2.dot") -} - -func TestComposeWithTagsAndResidualEdge(t *testing.T) { - g := baseGraph() - a, c := baseAttrsAndConfig() - - // Add tags to Node 1. - g.Nodes[0].LabelTags["a"] = &Tag{ - Name: "tag1", - Cum: 10, - Flat: 10, - } - g.Nodes[0].NumericTags[""] = TagMap{ - "b": &Tag{ - Name: "tag2", - Cum: 20, - Flat: 20, - Unit: "ms", - }, - } - - // Set edge to be Residual. - g.Nodes[0].Out[g.Nodes[1]].Residual = true - - var buf bytes.Buffer - ComposeDot(&buf, g, a, c) - - compareGraphs(t, buf.Bytes(), "compose3.dot") -} - -func TestComposeWithNestedTags(t *testing.T) { - g := baseGraph() - a, c := baseAttrsAndConfig() - - // Add tags to Node 1. - g.Nodes[0].LabelTags["tag1"] = &Tag{ - Name: "tag1", - Cum: 10, - Flat: 10, - } - g.Nodes[0].NumericTags["tag1"] = TagMap{ - "tag2": &Tag{ - Name: "tag2", - Cum: 20, - Flat: 20, - Unit: "ms", - }, - } - - var buf bytes.Buffer - ComposeDot(&buf, g, a, c) - - compareGraphs(t, buf.Bytes(), "compose5.dot") -} - -func TestComposeWithEmptyGraph(t *testing.T) { - g := &Graph{} - a, c := baseAttrsAndConfig() - - var buf bytes.Buffer - ComposeDot(&buf, g, a, c) - - compareGraphs(t, buf.Bytes(), "compose4.dot") -} - -func TestComposeWithStandardGraphAndURL(t *testing.T) { - g := baseGraph() - a, c := baseAttrsAndConfig() - c.LegendURL = "http://example.com" - - var buf bytes.Buffer - ComposeDot(&buf, g, a, c) - - compareGraphs(t, buf.Bytes(), "compose6.dot") -} - -func baseGraph() *Graph { - src := &Node{ - Info: NodeInfo{Name: "src"}, - Flat: 10, - Cum: 25, - In: make(EdgeMap), - Out: make(EdgeMap), - LabelTags: make(TagMap), - NumericTags: make(map[string]TagMap), - } - dest := &Node{ - Info: NodeInfo{Name: "dest"}, - Flat: 15, - Cum: 25, - In: make(EdgeMap), - Out: make(EdgeMap), - LabelTags: make(TagMap), - NumericTags: make(map[string]TagMap), - } - edge := &Edge{ - Src: src, - Dest: dest, - Weight: 10, - } - src.Out[dest] = edge - src.In[src] = edge - return &Graph{ - Nodes: Nodes{ - src, - dest, - }, - } -} - -func baseAttrsAndConfig() (*DotAttributes, *DotConfig) { - a := &DotAttributes{ - Nodes: make(map[*Node]*DotNodeAttributes), - } - c := &DotConfig{ - Title: "testtitle", - Labels: []string{"label1", "label2"}, - Total: 100, - FormatValue: func(v int64) string { - return strconv.FormatInt(v, 10) - }, - } - return a, c -} - -func compareGraphs(t *testing.T, got []byte, wantFile string) { - wantFile = filepath.Join("testdata", wantFile) - want, err := ioutil.ReadFile(wantFile) - if err != nil { - t.Fatalf("error reading test file %s: %v", wantFile, err) - } - - if string(got) != string(want) { - d, err := proftest.Diff(got, want) - if err != nil { - t.Fatalf("error finding diff: %v", err) - } - t.Errorf("Compose incorrectly wrote %s", string(d)) - if *updateFlag { - err := ioutil.WriteFile(wantFile, got, 0644) - if err != nil { - t.Errorf("failed to update the golden file %q: %v", wantFile, err) - } - } - } -} - -func TestNodeletCountCapping(t *testing.T) { - labelTags := make(TagMap) - for i := 0; i < 10; i++ { - name := fmt.Sprintf("tag-%d", i) - labelTags[name] = &Tag{ - Name: name, - Flat: 10, - Cum: 10, - } - } - numTags := make(TagMap) - for i := 0; i < 10; i++ { - name := fmt.Sprintf("num-tag-%d", i) - numTags[name] = &Tag{ - Name: name, - Unit: "mb", - Value: 16, - Flat: 10, - Cum: 10, - } - } - node1 := &Node{ - Info: NodeInfo{Name: "node1-with-tags"}, - Flat: 10, - Cum: 10, - NumericTags: map[string]TagMap{"": numTags}, - LabelTags: labelTags, - } - node2 := &Node{ - Info: NodeInfo{Name: "node2"}, - Flat: 15, - Cum: 15, - } - node3 := &Node{ - Info: NodeInfo{Name: "node3"}, - Flat: 15, - Cum: 15, - } - g := &Graph{ - Nodes: Nodes{ - node1, - node2, - node3, - }, - } - for n := 1; n <= 3; n++ { - input := maxNodelets + n - if got, want := len(g.SelectTopNodes(input, true)), n; got != want { - t.Errorf("SelectTopNodes(%d): got %d nodes, want %d", input, got, want) - } - } -} - -func TestMultilinePrintableName(t *testing.T) { - ni := &NodeInfo{ - Name: "test1.test2::test3", - File: "src/file.cc", - Address: 123, - Lineno: 999, - } - - want := fmt.Sprintf(`%016x\ntest1\ntest2\ntest3\nfile.cc:999\n`, 123) - if got := multilinePrintableName(ni); got != want { - t.Errorf("multilinePrintableName(%#v) == %q, want %q", ni, got, want) - } -} - -func TestTagCollapse(t *testing.T) { - - makeTag := func(name, unit string, value, flat, cum int64) *Tag { - return &Tag{name, unit, value, flat, 0, cum, 0} - } - - tagSource := []*Tag{ - makeTag("12mb", "mb", 12, 100, 100), - makeTag("1kb", "kb", 1, 1, 1), - makeTag("1mb", "mb", 1, 1000, 1000), - makeTag("2048mb", "mb", 2048, 1000, 1000), - makeTag("1b", "b", 1, 100, 100), - makeTag("2b", "b", 2, 100, 100), - makeTag("7b", "b", 7, 100, 100), - } - - tagWant := [][]*Tag{ - { - makeTag("1B..2GB", "", 0, 2401, 2401), - }, - { - makeTag("2GB", "", 0, 1000, 1000), - makeTag("1B..12MB", "", 0, 1401, 1401), - }, - { - makeTag("2GB", "", 0, 1000, 1000), - makeTag("12MB", "", 0, 100, 100), - makeTag("1B..1MB", "", 0, 1301, 1301), - }, - { - makeTag("2GB", "", 0, 1000, 1000), - makeTag("1MB", "", 0, 1000, 1000), - makeTag("2B..1kB", "", 0, 201, 201), - makeTag("1B", "", 0, 100, 100), - makeTag("12MB", "", 0, 100, 100), - }, - } - - for _, tc := range tagWant { - var got, want []*Tag - b := builder{nil, &DotAttributes{}, &DotConfig{}} - got = b.collapsedTags(tagSource, len(tc), true) - want = SortTags(tc, true) - - if !reflect.DeepEqual(got, want) { - t.Errorf("collapse to %d, got:\n%v\nwant:\n%v", len(tc), tagString(got), tagString(want)) - } - } -} - -func tagString(t []*Tag) string { - var ret []string - for _, s := range t { - ret = append(ret, fmt.Sprintln(s)) - } - return strings.Join(ret, ":") -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/graph/graph.go b/src/cmd/vendor/github.com/google/pprof/internal/graph/graph.go index aebd1bf0e8..757be02947 100644 --- a/src/cmd/vendor/github.com/google/pprof/internal/graph/graph.go +++ b/src/cmd/vendor/github.com/google/pprof/internal/graph/graph.go @@ -28,7 +28,7 @@ import ( ) var ( - javaRegExp = regexp.MustCompile(`^(?:[a-z]\w*\.)*([A-Z][\w\$]*\.(?:|[a-z]\w*(?:\$\d+)?))(?:(?:\()|$)`) + javaRegExp = regexp.MustCompile(`^(?:[a-z]\w*\.)*([A-Z][\w\$]*\.(?:|[a-z][\w\$]*(?:\$\d+)?))(?:(?:\()|$)`) goRegExp = regexp.MustCompile(`^(?:[\w\-\.]+\/)+(.+)`) cppRegExp = regexp.MustCompile(`^(?:(?:\(anonymous namespace\)::)(\w+$))|(?:(?:\(anonymous namespace\)::)?(?:[_a-zA-Z]\w*\::|)*(_*[A-Z]\w*::~?[_a-zA-Z]\w*)$)`) ) diff --git a/src/cmd/vendor/github.com/google/pprof/internal/graph/graph_test.go b/src/cmd/vendor/github.com/google/pprof/internal/graph/graph_test.go deleted file mode 100644 index ef1171a14d..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/graph/graph_test.go +++ /dev/null @@ -1,471 +0,0 @@ -package graph - -import ( - "fmt" - "testing" - - "github.com/google/pprof/profile" -) - -func edgeDebugString(edge *Edge) string { - debug := "" - debug += fmt.Sprintf("\t\tSrc: %p\n", edge.Src) - debug += fmt.Sprintf("\t\tDest: %p\n", edge.Dest) - debug += fmt.Sprintf("\t\tWeight: %d\n", edge.Weight) - debug += fmt.Sprintf("\t\tResidual: %t\n", edge.Residual) - debug += fmt.Sprintf("\t\tInline: %t\n", edge.Inline) - return debug -} - -func edgeMapsDebugString(in, out EdgeMap) string { - debug := "" - debug += "In Edges:\n" - for parent, edge := range in { - debug += fmt.Sprintf("\tParent: %p\n", parent) - debug += edgeDebugString(edge) - } - debug += "Out Edges:\n" - for child, edge := range out { - debug += fmt.Sprintf("\tChild: %p\n", child) - debug += edgeDebugString(edge) - } - return debug -} - -func graphDebugString(graph *Graph) string { - debug := "" - for i, node := range graph.Nodes { - debug += fmt.Sprintf("Node %d: %p\n", i, node) - } - - for i, node := range graph.Nodes { - debug += "\n" - debug += fmt.Sprintf("=== Node %d: %p ===\n", i, node) - debug += edgeMapsDebugString(node.In, node.Out) - } - return debug -} - -func expectedNodesDebugString(expected []expectedNode) string { - debug := "" - for i, node := range expected { - debug += fmt.Sprintf("Node %d: %p\n", i, node.node) - } - - for i, node := range expected { - debug += "\n" - debug += fmt.Sprintf("=== Node %d: %p ===\n", i, node.node) - debug += edgeMapsDebugString(node.in, node.out) - } - return debug -} - -// edgeMapsEqual checks if all the edges in this equal all the edges in that. -func edgeMapsEqual(this, that EdgeMap) bool { - if len(this) != len(that) { - return false - } - for node, thisEdge := range this { - if *thisEdge != *that[node] { - return false - } - } - return true -} - -// nodesEqual checks if node is equal to expected. -func nodesEqual(node *Node, expected expectedNode) bool { - return node == expected.node && edgeMapsEqual(node.In, expected.in) && - edgeMapsEqual(node.Out, expected.out) -} - -// graphsEqual checks if graph is equivalent to the graph templated by expected. -func graphsEqual(graph *Graph, expected []expectedNode) bool { - if len(graph.Nodes) != len(expected) { - return false - } - expectedSet := make(map[*Node]expectedNode) - for i := range expected { - expectedSet[expected[i].node] = expected[i] - } - - for _, node := range graph.Nodes { - expectedNode, found := expectedSet[node] - if !found || !nodesEqual(node, expectedNode) { - return false - } - } - return true -} - -type expectedNode struct { - node *Node - in, out EdgeMap -} - -type trimTreeTestcase struct { - initial *Graph - expected []expectedNode - keep NodePtrSet -} - -// makeExpectedEdgeResidual makes the edge from parent to child residual. -func makeExpectedEdgeResidual(parent, child expectedNode) { - parent.out[child.node].Residual = true - child.in[parent.node].Residual = true -} - -func makeEdgeInline(edgeMap EdgeMap, node *Node) { - edgeMap[node].Inline = true -} - -func setEdgeWeight(edgeMap EdgeMap, node *Node, weight int64) { - edgeMap[node].Weight = weight -} - -// createEdges creates directed edges from the parent to each of the children. -func createEdges(parent *Node, children ...*Node) { - for _, child := range children { - edge := &Edge{ - Src: parent, - Dest: child, - } - parent.Out[child] = edge - child.In[parent] = edge - } -} - -// createEmptyNode creates a node without any edges. -func createEmptyNode() *Node { - return &Node{ - In: make(EdgeMap), - Out: make(EdgeMap), - } -} - -// createExpectedNodes creates a slice of expectedNodes from nodes. -func createExpectedNodes(nodes ...*Node) ([]expectedNode, NodePtrSet) { - expected := make([]expectedNode, len(nodes)) - keep := make(NodePtrSet, len(nodes)) - - for i, node := range nodes { - expected[i] = expectedNode{ - node: node, - in: make(EdgeMap), - out: make(EdgeMap), - } - keep[node] = true - } - - return expected, keep -} - -// createExpectedEdges creates directed edges from the parent to each of the -// children. -func createExpectedEdges(parent expectedNode, children ...expectedNode) { - for _, child := range children { - edge := &Edge{ - Src: parent.node, - Dest: child.node, - } - parent.out[child.node] = edge - child.in[parent.node] = edge - } -} - -// createTestCase1 creates a test case that initially looks like: -// 0 -// |(5) -// 1 -// (3)/ \(4) -// 2 3. -// -// After keeping 0, 2, and 3, it expects the graph: -// 0 -// (3)/ \(4) -// 2 3. -func createTestCase1() trimTreeTestcase { - // Create initial graph - graph := &Graph{make(Nodes, 4)} - nodes := graph.Nodes - for i := range nodes { - nodes[i] = createEmptyNode() - } - createEdges(nodes[0], nodes[1]) - createEdges(nodes[1], nodes[2], nodes[3]) - makeEdgeInline(nodes[0].Out, nodes[1]) - makeEdgeInline(nodes[1].Out, nodes[2]) - setEdgeWeight(nodes[0].Out, nodes[1], 5) - setEdgeWeight(nodes[1].Out, nodes[2], 3) - setEdgeWeight(nodes[1].Out, nodes[3], 4) - - // Create expected graph - expected, keep := createExpectedNodes(nodes[0], nodes[2], nodes[3]) - createExpectedEdges(expected[0], expected[1], expected[2]) - makeEdgeInline(expected[0].out, expected[1].node) - makeExpectedEdgeResidual(expected[0], expected[1]) - makeExpectedEdgeResidual(expected[0], expected[2]) - setEdgeWeight(expected[0].out, expected[1].node, 3) - setEdgeWeight(expected[0].out, expected[2].node, 4) - return trimTreeTestcase{ - initial: graph, - expected: expected, - keep: keep, - } -} - -// createTestCase2 creates a test case that initially looks like: -// 3 -// | (12) -// 1 -// | (8) -// 2 -// | (15) -// 0 -// | (10) -// 4. -// -// After keeping 3 and 4, it expects the graph: -// 3 -// | (10) -// 4. -func createTestCase2() trimTreeTestcase { - // Create initial graph - graph := &Graph{make(Nodes, 5)} - nodes := graph.Nodes - for i := range nodes { - nodes[i] = createEmptyNode() - } - createEdges(nodes[3], nodes[1]) - createEdges(nodes[1], nodes[2]) - createEdges(nodes[2], nodes[0]) - createEdges(nodes[0], nodes[4]) - setEdgeWeight(nodes[3].Out, nodes[1], 12) - setEdgeWeight(nodes[1].Out, nodes[2], 8) - setEdgeWeight(nodes[2].Out, nodes[0], 15) - setEdgeWeight(nodes[0].Out, nodes[4], 10) - - // Create expected graph - expected, keep := createExpectedNodes(nodes[3], nodes[4]) - createExpectedEdges(expected[0], expected[1]) - makeExpectedEdgeResidual(expected[0], expected[1]) - setEdgeWeight(expected[0].out, expected[1].node, 10) - return trimTreeTestcase{ - initial: graph, - expected: expected, - keep: keep, - } -} - -// createTestCase3 creates an initially empty graph and expects an empty graph -// after trimming. -func createTestCase3() trimTreeTestcase { - graph := &Graph{make(Nodes, 0)} - expected, keep := createExpectedNodes() - return trimTreeTestcase{ - initial: graph, - expected: expected, - keep: keep, - } -} - -// createTestCase4 creates a test case that initially looks like: -// 0. -// -// After keeping 0, it expects the graph: -// 0. -func createTestCase4() trimTreeTestcase { - graph := &Graph{make(Nodes, 1)} - nodes := graph.Nodes - for i := range nodes { - nodes[i] = createEmptyNode() - } - expected, keep := createExpectedNodes(nodes[0]) - return trimTreeTestcase{ - initial: graph, - expected: expected, - keep: keep, - } -} - -func createTrimTreeTestCases() []trimTreeTestcase { - caseGenerators := []func() trimTreeTestcase{ - createTestCase1, - createTestCase2, - createTestCase3, - createTestCase4, - } - cases := make([]trimTreeTestcase, len(caseGenerators)) - for i, gen := range caseGenerators { - cases[i] = gen() - } - return cases -} - -func TestTrimTree(t *testing.T) { - tests := createTrimTreeTestCases() - for _, test := range tests { - graph := test.initial - graph.TrimTree(test.keep) - if !graphsEqual(graph, test.expected) { - t.Fatalf("Graphs do not match.\nExpected: %s\nFound: %s\n", - expectedNodesDebugString(test.expected), - graphDebugString(graph)) - } - } -} - -func nodeTestProfile() *profile.Profile { - mappings := []*profile.Mapping{ - { - ID: 1, - File: "symbolized_binary", - }, - { - ID: 2, - File: "unsymbolized_library_1", - }, - { - ID: 3, - File: "unsymbolized_library_2", - }, - } - functions := []*profile.Function{ - {ID: 1, Name: "symname"}, - {ID: 2}, - } - locations := []*profile.Location{ - { - ID: 1, - Mapping: mappings[0], - Line: []profile.Line{ - {Function: functions[0]}, - }, - }, - { - ID: 2, - Mapping: mappings[1], - Line: []profile.Line{ - {Function: functions[1]}, - }, - }, - { - ID: 3, - Mapping: mappings[2], - }, - } - return &profile.Profile{ - PeriodType: &profile.ValueType{Type: "cpu", Unit: "milliseconds"}, - SampleType: []*profile.ValueType{ - {Type: "type", Unit: "unit"}, - }, - Sample: []*profile.Sample{ - { - Location: []*profile.Location{locations[0]}, - Value: []int64{1}, - }, - { - Location: []*profile.Location{locations[1]}, - Value: []int64{1}, - }, - { - Location: []*profile.Location{locations[2]}, - Value: []int64{1}, - }, - }, - Location: locations, - Function: functions, - Mapping: mappings, - } -} - -// Check that nodes are properly created for a simple profile. -func TestCreateNodes(t *testing.T) { - testProfile := nodeTestProfile() - wantNodeSet := NodeSet{ - {Name: "symname"}: true, - {Objfile: "unsymbolized_library_1"}: true, - {Objfile: "unsymbolized_library_2"}: true, - } - - nodes, _ := CreateNodes(testProfile, &Options{}) - if len(nodes) != len(wantNodeSet) { - t.Errorf("got %d nodes, want %d", len(nodes), len(wantNodeSet)) - } - for _, node := range nodes { - if !wantNodeSet[node.Info] { - t.Errorf("unexpected node %v", node.Info) - } - } -} - -func TestShortenFunctionName(t *testing.T) { - type testCase struct { - name string - want string - } - testcases := []testCase{ - { - "root", - "root", - }, - { - "syscall.Syscall", - "syscall.Syscall", - }, - { - "net/http.(*conn).serve", - "http.(*conn).serve", - }, - { - "github.com/blahBlah/foo.Foo", - "foo.Foo", - }, - { - "github.com/BlahBlah/foo.Foo", - "foo.Foo", - }, - { - "github.com/blah-blah/foo_bar.(*FooBar).Foo", - "foo_bar.(*FooBar).Foo", - }, - { - "encoding/json.(*structEncoder).(encoding/json.encode)-fm", - "json.(*structEncoder).(encoding/json.encode)-fm", - }, - { - "github.com/blah/blah/vendor/gopkg.in/redis.v3.(*baseClient).(github.com/blah/blah/vendor/gopkg.in/redis.v3.process)-fm", - "redis.v3.(*baseClient).(github.com/blah/blah/vendor/gopkg.in/redis.v3.process)-fm", - }, - { - "java.util.concurrent.ThreadPoolExecutor$Worker.run", - "ThreadPoolExecutor$Worker.run", - }, - { - "java.bar.foo.FooBar.run(java.lang.Runnable)", - "FooBar.run", - }, - { - "(anonymous namespace)::Bar::Foo", - "Bar::Foo", - }, - { - "(anonymous namespace)::foo", - "foo", - }, - { - "foo_bar::Foo::bar", - "Foo::bar", - }, - { - "foo", - "foo", - }, - } - for _, tc := range testcases { - name := ShortenFunctionName(tc.name) - if got, want := name, tc.want; got != want { - t.Errorf("ShortenFunctionName(%q) = %q, want %q", tc.name, got, want) - } - } -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/graph/testdata/compose1.dot b/src/cmd/vendor/github.com/google/pprof/internal/graph/testdata/compose1.dot deleted file mode 100644 index da349a40a8..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/graph/testdata/compose1.dot +++ /dev/null @@ -1,7 +0,0 @@ -digraph "testtitle" { -node [style=filled fillcolor="#f8f8f8"] -subgraph cluster_L { "label1" [shape=box fontsize=16 label="label1\llabel2\l" tooltip="testtitle"] } -N1 [label="src\n10 (10.00%)\nof 25 (25.00%)" id="node1" fontsize=22 shape=box tooltip="src (25)" color="#b23c00" fillcolor="#edddd5"] -N2 [label="dest\n15 (15.00%)\nof 25 (25.00%)" id="node2" fontsize=24 shape=box tooltip="dest (25)" color="#b23c00" fillcolor="#edddd5"] -N1 -> N2 [label=" 10" weight=11 color="#b28559" tooltip="src -> dest (10)" labeltooltip="src -> dest (10)"] -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/graph/testdata/compose2.dot b/src/cmd/vendor/github.com/google/pprof/internal/graph/testdata/compose2.dot deleted file mode 100644 index 0c1a6ebaf1..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/graph/testdata/compose2.dot +++ /dev/null @@ -1,7 +0,0 @@ -digraph "testtitle" { -node [style=filled fillcolor="#f8f8f8"] -subgraph cluster_L { "label1" [shape=box fontsize=16 label="label1\llabel2\l" tooltip="testtitle"] } -N1 [label="SRC10 (10.00%)\nof 25 (25.00%)" id="node1" fontsize=24 shape=folder tooltip="src (25)" color="#b23c00" fillcolor="#edddd5" style="bold,filled" peripheries=2 URL="www.google.com" target="_blank"] -N2 [label="dest\n0 of 25 (25.00%)" id="node2" fontsize=8 shape=box tooltip="dest (25)" color="#b23c00" fillcolor="#edddd5"] -N1 -> N2 [label=" 10" weight=11 color="#b28559" tooltip="src -> dest (10)" labeltooltip="src -> dest (10)"] -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/graph/testdata/compose3.dot b/src/cmd/vendor/github.com/google/pprof/internal/graph/testdata/compose3.dot deleted file mode 100644 index 1b878b79df..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/graph/testdata/compose3.dot +++ /dev/null @@ -1,11 +0,0 @@ -digraph "testtitle" { -node [style=filled fillcolor="#f8f8f8"] -subgraph cluster_L { "label1" [shape=box fontsize=16 label="label1\llabel2\l" tooltip="testtitle"] } -N1 [label="src\n10 (10.00%)\nof 25 (25.00%)" id="node1" fontsize=22 shape=box tooltip="src (25)" color="#b23c00" fillcolor="#edddd5"] -N1_0 [label = "tag1" id="N1_0" fontsize=8 shape=box3d tooltip="10"] -N1 -> N1_0 [label=" 10" weight=100 tooltip="10" labeltooltip="10"] -NN1_0 [label = "tag2" id="NN1_0" fontsize=8 shape=box3d tooltip="20"] -N1 -> NN1_0 [label=" 20" weight=100 tooltip="20" labeltooltip="20"] -N2 [label="dest\n15 (15.00%)\nof 25 (25.00%)" id="node2" fontsize=24 shape=box tooltip="dest (25)" color="#b23c00" fillcolor="#edddd5"] -N1 -> N2 [label=" 10" weight=11 color="#b28559" tooltip="src ... dest (10)" labeltooltip="src ... dest (10)" style="dotted" minlen=2] -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/graph/testdata/compose4.dot b/src/cmd/vendor/github.com/google/pprof/internal/graph/testdata/compose4.dot deleted file mode 100644 index 302da8ce94..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/graph/testdata/compose4.dot +++ /dev/null @@ -1,4 +0,0 @@ -digraph "testtitle" { -node [style=filled fillcolor="#f8f8f8"] -subgraph cluster_L { "label1" [shape=box fontsize=16 label="label1\llabel2\l" tooltip="testtitle"] } -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/graph/testdata/compose5.dot b/src/cmd/vendor/github.com/google/pprof/internal/graph/testdata/compose5.dot deleted file mode 100644 index 8876e337e6..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/graph/testdata/compose5.dot +++ /dev/null @@ -1,11 +0,0 @@ -digraph "testtitle" { -node [style=filled fillcolor="#f8f8f8"] -subgraph cluster_L { "label1" [shape=box fontsize=16 label="label1\llabel2\l" tooltip="testtitle"] } -N1 [label="src\n10 (10.00%)\nof 25 (25.00%)" id="node1" fontsize=22 shape=box tooltip="src (25)" color="#b23c00" fillcolor="#edddd5"] -N1_0 [label = "tag1" id="N1_0" fontsize=8 shape=box3d tooltip="10"] -N1 -> N1_0 [label=" 10" weight=100 tooltip="10" labeltooltip="10"] -NN1_0_0 [label = "tag2" id="NN1_0_0" fontsize=8 shape=box3d tooltip="20"] -N1_0 -> NN1_0_0 [label=" 20" weight=100 tooltip="20" labeltooltip="20"] -N2 [label="dest\n15 (15.00%)\nof 25 (25.00%)" id="node2" fontsize=24 shape=box tooltip="dest (25)" color="#b23c00" fillcolor="#edddd5"] -N1 -> N2 [label=" 10" weight=11 color="#b28559" tooltip="src -> dest (10)" labeltooltip="src -> dest (10)" minlen=2] -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/graph/testdata/compose6.dot b/src/cmd/vendor/github.com/google/pprof/internal/graph/testdata/compose6.dot deleted file mode 100644 index cf884394c7..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/graph/testdata/compose6.dot +++ /dev/null @@ -1,7 +0,0 @@ -digraph "testtitle" { -node [style=filled fillcolor="#f8f8f8"] -subgraph cluster_L { "label1" [shape=box fontsize=16 label="label1\llabel2\l" URL="http://example.com" target="_blank" tooltip="testtitle"] } -N1 [label="src\n10 (10.00%)\nof 25 (25.00%)" id="node1" fontsize=22 shape=box tooltip="src (25)" color="#b23c00" fillcolor="#edddd5"] -N2 [label="dest\n15 (15.00%)\nof 25 (25.00%)" id="node2" fontsize=24 shape=box tooltip="dest (25)" color="#b23c00" fillcolor="#edddd5"] -N1 -> N2 [label=" 10" weight=11 color="#b28559" tooltip="src -> dest (10)" labeltooltip="src -> dest (10)"] -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/measurement/measurement_test.go b/src/cmd/vendor/github.com/google/pprof/internal/measurement/measurement_test.go deleted file mode 100644 index 155cafa198..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/measurement/measurement_test.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2017 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package measurement - -import ( - "testing" -) - -func TestScale(t *testing.T) { - for _, tc := range []struct { - value int64 - fromUnit, toUnit string - wantValue float64 - wantUnit string - }{ - {1, "s", "ms", 1000, "ms"}, - {1, "kb", "b", 1024, "B"}, - {1, "kbyte", "b", 1024, "B"}, - {1, "kilobyte", "b", 1024, "B"}, - {1, "mb", "kb", 1024, "kB"}, - {1, "gb", "mb", 1024, "MB"}, - {1024, "gb", "tb", 1, "TB"}, - {1024, "tb", "pb", 1, "PB"}, - {2048, "mb", "auto", 2, "GB"}, - {3.1536e7, "s", "auto", 1, "yrs"}, - {-1, "s", "ms", -1000, "ms"}, - {1, "foo", "count", 1, ""}, - {1, "foo", "bar", 1, "bar"}, - } { - if gotValue, gotUnit := Scale(tc.value, tc.fromUnit, tc.toUnit); gotValue != tc.wantValue || gotUnit != tc.wantUnit { - t.Errorf("Scale(%d, %q, %q) = (%f, %q), want (%f, %q)", - tc.value, tc.fromUnit, tc.toUnit, gotValue, gotUnit, tc.wantValue, tc.wantUnit) - } - } -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/proftest/proftest.go b/src/cmd/vendor/github.com/google/pprof/internal/proftest/proftest.go deleted file mode 100644 index 5d3a19b4a1..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/proftest/proftest.go +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package proftest provides some utility routines to test other -// packages related to profiles. -package proftest - -import ( - "encoding/json" - "fmt" - "io" - "io/ioutil" - "os" - "os/exec" - "regexp" - "testing" -) - -// Diff compares two byte arrays using the diff tool to highlight the -// differences. It is meant for testing purposes to display the -// differences between expected and actual output. -func Diff(b1, b2 []byte) (data []byte, err error) { - f1, err := ioutil.TempFile("", "proto_test") - if err != nil { - return nil, err - } - defer os.Remove(f1.Name()) - defer f1.Close() - - f2, err := ioutil.TempFile("", "proto_test") - if err != nil { - return nil, err - } - defer os.Remove(f2.Name()) - defer f2.Close() - - f1.Write(b1) - f2.Write(b2) - - data, err = exec.Command("diff", "-u", f1.Name(), f2.Name()).CombinedOutput() - if len(data) > 0 { - // diff exits with a non-zero status when the files don't match. - // Ignore that failure as long as we get output. - err = nil - } - if err != nil { - data = []byte(fmt.Sprintf("diff failed: %v\nb1: %q\nb2: %q\n", err, b1, b2)) - err = nil - } - return -} - -// EncodeJSON encodes a value into a byte array. This is intended for -// testing purposes. -func EncodeJSON(x interface{}) []byte { - data, err := json.MarshalIndent(x, "", " ") - if err != nil { - panic(err) - } - data = append(data, '\n') - return data -} - -// TestUI implements the plugin.UI interface, triggering test failures -// if more than Ignore errors not matching AllowRx are printed. -// Also tracks the number of times the error matches AllowRx in -// NumAllowRxMatches. -type TestUI struct { - T *testing.T - Ignore int - AllowRx string - NumAllowRxMatches int - Input []string - index int -} - -// ReadLine returns no input, as no input is expected during testing. -func (ui *TestUI) ReadLine(_ string) (string, error) { - if ui.index >= len(ui.Input) { - return "", io.EOF - } - input := ui.Input[ui.index] - ui.index++ - if input == "**error**" { - return "", fmt.Errorf("Error: %s", input) - } - return input, nil -} - -// Print messages are discarded by the test UI. -func (ui *TestUI) Print(args ...interface{}) { -} - -// PrintErr messages may trigger an error failure. A fixed number of -// error messages are permitted when appropriate. -func (ui *TestUI) PrintErr(args ...interface{}) { - if ui.AllowRx != "" { - if matched, err := regexp.MatchString(ui.AllowRx, fmt.Sprint(args...)); matched || err != nil { - if err != nil { - ui.T.Errorf("failed to match against regex %q: %v", ui.AllowRx, err) - } - ui.NumAllowRxMatches++ - return - } - } - if ui.Ignore > 0 { - ui.Ignore-- - return - } - // Stringify arguments with fmt.Sprint() to match what default UI - // implementation does. Without this Error() calls fmt.Sprintln() which - // _always_ adds spaces between arguments, unlike fmt.Sprint() which only - // adds them between arguments if neither is string. - ui.T.Error("unexpected error: " + fmt.Sprint(args...)) -} - -// IsTerminal indicates if the UI is an interactive terminal. -func (ui *TestUI) IsTerminal() bool { - return false -} - -// WantBrowser indicates whether a browser should be opened with the -http option. -func (ui *TestUI) WantBrowser() bool { - return false -} - -// SetAutoComplete is not supported by the test UI. -func (ui *TestUI) SetAutoComplete(_ func(string) string) { -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/report/report_test.go b/src/cmd/vendor/github.com/google/pprof/internal/report/report_test.go deleted file mode 100644 index 7c4363fadd..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/report/report_test.go +++ /dev/null @@ -1,414 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package report - -import ( - "bytes" - "io/ioutil" - "regexp" - "runtime" - "testing" - - "github.com/google/pprof/internal/binutils" - "github.com/google/pprof/internal/graph" - "github.com/google/pprof/internal/proftest" - "github.com/google/pprof/profile" -) - -type testcase struct { - rpt *Report - want string -} - -func TestSource(t *testing.T) { - const path = "testdata/" - - sampleValue1 := func(v []int64) int64 { - return v[1] - } - - for _, tc := range []testcase{ - { - rpt: New( - testProfile.Copy(), - &Options{ - OutputFormat: List, - Symbol: regexp.MustCompile(`.`), - TrimPath: "/some/path", - - SampleValue: sampleValue1, - SampleUnit: testProfile.SampleType[1].Unit, - }, - ), - want: path + "source.rpt", - }, - { - rpt: New( - testProfile.Copy(), - &Options{ - OutputFormat: Dot, - CallTree: true, - Symbol: regexp.MustCompile(`.`), - TrimPath: "/some/path", - - SampleValue: sampleValue1, - SampleUnit: testProfile.SampleType[1].Unit, - }, - ), - want: path + "source.dot", - }, - } { - var b bytes.Buffer - if err := Generate(&b, tc.rpt, &binutils.Binutils{}); err != nil { - t.Fatalf("%s: %v", tc.want, err) - } - - gold, err := ioutil.ReadFile(tc.want) - if err != nil { - t.Fatalf("%s: %v", tc.want, err) - } - if runtime.GOOS == "windows" { - gold = bytes.Replace(gold, []byte("testdata/"), []byte("testdata\\"), -1) - } - if string(b.String()) != string(gold) { - d, err := proftest.Diff(gold, b.Bytes()) - if err != nil { - t.Fatalf("%s: %v", "source", err) - } - t.Error("source" + "\n" + string(d) + "\n" + "gold:\n" + tc.want) - } - } -} - -var testM = []*profile.Mapping{ - { - ID: 1, - HasFunctions: true, - HasFilenames: true, - HasLineNumbers: true, - HasInlineFrames: true, - }, -} - -var testF = []*profile.Function{ - { - ID: 1, - Name: "main", - Filename: "testdata/source1", - }, - { - ID: 2, - Name: "foo", - Filename: "testdata/source1", - }, - { - ID: 3, - Name: "bar", - Filename: "testdata/source1", - }, - { - ID: 4, - Name: "tee", - Filename: "/some/path/testdata/source2", - }, -} - -var testL = []*profile.Location{ - { - ID: 1, - Mapping: testM[0], - Line: []profile.Line{ - { - Function: testF[0], - Line: 2, - }, - }, - }, - { - ID: 2, - Mapping: testM[0], - Line: []profile.Line{ - { - Function: testF[1], - Line: 4, - }, - }, - }, - { - ID: 3, - Mapping: testM[0], - Line: []profile.Line{ - { - Function: testF[2], - Line: 10, - }, - }, - }, - { - ID: 4, - Mapping: testM[0], - Line: []profile.Line{ - { - Function: testF[3], - Line: 2, - }, - }, - }, - { - ID: 5, - Mapping: testM[0], - Line: []profile.Line{ - { - Function: testF[3], - Line: 8, - }, - }, - }, -} - -var testProfile = &profile.Profile{ - PeriodType: &profile.ValueType{Type: "cpu", Unit: "millisecond"}, - Period: 10, - DurationNanos: 10e9, - SampleType: []*profile.ValueType{ - {Type: "samples", Unit: "count"}, - {Type: "cpu", Unit: "cycles"}, - }, - Sample: []*profile.Sample{ - { - Location: []*profile.Location{testL[0]}, - Value: []int64{1, 1}, - }, - { - Location: []*profile.Location{testL[2], testL[1], testL[0]}, - Value: []int64{1, 10}, - }, - { - Location: []*profile.Location{testL[4], testL[2], testL[0]}, - Value: []int64{1, 100}, - }, - { - Location: []*profile.Location{testL[3], testL[0]}, - Value: []int64{1, 1000}, - }, - { - Location: []*profile.Location{testL[4], testL[3], testL[0]}, - Value: []int64{1, 10000}, - }, - }, - Location: testL, - Function: testF, - Mapping: testM, -} - -func TestDisambiguation(t *testing.T) { - parent1 := &graph.Node{Info: graph.NodeInfo{Name: "parent1"}} - parent2 := &graph.Node{Info: graph.NodeInfo{Name: "parent2"}} - child1 := &graph.Node{Info: graph.NodeInfo{Name: "child"}, Function: parent1} - child2 := &graph.Node{Info: graph.NodeInfo{Name: "child"}, Function: parent2} - child3 := &graph.Node{Info: graph.NodeInfo{Name: "child"}, Function: parent1} - sibling := &graph.Node{Info: graph.NodeInfo{Name: "sibling"}, Function: parent1} - - n := []*graph.Node{parent1, parent2, child1, child2, child3, sibling} - - wanted := map[*graph.Node]string{ - parent1: "parent1", - parent2: "parent2", - child1: "child [1/2]", - child2: "child [2/2]", - child3: "child [1/2]", - sibling: "sibling", - } - - g := &graph.Graph{Nodes: n} - - names := getDisambiguatedNames(g) - - for node, want := range wanted { - if got := names[node]; got != want { - t.Errorf("name %s, got %s, want %s", node.Info.Name, got, want) - } - } -} - -func TestFunctionMap(t *testing.T) { - - fm := make(functionMap) - nodes := []graph.NodeInfo{ - {Name: "fun1"}, - {Name: "fun2", File: "filename"}, - {Name: "fun1"}, - {Name: "fun2", File: "filename2"}, - } - - want := []struct { - wantFunction profile.Function - wantAdded bool - }{ - {profile.Function{ID: 1, Name: "fun1"}, true}, - {profile.Function{ID: 2, Name: "fun2", Filename: "filename"}, true}, - {profile.Function{ID: 1, Name: "fun1"}, false}, - {profile.Function{ID: 3, Name: "fun2", Filename: "filename2"}, true}, - } - - for i, tc := range nodes { - gotFunc, gotAdded := fm.findOrAdd(tc) - if got, want := gotFunc, want[i].wantFunction; *got != want { - t.Errorf("%d: got %v, want %v", i, got, want) - } - if got, want := gotAdded, want[i].wantAdded; got != want { - t.Errorf("%d: got %v, want %v", i, got, want) - } - } -} - -func TestLegendActiveFilters(t *testing.T) { - activeFilterInput := []string{ - "focus=123|456|789|101112|131415|161718|192021|222324|252627|282930|313233|343536|363738|acbdefghijklmnop", - "show=short filter", - } - expectedLegendActiveFilter := []string{ - "Active filters:", - " focus=123|456|789|101112|131415|161718|192021|222324|252627|282930|313233|343536…", - " show=short filter", - } - legendActiveFilter := legendActiveFilters(activeFilterInput) - if len(legendActiveFilter) != len(expectedLegendActiveFilter) { - t.Errorf("wanted length %v got length %v", len(expectedLegendActiveFilter), len(legendActiveFilter)) - } - for i := range legendActiveFilter { - if legendActiveFilter[i] != expectedLegendActiveFilter[i] { - t.Errorf("%d: want \"%v\", got \"%v\"", i, expectedLegendActiveFilter[i], legendActiveFilter[i]) - } - } -} - -func TestComputeTotal(t *testing.T) { - p1 := testProfile.Copy() - p1.Sample = []*profile.Sample{ - { - Location: []*profile.Location{testL[0]}, - Value: []int64{1, 1}, - }, - { - Location: []*profile.Location{testL[2], testL[1], testL[0]}, - Value: []int64{1, 10}, - }, - { - Location: []*profile.Location{testL[4], testL[2], testL[0]}, - Value: []int64{1, 100}, - }, - } - - p2 := testProfile.Copy() - p2.Sample = []*profile.Sample{ - { - Location: []*profile.Location{testL[0]}, - Value: []int64{1, 1}, - }, - { - Location: []*profile.Location{testL[2], testL[1], testL[0]}, - Value: []int64{1, -10}, - }, - { - Location: []*profile.Location{testL[4], testL[2], testL[0]}, - Value: []int64{1, 100}, - }, - } - - p3 := testProfile.Copy() - p3.Sample = []*profile.Sample{ - { - Location: []*profile.Location{testL[0]}, - Value: []int64{10000, 1}, - }, - { - Location: []*profile.Location{testL[2], testL[1], testL[0]}, - Value: []int64{-10, 3}, - Label: map[string][]string{"pprof::base": {"true"}}, - }, - { - Location: []*profile.Location{testL[2], testL[1], testL[0]}, - Value: []int64{1000, -10}, - }, - { - Location: []*profile.Location{testL[2], testL[1], testL[0]}, - Value: []int64{-9000, 3}, - Label: map[string][]string{"pprof::base": {"true"}}, - }, - { - Location: []*profile.Location{testL[2], testL[1], testL[0]}, - Value: []int64{-1, 3}, - Label: map[string][]string{"pprof::base": {"true"}}, - }, - { - Location: []*profile.Location{testL[4], testL[2], testL[0]}, - Value: []int64{100, 100}, - }, - { - Location: []*profile.Location{testL[2], testL[1], testL[0]}, - Value: []int64{100, 3}, - Label: map[string][]string{"pprof::base": {"true"}}, - }, - } - - testcases := []struct { - desc string - prof *profile.Profile - value, meanDiv func(v []int64) int64 - wantTotal int64 - }{ - { - desc: "no diff base, all positive values, index 1", - prof: p1, - value: func(v []int64) int64 { - return v[0] - }, - wantTotal: 3, - }, - { - desc: "no diff base, all positive values, index 2", - prof: p1, - value: func(v []int64) int64 { - return v[1] - }, - wantTotal: 111, - }, - { - desc: "no diff base, some negative values", - prof: p2, - value: func(v []int64) int64 { - return v[1] - }, - wantTotal: 111, - }, - { - desc: "diff base, some negative values", - prof: p3, - value: func(v []int64) int64 { - return v[0] - }, - wantTotal: 9111, - }, - } - - for _, tc := range testcases { - t.Run(tc.desc, func(t *testing.T) { - if gotTotal := computeTotal(tc.prof, tc.value, tc.meanDiv); gotTotal != tc.wantTotal { - t.Errorf("got total %d, want %v", gotTotal, tc.wantTotal) - } - }) - } -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/report/source_test.go b/src/cmd/vendor/github.com/google/pprof/internal/report/source_test.go deleted file mode 100644 index f1dd5c70dd..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/report/source_test.go +++ /dev/null @@ -1,185 +0,0 @@ -package report - -import ( - "bytes" - "io/ioutil" - "os" - "path/filepath" - "regexp" - "runtime" - "strings" - "testing" - - "github.com/google/pprof/internal/binutils" - "github.com/google/pprof/profile" -) - -func TestWebList(t *testing.T) { - if runtime.GOOS != "linux" || runtime.GOARCH != "amd64" { - t.Skip("weblist only tested on x86-64 linux") - } - - cpu := readProfile(filepath.Join("testdata", "sample.cpu"), t) - rpt := New(cpu, &Options{ - OutputFormat: WebList, - Symbol: regexp.MustCompile("busyLoop"), - SampleValue: func(v []int64) int64 { return v[1] }, - SampleUnit: cpu.SampleType[1].Unit, - }) - var buf bytes.Buffer - if err := Generate(&buf, rpt, &binutils.Binutils{}); err != nil { - t.Fatalf("could not generate weblist: %v", err) - } - output := buf.String() - - for _, expect := range []string{"func busyLoop", "callq", "math.Abs"} { - if !strings.Contains(output, expect) { - t.Errorf("weblist output does not contain '%s':\n%s", expect, output) - } - } -} - -func TestOpenSourceFile(t *testing.T) { - tempdir, err := ioutil.TempDir("", "") - if err != nil { - t.Fatalf("failed to create temp dir: %v", err) - } - const lsep = string(filepath.ListSeparator) - for _, tc := range []struct { - desc string - searchPath string - trimPath string - fs []string - path string - wantPath string // If empty, error is wanted. - }{ - { - desc: "exact absolute path is found", - fs: []string{"foo/bar.cc"}, - path: "$dir/foo/bar.cc", - wantPath: "$dir/foo/bar.cc", - }, - { - desc: "exact relative path is found", - searchPath: "$dir", - fs: []string{"foo/bar.cc"}, - path: "foo/bar.cc", - wantPath: "$dir/foo/bar.cc", - }, - { - desc: "multiple search path", - searchPath: "some/path" + lsep + "$dir", - fs: []string{"foo/bar.cc"}, - path: "foo/bar.cc", - wantPath: "$dir/foo/bar.cc", - }, - { - desc: "relative path is found in parent dir", - searchPath: "$dir/foo/bar", - fs: []string{"bar.cc", "foo/bar/baz.cc"}, - path: "bar.cc", - wantPath: "$dir/bar.cc", - }, - { - desc: "trims configured prefix", - searchPath: "$dir", - trimPath: "some-path" + lsep + "/some/remote/path", - fs: []string{"my-project/foo/bar.cc"}, - path: "/some/remote/path/my-project/foo/bar.cc", - wantPath: "$dir/my-project/foo/bar.cc", - }, - { - desc: "trims heuristically", - searchPath: "$dir/my-project", - fs: []string{"my-project/foo/bar.cc"}, - path: "/some/remote/path/my-project/foo/bar.cc", - wantPath: "$dir/my-project/foo/bar.cc", - }, - { - desc: "error when not found", - path: "foo.cc", - }, - } { - t.Run(tc.desc, func(t *testing.T) { - defer func() { - if err := os.RemoveAll(tempdir); err != nil { - t.Fatalf("failed to remove dir %q: %v", tempdir, err) - } - }() - for _, f := range tc.fs { - path := filepath.Join(tempdir, filepath.FromSlash(f)) - dir := filepath.Dir(path) - if err := os.MkdirAll(dir, 0755); err != nil { - t.Fatalf("failed to create dir %q: %v", dir, err) - } - if err := ioutil.WriteFile(path, nil, 0644); err != nil { - t.Fatalf("failed to create file %q: %v", path, err) - } - } - tc.searchPath = filepath.FromSlash(strings.Replace(tc.searchPath, "$dir", tempdir, -1)) - tc.path = filepath.FromSlash(strings.Replace(tc.path, "$dir", tempdir, 1)) - tc.wantPath = filepath.FromSlash(strings.Replace(tc.wantPath, "$dir", tempdir, 1)) - if file, err := openSourceFile(tc.path, tc.searchPath, tc.trimPath); err != nil && tc.wantPath != "" { - t.Errorf("openSourceFile(%q, %q, %q) = err %v, want path %q", tc.path, tc.searchPath, tc.trimPath, err, tc.wantPath) - } else if err == nil { - defer file.Close() - gotPath := file.Name() - if tc.wantPath == "" { - t.Errorf("openSourceFile(%q, %q, %q) = %q, want error", tc.path, tc.searchPath, tc.trimPath, gotPath) - } else if gotPath != tc.wantPath { - t.Errorf("openSourceFile(%q, %q, %q) = %q, want path %q", tc.path, tc.searchPath, tc.trimPath, gotPath, tc.wantPath) - } - } - }) - } -} - -func TestIndentation(t *testing.T) { - for _, c := range []struct { - str string - wantIndent int - }{ - {"", 0}, - {"foobar", 0}, - {" foo", 2}, - {"\tfoo", 8}, - {"\t foo", 9}, - {" \tfoo", 8}, - {" \tfoo", 8}, - {" \tfoo", 16}, - } { - if n := indentation(c.str); n != c.wantIndent { - t.Errorf("indentation(%v): got %d, want %d", c.str, n, c.wantIndent) - } - } -} - -func readProfile(fname string, t *testing.T) *profile.Profile { - file, err := os.Open(fname) - if err != nil { - t.Fatalf("%s: could not open profile: %v", fname, err) - } - defer file.Close() - p, err := profile.Parse(file) - if err != nil { - t.Fatalf("%s: could not parse profile: %v", fname, err) - } - - // Fix file names so they do not include absolute path names. - fix := func(s string) string { - const testdir = "/internal/report/" - pos := strings.Index(s, testdir) - if pos == -1 { - return s - } - return s[pos+len(testdir):] - } - for _, m := range p.Mapping { - m.File = fix(m.File) - } - for _, f := range p.Function { - f.Filename = fix(f.Filename) - } - - return p -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/README.md b/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/README.md deleted file mode 100644 index 2b60fcca6c..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/README.md +++ /dev/null @@ -1,10 +0,0 @@ -sample/ contains a sample program that can be profiled. -sample.bin is its x86-64 binary. -sample.cpu is a profile generated by sample.bin. - -To update the binary and profile: - -```shell -go build -o sample.bin ./sample -./sample.bin -cpuprofile sample.cpu -``` diff --git a/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/sample.bin b/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/sample.bin deleted file mode 100755 index 25929e6460..0000000000 Binary files a/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/sample.bin and /dev/null differ diff --git a/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/sample.cpu b/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/sample.cpu deleted file mode 100644 index 50eea72ea2..0000000000 Binary files a/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/sample.cpu and /dev/null differ diff --git a/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/sample/sample.go b/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/sample/sample.go deleted file mode 100644 index 3c812dd5fd..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/sample/sample.go +++ /dev/null @@ -1,41 +0,0 @@ -// sample program that is used to produce some of the files in -// pprof/internal/report/testdata. -package main - -import ( - "flag" - "fmt" - "log" - "math" - "os" - "runtime/pprof" -) - -var cpuProfile = flag.String("cpuprofile", "", "where to write cpu profile") - -func main() { - flag.Parse() - f, err := os.Create(*cpuProfile) - if err != nil { - log.Fatal("could not create CPU profile: ", err) - } - if err := pprof.StartCPUProfile(f); err != nil { - log.Fatal("could not start CPU profile: ", err) - } - defer pprof.StopCPUProfile() - busyLoop() -} - -func busyLoop() { - m := make(map[int]int) - for i := 0; i < 1000000; i++ { - m[i] = i + 10 - } - var sum float64 - for i := 0; i < 100; i++ { - for _, v := range m { - sum += math.Abs(float64(v)) - } - } - fmt.Println("Sum", sum) -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/source.dot b/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/source.dot deleted file mode 100644 index b67ca168c5..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/source.dot +++ /dev/null @@ -1,17 +0,0 @@ -digraph "unnamed" { -node [style=filled fillcolor="#f8f8f8"] -subgraph cluster_L { "Duration: 10s, Total samples = 11111 " [shape=box fontsize=16 label="Duration: 10s, Total samples = 11111 \lShowing nodes accounting for 11111, 100% of 11111 total\l"] } -N1 [label="tee\nsource2:8\n10000 (90.00%)" id="node1" fontsize=24 shape=box tooltip="tee testdata/source2:8 (10000)" color="#b20500" fillcolor="#edd6d5"] -N2 [label="main\nsource1:2\n1 (0.009%)\nof 11111 (100%)" id="node2" fontsize=9 shape=box tooltip="main testdata/source1:2 (11111)" color="#b20000" fillcolor="#edd5d5"] -N3 [label="tee\nsource2:2\n1000 (9.00%)\nof 11000 (99.00%)" id="node3" fontsize=14 shape=box tooltip="tee testdata/source2:2 (11000)" color="#b20000" fillcolor="#edd5d5"] -N4 [label="tee\nsource2:8\n100 (0.9%)" id="node4" fontsize=10 shape=box tooltip="tee testdata/source2:8 (100)" color="#b2b0aa" fillcolor="#edecec"] -N5 [label="bar\nsource1:10\n10 (0.09%)" id="node5" fontsize=9 shape=box tooltip="bar testdata/source1:10 (10)" color="#b2b2b1" fillcolor="#ededed"] -N6 [label="bar\nsource1:10\n0 of 100 (0.9%)" id="node6" fontsize=8 shape=box tooltip="bar testdata/source1:10 (100)" color="#b2b0aa" fillcolor="#edecec"] -N7 [label="foo\nsource1:4\n0 of 10 (0.09%)" id="node7" fontsize=8 shape=box tooltip="foo testdata/source1:4 (10)" color="#b2b2b1" fillcolor="#ededed"] -N2 -> N3 [label=" 11000" weight=100 penwidth=5 color="#b20000" tooltip="main testdata/source1:2 -> tee testdata/source2:2 (11000)" labeltooltip="main testdata/source1:2 -> tee testdata/source2:2 (11000)"] -N3 -> N1 [label=" 10000" weight=91 penwidth=5 color="#b20500" tooltip="tee testdata/source2:2 -> tee testdata/source2:8 (10000)" labeltooltip="tee testdata/source2:2 -> tee testdata/source2:8 (10000)"] -N6 -> N4 [label=" 100" color="#b2b0aa" tooltip="bar testdata/source1:10 -> tee testdata/source2:8 (100)" labeltooltip="bar testdata/source1:10 -> tee testdata/source2:8 (100)"] -N2 -> N6 [label=" 100" color="#b2b0aa" tooltip="main testdata/source1:2 -> bar testdata/source1:10 (100)" labeltooltip="main testdata/source1:2 -> bar testdata/source1:10 (100)"] -N7 -> N5 [label=" 10" color="#b2b2b1" tooltip="foo testdata/source1:4 -> bar testdata/source1:10 (10)" labeltooltip="foo testdata/source1:4 -> bar testdata/source1:10 (10)"] -N2 -> N7 [label=" 10" color="#b2b2b1" tooltip="main testdata/source1:2 -> foo testdata/source1:4 (10)" labeltooltip="main testdata/source1:2 -> foo testdata/source1:4 (10)"] -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/source.rpt b/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/source.rpt deleted file mode 100644 index 9ec7b3b086..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/source.rpt +++ /dev/null @@ -1,49 +0,0 @@ -Total: 11111 -ROUTINE ======================== bar in testdata/source1 - 10 110 (flat, cum) 0.99% of Total - . . 5:source1 line 5; - . . 6:source1 line 6; - . . 7:source1 line 7; - . . 8:source1 line 8; - . . 9:source1 line 9; - 10 110 10:source1 line 10; - . . 11:source1 line 11; - . . 12:source1 line 12; - . . 13:source1 line 13; - . . 14:source1 line 14; - . . 15:source1 line 15; -ROUTINE ======================== foo in testdata/source1 - 0 10 (flat, cum) 0.09% of Total - . . 1:source1 line 1; - . . 2:source1 line 2; - . . 3:source1 line 3; - . 10 4:source1 line 4; - . . 5:source1 line 5; - . . 6:source1 line 6; - . . 7:source1 line 7; - . . 8:source1 line 8; - . . 9:source1 line 9; -ROUTINE ======================== main in testdata/source1 - 1 11111 (flat, cum) 100% of Total - . . 1:source1 line 1; - 1 11111 2:source1 line 2; - . . 3:source1 line 3; - . . 4:source1 line 4; - . . 5:source1 line 5; - . . 6:source1 line 6; - . . 7:source1 line 7; -ROUTINE ======================== tee in testdata/source2 - 11100 21100 (flat, cum) 189.90% of Total - . . 1:source2 line 1; - 1000 11000 2:source2 line 2; - . . 3:source2 line 3; - . . 4:source2 line 4; - . . 5:source2 line 5; - . . 6:source2 line 6; - . . 7:source2 line 7; - 10100 10100 8:source2 line 8; - . . 9:source2 line 9; - . . 10:source2 line 10; - . . 11:source2 line 11; - . . 12:source2 line 12; - . . 13:source2 line 13; diff --git a/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/source1 b/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/source1 deleted file mode 100644 index 70e3fc3397..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/source1 +++ /dev/null @@ -1,19 +0,0 @@ -source1 line 1; -source1 line 2; -source1 line 3; -source1 line 4; -source1 line 5; -source1 line 6; -source1 line 7; -source1 line 8; -source1 line 9; -source1 line 10; -source1 line 11; -source1 line 12; -source1 line 13; -source1 line 14; -source1 line 15; -source1 line 16; -source1 line 17; -source1 line 18; - diff --git a/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/source2 b/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/source2 deleted file mode 100644 index 54f99ccac6..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/report/testdata/source2 +++ /dev/null @@ -1,19 +0,0 @@ -source2 line 1; -source2 line 2; -source2 line 3; -source2 line 4; -source2 line 5; -source2 line 6; -source2 line 7; -source2 line 8; -source2 line 9; -source2 line 10; -source2 line 11; -source2 line 12; -source2 line 13; -source2 line 14; -source2 line 15; -source2 line 16; -source2 line 17; -source2 line 18; - diff --git a/src/cmd/vendor/github.com/google/pprof/internal/symbolizer/symbolizer_test.go b/src/cmd/vendor/github.com/google/pprof/internal/symbolizer/symbolizer_test.go deleted file mode 100644 index 2d26b51e87..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/symbolizer/symbolizer_test.go +++ /dev/null @@ -1,300 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package symbolizer - -import ( - "fmt" - "regexp" - "sort" - "strings" - "testing" - - "github.com/google/pprof/internal/plugin" - "github.com/google/pprof/internal/proftest" - "github.com/google/pprof/profile" -) - -var testM = []*profile.Mapping{ - { - ID: 1, - Start: 0x1000, - Limit: 0x5000, - File: "mapping", - }, -} - -var testL = []*profile.Location{ - { - ID: 1, - Mapping: testM[0], - Address: 1000, - }, - { - ID: 2, - Mapping: testM[0], - Address: 2000, - }, - { - ID: 3, - Mapping: testM[0], - Address: 3000, - }, - { - ID: 4, - Mapping: testM[0], - Address: 4000, - }, - { - ID: 5, - Mapping: testM[0], - Address: 5000, - }, -} - -var testProfile = profile.Profile{ - DurationNanos: 10e9, - SampleType: []*profile.ValueType{ - {Type: "cpu", Unit: "cycles"}, - }, - Sample: []*profile.Sample{ - { - Location: []*profile.Location{testL[0]}, - Value: []int64{1}, - }, - { - Location: []*profile.Location{testL[1], testL[0]}, - Value: []int64{10}, - }, - { - Location: []*profile.Location{testL[2], testL[0]}, - Value: []int64{100}, - }, - { - Location: []*profile.Location{testL[3], testL[0]}, - Value: []int64{1}, - }, - { - Location: []*profile.Location{testL[4], testL[3], testL[0]}, - Value: []int64{10000}, - }, - }, - Location: testL, - Mapping: testM, - PeriodType: &profile.ValueType{Type: "cpu", Unit: "milliseconds"}, - Period: 10, -} - -func TestSymbolization(t *testing.T) { - sSym := symbolzSymbolize - lSym := localSymbolize - defer func() { - symbolzSymbolize = sSym - localSymbolize = lSym - demangleFunction = Demangle - }() - symbolzSymbolize = symbolzMock - localSymbolize = localMock - demangleFunction = demangleMock - - type testcase struct { - mode string - wantComment string - } - - s := Symbolizer{ - Obj: mockObjTool{}, - UI: &proftest.TestUI{T: t}, - } - for i, tc := range []testcase{ - { - "local", - "local=[]", - }, - { - "fastlocal", - "local=[fast]", - }, - { - "remote", - "symbolz=[]", - }, - { - "", - "local=[]:symbolz=[]", - }, - { - "demangle=none", - "demangle=[none]:force:local=[force]:symbolz=[force]", - }, - { - "remote:demangle=full", - "demangle=[full]:force:symbolz=[force]", - }, - { - "local:demangle=templates", - "demangle=[templates]:force:local=[force]", - }, - { - "force:remote", - "force:symbolz=[force]", - }, - } { - prof := testProfile.Copy() - if err := s.Symbolize(tc.mode, nil, prof); err != nil { - t.Errorf("symbolize #%d: %v", i, err) - continue - } - sort.Strings(prof.Comments) - if got, want := strings.Join(prof.Comments, ":"), tc.wantComment; got != want { - t.Errorf("%q: got %s, want %s", tc.mode, got, want) - continue - } - } -} - -func symbolzMock(p *profile.Profile, force bool, sources plugin.MappingSources, syms func(string, string) ([]byte, error), ui plugin.UI) error { - var args []string - if force { - args = append(args, "force") - } - p.Comments = append(p.Comments, "symbolz=["+strings.Join(args, ",")+"]") - return nil -} - -func localMock(p *profile.Profile, fast, force bool, obj plugin.ObjTool, ui plugin.UI) error { - var args []string - if fast { - args = append(args, "fast") - } - if force { - args = append(args, "force") - } - p.Comments = append(p.Comments, "local=["+strings.Join(args, ",")+"]") - return nil -} - -func demangleMock(p *profile.Profile, force bool, mode string) { - if force { - p.Comments = append(p.Comments, "force") - } - if mode != "" { - p.Comments = append(p.Comments, "demangle=["+mode+"]") - } -} - -func TestLocalSymbolization(t *testing.T) { - prof := testProfile.Copy() - - if prof.HasFunctions() { - t.Error("unexpected function names") - } - if prof.HasFileLines() { - t.Error("unexpected filenames or line numbers") - } - - b := mockObjTool{} - if err := localSymbolize(prof, false, false, b, &proftest.TestUI{T: t}); err != nil { - t.Fatalf("localSymbolize(): %v", err) - } - - for _, loc := range prof.Location { - if err := checkSymbolizedLocation(loc.Address, loc.Line); err != nil { - t.Errorf("location %d: %v", loc.Address, err) - } - } - if !prof.HasFunctions() { - t.Error("missing function names") - } - if !prof.HasFileLines() { - t.Error("missing filenames or line numbers") - } -} - -func checkSymbolizedLocation(a uint64, got []profile.Line) error { - want, ok := mockAddresses[a] - if !ok { - return fmt.Errorf("unexpected address") - } - if len(want) != len(got) { - return fmt.Errorf("want len %d, got %d", len(want), len(got)) - } - - for i, w := range want { - g := got[i] - if g.Function.Name != w.Func { - return fmt.Errorf("want function: %q, got %q", w.Func, g.Function.Name) - } - if g.Function.Filename != w.File { - return fmt.Errorf("want filename: %q, got %q", w.File, g.Function.Filename) - } - if g.Line != int64(w.Line) { - return fmt.Errorf("want lineno: %d, got %d", w.Line, g.Line) - } - } - return nil -} - -var mockAddresses = map[uint64][]plugin.Frame{ - 1000: {frame("fun11", "file11.src", 10)}, - 2000: {frame("fun21", "file21.src", 20), frame("fun22", "file22.src", 20)}, - 3000: {frame("fun31", "file31.src", 30), frame("fun32", "file32.src", 30), frame("fun33", "file33.src", 30)}, - 4000: {frame("fun41", "file41.src", 40), frame("fun42", "file42.src", 40), frame("fun43", "file43.src", 40), frame("fun44", "file44.src", 40)}, - 5000: {frame("fun51", "file51.src", 50), frame("fun52", "file52.src", 50), frame("fun53", "file53.src", 50), frame("fun54", "file54.src", 50), frame("fun55", "file55.src", 50)}, -} - -func frame(fname, file string, line int) plugin.Frame { - return plugin.Frame{ - Func: fname, - File: file, - Line: line} -} - -type mockObjTool struct{} - -func (mockObjTool) Open(file string, start, limit, offset uint64) (plugin.ObjFile, error) { - return mockObjFile{frames: mockAddresses}, nil -} - -func (mockObjTool) Disasm(file string, start, end uint64) ([]plugin.Inst, error) { - return nil, fmt.Errorf("disassembly not supported") -} - -type mockObjFile struct { - frames map[uint64][]plugin.Frame -} - -func (mockObjFile) Name() string { - return "" -} - -func (mockObjFile) Base() uint64 { - return 0 -} - -func (mockObjFile) BuildID() string { - return "" -} - -func (mf mockObjFile) SourceLine(addr uint64) ([]plugin.Frame, error) { - return mf.frames[addr], nil -} - -func (mockObjFile) Symbols(r *regexp.Regexp, addr uint64) ([]*plugin.Sym, error) { - return []*plugin.Sym{}, nil -} - -func (mockObjFile) Close() error { - return nil -} diff --git a/src/cmd/vendor/github.com/google/pprof/internal/symbolz/symbolz_test.go b/src/cmd/vendor/github.com/google/pprof/internal/symbolz/symbolz_test.go deleted file mode 100644 index e71811f3c4..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/internal/symbolz/symbolz_test.go +++ /dev/null @@ -1,169 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package symbolz - -import ( - "fmt" - "math" - "strings" - "testing" - - "github.com/google/pprof/internal/plugin" - "github.com/google/pprof/internal/proftest" - "github.com/google/pprof/profile" -) - -func TestSymbolzURL(t *testing.T) { - for try, want := range map[string]string{ - "http://host:8000/profilez": "http://host:8000/symbolz", - "http://host:8000/profilez?seconds=5": "http://host:8000/symbolz", - "http://host:8000/profilez?seconds=5&format=proto": "http://host:8000/symbolz", - "http://host:8000/heapz?format=legacy": "http://host:8000/symbolz", - "http://host:8000/debug/pprof/profile": "http://host:8000/debug/pprof/symbol", - "http://host:8000/debug/pprof/profile?seconds=10": "http://host:8000/debug/pprof/symbol", - "http://host:8000/debug/pprof/heap": "http://host:8000/debug/pprof/symbol", - "http://some.host:8080/some/deeper/path/debug/pprof/endpoint?param=value": "http://some.host:8080/some/deeper/path/debug/pprof/symbol", - "http://host:8000/pprof/profile": "http://host:8000/pprof/symbol", - "http://host:8000/pprof/profile?seconds=15": "http://host:8000/pprof/symbol", - "http://host:8000/pprof/heap": "http://host:8000/pprof/symbol", - "http://host:8000/debug/pprof/block": "http://host:8000/debug/pprof/symbol", - "http://host:8000/debug/pprof/trace?seconds=5": "http://host:8000/debug/pprof/symbol", - "http://host:8000/debug/pprof/mutex": "http://host:8000/debug/pprof/symbol", - "http://host/whatever/pprof/heap": "http://host/whatever/pprof/symbol", - "http://host/whatever/pprof/growth": "http://host/whatever/pprof/symbol", - "http://host/whatever/pprof/profile": "http://host/whatever/pprof/symbol", - "http://host/whatever/pprof/pmuprofile": "http://host/whatever/pprof/symbol", - "http://host/whatever/pprof/contention": "http://host/whatever/pprof/symbol", - } { - if got := symbolz(try); got != want { - t.Errorf(`symbolz(%s)=%s, want "%s"`, try, got, want) - } - } -} - -func TestSymbolize(t *testing.T) { - s := plugin.MappingSources{ - "buildid": []struct { - Source string - Start uint64 - }{ - {Source: "http://localhost:80/profilez"}, - }, - } - - for _, hasFunctions := range []bool{false, true} { - for _, force := range []bool{false, true} { - p := testProfile(hasFunctions) - - if err := Symbolize(p, force, s, fetchSymbols, &proftest.TestUI{T: t}); err != nil { - t.Errorf("symbolz: %v", err) - continue - } - var wantSym, wantNoSym []*profile.Location - if force || !hasFunctions { - wantNoSym = p.Location[:1] - wantSym = p.Location[1:] - } else { - wantNoSym = p.Location - } - - if err := checkSymbolized(wantSym, true); err != nil { - t.Errorf("symbolz hasFns=%v force=%v: %v", hasFunctions, force, err) - } - if err := checkSymbolized(wantNoSym, false); err != nil { - t.Errorf("symbolz hasFns=%v force=%v: %v", hasFunctions, force, err) - } - } - } -} - -func testProfile(hasFunctions bool) *profile.Profile { - m := []*profile.Mapping{ - { - ID: 1, - Start: 0x1000, - Limit: 0x5000, - BuildID: "buildid", - HasFunctions: hasFunctions, - }, - } - p := &profile.Profile{ - Location: []*profile.Location{ - {ID: 1, Mapping: m[0], Address: 0x1000}, - {ID: 2, Mapping: m[0], Address: 0x2000}, - {ID: 3, Mapping: m[0], Address: 0x3000}, - {ID: 4, Mapping: m[0], Address: 0x4000}, - }, - Mapping: m, - } - - return p -} - -func checkSymbolized(locs []*profile.Location, wantSymbolized bool) error { - for _, loc := range locs { - if !wantSymbolized && len(loc.Line) != 0 { - return fmt.Errorf("unexpected symbolization for %#x: %v", loc.Address, loc.Line) - } - if wantSymbolized { - if len(loc.Line) != 1 { - return fmt.Errorf("expected symbolization for %#x: %v", loc.Address, loc.Line) - } - address := loc.Address - loc.Mapping.Start - if got, want := loc.Line[0].Function.Name, fmt.Sprintf("%#x", address); got != want { - return fmt.Errorf("symbolz %#x, got %s, want %s", address, got, want) - } - } - } - return nil -} - -func fetchSymbols(source, post string) ([]byte, error) { - var symbolz string - - addresses := strings.Split(post, "+") - // Do not symbolize the first symbol. - for _, address := range addresses[1:] { - symbolz += fmt.Sprintf("%s\t%s\n", address, address) - } - return []byte(symbolz), nil -} - -func TestAdjust(t *testing.T) { - for _, tc := range []struct { - addr uint64 - offset int64 - wantAdj uint64 - wantOverflow bool - }{{math.MaxUint64, 0, math.MaxUint64, false}, - {math.MaxUint64, 1, 0, true}, - {math.MaxUint64 - 1, 1, math.MaxUint64, false}, - {math.MaxUint64 - 1, 2, 0, true}, - {math.MaxInt64 + 1, math.MaxInt64, math.MaxUint64, false}, - {0, 0, 0, false}, - {0, -1, 0, true}, - {1, -1, 0, false}, - {2, -1, 1, false}, - {2, -2, 0, false}, - {2, -3, 0, true}, - {-math.MinInt64, math.MinInt64, 0, false}, - {-math.MinInt64 + 1, math.MinInt64, 1, false}, - {-math.MinInt64 - 1, math.MinInt64, 0, true}, - } { - if adj, overflow := adjust(tc.addr, tc.offset); adj != tc.wantAdj || overflow != tc.wantOverflow { - t.Errorf("adjust(%d, %d) = (%d, %t), want (%d, %t)", tc.addr, tc.offset, adj, overflow, tc.wantAdj, tc.wantOverflow) - } - } -} diff --git a/src/cmd/vendor/github.com/google/pprof/profile/filter_test.go b/src/cmd/vendor/github.com/google/pprof/profile/filter_test.go deleted file mode 100644 index 3fd1787e8b..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/filter_test.go +++ /dev/null @@ -1,599 +0,0 @@ -// Copyright 2018 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package profile - -import ( - "fmt" - "regexp" - "strings" - "testing" - - "github.com/google/pprof/internal/proftest" -) - -var mappings = []*Mapping{ - {ID: 1, Start: 0x10000, Limit: 0x40000, File: "map0", HasFunctions: true, HasFilenames: true, HasLineNumbers: true, HasInlineFrames: true}, - {ID: 2, Start: 0x50000, Limit: 0x70000, File: "map1", HasFunctions: true, HasFilenames: true, HasLineNumbers: true, HasInlineFrames: true}, -} - -var functions = []*Function{ - {ID: 1, Name: "fun0", SystemName: "fun0", Filename: "file0"}, - {ID: 2, Name: "fun1", SystemName: "fun1", Filename: "file1"}, - {ID: 3, Name: "fun2", SystemName: "fun2", Filename: "file2"}, - {ID: 4, Name: "fun3", SystemName: "fun3", Filename: "file3"}, - {ID: 5, Name: "fun4", SystemName: "fun4", Filename: "file4"}, - {ID: 6, Name: "fun5", SystemName: "fun5", Filename: "file5"}, - {ID: 7, Name: "fun6", SystemName: "fun6", Filename: "file6"}, - {ID: 8, Name: "fun7", SystemName: "fun7", Filename: "file7"}, - {ID: 9, Name: "fun8", SystemName: "fun8", Filename: "file8"}, - {ID: 10, Name: "fun9", SystemName: "fun9", Filename: "file9"}, - {ID: 11, Name: "fun10", SystemName: "fun10", Filename: "file10"}, -} - -var noInlinesLocs = []*Location{ - {ID: 1, Mapping: mappings[0], Address: 0x1000, Line: []Line{{Function: functions[0], Line: 1}}}, - {ID: 2, Mapping: mappings[0], Address: 0x2000, Line: []Line{{Function: functions[1], Line: 1}}}, - {ID: 3, Mapping: mappings[0], Address: 0x3000, Line: []Line{{Function: functions[2], Line: 1}}}, - {ID: 4, Mapping: mappings[0], Address: 0x4000, Line: []Line{{Function: functions[3], Line: 1}}}, - {ID: 5, Mapping: mappings[0], Address: 0x5000, Line: []Line{{Function: functions[4], Line: 1}}}, - {ID: 6, Mapping: mappings[0], Address: 0x6000, Line: []Line{{Function: functions[5], Line: 1}}}, - {ID: 7, Mapping: mappings[0], Address: 0x7000, Line: []Line{{Function: functions[6], Line: 1}}}, - {ID: 8, Mapping: mappings[0], Address: 0x8000, Line: []Line{{Function: functions[7], Line: 1}}}, - {ID: 9, Mapping: mappings[0], Address: 0x9000, Line: []Line{{Function: functions[8], Line: 1}}}, - {ID: 10, Mapping: mappings[0], Address: 0x10000, Line: []Line{{Function: functions[9], Line: 1}}}, - {ID: 11, Mapping: mappings[1], Address: 0x11000, Line: []Line{{Function: functions[10], Line: 1}}}, -} - -var noInlinesProfile = &Profile{ - TimeNanos: 10000, - PeriodType: &ValueType{Type: "cpu", Unit: "milliseconds"}, - Period: 1, - DurationNanos: 10e9, - SampleType: []*ValueType{{Type: "samples", Unit: "count"}}, - Mapping: mappings, - Function: functions, - Location: noInlinesLocs, - Sample: []*Sample{ - {Value: []int64{1}, Location: []*Location{noInlinesLocs[0], noInlinesLocs[1], noInlinesLocs[2], noInlinesLocs[3]}}, - {Value: []int64{2}, Location: []*Location{noInlinesLocs[4], noInlinesLocs[5], noInlinesLocs[1], noInlinesLocs[6]}}, - {Value: []int64{3}, Location: []*Location{noInlinesLocs[7], noInlinesLocs[8]}}, - {Value: []int64{4}, Location: []*Location{noInlinesLocs[9], noInlinesLocs[4], noInlinesLocs[10], noInlinesLocs[7]}}, - }, -} - -var allNoInlinesSampleFuncs = []string{ - "fun0 fun1 fun2 fun3: 1", - "fun4 fun5 fun1 fun6: 2", - "fun7 fun8: 3", - "fun9 fun4 fun10 fun7: 4", -} - -var inlinesLocs = []*Location{ - {ID: 1, Mapping: mappings[0], Address: 0x1000, Line: []Line{{Function: functions[0], Line: 1}, {Function: functions[1], Line: 1}}}, - {ID: 2, Mapping: mappings[0], Address: 0x2000, Line: []Line{{Function: functions[2], Line: 1}, {Function: functions[3], Line: 1}}}, - {ID: 3, Mapping: mappings[0], Address: 0x3000, Line: []Line{{Function: functions[4], Line: 1}, {Function: functions[5], Line: 1}, {Function: functions[6], Line: 1}}}, -} - -var inlinesProfile = &Profile{ - TimeNanos: 10000, - PeriodType: &ValueType{Type: "cpu", Unit: "milliseconds"}, - Period: 1, - DurationNanos: 10e9, - SampleType: []*ValueType{{Type: "samples", Unit: "count"}}, - Mapping: mappings, - Function: functions, - Location: inlinesLocs, - Sample: []*Sample{ - {Value: []int64{1}, Location: []*Location{inlinesLocs[0], inlinesLocs[1]}}, - {Value: []int64{2}, Location: []*Location{inlinesLocs[2]}}, - }, -} - -var emptyLinesLocs = []*Location{ - {ID: 1, Mapping: mappings[0], Address: 0x1000, Line: []Line{{Function: functions[0], Line: 1}, {Function: functions[1], Line: 1}}}, - {ID: 2, Mapping: mappings[0], Address: 0x2000, Line: []Line{}}, - {ID: 3, Mapping: mappings[1], Address: 0x2000, Line: []Line{}}, -} - -var emptyLinesProfile = &Profile{ - TimeNanos: 10000, - PeriodType: &ValueType{Type: "cpu", Unit: "milliseconds"}, - Period: 1, - DurationNanos: 10e9, - SampleType: []*ValueType{{Type: "samples", Unit: "count"}}, - Mapping: mappings, - Function: functions, - Location: emptyLinesLocs, - Sample: []*Sample{ - {Value: []int64{1}, Location: []*Location{emptyLinesLocs[0], emptyLinesLocs[1]}}, - {Value: []int64{2}, Location: []*Location{emptyLinesLocs[2]}}, - {Value: []int64{3}, Location: []*Location{}}, - }, -} - -func TestFilterSamplesByName(t *testing.T) { - for _, tc := range []struct { - // name is the name of the test case. - name string - // profile is the profile that gets filtered. - profile *Profile - // These are the inputs to FilterSamplesByName(). - focus, ignore, hide, show *regexp.Regexp - // want{F,I,S,H}m are expected return values from FilterSamplesByName. - wantFm, wantIm, wantSm, wantHm bool - // wantSampleFuncs contains expected stack functions and sample value after - // filtering, in the same order as in the profile. The format is as - // returned by sampleFuncs function below, which is "callee caller: ". - wantSampleFuncs []string - }{ - // No Filters - { - name: "empty filters keep all frames", - profile: noInlinesProfile, - wantFm: true, - wantSampleFuncs: allNoInlinesSampleFuncs, - }, - // Focus - { - name: "focus with no matches", - profile: noInlinesProfile, - focus: regexp.MustCompile("unknown"), - }, - { - name: "focus matches function names", - profile: noInlinesProfile, - focus: regexp.MustCompile("fun1"), - wantFm: true, - wantSampleFuncs: []string{ - "fun0 fun1 fun2 fun3: 1", - "fun4 fun5 fun1 fun6: 2", - "fun9 fun4 fun10 fun7: 4", - }, - }, - { - name: "focus matches file names", - profile: noInlinesProfile, - focus: regexp.MustCompile("file1"), - wantFm: true, - wantSampleFuncs: []string{ - "fun0 fun1 fun2 fun3: 1", - "fun4 fun5 fun1 fun6: 2", - "fun9 fun4 fun10 fun7: 4", - }, - }, - { - name: "focus matches mapping names", - profile: noInlinesProfile, - focus: regexp.MustCompile("map1"), - wantFm: true, - wantSampleFuncs: []string{ - "fun9 fun4 fun10 fun7: 4", - }, - }, - { - name: "focus matches inline functions", - profile: inlinesProfile, - focus: regexp.MustCompile("fun5"), - wantFm: true, - wantSampleFuncs: []string{ - "fun4 fun5 fun6: 2", - }, - }, - // Ignore - { - name: "ignore with no matches matches all samples", - profile: noInlinesProfile, - ignore: regexp.MustCompile("unknown"), - wantFm: true, - wantSampleFuncs: allNoInlinesSampleFuncs, - }, - { - name: "ignore matches function names", - profile: noInlinesProfile, - ignore: regexp.MustCompile("fun1"), - wantFm: true, - wantIm: true, - wantSampleFuncs: []string{ - "fun7 fun8: 3", - }, - }, - { - name: "ignore matches file names", - profile: noInlinesProfile, - ignore: regexp.MustCompile("file1"), - wantFm: true, - wantIm: true, - wantSampleFuncs: []string{ - "fun7 fun8: 3", - }, - }, - { - name: "ignore matches mapping names", - profile: noInlinesProfile, - ignore: regexp.MustCompile("map1"), - wantFm: true, - wantIm: true, - wantSampleFuncs: []string{ - "fun0 fun1 fun2 fun3: 1", - "fun4 fun5 fun1 fun6: 2", - "fun7 fun8: 3", - }, - }, - { - name: "ignore matches inline functions", - profile: inlinesProfile, - ignore: regexp.MustCompile("fun5"), - wantFm: true, - wantIm: true, - wantSampleFuncs: []string{ - "fun0 fun1 fun2 fun3: 1", - }, - }, - // Show - { - name: "show with no matches", - profile: noInlinesProfile, - show: regexp.MustCompile("unknown"), - wantFm: true, - }, - { - name: "show matches function names", - profile: noInlinesProfile, - show: regexp.MustCompile("fun1|fun2"), - wantFm: true, - wantSm: true, - wantSampleFuncs: []string{ - "fun1 fun2: 1", - "fun1: 2", - "fun10: 4", - }, - }, - { - name: "show matches file names", - profile: noInlinesProfile, - show: regexp.MustCompile("file1|file3"), - wantFm: true, - wantSm: true, - wantSampleFuncs: []string{ - "fun1 fun3: 1", - "fun1: 2", - "fun10: 4", - }, - }, - { - name: "show matches mapping names", - profile: noInlinesProfile, - show: regexp.MustCompile("map1"), - wantFm: true, - wantSm: true, - wantSampleFuncs: []string{ - "fun10: 4", - }, - }, - { - name: "show matches inline functions", - profile: inlinesProfile, - show: regexp.MustCompile("fun[03]"), - wantFm: true, - wantSm: true, - wantSampleFuncs: []string{ - "fun0 fun3: 1", - }, - }, - { - name: "show keeps all lines when matching both mapping and function", - profile: inlinesProfile, - show: regexp.MustCompile("map0|fun5"), - wantFm: true, - wantSm: true, - wantSampleFuncs: []string{ - "fun0 fun1 fun2 fun3: 1", - "fun4 fun5 fun6: 2", - }, - }, - // Hide - { - name: "hide with no matches", - profile: noInlinesProfile, - hide: regexp.MustCompile("unknown"), - wantFm: true, - wantSampleFuncs: allNoInlinesSampleFuncs, - }, - { - name: "hide matches function names", - profile: noInlinesProfile, - hide: regexp.MustCompile("fun1|fun2"), - wantFm: true, - wantHm: true, - wantSampleFuncs: []string{ - "fun0 fun3: 1", - "fun4 fun5 fun6: 2", - "fun7 fun8: 3", - "fun9 fun4 fun7: 4", - }, - }, - { - name: "hide matches file names", - profile: noInlinesProfile, - hide: regexp.MustCompile("file1|file3"), - wantFm: true, - wantHm: true, - wantSampleFuncs: []string{ - "fun0 fun2: 1", - "fun4 fun5 fun6: 2", - "fun7 fun8: 3", - "fun9 fun4 fun7: 4", - }, - }, - { - name: "hide matches mapping names", - profile: noInlinesProfile, - hide: regexp.MustCompile("map1"), - wantFm: true, - wantHm: true, - wantSampleFuncs: []string{ - "fun0 fun1 fun2 fun3: 1", - "fun4 fun5 fun1 fun6: 2", - "fun7 fun8: 3", - "fun9 fun4 fun7: 4", - }, - }, - { - name: "hide matches inline functions", - profile: inlinesProfile, - hide: regexp.MustCompile("fun[125]"), - wantFm: true, - wantHm: true, - wantSampleFuncs: []string{ - "fun0 fun3: 1", - "fun4 fun6: 2", - }, - }, - { - name: "hide drops all lines when matching both mapping and function", - profile: inlinesProfile, - hide: regexp.MustCompile("map0|fun5"), - wantFm: true, - wantHm: true, - }, - // Compound filters - { - name: "hides a stack matched by both focus and ignore", - profile: noInlinesProfile, - focus: regexp.MustCompile("fun1|fun7"), - ignore: regexp.MustCompile("fun1"), - wantFm: true, - wantIm: true, - wantSampleFuncs: []string{ - "fun7 fun8: 3", - }, - }, - { - name: "hides a function if both show and hide match it", - profile: noInlinesProfile, - show: regexp.MustCompile("fun1"), - hide: regexp.MustCompile("fun10"), - wantFm: true, - wantSm: true, - wantHm: true, - wantSampleFuncs: []string{ - "fun1: 1", - "fun1: 2", - }, - }, - } { - t.Run(tc.name, func(t *testing.T) { - p := tc.profile.Copy() - fm, im, hm, sm := p.FilterSamplesByName(tc.focus, tc.ignore, tc.hide, tc.show) - - type match struct{ fm, im, hm, sm bool } - if got, want := (match{fm: fm, im: im, hm: hm, sm: sm}), (match{fm: tc.wantFm, im: tc.wantIm, hm: tc.wantHm, sm: tc.wantSm}); got != want { - t.Errorf("match got %+v want %+v", got, want) - } - - if got, want := strings.Join(sampleFuncs(p), "\n")+"\n", strings.Join(tc.wantSampleFuncs, "\n")+"\n"; got != want { - diff, err := proftest.Diff([]byte(want), []byte(got)) - if err != nil { - t.Fatalf("failed to get diff: %v", err) - } - t.Errorf("FilterSamplesByName: got diff(want->got):\n%s", diff) - } - }) - } -} - -func TestShowFrom(t *testing.T) { - for _, tc := range []struct { - name string - profile *Profile - showFrom *regexp.Regexp - // wantMatch is the expected return value. - wantMatch bool - // wantSampleFuncs contains expected stack functions and sample value after - // filtering, in the same order as in the profile. The format is as - // returned by sampleFuncs function below, which is "callee caller: ". - wantSampleFuncs []string - }{ - { - name: "nil showFrom keeps all frames", - profile: noInlinesProfile, - wantMatch: false, - wantSampleFuncs: allNoInlinesSampleFuncs, - }, - { - name: "showFrom with no matches drops all samples", - profile: noInlinesProfile, - showFrom: regexp.MustCompile("unknown"), - wantMatch: false, - }, - { - name: "showFrom matches function names", - profile: noInlinesProfile, - showFrom: regexp.MustCompile("fun1"), - wantMatch: true, - wantSampleFuncs: []string{ - "fun0 fun1: 1", - "fun4 fun5 fun1: 2", - "fun9 fun4 fun10: 4", - }, - }, - { - name: "showFrom matches file names", - profile: noInlinesProfile, - showFrom: regexp.MustCompile("file1"), - wantMatch: true, - wantSampleFuncs: []string{ - "fun0 fun1: 1", - "fun4 fun5 fun1: 2", - "fun9 fun4 fun10: 4", - }, - }, - { - name: "showFrom matches mapping names", - profile: noInlinesProfile, - showFrom: regexp.MustCompile("map1"), - wantMatch: true, - wantSampleFuncs: []string{ - "fun9 fun4 fun10: 4", - }, - }, - { - name: "showFrom drops frames above highest of multiple matches", - profile: noInlinesProfile, - showFrom: regexp.MustCompile("fun[12]"), - wantMatch: true, - wantSampleFuncs: []string{ - "fun0 fun1 fun2: 1", - "fun4 fun5 fun1: 2", - "fun9 fun4 fun10: 4", - }, - }, - { - name: "showFrom matches inline functions", - profile: inlinesProfile, - showFrom: regexp.MustCompile("fun0|fun5"), - wantMatch: true, - wantSampleFuncs: []string{ - "fun0: 1", - "fun4 fun5: 2", - }, - }, - { - name: "showFrom drops frames above highest of multiple inline matches", - profile: inlinesProfile, - showFrom: regexp.MustCompile("fun[1245]"), - wantMatch: true, - wantSampleFuncs: []string{ - "fun0 fun1 fun2: 1", - "fun4 fun5: 2", - }, - }, - { - name: "showFrom keeps all lines when matching mapping and function", - profile: inlinesProfile, - showFrom: regexp.MustCompile("map0|fun5"), - wantMatch: true, - wantSampleFuncs: []string{ - "fun0 fun1 fun2 fun3: 1", - "fun4 fun5 fun6: 2", - }, - }, - { - name: "showFrom matches location with empty lines", - profile: emptyLinesProfile, - showFrom: regexp.MustCompile("map1"), - wantMatch: true, - wantSampleFuncs: []string{ - ": 2", - }, - }, - } { - t.Run(tc.name, func(t *testing.T) { - p := tc.profile.Copy() - - if gotMatch := p.ShowFrom(tc.showFrom); gotMatch != tc.wantMatch { - t.Errorf("match got %+v, want %+v", gotMatch, tc.wantMatch) - } - - if got, want := strings.Join(sampleFuncs(p), "\n")+"\n", strings.Join(tc.wantSampleFuncs, "\n")+"\n"; got != want { - diff, err := proftest.Diff([]byte(want), []byte(got)) - if err != nil { - t.Fatalf("failed to get diff: %v", err) - } - t.Errorf("profile samples got diff(want->got):\n%s", diff) - } - }) - } -} - -// sampleFuncs returns a slice of strings where each string represents one -// profile sample in the format " : ". This allows -// the expected values for test cases to be specifed in human-readable strings. -func sampleFuncs(p *Profile) []string { - var ret []string - for _, s := range p.Sample { - var funcs []string - for _, loc := range s.Location { - for _, line := range loc.Line { - funcs = append(funcs, line.Function.Name) - } - } - ret = append(ret, fmt.Sprintf("%s: %d", strings.Join(funcs, " "), s.Value[0])) - } - return ret -} - -func TestTagFilter(t *testing.T) { - // Perform several forms of tag filtering on the test profile. - - type filterTestcase struct { - include, exclude *regexp.Regexp - im, em bool - count int - } - - countTags := func(p *Profile) map[string]bool { - tags := make(map[string]bool) - - for _, s := range p.Sample { - for l := range s.Label { - tags[l] = true - } - for l := range s.NumLabel { - tags[l] = true - } - } - return tags - } - - for tx, tc := range []filterTestcase{ - {nil, nil, true, false, 3}, - {regexp.MustCompile("notfound"), nil, false, false, 0}, - {regexp.MustCompile("key1"), nil, true, false, 1}, - {nil, regexp.MustCompile("key[12]"), true, true, 1}, - } { - prof := testProfile1.Copy() - gim, gem := prof.FilterTagsByName(tc.include, tc.exclude) - if gim != tc.im { - t.Errorf("Filter #%d, got include match=%v, want %v", tx, gim, tc.im) - } - if gem != tc.em { - t.Errorf("Filter #%d, got exclude match=%v, want %v", tx, gem, tc.em) - } - if tags := countTags(prof); len(tags) != tc.count { - t.Errorf("Filter #%d, got %d tags[%v], want %d", tx, len(tags), tags, tc.count) - } - } -} diff --git a/src/cmd/vendor/github.com/google/pprof/profile/index_test.go b/src/cmd/vendor/github.com/google/pprof/profile/index_test.go deleted file mode 100644 index f846b59273..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/index_test.go +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright 2016 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package profile - -import ( - "testing" -) - -func TestSampleIndexByName(t *testing.T) { - for _, c := range []struct { - desc string - sampleTypes []string - defaultSampleType string - index string - want int - wantError bool - }{ - { - desc: "use last by default", - index: "", - want: 1, - sampleTypes: []string{"zero", "default"}, - }, - { - desc: "honour specified default", - index: "", - want: 1, - defaultSampleType: "default", - sampleTypes: []string{"zero", "default", "two"}, - }, - { - desc: "invalid default is ignored", - index: "", - want: 2, - defaultSampleType: "non-existent", - sampleTypes: []string{"zero", "one", "default"}, - }, - { - desc: "index by int", - index: "0", - want: 0, - sampleTypes: []string{"zero", "one", "two"}, - }, - { - desc: "index by int ignores default", - index: "0", - want: 0, - defaultSampleType: "default", - sampleTypes: []string{"zero", "default", "two"}, - }, - { - desc: "index by name", - index: "two", - want: 2, - sampleTypes: []string{"zero", "one", "two", "three"}, - }, - { - desc: "index by name ignores default", - index: "zero", - want: 0, - defaultSampleType: "default", - sampleTypes: []string{"zero", "default", "two"}, - }, - { - desc: "out of bound int causes error", - index: "100", - wantError: true, - sampleTypes: []string{"zero", "default"}, - }, - { - desc: "unknown name causes error", - index: "does not exist", - wantError: true, - sampleTypes: []string{"zero", "default"}, - }, - { - desc: "'inused_{x}' recognized for legacy '{x}'", - index: "inuse_zero", - want: 0, - sampleTypes: []string{"zero", "default"}, - }, - } { - p := &Profile{ - DefaultSampleType: c.defaultSampleType, - SampleType: []*ValueType{}, - } - for _, st := range c.sampleTypes { - p.SampleType = append(p.SampleType, &ValueType{Type: st, Unit: "milliseconds"}) - } - - got, err := p.SampleIndexByName(c.index) - - switch { - case c.wantError && err == nil: - t.Errorf("%s: error should have been returned not index=%d, err=%v", c.desc, got, err) - case !c.wantError && err != nil: - t.Errorf("%s: unexpected got index=%d, err=%v; wanted index=%d, err=nil", c.desc, got, err, c.want) - case !c.wantError && got != c.want: - t.Errorf("%s: got index=%d, want index=%d", c.desc, got, c.want) - } - } -} diff --git a/src/cmd/vendor/github.com/google/pprof/profile/legacy_profile_test.go b/src/cmd/vendor/github.com/google/pprof/profile/legacy_profile_test.go deleted file mode 100644 index 6ba0e338c9..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/legacy_profile_test.go +++ /dev/null @@ -1,321 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package profile - -import ( - "bytes" - "fmt" - "reflect" - "strconv" - "strings" - "testing" -) - -func TestLegacyProfileType(t *testing.T) { - type testcase struct { - sampleTypes []string - typeSet [][]string - want bool - setName string - } - - heap := heapzSampleTypes - cont := contentionzSampleTypes - testcases := []testcase{ - // True cases - {[]string{"allocations", "size"}, heap, true, "heapzSampleTypes"}, - {[]string{"objects", "space"}, heap, true, "heapzSampleTypes"}, - {[]string{"inuse_objects", "inuse_space"}, heap, true, "heapzSampleTypes"}, - {[]string{"alloc_objects", "alloc_space"}, heap, true, "heapzSampleTypes"}, - {[]string{"alloc_objects", "alloc_space", "inuse_objects", "inuse_space"}, heap, true, "heapzSampleTypes"}, - {[]string{"contentions", "delay"}, cont, true, "contentionzSampleTypes"}, - // False cases - {[]string{"objects"}, heap, false, "heapzSampleTypes"}, - {[]string{"objects", "unknown"}, heap, false, "heapzSampleTypes"}, - {[]string{"inuse_objects", "inuse_space", "alloc_objects", "alloc_space"}, heap, false, "heapzSampleTypes"}, - {[]string{"contentions", "delay"}, heap, false, "heapzSampleTypes"}, - {[]string{"samples", "cpu"}, heap, false, "heapzSampleTypes"}, - {[]string{"samples", "cpu"}, cont, false, "contentionzSampleTypes"}, - } - - for _, tc := range testcases { - p := profileOfType(tc.sampleTypes) - if got := isProfileType(p, tc.typeSet); got != tc.want { - t.Error("isProfileType({"+strings.Join(tc.sampleTypes, ",")+"},", tc.setName, "), got", got, "want", tc.want) - } - } -} - -func TestCpuParse(t *testing.T) { - // profileString is a legacy encoded profile, represnted by words separated by ":" - // Each sample has the form value : N : stack1..stackN - // EOF is represented as "0:1:0" - profileString := "1:3:100:999:100:" // sample with bogus 999 and duplicate leaf - profileString += "1:5:200:999:200:501:502:" // sample with bogus 999 and duplicate leaf - profileString += "1:12:300:999:300:601:602:603:604:605:606:607:608:609:" // sample with bogus 999 and duplicate leaf - profileString += "0:1:0000" // EOF -- must use 4 bytes for the final zero - - p, err := cpuProfile([]byte(profileString), 1, parseString) - if err != nil { - t.Fatal(err) - } - - if err := checkTestSample(p, []uint64{100}); err != nil { - t.Error(err) - } - if err := checkTestSample(p, []uint64{200, 500, 501}); err != nil { - t.Error(err) - } - if err := checkTestSample(p, []uint64{300, 600, 601, 602, 603, 604, 605, 606, 607, 608}); err != nil { - t.Error(err) - } -} - -func parseString(b []byte) (uint64, []byte) { - slices := bytes.SplitN(b, []byte(":"), 2) - var value, remainder []byte - if len(slices) > 0 { - value = slices[0] - } - if len(slices) > 1 { - remainder = slices[1] - } - v, _ := strconv.ParseUint(string(value), 10, 64) - return v, remainder -} - -func checkTestSample(p *Profile, want []uint64) error { - for _, s := range p.Sample { - got := []uint64{} - for _, l := range s.Location { - got = append(got, l.Address) - } - if reflect.DeepEqual(got, want) { - return nil - } - } - return fmt.Errorf("Could not find sample : %v", want) -} - -// profileOfType creates an empty profile with only sample types set, -// for testing purposes only. -func profileOfType(sampleTypes []string) *Profile { - p := new(Profile) - p.SampleType = make([]*ValueType, len(sampleTypes)) - for i, t := range sampleTypes { - p.SampleType[i] = new(ValueType) - p.SampleType[i].Type = t - } - return p -} - -func TestParseMappingEntry(t *testing.T) { - for _, test := range []*struct { - entry string - want *Mapping - }{ - { - entry: "00400000-02e00000 r-xp 00000000 00:00 0", - want: &Mapping{ - Start: 0x400000, - Limit: 0x2e00000, - }, - }, - { - entry: "02e00000-02e8a000 r-xp 02a00000 00:00 15953927 /foo/bin", - want: &Mapping{ - Start: 0x2e00000, - Limit: 0x2e8a000, - Offset: 0x2a00000, - File: "/foo/bin", - }, - }, - { - entry: "02e00000-02e8a000 r-xp 000000 00:00 15953927 [vdso]", - want: &Mapping{ - Start: 0x2e00000, - Limit: 0x2e8a000, - File: "[vdso]", - }, - }, - { - entry: " 02e00000-02e8a000: /foo/bin (@2a00000)", - want: &Mapping{ - Start: 0x2e00000, - Limit: 0x2e8a000, - Offset: 0x2a00000, - File: "/foo/bin", - }, - }, - { - entry: " 02e00000-02e8a000: /foo/bin (deleted)", - want: &Mapping{ - Start: 0x2e00000, - Limit: 0x2e8a000, - File: "/foo/bin", - }, - }, - { - entry: " 02e00000-02e8a000: /foo/bin", - want: &Mapping{ - Start: 0x2e00000, - Limit: 0x2e8a000, - File: "/foo/bin", - }, - }, - { - entry: " 02e00000-02e8a000: [vdso]", - want: &Mapping{ - Start: 0x2e00000, - Limit: 0x2e8a000, - File: "[vdso]", - }, - }, - {entry: "0xff6810563000 0xff6810565000 r-xp abc_exe 87c4d547f895cfd6a370e08dc5c5ee7bd4199d5b", - want: &Mapping{ - Start: 0xff6810563000, - Limit: 0xff6810565000, - File: "abc_exe", - BuildID: "87c4d547f895cfd6a370e08dc5c5ee7bd4199d5b", - }, - }, - {entry: "7f5e5435e000-7f5e5455e000 --xp 00002000 00:00 1531 myprogram", - want: &Mapping{ - Start: 0x7f5e5435e000, - Limit: 0x7f5e5455e000, - Offset: 0x2000, - File: "myprogram", - }, - }, - {entry: "7f7472710000-7f7472722000 r-xp 00000000 fc:00 790190 /usr/lib/libfantastic-1.2.so", - want: &Mapping{ - Start: 0x7f7472710000, - Limit: 0x7f7472722000, - File: "/usr/lib/libfantastic-1.2.so", - }, - }, - {entry: "7f47a542f000-7f47a5447000: /lib/libpthread-2.15.so", - want: &Mapping{ - Start: 0x7f47a542f000, - Limit: 0x7f47a5447000, - File: "/lib/libpthread-2.15.so", - }, - }, - {entry: "0x40000-0x80000 /path/to/binary (@FF00) abc123456", - want: &Mapping{ - Start: 0x40000, - Limit: 0x80000, - File: "/path/to/binary", - Offset: 0xFF00, - BuildID: "abc123456", - }, - }, - {entry: "W1220 15:07:15.201776 8272 logger.cc:12033] --- Memory map: ---\n" + - "0x40000-0x80000 /path/to/binary (@FF00) abc123456", - want: &Mapping{ - Start: 0x40000, - Limit: 0x80000, - File: "/path/to/binary", - Offset: 0xFF00, - BuildID: "abc123456", - }, - }, - {entry: "W1220 15:07:15.201776 8272 logger.cc:12033] --- Memory map: ---\n" + - "W1220 15:07:15.202776 8272 logger.cc:12036] 0x40000-0x80000 /path/to/binary (@FF00) abc123456", - want: &Mapping{ - Start: 0x40000, - Limit: 0x80000, - File: "/path/to/binary", - Offset: 0xFF00, - BuildID: "abc123456", - }, - }, - {entry: "7f5e5435e000-7f5e5455e000 ---p 00002000 00:00 1531 myprogram", - want: nil, - }, - } { - got, err := ParseProcMaps(strings.NewReader(test.entry)) - if err != nil { - t.Errorf("%s: %v", test.entry, err) - continue - } - if test.want == nil { - if got, want := len(got), 0; got != want { - t.Errorf("%s: got %d mappings, want %d", test.entry, got, want) - } - continue - } - if got, want := len(got), 1; got != want { - t.Errorf("%s: got %d mappings, want %d", test.entry, got, want) - continue - } - if !reflect.DeepEqual(test.want, got[0]) { - t.Errorf("%s want=%v got=%v", test.entry, test.want, got[0]) - } - } -} - -func TestParseThreadProfileWithInvalidAddress(t *testing.T) { - profile := ` ---- threadz 1 --- - ---- Thread 7eff063d9940 (name: main/25376) stack: --- - PC: 0x40b688 0x4d5f51 0x40be31 0x473add693e639c6f0 ---- Memory map: --- - 00400000-00fcb000: /home/rsilvera/cppbench/cppbench_server_main.unstripped - ` - wantErr := "failed to parse as hex 64-bit number: 0x473add693e639c6f0" - if _, gotErr := parseThread([]byte(profile)); !strings.Contains(gotErr.Error(), wantErr) { - t.Errorf("parseThread(): got error %q, want error containing %q", gotErr, wantErr) - } -} - -func TestParseGoCount(t *testing.T) { - for _, test := range []struct { - in string - typ string - }{ - { - in: `# ignored comment - -threadcreate profile: total 123 -`, - typ: "threadcreate", - }, - { - in: ` -# ignored comment -goroutine profile: total 123456 -`, - typ: "goroutine", - }, - { - in: ` -sub/dir-ect_o.ry profile: total 999 -`, - typ: "sub/dir-ect_o.ry", - }, - } { - t.Run(test.typ, func(t *testing.T) { - p, err := parseGoCount([]byte(test.in)) - if err != nil { - t.Fatalf("parseGoCount(%q) = %v", test.in, err) - } - if typ := p.PeriodType.Type; typ != test.typ { - t.Fatalf("parseGoCount(%q).PeriodType.Type = %q want %q", test.in, typ, test.typ) - } - }) - } -} diff --git a/src/cmd/vendor/github.com/google/pprof/profile/merge_test.go b/src/cmd/vendor/github.com/google/pprof/profile/merge_test.go deleted file mode 100644 index 6a04db2f34..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/merge_test.go +++ /dev/null @@ -1,167 +0,0 @@ -// Copyright 2018 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package profile - -import ( - "testing" -) - -func TestMapMapping(t *testing.T) { - pm := &profileMerger{ - p: &Profile{}, - mappings: make(map[mappingKey]*Mapping), - mappingsByID: make(map[uint64]mapInfo), - } - for _, tc := range []struct { - desc string - m1 Mapping - m2 Mapping - wantMerged bool - }{ - { - desc: "same file name", - m1: Mapping{ - ID: 1, - File: "test-file-1", - }, - m2: Mapping{ - ID: 2, - File: "test-file-1", - }, - wantMerged: true, - }, - { - desc: "same build ID", - m1: Mapping{ - ID: 3, - BuildID: "test-build-id-1", - }, - m2: Mapping{ - ID: 4, - BuildID: "test-build-id-1", - }, - wantMerged: true, - }, - { - desc: "same fake mapping", - m1: Mapping{ - ID: 5, - }, - m2: Mapping{ - ID: 6, - }, - wantMerged: true, - }, - { - desc: "different start", - m1: Mapping{ - ID: 7, - Start: 0x1000, - Limit: 0x2000, - BuildID: "test-build-id-2", - }, - m2: Mapping{ - ID: 8, - Start: 0x3000, - Limit: 0x4000, - BuildID: "test-build-id-2", - }, - wantMerged: true, - }, - { - desc: "different file name", - m1: Mapping{ - ID: 9, - File: "test-file-2", - }, - m2: Mapping{ - ID: 10, - File: "test-file-3", - }, - }, - { - desc: "different build id", - m1: Mapping{ - ID: 11, - BuildID: "test-build-id-3", - }, - m2: Mapping{ - ID: 12, - BuildID: "test-build-id-4", - }, - }, - { - desc: "different size", - m1: Mapping{ - ID: 13, - Start: 0x1000, - Limit: 0x3000, - BuildID: "test-build-id-5", - }, - m2: Mapping{ - ID: 14, - Start: 0x1000, - Limit: 0x5000, - BuildID: "test-build-id-5", - }, - }, - { - desc: "different offset", - m1: Mapping{ - ID: 15, - Offset: 1, - BuildID: "test-build-id-6", - }, - m2: Mapping{ - ID: 16, - Offset: 2, - BuildID: "test-build-id-6", - }, - }, - } { - t.Run(tc.desc, func(t *testing.T) { - info1 := pm.mapMapping(&tc.m1) - info2 := pm.mapMapping(&tc.m2) - gotM1, gotM2 := *info1.m, *info2.m - - wantM1 := tc.m1 - wantM1.ID = gotM1.ID - if gotM1 != wantM1 { - t.Errorf("first mapping got %v, want %v", gotM1, wantM1) - } - - if tc.wantMerged { - if gotM1 != gotM2 { - t.Errorf("first mapping got %v, second mapping got %v, want equal", gotM1, gotM2) - } - if info1.offset != 0 { - t.Errorf("first mapping info got offset %d, want 0", info1.offset) - } - if wantOffset := int64(tc.m1.Start) - int64(tc.m2.Start); wantOffset != info2.offset { - t.Errorf("second mapping info got offset %d, want %d", info2.offset, wantOffset) - } - } else { - if gotM1.ID == gotM2.ID { - t.Errorf("first mapping got %v, second mapping got %v, want different IDs", gotM1, gotM2) - } - wantM2 := tc.m2 - wantM2.ID = gotM2.ID - if gotM2 != wantM2 { - t.Errorf("second mapping got %v, want %v", gotM2, wantM2) - } - } - }) - } -} diff --git a/src/cmd/vendor/github.com/google/pprof/profile/profile_test.go b/src/cmd/vendor/github.com/google/pprof/profile/profile_test.go deleted file mode 100644 index 43db1806bf..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/profile_test.go +++ /dev/null @@ -1,1381 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package profile - -import ( - "bytes" - "fmt" - "io/ioutil" - "path/filepath" - "reflect" - "strings" - "sync" - "testing" - - "github.com/google/pprof/internal/proftest" -) - -func TestParse(t *testing.T) { - const path = "testdata/" - - for _, source := range []string{ - "go.crc32.cpu", - "go.godoc.thread", - "gobench.cpu", - "gobench.heap", - "cppbench.cpu", - "cppbench.heap", - "cppbench.contention", - "cppbench.growth", - "cppbench.thread", - "cppbench.thread.all", - "cppbench.thread.none", - "java.cpu", - "java.heap", - "java.contention", - } { - inbytes, err := ioutil.ReadFile(filepath.Join(path, source)) - if err != nil { - t.Fatal(err) - } - p, err := Parse(bytes.NewBuffer(inbytes)) - if err != nil { - t.Fatalf("%s: %s", source, err) - } - - js := p.String() - goldFilename := path + source + ".string" - gold, err := ioutil.ReadFile(goldFilename) - if err != nil { - t.Fatalf("%s: %v", source, err) - } - - if js != string(gold) { - t.Errorf("diff %s %s", source, goldFilename) - d, err := proftest.Diff(gold, []byte(js)) - if err != nil { - t.Fatalf("%s: %v", source, err) - } - t.Error(source + "\n" + string(d) + "\n" + "new profile at:\n" + leaveTempfile([]byte(js))) - } - - // Reencode and decode. - var bw bytes.Buffer - if err := p.Write(&bw); err != nil { - t.Fatalf("%s: %v", source, err) - } - if p, err = Parse(&bw); err != nil { - t.Fatalf("%s: %v", source, err) - } - js2 := p.String() - if js2 != string(gold) { - d, err := proftest.Diff(gold, []byte(js2)) - if err != nil { - t.Fatalf("%s: %v", source, err) - } - t.Error(source + "\n" + string(d) + "\n" + "gold:\n" + goldFilename + - "\nnew profile at:\n" + leaveTempfile([]byte(js))) - } - } -} - -func TestParseError(t *testing.T) { - testcases := []string{ - "", - "garbage text", - "\x1f\x8b", // truncated gzip header - "\x1f\x8b\x08\x08\xbe\xe9\x20\x58\x00\x03\x65\x6d\x70\x74\x79\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", // empty gzipped file - } - - for i, input := range testcases { - _, err := Parse(strings.NewReader(input)) - if err == nil { - t.Errorf("got nil, want error for input #%d", i) - } - } -} - -func TestParseConcatentated(t *testing.T) { - prof := testProfile1.Copy() - // Write the profile twice to buffer to create concatented profile. - var buf bytes.Buffer - prof.Write(&buf) - prof.Write(&buf) - _, err := Parse(&buf) - if err == nil { - t.Fatalf("got nil, want error") - } - if got, want := err.Error(), "parsing profile: concatenated profiles detected"; want != got { - t.Fatalf("got error %q, want error %q", got, want) - } -} - -func TestCheckValid(t *testing.T) { - const path = "testdata/java.cpu" - - inbytes, err := ioutil.ReadFile(path) - if err != nil { - t.Fatalf("failed to read profile file %q: %v", path, err) - } - p, err := Parse(bytes.NewBuffer(inbytes)) - if err != nil { - t.Fatalf("failed to parse profile %q: %s", path, err) - } - - for _, tc := range []struct { - mutateFn func(*Profile) - wantErr string - }{ - { - mutateFn: func(p *Profile) { p.SampleType = nil }, - wantErr: "missing sample type information", - }, - { - mutateFn: func(p *Profile) { p.Sample[0] = nil }, - wantErr: "profile has nil sample", - }, - { - mutateFn: func(p *Profile) { p.Sample[0].Value = append(p.Sample[0].Value, 0) }, - wantErr: "sample has 3 values vs. 2 types", - }, - { - mutateFn: func(p *Profile) { p.Sample[0].Location[0] = nil }, - wantErr: "sample has nil location", - }, - { - mutateFn: func(p *Profile) { p.Location[0] = nil }, - wantErr: "profile has nil location", - }, - { - mutateFn: func(p *Profile) { p.Mapping = append(p.Mapping, nil) }, - wantErr: "profile has nil mapping", - }, - { - mutateFn: func(p *Profile) { p.Function[0] = nil }, - wantErr: "profile has nil function", - }, - } { - t.Run(tc.wantErr, func(t *testing.T) { - p := p.Copy() - tc.mutateFn(p) - if err := p.CheckValid(); err == nil { - t.Errorf("CheckValid(): got no error, want error %q", tc.wantErr) - } else if !strings.Contains(err.Error(), tc.wantErr) { - t.Errorf("CheckValid(): got error %v, want error %q", err, tc.wantErr) - } - }) - } -} - -// leaveTempfile leaves |b| in a temporary file on disk and returns the -// temp filename. This is useful to recover a profile when the test -// fails. -func leaveTempfile(b []byte) string { - f1, err := ioutil.TempFile("", "profile_test") - if err != nil { - panic(err) - } - if _, err := f1.Write(b); err != nil { - panic(err) - } - return f1.Name() -} - -const mainBinary = "/bin/main" - -var cpuM = []*Mapping{ - { - ID: 1, - Start: 0x10000, - Limit: 0x40000, - File: mainBinary, - HasFunctions: true, - HasFilenames: true, - HasLineNumbers: true, - HasInlineFrames: true, - }, - { - ID: 2, - Start: 0x1000, - Limit: 0x4000, - File: "/lib/lib.so", - HasFunctions: true, - HasFilenames: true, - HasLineNumbers: true, - HasInlineFrames: true, - }, - { - ID: 3, - Start: 0x4000, - Limit: 0x5000, - File: "/lib/lib2_c.so.6", - HasFunctions: true, - HasFilenames: true, - HasLineNumbers: true, - HasInlineFrames: true, - }, - { - ID: 4, - Start: 0x5000, - Limit: 0x9000, - File: "/lib/lib.so_6 (deleted)", - HasFunctions: true, - HasFilenames: true, - HasLineNumbers: true, - HasInlineFrames: true, - }, -} - -var cpuF = []*Function{ - {ID: 1, Name: "main", SystemName: "main", Filename: "main.c"}, - {ID: 2, Name: "foo", SystemName: "foo", Filename: "foo.c"}, - {ID: 3, Name: "foo_caller", SystemName: "foo_caller", Filename: "foo.c"}, -} - -var cpuL = []*Location{ - { - ID: 1000, - Mapping: cpuM[1], - Address: 0x1000, - Line: []Line{ - {Function: cpuF[0], Line: 1}, - }, - }, - { - ID: 2000, - Mapping: cpuM[0], - Address: 0x2000, - Line: []Line{ - {Function: cpuF[1], Line: 2}, - {Function: cpuF[2], Line: 1}, - }, - }, - { - ID: 3000, - Mapping: cpuM[0], - Address: 0x3000, - Line: []Line{ - {Function: cpuF[1], Line: 2}, - {Function: cpuF[2], Line: 1}, - }, - }, - { - ID: 3001, - Mapping: cpuM[0], - Address: 0x3001, - Line: []Line{ - {Function: cpuF[2], Line: 2}, - }, - }, - { - ID: 3002, - Mapping: cpuM[0], - Address: 0x3002, - Line: []Line{ - {Function: cpuF[2], Line: 3}, - }, - }, -} - -var testProfile1 = &Profile{ - TimeNanos: 10000, - PeriodType: &ValueType{Type: "cpu", Unit: "milliseconds"}, - Period: 1, - DurationNanos: 10e9, - SampleType: []*ValueType{ - {Type: "samples", Unit: "count"}, - {Type: "cpu", Unit: "milliseconds"}, - }, - Sample: []*Sample{ - { - Location: []*Location{cpuL[0]}, - Value: []int64{1000, 1000}, - Label: map[string][]string{ - "key1": {"tag1"}, - "key2": {"tag1"}, - }, - }, - { - Location: []*Location{cpuL[1], cpuL[0]}, - Value: []int64{100, 100}, - Label: map[string][]string{ - "key1": {"tag2"}, - "key3": {"tag2"}, - }, - }, - { - Location: []*Location{cpuL[2], cpuL[0]}, - Value: []int64{10, 10}, - Label: map[string][]string{ - "key1": {"tag3"}, - "key2": {"tag2"}, - }, - }, - { - Location: []*Location{cpuL[3], cpuL[0]}, - Value: []int64{10000, 10000}, - Label: map[string][]string{ - "key1": {"tag4"}, - "key2": {"tag1"}, - }, - }, - { - Location: []*Location{cpuL[4], cpuL[0]}, - Value: []int64{1, 1}, - Label: map[string][]string{ - "key1": {"tag4"}, - "key2": {"tag1"}, - }, - }, - }, - Location: cpuL, - Function: cpuF, - Mapping: cpuM, -} - -var testProfile1NoMapping = &Profile{ - PeriodType: &ValueType{Type: "cpu", Unit: "milliseconds"}, - Period: 1, - DurationNanos: 10e9, - SampleType: []*ValueType{ - {Type: "samples", Unit: "count"}, - {Type: "cpu", Unit: "milliseconds"}, - }, - Sample: []*Sample{ - { - Location: []*Location{cpuL[0]}, - Value: []int64{1000, 1000}, - Label: map[string][]string{ - "key1": {"tag1"}, - "key2": {"tag1"}, - }, - }, - { - Location: []*Location{cpuL[1], cpuL[0]}, - Value: []int64{100, 100}, - Label: map[string][]string{ - "key1": {"tag2"}, - "key3": {"tag2"}, - }, - }, - { - Location: []*Location{cpuL[2], cpuL[0]}, - Value: []int64{10, 10}, - Label: map[string][]string{ - "key1": {"tag3"}, - "key2": {"tag2"}, - }, - }, - { - Location: []*Location{cpuL[3], cpuL[0]}, - Value: []int64{10000, 10000}, - Label: map[string][]string{ - "key1": {"tag4"}, - "key2": {"tag1"}, - }, - }, - { - Location: []*Location{cpuL[4], cpuL[0]}, - Value: []int64{1, 1}, - Label: map[string][]string{ - "key1": {"tag4"}, - "key2": {"tag1"}, - }, - }, - }, - Location: cpuL, - Function: cpuF, -} - -var testProfile2 = &Profile{ - PeriodType: &ValueType{Type: "cpu", Unit: "milliseconds"}, - Period: 1, - DurationNanos: 10e9, - SampleType: []*ValueType{ - {Type: "samples", Unit: "count"}, - {Type: "cpu", Unit: "milliseconds"}, - }, - Sample: []*Sample{ - { - Location: []*Location{cpuL[0]}, - Value: []int64{70, 1000}, - Label: map[string][]string{ - "key1": {"tag1"}, - "key2": {"tag1"}, - }, - }, - { - Location: []*Location{cpuL[1], cpuL[0]}, - Value: []int64{60, 100}, - Label: map[string][]string{ - "key1": {"tag2"}, - "key3": {"tag2"}, - }, - }, - { - Location: []*Location{cpuL[2], cpuL[0]}, - Value: []int64{50, 10}, - Label: map[string][]string{ - "key1": {"tag3"}, - "key2": {"tag2"}, - }, - }, - { - Location: []*Location{cpuL[3], cpuL[0]}, - Value: []int64{40, 10000}, - Label: map[string][]string{ - "key1": {"tag4"}, - "key2": {"tag1"}, - }, - }, - { - Location: []*Location{cpuL[4], cpuL[0]}, - Value: []int64{1, 1}, - Label: map[string][]string{ - "key1": {"tag4"}, - "key2": {"tag1"}, - }, - }, - }, - Location: cpuL, - Function: cpuF, - Mapping: cpuM, -} - -var testProfile3 = &Profile{ - PeriodType: &ValueType{Type: "cpu", Unit: "milliseconds"}, - Period: 1, - DurationNanos: 10e9, - SampleType: []*ValueType{ - {Type: "samples", Unit: "count"}, - }, - Sample: []*Sample{ - { - Location: []*Location{cpuL[0]}, - Value: []int64{1000}, - Label: map[string][]string{ - "key1": {"tag1"}, - "key2": {"tag1"}, - }, - }, - }, - Location: cpuL, - Function: cpuF, - Mapping: cpuM, -} - -var testProfile4 = &Profile{ - PeriodType: &ValueType{Type: "cpu", Unit: "milliseconds"}, - Period: 1, - DurationNanos: 10e9, - SampleType: []*ValueType{ - {Type: "samples", Unit: "count"}, - }, - Sample: []*Sample{ - { - Location: []*Location{cpuL[0]}, - Value: []int64{1000}, - NumLabel: map[string][]int64{ - "key1": {10}, - "key2": {30}, - }, - NumUnit: map[string][]string{ - "key1": {"bytes"}, - "key2": {"bytes"}, - }, - }, - }, - Location: cpuL, - Function: cpuF, - Mapping: cpuM, -} - -var testProfile5 = &Profile{ - PeriodType: &ValueType{Type: "cpu", Unit: "milliseconds"}, - Period: 1, - DurationNanos: 10e9, - SampleType: []*ValueType{ - {Type: "samples", Unit: "count"}, - }, - Sample: []*Sample{ - { - Location: []*Location{cpuL[0]}, - Value: []int64{1000}, - NumLabel: map[string][]int64{ - "key1": {10}, - "key2": {30}, - }, - NumUnit: map[string][]string{ - "key1": {"bytes"}, - "key2": {"bytes"}, - }, - }, - { - Location: []*Location{cpuL[0]}, - Value: []int64{1000}, - NumLabel: map[string][]int64{ - "key1": {10}, - "key2": {30}, - }, - NumUnit: map[string][]string{ - "key1": {"kilobytes"}, - "key2": {"kilobytes"}, - }, - }, - }, - Location: cpuL, - Function: cpuF, - Mapping: cpuM, -} - -var aggTests = map[string]aggTest{ - "precise": {true, true, true, true, 5}, - "fileline": {false, true, true, true, 4}, - "inline_function": {false, true, false, true, 3}, - "function": {false, true, false, false, 2}, -} - -type aggTest struct { - precise, function, fileline, inlineFrame bool - rows int -} - -const totalSamples = int64(11111) - -func TestAggregation(t *testing.T) { - prof := testProfile1.Copy() - for _, resolution := range []string{"precise", "fileline", "inline_function", "function"} { - a := aggTests[resolution] - if !a.precise { - if err := prof.Aggregate(a.inlineFrame, a.function, a.fileline, a.fileline, false); err != nil { - t.Error("aggregating to " + resolution + ":" + err.Error()) - } - } - if err := checkAggregation(prof, &a); err != nil { - t.Error("failed aggregation to " + resolution + ": " + err.Error()) - } - } -} - -// checkAggregation verifies that the profile remained consistent -// with its aggregation. -func checkAggregation(prof *Profile, a *aggTest) error { - // Check that the total number of samples for the rows was preserved. - total := int64(0) - - samples := make(map[string]bool) - for _, sample := range prof.Sample { - tb := locationHash(sample) - samples[tb] = true - total += sample.Value[0] - } - - if total != totalSamples { - return fmt.Errorf("sample total %d, want %d", total, totalSamples) - } - - // Check the number of unique sample locations - if a.rows != len(samples) { - return fmt.Errorf("number of samples %d, want %d", len(samples), a.rows) - } - - // Check that all mappings have the right detail flags. - for _, m := range prof.Mapping { - if m.HasFunctions != a.function { - return fmt.Errorf("unexpected mapping.HasFunctions %v, want %v", m.HasFunctions, a.function) - } - if m.HasFilenames != a.fileline { - return fmt.Errorf("unexpected mapping.HasFilenames %v, want %v", m.HasFilenames, a.fileline) - } - if m.HasLineNumbers != a.fileline { - return fmt.Errorf("unexpected mapping.HasLineNumbers %v, want %v", m.HasLineNumbers, a.fileline) - } - if m.HasInlineFrames != a.inlineFrame { - return fmt.Errorf("unexpected mapping.HasInlineFrames %v, want %v", m.HasInlineFrames, a.inlineFrame) - } - } - - // Check that aggregation has removed finer resolution data. - for _, l := range prof.Location { - if !a.inlineFrame && len(l.Line) > 1 { - return fmt.Errorf("found %d lines on location %d, want 1", len(l.Line), l.ID) - } - - for _, ln := range l.Line { - if !a.fileline && (ln.Function.Filename != "" || ln.Line != 0) { - return fmt.Errorf("found line %s:%d on location %d, want :0", - ln.Function.Filename, ln.Line, l.ID) - } - if !a.function && (ln.Function.Name != "") { - return fmt.Errorf(`found file %s location %d, want ""`, - ln.Function.Name, l.ID) - } - } - } - - return nil -} - -// Test merge leaves the main binary in place. -func TestMergeMain(t *testing.T) { - prof := testProfile1.Copy() - p1, err := Merge([]*Profile{prof}) - if err != nil { - t.Fatalf("merge error: %v", err) - } - if cpuM[0].File != p1.Mapping[0].File { - t.Errorf("want Mapping[0]=%s got %s", cpuM[0].File, p1.Mapping[0].File) - } -} - -func TestMerge(t *testing.T) { - // Aggregate a profile with itself and once again with a factor of - // -2. Should end up with an empty profile (all samples for a - // location should add up to 0). - - prof := testProfile1.Copy() - prof.Comments = []string{"comment1"} - p1, err := Merge([]*Profile{prof, prof}) - if err != nil { - t.Errorf("merge error: %v", err) - } - prof.Scale(-2) - prof, err = Merge([]*Profile{p1, prof}) - if err != nil { - t.Errorf("merge error: %v", err) - } - if got, want := len(prof.Comments), 1; got != want { - t.Errorf("len(prof.Comments) = %d, want %d", got, want) - } - - // Use aggregation to merge locations at function granularity. - if err := prof.Aggregate(false, true, false, false, false); err != nil { - t.Errorf("aggregating after merge: %v", err) - } - - samples := make(map[string]int64) - for _, s := range prof.Sample { - tb := locationHash(s) - samples[tb] = samples[tb] + s.Value[0] - } - for s, v := range samples { - if v != 0 { - t.Errorf("nonzero value for sample %s: %d", s, v) - } - } -} - -func TestMergeAll(t *testing.T) { - // Aggregate 10 copies of the profile. - profs := make([]*Profile, 10) - for i := 0; i < 10; i++ { - profs[i] = testProfile1.Copy() - } - prof, err := Merge(profs) - if err != nil { - t.Errorf("merge error: %v", err) - } - samples := make(map[string]int64) - for _, s := range prof.Sample { - tb := locationHash(s) - samples[tb] = samples[tb] + s.Value[0] - } - for _, s := range testProfile1.Sample { - tb := locationHash(s) - if samples[tb] != s.Value[0]*10 { - t.Errorf("merge got wrong value at %s : %d instead of %d", tb, samples[tb], s.Value[0]*10) - } - } -} - -func TestIsFoldedMerge(t *testing.T) { - testProfile1Folded := testProfile1.Copy() - testProfile1Folded.Location[0].IsFolded = true - testProfile1Folded.Location[1].IsFolded = true - - for _, tc := range []struct { - name string - profs []*Profile - wantLocationLen int - }{ - { - name: "folded and non-folded locations not merged", - profs: []*Profile{testProfile1.Copy(), testProfile1Folded.Copy()}, - wantLocationLen: 7, - }, - { - name: "identical folded locations are merged", - profs: []*Profile{testProfile1Folded.Copy(), testProfile1Folded.Copy()}, - wantLocationLen: 5, - }, - } { - t.Run(tc.name, func(t *testing.T) { - prof, err := Merge(tc.profs) - if err != nil { - t.Fatalf("merge error: %v", err) - } - if got, want := len(prof.Location), tc.wantLocationLen; got != want { - t.Fatalf("got %d locations, want %d locations", got, want) - } - }) - } -} - -func TestNumLabelMerge(t *testing.T) { - for _, tc := range []struct { - name string - profs []*Profile - wantNumLabels []map[string][]int64 - wantNumUnits []map[string][]string - }{ - { - name: "different label units not merged", - profs: []*Profile{testProfile4.Copy(), testProfile5.Copy()}, - wantNumLabels: []map[string][]int64{ - { - "key1": {10}, - "key2": {30}, - }, - { - "key1": {10}, - "key2": {30}, - }, - }, - wantNumUnits: []map[string][]string{ - { - "key1": {"bytes"}, - "key2": {"bytes"}, - }, - { - "key1": {"kilobytes"}, - "key2": {"kilobytes"}, - }, - }, - }, - } { - t.Run(tc.name, func(t *testing.T) { - prof, err := Merge(tc.profs) - if err != nil { - t.Errorf("merge error: %v", err) - } - - if want, got := len(tc.wantNumLabels), len(prof.Sample); want != got { - t.Fatalf("got %d samples, want %d samples", got, want) - } - for i, wantLabels := range tc.wantNumLabels { - numLabels := prof.Sample[i].NumLabel - if !reflect.DeepEqual(wantLabels, numLabels) { - t.Errorf("got numeric labels %v, want %v", numLabels, wantLabels) - } - - wantUnits := tc.wantNumUnits[i] - numUnits := prof.Sample[i].NumUnit - if !reflect.DeepEqual(wantUnits, numUnits) { - t.Errorf("got numeric labels %v, want %v", numUnits, wantUnits) - } - } - }) - } -} - -func TestEmptyMappingMerge(t *testing.T) { - // Aggregate a profile with itself and once again with a factor of - // -2. Should end up with an empty profile (all samples for a - // location should add up to 0). - - prof1 := testProfile1.Copy() - prof2 := testProfile1NoMapping.Copy() - p1, err := Merge([]*Profile{prof2, prof1}) - if err != nil { - t.Errorf("merge error: %v", err) - } - prof2.Scale(-2) - prof, err := Merge([]*Profile{p1, prof2}) - if err != nil { - t.Errorf("merge error: %v", err) - } - - // Use aggregation to merge locations at function granularity. - if err := prof.Aggregate(false, true, false, false, false); err != nil { - t.Errorf("aggregating after merge: %v", err) - } - - samples := make(map[string]int64) - for _, s := range prof.Sample { - tb := locationHash(s) - samples[tb] = samples[tb] + s.Value[0] - } - for s, v := range samples { - if v != 0 { - t.Errorf("nonzero value for sample %s: %d", s, v) - } - } -} - -func TestNormalizeBySameProfile(t *testing.T) { - pb := testProfile1.Copy() - p := testProfile1.Copy() - - if err := p.Normalize(pb); err != nil { - t.Fatal(err) - } - - for i, s := range p.Sample { - for j, v := range s.Value { - expectedSampleValue := testProfile1.Sample[i].Value[j] - if v != expectedSampleValue { - t.Errorf("For sample %d, value %d want %d got %d", i, j, expectedSampleValue, v) - } - } - } -} - -func TestNormalizeByDifferentProfile(t *testing.T) { - p := testProfile1.Copy() - pb := testProfile2.Copy() - - if err := p.Normalize(pb); err != nil { - t.Fatal(err) - } - - expectedSampleValues := [][]int64{ - {19, 1000}, - {1, 100}, - {0, 10}, - {198, 10000}, - {0, 1}, - } - - for i, s := range p.Sample { - for j, v := range s.Value { - if v != expectedSampleValues[i][j] { - t.Errorf("For sample %d, value %d want %d got %d", i, j, expectedSampleValues[i][j], v) - } - } - } -} - -func TestNormalizeByMultipleOfSameProfile(t *testing.T) { - pb := testProfile1.Copy() - for i, s := range pb.Sample { - for j, v := range s.Value { - pb.Sample[i].Value[j] = 10 * v - } - } - - p := testProfile1.Copy() - - err := p.Normalize(pb) - if err != nil { - t.Fatal(err) - } - - for i, s := range p.Sample { - for j, v := range s.Value { - expectedSampleValue := 10 * testProfile1.Sample[i].Value[j] - if v != expectedSampleValue { - t.Errorf("For sample %d, value %d, want %d got %d", i, j, expectedSampleValue, v) - } - } - } -} - -func TestNormalizeIncompatibleProfiles(t *testing.T) { - p := testProfile1.Copy() - pb := testProfile3.Copy() - - if err := p.Normalize(pb); err == nil { - t.Errorf("Expected an error") - } -} - -// locationHash constructs a string to use as a hashkey for a sample, based on its locations -func locationHash(s *Sample) string { - var tb string - for _, l := range s.Location { - for _, ln := range l.Line { - tb = tb + fmt.Sprintf("%s:%d@%d ", ln.Function.Name, ln.Line, l.Address) - } - } - return tb -} - -func TestHasLabel(t *testing.T) { - var testcases = []struct { - desc string - labels map[string][]string - key string - value string - wantHasLabel bool - }{ - { - desc: "empty label does not have label", - labels: map[string][]string{}, - key: "key", - value: "value", - wantHasLabel: false, - }, - { - desc: "label with one key and value has label", - labels: map[string][]string{"key": {"value"}}, - key: "key", - value: "value", - wantHasLabel: true, - }, - { - desc: "label with one key and value does not have label", - labels: map[string][]string{"key": {"value"}}, - key: "key1", - value: "value1", - wantHasLabel: false, - }, - { - desc: "label with many keys and values has label", - labels: map[string][]string{ - "key1": {"value2", "value1"}, - "key2": {"value1", "value2", "value2"}, - "key3": {"value1", "value2", "value2"}, - }, - key: "key1", - value: "value1", - wantHasLabel: true, - }, - { - desc: "label with many keys and values does not have label", - labels: map[string][]string{ - "key1": {"value2", "value1"}, - "key2": {"value1", "value2", "value2"}, - "key3": {"value1", "value2", "value2"}, - }, - key: "key5", - value: "value5", - wantHasLabel: false, - }, - } - - for _, tc := range testcases { - t.Run(tc.desc, func(t *testing.T) { - sample := &Sample{ - Label: tc.labels, - } - if gotHasLabel := sample.HasLabel(tc.key, tc.value); gotHasLabel != tc.wantHasLabel { - t.Errorf("sample.HasLabel(%q, %q) got %v, want %v", tc.key, tc.value, gotHasLabel, tc.wantHasLabel) - } - }) - } -} - -func TestDiffBaseSample(t *testing.T) { - var testcases = []struct { - desc string - labels map[string][]string - wantDiffBaseSample bool - }{ - { - desc: "empty label does not have label", - labels: map[string][]string{}, - wantDiffBaseSample: false, - }, - { - desc: "label with one key and value, including diff base label", - labels: map[string][]string{"pprof::base": {"true"}}, - wantDiffBaseSample: true, - }, - { - desc: "label with one key and value, not including diff base label", - labels: map[string][]string{"key": {"value"}}, - wantDiffBaseSample: false, - }, - { - desc: "label with many keys and values, including diff base label", - labels: map[string][]string{ - "pprof::base": {"value2", "true"}, - "key2": {"true", "value2", "value2"}, - "key3": {"true", "value2", "value2"}, - }, - wantDiffBaseSample: true, - }, - { - desc: "label with many keys and values, not including diff base label", - labels: map[string][]string{ - "key1": {"value2", "value1"}, - "key2": {"value1", "value2", "value2"}, - "key3": {"value1", "value2", "value2"}, - }, - wantDiffBaseSample: false, - }, - } - - for _, tc := range testcases { - t.Run(tc.desc, func(t *testing.T) { - sample := &Sample{ - Label: tc.labels, - } - if gotHasLabel := sample.DiffBaseSample(); gotHasLabel != tc.wantDiffBaseSample { - t.Errorf("sample.DiffBaseSample() got %v, want %v", gotHasLabel, tc.wantDiffBaseSample) - } - }) - } -} - -func TestRemove(t *testing.T) { - var testcases = []struct { - desc string - samples []*Sample - removeKey string - wantLabels []map[string][]string - }{ - { - desc: "some samples have label already", - samples: []*Sample{ - { - Location: []*Location{cpuL[0]}, - Value: []int64{1000}, - }, - { - Location: []*Location{cpuL[0]}, - Value: []int64{1000}, - Label: map[string][]string{ - "key1": {"value1", "value2", "value3"}, - "key2": {"value1"}, - }, - }, - { - Location: []*Location{cpuL[0]}, - Value: []int64{1000}, - Label: map[string][]string{ - "key1": {"value2"}, - }, - }, - }, - removeKey: "key1", - wantLabels: []map[string][]string{ - {}, - {"key2": {"value1"}}, - {}, - }, - }, - } - - for _, tc := range testcases { - t.Run(tc.desc, func(t *testing.T) { - profile := testProfile1.Copy() - profile.Sample = tc.samples - profile.RemoveLabel(tc.removeKey) - if got, want := len(profile.Sample), len(tc.wantLabels); got != want { - t.Fatalf("got %v samples, want %v samples", got, want) - } - for i, sample := range profile.Sample { - wantLabels := tc.wantLabels[i] - if got, want := len(sample.Label), len(wantLabels); got != want { - t.Errorf("got %v label keys for sample %v, want %v", got, i, want) - continue - } - for wantKey, wantValues := range wantLabels { - if gotValues, ok := sample.Label[wantKey]; ok { - if !reflect.DeepEqual(gotValues, wantValues) { - t.Errorf("for key %s, got values %v, want values %v", wantKey, gotValues, wantValues) - } - } else { - t.Errorf("for key %s got no values, want %v", wantKey, wantValues) - } - } - } - }) - } -} - -func TestSetLabel(t *testing.T) { - var testcases = []struct { - desc string - samples []*Sample - setKey string - setVal []string - wantLabels []map[string][]string - }{ - { - desc: "some samples have label already", - samples: []*Sample{ - { - Location: []*Location{cpuL[0]}, - Value: []int64{1000}, - }, - { - Location: []*Location{cpuL[0]}, - Value: []int64{1000}, - Label: map[string][]string{ - "key1": {"value1", "value2", "value3"}, - "key2": {"value1"}, - }, - }, - { - Location: []*Location{cpuL[0]}, - Value: []int64{1000}, - Label: map[string][]string{ - "key1": {"value2"}, - }, - }, - }, - setKey: "key1", - setVal: []string{"value1"}, - wantLabels: []map[string][]string{ - {"key1": {"value1"}}, - {"key1": {"value1"}, "key2": {"value1"}}, - {"key1": {"value1"}}, - }, - }, - { - desc: "no samples have labels", - samples: []*Sample{ - { - Location: []*Location{cpuL[0]}, - Value: []int64{1000}, - }, - }, - setKey: "key1", - setVal: []string{"value1"}, - wantLabels: []map[string][]string{ - {"key1": {"value1"}}, - }, - }, - { - desc: "all samples have some labels, but not key being added", - samples: []*Sample{ - { - Location: []*Location{cpuL[0]}, - Value: []int64{1000}, - Label: map[string][]string{ - "key2": {"value2"}, - }, - }, - { - Location: []*Location{cpuL[0]}, - Value: []int64{1000}, - Label: map[string][]string{ - "key3": {"value3"}, - }, - }, - }, - setKey: "key1", - setVal: []string{"value1"}, - wantLabels: []map[string][]string{ - {"key1": {"value1"}, "key2": {"value2"}}, - {"key1": {"value1"}, "key3": {"value3"}}, - }, - }, - { - desc: "all samples have key being added", - samples: []*Sample{ - { - Location: []*Location{cpuL[0]}, - Value: []int64{1000}, - Label: map[string][]string{ - "key1": {"value1"}, - }, - }, - { - Location: []*Location{cpuL[0]}, - Value: []int64{1000}, - Label: map[string][]string{ - "key1": {"value1"}, - }, - }, - }, - setKey: "key1", - setVal: []string{"value1"}, - wantLabels: []map[string][]string{ - {"key1": {"value1"}}, - {"key1": {"value1"}}, - }, - }, - } - - for _, tc := range testcases { - t.Run(tc.desc, func(t *testing.T) { - profile := testProfile1.Copy() - profile.Sample = tc.samples - profile.SetLabel(tc.setKey, tc.setVal) - if got, want := len(profile.Sample), len(tc.wantLabels); got != want { - t.Fatalf("got %v samples, want %v samples", got, want) - } - for i, sample := range profile.Sample { - wantLabels := tc.wantLabels[i] - if got, want := len(sample.Label), len(wantLabels); got != want { - t.Errorf("got %v label keys for sample %v, want %v", got, i, want) - continue - } - for wantKey, wantValues := range wantLabels { - if gotValues, ok := sample.Label[wantKey]; ok { - if !reflect.DeepEqual(gotValues, wantValues) { - t.Errorf("for key %s, got values %v, want values %v", wantKey, gotValues, wantValues) - } - } else { - t.Errorf("for key %s got no values, want %v", wantKey, wantValues) - } - } - } - }) - } -} - -func TestNumLabelUnits(t *testing.T) { - var tagFilterTests = []struct { - desc string - tagVals []map[string][]int64 - tagUnits []map[string][]string - wantUnits map[string]string - wantIgnoredUnits map[string][]string - }{ - { - "One sample, multiple keys, different specified units", - []map[string][]int64{{"key1": {131072}, "key2": {128}}}, - []map[string][]string{{"key1": {"bytes"}, "key2": {"kilobytes"}}}, - map[string]string{"key1": "bytes", "key2": "kilobytes"}, - map[string][]string{}, - }, - { - "One sample, one key with one value, unit specified", - []map[string][]int64{{"key1": {8}}}, - []map[string][]string{{"key1": {"bytes"}}}, - map[string]string{"key1": "bytes"}, - map[string][]string{}, - }, - { - "One sample, one key with one value, empty unit specified", - []map[string][]int64{{"key1": {8}}}, - []map[string][]string{{"key1": {""}}}, - map[string]string{"key1": "key1"}, - map[string][]string{}, - }, - { - "Key bytes, unit not specified", - []map[string][]int64{{"bytes": {8}}}, - []map[string][]string{nil}, - map[string]string{"bytes": "bytes"}, - map[string][]string{}, - }, - { - "One sample, one key with one value, unit not specified", - []map[string][]int64{{"kilobytes": {8}}}, - []map[string][]string{nil}, - map[string]string{"kilobytes": "kilobytes"}, - map[string][]string{}, - }, - { - "Key request, unit not specified", - []map[string][]int64{{"request": {8}}}, - []map[string][]string{nil}, - map[string]string{"request": "bytes"}, - map[string][]string{}, - }, - { - "Key alignment, unit not specified", - []map[string][]int64{{"alignment": {8}}}, - []map[string][]string{nil}, - map[string]string{"alignment": "bytes"}, - map[string][]string{}, - }, - { - "One sample, one key with multiple values and two different units", - []map[string][]int64{{"key1": {8, 8}}}, - []map[string][]string{{"key1": {"bytes", "kilobytes"}}}, - map[string]string{"key1": "bytes"}, - map[string][]string{"key1": {"kilobytes"}}, - }, - { - "One sample, one key with multiple values and three different units", - []map[string][]int64{{"key1": {8, 8}}}, - []map[string][]string{{"key1": {"bytes", "megabytes", "kilobytes"}}}, - map[string]string{"key1": "bytes"}, - map[string][]string{"key1": {"kilobytes", "megabytes"}}, - }, - { - "Two samples, one key, different units specified", - []map[string][]int64{{"key1": {8}}, {"key1": {8}}}, - []map[string][]string{{"key1": {"bytes"}}, {"key1": {"kilobytes"}}}, - map[string]string{"key1": "bytes"}, - map[string][]string{"key1": {"kilobytes"}}, - }, - { - "Keys alignment, request, and bytes have units specified", - []map[string][]int64{{ - "alignment": {8}, - "request": {8}, - "bytes": {8}, - }}, - []map[string][]string{{ - "alignment": {"seconds"}, - "request": {"minutes"}, - "bytes": {"hours"}, - }}, - map[string]string{ - "alignment": "seconds", - "request": "minutes", - "bytes": "hours", - }, - map[string][]string{}, - }, - } - for _, test := range tagFilterTests { - p := &Profile{Sample: make([]*Sample, len(test.tagVals))} - for i, numLabel := range test.tagVals { - s := Sample{ - NumLabel: numLabel, - NumUnit: test.tagUnits[i], - } - p.Sample[i] = &s - } - units, ignoredUnits := p.NumLabelUnits() - if !reflect.DeepEqual(test.wantUnits, units) { - t.Errorf("%s: got %v units, want %v", test.desc, units, test.wantUnits) - } - if !reflect.DeepEqual(test.wantIgnoredUnits, ignoredUnits) { - t.Errorf("%s: got %v ignored units, want %v", test.desc, ignoredUnits, test.wantIgnoredUnits) - } - } -} - -func TestSetMain(t *testing.T) { - testProfile1.massageMappings() - if testProfile1.Mapping[0].File != mainBinary { - t.Errorf("got %s for main", testProfile1.Mapping[0].File) - } -} - -// parallel runs n copies of fn in parallel. -func parallel(n int, fn func()) { - var wg sync.WaitGroup - wg.Add(n) - for i := 0; i < n; i++ { - go func() { - fn() - wg.Done() - }() - } - wg.Wait() -} - -func TestThreadSafety(t *testing.T) { - src := testProfile1.Copy() - parallel(4, func() { src.Copy() }) - parallel(4, func() { - var b bytes.Buffer - src.WriteUncompressed(&b) - }) - parallel(4, func() { - var b bytes.Buffer - src.Write(&b) - }) -} diff --git a/src/cmd/vendor/github.com/google/pprof/profile/proto_test.go b/src/cmd/vendor/github.com/google/pprof/profile/proto_test.go deleted file mode 100644 index 38b58c586d..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/proto_test.go +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package profile - -import ( - "bytes" - "testing" - - "github.com/google/pprof/internal/proftest" -) - -var testM = []*Mapping{ - { - ID: 1, - Start: 1, - Limit: 10, - Offset: 0, - File: "file1", - BuildID: "buildid1", - HasFunctions: true, - HasFilenames: true, - HasLineNumbers: true, - HasInlineFrames: true, - }, - { - ID: 2, - Start: 10, - Limit: 30, - Offset: 9, - File: "file1", - BuildID: "buildid2", - HasFunctions: true, - HasFilenames: true, - HasLineNumbers: true, - HasInlineFrames: true, - }, -} - -var testF = []*Function{ - {ID: 1, Name: "func1", SystemName: "func1", Filename: "file1"}, - {ID: 2, Name: "func2", SystemName: "func2", Filename: "file1"}, - {ID: 3, Name: "func3", SystemName: "func3", Filename: "file2"}, - {ID: 4, Name: "func4", SystemName: "func4", Filename: "file3"}, - {ID: 5, Name: "func5", SystemName: "func5", Filename: "file4"}, -} - -var testL = []*Location{ - { - ID: 1, - Address: 1, - Mapping: testM[0], - Line: []Line{ - { - Function: testF[0], - Line: 2, - }, - { - Function: testF[1], - Line: 2222222, - }, - }, - }, - { - ID: 2, - Mapping: testM[1], - Address: 11, - Line: []Line{ - { - Function: testF[2], - Line: 2, - }, - }, - }, - { - ID: 3, - Mapping: testM[1], - Address: 12, - }, - { - ID: 4, - Mapping: testM[1], - Address: 12, - Line: []Line{ - { - Function: testF[4], - Line: 6, - }, - { - Function: testF[4], - Line: 6, - }, - }, - IsFolded: true, - }, -} - -var all = &Profile{ - PeriodType: &ValueType{Type: "cpu", Unit: "milliseconds"}, - Period: 10, - DurationNanos: 10e9, - SampleType: []*ValueType{ - {Type: "cpu", Unit: "cycles"}, - {Type: "object", Unit: "count"}, - }, - Sample: []*Sample{ - { - Location: []*Location{testL[0], testL[1], testL[2], testL[1], testL[1]}, - Label: map[string][]string{ - "key1": {"value1"}, - "key2": {"value2"}, - }, - Value: []int64{10, 20}, - }, - { - Location: []*Location{testL[1], testL[2], testL[0], testL[1]}, - Value: []int64{30, 40}, - Label: map[string][]string{ - "key1": {"value1"}, - "key2": {"value2"}, - }, - NumLabel: map[string][]int64{ - "key1": {1, 2}, - "key2": {3, 4}, - "bytes": {3, 4}, - "requests": {1, 1, 3, 4, 5}, - "alignment": {3, 4}, - }, - NumUnit: map[string][]string{ - "requests": {"", "", "seconds", "", "s"}, - "alignment": {"kilobytes", "kilobytes"}, - }, - }, - }, - Function: testF, - Mapping: testM, - Location: testL, - Comments: []string{"Comment 1", "Comment 2"}, -} - -func TestMarshalUnmarshal(t *testing.T) { - // Write the profile, parse it, and ensure they're equal. - var buf bytes.Buffer - all.Write(&buf) - all2, err := Parse(&buf) - if err != nil { - t.Fatal(err) - } - - js1 := proftest.EncodeJSON(&all) - js2 := proftest.EncodeJSON(&all2) - if string(js1) != string(js2) { - t.Errorf("profiles differ") - d, err := proftest.Diff(js1, js2) - if err != nil { - t.Fatal(err) - } - t.Error("\n" + string(d)) - } -} diff --git a/src/cmd/vendor/github.com/google/pprof/profile/prune_test.go b/src/cmd/vendor/github.com/google/pprof/profile/prune_test.go deleted file mode 100644 index 75d7c6d4f7..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/prune_test.go +++ /dev/null @@ -1,230 +0,0 @@ -// Copyright 2014 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package profile - -import ( - "strings" - "testing" -) - -func TestPrune(t *testing.T) { - for _, test := range []struct { - in *Profile - want string - }{ - {in1, out1}, - {in2, out2}, - } { - in := test.in.Copy() - in.RemoveUninteresting() - if err := in.CheckValid(); err != nil { - t.Error(err) - } - w := strings.Split(test.want, "\n") - for i, g := range strings.Split(in.String(), "\n") { - if i >= len(w) { - t.Fatalf("got trailing %s", g) - } - if strings.TrimSpace(g) != strings.TrimSpace(w[i]) { - t.Fatalf(`%d: got: "%s" want:"%s"`, i, g, w[i]) - } - } - } -} - -var funs = []*Function{ - {ID: 1, Name: "main", SystemName: "main", Filename: "main.c"}, - {ID: 2, Name: "fun1", SystemName: "fun1", Filename: "fun.c"}, - {ID: 3, Name: "fun2", SystemName: "fun2", Filename: "fun.c"}, - {ID: 4, Name: "fun3", SystemName: "fun3", Filename: "fun.c"}, - {ID: 5, Name: "fun4", SystemName: "fun4", Filename: "fun.c"}, - {ID: 6, Name: "fun5", SystemName: "fun5", Filename: "fun.c"}, - {ID: 7, Name: "unsimplified_fun(int)", SystemName: "unsimplified_fun(int)", Filename: "fun.c"}, - {ID: 8, Name: "Foo::(anonymous namespace)::Test::Bar", SystemName: "Foo::(anonymous namespace)::Test::Bar", Filename: "fun.c"}, - {ID: 9, Name: "Hello::(anonymous namespace)::World(const Foo::(anonymous namespace)::Test::Bar)", SystemName: "Hello::(anonymous namespace)::World(const Foo::(anonymous namespace)::Test::Bar)", Filename: "fun.c"}, - {ID: 10, Name: "Foo::operator()(::Bar)", SystemName: "Foo::operator()(::Bar)", Filename: "fun.c"}, -} - -var locs1 = []*Location{ - { - ID: 1, - Line: []Line{ - {Function: funs[0], Line: 1}, - }, - }, - { - ID: 2, - Line: []Line{ - {Function: funs[1], Line: 2}, - {Function: funs[2], Line: 1}, - }, - }, - { - ID: 3, - Line: []Line{ - {Function: funs[3], Line: 2}, - {Function: funs[1], Line: 1}, - }, - }, - { - ID: 4, - Line: []Line{ - {Function: funs[3], Line: 2}, - {Function: funs[1], Line: 2}, - {Function: funs[5], Line: 2}, - }, - }, -} - -var in1 = &Profile{ - PeriodType: &ValueType{Type: "cpu", Unit: "milliseconds"}, - Period: 1, - DurationNanos: 10e9, - SampleType: []*ValueType{ - {Type: "samples", Unit: "count"}, - {Type: "cpu", Unit: "milliseconds"}, - }, - Sample: []*Sample{ - { - Location: []*Location{locs1[0]}, - Value: []int64{1, 1}, - }, - { - Location: []*Location{locs1[1], locs1[0]}, - Value: []int64{1, 1}, - }, - { - Location: []*Location{locs1[2], locs1[0]}, - Value: []int64{1, 1}, - }, - { - Location: []*Location{locs1[3], locs1[0]}, - Value: []int64{1, 1}, - }, - { - Location: []*Location{locs1[3], locs1[2], locs1[1], locs1[0]}, - Value: []int64{1, 1}, - }, - }, - Location: locs1, - Function: funs, - DropFrames: "fu.*[12]|banana", - KeepFrames: ".*[n2][n2]", -} - -const out1 = `PeriodType: cpu milliseconds -Period: 1 -Duration: 10s -Samples: -samples/count cpu/milliseconds - 1 1: 1 - 1 1: 2 1 - 1 1: 1 - 1 1: 4 1 - 1 1: 2 1 -Locations - 1: 0x0 main main.c:1 s=0 - 2: 0x0 fun2 fun.c:1 s=0 - 3: 0x0 fun3 fun.c:2 s=0 - fun1 fun.c:1 s=0 - 4: 0x0 fun5 fun.c:2 s=0 -Mappings -` - -var locs2 = []*Location{ - { - ID: 1, - Line: []Line{ - {Function: funs[0], Line: 1}, - }, - }, - { - ID: 2, - Line: []Line{ - {Function: funs[6], Line: 1}, - }, - }, - { - ID: 3, - Line: []Line{ - {Function: funs[7], Line: 1}, - }, - }, - { - ID: 4, - Line: []Line{ - {Function: funs[8], Line: 1}, - }, - }, - { - ID: 5, - Line: []Line{ - {Function: funs[9], Line: 1}, - }, - }, -} - -var in2 = &Profile{ - PeriodType: &ValueType{Type: "cpu", Unit: "milliseconds"}, - Period: 1, - DurationNanos: 10e9, - SampleType: []*ValueType{ - {Type: "samples", Unit: "count"}, - {Type: "cpu", Unit: "milliseconds"}, - }, - Sample: []*Sample{ - // Unsimplified name with parameters shouldn't match. - { - Location: []*Location{locs2[1], locs2[0]}, - Value: []int64{1, 1}, - }, - // .*Foo::.*::Bar.* should (and will be dropped) regardless of the anonymous namespace. - { - Location: []*Location{locs2[2], locs2[0]}, - Value: []int64{1, 1}, - }, - // .*Foo::.*::Bar.* shouldn't match inside the parameter list. - { - Location: []*Location{locs2[3], locs2[0]}, - Value: []int64{1, 1}, - }, - // .*operator\(\) should match, regardless of parameters. - { - Location: []*Location{locs2[4], locs2[0]}, - Value: []int64{1, 1}, - }, - }, - Location: locs2, - Function: funs, - DropFrames: `unsimplified_fun\(int\)|.*Foo::.*::Bar.*|.*operator\(\)`, -} - -const out2 = `PeriodType: cpu milliseconds -Period: 1 -Duration: 10s -Samples: -samples/count cpu/milliseconds - 1 1: 2 1 - 1 1: 1 - 1 1: 4 1 - 1 1: 1 -Locations - 1: 0x0 main main.c:1 s=0 - 2: 0x0 unsimplified_fun(int) fun.c:1 s=0 - 3: 0x0 Foo::(anonymous namespace)::Test::Bar fun.c:1 s=0 - 4: 0x0 Hello::(anonymous namespace)::World(const Foo::(anonymous namespace)::Test::Bar) fun.c:1 s=0 - 5: 0x0 Foo::operator()(::Bar) fun.c:1 s=0 -Mappings -` diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.contention b/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.contention deleted file mode 100644 index 66a64c950c..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.contention +++ /dev/null @@ -1,24 +0,0 @@ ---- contentionz 1 --- -cycles/second = 3201000000 -sampling period = 100 -ms since reset = 16502830 -discarded samples = 0 - 19490304 27 @ 0xbccc97 0xc61202 0x42ed5f 0x42edc1 0x42e15a 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 768 1 @ 0xbccc97 0xa42dc7 0xa456e4 0x7fcdc2ff214e - 5760 2 @ 0xbccc97 0xb82b73 0xb82bcb 0xb87eab 0xb8814c 0x4e969d 0x4faa17 0x4fc5f6 0x4fd028 0x4fd230 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 569088 1 @ 0xbccc97 0xb82b73 0xb82bcb 0xb87f08 0xb8814c 0x42ed5f 0x42edc1 0x42e15a 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 2432 1 @ 0xbccc97 0xb82b73 0xb82bcb 0xb87eab 0xb8814c 0x7aa74c 0x7ab844 0x7ab914 0x79e9e9 0x79e326 0x4d299e 0x4d4b7b 0x4b7be8 0x4b7ff1 0x4d2dae 0x79e80a - 2034816 3 @ 0xbccc97 0xb82f0f 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e ---- Memory map: --- - 00400000-00fcb000: cppbench_server_main - 7fcdc231e000-7fcdc2321000: /libnss_cache-2.15.so - 7fcdc2522000-7fcdc252e000: /libnss_files-2.15.so - 7fcdc272f000-7fcdc28dd000: /libc-2.15.so - 7fcdc2ae7000-7fcdc2be2000: /libm-2.15.so - 7fcdc2de3000-7fcdc2dea000: /librt-2.15.so - 7fcdc2feb000-7fcdc3003000: /libpthread-2.15.so - 7fcdc3208000-7fcdc320a000: /libdl-2.15.so - 7fcdc340c000-7fcdc3415000: /libcrypt-2.15.so - 7fcdc3645000-7fcdc3669000: /ld-2.15.so - 7fff86bff000-7fff86c00000: [vdso] - ffffffffff600000-ffffffffff601000: [vsyscall] diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.contention.string b/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.contention.string deleted file mode 100644 index 441f1cec7b..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.contention.string +++ /dev/null @@ -1,65 +0,0 @@ -PeriodType: contentions count -Period: 100 -Duration: 4h35 -Samples: -contentions/count delay/nanoseconds - 2700 608881724: 1 2 3 4 5 6 7 8 9 10 11 12 13 - 100 23992: 1 14 12 13 - 200 179943: 1 15 16 17 18 19 20 21 22 23 9 10 11 12 13 - 100 17778444: 1 15 16 24 18 3 4 5 6 7 8 9 10 11 12 13 - 100 75976: 1 15 16 17 18 25 26 27 28 29 30 31 32 33 34 9 - 300 63568134: 1 35 36 37 38 39 40 6 7 8 9 10 11 12 13 -Locations - 1: 0xbccc96 M=1 - 2: 0xc61201 M=1 - 3: 0x42ed5e M=1 - 4: 0x42edc0 M=1 - 5: 0x42e159 M=1 - 6: 0x5261ae M=1 - 7: 0x526ede M=1 - 8: 0x5280aa M=1 - 9: 0x79e809 M=1 - 10: 0x7a251a M=1 - 11: 0x7a296c M=1 - 12: 0xa456e3 M=1 - 13: 0x7fcdc2ff214d M=7 - 14: 0xa42dc6 M=1 - 15: 0xb82b72 M=1 - 16: 0xb82bca M=1 - 17: 0xb87eaa M=1 - 18: 0xb8814b M=1 - 19: 0x4e969c M=1 - 20: 0x4faa16 M=1 - 21: 0x4fc5f5 M=1 - 22: 0x4fd027 M=1 - 23: 0x4fd22f M=1 - 24: 0xb87f07 M=1 - 25: 0x7aa74b M=1 - 26: 0x7ab843 M=1 - 27: 0x7ab913 M=1 - 28: 0x79e9e8 M=1 - 29: 0x79e325 M=1 - 30: 0x4d299d M=1 - 31: 0x4d4b7a M=1 - 32: 0x4b7be7 M=1 - 33: 0x4b7ff0 M=1 - 34: 0x4d2dad M=1 - 35: 0xb82f0e M=1 - 36: 0xb83002 M=1 - 37: 0xb87d4f M=1 - 38: 0xc635ef M=1 - 39: 0x42ecc2 M=1 - 40: 0x42e14b M=1 -Mappings -1: 0x400000/0xfcb000/0x0 cppbench_server_main -2: 0x7fcdc231e000/0x7fcdc2321000/0x0 /libnss_cache-2.15.so -3: 0x7fcdc2522000/0x7fcdc252e000/0x0 /libnss_files-2.15.so -4: 0x7fcdc272f000/0x7fcdc28dd000/0x0 /libc-2.15.so -5: 0x7fcdc2ae7000/0x7fcdc2be2000/0x0 /libm-2.15.so -6: 0x7fcdc2de3000/0x7fcdc2dea000/0x0 /librt-2.15.so -7: 0x7fcdc2feb000/0x7fcdc3003000/0x0 /libpthread-2.15.so -8: 0x7fcdc3208000/0x7fcdc320a000/0x0 /libdl-2.15.so -9: 0x7fcdc340c000/0x7fcdc3415000/0x0 /libcrypt-2.15.so -10: 0x7fcdc3645000/0x7fcdc3669000/0x0 /ld-2.15.so -11: 0x7fff86bff000/0x7fff86c00000/0x0 [vdso] -12: 0xffffffffff600000/0xffffffffff601000/0x0 [vsyscall] diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.cpu b/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.cpu deleted file mode 100644 index 607015ee93..0000000000 Binary files a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.cpu and /dev/null differ diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.cpu.string b/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.cpu.string deleted file mode 100644 index 251f913c29..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.cpu.string +++ /dev/null @@ -1,179 +0,0 @@ -PeriodType: cpu nanoseconds -Period: 10000000 -Samples: -samples/count cpu/nanoseconds - 1 10000000: 1 2 3 4 5 6 7 8 9 10 - 1 10000000: 11 2 3 4 5 6 7 8 9 10 - 1 10000000: 1 2 3 4 5 6 7 8 9 10 - 1 10000000: 12 13 14 15 16 17 18 3 4 5 6 7 8 9 10 - 542 5420000000: 19 17 18 3 4 5 6 7 8 9 10 - 1 10000000: 20 17 18 3 4 5 6 7 8 9 10 - 10 100000000: 21 17 18 3 4 5 6 7 8 9 10 - 1 10000000: 22 17 18 3 4 5 6 7 8 9 10 - 1 10000000: 23 24 25 2 3 4 5 6 7 8 9 10 - 3 30000000: 26 16 17 18 3 4 5 6 7 8 9 10 - 1 10000000: 27 16 17 18 3 4 5 6 7 8 9 10 - 2 20000000: 28 16 17 18 3 4 5 6 7 8 9 10 - 1 10000000: 29 16 17 18 3 4 5 6 7 8 9 10 - 1 10000000: 30 31 32 33 34 35 36 37 38 9 10 - 3 30000000: 39 40 41 24 25 2 3 4 5 6 7 8 9 10 - 2 20000000: 42 40 41 24 25 2 3 4 5 6 7 8 9 10 - 1 10000000: 43 40 41 24 25 2 3 4 5 6 7 8 9 10 - 2 20000000: 44 45 41 24 25 2 3 4 5 6 7 8 9 10 - 67 670000000: 46 2 3 4 5 6 7 8 9 10 - 20 200000000: 47 2 3 4 5 6 7 8 9 10 - 12 120000000: 48 2 3 4 5 6 7 8 9 10 - 5 50000000: 11 2 3 4 5 6 7 8 9 10 - 1 10000000: 49 10 - 1 10000000: 50 51 52 13 14 15 16 17 18 3 4 5 6 7 8 9 10 - 2 20000000: 53 51 52 13 14 15 16 17 18 3 4 5 6 7 8 9 10 - 1 10000000: 54 14 15 16 17 18 3 4 5 6 7 8 9 10 - 1 10000000: 55 56 57 58 4 5 6 7 8 9 10 - 1 10000000: 59 41 24 25 2 3 4 5 6 7 8 9 10 - 1 10000000: 60 41 24 25 2 3 4 5 6 7 8 9 10 - 1 10000000: 61 62 63 64 40 41 24 25 2 3 4 5 6 7 8 9 10 - 1 10000000: 65 66 67 68 69 70 71 72 73 74 75 37 38 9 10 - 1 10000000: 76 13 77 15 16 17 18 3 4 5 6 7 8 9 10 - 2 20000000: 78 15 16 17 18 3 4 5 6 7 8 9 10 - 1 10000000: 79 15 16 17 18 3 4 5 6 7 8 9 10 - 1 10000000: 80 13 77 15 16 17 18 3 4 5 6 7 8 9 10 - 1 10000000: 81 15 16 17 18 3 4 5 6 7 8 9 10 - 1 10000000: 82 13 14 15 16 17 18 3 4 5 6 7 8 9 10 - 1 10000000: 83 13 77 15 16 17 18 3 4 5 6 7 8 9 10 - 1 10000000: 83 13 14 15 16 17 18 3 4 5 6 7 8 9 10 - 1 10000000: 30 84 85 86 9 10 - 1 10000000: 87 88 40 41 24 25 2 3 4 5 6 7 8 9 10 - 1 10000000: 89 90 91 92 8 9 10 - 1 10000000: 30 93 8 9 10 - 1 10000000: 30 84 94 9 10 - 1 10000000: 95 3 4 5 6 7 8 9 10 - 1 10000000: 96 97 3 4 5 6 7 8 9 10 - 1 10000000: 98 25 2 3 4 5 6 7 8 9 10 - 1 10000000: 99 25 2 3 4 5 6 7 8 9 10 - 1 10000000: 100 101 102 41 24 25 2 3 4 5 6 7 8 9 10 - 2 20000000: 103 104 91 92 8 9 10 - 1 10000000: 105 104 91 92 8 9 10 - 1 10000000: 106 107 108 109 97 3 4 5 6 7 8 9 10 -Locations - 1: 0x42ef04 M=1 - 2: 0x42e14b M=1 - 3: 0x5261ae M=1 - 4: 0x526ede M=1 - 5: 0x5280aa M=1 - 6: 0x79e809 M=1 - 7: 0x7a251a M=1 - 8: 0x7a296c M=1 - 9: 0xa456e3 M=1 - 10: 0x7f5e541460fd M=7 - 11: 0x42ef17 M=1 - 12: 0xb867c0 M=1 - 13: 0xb82bca M=1 - 14: 0xb87eaa M=1 - 15: 0xb8814b M=1 - 16: 0x42ed5e M=1 - 17: 0x42edc0 M=1 - 18: 0x42e159 M=1 - 19: 0x42ed43 M=1 - 20: 0xc60ea0 M=1 - 21: 0x42ed40 M=1 - 22: 0xbf42fe M=1 - 23: 0xb87d6f M=1 - 24: 0xc635ef M=1 - 25: 0x42ecc2 M=1 - 26: 0xc60f0f M=1 - 27: 0xc610d7 M=1 - 28: 0xc61108 M=1 - 29: 0xb8816e M=1 - 30: 0xbc8f1c M=1 - 31: 0xbcae54 M=1 - 32: 0xbcb5f4 M=1 - 33: 0x40b687 M=1 - 34: 0x535244 M=1 - 35: 0x536bf4 M=1 - 36: 0x42eb0f M=1 - 37: 0x42de64 M=1 - 38: 0xa41281 M=1 - 39: 0xb82dea M=1 - 40: 0xb83002 M=1 - 41: 0xb87d4f M=1 - 42: 0xb82df1 M=1 - 43: 0xb82dd3 M=1 - 44: 0xb82c23 M=1 - 45: 0xb82fd1 M=1 - 46: 0x42ef13 M=1 - 47: 0x42ef0b M=1 - 48: 0x42ef0f M=1 - 49: 0x7f5e53999f13 M=4 - 50: 0xb8591b M=1 - 51: 0xb85e48 M=1 - 52: 0xb82ae3 M=1 - 53: 0xb85893 M=1 - 54: 0xb88cdc M=1 - 55: 0x698000 M=1 - 56: 0x653f4b M=1 - 57: 0x54dc65 M=1 - 58: 0x525120 M=1 - 59: 0xb88d84 M=1 - 60: 0xb88d98 M=1 - 61: 0xb86591 M=1 - 62: 0xb859de M=1 - 63: 0xb862de M=1 - 64: 0xb82d5e M=1 - 65: 0x967171 M=1 - 66: 0x964990 M=1 - 67: 0x448584 M=1 - 68: 0x5476d7 M=1 - 69: 0x4f1be0 M=1 - 70: 0x4f34db M=1 - 71: 0x4f8a9a M=1 - 72: 0x5388df M=1 - 73: 0x573c5a M=1 - 74: 0x4a4168 M=1 - 75: 0x42eb03 M=1 - 76: 0xb82a31 M=1 - 77: 0xb87f07 M=1 - 78: 0xb87e76 M=1 - 79: 0xb87e7e M=1 - 80: 0xb82a36 M=1 - 81: 0xb87ede M=1 - 82: 0xb82a55 M=1 - 83: 0xb82b08 M=1 - 84: 0xbcbcff M=1 - 85: 0xbcbea4 M=1 - 86: 0xa40112 M=1 - 87: 0xb85e87 M=1 - 88: 0xb82d77 M=1 - 89: 0x79eb32 M=1 - 90: 0x7a18e8 M=1 - 91: 0x7a1c44 M=1 - 92: 0x7a2726 M=1 - 93: 0x7a2690 M=1 - 94: 0x89f186 M=1 - 95: 0xc60eb7 M=1 - 96: 0x521c7f M=1 - 97: 0x5194c8 M=1 - 98: 0xc634f0 M=1 - 99: 0xc63245 M=1 - 100: 0xb867d8 M=1 - 101: 0xb82cf2 M=1 - 102: 0xb82f82 M=1 - 103: 0x7f5e538b9a93 M=4 - 104: 0x7a1955 M=1 - 105: 0x7f5e538b9a97 M=4 - 106: 0x7e0f10 M=1 - 107: 0x7e0b5d M=1 - 108: 0x6ab44f M=1 - 109: 0x521d51 M=1 -Mappings -1: 0x400000/0xfcb000/0x0 cppbench_server_main -2: 0x7f5e53061000/0x7f5e53062000/0x0 /lib/libnss_borg-2.15.so -3: 0x7f5e53264000/0x7f5e53270000/0x0 /lib/libnss_files-2.15.so -4: 0x7f5e53883000/0x7f5e53a31000/0x0 /lib/libc-2.15.so -5: 0x7f5e53c3b000/0x7f5e53d36000/0x0 /lib/libm-2.15.so -6: 0x7f5e53f37000/0x7f5e53f3e000/0x0 /lib/librt-2.15.so -7: 0x7f5e5413f000/0x7f5e54157000/0x0 /lib/libpthread-2.15.so -8: 0x7f5e5435c000/0x7f5e5435e000/0x0 /lib/libdl-2.15.so -9: 0x7f5e54560000/0x7f5e54569000/0x0 /lib/libcrypt-2.15.so -10: 0x7f5e54799000/0x7f5e547bd000/0x0 /lib/ld-2.15.so -11: 0x7ffffb56b000/0x7ffffb56d000/0x0 [vdso] -12: 0xffffffffff600000/0xffffffffff601000/0x0 [vsyscall] diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.growth b/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.growth deleted file mode 100644 index d06f78b033..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.growth +++ /dev/null @@ -1,99 +0,0 @@ -heap profile: 85: 178257920 [ 85: 178257920] @ growthz - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xc635c8 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0xafc0eb 0xb087b1 0xb0aa7d 0xb0b374 0xb12f10 0xb13a92 0xb0c443 0xb145f3 0xb147ca 0xa5dddd 0xbbffe6 0xa5e837 0xa65f94 0x5aac9e 0x535526 0x535144 0x5aa468 0x7e3ce7 0x7d13a2 0x7e0d28 0x6ab450 0x538d27 0x5390e8 0x5391e3 0x4e9603 0x4faa17 0x4fc5f6 - 1: 2097152 [ 1: 2097152] @ 0xc635c8 0x816900 0x8149fd 0x813aa0 0xbbff77 0x81421c 0x4ed414 0x4fd707 0x4de2a2 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7fcdc2ff214e - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0xbb5783 0x40acd8 0x61192e 0x4b9522 0x4b9f62 0x4ba025 0x40bd86 0x7fcdc276711d - 1: 2097152 [ 1: 2097152] @ 0xb83003 0xb87d50 0xc635f0 0x42d576 0xc25cc6 0x40651b ---- Memory map: --- - 00400000-00fcb000: cppbench_server_main - 7fcdc231e000-7fcdc2321000: /libnss_cache-2.15.so - 7fcdc2522000-7fcdc252e000: /libnss_files-2.15.so - 7fcdc272f000-7fcdc28dd000: /libc-2.15.so - 7fcdc2ae7000-7fcdc2be2000: /libm-2.15.so - 7fcdc2de3000-7fcdc2dea000: /librt-2.15.so - 7fcdc2feb000-7fcdc3003000: /libpthread-2.15.so - 7fcdc3208000-7fcdc320a000: /libdl-2.15.so - 7fcdc340c000-7fcdc3415000: /libcrypt-2.15.so - 7fcdc3645000-7fcdc3669000: /ld-2.15.so - 7fff86bff000-7fff86c00000: [vdso] - ffffffffff600000-ffffffffff601000: [vsyscall] diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.growth.string b/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.growth.string deleted file mode 100644 index 842ff9f41e..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.growth.string +++ /dev/null @@ -1,248 +0,0 @@ -PeriodType: space bytes -Period: 1 -Samples: -objects/count space/bytes - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 14 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 4 5 6 7 8 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 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 - bytes:[2097152] - 1 2097152: 14 42 43 44 45 46 47 48 49 9 10 11 12 13 - bytes:[2097152] - 1 2097152: 1 2 3 50 51 52 53 54 55 56 57 - bytes:[2097152] - 1 2097152: 1 2 3 58 59 60 - bytes:[2097152] -Locations - 1: 0xb83002 M=1 - 2: 0xb87d4f M=1 - 3: 0xc635ef M=1 - 4: 0x42ecc2 M=1 - 5: 0x42e14b M=1 - 6: 0x5261ae M=1 - 7: 0x526ede M=1 - 8: 0x5280aa M=1 - 9: 0x79e809 M=1 - 10: 0x7a251a M=1 - 11: 0x7a296c M=1 - 12: 0xa456e3 M=1 - 13: 0x7fcdc2ff214d M=7 - 14: 0xc635c7 M=1 - 15: 0xafc0ea M=1 - 16: 0xb087b0 M=1 - 17: 0xb0aa7c M=1 - 18: 0xb0b373 M=1 - 19: 0xb12f0f M=1 - 20: 0xb13a91 M=1 - 21: 0xb0c442 M=1 - 22: 0xb145f2 M=1 - 23: 0xb147c9 M=1 - 24: 0xa5dddc M=1 - 25: 0xbbffe5 M=1 - 26: 0xa5e836 M=1 - 27: 0xa65f93 M=1 - 28: 0x5aac9d M=1 - 29: 0x535525 M=1 - 30: 0x535143 M=1 - 31: 0x5aa467 M=1 - 32: 0x7e3ce6 M=1 - 33: 0x7d13a1 M=1 - 34: 0x7e0d27 M=1 - 35: 0x6ab44f M=1 - 36: 0x538d26 M=1 - 37: 0x5390e7 M=1 - 38: 0x5391e2 M=1 - 39: 0x4e9602 M=1 - 40: 0x4faa16 M=1 - 41: 0x4fc5f5 M=1 - 42: 0x8168ff M=1 - 43: 0x8149fc M=1 - 44: 0x813a9f M=1 - 45: 0xbbff76 M=1 - 46: 0x81421b M=1 - 47: 0x4ed413 M=1 - 48: 0x4fd706 M=1 - 49: 0x4de2a1 M=1 - 50: 0xbb5782 M=1 - 51: 0x40acd7 M=1 - 52: 0x61192d M=1 - 53: 0x4b9521 M=1 - 54: 0x4b9f61 M=1 - 55: 0x4ba024 M=1 - 56: 0x40bd85 M=1 - 57: 0x7fcdc276711c M=4 - 58: 0x42d575 M=1 - 59: 0xc25cc5 M=1 - 60: 0x40651a M=1 -Mappings -1: 0x400000/0xfcb000/0x0 cppbench_server_main -2: 0x7fcdc231e000/0x7fcdc2321000/0x0 /libnss_cache-2.15.so -3: 0x7fcdc2522000/0x7fcdc252e000/0x0 /libnss_files-2.15.so -4: 0x7fcdc272f000/0x7fcdc28dd000/0x0 /libc-2.15.so -5: 0x7fcdc2ae7000/0x7fcdc2be2000/0x0 /libm-2.15.so -6: 0x7fcdc2de3000/0x7fcdc2dea000/0x0 /librt-2.15.so -7: 0x7fcdc2feb000/0x7fcdc3003000/0x0 /libpthread-2.15.so -8: 0x7fcdc3208000/0x7fcdc320a000/0x0 /libdl-2.15.so -9: 0x7fcdc340c000/0x7fcdc3415000/0x0 /libcrypt-2.15.so -10: 0x7fcdc3645000/0x7fcdc3669000/0x0 /ld-2.15.so -11: 0x7fff86bff000/0x7fff86c00000/0x0 [vdso] -12: 0xffffffffff600000/0xffffffffff601000/0x0 [vsyscall] diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.heap b/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.heap deleted file mode 100644 index 562225079b..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.heap +++ /dev/null @@ -1,47 +0,0 @@ -heap profile: 144: 8498176 [ 144: 8498176] @ heapz_v2/524288 - 1: 9216 [ 1: 9216] @ 0xc635c8 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe - 1: 144 [ 1: 144] @ 0xc635c8 0xa7479b 0xb65e6b 0xb65f80 0xa6d069 0xa6dc80 0xbbffe6 0xa5dd84 0xa7b7c6 0xaa88da 0xaa9db2 0xb59bae 0xb0c39c 0xb145f3 0xb147ca 0xa5dddd 0xbbffe6 0xa5e837 0xa65f94 0x5aac9e 0x535526 0x535144 0x5aa468 0x7e3ce7 0x7d13a2 0x7e0d28 0x6ab450 0x538d27 0x5390e8 0x5391e3 0x4e9603 - 7: 114688 [ 7: 114688] @ 0xc635c8 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe - 1: 1792 [ 1: 1792] @ 0xc635c8 0x51a272 0x524997 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe - 13: 319488 [ 13: 319488] @ 0xc635c8 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe - 1: 1792 [ 1: 1792] @ 0xc635c8 0xac95a0 0xacdc7c 0xace07b 0xace1ac 0xabd100 0xabe2a9 0x72f52e 0x655376 0x6558d3 0x41c711 0xc25cc6 0x40651b - 1: 2162688 [ 1: 2162688] @ 0xc63568 0xbc462e 0xbc4bb5 0xbc4eda 0x4a57b8 0x4b152c 0x4ae04c 0x4ad225 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe - 1: 48 [ 1: 48] @ 0xc635c8 0x7be14a 0x7be675 0x6b312d 0xbaa17f 0xbaa142 0xbaabc6 0xbb092c 0x40bce4 0x7f47a4bab11d - 1: 262144 [ 1: 262144] @ 0xc635c8 0x816900 0x8149fd 0x8139f4 0xbbff77 0x81421c 0x4ed414 0x4fd707 0x4de2a2 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe - 1: 320 [ 1: 320] @ 0xc635c8 0x721a59 0x43005e 0x7382a4 0x430590 0x435425 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe - 1: 1792 [ 1: 1792] @ 0xc635c8 0x5413b0 0x541ab2 0xbaa17f 0xbaabc6 0x53507c 0xbaa17f 0xbaa9f9 0xbb0d21 0x40bce4 0x7f47a4bab11d - 1: 10240 [ 1: 10240] @ 0xc635c8 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe - 16: 327680 [ 16: 327680] @ 0xc635c8 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe - 1: 160 [ 1: 160] @ 0xc635c8 0x578705 0x586247 0x592615 0x592745 0x592cb9 0xa456e4 0x7f47a54360fe - 1: 8192 [ 1: 8192] @ 0xc635c8 0xaaf469 0x52cad7 0x52e89b 0x527f32 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe - 2: 24576 [ 2: 24576] @ 0xc635c8 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe - 1: 2097152 [ 1: 2097152] @ 0xc63568 0xbc463b 0xbc4bb5 0xbc4eda 0x4a57b8 0x4b152c 0x4ae04c 0x4ad225 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe - 1: 448 [ 1: 448] @ 0xc635c8 0xafca3b 0xb09ba0 0xb09ec0 0xb12fec 0xb13a92 0xb13c93 0xb13d9d 0xa02777 0xbbff77 0xa026ec 0x5701e2 0x53541a 0x535144 0x5aa468 0x7e3ce7 0x7d13a2 0x7e0d28 0x6ab450 0x538d27 0x5390e8 0x5391e3 0x4e9603 0x4faa17 0x4fc5f6 0x4fd028 0x4fd230 0x79e80a 0x7a251b 0x7a296d 0xa456e4 - 47: 1925120 [ 47: 1925120] @ 0xc635c8 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe - 1: 6656 [ 1: 6656] @ 0xc635c8 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe - 11: 292864 [ 11: 292864] @ 0xc635c8 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe - 1: 4096 [ 1: 4096] @ 0xc635c8 0x75373b 0x7eb2d3 0x7ecc87 0x7ece56 0x7ed1ce 0x7ed360 0x7edb1a 0x7edbb5 0x7d50b0 0x4b9ba6 0x4b9f62 0x4ba025 0x40bd86 0x7f47a4bab11d - 1: 112 [ 1: 112] @ 0xc635c8 0x430498 0x435425 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe - 1: 20480 [ 1: 20480] @ 0xc635c8 0x5a8b92 0x526bff 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe - 1: 48 [ 1: 48] @ 0xc635c8 0x720c2e 0x5d35f0 0xbaa17f 0xbaabc6 0x42f03d 0xbaa17f 0xbaa9f9 0xbb0d21 0x40bce4 0x7f47a4bab11d - 1: 8192 [ 1: 8192] @ 0xc635c8 0xaaf3e6 0xab0ba0 0xab11be 0xab1639 0x52ebdc 0x527f32 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe - 2: 131072 [ 2: 131072] @ 0xc635c8 0xaaf469 0xaad4ce 0xb66bcd 0xb670f2 0xb659b5 0x63689b 0x548172 0x520cdc 0x521b82 0x5194c9 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe - 1: 8192 [ 1: 8192] @ 0xc635c8 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe - 1: 512 [ 1: 512] @ 0xc635c8 0xaff12a 0xb0b331 0xb12f10 0xb13a92 0xb0c443 0xb145f3 0xb147ca 0xa5dddd 0xbbffe6 0xa5e837 0xa65f94 0x5aac9e 0x535526 0x535144 0x5aa468 0x7e3ce7 0x7d13a2 0x7e0d28 0x6ab450 0x538d27 0x5390e8 0x5391e3 0x4e9603 0x4faa17 0x4fc5f6 0x4fd028 0x4fd230 0x79e80a 0x7a251b 0x7a296d - 1: 4608 [ 1: 4608] @ 0xc635c8 0x464379 0xa6318d 0x7feee9 0x5ab69c 0x7b0b26 0x79e81a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe - 23: 753664 [ 23: 753664] @ 0xc635c8 0x42ecc3 0x42e14c 0x5261af 0x526edf 0x5280ab 0x79e80a 0x7a251b 0x7a296d 0xa456e4 0x7f47a54360fe ---- Memory map: --- - source=/home - 00400000-00fcb000: $source/cppbench_server_main - 7f47a4351000-7f47a4352000: /lib/libnss_borg-2.15.so - 7f47a4554000-7f47a4560000: /lib/libnss_files-2.15.so - 7f47a4b73000-7f47a4d21000: /lib/libc-2.15.so - 7f47a4f2b000-7f47a5026000: /lib/libm-2.15.so - 7f47a5227000-7f47a522e000: /lib/librt-2.15.so - 7f47a542f000-7f47a5447000: /lib/libpthread-2.15.so - 7f47a564c000-7f47a564e000: /lib/libdl-2.15.so - 7f47a5850000-7f47a5859000: /lib/libcrypt-2.15.so - 7f47a5a89000-7f47a5aad000: /lib/ld-2.15.so - 7fff63dfe000-7fff63e00000: [vdso] - ffffffffff600000-ffffffffff601000: [vsyscall] - diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.heap.string b/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.heap.string deleted file mode 100644 index d099e59a9a..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.heap.string +++ /dev/null @@ -1,237 +0,0 @@ -PeriodType: space bytes -Period: 524288 -Samples: -objects/count space/bytes - 57 528909: 1 2 3 4 5 6 7 8 9 10 11 - bytes:[9216] - 3641 524360: 1 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 17 27 28 29 30 31 32 33 34 35 36 37 38 39 40 - bytes:[144] - 227 3727658: 1 2 3 4 5 6 7 8 9 10 11 - bytes:[16384] - 293 525184: 1 41 42 5 6 7 8 9 10 11 - bytes:[1792] - 283 6976735: 1 2 3 4 5 6 7 8 9 10 11 - bytes:[24576] - 293 525184: 1 43 44 45 46 47 48 49 50 51 52 53 54 - bytes:[1792] - 1 2198218: 55 56 57 58 59 60 61 62 7 8 9 10 11 - bytes:[2162688] - 10923 524312: 1 63 64 65 66 67 68 69 70 71 - bytes:[48] - 2 666237: 1 72 73 74 75 76 77 78 79 7 8 9 10 11 - bytes:[262144] - 1638 524448: 1 80 81 82 83 84 4 5 6 7 8 9 10 11 - bytes:[320] - 293 525184: 1 85 86 66 68 87 66 88 89 70 71 - bytes:[1792] - 51 529424: 1 2 3 4 5 6 7 8 9 10 11 - bytes:[10240] - 417 8553514: 1 2 3 4 5 6 7 8 9 10 11 - bytes:[20480] - 3277 524368: 1 90 91 92 93 94 10 11 - bytes:[160] - 64 528394: 1 95 96 97 98 7 8 9 10 11 - bytes:[8192] - 86 1060911: 1 2 3 4 5 6 7 8 9 10 11 - bytes:[12288] - 1 2136279: 55 99 57 58 59 60 61 62 7 8 9 10 11 - bytes:[2097152] - 1170 524512: 1 100 101 102 103 104 105 106 107 75 108 109 110 31 32 33 34 35 36 37 38 39 40 111 112 113 114 7 8 9 10 - bytes:[448] - 625 25616628: 1 2 3 4 5 6 7 8 9 10 11 - bytes:[40960] - 79 527623: 1 2 3 4 5 6 7 8 9 10 11 - bytes:[6656] - 222 5914839: 1 2 3 4 5 6 7 8 9 10 11 - bytes:[26624] - 128 526338: 1 115 116 117 118 119 120 121 122 123 124 125 126 127 71 - bytes:[4096] - 4681 524344: 1 128 84 4 5 6 7 8 9 10 11 - bytes:[112] - 26 534594: 1 129 130 6 7 8 9 10 11 - bytes:[20480] - 10923 524312: 1 131 132 66 68 133 66 88 89 70 71 - bytes:[48] - 64 528394: 1 134 135 136 137 138 98 7 8 9 10 11 - bytes:[8192] - 17 1115476: 1 95 139 140 141 142 143 144 145 146 147 4 5 6 7 8 9 10 11 - bytes:[65536] - 64 528394: 1 2 3 4 5 6 7 8 9 10 11 - bytes:[8192] - 1024 524544: 1 148 149 150 104 151 24 25 26 17 27 28 29 30 31 32 33 34 35 36 37 38 39 40 111 112 113 114 7 8 9 - bytes:[512] - 114 526595: 1 152 153 154 155 156 157 8 9 10 11 - bytes:[4608] - 379 12439381: 1 2 3 4 5 6 7 8 9 10 11 - bytes:[32768] -Locations - 1: 0xc635c7 M=1 - 2: 0x42ecc2 M=1 - 3: 0x42e14b M=1 - 4: 0x5261ae M=1 - 5: 0x526ede M=1 - 6: 0x5280aa M=1 - 7: 0x79e809 M=1 - 8: 0x7a251a M=1 - 9: 0x7a296c M=1 - 10: 0xa456e3 M=1 - 11: 0x7f47a54360fd M=7 - 12: 0xa7479a M=1 - 13: 0xb65e6a M=1 - 14: 0xb65f7f M=1 - 15: 0xa6d068 M=1 - 16: 0xa6dc7f M=1 - 17: 0xbbffe5 M=1 - 18: 0xa5dd83 M=1 - 19: 0xa7b7c5 M=1 - 20: 0xaa88d9 M=1 - 21: 0xaa9db1 M=1 - 22: 0xb59bad M=1 - 23: 0xb0c39b M=1 - 24: 0xb145f2 M=1 - 25: 0xb147c9 M=1 - 26: 0xa5dddc M=1 - 27: 0xa5e836 M=1 - 28: 0xa65f93 M=1 - 29: 0x5aac9d M=1 - 30: 0x535525 M=1 - 31: 0x535143 M=1 - 32: 0x5aa467 M=1 - 33: 0x7e3ce6 M=1 - 34: 0x7d13a1 M=1 - 35: 0x7e0d27 M=1 - 36: 0x6ab44f M=1 - 37: 0x538d26 M=1 - 38: 0x5390e7 M=1 - 39: 0x5391e2 M=1 - 40: 0x4e9602 M=1 - 41: 0x51a271 M=1 - 42: 0x524996 M=1 - 43: 0xac959f M=1 - 44: 0xacdc7b M=1 - 45: 0xace07a M=1 - 46: 0xace1ab M=1 - 47: 0xabd0ff M=1 - 48: 0xabe2a8 M=1 - 49: 0x72f52d M=1 - 50: 0x655375 M=1 - 51: 0x6558d2 M=1 - 52: 0x41c710 M=1 - 53: 0xc25cc5 M=1 - 54: 0x40651a M=1 - 55: 0xc63567 M=1 - 56: 0xbc462d M=1 - 57: 0xbc4bb4 M=1 - 58: 0xbc4ed9 M=1 - 59: 0x4a57b7 M=1 - 60: 0x4b152b M=1 - 61: 0x4ae04b M=1 - 62: 0x4ad224 M=1 - 63: 0x7be149 M=1 - 64: 0x7be674 M=1 - 65: 0x6b312c M=1 - 66: 0xbaa17e M=1 - 67: 0xbaa141 M=1 - 68: 0xbaabc5 M=1 - 69: 0xbb092b M=1 - 70: 0x40bce3 M=1 - 71: 0x7f47a4bab11c M=4 - 72: 0x8168ff M=1 - 73: 0x8149fc M=1 - 74: 0x8139f3 M=1 - 75: 0xbbff76 M=1 - 76: 0x81421b M=1 - 77: 0x4ed413 M=1 - 78: 0x4fd706 M=1 - 79: 0x4de2a1 M=1 - 80: 0x721a58 M=1 - 81: 0x43005d M=1 - 82: 0x7382a3 M=1 - 83: 0x43058f M=1 - 84: 0x435424 M=1 - 85: 0x5413af M=1 - 86: 0x541ab1 M=1 - 87: 0x53507b M=1 - 88: 0xbaa9f8 M=1 - 89: 0xbb0d20 M=1 - 90: 0x578704 M=1 - 91: 0x586246 M=1 - 92: 0x592614 M=1 - 93: 0x592744 M=1 - 94: 0x592cb8 M=1 - 95: 0xaaf468 M=1 - 96: 0x52cad6 M=1 - 97: 0x52e89a M=1 - 98: 0x527f31 M=1 - 99: 0xbc463a M=1 - 100: 0xafca3a M=1 - 101: 0xb09b9f M=1 - 102: 0xb09ebf M=1 - 103: 0xb12feb M=1 - 104: 0xb13a91 M=1 - 105: 0xb13c92 M=1 - 106: 0xb13d9c M=1 - 107: 0xa02776 M=1 - 108: 0xa026eb M=1 - 109: 0x5701e1 M=1 - 110: 0x535419 M=1 - 111: 0x4faa16 M=1 - 112: 0x4fc5f5 M=1 - 113: 0x4fd027 M=1 - 114: 0x4fd22f M=1 - 115: 0x75373a M=1 - 116: 0x7eb2d2 M=1 - 117: 0x7ecc86 M=1 - 118: 0x7ece55 M=1 - 119: 0x7ed1cd M=1 - 120: 0x7ed35f M=1 - 121: 0x7edb19 M=1 - 122: 0x7edbb4 M=1 - 123: 0x7d50af M=1 - 124: 0x4b9ba5 M=1 - 125: 0x4b9f61 M=1 - 126: 0x4ba024 M=1 - 127: 0x40bd85 M=1 - 128: 0x430497 M=1 - 129: 0x5a8b91 M=1 - 130: 0x526bfe M=1 - 131: 0x720c2d M=1 - 132: 0x5d35ef M=1 - 133: 0x42f03c M=1 - 134: 0xaaf3e5 M=1 - 135: 0xab0b9f M=1 - 136: 0xab11bd M=1 - 137: 0xab1638 M=1 - 138: 0x52ebdb M=1 - 139: 0xaad4cd M=1 - 140: 0xb66bcc M=1 - 141: 0xb670f1 M=1 - 142: 0xb659b4 M=1 - 143: 0x63689a M=1 - 144: 0x548171 M=1 - 145: 0x520cdb M=1 - 146: 0x521b81 M=1 - 147: 0x5194c8 M=1 - 148: 0xaff129 M=1 - 149: 0xb0b330 M=1 - 150: 0xb12f0f M=1 - 151: 0xb0c442 M=1 - 152: 0x464378 M=1 - 153: 0xa6318c M=1 - 154: 0x7feee8 M=1 - 155: 0x5ab69b M=1 - 156: 0x7b0b25 M=1 - 157: 0x79e819 M=1 -Mappings -1: 0x400000/0xfcb000/0x0 /home/cppbench_server_main -2: 0x7f47a4351000/0x7f47a4352000/0x0 /lib/libnss_borg-2.15.so -3: 0x7f47a4554000/0x7f47a4560000/0x0 /lib/libnss_files-2.15.so -4: 0x7f47a4b73000/0x7f47a4d21000/0x0 /lib/libc-2.15.so -5: 0x7f47a4f2b000/0x7f47a5026000/0x0 /lib/libm-2.15.so -6: 0x7f47a5227000/0x7f47a522e000/0x0 /lib/librt-2.15.so -7: 0x7f47a542f000/0x7f47a5447000/0x0 /lib/libpthread-2.15.so -8: 0x7f47a564c000/0x7f47a564e000/0x0 /lib/libdl-2.15.so -9: 0x7f47a5850000/0x7f47a5859000/0x0 /lib/libcrypt-2.15.so -10: 0x7f47a5a89000/0x7f47a5aad000/0x0 /lib/ld-2.15.so -11: 0x7fff63dfe000/0x7fff63e00000/0x0 [vdso] -12: 0xffffffffff600000/0xffffffffff601000/0x0 [vsyscall] diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.thread b/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.thread deleted file mode 100644 index 0192dd6db9..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.thread +++ /dev/null @@ -1,29 +0,0 @@ ---- threadz 1 --- - ---- Thread 7f794ab90940 (name: main/14748) stack: --- - PC: 0x00bc8f1c: helper(arg *) - 0x0040be31: main - 0x7f7949a9811d: __libc_start_main ---- Thread 7f794964e700 (name: thread1/14751) stack: --- - PC: 0x7f794a32bf7d: nanosleep - 0x7f794a32414e: start_thread - creator: 0xa45b96 0xa460b4 0xbaa17f 0xbaa9f9 0xbb0d21 0x40bce4 0x7f7949a9811d ---- Thread 7f794934c700 (name: thread2/14752) stack: --- - PC: 0x00bc8f1c: Wait(int) - 0x7f794a32414e: start_thread - creator: 0xa45b96 0xa48928 0xbaa17f 0xbaa9f9 0xbb0d21 0x40bce4 0x7f7949a9811d ---- Thread 7f7948978700 (name: thread3/14759) stack: --- - [same as previous thread] ---- Memory map: --- - 00400000-00fcb000: /home/rsilvera/cppbench/cppbench_server_main - 7f794964f000-7f7949652000: /lib/libnss_cache-2.15.so - 7f7949853000-7f794985f000: /lib/libnss_files-2.15.so - 7f7949a60000-7f7949c0e000: /lib/libc-2.15.so - 7f7949e19000-7f7949f14000: /lib/libm-2.15.so - 7f794a115000-7f794a11c000: /lib/librt-2.15.so - 7f794a31d000-7f794a335000: /lib/libpthread-2.15.so - 7f794a53a000-7f794a53d000: /lib/libdl-2.15.so - 7f794a73e000-7f794a747000: /lib/libcrypt-2.15.so - 7f794a977000-7f794a99b000: /lib/ld-2.15.so - 7fffb8dff000-7fffb8e00000: [vdso] - ffffffffff600000-ffffffffff601000: [vsyscall] diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.thread.all b/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.thread.all deleted file mode 100644 index a3f8893ea1..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.thread.all +++ /dev/null @@ -1,33 +0,0 @@ ---- threadz 1 --- - ---- Thread 7eff063d9940 (name: main/25376) stack: --- - PC: 0x00bc8f1c: helper(arg*) - 0x0040be31: main - 0x7eff052e111d: __libc_start_main ---- Thread 7eff04e97700 (name: thread1/25379) stack: --- - PC: 0x7eff05b74f7d: nanosleep - 0x7eff05b6d14e: start_thread - creator: - 0x0040bce4: main - 0x7eff052e111d: __libc_start_main ---- Thread 7eff04770700 (name: thread2/25382) stack: --- - PC: 0x00bc8f1c: Wait(int) - 0x7eff05b6d14e: start_thread - creator: - 0x0040bd6e: main - 0x7eff052e111d: __libc_start_main ---- Thread 7eff0464d700 (name: thread3/25383) stack: --- - [same as previous thread] ---- Memory map: --- - 00400000-00fcb000: /home/rsilvera/cppbench/cppbench_server_main - 7eff04e98000-7eff04e9b000: /lib/libnss_cache-2.15.so - 7eff0509c000-7eff050a8000: /lib/libnss_files-2.15.so - 7eff052a9000-7eff05457000: /lib/libc-2.15.so - 7eff05662000-7eff0575d000: /lib/libm-2.15.so - 7eff0595e000-7eff05965000: /lib/librt-2.15.so - 7eff05b66000-7eff05b7e000: /lib/libpthread-2.15.so - 7eff05d83000-7eff05d86000: /lib/libdl-2.15.so - 7eff05f87000-7eff05f90000: /lib/libcrypt-2.15.so - 7eff061c0000-7eff061e4000: /lib/ld-2.15.so - 7fff2edff000-7fff2ee00000: [vdso] - ffffffffff600000-ffffffffff601000: [vsyscall] diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.thread.all.string b/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.thread.all.string deleted file mode 100644 index c7c0f02405..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.thread.all.string +++ /dev/null @@ -1,28 +0,0 @@ -PeriodType: thread count -Period: 1 -Samples: -thread/count - 1: 1 2 3 - 1: 4 5 6 3 - 2: 1 5 7 3 -Locations - 1: 0xbc8f1c M=1 - 2: 0x40be30 M=1 - 3: 0x7eff052e111c M=4 - 4: 0x7eff05b74f7d M=7 - 5: 0x7eff05b6d14d M=7 - 6: 0x40bce3 M=1 - 7: 0x40bd6d M=1 -Mappings -1: 0x400000/0xfcb000/0x0 /home/rsilvera/cppbench/cppbench_server_main -2: 0x7eff04e98000/0x7eff04e9b000/0x0 /lib/libnss_cache-2.15.so -3: 0x7eff0509c000/0x7eff050a8000/0x0 /lib/libnss_files-2.15.so -4: 0x7eff052a9000/0x7eff05457000/0x0 /lib/libc-2.15.so -5: 0x7eff05662000/0x7eff0575d000/0x0 /lib/libm-2.15.so -6: 0x7eff0595e000/0x7eff05965000/0x0 /lib/librt-2.15.so -7: 0x7eff05b66000/0x7eff05b7e000/0x0 /lib/libpthread-2.15.so -8: 0x7eff05d83000/0x7eff05d86000/0x0 /lib/libdl-2.15.so -9: 0x7eff05f87000/0x7eff05f90000/0x0 /lib/libcrypt-2.15.so -10: 0x7eff061c0000/0x7eff061e4000/0x0 /lib/ld-2.15.so -11: 0x7fff2edff000/0x7fff2ee00000/0x0 [vdso] -12: 0xffffffffff600000/0xffffffffff601000/0x0 [vsyscall] diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.thread.none b/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.thread.none deleted file mode 100644 index 6ab24214d2..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.thread.none +++ /dev/null @@ -1,27 +0,0 @@ ---- threadz 1 --- - ---- Thread 7eff063d9940 (name: main/25376) stack: --- - PC: 0xbc8f1c 0xbcae55 0xbcb5f5 0x40b688 0x4d5f51 0x40be31 0x7eff052e111d ---- Thread 7eff04b95700 (name: thread1/25380) stack: --- - PC: 0xbc8f1c 0xbcbd00 0xa47f60 0xa456e4 0x7eff05b6d14e - creator: 0xa45b96 0xa48928 0xbaa17f 0xbaa9f9 0xbb0d21 0x40bce4 0x7eff052e111d ---- Thread 7eff04893700 (name: thread2/25381) stack: --- - PC: 0x7eff052dfa93 0x7a1956 0x7a1c45 0x7a2727 0x7a296d 0xa456e4 - 0x7eff05b6d14e - creator: 0xa45b96 0x7a37d2 0x7a3e8d 0xbbff77 0x79ec1c 0x40bd6e 0x7eff052e111d ---- Thread 7eff04770700 (name: thread3/25382) stack: --- - PC: 0xbc8f1c 0x7a2691 0x7a296d 0xa456e4 0x7eff05b6d14e - creator: 0xa45b96 0x7a37d2 0x7a3e8d 0xbbff77 0x79ec1c 0x40bd6e 0x7eff052e111d ---- Memory map: --- - 00400000-00fcb000: /home/rsilvera/cppbench/cppbench_server_main.unstripped - 7eff04e98000-7eff04e9b000: /lib/libnss_cache-2.15.so - 7eff0509c000-7eff050a8000: /lib/libnss_files-2.15.so - 7eff052a9000-7eff05457000: /lib/libc-2.15.so - 7eff05662000-7eff0575d000: /lib/libm-2.15.so - 7eff0595e000-7eff05965000: /lib/librt-2.15.so - 7eff05b66000-7eff05b7e000: /lib/libpthread-2.15.so - 7eff05d83000-7eff05d86000: /lib/libdl-2.15.so - 7eff05f87000-7eff05f90000: /lib/libcrypt-2.15.so - 7eff061c0000-7eff061e4000: /lib/ld-2.15.so - 7fff2edff000-7fff2ee00000: [vdso] - ffffffffff600000-ffffffffff601000: [vsyscall] diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.thread.none.string b/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.thread.none.string deleted file mode 100644 index af0ad3cb7c..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.thread.none.string +++ /dev/null @@ -1,50 +0,0 @@ -PeriodType: thread count -Period: 1 -Samples: -thread/count - 1: 1 2 3 4 5 6 7 - 1: 1 8 9 10 11 12 13 14 15 16 17 7 - 1: 18 19 20 21 22 10 11 12 23 24 25 26 27 7 - 1: 1 28 22 10 11 12 23 24 25 26 27 7 -Locations - 1: 0xbc8f1c M=1 - 2: 0xbcae54 M=1 - 3: 0xbcb5f4 M=1 - 4: 0x40b687 M=1 - 5: 0x4d5f50 M=1 - 6: 0x40be30 M=1 - 7: 0x7eff052e111c M=4 - 8: 0xbcbcff M=1 - 9: 0xa47f5f M=1 - 10: 0xa456e3 M=1 - 11: 0x7eff05b6d14d M=7 - 12: 0xa45b95 M=1 - 13: 0xa48927 M=1 - 14: 0xbaa17e M=1 - 15: 0xbaa9f8 M=1 - 16: 0xbb0d20 M=1 - 17: 0x40bce3 M=1 - 18: 0x7eff052dfa93 M=4 - 19: 0x7a1955 M=1 - 20: 0x7a1c44 M=1 - 21: 0x7a2726 M=1 - 22: 0x7a296c M=1 - 23: 0x7a37d1 M=1 - 24: 0x7a3e8c M=1 - 25: 0xbbff76 M=1 - 26: 0x79ec1b M=1 - 27: 0x40bd6d M=1 - 28: 0x7a2690 M=1 -Mappings -1: 0x400000/0xfcb000/0x0 /home/rsilvera/cppbench/cppbench_server_main.unstripped -2: 0x7eff04e98000/0x7eff04e9b000/0x0 /lib/libnss_cache-2.15.so -3: 0x7eff0509c000/0x7eff050a8000/0x0 /lib/libnss_files-2.15.so -4: 0x7eff052a9000/0x7eff05457000/0x0 /lib/libc-2.15.so -5: 0x7eff05662000/0x7eff0575d000/0x0 /lib/libm-2.15.so -6: 0x7eff0595e000/0x7eff05965000/0x0 /lib/librt-2.15.so -7: 0x7eff05b66000/0x7eff05b7e000/0x0 /lib/libpthread-2.15.so -8: 0x7eff05d83000/0x7eff05d86000/0x0 /lib/libdl-2.15.so -9: 0x7eff05f87000/0x7eff05f90000/0x0 /lib/libcrypt-2.15.so -10: 0x7eff061c0000/0x7eff061e4000/0x0 /lib/ld-2.15.so -11: 0x7fff2edff000/0x7fff2ee00000/0x0 [vdso] -12: 0xffffffffff600000/0xffffffffff601000/0x0 [vsyscall] diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.thread.string b/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.thread.string deleted file mode 100644 index bf3f0f36b9..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/cppbench.thread.string +++ /dev/null @@ -1,33 +0,0 @@ -PeriodType: thread count -Period: 1 -Samples: -thread/count - 1: 1 2 3 - 1: 4 5 6 7 8 9 10 11 3 - 2: 1 5 6 12 8 9 10 11 3 -Locations - 1: 0xbc8f1c M=1 - 2: 0x40be30 M=1 - 3: 0x7f7949a9811c M=4 - 4: 0x7f794a32bf7d M=7 - 5: 0x7f794a32414d M=7 - 6: 0xa45b95 M=1 - 7: 0xa460b3 M=1 - 8: 0xbaa17e M=1 - 9: 0xbaa9f8 M=1 - 10: 0xbb0d20 M=1 - 11: 0x40bce3 M=1 - 12: 0xa48927 M=1 -Mappings -1: 0x400000/0xfcb000/0x0 /home/rsilvera/cppbench/cppbench_server_main -2: 0x7f794964f000/0x7f7949652000/0x0 /lib/libnss_cache-2.15.so -3: 0x7f7949853000/0x7f794985f000/0x0 /lib/libnss_files-2.15.so -4: 0x7f7949a60000/0x7f7949c0e000/0x0 /lib/libc-2.15.so -5: 0x7f7949e19000/0x7f7949f14000/0x0 /lib/libm-2.15.so -6: 0x7f794a115000/0x7f794a11c000/0x0 /lib/librt-2.15.so -7: 0x7f794a31d000/0x7f794a335000/0x0 /lib/libpthread-2.15.so -8: 0x7f794a53a000/0x7f794a53d000/0x0 /lib/libdl-2.15.so -9: 0x7f794a73e000/0x7f794a747000/0x0 /lib/libcrypt-2.15.so -10: 0x7f794a977000/0x7f794a99b000/0x0 /lib/ld-2.15.so -11: 0x7fffb8dff000/0x7fffb8e00000/0x0 [vdso] -12: 0xffffffffff600000/0xffffffffff601000/0x0 [vsyscall] diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/go.crc32.cpu b/src/cmd/vendor/github.com/google/pprof/profile/testdata/go.crc32.cpu deleted file mode 100644 index ce08313de0..0000000000 Binary files a/src/cmd/vendor/github.com/google/pprof/profile/testdata/go.crc32.cpu and /dev/null differ diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/go.crc32.cpu.string b/src/cmd/vendor/github.com/google/pprof/profile/testdata/go.crc32.cpu.string deleted file mode 100644 index c2838b8cf7..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/go.crc32.cpu.string +++ /dev/null @@ -1,87 +0,0 @@ -PeriodType: cpu nanoseconds -Period: 10000000 -Samples: -samples/count cpu/nanoseconds - 1 10000000: 1 2 3 4 5 - 2 20000000: 6 2 3 4 5 - 1 10000000: 1 2 3 4 5 - 1 10000000: 7 2 3 4 5 - 2 20000000: 8 2 3 4 5 - 1 10000000: 7 2 3 4 5 - 1 10000000: 6 2 3 4 5 - 1 10000000: 7 2 3 4 5 - 1 10000000: 8 2 3 4 5 - 1 10000000: 6 2 3 4 5 - 1 10000000: 1 2 3 4 5 - 1 10000000: 8 2 3 4 5 - 1 10000000: 6 2 3 4 5 - 1 10000000: 7 2 3 4 5 - 1 10000000: 8 2 3 4 5 - 4 40000000: 7 2 3 4 5 - 1 10000000: 8 2 3 4 5 - 1 10000000: 7 2 3 4 5 - 2 20000000: 6 2 3 4 5 - 1 10000000: 8 2 3 4 5 - 1 10000000: 1 2 3 4 5 - 1 10000000: 7 2 3 4 5 - 1 10000000: 8 2 3 4 5 - 1 10000000: 1 2 3 4 5 - 1 10000000: 7 2 3 4 5 - 2 20000000: 6 2 3 4 5 - 1 10000000: 7 2 3 4 5 - 1 10000000: 6 2 3 4 5 - 1 10000000: 1 2 3 4 5 - 2 20000000: 8 2 3 4 5 - 1 10000000: 7 2 3 4 5 - 1 10000000: 8 2 3 4 5 - 1 10000000: 1 2 3 4 5 - 1 10000000: 7 2 3 4 5 - 1 10000000: 1 2 3 4 5 - 1 10000000: 6 2 3 4 5 - 1 10000000: 8 2 3 4 5 - 1 10000000: 1 2 3 4 5 - 1 10000000: 8 2 3 4 5 - 1 10000000: 7 2 3 4 5 - 1 10000000: 6 2 3 4 5 - 2 20000000: 1 2 3 4 5 - 1 10000000: 7 2 3 4 5 - 1 10000000: 8 2 3 4 5 - 3 30000000: 7 2 3 4 5 - 1 10000000: 1 2 3 4 5 - 1 10000000: 8 2 3 4 5 - 2 20000000: 1 2 3 4 5 - 2 20000000: 7 2 3 4 5 - 1 10000000: 8 2 3 4 5 - 1 10000000: 7 2 3 4 5 - 1 10000000: 6 2 3 4 5 - 2 20000000: 7 2 3 4 5 - 1 10000000: 6 2 3 4 5 - 1 10000000: 1 2 3 4 5 - 1 10000000: 7 2 3 4 5 - 2 20000000: 6 2 3 4 5 - 1 10000000: 1 2 3 4 5 - 1 10000000: 6 2 3 4 5 - 1 10000000: 8 2 3 4 5 - 1 10000000: 6 2 3 4 5 - 1 10000000: 8 2 3 4 5 - 1 10000000: 6 2 3 4 5 - 1 10000000: 8 2 3 4 5 - 1 10000000: 1 2 3 4 5 - 85 850000000: 9 2 3 4 5 - 21 210000000: 10 2 3 4 5 - 1 10000000: 7 2 3 4 5 - 24 240000000: 11 2 3 4 5 -Locations - 1: 0x430b93 M=1 - 2: 0x4317eb M=1 - 3: 0x42a065 M=1 - 4: 0x42a31b M=1 - 5: 0x415d0f M=1 - 6: 0x430baa M=1 - 7: 0x430bb5 M=1 - 8: 0x430ba6 M=1 - 9: 0x430bac M=1 - 10: 0x430b9f M=1 - 11: 0x430bb3 M=1 -Mappings -1: 0x0/0xffffffffffffffff/0x0 diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/go.godoc.thread b/src/cmd/vendor/github.com/google/pprof/profile/testdata/go.godoc.thread deleted file mode 100644 index 1c8582b59d..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/go.godoc.thread +++ /dev/null @@ -1,8 +0,0 @@ -threadcreate profile: total 7 -1 @ 0x44cb3 0x45045 0x45323 0x45534 0x47e9c 0x47c98 0x44ba2 0x2720fe 0x271fb5 -1 @ 0x44cb3 0x45045 0x45323 0x45534 0x46716 0x51584 0x461e0 -1 @ 0x44cb3 0x45045 0x45323 0x45547 0x46716 0x40963 0x461e0 -1 @ 0x44cb3 0x45045 0x45323 0x45547 0x4562e 0x460ed 0x51a59 -1 @ 0x44cb3 0x45045 0x441ae 0x461e0 -1 @ 0x44cb3 0x44e04 0x44b80 0x5192d -1 @ 0x440e2 0x5191a diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/go.godoc.thread.string b/src/cmd/vendor/github.com/google/pprof/profile/testdata/go.godoc.thread.string deleted file mode 100644 index 095f7cee7b..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/go.godoc.thread.string +++ /dev/null @@ -1,37 +0,0 @@ -PeriodType: threadcreate count -Period: 1 -Samples: -threadcreate/count - 1: 1 2 3 4 5 6 7 8 9 - 1: 1 2 3 4 10 11 12 - 1: 1 2 3 13 10 14 12 - 1: 1 2 3 13 15 16 17 - 1: 1 2 18 12 - 1: 1 19 20 21 - 1: 22 23 -Locations - 1: 0x44cb2 M=1 - 2: 0x45044 M=1 - 3: 0x45322 M=1 - 4: 0x45533 M=1 - 5: 0x47e9b M=1 - 6: 0x47c97 M=1 - 7: 0x44ba1 M=1 - 8: 0x2720fd M=1 - 9: 0x271fb4 M=1 - 10: 0x46715 M=1 - 11: 0x51583 M=1 - 12: 0x461df M=1 - 13: 0x45546 M=1 - 14: 0x40962 M=1 - 15: 0x4562d M=1 - 16: 0x460ec M=1 - 17: 0x51a58 M=1 - 18: 0x441ad M=1 - 19: 0x44e03 M=1 - 20: 0x44b7f M=1 - 21: 0x5192c M=1 - 22: 0x440e1 M=1 - 23: 0x51919 M=1 -Mappings -1: 0x0/0xffffffffffffffff/0x0 diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/gobench.cpu b/src/cmd/vendor/github.com/google/pprof/profile/testdata/gobench.cpu deleted file mode 100644 index e921d21af3..0000000000 Binary files a/src/cmd/vendor/github.com/google/pprof/profile/testdata/gobench.cpu and /dev/null differ diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/gobench.cpu.string b/src/cmd/vendor/github.com/google/pprof/profile/testdata/gobench.cpu.string deleted file mode 100644 index 7df1533ab8..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/gobench.cpu.string +++ /dev/null @@ -1,415 +0,0 @@ -PeriodType: cpu nanoseconds -Period: 10000000 -Samples: -samples/count cpu/nanoseconds - 1 10000000: 1 2 - 1 10000000: 3 2 - 1 10000000: 4 2 - 1 10000000: 5 2 - 1 10000000: 6 2 - 1 10000000: 7 2 - 1 10000000: 8 2 - 1 10000000: 9 2 - 1 10000000: 10 2 - 1 10000000: 11 2 - 1 10000000: 12 2 - 1 10000000: 13 2 - 1 10000000: 14 2 - 1 10000000: 15 2 - 1 10000000: 16 2 - 1 10000000: 17 2 - 1 10000000: 18 2 - 1 10000000: 16 2 - 1 10000000: 19 2 - 1 10000000: 20 2 - 1 10000000: 21 2 - 1 10000000: 22 2 - 1 10000000: 23 2 - 1 10000000: 24 2 - 1 10000000: 25 2 - 1 10000000: 15 2 - 1 10000000: 26 2 - 1 10000000: 9 2 - 1 10000000: 27 2 - 1 10000000: 28 2 - 1 10000000: 29 2 - 1 10000000: 30 2 - 1 10000000: 31 2 - 1 10000000: 32 2 - 1 10000000: 24 2 - 1 10000000: 30 2 - 1 10000000: 33 2 - 1 10000000: 34 2 - 1 10000000: 35 2 - 1 10000000: 36 2 - 1 10000000: 27 2 - 1 10000000: 37 2 - 1 10000000: 38 2 - 1 10000000: 19 2 - 1 10000000: 39 2 - 1 10000000: 40 2 - 1 10000000: 41 2 - 1 10000000: 16 2 - 1 10000000: 42 2 - 1 10000000: 43 2 - 1 10000000: 44 2 - 1 10000000: 45 2 - 1 10000000: 46 2 - 1 10000000: 47 2 - 1 10000000: 48 2 - 1 10000000: 40 2 - 1 10000000: 10 2 - 1 10000000: 49 2 - 1 10000000: 50 2 - 1 10000000: 51 2 - 1 10000000: 52 2 - 1 10000000: 53 2 - 1 10000000: 30 2 - 1 10000000: 54 2 - 1 10000000: 55 2 - 1 10000000: 36 2 - 1 10000000: 56 2 - 1 10000000: 57 2 - 1 10000000: 58 2 - 1 10000000: 59 2 - 1 10000000: 60 2 - 1 10000000: 61 2 - 1 10000000: 57 2 - 1 10000000: 62 2 - 1 10000000: 63 2 - 1 10000000: 30 2 - 1 10000000: 64 2 - 1 10000000: 16 2 - 1 10000000: 65 2 - 1 10000000: 26 2 - 1 10000000: 40 2 - 1 10000000: 66 2 - 1 10000000: 58 2 - 1 10000000: 67 2 - 1 10000000: 68 2 - 1 10000000: 69 2 - 1 10000000: 70 2 - 1 10000000: 71 2 - 1 10000000: 72 2 - 1 10000000: 51 2 - 1 10000000: 73 2 - 1 10000000: 74 2 - 1 10000000: 75 2 - 1 10000000: 76 2 - 1 10000000: 77 2 - 1 10000000: 78 2 - 1 10000000: 79 2 - 1 10000000: 80 2 - 1 10000000: 81 2 - 1 10000000: 82 2 - 1 10000000: 83 2 - 1 10000000: 84 2 - 1 10000000: 85 2 - 1 10000000: 86 2 - 1 10000000: 10 2 - 1 10000000: 87 2 - 1 10000000: 88 2 - 1 10000000: 89 2 - 1 10000000: 90 2 - 1 10000000: 63 2 - 1 10000000: 91 2 - 1 10000000: 5 2 - 1 10000000: 92 2 - 1 10000000: 93 2 - 1 10000000: 94 2 - 1 10000000: 19 2 - 1 10000000: 95 2 - 1 10000000: 30 2 - 1 10000000: 96 2 - 1 10000000: 10 2 - 1 10000000: 97 2 - 1 10000000: 98 2 - 1 10000000: 99 2 - 1 10000000: 62 2 - 1 10000000: 92 2 - 1 10000000: 100 2 - 1 10000000: 101 2 - 1 10000000: 39 2 - 1 10000000: 102 2 - 1 10000000: 86 2 - 1 10000000: 33 2 - 1 10000000: 103 2 - 1 10000000: 104 2 - 1 10000000: 13 2 - 2 20000000: 105 2 - 1 10000000: 106 2 - 1 10000000: 52 2 - 1 10000000: 24 2 - 1 10000000: 107 2 - 1 10000000: 108 2 - 1 10000000: 52 2 - 1 10000000: 109 2 - 1 10000000: 5 2 - 1 10000000: 82 2 - 1 10000000: 8 2 - 1 10000000: 110 2 - 1 10000000: 111 2 - 1 10000000: 112 2 - 1 10000000: 113 2 - 1 10000000: 114 2 - 1 10000000: 115 2 - 1 10000000: 116 2 - 1 10000000: 19 2 - 1 10000000: 64 2 - 1 10000000: 106 2 - 1 10000000: 117 2 - 1 10000000: 30 2 - 1 10000000: 118 2 - 1 10000000: 86 2 - 1 10000000: 119 2 - 1 10000000: 120 2 - 1 10000000: 121 2 - 1 10000000: 81 2 - 2 20000000: 10 2 - 1 10000000: 19 2 - 1 10000000: 122 2 - 1 10000000: 123 2 - 1 10000000: 105 2 - 1 10000000: 124 2 - 1 10000000: 125 2 - 1 10000000: 46 2 - 1 10000000: 8 2 - 10 100000000: 21 2 - 7 70000000: 126 2 - 3 30000000: 9 2 - 1 10000000: 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 - 1 10000000: 144 2 - 5 50000000: 145 2 - 25 250000000: 146 2 - 1 10000000: 147 2 - 1 10000000: 148 149 150 134 135 136 137 138 139 140 141 142 143 - 1 10000000: 151 152 153 154 155 135 136 137 138 139 140 141 142 143 - 1 10000000: 156 157 153 154 155 135 136 137 138 139 140 141 142 143 - 1 10000000: 158 159 132 133 134 135 136 137 138 139 140 141 142 143 - 4 40000000: 27 2 - 4 40000000: 160 2 - 1 10000000: 116 2 - 5 50000000: 161 2 - 20 200000000: 162 163 164 135 136 137 138 139 140 141 142 143 - 1 10000000: 165 166 167 164 135 136 137 138 139 140 141 142 143 - 1 10000000: 168 169 167 164 135 136 137 138 139 140 141 142 143 - 2 20000000: 170 171 172 142 143 - 2 20000000: 173 171 172 142 143 - 1 10000000: 105 174 175 154 155 176 177 140 141 142 143 - 1 10000000: 178 179 176 177 140 141 142 143 - 1 10000000: 180 181 182 181 183 184 185 186 187 188 189 190 191 192 193 194 143 - 7 70000000: 195 2 - 2 20000000: 196 2 - 8 80000000: 16 2 - 1 10000000: 197 2 - 1 10000000: 146 198 199 135 136 137 138 139 140 141 142 143 - 1 10000000: 200 199 135 136 137 138 139 140 141 142 143 - 3 30000000: 162 179 135 136 137 138 139 140 141 142 143 - 1 10000000: 201 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 - 1 10000000: 202 167 152 153 154 155 135 136 137 138 139 140 141 142 143 - 6 60000000: 162 163 152 153 154 155 135 136 137 138 139 140 141 142 143 -Locations - 1: 0x410bc0 M=1 - 2: 0x41a770 M=1 - 3: 0x410b4b M=1 - 4: 0x40f534 M=1 - 5: 0x40f018 M=1 - 6: 0x421f4f M=1 - 7: 0x40e46f M=1 - 8: 0x40f0e3 M=1 - 9: 0x4286c7 M=1 - 10: 0x40f15b M=1 - 11: 0x40efb1 M=1 - 12: 0x41250d M=1 - 13: 0x427854 M=1 - 14: 0x40e688 M=1 - 15: 0x410b61 M=1 - 16: 0x40fa72 M=1 - 17: 0x40e92a M=1 - 18: 0x421ff1 M=1 - 19: 0x42830d M=1 - 20: 0x41cf23 M=1 - 21: 0x40e7cb M=1 - 22: 0x40ea46 M=1 - 23: 0x40f792 M=1 - 24: 0x40f023 M=1 - 25: 0x40ee50 M=1 - 26: 0x40c6ab M=1 - 27: 0x40fa51 M=1 - 28: 0x40f14b M=1 - 29: 0x421fca M=1 - 30: 0x4285d3 M=1 - 31: 0x410ba9 M=1 - 32: 0x40e75f M=1 - 33: 0x4277a1 M=1 - 34: 0x40e89f M=1 - 35: 0x40ea54 M=1 - 36: 0x40f0ab M=1 - 37: 0x40ef9b M=1 - 38: 0x410d6a M=1 - 39: 0x40e455 M=1 - 40: 0x427856 M=1 - 41: 0x40e80b M=1 - 42: 0x40f5ef M=1 - 43: 0x40fb2a M=1 - 44: 0x422786 M=1 - 45: 0x40f031 M=1 - 46: 0x40f49d M=1 - 47: 0x40f331 M=1 - 48: 0x40e927 M=1 - 49: 0x40f558 M=1 - 50: 0x410b56 M=1 - 51: 0x40eac1 M=1 - 52: 0x40e813 M=1 - 53: 0x40e7df M=1 - 54: 0x40f53d M=1 - 55: 0x40f180 M=1 - 56: 0x410b94 M=1 - 57: 0x40fbf6 M=1 - 58: 0x40f026 M=1 - 59: 0x40f0dc M=1 - 60: 0x40e9d3 M=1 - 61: 0x40fa7b M=1 - 62: 0x40e877 M=1 - 63: 0x4048a8 M=1 - 64: 0x40f02e M=1 - 65: 0x4048b8 M=1 - 66: 0x4277d0 M=1 - 67: 0x40f5cb M=1 - 68: 0x40fbae M=1 - 69: 0x40e8c2 M=1 - 70: 0x40f64b M=1 - 71: 0x40e82e M=1 - 72: 0x421f22 M=1 - 73: 0x40fa67 M=1 - 74: 0x40fbb1 M=1 - 75: 0x40f568 M=1 - 76: 0x40e461 M=1 - 77: 0x40ef85 M=1 - 78: 0x40f58b M=1 - 79: 0x40f08d M=1 - 80: 0x40e75c M=1 - 81: 0x410c22 M=1 - 82: 0x40fa59 M=1 - 83: 0x40f091 M=1 - 84: 0x40eb69 M=1 - 85: 0x41075a M=1 - 86: 0x40e7e9 M=1 - 87: 0x40fa97 M=1 - 88: 0x4131eb M=1 - 89: 0x40f769 M=1 - 90: 0x40f54e M=1 - 91: 0x4277d5 M=1 - 92: 0x40f0ca M=1 - 93: 0x40f051 M=1 - 94: 0x40e94f M=1 - 95: 0x40fc11 M=1 - 96: 0x41815b M=1 - 97: 0x40f4b3 M=1 - 98: 0x421fe8 M=1 - 99: 0x40e79e M=1 - 100: 0x413f29 M=1 - 101: 0x427822 M=1 - 102: 0x40ef3d M=1 - 103: 0x40e440 M=1 - 104: 0x40e767 M=1 - 105: 0x42783b M=1 - 106: 0x40fa85 M=1 - 107: 0x40fb36 M=1 - 108: 0x410bae M=1 - 109: 0x40f0d7 M=1 - 110: 0x410ba4 M=1 - 111: 0x40e87b M=1 - 112: 0x40e7c0 M=1 - 113: 0x40eae0 M=1 - 114: 0x410a99 M=1 - 115: 0x40e7bd M=1 - 116: 0x40f09d M=1 - 117: 0x410b70 M=1 - 118: 0x40f32d M=1 - 119: 0x4283ec M=1 - 120: 0x40f010 M=1 - 121: 0x40e97a M=1 - 122: 0x40f19a M=1 - 123: 0x40e779 M=1 - 124: 0x40f61d M=1 - 125: 0x40f4e1 M=1 - 126: 0x40f58f M=1 - 127: 0x41ef43 M=1 - 128: 0x41ef96 M=1 - 129: 0x41f089 M=1 - 130: 0x41f360 M=1 - 131: 0x41fc8e M=1 - 132: 0x4204c7 M=1 - 133: 0x422b03 M=1 - 134: 0x420cee M=1 - 135: 0x422150 M=1 - 136: 0x4221d9 M=1 - 137: 0x41dc0c M=1 - 138: 0x41db47 M=1 - 139: 0x672125 M=1 - 140: 0x4ac6fd M=1 - 141: 0x4abf98 M=1 - 142: 0x491fbd M=1 - 143: 0x41931f M=1 - 144: 0x40e844 M=1 - 145: 0x421ff8 M=1 - 146: 0x4277e4 M=1 - 147: 0x40e990 M=1 - 148: 0x41c53f M=1 - 149: 0x422746 M=1 - 150: 0x422b42 M=1 - 151: 0x412b5f M=1 - 152: 0x40d47b M=1 - 153: 0x40cf5e M=1 - 154: 0x40cceb M=1 - 155: 0x420b5e M=1 - 156: 0x413ab9 M=1 - 157: 0x40d56e M=1 - 158: 0x41f5a6 M=1 - 159: 0x420149 M=1 - 160: 0x40f531 M=1 - 161: 0x410b8d M=1 - 162: 0x427ac9 M=1 - 163: 0x412b91 M=1 - 164: 0x420ee3 M=1 - 165: 0x4134a8 M=1 - 166: 0x412dc7 M=1 - 167: 0x412afa M=1 - 168: 0x413a9d M=1 - 169: 0x412bf6 M=1 - 170: 0x671ed3 M=1 - 171: 0x4ac6ad M=1 - 172: 0x4abdd8 M=1 - 173: 0x671ebe M=1 - 174: 0x40c8ae M=1 - 175: 0x40d00a M=1 - 176: 0x422081 M=1 - 177: 0x672148 M=1 - 178: 0x427ad1 M=1 - 179: 0x420e54 M=1 - 180: 0x5718ff M=1 - 181: 0x575ab6 M=1 - 182: 0x572114 M=1 - 183: 0x571257 M=1 - 184: 0x462494 M=1 - 185: 0x475ea6 M=1 - 186: 0x473682 M=1 - 187: 0x471fd7 M=1 - 188: 0x471ac0 M=1 - 189: 0x46f1b2 M=1 - 190: 0x46ef32 M=1 - 191: 0x4ab9e0 M=1 - 192: 0x4acce1 M=1 - 193: 0x4ac7b6 M=1 - 194: 0x4ace6a M=1 - 195: 0x410b8a M=1 - 196: 0x40f56e M=1 - 197: 0x428176 M=1 - 198: 0x4120f3 M=1 - 199: 0x420be8 M=1 - 200: 0x412100 M=1 - 201: 0x41ef39 M=1 - 202: 0x412e38 M=1 -Mappings -1: 0x0/0xffffffffffffffff/0x0 diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/gobench.heap b/src/cmd/vendor/github.com/google/pprof/profile/testdata/gobench.heap deleted file mode 100644 index ed44903424..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/gobench.heap +++ /dev/null @@ -1,16 +0,0 @@ -heap profile: 13: 1595680 [47130736: 2584596557304] @ heap/1048576 -1: 524288 [3: 1572864] @ 0x420cef 0x422151 0x4221da 0x41dc0d 0x41db48 0x74920f 0x6295ac 0x629855 0x462769 0x419320 -1: 524288 [1: 524288] @ 0x420cef 0x422151 0x4221da 0x41dc0d 0x41db48 0x74920f 0x63963f 0x419320 -1: 262144 [1: 262144] @ 0x420cef 0x422151 0x4221da 0x41dc0d 0x41db48 0x451a39 0x451ba5 0x450683 0x450077 0x4525a4 0x58e034 0x419320 -1: 262144 [1: 262144] @ 0x420cef 0x422151 0x4221da 0x41dc0d 0x41db48 0x451a39 0x451ba5 0x450683 0x450077 0x4524d4 0x401090 0x4011a1 0x416dff 0x419320 -1: 10240 [642: 6574080] @ 0x420cef 0x422151 0x4221da 0x41dc0d 0x41db48 0x477637 0x47718b 0x477056 0x4799b2 0x46bfd7 0x419320 -1: 4096 [1: 4096] @ 0x420cef 0x422151 0x4221da 0x41dc0d 0x41db48 0x526126 0x5261ea 0x4683d4 0x467e09 0x419320 -1: 4096 [1: 4096] @ 0x420cef 0x422151 0x4221da 0x41dc0d 0x41db48 0x53fbf3 0x53f85f 0x545f52 0x545a70 0x419320 -1: 2048 [1: 2048] @ 0x420cef 0x420fa9 0x414b22 0x414d20 0x4901be 0x419320 -1: 1280 [1: 1280] @ 0x420cef 0x422082 0x48dbe3 0x48d15c 0x48cdd0 0x4a9dc0 0x545bfe 0x543ac7 0x419320 -1: 384 [1: 384] @ 0x420cef 0x422151 0x4221da 0x41dc0d 0x41dd68 0x41dcbd 0x429150 0x429add 0x42e013 0x4307e2 0x4366ff 0x42c1c2 0x653e4d 0x64bdc5 0x64c359 0x65a73d 0x64cdb1 0x64be73 0x64c359 0x64c59a 0x64c205 0x64c359 0x64b778 0x5cd55c 0x45dbc3 0x543e70 0x559166 0x55ba54 0x559691 0x559985 0x5a19ff 0x543e70 -1: 288 [1: 288] @ 0x420cef 0x420fa9 0x419e19 0x41a1a8 0x419f63 0x48f09f 0x48d991 0x48cdd0 0x4a9dc0 0x545bfe 0x543ac7 0x419320 -1: 288 [2: 296] @ -1: 96 [1: 96] @ 0x420cef 0x424f35 0x4255d1 0x6fc293 0x6f9c88 0x6f9944 0x6f96be 0x6f966b 0x59f39a 0x468318 0x467e09 0x419320 -0: 0 [1: 1024] @ 0x420cef 0x422151 0x4221da 0x41dc0d 0x41dd68 0x41dcbd 0x6d71a3 0x6da87d 0x7b2c3b 0x419320 -0: 0 [1: 16] @ 0x420cef 0x422048 0x40b517 0x40b746 0x6d9ca2 0x4761c5 0x475ea7 0x46fc4f 0x46f180 0x46ef33 0x4ab821 0x4acc32 0x4ac7b7 0x4ace36 0x419320 diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/gobench.heap.string b/src/cmd/vendor/github.com/google/pprof/profile/testdata/gobench.heap.string deleted file mode 100644 index 01306ce68f..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/gobench.heap.string +++ /dev/null @@ -1,137 +0,0 @@ -PeriodType: space bytes -Period: 524288 -Samples: -alloc_objects/count alloc_space/bytes inuse_objects/count inuse_space/bytes - 4 2488234 1 829411: 1 2 3 4 5 6 7 8 9 10 - bytes:[524288] - 1 829411 1 829411: 1 2 3 4 5 6 11 10 - bytes:[524288] - 2 666237 2 666237: 1 2 3 4 5 12 13 14 15 16 17 10 - bytes:[262144] - 2 666237 2 666237: 1 2 3 4 5 12 13 14 15 18 19 20 21 10 - bytes:[262144] - 33192 339890635 51 529424: 1 2 3 4 5 22 23 24 25 26 10 - bytes:[10240] - 128 526338 128 526338: 1 2 3 4 5 27 28 29 30 10 - bytes:[4096] - 128 526338 128 526338: 1 2 3 4 5 31 32 33 34 10 - bytes:[4096] - 256 525312 256 525312: 1 35 36 37 38 10 - bytes:[2048] - 410 524928 410 524928: 1 39 40 41 42 43 44 45 10 - bytes:[1280] - 1365 524480 1365 524480: 1 2 3 4 46 47 48 49 50 51 52 53 54 55 56 57 58 59 56 60 61 56 62 63 64 65 66 67 68 69 70 65 - bytes:[384] - 1820 524432 1820 524432: 1 35 71 72 73 74 75 42 43 44 45 10 - bytes:[288] - 7085 1048724 1820 524432: - bytes:[288] - 5461 524336 5461 524336: 1 76 77 78 79 80 81 82 83 84 30 10 - bytes:[96] - 512 524800 0 0: 1 2 3 4 46 47 85 86 87 10 - bytes:[1024] - 32768 524296 0 0: 1 88 89 90 91 92 93 94 95 96 97 98 99 100 10 - bytes:[16] -Locations - 1: 0x420cee M=1 - 2: 0x422150 M=1 - 3: 0x4221d9 M=1 - 4: 0x41dc0c M=1 - 5: 0x41db47 M=1 - 6: 0x74920e M=1 - 7: 0x6295ab M=1 - 8: 0x629854 M=1 - 9: 0x462768 M=1 - 10: 0x41931f M=1 - 11: 0x63963e M=1 - 12: 0x451a38 M=1 - 13: 0x451ba4 M=1 - 14: 0x450682 M=1 - 15: 0x450076 M=1 - 16: 0x4525a3 M=1 - 17: 0x58e033 M=1 - 18: 0x4524d3 M=1 - 19: 0x40108f M=1 - 20: 0x4011a0 M=1 - 21: 0x416dfe M=1 - 22: 0x477636 M=1 - 23: 0x47718a M=1 - 24: 0x477055 M=1 - 25: 0x4799b1 M=1 - 26: 0x46bfd6 M=1 - 27: 0x526125 M=1 - 28: 0x5261e9 M=1 - 29: 0x4683d3 M=1 - 30: 0x467e08 M=1 - 31: 0x53fbf2 M=1 - 32: 0x53f85e M=1 - 33: 0x545f51 M=1 - 34: 0x545a6f M=1 - 35: 0x420fa8 M=1 - 36: 0x414b21 M=1 - 37: 0x414d1f M=1 - 38: 0x4901bd M=1 - 39: 0x422081 M=1 - 40: 0x48dbe2 M=1 - 41: 0x48d15b M=1 - 42: 0x48cdcf M=1 - 43: 0x4a9dbf M=1 - 44: 0x545bfd M=1 - 45: 0x543ac6 M=1 - 46: 0x41dd67 M=1 - 47: 0x41dcbc M=1 - 48: 0x42914f M=1 - 49: 0x429adc M=1 - 50: 0x42e012 M=1 - 51: 0x4307e1 M=1 - 52: 0x4366fe M=1 - 53: 0x42c1c1 M=1 - 54: 0x653e4c M=1 - 55: 0x64bdc4 M=1 - 56: 0x64c358 M=1 - 57: 0x65a73c M=1 - 58: 0x64cdb0 M=1 - 59: 0x64be72 M=1 - 60: 0x64c599 M=1 - 61: 0x64c204 M=1 - 62: 0x64b777 M=1 - 63: 0x5cd55b M=1 - 64: 0x45dbc2 M=1 - 65: 0x543e6f M=1 - 66: 0x559165 M=1 - 67: 0x55ba53 M=1 - 68: 0x559690 M=1 - 69: 0x559984 M=1 - 70: 0x5a19fe M=1 - 71: 0x419e18 M=1 - 72: 0x41a1a7 M=1 - 73: 0x419f62 M=1 - 74: 0x48f09e M=1 - 75: 0x48d990 M=1 - 76: 0x424f34 M=1 - 77: 0x4255d0 M=1 - 78: 0x6fc292 M=1 - 79: 0x6f9c87 M=1 - 80: 0x6f9943 M=1 - 81: 0x6f96bd M=1 - 82: 0x6f966a M=1 - 83: 0x59f399 M=1 - 84: 0x468317 M=1 - 85: 0x6d71a2 M=1 - 86: 0x6da87c M=1 - 87: 0x7b2c3a M=1 - 88: 0x422047 M=1 - 89: 0x40b516 M=1 - 90: 0x40b745 M=1 - 91: 0x6d9ca1 M=1 - 92: 0x4761c4 M=1 - 93: 0x475ea6 M=1 - 94: 0x46fc4e M=1 - 95: 0x46f17f M=1 - 96: 0x46ef32 M=1 - 97: 0x4ab820 M=1 - 98: 0x4acc31 M=1 - 99: 0x4ac7b6 M=1 - 100: 0x4ace35 M=1 -Mappings -1: 0x0/0xffffffffffffffff/0x0 diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/java.contention b/src/cmd/vendor/github.com/google/pprof/profile/testdata/java.contention deleted file mode 100644 index fb484b70a4..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/java.contention +++ /dev/null @@ -1,43 +0,0 @@ ---- contentionz 1 --- -format = java -resolution = microseconds -sampling period = 100 -ms since reset = 6019923 - 1 1 @ 0x00000003 0x00000004 - 14 1 @ 0x0000000d 0x0000000e 0x0000000f 0x00000010 0x00000011 0x00000012 0x00000013 0x00000014 0x00000017 0x00000018 0x00000019 0x0000001a 0x0000001b 0x0000001c 0x00000014 0x00000029 0x0000002a 0x0000002b 0x0000002c 0x0000002d 0x0000002e 0x0000002f 0x00000030 0x00000031 0x00000032 0x00000033 0x00000034 0x00000035 - 2 2 @ 0x00000003 0x00000004 - 2 3 @ 0x00000036 0x00000037 0x00000038 - - - 0x0000003 com.example.function03 (source.java:03) - 0x0000004 com.example.function04 (source.java:04) - 0x000000d com.example.function0d (source.java:0) - 0x000000e com.example.function0e (source.java:0) - 0x000000f com.example.function0f (source.java:0) - 0x0000010 com.example.function10 (source.java:10) - 0x0000011 com.example.function11 (source.java:11) - 0x0000012 com.example.function12 (source.java:12) - 0x0000013 com.example.function13 (source.java:13) - 0x0000014 com.example.function14 (source.java:14) - 0x0000017 com.example.function17 (source.java:17) - 0x0000018 com.example.function18 (source.java:18) - 0x0000019 com.example.function19 (source.java:19) - 0x000001a com.example.function1a (source.java:1) - 0x000001b com.example.function1b (source.java:1) - 0x000001c com.example.function1c (source.java:1) - 0x0000029 com.example.function29 (source.java:29) - 0x000002a com.example.function2a (source.java:2) - 0x000002b com.example.function2b (source.java:2) - 0x000002c com.example.function2c (source.java:2) - 0x000002d com.example.function2d (source.java:2) - 0x000002e com.example.function2e (source.java:2) - 0x000002f com.example.function2f (source.java:2) - 0x0000030 com.example.function30 (source.java:30) - 0x0000031 com.example.function31 (source.java:31) - 0x0000032 com.example.function32 (source.java:32) - 0x0000033 com.example.function33 (source.java:33) - 0x0000034 com.example.function34 (source.java:34) - 0x0000035 com.example.function35 (source.java:35) - 0x0000036 com.example.function36 (source.java:36) - 0x0000037 com.example.function37 (source.java:37) - 0x0000038 com.example.function38 (source.java:38) diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/java.contention.string b/src/cmd/vendor/github.com/google/pprof/profile/testdata/java.contention.string deleted file mode 100644 index 985ffe1cca..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/java.contention.string +++ /dev/null @@ -1,43 +0,0 @@ -PeriodType: contentions count -Period: 100 -Duration: 1h40 -Samples: -contentions/count delay/microseconds - 100 100: 1 2 - 100 1400: 3 4 5 6 7 8 9 10 11 12 13 14 15 16 10 17 18 19 20 21 22 23 24 25 26 27 28 29 - 200 200: 1 2 - 300 200: 30 31 32 -Locations - 1: 0x0 com.example.function03 source.java:3 s=0 - 2: 0x0 com.example.function04 source.java:4 s=0 - 3: 0x0 com.example.function0d source.java:0 s=0 - 4: 0x0 com.example.function0e source.java:0 s=0 - 5: 0x0 com.example.function0f source.java:0 s=0 - 6: 0x0 com.example.function10 source.java:10 s=0 - 7: 0x0 com.example.function11 source.java:11 s=0 - 8: 0x0 com.example.function12 source.java:12 s=0 - 9: 0x0 com.example.function13 source.java:13 s=0 - 10: 0x0 com.example.function14 source.java:14 s=0 - 11: 0x0 com.example.function17 source.java:17 s=0 - 12: 0x0 com.example.function18 source.java:18 s=0 - 13: 0x0 com.example.function19 source.java:19 s=0 - 14: 0x0 com.example.function1a source.java:1 s=0 - 15: 0x0 com.example.function1b source.java:1 s=0 - 16: 0x0 com.example.function1c source.java:1 s=0 - 17: 0x0 com.example.function29 source.java:29 s=0 - 18: 0x0 com.example.function2a source.java:2 s=0 - 19: 0x0 com.example.function2b source.java:2 s=0 - 20: 0x0 com.example.function2c source.java:2 s=0 - 21: 0x0 com.example.function2d source.java:2 s=0 - 22: 0x0 com.example.function2e source.java:2 s=0 - 23: 0x0 com.example.function2f source.java:2 s=0 - 24: 0x0 com.example.function30 source.java:30 s=0 - 25: 0x0 com.example.function31 source.java:31 s=0 - 26: 0x0 com.example.function32 source.java:32 s=0 - 27: 0x0 com.example.function33 source.java:33 s=0 - 28: 0x0 com.example.function34 source.java:34 s=0 - 29: 0x0 com.example.function35 source.java:35 s=0 - 30: 0x0 com.example.function36 source.java:36 s=0 - 31: 0x0 com.example.function37 source.java:37 s=0 - 32: 0x0 com.example.function38 source.java:38 s=0 -Mappings diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/java.cpu b/src/cmd/vendor/github.com/google/pprof/profile/testdata/java.cpu deleted file mode 100644 index 593588b7d6..0000000000 Binary files a/src/cmd/vendor/github.com/google/pprof/profile/testdata/java.cpu and /dev/null differ diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/java.cpu.string b/src/cmd/vendor/github.com/google/pprof/profile/testdata/java.cpu.string deleted file mode 100644 index f728cf26a8..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/java.cpu.string +++ /dev/null @@ -1,78 +0,0 @@ -PeriodType: cpu nanoseconds -Period: 10000000 -Samples: -samples/count cpu/nanoseconds - 0 0: 1 - 0 0: 2 - 2 20000000: 3 - 1 10000000: 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 - 1 10000000: 19 20 21 22 23 16 17 18 - 1 10000000: 24 25 26 27 28 29 30 31 32 - 1 10000000: 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 29 30 31 32 - 1 10000000: 54 55 56 57 58 59 60 61 62 11 63 64 16 17 18 -Locations - 1: 0x0 GC :0 s=0 - 2: 0x0 Compile :0 s=0 - 3: 0x0 VM :0 s=0 - 4: 0x0 com.example.function06 source.java:6 s=0 - 5: 0x0 com.example.function07 source.java:7 s=0 - 6: 0x0 com.example.function08 source.java:8 s=0 - 7: 0x0 com.example.function09 source.java:9 s=0 - 8: 0x0 com.example.function0a source.java:0 s=0 - 9: 0x0 com.example.function0b source.java:0 s=0 - 10: 0x0 com.example.function0c source.java:0 s=0 - 11: 0x0 com.example.function0d source.java:0 s=0 - 12: 0x0 com.example.function0e source.java:0 s=0 - 13: 0x0 com.example.function0f source.java:0 s=0 - 14: 0x0 com.example.function10 source.java:10 s=0 - 15: 0x0 com.example.function11 source.java:11 s=0 - 16: 0x0 com.example.function12 source.java:12 s=0 - 17: 0x0 com.example.function13 source.java:13 s=0 - 18: 0x0 com.example.function14 source.java:14 s=0 - 19: 0x0 com.example.function1d source.java:1 s=0 - 20: 0x0 com.example.function1e source.java:1 s=0 - 21: 0x0 com.example.function1f source.java:1 s=0 - 22: 0x0 com.example.function20 source.java:20 s=0 - 23: 0x0 com.example.function21 source.java:21 s=0 - 24: 0x0 com.example.function22 source.java:22 s=0 - 25: 0x0 com.example.function23 source.java:23 s=0 - 26: 0x0 com.example.function24 source.java:24 s=0 - 27: 0x0 com.example.function25 source.java:25 s=0 - 28: 0x0 com.example.function26 source.java:26 s=0 - 29: 0x0 com.example.function27 source.java:27 s=0 - 30: 0x0 com.example.function28 source.java:28 s=0 - 31: 0x0 com.example.function29 source.java:29 s=0 - 32: 0x0 com.example.function2a source.java:2 s=0 - 33: 0x0 com.example.function2b source.java:2 s=0 - 34: 0x0 com.example.function2c source.java:2 s=0 - 35: 0x0 com.example.function2d source.java:2 s=0 - 36: 0x0 com.example.function2e source.java:2 s=0 - 37: 0x0 com.example.function2f source.java:2 s=0 - 38: 0x0 com.example.function30 source.java:30 s=0 - 39: 0x0 com.example.function31 source.java:31 s=0 - 40: 0x0 com.example.function32 source.java:32 s=0 - 41: 0x0 com.example.function33 source.java:33 s=0 - 42: 0x0 com.example.function34 source.java:34 s=0 - 43: 0x0 com.example.function35 source.java:35 s=0 - 44: 0x0 com.example.function36 source.java:36 s=0 - 45: 0x0 com.example.function37 source.java:37 s=0 - 46: 0x0 com.example.function38 source.java:38 s=0 - 47: 0x0 com.example.function39 source.java:39 s=0 - 48: 0x0 com.example.function3a source.java:3 s=0 - 49: 0x0 com.example.function3b source.java:3 s=0 - 50: 0x0 com.example.function3c source.java:3 s=0 - 51: 0x0 com.example.function3d source.java:3 s=0 - 52: 0x0 com.example.function3e source.java:3 s=0 - 53: 0x0 com.example.function3f source.java:3 s=0 - 54: 0x0 com.example.function40 source.java:40 s=0 - 55: 0x0 com.example.function41 source.java:41 s=0 - 56: 0x0 com.example.function42 source.java:42 s=0 - 57: 0x0 com.example.function43 source.java:43 s=0 - 58: 0x0 com.example.function44 source.java:44 s=0 - 59: 0x0 com.example.function45 source.java:45 s=0 - 60: 0x0 com.example.function46 source.java:46 s=0 - 61: 0x0 com.example.function47 source.java:47 s=0 - 62: 0x0 com.example.function48 source.java:48 s=0 - 63: 0x0 com.example.function49 source.java:49 s=0 - 64: 0x0 com.example.function4a source.java:4 s=0 -Mappings diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/java.heap b/src/cmd/vendor/github.com/google/pprof/profile/testdata/java.heap deleted file mode 100644 index 95e4f6e880..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/java.heap +++ /dev/null @@ -1,133 +0,0 @@ ---- heapz 1 --- -format = java -resolution = bytes - 7048 1 @ 0x00000003 0x00000004 0x00000005 0x00000006 0x00000007 0x00000008 0x00000009 0x0000000a 0x0000000b 0x0000000c 0x0000000d 0x0000000e 0x0000000f 0x00000010 0x00000011 0x00000018 0x00000019 0x0000001a 0x0000001b 0x0000001c 0x0000001d 0x0000001e 0x0000001f 0x00000020 0x00000021 0x00000022 0x00000023 0x00000024 0x00000025 0x00000026 0x00000027 0x00000023 0x00000028 0x00000029 0x0000001d 0x0000001e 0x0000001f 0x00000020 0x00000021 0x00000027 0x00000023 0x00000028 0x00000029 0x0000001d 0x0000001e 0x0000001f 0x00000020 0x00000021 0x0000002a 0x00000027 0x00000023 0x00000028 0x00000029 0x0000001d 0x0000001e 0x0000001f 0x00000020 - 4752 9 @ 0x0000002b 0x0000002c 0x0000002d 0x0000002e - 880 1 @ 0x00000035 0x00000036 0x00000037 0x00000038 0x00000039 0x0000003a 0x0000003b 0x00000011 0x0000003d 0x0000003e 0x0000003f 0x00000040 0x00000041 0x00000042 0x00000011 0x00000049 0x0000004a 0x0000004b 0x0000004c 0x0000004d 0x0000004e 0x0000004b 0x0000004f 0x0000004b 0x00000050 0x00000051 0x00000052 0x00000053 0x00000054 0x00000055 0x00000056 0x00000057 - 560 1 @ 0x00000035 0x00000036 0x00000037 0x00000038 0x00000039 0x0000003a 0x0000003b 0x00000011 0x0000003d 0x0000003e 0x0000003f 0x00000040 0x00000041 0x00000042 0x00000011 0x0000005e 0x0000005f 0x00000060 0x00000061 0x00000062 0x00000063 0x00000064 0x00000065 0x00000066 0x00000067 0x00000068 0x00000069 0x0000006a 0x0000006b 0x0000006c 0x0000006d 0x0000006e 0x0000006f 0x00000070 0x00000071 0x00000072 0x00000073 0x00000074 0x00000075 0x00000067 0x00000068 - 528 1 @ 0x00000076 0x00000077 0x00000078 0x00000079 0x0000007a 0x0000007b 0x00000011 0x00000081 0x00000011 0x00000082 0x0000004e 0x0000004b 0x0000004f 0x0000004b 0x00000050 0x00000051 0x00000052 0x00000053 0x00000054 0x00000055 0x00000056 0x00000057 - 440 1 @ 0x00000083 0x00000084 0x00000085 0x00000086 0x00000087 0x00000088 0x00000089 0x0000008a 0x0000008b 0x0000008c 0x0000008d 0x0000008e 0x0000008f 0x00000090 0x00000091 0x00000092 0x00000093 0x00000094 0x00000095 0x00000096 - 240 5 @ 0x00000097 - - - 0x00000003 com.example.function003 (Source003.java:103) - 0x00000004 com.example.function004 (Source004.java:104) - 0x00000005 com.example.function005 (Source005.java:105) - 0x00000006 com.example.function006 (Source006.java:106) - 0x00000007 com.example.function007 (Source007.java:107) - 0x00000008 com.example.function008 (Source008.java:108) - 0x00000009 com.example.function009 (Source009.java:109) - 0x0000000a com.example.function00a (Source00a.java:10) - 0x0000000b com.example.function00b (Source00b.java:10) - 0x0000000c com.example.function00c (Source00c.java:10) - 0x0000000d com.example.function00d (Source00d.java:10) - 0x0000000e com.example.function00e (Source00e.java:10) - 0x0000000f com.example.function00f (Source00f.java:10) - 0x00000010 com.example.function010 (Source010.java:110) - 0x00000011 com.example.function011 (Source011.java:111) - 0x00000018 com.example.function018 (Source018.java:118) - 0x00000019 com.example.function019 (Source019.java:119) - 0x0000001a com.example.function01a (Source01a.java:11) - 0x0000001b com.example.function01b (Source01b.java:11) - 0x0000001c com.example.function01c (Source01c.java:11) - 0x0000001d com.example.function01d (Source01d.java:11) - 0x0000001e com.example.function01e (Source01e.java:11) - 0x0000001f com.example.function01f (Source01f.java:11) - 0x00000020 com.example.function020 (Source020.java:120) - 0x00000021 com.example.function021 (Source021.java:121) - 0x00000022 com.example.function022 (Source022.java:122) - 0x00000023 com.example.function023 (Source023.java:123) - 0x00000024 com.example.function024 (Source024.java:124) - 0x00000025 com.example.function025 (Source025.java:125) - 0x00000026 com.example.function026 (Source026.java:126) - 0x00000027 com.example.function027 (Source027.java:127) - 0x00000028 com.example.function028 (Source028.java:128) - 0x00000029 com.example.function029 (Source029.java:129) - 0x0000002a com.example.function02a (Source02a.java:12) - 0x0000002b com.example.function02b (Source02b.java:12) - 0x0000002c com.example.function02c (Source02c.java:12) - 0x0000002d com.example.function02d (Source02d.java:12) - 0x0000002e com.example.function02e (Source02e.java:12) - 0x00000035 com.example.function035 (Source035.java:135) - 0x00000036 com.example.function036 (Source036.java:136) - 0x00000037 com.example.function037 (Source037.java:137) - 0x00000038 com.example.function038 (Source038.java:138) - 0x00000039 com.example.function039 (Source039.java:139) - 0x0000003a com.example.function03a (Source03a.java:13) - 0x0000003b com.example.function03b (Source03b.java:13) - 0x0000003d com.example.function03d (Source03d.java:13) - 0x0000003e com.example.function03e (Source03e.java:13) - 0x0000003f com.example.function03f (Source03f.java:13) - 0x00000040 com.example.function040 (Source040.java:140) - 0x00000041 com.example.function041 (Source041.java:141) - 0x00000042 com.example.function042 (Source042.java:142) - 0x00000049 com.example.function049 (Source049.java:149) - 0x0000004a com.example.function04a (Source04a.java:14) - 0x0000004b com.example.function04b (Source04b.java:14) - 0x0000004c com.example.function04c (Source04c.java:14) - 0x0000004d com.example.function04d (Source04d.java:14) - 0x0000004e com.example.function04e (Source04e.java:14) - 0x0000004f com.example.function04f (Source04f.java:14) - 0x00000050 com.example.function050 (Source050.java:150) - 0x00000051 com.example.function051 (Source051.java:151) - 0x00000052 com.example.function052 (Source052.java:152) - 0x00000053 com.example.function053 (Source053.java:153) - 0x00000054 com.example.function054 (Source054.java:154) - 0x00000055 com.example.function055 (Source055.java:155) - 0x00000056 com.example.function056 (Source056.java:156) - 0x00000057 com.example.function057 (Source057.java:157) - 0x0000005a com.example.function05a (Source05a.java:15) - 0x0000005e com.example.function05e (Source05e.java:15) - 0x0000005f com.example.function05f (Source05f.java:15) - 0x00000060 com.example.function060 (Source060.java:160) - 0x00000061 com.example.function061 (Source061.java:161) - 0x00000062 com.example.function062 (Source062.java:162) - 0x00000063 com.example.function063 (Source063.java:163) - 0x00000064 com.example.function064 (Source064.java:164) - 0x00000065 com.example.function065 (Source065.java:165) - 0x00000066 com.example.function066 (Source066.java:166) - 0x00000067 com.example.function067 (Source067.java:167) - 0x00000068 com.example.function068 (Source068.java:168) - 0x00000069 com.example.function069 (Source069.java:169) - 0x0000006a com.example.function06a (Source06a.java:16) - 0x0000006b com.example.function06b (Source06b.java:16) - 0x0000006c com.example.function06c (Source06c.java:16) - 0x0000006d com.example.function06d (Source06d.java:16) - 0x0000006e com.example.function06e (Source06e.java:16) - 0x0000006f com.example.function06f (Source06f.java:16) - 0x00000070 com.example.function070 (Source070.java:170) - 0x00000071 com.example.function071 (Source071.java:171) - 0x00000072 com.example.function072 (Source072.java:172) - 0x00000073 com.example.function073 (Source073.java:173) - 0x00000074 com.example.function074 (Source074.java:174) - 0x00000075 com.example.function075 (Source075.java:175) - 0x00000076 com.example.function076 (Source076.java:176) - 0x00000077 com.example.function077 (Source077.java:177) - 0x00000078 com.example.function078 (Source078.java:178) - 0x00000079 com.example.function079 (Source079.java:179) - 0x0000007a com.example.function07a (Source07a.java:17) - 0x0000007b com.example.function07b (Source07b.java:17) - 0x0000007d com.example.function07d (Source07d.java:17) - 0x00000081 com.example.function081 (Source081.java:181) - 0x00000082 com.example.function082 (Source082.java:182) - 0x00000083 com.example.function083 (Source083.java:183) - 0x00000084 com.example.function084 (Source084.java:184) - 0x00000085 com.example.function085 (Source085.java:185) - 0x00000086 com.example.function086 (Source086.java:186) - 0x00000087 com.example.function087 (Source087.java:187) - 0x00000088 com.example.function088 (Source088.java:188) - 0x00000089 com.example.function089 (Source089.java:189) - 0x0000008a com.example.function08a (Source08a.java:18) - 0x0000008b com.example.function08b (Source08b.java:18) - 0x0000008c com.example.function08c (Source08c.java:18) - 0x0000008d com.example.function08d (Source08d.java:18) - 0x0000008e com.example.function08e (Source08e.java:18) - 0x0000008f com.example.function08f (Source08f.java:18) - 0x00000090 com.example.function090 (Source090.java:190) - 0x00000091 com.example.function091 (Source091.java:191) - 0x00000092 com.example.function092 (Source092.java:192) - 0x00000093 com.example.function093 (Source093.java:193) - 0x00000094 com.example.function094 (Source094.java:194) - 0x00000095 com.example.function095 (Source095.java:195) - 0x00000096 com.example.function096 (Source096.java:196) - 0x00000097 com.example.function097 (Source097.java:197) diff --git a/src/cmd/vendor/github.com/google/pprof/profile/testdata/java.heap.string b/src/cmd/vendor/github.com/google/pprof/profile/testdata/java.heap.string deleted file mode 100644 index 261bee13a6..0000000000 --- a/src/cmd/vendor/github.com/google/pprof/profile/testdata/java.heap.string +++ /dev/null @@ -1,139 +0,0 @@ -PeriodType: -Period: 0 -Samples: -inuse_objects/count inuse_space/bytes - 74 527819: 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 27 32 33 21 22 23 24 25 31 27 32 33 21 22 23 24 25 34 31 27 32 33 21 22 23 24 - bytes:[7048] - 8941 4720968: 35 36 37 38 - bytes:[528] - 596 524728: 39 40 41 42 43 44 45 15 46 47 48 49 50 51 15 52 53 54 55 56 57 54 58 54 59 60 61 62 63 64 65 66 - bytes:[880] - 936 524568: 39 40 41 42 43 44 45 15 46 47 48 49 50 51 15 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 76 77 - bytes:[560] - 993 524552: 91 92 93 94 95 96 15 97 15 98 57 54 58 54 59 60 61 62 63 64 65 66 - bytes:[528] - 1192 524508: 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 - bytes:[440] - 54615 2621560: 119 - bytes:[48] -Locations - 1: 0x0 com.example.function003 Source003.java:103 s=0 - 2: 0x0 com.example.function004 Source004.java:104 s=0 - 3: 0x0 com.example.function005 Source005.java:105 s=0 - 4: 0x0 com.example.function006 Source006.java:106 s=0 - 5: 0x0 com.example.function007 Source007.java:107 s=0 - 6: 0x0 com.example.function008 Source008.java:108 s=0 - 7: 0x0 com.example.function009 Source009.java:109 s=0 - 8: 0x0 com.example.function00a Source00a.java:10 s=0 - 9: 0x0 com.example.function00b Source00b.java:10 s=0 - 10: 0x0 com.example.function00c Source00c.java:10 s=0 - 11: 0x0 com.example.function00d Source00d.java:10 s=0 - 12: 0x0 com.example.function00e Source00e.java:10 s=0 - 13: 0x0 com.example.function00f Source00f.java:10 s=0 - 14: 0x0 com.example.function010 Source010.java:110 s=0 - 15: 0x0 com.example.function011 Source011.java:111 s=0 - 16: 0x0 com.example.function018 Source018.java:118 s=0 - 17: 0x0 com.example.function019 Source019.java:119 s=0 - 18: 0x0 com.example.function01a Source01a.java:11 s=0 - 19: 0x0 com.example.function01b Source01b.java:11 s=0 - 20: 0x0 com.example.function01c Source01c.java:11 s=0 - 21: 0x0 com.example.function01d Source01d.java:11 s=0 - 22: 0x0 com.example.function01e Source01e.java:11 s=0 - 23: 0x0 com.example.function01f Source01f.java:11 s=0 - 24: 0x0 com.example.function020 Source020.java:120 s=0 - 25: 0x0 com.example.function021 Source021.java:121 s=0 - 26: 0x0 com.example.function022 Source022.java:122 s=0 - 27: 0x0 com.example.function023 Source023.java:123 s=0 - 28: 0x0 com.example.function024 Source024.java:124 s=0 - 29: 0x0 com.example.function025 Source025.java:125 s=0 - 30: 0x0 com.example.function026 Source026.java:126 s=0 - 31: 0x0 com.example.function027 Source027.java:127 s=0 - 32: 0x0 com.example.function028 Source028.java:128 s=0 - 33: 0x0 com.example.function029 Source029.java:129 s=0 - 34: 0x0 com.example.function02a Source02a.java:12 s=0 - 35: 0x0 com.example.function02b Source02b.java:12 s=0 - 36: 0x0 com.example.function02c Source02c.java:12 s=0 - 37: 0x0 com.example.function02d Source02d.java:12 s=0 - 38: 0x0 com.example.function02e Source02e.java:12 s=0 - 39: 0x0 com.example.function035 Source035.java:135 s=0 - 40: 0x0 com.example.function036 Source036.java:136 s=0 - 41: 0x0 com.example.function037 Source037.java:137 s=0 - 42: 0x0 com.example.function038 Source038.java:138 s=0 - 43: 0x0 com.example.function039 Source039.java:139 s=0 - 44: 0x0 com.example.function03a Source03a.java:13 s=0 - 45: 0x0 com.example.function03b Source03b.java:13 s=0 - 46: 0x0 com.example.function03d Source03d.java:13 s=0 - 47: 0x0 com.example.function03e Source03e.java:13 s=0 - 48: 0x0 com.example.function03f Source03f.java:13 s=0 - 49: 0x0 com.example.function040 Source040.java:140 s=0 - 50: 0x0 com.example.function041 Source041.java:141 s=0 - 51: 0x0 com.example.function042 Source042.java:142 s=0 - 52: 0x0 com.example.function049 Source049.java:149 s=0 - 53: 0x0 com.example.function04a Source04a.java:14 s=0 - 54: 0x0 com.example.function04b Source04b.java:14 s=0 - 55: 0x0 com.example.function04c Source04c.java:14 s=0 - 56: 0x0 com.example.function04d Source04d.java:14 s=0 - 57: 0x0 com.example.function04e Source04e.java:14 s=0 - 58: 0x0 com.example.function04f Source04f.java:14 s=0 - 59: 0x0 com.example.function050 Source050.java:150 s=0 - 60: 0x0 com.example.function051 Source051.java:151 s=0 - 61: 0x0 com.example.function052 Source052.java:152 s=0 - 62: 0x0 com.example.function053 Source053.java:153 s=0 - 63: 0x0 com.example.function054 Source054.java:154 s=0 - 64: 0x0 com.example.function055 Source055.java:155 s=0 - 65: 0x0 com.example.function056 Source056.java:156 s=0 - 66: 0x0 com.example.function057 Source057.java:157 s=0 - 67: 0x0 com.example.function05e Source05e.java:15 s=0 - 68: 0x0 com.example.function05f Source05f.java:15 s=0 - 69: 0x0 com.example.function060 Source060.java:160 s=0 - 70: 0x0 com.example.function061 Source061.java:161 s=0 - 71: 0x0 com.example.function062 Source062.java:162 s=0 - 72: 0x0 com.example.function063 Source063.java:163 s=0 - 73: 0x0 com.example.function064 Source064.java:164 s=0 - 74: 0x0 com.example.function065 Source065.java:165 s=0 - 75: 0x0 com.example.function066 Source066.java:166 s=0 - 76: 0x0 com.example.function067 Source067.java:167 s=0 - 77: 0x0 com.example.function068 Source068.java:168 s=0 - 78: 0x0 com.example.function069 Source069.java:169 s=0 - 79: 0x0 com.example.function06a Source06a.java:16 s=0 - 80: 0x0 com.example.function06b Source06b.java:16 s=0 - 81: 0x0 com.example.function06c Source06c.java:16 s=0 - 82: 0x0 com.example.function06d Source06d.java:16 s=0 - 83: 0x0 com.example.function06e Source06e.java:16 s=0 - 84: 0x0 com.example.function06f Source06f.java:16 s=0 - 85: 0x0 com.example.function070 Source070.java:170 s=0 - 86: 0x0 com.example.function071 Source071.java:171 s=0 - 87: 0x0 com.example.function072 Source072.java:172 s=0 - 88: 0x0 com.example.function073 Source073.java:173 s=0 - 89: 0x0 com.example.function074 Source074.java:174 s=0 - 90: 0x0 com.example.function075 Source075.java:175 s=0 - 91: 0x0 com.example.function076 Source076.java:176 s=0 - 92: 0x0 com.example.function077 Source077.java:177 s=0 - 93: 0x0 com.example.function078 Source078.java:178 s=0 - 94: 0x0 com.example.function079 Source079.java:179 s=0 - 95: 0x0 com.example.function07a Source07a.java:17 s=0 - 96: 0x0 com.example.function07b Source07b.java:17 s=0 - 97: 0x0 com.example.function081 Source081.java:181 s=0 - 98: 0x0 com.example.function082 Source082.java:182 s=0 - 99: 0x0 com.example.function083 Source083.java:183 s=0 - 100: 0x0 com.example.function084 Source084.java:184 s=0 - 101: 0x0 com.example.function085 Source085.java:185 s=0 - 102: 0x0 com.example.function086 Source086.java:186 s=0 - 103: 0x0 com.example.function087 Source087.java:187 s=0 - 104: 0x0 com.example.function088 Source088.java:188 s=0 - 105: 0x0 com.example.function089 Source089.java:189 s=0 - 106: 0x0 com.example.function08a Source08a.java:18 s=0 - 107: 0x0 com.example.function08b Source08b.java:18 s=0 - 108: 0x0 com.example.function08c Source08c.java:18 s=0 - 109: 0x0 com.example.function08d Source08d.java:18 s=0 - 110: 0x0 com.example.function08e Source08e.java:18 s=0 - 111: 0x0 com.example.function08f Source08f.java:18 s=0 - 112: 0x0 com.example.function090 Source090.java:190 s=0 - 113: 0x0 com.example.function091 Source091.java:191 s=0 - 114: 0x0 com.example.function092 Source092.java:192 s=0 - 115: 0x0 com.example.function093 Source093.java:193 s=0 - 116: 0x0 com.example.function094 Source094.java:194 s=0 - 117: 0x0 com.example.function095 Source095.java:195 s=0 - 118: 0x0 com.example.function096 Source096.java:196 s=0 - 119: 0x0 com.example.function097 Source097.java:197 s=0 -Mappings diff --git a/src/cmd/vendor/github.com/ianlancetaylor/demangle/.gitignore b/src/cmd/vendor/github.com/ianlancetaylor/demangle/.gitignore new file mode 100644 index 0000000000..4a8b38f46b --- /dev/null +++ b/src/cmd/vendor/github.com/ianlancetaylor/demangle/.gitignore @@ -0,0 +1,13 @@ +*.o +*.a +*.so +._* +.nfs.* +a.out +*~ +*.orig +*.rej +*.exe +.*.swp +core +demangle.test diff --git a/src/cmd/vendor/github.com/ianlancetaylor/demangle/ast_test.go b/src/cmd/vendor/github.com/ianlancetaylor/demangle/ast_test.go deleted file mode 100644 index b55406169d..0000000000 --- a/src/cmd/vendor/github.com/ianlancetaylor/demangle/ast_test.go +++ /dev/null @@ -1,42 +0,0 @@ -// 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 demangle - -import ( - "fmt" - "testing" -) - -func TestASTToString(t *testing.T) { - var tests = []struct { - input AST - want string - formatted string - }{ - { - &Qualified{Scope: &Name{Name: "s"}, Name: &Name{Name: "C"}}, - "s::C", - `Qualified: - Scope: s - Name: C`, - }, - { - &Typed{Name: &Name{Name: "v"}, Type: &BuiltinType{"int"}}, - "int v", - `Typed: - Name: v - Type: BuiltinType: int`, - }, - } - - for i, test := range tests { - if got := ASTToString(test.input); got != test.want { - t.Errorf("ASTToString of test %d == %s, want %s", i, test.input, test.want) - } - if got := fmt.Sprintf("%#v", test.input); got != test.formatted { - t.Errorf("Formatted test %d == %s, want %s", i, got, test.formatted) - } - } -} diff --git a/src/cmd/vendor/github.com/ianlancetaylor/demangle/demangle_test.go b/src/cmd/vendor/github.com/ianlancetaylor/demangle/demangle_test.go deleted file mode 100644 index 30a326933e..0000000000 --- a/src/cmd/vendor/github.com/ianlancetaylor/demangle/demangle_test.go +++ /dev/null @@ -1,420 +0,0 @@ -// 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 demangle - -import ( - "strconv" - "strings" - "testing" -) - -// Check test cases discovered after the code passed the tests in -// demangle-expected (which are tested by TestExpected). Some of this -// are cases where we differ from the standard demangler, some we are -// the same but we weren't initially. -func TestDemangler(t *testing.T) { - var tests = []struct { - input string - want string - wantNoParams string - wantNoTemplateParams string - wantMinimal string - }{ - { - "_ZNSaIcEC1ERKS_", - "std::allocator::allocator(std::allocator const&)", - "std::allocator::allocator", - "std::allocator::allocator(std::allocator const&)", - "std::allocator::allocator", - }, - { - "_ZN9__gnu_cxx13stdio_filebufIcSt11char_traitsIcEEC1EP8_IO_FILESt13_Ios_Openmodem", - "__gnu_cxx::stdio_filebuf >::stdio_filebuf(_IO_FILE*, std::_Ios_Openmode, unsigned long)", - "__gnu_cxx::stdio_filebuf >::stdio_filebuf", - "__gnu_cxx::stdio_filebuf::stdio_filebuf(_IO_FILE*, std::_Ios_Openmode, unsigned long)", - "__gnu_cxx::stdio_filebuf::stdio_filebuf", - }, - { - "_ZN1n1CcvNS_1DIT_EEI1EEEv", - "n::C::operator n::D()", - "n::C::operator n::D", - "n::C::operator n::D()", - "n::C::operator n::D", - }, - { - "_Z1CIvPN1D1E1FIdJEEEdEPN1GILb0ET_T0_T1_E1HEPFS6_S7_S8_EN1H1I1JIS7_E1KENSG_IS8_E1KE", - "G*, double>::H* C*, double>(void (*)(D::E::F*, double), H::I::J*>::K, H::I::J::K)", - "C*, double>", - "G::H* C(void (*)(D::E::F*, double), H::I::J::K, H::I::J::K)", - "C", - }, - { - "_ZZNK1CI1DIcSt1EIcESaIcEEJEE1FEvE1F", - "C, std::allocator > >::F() const::F", - "C, std::allocator > >::F() const::F", - "C::F() const::F", - "C::F() const::F", - }, - { - "_ZN1CI1DSt1EIK1FN1G1HEEE1I1JIJRKS6_EEEvDpOT_", - "void C >::I::J const&>(std::E const&)", - "C >::I::J const&>", - "void C::I::J(std::E const&)", - "C::I::J", - }, - { - "_ZN1C1D1E1FIJEEEvi1GDpT_", - "void C::D::E::F<>(int, G)", - "C::D::E::F<>", - "void C::D::E::F(int, G)", - "C::D::E::F", - }, - { - "_ZN1CILj50ELb1EE1DEv", - "C<50u, true>::D()", - "C<50u, true>::D", - "C::D()", - "C::D", - }, - { - "_ZN1CUt_C2Ev", - "C::{unnamed type#1}::{unnamed type#1}()", - "C::{unnamed type#1}::{unnamed type#1}", - "C::{unnamed type#1}::{unnamed type#1}()", - "C::{unnamed type#1}::{unnamed type#1}", - }, - { - "_ZN1C12_GLOBAL__N_11DINS_1EEEEN1F1GIDTadcldtcvT__E1HEEEERKS5_NS_1I1JE", - "F::G C::(anonymous namespace)::D(C::E const&, C::I::J)", - "C::(anonymous namespace)::D", - "F::G C::(anonymous namespace)::D(C::E const&, C::I::J)", - "C::(anonymous namespace)::D", - }, - { - "_ZN1CI1DE1EIJiRiRPKcRA1_S4_S8_bS6_S3_RjRPKN1F1GERPKN1H1IEEEEvDpOT_", - "void C::E(int&&, int&, char const*&, char const (&) [1], char const (&) [1], bool&&, char const*&, int&, unsigned int&, F::G const*&, H::I const*&)", - "C::E", - "void C::E(int&&, int&, char const*&, char const (&) [1], char const (&) [1], bool&&, char const*&, int&, unsigned int&, F::G const*&, H::I const*&)", - "C::E", - }, - { - "_ZN1C12_GLOBAL__N_11DIFbPKNS_1EEEEEvPNS_1FERKT_", - "void C::(anonymous namespace)::D(C::F*, bool (&)(C::E const*) const)", - "C::(anonymous namespace)::D", - "void C::(anonymous namespace)::D(C::F*, bool (&)(C::E const*) const)", - "C::(anonymous namespace)::D", - }, - { - "_ZN1C1D1EIJRFviSt1FIFvRKN1G1H1IEEERKSt6vectorINS_1JESaISB_EEERiS9_EvEENS0_1K1LIJDpNSt1MIT_E1NEEEEDpOSM_", - "C::D::K::L, std::vector > const&)>::N, std::M::N, std::M >::N> C::D::E, std::vector > const&), int&, std::F, void>(void (&)(int, std::F, std::vector > const&), int&, std::F&&)", - "C::D::E, std::vector > const&), int&, std::F, void>", - "C::D::K::L C::D::E(void (&)(int, std::F, std::vector const&), int&, std::F&&)", - "C::D::E", - }, - { - "_ZN1C1D1E1FcvNS_1GIT_EEI1HEEv", - "C::D::E::F::operator C::G()", - "C::D::E::F::operator C::G", - "C::D::E::F::operator C::G()", - "C::D::E::F::operator C::G", - }, - { - "_ZN9__gnu_cxx17__normal_iteratorIPK1EIN1F1G1HEESt6vectorIS5_SaIS5_EEEC2IPS5_EERKNS0_IT_NS_11__enable_ifIXsr3std10__are_sameISE_SD_EE7__valueESA_E1IEEE", - "__gnu_cxx::__normal_iterator const*, std::vector, std::allocator > > >::__normal_iterator*>(__gnu_cxx::__normal_iterator*, __gnu_cxx::__enable_if*, E*>::__value, std::vector, std::allocator > > >::I> const&)", - "__gnu_cxx::__normal_iterator const*, std::vector, std::allocator > > >::__normal_iterator*>", - "__gnu_cxx::__normal_iterator::__normal_iterator(__gnu_cxx::__normal_iterator const&)", - "__gnu_cxx::__normal_iterator::__normal_iterator", - }, - { - "_ZNKSt1CIM1DKFjvEEclIJEvEEjPKS0_DpOT_", - "unsigned int std::C::operator()(D const*) const", - "std::C::operator()", - "unsigned int std::C::operator()(D const*) const", - "std::C::operator()", - }, - { - "_ZNSt10_HashtableI12basic_stringIcSt11char_traitsIcESaIcEESt4pairIKS4_N1C1D1EEESaISA_ENSt8__detail10_Select1stESt8equal_toIS4_ESt4hashIS4_ENSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb1ELb0ELb1EEEE9_M_assignIZNSN_C1ERKSN_EUlPKNSC_10_Hash_nodeISA_Lb1EEEE_EEvSQ_RKT_", - "void std::_Hashtable, std::allocator >, std::pair, std::allocator > const, C::D::E>, std::allocator, std::allocator > const, C::D::E> >, std::__detail::_Select1st, std::equal_to, std::allocator > >, std::hash, std::allocator > >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits >::_M_assign, std::allocator >, std::pair, std::allocator > const, C::D::E>, std::allocator, std::allocator > const, C::D::E> >, std::__detail::_Select1st, std::equal_to, std::allocator > >, std::hash, std::allocator > >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits >::_Hashtable(std::_Hashtable, std::allocator >, std::pair, std::allocator > const, C::D::E>, std::allocator, std::allocator > const, C::D::E> >, std::__detail::_Select1st, std::equal_to, std::allocator > >, std::hash, std::allocator > >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits > const&)::{lambda(std::__detail::_Hash_node, std::allocator > const, C::D::E>, true> const*)#1}>(std::_Hashtable, std::allocator >, std::pair, std::allocator > const, C::D::E>, std::allocator, std::allocator > const, C::D::E> >, std::__detail::_Select1st, std::equal_to, std::allocator > >, std::hash, std::allocator > >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits > const&, std::_Hashtable, std::allocator >, std::pair, std::allocator > const, C::D::E>, std::allocator, std::allocator > const, C::D::E> >, std::__detail::_Select1st, std::equal_to, std::allocator > >, std::hash, std::allocator > >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits >::_Hashtable(std::_Hashtable, std::allocator >, std::pair, std::allocator > const, C::D::E>, std::allocator, std::allocator > const, C::D::E> >, std::__detail::_Select1st, std::equal_to, std::allocator > >, std::hash, std::allocator > >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits > const&)::{lambda(std::__detail::_Hash_node, std::allocator > const, C::D::E>, true> const*)#1} const&)", - "std::_Hashtable, std::allocator >, std::pair, std::allocator > const, C::D::E>, std::allocator, std::allocator > const, C::D::E> >, std::__detail::_Select1st, std::equal_to, std::allocator > >, std::hash, std::allocator > >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits >::_M_assign, std::allocator >, std::pair, std::allocator > const, C::D::E>, std::allocator, std::allocator > const, C::D::E> >, std::__detail::_Select1st, std::equal_to, std::allocator > >, std::hash, std::allocator > >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits >::_Hashtable(std::_Hashtable, std::allocator >, std::pair, std::allocator > const, C::D::E>, std::allocator, std::allocator > const, C::D::E> >, std::__detail::_Select1st, std::equal_to, std::allocator > >, std::hash, std::allocator > >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits > const&)::{lambda(std::__detail::_Hash_node, std::allocator > const, C::D::E>, true> const*)#1}>", - "void std::_Hashtable::_M_assign(std::_Hashtable const&, std::_Hashtable::_Hashtable(std::_Hashtable const&)::{lambda(std::__detail::_Hash_node const*)#1} const&)", - "std::_Hashtable::_M_assign", - }, - { - "_ZSt3maxIVdERKT_S3_S3_", - "double const volatile& std::max(double const volatile&, double const volatile&)", - "std::max", - "double const volatile& std::max(double const volatile&, double const volatile&)", - "std::max", - }, - { - "_ZZN1C1D1E1F1G1HEvENUlvE_C2EOS4_", - "C::D::E::F::G::H()::{lambda()#1}::{lambda()#1}({lambda()#1}&&)", - "C::D::E::F::G::H()::{lambda()#1}::{lambda()#1}", - "C::D::E::F::G::H()::{lambda()#1}::{lambda()#1}({lambda()#1}&&)", - "C::D::E::F::G::H()::{lambda()#1}::{lambda()#1}", - }, - { - "_ZThn8_NK1C1D1EEv", - "non-virtual thunk to C::D::E() const", - "non-virtual thunk to C::D::E() const", - "non-virtual thunk to C::D::E() const", - "non-virtual thunk to C::D::E() const", - }, - { - "_ZTv0_n96_NK1C1D1E1FEv", - "virtual thunk to C::D::E::F() const", - "virtual thunk to C::D::E::F() const", - "virtual thunk to C::D::E::F() const", - "virtual thunk to C::D::E::F() const", - }, - { - "_ZTCSt9strstream16_So", - "construction vtable for std::ostream-in-std::strstream", - "construction vtable for std::ostream-in-std::strstream", - "construction vtable for std::ostream-in-std::strstream", - "construction vtable for std::ostream-in-std::strstream", - }, - { - "_ZGVZZN1C1D1EEvENK3$_0clEvE1F", - "guard variable for C::D::E()::$_0::operator()() const::F", - "guard variable for C::D::E()::$_0::operator()() const::F", - "guard variable for C::D::E()::$_0::operator()() const::F", - "guard variable for C::D::E()::$_0::operator()() const::F", - }, - { - "_Z1fICiEvT_", - "void f(int _Complex)", - "f", - "void f(int _Complex)", - "f", - }, - { - "_GLOBAL__D__Z2fnv", - "global destructors keyed to fn()", - "global destructors keyed to fn()", - "global destructors keyed to fn()", - "global destructors keyed to fn()", - }, - { - "_Z1fIXadL_Z1hvEEEvv", - "void f<&h>()", - "f<&h>", - "void f()", - "f", - }, - { - "_Z1CIP1DEiRK1EPT_N1F1GIS5_Xaasr1HIS5_E1IntsrSA_1JEE1KE", - "int C(E const&, D**, F::G::I&&(!H::J)>::K)", - "C", - "int C(E const&, D**, F::G::K)", - "C", - }, - { - "_ZNO1A1B1C1DIZN1E1F1GINS3_1HE1IEEvMNS3_1JEFvP1LPKT_PT0_P1KESD_SA_SF_SH_EUlvE_Lb0EEcvPSB_ISG_vvEEv", - "A::B::C::D(void (E::J::*)(L*, E::H const*, I*, K*), E::H const*, L*, I*, K*)::{lambda()#1}, false>::operator K*() &&", - "A::B::C::D(void (E::J::*)(L*, E::H const*, I*, K*), E::H const*, L*, I*, K*)::{lambda()#1}, false>::operator K*", - "A::B::C::D::operator K*() &&", - "A::B::C::D::operator K*", - }, - { - "_ZNSt1AIFSt1BImjEjEZN1C1DI1EEENSt1FIXeqsr1G1H1IIDTadsrT_onclEEE1JLi2EEvE1KEPKcSC_OS7_EUljE_E1KERKSt1Lj", - "std::A (unsigned int), std::F::J==(2), void>::K C::D(char const*, G::H::I, G&&)::{lambda(unsigned int)#1}>::K(std::L const&, unsigned int)", - "std::A (unsigned int), std::F::J==(2), void>::K C::D(char const*, G::H::I, G&&)::{lambda(unsigned int)#1}>::K", - "std::A::K(std::L const&, unsigned int)", - "std::A::K", - }, - { - "_ZNSt1AIFSt1BImjEjEZN1L1CIUljE_EENSt1DIXeqsrN1E1F1GIDTadsrT_clEEE1HLi2EEvE1IEPKcSG_OSA_EUljE_E1JERKSt1Kj", - "std::A (unsigned int), std::D::H==(2), void>::I L::C<{lambda(unsigned int)#1}>(char const*, char const*, {lambda(unsigned int)#1}&&)::{lambda(unsigned int)#1}>::J(std::K const&, unsigned int)", - "std::A (unsigned int), std::D::H==(2), void>::I L::C<{lambda(unsigned int)#1}>(char const*, char const*, {lambda(unsigned int)#1}&&)::{lambda(unsigned int)#1}>::J", - "std::A::J(std::K const&, unsigned int)", - "std::A::J", - }, - { - "_ZNSt1A1BIiNS_1CIiEEE1DIPiEENS_1EIXaasr1FIT_EE1Gsr1HIiNS_1IIS7_E1JEEE1KEvE1LES7_S7_", - "std::A::E::G&&H::J>::K, void>::L std::A::B >::D(F, F)", - "std::A::B >::D", - "std::A::E::L std::A::B::D(F, F)", - "std::A::B::D", - }, - { - "_ZNO1A1B1C1DIJOZZN1E1F1GINS4_1HINS4_1IINS4_1JEEEEEJNS4_1KEEEEN1L1MINS4_1OINT_1PEEEEERKSt6vectorIN1Q1RESaISL_EERKN3gtl1S1TIN1U1VEEERKNS4_1W1XERKNS4_1YERKNSQ_1ZINS4_1aEEEPSt13unordered_mapISL_NSK_9UniquePtrINS4_1bINS0_1cIJS9_NS7_INST_1dEEEEEENS4_1fEEEEENSC_1g1hIvEESt8equal_toISL_ESaISt4pairIKSL_S1J_EEEDpRKT0_ENKUlSL_mmS1G_E_clESL_mmS1G_EUlS9_E_OZZNS5_ISA_JSB_EEESI_SP_SX_S11_S14_S19_S1U_S1Y_ENKS1Z_clESL_mmS1G_EUlS1F_E0_EEclIJRS9_EEEDTclcl1iIXsrNS1_1jISt5tupleIJNS1_1kIS21_EENS29_IS23_EEEEJDpT_EEE1lEEcl1mIS2C_EEEspcl1mIS2D_EEEEDpOS2D_", - "decltype (((i)#1}>, E::F::I& >::P> > E::F::G >, E::F::K>(std::vector > const&, gtl::S::T const&, E::F::W::X const&, E::F::Y const&, gtl::Z const&, std::unordered_map, E::F::I >, E::F::f> >, L::g::h, std::equal_to, std::allocator, E::F::I >, E::F::f> > > > >*, E::F::K const&)::{lambda(Q::R, unsigned long, unsigned long, A::B::c, E::F::I >)#1}::operator()(Q::R, unsigned long, unsigned long, A::B::c, E::F::I >) const::{lambda(E::F::I)#1}&&> >, E::F::I&>::l>)((m)()))(((m)#1}> >)())...)) A::B::C::D >::P> > E::F::G >, E::F::K>(std::vector > const&, gtl::S::T const&, E::F::W::X const&, E::F::Y const&, gtl::Z const&, std::unordered_map, E::F::I >, E::F::f> >, L::g::h, std::equal_to, std::allocator, E::F::I >, E::F::f> > > > >*, E::F::K const&)::{lambda(Q::R, unsigned long, unsigned long, A::B::c, E::F::I >)#1}::operator()(Q::R, unsigned long, unsigned long, A::B::c, E::F::I >) const::{lambda(E::F::I)#1}&&, L::M >::P> > E::F::G >, E::F::K>(std::vector > const&, gtl::S::T const&, E::F::W::X const&, E::F::Y const&, gtl::Z const&, std::unordered_map, E::F::I >, E::F::f> >, L::g::h, std::equal_to, std::allocator, E::F::I >, E::F::f> > > > >*, E::F::K const&)::{lambda(Q::R, unsigned long, unsigned long, A::B::c, E::F::I >)#1}::operator()(Q::R, unsigned long, unsigned long, A::B::c, E::F::I >) const::{lambda(E::F::I)#2}&&>::operator()&>((A::B::C::k<{lambda(E::F::I)#1}>&&)...) &&", - "A::B::C::D >::P> > E::F::G >, E::F::K>(std::vector > const&, gtl::S::T const&, E::F::W::X const&, E::F::Y const&, gtl::Z const&, std::unordered_map, E::F::I >, E::F::f> >, L::g::h, std::equal_to, std::allocator, E::F::I >, E::F::f> > > > >*, E::F::K const&)::{lambda(Q::R, unsigned long, unsigned long, A::B::c, E::F::I >)#1}::operator()(Q::R, unsigned long, unsigned long, A::B::c, E::F::I >) const::{lambda(E::F::I)#1}&&, L::M >::P> > E::F::G >, E::F::K>(std::vector > const&, gtl::S::T const&, E::F::W::X const&, E::F::Y const&, gtl::Z const&, std::unordered_map, E::F::I >, E::F::f> >, L::g::h, std::equal_to, std::allocator, E::F::I >, E::F::f> > > > >*, E::F::K const&)::{lambda(Q::R, unsigned long, unsigned long, A::B::c, E::F::I >)#1}::operator()(Q::R, unsigned long, unsigned long, A::B::c, E::F::I >) const::{lambda(E::F::I)#2}&&>::operator()&>", - "decltype (((i)((m)()))(((m)())...)) A::B::C::D::operator()((A::B::C::k&&)...) &&", - "A::B::C::D::operator()", - }, - { - "_ZcvAna_eE_e", - "operator long double [new long double]", - "operator long double [new long double]", - "operator long double [new long double]", - "operator long double [new long double]", - }, - { - "_ZZ1irFeeEES_S_", - "i(() restrict)::long double (long double)(() restrict) restrict", - "i(long double (long double) restrict)::long double (long double)", - "i(() restrict)::long double (long double)(() restrict) restrict", - "i(long double (long double) restrict)::long double (long double)", - }, - { - "_Z1_VFaeEZS_S_ES_", - "_((() volatile) volatile, signed char (long double)(() volatile) volatile::(() volatile) volatile)", - "_", - "_((() volatile) volatile, signed char (long double)(() volatile) volatile::(() volatile) volatile)", - "_", - }, - { - "_ZdsrFliEZS_GS_EcvS_", - "operator.*(( ( _Imaginary)( _Imaginary) restrict) restrict, long (int)( ( _Imaginary)( _Imaginary) restrict) restrict::operator ( ( _Imaginary)( _Imaginary) restrict) restrict)", - "operator.*", - "operator.*(( ( _Imaginary)( _Imaginary) restrict) restrict, long (int)( ( _Imaginary)( _Imaginary) restrict) restrict::operator ( ( _Imaginary)( _Imaginary) restrict) restrict)", - "operator.*", - }, - } - - for _, test := range tests { - if got, err := ToString(test.input); err != nil { - t.Errorf("demangling %s: unexpected error %v", test.input, err) - } else if got != test.want { - t.Errorf("demangling %s: got %s, want %s", test.input, got, test.want) - } - - if got, err := ToString(test.input, NoParams); err != nil { - t.Errorf("demangling NoParams %s: unexpected error %v", test.input, err) - } else if got != test.wantNoParams { - t.Errorf("demangling NoParams %s: got %s, want %s", test.input, got, test.wantNoParams) - } - - if got, err := ToString(test.input, NoTemplateParams); err != nil { - t.Errorf("demangling NoTemplateParams %s: unexpected error %v", test.input, err) - } else if got != test.wantNoTemplateParams { - t.Errorf("demangling NoTemplateParams %s: got %s, want %s", test.input, got, test.wantNoTemplateParams) - } - - if got, err := ToString(test.input, NoParams, NoTemplateParams); err != nil { - t.Errorf("demangling NoTemplateParams %s: unexpected error %v", test.input, err) - } else if got != test.wantMinimal { - t.Errorf("demangling Minimal %s: got %s, want %s", test.input, got, test.wantMinimal) - } - - // Test Filter also. - if got := Filter(test.input); got != test.want { - t.Errorf("Filter(%s) == %s, want %s", test.input, got, test.want) - } - } -} - -// Test for some failure cases. -func TestFailure(t *testing.T) { - var tests = []struct { - input string - error string - off int - }{ - { - "_Z1FE", - "unparsed characters at end of mangled name", - 4, - }, - { - "_Z1FQ", - "unrecognized type code", - 4, - }, - { - "_ZZSaIL0D", - "expected positive number", - 8, - }, - { - "_ZNKE", - "expected prefix", - 4, - }, - { - "_ZcvT_", - "not in scope of template", - 6, - }, - { - "_Z1AIXsZ1_EE", - "missing argument pack", - 8, - }, - { - "_Z1gIEDTclspilE", - "expected expression", - 15, - }, - { - "_ZNcvZN1ET_IEE", - "after local name", - 14, - }, - { - "_Zv00", - "expected positive number", - 5, - }, - { - "_ZcvT_B2T0", - "template parameter not in scope", - 10, - }, - { - "_ZStcvT_", - "template parameter not in scope", - 8, - }, - { - "_Z1aIeEU1RT_ZcvS1_", - "expected E after local name", - 18, - }, - { - "_ZNcvT_oRIEE", - "template index out of range", - 11, - }, - { - "_ZNcvT_D0IIEE", - "expected prefix", - 13, - }, - { - "_ZcvT_IAoncvT__eE", - "template parameter not in scope", - 17, - }, - } - - for _, test := range tests { - got, err := ToString(test.input) - if err == nil { - t.Errorf("unexpected success for %s: %s", test.input, got) - } else if !strings.Contains(err.Error(), test.error) { - t.Errorf("unexpected error for %s: %v", test.input, err) - } else { - s := err.Error() - i := strings.LastIndex(s, " at ") - if i < 0 { - t.Errorf("missing offset in error for %s: %v", test.input, err) - } else { - off, oerr := strconv.Atoi(s[i+4:]) - if oerr != nil { - t.Errorf("can't parse offset (%s) for %s: %v", s[i+4:], test.input, err) - } else if off != test.off { - t.Errorf("unexpected offset for %s: got %d, want %d", test.input, off, test.off) - } - } - } - - if got := Filter(test.input); got != test.input { - t.Errorf("Filter(%s) == %s, want %s", test.input, got, test.input) - } - } -} diff --git a/src/cmd/vendor/github.com/ianlancetaylor/demangle/expected_test.go b/src/cmd/vendor/github.com/ianlancetaylor/demangle/expected_test.go deleted file mode 100644 index 1dff860ea6..0000000000 --- a/src/cmd/vendor/github.com/ianlancetaylor/demangle/expected_test.go +++ /dev/null @@ -1,183 +0,0 @@ -// 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 demangle - -import ( - "bufio" - "flag" - "fmt" - "os" - "strings" - "testing" -) - -var verbose = flag.Bool("verbose", false, "print each demangle-expected symbol") - -const filename = "testdata/demangle-expected" - -// A list of exceptions from demangle-expected that we do not handle -// the same as the standard demangler. We keep a list of exceptions -// so that we can use an exact copy of the file. These exceptions are -// all based on different handling of a substitution that refers to a -// template parameter. The standard demangler seems to have a bug in -// which template it uses when a reference or rvalue-reference refers -// to a substitution that resolves to a template parameter. -var exceptions = map[string]bool{ - "_ZSt7forwardIRN1x14refobjiteratorINS0_3refINS0_4mime30multipart_section_processorObjIZ15get_body_parserIZZN14mime_processor21make_section_iteratorERKNS2_INS3_10sectionObjENS0_10ptrrefBaseEEEbENKUlvE_clEvEUlSB_bE_ZZNS6_21make_section_iteratorESB_bENKSC_clEvEUlSB_E0_ENS1_INS2_INS0_20outputrefiteratorObjIiEES8_EEEERKSsSB_OT_OT0_EUlmE_NS3_32make_multipart_default_discarderISP_EEEES8_EEEEEOT_RNSt16remove_referenceISW_E4typeE": true, - "_ZN3mdr16in_cached_threadIRZNK4cudr6GPUSet17parallel_for_eachIZN5tns3d20shape_representation7compute7GPUImpl7executeERKNS_1AINS_7ptr_refIKjEELl3ELl3ENS_8c_strideILl1ELl0EEEEERKNS8_INS9_IjEELl4ELl1ESD_EEEUliRKNS1_7ContextERNS7_5StateEE_JSt6vectorISO_SaISO_EEEEEvOT_DpRT0_EUlSP_E_JSt17reference_wrapperISO_EEEENS_12ScopedFutureIDTclfp_spcl7forwardISW_Efp0_EEEEESV_DpOSW_": true, - "_ZNSt9_Any_data9_M_accessIPZN3sel8Selector6SetObjI3FooJPKcMS4_FviEEEEvRT_DpT0_EUlvE_EESA_v": true, - "_ZNSt9_Any_data9_M_accessIPZN13ThreadManager7newTaskIRSt5_BindIFSt7_Mem_fnIM5DiaryFivEEPS5_EEIEEESt6futureINSt9result_ofIFT_DpT0_EE4typeEEOSF_DpOSG_EUlvE_EERSF_v": true, - "_ZNSt9_Any_data9_M_accessIPZN6cereal18polymorphic_detail15getInputBindingINS1_16JSONInputArchiveEEENS1_6detail15InputBindingMapIT_E11SerializersERS7_jEUlPvRSt10unique_ptrIvNS5_12EmptyDeleterIvEEEE0_EESA_v": true, - "_ZNSt9_Any_data9_M_accessIPZ4postISt8functionIFvvEEEvOT_EUlvE_EERS5_v": true, - "_ZNSt9_Any_data9_M_accessIPZN13ThreadManager10futureTaskISt5_BindIFSt7_Mem_fnIM6RunnerFvvEEPS5_EEEEvOT_EUlvE_EERSC_v": true, -} - -// For simplicity, this test reads an exact copy of -// libiberty/testsuite/demangle-expected from GCC. See that file for -// the syntax. We ignore all tests that are not --format=gnu-v3 or -// --format=auto with a string starting with _Z. -func TestExpected(t *testing.T) { - f, err := os.Open(filename) - if err != nil { - t.Fatal(err) - } - scanner := bufio.NewScanner(f) - lineno := 1 - for { - format, got := getOptLine(t, scanner, &lineno) - if !got { - break - } - report := lineno - input := getLine(t, scanner, &lineno) - expect := getLine(t, scanner, &lineno) - - testNoParams := false - skip := false - if len(format) > 0 && format[0] == '-' { - for _, arg := range strings.Fields(format) { - switch arg { - case "--format=gnu-v3": - case "--format=auto": - if !strings.HasPrefix(input, "_Z") { - skip = true - } - case "--no-params": - testNoParams = true - case "--ret-postfix", "--ret-drop": - skip = true - case "--is-v3-ctor", "--is-v3-dtor": - skip = true - default: - if !strings.HasPrefix(arg, "--format=") { - t.Errorf("%s:%d: unrecognized argument %s", filename, report, arg) - } - skip = true - } - } - } - - // The libiberty testsuite passes DMGL_TYPES to - // demangle type names, but that doesn't seem useful - // and we don't support it. - if !strings.HasPrefix(input, "_Z") && !strings.HasPrefix(input, "_GLOBAL_") { - skip = true - } - - var expectNoParams string - if testNoParams { - expectNoParams = getLine(t, scanner, &lineno) - } - - if skip { - continue - } - - oneTest(t, report, input, expect, true) - if testNoParams { - oneTest(t, report, input, expectNoParams, false) - } - } - if err := scanner.Err(); err != nil { - t.Error(err) - } -} - -// oneTest tests one entry from demangle-expected. -func oneTest(t *testing.T, report int, input, expect string, params bool) { - if *verbose { - fmt.Println(input) - } - - exception := exceptions[input] - - var s string - var err error - if params { - s, err = ToString(input) - } else { - s, err = ToString(input, NoParams) - } - if err != nil { - if exception { - t.Logf("%s:%d: ignore expected difference: got %q, expected %q", filename, report, err, expect) - return - } - - if err != ErrNotMangledName { - if input == expect { - return - } - t.Errorf("%s:%d: %v", filename, report, err) - return - } - s = input - } - - if s != expect { - if exception { - t.Logf("%s:%d: ignore expected difference: got %q, expected %q", filename, report, s, expect) - } else { - var a AST - if params { - a, err = ToAST(input) - } else { - a, err = ToAST(input, NoParams) - } - if err != nil { - t.Logf("ToAST error: %v", err) - } else { - t.Logf("\n%#v", a) - } - t.Errorf("%s:%d: params: %t: got %q, expected %q", filename, report, params, s, expect) - } - } else if exception && params { - t.Errorf("%s:%d: unexpected success (input listed in exceptions)", filename, report) - } -} - -// getLine reads a line from demangle-expected. -func getLine(t *testing.T, scanner *bufio.Scanner, lineno *int) string { - s, got := getOptLine(t, scanner, lineno) - if !got { - t.Fatalf("%s:%d: unexpected EOF", filename, *lineno) - } - return s -} - -// getOptLine reads an optional line from demangle-expected, returning -// false at EOF. It skips comment lines and updates *lineno. -func getOptLine(t *testing.T, scanner *bufio.Scanner, lineno *int) (string, bool) { - for { - if !scanner.Scan() { - return "", false - } - *lineno++ - line := scanner.Text() - if !strings.HasPrefix(line, "#") { - return line, true - } - } -} diff --git a/src/cmd/vendor/github.com/ianlancetaylor/demangle/testdata/demangle-expected b/src/cmd/vendor/github.com/ianlancetaylor/demangle/testdata/demangle-expected deleted file mode 100644 index 015454b455..0000000000 --- a/src/cmd/vendor/github.com/ianlancetaylor/demangle/testdata/demangle-expected +++ /dev/null @@ -1,4594 +0,0 @@ -# This file holds test cases for the demangler. -# Each test case looks like this: -# options -# input to be demangled -# expected output -# -# Supported options: -# --format= Sets the demangling style. -# --no-params There are two lines of expected output; the first -# is with DMGL_PARAMS, the second is without it. -# --is-v3-ctor Calls is_gnu_v3_mangled_ctor on input; expected -# output is an integer representing ctor_kind. -# --is-v3-dtor Likewise, but for dtors. -# --ret-postfix Passes the DMGL_RET_POSTFIX option -# -# For compatibility, just in case it matters, the options line may be -# empty, to mean --format=auto. If it doesn't start with --, then it -# may contain only a format name. -# -# A line starting with `#' is ignored. -# However, blank lines in this file are NOT ignored. -# ---format=gnu --no-params -AddAlignment__9ivTSolverUiP12ivInteractorP7ivTGlue -ivTSolver::AddAlignment(unsigned int, ivInteractor *, ivTGlue *) -ivTSolver::AddAlignment -# ---format=gnu --no-params -ArrowheadIntersects__9ArrowLineP9ArrowheadR6BoxObjP7Graphic -ArrowLine::ArrowheadIntersects(Arrowhead *, BoxObj &, Graphic *) -ArrowLine::ArrowheadIntersects -# ---format=gnu --no-params -ArrowheadIntersects__9ArrowLineP9ArrowheadO6BoxObjP7Graphic -ArrowLine::ArrowheadIntersects(Arrowhead *, BoxObj &&, Graphic *) -ArrowLine::ArrowheadIntersects -# ---format=gnu --no-params -AtEnd__13ivRubberGroup -ivRubberGroup::AtEnd(void) -ivRubberGroup::AtEnd -# ---format=gnu --no-params -BgFilter__9ivTSolverP12ivInteractor -ivTSolver::BgFilter(ivInteractor *) -ivTSolver::BgFilter -# ---format=gnu --no-params -Check__6UArrayi -UArray::Check(int) -UArray::Check -# ---format=gnu --no-params -CoreConstDecls__8TextCodeR7ostream -TextCode::CoreConstDecls(ostream &) -TextCode::CoreConstDecls -# ---format=gnu --no-params -CoreConstDecls__8TextCodeO7ostream -TextCode::CoreConstDecls(ostream &&) -TextCode::CoreConstDecls -# ---format=gnu --no-params -Detach__8StateVarP12StateVarView -StateVar::Detach(StateVarView *) -StateVar::Detach -# ---format=gnu --no-params -Done__9ComponentG8Iterator -Component::Done(Iterator) -Component::Done -# ---format=gnu --no-params -Effect__11RelateManipR7ivEvent -RelateManip::Effect(ivEvent &) -RelateManip::Effect -# ---format=gnu --no-params -Effect__11RelateManipO7ivEvent -RelateManip::Effect(ivEvent &&) -RelateManip::Effect -# ---format=gnu --no-params -FindFixed__FRP4CNetP4CNet -FindFixed(CNet *&, CNet *) -FindFixed -# ---format=gnu --no-params -FindFixed__FOP4CNetP4CNet -FindFixed(CNet *&&, CNet *) -FindFixed -# ---format=gnu --no-params -Fix48_abort__FR8twolongs -Fix48_abort(twolongs &) -Fix48_abort -# ---format=gnu --no-params -Fix48_abort__FO8twolongs -Fix48_abort(twolongs &&) -Fix48_abort -# ---format=gnu --no-params -GetBarInfo__15iv2_6_VScrollerP13ivPerspectiveRiT2 -iv2_6_VScroller::GetBarInfo(ivPerspective *, int &, int &) -iv2_6_VScroller::GetBarInfo -# ---format=gnu --no-params -GetBarInfo__15iv2_6_VScrollerP13ivPerspectiveOiT2 -iv2_6_VScroller::GetBarInfo(ivPerspective *, int &&, int &&) -iv2_6_VScroller::GetBarInfo -# ---format=gnu --no-params -GetBgColor__C9ivPainter -ivPainter::GetBgColor(void) const -ivPainter::GetBgColor -# ---format=gnu --no-params -InsertBody__15H_PullrightMenuii -H_PullrightMenu::InsertBody(int, int) -H_PullrightMenu::InsertBody -# ---format=gnu --no-params -InsertCharacter__9TextManipc -TextManip::InsertCharacter(char) -TextManip::InsertCharacter -# ---format=gnu --no-params -InsertToplevel__7ivWorldP12ivInteractorT1 -ivWorld::InsertToplevel(ivInteractor *, ivInteractor *) -ivWorld::InsertToplevel -# ---format=gnu --no-params -InsertToplevel__7ivWorldP12ivInteractorT1iiUi -ivWorld::InsertToplevel(ivInteractor *, ivInteractor *, int, int, unsigned int) -ivWorld::InsertToplevel -# ---format=gnu --no-params -IsAGroup__FP11GraphicViewP11GraphicComp -IsAGroup(GraphicView *, GraphicComp *) -IsAGroup -# ---format=gnu --no-params -IsA__10ButtonCodeUl -ButtonCode::IsA(unsigned long) -ButtonCode::IsA -# ---format=gnu --no-params -ReadName__FR7istreamPc -ReadName(istream &, char *) -ReadName -# ---format=gnu --no-params -Redraw__13StringBrowseriiii -StringBrowser::Redraw(int, int, int, int) -StringBrowser::Redraw -# ---format=gnu --no-params -Rotate__13ivTransformerf -ivTransformer::Rotate(float) -ivTransformer::Rotate -# ---format=gnu --no-params -Rotated__C13ivTransformerf -ivTransformer::Rotated(float) const -ivTransformer::Rotated -# ---format=gnu --no-params -Round__Ff -Round(float) -Round -# ---format=gnu --no-params -SetExport__16MemberSharedNameUi -MemberSharedName::SetExport(unsigned int) -MemberSharedName::SetExport -# ---format=gnu --no-params -Set__14ivControlState13ControlStatusUi -ivControlState::Set(ControlStatus, unsigned int) -ivControlState::Set -# ---format=gnu --no-params -Set__5DFacePcii -DFace::Set(char *, int, int) -DFace::Set -# ---format=gnu --no-params -VConvert__9ivTSolverP12ivInteractorRP8TElementT2 -ivTSolver::VConvert(ivInteractor *, TElement *&, TElement *&) -ivTSolver::VConvert -# ---format=gnu --no-params -VConvert__9ivTSolverP7ivTGlueRP8TElement -ivTSolver::VConvert(ivTGlue *, TElement *&) -ivTSolver::VConvert -# ---format=gnu --no-params -VOrder__9ivTSolverUiRP12ivInteractorT2 -ivTSolver::VOrder(unsigned int, ivInteractor *&, ivInteractor *&) -ivTSolver::VOrder -# ---format=gnu --no-params -_10PageButton$__both -PageButton::__both -PageButton::__both -# ---format=gnu --no-params -_3RNG$singleMantissa -RNG::singleMantissa -RNG::singleMantissa -# ---format=gnu --no-params -_5IComp$_release -IComp::_release -IComp::_release -# ---format=gnu --no-params -_$_10BitmapComp -BitmapComp::~BitmapComp(void) -BitmapComp::~BitmapComp -# ---format=gnu --no-params -_$_9__io_defs -__io_defs::~__io_defs(void) -__io_defs::~__io_defs -# ---format=gnu --no-params -_$_Q23foo3bar -foo::bar::~bar(void) -foo::bar::~bar -# ---format=gnu --no-params -_$_Q33foo3bar4bell -foo::bar::bell::~bell(void) -foo::bar::bell::~bell -# ---format=gnu --no-params -__10ivTelltaleiP7ivGlyph -ivTelltale::ivTelltale(int, ivGlyph *) -ivTelltale::ivTelltale -# ---format=gnu --no-params -__10ivViewportiP12ivInteractorUi -ivViewport::ivViewport(int, ivInteractor *, unsigned int) -ivViewport::ivViewport -# ---format=gnu --no-params -__10ostrstream -ostrstream::ostrstream(void) -ostrstream::ostrstream -# ---format=gnu --no-params -__10ostrstreamPcii -ostrstream::ostrstream(char *, int, int) -ostrstream::ostrstream -# ---format=gnu --no-params -__11BitmapTablei -BitmapTable::BitmapTable(int) -BitmapTable::BitmapTable -# ---format=gnu --no-params -__12ViewportCodeP12ViewportComp -ViewportCode::ViewportCode(ViewportComp *) -ViewportCode::ViewportCode -# ---format=gnu --no-params -__12iv2_6_Borderii -iv2_6_Border::iv2_6_Border(int, int) -iv2_6_Border::iv2_6_Border -# ---format=gnu --no-params -__12ivBreak_Listl -ivBreak_List::ivBreak_List(long) -ivBreak_List::ivBreak_List -# ---format=gnu --no-params -__14iv2_6_MenuItemiP12ivInteractor -iv2_6_MenuItem::iv2_6_MenuItem(int, ivInteractor *) -iv2_6_MenuItem::iv2_6_MenuItem -# ---format=gnu --no-params -__20DisplayList_IteratorR11DisplayList -DisplayList_Iterator::DisplayList_Iterator(DisplayList &) -DisplayList_Iterator::DisplayList_Iterator -# ---format=gnu --no-params -__3fooRT0 -foo::foo(foo &) -foo::foo -# ---format=gnu --no-params -__3fooiN31 -foo::foo(int, int, int, int) -foo::foo -# ---format=gnu --no-params -__3fooiRT0iT2iT2 -foo::foo(int, foo &, int, foo &, int, foo &) -foo::foo -# ---format=gnu --no-params -__6KeyMapPT0 -KeyMap::KeyMap(KeyMap *) -KeyMap::KeyMap -# ---format=gnu --no-params -__8ArrowCmdP6EditorUiUi -ArrowCmd::ArrowCmd(Editor *, unsigned int, unsigned int) -ArrowCmd::ArrowCmd -# ---format=gnu --no-params -__9F_EllipseiiiiP7Graphic -F_Ellipse::F_Ellipse(int, int, int, int, Graphic *) -F_Ellipse::F_Ellipse -# ---format=gnu --no-params -__9FrameDataP9FrameCompi -FrameData::FrameData(FrameComp *, int) -FrameData::FrameData -# ---format=gnu --no-params -__9HVGraphicP9CanvasVarP7Graphic -HVGraphic::HVGraphic(CanvasVar *, Graphic *) -HVGraphic::HVGraphic -# ---format=gnu --no-params -__Q23foo3bar -foo::bar::bar(void) -foo::bar::bar -# ---format=gnu --no-params -__Q33foo3bar4bell -foo::bar::bell::bell(void) -foo::bar::bell::bell -# ---format=gnu --no-params -__aa__3fooRT0 -foo::operator&&(foo &) -foo::operator&& -# ---format=gnu --no-params -__aad__3fooRT0 -foo::operator&=(foo &) -foo::operator&= -# ---format=gnu --no-params -__ad__3fooRT0 -foo::operator&(foo &) -foo::operator& -# ---format=gnu --no-params -__adv__3fooRT0 -foo::operator/=(foo &) -foo::operator/= -# ---format=gnu --no-params -__aer__3fooRT0 -foo::operator^=(foo &) -foo::operator^= -# ---format=gnu --no-params -__als__3fooRT0 -foo::operator<<=(foo &) -foo::operator<<= -# ---format=gnu --no-params -__amd__3fooRT0 -foo::operator%=(foo &) -foo::operator%= -# ---format=gnu --no-params -__ami__3fooRT0 -foo::operator-=(foo &) -foo::operator-= -# ---format=gnu --no-params -__aml__3FixRT0 -Fix::operator*=(Fix &) -Fix::operator*= -# ---format=gnu --no-params -__aml__5Fix16i -Fix16::operator*=(int) -Fix16::operator*= -# ---format=gnu --no-params -__aml__5Fix32RT0 -Fix32::operator*=(Fix32 &) -Fix32::operator*= -# ---format=gnu --no-params -__aor__3fooRT0 -foo::operator|=(foo &) -foo::operator|= -# ---format=gnu --no-params -__apl__3fooRT0 -foo::operator+=(foo &) -foo::operator+= -# ---format=gnu --no-params -__ars__3fooRT0 -foo::operator>>=(foo &) -foo::operator>>= -# ---format=gnu --no-params -__as__3fooRT0 -foo::operator=(foo &) -foo::operator= -# ---format=gnu --no-params -__cl__3fooRT0 -foo::operator()(foo &) -foo::operator() -# ---format=gnu --no-params -__cl__6Normal -Normal::operator()(void) -Normal::operator() -# ---format=gnu --no-params -__cl__6Stringii -String::operator()(int, int) -String::operator() -# ---format=gnu --no-params -__cm__3fooRT0 -foo::operator, (foo &) -foo::operator, -# ---format=gnu --no-params -__co__3foo -foo::operator~(void) -foo::operator~ -# ---format=gnu --no-params -__dl__3fooPv -foo::operator delete(void *) -foo::operator delete -# ---format=gnu --no-params -__dv__3fooRT0 -foo::operator/(foo &) -foo::operator/ -# ---format=gnu --no-params -__eq__3fooRT0 -foo::operator==(foo &) -foo::operator== -# ---format=gnu --no-params -__er__3fooRT0 -foo::operator^(foo &) -foo::operator^ -# ---format=gnu --no-params -__ge__3fooRT0 -foo::operator>=(foo &) -foo::operator>= -# ---format=gnu --no-params -__gt__3fooRT0 -foo::operator>(foo &) -foo::operator> -# ---format=gnu --no-params -__le__3fooRT0 -foo::operator<=(foo &) -foo::operator<= -# ---format=gnu --no-params -__ls__3fooRT0 -foo::operator<<(foo &) -foo::operator<< -# ---format=gnu --no-params -__ls__FR7ostreamPFR3ios_R3ios -operator<<(ostream &, ios &(*)(ios &)) -operator<< -# ---format=gnu --no-params -__ls__FR7ostreamR3Fix -operator<<(ostream &, Fix &) -operator<< -# ---format=gnu --no-params -__lt__3fooRT0 -foo::operator<(foo &) -foo::operator< -# ---format=gnu --no-params -__md__3fooRT0 -foo::operator%(foo &) -foo::operator% -# ---format=gnu --no-params -__mi__3fooRT0 -foo::operator-(foo &) -foo::operator- -# ---format=gnu --no-params -__ml__3fooRT0 -foo::operator*(foo &) -foo::operator* -# ---format=gnu --no-params -__mm__3fooi -foo::operator--(int) -foo::operator-- -# ---format=gnu --no-params -__ne__3fooRT0 -foo::operator!=(foo &) -foo::operator!= -# ---format=gnu --no-params -__nt__3foo -foo::operator!(void) -foo::operator! -# ---format=gnu --no-params -__nw__3fooi -foo::operator new(int) -foo::operator new -# ---format=gnu --no-params -__oo__3fooRT0 -foo::operator||(foo &) -foo::operator|| -# ---format=gnu --no-params -__opPc__3foo -foo::operator char *(void) -foo::operator char * -# ---format=gnu --no-params -__opi__3foo -foo::operator int(void) -foo::operator int -# ---format=gnu --no-params -__or__3fooRT0 -foo::operator|(foo &) -foo::operator| -# ---format=gnu --no-params -__pl__3fooRT0 -foo::operator+(foo &) -foo::operator+ -# ---format=gnu --no-params -__pp__3fooi -foo::operator++(int) -foo::operator++ -# ---format=gnu --no-params -__rf__3foo -foo::operator->(void) -foo::operator-> -# ---format=gnu --no-params -__rm__3fooRT0 -foo::operator->*(foo &) -foo::operator->* -# ---format=gnu --no-params -__rs__3fooRT0 -foo::operator>>(foo &) -foo::operator>> -# ---format=gnu --no-params -_new_Fix__FUs -_new_Fix(unsigned short) -_new_Fix -# ---format=gnu --no-params -_vt.foo -foo virtual table -foo virtual table -# ---format=gnu --no-params -_vt.foo.bar -foo::bar virtual table -foo::bar virtual table -# ---format=gnu --no-params -_vt$foo -foo virtual table -foo virtual table -# ---format=gnu --no-params -_vt$foo$bar -foo::bar virtual table -foo::bar virtual table -# ---format=gnu --no-params -append__7ivGlyphPT0 -ivGlyph::append(ivGlyph *) -ivGlyph::append -# ---format=gnu --no-params -clearok__FP7_win_sti -clearok(_win_st *, int) -clearok -# ---format=gnu --no-params -complexfunc2__FPFPc_i -complexfunc2(int (*)(char *)) -complexfunc2 -# ---format=gnu --no-params -complexfunc3__FPFPFPl_s_i -complexfunc3(int (*)(short (*)(long *))) -complexfunc3 -# ---format=gnu --no-params -complexfunc4__FPFPFPc_s_i -complexfunc4(int (*)(short (*)(char *))) -complexfunc4 -# ---format=gnu --no-params -complexfunc5__FPFPc_PFl_i -complexfunc5(int (*(*)(char *))(long)) -complexfunc5 -# ---format=gnu --no-params -complexfunc6__FPFPi_PFl_i -complexfunc6(int (*(*)(int *))(long)) -complexfunc6 -# ---format=gnu --no-params -complexfunc7__FPFPFPc_i_PFl_i -complexfunc7(int (*(*)(int (*)(char *)))(long)) -complexfunc7 -# ---format=gnu --no-params -foo__FiN30 -foo(int, int, int, int) -foo -# ---format=gnu --no-params -foo__FiR3fooiT1iT1 -foo(int, foo &, int, foo &, int, foo &) -foo -# ---format=gnu --no-params -foo___3barl -bar::foo_(long) -bar::foo_ -# ---format=gnu --no-params -insert__15ivClippingStacklRP8_XRegion -ivClippingStack::insert(long, _XRegion *&) -ivClippingStack::insert -# ---format=gnu --no-params -insert__16ChooserInfo_ListlR11ChooserInfo -ChooserInfo_List::insert(long, ChooserInfo &) -ChooserInfo_List::insert -# ---format=gnu --no-params -insert__17FontFamilyRepListlRP15ivFontFamilyRep -FontFamilyRepList::insert(long, ivFontFamilyRep *&) -FontFamilyRepList::insert -# ---format=gnu --no-params -leaveok__FP7_win_stc -leaveok(_win_st *, char) -leaveok -# ---format=gnu --no-params -left_mover__C7ivMFKitP12ivAdjustableP7ivStyle -ivMFKit::left_mover(ivAdjustable *, ivStyle *) const -ivMFKit::left_mover -# ---format=gnu --no-params -overload1arg__FSc -overload1arg(signed char) -overload1arg -# ---format=gnu --no-params -overload1arg__FUc -overload1arg(unsigned char) -overload1arg -# ---format=gnu --no-params -overload1arg__FUi -overload1arg(unsigned int) -overload1arg -# ---format=gnu --no-params -overload1arg__FUl -overload1arg(unsigned long) -overload1arg -# ---format=gnu --no-params -overload1arg__FUs -overload1arg(unsigned short) -overload1arg -# ---format=gnu --no-params -overload1arg__Fc -overload1arg(char) -overload1arg -# ---format=gnu --no-params -overload1arg__Fd -overload1arg(double) -overload1arg -# ---format=gnu --no-params -overload1arg__Ff -overload1arg(float) -overload1arg -# ---format=gnu --no-params -overload1arg__Fi -overload1arg(int) -overload1arg -# ---format=gnu --no-params -overload1arg__Fl -overload1arg(long) -overload1arg -# ---format=gnu --no-params -overload1arg__Fs -overload1arg(short) -overload1arg -# ---format=gnu --no-params -overload1arg__Fv -overload1arg(void) -overload1arg -# ---format=gnu --no-params -overloadargs__Fi -overloadargs(int) -overloadargs -# ---format=gnu --no-params -overloadargs__Fii -overloadargs(int, int) -overloadargs -# ---format=gnu --no-params -overloadargs__Fiii -overloadargs(int, int, int) -overloadargs -# ---format=gnu --no-params -overloadargs__Fiiii -overloadargs(int, int, int, int) -overloadargs -# ---format=gnu --no-params -overloadargs__Fiiiii -overloadargs(int, int, int, int, int) -overloadargs -# ---format=gnu --no-params -overloadargs__Fiiiiii -overloadargs(int, int, int, int, int, int) -overloadargs -# ---format=gnu --no-params -overloadargs__Fiiiiiii -overloadargs(int, int, int, int, int, int, int) -overloadargs -# ---format=gnu --no-params -overloadargs__Fiiiiiiii -overloadargs(int, int, int, int, int, int, int, int) -overloadargs -# ---format=gnu --no-params -overloadargs__Fiiiiiiiii -overloadargs(int, int, int, int, int, int, int, int, int) -overloadargs -# ---format=gnu --no-params -overloadargs__Fiiiiiiiiii -overloadargs(int, int, int, int, int, int, int, int, int, int) -overloadargs -# ---format=gnu --no-params -overloadargs__Fiiiiiiiiiii -overloadargs(int, int, int, int, int, int, int, int, int, int, int) -overloadargs -# ---format=gnu --no-params -poke__8ivRasterUlUlffff -ivRaster::poke(unsigned long, unsigned long, float, float, float, float) -ivRaster::poke -# ---format=gnu --no-params -polar__Fdd -polar(double, double) -polar -# ---format=gnu --no-params -scale__13ivTransformerff -ivTransformer::scale(float, float) -ivTransformer::scale -# ---format=gnu --no-params -sgetn__7filebufPci -filebuf::sgetn(char *, int) -filebuf::sgetn -# ---format=gnu --no-params -shift__FP5_FrepiT0 -shift(_Frep *, int, _Frep *) -shift -# ---format=gnu --no-params -test__C6BitSeti -BitSet::test(int) const -BitSet::test -# ---format=gnu --no-params -test__C6BitSetii -BitSet::test(int, int) const -BitSet::test -# ---format=gnu --no-params -text_source__8Documentl -Document::text_source(long) -Document::text_source -# ---format=gnu --no-params -variance__6Erlangd -Erlang::variance(double) -Erlang::variance -# ---format=gnu --no-params -view__14DocumentViewerP8ItemViewP11TabularItem -DocumentViewer::view(ItemView *, TabularItem *) -DocumentViewer::view -# ---format=gnu --no-params -xy_extents__11ivExtensionffff -ivExtension::xy_extents(float, float, float, float) -ivExtension::xy_extents -# ---format=gnu --no-params -zero__8osMemoryPvUi -osMemory::zero(void *, unsigned int) -osMemory::zero -# ---format=gnu --no-params -_2T4$N -T4::N -T4::N -# ---format=gnu --no-params -_Q22T42t1$N -T4::t1::N -T4::t1::N -# ---format=gnu --no-params -get__2T1 -T1::get(void) -T1::get -# ---format=gnu --no-params -get__Q22T11a -T1::a::get(void) -T1::a::get -# ---format=gnu --no-params -get__Q32T11a1b -T1::a::b::get(void) -T1::a::b::get -# ---format=gnu --no-params -get__Q42T11a1b1c -T1::a::b::c::get(void) -T1::a::b::c::get -# ---format=gnu --no-params -get__Q52T11a1b1c1d -T1::a::b::c::d::get(void) -T1::a::b::c::d::get -# ---format=gnu --no-params -put__2T1i -T1::put(int) -T1::put -# ---format=gnu --no-params -put__Q22T11ai -T1::a::put(int) -T1::a::put -# ---format=gnu --no-params -put__Q32T11a1bi -T1::a::b::put(int) -T1::a::b::put -# ---format=gnu --no-params -put__Q42T11a1b1ci -T1::a::b::c::put(int) -T1::a::b::c::put -# ---format=gnu --no-params -put__Q52T11a1b1c1di -T1::a::b::c::d::put(int) -T1::a::b::c::d::put -# ---format=gnu --no-params -bar__3fooPv -foo::bar(void *) -foo::bar -# ---format=gnu --no-params -bar__C3fooPv -foo::bar(void *) const -foo::bar -# ---format=gnu --no-params -__eq__3fooRT0 -foo::operator==(foo &) -foo::operator== -# ---format=gnu --no-params -__eq__C3fooR3foo -foo::operator==(foo &) const -foo::operator== -# ---format=gnu --no-params -elem__t6vector1Zdi -vector::elem(int) -vector::elem -# ---format=gnu --no-params -elem__t6vector1Zii -vector::elem(int) -vector::elem -# ---format=gnu --no-params -__t6vector1Zdi -vector::vector(int) -vector::vector -# ---format=gnu --no-params -__t6vector1Zii -vector::vector(int) -vector::vector -# ---format=gnu --no-params -_$_t6vector1Zdi -vector::~vector(int) -vector::~vector -# ---format=gnu --no-params -_$_t6vector1Zii -vector::~vector(int) -vector::~vector -# ---format=gnu --no-params -__nw__t2T11ZcUi -T1::operator new(unsigned int) -T1::operator new -# ---format=gnu --no-params -__nw__t2T11Z1tUi -T1::operator new(unsigned int) -T1::operator new -# ---format=gnu --no-params -__dl__t2T11ZcPv -T1::operator delete(void *) -T1::operator delete -# ---format=gnu --no-params -__dl__t2T11Z1tPv -T1::operator delete(void *) -T1::operator delete -# ---format=gnu --no-params -__t2T11Zci -T1::T1(int) -T1::T1 -# ---format=gnu --no-params -__t2T11Zc -T1::T1(void) -T1::T1 -# ---format=gnu --no-params -__t2T11Z1ti -T1::T1(int) -T1::T1 -# ---format=gnu --no-params -__t2T11Z1t -T1::T1(void) -T1::T1 -# ---format=gnu --no-params -__Q2t4List1Z10VHDLEntity3Pix -List::Pix::Pix(void) -List::Pix::Pix -# ---format=gnu --no-params -__Q2t4List1Z10VHDLEntity3PixPQ2t4List1Z10VHDLEntity7element -List::Pix::Pix(List::element *) -List::Pix::Pix -# ---format=gnu --no-params -__Q2t4List1Z10VHDLEntity3PixRCQ2t4List1Z10VHDLEntity3Pix -List::Pix::Pix(List::Pix const &) -List::Pix::Pix -# ---format=gnu --no-params -__Q2t4List1Z10VHDLEntity3PixOCQ2t4List1Z10VHDLEntity3Pix -List::Pix::Pix(List::Pix const &&) -List::Pix::Pix -# ---format=gnu --no-params -__Q2t4List1Z10VHDLEntity7elementRC10VHDLEntityPT0 -List::element::element(VHDLEntity const &, List::element *) -List::element::element -# ---format=gnu --no-params -__Q2t4List1Z10VHDLEntity7elementOC10VHDLEntityPT0 -List::element::element(VHDLEntity const &&, List::element *) -List::element::element -# ---format=gnu --no-params -__Q2t4List1Z10VHDLEntity7elementRCQ2t4List1Z10VHDLEntity7element -List::element::element(List::element const &) -List::element::element -# ---format=gnu --no-params -__cl__C11VHDLLibraryGt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity -VHDLLibrary::operator()(PixX >) const -VHDLLibrary::operator() -# ---format=gnu --no-params -__cl__Ct4List1Z10VHDLEntityRCQ2t4List1Z10VHDLEntity3Pix -List::operator()(List::Pix const &) const -List::operator() -# ---format=gnu --no-params -__ne__FPvRCQ2t4List1Z10VHDLEntity3Pix -operator!=(void *, List::Pix const &) -operator!= -# ---format=gnu --no-params -__ne__FPvRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity -operator!=(void *, PixX > const &) -operator!= -# ---format=gnu --no-params -__t4List1Z10VHDLEntityRCt4List1Z10VHDLEntity -List::List(List const &) -List::List -# ---format=gnu --no-params -__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity -PixX >::PixX(void) -PixX >::PixX -# ---format=gnu --no-params -__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityP14VHDLLibraryRepGQ2t4List1Z10VHDLEntity3Pix -PixX >::PixX(VHDLLibraryRep *, List::Pix) -PixX >::PixX -# ---format=gnu --no-params -__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity -PixX >::PixX(PixX > const &) -PixX >::PixX -# ---format=gnu --no-params -__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityOCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity -PixX >::PixX(PixX > const &&) -PixX >::PixX -# ---format=gnu --no-params -nextE__C11VHDLLibraryRt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity -VHDLLibrary::nextE(PixX > &) const -VHDLLibrary::nextE -# ---format=gnu --no-params -next__Ct4List1Z10VHDLEntityRQ2t4List1Z10VHDLEntity3Pix -List::next(List::Pix &) const -List::next -# ---format=gnu --no-params -_GLOBAL_$D$set -global destructors keyed to set -global destructors keyed to set -# ---format=gnu --no-params -_GLOBAL_$I$set -global constructors keyed to set -global constructors keyed to set -# ---format=gnu --no-params -__as__t5ListS1ZUiRCt5ListS1ZUi -ListS::operator=(ListS const &) -ListS::operator= -# ---format=gnu --no-params -__cl__Ct5ListS1ZUiRCQ2t5ListS1ZUi3Vix -ListS::operator()(ListS::Vix const &) const -ListS::operator() -# ---format=gnu --no-params -__cl__Ct5SetLS1ZUiRCQ2t5SetLS1ZUi3Vix -SetLS::operator()(SetLS::Vix const &) const -SetLS::operator() -# ---format=gnu --no-params -__t10ListS_link1ZUiRCUiPT0 -ListS_link::ListS_link(unsigned int const &, ListS_link *) -ListS_link::ListS_link -# ---format=gnu --no-params -__t10ListS_link1ZUiRCt10ListS_link1ZUi -ListS_link::ListS_link(ListS_link const &) -ListS_link::ListS_link -# ---format=gnu --no-params -__t5ListS1ZUiRCt5ListS1ZUi -ListS::ListS(ListS const &) -ListS::ListS -# ---format=gnu --no-params -next__Ct5ListS1ZUiRQ2t5ListS1ZUi3Vix -ListS::next(ListS::Vix &) const -ListS::next -# ---format=gnu --no-params -__ne__FPvRCQ2t5SetLS1ZUi3Vix -operator!=(void *, SetLS::Vix const &) -operator!= -# ---format=gnu --no-params -__t8ListElem1Z5LabelRt4List1Z5Label -ListElem
    (A) ---format=gnu-v3 -_Z1hI1AEDTcldtfp_miEET_ -decltype (({parm#1}.(operator-))()) h(A) ---format=gnu-v3 -_Z1fDn -f(decltype(nullptr)) ---format=gnu-v3 -_Z1fIRiEvOT_b -void f(int&, bool) ---format=gnu-v3 -_ZN5aaaaa6bbbbbb5cccccIN23ddddddddddddddddddddddd3eeeENS2_4ffff16ggggggggggggggggENS0_9hhhhhhhhhES6_S6_S6_S6_S6_S6_S6_EE -aaaaa::bbbbbb::ccccc ---format=gnu-v3 -_Z5outerIsEcPFilE -char outer(int (*)(long)) ---format=gnu-v3 -_Z5outerPFsiEl -outer(short (*)(int), long) ---format=gnu-v3 -_Z6outer2IsEPFilES1_ -int (*outer2(int (*)(long)))(long) ---format=gnu-v3 --ret-postfix -_Z5outerIsEcPFilE -outer(int (*)(long))char ---format=gnu-v3 --ret-postfix -_Z5outerPFsiEl -outer(short (*)(int), long) ---format=gnu-v3 --ret-postfix -_Z6outer2IsEPFilES1_ -outer2(int (*)(long))int (*)(long) ---format=gnu-v3 --ret-drop -_Z5outerIsEcPFilE -outer(int (*)(long)) ---format=gnu-v3 --ret-drop -_Z5outerPFsiEl -outer(short (*)(int), long) ---format=gnu-v3 --ret-drop -_Z6outer2IsEPFilES1_ -outer2(int (*)(long)) -# ---format=gnu-v3 --no-params -_ZN1KIXadL_ZN1S1mEiEEE1fEv -K<&S::m>::f() -K<&S::m>::f ---format=gnu-v3 -_ZN1KILi1EXadL_ZN1S1mEiEEE1fEv -K<1, &S::m>::f() -# Here the `(int)' argument list of `S::m' is already removed. ---format=gnu-v3 -_ZN1KILi1EXadL_ZN1S1mEEEE1fEv -K<1, &S::m>::f() -# -# Used to crash -- binutils PR 13030. ---format=gnu-v3 -_ZSt10_ConstructI10CellBorderIS0_EEvPT_DpOT0_ -_ZSt10_ConstructI10CellBorderIS0_EEvPT_DpOT0_ -# A pack expansion is substitutable. ---format=gnu-v3 -_Z1fIJiEiEv1AIJDpT_EET0_S4_ -void f(A, int, int) -# So is decltype. ---format=gnu-v3 -_Z1fIiiEDTcvT__EET0_S2_ -decltype ((int)()) f(int, int) -# And vector. ---format=gnu-v3 -_Z1fDv4_iS_ -f(int __vector(4), int __vector(4)) ---format=gnu-v3 -_Z2f1Ii1AEDTdsfp_fp0_ET0_MS2_T_ -decltype ({parm#1}.*{parm#2}) f1(A, int A::*) ---format=gnu-v3 -_Z2f2IiEDTquL_Z1bEfp_trET_ -decltype (b?{parm#1} : (throw)) f2(int) ---format=gnu-v3 -_Z6check1IiEvP6helperIXsznw_T_EEE -void check1(helper*) ---format=gnu-v3 -_Z6check2IiEvP6helperIXszgsnw_T_piEEE -void check2(helper*) ---format=gnu-v3 -_Z6check3IiEvP6helperIXsznwadL_Z1iE_T_piLi1EEEE -void check3(helper*) ---format=gnu-v3 -_Z6check4IiEvP6helperIXszna_A1_T_EEE -void check4(helper*) ---format=gnu-v3 -_Z6check5IiEvP6helperIXszna_A1_T_piEEE -void check5(helper*) ---format=gnu-v3 -_Z1fIiEDTcmgsdlfp_psfp_EPT_ -decltype ((::delete {parm#1}),(+{parm#1})) f(int*) ---format=gnu-v3 -_Z1fIiEDTcmdafp_psfp_EPT_ -decltype ((delete[] {parm#1}),(+{parm#1})) f(int*) ---format=gnu-v3 -_ZN1AdlEPv -A::operator delete(void*) ---format=gnu-v3 -_Z2f1IiEDTppfp_ET_ -decltype ({parm#1}++) f1(int) ---format=gnu-v3 -_Z2f1IiEDTpp_fp_ET_ -decltype (++{parm#1}) f1(int) ---format=gnu-v3 -_Z2f1IiEDTcl1gfp_ilEEET_ -decltype (g({parm#1}, {})) f1(int) ---format=gnu-v3 -_Z2f1IiEDTnw_T_ilEES0_ -decltype (new int{}) f1(int) ---format=gnu-v3 -_Zli2_wPKc -operator"" _w(char const*) ---format=gnu-v3 -_Z1fIiEDTnw_Dapifp_EET_ -decltype (new auto({parm#1})) f(int) ---format=gnu-v3 -_Z1fIiERDaRKT_S1_ -auto& f(int const&, int) ---format=gnu-v3 -_Z1gILi1EEvR1AIXT_EER1BIXscbT_EE -void g<1>(A<1>&, B(1)>&) ---format=gnu-v3 -_ZNKSt7complexIiE4realB5cxx11Ev -std::complex::real[abi:cxx11]() const -# -# Some more crashes revealed by fuzz-testing: -# Check for NULL pointer when demangling trinary operators ---format=gnu-v3 -_Z1fAv32_f -_Z1fAv32_f -# Do not overflow when decoding identifier length ---format=gnu-v3 -_Z11111111111 -_Z11111111111 -# Check out-of-bounds access when decoding braced initializer list ---format=gnu-v3 -_ZDTtl -_ZDTtl -# Check for NULL pointer when demangling DEMANGLE_COMPONENT_LOCAL_NAME ---format=gnu-v3 -_ZZN1fEEd_lEv -_ZZN1fEEd_lEv -# Handle DEMANGLE_COMPONENT_FIXED_TYPE in d_find_pack ---format=gnu-v3 -_Z1fDpDFT_ -_Z1fDpDFT_ -# Likewise, DEMANGLE_COMPONENT_DEFAULT_ARG ---format=gnu-v3 -_Z1fIDpZ1fEd_E -_Z1fIDpZ1fEd_E -# Likewise, DEMANGLE_COMPONENT_NUMBER ---format=gnu-v3 -_Z1fDpDv1_c -f((char __vector(1))...) -# -# Ada (GNAT) tests. -# -# Simple test. ---format=gnat -yz__qrs -yz.qrs -# Operator ---format=gnat -oper__Oadd -oper."+" -# Overloaded subprogram. ---format=gnat -yz__qrs__2 -yz.qrs -# Nested subprogram. ---format=gnat -yz__qrs__tuv.1661 -yz.qrs.tuv -# Nested and overloaded subprograms. ---format=gnat -yz__qrs__tuv__2_1.1667 -yz.qrs.tuv ---format=gnat -yz__qrs__tuv__2_2.1670 -yz.qrs.tuv ---format=gnat -yz__qrs__tuv__2_3.1674 -yz.qrs.tuv -# Elaborated flag (not demangled) ---format=gnat -x_E - -# Nested package ---format=gnat -x__m1 -x.m1 ---format=gnat -x__m3 -x.m3 ---format=gnat -x__y__m2X -x.y.m2 ---format=gnat -x__y__z__rXb -x.y.z.r -# Child package ---format=gnat -x__y__j -x.y.j -# Library level ---format=gnat -_ada_x__m3 -x.m3 -# Package body elaborator ---format=gnat -p___elabb -p'Elab_Body -# Package spec elaborator ---format=gnat -p___elabs -p'Elab_Spec -# Task body ---format=gnat -p__taskobjTKB -p.taskobj -# Task subprogram ---format=gnat -p__taskobjTK__f1.2330 -p.taskobj.f1 -# Protected types subprograms ---format=gnat -prot__lock__getN -prot.lock.get ---format=gnat -prot__lock__getP -prot.lock.get ---format=gnat -prot__lock__get__sub.2590 -prot.lock.get.sub ---format=gnat -prot__lock__setN -prot.lock.set ---format=gnat -prot__lock__setP -prot.lock.set -# Protected type entries ---format=gnat -prot__lock__update_B7s -prot.lock.update ---format=gnat -prot__lock__update_E6s -prot.lock.update -# Controlled types ---format=gnat -gnat__sockets__sockets_library_controllerDF__2 -gnat.sockets.sockets_library_controller.Finalize ---format=gnat -system__partition_interface__racw_stub_typeDA -system.partition_interface.racw_stub_type.Adjust -# Stream operations ---format=gnat -gnat__wide_wide_string_split__slice_setSR__2 -gnat.wide_wide_string_split.slice_set'Read ---format=gnat -ada__real_time__timing_events__events__listSW__2Xnn -ada.real_time.timing_events.events.list'Write ---format=gnat -system__finalization_root__root_controlledSI -system.finalization_root.root_controlled'Input ---format=gnat -ada__finalization__limited_controlledSO__2 -ada.finalization.limited_controlled'Output -# Tagged types ---format=gnat -ada__synchronous_task_control___size__2 -ada.synchronous_task_control'Size ---format=gnat -ada__real_time__timing_events__events___alignment__2Xnn -ada.real_time.timing_events.events'Alignment ---format=gnat -system__finalization_root___assign__2 -system.finalization_root.":=" -# -# Used to crash the demangler. ---format=gnu-v3 -DFA -DFA -# -# http://sourceware.org/bugzilla/show_bug.cgi?id=11572 ---format=auto -_ZN3Psi7VariantIIcPKcEE5visitIIRZN11VariantTest9TestVisit11test_methodEvEUlS2_E0_RZNS6_11test_methodEvEUlcE1_RZNS6_11test_methodEvEUlNS_4NoneEE_EEENS_13VariantDetail19SelectVisitorResultIIDpT_EE4typeEDpOSG_ -Psi::VariantDetail::SelectVisitorResult::type Psi::Variant::visit((VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&)...) -# -# Clone suffix tests -# ---format=gnu-v3 --no-params -_Z3fo5n.clone.1 -fo5(__int128) [clone .clone.1] -fo5 -# ---format=gnu-v3 --no-params -_Z3fo5n.constprop.2 -fo5(__int128) [clone .constprop.2] -fo5 -# ---format=gnu-v3 --no-params -_Z3fo5n.isra.3 -fo5(__int128) [clone .isra.3] -fo5 -# ---format=gnu-v3 --no-params -_Z3fo5n.part.4 -fo5(__int128) [clone .part.4] -fo5 -# ---format=gnu-v3 --no-params -_Z12to_be_clonediPv.clone.0 -to_be_cloned(int, void*) [clone .clone.0] -to_be_cloned -# ---format=gnu-v3 --no-params -_Z3fooi.1988 -foo(int) [clone .1988] -foo -# ---format=gnu-v3 --no-params -_Z3fooi.part.9.165493.constprop.775.31805 -foo(int) [clone .part.9.165493] [clone .constprop.775.31805] -foo -# ---format=gnu-v3 --no-params -_Z2f1IiEvT_S0_S0_._omp_fn.2 -void f1(int, int, int) [clone ._omp_fn.2] -f1 -# ---format=gnu-v3 --no-params -_Z3fooi._omp_cpyfn.6 -foo(int) [clone ._omp_cpyfn.6] -foo -# ---format=gnu-v3 --no-params -_Z1fIKFvvES0_Evv -void f() -f -# ---format=gnu-v3 -_ZN4modc6parser8sequenceINS_9astParser13LocatedParserINS0_9ParserRefINS2_UlRNS2_16TokenParserInputEE_EEEEEINS0_14OptionalParserINS2_18ListParserTemplateILNS_6tokens5Token4TypeE4EXadL_ZNSD_Ut_13parenthesizedEEEE6ParserINS4_INS0_6ParserIS5_NS_3ast10ExpressionEEEEEEEEENSA_INS4_INS2_22OneOfKeywordsToTParserINSJ_5StyleEEEEEEENS0_14SequenceParserIS5_INS0_18ExactElementParserIS5_EENSA_ISM_EEEEENS0_14RepeatedParserINS4_INS0_15TransformParserINSU_IS5_INS4_INSP_INSJ_10Annotation12RelationshipEEEEESX_EEENS2_UlNS2_3LocES12_ONS_5MaybeISK_EEE19_EEEEELb0EEEEEENSU_INS0_17ExtractParserTypeIT_E9InputTypeEINS0_8MaybeRefIS1F_E4TypeEDpNS1I_IT0_E4TypeEEEEOS1F_DpOS1L_ -modc::parser::ParserRef::Parser::Style> > > >::InputType, modc::parser::MaybeRef&&)#21}>::Type, modc::parser::RepeatedParser::Parser::Style> >::Parser > >::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe&&)#21}> >, false>::Parser > > > >::Type, modc::parser::RepeatedParser::Parser::Style> >::Parser > >::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe&&)#21}> >, false> >::Parser::Style> > > >::Type, modc::parser::RepeatedParser::Parser::Style> >::Parser > >::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe&&)#21}> >, false>, modc::astParser::LocatedParser > > > >::Type, modc::parser::RepeatedParser::Parser::Style> >::Parser > >::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe&&)#21}> >, false>::Parser::Style> >::Parser > >::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe&&)#21}> >, false> >::Type> modc::parser::sequence >, modc::parser::OptionalParser::Parser > > >, modc::astParser::LocatedParser >::Parser::Style> > >, modc::parser::SequenceParser, modc::astParser::LocatedParser > > >, modc::parser::RepeatedParser::Parser::Style> >::Parser > >::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe&&)#21}> >, false> >(modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe&&)#21}&&, (modc::parser::ExtractParserType > >&&)...) ---format=gnu-v3 -_ZNKR1A1hEv -A::h() const & ---format=gnu-v3 -_Z1lM1AKFvvRE -l(void (A::*)() const &) ---format=gnu-v3 -_Z1mIFvvOEEvM1AT_ -void m(void (A::*)() &&) ---format=gnu-v3 -_Z1nIM1AKFvvREEvT_ -void n(void (A::*)() const &) ---format=gnu-v3 -_ZL1fIiEvv -void f() -# https://sourceware.org/bugzilla/show_bug.cgi?id=14963#c3 ---format=gnu-v3 -_ZSt7forwardIRN1x14refobjiteratorINS0_3refINS0_4mime30multipart_section_processorObjIZ15get_body_parserIZZN14mime_processor21make_section_iteratorERKNS2_INS3_10sectionObjENS0_10ptrrefBaseEEEbENKUlvE_clEvEUlSB_bE_ZZNS6_21make_section_iteratorESB_bENKSC_clEvEUlSB_E0_ENS1_INS2_INS0_20outputrefiteratorObjIiEES8_EEEERKSsSB_OT_OT0_EUlmE_NS3_32make_multipart_default_discarderISP_EEEES8_EEEEEOT_RNSt16remove_referenceISW_E4typeE -x::refobjiterator, x::ptrrefBase> > get_body_parser const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref const&, bool)#1}, mime_processor::make_section_iterator(x::ref const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref const&)#2}>(std::string const&, x::ref const&, mime_processor::make_section_iterator(x::ref const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref const&, bool)#1}&&, mime_processor::make_section_iterator(x::ref const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref const&)#2}&&)::{lambda(unsigned long)#1}, x::mime::make_multipart_default_discarder const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref const&, bool)#1}&&> >, x::ptrrefBase> >& std::forward, x::ptrrefBase> > get_body_parser const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref const&, bool)#1}, mime_processor::make_section_iterator(x::ref const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref const&)#2}>(std::string const&, x::ref const&, mime_processor::make_section_iterator(x::ref const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref const&, bool)#1}&&, mime_processor::make_section_iterator(x::ref const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref const&)#2}&&)::{lambda(unsigned long)#1}, x::mime::make_multipart_default_discarder const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref const&, bool)#1}&&> >, x::ptrrefBase> >&>(std::remove_reference, x::ptrrefBase> > get_body_parser const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref const&, bool)#1}, mime_processor::make_section_iterator(x::ref const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref const&)#2}>(std::string const&, x::ref const&, mime_processor::make_section_iterator(x::ref const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref const&, bool)#1}&&, mime_processor::make_section_iterator(x::ref const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref const&)#2}&&)::{lambda(unsigned long)#1}, x::mime::make_multipart_default_discarder const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref const&, bool)#1}&&> > >::type&) -# ---format=gnu-v3 --no-params -_ZNK7strings8internal8SplitterINS_9delimiter5AnyOfENS_9SkipEmptyEEcvT_ISt6vectorI12basic_stringIcSt11char_traitsIcESaIcEESaISD_EEvEEv -strings::internal::Splitter::operator std::vector, std::allocator >, std::allocator, std::allocator > > >, std::allocator >, std::allocator, std::allocator > > >, void>() const -strings::internal::Splitter::operator std::vector, std::allocator >, std::allocator, std::allocator > > >, std::allocator >, std::allocator, std::allocator > > >, void> -# ---format=gnu-v3 --no-params -_ZN1AcvT_I1CEEv -A::operator C() -A::operator C -# ---format=gnu-v3 --no-params -_ZN1AcvPT_I1CEEv -A::operator C*() -A::operator C* -# ---format=gnu-v3 --no-params -_ZN1AcvT_IiEI1CEEv -A::operator C() -A::operator C -# https://sourceware.org/bugzilla/show_bug.cgi?id=14963#c16 ---format=gnu-v3 -_ZN3mdr16in_cached_threadIRZNK4cudr6GPUSet17parallel_for_eachIZN5tns3d20shape_representation7compute7GPUImpl7executeERKNS_1AINS_7ptr_refIKjEELl3ELl3ENS_8c_strideILl1ELl0EEEEERKNS8_INS9_IjEELl4ELl1ESD_EEEUliRKNS1_7ContextERNS7_5StateEE_JSt6vectorISO_SaISO_EEEEEvOT_DpRT0_EUlSP_E_JSt17reference_wrapperISO_EEEENS_12ScopedFutureIDTclfp_spcl7forwardISW_Efp0_EEEEESV_DpOSW_ -mdr::ScopedFuture, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}, std::vector > >(tns3d::shape_representation::compute::GPUImpl::execute(mdr::A, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}&&, std::vector >&) const::{lambda(tns3d::shape_representation::compute::GPUImpl::State&)#1}&>)({parm#2}))...))> mdr::in_cached_thread, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}, std::vector > >(void cudr::GPUSet::parallel_for_each, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}, std::vector > >(tns3d::shape_representation::compute::GPUImpl::execute(mdr::A, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}&&, std::vector >&) const::{lambda(tns3d::shape_representation::compute::GPUImpl::State&)#1}&, std::vector >&) const::{lambda(tns3d::shape_representation::compute::GPUImpl::State&)#1}&, std::reference_wrapper >(void cudr::GPUSet::parallel_for_each, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}, std::vector > >(tns3d::shape_representation::compute::GPUImpl::execute(mdr::A, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}&&, std::vector >&) const::{lambda(tns3d::shape_representation::compute::GPUImpl::State&)#1}&, (void cudr::GPUSet::parallel_for_each, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}, std::vector > >(tns3d::shape_representation::compute::GPUImpl::execute(mdr::A, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}&&, std::vector >&) const::{lambda(tns3d::shape_representation::compute::GPUImpl::State&)#1}&&&)...) -# https://sourceware.org/bugzilla/show_bug.cgi?id=14963#c18 ---format=gnu-v3 -_ZNSt9_Any_data9_M_accessIPZN13ThreadManager10futureTaskISt5_BindIFSt7_Mem_fnIM6RunnerFvvEEPS5_EEEEvOT_EUlvE_EERSC_v -void ThreadManager::futureTask (Runner*)> >(std::_Bind (Runner*)>&&)::{lambda()#1}*& std::_Any_data::_M_access (Runner*)> >(void ThreadManager::futureTask (Runner*)> >(std::_Bind (Runner*)>&&)::{lambda()#1}*&&)::{lambda()#1}*>() -# https://sourceware.org/bugzilla/show_bug.cgi?id=14963#c24 -# aka https://sourceware.org/bugzilla/show_bug.cgi?id=16593 ---format=gnu-v3 -_ZNSt9_Any_data9_M_accessIPZN3sel8Selector6SetObjI3FooJPKcMS4_FviEEEEvRT_DpT0_EUlvE_EESA_v -void sel::Selector::SetObj(Foo&, char const*, void (Foo::*)(int))::{lambda()#1}*& std::_Any_data::_M_access(void sel::Selector::SetObj(Foo&, char const*, void (Foo::*)(int))::{lambda()#1}*&, char const*, void (Foo::*)(int))::{lambda()#1}*>() -# https://sourceware.org/bugzilla/show_bug.cgi?id=16752#c1 ---format=gnu-v3 -_ZNSt9_Any_data9_M_accessIPZN13ThreadManager7newTaskIRSt5_BindIFSt7_Mem_fnIM5DiaryFivEEPS5_EEIEEESt6futureINSt9result_ofIFT_DpT0_EE4typeEEOSF_DpOSG_EUlvE_EERSF_v -std::future (Diary*)>& ()>::type> ThreadManager::newTask (Diary*)>&>(std::_Bind (Diary*)>&)::{lambda()#1}*& std::_Any_data::_M_access (Diary*)>& ()>::type> ThreadManager::newTask (Diary*)>&>(std::future (Diary*)>& ()>::type> ThreadManager::newTask (Diary*)>&>(std::_Bind (Diary*)>&)::{lambda()#1}*&&)::{lambda()#1}*>() -# https://sourceware.org/bugzilla/show_bug.cgi?id=16752#c6 ---format=gnu-v3 -_ZNSt9_Any_data9_M_accessIPZN6cereal18polymorphic_detail15getInputBindingINS1_16JSONInputArchiveEEENS1_6detail15InputBindingMapIT_E11SerializersERS7_jEUlPvRSt10unique_ptrIvNS5_12EmptyDeleterIvEEEE0_EESA_v -cereal::detail::InputBindingMap::Serializers cereal::polymorphic_detail::getInputBinding(cereal::JSONInputArchive&, unsigned int)::{lambda(void*, std::unique_ptr >&)#2}*& std::_Any_data::_M_access::Serializers cereal::polymorphic_detail::getInputBinding(cereal::detail::InputBindingMap::Serializers cereal::polymorphic_detail::getInputBinding(cereal::JSONInputArchive&, unsigned int)::{lambda(void*, std::unique_ptr >&)#2}*&, unsigned int)::{lambda(void*, std::unique_ptr >&)#2}*>() -# https://sourceware.org/bugzilla/show_bug.cgi?id=16845#c2 ---format=gnu-v3 -_ZNSt9_Any_data9_M_accessIPZ4postISt8functionIFvvEEEvOT_EUlvE_EERS5_v -void post >(std::function&&)::{lambda()#1}*& std::_Any_data::_M_access >(void post >(std::function&&)::{lambda()#1}*&&)::{lambda()#1}*>() -# ---format=auto --no-params -_Z3xxxDFyuVb -xxx(unsigned long long _Fract, bool volatile) -xxx -# https://sourceware.org/bugzilla/show_bug.cgi?id=16817 ---format=auto --no-params -_QueueNotification_QueueController__$4PPPPPPPM_A_INotice___Z -_QueueNotification_QueueController__$4PPPPPPPM_A_INotice___Z -_QueueNotification_QueueController__$4PPPPPPPM_A_INotice___Z ---format=gnu-v3 -_Z1fSsB3fooS_ -f(std::string[abi:foo], std::string[abi:foo]) ---format=gnu-v3 -_Z18IndirectExternCallIPU7stdcallU7regparmILi3EEFviiEiEvT_T0_S3_ -void IndirectExternCall stdcall*)(int, int), int>(void ( regparm<3> stdcall*)(int, int), int, void ( regparm<3> stdcall*)(int, int)) -# -# ABI tags used to confuse the constructor name calculation. ---format=gnu-v3 --no-params -_ZNSt8ios_base7failureB5cxx11C1EPKcRKSt10error_code -std::ios_base::failure[abi:cxx11]::failure(char const*, std::error_code const&) -std::ios_base::failure[abi:cxx11]::failure ---format=gnu-v3 -_Z1fPDxFvvES0_ -f(void (*)() transaction_safe, void (*)() transaction_safe) -# -# These two are from gcc PR61321, and gcc PR61233 / gdb PR16957 -# ---format=gnu-v3 -_Z13function_tempIiEv1AIXszcvT_Li999EEE -void function_temp(A) -# ---format=gnu-v3 -_Z7ZipWithI7QStringS0_5QListZN4oral6detail16AdaptCreateTableI7AccountEES0_RKNS3_16CachedFieldsDataEEUlRKS0_SA_E_ET1_IDTclfp1_cvT__EcvT0__EEEERKT1_ISC_ERKT1_ISD_ET2_ -QList ZipWith(oral::detail::CachedFieldsData const&)::{lambda(QString const&, QString const&)#1}>(QList(oral::detail::CachedFieldsData const&)::{lambda(QString const&, QString const&)#1}> const&, QList const&, QString oral::detail::AdaptCreateTable(oral::detail::CachedFieldsData const&)::{lambda(QString const&, QString const&)#1}) -# -# These three are symbols generated by g++'s testsuite, which triggered the same bug as above. ---format=gnu-v3 -_Z14int_if_addableI1YERiP1AIXszpldecvPT_Li0EdecvS4_Li0EEE -int& int_if_addable(A*) -# ---format=gnu-v3 -_Z3bazIiEvP1AIXszcl3foocvT__ELCf00000000_00000000EEEE -void baz(A*) -# ---format=gnu-v3 -_Z3fooI1FEN1XIXszdtcl1PclcvT__EEE5arrayEE4TypeEv -X::Type foo() - -_Z1fIJidEEv1AIXsZT_EE -void f(A<2>) - -_ZN1A1fIJiiEiJiiiEEEvRAsPDpT_T0_DpT1_E_iS3_S5_ -void A::f(int (&) [6], int, int, int, int) - -_Z10unary_leftIJLi1ELi2ELi3EEEv1AIXflplT_EE -void unary_left<1, 2, 3>(A<(...+(1, 2, 3))>) - -_Z11unary_rightIJLi1ELi2ELi3EEEv1AIXfrplT_EE -void unary_right<1, 2, 3>(A<((1, 2, 3)+...)>) - -_Z11binary_leftIJLi1ELi2ELi3EEEv1AIXfLplLi42ET_EE -void binary_left<1, 2, 3>(A<((42)+...+(1, 2, 3))>) - -_Z12binary_rightIJLi1ELi2ELi3EEEv1AIXfRplT_Li42EEE -void binary_right<1, 2, 3>(A<((1, 2, 3)+...+(42))>) -# -# Tests a use-after-free problem PR70481 - -_Q.__0 -::Q.(void) -# -# Tests a use-after-free problem PR70481 - -_Q10-__9cafebabe. -cafebabe.::-(void) -# -# Tests integer overflow problem PR70492 - -__vt_90000000000cafebabe -__vt_90000000000cafebabe -# -# Tests write access violation PR70498 - -_Z80800000000000000000000 -_Z80800000000000000000000 -# -# Tests write access violation PR70926 - -0__Ot2m02R5T0000500000 -0__Ot2m02R5T0000500000 -# - -0__GT50000000000_ -0__GT50000000000_ -# - -__t2m05B500000000000000000_ -__t2m05B500000000000000000_ -# -# Tests stack overflow PR71696 - -__10%0__S4_0T0T0 -%0<>::%0(%0<>) diff --git a/src/cmd/vendor/golang.org/x/arch/AUTHORS b/src/cmd/vendor/golang.org/x/arch/AUTHORS new file mode 100644 index 0000000000..2b00ddba0d --- /dev/null +++ b/src/cmd/vendor/golang.org/x/arch/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at https://tip.golang.org/AUTHORS. diff --git a/src/cmd/vendor/golang.org/x/arch/CONTRIBUTORS b/src/cmd/vendor/golang.org/x/arch/CONTRIBUTORS new file mode 100644 index 0000000000..1fbd3e976f --- /dev/null +++ b/src/cmd/vendor/golang.org/x/arch/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at https://tip.golang.org/CONTRIBUTORS. diff --git a/src/cmd/vendor/golang.org/x/arch/LICENSE b/src/cmd/vendor/golang.org/x/arch/LICENSE new file mode 100644 index 0000000000..d29b37261f --- /dev/null +++ b/src/cmd/vendor/golang.org/x/arch/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2015 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/src/cmd/vendor/golang.org/x/arch/PATENTS b/src/cmd/vendor/golang.org/x/arch/PATENTS new file mode 100644 index 0000000000..733099041f --- /dev/null +++ b/src/cmd/vendor/golang.org/x/arch/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/src/cmd/vendor/golang.org/x/arch/arm/armasm/decode_test.go b/src/cmd/vendor/golang.org/x/arch/arm/armasm/decode_test.go deleted file mode 100644 index e2d9127348..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/arm/armasm/decode_test.go +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2014 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 armasm - -import ( - "encoding/hex" - "io/ioutil" - "strconv" - "strings" - "testing" -) - -func TestDecode(t *testing.T) { - data, err := ioutil.ReadFile("testdata/decode.txt") - if err != nil { - t.Fatal(err) - } - all := string(data) - for strings.Contains(all, "\t\t") { - all = strings.Replace(all, "\t\t", "\t", -1) - } - for _, line := range strings.Split(all, "\n") { - line = strings.TrimSpace(line) - if line == "" || strings.HasPrefix(line, "#") { - continue - } - f := strings.SplitN(line, "\t", 4) - i := strings.Index(f[0], "|") - if i < 0 { - t.Errorf("parsing %q: missing | separator", f[0]) - continue - } - if i%2 != 0 { - t.Errorf("parsing %q: misaligned | separator", f[0]) - } - size := i / 2 - code, err := hex.DecodeString(f[0][:i] + f[0][i+1:]) - if err != nil { - t.Errorf("parsing %q: %v", f[0], err) - continue - } - mode, err := strconv.Atoi(f[1]) - if err != nil { - t.Errorf("invalid mode %q in: %s", f[1], line) - continue - } - syntax, asm := f[2], f[3] - inst, err := Decode(code, Mode(mode)) - var out string - if err != nil { - out = "error: " + err.Error() - } else { - switch syntax { - case "gnu": - out = GNUSyntax(inst) - case "plan9": // [sic] - out = GoSyntax(inst, 0, nil, nil) - default: - t.Errorf("unknown syntax %q", syntax) - continue - } - } - if out != asm || inst.Len != size { - t.Errorf("Decode(%s) [%s] = %s, %d, want %s, %d", f[0], syntax, out, inst.Len, asm, size) - } - } -} diff --git a/src/cmd/vendor/golang.org/x/arch/arm/armasm/ext_test.go b/src/cmd/vendor/golang.org/x/arch/arm/armasm/ext_test.go deleted file mode 100644 index f0758625f9..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/arm/armasm/ext_test.go +++ /dev/null @@ -1,615 +0,0 @@ -// Copyright 2014 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. - -// Support for testing against external disassembler program. -// Copied and simplified from ../../x86/x86asm/ext_test.go. - -package armasm - -import ( - "bufio" - "bytes" - "encoding/hex" - "flag" - "fmt" - "io" - "io/ioutil" - "log" - "math/rand" - "os" - "os/exec" - "regexp" - "runtime" - "strings" - "testing" - "time" -) - -var ( - printTests = flag.Bool("printtests", false, "print test cases that exercise new code paths") - dumpTest = flag.Bool("dump", false, "dump all encodings") - mismatch = flag.Bool("mismatch", false, "log allowed mismatches") - longTest = flag.Bool("long", false, "long test") - keep = flag.Bool("keep", false, "keep object files around") - debug = false -) - -// An ExtInst represents a single decoded instruction parsed -// from an external disassembler's output. -type ExtInst struct { - addr uint32 - enc [4]byte - nenc int - text string -} - -func (r ExtInst) String() string { - return fmt.Sprintf("%#x: % x: %s", r.addr, r.enc, r.text) -} - -// An ExtDis is a connection between an external disassembler and a test. -type ExtDis struct { - Arch Mode - Dec chan ExtInst - File *os.File - Size int - KeepFile bool - Cmd *exec.Cmd -} - -// Run runs the given command - the external disassembler - and returns -// a buffered reader of its standard output. -func (ext *ExtDis) Run(cmd ...string) (*bufio.Reader, error) { - if *keep { - log.Printf("%s\n", strings.Join(cmd, " ")) - } - ext.Cmd = exec.Command(cmd[0], cmd[1:]...) - out, err := ext.Cmd.StdoutPipe() - if err != nil { - return nil, fmt.Errorf("stdoutpipe: %v", err) - } - if err := ext.Cmd.Start(); err != nil { - return nil, fmt.Errorf("exec: %v", err) - } - - b := bufio.NewReaderSize(out, 1<<20) - return b, nil -} - -// Wait waits for the command started with Run to exit. -func (ext *ExtDis) Wait() error { - return ext.Cmd.Wait() -} - -// testExtDis tests a set of byte sequences against an external disassembler. -// The disassembler is expected to produce the given syntax and be run -// in the given architecture mode (16, 32, or 64-bit). -// The extdis function must start the external disassembler -// and then parse its output, sending the parsed instructions on ext.Dec. -// The generate function calls its argument f once for each byte sequence -// to be tested. The generate function itself will be called twice, and it must -// make the same sequence of calls to f each time. -// When a disassembly does not match the internal decoding, -// allowedMismatch determines whether this mismatch should be -// allowed, or else considered an error. -func testExtDis( - t *testing.T, - syntax string, - arch Mode, - extdis func(ext *ExtDis) error, - generate func(f func([]byte)), - allowedMismatch func(text string, size int, inst *Inst, dec ExtInst) bool, -) { - start := time.Now() - ext := &ExtDis{ - Dec: make(chan ExtInst), - Arch: arch, - } - errc := make(chan error) - - // First pass: write instructions to input file for external disassembler. - file, f, size, err := writeInst(generate) - if err != nil { - t.Fatal(err) - } - ext.Size = size - ext.File = f - defer func() { - f.Close() - if !*keep { - os.Remove(file) - } - }() - - // Second pass: compare disassembly against our decodings. - var ( - totalTests = 0 - totalSkips = 0 - totalErrors = 0 - - errors = make([]string, 0, 100) // sampled errors, at most cap - ) - go func() { - errc <- extdis(ext) - }() - generate(func(enc []byte) { - dec, ok := <-ext.Dec - if !ok { - t.Errorf("decoding stream ended early") - return - } - inst, text := disasm(syntax, arch, pad(enc)) - totalTests++ - if *dumpTest { - fmt.Printf("%x -> %s [%d]\n", enc[:len(enc)], dec.text, dec.nenc) - } - if text != dec.text || inst.Len != dec.nenc { - suffix := "" - if allowedMismatch(text, size, &inst, dec) { - totalSkips++ - if !*mismatch { - return - } - suffix += " (allowed mismatch)" - } - totalErrors++ - if len(errors) >= cap(errors) { - j := rand.Intn(totalErrors) - if j >= cap(errors) { - return - } - errors = append(errors[:j], errors[j+1:]...) - } - errors = append(errors, fmt.Sprintf("decode(%x) = %q, %d, want %q, %d%s", enc, text, inst.Len, dec.text, dec.nenc, suffix)) - } - }) - - if *mismatch { - totalErrors -= totalSkips - } - - for _, b := range errors { - t.Log(b) - } - - if totalErrors > 0 { - t.Fail() - } - t.Logf("%d test cases, %d expected mismatches, %d failures; %.0f cases/second", totalTests, totalSkips, totalErrors, float64(totalTests)/time.Since(start).Seconds()) - - if err := <-errc; err != nil { - t.Fatalf("external disassembler: %v", err) - } - -} - -const start = 0x8000 // start address of text - -// writeInst writes the generated byte sequences to a new file -// starting at offset start. That file is intended to be the input to -// the external disassembler. -func writeInst(generate func(func([]byte))) (file string, f *os.File, size int, err error) { - f, err = ioutil.TempFile("", "armasm") - if err != nil { - return - } - - file = f.Name() - - f.Seek(start, io.SeekStart) - w := bufio.NewWriter(f) - defer w.Flush() - size = 0 - generate(func(x []byte) { - if len(x) > 4 { - x = x[:4] - } - if debug { - fmt.Printf("%#x: %x%x\n", start+size, x, zeros[len(x):]) - } - w.Write(x) - w.Write(zeros[len(x):]) - size += len(zeros) - }) - return file, f, size, nil -} - -var zeros = []byte{0, 0, 0, 0} - -// pad pads the code sequence with pops. -func pad(enc []byte) []byte { - if len(enc) < 4 { - enc = append(enc[:len(enc):len(enc)], zeros[:4-len(enc)]...) - } - return enc -} - -// disasm returns the decoded instruction and text -// for the given source bytes, using the given syntax and mode. -func disasm(syntax string, mode Mode, src []byte) (inst Inst, text string) { - // If printTests is set, we record the coverage value - // before and after, and we write out the inputs for which - // coverage went up, in the format expected in testdata/decode.text. - // This produces a fairly small set of test cases that exercise nearly - // all the code. - var cover float64 - if *printTests { - cover -= coverage() - } - - inst, err := Decode(src, mode) - if err != nil { - text = "error: " + err.Error() - } else { - text = inst.String() - switch syntax { - //case "arm": - // text = ARMSyntax(inst) - case "gnu": - text = GNUSyntax(inst) - //case "plan9": // [sic] - // text = GoSyntax(inst, 0, nil) - default: - text = "error: unknown syntax " + syntax - } - } - - if *printTests { - cover += coverage() - if cover > 0 { - max := len(src) - if max > 4 && inst.Len <= 4 { - max = 4 - } - fmt.Printf("%x|%x\t%d\t%s\t%s\n", src[:inst.Len], src[inst.Len:max], mode, syntax, text) - } - } - - return -} - -// coverage returns a floating point number denoting the -// test coverage until now. The number increases when new code paths are exercised, -// both in the Go program and in the decoder byte code. -func coverage() float64 { - /* - testing.Coverage is not in the main distribution. - The implementation, which must go in package testing, is: - - // Coverage reports the current code coverage as a fraction in the range [0, 1]. - func Coverage() float64 { - var n, d int64 - for _, counters := range cover.Counters { - for _, c := range counters { - if c > 0 { - n++ - } - d++ - } - } - if d == 0 { - return 0 - } - return float64(n) / float64(d) - } - */ - - var f float64 - f += testing.Coverage() - f += decodeCoverage() - return f -} - -func decodeCoverage() float64 { - n := 0 - for _, t := range decoderCover { - if t { - n++ - } - } - return float64(1+n) / float64(1+len(decoderCover)) -} - -// Helpers for writing disassembler output parsers. - -// hasPrefix reports whether any of the space-separated words in the text s -// begins with any of the given prefixes. -func hasPrefix(s string, prefixes ...string) bool { - for _, prefix := range prefixes { - for s := s; s != ""; { - if strings.HasPrefix(s, prefix) { - return true - } - i := strings.Index(s, " ") - if i < 0 { - break - } - s = s[i+1:] - } - } - return false -} - -// contains reports whether the text s contains any of the given substrings. -func contains(s string, substrings ...string) bool { - for _, sub := range substrings { - if strings.Contains(s, sub) { - return true - } - } - return false -} - -// isHex reports whether b is a hexadecimal character (0-9A-Fa-f). -func isHex(b byte) bool { return b == '0' || unhex[b] > 0 } - -// parseHex parses the hexadecimal byte dump in hex, -// appending the parsed bytes to raw and returning the updated slice. -// The returned bool signals whether any invalid hex was found. -// Spaces and tabs between bytes are okay but any other non-hex is not. -func parseHex(hex []byte, raw []byte) ([]byte, bool) { - hex = trimSpace(hex) - for j := 0; j < len(hex); { - for hex[j] == ' ' || hex[j] == '\t' { - j++ - } - if j >= len(hex) { - break - } - if j+2 > len(hex) || !isHex(hex[j]) || !isHex(hex[j+1]) { - return nil, false - } - raw = append(raw, unhex[hex[j]]<<4|unhex[hex[j+1]]) - j += 2 - } - return raw, true -} - -var unhex = [256]byte{ - '0': 0, - '1': 1, - '2': 2, - '3': 3, - '4': 4, - '5': 5, - '6': 6, - '7': 7, - '8': 8, - '9': 9, - 'A': 10, - 'B': 11, - 'C': 12, - 'D': 13, - 'E': 14, - 'F': 15, - 'a': 10, - 'b': 11, - 'c': 12, - 'd': 13, - 'e': 14, - 'f': 15, -} - -// index is like bytes.Index(s, []byte(t)) but avoids the allocation. -func index(s []byte, t string) int { - i := 0 - for { - j := bytes.IndexByte(s[i:], t[0]) - if j < 0 { - return -1 - } - i = i + j - if i+len(t) > len(s) { - return -1 - } - for k := 1; k < len(t); k++ { - if s[i+k] != t[k] { - goto nomatch - } - } - return i - nomatch: - i++ - } -} - -// fixSpace rewrites runs of spaces, tabs, and newline characters into single spaces in s. -// If s must be rewritten, it is rewritten in place. -func fixSpace(s []byte) []byte { - s = trimSpace(s) - for i := 0; i < len(s); i++ { - if s[i] == '\t' || s[i] == '\n' || i > 0 && s[i] == ' ' && s[i-1] == ' ' { - goto Fix - } - } - return s - -Fix: - b := s - w := 0 - for i := 0; i < len(s); i++ { - c := s[i] - if c == '\t' || c == '\n' { - c = ' ' - } - if c == ' ' && w > 0 && b[w-1] == ' ' { - continue - } - b[w] = c - w++ - } - if w > 0 && b[w-1] == ' ' { - w-- - } - return b[:w] -} - -// trimSpace trims leading and trailing space from s, returning a subslice of s. -func trimSpace(s []byte) []byte { - j := len(s) - for j > 0 && (s[j-1] == ' ' || s[j-1] == '\t' || s[j-1] == '\n') { - j-- - } - i := 0 - for i < j && (s[i] == ' ' || s[i] == '\t') { - i++ - } - return s[i:j] -} - -// pcrel matches instructions using relative addressing mode. -var ( - pcrel = regexp.MustCompile(`^((?:.* )?(?:b|bl)x?(?:eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le)?) 0x([0-9a-f]+)$`) -) - -// Generators. -// -// The test cases are described as functions that invoke a callback repeatedly, -// with a new input sequence each time. These helpers make writing those -// a little easier. - -// condCases generates conditional instructions. -func condCases(t *testing.T) func(func([]byte)) { - return func(try func([]byte)) { - // All the strides are relatively prime to 2 and therefore to 2²â¸, - // so we will not repeat any instructions until we have tried all 2²â¸. - // Using a stride other than 1 is meant to visit the instructions in a - // pseudorandom order, which gives better variety in the set of - // test cases chosen by -printtests. - stride := uint32(10007) - n := 1 << 28 / 7 - if testing.Short() { - stride = 100003 - n = 1 << 28 / 1001 - } else if *longTest { - stride = 200000033 - n = 1 << 28 - } - x := uint32(0) - for i := 0; i < n; i++ { - enc := (x%15)<<28 | x&(1<<28-1) - try([]byte{byte(enc), byte(enc >> 8), byte(enc >> 16), byte(enc >> 24)}) - x += stride - } - } -} - -// uncondCases generates unconditional instructions. -func uncondCases(t *testing.T) func(func([]byte)) { - return func(try func([]byte)) { - condCases(t)(func(enc []byte) { - enc[3] |= 0xF0 - try(enc) - }) - } -} - -func countBits(x uint32) int { - n := 0 - for ; x != 0; x >>= 1 { - n += int(x & 1) - } - return n -} - -func expandBits(x, m uint32) uint32 { - var out uint32 - for i := uint(0); i < 32; i++ { - out >>= 1 - if m&1 != 0 { - out |= (x & 1) << 31 - x >>= 1 - } - m >>= 1 - } - return out -} - -func tryCondMask(mask, val uint32, try func([]byte)) { - n := countBits(^mask) - bits := uint32(0) - for i := 0; i < 1<> 8), byte(x >> 16), byte(x >> 24)}) - } -} - -// vfpCases generates VFP instructions. -func vfpCases(t *testing.T) func(func([]byte)) { - const ( - vfpmask uint32 = 0xFF00FE10 - vfp uint32 = 0x0E009A00 - ) - return func(try func([]byte)) { - tryCondMask(0xff00fe10, 0x0e009a00, try) // standard VFP instruction space - tryCondMask(0xffc00f7f, 0x0e000b10, try) // VFP MOV core reg to/from float64 half - tryCondMask(0xffe00f7f, 0x0e000a10, try) // VFP MOV core reg to/from float32 - tryCondMask(0xffef0fff, 0x0ee10a10, try) // VFP MOV core reg to/from cond codes - } -} - -// hexCases generates the cases written in hexadecimal in the encoded string. -// Spaces in 'encoded' separate entire test cases, not individual bytes. -func hexCases(t *testing.T, encoded string) func(func([]byte)) { - return func(try func([]byte)) { - for _, x := range strings.Fields(encoded) { - src, err := hex.DecodeString(x) - if err != nil { - t.Errorf("parsing %q: %v", x, err) - } - try(src) - } - } -} - -// testdataCases generates the test cases recorded in testdata/decode.txt. -// It only uses the inputs; it ignores the answers recorded in that file. -func testdataCases(t *testing.T) func(func([]byte)) { - var codes [][]byte - data, err := ioutil.ReadFile("testdata/decode.txt") - if err != nil { - t.Fatal(err) - } - for _, line := range strings.Split(string(data), "\n") { - line = strings.TrimSpace(line) - if line == "" || strings.HasPrefix(line, "#") { - continue - } - f := strings.Fields(line)[0] - i := strings.Index(f, "|") - if i < 0 { - t.Errorf("parsing %q: missing | separator", f) - continue - } - if i%2 != 0 { - t.Errorf("parsing %q: misaligned | separator", f) - } - code, err := hex.DecodeString(f[:i] + f[i+1:]) - if err != nil { - t.Errorf("parsing %q: %v", f, err) - continue - } - codes = append(codes, code) - } - - return func(try func([]byte)) { - for _, code := range codes { - try(code) - } - } -} - -func caller(skip int) string { - pc, _, _, _ := runtime.Caller(skip) - f := runtime.FuncForPC(pc) - name := "?" - if f != nil { - name = f.Name() - if i := strings.LastIndex(name, "."); i >= 0 { - name = name[i+1:] - } - } - return name -} diff --git a/src/cmd/vendor/golang.org/x/arch/arm/armasm/objdump_test.go b/src/cmd/vendor/golang.org/x/arch/arm/armasm/objdump_test.go deleted file mode 100644 index db51902cc7..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/arm/armasm/objdump_test.go +++ /dev/null @@ -1,268 +0,0 @@ -// Copyright 2014 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 armasm - -import ( - "encoding/binary" - "strings" - "testing" -) - -func TestObjdumpARMTestdata(t *testing.T) { testObjdumpARM(t, testdataCases(t)) } -func TestObjdumpARMManual(t *testing.T) { testObjdumpARM(t, hexCases(t, objdumpManualTests)) } -func TestObjdumpARMCond(t *testing.T) { testObjdumpARM(t, condCases(t)) } -func TestObjdumpARMUncond(t *testing.T) { testObjdumpARM(t, uncondCases(t)) } -func TestObjdumpARMVFP(t *testing.T) { testObjdumpARM(t, vfpCases(t)) } - -// objdumpManualTests holds test cases that will be run by TestObjdumpARMManual. -// If you are debugging a few cases that turned up in a longer run, it can be useful -// to list them here and then use -run=Manual, particularly with tracing enabled. -// Note that these are byte sequences, so they must be reversed from the usual -// word presentation. -var objdumpManualTests = ` -002a9b1d -001b9bed -020b8ded -003a9b1d -060b8ded -fcde1100 -b4de1100 -bc480000 -0b008de7 -0b00ade7 -fdbcfaf7 -` - -// allowedMismatchObjdump reports whether the mismatch between text and dec -// should be allowed by the test. -func allowedMismatchObjdump(text string, size int, inst *Inst, dec ExtInst) bool { - if hasPrefix(text, "error:") { - if hasPrefix(dec.text, unsupported...) || strings.Contains(dec.text, "invalid:") || strings.HasSuffix(dec.text, "^") || strings.Contains(dec.text, "f16.f64") || strings.Contains(dec.text, "f64.f16") { - return true - } - // word 4320F02C: libopcodes says 'nopmi {44}'. - if hasPrefix(dec.text, "nop") && strings.Contains(dec.text, "{") { - return true - } - } - - if hasPrefix(dec.text, "error:") && text == "undef" && inst.Enc == 0xf7fabcfd { - return true - } - - // word 00f02053: libopcodes says 'noppl {0}'. - if hasPrefix(dec.text, "nop") && hasPrefix(text, "nop") && dec.text == text+" {0}" { - return true - } - - // word F57FF04F. we say 'dsb #15', libopcodes says 'dsb sy'. - if hasPrefix(text, "dsb") && hasPrefix(dec.text, "dsb") { - return true - } - // word F57FF06F. we say 'isb #15', libopcodes says 'isb sy'. - if hasPrefix(text, "isb") && hasPrefix(dec.text, "isb") { - return true - } - // word F57FF053. we say 'dmb #3', libopcodes says 'dmb osh'. - if hasPrefix(text, "dmb") && hasPrefix(dec.text, "dmb") { - return true - } - - // word 992D0000. push/stmdb with no registers (undefined). - // we say 'stmdbls sp!, {}', libopcodes says 'pushls {}'. - if hasPrefix(text, "stmdb") && hasPrefix(dec.text, "push") && strings.Contains(text, "{}") && strings.Contains(dec.text, "{}") { - return true - } - - // word 28BD0000. pop/ldm with no registers (undefined). - // we say 'ldmcs sp!, {}', libopcodes says 'popcs {}'. - if hasPrefix(text, "ldm") && hasPrefix(dec.text, "pop") && strings.Contains(text, "{}") && strings.Contains(dec.text, "{}") { - return true - } - - // word 014640F0. - // libopcodes emits #-0 for negative zero; we don't. - if strings.Replace(dec.text, "#-0", "#0", -1) == text || strings.Replace(dec.text, ", #-0", "", -1) == text { - return true - } - - // word 91EF90F0. we say 'strdls r9, [pc, #0]!' but libopcodes says 'strdls r9, [pc]'. - // word D16F60F0. we say 'strdle r6, [pc, #0]!' but libopcodes says 'strdle r6, [pc, #-0]'. - if strings.Replace(text, ", #0]!", "]", -1) == strings.Replace(dec.text, ", #-0]", "]", -1) { - return true - } - - // word 510F4000. we say apsr, libopcodes says CPSR. - if strings.Replace(dec.text, "CPSR", "apsr", -1) == text { - return true - } - - // word 06A4B059. - // for ssat and usat, libopcodes decodes asr #0 as asr #0 but the manual seems to say it should be asr #32. - // There is never an asr #0. - if strings.Replace(dec.text, ", asr #0", ", asr #32", -1) == text { - return true - } - - if len(dec.enc) >= 4 { - raw := binary.LittleEndian.Uint32(dec.enc[:4]) - - // word 21FFF0B5. - // the manual is clear that this is pre-indexed mode (with !) but libopcodes generates post-index (without !). - if raw&0x01200000 == 0x01200000 && strings.Replace(text, "!", "", -1) == dec.text { - return true - } - - // word C100543E: libopcodes says tst, but no evidence for that. - if strings.HasPrefix(dec.text, "tst") && raw&0x0ff00000 != 0x03100000 && raw&0x0ff00000 != 0x01100000 { - return true - } - - // word C3203CE8: libopcodes says teq, but no evidence for that. - if strings.HasPrefix(dec.text, "teq") && raw&0x0ff00000 != 0x03300000 && raw&0x0ff00000 != 0x01300000 { - return true - } - - // word D14C552E: libopcodes says cmp but no evidence for that. - if strings.HasPrefix(dec.text, "cmp") && raw&0x0ff00000 != 0x03500000 && raw&0x0ff00000 != 0x01500000 { - return true - } - - // word 2166AA4A: libopcodes says cmn but no evidence for that. - if strings.HasPrefix(dec.text, "cmn") && raw&0x0ff00000 != 0x03700000 && raw&0x0ff00000 != 0x01700000 { - return true - } - - // word E70AEEEF: libopcodes says str but no evidence for that. - if strings.HasPrefix(dec.text, "str") && len(dec.text) >= 5 && (dec.text[3] == ' ' || dec.text[5] == ' ') && raw&0x0e500018 != 0x06000000 && raw&0x0e500000 != 0x0400000 { - return true - } - - // word B0AF48F4: libopcodes says strd but P=0,W=1 which is unpredictable. - if hasPrefix(dec.text, "ldr", "str") && raw&0x01200000 == 0x00200000 { - return true - } - - // word B6CC1C76: libopcodes inexplicably says 'uxtab16lt r1, ip, r6, ROR #24' instead of 'uxtab16lt r1, ip, r6, ror #24' - if strings.ToLower(dec.text) == text { - return true - } - - // word F410FDA1: libopcodes says PLDW but the manual is clear that PLDW is F5/F7, not F4. - // word F7D0FB17: libopcodes says PLDW but the manual is clear that PLDW has 0x10 clear - if hasPrefix(dec.text, "pld") && raw&0xfd000010 != 0xf5000000 { - return true - } - - // word F650FE14: libopcodes says PLI but the manual is clear that PLI has 0x10 clear - if hasPrefix(dec.text, "pli") && raw&0xff000010 != 0xf6000000 { - return true - } - } - - return false -} - -// Instructions known to libopcodes (or xed) but not to us. -// Most of these are floating point coprocessor instructions. -var unsupported = strings.Fields(` - abs - acs - adf - aes - asn - atn - cdp - cf - cmf - cnf - cos - cps - crc32 - dvf - eret - exp - fadd - fcmp - fcpy - fcvt - fdiv - fdv - fix - fld - flt - fmac - fmd - fml - fmr - fms - fmul - fmx - fneg - fnm - frd - fsit - fsq - fst - fsu - fto - fui - hlt - hvc - lda - ldc - ldf - lfm - lgn - log - mar - mcr - mcrr - mia - mnf - mra - mrc - mrrc - mrs - msr - msr - muf - mvf - nrm - pol - pow - rdf - rfc - rfe - rfs - rmf - rnd - rpw - rsf - sdiv - sev - sfm - sha1 - sha256 - sin - smc - sqt - srs - stc - stf - stl - suf - tan - udf - udiv - urd - vfma - vfms - vfnma - vfnms - vrint - wfc - wfs -`) diff --git a/src/cmd/vendor/golang.org/x/arch/arm/armasm/objdumpext_test.go b/src/cmd/vendor/golang.org/x/arch/arm/armasm/objdumpext_test.go deleted file mode 100644 index 033e923d1f..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/arm/armasm/objdumpext_test.go +++ /dev/null @@ -1,259 +0,0 @@ -// Copyright 2014 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. - -// Copied and simplified from ../../x86/x86asm/objdumpext_test.go. - -package armasm - -import ( - "bytes" - "debug/elf" - "encoding/binary" - "fmt" - "io" - "log" - "os" - "strconv" - "strings" - "testing" -) - -const objdumpPath = "/usr/local/bin/arm-linux-elf-objdump" - -func testObjdumpARM(t *testing.T, generate func(func([]byte))) { - testObjdumpArch(t, generate, ModeARM) -} - -func testObjdumpArch(t *testing.T, generate func(func([]byte)), arch Mode) { - if testing.Short() { - t.Skip("skipping objdump test in short mode") - } - if _, err := os.Stat(objdumpPath); err != nil { - t.Skip(err) - } - - testExtDis(t, "gnu", arch, objdump, generate, allowedMismatchObjdump) -} - -func objdump(ext *ExtDis) error { - // File already written with instructions; add ELF header. - if ext.Arch == ModeARM { - if err := writeELF32(ext.File, ext.Size); err != nil { - return err - } - } else { - panic("unknown arch") - } - - b, err := ext.Run(objdumpPath, "-d", "-z", ext.File.Name()) - if err != nil { - return err - } - - var ( - nmatch int - reading bool - next uint32 = start - addr uint32 - encbuf [4]byte - enc []byte - text string - ) - flush := func() { - if addr == next { - if m := pcrel.FindStringSubmatch(text); m != nil { - targ, _ := strconv.ParseUint(m[2], 16, 64) - text = fmt.Sprintf("%s .%+#x", m[1], int32(uint32(targ)-addr-uint32(len(enc)))) - } - if strings.HasPrefix(text, "stmia") { - text = "stm" + text[5:] - } - if strings.HasPrefix(text, "stmfd") { - text = "stmdb" + text[5:] - } - if strings.HasPrefix(text, "ldmfd") { - text = "ldm" + text[5:] - } - text = strings.Replace(text, "#0.0", "#0", -1) - if text == "undefined" && len(enc) == 4 { - text = "error: unknown instruction" - enc = nil - } - if len(enc) == 4 { - // prints as word but we want to record bytes - enc[0], enc[3] = enc[3], enc[0] - enc[1], enc[2] = enc[2], enc[1] - } - ext.Dec <- ExtInst{addr, encbuf, len(enc), text} - encbuf = [4]byte{} - enc = nil - next += 4 - } - } - var textangle = []byte("<.text>:") - for { - line, err := b.ReadSlice('\n') - if err != nil { - if err == io.EOF { - break - } - return fmt.Errorf("reading objdump output: %v", err) - } - if bytes.Contains(line, textangle) { - reading = true - continue - } - if !reading { - continue - } - if debug { - os.Stdout.Write(line) - } - if enc1 := parseContinuation(line, encbuf[:len(enc)]); enc1 != nil { - enc = enc1 - continue - } - flush() - nmatch++ - addr, enc, text = parseLine(line, encbuf[:0]) - if addr > next { - return fmt.Errorf("address out of sync expected <= %#x at %q in:\n%s", next, line, line) - } - } - flush() - if next != start+uint32(ext.Size) { - return fmt.Errorf("not enough results found [%d %d]", next, start+ext.Size) - } - if err := ext.Wait(); err != nil { - return fmt.Errorf("exec: %v", err) - } - - return nil -} - -var ( - undefined = []byte("") - unpredictable = []byte("") - illegalShifter = []byte("") -) - -func parseLine(line []byte, encstart []byte) (addr uint32, enc []byte, text string) { - oline := line - i := index(line, ":\t") - if i < 0 { - log.Fatalf("cannot parse disassembly: %q", oline) - } - x, err := strconv.ParseUint(string(trimSpace(line[:i])), 16, 32) - if err != nil { - log.Fatalf("cannot parse disassembly: %q", oline) - } - addr = uint32(x) - line = line[i+2:] - i = bytes.IndexByte(line, '\t') - if i < 0 { - log.Fatalf("cannot parse disassembly: %q", oline) - } - enc, ok := parseHex(line[:i], encstart) - if !ok { - log.Fatalf("cannot parse disassembly: %q", oline) - } - line = trimSpace(line[i:]) - if bytes.Contains(line, undefined) { - text = "undefined" - return - } - if bytes.Contains(line, illegalShifter) { - text = "undefined" - return - } - if false && bytes.Contains(line, unpredictable) { - text = "unpredictable" - return - } - if i := bytes.IndexByte(line, ';'); i >= 0 { - line = trimSpace(line[:i]) - } - text = string(fixSpace(line)) - return -} - -func parseContinuation(line []byte, enc []byte) []byte { - i := index(line, ":\t") - if i < 0 { - return nil - } - line = line[i+1:] - enc, _ = parseHex(line, enc) - return enc -} - -// writeELF32 writes an ELF32 header to the file, -// describing a text segment that starts at start -// and extends for size bytes. -func writeELF32(f *os.File, size int) error { - f.Seek(0, io.SeekStart) - var hdr elf.Header32 - var prog elf.Prog32 - var sect elf.Section32 - var buf bytes.Buffer - binary.Write(&buf, binary.LittleEndian, &hdr) - off1 := buf.Len() - binary.Write(&buf, binary.LittleEndian, &prog) - off2 := buf.Len() - binary.Write(&buf, binary.LittleEndian, §) - off3 := buf.Len() - buf.Reset() - data := byte(elf.ELFDATA2LSB) - hdr = elf.Header32{ - Ident: [16]byte{0x7F, 'E', 'L', 'F', 1, data, 1}, - Type: 2, - Machine: uint16(elf.EM_ARM), - Version: 1, - Entry: start, - Phoff: uint32(off1), - Shoff: uint32(off2), - Flags: 0x05000002, - Ehsize: uint16(off1), - Phentsize: uint16(off2 - off1), - Phnum: 1, - Shentsize: uint16(off3 - off2), - Shnum: 3, - Shstrndx: 2, - } - binary.Write(&buf, binary.LittleEndian, &hdr) - prog = elf.Prog32{ - Type: 1, - Off: start, - Vaddr: start, - Paddr: start, - Filesz: uint32(size), - Memsz: uint32(size), - Flags: 5, - Align: start, - } - binary.Write(&buf, binary.LittleEndian, &prog) - binary.Write(&buf, binary.LittleEndian, §) // NULL section - sect = elf.Section32{ - Name: 1, - Type: uint32(elf.SHT_PROGBITS), - Addr: start, - Off: start, - Size: uint32(size), - Flags: uint32(elf.SHF_ALLOC | elf.SHF_EXECINSTR), - Addralign: 4, - } - binary.Write(&buf, binary.LittleEndian, §) // .text - sect = elf.Section32{ - Name: uint32(len("\x00.text\x00")), - Type: uint32(elf.SHT_STRTAB), - Addr: 0, - Off: uint32(off2 + (off3-off2)*3), - Size: uint32(len("\x00.text\x00.shstrtab\x00")), - Addralign: 1, - } - binary.Write(&buf, binary.LittleEndian, §) - buf.WriteString("\x00.text\x00.shstrtab\x00") - f.Write(buf.Bytes()) - return nil -} diff --git a/src/cmd/vendor/golang.org/x/arch/arm/armasm/testdata/Makefile b/src/cmd/vendor/golang.org/x/arch/arm/armasm/testdata/Makefile deleted file mode 100644 index 1adab68517..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/arm/armasm/testdata/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -newdecode.txt: - cd ..; go test -cover -run 'ObjdumpARMCond' -v -timeout 10h -printtests -long 2>&1 | tee log - cd ..; go test -cover -run 'ObjdumpARMUncond' -v -timeout 10h -printtests -long 2>&1 | tee -a log - egrep ' (gnu|plan9) ' ../log |sort >newdecode.txt - diff --git a/src/cmd/vendor/golang.org/x/arch/arm/armasm/testdata/decode.txt b/src/cmd/vendor/golang.org/x/arch/arm/armasm/testdata/decode.txt deleted file mode 100644 index 7653ee0643..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/arm/armasm/testdata/decode.txt +++ /dev/null @@ -1,1600 +0,0 @@ -000001f1| 1 gnu setend le -00100f61| 1 gnu mrsvs r1, apsr -00f02053| 1 gnu noppl -00f0d4f4| 1 gnu pli [r4] -01f020d3| 1 gnu yieldle -02002d59| 1 gnu stmdbpl sp!, {r1} -021da9d8| 1 gnu stmle r9!, {r1, r8, sl, fp, ip} -02c0b071| 1 gnu movsvc ip, r2 -02f02073| 1 gnu wfevc -03f02013| 1 gnu wfine -03f05df7| 1 gnu pld [sp, -r3] -04009d34| 1 gnu popcc {r0} -043a52b1| 1 gnu cmplt r2, r4, lsl #20 -04402de5| 1 gnu push {r4} -045b148d| 1 gnu vldrhi d5, [r4, #-16] -04f02093| 1 gnu sevls -0793eab0| 1 gnu rsclt r9, sl, r7, lsl #6 -079bfb9e| 1 gnu vmovls.f64 d25, #183 -0a4fc9d3| 1 gnu bicle r4, r9, #10, 30 -0bac7ab6| 1 gnu ldrbtlt sl, [sl], -fp, lsl #24 -0c2aee44| 1 gnu strbtmi r2, [lr], #2572 -0c4bb000| 1 gnu adcseq r4, r0, ip, lsl #22 -0e26d561| 1 gnu bicsvs r2, r5, lr, lsl #12 -0f0fa011| 1 gnu lslne r0, pc, #30 -0fa448e0| 1 gnu sub sl, r8, pc, lsl #8 -101af1de| 1 gnu vmrsle r1, fpscr -108a0cee| 1 gnu vmov s24, r8 -108a1dae| 1 gnu vmovge r8, s26 -108ae14e| 1 gnu vmsrmi fpscr, r8 -10faf1ae| 1 gnu vmrsge apsr_nzcv, fpscr -10fb052e| 1 gnu vmovcs.32 d5[0], pc -11c902b7| 1 gnu smladlt r2, r1, r9, ip -11ef5b16| 1 gnu uadd16ne lr, fp, r1 -12fa87a7| 1 gnu usad8ge r7, r2, sl -135f2956| 1 gnu qadd16pl r5, r9, r3 -13de9aa1| 1 gnu orrsge sp, sl, r3, lsl lr -145c0e40| 1 gnu andmi r5, lr, r4, lsl ip -150f7fd6| 1 gnu uhadd16le r0, pc, r5 -15b9bf12| 1 gnu adcsne fp, pc, #344064 -16373391| 1 gnu teqls r3, r6, lsl r7 -19ef1966| 1 gnu sadd16vs lr, r9, r9 -1ab0b091| 1 gnu lslsls fp, sl, r0 -1b9f6fe6| 1 gnu uqadd16 r9, pc, fp -1bb58557| 1 gnu usada8pl r5, fp, r5, fp -1beff8e0| 1 gnu rscs lr, r8, fp, lsl pc -1caff0e6| 1 gnu usat sl, #16, ip, lsl #30 -1d0f3d36| 1 gnu shadd16cc r0, sp, sp -1dca1d52| 1 gnu andspl ip, sp, #118784 -1e4891d0| 1 gnu addsle r4, r1, lr, lsl r8 -1f0889e6| 1 gnu pkhbt r0, r9, pc, lsl #16 -1f1f6fe1| 1 gnu clz r1, pc -1f26d157| 1 gnu bfcpl r2, #12, #6 -1ff07ff5| 1 gnu clrex -1fff2fd1| 1 gnu bxle pc -20f153f6| 1 gnu pli [r3, -r0, lsr #2] -21047013| 1 gnu cmnne r0, #553648128 -21c2eb8b| 1 gnu blhi .-0x50f778 -21c2ebfb| 1 gnu blx .-0x50f776 -21fa62ee| 1 gnu vmul.f32 s31, s4, s3 -23005720| 1 gnu subscs r0, r7, r3, lsr #32 -236a303e| 1 gnu vaddcc.f32 s12, s0, s7 -23f055f6| 1 gnu pli [r5, -r3, lsr #32] -2430a031| 1 gnu lsrcc r3, r4, #32 -245d0803| 1 gnu movweq r5, #36132 -251a86be| 1 gnu vdivlt.f32 s2, s12, s11 -25db7b81| 1 gnu cmnhi fp, r5, lsr #22 -26bc3553| 1 gnu teqpl r5, #9728 -277c2d69| 1 gnu pushvs {r0, r1, r2, r5, sl, fp, ip, sp, lr} -29fc1cf5| 1 gnu pldw [ip, #-3113] -29ff2fc1| 1 gnu bxjgt r9 -2decd9c0| 1 gnu sbcsgt lr, r9, sp, lsr #24 -30fa5e47| 1 gnu smmulrmi lr, r0, sl -316f64d6| 1 gnu uqasxle r6, r4, r1 -323f5da6| 1 gnu uasxge r3, sp, r2 -327fe5e6| 1 gnu usat16 r7, #5, r2 -330151e3| 1 gnu cmp r1, #-1073741812 -34af2ae6| 1 gnu qasx sl, sl, r4 -35fd3710| 1 gnu eorsne pc, r7, r5, lsr sp -36def1c1| 1 gnu mvnsgt sp, r6, lsr lr -3801b061| 1 gnu lsrsvs r0, r8, r1 -38985477| 1 gnu smmlarvc r4, r8, r8, r9 -3a2fbfa6| 1 gnu revge r2, sl -3a3f1b06| 1 gnu sasxeq r3, fp, sl -3a7fa346| 1 gnu ssat16mi r7, #4, sl -3a943b94| 1 gnu ldrtls r9, [fp], #-1082 -3bf505e7| 1 gnu smuadx r5, fp, r5 -3cef7086| 1 gnu uhasxhi lr, r0, ip -3e5f3ec6| 1 gnu shasxgt r5, lr, lr -3f4fff86| 1 gnu rbithi r4, pc -3faf4717| 1 gnu smlaldxne sl, r7, pc, pc -3fff2fc1| 1 gnu blxgt pc -402bbf7e| 1 gnu vcvtvc.u16.f64 d2, d2, #16 -403ab5de| 1 gnu vcmple.f32 s6, #0 -40eb363e| 1 gnu vsubcc.f64 d14, d6, d0 -420f73d1| 1 gnu cmnle r3, r2, asr #30 -424a648e| 1 gnu vnmulhi.f32 s9, s8, s4 -4284d717| 1 gnu ldrbne r8, [r7, r2, asr #8] -42a599c3| 1 gnu orrsgt sl, r9, #276824064 -42abf0be| 1 gnu vmovlt.f64 d26, d2 -446ea031| 1 gnu asrcc r6, r4, #28 -4a953557| 1 gnu ldrpl r9, [r5, -sl, asr #10]! -4ab6f712| 1 gnu rscsne fp, r7, #77594624 -4af07ff5| 1 gnu dsb #10 -4df6def4| 1 gnu pli [lr, #1613] -4efbf52e| 1 gnu vcmpcs.f64 d31, #0 -50aaac79| 1 gnu stmibvc ip!, {r4, r6, r9, fp, sp, pc} -50caf011| 1 gnu mvnsne ip, r0, asr sl -50f04961| 1 gnu qdaddvs pc, r0, r9 -51282008| 1 gnu stmdaeq r0!, {r0, r4, r6, fp, sp} -52bf6576| 1 gnu uqsaxvc fp, r5, r2 -5345c9d0| 1 gnu sbcle r4, r9, r3, asr r5 -538f5e46| 1 gnu usaxmi r8, lr, r3 -54106d31| 1 gnu qdsubcc r1, r4, sp -56e0e557| 1 gnu ubfxpl lr, r6, #0, #6 -57073d11| 1 gnu teqne sp, r7, asr r7 -58bb0aa9| 1 gnu stmdbge sl, {r3, r4, r6, r8, r9, fp, ip, sp, pc} -58f007b1| 1 gnu qaddlt pc, r8, r7 -59fd0e77| 1 gnu smusdvc lr, r9, sp -5ab7f1c5| 1 gnu ldrbgt fp, [r1, #1882]! -5abf23c6| 1 gnu qsaxgt fp, r3, sl -5b8f1c96| 1 gnu ssaxls r8, ip, fp -5b98ab97| 1 gnu sbfxls r9, fp, #16, #12 -5bc9b041| 1 gnu asrsmi ip, fp, r9 -5bf07ff5| 1 gnu dmb #11 -5c102b81| 1 gnu qsubhi r1, ip, fp -5caa49e1| 1 gnu qdadd sl, ip, r9 -5d3f7226| 1 gnu uhsaxcs r3, r2, sp -5db55470| 1 gnu subsvc fp, r4, sp, asr r5 -5ef14387| 1 gnu smlsldhi pc, r3, lr, r1 -5f540a11| 1 gnu qaddne r5, pc, sl -5f9079d1| 1 gnu cmnle r9, pc, asr r0 -5faf3f66| 1 gnu shsaxvs sl, pc, pc -605071d7| 1 gnu ldrble r5, [r1, -r0, rrx]! -614adc76| 1 gnu ldrbvc r4, [ip], r1, ror #20 -616b9e42| 1 gnu addsmi r6, lr, #99328 -62c84f15| 1 gnu strbne ip, [pc, #-2146] -62f051f7| 1 gnu pld [r1, -r2, rrx] -6346c393| 1 gnu bicls r4, r3, #103809024 -654abbae| 1 gnu vcvtge.f32.u16 s8, s8, #5 -65a5f0e3| 1 gnu mvns sl, #423624704 -65f796f7| 1 gnu pldw [r6, r5, ror #14] -670bb12e| 1 gnu vnegcs.f64 d0, d23 -67903731| 1 gnu teqcc r7, r7, rrx -68ddc637| 1 gnu strbcc sp, [r6, r8, ror #26] -695b3ab6| 1 gnu ldrtlt r5, [sl], -r9, ror #22 -697cfc71| 1 gnu mvnsvc r7, r9, ror #24 -6a0ab3ee| 1 gnu vcvtb.f16.f32 s0, s21 -6ad9ad54| 1 gnu strtpl sp, [sp], #2410 -6af07ff5| 1 gnu isb #10 -6afa6f10| 1 gnu rsbne pc, pc, sl, ror #20 -6d5b19ee| 1 gnu vnmla.f64 d5, d9, d29 -6d60b071| 1 gnu rrxsvc r6, sp -6df754f7| 1 gnu pld [r4, -sp, ror #14] -70065821| 1 gnu cmpcs r8, r0, ror r6 -7050ed86| 1 gnu uxtabhi r5, sp, r0 -715f1186| 1 gnu ssub16hi r5, r1, r1 -716c9805| 1 gnu ldreq r6, [r8, #3185] -718d5ab1| 1 gnu cmplt sl, r1, ror sp -71c8cfb6| 1 gnu uxtb16lt ip, r1, ror #16 -7294af06| 1 gnu sxtbeq r9, r2, ror #8 -72c0bac6| 1 gnu sxtahgt ip, sl, r2 -730f6716| 1 gnu uqsub16ne r0, r7, r3 -73608f46| 1 gnu sxtb16mi r6, r3 -73687f22| 1 gnu rsbscs r6, pc, #7536640 -74308816| 1 gnu sxtab16ne r3, r8, r4 -757f3456| 1 gnu shsub16pl r7, r4, r5 -77788016| 1 gnu sxtab16ne r7, r0, r7, ror #16 -78061671| 1 gnu tstvc r6, r8, ror r6 -780a2fe1| 1 gnu bkpt 0xf0a8 -7850abd6| 1 gnu sxtable r5, fp, r8 -792cef26| 1 gnu uxtbcs r2, r9, ror #24 -799eb8e0| 1 gnu adcs r9, r8, r9, ror lr -799f5726| 1 gnu usub16cs r9, r7, r9 -79d0bf16| 1 gnu sxthne sp, r9 -7a037ba1| 1 gnu cmnge fp, sl, ror r3 -7b0f2566| 1 gnu qsub16vs r0, r5, fp -7b79dd51| 1 gnu bicspl r7, sp, fp, ror r9 -7b9a9f1d| 1 gnu vldrne s18, [pc, #492] -7c70cea6| 1 gnu uxtab16ge r7, lr, ip -7d48f966| 1 gnu uxtahvs r4, r9, sp, ror #16 -7d5c13a1| 1 gnu tstge r3, sp, ror ip -7e0001f1| 1 gnu setend le -7e1c0ba7| 1 gnu smlsdxge fp, lr, ip, r1 -7e567e40| 1 gnu rsbsmi r5, lr, lr, ror r6 -7e8f73b6| 1 gnu uhsub16lt r8, r3, lr -7ef0ffd6| 1 gnu uxthle pc, lr -7faaa011| 1 gnu rorne sl, pc, sl -81f19af7| 1 gnu pldw [sl, r1, lsl #3] -82033901| 1 gnu teqeq r9, r2, lsl #7 -82f316f5| 1 gnu pldw [r6, #-898] -830201f1| 1 gnu setend be -838a3b91| 1 gnu teqls fp, r3, lsl #21 -8408af2f| 1 gnu svccs 0x00af0884 -884201d1| 1 gnu smlabble r1, r8, r2, r4 -8aa12e31| 1 gnu smlawbcc lr, sl, r1, sl -8b9b99c0| 1 gnu addsgt r9, r9, fp, lsl #23 -8c005c81| 1 gnu cmphi ip, ip, lsl #1 -8fb429c6| 1 gnu strtgt fp, [r9], -pc, lsl #9 -907b1f9e| 1 gnu vmovls.32 r7, d31[0] -91975f25| 1 gnu ldrbcs r9, [pc, #-1937] -91b010e3| 1 gnu tst r0, #145 -927facb1| 1 gnu strexdlt r7, r2, [ip] -92904c91| 1 gnu swpbls r9, r2, [ip] -92af1226| 1 gnu sadd8cs sl, r2, r2 -92b28c70| 1 gnu umullvc fp, ip, r2, r2 -945f68a6| 1 gnu uqadd8ge r5, r8, r4 -950b2560| 1 gnu mlavs r5, r5, fp, r0 -969fcf71| 1 gnu strexbvc r9, r6, [pc] -96cf35e6| 1 gnu shadd8 ip, r5, r6 -98060eb0| 1 gnu mullt lr, r8, r6 -9843fb93| 1 gnu mvnsls r4, #152, 6 -9a3fe2b0| 1 gnu smlallt r3, r2, sl, pc -9aef58b6| 1 gnu uadd8lt lr, r8, sl -9afcdff5| 1 gnu pld [pc, #3226] -9c221810| 1 gnu mulsne r8, ip, r2 -9c3bc9dd| 1 gnu vstrle d19, [r9, #624] -9c5f2606| 1 gnu qadd8eq r5, r6, ip -9d87dac0| 1 gnu smullsgt r8, sl, sp, r7 -9e0f7c86| 1 gnu uhadd8hi r0, ip, lr -9e814560| 1 gnu umaalvs r8, r5, lr, r1 -9e9f8dc1| 1 gnu strexgt r9, lr, [sp] -9ec3c9d7| 1 gnu bfile ip, lr, #7, #3 -9ed26d90| 1 gnu mlsls sp, lr, r2, sp -9f7fd9c1| 1 gnu ldrexbgt r7, [r9] -9f7fea91| 1 gnu strexhls r7, pc, [sl] -9f9f9921| 1 gnu ldrexcs r9, [r9] -9faffd21| 1 gnu ldrexhcs sl, [sp] -9fcfbd61| 1 gnu ldrexdvs ip, [sp] -9ff7a710| 1 gnu umlalne pc, r7, pc, r7 -a05459d3| 1 gnu cmple r9, #160, 8 -a3062be1| 1 gnu smulwb fp, r3, r6 -a68a92b1| 1 gnu orrslt r8, r2, r6, lsr #21 -abff55f6| 1 gnu pli [r5, -fp, lsr #31] -addbf8ea| 1 gnu b .-0x1c9148 -ae79b021| 1 gnu lsrscs r7, lr, #19 -b590a3b1| 1 gnu strhlt r9, [r3, r5]! -b5b2e390| 1 gnu strhtls fp, [r3], #37 -b6ac4e30| 1 gnu strhcc sl, [lr], #-198 -b73fff86| 1 gnu revshhi r3, r7 -b75fbfc6| 1 gnu rev16gt r5, r7 -b80b7c80| 1 gnu ldrhthi r0, [ip], #-184 -b82035e0| 1 gnu ldrht r2, [r5], -r8 -b8877391| 1 gnu ldrhls r8, [r3, #-120]! -b9703e41| 1 gnu ldrhmi r7, [lr, -r9]! -b9cf8c16| 1 gnu selne ip, ip, r9 -bd81bd58| 1 gnu poppl {r0, r2, r3, r4, r5, r7, r8, pc} -bdfdb469| 1 gnu ldmibvs r4!, {r0, r2, r3, r4, r5, r7, r8, sl, fp, ip, sp, lr, pc} -beb02500| 1 gnu strhteq fp, [r5], -lr -bf1a5e42| 1 gnu subsmi r1, lr, #782336 -c19a4d5e| 1 gnu vmlspl.f32 s19, s27, s2 -c1aab15e| 1 gnu vsqrtpl.f32 s20, s2 -c354b003| 1 gnu movseq r5, #-1023410176 -c4091dc1| 1 gnu tstgt sp, r4, asr #19 -c50e13a9| 1 gnu ldmdbge r3, {r0, r2, r6, r7, r9, sl, fp} -c68c8637| 1 gnu strcc r8, [r6, r6, asr #25] -c6ad48e3| 1 gnu movt sl, #36294 -c6f65ff5| 1 gnu pld [pc, #-1734] -c8a92f10| 1 gnu eorne sl, pc, r8, asr #19 -c9016b61| 1 gnu smulbtvs fp, r9, r1 -cadbf49e| 1 gnu vcmpels.f64 d29, d10 -ce9de476| 1 gnu strbtvc r9, [r4], lr, asr #27 -cf3c1ab1| 1 gnu tstlt sl, pc, asr #25 -d355aab6| 1 gnu ssatlt r5, #11, r3, asr #11 -d4f4df10| 1 gnu ldrsbne pc, [pc], #68 -d6530d61| 1 gnu ldrdvs r5, [sp, -r6] -d74d7800| 1 gnu ldrsbteq r4, [r8], #-215 -d9703680| 1 gnu ldrsbthi r7, [r6], -r9 -dbe003c0| 1 gnu ldrdgt lr, [r3], -fp -dc709561| 1 gnu ldrsbvs r7, [r5, ip] -dcc3b9c8| 1 gnu ldmgt r9!, {r2, r3, r4, r6, r7, r8, r9, lr, pc} -debfa0e5| 1 gnu str fp, [r0, #4062]! -dee062a1| 1 gnu ldrdge lr, [r2, #-14]! -dfa05ab7| 1 gnu smmlslt sl, pc, r0, sl -e02ef011| 1 gnu mvnsne r2, r0, ror #29 -e4d41718| 1 gnu ldmdane r7, {r2, r5, r6, r7, sl, ip, lr, pc} -e6d0fe34| 1 gnu ldrbtcc sp, [lr], #230 -e73bf7be| 1 gnu vcvtlt.f32.f64 s7, d23 -e74e72b3| 1 gnu cmnlt r2, #3696 -e80bf07e| 1 gnu vabsvc.f64 d16, d24 -e9b5b001| 1 gnu rorseq fp, r9, #11 -ea7bbdbe| 1 gnu vcvtlt.s32.f64 s14, d26 -ec063813| 1 gnu teqne r8, #236, 12 -ec0e49e1| 1 gnu smlaltt r0, r9, ip, lr -ee4ab85e| 1 gnu vcvtpl.f32.s32 s8, s29 -ef461f25| 1 gnu ldrcs r4, [pc, #-1775] -ef5fd002| 1 gnu sbcseq r5, r0, #956 -f4cf1d36| 1 gnu ssub8cc ip, sp, r4 -f67f73b6| 1 gnu uhsub8lt r7, r3, r6 -f6e09ca0| 1 gnu ldrshge lr, [ip], r6 -f7702e32| 1 gnu eorcc r7, lr, #247 -fa4dcf20| 1 gnu strdcs r4, [pc], #218 -fac03720| 1 gnu ldrshtcs ip, [r7], -sl -fc0f64c6| 1 gnu uqsub8gt r0, r4, ip -fc28f481| 1 gnu ldrshhi r2, [r4, #140]! -fc300560| 1 gnu strdvs r3, [r5], -ip -fcacfc70| 1 gnu ldrshtvc sl, [ip], #204 -fdbcfaf7| 1 gnu undef -fddf5c86| 1 gnu usub8hi sp, ip, sp -fdf02013| 1 gnu dbgne #13 -fe0319e3| 1 gnu tst r9, #-134217725 -fe7f3116| 1 gnu shsub8ne r7, r1, lr -ff4f2ac6| 1 gnu qsub8gt r4, sl, pc -ff818c71| 1 gnu strdvc r8, [ip, pc] -|6b5721d3 1 gnu error: unknown instruction -|76452001 1 gnu error: unknown instruction -|97acd647 1 gnu error: unknown instruction -11f71507| 1 plan9 SDIV.EQ R7, R1, R5 -15f715e7| 1 plan9 SDIV R7, R5, R5 -11f93517| 1 plan9 UDIV.NE R9, R1, R5 -12fb33e7| 1 plan9 UDIV R11, R2, R3 -ed003be9| 1 plan9 LDMDB [R0,R2-R3,R5-R7], R11! -923124e0| 1 plan9 MLA R1, R2, R3, R4 -923134e0| 1 plan9 MLA.S R1, R2, R3, R4 -923164e0| 1 plan9 MLS R1, R2, R3, R4 -ff1000e2| 1 plan9 AND $255, R0, R1 -ff1400e2| 1 plan9 AND $4278190080, R0, R1 -ff1010e2| 1 plan9 AND.S $255, R0, R1 -ff1410e2| 1 plan9 AND.S $4278190080, R0, R1 -ff0000e2| 1 plan9 AND $255, R0, R0 -ff0400e2| 1 plan9 AND $4278190080, R0, R0 -ff0010e2| 1 plan9 AND.S $255, R0, R0 -ff0410e2| 1 plan9 AND.S $4278190080, R0, R0 -002001e0| 1 plan9 AND R0, R1, R2 -002011e0| 1 plan9 AND.S R0, R1, R2 -001001e0| 1 plan9 AND R0, R1, R1 -001011e0| 1 plan9 AND.S R0, R1, R1 -202e01e0| 1 plan9 AND R0>>$28, R1, R2 -002e01e0| 1 plan9 AND R0<<$28, R1, R2 -402e01e0| 1 plan9 AND R0->$28, R1, R2 -602e01e0| 1 plan9 AND R0@>$28, R1, R2 -202e11e0| 1 plan9 AND.S R0>>$28, R1, R2 -002e11e0| 1 plan9 AND.S R0<<$28, R1, R2 -402e11e0| 1 plan9 AND.S R0->$28, R1, R2 -602e11e0| 1 plan9 AND.S R0@>$28, R1, R2 -001e01e0| 1 plan9 AND R0<<$28, R1, R1 -201e01e0| 1 plan9 AND R0>>$28, R1, R1 -401e01e0| 1 plan9 AND R0->$28, R1, R1 -601e01e0| 1 plan9 AND R0@>$28, R1, R1 -001e11e0| 1 plan9 AND.S R0<<$28, R1, R1 -201e11e0| 1 plan9 AND.S R0>>$28, R1, R1 -401e11e0| 1 plan9 AND.S R0->$28, R1, R1 -601e11e0| 1 plan9 AND.S R0@>$28, R1, R1 -103102e0| 1 plan9 AND R0<>R1, R2, R3 -503102e0| 1 plan9 AND R0->R1, R2, R3 -703102e0| 1 plan9 AND R0@>R1, R2, R3 -103112e0| 1 plan9 AND.S R0<>R1, R2, R3 -503112e0| 1 plan9 AND.S R0->R1, R2, R3 -703112e0| 1 plan9 AND.S R0@>R1, R2, R3 -102102e0| 1 plan9 AND R0<>R1, R2, R2 -502102e0| 1 plan9 AND R0->R1, R2, R2 -702102e0| 1 plan9 AND R0@>R1, R2, R2 -102112e0| 1 plan9 AND.S R0<>R1, R2, R2 -502112e0| 1 plan9 AND.S R0->R1, R2, R2 -702112e0| 1 plan9 AND.S R0@>R1, R2, R2 -ff1020e2| 1 plan9 EOR $255, R0, R1 -ff1420e2| 1 plan9 EOR $4278190080, R0, R1 -ff1030e2| 1 plan9 EOR.S $255, R0, R1 -ff1430e2| 1 plan9 EOR.S $4278190080, R0, R1 -ff0020e2| 1 plan9 EOR $255, R0, R0 -ff0420e2| 1 plan9 EOR $4278190080, R0, R0 -ff0030e2| 1 plan9 EOR.S $255, R0, R0 -ff0430e2| 1 plan9 EOR.S $4278190080, R0, R0 -002021e0| 1 plan9 EOR R0, R1, R2 -002031e0| 1 plan9 EOR.S R0, R1, R2 -001021e0| 1 plan9 EOR R0, R1, R1 -001031e0| 1 plan9 EOR.S R0, R1, R1 -202e21e0| 1 plan9 EOR R0>>$28, R1, R2 -002e21e0| 1 plan9 EOR R0<<$28, R1, R2 -402e21e0| 1 plan9 EOR R0->$28, R1, R2 -602e21e0| 1 plan9 EOR R0@>$28, R1, R2 -202e31e0| 1 plan9 EOR.S R0>>$28, R1, R2 -002e31e0| 1 plan9 EOR.S R0<<$28, R1, R2 -402e31e0| 1 plan9 EOR.S R0->$28, R1, R2 -602e31e0| 1 plan9 EOR.S R0@>$28, R1, R2 -001e21e0| 1 plan9 EOR R0<<$28, R1, R1 -201e21e0| 1 plan9 EOR R0>>$28, R1, R1 -401e21e0| 1 plan9 EOR R0->$28, R1, R1 -601e21e0| 1 plan9 EOR R0@>$28, R1, R1 -001e31e0| 1 plan9 EOR.S R0<<$28, R1, R1 -201e31e0| 1 plan9 EOR.S R0>>$28, R1, R1 -401e31e0| 1 plan9 EOR.S R0->$28, R1, R1 -601e31e0| 1 plan9 EOR.S R0@>$28, R1, R1 -103122e0| 1 plan9 EOR R0<>R1, R2, R3 -503122e0| 1 plan9 EOR R0->R1, R2, R3 -703122e0| 1 plan9 EOR R0@>R1, R2, R3 -103132e0| 1 plan9 EOR.S R0<>R1, R2, R3 -503132e0| 1 plan9 EOR.S R0->R1, R2, R3 -703132e0| 1 plan9 EOR.S R0@>R1, R2, R3 -102122e0| 1 plan9 EOR R0<>R1, R2, R2 -502122e0| 1 plan9 EOR R0->R1, R2, R2 -702122e0| 1 plan9 EOR R0@>R1, R2, R2 -102132e0| 1 plan9 EOR.S R0<>R1, R2, R2 -502132e0| 1 plan9 EOR.S R0->R1, R2, R2 -702132e0| 1 plan9 EOR.S R0@>R1, R2, R2 -ff1080e3| 1 plan9 ORR $255, R0, R1 -ff1480e3| 1 plan9 ORR $4278190080, R0, R1 -ff1090e3| 1 plan9 ORR.S $255, R0, R1 -ff1490e3| 1 plan9 ORR.S $4278190080, R0, R1 -ff0080e3| 1 plan9 ORR $255, R0, R0 -ff0480e3| 1 plan9 ORR $4278190080, R0, R0 -ff0090e3| 1 plan9 ORR.S $255, R0, R0 -ff0490e3| 1 plan9 ORR.S $4278190080, R0, R0 -002081e1| 1 plan9 ORR R0, R1, R2 -002091e1| 1 plan9 ORR.S R0, R1, R2 -001081e1| 1 plan9 ORR R0, R1, R1 -001091e1| 1 plan9 ORR.S R0, R1, R1 -202e81e1| 1 plan9 ORR R0>>$28, R1, R2 -002e81e1| 1 plan9 ORR R0<<$28, R1, R2 -402e81e1| 1 plan9 ORR R0->$28, R1, R2 -602e81e1| 1 plan9 ORR R0@>$28, R1, R2 -202e91e1| 1 plan9 ORR.S R0>>$28, R1, R2 -002e91e1| 1 plan9 ORR.S R0<<$28, R1, R2 -402e91e1| 1 plan9 ORR.S R0->$28, R1, R2 -602e91e1| 1 plan9 ORR.S R0@>$28, R1, R2 -001e81e1| 1 plan9 ORR R0<<$28, R1, R1 -201e81e1| 1 plan9 ORR R0>>$28, R1, R1 -401e81e1| 1 plan9 ORR R0->$28, R1, R1 -601e81e1| 1 plan9 ORR R0@>$28, R1, R1 -001e91e1| 1 plan9 ORR.S R0<<$28, R1, R1 -201e91e1| 1 plan9 ORR.S R0>>$28, R1, R1 -401e91e1| 1 plan9 ORR.S R0->$28, R1, R1 -601e91e1| 1 plan9 ORR.S R0@>$28, R1, R1 -103182e1| 1 plan9 ORR R0<>R1, R2, R3 -503182e1| 1 plan9 ORR R0->R1, R2, R3 -703182e1| 1 plan9 ORR R0@>R1, R2, R3 -103192e1| 1 plan9 ORR.S R0<>R1, R2, R3 -503192e1| 1 plan9 ORR.S R0->R1, R2, R3 -703192e1| 1 plan9 ORR.S R0@>R1, R2, R3 -102182e1| 1 plan9 ORR R0<>R1, R2, R2 -502182e1| 1 plan9 ORR R0->R1, R2, R2 -702182e1| 1 plan9 ORR R0@>R1, R2, R2 -102192e1| 1 plan9 ORR.S R0<>R1, R2, R2 -502192e1| 1 plan9 ORR.S R0->R1, R2, R2 -702192e1| 1 plan9 ORR.S R0@>R1, R2, R2 -ff1040e2| 1 plan9 SUB $255, R0, R1 -ff1440e2| 1 plan9 SUB $4278190080, R0, R1 -ff1050e2| 1 plan9 SUB.S $255, R0, R1 -ff1450e2| 1 plan9 SUB.S $4278190080, R0, R1 -ff0040e2| 1 plan9 SUB $255, R0, R0 -ff0440e2| 1 plan9 SUB $4278190080, R0, R0 -ff0050e2| 1 plan9 SUB.S $255, R0, R0 -ff0450e2| 1 plan9 SUB.S $4278190080, R0, R0 -002041e0| 1 plan9 SUB R0, R1, R2 -002051e0| 1 plan9 SUB.S R0, R1, R2 -001041e0| 1 plan9 SUB R0, R1, R1 -001051e0| 1 plan9 SUB.S R0, R1, R1 -202e41e0| 1 plan9 SUB R0>>$28, R1, R2 -002e41e0| 1 plan9 SUB R0<<$28, R1, R2 -402e41e0| 1 plan9 SUB R0->$28, R1, R2 -602e41e0| 1 plan9 SUB R0@>$28, R1, R2 -202e51e0| 1 plan9 SUB.S R0>>$28, R1, R2 -002e51e0| 1 plan9 SUB.S R0<<$28, R1, R2 -402e51e0| 1 plan9 SUB.S R0->$28, R1, R2 -602e51e0| 1 plan9 SUB.S R0@>$28, R1, R2 -001e41e0| 1 plan9 SUB R0<<$28, R1, R1 -201e41e0| 1 plan9 SUB R0>>$28, R1, R1 -401e41e0| 1 plan9 SUB R0->$28, R1, R1 -601e41e0| 1 plan9 SUB R0@>$28, R1, R1 -001e51e0| 1 plan9 SUB.S R0<<$28, R1, R1 -201e51e0| 1 plan9 SUB.S R0>>$28, R1, R1 -401e51e0| 1 plan9 SUB.S R0->$28, R1, R1 -601e51e0| 1 plan9 SUB.S R0@>$28, R1, R1 -103142e0| 1 plan9 SUB R0<>R1, R2, R3 -503142e0| 1 plan9 SUB R0->R1, R2, R3 -703142e0| 1 plan9 SUB R0@>R1, R2, R3 -103152e0| 1 plan9 SUB.S R0<>R1, R2, R3 -503152e0| 1 plan9 SUB.S R0->R1, R2, R3 -703152e0| 1 plan9 SUB.S R0@>R1, R2, R3 -102142e0| 1 plan9 SUB R0<>R1, R2, R2 -502142e0| 1 plan9 SUB R0->R1, R2, R2 -702142e0| 1 plan9 SUB R0@>R1, R2, R2 -102152e0| 1 plan9 SUB.S R0<>R1, R2, R2 -502152e0| 1 plan9 SUB.S R0->R1, R2, R2 -702152e0| 1 plan9 SUB.S R0@>R1, R2, R2 -ff10c0e2| 1 plan9 SBC $255, R0, R1 -ff14c0e2| 1 plan9 SBC $4278190080, R0, R1 -ff10d0e2| 1 plan9 SBC.S $255, R0, R1 -ff14d0e2| 1 plan9 SBC.S $4278190080, R0, R1 -ff00c0e2| 1 plan9 SBC $255, R0, R0 -ff04c0e2| 1 plan9 SBC $4278190080, R0, R0 -ff00d0e2| 1 plan9 SBC.S $255, R0, R0 -ff04d0e2| 1 plan9 SBC.S $4278190080, R0, R0 -0020c1e0| 1 plan9 SBC R0, R1, R2 -0020d1e0| 1 plan9 SBC.S R0, R1, R2 -0010c1e0| 1 plan9 SBC R0, R1, R1 -0010d1e0| 1 plan9 SBC.S R0, R1, R1 -202ec1e0| 1 plan9 SBC R0>>$28, R1, R2 -002ec1e0| 1 plan9 SBC R0<<$28, R1, R2 -402ec1e0| 1 plan9 SBC R0->$28, R1, R2 -602ec1e0| 1 plan9 SBC R0@>$28, R1, R2 -202ed1e0| 1 plan9 SBC.S R0>>$28, R1, R2 -002ed1e0| 1 plan9 SBC.S R0<<$28, R1, R2 -402ed1e0| 1 plan9 SBC.S R0->$28, R1, R2 -602ed1e0| 1 plan9 SBC.S R0@>$28, R1, R2 -001ec1e0| 1 plan9 SBC R0<<$28, R1, R1 -201ec1e0| 1 plan9 SBC R0>>$28, R1, R1 -401ec1e0| 1 plan9 SBC R0->$28, R1, R1 -601ec1e0| 1 plan9 SBC R0@>$28, R1, R1 -001ed1e0| 1 plan9 SBC.S R0<<$28, R1, R1 -201ed1e0| 1 plan9 SBC.S R0>>$28, R1, R1 -401ed1e0| 1 plan9 SBC.S R0->$28, R1, R1 -601ed1e0| 1 plan9 SBC.S R0@>$28, R1, R1 -1031c2e0| 1 plan9 SBC R0<>R1, R2, R3 -5031c2e0| 1 plan9 SBC R0->R1, R2, R3 -7031c2e0| 1 plan9 SBC R0@>R1, R2, R3 -1031d2e0| 1 plan9 SBC.S R0<>R1, R2, R3 -5031d2e0| 1 plan9 SBC.S R0->R1, R2, R3 -7031d2e0| 1 plan9 SBC.S R0@>R1, R2, R3 -1021c2e0| 1 plan9 SBC R0<>R1, R2, R2 -5021c2e0| 1 plan9 SBC R0->R1, R2, R2 -7021c2e0| 1 plan9 SBC R0@>R1, R2, R2 -1021d2e0| 1 plan9 SBC.S R0<>R1, R2, R2 -5021d2e0| 1 plan9 SBC.S R0->R1, R2, R2 -7021d2e0| 1 plan9 SBC.S R0@>R1, R2, R2 -ff1060e2| 1 plan9 RSB $255, R0, R1 -ff1460e2| 1 plan9 RSB $4278190080, R0, R1 -ff1070e2| 1 plan9 RSB.S $255, R0, R1 -ff1470e2| 1 plan9 RSB.S $4278190080, R0, R1 -ff0060e2| 1 plan9 RSB $255, R0, R0 -ff0460e2| 1 plan9 RSB $4278190080, R0, R0 -ff0070e2| 1 plan9 RSB.S $255, R0, R0 -ff0470e2| 1 plan9 RSB.S $4278190080, R0, R0 -002061e0| 1 plan9 RSB R0, R1, R2 -002071e0| 1 plan9 RSB.S R0, R1, R2 -001061e0| 1 plan9 RSB R0, R1, R1 -001071e0| 1 plan9 RSB.S R0, R1, R1 -202e61e0| 1 plan9 RSB R0>>$28, R1, R2 -002e61e0| 1 plan9 RSB R0<<$28, R1, R2 -402e61e0| 1 plan9 RSB R0->$28, R1, R2 -602e61e0| 1 plan9 RSB R0@>$28, R1, R2 -202e71e0| 1 plan9 RSB.S R0>>$28, R1, R2 -002e71e0| 1 plan9 RSB.S R0<<$28, R1, R2 -402e71e0| 1 plan9 RSB.S R0->$28, R1, R2 -602e71e0| 1 plan9 RSB.S R0@>$28, R1, R2 -001e61e0| 1 plan9 RSB R0<<$28, R1, R1 -201e61e0| 1 plan9 RSB R0>>$28, R1, R1 -401e61e0| 1 plan9 RSB R0->$28, R1, R1 -601e61e0| 1 plan9 RSB R0@>$28, R1, R1 -001e71e0| 1 plan9 RSB.S R0<<$28, R1, R1 -201e71e0| 1 plan9 RSB.S R0>>$28, R1, R1 -401e71e0| 1 plan9 RSB.S R0->$28, R1, R1 -601e71e0| 1 plan9 RSB.S R0@>$28, R1, R1 -103162e0| 1 plan9 RSB R0<>R1, R2, R3 -503162e0| 1 plan9 RSB R0->R1, R2, R3 -703162e0| 1 plan9 RSB R0@>R1, R2, R3 -103172e0| 1 plan9 RSB.S R0<>R1, R2, R3 -503172e0| 1 plan9 RSB.S R0->R1, R2, R3 -703172e0| 1 plan9 RSB.S R0@>R1, R2, R3 -102162e0| 1 plan9 RSB R0<>R1, R2, R2 -502162e0| 1 plan9 RSB R0->R1, R2, R2 -702162e0| 1 plan9 RSB R0@>R1, R2, R2 -102172e0| 1 plan9 RSB.S R0<>R1, R2, R2 -502172e0| 1 plan9 RSB.S R0->R1, R2, R2 -702172e0| 1 plan9 RSB.S R0@>R1, R2, R2 -ff10e0e2| 1 plan9 RSC $255, R0, R1 -ff14e0e2| 1 plan9 RSC $4278190080, R0, R1 -ff10f0e2| 1 plan9 RSC.S $255, R0, R1 -ff14f0e2| 1 plan9 RSC.S $4278190080, R0, R1 -ff00e0e2| 1 plan9 RSC $255, R0, R0 -ff04e0e2| 1 plan9 RSC $4278190080, R0, R0 -ff00f0e2| 1 plan9 RSC.S $255, R0, R0 -ff04f0e2| 1 plan9 RSC.S $4278190080, R0, R0 -0020e1e0| 1 plan9 RSC R0, R1, R2 -0020f1e0| 1 plan9 RSC.S R0, R1, R2 -0010e1e0| 1 plan9 RSC R0, R1, R1 -0010f1e0| 1 plan9 RSC.S R0, R1, R1 -202ee1e0| 1 plan9 RSC R0>>$28, R1, R2 -002ee1e0| 1 plan9 RSC R0<<$28, R1, R2 -402ee1e0| 1 plan9 RSC R0->$28, R1, R2 -602ee1e0| 1 plan9 RSC R0@>$28, R1, R2 -202ef1e0| 1 plan9 RSC.S R0>>$28, R1, R2 -002ef1e0| 1 plan9 RSC.S R0<<$28, R1, R2 -402ef1e0| 1 plan9 RSC.S R0->$28, R1, R2 -602ef1e0| 1 plan9 RSC.S R0@>$28, R1, R2 -001ee1e0| 1 plan9 RSC R0<<$28, R1, R1 -201ee1e0| 1 plan9 RSC R0>>$28, R1, R1 -401ee1e0| 1 plan9 RSC R0->$28, R1, R1 -601ee1e0| 1 plan9 RSC R0@>$28, R1, R1 -001ef1e0| 1 plan9 RSC.S R0<<$28, R1, R1 -201ef1e0| 1 plan9 RSC.S R0>>$28, R1, R1 -401ef1e0| 1 plan9 RSC.S R0->$28, R1, R1 -601ef1e0| 1 plan9 RSC.S R0@>$28, R1, R1 -1031e2e0| 1 plan9 RSC R0<>R1, R2, R3 -5031e2e0| 1 plan9 RSC R0->R1, R2, R3 -7031e2e0| 1 plan9 RSC R0@>R1, R2, R3 -1031f2e0| 1 plan9 RSC.S R0<>R1, R2, R3 -5031f2e0| 1 plan9 RSC.S R0->R1, R2, R3 -7031f2e0| 1 plan9 RSC.S R0@>R1, R2, R3 -1021e2e0| 1 plan9 RSC R0<>R1, R2, R2 -5021e2e0| 1 plan9 RSC R0->R1, R2, R2 -7021e2e0| 1 plan9 RSC R0@>R1, R2, R2 -1021f2e0| 1 plan9 RSC.S R0<>R1, R2, R2 -5021f2e0| 1 plan9 RSC.S R0->R1, R2, R2 -7021f2e0| 1 plan9 RSC.S R0@>R1, R2, R2 -ff1080e2| 1 plan9 ADD $255, R0, R1 -ff1480e2| 1 plan9 ADD $4278190080, R0, R1 -ff1090e2| 1 plan9 ADD.S $255, R0, R1 -ff1490e2| 1 plan9 ADD.S $4278190080, R0, R1 -ff0080e2| 1 plan9 ADD $255, R0, R0 -ff0480e2| 1 plan9 ADD $4278190080, R0, R0 -ff0090e2| 1 plan9 ADD.S $255, R0, R0 -ff0490e2| 1 plan9 ADD.S $4278190080, R0, R0 -002081e0| 1 plan9 ADD R0, R1, R2 -002091e0| 1 plan9 ADD.S R0, R1, R2 -001081e0| 1 plan9 ADD R0, R1, R1 -001091e0| 1 plan9 ADD.S R0, R1, R1 -202e81e0| 1 plan9 ADD R0>>$28, R1, R2 -002e81e0| 1 plan9 ADD R0<<$28, R1, R2 -402e81e0| 1 plan9 ADD R0->$28, R1, R2 -602e81e0| 1 plan9 ADD R0@>$28, R1, R2 -202e91e0| 1 plan9 ADD.S R0>>$28, R1, R2 -002e91e0| 1 plan9 ADD.S R0<<$28, R1, R2 -402e91e0| 1 plan9 ADD.S R0->$28, R1, R2 -602e91e0| 1 plan9 ADD.S R0@>$28, R1, R2 -001e81e0| 1 plan9 ADD R0<<$28, R1, R1 -201e81e0| 1 plan9 ADD R0>>$28, R1, R1 -401e81e0| 1 plan9 ADD R0->$28, R1, R1 -601e81e0| 1 plan9 ADD R0@>$28, R1, R1 -001e91e0| 1 plan9 ADD.S R0<<$28, R1, R1 -201e91e0| 1 plan9 ADD.S R0>>$28, R1, R1 -401e91e0| 1 plan9 ADD.S R0->$28, R1, R1 -601e91e0| 1 plan9 ADD.S R0@>$28, R1, R1 -103182e0| 1 plan9 ADD R0<>R1, R2, R3 -503182e0| 1 plan9 ADD R0->R1, R2, R3 -703182e0| 1 plan9 ADD R0@>R1, R2, R3 -103192e0| 1 plan9 ADD.S R0<>R1, R2, R3 -503192e0| 1 plan9 ADD.S R0->R1, R2, R3 -703192e0| 1 plan9 ADD.S R0@>R1, R2, R3 -102182e0| 1 plan9 ADD R0<>R1, R2, R2 -502182e0| 1 plan9 ADD R0->R1, R2, R2 -702182e0| 1 plan9 ADD R0@>R1, R2, R2 -102192e0| 1 plan9 ADD.S R0<>R1, R2, R2 -502192e0| 1 plan9 ADD.S R0->R1, R2, R2 -702192e0| 1 plan9 ADD.S R0@>R1, R2, R2 -ff10a0e2| 1 plan9 ADC $255, R0, R1 -ff14a0e2| 1 plan9 ADC $4278190080, R0, R1 -ff10b0e2| 1 plan9 ADC.S $255, R0, R1 -ff14b0e2| 1 plan9 ADC.S $4278190080, R0, R1 -ff00a0e2| 1 plan9 ADC $255, R0, R0 -ff04a0e2| 1 plan9 ADC $4278190080, R0, R0 -ff00b0e2| 1 plan9 ADC.S $255, R0, R0 -ff04b0e2| 1 plan9 ADC.S $4278190080, R0, R0 -0020a1e0| 1 plan9 ADC R0, R1, R2 -0020b1e0| 1 plan9 ADC.S R0, R1, R2 -0010a1e0| 1 plan9 ADC R0, R1, R1 -0010b1e0| 1 plan9 ADC.S R0, R1, R1 -202ea1e0| 1 plan9 ADC R0>>$28, R1, R2 -002ea1e0| 1 plan9 ADC R0<<$28, R1, R2 -402ea1e0| 1 plan9 ADC R0->$28, R1, R2 -602ea1e0| 1 plan9 ADC R0@>$28, R1, R2 -202eb1e0| 1 plan9 ADC.S R0>>$28, R1, R2 -002eb1e0| 1 plan9 ADC.S R0<<$28, R1, R2 -402eb1e0| 1 plan9 ADC.S R0->$28, R1, R2 -602eb1e0| 1 plan9 ADC.S R0@>$28, R1, R2 -001ea1e0| 1 plan9 ADC R0<<$28, R1, R1 -201ea1e0| 1 plan9 ADC R0>>$28, R1, R1 -401ea1e0| 1 plan9 ADC R0->$28, R1, R1 -601ea1e0| 1 plan9 ADC R0@>$28, R1, R1 -001eb1e0| 1 plan9 ADC.S R0<<$28, R1, R1 -201eb1e0| 1 plan9 ADC.S R0>>$28, R1, R1 -401eb1e0| 1 plan9 ADC.S R0->$28, R1, R1 -601eb1e0| 1 plan9 ADC.S R0@>$28, R1, R1 -1031a2e0| 1 plan9 ADC R0<>R1, R2, R3 -5031a2e0| 1 plan9 ADC R0->R1, R2, R3 -7031a2e0| 1 plan9 ADC R0@>R1, R2, R3 -1031b2e0| 1 plan9 ADC.S R0<>R1, R2, R3 -5031b2e0| 1 plan9 ADC.S R0->R1, R2, R3 -7031b2e0| 1 plan9 ADC.S R0@>R1, R2, R3 -1021a2e0| 1 plan9 ADC R0<>R1, R2, R2 -5021a2e0| 1 plan9 ADC R0->R1, R2, R2 -7021a2e0| 1 plan9 ADC R0@>R1, R2, R2 -1021b2e0| 1 plan9 ADC.S R0<>R1, R2, R2 -5021b2e0| 1 plan9 ADC.S R0->R1, R2, R2 -7021b2e0| 1 plan9 ADC.S R0@>R1, R2, R2 -ff0037e3| 1 plan9 TEQ $255, R7 -ff0439e3| 1 plan9 TEQ $4278190080, R9 -090f37e1| 1 plan9 TEQ R9<<$30, R7 -290f37e1| 1 plan9 TEQ R9>>$30, R7 -490f37e1| 1 plan9 TEQ R9->$30, R7 -690f37e1| 1 plan9 TEQ R9@>$30, R7 -190837e1| 1 plan9 TEQ R9<>R8, R7 -590837e1| 1 plan9 TEQ R9->R8, R7 -790837e1| 1 plan9 TEQ R9@>R8, R7 -ff0017e3| 1 plan9 TST $255, R7 -ff0419e3| 1 plan9 TST $4278190080, R9 -090f17e1| 1 plan9 TST R9<<$30, R7 -290f17e1| 1 plan9 TST R9>>$30, R7 -490f17e1| 1 plan9 TST R9->$30, R7 -690f17e1| 1 plan9 TST R9@>$30, R7 -190817e1| 1 plan9 TST R9<>R8, R7 -590817e1| 1 plan9 TST R9->R8, R7 -790817e1| 1 plan9 TST R9@>R8, R7 -ff0057e3| 1 plan9 CMP $255, R7 -ff0459e3| 1 plan9 CMP $4278190080, R9 -090f57e1| 1 plan9 CMP R9<<$30, R7 -290f57e1| 1 plan9 CMP R9>>$30, R7 -490f57e1| 1 plan9 CMP R9->$30, R7 -690f57e1| 1 plan9 CMP R9@>$30, R7 -190857e1| 1 plan9 CMP R9<>R8, R7 -590857e1| 1 plan9 CMP R9->R8, R7 -790857e1| 1 plan9 CMP R9@>R8, R7 -ff0077e3| 1 plan9 CMN $255, R7 -ff0479e3| 1 plan9 CMN $4278190080, R9 -090f77e1| 1 plan9 CMN R9<<$30, R7 -290f77e1| 1 plan9 CMN R9>>$30, R7 -490f77e1| 1 plan9 CMN R9->$30, R7 -690f77e1| 1 plan9 CMN R9@>$30, R7 -190877e1| 1 plan9 CMN R9<>R8, R7 -590877e1| 1 plan9 CMN R9->R8, R7 -790877e1| 1 plan9 CMN R9@>R8, R7 -0c00000a| 1 plan9 B.EQ 0x38 -0b00001a| 1 plan9 B.NE 0x34 -0a00002a| 1 plan9 B.CS 0x30 -0900003a| 1 plan9 B.CC 0x2c -0800004a| 1 plan9 B.MI 0x28 -0700005a| 1 plan9 B.PL 0x24 -0600006a| 1 plan9 B.VS 0x20 -0500007a| 1 plan9 B.VC 0x1c -0400008a| 1 plan9 B.HI 0x18 -0300009a| 1 plan9 B.LS 0x14 -020000aa| 1 plan9 B.GE 0x10 -010000ba| 1 plan9 B.LT 0xc -000000ca| 1 plan9 B.GT 0x8 -ffffffda| 1 plan9 B.LE 0x4 -fdffffea| 1 plan9 B 0xfffffffc -fcffffea| 1 plan9 B 0xfffffff8 -fbffffea| 1 plan9 B 0xfffffff4 -faffffea| 1 plan9 B 0xfffffff0 -f9ffffea| 1 plan9 B 0xffffffec -feffffea| 1 plan9 B 0x0 -0c00000b| 1 plan9 BL.EQ 0x38 -0b00001b| 1 plan9 BL.NE 0x34 -0a00002b| 1 plan9 BL.CS 0x30 -0900003b| 1 plan9 BL.CC 0x2c -0800004b| 1 plan9 BL.MI 0x28 -0700005b| 1 plan9 BL.PL 0x24 -0600006b| 1 plan9 BL.VS 0x20 -0500007b| 1 plan9 BL.VC 0x1c -0400008b| 1 plan9 BL.HI 0x18 -0300009b| 1 plan9 BL.LS 0x14 -020000ab| 1 plan9 BL.GE 0x10 -010000bb| 1 plan9 BL.LT 0xc -000000cb| 1 plan9 BL.GT 0x8 -ffffffdb| 1 plan9 BL.LE 0x4 -fdffffeb| 1 plan9 BL 0xfffffffc -fcffffeb| 1 plan9 BL 0xfffffff8 -fbffffeb| 1 plan9 BL 0xfffffff4 -faffffeb| 1 plan9 BL 0xfffffff0 -f9ffffeb| 1 plan9 BL 0xffffffec -feffffeb| 1 plan9 BL 0x0 -ff10c0e3| 1 plan9 BIC $255, R0, R1 -ff14c0e3| 1 plan9 BIC $4278190080, R0, R1 -ff10d0e3| 1 plan9 BIC.S $255, R0, R1 -ff14d0e3| 1 plan9 BIC.S $4278190080, R0, R1 -ff00c0e3| 1 plan9 BIC $255, R0, R0 -ff04c0e3| 1 plan9 BIC $4278190080, R0, R0 -ff00d0e3| 1 plan9 BIC.S $255, R0, R0 -ff04d0e3| 1 plan9 BIC.S $4278190080, R0, R0 -0020c1e1| 1 plan9 BIC R0, R1, R2 -0020d1e1| 1 plan9 BIC.S R0, R1, R2 -0010c1e1| 1 plan9 BIC R0, R1, R1 -0010d1e1| 1 plan9 BIC.S R0, R1, R1 -202ec1e1| 1 plan9 BIC R0>>$28, R1, R2 -002ec1e1| 1 plan9 BIC R0<<$28, R1, R2 -402ec1e1| 1 plan9 BIC R0->$28, R1, R2 -602ec1e1| 1 plan9 BIC R0@>$28, R1, R2 -202ed1e1| 1 plan9 BIC.S R0>>$28, R1, R2 -002ed1e1| 1 plan9 BIC.S R0<<$28, R1, R2 -402ed1e1| 1 plan9 BIC.S R0->$28, R1, R2 -602ed1e1| 1 plan9 BIC.S R0@>$28, R1, R2 -001ec1e1| 1 plan9 BIC R0<<$28, R1, R1 -201ec1e1| 1 plan9 BIC R0>>$28, R1, R1 -401ec1e1| 1 plan9 BIC R0->$28, R1, R1 -601ec1e1| 1 plan9 BIC R0@>$28, R1, R1 -001ed1e1| 1 plan9 BIC.S R0<<$28, R1, R1 -201ed1e1| 1 plan9 BIC.S R0>>$28, R1, R1 -401ed1e1| 1 plan9 BIC.S R0->$28, R1, R1 -601ed1e1| 1 plan9 BIC.S R0@>$28, R1, R1 -1031c2e1| 1 plan9 BIC R0<>R1, R2, R3 -5031c2e1| 1 plan9 BIC R0->R1, R2, R3 -7031c2e1| 1 plan9 BIC R0@>R1, R2, R3 -1031d2e1| 1 plan9 BIC.S R0<>R1, R2, R3 -5031d2e1| 1 plan9 BIC.S R0->R1, R2, R3 -7031d2e1| 1 plan9 BIC.S R0@>R1, R2, R3 -1021c2e1| 1 plan9 BIC R0<>R1, R2, R2 -5021c2e1| 1 plan9 BIC R0->R1, R2, R2 -7021c2e1| 1 plan9 BIC R0@>R1, R2, R2 -1021d2e1| 1 plan9 BIC.S R0<>R1, R2, R2 -5021d2e1| 1 plan9 BIC.S R0->R1, R2, R2 -7021d2e1| 1 plan9 BIC.S R0@>R1, R2, R2 -2567a0e1| 1 plan9 LSR $14, R5, R6 -a567a0e1| 1 plan9 LSR $15, R5, R6 -256fa0e1| 1 plan9 LSR $30, R5, R6 -a56fa0e1| 1 plan9 LSR $31, R5, R6 -2567b0e1| 1 plan9 LSR.S $14, R5, R6 -a567b0e1| 1 plan9 LSR.S $15, R5, R6 -256fb0e1| 1 plan9 LSR.S $30, R5, R6 -a56fb0e1| 1 plan9 LSR.S $31, R5, R6 -2557a0e1| 1 plan9 LSR $14, R5, R5 -a557a0e1| 1 plan9 LSR $15, R5, R5 -255fa0e1| 1 plan9 LSR $30, R5, R5 -a55fa0e1| 1 plan9 LSR $31, R5, R5 -2557b0e1| 1 plan9 LSR.S $14, R5, R5 -a557b0e1| 1 plan9 LSR.S $15, R5, R5 -255fb0e1| 1 plan9 LSR.S $30, R5, R5 -a55fb0e1| 1 plan9 LSR.S $31, R5, R5 -3675a0e1| 1 plan9 LSR R5, R6, R7 -3675b0e1| 1 plan9 LSR.S R5, R6, R7 -3775a0e1| 1 plan9 LSR R5, R7, R7 -3775b0e1| 1 plan9 LSR.S R5, R7, R7 -4567a0e1| 1 plan9 ASR $14, R5, R6 -c567a0e1| 1 plan9 ASR $15, R5, R6 -456fa0e1| 1 plan9 ASR $30, R5, R6 -c56fa0e1| 1 plan9 ASR $31, R5, R6 -4567b0e1| 1 plan9 ASR.S $14, R5, R6 -c567b0e1| 1 plan9 ASR.S $15, R5, R6 -456fb0e1| 1 plan9 ASR.S $30, R5, R6 -c56fb0e1| 1 plan9 ASR.S $31, R5, R6 -4557a0e1| 1 plan9 ASR $14, R5, R5 -c557a0e1| 1 plan9 ASR $15, R5, R5 -455fa0e1| 1 plan9 ASR $30, R5, R5 -c55fa0e1| 1 plan9 ASR $31, R5, R5 -4557b0e1| 1 plan9 ASR.S $14, R5, R5 -c557b0e1| 1 plan9 ASR.S $15, R5, R5 -455fb0e1| 1 plan9 ASR.S $30, R5, R5 -c55fb0e1| 1 plan9 ASR.S $31, R5, R5 -5675a0e1| 1 plan9 ASR R5, R6, R7 -5675b0e1| 1 plan9 ASR.S R5, R6, R7 -5775a0e1| 1 plan9 ASR R5, R7, R7 -5775b0e1| 1 plan9 ASR.S R5, R7, R7 -0567a0e1| 1 plan9 LSL $14, R5, R6 -8567a0e1| 1 plan9 LSL $15, R5, R6 -056fa0e1| 1 plan9 LSL $30, R5, R6 -856fa0e1| 1 plan9 LSL $31, R5, R6 -0567b0e1| 1 plan9 LSL.S $14, R5, R6 -8567b0e1| 1 plan9 LSL.S $15, R5, R6 -056fb0e1| 1 plan9 LSL.S $30, R5, R6 -856fb0e1| 1 plan9 LSL.S $31, R5, R6 -0557a0e1| 1 plan9 LSL $14, R5, R5 -8557a0e1| 1 plan9 LSL $15, R5, R5 -055fa0e1| 1 plan9 LSL $30, R5, R5 -855fa0e1| 1 plan9 LSL $31, R5, R5 -0557b0e1| 1 plan9 LSL.S $14, R5, R5 -8557b0e1| 1 plan9 LSL.S $15, R5, R5 -055fb0e1| 1 plan9 LSL.S $30, R5, R5 -855fb0e1| 1 plan9 LSL.S $31, R5, R5 -1675a0e1| 1 plan9 LSL R5, R6, R7 -1675b0e1| 1 plan9 LSL.S R5, R6, R7 -1775a0e1| 1 plan9 LSL R5, R7, R7 -1775b0e1| 1 plan9 LSL.S R5, R7, R7 -c23124e1| 1 plan9 SMLAWT R1, R2, R3, R4 -823124e1| 1 plan9 SMLAWB R1, R2, R3, R4 -923164e0| 1 plan9 MLS R1, R2, R3, R4 -923124e0| 1 plan9 MLA R1, R2, R3, R4 -923134e0| 1 plan9 MLA.S R1, R2, R3, R4 -123154e7| 1 plan9 SMMLA R1, R2, R3, R4 -d23154e7| 1 plan9 SMMLS R1, R2, R3, R4 -823104e1| 1 plan9 SMLABB R1, R2, R3, R4 -a23104e1| 1 plan9 SMLATB R1, R2, R3, R4 -c23104e1| 1 plan9 SMLABT R1, R2, R3, R4 -e23104e1| 1 plan9 SMLATT R1, R2, R3, R4 -123104e7| 1 plan9 SMLAD R1, R2, R3, R4 -323104e7| 1 plan9 SMLAD.X R1, R2, R3, R4 -523104e7| 1 plan9 SMLSD R1, R2, R3, R4 -723104e7| 1 plan9 SMLSD.X R1, R2, R3, R4 -9231e4e0| 1 plan9 SMLAL R1, R2, R4, R3 -9231f4e0| 1 plan9 SMLAL.S R1, R2, R4, R3 -123144e7| 1 plan9 SMLALD R1, R2, R4, R3 -323144e7| 1 plan9 SMLALD.X R1, R2, R4, R3 -523144e7| 1 plan9 SMLSLD R1, R2, R4, R3 -723144e7| 1 plan9 SMLSLD.X R1, R2, R4, R3 -9231a4e0| 1 plan9 UMLAL R1, R2, R4, R3 -923144e0| 1 plan9 UMAAL R1, R2, R4, R3 -9231b4e0| 1 plan9 UMLAL.S R1, R2, R4, R3 -930204e0| 1 plan9 MUL R2, R3, R4 -920404e0| 1 plan9 MUL R4, R2, R4 -930214e0| 1 plan9 MUL.S R2, R3, R4 -920414e0| 1 plan9 MUL.S R4, R2, R4 -960507e0| 1 plan9 MUL R5, R6, R7 -950707e0| 1 plan9 MUL R7, R5, R7 -960517e0| 1 plan9 MUL.S R5, R6, R7 -950717e0| 1 plan9 MUL.S R7, R5, R7 -923184e0| 1 plan9 UMULL R1, R2, R4, R3 -923194e0| 1 plan9 UMULL.S R1, R2, R4, R3 -9231c4e0| 1 plan9 SMULL R1, R2, R4, R3 -9231d4e0| 1 plan9 SMULL.S R1, R2, R4, R3 -12f153e7| 1 plan9 SMMUL R1, R2, R3 -820163e1| 1 plan9 SMULBB R1, R2, R3 -a20163e1| 1 plan9 SMULTB R1, R2, R3 -c20163e1| 1 plan9 SMULBT R1, R2, R3 -e20163e1| 1 plan9 SMULTT R1, R2, R3 -a20123e1| 1 plan9 SMULWB R1, R2, R3 -e20123e1| 1 plan9 SMULWT R1, R2, R3 -12f103e7| 1 plan9 SMUAD R1, R2, R3 -32f103e7| 1 plan9 SMUAD.X R1, R2, R3 -52f103e7| 1 plan9 SMUSD R1, R2, R3 -72f103e7| 1 plan9 SMUSD.X R1, R2, R3 -312fbfe6| 1 plan9 REV R1, R2 -b12fbfe6| 1 plan9 REV16 R1, R2 -b12fffe6| 1 plan9 REVSH R1, R2 -312fffe6| 1 plan9 RBIT R1, R2 -112f6fe1| 1 plan9 CLZ R1, R2 -f0ffd6f5| 1 plan9 PLD 0xff0(R6) -f0ff59f5| 1 plan9 PLD -0xff0(R9) -f0ff96f5| 1 plan9 PLD.W 0xff0(R6) -f0ff19f5| 1 plan9 PLD.W -0xff0(R9) -f0ffdff5| 1 plan9 PLD 0xff0(R15) -f0ff5ff5| 1 plan9 PLD -0xff0(R15) -00f0d2f7| 1 plan9 PLD (R2)(R0) -00f052f7| 1 plan9 PLD.U (R2)(R0) -00f092f7| 1 plan9 PLD.W (R2)(R0) -00f012f7| 1 plan9 PLD.W.U (R2)(R0) -80f0d2f7| 1 plan9 PLD (R2)(R0<<1) -80f052f7| 1 plan9 PLD.U (R2)(R0<<1) -a0f0d2f7| 1 plan9 PLD (R2)(R0>>1) -a0f052f7| 1 plan9 PLD.U (R2)(R0>>1) -c0f0d2f7| 1 plan9 PLD (R2)(R0->1) -c0f052f7| 1 plan9 PLD.U (R2)(R0->1) -e0f0d2f7| 1 plan9 PLD (R2)(R0@>1) -e0f052f7| 1 plan9 PLD.U (R2)(R0@>1) -80f092f7| 1 plan9 PLD.W (R2)(R0<<1) -80f012f7| 1 plan9 PLD.W.U (R2)(R0<<1) -a0f092f7| 1 plan9 PLD.W (R2)(R0>>1) -a0f012f7| 1 plan9 PLD.W.U (R2)(R0>>1) -c0f092f7| 1 plan9 PLD.W (R2)(R0->1) -c0f012f7| 1 plan9 PLD.W.U (R2)(R0->1) -e0f092f7| 1 plan9 PLD.W (R2)(R0@>1) -e0f012f7| 1 plan9 PLD.W.U (R2)(R0@>1) -f0ffd2f4| 1 plan9 PLI 0xff0(R2) -f0ff52f4| 1 plan9 PLI -0xff0(R2) -00f0d2f6| 1 plan9 PLI (R2)(R0) -00f052f6| 1 plan9 PLI.U (R2)(R0) -82f0d3f6| 1 plan9 PLI (R3)(R2<<1) -82f053f6| 1 plan9 PLI.U (R3)(R2<<1) -a2f0d3f6| 1 plan9 PLI (R3)(R2>>1) -a2f053f6| 1 plan9 PLI.U (R3)(R2>>1) -c2f0d3f6| 1 plan9 PLI (R3)(R2->1) -c2f053f6| 1 plan9 PLI.U (R3)(R2->1) -e2f0d3f6| 1 plan9 PLI (R3)(R2@>1) -e2f053f6| 1 plan9 PLI.U (R3)(R2@>1) -939007e1| 1 plan9 SWP R3, (R7), R9 -948042e1| 1 plan9 SWP.B R4, (R2), R8 -000000ef| 1 plan9 SVC $0 -ffff00ef| 1 plan9 SVC $65535 -ff10e0e3| 1 plan9 MVN $255, R1 -ff14e0e3| 1 plan9 MVN $4278190080, R1 -ff10f0e3| 1 plan9 MVN.S $255, R1 -ff14f0e3| 1 plan9 MVN.S $4278190080, R1 -097fe0e1| 1 plan9 MVN R9<<$30, R7 -297fe0e1| 1 plan9 MVN R9>>$30, R7 -497fe0e1| 1 plan9 MVN R9->$30, R7 -697fe0e1| 1 plan9 MVN R9@>$30, R7 -097ff0e1| 1 plan9 MVN.S R9<<$30, R7 -297ff0e1| 1 plan9 MVN.S R9>>$30, R7 -497ff0e1| 1 plan9 MVN.S R9->$30, R7 -697ff0e1| 1 plan9 MVN.S R9@>$30, R7 -1978e0e1| 1 plan9 MVN R9<>R8, R7 -5978e0e1| 1 plan9 MVN R9->R8, R7 -7978e0e1| 1 plan9 MVN R9@>R8, R7 -1978f0e1| 1 plan9 MVN.S R9<>R8, R7 -5978f0e1| 1 plan9 MVN.S R9->R8, R7 -7978f0e1| 1 plan9 MVN.S R9@>R8, R7 -550081e8| 1 plan9 STM [R0,R2,R4,R6], R1 -5f0f81e8| 1 plan9 STM [R0-R4,R6,R8-R11], R1 -5500a1e8| 1 plan9 STM [R0,R2,R4,R6], R1! -5f0fa1e8| 1 plan9 STM [R0-R4,R6,R8-R11], R1! -550091e8| 1 plan9 LDM [R0,R2,R4,R6], R1 -5f0f91e8| 1 plan9 LDM [R0-R4,R6,R8-R11], R1 -5500b1e8| 1 plan9 LDM [R0,R2,R4,R6], R1! -5f0fb1e8| 1 plan9 LDM [R0-R4,R6,R8-R11], R1! -550001e8| 1 plan9 STMDA [R0,R2,R4,R6], R1 -5f0f01e8| 1 plan9 STMDA [R0-R4,R6,R8-R11], R1 -550021e8| 1 plan9 STMDA [R0,R2,R4,R6], R1! -5f0f21e8| 1 plan9 STMDA [R0-R4,R6,R8-R11], R1! -550011e8| 1 plan9 LDMDA [R0,R2,R4,R6], R1 -5f0f11e8| 1 plan9 LDMDA [R0-R4,R6,R8-R11], R1 -550031e8| 1 plan9 LDMDA [R0,R2,R4,R6], R1! -5f0f31e8| 1 plan9 LDMDA [R0-R4,R6,R8-R11], R1! -550001e9| 1 plan9 STMDB [R0,R2,R4,R6], R1 -5f0f01e9| 1 plan9 STMDB [R0-R4,R6,R8-R11], R1 -550021e9| 1 plan9 STMDB [R0,R2,R4,R6], R1! -5f0f21e9| 1 plan9 STMDB [R0-R4,R6,R8-R11], R1! -550011e9| 1 plan9 LDMDB [R0,R2,R4,R6], R1 -5f0f11e9| 1 plan9 LDMDB [R0-R4,R6,R8-R11], R1 -550031e9| 1 plan9 LDMDB [R0,R2,R4,R6], R1! -5f0f31e9| 1 plan9 LDMDB [R0-R4,R6,R8-R11], R1! -55008ae9| 1 plan9 STMIB [R0,R2,R4,R6], R10 -5f0f8ae9| 1 plan9 STMIB [R0-R4,R6,R8-R11], R10 -5500aae9| 1 plan9 STMIB [R0,R2,R4,R6], R10! -5f0faae9| 1 plan9 STMIB [R0-R4,R6,R8-R11], R10! -55009ae9| 1 plan9 LDMIB [R0,R2,R4,R6], R10 -5f0f9ae9| 1 plan9 LDMIB [R0-R4,R6,R8-R11], R10 -5500bae9| 1 plan9 LDMIB [R0,R2,R4,R6], R10! -5f0fbae9| 1 plan9 LDMIB [R0-R4,R6,R8-R11], R10! -0340a0e1| 1 plan9 MOVW R3, R4 -0920a0e1| 1 plan9 MOVW R9, R2 -ff90a0e3| 1 plan9 MOVW $255, R9 -ff94a0e3| 1 plan9 MOVW $4278190080, R9 -aaaa0a13| 1 plan9 MOVW.NE $43690, R10 -aaaa4a03| 1 plan9 MOVT.EQ $43690, R10 -5110e0e3| 1 plan9 MVN $81, R1 -001082e5| 1 plan9 MOVW R1, (R2) -001082e4| 1 plan9 MOVW.P R1, (R2) -0010a2e5| 1 plan9 MOVW.W R1, (R2) -201082e5| 1 plan9 MOVW R1, 0x20(R2) -201082e4| 1 plan9 MOVW.P R1, 0x20(R2) -2010a2e5| 1 plan9 MOVW.W R1, 0x20(R2) -201002e5| 1 plan9 MOVW R1, -0x20(R2) -201002e4| 1 plan9 MOVW.P R1, -0x20(R2) -201022e5| 1 plan9 MOVW.W R1, -0x20(R2) -001092e5| 1 plan9 MOVW (R2), R1 -001092e4| 1 plan9 MOVW.P (R2), R1 -0010b2e5| 1 plan9 MOVW.W (R2), R1 -201092e5| 1 plan9 MOVW 0x20(R2), R1 -201092e4| 1 plan9 MOVW.P 0x20(R2), R1 -2010b2e5| 1 plan9 MOVW.W 0x20(R2), R1 -201012e5| 1 plan9 MOVW -0x20(R2), R1 -201012e4| 1 plan9 MOVW.P -0x20(R2), R1 -201032e5| 1 plan9 MOVW.W -0x20(R2), R1 -00100fe1| 1 plan9 MOVW APSR, R1 -fef02ce3| 1 plan9 MOVW $254, APSR -fff42ce3| 1 plan9 MOVW $4278190080, APSR -05f02c01| 1 plan9 MOVW.EQ R5, APSR -09f02c11| 1 plan9 MOVW.NE R9, APSR -109af10e| 1 plan9 MOVW.EQ FPSCR, R9 -10aaf1ee| 1 plan9 MOVW FPSCR, R10 -109ae11e| 1 plan9 MOVW.NE R9, FPSCR -10aae1ee| 1 plan9 MOVW R10, FPSCR -202e91e7| 1 plan9 MOVW (R1)(R0>>28), R2 -002e91e7| 1 plan9 MOVW (R1)(R0<<28), R2 -402e91e7| 1 plan9 MOVW (R1)(R0->28), R2 -602e91e7| 1 plan9 MOVW (R1)(R0@>28), R2 -202e11e7| 1 plan9 MOVW.U (R1)(R0>>28), R2 -002e11e7| 1 plan9 MOVW.U (R1)(R0<<28), R2 -402e11e7| 1 plan9 MOVW.U (R1)(R0->28), R2 -602e11e7| 1 plan9 MOVW.U (R1)(R0@>28), R2 -202eb1e7| 1 plan9 MOVW.W (R1)(R0>>28), R2 -002eb1e7| 1 plan9 MOVW.W (R1)(R0<<28), R2 -402eb1e7| 1 plan9 MOVW.W (R1)(R0->28), R2 -602eb1e7| 1 plan9 MOVW.W (R1)(R0@>28), R2 -202e9ae6| 1 plan9 MOVW.P (R10)(R0>>28), R2 -002e9ae6| 1 plan9 MOVW.P (R10)(R0<<28), R2 -402e9ae6| 1 plan9 MOVW.P (R10)(R0->28), R2 -602e9ae6| 1 plan9 MOVW.P (R10)(R0@>28), R2 -202e81e7| 1 plan9 MOVW R2, (R1)(R0>>28) -002e81e7| 1 plan9 MOVW R2, (R1)(R0<<28) -402e81e7| 1 plan9 MOVW R2, (R1)(R0->28) -602e81e7| 1 plan9 MOVW R2, (R1)(R0@>28) -202e01e7| 1 plan9 MOVW.U R2, (R1)(R0>>28) -002e01e7| 1 plan9 MOVW.U R2, (R1)(R0<<28) -402e01e7| 1 plan9 MOVW.U R2, (R1)(R0->28) -602e01e7| 1 plan9 MOVW.U R2, (R1)(R0@>28) -202ea1e7| 1 plan9 MOVW.W R2, (R1)(R0>>28) -002ea1e7| 1 plan9 MOVW.W R2, (R1)(R0<<28) -402ea1e7| 1 plan9 MOVW.W R2, (R1)(R0->28) -602ea1e7| 1 plan9 MOVW.W R2, (R1)(R0@>28) -202e85e6| 1 plan9 MOVW.P R2, (R5)(R0>>28) -002e85e6| 1 plan9 MOVW.P R2, (R5)(R0<<28) -402e85e6| 1 plan9 MOVW.P R2, (R5)(R0->28) -602e85e6| 1 plan9 MOVW.P R2, (R5)(R0@>28) -0010c2e5| 1 plan9 MOVB R1, (R2) -0010c2e4| 1 plan9 MOVB.P R1, (R2) -0010e2e5| 1 plan9 MOVB.W R1, (R2) -2010c2e5| 1 plan9 MOVB R1, 0x20(R2) -2010c2e4| 1 plan9 MOVB.P R1, 0x20(R2) -2010e2e5| 1 plan9 MOVB.W R1, 0x20(R2) -201042e5| 1 plan9 MOVB R1, -0x20(R2) -201042e4| 1 plan9 MOVB.P R1, -0x20(R2) -201062e5| 1 plan9 MOVB.W R1, -0x20(R2) -d010d2e1| 1 plan9 MOVBS (R2), R1 -d010d2e0| 1 plan9 MOVBS.P (R2), R1 -d010f2e1| 1 plan9 MOVBS.W (R2), R1 -d012d2e1| 1 plan9 MOVBS 0x20(R2), R1 -d012d2e0| 1 plan9 MOVBS.P 0x20(R2), R1 -d012f2e1| 1 plan9 MOVBS.W 0x20(R2), R1 -d01252e1| 1 plan9 MOVBS -0x20(R2), R1 -d01252e0| 1 plan9 MOVBS.P -0x20(R2), R1 -d01272e1| 1 plan9 MOVBS.W -0x20(R2), R1 -0010d2e5| 1 plan9 MOVBU (R2), R1 -0010dfe5| 1 plan9 MOVBU (R15), R1 -0020dfe5| 1 plan9 MOVBU (R15), R2 -0010d2e4| 1 plan9 MOVBU.P (R2), R1 -0010f2e5| 1 plan9 MOVBU.W (R2), R1 -2010d2e5| 1 plan9 MOVBU 0x20(R2), R1 -2010d2e4| 1 plan9 MOVBU.P 0x20(R2), R1 -2010f2e5| 1 plan9 MOVBU.W 0x20(R2), R1 -201052e5| 1 plan9 MOVBU -0x20(R2), R1 -201052e4| 1 plan9 MOVBU.P -0x20(R2), R1 -201072e5| 1 plan9 MOVBU.W -0x20(R2), R1 -202ec1e7| 1 plan9 MOVB R2, (R1)(R0>>28) -002ec1e7| 1 plan9 MOVB R2, (R1)(R0<<28) -402ec1e7| 1 plan9 MOVB R2, (R1)(R0->28) -602ec1e7| 1 plan9 MOVB R2, (R1)(R0@>28) -202e41e7| 1 plan9 MOVB.U R2, (R1)(R0>>28) -002e41e7| 1 plan9 MOVB.U R2, (R1)(R0<<28) -402e41e7| 1 plan9 MOVB.U R2, (R1)(R0->28) -602e41e7| 1 plan9 MOVB.U R2, (R1)(R0@>28) -202ee1e7| 1 plan9 MOVB.W R2, (R1)(R0>>28) -002ee1e7| 1 plan9 MOVB.W R2, (R1)(R0<<28) -402ee1e7| 1 plan9 MOVB.W R2, (R1)(R0->28) -602ee1e7| 1 plan9 MOVB.W R2, (R1)(R0@>28) -202e61e7| 1 plan9 MOVB.W.U R2, (R1)(R0>>28) -002e61e7| 1 plan9 MOVB.W.U R2, (R1)(R0<<28) -402e61e7| 1 plan9 MOVB.W.U R2, (R1)(R0->28) -602e61e7| 1 plan9 MOVB.W.U R2, (R1)(R0@>28) -202ec5e6| 1 plan9 MOVB.P R2, (R5)(R0>>28) -002ec5e6| 1 plan9 MOVB.P R2, (R5)(R0<<28) -402ec5e6| 1 plan9 MOVB.P R2, (R5)(R0->28) -602ec5e6| 1 plan9 MOVB.P R2, (R5)(R0@>28) -202ed1e7| 1 plan9 MOVBU (R1)(R0>>28), R2 -002ed1e7| 1 plan9 MOVBU (R1)(R0<<28), R2 -402ed1e7| 1 plan9 MOVBU (R1)(R0->28), R2 -602ed1e7| 1 plan9 MOVBU (R1)(R0@>28), R2 -202e51e7| 1 plan9 MOVBU.U (R1)(R0>>28), R2 -002e51e7| 1 plan9 MOVBU.U (R1)(R0<<28), R2 -402e51e7| 1 plan9 MOVBU.U (R1)(R0->28), R2 -602e51e7| 1 plan9 MOVBU.U (R1)(R0@>28), R2 -202ef1e7| 1 plan9 MOVBU.W (R1)(R0>>28), R2 -002ef1e7| 1 plan9 MOVBU.W (R1)(R0<<28), R2 -402ef1e7| 1 plan9 MOVBU.W (R1)(R0->28), R2 -602ef1e7| 1 plan9 MOVBU.W (R1)(R0@>28), R2 -202e71e7| 1 plan9 MOVBU.W.U (R1)(R0>>28), R2 -002e71e7| 1 plan9 MOVBU.W.U (R1)(R0<<28), R2 -402e71e7| 1 plan9 MOVBU.W.U (R1)(R0->28), R2 -602e71e7| 1 plan9 MOVBU.W.U (R1)(R0@>28), R2 -202edae6| 1 plan9 MOVBU.P (R10)(R0>>28), R2 -002edae6| 1 plan9 MOVBU.P (R10)(R0<<28), R2 -402edae6| 1 plan9 MOVBU.P (R10)(R0->28), R2 -602edae6| 1 plan9 MOVBU.P (R10)(R0@>28), R2 -d02091e1| 1 plan9 MOVBS (R1)(R0), R2 -d02011e1| 1 plan9 MOVBS.U (R1)(R0), R2 -d020b1e1| 1 plan9 MOVBS.W (R1)(R0), R2 -d02091e0| 1 plan9 MOVBS.P (R1)(R0), R2 -b040c3e1| 1 plan9 MOVH R4, (R3) -b032c4e1| 1 plan9 MOVH R3, 0x20(R4) -b032e4e1| 1 plan9 MOVH.W R3, 0x20(R4) -b032c4e0| 1 plan9 MOVH.P R3, 0x20(R4) -b03244e1| 1 plan9 MOVH R3, -0x20(R4) -b03264e1| 1 plan9 MOVH.W R3, -0x20(R4) -b03244e0| 1 plan9 MOVH.P R3, -0x20(R4) -b080d9e1| 1 plan9 MOVHU (R9), R8 -b080f9e1| 1 plan9 MOVHU.W (R9), R8 -b080d9e0| 1 plan9 MOVHU.P (R9), R8 -f080d9e1| 1 plan9 MOVHS (R9), R8 -f080f9e1| 1 plan9 MOVHS.W (R9), R8 -f080d9e0| 1 plan9 MOVHS.P (R9), R8 -b282d9e1| 1 plan9 MOVHU 0x22(R9), R8 -b282f9e1| 1 plan9 MOVHU.W 0x22(R9), R8 -b282d9e0| 1 plan9 MOVHU.P 0x22(R9), R8 -f282d9e1| 1 plan9 MOVHS 0x22(R9), R8 -f282f9e1| 1 plan9 MOVHS.W 0x22(R9), R8 -f282d9e0| 1 plan9 MOVHS.P 0x22(R9), R8 -b48259e1| 1 plan9 MOVHU -0x24(R9), R8 -b48279e1| 1 plan9 MOVHU.W -0x24(R9), R8 -b48259e0| 1 plan9 MOVHU.P -0x24(R9), R8 -f48259e1| 1 plan9 MOVHS -0x24(R9), R8 -f48279e1| 1 plan9 MOVHS.W -0x24(R9), R8 -f48259e0| 1 plan9 MOVHS.P -0x24(R9), R8 -002a310e| 1 plan9 ADDF.EQ F0, F1, F2 -202a310e| 1 plan9 ADDF.EQ S1, F1, F2 -802a31ee| 1 plan9 ADDF F0, S3, F2 -002a71ee| 1 plan9 ADDF F0, F1, S5 -035b340e| 1 plan9 ADDD.EQ F3, F4, F5 -002a321e| 1 plan9 ADDF.NE F0, F2, F2 -035b35ee| 1 plan9 ADDD F3, F5, F5 -402a31ee| 1 plan9 SUBF F0, F1, F2 -602a31ee| 1 plan9 SUBF S1, F1, F2 -c02a31ee| 1 plan9 SUBF F0, S3, F2 -402a71ee| 1 plan9 SUBF F0, F1, S5 -435b340e| 1 plan9 SUBD.EQ F3, F4, F5 -402a321e| 1 plan9 SUBF.NE F0, F2, F2 -435b35ee| 1 plan9 SUBD F3, F5, F5 -002a21ee| 1 plan9 MULF F0, F1, F2 -202a21ee| 1 plan9 MULF S1, F1, F2 -802a21ee| 1 plan9 MULF F0, S3, F2 -002a61ee| 1 plan9 MULF F0, F1, S5 -035b240e| 1 plan9 MULD.EQ F3, F4, F5 -002a221e| 1 plan9 MULF.NE F0, F2, F2 -035b25ee| 1 plan9 MULD F3, F5, F5 -402a21ee| 1 plan9 NMULF F0, F1, F2 -602a21ee| 1 plan9 NMULF S1, F1, F2 -c02a21ee| 1 plan9 NMULF F0, S3, F2 -402a61ee| 1 plan9 NMULF F0, F1, S5 -435b240e| 1 plan9 NMULD.EQ F3, F4, F5 -402a221e| 1 plan9 NMULF.NE F0, F2, F2 -435b25ee| 1 plan9 NMULD F3, F5, F5 -002a01ee| 1 plan9 MULAF F0, F1, F2 -202a01ee| 1 plan9 MULAF S1, F1, F2 -802a01ee| 1 plan9 MULAF F0, S3, F2 -002a41ee| 1 plan9 MULAF F0, F1, S5 -035b040e| 1 plan9 MULAD.EQ F3, F4, F5 -002a021e| 1 plan9 MULAF.NE F0, F2, F2 -035b05ee| 1 plan9 MULAD F3, F5, F5 -402a01ee| 1 plan9 MULSF F0, F1, F2 -602a01ee| 1 plan9 MULSF S1, F1, F2 -c02a01ee| 1 plan9 MULSF F0, S3, F2 -402a41ee| 1 plan9 MULSF F0, F1, S5 -435b040e| 1 plan9 MULSD.EQ F3, F4, F5 -402a021e| 1 plan9 MULSF.NE F0, F2, F2 -435b05ee| 1 plan9 MULSD F3, F5, F5 -002a11ee| 1 plan9 NMULSF F0, F1, F2 -202a11ee| 1 plan9 NMULSF S1, F1, F2 -802a11ee| 1 plan9 NMULSF F0, S3, F2 -002a51ee| 1 plan9 NMULSF F0, F1, S5 -035b140e| 1 plan9 NMULSD.EQ F3, F4, F5 -002a121e| 1 plan9 NMULSF.NE F0, F2, F2 -035b15ee| 1 plan9 NMULSD F3, F5, F5 -402a11ee| 1 plan9 NMULAF F0, F1, F2 -602a11ee| 1 plan9 NMULAF S1, F1, F2 -c02a11ee| 1 plan9 NMULAF F0, S3, F2 -402a51ee| 1 plan9 NMULAF F0, F1, S5 -435b140e| 1 plan9 NMULAD.EQ F3, F4, F5 -402a121e| 1 plan9 NMULAF.NE F0, F2, F2 -435b15ee| 1 plan9 NMULAD F3, F5, F5 -002a81ee| 1 plan9 DIVF F0, F1, F2 -202a81ee| 1 plan9 DIVF S1, F1, F2 -802a81ee| 1 plan9 DIVF F0, S3, F2 -002ac1ee| 1 plan9 DIVF F0, F1, S5 -035b840e| 1 plan9 DIVD.EQ F3, F4, F5 -002a821e| 1 plan9 DIVF.NE F0, F2, F2 -035b85ee| 1 plan9 DIVD F3, F5, F5 -401ab1ee| 1 plan9 NEGF F0, F1 -601ab1ee| 1 plan9 NEGF S1, F1 -401af1ee| 1 plan9 NEGF F0, S3 -445bb1ee| 1 plan9 NEGD F4, F5 -c01ab0ee| 1 plan9 ABSF F0, F1 -e01ab0ee| 1 plan9 ABSF S1, F1 -c01af0ee| 1 plan9 ABSF F0, S3 -c45bb0ee| 1 plan9 ABSD F4, F5 -c01ab1ee| 1 plan9 SQRTF F0, F1 -e01ab1ee| 1 plan9 SQRTF S1, F1 -c01af1ee| 1 plan9 SQRTF F0, S3 -c45bb1ee| 1 plan9 SQRTD F4, F5 -c01ab7ee| 1 plan9 MOVFD F0, F1 -c45bb7ee| 1 plan9 MOVDF F4, F5 -c89ab4ee| 1 plan9 CMPF F8, F9 -c45bb42e| 1 plan9 CMPD.CS F4, F5 -c07ab56e| 1 plan9 CMPF.VS $0, F7 -c06bb5ee| 1 plan9 CMPD $0, F6 -9f9f98e1| 1 plan9 LDREX (R8), R9 -9f9fd8e1| 1 plan9 LDREXB (R8), R9 -9f9ff8e1| 1 plan9 LDREXH (R8), R9 -9fcfbbe1| 1 gnu ldrexd ip, [fp] -935f84e1| 1 plan9 STREX R3, (R4), R5 -935fc4e1| 1 plan9 STREXB R3, (R4), R5 -935fe4e1| 1 plan9 STREXH R3, (R4), R5 -98afa9e1| 1 gnu strexd sl, r8, [r9] -104b08ee| 1 plan9 MOVW R4, F8 -108b14ee| 1 plan9 MOVW F4, R8 -104a080e| 1 plan9 MOVW.EQ R4, F8 -104a181e| 1 plan9 MOVW.NE F8, R4 -904a181e| 1 plan9 MOVW.NE S17, R4 -445ab0ee| 1 plan9 MOVF F4, F5 -467bb0ee| 1 plan9 MOVD F6, F7 -c68abdee| 1 plan9 MOVFW F6, F8 -c68abcee| 1 plan9 MOVFW.U F6, F8 -c68bbdee| 1 plan9 MOVDW F6, F8 -c68bbcee| 1 plan9 MOVDW.U F6, F8 -c68ab8ee| 1 plan9 MOVWF F6, F8 -468ab8ee| 1 plan9 MOVWF.U F6, F8 -c68bb8ee| 1 plan9 MOVWD F6, F8 -468bb8ee| 1 plan9 MOVWD.U F6, F8 -000000ea| 1 plan9 B 0x8 -feffffea| 1 plan9 B 0x0 -fcffffea| 1 plan9 B 0xfffffff8 -1f90cfe7| 1 plan9 BFC $16, $0, R9 -9fb4dee7| 1 plan9 BFC $22, $9, R11 -1790cfe7| 1 plan9 BFI $16, $0, R7, R9 -98b4dee7| 1 plan9 BFI $22, $9, R8, R11 -742321e1| 1 plan9 BKPT $4660 -000000eb| 1 plan9 BL 0x8 -feffffeb| 1 plan9 BL 0x0 -fcffffeb| 1 plan9 BL 0xfffffff8 -000000fa| 1 plan9 BLX 0x8 -fefffffa| 1 plan9 BLX 0x0 -fcfffffa| 1 plan9 BLX 0xfffffff8 -33ff2fe1| 1 plan9 BLX R3 -13ff2fe1| 1 plan9 BX R3 -23ff2fe1| 1 plan9 BXJ R3 -1ff07ff5| 1 plan9 CLREX -f7f020e3| 1 gnu dbg #7 -58f07ff5| 1 gnu dmb #8 -49f07ff5| 1 gnu dsb #9 -62f07ff5| 1 gnu isb #2 -009a94ed| 1 plan9 MOVF (R4), F9 -009ad4ed| 1 plan9 MOVF (R4), S19 -009b940d| 1 plan9 MOVD.EQ (R4), F9 -003a9a1d| 1 plan9 MOVF.NE (R10), F3 -003ada1d| 1 plan9 MOVF.NE (R10), S7 -003b9aed| 1 plan9 MOVD (R10), F3 -089a93ed| 1 plan9 MOVF 0x20(R3), F9 -089ad3ed| 1 plan9 MOVF 0x20(R3), S19 -089b940d| 1 plan9 MOVD.EQ 0x20(R4), F9 -083a1a1d| 1 plan9 MOVF.NE -0x20(R10), F3 -083a5a1d| 1 plan9 MOVF.NE -0x20(R10), S7 -083b1aed| 1 plan9 MOVD -0x20(R10), F3 -009a84ed| 1 plan9 MOVF F9, (R4) -009ac4ed| 1 plan9 MOVF S19, (R4) -009b840d| 1 plan9 MOVD.EQ F9, (R4) -003a8a1d| 1 plan9 MOVF.NE F3, (R10) -003aca1d| 1 plan9 MOVF.NE S7, (R10) -003b8aed| 1 plan9 MOVD F3, (R10) -089a83ed| 1 plan9 MOVF F9, 0x20(R3) -089ac3ed| 1 plan9 MOVF S19, 0x20(R3) -089b840d| 1 plan9 MOVD.EQ F9, 0x20(R4) -083a0a1d| 1 plan9 MOVF.NE F3, -0x20(R10) -083a4a1d| 1 plan9 MOVF.NE S7, -0x20(R10) -083b0aed| 1 plan9 MOVD F3, -0x20(R10) -d060c8e1| 1 gnu ldrd r6, [r8] -d06048e1| 1 gnu ldrd r6, [r8] -d060e8e1| 1 gnu ldrd r6, [r8, #0]! -d06068e1| 1 gnu ldrd r6, [r8, #0]! -d060c8e0| 1 gnu ldrd r6, [r8], #0 -d06048e0| 1 gnu ldrd r6, [r8], #0 -d062c8e1| 1 gnu ldrd r6, [r8, #32] -d06248e1| 1 gnu ldrd r6, [r8, #-32] -d062e8e1| 1 gnu ldrd r6, [r8, #32]! -d06268e1| 1 gnu ldrd r6, [r8, #-32]! -d062c8e0| 1 gnu ldrd r6, [r8], #32 -d06248e0| 1 gnu ldrd r6, [r8], #-32 -d24089e1| 1 gnu ldrd r4, [r9, r2] -d240a9e1| 1 gnu ldrd r4, [r9, r2]! -d24009e1| 1 gnu ldrd r4, [r9, -r2] -d24029e1| 1 gnu ldrd r4, [r9, -r2]! -f060c8e1| 1 gnu strd r6, [r8] -f06048e1| 1 gnu strd r6, [r8] -f060e8e1| 1 gnu strd r6, [r8, #0]! -f06068e1| 1 gnu strd r6, [r8, #0]! -f060c8e0| 1 gnu strd r6, [r8], #0 -f06048e0| 1 gnu strd r6, [r8], #0 -f062c8e1| 1 gnu strd r6, [r8, #32] -f06248e1| 1 gnu strd r6, [r8, #-32] -f062e8e1| 1 gnu strd r6, [r8, #32]! -f06268e1| 1 gnu strd r6, [r8, #-32]! -f062c8e0| 1 gnu strd r6, [r8], #32 -f06248e0| 1 gnu strd r6, [r8], #-32 -f24089e1| 1 gnu strd r4, [r9, r2] -f240a9e1| 1 gnu strd r4, [r9, r2]! -f24009e1| 1 gnu strd r4, [r9, -r2] -f24029e1| 1 gnu strd r4, [r9, -r2]! -0010b2e4| 1 gnu ldrt r1, [r2], #0 -2010b2e4| 1 gnu ldrt r1, [r2], #32 -201032e4| 1 gnu ldrt r1, [r2], #-32 -0040bde4| 1 gnu ldrt r4, [sp], #0 -2040bde4| 1 gnu ldrt r4, [sp], #32 -20403de4| 1 gnu ldrt r4, [sp], #-32 -2314b2e6| 1 gnu ldrt r1, [r2], r3, lsr #8 -0314b2e6| 1 gnu ldrt r1, [r2], r3, lsl #8 -4314b2e6| 1 gnu ldrt r1, [r2], r3, asr #8 -6314b2e6| 1 gnu ldrt r1, [r2], r3, ror #8 -231432e6| 1 gnu ldrt r1, [r2], -r3, lsr #8 -031432e6| 1 gnu ldrt r1, [r2], -r3, lsl #8 -431432e6| 1 gnu ldrt r1, [r2], -r3, asr #8 -631432e6| 1 gnu ldrt r1, [r2], -r3, ror #8 -0010a2e4| 1 gnu strt r1, [r2], #0 -2010a2e4| 1 gnu strt r1, [r2], #32 -201022e4| 1 gnu strt r1, [r2], #-32 -0040ade4| 1 gnu strt r4, [sp], #0 -2040ade4| 1 gnu strt r4, [sp], #32 -20402de4| 1 gnu strt r4, [sp], #-32 -2314a2e6| 1 gnu strt r1, [r2], r3, lsr #8 -0314a2e6| 1 gnu strt r1, [r2], r3, lsl #8 -4314a2e6| 1 gnu strt r1, [r2], r3, asr #8 -6314a2e6| 1 gnu strt r1, [r2], r3, ror #8 -231422e6| 1 gnu strt r1, [r2], -r3, lsr #8 -031422e6| 1 gnu strt r1, [r2], -r3, lsl #8 -431422e6| 1 gnu strt r1, [r2], -r3, asr #8 -631422e6| 1 gnu strt r1, [r2], -r3, ror #8 -0010f2e4| 1 gnu ldrbt r1, [r2], #0 -2010f2e4| 1 gnu ldrbt r1, [r2], #32 -201072e4| 1 gnu ldrbt r1, [r2], #-32 -0040fde4| 1 gnu ldrbt r4, [sp], #0 -2040fde4| 1 gnu ldrbt r4, [sp], #32 -20407de4| 1 gnu ldrbt r4, [sp], #-32 -2314f2e6| 1 gnu ldrbt r1, [r2], r3, lsr #8 -0314f2e6| 1 gnu ldrbt r1, [r2], r3, lsl #8 -4314f2e6| 1 gnu ldrbt r1, [r2], r3, asr #8 -6314f2e6| 1 gnu ldrbt r1, [r2], r3, ror #8 -231472e6| 1 gnu ldrbt r1, [r2], -r3, lsr #8 -031472e6| 1 gnu ldrbt r1, [r2], -r3, lsl #8 -431472e6| 1 gnu ldrbt r1, [r2], -r3, asr #8 -631472e6| 1 gnu ldrbt r1, [r2], -r3, ror #8 -0010e2e4| 1 gnu strbt r1, [r2], #0 -2010e2e4| 1 gnu strbt r1, [r2], #32 -201062e4| 1 gnu strbt r1, [r2], #-32 -0040ede4| 1 gnu strbt r4, [sp], #0 -2040ede4| 1 gnu strbt r4, [sp], #32 -20406de4| 1 gnu strbt r4, [sp], #-32 -2314e2e6| 1 gnu strbt r1, [r2], r3, lsr #8 -0314e2e6| 1 gnu strbt r1, [r2], r3, lsl #8 -4314e2e6| 1 gnu strbt r1, [r2], r3, asr #8 -6314e2e6| 1 gnu strbt r1, [r2], r3, ror #8 -231462e6| 1 gnu strbt r1, [r2], -r3, lsr #8 -031462e6| 1 gnu strbt r1, [r2], -r3, lsl #8 -431462e6| 1 gnu strbt r1, [r2], -r3, asr #8 -631462e6| 1 gnu strbt r1, [r2], -r3, ror #8 -d010f2e0| 1 gnu ldrsbt r1, [r2], #0 -d012f2e0| 1 gnu ldrsbt r1, [r2], #32 -d01272e0| 1 gnu ldrsbt r1, [r2], #-32 -d040fde0| 1 gnu ldrsbt r4, [sp], #0 -d042fde0| 1 gnu ldrsbt r4, [sp], #32 -d0427de0| 1 gnu ldrsbt r4, [sp], #-32 -d310b2e0| 1 gnu ldrsbt r1, [r2], r3 -d640bde0| 1 gnu ldrsbt r4, [sp], r6 -d31032e0| 1 gnu ldrsbt r1, [r2], -r3 -d6403de0| 1 gnu ldrsbt r4, [sp], -r6 -b010f2e0| 1 gnu ldrht r1, [r2], #0 -b012f2e0| 1 gnu ldrht r1, [r2], #32 -b01272e0| 1 gnu ldrht r1, [r2], #-32 -b040fde0| 1 gnu ldrht r4, [sp], #0 -b042fde0| 1 gnu ldrht r4, [sp], #32 -b0427de0| 1 gnu ldrht r4, [sp], #-32 -b310b2e0| 1 gnu ldrht r1, [r2], r3 -b640bde0| 1 gnu ldrht r4, [sp], r6 -b31032e0| 1 gnu ldrht r1, [r2], -r3 -b6403de0| 1 gnu ldrht r4, [sp], -r6 -f010f2e0| 1 gnu ldrsht r1, [r2], #0 -f012f2e0| 1 gnu ldrsht r1, [r2], #32 -f01272e0| 1 gnu ldrsht r1, [r2], #-32 -f040fde0| 1 gnu ldrsht r4, [sp], #0 -f042fde0| 1 gnu ldrsht r4, [sp], #32 -f0427de0| 1 gnu ldrsht r4, [sp], #-32 -f310b2e0| 1 gnu ldrsht r1, [r2], r3 -f640bde0| 1 gnu ldrsht r4, [sp], r6 -f31032e0| 1 gnu ldrsht r1, [r2], -r3 -f6403de0| 1 gnu ldrsht r4, [sp], -r6 -b010f2e0| 1 gnu ldrht r1, [r2], #0 -b012f2e0| 1 gnu ldrht r1, [r2], #32 -b01272e0| 1 gnu ldrht r1, [r2], #-32 -b040fde0| 1 gnu ldrht r4, [sp], #0 -b042fde0| 1 gnu ldrht r4, [sp], #32 -b0427de0| 1 gnu ldrht r4, [sp], #-32 -b310b2e0| 1 gnu ldrht r1, [r2], r3 -b640bde0| 1 gnu ldrht r4, [sp], r6 -b31032e0| 1 gnu ldrht r1, [r2], -r3 -b6403de0| 1 gnu ldrht r4, [sp], -r6 -b010e2e0| 1 gnu strht r1, [r2], #0 -b012e2e0| 1 gnu strht r1, [r2], #32 -b01262e0| 1 gnu strht r1, [r2], #-32 -b040ede0| 1 gnu strht r4, [sp], #0 -b042ede0| 1 gnu strht r4, [sp], #32 -b0426de0| 1 gnu strht r4, [sp], #-32 -b310a2e0| 1 gnu strht r1, [r2], r3 -b640ade0| 1 gnu strht r4, [sp], r6 -b31022e0| 1 gnu strht r1, [r2], -r3 -b6402de0| 1 gnu strht r4, [sp], -r6 -00f020e3| 1 plan9 NOP -445ab0ee| 1 plan9 MOVF F4, F5 -645af0ee| 1 plan9 MOVF S9, S11 -467bb0ee| 1 plan9 MOVD F6, F7 -104b08ee| 1 plan9 MOVW R4, F8 -104b28ee| 1 plan9 MOVW R4, D8[1] -108b14ee| 1 plan9 MOVW F4, R8 -108b34ee| 1 plan9 MOVW D4[1], R8 -c68abdee| 1 plan9 MOVFW F6, F8 -e68afdee| 1 plan9 MOVFW S13, S17 -c68abcee| 1 plan9 MOVFW.U F6, F8 -e68afcee| 1 plan9 MOVFW.U S13, S17 -c68bbdee| 1 plan9 MOVDW F6, F8 -c68bfdee| 1 plan9 MOVDW F6, S17 -c68bbcee| 1 plan9 MOVDW.U F6, F8 -c68bfcee| 1 plan9 MOVDW.U F6, S17 -c68ab8ee| 1 plan9 MOVWF F6, F8 -e68af8ee| 1 plan9 MOVWF S13, S17 -468ab8ee| 1 plan9 MOVWF.U F6, F8 -668af8ee| 1 plan9 MOVWF.U S13, S17 -c68bb8ee| 1 plan9 MOVWD F6, F8 -e68bb8ee| 1 plan9 MOVWD S13, F8 -468bb8ee| 1 plan9 MOVWD.U F6, F8 -668bb8ee| 1 plan9 MOVWD.U S13, F8 -c01ab7ee| 1 plan9 MOVFD F0, F1 -e01ab7ee| 1 plan9 MOVFD S1, F1 -c45bb7ee| 1 plan9 MOVDF F4, F5 -c65bf7ee| 1 plan9 MOVDF F6, S11 -102083e6| 1 gnu pkhbt r2, r3, r0 -102283e6| 1 gnu pkhbt r2, r3, r0, lsl #4 -502083e6| 1 gnu pkhtb r2, r3, r0, asr #32 -d02083e6| 1 gnu pkhtb r2, r3, r0, asr #1 -502283e6| 1 gnu pkhtb r2, r3, r0, asr #4 -faaf2de9| 1 gnu push {r1, r3, r4, r5, r6, r7, r8, r9, sl, fp, sp, pc} -04202de5| 1 gnu push {r2} -faafbde8| 1 gnu pop {r1, r3, r4, r5, r6, r7, r8, r9, sl, fp, sp, pc} -04209de4| 1 gnu pop {r2} -556003e1| 1 gnu qadd r6, r5, r3 -156f28e6| 1 gnu qadd16 r6, r8, r5 -956f28e6| 1 gnu qadd8 r6, r8, r5 -550044e1| 1 gnu qdadd r0, r5, r4 -550066e1| 1 gnu qdsub r0, r5, r6 -156f68e6| 1 gnu uqadd16 r6, r8, r5 -956f68e6| 1 gnu uqadd8 r6, r8, r5 -356f28e6| 1 gnu qasx r6, r8, r5 -556f28e6| 1 gnu qsax r6, r8, r5 -356f64e6| 1 gnu uqasx r6, r4, r5 -553f64e6| 1 gnu uqsax r3, r4, r5 -556022e1| 1 gnu qsub r6, r5, r2 -774f21e6| 1 gnu qsub16 r4, r1, r7 -f74f21e6| 1 gnu qsub8 r4, r1, r7 -774f61e6| 1 gnu uqsub16 r4, r1, r7 -f74f61e6| 1 gnu uqsub8 r4, r1, r7 -6670a0e1| 1 gnu rrx r7, r6 -6670b0e1| 1 gnu rrxs r7, r6 -112f13e6| 1 gnu sadd16 r2, r3, r1 -992f13e6| 1 gnu sadd8 r2, r3, r9 -112f33e6| 1 gnu shadd16 r2, r3, r1 -992f33e6| 1 gnu shadd8 r2, r3, r9 -712f13e6| 1 gnu ssub16 r2, r3, r1 -f92f13e6| 1 gnu ssub8 r2, r3, r9 -712f33e6| 1 gnu shsub16 r2, r3, r1 -f92f33e6| 1 gnu shsub8 r2, r3, r9 -112f53e6| 1 gnu uadd16 r2, r3, r1 -992f53e6| 1 gnu uadd8 r2, r3, r9 -112f73e6| 1 gnu uhadd16 r2, r3, r1 -992f73e6| 1 gnu uhadd8 r2, r3, r9 -712f53e6| 1 gnu usub16 r2, r3, r1 -f92f53e6| 1 gnu usub8 r2, r3, r9 -712f73e6| 1 gnu uhsub16 r2, r3, r1 -f92f73e6| 1 gnu uhsub8 r2, r3, r9 -332f14e6| 1 gnu sasx r2, r4, r3 -532f14e6| 1 gnu ssax r2, r4, r3 -332f54e6| 1 gnu uasx r2, r4, r3 -532f54e6| 1 gnu usax r2, r4, r3 -332f34e6| 1 gnu shasx r2, r4, r3 -532f34e6| 1 gnu shsax r2, r4, r3 -332f74e6| 1 gnu uhasx r2, r4, r3 -532f74e6| 1 gnu uhsax r2, r4, r3 -dc51afe7| 1 plan9 SBFX $16, $3, R12, R5 -dc51efe7| 1 plan9 UBFX $16, $3, R12, R5 -b12f88e6| 1 gnu sel r2, r8, r1 -000201f1| 1 gnu setend be -000001f1| 1 gnu setend le -04f020e3| 1 gnu sev -1155aae6| 1 gnu ssat r5, #11, r1, lsl #10 -5155aae6| 1 gnu ssat r5, #11, r1, asr #10 -335faae6| 1 gnu ssat16 r5, #11, r3 -1155eae6| 1 gnu usat r5, #10, r1, lsl #10 -5155eae6| 1 gnu usat r5, #10, r1, asr #10 -335feae6| 1 gnu usat16 r5, #10, r3 -7788a9e6| 1 plan9 SXTAB R7@>$16, R9, R8 -778889e6| 1 plan9 SXTAB16 R7@>$16, R9, R8 -7788b9e6| 1 plan9 SXTAH R7@>$16, R9, R8 -7784afe6| 1 plan9 MOVBS R7@>$8, R8 -778c8fe6| 1 plan9 SXTB16 R7@>$24, R8 -7780bf16| 1 plan9 MOVHS.NE R7, R8 -7788e906| 1 plan9 UXTAB.EQ R7@>$16, R9, R8 -7788c9e6| 1 plan9 UXTAB16 R7@>$16, R9, R8 -7788f9e6| 1 plan9 UXTAH R7@>$16, R9, R8 -7784efe6| 1 plan9 MOVBU R7@>$8, R8 -778ccfe6| 1 plan9 UXTB16 R7@>$24, R8 -7780ffe6| 1 plan9 MOVHU R7, R8 -11f288e7| 1 gnu usad8 r8, r1, r2 -112388e7| 1 gnu usada8 r8, r1, r3, r2 -02f020e3| 1 gnu wfe -03f020e3| 1 gnu wfi -01f020e3| 1 gnu yield diff --git a/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/decode_test.go b/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/decode_test.go deleted file mode 100644 index 9c7d2b62d5..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/decode_test.go +++ /dev/null @@ -1,88 +0,0 @@ -// 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 arm64asm - -import ( - "encoding/hex" - "io/ioutil" - "path/filepath" - "strings" - "testing" -) - -func testDecode(t *testing.T, syntax string) { - input := filepath.Join("testdata", syntax+"cases.txt") - data, err := ioutil.ReadFile(input) - if err != nil { - t.Fatal(err) - } - all := string(data) - for strings.Contains(all, "\t\t") { - all = strings.Replace(all, "\t\t", "\t", -1) - } - for _, line := range strings.Split(all, "\n") { - line = strings.TrimSpace(line) - if line == "" || strings.HasPrefix(line, "#") { - continue - } - f := strings.SplitN(line, "\t", 2) - i := strings.Index(f[0], "|") - if i < 0 { - t.Errorf("parsing %q: missing | separator", f[0]) - continue - } - if i%2 != 0 { - t.Errorf("parsing %q: misaligned | separator", f[0]) - } - code, err := hex.DecodeString(f[0][:i] + f[0][i+1:]) - if err != nil { - t.Errorf("parsing %q: %v", f[0], err) - continue - } - asm := f[1] - inst, decodeErr := Decode(code) - if decodeErr != nil && decodeErr != errUnknown { - // Some rarely used system instructions are not supported - // Following logicals will filter such unknown instructions - - t.Errorf("parsing %x: %s", code, decodeErr) - continue - } - var out string - switch syntax { - case "gnu": - out = GNUSyntax(inst) - case "plan9": - out = GoSyntax(inst, 0, nil, nil) - default: - t.Errorf("unknown syntax %q", syntax) - continue - } - // TODO: system instruction. - var Todo = strings.Fields(` - sys - dc - at - tlbi - ic - hvc - smc - `) - if strings.Replace(out, " ", "", -1) != strings.Replace(asm, " ", "", -1) && !hasPrefix(asm, Todo...) { - // Exclude MSR since GNU objdump result is incorrect. eg. 0xd504431f msr s0_4_c4_c3_0, xzr - if !strings.HasSuffix(asm, " nv") && !strings.HasPrefix(asm, "msr") { - t.Errorf("Decode(%s) [%s] = %s, want %s", strings.Trim(f[0], "|"), syntax, out, asm) - } - } - } -} - -func TestDecodeGNUSyntax(t *testing.T) { - testDecode(t, "gnu") -} - -func TestDecodeGoSyntax(t *testing.T) { - testDecode(t, "plan9") -} diff --git a/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/ext_test.go b/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/ext_test.go deleted file mode 100644 index f432203e15..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/ext_test.go +++ /dev/null @@ -1,604 +0,0 @@ -// 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. - -// Support for testing against external disassembler program. -// Copied and simplified from ../../arm/armasm/ext_test.go. - -package arm64asm - -import ( - "bufio" - "bytes" - "encoding/hex" - "encoding/json" - "flag" - "fmt" - "io" - "io/ioutil" - "log" - "math/rand" - "os" - "os/exec" - "path/filepath" - "regexp" - "strconv" - "strings" - "testing" - "time" -) - -var ( - dumpTest = flag.Bool("dump", false, "dump all encodings") - mismatch = flag.Bool("mismatch", false, "log allowed mismatches") - longTest = flag.Bool("long", false, "long test") - keep = flag.Bool("keep", false, "keep object files around") - debug = false -) - -// An ExtInst represents a single decoded instruction parsed -// from an external disassembler's output. -type ExtInst struct { - addr uint64 - enc [4]byte - nenc int - text string -} - -func (r ExtInst) String() string { - return fmt.Sprintf("%#x: % x: %s", r.addr, r.enc, r.text) -} - -// An ExtDis is a connection between an external disassembler and a test. -type ExtDis struct { - Arch Mode - Dec chan ExtInst - File *os.File - Size int - KeepFile bool - Cmd *exec.Cmd -} - -// InstJson describes instruction fields value got from ARMv8-A Reference Manual -type InstJson struct { - Name string - Bits string - Arch string - Syntax string - Code string - Alias string - Enc uint32 -} - -// A Mode is an instruction execution mode. -type Mode int - -const ( - _ Mode = iota - ModeARM64 -) - -// Run runs the given command - the external disassembler - and returns -// a buffered reader of its standard output. -func (ext *ExtDis) Run(cmd ...string) (*bufio.Reader, error) { - if *keep { - log.Printf("%s\n", strings.Join(cmd, " ")) - } - ext.Cmd = exec.Command(cmd[0], cmd[1:]...) - out, err := ext.Cmd.StdoutPipe() - if err != nil { - return nil, fmt.Errorf("stdoutpipe: %v", err) - } - if err := ext.Cmd.Start(); err != nil { - return nil, fmt.Errorf("exec: %v", err) - } - - b := bufio.NewReaderSize(out, 1<<20) - return b, nil -} - -// Wait waits for the command started with Run to exit. -func (ext *ExtDis) Wait() error { - return ext.Cmd.Wait() -} - -// testExtDis tests a set of byte sequences against an external disassembler. -// The disassembler is expected to produce the given syntax and run -// in the given architecture mode (16, 32, or 64-bit). -// The extdis function must start the external disassembler -// and then parse its output, sending the parsed instructions on ext.Dec. -// The generate function calls its argument f once for each byte sequence -// to be tested. The generate function itself will be called twice, and it must -// make the same sequence of calls to f each time. -// When a disassembly does not match the internal decoding, -// allowedMismatch determines whether this mismatch should be -// allowed, or else considered an error. -func testExtDis( - t *testing.T, - syntax string, - arch Mode, - extdis func(ext *ExtDis) error, - generate func(f func([]byte)), - allowedMismatch func(text string, inst *Inst, dec ExtInst) bool, -) { - start := time.Now() - ext := &ExtDis{ - Dec: make(chan ExtInst), - Arch: arch, - } - errc := make(chan error) - - // First pass: write instructions to input file for external disassembler. - file, f, size, err := writeInst(generate) - if err != nil { - t.Fatal(err) - } - ext.Size = size - ext.File = f - defer func() { - f.Close() - if !*keep { - os.Remove(file) - } - }() - - // Second pass: compare disassembly against our decodings. - var ( - totalTests = 0 - totalSkips = 0 - totalErrors = 0 - - errors = make([]string, 0, 100) // Sampled errors, at most cap - ) - go func() { - errc <- extdis(ext) - }() - - generate(func(enc []byte) { - dec, ok := <-ext.Dec - if !ok { - t.Errorf("decoding stream ended early") - return - } - inst, text := disasm(syntax, pad(enc)) - - totalTests++ - if *dumpTest { - fmt.Printf("%x -> %s [%d]\n", enc[:len(enc)], dec.text, dec.nenc) - } - if text != dec.text && !strings.Contains(dec.text, "unknown") && syntax == "gnu" { - suffix := "" - if allowedMismatch(text, &inst, dec) { - totalSkips++ - if !*mismatch { - return - } - suffix += " (allowed mismatch)" - } - totalErrors++ - cmp := fmt.Sprintf("decode(%x) = %q, %d, want %q, %d%s\n", enc, text, len(enc), dec.text, dec.nenc, suffix) - - if len(errors) >= cap(errors) { - j := rand.Intn(totalErrors) - if j >= cap(errors) { - return - } - errors = append(errors[:j], errors[j+1:]...) - } - errors = append(errors, cmp) - } - }) - - if *mismatch { - totalErrors -= totalSkips - } - - for _, b := range errors { - t.Log(b) - } - - if totalErrors > 0 { - t.Fail() - } - t.Logf("%d test cases, %d expected mismatches, %d failures; %.0f cases/second", totalTests, totalSkips, totalErrors, float64(totalTests)/time.Since(start).Seconds()) - t.Logf("decoder coverage: %.1f%%;\n", decodeCoverage()) - if err := <-errc; err != nil { - t.Fatalf("external disassembler: %v", err) - } - -} - -// Start address of text. -const start = 0x8000 - -// writeInst writes the generated byte sequences to a new file -// starting at offset start. That file is intended to be the input to -// the external disassembler. -func writeInst(generate func(func([]byte))) (file string, f *os.File, size int, err error) { - f, err = ioutil.TempFile("", "arm64asm") - if err != nil { - return - } - - file = f.Name() - - f.Seek(start, io.SeekStart) - w := bufio.NewWriter(f) - defer w.Flush() - size = 0 - generate(func(x []byte) { - if debug { - fmt.Printf("%#x: %x%x\n", start+size, x, zeros[len(x):]) - } - w.Write(x) - w.Write(zeros[len(x):]) - size += len(zeros) - }) - return file, f, size, nil -} - -var zeros = []byte{0, 0, 0, 0} - -// pad pads the code sequence with pops. -func pad(enc []byte) []byte { - if len(enc) < 4 { - enc = append(enc[:len(enc):len(enc)], zeros[:4-len(enc)]...) - } - return enc -} - -// disasm returns the decoded instruction and text -// for the given source bytes, using the given syntax and mode. -func disasm(syntax string, src []byte) (inst Inst, text string) { - var err error - inst, err = Decode(src) - if err != nil { - text = "error: " + err.Error() - return - } - text = inst.String() - switch syntax { - case "gnu": - text = GNUSyntax(inst) - case "plan9": // [sic] - text = GoSyntax(inst, 0, nil, nil) - default: - text = "error: unknown syntax " + syntax - } - return -} - -// decodecoverage returns a floating point number denoting the -// decoder coverage. -func decodeCoverage() float64 { - n := 0 - for _, t := range decoderCover { - if t { - n++ - } - } - return 100 * float64(1+n) / float64(1+len(decoderCover)) -} - -// Helpers for writing disassembler output parsers. - -// hasPrefix reports whether any of the space-separated words in the text s -// begins with any of the given prefixes. -func hasPrefix(s string, prefixes ...string) bool { - for _, prefix := range prefixes { - for cur_s := s; cur_s != ""; { - if strings.HasPrefix(cur_s, prefix) { - return true - } - i := strings.Index(cur_s, " ") - if i < 0 { - break - } - cur_s = cur_s[i+1:] - } - } - return false -} - -// isHex reports whether b is a hexadecimal character (0-9a-fA-F). -func isHex(b byte) bool { - return ('0' <= b && b <= '9') || ('a' <= b && b <= 'f') || ('A' <= b && b <= 'F') -} - -// parseHex parses the hexadecimal byte dump in hex, -// appending the parsed bytes to raw and returning the updated slice. -// The returned bool reports whether any invalid hex was found. -// Spaces and tabs between bytes are okay but any other non-hex is not. -func parseHex(hex []byte, raw []byte) ([]byte, bool) { - hex = bytes.TrimSpace(hex) - for j := 0; j < len(hex); { - for hex[j] == ' ' || hex[j] == '\t' { - j++ - } - if j >= len(hex) { - break - } - if j+2 > len(hex) || !isHex(hex[j]) || !isHex(hex[j+1]) { - return nil, false - } - raw = append(raw, unhex(hex[j])<<4|unhex(hex[j+1])) - j += 2 - } - return raw, true -} - -func unhex(b byte) byte { - if '0' <= b && b <= '9' { - return b - '0' - } else if 'A' <= b && b <= 'F' { - return b - 'A' + 10 - } else if 'a' <= b && b <= 'f' { - return b - 'a' + 10 - } - return 0 -} - -// index is like bytes.Index(s, []byte(t)) but avoids the allocation. -func index(s []byte, t string) int { - i := 0 - for { - j := bytes.IndexByte(s[i:], t[0]) - if j < 0 { - return -1 - } - i = i + j - if i+len(t) > len(s) { - return -1 - } - for k := 1; k < len(t); k++ { - if s[i+k] != t[k] { - goto nomatch - } - } - return i - nomatch: - i++ - } -} - -// fixSpace rewrites runs of spaces, tabs, and newline characters into single spaces in s. -// If s must be rewritten, it is rewritten in place. -func fixSpace(s []byte) []byte { - s = bytes.TrimSpace(s) - for i := 0; i < len(s); i++ { - if s[i] == '\t' || s[i] == '\n' || i > 0 && s[i] == ' ' && s[i-1] == ' ' { - goto Fix - } - } - return s - -Fix: - b := s - w := 0 - for i := 0; i < len(s); i++ { - c := s[i] - if c == '\t' || c == '\n' { - c = ' ' - } - if c == ' ' && w > 0 && b[w-1] == ' ' { - continue - } - b[w] = c - w++ - } - if w > 0 && b[w-1] == ' ' { - w-- - } - return b[:w] -} - -// Fllowing regular expressions matches instructions using relative addressing mode. -// pcrel matches B instructions and BL instructions. -// pcrelr matches instrucions which consisted of register arguments and label arguments. -// pcrelim matches instructions which consisted of register arguments, immediate -// arguments and lable arguments. -// pcrelrzr and prcelimzr matches instructions when register arguments is zero register. -// pcrelprfm matches PRFM instructions when arguments consisted of register and lable. -// pcrelprfmim matches PRFM instructions when arguments consisted of immediate and lable. -var ( - pcrel = regexp.MustCompile(`^((?:.* )?(?:b|bl)x?(?:\.)?(?:eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|nv)?) 0x([0-9a-f]+)$`) - pcrelr = regexp.MustCompile(`^((?:.*)?(?:ldr|adrp|adr|cbnz|cbz|ldrsw) (?:x|w|s|d|q)(?:[0-9]+,)) 0x([0-9a-f]+)$`) - pcrelrzr = regexp.MustCompile(`^((?:.*)?(?:ldr|adrp|adr|cbnz|cbz|ldrsw) (?:x|w)zr,) 0x([0-9a-f]+)$`) - pcrelim = regexp.MustCompile(`^((?:.*)?(?:tbnz|tbz) (?:x|w)(?:[0-9]+,) (?:#[0-9a-f]+,)) 0x([0-9a-f]+)$`) - pcrelimzr = regexp.MustCompile(`^((?:.*)?(?:tbnz|tbz) (?:x|w)zr, (?:#[0-9a-f]+,)) 0x([0-9a-f]+)$`) - pcrelprfm = regexp.MustCompile(`^((?:.*)?(?:prfm) (?:[0-9a-z]+,)) 0x([0-9a-f]+)$`) - pcrelprfmim = regexp.MustCompile(`^((?:.*)?(?:prfm) (?:#0x[0-9a-f]+,)) 0x([0-9a-f]+)$`) -) - -// Round is the multiple of the number of instructions that read from Json file. -// Round used as seed value for pseudo-random number generator provides the same sequence -// in the same round run for the external disassembler and decoder. -var Round int - -// condmark is used to mark conditional instructions when need to generate and test -// conditional instructions. -var condmark bool = false - -// Generate instruction binary according to Json file -// Encode variable field of instruction with random value -func doFuzzy(inst *InstJson, Ninst int) { - var testdata uint32 - var NonDigRE = regexp.MustCompile(`[\D]`) - rand.Seed(int64(Round + Ninst)) - off := 0 - DigBit := "" - if condmark == true && !strings.Contains(inst.Bits, "cond") { - inst.Enc = 0xffffffff - } else { - for _, f := range strings.Split(inst.Bits, "|") { - if i := strings.Index(f, ":"); i >= 0 { - // consider f contains "01:2" and "Rm:5" - DigBit = f[:i] - m := NonDigRE.FindStringSubmatch(DigBit) - if m == nil { - DigBit = strings.TrimSpace(DigBit) - s := strings.Split(DigBit, "") - for i := 0; i < len(s); i++ { - switch s[i] { - case "1", "(1)": - testdata |= 1 << uint(31-off) - } - off++ - } - } else { - // DigBit is "Rn" or "imm3" - n, _ := strconv.Atoi(f[i+1:]) - if DigBit == "cond" && condmark == true { - r := uint8(Round) - for i := n - 1; i >= 0; i-- { - switch (r >> uint(i)) & 1 { - case 1: - testdata |= 1 << uint(31-off) - } - off++ - } - } else { - for i := 0; i < n; i++ { - r := rand.Intn(2) - switch r { - case 1: - testdata |= 1 << uint(31-off) - } - off++ - } - } - } - continue - } - for _, bit := range strings.Fields(f) { - switch bit { - case "0", "(0)": - off++ - continue - case "1", "(1)": - testdata |= 1 << uint(31-off) - default: - r := rand.Intn(2) - switch r { - case 1: - testdata |= 1 << uint(31-off) - } - } - off++ - } - } - if off != 32 { - log.Printf("incorrect bit count for %s %s: have %d", inst.Name, inst.Bits, off) - } - inst.Enc = testdata - } -} - -// Generators. -// -// The test cases are described as functions that invoke a callback repeatedly, -// with a new input sequence each time. These helpers make writing those -// a little easier. - -// JSONCases generates ARM64 instructions according to inst.json. -func JSONCases(t *testing.T) func(func([]byte)) { - return func(try func([]byte)) { - data, err := ioutil.ReadFile("inst.json") - if err != nil { - t.Fatal(err) - } - var insts []InstJson - var instsN []InstJson - // Change N value to get more cases only when condmark=false. - N := 100 - if condmark == true { - N = 16 - } - if err := json.Unmarshal(data, &insts); err != nil { - t.Fatal(err) - } - // Append instructions to get more test cases. - for i := 0; i < N; { - for _, inst := range insts { - instsN = append(instsN, inst) - } - i++ - } - Round = 0 - for i := range instsN { - if i%len(insts) == 0 { - Round++ - } - doFuzzy(&instsN[i], i) - } - for _, inst := range instsN { - if condmark == true && inst.Enc == 0xffffffff { - continue - } - enc := inst.Enc - try([]byte{byte(enc), byte(enc >> 8), byte(enc >> 16), byte(enc >> 24)}) - } - } -} - -// condCases generates conditional instructions. -func condCases(t *testing.T) func(func([]byte)) { - return func(try func([]byte)) { - condmark = true - JSONCases(t)(func(enc []byte) { - try(enc) - }) - } -} - -// hexCases generates the cases written in hexadecimal in the encoded string. -// Spaces in 'encoded' separate entire test cases, not individual bytes. -func hexCases(t *testing.T, encoded string) func(func([]byte)) { - return func(try func([]byte)) { - for _, x := range strings.Fields(encoded) { - src, err := hex.DecodeString(x) - if err != nil { - t.Errorf("parsing %q: %v", x, err) - } - try(src) - } - } -} - -// testdataCases generates the test cases recorded in testdata/cases.txt. -// It only uses the inputs; it ignores the answers recorded in that file. -func testdataCases(t *testing.T, syntax string) func(func([]byte)) { - var codes [][]byte - input := filepath.Join("testdata", syntax+"cases.txt") - data, err := ioutil.ReadFile(input) - if err != nil { - t.Fatal(err) - } - for _, line := range strings.Split(string(data), "\n") { - line = strings.TrimSpace(line) - if line == "" || strings.HasPrefix(line, "#") { - continue - } - f := strings.Fields(line)[0] - i := strings.Index(f, "|") - if i < 0 { - t.Errorf("parsing %q: missing | separator", f) - continue - } - if i%2 != 0 { - t.Errorf("parsing %q: misaligned | separator", f) - } - code, err := hex.DecodeString(f[:i] + f[i+1:]) - if err != nil { - t.Errorf("parsing %q: %v", f, err) - continue - } - codes = append(codes, code) - } - - return func(try func([]byte)) { - for _, code := range codes { - try(code) - } - } -} diff --git a/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/objdump_test.go b/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/objdump_test.go deleted file mode 100644 index 261c7cae5f..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/objdump_test.go +++ /dev/null @@ -1,150 +0,0 @@ -// 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 arm64asm - -import ( - "strings" - "testing" -) - -func TestObjdumpARM64TestDecodeGNUSyntaxdata(t *testing.T) { - testObjdumpARM64(t, testdataCases(t, "gnu")) -} -func TestObjdumpARM64TestDecodeGoSyntaxdata(t *testing.T) { - testObjdumpARM64(t, testdataCases(t, "plan9")) -} -func TestObjdumpARM64Manual(t *testing.T) { testObjdumpARM64(t, hexCases(t, objdumpManualTests)) } -func TestObjdumpARM64Cond(t *testing.T) { testObjdumpARM64(t, condCases(t)) } -func TestObjdumpARM64(t *testing.T) { testObjdumpARM64(t, JSONCases(t)) } - -// objdumpManualTests holds test cases that will be run by TestObjdumpARMManual. -// If you are debugging a few cases that turned up in a longer run, it can be useful -// to list them here and then use -run=Manual, particularly with tracing enabled. -// Note that these are byte sequences, so they must be reversed from the usual -// word presentation. -var objdumpManualTests = ` -bf2003d5 -9f2003d5 -7f2003d5 -5f2003d5 -3f2003d5 -1f2003d5 -df4d03d5 -ff4d03d5 -28d91b14 -da6cb530 -15e5e514 -ff4603d5 -df4803d5 -bf4100d5 -9f3f03d5 -9f3e03d5 -9f3d03d5 -9f3b03d5 -9f3a03d5 -9f3903d5 -9f3703d5 -9f3603d5 -9f3503d5 -9f3303d5 -9f3203d5 -9f3103d5 -ff4603d5 -df4803d5 -bf4100d5 -a3681b53 -47dc78d3 -0500a012 -0500e092 -0500a052 -0500a0d2 -cd5a206e -cd5a202e -743d050e -743d0a0e -743d0c0e -743d084e -` - -// allowedMismatchObjdump reports whether the mismatch between text and dec -// should be allowed by the test. -func allowedMismatchObjdump(text string, inst *Inst, dec ExtInst) bool { - // Skip unsupported instructions - if hasPrefix(dec.text, todo...) { - return true - } - // GNU objdump has incorrect alias conditions for following instructions - if inst.Enc&0x000003ff == 0x000003ff && hasPrefix(dec.text, "negs") && hasPrefix(text, "cmp") { - return true - } - // GNU objdump "NV" is equal to our "AL" - if strings.HasSuffix(dec.text, " nv") && strings.HasSuffix(text, " al") { - return true - } - if strings.HasPrefix(dec.text, "b.nv") && strings.HasPrefix(text, "b.al") { - return true - } - // GNU objdump recognizes invalid binaries as following instructions - if hasPrefix(dec.text, "hint", "mrs", "msr", "bfc", "orr", "mov") { - return true - } - if strings.HasPrefix(text, "hint") { - return true - } - // GNU objdump recognizes reserved valuse as valid ones - if strings.Contains(text, "unknown instruction") && hasPrefix(dec.text, "fmla", "fmul", "fmulx", "fcvtzs", "fcvtzu", "fmls", "fmov", "scvtf", "ucvtf") { - return true - } - // Some old objdump recognizes ldur*/stur*/prfum as ldr*/str*/prfm - for k, v := range oldObjdumpMismatch { - if strings.HasPrefix(dec.text, k) && strings.Replace(dec.text, k, v, 1) == text { - return true - } - } - // GNU objdump misses spaces between operands for some instructions (e.g., "ld1 {v10.2s, v11.2s}, [x23],#16") - if strings.Replace(text, " ", "", -1) == strings.Replace(dec.text, " ", "", -1) { - return true - } - return false -} - -// TODO: system instruction. -var todo = strings.Fields(` - sys - dc - at - tlbi - ic - hvc - smc -`) - -// Following instructions can't be covered because they are just aliases to another instructions which are always preferred -var Ncover = strings.Fields(` - sbfm - asrv - bfm - ubfm - lslv - lsrv - rorv - ins - dup -`) - -// Some old objdump wrongly decodes following instructions and allow their mismatches to avoid false alarm -var oldObjdumpMismatch = map[string]string{ - //oldObjValue correctValue - "ldr": "ldur", - "ldrb": "ldurb", - "ldrh": "ldurh", - "ldrsb": "ldursb", - "ldrsh": "ldursh", - "ldrsw": "ldursw", - "str": "stur", - "strb": "sturb", - "strh": "sturh", - "prfm": "prfum", -} diff --git a/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/objdumpext_test.go b/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/objdumpext_test.go deleted file mode 100644 index 3bf4fa8539..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/objdumpext_test.go +++ /dev/null @@ -1,299 +0,0 @@ -// 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. - -// Copied and simplified from ../../arm/armasm/objdumpext_test.go. - -package arm64asm - -import ( - "bytes" - "debug/elf" - "encoding/binary" - "fmt" - "io" - "log" - "os" - "os/exec" - "strconv" - "strings" - "testing" -) - -const objdumpPath = "/usr/bin/objdump" - -func testObjdumpARM64(t *testing.T, generate func(func([]byte))) { - testObjdumpArch(t, generate, ModeARM64) -} - -func testObjdumpArch(t *testing.T, generate func(func([]byte)), arch Mode) { - checkObjdumpAarch64(t) - testExtDis(t, "gnu", arch, objdump, generate, allowedMismatchObjdump) - testExtDis(t, "plan9", arch, objdump, generate, allowedMismatchObjdump) -} - -func checkObjdumpAarch64(t *testing.T) { - out, err := exec.Command(objdumpPath, "-i").Output() - if err != nil { - t.Skipf("cannot run objdump: %v\n%s", err, out) - } - if !strings.Contains(string(out), "aarch64") { - t.Skip("objdump does not have aarch64 support") - } -} - -func objdump(ext *ExtDis) error { - // File already written with instructions; add ELF header. - if ext.Arch == ModeARM64 { - if err := writeELF64(ext.File, ext.Size); err != nil { - return err - } - } else { - panic("unknown arch") - } - - b, err := ext.Run(objdumpPath, "-d", "-z", ext.File.Name()) - if err != nil { - return err - } - - var ( - nmatch int - reading bool - next uint64 = start - addr uint64 - encbuf [4]byte - enc []byte - text string - ) - flush := func() { - if addr == next { - // PC-relative addresses are translated to absolute addresses based on PC by GNU objdump - // Following logical rewrites the absolute addresses back to PC-relative ones for comparing - // with our disassembler output which are PC-relative - - if m := pcrelprfmim.FindStringSubmatch(text); m != nil { - targ, _ := strconv.ParseUint(m[2], 16, 64) - text = fmt.Sprintf("%s .%+#x", m[1], uint64(targ-uint64(addr))) - } - if m := pcrelprfm.FindStringSubmatch(text); m != nil { - targ, _ := strconv.ParseUint(m[2], 16, 64) - text = fmt.Sprintf("%s .%+#x", m[1], uint64(targ-uint64(addr))) - } - if m := pcrelim.FindStringSubmatch(text); m != nil { - targ, _ := strconv.ParseUint(m[2], 16, 64) - text = fmt.Sprintf("%s .%+#x", m[1], uint64(targ-uint64(addr))) - } - if m := pcrelimzr.FindStringSubmatch(text); m != nil { - targ, _ := strconv.ParseUint(m[2], 16, 64) - text = fmt.Sprintf("%s .%+#x", m[1], uint64(targ-uint64(addr))) - } - if m := pcrelr.FindStringSubmatch(text); m != nil { - targ, _ := strconv.ParseUint(m[2], 16, 64) - if strings.Contains(m[1], "adrp") { - text = fmt.Sprintf("%s .%+#x", m[1], uint64(targ-uint64(addr&0xfffff000))) - } else { - text = fmt.Sprintf("%s .%+#x", m[1], uint64(targ-uint64(addr))) - } - } - if m := pcrelrzr.FindStringSubmatch(text); m != nil { - targ, _ := strconv.ParseUint(m[2], 16, 64) - if strings.Contains(m[1], "adrp") { - text = fmt.Sprintf("%s .%+#x", m[1], uint64(targ-uint64(addr&0xfffff000))) - } else { - text = fmt.Sprintf("%s .%+#x", m[1], uint64(targ-uint64(addr))) - } - } - if m := pcrel.FindStringSubmatch(text); m != nil { - targ, _ := strconv.ParseUint(m[2], 16, 64) - text = fmt.Sprintf("%s .%+#x", m[1], uint64(targ-uint64(addr))) - } - if strings.HasPrefix(text, "mov") && strings.Contains(text, "//") { - s := strings.Split(text, " //") - text = s[0] - } - text = strings.Replace(text, "#0.0", "#0", -1) - if text == "undefined" && len(enc) == 4 { - text = "error: unknown instruction" - enc = nil - } - if len(enc) == 4 { - // prints as word but we want to record bytes - enc[0], enc[3] = enc[3], enc[0] - enc[1], enc[2] = enc[2], enc[1] - } - ext.Dec <- ExtInst{addr, encbuf, len(enc), text} - encbuf = [4]byte{} - enc = nil - next += 4 - } - } - var textangle = []byte("<.text>:") - for { - line, err := b.ReadSlice('\n') - if err != nil { - if err == io.EOF { - break - } - return fmt.Errorf("reading objdump output: %v", err) - } - if bytes.Contains(line, textangle) { - reading = true - continue - } - if !reading { - continue - } - if debug { - os.Stdout.Write(line) - } - if enc1 := parseContinuation(line, encbuf[:len(enc)]); enc1 != nil { - enc = enc1 - continue - } - flush() - nmatch++ - addr, enc, text = parseLine(line, encbuf[:0]) - if addr > next { - return fmt.Errorf("address out of sync expected <= %#x at %q in:\n%s", next, line, line) - } - } - flush() - if next != start+uint64(ext.Size) { - return fmt.Errorf("not enough results found [%d %d]", next, start+ext.Size) - } - if err := ext.Wait(); err != nil { - return fmt.Errorf("exec: %v", err) - } - - return nil -} - -var ( - undefined = []byte("undefined") - unpredictable = []byte("unpredictable") - slashslash = []byte("//") -) - -func parseLine(line []byte, encstart []byte) (addr uint64, enc []byte, text string) { - ok := false - oline := line - i := index(line, ":\t") - if i < 0 { - log.Fatalf("cannot parse disassembly: %q", oline) - } - x, err := strconv.ParseUint(string(bytes.TrimSpace(line[:i])), 16, 32) - if err != nil { - log.Fatalf("cannot parse disassembly: %q", oline) - } - addr = uint64(x) - line = line[i+2:] - i = bytes.IndexByte(line, '\t') - if i < 0 { - log.Fatalf("cannot parse disassembly: %q", oline) - } - enc, ok = parseHex(line[:i], encstart) - if !ok { - log.Fatalf("cannot parse disassembly: %q", oline) - } - line = bytes.TrimSpace(line[i:]) - if bytes.Contains(line, undefined) { - text = "undefined" - return - } - if false && bytes.Contains(line, unpredictable) { - text = "unpredictable" - return - } - // Strip trailing comment starting with ';' - // e.g: "csinv x23, x2, x19, cc ; xxx" - if i := bytes.IndexByte(line, ';'); i >= 0 { - line = bytes.TrimSpace(line[:i]) - } - // Strip trailing comment starting with "//" - // e.g: "fccmpe s2, s9, #0x7, ne // xxx" - if i := bytes.Index(line, slashslash); i >= 0 { - line = bytes.TrimSpace(line[:i]) - } - text = string(fixSpace(line)) - return -} - -func parseContinuation(line []byte, enc []byte) []byte { - i := index(line, ":\t") - if i < 0 { - return nil - } - line = line[i+1:] - enc, _ = parseHex(line, enc) - return enc -} - -// writeELF64 writes an ELF64 header to the file, describing a text -// segment that starts at start (0x8000) and extends for size bytes. -func writeELF64(f *os.File, size int) error { - f.Seek(0, io.SeekStart) - var hdr elf.Header64 - var prog elf.Prog64 - var sect elf.Section64 - var buf bytes.Buffer - binary.Write(&buf, binary.LittleEndian, &hdr) - off1 := buf.Len() - binary.Write(&buf, binary.LittleEndian, &prog) - off2 := buf.Len() - binary.Write(&buf, binary.LittleEndian, §) - off3 := buf.Len() - buf.Reset() - data := byte(elf.ELFDATA2LSB) - hdr = elf.Header64{ - Ident: [16]byte{0x7F, 'E', 'L', 'F', 2, data, 1}, - Type: 2, - Machine: uint16(elf.EM_AARCH64), - Version: 1, - Entry: start, - Phoff: uint64(off1), - Shoff: uint64(off2), - Flags: 0x05000002, - Ehsize: uint16(off1), - Phentsize: uint16(off2 - off1), - Phnum: 1, - Shentsize: uint16(off3 - off2), - Shnum: 3, - Shstrndx: 2, - } - binary.Write(&buf, binary.LittleEndian, &hdr) - prog = elf.Prog64{ - Type: 1, - Off: start, - Vaddr: start, - Paddr: start, - Filesz: uint64(size), - Memsz: uint64(size), - Flags: 5, - Align: start, - } - binary.Write(&buf, binary.LittleEndian, &prog) - binary.Write(&buf, binary.LittleEndian, §) // NULL section - sect = elf.Section64{ - Name: 1, - Type: uint32(elf.SHT_PROGBITS), - Addr: start, - Off: start, - Size: uint64(size), - Flags: uint64(elf.SHF_ALLOC | elf.SHF_EXECINSTR), - Addralign: 4, - } - binary.Write(&buf, binary.LittleEndian, §) // .text - sect = elf.Section64{ - Name: uint32(len("\x00.text\x00")), - Type: uint32(elf.SHT_STRTAB), - Addr: 0, - Off: uint64(off2 + (off3-off2)*3), - Size: uint64(len("\x00.text\x00.shstrtab\x00")), - Addralign: 1, - } - binary.Write(&buf, binary.LittleEndian, §) - buf.WriteString("\x00.text\x00.shstrtab\x00") - f.Write(buf.Bytes()) - return nil -} diff --git a/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/testdata/Makefile b/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/testdata/Makefile deleted file mode 100644 index 9ff54a6e16..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/testdata/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -go test command: - cd ..; go test -run 'ObjdumpARM64Cond' -v -timeout 10h -long 2>&1 | tee log - cd ..; go test -run 'ObjdumpARM64TestGUNSyntaxdata' -v -timeout 10h -long 2>&1 | tee -a log - cd ..; go test -run 'ObjdumpARM64TestGoSyntaxdata' -v -timeout 10h -long 2>&1 | tee -a log - cd ..; go test -run 'ObjdumpARM64' -v -timeout 10h -long 2>&1 | tee -a log - cd ..; go test -run 'ObjdumpARM64Manual' -v -timeout 10h -long 2>&1 | tee -a log - cd ..; go test -run 'TestDecodeGNUSyntax' - cd ..; go test -run 'TestDecodeGoSyntax' - cd ..; go test -run '.*' diff --git a/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/testdata/gnucases.txt b/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/testdata/gnucases.txt deleted file mode 100644 index 2154209960..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/testdata/gnucases.txt +++ /dev/null @@ -1,4651 +0,0 @@ -0a011f1a| adc w10, w8, wzr -4c00009a| adc x12, x2, x0 -a602093a| adcs w6, w21, w9 -d60217ba| adcs x22, x22, x23 -0921250b| add w9, w8, w5, uxth -ee9e288b| add x14, x23, w8, sxtb #7 -23123011| add w3, w17, #0xc04 -2ba32391| add x11, x25, #0x8e8 -67158d0b| add w7, w11, w13, asr #5 -30da198b| add x16, x17, x25, lsl #54 -a7e72c2b| adds w7, w29, w12, sxtx #1 -357338ab| adds x21, x25, x24, uxtx #4 -6b147731| adds w11, w3, #0xdc5, lsl #12 -cd59872b| adds w13, w14, w7, asr #22 -e41f4eab| adds x4, xzr, x14, lsr #7 -b7dd8470| adr x23, .+0xfffffffffff09bb7 -0f4996d0| adrp x15, .+0xffffffff2c922000 -a2432412| and w2, w29, #0xf0001fff -93910e92| and x19, x12, #0x7c007c007c007c -7a1ec98a| and x26, x19, x9, ror #7 -1ff32972| tst w24, #0xaaaaaaaa -458051f2| ands x5, x2, #0xffff80000000ffff -af629a6a| ands w15, w21, w26, asr #24 -7ab0dfea| ands x26, x3, xzr, ror #44 -792bcc1a| asr w25, w27, w12 -872bce9a| asr x7, x28, x14 -99ff4b93| asr x25, x28, #11 -1628c91a| asr w22, w0, w9 -4e2acf9a| asr x14, x18, x15 -4be5a454| b.lt .+0xfffffffffff49ca8 -53257114| b .+0x1c4954c -dbb557b3| bfxil x27, x14, #23, #23 -70e861b3| bfxil x16, x3, #33, #26 -88a75ab3| bfxil x8, x28, #26, #16 -b03ce70a| bic w16, w5, w7, ror #15 -9235ec8a| bic x18, x12, x12, ror #13 -7450b96a| bics w20, w3, w25, asr #20 -3730b3ea| bics x23, x1, x19, asr #12 -9b897797| bl .+0xfffffffffdde266c -e0013fd6| blr x15 -a0031fd6| br x29 -e08c31d4| brk #0x8c67 -027eb435| cbnz w2, .+0xfffffffffff68fc0 -c7eb42b5| cbnz x7, .+0x85d78 -8f1d4c34| cbz w15, .+0x983b0 -e1c5abb4| cbz x1, .+0xfffffffffff578bc -4bfb543a| ccmn w26, #0x14, #0xb, al -015b46ba| ccmn x24, #0x6, #0x1, pl -8602463a| ccmn w20, w6, #0x6, eq -c6d34cba| ccmn x30, x12, #0x6, le -a76b4f7a| ccmp w29, #0xf, #0x7, vs -e3d853fa| ccmp x7, #0x13, #0x3, le -4022467a| ccmp w18, w6, #0x0, cs -c7b346fa| ccmp x30, x6, #0x7, lt -ee279b1a| csinc w14, wzr, w27, cs -4174819a| csinc x1, x2, x1, vc -5100955a| csinv w17, w2, w21, eq -573093da| csinv x23, x2, x19, cc -5f3403d5| clrex #0x4 -e615c05a| cls w6, w15 -ff15c0da| cls xzr, x15 -2e10c05a| clz w14, w1 -a912c0da| clz x9, x21 -ff11352b| cmn w15, w21, uxtb #4 -1f5220ab| cmn x16, w0, uxtw #4 -ff02266b| cmp w23, w6, uxtb -5fb739eb| cmp x26, w25, sxth #5 -bfa73bf1| cmp x29, #0xee9 -7f5c47eb| cmp x3, x7, lsr #23 -2e458e5a| csneg w14, w9, w14, mi -c3559cda| csneg x3, x14, x28, pl -1041d11a| crc32b w16, w8, w17 -bb46c31a| crc32h w27, w21, w3 -c94bd61a| crc32w w9, w30, w22 -8f4cd49a| crc32x w15, w4, x20 -7653d21a| crc32cb w22, w27, w18 -1454d51a| crc32ch w20, w0, w21 -7c58c91a| crc32cw w28, w3, w9 -185ccb9a| crc32cx w24, w0, x11 -8c30941a| csel w12, w4, w20, cc -0ea08c9a| csel x14, x0, x12, ge -e3b79f1a| cset w3, ge -fea79f9a| cset x30, lt -e5639f5a| csetm w5, vc -e4739fda| csetm x4, vs -bad4981a| csinc w26, w5, w24, le -5167909a| csinc x17, x26, x16, vs -65e3955a| csinv w5, w27, w21, al -8e338bda| csinv x14, x28, x11, cc -0a269d5a| csneg w10, w16, w29, cs -ab1692da| csneg x11, x21, x18, ne -418ea5d4| dcps1 #0x2c72 -6239a5d4| dcps2 #0x29cb -e3ebabd4| dcps3 #0x5f5f -bf3a03d5| dmb ishst -e003bfd6| drps -9f3003d5| dsb #0x00 -c974354a| eon w9, w6, w21, lsl #29 -89b86eca| eon x9, x4, x14, lsr #46 -76e343d2| eor x22, x27, #0xe03fffffffffffff -536d8c4a| eor w19, w10, w12, asr #27 -d1ef1cca| eor x17, x30, x28, lsl #59 -e0039fd6| eret -591d8813| extr w25, w10, w8, #7 -888dd693| extr x8, x12, x22, #35 -bf2003d5| sevl -df2003d5| hint #0x6 -a0fc5fd4| hlt #0xffe5 -df3103d5| isb #0x1 -9dfddf88| ldar w29, [x12] -76ffdfc8| ldar x22, [x27] -36ffdf08| ldarb w22, [x25] -bcfcdf48| ldarh w28, [x5] -54c17f88| ldaxp w20, w16, [x10] -3eaf7fc8| ldaxp x30, x11, [x25] -e2fd5f88| ldaxr w2, [x15] -f5fd5fc8| ldaxr x21, [x15] -70fe5f08| ldaxrb w16, [x19] -bcfc5f48| ldaxrh w28, [x5] -ecff5928| ldnp w12, wzr, [sp,#204] -852744a8| ldnp x5, x9, [x28,#64] -1286d728| ldp w18, w1, [x16],#188 -7668e8a8| ldp x22, x26, [x3],#-384 -6d8bc729| ldp w13, w2, [x27,#60]! -1cadd1a9| ldp x28, x11, [x8,#280]! -bf4e7e29| ldp wzr, w19, [x21,#-16] -61695fa9| ldp x1, x26, [x11,#496] -4c00e668| ldpsw x12, x0, [x2],#-208 -85a0cb69| ldpsw x5, x8, [x4,#92]! -9b894d69| ldpsw x27, x2, [x12,#108] -e9955ab8| ldr w9, [x15],#-87 -5c255df8| ldr x28, [x10],#-46 -703c57b8| ldr w16, [x3,#-141]! -1dac57f8| ldr x29, [x0,#-134]! -393c50b9| ldr w25, [x1,#4156] -498d5cf9| ldr x9, [x10,#14616] -841fe218| ldr w4, .+0xfffffffffffc43f0 -cce88858| ldr x12, .+0xfffffffffff11d18 -72fa72b8| ldr w18, [x19,x18,sxtx #2] -daeb66f8| ldr x26, [x30,x6,sxtx] -8ca74238| ldrb w12, [x28],#42 -4e5c5e38| ldrb w14, [x2,#-27]! -03936d39| ldrb w3, [x24,#2916] -577a6e38| ldrb w23, [x18,x14,lsl #0] -adb54678| ldrh w13, [x13],#107 -820f4c78| ldrh w2, [x28,#192]! -92787579| ldrh w18, [x4,#6844] -4bd6c438| ldrsb w11, [x18],#77 -fb478238| ldrsb x27, [sp],#36 -4d7edc38| ldrsb w13, [x18,#-57]! -18ee9438| ldrsb x24, [x16,#-178]! -16b9c639| ldrsb w22, [x8,#430] -37958f39| ldrsb x23, [x9,#997] -af7ae238| ldrsb w15, [x21,x2,lsl #0] -1568fa38| ldrsb w21, [x0,x26] -744bbf38| ldrsb x20, [x27,wzr,uxtw] -f069a538| ldrsb x16, [x15,x5] -d9a6cd78| ldrsh w25, [x22],#218 -ff368b78| ldrsh xzr, [x23],#179 -5b8cc878| ldrsh w27, [x2,#136]! -361f9c78| ldrsh x22, [x25,#-63]! -359bec79| ldrsh w21, [x25,#5708] -4d6c8079| ldrsh x13, [x2,#54] -9deae578| ldrsh w29, [x20,x5,sxtx] -f2fab878| ldrsh x18, [x23,x24,sxtx #1] -02669cb8| ldrsw x2, [x16],#-58 -5c8e92b8| ldrsw x28, [x18,#-216]! -ea9e92b9| ldrsw x10, [x23,#4764] -6e280c98| ldrsw x14, .+0x1850c -49dabcb8| ldrsw x9, [x18,w28,sxtw #2] -64285eb8| ldtr w4, [x3,#-30] -6ab851f8| ldtr x10, [x3,#-229] -aa094f38| ldtrb w10, [x13,#240] -b7894e78| ldtrh w23, [x13,#232] -85cadd38| ldtrsb w5, [x20,#-36] -2db99838| ldtrsb x13, [x9,#-117] -7ef8ce78| ldtrsh w30, [x3,#239] -786a8978| ldtrsh x24, [x19,#150] -c5eb81b8| ldtrsw x5, [x30,#30] -a1f14bb8| ldur w1, [x13,#191] -c3425cf8| ldur x3, [x22,#-60] -2e125038| ldurb w14, [x17,#-255] -26004878| ldurh w6, [x1,#128] -c3e3cd38| ldursb w3, [x30,#222] -27618938| ldursb x7, [x9,#150] -7c71db78| ldursh w28, [x11,#-73] -1d109e78| ldursh x29, [x0,#-31] -d48084b8| ldursw x20, [x6,#72] -172f7f88| ldxp w23, w11, [x24] -10347fc8| ldxp x16, x13, [x0] -fe7f5f88| ldxr w30, [sp] -6c7f5fc8| ldxr x12, [x27] -047c5f08| ldxrb w4, [x0] -9a7d5f48| ldxrh w26, [x12] -4f21cb1a| lsl w15, w10, w11 -1523db9a| lsl x21, x24, x27 -81c74fd3| ubfx x1, x28, #15, #35 -c922c81a| lsl w9, w22, w8 -fd22dc9a| lsl x29, x23, x28 -4226dd1a| lsr w2, w18, w29 -a224ca9a| lsr x2, x5, x10 -707c0153| lsr w16, w3, #1 -34fc4cd3| lsr x20, x1, #12 -6c24c91a| lsr w12, w3, w9 -8527c89a| lsr x5, x28, x8 -ea36171b| madd w10, w23, w23, w13 -e47a0a9b| madd x4, x23, x10, x30 -35fd001b| mneg w21, w9, w0 -77ff0e9b| mneg x23, x27, x14 -38030011| add w24, w25, #0x0 -37030091| add x23, x25, #0x0 -94b8ad12| mov w20, #0x923bffff -fff29892| mov xzr, #0xffffffffffff3868 -d4adb252| mov w20, #0x956e0000 -8747e2d2| mov x7, #0x123c000000000000 -f5132d32| orr w21, wzr, #0xf80000 -eb7f34b2| mov x11, #0xffffffffffffffff -f503092a| mov w21, w9 -e7031eaa| mov x7, x30 -35e8c1f2| movk x21, #0xf41, lsl #32 -44629512| mov w4, #0xffff54ed -cc0dd392| mov x12, #0xffff6791ffffffff -cbfb9152| mov w11, #0x8fde -3d25ebd2| mov x29, #0x5929000000000000 -e67a3fd5| mrs x6, s3_7_c7_c10_7 -f9dd15d5| msr s2_5_c13_c13_7, x25 -25840c1b| msub w5, w1, w12, w1 -02ce1a9b| msub x2, x16, x26, x19 -b67c1a1b| mul w22, w5, w26 -607c049b| mul x0, x3, x4 -e97f6daa| mvn x9, x13, lsr #31 -fe071f6b| negs w30, wzr, lsl #1 -f68f14eb| negs x22, x20, lsl #35 -e8030d5a| ngc w8, w13 -fe031eda| ngc x30, x30 -e5030a7a| ngcs w5, w10 -f00318fa| ngcs x16, x24 -1f2003d5| nop -032ee42a| orn w3, w16, w4, ror #11 -634cf6aa| orn x3, x3, x22, ror #19 -f8492d32| orr w24, w15, #0xfff8003f -96f542b2| orr x22, x12, #0xcfffffffffffffff -1c110d2a| orr w28, w8, w13, lsl #4 -c65b1eaa| orr x6, x30, x30, lsl #22 -f300b2f9| prfm pstl2strm, [x7,#25600] -2aa196d8| prfm plil2keep, .+0xfffffffffff2d424 -2ad8bef8| prfm plil2keep, [x1,w30,sxtw #3] -c62184f8| prfum #0x06, [x14,#66] -3601c05a| rbit w22, w9 -6401c0da| rbit x4, x11 -e0035fd6| ret xzr -0a09c05a| rev w10, w8 -220cc0da| rev x2, x1 -b206c05a| rev16 w18, w21 -2407c0da| rev16 x4, x25 -7e0bc0da| rev32 x30, x27 -ae0ec0da| rev x14, x21 -336f8413| extr w19, w25, w4, #27 -af47ca93| extr x15, x29, x10, #17 -bc2cdb1a| ror w28, w5, w27 -e52fdd9a| ror x5, xzr, x29 -832dc31a| ror w3, w12, w3 -e22ec09a| ror x2, x23, x0 -1801045a| sbc w24, w8, w4 -5a0119da| sbc x26, x10, x25 -52021b7a| sbcs w18, w18, w27 -250105fa| sbcs x5, x9, x5 -fc430b13| sbfx w28, wzr, #11, #6 -a0574093| sbfx x0, x29, #0, #22 -8b3b7a93| sbfiz x11, x28, #6, #15 -fc310513| sbfx w28, w15, #5, #8 -fbdc4293| sbfx x27, x7, #2, #54 -c90dd61a| sdiv w9, w14, w22 -a90ecd9a| sdiv x9, x21, x13 -9f2003d5| sev -bf2003d5| sevl -d27f229b| smull x18, w30, w2 -efff3a9b| smnegl x15, wzr, w26 -7d963f9b| smsubl x29, w19, wzr, x5 -b57e519b| smulh x21, x21, x17 -a07c209b| smull x0, w5, w0 -d0fe9f88| stlr w16, [x22] -03ff9fc8| stlr x3, [x24] -8bff9f08| stlrb w11, [x28] -f0fe9f48| stlrh w16, [x23] -c6ae3588| stlxp w21, w6, w11, [x22] -c6fa22c8| stlxp w2, x6, x30, [x22] -affd0e88| stlxr w14, w15, [x13] -67ff1cc8| stlxr w28, x7, [x27] -17ff1c08| stlxrb w28, w23, [x24] -7bfe0b48| stlxrh w11, w27, [x19] -2a8c0528| stnp w10, w3, [x1,#44] -67fc10a8| stnp x7, xzr, [x3,#264] -5559bd28| stp w21, w22, [x10],#-24 -166c96a8| stp x22, x27, [x0],#352 -3d4a8729| stp w29, w18, [x17,#56]! -912f86a9| stp x17, x11, [x28,#96]! -c40d3029| stp w4, w3, [x14,#-128] -f73f39a9| stp x23, x15, [sp,#-112] -34441eb8| str w20, [x1],#-28 -11f60bf8| str x17, [x16],#191 -c15d15b8| str w1, [x14,#-171]! -ae4d12f8| str x14, [x13,#-220]! -03ef39b9| str w3, [x24,#14828] -208228f9| str x0, [x17,#20736] -734823f8| str x19, [x3,w3,uxtw] -ffb41838| strb wzr, [x7],#-117 -bb0d1a38| strb w27, [x13,#-96]! -b1612239| strb w17, [x13,#2200] -92682038| strb w18, [x4,x0] -81682638| strb w1, [x4,x6] -87841b78| strh w7, [x4],#-72 -cc3d1878| strh w12, [x14,#-125]! -53cf1c79| strh w19, [x26,#3686] -63792d78| strh w3, [x11,x13,lsl #1] -9d7803b8| sttr w29, [x4,#55] -b9c807f8| sttr x25, [x5,#124] -f04a1e38| sttrb w16, [x23,#-28] -52990078| sttrh w18, [x10,#9] -152002b8| stur w21, [x0,#34] -397217f8| stur x25, [x17,#-137] -8f320138| sturb w15, [x20,#19] -eb021b78| sturh w11, [x23,#-80] -854a3f88| stxp wzr, w5, w18, [x20] -d12620c8| stxp w0, x17, x9, [x22] -537e0288| stxr w2, w19, [x18] -af7d15c8| stxr w21, x15, [x13] -e97c1d08| stxrb w29, w9, [x7] -837d1b48| stxrh w27, w3, [x12] -f25e344b| sub w18, w23, w20, uxtw #7 -3ac825cb| sub x26, x1, w5, sxtw #2 -e8f40ccb| sub x8, x7, x12, lsl #61 -a6ad226b| subs w6, w13, w2, sxth #3 -647735eb| subs x4, x27, x21, uxtx #5 -c770566b| subs w7, w6, w22, lsr #28 -d03c1aeb| subs x16, x6, x26, lsl #15 -a17f03d4| svc #0x1bfd -991f0013| sxtb w25, w28 -a91d4093| sxtb x9, w13 -083d0013| sxth w8, w8 -393e4093| sxth x25, w17 -1b7c4093| sxtw x27, w0 -0c5b2cd5| sysl x12, #4, C5, C11, #0 -09868bb7| tbnz x9, #49, .+0x70c0 -8c2e6836| tbz w12, #13, .+0x5d0 -3f0d0172| tst w9, #0x80000007 -df6f7cf2| tst x30, #0xfffffff0 -1f2f11ea| tst x24, x17, lsl #11 -9ced71d3| ubfx x28, x12, #49, #11 -1cbb7fd3| ubfiz x28, x24, #1, #47 -25e661d3| ubfx x5, x17, #33, #25 -af0adc1a| udiv w15, w21, w28 -550ac29a| udiv x21, x18, x2 -9102b19b| umaddl x17, w20, w17, x0 -41fea39b| umnegl x1, w18, w3 -87d8a39b| umsubl x7, w4, w3, x22 -987ed89b| umulh x24, x20, x24 -d37eb29b| umull x19, w22, w18 -461c0053| uxtb w6, w2 -f43c0053| uxth w20, w7 -5f2003d5| wfe -7f2003d5| wfi -3f2003d5| yield -e5bb200e| abs v5.8b, v31.8b -c9842d0e| add v9.8b, v6.8b, v13.8b -f4bd394e| addp v20.16b, v15.16b, v25.16b -b3b8b14e| addv s19, v5.4s -cd5b284e| aesd v13.16b, v30.16b -4b4b284e| aese v11.16b, v26.16b -2879284e| aesimc v8.16b, v9.16b -fe68284e| aesmc v30.16b, v7.16b -f61e334e| and v22.16b, v23.16b, v19.16b -88a4002f| mvni v8.4h, #0x4, lsl #8 -1877076f| bic v24.4s, #0xf8, lsl #24 -0d1e6c0e| bic v13.8b, v16.8b, v12.8b -b81ce26e| bif v24.16b, v5.16b, v2.16b -381cbf2e| bit v24.8b, v1.8b, v31.8b -cd1f6c6e| bsl v13.16b, v30.16b, v12.16b -8d48a00e| cls v13.2s, v4.2s -324ba02e| clz v18.2s, v25.2s -c88f2b2e| cmeq v8.8b, v30.8b, v11.8b -a799e05e| cmeq d7, d13, #0 -dc9be04e| cmeq v28.2d, v30.2d, #0 -623f2d4e| cmge v2.16b, v27.16b, v13.16b -e889e06e| cmge v8.2d, v15.2d, #0 -cb37e55e| cmgt d11, d30, d5 -8e37b00e| cmgt v14.2s, v28.2s, v16.2s -1a8be04e| cmgt v26.2d, v24.2d, #0 -7f37eb7e| cmhi d31, d27, d11 -333d356e| cmhs v19.16b, v9.16b, v21.16b -bd9ae07e| cmle d29, d21, #0 -8999602e| cmle v9.4h, v12.4h, #0 -aca9e05e| cmlt d12, d13, #0 -7fa8204e| cmlt v31.16b, v3.16b, #0 -588db20e| cmtst v24.2s, v10.2s, v18.2s -cc051d5e| mov b12, v14.b[14] -4c06050e| dup v12.8b, v18.b[2] -790c020e| dup v25.4h, w3 -391d286e| eor v25.16b, v9.16b, v8.16b -4b30156e| ext v11.16b, v2.16b, v21.16b, #6 -44d6bf7e| fabd s4, s18, s31 -17fba00e| fabs v23.2s, v24.2s -90c2201e| fabs s16, s20 -62c2601e| fabs d2, d19 -eeef3f7e| facge s14, s31, s31 -09efa07e| facgt s9, s24, s0 -72edae6e| facgt v18.4s, v11.4s, v14.4s -61d5394e| fadd v1.4s, v11.4s, v25.4s -0d2a3d1e| fadd s13, s16, s29 -4b296f1e| fadd d11, d10, d15 -78d8307e| faddp s24, v3.2s -e7d7322e| faddp v7.2s, v31.2s, v18.2s -e8253c1e| fccmp s15, s28, #0x8, cs -e8857f1e| fccmp d15, d31, #0x8, hi -5714291e| fccmpe s2, s9, #0x7, ne -b484631e| fccmpe d5, d3, #0x4, hi -3ce5685e| fcmeq d28, d9, d8 -50e6214e| fcmeq v16.4s, v18.4s, v1.4s -9ddae05e| fcmeq d29, d20, #0 -b3e62b7e| fcmge s19, s21, s11 -0ce4396e| fcmge v12.4s, v0.4s, v25.4s -a6c9e07e| fcmge d6, d13, #0 -ede6bd7e| fcmgt s13, s23, s29 -13e6ae2e| fcmgt v19.2s, v16.2s, v14.2s -4cc9e05e| fcmgt d12, d10, #0 -41cba04e| fcmgt v1.4s, v26.4s, #0 -96d8e07e| fcmle d22, d4, #0 -0be9a05e| fcmlt s11, s8, #0 -dfe9a04e| fcmlt v31.4s, v14.4s, #0 -a023301e| fcmp s29, s16 -68213e1e| fcmp s11, #0 -20236d1e| fcmp d25, d13 -68216b1e| fcmp d11, #0 -3023351e| fcmpe s25, s21 -78203e1e| fcmpe s3, #0 -b022721e| fcmpe d21, d18 -f8226f1e| fcmpe d23, #0 -b54e271e| fcsel s21, s21, s7, mi -319f611e| fcsel d17, d25, d1, ls -2142e21e| fcvt s1, h17 -cfc3e21e| fcvt d15, h30 -01c1231e| fcvt h1, s8 -4fc0221e| fcvt d15, s2 -f9c0631e| fcvt h25, d7 -2b43621e| fcvt s11, d25 -f1c8615e| fcvtas d17, d7 -ea01241e| fcvtas w10, s15 -0c02249e| fcvtas x12, s16 -e702641e| fcvtas w7, d23 -f501649e| fcvtas x21, d15 -45ca217e| fcvtau s5, s18 -66c9212e| fcvtau v6.2s, v11.2s -b302251e| fcvtau w19, s21 -e102259e| fcvtau x1, s23 -5703651e| fcvtau w23, d26 -2c01659e| fcvtau x12, d9 -2c7b210e| fcvtl v12.4s, v25.4h -f478214e| fcvtl2 v20.4s, v7.8h -d1b8615e| fcvtms d17, d6 -a2ba614e| fcvtms v2.2d, v21.2d -ee01301e| fcvtms w14, s15 -de01309e| fcvtms x30, s14 -8401701e| fcvtms w4, d12 -c502709e| fcvtms x5, d22 -44b8617e| fcvtmu d4, d2 -5601311e| fcvtmu w22, s10 -4602319e| fcvtmu x6, s18 -1003711e| fcvtmu w16, d24 -e602719e| fcvtmu x6, d23 -c16b210e| fcvtn v1.4h, v30.4s -4d6b614e| fcvtn2 v13.4s, v26.2d -95ab215e| fcvtns s21, s28 -65a9614e| fcvtns v5.2d, v11.2d -8a02201e| fcvtns w10, s20 -bc03209e| fcvtns x28, s29 -fc01601e| fcvtns w28, d15 -9800609e| fcvtns x24, d4 -b1aa617e| fcvtnu d17, d21 -80a9216e| fcvtnu v0.4s, v12.4s -3201211e| fcvtnu w18, s9 -e101219e| fcvtnu x1, s15 -ae00611e| fcvtnu w14, d5 -9503619e| fcvtnu x21, d28 -3faae15e| fcvtps d31, d17 -c4a8e14e| fcvtps v4.2d, v6.2d -ab01281e| fcvtps w11, s13 -5800289e| fcvtps x24, s2 -9b02681e| fcvtps w27, d20 -de03689e| fcvtps x30, d30 -d8aaa17e| fcvtpu s24, s22 -e203291e| fcvtpu w2, s31 -5302299e| fcvtpu x19, s18 -5302691e| fcvtpu w19, d18 -8501699e| fcvtpu x5, d12 -93ff735f| fcvtzs d19, d28, #13 -b7fd504f| fcvtzs v23.2d, v13.2d, #48 -7ebba15e| fcvtzs s30, s27 -d49f181e| fcvtzs w20, s30, #25 -538d189e| fcvtzs x19, s10, #29 -7e74589e| fcvtzs x30, d3, #35 -4300381e| fcvtzs w3, s2 -bc03389e| fcvtzs x28, s29 -c702781e| fcvtzs w7, d22 -0401789e| fcvtzs x4, d8 -d1ff2e7f| fcvtzu s17, s30, #18 -d0fd3b2f| fcvtzu v16.2s, v14.2s, #5 -70bae17e| fcvtzu d16, d19 -3ef6191e| fcvtzu w30, s17, #3 -cae7199e| fcvtzu x10, s30, #7 -cffb599e| fcvtzu x15, d30, #2 -e402391e| fcvtzu w4, s23 -1a03399e| fcvtzu x26, s24 -0401791e| fcvtzu w4, d8 -c200799e| fcvtzu x2, d6 -ebfe346e| fdiv v11.4s, v23.4s, v20.4s -c918371e| fdiv s9, s6, s23 -911a7f1e| fdiv d17, d20, d31 -a81f0c1f| fmadd s8, s29, s12, s7 -d0404a1f| fmadd d16, d6, d10, d16 -7ff6324e| fmax v31.4s, v19.4s, v18.4s -b84b351e| fmax s24, s29, s21 -d64b621e| fmax d22, d30, d2 -016b241e| fmaxnm s1, s24, s4 -5b69781e| fmaxnm d27, d10, d24 -f1c8707e| fmaxnmp d17, v7.2d -27c5306e| fmaxnmp v7.4s, v9.4s, v16.4s -aef8707e| fmaxp d14, v5.2d -53f6202e| fmaxp v19.2s, v18.2s, v0.2s -78fb306e| fmaxv s24, v27.4s -5af4ec4e| fmin v26.2d, v2.2d, v12.2d -505a3c1e| fmin s16, s18, s28 -4858661e| fmin d8, d2, d6 -a9c6e04e| fminnm v9.2d, v21.2d, v0.2d -987b311e| fminnm s24, s28, s17 -95796f1e| fminnm d21, d12, d15 -f5cbb07e| fminnmp s21, v31.2s -b0f8f07e| fminp d16, v5.2d -8bf5a42e| fminp v11.2s, v12.2s, v4.2s -87cd384e| fmla v7.4s, v12.4s, v24.4s -fd50db5f| fmls d29, d7, v27.d[0] -d1ccb44e| fmls v17.4s, v6.4s, v20.4s -ebf5064f| fmov v11.4s, #-2.421875000000000000e-01 -49f4056f| fmov v9.2d, #-9.000000000000000000e+00 -0940201e| fmov s9, s0 -db43601e| fmov d27, d30 -a901271e| fmov s9, w13 -3702261e| fmov w23, s17 -4d02679e| fmov d13, x18 -9d02af9e| fmov v29.d[1], x20 -ef03669e| fmov x15, d31 -7101ae9e| fmov x17, v11.d[1] -0e103d1e| fmov s14, #-7.500000000000000000e-01 -1e50761e| fmov d30, #-1.800000000000000000e+01 -d2b4121f| fmsub s18, s6, s18, s13 -0a9c4c1f| fmsub d10, d0, d12, d7 -0d99b35f| fmul s13, s8, v19.s[3] -a89b9b0f| fmul v8.2s, v29.2s, v27.s[2] -75dc376e| fmul v21.4s, v3.4s, v23.4s -7909241e| fmul s25, s11, s4 -d7096b1e| fmul d23, d14, d11 -2999ab7f| fmulx s9, s9, v11.s[3] -35dd6d5e| fmulx d21, d9, d13 -c8dc284e| fmulx v8.4s, v6.4s, v8.4s -c043211e| fneg s0, s30 -4742611e| fneg d7, d18 -9c51251f| fnmadd s28, s12, s5, s20 -e407771f| fnmadd d4, d31, d23, d1 -fbfa3a1f| fnmsub s27, s23, s26, s30 -bbb0691f| fnmsub d27, d5, d9, d12 -6a8b3f1e| fnmul s10, s27, s31 -1a8b751e| fnmul d26, d24, d21 -57d8e15e| frecpe d23, d2 -62dba14e| frecpe v2.4s, v27.4s -81fd325e| frecps s1, s12, s18 -31fe224e| frecps v17.4s, v17.4s, v2.4s -ecf9e15e| frecpx d12, d15 -c18b216e| frinta v1.4s, v30.4s -0240261e| frinta s2, s0 -8041661e| frinta d0, d12 -c89ba12e| frinti v8.2s, v30.2s -2ec2271e| frinti s14, s17 -5cc0671e| frinti d28, d2 -3898210e| frintm v24.2s, v1.2s -9843251e| frintm s24, s28 -5b40651e| frintm d27, d2 -2189614e| frintn v1.2d, v9.2d -7e42241e| frintn s30, s19 -5d40641e| frintn d29, d2 -85c3241e| frintp s5, s28 -46c2641e| frintp d6, d18 -c39b216e| frintx v3.4s, v30.4s -a243271e| frintx s2, s29 -1d41671e| frintx d29, d8 -5499e14e| frintz v20.2d, v10.2d -92c2251e| frintz s18, s20 -75c2651e| frintz d21, d19 -ddd9e17e| frsqrte d29, d14 -60fff85e| frsqrts d0, d27, d24 -dafffb4e| frsqrts v26.2d, v30.2d, v27.2d -1ff9a12e| fsqrt v31.2s, v8.2s -2dc3211e| fsqrt s13, s25 -72c0611e| fsqrt d18, d3 -7d3a3e1e| fsub s29, s19, s30 -3f38771e| fsub d31, d1, d23 -185e016e| mov v24.b[0], v16.b[11] -911d0d4e| mov v17.b[6], w12 -2877400c| ld1 {v8.4h}, [x25] -8ea8404c| ld1 {v14.4s, v15.4s}, [x4] -0f62404c| ld1 {v15.16b-v17.16b}, [x16] -0f27400c| ld1 {v15.4h-v18.4h}, [x24] -4c75df0c| ld1 {v12.4h}, [x10],#8 -2f7bd04c| ld1 {v15.4s}, [x25], x16 -eaaadf0c| ld1 {v10.2s, v11.2s}, [x23],#16 -eca7cc4c| ld1 {v12.8h, v13.8h}, [sp], x12 -cd60df4c| ld1 {v13.16b-v15.16b}, [x6],#48 -9163df0c| ld1 {v17.8b-v19.8b}, [x28],#24 -152ddf4c| ld1 {v21.2d-v24.2d}, [x8],#64 -0725c04c| ld1 {v7.8h-v10.8h}, [x8], x0 -7c04404d| ld1 {v28.b}[9], [x3] -6d49404d| ld1 {v13.h}[5], [x11] -9e81400d| ld1 {v30.s}[0], [x12] -d384404d| ld1 {v19.d}[1], [x6] -b20ddf4d| ld1 {v18.b}[11], [x13],#1 -f114cd4d| ld1 {v17.b}[13], [x7], x13 -bb92df4d| ld1 {v27.s}[3], [x21],#4 -a883d64d| ld1 {v8.s}[2], [x29], x22 -f584df4d| ld1 {v21.d}[1], [x7],#8 -0284c80d| ld1 {v2.d}[0], [x0], x8 -91c3400d| ld1r {v17.8b}, [x28] -71c9df0d| ld1r {v17.2s}, [x11],#4 -e7c4db0d| ld1r {v7.4h}, [x7], x27 -b787404c| ld2 {v23.8h, v24.8h}, [x29] -1280df0c| ld2 {v18.8b, v19.8b}, [x0],#16 -2f88c10c| ld2 {v15.2s, v16.2s}, [x1], x1 -a01e604d| ld2 {v0.b, v1.b}[15], [x21] -eb82604d| ld2 {v11.s, v12.s}[2], [x23] -f985600d| ld2 {v25.d, v26.d}[0], [x15] -e315ff0d| ld2 {v3.b, v4.b}[5], [x15],#2 -1c11f24d| ld2 {v28.b, v29.b}[12], [x8], x18 -f341ef4d| ld2 {v19.h, v20.h}[4], [x15], x15 -5a80ff4d| ld2 {v26.s, v27.s}[2], [x2],#8 -d781fd0d| ld2 {v23.s, v24.s}[0], [x14], x29 -c885ff0d| ld2 {v8.d, v9.d}[0], [x14],#16 -1286f34d| ld2 {v18.d, v19.d}[1], [x16], x19 -06c2600d| ld2r {v6.8b, v7.8b}, [x16] -95c7ff4d| ld2r {v21.8h, v22.8h}, [x28],#4 -d4c1e14d| ld2r {v20.16b, v21.16b}, [x14], x1 -eb4bdf4c| ld3 {v11.4s-v13.4s}, [sp],#48 -ce4fc24c| ld3 {v14.2d-v16.2d}, [x30], x2 -db23400d| ld3 {v27.b-v29.b}[0], [x30] -26b3400d| ld3 {v6.s-v8.s}[1], [x25] -37a4400d| ld3 {v23.d-v25.d}[0], [x1] -052edf4d| ld3 {v5.b-v7.b}[11], [x16],#3 -8c3ccd0d| ld3 {v12.b-v14.b}[7], [x4], x13 -74b0df4d| ld3 {v20.s-v22.s}[3], [x3],#12 -b7b1c84d| ld3 {v23.s-v25.s}[3], [x13], x8 -e6a5df4d| ld3 {v6.d-v8.d}[1], [x15],#24 -42a5c80d| ld3 {v2.d-v4.d}[0], [x10], x8 -9ceb400d| ld3r {v28.2s-v30.2s}, [x28] -6aeadf4d| ld3r {v10.4s-v12.4s}, [x19],#12 -65ebce4d| ld3r {v5.4s-v7.4s}, [x27], x14 -ea05400c| ld4 {v10.4h-v13.4h}, [x15] -1f03df0c| ld4 {v31.8b, v0.8b, v1.8b, v2.8b}, [x24],#32 -ae09c90c| ld4 {v14.2s-v17.2s}, [x13], x9 -fd3a604d| ld4 {v29.b, v30.b, v31.b, v0.b}[14], [x23] -d8a0604d| ld4 {v24.s-v27.s}[2], [x6] -62a4604d| ld4 {v2.d-v5.d}[1], [x3] -712fff0d| ld4 {v17.b-v20.b}[3], [x27],#4 -aa27f40d| ld4 {v10.b-v13.b}[1], [x29], x20 -be71ff4d| ld4 {v30.h, v31.h, v0.h, v1.h}[6], [x13],#8 -e360ee4d| ld4 {v3.h-v6.h}[4], [x7], x14 -c0a0ff0d| ld4 {v0.s-v3.s}[0], [x6],#16 -d3a3e00d| ld4 {v19.s-v22.s}[0], [x30], x0 -95a7ff0d| ld4 {v21.d-v24.d}[0], [x28],#32 -32a6e14d| ld4 {v18.d-v21.d}[1], [x17], x1 -56e0604d| ld4r {v22.16b-v25.16b}, [x2] -dce7ff0d| ld4r {v28.4h-v31.4h}, [x30],#8 -14e8ef0d| ld4r {v20.2s-v23.2s}, [x0], x15 -7776732c| ldnp s23, s29, [x19,#-104] -23dd746c| ldnp d3, d23, [x9,#-184] -383e48ac| ldnp q24, q15, [x17,#256] -0d10c12c| ldp s13, s4, [x0],#8 -fe3ae66c| ldp d30, d14, [x23],#-416 -f627f9ac| ldp q22, q9, [sp],#-224 -918cd82d| ldp s17, s3, [x4,#196]! -986be46d| ldp d24, d26, [x28,#-448]! -ebd8f8ad| ldp q11, q22, [x7,#-240]! -3c905c2d| ldp s28, s4, [x1,#228] -5887536d| ldp d24, d1, [x26,#312] -08957cad| ldp q8, q5, [x8,#-112] -c5e5543c| ldr b5, [x14],#-178 -4ff5417c| ldr h15, [x10],#31 -72e54bbc| ldr s18, [x11],#190 -16b55dfc| ldr d22, [x8],#-37 -9e24db3c| ldr q30, [x4],#-78 -d20c503c| ldr b18, [x6,#-256]! -1f1c4d7c| ldr h31, [x0,#209]! -2fbf4dbc| ldr s15, [x25,#219]! -a06c59fc| ldr d0, [x5,#-106]! -886ddd3c| ldr q8, [x12,#-42]! -58f64e3d| ldr b24, [x18,#957] -f5c3547d| ldr h21, [sp,#2656] -8e8a7bbd| ldr s14, [x20,#15240] -8e3c7afd| ldr d14, [x4,#29816] -f2aeff3d| ldr q18, [x23,#65200] -92831b1c| ldr s18, .+0x37070 -3e01b55c| ldr d30, .+0xfffffffffff6a024 -fdee3b9c| ldr q29, .+0x77ddc -1d78793c| ldr b29, [x0,x25,lsl #0] -b8f15d3c| ldur b24, [x13,#-33] -95635c7c| ldur h21, [x28,#-58] -27d046bc| ldur s7, [x1,#109] -21624efc| ldur d1, [x17,#230] -6dd2d83c| ldur q13, [x19,#-115] -dc09be6f| mla v28.4s, v14.4s, v30.s[3] -eb97af4e| mla v11.4s, v31.4s, v15.4s -0495722e| mls v4.4h, v8.4h, v18.4h -21070a5e| mov h1, v25.h[2] -92471b6e| mov v18.b[13], v28.b[8] -7a1e134e| mov v26.b[9], w19 -761fa30e| orr v22.8b, v27.8b, v3.8b -f23d070e| umov w18, v15.b[3] -a5e6064f| movi v5.16b, #0xd5 -63c5064f| movi v3.4s, #0xcb, msl #8 -bca7014f| movi v28.8h, #0x3d, lsl #8 -95e4040f| movi v21.8b, #0x84 -fce4072f| movi d28, #0xffffff0000ffffff -24e6036f| movi v4.2d, #0xffffff000000ff -429d6a4e| mul v2.8h, v10.8h, v10.8h -e558202e| mvn v5.8b, v7.8b -fe65012f| mvni v30.2s, #0x2f, lsl #24 -2b16046f| bic v11.4s, #0x91 -7756016f| bic v23.4s, #0x33, lsl #16 -e159202e| mvn v1.8b, v15.8b -da1cf14e| orn v26.16b, v6.16b, v17.16b -ca04014f| movi v10.4s, #0x26 -14a6020f| movi v20.4h, #0x50, lsl #8 -2f1fbf0e| orr v15.8b, v25.8b, v31.8b -74e2f20e| pmull v20.1q, v19.1d, v18.1d -2740262e| raddhn v7.8b, v1.8h, v6.8h -17412e6e| raddhn2 v23.16b, v8.8h, v14.8h -da59602e| rbit v26.8b, v14.8b -230a604e| rev64 v3.8h, v17.8h -178d210f| rshrn v23.2s, v8.2d, #31 -6b8d2c4f| rshrn2 v11.4s, v11.2d, #20 -b57c2a0e| saba v21.8b, v5.8b, v10.8b -71533d0e| sabal v17.8h, v27.8b, v29.8b -1c50774e| sabal2 v28.4s, v0.8h, v23.8h -1974be4e| sabd v25.4s, v0.4s, v30.4s -6b71ad0e| sabdl v11.2d, v11.2s, v13.2s -5270324e| sabdl2 v18.8h, v2.16b, v18.16b -366b200e| sadalp v22.4h, v25.8b -1802680e| saddl v24.4s, v16.4h, v8.4h -022b604e| saddlp v2.4s, v24.8h -413ab04e| saddlv d1, v18.4s -4013750e| saddw v0.4s, v26.4s, v21.4h -4412744e| saddw2 v4.4s, v18.4s, v20.8h -2ee6255f| scvtf s14, s17, #27 -dce75f4f| scvtf v28.2d, v30.2d, #33 -5bdb615e| scvtf d27, d26 -3ad9210e| scvtf v26.2s, v9.2s -1ceb421e| scvtf d28, w24, #6 -9dde029e| scvtf s29, x20, #9 -57d1429e| scvtf d23, x10, #12 -d600221e| scvtf s22, w6 -c503621e| scvtf d5, w30 -3303229e| scvtf s19, x25 -0003629e| scvtf d0, x24 -6f01075e| sha1c q15, s11, v7.4s -9308285e| sha1h s19, s4 -b420105e| sha1m q20, s5, v16.4s -f4131f5e| sha1p q20, s31, v31.4s -dc311f5e| sha1su0 v28.4s, v14.4s, v31.4s -bb1a285e| sha1su1 v27.4s, v21.4s -2753075e| sha256h2 q7, q25, v7.4s -3141065e| sha256h q17, q9, v6.4s -172b285e| sha256su0 v23.4s, v24.4s -bb621b5e| sha256su1 v27.4s, v21.4s, v27.4s -7005644e| shadd v16.8h, v11.8h, v4.8h -2d870e0f| shrn v13.8b, v25.8h, #2 -ac86024f| movi v12.8h, #0x55 -1c26a50e| shsub v28.2s, v16.2s, v5.2s -db576b6f| sli v27.2d, v30.2d, #43 -c3652c4e| smax v3.16b, v14.16b, v12.16b -b5a7ab0e| smaxp v21.2s, v29.2s, v11.2s -f1aeb34e| sminp v17.4s, v23.4s, v19.4s -87a8b14e| sminv s7, v4.4s -1e21bc4f| smlal2 v30.2d, v8.4s, v28.s[1] -50a33a0e| smlsl v16.8h, v26.8b, v26.8b -4e2d1a0e| smov w14, v10.h[6] -9ba9b30f| smull v27.2d, v12.2s, v19.s[3] -417a205e| sqabs b1, b18 -9f78a04e| sqabs v31.4s, v4.4s -580d2e5e| sqadd b24, b10, b14 -3d30764f| sqdmlal2 v29.4s, v1.8h, v6.h[3] -9591b25e| sqdmlal d21, s12, s18 -0d92670e| sqdmlal v13.4s, v16.4h, v7.4h -90b1765e| sqdmlsl s16, h12, h22 -83c2ad5f| sqdmulh s3, s20, v13.s[1] -bbb7aa5e| sqdmulh s27, s29, s10 -c8b99a5f| sqdmull d8, s14, v26.s[2] -75b3920f| sqdmull v21.2d, v27.2s, v18.s[0] -86d1b75e| sqdmull d6, s12, s23 -edd06f4e| sqdmull2 v13.4s, v7.8h, v15.8h -0f7ae07e| sqneg d15, d16 -e87b602e| sqneg v8.4h, v31.4h -ecb5a92e| sqrdmulh v12.2s, v15.2s, v9.2s -d75fba5e| sqrshl s23, s30, s26 -f75f324e| sqrshl v23.16b, v31.16b, v18.16b -af9c114f| sqrshrn2 v15.8h, v5.4s, #15 -318d2f6f| sqrshrun2 v17.4s, v9.2d, #17 -b3757c5f| sqshl d19, d13, #60 -0c776f4f| sqshl v12.2d, v24.2d, #47 -d84c2a5e| sqshl b24, b6, b10 -ae4e704e| sqshl v14.8h, v21.8h, v16.8h -b566727f| sqshlu d21, d21, #50 -4566596f| sqshlu v5.2d, v18.2d, #25 -d595140f| sqshrn v21.4h, v14.4s, #12 -00940b4f| sqshrn2 v0.16b, v0.8h, #5 -5384352f| sqshrun v19.2s, v2.2d, #11 -1a2e3d5e| sqsub b26, b16, b29 -b02e6b4e| sqsub v16.8h, v21.8h, v11.8h -1249a15e| sqxtn s18, d8 -eb49610e| sqxtn v11.4h, v15.4s -cb4a614e| sqxtn2 v11.8h, v22.4s -102b217e| sqxtun b16, h24 -492a212e| sqxtun v9.8b, v18.8h -112a616e| sqxtun2 v17.8h, v16.4s -6c16ae4e| srhadd v12.4s, v19.4s, v14.4s -5946467f| sri d25, d18, #58 -21460a2f| sri v1.8b, v17.8b, #6 -9f56b10e| srshl v31.2s, v20.2s, v17.2s -e724635f| srshr d7, d7, #29 -e8266b4f| srshr v8.2d, v23.2d, #21 -2b37180f| srsra v11.4h, v25.4h, #8 -1644f95e| sshl d22, d0, d25 -3644fc4e| sshl v22.2d, v1.2d, v28.2d -d9a61f4f| sshll2 v25.4s, v22.8h, #15 -9b075e5f| sshr d27, d28, #34 -2c044c4f| sshr v12.2d, v1.2d, #52 -d915324f| ssra v25.4s, v14.4s, #14 -de21260e| ssubl v30.8h, v14.8b, v6.8b -c720254e| ssubl2 v7.8h, v6.16b, v5.16b -9d33b90e| ssubw v29.2d, v28.2d, v25.2s -7e71000c| st1 {v30.8b}, [x11] -cca6000c| st1 {v12.4h, v13.4h}, [x22] -5467000c| st1 {v20.4h-v22.4h}, [x26] -cc28004c| st1 {v12.4s-v15.4s}, [x6] -9e7e9f4c| st1 {v30.2d}, [x20],#16 -4b769d0c| st1 {v11.4h}, [x18], x29 -adaa9f0c| st1 {v13.2s, v14.2s}, [x21],#16 -bca7844c| st1 {v28.8h, v29.8h}, [x29], x4 -b5659f0c| st1 {v21.4h-v23.4h}, [x13],#24 -e669874c| st1 {v6.4s-v8.4s}, [x15], x7 -9b2a9f0c| st1 {v27.2s-v30.2s}, [x20],#32 -14278b0c| st1 {v20.4h-v23.4h}, [x24], x11 -d002004d| st1 {v16.b}[8], [x22] -9780004d| st1 {v23.s}[2], [x4] -7787004d| st1 {v23.d}[1], [x27] -850d9f0d| st1 {v5.b}[3], [x12],#1 -7b1f8f0d| st1 {v27.b}[7], [x27], x15 -7a5a9f4d| st1 {v26.h}[7], [x19],#2 -e14b9e4d| st1 {v1.h}[5], [sp], x30 -dd819f4d| st1 {v29.s}[2], [x14],#4 -a281910d| st1 {v2.s}[0], [x13], x17 -b2849f0d| st1 {v18.d}[0], [x5],#8 -c484964d| st1 {v4.d}[1], [x6], x22 -f686004c| st2 {v22.8h, v23.8h}, [x23] -2e869f0c| st2 {v14.4h, v15.4h}, [x17],#16 -d200200d| st2 {v18.b, v19.b}[0], [x6] -ab58200d| st2 {v11.h, v12.h}[3], [x5] -c491204d| st2 {v4.s, v5.s}[3], [x14] -5a85204d| st2 {v26.d, v27.d}[1], [x10] -f217bf0d| st2 {v18.b, v19.b}[5], [sp],#2 -2b0ea04d| st2 {v11.b, v12.b}[11], [x17], x0 -4042bf0d| st2 {v0.h, v1.h}[0], [x18],#4 -9342af4d| st2 {v19.h, v20.h}[4], [x20], x15 -9b91bf4d| st2 {v27.s, v28.s}[3], [x12],#8 -7480a10d| st2 {v20.s, v21.s}[0], [x3], x1 -c884bf0d| st2 {v8.d, v9.d}[0], [x6],#16 -ae86ac4d| st2 {v14.d, v15.d}[1], [x21], x12 -614d004c| st3 {v1.2d-v3.2d}, [x11] -324b9f4c| st3 {v18.4s-v20.4s}, [x25],#48 -7340870c| st3 {v19.8b-v21.8b}, [x3], x7 -ac24004d| st3 {v12.b-v14.b}[9], [x5] -a161004d| st3 {v1.h-v3.h}[4], [x13] -09b1004d| st3 {v9.s-v11.s}[3], [x8] -78a7004d| st3 {v24.d-v26.d}[1], [x27] -4f349f0d| st3 {v15.b-v17.b}[5], [x2],#3 -643d840d| st3 {v4.b-v6.b}[7], [x11], x4 -48699f0d| st3 {v8.h-v10.h}[1], [x10],#6 -85b19f4d| st3 {v5.s-v7.s}[3], [x12],#12 -60a18a0d| st3 {v0.s-v2.s}[0], [x11], x10 -69a49f0d| st3 {v9.d-v11.d}[0], [x3],#24 -ada7814d| st3 {v13.d-v15.d}[1], [x29], x1 -760c004c| st4 {v22.2d-v25.2d}, [x3] -ee0d9f4c| st4 {v14.2d-v17.2d}, [x15],#64 -7800970c| st4 {v24.8b-v27.8b}, [x3], x23 -a221200d| st4 {v2.b-v5.b}[0], [x13] -9a69204d| st4 {v26.h-v29.h}[5], [x12] -02a1204d| st4 {v2.s-v5.s}[2], [x8] -3fa6200d| st4 {v31.d, v0.d, v1.d, v2.d}[0], [x17] -943abf0d| st4 {v20.b-v23.b}[6], [x20],#4 -bf26a60d| st4 {v31.b, v0.b, v1.b, v2.b}[1], [x21], x6 -55b3bf4d| st4 {v21.s-v24.s}[3], [x26],#16 -dda1b04d| st4 {v29.s, v30.s, v31.s, v0.s}[2], [x14], x16 -6aa5bf0d| st4 {v10.d-v13.d}[0], [x11],#32 -e7a7ac0d| st4 {v7.d-v10.d}[0], [sp], x12 -f9c9202c| stnp s25, s18, [x15,#-252] -18b8316c| stnp d24, d14, [x0,#-232] -409c1cac| stnp q0, q7, [x2,#912] -73f0812c| stp s19, s28, [x3],#12 -28d0826c| stp d8, d20, [x1],#40 -9bf5bfac| stp q27, q29, [x12],#-16 -885ead2d| stp s8, s23, [x20,#-152]! -b0de926d| stp d16, d23, [x21,#296]! -713387ad| stp q17, q12, [x27,#224]! -52130a2d| stp s18, s4, [x26,#80] -b63a236d| stp d22, d14, [x21,#-464] -6d5424ad| stp q13, q21, [x3,#-896] -afb60f3c| str b15, [x21],#251 -81e7077c| str h1, [x28],#126 -203713bc| str s0, [x25],#-205 -60c61ffc| str d0, [x19],#-4 -d256813c| str q18, [x22],#21 -ffce083c| str b31, [x23,#140]! -6d3d017c| str h13, [x11,#19]! -52ed01bc| str s18, [x10,#30]! -fafd11fc| str d26, [x15,#-225]! -663e9b3c| str q6, [x19,#-77]! -7d0c393d| str b29, [x3,#3651] -8f50067d| str h15, [x4,#808] -94680dbd| str s20, [x4,#3432] -b7673bfd| str d23, [x29,#30408] -fed3a63d| str q30, [sp,#39744] -8a6a243c| str b10, [x20,x4] -29493fbc| str s9, [x9,wzr,uxtw] -8bd93bfc| str d11, [x12,w27,sxtw #3] -c768a93c| str q7, [x6,x9] -a7b00a3c| stur b7, [x5,#171] -40e3107c| stur h0, [x26,#-242] -18911fbc| stur s24, [x8,#-7] -fcc007fc| stur d28, [x7,#124] -db12893c| stur q27, [x22,#145] -1686716e| sub v22.8h, v16.8h, v17.8h -5362320e| subhn v19.8b, v18.8h, v18.8h -6163bf4e| subhn2 v1.4s, v27.2d, v31.2d -a73be05e| suqadd d7, d29 -21a4100f| sxtl v1.4s, v1.4h -8b23164e| tbl v11.16b, {v28.16b, v29.16b}, v22.16b -3642120e| tbl v22.8b, {v17.16b-v19.16b}, v18.8b -cf611f0e| tbl v15.8b, {v14.16b-v17.16b}, v31.8b -0b020e4e| tbl v11.16b, {v16.16b}, v14.16b -9830014e| tbx v24.16b, {v4.16b, v5.16b}, v1.16b -1452044e| tbx v20.16b, {v16.16b-v18.16b}, v4.16b -b4711a0e| tbx v20.8b, {v13.16b-v16.16b}, v26.8b -f911140e| tbx v25.8b, {v15.16b}, v20.8b -9f28500e| trn1 v31.4h, v4.4h, v16.4h -2e69c64e| trn2 v14.2d, v9.2d, v6.2d -c752756e| uabal2 v7.4s, v22.8h, v21.8h -8675696e| uabd v6.8h, v12.8h, v9.8h -a973ab6e| uabdl2 v9.2d, v29.4s, v11.4s -fa006c2e| uaddl v26.4s, v7.4h, v12.4h -da00236e| uaddl2 v26.8h, v6.16b, v3.16b -ab3a306e| uaddlv h11, v21.16b -a312746e| uaddw2 v3.4s, v21.4s, v20.8h -cee55e7f| ucvtf d14, d14, #34 -8edb617e| ucvtf d14, d28 -ab8f431e| ucvtf d11, w29, #29 -68b3039e| ucvtf s8, x27, #20 -7686439e| ucvtf d22, x19, #31 -2a03231e| ucvtf s10, w25 -9f01631e| ucvtf d31, w12 -a800239e| ucvtf s8, x5 -0302639e| ucvtf d3, x16 -df65a42e| umax v31.2s, v14.2s, v4.2s -29ab702e| umaxv h9, v25.4h -6f6e2e6e| umin v15.16b, v19.16b, v14.16b -fdada32e| uminp v29.2s, v15.2s, v3.2s -07289a6f| umlal2 v7.2d, v0.4s, v26.s[2] -aa80ad2e| umlal v10.2d, v5.2s, v13.2s -d66b462f| umlsl v22.4s, v30.4h, v6.h[4] -12a3b62e| umlsl v18.2d, v24.2s, v22.2s -583e0d0e| umov w24, v18.b[6] -20c3b52e| umull v0.2d, v25.2s, v21.2s -20c2616e| umull2 v0.4s, v17.8h, v1.8h -2f0f6d7e| uqadd h15, h25, h13 -a60c272e| uqadd v6.8b, v5.8b, v7.8b -5b5da27e| uqrshl s27, s10, s2 -195c786e| uqrshl v25.8h, v0.8h, v24.8h -209e282f| uqrshrn v0.2s, v17.2d, #24 -e89e3b6f| uqrshrn2 v8.4s, v23.2d, #5 -4f75147f| uqshl h15, h10, #4 -d2767d6f| uqshl v18.2d, v22.2d, #61 -bb4cfe7e| uqshl d27, d5, d30 -794ea42e| uqshl v25.2s, v19.2s, v4.2s -51960b7f| uqshrn b17, h18, #5 -642ce77e| uqsub d4, d3, d7 -6149617e| uqxtn h1, s11 -4e48a12e| uqxtn v14.2s, v2.2d -9cc8a14e| urecpe v28.4s, v4.4s -2f15a52e| urhadd v15.2s, v9.2s, v5.2s -5757fb7e| urshl d23, d26, d27 -2756706e| urshl v7.8h, v17.8h, v16.8h -a424487f| urshr d4, d5, #56 -b926796f| urshr v25.2d, v21.2d, #7 -1336076f| bic v19.4s, #0xf0, lsl #8 -e347e06e| ushl v3.2d, v31.2d, v0.2d -f7a5272f| ushll v23.2d, v15.2s, #7 -9ba63d6f| ushll2 v27.2d, v20.4s, #29 -d405737f| ushr d20, d14, #13 -3a05116f| ushr v26.8h, v9.8h, #15 -1d39607e| usqadd h29, h8 -0e39e06e| usqadd v14.2d, v8.2d -8022b02e| usubl v0.2d, v20.2s, v16.2s -9a20786e| usubl2 v26.4s, v4.8h, v24.8h -df33692e| usubw v31.4s, v30.4s, v9.4h -92a5102f| uxtl v18.4s, v12.4h -0e19464e| uzp1 v14.8h, v8.8h, v6.8h -7629610e| xtn v22.4h, v11.4s -7338504e| zip1 v19.8h, v3.8h, v16.8h -357bd64e| zip2 v21.2d, v25.2d, v22.2d -63020f1a| adc w3, w19, w15 -1f03159a| adc xzr, x24, x21 -d300103a| adcs w19, w6, w16 -1b0010ba| adcs x27, x0, x16 -dd133f0b| add w29, w30, wzr, uxtb #4 -89c42f8b| add x9, x4, w15, sxtw #1 -4e242a11| add w14, w2, #0xa89 -e1c12f2b| adds w1, w15, w15, sxtw -733421ab| adds x19, x3, w1, uxth #5 -0ccc5aab| adds x12, x0, x26, lsr #51 -51354470| adr x17, .+0x886ab -ef6796d0| adrp x15, .+0xffffffff2ccfe000 -2e122612| and w14, w17, #0x7c000000 -5e4c2992| and x30, x2, #0xff8007ffff8007ff -2805410a| and w8, w9, w1, lsr #1 -ede1938a| and x13, x15, x19, asr #56 -e7c10f72| ands w7, w15, #0x2020202 -23ed55f2| ands x3, x9, #0xfffff87fffffffff -e6935bea| ands x6, xzr, x27, lsr #36 -0e2ac61a| asr w14, w16, w6 -802ad59a| asr x0, x20, x21 -7cfd7793| asr x28, x11, #55 -f028cd1a| asr w16, w7, w13 -132bd29a| asr x19, x24, x18 -c2560e54| b.cs .+0x1cad8 -83516b17| b .+0xfffffffffdad460c -7a571233| bfxil w26, w27, #18, #4 -71b858b3| bfxil x17, x3, #24, #23 -c3964bb3| bfxil x3, x22, #11, #27 -eb561233| bfxil w11, w23, #18, #4 -063f5db3| bfi x6, x24, #35, #16 -0a337a0a| bic w10, w24, w26, lsr #12 -2a71e28a| bic x10, x9, x2, ror #28 -c168bf6a| bics w1, w6, wzr, asr #26 -d8bb3cea| bics x24, x30, x28, lsl #46 -82e81795| bl .+0x45fa208 -40033fd6| blr x26 -c0011fd6| br x14 -00dd31d4| brk #0x8ee8 -7267db35| cbnz w18, .+0xfffffffffffb6cec -e44c7fb5| cbnz x4, .+0xfe99c -9dc4c334| cbz w29, .+0xfffffffffff87890 -376eceb4| cbz x23, .+0xfffffffffff9cdc4 -a6cb563a| ccmn w29, #0x16, #0x6, gt -87db55ba| ccmn x28, #0x15, #0x7, le -a042493a| ccmn w21, w9, #0x0, mi -6a0040ba| ccmn x3, x0, #0xa, eq -46bb5c7a| ccmp w26, #0x1c, #0x6, lt -c72942fa| ccmp x14, #0x2, #0x7, cs -cda1427a| ccmp w14, w2, #0xd, ge -a1314dfa| ccmp x13, x13, #0x1, cc -8706931a| csinc w7, w20, w19, eq -3ae69a9a| csinc x26, x17, x26, al -9e51945a| csinv w30, w12, w20, pl -d5e386da| csinv x21, x30, x6, al -5f3503d5| clrex #0x5 -e515c05a| cls w5, w15 -a815c0da| cls x8, x13 -4a12c05a| clz w10, w18 -3c10c0da| clz x28, x1 -ff70252b| cmn w7, w5, uxtx #4 -9fa133ab| cmn x12, w19, sxth -3f3a822b| cmn w17, w2, asr #14 -df1d44ab| cmn x14, x4, lsr #7 -3f95386b| cmp w9, w24, sxtb #5 -9f653feb| cmp x12, xzr, uxtx #1 -1626915a| csneg w22, w16, w17, cs -b4d587da| csneg x20, x13, x7, le -9841d41a| crc32b w24, w12, w20 -ec45d01a| crc32h w12, w15, w16 -8048ca1a| crc32w w0, w4, w10 -d44ec19a| crc32x w20, w22, x1 -1552d31a| crc32cb w21, w16, w19 -4b54c71a| crc32ch w11, w2, w7 -245ad41a| crc32cw w4, w17, w20 -c35cc89a| crc32cx w3, w6, x8 -14219f1a| csel w20, w8, wzr, cs -9c73979a| csel x28, x28, x23, vc -e7279f1a| cset w7, cc -ec579f9a| cset x12, mi -e5f39f5a| csinv w5, wzr, wzr, al -e8639fda| csetm x8, vc -ea76971a| cinc w10, w23, vs -78a7859a| csinc x24, x27, x5, ge -b590845a| csinv w21, w5, w4, ls -b4029eda| csinv x20, x21, x30, eq -b3969b5a| csneg w19, w21, w27, ls -938591da| csneg x19, x12, x17, hi -016ea8d4| dcps1 #0x4370 -0275a4d4| dcps2 #0x23a8 -a3e9a6d4| dcps3 #0x374d -bf3903d5| dmb ishld -e003bfd6| drps -9f3e03d5| dsb st -50b1a0ca| eon x16, x10, x0, asr #44 -c0b02f52| eor w0, w6, #0x3ffe3ffe -4b0c1ed2| eor x11, x2, #0x3c0000003c -693c074a| eor w9, w3, w7, lsl #15 -113e1aca| eor x17, x16, x26, lsl #15 -e0039fd6| eret -fef8c693| extr x30, x7, x6, #62 -3f2003d5| yield -3f2403d5| hint #0x21 -c0425ad4| hlt #0xd216 -df3003d5| isb #0x0 -f7fddf88| ldar w23, [x15] -96fedfc8| ldar x22, [x20] -11fedf08| ldarb w17, [x16] -c2fedf48| ldarh w2, [x22] -2d927f88| ldaxp w13, w4, [x17] -198f7fc8| ldaxp x25, x3, [x24] -46ff5f88| ldaxr w6, [x26] -81fe5fc8| ldaxr x1, [x20] -86fe5f08| ldaxrb w6, [x20] -78ff5f48| ldaxrh w24, [x27] -35864a28| ldnp w21, w1, [x17,#84] -6da05fa8| ldnp x13, x8, [x3,#504] -a8f9f428| ldp w8, w30, [x13],#-92 -b749e3a8| ldp x23, x18, [x13],#-464 -bdedd929| ldp w29, w27, [x13,#204]! -c8e5c6a9| ldp x8, x25, [x14,#104]! -c0857f29| ldp w0, w1, [x14,#-4] -388a6ca9| ldp x24, x2, [x17,#-312] -086be468| ldpsw x8, x26, [x24],#-224 -d107d269| ldpsw x17, x1, [x30,#144]! -738e4e69| ldpsw x19, x3, [x19,#116] -6ee55fb8| ldr w14, [x11],#-2 -233459f8| ldr x3, [x1],#-109 -919f44b8| ldr w17, [x28,#73]! -acdd45f8| ldr x12, [x13,#93]! -e1cd51b9| ldr w1, [x15,#4556] -95e27bf9| ldr x21, [x20,#30656] -09c4fa18| ldr w9, .+0xffffffffffff5880 -f528ad58| ldr x21, .+0xfffffffffff5a51c -0c554b38| ldrb w12, [x8],#181 -054f5938| ldrb w5, [x24,#-108]! -1f206539| ldrb wzr, [x0,#2376] -73796a38| ldrb w19, [x11,x10,lsl #0] -a8b74f78| ldrh w8, [x29],#251 -021e5e78| ldrh w2, [x16,#-31]! -ec126b79| ldrh w12, [x23,#5512] -fc5a6178| ldrh w28, [x23,w1,uxtw #1] -eaf6c238| ldrsb w10, [x23],#47 -87679838| ldrsb x7, [x28],#-122 -567fdb38| ldrsb w22, [x26,#-73]! -3b2e8138| ldrsb x27, [x17,#18]! -7d74c039| ldrsb w29, [x3,#29] -7d1f8539| ldrsb x29, [x27,#327] -225bff38| ldrsb w2, [x25,wzr,uxtw #0] -6a7bed38| ldrsb w10, [x27,x13,lsl #0] -0f69b538| ldrsb x15, [x8,x21] -c796cc78| ldrsh w7, [x22],#201 -50268e78| ldrsh x16, [x18],#226 -229ddb78| ldrsh w2, [x9,#-71]! -0f4f9178| ldrsh x15, [x24,#-236]! -59ecc379| ldrsh w25, [x2,#502] -83d49679| ldrsh x3, [x4,#2922] -986be878| ldrsh w24, [x28,x8] -cad8bf78| ldrsh x10, [x6,wzr,sxtw #1] -6b4693b8| ldrsw x11, [x19],#-204 -cb9e81b8| ldrsw x11, [x22,#25]! -280d9eb9| ldrsw x8, [x9,#7692] -93dec198| ldrsw x19, .+0xfffffffffff83bd0 -1a68b8b8| ldrsw x26, [x0,x24] -35b955b8| ldtr w21, [x9,#-165] -658b57f8| ldtr x5, [x27,#-136] -b3594038| ldtrb w19, [x13,#5] -5ac95d78| ldtrh w26, [x10,#-36] -2c3ade38| ldtrsb w12, [x17,#-29] -4de99038| ldtrsb x13, [x10,#-242] -e178c378| ldtrsh w1, [x7,#55] -a77a8778| ldtrsh x7, [x21,#119] -cde982b8| ldtrsw x13, [x14,#46] -04d15bb8| ldur w4, [x8,#-67] -02a256f8| ldur x2, [x16,#-150] -97405438| ldurb w23, [x4,#-188] -99b14b78| ldurh w25, [x12,#187] -f9a1cf38| ldursb w25, [x15,#250] -c0218c38| ldursb x0, [x14,#194] -5790d278| ldursh w23, [x2,#-215] -a3808278| ldursh x3, [x5,#40] -a9b08fb8| ldursw x9, [x5,#251] -98217f88| ldxp w24, w8, [x12] -4d6a7fc8| ldxp x13, x26, [x18] -9c7e5f88| ldxr w28, [x20] -0e7c5fc8| ldxr x14, [x0] -507c5f08| ldxrb w16, [x2] -ea7f5f48| ldxrh w10, [sp] -5523dd1a| lsl w21, w26, w29 -9721ca9a| lsl x23, x12, x10 -75665bd3| ubfiz x21, x19, #37, #26 -0a20df1a| lsl w10, w0, wzr -5222c99a| lsl x18, x18, x9 -5124df1a| lsr w17, w2, wzr -6b26d69a| lsr x11, x19, x22 -9a7c0753| lsr w26, w4, #7 -7bfd53d3| lsr x27, x11, #19 -5f26d91a| lsr wzr, w18, w25 -3625d89a| lsr x22, x9, x24 -9d76001b| madd w29, w20, w0, w29 -822f0e9b| madd x2, x28, x14, x11 -e8fe101b| mneg w8, w23, w16 -88fc099b| mneg x8, x4, x9 -dd030011| add w29, w30, #0x0 -db010091| add x27, x14, #0x0 -0c6db012| mov w12, #0x7c97ffff -3ff5aa92| mov xzr, #0xffffffffa856ffff -87f0f6d2| mov x7, #0xb784000000000000 -f3571132| orr w19, wzr, #0xffff801f -f3bb0bb2| mov x19, #0xffefffefffefffef -f103082a| mov w17, w8 -ef031faa| mov x15, xzr -4a6bf5f2| movk x10, #0xab5a, lsl #48 -383b9312| mov w24, #0xffff6626 -f5fb9092| mov x21, #0xffffffffffff7820 -d5b4b052| mov w21, #0x85a60000 -fdc5eed2| mov x29, #0x762f000000000000 -c58435d5| mrs x5, s2_5_c8_c4_6 -1a0f13d5| msr s2_3_c0_c15_0, x26 -52d5181b| msub w18, w10, w24, w21 -c4f81d9b| msub x4, x6, x29, x30 -a57c1b1b| mul w5, w5, w27 -8f7f0a9b| mul x15, x28, x10 -e75361aa| mvn x7, x1, lsr #20 -e0cb15cb| neg x0, x21, lsl #50 -ffdb49eb| cmp xzr, x9, lsr #54 -f5031c5a| ngc w21, w28 -e6031eda| ngc x6, x30 -e103077a| ngcs w1, w7 -f20301fa| ngcs x18, x1 -1f2003d5| nop -9347722a| orn w19, w28, w18, lsr #17 -0591e1aa| orn x5, x8, x1, ror #36 -7ba82a32| orr w27, w3, #0xffc1ffc1 -ae087db2| orr x14, x5, #0x38 -9608472a| orr w22, w4, w7, lsr #2 -c40dc5aa| orr x4, x14, x5, ror #3 -9d83bcf9| prfm #0x1d, [x28,#30976] -78ab03d8| prfm #0x18, .+0x756c -6e9186f8| prfum #0x0e, [x11,#105] -c001c05a| rbit w0, w14 -4203c0da| rbit x2, x26 -c0035fd6| ret -9b08c05a| rev w27, w4 -740cc0da| rev x20, x3 -0205c05a| rev16 w2, w8 -dd07c0da| rev16 x29, x30 -020bc0da| rev32 x2, x24 -780cc0da| rev x24, x3 -9b7f9513| extr w27, w28, w21, #31 -5243dd93| extr x18, x26, x29, #16 -822eca1a| ror w2, w20, w10 -f02ddb9a| ror x16, x15, x27 -082ed81a| ror w8, w16, w24 -7b2cc39a| ror x27, x3, x3 -3b030b5a| sbc w27, w25, w11 -f2021dda| sbc x18, x23, x29 -e600127a| sbcs w6, w7, w18 -cf030ffa| sbcs x15, x30, x15 -3a797793| sbfiz x26, x9, #9, #31 -4a305193| sbfiz x10, x2, #47, #13 -a1c74493| sbfx x1, x29, #4, #46 -a00fc01a| sdiv w0, w29, w0 -f10edd9a| sdiv x17, x23, x29 -9f2003d5| sev -bf2003d5| sevl -a52d319b| smaddl x5, w13, w17, x11 -b4fc399b| smnegl x20, w5, w25 -579e369b| smsubl x23, w18, w22, x7 -ea7e429b| smulh x10, x23, x2 -eb7f219b| smull x11, wzr, w1 -f1fe9f88| stlr w17, [x23] -edff9fc8| stlr x13, [sp] -bffe9f08| stlrb wzr, [x21] -9cfd9f48| stlrh w28, [x12] -41bf2688| stlxp w6, w1, w15, [x26] -01e93cc8| stlxp w28, x1, x26, [x8] -e0fd1f88| stlxr wzr, w0, [x15] -12fe17c8| stlxr w23, x18, [x16] -d4fc1008| stlxrb w16, w20, [x6] -befc0048| stlxrh w0, w30, [x5] -76613728| stnp w22, w24, [x11,#-72] -c7523ba8| stnp x7, x20, [x22,#-80] -8e3a9f28| stp w14, w14, [x20],#248 -aa1fa6a8| stp x10, x7, [x29],#-416 -fbae8d29| stp w27, w11, [x23,#108]! -f63c80a9| stp x22, x15, [x7,#0]! -43d73629| stp w3, w21, [x26,#-76] -1ae01ba9| stp x26, x24, [x0,#440] -8f650cb8| str w15, [x12],#198 -aad503f8| str x10, [x13],#61 -ec4d00b8| str w12, [x15,#4]! -7dbc1df8| str x29, [x3,#-37]! -9b0226b9| str w27, [x20,#9728] -91691af9| str x17, [x12,#13520] -20840838| strb w0, [x1],#136 -060c1f38| strb w6, [x0,#-16]! -2b213a39| strb w11, [x9,#3720] -ab6b3438| strb w11, [x29,x20] -50e51e78| strh w16, [x10],#-18 -5d5d1878| strh w29, [x10,#-123]! -ea862379| strh w10, [x23,#4546] -d65a2778| strh w22, [x22,w7,uxtw #1] -d5ca12b8| sttr w21, [x22,#-212] -001b18f8| sttr x0, [x24,#-127] -290a1e38| sttrb w9, [x17,#-32] -0b381078| sttrh w11, [x0,#-253] -c78101b8| stur w7, [x14,#24] -c0b217f8| stur x0, [x22,#-133] -f8401e38| sturb w24, [x7,#-28] -5e911a78| sturh w30, [x10,#-87] -b7622d88| stxp w13, w23, w24, [x21] -233d37c8| stxp w23, x3, x15, [x9] -847d0088| stxr w0, w4, [x12] -a27d0bc8| stxr w11, x2, [x13] -f27f1e08| stxrb w30, w18, [sp] -3a7d1848| stxrh w24, w26, [x9] -d4dc204b| sub w20, w6, w0, sxtw #7 -874023cb| sub x7, x4, w3, uxtw -44eb4f51| sub w4, w26, #0x3fa, lsl #12 -17b012cb| sub x23, x0, x18, lsl #44 -ac1e376b| subs w12, w21, w23, uxtb #7 -b0483beb| subs x16, x5, w27, uxtw #2 -d1f994eb| subs x17, x14, x20, asr #62 -61d513d4| svc #0x9eab -591d0013| sxtb w25, w10 -9f1f4093| sxtb xzr, w28 -773f0013| sxth w23, w27 -453c4093| sxth x5, w2 -b77c4093| sxtw x23, w5 -743628d5| sysl x20, #0, C3, C6, #3 -6fd248b7| tbnz x15, #41, .+0x1a4c -5afe3036| tbz w26, #6, .+0x1fc8 -9f613672| tst w12, #0xfffffc07 -1f8d22f2| tst x8, #0xc003c003c003c003 -ff6e93ea| tst x23, x19, asr #27 -06997ed3| ubfiz x6, x8, #2, #39 -5dd054d3| ubfx x29, x2, #20, #33 -a54273d3| ubfiz x5, x21, #13, #17 -7d08d11a| udiv w29, w3, w17 -120acf9a| udiv x18, x16, x15 -1401a89b| umaddl x20, w8, w8, x0 -08feb29b| umnegl x8, w16, w18 -eeb0b99b| umsubl x14, w7, w25, x12 -967fdd9b| umulh x22, x28, x29 -947eb59b| umull x20, w20, w21 -7e1f0053| uxtb w30, w27 -983c0053| uxth w24, w4 -5f2003d5| wfe -7f2003d5| wfi -3f2003d5| yield -02bb200e| abs v2.8b, v24.8b -0686ec4e| add v6.2d, v16.2d, v12.2d -ea42ac0e| addhn v10.2s, v23.2d, v12.2d -7d43624e| addhn2 v29.8h, v27.4s, v2.4s -2cbd710e| addp v12.4h, v9.4h, v17.4h -f5bab14e| addv s21, v23.4s -8158284e| aesd v1.16b, v4.16b -ba48284e| aese v26.16b, v5.16b -0c7a284e| aesimc v12.16b, v16.16b -3e6a284e| aesmc v30.16b, v17.16b -091f384e| and v9.16b, v24.16b, v24.16b -07b6046f| bic v7.8h, #0x90, lsl #8 -00c5006f| mvni v0.4s, #0x8, msl #8 -f81e6c0e| bic v24.8b, v23.8b, v12.8b -6f1ced2e| bif v15.8b, v3.8b, v13.8b -e31da16e| bit v3.16b, v15.16b, v1.16b -6a1d7c6e| bsl v10.16b, v11.16b, v28.16b -284a600e| cls v8.4h, v17.4h -9a49202e| clz v26.8b, v12.8b -d78f706e| cmeq v23.8h, v30.8h, v16.8h -7798e05e| cmeq d23, d3, #0 -739a200e| cmeq v19.8b, v19.8b, #0 -ff3f2b4e| cmge v31.16b, v31.16b, v11.16b -5337370e| cmgt v19.8b, v26.8b, v23.8b -3489604e| cmgt v20.8h, v9.8h, #0 -083d782e| cmhs v8.4h, v8.4h, v24.4h -c899e07e| cmle d8, d14, #0 -3498a06e| cmle v20.4s, v1.4s, #0 -ebaa200e| cmlt v11.8b, v23.8b, #0 -408dfe4e| cmtst v0.2d, v10.2d, v30.2d -0e06085e| mov d14, v16.d[0] -1e0d0d0e| dup v30.8b, w8 -8e1d3a6e| eor v14.16b, v12.16b, v26.16b -632a086e| ext v3.16b, v19.16b, v8.16b, #5 -97d7e57e| fabd d23, d28, d5 -6bd4a82e| fabd v11.2s, v3.2s, v8.2s -f7faa00e| fabs v23.2s, v23.2s -54c2201e| fabs s20, s18 -3ec3601e| fabs d30, d25 -2aee317e| facge s10, s17, s17 -2fed392e| facge v15.2s, v9.2s, v25.2s -2befe97e| facgt d11, d25, d9 -65eced6e| facgt v5.2d, v3.2d, v13.2d -55d53c4e| fadd v21.4s, v10.4s, v28.4s -8b283f1e| fadd s11, s4, s31 -d828601e| fadd d24, d6, d0 -e9d8307e| faddp s9, v7.2s -4084391e| fccmp s2, s25, #0x0, hi -ef046d1e| fccmp d7, d13, #0xf, eq -d7a4241e| fccmpe s6, s4, #0x7, ge -dbf5601e| fccmpe d14, d0, #0xb, al -77e7625e| fcmeq d23, d27, d2 -2de67f4e| fcmeq v13.2d, v17.2d, v31.2d -59daa05e| fcmeq s25, s18, #0 -add9a00e| fcmeq v13.2s, v13.2s, #0 -dce42d7e| fcmge s28, s6, s13 -62e6776e| fcmge v2.2d, v19.2d, v23.2d -f9cae07e| fcmge d25, d23, #0 -18e5ab7e| fcmgt s24, s8, s11 -84e7ae6e| fcmgt v4.4s, v28.4s, v14.4s -a0c8e05e| fcmgt d0, d5, #0 -c6cae04e| fcmgt v6.2d, v22.2d, #0 -4fdaa07e| fcmle s15, s18, #0 -e1d9a02e| fcmle v1.2s, v15.2s, #0 -1ee9a05e| fcmlt s30, s8, #0 -23eaa04e| fcmlt v3.4s, v17.4s, #0 -6023321e| fcmp s27, s18 -2823391e| fcmp s25, #0 -00236d1e| fcmp d24, d13 -e820601e| fcmp d7, #0 -3022381e| fcmpe s17, s24 -f8233e1e| fcmpe s31, #0 -b0206a1e| fcmpe d5, d10 -3820691e| fcmpe d1, #0 -d85f271e| fcsel s24, s30, s7, pl -ed8f7a1e| fcsel d13, d31, d26, hi -0042e21e| fcvt s0, h16 -efc1e21e| fcvt d15, h15 -edc1231e| fcvt h13, s15 -0ac0221e| fcvt d10, s0 -39c3631e| fcvt h25, d25 -da43621e| fcvt s26, d30 -10cb615e| fcvtas d16, d24 -f400241e| fcvtas w20, s7 -2f00249e| fcvtas x15, s1 -1d02641e| fcvtas w29, d16 -9303649e| fcvtas x19, d28 -02ca217e| fcvtau s2, s16 -afc8212e| fcvtau v15.2s, v5.2s -6e02251e| fcvtau w14, s19 -fd02259e| fcvtau x29, s23 -8603651e| fcvtau w6, d28 -4001659e| fcvtau x0, d10 -1f78210e| fcvtl v31.4s, v0.4h -d179214e| fcvtl2 v17.4s, v14.8h -fdbb615e| fcvtms d29, d31 -9601301e| fcvtms w22, s12 -f403309e| fcvtms x20, s31 -6b02701e| fcvtms w11, d19 -4802709e| fcvtms x8, d18 -84ba217e| fcvtmu s4, s20 -ae01311e| fcvtmu w14, s13 -8402319e| fcvtmu x4, s20 -7403711e| fcvtmu w20, d27 -2a03719e| fcvtmu x10, d25 -a36b210e| fcvtn v3.4h, v29.4s -5c6a214e| fcvtn2 v28.8h, v18.4s -78a9215e| fcvtns s24, s11 -b1ab614e| fcvtns v17.2d, v29.2d -0c01201e| fcvtns w12, s8 -b303209e| fcvtns x19, s29 -c401601e| fcvtns w4, d14 -5200609e| fcvtns x18, d2 -c2a8617e| fcvtnu d2, d6 -daab616e| fcvtnu v26.2d, v30.2d -d001211e| fcvtnu w16, s14 -0402219e| fcvtnu x4, s16 -7800611e| fcvtnu w24, d3 -e602619e| fcvtnu x6, d23 -74aaa15e| fcvtps s20, s19 -c801281e| fcvtps w8, s14 -8f02289e| fcvtps x15, s20 -6d02681e| fcvtps w13, d19 -bc00689e| fcvtps x28, d5 -43aba17e| fcvtpu s3, s26 -cda9a12e| fcvtpu v13.2s, v14.2s -c102291e| fcvtpu w1, s22 -9103299e| fcvtpu x17, s28 -7602691e| fcvtpu w22, d19 -4501699e| fcvtpu x5, d10 -976a616e| fcvtxn2 v23.4s, v20.2d -d5fc575f| fcvtzs d21, d6, #41 -babaa15e| fcvtzs s26, s21 -7aa6181e| fcvtzs w26, s19, #23 -c410189e| fcvtzs x4, s6, #60 -4db5589e| fcvtzs x13, d10, #19 -9000381e| fcvtzs w16, s4 -1702389e| fcvtzs x23, s16 -8a03781e| fcvtzs w10, d28 -d501789e| fcvtzs x21, d14 -eefd2d7f| fcvtzu s14, s15, #19 -4dfc3c6f| fcvtzu v13.4s, v2.4s, #4 -96bbe17e| fcvtzu d22, d28 -30b8e16e| fcvtzu v16.2d, v1.2d -fdef191e| fcvtzu w29, s31, #5 -1d7b199e| fcvtzu x29, s24, #34 -b8f5591e| fcvtzu w24, d13, #3 -5080599e| fcvtzu x16, d2, #32 -d002391e| fcvtzu w16, s22 -9b03399e| fcvtzu x27, s28 -7501791e| fcvtzu w21, d11 -7603799e| fcvtzu x22, d27 -06fe3c6e| fdiv v6.4s, v16.4s, v28.4s -c41b201e| fdiv s4, s30, s0 -1618781e| fdiv d22, d0, d24 -507b0d1f| fmadd s16, s26, s13, s30 -8803491f| fmadd d8, d28, d9, d0 -75f7394e| fmax v21.4s, v27.4s, v25.4s -804b3c1e| fmax s0, s28, s28 -c1496c1e| fmax d1, d14, d12 -5b69371e| fmaxnm s27, s10, s23 -1468711e| fmaxnm d20, d0, d17 -a4c8707e| fmaxnmp d4, v5.2d -89f9707e| fmaxp d9, v12.2d -4af63e2e| fmaxp v10.2s, v18.2s, v30.2s -25fa306e| fmaxv s5, v17.4s -01f4e04e| fmin v1.2d, v0.2d, v0.2d -59592a1e| fmin s25, s10, s10 -3959611e| fmin d25, d9, d1 -73c7ba4e| fminnm v19.4s, v27.4s, v26.4s -1279391e| fminnm s18, s8, s25 -75796c1e| fminnm d21, d11, d12 -90cbb07e| fminnmp s16, v28.2s -c5c8b06e| fminnmv s5, v6.4s -cdfbf07e| fminp d13, v30.2d -edf6f66e| fminp v13.2d, v23.2d, v22.2d -6513b85f| fmla s5, s27, v24.s[1] -ee18984f| fmla v14.4s, v7.4s, v24.s[2] -b85ab75f| fmls s24, s21, v23.s[3] -a3f5030f| fmov v3.2s, #9.062500000000000000e-01 -eaf7056f| fmov v10.2d, #-3.100000000000000000e+01 -3b41201e| fmov s27, s9 -0d41601e| fmov d13, d8 -9700271e| fmov s23, w4 -ad03261e| fmov w13, s29 -2302679e| fmov d3, x17 -e101af9e| fmov v1.d[1], x15 -f301669e| fmov x19, d15 -1103ae9e| fmov x17, v24.d[1] -0230321e| fmov s2, #-4.250000000000000000e+00 -18b0751e| fmov d24, #-1.450000000000000000e+01 -92bc1b1f| fmsub s18, s4, s27, s15 -f8e14a1f| fmsub d24, d15, d10, d24 -ef91d35f| fmul d15, d15, v19.d[0] -d293c24f| fmul v18.2d, v30.2d, v2.d[0] -18dd2b2e| fmul v24.2s, v8.2s, v11.2s -a4093d1e| fmul s4, s13, s29 -94096f1e| fmul d20, d12, d15 -fe918e7f| fmulx s30, s15, v14.s[0] -7199c56f| fmulx v17.2d, v11.2d, v5.d[1] -32dc695e| fmulx d18, d1, d9 -c8f9e06e| fneg v8.2d, v14.2d -9c41211e| fneg s28, s12 -c443611e| fneg d4, d30 -e77f301f| fnmadd s7, s31, s16, s31 -9f326c1f| fnmadd d31, d20, d12, d12 -d9e92f1f| fnmsub s25, s14, s15, s26 -00ad711f| fnmsub d0, d8, d17, d11 -c889211e| fnmul s8, s14, s1 -528b761e| fnmul d18, d26, d22 -01d8e15e| frecpe d1, d0 -9aff7e5e| frecps d26, d28, d30 -78fe2a4e| frecps v24.4s, v19.4s, v10.4s -01f9e15e| frecpx d1, d8 -128b216e| frinta v18.4s, v24.4s -b241261e| frinta s18, s13 -a841661e| frinta d8, d13 -799aa16e| frinti v25.4s, v19.4s -1cc2271e| frinti s28, s16 -93c2671e| frinti d19, d20 -1a40251e| frintm s26, s0 -ac42651e| frintm d12, d21 -5889214e| frintn v24.4s, v10.4s -5740241e| frintn s23, s2 -9443641e| frintn d20, d28 -4b89a10e| frintp v11.2s, v10.2s -a0c1241e| frintp s0, s13 -93c2641e| frintp d19, d20 -d49b216e| frintx v20.4s, v30.4s -df41271e| frintx s31, s14 -8d41671e| frintx d13, d12 -3998a10e| frintz v25.2s, v1.2s -fdc2251e| frintz s29, s23 -abc2651e| frintz d11, d21 -10dba17e| frsqrte s16, s24 -edd9e16e| frsqrte v13.2d, v15.2d -75ffe35e| frsqrts d21, d27, d3 -b4fdbe4e| frsqrts v20.4s, v13.4s, v30.4s -24f8a16e| fsqrt v4.4s, v1.4s -b6c1211e| fsqrt s22, s13 -c1c3611e| fsqrt d1, d30 -ffd5b44e| fsub v31.4s, v15.4s, v20.4s -d438331e| fsub s20, s6, s19 -f038771e| fsub d16, d7, d23 -675e1a6e| mov v7.h[6], v19.h[5] -2a1c0a4e| mov v10.h[2], w1 -de7f400c| ld1 {v30.1d}, [x30] -4aa7404c| ld1 {v10.8h, v11.8h}, [x26] -5d61400c| ld1 {v29.8b-v31.8b}, [x10] -af21404c| ld1 {v15.16b-v18.16b}, [x13] -737edf0c| ld1 {v19.1d}, [x19],#8 -757dd10c| ld1 {v21.1d}, [x11], x17 -5ca3df4c| ld1 {v28.16b, v29.16b}, [x26],#32 -93a1ce0c| ld1 {v19.8b, v20.8b}, [x12], x14 -1c65df0c| ld1 {v28.4h-v30.4h}, [x8],#24 -4461d34c| ld1 {v4.16b-v6.16b}, [x10], x19 -b22edf4c| ld1 {v18.2d-v21.2d}, [x21],#64 -c12fcc4c| ld1 {v1.2d-v4.2d}, [x30], x12 -5a03400d| ld1 {v26.b}[0], [x26] -8d93404d| ld1 {v13.s}[3], [x28] -2186404d| ld1 {v1.d}[1], [x17] -9604df4d| ld1 {v22.b}[9], [x4],#1 -4a1dc94d| ld1 {v10.b}[15], [x10], x9 -4852df4d| ld1 {v8.h}[6], [x18],#2 -2582df4d| ld1 {v5.s}[2], [x17],#4 -2191c84d| ld1 {v1.s}[3], [x9], x8 -c284df4d| ld1 {v2.d}[1], [x6],#8 -8f85ce0d| ld1 {v15.d}[0], [x12], x14 -87cd400d| ld1r {v7.1d}, [x12] -3bc8df4d| ld1r {v27.4s}, [x1],#4 -77c4dd4d| ld1r {v23.8h}, [x3], x29 -5384404c| ld2 {v19.8h, v20.8h}, [x2] -ca87df0c| ld2 {v10.4h, v11.4h}, [x30],#16 -1280d70c| ld2 {v18.8b, v19.8b}, [x0], x23 -4c0a604d| ld2 {v12.b, v13.b}[10], [x18] -3080600d| ld2 {v16.s, v17.s}[0], [x1] -6686600d| ld2 {v6.d, v7.d}[0], [x19] -061eff0d| ld2 {v6.b, v7.b}[7], [x16],#2 -db05fa0d| ld2 {v27.b, v28.b}[1], [x14], x26 -8a49ff4d| ld2 {v10.h, v11.h}[5], [x12],#4 -bb59ec4d| ld2 {v27.h, v28.h}[7], [x13], x12 -5a82ff0d| ld2 {v26.s, v27.s}[0], [x18],#8 -6180e30d| ld2 {v1.s, v2.s}[0], [x3], x3 -6485ff0d| ld2 {v4.d, v5.d}[0], [x11],#16 -7c86ed4d| ld2 {v28.d, v29.d}[1], [x19], x13 -54c0604d| ld2r {v20.16b, v21.16b}, [x2] -fdcaff0d| ld2r {v29.2s, v30.2s}, [x23],#8 -7bc5e40d| ld2r {v27.4h, v28.4h}, [x11], x4 -b349404c| ld3 {v19.4s-v21.4s}, [x13] -cf46df4c| ld3 {v15.8h-v17.8h}, [x22],#48 -934acc4c| ld3 {v19.4s-v21.4s}, [x20], x12 -2c33404d| ld3 {v12.b-v14.b}[12], [x25] -897a400d| ld3 {v9.h-v11.h}[3], [x20] -f9b2400d| ld3 {v25.s-v27.s}[1], [x23] -4aa7404d| ld3 {v10.d-v12.d}[1], [x26] -4e25df4d| ld3 {v14.b-v16.b}[9], [x10],#3 -7827c40d| ld3 {v24.b-v26.b}[1], [x27], x4 -c4a3df4d| ld3 {v4.s-v6.s}[2], [x30],#12 -f0a1cf0d| ld3 {v16.s-v18.s}[0], [x15], x15 -1ba7df0d| ld3 {v27.d-v29.d}[0], [x24],#24 -f7a7d50d| ld3 {v23.d-v25.d}[0], [sp], x21 -a9ed404d| ld3r {v9.2d-v11.2d}, [x13] -5aecdf4d| ld3r {v26.2d-v28.2d}, [x2],#24 -bae9c74d| ld3r {v26.4s-v28.4s}, [x13], x7 -5904404c| ld4 {v25.8h-v28.8h}, [x2] -743b604d| ld4 {v20.b-v23.b}[14], [x27] -bda1600d| ld4 {v29.s, v30.s, v31.s, v0.s}[0], [x13] -a3a4600d| ld4 {v3.d-v6.d}[0], [x5] -2f3aff4d| ld4 {v15.b-v18.b}[14], [x17],#4 -e73bef4d| ld4 {v7.b-v10.b}[14], [sp], x15 -5d78ef0d| ld4 {v29.h, v30.h, v31.h, v0.h}[3], [x2], x15 -acb3ff0d| ld4 {v12.s-v15.s}[1], [x29],#16 -a8b2f04d| ld4 {v8.s-v11.s}[3], [x21], x16 -75a7ff4d| ld4 {v21.d-v24.d}[1], [x27],#32 -75a6ee4d| ld4 {v21.d-v24.d}[1], [x19], x14 -d8e3604d| ld4r {v24.16b-v27.16b}, [x30] -49e9ff0d| ld4r {v9.2s-v12.2s}, [x10],#16 -81effc0d| ld4r {v1.1d-v4.1d}, [x28], x28 -893e622c| ldnp s9, s15, [x20,#-240] -f90e626c| ldnp d25, d3, [x23,#-480] -b0224fac| ldnp q16, q8, [x21,#480] -9186de2c| ldp s17, s1, [x20],#244 -e820d06c| ldp d8, d8, [x7],#256 -417de8ac| ldp q1, q31, [x10],#-768 -7969ed2d| ldp s25, s26, [x11,#-152]! -70c8c36d| ldp d16, d18, [x3,#56]! -30b4c4ad| ldp q16, q13, [x1,#144]! -a1857f2d| ldp s1, s1, [x13,#-4] -f4ae786d| ldp d20, d11, [x23,#-120] -998366ad| ldp q25, q0, [x28,#-816] -7535453c| ldr b21, [x11],#83 -5465477c| ldr h20, [x10],#118 -a2b44bbc| ldr s2, [x5],#187 -ab045bfc| ldr d11, [x5],#-80 -0515d43c| ldr q5, [x8],#-191 -43ad413c| ldr b3, [x10,#26]! -22cd4f7c| ldr h2, [x9,#252]! -5fad44bc| ldr s31, [x10,#74]! -db7d5afc| ldr d27, [x14,#-89]! -15ccd63c| ldr q21, [x0,#-148]! -95c34b3d| ldr b21, [x28,#752] -f5885e7d| ldr h21, [x7,#3908] -54db66bd| ldr s20, [x26,#9944] -46ee78fd| ldr d6, [x18,#29144] -0cc4e93d| ldr q12, [x0,#42768] -e1c4211c| ldr s1, .+0x4389c -2071c35c| ldr d0, .+0xfffffffffff86e24 -4765789c| ldr q7, .+0xf0ca8 -ae79703c| ldr b14, [x13,x16,lsl #0] -38fb67bc| ldr s24, [x25,x7,sxtx #2] -3e6b6dfc| ldr d30, [x25,x13] -a278ff3c| ldr q2, [x5,xzr,lsl #4] -ed02563c| ldur b13, [x23,#-160] -01c0507c| ldur h1, [x0,#-244] -7fd24ebc| ldur s31, [x19,#237] -7a734ffc| ldur d26, [x27,#247] -d4a3dd3c| ldur q20, [x30,#-38] -1c97250e| mla v28.8b, v24.8b, v5.8b -af97a12e| mls v15.2s, v29.2s, v1.2s -2b061f5e| mov b11, v17.b[15] -805e086e| mov v0.d[0], v20.d[1] -d91fbc4e| orr v25.16b, v30.16b, v28.16b -a43f040e| mov w4, v29.s[0] -fbe6054f| movi v27.16b, #0xb7 -9b75024f| orr v27.4s, #0x4c, lsl #24 -8436020f| orr v4.2s, #0x54, lsl #8 -19f5010f| fmov v25.2s, #1.200000000000000000e+01 -02e5062f| movi d2, #0xffff0000ff000000 -d6e5066f| movi v22.2d, #0xffff0000ffffff00 -be9c240e| mul v30.8b, v5.8b, v4.8b -2659202e| mvn v6.8b, v9.8b -f394046f| bic v19.8h, #0x87 -d856056f| bic v24.4s, #0xb6, lsl #16 -2f85022f| mvni v15.4h, #0x49 -24baa02e| neg v4.2s, v17.2s -145b206e| mvn v20.16b, v24.16b -191fff4e| orn v25.16b, v24.16b, v31.16b -6f96004f| orr v15.8h, #0x13 -a564020f| movi v5.2s, #0x45, lsl #24 -ae1ead0e| orr v14.8b, v21.8b, v13.8b -f2e1e00e| pmull v18.1q, v15.1d, v0.1d -0d426e2e| raddhn v13.4h, v16.4s, v14.4s -4443246e| raddhn2 v4.16b, v26.8h, v4.8h -015b602e| rbit v1.8b, v24.8b -4209202e| rev32 v2.8b, v10.8b -d109a04e| rev64 v17.4s, v14.4s -5a8e380f| rshrn v26.2s, v18.2d, #8 -438d234f| rshrn2 v3.4s, v10.2d, #29 -a861716e| rsubhn2 v8.8h, v13.4s, v17.4s -017c2f0e| saba v1.8b, v0.8b, v15.8b -5d51a90e| sabal v29.2d, v10.2s, v9.2s -c076a04e| sabd v0.4s, v22.4s, v0.4s -2d722e0e| sabdl v13.8h, v17.8b, v14.8b -1f732e4e| sabdl2 v31.8h, v24.16b, v14.16b -c628604e| saddlp v6.4s, v6.8h -103b704e| saddlv s16, v24.8h -8f122f0e| saddw v15.8h, v20.8h, v15.8b -30e6755f| scvtf d16, d17, #11 -73e7544f| scvtf v19.2d, v27.2d, #44 -51d9615e| scvtf d17, d10 -fad9210e| scvtf v26.2s, v15.2s -96c0421e| scvtf d22, w4, #16 -76e1029e| scvtf s22, x11, #8 -a791429e| scvtf d7, x13, #28 -f100221e| scvtf s17, w7 -e101621e| scvtf d1, w15 -6e03229e| scvtf s14, x27 -0b01629e| scvtf d11, x8 -2401025e| sha1c q4, s9, v2.4s -5d08285e| sha1h s29, s2 -65210d5e| sha1m q5, s11, v13.4s -29131a5e| sha1p q9, s25, v26.4s -2b311a5e| sha1su0 v11.4s, v9.4s, v26.4s -0919285e| sha1su1 v9.4s, v8.4s -f052035e| sha256h2 q16, q23, v3.4s -fe401e5e| sha256h q30, q7, v30.4s -7529285e| sha256su0 v21.4s, v11.4s -cc60195e| sha256su1 v12.4s, v6.4s, v25.4s -8b56060f| orr v11.2s, #0xd4, lsl #16 -3f3aa16e| shll2 v31.2d, v17.4s, #32 -0986394f| shrn2 v9.4s, v16.2d, #7 -35276e4e| shsub v21.8h, v25.8h, v14.8h -e2556d7f| sli d2, d15, #45 -f7541e6f| sli v23.8h, v7.8h, #14 -3167630e| smax v17.4h, v25.4h, v3.4h -68a6230e| smaxp v8.8b, v19.8b, v3.8b -a4aa304e| smaxv b4, v21.16b -2520440f| smlal v5.4s, v1.4h, v4.h[0] -8c286f4f| smlal2 v12.4s, v4.8h, v15.h[6] -3a82660e| smlal v26.4s, v17.4h, v6.4h -d92f1f0e| smov w25, v30.b[15] -912d114e| smov x17, v12.b[8] -b87ae05e| sqabs d24, d21 -2d7b200e| sqabs v13.8b, v25.8b -560f645e| sqadd h22, h26, h4 -4f0da54e| sqadd v15.4s, v10.4s, v5.4s -5992ba5e| sqdmlal d25, s18, s26 -b892684e| sqdmlal2 v24.4s, v21.8h, v8.8h -63786e5f| sqdmlsl s3, h3, v14.h[6] -0c79a10f| sqdmlsl v12.2d, v8.2s, v1.s[3] -1d73504f| sqdmlsl2 v29.4s, v24.8h, v0.h[1] -6cb36c5e| sqdmlsl s12, h27, h12 -82b36e4e| sqdmlsl2 v2.4s, v28.8h, v14.8h -8dca5d4f| sqdmulh v13.8h, v20.8h, v13.h[5] -fcb6b64e| sqdmulh v28.4s, v23.4s, v22.4s -d6b0974f| sqdmull2 v22.2d, v6.4s, v23.s[0] -afd0b84e| sqdmull2 v15.2d, v5.4s, v24.4s -067b207e| sqneg b6, b24 -9979606e| sqneg v25.8h, v12.8h -bfdbae0f| sqrdmulh v31.2s, v29.2s, v14.s[3] -c3b7a07e| sqrdmulh s3, s30, s0 -845d3d5e| sqrshl b4, b12, b29 -495dba0e| sqrshl v9.2s, v10.2s, v26.2s -fa8e0d7f| sqrshrun b26, h23, #3 -cf75185f| sqshl h15, h14, #8 -a975250f| sqshl v9.2s, v13.2s, #5 -424da05e| sqshl s2, s10, s0 -464db90e| sqshl v6.2s, v10.2s, v25.2s -af656d7f| sqshlu d15, d13, #45 -e564436f| sqshlu v5.2d, v7.2d, #3 -c1973b5f| sqshrn s1, d30, #5 -d586036f| mvni v21.8h, #0x76 -4c2ea95e| sqsub s12, s18, s9 -df2efe4e| sqsub v31.2d, v22.2d, v30.2d -c149a10e| sqxtn v1.2s, v14.2d -712a217e| sqxtun b17, h19 -9a29a12e| sqxtun v26.2s, v12.2d -6a166e0e| srhadd v10.4h, v19.4h, v14.4h -0445647f| sri d4, d8, #28 -6f44172f| sri v15.4h, v3.4h, #9 -cd56f94e| srshl v13.2d, v22.2d, v25.2d -12345b5f| srsra d18, d0, #37 -f746fa5e| sshl d23, d23, d26 -89476c4e| sshl v9.8h, v28.8h, v12.8h -0da60e0f| sshll v13.8h, v16.8b, #6 -a504585f| sshr d5, d5, #40 -3b07544f| sshr v27.2d, v25.2d, #44 -3417350f| ssra v20.2s, v25.2s, #11 -1a213f0e| ssubl v26.8h, v8.8b, v31.8b -1322a34e| ssubl2 v19.2d, v16.4s, v3.4s -e931b84e| ssubw2 v9.2d, v15.2d, v24.4s -dd7d004c| st1 {v29.2d}, [x14] -cea4000c| st1 {v14.4h, v15.4h}, [x6] -5a64000c| st1 {v26.4h-v28.4h}, [x2] -2b2c004c| st1 {v11.2d-v14.2d}, [x1] -39719f0c| st1 {v25.8b}, [x9],#8 -b771874c| st1 {v23.16b}, [x13], x7 -1da39f0c| st1 {v29.8b, v30.8b}, [x24],#16 -20a0800c| st1 {v0.8b, v1.8b}, [x1], x0 -5a6a9f4c| st1 {v26.4s-v28.4s}, [x18],#48 -0d69994c| st1 {v13.4s-v15.4s}, [x8], x25 -7e239f0c| st1 {v30.8b, v31.8b, v0.8b, v1.8b}, [x27],#32 -9a2d8e0c| st1 {v26.1d-v29.1d}, [x12], x14 -fd0b004d| st1 {v29.b}[10], [sp] -1058004d| st1 {v16.h}[7], [x0] -0593000d| st1 {v5.s}[1], [x24] -3d87000d| st1 {v29.d}[0], [x25] -1a079f0d| st1 {v26.b}[1], [x24],#1 -421b8f4d| st1 {v2.b}[14], [x26], x15 -54489f4d| st1 {v20.h}[5], [x2],#2 -c4809f4d| st1 {v4.s}[2], [x6],#4 -0481840d| st1 {v4.s}[0], [x8], x4 -6b859f0d| st1 {v11.d}[0], [x11],#8 -f7878e4d| st1 {v23.d}[1], [sp], x14 -e788004c| st2 {v7.4s, v8.4s}, [x7] -79889f0c| st2 {v25.2s, v26.2s}, [x3],#16 -a502204d| st2 {v5.b, v6.b}[8], [x21] -0e50204d| st2 {v14.h, v15.h}[6], [x0] -6b93204d| st2 {v11.s, v12.s}[3], [x27] -0987200d| st2 {v9.d, v10.d}[0], [x24] -7003bf0d| st2 {v16.b, v17.b}[0], [x27],#2 -1a09a94d| st2 {v26.b, v27.b}[10], [x8], x9 -1e43b00d| st2 {v30.h, v31.h}[0], [x24], x16 -1a82bf0d| st2 {v26.s, v27.s}[0], [x16],#8 -9892a50d| st2 {v24.s, v25.s}[1], [x20], x5 -5884bf0d| st2 {v24.d, v25.d}[0], [x2],#16 -9e87a34d| st2 {v30.d, v31.d}[1], [x28], x3 -4e47004c| st3 {v14.8h-v16.8h}, [x26] -76489f4c| st3 {v22.4s-v24.4s}, [x3],#48 -3b48860c| st3 {v27.2s-v29.2s}, [x1], x6 -e52a000d| st3 {v5.b-v7.b}[2], [x23] -6f73004d| st3 {v15.h-v17.h}[6], [x27] -9bb1004d| st3 {v27.s-v29.s}[3], [x12] -0ca7000d| st3 {v12.d-v14.d}[0], [x24] -2a259f0d| st3 {v10.b-v12.b}[1], [x9],#3 -0524860d| st3 {v5.b-v7.b}[1], [x0], x6 -94689a4d| st3 {v20.h-v22.h}[5], [x4], x26 -c2a19f4d| st3 {v2.s-v4.s}[2], [x14],#12 -5fb38c0d| st3 {v31.s, v0.s, v1.s}[1], [x26], x12 -6da59f4d| st3 {v13.d-v15.d}[1], [x11],#24 -32a7924d| st3 {v18.d-v20.d}[1], [x25], x18 -5b03000c| st4 {v27.8b-v30.8b}, [x26] -cd059f0c| st4 {v13.4h-v16.4h}, [x14],#32 -8601820c| st4 {v6.8b-v9.8b}, [x12], x2 -7925200d| st4 {v25.b-v28.b}[1], [x11] -cd7a204d| st4 {v13.h-v16.h}[7], [x22] -dfb2204d| st4 {v31.s, v0.s, v1.s, v2.s}[3], [x22] -daa4200d| st4 {v26.d-v29.d}[0], [x6] -2135bf0d| st4 {v1.b-v4.b}[5], [x9],#4 -7727a90d| st4 {v23.b-v26.b}[1], [x27], x9 -b4a3bf0d| st4 {v20.s-v23.s}[0], [x29],#16 -1ba3ae0d| st4 {v27.s-v30.s}[0], [x24], x14 -93a4bf0d| st4 {v19.d-v22.d}[0], [x4],#32 -50a6b80d| st4 {v16.d-v19.d}[0], [x18], x24 -79b53d2c| stnp s25, s13, [x11,#-20] -d895326c| stnp d24, d5, [x14,#-216] -d1810dac| stnp q17, q0, [x14,#432] -08728c2c| stp s8, s28, [x16],#96 -ac1ba16c| stp d12, d6, [x29],#-496 -f4fab1ac| stp q20, q30, [x23],#-464 -c15bbe2d| stp s1, s22, [x30,#-16]! -2422856d| stp d4, d8, [x17,#80]! -3d5282ad| stp q29, q20, [x17,#64]! -5df5352d| stp s29, s29, [x10,#-84] -5c54286d| stp d28, d21, [x2,#-384] -753c11ad| stp q21, q15, [x3,#544] -54e4033c| str b20, [x2],#62 -aa54137c| str h10, [x5],#-203 -c9d615bc| str s9, [x22],#-163 -fc471efc| str d28, [sp],#-28 -20f78d3c| str q0, [x25],#223 -028d1b3c| str b2, [x8,#-72]! -35be037c| str h21, [x17,#59]! -b98c15bc| str s25, [x5,#-168]! -fd1e11fc| str d29, [x23,#-239]! -13ec9a3c| str q19, [x0,#-82]! -b12d123d| str b17, [x13,#1163] -d6500b7d| str h22, [x6,#1448] -d46e39bd| str s20, [x22,#14700] -b84f30fd| str d24, [x29,#24728] -3cee993d| str q28, [x17,#26544] -4348293c| str b3, [x2,w9,uxtw] -ed7b253c| str b13, [sp,x5,lsl #0] -8fc9357c| str h15, [x12,w21,sxtw] -87f832bc| str s7, [x4,x18,sxtx #2] -f1ea38fc| str d17, [x23,x24,sxtx] -1c68a43c| str q28, [x0,x4] -dcb1023c| stur b28, [x14,#43] -6701117c| stur h7, [x11,#-240] -85b11bbc| stur s5, [x12,#-69] -8ea10efc| stur d14, [x12,#234] -eab08f3c| stur q10, [x7,#251] -ca876a2e| sub v10.4h, v30.4h, v10.4h -603be05e| suqadd d0, d27 -513a600e| suqadd v17.4h, v18.4h -25231c4e| tbl v5.16b, {v25.16b, v26.16b}, v28.16b -8c40100e| tbl v12.8b, {v4.16b-v6.16b}, v16.8b -0462040e| tbl v4.8b, {v16.16b-v19.16b}, v4.8b -34000f0e| tbl v20.8b, {v1.16b}, v15.8b -eb301f4e| tbx v11.16b, {v7.16b, v8.16b}, v31.16b -bb51124e| tbx v27.16b, {v13.16b-v15.16b}, v18.16b -cf701d0e| tbx v15.8b, {v6.16b-v9.16b}, v29.8b -4213080e| tbx v2.8b, {v26.16b}, v8.8b -2b2b114e| trn1 v11.16b, v25.16b, v17.16b -766ada4e| trn2 v22.2d, v19.2d, v26.2d -4152672e| uabal v1.4s, v18.4h, v7.4h -0953296e| uabal2 v9.8h, v24.16b, v9.16b -41756c6e| uabd v1.8h, v10.8h, v12.8h -3670ae2e| uabdl v22.2d, v1.2s, v14.2s -5401312e| uaddl v20.8h, v10.8b, v17.8b -d103286e| uaddl2 v17.8h, v30.16b, v8.16b -a92a206e| uaddlp v9.8h, v21.16b -b839706e| uaddlv s24, v13.8h -ea106d2e| uaddw v10.4s, v7.4s, v13.4h -c010726e| uaddw2 v0.4s, v6.4s, v18.8h -e7e5517f| ucvtf d7, d15, #47 -49e7376f| ucvtf v9.4s, v26.4s, #9 -4ada617e| ucvtf d10, d18 -6b82431e| ucvtf d11, w19, #32 -db84039e| ucvtf s27, x6, #31 -1c72439e| ucvtf d28, x16, #36 -f301231e| ucvtf s19, w15 -3503631e| ucvtf d21, w25 -e602239e| ucvtf s6, x23 -d503639e| ucvtf d21, x30 -ec04606e| uhadd v12.8h, v7.8h, v0.8h -3f65782e| umax v31.4h, v9.4h, v24.4h -afa6232e| umaxp v15.8b, v21.8b, v3.8b -cdaa706e| umaxv h13, v22.8h -736c236e| umin v19.16b, v3.16b, v3.16b -a0afa62e| uminp v0.2s, v29.2s, v6.2s -3c229e2f| umlal v28.2d, v17.2s, v30.s[0] -9d29a56f| umlal2 v29.2d, v12.4s, v5.s[3] -6c80392e| umlal v12.8h, v3.8b, v25.8b -4f60692f| umlsl v15.4s, v2.4h, v9.h[2] -61a1606e| umlsl2 v1.4s, v11.8h, v0.8h -183e0b0e| umov w24, v16.b[5] -c0a89b6f| umull2 v0.2d, v6.4s, v27.s[2] -36c0736e| umull2 v22.4s, v1.8h, v19.8h -120d757e| uqadd h18, h8, h21 -3a0c2e2e| uqadd v26.8b, v1.8b, v14.8b -0d5d617e| uqrshl h13, h8, h1 -4d5cb16e| uqrshl v13.4s, v2.4s, v17.4s -439c382f| uqrshrn v3.2s, v2.2d, #8 -9d745c7f| uqshl d29, d4, #28 -7b76656f| uqshl v27.2d, v19.2d, #37 -774ef37e| uqshl d23, d19, d19 -124eb32e| uqshl v18.2s, v16.2s, v19.2s -bc961f6f| uqshrn2 v28.8h, v21.4s, #1 -a62ce07e| uqsub d6, d5, d0 -0f2dae2e| uqsub v15.2s, v8.2s, v14.2s -b24b217e| uqxtn b18, h29 -f148216e| uqxtn2 v17.16b, v7.8h -7d15a42e| urhadd v29.2s, v11.2s, v4.2s -9055fc6e| urshl v16.2d, v12.2d, v28.2d -eb275e7f| urshr d11, d31, #34 -c0347c7f| ursra d0, d6, #4 -fe44e97e| ushl d30, d7, d9 -fa47e86e| ushl v26.2d, v31.2d, v8.2d -95a7262f| ushll v21.2d, v28.2s, #6 -9ca7096f| ushll2 v28.8h, v28.16b, #1 -8a07527f| ushr d10, d28, #46 -c7076b6f| ushr v7.2d, v30.2d, #21 -8d39e07e| usqadd d13, d12 -f716727f| usra d23, d23, #14 -3f14066f| bic v31.4s, #0xc1 -b423ac2e| usubl v20.2d, v29.2s, v12.2s -7c22736e| usubl2 v28.4s, v19.8h, v19.8h -76317d2e| usubw v22.4s, v11.4s, v29.4h -8f302a6e| usubw2 v15.8h, v4.8h, v10.16b -c5a4286f| ushll2 v5.2d, v6.4s, #8 -d3198c0e| uzp1 v19.2s, v14.2s, v12.2s -c05bdb4e| uzp2 v0.2d, v30.2d, v27.2d -362b610e| xtn v22.4h, v25.4s -0c29214e| xtn2 v12.16b, v8.8h -2b39c64e| zip1 v11.2d, v9.2d, v6.2d -9500091a| adc w21, w4, w9 -c2001a9a| adc x2, x6, x26 -6a02163a| adcs w10, w19, w22 -0c0118ba| adcs x12, x8, x24 -b1c42b0b| add w17, w5, w11, sxtw #1 -bf15368b| add sp, x13, w22, uxtb #5 -be1f468b| add x30, x29, x6, lsr #7 -8f51352b| adds w15, w12, w21, uxtw #4 -97043eab| adds x23, x4, w30, uxtb #1 -09b00931| adds w9, w0, #0x26c -4de204ab| adds x13, x18, x4, lsl #56 -bba87030| adr x27, .+0xe1515 -a9bf40d0| adrp x9, .+0x817f6000 -f6b60912| and w22, w23, #0xff9fff9f -a6d13b92| and x6, x13, #0xe3e3e3e3e3e3e3e3 -1cc0138a| and x28, x0, x19, lsl #48 -73882072| ands w19, w3, #0x70007 -b5780af2| ands x21, x5, #0xffdfffffffdfffff -766c90ea| ands x22, x3, x16, asr #27 -a72ac31a| asr w7, w21, w3 -ff28d59a| asr xzr, x7, x21 -3e7f0913| asr w30, w25, #9 -bafd5493| asr x26, x13, #20 -302ad21a| asr w16, w17, w18 -602bd79a| asr x0, x27, x23 -4fa4df54| b.al .+0xfffffffffffbf488 -a2e9cf15| b .+0x73fa688 -eff373b3| bfxil x15, xzr, #51, #10 -9e3e7db3| bfi x30, x20, #3, #16 -87fa41b3| bfxil x7, x20, #1, #62 -b831f80a| bic w24, w13, w24, ror #12 -ffe0ae8a| bic xzr, x7, x14, asr #56 -7c2c276a| bics w28, w3, w7, lsl #11 -ccf2fbea| bics x12, x22, x27, ror #60 -722cd195| bl .+0x744b1c8 -20003fd6| blr x1 -e0021fd6| br x23 -80db37d4| brk #0xbedc -f25a4335| cbnz w18, .+0x86b5c -5d5376b5| cbnz x29, .+0xeca68 -5ce56834| cbz w28, .+0xd1ca8 -29b08cb4| cbz x9, .+0xfffffffffff19604 -e048533a| ccmn w7, #0x13, #0x0, mi -e7da4fba| ccmn x23, #0xf, #0x7, le -67f2583a| ccmn w19, w24, #0x7, al -60a05aba| ccmn x3, x26, #0x0, ge -6a3b517a| ccmp w27, #0x11, #0xa, cc -8a4b55fa| ccmp x28, #0x15, #0xa, mi -ed934b7a| ccmp wzr, w11, #0xd, ls -24414ffa| ccmp x9, x15, #0x4, mi -0e169c1a| csinc w14, w16, w28, ne -8264949a| csinc x2, x4, x20, vs -b363935a| csinv w19, w29, w19, vs -ff619dda| csinv xzr, x15, x29, vs -5f3703d5| clrex #0x7 -0017c05a| cls w0, w24 -8216c0da| cls x2, x20 -3310c05a| clz w19, w1 -6e13c0da| clz x14, x27 -7fd02b2b| cmn w3, w11, sxtw #4 -5f3928ab| cmn x10, w8, uxth #6 -1fb92cb1| cmn x8, #0xb2e -ff164eab| cmn x23, x14, lsr #5 -ff71256b| cmp w15, w5, uxtx #4 -df6034eb| cmp x6, x20, uxtx -ff776af1| cmp sp, #0xa9d, lsl #12 -80e4855a| csneg w0, w4, w5, al -da3490da| csneg x26, x6, x16, cc -af40c71a| crc32b w15, w5, w7 -c546cf1a| crc32h w5, w22, w15 -6148c01a| crc32w w1, w3, w0 -0f4eda9a| crc32x w15, w16, x26 -4950d01a| crc32cb w9, w2, w16 -8155c31a| crc32ch w1, w12, w3 -835ace1a| crc32cw w3, w20, w14 -f05fc59a| crc32cx w16, wzr, x5 -0ae3901a| csel w10, w24, w16, al -ed51969a| csel x13, x15, x22, pl -ee679f1a| cset w14, vc -ed579f9a| cset x13, mi -f2539f5a| csetm w18, mi -ffe39fda| csinv xzr, xzr, xzr, al -9d25941a| csinc w29, w12, w20, cs -afb7829a| csinc x15, x29, x2, lt -7602895a| csinv w22, w19, w9, eq -011394da| csinv x1, x24, x20, ne -68b7935a| csneg w8, w27, w19, lt -a32784da| csneg x3, x29, x4, cs -8159a6d4| dcps1 #0x32cc -c2d9aad4| dcps2 #0x56ce -63ceb7d4| dcps3 #0xbe73 -bf3903d5| dmb ishld -e003bfd6| drps -9f3603d5| dsb nshst -fc76a9ca| eon x28, x23, x9, asr #29 -540f2352| eor w20, w26, #0xe0000001 -187e1ed2| eor x24, x16, #0xffffffffffffffff -fd37004a| eor w29, wzr, w0, lsl #13 -b8c542ca| eor x24, x13, x2, lsr #49 -e0039fd6| eret -5f26c193| extr xzr, x18, x1, #9 -7f2003d5| wfi -ff2a03d5| hint #0x57 -804a59d4| hlt #0xca54 -df3003d5| isb #0x0 -10fcdf88| ldar w16, [x0] -fafcdfc8| ldar x26, [x7] -30fedf08| ldarb w16, [x17] -63fedf48| ldarh w3, [x19] -82ba7f88| ldaxp w2, w14, [x20] -d6917fc8| ldaxp x22, x4, [x14] -59ff5f88| ldaxr w25, [x26] -fefe5fc8| ldaxr x30, [x23] -a0fc5f08| ldaxrb w0, [x5] -fafd5f48| ldaxrh w26, [x15] -b8804428| ldnp w24, w0, [x5,#36] -93e969a8| ldnp x19, x26, [x12,#-360] -caccef28| ldp w10, w19, [x6],#-132 -7365c3a8| ldp x19, x25, [x11],#48 -3106ca29| ldp w17, w1, [x17,#80]! -0c02f7a9| ldp x12, x0, [x16,#-144]! -41af6529| ldp w1, w11, [x26,#-212] -706b65a9| ldp x16, x26, [x27,#-432] -746ecf68| ldpsw x20, x27, [x19],#120 -c051c669| ldpsw x0, x20, [x14,#48]! -aded5b69| ldpsw x13, x27, [x13,#220] -990457b8| ldr w25, [x4],#-144 -bbd556f8| ldr x27, [x13],#-147 -a45c51b8| ldr w4, [x5,#-235]! -344c41f8| ldr x20, [x1,#20]! -2d8755b9| ldr w13, [x25,#5508] -56e360f9| ldr x22, [x26,#16832] -1739b718| ldr w23, .+0xfffffffffff6e720 -97b91c58| ldr x23, .+0x39730 -3b264e38| ldrb w27, [x17],#226 -898f5738| ldrb w9, [x28,#-136]! -c44e6839| ldrb w4, [x22,#2579] -2d687738| ldrb w13, [x1,x23] -4d475978| ldrh w13, [x26],#-108 -39de5278| ldrh w25, [x17,#-211]! -9cc54879| ldrh w28, [x12,#1122] -87fb6978| ldrh w7, [x28,x9,sxtx #1] -3967cb38| ldrsb w25, [x25],#182 -abf69438| ldrsb x11, [x21],#-177 -159ed138| ldrsb w21, [x16,#-231]! -b63e8038| ldrsb x22, [x21,#3]! -4491c939| ldrsb w4, [x10,#612] -497e8039| ldrsb x9, [x18,#31] -7d6bf638| ldrsb w29, [x27,x22] -e578ba38| ldrsb x5, [x7,x26,lsl #0] -9f06ca78| ldrsh wzr, [x20],#160 -15c59d78| ldrsh x21, [x8],#-36 -c07fd278| ldrsh w0, [x30,#-217]! -bdec9278| ldrsh x29, [x5,#-210]! -10e2c979| ldrsh w16, [x16,#1264] -54d29d79| ldrsh x20, [x18,#3816] -eb9484b8| ldrsw x11, [x7],#73 -ba2e8ab8| ldrsw x26, [x21,#162]! -ac7f8ab9| ldrsw x12, [x29,#2684] -9466e898| ldrsw x20, .+0xfffffffffffd0cd0 -a359b3b8| ldrsw x3, [x13,w19,uxtw #2] -f8b941b8| ldtr w24, [x15,#27] -fc0a4ef8| ldtr x28, [x23,#224] -60d84638| ldtrb w0, [x3,#109] -44685978| ldtrh w4, [x2,#-106] -5379dc38| ldtrsb w19, [x10,#-57] -ade99538| ldtrsb x13, [x13,#-162] -905ac078| ldtrsh w16, [x20,#5] -10898478| ldtrsh x16, [x8,#72] -37188eb8| ldtrsw x23, [x1,#225] -992351b8| ldur w25, [x28,#-238] -c9f155f8| ldur x9, [x14,#-161] -76e14e38| ldurb w22, [x11,#238] -47b24478| ldurh w7, [x18,#75] -4020da38| ldursb w0, [x2,#-94] -0dd09e38| ldursb x13, [x0,#-19] -8f81d478| ldursh w15, [x12,#-184] -96918378| ldursh x22, [x12,#57] -b2e383b8| ldursw x18, [x29,#62] -d3717f88| ldxp w19, w28, [x14] -cb677fc8| ldxp x11, x25, [x30] -ed7c5f88| ldxr w13, [x7] -aa7d5fc8| ldxr x10, [x13] -1c7d5f08| ldxrb w28, [x8] -de7f5f48| ldxrh w30, [x30] -1622dc1a| lsl w22, w16, w28 -cd20d59a| lsl x13, x6, x21 -882957d3| ubfiz x8, x12, #41, #11 -3320cc1a| lsl w19, w1, w12 -7320de9a| lsl x19, x3, x30 -af25d31a| lsr w15, w13, w19 -e426c39a| lsr x4, x23, x3 -e87f0653| lsr w8, wzr, #6 -85fe5fd3| lsr x5, x20, #31 -0025dc1a| lsr w0, w8, w28 -6e27c79a| lsr x14, x27, x7 -6d69111b| madd w13, w11, w17, w26 -245d0d9b| madd x4, x9, x13, x23 -85fe1f1b| mneg w5, w20, wzr -9bfc199b| mneg x27, x4, x25 -13000011| add w19, w0, #0x0 -e3000091| add x3, x7, #0x0 -986c9e12| mov w24, #0xffff0c9b -cb24f092| mov x11, #0x7ed9ffffffffffff -3cbb88d2| mov x28, #0x45d9 -e4170232| mov w4, #0xc000000f -fe636bb2| mov x30, #0x3fffffe00000 -ed031b2a| mov w13, w27 -fb0308aa| mov x27, x8 -be3ed1f2| movk x30, #0x89f5, lsl #32 -e0a08312| mov w0, #0xffffe2f8 -a1a6e592| mov x1, #0xd2caffffffffffff -5260f0d2| mov x18, #0x8302000000000000 -a60739d5| mrs x6, s3_1_c0_c7_5 -281a1ed5| msr s3_6_c1_c10_1, x8 -10f31b1b| msub w16, w24, w27, w28 -46b41a9b| msub x6, x2, x26, x13 -ec7f041b| mul w12, wzr, w4 -147f009b| mul x20, x24, x0 -f67f692a| mvn w22, w9, lsr #31 -f2a3f7aa| mvn x18, x23, ror #40 -fe8b0bcb| neg x30, x11, lsl #34 -fef710eb| negs x30, x16, lsl #61 -e0031b5a| ngc w0, w27 -e0031dda| ngc x0, x29 -f003167a| ngcs w16, w22 -e60302fa| ngcs x6, x2 -1f2003d5| nop -2f51732a| orn w15, w9, w19, lsr #20 -9b0facaa| orn x27, x28, x12, asr #3 -efa40032| orr w15, w7, #0x3ff03ff -3a0b19b2| orr x26, x25, #0x38000000380 -4b9ec4aa| orr x11, x18, x4, ror #39 -f5eaa2f9| prfm pstl3strm, [x23,#17872] -731df8d8| prfm pstl2strm, .+0xffffffffffff03ac -85c194f8| prfum pldl3strm, [x12,#-180] -c303c05a| rbit w3, w30 -3000c0da| rbit x16, x1 -20025fd6| ret x17 -ec08c05a| rev w12, w7 -180cc0da| rev x24, x0 -4b07c05a| rev16 w11, w26 -7805c0da| rev16 x24, x11 -ea08c0da| rev32 x10, x7 -a90fc0da| rev x9, x29 -fd788213| extr w29, w7, w2, #30 -e1a0cc93| extr x1, x7, x12, #40 -792fdc1a| ror w25, w27, w28 -2b2cc39a| ror x11, x1, x3 -7e2ec71a| ror w30, w19, w7 -392edd9a| ror x25, x17, x29 -47020a5a| sbc w7, w18, w10 -b7021dda| sbc x23, x21, x29 -7800197a| sbcs w24, w3, w25 -1e0203fa| sbcs x30, x16, x3 -a6b07393| sbfiz x6, x5, #13, #45 -94957d93| sbfiz x20, x12, #3, #38 -ecff5e93| asr x12, xzr, #30 -a50ddb1a| sdiv w5, w13, w27 -7c0ec89a| sdiv x28, x19, x8 -9f2003d5| sev -bf2003d5| sevl -5953349b| smaddl x25, w26, w20, x20 -bafc399b| smnegl x26, w5, w25 -a5cc289b| smsubl x5, w5, w8, x19 -297c579b| smulh x9, x1, x23 -5e7e299b| smull x30, w18, w9 -29fd9f88| stlr w9, [x9] -fdff9fc8| stlr x29, [sp] -defe9f08| stlrb w30, [x22] -2ffc9f48| stlrh w15, [x1] -c1e12f88| stlxp w15, w1, w24, [x14] -62aa2ec8| stlxp w14, x2, x10, [x19] -b9fe1b88| stlxr w27, w25, [x21] -cbff14c8| stlxr w20, x11, [x30] -edfc0608| stlxrb w6, w13, [x7] -8dfe1048| stlxrh w16, w13, [x20] -1a323628| stnp w26, w12, [x16,#-80] -b3cb3da8| stnp x19, x18, [x29,#-40] -52398828| stp w18, w14, [x10],#64 -434c95a8| stp x3, x19, [x2],#336 -2badbd29| stp w11, w11, [x9,#-20]! -daeabaa9| stp x26, x26, [x22,#-88]! -9bc91529| stp w27, w18, [x12,#172] -eea024a9| stp x14, x8, [x7,#-440] -fec514b8| str w30, [x15],#-180 -d21508f8| str x18, [x14],#129 -7c5c0ab8| str w28, [x3,#165]! -6dec1ff8| str x13, [x3,#-2]! -35681eb9| str w21, [x1,#7784] -374d35f9| str x23, [x9,#27288] -1dd83df8| str x29, [x0,w29,sxtw #3] -1b441b38| strb w27, [x0],#-76 -d69c0f38| strb w22, [x6,#249]! -b7ce0d39| strb w23, [x21,#883] -2b7b3938| strb w11, [x25,x25,lsl #0] -4e771d78| strh w14, [x26],#-41 -64cc0b78| strh w4, [x3,#188]! -07b90279| strh w7, [x8,#348] -2eb91cb8| sttr w14, [x9,#-53] -373a1bf8| sttr x23, [x17,#-77] -d0881138| sttrb w16, [x6,#-232] -941a0e78| sttrh w20, [x20,#225] -da3000b8| stur w26, [x6,#3] -5e921cf8| stur x30, [x18,#-55] -09821e38| sturb w9, [x16,#-24] -67d21c78| sturh w7, [x19,#-51] -0c352188| stxp w1, w12, w13, [x8] -146d26c8| stxp w6, x20, x27, [x8] -837d1888| stxr w24, w3, [x12] -f17f1bc8| stxr w27, x17, [sp] -3b7d0f08| stxrb w15, w27, [x9] -6b7c1f48| stxrh wzr, w11, [x3] -70ab204b| sub w16, w27, w0, sxth #2 -303b20cb| sub x16, x25, w0, uxth #6 -69a909d1| sub x9, x11, #0x26a -87384e4b| sub w7, w4, w14, lsr #14 -ec720ecb| sub x12, x23, x14, lsl #28 -2b58256b| subs w11, w1, w5, uxtw #6 -59e93ceb| subs x25, x10, x28, sxtx #2 -9e7b6ff1| subs x30, x28, #0xbde, lsl #12 -3e6d196b| subs w30, w9, w25, lsl #27 -54029ceb| subs x20, x18, x28, asr #0 -c1f91cd4| svc #0xe7ce -091e0013| sxtb w9, w16 -7f1c4093| sxtb xzr, w3 -b53c0013| sxth w21, w5 -773e4093| sxth x23, w19 -707f4093| sxtw x16, w27 -df3a2dd5| sysl xzr, #5, C3, C10, #6 -607f3137| tbnz w0, #6, .+0x2fec -3b700c36| tbz w27, #1, .+0xffffffffffff8e04 -5f612972| tst w10, #0xff80ffff -bf2007f2| tst x5, #0xfe000003fe000003 -1f11136a| tst w8, w19, lsl #4 -5fd10dea| tst x10, x13, lsl #52 -5c826bd3| ubfiz x28, x18, #21, #33 -ad690c53| ubfx w13, w13, #12, #15 -3a0f41d3| ubfx x26, x25, #1, #3 -6a197dd3| ubfiz x10, x11, #3, #7 -520aca1a| udiv w18, w18, w10 -0809c89a| udiv x8, x8, x8 -4e55a69b| umaddl x14, w10, w6, x21 -99fda59b| umnegl x25, w12, w5 -1adabb9b| umsubl x26, w16, w27, x22 -177ddf9b| umulh x23, x8, xzr -1d7da49b| umull x29, w8, w4 -5a1c0053| uxtb w26, w2 -603c0053| uxth w0, w3 -5f2003d5| wfe -7f2003d5| wfi -3f2003d5| yield -02b8600e| abs v2.4h, v0.4h -c886f94e| add v8.2d, v22.2d, v25.2d -5642740e| addhn v22.4h, v18.4s, v20.4s -3743294e| addhn2 v23.16b, v25.8h, v9.8h -2abef74e| addp v10.2d, v17.2d, v23.2d -18bbb14e| addv s24, v24.4s -1a59284e| aesd v26.16b, v8.16b -cf48284e| aese v15.16b, v6.16b -557a284e| aesimc v21.16b, v18.16b -2f6b284e| aesmc v15.16b, v25.16b -cf1c324e| and v15.16b, v6.16b, v18.16b -c9c6032f| mvni v9.2s, #0x76, msl #8 -f1a7012f| mvni v17.4h, #0x3f, lsl #8 -691d600e| bic v9.8b, v11.8b, v0.8b -c31dfe6e| bif v3.16b, v14.16b, v30.16b -c81cb66e| bit v8.16b, v6.16b, v22.16b -701f6b2e| bsl v16.8b, v27.8b, v11.8b -7c4b600e| cls v28.4h, v27.4h -ce4a602e| clz v14.4h, v22.4h -d08de37e| cmeq d16, d14, d3 -e98db96e| cmeq v9.4s, v15.4s, v25.4s -6e99a00e| cmeq v14.2s, v11.2s, #0 -933d304e| cmge v19.16b, v12.16b, v16.16b -0e88e07e| cmge d14, d0, #0 -9b89202e| cmge v27.8b, v12.8b, #0 -6a372f4e| cmgt v10.16b, v27.16b, v15.16b -128be05e| cmgt d18, d24, #0 -9189a00e| cmgt v17.2s, v12.2s, #0 -f734e67e| cmhi d23, d7, d6 -4d36b82e| cmhi v13.2s, v18.2s, v24.2s -003e2b2e| cmhs v0.8b, v16.8b, v11.8b -729ae07e| cmle d18, d19, #0 -3699206e| cmle v22.16b, v9.16b, #0 -d1ab600e| cmlt v17.4h, v30.4h, #0 -ad8e244e| cmtst v13.16b, v21.16b, v4.16b -ef06035e| mov b15, v23.b[1] -5007040e| dup v16.2s, v26.s[0] -890e0b4e| dup v9.16b, w20 -951c276e| eor v21.16b, v4.16b, v7.16b -98d4bf7e| fabd s24, s4, s31 -bcd4ad6e| fabd v28.4s, v5.4s, v13.4s -78f8e04e| fabs v24.2d, v3.2d -8cc0201e| fabs s12, s4 -9ac1601e| fabs d26, d12 -3aee307e| facge s26, s17, s16 -41ed352e| facge v1.2s, v10.2s, v21.2s -35edaf7e| facgt s21, s9, s15 -02efe36e| facgt v2.2d, v24.2d, v3.2d -21d6664e| fadd v1.2d, v17.2d, v6.2d -5e282e1e| fadd s30, s2, s14 -4d2a621e| fadd d13, d18, d2 -7cd8707e| faddp d28, v3.2d -5dd4386e| faddp v29.4s, v2.4s, v24.4s -69363e1e| fccmp s19, s30, #0x9, cc -c8b56a1e| fccmp d14, d10, #0x8, lt -d1f5271e| fccmpe s14, s7, #0x1, al -3645751e| fccmpe d9, d21, #0x6, mi -21e6735e| fcmeq d1, d17, d19 -b6dba05e| fcmeq s22, s29, #0 -49d8a04e| fcmeq v9.4s, v2.4s, #0 -2ee5667e| fcmge d14, d9, d6 -4ee7766e| fcmge v14.2d, v26.2d, v22.2d -4bcba07e| fcmge s11, s26, #0 -11c9a02e| fcmge v17.2s, v8.2s, #0 -81e4a97e| fcmgt s1, s4, s9 -d3e4b56e| fcmgt v19.4s, v6.4s, v21.4s -efc8e05e| fcmgt d15, d7, #0 -3ec9e04e| fcmgt v30.2d, v9.2d, #0 -38d9a07e| fcmle s24, s9, #0 -7dd9a02e| fcmle v29.2s, v11.2s, #0 -bae8a05e| fcmlt s26, s5, #0 -a2eaa04e| fcmlt v2.4s, v21.4s, #0 -60212f1e| fcmp s11, s15 -a8233a1e| fcmp s29, #0 -a020641e| fcmp d5, d4 -e820701e| fcmp d7, #0 -b0203a1e| fcmpe s5, s26 -78203d1e| fcmpe s3, #0 -70226e1e| fcmpe d19, d14 -3821601e| fcmpe d9, #0 -06de241e| fcsel s6, s16, s4, le -51de761e| fcsel d17, d18, d22, le -5e42e21e| fcvt s30, h18 -b9c1e21e| fcvt d25, h13 -58c0231e| fcvt h24, s2 -9bc2221e| fcvt d27, s20 -2bc3631e| fcvt h11, d25 -f640621e| fcvt s22, d7 -caca215e| fcvtas s10, s22 -5ec9210e| fcvtas v30.2s, v10.2s -0302241e| fcvtas w3, s16 -c103249e| fcvtas x1, s30 -3003641e| fcvtas w16, d25 -6201649e| fcvtas x2, d11 -d3c9217e| fcvtau s19, s14 -3bc8212e| fcvtau v27.2s, v1.2s -0802251e| fcvtau w8, s16 -5f02259e| fcvtau xzr, s18 -2801651e| fcvtau w8, d9 -f200659e| fcvtau x18, d7 -d179610e| fcvtl v17.2d, v14.2s -347b614e| fcvtl2 v20.2d, v25.4s -08b9615e| fcvtms d8, d8 -f000301e| fcvtms w16, s7 -8002309e| fcvtms x0, s20 -5202701e| fcvtms w18, d18 -c803709e| fcvtms x8, d30 -1cbb217e| fcvtmu s28, s24 -d1b9212e| fcvtmu v17.2s, v14.2s -2e02311e| fcvtmu w14, s17 -d003319e| fcvtmu x16, s30 -ce03711e| fcvtmu w14, d30 -0801719e| fcvtmu x8, d8 -4c6b210e| fcvtn v12.4h, v26.4s -6869214e| fcvtn2 v8.8h, v11.4s -2faa615e| fcvtns d15, d17 -33aa614e| fcvtns v19.2d, v17.2d -d303201e| fcvtns w19, s30 -4001209e| fcvtns x0, s10 -b202601e| fcvtns w18, d21 -c603609e| fcvtns x6, d30 -8ea8217e| fcvtnu s14, s4 -cc01211e| fcvtnu w12, s14 -3a00219e| fcvtnu x26, s1 -2002611e| fcvtnu w0, d17 -ff01619e| fcvtnu xzr, d15 -1baba15e| fcvtps s27, s24 -9d00281e| fcvtps w29, s4 -eb02289e| fcvtps x11, s23 -3503681e| fcvtps w21, d25 -4301689e| fcvtps x3, d10 -63aba17e| fcvtpu s3, s27 -caa8a12e| fcvtpu v10.2s, v6.2s -7702291e| fcvtpu w23, s19 -b503299e| fcvtpu x21, s29 -2f03691e| fcvtpu w15, d25 -5b01699e| fcvtpu x27, d10 -7369617e| fcvtxn s19, d11 -6b6b612e| fcvtxn v11.2s, v27.2d -f268616e| fcvtxn2 v18.4s, v7.2d -bcff7b5f| fcvtzs d28, d29, #5 -19bbe15e| fcvtzs d25, d24 -c6b9e14e| fcvtzs v6.2d, v14.2d -e9fc189e| fcvtzs x9, s7, #1 -6661589e| fcvtzs x6, d11, #40 -9702381e| fcvtzs w23, s20 -ed00389e| fcvtzs x13, s7 -3a01781e| fcvtzs w26, d9 -8801789e| fcvtzs x8, d12 -a5ff2e2f| fcvtzu v5.2s, v29.2s, #18 -5bbbe17e| fcvtzu d27, d26 -1a74199e| fcvtzu x26, s0, #35 -e391599e| fcvtzu x3, d15, #28 -b203391e| fcvtzu w18, s29 -ed01399e| fcvtzu x13, s15 -c200791e| fcvtzu w2, d6 -5402799e| fcvtzu x20, d18 -1aff2b6e| fdiv v26.4s, v24.4s, v11.4s -171a391e| fdiv s23, s16, s25 -7d196b1e| fdiv d29, d11, d11 -f9721f1f| fmadd s25, s23, s31, s28 -7070551f| fmadd d16, d3, d21, d28 -05f7624e| fmax v5.2d, v24.2d, v2.2d -88493d1e| fmax s8, s12, s29 -4a496d1e| fmax d10, d10, d13 -5068321e| fmaxnm s16, s2, s18 -a66a761e| fmaxnm d6, d21, d22 -0ccb707e| fmaxnmp d12, v24.2d -6ec66f6e| fmaxnmp v14.2d, v19.2d, v15.2d -41f8307e| fmaxp s1, v2.2s -05f72a6e| fmaxp v5.4s, v24.4s, v10.4s -aa5b231e| fmin s10, s29, s3 -d6596a1e| fmin d22, d14, d10 -15c4b24e| fminnm v21.4s, v0.4s, v18.4s -6279281e| fminnm s2, s11, s8 -af7b6a1e| fminnm d15, d29, d10 -7dc9f07e| fminnmp d29, v11.2d -dfc6bb6e| fminnmp v31.4s, v22.4s, v27.4s -56c8b06e| fminnmv s22, v2.4s -0ff8f07e| fminp d15, v0.2d -a211c55f| fmla d2, d13, v5.d[0] -0dce224e| fmla v13.4s, v16.4s, v2.4s -4c5ba15f| fmls s12, s26, v1.s[3] -8953ba0f| fmls v9.2s, v28.2s, v26.s[1] -09cdbd4e| fmls v9.4s, v8.4s, v29.4s -97f7044f| fmov v23.4s, #-7.000000000000000000e+00 -dff4006f| fmov v31.2d, #2.750000000000000000e+00 -c543201e| fmov s5, s30 -1740601e| fmov d23, d0 -a100271e| fmov s1, w5 -f102261e| fmov w17, s23 -b302679e| fmov d19, x21 -4001af9e| fmov v0.d[1], x10 -db01669e| fmov x27, d14 -8300ae9e| fmov x3, v4.d[1] -1870331e| fmov s24, #-6.750000000000000000e+00 -08507d1e| fmov d8, #-8.125000000000000000e-01 -5cbf0c1f| fmsub s28, s26, s12, s15 -89e3501f| fmsub d9, d28, d16, d24 -3a93c95f| fmul d26, d25, v9.d[0] -5a90ae4f| fmul v26.4s, v2.4s, v14.s[1] -ba0a2f1e| fmul s26, s21, s15 -5b0a7c1e| fmul d27, d18, d28 -e991c07f| fmulx d9, d15, v0.d[0] -be989c6f| fmulx v30.4s, v5.4s, v28.s[2] -d3dc7a5e| fmulx d19, d6, d26 -d4de7f4e| fmulx v20.2d, v22.2d, v31.2d -8e41211e| fneg s14, s12 -dc42611e| fneg d28, d22 -cb362e1f| fnmadd s11, s22, s14, s13 -6441791f| fnmadd d4, d11, d25, d16 -36ed291f| fnmsub s22, s9, s9, s27 -35b27a1f| fnmsub d21, d17, d26, d12 -9388301e| fnmul s19, s4, s16 -c088711e| fnmul d0, d6, d17 -e8daa15e| frecpe s8, s23 -a9fc395e| frecps s9, s5, s25 -49fe284e| frecps v9.4s, v18.4s, v8.4s -85f8a15e| frecpx s5, s4 -ee43261e| frinta s14, s31 -7042661e| frinta d16, d19 -2b98a16e| frinti v11.4s, v1.4s -fac2271e| frinti s26, s23 -76c3671e| frinti d22, d27 -7942251e| frintm s25, s19 -8742651e| frintm d7, d20 -fc8a214e| frintn v28.4s, v23.4s -c041241e| frintn s0, s14 -b241641e| frintn d18, d13 -c588a14e| frintp v5.4s, v6.4s -6ec2241e| frintp s14, s19 -ddc0641e| frintp d29, d6 -1a9a616e| frintx v26.2d, v16.2d -7c41271e| frintx s28, s11 -d243671e| frintx d18, d30 -b49aa14e| frintz v20.4s, v21.4s -5bc0251e| frintz s27, s2 -43c1651e| frintz d3, d10 -3bdba17e| frsqrte s27, s25 -9ddba12e| frsqrte v29.2s, v28.2s -1ffee65e| frsqrts d31, d16, d6 -8bfdb54e| frsqrts v11.4s, v12.4s, v21.4s -33c1211e| fsqrt s19, s9 -a5c0611e| fsqrt d5, d5 -a2d7b74e| fsub v2.4s, v29.4s, v23.4s -a338301e| fsub s3, s5, s16 -e139681e| fsub d1, d15, d8 -96170e6e| mov v22.h[3], v28.h[1] -791c014e| mov v25.b[0], w3 -cf79404c| ld1 {v15.4s}, [x14] -75a6404c| ld1 {v21.8h, v22.8h}, [x19] -ed62404c| ld1 {v13.16b-v15.16b}, [x23] -392a400c| ld1 {v25.2s-v28.2s}, [x17] -cd7cdf4c| ld1 {v13.2d}, [x6],#16 -f677ce4c| ld1 {v22.8h}, [sp], x14 -d4a3df0c| ld1 {v20.8b, v21.8b}, [x30],#16 -8ba1d90c| ld1 {v11.8b, v12.8b}, [x12], x25 -396fdf0c| ld1 {v25.1d-v27.1d}, [x25],#24 -4c64db0c| ld1 {v12.4h-v14.4h}, [x2], x27 -3f2adf4c| ld1 {v31.4s, v0.4s, v1.4s, v2.4s}, [x17],#64 -b329ce4c| ld1 {v19.4s-v22.4s}, [x13], x14 -aa02400d| ld1 {v10.b}[0], [x21] -7980404d| ld1 {v25.s}[2], [x3] -5884404d| ld1 {v24.d}[1], [x2] -f203df4d| ld1 {v18.b}[8], [sp],#1 -3519c40d| ld1 {v21.b}[6], [x9], x4 -ed59df0d| ld1 {v13.h}[3], [x15],#2 -9e52d90d| ld1 {v30.h}[2], [x20], x25 -cd93df4d| ld1 {v13.s}[3], [x30],#4 -5982cb4d| ld1 {v25.s}[2], [x18], x11 -4f84df4d| ld1 {v15.d}[1], [x2],#8 -2d85d50d| ld1 {v13.d}[0], [x9], x21 -33c2400d| ld1r {v19.8b}, [x17] -e2c8df4d| ld1r {v2.4s}, [x7],#4 -83c2c44d| ld1r {v3.16b}, [x20], x4 -5487400c| ld2 {v20.4h, v21.4h}, [x26] -e08adf0c| ld2 {v0.2s, v1.2s}, [x23],#16 -768ac40c| ld2 {v22.2s, v23.2s}, [x19], x4 -4c0f604d| ld2 {v12.b, v13.b}[11], [x26] -e043604d| ld2 {v0.h, v1.h}[4], [sp] -c281600d| ld2 {v2.s, v3.s}[0], [x14] -e585600d| ld2 {v5.d, v6.d}[0], [x15] -2c1aff4d| ld2 {v12.b, v13.b}[14], [x17],#2 -820bfd4d| ld2 {v2.b, v3.b}[10], [x28], x29 -d593ff0d| ld2 {v21.s, v22.s}[1], [x30],#8 -6780ea0d| ld2 {v7.s, v8.s}[0], [x3], x10 -3484ff4d| ld2 {v20.d, v21.d}[1], [x1],#16 -6a86ee4d| ld2 {v10.d, v11.d}[1], [x19], x14 -e4c7604d| ld2r {v4.8h, v5.8h}, [sp] -69c8ff0d| ld2r {v9.2s, v10.2s}, [x3],#8 -52ccf30d| ld2r {v18.1d, v19.1d}, [x2], x19 -9e4b404c| ld3 {v30.4s, v31.4s, v0.4s}, [x28] -0440df4c| ld3 {v4.16b-v6.16b}, [x0],#48 -0f49cf0c| ld3 {v15.2s-v17.2s}, [x8], x15 -b22e400d| ld3 {v18.b-v20.b}[3], [x21] -9473400d| ld3 {v20.h-v22.h}[2], [x28] -1da0404d| ld3 {v29.s-v31.s}[2], [x0] -21a5404d| ld3 {v1.d-v3.d}[1], [x9] -3b23df0d| ld3 {v27.b-v29.b}[0], [x25],#3 -0937c60d| ld3 {v9.b-v11.b}[5], [x24], x6 -926bcb4d| ld3 {v18.h-v20.h}[5], [x28], x11 -f5a1df4d| ld3 {v21.s-v23.s}[2], [x15],#12 -dba3c44d| ld3 {v27.s-v29.s}[2], [x30], x4 -12a5df0d| ld3 {v18.d-v20.d}[0], [x8],#24 -daa7d30d| ld3 {v26.d-v28.d}[0], [x30], x19 -3beb400d| ld3r {v27.2s-v29.2s}, [x25] -cde4df4d| ld3r {v13.8h-v15.8h}, [x6],#6 -a4efc44d| ld3r {v4.2d-v6.2d}, [x29], x4 -fc0a400c| ld4 {v28.2s-v31.2s}, [x23] -ae05df0c| ld4 {v14.4h-v17.4h}, [x13],#32 -cb07c84c| ld4 {v11.8h-v14.8h}, [x30], x8 -1825604d| ld4 {v24.b-v27.b}[9], [x8] -2869604d| ld4 {v8.h-v11.h}[5], [x9] -07b2600d| ld4 {v7.s-v10.s}[1], [x16] -9fa4600d| ld4 {v31.d, v0.d, v1.d, v2.d}[0], [x4] -de22ff0d| ld4 {v30.b, v31.b, v0.b, v1.b}[0], [x22],#4 -6a36ed4d| ld4 {v10.b-v13.b}[13], [x19], x13 -23a2ff4d| ld4 {v3.s-v6.s}[2], [x17],#16 -22a0fe4d| ld4 {v2.s-v5.s}[2], [x1], x30 -7ca4ff4d| ld4 {v28.d-v31.d}[1], [x3],#32 -03a7ec4d| ld4 {v3.d-v6.d}[1], [x24], x12 -b9ee600d| ld4r {v25.1d-v28.1d}, [x21] -03e8ff0d| ld4r {v3.2s-v6.2s}, [x0],#16 -e7e3f24d| ld4r {v7.16b-v10.16b}, [sp], x18 -451a4e2c| ldnp s5, s6, [x18,#112] -01236f6c| ldnp d1, d8, [x24,#-272] -204041ac| ldnp q0, q16, [x1,#32] -1b21cc2c| ldp s27, s8, [x8],#96 -41ccc06c| ldp d1, d19, [x2],#8 -65b8e6ac| ldp q5, q14, [x3],#-816 -a58bed2d| ldp s5, s2, [x29,#-148]! -d8a3c46d| ldp d24, d8, [x30,#72]! -dc82c0ad| ldp q28, q0, [x22,#16]! -eda7782d| ldp s13, s9, [sp,#-60] -041b6c6d| ldp d4, d6, [x24,#-320] -17ea6bad| ldp q23, q26, [x16,#-656] -4e14433c| ldr b14, [x2],#49 -cd844e7c| ldr h13, [x6],#232 -99945dbc| ldr s25, [x4],#-39 -170556fc| ldr d23, [x8],#-160 -3115d53c| ldr q17, [x9],#-175 -3c6d403c| ldr b28, [x9,#6]! -f8fc527c| ldr h24, [x7,#-209]! -776c58bc| ldr s23, [x3,#-122]! -075f57fc| ldr d7, [x24,#-139]! -28cdc33c| ldr q8, [x9,#60]! -40a15f3d| ldr b0, [x10,#2024] -3b8c597d| ldr h27, [x1,#3270] -28f958bd| ldr s8, [x9,#6392] -852d6ffd| ldr d5, [x12,#24152] -e149ea3d| ldr q1, [x15,#43296] -807f7c1c| ldr s0, .+0xf8ff0 -e7a61c5c| ldr d7, .+0x394dc -261ec59c| ldr q6, .+0xfffffffffff8a3c4 -4bca773c| ldr b11, [x18,w23,sxtw] -8d69623c| ldr b13, [x12,x2] -cef8797c| ldr h14, [x6,x25,sxtx #1] -b7497bfc| ldr d23, [x13,w27,uxtw] -dbdbfc3c| ldr q27, [x30,w28,sxtw #4] -1a60553c| ldur b26, [x0,#-170] -74f3477c| ldur h20, [x27,#127] -f46249bc| ldur s20, [x23,#150] -b8015bfc| ldur d24, [x13,#-80] -3372de3c| ldur q19, [x17,#-25] -04972c0e| mla v4.8b, v24.8b, v12.8b -f0051b5e| mov b16, v15.b[13] -7f76146e| mov v31.s[2], v19.s[3] -6c1cb60e| orr v12.8b, v3.8b, v22.8b -ae3f1e0e| umov w14, v29.h[7] -f8e5004f| movi v24.16b, #0xf -0355010f| orr v3.2s, #0x28, lsl #16 -4825020f| movi v8.2s, #0x4a, lsl #8 -64d7040f| movi v4.2s, #0x9b, msl #16 -46e6062f| movi d6, #0xffff00ff0000ff00 -bde6056f| movi v29.2d, #0xff00ffff00ff00ff -789f350e| mul v24.8b, v27.8b, v21.8b -7b5b202e| mvn v27.8b, v27.8b -2dd4066f| mvni v13.4s, #0xc1, msl #16 -8266012f| mvni v2.2s, #0x34, lsl #24 -1025022f| mvni v16.2s, #0x48, lsl #8 -eabba06e| neg v10.4s, v31.4s -7e5a206e| mvn v30.16b, v19.16b -6a1fea0e| orn v10.8b, v27.8b, v10.8b -b406010f| movi v20.2s, #0x35 -f564040f| movi v21.2s, #0x87, lsl #24 -b21cb80e| orr v18.8b, v5.8b, v24.8b -2b437a2e| raddhn v11.4h, v25.4s, v26.4s -6d402c6e| raddhn2 v13.16b, v3.8h, v12.8h -655a606e| rbit v5.16b, v19.16b -5108202e| rev32 v17.8b, v2.8b -750a200e| rev64 v21.8b, v19.8b -f88f0b0f| rshrn v24.8b, v31.8h, #5 -8263236e| rsubhn2 v2.16b, v28.8h, v3.8h -787c320e| saba v24.8b, v3.8b, v18.8b -f551220e| sabal v21.8h, v15.8b, v2.8b -b5766d0e| sabd v21.4h, v21.4h, v13.4h -9270240e| sabdl v18.8h, v4.8b, v4.8b -4d71384e| sabdl2 v13.8h, v10.16b, v24.16b -8f6a600e| sadalp v15.2s, v20.4h -e501750e| saddl v5.4s, v15.4h, v21.4h -5202ab4e| saddl2 v18.2d, v18.4s, v11.4s -7029200e| saddlp v16.4h, v11.8b -3913710e| saddw v25.4s, v25.4s, v17.4h -d7e4575f| scvtf d23, d6, #41 -c6db215e| scvtf s6, s30 -17d8214e| scvtf v23.4s, v0.4s -62c4021e| scvtf s2, w3, #15 -f5cd421e| scvtf d21, w15, #13 -6128029e| scvtf s1, x3, #54 -9a7c429e| scvtf d26, x4, #33 -6102221e| scvtf s1, w19 -0b03621e| scvtf d11, w24 -ed01229e| scvtf s13, x15 -6f02629e| scvtf d15, x19 -ac03055e| sha1c q12, s29, v5.4s -e309285e| sha1h s3, s15 -2a221b5e| sha1m q10, s17, v27.4s -a013185e| sha1p q0, s29, v24.4s -6032005e| sha1su0 v0.4s, v19.4s, v0.4s -f918285e| sha1su1 v25.4s, v7.4s -fb50035e| sha256h2 q27, q7, v3.4s -6d421c5e| sha256h q13, q19, v28.4s -c12b285e| sha256su0 v1.4s, v30.4s -6362095e| sha256su1 v3.4s, v19.4s, v9.4s -a805bb0e| shadd v8.2s, v13.2s, v27.2s -783b616e| shll2 v24.4s, v27.8h, #16 -48841b0f| shrn v8.4h, v2.4s, #5 -a924bc4e| shsub v9.4s, v5.4s, v28.4s -1557717f| sli d21, d24, #49 -2a56456f| sli v10.2d, v17.2d, #5 -7c663b0e| smax v28.8b, v19.8b, v27.8b -b5a7694e| smaxp v21.8h, v29.8h, v9.8h -8ea8b04e| smaxv s14, v4.4s -936cb44e| smin v19.4s, v4.4s, v20.4s -15af7e4e| sminp v21.8h, v24.8h, v30.8h -3e81694e| smlal2 v30.4s, v9.8h, v9.8h -29a26d0e| smlsl v9.4s, v17.4h, v13.4h -442e0b4e| smov x4, v18.b[5] -e1a0540f| smull v1.4s, v7.4h, v4.h[1] -5eaa604f| smull2 v30.4s, v18.8h, v0.h[6] -4cc32d4e| smull2 v12.8h, v26.16b, v13.16b -1e7a205e| sqabs b30, b16 -e67ae04e| sqabs v6.2d, v23.2d -a80ded5e| sqadd d8, d13, d13 -e60dae4e| sqadd v6.4s, v15.4s, v14.4s -fe33570f| sqdmlal v30.4s, v31.4h, v7.h[1] -ee90b64e| sqdmlal2 v14.2d, v7.4s, v22.4s -ce79a05f| sqdmlsl d14, s14, v0.s[3] -d5b2a14e| sqdmlsl2 v21.2d, v22.4s, v1.4s -51cb575f| sqdmulh h17, h26, v7.h[5] -0cb5b54e| sqdmulh v12.4s, v8.4s, v21.4s -95d0760e| sqdmull v21.4s, v4.4h, v22.4h -a1d37c4e| sqdmull2 v1.4s, v29.8h, v28.8h -d679e07e| sqneg d22, d14 -3f78602e| sqneg v31.4h, v1.4h -80b4717e| sqrdmulh h0, h4, h17 -4cb76e2e| sqrdmulh v12.4h, v26.4h, v14.4h -aa5ce95e| sqrshl d10, d5, d9 -d25fb74e| sqrshl v18.4s, v30.4s, v23.4s -998c0c6f| sqrshrun2 v25.16b, v4.8h, #4 -4375605f| sqshl d3, d10, #32 -de743f0f| sqshl v30.2s, v6.2s, #31 -a84d675e| sqshl h8, h13, h7 -674dbe4e| sqshl v7.4s, v11.4s, v30.4s -5165587f| sqshlu d17, d10, #24 -b464042f| mvni v20.2s, #0x85, lsl #24 -2086207f| sqshrun s0, d17, #32 -8a851a2f| sqshrun v10.4h, v12.4s, #6 -652c255e| sqsub b5, b3, b5 -632eb30e| sqsub v3.2s, v19.2s, v19.2s -104ba15e| sqxtn s16, d24 -2249214e| sqxtn2 v2.16b, v9.8h -1c14360e| srhadd v28.8b, v0.8b, v22.8b -8044076f| mvni v0.4s, #0xe4, lsl #16 -3a57ed5e| srshl d26, d25, d13 -2c56ef4e| srshl v12.2d, v17.2d, v15.2d -9627140f| srshr v22.4h, v28.4h, #12 -bd37565f| srsra d29, d29, #42 -db34594f| srsra v27.2d, v6.2d, #39 -4546a10e| sshl v5.2s, v18.2s, v1.2s -aca7020f| movi v12.4h, #0x5d, lsl #8 -e004675f| sshr d0, d7, #25 -e5057f4f| sshr v5.2d, v15.2d, #1 -1b15595f| ssra d27, d8, #39 -ba15250f| ssra v26.2s, v13.2s, #27 -3620330e| ssubl v22.8h, v1.8b, v19.8b -c1316d4e| ssubw2 v1.4s, v14.4s, v13.8h -8a76000c| st1 {v10.4h}, [x20] -10a5004c| st1 {v16.8h, v17.8h}, [x8] -ab6b004c| st1 {v11.4s-v13.4s}, [x29] -8d2b004c| st1 {v13.4s-v16.4s}, [x28] -8d7d9f0c| st1 {v13.1d}, [x12],#8 -eb73840c| st1 {v11.8b}, [sp], x4 -48a69f4c| st1 {v8.8h, v9.8h}, [x18],#32 -dca19b4c| st1 {v28.16b, v29.16b}, [x14], x27 -7c699f4c| st1 {v28.4s-v30.4s}, [x11],#48 -da6d870c| st1 {v26.1d-v28.1d}, [x14], x7 -7f279f0c| st1 {v31.4h, v0.4h, v1.4h, v2.4h}, [x27],#32 -4421810c| st1 {v4.8b-v7.8b}, [x10], x1 -a615004d| st1 {v6.b}[13], [x13] -ce92000d| st1 {v14.s}[1], [x22] -c985000d| st1 {v9.d}[0], [x14] -380f9f0d| st1 {v24.b}[3], [x25],#1 -de0b944d| st1 {v30.b}[10], [x30], x20 -3141880d| st1 {v17.h}[0], [x9], x8 -8e939f0d| st1 {v14.s}[1], [x28],#4 -c890870d| st1 {v8.s}[1], [x6], x7 -9f869f4d| st1 {v31.d}[1], [x20],#8 -38879b4d| st1 {v24.d}[1], [x25], x27 -4181004c| st2 {v1.16b, v2.16b}, [x10] -d6819f0c| st2 {v22.8b, v23.8b}, [x14],#16 -bf808a0c| st2 {v31.8b, v0.8b}, [x5], x10 -bd0e204d| st2 {v29.b, v30.b}[11], [x21] -4551204d| st2 {v5.h, v6.h}[6], [x10] -9982204d| st2 {v25.s, v26.s}[2], [x20] -ea86200d| st2 {v10.d, v11.d}[0], [x23] -7b02bf0d| st2 {v27.b, v28.b}[0], [x19],#2 -c000a04d| st2 {v0.b, v1.b}[8], [x6], x0 -fb59a40d| st2 {v27.h, v28.h}[3], [x15], x4 -f880bf0d| st2 {v24.s, v25.s}[0], [x7],#8 -f582ac4d| st2 {v21.s, v22.s}[2], [x23], x12 -9c86bf4d| st2 {v28.d, v29.d}[1], [x20],#16 -3386b14d| st2 {v19.d, v20.d}[1], [x17], x17 -c0469f0c| st3 {v0.4h-v2.4h}, [x22],#24 -2243820c| st3 {v2.8b-v4.8b}, [x25], x2 -c629000d| st3 {v6.b-v8.b}[2], [x14] -4f6a004d| st3 {v15.h-v17.h}[5], [x18] -72a0004d| st3 {v18.s-v20.s}[2], [x3] -c1a4000d| st3 {v1.d-v3.d}[0], [x6] -312e9f0d| st3 {v17.b-v19.b}[3], [x17],#3 -9a28934d| st3 {v26.b-v28.b}[10], [x4], x19 -a1799f4d| st3 {v1.h-v3.h}[7], [x13],#6 -3ba29f0d| st3 {v27.s-v29.s}[0], [x17],#12 -80b2870d| st3 {v0.s-v2.s}[1], [x20], x7 -f6a49f4d| st3 {v22.d-v24.d}[1], [x7],#24 -8fa69a4d| st3 {v15.d-v17.d}[1], [x20], x26 -ee09000c| st4 {v14.2s-v17.2s}, [x15] -1e07880c| st4 {v30.4h, v31.4h, v0.4h, v1.4h}, [x24], x8 -6426204d| st4 {v4.b-v7.b}[9], [x19] -4ea2204d| st4 {v14.s-v17.s}[2], [x18] -05a6200d| st4 {v5.d-v8.d}[0], [x16] -5b21bf0d| st4 {v27.b-v30.b}[0], [x10],#4 -ce28a00d| st4 {v14.b-v17.b}[2], [x6], x0 -767bbf4d| st4 {v22.h-v25.h}[7], [x27],#8 -747aa24d| st4 {v20.h-v23.h}[7], [x19], x2 -24b0bf0d| st4 {v4.s-v7.s}[1], [x1],#16 -c7b1a90d| st4 {v7.s-v10.s}[1], [x14], x9 -9fa4bf4d| st4 {v31.d, v0.d, v1.d, v2.d}[1], [x4],#32 -70a4ab4d| st4 {v16.d-v19.d}[1], [x3], x11 -89fe2e2c| stnp s9, s31, [x20,#-140] -bfd31d6c| stnp d31, d20, [x29,#472] -ddf301ac| stnp q29, q28, [x30,#48] -14f6ac2c| stp s20, s29, [x16],#-156 -251db76c| stp d5, d7, [x9],#-144 -e51fb7ac| stp q5, q7, [sp],#-288 -5c90852d| stp s28, s4, [x2,#44]! -4c51a56d| stp d12, d20, [x10,#-432]! -265d8aad| stp q6, q23, [x9,#320]! -9c0c392d| stp s28, s3, [x4,#-56] -b49e1e6d| stp d20, d7, [x21,#488] -55f105ad| stp q21, q28, [x10,#176] -4dd6003c| str b13, [x18],#13 -e357067c| str h3, [sp],#101 -f6841dbc| str s22, [x7],#-40 -54b710fc| str d20, [x26],#-245 -0d07833c| str q13, [x24],#48 -393f003c| str b25, [x25,#3]! -1fac007c| str h31, [x0,#10]! -d41d13bc| str s20, [x14,#-207]! -908f0dfc| str d16, [x28,#216]! -5ded9d3c| str q29, [x10,#-34]! -6d72073d| str b13, [x19,#476] -68752d7d| str h8, [x11,#5818] -084728bd| str s8, [x24,#10308] -409503fd| str d0, [x10,#1832] -58a1963d| str q24, [x10,#23168] -51c8253c| str b17, [x2,w5,sxtw] -967b313c| str b22, [x28,x17,lsl #0] -b4683e7c| str h20, [x5,x30] -64d9a33c| str q4, [x11,w3,sxtw #4] -e5e1143c| stur b5, [x15,#-178] -99901e7c| stur h25, [x4,#-23] -bb0012bc| stur s27, [x5,#-224] -1d710cfc| stur d29, [x8,#199] -17e1873c| stur q23, [x8,#126] -ed84a26e| sub v13.4s, v7.4s, v2.4s -7761b80e| subhn v23.2s, v11.2d, v24.2d -f838205e| suqadd b24, b7 -7739600e| suqadd v23.4h, v11.4h -26a5204f| sxtl2 v6.2d, v9.4s -5a201a4e| tbl v26.16b, {v2.16b, v3.16b}, v26.16b -c2400f0e| tbl v2.8b, {v6.16b-v8.16b}, v15.8b -7263024e| tbl v18.16b, {v27.16b-v30.16b}, v2.16b -bb010b4e| tbl v27.16b, {v13.16b}, v11.16b -5f31184e| tbx v31.16b, {v10.16b, v11.16b}, v24.16b -a952100e| tbx v9.8b, {v21.16b-v23.16b}, v16.8b -4872170e| tbx v8.8b, {v18.16b-v21.16b}, v23.8b -dc110e4e| tbx v28.16b, {v14.16b}, v14.16b -d7289a4e| trn1 v23.4s, v6.4s, v26.4s -cd6a924e| trn2 v13.4s, v22.4s, v18.4s -a552392e| uabal v5.8h, v21.8b, v25.8b -a653256e| uabal2 v6.8h, v29.16b, v5.16b -fb70b42e| uabdl v27.2d, v7.2s, v20.2s -3b6a202e| uadalp v27.4h, v17.8b -8a03b22e| uaddl v10.2d, v28.2s, v18.2s -262a206e| uaddlp v6.8h, v17.16b -8410312e| uaddw v4.8h, v4.8h, v17.8b -bf11ae6e| uaddw2 v31.2d, v13.2d, v14.4s -a7e65d7f| ucvtf d7, d21, #35 -8bda617e| ucvtf d11, d20 -7fb8431e| ucvtf d31, w3, #18 -1c0f039e| ucvtf s28, x24, #61 -2241439e| ucvtf d2, x9, #48 -d701231e| ucvtf s23, w14 -9600631e| ucvtf d22, w4 -8b01239e| ucvtf s11, x12 -7202639e| ucvtf d18, x19 -3406b82e| uhadd v20.2s, v17.2s, v24.2s -9264612e| umax v18.4h, v4.4h, v1.4h -d9a5772e| umaxp v25.4h, v14.4h, v23.4h -74a8b06e| umaxv s20, v3.4s -24a8312e| uminv b4, v1.8b -c5218e2f| umlal v5.2d, v14.2s, v14.s[0] -3d20a76f| umlal2 v29.2d, v1.4s, v7.s[1] -90817e6e| umlal2 v16.4s, v12.8h, v30.8h -0f69a46f| umlsl2 v15.2d, v8.4s, v4.s[3] -4aa27c2e| umlsl v10.4s, v18.4h, v28.4h -48a27b6e| umlsl2 v8.4s, v18.8h, v27.8h -833c0d0e| umov w3, v4.b[6] -e2a1b22f| umull v2.2d, v15.2s, v18.s[1] -07c06f2e| umull v7.4s, v0.4h, v15.4h -470e367e| uqadd b7, b18, b22 -490e252e| uqadd v9.8b, v18.8b, v5.8b -bf5eaa7e| uqrshl s31, s21, s10 -c49c347f| uqrshrn s4, d6, #12 -b4757a7f| uqshl d20, d13, #58 -d14f777e| uqshl h17, h30, h23 -9e2d7a7e| uqsub h30, h12, h26 -a62c296e| uqsub v6.16b, v5.16b, v9.16b -5d4ba17e| uqxtn s29, d26 -454b212e| uqxtn v5.8b, v26.8h -1c48a16e| uqxtn2 v28.4s, v0.2d -4157736e| urshl v1.8h, v26.8h, v19.8h -2d26797f| urshr d13, d17, #7 -bd27466f| urshr v29.2d, v29.2d, #58 -bcc8a12e| ursqrte v28.2s, v5.2s -f5345d7f| ursra d21, d7, #35 -f8353a6f| ursra v24.4s, v15.4s, #6 -85a6342f| ushll v5.2d, v20.2s, #20 -e7a70e6f| ushll2 v7.8h, v31.16b, #6 -ed04787f| ushr d13, d7, #8 -8f07362f| ushr v15.2s, v28.2s, #10 -963a607e| usqadd h22, h20 -383a206e| usqadd v24.16b, v17.16b -ef16596f| usra v15.2d, v23.2d, #39 -f222ab2e| usubl v18.2d, v23.2s, v11.2s -9220696e| usubl2 v18.4s, v4.8h, v9.8h -0130312e| usubw v1.8h, v0.8h, v17.8b -a932a06e| usubw2 v9.2d, v21.2d, v0.4s -9a19910e| uzp1 v26.2s, v12.2s, v17.2s -a379ca4e| zip2 v3.2d, v13.2d, v10.2d -1202011a| adc w18, w16, w1 -6900199a| adc x9, x3, x25 -01010f3a| adcs w1, w8, w15 -13010fba| adcs x19, x8, x15 -55ed280b| add w21, w10, w8, sxtx #3 -2077268b| add x0, x25, x6, uxtx #5 -7f40560b| add wzr, w3, w22, lsr #16 -3a16282b| adds w26, w17, w8, uxtb #5 -f8a336ab| adds x24, sp, w22, sxth -000e6d31| adds w0, w16, #0xb43, lsl #12 -b48e49b1| adds x20, x21, #0x263, lsl #12 -7e174e2b| adds w30, w27, w14, lsr #5 -25e2f250| adr x5, .+0xfffffffffffe5c46 -294079f0| adrp x9, .+0xf2807000 -3aa13f12| and w26, w9, #0x3fe03fe -32a23592| and x18, x17, #0xf80ff80ff80ff80f -b478070a| and w20, w5, w7, lsl #30 -dd1f988a| and x29, x30, x24, asr #7 -a7351b72| ands w7, w13, #0x7ffe0 -1c056ef2| ands x28, x8, #0xc0000 -defd52ea| ands x30, x14, x18, lsr #63 -8c28d01a| asr w12, w4, w16 -582ac09a| asr x24, x18, x0 -647d1813| asr w4, w11, #24 -d1fe5b93| asr x17, x22, #27 -2329c31a| asr w3, w9, w3 -d929d69a| asr x25, x14, x22 -aefa5354| b.al .+0xa7f54 -76ad3917| b .+0xfffffffffce6b5d8 -de320f33| bfi w30, w22, #17, #13 -af144db3| bfi x15, x5, #51, #6 -161c7eb3| bfi x22, x0, #2, #8 -f9791733| bfxil w25, w15, #23, #8 -781577b3| bfi x24, x11, #9, #6 -0f65f98a| bic x15, x8, x25, ror #25 -2c37e16a| bics w12, w25, w1, ror #13 -a6f473ea| bics x6, x5, x19, lsr #61 -f064ad96| bl .+0xfffffffffab593c0 -80023fd6| blr x20 -00001fd6| br x0 -80de3ed4| brk #0xf6f4 -08276a35| cbnz w8, .+0xd44e0 -acd1c0b5| cbnz x12, .+0xfffffffffff81a34 -ef50bf34| cbz w15, .+0xfffffffffff7ea1c -4bd681b4| cbz x11, .+0xfffffffffff03ac8 -4e2a483a| ccmn w18, #0x8, #0xe, cs -4a3a4eba| ccmn x18, #0xe, #0xa, cc -0143553a| ccmn w24, w21, #0x1, mi -c09359ba| ccmn x30, x25, #0x0, ls -020a567a| ccmp w16, #0x16, #0x2, eq -a6985afa| ccmp x5, #0x1a, #0x6, ls -6fc0487a| ccmp w3, w8, #0xf, gt -21d14bfa| ccmp x9, x11, #0x1, le -75f5991a| csinc w21, w11, w25, al -5a25919a| csinc x26, x10, x17, cs -6a938c5a| csinv w10, w27, w12, ls -6a408eda| csinv x10, x3, x14, mi -5f3603d5| clrex #0x6 -a017c05a| cls w0, w29 -2616c0da| cls x6, x17 -9411c05a| clz w20, w12 -c611c0da| clz x6, x14 -9fc3322b| cmn w28, w18, sxtw -3f9638ab| cmn x17, w24, sxtb #5 -3f681db1| cmn x1, #0x75a -bfd15bab| cmn x13, x27, lsr #52 -ff723b6b| cmp w23, w27, uxtx #4 -1f5234eb| cmp x16, w20, uxtw #4 -9fb22a71| cmp w20, #0xaac -df2478f1| cmp x6, #0xe09, lsl #12 -bf07026b| cmp w29, w2, lsl #1 -bfc514eb| cmp x13, x20, lsl #49 -d494975a| csneg w20, w6, w23, ls -763591da| csneg x22, x11, x17, cc -b440c91a| crc32b w20, w5, w9 -5745cd1a| crc32h w23, w10, w13 -684ad01a| crc32w w8, w19, w16 -884fd59a| crc32x w8, w28, x21 -ea50c61a| crc32cb w10, w7, w6 -1357cf1a| crc32ch w19, w24, w15 -9859c21a| crc32cw w24, w12, w2 -6e5fde9a| crc32cx w14, w27, x30 -9340941a| csel w19, w4, w20, mi -dd42839a| csel x29, x22, x3, mi -fe779f1a| cset w30, vs -f1279f9a| cset x17, cc -eb839f5a| csetm w11, ls -e3139fda| csetm x3, eq -a986841a| csinc w9, w21, w4, hi -19b78b9a| csinc x25, x24, x11, lt -4643835a| csinv w6, w26, w3, mi -5ee38cda| csinv x30, x26, x12, al -d166945a| csneg w17, w22, w20, vs -55f793da| csneg x21, x26, x19, al -0158add4| dcps1 #0x6ac0 -82ceb2d4| dcps2 #0x9674 -a31eb3d4| dcps3 #0x98f5 -bf3203d5| dmb oshst -e003bfd6| drps -9f3403d5| dsb #0x04 -2e2faeca| eon x14, x25, x14, asr #11 -de6b0152| eor w30, w30, #0x83ffffff -4a7714d2| eor x10, x26, #0xfffff3fffffff3ff -2cea0dca| eor x12, x17, x13, lsl #58 -e0039fd6| eret -834cce93| extr x3, x4, x14, #19 -5f2003d5| wfe -bf2e03d5| hint #0x75 -e0f055d4| hlt #0xaf87 -df3403d5| isb #0x4 -22fcdf88| ldar w2, [x1] -78fedfc8| ldar x24, [x19] -cffcdf08| ldarb w15, [x6] -34fedf48| ldarh w20, [x17] -17bb7f88| ldaxp w23, w14, [x24] -6ffe7fc8| ldaxp x15, xzr, [x19] -acfe5f88| ldaxr w12, [x21] -cafe5fc8| ldaxr x10, [x22] -ddfd5f08| ldaxrb w29, [x14] -0efd5f48| ldaxrh w14, [x8] -66445128| ldnp w6, w17, [x3,#136] -3fa77fa8| ldnp xzr, x9, [x25,#-8] -1e04eb28| ldp w30, w1, [x0],#-168 -0da6c0a8| ldp x13, x9, [x16],#8 -7d00d429| ldp w29, w0, [x3,#160]! -d26ae1a9| ldp x18, x26, [x22,#-496]! -d0ca6829| ldp w16, w18, [x22,#-188] -a5e34fa9| ldp x5, x24, [x29,#248] -3e44d168| ldpsw x30, x17, [x1],#136 -5f08e169| ldpsw xzr, x2, [x2,#-248]! -430d6769| ldpsw x3, x3, [x10,#-200] -2c555bb8| ldr w12, [x9],#-75 -83c557f8| ldr x3, [x12],#-132 -f36e47b8| ldr w19, [x23,#118]! -6b1f48f8| ldr x11, [x27,#129]! -f5d64ab9| ldr w21, [x23,#2772] -872d7cf9| ldr x7, [x12,#30808] -f23e8c18| ldr w18, .+0xfffffffffff187dc -a7e72a58| ldr x7, .+0x55cf4 -82a75438| ldrb w2, [x28],#-182 -a7fd5738| ldrb w7, [x13,#-129]! -c83d4239| ldrb w8, [x14,#143] -58c96438| ldrb w24, [x10,w4,sxtw] -8e687e38| ldrb w14, [x4,x30] -70575378| ldrh w16, [x27],#-203 -015f5078| ldrh w1, [x24,#-251]! -7add5c79| ldrh w26, [x11,#3694] -2fcb7778| ldrh w15, [x25,w23,sxtw] -c474c338| ldrsb w4, [x6],#55 -28869638| ldrsb x8, [x17],#-152 -fe3fd438| ldrsb w30, [sp,#-189]! -da0f9938| ldrsb x26, [x30,#-112]! -5b3ac739| ldrsb w27, [x18,#462] -2c579e39| ldrsb x12, [x25,#1941] -54faf838| ldrsb w20, [x18,x24,sxtx #0] -fb68f238| ldrsb w27, [x7,x18] -f26aad38| ldrsb x18, [x23,x13] -17e4c978| ldrsh w23, [x0],#158 -a2759f78| ldrsh x2, [x13],#-9 -9c6ec478| ldrsh w28, [x20,#70]! -fd6f8278| ldrsh x29, [sp,#38]! -a82bc279| ldrsh w8, [x29,#276] -9d89b979| ldrsh x29, [x12,#7364] -962685b8| ldrsw x22, [x20],#82 -76ae8bb8| ldrsw x22, [x19,#186]! -fc2193b9| ldrsw x28, [x15,#4896] -7561fa98| ldrsw x21, .+0xffffffffffff4c2c -e34842b8| ldtr w3, [x7,#36] -4ff84df8| ldtr x15, [x2,#223] -d9e84f38| ldtrb w25, [x6,#254] -397b5378| ldtrh w25, [x25,#-201] -c4c9d138| ldtrsb w4, [x14,#-228] -02789638| ldtrsb x2, [x0,#-153] -a988cb78| ldtrsh w9, [x5,#184] -03888978| ldtrsh x3, [x0,#152] -ccb99fb8| ldtrsw x12, [x14,#-5] -efb154b8| ldur w15, [x15,#-181] -fc2051f8| ldur x28, [x7,#-238] -86d04438| ldurb w6, [x4,#77] -73405d78| ldurh w19, [x3,#-44] -7a81d538| ldursb w26, [x11,#-168] -b0b28038| ldursb x16, [x21,#11] -b4a1d278| ldursh w20, [x13,#-214] -3ed18078| ldursh x30, [x9,#13] -09628eb8| ldursw x9, [x16,#230] -c07e7f88| ldxp w0, wzr, [x22] -3e167fc8| ldxp x30, x5, [x17] -727c5f88| ldxr w18, [x3] -487c5fc8| ldxr x8, [x2] -867d5f08| ldxrb w6, [x12] -747f5f48| ldxrh w20, [x27] -d920d71a| lsl w25, w6, w23 -b920c59a| lsl x25, x5, x5 -4da947d3| ubfx x13, x10, #7, #36 -be23ca1a| lsl w30, w29, w10 -cc20d19a| lsl x12, x6, x17 -ae26c31a| lsr w14, w21, w3 -fc27cb9a| lsr x28, xzr, x11 -2b7e1053| lsr w11, w17, #16 -cefe75d3| lsr x14, x22, #53 -3b25d01a| lsr w27, w9, w16 -e826d79a| lsr x8, x23, x23 -5504031b| madd w21, w2, w3, w1 -9e5c109b| madd x30, x4, x16, x23 -00fe1f1b| mneg w0, w16, wzr -6efe179b| mneg x14, x19, x23 -31020011| add w17, w17, #0x0 -21000091| add x1, x1, #0x0 -39f1bf12| mov w25, #0x76ffff -53b3e992| mov x19, #0xb265ffffffffffff -c0fd9552| mov w0, #0xafee -f16b97d2| mov x17, #0xbb5f -e8972232| mov w8, #0xc00fc00f -e27323b2| mov x2, #0xe3ffffffe3ffffff -e9030e2a| mov w9, w14 -fb0310aa| mov x27, x16 -d0e48472| movk w16, #0x2726 -432dbcf2| movk x3, #0xe16a, lsl #16 -4b679612| mov w11, #0xffff4cc5 -9121e492| mov x17, #0xdef3ffffffffffff -00be90d2| mov x0, #0x85f0 -91d730d5| mrs x17, s2_0_c13_c7_4 -cf301fd5| msr s3_7_c3_c0_6, x15 -daea181b| msub w26, w22, w24, w26 -e1a7109b| msub x1, xzr, x16, x9 -477f0d1b| mul w7, w26, w13 -a17d1c9b| mul x1, x13, x28 -fc9b79aa| mvn x28, x25, lsr #38 -f71b904b| neg w23, w16, asr #6 -e3df4acb| neg x3, x10, lsr #55 -f0334e6b| negs w16, w14, lsr #12 -e6031f5a| ngc w6, wzr -f40302da| ngc x20, x2 -ee03137a| ngcs w14, w19 -ee0303fa| ngcs x14, x3 -1f2003d5| nop -ab14e92a| orn w11, w5, w9, ror #5 -185c3faa| orn x24, x0, xzr, lsl #23 -a8850c32| orr w8, w13, #0x300030 -cad023b2| orr x10, x6, #0xe3e3e3e3e3e3e3e3 -5487ccaa| orr x20, x26, x12, ror #33 -293783f9| prfm plil1strm, [x25,#1640] -501010d8| prfm pstl1keep, .+0x20208 -bc7389f8| prfum #0x1c, [x29,#151] -9203c05a| rbit w18, w28 -0501c0da| rbit x5, x8 -40005fd6| ret x2 -940ac05a| rev w20, w20 -ca0fc0da| rev x10, x30 -7807c05a| rev16 w24, w27 -fb06c0da| rev16 x27, x23 -dc0ac0da| rev32 x28, x22 -970dc0da| rev x23, x12 -42408813| extr w2, w2, w8, #16 -5a96db93| extr x26, x18, x27, #37 -782cc41a| ror w24, w3, w4 -8c2ec69a| ror x12, x20, x6 -372ec61a| ror w23, w17, w6 -b72ddc9a| ror x23, x13, x28 -e501185a| sbc w5, w15, w24 -ac0011da| sbc x12, x5, x17 -7a03067a| sbcs w26, w27, w6 -310008fa| sbcs x17, x1, x8 -65837f93| sbfiz x5, x27, #1, #33 -5c1b4793| sbfiz x28, x26, #57, #7 -a71f5b93| sbfiz x7, x29, #37, #8 -640ede1a| sdiv w4, w19, w30 -2a0dd99a| sdiv x10, x9, x25 -9f2003d5| sev -bf2003d5| sevl -045c389b| smaddl x4, w0, w24, x23 -6efe3e9b| smnegl x14, w19, w30 -ebac239b| smsubl x11, w7, w3, x11 -947f459b| smulh x20, x28, x5 -d67e3e9b| smull x22, w22, w30 -6dff9f88| stlr w13, [x27] -1ffd9fc8| stlr xzr, [x8] -a8fe9f08| stlrb w8, [x21] -abfd9f48| stlrh w11, [x13] -2ec02888| stlxp w8, w14, w16, [x1] -11993ec8| stlxp w30, x17, x6, [x8] -bbfe0f88| stlxr w15, w27, [x21] -e9fc09c8| stlxr w9, x9, [x7] -c6fe0708| stlxrb w7, w6, [x22] -c6fe0c48| stlxrh w12, w6, [x22] -b3283028| stnp w19, w10, [x5,#-128] -252e26a8| stnp x5, x11, [x17,#-416] -9fb18c28| stp wzr, w12, [x12],#100 -9ce5aba8| stp x28, x25, [x12],#-328 -e5d08229| stp w5, w20, [x7,#20]! -d6e79ea9| stp x22, x25, [x30,#488]! -9eef2029| stp w30, w27, [x28,#-252] -57b314a9| stp x23, x12, [x26,#328] -eda503b8| str w13, [x15],#58 -62241df8| str x2, [x3],#-46 -d2bd18b8| str w18, [x14,#-117]! -542d12f8| str x20, [x10,#-222]! -e92c3bb9| str w9, [x7,#15148] -de4804f9| str x30, [x6,#2192] -cce40b38| strb w12, [x6],#190 -eafd1238| strb w10, [x15,#-209]! -7fcb0639| strb wzr, [x27,#434] -03f82738| strb w3, [x0,x7,sxtx #0] -5c6a3e38| strb w28, [x18,x30] -a8551978| strh w8, [x13],#-107 -9e6c0c78| strh w30, [x4,#198]! -c83d0e79| strh w8, [x14,#1822] -502a1db8| sttr w16, [x18,#-46] -ae180af8| sttr x14, [x5,#161] -ea1a0138| sttrb w10, [x23,#17] -416b0278| sttrh w1, [x26,#38] -659107b8| stur w5, [x11,#121] -6b611ff8| stur x11, [x11,#-10] -99a01c38| sturb w25, [x4,#-54] -99421e78| sturh w25, [x20,#-28] -3e2a2688| stxp w6, w30, w10, [x17] -2f6a2cc8| stxp w12, x15, x26, [x17] -7d7f1b88| stxr w27, w29, [x27] -6e7e1bc8| stxr w27, x14, [x19] -ec7c0208| stxrb w2, w12, [x7] -ee7f0648| stxrh w6, w14, [sp] -2f8d204b| sub w15, w9, w0, sxtb #3 -1fbe3acb| sub sp, x16, w26, sxth #7 -5af778d1| sub x26, x26, #0xe3d, lsl #12 -6729034b| sub w7, w11, w3, lsl #10 -ae683f6b| subs w14, w5, wzr, uxtx #2 -2f993deb| subs x15, x9, w29, sxtb #6 -db0d5f71| subs w27, w14, #0x7c3, lsl #12 -3aec1ff1| subs x26, x1, #0x7fb -1f24016b| cmp w0, w1, lsl #9 -a1ae1bd4| svc #0xdd75 -a61e0013| sxtb w6, w21 -441c4093| sxtb x4, w2 -0c3c0013| sxth w12, w0 -b33f4093| sxth x19, w29 -407f4093| sxtw x0, w26 -455929d5| sysl x5, #1, C5, C9, #2 -d1005b37| tbnz w17, #11, .+0x6018 -798eaeb6| tbz x25, #53, .+0xffffffffffffd1cc -bf8c1f72| tst w5, #0x1e001e -ff10836a| tst w7, w3, asr #4 -dfc5daea| tst x14, x26, ror #49 -aa6e43d3| ubfx x10, x21, #3, #25 -46181a53| ubfiz w6, w2, #6, #7 -43294bd3| lsl x3, x10, #53 -77787dd3| ubfiz x23, x3, #3, #31 -1a0bd61a| udiv w26, w24, w22 -9308c19a| udiv x19, x4, x1 -755aa19b| umaddl x21, w19, w1, x22 -1ffdbe9b| umnegl xzr, w8, w30 -cbaaba9b| umsubl x11, w22, w26, x10 -0c7fdb9b| umulh x12, x24, x27 -cc7da79b| umull x12, w14, w7 -3d1c0053| uxtb w29, w1 -0e3f0053| uxth w14, w24 -5f2003d5| wfe -7f2003d5| wfi -3f2003d5| yield -71b9604e| abs v17.8h, v11.8h -5186f65e| add d17, d18, d22 -4986f34e| add v9.2d, v18.2d, v19.2d -1243720e| addhn v18.4h, v24.4s, v18.4s -0640354e| addhn2 v6.16b, v0.8h, v21.8h -d9bdfa4e| addp v25.2d, v14.2d, v26.2d -4c59284e| aesd v12.16b, v10.16b -8c48284e| aese v12.16b, v4.16b -f47a284e| aesimc v20.16b, v23.16b -c56b284e| aesmc v5.16b, v30.16b -bf1c3b0e| and v31.8b, v5.8b, v27.8b -6444026f| mvni v4.4s, #0x43, lsl #16 -1357032f| bic v19.2s, #0x78, lsl #16 -561d6a0e| bic v22.8b, v10.8b, v10.8b -cd1ff06e| bif v13.16b, v30.16b, v16.16b -f31ebd6e| bit v19.16b, v23.16b, v29.16b -6f1d6c2e| bsl v15.8b, v11.8b, v12.8b -1e48600e| cls v30.4h, v0.4h -6948202e| clz v9.8b, v3.8b -968efd7e| cmeq d22, d20, d29 -e58f6d6e| cmeq v5.8h, v31.8h, v13.8h -8f98600e| cmeq v15.4h, v4.4h, #0 -4f3db84e| cmge v15.4s, v10.4s, v24.4s -2788a02e| cmge v7.2s, v1.2s, #0 -bf35714e| cmgt v31.8h, v13.8h, v17.8h -4a89604e| cmgt v10.8h, v10.8h, #0 -9635252e| cmhi v22.8b, v12.8b, v5.8b -d83eff6e| cmhs v24.2d, v22.2d, v31.2d -cb99206e| cmle v11.16b, v14.16b, #0 -29a9604e| cmlt v9.8h, v9.8h, #0 -d18eea5e| cmtst d17, d22, d10 -d18ea94e| cmtst v17.4s, v22.4s, v9.4s -4a04075e| mov b10, v2.b[3] -0504040e| dup v5.2s, v0.s[0] -b20e1f4e| dup v18.16b, w21 -2a1f3e6e| eor v10.16b, v25.16b, v30.16b -0bd5aa7e| fabd s11, s8, s10 -12d7b96e| fabd v18.4s, v24.4s, v25.4s -a1f9a04e| fabs v1.4s, v13.4s -1ac3201e| fabs s26, s24 -d8c3601e| fabs d24, d30 -95ee267e| facge s21, s20, s6 -2bee262e| facge v11.2s, v17.2s, v6.2s -1aedec7e| facgt d26, d8, d12 -74effa6e| facgt v20.2d, v27.2d, v26.2d -7ed4260e| fadd v30.2s, v3.2s, v6.2s -4528251e| fadd s5, s2, s5 -262b661e| fadd d6, d25, d6 -84d8707e| faddp d4, v4.2d -71d4276e| faddp v17.4s, v3.4s, v7.4s -a5f43f1e| fccmp s5, s31, #0x5, al -20e5601e| fccmp d9, d0, #0x0, al -52d4331e| fccmpe s2, s19, #0x2, le -1e66761e| fccmpe d16, d22, #0xe, vs -d7e6695e| fcmeq d23, d22, d9 -e7d9a05e| fcmeq s7, s15, #0 -dadaa04e| fcmeq v26.4s, v22.4s, #0 -28e5737e| fcmge d8, d9, d19 -a2e73a6e| fcmge v2.4s, v29.4s, v26.4s -4fcba07e| fcmge s15, s26, #0 -43c8a02e| fcmge v3.2s, v2.2s, #0 -ffe5a67e| fcmgt s31, s15, s6 -7ee7bd2e| fcmgt v30.2s, v27.2s, v29.2s -5bc8e05e| fcmgt d27, d2, #0 -3dc9a04e| fcmgt v29.4s, v9.4s, #0 -38daa07e| fcmle s24, s17, #0 -8fdaa02e| fcmle v15.2s, v20.2s, #0 -93e8e05e| fcmlt d19, d4, #0 -9fe9a04e| fcmlt v31.4s, v12.4s, #0 -a023201e| fcmp s29, s0 -c822231e| fcmp s22, #0 -a022651e| fcmp d21, d5 -a8227d1e| fcmp d21, #0 -70203e1e| fcmpe s3, s30 -38232b1e| fcmpe s25, #0 -70206c1e| fcmpe d3, d12 -b823731e| fcmpe d29, #0 -3e6f331e| fcsel s30, s25, s19, vs -a64f6d1e| fcsel d6, d29, d13, mi -0d41e21e| fcvt s13, h8 -cbc0e21e| fcvt d11, h6 -18c0231e| fcvt h24, s0 -a7c0221e| fcvt d7, s5 -e7c3631e| fcvt h7, d31 -9f43621e| fcvt s31, d28 -a0c8215e| fcvtas s0, s5 -4dc8210e| fcvtas v13.2s, v2.2s -0300241e| fcvtas w3, s0 -fd03249e| fcvtas x29, s31 -ef01641e| fcvtas w15, d15 -4c01649e| fcvtas x12, d10 -9ac8617e| fcvtau d26, d4 -b802251e| fcvtau w24, s21 -2a03259e| fcvtau x10, s25 -ea00651e| fcvtau w10, d7 -0102659e| fcvtau x1, d16 -0d7a610e| fcvtl v13.2d, v16.2s -ed79214e| fcvtl2 v13.4s, v15.8h -43bb615e| fcvtms d3, d26 -c000301e| fcvtms w0, s6 -9202309e| fcvtms x18, s20 -0800701e| fcvtms w8, d0 -6603709e| fcvtms x6, d27 -f0b9217e| fcvtmu s16, s15 -3bba212e| fcvtmu v27.2s, v17.2s -5900311e| fcvtmu w25, s2 -9a03319e| fcvtmu x26, s28 -fa01711e| fcvtmu w26, d15 -6f01719e| fcvtmu x15, d11 -1968210e| fcvtn v25.4h, v0.4s -3d69214e| fcvtn2 v29.8h, v9.4s -87aa615e| fcvtns d7, d20 -e301201e| fcvtns w3, s15 -6002209e| fcvtns x0, s19 -1600601e| fcvtns w22, d0 -8503609e| fcvtns x5, d28 -f5ab617e| fcvtnu d21, d31 -2b02211e| fcvtnu w11, s17 -f902219e| fcvtnu x25, s23 -0702611e| fcvtnu w7, d16 -9d03619e| fcvtnu x29, d28 -dcaba15e| fcvtps s28, s30 -b4a8a10e| fcvtps v20.2s, v5.2s -5302281e| fcvtps w19, s18 -e003289e| fcvtps x0, s31 -9501681e| fcvtps w21, d12 -6703689e| fcvtps x7, d27 -68a8a17e| fcvtpu s8, s3 -dcaba12e| fcvtpu v28.2s, v30.2s -9d03291e| fcvtpu w29, s28 -5f01299e| fcvtpu xzr, s10 -e101691e| fcvtpu w1, d15 -3f00699e| fcvtpu xzr, d1 -ee6b612e| fcvtxn v14.2s, v31.2d -b1fd215f| fcvtzs s17, s13, #31 -bafd2c0f| fcvtzs v26.2s, v13.2s, #20 -47b8e15e| fcvtzs d7, d2 -dcbbe14e| fcvtzs v28.2d, v30.2d -56f8181e| fcvtzs w22, s2, #2 -9265189e| fcvtzs x18, s12, #39 -d3ad581e| fcvtzs w19, d14, #21 -3d9b589e| fcvtzs x29, d25, #26 -1a00381e| fcvtzs w26, s0 -d302389e| fcvtzs x19, s22 -5303781e| fcvtzs w19, d26 -8f01789e| fcvtzs x15, d12 -57fe537f| fcvtzu d23, d18, #45 -beff796f| fcvtzu v30.2d, v29.2d, #7 -08b9e17e| fcvtzu d8, d8 -cdbbe16e| fcvtzu v13.2d, v30.2d -2126199e| fcvtzu x1, s17, #55 -70a9591e| fcvtzu w16, d11, #22 -8c25599e| fcvtzu x12, d12, #55 -1201391e| fcvtzu w18, s8 -0800399e| fcvtzu x8, s0 -da00791e| fcvtzu w26, d6 -2903799e| fcvtzu x9, d25 -56fd3f2e| fdiv v22.2s, v10.2s, v31.2s -1f182e1e| fdiv s31, s0, s14 -ce1b741e| fdiv d14, d30, d20 -0d61021f| fmadd s13, s8, s2, s24 -03205e1f| fmadd d3, d0, d30, d8 -72f6654e| fmax v18.2d, v19.2d, v5.2d -1849281e| fmax s24, s8, s8 -8e4a6e1e| fmax d14, d20, d14 -54c7304e| fmaxnm v20.4s, v26.4s, v16.4s -91683a1e| fmaxnm s17, s4, s26 -f56a721e| fmaxnm d21, d23, d18 -c8cb307e| fmaxnmp s8, v30.2s -06c9306e| fmaxnmv s6, v8.4s -b6fb707e| fmaxp d22, v29.2d -1759341e| fmin s23, s8, s20 -675b721e| fmin d7, d27, d18 -69792d1e| fminnm s9, s11, s13 -ab786b1e| fminnm d11, d5, d11 -0fcab07e| fminnmp s15, v16.2s -d2c6b26e| fminnmp v18.4s, v22.4s, v18.4s -22fab07e| fminp s2, v17.2s -f5f5f56e| fminp v21.2d, v15.2d, v21.2d -bc13c95f| fmla d28, d29, v9.d[0] -5d51a85f| fmls s29, s10, v8.s[1] -d3ccb94e| fmls v19.4s, v6.4s, v25.4s -5bf4014f| fmov v27.4s, #9.000000000000000000e+00 -5bf5026f| fmov v27.2d, #2.031250000000000000e-01 -6541201e| fmov s5, s11 -b742601e| fmov d23, d21 -6002271e| fmov s0, w19 -5301261e| fmov w19, s10 -c103679e| fmov d1, x30 -3301af9e| fmov v19.d[1], x9 -bd00669e| fmov x29, d5 -ee02ae9e| fmov x14, v23.d[1] -0ff0251e| fmov s15, #1.550000000000000000e+01 -16506a1e| fmov d22, #2.812500000000000000e-01 -d1c20e1f| fmsub s17, s22, s14, s16 -fdae491f| fmsub d29, d23, d9, d11 -a4989d4f| fmul v4.4s, v5.4s, v29.s[2] -efde706e| fmul v15.2d, v23.2d, v16.2d -190a291e| fmul s25, s16, s9 -430a671e| fmul d3, d18, d7 -21919e7f| fmulx s1, s9, v30.s[0] -5298c76f| fmulx v18.2d, v2.2d, v7.d[1] -1ddf3c5e| fmulx s29, s24, s28 -a2fba06e| fneg v2.4s, v29.4s -7a40211e| fneg s26, s3 -f843611e| fneg d24, d31 -326b381f| fnmadd s18, s25, s24, s26 -4b636a1f| fnmadd d11, d26, d10, d24 -48fa201f| fnmsub s8, s18, s0, s30 -04d87f1f| fnmsub d4, d0, d31, d22 -0289371e| fnmul s2, s8, s23 -0e8a691e| fnmul d14, d16, d9 -05dba15e| frecpe s5, s24 -42d9a14e| frecpe v2.4s, v10.4s -2eff655e| frecps d14, d25, d5 -03fe774e| frecps v3.2d, v16.2d, v23.2d -b4fba15e| frecpx s20, s29 -9d41261e| frinta s29, s12 -ea42661e| frinta d10, d23 -e399a16e| frinti v3.4s, v15.4s -6ec3271e| frinti s14, s27 -ecc1671e| frinti d12, d15 -4543251e| frintm s5, s26 -f242651e| frintm d18, d23 -898a214e| frintn v9.4s, v20.4s -1641241e| frintn s22, s8 -5341641e| frintn d19, d10 -248be14e| frintp v4.2d, v25.2d -35c2241e| frintp s21, s17 -6fc3641e| frintp d15, d27 -0940271e| frintx s9, s0 -4643671e| frintx d6, d26 -749aa14e| frintz v20.4s, v19.4s -8bc0251e| frintz s11, s4 -7cc1651e| frintz d28, d11 -dedbe17e| frsqrte d30, d30 -04daa16e| frsqrte v4.4s, v16.4s -cdfce45e| frsqrts d13, d6, d4 -d9fda04e| frsqrts v25.4s, v14.4s, v0.4s -c5c1211e| fsqrt s5, s14 -67c1611e| fsqrt d7, d11 -a4d6b14e| fsub v4.4s, v21.4s, v17.4s -6138351e| fsub s1, s3, s21 -be3b6a1e| fsub d30, d29, d10 -4d2f016e| mov v13.b[0], v26.b[5] -741e174e| mov v20.b[11], w19 -e170404c| ld1 {v1.16b}, [x7] -7aa9404c| ld1 {v26.4s, v27.4s}, [x11] -4b6d400c| ld1 {v11.1d-v13.1d}, [x10] -582b400c| ld1 {v24.2s-v27.2s}, [x26] -8f7cdf4c| ld1 {v15.2d}, [x4],#16 -0a76ce4c| ld1 {v10.8h}, [x16], x14 -2aa6df0c| ld1 {v10.4h, v11.4h}, [x17],#16 -35a7d70c| ld1 {v21.4h, v22.4h}, [x25], x23 -ae6ddf4c| ld1 {v14.2d-v16.2d}, [x13],#48 -b362d74c| ld1 {v19.16b-v21.16b}, [x21], x23 -6d22df0c| ld1 {v13.8b-v16.8b}, [x19],#32 -6722c90c| ld1 {v7.8b-v10.8b}, [x19], x9 -c71f404d| ld1 {v7.b}[15], [x30] -f55a400d| ld1 {v21.h}[3], [x23] -f080400d| ld1 {v16.s}[0], [x7] -ed84404d| ld1 {v13.d}[1], [x7] -fd0bdf4d| ld1 {v29.b}[10], [sp],#1 -c811dc0d| ld1 {v8.b}[4], [x14], x28 -6548cb4d| ld1 {v5.h}[5], [x3], x11 -9882df4d| ld1 {v24.s}[2], [x20],#4 -f482c74d| ld1 {v20.s}[2], [x23], x7 -0d87df0d| ld1 {v13.d}[0], [x24],#8 -1b85db0d| ld1 {v27.d}[0], [x8], x27 -58c3404d| ld1r {v24.16b}, [x26] -c0c6df4d| ld1r {v0.8h}, [x22],#2 -a6cec90d| ld1r {v6.1d}, [x21], x9 -e68a400c| ld2 {v6.2s, v7.2s}, [x23] -4007604d| ld2 {v0.b, v1.b}[9], [x26] -8c49604d| ld2 {v12.h, v13.h}[5], [x12] -4f92600d| ld2 {v15.s, v16.s}[1], [x18] -b186600d| ld2 {v17.d, v18.d}[0], [x21] -631aff0d| ld2 {v3.b, v4.b}[6], [x19],#2 -330ceb4d| ld2 {v19.b, v20.b}[11], [x1], x11 -454bff4d| ld2 {v5.h, v6.h}[5], [x26],#4 -0792ff0d| ld2 {v7.s, v8.s}[1], [x16],#8 -3b91fd0d| ld2 {v27.s, v28.s}[1], [x9], x29 -b086ff4d| ld2 {v16.d, v17.d}[1], [x21],#16 -da86e30d| ld2 {v26.d, v27.d}[0], [x22], x3 -e7cf604d| ld2r {v7.2d, v8.2d}, [sp] -5ac8ff0d| ld2r {v26.2s, v27.2s}, [x2],#8 -13c1f10d| ld2r {v19.8b, v20.8b}, [x8], x17 -0947404c| ld3 {v9.8h-v11.8h}, [x24] -8043df0c| ld3 {v0.8b-v2.8b}, [x28],#24 -6344d50c| ld3 {v3.4h-v5.4h}, [x3], x21 -663d400d| ld3 {v6.b-v8.b}[7], [x11] -5b6b400d| ld3 {v27.h-v29.h}[1], [x26] -02a0404d| ld3 {v2.s-v4.s}[2], [x0] -e1a5404d| ld3 {v1.d-v3.d}[1], [x15] -b53edf0d| ld3 {v21.b-v23.b}[7], [x21],#3 -f625d10d| ld3 {v22.b-v24.b}[1], [x15], x17 -3d7bda4d| ld3 {v29.h-v31.h}[7], [x25], x26 -6ea0df0d| ld3 {v14.s-v16.s}[0], [x3],#12 -d9a0c60d| ld3 {v25.s-v27.s}[0], [x6], x6 -b6a7df0d| ld3 {v22.d-v24.d}[0], [x29],#24 -dfa6d94d| ld3 {v31.d, v0.d, v1.d}[1], [x22], x25 -7de9404d| ld3r {v29.4s-v31.4s}, [x11] -2fe6df4d| ld3r {v15.8h-v17.8h}, [x17],#6 -cae7c84d| ld3r {v10.8h-v12.8h}, [x30], x8 -9a0b400c| ld4 {v26.2s-v29.2s}, [x28] -4b03df0c| ld4 {v11.8b-v14.8b}, [x26],#32 -8e0bcc4c| ld4 {v14.4s-v17.4s}, [x28], x12 -182c604d| ld4 {v24.b-v27.b}[11], [x0] -feb2600d| ld4 {v30.s, v31.s, v0.s, v1.s}[1], [x23] -59a4604d| ld4 {v25.d-v28.d}[1], [x2] -9b25ff4d| ld4 {v27.b-v30.b}[9], [x12],#4 -1f35e84d| ld4 {v31.b, v0.b, v1.b, v2.b}[13], [x8], x8 -91b2ff4d| ld4 {v17.s-v20.s}[3], [x20],#16 -88b3ed4d| ld4 {v8.s-v11.s}[3], [x28], x13 -9aa5ff4d| ld4 {v26.d-v29.d}[1], [x12],#32 -efa5e10d| ld4 {v15.d-v18.d}[0], [x15], x1 -07ed604d| ld4r {v7.2d-v10.2d}, [x8] -0defff0d| ld4r {v13.1d-v16.1d}, [x24],#32 -43e1f14d| ld4r {v3.16b-v6.16b}, [x10], x17 -136e682c| ldnp s19, s27, [x16,#-192] -cc67676c| ldnp d12, d25, [x30,#-400] -e6dd4eac| ldnp q6, q23, [x15,#464] -b7e9c22c| ldp s23, s26, [x13],#20 -92c3fe6c| ldp d18, d16, [x28],#-24 -f281e6ac| ldp q18, q0, [x15],#-816 -4f06cd2d| ldp s15, s1, [x18,#104]! -0f6fdc6d| ldp d15, d27, [x24,#448]! -170ccbad| ldp q23, q3, [x0,#352]! -71ea7a2d| ldp s17, s26, [x19,#-44] -c8816c6d| ldp d8, d0, [x14,#-312] -da6540ad| ldp q26, q25, [x14] -92064c3c| ldr b18, [x20],#192 -94d4577c| ldr h20, [x4],#-131 -39055fbc| ldr s25, [x9],#-16 -989551fc| ldr d24, [x12],#-231 -4764c23c| ldr q7, [x2],#38 -c15e4e3c| ldr b1, [x22,#229]! -c8ce487c| ldr h8, [x22,#140]! -ca5d5bbc| ldr s10, [x14,#-75]! -34fd56fc| ldr d20, [x9,#-145]! -bd0dd53c| ldr q29, [x13,#-176]! -ab65443d| ldr b11, [x13,#281] -cb57537d| ldr h11, [x30,#2474] -f2606fbd| ldr s18, [x7,#12128] -088b67fd| ldr d8, [x24,#20240] -0173ce3d| ldr q1, [x24,#14784] -ba112c1c| ldr s26, .+0x58234 -e489c25c| ldr d4, .+0xfffffffffff8513c -42458d9c| ldr q2, .+0xfffffffffff1a8a8 -3cdb753c| ldr b28, [x25,w21,sxtw #0] -726b733c| ldr b18, [x27,x19] -395b627c| ldr h25, [x25,w2,uxtw #1] -9b486cbc| ldr s27, [x4,w12,uxtw] -1cda7efc| ldr d28, [x16,w30,sxtw #3] -365bf33c| ldr q22, [x25,w19,uxtw #4] -43a1413c| ldur b3, [x10,#26] -c7034f7c| ldur h7, [x30,#240] -ad8350bc| ldur s13, [x29,#-248] -07a350fc| ldur d7, [x24,#-246] -0212c63c| ldur q2, [x16,#97] -6f0a7a2f| mla v15.4h, v19.4h, v10.h[7] -fe95294e| mla v30.16b, v15.16b, v9.16b -f24a4f2f| mls v18.4h, v23.4h, v15.h[4] -26947e2e| mls v6.4h, v1.4h, v30.4h -6606115e| mov b6, v19.b[8] -0866116e| mov v8.b[8], v16.b[12] -6e1d0f4e| mov v14.b[7], w11 -6d1fa10e| orr v13.8b, v27.8b, v1.8b -b93f1a0e| umov w25, v29.h[6] -74e7020f| movi v20.8b, #0x5b -0ff4040f| fmov v15.2s, #-2.000000000000000000e+00 -4c47060f| movi v12.2s, #0xda, lsl #16 -aa06064f| movi v10.4s, #0xd5 -8de4042f| movi d13, #0xff00000000ff0000 -b1e6046f| movi v17.2d, #0xff0000ff00ff00ff -609f214e| mul v0.16b, v27.16b, v1.16b -9f5a206e| mvn v31.16b, v20.16b -da65032f| mvni v26.2s, #0x6e, lsl #24 -4d36036f| bic v13.4s, #0x72, lsl #8 -4d66052f| mvni v13.2s, #0xb2, lsl #24 -a4bbe06e| neg v4.2d, v29.2d -bf5a206e| mvn v31.16b, v21.16b -2b1fe24e| orn v11.16b, v25.16b, v2.16b -22e4024f| movi v2.16b, #0x41 -3086050f| movi v16.4h, #0xb1 -051db80e| orr v5.8b, v8.8b, v24.8b -48e2290e| pmull v8.8h, v18.8b, v9.8b -7341652e| raddhn v19.4h, v11.4s, v5.4s -1b417f6e| raddhn2 v27.8h, v8.4s, v31.4s -e158606e| rbit v1.16b, v7.16b -f418200e| rev16 v20.8b, v7.8b -228d2a0f| rshrn v2.2s, v9.2d, #22 -a861aa2e| rsubhn v8.2s, v13.2d, v10.2d -7160786e| rsubhn2 v17.8h, v3.4s, v24.4s -cc7f314e| saba v12.16b, v30.16b, v17.16b -1350644e| sabal2 v19.4s, v0.8h, v4.8h -a1757d4e| sabd v1.8h, v13.8h, v29.8h -0971a00e| sabdl v9.2d, v8.2s, v0.2s -af70214e| sabdl2 v15.8h, v5.16b, v1.16b -626ba04e| sadalp v2.2d, v27.4s -1503374e| saddl2 v21.8h, v24.16b, v23.16b -592b204e| saddlp v25.8h, v26.16b -d813600e| saddw v24.4s, v30.4s, v0.4h -31e5210f| scvtf v17.2s, v9.2s, #31 -aeda215e| scvtf s14, s21 -f0e9021e| scvtf s16, w15, #6 -42b4421e| scvtf d2, w2, #19 -8b10029e| scvtf s11, x4, #60 -59e6429e| scvtf d25, x18, #7 -cf01221e| scvtf s15, w14 -2d03621e| scvtf d13, w25 -af00229e| scvtf s15, x5 -bf00629e| scvtf d31, x5 -2a02025e| sha1c q10, s17, v2.4s -8b0b285e| sha1h s11, s28 -11201f5e| sha1m q17, s0, v31.4s -f110115e| sha1p q17, s7, v17.4s -b732115e| sha1su0 v23.4s, v21.4s, v17.4s -cf18285e| sha1su1 v15.4s, v6.4s -2e520f5e| sha256h2 q14, q17, v15.4s -77401a5e| sha256h q23, q3, v26.4s -b92a285e| sha256su0 v25.4s, v21.4s -7e63175e| sha256su1 v30.4s, v27.4s, v23.4s -d504ab0e| shadd v21.2s, v6.2s, v11.2s -5a54734f| shl v26.2d, v2.2d, #51 -0638212e| shll v6.8h, v0.8b, #8 -a238216e| shll2 v2.8h, v5.16b, #8 -f5863e0f| shrn v21.2s, v23.2d, #2 -f187234f| shrn2 v17.4s, v31.2d, #29 -e124b04e| shsub v1.4s, v7.4s, v16.4s -3657252f| sli v22.2s, v25.2s, #5 -c266aa4e| smax v2.4s, v22.4s, v10.4s -2c6ca74e| smin v12.4s, v1.4s, v7.4s -4aae390e| sminp v10.8b, v18.8b, v25.8b -1a82ba0e| smlal v26.2d, v16.2s, v26.2s -2381ad4e| smlal2 v3.2d, v9.4s, v13.4s -0da17a4e| smlsl2 v13.4s, v8.8h, v26.8h -4f2e0d4e| smov x15, v18.b[6] -e4a0980f| smull v4.2d, v7.2s, v24.s[0] -51c2220e| smull v17.8h, v18.8b, v2.8b -01c26d4e| smull2 v1.4s, v16.8h, v13.8h -f978205e| sqabs b25, b7 -760cef5e| sqadd d22, d3, d15 -390c224e| sqadd v25.16b, v1.16b, v2.16b -5439455f| sqdmlal s20, h10, v5.h[4] -8391765e| sqdmlal s3, h12, h22 -c9907a4e| sqdmlal2 v9.4s, v6.8h, v26.8h -0b73445f| sqdmlsl s11, h24, v4.h[0] -8e728d0f| sqdmlsl v14.2d, v20.2s, v13.s[0] -fe787d4f| sqdmlsl2 v30.4s, v7.8h, v13.h[7] -bdb2b55e| sqdmlsl d29, s21, s21 -d0c9be4f| sqdmulh v16.4s, v14.4s, v30.s[3] -89b77c5e| sqdmulh h9, h28, h28 -c9bb515f| sqdmull s9, h30, v1.h[5] -5379e07e| sqneg d19, d10 -4b7aa06e| sqneg v11.4s, v18.4s -1bd1750f| sqrdmulh v27.4h, v8.4h, v5.h[3] -f55e755e| sqrshl h21, h23, h21 -ba5fbd4e| sqrshl v26.4s, v29.4s, v29.4s -ba9d1e0f| sqrshrn v26.4h, v13.4s, #2 -3d9c284f| sqrshrn2 v29.4s, v1.2d, #24 -8a8f2c6f| sqrshrun2 v10.4s, v28.2d, #20 -eb760b5f| sqshl b11, b23, #3 -4a77220f| sqshl v10.2s, v26.2s, #2 -6c4cfb5e| sqshl d12, d3, d27 -ad4eba4e| sqshl v13.4s, v21.4s, v26.4s -9364257f| sqshlu s19, s4, #5 -b267392f| sqshlu v18.2s, v29.2s, #25 -c085042f| mvni v0.4h, #0x8e -7584326f| sqshrun2 v21.4s, v3.2d, #14 -3a2fe25e| sqsub d26, d25, d2 -2c2ca34e| sqsub v12.4s, v1.4s, v3.4s -484ba15e| sqxtn s8, d26 -824b210e| sqxtn v2.8b, v28.8h -5b48214e| sqxtn2 v27.16b, v2.8h -e228a16e| sqxtun2 v2.4s, v7.2d -1c44416f| sri v28.2d, v0.2d, #63 -1e56eb5e| srshl d30, d16, d11 -bb56fe4e| srshl v27.2d, v21.2d, v30.2d -c6262d0f| srshr v6.2s, v22.2s, #19 -0c366c5f| srsra d12, d16, #20 -13376e4f| srsra v19.2d, v24.2d, #18 -7ba5040f| movi v27.4h, #0x8b, lsl #8 -9c076f5f| sshr d28, d28, #17 -2804434f| sshr v8.2d, v1.2d, #61 -b717535f| ssra d23, d29, #45 -c2160f0f| ssra v2.8b, v22.8b, #1 -8a333a4e| ssubw2 v10.8h, v28.8h, v26.16b -3a70000c| st1 {v26.8b}, [x1] -1bab004c| st1 {v27.4s, v28.4s}, [x24] -8d69004c| st1 {v13.4s-v15.4s}, [x12] -9c26004c| st1 {v28.8h-v31.8h}, [x20] -c87a9f0c| st1 {v8.2s}, [x22],#8 -5a7f800c| st1 {v26.1d}, [x26], x0 -eea99f4c| st1 {v14.4s, v15.4s}, [x15],#32 -11af9d4c| st1 {v17.2d, v18.2d}, [x24], x29 -ec689f0c| st1 {v12.2s-v14.2s}, [x7],#24 -8662900c| st1 {v6.8b-v8.8b}, [x20], x16 -0b249f4c| st1 {v11.8h-v14.8h}, [x0],#64 -6b2d8b4c| st1 {v11.2d-v14.2d}, [x11], x11 -3212004d| st1 {v18.b}[12], [x17] -3392004d| st1 {v19.s}[3], [x17] -0284000d| st1 {v2.d}[0], [x0] -340f9f0d| st1 {v20.b}[3], [x25],#1 -0d069a4d| st1 {v13.b}[9], [x16], x26 -2e51950d| st1 {v14.h}[2], [x9], x21 -3f839f0d| st1 {v31.s}[0], [x25],#4 -1492844d| st1 {v20.s}[3], [x16], x4 -dd869f4d| st1 {v29.d}[1], [x22],#8 -2e869b4d| st1 {v14.d}[1], [x17], x27 -1e87000c| st2 {v30.4h, v31.4h}, [x24] -07829f0c| st2 {v7.8b, v8.8b}, [x16],#16 -d38a884c| st2 {v19.4s, v20.4s}, [x22], x8 -541c204d| st2 {v20.b, v21.b}[15], [x2] -9180200d| st2 {v17.s, v18.s}[0], [x4] -2585204d| st2 {v5.d, v6.d}[1], [x9] -2f06bf4d| st2 {v15.b, v16.b}[9], [x17],#2 -3b08b44d| st2 {v27.b, v28.b}[10], [x1], x20 -805bbf0d| st2 {v0.h, v1.h}[3], [x28],#4 -fb80bf0d| st2 {v27.s, v28.s}[0], [x7],#8 -6290a80d| st2 {v2.s, v3.s}[1], [x3], x8 -b587bf4d| st2 {v21.d, v22.d}[1], [x29],#16 -2c84b64d| st2 {v12.d, v13.d}[1], [x1], x22 -22469f0c| st3 {v2.4h-v4.4h}, [x17],#24 -0e30004d| st3 {v14.b-v16.b}[12], [x0] -62a1004d| st3 {v2.s-v4.s}[2], [x11] -54a4000d| st3 {v20.d-v22.d}[0], [x2] -84259f4d| st3 {v4.b-v6.b}[9], [x12],#3 -693c9d4d| st3 {v9.b-v11.b}[15], [x3], x29 -5b709f0d| st3 {v27.h-v29.h}[2], [x2],#6 -e47a960d| st3 {v4.h-v6.h}[3], [x23], x22 -a0a39f0d| st3 {v0.s-v2.s}[0], [x29],#12 -37b0890d| st3 {v23.s-v25.s}[1], [x1], x9 -9aa59f4d| st3 {v26.d-v28.d}[1], [x12],#24 -26a5924d| st3 {v6.d-v8.d}[1], [x9], x18 -3e05000c| st4 {v30.4h, v31.4h, v0.4h, v1.4h}, [x9] -a8039f0c| st4 {v8.8b-v11.8b}, [x29],#32 -4126204d| st4 {v1.b-v4.b}[9], [x18] -3b71204d| st4 {v27.h-v30.h}[6], [x9] -f2b3204d| st4 {v18.s-v21.s}[3], [sp] -7fa4200d| st4 {v31.d, v0.d, v1.d, v2.d}[0], [x3] -562ebf4d| st4 {v22.b-v25.b}[11], [x18],#4 -563cae0d| st4 {v22.b-v25.b}[7], [x2], x14 -1271bf4d| st4 {v18.h-v21.h}[6], [x8],#8 -e7a1bf0d| st4 {v7.s-v10.s}[0], [x15],#16 -f3b2a30d| st4 {v19.s-v22.s}[1], [x23], x3 -eca5bf4d| st4 {v12.d-v15.d}[1], [x15],#32 -4ca7bb0d| st4 {v12.d-v15.d}[0], [x26], x27 -4f5b182c| stnp s15, s22, [x26,#192] -e05e0b6c| stnp d0, d23, [x23,#176] -77be2eac| stnp q23, q15, [x19,#-560] -bb3fa72c| stp s27, s15, [x29],#-200 -ef18bb6c| stp d15, d6, [x7],#-80 -777d84ac| stp q23, q31, [x11],#128 -d0f9952d| stp s16, s30, [x14,#172]! -125ca26d| stp d18, d23, [x0,#-480]! -33bbbfad| stp q19, q14, [x25,#-16]! -6ebb322d| stp s14, s14, [x27,#-108] -cb92096d| stp d11, d4, [x22,#152] -f2871dad| stp q18, q1, [sp,#944] -f676003c| str b22, [x23],#7 -50f50d7c| str h16, [x10],#223 -0d251ebc| str s13, [x8],#-30 -1f3510fc| str d31, [x8],#-253 -05a4883c| str q5, [x0],#138 -800e063c| str b0, [x20,#96]! -668d157c| str h6, [x11,#-168]! -1f3d11bc| str s31, [x8,#-237]! -71bf06fc| str d17, [x27,#107]! -f50c843c| str q21, [x7,#64]! -f186013d| str b17, [x23,#97] -f0e5357d| str h16, [x15,#6898] -938d3bbd| str s19, [x12,#15244] -aeb813fd| str d14, [x5,#10096] -2cc4943d| str q12, [x1,#21264] -e2f8263c| str b2, [x7,x6,sxtx #0] -1d79373c| str b29, [x8,x23,lsl #0] -bc70003c| stur b28, [x5,#7] -7190157c| stur h17, [x3,#-167] -073309bc| stur s7, [x24,#147] -298100fc| stur d9, [x9,#8] -e8c1843c| stur q8, [x15,#76] -3384266e| sub v19.16b, v1.16b, v6.16b -9163750e| subhn v17.4h, v28.4s, v21.4s -f3627d4e| subhn2 v19.8h, v23.4s, v29.4s -1939205e| suqadd b25, b8 -0638604e| suqadd v6.8h, v0.8h -81a4284f| sshll2 v1.2d, v4.4s, #8 -f920030e| tbl v25.8b, {v7.16b, v8.16b}, v3.8b -71400e4e| tbl v17.16b, {v3.16b-v5.16b}, v14.16b -bc630d4e| tbl v28.16b, {v29.16b, v30.16b, v31.16b, v0.16b}, v13.16b -6803030e| tbl v8.8b, {v27.16b}, v3.8b -4b32124e| tbx v11.16b, {v18.16b, v19.16b}, v18.16b -8f50170e| tbx v15.8b, {v4.16b-v6.16b}, v23.8b -5673020e| tbx v22.8b, {v26.16b-v29.16b}, v2.8b -f2130f4e| tbx v18.16b, {v31.16b}, v15.16b -9e29c34e| trn1 v30.2d, v12.2d, v3.2d -9b6bcf4e| trn2 v27.2d, v28.2d, v15.2d -157cb02e| uaba v21.2s, v0.2s, v16.2s -28513c2e| uabal v8.8h, v9.8b, v28.8b -f950a26e| uabal2 v25.2d, v7.4s, v2.4s -a776b26e| uabd v7.4s, v21.4s, v18.4s -da726b2e| uabdl v26.4s, v22.4h, v11.4h -9473746e| uabdl2 v20.4s, v28.8h, v20.8h -aa6b602e| uadalp v10.2s, v29.4h -ac013d2e| uaddl v12.8h, v13.8b, v29.8b -e500a86e| uaddl2 v5.2d, v7.4s, v8.4s -9c28a02e| uaddlp v28.1d, v4.2s -4c3a302e| uaddlv h12, v18.8b -2810b62e| uaddw v8.2d, v1.2d, v22.2s -f2132d6e| uaddw2 v18.8h, v31.8h, v13.16b -b3e67f7f| ucvtf d19, d21, #1 -ece5676f| ucvtf v12.2d, v15.2d, #25 -d7d8217e| ucvtf s23, s6 -cdd9212e| ucvtf v13.2s, v14.2s -5788031e| ucvtf s23, w2, #30 -c7ac431e| ucvtf d7, w6, #21 -0777039e| ucvtf s7, x24, #35 -e4f4439e| ucvtf d4, x7, #3 -9100231e| ucvtf s17, w4 -e202631e| ucvtf d2, w23 -3903239e| ucvtf s25, x25 -2001639e| ucvtf d0, x9 -2a07b76e| uhadd v10.4s, v25.4s, v23.4s -dc25372e| uhsub v28.8b, v14.8b, v23.8b -de646f2e| umax v30.4h, v6.4h, v15.4h -4ba6766e| umaxp v11.8h, v18.8h, v22.8h -e26db42e| umin v2.2s, v15.2s, v20.2s -a7ae712e| uminp v7.4h, v21.4h, v17.4h -afaa716e| uminv h15, v21.8h -42298c2f| umlal v2.2d, v10.2s, v12.s[2] -0a826e2e| umlal v10.4s, v16.4h, v14.4h -2681a06e| umlal2 v6.2d, v9.4s, v0.4s -2860bd6f| umlsl2 v8.2d, v1.4s, v29.s[1] -19a26b6e| umlsl2 v25.4s, v16.8h, v11.8h -8a3d140e| mov w10, v12.s[2] -22a1ba6f| umull2 v2.2d, v9.4s, v26.s[1] -15c0712e| umull v21.4s, v0.4h, v17.4h -2ec0296e| umull2 v14.8h, v1.16b, v9.16b -6e0fba7e| uqadd s14, s27, s26 -db0fe06e| uqadd v27.2d, v30.2d, v0.2d -535e6c7e| uqrshl h19, h18, h12 -7c5cfe6e| uqrshl v28.2d, v3.2d, v30.2d -9a9e327f| uqrshrn s26, d20, #14 -339f0b2f| uqrshrn v19.8b, v25.8h, #5 -7e77337f| uqshl s30, s27, #19 -8b4d657e| uqshl h11, h12, h5 -414c622e| uqshl v1.4h, v2.4h, v2.4h -95942b2f| uqshrn v21.2s, v4.2d, #21 -d396246f| uqshrn2 v19.4s, v22.2d, #28 -b22ff27e| uqsub d18, d29, d18 -b32e756e| uqsub v19.8h, v21.8h, v21.8h -0e4b616e| uqxtn2 v14.8h, v24.4s -ca16236e| urhadd v10.16b, v22.16b, v3.16b -1f57a26e| urshl v31.4s, v24.4s, v2.4s -8324777f| urshr d3, d4, #9 -37caa16e| ursqrte v23.4s, v17.4s -b735517f| ursra d23, d13, #47 -0a47f67e| ushl d10, d24, d22 -e7a71c2f| ushll v7.4s, v31.4h, #12 -9c38607e| usqadd h28, h4 -dc39206e| usqadd v28.16b, v14.16b -dc145d7f| usra d28, d6, #35 -d720752e| usubl v23.4s, v6.4h, v21.4h -2c236f6e| usubl2 v12.4s, v25.8h, v15.8h -ed32222e| usubw v13.8h, v23.8h, v2.8b -72332d6e| usubw2 v18.8h, v27.8h, v13.16b -655a1c4e| uzp2 v5.16b, v19.16b, v28.16b -972a210e| xtn v23.8b, v20.8h -5f2aa14e| xtn2 v31.4s, v18.2d -9a38910e| zip1 v26.2s, v4.2s, v17.2s -d979990e| zip2 v25.2s, v14.2s, v25.2s -41e5a454| b.ne .+0xfffffffffff49ca8 -ea1b543a| ccmn wzr, #0x14, #0xa, ne -681946ba| ccmn x11, #0x6, #0x8, ne -2410463a| ccmn w1, w6, #0x4, ne -6e134cba| ccmn x27, x12, #0xe, ne -ad194f7a| ccmp w13, #0xf, #0xd, ne -471b53fa| ccmp x26, #0x13, #0x7, ne -a210467a| ccmp w5, w6, #0x2, ne -ee1246fa| ccmp x23, x6, #0xe, ne -be149b1a| csinc w30, w5, w27, ne -c415819a| csinc x4, x14, x1, ne -0510955a| csinv w5, w0, w21, ne -c51093da| csinv x5, x6, x19, ne -12158e5a| csneg w18, w8, w14, ne -5c159cda| csneg x28, x10, x28, ne -c810941a| csel w8, w6, w20, ne -80128c9a| csel x0, x20, x12, ne -f6179f1a| cset w22, eq -f5179f9a| cset x21, eq -ec139f5a| csetm w12, eq -ee139fda| csetm x14, eq -4b17981a| csinc w11, w26, w24, ne -b515909a| csinc x21, x13, x16, ne -b613955a| csinv w22, w29, w21, ne -f8108bda| csinv x24, x7, x11, ne -a0149d5a| csneg w0, w5, w29, ne -6a1492da| csneg x10, x3, x18, ne -8f143c1e| fccmp s4, s28, #0xf, ne -0f167f1e| fccmp d16, d31, #0xf, ne -5214291e| fccmpe s2, s9, #0x2, ne -1516631e| fccmpe d16, d3, #0x5, ne -2b1d271e| fcsel s11, s9, s7, ne -731e611e| fcsel d19, d19, d1, ne -c2560e54| b.cs .+0x1cad8 -2d2b563a| ccmn w25, #0x16, #0xd, cs -6c2b55ba| ccmn x27, #0x15, #0xc, cs -2521493a| ccmn w9, w9, #0x5, cs -032040ba| ccmn x0, x0, #0x3, cs -ea2a5c7a| ccmp w23, #0x1c, #0xa, cs -8e2842fa| ccmp x4, #0x2, #0xe, cs -8e22427a| ccmp w20, w2, #0xe, cs -cd204dfa| ccmp x6, x13, #0xd, cs -2824931a| csinc w8, w1, w19, cs -a3279a9a| csinc x3, x29, x26, cs -5921945a| csinv w25, w10, w20, cs -bd2386da| csinv x29, x29, x6, cs -a124915a| csneg w1, w5, w17, cs -5b2787da| csneg x27, x26, x7, cs -91209f1a| csel w17, w4, wzr, cs -f921979a| csel x25, x15, x23, cs -e4279f1a| cset w4, cc -ea279f9a| cset x10, cc -fe239f5a| csetm w30, cc -ec239fda| csetm x12, cc -ee25971a| csinc w14, w15, w23, cs -b726859a| csinc x23, x21, x5, cs -4b22845a| csinv w11, w18, w4, cs -2b209eda| csinv x11, x1, x30, cs -6b269b5a| csneg w11, w19, w27, cs -192691da| csneg x25, x16, x17, cs -0226391e| fccmp s16, s25, #0x2, cs -07246d1e| fccmp d0, d13, #0x7, cs -9626241e| fccmpe s20, s4, #0x6, cs -de27601e| fccmpe d30, d0, #0xe, cs -7d2d271e| fcsel s29, s11, s7, cs -3e2e7a1e| fcsel d30, d17, d26, cs -43a4df54| b.cc .+0xfffffffffffbf488 -0739533a| ccmn w8, #0x13, #0x7, cc -673b4fba| ccmn x27, #0xf, #0x7, cc -e333583a| ccmn wzr, w24, #0x3, cc -83325aba| ccmn x20, x26, #0x3, cc -eb38517a| ccmp w7, #0x11, #0xb, cc -2c3955fa| ccmp x9, #0x15, #0xc, cc -6f324b7a| ccmp w19, w11, #0xf, cc -09314ffa| ccmp x8, x15, #0x9, cc -60349c1a| csinc w0, w3, w28, cc -8835949a| csinc x8, x12, x20, cc -bb31935a| csinv w27, w13, w19, cc -9f319dda| csinv xzr, x12, x29, cc -8837855a| csneg w8, w28, w5, cc -cd3490da| csneg x13, x6, x16, cc -b033901a| csel w16, w29, w16, cc -5e31969a| csel x30, x10, x22, cc -ec379f1a| cset w12, cs -ea379f9a| cset x10, cs -eb339f5a| csetm w11, cs -fd339fda| csetm x29, cs -9934941a| csinc w25, w4, w20, cc -fa36829a| csinc x26, x23, x2, cc -2730895a| csinv w7, w1, w9, cc -703094da| csinv x16, x3, x20, cc -f636935a| csneg w22, w23, w19, cc -ba3484da| csneg x26, x5, x4, cc -e3343e1e| fccmp s7, s30, #0x3, cc -ce366a1e| fccmp d22, d10, #0xe, cc -de37271e| fccmpe s30, s7, #0xe, cc -1935751e| fccmpe d8, d21, #0x9, cc -603f241e| fcsel s0, s27, s4, cc -653f761e| fcsel d5, d27, d22, cc -a4fa5354| b.mi .+0xa7f54 -a248483a| ccmn w5, #0x8, #0x2, mi -e2484eba| ccmn x7, #0xe, #0x2, mi -2841553a| ccmn w9, w21, #0x8, mi -6e4259ba| ccmn x19, x25, #0xe, mi -2048567a| ccmp w1, #0x16, #0x0, mi -454a5afa| ccmp x18, #0x1a, #0x5, mi -0343487a| ccmp w24, w8, #0x3, mi -49434bfa| ccmp x26, x11, #0x9, mi -d747991a| csinc w23, w30, w25, mi -9544919a| csinc x21, x4, x17, mi -76428c5a| csinv w22, w19, w12, mi -06418eda| csinv x6, x8, x14, mi -4d46975a| csneg w13, w18, w23, mi -d74491da| csneg x23, x6, x17, mi -0941941a| csel w9, w8, w20, mi -2d41839a| csel x13, x9, x3, mi -ef479f1a| cset w15, pl -e5479f9a| cset x5, pl -f0439f5a| csetm w16, pl -e2439fda| csetm x2, pl -2a46841a| csinc w10, w17, w4, mi -f1468b9a| csinc x17, x23, x11, mi -3441835a| csinv w20, w9, w3, mi -b5438cda| csinv x21, x29, x12, mi -ad45945a| csneg w13, w13, w20, mi -f54793da| csneg x21, xzr, x19, mi -c5473f1e| fccmp s30, s31, #0x5, mi -8947601e| fccmp d28, d0, #0x9, mi -5247331e| fccmpe s26, s19, #0x2, mi -b045761e| fccmpe d13, d22, #0x0, mi -b34d331e| fcsel s19, s13, s19, mi -3a4d6d1e| fcsel d26, d9, d13, mi -a5497054| b.pl .+0xe0934 -eb5a493a| ccmn w23, #0x9, #0xb, pl -0a5941ba| ccmn x8, #0x1, #0xa, pl -0452523a| ccmn w16, w18, #0x4, pl -e55053ba| ccmn x7, x19, #0x5, pl -a45b407a| ccmp w29, #0x0, #0x4, pl -ca5b4efa| ccmp x30, #0xe, #0xa, pl -ab514e7a| ccmp w13, w14, #0xb, pl -ce5349fa| ccmp x30, x9, #0xe, pl -8555971a| csinc w5, w12, w23, pl -4b569e9a| csinc x11, x18, x30, pl -90538f5a| csinv w16, w28, w15, pl -c3508bda| csinv x3, x6, x11, pl -1f55955a| csneg wzr, w8, w21, pl -52568eda| csneg x18, x18, x14, pl -a750851a| csel w7, w5, w5, pl -b252899a| csel x18, x21, x9, pl -eb579f1a| cset w11, mi -e6579f9a| cset x6, mi -fd539f5a| csetm w29, mi -e1539fda| csetm x1, mi -33579e1a| csinc w19, w25, w30, pl -b5558c9a| csinc x21, x13, x12, pl -ec53885a| csinv w12, wzr, w8, pl -ec5196da| csinv x12, x15, x22, pl -ae57945a| csneg w14, w29, w20, pl -64578bda| csneg x4, x27, x11, pl -2657241e| fccmp s25, s4, #0x6, pl -2357761e| fccmp d25, d22, #0x3, pl -f255361e| fccmpe s15, s22, #0x2, pl -3756781e| fccmpe d17, d24, #0x7, pl -985c3f1e| fcsel s24, s4, s31, pl -5b5d621e| fcsel d27, d10, d2, pl -c6d26454| b.vs .+0xc9a58 -6c6a4f3a| ccmn w19, #0xf, #0xc, vs -2f694cba| ccmn x9, #0xc, #0xf, vs -e962583a| ccmn w23, w24, #0x9, vs -80615fba| ccmn x12, xzr, #0x0, vs -4b6b497a| ccmp w26, #0x9, #0xb, vs -cc6a48fa| ccmp x22, #0x8, #0xc, vs -4e61567a| ccmp w10, w22, #0xe, vs -476054fa| ccmp x2, x20, #0x7, vs -c965911a| csinc w9, w14, w17, vs -41668f9a| csinc x1, x18, x15, vs -db608f5a| csinv w27, w6, w15, vs -896097da| csinv x9, x4, x23, vs -1867915a| csneg w24, w24, w17, vs -49678eda| csneg x9, x26, x14, vs -3162881a| csel w17, w17, w8, vs -db608f9a| csel x27, x6, x15, vs -f9679f1a| cset w25, vc -f9679f9a| cset x25, vc -f7639f5a| csetm w23, vc -e1639fda| csetm x1, vc -f4678a1a| csinc w20, wzr, w10, vs -3e65879a| csinc x30, x9, x7, vs -6c63975a| csinv w12, w27, w23, vs -806191da| csinv x0, x12, x17, vs -7f679f5a| csneg wzr, w27, wzr, vs -3b6488da| csneg x27, x1, x8, vs -0565301e| fccmp s8, s16, #0x5, vs -e266621e| fccmp d23, d2, #0x2, vs -b7653a1e| fccmpe s13, s26, #0x7, vs -d866791e| fccmpe d22, d25, #0x8, vs -326d3d1e| fcsel s18, s9, s29, vs -f66e7b1e| fcsel d22, d23, d27, vs -e774fd54| b.vc .+0xffffffffffffae9c -0479483a| ccmn w8, #0x8, #0x4, vc -897b56ba| ccmn x28, #0x16, #0x9, vc -8b70513a| ccmn w4, w17, #0xb, vc -ca7150ba| ccmn x14, x16, #0xa, vc -46794f7a| ccmp w10, #0xf, #0x6, vc -057948fa| ccmp x8, #0x8, #0x5, vc -0373417a| ccmp w24, w1, #0x3, vc -ca705ffa| ccmp x6, xzr, #0xa, vc -d3769f1a| csinc w19, w22, wzr, vc -1076899a| csinc x16, x16, x9, vc -c8718e5a| cinv w8, w14, vs -06729eda| csinv x6, x16, x30, vc -6076895a| csneg w0, w19, w9, vc -b87589da| csneg x24, x13, x9, vc -3b72891a| csel w27, w17, w9, vc -fd70899a| csel x29, x7, x9, vc -e3779f1a| cset w3, vs -f4779f9a| cset x20, vs -fc739f5a| csetm w28, vs -ea739fda| csetm x10, vs -ab75891a| csinc w11, w13, w9, vc -6177859a| csinc x1, x27, x5, vc -3272945a| csinv w18, w17, w20, vc -7a729dda| csinv x26, x19, x29, vc -b5779e5a| csneg w21, w29, w30, vc -fe748eda| csneg x30, x7, x14, vc -ed76231e| fccmp s23, s3, #0xd, vc -cf74791e| fccmp d6, d25, #0xf, vc -b4763e1e| fccmpe s21, s30, #0x4, vc -59766e1e| fccmpe d18, d14, #0x9, vc -ce7c271e| fcsel s14, s6, s7, vc -be7c651e| fcsel d30, d5, d5, vc -88f29d54| b.hi .+0xfffffffffff3be50 -8f8b513a| ccmn w28, #0x11, #0xf, hi -6f8b5cba| ccmn x27, #0x1c, #0xf, hi -8780463a| ccmn w4, w6, #0x7, hi -4f8348ba| ccmn x26, x8, #0xf, hi -48884d7a| ccmp w2, #0xd, #0x8, hi -088957fa| ccmp x8, #0x17, #0x8, hi -0180517a| ccmp w0, w17, #0x1, hi -ce805efa| ccmp x6, x30, #0xe, hi -1d868e1a| csinc w29, w16, w14, hi -0785889a| cinc x7, x8, ls -4782935a| csinv w7, w18, w19, hi -118197da| csinv x17, x8, x23, hi -00868a5a| csneg w0, w16, w10, hi -128585da| csneg x18, x8, x5, hi -4c808f1a| csel w12, w2, w15, hi -7783909a| csel x23, x27, x16, hi -e5879f1a| cset w5, ls -f3879f9a| cset x19, ls -f9839f5a| csetm w25, ls -eb839fda| csetm x11, ls -b3869e1a| csinc w19, w21, w30, hi -f086909a| csinc x16, x23, x16, hi -34839c5a| csinv w20, w25, w28, hi -ea8294da| csinv x10, x23, x20, hi -8e84895a| csneg w14, w4, w9, hi -c48695da| csneg x4, x22, x21, hi -cc84361e| fccmp s6, s22, #0xc, hi -8086781e| fccmp d20, d24, #0x0, hi -7187341e| fccmpe s27, s20, #0x1, hi -30867e1e| fccmpe d17, d30, #0x0, hi -b98e361e| fcsel s25, s21, s22, hi -2c8c651e| fcsel d12, d1, d5, hi -69888c54| b.ls .+0xfffffffffff1910c -0e9b523a| ccmn w24, #0x12, #0xe, ls -679854ba| ccmn x3, #0x14, #0x7, ls -0492563a| ccmn w16, w22, #0x4, ls -42924dba| ccmn x18, x13, #0x2, ls -2198417a| ccmp w1, #0x1, #0x1, ls -c89a54fa| ccmp x22, #0x14, #0x8, ls -0f905e7a| ccmp w0, w30, #0xf, ls -c59342fa| ccmp x30, x2, #0x5, ls -0d958c1a| csinc w13, w8, w12, ls -7596879a| csinc x21, x19, x7, ls -1791905a| csinv w23, w8, w16, ls -5e9186da| csinv x30, x10, x6, ls -23969e5a| csneg w3, w17, w30, ls -619493da| csneg x1, x3, x19, ls -b5918e1a| csel w21, w13, w14, ls -b393819a| csel x19, x29, x1, ls -f9979f1a| cset w25, hi -ee979f9a| cset x14, hi -eb939f5a| csetm w11, hi -ea939fda| csetm x10, hi -f497871a| csinc w20, wzr, w7, ls -c4949d9a| csinc x4, x6, x29, ls -e892895a| csinv w8, w23, w9, ls -6c908eda| csinv x12, x3, x14, ls -26949f5a| csneg w6, w1, wzr, ls -329498da| csneg x18, x1, x24, ls -81952d1e| fccmp s12, s13, #0x1, ls -60967f1e| fccmp d19, d31, #0x0, ls -1794321e| fccmpe s0, s18, #0x7, ls -3f97641e| fccmpe d25, d4, #0xf, ls -089c2d1e| fcsel s8, s0, s13, ls -699f631e| fcsel d9, d27, d3, ls -8afbfe54| b.ge .+0xffffffffffffdf70 -44aa573a| ccmn w18, #0x17, #0x4, ge -00a84fba| ccmn x0, #0xf, #0x0, ge -c9a04d3a| ccmn w6, w13, #0x9, ge -88a041ba| ccmn x4, x1, #0x8, ge -caaa467a| ccmp w22, #0x6, #0xa, ge -85a85cfa| ccmp x4, #0x1c, #0x5, ge -47a35f7a| ccmp w26, wzr, #0x7, ge -0aa34dfa| ccmp x24, x13, #0xa, ge -dea7981a| csinc w30, w30, w24, ge -c6a5909a| csinc x6, x14, x16, ge -8aa1965a| csinv w10, w12, w22, ge -e3a392da| csinv x3, xzr, x18, ge -20a5845a| csneg w0, w9, w4, ge -fba694da| csneg x27, x23, x20, ge -faa1851a| csel w26, w15, w5, ge -25a3959a| csel x5, x25, x21, ge -e2a79f1a| cset w2, lt -fda79f9a| cset x29, lt -eea39f5a| csetm w14, lt -e2a39fda| csetm x2, lt -efa6951a| csinc w15, w23, w21, ge -4ca69e9a| csinc x12, x18, x30, ge -22a2885a| csinv w2, w17, w8, ge -53a089da| csinv x19, x2, x9, ge -f9a6875a| csneg w25, w23, w7, ge -c9a795da| csneg x9, x30, x21, ge -24a73e1e| fccmp s25, s30, #0x4, ge -6da5651e| fccmp d11, d5, #0xd, ge -bda52e1e| fccmpe s13, s14, #0xd, ge -f6a7651e| fccmpe d31, d5, #0x6, ge -e3ac251e| fcsel s3, s7, s5, ge -b3ae781e| fcsel d19, d21, d24, ge -ab621754| b.lt .+0x2ec54 -e1b84c3a| ccmn w7, #0xc, #0x1, lt -89ba4eba| ccmn x20, #0xe, #0x9, lt -88b14a3a| ccmn w12, w10, #0x8, lt -89b145ba| ccmn x12, x5, #0x9, lt -47b9547a| ccmp w10, #0x14, #0x7, lt -07b95bfa| ccmp x8, #0x1b, #0x7, lt -4ab2407a| ccmp w18, w0, #0xa, lt -8ab144fa| ccmp x12, x4, #0xa, lt -79b5821a| csinc w25, w11, w2, lt -8bb4919a| csinc x11, x4, x17, lt -c9b19f5a| csinv w9, w14, wzr, lt -10b28bda| csinv x16, x16, x11, lt -d8b4925a| csneg w24, w6, w18, lt -3ab69fda| csneg x26, x17, xzr, lt -2cb3841a| csel w12, w25, w4, lt -77b0969a| csel x23, x3, x22, lt -e2b79f1a| cset w2, ge -e9b79f9a| cset x9, ge -f4b39f5a| csetm w20, ge -f2b39fda| csetm x18, ge -87b59a1a| csinc w7, w12, w26, lt -70b69c9a| csinc x16, x19, x28, lt -17b08f5a| csinv w23, w0, w15, lt -cab288da| csinv x10, x22, x8, lt -bab7905a| csneg w26, w29, w16, lt -08b796da| csneg x8, x24, x22, lt -2eb73e1e| fccmp s25, s30, #0xe, lt -86b7671e| fccmp d28, d7, #0x6, lt -f0b6211e| fccmpe s23, s1, #0x0, lt -b2b76b1e| fccmpe d29, d11, #0x2, lt -e8bf241e| fcsel s8, s31, s4, lt -9ebd7d1e| fcsel d30, d12, d29, lt -cc87d354| b.gt .+0xfffffffffffa70f8 -43c8563a| ccmn w2, #0x16, #0x3, gt -c5c94dba| ccmn x14, #0xd, #0x5, gt -6fc0533a| ccmn w3, w19, #0xf, gt -06c351ba| ccmn x24, x17, #0x6, gt -c3c95c7a| ccmp w14, #0x1c, #0x3, gt -29cb52fa| ccmp x25, #0x12, #0x9, gt -8bc25a7a| ccmp w20, w26, #0xb, gt -45c14dfa| ccmp x10, x13, #0x5, gt -80c7841a| csinc w0, w28, w4, gt -40c4919a| csinc x0, x2, x17, gt -04c2805a| csinv w4, w16, w0, gt -55c086da| csinv x21, x2, x6, gt -32c7935a| csneg w18, w25, w19, gt -31c59fda| csneg x17, x9, xzr, gt -6cc2921a| csel w12, w19, w18, gt -37c08d9a| csel x23, x1, x13, gt -eec79f1a| cset w14, le -eec79f9a| cset x14, le -f4c39f5a| csetm w20, le -f6c39fda| csetm x22, le -31c5971a| csinc w17, w9, w23, gt -76c7899a| csinc x22, x27, x9, gt -bbc1805a| csinv w27, w13, w0, gt -e8c384da| csinv x8, xzr, x4, gt -83c5955a| csneg w3, w12, w21, gt -77c790da| csneg x23, x27, x16, gt -e9c5251e| fccmp s15, s5, #0x9, gt -a3c4671e| fccmp d5, d7, #0x3, gt -71c72e1e| fccmpe s27, s14, #0x1, gt -3dc4781e| fccmpe d1, d24, #0xd, gt -57cf3d1e| fcsel s23, s26, s29, gt -8fcc7e1e| fcsel d15, d4, d30, gt -8d1ec054| b.le .+0xfffffffffff803d0 -4bdb5b3a| ccmn w26, #0x1b, #0xb, le -47d94fba| ccmn x10, #0xf, #0x7, le -4dd1443a| ccmn w10, w4, #0xd, le -82d353ba| ccmn x28, x19, #0x2, le -e8d9527a| ccmp w15, #0x12, #0x8, le -00db45fa| ccmp x24, #0x5, #0x0, le -c5d1437a| ccmp w14, w3, #0x5, le -e4d041fa| ccmp x7, x1, #0x4, le -0bd6941a| csinc w11, w16, w20, le -57d6929a| cinc x23, x18, gt -3dd29a5a| csinv w29, w17, w26, le -ded085da| csinv x30, x6, x5, le -27d5985a| csneg w7, w9, w24, le -7fd59ada| csneg xzr, x11, x26, le -b7d0911a| csel w23, w5, w17, le -a4d3879a| csel x4, x29, x7, le -e6d79f1a| cset w6, gt -f1d79f9a| cset x17, gt -f3d39f5a| csetm w19, gt -f9d39fda| csetm x25, gt -42d78d1a| csinc w2, w26, w13, le -88d58a9a| csinc x8, x12, x10, le -ccd3805a| csinv w12, w30, w0, le -0fd085da| csinv x15, x0, x5, le -55d5975a| csneg w21, w10, w23, le -3fd699da| csneg xzr, x17, x25, le -60d4251e| fccmp s3, s5, #0x0, le -6dd6601e| fccmp d19, d0, #0xd, le -bdd5221e| fccmpe s13, s2, #0xd, le -f4d67d1e| fccmpe d23, d29, #0x4, le -0cdd381e| fcsel s12, s8, s24, le -70de7e1e| fcsel d16, d19, d30, le -8e585454| b.al .+0xa8b10 -41eb483a| ccmn w26, #0x8, #0x1, al -8aeb42ba| ccmn x28, #0x2, #0xa, al -c8e3473a| ccmn w30, w7, #0x8, al -ade059ba| ccmn x5, x25, #0xd, al -67eb5b7a| ccmp w27, #0x1b, #0x7, al -05e849fa| ccmp x0, #0x9, #0x5, al -42e3407a| ccmp w26, w0, #0x2, al -03e053fa| ccmp x0, x19, #0x3, al -9ce4931a| csinc w28, w4, w19, al -8ee69d9a| csinc x14, x20, x29, al -68e0835a| csinv w8, w3, w3, al -20e381da| csinv x0, x25, x1, al -e0e58d5a| csneg w0, w15, w13, al -9ae589da| csneg x26, x12, x9, al -6ee0941a| csel w14, w3, w20, al -77e38a9a| csel x23, x27, x10, al -efe79f1a| csinc w15, wzr, wzr, al -e5e79f9a| csinc x5, xzr, xzr, al -f2e39f5a| csinv w18, wzr, wzr, al -fae39fda| csinv x26, xzr, xzr, al -ede7861a| csinc w13, wzr, w6, al -0ce58a9a| csinc x12, x8, x10, al -75e2835a| csinv w21, w19, w3, al -38e391da| csinv x24, x25, x17, al -fee4845a| csneg w30, w7, w4, al -09e49bda| csneg x9, x0, x27, al -a8e6271e| fccmp s21, s7, #0x8, al -ede67d1e| fccmp d23, d29, #0xd, al -bbe53b1e| fccmpe s13, s27, #0xb, al -70e6661e| fccmpe d19, d6, #0x0, al -01ee3b1e| fcsel s1, s16, s27, al -15ec651e| fcsel d21, d0, d5, al -4f462554| b.al .+0x4a8c8 -eef9493a| ccmn w15, #0x9, #0xe, al -88fa53ba| ccmn x20, #0x13, #0x8, al -c0f25f3a| ccmn w22, wzr, #0x0, al -c6f05cba| ccmn x6, x28, #0x6, al -45f84c7a| ccmp w2, #0xc, #0x5, al -a3fa4afa| ccmp x21, #0xa, #0x3, al -caf3517a| ccmp w30, w17, #0xa, al -81f055fa| ccmp x4, x21, #0x1, al -cbf69e1a| csinc w11, w22, w30, al -01f48e9a| csinc x1, x0, x14, al -61f1845a| csinv w1, w11, w4, al -11f397da| csinv x17, x24, x23, al -7bf69f5a| csneg w27, w19, wzr, al -b1f686da| csneg x17, x21, x6, al -69f39e1a| csel w9, w27, w30, al -79f2859a| csel x25, x19, x5, al -e1f79f1a| csinc w1, wzr, wzr, al -e6f79f9a| csinc x6, xzr, xzr, al -fcf39f5a| csinv w28, wzr, wzr, al -fbf39fda| csinv x27, xzr, xzr, al -2ef4831a| csinc w14, w1, w3, al -55f6859a| csinc x21, x18, x5, al -4ff0905a| csinv w15, w2, w16, al -81f393da| csinv x1, x28, x19, al -8bf68d5a| csneg w11, w20, w13, al -c2f48fda| csneg x2, x6, x15, al -e9f6391e| fccmp s23, s25, #0x9, al -27f46f1e| fccmp d1, d15, #0x7, al -72f6301e| fccmpe s19, s16, #0x2, al -37f57a1e| fccmpe d9, d26, #0x7, al -fcfe3a1e| fcsel s28, s23, s26, al -80fd701e| fcsel d0, d12, d16, al -40946454| b.eq .+0xc9288 -8b09473a| ccmn w12, #0x7, #0xb, eq -c50a5eba| ccmn x22, #0x1e, #0x5, eq -05005a3a| ccmn w0, w26, #0x5, eq -cf024bba| ccmn x22, x11, #0xf, eq -8a084f7a| ccmp w4, #0xf, #0xa, eq -e20a41fa| ccmp x23, #0x1, #0x2, eq -8c015f7a| ccmp w12, wzr, #0xc, eq -e4015cfa| ccmp x15, x28, #0x4, eq -42078e1a| csinc w2, w26, w14, eq -2005879a| csinc x0, x9, x7, eq -f003955a| csinv w16, wzr, w21, eq -dc019dda| csinv x28, x14, x29, eq -4607885a| csneg w6, w26, w8, eq -26069eda| csneg x6, x17, x30, eq -72018a1a| csel w18, w11, w10, eq -8003849a| csel x0, x28, x4, eq -f1079f1a| cset w17, ne -fb079f9a| cset x27, ne -ef039f5a| csetm w15, ne -e1039fda| csetm x1, ne -5307881a| csinc w19, w26, w8, eq -8a06969a| csinc x10, x20, x22, eq -ab00955a| csinv w11, w5, w21, eq -c3039bda| csinv x3, x30, x27, eq -8005875a| csneg w0, w12, w7, eq -740694da| csneg x20, x19, x20, eq -e207281e| fccmp s31, s8, #0x2, eq -2b056a1e| fccmp d9, d10, #0xb, eq -7e063f1e| fccmpe s19, s31, #0xe, eq -3c05671e| fccmpe d9, d7, #0xc, eq -830f271e| fcsel s3, s28, s7, eq -4d0d621e| fcsel d13, d10, d2, eq -bf2003d5| sevl -9f2003d5| sev -7f2003d5| wfi -5f2003d5| wfe -3f2003d5| yield -1f2003d5| nop -df4d03d5| msr daifset, #0xd -ff4d03d5| msr daifclr, #0xd -28d91b14| b .+0x6f64a0 -da6cb530| adr x26, .+0xfffffffffff6ad99 -15e5e514| b .+0x3979454 -ff4603d5| msr daifclr, #0x6 -df4803d5| msr daifset, #0x8 -bf4100d5| msr spsel, #0x1 -9f3f03d5| dsb sy -9f3e03d5| dsb st -9f3d03d5| dsb ld -9f3b03d5| dsb ish -9f3a03d5| dsb ishst -9f3903d5| dsb ishld -9f3703d5| dsb nsh -9f3603d5| dsb nshst -9f3503d5| dsb nshld -9f3303d5| dsb osh -9f3203d5| dsb oshst -9f3103d5| dsb oshld -ff4603d5| msr daifclr, #0x6 -df4803d5| msr daifset, #0x8 -bf4100d5| msr spsel, #0x1 -a3681b53| lsl w3, w5, #5 -47dc78d3| lsl x7, x2, #8 -0500a012| movn w5, #0x0, lsl #16 -0500e092| movn x5, #0x0, lsl #48 -0500a052| movz w5, #0x0, lsl #16 -0500a0d2| movz x5, #0x0, lsl #16 -cd5a206e| mvn v13.16b, v22.16b -cd5a202e| mvn v13.8b, v22.8b -743d050e| umov w20, v11.b[2] -743d0a0e| umov w20, v11.h[2] -743d0c0e| mov w20, v11.s[1] -743d084e| mov x20, v11.d[0] diff --git a/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/testdata/plan9cases.txt b/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/testdata/plan9cases.txt deleted file mode 100644 index 873de3db44..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/arm64/arm64asm/testdata/plan9cases.txt +++ /dev/null @@ -1,4564 +0,0 @@ -0a011f1a| ADCW ZR, R8, R10 -4c00009a| ADC R0, R2, R12 -a602093a| ADCSW R9, R21, R6 -d60217ba| ADCS R23, R22, R22 -0921250b| ADDW R5.UXTH, R8, R9 -ee9e288b| ADD R8.SXTB<<7, R23, R14 -23123011| ADDW $3076, R17, R3 -2ba32391| ADD $2280, R25, R11 -67158d0b| ADDW R13->5, R11, R7 -30da198b| ADD R25<<54, R17, R16 -a7e72c2b| ADDSW R12.SXTX<<1, R29, R7 -357338ab| ADDS R24.UXTX<<4, R25, R21 -6b147731| ADDSW $(3525<<12), R3, R11 -cd59872b| ADDSW R7->22, R14, R13 -e41f4eab| ADDS R14>>7, ZR, R4 -a2432412| ANDW $4026540031, R29, R2 -93910e92| AND $34903429696192636, R12, R19 -7a1ec98a| AND R9@>7, R19, R26 -1ff32972| TSTW $2863311530, R24 -458051f2| ANDS $-140737488289793, R2, R5 -af629a6a| ANDSW R26->24, R21, R15 -7ab0dfea| ANDS ZR@>44, R3, R26 -792bcc1a| ASRW R12, R27, R25 -872bce9a| ASR R14, R28, R7 -99ff4b93| ASR $11, R28, R25 -1628c91a| ASRW R9, R0, R22 -4e2acf9a| ASR R15, R18, R14 -4be5a454| BLT -186582(PC) -53257114| JMP 7415123(PC) -dbb557b3| BFXIL $23, R14, $23, R27 -70e861b3| BFXIL $33, R3, $26, R16 -88a75ab3| BFXIL $26, R28, $16, R8 -b03ce70a| BICW R7@>15, R5, R16 -9235ec8a| BIC R12@>13, R12, R18 -7450b96a| BICSW R25->20, R3, R20 -3730b3ea| BICS R19->12, R1, R23 -9b897797| CALL -8943205(PC) -e0013fd6| CALL (R15) -a0031fd6| JMP (R29) -e08c31d4| BRK $35943 -027eb435| CBNZW R2, -154640(PC) -c7eb42b5| CBNZ R7, 137054(PC) -8f1d4c34| CBZW R15, 155884(PC) -e1c5abb4| CBZ R1, -172497(PC) -4bfb543a| CCMNW AL, R26, $20, $11 -015b46ba| CCMN PL, R24, $6, $1 -8602463a| CCMNW EQ, R20, R6, $6 -c6d34cba| CCMN LE, R30, R12, $6 -a76b4f7a| CCMPW VS, R29, $15, $7 -e3d853fa| CCMP LE, R7, $19, $3 -4022467a| CCMPW HS, R18, R6, $0 -c7b346fa| CCMP LT, R30, R6, $7 -ee279b1a| CSINCW HS, ZR, R27, R14 -4174819a| CSINC VC, R2, R1, R1 -5100955a| CSINVW EQ, R2, R21, R17 -573093da| CSINV LO, R2, R19, R23 -5f3403d5| CLREX $4 -e615c05a| CLSW R15, R6 -ff15c0da| CLS R15, ZR -2e10c05a| CLZW R1, R14 -a912c0da| CLZ R21, R9 -ff11352b| CMNW R21.UXTB<<4, R15 -1f5220ab| CMN R0.UXTW<<4, R16 -ff02266b| CMPW R6.UXTB, R23 -5fb739eb| CMP R25.SXTH<<5, R26 -bfa73bf1| CMP $3817, R29 -7f5c47eb| CMP R7>>23, R3 -2e458e5a| CSNEGW MI, R9, R14, R14 -c3559cda| CSNEG PL, R14, R28, R3 -1041d11a| CRC32B R17, R8, R16 -bb46c31a| CRC32H R3, R21, R27 -c94bd61a| CRC32W R22, R30, R9 -8f4cd49a| CRC32X R20, R4, R15 -7653d21a| CRC32CB R18, R27, R22 -1454d51a| CRC32CH R21, R0, R20 -7c58c91a| CRC32CW R9, R3, R28 -185ccb9a| CRC32CX R11, R0, R24 -8c30941a| CSELW LO, R4, R20, R12 -0ea08c9a| CSEL GE, R0, R12, R14 -e3b79f1a| CSETW GE, R3 -fea79f9a| CSET LT, R30 -e5639f5a| CSETMW VC, R5 -e4739fda| CSETM VS, R4 -bad4981a| CSINCW LE, R5, R24, R26 -5167909a| CSINC VS, R26, R16, R17 -65e3955a| CSINVW AL, R27, R21, R5 -8e338bda| CSINV LO, R28, R11, R14 -0a269d5a| CSNEGW HS, R16, R29, R10 -ab1692da| CSNEG NE, R21, R18, R11 -418ea5d4| DCPS1 $11378 -6239a5d4| DCPS2 $10699 -e3ebabd4| DCPS3 $24415 -bf3a03d5| DMB $10 -e003bfd6| DRPS -9f3003d5| DSB $0 -c974354a| EONW R21<<29, R6, R9 -89b86eca| EON R14>>46, R4, R9 -76e343d2| EOR $-2287828610704211969, R27, R22 -536d8c4a| EORW R12->27, R10, R19 -d1ef1cca| EOR R28<<59, R30, R17 -e0039fd6| ERET -591d8813| EXTRW $7, R8, R10, R25 -888dd693| EXTR $35, R22, R12, R8 -bf2003d5| SEVL -df2003d5| HINT $6 -a0fc5fd4| HLT $65509 -df3103d5| ISB $1 -9dfddf88| LDARW (R12), R29 -76ffdfc8| LDAR (R27), R22 -36ffdf08| LDARB (R25), R22 -bcfcdf48| LDARH (R5), R28 -54c17f88| LDAXPW (R10), (R20, R16) -3eaf7fc8| LDAXP (R25), (R30, R11) -e2fd5f88| LDAXRW (R15), R2 -f5fd5fc8| LDAXR (R15), R21 -70fe5f08| LDAXRB (R19), R16 -bcfc5f48| LDAXRH (R5), R28 -ecff5928| LDNPW 204(RSP), ZR, R12 -852744a8| LDNP 64(R28), R9, R5 -1286d728| LDP.P 188(R16), (R18, R1) -7668e8a8| LDP.P -384(R3), (R22, R26) -6d8bc729| LDP.W 60(R27), (R13, R2) -1cadd1a9| LDP.W 280(R8), (R28, R11) -bf4e7e29| LDP -16(R21), (ZR, R19) -61695fa9| LDP 496(R11), (R1, R26) -4c00e668| LDPSW -208(R2), R0, R12 -85a0cb69| LDPSW 92(R4), R8, R5 -9b894d69| LDPSW 108(R12), R2, R27 -e9955ab8| MOVWU.P -87(R15), R9 -5c255df8| MOVD.P -46(R10), R28 -703c57b8| MOVWU.W -141(R3), R16 -1dac57f8| MOVD.W -134(R0), R29 -393c50b9| MOVWU 4156(R1), R25 -498d5cf9| MOVD 14616(R10), R9 -72fa72b8| MOVWU (R19)(R18.SXTX<<2), R18 -daeb66f8| MOVD (R30)(R6.SXTX), R26 -8ca74238| MOVBU.P 42(R28), R12 -4e5c5e38| MOVBU.W -27(R2), R14 -03936d39| MOVBU 2916(R24), R3 -577a6e38| MOVBU (R18)(R14), R23 -adb54678| MOVHU.P 107(R13), R13 -820f4c78| MOVHU.W 192(R28), R2 -92787579| MOVHU 6844(R4), R18 -4bd6c438| MOVBW.P 77(R18), R11 -fb478238| MOVB.P 36(RSP), R27 -4d7edc38| MOVBW.W -57(R18), R13 -18ee9438| MOVB.W -178(R16), R24 -16b9c639| MOVBW 430(R8), R22 -37958f39| MOVB 997(R9), R23 -af7ae238| MOVBW (R21)(R2), R15 -1568fa38| MOVBW (R0)(R26), R21 -744bbf38| MOVB (R27)(ZR.UXTW), R20 -f069a538| MOVB (R15)(R5), R16 -d9a6cd78| MOVHW.P 218(R22), R25 -ff368b78| MOVH.P 179(R23), ZR -5b8cc878| MOVHW.W 136(R2), R27 -361f9c78| MOVH.W -63(R25), R22 -359bec79| MOVHW 5708(R25), R21 -4d6c8079| MOVH 54(R2), R13 -9deae578| MOVHW (R20)(R5.SXTX), R29 -f2fab878| MOVH (R23)(R24.SXTX<<1), R18 -02669cb8| MOVW.P -58(R16), R2 -5c8e92b8| MOVW.W -216(R18), R28 -ea9e92b9| MOVW 4764(R23), R10 -49dabcb8| MOVW (R18)(R28.SXTW<<2), R9 -64285eb8| LDTRW -30(R3), R4 -6ab851f8| LDTR -229(R3), R10 -aa094f38| LDTRBW 240(R13), R10 -b7894e78| LDTRH 232(R13), R23 -85cadd38| LDTRSBW -36(R20), R5 -2db99838| LDTRSB -117(R9), R13 -7ef8ce78| LDTRSHW 239(R3), R30 -786a8978| LDTRSH 150(R19), R24 -c5eb81b8| LDTRSW 30(R30), R5 -a1f14bb8| LDURW 191(R13), R1 -c3425cf8| LDUR -60(R22), R3 -2e125038| LDURBW -255(R17), R14 -26004878| LDURHW 128(R1), R6 -c3e3cd38| LDURSBW 222(R30), R3 -27618938| LDURSB 150(R9), R7 -7c71db78| LDURSHW -73(R11), R28 -1d109e78| LDURSH -31(R0), R29 -d48084b8| LDURSW 72(R6), R20 -172f7f88| LDXPW (R24), (R23, R11) -10347fc8| LDXP (R0), (R16, R13) -fe7f5f88| LDXRW (RSP), R30 -6c7f5fc8| LDXR (R27), R12 -047c5f08| LDXRB (R0), R4 -9a7d5f48| LDXRH (R12), R26 -4f21cb1a| LSLW R11, R10, R15 -1523db9a| LSL R27, R24, R21 -81c74fd3| UBFX $15, R28, $35, R1 -c922c81a| LSLW R8, R22, R9 -fd22dc9a| LSL R28, R23, R29 -4226dd1a| LSRW R29, R18, R2 -a224ca9a| LSR R10, R5, R2 -707c0153| LSRW $1, R3, R16 -34fc4cd3| LSR $12, R1, R20 -6c24c91a| LSRW R9, R3, R12 -8527c89a| LSR R8, R28, R5 -ea36171b| MADDW R23, R13, R23, R10 -e47a0a9b| MADD R10, R30, R23, R4 -35fd001b| MNEGW R0, R9, R21 -77ff0e9b| MNEG R14, R27, R23 -38030011| ADDW $0, R25, R24 -37030091| ADD $0, R25, R23 -94b8ad12| MOVW $2453405695, R20 -fff29892| MOVD $-51096, ZR -d4adb252| MOVW $2507014144, R20 -8747e2d2| MOVD $1313925191285342208, R7 -f5132d32| ORRW $16252928, ZR, R21 -eb7f34b2| MOVD $-1, R11 -f503092a| MOVW R9, R21 -e7031eaa| MOVD R30, R7 -35e8c1f2| MOVK $(3905<<32), R21 -44629512| MOVW $4294923501, R4 -cc0dd392| MOVD $-167598213824513, R12 -cbfb9152| MOVW $36830, R11 -3d25ebd2| MOVD $6424666343420723200, R29 -e67a3fd5| MRS $31703, R6 -f9dd15d5| MSR R25, S2_5_C13_C13_7 -25840c1b| MSUBW R12, R1, R1, R5 -02ce1a9b| MSUB R26, R19, R16, R2 -b67c1a1b| MULW R26, R5, R22 -607c049b| MUL R4, R3, R0 -e97f6daa| MVN R13>>31, R9 -fe071f6b| NEGSW ZR<<1, R30 -f68f14eb| NEGS R20<<35, R22 -e8030d5a| NGCW R13, R8 -fe031eda| NGC R30, R30 -e5030a7a| NGCSW R10, R5 -f00318fa| NGCS R24, R16 -1f2003d5| NOP -032ee42a| ORNW R4@>11, R16, R3 -634cf6aa| ORN R22@>19, R3, R3 -f8492d32| ORRW $4294443071, R15, R24 -96f542b2| ORR $-3458764513820540929, R12, R22 -1c110d2a| ORRW R13<<4, R8, R28 -c65b1eaa| ORR R30<<22, R30, R6 -f300b2f9| PRFM 25600(R7), PSTL2STRM -2aa196d8| PRFM -215799(PC), PLIL2KEEP -2ad8bef8| PRFM (R1)(R30.SXTW<<3), PLIL2KEEP -c62184f8| PRFUM 66(R14), $6 -3601c05a| RBITW R9, R22 -6401c0da| RBIT R11, R4 -e0035fd6| RET ZR -0a09c05a| REVW R8, R10 -220cc0da| REV R1, R2 -b206c05a| REV16W R21, R18 -2407c0da| REV16 R25, R4 -7e0bc0da| REV32 R27, R30 -ae0ec0da| REV R21, R14 -336f8413| EXTRW $27, R4, R25, R19 -af47ca93| EXTR $17, R10, R29, R15 -bc2cdb1a| RORW R27, R5, R28 -e52fdd9a| ROR R29, ZR, R5 -832dc31a| RORW R3, R12, R3 -e22ec09a| ROR R0, R23, R2 -1801045a| SBCW R4, R8, R24 -5a0119da| SBC R25, R10, R26 -52021b7a| SBCSW R27, R18, R18 -250105fa| SBCS R5, R9, R5 -fc430b13| SBFXW $11, ZR, $6, R28 -a0574093| SBFX $0, R29, $22, R0 -8b3b7a93| SBFIZ $6, R28, $15, R11 -fc310513| SBFXW $5, R15, $8, R28 -fbdc4293| SBFX $2, R7, $54, R27 -c90dd61a| SDIVW R22, R14, R9 -a90ecd9a| SDIV R13, R21, R9 -9f2003d5| SEV -bf2003d5| SEVL -d27f229b| SMULL R2, R30, R18 -efff3a9b| SMNEGL R26, ZR, R15 -7d963f9b| SMSUBL ZR, R5, R19, R29 -b57e519b| SMULH R17, R21, R21 -a07c209b| SMULL R0, R5, R0 -d0fe9f88| STLRW R16, (R22) -03ff9fc8| STLR R3, (R24) -8bff9f08| STLRB R11, (R28) -f0fe9f48| STLRH R16, (R23) -c6ae3588| STLXPW (R6, R11), (R22), R21 -c6fa22c8| STLXP (R6, R30), (R22), R2 -affd0e88| STLXRW R15, (R13), R14 -67ff1cc8| STLXR R7, (R27), R28 -17ff1c08| STLXRB R23, (R24), R28 -7bfe0b48| STLXRH R27, (R19), R11 -2a8c0528| STNPW 44(R1), R3, R10 -67fc10a8| STNP 264(R3), ZR, R7 -5559bd28| STP.P (R21, R22), -24(R10) -166c96a8| STP.P (R22, R27), 352(R0) -3d4a8729| STP.W (R29, R18), 56(R17) -912f86a9| STP.W (R17, R11), 96(R28) -c40d3029| STP (R4, R3), -128(R14) -f73f39a9| STP (R23, R15), -112(RSP) -34441eb8| MOVW.P R20, -28(R1) -11f60bf8| MOVD.P R17, 191(R16) -c15d15b8| MOVW.W R1, -171(R14) -ae4d12f8| MOVD.W R14, -220(R13) -03ef39b9| MOVW R3, 14828(R24) -208228f9| MOVD R0, 20736(R17) -734823f8| MOVD R19, (R3)(R3.UXTW) -ffb41838| MOVB.P ZR, -117(R7) -bb0d1a38| MOVB.W R27, -96(R13) -b1612239| MOVB R17, 2200(R13) -92682038| MOVB R18, (R4)(R0) -81682638| MOVB R1, (R4)(R6) -87841b78| MOVH.P R7, -72(R4) -cc3d1878| MOVH.W R12, -125(R14) -53cf1c79| MOVH R19, 3686(R26) -63792d78| MOVH R3, (R11)(R13<<1) -9d7803b8| STTRW 55(R4), R29 -b9c807f8| STTR 124(R5), R25 -f04a1e38| STTRBW -28(R23), R16 -52990078| STTRHW 9(R10), R18 -152002b8| MOVW R21, 34(R0) -397217f8| MOVD R25, -137(R17) -8f320138| MOVB R15, 19(R20) -eb021b78| MOVH R11, -80(R23) -854a3f88| STXPW (R5, R18), (R20), ZR -d12620c8| STXP (R17, R9), (R22), R0 -537e0288| STXRW R19, (R18), R2 -af7d15c8| STXR R15, (R13), R21 -e97c1d08| STXRB R9, (R7), R29 -837d1b48| STXRH R3, (R12), R27 -f25e344b| SUBW R20.UXTW<<7, R23, R18 -3ac825cb| SUB R5.SXTW<<2, R1, R26 -e8f40ccb| SUB R12<<61, R7, R8 -a6ad226b| SUBSW R2.SXTH<<3, R13, R6 -647735eb| SUBS R21.UXTX<<5, R27, R4 -c770566b| SUBSW R22>>28, R6, R7 -d03c1aeb| SUBS R26<<15, R6, R16 -a17f03d4| SVC $7165 -991f0013| SXTBW R28, R25 -a91d4093| SXTB R13, R9 -083d0013| SXTHW R8, R8 -393e4093| SXTH R17, R25 -1b7c4093| SXTW R0, R27 -0c5b2cd5| SYSL $285440, R12 -3f0d0172| TSTW $2147483655, R9 -df6f7cf2| TST $4294967280, R30 -1f2f11ea| TST R17<<11, R24 -9ced71d3| UBFX $49, R12, $11, R28 -1cbb7fd3| UBFIZ $1, R24, $47, R28 -25e661d3| UBFX $33, R17, $25, R5 -af0adc1a| UDIVW R28, R21, R15 -550ac29a| UDIV R2, R18, R21 -9102b19b| UMADDL R17, R0, R20, R17 -41fea39b| UMNEGL R3, R18, R1 -87d8a39b| UMSUBL R3, R22, R4, R7 -987ed89b| UMULH R24, R20, R24 -d37eb29b| UMULL R18, R22, R19 -461c0053| UXTBW R2, R6 -f43c0053| UXTHW R7, R20 -5f2003d5| WFE -7f2003d5| WFI -3f2003d5| YIELD -e5bb200e| VABS V31.B8, V5.B8 -c9842d0e| VADD V13.B8, V6.B8, V9.B8 -f4bd394e| VADDP V25.B16, V15.B16, V20.B16 -b3b8b14e| VADDV V5.S4, V19 -cd5b284e| AESD V30.B16, V13.B16 -4b4b284e| AESE V26.B16, V11.B16 -2879284e| AESIMC V9.B16, V8.B16 -fe68284e| AESMC V7.B16, V30.B16 -f61e334e| VAND V19.B16, V23.B16, V22.B16 -88a4002f| VMVNI $(4<<8), V8.H4 -1877076f| VBIC $(248<<24), V24.S4 -0d1e6c0e| VBIC V12.B8, V16.B8, V13.B8 -b81ce26e| VBIF V2.B16, V5.B16, V24.B16 -381cbf2e| VBIT V31.B8, V1.B8, V24.B8 -cd1f6c6e| VBSL V12.B16, V30.B16, V13.B16 -8d48a00e| VCLS V4.S2, V13.S2 -324ba02e| VCLZ V25.S2, V18.S2 -c88f2b2e| VCMEQ V11.B8, V30.B8, V8.B8 -a799e05e| VCMEQ $0, V13, V7 -dc9be04e| VCMEQ $0, V30.D2, V28.D2 -623f2d4e| VCMGE V13.B16, V27.B16, V2.B16 -e889e06e| VCMGE $0, V15.D2, V8.D2 -cb37e55e| VCMGT V5, V30, V11 -8e37b00e| VCMGT V16.S2, V28.S2, V14.S2 -1a8be04e| VCMGT $0, V24.D2, V26.D2 -7f37eb7e| VCMHI V11, V27, V31 -333d356e| VCMHS V21.B16, V9.B16, V19.B16 -bd9ae07e| VCMLE $0, V21, V29 -8999602e| VCMLE $0, V12.H4, V9.H4 -aca9e05e| VCMLT $0, V13, V12 -7fa8204e| VCMLT $0, V3.B16, V31.B16 -588db20e| VCMTST V18.S2, V10.S2, V24.S2 -cc051d5e| VMOV V14.B[14], V12 -4c06050e| VDUP V18.B[2], V12.B8 -790c020e| VDUP R3, V25.H4 -391d286e| VEOR V8.B16, V9.B16, V25.B16 -4b30156e| VEXT $6, V21.B16, V2.B16, V11.B16 -44d6bf7e| FABD F31, F18, F4 -17fba00e| FABS V24.S2, V23.S2 -90c2201e| FABSS F20, F16 -62c2601e| FABSD F19, F2 -eeef3f7e| FACGE F31, F31, F14 -09efa07e| FACGT F0, F24, F9 -72edae6e| VFACGT V14.S4, V11.S4, V18.S4 -61d5394e| FADD V25.S4, V11.S4, V1.S4 -0d2a3d1e| FADDS F29, F16, F13 -4b296f1e| FADDD F15, F10, F11 -78d8307e| FADDP V3.S2, F24 -e7d7322e| VFADDP V18.S2, V31.S2, V7.S2 -e8253c1e| FCCMPS HS, F28, F15, $8 -e8857f1e| FCCMPD HI, F31, F15, $8 -5714291e| FCCMPES NE, F9, F2, $7 -b484631e| FCCMPED HI, F3, F5, $4 -3ce5685e| FCMEQ F8, F9, F28 -50e6214e| VFCMEQ V1.S4, V18.S4, V16.S4 -9ddae05e| FCMEQ $0, F20, F29 -b3e62b7e| FCMGE F11, F21, F19 -0ce4396e| VFCMGE V25.S4, V0.S4, V12.S4 -a6c9e07e| FCMGE $0, F13, F6 -ede6bd7e| FCMGT F29, F23, F13 -13e6ae2e| VFCMGT V14.S2, V16.S2, V19.S2 -4cc9e05e| FCMGT $0, F10, F12 -41cba04e| VFCMGT $0, V26.S4, V1.S4 -96d8e07e| FCMLE $0, F4, F22 -0be9a05e| FCMLT $0, F8, F11 -dfe9a04e| VFCMLT $0, V14.S4, V31.S4 -a023301e| FCMPS F16, F29 -68213e1e| FCMPS $(0.0), F11 -20236d1e| FCMPD F13, F25 -68216b1e| FCMPD $(0.0), F11 -3023351e| FCMPES F21, F25 -78203e1e| FCMPES $(0.0), F3 -b022721e| FCMPED F18, F21 -f8226f1e| FCMPED $(0.0), F23 -b54e271e| FCSELS MI, F21, F7, F21 -319f611e| FCSELD LS, F25, F1, F17 -2142e21e| FCVTHS F17, F1 -cfc3e21e| FCVTHD F30, F15 -01c1231e| FCVTSH F8, F1 -4fc0221e| FCVTSD F2, F15 -f9c0631e| FCVTDH F7, F25 -2b43621e| FCVTDS F25, F11 -f1c8615e| FCVTAS F7, F17 -ea01241e| FCVTASW F15, R10 -0c02249e| FCVTAS F16, R12 -e702641e| FCVTASW F23, R7 -f501649e| FCVTAS F15, R21 -45ca217e| FCVTAU F18, F5 -66c9212e| VFCVTAU V11.S2, V6.S2 -b302251e| FCVTAUW F21, R19 -e102259e| FCVTAU F23, R1 -5703651e| FCVTAUW F26, R23 -2c01659e| FCVTAU F9, R12 -2c7b210e| VFCVTL V25.H4, V12.S4 -f478214e| VFCVTL2 V7.H8, V20.S4 -d1b8615e| FCVTMS F6, F17 -a2ba614e| VFCVTMS V21.D2, V2.D2 -ee01301e| FCVTMSW F15, R14 -de01309e| FCVTMS F14, R30 -8401701e| FCVTMSW F12, R4 -c502709e| FCVTMS F22, R5 -44b8617e| FCVTMU F2, F4 -5601311e| FCVTMUW F10, R22 -4602319e| FCVTMU F18, R6 -1003711e| FCVTMUW F24, R16 -e602719e| FCVTMU F23, R6 -c16b210e| VFCVTN V30.S4, V1.H4 -4d6b614e| VFCVTN2 V26.D2, V13.S4 -95ab215e| FCVTNS F28, F21 -65a9614e| VFCVTNS V11.D2, V5.D2 -8a02201e| FCVTNSW F20, R10 -bc03209e| FCVTNS F29, R28 -fc01601e| FCVTNSW F15, R28 -9800609e| FCVTNS F4, R24 -b1aa617e| FCVTNU F21, F17 -80a9216e| VFCVTNU V12.S4, V0.S4 -3201211e| FCVTNUW F9, R18 -e101219e| FCVTNU F15, R1 -ae00611e| FCVTNUW F5, R14 -9503619e| FCVTNU F28, R21 -3faae15e| FCVTPS F17, F31 -c4a8e14e| VFCVTPS V6.D2, V4.D2 -ab01281e| FCVTPSW F13, R11 -5800289e| FCVTPS F2, R24 -9b02681e| FCVTPSW F20, R27 -de03689e| FCVTPS F30, R30 -d8aaa17e| FCVTPU F22, F24 -e203291e| FCVTPUW F31, R2 -5302299e| FCVTPU F18, R19 -5302691e| FCVTPUW F18, R19 -8501699e| FCVTPU F12, R5 -93ff735f| FCVTZS $13, F28, F19 -b7fd504f| FCVTZS $48, V13.D2, V23.D2 -7ebba15e| FCVTZSSS F27, F30 -d49f181e| FCVTZS $25, F30, R20 -538d189e| FCVTZS $29, F10, R19 -7e74589e| FCVTZS $35, F3, R30 -4300381e| FCVTZSSW F2, R3 -bc03389e| FCVTZSS F29, R28 -c702781e| FCVTZSDW F22, R7 -0401789e| FCVTZSD F8, R4 -d1ff2e7f| FCVTZU $18, F30, F17 -d0fd3b2f| FCVTZU $5, V14.S2, V16.S2 -70bae17e| FCVTZUDD F19, F16 -3ef6191e| FCVTZU $3, F17, R30 -cae7199e| FCVTZU $7, F30, R10 -cffb599e| FCVTZU $2, F30, R15 -e402391e| FCVTZUSW F23, R4 -1a03399e| FCVTZUS F24, R26 -0401791e| FCVTZUDW F8, R4 -c200799e| FCVTZUD F6, R2 -ebfe346e| FDIV V20.S4, V23.S4, V11.S4 -c918371e| FDIVS F23, F6, F9 -911a7f1e| FDIVD F31, F20, F17 -a81f0c1f| FMADDS F12, F7, F29, F8 -d0404a1f| FMADDD F10, F16, F6, F16 -7ff6324e| FMAX V18.S4, V19.S4, V31.S4 -b84b351e| FMAXS F21, F29, F24 -d64b621e| FMAXD F2, F30, F22 -016b241e| FMAXNMS F4, F24, F1 -5b69781e| FMAXNMD F24, F10, F27 -f1c8707e| FMAXNMP V7.D2, F17 -27c5306e| VFMAXNMP V16.S4, V9.S4, V7.S4 -aef8707e| FMAXP V5.D2, F14 -53f6202e| VFMAXP V0.S2, V18.S2, V19.S2 -78fb306e| FMAXV V27.S4, F24 -5af4ec4e| FMIN V12.D2, V2.D2, V26.D2 -505a3c1e| FMINS F28, F18, F16 -4858661e| FMIND F6, F2, F8 -a9c6e04e| FMINNM V0.D2, V21.D2, V9.D2 -987b311e| FMINNMS F17, F28, F24 -95796f1e| FMINNMD F15, F12, F21 -f5cbb07e| FMINNMP V31.S2, F21 -b0f8f07e| FMINP V5.D2, F16 -8bf5a42e| VFMINP V4.S2, V12.S2, V11.S2 -87cd384e| VFMLA V24.S4, V12.S4, V7.S4 -fd50db5f| FMLS V27.D[0], F7, F29 -d1ccb44e| VFMLS V20.S4, V6.S4, V17.S4 -ebf5064f| FMOV $-0.242188, V11.S4 -49f4056f| FMOV $-9., V9.D2 -0940201e| FMOVS F0, F9 -db43601e| FMOVD F30, F27 -a901271e| FMOVS R13, F9 -3702261e| FMOVS F17, R23 -4d02679e| FMOVD R18, F13 -9d02af9e| FMOV R20, V29.D[1] -ef03669e| FMOVD F31, R15 -7101ae9e| FMOV V11.D[1], R17 -0e103d1e| FMOVS $-0.75, F14 -1e50761e| FMOVD $-18., F30 -d2b4121f| FMSUBS F18, F13, F6, F18 -0a9c4c1f| FMSUBD F12, F7, F0, F10 -0d99b35f| FMULS V19.S[3], F8, F13 -a89b9b0f| FMUL V27.S[2], V29.S2, V8.S2 -75dc376e| FMUL V23.S4, V3.S4, V21.S4 -7909241e| FMULS F4, F11, F25 -d7096b1e| FMULD F11, F14, F23 -2999ab7f| FMULX V11.S[3], F9, F9 -35dd6d5e| FMULX F13, F9, F21 -c8dc284e| VFMULX V8.S4, V6.S4, V8.S4 -c043211e| FNEGS F30, F0 -4742611e| FNEGD F18, F7 -9c51251f| FNMADDS F5, F20, F12, F28 -e407771f| FNMADDD F23, F1, F31, F4 -fbfa3a1f| FNMSUBS F26, F30, F23, F27 -bbb0691f| FNMSUBD F9, F12, F5, F27 -6a8b3f1e| FNMULS F31, F27, F10 -1a8b751e| FNMULD F21, F24, F26 -57d8e15e| FRECPE F2, F23 -62dba14e| VFRECPE V27.S4, V2.S4 -81fd325e| FRECPS F18, F12, F1 -31fe224e| VFRECPS V2.S4, V17.S4, V17.S4 -ecf9e15e| FRECPX F15, F12 -c18b216e| FRINTA V30.S4, V1.S4 -0240261e| FRINTAS F0, F2 -8041661e| FRINTAD F12, F0 -c89ba12e| FRINTI V30.S2, V8.S2 -2ec2271e| FRINTIS F17, F14 -5cc0671e| FRINTID F2, F28 -3898210e| FRINTM V1.S2, V24.S2 -9843251e| FRINTMS F28, F24 -5b40651e| FRINTMD F2, F27 -2189614e| FRINTN V9.D2, V1.D2 -7e42241e| FRINTNS F19, F30 -5d40641e| FRINTND F2, F29 -85c3241e| FRINTPS F28, F5 -46c2641e| FRINTPD F18, F6 -c39b216e| FRINTX V30.S4, V3.S4 -a243271e| FRINTXS F29, F2 -1d41671e| FRINTXD F8, F29 -5499e14e| FRINTZ V10.D2, V20.D2 -92c2251e| FRINTZS F20, F18 -75c2651e| FRINTZD F19, F21 -ddd9e17e| FRSQRTE F14, F29 -60fff85e| FRSQRTS F24, F27, F0 -dafffb4e| VFRSQRTS V27.D2, V30.D2, V26.D2 -1ff9a12e| FSQRT V8.S2, V31.S2 -2dc3211e| FSQRTS F25, F13 -72c0611e| FSQRTD F3, F18 -7d3a3e1e| FSUBS F30, F19, F29 -3f38771e| FSUBD F23, F1, F31 -185e016e| VMOV V16.B[11], V24.B[0] -911d0d4e| VMOV R12, V17.B[6] -2877400c| VLD1 (R25), [V8.H4] -8ea8404c| VLD1 (R4), [V14.S4, V15.S4] -0f62404c| VLD1 (R16), [V15.B16, V16.B16, V17.B16] -0f27400c| VLD1 (R24), [V15.H4, V16.H4, V17.H4, V18.H4] -4c75df0c| VLD1.P 8(R10), [V12.H4] -2f7bd04c| VLD1.P (R25)(R16), [V15.S4] -eaaadf0c| VLD1.P 16(R23), [V10.S2, V11.S2] -eca7cc4c| VLD1.P (RSP)(R12), [V12.H8, V13.H8] -cd60df4c| VLD1.P 48(R6), [V13.B16, V14.B16, V15.B16] -9163df0c| VLD1.P 24(R28), [V17.B8, V18.B8, V19.B8] -152ddf4c| VLD1.P 64(R8), [V21.D2, V22.D2, V23.D2, V24.D2] -0725c04c| VLD1.P (R8)(R0), [V7.H8, V8.H8, V9.H8, V10.H8] -7c04404d| VLD1 (R3), V28.B[9] -6d49404d| VLD1 (R11), V13.H[5] -9e81400d| VLD1 (R12), V30.S[0] -d384404d| VLD1 (R6), V19.D[1] -b20ddf4d| VLD1.P 1(R13), V18.B[11] -f114cd4d| VLD1.P (R7)(R13), V17.B[13] -bb92df4d| VLD1.P 4(R21), V27.S[3] -a883d64d| VLD1.P (R29)(R22), V8.S[2] -f584df4d| VLD1.P 8(R7), V21.D[1] -0284c80d| VLD1.P (R0)(R8), V2.D[0] -91c3400d| VLD1R (R28), [V17.B8] -71c9df0d| VLD1R 4(R11), [V17.S2] -e7c4db0d| VLD1R (R7)(R27), [V7.H4] -b787404c| VLD2 (R29), [V23.H8, V24.H8] -1280df0c| VLD2 16(R0), [V18.B8, V19.B8] -2f88c10c| VLD2 (R1)(R1), [V15.S2, V16.S2] -a01e604d| LD2 (R21), [V0.B, V1.B][15] -eb82604d| LD2 (R23), [V11.S, V12.S][2] -f985600d| LD2 (R15), [V25.D, V26.D][0] -e315ff0d| LD2 2(R15), [V3.B, V4.B][5] -1c11f24d| LD2 (R8)(R18), [V28.B, V29.B][12] -f341ef4d| LD2 (R15)(R15), [V19.H, V20.H][4] -5a80ff4d| LD2 8(R2), [V26.S, V27.S][2] -d781fd0d| LD2 (R14)(R29), [V23.S, V24.S][0] -c885ff0d| LD2 16(R14), [V8.D, V9.D][0] -1286f34d| LD2 (R16)(R19), [V18.D, V19.D][1] -06c2600d| VLD2R (R16), [V6.B8, V7.B8] -95c7ff4d| VLD2R 4(R28), [V21.H8, V22.H8] -d4c1e14d| VLD2R (R14)(R1), [V20.B16, V21.B16] -eb4bdf4c| VLD3 48(RSP), [V11.S4, V12.S4, V13.S4] -ce4fc24c| VLD3 (R30)(R2), [V14.D2, V15.D2, V16.D2] -db23400d| LD3 (R30), [V27.B, V28.B, V29.B][0] -26b3400d| LD3 (R25), [V6.S, V7.S, V8.S][1] -37a4400d| LD3 (R1), [V23.D, V24.D, V25.D][0] -052edf4d| LD3 3(R16), [V5.B, V6.B, V7.B][11] -8c3ccd0d| LD3 (R4)(R13), [V12.B, V13.B, V14.B][7] -74b0df4d| LD3 12(R3), [V20.S, V21.S, V22.S][3] -b7b1c84d| LD3 (R13)(R8), [V23.S, V24.S, V25.S][3] -e6a5df4d| LD3 24(R15), [V6.D, V7.D, V8.D][1] -42a5c80d| LD3 (R10)(R8), [V2.D, V3.D, V4.D][0] -9ceb400d| VLD3R (R28), [V28.S2, V29.S2, V30.S2] -6aeadf4d| VLD3R 12(R19), [V10.S4, V11.S4, V12.S4] -65ebce4d| VLD3R (R27)(R14), [V5.S4, V6.S4, V7.S4] -ea05400c| VLD4 (R15), [V10.H4, V11.H4, V12.H4, V13.H4] -1f03df0c| VLD4 32(R24), [V31.B8, V0.B8, V1.B8, V2.B8] -ae09c90c| VLD4 (R13)(R9), [V14.S2, V15.S2, V16.S2, V17.S2] -fd3a604d| LD4 (R23), [V29.B, V30.B, V31.B, V0.B][14] -d8a0604d| LD4 (R6), [V24.S, V25.S, V26.S, V27.S][2] -62a4604d| LD4 (R3), [V2.D, V3.D, V4.D, V5.D][1] -712fff0d| LD4 4(R27), [V17.B, V18.B, V19.B, V20.B][3] -aa27f40d| LD4 (R29)(R20), [V10.B, V11.B, V12.B, V13.B][1] -be71ff4d| LD4 8(R13), [V30.H, V31.H, V0.H, V1.H][6] -e360ee4d| LD4 (R7)(R14), [V3.H, V4.H, V5.H, V6.H][4] -c0a0ff0d| LD4 16(R6), [V0.S, V1.S, V2.S, V3.S][0] -d3a3e00d| LD4 (R30)(R0), [V19.S, V20.S, V21.S, V22.S][0] -95a7ff0d| LD4 32(R28), [V21.D, V22.D, V23.D, V24.D][0] -32a6e14d| LD4 (R17)(R1), [V18.D, V19.D, V20.D, V21.D][1] -56e0604d| VLD4R (R2), [V22.B16, V23.B16, V24.B16, V25.B16] -dce7ff0d| VLD4R 8(R30), [V28.H4, V29.H4, V30.H4, V31.H4] -14e8ef0d| VLD4R (R0)(R15), [V20.S2, V21.S2, V22.S2, V23.S2] -7776732c| VLDNP -104(R19), V29, V23 -23dd746c| VLDNP -184(R9), V23, V3 -383e48ac| VLDNP 256(R17), V15, V24 -0d10c12c| LDP.P 8(R0), (V13, V4) -fe3ae66c| LDP.P -416(R23), (V30, V14) -f627f9ac| LDP.P -224(RSP), (V22, V9) -918cd82d| LDP.W 196(R4), (V17, V3) -986be46d| LDP.W -448(R28), (V24, V26) -ebd8f8ad| LDP.W -240(R7), (V11, V22) -3c905c2d| LDP 228(R1), (V28, V4) -5887536d| LDP 312(R26), (V24, V1) -08957cad| LDP -112(R8), (V8, V5) -c5e5543c| MOVD.P -178(R14), V5 -4ff5417c| MOVD.P 31(R10), V15 -72e54bbc| FMOVS.P 190(R11), F18 -16b55dfc| FMOVD.P -37(R8), F22 -9e24db3c| MOVD.P -78(R4), V30 -d20c503c| MOVD.W -256(R6), V18 -1f1c4d7c| MOVD.W 209(R0), V31 -2fbf4dbc| FMOVS.W 219(R25), F15 -a06c59fc| FMOVD.W -106(R5), F0 -886ddd3c| MOVD.W -42(R12), V8 -58f64e3d| MOVD 957(R18), V24 -f5c3547d| MOVD 2656(RSP), V21 -8e8a7bbd| FMOVS 15240(R20), F14 -8e3c7afd| FMOVD 29816(R4), F14 -f2aeff3d| MOVD 65200(R23), V18 -1d78793c| MOVD (R0)(R25), V29 -b8f15d3c| VLDUR -33(R13), V24 -95635c7c| VLDUR -58(R28), V21 -27d046bc| VLDUR 109(R1), V7 -21624efc| VLDUR 230(R17), V1 -6dd2d83c| VLDUR -115(R19), V13 -dc09be6f| VMLA V30.S[3], V14.S4, V28.S4 -eb97af4e| VMLA V15.S4, V31.S4, V11.S4 -0495722e| VMLS V18.H4, V8.H4, V4.H4 -21070a5e| VMOV V25.H[2], V1 -92471b6e| VMOV V28.B[8], V18.B[13] -7a1e134e| VMOV R19, V26.B[9] -761fa30e| VORR V3.B8, V27.B8, V22.B8 -f23d070e| VMOV V15.B[3], R18 -a5e6064f| VMOVI $213, V5.B16 -63c5064f| VMOVI $(203<<136), V3.S4 -bca7014f| VMOVI $(61<<8), V28.H8 -95e4040f| VMOVI $132, V21.B8 -fce4072f| VMOVI $-1099494850561, V28 -24e6036f| VMOVI $72057589742960895, V4.D2 -429d6a4e| VMUL V10.H8, V10.H8, V2.H8 -e558202e| VMVN V7.B8, V5.B8 -fe65012f| VMVNI $(47<<24), V30.S2 -2b16046f| VBIC $145, V11.S4 -7756016f| VBIC $(51<<16), V23.S4 -e159202e| VMVN V15.B8, V1.B8 -da1cf14e| VORN V17.B16, V6.B16, V26.B16 -ca04014f| VMOVI $38, V10.S4 -14a6020f| VMOVI $(80<<8), V20.H4 -2f1fbf0e| VORR V31.B8, V25.B8, V15.B8 -74e2f20e| VPMULL V18.D1, V19.D1, V20.Q1 -2740262e| VRADDHN V6.H8, V1.H8, V7.B8 -17412e6e| VRADDHN2 V14.H8, V8.H8, V23.B16 -da59602e| VRBIT V14.B8, V26.B8 -230a604e| VREV64 V17.H8, V3.H8 -178d210f| VRSHRN $31, V8.D2, V23.S2 -6b8d2c4f| VRSHRN2 $20, V11.D2, V11.S4 -b57c2a0e| VSABA V10.B8, V5.B8, V21.B8 -71533d0e| VSABAL V29.B8, V27.B8, V17.H8 -1c50774e| VSABAL2 V23.H8, V0.H8, V28.S4 -1974be4e| VSABD V30.S4, V0.S4, V25.S4 -6b71ad0e| VSABDL V13.S2, V11.S2, V11.D2 -5270324e| VSABDL2 V18.B16, V2.B16, V18.H8 -366b200e| VSADALP V25.B8, V22.H4 -1802680e| VSADDL V8.H4, V16.H4, V24.S4 -022b604e| VSADDLP V24.H8, V2.S4 -413ab04e| VSADDLV V18.S4, V1 -4013750e| VSADDW V21.H4, V26.S4, V0.S4 -4412744e| VSADDW2 V20.H8, V18.S4, V4.S4 -2ee6255f| SCVTF $27, F17, F14 -dce75f4f| SCVTF $33, V30.D2, V28.D2 -5bdb615e| SCVTFDD F26, F27 -3ad9210e| SCVTF V9.S2, V26.S2 -1ceb421e| SCVTF $6, R24, F28 -9dde029e| SCVTF $9, R20, F29 -57d1429e| SCVTF $12, R10, F23 -d600221e| SCVTFWS R6, F22 -c503621e| SCVTFWD R30, F5 -3303229e| SCVTFS R25, F19 -0003629e| SCVTFD R24, F0 -6f01075e| SHA1C V7.S4, V11, V15 -9308285e| SHA1H V4, V19 -b420105e| SHA1M V16.S4, V5, V20 -f4131f5e| SHA1P V31.S4, V31, V20 -dc311f5e| SHA1SU0 V31.S4, V14.S4, V28.S4 -bb1a285e| SHA1SU1 V21.S4, V27.S4 -2753075e| SHA256H2 V7.S4, V25, V7 -3141065e| SHA256H V6.S4, V9, V17 -172b285e| SHA256SU0 V24.S4, V23.S4 -bb621b5e| SHA256SU1 V27.S4, V21.S4, V27.S4 -7005644e| VSHADD V4.H8, V11.H8, V16.H8 -2d870e0f| VSHRN $2, V25.H8, V13.B8 -ac86024f| VMOVI $85, V12.H8 -1c26a50e| VSHSUB V5.S2, V16.S2, V28.S2 -db576b6f| VSLI $43, V30.D2, V27.D2 -c3652c4e| VSMAX V12.B16, V14.B16, V3.B16 -b5a7ab0e| VSMAXP V11.S2, V29.S2, V21.S2 -f1aeb34e| VSMINP V19.S4, V23.S4, V17.S4 -87a8b14e| VSMINV V4.S4, V7 -1e21bc4f| VSMLAL2 V28.S[1], V8.S4, V30.D2 -50a33a0e| VSMLSL V26.B8, V26.B8, V16.H8 -4e2d1a0e| SMOVW V10.H[6], R14 -9ba9b30f| VSMULL V19.S[3], V12.S2, V27.D2 -417a205e| VSQABS V18, V1 -9f78a04e| VSQABS V4.S4, V31.S4 -580d2e5e| VSQADD V14, V10, V24 -3d30764f| VSQDMLAL2 V6.H[3], V1.H8, V29.S4 -9591b25e| VSQDMLAL V18, V12, V21 -0d92670e| VSQDMLAL V7.H4, V16.H4, V13.S4 -90b1765e| VSQDMLSL V22, V12, V16 -83c2ad5f| VSQDMULH V13.S[1], V20, V3 -bbb7aa5e| VSQDMULH V10, V29, V27 -c8b99a5f| VSQDMULL V26.S[2], V14, V8 -75b3920f| VSQDMULL V18.S[0], V27.S2, V21.D2 -86d1b75e| VSQDMULL V23, V12, V6 -edd06f4e| VSQDMULL2 V15.H8, V7.H8, V13.S4 -0f7ae07e| VSQNEG V16, V15 -e87b602e| VSQNEG V31.H4, V8.H4 -ecb5a92e| VSQRDMULH V9.S2, V15.S2, V12.S2 -d75fba5e| VSQRSHL V26, V30, V23 -f75f324e| VSQRSHL V18.B16, V31.B16, V23.B16 -af9c114f| VSQRSHRN2 $15, V5.S4, V15.H8 -318d2f6f| VSQRSHRUN2 $17, V9.D2, V17.S4 -b3757c5f| VSQSHL $60, V13, V19 -0c776f4f| VSQSHL $47, V24.D2, V12.D2 -d84c2a5e| VSQSHL V10, V6, V24 -ae4e704e| VSQSHL V16.H8, V21.H8, V14.H8 -b566727f| VSQSHLU $50, V21, V21 -4566596f| VSQSHLU $25, V18.D2, V5.D2 -d595140f| VSQSHRN $12, V14.S4, V21.H4 -00940b4f| VSQSHRN2 $5, V0.H8, V0.B16 -5384352f| VSQSHRUN $11, V2.D2, V19.S2 -1a2e3d5e| VSQSUB V29, V16, V26 -b02e6b4e| VSQSUB V11.H8, V21.H8, V16.H8 -1249a15e| VSQXTN V8, V18 -eb49610e| VSQXTN V15.S4, V11.H4 -cb4a614e| VSQXTN2 V22.S4, V11.H8 -102b217e| VSQXTUN V24, V16 -492a212e| VSQXTUN V18.H8, V9.B8 -112a616e| VSQXTUN2 V16.S4, V17.H8 -6c16ae4e| VSRHADD V14.S4, V19.S4, V12.S4 -5946467f| VSRI $58, V18, V25 -21460a2f| VSRI $6, V17.B8, V1.B8 -9f56b10e| VSRSHL V17.S2, V20.S2, V31.S2 -e724635f| VSRSHR $29, V7, V7 -e8266b4f| VSRSHR $21, V23.D2, V8.D2 -2b37180f| VSRSRA $8, V25.H4, V11.H4 -1644f95e| VSSHL V25, V0, V22 -3644fc4e| VSSHL V28.D2, V1.D2, V22.D2 -d9a61f4f| VSSHLL2 $15, V22.H8, V25.S4 -9b075e5f| VSSHR $34, V28, V27 -2c044c4f| VSSHR $52, V1.D2, V12.D2 -d915324f| VSSRA $14, V14.S4, V25.S4 -de21260e| VSSUBL V6.B8, V14.B8, V30.H8 -c720254e| VSSUBL2 V5.B16, V6.B16, V7.H8 -9d33b90e| VSSUBW V25.S2, V28.D2, V29.D2 -7e71000c| VST1 [V30.B8], (R11) -cca6000c| VST1 [V12.H4, V13.H4], (R22) -5467000c| VST1 [V20.H4, V21.H4, V22.H4], (R26) -cc28004c| VST1 [V12.S4, V13.S4, V14.S4, V15.S4], (R6) -9e7e9f4c| VST1.P [V30.D2], 16(R20) -4b769d0c| VST1.P [V11.H4], (R18)(R29) -adaa9f0c| VST1.P [V13.S2, V14.S2], 16(R21) -bca7844c| VST1.P [V28.H8, V29.H8], (R29)(R4) -b5659f0c| VST1.P [V21.H4, V22.H4, V23.H4], 24(R13) -e669874c| VST1.P [V6.S4, V7.S4, V8.S4], (R15)(R7) -9b2a9f0c| VST1.P [V27.S2, V28.S2, V29.S2, V30.S2], 32(R20) -14278b0c| VST1.P [V20.H4, V21.H4, V22.H4, V23.H4], (R24)(R11) -d002004d| VST1 V16.B[8], (R22) -9780004d| VST1 V23.S[2], (R4) -7787004d| VST1 V23.D[1], (R27) -850d9f0d| VST1.P V5.B[3], 1(R12) -7b1f8f0d| VST1.P V27.B[7], (R27)(R15) -7a5a9f4d| VST1.P V26.H[7], 2(R19) -e14b9e4d| VST1.P V1.H[5], (RSP)(R30) -dd819f4d| VST1.P V29.S[2], 4(R14) -a281910d| VST1.P V2.S[0], (R13)(R17) -b2849f0d| VST1.P V18.D[0], 8(R5) -c484964d| VST1.P V4.D[1], (R6)(R22) -f686004c| VST2 (R23), [V22.H8, V23.H8] -2e869f0c| VST2 16(R17), [V14.H4, V15.H4] -d200200d| ST2 (R6), [V18.B, V19.B][0] -ab58200d| ST2 (R5), [V11.H, V12.H][3] -c491204d| ST2 (R14), [V4.S, V5.S][3] -5a85204d| ST2 (R10), [V26.D, V27.D][1] -f217bf0d| ST2 2(RSP), [V18.B, V19.B][5] -2b0ea04d| ST2 (R17)(R0), [V11.B, V12.B][11] -4042bf0d| ST2 4(R18), [V0.H, V1.H][0] -9342af4d| ST2 (R20)(R15), [V19.H, V20.H][4] -9b91bf4d| ST2 8(R12), [V27.S, V28.S][3] -7480a10d| ST2 (R3)(R1), [V20.S, V21.S][0] -c884bf0d| ST2 16(R6), [V8.D, V9.D][0] -ae86ac4d| ST2 (R21)(R12), [V14.D, V15.D][1] -614d004c| VST3 (R11), [V1.D2, V2.D2, V3.D2] -324b9f4c| VST3 48(R25), [V18.S4, V19.S4, V20.S4] -7340870c| VST3 (R3)(R7), [V19.B8, V20.B8, V21.B8] -ac24004d| ST3 (R5), [V12.B, V13.B, V14.B][9] -a161004d| ST3 (R13), [V1.H, V2.H, V3.H][4] -09b1004d| ST3 (R8), [V9.S, V10.S, V11.S][3] -78a7004d| ST3 (R27), [V24.D, V25.D, V26.D][1] -4f349f0d| ST3 3(R2), [V15.B, V16.B, V17.B][5] -643d840d| ST3 (R11)(R4), [V4.B, V5.B, V6.B][7] -48699f0d| ST3 6(R10), [V8.H, V9.H, V10.H][1] -85b19f4d| ST3 12(R12), [V5.S, V6.S, V7.S][3] -60a18a0d| ST3 (R11)(R10), [V0.S, V1.S, V2.S][0] -69a49f0d| ST3 24(R3), [V9.D, V10.D, V11.D][0] -ada7814d| ST3 (R29)(R1), [V13.D, V14.D, V15.D][1] -760c004c| VST4 (R3), [V22.D2, V23.D2, V24.D2, V25.D2] -ee0d9f4c| VST4 64(R15), [V14.D2, V15.D2, V16.D2, V17.D2] -7800970c| VST4 (R3)(R23), [V24.B8, V25.B8, V26.B8, V27.B8] -a221200d| ST4 (R13), [V2.B, V3.B, V4.B, V5.B][0] -9a69204d| ST4 (R12), [V26.H, V27.H, V28.H, V29.H][5] -02a1204d| ST4 (R8), [V2.S, V3.S, V4.S, V5.S][2] -3fa6200d| ST4 (R17), [V31.D, V0.D, V1.D, V2.D][0] -943abf0d| ST4 4(R20), [V20.B, V21.B, V22.B, V23.B][6] -bf26a60d| ST4 (R21)(R6), [V31.B, V0.B, V1.B, V2.B][1] -55b3bf4d| ST4 16(R26), [V21.S, V22.S, V23.S, V24.S][3] -dda1b04d| ST4 (R14)(R16), [V29.S, V30.S, V31.S, V0.S][2] -6aa5bf0d| ST4 32(R11), [V10.D, V11.D, V12.D, V13.D][0] -e7a7ac0d| ST4 (RSP)(R12), [V7.D, V8.D, V9.D, V10.D][0] -f9c9202c| VSTNP -252(R15), V18, V25 -18b8316c| VSTNP -232(R0), V14, V24 -409c1cac| VSTNP 912(R2), V7, V0 -73f0812c| STP.P (V19, V28), 12(R3) -28d0826c| STP.P (V8, V20), 40(R1) -9bf5bfac| STP.P (V27, V29), -16(R12) -885ead2d| STP.W (V8, V23), -152(R20) -b0de926d| STP.W (V16, V23), 296(R21) -713387ad| STP.W (V17, V12), 224(R27) -52130a2d| STP (V18, V4), 80(R26) -b63a236d| STP (V22, V14), -464(R21) -6d5424ad| STP (V13, V21), -896(R3) -afb60f3c| MOVD.P V15, 251(R21) -81e7077c| MOVD.P V1, 126(R28) -203713bc| FMOVS.P F0, -205(R25) -60c61ffc| FMOVD.P F0, -4(R19) -d256813c| MOVD.P V18, 21(R22) -ffce083c| MOVD.W V31, 140(R23) -6d3d017c| MOVD.W V13, 19(R11) -52ed01bc| FMOVS.W F18, 30(R10) -fafd11fc| FMOVD.W F26, -225(R15) -663e9b3c| MOVD.W V6, -77(R19) -7d0c393d| MOVD V29, 3651(R3) -8f50067d| MOVD V15, 808(R4) -94680dbd| FMOVS F20, 3432(R4) -b7673bfd| FMOVD F23, 30408(R29) -fed3a63d| MOVD V30, 39744(RSP) -8a6a243c| MOVD V10, (R20)(R4) -29493fbc| FMOVS F9, (R9)(ZR.UXTW) -8bd93bfc| FMOVD F11, (R12)(R27.SXTW<<3) -c768a93c| MOVD V7, (R6)(R9) -a7b00a3c| MOVD V7, 171(R5) -40e3107c| MOVD V0, -242(R26) -18911fbc| FMOVS F24, -7(R8) -fcc007fc| FMOVD F28, 124(R7) -db12893c| MOVD V27, 145(R22) -1686716e| VSUB V17.H8, V16.H8, V22.H8 -5362320e| VSUBHN V18.H8, V18.H8, V19.B8 -6163bf4e| VSUBHN2 V31.D2, V27.D2, V1.S4 -a73be05e| VSUQADD V29, V7 -21a4100f| VSXTL V1.H4, V1.S4 -8b23164e| VTBL V22.B16, [V28.B16, V29.B16], V11.B16 -3642120e| VTBL V18.B8, [V17.B16, V18.B16, V19.B16], V22.B8 -cf611f0e| VTBL V31.B8, [V14.B16, V15.B16, V16.B16, V17.B16], V15.B8 -0b020e4e| VTBL V14.B16, [V16.B16], V11.B16 -9830014e| VTBX V1.B16, [V4.B16, V5.B16], V24.B16 -1452044e| VTBX V4.B16, [V16.B16, V17.B16, V18.B16], V20.B16 -b4711a0e| VTBX V26.B8, [V13.B16, V14.B16, V15.B16, V16.B16], V20.B8 -f911140e| VTBX V20.B8, [V15.B16], V25.B8 -9f28500e| VTRN1 V16.H4, V4.H4, V31.H4 -2e69c64e| VTRN2 V6.D2, V9.D2, V14.D2 -c752756e| VUABAL2 V21.H8, V22.H8, V7.S4 -8675696e| VUABD V9.H8, V12.H8, V6.H8 -a973ab6e| VUABDL2 V11.S4, V29.S4, V9.D2 -fa006c2e| VUADDL V12.H4, V7.H4, V26.S4 -da00236e| VUADDL2 V3.B16, V6.B16, V26.H8 -ab3a306e| VUADDLV V21.B16, V11 -a312746e| VUADDW2 V20.H8, V21.S4, V3.S4 -cee55e7f| UCVTF $34, F14, F14 -8edb617e| UCVTFDD F28, F14 -ab8f431e| UCVTF $29, R29, F11 -68b3039e| UCVTF $20, R27, F8 -7686439e| UCVTF $31, R19, F22 -2a03231e| UCVTFWS R25, F10 -9f01631e| UCVTFWD R12, F31 -a800239e| UCVTFS R5, F8 -0302639e| UCVTFD R16, F3 -df65a42e| VUMAX V4.S2, V14.S2, V31.S2 -29ab702e| VUMAXV V25.H4, V9 -6f6e2e6e| VUMIN V14.B16, V19.B16, V15.B16 -fdada32e| VUMINP V3.S2, V15.S2, V29.S2 -07289a6f| VUMLAL2 V26.S[2], V0.S4, V7.D2 -aa80ad2e| VUMLAL V13.S2, V5.S2, V10.D2 -d66b462f| VUMLSL V6.H[4], V30.H4, V22.S4 -12a3b62e| VUMLSL V22.S2, V24.S2, V18.D2 -583e0d0e| VMOV V18.B[6], R24 -20c3b52e| VUMULL V21.S2, V25.S2, V0.D2 -20c2616e| VUMULL2 V1.H8, V17.H8, V0.S4 -2f0f6d7e| VUQADD V13, V25, V15 -a60c272e| VUQADD V7.B8, V5.B8, V6.B8 -5b5da27e| VUQRSHL V2, V10, V27 -195c786e| VUQRSHL V24.H8, V0.H8, V25.H8 -209e282f| VUQRSHRN $24, V17.D2, V0.S2 -e89e3b6f| VUQRSHRN2 $5, V23.D2, V8.S4 -4f75147f| VUQSHL $4, V10, V15 -d2767d6f| VUQSHL $61, V22.D2, V18.D2 -bb4cfe7e| VUQSHL V30, V5, V27 -794ea42e| VUQSHL V4.S2, V19.S2, V25.S2 -51960b7f| VUQSHRN $5, V18, V17 -642ce77e| VUQSUB V7, V3, V4 -6149617e| VUQXTN V11, V1 -4e48a12e| VUQXTN V2.D2, V14.S2 -9cc8a14e| VURECPE V4.S4, V28.S4 -2f15a52e| VURHADD V5.S2, V9.S2, V15.S2 -5757fb7e| VURSHL V27, V26, V23 -2756706e| VURSHL V16.H8, V17.H8, V7.H8 -a424487f| VURSHR $56, V5, V4 -b926796f| VURSHR $7, V21.D2, V25.D2 -1336076f| VBIC $(240<<8), V19.S4 -e347e06e| VUSHL V0.D2, V31.D2, V3.D2 -f7a5272f| VUSHLL $7, V15.S2, V23.D2 -9ba63d6f| VUSHLL2 $29, V20.S4, V27.D2 -d405737f| VUSHR $13, V14, V20 -3a05116f| VUSHR $15, V9.H8, V26.H8 -1d39607e| VUSQADD V8, V29 -0e39e06e| VUSQADD V8.D2, V14.D2 -8022b02e| VUSUBL V16.S2, V20.S2, V0.D2 -9a20786e| VUSUBL2 V24.H8, V4.H8, V26.S4 -df33692e| VUSUBW V9.H4, V30.S4, V31.S4 -92a5102f| VUXTL V12.H4, V18.S4 -0e19464e| VUZP1 V6.H8, V8.H8, V14.H8 -7629610e| VXTN V11.S4, V22.H4 -7338504e| VZIP1 V16.H8, V3.H8, V19.H8 -357bd64e| VZIP2 V22.D2, V25.D2, V21.D2 -63020f1a| ADCW R15, R19, R3 -1f03159a| ADC R21, R24, ZR -d300103a| ADCSW R16, R6, R19 -1b0010ba| ADCS R16, R0, R27 -dd133f0b| ADDW ZR.UXTB<<4, R30, R29 -89c42f8b| ADD R15.SXTW<<1, R4, R9 -4e242a11| ADDW $2697, R2, R14 -e1c12f2b| ADDSW R15.SXTW, R15, R1 -733421ab| ADDS R1.UXTH<<5, R3, R19 -0ccc5aab| ADDS R26>>51, R0, R12 -2e122612| ANDW $2080374784, R17, R14 -5e4c2992| AND $-36020000934328321, R2, R30 -2805410a| ANDW R1>>1, R9, R8 -ede1938a| AND R19->56, R15, R13 -e7c10f72| ANDSW $33686018, R15, R7 -23ed55f2| ANDS $-8246337208321, R9, R3 -e6935bea| ANDS R27>>36, ZR, R6 -0e2ac61a| ASRW R6, R16, R14 -802ad59a| ASR R21, R20, R0 -7cfd7793| ASR $55, R11, R28 -f028cd1a| ASRW R13, R7, R16 -132bd29a| ASR R18, R24, R19 -c2560e54| BCS 29366(PC) -83516b17| JMP -9743997(PC) -7a571233| BFXILW $18, R27, $4, R26 -71b858b3| BFXIL $24, R3, $23, R17 -c3964bb3| BFXIL $11, R22, $27, R3 -eb561233| BFXILW $18, R23, $4, R11 -063f5db3| BFI $35, R24, $16, R6 -0a337a0a| BICW R26>>12, R24, R10 -2a71e28a| BIC R2@>28, R9, R10 -c168bf6a| BICSW ZR->26, R6, R1 -d8bb3cea| BICS R28<<46, R30, R24 -82e81795| CALL 18344066(PC) -40033fd6| CALL (R26) -c0011fd6| JMP (R14) -00dd31d4| BRK $36584 -7267db35| CBNZW R18, -74949(PC) -e44c7fb5| CBNZ R4, 260711(PC) -9dc4c334| CBZW R29, -123356(PC) -376eceb4| CBZ R23, -101519(PC) -a6cb563a| CCMNW GT, R29, $22, $6 -87db55ba| CCMN LE, R28, $21, $7 -a042493a| CCMNW MI, R21, R9, $0 -6a0040ba| CCMN EQ, R3, R0, $10 -46bb5c7a| CCMPW LT, R26, $28, $6 -c72942fa| CCMP HS, R14, $2, $7 -cda1427a| CCMPW GE, R14, R2, $13 -a1314dfa| CCMP LO, R13, R13, $1 -8706931a| CSINCW EQ, R20, R19, R7 -3ae69a9a| CSINC AL, R17, R26, R26 -9e51945a| CSINVW PL, R12, R20, R30 -d5e386da| CSINV AL, R30, R6, R21 -5f3503d5| CLREX $5 -e515c05a| CLSW R15, R5 -a815c0da| CLS R13, R8 -4a12c05a| CLZW R18, R10 -3c10c0da| CLZ R1, R28 -ff70252b| CMNW R5.UXTX<<4, R7 -9fa133ab| CMN R19.SXTH, R12 -3f3a822b| CMNW R2->14, R17 -df1d44ab| CMN R4>>7, R14 -3f95386b| CMPW R24.SXTB<<5, R9 -9f653feb| CMP ZR.UXTX<<1, R12 -1626915a| CSNEGW HS, R16, R17, R22 -b4d587da| CSNEG LE, R13, R7, R20 -9841d41a| CRC32B R20, R12, R24 -ec45d01a| CRC32H R16, R15, R12 -8048ca1a| CRC32W R10, R4, R0 -d44ec19a| CRC32X R1, R22, R20 -1552d31a| CRC32CB R19, R16, R21 -4b54c71a| CRC32CH R7, R2, R11 -245ad41a| CRC32CW R20, R17, R4 -c35cc89a| CRC32CX R8, R6, R3 -14219f1a| CSELW HS, R8, ZR, R20 -9c73979a| CSEL VC, R28, R23, R28 -e7279f1a| CSETW LO, R7 -ec579f9a| CSET MI, R12 -e5f39f5a| CSINVW AL, ZR, ZR, R5 -e8639fda| CSETM VC, R8 -ea76971a| CINCW VS, R23, R10 -78a7859a| CSINC GE, R27, R5, R24 -b590845a| CSINVW LS, R5, R4, R21 -b4029eda| CSINV EQ, R21, R30, R20 -b3969b5a| CSNEGW LS, R21, R27, R19 -938591da| CSNEG HI, R12, R17, R19 -016ea8d4| DCPS1 $17264 -0275a4d4| DCPS2 $9128 -a3e9a6d4| DCPS3 $14157 -bf3903d5| DMB $9 -e003bfd6| DRPS -9f3e03d5| DSB $14 -50b1a0ca| EON R0->44, R10, R16 -c0b02f52| EORW $1073627134, R6, R0 -4b0c1ed2| EOR $257698037820, R2, R11 -693c074a| EORW R7<<15, R3, R9 -113e1aca| EOR R26<<15, R16, R17 -e0039fd6| ERET -fef8c693| EXTR $62, R6, R7, R30 -3f2003d5| YIELD -3f2403d5| HINT $33 -c0425ad4| HLT $53782 -df3003d5| ISB $0 -f7fddf88| LDARW (R15), R23 -96fedfc8| LDAR (R20), R22 -11fedf08| LDARB (R16), R17 -c2fedf48| LDARH (R22), R2 -2d927f88| LDAXPW (R17), (R13, R4) -198f7fc8| LDAXP (R24), (R25, R3) -46ff5f88| LDAXRW (R26), R6 -81fe5fc8| LDAXR (R20), R1 -86fe5f08| LDAXRB (R20), R6 -78ff5f48| LDAXRH (R27), R24 -35864a28| LDNPW 84(R17), R1, R21 -6da05fa8| LDNP 504(R3), R8, R13 -a8f9f428| LDP.P -92(R13), (R8, R30) -b749e3a8| LDP.P -464(R13), (R23, R18) -bdedd929| LDP.W 204(R13), (R29, R27) -c8e5c6a9| LDP.W 104(R14), (R8, R25) -c0857f29| LDP -4(R14), (R0, R1) -388a6ca9| LDP -312(R17), (R24, R2) -086be468| LDPSW -224(R24), R26, R8 -d107d269| LDPSW 144(R30), R1, R17 -738e4e69| LDPSW 116(R19), R3, R19 -6ee55fb8| MOVWU.P -2(R11), R14 -233459f8| MOVD.P -109(R1), R3 -919f44b8| MOVWU.W 73(R28), R17 -acdd45f8| MOVD.W 93(R13), R12 -e1cd51b9| MOVWU 4556(R15), R1 -95e27bf9| MOVD 30656(R20), R21 -0c554b38| MOVBU.P 181(R8), R12 -054f5938| MOVBU.W -108(R24), R5 -1f206539| MOVBU 2376(R0), ZR -73796a38| MOVBU (R11)(R10), R19 -a8b74f78| MOVHU.P 251(R29), R8 -021e5e78| MOVHU.W -31(R16), R2 -ec126b79| MOVHU 5512(R23), R12 -fc5a6178| MOVHU (R23)(R1.UXTW<<1), R28 -eaf6c238| MOVBW.P 47(R23), R10 -87679838| MOVB.P -122(R28), R7 -567fdb38| MOVBW.W -73(R26), R22 -3b2e8138| MOVB.W 18(R17), R27 -7d74c039| MOVBW 29(R3), R29 -7d1f8539| MOVB 327(R27), R29 -225bff38| MOVBW (R25)(ZR.UXTW), R2 -6a7bed38| MOVBW (R27)(R13), R10 -0f69b538| MOVB (R8)(R21), R15 -c796cc78| MOVHW.P 201(R22), R7 -50268e78| MOVH.P 226(R18), R16 -229ddb78| MOVHW.W -71(R9), R2 -0f4f9178| MOVH.W -236(R24), R15 -59ecc379| MOVHW 502(R2), R25 -83d49679| MOVH 2922(R4), R3 -986be878| MOVHW (R28)(R8), R24 -cad8bf78| MOVH (R6)(ZR.SXTW<<1), R10 -6b4693b8| MOVW.P -204(R19), R11 -cb9e81b8| MOVW.W 25(R22), R11 -280d9eb9| MOVW 7692(R9), R8 -1a68b8b8| MOVW (R0)(R24), R26 -35b955b8| LDTRW -165(R9), R21 -658b57f8| LDTR -136(R27), R5 -b3594038| LDTRBW 5(R13), R19 -5ac95d78| LDTRH -36(R10), R26 -2c3ade38| LDTRSBW -29(R17), R12 -4de99038| LDTRSB -242(R10), R13 -e178c378| LDTRSHW 55(R7), R1 -a77a8778| LDTRSH 119(R21), R7 -cde982b8| LDTRSW 46(R14), R13 -04d15bb8| LDURW -67(R8), R4 -02a256f8| LDUR -150(R16), R2 -97405438| LDURBW -188(R4), R23 -99b14b78| LDURHW 187(R12), R25 -f9a1cf38| LDURSBW 250(R15), R25 -c0218c38| LDURSB 194(R14), R0 -5790d278| LDURSHW -215(R2), R23 -a3808278| LDURSH 40(R5), R3 -a9b08fb8| LDURSW 251(R5), R9 -98217f88| LDXPW (R12), (R24, R8) -4d6a7fc8| LDXP (R18), (R13, R26) -9c7e5f88| LDXRW (R20), R28 -0e7c5fc8| LDXR (R0), R14 -507c5f08| LDXRB (R2), R16 -ea7f5f48| LDXRH (RSP), R10 -5523dd1a| LSLW R29, R26, R21 -9721ca9a| LSL R10, R12, R23 -75665bd3| UBFIZ $37, R19, $26, R21 -0a20df1a| LSLW ZR, R0, R10 -5222c99a| LSL R9, R18, R18 -5124df1a| LSRW ZR, R2, R17 -6b26d69a| LSR R22, R19, R11 -9a7c0753| LSRW $7, R4, R26 -7bfd53d3| LSR $19, R11, R27 -5f26d91a| LSRW R25, R18, ZR -3625d89a| LSR R24, R9, R22 -9d76001b| MADDW R0, R29, R20, R29 -822f0e9b| MADD R14, R11, R28, R2 -e8fe101b| MNEGW R16, R23, R8 -88fc099b| MNEG R9, R4, R8 -dd030011| ADDW $0, R30, R29 -db010091| ADD $0, R14, R27 -0c6db012| MOVW $2090336255, R12 -3ff5aa92| MOVD $-1470693377, ZR -87f0f6d2| MOVD $-5223049667842932736, R7 -f3571132| ORRW $4294934559, ZR, R19 -f3bb0bb2| MOVD $-4503668347895825, R19 -f103082a| MOVW R8, R17 -ef031faa| MOVD ZR, R15 -4a6bf5f2| MOVK $(43866<<48), R10 -383b9312| MOVW $4294927910, R24 -f5fb9092| MOVD $-34784, R21 -d5b4b052| MOVW $2242248704, R21 -fdc5eed2| MOVD $8516025420380897280, R29 -c58435d5| MRS $11302, R5 -1a0f13d5| MSR R26, S2_3_C0_C15_0 -52d5181b| MSUBW R24, R21, R10, R18 -c4f81d9b| MSUB R29, R30, R6, R4 -a57c1b1b| MULW R27, R5, R5 -8f7f0a9b| MUL R10, R28, R15 -e75361aa| MVN R1>>20, R7 -e0cb15cb| NEG R21<<50, R0 -ffdb49eb| CMP R9>>54, ZR -f5031c5a| NGCW R28, R21 -e6031eda| NGC R30, R6 -e103077a| NGCSW R7, R1 -f20301fa| NGCS R1, R18 -1f2003d5| NOP -9347722a| ORNW R18>>17, R28, R19 -0591e1aa| ORN R1@>36, R8, R5 -7ba82a32| ORRW $4290904001, R3, R27 -ae087db2| ORR $56, R5, R14 -9608472a| ORRW R7>>2, R4, R22 -c40dc5aa| ORR R5@>3, R14, R4 -9d83bcf9| PRFM 30976(R28), $29 -78ab03d8| PRFM 7515(PC), $24 -6e9186f8| PRFUM 105(R11), $14 -c001c05a| RBITW R14, R0 -4203c0da| RBIT R26, R2 -c0035fd6| RET -9b08c05a| REVW R4, R27 -740cc0da| REV R3, R20 -0205c05a| REV16W R8, R2 -dd07c0da| REV16 R30, R29 -020bc0da| REV32 R24, R2 -780cc0da| REV R3, R24 -9b7f9513| EXTRW $31, R21, R28, R27 -5243dd93| EXTR $16, R29, R26, R18 -822eca1a| RORW R10, R20, R2 -f02ddb9a| ROR R27, R15, R16 -082ed81a| RORW R24, R16, R8 -7b2cc39a| ROR R3, R3, R27 -3b030b5a| SBCW R11, R25, R27 -f2021dda| SBC R29, R23, R18 -e600127a| SBCSW R18, R7, R6 -cf030ffa| SBCS R15, R30, R15 -3a797793| SBFIZ $9, R9, $31, R26 -4a305193| SBFIZ $47, R2, $13, R10 -a1c74493| SBFX $4, R29, $46, R1 -a00fc01a| SDIVW R0, R29, R0 -f10edd9a| SDIV R29, R23, R17 -9f2003d5| SEV -bf2003d5| SEVL -a52d319b| SMADDL R17, R11, R13, R5 -b4fc399b| SMNEGL R25, R5, R20 -579e369b| SMSUBL R22, R7, R18, R23 -ea7e429b| SMULH R2, R23, R10 -eb7f219b| SMULL R1, ZR, R11 -f1fe9f88| STLRW R17, (R23) -edff9fc8| STLR R13, (RSP) -bffe9f08| STLRB ZR, (R21) -9cfd9f48| STLRH R28, (R12) -41bf2688| STLXPW (R1, R15), (R26), R6 -01e93cc8| STLXP (R1, R26), (R8), R28 -e0fd1f88| STLXRW R0, (R15), ZR -12fe17c8| STLXR R18, (R16), R23 -d4fc1008| STLXRB R20, (R6), R16 -befc0048| STLXRH R30, (R5), R0 -76613728| STNPW -72(R11), R24, R22 -c7523ba8| STNP -80(R22), R20, R7 -8e3a9f28| STP.P (R14, R14), 248(R20) -aa1fa6a8| STP.P (R10, R7), -416(R29) -fbae8d29| STP.W (R27, R11), 108(R23) -f63c80a9| STP.W (R22, R15), (R7) -43d73629| STP (R3, R21), -76(R26) -1ae01ba9| STP (R26, R24), 440(R0) -8f650cb8| MOVW.P R15, 198(R12) -aad503f8| MOVD.P R10, 61(R13) -ec4d00b8| MOVW.W R12, 4(R15) -7dbc1df8| MOVD.W R29, -37(R3) -9b0226b9| MOVW R27, 9728(R20) -91691af9| MOVD R17, 13520(R12) -20840838| MOVB.P R0, 136(R1) -060c1f38| MOVB.W R6, -16(R0) -2b213a39| MOVB R11, 3720(R9) -ab6b3438| MOVB R11, (R29)(R20) -50e51e78| MOVH.P R16, -18(R10) -5d5d1878| MOVH.W R29, -123(R10) -ea862379| MOVH R10, 4546(R23) -d65a2778| MOVH R22, (R22)(R7.UXTW<<1) -d5ca12b8| STTRW -212(R22), R21 -001b18f8| STTR -127(R24), R0 -290a1e38| STTRBW -32(R17), R9 -0b381078| STTRHW -253(R0), R11 -c78101b8| MOVW R7, 24(R14) -c0b217f8| MOVD R0, -133(R22) -f8401e38| MOVB R24, -28(R7) -5e911a78| MOVH R30, -87(R10) -b7622d88| STXPW (R23, R24), (R21), R13 -233d37c8| STXP (R3, R15), (R9), R23 -847d0088| STXRW R4, (R12), R0 -a27d0bc8| STXR R2, (R13), R11 -f27f1e08| STXRB R18, (RSP), R30 -3a7d1848| STXRH R26, (R9), R24 -d4dc204b| SUBW R0.SXTW<<7, R6, R20 -874023cb| SUB R3.UXTW, R4, R7 -44eb4f51| SUBW $(1018<<12), R26, R4 -17b012cb| SUB R18<<44, R0, R23 -ac1e376b| SUBSW R23.UXTB<<7, R21, R12 -b0483beb| SUBS R27.UXTW<<2, R5, R16 -d1f994eb| SUBS R20->62, R14, R17 -61d513d4| SVC $40619 -591d0013| SXTBW R10, R25 -9f1f4093| SXTB R28, ZR -773f0013| SXTHW R27, R23 -453c4093| SXTH R2, R5 -b77c4093| SXTW R5, R23 -743628d5| SYSL $13920, R20 -9f613672| TSTW $4294966279, R12 -1f8d22f2| TST $-4610630471158349821, R8 -ff6e93ea| TST R19->27, R23 -06997ed3| UBFIZ $2, R8, $39, R6 -5dd054d3| UBFX $20, R2, $33, R29 -a54273d3| UBFIZ $13, R21, $17, R5 -7d08d11a| UDIVW R17, R3, R29 -120acf9a| UDIV R15, R16, R18 -1401a89b| UMADDL R8, R0, R8, R20 -08feb29b| UMNEGL R18, R16, R8 -eeb0b99b| UMSUBL R25, R12, R7, R14 -967fdd9b| UMULH R29, R28, R22 -947eb59b| UMULL R21, R20, R20 -7e1f0053| UXTBW R27, R30 -983c0053| UXTHW R4, R24 -5f2003d5| WFE -7f2003d5| WFI -3f2003d5| YIELD -02bb200e| VABS V24.B8, V2.B8 -0686ec4e| VADD V12.D2, V16.D2, V6.D2 -ea42ac0e| VADDHN V12.D2, V23.D2, V10.S2 -7d43624e| VADDHN2 V2.S4, V27.S4, V29.H8 -2cbd710e| VADDP V17.H4, V9.H4, V12.H4 -f5bab14e| VADDV V23.S4, V21 -8158284e| AESD V4.B16, V1.B16 -ba48284e| AESE V5.B16, V26.B16 -0c7a284e| AESIMC V16.B16, V12.B16 -3e6a284e| AESMC V17.B16, V30.B16 -091f384e| VAND V24.B16, V24.B16, V9.B16 -07b6046f| VBIC $(144<<8), V7.H8 -00c5006f| VMVNI $(8<<136), V0.S4 -f81e6c0e| VBIC V12.B8, V23.B8, V24.B8 -6f1ced2e| VBIF V13.B8, V3.B8, V15.B8 -e31da16e| VBIT V1.B16, V15.B16, V3.B16 -6a1d7c6e| VBSL V28.B16, V11.B16, V10.B16 -284a600e| VCLS V17.H4, V8.H4 -9a49202e| VCLZ V12.B8, V26.B8 -d78f706e| VCMEQ V16.H8, V30.H8, V23.H8 -7798e05e| VCMEQ $0, V3, V23 -739a200e| VCMEQ $0, V19.B8, V19.B8 -ff3f2b4e| VCMGE V11.B16, V31.B16, V31.B16 -5337370e| VCMGT V23.B8, V26.B8, V19.B8 -3489604e| VCMGT $0, V9.H8, V20.H8 -083d782e| VCMHS V24.H4, V8.H4, V8.H4 -c899e07e| VCMLE $0, V14, V8 -3498a06e| VCMLE $0, V1.S4, V20.S4 -ebaa200e| VCMLT $0, V23.B8, V11.B8 -408dfe4e| VCMTST V30.D2, V10.D2, V0.D2 -0e06085e| VMOV V16.D[0], V14 -1e0d0d0e| VDUP R8, V30.B8 -8e1d3a6e| VEOR V26.B16, V12.B16, V14.B16 -632a086e| VEXT $5, V8.B16, V19.B16, V3.B16 -97d7e57e| FABD F5, F28, F23 -6bd4a82e| VFABD V8.S2, V3.S2, V11.S2 -f7faa00e| FABS V23.S2, V23.S2 -54c2201e| FABSS F18, F20 -3ec3601e| FABSD F25, F30 -2aee317e| FACGE F17, F17, F10 -2fed392e| VFACGE V25.S2, V9.S2, V15.S2 -2befe97e| FACGT F9, F25, F11 -65eced6e| VFACGT V13.D2, V3.D2, V5.D2 -55d53c4e| FADD V28.S4, V10.S4, V21.S4 -8b283f1e| FADDS F31, F4, F11 -d828601e| FADDD F0, F6, F24 -e9d8307e| FADDP V7.S2, F9 -4084391e| FCCMPS HI, F25, F2, $0 -ef046d1e| FCCMPD EQ, F13, F7, $15 -d7a4241e| FCCMPES GE, F4, F6, $7 -dbf5601e| FCCMPED AL, F0, F14, $11 -77e7625e| FCMEQ F2, F27, F23 -2de67f4e| VFCMEQ V31.D2, V17.D2, V13.D2 -59daa05e| FCMEQ $0, F18, F25 -add9a00e| VFCMEQ $0, V13.S2, V13.S2 -dce42d7e| FCMGE F13, F6, F28 -62e6776e| VFCMGE V23.D2, V19.D2, V2.D2 -f9cae07e| FCMGE $0, F23, F25 -18e5ab7e| FCMGT F11, F8, F24 -84e7ae6e| VFCMGT V14.S4, V28.S4, V4.S4 -a0c8e05e| FCMGT $0, F5, F0 -c6cae04e| VFCMGT $0, V22.D2, V6.D2 -4fdaa07e| FCMLE $0, F18, F15 -e1d9a02e| VFCMLE $0, V15.S2, V1.S2 -1ee9a05e| FCMLT $0, F8, F30 -23eaa04e| VFCMLT $0, V17.S4, V3.S4 -6023321e| FCMPS F18, F27 -2823391e| FCMPS $(0.0), F25 -00236d1e| FCMPD F13, F24 -e820601e| FCMPD $(0.0), F7 -3022381e| FCMPES F24, F17 -f8233e1e| FCMPES $(0.0), F31 -b0206a1e| FCMPED F10, F5 -3820691e| FCMPED $(0.0), F1 -d85f271e| FCSELS PL, F30, F7, F24 -ed8f7a1e| FCSELD HI, F31, F26, F13 -0042e21e| FCVTHS F16, F0 -efc1e21e| FCVTHD F15, F15 -edc1231e| FCVTSH F15, F13 -0ac0221e| FCVTSD F0, F10 -39c3631e| FCVTDH F25, F25 -da43621e| FCVTDS F30, F26 -10cb615e| FCVTAS F24, F16 -f400241e| FCVTASW F7, R20 -2f00249e| FCVTAS F1, R15 -1d02641e| FCVTASW F16, R29 -9303649e| FCVTAS F28, R19 -02ca217e| FCVTAU F16, F2 -afc8212e| VFCVTAU V5.S2, V15.S2 -6e02251e| FCVTAUW F19, R14 -fd02259e| FCVTAU F23, R29 -8603651e| FCVTAUW F28, R6 -4001659e| FCVTAU F10, R0 -1f78210e| VFCVTL V0.H4, V31.S4 -d179214e| VFCVTL2 V14.H8, V17.S4 -fdbb615e| FCVTMS F31, F29 -9601301e| FCVTMSW F12, R22 -f403309e| FCVTMS F31, R20 -6b02701e| FCVTMSW F19, R11 -4802709e| FCVTMS F18, R8 -84ba217e| FCVTMU F20, F4 -ae01311e| FCVTMUW F13, R14 -8402319e| FCVTMU F20, R4 -7403711e| FCVTMUW F27, R20 -2a03719e| FCVTMU F25, R10 -a36b210e| VFCVTN V29.S4, V3.H4 -5c6a214e| VFCVTN2 V18.S4, V28.H8 -78a9215e| FCVTNS F11, F24 -b1ab614e| VFCVTNS V29.D2, V17.D2 -0c01201e| FCVTNSW F8, R12 -b303209e| FCVTNS F29, R19 -c401601e| FCVTNSW F14, R4 -5200609e| FCVTNS F2, R18 -c2a8617e| FCVTNU F6, F2 -daab616e| VFCVTNU V30.D2, V26.D2 -d001211e| FCVTNUW F14, R16 -0402219e| FCVTNU F16, R4 -7800611e| FCVTNUW F3, R24 -e602619e| FCVTNU F23, R6 -74aaa15e| FCVTPS F19, F20 -c801281e| FCVTPSW F14, R8 -8f02289e| FCVTPS F20, R15 -6d02681e| FCVTPSW F19, R13 -bc00689e| FCVTPS F5, R28 -43aba17e| FCVTPU F26, F3 -cda9a12e| VFCVTPU V14.S2, V13.S2 -c102291e| FCVTPUW F22, R1 -9103299e| FCVTPU F28, R17 -7602691e| FCVTPUW F19, R22 -4501699e| FCVTPU F10, R5 -976a616e| VFCVTXN2 V20.D2, V23.S4 -d5fc575f| FCVTZS $41, F6, F21 -babaa15e| FCVTZSSS F21, F26 -7aa6181e| FCVTZS $23, F19, R26 -c410189e| FCVTZS $60, F6, R4 -4db5589e| FCVTZS $19, F10, R13 -9000381e| FCVTZSSW F4, R16 -1702389e| FCVTZSS F16, R23 -8a03781e| FCVTZSDW F28, R10 -d501789e| FCVTZSD F14, R21 -eefd2d7f| FCVTZU $19, F15, F14 -4dfc3c6f| FCVTZU $4, V2.S4, V13.S4 -96bbe17e| FCVTZUDD F28, F22 -30b8e16e| FCVTZU V1.D2, V16.D2 -fdef191e| FCVTZU $5, F31, R29 -1d7b199e| FCVTZU $34, F24, R29 -b8f5591e| FCVTZU $3, F13, R24 -5080599e| FCVTZU $32, F2, R16 -d002391e| FCVTZUSW F22, R16 -9b03399e| FCVTZUS F28, R27 -7501791e| FCVTZUDW F11, R21 -7603799e| FCVTZUD F27, R22 -06fe3c6e| FDIV V28.S4, V16.S4, V6.S4 -c41b201e| FDIVS F0, F30, F4 -1618781e| FDIVD F24, F0, F22 -507b0d1f| FMADDS F13, F30, F26, F16 -8803491f| FMADDD F9, F0, F28, F8 -75f7394e| FMAX V25.S4, V27.S4, V21.S4 -804b3c1e| FMAXS F28, F28, F0 -c1496c1e| FMAXD F12, F14, F1 -5b69371e| FMAXNMS F23, F10, F27 -1468711e| FMAXNMD F17, F0, F20 -a4c8707e| FMAXNMP V5.D2, F4 -89f9707e| FMAXP V12.D2, F9 -4af63e2e| VFMAXP V30.S2, V18.S2, V10.S2 -25fa306e| FMAXV V17.S4, F5 -01f4e04e| FMIN V0.D2, V0.D2, V1.D2 -59592a1e| FMINS F10, F10, F25 -3959611e| FMIND F1, F9, F25 -73c7ba4e| FMINNM V26.S4, V27.S4, V19.S4 -1279391e| FMINNMS F25, F8, F18 -75796c1e| FMINNMD F12, F11, F21 -90cbb07e| FMINNMP V28.S2, F16 -c5c8b06e| FMINNMV V6.S4, F5 -cdfbf07e| FMINP V30.D2, F13 -edf6f66e| VFMINP V22.D2, V23.D2, V13.D2 -6513b85f| FMLA V24.S[1], F27, F5 -ee18984f| VFMLA V24.S[2], V7.S4, V14.S4 -b85ab75f| FMLS V23.S[3], F21, F24 -a3f5030f| FMOV $0.90625, V3.S2 -eaf7056f| FMOV $-31., V10.D2 -3b41201e| FMOVS F9, F27 -0d41601e| FMOVD F8, F13 -9700271e| FMOVS R4, F23 -ad03261e| FMOVS F29, R13 -2302679e| FMOVD R17, F3 -e101af9e| FMOV R15, V1.D[1] -f301669e| FMOVD F15, R19 -1103ae9e| FMOV V24.D[1], R17 -0230321e| FMOVS $-4.25, F2 -18b0751e| FMOVD $-14.5, F24 -92bc1b1f| FMSUBS F27, F15, F4, F18 -f8e14a1f| FMSUBD F10, F24, F15, F24 -ef91d35f| FMULD V19.D[0], F15, F15 -d293c24f| FMUL V2.D[0], V30.D2, V18.D2 -18dd2b2e| FMUL V11.S2, V8.S2, V24.S2 -a4093d1e| FMULS F29, F13, F4 -94096f1e| FMULD F15, F12, F20 -fe918e7f| FMULX V14.S[0], F15, F30 -7199c56f| VFMULX V5.D[1], V11.D2, V17.D2 -32dc695e| FMULX F9, F1, F18 -c8f9e06e| FNEG V14.D2, V8.D2 -9c41211e| FNEGS F12, F28 -c443611e| FNEGD F30, F4 -e77f301f| FNMADDS F16, F31, F31, F7 -9f326c1f| FNMADDD F12, F12, F20, F31 -d9e92f1f| FNMSUBS F15, F26, F14, F25 -00ad711f| FNMSUBD F17, F11, F8, F0 -c889211e| FNMULS F1, F14, F8 -528b761e| FNMULD F22, F26, F18 -01d8e15e| FRECPE F0, F1 -9aff7e5e| FRECPS F30, F28, F26 -78fe2a4e| VFRECPS V10.S4, V19.S4, V24.S4 -01f9e15e| FRECPX F8, F1 -128b216e| FRINTA V24.S4, V18.S4 -b241261e| FRINTAS F13, F18 -a841661e| FRINTAD F13, F8 -799aa16e| FRINTI V19.S4, V25.S4 -1cc2271e| FRINTIS F16, F28 -93c2671e| FRINTID F20, F19 -1a40251e| FRINTMS F0, F26 -ac42651e| FRINTMD F21, F12 -5889214e| FRINTN V10.S4, V24.S4 -5740241e| FRINTNS F2, F23 -9443641e| FRINTND F28, F20 -4b89a10e| FRINTP V10.S2, V11.S2 -a0c1241e| FRINTPS F13, F0 -93c2641e| FRINTPD F20, F19 -d49b216e| FRINTX V30.S4, V20.S4 -df41271e| FRINTXS F14, F31 -8d41671e| FRINTXD F12, F13 -3998a10e| FRINTZ V1.S2, V25.S2 -fdc2251e| FRINTZS F23, F29 -abc2651e| FRINTZD F21, F11 -10dba17e| FRSQRTE F24, F16 -edd9e16e| VFRSQRTE V15.D2, V13.D2 -75ffe35e| FRSQRTS F3, F27, F21 -b4fdbe4e| VFRSQRTS V30.S4, V13.S4, V20.S4 -24f8a16e| FSQRT V1.S4, V4.S4 -b6c1211e| FSQRTS F13, F22 -c1c3611e| FSQRTD F30, F1 -ffd5b44e| FSUB V20.S4, V15.S4, V31.S4 -d438331e| FSUBS F19, F6, F20 -f038771e| FSUBD F23, F7, F16 -675e1a6e| VMOV V19.H[5], V7.H[6] -2a1c0a4e| VMOV R1, V10.H[2] -de7f400c| VLD1 (R30), [V30.D1] -4aa7404c| VLD1 (R26), [V10.H8, V11.H8] -5d61400c| VLD1 (R10), [V29.B8, V30.B8, V31.B8] -af21404c| VLD1 (R13), [V15.B16, V16.B16, V17.B16, V18.B16] -737edf0c| VLD1.P 8(R19), [V19.D1] -757dd10c| VLD1.P (R11)(R17), [V21.D1] -5ca3df4c| VLD1.P 32(R26), [V28.B16, V29.B16] -93a1ce0c| VLD1.P (R12)(R14), [V19.B8, V20.B8] -1c65df0c| VLD1.P 24(R8), [V28.H4, V29.H4, V30.H4] -4461d34c| VLD1.P (R10)(R19), [V4.B16, V5.B16, V6.B16] -b22edf4c| VLD1.P 64(R21), [V18.D2, V19.D2, V20.D2, V21.D2] -c12fcc4c| VLD1.P (R30)(R12), [V1.D2, V2.D2, V3.D2, V4.D2] -5a03400d| VLD1 (R26), V26.B[0] -8d93404d| VLD1 (R28), V13.S[3] -2186404d| VLD1 (R17), V1.D[1] -9604df4d| VLD1.P 1(R4), V22.B[9] -4a1dc94d| VLD1.P (R10)(R9), V10.B[15] -4852df4d| VLD1.P 2(R18), V8.H[6] -2582df4d| VLD1.P 4(R17), V5.S[2] -2191c84d| VLD1.P (R9)(R8), V1.S[3] -c284df4d| VLD1.P 8(R6), V2.D[1] -8f85ce0d| VLD1.P (R12)(R14), V15.D[0] -87cd400d| VLD1R (R12), [V7.D1] -3bc8df4d| VLD1R 4(R1), [V27.S4] -77c4dd4d| VLD1R (R3)(R29), [V23.H8] -5384404c| VLD2 (R2), [V19.H8, V20.H8] -ca87df0c| VLD2 16(R30), [V10.H4, V11.H4] -1280d70c| VLD2 (R0)(R23), [V18.B8, V19.B8] -4c0a604d| LD2 (R18), [V12.B, V13.B][10] -3080600d| LD2 (R1), [V16.S, V17.S][0] -6686600d| LD2 (R19), [V6.D, V7.D][0] -061eff0d| LD2 2(R16), [V6.B, V7.B][7] -db05fa0d| LD2 (R14)(R26), [V27.B, V28.B][1] -8a49ff4d| LD2 4(R12), [V10.H, V11.H][5] -bb59ec4d| LD2 (R13)(R12), [V27.H, V28.H][7] -5a82ff0d| LD2 8(R18), [V26.S, V27.S][0] -6180e30d| LD2 (R3)(R3), [V1.S, V2.S][0] -6485ff0d| LD2 16(R11), [V4.D, V5.D][0] -7c86ed4d| LD2 (R19)(R13), [V28.D, V29.D][1] -54c0604d| VLD2R (R2), [V20.B16, V21.B16] -fdcaff0d| VLD2R 8(R23), [V29.S2, V30.S2] -7bc5e40d| VLD2R (R11)(R4), [V27.H4, V28.H4] -b349404c| VLD3 (R13), [V19.S4, V20.S4, V21.S4] -cf46df4c| VLD3 48(R22), [V15.H8, V16.H8, V17.H8] -934acc4c| VLD3 (R20)(R12), [V19.S4, V20.S4, V21.S4] -2c33404d| LD3 (R25), [V12.B, V13.B, V14.B][12] -897a400d| LD3 (R20), [V9.H, V10.H, V11.H][3] -f9b2400d| LD3 (R23), [V25.S, V26.S, V27.S][1] -4aa7404d| LD3 (R26), [V10.D, V11.D, V12.D][1] -4e25df4d| LD3 3(R10), [V14.B, V15.B, V16.B][9] -7827c40d| LD3 (R27)(R4), [V24.B, V25.B, V26.B][1] -c4a3df4d| LD3 12(R30), [V4.S, V5.S, V6.S][2] -f0a1cf0d| LD3 (R15)(R15), [V16.S, V17.S, V18.S][0] -1ba7df0d| LD3 24(R24), [V27.D, V28.D, V29.D][0] -f7a7d50d| LD3 (RSP)(R21), [V23.D, V24.D, V25.D][0] -a9ed404d| VLD3R (R13), [V9.D2, V10.D2, V11.D2] -5aecdf4d| VLD3R 24(R2), [V26.D2, V27.D2, V28.D2] -bae9c74d| VLD3R (R13)(R7), [V26.S4, V27.S4, V28.S4] -5904404c| VLD4 (R2), [V25.H8, V26.H8, V27.H8, V28.H8] -743b604d| LD4 (R27), [V20.B, V21.B, V22.B, V23.B][14] -bda1600d| LD4 (R13), [V29.S, V30.S, V31.S, V0.S][0] -a3a4600d| LD4 (R5), [V3.D, V4.D, V5.D, V6.D][0] -2f3aff4d| LD4 4(R17), [V15.B, V16.B, V17.B, V18.B][14] -e73bef4d| LD4 (RSP)(R15), [V7.B, V8.B, V9.B, V10.B][14] -5d78ef0d| LD4 (R2)(R15), [V29.H, V30.H, V31.H, V0.H][3] -acb3ff0d| LD4 16(R29), [V12.S, V13.S, V14.S, V15.S][1] -a8b2f04d| LD4 (R21)(R16), [V8.S, V9.S, V10.S, V11.S][3] -75a7ff4d| LD4 32(R27), [V21.D, V22.D, V23.D, V24.D][1] -75a6ee4d| LD4 (R19)(R14), [V21.D, V22.D, V23.D, V24.D][1] -d8e3604d| VLD4R (R30), [V24.B16, V25.B16, V26.B16, V27.B16] -49e9ff0d| VLD4R 16(R10), [V9.S2, V10.S2, V11.S2, V12.S2] -81effc0d| VLD4R (R28)(R28), [V1.D1, V2.D1, V3.D1, V4.D1] -893e622c| VLDNP -240(R20), V15, V9 -f90e626c| VLDNP -480(R23), V3, V25 -b0224fac| VLDNP 480(R21), V8, V16 -9186de2c| LDP.P 244(R20), (V17, V1) -e820d06c| LDP.P 256(R7), (V8, V8) -417de8ac| LDP.P -768(R10), (V1, V31) -7969ed2d| LDP.W -152(R11), (V25, V26) -70c8c36d| LDP.W 56(R3), (V16, V18) -30b4c4ad| LDP.W 144(R1), (V16, V13) -a1857f2d| LDP -4(R13), (V1, V1) -f4ae786d| LDP -120(R23), (V20, V11) -998366ad| LDP -816(R28), (V25, V0) -7535453c| MOVD.P 83(R11), V21 -5465477c| MOVD.P 118(R10), V20 -a2b44bbc| FMOVS.P 187(R5), F2 -ab045bfc| FMOVD.P -80(R5), F11 -0515d43c| MOVD.P -191(R8), V5 -43ad413c| MOVD.W 26(R10), V3 -22cd4f7c| MOVD.W 252(R9), V2 -5fad44bc| FMOVS.W 74(R10), F31 -db7d5afc| FMOVD.W -89(R14), F27 -15ccd63c| MOVD.W -148(R0), V21 -95c34b3d| MOVD 752(R28), V21 -f5885e7d| MOVD 3908(R7), V21 -54db66bd| FMOVS 9944(R26), F20 -46ee78fd| FMOVD 29144(R18), F6 -0cc4e93d| MOVD 42768(R0), V12 -e1c4211c| FMOVS 69159(PC), F1 -2071c35c| FMOVD -124023(PC), F0 -ae79703c| MOVD (R13)(R16), V14 -38fb67bc| FMOVS (R25)(R7.SXTX<<2), F24 -3e6b6dfc| FMOVD (R25)(R13), F30 -a278ff3c| MOVD (R5)(ZR<<4), V2 -ed02563c| VLDUR -160(R23), V13 -01c0507c| VLDUR -244(R0), V1 -7fd24ebc| VLDUR 237(R19), V31 -7a734ffc| VLDUR 247(R27), V26 -d4a3dd3c| VLDUR -38(R30), V20 -1c97250e| VMLA V5.B8, V24.B8, V28.B8 -af97a12e| VMLS V1.S2, V29.S2, V15.S2 -2b061f5e| VMOV V17.B[15], V11 -805e086e| VMOV V20.D[1], V0.D[0] -d91fbc4e| VORR V28.B16, V30.B16, V25.B16 -a43f040e| VMOV V29.S[0], R4 -fbe6054f| VMOVI $183, V27.B16 -9b75024f| VORR $(76<<24), V27.S4 -8436020f| VORR $(84<<8), V4.S2 -19f5010f| FMOV $12., V25.S2 -02e5062f| VMOVI $-281470698520576, V2 -d6e5066f| VMOVI $-281470681743616, V22.D2 -be9c240e| VMUL V4.B8, V5.B8, V30.B8 -2659202e| VMVN V9.B8, V6.B8 -f394046f| VBIC $135, V19.H8 -d856056f| VBIC $(182<<16), V24.S4 -2f85022f| VMVNI $73, V15.H4 -24baa02e| VNEG V17.S2, V4.S2 -145b206e| VMVN V24.B16, V20.B16 -191fff4e| VORN V31.B16, V24.B16, V25.B16 -6f96004f| VORR $19, V15.H8 -a564020f| VMOVI $(69<<24), V5.S2 -ae1ead0e| VORR V13.B8, V21.B8, V14.B8 -f2e1e00e| VPMULL V0.D1, V15.D1, V18.Q1 -0d426e2e| VRADDHN V14.S4, V16.S4, V13.H4 -4443246e| VRADDHN2 V4.H8, V26.H8, V4.B16 -015b602e| VRBIT V24.B8, V1.B8 -4209202e| VREV32 V10.B8, V2.B8 -d109a04e| VREV64 V14.S4, V17.S4 -5a8e380f| VRSHRN $8, V18.D2, V26.S2 -438d234f| VRSHRN2 $29, V10.D2, V3.S4 -a861716e| VRSUBHN2 V17.S4, V13.S4, V8.H8 -017c2f0e| VSABA V15.B8, V0.B8, V1.B8 -5d51a90e| VSABAL V9.S2, V10.S2, V29.D2 -c076a04e| VSABD V0.S4, V22.S4, V0.S4 -2d722e0e| VSABDL V14.B8, V17.B8, V13.H8 -1f732e4e| VSABDL2 V14.B16, V24.B16, V31.H8 -c628604e| VSADDLP V6.H8, V6.S4 -103b704e| VSADDLV V24.H8, V16 -8f122f0e| VSADDW V15.B8, V20.H8, V15.H8 -30e6755f| SCVTF $11, F17, F16 -73e7544f| SCVTF $44, V27.D2, V19.D2 -51d9615e| SCVTFDD F10, F17 -fad9210e| SCVTF V15.S2, V26.S2 -96c0421e| SCVTF $16, R4, F22 -76e1029e| SCVTF $8, R11, F22 -a791429e| SCVTF $28, R13, F7 -f100221e| SCVTFWS R7, F17 -e101621e| SCVTFWD R15, F1 -6e03229e| SCVTFS R27, F14 -0b01629e| SCVTFD R8, F11 -2401025e| SHA1C V2.S4, V9, V4 -5d08285e| SHA1H V2, V29 -65210d5e| SHA1M V13.S4, V11, V5 -29131a5e| SHA1P V26.S4, V25, V9 -2b311a5e| SHA1SU0 V26.S4, V9.S4, V11.S4 -0919285e| SHA1SU1 V8.S4, V9.S4 -f052035e| SHA256H2 V3.S4, V23, V16 -fe401e5e| SHA256H V30.S4, V7, V30 -7529285e| SHA256SU0 V11.S4, V21.S4 -cc60195e| SHA256SU1 V25.S4, V6.S4, V12.S4 -8b56060f| VORR $(212<<16), V11.S2 -3f3aa16e| VSHLL2 $32, V17.S4, V31.D2 -0986394f| VSHRN2 $7, V16.D2, V9.S4 -35276e4e| VSHSUB V14.H8, V25.H8, V21.H8 -e2556d7f| VSLI $45, V15, V2 -f7541e6f| VSLI $14, V7.H8, V23.H8 -3167630e| VSMAX V3.H4, V25.H4, V17.H4 -68a6230e| VSMAXP V3.B8, V19.B8, V8.B8 -a4aa304e| VSMAXV V21.B16, V4 -2520440f| VSMLAL V4.H[0], V1.H4, V5.S4 -8c286f4f| VSMLAL2 V15.H[6], V4.H8, V12.S4 -3a82660e| VSMLAL V6.H4, V17.H4, V26.S4 -d92f1f0e| SMOVW V30.B[15], R25 -912d114e| SMOV V12.B[8], R17 -b87ae05e| VSQABS V21, V24 -2d7b200e| VSQABS V25.B8, V13.B8 -560f645e| VSQADD V4, V26, V22 -4f0da54e| VSQADD V5.S4, V10.S4, V15.S4 -5992ba5e| VSQDMLAL V26, V18, V25 -b892684e| VSQDMLAL2 V8.H8, V21.H8, V24.S4 -63786e5f| VSQDMLSL V14.H[6], V3, V3 -0c79a10f| VSQDMLSL V1.S[3], V8.S2, V12.D2 -1d73504f| VSQDMLSL2 V0.H[1], V24.H8, V29.S4 -6cb36c5e| VSQDMLSL V12, V27, V12 -82b36e4e| VSQDMLSL2 V14.H8, V28.H8, V2.S4 -8dca5d4f| VSQDMULH V13.H[5], V20.H8, V13.H8 -fcb6b64e| VSQDMULH V22.S4, V23.S4, V28.S4 -d6b0974f| VSQDMULL2 V23.S[0], V6.S4, V22.D2 -afd0b84e| VSQDMULL2 V24.S4, V5.S4, V15.D2 -067b207e| VSQNEG V24, V6 -9979606e| VSQNEG V12.H8, V25.H8 -bfdbae0f| VSQRDMULH V14.S[3], V29.S2, V31.S2 -c3b7a07e| VSQRDMULH V0, V30, V3 -845d3d5e| VSQRSHL V29, V12, V4 -495dba0e| VSQRSHL V26.S2, V10.S2, V9.S2 -fa8e0d7f| VSQRSHRUN $3, V23, V26 -cf75185f| VSQSHL $8, V14, V15 -a975250f| VSQSHL $5, V13.S2, V9.S2 -424da05e| VSQSHL V0, V10, V2 -464db90e| VSQSHL V25.S2, V10.S2, V6.S2 -af656d7f| VSQSHLU $45, V13, V15 -e564436f| VSQSHLU $3, V7.D2, V5.D2 -c1973b5f| VSQSHRN $5, V30, V1 -d586036f| VMVNI $118, V21.H8 -4c2ea95e| VSQSUB V9, V18, V12 -df2efe4e| VSQSUB V30.D2, V22.D2, V31.D2 -c149a10e| VSQXTN V14.D2, V1.S2 -712a217e| VSQXTUN V19, V17 -9a29a12e| VSQXTUN V12.D2, V26.S2 -6a166e0e| VSRHADD V14.H4, V19.H4, V10.H4 -0445647f| VSRI $28, V8, V4 -6f44172f| VSRI $9, V3.H4, V15.H4 -cd56f94e| VSRSHL V25.D2, V22.D2, V13.D2 -12345b5f| VSRSRA $37, V0, V18 -f746fa5e| VSSHL V26, V23, V23 -89476c4e| VSSHL V12.H8, V28.H8, V9.H8 -0da60e0f| VSSHLL $6, V16.B8, V13.H8 -a504585f| VSSHR $40, V5, V5 -3b07544f| VSSHR $44, V25.D2, V27.D2 -3417350f| VSSRA $11, V25.S2, V20.S2 -1a213f0e| VSSUBL V31.B8, V8.B8, V26.H8 -1322a34e| VSSUBL2 V3.S4, V16.S4, V19.D2 -e931b84e| VSSUBW2 V24.S4, V15.D2, V9.D2 -dd7d004c| VST1 [V29.D2], (R14) -cea4000c| VST1 [V14.H4, V15.H4], (R6) -5a64000c| VST1 [V26.H4, V27.H4, V28.H4], (R2) -2b2c004c| VST1 [V11.D2, V12.D2, V13.D2, V14.D2], (R1) -39719f0c| VST1.P [V25.B8], 8(R9) -b771874c| VST1.P [V23.B16], (R13)(R7) -1da39f0c| VST1.P [V29.B8, V30.B8], 16(R24) -20a0800c| VST1.P [V0.B8, V1.B8], (R1)(R0) -5a6a9f4c| VST1.P [V26.S4, V27.S4, V28.S4], 48(R18) -0d69994c| VST1.P [V13.S4, V14.S4, V15.S4], (R8)(R25) -7e239f0c| VST1.P [V30.B8, V31.B8, V0.B8, V1.B8], 32(R27) -9a2d8e0c| VST1.P [V26.D1, V27.D1, V28.D1, V29.D1], (R12)(R14) -fd0b004d| VST1 V29.B[10], (RSP) -1058004d| VST1 V16.H[7], (R0) -0593000d| VST1 V5.S[1], (R24) -3d87000d| VST1 V29.D[0], (R25) -1a079f0d| VST1.P V26.B[1], 1(R24) -421b8f4d| VST1.P V2.B[14], (R26)(R15) -54489f4d| VST1.P V20.H[5], 2(R2) -c4809f4d| VST1.P V4.S[2], 4(R6) -0481840d| VST1.P V4.S[0], (R8)(R4) -6b859f0d| VST1.P V11.D[0], 8(R11) -f7878e4d| VST1.P V23.D[1], (RSP)(R14) -e788004c| VST2 (R7), [V7.S4, V8.S4] -79889f0c| VST2 16(R3), [V25.S2, V26.S2] -a502204d| ST2 (R21), [V5.B, V6.B][8] -0e50204d| ST2 (R0), [V14.H, V15.H][6] -6b93204d| ST2 (R27), [V11.S, V12.S][3] -0987200d| ST2 (R24), [V9.D, V10.D][0] -7003bf0d| ST2 2(R27), [V16.B, V17.B][0] -1a09a94d| ST2 (R8)(R9), [V26.B, V27.B][10] -1e43b00d| ST2 (R24)(R16), [V30.H, V31.H][0] -1a82bf0d| ST2 8(R16), [V26.S, V27.S][0] -9892a50d| ST2 (R20)(R5), [V24.S, V25.S][1] -5884bf0d| ST2 16(R2), [V24.D, V25.D][0] -9e87a34d| ST2 (R28)(R3), [V30.D, V31.D][1] -4e47004c| VST3 (R26), [V14.H8, V15.H8, V16.H8] -76489f4c| VST3 48(R3), [V22.S4, V23.S4, V24.S4] -3b48860c| VST3 (R1)(R6), [V27.S2, V28.S2, V29.S2] -e52a000d| ST3 (R23), [V5.B, V6.B, V7.B][2] -6f73004d| ST3 (R27), [V15.H, V16.H, V17.H][6] -9bb1004d| ST3 (R12), [V27.S, V28.S, V29.S][3] -0ca7000d| ST3 (R24), [V12.D, V13.D, V14.D][0] -2a259f0d| ST3 3(R9), [V10.B, V11.B, V12.B][1] -0524860d| ST3 (R0)(R6), [V5.B, V6.B, V7.B][1] -94689a4d| ST3 (R4)(R26), [V20.H, V21.H, V22.H][5] -c2a19f4d| ST3 12(R14), [V2.S, V3.S, V4.S][2] -5fb38c0d| ST3 (R26)(R12), [V31.S, V0.S, V1.S][1] -6da59f4d| ST3 24(R11), [V13.D, V14.D, V15.D][1] -32a7924d| ST3 (R25)(R18), [V18.D, V19.D, V20.D][1] -5b03000c| VST4 (R26), [V27.B8, V28.B8, V29.B8, V30.B8] -cd059f0c| VST4 32(R14), [V13.H4, V14.H4, V15.H4, V16.H4] -8601820c| VST4 (R12)(R2), [V6.B8, V7.B8, V8.B8, V9.B8] -7925200d| ST4 (R11), [V25.B, V26.B, V27.B, V28.B][1] -cd7a204d| ST4 (R22), [V13.H, V14.H, V15.H, V16.H][7] -dfb2204d| ST4 (R22), [V31.S, V0.S, V1.S, V2.S][3] -daa4200d| ST4 (R6), [V26.D, V27.D, V28.D, V29.D][0] -2135bf0d| ST4 4(R9), [V1.B, V2.B, V3.B, V4.B][5] -7727a90d| ST4 (R27)(R9), [V23.B, V24.B, V25.B, V26.B][1] -b4a3bf0d| ST4 16(R29), [V20.S, V21.S, V22.S, V23.S][0] -1ba3ae0d| ST4 (R24)(R14), [V27.S, V28.S, V29.S, V30.S][0] -93a4bf0d| ST4 32(R4), [V19.D, V20.D, V21.D, V22.D][0] -50a6b80d| ST4 (R18)(R24), [V16.D, V17.D, V18.D, V19.D][0] -79b53d2c| VSTNP -20(R11), V13, V25 -d895326c| VSTNP -216(R14), V5, V24 -d1810dac| VSTNP 432(R14), V0, V17 -08728c2c| STP.P (V8, V28), 96(R16) -ac1ba16c| STP.P (V12, V6), -496(R29) -f4fab1ac| STP.P (V20, V30), -464(R23) -c15bbe2d| STP.W (V1, V22), -16(R30) -2422856d| STP.W (V4, V8), 80(R17) -3d5282ad| STP.W (V29, V20), 64(R17) -5df5352d| STP (V29, V29), -84(R10) -5c54286d| STP (V28, V21), -384(R2) -753c11ad| STP (V21, V15), 544(R3) -54e4033c| MOVD.P V20, 62(R2) -aa54137c| MOVD.P V10, -203(R5) -c9d615bc| FMOVS.P F9, -163(R22) -fc471efc| FMOVD.P F28, -28(RSP) -20f78d3c| MOVD.P V0, 223(R25) -028d1b3c| MOVD.W V2, -72(R8) -35be037c| MOVD.W V21, 59(R17) -b98c15bc| FMOVS.W F25, -168(R5) -fd1e11fc| FMOVD.W F29, -239(R23) -13ec9a3c| MOVD.W V19, -82(R0) -b12d123d| MOVD V17, 1163(R13) -d6500b7d| MOVD V22, 1448(R6) -d46e39bd| FMOVS F20, 14700(R22) -b84f30fd| FMOVD F24, 24728(R29) -3cee993d| MOVD V28, 26544(R17) -4348293c| MOVD V3, (R2)(R9.UXTW) -ed7b253c| MOVD V13, (RSP)(R5) -8fc9357c| MOVD V15, (R12)(R21.SXTW) -87f832bc| FMOVS F7, (R4)(R18.SXTX<<2) -f1ea38fc| FMOVD F17, (R23)(R24.SXTX) -1c68a43c| MOVD V28, (R0)(R4) -dcb1023c| MOVD V28, 43(R14) -6701117c| MOVD V7, -240(R11) -85b11bbc| FMOVS F5, -69(R12) -8ea10efc| FMOVD F14, 234(R12) -eab08f3c| MOVD V10, 251(R7) -ca876a2e| VSUB V10.H4, V30.H4, V10.H4 -603be05e| VSUQADD V27, V0 -513a600e| VSUQADD V18.H4, V17.H4 -25231c4e| VTBL V28.B16, [V25.B16, V26.B16], V5.B16 -8c40100e| VTBL V16.B8, [V4.B16, V5.B16, V6.B16], V12.B8 -0462040e| VTBL V4.B8, [V16.B16, V17.B16, V18.B16, V19.B16], V4.B8 -34000f0e| VTBL V15.B8, [V1.B16], V20.B8 -eb301f4e| VTBX V31.B16, [V7.B16, V8.B16], V11.B16 -bb51124e| VTBX V18.B16, [V13.B16, V14.B16, V15.B16], V27.B16 -cf701d0e| VTBX V29.B8, [V6.B16, V7.B16, V8.B16, V9.B16], V15.B8 -4213080e| VTBX V8.B8, [V26.B16], V2.B8 -2b2b114e| VTRN1 V17.B16, V25.B16, V11.B16 -766ada4e| VTRN2 V26.D2, V19.D2, V22.D2 -4152672e| VUABAL V7.H4, V18.H4, V1.S4 -0953296e| VUABAL2 V9.B16, V24.B16, V9.H8 -41756c6e| VUABD V12.H8, V10.H8, V1.H8 -3670ae2e| VUABDL V14.S2, V1.S2, V22.D2 -5401312e| VUADDL V17.B8, V10.B8, V20.H8 -d103286e| VUADDL2 V8.B16, V30.B16, V17.H8 -a92a206e| VUADDLP V21.B16, V9.H8 -b839706e| VUADDLV V13.H8, V24 -ea106d2e| VUADDW V13.H4, V7.S4, V10.S4 -c010726e| VUADDW2 V18.H8, V6.S4, V0.S4 -e7e5517f| UCVTF $47, F15, F7 -49e7376f| UCVTF $9, V26.S4, V9.S4 -4ada617e| UCVTFDD F18, F10 -6b82431e| UCVTF $32, R19, F11 -db84039e| UCVTF $31, R6, F27 -1c72439e| UCVTF $36, R16, F28 -f301231e| UCVTFWS R15, F19 -3503631e| UCVTFWD R25, F21 -e602239e| UCVTFS R23, F6 -d503639e| UCVTFD R30, F21 -ec04606e| VUHADD V0.H8, V7.H8, V12.H8 -3f65782e| VUMAX V24.H4, V9.H4, V31.H4 -afa6232e| VUMAXP V3.B8, V21.B8, V15.B8 -cdaa706e| VUMAXV V22.H8, V13 -736c236e| VUMIN V3.B16, V3.B16, V19.B16 -a0afa62e| VUMINP V6.S2, V29.S2, V0.S2 -3c229e2f| VUMLAL V30.S[0], V17.S2, V28.D2 -9d29a56f| VUMLAL2 V5.S[3], V12.S4, V29.D2 -6c80392e| VUMLAL V25.B8, V3.B8, V12.H8 -4f60692f| VUMLSL V9.H[2], V2.H4, V15.S4 -61a1606e| VUMLSL2 V0.H8, V11.H8, V1.S4 -183e0b0e| VMOV V16.B[5], R24 -c0a89b6f| VUMULL2 V27.S[2], V6.S4, V0.D2 -36c0736e| VUMULL2 V19.H8, V1.H8, V22.S4 -120d757e| VUQADD V21, V8, V18 -3a0c2e2e| VUQADD V14.B8, V1.B8, V26.B8 -0d5d617e| VUQRSHL V1, V8, V13 -4d5cb16e| VUQRSHL V17.S4, V2.S4, V13.S4 -439c382f| VUQRSHRN $8, V2.D2, V3.S2 -9d745c7f| VUQSHL $28, V4, V29 -7b76656f| VUQSHL $37, V19.D2, V27.D2 -774ef37e| VUQSHL V19, V19, V23 -124eb32e| VUQSHL V19.S2, V16.S2, V18.S2 -bc961f6f| VUQSHRN2 $1, V21.S4, V28.H8 -a62ce07e| VUQSUB V0, V5, V6 -0f2dae2e| VUQSUB V14.S2, V8.S2, V15.S2 -b24b217e| VUQXTN V29, V18 -f148216e| VUQXTN2 V7.H8, V17.B16 -7d15a42e| VURHADD V4.S2, V11.S2, V29.S2 -9055fc6e| VURSHL V28.D2, V12.D2, V16.D2 -eb275e7f| VURSHR $34, V31, V11 -c0347c7f| VURSRA $4, V6, V0 -fe44e97e| VUSHL V9, V7, V30 -fa47e86e| VUSHL V8.D2, V31.D2, V26.D2 -95a7262f| VUSHLL $6, V28.S2, V21.D2 -9ca7096f| VUSHLL2 $1, V28.B16, V28.H8 -8a07527f| VUSHR $46, V28, V10 -c7076b6f| VUSHR $21, V30.D2, V7.D2 -8d39e07e| VUSQADD V12, V13 -f716727f| VUSRA $14, V23, V23 -3f14066f| VBIC $193, V31.S4 -b423ac2e| VUSUBL V12.S2, V29.S2, V20.D2 -7c22736e| VUSUBL2 V19.H8, V19.H8, V28.S4 -76317d2e| VUSUBW V29.H4, V11.S4, V22.S4 -8f302a6e| VUSUBW2 V10.B16, V4.H8, V15.H8 -c5a4286f| VUSHLL2 $8, V6.S4, V5.D2 -d3198c0e| VUZP1 V12.S2, V14.S2, V19.S2 -c05bdb4e| VUZP2 V27.D2, V30.D2, V0.D2 -362b610e| VXTN V25.S4, V22.H4 -0c29214e| VXTN2 V8.H8, V12.B16 -2b39c64e| VZIP1 V6.D2, V9.D2, V11.D2 -9500091a| ADCW R9, R4, R21 -c2001a9a| ADC R26, R6, R2 -6a02163a| ADCSW R22, R19, R10 -0c0118ba| ADCS R24, R8, R12 -b1c42b0b| ADDW R11.SXTW<<1, R5, R17 -bf15368b| ADD R22.UXTB<<5, R13, RSP -be1f468b| ADD R6>>7, R29, R30 -8f51352b| ADDSW R21.UXTW<<4, R12, R15 -97043eab| ADDS R30.UXTB<<1, R4, R23 -09b00931| ADDSW $620, R0, R9 -4de204ab| ADDS R4<<56, R18, R13 -f6b60912| ANDW $4288675743, R23, R22 -a6d13b92| AND $-2025524839466146845, R13, R6 -1cc0138a| AND R19<<48, R0, R28 -73882072| ANDSW $458759, R3, R19 -b5780af2| ANDS $-9007199256838145, R5, R21 -766c90ea| ANDS R16->27, R3, R22 -a72ac31a| ASRW R3, R21, R7 -ff28d59a| ASR R21, R7, ZR -3e7f0913| ASRW $9, R25, R30 -bafd5493| ASR $20, R13, R26 -302ad21a| ASRW R18, R17, R16 -602bd79a| ASR R23, R27, R0 -4fa4df54| BAL -66270(PC) -a2e9cf15| JMP 30402978(PC) -eff373b3| BFXIL $51, ZR, $10, R15 -9e3e7db3| BFI $3, R20, $16, R30 -87fa41b3| BFXIL $1, R20, $62, R7 -b831f80a| BICW R24@>12, R13, R24 -ffe0ae8a| BIC R14->56, R7, ZR -7c2c276a| BICSW R7<<11, R3, R28 -ccf2fbea| BICS R27@>60, R22, R12 -722cd195| CALL 30485618(PC) -20003fd6| CALL (R1) -e0021fd6| JMP (R23) -80db37d4| BRK $48860 -f25a4335| CBNZW R18, 137943(PC) -5d5376b5| CBNZ R29, 242330(PC) -5ce56834| CBZW R28, 214826(PC) -29b08cb4| CBZ R9, -236159(PC) -e048533a| CCMNW MI, R7, $19, $0 -e7da4fba| CCMN LE, R23, $15, $7 -67f2583a| CCMNW AL, R19, R24, $7 -60a05aba| CCMN GE, R3, R26, $0 -6a3b517a| CCMPW LO, R27, $17, $10 -8a4b55fa| CCMP MI, R28, $21, $10 -ed934b7a| CCMPW LS, ZR, R11, $13 -24414ffa| CCMP MI, R9, R15, $4 -0e169c1a| CSINCW NE, R16, R28, R14 -8264949a| CSINC VS, R4, R20, R2 -b363935a| CSINVW VS, R29, R19, R19 -ff619dda| CSINV VS, R15, R29, ZR -5f3703d5| CLREX $7 -0017c05a| CLSW R24, R0 -8216c0da| CLS R20, R2 -3310c05a| CLZW R1, R19 -6e13c0da| CLZ R27, R14 -7fd02b2b| CMNW R11.SXTW<<4, R3 -5f3928ab| CMN R8.UXTH<<6, R10 -1fb92cb1| CMN $2862, R8 -ff164eab| CMN R14>>5, R23 -ff71256b| CMPW R5.UXTX<<4, R15 -df6034eb| CMP R20.UXTX, R6 -ff776af1| CMP $(2717<<12), RSP -80e4855a| CSNEGW AL, R4, R5, R0 -da3490da| CSNEG LO, R6, R16, R26 -af40c71a| CRC32B R7, R5, R15 -c546cf1a| CRC32H R15, R22, R5 -6148c01a| CRC32W R0, R3, R1 -0f4eda9a| CRC32X R26, R16, R15 -4950d01a| CRC32CB R16, R2, R9 -8155c31a| CRC32CH R3, R12, R1 -835ace1a| CRC32CW R14, R20, R3 -f05fc59a| CRC32CX R5, ZR, R16 -0ae3901a| CSELW AL, R24, R16, R10 -ed51969a| CSEL PL, R15, R22, R13 -ee679f1a| CSETW VC, R14 -ed579f9a| CSET MI, R13 -f2539f5a| CSETMW MI, R18 -ffe39fda| CSINV AL, ZR, ZR, ZR -9d25941a| CSINCW HS, R12, R20, R29 -afb7829a| CSINC LT, R29, R2, R15 -7602895a| CSINVW EQ, R19, R9, R22 -011394da| CSINV NE, R24, R20, R1 -68b7935a| CSNEGW LT, R27, R19, R8 -a32784da| CSNEG HS, R29, R4, R3 -8159a6d4| DCPS1 $13004 -c2d9aad4| DCPS2 $22222 -63ceb7d4| DCPS3 $48755 -bf3903d5| DMB $9 -e003bfd6| DRPS -9f3603d5| DSB $6 -fc76a9ca| EON R9->29, R23, R28 -540f2352| EORW $3758096385, R26, R20 -187e1ed2| EOR $-1, R16, R24 -fd37004a| EORW R0<<13, ZR, R29 -b8c542ca| EOR R2>>49, R13, R24 -e0039fd6| ERET -5f26c193| EXTR $9, R1, R18, ZR -7f2003d5| WFI -ff2a03d5| HINT $87 -804a59d4| HLT $51796 -df3003d5| ISB $0 -10fcdf88| LDARW (R0), R16 -fafcdfc8| LDAR (R7), R26 -30fedf08| LDARB (R17), R16 -63fedf48| LDARH (R19), R3 -82ba7f88| LDAXPW (R20), (R2, R14) -d6917fc8| LDAXP (R14), (R22, R4) -59ff5f88| LDAXRW (R26), R25 -fefe5fc8| LDAXR (R23), R30 -a0fc5f08| LDAXRB (R5), R0 -fafd5f48| LDAXRH (R15), R26 -b8804428| LDNPW 36(R5), R0, R24 -93e969a8| LDNP -360(R12), R26, R19 -caccef28| LDP.P -132(R6), (R10, R19) -7365c3a8| LDP.P 48(R11), (R19, R25) -3106ca29| LDP.W 80(R17), (R17, R1) -0c02f7a9| LDP.W -144(R16), (R12, R0) -41af6529| LDP -212(R26), (R1, R11) -706b65a9| LDP -432(R27), (R16, R26) -746ecf68| LDPSW 120(R19), R27, R20 -c051c669| LDPSW 48(R14), R20, R0 -aded5b69| LDPSW 220(R13), R27, R13 -990457b8| MOVWU.P -144(R4), R25 -bbd556f8| MOVD.P -147(R13), R27 -a45c51b8| MOVWU.W -235(R5), R4 -344c41f8| MOVD.W 20(R1), R20 -2d8755b9| MOVWU 5508(R25), R13 -56e360f9| MOVD 16832(R26), R22 -3b264e38| MOVBU.P 226(R17), R27 -898f5738| MOVBU.W -136(R28), R9 -c44e6839| MOVBU 2579(R22), R4 -2d687738| MOVBU (R1)(R23), R13 -4d475978| MOVHU.P -108(R26), R13 -39de5278| MOVHU.W -211(R17), R25 -9cc54879| MOVHU 1122(R12), R28 -87fb6978| MOVHU (R28)(R9.SXTX<<1), R7 -3967cb38| MOVBW.P 182(R25), R25 -abf69438| MOVB.P -177(R21), R11 -159ed138| MOVBW.W -231(R16), R21 -b63e8038| MOVB.W 3(R21), R22 -4491c939| MOVBW 612(R10), R4 -497e8039| MOVB 31(R18), R9 -7d6bf638| MOVBW (R27)(R22), R29 -e578ba38| MOVB (R7)(R26), R5 -9f06ca78| MOVHW.P 160(R20), ZR -15c59d78| MOVH.P -36(R8), R21 -c07fd278| MOVHW.W -217(R30), R0 -bdec9278| MOVH.W -210(R5), R29 -10e2c979| MOVHW 1264(R16), R16 -54d29d79| MOVH 3816(R18), R20 -eb9484b8| MOVW.P 73(R7), R11 -ba2e8ab8| MOVW.W 162(R21), R26 -ac7f8ab9| MOVW 2684(R29), R12 -a359b3b8| MOVW (R13)(R19.UXTW<<2), R3 -f8b941b8| LDTRW 27(R15), R24 -fc0a4ef8| LDTR 224(R23), R28 -60d84638| LDTRBW 109(R3), R0 -44685978| LDTRH -106(R2), R4 -5379dc38| LDTRSBW -57(R10), R19 -ade99538| LDTRSB -162(R13), R13 -905ac078| LDTRSHW 5(R20), R16 -10898478| LDTRSH 72(R8), R16 -37188eb8| LDTRSW 225(R1), R23 -992351b8| LDURW -238(R28), R25 -c9f155f8| LDUR -161(R14), R9 -76e14e38| LDURBW 238(R11), R22 -47b24478| LDURHW 75(R18), R7 -4020da38| LDURSBW -94(R2), R0 -0dd09e38| LDURSB -19(R0), R13 -8f81d478| LDURSHW -184(R12), R15 -96918378| LDURSH 57(R12), R22 -b2e383b8| LDURSW 62(R29), R18 -d3717f88| LDXPW (R14), (R19, R28) -cb677fc8| LDXP (R30), (R11, R25) -ed7c5f88| LDXRW (R7), R13 -aa7d5fc8| LDXR (R13), R10 -1c7d5f08| LDXRB (R8), R28 -de7f5f48| LDXRH (R30), R30 -1622dc1a| LSLW R28, R16, R22 -cd20d59a| LSL R21, R6, R13 -882957d3| UBFIZ $41, R12, $11, R8 -3320cc1a| LSLW R12, R1, R19 -7320de9a| LSL R30, R3, R19 -af25d31a| LSRW R19, R13, R15 -e426c39a| LSR R3, R23, R4 -e87f0653| LSRW $6, ZR, R8 -85fe5fd3| LSR $31, R20, R5 -0025dc1a| LSRW R28, R8, R0 -6e27c79a| LSR R7, R27, R14 -6d69111b| MADDW R17, R26, R11, R13 -245d0d9b| MADD R13, R23, R9, R4 -85fe1f1b| MNEGW ZR, R20, R5 -9bfc199b| MNEG R25, R4, R27 -13000011| ADDW $0, R0, R19 -e3000091| ADD $0, R7, R3 -986c9e12| MOVW $4294904987, R24 -cb24f092| MOVD $9140618393701842943, R11 -3cbb88d2| MOVD $17881, R28 -e4170232| MOVW $3221225487, R4 -fe636bb2| MOVD $70368742080512, R30 -ed031b2a| MOVW R27, R13 -fb0308aa| MOVD R8, R27 -be3ed1f2| MOVK $(35317<<32), R30 -e0a08312| MOVW $4294959864, R0 -a1a6e592| MOVD $-3257509905472421889, R1 -5260f0d2| MOVD $-9006636304787570688, R18 -a60739d5| MRS $18493, R6 -281a1ed5| MSR R8, S3_6_C1_C10_1 -10f31b1b| MSUBW R27, R28, R24, R16 -46b41a9b| MSUB R26, R13, R2, R6 -ec7f041b| MULW R4, ZR, R12 -147f009b| MUL R0, R24, R20 -f67f692a| MVNW R9>>31, R22 -f2a3f7aa| MVN R23@>40, R18 -fe8b0bcb| NEG R11<<34, R30 -fef710eb| NEGS R16<<61, R30 -e0031b5a| NGCW R27, R0 -e0031dda| NGC R29, R0 -f003167a| NGCSW R22, R16 -e60302fa| NGCS R2, R6 -1f2003d5| NOP -2f51732a| ORNW R19>>20, R9, R15 -9b0facaa| ORN R12->3, R28, R27 -efa40032| ORRW $67044351, R7, R15 -3a0b19b2| ORR $3848290698112, R25, R26 -4b9ec4aa| ORR R4@>39, R18, R11 -f5eaa2f9| PRFM 17872(R23), PSTL3STRM -731df8d8| PRFM -16149(PC), PSTL2STRM -85c194f8| PRFUM -180(R12), PLDL3STRM -c303c05a| RBITW R30, R3 -3000c0da| RBIT R1, R16 -20025fd6| RET R17 -ec08c05a| REVW R7, R12 -180cc0da| REV R0, R24 -4b07c05a| REV16W R26, R11 -7805c0da| REV16 R11, R24 -ea08c0da| REV32 R7, R10 -a90fc0da| REV R29, R9 -fd788213| EXTRW $30, R2, R7, R29 -e1a0cc93| EXTR $40, R12, R7, R1 -792fdc1a| RORW R28, R27, R25 -2b2cc39a| ROR R3, R1, R11 -7e2ec71a| RORW R7, R19, R30 -392edd9a| ROR R29, R17, R25 -47020a5a| SBCW R10, R18, R7 -b7021dda| SBC R29, R21, R23 -7800197a| SBCSW R25, R3, R24 -1e0203fa| SBCS R3, R16, R30 -a6b07393| SBFIZ $13, R5, $45, R6 -94957d93| SBFIZ $3, R12, $38, R20 -ecff5e93| ASR $30, ZR, R12 -a50ddb1a| SDIVW R27, R13, R5 -7c0ec89a| SDIV R8, R19, R28 -9f2003d5| SEV -bf2003d5| SEVL -5953349b| SMADDL R20, R20, R26, R25 -bafc399b| SMNEGL R25, R5, R26 -a5cc289b| SMSUBL R8, R19, R5, R5 -297c579b| SMULH R23, R1, R9 -5e7e299b| SMULL R9, R18, R30 -29fd9f88| STLRW R9, (R9) -fdff9fc8| STLR R29, (RSP) -defe9f08| STLRB R30, (R22) -2ffc9f48| STLRH R15, (R1) -c1e12f88| STLXPW (R1, R24), (R14), R15 -62aa2ec8| STLXP (R2, R10), (R19), R14 -b9fe1b88| STLXRW R25, (R21), R27 -cbff14c8| STLXR R11, (R30), R20 -edfc0608| STLXRB R13, (R7), R6 -8dfe1048| STLXRH R13, (R20), R16 -1a323628| STNPW -80(R16), R12, R26 -b3cb3da8| STNP -40(R29), R18, R19 -52398828| STP.P (R18, R14), 64(R10) -434c95a8| STP.P (R3, R19), 336(R2) -2badbd29| STP.W (R11, R11), -20(R9) -daeabaa9| STP.W (R26, R26), -88(R22) -9bc91529| STP (R27, R18), 172(R12) -eea024a9| STP (R14, R8), -440(R7) -fec514b8| MOVW.P R30, -180(R15) -d21508f8| MOVD.P R18, 129(R14) -7c5c0ab8| MOVW.W R28, 165(R3) -6dec1ff8| MOVD.W R13, -2(R3) -35681eb9| MOVW R21, 7784(R1) -374d35f9| MOVD R23, 27288(R9) -1dd83df8| MOVD R29, (R0)(R29.SXTW<<3) -1b441b38| MOVB.P R27, -76(R0) -d69c0f38| MOVB.W R22, 249(R6) -b7ce0d39| MOVB R23, 883(R21) -2b7b3938| MOVB R11, (R25)(R25) -4e771d78| MOVH.P R14, -41(R26) -64cc0b78| MOVH.W R4, 188(R3) -07b90279| MOVH R7, 348(R8) -2eb91cb8| STTRW -53(R9), R14 -373a1bf8| STTR -77(R17), R23 -d0881138| STTRBW -232(R6), R16 -941a0e78| STTRHW 225(R20), R20 -da3000b8| MOVW R26, 3(R6) -5e921cf8| MOVD R30, -55(R18) -09821e38| MOVB R9, -24(R16) -67d21c78| MOVH R7, -51(R19) -0c352188| STXPW (R12, R13), (R8), R1 -146d26c8| STXP (R20, R27), (R8), R6 -837d1888| STXRW R3, (R12), R24 -f17f1bc8| STXR R17, (RSP), R27 -3b7d0f08| STXRB R27, (R9), R15 -6b7c1f48| STXRH R11, (R3), ZR -70ab204b| SUBW R0.SXTH<<2, R27, R16 -303b20cb| SUB R0.UXTH<<6, R25, R16 -69a909d1| SUB $618, R11, R9 -87384e4b| SUBW R14>>14, R4, R7 -ec720ecb| SUB R14<<28, R23, R12 -2b58256b| SUBSW R5.UXTW<<6, R1, R11 -59e93ceb| SUBS R28.SXTX<<2, R10, R25 -9e7b6ff1| SUBS $(3038<<12), R28, R30 -3e6d196b| SUBSW R25<<27, R9, R30 -54029ceb| SUBS R28->0, R18, R20 -c1f91cd4| SVC $59342 -091e0013| SXTBW R16, R9 -7f1c4093| SXTB R3, ZR -b53c0013| SXTHW R5, R21 -773e4093| SXTH R19, R23 -707f4093| SXTW R27, R16 -df3a2dd5| SYSL $342720, ZR -5f612972| TSTW $4286644223, R10 -bf2007f2| TST $-144115170929541117, R5 -1f11136a| TSTW R19<<4, R8 -5fd10dea| TST R13<<52, R10 -5c826bd3| UBFIZ $21, R18, $33, R28 -ad690c53| UBFXW $12, R13, $15, R13 -3a0f41d3| UBFX $1, R25, $3, R26 -6a197dd3| UBFIZ $3, R11, $7, R10 -520aca1a| UDIVW R10, R18, R18 -0809c89a| UDIV R8, R8, R8 -4e55a69b| UMADDL R6, R21, R10, R14 -99fda59b| UMNEGL R5, R12, R25 -1adabb9b| UMSUBL R27, R22, R16, R26 -177ddf9b| UMULH ZR, R8, R23 -1d7da49b| UMULL R4, R8, R29 -5a1c0053| UXTBW R2, R26 -603c0053| UXTHW R3, R0 -5f2003d5| WFE -7f2003d5| WFI -3f2003d5| YIELD -02b8600e| VABS V0.H4, V2.H4 -c886f94e| VADD V25.D2, V22.D2, V8.D2 -5642740e| VADDHN V20.S4, V18.S4, V22.H4 -3743294e| VADDHN2 V9.H8, V25.H8, V23.B16 -2abef74e| VADDP V23.D2, V17.D2, V10.D2 -18bbb14e| VADDV V24.S4, V24 -1a59284e| AESD V8.B16, V26.B16 -cf48284e| AESE V6.B16, V15.B16 -557a284e| AESIMC V18.B16, V21.B16 -2f6b284e| AESMC V25.B16, V15.B16 -cf1c324e| VAND V18.B16, V6.B16, V15.B16 -c9c6032f| VMVNI $(118<<136), V9.S2 -f1a7012f| VMVNI $(63<<8), V17.H4 -691d600e| VBIC V0.B8, V11.B8, V9.B8 -c31dfe6e| VBIF V30.B16, V14.B16, V3.B16 -c81cb66e| VBIT V22.B16, V6.B16, V8.B16 -701f6b2e| VBSL V11.B8, V27.B8, V16.B8 -7c4b600e| VCLS V27.H4, V28.H4 -ce4a602e| VCLZ V22.H4, V14.H4 -d08de37e| VCMEQ V3, V14, V16 -e98db96e| VCMEQ V25.S4, V15.S4, V9.S4 -6e99a00e| VCMEQ $0, V11.S2, V14.S2 -933d304e| VCMGE V16.B16, V12.B16, V19.B16 -0e88e07e| VCMGE $0, V0, V14 -9b89202e| VCMGE $0, V12.B8, V27.B8 -6a372f4e| VCMGT V15.B16, V27.B16, V10.B16 -128be05e| VCMGT $0, V24, V18 -9189a00e| VCMGT $0, V12.S2, V17.S2 -f734e67e| VCMHI V6, V7, V23 -4d36b82e| VCMHI V24.S2, V18.S2, V13.S2 -003e2b2e| VCMHS V11.B8, V16.B8, V0.B8 -729ae07e| VCMLE $0, V19, V18 -3699206e| VCMLE $0, V9.B16, V22.B16 -d1ab600e| VCMLT $0, V30.H4, V17.H4 -ad8e244e| VCMTST V4.B16, V21.B16, V13.B16 -ef06035e| VMOV V23.B[1], V15 -5007040e| VDUP V26.S[0], V16.S2 -890e0b4e| VDUP R20, V9.B16 -951c276e| VEOR V7.B16, V4.B16, V21.B16 -98d4bf7e| FABD F31, F4, F24 -bcd4ad6e| VFABD V13.S4, V5.S4, V28.S4 -78f8e04e| FABS V3.D2, V24.D2 -8cc0201e| FABSS F4, F12 -9ac1601e| FABSD F12, F26 -3aee307e| FACGE F16, F17, F26 -41ed352e| VFACGE V21.S2, V10.S2, V1.S2 -35edaf7e| FACGT F15, F9, F21 -02efe36e| VFACGT V3.D2, V24.D2, V2.D2 -21d6664e| FADD V6.D2, V17.D2, V1.D2 -5e282e1e| FADDS F14, F2, F30 -4d2a621e| FADDD F2, F18, F13 -7cd8707e| FADDP V3.D2, F28 -5dd4386e| VFADDP V24.S4, V2.S4, V29.S4 -69363e1e| FCCMPS LO, F30, F19, $9 -c8b56a1e| FCCMPD LT, F10, F14, $8 -d1f5271e| FCCMPES AL, F7, F14, $1 -3645751e| FCCMPED MI, F21, F9, $6 -21e6735e| FCMEQ F19, F17, F1 -b6dba05e| FCMEQ $0, F29, F22 -49d8a04e| VFCMEQ $0, V2.S4, V9.S4 -2ee5667e| FCMGE F6, F9, F14 -4ee7766e| VFCMGE V22.D2, V26.D2, V14.D2 -4bcba07e| FCMGE $0, F26, F11 -11c9a02e| VFCMGE $0, V8.S2, V17.S2 -81e4a97e| FCMGT F9, F4, F1 -d3e4b56e| VFCMGT V21.S4, V6.S4, V19.S4 -efc8e05e| FCMGT $0, F7, F15 -3ec9e04e| VFCMGT $0, V9.D2, V30.D2 -38d9a07e| FCMLE $0, F9, F24 -7dd9a02e| VFCMLE $0, V11.S2, V29.S2 -bae8a05e| FCMLT $0, F5, F26 -a2eaa04e| VFCMLT $0, V21.S4, V2.S4 -60212f1e| FCMPS F15, F11 -a8233a1e| FCMPS $(0.0), F29 -a020641e| FCMPD F4, F5 -e820701e| FCMPD $(0.0), F7 -b0203a1e| FCMPES F26, F5 -78203d1e| FCMPES $(0.0), F3 -70226e1e| FCMPED F14, F19 -3821601e| FCMPED $(0.0), F9 -06de241e| FCSELS LE, F16, F4, F6 -51de761e| FCSELD LE, F18, F22, F17 -5e42e21e| FCVTHS F18, F30 -b9c1e21e| FCVTHD F13, F25 -58c0231e| FCVTSH F2, F24 -9bc2221e| FCVTSD F20, F27 -2bc3631e| FCVTDH F25, F11 -f640621e| FCVTDS F7, F22 -caca215e| FCVTAS F22, F10 -5ec9210e| VFCVTAS V10.S2, V30.S2 -0302241e| FCVTASW F16, R3 -c103249e| FCVTAS F30, R1 -3003641e| FCVTASW F25, R16 -6201649e| FCVTAS F11, R2 -d3c9217e| FCVTAU F14, F19 -3bc8212e| VFCVTAU V1.S2, V27.S2 -0802251e| FCVTAUW F16, R8 -5f02259e| FCVTAU F18, ZR -2801651e| FCVTAUW F9, R8 -f200659e| FCVTAU F7, R18 -d179610e| VFCVTL V14.S2, V17.D2 -347b614e| VFCVTL2 V25.S4, V20.D2 -08b9615e| FCVTMS F8, F8 -f000301e| FCVTMSW F7, R16 -8002309e| FCVTMS F20, R0 -5202701e| FCVTMSW F18, R18 -c803709e| FCVTMS F30, R8 -1cbb217e| FCVTMU F24, F28 -d1b9212e| VFCVTMU V14.S2, V17.S2 -2e02311e| FCVTMUW F17, R14 -d003319e| FCVTMU F30, R16 -ce03711e| FCVTMUW F30, R14 -0801719e| FCVTMU F8, R8 -4c6b210e| VFCVTN V26.S4, V12.H4 -6869214e| VFCVTN2 V11.S4, V8.H8 -2faa615e| FCVTNS F17, F15 -33aa614e| VFCVTNS V17.D2, V19.D2 -d303201e| FCVTNSW F30, R19 -4001209e| FCVTNS F10, R0 -b202601e| FCVTNSW F21, R18 -c603609e| FCVTNS F30, R6 -8ea8217e| FCVTNU F4, F14 -cc01211e| FCVTNUW F14, R12 -3a00219e| FCVTNU F1, R26 -2002611e| FCVTNUW F17, R0 -ff01619e| FCVTNU F15, ZR -1baba15e| FCVTPS F24, F27 -9d00281e| FCVTPSW F4, R29 -eb02289e| FCVTPS F23, R11 -3503681e| FCVTPSW F25, R21 -4301689e| FCVTPS F10, R3 -63aba17e| FCVTPU F27, F3 -caa8a12e| VFCVTPU V6.S2, V10.S2 -7702291e| FCVTPUW F19, R23 -b503299e| FCVTPU F29, R21 -2f03691e| FCVTPUW F25, R15 -5b01699e| FCVTPU F10, R27 -7369617e| FCVTXN F11, F19 -6b6b612e| VFCVTXN V27.D2, V11.S2 -f268616e| VFCVTXN2 V7.D2, V18.S4 -bcff7b5f| FCVTZS $5, F29, F28 -19bbe15e| FCVTZSDD F24, F25 -c6b9e14e| FCVTZS V14.D2, V6.D2 -e9fc189e| FCVTZS $1, F7, R9 -6661589e| FCVTZS $40, F11, R6 -9702381e| FCVTZSSW F20, R23 -ed00389e| FCVTZSS F7, R13 -3a01781e| FCVTZSDW F9, R26 -8801789e| FCVTZSD F12, R8 -a5ff2e2f| FCVTZU $18, V29.S2, V5.S2 -5bbbe17e| FCVTZUDD F26, F27 -1a74199e| FCVTZU $35, F0, R26 -e391599e| FCVTZU $28, F15, R3 -b203391e| FCVTZUSW F29, R18 -ed01399e| FCVTZUS F15, R13 -c200791e| FCVTZUDW F6, R2 -5402799e| FCVTZUD F18, R20 -1aff2b6e| FDIV V11.S4, V24.S4, V26.S4 -171a391e| FDIVS F25, F16, F23 -7d196b1e| FDIVD F11, F11, F29 -f9721f1f| FMADDS F31, F28, F23, F25 -7070551f| FMADDD F21, F28, F3, F16 -05f7624e| FMAX V2.D2, V24.D2, V5.D2 -88493d1e| FMAXS F29, F12, F8 -4a496d1e| FMAXD F13, F10, F10 -5068321e| FMAXNMS F18, F2, F16 -a66a761e| FMAXNMD F22, F21, F6 -0ccb707e| FMAXNMP V24.D2, F12 -6ec66f6e| VFMAXNMP V15.D2, V19.D2, V14.D2 -41f8307e| FMAXP V2.S2, F1 -05f72a6e| VFMAXP V10.S4, V24.S4, V5.S4 -aa5b231e| FMINS F3, F29, F10 -d6596a1e| FMIND F10, F14, F22 -15c4b24e| FMINNM V18.S4, V0.S4, V21.S4 -6279281e| FMINNMS F8, F11, F2 -af7b6a1e| FMINNMD F10, F29, F15 -7dc9f07e| FMINNMP V11.D2, F29 -dfc6bb6e| VFMINNMP V27.S4, V22.S4, V31.S4 -56c8b06e| FMINNMV V2.S4, F22 -0ff8f07e| FMINP V0.D2, F15 -a211c55f| FMLA V5.D[0], F13, F2 -0dce224e| VFMLA V2.S4, V16.S4, V13.S4 -4c5ba15f| FMLS V1.S[3], F26, F12 -8953ba0f| VFMLS V26.S[1], V28.S2, V9.S2 -09cdbd4e| VFMLS V29.S4, V8.S4, V9.S4 -97f7044f| FMOV $-7., V23.S4 -dff4006f| FMOV $2.75, V31.D2 -c543201e| FMOVS F30, F5 -1740601e| FMOVD F0, F23 -a100271e| FMOVS R5, F1 -f102261e| FMOVS F23, R17 -b302679e| FMOVD R21, F19 -4001af9e| FMOV R10, V0.D[1] -db01669e| FMOVD F14, R27 -8300ae9e| FMOV V4.D[1], R3 -1870331e| FMOVS $-6.75, F24 -08507d1e| FMOVD $-0.8125, F8 -5cbf0c1f| FMSUBS F12, F15, F26, F28 -89e3501f| FMSUBD F16, F24, F28, F9 -3a93c95f| FMULD V9.D[0], F25, F26 -5a90ae4f| FMUL V14.S[1], V2.S4, V26.S4 -ba0a2f1e| FMULS F15, F21, F26 -5b0a7c1e| FMULD F28, F18, F27 -e991c07f| FMULX V0.D[0], F15, F9 -be989c6f| VFMULX V28.S[2], V5.S4, V30.S4 -d3dc7a5e| FMULX F26, F6, F19 -d4de7f4e| VFMULX V31.D2, V22.D2, V20.D2 -8e41211e| FNEGS F12, F14 -dc42611e| FNEGD F22, F28 -cb362e1f| FNMADDS F14, F13, F22, F11 -6441791f| FNMADDD F25, F16, F11, F4 -36ed291f| FNMSUBS F9, F27, F9, F22 -35b27a1f| FNMSUBD F26, F12, F17, F21 -9388301e| FNMULS F16, F4, F19 -c088711e| FNMULD F17, F6, F0 -e8daa15e| FRECPE F23, F8 -a9fc395e| FRECPS F25, F5, F9 -49fe284e| VFRECPS V8.S4, V18.S4, V9.S4 -85f8a15e| FRECPX F4, F5 -ee43261e| FRINTAS F31, F14 -7042661e| FRINTAD F19, F16 -2b98a16e| FRINTI V1.S4, V11.S4 -fac2271e| FRINTIS F23, F26 -76c3671e| FRINTID F27, F22 -7942251e| FRINTMS F19, F25 -8742651e| FRINTMD F20, F7 -fc8a214e| FRINTN V23.S4, V28.S4 -c041241e| FRINTNS F14, F0 -b241641e| FRINTND F13, F18 -c588a14e| FRINTP V6.S4, V5.S4 -6ec2241e| FRINTPS F19, F14 -ddc0641e| FRINTPD F6, F29 -1a9a616e| FRINTX V16.D2, V26.D2 -7c41271e| FRINTXS F11, F28 -d243671e| FRINTXD F30, F18 -b49aa14e| FRINTZ V21.S4, V20.S4 -5bc0251e| FRINTZS F2, F27 -43c1651e| FRINTZD F10, F3 -3bdba17e| FRSQRTE F25, F27 -9ddba12e| VFRSQRTE V28.S2, V29.S2 -1ffee65e| FRSQRTS F6, F16, F31 -8bfdb54e| VFRSQRTS V21.S4, V12.S4, V11.S4 -33c1211e| FSQRTS F9, F19 -a5c0611e| FSQRTD F5, F5 -a2d7b74e| FSUB V23.S4, V29.S4, V2.S4 -a338301e| FSUBS F16, F5, F3 -e139681e| FSUBD F8, F15, F1 -96170e6e| VMOV V28.H[1], V22.H[3] -791c014e| VMOV R3, V25.B[0] -cf79404c| VLD1 (R14), [V15.S4] -75a6404c| VLD1 (R19), [V21.H8, V22.H8] -ed62404c| VLD1 (R23), [V13.B16, V14.B16, V15.B16] -392a400c| VLD1 (R17), [V25.S2, V26.S2, V27.S2, V28.S2] -cd7cdf4c| VLD1.P 16(R6), [V13.D2] -f677ce4c| VLD1.P (RSP)(R14), [V22.H8] -d4a3df0c| VLD1.P 16(R30), [V20.B8, V21.B8] -8ba1d90c| VLD1.P (R12)(R25), [V11.B8, V12.B8] -396fdf0c| VLD1.P 24(R25), [V25.D1, V26.D1, V27.D1] -4c64db0c| VLD1.P (R2)(R27), [V12.H4, V13.H4, V14.H4] -3f2adf4c| VLD1.P 64(R17), [V31.S4, V0.S4, V1.S4, V2.S4] -b329ce4c| VLD1.P (R13)(R14), [V19.S4, V20.S4, V21.S4, V22.S4] -aa02400d| VLD1 (R21), V10.B[0] -7980404d| VLD1 (R3), V25.S[2] -5884404d| VLD1 (R2), V24.D[1] -f203df4d| VLD1.P 1(RSP), V18.B[8] -3519c40d| VLD1.P (R9)(R4), V21.B[6] -ed59df0d| VLD1.P 2(R15), V13.H[3] -9e52d90d| VLD1.P (R20)(R25), V30.H[2] -cd93df4d| VLD1.P 4(R30), V13.S[3] -5982cb4d| VLD1.P (R18)(R11), V25.S[2] -4f84df4d| VLD1.P 8(R2), V15.D[1] -2d85d50d| VLD1.P (R9)(R21), V13.D[0] -33c2400d| VLD1R (R17), [V19.B8] -e2c8df4d| VLD1R 4(R7), [V2.S4] -83c2c44d| VLD1R (R20)(R4), [V3.B16] -5487400c| VLD2 (R26), [V20.H4, V21.H4] -e08adf0c| VLD2 16(R23), [V0.S2, V1.S2] -768ac40c| VLD2 (R19)(R4), [V22.S2, V23.S2] -4c0f604d| LD2 (R26), [V12.B, V13.B][11] -e043604d| LD2 (RSP), [V0.H, V1.H][4] -c281600d| LD2 (R14), [V2.S, V3.S][0] -e585600d| LD2 (R15), [V5.D, V6.D][0] -2c1aff4d| LD2 2(R17), [V12.B, V13.B][14] -820bfd4d| LD2 (R28)(R29), [V2.B, V3.B][10] -d593ff0d| LD2 8(R30), [V21.S, V22.S][1] -6780ea0d| LD2 (R3)(R10), [V7.S, V8.S][0] -3484ff4d| LD2 16(R1), [V20.D, V21.D][1] -6a86ee4d| LD2 (R19)(R14), [V10.D, V11.D][1] -e4c7604d| VLD2R (RSP), [V4.H8, V5.H8] -69c8ff0d| VLD2R 8(R3), [V9.S2, V10.S2] -52ccf30d| VLD2R (R2)(R19), [V18.D1, V19.D1] -9e4b404c| VLD3 (R28), [V30.S4, V31.S4, V0.S4] -0440df4c| VLD3 48(R0), [V4.B16, V5.B16, V6.B16] -0f49cf0c| VLD3 (R8)(R15), [V15.S2, V16.S2, V17.S2] -b22e400d| LD3 (R21), [V18.B, V19.B, V20.B][3] -9473400d| LD3 (R28), [V20.H, V21.H, V22.H][2] -1da0404d| LD3 (R0), [V29.S, V30.S, V31.S][2] -21a5404d| LD3 (R9), [V1.D, V2.D, V3.D][1] -3b23df0d| LD3 3(R25), [V27.B, V28.B, V29.B][0] -0937c60d| LD3 (R24)(R6), [V9.B, V10.B, V11.B][5] -926bcb4d| LD3 (R28)(R11), [V18.H, V19.H, V20.H][5] -f5a1df4d| LD3 12(R15), [V21.S, V22.S, V23.S][2] -dba3c44d| LD3 (R30)(R4), [V27.S, V28.S, V29.S][2] -12a5df0d| LD3 24(R8), [V18.D, V19.D, V20.D][0] -daa7d30d| LD3 (R30)(R19), [V26.D, V27.D, V28.D][0] -3beb400d| VLD3R (R25), [V27.S2, V28.S2, V29.S2] -cde4df4d| VLD3R 6(R6), [V13.H8, V14.H8, V15.H8] -a4efc44d| VLD3R (R29)(R4), [V4.D2, V5.D2, V6.D2] -fc0a400c| VLD4 (R23), [V28.S2, V29.S2, V30.S2, V31.S2] -ae05df0c| VLD4 32(R13), [V14.H4, V15.H4, V16.H4, V17.H4] -cb07c84c| VLD4 (R30)(R8), [V11.H8, V12.H8, V13.H8, V14.H8] -1825604d| LD4 (R8), [V24.B, V25.B, V26.B, V27.B][9] -2869604d| LD4 (R9), [V8.H, V9.H, V10.H, V11.H][5] -07b2600d| LD4 (R16), [V7.S, V8.S, V9.S, V10.S][1] -9fa4600d| LD4 (R4), [V31.D, V0.D, V1.D, V2.D][0] -de22ff0d| LD4 4(R22), [V30.B, V31.B, V0.B, V1.B][0] -6a36ed4d| LD4 (R19)(R13), [V10.B, V11.B, V12.B, V13.B][13] -23a2ff4d| LD4 16(R17), [V3.S, V4.S, V5.S, V6.S][2] -22a0fe4d| LD4 (R1)(R30), [V2.S, V3.S, V4.S, V5.S][2] -7ca4ff4d| LD4 32(R3), [V28.D, V29.D, V30.D, V31.D][1] -03a7ec4d| LD4 (R24)(R12), [V3.D, V4.D, V5.D, V6.D][1] -b9ee600d| VLD4R (R21), [V25.D1, V26.D1, V27.D1, V28.D1] -03e8ff0d| VLD4R 16(R0), [V3.S2, V4.S2, V5.S2, V6.S2] -e7e3f24d| VLD4R (RSP)(R18), [V7.B16, V8.B16, V9.B16, V10.B16] -451a4e2c| VLDNP 112(R18), V6, V5 -01236f6c| VLDNP -272(R24), V8, V1 -204041ac| VLDNP 32(R1), V16, V0 -1b21cc2c| LDP.P 96(R8), (V27, V8) -41ccc06c| LDP.P 8(R2), (V1, V19) -65b8e6ac| LDP.P -816(R3), (V5, V14) -a58bed2d| LDP.W -148(R29), (V5, V2) -d8a3c46d| LDP.W 72(R30), (V24, V8) -dc82c0ad| LDP.W 16(R22), (V28, V0) -eda7782d| LDP -60(RSP), (V13, V9) -041b6c6d| LDP -320(R24), (V4, V6) -17ea6bad| LDP -656(R16), (V23, V26) -4e14433c| MOVD.P 49(R2), V14 -cd844e7c| MOVD.P 232(R6), V13 -99945dbc| FMOVS.P -39(R4), F25 -170556fc| FMOVD.P -160(R8), F23 -3115d53c| MOVD.P -175(R9), V17 -3c6d403c| MOVD.W 6(R9), V28 -f8fc527c| MOVD.W -209(R7), V24 -776c58bc| FMOVS.W -122(R3), F23 -075f57fc| FMOVD.W -139(R24), F7 -28cdc33c| MOVD.W 60(R9), V8 -40a15f3d| MOVD 2024(R10), V0 -3b8c597d| MOVD 3270(R1), V27 -28f958bd| FMOVS 6392(R9), F8 -852d6ffd| FMOVD 24152(R12), F5 -e149ea3d| MOVD 43296(R15), V1 -807f7c1c| FMOVS 254972(PC), F0 -e7a61c5c| FMOVD 58679(PC), F7 -4bca773c| MOVD (R18)(R23.SXTW), V11 -8d69623c| MOVD (R12)(R2), V13 -cef8797c| MOVD (R6)(R25.SXTX<<1), V14 -b7497bfc| FMOVD (R13)(R27.UXTW), F23 -dbdbfc3c| MOVD (R30)(R28.SXTW<<4), V27 -1a60553c| VLDUR -170(R0), V26 -74f3477c| VLDUR 127(R27), V20 -f46249bc| VLDUR 150(R23), V20 -b8015bfc| VLDUR -80(R13), V24 -3372de3c| VLDUR -25(R17), V19 -04972c0e| VMLA V12.B8, V24.B8, V4.B8 -f0051b5e| VMOV V15.B[13], V16 -7f76146e| VMOV V19.S[3], V31.S[2] -6c1cb60e| VORR V22.B8, V3.B8, V12.B8 -ae3f1e0e| VMOV V29.H[7], R14 -f8e5004f| VMOVI $15, V24.B16 -0355010f| VORR $(40<<16), V3.S2 -4825020f| VMOVI $(74<<8), V8.S2 -64d7040f| VMOVI $(155<<144), V4.S2 -46e6062f| VMOVI $-280379759984896, V6 -bde6056f| VMOVI $-71776123339472641, V29.D2 -789f350e| VMUL V21.B8, V27.B8, V24.B8 -7b5b202e| VMVN V27.B8, V27.B8 -2dd4066f| VMVNI $(193<<144), V13.S4 -8266012f| VMVNI $(52<<24), V2.S2 -1025022f| VMVNI $(72<<8), V16.S2 -eabba06e| VNEG V31.S4, V10.S4 -7e5a206e| VMVN V19.B16, V30.B16 -6a1fea0e| VORN V10.B8, V27.B8, V10.B8 -b406010f| VMOVI $53, V20.S2 -f564040f| VMOVI $(135<<24), V21.S2 -b21cb80e| VORR V24.B8, V5.B8, V18.B8 -2b437a2e| VRADDHN V26.S4, V25.S4, V11.H4 -6d402c6e| VRADDHN2 V12.H8, V3.H8, V13.B16 -655a606e| VRBIT V19.B16, V5.B16 -5108202e| VREV32 V2.B8, V17.B8 -750a200e| VREV64 V19.B8, V21.B8 -f88f0b0f| VRSHRN $5, V31.H8, V24.B8 -8263236e| VRSUBHN2 V3.H8, V28.H8, V2.B16 -787c320e| VSABA V18.B8, V3.B8, V24.B8 -f551220e| VSABAL V2.B8, V15.B8, V21.H8 -b5766d0e| VSABD V13.H4, V21.H4, V21.H4 -9270240e| VSABDL V4.B8, V4.B8, V18.H8 -4d71384e| VSABDL2 V24.B16, V10.B16, V13.H8 -8f6a600e| VSADALP V20.H4, V15.S2 -e501750e| VSADDL V21.H4, V15.H4, V5.S4 -5202ab4e| VSADDL2 V11.S4, V18.S4, V18.D2 -7029200e| VSADDLP V11.B8, V16.H4 -3913710e| VSADDW V17.H4, V25.S4, V25.S4 -d7e4575f| SCVTF $41, F6, F23 -c6db215e| SCVTFSS F30, F6 -17d8214e| SCVTF V0.S4, V23.S4 -62c4021e| SCVTF $15, R3, F2 -f5cd421e| SCVTF $13, R15, F21 -6128029e| SCVTF $54, R3, F1 -9a7c429e| SCVTF $33, R4, F26 -6102221e| SCVTFWS R19, F1 -0b03621e| SCVTFWD R24, F11 -ed01229e| SCVTFS R15, F13 -6f02629e| SCVTFD R19, F15 -ac03055e| SHA1C V5.S4, V29, V12 -e309285e| SHA1H V15, V3 -2a221b5e| SHA1M V27.S4, V17, V10 -a013185e| SHA1P V24.S4, V29, V0 -6032005e| SHA1SU0 V0.S4, V19.S4, V0.S4 -f918285e| SHA1SU1 V7.S4, V25.S4 -fb50035e| SHA256H2 V3.S4, V7, V27 -6d421c5e| SHA256H V28.S4, V19, V13 -c12b285e| SHA256SU0 V30.S4, V1.S4 -6362095e| SHA256SU1 V9.S4, V19.S4, V3.S4 -a805bb0e| VSHADD V27.S2, V13.S2, V8.S2 -783b616e| VSHLL2 $16, V27.H8, V24.S4 -48841b0f| VSHRN $5, V2.S4, V8.H4 -a924bc4e| VSHSUB V28.S4, V5.S4, V9.S4 -1557717f| VSLI $49, V24, V21 -2a56456f| VSLI $5, V17.D2, V10.D2 -7c663b0e| VSMAX V27.B8, V19.B8, V28.B8 -b5a7694e| VSMAXP V9.H8, V29.H8, V21.H8 -8ea8b04e| VSMAXV V4.S4, V14 -936cb44e| VSMIN V20.S4, V4.S4, V19.S4 -15af7e4e| VSMINP V30.H8, V24.H8, V21.H8 -3e81694e| VSMLAL2 V9.H8, V9.H8, V30.S4 -29a26d0e| VSMLSL V13.H4, V17.H4, V9.S4 -442e0b4e| SMOV V18.B[5], R4 -e1a0540f| VSMULL V4.H[1], V7.H4, V1.S4 -5eaa604f| VSMULL2 V0.H[6], V18.H8, V30.S4 -4cc32d4e| VSMULL2 V13.B16, V26.B16, V12.H8 -1e7a205e| VSQABS V16, V30 -e67ae04e| VSQABS V23.D2, V6.D2 -a80ded5e| VSQADD V13, V13, V8 -e60dae4e| VSQADD V14.S4, V15.S4, V6.S4 -fe33570f| VSQDMLAL V7.H[1], V31.H4, V30.S4 -ee90b64e| VSQDMLAL2 V22.S4, V7.S4, V14.D2 -ce79a05f| VSQDMLSL V0.S[3], V14, V14 -d5b2a14e| VSQDMLSL2 V1.S4, V22.S4, V21.D2 -51cb575f| VSQDMULH V7.H[5], V26, V17 -0cb5b54e| VSQDMULH V21.S4, V8.S4, V12.S4 -95d0760e| VSQDMULL V22.H4, V4.H4, V21.S4 -a1d37c4e| VSQDMULL2 V28.H8, V29.H8, V1.S4 -d679e07e| VSQNEG V14, V22 -3f78602e| VSQNEG V1.H4, V31.H4 -80b4717e| VSQRDMULH V17, V4, V0 -4cb76e2e| VSQRDMULH V14.H4, V26.H4, V12.H4 -aa5ce95e| VSQRSHL V9, V5, V10 -d25fb74e| VSQRSHL V23.S4, V30.S4, V18.S4 -998c0c6f| VSQRSHRUN2 $4, V4.H8, V25.B16 -4375605f| VSQSHL $32, V10, V3 -de743f0f| VSQSHL $31, V6.S2, V30.S2 -a84d675e| VSQSHL V7, V13, V8 -674dbe4e| VSQSHL V30.S4, V11.S4, V7.S4 -5165587f| VSQSHLU $24, V10, V17 -b464042f| VMVNI $(133<<24), V20.S2 -2086207f| VSQSHRUN $32, V17, V0 -8a851a2f| VSQSHRUN $6, V12.S4, V10.H4 -652c255e| VSQSUB V5, V3, V5 -632eb30e| VSQSUB V19.S2, V19.S2, V3.S2 -104ba15e| VSQXTN V24, V16 -2249214e| VSQXTN2 V9.H8, V2.B16 -1c14360e| VSRHADD V22.B8, V0.B8, V28.B8 -8044076f| VMVNI $(228<<16), V0.S4 -3a57ed5e| VSRSHL V13, V25, V26 -2c56ef4e| VSRSHL V15.D2, V17.D2, V12.D2 -9627140f| VSRSHR $12, V28.H4, V22.H4 -bd37565f| VSRSRA $42, V29, V29 -db34594f| VSRSRA $39, V6.D2, V27.D2 -4546a10e| VSSHL V1.S2, V18.S2, V5.S2 -aca7020f| VMOVI $(93<<8), V12.H4 -e004675f| VSSHR $25, V7, V0 -e5057f4f| VSSHR $1, V15.D2, V5.D2 -1b15595f| VSSRA $39, V8, V27 -ba15250f| VSSRA $27, V13.S2, V26.S2 -3620330e| VSSUBL V19.B8, V1.B8, V22.H8 -c1316d4e| VSSUBW2 V13.H8, V14.S4, V1.S4 -8a76000c| VST1 [V10.H4], (R20) -10a5004c| VST1 [V16.H8, V17.H8], (R8) -ab6b004c| VST1 [V11.S4, V12.S4, V13.S4], (R29) -8d2b004c| VST1 [V13.S4, V14.S4, V15.S4, V16.S4], (R28) -8d7d9f0c| VST1.P [V13.D1], 8(R12) -eb73840c| VST1.P [V11.B8], (RSP)(R4) -48a69f4c| VST1.P [V8.H8, V9.H8], 32(R18) -dca19b4c| VST1.P [V28.B16, V29.B16], (R14)(R27) -7c699f4c| VST1.P [V28.S4, V29.S4, V30.S4], 48(R11) -da6d870c| VST1.P [V26.D1, V27.D1, V28.D1], (R14)(R7) -7f279f0c| VST1.P [V31.H4, V0.H4, V1.H4, V2.H4], 32(R27) -4421810c| VST1.P [V4.B8, V5.B8, V6.B8, V7.B8], (R10)(R1) -a615004d| VST1 V6.B[13], (R13) -ce92000d| VST1 V14.S[1], (R22) -c985000d| VST1 V9.D[0], (R14) -380f9f0d| VST1.P V24.B[3], 1(R25) -de0b944d| VST1.P V30.B[10], (R30)(R20) -3141880d| VST1.P V17.H[0], (R9)(R8) -8e939f0d| VST1.P V14.S[1], 4(R28) -c890870d| VST1.P V8.S[1], (R6)(R7) -9f869f4d| VST1.P V31.D[1], 8(R20) -38879b4d| VST1.P V24.D[1], (R25)(R27) -4181004c| VST2 (R10), [V1.B16, V2.B16] -d6819f0c| VST2 16(R14), [V22.B8, V23.B8] -bf808a0c| VST2 (R5)(R10), [V31.B8, V0.B8] -bd0e204d| ST2 (R21), [V29.B, V30.B][11] -4551204d| ST2 (R10), [V5.H, V6.H][6] -9982204d| ST2 (R20), [V25.S, V26.S][2] -ea86200d| ST2 (R23), [V10.D, V11.D][0] -7b02bf0d| ST2 2(R19), [V27.B, V28.B][0] -c000a04d| ST2 (R6)(R0), [V0.B, V1.B][8] -fb59a40d| ST2 (R15)(R4), [V27.H, V28.H][3] -f880bf0d| ST2 8(R7), [V24.S, V25.S][0] -f582ac4d| ST2 (R23)(R12), [V21.S, V22.S][2] -9c86bf4d| ST2 16(R20), [V28.D, V29.D][1] -3386b14d| ST2 (R17)(R17), [V19.D, V20.D][1] -c0469f0c| VST3 24(R22), [V0.H4, V1.H4, V2.H4] -2243820c| VST3 (R25)(R2), [V2.B8, V3.B8, V4.B8] -c629000d| ST3 (R14), [V6.B, V7.B, V8.B][2] -4f6a004d| ST3 (R18), [V15.H, V16.H, V17.H][5] -72a0004d| ST3 (R3), [V18.S, V19.S, V20.S][2] -c1a4000d| ST3 (R6), [V1.D, V2.D, V3.D][0] -312e9f0d| ST3 3(R17), [V17.B, V18.B, V19.B][3] -9a28934d| ST3 (R4)(R19), [V26.B, V27.B, V28.B][10] -a1799f4d| ST3 6(R13), [V1.H, V2.H, V3.H][7] -3ba29f0d| ST3 12(R17), [V27.S, V28.S, V29.S][0] -80b2870d| ST3 (R20)(R7), [V0.S, V1.S, V2.S][1] -f6a49f4d| ST3 24(R7), [V22.D, V23.D, V24.D][1] -8fa69a4d| ST3 (R20)(R26), [V15.D, V16.D, V17.D][1] -ee09000c| VST4 (R15), [V14.S2, V15.S2, V16.S2, V17.S2] -1e07880c| VST4 (R24)(R8), [V30.H4, V31.H4, V0.H4, V1.H4] -6426204d| ST4 (R19), [V4.B, V5.B, V6.B, V7.B][9] -4ea2204d| ST4 (R18), [V14.S, V15.S, V16.S, V17.S][2] -05a6200d| ST4 (R16), [V5.D, V6.D, V7.D, V8.D][0] -5b21bf0d| ST4 4(R10), [V27.B, V28.B, V29.B, V30.B][0] -ce28a00d| ST4 (R6)(R0), [V14.B, V15.B, V16.B, V17.B][2] -767bbf4d| ST4 8(R27), [V22.H, V23.H, V24.H, V25.H][7] -747aa24d| ST4 (R19)(R2), [V20.H, V21.H, V22.H, V23.H][7] -24b0bf0d| ST4 16(R1), [V4.S, V5.S, V6.S, V7.S][1] -c7b1a90d| ST4 (R14)(R9), [V7.S, V8.S, V9.S, V10.S][1] -9fa4bf4d| ST4 32(R4), [V31.D, V0.D, V1.D, V2.D][1] -70a4ab4d| ST4 (R3)(R11), [V16.D, V17.D, V18.D, V19.D][1] -89fe2e2c| VSTNP -140(R20), V31, V9 -bfd31d6c| VSTNP 472(R29), V20, V31 -ddf301ac| VSTNP 48(R30), V28, V29 -14f6ac2c| STP.P (V20, V29), -156(R16) -251db76c| STP.P (V5, V7), -144(R9) -e51fb7ac| STP.P (V5, V7), -288(RSP) -5c90852d| STP.W (V28, V4), 44(R2) -4c51a56d| STP.W (V12, V20), -432(R10) -265d8aad| STP.W (V6, V23), 320(R9) -9c0c392d| STP (V28, V3), -56(R4) -b49e1e6d| STP (V20, V7), 488(R21) -55f105ad| STP (V21, V28), 176(R10) -4dd6003c| MOVD.P V13, 13(R18) -e357067c| MOVD.P V3, 101(RSP) -f6841dbc| FMOVS.P F22, -40(R7) -54b710fc| FMOVD.P F20, -245(R26) -0d07833c| MOVD.P V13, 48(R24) -393f003c| MOVD.W V25, 3(R25) -1fac007c| MOVD.W V31, 10(R0) -d41d13bc| FMOVS.W F20, -207(R14) -908f0dfc| FMOVD.W F16, 216(R28) -5ded9d3c| MOVD.W V29, -34(R10) -6d72073d| MOVD V13, 476(R19) -68752d7d| MOVD V8, 5818(R11) -084728bd| FMOVS F8, 10308(R24) -409503fd| FMOVD F0, 1832(R10) -58a1963d| MOVD V24, 23168(R10) -51c8253c| MOVD V17, (R2)(R5.SXTW) -967b313c| MOVD V22, (R28)(R17) -b4683e7c| MOVD V20, (R5)(R30) -64d9a33c| MOVD V4, (R11)(R3.SXTW<<4) -e5e1143c| MOVD V5, -178(R15) -99901e7c| MOVD V25, -23(R4) -bb0012bc| FMOVS F27, -224(R5) -1d710cfc| FMOVD F29, 199(R8) -17e1873c| MOVD V23, 126(R8) -ed84a26e| VSUB V2.S4, V7.S4, V13.S4 -7761b80e| VSUBHN V24.D2, V11.D2, V23.S2 -f838205e| VSUQADD V7, V24 -7739600e| VSUQADD V11.H4, V23.H4 -26a5204f| VSXTL2 V9.S4, V6.D2 -5a201a4e| VTBL V26.B16, [V2.B16, V3.B16], V26.B16 -c2400f0e| VTBL V15.B8, [V6.B16, V7.B16, V8.B16], V2.B8 -7263024e| VTBL V2.B16, [V27.B16, V28.B16, V29.B16, V30.B16], V18.B16 -bb010b4e| VTBL V11.B16, [V13.B16], V27.B16 -5f31184e| VTBX V24.B16, [V10.B16, V11.B16], V31.B16 -a952100e| VTBX V16.B8, [V21.B16, V22.B16, V23.B16], V9.B8 -4872170e| VTBX V23.B8, [V18.B16, V19.B16, V20.B16, V21.B16], V8.B8 -dc110e4e| VTBX V14.B16, [V14.B16], V28.B16 -d7289a4e| VTRN1 V26.S4, V6.S4, V23.S4 -cd6a924e| VTRN2 V18.S4, V22.S4, V13.S4 -a552392e| VUABAL V25.B8, V21.B8, V5.H8 -a653256e| VUABAL2 V5.B16, V29.B16, V6.H8 -fb70b42e| VUABDL V20.S2, V7.S2, V27.D2 -3b6a202e| VUADALP V17.B8, V27.H4 -8a03b22e| VUADDL V18.S2, V28.S2, V10.D2 -262a206e| VUADDLP V17.B16, V6.H8 -8410312e| VUADDW V17.B8, V4.H8, V4.H8 -bf11ae6e| VUADDW2 V14.S4, V13.D2, V31.D2 -a7e65d7f| UCVTF $35, F21, F7 -8bda617e| UCVTFDD F20, F11 -7fb8431e| UCVTF $18, R3, F31 -1c0f039e| UCVTF $61, R24, F28 -2241439e| UCVTF $48, R9, F2 -d701231e| UCVTFWS R14, F23 -9600631e| UCVTFWD R4, F22 -8b01239e| UCVTFS R12, F11 -7202639e| UCVTFD R19, F18 -3406b82e| VUHADD V24.S2, V17.S2, V20.S2 -9264612e| VUMAX V1.H4, V4.H4, V18.H4 -d9a5772e| VUMAXP V23.H4, V14.H4, V25.H4 -74a8b06e| VUMAXV V3.S4, V20 -24a8312e| VUMINV V1.B8, V4 -c5218e2f| VUMLAL V14.S[0], V14.S2, V5.D2 -3d20a76f| VUMLAL2 V7.S[1], V1.S4, V29.D2 -90817e6e| VUMLAL2 V30.H8, V12.H8, V16.S4 -0f69a46f| VUMLSL2 V4.S[3], V8.S4, V15.D2 -4aa27c2e| VUMLSL V28.H4, V18.H4, V10.S4 -48a27b6e| VUMLSL2 V27.H8, V18.H8, V8.S4 -833c0d0e| VMOV V4.B[6], R3 -e2a1b22f| VUMULL V18.S[1], V15.S2, V2.D2 -07c06f2e| VUMULL V15.H4, V0.H4, V7.S4 -470e367e| VUQADD V22, V18, V7 -490e252e| VUQADD V5.B8, V18.B8, V9.B8 -bf5eaa7e| VUQRSHL V10, V21, V31 -c49c347f| VUQRSHRN $12, V6, V4 -b4757a7f| VUQSHL $58, V13, V20 -d14f777e| VUQSHL V23, V30, V17 -9e2d7a7e| VUQSUB V26, V12, V30 -a62c296e| VUQSUB V9.B16, V5.B16, V6.B16 -5d4ba17e| VUQXTN V26, V29 -454b212e| VUQXTN V26.H8, V5.B8 -1c48a16e| VUQXTN2 V0.D2, V28.S4 -4157736e| VURSHL V19.H8, V26.H8, V1.H8 -2d26797f| VURSHR $7, V17, V13 -bd27466f| VURSHR $58, V29.D2, V29.D2 -bcc8a12e| VURSQRTE V5.S2, V28.S2 -f5345d7f| VURSRA $35, V7, V21 -f8353a6f| VURSRA $6, V15.S4, V24.S4 -85a6342f| VUSHLL $20, V20.S2, V5.D2 -e7a70e6f| VUSHLL2 $6, V31.B16, V7.H8 -ed04787f| VUSHR $8, V7, V13 -8f07362f| VUSHR $10, V28.S2, V15.S2 -963a607e| VUSQADD V20, V22 -383a206e| VUSQADD V17.B16, V24.B16 -ef16596f| VUSRA $39, V23.D2, V15.D2 -f222ab2e| VUSUBL V11.S2, V23.S2, V18.D2 -9220696e| VUSUBL2 V9.H8, V4.H8, V18.S4 -0130312e| VUSUBW V17.B8, V0.H8, V1.H8 -a932a06e| VUSUBW2 V0.S4, V21.D2, V9.D2 -9a19910e| VUZP1 V17.S2, V12.S2, V26.S2 -a379ca4e| VZIP2 V10.D2, V13.D2, V3.D2 -1202011a| ADCW R1, R16, R18 -6900199a| ADC R25, R3, R9 -01010f3a| ADCSW R15, R8, R1 -13010fba| ADCS R15, R8, R19 -55ed280b| ADDW R8.SXTX<<3, R10, R21 -2077268b| ADD R6.UXTX<<5, R25, R0 -7f40560b| ADDW R22>>16, R3, ZR -3a16282b| ADDSW R8.UXTB<<5, R17, R26 -f8a336ab| ADDS R22.SXTH, RSP, R24 -000e6d31| ADDSW $(2883<<12), R16, R0 -b48e49b1| ADDS $(611<<12), R21, R20 -7e174e2b| ADDSW R14>>5, R27, R30 -3aa13f12| ANDW $66978814, R9, R26 -32a23592| AND $-571965880182769649, R17, R18 -b478070a| ANDW R7<<30, R5, R20 -dd1f988a| AND R24->7, R30, R29 -a7351b72| ANDSW $524256, R13, R7 -1c056ef2| ANDS $786432, R8, R28 -defd52ea| ANDS R18>>63, R14, R30 -8c28d01a| ASRW R16, R4, R12 -582ac09a| ASR R0, R18, R24 -647d1813| ASRW $24, R11, R4 -d1fe5b93| ASR $27, R22, R17 -2329c31a| ASRW R3, R9, R3 -d929d69a| ASR R22, R14, R25 -aefa5354| BAL 171989(PC) -76ad3917| JMP -12997258(PC) -de320f33| BFIW $17, R22, $13, R30 -af144db3| BFI $51, R5, $6, R15 -161c7eb3| BFI $2, R0, $8, R22 -f9791733| BFXILW $23, R15, $8, R25 -781577b3| BFI $9, R11, $6, R24 -0f65f98a| BIC R25@>25, R8, R15 -2c37e16a| BICSW R1@>13, R25, R12 -a6f473ea| BICS R19>>61, R5, R6 -f064ad96| CALL -22190864(PC) -80023fd6| CALL (R20) -00001fd6| JMP (R0) -80de3ed4| BRK $63220 -08276a35| CBNZW R8, 217400(PC) -acd1c0b5| CBNZ R12, -129395(PC) -ef50bf34| CBZW R15, -132473(PC) -4bd681b4| CBZ R11, -258382(PC) -4e2a483a| CCMNW HS, R18, $8, $14 -4a3a4eba| CCMN LO, R18, $14, $10 -0143553a| CCMNW MI, R24, R21, $1 -c09359ba| CCMN LS, R30, R25, $0 -020a567a| CCMPW EQ, R16, $22, $2 -a6985afa| CCMP LS, R5, $26, $6 -6fc0487a| CCMPW GT, R3, R8, $15 -21d14bfa| CCMP LE, R9, R11, $1 -75f5991a| CSINCW AL, R11, R25, R21 -5a25919a| CSINC HS, R10, R17, R26 -6a938c5a| CSINVW LS, R27, R12, R10 -6a408eda| CSINV MI, R3, R14, R10 -5f3603d5| CLREX $6 -a017c05a| CLSW R29, R0 -2616c0da| CLS R17, R6 -9411c05a| CLZW R12, R20 -c611c0da| CLZ R14, R6 -9fc3322b| CMNW R18.SXTW, R28 -3f9638ab| CMN R24.SXTB<<5, R17 -3f681db1| CMN $1882, R1 -bfd15bab| CMN R27>>52, R13 -ff723b6b| CMPW R27.UXTX<<4, R23 -1f5234eb| CMP R20.UXTW<<4, R16 -9fb22a71| CMPW $2732, R20 -df2478f1| CMP $(3593<<12), R6 -bf07026b| CMPW R2<<1, R29 -bfc514eb| CMP R20<<49, R13 -d494975a| CSNEGW LS, R6, R23, R20 -763591da| CSNEG LO, R11, R17, R22 -b440c91a| CRC32B R9, R5, R20 -5745cd1a| CRC32H R13, R10, R23 -684ad01a| CRC32W R16, R19, R8 -884fd59a| CRC32X R21, R28, R8 -ea50c61a| CRC32CB R6, R7, R10 -1357cf1a| CRC32CH R15, R24, R19 -9859c21a| CRC32CW R2, R12, R24 -6e5fde9a| CRC32CX R30, R27, R14 -9340941a| CSELW MI, R4, R20, R19 -dd42839a| CSEL MI, R22, R3, R29 -fe779f1a| CSETW VS, R30 -f1279f9a| CSET LO, R17 -eb839f5a| CSETMW LS, R11 -e3139fda| CSETM EQ, R3 -a986841a| CSINCW HI, R21, R4, R9 -19b78b9a| CSINC LT, R24, R11, R25 -4643835a| CSINVW MI, R26, R3, R6 -5ee38cda| CSINV AL, R26, R12, R30 -d166945a| CSNEGW VS, R22, R20, R17 -55f793da| CSNEG AL, R26, R19, R21 -0158add4| DCPS1 $27328 -82ceb2d4| DCPS2 $38516 -a31eb3d4| DCPS3 $39157 -bf3203d5| DMB $2 -e003bfd6| DRPS -9f3403d5| DSB $4 -2e2faeca| EON R14->11, R25, R14 -de6b0152| EORW $2214592511, R30, R30 -4a7714d2| EOR $-13194139536385, R26, R10 -2cea0dca| EOR R13<<58, R17, R12 -e0039fd6| ERET -834cce93| EXTR $19, R14, R4, R3 -5f2003d5| WFE -bf2e03d5| HINT $117 -e0f055d4| HLT $44935 -df3403d5| ISB $4 -22fcdf88| LDARW (R1), R2 -78fedfc8| LDAR (R19), R24 -cffcdf08| LDARB (R6), R15 -34fedf48| LDARH (R17), R20 -17bb7f88| LDAXPW (R24), (R23, R14) -6ffe7fc8| LDAXP (R19), (R15, ZR) -acfe5f88| LDAXRW (R21), R12 -cafe5fc8| LDAXR (R22), R10 -ddfd5f08| LDAXRB (R14), R29 -0efd5f48| LDAXRH (R8), R14 -66445128| LDNPW 136(R3), R17, R6 -3fa77fa8| LDNP -8(R25), R9, ZR -1e04eb28| LDP.P -168(R0), (R30, R1) -0da6c0a8| LDP.P 8(R16), (R13, R9) -7d00d429| LDP.W 160(R3), (R29, R0) -d26ae1a9| LDP.W -496(R22), (R18, R26) -d0ca6829| LDP -188(R22), (R16, R18) -a5e34fa9| LDP 248(R29), (R5, R24) -3e44d168| LDPSW 136(R1), R17, R30 -5f08e169| LDPSW -248(R2), R2, ZR -430d6769| LDPSW -200(R10), R3, R3 -2c555bb8| MOVWU.P -75(R9), R12 -83c557f8| MOVD.P -132(R12), R3 -f36e47b8| MOVWU.W 118(R23), R19 -6b1f48f8| MOVD.W 129(R27), R11 -f5d64ab9| MOVWU 2772(R23), R21 -872d7cf9| MOVD 30808(R12), R7 -82a75438| MOVBU.P -182(R28), R2 -a7fd5738| MOVBU.W -129(R13), R7 -c83d4239| MOVBU 143(R14), R8 -58c96438| MOVBU (R10)(R4.SXTW), R24 -8e687e38| MOVBU (R4)(R30), R14 -70575378| MOVHU.P -203(R27), R16 -015f5078| MOVHU.W -251(R24), R1 -7add5c79| MOVHU 3694(R11), R26 -2fcb7778| MOVHU (R25)(R23.SXTW), R15 -c474c338| MOVBW.P 55(R6), R4 -28869638| MOVB.P -152(R17), R8 -fe3fd438| MOVBW.W -189(RSP), R30 -da0f9938| MOVB.W -112(R30), R26 -5b3ac739| MOVBW 462(R18), R27 -2c579e39| MOVB 1941(R25), R12 -54faf838| MOVBW (R18)(R24.SXTX), R20 -fb68f238| MOVBW (R7)(R18), R27 -f26aad38| MOVB (R23)(R13), R18 -17e4c978| MOVHW.P 158(R0), R23 -a2759f78| MOVH.P -9(R13), R2 -9c6ec478| MOVHW.W 70(R20), R28 -fd6f8278| MOVH.W 38(RSP), R29 -a82bc279| MOVHW 276(R29), R8 -9d89b979| MOVH 7364(R12), R29 -962685b8| MOVW.P 82(R20), R22 -76ae8bb8| MOVW.W 186(R19), R22 -fc2193b9| MOVW 4896(R15), R28 -e34842b8| LDTRW 36(R7), R3 -4ff84df8| LDTR 223(R2), R15 -d9e84f38| LDTRBW 254(R6), R25 -397b5378| LDTRH -201(R25), R25 -c4c9d138| LDTRSBW -228(R14), R4 -02789638| LDTRSB -153(R0), R2 -a988cb78| LDTRSHW 184(R5), R9 -03888978| LDTRSH 152(R0), R3 -ccb99fb8| LDTRSW -5(R14), R12 -efb154b8| LDURW -181(R15), R15 -fc2051f8| LDUR -238(R7), R28 -86d04438| LDURBW 77(R4), R6 -73405d78| LDURHW -44(R3), R19 -7a81d538| LDURSBW -168(R11), R26 -b0b28038| LDURSB 11(R21), R16 -b4a1d278| LDURSHW -214(R13), R20 -3ed18078| LDURSH 13(R9), R30 -09628eb8| LDURSW 230(R16), R9 -c07e7f88| LDXPW (R22), (R0, ZR) -3e167fc8| LDXP (R17), (R30, R5) -727c5f88| LDXRW (R3), R18 -487c5fc8| LDXR (R2), R8 -867d5f08| LDXRB (R12), R6 -747f5f48| LDXRH (R27), R20 -d920d71a| LSLW R23, R6, R25 -b920c59a| LSL R5, R5, R25 -4da947d3| UBFX $7, R10, $36, R13 -be23ca1a| LSLW R10, R29, R30 -cc20d19a| LSL R17, R6, R12 -ae26c31a| LSRW R3, R21, R14 -fc27cb9a| LSR R11, ZR, R28 -2b7e1053| LSRW $16, R17, R11 -cefe75d3| LSR $53, R22, R14 -3b25d01a| LSRW R16, R9, R27 -e826d79a| LSR R23, R23, R8 -5504031b| MADDW R3, R1, R2, R21 -9e5c109b| MADD R16, R23, R4, R30 -00fe1f1b| MNEGW ZR, R16, R0 -6efe179b| MNEG R23, R19, R14 -31020011| ADDW $0, R17, R17 -21000091| ADD $0, R1, R1 -39f1bf12| MOVW $7798783, R25 -53b3e992| MOVD $-5591781887333892097, R19 -c0fd9552| MOVW $45038, R0 -f16b97d2| MOVD $47967, R17 -e8972232| MOVW $3222257679, R8 -e27323b2| MOVD $-2017612633531744257, R2 -e9030e2a| MOVW R14, R9 -fb0310aa| MOVD R16, R27 -d0e48472| MOVKW $10022, R16 -432dbcf2| MOVK $(57706<<16), R3 -4b679612| MOVW $4294921413, R11 -9121e492| MOVD $-2381278302972149761, R17 -00be90d2| MOVD $34288, R0 -91d730d5| MRS $1724, R17 -cf301fd5| MSR R15, S3_7_C3_C0_6 -daea181b| MSUBW R24, R26, R22, R26 -e1a7109b| MSUB R16, R9, ZR, R1 -477f0d1b| MULW R13, R26, R7 -a17d1c9b| MUL R28, R13, R1 -fc9b79aa| MVN R25>>38, R28 -f71b904b| NEGW R16->6, R23 -e3df4acb| NEG R10>>55, R3 -f0334e6b| NEGSW R14>>12, R16 -e6031f5a| NGCW ZR, R6 -f40302da| NGC R2, R20 -ee03137a| NGCSW R19, R14 -ee0303fa| NGCS R3, R14 -1f2003d5| NOP -ab14e92a| ORNW R9@>5, R5, R11 -185c3faa| ORN ZR<<23, R0, R24 -a8850c32| ORRW $3145776, R13, R8 -cad023b2| ORR $-2025524839466146845, R6, R10 -5487ccaa| ORR R12@>33, R26, R20 -293783f9| PRFM 1640(R25), PLIL1STRM -501010d8| PRFM 32898(PC), PSTL1KEEP -bc7389f8| PRFUM 151(R29), $28 -9203c05a| RBITW R28, R18 -0501c0da| RBIT R8, R5 -40005fd6| RET R2 -940ac05a| REVW R20, R20 -ca0fc0da| REV R30, R10 -7807c05a| REV16W R27, R24 -fb06c0da| REV16 R23, R27 -dc0ac0da| REV32 R22, R28 -970dc0da| REV R12, R23 -42408813| EXTRW $16, R8, R2, R2 -5a96db93| EXTR $37, R27, R18, R26 -782cc41a| RORW R4, R3, R24 -8c2ec69a| ROR R6, R20, R12 -372ec61a| RORW R6, R17, R23 -b72ddc9a| ROR R28, R13, R23 -e501185a| SBCW R24, R15, R5 -ac0011da| SBC R17, R5, R12 -7a03067a| SBCSW R6, R27, R26 -310008fa| SBCS R8, R1, R17 -65837f93| SBFIZ $1, R27, $33, R5 -5c1b4793| SBFIZ $57, R26, $7, R28 -a71f5b93| SBFIZ $37, R29, $8, R7 -640ede1a| SDIVW R30, R19, R4 -2a0dd99a| SDIV R25, R9, R10 -9f2003d5| SEV -bf2003d5| SEVL -045c389b| SMADDL R24, R23, R0, R4 -6efe3e9b| SMNEGL R30, R19, R14 -ebac239b| SMSUBL R3, R11, R7, R11 -947f459b| SMULH R5, R28, R20 -d67e3e9b| SMULL R30, R22, R22 -6dff9f88| STLRW R13, (R27) -1ffd9fc8| STLR ZR, (R8) -a8fe9f08| STLRB R8, (R21) -abfd9f48| STLRH R11, (R13) -2ec02888| STLXPW (R14, R16), (R1), R8 -11993ec8| STLXP (R17, R6), (R8), R30 -bbfe0f88| STLXRW R27, (R21), R15 -e9fc09c8| STLXR R9, (R7), R9 -c6fe0708| STLXRB R6, (R22), R7 -c6fe0c48| STLXRH R6, (R22), R12 -b3283028| STNPW -128(R5), R10, R19 -252e26a8| STNP -416(R17), R11, R5 -9fb18c28| STP.P (ZR, R12), 100(R12) -9ce5aba8| STP.P (R28, R25), -328(R12) -e5d08229| STP.W (R5, R20), 20(R7) -d6e79ea9| STP.W (R22, R25), 488(R30) -9eef2029| STP (R30, R27), -252(R28) -57b314a9| STP (R23, R12), 328(R26) -eda503b8| MOVW.P R13, 58(R15) -62241df8| MOVD.P R2, -46(R3) -d2bd18b8| MOVW.W R18, -117(R14) -542d12f8| MOVD.W R20, -222(R10) -e92c3bb9| MOVW R9, 15148(R7) -de4804f9| MOVD R30, 2192(R6) -cce40b38| MOVB.P R12, 190(R6) -eafd1238| MOVB.W R10, -209(R15) -7fcb0639| MOVB ZR, 434(R27) -03f82738| MOVB R3, (R0)(R7.SXTX) -5c6a3e38| MOVB R28, (R18)(R30) -a8551978| MOVH.P R8, -107(R13) -9e6c0c78| MOVH.W R30, 198(R4) -c83d0e79| MOVH R8, 1822(R14) -502a1db8| STTRW -46(R18), R16 -ae180af8| STTR 161(R5), R14 -ea1a0138| STTRBW 17(R23), R10 -416b0278| STTRHW 38(R26), R1 -659107b8| MOVW R5, 121(R11) -6b611ff8| MOVD R11, -10(R11) -99a01c38| MOVB R25, -54(R4) -99421e78| MOVH R25, -28(R20) -3e2a2688| STXPW (R30, R10), (R17), R6 -2f6a2cc8| STXP (R15, R26), (R17), R12 -7d7f1b88| STXRW R29, (R27), R27 -6e7e1bc8| STXR R14, (R19), R27 -ec7c0208| STXRB R12, (R7), R2 -ee7f0648| STXRH R14, (RSP), R6 -2f8d204b| SUBW R0.SXTB<<3, R9, R15 -1fbe3acb| SUB R26.SXTH<<7, R16, RSP -5af778d1| SUB $(3645<<12), R26, R26 -6729034b| SUBW R3<<10, R11, R7 -ae683f6b| SUBSW ZR.UXTX<<2, R5, R14 -2f993deb| SUBS R29.SXTB<<6, R9, R15 -db0d5f71| SUBSW $(1987<<12), R14, R27 -3aec1ff1| SUBS $2043, R1, R26 -1f24016b| CMPW R1<<9, R0 -a1ae1bd4| SVC $56693 -a61e0013| SXTBW R21, R6 -441c4093| SXTB R2, R4 -0c3c0013| SXTHW R0, R12 -b33f4093| SXTH R29, R19 -407f4093| SXTW R26, R0 -455929d5| SYSL $88384, R5 -bf8c1f72| TSTW $1966110, R5 -ff10836a| TSTW R3->4, R7 -dfc5daea| TST R26@>49, R14 -aa6e43d3| UBFX $3, R21, $25, R10 -46181a53| UBFIZW $6, R2, $7, R6 -43294bd3| LSL $53, R10, R3 -77787dd3| UBFIZ $3, R3, $31, R23 -1a0bd61a| UDIVW R22, R24, R26 -9308c19a| UDIV R1, R4, R19 -755aa19b| UMADDL R1, R22, R19, R21 -1ffdbe9b| UMNEGL R30, R8, ZR -cbaaba9b| UMSUBL R26, R10, R22, R11 -0c7fdb9b| UMULH R27, R24, R12 -cc7da79b| UMULL R7, R14, R12 -3d1c0053| UXTBW R1, R29 -0e3f0053| UXTHW R24, R14 -5f2003d5| WFE -7f2003d5| WFI -3f2003d5| YIELD -71b9604e| VABS V11.H8, V17.H8 -5186f65e| VADD V22, V18, V17 -4986f34e| VADD V19.D2, V18.D2, V9.D2 -1243720e| VADDHN V18.S4, V24.S4, V18.H4 -0640354e| VADDHN2 V21.H8, V0.H8, V6.B16 -d9bdfa4e| VADDP V26.D2, V14.D2, V25.D2 -4c59284e| AESD V10.B16, V12.B16 -8c48284e| AESE V4.B16, V12.B16 -f47a284e| AESIMC V23.B16, V20.B16 -c56b284e| AESMC V30.B16, V5.B16 -bf1c3b0e| VAND V27.B8, V5.B8, V31.B8 -6444026f| VMVNI $(67<<16), V4.S4 -1357032f| VBIC $(120<<16), V19.S2 -561d6a0e| VBIC V10.B8, V10.B8, V22.B8 -cd1ff06e| VBIF V16.B16, V30.B16, V13.B16 -f31ebd6e| VBIT V29.B16, V23.B16, V19.B16 -6f1d6c2e| VBSL V12.B8, V11.B8, V15.B8 -1e48600e| VCLS V0.H4, V30.H4 -6948202e| VCLZ V3.B8, V9.B8 -968efd7e| VCMEQ V29, V20, V22 -e58f6d6e| VCMEQ V13.H8, V31.H8, V5.H8 -8f98600e| VCMEQ $0, V4.H4, V15.H4 -4f3db84e| VCMGE V24.S4, V10.S4, V15.S4 -2788a02e| VCMGE $0, V1.S2, V7.S2 -bf35714e| VCMGT V17.H8, V13.H8, V31.H8 -4a89604e| VCMGT $0, V10.H8, V10.H8 -9635252e| VCMHI V5.B8, V12.B8, V22.B8 -d83eff6e| VCMHS V31.D2, V22.D2, V24.D2 -cb99206e| VCMLE $0, V14.B16, V11.B16 -29a9604e| VCMLT $0, V9.H8, V9.H8 -d18eea5e| VCMTST V10, V22, V17 -d18ea94e| VCMTST V9.S4, V22.S4, V17.S4 -4a04075e| VMOV V2.B[3], V10 -0504040e| VDUP V0.S[0], V5.S2 -b20e1f4e| VDUP R21, V18.B16 -2a1f3e6e| VEOR V30.B16, V25.B16, V10.B16 -0bd5aa7e| FABD F10, F8, F11 -12d7b96e| VFABD V25.S4, V24.S4, V18.S4 -a1f9a04e| FABS V13.S4, V1.S4 -1ac3201e| FABSS F24, F26 -d8c3601e| FABSD F30, F24 -95ee267e| FACGE F6, F20, F21 -2bee262e| VFACGE V6.S2, V17.S2, V11.S2 -1aedec7e| FACGT F12, F8, F26 -74effa6e| VFACGT V26.D2, V27.D2, V20.D2 -7ed4260e| FADD V6.S2, V3.S2, V30.S2 -4528251e| FADDS F5, F2, F5 -262b661e| FADDD F6, F25, F6 -84d8707e| FADDP V4.D2, F4 -71d4276e| VFADDP V7.S4, V3.S4, V17.S4 -a5f43f1e| FCCMPS AL, F31, F5, $5 -20e5601e| FCCMPD AL, F0, F9, $0 -52d4331e| FCCMPES LE, F19, F2, $2 -1e66761e| FCCMPED VS, F22, F16, $14 -d7e6695e| FCMEQ F9, F22, F23 -e7d9a05e| FCMEQ $0, F15, F7 -dadaa04e| VFCMEQ $0, V22.S4, V26.S4 -28e5737e| FCMGE F19, F9, F8 -a2e73a6e| VFCMGE V26.S4, V29.S4, V2.S4 -4fcba07e| FCMGE $0, F26, F15 -43c8a02e| VFCMGE $0, V2.S2, V3.S2 -ffe5a67e| FCMGT F6, F15, F31 -7ee7bd2e| VFCMGT V29.S2, V27.S2, V30.S2 -5bc8e05e| FCMGT $0, F2, F27 -3dc9a04e| VFCMGT $0, V9.S4, V29.S4 -38daa07e| FCMLE $0, F17, F24 -8fdaa02e| VFCMLE $0, V20.S2, V15.S2 -93e8e05e| FCMLT $0, F4, F19 -9fe9a04e| VFCMLT $0, V12.S4, V31.S4 -a023201e| FCMPS F0, F29 -c822231e| FCMPS $(0.0), F22 -a022651e| FCMPD F5, F21 -a8227d1e| FCMPD $(0.0), F21 -70203e1e| FCMPES F30, F3 -38232b1e| FCMPES $(0.0), F25 -70206c1e| FCMPED F12, F3 -b823731e| FCMPED $(0.0), F29 -3e6f331e| FCSELS VS, F25, F19, F30 -a64f6d1e| FCSELD MI, F29, F13, F6 -0d41e21e| FCVTHS F8, F13 -cbc0e21e| FCVTHD F6, F11 -18c0231e| FCVTSH F0, F24 -a7c0221e| FCVTSD F5, F7 -e7c3631e| FCVTDH F31, F7 -9f43621e| FCVTDS F28, F31 -a0c8215e| FCVTAS F5, F0 -4dc8210e| VFCVTAS V2.S2, V13.S2 -0300241e| FCVTASW F0, R3 -fd03249e| FCVTAS F31, R29 -ef01641e| FCVTASW F15, R15 -4c01649e| FCVTAS F10, R12 -9ac8617e| FCVTAU F4, F26 -b802251e| FCVTAUW F21, R24 -2a03259e| FCVTAU F25, R10 -ea00651e| FCVTAUW F7, R10 -0102659e| FCVTAU F16, R1 -0d7a610e| VFCVTL V16.S2, V13.D2 -ed79214e| VFCVTL2 V15.H8, V13.S4 -43bb615e| FCVTMS F26, F3 -c000301e| FCVTMSW F6, R0 -9202309e| FCVTMS F20, R18 -0800701e| FCVTMSW F0, R8 -6603709e| FCVTMS F27, R6 -f0b9217e| FCVTMU F15, F16 -3bba212e| VFCVTMU V17.S2, V27.S2 -5900311e| FCVTMUW F2, R25 -9a03319e| FCVTMU F28, R26 -fa01711e| FCVTMUW F15, R26 -6f01719e| FCVTMU F11, R15 -1968210e| VFCVTN V0.S4, V25.H4 -3d69214e| VFCVTN2 V9.S4, V29.H8 -87aa615e| FCVTNS F20, F7 -e301201e| FCVTNSW F15, R3 -6002209e| FCVTNS F19, R0 -1600601e| FCVTNSW F0, R22 -8503609e| FCVTNS F28, R5 -f5ab617e| FCVTNU F31, F21 -2b02211e| FCVTNUW F17, R11 -f902219e| FCVTNU F23, R25 -0702611e| FCVTNUW F16, R7 -9d03619e| FCVTNU F28, R29 -dcaba15e| FCVTPS F30, F28 -b4a8a10e| VFCVTPS V5.S2, V20.S2 -5302281e| FCVTPSW F18, R19 -e003289e| FCVTPS F31, R0 -9501681e| FCVTPSW F12, R21 -6703689e| FCVTPS F27, R7 -68a8a17e| FCVTPU F3, F8 -dcaba12e| VFCVTPU V30.S2, V28.S2 -9d03291e| FCVTPUW F28, R29 -5f01299e| FCVTPU F10, ZR -e101691e| FCVTPUW F15, R1 -3f00699e| FCVTPU F1, ZR -ee6b612e| VFCVTXN V31.D2, V14.S2 -b1fd215f| FCVTZS $31, F13, F17 -bafd2c0f| FCVTZS $20, V13.S2, V26.S2 -47b8e15e| FCVTZSDD F2, F7 -dcbbe14e| FCVTZS V30.D2, V28.D2 -56f8181e| FCVTZS $2, F2, R22 -9265189e| FCVTZS $39, F12, R18 -d3ad581e| FCVTZS $21, F14, R19 -3d9b589e| FCVTZS $26, F25, R29 -1a00381e| FCVTZSSW F0, R26 -d302389e| FCVTZSS F22, R19 -5303781e| FCVTZSDW F26, R19 -8f01789e| FCVTZSD F12, R15 -57fe537f| FCVTZU $45, F18, F23 -beff796f| FCVTZU $7, V29.D2, V30.D2 -08b9e17e| FCVTZUDD F8, F8 -cdbbe16e| FCVTZU V30.D2, V13.D2 -2126199e| FCVTZU $55, F17, R1 -70a9591e| FCVTZU $22, F11, R16 -8c25599e| FCVTZU $55, F12, R12 -1201391e| FCVTZUSW F8, R18 -0800399e| FCVTZUS F0, R8 -da00791e| FCVTZUDW F6, R26 -2903799e| FCVTZUD F25, R9 -56fd3f2e| FDIV V31.S2, V10.S2, V22.S2 -1f182e1e| FDIVS F14, F0, F31 -ce1b741e| FDIVD F20, F30, F14 -0d61021f| FMADDS F2, F24, F8, F13 -03205e1f| FMADDD F30, F8, F0, F3 -72f6654e| FMAX V5.D2, V19.D2, V18.D2 -1849281e| FMAXS F8, F8, F24 -8e4a6e1e| FMAXD F14, F20, F14 -54c7304e| FMAXNM V16.S4, V26.S4, V20.S4 -91683a1e| FMAXNMS F26, F4, F17 -f56a721e| FMAXNMD F18, F23, F21 -c8cb307e| FMAXNMP V30.S2, F8 -06c9306e| FMAXNMV V8.S4, F6 -b6fb707e| FMAXP V29.D2, F22 -1759341e| FMINS F20, F8, F23 -675b721e| FMIND F18, F27, F7 -69792d1e| FMINNMS F13, F11, F9 -ab786b1e| FMINNMD F11, F5, F11 -0fcab07e| FMINNMP V16.S2, F15 -d2c6b26e| VFMINNMP V18.S4, V22.S4, V18.S4 -22fab07e| FMINP V17.S2, F2 -f5f5f56e| VFMINP V21.D2, V15.D2, V21.D2 -bc13c95f| FMLA V9.D[0], F29, F28 -5d51a85f| FMLS V8.S[1], F10, F29 -d3ccb94e| VFMLS V25.S4, V6.S4, V19.S4 -5bf4014f| FMOV $9., V27.S4 -5bf5026f| FMOV $0.203125, V27.D2 -6541201e| FMOVS F11, F5 -b742601e| FMOVD F21, F23 -6002271e| FMOVS R19, F0 -5301261e| FMOVS F10, R19 -c103679e| FMOVD R30, F1 -3301af9e| FMOV R9, V19.D[1] -bd00669e| FMOVD F5, R29 -ee02ae9e| FMOV V23.D[1], R14 -0ff0251e| FMOVS $15.5, F15 -16506a1e| FMOVD $0.28125, F22 -d1c20e1f| FMSUBS F14, F16, F22, F17 -fdae491f| FMSUBD F9, F11, F23, F29 -a4989d4f| FMUL V29.S[2], V5.S4, V4.S4 -efde706e| FMUL V16.D2, V23.D2, V15.D2 -190a291e| FMULS F9, F16, F25 -430a671e| FMULD F7, F18, F3 -21919e7f| FMULX V30.S[0], F9, F1 -5298c76f| VFMULX V7.D[1], V2.D2, V18.D2 -1ddf3c5e| FMULX F28, F24, F29 -a2fba06e| FNEG V29.S4, V2.S4 -7a40211e| FNEGS F3, F26 -f843611e| FNEGD F31, F24 -326b381f| FNMADDS F24, F26, F25, F18 -4b636a1f| FNMADDD F10, F24, F26, F11 -48fa201f| FNMSUBS F0, F30, F18, F8 -04d87f1f| FNMSUBD F31, F22, F0, F4 -0289371e| FNMULS F23, F8, F2 -0e8a691e| FNMULD F9, F16, F14 -05dba15e| FRECPE F24, F5 -42d9a14e| VFRECPE V10.S4, V2.S4 -2eff655e| FRECPS F5, F25, F14 -03fe774e| VFRECPS V23.D2, V16.D2, V3.D2 -b4fba15e| FRECPX F29, F20 -9d41261e| FRINTAS F12, F29 -ea42661e| FRINTAD F23, F10 -e399a16e| FRINTI V15.S4, V3.S4 -6ec3271e| FRINTIS F27, F14 -ecc1671e| FRINTID F15, F12 -4543251e| FRINTMS F26, F5 -f242651e| FRINTMD F23, F18 -898a214e| FRINTN V20.S4, V9.S4 -1641241e| FRINTNS F8, F22 -5341641e| FRINTND F10, F19 -248be14e| FRINTP V25.D2, V4.D2 -35c2241e| FRINTPS F17, F21 -6fc3641e| FRINTPD F27, F15 -0940271e| FRINTXS F0, F9 -4643671e| FRINTXD F26, F6 -749aa14e| FRINTZ V19.S4, V20.S4 -8bc0251e| FRINTZS F4, F11 -7cc1651e| FRINTZD F11, F28 -dedbe17e| FRSQRTE F30, F30 -04daa16e| VFRSQRTE V16.S4, V4.S4 -cdfce45e| FRSQRTS F4, F6, F13 -d9fda04e| VFRSQRTS V0.S4, V14.S4, V25.S4 -c5c1211e| FSQRTS F14, F5 -67c1611e| FSQRTD F11, F7 -a4d6b14e| FSUB V17.S4, V21.S4, V4.S4 -6138351e| FSUBS F21, F3, F1 -be3b6a1e| FSUBD F10, F29, F30 -4d2f016e| VMOV V26.B[5], V13.B[0] -741e174e| VMOV R19, V20.B[11] -e170404c| VLD1 (R7), [V1.B16] -7aa9404c| VLD1 (R11), [V26.S4, V27.S4] -4b6d400c| VLD1 (R10), [V11.D1, V12.D1, V13.D1] -582b400c| VLD1 (R26), [V24.S2, V25.S2, V26.S2, V27.S2] -8f7cdf4c| VLD1.P 16(R4), [V15.D2] -0a76ce4c| VLD1.P (R16)(R14), [V10.H8] -2aa6df0c| VLD1.P 16(R17), [V10.H4, V11.H4] -35a7d70c| VLD1.P (R25)(R23), [V21.H4, V22.H4] -ae6ddf4c| VLD1.P 48(R13), [V14.D2, V15.D2, V16.D2] -b362d74c| VLD1.P (R21)(R23), [V19.B16, V20.B16, V21.B16] -6d22df0c| VLD1.P 32(R19), [V13.B8, V14.B8, V15.B8, V16.B8] -6722c90c| VLD1.P (R19)(R9), [V7.B8, V8.B8, V9.B8, V10.B8] -c71f404d| VLD1 (R30), V7.B[15] -f55a400d| VLD1 (R23), V21.H[3] -f080400d| VLD1 (R7), V16.S[0] -ed84404d| VLD1 (R7), V13.D[1] -fd0bdf4d| VLD1.P 1(RSP), V29.B[10] -c811dc0d| VLD1.P (R14)(R28), V8.B[4] -6548cb4d| VLD1.P (R3)(R11), V5.H[5] -9882df4d| VLD1.P 4(R20), V24.S[2] -f482c74d| VLD1.P (R23)(R7), V20.S[2] -0d87df0d| VLD1.P 8(R24), V13.D[0] -1b85db0d| VLD1.P (R8)(R27), V27.D[0] -58c3404d| VLD1R (R26), [V24.B16] -c0c6df4d| VLD1R 2(R22), [V0.H8] -a6cec90d| VLD1R (R21)(R9), [V6.D1] -e68a400c| VLD2 (R23), [V6.S2, V7.S2] -4007604d| LD2 (R26), [V0.B, V1.B][9] -8c49604d| LD2 (R12), [V12.H, V13.H][5] -4f92600d| LD2 (R18), [V15.S, V16.S][1] -b186600d| LD2 (R21), [V17.D, V18.D][0] -631aff0d| LD2 2(R19), [V3.B, V4.B][6] -330ceb4d| LD2 (R1)(R11), [V19.B, V20.B][11] -454bff4d| LD2 4(R26), [V5.H, V6.H][5] -0792ff0d| LD2 8(R16), [V7.S, V8.S][1] -3b91fd0d| LD2 (R9)(R29), [V27.S, V28.S][1] -b086ff4d| LD2 16(R21), [V16.D, V17.D][1] -da86e30d| LD2 (R22)(R3), [V26.D, V27.D][0] -e7cf604d| VLD2R (RSP), [V7.D2, V8.D2] -5ac8ff0d| VLD2R 8(R2), [V26.S2, V27.S2] -13c1f10d| VLD2R (R8)(R17), [V19.B8, V20.B8] -0947404c| VLD3 (R24), [V9.H8, V10.H8, V11.H8] -8043df0c| VLD3 24(R28), [V0.B8, V1.B8, V2.B8] -6344d50c| VLD3 (R3)(R21), [V3.H4, V4.H4, V5.H4] -663d400d| LD3 (R11), [V6.B, V7.B, V8.B][7] -5b6b400d| LD3 (R26), [V27.H, V28.H, V29.H][1] -02a0404d| LD3 (R0), [V2.S, V3.S, V4.S][2] -e1a5404d| LD3 (R15), [V1.D, V2.D, V3.D][1] -b53edf0d| LD3 3(R21), [V21.B, V22.B, V23.B][7] -f625d10d| LD3 (R15)(R17), [V22.B, V23.B, V24.B][1] -3d7bda4d| LD3 (R25)(R26), [V29.H, V30.H, V31.H][7] -6ea0df0d| LD3 12(R3), [V14.S, V15.S, V16.S][0] -d9a0c60d| LD3 (R6)(R6), [V25.S, V26.S, V27.S][0] -b6a7df0d| LD3 24(R29), [V22.D, V23.D, V24.D][0] -dfa6d94d| LD3 (R22)(R25), [V31.D, V0.D, V1.D][1] -7de9404d| VLD3R (R11), [V29.S4, V30.S4, V31.S4] -2fe6df4d| VLD3R 6(R17), [V15.H8, V16.H8, V17.H8] -cae7c84d| VLD3R (R30)(R8), [V10.H8, V11.H8, V12.H8] -9a0b400c| VLD4 (R28), [V26.S2, V27.S2, V28.S2, V29.S2] -4b03df0c| VLD4 32(R26), [V11.B8, V12.B8, V13.B8, V14.B8] -8e0bcc4c| VLD4 (R28)(R12), [V14.S4, V15.S4, V16.S4, V17.S4] -182c604d| LD4 (R0), [V24.B, V25.B, V26.B, V27.B][11] -feb2600d| LD4 (R23), [V30.S, V31.S, V0.S, V1.S][1] -59a4604d| LD4 (R2), [V25.D, V26.D, V27.D, V28.D][1] -9b25ff4d| LD4 4(R12), [V27.B, V28.B, V29.B, V30.B][9] -1f35e84d| LD4 (R8)(R8), [V31.B, V0.B, V1.B, V2.B][13] -91b2ff4d| LD4 16(R20), [V17.S, V18.S, V19.S, V20.S][3] -88b3ed4d| LD4 (R28)(R13), [V8.S, V9.S, V10.S, V11.S][3] -9aa5ff4d| LD4 32(R12), [V26.D, V27.D, V28.D, V29.D][1] -efa5e10d| LD4 (R15)(R1), [V15.D, V16.D, V17.D, V18.D][0] -07ed604d| VLD4R (R8), [V7.D2, V8.D2, V9.D2, V10.D2] -0defff0d| VLD4R 32(R24), [V13.D1, V14.D1, V15.D1, V16.D1] -43e1f14d| VLD4R (R10)(R17), [V3.B16, V4.B16, V5.B16, V6.B16] -136e682c| VLDNP -192(R16), V27, V19 -cc67676c| VLDNP -400(R30), V25, V12 -e6dd4eac| VLDNP 464(R15), V23, V6 -b7e9c22c| LDP.P 20(R13), (V23, V26) -92c3fe6c| LDP.P -24(R28), (V18, V16) -f281e6ac| LDP.P -816(R15), (V18, V0) -4f06cd2d| LDP.W 104(R18), (V15, V1) -0f6fdc6d| LDP.W 448(R24), (V15, V27) -170ccbad| LDP.W 352(R0), (V23, V3) -71ea7a2d| LDP -44(R19), (V17, V26) -c8816c6d| LDP -312(R14), (V8, V0) -da6540ad| LDP (R14), (V26, V25) -92064c3c| MOVD.P 192(R20), V18 -94d4577c| MOVD.P -131(R4), V20 -39055fbc| FMOVS.P -16(R9), F25 -989551fc| FMOVD.P -231(R12), F24 -4764c23c| MOVD.P 38(R2), V7 -c15e4e3c| MOVD.W 229(R22), V1 -c8ce487c| MOVD.W 140(R22), V8 -ca5d5bbc| FMOVS.W -75(R14), F10 -34fd56fc| FMOVD.W -145(R9), F20 -bd0dd53c| MOVD.W -176(R13), V29 -ab65443d| MOVD 281(R13), V11 -cb57537d| MOVD 2474(R30), V11 -f2606fbd| FMOVS 12128(R7), F18 -088b67fd| FMOVD 20240(R24), F8 -0173ce3d| MOVD 14784(R24), V1 -ba112c1c| FMOVS 90253(PC), F26 -e489c25c| FMOVD -125873(PC), F4 -3cdb753c| MOVD (R25)(R21.SXTW), V28 -726b733c| MOVD (R27)(R19), V18 -395b627c| MOVD (R25)(R2.UXTW<<1), V25 -9b486cbc| FMOVS (R4)(R12.UXTW), F27 -1cda7efc| FMOVD (R16)(R30.SXTW<<3), F28 -365bf33c| MOVD (R25)(R19.UXTW<<4), V22 -43a1413c| VLDUR 26(R10), V3 -c7034f7c| VLDUR 240(R30), V7 -ad8350bc| VLDUR -248(R29), V13 -07a350fc| VLDUR -246(R24), V7 -0212c63c| VLDUR 97(R16), V2 -6f0a7a2f| VMLA V10.H[7], V19.H4, V15.H4 -fe95294e| VMLA V9.B16, V15.B16, V30.B16 -f24a4f2f| VMLS V15.H[4], V23.H4, V18.H4 -26947e2e| VMLS V30.H4, V1.H4, V6.H4 -6606115e| VMOV V19.B[8], V6 -0866116e| VMOV V16.B[12], V8.B[8] -6e1d0f4e| VMOV R11, V14.B[7] -6d1fa10e| VORR V1.B8, V27.B8, V13.B8 -b93f1a0e| VMOV V29.H[6], R25 -74e7020f| VMOVI $91, V20.B8 -0ff4040f| FMOV $-2., V15.S2 -4c47060f| VMOVI $(218<<16), V12.S2 -aa06064f| VMOVI $213, V10.S4 -8de4042f| VMOVI $-72057594021216256, V13 -b1e6046f| VMOVI $-72056498804555521, V17.D2 -609f214e| VMUL V1.B16, V27.B16, V0.B16 -9f5a206e| VMVN V20.B16, V31.B16 -da65032f| VMVNI $(110<<24), V26.S2 -4d36036f| VBIC $(114<<8), V13.S4 -4d66052f| VMVNI $(178<<24), V13.S2 -a4bbe06e| VNEG V29.D2, V4.D2 -bf5a206e| VMVN V21.B16, V31.B16 -2b1fe24e| VORN V2.B16, V25.B16, V11.B16 -22e4024f| VMOVI $65, V2.B16 -3086050f| VMOVI $177, V16.H4 -051db80e| VORR V24.B8, V8.B8, V5.B8 -48e2290e| VPMULL V9.B8, V18.B8, V8.H8 -7341652e| VRADDHN V5.S4, V11.S4, V19.H4 -1b417f6e| VRADDHN2 V31.S4, V8.S4, V27.H8 -e158606e| VRBIT V7.B16, V1.B16 -f418200e| VREV16 V7.B8, V20.B8 -228d2a0f| VRSHRN $22, V9.D2, V2.S2 -a861aa2e| VRSUBHN V10.D2, V13.D2, V8.S2 -7160786e| VRSUBHN2 V24.S4, V3.S4, V17.H8 -cc7f314e| VSABA V17.B16, V30.B16, V12.B16 -1350644e| VSABAL2 V4.H8, V0.H8, V19.S4 -a1757d4e| VSABD V29.H8, V13.H8, V1.H8 -0971a00e| VSABDL V0.S2, V8.S2, V9.D2 -af70214e| VSABDL2 V1.B16, V5.B16, V15.H8 -626ba04e| VSADALP V27.S4, V2.D2 -1503374e| VSADDL2 V23.B16, V24.B16, V21.H8 -592b204e| VSADDLP V26.B16, V25.H8 -d813600e| VSADDW V0.H4, V30.S4, V24.S4 -31e5210f| SCVTF $31, V9.S2, V17.S2 -aeda215e| SCVTFSS F21, F14 -f0e9021e| SCVTF $6, R15, F16 -42b4421e| SCVTF $19, R2, F2 -8b10029e| SCVTF $60, R4, F11 -59e6429e| SCVTF $7, R18, F25 -cf01221e| SCVTFWS R14, F15 -2d03621e| SCVTFWD R25, F13 -af00229e| SCVTFS R5, F15 -bf00629e| SCVTFD R5, F31 -2a02025e| SHA1C V2.S4, V17, V10 -8b0b285e| SHA1H V28, V11 -11201f5e| SHA1M V31.S4, V0, V17 -f110115e| SHA1P V17.S4, V7, V17 -b732115e| SHA1SU0 V17.S4, V21.S4, V23.S4 -cf18285e| SHA1SU1 V6.S4, V15.S4 -2e520f5e| SHA256H2 V15.S4, V17, V14 -77401a5e| SHA256H V26.S4, V3, V23 -b92a285e| SHA256SU0 V21.S4, V25.S4 -7e63175e| SHA256SU1 V23.S4, V27.S4, V30.S4 -d504ab0e| VSHADD V11.S2, V6.S2, V21.S2 -5a54734f| VSHL $51, V2.D2, V26.D2 -0638212e| VSHLL $8, V0.B8, V6.H8 -a238216e| VSHLL2 $8, V5.B16, V2.H8 -f5863e0f| VSHRN $2, V23.D2, V21.S2 -f187234f| VSHRN2 $29, V31.D2, V17.S4 -e124b04e| VSHSUB V16.S4, V7.S4, V1.S4 -3657252f| VSLI $5, V25.S2, V22.S2 -c266aa4e| VSMAX V10.S4, V22.S4, V2.S4 -2c6ca74e| VSMIN V7.S4, V1.S4, V12.S4 -4aae390e| VSMINP V25.B8, V18.B8, V10.B8 -1a82ba0e| VSMLAL V26.S2, V16.S2, V26.D2 -2381ad4e| VSMLAL2 V13.S4, V9.S4, V3.D2 -0da17a4e| VSMLSL2 V26.H8, V8.H8, V13.S4 -4f2e0d4e| SMOV V18.B[6], R15 -e4a0980f| VSMULL V24.S[0], V7.S2, V4.D2 -51c2220e| VSMULL V2.B8, V18.B8, V17.H8 -01c26d4e| VSMULL2 V13.H8, V16.H8, V1.S4 -f978205e| VSQABS V7, V25 -760cef5e| VSQADD V15, V3, V22 -390c224e| VSQADD V2.B16, V1.B16, V25.B16 -5439455f| VSQDMLAL V5.H[4], V10, V20 -8391765e| VSQDMLAL V22, V12, V3 -c9907a4e| VSQDMLAL2 V26.H8, V6.H8, V9.S4 -0b73445f| VSQDMLSL V4.H[0], V24, V11 -8e728d0f| VSQDMLSL V13.S[0], V20.S2, V14.D2 -fe787d4f| VSQDMLSL2 V13.H[7], V7.H8, V30.S4 -bdb2b55e| VSQDMLSL V21, V21, V29 -d0c9be4f| VSQDMULH V30.S[3], V14.S4, V16.S4 -89b77c5e| VSQDMULH V28, V28, V9 -c9bb515f| VSQDMULL V1.H[5], V30, V9 -5379e07e| VSQNEG V10, V19 -4b7aa06e| VSQNEG V18.S4, V11.S4 -1bd1750f| VSQRDMULH V5.H[3], V8.H4, V27.H4 -f55e755e| VSQRSHL V21, V23, V21 -ba5fbd4e| VSQRSHL V29.S4, V29.S4, V26.S4 -ba9d1e0f| VSQRSHRN $2, V13.S4, V26.H4 -3d9c284f| VSQRSHRN2 $24, V1.D2, V29.S4 -8a8f2c6f| VSQRSHRUN2 $20, V28.D2, V10.S4 -eb760b5f| VSQSHL $3, V23, V11 -4a77220f| VSQSHL $2, V26.S2, V10.S2 -6c4cfb5e| VSQSHL V27, V3, V12 -ad4eba4e| VSQSHL V26.S4, V21.S4, V13.S4 -9364257f| VSQSHLU $5, V4, V19 -b267392f| VSQSHLU $25, V29.S2, V18.S2 -c085042f| VMVNI $142, V0.H4 -7584326f| VSQSHRUN2 $14, V3.D2, V21.S4 -3a2fe25e| VSQSUB V2, V25, V26 -2c2ca34e| VSQSUB V3.S4, V1.S4, V12.S4 -484ba15e| VSQXTN V26, V8 -824b210e| VSQXTN V28.H8, V2.B8 -5b48214e| VSQXTN2 V2.H8, V27.B16 -e228a16e| VSQXTUN2 V7.D2, V2.S4 -1c44416f| VSRI $63, V0.D2, V28.D2 -1e56eb5e| VSRSHL V11, V16, V30 -bb56fe4e| VSRSHL V30.D2, V21.D2, V27.D2 -c6262d0f| VSRSHR $19, V22.S2, V6.S2 -0c366c5f| VSRSRA $20, V16, V12 -13376e4f| VSRSRA $18, V24.D2, V19.D2 -7ba5040f| VMOVI $(139<<8), V27.H4 -9c076f5f| VSSHR $17, V28, V28 -2804434f| VSSHR $61, V1.D2, V8.D2 -b717535f| VSSRA $45, V29, V23 -c2160f0f| VSSRA $1, V22.B8, V2.B8 -8a333a4e| VSSUBW2 V26.B16, V28.H8, V10.H8 -3a70000c| VST1 [V26.B8], (R1) -1bab004c| VST1 [V27.S4, V28.S4], (R24) -8d69004c| VST1 [V13.S4, V14.S4, V15.S4], (R12) -9c26004c| VST1 [V28.H8, V29.H8, V30.H8, V31.H8], (R20) -c87a9f0c| VST1.P [V8.S2], 8(R22) -5a7f800c| VST1.P [V26.D1], (R26)(R0) -eea99f4c| VST1.P [V14.S4, V15.S4], 32(R15) -11af9d4c| VST1.P [V17.D2, V18.D2], (R24)(R29) -ec689f0c| VST1.P [V12.S2, V13.S2, V14.S2], 24(R7) -8662900c| VST1.P [V6.B8, V7.B8, V8.B8], (R20)(R16) -0b249f4c| VST1.P [V11.H8, V12.H8, V13.H8, V14.H8], 64(R0) -6b2d8b4c| VST1.P [V11.D2, V12.D2, V13.D2, V14.D2], (R11)(R11) -3212004d| VST1 V18.B[12], (R17) -3392004d| VST1 V19.S[3], (R17) -0284000d| VST1 V2.D[0], (R0) -340f9f0d| VST1.P V20.B[3], 1(R25) -0d069a4d| VST1.P V13.B[9], (R16)(R26) -2e51950d| VST1.P V14.H[2], (R9)(R21) -3f839f0d| VST1.P V31.S[0], 4(R25) -1492844d| VST1.P V20.S[3], (R16)(R4) -dd869f4d| VST1.P V29.D[1], 8(R22) -2e869b4d| VST1.P V14.D[1], (R17)(R27) -1e87000c| VST2 (R24), [V30.H4, V31.H4] -07829f0c| VST2 16(R16), [V7.B8, V8.B8] -d38a884c| VST2 (R22)(R8), [V19.S4, V20.S4] -541c204d| ST2 (R2), [V20.B, V21.B][15] -9180200d| ST2 (R4), [V17.S, V18.S][0] -2585204d| ST2 (R9), [V5.D, V6.D][1] -2f06bf4d| ST2 2(R17), [V15.B, V16.B][9] -3b08b44d| ST2 (R1)(R20), [V27.B, V28.B][10] -805bbf0d| ST2 4(R28), [V0.H, V1.H][3] -fb80bf0d| ST2 8(R7), [V27.S, V28.S][0] -6290a80d| ST2 (R3)(R8), [V2.S, V3.S][1] -b587bf4d| ST2 16(R29), [V21.D, V22.D][1] -2c84b64d| ST2 (R1)(R22), [V12.D, V13.D][1] -22469f0c| VST3 24(R17), [V2.H4, V3.H4, V4.H4] -0e30004d| ST3 (R0), [V14.B, V15.B, V16.B][12] -62a1004d| ST3 (R11), [V2.S, V3.S, V4.S][2] -54a4000d| ST3 (R2), [V20.D, V21.D, V22.D][0] -84259f4d| ST3 3(R12), [V4.B, V5.B, V6.B][9] -693c9d4d| ST3 (R3)(R29), [V9.B, V10.B, V11.B][15] -5b709f0d| ST3 6(R2), [V27.H, V28.H, V29.H][2] -e47a960d| ST3 (R23)(R22), [V4.H, V5.H, V6.H][3] -a0a39f0d| ST3 12(R29), [V0.S, V1.S, V2.S][0] -37b0890d| ST3 (R1)(R9), [V23.S, V24.S, V25.S][1] -9aa59f4d| ST3 24(R12), [V26.D, V27.D, V28.D][1] -26a5924d| ST3 (R9)(R18), [V6.D, V7.D, V8.D][1] -3e05000c| VST4 (R9), [V30.H4, V31.H4, V0.H4, V1.H4] -a8039f0c| VST4 32(R29), [V8.B8, V9.B8, V10.B8, V11.B8] -4126204d| ST4 (R18), [V1.B, V2.B, V3.B, V4.B][9] -3b71204d| ST4 (R9), [V27.H, V28.H, V29.H, V30.H][6] -f2b3204d| ST4 (RSP), [V18.S, V19.S, V20.S, V21.S][3] -7fa4200d| ST4 (R3), [V31.D, V0.D, V1.D, V2.D][0] -562ebf4d| ST4 4(R18), [V22.B, V23.B, V24.B, V25.B][11] -563cae0d| ST4 (R2)(R14), [V22.B, V23.B, V24.B, V25.B][7] -1271bf4d| ST4 8(R8), [V18.H, V19.H, V20.H, V21.H][6] -e7a1bf0d| ST4 16(R15), [V7.S, V8.S, V9.S, V10.S][0] -f3b2a30d| ST4 (R23)(R3), [V19.S, V20.S, V21.S, V22.S][1] -eca5bf4d| ST4 32(R15), [V12.D, V13.D, V14.D, V15.D][1] -4ca7bb0d| ST4 (R26)(R27), [V12.D, V13.D, V14.D, V15.D][0] -4f5b182c| VSTNP 192(R26), V22, V15 -e05e0b6c| VSTNP 176(R23), V23, V0 -77be2eac| VSTNP -560(R19), V15, V23 -bb3fa72c| STP.P (V27, V15), -200(R29) -ef18bb6c| STP.P (V15, V6), -80(R7) -777d84ac| STP.P (V23, V31), 128(R11) -d0f9952d| STP.W (V16, V30), 172(R14) -125ca26d| STP.W (V18, V23), -480(R0) -33bbbfad| STP.W (V19, V14), -16(R25) -6ebb322d| STP (V14, V14), -108(R27) -cb92096d| STP (V11, V4), 152(R22) -f2871dad| STP (V18, V1), 944(RSP) -f676003c| MOVD.P V22, 7(R23) -50f50d7c| MOVD.P V16, 223(R10) -0d251ebc| FMOVS.P F13, -30(R8) -1f3510fc| FMOVD.P F31, -253(R8) -05a4883c| MOVD.P V5, 138(R0) -800e063c| MOVD.W V0, 96(R20) -668d157c| MOVD.W V6, -168(R11) -1f3d11bc| FMOVS.W F31, -237(R8) -71bf06fc| FMOVD.W F17, 107(R27) -f50c843c| MOVD.W V21, 64(R7) -f186013d| MOVD V17, 97(R23) -f0e5357d| MOVD V16, 6898(R15) -938d3bbd| FMOVS F19, 15244(R12) -aeb813fd| FMOVD F14, 10096(R5) -2cc4943d| MOVD V12, 21264(R1) -e2f8263c| MOVD V2, (R7)(R6.SXTX) -1d79373c| MOVD V29, (R8)(R23) -bc70003c| MOVD V28, 7(R5) -7190157c| MOVD V17, -167(R3) -073309bc| FMOVS F7, 147(R24) -298100fc| FMOVD F9, 8(R9) -e8c1843c| MOVD V8, 76(R15) -3384266e| VSUB V6.B16, V1.B16, V19.B16 -9163750e| VSUBHN V21.S4, V28.S4, V17.H4 -f3627d4e| VSUBHN2 V29.S4, V23.S4, V19.H8 -1939205e| VSUQADD V8, V25 -0638604e| VSUQADD V0.H8, V6.H8 -81a4284f| VSSHLL2 $8, V4.S4, V1.D2 -f920030e| VTBL V3.B8, [V7.B16, V8.B16], V25.B8 -71400e4e| VTBL V14.B16, [V3.B16, V4.B16, V5.B16], V17.B16 -bc630d4e| VTBL V13.B16, [V29.B16, V30.B16, V31.B16, V0.B16], V28.B16 -6803030e| VTBL V3.B8, [V27.B16], V8.B8 -4b32124e| VTBX V18.B16, [V18.B16, V19.B16], V11.B16 -8f50170e| VTBX V23.B8, [V4.B16, V5.B16, V6.B16], V15.B8 -5673020e| VTBX V2.B8, [V26.B16, V27.B16, V28.B16, V29.B16], V22.B8 -f2130f4e| VTBX V15.B16, [V31.B16], V18.B16 -9e29c34e| VTRN1 V3.D2, V12.D2, V30.D2 -9b6bcf4e| VTRN2 V15.D2, V28.D2, V27.D2 -157cb02e| VUABA V16.S2, V0.S2, V21.S2 -28513c2e| VUABAL V28.B8, V9.B8, V8.H8 -f950a26e| VUABAL2 V2.S4, V7.S4, V25.D2 -a776b26e| VUABD V18.S4, V21.S4, V7.S4 -da726b2e| VUABDL V11.H4, V22.H4, V26.S4 -9473746e| VUABDL2 V20.H8, V28.H8, V20.S4 -aa6b602e| VUADALP V29.H4, V10.S2 -ac013d2e| VUADDL V29.B8, V13.B8, V12.H8 -e500a86e| VUADDL2 V8.S4, V7.S4, V5.D2 -9c28a02e| VUADDLP V4.S2, V28.D1 -4c3a302e| VUADDLV V18.B8, V12 -2810b62e| VUADDW V22.S2, V1.D2, V8.D2 -f2132d6e| VUADDW2 V13.B16, V31.H8, V18.H8 -b3e67f7f| UCVTF $1, F21, F19 -ece5676f| UCVTF $25, V15.D2, V12.D2 -d7d8217e| UCVTFSS F6, F23 -cdd9212e| UCVTF V14.S2, V13.S2 -5788031e| UCVTF $30, R2, F23 -c7ac431e| UCVTF $21, R6, F7 -0777039e| UCVTF $35, R24, F7 -e4f4439e| UCVTF $3, R7, F4 -9100231e| UCVTFWS R4, F17 -e202631e| UCVTFWD R23, F2 -3903239e| UCVTFS R25, F25 -2001639e| UCVTFD R9, F0 -2a07b76e| VUHADD V23.S4, V25.S4, V10.S4 -dc25372e| VUHSUB V23.B8, V14.B8, V28.B8 -de646f2e| VUMAX V15.H4, V6.H4, V30.H4 -4ba6766e| VUMAXP V22.H8, V18.H8, V11.H8 -e26db42e| VUMIN V20.S2, V15.S2, V2.S2 -a7ae712e| VUMINP V17.H4, V21.H4, V7.H4 -afaa716e| VUMINV V21.H8, V15 -42298c2f| VUMLAL V12.S[2], V10.S2, V2.D2 -0a826e2e| VUMLAL V14.H4, V16.H4, V10.S4 -2681a06e| VUMLAL2 V0.S4, V9.S4, V6.D2 -2860bd6f| VUMLSL2 V29.S[1], V1.S4, V8.D2 -19a26b6e| VUMLSL2 V11.H8, V16.H8, V25.S4 -8a3d140e| VMOV V12.S[2], R10 -22a1ba6f| VUMULL2 V26.S[1], V9.S4, V2.D2 -15c0712e| VUMULL V17.H4, V0.H4, V21.S4 -2ec0296e| VUMULL2 V9.B16, V1.B16, V14.H8 -6e0fba7e| VUQADD V26, V27, V14 -db0fe06e| VUQADD V0.D2, V30.D2, V27.D2 -535e6c7e| VUQRSHL V12, V18, V19 -7c5cfe6e| VUQRSHL V30.D2, V3.D2, V28.D2 -9a9e327f| VUQRSHRN $14, V20, V26 -339f0b2f| VUQRSHRN $5, V25.H8, V19.B8 -7e77337f| VUQSHL $19, V27, V30 -8b4d657e| VUQSHL V5, V12, V11 -414c622e| VUQSHL V2.H4, V2.H4, V1.H4 -95942b2f| VUQSHRN $21, V4.D2, V21.S2 -d396246f| VUQSHRN2 $28, V22.D2, V19.S4 -b22ff27e| VUQSUB V18, V29, V18 -b32e756e| VUQSUB V21.H8, V21.H8, V19.H8 -0e4b616e| VUQXTN2 V24.S4, V14.H8 -ca16236e| VURHADD V3.B16, V22.B16, V10.B16 -1f57a26e| VURSHL V2.S4, V24.S4, V31.S4 -8324777f| VURSHR $9, V4, V3 -37caa16e| VURSQRTE V17.S4, V23.S4 -b735517f| VURSRA $47, V13, V23 -0a47f67e| VUSHL V22, V24, V10 -e7a71c2f| VUSHLL $12, V31.H4, V7.S4 -9c38607e| VUSQADD V4, V28 -dc39206e| VUSQADD V14.B16, V28.B16 -dc145d7f| VUSRA $35, V6, V28 -d720752e| VUSUBL V21.H4, V6.H4, V23.S4 -2c236f6e| VUSUBL2 V15.H8, V25.H8, V12.S4 -ed32222e| VUSUBW V2.B8, V23.H8, V13.H8 -72332d6e| VUSUBW2 V13.B16, V27.H8, V18.H8 -655a1c4e| VUZP2 V28.B16, V19.B16, V5.B16 -972a210e| VXTN V20.H8, V23.B8 -5f2aa14e| VXTN2 V18.D2, V31.S4 -9a38910e| VZIP1 V17.S2, V4.S2, V26.S2 -d979990e| VZIP2 V25.S2, V14.S2, V25.S2 -21004192| AND $-9223372036854775808, R1, R1 -0a011f1a| ADCW ZR, R8, R10 -4c00009a| ADC R0, R2, R12 -a602093a| ADCSW R9, R21, R6 -d60217ba| ADCS R23, R22, R22 -0921250b| ADDW R5.UXTH, R8, R9 -ee8e288b| ADD R8.SXTB<<3, R23, R14 -23123011| ADDW $3076, R17, R3 -23127011| ADDW $(3076<<12), R17, R3 -2ba32391| ADD $2280, R25, R11 -2ba36391| ADD $(2280<<12), R25, R11 -67158d0b| ADDW R13->5, R11, R7 -30da198b| ADD R25<<54, R17, R16 -a7e72c2b| ADDSW R12.SXTX<<1, R29, R7 -357338ab| ADDS R24.UXTX<<4, R25, R21 -6b147731| ADDSW $(3525<<12), R3, R11 -6b1477b1| ADDS $(3525<<12), R3, R11 -cd59872b| ADDSW R7->22, R14, R13 -e41f4eab| ADDS R14>>7, ZR, R4 -21004192| AND $-9223372036854775808, R1, R1 -a2430412| ANDW $4026540031, R29, R2 -93910e92| AND $34903429696192636, R12, R19 -7a1ec90a| ANDW R9@>7, R19, R26 -7a1ec98a| AND R9@>7, R19, R26 -17f30172| ANDSW $2863311530, R24, R23 -458051f2| ANDS $-140737488289793, R2, R5 -af629a6a| ANDSW R26->24, R21, R15 -7ab0deea| ANDS R30@>44, R3, R26 -792bcc1a| ASRW R12, R27, R25 -672bce9a| ASR R14, R27, R7 -79ff4b93| ASR $11, R27, R25 -797f0b13| ASRW $11, R27, R25 -ebffff54| BLT -1(PC) -ffffff17| JMP -1(PC) -80161033| BFIW $16, R20, $6, R0 -b95265b3| BFI $27, R21, $21, R25 -6e670333| BFXILW $3, R27, $23, R14 -14a55ab3| BFXIL $26, R8, $16, R20 -b03ce70a| BICW R7@>15, R5, R16 -9235ec8a| BIC R12@>13, R12, R18 -7450b96a| BICSW R25->20, R3, R20 -3730b3ea| BICS R19->12, R1, R23 -370033ea| BICS R19, R1, R23 -370073ea| BICS R19>>0, R1, R23 -ffffff97| CALL -1(PC) -e0013fd6| CALL (R15) -a0031fd6| JMP (R29) -e08c31d4| BRK $35943 -e2ffff35| CBNZW R2, -1(PC) -e7ffffb5| CBNZ R7, -1(PC) -efffff34| CBZW R15, -1(PC) -e1ffffb4| CBZ R1, -1(PC) -e44341ba| CCMN MI, ZR, R1, $4 -4beb543a| CCMNW AL, R26, $20, $11 -015b46ba| CCMN PL, R24, $6, $1 -8602463a| CCMNW EQ, R20, R6, $6 -c6d34cba| CCMN LE, R30, R12, $6 -a76b4f7a| CCMPW VS, R29, $15, $7 -e3d853fa| CCMP LE, R7, $19, $3 -4022467a| CCMPW HS, R18, R6, $0 -c7b346fa| CCMP LT, R30, R6, $7 -e44341ba| CCMN MI, ZR, R1, $4 -ee279b1a| CSINCW HS, ZR, R27, R14 -4174819a| CSINC VC, R2, R1, R1 -5100955a| CSINVW EQ, R2, R21, R17 -573093da| CSINV LO, R2, R19, R23 -6e279b1a| CINCW LO, R27, R14 -7f379b1a| CINCW HS, R27, ZR -5110825a| CINVW EQ, R2, R17 -87718cda| CINV VS, R12, R7 -de739eda| CINV VS, R30, R30 -5f3403d5| CLREX $4 -5f3003d5| CLREX $0 -e615c05a| CLSW R15, R6 -ff15c0da| CLS R15, ZR -2e10c05a| CLZW R1, R14 -a912c0da| CLZ R21, R9 -ff11352b| CMNW R21.UXTB<<4, R15 -1f5220ab| CMN R0.UXTW<<4, R16 -3f214d2b| CMNW R13>>8, R9 -7f4486ab| CMN R6->17, R3 -bf084031| CMNW $(2<<12), R5 -9f2140b1| CMN $(8<<12), R12 -7f0086ab| CMN R6->0, R3 -7f0006ab| CMN R6, R3 -bf001e2b| CMNW R30, R5 -bf080031| CMNW $2, R5 -7f001fab| CMN ZR, R3 -7f0000ab| CMN R0, R3 -ff02266b| CMPW R6.UXTB, R23 -5fab39eb| CMP R25.SXTH<<2, R26 -bfa73bf1| CMP $3817, R29 -7f5c47eb| CMP R7>>23, R3 -2e45895a| CNEGW PL, R9, R14 -ae24895a| CSNEGW HS, R5, R9, R14 -c35595da| CSNEG PL, R14, R21, R3 -ef2487da| CNEG LO, R7, R15 -1041d11a| CRC32B R17, R8, R16 -bb46c31a| CRC32H R3, R21, R27 -c94bd61a| CRC32W R22, R30, R9 -8f4cd49a| CRC32X R20, R4, R15 -7653d21a| CRC32CB R18, R27, R22 -1454d51a| CRC32CH R21, R0, R20 -7558c91a| CRC32CW R9, R3, R21 -185ccb9a| CRC32CX R11, R0, R24 -8c30941a| CSELW LO, R4, R20, R12 -0ea08c9a| CSEL GE, R0, R12, R14 -e3b79f1a| CSETW GE, R3 -fea79f9a| CSET LT, R30 -e5639f5a| CSETMW VC, R5 -e4739fda| CSETM VS, R4 -bad4981a| CSINCW LE, R5, R24, R26 -5167909a| CSINC VS, R26, R16, R17 -e5e2955a| CSINVW AL, R23, R21, R5 -4e308bda| CSINV LO, R2, R11, R14 -0a269d5a| CSNEGW HS, R16, R29, R10 -ab1692da| CSNEG NE, R21, R18, R11 -418ea5d4| DCPS1 $11378 -6239a5d4| DCPS2 $10699 -e3ebabd4| DCPS3 $24415 -bf3103d5| DMB $1 -bf3003d5| DMB $0 -e003bfd6| DRPS -9f3103d5| DSB $1 -c974354a| EONW R21<<29, R6, R9 -89b86eca| EON R14>>46, R4, R9 -76e343d2| EOR $-2287828610704211969, R27, R22 -536d8c4a| EORW R12->27, R10, R19 -d1ef02ca| EOR R2<<59, R30, R17 -e0039fd6| ERET -591d8813| EXTRW $7, R8, R10, R25 -888dd693| EXTR $35, R22, R12, R8 -bf2003d5| SEVL -df2003d5| HINT $6 -a0fc5fd4| HLT $65509 -df3103d5| ISB $1 -df3f03d5| ISB $15 -9dfddf88| LDARW (R12), R29 -d6ffdf88| LDARW (R30), R22 -f6ffdf88| LDARW (RSP), R22 -76ffdfc8| LDAR (R27), R22 -22ffdf08| LDARB (R25), R2 -a7fcdf48| LDARH (R5), R7 -54c17f88| LDAXPW (R10), (R20, R16) -3eaf7fc8| LDAXP (R25), (R30, R11) -e2fd5f88| LDAXRW (R15), R2 -f5fd5fc8| LDAXR (R15), R21 -70fe5f08| LDAXRB (R19), R16 -a8fc5f48| LDAXRH (R5), R8 -e9c55ab8| MOVWU.P -84(R15), R9 -48255df8| MOVD.P -46(R10), R8 -480540f8| MOVD.P (R10), R8 -703c57b8| MOVWU.W -141(R3), R16 -1dac57f8| MOVD.W -134(R0), R29 -393c50b9| MOVWU 4156(R1), R25 -498d5cf9| MOVD 14616(R10), R9 -87d86cb8| MOVWU (R4)(R12.SXTW<<2), R7 -f9586bf8| MOVD (R7)(R11.UXTW<<3), R25 -447866f8| MOVD (R2)(R6<<3), R4 -727a72b8| MOVWU (R19)(R18<<2), R18 -4ca44238| MOVBU.P 42(R2), R12 -4e5c5e38| MOVBU.W -27(R2), R14 -03936d39| MOVBU 2916(R24), R3 -adb54678| MOVHU.P 107(R13), R13 -420c4c78| MOVHU.W 192(R2), R2 -92787579| MOVHU 6844(R4), R18 -fb478238| MOVB.P 36(RSP), R27 -18ee9438| MOVB.W -178(R16), R24 -37958f39| MOVB 997(R9), R23 -e5368b78| MOVH.P 179(R23), R5 -361f9c78| MOVH.W -63(R25), R22 -4d6c8079| MOVH 54(R2), R13 -02669cb8| MOVW.P -58(R16), R2 -488e92b8| MOVW.W -216(R18), R8 -ea9e92b9| MOVW 4764(R23), R10 -172f7f88| LDXPW (R24), (R23, R11) -10347fc8| LDXP (R0), (R16, R13) -fe7f5f88| LDXRW (RSP), R30 -6c7f5fc8| LDXR (R27), R12 -047c5f08| LDXRB (R0), R4 -9a7d5f48| LDXRH (R12), R26 -4f21cb1a| LSLW R11, R10, R15 -1523db9a| LSL R27, R24, R21 -f6681b53| LSLW $5, R7, R22 -221a47d3| LSL $57, R17, R2 -6c24c91a| LSRW R9, R3, R12 -a224ca9a| LSR R10, R5, R2 -707c0153| LSRW $1, R3, R16 -34fc4cd3| LSR $12, R1, R20 -6a5c0d1b| MADDW R13, R23, R3, R10 -445d059b| MADD R5, R23, R10, R4 -35fd001b| MNEGW R0, R9, R21 -77ff0e9b| MNEG R14, R27, R23 -e70302aa| MOVD R2, R7 -fff29892| MOVD $-51096, ZR -d4adb252| MOVW $2507014144, R20 -8747e2d2| MOVD $1313925191285342208, R7 -f5130d32| ORRW $16252928, ZR, R21 -eb6b16b2| MOVD $-4260607558625, R11 -e7031eaa| MOVD R30, R7 -35e88172| MOVKW $3905, R21 -35e8a172| MOVKW $(3905<<16), R21 -35e8c1f2| MOVK $(3905<<32), R21 -050080d2| MOVD $0, R5 -bf4100d5| MSR $1, SPSel -df4903d5| MSR $9, DAIFSet -ff4603d5| MSR $6, DAIFClr -8585011b| MSUBW R1, R1, R12, R5 -42c3139b| MSUB R19, R16, R26, R2 -b67c1a1b| MULW R26, R5, R22 -607c049b| MUL R4, R3, R0 -e837e32a| MVNW R3@>13, R8 -e97f6daa| MVN R13>>31, R9 -fe07176b| NEGSW R23<<1, R30 -f68f54eb| NEGS R20>>35, R22 -e8030d5a| NGCW R13, R8 -e70302da| NGC R2, R7 -e5030a7a| NGCSW R10, R5 -f00318fa| NGCS R24, R16 -032ee42a| ORNW R4@>11, R16, R3 -634cf6aa| ORN R22@>19, R3, R3 -f8490d32| ORRW $4294443071, R15, R24 -96f542b2| ORR $-3458764513820540929, R12, R22 -1a110d2a| ORRW R13<<4, R8, R26 -a65803aa| ORR R3<<22, R5, R6 -190180f9| PRFM (R8), $25 -400080f9| PRFM (R2), PLDL1KEEP -3601c05a| RBITW R9, R22 -6401c0da| RBIT R11, R4 -c0035fd6| RET -0a09c05a| REVW R8, R10 -220cc0da| REV R1, R2 -b206c05a| REV16W R21, R18 -2407c0da| REV16 R25, R4 -750bc0da| REV32 R27, R21 -336f8413| EXTRW $27, R4, R25, R19 -af47ca93| EXTR $17, R10, R29, R15 -cf39ce93| ROR $14, R14, R15 -cf718e13| RORW $28, R14, R15 -832dc31a| RORW R3, R12, R3 -e22ec09a| ROR R0, R23, R2 -1801045a| SBCW R4, R8, R24 -5a0119da| SBC R25, R10, R26 -52021b7a| SBCSW R27, R18, R18 -250105fa| SBCS R5, R9, R5 -56451713| SBFIZW $9, R10, $18, R22 -74397a93| SBFIZ $6, R11, $15, R20 -f4450813| SBFXW $8, R15, $10, R20 -67df4293| SBFX $2, R27, $54, R7 -c90dd61a| SDIVW R22, R14, R9 -a90ecd9a| SDIV R13, R21, R9 -9f2003d5| SEV -bf2003d5| SEVL -691d239b| SMADDL R3, R7, R11, R9 -7dcd259b| SMSUBL R5, R19, R11, R29 -6ffc3a9b| SMNEGL R26, R3, R15 -b57e519b| SMULH R17, R21, R21 -a07c209b| SMULL R0, R5, R0 -d0fe9f88| STLRW R16, (R22) -03ff9fc8| STLR R3, (R24) -67ff08c8| STLXR R7, (R27), R8 -edfd0e88| STLXRW R13, (R15), R14 -f8fe0808| STLXRB R24, (R23), R8 -73ff0b48| STLXRH R19, (R27), R11 -468d22c8| STLXP (R6, R3), (R10), R2 -c6ae3588| STLXPW (R6, R11), (R22), R21 -7668e8a8| LDP.P -384(R3), (R22, R26) -12add1a9| LDP.W 280(R8), (R18, R11) -166c96a8| STP.P (R22, R27), 352(R0) -112d86a9| STP.W (R17, R11), 96(R8) -34441eb8| MOVW.P R20, -28(R1) -11f60bf8| MOVD.P R17, 191(R16) -c15d15b8| MOVW.W R1, -171(R14) -ae4d12f8| MOVD.W R14, -220(R13) -03ef39b9| MOVW R3, 14828(R24) -208228f9| MOVD R0, 20736(R17) -ffb41838| MOVB.P ZR, -117(R7) -bb0d1a38| MOVB.W R27, -96(R13) -b1612239| MOVB R17, 2200(R13) -87841b78| MOVH.P R7, -72(R4) -cc3d1878| MOVH.W R12, -125(R14) -53cf1c79| MOVH R19, 3686(R26) -152002b8| MOVW R21, 34(R0) -397217f8| MOVD R25, -137(R17) -eb021b78| MOVH R11, -80(R23) -61082ac8| STXP (R1, R2), (R3), R10 -e10b2ac8| STXP (R1, R2), (RSP), R10 -61082a88| STXPW (R1, R2), (R3), R10 -e10b2a88| STXPW (R1, R2), (RSP), R10 -627e1288| STXRW R2, (R19), R18 -af7e0dc8| STXR R15, (R21), R13 -277d1808| STXRB R7, (R9), R24 -6c7c0848| STXRH R12, (R3), R8 -f24a344b| SUBW R20.UXTW<<2, R23, R18 -3ac825cb| SUB R5.SXTW<<2, R1, R26 -9b0c5ed1| SUB $(1923<<12), R4, R27 -9b0c5e51| SUBW $(1923<<12), R4, R27 -e8740c4b| SUBW R12<<29, R7, R8 -e8f40ccb| SUB R12<<61, R7, R8 -a6ad226b| SUBSW R2.SXTH<<3, R13, R6 -646b35eb| SUBS R21.UXTX<<2, R27, R4 -c9b04071| SUBSW $(44<<12), R6, R9 -a9315cf1| SUBS $(1804<<12), R13, R9 -c770966b| SUBSW R22->28, R6, R7 -c770566b| SUBSW R22>>28, R6, R7 -d03c1aeb| SUBS R26<<15, R6, R16 -010000d4| SVC $0 -a17f03d4| SVC $7165 -191d0013| SXTBW R8, R25 -a91d4093| SXTB R13, R9 -083d0013| SXTHW R8, R8 -393e4093| SXTH R17, R25 -1b7c4093| SXTW R0, R27 -0c5b2cd5| SYSL $285440, R12 -6e361d53| UBFIZW $3, R19, $14, R14 -c4367dd3| UBFIZ $3, R22, $14, R4 -ef580353| UBFXW $3, R7, $20, R15 -25e661d3| UBFX $33, R17, $25, R5 -af0ac81a| UDIVW R8, R21, R15 -550ac29a| UDIV R2, R18, R21 -3152a09b| UMADDL R0, R20, R17, R17 -6790b69b| UMSUBL R22, R4, R3, R7 -41fea39b| UMNEGL R3, R18, R1 -987ed89b| UMULH R24, R20, R24 -d37eb29b| UMULL R18, R22, R19 -461c0053| UXTBW R2, R6 -f43c0053| UXTHW R7, R20 -0058200e| VCNT V0.B8, V0.B8 -5f2003d5| WFE -7f2003d5| WFI -3f2003d5| YIELD -5cc0201e| FABSS F2, F28 -0ec0601e| FABSD F0, F14 -4a282c1e| FADDS F12, F2, F10 -cc29781e| FADDD F24, F14, F12 -8ed5311e| FCCMPS LE, F17, F12, $14 -ef856b1e| FCCMPD HI, F11, F15, $15 -bd253c1e| FCCMPES HS, F28, F13, $13 -99b4741e| FCCMPED LT, F20, F4, $9 -2022231e| FCMPS F3, F17 -0821201e| FCMPS $(0.0), F8 -60236b1e| FCMPD F11, F27 -2823601e| FCMPD $(0.0), F25 -d023301e| FCMPES F16, F30 -b823201e| FCMPES $(0.0), F29 -50216d1e| FCMPED F13, F10 -3823601e| FCMPED $(0.0), F25 -590f3b1e| FCSELS EQ, F26, F27, F25 -075d761e| FCSELD PL, F8, F22, F7 -ef00381e| FCVTZSSW F7, R15 -1f02389e| FCVTZSS F16, ZR -6302781e| FCVTZSDW F19, R3 -e700789e| FCVTZSD F7, R7 -4900391e| FCVTZUSW F2, R9 -9d01399e| FCVTZUS F12, R29 -7603791e| FCVTZUDW F27, R22 -3603799e| FCVTZUD F25, R22 -5419301e| FDIVS F16, F10, F20 -3e1b6b1e| FDIVD F11, F25, F30 -01090f1f| FMADDS F15, F2, F8, F1 -29574f1f| FMADDD F15, F21, F25, F9 -9b4b251e| FMAXS F5, F28, F27 -ff4b6c1e| FMAXD F12, F31, F31 -0c6b2b1e| FMAXNMS F11, F24, F12 -d068741e| FMAXNMD F20, F6, F16 -5e5a3a1e| FMINS F26, F18, F30 -95587d1e| FMIND F29, F4, F21 -817a371e| FMINNMS F23, F20, F1 -7878681e| FMINNMD F8, F3, F24 -8ece3d0e| VFMLA V29.S2, V20.S2, V14.S2 -71cfbd0e| VFMLS V29.S2, V27.S2, V17.S2 -4f00669e| FMOVD F2, R15 -6b00679e| FMOVD R3, F11 -9d02261e| FMOVS F20, R29 -0f01271e| FMOVS R8, F15 -4940601e| FMOVD F2, F9 -9b40201e| FMOVS F4, F27 -b3d50d1f| FMSUBS F13, F21, F13, F19 -ff9d4b1f| FMSUBD F11, F7, F15, F31 -d808201e| FMULS F0, F6, F24 -a90b651e| FMULD F5, F29, F9 -0542211e| FNEGS F16, F5 -ff43611e| FNEGD F31, F31 -d458311f| FNMADDS F17, F22, F6, F20 -54036f1f| FNMADDD F15, F0, F26, F20 -6ec32e1f| FNMSUBS F14, F16, F27, F14 -0ae57d1f| FNMSUBD F29, F25, F8, F10 -d28a381e| FNMULS F24, F22, F18 -c78b6e1e| FNMULD F14, F30, F7 -1540261e| FRINTAS F0, F21 -1641661e| FRINTAD F8, F22 -31c2271e| FRINTIS F17, F17 -2fc1671e| FRINTID F9, F15 -1043251e| FRINTMS F24, F16 -a240651e| FRINTMD F5, F2 -4e43241e| FRINTNS F26, F14 -8c43641e| FRINTND F28, F12 -64c3241e| FRINTPS F27, F4 -d6c0641e| FRINTPD F6, F22 -4a43271e| FRINTXS F26, F10 -0c42671e| FRINTXD F16, F12 -7cc0251e| FRINTZS F3, F28 -06c3651e| FRINTZD F24, F6 -09c0211e| FSQRTS F0, F9 -dbc1611e| FSQRTD F14, F27 -e03a391e| FSUBS F25, F23, F0 -b8396b1e| FSUBD F11, F13, F24 -7000221e| SCVTFWS R3, F16 -8402621e| SCVTFWD R20, F4 -0c02229e| SCVTFS R16, F12 -4e03629e| SCVTFD R26, F14 -c400231e| UCVTFWS R6, F4 -5701631e| UCVTFWD R10, F23 -1d03239e| UCVTFS R24, F29 -8b02639e| UCVTFD R20, F11 -6e86f05e| VADD V16, V19, V14 -4986654e| VADD V5.H8, V18.H8, V9.H8 -31bf674e| VADDP V7.H8, V25.H8, V17.H8 -60b8714e| VADDV V3.H8, V0 -d35a284e| AESD V22.B16, V19.B16 -fd4b284e| AESE V31.B16, V29.B16 -9b79284e| AESIMC V12.B16, V27.B16 -dc69284e| AESMC V14.B16, V28.B16 -891c244e| VAND V4.B16, V4.B16, V9.B16 -ac8db86e| VCMEQ V24.S4, V13.S4, V12.S4 -ab59200e| VCNT V13.B8, V11.B8 -f2071f5e| VMOV V31.B[15], V18 -f4071b4e| VDUP V31.B[13], V20.B16 -471e242e| VEOR V4.B8, V18.B8, V7.B8 -2320022e| VEXT $4, V2.B8, V1.B8, V3.B8 -2340026e| VEXT $8, V2.B16, V1.B16, V3.B16 -705d196e| VMOV V11.B[11], V16.B[12] -951e054e| VMOV R20, V21.B[2] -5570404c| VLD1 (R2), [V21.B16] -126f400c| VLD1 (R24), [V18.D1, V19.D1, V20.D1] -ae2f400c| VLD1 (R29), [V14.D1, V15.D1, V16.D1, V17.D1] -e172df4c| VLD1.P 16(R23), [V1.B16] -df7ccb0c| VLD1.P (R6)(R11), [V31.D1] -ffacdf0c| VLD1.P 16(R7), [V31.D1, V0.D1] -78a2c40c| VLD1.P (R19)(R4), [V24.B8, V25.B8] -8766c84c| VLD1.P (R20)(R8), [V7.H8, V8.H8, V9.H8] -c523df0c| VLD1.P 32(R30), [V5.B8, V6.B8, V7.B8, V8.B8] -4e1e404d| VLD1 (R18), V14.B[15] -a04b400d| VLD1 (R29), V0.H[1] -6283400d| VLD1 (R27), V2.S[0] -a586404d| VLD1 (R21), V5.D[1] -4a1adf4d| VLD1.P 1(R18), V10.B[14] -700cce4d| VLD1.P (R3)(R14), V16.B[11] -3c50df0d| VLD1.P 2(R1), V28.H[2] -a951d40d| VLD1.P (R13)(R20), V9.H[2] -2192df4d| VLD1.P 4(R17), V1.S[3] -d181c24d| VLD1.P (R14)(R2), V17.S[2] -be84df4d| VLD1.P 8(R5), V30.D[1] -7b87cd0d| VLD1.P (R27)(R13), V27.D[0] -e8375ebc| FMOVS.P -29(RSP), F8 -bc7f44bc| FMOVS.W 71(R29), F28 -971058bd| FMOVS 6160(R4), F23 -5b06155e| VMOV V18.B[10], V27 -9c15196e| VMOV V12.B[2], V28.B[12] -c41f1b4e| VMOV R30, V4.B[13] -441ca24e| VMOV V2.B16, V4.B16 -b43d040e| VMOV V13.S[0], R20 -b43d084e| VMOV V13.D[0], R20 -56e6044f| VMOVI $146, V22.B16 -cf1eb94e| VORR V25.B16, V22.B16, V15.B16 -23e0e20e| VPMULL V2.D1, V1.D1, V3.Q1 -24e0e24e| VPMULL2 V2.D2, V1.D2, V4.Q1 -23e0220e| VPMULL V2.B8, V1.B8, V3.H8 -24e0224e| VPMULL2 V2.B16, V1.B16, V4.H8 -5559606e| VRBIT V10.B16, V21.B16 -4108606e| VREV32 V2.H8, V1.H8 -d100221e| SCVTFWS R6, F17 -6f00621e| SCVTFWD R3, F15 -9902229e| SCVTFS R20, F25 -a901629e| SCVTFD R13, F9 -0201085e| SHA1C V8.S4, V8, V2 -390a285e| SHA1H V17, V25 -7b23005e| SHA1M V0.S4, V27, V27 -9b12035e| SHA1P V3.S4, V20, V27 -b031115e| SHA1SU0 V17.S4, V13.S4, V16.S4 -171b285e| SHA1SU1 V24.S4, V23.S4 -0b52065e| SHA256H2 V6.S4, V16, V11 -4b40045e| SHA256H V4.S4, V2, V11 -1028285e| SHA256SU0 V0.S4, V16.S4 -6f601f5e| SHA256SU1 V31.S4, V3.S4, V15.S4 -d956474f| VSHL $7, V22.D2, V25.D2 -6e67000c| VST1 [V14.H4, V15.H4, V16.H4], (R27) -c229004c| VST1 [V2.S4, V3.S4, V4.S4, V5.S4], (R14) -f9789d4c| VST1.P [V25.S4], (R7)(R29) -f9ac9f4c| VST1.P [V25.D2, V26.D2], 32(R7) -eeac970c| VST1.P [V14.D1, V15.D1], (R7)(R23) -796f9f4c| VST1.P [V25.D2, V26.D2, V27.D2], 48(R27) -6d648e4c| VST1.P [V13.H8, V14.H8, V15.H8], (R3)(R14) -d0289f4c| VST1.P [V16.S4, V17.S4, V18.S4, V19.S4], 64(R6) -9324900c| VST1.P [V19.H4, V20.H4, V21.H4, V22.H4], (R4)(R16) -2c0c000d| VST1 V12.B[3], (R1) -2c0c000d| VST1 V12.B[3], (R1) -9982004d| VST1 V25.S[2], (R20) -e987004d| VST1 V9.D[1], (RSP) -7e189f0d| VST1.P V30.B[6], 1(R3) -6800950d| VST1.P V8.B[0], (R3)(R21) -4f499f4d| VST1.P V15.H[5], 2(R10) -e15a8b4d| VST1.P V1.H[7], (R23)(R11) -7a819f0d| VST1.P V26.S[0], 4(R11) -0992950d| VST1.P V9.S[1], (R16)(R21) -30859f0d| VST1.P V16.D[0], 8(R9) -b786904d| VST1.P V23.D[1], (R21)(R16) -9785e17e| VSUB V1, V12, V23 -eb3bb06e| VUADDLV V31.S4, V11 -7301231e| UCVTFWS R11, F19 -4d03631e| UCVTFWD R26, F13 -eb02239e| UCVTFS R23, F11 -bd00639e| UCVTFD R5, F29 -0b3c030e| VMOV V0.B[1], R11 -2c3c0e0e| VMOV V1.H[3], R12 -d7061a6f| VUSHR $6, V22.H8, V23.H8 diff --git a/src/cmd/vendor/golang.org/x/arch/ppc64/ppc64asm/decode_test.go b/src/cmd/vendor/golang.org/x/arch/ppc64/ppc64asm/decode_test.go deleted file mode 100644 index 039b3edfa0..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/ppc64/ppc64asm/decode_test.go +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2014 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 ppc64asm - -import ( - "encoding/binary" - "encoding/hex" - "io/ioutil" - "strings" - "testing" -) - -func TestDecode(t *testing.T) { - data, err := ioutil.ReadFile("testdata/decode.txt") - if err != nil { - t.Fatal(err) - } - all := string(data) - for strings.Contains(all, "\t\t") { - all = strings.Replace(all, "\t\t", "\t", -1) - } - for _, line := range strings.Split(all, "\n") { - line = strings.TrimSpace(line) - if line == "" || strings.HasPrefix(line, "#") { - continue - } - f := strings.SplitN(line, "\t", 3) - i := strings.Index(f[0], "|") - if i < 0 { - t.Errorf("parsing %q: missing | separator", f[0]) - continue - } - if i%2 != 0 { - t.Errorf("parsing %q: misaligned | separator", f[0]) - } - size := i / 2 - code, err := hex.DecodeString(f[0][:i] + f[0][i+1:]) - if err != nil { - t.Errorf("parsing %q: %v", f[0], err) - continue - } - syntax, asm := f[1], f[2] - inst, err := Decode(code, binary.BigEndian) - var out string - if err != nil { - out = "error: " + err.Error() - } else { - switch syntax { - case "gnu": - out = GNUSyntax(inst) - case "plan9": - out = GoSyntax(inst, 0, nil) - default: - t.Errorf("unknown syntax %q", syntax) - continue - } - } - if out != asm || inst.Len != size { - t.Errorf("Decode(%s) [%s] = %s want %s", f[0], syntax, out, asm) - } - } -} diff --git a/src/cmd/vendor/golang.org/x/arch/ppc64/ppc64asm/ext_test.go b/src/cmd/vendor/golang.org/x/arch/ppc64/ppc64asm/ext_test.go deleted file mode 100644 index cb7f3195fb..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/ppc64/ppc64asm/ext_test.go +++ /dev/null @@ -1,536 +0,0 @@ -// Copyright 2014 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. - -// Support for testing against external disassembler program. -// Copied and simplified from rsc.io/arm/armasm/ext_test.go. - -package ppc64asm - -import ( - "bufio" - "bytes" - "encoding/binary" - "encoding/hex" - "flag" - "fmt" - "io" - "io/ioutil" - "log" - "math/rand" - "os" - "os/exec" - "regexp" - "runtime" - "strings" - "testing" - "time" -) - -var ( - printTests = flag.Bool("printtests", false, "print test cases that exercise new code paths") - dumpTest = flag.Bool("dump", false, "dump all encodings") - mismatch = flag.Bool("mismatch", false, "log allowed mismatches") - longTest = flag.Bool("long", false, "long test") - keep = flag.Bool("keep", false, "keep object files around") - debug = false -) - -// An ExtInst represents a single decoded instruction parsed -// from an external disassembler's output. -type ExtInst struct { - addr uint32 - enc [4]byte - nenc int - text string -} - -func (r ExtInst) String() string { - return fmt.Sprintf("%#x: % x: %s", r.addr, r.enc, r.text) -} - -// An ExtDis is a connection between an external disassembler and a test. -type ExtDis struct { - Dec chan ExtInst - File *os.File - Size int - KeepFile bool - Cmd *exec.Cmd -} - -// Run runs the given command - the external disassembler - and returns -// a buffered reader of its standard output. -func (ext *ExtDis) Run(cmd ...string) (*bufio.Reader, error) { - if *keep { - log.Printf("%s\n", strings.Join(cmd, " ")) - } - ext.Cmd = exec.Command(cmd[0], cmd[1:]...) - out, err := ext.Cmd.StdoutPipe() - if err != nil { - return nil, fmt.Errorf("stdoutpipe: %v", err) - } - if err := ext.Cmd.Start(); err != nil { - return nil, fmt.Errorf("exec: %v", err) - } - - b := bufio.NewReaderSize(out, 1<<20) - return b, nil -} - -// Wait waits for the command started with Run to exit. -func (ext *ExtDis) Wait() error { - return ext.Cmd.Wait() -} - -// testExtDis tests a set of byte sequences against an external disassembler. -// The disassembler is expected to produce the given syntax and be run -// in the given architecture mode (16, 32, or 64-bit). -// The extdis function must start the external disassembler -// and then parse its output, sending the parsed instructions on ext.Dec. -// The generate function calls its argument f once for each byte sequence -// to be tested. The generate function itself will be called twice, and it must -// make the same sequence of calls to f each time. -// When a disassembly does not match the internal decoding, -// allowedMismatch determines whether this mismatch should be -// allowed, or else considered an error. -func testExtDis( - t *testing.T, - syntax string, - extdis func(ext *ExtDis) error, - generate func(f func([]byte)), - allowedMismatch func(text string, size int, inst *Inst, dec ExtInst) bool, -) { - start := time.Now() - ext := &ExtDis{ - Dec: make(chan ExtInst), - } - errc := make(chan error) - - // First pass: write instructions to input file for external disassembler. - file, f, size, err := writeInst(generate) - if err != nil { - t.Fatal(err) - } - ext.Size = size - ext.File = f - defer func() { - f.Close() - if !*keep { - os.Remove(file) - } - }() - - // Second pass: compare disassembly against our decodings. - var ( - totalTests = 0 - totalSkips = 0 - totalErrors = 0 - - errors = make([]string, 0, 100) // sampled errors, at most cap - ) - go func() { - errc <- extdis(ext) - }() - generate(func(enc []byte) { - dec, ok := <-ext.Dec - if !ok { - t.Errorf("decoding stream ended early") - return - } - inst, text := disasm(syntax, pad(enc)) - totalTests++ - if *dumpTest { - fmt.Printf("%x -> %s [%d]\n", enc[:len(enc)], dec.text, dec.nenc) - } - if text != dec.text || inst.Len != dec.nenc { - suffix := "" - if allowedMismatch(text, size, &inst, dec) { - totalSkips++ - if !*mismatch { - return - } - suffix += " (allowed mismatch)" - } - totalErrors++ - if len(errors) >= cap(errors) { - j := rand.Intn(totalErrors) - if j >= cap(errors) { - return - } - errors = append(errors[:j], errors[j+1:]...) - } - errors = append(errors, fmt.Sprintf("decode(%x) = %q, %d, want %q, %d%s", enc, text, inst.Len, dec.text, dec.nenc, suffix)) - } - }) - - if *mismatch { - totalErrors -= totalSkips - } - - for _, b := range errors { - t.Log(b) - } - - if totalErrors > 0 { - t.Fail() - } - t.Logf("%d test cases, %d expected mismatches, %d failures; %.0f cases/second", totalTests, totalSkips, totalErrors, float64(totalTests)/time.Since(start).Seconds()) - - if err := <-errc; err != nil { - t.Fatalf("external disassembler: %v", err) - } - -} - -const start = 0x8000 // start address of text - -// writeInst writes the generated byte sequences to a new file -// starting at offset start. That file is intended to be the input to -// the external disassembler. -func writeInst(generate func(func([]byte))) (file string, f *os.File, size int, err error) { - f, err = ioutil.TempFile("", "ppc64asm") - if err != nil { - return - } - - file = f.Name() - - f.Seek(start, io.SeekStart) - w := bufio.NewWriter(f) - defer w.Flush() - size = 0 - generate(func(x []byte) { - if len(x) > 4 { - x = x[:4] - } - if debug { - fmt.Printf("%#x: %x%x\n", start+size, x, zeros[len(x):]) - } - w.Write(x) - w.Write(zeros[len(x):]) - size += len(zeros) - }) - return file, f, size, nil -} - -var zeros = []byte{0, 0, 0, 0} - -// pad pads the code sequence with pops. -func pad(enc []byte) []byte { - if len(enc) < 4 { - enc = append(enc[:len(enc):len(enc)], zeros[:4-len(enc)]...) - } - return enc -} - -// disasm returns the decoded instruction and text -// for the given source bytes, using the given syntax and mode. -func disasm(syntax string, src []byte) (inst Inst, text string) { - // If printTests is set, we record the coverage value - // before and after, and we write out the inputs for which - // coverage went up, in the format expected in testdata/decode.text. - // This produces a fairly small set of test cases that exercise nearly - // all the code. - var cover float64 - if *printTests { - cover -= coverage() - } - - inst, err := Decode(src, binary.BigEndian) - if err != nil { - text = "error: " + err.Error() - } else { - text = inst.String() - switch syntax { - //case "arm": - // text = ARMSyntax(inst) - case "gnu": - text = GNUSyntax(inst) - //case "plan9": - // text = GoSyntax(inst, 0, nil) - default: - text = "error: unknown syntax " + syntax - } - } - - if *printTests { - cover += coverage() - if cover > 0 { - max := len(src) - if max > 4 && inst.Len <= 4 { - max = 4 - } - fmt.Printf("%x|%x\t%s\t%s\n", src[:inst.Len], src[inst.Len:max], syntax, text) - } - } - - return -} - -// coverage returns a floating point number denoting the -// test coverage until now. The number increases when new code paths are exercised, -// both in the Go program and in the decoder byte code. -func coverage() float64 { - var f float64 - f += testing.Coverage() - f += decodeCoverage() - return f -} - -func decodeCoverage() float64 { - n := 0 - for _, t := range decoderCover { - if t { - n++ - } - } - return float64(1+n) / float64(1+len(decoderCover)) -} - -// Helpers for writing disassembler output parsers. - -// hasPrefix reports whether any of the space-separated words in the text s -// begins with any of the given prefixes. -func hasPrefix(s string, prefixes ...string) bool { - for _, prefix := range prefixes { - for s := s; s != ""; { - if strings.HasPrefix(s, prefix) { - return true - } - i := strings.Index(s, " ") - if i < 0 { - break - } - s = s[i+1:] - } - } - return false -} - -// contains reports whether the text s contains any of the given substrings. -func contains(s string, substrings ...string) bool { - for _, sub := range substrings { - if strings.Contains(s, sub) { - return true - } - } - return false -} - -// isHex reports whether b is a hexadecimal character (0-9A-Fa-f). -func isHex(b byte) bool { return b == '0' || unhex[b] > 0 } - -// parseHex parses the hexadecimal byte dump in hex, -// appending the parsed bytes to raw and returning the updated slice. -// The returned bool signals whether any invalid hex was found. -// Spaces and tabs between bytes are okay but any other non-hex is not. -func parseHex(hex []byte, raw []byte) ([]byte, bool) { - hex = trimSpace(hex) - for j := 0; j < len(hex); { - for hex[j] == ' ' || hex[j] == '\t' { - j++ - } - if j >= len(hex) { - break - } - if j+2 > len(hex) || !isHex(hex[j]) || !isHex(hex[j+1]) { - return nil, false - } - raw = append(raw, unhex[hex[j]]<<4|unhex[hex[j+1]]) - j += 2 - } - return raw, true -} - -var unhex = [256]byte{ - '0': 0, - '1': 1, - '2': 2, - '3': 3, - '4': 4, - '5': 5, - '6': 6, - '7': 7, - '8': 8, - '9': 9, - 'A': 10, - 'B': 11, - 'C': 12, - 'D': 13, - 'E': 14, - 'F': 15, - 'a': 10, - 'b': 11, - 'c': 12, - 'd': 13, - 'e': 14, - 'f': 15, -} - -// index is like bytes.Index(s, []byte(t)) but avoids the allocation. -func index(s []byte, t string) int { - i := 0 - for { - j := bytes.IndexByte(s[i:], t[0]) - if j < 0 { - return -1 - } - i = i + j - if i+len(t) > len(s) { - return -1 - } - for k := 1; k < len(t); k++ { - if s[i+k] != t[k] { - goto nomatch - } - } - return i - nomatch: - i++ - } -} - -// fixSpace rewrites runs of spaces, tabs, and newline characters into single spaces in s. -// If s must be rewritten, it is rewritten in place. -func fixSpace(s []byte) []byte { - s = trimSpace(s) - for i := 0; i < len(s); i++ { - if s[i] == '\t' || s[i] == '\n' || i > 0 && s[i] == ' ' && s[i-1] == ' ' { - goto Fix - } - } - return s - -Fix: - b := s - w := 0 - for i := 0; i < len(s); i++ { - c := s[i] - if c == '\t' || c == '\n' { - c = ' ' - } - if c == ' ' && w > 0 && b[w-1] == ' ' { - continue - } - b[w] = c - w++ - } - if w > 0 && b[w-1] == ' ' { - w-- - } - return b[:w] -} - -// trimSpace trims leading and trailing space from s, returning a subslice of s. -func trimSpace(s []byte) []byte { - j := len(s) - for j > 0 && (s[j-1] == ' ' || s[j-1] == '\t' || s[j-1] == '\n') { - j-- - } - i := 0 - for i < j && (s[i] == ' ' || s[i] == '\t') { - i++ - } - return s[i:j] -} - -// pcrel matches instructions using relative addressing mode. -var ( - pcrel = regexp.MustCompile(`^((?:.* )?(?:b|bc)[^ac ]* (?:(?:[0-9]{1,2},)|(?:[0-7]\*)|\+|lt|gt|eq|so|cr[0-7]|,)*)0x([0-9a-f]+)$`) -) - -// Generators. -// -// The test cases are described as functions that invoke a callback repeatedly, -// with a new input sequence each time. These helpers make writing those -// a little easier. - -// randomCases generates random instructions. -func randomCases(t *testing.T) func(func([]byte)) { - return func(try func([]byte)) { - // All the strides are relatively prime to 2 and therefore to 2²â¸, - // so we will not repeat any instructions until we have tried all 2²â¸. - // Using a stride other than 1 is meant to visit the instructions in a - // pseudorandom order, which gives better variety in the set of - // test cases chosen by -printtests. - stride := uint32(10007) - n := 1 << 28 / 7 - if testing.Short() { - stride = 100003 - n = 1 << 28 / 1001 - } else if *longTest { - stride = 2000033 - n = 1 << 29 - } - x := uint32(0) - for i := 0; i < n; i++ { - enc := (x%15)<<28 | x&(1<<28-1) - try([]byte{byte(enc), byte(enc >> 8), byte(enc >> 16), byte(enc >> 24)}) - x += stride - } - } -} - -// hexCases generates the cases written in hexadecimal in the encoded string. -// Spaces in 'encoded' separate entire test cases, not individual bytes. -func hexCases(t *testing.T, encoded string) func(func([]byte)) { - return func(try func([]byte)) { - for _, x := range strings.Fields(encoded) { - src, err := hex.DecodeString(x) - if err != nil { - t.Errorf("parsing %q: %v", x, err) - } - try(src) - } - } -} - -// testdataCases generates the test cases recorded in testdata/decode.txt. -// It only uses the inputs; it ignores the answers recorded in that file. -func testdataCases(t *testing.T) func(func([]byte)) { - var codes [][]byte - data, err := ioutil.ReadFile("testdata/decode.txt") - if err != nil { - t.Fatal(err) - } - for _, line := range strings.Split(string(data), "\n") { - line = strings.TrimSpace(line) - if line == "" || strings.HasPrefix(line, "#") { - continue - } - f := strings.Fields(line)[0] - i := strings.Index(f, "|") - if i < 0 { - t.Errorf("parsing %q: missing | separator", f) - continue - } - if i%2 != 0 { - t.Errorf("parsing %q: misaligned | separator", f) - } - code, err := hex.DecodeString(f[:i] + f[i+1:]) - if err != nil { - t.Errorf("parsing %q: %v", f, err) - continue - } - codes = append(codes, code) - } - - return func(try func([]byte)) { - for _, code := range codes { - try(code) - } - } -} - -func caller(skip int) string { - pc, _, _, _ := runtime.Caller(skip) - f := runtime.FuncForPC(pc) - name := "?" - if f != nil { - name = f.Name() - if i := strings.LastIndex(name, "."); i >= 0 { - name = name[i+1:] - } - } - return name -} diff --git a/src/cmd/vendor/golang.org/x/arch/ppc64/ppc64asm/field_test.go b/src/cmd/vendor/golang.org/x/arch/ppc64/ppc64asm/field_test.go deleted file mode 100644 index 14eb2f8e4e..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/ppc64/ppc64asm/field_test.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2014 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 ppc64asm - -import ( - "testing" -) - -func panicOrNot(f func()) (panicked bool) { - defer func() { - if err := recover(); err != nil { - panicked = true - } - }() - f() - return false -} - -func TestBitField(t *testing.T) { - var tests = []struct { - b BitField - i uint32 // input - u uint32 // unsigned output - s int32 // signed output - fail bool // if the check should panic - }{ - {BitField{0, 0}, 0, 0, 0, true}, - {BitField{31, 2}, 0, 0, 0, true}, - {BitField{31, 1}, 1, 1, -1, false}, - {BitField{29, 2}, 0 << 1, 0, 0, false}, - {BitField{29, 2}, 1 << 1, 1, 1, false}, - {BitField{29, 2}, 2 << 1, 2, -2, false}, - {BitField{29, 2}, 3 << 1, 3, -1, false}, - {BitField{0, 32}, 1<<32 - 1, 1<<32 - 1, -1, false}, - {BitField{16, 3}, 1 << 15, 4, -4, false}, - } - for i, tst := range tests { - var ( - ou uint32 - os int32 - ) - failed := panicOrNot(func() { - ou = tst.b.Parse(tst.i) - os = tst.b.ParseSigned(tst.i) - }) - if failed != tst.fail { - t.Errorf("case %d: %v: fail test failed, got %v, expected %v", i, tst.b, failed, tst.fail) - continue - } - if ou != tst.u { - t.Errorf("case %d: %v.Parse(%d) returned %d, expected %d", i, tst.b, tst.i, ou, tst.u) - continue - } - if os != tst.s { - t.Errorf("case %d: %v.ParseSigned(%d) returned %d, expected %d", i, tst.b, tst.i, os, tst.s) - } - } -} diff --git a/src/cmd/vendor/golang.org/x/arch/ppc64/ppc64asm/objdump_test.go b/src/cmd/vendor/golang.org/x/arch/ppc64/ppc64asm/objdump_test.go deleted file mode 100644 index b886f7bad1..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/ppc64/ppc64asm/objdump_test.go +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright 2014 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 ppc64asm - -import ( - "encoding/binary" - "strings" - "testing" -) - -func TestObjdumpPowerTestdata(t *testing.T) { testObjdump(t, testdataCases(t)) } -func TestObjdumpPowerManual(t *testing.T) { testObjdump(t, hexCases(t, objdumpManualTests)) } - -// Disable this for now since generating all possible bit combinations within a word -// generates lots of ppc64x instructions not possible with golang so not worth supporting.. -//func TestObjdumpPowerRandom(t *testing.T) { testObjdump(t, randomCases(t)) } - -// objdumpManualTests holds test cases that will be run by TestObjdumpARMManual. -// If you are debugging a few cases that turned up in a longer run, it can be useful -// to list them here and then use -run=Manual, particularly with tracing enabled. -// Note that these are byte sequences, so they must be reversed from the usual -// word presentation. -var objdumpManualTests = ` -6d746162 -4c040000 -88000017 -` - -// allowedMismatchObjdump reports whether the mismatch between text and dec -// should be allowed by the test. -func allowedMismatchObjdump(text string, size int, inst *Inst, dec ExtInst) bool { - if hasPrefix(dec.text, deleted...) { - return true - } - - // we support more instructions than binutils - if strings.Contains(dec.text, ".long") { - return true - } - - if hasPrefix(text, "error:") { - if hasPrefix(dec.text, unsupported...) { - return true - } - } - - switch inst.Op { - case BC, BCA, BL, BLA, BCL, BCLA, TDI, TWI, TW, TD: - return true // TODO(minux): we lack the support for extended opcodes here - case RLWNM, RLWNMCC, RLDICL, RLDICLCC, RLWINM, RLWINMCC, RLDCL, RLDCLCC: - return true // TODO(minux): we lack the support for extended opcodes here - case DCBTST, DCBT: - return true // objdump uses the embedded argument order, we use the server argument order - case MTFSF, MTFSFCC: // objdump doesn't show the last two arguments - return true - case VSPLTB, VSPLTH, VSPLTW: // objdump generates unreasonable result "vspltw v6,v19,4" for 10c49a8c, the last 4 should be 0. - return true - } - if hasPrefix(text, "evm", "evl", "efs") { // objdump will disassemble them wrong (e.g. evmhoumia as vsldoi) - return true - } - - if len(dec.enc) >= 4 { - _ = binary.BigEndian.Uint32(dec.enc[:4]) - } - - return false -} - -// Instructions known to libopcodes (or xed) but not to us. -// TODO(minux): those single precision instructions are missing from ppc64.csv -// those data cache instructions are deprecated, but must be treated as no-ops, see 4.3.2.1 pg. 774. -var unsupported = strings.Fields(` -fmsubs -fmsubs. -fnmadds -fnmadds. -fnmsubs -fnmsubs. -fmuls -fmuls. -fdivs -fdivs. -fadds -fadds. -fsubs -fsubs. -dst -dstst -dssall -`) - -// Instructions explicitly dropped in Power ISA that were in POWER architecture. -// See A.30 Deleted Instructions and A.31 Discontiued Opcodes -var deleted = strings.Fields(` -abs -clcs -clf -cli -dclst -div -divs -doz -dozi -lscbx -maskg -maskir -mfsri -mul -nabs -rac -rfi -rfsvc -rlmi -rrib -sle -sleq -sliq -slliq -sllq -slq -sraiq -sraq -sre -srea -sreq -sriq -srliq -srlq -srq -maskg`) diff --git a/src/cmd/vendor/golang.org/x/arch/ppc64/ppc64asm/objdumpext_test.go b/src/cmd/vendor/golang.org/x/arch/ppc64/ppc64asm/objdumpext_test.go deleted file mode 100644 index d4f8fc8808..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/ppc64/ppc64asm/objdumpext_test.go +++ /dev/null @@ -1,255 +0,0 @@ -// Copyright 2014 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. - -// Copied and simplified from rsc.io/arm/armasm/objdumpext_test.go. - -package ppc64asm - -import ( - "bytes" - "debug/elf" - "encoding/binary" - "fmt" - "io" - "log" - "os" - "runtime" - "strconv" - "strings" - "testing" -) - -const objdumpPath = "/usr/bin/objdump" - -func testObjdump(t *testing.T, generate func(func([]byte))) { - if testing.Short() { - t.Skip("skipping objdump test in short mode") - } - if runtime.GOARCH != "ppc64le" && runtime.GOARCH != "ppc64" { - t.Skip("skipping; test requires host tool objdump for ppc64 or ppc64le") - } - if _, err := os.Stat(objdumpPath); err != nil { - t.Skip(err) - } - - testExtDis(t, "gnu", objdump, generate, allowedMismatchObjdump) -} - -func objdump(ext *ExtDis) error { - // File already written with instructions; add ELF header. - if err := writeELF64(ext.File, ext.Size); err != nil { - return err - } - - b, err := ext.Run(objdumpPath, "-d", "-z", ext.File.Name()) - if err != nil { - return err - } - - var ( - nmatch int - reading bool - next uint32 = start - addr uint32 - encbuf [4]byte - enc []byte - text string - ) - flush := func() { - if addr == next { - if m := pcrel.FindStringSubmatch(text); m != nil { - targ, _ := strconv.ParseUint(m[2], 16, 64) - text = fmt.Sprintf("%s.%+#x", m[1], int32(uint32(targ)-addr)) - } - if strings.HasPrefix(text, "stmia") { - text = "stm" + text[5:] - } - if strings.HasPrefix(text, "stmfd") { - text = "stmdb" + text[5:] - } - if strings.HasPrefix(text, "ldmfd") { - text = "ldm" + text[5:] - } - text = strings.Replace(text, "#0.0", "#0", -1) - if text == "undefined" && len(enc) == 4 { - text = "error: unknown instruction" - enc = nil - } - if len(enc) == 4 { - // prints as word but we want to record bytes - enc[0], enc[3] = enc[3], enc[0] - enc[1], enc[2] = enc[2], enc[1] - } - ext.Dec <- ExtInst{addr, encbuf, len(enc), text} - encbuf = [4]byte{} - enc = nil - next += 4 - } - } - var textangle = []byte("<.text>:") - for { - line, err := b.ReadSlice('\n') - if err != nil { - if err == io.EOF { - break - } - return fmt.Errorf("reading objdump output: %v", err) - } - if bytes.Contains(line, textangle) { - reading = true - continue - } - if !reading { - continue - } - if debug { - os.Stdout.Write(line) - } - if enc1 := parseContinuation(line, encbuf[:len(enc)]); enc1 != nil { - enc = enc1 - continue - } - flush() - nmatch++ - addr, enc, text = parseLine(line, encbuf[:0]) - if addr > next { - return fmt.Errorf("address out of sync expected <= %#x at %q in:\n%s", next, line, line) - } - } - flush() - if next != start+uint32(ext.Size) { - return fmt.Errorf("not enough results found [%d %d]", next, start+ext.Size) - } - if err := ext.Wait(); err != nil { - return fmt.Errorf("exec: %v", err) - } - - return nil -} - -var ( - undefined = []byte("") - unpredictable = []byte("") - illegalShifter = []byte("") -) - -func parseLine(line []byte, encstart []byte) (addr uint32, enc []byte, text string) { - oline := line - i := index(line, ":\t") - if i < 0 { - log.Fatalf("cannot parse disassembly: %q", oline) - } - x, err := strconv.ParseUint(string(trimSpace(line[:i])), 16, 32) - if err != nil { - log.Fatalf("cannot parse disassembly: %q", oline) - } - addr = uint32(x) - line = line[i+2:] - i = bytes.IndexByte(line, '\t') - if i < 0 { - log.Fatalf("cannot parse disassembly: %q", oline) - } - enc, ok := parseHex(line[:i], encstart) - if !ok { - log.Fatalf("cannot parse disassembly: %q", oline) - } - line = trimSpace(line[i:]) - if bytes.Contains(line, undefined) { - text = "undefined" - return - } - if bytes.Contains(line, illegalShifter) { - text = "undefined" - return - } - if false && bytes.Contains(line, unpredictable) { - text = "unpredictable" - return - } - if i := bytes.IndexByte(line, ';'); i >= 0 { - line = trimSpace(line[:i]) - } - text = string(fixSpace(line)) - return -} - -func parseContinuation(line []byte, enc []byte) []byte { - i := index(line, ":\t") - if i < 0 { - return nil - } - line = line[i+1:] - enc, _ = parseHex(line, enc) - return enc -} - -// writeELF64 writes an ELF64 header to the file, -// describing a text segment that starts at start -// and extends for size bytes. -func writeELF64(f *os.File, size int) error { - f.Seek(0, io.SeekStart) - var hdr elf.Header64 - var prog elf.Prog64 - var sect elf.Section64 - var buf bytes.Buffer - binary.Write(&buf, binary.BigEndian, &hdr) - off1 := buf.Len() - binary.Write(&buf, binary.BigEndian, &prog) - off2 := buf.Len() - binary.Write(&buf, binary.BigEndian, §) - off3 := buf.Len() - buf.Reset() - data := byte(elf.ELFDATA2MSB) - hdr = elf.Header64{ - Ident: [16]byte{0x7F, 'E', 'L', 'F', 2, data, 1}, - Type: 2, - Machine: uint16(elf.EM_PPC64), - Version: 1, - Entry: start, - Phoff: uint64(off1), - Shoff: uint64(off2), - Flags: 0x05000002, - Ehsize: uint16(off1), - Phentsize: uint16(off2 - off1), - Phnum: 1, - Shentsize: uint16(off3 - off2), - Shnum: 3, - Shstrndx: 2, - } - binary.Write(&buf, binary.BigEndian, &hdr) - prog = elf.Prog64{ - Type: 1, - Off: start, - Vaddr: start, - Paddr: start, - Filesz: uint64(size), - Memsz: uint64(size), - Flags: 5, - Align: start, - } - binary.Write(&buf, binary.BigEndian, &prog) - binary.Write(&buf, binary.BigEndian, §) // NULL section - sect = elf.Section64{ - Name: 1, - Type: uint32(elf.SHT_PROGBITS), - Addr: start, - Off: start, - Size: uint64(size), - Flags: uint64(elf.SHF_ALLOC | elf.SHF_EXECINSTR), - Addralign: 4, - } - binary.Write(&buf, binary.BigEndian, §) // .text - sect = elf.Section64{ - Name: uint32(len("\x00.text\x00")), - Type: uint32(elf.SHT_STRTAB), - Addr: 0, - Off: uint64(off2 + (off3-off2)*3), - Size: uint64(len("\x00.text\x00.shstrtab\x00")), - Addralign: 1, - } - binary.Write(&buf, binary.BigEndian, §) - buf.WriteString("\x00.text\x00.shstrtab\x00") - f.Write(buf.Bytes()) - return nil -} diff --git a/src/cmd/vendor/golang.org/x/arch/ppc64/ppc64asm/testdata/decode.txt b/src/cmd/vendor/golang.org/x/arch/ppc64/ppc64asm/testdata/decode.txt deleted file mode 100644 index 2a89de04c9..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/ppc64/ppc64asm/testdata/decode.txt +++ /dev/null @@ -1,56 +0,0 @@ -6d746162| gnu xoris r20,r11,24930 -6d746162| plan9 XORIS R11,$24930,R20 -4c040000| gnu mcrf cr0,cr1 -88a70002| gnu lbz r5,2(r7) -88a70002| plan9 MOVBZ 2(R7),R5 -00000000| plan9 WORD $0 -00010000| plan9 error: unknown instruction -00000000| gnu .long 0x0 -00002000| gnu error: unknown instruction -a1841e80| gnu lhz r12,7808(r4) -a1841e80| plan9 MOVHZ 7808(R4),R12 -42093d10| gnu bc 16,4*cr2+gt,.+0x3d10 -e38d5b90| gnu lq r28,23440(r13) -84127a20| gnu lwzu r0,31264(r18) -84127a20| plan9 MOVWZU 31264(R18),R0 -a8630000| gnu lha r3,0(r3) -a8630000| plan9 MOVH 0(R3),R3 -ebb24fd1| gnu ldu r29,20432(r18) -ebb24fd1| plan9 MOVDU 20432(R18),R29 -b1ce0612| gnu sth r14,1554(r14) -b1ce0612| plan9 MOVH R14,1554(R14) -945c62a2| gnu stwu r2,25250(r28) -f91b9c7a| gnu stq r8,-25480(r27) -2c030001| gnu cmpwi r3,1 -2c030001| plan9 CMPW R3,$1 -e8610032| gnu lwa r3,48(r1) -e8610032| plan9 MOVW 48(R1),R3 -4320336b| gnu bcla 25,lt,0x3368 -7e40092e| gnu stwx r18,0,r1 -7e40092e| plan9 MOVW R18,(R1)(0) -7c103c2c| gnu lwbrx r0,r16,r7 -7c103c2c| plan9 MOVWBR (R7)(R16),R0 -7c441d28| gnu stdbrx r2,r4,r3 -7c441d28| plan9 MOVDBR R2,(R3)(R4) -3d220001| gnu addis r9,r2,1 -3d220001| plan9 ADDIS R2,$1,R9 -7ce628ae| gnu lbzx r7,r6,r5 -7ce628ae| plan9 MOVBZ (R5)(R6),R7 -7c0e1e99| gnu lxvd2x vs32,r14,r3 -7c0e1e99| plan9 LXVD2X (R3)(R14),VS32 -7c00422c| gnu dcbt r0,r8,0 -7c00422c| plan9 DCBT (R8) -7fab3040| gnu cmpld cr7,r11,r6 -7fab3040| plan9 CMPU CR7,R11,R6 -2c030001| gnu cmpwi r3,1 -2c030001| plan9 CMPW R3,$1 -7c2b4840| gnu cmpld r11,r9 -7c2b4840| plan9 CMPU R11,R9 -7c6521ad| gnu stdcx. r3,r5,r4 -7c6521ad| plan9 STDCXCC R3,(R4)(R5) -fbe1ffd1| gnu stdu r31,-48(r1) -fbe1ffd1| plan9 MOVDU R31,-48(R1) -7c941f19| gnu stxvw4x vs36,r20,r3 -7c941f19| plan9 STXVW4X VS36,(R3)(R20) -7c6520a8| gnu ldarx r3,r5,r4 -7c6520a8| plan9 LDAR (R4)(R5),R3 diff --git a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/decode_test.go b/src/cmd/vendor/golang.org/x/arch/x86/x86asm/decode_test.go deleted file mode 100644 index 127be263d7..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/decode_test.go +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2014 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 x86asm - -import ( - "encoding/hex" - "io/ioutil" - "strconv" - "strings" - "testing" -) - -func TestDecode(t *testing.T) { - data, err := ioutil.ReadFile("testdata/decode.txt") - if err != nil { - t.Fatal(err) - } - all := string(data) - for strings.Contains(all, "\t\t") { - all = strings.Replace(all, "\t\t", "\t", -1) - } - for _, line := range strings.Split(all, "\n") { - line = strings.TrimSpace(line) - if line == "" || strings.HasPrefix(line, "#") { - continue - } - f := strings.SplitN(line, "\t", 4) - i := strings.Index(f[0], "|") - if i < 0 { - t.Errorf("parsing %q: missing | separator", f[0]) - continue - } - if i%2 != 0 { - t.Errorf("parsing %q: misaligned | separator", f[0]) - } - size := i / 2 - code, err := hex.DecodeString(f[0][:i] + f[0][i+1:]) - if err != nil { - t.Errorf("parsing %q: %v", f[0], err) - continue - } - mode, err := strconv.Atoi(f[1]) - if err != nil { - t.Errorf("invalid mode %q in: %s", f[1], line) - continue - } - syntax, asm := f[2], f[3] - inst, err := Decode(code, mode) - var out string - if err != nil { - out = "error: " + err.Error() - } else { - switch syntax { - case "gnu": - out = GNUSyntax(inst, 0, nil) - case "intel": - out = IntelSyntax(inst, 0, nil) - case "plan9": // [sic] - out = GoSyntax(inst, 0, nil) - default: - t.Errorf("unknown syntax %q", syntax) - continue - } - } - if out != asm || inst.Len != size { - t.Errorf("Decode(%s) [%s] = %s, %d, want %s, %d", f[0], syntax, out, inst.Len, asm, size) - } - } -} diff --git a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/ext_test.go b/src/cmd/vendor/golang.org/x/arch/x86/x86asm/ext_test.go deleted file mode 100644 index 526ef5aa26..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/ext_test.go +++ /dev/null @@ -1,811 +0,0 @@ -// Copyright 2014 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. - -// Support for testing against external disassembler program. - -package x86asm - -import ( - "bufio" - "bytes" - "encoding/hex" - "flag" - "fmt" - "io" - "io/ioutil" - "log" - "math/rand" - "os" - "os/exec" - "regexp" - "runtime" - "strings" - "testing" - "time" -) - -var ( - printTests = flag.Bool("printtests", false, "print test cases that exercise new code paths") - dumpTest = flag.Bool("dump", false, "dump all encodings") - mismatch = flag.Bool("mismatch", false, "log allowed mismatches") - longTest = flag.Bool("long", false, "long test") - keep = flag.Bool("keep", false, "keep object files around") - debug = false -) - -// An ExtInst represents a single decoded instruction parsed -// from an external disassembler's output. -type ExtInst struct { - addr uint32 - enc [32]byte - nenc int - text string -} - -func (r ExtInst) String() string { - return fmt.Sprintf("%#x: % x: %s", r.addr, r.enc, r.text) -} - -// An ExtDis is a connection between an external disassembler and a test. -type ExtDis struct { - Arch int - Dec chan ExtInst - File *os.File - Size int - KeepFile bool - Cmd *exec.Cmd -} - -// Run runs the given command - the external disassembler - and returns -// a buffered reader of its standard output. -func (ext *ExtDis) Run(cmd ...string) (*bufio.Reader, error) { - if *keep { - log.Printf("%s\n", strings.Join(cmd, " ")) - } - ext.Cmd = exec.Command(cmd[0], cmd[1:]...) - out, err := ext.Cmd.StdoutPipe() - if err != nil { - return nil, fmt.Errorf("stdoutpipe: %v", err) - } - if err := ext.Cmd.Start(); err != nil { - return nil, fmt.Errorf("exec: %v", err) - } - - b := bufio.NewReaderSize(out, 1<<20) - return b, nil -} - -// Wait waits for the command started with Run to exit. -func (ext *ExtDis) Wait() error { - return ext.Cmd.Wait() -} - -// testExtDis tests a set of byte sequences against an external disassembler. -// The disassembler is expected to produce the given syntax and be run -// in the given architecture mode (16, 32, or 64-bit). -// The extdis function must start the external disassembler -// and then parse its output, sending the parsed instructions on ext.Dec. -// The generate function calls its argument f once for each byte sequence -// to be tested. The generate function itself will be called twice, and it must -// make the same sequence of calls to f each time. -// When a disassembly does not match the internal decoding, -// allowedMismatch determines whether this mismatch should be -// allowed, or else considered an error. -func testExtDis( - t *testing.T, - syntax string, - arch int, - extdis func(ext *ExtDis) error, - generate func(f func([]byte)), - allowedMismatch func(text string, size int, inst *Inst, dec ExtInst) bool, -) { - start := time.Now() - ext := &ExtDis{ - Dec: make(chan ExtInst), - Arch: arch, - } - errc := make(chan error) - - // First pass: write instructions to input file for external disassembler. - file, f, size, err := writeInst(generate) - if err != nil { - t.Fatal(err) - } - ext.Size = size - ext.File = f - defer func() { - f.Close() - if !*keep { - os.Remove(file) - } - }() - - // Second pass: compare disassembly against our decodings. - var ( - totalTests = 0 - totalSkips = 0 - totalErrors = 0 - - errors = make([]string, 0, 100) // sampled errors, at most cap - ) - go func() { - errc <- extdis(ext) - }() - generate(func(enc []byte) { - dec, ok := <-ext.Dec - if !ok { - t.Errorf("decoding stream ended early") - return - } - inst, text := disasm(syntax, arch, pad(enc)) - totalTests++ - if *dumpTest { - fmt.Printf("%x -> %s [%d]\n", enc[:len(enc)], dec.text, dec.nenc) - } - if text != dec.text || inst.Len != dec.nenc { - suffix := "" - if allowedMismatch(text, size, &inst, dec) { - totalSkips++ - if !*mismatch { - return - } - suffix += " (allowed mismatch)" - } - totalErrors++ - if len(errors) >= cap(errors) { - j := rand.Intn(totalErrors) - if j >= cap(errors) { - return - } - errors = append(errors[:j], errors[j+1:]...) - } - errors = append(errors, fmt.Sprintf("decode(%x) = %q, %d, want %q, %d%s", enc, text, inst.Len, dec.text, dec.nenc, suffix)) - } - }) - - if *mismatch { - totalErrors -= totalSkips - } - - for _, b := range errors { - t.Log(b) - } - - if totalErrors > 0 { - t.Fail() - } - t.Logf("%d test cases, %d expected mismatches, %d failures; %.0f cases/second", totalTests, totalSkips, totalErrors, float64(totalTests)/time.Since(start).Seconds()) - - if err := <-errc; err != nil { - t.Fatalf("external disassembler: %v", err) - } -} - -const start = 0x8000 // start address of text - -// writeInst writes the generated byte sequences to a new file -// starting at offset start. That file is intended to be the input to -// the external disassembler. -func writeInst(generate func(func([]byte))) (file string, f *os.File, size int, err error) { - f, err = ioutil.TempFile("", "x86map") - if err != nil { - return - } - - file = f.Name() - - f.Seek(start, io.SeekStart) - w := bufio.NewWriter(f) - defer w.Flush() - size = 0 - generate(func(x []byte) { - if len(x) > 16 { - x = x[:16] - } - if debug { - fmt.Printf("%#x: %x%x\n", start+size, x, pops[len(x):]) - } - w.Write(x) - w.Write(pops[len(x):]) - size += len(pops) - }) - return file, f, size, nil -} - -// 0x5F is a single-byte pop instruction. -// We pad the bytes we want decoded with enough 0x5Fs -// that no matter what state the instruction stream is in -// after reading our bytes, the pops will get us back to -// a forced instruction boundary. -var pops = []byte{ - 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, - 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, - 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, - 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, -} - -// pad pads the code sequence with pops. -func pad(enc []byte) []byte { - return append(enc[:len(enc):len(enc)], pops...) -} - -// disasm returns the decoded instruction and text -// for the given source bytes, using the given syntax and mode. -func disasm(syntax string, mode int, src []byte) (inst Inst, text string) { - // If printTests is set, we record the coverage value - // before and after, and we write out the inputs for which - // coverage went up, in the format expected in testdata/decode.text. - // This produces a fairly small set of test cases that exercise nearly - // all the code. - var cover float64 - if *printTests { - cover -= coverage() - } - - inst, err := decode1(src, mode, syntax == "gnu") - if err != nil { - text = "error: " + err.Error() - } else { - switch syntax { - case "gnu": - text = GNUSyntax(inst, 0, nil) - case "intel": - text = IntelSyntax(inst, 0, nil) - case "plan9": // [sic] - text = GoSyntax(inst, 0, nil) - default: - text = "error: unknown syntax " + syntax - } - } - - if *printTests { - cover += coverage() - if cover > 0 { - max := len(src) - if max > 16 && inst.Len <= 16 { - max = 16 - } - fmt.Printf("%x|%x\t%d\t%s\t%s\n", src[:inst.Len], src[inst.Len:max], mode, syntax, text) - } - } - - return -} - -// coverage returns a floating point number denoting the -// test coverage until now. The number increases when new code paths are exercised, -// both in the Go program and in the decoder byte code. -func coverage() float64 { - /* - testing.Coverage is not in the main distribution. - The implementation, which must go in package testing, is: - - // Coverage reports the current code coverage as a fraction in the range [0, 1]. - func Coverage() float64 { - var n, d int64 - for _, counters := range cover.Counters { - for _, c := range counters { - if c > 0 { - n++ - } - d++ - } - } - if d == 0 { - return 0 - } - return float64(n) / float64(d) - } - */ - - var f float64 - // f += testing.Coverage() - f += decodeCoverage() - return f -} - -func decodeCoverage() float64 { - n := 0 - for _, t := range decoderCover { - if t { - n++ - } - } - return float64(1+n) / float64(1+len(decoderCover)) -} - -// Helpers for writing disassembler output parsers. - -// isPrefix reports whether text is the name of an instruction prefix. -func isPrefix(text string) bool { - return prefixByte[text] > 0 -} - -// prefixByte maps instruction prefix text to actual prefix byte values. -var prefixByte = map[string]byte{ - "es": 0x26, - "cs": 0x2e, - "ss": 0x36, - "ds": 0x3e, - "fs": 0x64, - "gs": 0x65, - "data16": 0x66, - "addr16": 0x67, - "lock": 0xf0, - "repn": 0xf2, - "repne": 0xf2, - "rep": 0xf3, - "repe": 0xf3, - "xacquire": 0xf2, - "xrelease": 0xf3, - "bnd": 0xf2, - "addr32": 0x66, - "data32": 0x67, -} - -// hasPrefix reports whether any of the space-separated words in the text s -// begins with any of the given prefixes. -func hasPrefix(s string, prefixes ...string) bool { - for _, prefix := range prefixes { - for s := s; s != ""; { - if strings.HasPrefix(s, prefix) { - return true - } - i := strings.Index(s, " ") - if i < 0 { - break - } - s = s[i+1:] - } - } - return false -} - -// contains reports whether the text s contains any of the given substrings. -func contains(s string, substrings ...string) bool { - for _, sub := range substrings { - if strings.Contains(s, sub) { - return true - } - } - return false -} - -// isHex reports whether b is a hexadecimal character (0-9A-Fa-f). -func isHex(b byte) bool { return b == '0' || unhex[b] > 0 } - -// parseHex parses the hexadecimal byte dump in hex, -// appending the parsed bytes to raw and returning the updated slice. -// The returned bool signals whether any invalid hex was found. -// Spaces and tabs between bytes are okay but any other non-hex is not. -func parseHex(hex []byte, raw []byte) ([]byte, bool) { - hex = trimSpace(hex) - for j := 0; j < len(hex); { - for hex[j] == ' ' || hex[j] == '\t' { - j++ - } - if j >= len(hex) { - break - } - if j+2 > len(hex) || !isHex(hex[j]) || !isHex(hex[j+1]) { - return nil, false - } - raw = append(raw, unhex[hex[j]]<<4|unhex[hex[j+1]]) - j += 2 - } - return raw, true -} - -var unhex = [256]byte{ - '0': 0, - '1': 1, - '2': 2, - '3': 3, - '4': 4, - '5': 5, - '6': 6, - '7': 7, - '8': 8, - '9': 9, - 'A': 10, - 'B': 11, - 'C': 12, - 'D': 13, - 'E': 14, - 'F': 15, - 'a': 10, - 'b': 11, - 'c': 12, - 'd': 13, - 'e': 14, - 'f': 15, -} - -// index is like bytes.Index(s, []byte(t)) but avoids the allocation. -func index(s []byte, t string) int { - i := 0 - for { - j := bytes.IndexByte(s[i:], t[0]) - if j < 0 { - return -1 - } - i = i + j - if i+len(t) > len(s) { - return -1 - } - for k := 1; k < len(t); k++ { - if s[i+k] != t[k] { - goto nomatch - } - } - return i - nomatch: - i++ - } -} - -// fixSpace rewrites runs of spaces, tabs, and newline characters into single spaces in s. -// If s must be rewritten, it is rewritten in place. -func fixSpace(s []byte) []byte { - s = trimSpace(s) - for i := 0; i < len(s); i++ { - if s[i] == '\t' || s[i] == '\n' || i > 0 && s[i] == ' ' && s[i-1] == ' ' { - goto Fix - } - } - return s - -Fix: - b := s - w := 0 - for i := 0; i < len(s); i++ { - c := s[i] - if c == '\t' || c == '\n' { - c = ' ' - } - if c == ' ' && w > 0 && b[w-1] == ' ' { - continue - } - b[w] = c - w++ - } - if w > 0 && b[w-1] == ' ' { - w-- - } - return b[:w] -} - -// trimSpace trims leading and trailing space from s, returning a subslice of s. -func trimSpace(s []byte) []byte { - j := len(s) - for j > 0 && (s[j-1] == ' ' || s[j-1] == '\t' || s[j-1] == '\n') { - j-- - } - i := 0 - for i < j && (s[i] == ' ' || s[i] == '\t') { - i++ - } - return s[i:j] -} - -// pcrel and pcrelw match instructions using relative addressing mode. -var ( - pcrel = regexp.MustCompile(`^((?:.* )?(?:j[a-z]+|call|ljmp|loopn?e?w?|xbegin)q?(?:,p[nt])?) 0x([0-9a-f]+)$`) - pcrelw = regexp.MustCompile(`^((?:.* )?(?:callw|jmpw|xbeginw|ljmpw)(?:,p[nt])?) 0x([0-9a-f]+)$`) -) - -// Generators. -// -// The test cases are described as functions that invoke a callback repeatedly, -// with a new input sequence each time. These helpers make writing those -// a little easier. - -// hexCases generates the cases written in hexadecimal in the encoded string. -// Spaces in 'encoded' separate entire test cases, not individual bytes. -func hexCases(t *testing.T, encoded string) func(func([]byte)) { - return func(try func([]byte)) { - for _, x := range strings.Fields(encoded) { - src, err := hex.DecodeString(x) - if err != nil { - t.Errorf("parsing %q: %v", x, err) - } - try(src) - } - } -} - -// testdataCases generates the test cases recorded in testdata/decode.txt. -// It only uses the inputs; it ignores the answers recorded in that file. -func testdataCases(t *testing.T) func(func([]byte)) { - var codes [][]byte - data, err := ioutil.ReadFile("testdata/decode.txt") - if err != nil { - t.Fatal(err) - } - for _, line := range strings.Split(string(data), "\n") { - line = strings.TrimSpace(line) - if line == "" || strings.HasPrefix(line, "#") { - continue - } - f := strings.Fields(line)[0] - i := strings.Index(f, "|") - if i < 0 { - t.Errorf("parsing %q: missing | separator", f) - continue - } - if i%2 != 0 { - t.Errorf("parsing %q: misaligned | separator", f) - } - code, err := hex.DecodeString(f[:i] + f[i+1:]) - if err != nil { - t.Errorf("parsing %q: %v", f, err) - continue - } - codes = append(codes, code) - } - - return func(try func([]byte)) { - for _, code := range codes { - try(code) - } - } -} - -// manyPrefixes generates all possible 2â¹ combinations of nine chosen prefixes. -// The relative ordering of the prefixes within the combinations varies deterministically. -func manyPrefixes(try func([]byte)) { - var prefixBytes = []byte{0x66, 0x67, 0xF0, 0xF2, 0xF3, 0x3E, 0x36, 0x66, 0x67} - var enc []byte - for i := 0; i < 1< 0 { - k := i % len(enc) - enc[0], enc[k] = enc[k], enc[0] - } - try(enc) - } -} - -// basicPrefixes geneartes 8 different possible prefix cases: no prefix -// and then one each of seven different prefix bytes. -func basicPrefixes(try func([]byte)) { - try(nil) - for _, b := range []byte{0x66, 0x67, 0xF0, 0xF2, 0xF3, 0x3E, 0x36} { - try([]byte{b}) - } -} - -func rexPrefixes(try func([]byte)) { - try(nil) - for _, b := range []byte{0x40, 0x48, 0x43, 0x4C} { - try([]byte{b}) - } -} - -// concat takes two generators and returns a generator for the -// cross product of the two, concatenating the results from each. -func concat(gen1, gen2 func(func([]byte))) func(func([]byte)) { - return func(try func([]byte)) { - gen1(func(enc1 []byte) { - gen2(func(enc2 []byte) { - try(append(enc1[:len(enc1):len(enc1)], enc2...)) - }) - }) - } -} - -// concat3 takes three generators and returns a generator for the -// cross product of the three, concatenating the results from each. -func concat3(gen1, gen2, gen3 func(func([]byte))) func(func([]byte)) { - return func(try func([]byte)) { - gen1(func(enc1 []byte) { - gen2(func(enc2 []byte) { - gen3(func(enc3 []byte) { - try(append(append(enc1[:len(enc1):len(enc1)], enc2...), enc3...)) - }) - }) - }) - } -} - -// concat4 takes four generators and returns a generator for the -// cross product of the four, concatenating the results from each. -func concat4(gen1, gen2, gen3, gen4 func(func([]byte))) func(func([]byte)) { - return func(try func([]byte)) { - gen1(func(enc1 []byte) { - gen2(func(enc2 []byte) { - gen3(func(enc3 []byte) { - gen4(func(enc4 []byte) { - try(append(append(append(enc1[:len(enc1):len(enc1)], enc2...), enc3...), enc4...)) - }) - }) - }) - }) - } -} - -// filter generates the sequences from gen that satisfy ok. -func filter(gen func(func([]byte)), ok func([]byte) bool) func(func([]byte)) { - return func(try func([]byte)) { - gen(func(enc []byte) { - if ok(enc) { - try(enc) - } - }) - } -} - -// enum8bit generates all possible 1-byte sequences, followed by distinctive padding. -func enum8bit(try func([]byte)) { - for i := 0; i < 1<<8; i++ { - try([]byte{byte(i), 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}) - } -} - -// enum8bit generates all possible 2-byte sequences, followed by distinctive padding. -func enum16bit(try func([]byte)) { - for i := 0; i < 1<<16; i++ { - try([]byte{byte(i), byte(i >> 8), 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}) - } -} - -// enum24bit generates all possible 3-byte sequences, followed by distinctive padding. -func enum24bit(try func([]byte)) { - for i := 0; i < 1<<24; i++ { - try([]byte{byte(i), byte(i >> 8), byte(i >> 16), 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}) - } -} - -// enumModRM generates all possible modrm bytes and, for modrm values that indicate -// a following sib byte, all possible modrm, sib combinations. -func enumModRM(try func([]byte)) { - for i := 0; i < 256; i++ { - if (i>>3)&07 == 04 && i>>6 != 3 { // has sib - for j := 0; j < 256; j++ { - try([]byte{0, byte(i), byte(j), 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}) // byte encodings - try([]byte{1, byte(i), byte(j), 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}) // word encodings - } - } else { - try([]byte{0, byte(i), 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}) // byte encodings - try([]byte{1, byte(i), 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}) // word encodings - } - } -} - -// fixed generates the single case b. -// It's mainly useful to prepare an argument for concat or concat3. -func fixed(b ...byte) func(func([]byte)) { - return func(try func([]byte)) { - try(b) - } -} - -// testBasic runs the given test function with cases all using opcode as the initial opcode bytes. -// It runs three phases: -// -// First, zero-or-one prefixes followed by opcode followed by all possible 1-byte values. -// If in -short mode, that's all. -// -// Second, zero-or-one prefixes followed by opcode followed by all possible 2-byte values. -// If not in -long mode, that's all. This phase and the next run in parallel with other tests -// (using t.Parallel). -// -// Finally, opcode followed by all possible 3-byte values. The test can take a very long time -// and prints progress messages to package log. -func testBasic(t *testing.T, testfn func(*testing.T, func(func([]byte))), opcode ...byte) { - testfn(t, concat3(basicPrefixes, fixed(opcode...), enum8bit)) - if testing.Short() { - return - } - - t.Parallel() - testfn(t, concat3(basicPrefixes, fixed(opcode...), enum16bit)) - if !*longTest { - return - } - - name := caller(2) - op1 := make([]byte, len(opcode)+1) - copy(op1, opcode) - for i := 0; i < 256; i++ { - log.Printf("%s 24-bit: %d/256\n", name, i) - op1[len(opcode)] = byte(i) - testfn(t, concat(fixed(op1...), enum16bit)) - } -} - -func testBasicREX(t *testing.T, testfn func(*testing.T, func(func([]byte))), opcode ...byte) { - testfn(t, filter(concat4(basicPrefixes, rexPrefixes, fixed(opcode...), enum8bit), isValidREX)) - if testing.Short() { - return - } - - t.Parallel() - testfn(t, filter(concat4(basicPrefixes, rexPrefixes, fixed(opcode...), enum16bit), isValidREX)) - if !*longTest { - return - } - - name := caller(2) - op1 := make([]byte, len(opcode)+1) - copy(op1, opcode) - for i := 0; i < 256; i++ { - log.Printf("%s 24-bit: %d/256\n", name, i) - op1[len(opcode)] = byte(i) - testfn(t, filter(concat3(rexPrefixes, fixed(op1...), enum16bit), isValidREX)) - } -} - -// testPrefix runs the given test function for all many prefix possibilities -// followed by all possible 1-byte sequences. -// -// If in -long mode, it then runs a test of all the prefix possibilities followed -// by all possible 2-byte sequences. -func testPrefix(t *testing.T, testfn func(*testing.T, func(func([]byte)))) { - t.Parallel() - testfn(t, concat(manyPrefixes, enum8bit)) - if testing.Short() || !*longTest { - return - } - - name := caller(2) - for i := 0; i < 256; i++ { - log.Printf("%s 16-bit: %d/256\n", name, i) - testfn(t, concat3(manyPrefixes, fixed(byte(i)), enum8bit)) - } -} - -func testPrefixREX(t *testing.T, testfn func(*testing.T, func(func([]byte)))) { - t.Parallel() - testfn(t, filter(concat3(manyPrefixes, rexPrefixes, enum8bit), isValidREX)) - if testing.Short() || !*longTest { - return - } - - name := caller(2) - for i := 0; i < 256; i++ { - log.Printf("%s 16-bit: %d/256\n", name, i) - testfn(t, filter(concat4(manyPrefixes, rexPrefixes, fixed(byte(i)), enum8bit), isValidREX)) - } -} - -func caller(skip int) string { - pc, _, _, _ := runtime.Caller(skip) - f := runtime.FuncForPC(pc) - name := "?" - if f != nil { - name = f.Name() - if i := strings.LastIndex(name, "."); i >= 0 { - name = name[i+1:] - } - } - return name -} - -func isValidREX(x []byte) bool { - i := 0 - for i < len(x) && isPrefixByte(x[i]) { - i++ - } - if i < len(x) && Prefix(x[i]).IsREX() { - i++ - if i < len(x) { - return !isPrefixByte(x[i]) && !Prefix(x[i]).IsREX() - } - } - return true -} - -func isPrefixByte(b byte) bool { - switch b { - case 0x26, 0x2E, 0x36, 0x3E, 0x64, 0x65, 0x66, 0x67, 0xF0, 0xF2, 0xF3: - return true - } - return false -} diff --git a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/format_test.go b/src/cmd/vendor/golang.org/x/arch/x86/x86asm/format_test.go deleted file mode 100644 index 9f110f8105..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/format_test.go +++ /dev/null @@ -1,68 +0,0 @@ -// 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 x86asm - -import ( - "encoding/hex" - "testing" -) - -func testFormattingSymname(addr uint64) (string, uint64) { - switch addr { - case 0x424080: - return "runtime.printint", 0x424080 - case 0x4c8068: - return "main.A", 0x4c8068 - } - return "", 0 -} - -func TestFormatting(t *testing.T) { - testCases := []struct { - PC uint64 - bytes string - - goSyntax, intelSyntax, gnuSyntax string - }{ - {0x4816b2, "0f8677010000", - "JBE 0x48182f", - "jbe 0x48182f", - "jbe 0x48182f"}, - {0x45065b, "488b442408", - "MOVQ 0x8(SP), AX", - "mov rax, qword ptr [rsp+0x8]", - "mov 0x8(%rsp),%rax"}, - {0x450678, "488b05e9790700", - "MOVQ main.A(SB), AX", - "mov rax, qword ptr [main.A]", - "mov main.A,%rax"}, - {0x450664, "e8173afdff", - "CALL runtime.printint(SB)", - "call runtime.printint", - "callq runtime.printint"}, - {0x45069b, "488d0575d90100", - "LEAQ 0x1d975(IP), AX", - "lea rax, ptr [rip+0x1d975]", - "lea 0x1d975(%rip),%rax"}, - } - - for _, testCase := range testCases { - t.Logf("%#x %s %s", testCase.PC, testCase.bytes, testCase.goSyntax) - bs, _ := hex.DecodeString(testCase.bytes) - inst, err := Decode(bs, 64) - if err != nil { - t.Errorf("decode error %v", err) - } - if out := GoSyntax(inst, testCase.PC, testFormattingSymname); out != testCase.goSyntax { - t.Errorf("GoSyntax: %q", out) - } - if out := IntelSyntax(inst, testCase.PC, testFormattingSymname); out != testCase.intelSyntax { - t.Errorf("IntelSyntax: %q expected: %q", out, testCase.intelSyntax) - } - if out := GNUSyntax(inst, testCase.PC, testFormattingSymname); out != testCase.gnuSyntax { - t.Errorf("GNUSyntax: %q expected: %q", out, testCase.gnuSyntax) - } - } -} diff --git a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/inst_test.go b/src/cmd/vendor/golang.org/x/arch/x86/x86asm/inst_test.go deleted file mode 100644 index 23ac523207..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/inst_test.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2014 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 x86asm - -import ( - "strings" - "testing" -) - -func TestRegString(t *testing.T) { - for r := Reg(1); r <= regMax; r++ { - if regNames[r] == "" { - t.Errorf("regNames[%d] is missing", int(r)) - } else if s := r.String(); strings.Contains(s, "Reg(") { - t.Errorf("Reg(%d).String() = %s, want proper name", int(r), s) - } - } -} diff --git a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/objdump_test.go b/src/cmd/vendor/golang.org/x/arch/x86/x86asm/objdump_test.go deleted file mode 100644 index 3d4e1460f8..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/objdump_test.go +++ /dev/null @@ -1,385 +0,0 @@ -// Copyright 2014 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 x86asm - -import ( - "bytes" - "strings" - "testing" -) - -func TestObjdump32Manual(t *testing.T) { testObjdump32(t, hexCases(t, objdumpManualTests)) } -func TestObjdump32Testdata(t *testing.T) { testObjdump32(t, concat(basicPrefixes, testdataCases(t))) } -func TestObjdump32ModRM(t *testing.T) { testObjdump32(t, concat(basicPrefixes, enumModRM)) } -func TestObjdump32OneByte(t *testing.T) { testBasic(t, testObjdump32) } -func TestObjdump320F(t *testing.T) { testBasic(t, testObjdump32, 0x0F) } -func TestObjdump320F38(t *testing.T) { testBasic(t, testObjdump32, 0x0F, 0x38) } -func TestObjdump320F3A(t *testing.T) { testBasic(t, testObjdump32, 0x0F, 0x3A) } -func TestObjdump32Prefix(t *testing.T) { testPrefix(t, testObjdump32) } - -func TestObjdump64Manual(t *testing.T) { testObjdump64(t, hexCases(t, objdumpManualTests)) } -func TestObjdump64Testdata(t *testing.T) { testObjdump64(t, concat(basicPrefixes, testdataCases(t))) } -func TestObjdump64ModRM(t *testing.T) { testObjdump64(t, concat(basicPrefixes, enumModRM)) } -func TestObjdump64OneByte(t *testing.T) { testBasic(t, testObjdump64) } -func TestObjdump640F(t *testing.T) { testBasic(t, testObjdump64, 0x0F) } -func TestObjdump640F38(t *testing.T) { testBasic(t, testObjdump64, 0x0F, 0x38) } -func TestObjdump640F3A(t *testing.T) { testBasic(t, testObjdump64, 0x0F, 0x3A) } -func TestObjdump64Prefix(t *testing.T) { testPrefix(t, testObjdump64) } - -func TestObjdump64REXTestdata(t *testing.T) { - testObjdump64(t, filter(concat3(basicPrefixes, rexPrefixes, testdataCases(t)), isValidREX)) -} -func TestObjdump64REXModRM(t *testing.T) { - testObjdump64(t, concat3(basicPrefixes, rexPrefixes, enumModRM)) -} -func TestObjdump64REXOneByte(t *testing.T) { testBasicREX(t, testObjdump64) } -func TestObjdump64REX0F(t *testing.T) { testBasicREX(t, testObjdump64, 0x0F) } -func TestObjdump64REX0F38(t *testing.T) { testBasicREX(t, testObjdump64, 0x0F, 0x38) } -func TestObjdump64REX0F3A(t *testing.T) { testBasicREX(t, testObjdump64, 0x0F, 0x3A) } -func TestObjdump64REXPrefix(t *testing.T) { testPrefixREX(t, testObjdump64) } - -// objdumpManualTests holds test cases that will be run by TestObjdumpManual. -// If you are debugging a few cases that turned up in a longer run, it can be useful -// to list them here and then use -run=ObjdumpManual, particularly with tracing enabled. -var objdumpManualTests = ` -4883FE017413 -488DFC2500000000 -488D3D00000000 -` - -// allowedMismatchObjdump reports whether the mismatch between text and dec -// should be allowed by the test. -func allowedMismatchObjdump(text string, size int, inst *Inst, dec ExtInst) bool { - if size == 15 && dec.nenc == 15 && contains(text, "truncated") && contains(dec.text, "(bad)") { - return true - } - - if i := strings.LastIndex(dec.text, " "); isPrefix(dec.text[i+1:]) && size == 1 && isPrefix(text) { - return true - } - - if size == dec.nenc && contains(dec.text, "movupd") && contains(dec.text, "data32") { - s := strings.Replace(dec.text, "data32 ", "", -1) - if text == s { - return true - } - } - - // Simplify our invalid instruction text. - if text == "error: unrecognized instruction" { - text = "BAD" - } - - // Invalid instructions for which libopcodes prints %? register. - // FF E8 11 22 33 44: - // Invalid instructions for which libopcodes prints "internal disassembler error". - // Invalid instructions for which libopcodes prints 8087 only (e.g., DB E0) - // or prints 287 only (e.g., DB E4). - if contains(dec.text, "%?", "", "(8087 only)", "(287 only)") { - dec.text = "(bad)" - } - - // 0F 19 11, 0F 1C 11, 0F 1D 11, 0F 1E 11, 0F 1F 11: libopcodes says nop, - // but the Intel manuals say that the only NOP there is 0F 1F /0. - // Perhaps libopcodes is reporting an older encoding. - i := bytes.IndexByte(dec.enc[:], 0x0F) - if contains(dec.text, "nop") && i >= 0 && i+2 < len(dec.enc) && dec.enc[i+1]&^7 == 0x18 && (dec.enc[i+1] != 0x1F || (dec.enc[i+2]>>3)&7 != 0) { - dec.text = "(bad)" - } - - // Any invalid instruction. - if text == "BAD" && contains(dec.text, "(bad)") { - return true - } - - // Instructions libopcodes knows but we do not (e.g., 0F 19 11). - if (text == "BAD" || size == 1 && isPrefix(text)) && hasPrefix(dec.text, unsupported...) { - return true - } - - // Instructions we know but libopcodes does not (e.g., 0F D0 11). - if (contains(dec.text, "(bad)") || dec.nenc == 1 && isPrefix(dec.text)) && hasPrefix(text, libopcodesUnsupported...) { - return true - } - - // Libopcodes rejects F2 90 as NOP. Not sure why. - if (contains(dec.text, "(bad)") || dec.nenc == 1 && isPrefix(dec.text)) && inst.Opcode>>24 == 0x90 && countPrefix(inst, 0xF2) > 0 { - return true - } - - // 0F 20 11, 0F 21 11, 0F 22 11, 0F 23 11, 0F 24 11: - // Moves into and out of some control registers seem to be unsupported by libopcodes. - // TODO(rsc): Are they invalid somehow? - if (contains(dec.text, "(bad)") || dec.nenc == 1 && isPrefix(dec.text)) && contains(text, "%cr", "%db", "%tr") { - return true - } - - if contains(dec.text, "fwait") && dec.nenc == 1 && dec.enc[0] != 0x9B { - return true - } - - // 9B D9 11: libopcodes reports FSTSW instead of FWAIT + FNSTSW. - // This is correct in that FSTSW is a pseudo-op for the pair, but it really - // is a pair of instructions: execution can stop between them. - // Our decoder chooses to separate them. - if (text == "fwait" || strings.HasSuffix(text, " fwait")) && dec.nenc >= len(strings.Fields(text)) && dec.enc[len(strings.Fields(text))-1] == 0x9B { - return true - } - - // 0F 18 77 11: - // Invalid instructions for which libopcodes prints "nop/reserved". - // Perhaps libopcodes is reporting an older encoding. - if text == "BAD" && contains(dec.text, "nop/reserved") { - return true - } - - // 0F C7 B0 11 22 33 44: libopcodes says vmptrld 0x44332211(%eax); we say rdrand %eax. - // TODO(rsc): Fix, since we are probably wrong, but we don't have vmptrld in the manual. - if contains(text, "rdrand") && contains(dec.text, "vmptrld", "vmxon", "vmclear") { - return true - } - - // DD C8: libopcodes says FNOP but the Intel manual is clear FNOP is only D9 D0. - // Perhaps libopcodes is reporting an older encoding. - if text == "BAD" && contains(dec.text, "fnop") && (dec.enc[0] != 0xD9 || dec.enc[1] != 0xD0) { - return true - } - - // 66 90: libopcodes says xchg %ax,%ax; we say 'data16 nop'. - // The 16-bit swap will preserve the high bits of the register, - // so they are the same. - if contains(text, "nop") && contains(dec.text, "xchg %ax,%ax") { - return true - } - - // If there are multiple prefixes, allow libopcodes to use an alternate name. - if size == 1 && dec.nenc == 1 && prefixByte[text] > 0 && prefixByte[text] == prefixByte[dec.text] { - return true - } - - // 26 9B: libopcodes reports "fwait"/1, ignoring segment prefix. - // https://sourceware.org/bugzilla/show_bug.cgi?id=16891 - // F0 82: Decode="lock"/1 but libopcodes="lock (bad)"/2. - if size == 1 && dec.nenc >= 1 && prefixByte[text] == dec.enc[0] && contains(dec.text, "(bad)", "fwait", "fnop") { - return true - } - - // libopcodes interprets 660f801122 as taking a rel16 but - // truncating the address at 16 bits. Not sure what is correct. - if contains(text, ".+0x2211", ".+0x11") && contains(dec.text, " .-") { - return true - } - - // 66 F3 0F D6 C5, 66 F2 0F D6 C0: libopcodes reports use of XMM register instead of MMX register, - // but only when the instruction has a 66 prefix. Maybe they know something we don't. - if countPrefix(inst, 0x66) > 0 && contains(dec.text, "movdq2q", "movq2dq") && !contains(dec.text, "%mm") { - return true - } - - // 0F 01 F8, 0F 05, 0F 07: these are 64-bit instructions but libopcodes accepts them. - if (text == "BAD" || size == 1 && isPrefix(text)) && contains(dec.text, "swapgs", "syscall", "sysret", "rdfsbase", "rdgsbase", "wrfsbase", "wrgsbase") { - return true - } - - return false -} - -// Instructions known to libopcodes (or xed) but not to us. -// Most of these come from supplementary manuals of one form or another. -var unsupported = strings.Fields(` - bndc - bndl - bndm - bnds - clac - clgi - femms - fldln - fldz - getsec - invlpga - kmov - montmul - pavg - pf2i - pfacc - pfadd - pfcmp - pfmax - pfmin - pfmul - pfna - pfpnac - pfrc - pfrs - pfsub - phadd - phsub - pi2f - pmulhr - prefetch - pswap - ptest - rdseed - sha1 - sha256 - skinit - stac - stgi - vadd - vand - vcmp - vcomis - vcvt - vcvt - vdiv - vhadd - vhsub - vld - vmax - vmcall - vmfunc - vmin - vmlaunch - vmload - vmmcall - vmov - vmov - vmov - vmptrld - vmptrst - vmread - vmresume - vmrun - vmsave - vmul - vmwrite - vmxoff - vor - vpack - vpadd - vpand - vpavg - vpcmp - vpcmp - vpins - vpmadd - vpmax - vpmin - vpmul - vpmul - vpor - vpsad - vpshuf - vpsll - vpsra - vpsrad - vpsrl - vpsub - vpunp - vpxor - vrcp - vrsqrt - vshuf - vsqrt - vsub - vucomis - vunp - vxor - vzero - xcrypt - xsha1 - xsha256 - xstore-rng - insertq - extrq - vmclear - invvpid - adox - vmxon - invept - adcx - vmclear - prefetchwt1 - enclu - encls - salc - fstpnce - fdisi8087_nop - fsetpm287_nop - feni8087_nop - syscall - sysret -`) - -// Instructions known to us but not to libopcodes (at least in binutils 2.24). -var libopcodesUnsupported = strings.Fields(` - addsubps - aes - blend - cvttpd2dq - dpp - extract - haddps - hsubps - insert - invpcid - lddqu - movmsk - movnt - movq2dq - mps - pack - pblend - pclmul - pcmp - pext - phmin - pins - pmax - pmin - pmov - pmovmsk - pmul - popcnt - pslld - psllq - psllw - psrad - psraw - psrl - ptest - punpck - round - xrstor - xsavec - xsaves - comis - ucomis - movhps - movntps - rsqrt - rcpp - puncpck - bsf - movq2dq - cvttpd2dq - movq - hsubpd - movdqa - movhpd - addsubpd - movd - haddpd - cvtps2dq - bsr - cvtdq2ps - rdrand - maskmov - movq2dq - movlhps - movbe - movlpd -`) diff --git a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/objdumpext_test.go b/src/cmd/vendor/golang.org/x/arch/x86/x86asm/objdumpext_test.go deleted file mode 100644 index d1b067d84e..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/objdumpext_test.go +++ /dev/null @@ -1,313 +0,0 @@ -// Copyright 2014 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 x86asm - -import ( - "bytes" - "debug/elf" - "encoding/binary" - "fmt" - "io" - "log" - "os" - "strconv" - "strings" - "testing" -) - -// Apologies for the proprietary path, but we need objdump 2.24 + some committed patches that will land in 2.25. -const objdumpPath = "/Users/rsc/bin/objdump2" - -func testObjdump32(t *testing.T, generate func(func([]byte))) { - testObjdumpArch(t, generate, 32) -} - -func testObjdump64(t *testing.T, generate func(func([]byte))) { - testObjdumpArch(t, generate, 64) -} - -func testObjdumpArch(t *testing.T, generate func(func([]byte)), arch int) { - if testing.Short() { - t.Skip("skipping objdump test in short mode") - } - if _, err := os.Stat(objdumpPath); err != nil { - t.Skip(err) - } - - testExtDis(t, "gnu", arch, objdump, generate, allowedMismatchObjdump) -} - -func objdump(ext *ExtDis) error { - // File already written with instructions; add ELF header. - if ext.Arch == 32 { - if err := writeELF32(ext.File, ext.Size); err != nil { - return err - } - } else { - if err := writeELF64(ext.File, ext.Size); err != nil { - return err - } - } - - b, err := ext.Run(objdumpPath, "-d", "-z", ext.File.Name()) - if err != nil { - return err - } - - var ( - nmatch int - reading bool - next uint32 = start - addr uint32 - encbuf [32]byte - enc []byte - text string - ) - flush := func() { - if addr == next { - switch text { - case "repz": - text = "rep" - case "repnz": - text = "repn" - default: - text = strings.Replace(text, "repz ", "rep ", -1) - text = strings.Replace(text, "repnz ", "repn ", -1) - } - if m := pcrelw.FindStringSubmatch(text); m != nil { - targ, _ := strconv.ParseUint(m[2], 16, 64) - text = fmt.Sprintf("%s .%+#x", m[1], int16(uint32(targ)-uint32(uint16(addr))-uint32(len(enc)))) - } - if m := pcrel.FindStringSubmatch(text); m != nil { - targ, _ := strconv.ParseUint(m[2], 16, 64) - text = fmt.Sprintf("%s .%+#x", m[1], int32(uint32(targ)-addr-uint32(len(enc)))) - } - text = strings.Replace(text, "0x0(", "(", -1) - text = strings.Replace(text, "%st(0)", "%st", -1) - - ext.Dec <- ExtInst{addr, encbuf, len(enc), text} - encbuf = [32]byte{} - enc = nil - next += 32 - } - } - var textangle = []byte("<.text>:") - for { - line, err := b.ReadSlice('\n') - if err != nil { - if err == io.EOF { - break - } - return fmt.Errorf("reading objdump output: %v", err) - } - if bytes.Contains(line, textangle) { - reading = true - continue - } - if !reading { - continue - } - if debug { - os.Stdout.Write(line) - } - if enc1 := parseContinuation(line, encbuf[:len(enc)]); enc1 != nil { - enc = enc1 - continue - } - flush() - nmatch++ - addr, enc, text = parseLine(line, encbuf[:0]) - if addr > next { - return fmt.Errorf("address out of sync expected <= %#x at %q in:\n%s", next, line, line) - } - } - flush() - if next != start+uint32(ext.Size) { - return fmt.Errorf("not enough results found [%d %d]", next, start+ext.Size) - } - if err := ext.Wait(); err != nil { - return fmt.Errorf("exec: %v", err) - } - - return nil -} - -func parseLine(line []byte, encstart []byte) (addr uint32, enc []byte, text string) { - oline := line - i := index(line, ":\t") - if i < 0 { - log.Fatalf("cannot parse disassembly: %q", oline) - } - x, err := strconv.ParseUint(string(trimSpace(line[:i])), 16, 32) - if err != nil { - log.Fatalf("cannot parse disassembly: %q", oline) - } - addr = uint32(x) - line = line[i+2:] - i = bytes.IndexByte(line, '\t') - if i < 0 { - log.Fatalf("cannot parse disassembly: %q", oline) - } - enc, ok := parseHex(line[:i], encstart) - if !ok { - log.Fatalf("cannot parse disassembly: %q", oline) - } - line = trimSpace(line[i:]) - if i := bytes.IndexByte(line, '#'); i >= 0 { - line = trimSpace(line[:i]) - } - text = string(fixSpace(line)) - return -} - -func parseContinuation(line []byte, enc []byte) []byte { - i := index(line, ":\t") - if i < 0 { - return nil - } - line = line[i+1:] - enc, _ = parseHex(line, enc) - return enc -} - -// writeELF32 writes an ELF32 header to the file, -// describing a text segment that starts at start -// and extends for size bytes. -func writeELF32(f *os.File, size int) error { - f.Seek(0, io.SeekStart) - var hdr elf.Header32 - var prog elf.Prog32 - var sect elf.Section32 - var buf bytes.Buffer - binary.Write(&buf, binary.LittleEndian, &hdr) - off1 := buf.Len() - binary.Write(&buf, binary.LittleEndian, &prog) - off2 := buf.Len() - binary.Write(&buf, binary.LittleEndian, §) - off3 := buf.Len() - buf.Reset() - data := byte(elf.ELFDATA2LSB) - hdr = elf.Header32{ - Ident: [16]byte{0x7F, 'E', 'L', 'F', 1, data, 1}, - Type: 2, - Machine: uint16(elf.EM_386), - Version: 1, - Entry: start, - Phoff: uint32(off1), - Shoff: uint32(off2), - Flags: 0x05000002, - Ehsize: uint16(off1), - Phentsize: uint16(off2 - off1), - Phnum: 1, - Shentsize: uint16(off3 - off2), - Shnum: 3, - Shstrndx: 2, - } - binary.Write(&buf, binary.LittleEndian, &hdr) - prog = elf.Prog32{ - Type: 1, - Off: start, - Vaddr: start, - Paddr: start, - Filesz: uint32(size), - Memsz: uint32(size), - Flags: 5, - Align: start, - } - binary.Write(&buf, binary.LittleEndian, &prog) - binary.Write(&buf, binary.LittleEndian, §) // NULL section - sect = elf.Section32{ - Name: 1, - Type: uint32(elf.SHT_PROGBITS), - Addr: start, - Off: start, - Size: uint32(size), - Flags: uint32(elf.SHF_ALLOC | elf.SHF_EXECINSTR), - Addralign: 4, - } - binary.Write(&buf, binary.LittleEndian, §) // .text - sect = elf.Section32{ - Name: uint32(len("\x00.text\x00")), - Type: uint32(elf.SHT_STRTAB), - Addr: 0, - Off: uint32(off2 + (off3-off2)*3), - Size: uint32(len("\x00.text\x00.shstrtab\x00")), - Addralign: 1, - } - binary.Write(&buf, binary.LittleEndian, §) - buf.WriteString("\x00.text\x00.shstrtab\x00") - f.Write(buf.Bytes()) - return nil -} - -// writeELF64 writes an ELF64 header to the file, -// describing a text segment that starts at start -// and extends for size bytes. -func writeELF64(f *os.File, size int) error { - f.Seek(0, io.SeekStart) - var hdr elf.Header64 - var prog elf.Prog64 - var sect elf.Section64 - var buf bytes.Buffer - binary.Write(&buf, binary.LittleEndian, &hdr) - off1 := buf.Len() - binary.Write(&buf, binary.LittleEndian, &prog) - off2 := buf.Len() - binary.Write(&buf, binary.LittleEndian, §) - off3 := buf.Len() - buf.Reset() - data := byte(elf.ELFDATA2LSB) - hdr = elf.Header64{ - Ident: [16]byte{0x7F, 'E', 'L', 'F', 2, data, 1}, - Type: 2, - Machine: uint16(elf.EM_X86_64), - Version: 1, - Entry: start, - Phoff: uint64(off1), - Shoff: uint64(off2), - Flags: 0x05000002, - Ehsize: uint16(off1), - Phentsize: uint16(off2 - off1), - Phnum: 1, - Shentsize: uint16(off3 - off2), - Shnum: 3, - Shstrndx: 2, - } - binary.Write(&buf, binary.LittleEndian, &hdr) - prog = elf.Prog64{ - Type: 1, - Off: start, - Vaddr: start, - Paddr: start, - Filesz: uint64(size), - Memsz: uint64(size), - Flags: 5, - Align: start, - } - binary.Write(&buf, binary.LittleEndian, &prog) - binary.Write(&buf, binary.LittleEndian, §) // NULL section - sect = elf.Section64{ - Name: 1, - Type: uint32(elf.SHT_PROGBITS), - Addr: start, - Off: start, - Size: uint64(size), - Flags: uint64(elf.SHF_ALLOC | elf.SHF_EXECINSTR), - Addralign: 4, - } - binary.Write(&buf, binary.LittleEndian, §) // .text - sect = elf.Section64{ - Name: uint32(len("\x00.text\x00")), - Type: uint32(elf.SHT_STRTAB), - Addr: 0, - Off: uint64(off2 + (off3-off2)*3), - Size: uint64(len("\x00.text\x00.shstrtab\x00")), - Addralign: 1, - } - binary.Write(&buf, binary.LittleEndian, §) - buf.WriteString("\x00.text\x00.shstrtab\x00") - f.Write(buf.Bytes()) - return nil -} diff --git a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/plan9ext_test.go b/src/cmd/vendor/golang.org/x/arch/x86/x86asm/plan9ext_test.go deleted file mode 100644 index 9bd296cf75..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/plan9ext_test.go +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2014 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 x86asm - -import ( - "bytes" - "fmt" - "io" - "log" - "os" - "strconv" - "testing" -) - -const plan9Path = "testdata/libmach8db" - -func testPlan9Arch(t *testing.T, arch int, generate func(func([]byte))) { - if testing.Short() { - t.Skip("skipping libmach test in short mode") - } - if _, err := os.Stat(plan9Path); err != nil { - t.Skip(err) - } - - testExtDis(t, "plan9", arch, plan9, generate, allowedMismatchPlan9) -} - -func testPlan932(t *testing.T, generate func(func([]byte))) { - testPlan9Arch(t, 32, generate) -} - -func testPlan964(t *testing.T, generate func(func([]byte))) { - testPlan9Arch(t, 64, generate) -} - -func plan9(ext *ExtDis) error { - flag := "-8" - if ext.Arch == 64 { - flag = "-6" - } - b, err := ext.Run(plan9Path, flag, ext.File.Name()) - if err != nil { - return err - } - - nmatch := 0 - next := uint32(start) - var ( - addr uint32 - encbuf [32]byte - enc []byte - text string - ) - - for { - line, err := b.ReadSlice('\n') - if err != nil { - if err == io.EOF { - break - } - return fmt.Errorf("reading libmach8db output: %v", err) - } - if debug { - os.Stdout.Write(line) - } - nmatch++ - addr, enc, text = parseLinePlan9(line, encbuf[:0]) - if addr > next { - return fmt.Errorf("address out of sync expected <= %#x at %q in:\n%s", next, line, line) - } - if addr < next { - continue - } - if m := pcrelw.FindStringSubmatch(text); m != nil { - targ, _ := strconv.ParseUint(m[2], 16, 64) - text = fmt.Sprintf("%s .%+#x", m[1], int16(uint32(targ)-uint32(uint16(addr))-uint32(len(enc)))) - } - if m := pcrel.FindStringSubmatch(text); m != nil { - targ, _ := strconv.ParseUint(m[2], 16, 64) - text = fmt.Sprintf("%s .%+#x", m[1], int32(uint32(targ)-addr-uint32(len(enc)))) - } - ext.Dec <- ExtInst{addr, encbuf, len(enc), text} - encbuf = [32]byte{} - enc = nil - next += 32 - } - if next != start+uint32(ext.Size) { - return fmt.Errorf("not enough results found [%d %d]", next, start+ext.Size) - } - if err := ext.Wait(); err != nil { - return fmt.Errorf("exec: %v", err) - } - - return nil -} - -func parseLinePlan9(line []byte, encstart []byte) (addr uint32, enc []byte, text string) { - i := bytes.IndexByte(line, ' ') - if i < 0 || line[0] != '0' || line[1] != 'x' { - log.Fatalf("cannot parse disassembly: %q", line) - } - j := bytes.IndexByte(line[i+1:], ' ') - if j < 0 { - log.Fatalf("cannot parse disassembly: %q", line) - } - j += i + 1 - x, err := strconv.ParseUint(string(trimSpace(line[2:i])), 16, 32) - if err != nil { - log.Fatalf("cannot parse disassembly: %q", line) - } - addr = uint32(x) - enc, ok := parseHex(line[i+1:j], encstart) - if !ok { - log.Fatalf("cannot parse disassembly: %q", line) - } - return addr, enc, string(fixSpace(line[j+1:])) -} diff --git a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/plan9x_test.go b/src/cmd/vendor/golang.org/x/arch/x86/x86asm/plan9x_test.go deleted file mode 100644 index f2ea28cd90..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/plan9x_test.go +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2014 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 x86asm - -import ( - "strings" - "testing" -) - -func TestPlan932Manual(t *testing.T) { testPlan932(t, hexCases(t, plan9ManualTests)) } -func TestPlan932Testdata(t *testing.T) { testPlan932(t, concat(basicPrefixes, testdataCases(t))) } -func TestPlan932ModRM(t *testing.T) { testPlan932(t, concat(basicPrefixes, enumModRM)) } -func TestPlan932OneByte(t *testing.T) { testBasic(t, testPlan932) } -func TestPlan9320F(t *testing.T) { testBasic(t, testPlan932, 0x0F) } -func TestPlan9320F38(t *testing.T) { testBasic(t, testPlan932, 0x0F, 0x38) } -func TestPlan9320F3A(t *testing.T) { testBasic(t, testPlan932, 0x0F, 0x3A) } -func TestPlan932Prefix(t *testing.T) { testPrefix(t, testPlan932) } - -func TestPlan964Manual(t *testing.T) { testPlan964(t, hexCases(t, plan9ManualTests)) } -func TestPlan964Testdata(t *testing.T) { testPlan964(t, concat(basicPrefixes, testdataCases(t))) } -func TestPlan964ModRM(t *testing.T) { testPlan964(t, concat(basicPrefixes, enumModRM)) } -func TestPlan964OneByte(t *testing.T) { testBasic(t, testPlan964) } -func TestPlan9640F(t *testing.T) { testBasic(t, testPlan964, 0x0F) } -func TestPlan9640F38(t *testing.T) { testBasic(t, testPlan964, 0x0F, 0x38) } -func TestPlan9640F3A(t *testing.T) { testBasic(t, testPlan964, 0x0F, 0x3A) } -func TestPlan964Prefix(t *testing.T) { testPrefix(t, testPlan964) } - -func TestPlan964REXTestdata(t *testing.T) { - testPlan964(t, filter(concat3(basicPrefixes, rexPrefixes, testdataCases(t)), isValidREX)) -} -func TestPlan964REXModRM(t *testing.T) { testPlan964(t, concat3(basicPrefixes, rexPrefixes, enumModRM)) } -func TestPlan964REXOneByte(t *testing.T) { testBasicREX(t, testPlan964) } -func TestPlan964REX0F(t *testing.T) { testBasicREX(t, testPlan964, 0x0F) } -func TestPlan964REX0F38(t *testing.T) { testBasicREX(t, testPlan964, 0x0F, 0x38) } -func TestPlan964REX0F3A(t *testing.T) { testBasicREX(t, testPlan964, 0x0F, 0x3A) } -func TestPlan964REXPrefix(t *testing.T) { testPrefixREX(t, testPlan964) } - -// plan9ManualTests holds test cases that will be run by TestPlan9Manual32 and TestPlan9Manual64. -// If you are debugging a few cases that turned up in a longer run, it can be useful -// to list them here and then use -run=Plan9Manual, particularly with tracing enabled. -var plan9ManualTests = ` -` - -// allowedMismatchPlan9 reports whether the mismatch between text and dec -// should be allowed by the test. -func allowedMismatchPlan9(text string, size int, inst *Inst, dec ExtInst) bool { - return false -} - -// Instructions known to us but not to plan9. -var plan9Unsupported = strings.Fields(` -`) diff --git a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/testdata/Makefile b/src/cmd/vendor/golang.org/x/arch/x86/x86asm/testdata/Makefile deleted file mode 100644 index 9cb44127a4..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/testdata/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -libmach8db: libmach8db.c - 9c libmach8db.c && 9l -o libmach8db libmach8db.o; rm libmach8db.o - -newdecode.txt: - cd ..; go test -cover -run 'Objdump.*32' -v -timeout 10h -printtests 2>&1 | tee log - cd ..; go test -cover -run 'Objdump.*64' -v -timeout 10h -printtests 2>&1 | tee -a log - cd ..; go test -cover -run 'Xed.*32' -v -timeout 10h -printtests 2>&1 | tee -a log - cd ..; go test -cover -run 'Xed.*64' -v -timeout 10h -printtests 2>&1 | tee -a log - cd ..; go test -cover -run 'Plan9.*32' -v -timeout 10h -printtests 2>&1 | tee -a log - cd ..; go test -cover -run 'Plan9.*64' -v -timeout 10h -printtests 2>&1 | tee -a log - egrep ' (gnu|intel|plan9) ' ../log |sort >newdecode.txt - diff --git a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/testdata/decode.txt b/src/cmd/vendor/golang.org/x/arch/x86/x86asm/testdata/decode.txt deleted file mode 100644 index 520378916b..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/testdata/decode.txt +++ /dev/null @@ -1,6771 +0,0 @@ -000511223344|556677885f5f5f5f5f5f 32 intel add byte ptr [0x44332211], al -000511223344|556677885f5f5f5f5f5f 64 gnu add %al,0x44332211(%rip) -000511223344|556677885f5f5f5f5f5f 64 intel add byte ptr [rip+0x44332211], al -0100|11223344556677885f5f5f5f5f5f 32 intel add dword ptr [eax], eax -0100|11223344556677885f5f5f5f5f5f 32 plan9 ADDL AX, 0(AX) -0100|11223344556677885f5f5f5f5f5f 64 gnu add %eax,(%rax) -0100|11223344556677885f5f5f5f5f5f 64 intel add dword ptr [rax], eax -0100|11223344556677885f5f5f5f5f5f 64 plan9 ADDL AX, 0(AX) -0211|223344556677885f5f5f5f5f5f5f 32 intel add dl, byte ptr [ecx] -0211|223344556677885f5f5f5f5f5f5f 32 plan9 ADDB 0(CX), DL -0211|223344556677885f5f5f5f5f5f5f 64 gnu add (%rcx),%dl -0211|223344556677885f5f5f5f5f5f5f 64 intel add dl, byte ptr [rcx] -0211|223344556677885f5f5f5f5f5f5f 64 plan9 ADDB 0(CX), DL -0311|223344556677885f5f5f5f5f5f5f 32 intel add edx, dword ptr [ecx] -0311|223344556677885f5f5f5f5f5f5f 32 plan9 ADDL 0(CX), DX -0311|223344556677885f5f5f5f5f5f5f 64 gnu add (%rcx),%edx -0311|223344556677885f5f5f5f5f5f5f 64 intel add edx, dword ptr [rcx] -0311|223344556677885f5f5f5f5f5f5f 64 plan9 ADDL 0(CX), DX -0411|223344556677885f5f5f5f5f5f5f 32 intel add al, 0x11 -0411|223344556677885f5f5f5f5f5f5f 32 plan9 ADDL $0x11, AL -0411|223344556677885f5f5f5f5f5f5f 64 gnu add $0x11,%al -0411|223344556677885f5f5f5f5f5f5f 64 intel add al, 0x11 -0411|223344556677885f5f5f5f5f5f5f 64 plan9 ADDL $0x11, AL -0511223344|556677885f5f5f5f5f5f5f 32 intel add eax, 0x44332211 -0511223344|556677885f5f5f5f5f5f5f 32 plan9 ADDL $0x44332211, AX -0511223344|556677885f5f5f5f5f5f5f 64 gnu add $0x44332211,%eax -0511223344|556677885f5f5f5f5f5f5f 64 intel add eax, 0x44332211 -0511223344|556677885f5f5f5f5f5f5f 64 plan9 ADDL $0x44332211, AX -06|11223344556677885f5f5f5f5f5f5f 32 intel push es -06|11223344556677885f5f5f5f5f5f5f 32 plan9 PUSHL ES -06|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction -06|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction -06|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction -07|11223344556677885f5f5f5f5f5f5f 32 intel pop es -07|11223344556677885f5f5f5f5f5f5f 32 plan9 POPL ES -07|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction -07|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction -07|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0811|223344556677885f5f5f5f5f5f5f 32 intel or byte ptr [ecx], dl -0811|223344556677885f5f5f5f5f5f5f 32 plan9 ORB DL, 0(CX) -0811|223344556677885f5f5f5f5f5f5f 64 gnu or %dl,(%rcx) -0811|223344556677885f5f5f5f5f5f5f 64 intel or byte ptr [rcx], dl -0811|223344556677885f5f5f5f5f5f5f 64 plan9 ORB DL, 0(CX) -0911|223344556677885f5f5f5f5f5f5f 32 intel or dword ptr [ecx], edx -0911|223344556677885f5f5f5f5f5f5f 32 plan9 ORL DX, 0(CX) -0911|223344556677885f5f5f5f5f5f5f 64 gnu or %edx,(%rcx) -0911|223344556677885f5f5f5f5f5f5f 64 intel or dword ptr [rcx], edx -0911|223344556677885f5f5f5f5f5f5f 64 plan9 ORL DX, 0(CX) -0a11|223344556677885f5f5f5f5f5f5f 32 intel or dl, byte ptr [ecx] -0a11|223344556677885f5f5f5f5f5f5f 32 plan9 ORB 0(CX), DL -0a11|223344556677885f5f5f5f5f5f5f 64 gnu or (%rcx),%dl -0a11|223344556677885f5f5f5f5f5f5f 64 intel or dl, byte ptr [rcx] -0a11|223344556677885f5f5f5f5f5f5f 64 plan9 ORB 0(CX), DL -0b11|223344556677885f5f5f5f5f5f5f 32 intel or edx, dword ptr [ecx] -0b11|223344556677885f5f5f5f5f5f5f 32 plan9 ORL 0(CX), DX -0b11|223344556677885f5f5f5f5f5f5f 64 gnu or (%rcx),%edx -0b11|223344556677885f5f5f5f5f5f5f 64 intel or edx, dword ptr [rcx] -0b11|223344556677885f5f5f5f5f5f5f 64 plan9 ORL 0(CX), DX -0c11|223344556677885f5f5f5f5f5f5f 32 intel or al, 0x11 -0c11|223344556677885f5f5f5f5f5f5f 32 plan9 ORL $0x11, AL -0c11|223344556677885f5f5f5f5f5f5f 64 gnu or $0x11,%al -0c11|223344556677885f5f5f5f5f5f5f 64 intel or al, 0x11 -0c11|223344556677885f5f5f5f5f5f5f 64 plan9 ORL $0x11, AL -0d11223344|556677885f5f5f5f5f5f5f 32 intel or eax, 0x44332211 -0d11223344|556677885f5f5f5f5f5f5f 32 plan9 ORL $0x44332211, AX -0d11223344|556677885f5f5f5f5f5f5f 64 gnu or $0x44332211,%eax -0d11223344|556677885f5f5f5f5f5f5f 64 intel or eax, 0x44332211 -0d11223344|556677885f5f5f5f5f5f5f 64 plan9 ORL $0x44332211, AX -0e|11223344556677885f5f5f5f5f5f5f 32 intel push cs -0e|11223344556677885f5f5f5f5f5f5f 32 plan9 PUSHL CS -0e|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction -0e|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction -0e|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0f0000|11223344556677885f5f5f5f5f 32 intel sldt word ptr [eax] -0f0000|11223344556677885f5f5f5f5f 32 plan9 SLDT 0(AX) -0f0000|11223344556677885f5f5f5f5f 64 gnu sldt (%rax) -0f0000|11223344556677885f5f5f5f5f 64 intel sldt word ptr [rax] -0f0000|11223344556677885f5f5f5f5f 64 plan9 SLDT 0(AX) -0f0008|11223344556677885f5f5f5f5f 32 intel str word ptr [eax] -0f0008|11223344556677885f5f5f5f5f 32 plan9 STR 0(AX) -0f0008|11223344556677885f5f5f5f5f 64 gnu str (%rax) -0f0008|11223344556677885f5f5f5f5f 64 intel str word ptr [rax] -0f0008|11223344556677885f5f5f5f5f 64 plan9 STR 0(AX) -0f0011|223344556677885f5f5f5f5f5f 32 intel lldt word ptr [ecx] -0f0011|223344556677885f5f5f5f5f5f 32 plan9 LLDT 0(CX) -0f0011|223344556677885f5f5f5f5f5f 64 gnu lldt (%rcx) -0f0011|223344556677885f5f5f5f5f5f 64 intel lldt word ptr [rcx] -0f0011|223344556677885f5f5f5f5f5f 64 plan9 LLDT 0(CX) -0f0018|11223344556677885f5f5f5f5f 32 intel ltr word ptr [eax] -0f0018|11223344556677885f5f5f5f5f 32 plan9 LTR 0(AX) -0f0018|11223344556677885f5f5f5f5f 64 gnu ltr (%rax) -0f0018|11223344556677885f5f5f5f5f 64 intel ltr word ptr [rax] -0f0018|11223344556677885f5f5f5f5f 64 plan9 LTR 0(AX) -0f0020|11223344556677885f5f5f5f5f 32 intel verr word ptr [eax] -0f0020|11223344556677885f5f5f5f5f 32 plan9 VERR 0(AX) -0f0020|11223344556677885f5f5f5f5f 64 gnu verr (%rax) -0f0020|11223344556677885f5f5f5f5f 64 intel verr word ptr [rax] -0f0020|11223344556677885f5f5f5f5f 64 plan9 VERR 0(AX) -0f0028|11223344556677885f5f5f5f5f 32 intel verw word ptr [eax] -0f0028|11223344556677885f5f5f5f5f 32 plan9 VERW 0(AX) -0f0028|11223344556677885f5f5f5f5f 64 gnu verw (%rax) -0f0028|11223344556677885f5f5f5f5f 64 intel verw word ptr [rax] -0f0028|11223344556677885f5f5f5f5f 64 plan9 VERW 0(AX) -0f0030|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f0030|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f0100|11223344556677885f5f5f5f5f 32 intel sgdt ptr [eax] -0f0100|11223344556677885f5f5f5f5f 32 plan9 SGDT 0(AX) -0f0100|11223344556677885f5f5f5f5f 64 gnu sgdtl (%rax) -0f0100|11223344556677885f5f5f5f5f 64 intel sgdt ptr [rax] -0f0100|11223344556677885f5f5f5f5f 64 plan9 SGDT 0(AX) -0f0108|11223344556677885f5f5f5f5f 32 intel sidt ptr [eax] -0f0108|11223344556677885f5f5f5f5f 32 plan9 SIDT 0(AX) -0f0108|11223344556677885f5f5f5f5f 64 gnu sidtl (%rax) -0f0108|11223344556677885f5f5f5f5f 64 intel sidt ptr [rax] -0f0108|11223344556677885f5f5f5f5f 64 plan9 SIDT 0(AX) -0f0111|223344556677885f5f5f5f5f5f 32 intel lgdt ptr [ecx] -0f0111|223344556677885f5f5f5f5f5f 32 plan9 LGDT 0(CX) -0f0111|223344556677885f5f5f5f5f5f 64 gnu lgdtl (%rcx) -0f0111|223344556677885f5f5f5f5f5f 64 intel lgdt ptr [rcx] -0f0111|223344556677885f5f5f5f5f5f 64 plan9 LGDT 0(CX) -0f0118|11223344556677885f5f5f5f5f 32 intel lidt ptr [eax] -0f0118|11223344556677885f5f5f5f5f 32 plan9 LIDT 0(AX) -0f0118|11223344556677885f5f5f5f5f 64 gnu lidtl (%rax) -0f0118|11223344556677885f5f5f5f5f 64 intel lidt ptr [rax] -0f0118|11223344556677885f5f5f5f5f 64 plan9 LIDT 0(AX) -0f0120|11223344556677885f5f5f5f5f 32 intel smsw word ptr [eax] -0f0120|11223344556677885f5f5f5f5f 32 plan9 SMSW 0(AX) -0f0120|11223344556677885f5f5f5f5f 64 gnu smsw (%rax) -0f0120|11223344556677885f5f5f5f5f 64 intel smsw word ptr [rax] -0f0120|11223344556677885f5f5f5f5f 64 plan9 SMSW 0(AX) -0f0130|11223344556677885f5f5f5f5f 32 intel lmsw word ptr [eax] -0f0130|11223344556677885f5f5f5f5f 32 plan9 LMSW 0(AX) -0f0130|11223344556677885f5f5f5f5f 64 gnu lmsw (%rax) -0f0130|11223344556677885f5f5f5f5f 64 intel lmsw word ptr [rax] -0f0130|11223344556677885f5f5f5f5f 64 plan9 LMSW 0(AX) -0f0138|11223344556677885f5f5f5f5f 32 intel invlpg byte ptr [eax] -0f0138|11223344556677885f5f5f5f5f 32 plan9 INVLPG 0(AX) -0f0138|11223344556677885f5f5f5f5f 64 gnu invlpg (%rax) -0f0138|11223344556677885f5f5f5f5f 64 intel invlpg byte ptr [rax] -0f0138|11223344556677885f5f5f5f5f 64 plan9 INVLPG 0(AX) -0f01c8|11223344556677885f5f5f5f5f 32 intel monitor -0f01c8|11223344556677885f5f5f5f5f 32 plan9 MONITOR -0f01c8|11223344556677885f5f5f5f5f 64 gnu monitor %eax,%ecx,%edx -0f01c8|11223344556677885f5f5f5f5f 64 intel monitor -0f01c8|11223344556677885f5f5f5f5f 64 plan9 MONITOR -0f01c9|11223344556677885f5f5f5f5f 32 intel mwait -0f01c9|11223344556677885f5f5f5f5f 32 plan9 MWAIT -0f01c9|11223344556677885f5f5f5f5f 64 gnu mwait %rax,%rcx -0f01c9|11223344556677885f5f5f5f5f 64 intel mwait -0f01c9|11223344556677885f5f5f5f5f 64 plan9 MWAIT -0f01d0|11223344556677885f5f5f5f5f 32 intel xgetbv -0f01d0|11223344556677885f5f5f5f5f 32 plan9 XGETBV -0f01d0|11223344556677885f5f5f5f5f 64 gnu xgetbv -0f01d0|11223344556677885f5f5f5f5f 64 intel xgetbv -0f01d0|11223344556677885f5f5f5f5f 64 plan9 XGETBV -0f01d1|11223344556677885f5f5f5f5f 32 intel xsetbv -0f01d1|11223344556677885f5f5f5f5f 32 plan9 XSETBV -0f01d1|11223344556677885f5f5f5f5f 64 gnu xsetbv -0f01d1|11223344556677885f5f5f5f5f 64 intel xsetbv -0f01d1|11223344556677885f5f5f5f5f 64 plan9 XSETBV -0f01d5|11223344556677885f5f5f5f5f 32 intel xend -0f01d5|11223344556677885f5f5f5f5f 32 plan9 XEND -0f01d5|11223344556677885f5f5f5f5f 64 gnu xend -0f01d5|11223344556677885f5f5f5f5f 64 intel xend -0f01d5|11223344556677885f5f5f5f5f 64 plan9 XEND -0f01d6|11223344556677885f5f5f5f5f 32 intel xtest -0f01d6|11223344556677885f5f5f5f5f 32 plan9 XTEST -0f01d6|11223344556677885f5f5f5f5f 64 gnu xtest -0f01d6|11223344556677885f5f5f5f5f 64 intel xtest -0f01d6|11223344556677885f5f5f5f5f 64 plan9 XTEST -0f01f8|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f01f8|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f01f8|11223344556677885f5f5f5f5f 64 gnu swapgs -0f01f8|11223344556677885f5f5f5f5f 64 intel swapgs -0f01f8|11223344556677885f5f5f5f5f 64 plan9 SWAPGS -0f01f9|11223344556677885f5f5f5f5f 32 intel rdtscp -0f01f9|11223344556677885f5f5f5f5f 32 plan9 RDTSCP -0f01f9|11223344556677885f5f5f5f5f 64 gnu rdtscp -0f01f9|11223344556677885f5f5f5f5f 64 intel rdtscp -0f01f9|11223344556677885f5f5f5f5f 64 plan9 RDTSCP -0f0211|223344556677885f5f5f5f5f5f 32 intel lar edx, word ptr [ecx] -0f0211|223344556677885f5f5f5f5f5f 32 plan9 LAR 0(CX), DX -0f0211|223344556677885f5f5f5f5f5f 64 gnu lar (%rcx),%edx -0f0211|223344556677885f5f5f5f5f5f 64 intel lar edx, word ptr [rcx] -0f0211|223344556677885f5f5f5f5f5f 64 plan9 LAR 0(CX), DX -0f0311|223344556677885f5f5f5f5f5f 32 intel lsl edx, word ptr [ecx] -0f0311|223344556677885f5f5f5f5f5f 32 plan9 LSL 0(CX), DX -0f0311|223344556677885f5f5f5f5f5f 64 gnu lsl (%rcx),%edx -0f0311|223344556677885f5f5f5f5f5f 64 intel lsl edx, word ptr [rcx] -0f0311|223344556677885f5f5f5f5f5f 64 plan9 LSL 0(CX), DX -0f04|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0f04|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0f04|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -0f04|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -0f04|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0f05|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0f05|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0f05|11223344556677885f5f5f5f5f5f 64 gnu syscall -0f05|11223344556677885f5f5f5f5f5f 64 intel syscall -0f05|11223344556677885f5f5f5f5f5f 64 plan9 SYSCALL -0f06|11223344556677885f5f5f5f5f5f 32 intel clts -0f06|11223344556677885f5f5f5f5f5f 32 plan9 CLTS -0f06|11223344556677885f5f5f5f5f5f 64 gnu clts -0f06|11223344556677885f5f5f5f5f5f 64 intel clts -0f06|11223344556677885f5f5f5f5f5f 64 plan9 CLTS -0f07|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0f07|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0f07|11223344556677885f5f5f5f5f5f 64 gnu sysretq -0f07|11223344556677885f5f5f5f5f5f 64 intel sysret -0f07|11223344556677885f5f5f5f5f5f 64 plan9 SYSRET -0f08|11223344556677885f5f5f5f5f5f 32 intel invd -0f08|11223344556677885f5f5f5f5f5f 32 plan9 INVD -0f08|11223344556677885f5f5f5f5f5f 64 gnu invd -0f08|11223344556677885f5f5f5f5f5f 64 intel invd -0f08|11223344556677885f5f5f5f5f5f 64 plan9 INVD -0f09|11223344556677885f5f5f5f5f5f 32 intel wbinvd -0f09|11223344556677885f5f5f5f5f5f 32 plan9 WBINVD -0f09|11223344556677885f5f5f5f5f5f 64 gnu wbinvd -0f09|11223344556677885f5f5f5f5f5f 64 intel wbinvd -0f09|11223344556677885f5f5f5f5f5f 64 plan9 WBINVD -0f0b|11223344556677885f5f5f5f5f5f 32 intel ud2 -0f0b|11223344556677885f5f5f5f5f5f 32 plan9 UD2 -0f0b|11223344556677885f5f5f5f5f5f 64 gnu ud2 -0f0b|11223344556677885f5f5f5f5f5f 64 intel ud2 -0f0b|11223344556677885f5f5f5f5f5f 64 plan9 UD2 -0f0d08|11223344556677885f5f5f5f5f 32 intel prefetchw zmmword ptr [eax] -0f0d08|11223344556677885f5f5f5f5f 32 plan9 PREFETCHW 0(AX) -0f0d08|11223344556677885f5f5f5f5f 64 gnu prefetchw (%rax) -0f0d08|11223344556677885f5f5f5f5f 64 intel prefetchw zmmword ptr [rax] -0f0d08|11223344556677885f5f5f5f5f 64 plan9 PREFETCHW 0(AX) -0f1011|223344556677885f5f5f5f5f5f 32 intel movups xmm2, xmmword ptr [ecx] -0f1011|223344556677885f5f5f5f5f5f 32 plan9 MOVUPS 0(CX), X2 -0f1011|223344556677885f5f5f5f5f5f 64 gnu movups (%rcx),%xmm2 -0f1011|223344556677885f5f5f5f5f5f 64 intel movups xmm2, xmmword ptr [rcx] -0f1011|223344556677885f5f5f5f5f5f 64 plan9 MOVUPS 0(CX), X2 -0f1122|3344556677885f5f5f5f5f5f5f 32 intel movups xmmword ptr [edx], xmm4 -0f1122|3344556677885f5f5f5f5f5f5f 32 plan9 MOVUPS X4, 0(DX) -0f1122|3344556677885f5f5f5f5f5f5f 64 gnu movups %xmm4,(%rdx) -0f1122|3344556677885f5f5f5f5f5f5f 64 intel movups xmmword ptr [rdx], xmm4 -0f1122|3344556677885f5f5f5f5f5f5f 64 plan9 MOVUPS X4, 0(DX) -0f1211|223344556677885f5f5f5f5f5f 32 intel movlps xmm2, qword ptr [ecx] -0f1211|223344556677885f5f5f5f5f5f 32 plan9 MOVLPS 0(CX), X2 -0f1211|223344556677885f5f5f5f5f5f 64 gnu movlps (%rcx),%xmm2 -0f1211|223344556677885f5f5f5f5f5f 64 intel movlps xmm2, qword ptr [rcx] -0f1211|223344556677885f5f5f5f5f5f 64 plan9 MOVLPS 0(CX), X2 -0f12c0|11223344556677885f5f5f5f5f 32 intel movhlps xmm0, xmm0 -0f12c0|11223344556677885f5f5f5f5f 32 plan9 MOVHLPS X0, X0 -0f12c0|11223344556677885f5f5f5f5f 64 gnu movhlps %xmm0,%xmm0 -0f12c0|11223344556677885f5f5f5f5f 64 intel movhlps xmm0, xmm0 -0f12c0|11223344556677885f5f5f5f5f 64 plan9 MOVHLPS X0, X0 -0f1311|223344556677885f5f5f5f5f5f 32 intel movlps qword ptr [ecx], xmm2 -0f1311|223344556677885f5f5f5f5f5f 32 plan9 MOVLPS X2, 0(CX) -0f1311|223344556677885f5f5f5f5f5f 64 gnu movlps %xmm2,(%rcx) -0f1311|223344556677885f5f5f5f5f5f 64 intel movlps qword ptr [rcx], xmm2 -0f1311|223344556677885f5f5f5f5f5f 64 plan9 MOVLPS X2, 0(CX) -0f1411|223344556677885f5f5f5f5f5f 32 intel unpcklps xmm2, xmmword ptr [ecx] -0f1411|223344556677885f5f5f5f5f5f 32 plan9 UNPCKLPS 0(CX), X2 -0f1411|223344556677885f5f5f5f5f5f 64 gnu unpcklps (%rcx),%xmm2 -0f1411|223344556677885f5f5f5f5f5f 64 intel unpcklps xmm2, xmmword ptr [rcx] -0f1411|223344556677885f5f5f5f5f5f 64 plan9 UNPCKLPS 0(CX), X2 -0f1511|223344556677885f5f5f5f5f5f 32 intel unpckhps xmm2, xmmword ptr [ecx] -0f1511|223344556677885f5f5f5f5f5f 32 plan9 UNPCKHPS 0(CX), X2 -0f1511|223344556677885f5f5f5f5f5f 64 gnu unpckhps (%rcx),%xmm2 -0f1511|223344556677885f5f5f5f5f5f 64 intel unpckhps xmm2, xmmword ptr [rcx] -0f1511|223344556677885f5f5f5f5f5f 64 plan9 UNPCKHPS 0(CX), X2 -0f1611|223344556677885f5f5f5f5f5f 32 intel movhps xmm2, qword ptr [ecx] -0f1611|223344556677885f5f5f5f5f5f 32 plan9 MOVHPS 0(CX), X2 -0f1611|223344556677885f5f5f5f5f5f 64 gnu movhps (%rcx),%xmm2 -0f1611|223344556677885f5f5f5f5f5f 64 intel movhps xmm2, qword ptr [rcx] -0f1611|223344556677885f5f5f5f5f5f 64 plan9 MOVHPS 0(CX), X2 -0f16c0|11223344556677885f5f5f5f5f 32 intel movlhps xmm0, xmm0 -0f16c0|11223344556677885f5f5f5f5f 32 plan9 MOVLHPS X0, X0 -0f16c0|11223344556677885f5f5f5f5f 64 gnu movlhps %xmm0,%xmm0 -0f16c0|11223344556677885f5f5f5f5f 64 intel movlhps xmm0, xmm0 -0f16c0|11223344556677885f5f5f5f5f 64 plan9 MOVLHPS X0, X0 -0f1711|223344556677885f5f5f5f5f5f 32 intel movhps qword ptr [ecx], xmm2 -0f1711|223344556677885f5f5f5f5f5f 32 plan9 MOVHPS X2, 0(CX) -0f1711|223344556677885f5f5f5f5f5f 64 gnu movhps %xmm2,(%rcx) -0f1711|223344556677885f5f5f5f5f5f 64 intel movhps qword ptr [rcx], xmm2 -0f1711|223344556677885f5f5f5f5f5f 64 plan9 MOVHPS X2, 0(CX) -0f1800|11223344556677885f5f5f5f5f 32 intel prefetchnta zmmword ptr [eax] -0f1800|11223344556677885f5f5f5f5f 32 plan9 PREFETCHNTA 0(AX) -0f1800|11223344556677885f5f5f5f5f 64 gnu prefetchnta (%rax) -0f1800|11223344556677885f5f5f5f5f 64 intel prefetchnta zmmword ptr [rax] -0f1800|11223344556677885f5f5f5f5f 64 plan9 PREFETCHNTA 0(AX) -0f1808|11223344556677885f5f5f5f5f 32 intel prefetcht0 zmmword ptr [eax] -0f1808|11223344556677885f5f5f5f5f 32 plan9 PREFETCHT0 0(AX) -0f1808|11223344556677885f5f5f5f5f 64 gnu prefetcht0 (%rax) -0f1808|11223344556677885f5f5f5f5f 64 intel prefetcht0 zmmword ptr [rax] -0f1808|11223344556677885f5f5f5f5f 64 plan9 PREFETCHT0 0(AX) -0f1811|223344556677885f5f5f5f5f5f 32 intel prefetcht1 zmmword ptr [ecx] -0f1811|223344556677885f5f5f5f5f5f 32 plan9 PREFETCHT1 0(CX) -0f1811|223344556677885f5f5f5f5f5f 64 gnu prefetcht1 (%rcx) -0f1811|223344556677885f5f5f5f5f5f 64 intel prefetcht1 zmmword ptr [rcx] -0f1811|223344556677885f5f5f5f5f5f 64 plan9 PREFETCHT1 0(CX) -0f1818|11223344556677885f5f5f5f5f 32 intel prefetcht2 zmmword ptr [eax] -0f1818|11223344556677885f5f5f5f5f 32 plan9 PREFETCHT2 0(AX) -0f1818|11223344556677885f5f5f5f5f 64 gnu prefetcht2 (%rax) -0f1818|11223344556677885f5f5f5f5f 64 intel prefetcht2 zmmword ptr [rax] -0f1818|11223344556677885f5f5f5f5f 64 plan9 PREFETCHT2 0(AX) -0f1f00|11223344556677885f5f5f5f5f 32 intel nop dword ptr [eax], eax -0f1f00|11223344556677885f5f5f5f5f 32 plan9 NOPL 0(AX) -0f1f00|11223344556677885f5f5f5f5f 64 gnu nopl (%rax) -0f1f00|11223344556677885f5f5f5f5f 64 intel nop dword ptr [rax], eax -0f1f00|11223344556677885f5f5f5f5f 64 plan9 NOPL 0(AX) -0f2011|223344556677885f5f5f5f5f5f 32 intel mov ecx, cr2 -0f2011|223344556677885f5f5f5f5f5f 32 plan9 MOVL CR2, CX -0f2011|223344556677885f5f5f5f5f5f 64 gnu mov %cr2,%rcx -0f2011|223344556677885f5f5f5f5f5f 64 intel mov rcx, cr2 -0f2011|223344556677885f5f5f5f5f5f 64 plan9 MOVL CR2, CX -0f2111|223344556677885f5f5f5f5f5f 32 intel mov ecx, dr2 -0f2111|223344556677885f5f5f5f5f5f 32 plan9 MOVL DR2, CX -0f2111|223344556677885f5f5f5f5f5f 64 gnu mov %db2,%rcx -0f2111|223344556677885f5f5f5f5f5f 64 intel mov rcx, dr2 -0f2111|223344556677885f5f5f5f5f5f 64 plan9 MOVL DR2, CX -0f2211|223344556677885f5f5f5f5f5f 32 intel mov cr2, ecx -0f2211|223344556677885f5f5f5f5f5f 32 plan9 MOVL CX, CR2 -0f2211|223344556677885f5f5f5f5f5f 64 gnu mov %rcx,%cr2 -0f2211|223344556677885f5f5f5f5f5f 64 intel mov cr2, rcx -0f2211|223344556677885f5f5f5f5f5f 64 plan9 MOVL CX, CR2 -0f2311|223344556677885f5f5f5f5f5f 32 intel mov dr2, ecx -0f2311|223344556677885f5f5f5f5f5f 32 plan9 MOVL CX, DR2 -0f2311|223344556677885f5f5f5f5f5f 64 gnu mov %rcx,%db2 -0f2311|223344556677885f5f5f5f5f5f 64 intel mov dr2, rcx -0f2311|223344556677885f5f5f5f5f5f 64 plan9 MOVL CX, DR2 -0f2411|223344556677885f5f5f5f5f5f 32 intel mov ecx, tr2 -0f2411|223344556677885f5f5f5f5f5f 32 plan9 MOVL TR2, CX -0f2411|223344556677885f5f5f5f5f5f 64 gnu mov %tr2,%rcx -0f2411|223344556677885f5f5f5f5f5f 64 intel mov rcx, tr2 -0f2411|223344556677885f5f5f5f5f5f 64 plan9 MOVL TR2, CX -0f2611|223344556677885f5f5f5f5f5f 32 intel mov tr2, ecx -0f2611|223344556677885f5f5f5f5f5f 32 plan9 MOVL CX, TR2 -0f2611|223344556677885f5f5f5f5f5f 64 gnu mov %rcx,%tr2 -0f2611|223344556677885f5f5f5f5f5f 64 intel mov tr2, rcx -0f2611|223344556677885f5f5f5f5f5f 64 plan9 MOVL CX, TR2 -0f2811|223344556677885f5f5f5f5f5f 32 intel movaps xmm2, xmmword ptr [ecx] -0f2811|223344556677885f5f5f5f5f5f 32 plan9 MOVAPS 0(CX), X2 -0f2811|223344556677885f5f5f5f5f5f 64 gnu movaps (%rcx),%xmm2 -0f2811|223344556677885f5f5f5f5f5f 64 intel movaps xmm2, xmmword ptr [rcx] -0f2811|223344556677885f5f5f5f5f5f 64 plan9 MOVAPS 0(CX), X2 -0f2911|223344556677885f5f5f5f5f5f 32 intel movaps xmmword ptr [ecx], xmm2 -0f2911|223344556677885f5f5f5f5f5f 32 plan9 MOVAPS X2, 0(CX) -0f2911|223344556677885f5f5f5f5f5f 64 gnu movaps %xmm2,(%rcx) -0f2911|223344556677885f5f5f5f5f5f 64 intel movaps xmmword ptr [rcx], xmm2 -0f2911|223344556677885f5f5f5f5f5f 64 plan9 MOVAPS X2, 0(CX) -0f2a11|223344556677885f5f5f5f5f5f 32 intel cvtpi2ps xmm2, qword ptr [ecx] -0f2a11|223344556677885f5f5f5f5f5f 32 plan9 CVTPI2PS 0(CX), X2 -0f2a11|223344556677885f5f5f5f5f5f 64 gnu cvtpi2ps (%rcx),%xmm2 -0f2a11|223344556677885f5f5f5f5f5f 64 intel cvtpi2ps xmm2, qword ptr [rcx] -0f2a11|223344556677885f5f5f5f5f5f 64 plan9 CVTPI2PS 0(CX), X2 -0f2b11|223344556677885f5f5f5f5f5f 32 intel movntps xmmword ptr [ecx], xmm2 -0f2b11|223344556677885f5f5f5f5f5f 32 plan9 MOVNTPS X2, 0(CX) -0f2b11|223344556677885f5f5f5f5f5f 64 gnu movntps %xmm2,(%rcx) -0f2b11|223344556677885f5f5f5f5f5f 64 intel movntps xmmword ptr [rcx], xmm2 -0f2b11|223344556677885f5f5f5f5f5f 64 plan9 MOVNTPS X2, 0(CX) -0f2c11|223344556677885f5f5f5f5f5f 32 intel cvttps2pi mmx2, qword ptr [ecx] -0f2c11|223344556677885f5f5f5f5f5f 32 plan9 CVTTPS2PI 0(CX), M2 -0f2c11|223344556677885f5f5f5f5f5f 64 gnu cvttps2pi (%rcx),%mm2 -0f2c11|223344556677885f5f5f5f5f5f 64 intel cvttps2pi mmx2, qword ptr [rcx] -0f2c11|223344556677885f5f5f5f5f5f 64 plan9 CVTTPS2PI 0(CX), M2 -0f2d11|223344556677885f5f5f5f5f5f 32 intel cvtps2pi mmx2, qword ptr [ecx] -0f2d11|223344556677885f5f5f5f5f5f 32 plan9 CVTPS2PI 0(CX), M2 -0f2d11|223344556677885f5f5f5f5f5f 64 gnu cvtps2pi (%rcx),%mm2 -0f2d11|223344556677885f5f5f5f5f5f 64 intel cvtps2pi mmx2, qword ptr [rcx] -0f2d11|223344556677885f5f5f5f5f5f 64 plan9 CVTPS2PI 0(CX), M2 -0f2e11|223344556677885f5f5f5f5f5f 32 intel ucomiss xmm2, dword ptr [ecx] -0f2e11|223344556677885f5f5f5f5f5f 32 plan9 UCOMISS 0(CX), X2 -0f2e11|223344556677885f5f5f5f5f5f 64 gnu ucomiss (%rcx),%xmm2 -0f2e11|223344556677885f5f5f5f5f5f 64 intel ucomiss xmm2, dword ptr [rcx] -0f2e11|223344556677885f5f5f5f5f5f 64 plan9 UCOMISS 0(CX), X2 -0f2f11|223344556677885f5f5f5f5f5f 32 intel comiss xmm2, dword ptr [ecx] -0f2f11|223344556677885f5f5f5f5f5f 32 plan9 COMISS 0(CX), X2 -0f2f11|223344556677885f5f5f5f5f5f 64 gnu comiss (%rcx),%xmm2 -0f2f11|223344556677885f5f5f5f5f5f 64 intel comiss xmm2, dword ptr [rcx] -0f2f11|223344556677885f5f5f5f5f5f 64 plan9 COMISS 0(CX), X2 -0f30|11223344556677885f5f5f5f5f5f 32 intel wrmsr -0f30|11223344556677885f5f5f5f5f5f 32 plan9 WRMSR -0f30|11223344556677885f5f5f5f5f5f 64 gnu wrmsr -0f30|11223344556677885f5f5f5f5f5f 64 intel wrmsr -0f30|11223344556677885f5f5f5f5f5f 64 plan9 WRMSR -0f31|11223344556677885f5f5f5f5f5f 32 intel rdtsc -0f31|11223344556677885f5f5f5f5f5f 32 plan9 RDTSC -0f31|11223344556677885f5f5f5f5f5f 64 gnu rdtsc -0f31|11223344556677885f5f5f5f5f5f 64 intel rdtsc -0f31|11223344556677885f5f5f5f5f5f 64 plan9 RDTSC -0f32|11223344556677885f5f5f5f5f5f 32 intel rdmsr -0f32|11223344556677885f5f5f5f5f5f 32 plan9 RDMSR -0f32|11223344556677885f5f5f5f5f5f 64 gnu rdmsr -0f32|11223344556677885f5f5f5f5f5f 64 intel rdmsr -0f32|11223344556677885f5f5f5f5f5f 64 plan9 RDMSR -0f33|11223344556677885f5f5f5f5f5f 32 intel rdpmc -0f33|11223344556677885f5f5f5f5f5f 32 plan9 RDPMC -0f33|11223344556677885f5f5f5f5f5f 64 gnu rdpmc -0f33|11223344556677885f5f5f5f5f5f 64 intel rdpmc -0f33|11223344556677885f5f5f5f5f5f 64 plan9 RDPMC -0f34|11223344556677885f5f5f5f5f5f 32 intel sysenter -0f34|11223344556677885f5f5f5f5f5f 32 plan9 SYSENTER -0f34|11223344556677885f5f5f5f5f5f 64 gnu sysenter -0f34|11223344556677885f5f5f5f5f5f 64 intel sysenter -0f34|11223344556677885f5f5f5f5f5f 64 plan9 SYSENTER -0f35|11223344556677885f5f5f5f5f5f 32 intel sysexit -0f35|11223344556677885f5f5f5f5f5f 32 plan9 SYSEXIT -0f35|11223344556677885f5f5f5f5f5f 64 gnu sysexit -0f35|11223344556677885f5f5f5f5f5f 64 intel sysexit -0f35|11223344556677885f5f5f5f5f5f 64 plan9 SYSEXIT -0f380011|223344556677885f5f5f5f5f 32 intel pshufb mmx2, qword ptr [ecx] -0f380011|223344556677885f5f5f5f5f 32 plan9 PSHUFB 0(CX), M2 -0f380011|223344556677885f5f5f5f5f 64 gnu pshufb (%rcx),%mm2 -0f380011|223344556677885f5f5f5f5f 64 intel pshufb mmx2, qword ptr [rcx] -0f380011|223344556677885f5f5f5f5f 64 plan9 PSHUFB 0(CX), M2 -0f380111|223344556677885f5f5f5f5f 32 intel phaddw mmx2, qword ptr [ecx] -0f380111|223344556677885f5f5f5f5f 32 plan9 PHADDW 0(CX), M2 -0f380111|223344556677885f5f5f5f5f 64 gnu phaddw (%rcx),%mm2 -0f380111|223344556677885f5f5f5f5f 64 intel phaddw mmx2, qword ptr [rcx] -0f380111|223344556677885f5f5f5f5f 64 plan9 PHADDW 0(CX), M2 -0f380211|223344556677885f5f5f5f5f 32 intel phaddd mmx2, qword ptr [ecx] -0f380211|223344556677885f5f5f5f5f 32 plan9 PHADDD 0(CX), M2 -0f380211|223344556677885f5f5f5f5f 64 gnu phaddd (%rcx),%mm2 -0f380211|223344556677885f5f5f5f5f 64 intel phaddd mmx2, qword ptr [rcx] -0f380211|223344556677885f5f5f5f5f 64 plan9 PHADDD 0(CX), M2 -0f380311|223344556677885f5f5f5f5f 32 intel phaddsw mmx2, qword ptr [ecx] -0f380311|223344556677885f5f5f5f5f 32 plan9 PHADDSW 0(CX), M2 -0f380311|223344556677885f5f5f5f5f 64 gnu phaddsw (%rcx),%mm2 -0f380311|223344556677885f5f5f5f5f 64 intel phaddsw mmx2, qword ptr [rcx] -0f380311|223344556677885f5f5f5f5f 64 plan9 PHADDSW 0(CX), M2 -0f380411|223344556677885f5f5f5f5f 32 intel pmaddubsw mmx2, qword ptr [ecx] -0f380411|223344556677885f5f5f5f5f 32 plan9 PMADDUBSW 0(CX), M2 -0f380411|223344556677885f5f5f5f5f 64 gnu pmaddubsw (%rcx),%mm2 -0f380411|223344556677885f5f5f5f5f 64 intel pmaddubsw mmx2, qword ptr [rcx] -0f380411|223344556677885f5f5f5f5f 64 plan9 PMADDUBSW 0(CX), M2 -0f380511|223344556677885f5f5f5f5f 32 intel phsubw mmx2, qword ptr [ecx] -0f380511|223344556677885f5f5f5f5f 32 plan9 PHSUBW 0(CX), M2 -0f380511|223344556677885f5f5f5f5f 64 gnu phsubw (%rcx),%mm2 -0f380511|223344556677885f5f5f5f5f 64 intel phsubw mmx2, qword ptr [rcx] -0f380511|223344556677885f5f5f5f5f 64 plan9 PHSUBW 0(CX), M2 -0f380611|223344556677885f5f5f5f5f 32 intel phsubd mmx2, qword ptr [ecx] -0f380611|223344556677885f5f5f5f5f 32 plan9 PHSUBD 0(CX), M2 -0f380611|223344556677885f5f5f5f5f 64 gnu phsubd (%rcx),%mm2 -0f380611|223344556677885f5f5f5f5f 64 intel phsubd mmx2, qword ptr [rcx] -0f380611|223344556677885f5f5f5f5f 64 plan9 PHSUBD 0(CX), M2 -0f380711|223344556677885f5f5f5f5f 32 intel phsubsw mmx2, qword ptr [ecx] -0f380711|223344556677885f5f5f5f5f 32 plan9 PHSUBSW 0(CX), M2 -0f380711|223344556677885f5f5f5f5f 64 gnu phsubsw (%rcx),%mm2 -0f380711|223344556677885f5f5f5f5f 64 intel phsubsw mmx2, qword ptr [rcx] -0f380711|223344556677885f5f5f5f5f 64 plan9 PHSUBSW 0(CX), M2 -0f380811|223344556677885f5f5f5f5f 32 intel psignb mmx2, qword ptr [ecx] -0f380811|223344556677885f5f5f5f5f 32 plan9 PSIGNB 0(CX), M2 -0f380811|223344556677885f5f5f5f5f 64 gnu psignb (%rcx),%mm2 -0f380811|223344556677885f5f5f5f5f 64 intel psignb mmx2, qword ptr [rcx] -0f380811|223344556677885f5f5f5f5f 64 plan9 PSIGNB 0(CX), M2 -0f380911|223344556677885f5f5f5f5f 32 intel psignw mmx2, qword ptr [ecx] -0f380911|223344556677885f5f5f5f5f 32 plan9 PSIGNW 0(CX), M2 -0f380911|223344556677885f5f5f5f5f 64 gnu psignw (%rcx),%mm2 -0f380911|223344556677885f5f5f5f5f 64 intel psignw mmx2, qword ptr [rcx] -0f380911|223344556677885f5f5f5f5f 64 plan9 PSIGNW 0(CX), M2 -0f380a11|223344556677885f5f5f5f5f 32 intel psignd mmx2, qword ptr [ecx] -0f380a11|223344556677885f5f5f5f5f 32 plan9 PSIGND 0(CX), M2 -0f380a11|223344556677885f5f5f5f5f 64 gnu psignd (%rcx),%mm2 -0f380a11|223344556677885f5f5f5f5f 64 intel psignd mmx2, qword ptr [rcx] -0f380a11|223344556677885f5f5f5f5f 64 plan9 PSIGND 0(CX), M2 -0f380b11|223344556677885f5f5f5f5f 32 intel pmulhrsw mmx2, qword ptr [ecx] -0f380b11|223344556677885f5f5f5f5f 32 plan9 PMULHRSW 0(CX), M2 -0f380b11|223344556677885f5f5f5f5f 64 gnu pmulhrsw (%rcx),%mm2 -0f380b11|223344556677885f5f5f5f5f 64 intel pmulhrsw mmx2, qword ptr [rcx] -0f380b11|223344556677885f5f5f5f5f 64 plan9 PMULHRSW 0(CX), M2 -0f3810|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3810|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3810|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3810|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3810|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3811|223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0f3811|223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3811|223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -0f3811|223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -0f3811|223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3814|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3814|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3814|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3814|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3814|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3815|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3815|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3815|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3815|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3815|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3817|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3817|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3817|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3817|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3817|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f381c11|223344556677885f5f5f5f5f 32 intel pabsb mmx2, qword ptr [ecx] -0f381c11|223344556677885f5f5f5f5f 32 plan9 PABSB 0(CX), M2 -0f381c11|223344556677885f5f5f5f5f 64 gnu pabsb (%rcx),%mm2 -0f381c11|223344556677885f5f5f5f5f 64 intel pabsb mmx2, qword ptr [rcx] -0f381c11|223344556677885f5f5f5f5f 64 plan9 PABSB 0(CX), M2 -0f381d11|223344556677885f5f5f5f5f 32 intel pabsw mmx2, qword ptr [ecx] -0f381d11|223344556677885f5f5f5f5f 32 plan9 PABSW 0(CX), M2 -0f381d11|223344556677885f5f5f5f5f 64 gnu pabsw (%rcx),%mm2 -0f381d11|223344556677885f5f5f5f5f 64 intel pabsw mmx2, qword ptr [rcx] -0f381d11|223344556677885f5f5f5f5f 64 plan9 PABSW 0(CX), M2 -0f381e11|223344556677885f5f5f5f5f 32 intel pabsd mmx2, qword ptr [ecx] -0f381e11|223344556677885f5f5f5f5f 32 plan9 PABSD 0(CX), M2 -0f381e11|223344556677885f5f5f5f5f 64 gnu pabsd (%rcx),%mm2 -0f381e11|223344556677885f5f5f5f5f 64 intel pabsd mmx2, qword ptr [rcx] -0f381e11|223344556677885f5f5f5f5f 64 plan9 PABSD 0(CX), M2 -0f3820|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3820|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3820|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3820|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3820|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3821|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3821|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3821|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3821|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3821|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3822|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3822|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3822|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3822|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3822|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3823|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3823|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3823|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3823|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3823|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3824|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3824|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3824|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3824|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3824|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3825|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3825|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3825|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3825|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3825|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3828|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3828|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3828|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3828|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3828|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3829|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3829|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3829|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3829|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3829|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f382a|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f382a|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f382a|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f382a|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f382a|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f382b|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f382b|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f382b|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f382b|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f382b|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3830|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3830|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3830|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3830|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3830|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3831|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3831|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3831|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3831|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3831|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3832|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3832|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3832|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3832|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3832|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3833|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3833|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3833|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3833|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3833|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3834|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3834|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3834|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3834|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3834|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3835|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3835|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3835|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3835|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3835|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3837|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3837|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3837|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3837|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3837|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3838|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3838|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3838|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3838|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3838|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3839|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3839|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3839|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3839|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3839|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f383a|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f383a|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f383a|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f383a|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f383a|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f383b|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f383b|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f383b|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f383b|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f383b|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f383c|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f383c|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f383c|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f383c|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f383c|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f383d|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f383d|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f383d|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f383d|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f383d|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f383e|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f383e|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f383e|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f383e|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f383e|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f383f|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f383f|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f383f|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f383f|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f383f|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3840|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3840|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3840|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3840|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3840|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3841|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3841|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3841|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3841|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3841|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3882|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3882|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3882|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3882|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3882|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f38db|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f38db|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f38db|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f38db|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f38db|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f38dc|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f38dc|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f38dc|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f38dc|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f38dc|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f38dd|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f38dd|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f38dd|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f38dd|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f38dd|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f38de|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f38de|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f38de|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f38de|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f38de|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f38df|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f38df|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f38df|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f38df|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f38df|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f38f011|223344556677885f5f5f5f5f 32 intel movbe edx, dword ptr [ecx] -0f38f011|223344556677885f5f5f5f5f 32 plan9 MOVBE 0(CX), DX -0f38f011|223344556677885f5f5f5f5f 64 gnu movbe (%rcx),%edx -0f38f011|223344556677885f5f5f5f5f 64 intel movbe edx, dword ptr [rcx] -0f38f011|223344556677885f5f5f5f5f 64 plan9 MOVBE 0(CX), DX -0f38f111|223344556677885f5f5f5f5f 32 intel movbe dword ptr [ecx], edx -0f38f111|223344556677885f5f5f5f5f 32 plan9 MOVBE DX, 0(CX) -0f38f111|223344556677885f5f5f5f5f 64 gnu movbe %edx,(%rcx) -0f38f111|223344556677885f5f5f5f5f 64 intel movbe dword ptr [rcx], edx -0f38f111|223344556677885f5f5f5f5f 64 plan9 MOVBE DX, 0(CX) -0f3a08|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a08|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a08|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a08|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a08|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a09|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a09|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a09|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a09|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a09|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a0a|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a0a|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a0a|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a0a|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a0a|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a0b|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a0b|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a0b|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a0b|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a0b|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a0c|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a0c|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a0c|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a0c|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a0c|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a0d|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a0d|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a0d|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a0d|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a0d|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a0e|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a0e|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a0e|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a0e|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a0e|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a0f1122|3344556677885f5f5f5f5f 32 intel palignr mmx2, qword ptr [ecx], 0x22 -0f3a0f1122|3344556677885f5f5f5f5f 32 plan9 PALIGNR $0x22, 0(CX), M2 -0f3a0f1122|3344556677885f5f5f5f5f 64 gnu palignr $0x22,(%rcx),%mm2 -0f3a0f1122|3344556677885f5f5f5f5f 64 intel palignr mmx2, qword ptr [rcx], 0x22 -0f3a0f1122|3344556677885f5f5f5f5f 64 plan9 PALIGNR $0x22, 0(CX), M2 -0f3a11|223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0f3a11|223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a11|223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a11|223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -0f3a11|223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a14|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a14|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a14|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a14|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a14|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a15|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a15|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a15|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a15|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a15|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a16|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a16|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a16|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a16|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a16|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a17|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a17|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a17|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a17|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a17|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a20|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a20|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a20|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a20|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a20|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a21|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a21|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a21|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a21|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a21|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a22|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a22|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a22|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a22|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a22|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a40|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a40|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a40|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a40|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a40|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a41|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a41|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a41|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a41|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a41|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a42|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a42|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a42|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a42|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a42|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a44|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a44|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a44|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a44|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a44|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a60|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a60|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a60|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a60|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a60|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a61|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a61|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a61|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a61|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a61|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a62|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a62|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a62|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a62|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a62|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3a63|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3a63|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3a63|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3a63|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3a63|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f3adf|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f3adf|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f3adf|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f3adf|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f3adf|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f4011|223344556677885f5f5f5f5f5f 32 intel cmovo edx, dword ptr [ecx] -0f4011|223344556677885f5f5f5f5f5f 32 plan9 CMOVO 0(CX), DX -0f4011|223344556677885f5f5f5f5f5f 64 gnu cmovo (%rcx),%edx -0f4011|223344556677885f5f5f5f5f5f 64 intel cmovo edx, dword ptr [rcx] -0f4011|223344556677885f5f5f5f5f5f 64 plan9 CMOVO 0(CX), DX -0f4111|223344556677885f5f5f5f5f5f 32 intel cmovno edx, dword ptr [ecx] -0f4111|223344556677885f5f5f5f5f5f 32 plan9 CMOVNO 0(CX), DX -0f4111|223344556677885f5f5f5f5f5f 64 gnu cmovno (%rcx),%edx -0f4111|223344556677885f5f5f5f5f5f 64 intel cmovno edx, dword ptr [rcx] -0f4111|223344556677885f5f5f5f5f5f 64 plan9 CMOVNO 0(CX), DX -0f4211|223344556677885f5f5f5f5f5f 32 intel cmovb edx, dword ptr [ecx] -0f4211|223344556677885f5f5f5f5f5f 32 plan9 CMOVB 0(CX), DX -0f4211|223344556677885f5f5f5f5f5f 64 gnu cmovb (%rcx),%edx -0f4211|223344556677885f5f5f5f5f5f 64 intel cmovb edx, dword ptr [rcx] -0f4211|223344556677885f5f5f5f5f5f 64 plan9 CMOVB 0(CX), DX -0f4311|223344556677885f5f5f5f5f5f 32 intel cmovnb edx, dword ptr [ecx] -0f4311|223344556677885f5f5f5f5f5f 32 plan9 CMOVAE 0(CX), DX -0f4311|223344556677885f5f5f5f5f5f 64 gnu cmovae (%rcx),%edx -0f4311|223344556677885f5f5f5f5f5f 64 intel cmovnb edx, dword ptr [rcx] -0f4311|223344556677885f5f5f5f5f5f 64 plan9 CMOVAE 0(CX), DX -0f4411|223344556677885f5f5f5f5f5f 32 intel cmovz edx, dword ptr [ecx] -0f4411|223344556677885f5f5f5f5f5f 32 plan9 CMOVE 0(CX), DX -0f4411|223344556677885f5f5f5f5f5f 64 gnu cmove (%rcx),%edx -0f4411|223344556677885f5f5f5f5f5f 64 intel cmovz edx, dword ptr [rcx] -0f4411|223344556677885f5f5f5f5f5f 64 plan9 CMOVE 0(CX), DX -0f4511|223344556677885f5f5f5f5f5f 32 intel cmovnz edx, dword ptr [ecx] -0f4511|223344556677885f5f5f5f5f5f 32 plan9 CMOVNE 0(CX), DX -0f4511|223344556677885f5f5f5f5f5f 64 gnu cmovne (%rcx),%edx -0f4511|223344556677885f5f5f5f5f5f 64 intel cmovnz edx, dword ptr [rcx] -0f4511|223344556677885f5f5f5f5f5f 64 plan9 CMOVNE 0(CX), DX -0f4611|223344556677885f5f5f5f5f5f 32 intel cmovbe edx, dword ptr [ecx] -0f4611|223344556677885f5f5f5f5f5f 32 plan9 CMOVBE 0(CX), DX -0f4611|223344556677885f5f5f5f5f5f 64 gnu cmovbe (%rcx),%edx -0f4611|223344556677885f5f5f5f5f5f 64 intel cmovbe edx, dword ptr [rcx] -0f4611|223344556677885f5f5f5f5f5f 64 plan9 CMOVBE 0(CX), DX -0f4711|223344556677885f5f5f5f5f5f 32 intel cmovnbe edx, dword ptr [ecx] -0f4711|223344556677885f5f5f5f5f5f 32 plan9 CMOVA 0(CX), DX -0f4711|223344556677885f5f5f5f5f5f 64 gnu cmova (%rcx),%edx -0f4711|223344556677885f5f5f5f5f5f 64 intel cmovnbe edx, dword ptr [rcx] -0f4711|223344556677885f5f5f5f5f5f 64 plan9 CMOVA 0(CX), DX -0f4811|223344556677885f5f5f5f5f5f 32 intel cmovs edx, dword ptr [ecx] -0f4811|223344556677885f5f5f5f5f5f 32 plan9 CMOVS 0(CX), DX -0f4811|223344556677885f5f5f5f5f5f 64 gnu cmovs (%rcx),%edx -0f4811|223344556677885f5f5f5f5f5f 64 intel cmovs edx, dword ptr [rcx] -0f4811|223344556677885f5f5f5f5f5f 64 plan9 CMOVS 0(CX), DX -0f4911|223344556677885f5f5f5f5f5f 32 intel cmovns edx, dword ptr [ecx] -0f4911|223344556677885f5f5f5f5f5f 32 plan9 CMOVNS 0(CX), DX -0f4911|223344556677885f5f5f5f5f5f 64 gnu cmovns (%rcx),%edx -0f4911|223344556677885f5f5f5f5f5f 64 intel cmovns edx, dword ptr [rcx] -0f4911|223344556677885f5f5f5f5f5f 64 plan9 CMOVNS 0(CX), DX -0f4a11|223344556677885f5f5f5f5f5f 32 intel cmovp edx, dword ptr [ecx] -0f4a11|223344556677885f5f5f5f5f5f 32 plan9 CMOVP 0(CX), DX -0f4a11|223344556677885f5f5f5f5f5f 64 gnu cmovp (%rcx),%edx -0f4a11|223344556677885f5f5f5f5f5f 64 intel cmovp edx, dword ptr [rcx] -0f4a11|223344556677885f5f5f5f5f5f 64 plan9 CMOVP 0(CX), DX -0f4b11|223344556677885f5f5f5f5f5f 32 intel cmovnp edx, dword ptr [ecx] -0f4b11|223344556677885f5f5f5f5f5f 32 plan9 CMOVNP 0(CX), DX -0f4b11|223344556677885f5f5f5f5f5f 64 gnu cmovnp (%rcx),%edx -0f4b11|223344556677885f5f5f5f5f5f 64 intel cmovnp edx, dword ptr [rcx] -0f4b11|223344556677885f5f5f5f5f5f 64 plan9 CMOVNP 0(CX), DX -0f4c11|223344556677885f5f5f5f5f5f 32 intel cmovl edx, dword ptr [ecx] -0f4c11|223344556677885f5f5f5f5f5f 32 plan9 CMOVL 0(CX), DX -0f4c11|223344556677885f5f5f5f5f5f 64 gnu cmovl (%rcx),%edx -0f4c11|223344556677885f5f5f5f5f5f 64 intel cmovl edx, dword ptr [rcx] -0f4c11|223344556677885f5f5f5f5f5f 64 plan9 CMOVL 0(CX), DX -0f4d11|223344556677885f5f5f5f5f5f 32 intel cmovnl edx, dword ptr [ecx] -0f4d11|223344556677885f5f5f5f5f5f 32 plan9 CMOVGE 0(CX), DX -0f4d11|223344556677885f5f5f5f5f5f 64 gnu cmovge (%rcx),%edx -0f4d11|223344556677885f5f5f5f5f5f 64 intel cmovnl edx, dword ptr [rcx] -0f4d11|223344556677885f5f5f5f5f5f 64 plan9 CMOVGE 0(CX), DX -0f4e11|223344556677885f5f5f5f5f5f 32 intel cmovle edx, dword ptr [ecx] -0f4e11|223344556677885f5f5f5f5f5f 32 plan9 CMOVLE 0(CX), DX -0f4e11|223344556677885f5f5f5f5f5f 64 gnu cmovle (%rcx),%edx -0f4e11|223344556677885f5f5f5f5f5f 64 intel cmovle edx, dword ptr [rcx] -0f4e11|223344556677885f5f5f5f5f5f 64 plan9 CMOVLE 0(CX), DX -0f4f11|223344556677885f5f5f5f5f5f 32 intel cmovnle edx, dword ptr [ecx] -0f4f11|223344556677885f5f5f5f5f5f 32 plan9 CMOVG 0(CX), DX -0f4f11|223344556677885f5f5f5f5f5f 64 gnu cmovg (%rcx),%edx -0f4f11|223344556677885f5f5f5f5f5f 64 intel cmovnle edx, dword ptr [rcx] -0f4f11|223344556677885f5f5f5f5f5f 64 plan9 CMOVG 0(CX), DX -0f5011|223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0f5011|223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0f5011|223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -0f5011|223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -0f5011|223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0f50c0|11223344556677885f5f5f5f5f 32 intel movmskps eax, xmm0 -0f50c0|11223344556677885f5f5f5f5f 32 plan9 MOVMSKPS X0, AX -0f50c0|11223344556677885f5f5f5f5f 64 gnu movmskps %xmm0,%eax -0f50c0|11223344556677885f5f5f5f5f 64 intel movmskps eax, xmm0 -0f50c0|11223344556677885f5f5f5f5f 64 plan9 MOVMSKPS X0, AX -0f5111|223344556677885f5f5f5f5f5f 32 intel sqrtps xmm2, xmmword ptr [ecx] -0f5111|223344556677885f5f5f5f5f5f 32 plan9 SQRTPS 0(CX), X2 -0f5111|223344556677885f5f5f5f5f5f 64 gnu sqrtps (%rcx),%xmm2 -0f5111|223344556677885f5f5f5f5f5f 64 intel sqrtps xmm2, xmmword ptr [rcx] -0f5111|223344556677885f5f5f5f5f5f 64 plan9 SQRTPS 0(CX), X2 -0f5211|223344556677885f5f5f5f5f5f 32 intel rsqrtps xmm2, xmmword ptr [ecx] -0f5211|223344556677885f5f5f5f5f5f 32 plan9 RSQRTPS 0(CX), X2 -0f5211|223344556677885f5f5f5f5f5f 64 gnu rsqrtps (%rcx),%xmm2 -0f5211|223344556677885f5f5f5f5f5f 64 intel rsqrtps xmm2, xmmword ptr [rcx] -0f5211|223344556677885f5f5f5f5f5f 64 plan9 RSQRTPS 0(CX), X2 -0f5311|223344556677885f5f5f5f5f5f 32 intel rcpps xmm2, xmmword ptr [ecx] -0f5311|223344556677885f5f5f5f5f5f 32 plan9 RCPPS 0(CX), X2 -0f5311|223344556677885f5f5f5f5f5f 64 gnu rcpps (%rcx),%xmm2 -0f5311|223344556677885f5f5f5f5f5f 64 intel rcpps xmm2, xmmword ptr [rcx] -0f5311|223344556677885f5f5f5f5f5f 64 plan9 RCPPS 0(CX), X2 -0f5411|223344556677885f5f5f5f5f5f 32 intel andps xmm2, xmmword ptr [ecx] -0f5411|223344556677885f5f5f5f5f5f 32 plan9 ANDPS 0(CX), X2 -0f5411|223344556677885f5f5f5f5f5f 64 gnu andps (%rcx),%xmm2 -0f5411|223344556677885f5f5f5f5f5f 64 intel andps xmm2, xmmword ptr [rcx] -0f5411|223344556677885f5f5f5f5f5f 64 plan9 ANDPS 0(CX), X2 -0f5511|223344556677885f5f5f5f5f5f 32 intel andnps xmm2, xmmword ptr [ecx] -0f5511|223344556677885f5f5f5f5f5f 32 plan9 ANDNPS 0(CX), X2 -0f5511|223344556677885f5f5f5f5f5f 64 gnu andnps (%rcx),%xmm2 -0f5511|223344556677885f5f5f5f5f5f 64 intel andnps xmm2, xmmword ptr [rcx] -0f5511|223344556677885f5f5f5f5f5f 64 plan9 ANDNPS 0(CX), X2 -0f5611|223344556677885f5f5f5f5f5f 32 intel orps xmm2, xmmword ptr [ecx] -0f5611|223344556677885f5f5f5f5f5f 32 plan9 ORPS 0(CX), X2 -0f5611|223344556677885f5f5f5f5f5f 64 gnu orps (%rcx),%xmm2 -0f5611|223344556677885f5f5f5f5f5f 64 intel orps xmm2, xmmword ptr [rcx] -0f5611|223344556677885f5f5f5f5f5f 64 plan9 ORPS 0(CX), X2 -0f5711|223344556677885f5f5f5f5f5f 32 intel xorps xmm2, xmmword ptr [ecx] -0f5711|223344556677885f5f5f5f5f5f 32 plan9 XORPS 0(CX), X2 -0f5711|223344556677885f5f5f5f5f5f 64 gnu xorps (%rcx),%xmm2 -0f5711|223344556677885f5f5f5f5f5f 64 intel xorps xmm2, xmmword ptr [rcx] -0f5711|223344556677885f5f5f5f5f5f 64 plan9 XORPS 0(CX), X2 -0f5811|223344556677885f5f5f5f5f5f 32 intel addps xmm2, xmmword ptr [ecx] -0f5811|223344556677885f5f5f5f5f5f 32 plan9 ADDPS 0(CX), X2 -0f5811|223344556677885f5f5f5f5f5f 64 gnu addps (%rcx),%xmm2 -0f5811|223344556677885f5f5f5f5f5f 64 intel addps xmm2, xmmword ptr [rcx] -0f5811|223344556677885f5f5f5f5f5f 64 plan9 ADDPS 0(CX), X2 -0f5911|223344556677885f5f5f5f5f5f 32 intel mulps xmm2, xmmword ptr [ecx] -0f5911|223344556677885f5f5f5f5f5f 32 plan9 MULPS 0(CX), X2 -0f5911|223344556677885f5f5f5f5f5f 64 gnu mulps (%rcx),%xmm2 -0f5911|223344556677885f5f5f5f5f5f 64 intel mulps xmm2, xmmword ptr [rcx] -0f5911|223344556677885f5f5f5f5f5f 64 plan9 MULPS 0(CX), X2 -0f5a11|223344556677885f5f5f5f5f5f 32 intel cvtps2pd xmm2, qword ptr [ecx] -0f5a11|223344556677885f5f5f5f5f5f 32 plan9 CVTPS2PD 0(CX), X2 -0f5a11|223344556677885f5f5f5f5f5f 64 gnu cvtps2pd (%rcx),%xmm2 -0f5a11|223344556677885f5f5f5f5f5f 64 intel cvtps2pd xmm2, qword ptr [rcx] -0f5a11|223344556677885f5f5f5f5f5f 64 plan9 CVTPS2PD 0(CX), X2 -0f5b11|223344556677885f5f5f5f5f5f 32 intel cvtdq2ps xmm2, xmmword ptr [ecx] -0f5b11|223344556677885f5f5f5f5f5f 32 plan9 CVTDQ2PS 0(CX), X2 -0f5b11|223344556677885f5f5f5f5f5f 64 gnu cvtdq2ps (%rcx),%xmm2 -0f5b11|223344556677885f5f5f5f5f5f 64 intel cvtdq2ps xmm2, xmmword ptr [rcx] -0f5b11|223344556677885f5f5f5f5f5f 64 plan9 CVTDQ2PS 0(CX), X2 -0f5c11|223344556677885f5f5f5f5f5f 32 intel subps xmm2, xmmword ptr [ecx] -0f5c11|223344556677885f5f5f5f5f5f 32 plan9 SUBPS 0(CX), X2 -0f5c11|223344556677885f5f5f5f5f5f 64 gnu subps (%rcx),%xmm2 -0f5c11|223344556677885f5f5f5f5f5f 64 intel subps xmm2, xmmword ptr [rcx] -0f5c11|223344556677885f5f5f5f5f5f 64 plan9 SUBPS 0(CX), X2 -0f5d11|223344556677885f5f5f5f5f5f 32 intel minps xmm2, xmmword ptr [ecx] -0f5d11|223344556677885f5f5f5f5f5f 32 plan9 MINPS 0(CX), X2 -0f5d11|223344556677885f5f5f5f5f5f 64 gnu minps (%rcx),%xmm2 -0f5d11|223344556677885f5f5f5f5f5f 64 intel minps xmm2, xmmword ptr [rcx] -0f5d11|223344556677885f5f5f5f5f5f 64 plan9 MINPS 0(CX), X2 -0f5e11|223344556677885f5f5f5f5f5f 32 intel divps xmm2, xmmword ptr [ecx] -0f5e11|223344556677885f5f5f5f5f5f 32 plan9 DIVPS 0(CX), X2 -0f5e11|223344556677885f5f5f5f5f5f 64 gnu divps (%rcx),%xmm2 -0f5e11|223344556677885f5f5f5f5f5f 64 intel divps xmm2, xmmword ptr [rcx] -0f5e11|223344556677885f5f5f5f5f5f 64 plan9 DIVPS 0(CX), X2 -0f5f11|223344556677885f5f5f5f5f5f 32 intel maxps xmm2, xmmword ptr [ecx] -0f5f11|223344556677885f5f5f5f5f5f 32 plan9 MAXPS 0(CX), X2 -0f5f11|223344556677885f5f5f5f5f5f 64 gnu maxps (%rcx),%xmm2 -0f5f11|223344556677885f5f5f5f5f5f 64 intel maxps xmm2, xmmword ptr [rcx] -0f5f11|223344556677885f5f5f5f5f5f 64 plan9 MAXPS 0(CX), X2 -0f6011|223344556677885f5f5f5f5f5f 32 intel punpcklbw mmx2, dword ptr [ecx] -0f6011|223344556677885f5f5f5f5f5f 32 plan9 PUNPCKLBW 0(CX), M2 -0f6011|223344556677885f5f5f5f5f5f 64 gnu punpcklbw (%rcx),%mm2 -0f6011|223344556677885f5f5f5f5f5f 64 intel punpcklbw mmx2, dword ptr [rcx] -0f6011|223344556677885f5f5f5f5f5f 64 plan9 PUNPCKLBW 0(CX), M2 -0f6111|223344556677885f5f5f5f5f5f 32 intel punpcklwd mmx2, dword ptr [ecx] -0f6111|223344556677885f5f5f5f5f5f 32 plan9 PUNPCKLWD 0(CX), M2 -0f6111|223344556677885f5f5f5f5f5f 64 gnu punpcklwd (%rcx),%mm2 -0f6111|223344556677885f5f5f5f5f5f 64 intel punpcklwd mmx2, dword ptr [rcx] -0f6111|223344556677885f5f5f5f5f5f 64 plan9 PUNPCKLWD 0(CX), M2 -0f6211|223344556677885f5f5f5f5f5f 32 intel punpckldq mmx2, dword ptr [ecx] -0f6211|223344556677885f5f5f5f5f5f 32 plan9 PUNPCKLDQ 0(CX), M2 -0f6211|223344556677885f5f5f5f5f5f 64 gnu punpckldq (%rcx),%mm2 -0f6211|223344556677885f5f5f5f5f5f 64 intel punpckldq mmx2, dword ptr [rcx] -0f6211|223344556677885f5f5f5f5f5f 64 plan9 PUNPCKLDQ 0(CX), M2 -0f6311|223344556677885f5f5f5f5f5f 32 intel packsswb mmx2, qword ptr [ecx] -0f6311|223344556677885f5f5f5f5f5f 32 plan9 PACKSSWB 0(CX), M2 -0f6311|223344556677885f5f5f5f5f5f 64 gnu packsswb (%rcx),%mm2 -0f6311|223344556677885f5f5f5f5f5f 64 intel packsswb mmx2, qword ptr [rcx] -0f6311|223344556677885f5f5f5f5f5f 64 plan9 PACKSSWB 0(CX), M2 -0f6411|223344556677885f5f5f5f5f5f 32 intel pcmpgtb mmx2, qword ptr [ecx] -0f6411|223344556677885f5f5f5f5f5f 32 plan9 PCMPGTB 0(CX), M2 -0f6411|223344556677885f5f5f5f5f5f 64 gnu pcmpgtb (%rcx),%mm2 -0f6411|223344556677885f5f5f5f5f5f 64 intel pcmpgtb mmx2, qword ptr [rcx] -0f6411|223344556677885f5f5f5f5f5f 64 plan9 PCMPGTB 0(CX), M2 -0f6511|223344556677885f5f5f5f5f5f 32 intel pcmpgtw mmx2, qword ptr [ecx] -0f6511|223344556677885f5f5f5f5f5f 32 plan9 PCMPGTW 0(CX), M2 -0f6511|223344556677885f5f5f5f5f5f 64 gnu pcmpgtw (%rcx),%mm2 -0f6511|223344556677885f5f5f5f5f5f 64 intel pcmpgtw mmx2, qword ptr [rcx] -0f6511|223344556677885f5f5f5f5f5f 64 plan9 PCMPGTW 0(CX), M2 -0f6611|223344556677885f5f5f5f5f5f 32 intel pcmpgtd mmx2, qword ptr [ecx] -0f6611|223344556677885f5f5f5f5f5f 32 plan9 PCMPGTD 0(CX), M2 -0f6611|223344556677885f5f5f5f5f5f 64 gnu pcmpgtd (%rcx),%mm2 -0f6611|223344556677885f5f5f5f5f5f 64 intel pcmpgtd mmx2, qword ptr [rcx] -0f6611|223344556677885f5f5f5f5f5f 64 plan9 PCMPGTD 0(CX), M2 -0f6711|223344556677885f5f5f5f5f5f 32 intel packuswb mmx2, qword ptr [ecx] -0f6711|223344556677885f5f5f5f5f5f 32 plan9 PACKUSWB 0(CX), M2 -0f6711|223344556677885f5f5f5f5f5f 64 gnu packuswb (%rcx),%mm2 -0f6711|223344556677885f5f5f5f5f5f 64 intel packuswb mmx2, qword ptr [rcx] -0f6711|223344556677885f5f5f5f5f5f 64 plan9 PACKUSWB 0(CX), M2 -0f6811|223344556677885f5f5f5f5f5f 32 intel punpckhbw mmx2, qword ptr [ecx] -0f6811|223344556677885f5f5f5f5f5f 32 plan9 PUNPCKHBW 0(CX), M2 -0f6811|223344556677885f5f5f5f5f5f 64 gnu punpckhbw (%rcx),%mm2 -0f6811|223344556677885f5f5f5f5f5f 64 intel punpckhbw mmx2, qword ptr [rcx] -0f6811|223344556677885f5f5f5f5f5f 64 plan9 PUNPCKHBW 0(CX), M2 -0f6911|223344556677885f5f5f5f5f5f 32 intel punpckhwd mmx2, qword ptr [ecx] -0f6911|223344556677885f5f5f5f5f5f 32 plan9 PUNPCKHWD 0(CX), M2 -0f6911|223344556677885f5f5f5f5f5f 64 gnu punpckhwd (%rcx),%mm2 -0f6911|223344556677885f5f5f5f5f5f 64 intel punpckhwd mmx2, qword ptr [rcx] -0f6911|223344556677885f5f5f5f5f5f 64 plan9 PUNPCKHWD 0(CX), M2 -0f6a11|223344556677885f5f5f5f5f5f 32 intel punpckhdq mmx2, qword ptr [ecx] -0f6a11|223344556677885f5f5f5f5f5f 32 plan9 PUNPCKHDQ 0(CX), M2 -0f6a11|223344556677885f5f5f5f5f5f 64 gnu punpckhdq (%rcx),%mm2 -0f6a11|223344556677885f5f5f5f5f5f 64 intel punpckhdq mmx2, qword ptr [rcx] -0f6a11|223344556677885f5f5f5f5f5f 64 plan9 PUNPCKHDQ 0(CX), M2 -0f6b11|223344556677885f5f5f5f5f5f 32 intel packssdw mmx2, qword ptr [ecx] -0f6b11|223344556677885f5f5f5f5f5f 32 plan9 PACKSSDW 0(CX), M2 -0f6b11|223344556677885f5f5f5f5f5f 64 gnu packssdw (%rcx),%mm2 -0f6b11|223344556677885f5f5f5f5f5f 64 intel packssdw mmx2, qword ptr [rcx] -0f6b11|223344556677885f5f5f5f5f5f 64 plan9 PACKSSDW 0(CX), M2 -0f6c|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0f6c|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0f6c|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -0f6c|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -0f6c|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0f6d|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0f6d|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0f6d|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -0f6d|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -0f6d|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0f6e11|223344556677885f5f5f5f5f5f 32 intel movd mmx2, dword ptr [ecx] -0f6e11|223344556677885f5f5f5f5f5f 32 plan9 MOVD 0(CX), M2 -0f6e11|223344556677885f5f5f5f5f5f 64 gnu movd (%rcx),%mm2 -0f6e11|223344556677885f5f5f5f5f5f 64 intel movd mmx2, dword ptr [rcx] -0f6e11|223344556677885f5f5f5f5f5f 64 plan9 MOVD 0(CX), M2 -0f6f11|223344556677885f5f5f5f5f5f 32 intel movq mmx2, qword ptr [ecx] -0f6f11|223344556677885f5f5f5f5f5f 32 plan9 MOVQ 0(CX), M2 -0f6f11|223344556677885f5f5f5f5f5f 64 gnu movq (%rcx),%mm2 -0f6f11|223344556677885f5f5f5f5f5f 64 intel movq mmx2, qword ptr [rcx] -0f6f11|223344556677885f5f5f5f5f5f 64 plan9 MOVQ 0(CX), M2 -0f701122|3344556677885f5f5f5f5f5f 32 intel pshufw mmx2, qword ptr [ecx], 0x22 -0f701122|3344556677885f5f5f5f5f5f 32 plan9 PSHUFW $0x22, 0(CX), M2 -0f701122|3344556677885f5f5f5f5f5f 64 gnu pshufw $0x22,(%rcx),%mm2 -0f701122|3344556677885f5f5f5f5f5f 64 intel pshufw mmx2, qword ptr [rcx], 0x22 -0f701122|3344556677885f5f5f5f5f5f 64 plan9 PSHUFW $0x22, 0(CX), M2 -0f7100|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f7100|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f7100|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f7100|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f7100|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f711122|3344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0f711122|3344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0f711122|3344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -0f711122|3344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -0f711122|3344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0f712011|223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f712011|223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f712011|223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f712011|223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f712011|223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f713011|223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f713011|223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f713011|223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f713011|223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f713011|223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f71d011|223344556677885f5f5f5f5f 32 intel psrlw mmx0, 0x11 -0f71d011|223344556677885f5f5f5f5f 32 plan9 PSRLW $0x11, M0 -0f71d011|223344556677885f5f5f5f5f 64 gnu psrlw $0x11,%mm0 -0f71d011|223344556677885f5f5f5f5f 64 intel psrlw mmx0, 0x11 -0f71d011|223344556677885f5f5f5f5f 64 plan9 PSRLW $0x11, M0 -0f71e011|223344556677885f5f5f5f5f 32 intel psraw mmx0, 0x11 -0f71e011|223344556677885f5f5f5f5f 32 plan9 PSRAW $0x11, M0 -0f71e011|223344556677885f5f5f5f5f 64 gnu psraw $0x11,%mm0 -0f71e011|223344556677885f5f5f5f5f 64 intel psraw mmx0, 0x11 -0f71e011|223344556677885f5f5f5f5f 64 plan9 PSRAW $0x11, M0 -0f71f011|223344556677885f5f5f5f5f 32 intel psllw mmx0, 0x11 -0f71f011|223344556677885f5f5f5f5f 32 plan9 PSLLW $0x11, M0 -0f71f011|223344556677885f5f5f5f5f 64 gnu psllw $0x11,%mm0 -0f71f011|223344556677885f5f5f5f5f 64 intel psllw mmx0, 0x11 -0f71f011|223344556677885f5f5f5f5f 64 plan9 PSLLW $0x11, M0 -0f7200|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f7200|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f7200|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f7200|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f7200|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f721122|3344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0f721122|3344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0f721122|3344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -0f721122|3344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -0f721122|3344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0f722011|223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f722011|223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f722011|223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f722011|223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f722011|223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f723011|223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f723011|223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f723011|223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f723011|223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f723011|223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f72d011|223344556677885f5f5f5f5f 32 intel psrld mmx0, 0x11 -0f72d011|223344556677885f5f5f5f5f 32 plan9 PSRLD $0x11, M0 -0f72d011|223344556677885f5f5f5f5f 64 gnu psrld $0x11,%mm0 -0f72d011|223344556677885f5f5f5f5f 64 intel psrld mmx0, 0x11 -0f72d011|223344556677885f5f5f5f5f 64 plan9 PSRLD $0x11, M0 -0f72e011|223344556677885f5f5f5f5f 32 intel psrad mmx0, 0x11 -0f72e011|223344556677885f5f5f5f5f 32 plan9 PSRAD $0x11, M0 -0f72e011|223344556677885f5f5f5f5f 64 gnu psrad $0x11,%mm0 -0f72e011|223344556677885f5f5f5f5f 64 intel psrad mmx0, 0x11 -0f72e011|223344556677885f5f5f5f5f 64 plan9 PSRAD $0x11, M0 -0f72f011|223344556677885f5f5f5f5f 32 intel pslld mmx0, 0x11 -0f72f011|223344556677885f5f5f5f5f 32 plan9 PSLLD $0x11, M0 -0f72f011|223344556677885f5f5f5f5f 64 gnu pslld $0x11,%mm0 -0f72f011|223344556677885f5f5f5f5f 64 intel pslld mmx0, 0x11 -0f72f011|223344556677885f5f5f5f5f 64 plan9 PSLLD $0x11, M0 -0f7300|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f7300|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f7300|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f7300|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f7300|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f731122|3344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0f731122|3344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0f731122|3344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -0f731122|3344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -0f731122|3344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0f7318|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f7318|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f7318|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f7318|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f7318|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f733011|223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f733011|223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f733011|223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f733011|223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f733011|223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f7338|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0f7338|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0f7338|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0f7338|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0f7338|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0f73d011|223344556677885f5f5f5f5f 32 intel psrlq mmx0, 0x11 -0f73d011|223344556677885f5f5f5f5f 32 plan9 PSRLQ $0x11, M0 -0f73d011|223344556677885f5f5f5f5f 64 gnu psrlq $0x11,%mm0 -0f73d011|223344556677885f5f5f5f5f 64 intel psrlq mmx0, 0x11 -0f73d011|223344556677885f5f5f5f5f 64 plan9 PSRLQ $0x11, M0 -0f73f011|223344556677885f5f5f5f5f 32 intel psllq mmx0, 0x11 -0f73f011|223344556677885f5f5f5f5f 32 plan9 PSLLQ $0x11, M0 -0f73f011|223344556677885f5f5f5f5f 64 gnu psllq $0x11,%mm0 -0f73f011|223344556677885f5f5f5f5f 64 intel psllq mmx0, 0x11 -0f73f011|223344556677885f5f5f5f5f 64 plan9 PSLLQ $0x11, M0 -0f7411|223344556677885f5f5f5f5f5f 32 intel pcmpeqb mmx2, qword ptr [ecx] -0f7411|223344556677885f5f5f5f5f5f 32 plan9 PCMPEQB 0(CX), M2 -0f7411|223344556677885f5f5f5f5f5f 64 gnu pcmpeqb (%rcx),%mm2 -0f7411|223344556677885f5f5f5f5f5f 64 intel pcmpeqb mmx2, qword ptr [rcx] -0f7411|223344556677885f5f5f5f5f5f 64 plan9 PCMPEQB 0(CX), M2 -0f7511|223344556677885f5f5f5f5f5f 32 intel pcmpeqw mmx2, qword ptr [ecx] -0f7511|223344556677885f5f5f5f5f5f 32 plan9 PCMPEQW 0(CX), M2 -0f7511|223344556677885f5f5f5f5f5f 64 gnu pcmpeqw (%rcx),%mm2 -0f7511|223344556677885f5f5f5f5f5f 64 intel pcmpeqw mmx2, qword ptr [rcx] -0f7511|223344556677885f5f5f5f5f5f 64 plan9 PCMPEQW 0(CX), M2 -0f7611|223344556677885f5f5f5f5f5f 32 intel pcmpeqd mmx2, qword ptr [ecx] -0f7611|223344556677885f5f5f5f5f5f 32 plan9 PCMPEQD 0(CX), M2 -0f7611|223344556677885f5f5f5f5f5f 64 gnu pcmpeqd (%rcx),%mm2 -0f7611|223344556677885f5f5f5f5f5f 64 intel pcmpeqd mmx2, qword ptr [rcx] -0f7611|223344556677885f5f5f5f5f5f 64 plan9 PCMPEQD 0(CX), M2 -0f77|11223344556677885f5f5f5f5f5f 32 intel emms -0f77|11223344556677885f5f5f5f5f5f 32 plan9 EMMS -0f77|11223344556677885f5f5f5f5f5f 64 gnu emms -0f77|11223344556677885f5f5f5f5f5f 64 intel emms -0f77|11223344556677885f5f5f5f5f5f 64 plan9 EMMS -0f7c|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0f7c|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0f7c|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -0f7c|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -0f7c|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0f7d|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0f7d|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0f7d|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -0f7d|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -0f7d|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0f7e11|223344556677885f5f5f5f5f5f 32 intel movd dword ptr [ecx], mmx2 -0f7e11|223344556677885f5f5f5f5f5f 32 plan9 MOVD M2, 0(CX) -0f7e11|223344556677885f5f5f5f5f5f 64 gnu movd %mm2,(%rcx) -0f7e11|223344556677885f5f5f5f5f5f 64 intel movd dword ptr [rcx], mmx2 -0f7e11|223344556677885f5f5f5f5f5f 64 plan9 MOVD M2, 0(CX) -0f7f11|223344556677885f5f5f5f5f5f 32 intel movq qword ptr [ecx], mmx2 -0f7f11|223344556677885f5f5f5f5f5f 32 plan9 MOVQ M2, 0(CX) -0f7f11|223344556677885f5f5f5f5f5f 64 gnu movq %mm2,(%rcx) -0f7f11|223344556677885f5f5f5f5f5f 64 intel movq qword ptr [rcx], mmx2 -0f7f11|223344556677885f5f5f5f5f5f 64 plan9 MOVQ M2, 0(CX) -0f8011223344|556677885f5f5f5f5f5f 32 intel jo .+0x44332211 -0f8011223344|556677885f5f5f5f5f5f 32 plan9 JO .+1144201745 -0f8011223344|556677885f5f5f5f5f5f 64 gnu jo .+0x44332211 -0f8011223344|556677885f5f5f5f5f5f 64 intel jo .+0x44332211 -0f8011223344|556677885f5f5f5f5f5f 64 plan9 JO .+1144201745 -0f8111223344|556677885f5f5f5f5f5f 32 intel jno .+0x44332211 -0f8111223344|556677885f5f5f5f5f5f 32 plan9 JNO .+1144201745 -0f8111223344|556677885f5f5f5f5f5f 64 gnu jno .+0x44332211 -0f8111223344|556677885f5f5f5f5f5f 64 intel jno .+0x44332211 -0f8111223344|556677885f5f5f5f5f5f 64 plan9 JNO .+1144201745 -0f8211223344|556677885f5f5f5f5f5f 32 intel jb .+0x44332211 -0f8211223344|556677885f5f5f5f5f5f 32 plan9 JB .+1144201745 -0f8211223344|556677885f5f5f5f5f5f 64 gnu jb .+0x44332211 -0f8211223344|556677885f5f5f5f5f5f 64 intel jb .+0x44332211 -0f8211223344|556677885f5f5f5f5f5f 64 plan9 JB .+1144201745 -0f8311223344|556677885f5f5f5f5f5f 32 intel jnb .+0x44332211 -0f8311223344|556677885f5f5f5f5f5f 32 plan9 JAE .+1144201745 -0f8311223344|556677885f5f5f5f5f5f 64 gnu jae .+0x44332211 -0f8311223344|556677885f5f5f5f5f5f 64 intel jnb .+0x44332211 -0f8311223344|556677885f5f5f5f5f5f 64 plan9 JAE .+1144201745 -0f8411223344|556677885f5f5f5f5f5f 32 intel jz .+0x44332211 -0f8411223344|556677885f5f5f5f5f5f 32 plan9 JE .+1144201745 -0f8411223344|556677885f5f5f5f5f5f 64 gnu je .+0x44332211 -0f8411223344|556677885f5f5f5f5f5f 64 intel jz .+0x44332211 -0f8411223344|556677885f5f5f5f5f5f 64 plan9 JE .+1144201745 -0f8511223344|556677885f5f5f5f5f5f 32 intel jnz .+0x44332211 -0f8511223344|556677885f5f5f5f5f5f 32 plan9 JNE .+1144201745 -0f8511223344|556677885f5f5f5f5f5f 64 gnu jne .+0x44332211 -0f8511223344|556677885f5f5f5f5f5f 64 intel jnz .+0x44332211 -0f8511223344|556677885f5f5f5f5f5f 64 plan9 JNE .+1144201745 -0f8611223344|556677885f5f5f5f5f5f 32 intel jbe .+0x44332211 -0f8611223344|556677885f5f5f5f5f5f 32 plan9 JBE .+1144201745 -0f8611223344|556677885f5f5f5f5f5f 64 gnu jbe .+0x44332211 -0f8611223344|556677885f5f5f5f5f5f 64 intel jbe .+0x44332211 -0f8611223344|556677885f5f5f5f5f5f 64 plan9 JBE .+1144201745 -0f8711223344|556677885f5f5f5f5f5f 32 intel jnbe .+0x44332211 -0f8711223344|556677885f5f5f5f5f5f 32 plan9 JA .+1144201745 -0f8711223344|556677885f5f5f5f5f5f 64 gnu ja .+0x44332211 -0f8711223344|556677885f5f5f5f5f5f 64 intel jnbe .+0x44332211 -0f8711223344|556677885f5f5f5f5f5f 64 plan9 JA .+1144201745 -0f8811223344|556677885f5f5f5f5f5f 32 intel js .+0x44332211 -0f8811223344|556677885f5f5f5f5f5f 32 plan9 JS .+1144201745 -0f8811223344|556677885f5f5f5f5f5f 64 gnu js .+0x44332211 -0f8811223344|556677885f5f5f5f5f5f 64 intel js .+0x44332211 -0f8811223344|556677885f5f5f5f5f5f 64 plan9 JS .+1144201745 -0f8911223344|556677885f5f5f5f5f5f 32 intel jns .+0x44332211 -0f8911223344|556677885f5f5f5f5f5f 32 plan9 JNS .+1144201745 -0f8911223344|556677885f5f5f5f5f5f 64 gnu jns .+0x44332211 -0f8911223344|556677885f5f5f5f5f5f 64 intel jns .+0x44332211 -0f8911223344|556677885f5f5f5f5f5f 64 plan9 JNS .+1144201745 -0f8a11223344|556677885f5f5f5f5f5f 32 intel jp .+0x44332211 -0f8a11223344|556677885f5f5f5f5f5f 32 plan9 JP .+1144201745 -0f8a11223344|556677885f5f5f5f5f5f 64 gnu jp .+0x44332211 -0f8a11223344|556677885f5f5f5f5f5f 64 intel jp .+0x44332211 -0f8a11223344|556677885f5f5f5f5f5f 64 plan9 JP .+1144201745 -0f8b11223344|556677885f5f5f5f5f5f 32 intel jnp .+0x44332211 -0f8b11223344|556677885f5f5f5f5f5f 32 plan9 JNP .+1144201745 -0f8b11223344|556677885f5f5f5f5f5f 64 gnu jnp .+0x44332211 -0f8b11223344|556677885f5f5f5f5f5f 64 intel jnp .+0x44332211 -0f8b11223344|556677885f5f5f5f5f5f 64 plan9 JNP .+1144201745 -0f8c11223344|556677885f5f5f5f5f5f 32 intel jl .+0x44332211 -0f8c11223344|556677885f5f5f5f5f5f 32 plan9 JL .+1144201745 -0f8c11223344|556677885f5f5f5f5f5f 64 gnu jl .+0x44332211 -0f8c11223344|556677885f5f5f5f5f5f 64 intel jl .+0x44332211 -0f8c11223344|556677885f5f5f5f5f5f 64 plan9 JL .+1144201745 -0f8d11223344|556677885f5f5f5f5f5f 32 intel jnl .+0x44332211 -0f8d11223344|556677885f5f5f5f5f5f 32 plan9 JGE .+1144201745 -0f8d11223344|556677885f5f5f5f5f5f 64 gnu jge .+0x44332211 -0f8d11223344|556677885f5f5f5f5f5f 64 intel jnl .+0x44332211 -0f8d11223344|556677885f5f5f5f5f5f 64 plan9 JGE .+1144201745 -0f8e11223344|556677885f5f5f5f5f5f 32 intel jle .+0x44332211 -0f8e11223344|556677885f5f5f5f5f5f 32 plan9 JLE .+1144201745 -0f8e11223344|556677885f5f5f5f5f5f 64 gnu jle .+0x44332211 -0f8e11223344|556677885f5f5f5f5f5f 64 intel jle .+0x44332211 -0f8e11223344|556677885f5f5f5f5f5f 64 plan9 JLE .+1144201745 -0f8f11223344|556677885f5f5f5f5f5f 32 intel jnle .+0x44332211 -0f8f11223344|556677885f5f5f5f5f5f 32 plan9 JG .+1144201745 -0f8f11223344|556677885f5f5f5f5f5f 64 gnu jg .+0x44332211 -0f8f11223344|556677885f5f5f5f5f5f 64 intel jnle .+0x44332211 -0f8f11223344|556677885f5f5f5f5f5f 64 plan9 JG .+1144201745 -0f9011|223344556677885f5f5f5f5f5f 32 intel seto byte ptr [ecx] -0f9011|223344556677885f5f5f5f5f5f 32 plan9 SETO 0(CX) -0f9011|223344556677885f5f5f5f5f5f 64 gnu seto (%rcx) -0f9011|223344556677885f5f5f5f5f5f 64 intel seto byte ptr [rcx] -0f9011|223344556677885f5f5f5f5f5f 64 plan9 SETO 0(CX) -0f9111|223344556677885f5f5f5f5f5f 32 intel setno byte ptr [ecx] -0f9111|223344556677885f5f5f5f5f5f 32 plan9 SETNO 0(CX) -0f9111|223344556677885f5f5f5f5f5f 64 gnu setno (%rcx) -0f9111|223344556677885f5f5f5f5f5f 64 intel setno byte ptr [rcx] -0f9111|223344556677885f5f5f5f5f5f 64 plan9 SETNO 0(CX) -0f9211|223344556677885f5f5f5f5f5f 32 intel setb byte ptr [ecx] -0f9211|223344556677885f5f5f5f5f5f 32 plan9 SETB 0(CX) -0f9211|223344556677885f5f5f5f5f5f 64 gnu setb (%rcx) -0f9211|223344556677885f5f5f5f5f5f 64 intel setb byte ptr [rcx] -0f9211|223344556677885f5f5f5f5f5f 64 plan9 SETB 0(CX) -0f9311|223344556677885f5f5f5f5f5f 32 intel setnb byte ptr [ecx] -0f9311|223344556677885f5f5f5f5f5f 32 plan9 SETAE 0(CX) -0f9311|223344556677885f5f5f5f5f5f 64 gnu setae (%rcx) -0f9311|223344556677885f5f5f5f5f5f 64 intel setnb byte ptr [rcx] -0f9311|223344556677885f5f5f5f5f5f 64 plan9 SETAE 0(CX) -0f9411|223344556677885f5f5f5f5f5f 32 intel setz byte ptr [ecx] -0f9411|223344556677885f5f5f5f5f5f 32 plan9 SETE 0(CX) -0f9411|223344556677885f5f5f5f5f5f 64 gnu sete (%rcx) -0f9411|223344556677885f5f5f5f5f5f 64 intel setz byte ptr [rcx] -0f9411|223344556677885f5f5f5f5f5f 64 plan9 SETE 0(CX) -0f9511|223344556677885f5f5f5f5f5f 32 intel setnz byte ptr [ecx] -0f9511|223344556677885f5f5f5f5f5f 32 plan9 SETNE 0(CX) -0f9511|223344556677885f5f5f5f5f5f 64 gnu setne (%rcx) -0f9511|223344556677885f5f5f5f5f5f 64 intel setnz byte ptr [rcx] -0f9511|223344556677885f5f5f5f5f5f 64 plan9 SETNE 0(CX) -0f9611|223344556677885f5f5f5f5f5f 32 intel setbe byte ptr [ecx] -0f9611|223344556677885f5f5f5f5f5f 32 plan9 SETBE 0(CX) -0f9611|223344556677885f5f5f5f5f5f 64 gnu setbe (%rcx) -0f9611|223344556677885f5f5f5f5f5f 64 intel setbe byte ptr [rcx] -0f9611|223344556677885f5f5f5f5f5f 64 plan9 SETBE 0(CX) -0f9711|223344556677885f5f5f5f5f5f 32 intel setnbe byte ptr [ecx] -0f9711|223344556677885f5f5f5f5f5f 32 plan9 SETA 0(CX) -0f9711|223344556677885f5f5f5f5f5f 64 gnu seta (%rcx) -0f9711|223344556677885f5f5f5f5f5f 64 intel setnbe byte ptr [rcx] -0f9711|223344556677885f5f5f5f5f5f 64 plan9 SETA 0(CX) -0f9811|223344556677885f5f5f5f5f5f 32 intel sets byte ptr [ecx] -0f9811|223344556677885f5f5f5f5f5f 32 plan9 SETS 0(CX) -0f9811|223344556677885f5f5f5f5f5f 64 gnu sets (%rcx) -0f9811|223344556677885f5f5f5f5f5f 64 intel sets byte ptr [rcx] -0f9811|223344556677885f5f5f5f5f5f 64 plan9 SETS 0(CX) -0f9911|223344556677885f5f5f5f5f5f 32 intel setns byte ptr [ecx] -0f9911|223344556677885f5f5f5f5f5f 32 plan9 SETNS 0(CX) -0f9911|223344556677885f5f5f5f5f5f 64 gnu setns (%rcx) -0f9911|223344556677885f5f5f5f5f5f 64 intel setns byte ptr [rcx] -0f9911|223344556677885f5f5f5f5f5f 64 plan9 SETNS 0(CX) -0f9a11|223344556677885f5f5f5f5f5f 32 intel setp byte ptr [ecx] -0f9a11|223344556677885f5f5f5f5f5f 32 plan9 SETP 0(CX) -0f9a11|223344556677885f5f5f5f5f5f 64 gnu setp (%rcx) -0f9a11|223344556677885f5f5f5f5f5f 64 intel setp byte ptr [rcx] -0f9a11|223344556677885f5f5f5f5f5f 64 plan9 SETP 0(CX) -0f9b11|223344556677885f5f5f5f5f5f 32 intel setnp byte ptr [ecx] -0f9b11|223344556677885f5f5f5f5f5f 32 plan9 SETNP 0(CX) -0f9b11|223344556677885f5f5f5f5f5f 64 gnu setnp (%rcx) -0f9b11|223344556677885f5f5f5f5f5f 64 intel setnp byte ptr [rcx] -0f9b11|223344556677885f5f5f5f5f5f 64 plan9 SETNP 0(CX) -0f9c11|223344556677885f5f5f5f5f5f 32 intel setl byte ptr [ecx] -0f9c11|223344556677885f5f5f5f5f5f 32 plan9 SETL 0(CX) -0f9c11|223344556677885f5f5f5f5f5f 64 gnu setl (%rcx) -0f9c11|223344556677885f5f5f5f5f5f 64 intel setl byte ptr [rcx] -0f9c11|223344556677885f5f5f5f5f5f 64 plan9 SETL 0(CX) -0f9d11|223344556677885f5f5f5f5f5f 32 intel setnl byte ptr [ecx] -0f9d11|223344556677885f5f5f5f5f5f 32 plan9 SETGE 0(CX) -0f9d11|223344556677885f5f5f5f5f5f 64 gnu setge (%rcx) -0f9d11|223344556677885f5f5f5f5f5f 64 intel setnl byte ptr [rcx] -0f9d11|223344556677885f5f5f5f5f5f 64 plan9 SETGE 0(CX) -0f9e11|223344556677885f5f5f5f5f5f 32 intel setle byte ptr [ecx] -0f9e11|223344556677885f5f5f5f5f5f 32 plan9 SETLE 0(CX) -0f9e11|223344556677885f5f5f5f5f5f 64 gnu setle (%rcx) -0f9e11|223344556677885f5f5f5f5f5f 64 intel setle byte ptr [rcx] -0f9e11|223344556677885f5f5f5f5f5f 64 plan9 SETLE 0(CX) -0f9f11|223344556677885f5f5f5f5f5f 32 intel setnle byte ptr [ecx] -0f9f11|223344556677885f5f5f5f5f5f 32 plan9 SETG 0(CX) -0f9f11|223344556677885f5f5f5f5f5f 64 gnu setg (%rcx) -0f9f11|223344556677885f5f5f5f5f5f 64 intel setnle byte ptr [rcx] -0f9f11|223344556677885f5f5f5f5f5f 64 plan9 SETG 0(CX) -0fa0|11223344556677885f5f5f5f5f5f 32 intel push fs -0fa0|11223344556677885f5f5f5f5f5f 32 plan9 PUSHL FS -0fa0|11223344556677885f5f5f5f5f5f 64 gnu pushq %fs -0fa0|11223344556677885f5f5f5f5f5f 64 intel push fs -0fa0|11223344556677885f5f5f5f5f5f 64 plan9 PUSHL FS -0fa1|11223344556677885f5f5f5f5f5f 32 intel pop fs -0fa1|11223344556677885f5f5f5f5f5f 32 plan9 POPL FS -0fa1|11223344556677885f5f5f5f5f5f 64 gnu popq %fs -0fa1|11223344556677885f5f5f5f5f5f 64 intel pop fs -0fa1|11223344556677885f5f5f5f5f5f 64 plan9 POPL FS -0fa2|11223344556677885f5f5f5f5f5f 32 intel cpuid -0fa2|11223344556677885f5f5f5f5f5f 32 plan9 CPUID -0fa2|11223344556677885f5f5f5f5f5f 64 gnu cpuid -0fa2|11223344556677885f5f5f5f5f5f 64 intel cpuid -0fa2|11223344556677885f5f5f5f5f5f 64 plan9 CPUID -0fa311|223344556677885f5f5f5f5f5f 32 intel bt dword ptr [ecx], edx -0fa311|223344556677885f5f5f5f5f5f 32 plan9 BTL DX, 0(CX) -0fa311|223344556677885f5f5f5f5f5f 64 gnu bt %edx,(%rcx) -0fa311|223344556677885f5f5f5f5f5f 64 intel bt dword ptr [rcx], edx -0fa311|223344556677885f5f5f5f5f5f 64 plan9 BTL DX, 0(CX) -0fa41122|3344556677885f5f5f5f5f5f 32 intel shld dword ptr [ecx], edx, 0x22 -0fa41122|3344556677885f5f5f5f5f5f 32 plan9 SHLDL $0x22, DX, 0(CX) -0fa41122|3344556677885f5f5f5f5f5f 64 gnu shld $0x22,%edx,(%rcx) -0fa41122|3344556677885f5f5f5f5f5f 64 intel shld dword ptr [rcx], edx, 0x22 -0fa41122|3344556677885f5f5f5f5f5f 64 plan9 SHLDL $0x22, DX, 0(CX) -0fa511|223344556677885f5f5f5f5f5f 32 intel shld dword ptr [ecx], edx, cl -0fa511|223344556677885f5f5f5f5f5f 32 plan9 SHLDL CL, DX, 0(CX) -0fa511|223344556677885f5f5f5f5f5f 64 gnu shld %cl,%edx,(%rcx) -0fa511|223344556677885f5f5f5f5f5f 64 intel shld dword ptr [rcx], edx, cl -0fa511|223344556677885f5f5f5f5f5f 64 plan9 SHLDL CL, DX, 0(CX) -0fa8|11223344556677885f5f5f5f5f5f 32 intel push gs -0fa8|11223344556677885f5f5f5f5f5f 32 plan9 PUSHL GS -0fa8|11223344556677885f5f5f5f5f5f 64 gnu pushq %gs -0fa8|11223344556677885f5f5f5f5f5f 64 intel push gs -0fa8|11223344556677885f5f5f5f5f5f 64 plan9 PUSHL GS -0fa9|11223344556677885f5f5f5f5f5f 32 intel pop gs -0fa9|11223344556677885f5f5f5f5f5f 32 plan9 POPL GS -0fa9|11223344556677885f5f5f5f5f5f 64 gnu popq %gs -0fa9|11223344556677885f5f5f5f5f5f 64 intel pop gs -0fa9|11223344556677885f5f5f5f5f5f 64 plan9 POPL GS -0faa|11223344556677885f5f5f5f5f5f 32 intel rsm -0faa|11223344556677885f5f5f5f5f5f 32 plan9 RSM -0faa|11223344556677885f5f5f5f5f5f 64 gnu rsm -0faa|11223344556677885f5f5f5f5f5f 64 intel rsm -0faa|11223344556677885f5f5f5f5f5f 64 plan9 RSM -0fab11|223344556677885f5f5f5f5f5f 32 intel bts dword ptr [ecx], edx -0fab11|223344556677885f5f5f5f5f5f 32 plan9 BTSL DX, 0(CX) -0fab11|223344556677885f5f5f5f5f5f 64 gnu bts %edx,(%rcx) -0fab11|223344556677885f5f5f5f5f5f 64 intel bts dword ptr [rcx], edx -0fab11|223344556677885f5f5f5f5f5f 64 plan9 BTSL DX, 0(CX) -0fac1122|3344556677885f5f5f5f5f5f 32 intel shrd dword ptr [ecx], edx, 0x22 -0fac1122|3344556677885f5f5f5f5f5f 32 plan9 SHRDL $0x22, DX, 0(CX) -0fac1122|3344556677885f5f5f5f5f5f 64 gnu shrd $0x22,%edx,(%rcx) -0fac1122|3344556677885f5f5f5f5f5f 64 intel shrd dword ptr [rcx], edx, 0x22 -0fac1122|3344556677885f5f5f5f5f5f 64 plan9 SHRDL $0x22, DX, 0(CX) -0fad11|223344556677885f5f5f5f5f5f 32 intel shrd dword ptr [ecx], edx, cl -0fad11|223344556677885f5f5f5f5f5f 32 plan9 SHRDL CL, DX, 0(CX) -0fad11|223344556677885f5f5f5f5f5f 64 gnu shrd %cl,%edx,(%rcx) -0fad11|223344556677885f5f5f5f5f5f 64 intel shrd dword ptr [rcx], edx, cl -0fad11|223344556677885f5f5f5f5f5f 64 plan9 SHRDL CL, DX, 0(CX) -0fae00|11223344556677885f5f5f5f5f 32 intel fxsave ptr [eax] -0fae00|11223344556677885f5f5f5f5f 32 plan9 FXSAVE 0(AX) -0fae00|11223344556677885f5f5f5f5f 64 gnu fxsave (%rax) -0fae00|11223344556677885f5f5f5f5f 64 intel fxsave ptr [rax] -0fae00|11223344556677885f5f5f5f5f 64 plan9 FXSAVE 0(AX) -0fae08|11223344556677885f5f5f5f5f 32 intel fxrstor ptr [eax] -0fae08|11223344556677885f5f5f5f5f 32 plan9 FXRSTOR 0(AX) -0fae08|11223344556677885f5f5f5f5f 64 gnu fxrstor (%rax) -0fae08|11223344556677885f5f5f5f5f 64 intel fxrstor ptr [rax] -0fae08|11223344556677885f5f5f5f5f 64 plan9 FXRSTOR 0(AX) -0fae11|223344556677885f5f5f5f5f5f 32 intel ldmxcsr dword ptr [ecx] -0fae11|223344556677885f5f5f5f5f5f 32 plan9 LDMXCSR 0(CX) -0fae11|223344556677885f5f5f5f5f5f 64 gnu ldmxcsr (%rcx) -0fae11|223344556677885f5f5f5f5f5f 64 intel ldmxcsr dword ptr [rcx] -0fae11|223344556677885f5f5f5f5f5f 64 plan9 LDMXCSR 0(CX) -0fae18|11223344556677885f5f5f5f5f 32 intel stmxcsr dword ptr [eax] -0fae18|11223344556677885f5f5f5f5f 32 plan9 STMXCSR 0(AX) -0fae18|11223344556677885f5f5f5f5f 64 gnu stmxcsr (%rax) -0fae18|11223344556677885f5f5f5f5f 64 intel stmxcsr dword ptr [rax] -0fae18|11223344556677885f5f5f5f5f 64 plan9 STMXCSR 0(AX) -0fae20|11223344556677885f5f5f5f5f 32 intel xsave ptr [eax] -0fae20|11223344556677885f5f5f5f5f 32 plan9 XSAVE 0(AX) -0fae20|11223344556677885f5f5f5f5f 64 gnu xsave (%rax) -0fae20|11223344556677885f5f5f5f5f 64 intel xsave ptr [rax] -0fae20|11223344556677885f5f5f5f5f 64 plan9 XSAVE 0(AX) -0fae28|11223344556677885f5f5f5f5f 32 intel xrstor ptr [eax] -0fae28|11223344556677885f5f5f5f5f 32 plan9 XRSTOR 0(AX) -0fae28|11223344556677885f5f5f5f5f 64 gnu xrstor (%rax) -0fae28|11223344556677885f5f5f5f5f 64 intel xrstor ptr [rax] -0fae28|11223344556677885f5f5f5f5f 64 plan9 XRSTOR 0(AX) -0fae30|11223344556677885f5f5f5f5f 32 intel xsaveopt ptr [eax] -0fae30|11223344556677885f5f5f5f5f 32 plan9 XSAVEOPT 0(AX) -0fae30|11223344556677885f5f5f5f5f 64 gnu xsaveopt (%rax) -0fae30|11223344556677885f5f5f5f5f 64 intel xsaveopt ptr [rax] -0fae30|11223344556677885f5f5f5f5f 64 plan9 XSAVEOPT 0(AX) -0fae38|11223344556677885f5f5f5f5f 32 intel clflush zmmword ptr [eax] -0fae38|11223344556677885f5f5f5f5f 32 plan9 CLFLUSH 0(AX) -0fae38|11223344556677885f5f5f5f5f 64 gnu clflush (%rax) -0fae38|11223344556677885f5f5f5f5f 64 intel clflush zmmword ptr [rax] -0fae38|11223344556677885f5f5f5f5f 64 plan9 CLFLUSH 0(AX) -0faee8|11223344556677885f5f5f5f5f 32 intel lfence -0faee8|11223344556677885f5f5f5f5f 32 plan9 LFENCE -0faee8|11223344556677885f5f5f5f5f 64 gnu lfence -0faee8|11223344556677885f5f5f5f5f 64 intel lfence -0faee8|11223344556677885f5f5f5f5f 64 plan9 LFENCE -0faef0|11223344556677885f5f5f5f5f 32 intel mfence -0faef0|11223344556677885f5f5f5f5f 32 plan9 MFENCE -0faef0|11223344556677885f5f5f5f5f 64 gnu mfence -0faef0|11223344556677885f5f5f5f5f 64 intel mfence -0faef0|11223344556677885f5f5f5f5f 64 plan9 MFENCE -0faef8|11223344556677885f5f5f5f5f 32 intel sfence -0faef8|11223344556677885f5f5f5f5f 32 plan9 SFENCE -0faef8|11223344556677885f5f5f5f5f 64 gnu sfence -0faef8|11223344556677885f5f5f5f5f 64 intel sfence -0faef8|11223344556677885f5f5f5f5f 64 plan9 SFENCE -0faf11|223344556677885f5f5f5f5f5f 32 intel imul edx, dword ptr [ecx] -0faf11|223344556677885f5f5f5f5f5f 32 plan9 IMULL 0(CX), DX -0faf11|223344556677885f5f5f5f5f5f 64 gnu imul (%rcx),%edx -0faf11|223344556677885f5f5f5f5f5f 64 intel imul edx, dword ptr [rcx] -0faf11|223344556677885f5f5f5f5f5f 64 plan9 IMULL 0(CX), DX -0fb011|223344556677885f5f5f5f5f5f 32 intel cmpxchg byte ptr [ecx], dl -0fb011|223344556677885f5f5f5f5f5f 32 plan9 CMPXCHGB DL, 0(CX) -0fb011|223344556677885f5f5f5f5f5f 64 gnu cmpxchg %dl,(%rcx) -0fb011|223344556677885f5f5f5f5f5f 64 intel cmpxchg byte ptr [rcx], dl -0fb011|223344556677885f5f5f5f5f5f 64 plan9 CMPXCHGB DL, 0(CX) -0fb111|223344556677885f5f5f5f5f5f 32 intel cmpxchg dword ptr [ecx], edx -0fb111|223344556677885f5f5f5f5f5f 32 plan9 CMPXCHGL DX, 0(CX) -0fb111|223344556677885f5f5f5f5f5f 64 gnu cmpxchg %edx,(%rcx) -0fb111|223344556677885f5f5f5f5f5f 64 intel cmpxchg dword ptr [rcx], edx -0fb111|223344556677885f5f5f5f5f5f 64 plan9 CMPXCHGL DX, 0(CX) -0fb211|223344556677885f5f5f5f5f5f 32 intel lss edx, ptr [ecx] -0fb211|223344556677885f5f5f5f5f5f 32 plan9 LSS 0(CX), DX -0fb211|223344556677885f5f5f5f5f5f 64 gnu lss (%rcx),%edx -0fb211|223344556677885f5f5f5f5f5f 64 intel lss edx, ptr [rcx] -0fb211|223344556677885f5f5f5f5f5f 64 plan9 LSS 0(CX), DX -0fb311|223344556677885f5f5f5f5f5f 32 intel btr dword ptr [ecx], edx -0fb311|223344556677885f5f5f5f5f5f 32 plan9 BTRL DX, 0(CX) -0fb311|223344556677885f5f5f5f5f5f 64 gnu btr %edx,(%rcx) -0fb311|223344556677885f5f5f5f5f5f 64 intel btr dword ptr [rcx], edx -0fb311|223344556677885f5f5f5f5f5f 64 plan9 BTRL DX, 0(CX) -0fb411|223344556677885f5f5f5f5f5f 32 intel lfs edx, ptr [ecx] -0fb411|223344556677885f5f5f5f5f5f 32 plan9 LFS 0(CX), DX -0fb411|223344556677885f5f5f5f5f5f 64 gnu lfs (%rcx),%edx -0fb411|223344556677885f5f5f5f5f5f 64 intel lfs edx, ptr [rcx] -0fb411|223344556677885f5f5f5f5f5f 64 plan9 LFS 0(CX), DX -0fb511|223344556677885f5f5f5f5f5f 32 intel lgs edx, ptr [ecx] -0fb511|223344556677885f5f5f5f5f5f 32 plan9 LGS 0(CX), DX -0fb511|223344556677885f5f5f5f5f5f 64 gnu lgs (%rcx),%edx -0fb511|223344556677885f5f5f5f5f5f 64 intel lgs edx, ptr [rcx] -0fb511|223344556677885f5f5f5f5f5f 64 plan9 LGS 0(CX), DX -0fb611|223344556677885f5f5f5f5f5f 32 intel movzx edx, byte ptr [ecx] -0fb611|223344556677885f5f5f5f5f5f 32 plan9 MOVZX 0(CX), DX -0fb611|223344556677885f5f5f5f5f5f 64 gnu movzbl (%rcx),%edx -0fb611|223344556677885f5f5f5f5f5f 64 intel movzx edx, byte ptr [rcx] -0fb611|223344556677885f5f5f5f5f5f 64 plan9 MOVZX 0(CX), DX -0fb711|223344556677885f5f5f5f5f5f 32 intel movzx edx, word ptr [ecx] -0fb711|223344556677885f5f5f5f5f5f 32 plan9 MOVZX 0(CX), DX -0fb711|223344556677885f5f5f5f5f5f 64 gnu movzwl (%rcx),%edx -0fb711|223344556677885f5f5f5f5f5f 64 intel movzx edx, word ptr [rcx] -0fb711|223344556677885f5f5f5f5f5f 64 plan9 MOVZX 0(CX), DX -0fb8|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0fb8|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0fb8|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -0fb8|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -0fb8|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0fb9|11223344556677885f5f5f5f5f5f 32 intel ud1 -0fb9|11223344556677885f5f5f5f5f5f 32 plan9 UD1 -0fb9|11223344556677885f5f5f5f5f5f 64 gnu ud1 -0fb9|11223344556677885f5f5f5f5f5f 64 intel ud1 -0fb9|11223344556677885f5f5f5f5f5f 64 plan9 UD1 -0fba11|223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0fba11|223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0fba11|223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -0fba11|223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -0fba11|223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0fba2011|223344556677885f5f5f5f5f 32 intel bt dword ptr [eax], 0x11 -0fba2011|223344556677885f5f5f5f5f 32 plan9 BTL $0x11, 0(AX) -0fba2011|223344556677885f5f5f5f5f 64 gnu btl $0x11,(%rax) -0fba2011|223344556677885f5f5f5f5f 64 intel bt dword ptr [rax], 0x11 -0fba2011|223344556677885f5f5f5f5f 64 plan9 BTL $0x11, 0(AX) -0fba2811|223344556677885f5f5f5f5f 32 intel bts dword ptr [eax], 0x11 -0fba2811|223344556677885f5f5f5f5f 32 plan9 BTSL $0x11, 0(AX) -0fba2811|223344556677885f5f5f5f5f 64 gnu btsl $0x11,(%rax) -0fba2811|223344556677885f5f5f5f5f 64 intel bts dword ptr [rax], 0x11 -0fba2811|223344556677885f5f5f5f5f 64 plan9 BTSL $0x11, 0(AX) -0fba3011|223344556677885f5f5f5f5f 32 intel btr dword ptr [eax], 0x11 -0fba3011|223344556677885f5f5f5f5f 32 plan9 BTRL $0x11, 0(AX) -0fba3011|223344556677885f5f5f5f5f 64 gnu btrl $0x11,(%rax) -0fba3011|223344556677885f5f5f5f5f 64 intel btr dword ptr [rax], 0x11 -0fba3011|223344556677885f5f5f5f5f 64 plan9 BTRL $0x11, 0(AX) -0fba3811|223344556677885f5f5f5f5f 32 intel btc dword ptr [eax], 0x11 -0fba3811|223344556677885f5f5f5f5f 32 plan9 BTCL $0x11, 0(AX) -0fba3811|223344556677885f5f5f5f5f 64 gnu btcl $0x11,(%rax) -0fba3811|223344556677885f5f5f5f5f 64 intel btc dword ptr [rax], 0x11 -0fba3811|223344556677885f5f5f5f5f 64 plan9 BTCL $0x11, 0(AX) -0fbb11|223344556677885f5f5f5f5f5f 32 intel btc dword ptr [ecx], edx -0fbb11|223344556677885f5f5f5f5f5f 32 plan9 BTCL DX, 0(CX) -0fbb11|223344556677885f5f5f5f5f5f 64 gnu btc %edx,(%rcx) -0fbb11|223344556677885f5f5f5f5f5f 64 intel btc dword ptr [rcx], edx -0fbb11|223344556677885f5f5f5f5f5f 64 plan9 BTCL DX, 0(CX) -0fbc11|223344556677885f5f5f5f5f5f 32 intel bsf edx, dword ptr [ecx] -0fbc11|223344556677885f5f5f5f5f5f 32 plan9 BSFL 0(CX), DX -0fbc11|223344556677885f5f5f5f5f5f 64 gnu bsf (%rcx),%edx -0fbc11|223344556677885f5f5f5f5f5f 64 intel bsf edx, dword ptr [rcx] -0fbc11|223344556677885f5f5f5f5f5f 64 plan9 BSFL 0(CX), DX -0fbd11|223344556677885f5f5f5f5f5f 32 intel bsr edx, dword ptr [ecx] -0fbd11|223344556677885f5f5f5f5f5f 32 plan9 BSRL 0(CX), DX -0fbd11|223344556677885f5f5f5f5f5f 64 gnu bsr (%rcx),%edx -0fbd11|223344556677885f5f5f5f5f5f 64 intel bsr edx, dword ptr [rcx] -0fbd11|223344556677885f5f5f5f5f5f 64 plan9 BSRL 0(CX), DX -0fbe11|223344556677885f5f5f5f5f5f 32 intel movsx edx, byte ptr [ecx] -0fbe11|223344556677885f5f5f5f5f5f 32 plan9 MOVSX 0(CX), DX -0fbe11|223344556677885f5f5f5f5f5f 64 gnu movsbl (%rcx),%edx -0fbe11|223344556677885f5f5f5f5f5f 64 intel movsx edx, byte ptr [rcx] -0fbe11|223344556677885f5f5f5f5f5f 64 plan9 MOVSX 0(CX), DX -0fbf11|223344556677885f5f5f5f5f5f 32 intel movsx edx, word ptr [ecx] -0fbf11|223344556677885f5f5f5f5f5f 32 plan9 MOVSX 0(CX), DX -0fbf11|223344556677885f5f5f5f5f5f 64 gnu movswl (%rcx),%edx -0fbf11|223344556677885f5f5f5f5f5f 64 intel movsx edx, word ptr [rcx] -0fbf11|223344556677885f5f5f5f5f5f 64 plan9 MOVSX 0(CX), DX -0fc011|223344556677885f5f5f5f5f5f 32 intel xadd byte ptr [ecx], dl -0fc011|223344556677885f5f5f5f5f5f 32 plan9 XADDB DL, 0(CX) -0fc011|223344556677885f5f5f5f5f5f 64 gnu xadd %dl,(%rcx) -0fc011|223344556677885f5f5f5f5f5f 64 intel xadd byte ptr [rcx], dl -0fc011|223344556677885f5f5f5f5f5f 64 plan9 XADDB DL, 0(CX) -0fc111|223344556677885f5f5f5f5f5f 32 intel xadd dword ptr [ecx], edx -0fc111|223344556677885f5f5f5f5f5f 32 plan9 XADDL DX, 0(CX) -0fc111|223344556677885f5f5f5f5f5f 64 gnu xadd %edx,(%rcx) -0fc111|223344556677885f5f5f5f5f5f 64 intel xadd dword ptr [rcx], edx -0fc111|223344556677885f5f5f5f5f5f 64 plan9 XADDL DX, 0(CX) -0fc20000|11223344556677885f5f5f5f 32 intel cmpps xmm0, xmmword ptr [eax], 0x0 -0fc20000|11223344556677885f5f5f5f 32 plan9 CMPPS $0x0, 0(AX), X0 -0fc20000|11223344556677885f5f5f5f 64 gnu cmpeqps (%rax),%xmm0 -0fc20000|11223344556677885f5f5f5f 64 intel cmpps xmm0, xmmword ptr [rax], 0x0 -0fc20000|11223344556677885f5f5f5f 64 plan9 CMPPS $0x0, 0(AX), X0 -0fc311|223344556677885f5f5f5f5f5f 32 intel movnti dword ptr [ecx], edx -0fc311|223344556677885f5f5f5f5f5f 32 plan9 MOVNTIL DX, 0(CX) -0fc311|223344556677885f5f5f5f5f5f 64 gnu movnti %edx,(%rcx) -0fc311|223344556677885f5f5f5f5f5f 64 intel movnti dword ptr [rcx], edx -0fc311|223344556677885f5f5f5f5f5f 64 plan9 MOVNTIL DX, 0(CX) -0fc41122|3344556677885f5f5f5f5f5f 32 intel pinsrw mmx2, word ptr [ecx], 0x22 -0fc41122|3344556677885f5f5f5f5f5f 32 plan9 PINSRW $0x22, 0(CX), M2 -0fc41122|3344556677885f5f5f5f5f5f 64 gnu pinsrw $0x22,(%rcx),%mm2 -0fc41122|3344556677885f5f5f5f5f5f 64 intel pinsrw mmx2, word ptr [rcx], 0x22 -0fc41122|3344556677885f5f5f5f5f5f 64 plan9 PINSRW $0x22, 0(CX), M2 -0fc51122|3344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0fc51122|3344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0fc51122|3344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -0fc51122|3344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -0fc51122|3344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0fc5c011|223344556677885f5f5f5f5f 32 intel pextrw eax, mmx0, 0x11 -0fc5c011|223344556677885f5f5f5f5f 32 plan9 PEXTRW $0x11, M0, AX -0fc5c011|223344556677885f5f5f5f5f 64 gnu pextrw $0x11,%mm0,%eax -0fc5c011|223344556677885f5f5f5f5f 64 intel pextrw eax, mmx0, 0x11 -0fc5c011|223344556677885f5f5f5f5f 64 plan9 PEXTRW $0x11, M0, AX -0fc61122|3344556677885f5f5f5f5f5f 32 intel shufps xmm2, xmmword ptr [ecx], 0x22 -0fc61122|3344556677885f5f5f5f5f5f 32 plan9 SHUFPS $0x22, 0(CX), X2 -0fc61122|3344556677885f5f5f5f5f5f 64 gnu shufps $0x22,(%rcx),%xmm2 -0fc61122|3344556677885f5f5f5f5f5f 64 intel shufps xmm2, xmmword ptr [rcx], 0x22 -0fc61122|3344556677885f5f5f5f5f5f 64 plan9 SHUFPS $0x22, 0(CX), X2 -0fc708|11223344556677885f5f5f5f5f 32 intel cmpxchg8b qword ptr [eax] -0fc708|11223344556677885f5f5f5f5f 32 plan9 CMPXCHG8B 0(AX) -0fc708|11223344556677885f5f5f5f5f 64 gnu cmpxchg8b (%rax) -0fc708|11223344556677885f5f5f5f5f 64 intel cmpxchg8b qword ptr [rax] -0fc708|11223344556677885f5f5f5f5f 64 plan9 CMPXCHG8B 0(AX) -0fc718|11223344556677885f5f5f5f5f 32 intel xrstors ptr [eax] -0fc718|11223344556677885f5f5f5f5f 32 plan9 XRSTORS 0(AX) -0fc718|11223344556677885f5f5f5f5f 64 gnu xrstors (%rax) -0fc718|11223344556677885f5f5f5f5f 64 intel xrstors ptr [rax] -0fc718|11223344556677885f5f5f5f5f 64 plan9 XRSTORS 0(AX) -0fc720|11223344556677885f5f5f5f5f 32 intel xsavec ptr [eax] -0fc720|11223344556677885f5f5f5f5f 32 plan9 XSAVEC 0(AX) -0fc720|11223344556677885f5f5f5f5f 64 gnu xsavec (%rax) -0fc720|11223344556677885f5f5f5f5f 64 intel xsavec ptr [rax] -0fc720|11223344556677885f5f5f5f5f 64 plan9 XSAVEC 0(AX) -0fc728|11223344556677885f5f5f5f5f 32 intel xsaves ptr [eax] -0fc728|11223344556677885f5f5f5f5f 32 plan9 XSAVES 0(AX) -0fc728|11223344556677885f5f5f5f5f 64 gnu xsaves (%rax) -0fc728|11223344556677885f5f5f5f5f 64 intel xsaves ptr [rax] -0fc728|11223344556677885f5f5f5f5f 64 plan9 XSAVES 0(AX) -0fc730|11223344556677885f5f5f5f5f 32 intel error: unrecognized instruction -0fc730|11223344556677885f5f5f5f5f 32 plan9 error: unrecognized instruction -0fc730|11223344556677885f5f5f5f5f 64 gnu error: unrecognized instruction -0fc730|11223344556677885f5f5f5f5f 64 intel error: unrecognized instruction -0fc730|11223344556677885f5f5f5f5f 64 plan9 error: unrecognized instruction -0fc7f0|11223344556677885f5f5f5f5f 32 intel rdrand eax -0fc7f0|11223344556677885f5f5f5f5f 32 plan9 RDRAND AX -0fc7f0|11223344556677885f5f5f5f5f 64 gnu rdrand %eax -0fc7f0|11223344556677885f5f5f5f5f 64 intel rdrand eax -0fc7f0|11223344556677885f5f5f5f5f 64 plan9 RDRAND AX -0fc8|11223344556677885f5f5f5f5f5f 32 intel bswap eax -0fc8|11223344556677885f5f5f5f5f5f 32 plan9 BSWAP AX -0fc8|11223344556677885f5f5f5f5f5f 64 gnu bswap %eax -0fc8|11223344556677885f5f5f5f5f5f 64 intel bswap eax -0fc8|11223344556677885f5f5f5f5f5f 64 plan9 BSWAP AX -0fd0|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0fd0|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0fd0|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -0fd0|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -0fd0|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0fd111|223344556677885f5f5f5f5f5f 32 intel psrlw mmx2, qword ptr [ecx] -0fd111|223344556677885f5f5f5f5f5f 32 plan9 PSRLW 0(CX), M2 -0fd111|223344556677885f5f5f5f5f5f 64 gnu psrlw (%rcx),%mm2 -0fd111|223344556677885f5f5f5f5f5f 64 intel psrlw mmx2, qword ptr [rcx] -0fd111|223344556677885f5f5f5f5f5f 64 plan9 PSRLW 0(CX), M2 -0fd211|223344556677885f5f5f5f5f5f 32 intel psrld mmx2, qword ptr [ecx] -0fd211|223344556677885f5f5f5f5f5f 32 plan9 PSRLD 0(CX), M2 -0fd211|223344556677885f5f5f5f5f5f 64 gnu psrld (%rcx),%mm2 -0fd211|223344556677885f5f5f5f5f5f 64 intel psrld mmx2, qword ptr [rcx] -0fd211|223344556677885f5f5f5f5f5f 64 plan9 PSRLD 0(CX), M2 -0fd311|223344556677885f5f5f5f5f5f 32 intel psrlq mmx2, qword ptr [ecx] -0fd311|223344556677885f5f5f5f5f5f 32 plan9 PSRLQ 0(CX), M2 -0fd311|223344556677885f5f5f5f5f5f 64 gnu psrlq (%rcx),%mm2 -0fd311|223344556677885f5f5f5f5f5f 64 intel psrlq mmx2, qword ptr [rcx] -0fd311|223344556677885f5f5f5f5f5f 64 plan9 PSRLQ 0(CX), M2 -0fd411|223344556677885f5f5f5f5f5f 32 intel paddq mmx2, qword ptr [ecx] -0fd411|223344556677885f5f5f5f5f5f 32 plan9 PADDQ 0(CX), M2 -0fd411|223344556677885f5f5f5f5f5f 64 gnu paddq (%rcx),%mm2 -0fd411|223344556677885f5f5f5f5f5f 64 intel paddq mmx2, qword ptr [rcx] -0fd411|223344556677885f5f5f5f5f5f 64 plan9 PADDQ 0(CX), M2 -0fd511|223344556677885f5f5f5f5f5f 32 intel pmullw mmx2, qword ptr [ecx] -0fd511|223344556677885f5f5f5f5f5f 32 plan9 PMULLW 0(CX), M2 -0fd511|223344556677885f5f5f5f5f5f 64 gnu pmullw (%rcx),%mm2 -0fd511|223344556677885f5f5f5f5f5f 64 intel pmullw mmx2, qword ptr [rcx] -0fd511|223344556677885f5f5f5f5f5f 64 plan9 PMULLW 0(CX), M2 -0fd6|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0fd6|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0fd6|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -0fd6|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -0fd6|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0fd711|223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0fd711|223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0fd711|223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -0fd711|223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -0fd711|223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0fd7c0|11223344556677885f5f5f5f5f 32 intel pmovmskb eax, mmx0 -0fd7c0|11223344556677885f5f5f5f5f 32 plan9 PMOVMSKB M0, AX -0fd7c0|11223344556677885f5f5f5f5f 64 gnu pmovmskb %mm0,%eax -0fd7c0|11223344556677885f5f5f5f5f 64 intel pmovmskb eax, mmx0 -0fd7c0|11223344556677885f5f5f5f5f 64 plan9 PMOVMSKB M0, AX -0fd811|223344556677885f5f5f5f5f5f 32 intel psubusb mmx2, qword ptr [ecx] -0fd811|223344556677885f5f5f5f5f5f 32 plan9 PSUBUSB 0(CX), M2 -0fd811|223344556677885f5f5f5f5f5f 64 gnu psubusb (%rcx),%mm2 -0fd811|223344556677885f5f5f5f5f5f 64 intel psubusb mmx2, qword ptr [rcx] -0fd811|223344556677885f5f5f5f5f5f 64 plan9 PSUBUSB 0(CX), M2 -0fd911|223344556677885f5f5f5f5f5f 32 intel psubusw mmx2, qword ptr [ecx] -0fd911|223344556677885f5f5f5f5f5f 32 plan9 PSUBUSW 0(CX), M2 -0fd911|223344556677885f5f5f5f5f5f 64 gnu psubusw (%rcx),%mm2 -0fd911|223344556677885f5f5f5f5f5f 64 intel psubusw mmx2, qword ptr [rcx] -0fd911|223344556677885f5f5f5f5f5f 64 plan9 PSUBUSW 0(CX), M2 -0fda11|223344556677885f5f5f5f5f5f 32 intel pminub mmx2, qword ptr [ecx] -0fda11|223344556677885f5f5f5f5f5f 32 plan9 PMINUB 0(CX), M2 -0fda11|223344556677885f5f5f5f5f5f 64 gnu pminub (%rcx),%mm2 -0fda11|223344556677885f5f5f5f5f5f 64 intel pminub mmx2, qword ptr [rcx] -0fda11|223344556677885f5f5f5f5f5f 64 plan9 PMINUB 0(CX), M2 -0fdb11|223344556677885f5f5f5f5f5f 32 intel pand mmx2, qword ptr [ecx] -0fdb11|223344556677885f5f5f5f5f5f 32 plan9 PAND 0(CX), M2 -0fdb11|223344556677885f5f5f5f5f5f 64 gnu pand (%rcx),%mm2 -0fdb11|223344556677885f5f5f5f5f5f 64 intel pand mmx2, qword ptr [rcx] -0fdb11|223344556677885f5f5f5f5f5f 64 plan9 PAND 0(CX), M2 -0fdc11|223344556677885f5f5f5f5f5f 32 intel paddusb mmx2, qword ptr [ecx] -0fdc11|223344556677885f5f5f5f5f5f 32 plan9 PADDUSB 0(CX), M2 -0fdc11|223344556677885f5f5f5f5f5f 64 gnu paddusb (%rcx),%mm2 -0fdc11|223344556677885f5f5f5f5f5f 64 intel paddusb mmx2, qword ptr [rcx] -0fdc11|223344556677885f5f5f5f5f5f 64 plan9 PADDUSB 0(CX), M2 -0fdd11|223344556677885f5f5f5f5f5f 32 intel paddusw mmx2, qword ptr [ecx] -0fdd11|223344556677885f5f5f5f5f5f 32 plan9 PADDUSW 0(CX), M2 -0fdd11|223344556677885f5f5f5f5f5f 64 gnu paddusw (%rcx),%mm2 -0fdd11|223344556677885f5f5f5f5f5f 64 intel paddusw mmx2, qword ptr [rcx] -0fdd11|223344556677885f5f5f5f5f5f 64 plan9 PADDUSW 0(CX), M2 -0fde11|223344556677885f5f5f5f5f5f 32 intel pmaxub mmx2, qword ptr [ecx] -0fde11|223344556677885f5f5f5f5f5f 32 plan9 PMAXUB 0(CX), M2 -0fde11|223344556677885f5f5f5f5f5f 64 gnu pmaxub (%rcx),%mm2 -0fde11|223344556677885f5f5f5f5f5f 64 intel pmaxub mmx2, qword ptr [rcx] -0fde11|223344556677885f5f5f5f5f5f 64 plan9 PMAXUB 0(CX), M2 -0fdf11|223344556677885f5f5f5f5f5f 32 intel pandn mmx2, qword ptr [ecx] -0fdf11|223344556677885f5f5f5f5f5f 32 plan9 PANDN 0(CX), M2 -0fdf11|223344556677885f5f5f5f5f5f 64 gnu pandn (%rcx),%mm2 -0fdf11|223344556677885f5f5f5f5f5f 64 intel pandn mmx2, qword ptr [rcx] -0fdf11|223344556677885f5f5f5f5f5f 64 plan9 PANDN 0(CX), M2 -0fe011|223344556677885f5f5f5f5f5f 32 intel pavgb mmx2, qword ptr [ecx] -0fe011|223344556677885f5f5f5f5f5f 32 plan9 PAVGB 0(CX), M2 -0fe011|223344556677885f5f5f5f5f5f 64 gnu pavgb (%rcx),%mm2 -0fe011|223344556677885f5f5f5f5f5f 64 intel pavgb mmx2, qword ptr [rcx] -0fe011|223344556677885f5f5f5f5f5f 64 plan9 PAVGB 0(CX), M2 -0fe111|223344556677885f5f5f5f5f5f 32 intel psraw mmx2, qword ptr [ecx] -0fe111|223344556677885f5f5f5f5f5f 32 plan9 PSRAW 0(CX), M2 -0fe111|223344556677885f5f5f5f5f5f 64 gnu psraw (%rcx),%mm2 -0fe111|223344556677885f5f5f5f5f5f 64 intel psraw mmx2, qword ptr [rcx] -0fe111|223344556677885f5f5f5f5f5f 64 plan9 PSRAW 0(CX), M2 -0fe211|223344556677885f5f5f5f5f5f 32 intel psrad mmx2, qword ptr [ecx] -0fe211|223344556677885f5f5f5f5f5f 32 plan9 PSRAD 0(CX), M2 -0fe211|223344556677885f5f5f5f5f5f 64 gnu psrad (%rcx),%mm2 -0fe211|223344556677885f5f5f5f5f5f 64 intel psrad mmx2, qword ptr [rcx] -0fe211|223344556677885f5f5f5f5f5f 64 plan9 PSRAD 0(CX), M2 -0fe311|223344556677885f5f5f5f5f5f 32 intel pavgw mmx2, qword ptr [ecx] -0fe311|223344556677885f5f5f5f5f5f 32 plan9 PAVGW 0(CX), M2 -0fe311|223344556677885f5f5f5f5f5f 64 gnu pavgw (%rcx),%mm2 -0fe311|223344556677885f5f5f5f5f5f 64 intel pavgw mmx2, qword ptr [rcx] -0fe311|223344556677885f5f5f5f5f5f 64 plan9 PAVGW 0(CX), M2 -0fe411|223344556677885f5f5f5f5f5f 32 intel pmulhuw mmx2, qword ptr [ecx] -0fe411|223344556677885f5f5f5f5f5f 32 plan9 PMULHUW 0(CX), M2 -0fe411|223344556677885f5f5f5f5f5f 64 gnu pmulhuw (%rcx),%mm2 -0fe411|223344556677885f5f5f5f5f5f 64 intel pmulhuw mmx2, qword ptr [rcx] -0fe411|223344556677885f5f5f5f5f5f 64 plan9 PMULHUW 0(CX), M2 -0fe511|223344556677885f5f5f5f5f5f 32 intel pmulhw mmx2, qword ptr [ecx] -0fe511|223344556677885f5f5f5f5f5f 32 plan9 PMULHW 0(CX), M2 -0fe511|223344556677885f5f5f5f5f5f 64 gnu pmulhw (%rcx),%mm2 -0fe511|223344556677885f5f5f5f5f5f 64 intel pmulhw mmx2, qword ptr [rcx] -0fe511|223344556677885f5f5f5f5f5f 64 plan9 PMULHW 0(CX), M2 -0fe6|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0fe6|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0fe6|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -0fe6|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -0fe6|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0fe711|223344556677885f5f5f5f5f5f 32 intel movntq qword ptr [ecx], mmx2 -0fe711|223344556677885f5f5f5f5f5f 32 plan9 MOVNTQ M2, 0(CX) -0fe711|223344556677885f5f5f5f5f5f 64 gnu movntq %mm2,(%rcx) -0fe711|223344556677885f5f5f5f5f5f 64 intel movntq qword ptr [rcx], mmx2 -0fe711|223344556677885f5f5f5f5f5f 64 plan9 MOVNTQ M2, 0(CX) -0fe811|223344556677885f5f5f5f5f5f 32 intel psubsb mmx2, qword ptr [ecx] -0fe811|223344556677885f5f5f5f5f5f 32 plan9 PSUBSB 0(CX), M2 -0fe811|223344556677885f5f5f5f5f5f 64 gnu psubsb (%rcx),%mm2 -0fe811|223344556677885f5f5f5f5f5f 64 intel psubsb mmx2, qword ptr [rcx] -0fe811|223344556677885f5f5f5f5f5f 64 plan9 PSUBSB 0(CX), M2 -0fe911|223344556677885f5f5f5f5f5f 32 intel psubsw mmx2, qword ptr [ecx] -0fe911|223344556677885f5f5f5f5f5f 32 plan9 PSUBSW 0(CX), M2 -0fe911|223344556677885f5f5f5f5f5f 64 gnu psubsw (%rcx),%mm2 -0fe911|223344556677885f5f5f5f5f5f 64 intel psubsw mmx2, qword ptr [rcx] -0fe911|223344556677885f5f5f5f5f5f 64 plan9 PSUBSW 0(CX), M2 -0fea11|223344556677885f5f5f5f5f5f 32 intel pminsw mmx2, qword ptr [ecx] -0fea11|223344556677885f5f5f5f5f5f 32 plan9 PMINSW 0(CX), M2 -0fea11|223344556677885f5f5f5f5f5f 64 gnu pminsw (%rcx),%mm2 -0fea11|223344556677885f5f5f5f5f5f 64 intel pminsw mmx2, qword ptr [rcx] -0fea11|223344556677885f5f5f5f5f5f 64 plan9 PMINSW 0(CX), M2 -0feb11|223344556677885f5f5f5f5f5f 32 intel por mmx2, qword ptr [ecx] -0feb11|223344556677885f5f5f5f5f5f 32 plan9 POR 0(CX), M2 -0feb11|223344556677885f5f5f5f5f5f 64 gnu por (%rcx),%mm2 -0feb11|223344556677885f5f5f5f5f5f 64 intel por mmx2, qword ptr [rcx] -0feb11|223344556677885f5f5f5f5f5f 64 plan9 POR 0(CX), M2 -0fec11|223344556677885f5f5f5f5f5f 32 intel paddsb mmx2, qword ptr [ecx] -0fec11|223344556677885f5f5f5f5f5f 32 plan9 PADDSB 0(CX), M2 -0fec11|223344556677885f5f5f5f5f5f 64 gnu paddsb (%rcx),%mm2 -0fec11|223344556677885f5f5f5f5f5f 64 intel paddsb mmx2, qword ptr [rcx] -0fec11|223344556677885f5f5f5f5f5f 64 plan9 PADDSB 0(CX), M2 -0fed11|223344556677885f5f5f5f5f5f 32 intel paddsw mmx2, qword ptr [ecx] -0fed11|223344556677885f5f5f5f5f5f 32 plan9 PADDSW 0(CX), M2 -0fed11|223344556677885f5f5f5f5f5f 64 gnu paddsw (%rcx),%mm2 -0fed11|223344556677885f5f5f5f5f5f 64 intel paddsw mmx2, qword ptr [rcx] -0fed11|223344556677885f5f5f5f5f5f 64 plan9 PADDSW 0(CX), M2 -0fee11|223344556677885f5f5f5f5f5f 32 intel pmaxsw mmx2, qword ptr [ecx] -0fee11|223344556677885f5f5f5f5f5f 32 plan9 PMAXSW 0(CX), M2 -0fee11|223344556677885f5f5f5f5f5f 64 gnu pmaxsw (%rcx),%mm2 -0fee11|223344556677885f5f5f5f5f5f 64 intel pmaxsw mmx2, qword ptr [rcx] -0fee11|223344556677885f5f5f5f5f5f 64 plan9 PMAXSW 0(CX), M2 -0fef11|223344556677885f5f5f5f5f5f 32 intel pxor mmx2, qword ptr [ecx] -0fef11|223344556677885f5f5f5f5f5f 32 plan9 PXOR 0(CX), M2 -0fef11|223344556677885f5f5f5f5f5f 64 gnu pxor (%rcx),%mm2 -0fef11|223344556677885f5f5f5f5f5f 64 intel pxor mmx2, qword ptr [rcx] -0fef11|223344556677885f5f5f5f5f5f 64 plan9 PXOR 0(CX), M2 -0ff0|11223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0ff0|11223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0ff0|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -0ff0|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -0ff0|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0ff111|223344556677885f5f5f5f5f5f 32 intel psllw mmx2, qword ptr [ecx] -0ff111|223344556677885f5f5f5f5f5f 32 plan9 PSLLW 0(CX), M2 -0ff111|223344556677885f5f5f5f5f5f 64 gnu psllw (%rcx),%mm2 -0ff111|223344556677885f5f5f5f5f5f 64 intel psllw mmx2, qword ptr [rcx] -0ff111|223344556677885f5f5f5f5f5f 64 plan9 PSLLW 0(CX), M2 -0ff211|223344556677885f5f5f5f5f5f 32 intel pslld mmx2, qword ptr [ecx] -0ff211|223344556677885f5f5f5f5f5f 32 plan9 PSLLD 0(CX), M2 -0ff211|223344556677885f5f5f5f5f5f 64 gnu pslld (%rcx),%mm2 -0ff211|223344556677885f5f5f5f5f5f 64 intel pslld mmx2, qword ptr [rcx] -0ff211|223344556677885f5f5f5f5f5f 64 plan9 PSLLD 0(CX), M2 -0ff311|223344556677885f5f5f5f5f5f 32 intel psllq mmx2, qword ptr [ecx] -0ff311|223344556677885f5f5f5f5f5f 32 plan9 PSLLQ 0(CX), M2 -0ff311|223344556677885f5f5f5f5f5f 64 gnu psllq (%rcx),%mm2 -0ff311|223344556677885f5f5f5f5f5f 64 intel psllq mmx2, qword ptr [rcx] -0ff311|223344556677885f5f5f5f5f5f 64 plan9 PSLLQ 0(CX), M2 -0ff411|223344556677885f5f5f5f5f5f 32 intel pmuludq mmx2, qword ptr [ecx] -0ff411|223344556677885f5f5f5f5f5f 32 plan9 PMULUDQ 0(CX), M2 -0ff411|223344556677885f5f5f5f5f5f 64 gnu pmuludq (%rcx),%mm2 -0ff411|223344556677885f5f5f5f5f5f 64 intel pmuludq mmx2, qword ptr [rcx] -0ff411|223344556677885f5f5f5f5f5f 64 plan9 PMULUDQ 0(CX), M2 -0ff511|223344556677885f5f5f5f5f5f 32 intel pmaddwd mmx2, qword ptr [ecx] -0ff511|223344556677885f5f5f5f5f5f 32 plan9 PMADDWD 0(CX), M2 -0ff511|223344556677885f5f5f5f5f5f 64 gnu pmaddwd (%rcx),%mm2 -0ff511|223344556677885f5f5f5f5f5f 64 intel pmaddwd mmx2, qword ptr [rcx] -0ff511|223344556677885f5f5f5f5f5f 64 plan9 PMADDWD 0(CX), M2 -0ff611|223344556677885f5f5f5f5f5f 32 intel psadbw mmx2, qword ptr [ecx] -0ff611|223344556677885f5f5f5f5f5f 32 plan9 PSADBW 0(CX), M2 -0ff611|223344556677885f5f5f5f5f5f 64 gnu psadbw (%rcx),%mm2 -0ff611|223344556677885f5f5f5f5f5f 64 intel psadbw mmx2, qword ptr [rcx] -0ff611|223344556677885f5f5f5f5f5f 64 plan9 PSADBW 0(CX), M2 -0ff711|223344556677885f5f5f5f5f5f 32 intel error: unrecognized instruction -0ff711|223344556677885f5f5f5f5f5f 32 plan9 error: unrecognized instruction -0ff711|223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -0ff711|223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -0ff711|223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -0ff7c0|11223344556677885f5f5f5f5f 32 intel maskmovq mmx0, mmx0 -0ff7c0|11223344556677885f5f5f5f5f 32 plan9 MASKMOVQ M0, M0 -0ff7c0|11223344556677885f5f5f5f5f 64 gnu maskmovq %mm0,%mm0 -0ff7c0|11223344556677885f5f5f5f5f 64 intel maskmovq mmx0, mmx0 -0ff7c0|11223344556677885f5f5f5f5f 64 plan9 MASKMOVQ M0, M0 -0ff811|223344556677885f5f5f5f5f5f 32 intel psubb mmx2, qword ptr [ecx] -0ff811|223344556677885f5f5f5f5f5f 32 plan9 PSUBB 0(CX), M2 -0ff811|223344556677885f5f5f5f5f5f 64 gnu psubb (%rcx),%mm2 -0ff811|223344556677885f5f5f5f5f5f 64 intel psubb mmx2, qword ptr [rcx] -0ff811|223344556677885f5f5f5f5f5f 64 plan9 PSUBB 0(CX), M2 -0ff911|223344556677885f5f5f5f5f5f 32 intel psubw mmx2, qword ptr [ecx] -0ff911|223344556677885f5f5f5f5f5f 32 plan9 PSUBW 0(CX), M2 -0ff911|223344556677885f5f5f5f5f5f 64 gnu psubw (%rcx),%mm2 -0ff911|223344556677885f5f5f5f5f5f 64 intel psubw mmx2, qword ptr [rcx] -0ff911|223344556677885f5f5f5f5f5f 64 plan9 PSUBW 0(CX), M2 -0ffa11|223344556677885f5f5f5f5f5f 32 intel psubd mmx2, qword ptr [ecx] -0ffa11|223344556677885f5f5f5f5f5f 32 plan9 PSUBD 0(CX), M2 -0ffa11|223344556677885f5f5f5f5f5f 64 gnu psubd (%rcx),%mm2 -0ffa11|223344556677885f5f5f5f5f5f 64 intel psubd mmx2, qword ptr [rcx] -0ffa11|223344556677885f5f5f5f5f5f 64 plan9 PSUBD 0(CX), M2 -0ffb11|223344556677885f5f5f5f5f5f 32 intel psubq mmx2, qword ptr [ecx] -0ffb11|223344556677885f5f5f5f5f5f 32 plan9 PSUBQ 0(CX), M2 -0ffb11|223344556677885f5f5f5f5f5f 64 gnu psubq (%rcx),%mm2 -0ffb11|223344556677885f5f5f5f5f5f 64 intel psubq mmx2, qword ptr [rcx] -0ffb11|223344556677885f5f5f5f5f5f 64 plan9 PSUBQ 0(CX), M2 -0ffc11|223344556677885f5f5f5f5f5f 32 intel paddb mmx2, qword ptr [ecx] -0ffc11|223344556677885f5f5f5f5f5f 32 plan9 PADDB 0(CX), M2 -0ffc11|223344556677885f5f5f5f5f5f 64 gnu paddb (%rcx),%mm2 -0ffc11|223344556677885f5f5f5f5f5f 64 intel paddb mmx2, qword ptr [rcx] -0ffc11|223344556677885f5f5f5f5f5f 64 plan9 PADDB 0(CX), M2 -0ffd11|223344556677885f5f5f5f5f5f 32 intel paddw mmx2, qword ptr [ecx] -0ffd11|223344556677885f5f5f5f5f5f 32 plan9 PADDW 0(CX), M2 -0ffd11|223344556677885f5f5f5f5f5f 64 gnu paddw (%rcx),%mm2 -0ffd11|223344556677885f5f5f5f5f5f 64 intel paddw mmx2, qword ptr [rcx] -0ffd11|223344556677885f5f5f5f5f5f 64 plan9 PADDW 0(CX), M2 -0ffe11|223344556677885f5f5f5f5f5f 32 intel paddd mmx2, qword ptr [ecx] -0ffe11|223344556677885f5f5f5f5f5f 32 plan9 PADDD 0(CX), M2 -0ffe11|223344556677885f5f5f5f5f5f 64 gnu paddd (%rcx),%mm2 -0ffe11|223344556677885f5f5f5f5f5f 64 intel paddd mmx2, qword ptr [rcx] -0ffe11|223344556677885f5f5f5f5f5f 64 plan9 PADDD 0(CX), M2 -1011|223344556677885f5f5f5f5f5f5f 32 intel adc byte ptr [ecx], dl -1011|223344556677885f5f5f5f5f5f5f 32 plan9 ADCB DL, 0(CX) -1011|223344556677885f5f5f5f5f5f5f 64 gnu adc %dl,(%rcx) -1011|223344556677885f5f5f5f5f5f5f 64 intel adc byte ptr [rcx], dl -1011|223344556677885f5f5f5f5f5f5f 64 plan9 ADCB DL, 0(CX) -1111|223344556677885f5f5f5f5f5f5f 32 intel adc dword ptr [ecx], edx -1111|223344556677885f5f5f5f5f5f5f 32 plan9 ADCL DX, 0(CX) -1111|223344556677885f5f5f5f5f5f5f 64 gnu adc %edx,(%rcx) -1111|223344556677885f5f5f5f5f5f5f 64 intel adc dword ptr [rcx], edx -1111|223344556677885f5f5f5f5f5f5f 64 plan9 ADCL DX, 0(CX) -1211|223344556677885f5f5f5f5f5f5f 32 intel adc dl, byte ptr [ecx] -1211|223344556677885f5f5f5f5f5f5f 32 plan9 ADCB 0(CX), DL -1211|223344556677885f5f5f5f5f5f5f 64 gnu adc (%rcx),%dl -1211|223344556677885f5f5f5f5f5f5f 64 intel adc dl, byte ptr [rcx] -1211|223344556677885f5f5f5f5f5f5f 64 plan9 ADCB 0(CX), DL -1311|223344556677885f5f5f5f5f5f5f 32 intel adc edx, dword ptr [ecx] -1311|223344556677885f5f5f5f5f5f5f 32 plan9 ADCL 0(CX), DX -1311|223344556677885f5f5f5f5f5f5f 64 gnu adc (%rcx),%edx -1311|223344556677885f5f5f5f5f5f5f 64 intel adc edx, dword ptr [rcx] -1311|223344556677885f5f5f5f5f5f5f 64 plan9 ADCL 0(CX), DX -1411|223344556677885f5f5f5f5f5f5f 32 intel adc al, 0x11 -1411|223344556677885f5f5f5f5f5f5f 32 plan9 ADCL $0x11, AL -1411|223344556677885f5f5f5f5f5f5f 64 gnu adc $0x11,%al -1411|223344556677885f5f5f5f5f5f5f 64 intel adc al, 0x11 -1411|223344556677885f5f5f5f5f5f5f 64 plan9 ADCL $0x11, AL -1511223344|556677885f5f5f5f5f5f5f 32 intel adc eax, 0x44332211 -1511223344|556677885f5f5f5f5f5f5f 32 plan9 ADCL $0x44332211, AX -1511223344|556677885f5f5f5f5f5f5f 64 gnu adc $0x44332211,%eax -1511223344|556677885f5f5f5f5f5f5f 64 intel adc eax, 0x44332211 -1511223344|556677885f5f5f5f5f5f5f 64 plan9 ADCL $0x44332211, AX -16|11223344556677885f5f5f5f5f5f5f 32 intel push ss -16|11223344556677885f5f5f5f5f5f5f 32 plan9 PUSHL SS -16|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction -16|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction -16|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction -17|11223344556677885f5f5f5f5f5f5f 32 intel pop ss -17|11223344556677885f5f5f5f5f5f5f 32 plan9 POPL SS -17|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction -17|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction -17|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction -1811|223344556677885f5f5f5f5f5f5f 32 intel sbb byte ptr [ecx], dl -1811|223344556677885f5f5f5f5f5f5f 32 plan9 SBBB DL, 0(CX) -1811|223344556677885f5f5f5f5f5f5f 64 gnu sbb %dl,(%rcx) -1811|223344556677885f5f5f5f5f5f5f 64 intel sbb byte ptr [rcx], dl -1811|223344556677885f5f5f5f5f5f5f 64 plan9 SBBB DL, 0(CX) -1911|223344556677885f5f5f5f5f5f5f 32 intel sbb dword ptr [ecx], edx -1911|223344556677885f5f5f5f5f5f5f 32 plan9 SBBL DX, 0(CX) -1911|223344556677885f5f5f5f5f5f5f 64 gnu sbb %edx,(%rcx) -1911|223344556677885f5f5f5f5f5f5f 64 intel sbb dword ptr [rcx], edx -1911|223344556677885f5f5f5f5f5f5f 64 plan9 SBBL DX, 0(CX) -1a11|223344556677885f5f5f5f5f5f5f 32 intel sbb dl, byte ptr [ecx] -1a11|223344556677885f5f5f5f5f5f5f 32 plan9 SBBB 0(CX), DL -1a11|223344556677885f5f5f5f5f5f5f 64 gnu sbb (%rcx),%dl -1a11|223344556677885f5f5f5f5f5f5f 64 intel sbb dl, byte ptr [rcx] -1a11|223344556677885f5f5f5f5f5f5f 64 plan9 SBBB 0(CX), DL -1b11|223344556677885f5f5f5f5f5f5f 32 intel sbb edx, dword ptr [ecx] -1b11|223344556677885f5f5f5f5f5f5f 32 plan9 SBBL 0(CX), DX -1b11|223344556677885f5f5f5f5f5f5f 64 gnu sbb (%rcx),%edx -1b11|223344556677885f5f5f5f5f5f5f 64 intel sbb edx, dword ptr [rcx] -1b11|223344556677885f5f5f5f5f5f5f 64 plan9 SBBL 0(CX), DX -1c11|223344556677885f5f5f5f5f5f5f 32 intel sbb al, 0x11 -1c11|223344556677885f5f5f5f5f5f5f 32 plan9 SBBL $0x11, AL -1c11|223344556677885f5f5f5f5f5f5f 64 gnu sbb $0x11,%al -1c11|223344556677885f5f5f5f5f5f5f 64 intel sbb al, 0x11 -1c11|223344556677885f5f5f5f5f5f5f 64 plan9 SBBL $0x11, AL -1d11223344|556677885f5f5f5f5f5f5f 32 intel sbb eax, 0x44332211 -1d11223344|556677885f5f5f5f5f5f5f 32 plan9 SBBL $0x44332211, AX -1d11223344|556677885f5f5f5f5f5f5f 64 gnu sbb $0x44332211,%eax -1d11223344|556677885f5f5f5f5f5f5f 64 intel sbb eax, 0x44332211 -1d11223344|556677885f5f5f5f5f5f5f 64 plan9 SBBL $0x44332211, AX -1e|11223344556677885f5f5f5f5f5f5f 32 intel push ds -1e|11223344556677885f5f5f5f5f5f5f 32 plan9 PUSHL DS -1e|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction -1e|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction -1e|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction -1f|11223344556677885f5f5f5f5f5f5f 32 intel pop ds -1f|11223344556677885f5f5f5f5f5f5f 32 plan9 POPL DS -1f|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction -1f|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction -1f|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction -2011|223344556677885f5f5f5f5f5f5f 32 intel and byte ptr [ecx], dl -2011|223344556677885f5f5f5f5f5f5f 32 plan9 ANDB DL, 0(CX) -2011|223344556677885f5f5f5f5f5f5f 64 gnu and %dl,(%rcx) -2011|223344556677885f5f5f5f5f5f5f 64 intel and byte ptr [rcx], dl -2011|223344556677885f5f5f5f5f5f5f 64 plan9 ANDB DL, 0(CX) -2111|223344556677885f5f5f5f5f5f5f 32 intel and dword ptr [ecx], edx -2111|223344556677885f5f5f5f5f5f5f 32 plan9 ANDL DX, 0(CX) -2111|223344556677885f5f5f5f5f5f5f 64 gnu and %edx,(%rcx) -2111|223344556677885f5f5f5f5f5f5f 64 intel and dword ptr [rcx], edx -2111|223344556677885f5f5f5f5f5f5f 64 plan9 ANDL DX, 0(CX) -2211|223344556677885f5f5f5f5f5f5f 32 intel and dl, byte ptr [ecx] -2211|223344556677885f5f5f5f5f5f5f 32 plan9 ANDB 0(CX), DL -2211|223344556677885f5f5f5f5f5f5f 64 gnu and (%rcx),%dl -2211|223344556677885f5f5f5f5f5f5f 64 intel and dl, byte ptr [rcx] -2211|223344556677885f5f5f5f5f5f5f 64 plan9 ANDB 0(CX), DL -2311|223344556677885f5f5f5f5f5f5f 32 intel and edx, dword ptr [ecx] -2311|223344556677885f5f5f5f5f5f5f 32 plan9 ANDL 0(CX), DX -2311|223344556677885f5f5f5f5f5f5f 64 gnu and (%rcx),%edx -2311|223344556677885f5f5f5f5f5f5f 64 intel and edx, dword ptr [rcx] -2311|223344556677885f5f5f5f5f5f5f 64 plan9 ANDL 0(CX), DX -2411|223344556677885f5f5f5f5f5f5f 32 intel and al, 0x11 -2411|223344556677885f5f5f5f5f5f5f 32 plan9 ANDL $0x11, AL -2411|223344556677885f5f5f5f5f5f5f 64 gnu and $0x11,%al -2411|223344556677885f5f5f5f5f5f5f 64 intel and al, 0x11 -2411|223344556677885f5f5f5f5f5f5f 64 plan9 ANDL $0x11, AL -2511223344|556677885f5f5f5f5f5f5f 32 intel and eax, 0x44332211 -2511223344|556677885f5f5f5f5f5f5f 32 plan9 ANDL $0x44332211, AX -2511223344|556677885f5f5f5f5f5f5f 64 gnu and $0x44332211,%eax -2511223344|556677885f5f5f5f5f5f5f 64 intel and eax, 0x44332211 -2511223344|556677885f5f5f5f5f5f5f 64 plan9 ANDL $0x44332211, AX -266e|11223344556677885f5f5f5f5f5f 32 intel outsb es -266e|11223344556677885f5f5f5f5f5f 32 plan9 OUTSB ES:0(SI), DX -266e|11223344556677885f5f5f5f5f5f 64 gnu outsb %ds:%es:(%rsi),(%dx) -266e|11223344556677885f5f5f5f5f5f 64 intel outsb -266e|11223344556677885f5f5f5f5f5f 64 plan9 ES OUTSB DS:0(SI), DX -267011|223344556677885f5f5f5f5f5f 32 intel jo .+0x11 -267011|223344556677885f5f5f5f5f5f 32 plan9 ES JO .+17 -267011|223344556677885f5f5f5f5f5f 64 gnu es jo .+0x11 -267011|223344556677885f5f5f5f5f5f 64 intel jo .+0x11 -267011|223344556677885f5f5f5f5f5f 64 plan9 ES JO .+17 -26a01122334455667788|5f5f5f5f5f5f 64 gnu mov %es:-0x778899aabbccddef,%al -26a01122334455667788|5f5f5f5f5f5f 64 intel mov al, byte ptr [0x8877665544332211] -26a01122334455667788|5f5f5f5f5f5f 64 plan9 ES MOVB -0x778899aabbccddef, AL -26a011223344|556677885f5f5f5f5f5f 32 intel mov al, byte ptr es:[0x44332211] -26a011223344|556677885f5f5f5f5f5f 32 plan9 MOVB ES:0x44332211, AL -26|8211223344556677885f5f5f5f5f5f 32 intel es -26|8211223344556677885f5f5f5f5f5f 32 plan9 ES Op(0) -26|8211223344556677885f5f5f5f5f5f 64 gnu es -26|8211223344556677885f5f5f5f5f5f 64 intel es -26|8211223344556677885f5f5f5f5f5f 64 plan9 ES Op(0) -27|11223344556677885f5f5f5f5f5f5f 32 intel daa -27|11223344556677885f5f5f5f5f5f5f 32 plan9 DAA -27|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction -27|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction -27|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction -2811|223344556677885f5f5f5f5f5f5f 32 intel sub byte ptr [ecx], dl -2811|223344556677885f5f5f5f5f5f5f 32 plan9 SUBB DL, 0(CX) -2811|223344556677885f5f5f5f5f5f5f 64 gnu sub %dl,(%rcx) -2811|223344556677885f5f5f5f5f5f5f 64 intel sub byte ptr [rcx], dl -2811|223344556677885f5f5f5f5f5f5f 64 plan9 SUBB DL, 0(CX) -2911|223344556677885f5f5f5f5f5f5f 32 intel sub dword ptr [ecx], edx -2911|223344556677885f5f5f5f5f5f5f 32 plan9 SUBL DX, 0(CX) -2911|223344556677885f5f5f5f5f5f5f 64 gnu sub %edx,(%rcx) -2911|223344556677885f5f5f5f5f5f5f 64 intel sub dword ptr [rcx], edx -2911|223344556677885f5f5f5f5f5f5f 64 plan9 SUBL DX, 0(CX) -2a11|223344556677885f5f5f5f5f5f5f 32 intel sub dl, byte ptr [ecx] -2a11|223344556677885f5f5f5f5f5f5f 32 plan9 SUBB 0(CX), DL -2a11|223344556677885f5f5f5f5f5f5f 64 gnu sub (%rcx),%dl -2a11|223344556677885f5f5f5f5f5f5f 64 intel sub dl, byte ptr [rcx] -2a11|223344556677885f5f5f5f5f5f5f 64 plan9 SUBB 0(CX), DL -2b11|223344556677885f5f5f5f5f5f5f 32 intel sub edx, dword ptr [ecx] -2b11|223344556677885f5f5f5f5f5f5f 32 plan9 SUBL 0(CX), DX -2b11|223344556677885f5f5f5f5f5f5f 64 gnu sub (%rcx),%edx -2b11|223344556677885f5f5f5f5f5f5f 64 intel sub edx, dword ptr [rcx] -2b11|223344556677885f5f5f5f5f5f5f 64 plan9 SUBL 0(CX), DX -2c11|223344556677885f5f5f5f5f5f5f 32 intel sub al, 0x11 -2c11|223344556677885f5f5f5f5f5f5f 32 plan9 SUBL $0x11, AL -2c11|223344556677885f5f5f5f5f5f5f 64 gnu sub $0x11,%al -2c11|223344556677885f5f5f5f5f5f5f 64 intel sub al, 0x11 -2c11|223344556677885f5f5f5f5f5f5f 64 plan9 SUBL $0x11, AL -2d11223344|556677885f5f5f5f5f5f5f 32 intel sub eax, 0x44332211 -2d11223344|556677885f5f5f5f5f5f5f 32 plan9 SUBL $0x44332211, AX -2d11223344|556677885f5f5f5f5f5f5f 64 gnu sub $0x44332211,%eax -2d11223344|556677885f5f5f5f5f5f5f 64 intel sub eax, 0x44332211 -2d11223344|556677885f5f5f5f5f5f5f 64 plan9 SUBL $0x44332211, AX -2f|11223344556677885f5f5f5f5f5f5f 32 intel das -2f|11223344556677885f5f5f5f5f5f5f 32 plan9 DAS -2f|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction -2f|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction -2f|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction -3011|223344556677885f5f5f5f5f5f5f 32 intel xor byte ptr [ecx], dl -3011|223344556677885f5f5f5f5f5f5f 32 plan9 XORB DL, 0(CX) -3011|223344556677885f5f5f5f5f5f5f 64 gnu xor %dl,(%rcx) -3011|223344556677885f5f5f5f5f5f5f 64 intel xor byte ptr [rcx], dl -3011|223344556677885f5f5f5f5f5f5f 64 plan9 XORB DL, 0(CX) -3111|223344556677885f5f5f5f5f5f5f 32 intel xor dword ptr [ecx], edx -3111|223344556677885f5f5f5f5f5f5f 32 plan9 XORL DX, 0(CX) -3111|223344556677885f5f5f5f5f5f5f 64 gnu xor %edx,(%rcx) -3111|223344556677885f5f5f5f5f5f5f 64 intel xor dword ptr [rcx], edx -3111|223344556677885f5f5f5f5f5f5f 64 plan9 XORL DX, 0(CX) -3211|223344556677885f5f5f5f5f5f5f 32 intel xor dl, byte ptr [ecx] -3211|223344556677885f5f5f5f5f5f5f 32 plan9 XORB 0(CX), DL -3211|223344556677885f5f5f5f5f5f5f 64 gnu xor (%rcx),%dl -3211|223344556677885f5f5f5f5f5f5f 64 intel xor dl, byte ptr [rcx] -3211|223344556677885f5f5f5f5f5f5f 64 plan9 XORB 0(CX), DL -3311|223344556677885f5f5f5f5f5f5f 32 intel xor edx, dword ptr [ecx] -3311|223344556677885f5f5f5f5f5f5f 32 plan9 XORL 0(CX), DX -3311|223344556677885f5f5f5f5f5f5f 64 gnu xor (%rcx),%edx -3311|223344556677885f5f5f5f5f5f5f 64 intel xor edx, dword ptr [rcx] -3311|223344556677885f5f5f5f5f5f5f 64 plan9 XORL 0(CX), DX -3411|223344556677885f5f5f5f5f5f5f 32 intel xor al, 0x11 -3411|223344556677885f5f5f5f5f5f5f 32 plan9 XORL $0x11, AL -3411|223344556677885f5f5f5f5f5f5f 64 gnu xor $0x11,%al -3411|223344556677885f5f5f5f5f5f5f 64 intel xor al, 0x11 -3411|223344556677885f5f5f5f5f5f5f 64 plan9 XORL $0x11, AL -3511223344|556677885f5f5f5f5f5f5f 32 intel xor eax, 0x44332211 -3511223344|556677885f5f5f5f5f5f5f 32 plan9 XORL $0x44332211, AX -3511223344|556677885f5f5f5f5f5f5f 64 gnu xor $0x44332211,%eax -3511223344|556677885f5f5f5f5f5f5f 64 intel xor eax, 0x44332211 -3511223344|556677885f5f5f5f5f5f5f 64 plan9 XORL $0x44332211, AX -3667f3660f2ac0|11223344556677885f 32 intel addr16 cvtsi2ss xmm0, eax -3667f3660f2ac0|11223344556677885f 32 plan9 CVTSI2SSW AX, X0 -3667f3660f2ac0|11223344556677885f 64 gnu ss addr32 cvtsi2ss %ax,%xmm0 -3667f3660f2ac0|11223344556677885f 64 intel addr32 cvtsi2ss xmm0, eax -3667f3660f2ac0|11223344556677885f 64 plan9 CVTSI2SSW AX, X0 -36|67f3660ff7c011223344556677885f 64 gnu ss -36|f0f2f33e66f066f2f33e3666818411 32 intel ss -36|f0f2f33e66f066f2f33e3666818411 32 plan9 SS Op(0) -36|f0f2f33e66f066f2f33e3666818411 64 gnu ss -36|f0f2f33e66f066f2f33e3666818411 64 intel ss -36|f0f2f33e66f066f2f33e3666818411 64 plan9 SS Op(0) -36|f2f33ef0f78411223344556677885f 32 intel ss -36|f2f33ef0f78411223344556677885f 32 plan9 SS Op(0) -36|f2f33ef0f78411223344556677885f 64 gnu ss -36|f2f33ef0f78411223344556677885f 64 intel ss -36|f2f33ef0f78411223344556677885f 64 plan9 SS Op(0) -37|11223344556677885f5f5f5f5f5f5f 32 intel aaa -37|11223344556677885f5f5f5f5f5f5f 32 plan9 AAA -37|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction -37|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction -37|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction -3811|223344556677885f5f5f5f5f5f5f 32 intel cmp byte ptr [ecx], dl -3811|223344556677885f5f5f5f5f5f5f 32 plan9 CMPB DL, 0(CX) -3811|223344556677885f5f5f5f5f5f5f 64 gnu cmp %dl,(%rcx) -3811|223344556677885f5f5f5f5f5f5f 64 intel cmp byte ptr [rcx], dl -3811|223344556677885f5f5f5f5f5f5f 64 plan9 CMPB DL, 0(CX) -3911|223344556677885f5f5f5f5f5f5f 32 intel cmp dword ptr [ecx], edx -3911|223344556677885f5f5f5f5f5f5f 32 plan9 CMPL DX, 0(CX) -3911|223344556677885f5f5f5f5f5f5f 64 gnu cmp %edx,(%rcx) -3911|223344556677885f5f5f5f5f5f5f 64 intel cmp dword ptr [rcx], edx -3911|223344556677885f5f5f5f5f5f5f 64 plan9 CMPL DX, 0(CX) -3a11|223344556677885f5f5f5f5f5f5f 32 intel cmp dl, byte ptr [ecx] -3a11|223344556677885f5f5f5f5f5f5f 32 plan9 CMPB 0(CX), DL -3a11|223344556677885f5f5f5f5f5f5f 64 gnu cmp (%rcx),%dl -3a11|223344556677885f5f5f5f5f5f5f 64 intel cmp dl, byte ptr [rcx] -3a11|223344556677885f5f5f5f5f5f5f 64 plan9 CMPB 0(CX), DL -3b11|223344556677885f5f5f5f5f5f5f 32 intel cmp edx, dword ptr [ecx] -3b11|223344556677885f5f5f5f5f5f5f 32 plan9 CMPL 0(CX), DX -3b11|223344556677885f5f5f5f5f5f5f 64 gnu cmp (%rcx),%edx -3b11|223344556677885f5f5f5f5f5f5f 64 intel cmp edx, dword ptr [rcx] -3b11|223344556677885f5f5f5f5f5f5f 64 plan9 CMPL 0(CX), DX -3c11|223344556677885f5f5f5f5f5f5f 32 intel cmp al, 0x11 -3c11|223344556677885f5f5f5f5f5f5f 32 plan9 CMPL $0x11, AL -3c11|223344556677885f5f5f5f5f5f5f 64 gnu cmp $0x11,%al -3c11|223344556677885f5f5f5f5f5f5f 64 intel cmp al, 0x11 -3c11|223344556677885f5f5f5f5f5f5f 64 plan9 CMPL $0x11, AL -3d11223344|556677885f5f5f5f5f5f5f 32 intel cmp eax, 0x44332211 -3d11223344|556677885f5f5f5f5f5f5f 32 plan9 CMPL $0x44332211, AX -3d11223344|556677885f5f5f5f5f5f5f 64 gnu cmp $0x44332211,%eax -3d11223344|556677885f5f5f5f5f5f5f 64 intel cmp eax, 0x44332211 -3d11223344|556677885f5f5f5f5f5f5f 64 plan9 CMPL $0x44332211, AX -3e67e011|223344556677885f5f5f5f5f 32 intel addr16 loopne .+0x11 -3e67e011|223344556677885f5f5f5f5f 32 plan9 LOOPNE .+17 -3e67e011|223344556677885f5f5f5f5f 64 gnu loopne,pt .+0x11 -3e67e011|223344556677885f5f5f5f5f 64 intel addr32 loopne .+0x11 -3e67e011|223344556677885f5f5f5f5f 64 plan9 LOOPNE .+17 -3ef367660f38f011|223344556677885f 32 intel movbe dx, word ptr [bx+di*1] -3ef367660f38f011|223344556677885f 32 plan9 REP; MOVBE DS:0(BX)(DI*1), DX -3ef367660f38f011|223344556677885f 64 gnu rep movbe %ds:(%ecx),%dx -3ef367660f38f011|223344556677885f 64 intel movbe dx, word ptr [ecx] -3ef367660f38f011|223344556677885f 64 plan9 REP; MOVBE 0(CX), DX -3f|11223344556677885f5f5f5f5f5f5f 32 intel aas -3f|11223344556677885f5f5f5f5f5f5f 32 plan9 AAS -3f|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction -3f|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction -3f|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction -4040|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -4040|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -4040|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -4048|11223344556677885f5f5f5f5f5f 64 gnu error: unrecognized instruction -4048|11223344556677885f5f5f5f5f5f 64 intel error: unrecognized instruction -4048|11223344556677885f5f5f5f5f5f 64 plan9 error: unrecognized instruction -40|11223344556677885f5f5f5f5f5f5f 32 intel inc eax -40|11223344556677885f5f5f5f5f5f5f 32 plan9 INCL AX -480100|11223344556677885f5f5f5f5f 64 gnu add %rax,(%rax) -480100|11223344556677885f5f5f5f5f 64 intel add qword ptr [rax], rax -480100|11223344556677885f5f5f5f5f 64 plan9 ADDQ AX, 0(AX) -480311|223344556677885f5f5f5f5f5f 64 gnu add (%rcx),%rdx -480311|223344556677885f5f5f5f5f5f 64 intel add rdx, qword ptr [rcx] -480311|223344556677885f5f5f5f5f5f 64 plan9 ADDQ 0(CX), DX -480511223344|556677885f5f5f5f5f5f 64 gnu add $0x44332211,%rax -480511223344|556677885f5f5f5f5f5f 64 intel add rax, 0x44332211 -480511223344|556677885f5f5f5f5f5f 64 plan9 ADDQ $0x44332211, AX -480911|223344556677885f5f5f5f5f5f 64 gnu or %rdx,(%rcx) -480911|223344556677885f5f5f5f5f5f 64 intel or qword ptr [rcx], rdx -480911|223344556677885f5f5f5f5f5f 64 plan9 ORQ DX, 0(CX) -480b11|223344556677885f5f5f5f5f5f 64 gnu or (%rcx),%rdx -480b11|223344556677885f5f5f5f5f5f 64 intel or rdx, qword ptr [rcx] -480b11|223344556677885f5f5f5f5f5f 64 plan9 ORQ 0(CX), DX -480d11223344|556677885f5f5f5f5f5f 64 gnu or $0x44332211,%rax -480d11223344|556677885f5f5f5f5f5f 64 intel or rax, 0x44332211 -480d11223344|556677885f5f5f5f5f5f 64 plan9 ORQ $0x44332211, AX -480f0000|11223344556677885f5f5f5f 64 gnu sldt (%rax) -480f0000|11223344556677885f5f5f5f 64 intel sldt word ptr [rax] -480f0000|11223344556677885f5f5f5f 64 plan9 SLDT 0(AX) -480f0008|11223344556677885f5f5f5f 64 gnu str (%rax) -480f0008|11223344556677885f5f5f5f 64 intel str word ptr [rax] -480f0008|11223344556677885f5f5f5f 64 plan9 STR 0(AX) -480f0120|11223344556677885f5f5f5f 64 gnu smsw (%rax) -480f0120|11223344556677885f5f5f5f 64 intel smsw word ptr [rax] -480f0120|11223344556677885f5f5f5f 64 plan9 SMSW 0(AX) -480f0211|223344556677885f5f5f5f5f 64 gnu lar (%rcx),%rdx -480f0211|223344556677885f5f5f5f5f 64 intel lar rdx, word ptr [rcx] -480f0211|223344556677885f5f5f5f5f 64 plan9 LAR 0(CX), DX -480f0311|223344556677885f5f5f5f5f 64 gnu lsl (%rcx),%rdx -480f0311|223344556677885f5f5f5f5f 64 intel lsl rdx, word ptr [rcx] -480f0311|223344556677885f5f5f5f5f 64 plan9 LSL 0(CX), DX -480f35|11223344556677885f5f5f5f5f 64 gnu sysexit -480f35|11223344556677885f5f5f5f5f 64 intel sysexit -480f35|11223344556677885f5f5f5f5f 64 plan9 SYSEXIT -480f38f011|223344556677885f5f5f5f 64 gnu movbe (%rcx),%rdx -480f38f011|223344556677885f5f5f5f 64 intel movbe rdx, qword ptr [rcx] -480f38f011|223344556677885f5f5f5f 64 plan9 MOVBE 0(CX), DX -480f38f111|223344556677885f5f5f5f 64 gnu movbe %rdx,(%rcx) -480f38f111|223344556677885f5f5f5f 64 intel movbe qword ptr [rcx], rdx -480f38f111|223344556677885f5f5f5f 64 plan9 MOVBE DX, 0(CX) -480f4011|223344556677885f5f5f5f5f 64 gnu cmovo (%rcx),%rdx -480f4011|223344556677885f5f5f5f5f 64 intel cmovo rdx, qword ptr [rcx] -480f4011|223344556677885f5f5f5f5f 64 plan9 CMOVO 0(CX), DX -480f4111|223344556677885f5f5f5f5f 64 gnu cmovno (%rcx),%rdx -480f4111|223344556677885f5f5f5f5f 64 intel cmovno rdx, qword ptr [rcx] -480f4111|223344556677885f5f5f5f5f 64 plan9 CMOVNO 0(CX), DX -480f4211|223344556677885f5f5f5f5f 64 gnu cmovb (%rcx),%rdx -480f4211|223344556677885f5f5f5f5f 64 intel cmovb rdx, qword ptr [rcx] -480f4211|223344556677885f5f5f5f5f 64 plan9 CMOVB 0(CX), DX -480f4311|223344556677885f5f5f5f5f 64 gnu cmovae (%rcx),%rdx -480f4311|223344556677885f5f5f5f5f 64 intel cmovnb rdx, qword ptr [rcx] -480f4311|223344556677885f5f5f5f5f 64 plan9 CMOVAE 0(CX), DX -480f4411|223344556677885f5f5f5f5f 64 gnu cmove (%rcx),%rdx -480f4411|223344556677885f5f5f5f5f 64 intel cmovz rdx, qword ptr [rcx] -480f4411|223344556677885f5f5f5f5f 64 plan9 CMOVE 0(CX), DX -480f4511|223344556677885f5f5f5f5f 64 gnu cmovne (%rcx),%rdx -480f4511|223344556677885f5f5f5f5f 64 intel cmovnz rdx, qword ptr [rcx] -480f4511|223344556677885f5f5f5f5f 64 plan9 CMOVNE 0(CX), DX -480f4611|223344556677885f5f5f5f5f 64 gnu cmovbe (%rcx),%rdx -480f4611|223344556677885f5f5f5f5f 64 intel cmovbe rdx, qword ptr [rcx] -480f4611|223344556677885f5f5f5f5f 64 plan9 CMOVBE 0(CX), DX -480f4711|223344556677885f5f5f5f5f 64 gnu cmova (%rcx),%rdx -480f4711|223344556677885f5f5f5f5f 64 intel cmovnbe rdx, qword ptr [rcx] -480f4711|223344556677885f5f5f5f5f 64 plan9 CMOVA 0(CX), DX -480f4811|223344556677885f5f5f5f5f 64 gnu cmovs (%rcx),%rdx -480f4811|223344556677885f5f5f5f5f 64 intel cmovs rdx, qword ptr [rcx] -480f4811|223344556677885f5f5f5f5f 64 plan9 CMOVS 0(CX), DX -480f4911|223344556677885f5f5f5f5f 64 gnu cmovns (%rcx),%rdx -480f4911|223344556677885f5f5f5f5f 64 intel cmovns rdx, qword ptr [rcx] -480f4911|223344556677885f5f5f5f5f 64 plan9 CMOVNS 0(CX), DX -480f4a11|223344556677885f5f5f5f5f 64 gnu cmovp (%rcx),%rdx -480f4a11|223344556677885f5f5f5f5f 64 intel cmovp rdx, qword ptr [rcx] -480f4a11|223344556677885f5f5f5f5f 64 plan9 CMOVP 0(CX), DX -480f4b11|223344556677885f5f5f5f5f 64 gnu cmovnp (%rcx),%rdx -480f4b11|223344556677885f5f5f5f5f 64 intel cmovnp rdx, qword ptr [rcx] -480f4b11|223344556677885f5f5f5f5f 64 plan9 CMOVNP 0(CX), DX -480f4c11|223344556677885f5f5f5f5f 64 gnu cmovl (%rcx),%rdx -480f4c11|223344556677885f5f5f5f5f 64 intel cmovl rdx, qword ptr [rcx] -480f4c11|223344556677885f5f5f5f5f 64 plan9 CMOVL 0(CX), DX -480f4d11|223344556677885f5f5f5f5f 64 gnu cmovge (%rcx),%rdx -480f4d11|223344556677885f5f5f5f5f 64 intel cmovnl rdx, qword ptr [rcx] -480f4d11|223344556677885f5f5f5f5f 64 plan9 CMOVGE 0(CX), DX -480f4e11|223344556677885f5f5f5f5f 64 gnu cmovle (%rcx),%rdx -480f4e11|223344556677885f5f5f5f5f 64 intel cmovle rdx, qword ptr [rcx] -480f4e11|223344556677885f5f5f5f5f 64 plan9 CMOVLE 0(CX), DX -480f4f11|223344556677885f5f5f5f5f 64 gnu cmovg (%rcx),%rdx -480f4f11|223344556677885f5f5f5f5f 64 intel cmovnle rdx, qword ptr [rcx] -480f4f11|223344556677885f5f5f5f5f 64 plan9 CMOVG 0(CX), DX -480f6e11|223344556677885f5f5f5f5f 64 gnu movq (%rcx),%mm2 -480f6e11|223344556677885f5f5f5f5f 64 intel movq mmx2, qword ptr [rcx] -480f6e11|223344556677885f5f5f5f5f 64 plan9 MOVQ 0(CX), M2 -480f7e11|223344556677885f5f5f5f5f 64 gnu movq %mm2,(%rcx) -480f7e11|223344556677885f5f5f5f5f 64 intel movq qword ptr [rcx], mmx2 -480f7e11|223344556677885f5f5f5f5f 64 plan9 MOVQ M2, 0(CX) -480f8011223344|556677885f5f5f5f5f 64 gnu jo .+0x44332211 -480f8011223344|556677885f5f5f5f5f 64 intel jo .+0x44332211 -480f8011223344|556677885f5f5f5f5f 64 plan9 JO .+1144201745 -480f8111223344|556677885f5f5f5f5f 64 gnu jno .+0x44332211 -480f8111223344|556677885f5f5f5f5f 64 intel jno .+0x44332211 -480f8111223344|556677885f5f5f5f5f 64 plan9 JNO .+1144201745 -480f8211223344|556677885f5f5f5f5f 64 gnu jb .+0x44332211 -480f8211223344|556677885f5f5f5f5f 64 intel jb .+0x44332211 -480f8211223344|556677885f5f5f5f5f 64 plan9 JB .+1144201745 -480f8311223344|556677885f5f5f5f5f 64 gnu jae .+0x44332211 -480f8311223344|556677885f5f5f5f5f 64 intel jnb .+0x44332211 -480f8311223344|556677885f5f5f5f5f 64 plan9 JAE .+1144201745 -480f8411223344|556677885f5f5f5f5f 64 gnu je .+0x44332211 -480f8411223344|556677885f5f5f5f5f 64 intel jz .+0x44332211 -480f8411223344|556677885f5f5f5f5f 64 plan9 JE .+1144201745 -480f8511223344|556677885f5f5f5f5f 64 gnu jne .+0x44332211 -480f8511223344|556677885f5f5f5f5f 64 intel jnz .+0x44332211 -480f8511223344|556677885f5f5f5f5f 64 plan9 JNE .+1144201745 -480f8611223344|556677885f5f5f5f5f 64 gnu jbe .+0x44332211 -480f8611223344|556677885f5f5f5f5f 64 intel jbe .+0x44332211 -480f8611223344|556677885f5f5f5f5f 64 plan9 JBE .+1144201745 -480f8711223344|556677885f5f5f5f5f 64 gnu ja .+0x44332211 -480f8711223344|556677885f5f5f5f5f 64 intel jnbe .+0x44332211 -480f8711223344|556677885f5f5f5f5f 64 plan9 JA .+1144201745 -480f8811223344|556677885f5f5f5f5f 64 gnu js .+0x44332211 -480f8811223344|556677885f5f5f5f5f 64 intel js .+0x44332211 -480f8811223344|556677885f5f5f5f5f 64 plan9 JS .+1144201745 -480f8911223344|556677885f5f5f5f5f 64 gnu jns .+0x44332211 -480f8911223344|556677885f5f5f5f5f 64 intel jns .+0x44332211 -480f8911223344|556677885f5f5f5f5f 64 plan9 JNS .+1144201745 -480f8a11223344|556677885f5f5f5f5f 64 gnu jp .+0x44332211 -480f8a11223344|556677885f5f5f5f5f 64 intel jp .+0x44332211 -480f8a11223344|556677885f5f5f5f5f 64 plan9 JP .+1144201745 -480f8b11223344|556677885f5f5f5f5f 64 gnu jnp .+0x44332211 -480f8b11223344|556677885f5f5f5f5f 64 intel jnp .+0x44332211 -480f8b11223344|556677885f5f5f5f5f 64 plan9 JNP .+1144201745 -480f8c11223344|556677885f5f5f5f5f 64 gnu jl .+0x44332211 -480f8c11223344|556677885f5f5f5f5f 64 intel jl .+0x44332211 -480f8c11223344|556677885f5f5f5f5f 64 plan9 JL .+1144201745 -480f8d11223344|556677885f5f5f5f5f 64 gnu jge .+0x44332211 -480f8d11223344|556677885f5f5f5f5f 64 intel jnl .+0x44332211 -480f8d11223344|556677885f5f5f5f5f 64 plan9 JGE .+1144201745 -480f8e11223344|556677885f5f5f5f5f 64 gnu jle .+0x44332211 -480f8e11223344|556677885f5f5f5f5f 64 intel jle .+0x44332211 -480f8e11223344|556677885f5f5f5f5f 64 plan9 JLE .+1144201745 -480f8f11223344|556677885f5f5f5f5f 64 gnu jg .+0x44332211 -480f8f11223344|556677885f5f5f5f5f 64 intel jnle .+0x44332211 -480f8f11223344|556677885f5f5f5f5f 64 plan9 JG .+1144201745 -480fa1|11223344556677885f5f5f5f5f 64 gnu popq %fs -480fa1|11223344556677885f5f5f5f5f 64 intel pop fs -480fa1|11223344556677885f5f5f5f5f 64 plan9 POPQ FS -480fa311|223344556677885f5f5f5f5f 64 gnu bt %rdx,(%rcx) -480fa311|223344556677885f5f5f5f5f 64 intel bt qword ptr [rcx], rdx -480fa311|223344556677885f5f5f5f5f 64 plan9 BTQ DX, 0(CX) -480fa41122|3344556677885f5f5f5f5f 64 gnu shld $0x22,%rdx,(%rcx) -480fa41122|3344556677885f5f5f5f5f 64 intel shld qword ptr [rcx], rdx, 0x22 -480fa41122|3344556677885f5f5f5f5f 64 plan9 SHLDQ $0x22, DX, 0(CX) -480fa511|223344556677885f5f5f5f5f 64 gnu shld %cl,%rdx,(%rcx) -480fa511|223344556677885f5f5f5f5f 64 intel shld qword ptr [rcx], rdx, cl -480fa511|223344556677885f5f5f5f5f 64 plan9 SHLDQ CL, DX, 0(CX) -480fa9|11223344556677885f5f5f5f5f 64 gnu popq %gs -480fa9|11223344556677885f5f5f5f5f 64 intel pop gs -480fa9|11223344556677885f5f5f5f5f 64 plan9 POPQ GS -480fab11|223344556677885f5f5f5f5f 64 gnu bts %rdx,(%rcx) -480fab11|223344556677885f5f5f5f5f 64 intel bts qword ptr [rcx], rdx -480fab11|223344556677885f5f5f5f5f 64 plan9 BTSQ DX, 0(CX) -480fac1122|3344556677885f5f5f5f5f 64 gnu shrd $0x22,%rdx,(%rcx) -480fac1122|3344556677885f5f5f5f5f 64 intel shrd qword ptr [rcx], rdx, 0x22 -480fac1122|3344556677885f5f5f5f5f 64 plan9 SHRDQ $0x22, DX, 0(CX) -480fad11|223344556677885f5f5f5f5f 64 gnu shrd %cl,%rdx,(%rcx) -480fad11|223344556677885f5f5f5f5f 64 intel shrd qword ptr [rcx], rdx, cl -480fad11|223344556677885f5f5f5f5f 64 plan9 SHRDQ CL, DX, 0(CX) -480fae00|11223344556677885f5f5f5f 64 gnu fxsave64 (%rax) -480fae00|11223344556677885f5f5f5f 64 intel fxsave64 ptr [rax] -480fae00|11223344556677885f5f5f5f 64 plan9 FXSAVE64 0(AX) -480fae08|11223344556677885f5f5f5f 64 gnu fxrstor64 (%rax) -480fae08|11223344556677885f5f5f5f 64 intel fxrstor64 ptr [rax] -480fae08|11223344556677885f5f5f5f 64 plan9 FXRSTOR64 0(AX) -480fae20|11223344556677885f5f5f5f 64 gnu xsave64 (%rax) -480fae20|11223344556677885f5f5f5f 64 intel xsave64 ptr [rax] -480fae20|11223344556677885f5f5f5f 64 plan9 XSAVE64 0(AX) -480fae28|11223344556677885f5f5f5f 64 gnu xrstor64 (%rax) -480fae28|11223344556677885f5f5f5f 64 intel xrstor64 ptr [rax] -480fae28|11223344556677885f5f5f5f 64 plan9 XRSTOR64 0(AX) -480fae30|11223344556677885f5f5f5f 64 gnu xsaveopt64 (%rax) -480fae30|11223344556677885f5f5f5f 64 intel xsaveopt64 ptr [rax] -480fae30|11223344556677885f5f5f5f 64 plan9 XSAVEOPT64 0(AX) -480faf11|223344556677885f5f5f5f5f 64 gnu imul (%rcx),%rdx -480faf11|223344556677885f5f5f5f5f 64 intel imul rdx, qword ptr [rcx] -480faf11|223344556677885f5f5f5f5f 64 plan9 IMULQ 0(CX), DX -480fb111|223344556677885f5f5f5f5f 64 gnu cmpxchg %rdx,(%rcx) -480fb111|223344556677885f5f5f5f5f 64 intel cmpxchg qword ptr [rcx], rdx -480fb111|223344556677885f5f5f5f5f 64 plan9 CMPXCHGQ DX, 0(CX) -480fb211|223344556677885f5f5f5f5f 64 gnu lss (%rcx),%rdx -480fb211|223344556677885f5f5f5f5f 64 intel lss rdx, ptr [rcx] -480fb211|223344556677885f5f5f5f5f 64 plan9 LSS 0(CX), DX -480fb311|223344556677885f5f5f5f5f 64 gnu btr %rdx,(%rcx) -480fb311|223344556677885f5f5f5f5f 64 intel btr qword ptr [rcx], rdx -480fb311|223344556677885f5f5f5f5f 64 plan9 BTRQ DX, 0(CX) -480fb411|223344556677885f5f5f5f5f 64 gnu lfs (%rcx),%rdx -480fb411|223344556677885f5f5f5f5f 64 intel lfs rdx, ptr [rcx] -480fb411|223344556677885f5f5f5f5f 64 plan9 LFS 0(CX), DX -480fb511|223344556677885f5f5f5f5f 64 gnu lgs (%rcx),%rdx -480fb511|223344556677885f5f5f5f5f 64 intel lgs rdx, ptr [rcx] -480fb511|223344556677885f5f5f5f5f 64 plan9 LGS 0(CX), DX -480fb611|223344556677885f5f5f5f5f 64 gnu movzbq (%rcx),%rdx -480fb611|223344556677885f5f5f5f5f 64 intel movzx rdx, byte ptr [rcx] -480fb611|223344556677885f5f5f5f5f 64 plan9 MOVZX 0(CX), DX -480fb711|223344556677885f5f5f5f5f 64 gnu movzwq (%rcx),%rdx -480fb711|223344556677885f5f5f5f5f 64 intel movzx rdx, word ptr [rcx] -480fb711|223344556677885f5f5f5f5f 64 plan9 MOVZX 0(CX), DX -480fba2011|223344556677885f5f5f5f 64 gnu btq $0x11,(%rax) -480fba2011|223344556677885f5f5f5f 64 intel bt qword ptr [rax], 0x11 -480fba2011|223344556677885f5f5f5f 64 plan9 BTQ $0x11, 0(AX) -480fba2811|223344556677885f5f5f5f 64 gnu btsq $0x11,(%rax) -480fba2811|223344556677885f5f5f5f 64 intel bts qword ptr [rax], 0x11 -480fba2811|223344556677885f5f5f5f 64 plan9 BTSQ $0x11, 0(AX) -480fba3011|223344556677885f5f5f5f 64 gnu btrq $0x11,(%rax) -480fba3011|223344556677885f5f5f5f 64 intel btr qword ptr [rax], 0x11 -480fba3011|223344556677885f5f5f5f 64 plan9 BTRQ $0x11, 0(AX) -480fba3811|223344556677885f5f5f5f 64 gnu btcq $0x11,(%rax) -480fba3811|223344556677885f5f5f5f 64 intel btc qword ptr [rax], 0x11 -480fba3811|223344556677885f5f5f5f 64 plan9 BTCQ $0x11, 0(AX) -480fbb11|223344556677885f5f5f5f5f 64 gnu btc %rdx,(%rcx) -480fbb11|223344556677885f5f5f5f5f 64 intel btc qword ptr [rcx], rdx -480fbb11|223344556677885f5f5f5f5f 64 plan9 BTCQ DX, 0(CX) -480fbc11|223344556677885f5f5f5f5f 64 gnu bsf (%rcx),%rdx -480fbc11|223344556677885f5f5f5f5f 64 intel bsf rdx, qword ptr [rcx] -480fbc11|223344556677885f5f5f5f5f 64 plan9 BSFQ 0(CX), DX -480fbd11|223344556677885f5f5f5f5f 64 gnu bsr (%rcx),%rdx -480fbd11|223344556677885f5f5f5f5f 64 intel bsr rdx, qword ptr [rcx] -480fbd11|223344556677885f5f5f5f5f 64 plan9 BSRQ 0(CX), DX -480fbe11|223344556677885f5f5f5f5f 64 gnu movsbq (%rcx),%rdx -480fbe11|223344556677885f5f5f5f5f 64 intel movsx rdx, byte ptr [rcx] -480fbe11|223344556677885f5f5f5f5f 64 plan9 MOVSX 0(CX), DX -480fbf11|223344556677885f5f5f5f5f 64 gnu movswq (%rcx),%rdx -480fbf11|223344556677885f5f5f5f5f 64 intel movsx rdx, word ptr [rcx] -480fbf11|223344556677885f5f5f5f5f 64 plan9 MOVSX 0(CX), DX -480fc111|223344556677885f5f5f5f5f 64 gnu xadd %rdx,(%rcx) -480fc111|223344556677885f5f5f5f5f 64 intel xadd qword ptr [rcx], rdx -480fc111|223344556677885f5f5f5f5f 64 plan9 XADDQ DX, 0(CX) -480fc311|223344556677885f5f5f5f5f 64 gnu movnti %rdx,(%rcx) -480fc311|223344556677885f5f5f5f5f 64 intel movnti qword ptr [rcx], rdx -480fc311|223344556677885f5f5f5f5f 64 plan9 MOVNTIQ DX, 0(CX) -480fc708|11223344556677885f5f5f5f 64 gnu cmpxchg16b (%rax) -480fc708|11223344556677885f5f5f5f 64 intel cmpxchg16b xmmword ptr [rax] -480fc708|11223344556677885f5f5f5f 64 plan9 CMPXCHG16B 0(AX) -480fc718|11223344556677885f5f5f5f 64 gnu xrstors64 (%rax) -480fc718|11223344556677885f5f5f5f 64 intel xrstors64 ptr [rax] -480fc718|11223344556677885f5f5f5f 64 plan9 XRSTORS64 0(AX) -480fc720|11223344556677885f5f5f5f 64 gnu xsavec64 (%rax) -480fc720|11223344556677885f5f5f5f 64 intel xsavec64 ptr [rax] -480fc720|11223344556677885f5f5f5f 64 plan9 XSAVEC64 0(AX) -480fc728|11223344556677885f5f5f5f 64 gnu xsaves64 (%rax) -480fc728|11223344556677885f5f5f5f 64 intel xsaves64 ptr [rax] -480fc728|11223344556677885f5f5f5f 64 plan9 XSAVES64 0(AX) -480fc730|11223344556677885f5f5f5f 64 gnu rdrand -480fc730|11223344556677885f5f5f5f 64 intel rdrand -480fc730|11223344556677885f5f5f5f 64 plan9 RDRAND -480fc8|11223344556677885f5f5f5f5f 64 gnu bswap %rax -480fc8|11223344556677885f5f5f5f5f 64 intel bswap rax -480fc8|11223344556677885f5f5f5f5f 64 plan9 BSWAP AX -481122|3344556677885f5f5f5f5f5f5f 64 gnu adc %rsp,(%rdx) -481122|3344556677885f5f5f5f5f5f5f 64 intel adc qword ptr [rdx], rsp -481122|3344556677885f5f5f5f5f5f5f 64 plan9 ADCQ SP, 0(DX) -481311|223344556677885f5f5f5f5f5f 64 gnu adc (%rcx),%rdx -481311|223344556677885f5f5f5f5f5f 64 intel adc rdx, qword ptr [rcx] -481311|223344556677885f5f5f5f5f5f 64 plan9 ADCQ 0(CX), DX -481511223344|556677885f5f5f5f5f5f 64 gnu adc $0x44332211,%rax -481511223344|556677885f5f5f5f5f5f 64 intel adc rax, 0x44332211 -481511223344|556677885f5f5f5f5f5f 64 plan9 ADCQ $0x44332211, AX -481911|223344556677885f5f5f5f5f5f 64 gnu sbb %rdx,(%rcx) -481911|223344556677885f5f5f5f5f5f 64 intel sbb qword ptr [rcx], rdx -481911|223344556677885f5f5f5f5f5f 64 plan9 SBBQ DX, 0(CX) -481b11|223344556677885f5f5f5f5f5f 64 gnu sbb (%rcx),%rdx -481b11|223344556677885f5f5f5f5f5f 64 intel sbb rdx, qword ptr [rcx] -481b11|223344556677885f5f5f5f5f5f 64 plan9 SBBQ 0(CX), DX -481d11223344|556677885f5f5f5f5f5f 64 gnu sbb $0x44332211,%rax -481d11223344|556677885f5f5f5f5f5f 64 intel sbb rax, 0x44332211 -481d11223344|556677885f5f5f5f5f5f 64 plan9 SBBQ $0x44332211, AX -482111|223344556677885f5f5f5f5f5f 64 gnu and %rdx,(%rcx) -482111|223344556677885f5f5f5f5f5f 64 intel and qword ptr [rcx], rdx -482111|223344556677885f5f5f5f5f5f 64 plan9 ANDQ DX, 0(CX) -482311|223344556677885f5f5f5f5f5f 64 gnu and (%rcx),%rdx -482311|223344556677885f5f5f5f5f5f 64 intel and rdx, qword ptr [rcx] -482311|223344556677885f5f5f5f5f5f 64 plan9 ANDQ 0(CX), DX -482511223344|556677885f5f5f5f5f5f 64 gnu and $0x44332211,%rax -482511223344|556677885f5f5f5f5f5f 64 intel and rax, 0x44332211 -482511223344|556677885f5f5f5f5f5f 64 plan9 ANDQ $0x44332211, AX -482911|223344556677885f5f5f5f5f5f 64 gnu sub %rdx,(%rcx) -482911|223344556677885f5f5f5f5f5f 64 intel sub qword ptr [rcx], rdx -482911|223344556677885f5f5f5f5f5f 64 plan9 SUBQ DX, 0(CX) -482b11|223344556677885f5f5f5f5f5f 64 gnu sub (%rcx),%rdx -482b11|223344556677885f5f5f5f5f5f 64 intel sub rdx, qword ptr [rcx] -482b11|223344556677885f5f5f5f5f5f 64 plan9 SUBQ 0(CX), DX -482d11223344|556677885f5f5f5f5f5f 64 gnu sub $0x44332211,%rax -482d11223344|556677885f5f5f5f5f5f 64 intel sub rax, 0x44332211 -482d11223344|556677885f5f5f5f5f5f 64 plan9 SUBQ $0x44332211, AX -483111|223344556677885f5f5f5f5f5f 64 gnu xor %rdx,(%rcx) -483111|223344556677885f5f5f5f5f5f 64 intel xor qword ptr [rcx], rdx -483111|223344556677885f5f5f5f5f5f 64 plan9 XORQ DX, 0(CX) -483311|223344556677885f5f5f5f5f5f 64 gnu xor (%rcx),%rdx -483311|223344556677885f5f5f5f5f5f 64 intel xor rdx, qword ptr [rcx] -483311|223344556677885f5f5f5f5f5f 64 plan9 XORQ 0(CX), DX -483511223344|556677885f5f5f5f5f5f 64 gnu xor $0x44332211,%rax -483511223344|556677885f5f5f5f5f5f 64 intel xor rax, 0x44332211 -483511223344|556677885f5f5f5f5f5f 64 plan9 XORQ $0x44332211, AX -483911|223344556677885f5f5f5f5f5f 64 gnu cmp %rdx,(%rcx) -483911|223344556677885f5f5f5f5f5f 64 intel cmp qword ptr [rcx], rdx -483911|223344556677885f5f5f5f5f5f 64 plan9 CMPQ DX, 0(CX) -483b11|223344556677885f5f5f5f5f5f 64 gnu cmp (%rcx),%rdx -483b11|223344556677885f5f5f5f5f5f 64 intel cmp rdx, qword ptr [rcx] -483b11|223344556677885f5f5f5f5f5f 64 plan9 CMPQ 0(CX), DX -483d11223344|556677885f5f5f5f5f5f 64 gnu cmp $0x44332211,%rax -483d11223344|556677885f5f5f5f5f5f 64 intel cmp rax, 0x44332211 -483d11223344|556677885f5f5f5f5f5f 64 plan9 CMPQ $0x44332211, AX -4850|11223344556677885f5f5f5f5f5f 64 gnu push %rax -4850|11223344556677885f5f5f5f5f5f 64 intel push rax -4850|11223344556677885f5f5f5f5f5f 64 plan9 PUSHQ AX -4858|11223344556677885f5f5f5f5f5f 64 gnu pop %rax -4858|11223344556677885f5f5f5f5f5f 64 intel pop rax -4858|11223344556677885f5f5f5f5f5f 64 plan9 POPQ AX -486311|223344556677885f5f5f5f5f5f 64 gnu movsxd (%rcx),%rdx -486311|223344556677885f5f5f5f5f5f 64 intel movsxd rdx, dword ptr [rcx] -486311|223344556677885f5f5f5f5f5f 64 plan9 MOVSXD 0(CX), DX -486811223344|556677885f5f5f5f5f5f 64 gnu pushq $0x44332211 -486811223344|556677885f5f5f5f5f5f 64 intel push 0x44332211 -486811223344|556677885f5f5f5f5f5f 64 plan9 PUSHQ $0x44332211 -48691122334455|6677885f5f5f5f5f5f 64 gnu imul $0x55443322,(%rcx),%rdx -48691122334455|6677885f5f5f5f5f5f 64 intel imul rdx, qword ptr [rcx], 0x55443322 -48691122334455|6677885f5f5f5f5f5f 64 plan9 IMULQ $0x55443322, 0(CX), DX -486b1122|3344556677885f5f5f5f5f5f 64 gnu imul $0x22,(%rcx),%rdx -486b1122|3344556677885f5f5f5f5f5f 64 intel imul rdx, qword ptr [rcx], 0x22 -486b1122|3344556677885f5f5f5f5f5f 64 plan9 IMULQ $0x22, 0(CX), DX -486d|11223344556677885f5f5f5f5f5f 64 gnu insl (%dx),%es:(%rdi) -486d|11223344556677885f5f5f5f5f5f 64 intel insd -486d|11223344556677885f5f5f5f5f5f 64 plan9 INSD DX, ES:0(DI) -486f|11223344556677885f5f5f5f5f5f 64 gnu outsl %ds:(%rsi),(%dx) -486f|11223344556677885f5f5f5f5f5f 64 intel outsd -486f|11223344556677885f5f5f5f5f5f 64 plan9 OUTSD DS:0(SI), DX -48810011223344|556677885f5f5f5f5f 64 gnu addq $0x44332211,(%rax) -48810011223344|556677885f5f5f5f5f 64 intel add qword ptr [rax], 0x44332211 -48810011223344|556677885f5f5f5f5f 64 plan9 ADDQ $0x44332211, 0(AX) -48810811223344|556677885f5f5f5f5f 64 gnu orq $0x44332211,(%rax) -48810811223344|556677885f5f5f5f5f 64 intel or qword ptr [rax], 0x44332211 -48810811223344|556677885f5f5f5f5f 64 plan9 ORQ $0x44332211, 0(AX) -48811122334455|6677885f5f5f5f5f5f 64 gnu adcq $0x55443322,(%rcx) -48811122334455|6677885f5f5f5f5f5f 64 intel adc qword ptr [rcx], 0x55443322 -48811122334455|6677885f5f5f5f5f5f 64 plan9 ADCQ $0x55443322, 0(CX) -48811811223344|556677885f5f5f5f5f 64 gnu sbbq $0x44332211,(%rax) -48811811223344|556677885f5f5f5f5f 64 intel sbb qword ptr [rax], 0x44332211 -48811811223344|556677885f5f5f5f5f 64 plan9 SBBQ $0x44332211, 0(AX) -48812011223344|556677885f5f5f5f5f 64 gnu andq $0x44332211,(%rax) -48812011223344|556677885f5f5f5f5f 64 intel and qword ptr [rax], 0x44332211 -48812011223344|556677885f5f5f5f5f 64 plan9 ANDQ $0x44332211, 0(AX) -48812811223344|556677885f5f5f5f5f 64 gnu subq $0x44332211,(%rax) -48812811223344|556677885f5f5f5f5f 64 intel sub qword ptr [rax], 0x44332211 -48812811223344|556677885f5f5f5f5f 64 plan9 SUBQ $0x44332211, 0(AX) -48813011223344|556677885f5f5f5f5f 64 gnu xorq $0x44332211,(%rax) -48813011223344|556677885f5f5f5f5f 64 intel xor qword ptr [rax], 0x44332211 -48813011223344|556677885f5f5f5f5f 64 plan9 XORQ $0x44332211, 0(AX) -48813811223344|556677885f5f5f5f5f 64 gnu cmpq $0x44332211,(%rax) -48813811223344|556677885f5f5f5f5f 64 intel cmp qword ptr [rax], 0x44332211 -48813811223344|556677885f5f5f5f5f 64 plan9 CMPQ $0x44332211, 0(AX) -48830011|223344556677885f5f5f5f5f 64 gnu addq $0x11,(%rax) -48830011|223344556677885f5f5f5f5f 64 intel add qword ptr [rax], 0x11 -48830011|223344556677885f5f5f5f5f 64 plan9 ADDQ $0x11, 0(AX) -48830811|223344556677885f5f5f5f5f 64 gnu orq $0x11,(%rax) -48830811|223344556677885f5f5f5f5f 64 intel or qword ptr [rax], 0x11 -48830811|223344556677885f5f5f5f5f 64 plan9 ORQ $0x11, 0(AX) -48831122|3344556677885f5f5f5f5f5f 64 gnu adcq $0x22,(%rcx) -48831122|3344556677885f5f5f5f5f5f 64 intel adc qword ptr [rcx], 0x22 -48831122|3344556677885f5f5f5f5f5f 64 plan9 ADCQ $0x22, 0(CX) -48831811|223344556677885f5f5f5f5f 64 gnu sbbq $0x11,(%rax) -48831811|223344556677885f5f5f5f5f 64 intel sbb qword ptr [rax], 0x11 -48831811|223344556677885f5f5f5f5f 64 plan9 SBBQ $0x11, 0(AX) -48832011|223344556677885f5f5f5f5f 64 gnu andq $0x11,(%rax) -48832011|223344556677885f5f5f5f5f 64 intel and qword ptr [rax], 0x11 -48832011|223344556677885f5f5f5f5f 64 plan9 ANDQ $0x11, 0(AX) -48832811|223344556677885f5f5f5f5f 64 gnu subq $0x11,(%rax) -48832811|223344556677885f5f5f5f5f 64 intel sub qword ptr [rax], 0x11 -48832811|223344556677885f5f5f5f5f 64 plan9 SUBQ $0x11, 0(AX) -48833011|223344556677885f5f5f5f5f 64 gnu xorq $0x11,(%rax) -48833011|223344556677885f5f5f5f5f 64 intel xor qword ptr [rax], 0x11 -48833011|223344556677885f5f5f5f5f 64 plan9 XORQ $0x11, 0(AX) -48833811|223344556677885f5f5f5f5f 64 gnu cmpq $0x11,(%rax) -48833811|223344556677885f5f5f5f5f 64 intel cmp qword ptr [rax], 0x11 -48833811|223344556677885f5f5f5f5f 64 plan9 CMPQ $0x11, 0(AX) -488511|223344556677885f5f5f5f5f5f 64 gnu test %rdx,(%rcx) -488511|223344556677885f5f5f5f5f5f 64 intel test qword ptr [rcx], rdx -488511|223344556677885f5f5f5f5f5f 64 plan9 TESTQ DX, 0(CX) -488711|223344556677885f5f5f5f5f5f 64 gnu xchg %rdx,(%rcx) -488711|223344556677885f5f5f5f5f5f 64 intel xchg qword ptr [rcx], rdx -488711|223344556677885f5f5f5f5f5f 64 plan9 XCHGQ DX, 0(CX) -488911|223344556677885f5f5f5f5f5f 64 gnu mov %rdx,(%rcx) -488911|223344556677885f5f5f5f5f5f 64 intel mov qword ptr [rcx], rdx -488911|223344556677885f5f5f5f5f5f 64 plan9 MOVQ DX, 0(CX) -488b11|223344556677885f5f5f5f5f5f 64 gnu mov (%rcx),%rdx -488b11|223344556677885f5f5f5f5f5f 64 intel mov rdx, qword ptr [rcx] -488b11|223344556677885f5f5f5f5f5f 64 plan9 MOVQ 0(CX), DX -488c11|223344556677885f5f5f5f5f5f 64 gnu mov %ss,(%rcx) -488c11|223344556677885f5f5f5f5f5f 64 intel mov word ptr [rcx], ss -# MOVQ is probably more correct here (reads 16 bits of segment register, zero extends, writes 64 bits at CX) -488c11|223344556677885f5f5f5f5f5f 64 plan9 MOVW SS, 0(CX) -488d11|223344556677885f5f5f5f5f5f 64 gnu lea (%rcx),%rdx -488d11|223344556677885f5f5f5f5f5f 64 intel lea rdx, ptr [rcx] -488d11|223344556677885f5f5f5f5f5f 64 plan9 LEAQ 0(CX), DX -488e11|223344556677885f5f5f5f5f5f 64 gnu mov (%rcx),%ss -488e11|223344556677885f5f5f5f5f5f 64 intel mov ss, word ptr [rcx] -488e11|223344556677885f5f5f5f5f5f 64 plan9 MOVW 0(CX), SS -488f00|11223344556677885f5f5f5f5f 64 gnu popq (%rax) -488f00|11223344556677885f5f5f5f5f 64 intel pop qword ptr [rax] -488f00|11223344556677885f5f5f5f5f 64 plan9 POPQ 0(AX) -4891|11223344556677885f5f5f5f5f5f 64 gnu xchg %rax,%rcx -4891|11223344556677885f5f5f5f5f5f 64 intel xchg rcx, rax -4891|11223344556677885f5f5f5f5f5f 64 plan9 XCHGQ AX, CX -4898|11223344556677885f5f5f5f5f5f 64 gnu cdqe -4898|11223344556677885f5f5f5f5f5f 64 intel cdqe -4898|11223344556677885f5f5f5f5f5f 64 plan9 CDQE -4899|11223344556677885f5f5f5f5f5f 64 gnu cqto -4899|11223344556677885f5f5f5f5f5f 64 intel cqo -4899|11223344556677885f5f5f5f5f5f 64 plan9 CQO -489c|11223344556677885f5f5f5f5f5f 64 gnu pushfq -489c|11223344556677885f5f5f5f5f5f 64 intel pushfq -489c|11223344556677885f5f5f5f5f5f 64 plan9 PUSHFQ -489d|11223344556677885f5f5f5f5f5f 64 gnu popfq -489d|11223344556677885f5f5f5f5f5f 64 intel popfq -489d|11223344556677885f5f5f5f5f5f 64 plan9 POPFQ -48a01122334455667788|5f5f5f5f5f5f 64 gnu mov -0x778899aabbccddef,%al -48a01122334455667788|5f5f5f5f5f5f 64 intel mov al, byte ptr [0x8877665544332211] -48a01122334455667788|5f5f5f5f5f5f 64 plan9 MOVB -0x778899aabbccddef, AL -48a11122334455667788|5f5f5f5f5f5f 64 gnu mov -0x778899aabbccddef,%rax -48a11122334455667788|5f5f5f5f5f5f 64 intel mov rax, qword ptr [0x8877665544332211] -48a11122334455667788|5f5f5f5f5f5f 64 plan9 MOVQ -0x778899aabbccddef, AX -48a21122334455667788|5f5f5f5f5f5f 64 gnu mov %al,-0x778899aabbccddef -48a21122334455667788|5f5f5f5f5f5f 64 intel mov byte ptr [0x8877665544332211], al -48a21122334455667788|5f5f5f5f5f5f 64 plan9 MOVB AL, -0x778899aabbccddef -48a31122334455667788|5f5f5f5f5f5f 64 gnu mov %rax,-0x778899aabbccddef -48a31122334455667788|5f5f5f5f5f5f 64 intel mov qword ptr [0x8877665544332211], rax -48a31122334455667788|5f5f5f5f5f5f 64 plan9 MOVQ AX, -0x778899aabbccddef -48a5|11223344556677885f5f5f5f5f5f 64 gnu movsq %ds:(%rsi),%es:(%rdi) -48a5|11223344556677885f5f5f5f5f5f 64 intel movsq qword ptr [rdi], qword ptr [rsi] -48a5|11223344556677885f5f5f5f5f5f 64 plan9 MOVSQ DS:0(SI), ES:0(DI) -48a7|11223344556677885f5f5f5f5f5f 64 gnu cmpsq %es:(%rdi),%ds:(%rsi) -48a7|11223344556677885f5f5f5f5f5f 64 intel cmpsq qword ptr [rsi], qword ptr [rdi] -48a7|11223344556677885f5f5f5f5f5f 64 plan9 CMPSQ ES:0(DI), DS:0(SI) -48a911223344|556677885f5f5f5f5f5f 64 gnu test $0x44332211,%rax -48a911223344|556677885f5f5f5f5f5f 64 intel test rax, 0x44332211 -48a911223344|556677885f5f5f5f5f5f 64 plan9 TESTQ $0x44332211, AX -48ab|11223344556677885f5f5f5f5f5f 64 gnu stos %rax,%es:(%rdi) -48ab|11223344556677885f5f5f5f5f5f 64 intel stosq qword ptr [rdi] -48ab|11223344556677885f5f5f5f5f5f 64 plan9 STOSQ AX, ES:0(DI) -48ad|11223344556677885f5f5f5f5f5f 64 gnu lods %ds:(%rsi),%rax -48ad|11223344556677885f5f5f5f5f5f 64 intel lodsq qword ptr [rsi] -48ad|11223344556677885f5f5f5f5f5f 64 plan9 LODSQ DS:0(SI), AX -48af|11223344556677885f5f5f5f5f5f 64 gnu scas %es:(%rdi),%rax -48af|11223344556677885f5f5f5f5f5f 64 intel scasq qword ptr [rdi] -48af|11223344556677885f5f5f5f5f5f 64 plan9 SCASQ ES:0(DI), AX -48b81122334455667788|5f5f5f5f5f5f 64 gnu mov $-0x778899aabbccddef,%rax -48b81122334455667788|5f5f5f5f5f5f 64 intel mov rax, 0x8877665544332211 -48b81122334455667788|5f5f5f5f5f5f 64 plan9 MOVQ $0x8877665544332211, AX -48c10011|223344556677885f5f5f5f5f 64 gnu rolq $0x11,(%rax) -48c10011|223344556677885f5f5f5f5f 64 intel rol qword ptr [rax], 0x11 -48c10011|223344556677885f5f5f5f5f 64 plan9 ROLQ $0x11, 0(AX) -48c10811|223344556677885f5f5f5f5f 64 gnu rorq $0x11,(%rax) -48c10811|223344556677885f5f5f5f5f 64 intel ror qword ptr [rax], 0x11 -48c10811|223344556677885f5f5f5f5f 64 plan9 RORQ $0x11, 0(AX) -48c11122|3344556677885f5f5f5f5f5f 64 gnu rclq $0x22,(%rcx) -48c11122|3344556677885f5f5f5f5f5f 64 intel rcl qword ptr [rcx], 0x22 -48c11122|3344556677885f5f5f5f5f5f 64 plan9 RCLQ $0x22, 0(CX) -48c11811|223344556677885f5f5f5f5f 64 gnu rcrq $0x11,(%rax) -48c11811|223344556677885f5f5f5f5f 64 intel rcr qword ptr [rax], 0x11 -48c11811|223344556677885f5f5f5f5f 64 plan9 RCRQ $0x11, 0(AX) -48c12011|223344556677885f5f5f5f5f 64 gnu shlq $0x11,(%rax) -48c12011|223344556677885f5f5f5f5f 64 intel shl qword ptr [rax], 0x11 -48c12011|223344556677885f5f5f5f5f 64 plan9 SHLQ $0x11, 0(AX) -48c12811|223344556677885f5f5f5f5f 64 gnu shrq $0x11,(%rax) -48c12811|223344556677885f5f5f5f5f 64 intel shr qword ptr [rax], 0x11 -48c12811|223344556677885f5f5f5f5f 64 plan9 SHRQ $0x11, 0(AX) -48c13811|223344556677885f5f5f5f5f 64 gnu sarq $0x11,(%rax) -48c13811|223344556677885f5f5f5f5f 64 intel sar qword ptr [rax], 0x11 -48c13811|223344556677885f5f5f5f5f 64 plan9 SARQ $0x11, 0(AX) -48c70011223344|556677885f5f5f5f5f 64 gnu movq $0x44332211,(%rax) -48c70011223344|556677885f5f5f5f5f 64 intel mov qword ptr [rax], 0x44332211 -48c70011223344|556677885f5f5f5f5f 64 plan9 MOVQ $0x44332211, 0(AX) -48c7f811223344|556677885f5f5f5f5f 64 gnu xbeginq .+0x44332211 -48c7f811223344|556677885f5f5f5f5f 64 intel xbegin .+0x44332211 -48c7f811223344|556677885f5f5f5f5f 64 plan9 XBEGIN .+1144201745 -48c9|11223344556677885f5f5f5f5f5f 64 gnu leaveq -48c9|11223344556677885f5f5f5f5f5f 64 intel leave -48c9|11223344556677885f5f5f5f5f5f 64 plan9 LEAVE -48cf|11223344556677885f5f5f5f5f5f 64 gnu iretq -48cf|11223344556677885f5f5f5f5f5f 64 intel iretq -48cf|11223344556677885f5f5f5f5f5f 64 plan9 IRETQ -48d100|11223344556677885f5f5f5f5f 64 gnu rolq (%rax) -48d100|11223344556677885f5f5f5f5f 64 intel rol qword ptr [rax], 0x1 -48d100|11223344556677885f5f5f5f5f 64 plan9 ROLQ $0x1, 0(AX) -48d108|11223344556677885f5f5f5f5f 64 gnu rorq (%rax) -48d108|11223344556677885f5f5f5f5f 64 intel ror qword ptr [rax], 0x1 -48d108|11223344556677885f5f5f5f5f 64 plan9 RORQ $0x1, 0(AX) -48d111|223344556677885f5f5f5f5f5f 64 gnu rclq (%rcx) -48d111|223344556677885f5f5f5f5f5f 64 intel rcl qword ptr [rcx], 0x1 -48d111|223344556677885f5f5f5f5f5f 64 plan9 RCLQ $0x1, 0(CX) -48d118|11223344556677885f5f5f5f5f 64 gnu rcrq (%rax) -48d118|11223344556677885f5f5f5f5f 64 intel rcr qword ptr [rax], 0x1 -48d118|11223344556677885f5f5f5f5f 64 plan9 RCRQ $0x1, 0(AX) -48d120|11223344556677885f5f5f5f5f 64 gnu shlq (%rax) -48d120|11223344556677885f5f5f5f5f 64 intel shl qword ptr [rax], 0x1 -48d120|11223344556677885f5f5f5f5f 64 plan9 SHLQ $0x1, 0(AX) -48d128|11223344556677885f5f5f5f5f 64 gnu shrq (%rax) -48d128|11223344556677885f5f5f5f5f 64 intel shr qword ptr [rax], 0x1 -48d128|11223344556677885f5f5f5f5f 64 plan9 SHRQ $0x1, 0(AX) -48d138|11223344556677885f5f5f5f5f 64 gnu sarq (%rax) -48d138|11223344556677885f5f5f5f5f 64 intel sar qword ptr [rax], 0x1 -48d138|11223344556677885f5f5f5f5f 64 plan9 SARQ $0x1, 0(AX) -48d300|11223344556677885f5f5f5f5f 64 gnu rolq %cl,(%rax) -48d300|11223344556677885f5f5f5f5f 64 intel rol qword ptr [rax], cl -48d300|11223344556677885f5f5f5f5f 64 plan9 ROLQ CL, 0(AX) -48d308|11223344556677885f5f5f5f5f 64 gnu rorq %cl,(%rax) -48d308|11223344556677885f5f5f5f5f 64 intel ror qword ptr [rax], cl -48d308|11223344556677885f5f5f5f5f 64 plan9 RORQ CL, 0(AX) -48d311|223344556677885f5f5f5f5f5f 64 gnu rclq %cl,(%rcx) -48d311|223344556677885f5f5f5f5f5f 64 intel rcl qword ptr [rcx], cl -48d311|223344556677885f5f5f5f5f5f 64 plan9 RCLQ CL, 0(CX) -48d318|11223344556677885f5f5f5f5f 64 gnu rcrq %cl,(%rax) -48d318|11223344556677885f5f5f5f5f 64 intel rcr qword ptr [rax], cl -48d318|11223344556677885f5f5f5f5f 64 plan9 RCRQ CL, 0(AX) -48d320|11223344556677885f5f5f5f5f 64 gnu shlq %cl,(%rax) -48d320|11223344556677885f5f5f5f5f 64 intel shl qword ptr [rax], cl -48d320|11223344556677885f5f5f5f5f 64 plan9 SHLQ CL, 0(AX) -48d328|11223344556677885f5f5f5f5f 64 gnu shrq %cl,(%rax) -48d328|11223344556677885f5f5f5f5f 64 intel shr qword ptr [rax], cl -48d328|11223344556677885f5f5f5f5f 64 plan9 SHRQ CL, 0(AX) -48d338|11223344556677885f5f5f5f5f 64 gnu sarq %cl,(%rax) -48d338|11223344556677885f5f5f5f5f 64 intel sar qword ptr [rax], cl -48d338|11223344556677885f5f5f5f5f 64 plan9 SARQ CL, 0(AX) -48d7|11223344556677885f5f5f5f5f5f 64 gnu xlat %ds:(%rbx) -48d7|11223344556677885f5f5f5f5f5f 64 intel xlat -48d7|11223344556677885f5f5f5f5f5f 64 plan9 XLATB DS:0(BX) -48e511|223344556677885f5f5f5f5f5f 64 gnu in $0x11,%eax -48e511|223344556677885f5f5f5f5f5f 64 intel in eax, 0x11 -48e511|223344556677885f5f5f5f5f5f 64 plan9 INQ $0x11, AX -48e711|223344556677885f5f5f5f5f5f 64 gnu out %eax,$0x11 -48e711|223344556677885f5f5f5f5f5f 64 intel out 0x11, eax -48e711|223344556677885f5f5f5f5f5f 64 plan9 OUTQ AX, $0x11 -48e811223344|556677885f5f5f5f5f5f 64 gnu callq .+0x44332211 -48e811223344|556677885f5f5f5f5f5f 64 intel call .+0x44332211 -48e811223344|556677885f5f5f5f5f5f 64 plan9 CALL .+1144201745 -48e911223344|556677885f5f5f5f5f5f 64 gnu jmpq .+0x44332211 -48e911223344|556677885f5f5f5f5f5f 64 intel jmp .+0x44332211 -48e911223344|556677885f5f5f5f5f5f 64 plan9 JMP .+1144201745 -48ed|11223344556677885f5f5f5f5f5f 64 gnu in (%dx),%eax -48ed|11223344556677885f5f5f5f5f5f 64 intel in eax, dx -48ed|11223344556677885f5f5f5f5f5f 64 plan9 INQ DX, AX -48ef|11223344556677885f5f5f5f5f5f 64 gnu out %eax,(%dx) -48ef|11223344556677885f5f5f5f5f5f 64 intel out dx, eax -48ef|11223344556677885f5f5f5f5f5f 64 plan9 OUTQ AX, DX -48f70011223344|556677885f5f5f5f5f 64 gnu testq $0x44332211,(%rax) -48f70011223344|556677885f5f5f5f5f 64 intel test qword ptr [rax], 0x44332211 -48f70011223344|556677885f5f5f5f5f 64 plan9 TESTQ $0x44332211, 0(AX) -48f711|223344556677885f5f5f5f5f5f 64 gnu notq (%rcx) -48f711|223344556677885f5f5f5f5f5f 64 intel not qword ptr [rcx] -48f711|223344556677885f5f5f5f5f5f 64 plan9 NOTQ 0(CX) -48f718|11223344556677885f5f5f5f5f 64 gnu negq (%rax) -48f718|11223344556677885f5f5f5f5f 64 intel neg qword ptr [rax] -48f718|11223344556677885f5f5f5f5f 64 plan9 NEGQ 0(AX) -48f720|11223344556677885f5f5f5f5f 64 gnu mulq (%rax) -48f720|11223344556677885f5f5f5f5f 64 intel mul qword ptr [rax] -48f720|11223344556677885f5f5f5f5f 64 plan9 MULQ 0(AX) -48f728|11223344556677885f5f5f5f5f 64 gnu imulq (%rax) -48f728|11223344556677885f5f5f5f5f 64 intel imul qword ptr [rax] -48f728|11223344556677885f5f5f5f5f 64 plan9 IMULQ 0(AX) -48f730|11223344556677885f5f5f5f5f 64 gnu divq (%rax) -48f730|11223344556677885f5f5f5f5f 64 intel div qword ptr [rax] -48f730|11223344556677885f5f5f5f5f 64 plan9 DIVQ 0(AX) -48f738|11223344556677885f5f5f5f5f 64 gnu idivq (%rax) -48f738|11223344556677885f5f5f5f5f 64 intel idiv qword ptr [rax] -48f738|11223344556677885f5f5f5f5f 64 plan9 IDIVQ 0(AX) -48ff00|11223344556677885f5f5f5f5f 64 gnu incq (%rax) -48ff00|11223344556677885f5f5f5f5f 64 intel inc qword ptr [rax] -48ff00|11223344556677885f5f5f5f5f 64 plan9 INCQ 0(AX) -48ff08|11223344556677885f5f5f5f5f 64 gnu decq (%rax) -48ff08|11223344556677885f5f5f5f5f 64 intel dec qword ptr [rax] -48ff08|11223344556677885f5f5f5f5f 64 plan9 DECQ 0(AX) -48ff18|11223344556677885f5f5f5f5f 64 gnu lcallq *(%rax) -48ff18|11223344556677885f5f5f5f5f 64 intel call far ptr [rax] -48ff18|11223344556677885f5f5f5f5f 64 plan9 LCALL 0(AX) -48ff28|11223344556677885f5f5f5f5f 64 gnu ljmpq *(%rax) -48ff28|11223344556677885f5f5f5f5f 64 intel jmp far ptr [rax] -48ff28|11223344556677885f5f5f5f5f 64 plan9 LJMP 0(AX) -48ff30|11223344556677885f5f5f5f5f 64 gnu pushq (%rax) -48ff30|11223344556677885f5f5f5f5f 64 intel push qword ptr [rax] -48ff30|11223344556677885f5f5f5f5f 64 plan9 PUSHQ 0(AX) -48|010011223344556677885f5f5f5f5f 32 intel dec eax -48|010011223344556677885f5f5f5f5f 32 plan9 DECL AX -50|11223344556677885f5f5f5f5f5f5f 32 intel push eax -50|11223344556677885f5f5f5f5f5f5f 32 plan9 PUSHL AX -50|11223344556677885f5f5f5f5f5f5f 64 gnu push %rax -50|11223344556677885f5f5f5f5f5f5f 64 intel push rax -50|11223344556677885f5f5f5f5f5f5f 64 plan9 PUSHL AX -58|11223344556677885f5f5f5f5f5f5f 32 intel pop eax -58|11223344556677885f5f5f5f5f5f5f 32 plan9 POPL AX -58|11223344556677885f5f5f5f5f5f5f 64 gnu pop %rax -58|11223344556677885f5f5f5f5f5f5f 64 intel pop rax -58|11223344556677885f5f5f5f5f5f5f 64 plan9 POPL AX -60|11223344556677885f5f5f5f5f5f5f 32 intel pushad -60|11223344556677885f5f5f5f5f5f5f 32 plan9 PUSHAD -60|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction -60|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction -60|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction -61|11223344556677885f5f5f5f5f5f5f 32 intel popad -61|11223344556677885f5f5f5f5f5f5f 32 plan9 POPAD -61|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction -61|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction -61|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction -6211|223344556677885f5f5f5f5f5f5f 32 intel bound edx, qword ptr [ecx] -6211|223344556677885f5f5f5f5f5f5f 32 plan9 BOUND 0(CX), DX -62|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction -62|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction -62|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction -6311|223344556677885f5f5f5f5f5f5f 32 intel arpl word ptr [ecx], dx -6311|223344556677885f5f5f5f5f5f5f 32 plan9 ARPL DX, 0(CX) -6311|223344556677885f5f5f5f5f5f5f 64 gnu movsxd (%rcx),%edx -6311|223344556677885f5f5f5f5f5f5f 64 intel movsxd edx, dword ptr [rcx] -6311|223344556677885f5f5f5f5f5f5f 64 plan9 MOVSXD 0(CX), DX -660111|223344556677885f5f5f5f5f5f 32 intel add word ptr [ecx], dx -660111|223344556677885f5f5f5f5f5f 32 plan9 ADDW DX, 0(CX) -660111|223344556677885f5f5f5f5f5f 64 gnu add %dx,(%rcx) -660111|223344556677885f5f5f5f5f5f 64 intel add word ptr [rcx], dx -660111|223344556677885f5f5f5f5f5f 64 plan9 ADDW DX, 0(CX) -660311|223344556677885f5f5f5f5f5f 32 intel add dx, word ptr [ecx] -660311|223344556677885f5f5f5f5f5f 32 plan9 ADDW 0(CX), DX -660311|223344556677885f5f5f5f5f5f 64 gnu add (%rcx),%dx -660311|223344556677885f5f5f5f5f5f 64 intel add dx, word ptr [rcx] -660311|223344556677885f5f5f5f5f5f 64 plan9 ADDW 0(CX), DX -66051122|3344556677885f5f5f5f5f5f 32 intel add ax, 0x2211 -66051122|3344556677885f5f5f5f5f5f 32 plan9 ADDW $0x2211, AX -66051122|3344556677885f5f5f5f5f5f 64 gnu add $0x2211,%ax -66051122|3344556677885f5f5f5f5f5f 64 intel add ax, 0x2211 -66051122|3344556677885f5f5f5f5f5f 64 plan9 ADDW $0x2211, AX -660911|223344556677885f5f5f5f5f5f 32 intel or word ptr [ecx], dx -660911|223344556677885f5f5f5f5f5f 32 plan9 ORW DX, 0(CX) -660911|223344556677885f5f5f5f5f5f 64 gnu or %dx,(%rcx) -660911|223344556677885f5f5f5f5f5f 64 intel or word ptr [rcx], dx -660911|223344556677885f5f5f5f5f5f 64 plan9 ORW DX, 0(CX) -660b11|223344556677885f5f5f5f5f5f 32 intel or dx, word ptr [ecx] -660b11|223344556677885f5f5f5f5f5f 32 plan9 ORW 0(CX), DX -660b11|223344556677885f5f5f5f5f5f 64 gnu or (%rcx),%dx -660b11|223344556677885f5f5f5f5f5f 64 intel or dx, word ptr [rcx] -660b11|223344556677885f5f5f5f5f5f 64 plan9 ORW 0(CX), DX -660d1122|3344556677885f5f5f5f5f5f 32 intel or ax, 0x2211 -660d1122|3344556677885f5f5f5f5f5f 32 plan9 ORW $0x2211, AX -660d1122|3344556677885f5f5f5f5f5f 64 gnu or $0x2211,%ax -660d1122|3344556677885f5f5f5f5f5f 64 intel or ax, 0x2211 -660d1122|3344556677885f5f5f5f5f5f 64 plan9 ORW $0x2211, AX -660f0000|11223344556677885f5f5f5f 32 intel sldt word ptr [eax] -660f0000|11223344556677885f5f5f5f 32 plan9 SLDT 0(AX) -660f0000|11223344556677885f5f5f5f 64 gnu data16 sldt (%rax) -660f0000|11223344556677885f5f5f5f 64 intel sldt word ptr [rax] -660f0000|11223344556677885f5f5f5f 64 plan9 SLDT 0(AX) -660f0008|11223344556677885f5f5f5f 32 intel str word ptr [eax] -660f0008|11223344556677885f5f5f5f 32 plan9 STR 0(AX) -660f0008|11223344556677885f5f5f5f 64 gnu data16 str (%rax) -660f0008|11223344556677885f5f5f5f 64 intel str word ptr [rax] -660f0008|11223344556677885f5f5f5f 64 plan9 STR 0(AX) -660f01a611223344|556677885f5f5f5f 32 intel smsw word ptr [esi+0x44332211] -660f01a611223344|556677885f5f5f5f 32 plan9 SMSW 0x44332211(SI) -660f01a611223344|556677885f5f5f5f 64 gnu data16 smsw 0x44332211(%rsi) -660f01a611223344|556677885f5f5f5f 64 intel smsw word ptr [rsi+0x44332211] -660f01a611223344|556677885f5f5f5f 64 plan9 SMSW 0x44332211(SI) -660f0211|223344556677885f5f5f5f5f 32 intel lar dx, word ptr [ecx] -660f0211|223344556677885f5f5f5f5f 32 plan9 LAR 0(CX), DX -660f0211|223344556677885f5f5f5f5f 64 gnu lar (%rcx),%dx -660f0211|223344556677885f5f5f5f5f 64 intel lar dx, word ptr [rcx] -660f0211|223344556677885f5f5f5f5f 64 plan9 LAR 0(CX), DX -660f0311|223344556677885f5f5f5f5f 32 intel lsl dx, word ptr [ecx] -660f0311|223344556677885f5f5f5f5f 32 plan9 LSL 0(CX), DX -660f0311|223344556677885f5f5f5f5f 64 gnu lsl (%rcx),%dx -660f0311|223344556677885f5f5f5f5f 64 intel lsl dx, word ptr [rcx] -660f0311|223344556677885f5f5f5f5f 64 plan9 LSL 0(CX), DX -660f1011|223344556677885f5f5f5f5f 32 intel movupd xmm2, xmmword ptr [ecx] -660f1011|223344556677885f5f5f5f5f 32 plan9 MOVUPD 0(CX), X2 -660f1011|223344556677885f5f5f5f5f 64 gnu movupd (%rcx),%xmm2 -660f1011|223344556677885f5f5f5f5f 64 intel movupd xmm2, xmmword ptr [rcx] -660f1011|223344556677885f5f5f5f5f 64 plan9 MOVUPD 0(CX), X2 -660f1122|3344556677885f5f5f5f5f5f 32 intel movupd xmmword ptr [edx], xmm4 -660f1122|3344556677885f5f5f5f5f5f 32 plan9 MOVUPD X4, 0(DX) -660f1122|3344556677885f5f5f5f5f5f 64 gnu movupd %xmm4,(%rdx) -660f1122|3344556677885f5f5f5f5f5f 64 intel movupd xmmword ptr [rdx], xmm4 -660f1122|3344556677885f5f5f5f5f5f 64 plan9 MOVUPD X4, 0(DX) -660f1211|223344556677885f5f5f5f5f 32 intel movlpd xmm2, qword ptr [ecx] -660f1211|223344556677885f5f5f5f5f 32 plan9 MOVLPD 0(CX), X2 -660f1211|223344556677885f5f5f5f5f 64 gnu movlpd (%rcx),%xmm2 -660f1211|223344556677885f5f5f5f5f 64 intel movlpd xmm2, qword ptr [rcx] -660f1211|223344556677885f5f5f5f5f 64 plan9 MOVLPD 0(CX), X2 -660f1311|223344556677885f5f5f5f5f 32 intel movlpd qword ptr [ecx], xmm2 -660f1311|223344556677885f5f5f5f5f 32 plan9 MOVLPD X2, 0(CX) -660f1311|223344556677885f5f5f5f5f 64 gnu movlpd %xmm2,(%rcx) -660f1311|223344556677885f5f5f5f5f 64 intel movlpd qword ptr [rcx], xmm2 -660f1311|223344556677885f5f5f5f5f 64 plan9 MOVLPD X2, 0(CX) -660f1411|223344556677885f5f5f5f5f 32 intel unpcklpd xmm2, xmmword ptr [ecx] -660f1411|223344556677885f5f5f5f5f 32 plan9 UNPCKLPD 0(CX), X2 -660f1411|223344556677885f5f5f5f5f 64 gnu unpcklpd (%rcx),%xmm2 -660f1411|223344556677885f5f5f5f5f 64 intel unpcklpd xmm2, xmmword ptr [rcx] -660f1411|223344556677885f5f5f5f5f 64 plan9 UNPCKLPD 0(CX), X2 -660f1511|223344556677885f5f5f5f5f 32 intel unpckhpd xmm2, xmmword ptr [ecx] -660f1511|223344556677885f5f5f5f5f 32 plan9 UNPCKHPD 0(CX), X2 -660f1511|223344556677885f5f5f5f5f 64 gnu unpckhpd (%rcx),%xmm2 -660f1511|223344556677885f5f5f5f5f 64 intel unpckhpd xmm2, xmmword ptr [rcx] -660f1511|223344556677885f5f5f5f5f 64 plan9 UNPCKHPD 0(CX), X2 -660f1611|223344556677885f5f5f5f5f 32 intel movhpd xmm2, qword ptr [ecx] -660f1611|223344556677885f5f5f5f5f 32 plan9 MOVHPD 0(CX), X2 -660f1611|223344556677885f5f5f5f5f 64 gnu movhpd (%rcx),%xmm2 -660f1611|223344556677885f5f5f5f5f 64 intel movhpd xmm2, qword ptr [rcx] -660f1611|223344556677885f5f5f5f5f 64 plan9 MOVHPD 0(CX), X2 -660f1711|223344556677885f5f5f5f5f 32 intel movhpd qword ptr [ecx], xmm2 -660f1711|223344556677885f5f5f5f5f 32 plan9 MOVHPD X2, 0(CX) -660f1711|223344556677885f5f5f5f5f 64 gnu movhpd %xmm2,(%rcx) -660f1711|223344556677885f5f5f5f5f 64 intel movhpd qword ptr [rcx], xmm2 -660f1711|223344556677885f5f5f5f5f 64 plan9 MOVHPD X2, 0(CX) -660f1f00|11223344556677885f5f5f5f 32 intel nop word ptr [eax], ax -660f1f00|11223344556677885f5f5f5f 32 plan9 NOPW 0(AX) -660f1f00|11223344556677885f5f5f5f 64 gnu nopw (%rax) -660f1f00|11223344556677885f5f5f5f 64 intel nop word ptr [rax], ax -660f1f00|11223344556677885f5f5f5f 64 plan9 NOPW 0(AX) -660f2811|223344556677885f5f5f5f5f 32 intel movapd xmm2, xmmword ptr [ecx] -660f2811|223344556677885f5f5f5f5f 32 plan9 MOVAPD 0(CX), X2 -660f2811|223344556677885f5f5f5f5f 64 gnu movapd (%rcx),%xmm2 -660f2811|223344556677885f5f5f5f5f 64 intel movapd xmm2, xmmword ptr [rcx] -660f2811|223344556677885f5f5f5f5f 64 plan9 MOVAPD 0(CX), X2 -660f2911|223344556677885f5f5f5f5f 32 intel movapd xmmword ptr [ecx], xmm2 -660f2911|223344556677885f5f5f5f5f 32 plan9 MOVAPD X2, 0(CX) -660f2911|223344556677885f5f5f5f5f 64 gnu movapd %xmm2,(%rcx) -660f2911|223344556677885f5f5f5f5f 64 intel movapd xmmword ptr [rcx], xmm2 -660f2911|223344556677885f5f5f5f5f 64 plan9 MOVAPD X2, 0(CX) -660f2a11|223344556677885f5f5f5f5f 32 intel cvtpi2pd xmm2, qword ptr [ecx] -660f2a11|223344556677885f5f5f5f5f 32 plan9 CVTPI2PD 0(CX), X2 -660f2a11|223344556677885f5f5f5f5f 64 gnu cvtpi2pd (%rcx),%xmm2 -660f2a11|223344556677885f5f5f5f5f 64 intel cvtpi2pd xmm2, qword ptr [rcx] -660f2a11|223344556677885f5f5f5f5f 64 plan9 CVTPI2PD 0(CX), X2 -660f2b11|223344556677885f5f5f5f5f 32 intel movntpd xmmword ptr [ecx], xmm2 -660f2b11|223344556677885f5f5f5f5f 32 plan9 MOVNTPD X2, 0(CX) -660f2b11|223344556677885f5f5f5f5f 64 gnu movntpd %xmm2,(%rcx) -660f2b11|223344556677885f5f5f5f5f 64 intel movntpd xmmword ptr [rcx], xmm2 -660f2b11|223344556677885f5f5f5f5f 64 plan9 MOVNTPD X2, 0(CX) -660f2c11|223344556677885f5f5f5f5f 32 intel cvttpd2pi mmx2, xmmword ptr [ecx] -660f2c11|223344556677885f5f5f5f5f 32 plan9 CVTTPD2PI 0(CX), M2 -660f2c11|223344556677885f5f5f5f5f 64 gnu cvttpd2pi (%rcx),%mm2 -660f2c11|223344556677885f5f5f5f5f 64 intel cvttpd2pi mmx2, xmmword ptr [rcx] -660f2c11|223344556677885f5f5f5f5f 64 plan9 CVTTPD2PI 0(CX), M2 -660f2d11|223344556677885f5f5f5f5f 32 intel cvtpd2pi mmx2, xmmword ptr [ecx] -660f2d11|223344556677885f5f5f5f5f 32 plan9 CVTPD2PI 0(CX), M2 -660f2d11|223344556677885f5f5f5f5f 64 gnu cvtpd2pi (%rcx),%mm2 -660f2d11|223344556677885f5f5f5f5f 64 intel cvtpd2pi mmx2, xmmword ptr [rcx] -660f2d11|223344556677885f5f5f5f5f 64 plan9 CVTPD2PI 0(CX), M2 -660f2e11|223344556677885f5f5f5f5f 32 intel ucomisd xmm2, qword ptr [ecx] -660f2e11|223344556677885f5f5f5f5f 32 plan9 UCOMISD 0(CX), X2 -660f2e11|223344556677885f5f5f5f5f 64 gnu ucomisd (%rcx),%xmm2 -660f2e11|223344556677885f5f5f5f5f 64 intel ucomisd xmm2, qword ptr [rcx] -660f2e11|223344556677885f5f5f5f5f 64 plan9 UCOMISD 0(CX), X2 -660f2f11|223344556677885f5f5f5f5f 32 intel comisd xmm2, qword ptr [ecx] -660f2f11|223344556677885f5f5f5f5f 32 plan9 COMISD 0(CX), X2 -660f2f11|223344556677885f5f5f5f5f 64 gnu comisd (%rcx),%xmm2 -660f2f11|223344556677885f5f5f5f5f 64 intel comisd xmm2, qword ptr [rcx] -660f2f11|223344556677885f5f5f5f5f 64 plan9 COMISD 0(CX), X2 -660f380011|223344556677885f5f5f5f 32 intel pshufb xmm2, xmmword ptr [ecx] -660f380011|223344556677885f5f5f5f 32 plan9 PSHUFB 0(CX), X2 -660f380011|223344556677885f5f5f5f 64 gnu pshufb (%rcx),%xmm2 -660f380011|223344556677885f5f5f5f 64 intel pshufb xmm2, xmmword ptr [rcx] -660f380011|223344556677885f5f5f5f 64 plan9 PSHUFB 0(CX), X2 -660f380111|223344556677885f5f5f5f 32 intel phaddw xmm2, xmmword ptr [ecx] -660f380111|223344556677885f5f5f5f 32 plan9 PHADDW 0(CX), X2 -660f380111|223344556677885f5f5f5f 64 gnu phaddw (%rcx),%xmm2 -660f380111|223344556677885f5f5f5f 64 intel phaddw xmm2, xmmword ptr [rcx] -660f380111|223344556677885f5f5f5f 64 plan9 PHADDW 0(CX), X2 -660f380211|223344556677885f5f5f5f 32 intel phaddd xmm2, xmmword ptr [ecx] -660f380211|223344556677885f5f5f5f 32 plan9 PHADDD 0(CX), X2 -660f380211|223344556677885f5f5f5f 64 gnu phaddd (%rcx),%xmm2 -660f380211|223344556677885f5f5f5f 64 intel phaddd xmm2, xmmword ptr [rcx] -660f380211|223344556677885f5f5f5f 64 plan9 PHADDD 0(CX), X2 -660f380311|223344556677885f5f5f5f 32 intel phaddsw xmm2, xmmword ptr [ecx] -660f380311|223344556677885f5f5f5f 32 plan9 PHADDSW 0(CX), X2 -660f380311|223344556677885f5f5f5f 64 gnu phaddsw (%rcx),%xmm2 -660f380311|223344556677885f5f5f5f 64 intel phaddsw xmm2, xmmword ptr [rcx] -660f380311|223344556677885f5f5f5f 64 plan9 PHADDSW 0(CX), X2 -660f380411|223344556677885f5f5f5f 32 intel pmaddubsw xmm2, xmmword ptr [ecx] -660f380411|223344556677885f5f5f5f 32 plan9 PMADDUBSW 0(CX), X2 -660f380411|223344556677885f5f5f5f 64 gnu pmaddubsw (%rcx),%xmm2 -660f380411|223344556677885f5f5f5f 64 intel pmaddubsw xmm2, xmmword ptr [rcx] -660f380411|223344556677885f5f5f5f 64 plan9 PMADDUBSW 0(CX), X2 -660f380511|223344556677885f5f5f5f 32 intel phsubw xmm2, xmmword ptr [ecx] -660f380511|223344556677885f5f5f5f 32 plan9 PHSUBW 0(CX), X2 -660f380511|223344556677885f5f5f5f 64 gnu phsubw (%rcx),%xmm2 -660f380511|223344556677885f5f5f5f 64 intel phsubw xmm2, xmmword ptr [rcx] -660f380511|223344556677885f5f5f5f 64 plan9 PHSUBW 0(CX), X2 -660f380611|223344556677885f5f5f5f 32 intel phsubd xmm2, xmmword ptr [ecx] -660f380611|223344556677885f5f5f5f 32 plan9 PHSUBD 0(CX), X2 -660f380611|223344556677885f5f5f5f 64 gnu phsubd (%rcx),%xmm2 -660f380611|223344556677885f5f5f5f 64 intel phsubd xmm2, xmmword ptr [rcx] -660f380611|223344556677885f5f5f5f 64 plan9 PHSUBD 0(CX), X2 -660f380711|223344556677885f5f5f5f 32 intel phsubsw xmm2, xmmword ptr [ecx] -660f380711|223344556677885f5f5f5f 32 plan9 PHSUBSW 0(CX), X2 -660f380711|223344556677885f5f5f5f 64 gnu phsubsw (%rcx),%xmm2 -660f380711|223344556677885f5f5f5f 64 intel phsubsw xmm2, xmmword ptr [rcx] -660f380711|223344556677885f5f5f5f 64 plan9 PHSUBSW 0(CX), X2 -660f380811|223344556677885f5f5f5f 32 intel psignb xmm2, xmmword ptr [ecx] -660f380811|223344556677885f5f5f5f 32 plan9 PSIGNB 0(CX), X2 -660f380811|223344556677885f5f5f5f 64 gnu psignb (%rcx),%xmm2 -660f380811|223344556677885f5f5f5f 64 intel psignb xmm2, xmmword ptr [rcx] -660f380811|223344556677885f5f5f5f 64 plan9 PSIGNB 0(CX), X2 -660f380911|223344556677885f5f5f5f 32 intel psignw xmm2, xmmword ptr [ecx] -660f380911|223344556677885f5f5f5f 32 plan9 PSIGNW 0(CX), X2 -660f380911|223344556677885f5f5f5f 64 gnu psignw (%rcx),%xmm2 -660f380911|223344556677885f5f5f5f 64 intel psignw xmm2, xmmword ptr [rcx] -660f380911|223344556677885f5f5f5f 64 plan9 PSIGNW 0(CX), X2 -660f380a11|223344556677885f5f5f5f 32 intel psignd xmm2, xmmword ptr [ecx] -660f380a11|223344556677885f5f5f5f 32 plan9 PSIGND 0(CX), X2 -660f380a11|223344556677885f5f5f5f 64 gnu psignd (%rcx),%xmm2 -660f380a11|223344556677885f5f5f5f 64 intel psignd xmm2, xmmword ptr [rcx] -660f380a11|223344556677885f5f5f5f 64 plan9 PSIGND 0(CX), X2 -660f380b11|223344556677885f5f5f5f 32 intel pmulhrsw xmm2, xmmword ptr [ecx] -660f380b11|223344556677885f5f5f5f 32 plan9 PMULHRSW 0(CX), X2 -660f380b11|223344556677885f5f5f5f 64 gnu pmulhrsw (%rcx),%xmm2 -660f380b11|223344556677885f5f5f5f 64 intel pmulhrsw xmm2, xmmword ptr [rcx] -660f380b11|223344556677885f5f5f5f 64 plan9 PMULHRSW 0(CX), X2 -660f381011|223344556677885f5f5f5f 32 intel pblendvb xmm2, xmmword ptr [ecx] -660f381011|223344556677885f5f5f5f 32 plan9 PBLENDVB X0, 0(CX), X2 -660f381011|223344556677885f5f5f5f 64 gnu pblendvb %xmm0,(%rcx),%xmm2 -660f381011|223344556677885f5f5f5f 64 intel pblendvb xmm2, xmmword ptr [rcx] -660f381011|223344556677885f5f5f5f 64 plan9 PBLENDVB X0, 0(CX), X2 -660f381411|223344556677885f5f5f5f 32 intel blendvps xmm2, xmmword ptr [ecx] -660f381411|223344556677885f5f5f5f 32 plan9 BLENDVPS X0, 0(CX), X2 -660f381411|223344556677885f5f5f5f 64 gnu blendvps %xmm0,(%rcx),%xmm2 -660f381411|223344556677885f5f5f5f 64 intel blendvps xmm2, xmmword ptr [rcx] -660f381411|223344556677885f5f5f5f 64 plan9 BLENDVPS X0, 0(CX), X2 -660f381511|223344556677885f5f5f5f 32 intel blendvpd xmm2, xmmword ptr [ecx] -660f381511|223344556677885f5f5f5f 32 plan9 BLENDVPD X0, 0(CX), X2 -660f381511|223344556677885f5f5f5f 64 gnu blendvpd %xmm0,(%rcx),%xmm2 -660f381511|223344556677885f5f5f5f 64 intel blendvpd xmm2, xmmword ptr [rcx] -660f381511|223344556677885f5f5f5f 64 plan9 BLENDVPD X0, 0(CX), X2 -660f381711|223344556677885f5f5f5f 32 intel ptest xmm2, xmmword ptr [ecx] -660f381711|223344556677885f5f5f5f 32 plan9 PTEST 0(CX), X2 -660f381711|223344556677885f5f5f5f 64 gnu ptest (%rcx),%xmm2 -660f381711|223344556677885f5f5f5f 64 intel ptest xmm2, xmmword ptr [rcx] -660f381711|223344556677885f5f5f5f 64 plan9 PTEST 0(CX), X2 -660f381c11|223344556677885f5f5f5f 32 intel pabsb xmm2, xmmword ptr [ecx] -660f381c11|223344556677885f5f5f5f 32 plan9 PABSB 0(CX), X2 -660f381c11|223344556677885f5f5f5f 64 gnu pabsb (%rcx),%xmm2 -660f381c11|223344556677885f5f5f5f 64 intel pabsb xmm2, xmmword ptr [rcx] -660f381c11|223344556677885f5f5f5f 64 plan9 PABSB 0(CX), X2 -660f381d11|223344556677885f5f5f5f 32 intel pabsw xmm2, xmmword ptr [ecx] -660f381d11|223344556677885f5f5f5f 32 plan9 PABSW 0(CX), X2 -660f381d11|223344556677885f5f5f5f 64 gnu pabsw (%rcx),%xmm2 -660f381d11|223344556677885f5f5f5f 64 intel pabsw xmm2, xmmword ptr [rcx] -660f381d11|223344556677885f5f5f5f 64 plan9 PABSW 0(CX), X2 -660f381e11|223344556677885f5f5f5f 32 intel pabsd xmm2, xmmword ptr [ecx] -660f381e11|223344556677885f5f5f5f 32 plan9 PABSD 0(CX), X2 -660f381e11|223344556677885f5f5f5f 64 gnu pabsd (%rcx),%xmm2 -660f381e11|223344556677885f5f5f5f 64 intel pabsd xmm2, xmmword ptr [rcx] -660f381e11|223344556677885f5f5f5f 64 plan9 PABSD 0(CX), X2 -660f382011|223344556677885f5f5f5f 32 intel pmovsxbw xmm2, qword ptr [ecx] -660f382011|223344556677885f5f5f5f 32 plan9 PMOVSXBW 0(CX), X2 -660f382011|223344556677885f5f5f5f 64 gnu pmovsxbw (%rcx),%xmm2 -660f382011|223344556677885f5f5f5f 64 intel pmovsxbw xmm2, qword ptr [rcx] -660f382011|223344556677885f5f5f5f 64 plan9 PMOVSXBW 0(CX), X2 -660f382111|223344556677885f5f5f5f 32 intel pmovsxbd xmm2, dword ptr [ecx] -660f382111|223344556677885f5f5f5f 32 plan9 PMOVSXBD 0(CX), X2 -660f382111|223344556677885f5f5f5f 64 gnu pmovsxbd (%rcx),%xmm2 -660f382111|223344556677885f5f5f5f 64 intel pmovsxbd xmm2, dword ptr [rcx] -660f382111|223344556677885f5f5f5f 64 plan9 PMOVSXBD 0(CX), X2 -660f382211|223344556677885f5f5f5f 32 intel pmovsxbq xmm2, word ptr [ecx] -660f382211|223344556677885f5f5f5f 32 plan9 PMOVSXBQ 0(CX), X2 -660f382211|223344556677885f5f5f5f 64 gnu pmovsxbq (%rcx),%xmm2 -660f382211|223344556677885f5f5f5f 64 intel pmovsxbq xmm2, word ptr [rcx] -660f382211|223344556677885f5f5f5f 64 plan9 PMOVSXBQ 0(CX), X2 -660f382311|223344556677885f5f5f5f 32 intel pmovsxwd xmm2, qword ptr [ecx] -660f382311|223344556677885f5f5f5f 32 plan9 PMOVSXWD 0(CX), X2 -660f382311|223344556677885f5f5f5f 64 gnu pmovsxwd (%rcx),%xmm2 -660f382311|223344556677885f5f5f5f 64 intel pmovsxwd xmm2, qword ptr [rcx] -660f382311|223344556677885f5f5f5f 64 plan9 PMOVSXWD 0(CX), X2 -660f382411|223344556677885f5f5f5f 32 intel pmovsxwq xmm2, dword ptr [ecx] -660f382411|223344556677885f5f5f5f 32 plan9 PMOVSXWQ 0(CX), X2 -660f382411|223344556677885f5f5f5f 64 gnu pmovsxwq (%rcx),%xmm2 -660f382411|223344556677885f5f5f5f 64 intel pmovsxwq xmm2, dword ptr [rcx] -660f382411|223344556677885f5f5f5f 64 plan9 PMOVSXWQ 0(CX), X2 -660f382511|223344556677885f5f5f5f 32 intel pmovsxdq xmm2, qword ptr [ecx] -660f382511|223344556677885f5f5f5f 32 plan9 PMOVSXDQ 0(CX), X2 -660f382511|223344556677885f5f5f5f 64 gnu pmovsxdq (%rcx),%xmm2 -660f382511|223344556677885f5f5f5f 64 intel pmovsxdq xmm2, qword ptr [rcx] -660f382511|223344556677885f5f5f5f 64 plan9 PMOVSXDQ 0(CX), X2 -660f382811|223344556677885f5f5f5f 32 intel pmuldq xmm2, xmmword ptr [ecx] -660f382811|223344556677885f5f5f5f 32 plan9 PMULDQ 0(CX), X2 -660f382811|223344556677885f5f5f5f 64 gnu pmuldq (%rcx),%xmm2 -660f382811|223344556677885f5f5f5f 64 intel pmuldq xmm2, xmmword ptr [rcx] -660f382811|223344556677885f5f5f5f 64 plan9 PMULDQ 0(CX), X2 -660f382911|223344556677885f5f5f5f 32 intel pcmpeqq xmm2, xmmword ptr [ecx] -660f382911|223344556677885f5f5f5f 32 plan9 PCMPEQQ 0(CX), X2 -660f382911|223344556677885f5f5f5f 64 gnu pcmpeqq (%rcx),%xmm2 -660f382911|223344556677885f5f5f5f 64 intel pcmpeqq xmm2, xmmword ptr [rcx] -660f382911|223344556677885f5f5f5f 64 plan9 PCMPEQQ 0(CX), X2 -660f382a11|223344556677885f5f5f5f 32 intel movntdqa xmm2, xmmword ptr [ecx] -660f382a11|223344556677885f5f5f5f 32 plan9 MOVNTDQA 0(CX), X2 -660f382a11|223344556677885f5f5f5f 64 gnu movntdqa (%rcx),%xmm2 -660f382a11|223344556677885f5f5f5f 64 intel movntdqa xmm2, xmmword ptr [rcx] -660f382a11|223344556677885f5f5f5f 64 plan9 MOVNTDQA 0(CX), X2 -660f382b11|223344556677885f5f5f5f 32 intel packusdw xmm2, xmmword ptr [ecx] -660f382b11|223344556677885f5f5f5f 32 plan9 PACKUSDW 0(CX), X2 -660f382b11|223344556677885f5f5f5f 64 gnu packusdw (%rcx),%xmm2 -660f382b11|223344556677885f5f5f5f 64 intel packusdw xmm2, xmmword ptr [rcx] -660f382b11|223344556677885f5f5f5f 64 plan9 PACKUSDW 0(CX), X2 -660f383011|223344556677885f5f5f5f 32 intel pmovzxbw xmm2, qword ptr [ecx] -660f383011|223344556677885f5f5f5f 32 plan9 PMOVZXBW 0(CX), X2 -660f383011|223344556677885f5f5f5f 64 gnu pmovzxbw (%rcx),%xmm2 -660f383011|223344556677885f5f5f5f 64 intel pmovzxbw xmm2, qword ptr [rcx] -660f383011|223344556677885f5f5f5f 64 plan9 PMOVZXBW 0(CX), X2 -660f383111|223344556677885f5f5f5f 32 intel pmovzxbd xmm2, dword ptr [ecx] -660f383111|223344556677885f5f5f5f 32 plan9 PMOVZXBD 0(CX), X2 -660f383111|223344556677885f5f5f5f 64 gnu pmovzxbd (%rcx),%xmm2 -660f383111|223344556677885f5f5f5f 64 intel pmovzxbd xmm2, dword ptr [rcx] -660f383111|223344556677885f5f5f5f 64 plan9 PMOVZXBD 0(CX), X2 -660f383211|223344556677885f5f5f5f 32 intel pmovzxbq xmm2, word ptr [ecx] -660f383211|223344556677885f5f5f5f 32 plan9 PMOVZXBQ 0(CX), X2 -660f383211|223344556677885f5f5f5f 64 gnu pmovzxbq (%rcx),%xmm2 -660f383211|223344556677885f5f5f5f 64 intel pmovzxbq xmm2, word ptr [rcx] -660f383211|223344556677885f5f5f5f 64 plan9 PMOVZXBQ 0(CX), X2 -660f383311|223344556677885f5f5f5f 32 intel pmovzxwd xmm2, qword ptr [ecx] -660f383311|223344556677885f5f5f5f 32 plan9 PMOVZXWD 0(CX), X2 -660f383311|223344556677885f5f5f5f 64 gnu pmovzxwd (%rcx),%xmm2 -660f383311|223344556677885f5f5f5f 64 intel pmovzxwd xmm2, qword ptr [rcx] -660f383311|223344556677885f5f5f5f 64 plan9 PMOVZXWD 0(CX), X2 -660f383411|223344556677885f5f5f5f 32 intel pmovzxwq xmm2, dword ptr [ecx] -660f383411|223344556677885f5f5f5f 32 plan9 PMOVZXWQ 0(CX), X2 -660f383411|223344556677885f5f5f5f 64 gnu pmovzxwq (%rcx),%xmm2 -660f383411|223344556677885f5f5f5f 64 intel pmovzxwq xmm2, dword ptr [rcx] -660f383411|223344556677885f5f5f5f 64 plan9 PMOVZXWQ 0(CX), X2 -660f383511|223344556677885f5f5f5f 32 intel pmovzxdq xmm2, qword ptr [ecx] -660f383511|223344556677885f5f5f5f 32 plan9 PMOVZXDQ 0(CX), X2 -660f383511|223344556677885f5f5f5f 64 gnu pmovzxdq (%rcx),%xmm2 -660f383511|223344556677885f5f5f5f 64 intel pmovzxdq xmm2, qword ptr [rcx] -660f383511|223344556677885f5f5f5f 64 plan9 PMOVZXDQ 0(CX), X2 -660f383711|223344556677885f5f5f5f 32 intel pcmpgtq xmm2, xmmword ptr [ecx] -660f383711|223344556677885f5f5f5f 32 plan9 PCMPGTQ 0(CX), X2 -660f383711|223344556677885f5f5f5f 64 gnu pcmpgtq (%rcx),%xmm2 -660f383711|223344556677885f5f5f5f 64 intel pcmpgtq xmm2, xmmword ptr [rcx] -660f383711|223344556677885f5f5f5f 64 plan9 PCMPGTQ 0(CX), X2 -660f383811|223344556677885f5f5f5f 32 intel pminsb xmm2, xmmword ptr [ecx] -660f383811|223344556677885f5f5f5f 32 plan9 PMINSB 0(CX), X2 -660f383811|223344556677885f5f5f5f 64 gnu pminsb (%rcx),%xmm2 -660f383811|223344556677885f5f5f5f 64 intel pminsb xmm2, xmmword ptr [rcx] -660f383811|223344556677885f5f5f5f 64 plan9 PMINSB 0(CX), X2 -660f383911|223344556677885f5f5f5f 32 intel pminsd xmm2, xmmword ptr [ecx] -660f383911|223344556677885f5f5f5f 32 plan9 PMINSD 0(CX), X2 -660f383911|223344556677885f5f5f5f 64 gnu pminsd (%rcx),%xmm2 -660f383911|223344556677885f5f5f5f 64 intel pminsd xmm2, xmmword ptr [rcx] -660f383911|223344556677885f5f5f5f 64 plan9 PMINSD 0(CX), X2 -660f383a11|223344556677885f5f5f5f 32 intel pminuw xmm2, xmmword ptr [ecx] -660f383a11|223344556677885f5f5f5f 32 plan9 PMINUW 0(CX), X2 -660f383a11|223344556677885f5f5f5f 64 gnu pminuw (%rcx),%xmm2 -660f383a11|223344556677885f5f5f5f 64 intel pminuw xmm2, xmmword ptr [rcx] -660f383a11|223344556677885f5f5f5f 64 plan9 PMINUW 0(CX), X2 -660f383b11|223344556677885f5f5f5f 32 intel pminud xmm2, xmmword ptr [ecx] -660f383b11|223344556677885f5f5f5f 32 plan9 PMINUD 0(CX), X2 -660f383b11|223344556677885f5f5f5f 64 gnu pminud (%rcx),%xmm2 -660f383b11|223344556677885f5f5f5f 64 intel pminud xmm2, xmmword ptr [rcx] -660f383b11|223344556677885f5f5f5f 64 plan9 PMINUD 0(CX), X2 -660f383c11|223344556677885f5f5f5f 32 intel pmaxsb xmm2, xmmword ptr [ecx] -660f383c11|223344556677885f5f5f5f 32 plan9 PMAXSB 0(CX), X2 -660f383c11|223344556677885f5f5f5f 64 gnu pmaxsb (%rcx),%xmm2 -660f383c11|223344556677885f5f5f5f 64 intel pmaxsb xmm2, xmmword ptr [rcx] -660f383c11|223344556677885f5f5f5f 64 plan9 PMAXSB 0(CX), X2 -660f383d11|223344556677885f5f5f5f 32 intel pmaxsd xmm2, xmmword ptr [ecx] -660f383d11|223344556677885f5f5f5f 32 plan9 PMAXSD 0(CX), X2 -660f383d11|223344556677885f5f5f5f 64 gnu pmaxsd (%rcx),%xmm2 -660f383d11|223344556677885f5f5f5f 64 intel pmaxsd xmm2, xmmword ptr [rcx] -660f383d11|223344556677885f5f5f5f 64 plan9 PMAXSD 0(CX), X2 -660f383e11|223344556677885f5f5f5f 32 intel pmaxuw xmm2, xmmword ptr [ecx] -660f383e11|223344556677885f5f5f5f 32 plan9 PMAXUW 0(CX), X2 -660f383e11|223344556677885f5f5f5f 64 gnu pmaxuw (%rcx),%xmm2 -660f383e11|223344556677885f5f5f5f 64 intel pmaxuw xmm2, xmmword ptr [rcx] -660f383e11|223344556677885f5f5f5f 64 plan9 PMAXUW 0(CX), X2 -660f383f11|223344556677885f5f5f5f 32 intel pmaxud xmm2, xmmword ptr [ecx] -660f383f11|223344556677885f5f5f5f 32 plan9 PMAXUD 0(CX), X2 -660f383f11|223344556677885f5f5f5f 64 gnu pmaxud (%rcx),%xmm2 -660f383f11|223344556677885f5f5f5f 64 intel pmaxud xmm2, xmmword ptr [rcx] -660f383f11|223344556677885f5f5f5f 64 plan9 PMAXUD 0(CX), X2 -660f384011|223344556677885f5f5f5f 32 intel pmulld xmm2, xmmword ptr [ecx] -660f384011|223344556677885f5f5f5f 32 plan9 PMULLD 0(CX), X2 -660f384011|223344556677885f5f5f5f 64 gnu pmulld (%rcx),%xmm2 -660f384011|223344556677885f5f5f5f 64 intel pmulld xmm2, xmmword ptr [rcx] -660f384011|223344556677885f5f5f5f 64 plan9 PMULLD 0(CX), X2 -660f384111|223344556677885f5f5f5f 32 intel phminposuw xmm2, xmmword ptr [ecx] -660f384111|223344556677885f5f5f5f 32 plan9 PHMINPOSUW 0(CX), X2 -660f384111|223344556677885f5f5f5f 64 gnu phminposuw (%rcx),%xmm2 -660f384111|223344556677885f5f5f5f 64 intel phminposuw xmm2, xmmword ptr [rcx] -660f384111|223344556677885f5f5f5f 64 plan9 PHMINPOSUW 0(CX), X2 -660f388211|223344556677885f5f5f5f 32 intel invpcid edx, xmmword ptr [ecx] -660f388211|223344556677885f5f5f5f 32 plan9 INVPCID 0(CX), DX -660f388211|223344556677885f5f5f5f 64 gnu invpcid (%rcx),%rdx -660f388211|223344556677885f5f5f5f 64 intel invpcid rdx, xmmword ptr [rcx] -660f388211|223344556677885f5f5f5f 64 plan9 INVPCID 0(CX), DX -660f38db11|223344556677885f5f5f5f 32 intel aesimc xmm2, xmmword ptr [ecx] -660f38db11|223344556677885f5f5f5f 32 plan9 AESIMC 0(CX), X2 -660f38db11|223344556677885f5f5f5f 64 gnu aesimc (%rcx),%xmm2 -660f38db11|223344556677885f5f5f5f 64 intel aesimc xmm2, xmmword ptr [rcx] -660f38db11|223344556677885f5f5f5f 64 plan9 AESIMC 0(CX), X2 -660f38dc11|223344556677885f5f5f5f 32 intel aesenc xmm2, xmmword ptr [ecx] -660f38dc11|223344556677885f5f5f5f 32 plan9 AESENC 0(CX), X2 -660f38dc11|223344556677885f5f5f5f 64 gnu aesenc (%rcx),%xmm2 -660f38dc11|223344556677885f5f5f5f 64 intel aesenc xmm2, xmmword ptr [rcx] -660f38dc11|223344556677885f5f5f5f 64 plan9 AESENC 0(CX), X2 -660f38dd11|223344556677885f5f5f5f 32 intel aesenclast xmm2, xmmword ptr [ecx] -660f38dd11|223344556677885f5f5f5f 32 plan9 AESENCLAST 0(CX), X2 -660f38dd11|223344556677885f5f5f5f 64 gnu aesenclast (%rcx),%xmm2 -660f38dd11|223344556677885f5f5f5f 64 intel aesenclast xmm2, xmmword ptr [rcx] -660f38dd11|223344556677885f5f5f5f 64 plan9 AESENCLAST 0(CX), X2 -660f38de11|223344556677885f5f5f5f 32 intel aesdec xmm2, xmmword ptr [ecx] -660f38de11|223344556677885f5f5f5f 32 plan9 AESDEC 0(CX), X2 -660f38de11|223344556677885f5f5f5f 64 gnu aesdec (%rcx),%xmm2 -660f38de11|223344556677885f5f5f5f 64 intel aesdec xmm2, xmmword ptr [rcx] -660f38de11|223344556677885f5f5f5f 64 plan9 AESDEC 0(CX), X2 -660f38df11|223344556677885f5f5f5f 32 intel aesdeclast xmm2, xmmword ptr [ecx] -660f38df11|223344556677885f5f5f5f 32 plan9 AESDECLAST 0(CX), X2 -660f38df11|223344556677885f5f5f5f 64 gnu aesdeclast (%rcx),%xmm2 -660f38df11|223344556677885f5f5f5f 64 intel aesdeclast xmm2, xmmword ptr [rcx] -660f38df11|223344556677885f5f5f5f 64 plan9 AESDECLAST 0(CX), X2 -660f3a081122|3344556677885f5f5f5f 32 intel roundps xmm2, xmmword ptr [ecx], 0x22 -660f3a081122|3344556677885f5f5f5f 32 plan9 ROUNDPS $0x22, 0(CX), X2 -660f3a081122|3344556677885f5f5f5f 64 gnu roundps $0x22,(%rcx),%xmm2 -660f3a081122|3344556677885f5f5f5f 64 intel roundps xmm2, xmmword ptr [rcx], 0x22 -660f3a081122|3344556677885f5f5f5f 64 plan9 ROUNDPS $0x22, 0(CX), X2 -660f3a091122|3344556677885f5f5f5f 32 intel roundpd xmm2, xmmword ptr [ecx], 0x22 -660f3a091122|3344556677885f5f5f5f 32 plan9 ROUNDPD $0x22, 0(CX), X2 -660f3a091122|3344556677885f5f5f5f 64 gnu roundpd $0x22,(%rcx),%xmm2 -660f3a091122|3344556677885f5f5f5f 64 intel roundpd xmm2, xmmword ptr [rcx], 0x22 -660f3a091122|3344556677885f5f5f5f 64 plan9 ROUNDPD $0x22, 0(CX), X2 -660f3a0a1122|3344556677885f5f5f5f 32 intel roundss xmm2, dword ptr [ecx], 0x22 -660f3a0a1122|3344556677885f5f5f5f 32 plan9 ROUNDSS $0x22, 0(CX), X2 -660f3a0a1122|3344556677885f5f5f5f 64 gnu roundss $0x22,(%rcx),%xmm2 -660f3a0a1122|3344556677885f5f5f5f 64 intel roundss xmm2, dword ptr [rcx], 0x22 -660f3a0a1122|3344556677885f5f5f5f 64 plan9 ROUNDSS $0x22, 0(CX), X2 -660f3a0b1122|3344556677885f5f5f5f 32 intel roundsd xmm2, qword ptr [ecx], 0x22 -660f3a0b1122|3344556677885f5f5f5f 32 plan9 ROUNDSD $0x22, 0(CX), X2 -660f3a0b1122|3344556677885f5f5f5f 64 gnu roundsd $0x22,(%rcx),%xmm2 -660f3a0b1122|3344556677885f5f5f5f 64 intel roundsd xmm2, qword ptr [rcx], 0x22 -660f3a0b1122|3344556677885f5f5f5f 64 plan9 ROUNDSD $0x22, 0(CX), X2 -660f3a0c1122|3344556677885f5f5f5f 32 intel blendps xmm2, xmmword ptr [ecx], 0x22 -660f3a0c1122|3344556677885f5f5f5f 32 plan9 BLENDPS $0x22, 0(CX), X2 -660f3a0c1122|3344556677885f5f5f5f 64 gnu blendps $0x22,(%rcx),%xmm2 -660f3a0c1122|3344556677885f5f5f5f 64 intel blendps xmm2, xmmword ptr [rcx], 0x22 -660f3a0c1122|3344556677885f5f5f5f 64 plan9 BLENDPS $0x22, 0(CX), X2 -660f3a0d1122|3344556677885f5f5f5f 32 intel blendpd xmm2, xmmword ptr [ecx], 0x22 -660f3a0d1122|3344556677885f5f5f5f 32 plan9 BLENDPD $0x22, 0(CX), X2 -660f3a0d1122|3344556677885f5f5f5f 64 gnu blendpd $0x22,(%rcx),%xmm2 -660f3a0d1122|3344556677885f5f5f5f 64 intel blendpd xmm2, xmmword ptr [rcx], 0x22 -660f3a0d1122|3344556677885f5f5f5f 64 plan9 BLENDPD $0x22, 0(CX), X2 -660f3a0e1122|3344556677885f5f5f5f 32 intel pblendw xmm2, xmmword ptr [ecx], 0x22 -660f3a0e1122|3344556677885f5f5f5f 32 plan9 PBLENDW $0x22, 0(CX), X2 -660f3a0e1122|3344556677885f5f5f5f 64 gnu pblendw $0x22,(%rcx),%xmm2 -660f3a0e1122|3344556677885f5f5f5f 64 intel pblendw xmm2, xmmword ptr [rcx], 0x22 -660f3a0e1122|3344556677885f5f5f5f 64 plan9 PBLENDW $0x22, 0(CX), X2 -660f3a0f1122|3344556677885f5f5f5f 32 intel palignr xmm2, xmmword ptr [ecx], 0x22 -660f3a0f1122|3344556677885f5f5f5f 32 plan9 PALIGNR $0x22, 0(CX), X2 -660f3a0f1122|3344556677885f5f5f5f 64 gnu palignr $0x22,(%rcx),%xmm2 -660f3a0f1122|3344556677885f5f5f5f 64 intel palignr xmm2, xmmword ptr [rcx], 0x22 -660f3a0f1122|3344556677885f5f5f5f 64 plan9 PALIGNR $0x22, 0(CX), X2 -660f3a141122|3344556677885f5f5f5f 32 intel pextrb byte ptr [ecx], xmm2, 0x22 -660f3a141122|3344556677885f5f5f5f 32 plan9 PEXTRB $0x22, X2, 0(CX) -660f3a141122|3344556677885f5f5f5f 64 gnu pextrb $0x22,%xmm2,(%rcx) -660f3a141122|3344556677885f5f5f5f 64 intel pextrb byte ptr [rcx], xmm2, 0x22 -660f3a141122|3344556677885f5f5f5f 64 plan9 PEXTRB $0x22, X2, 0(CX) -660f3a151122|3344556677885f5f5f5f 32 intel pextrw word ptr [ecx], xmm2, 0x22 -660f3a151122|3344556677885f5f5f5f 32 plan9 PEXTRW $0x22, X2, 0(CX) -660f3a151122|3344556677885f5f5f5f 64 gnu pextrw $0x22,%xmm2,(%rcx) -660f3a151122|3344556677885f5f5f5f 64 intel pextrw word ptr [rcx], xmm2, 0x22 -660f3a151122|3344556677885f5f5f5f 64 plan9 PEXTRW $0x22, X2, 0(CX) -660f3a161122|3344556677885f5f5f5f 32 intel pextrd dword ptr [ecx], xmm2, 0x22 -660f3a161122|3344556677885f5f5f5f 32 plan9 PEXTRD $0x22, X2, 0(CX) -660f3a161122|3344556677885f5f5f5f 64 gnu pextrd $0x22,%xmm2,(%rcx) -660f3a161122|3344556677885f5f5f5f 64 intel pextrd dword ptr [rcx], xmm2, 0x22 -660f3a161122|3344556677885f5f5f5f 64 plan9 PEXTRD $0x22, X2, 0(CX) -660f3a171122|3344556677885f5f5f5f 32 intel extractps dword ptr [ecx], xmm2, 0x22 -660f3a171122|3344556677885f5f5f5f 32 plan9 EXTRACTPS $0x22, X2, 0(CX) -660f3a171122|3344556677885f5f5f5f 64 gnu extractps $0x22,%xmm2,(%rcx) -660f3a171122|3344556677885f5f5f5f 64 intel extractps dword ptr [rcx], xmm2, 0x22 -660f3a171122|3344556677885f5f5f5f 64 plan9 EXTRACTPS $0x22, X2, 0(CX) -660f3a201122|3344556677885f5f5f5f 32 intel pinsrb xmm2, byte ptr [ecx], 0x22 -660f3a201122|3344556677885f5f5f5f 32 plan9 PINSRB $0x22, 0(CX), X2 -660f3a201122|3344556677885f5f5f5f 64 gnu pinsrb $0x22,(%rcx),%xmm2 -660f3a201122|3344556677885f5f5f5f 64 intel pinsrb xmm2, byte ptr [rcx], 0x22 -660f3a201122|3344556677885f5f5f5f 64 plan9 PINSRB $0x22, 0(CX), X2 -660f3a211122|3344556677885f5f5f5f 32 intel insertps xmm2, dword ptr [ecx], 0x22 -660f3a211122|3344556677885f5f5f5f 32 plan9 INSERTPS $0x22, 0(CX), X2 -660f3a211122|3344556677885f5f5f5f 64 gnu insertps $0x22,(%rcx),%xmm2 -660f3a211122|3344556677885f5f5f5f 64 intel insertps xmm2, dword ptr [rcx], 0x22 -660f3a211122|3344556677885f5f5f5f 64 plan9 INSERTPS $0x22, 0(CX), X2 -660f3a221122|3344556677885f5f5f5f 32 intel pinsrd xmm2, dword ptr [ecx], 0x22 -660f3a221122|3344556677885f5f5f5f 32 plan9 PINSRD $0x22, 0(CX), X2 -660f3a221122|3344556677885f5f5f5f 64 gnu pinsrd $0x22,(%rcx),%xmm2 -660f3a221122|3344556677885f5f5f5f 64 intel pinsrd xmm2, dword ptr [rcx], 0x22 -660f3a221122|3344556677885f5f5f5f 64 plan9 PINSRD $0x22, 0(CX), X2 -660f3a401122|3344556677885f5f5f5f 32 intel dpps xmm2, xmmword ptr [ecx], 0x22 -660f3a401122|3344556677885f5f5f5f 32 plan9 DPPS $0x22, 0(CX), X2 -660f3a401122|3344556677885f5f5f5f 64 gnu dpps $0x22,(%rcx),%xmm2 -660f3a401122|3344556677885f5f5f5f 64 intel dpps xmm2, xmmword ptr [rcx], 0x22 -660f3a401122|3344556677885f5f5f5f 64 plan9 DPPS $0x22, 0(CX), X2 -660f3a411122|3344556677885f5f5f5f 32 intel dppd xmm2, xmmword ptr [ecx], 0x22 -660f3a411122|3344556677885f5f5f5f 32 plan9 DPPD $0x22, 0(CX), X2 -660f3a411122|3344556677885f5f5f5f 64 gnu dppd $0x22,(%rcx),%xmm2 -660f3a411122|3344556677885f5f5f5f 64 intel dppd xmm2, xmmword ptr [rcx], 0x22 -660f3a411122|3344556677885f5f5f5f 64 plan9 DPPD $0x22, 0(CX), X2 -660f3a421122|3344556677885f5f5f5f 32 intel mpsadbw xmm2, xmmword ptr [ecx], 0x22 -660f3a421122|3344556677885f5f5f5f 32 plan9 MPSADBW $0x22, 0(CX), X2 -660f3a421122|3344556677885f5f5f5f 64 gnu mpsadbw $0x22,(%rcx),%xmm2 -660f3a421122|3344556677885f5f5f5f 64 intel mpsadbw xmm2, xmmword ptr [rcx], 0x22 -660f3a421122|3344556677885f5f5f5f 64 plan9 MPSADBW $0x22, 0(CX), X2 -660f3a441122|3344556677885f5f5f5f 32 intel pclmulqdq xmm2, xmmword ptr [ecx], 0x22 -660f3a441122|3344556677885f5f5f5f 32 plan9 PCLMULQDQ $0x22, 0(CX), X2 -660f3a441122|3344556677885f5f5f5f 64 gnu pclmulqdq $0x22,(%rcx),%xmm2 -660f3a441122|3344556677885f5f5f5f 64 intel pclmulqdq xmm2, xmmword ptr [rcx], 0x22 -660f3a441122|3344556677885f5f5f5f 64 plan9 PCLMULQDQ $0x22, 0(CX), X2 -660f3a601122|3344556677885f5f5f5f 32 intel pcmpestrm xmm2, xmmword ptr [ecx], 0x22 -660f3a601122|3344556677885f5f5f5f 32 plan9 PCMPESTRM $0x22, 0(CX), X2 -660f3a601122|3344556677885f5f5f5f 64 gnu pcmpestrm $0x22,(%rcx),%xmm2 -660f3a601122|3344556677885f5f5f5f 64 intel pcmpestrm xmm2, xmmword ptr [rcx], 0x22 -660f3a601122|3344556677885f5f5f5f 64 plan9 PCMPESTRM $0x22, 0(CX), X2 -660f3a611122|3344556677885f5f5f5f 32 intel pcmpestri xmm2, xmmword ptr [ecx], 0x22 -660f3a611122|3344556677885f5f5f5f 32 plan9 PCMPESTRI $0x22, 0(CX), X2 -660f3a611122|3344556677885f5f5f5f 64 gnu pcmpestri $0x22,(%rcx),%xmm2 -660f3a611122|3344556677885f5f5f5f 64 intel pcmpestri xmm2, xmmword ptr [rcx], 0x22 -660f3a611122|3344556677885f5f5f5f 64 plan9 PCMPESTRI $0x22, 0(CX), X2 -660f3a621122|3344556677885f5f5f5f 32 intel pcmpistrm xmm2, xmmword ptr [ecx], 0x22 -660f3a621122|3344556677885f5f5f5f 32 plan9 PCMPISTRM $0x22, 0(CX), X2 -660f3a621122|3344556677885f5f5f5f 64 gnu pcmpistrm $0x22,(%rcx),%xmm2 -660f3a621122|3344556677885f5f5f5f 64 intel pcmpistrm xmm2, xmmword ptr [rcx], 0x22 -660f3a621122|3344556677885f5f5f5f 64 plan9 PCMPISTRM $0x22, 0(CX), X2 -660f3a631122|3344556677885f5f5f5f 32 intel pcmpistri xmm2, xmmword ptr [ecx], 0x22 -660f3a631122|3344556677885f5f5f5f 32 plan9 PCMPISTRI $0x22, 0(CX), X2 -660f3a631122|3344556677885f5f5f5f 64 gnu pcmpistri $0x22,(%rcx),%xmm2 -660f3a631122|3344556677885f5f5f5f 64 intel pcmpistri xmm2, xmmword ptr [rcx], 0x22 -660f3a631122|3344556677885f5f5f5f 64 plan9 PCMPISTRI $0x22, 0(CX), X2 -660f3adf1122|3344556677885f5f5f5f 32 intel aeskeygenassist xmm2, xmmword ptr [ecx], 0x22 -660f3adf1122|3344556677885f5f5f5f 32 plan9 AESKEYGENASSIST $0x22, 0(CX), X2 -660f3adf1122|3344556677885f5f5f5f 64 gnu aeskeygenassist $0x22,(%rcx),%xmm2 -660f3adf1122|3344556677885f5f5f5f 64 intel aeskeygenassist xmm2, xmmword ptr [rcx], 0x22 -660f3adf1122|3344556677885f5f5f5f 64 plan9 AESKEYGENASSIST $0x22, 0(CX), X2 -660f4011|223344556677885f5f5f5f5f 32 intel cmovo dx, word ptr [ecx] -660f4011|223344556677885f5f5f5f5f 32 plan9 CMOVO 0(CX), DX -660f4011|223344556677885f5f5f5f5f 64 gnu cmovo (%rcx),%dx -660f4011|223344556677885f5f5f5f5f 64 intel cmovo dx, word ptr [rcx] -660f4011|223344556677885f5f5f5f5f 64 plan9 CMOVO 0(CX), DX -660f4111|223344556677885f5f5f5f5f 32 intel cmovno dx, word ptr [ecx] -660f4111|223344556677885f5f5f5f5f 32 plan9 CMOVNO 0(CX), DX -660f4111|223344556677885f5f5f5f5f 64 gnu cmovno (%rcx),%dx -660f4111|223344556677885f5f5f5f5f 64 intel cmovno dx, word ptr [rcx] -660f4111|223344556677885f5f5f5f5f 64 plan9 CMOVNO 0(CX), DX -660f4211|223344556677885f5f5f5f5f 32 intel cmovb dx, word ptr [ecx] -660f4211|223344556677885f5f5f5f5f 32 plan9 CMOVB 0(CX), DX -660f4211|223344556677885f5f5f5f5f 64 gnu cmovb (%rcx),%dx -660f4211|223344556677885f5f5f5f5f 64 intel cmovb dx, word ptr [rcx] -660f4211|223344556677885f5f5f5f5f 64 plan9 CMOVB 0(CX), DX -660f4311|223344556677885f5f5f5f5f 32 intel cmovnb dx, word ptr [ecx] -660f4311|223344556677885f5f5f5f5f 32 plan9 CMOVAE 0(CX), DX -660f4311|223344556677885f5f5f5f5f 64 gnu cmovae (%rcx),%dx -660f4311|223344556677885f5f5f5f5f 64 intel cmovnb dx, word ptr [rcx] -660f4311|223344556677885f5f5f5f5f 64 plan9 CMOVAE 0(CX), DX -660f4411|223344556677885f5f5f5f5f 32 intel cmovz dx, word ptr [ecx] -660f4411|223344556677885f5f5f5f5f 32 plan9 CMOVE 0(CX), DX -660f4411|223344556677885f5f5f5f5f 64 gnu cmove (%rcx),%dx -660f4411|223344556677885f5f5f5f5f 64 intel cmovz dx, word ptr [rcx] -660f4411|223344556677885f5f5f5f5f 64 plan9 CMOVE 0(CX), DX -660f4511|223344556677885f5f5f5f5f 32 intel cmovnz dx, word ptr [ecx] -660f4511|223344556677885f5f5f5f5f 32 plan9 CMOVNE 0(CX), DX -660f4511|223344556677885f5f5f5f5f 64 gnu cmovne (%rcx),%dx -660f4511|223344556677885f5f5f5f5f 64 intel cmovnz dx, word ptr [rcx] -660f4511|223344556677885f5f5f5f5f 64 plan9 CMOVNE 0(CX), DX -660f4611|223344556677885f5f5f5f5f 32 intel cmovbe dx, word ptr [ecx] -660f4611|223344556677885f5f5f5f5f 32 plan9 CMOVBE 0(CX), DX -660f4611|223344556677885f5f5f5f5f 64 gnu cmovbe (%rcx),%dx -660f4611|223344556677885f5f5f5f5f 64 intel cmovbe dx, word ptr [rcx] -660f4611|223344556677885f5f5f5f5f 64 plan9 CMOVBE 0(CX), DX -660f4711|223344556677885f5f5f5f5f 32 intel cmovnbe dx, word ptr [ecx] -660f4711|223344556677885f5f5f5f5f 32 plan9 CMOVA 0(CX), DX -660f4711|223344556677885f5f5f5f5f 64 gnu cmova (%rcx),%dx -660f4711|223344556677885f5f5f5f5f 64 intel cmovnbe dx, word ptr [rcx] -660f4711|223344556677885f5f5f5f5f 64 plan9 CMOVA 0(CX), DX -660f4811|223344556677885f5f5f5f5f 32 intel cmovs dx, word ptr [ecx] -660f4811|223344556677885f5f5f5f5f 32 plan9 CMOVS 0(CX), DX -660f4811|223344556677885f5f5f5f5f 64 gnu cmovs (%rcx),%dx -660f4811|223344556677885f5f5f5f5f 64 intel cmovs dx, word ptr [rcx] -660f4811|223344556677885f5f5f5f5f 64 plan9 CMOVS 0(CX), DX -660f4911|223344556677885f5f5f5f5f 32 intel cmovns dx, word ptr [ecx] -660f4911|223344556677885f5f5f5f5f 32 plan9 CMOVNS 0(CX), DX -660f4911|223344556677885f5f5f5f5f 64 gnu cmovns (%rcx),%dx -660f4911|223344556677885f5f5f5f5f 64 intel cmovns dx, word ptr [rcx] -660f4911|223344556677885f5f5f5f5f 64 plan9 CMOVNS 0(CX), DX -660f4a11|223344556677885f5f5f5f5f 32 intel cmovp dx, word ptr [ecx] -660f4a11|223344556677885f5f5f5f5f 32 plan9 CMOVP 0(CX), DX -660f4a11|223344556677885f5f5f5f5f 64 gnu cmovp (%rcx),%dx -660f4a11|223344556677885f5f5f5f5f 64 intel cmovp dx, word ptr [rcx] -660f4a11|223344556677885f5f5f5f5f 64 plan9 CMOVP 0(CX), DX -660f4b11|223344556677885f5f5f5f5f 32 intel cmovnp dx, word ptr [ecx] -660f4b11|223344556677885f5f5f5f5f 32 plan9 CMOVNP 0(CX), DX -660f4b11|223344556677885f5f5f5f5f 64 gnu cmovnp (%rcx),%dx -660f4b11|223344556677885f5f5f5f5f 64 intel cmovnp dx, word ptr [rcx] -660f4b11|223344556677885f5f5f5f5f 64 plan9 CMOVNP 0(CX), DX -660f4c11|223344556677885f5f5f5f5f 32 intel cmovl dx, word ptr [ecx] -660f4c11|223344556677885f5f5f5f5f 32 plan9 CMOVL 0(CX), DX -660f4c11|223344556677885f5f5f5f5f 64 gnu cmovl (%rcx),%dx -660f4c11|223344556677885f5f5f5f5f 64 intel cmovl dx, word ptr [rcx] -660f4c11|223344556677885f5f5f5f5f 64 plan9 CMOVL 0(CX), DX -660f4d11|223344556677885f5f5f5f5f 32 intel cmovnl dx, word ptr [ecx] -660f4d11|223344556677885f5f5f5f5f 32 plan9 CMOVGE 0(CX), DX -660f4d11|223344556677885f5f5f5f5f 64 gnu cmovge (%rcx),%dx -660f4d11|223344556677885f5f5f5f5f 64 intel cmovnl dx, word ptr [rcx] -660f4d11|223344556677885f5f5f5f5f 64 plan9 CMOVGE 0(CX), DX -660f4e11|223344556677885f5f5f5f5f 32 intel cmovle dx, word ptr [ecx] -660f4e11|223344556677885f5f5f5f5f 32 plan9 CMOVLE 0(CX), DX -660f4e11|223344556677885f5f5f5f5f 64 gnu cmovle (%rcx),%dx -660f4e11|223344556677885f5f5f5f5f 64 intel cmovle dx, word ptr [rcx] -660f4e11|223344556677885f5f5f5f5f 64 plan9 CMOVLE 0(CX), DX -660f4f11|223344556677885f5f5f5f5f 32 intel cmovnle dx, word ptr [ecx] -660f4f11|223344556677885f5f5f5f5f 32 plan9 CMOVG 0(CX), DX -660f4f11|223344556677885f5f5f5f5f 64 gnu cmovg (%rcx),%dx -660f4f11|223344556677885f5f5f5f5f 64 intel cmovnle dx, word ptr [rcx] -660f4f11|223344556677885f5f5f5f5f 64 plan9 CMOVG 0(CX), DX -660f50c0|11223344556677885f5f5f5f 32 intel movmskpd eax, xmm0 -660f50c0|11223344556677885f5f5f5f 32 plan9 MOVMSKPD X0, AX -660f50c0|11223344556677885f5f5f5f 64 gnu movmskpd %xmm0,%eax -660f50c0|11223344556677885f5f5f5f 64 intel movmskpd eax, xmm0 -660f50c0|11223344556677885f5f5f5f 64 plan9 MOVMSKPD X0, AX -660f5111|223344556677885f5f5f5f5f 32 intel sqrtpd xmm2, xmmword ptr [ecx] -660f5111|223344556677885f5f5f5f5f 32 plan9 SQRTPD 0(CX), X2 -660f5111|223344556677885f5f5f5f5f 64 gnu sqrtpd (%rcx),%xmm2 -660f5111|223344556677885f5f5f5f5f 64 intel sqrtpd xmm2, xmmword ptr [rcx] -660f5111|223344556677885f5f5f5f5f 64 plan9 SQRTPD 0(CX), X2 -660f5411|223344556677885f5f5f5f5f 32 intel andpd xmm2, xmmword ptr [ecx] -660f5411|223344556677885f5f5f5f5f 32 plan9 ANDPD 0(CX), X2 -660f5411|223344556677885f5f5f5f5f 64 gnu andpd (%rcx),%xmm2 -660f5411|223344556677885f5f5f5f5f 64 intel andpd xmm2, xmmword ptr [rcx] -660f5411|223344556677885f5f5f5f5f 64 plan9 ANDPD 0(CX), X2 -660f5511|223344556677885f5f5f5f5f 32 intel andnpd xmm2, xmmword ptr [ecx] -660f5511|223344556677885f5f5f5f5f 32 plan9 ANDNPD 0(CX), X2 -660f5511|223344556677885f5f5f5f5f 64 gnu andnpd (%rcx),%xmm2 -660f5511|223344556677885f5f5f5f5f 64 intel andnpd xmm2, xmmword ptr [rcx] -660f5511|223344556677885f5f5f5f5f 64 plan9 ANDNPD 0(CX), X2 -660f5611|223344556677885f5f5f5f5f 32 intel orpd xmm2, xmmword ptr [ecx] -660f5611|223344556677885f5f5f5f5f 32 plan9 ORPD 0(CX), X2 -660f5611|223344556677885f5f5f5f5f 64 gnu orpd (%rcx),%xmm2 -660f5611|223344556677885f5f5f5f5f 64 intel orpd xmm2, xmmword ptr [rcx] -660f5611|223344556677885f5f5f5f5f 64 plan9 ORPD 0(CX), X2 -660f5711|223344556677885f5f5f5f5f 32 intel xorpd xmm2, xmmword ptr [ecx] -660f5711|223344556677885f5f5f5f5f 32 plan9 XORPD 0(CX), X2 -660f5711|223344556677885f5f5f5f5f 64 gnu xorpd (%rcx),%xmm2 -660f5711|223344556677885f5f5f5f5f 64 intel xorpd xmm2, xmmword ptr [rcx] -660f5711|223344556677885f5f5f5f5f 64 plan9 XORPD 0(CX), X2 -660f5811|223344556677885f5f5f5f5f 32 intel addpd xmm2, xmmword ptr [ecx] -660f5811|223344556677885f5f5f5f5f 32 plan9 ADDPD 0(CX), X2 -660f5811|223344556677885f5f5f5f5f 64 gnu addpd (%rcx),%xmm2 -660f5811|223344556677885f5f5f5f5f 64 intel addpd xmm2, xmmword ptr [rcx] -660f5811|223344556677885f5f5f5f5f 64 plan9 ADDPD 0(CX), X2 -660f5911|223344556677885f5f5f5f5f 32 intel mulpd xmm2, xmmword ptr [ecx] -660f5911|223344556677885f5f5f5f5f 32 plan9 MULPD 0(CX), X2 -660f5911|223344556677885f5f5f5f5f 64 gnu mulpd (%rcx),%xmm2 -660f5911|223344556677885f5f5f5f5f 64 intel mulpd xmm2, xmmword ptr [rcx] -660f5911|223344556677885f5f5f5f5f 64 plan9 MULPD 0(CX), X2 -660f5a11|223344556677885f5f5f5f5f 32 intel cvtpd2ps xmm2, xmmword ptr [ecx] -660f5a11|223344556677885f5f5f5f5f 32 plan9 CVTPD2PS 0(CX), X2 -660f5a11|223344556677885f5f5f5f5f 64 gnu cvtpd2ps (%rcx),%xmm2 -660f5a11|223344556677885f5f5f5f5f 64 intel cvtpd2ps xmm2, xmmword ptr [rcx] -660f5a11|223344556677885f5f5f5f5f 64 plan9 CVTPD2PS 0(CX), X2 -660f5b11|223344556677885f5f5f5f5f 32 intel cvtps2dq xmm2, xmmword ptr [ecx] -660f5b11|223344556677885f5f5f5f5f 32 plan9 CVTPS2DQ 0(CX), X2 -660f5b11|223344556677885f5f5f5f5f 64 gnu cvtps2dq (%rcx),%xmm2 -660f5b11|223344556677885f5f5f5f5f 64 intel cvtps2dq xmm2, xmmword ptr [rcx] -660f5b11|223344556677885f5f5f5f5f 64 plan9 CVTPS2DQ 0(CX), X2 -660f5c11|223344556677885f5f5f5f5f 32 intel subpd xmm2, xmmword ptr [ecx] -660f5c11|223344556677885f5f5f5f5f 32 plan9 SUBPD 0(CX), X2 -660f5c11|223344556677885f5f5f5f5f 64 gnu subpd (%rcx),%xmm2 -660f5c11|223344556677885f5f5f5f5f 64 intel subpd xmm2, xmmword ptr [rcx] -660f5c11|223344556677885f5f5f5f5f 64 plan9 SUBPD 0(CX), X2 -660f5d11|223344556677885f5f5f5f5f 32 intel minpd xmm2, xmmword ptr [ecx] -660f5d11|223344556677885f5f5f5f5f 32 plan9 MINPD 0(CX), X2 -660f5d11|223344556677885f5f5f5f5f 64 gnu minpd (%rcx),%xmm2 -660f5d11|223344556677885f5f5f5f5f 64 intel minpd xmm2, xmmword ptr [rcx] -660f5d11|223344556677885f5f5f5f5f 64 plan9 MINPD 0(CX), X2 -660f5e11|223344556677885f5f5f5f5f 32 intel divpd xmm2, xmmword ptr [ecx] -660f5e11|223344556677885f5f5f5f5f 32 plan9 DIVPD 0(CX), X2 -660f5e11|223344556677885f5f5f5f5f 64 gnu divpd (%rcx),%xmm2 -660f5e11|223344556677885f5f5f5f5f 64 intel divpd xmm2, xmmword ptr [rcx] -660f5e11|223344556677885f5f5f5f5f 64 plan9 DIVPD 0(CX), X2 -660f5f11|223344556677885f5f5f5f5f 32 intel maxpd xmm2, xmmword ptr [ecx] -660f5f11|223344556677885f5f5f5f5f 32 plan9 MAXPD 0(CX), X2 -660f5f11|223344556677885f5f5f5f5f 64 gnu maxpd (%rcx),%xmm2 -660f5f11|223344556677885f5f5f5f5f 64 intel maxpd xmm2, xmmword ptr [rcx] -660f5f11|223344556677885f5f5f5f5f 64 plan9 MAXPD 0(CX), X2 -660f6011|223344556677885f5f5f5f5f 32 intel punpcklbw xmm2, xmmword ptr [ecx] -660f6011|223344556677885f5f5f5f5f 32 plan9 PUNPCKLBW 0(CX), X2 -660f6011|223344556677885f5f5f5f5f 64 gnu punpcklbw (%rcx),%xmm2 -660f6011|223344556677885f5f5f5f5f 64 intel punpcklbw xmm2, xmmword ptr [rcx] -660f6011|223344556677885f5f5f5f5f 64 plan9 PUNPCKLBW 0(CX), X2 -660f6111|223344556677885f5f5f5f5f 32 intel punpcklwd xmm2, xmmword ptr [ecx] -660f6111|223344556677885f5f5f5f5f 32 plan9 PUNPCKLWD 0(CX), X2 -660f6111|223344556677885f5f5f5f5f 64 gnu punpcklwd (%rcx),%xmm2 -660f6111|223344556677885f5f5f5f5f 64 intel punpcklwd xmm2, xmmword ptr [rcx] -660f6111|223344556677885f5f5f5f5f 64 plan9 PUNPCKLWD 0(CX), X2 -660f6211|223344556677885f5f5f5f5f 32 intel punpckldq xmm2, xmmword ptr [ecx] -660f6211|223344556677885f5f5f5f5f 32 plan9 PUNPCKLDQ 0(CX), X2 -660f6211|223344556677885f5f5f5f5f 64 gnu punpckldq (%rcx),%xmm2 -660f6211|223344556677885f5f5f5f5f 64 intel punpckldq xmm2, xmmword ptr [rcx] -660f6211|223344556677885f5f5f5f5f 64 plan9 PUNPCKLDQ 0(CX), X2 -660f6311|223344556677885f5f5f5f5f 32 intel packsswb xmm2, xmmword ptr [ecx] -660f6311|223344556677885f5f5f5f5f 32 plan9 PACKSSWB 0(CX), X2 -660f6311|223344556677885f5f5f5f5f 64 gnu packsswb (%rcx),%xmm2 -660f6311|223344556677885f5f5f5f5f 64 intel packsswb xmm2, xmmword ptr [rcx] -660f6311|223344556677885f5f5f5f5f 64 plan9 PACKSSWB 0(CX), X2 -660f6411|223344556677885f5f5f5f5f 32 intel pcmpgtb xmm2, xmmword ptr [ecx] -660f6411|223344556677885f5f5f5f5f 32 plan9 PCMPGTB 0(CX), X2 -660f6411|223344556677885f5f5f5f5f 64 gnu pcmpgtb (%rcx),%xmm2 -660f6411|223344556677885f5f5f5f5f 64 intel pcmpgtb xmm2, xmmword ptr [rcx] -660f6411|223344556677885f5f5f5f5f 64 plan9 PCMPGTB 0(CX), X2 -660f6511|223344556677885f5f5f5f5f 32 intel pcmpgtw xmm2, xmmword ptr [ecx] -660f6511|223344556677885f5f5f5f5f 32 plan9 PCMPGTW 0(CX), X2 -660f6511|223344556677885f5f5f5f5f 64 gnu pcmpgtw (%rcx),%xmm2 -660f6511|223344556677885f5f5f5f5f 64 intel pcmpgtw xmm2, xmmword ptr [rcx] -660f6511|223344556677885f5f5f5f5f 64 plan9 PCMPGTW 0(CX), X2 -660f6611|223344556677885f5f5f5f5f 32 intel pcmpgtd xmm2, xmmword ptr [ecx] -660f6611|223344556677885f5f5f5f5f 32 plan9 PCMPGTD 0(CX), X2 -660f6611|223344556677885f5f5f5f5f 64 gnu pcmpgtd (%rcx),%xmm2 -660f6611|223344556677885f5f5f5f5f 64 intel pcmpgtd xmm2, xmmword ptr [rcx] -660f6611|223344556677885f5f5f5f5f 64 plan9 PCMPGTD 0(CX), X2 -660f6711|223344556677885f5f5f5f5f 32 intel packuswb xmm2, xmmword ptr [ecx] -660f6711|223344556677885f5f5f5f5f 32 plan9 PACKUSWB 0(CX), X2 -660f6711|223344556677885f5f5f5f5f 64 gnu packuswb (%rcx),%xmm2 -660f6711|223344556677885f5f5f5f5f 64 intel packuswb xmm2, xmmword ptr [rcx] -660f6711|223344556677885f5f5f5f5f 64 plan9 PACKUSWB 0(CX), X2 -660f6811|223344556677885f5f5f5f5f 32 intel punpckhbw xmm2, xmmword ptr [ecx] -660f6811|223344556677885f5f5f5f5f 32 plan9 PUNPCKHBW 0(CX), X2 -660f6811|223344556677885f5f5f5f5f 64 gnu punpckhbw (%rcx),%xmm2 -660f6811|223344556677885f5f5f5f5f 64 intel punpckhbw xmm2, xmmword ptr [rcx] -660f6811|223344556677885f5f5f5f5f 64 plan9 PUNPCKHBW 0(CX), X2 -660f6911|223344556677885f5f5f5f5f 32 intel punpckhwd xmm2, xmmword ptr [ecx] -660f6911|223344556677885f5f5f5f5f 32 plan9 PUNPCKHWD 0(CX), X2 -660f6911|223344556677885f5f5f5f5f 64 gnu punpckhwd (%rcx),%xmm2 -660f6911|223344556677885f5f5f5f5f 64 intel punpckhwd xmm2, xmmword ptr [rcx] -660f6911|223344556677885f5f5f5f5f 64 plan9 PUNPCKHWD 0(CX), X2 -660f6a11|223344556677885f5f5f5f5f 32 intel punpckhdq xmm2, xmmword ptr [ecx] -660f6a11|223344556677885f5f5f5f5f 32 plan9 PUNPCKHDQ 0(CX), X2 -660f6a11|223344556677885f5f5f5f5f 64 gnu punpckhdq (%rcx),%xmm2 -660f6a11|223344556677885f5f5f5f5f 64 intel punpckhdq xmm2, xmmword ptr [rcx] -660f6a11|223344556677885f5f5f5f5f 64 plan9 PUNPCKHDQ 0(CX), X2 -660f6b11|223344556677885f5f5f5f5f 32 intel packssdw xmm2, xmmword ptr [ecx] -660f6b11|223344556677885f5f5f5f5f 32 plan9 PACKSSDW 0(CX), X2 -660f6b11|223344556677885f5f5f5f5f 64 gnu packssdw (%rcx),%xmm2 -660f6b11|223344556677885f5f5f5f5f 64 intel packssdw xmm2, xmmword ptr [rcx] -660f6b11|223344556677885f5f5f5f5f 64 plan9 PACKSSDW 0(CX), X2 -660f6c11|223344556677885f5f5f5f5f 32 intel punpcklqdq xmm2, xmmword ptr [ecx] -660f6c11|223344556677885f5f5f5f5f 32 plan9 PUNPCKLQDQ 0(CX), X2 -660f6c11|223344556677885f5f5f5f5f 64 gnu punpcklqdq (%rcx),%xmm2 -660f6c11|223344556677885f5f5f5f5f 64 intel punpcklqdq xmm2, xmmword ptr [rcx] -660f6c11|223344556677885f5f5f5f5f 64 plan9 PUNPCKLQDQ 0(CX), X2 -660f6d11|223344556677885f5f5f5f5f 32 intel punpckhqdq xmm2, xmmword ptr [ecx] -660f6d11|223344556677885f5f5f5f5f 32 plan9 PUNPCKHQDQ 0(CX), X2 -660f6d11|223344556677885f5f5f5f5f 64 gnu punpckhqdq (%rcx),%xmm2 -660f6d11|223344556677885f5f5f5f5f 64 intel punpckhqdq xmm2, xmmword ptr [rcx] -660f6d11|223344556677885f5f5f5f5f 64 plan9 PUNPCKHQDQ 0(CX), X2 -660f6e11|223344556677885f5f5f5f5f 32 intel movd xmm2, dword ptr [ecx] -660f6e11|223344556677885f5f5f5f5f 32 plan9 MOVD 0(CX), X2 -660f6e11|223344556677885f5f5f5f5f 64 gnu movd (%rcx),%xmm2 -660f6e11|223344556677885f5f5f5f5f 64 intel movd xmm2, dword ptr [rcx] -660f6e11|223344556677885f5f5f5f5f 64 plan9 MOVD 0(CX), X2 -660f6f11|223344556677885f5f5f5f5f 32 intel movdqa xmm2, xmmword ptr [ecx] -660f6f11|223344556677885f5f5f5f5f 32 plan9 MOVDQA 0(CX), X2 -660f6f11|223344556677885f5f5f5f5f 64 gnu movdqa (%rcx),%xmm2 -660f6f11|223344556677885f5f5f5f5f 64 intel movdqa xmm2, xmmword ptr [rcx] -660f6f11|223344556677885f5f5f5f5f 64 plan9 MOVDQA 0(CX), X2 -660f701122|3344556677885f5f5f5f5f 32 intel pshufd xmm2, xmmword ptr [ecx], 0x22 -660f701122|3344556677885f5f5f5f5f 32 plan9 PSHUFD $0x22, 0(CX), X2 -660f701122|3344556677885f5f5f5f5f 64 gnu pshufd $0x22,(%rcx),%xmm2 -660f701122|3344556677885f5f5f5f5f 64 intel pshufd xmm2, xmmword ptr [rcx], 0x22 -660f701122|3344556677885f5f5f5f5f 64 plan9 PSHUFD $0x22, 0(CX), X2 -660f71d011|223344556677885f5f5f5f 32 intel psrlw xmm0, 0x11 -660f71d011|223344556677885f5f5f5f 32 plan9 PSRLW $0x11, X0 -660f71d011|223344556677885f5f5f5f 64 gnu psrlw $0x11,%xmm0 -660f71d011|223344556677885f5f5f5f 64 intel psrlw xmm0, 0x11 -660f71d011|223344556677885f5f5f5f 64 plan9 PSRLW $0x11, X0 -660f71e011|223344556677885f5f5f5f 32 intel psraw xmm0, 0x11 -660f71e011|223344556677885f5f5f5f 32 plan9 PSRAW $0x11, X0 -660f71e011|223344556677885f5f5f5f 64 gnu psraw $0x11,%xmm0 -660f71e011|223344556677885f5f5f5f 64 intel psraw xmm0, 0x11 -660f71e011|223344556677885f5f5f5f 64 plan9 PSRAW $0x11, X0 -660f71f011|223344556677885f5f5f5f 32 intel psllw xmm0, 0x11 -660f71f011|223344556677885f5f5f5f 32 plan9 PSLLW $0x11, X0 -660f71f011|223344556677885f5f5f5f 64 gnu psllw $0x11,%xmm0 -660f71f011|223344556677885f5f5f5f 64 intel psllw xmm0, 0x11 -660f71f011|223344556677885f5f5f5f 64 plan9 PSLLW $0x11, X0 -660f72d011|223344556677885f5f5f5f 32 intel psrld xmm0, 0x11 -660f72d011|223344556677885f5f5f5f 32 plan9 PSRLD $0x11, X0 -660f72d011|223344556677885f5f5f5f 64 gnu psrld $0x11,%xmm0 -660f72d011|223344556677885f5f5f5f 64 intel psrld xmm0, 0x11 -660f72d011|223344556677885f5f5f5f 64 plan9 PSRLD $0x11, X0 -660f72e011|223344556677885f5f5f5f 32 intel psrad xmm0, 0x11 -660f72e011|223344556677885f5f5f5f 32 plan9 PSRAD $0x11, X0 -660f72e011|223344556677885f5f5f5f 64 gnu psrad $0x11,%xmm0 -660f72e011|223344556677885f5f5f5f 64 intel psrad xmm0, 0x11 -660f72e011|223344556677885f5f5f5f 64 plan9 PSRAD $0x11, X0 -660f72f011|223344556677885f5f5f5f 32 intel pslld xmm0, 0x11 -660f72f011|223344556677885f5f5f5f 32 plan9 PSLLD $0x11, X0 -660f72f011|223344556677885f5f5f5f 64 gnu pslld $0x11,%xmm0 -660f72f011|223344556677885f5f5f5f 64 intel pslld xmm0, 0x11 -660f72f011|223344556677885f5f5f5f 64 plan9 PSLLD $0x11, X0 -660f73d011|223344556677885f5f5f5f 32 intel psrlq xmm0, 0x11 -660f73d011|223344556677885f5f5f5f 32 plan9 PSRLQ $0x11, X0 -660f73d011|223344556677885f5f5f5f 64 gnu psrlq $0x11,%xmm0 -660f73d011|223344556677885f5f5f5f 64 intel psrlq xmm0, 0x11 -660f73d011|223344556677885f5f5f5f 64 plan9 PSRLQ $0x11, X0 -660f73d811|223344556677885f5f5f5f 32 intel psrldq xmm0, 0x11 -660f73d811|223344556677885f5f5f5f 32 plan9 PSRLDQ $0x11, X0 -660f73d811|223344556677885f5f5f5f 64 gnu psrldq $0x11,%xmm0 -660f73d811|223344556677885f5f5f5f 64 intel psrldq xmm0, 0x11 -660f73d811|223344556677885f5f5f5f 64 plan9 PSRLDQ $0x11, X0 -660f73f011|223344556677885f5f5f5f 32 intel psllq xmm0, 0x11 -660f73f011|223344556677885f5f5f5f 32 plan9 PSLLQ $0x11, X0 -660f73f011|223344556677885f5f5f5f 64 gnu psllq $0x11,%xmm0 -660f73f011|223344556677885f5f5f5f 64 intel psllq xmm0, 0x11 -660f73f011|223344556677885f5f5f5f 64 plan9 PSLLQ $0x11, X0 -660f73f811|223344556677885f5f5f5f 32 intel pslldq xmm0, 0x11 -660f73f811|223344556677885f5f5f5f 32 plan9 PSLLDQ $0x11, X0 -660f73f811|223344556677885f5f5f5f 64 gnu pslldq $0x11,%xmm0 -660f73f811|223344556677885f5f5f5f 64 intel pslldq xmm0, 0x11 -660f73f811|223344556677885f5f5f5f 64 plan9 PSLLDQ $0x11, X0 -660f7411|223344556677885f5f5f5f5f 32 intel pcmpeqb xmm2, xmmword ptr [ecx] -660f7411|223344556677885f5f5f5f5f 32 plan9 PCMPEQB 0(CX), X2 -660f7411|223344556677885f5f5f5f5f 64 gnu pcmpeqb (%rcx),%xmm2 -660f7411|223344556677885f5f5f5f5f 64 intel pcmpeqb xmm2, xmmword ptr [rcx] -660f7411|223344556677885f5f5f5f5f 64 plan9 PCMPEQB 0(CX), X2 -660f7511|223344556677885f5f5f5f5f 32 intel pcmpeqw xmm2, xmmword ptr [ecx] -660f7511|223344556677885f5f5f5f5f 32 plan9 PCMPEQW 0(CX), X2 -660f7511|223344556677885f5f5f5f5f 64 gnu pcmpeqw (%rcx),%xmm2 -660f7511|223344556677885f5f5f5f5f 64 intel pcmpeqw xmm2, xmmword ptr [rcx] -660f7511|223344556677885f5f5f5f5f 64 plan9 PCMPEQW 0(CX), X2 -660f7611|223344556677885f5f5f5f5f 32 intel pcmpeqd xmm2, xmmword ptr [ecx] -660f7611|223344556677885f5f5f5f5f 32 plan9 PCMPEQD 0(CX), X2 -660f7611|223344556677885f5f5f5f5f 64 gnu pcmpeqd (%rcx),%xmm2 -660f7611|223344556677885f5f5f5f5f 64 intel pcmpeqd xmm2, xmmword ptr [rcx] -660f7611|223344556677885f5f5f5f5f 64 plan9 PCMPEQD 0(CX), X2 -660f7c11|223344556677885f5f5f5f5f 32 intel haddpd xmm2, xmmword ptr [ecx] -660f7c11|223344556677885f5f5f5f5f 32 plan9 HADDPD 0(CX), X2 -660f7c11|223344556677885f5f5f5f5f 64 gnu haddpd (%rcx),%xmm2 -660f7c11|223344556677885f5f5f5f5f 64 intel haddpd xmm2, xmmword ptr [rcx] -660f7c11|223344556677885f5f5f5f5f 64 plan9 HADDPD 0(CX), X2 -660f7d11|223344556677885f5f5f5f5f 32 intel hsubpd xmm2, xmmword ptr [ecx] -660f7d11|223344556677885f5f5f5f5f 32 plan9 HSUBPD 0(CX), X2 -660f7d11|223344556677885f5f5f5f5f 64 gnu hsubpd (%rcx),%xmm2 -660f7d11|223344556677885f5f5f5f5f 64 intel hsubpd xmm2, xmmword ptr [rcx] -660f7d11|223344556677885f5f5f5f5f 64 plan9 HSUBPD 0(CX), X2 -660f7e11|223344556677885f5f5f5f5f 32 intel movd dword ptr [ecx], xmm2 -660f7e11|223344556677885f5f5f5f5f 32 plan9 MOVD X2, 0(CX) -660f7e11|223344556677885f5f5f5f5f 64 gnu movd %xmm2,(%rcx) -660f7e11|223344556677885f5f5f5f5f 64 intel movd dword ptr [rcx], xmm2 -660f7e11|223344556677885f5f5f5f5f 64 plan9 MOVD X2, 0(CX) -660f7f11|223344556677885f5f5f5f5f 32 intel movdqa xmmword ptr [ecx], xmm2 -660f7f11|223344556677885f5f5f5f5f 32 plan9 MOVDQA X2, 0(CX) -660f7f11|223344556677885f5f5f5f5f 64 gnu movdqa %xmm2,(%rcx) -660f7f11|223344556677885f5f5f5f5f 64 intel movdqa xmmword ptr [rcx], xmm2 -660f7f11|223344556677885f5f5f5f5f 64 plan9 MOVDQA X2, 0(CX) -660f8011223344|556677885f5f5f5f5f 64 gnu jo .+0x44332211 -660f8011223344|556677885f5f5f5f5f 64 intel jo .+0x44332211 -660f8011223344|556677885f5f5f5f5f 64 plan9 JO .+1144201745 -660f801122|3344556677885f5f5f5f5f 32 intel jo .+0x2211 -660f801122|3344556677885f5f5f5f5f 32 plan9 JO .+8721 -660f8111223344|556677885f5f5f5f5f 64 gnu jno .+0x44332211 -660f8111223344|556677885f5f5f5f5f 64 intel jno .+0x44332211 -660f8111223344|556677885f5f5f5f5f 64 plan9 JNO .+1144201745 -660f811122|3344556677885f5f5f5f5f 32 intel jno .+0x2211 -660f811122|3344556677885f5f5f5f5f 32 plan9 JNO .+8721 -660f8211223344|556677885f5f5f5f5f 64 gnu jb .+0x44332211 -660f8211223344|556677885f5f5f5f5f 64 intel jb .+0x44332211 -660f8211223344|556677885f5f5f5f5f 64 plan9 JB .+1144201745 -660f821122|3344556677885f5f5f5f5f 32 intel jb .+0x2211 -660f821122|3344556677885f5f5f5f5f 32 plan9 JB .+8721 -660f8311223344|556677885f5f5f5f5f 64 gnu jae .+0x44332211 -660f8311223344|556677885f5f5f5f5f 64 intel jnb .+0x44332211 -660f8311223344|556677885f5f5f5f5f 64 plan9 JAE .+1144201745 -660f831122|3344556677885f5f5f5f5f 32 intel jnb .+0x2211 -660f831122|3344556677885f5f5f5f5f 32 plan9 JAE .+8721 -660f8411223344|556677885f5f5f5f5f 64 gnu je .+0x44332211 -660f8411223344|556677885f5f5f5f5f 64 intel jz .+0x44332211 -660f8411223344|556677885f5f5f5f5f 64 plan9 JE .+1144201745 -660f841122|3344556677885f5f5f5f5f 32 intel jz .+0x2211 -660f841122|3344556677885f5f5f5f5f 32 plan9 JE .+8721 -660f8511223344|556677885f5f5f5f5f 64 gnu jne .+0x44332211 -660f8511223344|556677885f5f5f5f5f 64 intel jnz .+0x44332211 -660f8511223344|556677885f5f5f5f5f 64 plan9 JNE .+1144201745 -660f851122|3344556677885f5f5f5f5f 32 intel jnz .+0x2211 -660f851122|3344556677885f5f5f5f5f 32 plan9 JNE .+8721 -660f8611223344|556677885f5f5f5f5f 64 gnu jbe .+0x44332211 -660f8611223344|556677885f5f5f5f5f 64 intel jbe .+0x44332211 -660f8611223344|556677885f5f5f5f5f 64 plan9 JBE .+1144201745 -660f861122|3344556677885f5f5f5f5f 32 intel jbe .+0x2211 -660f861122|3344556677885f5f5f5f5f 32 plan9 JBE .+8721 -660f8711223344|556677885f5f5f5f5f 64 gnu ja .+0x44332211 -660f8711223344|556677885f5f5f5f5f 64 intel jnbe .+0x44332211 -660f8711223344|556677885f5f5f5f5f 64 plan9 JA .+1144201745 -660f871122|3344556677885f5f5f5f5f 32 intel jnbe .+0x2211 -660f871122|3344556677885f5f5f5f5f 32 plan9 JA .+8721 -660f8811223344|556677885f5f5f5f5f 64 gnu js .+0x44332211 -660f8811223344|556677885f5f5f5f5f 64 intel js .+0x44332211 -660f8811223344|556677885f5f5f5f5f 64 plan9 JS .+1144201745 -660f881122|3344556677885f5f5f5f5f 32 intel js .+0x2211 -660f881122|3344556677885f5f5f5f5f 32 plan9 JS .+8721 -660f8911223344|556677885f5f5f5f5f 64 gnu jns .+0x44332211 -660f8911223344|556677885f5f5f5f5f 64 intel jns .+0x44332211 -660f8911223344|556677885f5f5f5f5f 64 plan9 JNS .+1144201745 -660f891122|3344556677885f5f5f5f5f 32 intel jns .+0x2211 -660f891122|3344556677885f5f5f5f5f 32 plan9 JNS .+8721 -660f8a11223344|556677885f5f5f5f5f 64 gnu jp .+0x44332211 -660f8a11223344|556677885f5f5f5f5f 64 intel jp .+0x44332211 -660f8a11223344|556677885f5f5f5f5f 64 plan9 JP .+1144201745 -660f8a1122|3344556677885f5f5f5f5f 32 intel jp .+0x2211 -660f8a1122|3344556677885f5f5f5f5f 32 plan9 JP .+8721 -660f8b11223344|556677885f5f5f5f5f 64 gnu jnp .+0x44332211 -660f8b11223344|556677885f5f5f5f5f 64 intel jnp .+0x44332211 -660f8b11223344|556677885f5f5f5f5f 64 plan9 JNP .+1144201745 -660f8b1122|3344556677885f5f5f5f5f 32 intel jnp .+0x2211 -660f8b1122|3344556677885f5f5f5f5f 32 plan9 JNP .+8721 -660f8c11223344|556677885f5f5f5f5f 64 gnu jl .+0x44332211 -660f8c11223344|556677885f5f5f5f5f 64 intel jl .+0x44332211 -660f8c11223344|556677885f5f5f5f5f 64 plan9 JL .+1144201745 -660f8c1122|3344556677885f5f5f5f5f 32 intel jl .+0x2211 -660f8c1122|3344556677885f5f5f5f5f 32 plan9 JL .+8721 -660f8d11223344|556677885f5f5f5f5f 64 gnu jge .+0x44332211 -660f8d11223344|556677885f5f5f5f5f 64 intel jnl .+0x44332211 -660f8d11223344|556677885f5f5f5f5f 64 plan9 JGE .+1144201745 -660f8d1122|3344556677885f5f5f5f5f 32 intel jnl .+0x2211 -660f8d1122|3344556677885f5f5f5f5f 32 plan9 JGE .+8721 -660f8e11223344|556677885f5f5f5f5f 64 gnu jle .+0x44332211 -660f8e11223344|556677885f5f5f5f5f 64 intel jle .+0x44332211 -660f8e11223344|556677885f5f5f5f5f 64 plan9 JLE .+1144201745 -660f8e1122|3344556677885f5f5f5f5f 32 intel jle .+0x2211 -660f8e1122|3344556677885f5f5f5f5f 32 plan9 JLE .+8721 -660f8f11223344|556677885f5f5f5f5f 64 gnu jg .+0x44332211 -660f8f11223344|556677885f5f5f5f5f 64 intel jnle .+0x44332211 -660f8f11223344|556677885f5f5f5f5f 64 plan9 JG .+1144201745 -660f8f1122|3344556677885f5f5f5f5f 32 intel jnle .+0x2211 -660f8f1122|3344556677885f5f5f5f5f 32 plan9 JG .+8721 -660fa1|11223344556677885f5f5f5f5f 32 intel pop fs -660fa1|11223344556677885f5f5f5f5f 32 plan9 POPW FS -660fa1|11223344556677885f5f5f5f5f 64 gnu popw %fs -660fa1|11223344556677885f5f5f5f5f 64 intel pop fs -660fa1|11223344556677885f5f5f5f5f 64 plan9 POPW FS -660fa311|223344556677885f5f5f5f5f 32 intel bt word ptr [ecx], dx -660fa311|223344556677885f5f5f5f5f 32 plan9 BTW DX, 0(CX) -660fa311|223344556677885f5f5f5f5f 64 gnu bt %dx,(%rcx) -660fa311|223344556677885f5f5f5f5f 64 intel bt word ptr [rcx], dx -660fa311|223344556677885f5f5f5f5f 64 plan9 BTW DX, 0(CX) -660fa41122|3344556677885f5f5f5f5f 32 intel shld word ptr [ecx], dx, 0x22 -660fa41122|3344556677885f5f5f5f5f 32 plan9 SHLDW $0x22, DX, 0(CX) -660fa41122|3344556677885f5f5f5f5f 64 gnu shld $0x22,%dx,(%rcx) -660fa41122|3344556677885f5f5f5f5f 64 intel shld word ptr [rcx], dx, 0x22 -660fa41122|3344556677885f5f5f5f5f 64 plan9 SHLDW $0x22, DX, 0(CX) -660fa511|223344556677885f5f5f5f5f 32 intel shld word ptr [ecx], dx, cl -660fa511|223344556677885f5f5f5f5f 32 plan9 SHLDW CL, DX, 0(CX) -660fa511|223344556677885f5f5f5f5f 64 gnu shld %cl,%dx,(%rcx) -660fa511|223344556677885f5f5f5f5f 64 intel shld word ptr [rcx], dx, cl -660fa511|223344556677885f5f5f5f5f 64 plan9 SHLDW CL, DX, 0(CX) -660fa9|11223344556677885f5f5f5f5f 32 intel pop gs -660fa9|11223344556677885f5f5f5f5f 32 plan9 POPW GS -660fa9|11223344556677885f5f5f5f5f 64 gnu popw %gs -660fa9|11223344556677885f5f5f5f5f 64 intel pop gs -660fa9|11223344556677885f5f5f5f5f 64 plan9 POPW GS -660fab11|223344556677885f5f5f5f5f 32 intel bts word ptr [ecx], dx -660fab11|223344556677885f5f5f5f5f 32 plan9 BTSW DX, 0(CX) -660fab11|223344556677885f5f5f5f5f 64 gnu bts %dx,(%rcx) -660fab11|223344556677885f5f5f5f5f 64 intel bts word ptr [rcx], dx -660fab11|223344556677885f5f5f5f5f 64 plan9 BTSW DX, 0(CX) -660fac1122|3344556677885f5f5f5f5f 32 intel shrd word ptr [ecx], dx, 0x22 -660fac1122|3344556677885f5f5f5f5f 32 plan9 SHRDW $0x22, DX, 0(CX) -660fac1122|3344556677885f5f5f5f5f 64 gnu shrd $0x22,%dx,(%rcx) -660fac1122|3344556677885f5f5f5f5f 64 intel shrd word ptr [rcx], dx, 0x22 -660fac1122|3344556677885f5f5f5f5f 64 plan9 SHRDW $0x22, DX, 0(CX) -660fad11|223344556677885f5f5f5f5f 32 intel shrd word ptr [ecx], dx, cl -660fad11|223344556677885f5f5f5f5f 32 plan9 SHRDW CL, DX, 0(CX) -660fad11|223344556677885f5f5f5f5f 64 gnu shrd %cl,%dx,(%rcx) -660fad11|223344556677885f5f5f5f5f 64 intel shrd word ptr [rcx], dx, cl -660fad11|223344556677885f5f5f5f5f 64 plan9 SHRDW CL, DX, 0(CX) -660fae00|11223344556677885f5f5f5f 32 intel fxsave ptr [eax] -660fae00|11223344556677885f5f5f5f 32 plan9 FXSAVE 0(AX) -660fae00|11223344556677885f5f5f5f 64 gnu fxsave (%rax) -660fae00|11223344556677885f5f5f5f 64 intel fxsave ptr [rax] -660fae00|11223344556677885f5f5f5f 64 plan9 FXSAVE 0(AX) -660fae08|11223344556677885f5f5f5f 32 intel fxrstor ptr [eax] -660fae08|11223344556677885f5f5f5f 32 plan9 FXRSTOR 0(AX) -660fae08|11223344556677885f5f5f5f 64 gnu data16 fxrstor (%rax) -660fae08|11223344556677885f5f5f5f 64 intel fxrstor ptr [rax] -660fae08|11223344556677885f5f5f5f 64 plan9 FXRSTOR 0(AX) -660fae20|11223344556677885f5f5f5f 32 intel xsave ptr [eax] -660fae20|11223344556677885f5f5f5f 32 plan9 XSAVE 0(AX) -660fae20|11223344556677885f5f5f5f 64 gnu data16 xsave (%rax) -660fae20|11223344556677885f5f5f5f 64 intel xsave ptr [rax] -660fae20|11223344556677885f5f5f5f 64 plan9 XSAVE 0(AX) -660fae28|11223344556677885f5f5f5f 32 intel xrstor ptr [eax] -660fae28|11223344556677885f5f5f5f 32 plan9 XRSTOR 0(AX) -660fae28|11223344556677885f5f5f5f 64 gnu data16 xrstor (%rax) -660fae28|11223344556677885f5f5f5f 64 intel xrstor ptr [rax] -660fae28|11223344556677885f5f5f5f 64 plan9 XRSTOR 0(AX) -660fae30|11223344556677885f5f5f5f 32 intel xsaveopt ptr [eax] -660fae30|11223344556677885f5f5f5f 32 plan9 XSAVEOPT 0(AX) -660fae30|11223344556677885f5f5f5f 64 gnu data16 xsaveopt (%rax) -660fae30|11223344556677885f5f5f5f 64 intel xsaveopt ptr [rax] -660fae30|11223344556677885f5f5f5f 64 plan9 XSAVEOPT 0(AX) -660faf11|223344556677885f5f5f5f5f 32 intel imul dx, word ptr [ecx] -660faf11|223344556677885f5f5f5f5f 32 plan9 IMULW 0(CX), DX -660faf11|223344556677885f5f5f5f5f 64 gnu imul (%rcx),%dx -660faf11|223344556677885f5f5f5f5f 64 intel imul dx, word ptr [rcx] -660faf11|223344556677885f5f5f5f5f 64 plan9 IMULW 0(CX), DX -660fb111|223344556677885f5f5f5f5f 32 intel cmpxchg word ptr [ecx], dx -660fb111|223344556677885f5f5f5f5f 32 plan9 CMPXCHGW DX, 0(CX) -660fb111|223344556677885f5f5f5f5f 64 gnu cmpxchg %dx,(%rcx) -660fb111|223344556677885f5f5f5f5f 64 intel cmpxchg word ptr [rcx], dx -660fb111|223344556677885f5f5f5f5f 64 plan9 CMPXCHGW DX, 0(CX) -660fb211|223344556677885f5f5f5f5f 32 intel lss dx, dword ptr [ecx] -660fb211|223344556677885f5f5f5f5f 32 plan9 LSS 0(CX), DX -660fb211|223344556677885f5f5f5f5f 64 gnu lss (%rcx),%dx -660fb211|223344556677885f5f5f5f5f 64 intel lss dx, dword ptr [rcx] -660fb211|223344556677885f5f5f5f5f 64 plan9 LSS 0(CX), DX -660fb311|223344556677885f5f5f5f5f 32 intel btr word ptr [ecx], dx -660fb311|223344556677885f5f5f5f5f 32 plan9 BTRW DX, 0(CX) -660fb311|223344556677885f5f5f5f5f 64 gnu btr %dx,(%rcx) -660fb311|223344556677885f5f5f5f5f 64 intel btr word ptr [rcx], dx -660fb311|223344556677885f5f5f5f5f 64 plan9 BTRW DX, 0(CX) -660fb411|223344556677885f5f5f5f5f 32 intel lfs dx, dword ptr [ecx] -660fb411|223344556677885f5f5f5f5f 32 plan9 LFS 0(CX), DX -660fb411|223344556677885f5f5f5f5f 64 gnu lfs (%rcx),%dx -660fb411|223344556677885f5f5f5f5f 64 intel lfs dx, dword ptr [rcx] -660fb411|223344556677885f5f5f5f5f 64 plan9 LFS 0(CX), DX -660fb511|223344556677885f5f5f5f5f 32 intel lgs dx, dword ptr [ecx] -660fb511|223344556677885f5f5f5f5f 32 plan9 LGS 0(CX), DX -660fb511|223344556677885f5f5f5f5f 64 gnu lgs (%rcx),%dx -660fb511|223344556677885f5f5f5f5f 64 intel lgs dx, dword ptr [rcx] -660fb511|223344556677885f5f5f5f5f 64 plan9 LGS 0(CX), DX -660fb611|223344556677885f5f5f5f5f 32 intel movzx dx, byte ptr [ecx] -660fb611|223344556677885f5f5f5f5f 32 plan9 MOVZX 0(CX), DX -660fb611|223344556677885f5f5f5f5f 64 gnu movzbw (%rcx),%dx -660fb611|223344556677885f5f5f5f5f 64 intel movzx dx, byte ptr [rcx] -660fb611|223344556677885f5f5f5f5f 64 plan9 MOVZX 0(CX), DX -660fb711|223344556677885f5f5f5f5f 32 intel movzx dx, word ptr [ecx] -660fb711|223344556677885f5f5f5f5f 32 plan9 MOVZX 0(CX), DX -660fb711|223344556677885f5f5f5f5f 64 gnu movzww (%rcx),%dx -660fb711|223344556677885f5f5f5f5f 64 intel movzx dx, word ptr [rcx] -660fb711|223344556677885f5f5f5f5f 64 plan9 MOVZX 0(CX), DX -660fba2011|223344556677885f5f5f5f 32 intel bt word ptr [eax], 0x11 -660fba2011|223344556677885f5f5f5f 32 plan9 BTW $0x11, 0(AX) -660fba2011|223344556677885f5f5f5f 64 gnu btw $0x11,(%rax) -660fba2011|223344556677885f5f5f5f 64 intel bt word ptr [rax], 0x11 -660fba2011|223344556677885f5f5f5f 64 plan9 BTW $0x11, 0(AX) -660fba2811|223344556677885f5f5f5f 32 intel bts word ptr [eax], 0x11 -660fba2811|223344556677885f5f5f5f 32 plan9 BTSW $0x11, 0(AX) -660fba2811|223344556677885f5f5f5f 64 gnu btsw $0x11,(%rax) -660fba2811|223344556677885f5f5f5f 64 intel bts word ptr [rax], 0x11 -660fba2811|223344556677885f5f5f5f 64 plan9 BTSW $0x11, 0(AX) -660fba3011|223344556677885f5f5f5f 32 intel btr word ptr [eax], 0x11 -660fba3011|223344556677885f5f5f5f 32 plan9 BTRW $0x11, 0(AX) -660fba3011|223344556677885f5f5f5f 64 gnu btrw $0x11,(%rax) -660fba3011|223344556677885f5f5f5f 64 intel btr word ptr [rax], 0x11 -660fba3011|223344556677885f5f5f5f 64 plan9 BTRW $0x11, 0(AX) -660fba3811|223344556677885f5f5f5f 32 intel btc word ptr [eax], 0x11 -660fba3811|223344556677885f5f5f5f 32 plan9 BTCW $0x11, 0(AX) -660fba3811|223344556677885f5f5f5f 64 gnu btcw $0x11,(%rax) -660fba3811|223344556677885f5f5f5f 64 intel btc word ptr [rax], 0x11 -660fba3811|223344556677885f5f5f5f 64 plan9 BTCW $0x11, 0(AX) -660fbb11|223344556677885f5f5f5f5f 32 intel btc word ptr [ecx], dx -660fbb11|223344556677885f5f5f5f5f 32 plan9 BTCW DX, 0(CX) -660fbb11|223344556677885f5f5f5f5f 64 gnu btc %dx,(%rcx) -660fbb11|223344556677885f5f5f5f5f 64 intel btc word ptr [rcx], dx -660fbb11|223344556677885f5f5f5f5f 64 plan9 BTCW DX, 0(CX) -660fbc11|223344556677885f5f5f5f5f 32 intel bsf dx, word ptr [ecx] -660fbc11|223344556677885f5f5f5f5f 32 plan9 BSFW 0(CX), DX -660fbc11|223344556677885f5f5f5f5f 64 gnu bsf (%rcx),%dx -660fbc11|223344556677885f5f5f5f5f 64 intel bsf dx, word ptr [rcx] -660fbc11|223344556677885f5f5f5f5f 64 plan9 BSFW 0(CX), DX -660fbd11|223344556677885f5f5f5f5f 32 intel bsr dx, word ptr [ecx] -660fbd11|223344556677885f5f5f5f5f 32 plan9 BSRW 0(CX), DX -660fbd11|223344556677885f5f5f5f5f 64 gnu bsr (%rcx),%dx -660fbd11|223344556677885f5f5f5f5f 64 intel bsr dx, word ptr [rcx] -660fbd11|223344556677885f5f5f5f5f 64 plan9 BSRW 0(CX), DX -660fbe11|223344556677885f5f5f5f5f 32 intel movsx dx, byte ptr [ecx] -660fbe11|223344556677885f5f5f5f5f 32 plan9 MOVSX 0(CX), DX -660fbe11|223344556677885f5f5f5f5f 64 gnu movsbw (%rcx),%dx -660fbe11|223344556677885f5f5f5f5f 64 intel movsx dx, byte ptr [rcx] -660fbe11|223344556677885f5f5f5f5f 64 plan9 MOVSX 0(CX), DX -660fbf11|223344556677885f5f5f5f5f 32 intel movsx dx, word ptr [ecx] -660fbf11|223344556677885f5f5f5f5f 32 plan9 MOVSX 0(CX), DX -660fbf11|223344556677885f5f5f5f5f 64 gnu movsww (%rcx),%dx -660fbf11|223344556677885f5f5f5f5f 64 intel movsx dx, word ptr [rcx] -660fbf11|223344556677885f5f5f5f5f 64 plan9 MOVSX 0(CX), DX -660fc111|223344556677885f5f5f5f5f 32 intel xadd word ptr [ecx], dx -660fc111|223344556677885f5f5f5f5f 32 plan9 XADDW DX, 0(CX) -660fc111|223344556677885f5f5f5f5f 64 gnu xadd %dx,(%rcx) -660fc111|223344556677885f5f5f5f5f 64 intel xadd word ptr [rcx], dx -660fc111|223344556677885f5f5f5f5f 64 plan9 XADDW DX, 0(CX) -660fc21122|3344556677885f5f5f5f5f 32 intel cmppd xmm2, xmmword ptr [ecx], 0x22 -660fc21122|3344556677885f5f5f5f5f 32 plan9 CMPPD $0x22, 0(CX), X2 -660fc21122|3344556677885f5f5f5f5f 64 gnu cmppd $0x22,(%rcx),%xmm2 -660fc21122|3344556677885f5f5f5f5f 64 intel cmppd xmm2, xmmword ptr [rcx], 0x22 -660fc21122|3344556677885f5f5f5f5f 64 plan9 CMPPD $0x22, 0(CX), X2 -660fc311|223344556677885f5f5f5f5f 32 intel movnti dword ptr [ecx], edx -660fc311|223344556677885f5f5f5f5f 32 plan9 MOVNTIL DX, 0(CX) -660fc311|223344556677885f5f5f5f5f 64 gnu movnti %edx,(%rcx) -660fc311|223344556677885f5f5f5f5f 64 intel movnti dword ptr [rcx], edx -660fc311|223344556677885f5f5f5f5f 64 plan9 MOVNTIL DX, 0(CX) -660fc41122|3344556677885f5f5f5f5f 32 intel pinsrw xmm2, word ptr [ecx], 0x22 -660fc41122|3344556677885f5f5f5f5f 32 plan9 PINSRW $0x22, 0(CX), X2 -660fc41122|3344556677885f5f5f5f5f 64 gnu pinsrw $0x22,(%rcx),%xmm2 -660fc41122|3344556677885f5f5f5f5f 64 intel pinsrw xmm2, word ptr [rcx], 0x22 -660fc41122|3344556677885f5f5f5f5f 64 plan9 PINSRW $0x22, 0(CX), X2 -660fc5c011|223344556677885f5f5f5f 32 intel pextrw eax, xmm0, 0x11 -660fc5c011|223344556677885f5f5f5f 32 plan9 PEXTRW $0x11, X0, AX -660fc5c011|223344556677885f5f5f5f 64 gnu pextrw $0x11,%xmm0,%eax -660fc5c011|223344556677885f5f5f5f 64 intel pextrw eax, xmm0, 0x11 -660fc5c011|223344556677885f5f5f5f 64 plan9 PEXTRW $0x11, X0, AX -660fc61122|3344556677885f5f5f5f5f 32 intel shufpd xmm2, xmmword ptr [ecx], 0x22 -660fc61122|3344556677885f5f5f5f5f 32 plan9 SHUFPD $0x22, 0(CX), X2 -660fc61122|3344556677885f5f5f5f5f 64 gnu shufpd $0x22,(%rcx),%xmm2 -660fc61122|3344556677885f5f5f5f5f 64 intel shufpd xmm2, xmmword ptr [rcx], 0x22 -660fc61122|3344556677885f5f5f5f5f 64 plan9 SHUFPD $0x22, 0(CX), X2 -660fc708|11223344556677885f5f5f5f 32 intel cmpxchg8b qword ptr [eax] -660fc708|11223344556677885f5f5f5f 32 plan9 CMPXCHG8B 0(AX) -660fc708|11223344556677885f5f5f5f 64 gnu data16 cmpxchg8b (%rax) -660fc708|11223344556677885f5f5f5f 64 intel cmpxchg8b qword ptr [rax] -660fc708|11223344556677885f5f5f5f 64 plan9 CMPXCHG8B 0(AX) -660fc718|11223344556677885f5f5f5f 32 intel xrstors ptr [eax] -660fc718|11223344556677885f5f5f5f 32 plan9 XRSTORS 0(AX) -660fc718|11223344556677885f5f5f5f 64 gnu xrstors (%rax) -660fc718|11223344556677885f5f5f5f 64 intel xrstors ptr [rax] -660fc718|11223344556677885f5f5f5f 64 plan9 XRSTORS 0(AX) -660fc720|11223344556677885f5f5f5f 32 intel xsavec ptr [eax] -660fc720|11223344556677885f5f5f5f 32 plan9 XSAVEC 0(AX) -660fc720|11223344556677885f5f5f5f 64 gnu xsavec (%rax) -660fc720|11223344556677885f5f5f5f 64 intel xsavec ptr [rax] -660fc720|11223344556677885f5f5f5f 64 plan9 XSAVEC 0(AX) -660fc728|11223344556677885f5f5f5f 32 intel xsaves ptr [eax] -660fc728|11223344556677885f5f5f5f 32 plan9 XSAVES 0(AX) -660fc728|11223344556677885f5f5f5f 64 gnu xsaves (%rax) -660fc728|11223344556677885f5f5f5f 64 intel xsaves ptr [rax] -660fc728|11223344556677885f5f5f5f 64 plan9 XSAVES 0(AX) -660fc7f2|11223344556677885f5f5f5f 32 intel rdrand dx -660fc7f2|11223344556677885f5f5f5f 32 plan9 RDRAND DX -660fc7f2|11223344556677885f5f5f5f 64 gnu rdrand %dx -660fc7f2|11223344556677885f5f5f5f 64 intel rdrand dx -660fc7f2|11223344556677885f5f5f5f 64 plan9 RDRAND DX -660fc8|11223344556677885f5f5f5f5f 32 intel bswap ax -660fc8|11223344556677885f5f5f5f5f 32 plan9 BSWAP AX -660fc8|11223344556677885f5f5f5f5f 64 gnu bswap %ax -660fc8|11223344556677885f5f5f5f5f 64 intel bswap ax -660fc8|11223344556677885f5f5f5f5f 64 plan9 BSWAP AX -660fd011|223344556677885f5f5f5f5f 32 intel addsubpd xmm2, xmmword ptr [ecx] -660fd011|223344556677885f5f5f5f5f 32 plan9 ADDSUBPD 0(CX), X2 -660fd011|223344556677885f5f5f5f5f 64 gnu addsubpd (%rcx),%xmm2 -660fd011|223344556677885f5f5f5f5f 64 intel addsubpd xmm2, xmmword ptr [rcx] -660fd011|223344556677885f5f5f5f5f 64 plan9 ADDSUBPD 0(CX), X2 -660fd111|223344556677885f5f5f5f5f 32 intel psrlw xmm2, xmmword ptr [ecx] -660fd111|223344556677885f5f5f5f5f 32 plan9 PSRLW 0(CX), X2 -660fd111|223344556677885f5f5f5f5f 64 gnu psrlw (%rcx),%xmm2 -660fd111|223344556677885f5f5f5f5f 64 intel psrlw xmm2, xmmword ptr [rcx] -660fd111|223344556677885f5f5f5f5f 64 plan9 PSRLW 0(CX), X2 -660fd211|223344556677885f5f5f5f5f 32 intel psrld xmm2, xmmword ptr [ecx] -660fd211|223344556677885f5f5f5f5f 32 plan9 PSRLD 0(CX), X2 -660fd211|223344556677885f5f5f5f5f 64 gnu psrld (%rcx),%xmm2 -660fd211|223344556677885f5f5f5f5f 64 intel psrld xmm2, xmmword ptr [rcx] -660fd211|223344556677885f5f5f5f5f 64 plan9 PSRLD 0(CX), X2 -660fd311|223344556677885f5f5f5f5f 32 intel psrlq xmm2, xmmword ptr [ecx] -660fd311|223344556677885f5f5f5f5f 32 plan9 PSRLQ 0(CX), X2 -660fd311|223344556677885f5f5f5f5f 64 gnu psrlq (%rcx),%xmm2 -660fd311|223344556677885f5f5f5f5f 64 intel psrlq xmm2, xmmword ptr [rcx] -660fd311|223344556677885f5f5f5f5f 64 plan9 PSRLQ 0(CX), X2 -660fd411|223344556677885f5f5f5f5f 32 intel paddq xmm2, xmmword ptr [ecx] -660fd411|223344556677885f5f5f5f5f 32 plan9 PADDQ 0(CX), X2 -660fd411|223344556677885f5f5f5f5f 64 gnu paddq (%rcx),%xmm2 -660fd411|223344556677885f5f5f5f5f 64 intel paddq xmm2, xmmword ptr [rcx] -660fd411|223344556677885f5f5f5f5f 64 plan9 PADDQ 0(CX), X2 -660fd511|223344556677885f5f5f5f5f 32 intel pmullw xmm2, xmmword ptr [ecx] -660fd511|223344556677885f5f5f5f5f 32 plan9 PMULLW 0(CX), X2 -660fd511|223344556677885f5f5f5f5f 64 gnu pmullw (%rcx),%xmm2 -660fd511|223344556677885f5f5f5f5f 64 intel pmullw xmm2, xmmword ptr [rcx] -660fd511|223344556677885f5f5f5f5f 64 plan9 PMULLW 0(CX), X2 -660fd611|223344556677885f5f5f5f5f 32 intel movq qword ptr [ecx], xmm2 -660fd611|223344556677885f5f5f5f5f 32 plan9 MOVQ X2, 0(CX) -660fd611|223344556677885f5f5f5f5f 64 gnu movq %xmm2,(%rcx) -660fd611|223344556677885f5f5f5f5f 64 intel movq qword ptr [rcx], xmm2 -660fd611|223344556677885f5f5f5f5f 64 plan9 MOVQ X2, 0(CX) -660fd7c0|11223344556677885f5f5f5f 32 intel pmovmskb eax, xmm0 -660fd7c0|11223344556677885f5f5f5f 32 plan9 PMOVMSKB X0, AX -660fd7c0|11223344556677885f5f5f5f 64 gnu pmovmskb %xmm0,%eax -660fd7c0|11223344556677885f5f5f5f 64 intel pmovmskb eax, xmm0 -660fd7c0|11223344556677885f5f5f5f 64 plan9 PMOVMSKB X0, AX -660fd811|223344556677885f5f5f5f5f 32 intel psubusb xmm2, xmmword ptr [ecx] -660fd811|223344556677885f5f5f5f5f 32 plan9 PSUBUSB 0(CX), X2 -660fd811|223344556677885f5f5f5f5f 64 gnu psubusb (%rcx),%xmm2 -660fd811|223344556677885f5f5f5f5f 64 intel psubusb xmm2, xmmword ptr [rcx] -660fd811|223344556677885f5f5f5f5f 64 plan9 PSUBUSB 0(CX), X2 -660fd911|223344556677885f5f5f5f5f 32 intel psubusw xmm2, xmmword ptr [ecx] -660fd911|223344556677885f5f5f5f5f 32 plan9 PSUBUSW 0(CX), X2 -660fd911|223344556677885f5f5f5f5f 64 gnu psubusw (%rcx),%xmm2 -660fd911|223344556677885f5f5f5f5f 64 intel psubusw xmm2, xmmword ptr [rcx] -660fd911|223344556677885f5f5f5f5f 64 plan9 PSUBUSW 0(CX), X2 -660fda11|223344556677885f5f5f5f5f 32 intel pminub xmm2, xmmword ptr [ecx] -660fda11|223344556677885f5f5f5f5f 32 plan9 PMINUB 0(CX), X2 -660fda11|223344556677885f5f5f5f5f 64 gnu pminub (%rcx),%xmm2 -660fda11|223344556677885f5f5f5f5f 64 intel pminub xmm2, xmmword ptr [rcx] -660fda11|223344556677885f5f5f5f5f 64 plan9 PMINUB 0(CX), X2 -660fdb11|223344556677885f5f5f5f5f 32 intel pand xmm2, xmmword ptr [ecx] -660fdb11|223344556677885f5f5f5f5f 32 plan9 PAND 0(CX), X2 -660fdb11|223344556677885f5f5f5f5f 64 gnu pand (%rcx),%xmm2 -660fdb11|223344556677885f5f5f5f5f 64 intel pand xmm2, xmmword ptr [rcx] -660fdb11|223344556677885f5f5f5f5f 64 plan9 PAND 0(CX), X2 -660fdc11|223344556677885f5f5f5f5f 32 intel paddusb xmm2, xmmword ptr [ecx] -660fdc11|223344556677885f5f5f5f5f 32 plan9 PADDUSB 0(CX), X2 -660fdc11|223344556677885f5f5f5f5f 64 gnu paddusb (%rcx),%xmm2 -660fdc11|223344556677885f5f5f5f5f 64 intel paddusb xmm2, xmmword ptr [rcx] -660fdc11|223344556677885f5f5f5f5f 64 plan9 PADDUSB 0(CX), X2 -660fdd11|223344556677885f5f5f5f5f 32 intel paddusw xmm2, xmmword ptr [ecx] -660fdd11|223344556677885f5f5f5f5f 32 plan9 PADDUSW 0(CX), X2 -660fdd11|223344556677885f5f5f5f5f 64 gnu paddusw (%rcx),%xmm2 -660fdd11|223344556677885f5f5f5f5f 64 intel paddusw xmm2, xmmword ptr [rcx] -660fdd11|223344556677885f5f5f5f5f 64 plan9 PADDUSW 0(CX), X2 -660fde11|223344556677885f5f5f5f5f 32 intel pmaxub xmm2, xmmword ptr [ecx] -660fde11|223344556677885f5f5f5f5f 32 plan9 PMAXUB 0(CX), X2 -660fde11|223344556677885f5f5f5f5f 64 gnu pmaxub (%rcx),%xmm2 -660fde11|223344556677885f5f5f5f5f 64 intel pmaxub xmm2, xmmword ptr [rcx] -660fde11|223344556677885f5f5f5f5f 64 plan9 PMAXUB 0(CX), X2 -660fdf11|223344556677885f5f5f5f5f 32 intel pandn xmm2, xmmword ptr [ecx] -660fdf11|223344556677885f5f5f5f5f 32 plan9 PANDN 0(CX), X2 -660fdf11|223344556677885f5f5f5f5f 64 gnu pandn (%rcx),%xmm2 -660fdf11|223344556677885f5f5f5f5f 64 intel pandn xmm2, xmmword ptr [rcx] -660fdf11|223344556677885f5f5f5f5f 64 plan9 PANDN 0(CX), X2 -660fe011|223344556677885f5f5f5f5f 32 intel pavgb xmm2, xmmword ptr [ecx] -660fe011|223344556677885f5f5f5f5f 32 plan9 PAVGB 0(CX), X2 -660fe011|223344556677885f5f5f5f5f 64 gnu pavgb (%rcx),%xmm2 -660fe011|223344556677885f5f5f5f5f 64 intel pavgb xmm2, xmmword ptr [rcx] -660fe011|223344556677885f5f5f5f5f 64 plan9 PAVGB 0(CX), X2 -660fe111|223344556677885f5f5f5f5f 32 intel psraw xmm2, xmmword ptr [ecx] -660fe111|223344556677885f5f5f5f5f 32 plan9 PSRAW 0(CX), X2 -660fe111|223344556677885f5f5f5f5f 64 gnu psraw (%rcx),%xmm2 -660fe111|223344556677885f5f5f5f5f 64 intel psraw xmm2, xmmword ptr [rcx] -660fe111|223344556677885f5f5f5f5f 64 plan9 PSRAW 0(CX), X2 -660fe211|223344556677885f5f5f5f5f 32 intel psrad xmm2, xmmword ptr [ecx] -660fe211|223344556677885f5f5f5f5f 32 plan9 PSRAD 0(CX), X2 -660fe211|223344556677885f5f5f5f5f 64 gnu psrad (%rcx),%xmm2 -660fe211|223344556677885f5f5f5f5f 64 intel psrad xmm2, xmmword ptr [rcx] -660fe211|223344556677885f5f5f5f5f 64 plan9 PSRAD 0(CX), X2 -660fe311|223344556677885f5f5f5f5f 32 intel pavgw xmm2, xmmword ptr [ecx] -660fe311|223344556677885f5f5f5f5f 32 plan9 PAVGW 0(CX), X2 -660fe311|223344556677885f5f5f5f5f 64 gnu pavgw (%rcx),%xmm2 -660fe311|223344556677885f5f5f5f5f 64 intel pavgw xmm2, xmmword ptr [rcx] -660fe311|223344556677885f5f5f5f5f 64 plan9 PAVGW 0(CX), X2 -660fe411|223344556677885f5f5f5f5f 32 intel pmulhuw xmm2, xmmword ptr [ecx] -660fe411|223344556677885f5f5f5f5f 32 plan9 PMULHUW 0(CX), X2 -660fe411|223344556677885f5f5f5f5f 64 gnu pmulhuw (%rcx),%xmm2 -660fe411|223344556677885f5f5f5f5f 64 intel pmulhuw xmm2, xmmword ptr [rcx] -660fe411|223344556677885f5f5f5f5f 64 plan9 PMULHUW 0(CX), X2 -660fe511|223344556677885f5f5f5f5f 32 intel pmulhw xmm2, xmmword ptr [ecx] -660fe511|223344556677885f5f5f5f5f 32 plan9 PMULHW 0(CX), X2 -660fe511|223344556677885f5f5f5f5f 64 gnu pmulhw (%rcx),%xmm2 -660fe511|223344556677885f5f5f5f5f 64 intel pmulhw xmm2, xmmword ptr [rcx] -660fe511|223344556677885f5f5f5f5f 64 plan9 PMULHW 0(CX), X2 -660fe611|223344556677885f5f5f5f5f 32 intel cvttpd2dq xmm2, xmmword ptr [ecx] -660fe611|223344556677885f5f5f5f5f 32 plan9 CVTTPD2DQ 0(CX), X2 -660fe611|223344556677885f5f5f5f5f 64 gnu cvttpd2dq (%rcx),%xmm2 -660fe611|223344556677885f5f5f5f5f 64 intel cvttpd2dq xmm2, xmmword ptr [rcx] -660fe611|223344556677885f5f5f5f5f 64 plan9 CVTTPD2DQ 0(CX), X2 -660fe711|223344556677885f5f5f5f5f 32 intel movntdq xmmword ptr [ecx], xmm2 -660fe711|223344556677885f5f5f5f5f 32 plan9 MOVNTDQ X2, 0(CX) -660fe711|223344556677885f5f5f5f5f 64 gnu movntdq %xmm2,(%rcx) -660fe711|223344556677885f5f5f5f5f 64 intel movntdq xmmword ptr [rcx], xmm2 -660fe711|223344556677885f5f5f5f5f 64 plan9 MOVNTDQ X2, 0(CX) -660fe811|223344556677885f5f5f5f5f 32 intel psubsb xmm2, xmmword ptr [ecx] -660fe811|223344556677885f5f5f5f5f 32 plan9 PSUBSB 0(CX), X2 -660fe811|223344556677885f5f5f5f5f 64 gnu psubsb (%rcx),%xmm2 -660fe811|223344556677885f5f5f5f5f 64 intel psubsb xmm2, xmmword ptr [rcx] -660fe811|223344556677885f5f5f5f5f 64 plan9 PSUBSB 0(CX), X2 -660fe911|223344556677885f5f5f5f5f 32 intel psubsw xmm2, xmmword ptr [ecx] -660fe911|223344556677885f5f5f5f5f 32 plan9 PSUBSW 0(CX), X2 -660fe911|223344556677885f5f5f5f5f 64 gnu psubsw (%rcx),%xmm2 -660fe911|223344556677885f5f5f5f5f 64 intel psubsw xmm2, xmmword ptr [rcx] -660fe911|223344556677885f5f5f5f5f 64 plan9 PSUBSW 0(CX), X2 -660fea11|223344556677885f5f5f5f5f 32 intel pminsw xmm2, xmmword ptr [ecx] -660fea11|223344556677885f5f5f5f5f 32 plan9 PMINSW 0(CX), X2 -660fea11|223344556677885f5f5f5f5f 64 gnu pminsw (%rcx),%xmm2 -660fea11|223344556677885f5f5f5f5f 64 intel pminsw xmm2, xmmword ptr [rcx] -660fea11|223344556677885f5f5f5f5f 64 plan9 PMINSW 0(CX), X2 -660feb11|223344556677885f5f5f5f5f 32 intel por xmm2, xmmword ptr [ecx] -660feb11|223344556677885f5f5f5f5f 32 plan9 POR 0(CX), X2 -660feb11|223344556677885f5f5f5f5f 64 gnu por (%rcx),%xmm2 -660feb11|223344556677885f5f5f5f5f 64 intel por xmm2, xmmword ptr [rcx] -660feb11|223344556677885f5f5f5f5f 64 plan9 POR 0(CX), X2 -660fec11|223344556677885f5f5f5f5f 32 intel paddsb xmm2, xmmword ptr [ecx] -660fec11|223344556677885f5f5f5f5f 32 plan9 PADDSB 0(CX), X2 -660fec11|223344556677885f5f5f5f5f 64 gnu paddsb (%rcx),%xmm2 -660fec11|223344556677885f5f5f5f5f 64 intel paddsb xmm2, xmmword ptr [rcx] -660fec11|223344556677885f5f5f5f5f 64 plan9 PADDSB 0(CX), X2 -660fed11|223344556677885f5f5f5f5f 32 intel paddsw xmm2, xmmword ptr [ecx] -660fed11|223344556677885f5f5f5f5f 32 plan9 PADDSW 0(CX), X2 -660fed11|223344556677885f5f5f5f5f 64 gnu paddsw (%rcx),%xmm2 -660fed11|223344556677885f5f5f5f5f 64 intel paddsw xmm2, xmmword ptr [rcx] -660fed11|223344556677885f5f5f5f5f 64 plan9 PADDSW 0(CX), X2 -660fee11|223344556677885f5f5f5f5f 32 intel pmaxsw xmm2, xmmword ptr [ecx] -660fee11|223344556677885f5f5f5f5f 32 plan9 PMAXSW 0(CX), X2 -660fee11|223344556677885f5f5f5f5f 64 gnu pmaxsw (%rcx),%xmm2 -660fee11|223344556677885f5f5f5f5f 64 intel pmaxsw xmm2, xmmword ptr [rcx] -660fee11|223344556677885f5f5f5f5f 64 plan9 PMAXSW 0(CX), X2 -660fef11|223344556677885f5f5f5f5f 32 intel pxor xmm2, xmmword ptr [ecx] -660fef11|223344556677885f5f5f5f5f 32 plan9 PXOR 0(CX), X2 -660fef11|223344556677885f5f5f5f5f 64 gnu pxor (%rcx),%xmm2 -660fef11|223344556677885f5f5f5f5f 64 intel pxor xmm2, xmmword ptr [rcx] -660fef11|223344556677885f5f5f5f5f 64 plan9 PXOR 0(CX), X2 -660ff111|223344556677885f5f5f5f5f 32 intel psllw xmm2, xmmword ptr [ecx] -660ff111|223344556677885f5f5f5f5f 32 plan9 PSLLW 0(CX), X2 -660ff111|223344556677885f5f5f5f5f 64 gnu psllw (%rcx),%xmm2 -660ff111|223344556677885f5f5f5f5f 64 intel psllw xmm2, xmmword ptr [rcx] -660ff111|223344556677885f5f5f5f5f 64 plan9 PSLLW 0(CX), X2 -660ff211|223344556677885f5f5f5f5f 32 intel pslld xmm2, xmmword ptr [ecx] -660ff211|223344556677885f5f5f5f5f 32 plan9 PSLLD 0(CX), X2 -660ff211|223344556677885f5f5f5f5f 64 gnu pslld (%rcx),%xmm2 -660ff211|223344556677885f5f5f5f5f 64 intel pslld xmm2, xmmword ptr [rcx] -660ff211|223344556677885f5f5f5f5f 64 plan9 PSLLD 0(CX), X2 -660ff311|223344556677885f5f5f5f5f 32 intel psllq xmm2, xmmword ptr [ecx] -660ff311|223344556677885f5f5f5f5f 32 plan9 PSLLQ 0(CX), X2 -660ff311|223344556677885f5f5f5f5f 64 gnu psllq (%rcx),%xmm2 -660ff311|223344556677885f5f5f5f5f 64 intel psllq xmm2, xmmword ptr [rcx] -660ff311|223344556677885f5f5f5f5f 64 plan9 PSLLQ 0(CX), X2 -660ff411|223344556677885f5f5f5f5f 32 intel pmuludq xmm2, xmmword ptr [ecx] -660ff411|223344556677885f5f5f5f5f 32 plan9 PMULUDQ 0(CX), X2 -660ff411|223344556677885f5f5f5f5f 64 gnu pmuludq (%rcx),%xmm2 -660ff411|223344556677885f5f5f5f5f 64 intel pmuludq xmm2, xmmword ptr [rcx] -660ff411|223344556677885f5f5f5f5f 64 plan9 PMULUDQ 0(CX), X2 -660ff511|223344556677885f5f5f5f5f 32 intel pmaddwd xmm2, xmmword ptr [ecx] -660ff511|223344556677885f5f5f5f5f 32 plan9 PMADDWD 0(CX), X2 -660ff511|223344556677885f5f5f5f5f 64 gnu pmaddwd (%rcx),%xmm2 -660ff511|223344556677885f5f5f5f5f 64 intel pmaddwd xmm2, xmmword ptr [rcx] -660ff511|223344556677885f5f5f5f5f 64 plan9 PMADDWD 0(CX), X2 -660ff611|223344556677885f5f5f5f5f 32 intel psadbw xmm2, xmmword ptr [ecx] -660ff611|223344556677885f5f5f5f5f 32 plan9 PSADBW 0(CX), X2 -660ff611|223344556677885f5f5f5f5f 64 gnu psadbw (%rcx),%xmm2 -660ff611|223344556677885f5f5f5f5f 64 intel psadbw xmm2, xmmword ptr [rcx] -660ff611|223344556677885f5f5f5f5f 64 plan9 PSADBW 0(CX), X2 -660ff7c0|11223344556677885f5f5f5f 32 intel maskmovdqu xmm0, xmm0 -660ff7c0|11223344556677885f5f5f5f 32 plan9 MASKMOVDQU X0, X0 -660ff7c0|11223344556677885f5f5f5f 64 intel maskmovdqu xmm0, xmm0 -660ff7c0|11223344556677885f5f5f5f 64 plan9 MASKMOVDQU X0, X0 -660ff811|223344556677885f5f5f5f5f 32 intel psubb xmm2, xmmword ptr [ecx] -660ff811|223344556677885f5f5f5f5f 32 plan9 PSUBB 0(CX), X2 -660ff811|223344556677885f5f5f5f5f 64 gnu psubb (%rcx),%xmm2 -660ff811|223344556677885f5f5f5f5f 64 intel psubb xmm2, xmmword ptr [rcx] -660ff811|223344556677885f5f5f5f5f 64 plan9 PSUBB 0(CX), X2 -660ff911|223344556677885f5f5f5f5f 32 intel psubw xmm2, xmmword ptr [ecx] -660ff911|223344556677885f5f5f5f5f 32 plan9 PSUBW 0(CX), X2 -660ff911|223344556677885f5f5f5f5f 64 gnu psubw (%rcx),%xmm2 -660ff911|223344556677885f5f5f5f5f 64 intel psubw xmm2, xmmword ptr [rcx] -660ff911|223344556677885f5f5f5f5f 64 plan9 PSUBW 0(CX), X2 -660ffa11|223344556677885f5f5f5f5f 32 intel psubd xmm2, xmmword ptr [ecx] -660ffa11|223344556677885f5f5f5f5f 32 plan9 PSUBD 0(CX), X2 -660ffa11|223344556677885f5f5f5f5f 64 gnu psubd (%rcx),%xmm2 -660ffa11|223344556677885f5f5f5f5f 64 intel psubd xmm2, xmmword ptr [rcx] -660ffa11|223344556677885f5f5f5f5f 64 plan9 PSUBD 0(CX), X2 -660ffb11|223344556677885f5f5f5f5f 32 intel psubq xmm2, xmmword ptr [ecx] -660ffb11|223344556677885f5f5f5f5f 32 plan9 PSUBQ 0(CX), X2 -660ffb11|223344556677885f5f5f5f5f 64 gnu psubq (%rcx),%xmm2 -660ffb11|223344556677885f5f5f5f5f 64 intel psubq xmm2, xmmword ptr [rcx] -660ffb11|223344556677885f5f5f5f5f 64 plan9 PSUBQ 0(CX), X2 -660ffc11|223344556677885f5f5f5f5f 32 intel paddb xmm2, xmmword ptr [ecx] -660ffc11|223344556677885f5f5f5f5f 32 plan9 PADDB 0(CX), X2 -660ffc11|223344556677885f5f5f5f5f 64 gnu paddb (%rcx),%xmm2 -660ffc11|223344556677885f5f5f5f5f 64 intel paddb xmm2, xmmword ptr [rcx] -660ffc11|223344556677885f5f5f5f5f 64 plan9 PADDB 0(CX), X2 -660ffd11|223344556677885f5f5f5f5f 32 intel paddw xmm2, xmmword ptr [ecx] -660ffd11|223344556677885f5f5f5f5f 32 plan9 PADDW 0(CX), X2 -660ffd11|223344556677885f5f5f5f5f 64 gnu paddw (%rcx),%xmm2 -660ffd11|223344556677885f5f5f5f5f 64 intel paddw xmm2, xmmword ptr [rcx] -660ffd11|223344556677885f5f5f5f5f 64 plan9 PADDW 0(CX), X2 -660ffe11|223344556677885f5f5f5f5f 32 intel paddd xmm2, xmmword ptr [ecx] -660ffe11|223344556677885f5f5f5f5f 32 plan9 PADDD 0(CX), X2 -660ffe11|223344556677885f5f5f5f5f 64 gnu paddd (%rcx),%xmm2 -660ffe11|223344556677885f5f5f5f5f 64 intel paddd xmm2, xmmword ptr [rcx] -660ffe11|223344556677885f5f5f5f5f 64 plan9 PADDD 0(CX), X2 -661122|3344556677885f5f5f5f5f5f5f 32 intel adc word ptr [edx], sp -661122|3344556677885f5f5f5f5f5f5f 32 plan9 ADCW SP, 0(DX) -661122|3344556677885f5f5f5f5f5f5f 64 gnu adc %sp,(%rdx) -661122|3344556677885f5f5f5f5f5f5f 64 intel adc word ptr [rdx], sp -661122|3344556677885f5f5f5f5f5f5f 64 plan9 ADCW SP, 0(DX) -661311|223344556677885f5f5f5f5f5f 32 intel adc dx, word ptr [ecx] -661311|223344556677885f5f5f5f5f5f 32 plan9 ADCW 0(CX), DX -661311|223344556677885f5f5f5f5f5f 64 gnu adc (%rcx),%dx -661311|223344556677885f5f5f5f5f5f 64 intel adc dx, word ptr [rcx] -661311|223344556677885f5f5f5f5f5f 64 plan9 ADCW 0(CX), DX -66151122|3344556677885f5f5f5f5f5f 32 intel adc ax, 0x2211 -66151122|3344556677885f5f5f5f5f5f 32 plan9 ADCW $0x2211, AX -66151122|3344556677885f5f5f5f5f5f 64 gnu adc $0x2211,%ax -66151122|3344556677885f5f5f5f5f5f 64 intel adc ax, 0x2211 -66151122|3344556677885f5f5f5f5f5f 64 plan9 ADCW $0x2211, AX -661911|223344556677885f5f5f5f5f5f 32 intel sbb word ptr [ecx], dx -661911|223344556677885f5f5f5f5f5f 32 plan9 SBBW DX, 0(CX) -661911|223344556677885f5f5f5f5f5f 64 gnu sbb %dx,(%rcx) -661911|223344556677885f5f5f5f5f5f 64 intel sbb word ptr [rcx], dx -661911|223344556677885f5f5f5f5f5f 64 plan9 SBBW DX, 0(CX) -661b11|223344556677885f5f5f5f5f5f 32 intel sbb dx, word ptr [ecx] -661b11|223344556677885f5f5f5f5f5f 32 plan9 SBBW 0(CX), DX -661b11|223344556677885f5f5f5f5f5f 64 gnu sbb (%rcx),%dx -661b11|223344556677885f5f5f5f5f5f 64 intel sbb dx, word ptr [rcx] -661b11|223344556677885f5f5f5f5f5f 64 plan9 SBBW 0(CX), DX -661d1122|3344556677885f5f5f5f5f5f 32 intel sbb ax, 0x2211 -661d1122|3344556677885f5f5f5f5f5f 32 plan9 SBBW $0x2211, AX -661d1122|3344556677885f5f5f5f5f5f 64 gnu sbb $0x2211,%ax -661d1122|3344556677885f5f5f5f5f5f 64 intel sbb ax, 0x2211 -661d1122|3344556677885f5f5f5f5f5f 64 plan9 SBBW $0x2211, AX -662111|223344556677885f5f5f5f5f5f 32 intel and word ptr [ecx], dx -662111|223344556677885f5f5f5f5f5f 32 plan9 ANDW DX, 0(CX) -662111|223344556677885f5f5f5f5f5f 64 gnu and %dx,(%rcx) -662111|223344556677885f5f5f5f5f5f 64 intel and word ptr [rcx], dx -662111|223344556677885f5f5f5f5f5f 64 plan9 ANDW DX, 0(CX) -662311|223344556677885f5f5f5f5f5f 32 intel and dx, word ptr [ecx] -662311|223344556677885f5f5f5f5f5f 32 plan9 ANDW 0(CX), DX -662311|223344556677885f5f5f5f5f5f 64 gnu and (%rcx),%dx -662311|223344556677885f5f5f5f5f5f 64 intel and dx, word ptr [rcx] -662311|223344556677885f5f5f5f5f5f 64 plan9 ANDW 0(CX), DX -66251122|3344556677885f5f5f5f5f5f 32 intel and ax, 0x2211 -66251122|3344556677885f5f5f5f5f5f 32 plan9 ANDW $0x2211, AX -66251122|3344556677885f5f5f5f5f5f 64 gnu and $0x2211,%ax -66251122|3344556677885f5f5f5f5f5f 64 intel and ax, 0x2211 -66251122|3344556677885f5f5f5f5f5f 64 plan9 ANDW $0x2211, AX -662911|223344556677885f5f5f5f5f5f 32 intel sub word ptr [ecx], dx -662911|223344556677885f5f5f5f5f5f 32 plan9 SUBW DX, 0(CX) -662911|223344556677885f5f5f5f5f5f 64 gnu sub %dx,(%rcx) -662911|223344556677885f5f5f5f5f5f 64 intel sub word ptr [rcx], dx -662911|223344556677885f5f5f5f5f5f 64 plan9 SUBW DX, 0(CX) -662b11|223344556677885f5f5f5f5f5f 32 intel sub dx, word ptr [ecx] -662b11|223344556677885f5f5f5f5f5f 32 plan9 SUBW 0(CX), DX -662b11|223344556677885f5f5f5f5f5f 64 gnu sub (%rcx),%dx -662b11|223344556677885f5f5f5f5f5f 64 intel sub dx, word ptr [rcx] -662b11|223344556677885f5f5f5f5f5f 64 plan9 SUBW 0(CX), DX -662d1122|3344556677885f5f5f5f5f5f 32 intel sub ax, 0x2211 -662d1122|3344556677885f5f5f5f5f5f 32 plan9 SUBW $0x2211, AX -662d1122|3344556677885f5f5f5f5f5f 64 gnu sub $0x2211,%ax -662d1122|3344556677885f5f5f5f5f5f 64 intel sub ax, 0x2211 -662d1122|3344556677885f5f5f5f5f5f 64 plan9 SUBW $0x2211, AX -663111|223344556677885f5f5f5f5f5f 32 intel xor word ptr [ecx], dx -663111|223344556677885f5f5f5f5f5f 32 plan9 XORW DX, 0(CX) -663111|223344556677885f5f5f5f5f5f 64 gnu xor %dx,(%rcx) -663111|223344556677885f5f5f5f5f5f 64 intel xor word ptr [rcx], dx -663111|223344556677885f5f5f5f5f5f 64 plan9 XORW DX, 0(CX) -663311|223344556677885f5f5f5f5f5f 32 intel xor dx, word ptr [ecx] -663311|223344556677885f5f5f5f5f5f 32 plan9 XORW 0(CX), DX -663311|223344556677885f5f5f5f5f5f 64 gnu xor (%rcx),%dx -663311|223344556677885f5f5f5f5f5f 64 intel xor dx, word ptr [rcx] -663311|223344556677885f5f5f5f5f5f 64 plan9 XORW 0(CX), DX -66351122|3344556677885f5f5f5f5f5f 32 intel xor ax, 0x2211 -66351122|3344556677885f5f5f5f5f5f 32 plan9 XORW $0x2211, AX -66351122|3344556677885f5f5f5f5f5f 64 gnu xor $0x2211,%ax -66351122|3344556677885f5f5f5f5f5f 64 intel xor ax, 0x2211 -66351122|3344556677885f5f5f5f5f5f 64 plan9 XORW $0x2211, AX -663911|223344556677885f5f5f5f5f5f 32 intel cmp word ptr [ecx], dx -663911|223344556677885f5f5f5f5f5f 32 plan9 CMPW DX, 0(CX) -663911|223344556677885f5f5f5f5f5f 64 gnu cmp %dx,(%rcx) -663911|223344556677885f5f5f5f5f5f 64 intel cmp word ptr [rcx], dx -663911|223344556677885f5f5f5f5f5f 64 plan9 CMPW DX, 0(CX) -663b11|223344556677885f5f5f5f5f5f 32 intel cmp dx, word ptr [ecx] -663b11|223344556677885f5f5f5f5f5f 32 plan9 CMPW 0(CX), DX -663b11|223344556677885f5f5f5f5f5f 64 gnu cmp (%rcx),%dx -663b11|223344556677885f5f5f5f5f5f 64 intel cmp dx, word ptr [rcx] -663b11|223344556677885f5f5f5f5f5f 64 plan9 CMPW 0(CX), DX -663d1122|3344556677885f5f5f5f5f5f 32 intel cmp ax, 0x2211 -663d1122|3344556677885f5f5f5f5f5f 32 plan9 CMPW $0x2211, AX -663d1122|3344556677885f5f5f5f5f5f 64 gnu cmp $0x2211,%ax -663d1122|3344556677885f5f5f5f5f5f 64 intel cmp ax, 0x2211 -663d1122|3344556677885f5f5f5f5f5f 64 plan9 CMPW $0x2211, AX -6640|11223344556677885f5f5f5f5f5f 32 intel inc ax -6640|11223344556677885f5f5f5f5f5f 32 plan9 INCW AX -66480f3a161122|3344556677885f5f5f 64 gnu pextrq $0x22,%xmm2,(%rcx) -66480f3a161122|3344556677885f5f5f 64 intel pextrq qword ptr [rcx], xmm2, 0x22 -66480f3a161122|3344556677885f5f5f 64 plan9 PEXTRQ $0x22, X2, 0(CX) -66480f3a221122|3344556677885f5f5f 64 gnu pinsrq $0x22,(%rcx),%xmm2 -66480f3a221122|3344556677885f5f5f 64 intel pinsrq xmm2, qword ptr [rcx], 0x22 -66480f3a221122|3344556677885f5f5f 64 plan9 PINSRQ $0x22, 0(CX), X2 -66480f6e11|223344556677885f5f5f5f 64 gnu movq (%rcx),%xmm2 -66480f6e11|223344556677885f5f5f5f 64 intel movq xmm2, qword ptr [rcx] -66480f6e11|223344556677885f5f5f5f 64 plan9 MOVQ 0(CX), X2 -66480f7e11|223344556677885f5f5f5f 64 gnu movq %xmm2,(%rcx) -66480f7e11|223344556677885f5f5f5f 64 intel movq qword ptr [rcx], xmm2 -66480f7e11|223344556677885f5f5f5f 64 plan9 MOVQ X2, 0(CX) -6648|0f3a1611223344556677885f5f5f 32 intel dec ax -6648|0f3a1611223344556677885f5f5f 32 plan9 DECW AX -6650|11223344556677885f5f5f5f5f5f 32 intel push ax -6650|11223344556677885f5f5f5f5f5f 32 plan9 PUSHW AX -6650|11223344556677885f5f5f5f5f5f 64 gnu push %ax -6650|11223344556677885f5f5f5f5f5f 64 intel push ax -6650|11223344556677885f5f5f5f5f5f 64 plan9 PUSHW AX -6658|11223344556677885f5f5f5f5f5f 32 intel pop ax -6658|11223344556677885f5f5f5f5f5f 32 plan9 POPW AX -6658|11223344556677885f5f5f5f5f5f 64 gnu pop %ax -6658|11223344556677885f5f5f5f5f5f 64 intel pop ax -6658|11223344556677885f5f5f5f5f5f 64 plan9 POPW AX -6660|11223344556677885f5f5f5f5f5f 32 intel data16 pusha -6660|11223344556677885f5f5f5f5f5f 32 plan9 PUSHAW -6661|11223344556677885f5f5f5f5f5f 32 intel data16 popa -6661|11223344556677885f5f5f5f5f5f 32 plan9 POPAW -666211|223344556677885f5f5f5f5f5f 32 intel bound dx, qword ptr [ecx] -666211|223344556677885f5f5f5f5f5f 32 plan9 BOUND 0(CX), DX -666311|223344556677885f5f5f5f5f5f 64 gnu movsxd (%rcx),%dx -666311|223344556677885f5f5f5f5f5f 64 intel movsxd dx, dword ptr [rcx] -666311|223344556677885f5f5f5f5f5f 64 plan9 MOVSXD 0(CX), DX -66681122|3344556677885f5f5f5f5f5f 32 intel push 0x2211 -66681122|3344556677885f5f5f5f5f5f 32 plan9 PUSHW $0x2211 -66681122|3344556677885f5f5f5f5f5f 64 gnu pushw $0x2211 -66681122|3344556677885f5f5f5f5f5f 64 intel push 0x2211 -66681122|3344556677885f5f5f5f5f5f 64 plan9 PUSHW $0x2211 -6669112233|44556677885f5f5f5f5f5f 32 intel imul dx, word ptr [ecx], 0x3322 -6669112233|44556677885f5f5f5f5f5f 32 plan9 IMULW $0x3322, 0(CX), DX -6669112233|44556677885f5f5f5f5f5f 64 gnu imul $0x3322,(%rcx),%dx -6669112233|44556677885f5f5f5f5f5f 64 intel imul dx, word ptr [rcx], 0x3322 -6669112233|44556677885f5f5f5f5f5f 64 plan9 IMULW $0x3322, 0(CX), DX -666b1122|3344556677885f5f5f5f5f5f 32 intel imul dx, word ptr [ecx], 0x22 -666b1122|3344556677885f5f5f5f5f5f 32 plan9 IMULW $0x22, 0(CX), DX -666b1122|3344556677885f5f5f5f5f5f 64 gnu imul $0x22,(%rcx),%dx -666b1122|3344556677885f5f5f5f5f5f 64 intel imul dx, word ptr [rcx], 0x22 -666b1122|3344556677885f5f5f5f5f5f 64 plan9 IMULW $0x22, 0(CX), DX -666d|11223344556677885f5f5f5f5f5f 32 intel data16 insw -666d|11223344556677885f5f5f5f5f5f 32 plan9 INSW DX, ES:0(DI) -666d|11223344556677885f5f5f5f5f5f 64 gnu insw (%dx),%es:(%rdi) -666d|11223344556677885f5f5f5f5f5f 64 intel data16 insw -666d|11223344556677885f5f5f5f5f5f 64 plan9 INSW DX, ES:0(DI) -666f|11223344556677885f5f5f5f5f5f 32 intel data16 outsw -666f|11223344556677885f5f5f5f5f5f 32 plan9 OUTSW DS:0(SI), DX -666f|11223344556677885f5f5f5f5f5f 64 gnu outsw %ds:(%rsi),(%dx) -666f|11223344556677885f5f5f5f5f5f 64 intel data16 outsw -666f|11223344556677885f5f5f5f5f5f 64 plan9 OUTSW DS:0(SI), DX -6681001122|3344556677885f5f5f5f5f 32 intel add word ptr [eax], 0x2211 -6681001122|3344556677885f5f5f5f5f 32 plan9 ADDW $0x2211, 0(AX) -6681001122|3344556677885f5f5f5f5f 64 gnu addw $0x2211,(%rax) -6681001122|3344556677885f5f5f5f5f 64 intel add word ptr [rax], 0x2211 -6681001122|3344556677885f5f5f5f5f 64 plan9 ADDW $0x2211, 0(AX) -6681081122|3344556677885f5f5f5f5f 32 intel or word ptr [eax], 0x2211 -6681081122|3344556677885f5f5f5f5f 32 plan9 ORW $0x2211, 0(AX) -6681081122|3344556677885f5f5f5f5f 64 gnu orw $0x2211,(%rax) -6681081122|3344556677885f5f5f5f5f 64 intel or word ptr [rax], 0x2211 -6681081122|3344556677885f5f5f5f5f 64 plan9 ORW $0x2211, 0(AX) -6681112233|44556677885f5f5f5f5f5f 32 intel adc word ptr [ecx], 0x3322 -6681112233|44556677885f5f5f5f5f5f 32 plan9 ADCW $0x3322, 0(CX) -6681112233|44556677885f5f5f5f5f5f 64 gnu adcw $0x3322,(%rcx) -6681112233|44556677885f5f5f5f5f5f 64 intel adc word ptr [rcx], 0x3322 -6681112233|44556677885f5f5f5f5f5f 64 plan9 ADCW $0x3322, 0(CX) -6681181122|3344556677885f5f5f5f5f 32 intel sbb word ptr [eax], 0x2211 -6681181122|3344556677885f5f5f5f5f 32 plan9 SBBW $0x2211, 0(AX) -6681181122|3344556677885f5f5f5f5f 64 gnu sbbw $0x2211,(%rax) -6681181122|3344556677885f5f5f5f5f 64 intel sbb word ptr [rax], 0x2211 -6681181122|3344556677885f5f5f5f5f 64 plan9 SBBW $0x2211, 0(AX) -6681201122|3344556677885f5f5f5f5f 32 intel and word ptr [eax], 0x2211 -6681201122|3344556677885f5f5f5f5f 32 plan9 ANDW $0x2211, 0(AX) -6681201122|3344556677885f5f5f5f5f 64 gnu andw $0x2211,(%rax) -6681201122|3344556677885f5f5f5f5f 64 intel and word ptr [rax], 0x2211 -6681201122|3344556677885f5f5f5f5f 64 plan9 ANDW $0x2211, 0(AX) -6681281122|3344556677885f5f5f5f5f 32 intel sub word ptr [eax], 0x2211 -6681281122|3344556677885f5f5f5f5f 32 plan9 SUBW $0x2211, 0(AX) -6681281122|3344556677885f5f5f5f5f 64 gnu subw $0x2211,(%rax) -6681281122|3344556677885f5f5f5f5f 64 intel sub word ptr [rax], 0x2211 -6681281122|3344556677885f5f5f5f5f 64 plan9 SUBW $0x2211, 0(AX) -6681301122|3344556677885f5f5f5f5f 32 intel xor word ptr [eax], 0x2211 -6681301122|3344556677885f5f5f5f5f 32 plan9 XORW $0x2211, 0(AX) -6681301122|3344556677885f5f5f5f5f 64 gnu xorw $0x2211,(%rax) -6681301122|3344556677885f5f5f5f5f 64 intel xor word ptr [rax], 0x2211 -6681301122|3344556677885f5f5f5f5f 64 plan9 XORW $0x2211, 0(AX) -6681381122|3344556677885f5f5f5f5f 32 intel cmp word ptr [eax], 0x2211 -6681381122|3344556677885f5f5f5f5f 32 plan9 CMPW $0x2211, 0(AX) -6681381122|3344556677885f5f5f5f5f 64 gnu cmpw $0x2211,(%rax) -6681381122|3344556677885f5f5f5f5f 64 intel cmp word ptr [rax], 0x2211 -6681381122|3344556677885f5f5f5f5f 64 plan9 CMPW $0x2211, 0(AX) -66830011|223344556677885f5f5f5f5f 32 intel add word ptr [eax], 0x11 -66830011|223344556677885f5f5f5f5f 32 plan9 ADDW $0x11, 0(AX) -66830011|223344556677885f5f5f5f5f 64 gnu addw $0x11,(%rax) -66830011|223344556677885f5f5f5f5f 64 intel add word ptr [rax], 0x11 -66830011|223344556677885f5f5f5f5f 64 plan9 ADDW $0x11, 0(AX) -66830811|223344556677885f5f5f5f5f 32 intel or word ptr [eax], 0x11 -66830811|223344556677885f5f5f5f5f 32 plan9 ORW $0x11, 0(AX) -66830811|223344556677885f5f5f5f5f 64 gnu orw $0x11,(%rax) -66830811|223344556677885f5f5f5f5f 64 intel or word ptr [rax], 0x11 -66830811|223344556677885f5f5f5f5f 64 plan9 ORW $0x11, 0(AX) -66831122|3344556677885f5f5f5f5f5f 32 intel adc word ptr [ecx], 0x22 -66831122|3344556677885f5f5f5f5f5f 32 plan9 ADCW $0x22, 0(CX) -66831122|3344556677885f5f5f5f5f5f 64 gnu adcw $0x22,(%rcx) -66831122|3344556677885f5f5f5f5f5f 64 intel adc word ptr [rcx], 0x22 -66831122|3344556677885f5f5f5f5f5f 64 plan9 ADCW $0x22, 0(CX) -66831811|223344556677885f5f5f5f5f 32 intel sbb word ptr [eax], 0x11 -66831811|223344556677885f5f5f5f5f 32 plan9 SBBW $0x11, 0(AX) -66831811|223344556677885f5f5f5f5f 64 gnu sbbw $0x11,(%rax) -66831811|223344556677885f5f5f5f5f 64 intel sbb word ptr [rax], 0x11 -66831811|223344556677885f5f5f5f5f 64 plan9 SBBW $0x11, 0(AX) -66832011|223344556677885f5f5f5f5f 32 intel and word ptr [eax], 0x11 -66832011|223344556677885f5f5f5f5f 32 plan9 ANDW $0x11, 0(AX) -66832011|223344556677885f5f5f5f5f 64 gnu andw $0x11,(%rax) -66832011|223344556677885f5f5f5f5f 64 intel and word ptr [rax], 0x11 -66832011|223344556677885f5f5f5f5f 64 plan9 ANDW $0x11, 0(AX) -66832811|223344556677885f5f5f5f5f 32 intel sub word ptr [eax], 0x11 -66832811|223344556677885f5f5f5f5f 32 plan9 SUBW $0x11, 0(AX) -66832811|223344556677885f5f5f5f5f 64 gnu subw $0x11,(%rax) -66832811|223344556677885f5f5f5f5f 64 intel sub word ptr [rax], 0x11 -66832811|223344556677885f5f5f5f5f 64 plan9 SUBW $0x11, 0(AX) -66833011|223344556677885f5f5f5f5f 32 intel xor word ptr [eax], 0x11 -66833011|223344556677885f5f5f5f5f 32 plan9 XORW $0x11, 0(AX) -66833011|223344556677885f5f5f5f5f 64 gnu xorw $0x11,(%rax) -66833011|223344556677885f5f5f5f5f 64 intel xor word ptr [rax], 0x11 -66833011|223344556677885f5f5f5f5f 64 plan9 XORW $0x11, 0(AX) -66833811|223344556677885f5f5f5f5f 32 intel cmp word ptr [eax], 0x11 -66833811|223344556677885f5f5f5f5f 32 plan9 CMPW $0x11, 0(AX) -66833811|223344556677885f5f5f5f5f 64 gnu cmpw $0x11,(%rax) -66833811|223344556677885f5f5f5f5f 64 intel cmp word ptr [rax], 0x11 -66833811|223344556677885f5f5f5f5f 64 plan9 CMPW $0x11, 0(AX) -668511|223344556677885f5f5f5f5f5f 32 intel test word ptr [ecx], dx -668511|223344556677885f5f5f5f5f5f 32 plan9 TESTW DX, 0(CX) -668511|223344556677885f5f5f5f5f5f 64 gnu test %dx,(%rcx) -668511|223344556677885f5f5f5f5f5f 64 intel test word ptr [rcx], dx -668511|223344556677885f5f5f5f5f5f 64 plan9 TESTW DX, 0(CX) -668711|223344556677885f5f5f5f5f5f 32 intel xchg word ptr [ecx], dx -668711|223344556677885f5f5f5f5f5f 32 plan9 XCHGW DX, 0(CX) -668711|223344556677885f5f5f5f5f5f 64 gnu xchg %dx,(%rcx) -668711|223344556677885f5f5f5f5f5f 64 intel xchg word ptr [rcx], dx -668711|223344556677885f5f5f5f5f5f 64 plan9 XCHGW DX, 0(CX) -668911|223344556677885f5f5f5f5f5f 32 intel mov word ptr [ecx], dx -668911|223344556677885f5f5f5f5f5f 32 plan9 MOVW DX, 0(CX) -668911|223344556677885f5f5f5f5f5f 64 gnu mov %dx,(%rcx) -668911|223344556677885f5f5f5f5f5f 64 intel mov word ptr [rcx], dx -668911|223344556677885f5f5f5f5f5f 64 plan9 MOVW DX, 0(CX) -668b11|223344556677885f5f5f5f5f5f 32 intel mov dx, word ptr [ecx] -668b11|223344556677885f5f5f5f5f5f 32 plan9 MOVW 0(CX), DX -668b11|223344556677885f5f5f5f5f5f 64 gnu mov (%rcx),%dx -668b11|223344556677885f5f5f5f5f5f 64 intel mov dx, word ptr [rcx] -668b11|223344556677885f5f5f5f5f5f 64 plan9 MOVW 0(CX), DX -668c11|223344556677885f5f5f5f5f5f 32 intel mov word ptr [ecx], ss -668c11|223344556677885f5f5f5f5f5f 32 plan9 MOVW SS, 0(CX) -668c11|223344556677885f5f5f5f5f5f 64 gnu data16 mov %ss,(%rcx) -668c11|223344556677885f5f5f5f5f5f 64 intel mov word ptr [rcx], ss -668c11|223344556677885f5f5f5f5f5f 64 plan9 MOVW SS, 0(CX) -668d11|223344556677885f5f5f5f5f5f 32 intel lea dx, ptr [ecx] -668d11|223344556677885f5f5f5f5f5f 32 plan9 LEAW 0(CX), DX -668d11|223344556677885f5f5f5f5f5f 64 gnu lea (%rcx),%dx -668d11|223344556677885f5f5f5f5f5f 64 intel lea dx, ptr [rcx] -668d11|223344556677885f5f5f5f5f5f 64 plan9 LEAW 0(CX), DX -668ec0|11223344556677885f5f5f5f5f 32 intel mov es, ax -668ec0|11223344556677885f5f5f5f5f 32 plan9 MOVW AX, ES -668ec0|11223344556677885f5f5f5f5f 64 gnu mov %ax,%es -668ec0|11223344556677885f5f5f5f5f 64 intel mov es, ax -668ec0|11223344556677885f5f5f5f5f 64 plan9 MOVW AX, ES -668f00|11223344556677885f5f5f5f5f 32 intel pop word ptr [eax] -668f00|11223344556677885f5f5f5f5f 32 plan9 POPW 0(AX) -668f00|11223344556677885f5f5f5f5f 64 gnu popw (%rax) -668f00|11223344556677885f5f5f5f5f 64 intel pop word ptr [rax] -668f00|11223344556677885f5f5f5f5f 64 plan9 POPW 0(AX) -6690|11223344556677885f5f5f5f5f5f 32 plan9 NOPW -6690|11223344556677885f5f5f5f5f5f 64 gnu data16 nop -6690|11223344556677885f5f5f5f5f5f 64 plan9 NOPW -6698|11223344556677885f5f5f5f5f5f 32 intel data16 cbw -6698|11223344556677885f5f5f5f5f5f 32 plan9 CBW -6698|11223344556677885f5f5f5f5f5f 64 gnu cbtw -6698|11223344556677885f5f5f5f5f5f 64 intel data16 cbw -6698|11223344556677885f5f5f5f5f5f 64 plan9 CBW -6699|11223344556677885f5f5f5f5f5f 32 intel data16 cwd -6699|11223344556677885f5f5f5f5f5f 32 plan9 CWD -6699|11223344556677885f5f5f5f5f5f 64 gnu cwtd -6699|11223344556677885f5f5f5f5f5f 64 intel data16 cwd -6699|11223344556677885f5f5f5f5f5f 64 plan9 CWD -669a11223344|556677885f5f5f5f5f5f 32 intel call far 0x2211, 0x4433 -669a11223344|556677885f5f5f5f5f5f 32 plan9 LCALL $0x2211, $0x4433 -669c|11223344556677885f5f5f5f5f5f 32 intel data16 pushf -669c|11223344556677885f5f5f5f5f5f 32 plan9 PUSHF -669c|11223344556677885f5f5f5f5f5f 64 gnu pushfw -669c|11223344556677885f5f5f5f5f5f 64 intel data16 pushf -669c|11223344556677885f5f5f5f5f5f 64 plan9 PUSHF -669d|11223344556677885f5f5f5f5f5f 32 intel data16 popf -669d|11223344556677885f5f5f5f5f5f 32 plan9 POPF -669d|11223344556677885f5f5f5f5f5f 64 gnu popfw -669d|11223344556677885f5f5f5f5f5f 64 intel data16 popf -669d|11223344556677885f5f5f5f5f5f 64 plan9 POPF -66a11122334455667788|5f5f5f5f5f5f 64 gnu mov -0x778899aabbccddef,%ax -66a11122334455667788|5f5f5f5f5f5f 64 intel mov ax, word ptr [0x8877665544332211] -66a11122334455667788|5f5f5f5f5f5f 64 plan9 MOVW -0x778899aabbccddef, AX -66a111223344|556677885f5f5f5f5f5f 32 intel mov ax, word ptr [0x44332211] -66a111223344|556677885f5f5f5f5f5f 32 plan9 MOVW 0x44332211, AX -66a31122334455667788|5f5f5f5f5f5f 64 gnu mov %ax,-0x778899aabbccddef -66a31122334455667788|5f5f5f5f5f5f 64 intel mov word ptr [0x8877665544332211], ax -66a31122334455667788|5f5f5f5f5f5f 64 plan9 MOVW AX, -0x778899aabbccddef -66a311223344|556677885f5f5f5f5f5f 32 intel mov word ptr [0x44332211], ax -66a311223344|556677885f5f5f5f5f5f 32 plan9 MOVW AX, 0x44332211 -66a5|11223344556677885f5f5f5f5f5f 32 intel movsw word ptr [edi], word ptr [esi] -66a5|11223344556677885f5f5f5f5f5f 32 plan9 MOVSW DS:0(SI), ES:0(DI) -66a5|11223344556677885f5f5f5f5f5f 64 gnu movsw %ds:(%rsi),%es:(%rdi) -66a5|11223344556677885f5f5f5f5f5f 64 intel movsw word ptr [rdi], word ptr [rsi] -66a5|11223344556677885f5f5f5f5f5f 64 plan9 MOVSW DS:0(SI), ES:0(DI) -66a7|11223344556677885f5f5f5f5f5f 32 intel cmpsw word ptr [esi], word ptr [edi] -66a7|11223344556677885f5f5f5f5f5f 32 plan9 CMPSW ES:0(DI), DS:0(SI) -66a7|11223344556677885f5f5f5f5f5f 64 gnu cmpsw %es:(%rdi),%ds:(%rsi) -66a7|11223344556677885f5f5f5f5f5f 64 intel cmpsw word ptr [rsi], word ptr [rdi] -66a7|11223344556677885f5f5f5f5f5f 64 plan9 CMPSW ES:0(DI), DS:0(SI) -66a91122|3344556677885f5f5f5f5f5f 32 intel test ax, 0x2211 -66a91122|3344556677885f5f5f5f5f5f 32 plan9 TESTW $0x2211, AX -66a91122|3344556677885f5f5f5f5f5f 64 gnu test $0x2211,%ax -66a91122|3344556677885f5f5f5f5f5f 64 intel test ax, 0x2211 -66a91122|3344556677885f5f5f5f5f5f 64 plan9 TESTW $0x2211, AX -66ab|11223344556677885f5f5f5f5f5f 32 intel stosw word ptr [edi] -66ab|11223344556677885f5f5f5f5f5f 32 plan9 STOSW AX, ES:0(DI) -66ab|11223344556677885f5f5f5f5f5f 64 gnu stos %ax,%es:(%rdi) -66ab|11223344556677885f5f5f5f5f5f 64 intel stosw word ptr [rdi] -66ab|11223344556677885f5f5f5f5f5f 64 plan9 STOSW AX, ES:0(DI) -66ad|11223344556677885f5f5f5f5f5f 32 intel lodsw word ptr [esi] -66ad|11223344556677885f5f5f5f5f5f 32 plan9 LODSW DS:0(SI), AX -66ad|11223344556677885f5f5f5f5f5f 64 gnu lods %ds:(%rsi),%ax -66ad|11223344556677885f5f5f5f5f5f 64 intel lodsw word ptr [rsi] -66ad|11223344556677885f5f5f5f5f5f 64 plan9 LODSW DS:0(SI), AX -66af|11223344556677885f5f5f5f5f5f 32 intel scasw word ptr [edi] -66af|11223344556677885f5f5f5f5f5f 32 plan9 SCASW ES:0(DI), AX -66af|11223344556677885f5f5f5f5f5f 64 gnu scas %es:(%rdi),%ax -66af|11223344556677885f5f5f5f5f5f 64 intel scasw word ptr [rdi] -66af|11223344556677885f5f5f5f5f5f 64 plan9 SCASW ES:0(DI), AX -66b81122|3344556677885f5f5f5f5f5f 32 intel mov ax, 0x2211 -66b81122|3344556677885f5f5f5f5f5f 32 plan9 MOVW $0x2211, AX -66b81122|3344556677885f5f5f5f5f5f 64 gnu mov $0x2211,%ax -66b81122|3344556677885f5f5f5f5f5f 64 intel mov ax, 0x2211 -66b81122|3344556677885f5f5f5f5f5f 64 plan9 MOVW $0x2211, AX -66c10011|223344556677885f5f5f5f5f 32 intel rol word ptr [eax], 0x11 -66c10011|223344556677885f5f5f5f5f 32 plan9 ROLW $0x11, 0(AX) -66c10011|223344556677885f5f5f5f5f 64 gnu rolw $0x11,(%rax) -66c10011|223344556677885f5f5f5f5f 64 intel rol word ptr [rax], 0x11 -66c10011|223344556677885f5f5f5f5f 64 plan9 ROLW $0x11, 0(AX) -66c10811|223344556677885f5f5f5f5f 32 intel ror word ptr [eax], 0x11 -66c10811|223344556677885f5f5f5f5f 32 plan9 RORW $0x11, 0(AX) -66c10811|223344556677885f5f5f5f5f 64 gnu rorw $0x11,(%rax) -66c10811|223344556677885f5f5f5f5f 64 intel ror word ptr [rax], 0x11 -66c10811|223344556677885f5f5f5f5f 64 plan9 RORW $0x11, 0(AX) -66c11122|3344556677885f5f5f5f5f5f 32 intel rcl word ptr [ecx], 0x22 -66c11122|3344556677885f5f5f5f5f5f 32 plan9 RCLW $0x22, 0(CX) -66c11122|3344556677885f5f5f5f5f5f 64 gnu rclw $0x22,(%rcx) -66c11122|3344556677885f5f5f5f5f5f 64 intel rcl word ptr [rcx], 0x22 -66c11122|3344556677885f5f5f5f5f5f 64 plan9 RCLW $0x22, 0(CX) -66c11811|223344556677885f5f5f5f5f 32 intel rcr word ptr [eax], 0x11 -66c11811|223344556677885f5f5f5f5f 32 plan9 RCRW $0x11, 0(AX) -66c11811|223344556677885f5f5f5f5f 64 gnu rcrw $0x11,(%rax) -66c11811|223344556677885f5f5f5f5f 64 intel rcr word ptr [rax], 0x11 -66c11811|223344556677885f5f5f5f5f 64 plan9 RCRW $0x11, 0(AX) -66c12011|223344556677885f5f5f5f5f 32 intel shl word ptr [eax], 0x11 -66c12011|223344556677885f5f5f5f5f 32 plan9 SHLW $0x11, 0(AX) -66c12011|223344556677885f5f5f5f5f 64 gnu shlw $0x11,(%rax) -66c12011|223344556677885f5f5f5f5f 64 intel shl word ptr [rax], 0x11 -66c12011|223344556677885f5f5f5f5f 64 plan9 SHLW $0x11, 0(AX) -66c12811|223344556677885f5f5f5f5f 32 intel shr word ptr [eax], 0x11 -66c12811|223344556677885f5f5f5f5f 32 plan9 SHRW $0x11, 0(AX) -66c12811|223344556677885f5f5f5f5f 64 gnu shrw $0x11,(%rax) -66c12811|223344556677885f5f5f5f5f 64 intel shr word ptr [rax], 0x11 -66c12811|223344556677885f5f5f5f5f 64 plan9 SHRW $0x11, 0(AX) -66c13811|223344556677885f5f5f5f5f 32 intel sar word ptr [eax], 0x11 -66c13811|223344556677885f5f5f5f5f 32 plan9 SARW $0x11, 0(AX) -66c13811|223344556677885f5f5f5f5f 64 gnu sarw $0x11,(%rax) -66c13811|223344556677885f5f5f5f5f 64 intel sar word ptr [rax], 0x11 -66c13811|223344556677885f5f5f5f5f 64 plan9 SARW $0x11, 0(AX) -66c21122|3344556677885f5f5f5f5f5f 32 intel ret 0x2211 -66c21122|3344556677885f5f5f5f5f5f 32 plan9 RET $0x2211 -66c21122|3344556677885f5f5f5f5f5f 64 gnu retw $0x2211 -66c21122|3344556677885f5f5f5f5f5f 64 intel ret 0x2211 -66c21122|3344556677885f5f5f5f5f5f 64 plan9 RET $0x2211 -66c411|223344556677885f5f5f5f5f5f 32 intel les dx, dword ptr [ecx] -66c411|223344556677885f5f5f5f5f5f 32 plan9 LES 0(CX), DX -66c511|223344556677885f5f5f5f5f5f 32 intel lds dx, dword ptr [ecx] -66c511|223344556677885f5f5f5f5f5f 32 plan9 LDS 0(CX), DX -66c7001122|3344556677885f5f5f5f5f 32 intel mov word ptr [eax], 0x2211 -66c7001122|3344556677885f5f5f5f5f 32 plan9 MOVW $0x2211, 0(AX) -66c7001122|3344556677885f5f5f5f5f 64 gnu movw $0x2211,(%rax) -66c7001122|3344556677885f5f5f5f5f 64 intel mov word ptr [rax], 0x2211 -66c7001122|3344556677885f5f5f5f5f 64 plan9 MOVW $0x2211, 0(AX) -66c7f81122|3344556677885f5f5f5f5f 32 intel xbegin .+0x2211 -66c7f81122|3344556677885f5f5f5f5f 32 plan9 XBEGIN .+8721 -66c7f81122|3344556677885f5f5f5f5f 64 gnu xbeginw .+0x2211 -66c7f81122|3344556677885f5f5f5f5f 64 intel xbegin .+0x2211 -66c7f81122|3344556677885f5f5f5f5f 64 plan9 XBEGIN .+8721 -66c9|11223344556677885f5f5f5f5f5f 32 intel data16 leave -66c9|11223344556677885f5f5f5f5f5f 32 plan9 LEAVE -66c9|11223344556677885f5f5f5f5f5f 64 gnu leavew -66c9|11223344556677885f5f5f5f5f5f 64 intel data16 leave -66c9|11223344556677885f5f5f5f5f5f 64 plan9 LEAVE -66cf|11223344556677885f5f5f5f5f5f 32 intel data16 iret -66cf|11223344556677885f5f5f5f5f5f 32 plan9 IRET -66cf|11223344556677885f5f5f5f5f5f 64 gnu iretw -66cf|11223344556677885f5f5f5f5f5f 64 intel data16 iret -66cf|11223344556677885f5f5f5f5f5f 64 plan9 IRET -66d100|11223344556677885f5f5f5f5f 32 intel rol word ptr [eax], 0x1 -66d100|11223344556677885f5f5f5f5f 32 plan9 ROLW $0x1, 0(AX) -66d100|11223344556677885f5f5f5f5f 64 gnu rolw (%rax) -66d100|11223344556677885f5f5f5f5f 64 intel rol word ptr [rax], 0x1 -66d100|11223344556677885f5f5f5f5f 64 plan9 ROLW $0x1, 0(AX) -66d108|11223344556677885f5f5f5f5f 32 intel ror word ptr [eax], 0x1 -66d108|11223344556677885f5f5f5f5f 32 plan9 RORW $0x1, 0(AX) -66d108|11223344556677885f5f5f5f5f 64 gnu rorw (%rax) -66d108|11223344556677885f5f5f5f5f 64 intel ror word ptr [rax], 0x1 -66d108|11223344556677885f5f5f5f5f 64 plan9 RORW $0x1, 0(AX) -66d111|223344556677885f5f5f5f5f5f 32 intel rcl word ptr [ecx], 0x1 -66d111|223344556677885f5f5f5f5f5f 32 plan9 RCLW $0x1, 0(CX) -66d111|223344556677885f5f5f5f5f5f 64 gnu rclw (%rcx) -66d111|223344556677885f5f5f5f5f5f 64 intel rcl word ptr [rcx], 0x1 -66d111|223344556677885f5f5f5f5f5f 64 plan9 RCLW $0x1, 0(CX) -66d118|11223344556677885f5f5f5f5f 32 intel rcr word ptr [eax], 0x1 -66d118|11223344556677885f5f5f5f5f 32 plan9 RCRW $0x1, 0(AX) -66d118|11223344556677885f5f5f5f5f 64 gnu rcrw (%rax) -66d118|11223344556677885f5f5f5f5f 64 intel rcr word ptr [rax], 0x1 -66d118|11223344556677885f5f5f5f5f 64 plan9 RCRW $0x1, 0(AX) -66d120|11223344556677885f5f5f5f5f 32 intel shl word ptr [eax], 0x1 -66d120|11223344556677885f5f5f5f5f 32 plan9 SHLW $0x1, 0(AX) -66d120|11223344556677885f5f5f5f5f 64 gnu shlw (%rax) -66d120|11223344556677885f5f5f5f5f 64 intel shl word ptr [rax], 0x1 -66d120|11223344556677885f5f5f5f5f 64 plan9 SHLW $0x1, 0(AX) -66d128|11223344556677885f5f5f5f5f 32 intel shr word ptr [eax], 0x1 -66d128|11223344556677885f5f5f5f5f 32 plan9 SHRW $0x1, 0(AX) -66d128|11223344556677885f5f5f5f5f 64 gnu shrw (%rax) -66d128|11223344556677885f5f5f5f5f 64 intel shr word ptr [rax], 0x1 -66d128|11223344556677885f5f5f5f5f 64 plan9 SHRW $0x1, 0(AX) -66d138|11223344556677885f5f5f5f5f 32 intel sar word ptr [eax], 0x1 -66d138|11223344556677885f5f5f5f5f 32 plan9 SARW $0x1, 0(AX) -66d138|11223344556677885f5f5f5f5f 64 gnu sarw (%rax) -66d138|11223344556677885f5f5f5f5f 64 intel sar word ptr [rax], 0x1 -66d138|11223344556677885f5f5f5f5f 64 plan9 SARW $0x1, 0(AX) -66d300|11223344556677885f5f5f5f5f 32 intel rol word ptr [eax], cl -66d300|11223344556677885f5f5f5f5f 32 plan9 ROLW CL, 0(AX) -66d300|11223344556677885f5f5f5f5f 64 gnu rolw %cl,(%rax) -66d300|11223344556677885f5f5f5f5f 64 intel rol word ptr [rax], cl -66d300|11223344556677885f5f5f5f5f 64 plan9 ROLW CL, 0(AX) -66d308|11223344556677885f5f5f5f5f 32 intel ror word ptr [eax], cl -66d308|11223344556677885f5f5f5f5f 32 plan9 RORW CL, 0(AX) -66d308|11223344556677885f5f5f5f5f 64 gnu rorw %cl,(%rax) -66d308|11223344556677885f5f5f5f5f 64 intel ror word ptr [rax], cl -66d308|11223344556677885f5f5f5f5f 64 plan9 RORW CL, 0(AX) -66d311|223344556677885f5f5f5f5f5f 32 intel rcl word ptr [ecx], cl -66d311|223344556677885f5f5f5f5f5f 32 plan9 RCLW CL, 0(CX) -66d311|223344556677885f5f5f5f5f5f 64 gnu rclw %cl,(%rcx) -66d311|223344556677885f5f5f5f5f5f 64 intel rcl word ptr [rcx], cl -66d311|223344556677885f5f5f5f5f5f 64 plan9 RCLW CL, 0(CX) -66d318|11223344556677885f5f5f5f5f 32 intel rcr word ptr [eax], cl -66d318|11223344556677885f5f5f5f5f 32 plan9 RCRW CL, 0(AX) -66d318|11223344556677885f5f5f5f5f 64 gnu rcrw %cl,(%rax) -66d318|11223344556677885f5f5f5f5f 64 intel rcr word ptr [rax], cl -66d318|11223344556677885f5f5f5f5f 64 plan9 RCRW CL, 0(AX) -66d320|11223344556677885f5f5f5f5f 32 intel shl word ptr [eax], cl -66d320|11223344556677885f5f5f5f5f 32 plan9 SHLW CL, 0(AX) -66d320|11223344556677885f5f5f5f5f 64 gnu shlw %cl,(%rax) -66d320|11223344556677885f5f5f5f5f 64 intel shl word ptr [rax], cl -66d320|11223344556677885f5f5f5f5f 64 plan9 SHLW CL, 0(AX) -66d328|11223344556677885f5f5f5f5f 32 intel shr word ptr [eax], cl -66d328|11223344556677885f5f5f5f5f 32 plan9 SHRW CL, 0(AX) -66d328|11223344556677885f5f5f5f5f 64 gnu shrw %cl,(%rax) -66d328|11223344556677885f5f5f5f5f 64 intel shr word ptr [rax], cl -66d328|11223344556677885f5f5f5f5f 64 plan9 SHRW CL, 0(AX) -66d338|11223344556677885f5f5f5f5f 32 intel sar word ptr [eax], cl -66d338|11223344556677885f5f5f5f5f 32 plan9 SARW CL, 0(AX) -66d338|11223344556677885f5f5f5f5f 64 gnu sarw %cl,(%rax) -66d338|11223344556677885f5f5f5f5f 64 intel sar word ptr [rax], cl -66d338|11223344556677885f5f5f5f5f 64 plan9 SARW CL, 0(AX) -66d411|223344556677885f5f5f5f5f5f 32 intel aam 0x11 -66d411|223344556677885f5f5f5f5f5f 32 plan9 AAM $0x11 -66d920|11223344556677885f5f5f5f5f 32 intel fldenv ptr [eax] -66d920|11223344556677885f5f5f5f5f 32 plan9 FLDENVW 0(AX) -66d920|11223344556677885f5f5f5f5f 64 gnu fldenvs (%rax) -66d920|11223344556677885f5f5f5f5f 64 intel fldenv ptr [rax] -66d920|11223344556677885f5f5f5f5f 64 plan9 FLDENVW 0(AX) -66e511|223344556677885f5f5f5f5f5f 32 intel in ax, 0x11 -66e511|223344556677885f5f5f5f5f5f 32 plan9 INW $0x11, AX -66e511|223344556677885f5f5f5f5f5f 64 gnu in $0x11,%ax -66e511|223344556677885f5f5f5f5f5f 64 intel in ax, 0x11 -66e511|223344556677885f5f5f5f5f5f 64 plan9 INW $0x11, AX -66e711|223344556677885f5f5f5f5f5f 32 intel out 0x11, ax -66e711|223344556677885f5f5f5f5f5f 32 plan9 OUTW AX, $0x11 -66e711|223344556677885f5f5f5f5f5f 64 gnu out %ax,$0x11 -66e711|223344556677885f5f5f5f5f5f 64 intel out 0x11, ax -66e711|223344556677885f5f5f5f5f5f 64 plan9 OUTW AX, $0x11 -66e811223344|556677885f5f5f5f5f5f 64 gnu callw .+0x44332211 -66e811223344|556677885f5f5f5f5f5f 64 intel call .+0x44332211 -66e811223344|556677885f5f5f5f5f5f 64 plan9 CALL .+1144201745 -66e81122|3344556677885f5f5f5f5f5f 32 intel call .+0x2211 -66e81122|3344556677885f5f5f5f5f5f 32 plan9 CALL .+8721 -66e911223344|556677885f5f5f5f5f5f 64 gnu jmpw .+0x44332211 -66e911223344|556677885f5f5f5f5f5f 64 intel jmp .+0x44332211 -66e911223344|556677885f5f5f5f5f5f 64 plan9 JMP .+1144201745 -66e91122|3344556677885f5f5f5f5f5f 32 intel jmp .+0x2211 -66e91122|3344556677885f5f5f5f5f5f 32 plan9 JMP .+8721 -66ea11223344|556677885f5f5f5f5f5f 32 intel jmp far 0x2211, 0x4433 -66ea11223344|556677885f5f5f5f5f5f 32 plan9 LJMP $0x2211, $0x4433 -66ed|11223344556677885f5f5f5f5f5f 32 intel in ax, dx -66ed|11223344556677885f5f5f5f5f5f 32 plan9 INW DX, AX -66ed|11223344556677885f5f5f5f5f5f 64 gnu in (%dx),%ax -66ed|11223344556677885f5f5f5f5f5f 64 intel in ax, dx -66ed|11223344556677885f5f5f5f5f5f 64 plan9 INW DX, AX -66ef|11223344556677885f5f5f5f5f5f 32 intel out dx, ax -66ef|11223344556677885f5f5f5f5f5f 32 plan9 OUTW AX, DX -66ef|11223344556677885f5f5f5f5f5f 64 gnu out %ax,(%dx) -66ef|11223344556677885f5f5f5f5f5f 64 intel out dx, ax -66ef|11223344556677885f5f5f5f5f5f 64 plan9 OUTW AX, DX -66f20f2a11|223344556677885f5f5f5f 32 intel cvtsi2sd xmm2, dword ptr [ecx] -66f20f2a11|223344556677885f5f5f5f 32 plan9 CVTSI2SDL 0(CX), X2 -66f20f2a11|223344556677885f5f5f5f 64 gnu cvtsi2sdl (%rcx),%xmm2 -66f20f2a11|223344556677885f5f5f5f 64 intel cvtsi2sd xmm2, dword ptr [rcx] -66f20f2a11|223344556677885f5f5f5f 64 plan9 CVTSI2SDL 0(CX), X2 -# the Q extension is the size of the source float64 in memory. The destination is L. -66f20f2c11|223344556677885f5f5f5f 32 intel cvttsd2si edx, qword ptr [ecx] -66f20f2c11|223344556677885f5f5f5f 32 plan9 CVTTSD2SIQ 0(CX), DX -66f20f2c11|223344556677885f5f5f5f 64 gnu cvttsd2si (%rcx),%dx -66f20f2c11|223344556677885f5f5f5f 64 intel cvttsd2si edx, qword ptr [rcx] -66f20f2c11|223344556677885f5f5f5f 64 plan9 CVTTSD2SIQ 0(CX), DX -66f20f2d11|223344556677885f5f5f5f 32 intel cvtsd2si edx, qword ptr [ecx] -66f20f2d11|223344556677885f5f5f5f 32 plan9 CVTSD2SIQ 0(CX), DX -66f20f2d11|223344556677885f5f5f5f 64 gnu cvtsd2si (%rcx),%dx -66f20f2d11|223344556677885f5f5f5f 64 intel cvtsd2si edx, qword ptr [rcx] -66f20f2d11|223344556677885f5f5f5f 64 plan9 CVTSD2SIQ 0(CX), DX -66f20f38f011|223344556677885f5f5f 32 intel crc32 edx, byte ptr [ecx] -66f20f38f011|223344556677885f5f5f 32 plan9 CRC32 0(CX), DX -66f20f38f011|223344556677885f5f5f 64 gnu crc32b (%rcx),%edx -66f20f38f011|223344556677885f5f5f 64 intel crc32 edx, byte ptr [rcx] -66f20f38f011|223344556677885f5f5f 64 plan9 CRC32 0(CX), DX -66f30f2c11|223344556677885f5f5f5f 32 intel cvttss2si edx, dword ptr [ecx] -66f30f2c11|223344556677885f5f5f5f 32 plan9 CVTTSS2SIL 0(CX), DX -66f30f2c11|223344556677885f5f5f5f 64 gnu cvttss2si (%rcx),%dx -66f30f2c11|223344556677885f5f5f5f 64 intel cvttss2si edx, dword ptr [rcx] -66f30f2c11|223344556677885f5f5f5f 64 plan9 CVTTSS2SIL 0(CX), DX -66f30f2d11|223344556677885f5f5f5f 32 intel cvtss2si edx, dword ptr [ecx] -66f30f2d11|223344556677885f5f5f5f 32 plan9 CVTSS2SIL 0(CX), DX -66f30f2d11|223344556677885f5f5f5f 64 gnu cvtss2si (%rcx),%dx -66f30f2d11|223344556677885f5f5f5f 64 intel cvtss2si edx, dword ptr [rcx] -66f30f2d11|223344556677885f5f5f5f 64 plan9 CVTSS2SIL 0(CX), DX -66f30fae11|223344556677885f5f5f5f 64 gnu wrfsbasel (%rcx) -66f30fae11|223344556677885f5f5f5f 64 intel wrfsbase dword ptr [rcx] -66f30fae11|223344556677885f5f5f5f 64 plan9 WRFSBASE 0(CX) -66f30fae18|11223344556677885f5f5f 64 gnu wrgsbasel (%rax) -66f30fae18|11223344556677885f5f5f 64 intel wrgsbase dword ptr [rax] -66f30fae18|11223344556677885f5f5f 64 plan9 WRGSBASE 0(AX) -66f30faec0|11223344556677885f5f5f 64 gnu rdfsbase %eax -66f30faec0|11223344556677885f5f5f 64 intel rdfsbase eax -66f30faec0|11223344556677885f5f5f 64 plan9 RDFSBASE AX -66f30faec8|11223344556677885f5f5f 64 gnu rdgsbase %eax -66f30faec8|11223344556677885f5f5f 64 intel rdgsbase eax -66f30faec8|11223344556677885f5f5f 64 plan9 RDGSBASE AX -66f30fd6c5|11223344556677885f5f5f 32 intel movq2dq xmm0, mmx5 -66f30fd6c5|11223344556677885f5f5f 32 plan9 MOVQ2DQ M5, X0 -66f30fd6c5|11223344556677885f5f5f 64 gnu movq2dq %mm5,%xmm0 -66f30fd6c5|11223344556677885f5f5f 64 intel movq2dq xmm0, mmx5 -66f30fd6c5|11223344556677885f5f5f 64 plan9 MOVQ2DQ M5, X0 -66f7001122|3344556677885f5f5f5f5f 32 intel test word ptr [eax], 0x2211 -66f7001122|3344556677885f5f5f5f5f 32 plan9 TESTW $0x2211, 0(AX) -66f7001122|3344556677885f5f5f5f5f 64 gnu testw $0x2211,(%rax) -66f7001122|3344556677885f5f5f5f5f 64 intel test word ptr [rax], 0x2211 -66f7001122|3344556677885f5f5f5f5f 64 plan9 TESTW $0x2211, 0(AX) -66f711|223344556677885f5f5f5f5f5f 32 intel not word ptr [ecx] -66f711|223344556677885f5f5f5f5f5f 32 plan9 NOTW 0(CX) -66f711|223344556677885f5f5f5f5f5f 64 gnu notw (%rcx) -66f711|223344556677885f5f5f5f5f5f 64 intel not word ptr [rcx] -66f711|223344556677885f5f5f5f5f5f 64 plan9 NOTW 0(CX) -66f718|11223344556677885f5f5f5f5f 32 intel neg word ptr [eax] -66f718|11223344556677885f5f5f5f5f 32 plan9 NEGW 0(AX) -66f718|11223344556677885f5f5f5f5f 64 gnu negw (%rax) -66f718|11223344556677885f5f5f5f5f 64 intel neg word ptr [rax] -66f718|11223344556677885f5f5f5f5f 64 plan9 NEGW 0(AX) -66f720|11223344556677885f5f5f5f5f 32 intel mul word ptr [eax] -66f720|11223344556677885f5f5f5f5f 32 plan9 MULW 0(AX) -66f720|11223344556677885f5f5f5f5f 64 gnu mulw (%rax) -66f720|11223344556677885f5f5f5f5f 64 intel mul word ptr [rax] -66f720|11223344556677885f5f5f5f5f 64 plan9 MULW 0(AX) -66f728|11223344556677885f5f5f5f5f 32 intel imul word ptr [eax] -66f728|11223344556677885f5f5f5f5f 32 plan9 IMULW 0(AX) -66f728|11223344556677885f5f5f5f5f 64 gnu imulw (%rax) -66f728|11223344556677885f5f5f5f5f 64 intel imul word ptr [rax] -66f728|11223344556677885f5f5f5f5f 64 plan9 IMULW 0(AX) -66f730|11223344556677885f5f5f5f5f 32 intel div word ptr [eax] -66f730|11223344556677885f5f5f5f5f 32 plan9 DIVW 0(AX) -66f730|11223344556677885f5f5f5f5f 64 gnu divw (%rax) -66f730|11223344556677885f5f5f5f5f 64 intel div word ptr [rax] -66f730|11223344556677885f5f5f5f5f 64 plan9 DIVW 0(AX) -66f738|11223344556677885f5f5f5f5f 32 intel idiv word ptr [eax] -66f738|11223344556677885f5f5f5f5f 32 plan9 IDIVW 0(AX) -66f738|11223344556677885f5f5f5f5f 64 gnu idivw (%rax) -66f738|11223344556677885f5f5f5f5f 64 intel idiv word ptr [rax] -66f738|11223344556677885f5f5f5f5f 64 plan9 IDIVW 0(AX) -66ff00|11223344556677885f5f5f5f5f 32 intel inc word ptr [eax] -66ff00|11223344556677885f5f5f5f5f 32 plan9 INCW 0(AX) -66ff00|11223344556677885f5f5f5f5f 64 gnu incw (%rax) -66ff00|11223344556677885f5f5f5f5f 64 intel inc word ptr [rax] -66ff00|11223344556677885f5f5f5f5f 64 plan9 INCW 0(AX) -66ff08|11223344556677885f5f5f5f5f 32 intel dec word ptr [eax] -66ff08|11223344556677885f5f5f5f5f 32 plan9 DECW 0(AX) -66ff08|11223344556677885f5f5f5f5f 64 gnu decw (%rax) -66ff08|11223344556677885f5f5f5f5f 64 intel dec word ptr [rax] -66ff08|11223344556677885f5f5f5f5f 64 plan9 DECW 0(AX) -66ff11|223344556677885f5f5f5f5f5f 32 intel call word ptr [ecx] -66ff11|223344556677885f5f5f5f5f5f 32 plan9 CALL 0(CX) -66ff11|223344556677885f5f5f5f5f5f 64 gnu callw *(%rcx) -66ff11|223344556677885f5f5f5f5f5f 64 intel call qword ptr [rcx] -66ff11|223344556677885f5f5f5f5f5f 64 plan9 CALL 0(CX) -66ff18|11223344556677885f5f5f5f5f 32 intel call far dword ptr [eax] -66ff18|11223344556677885f5f5f5f5f 32 plan9 LCALL 0(AX) -66ff18|11223344556677885f5f5f5f5f 64 gnu lcallw *(%rax) -66ff18|11223344556677885f5f5f5f5f 64 intel call far dword ptr [rax] -66ff18|11223344556677885f5f5f5f5f 64 plan9 LCALL 0(AX) -66ff20|11223344556677885f5f5f5f5f 32 intel jmp word ptr [eax] -66ff20|11223344556677885f5f5f5f5f 32 plan9 JMP 0(AX) -66ff20|11223344556677885f5f5f5f5f 64 gnu jmpw *(%rax) -66ff20|11223344556677885f5f5f5f5f 64 intel jmp qword ptr [rax] -66ff20|11223344556677885f5f5f5f5f 64 plan9 JMP 0(AX) -66ff28|11223344556677885f5f5f5f5f 32 intel jmp far dword ptr [eax] -66ff28|11223344556677885f5f5f5f5f 32 plan9 LJMP 0(AX) -66ff28|11223344556677885f5f5f5f5f 64 gnu ljmpw *(%rax) -66ff28|11223344556677885f5f5f5f5f 64 intel jmp far dword ptr [rax] -66ff28|11223344556677885f5f5f5f5f 64 plan9 LJMP 0(AX) -66ff30|11223344556677885f5f5f5f5f 32 intel push word ptr [eax] -66ff30|11223344556677885f5f5f5f5f 32 plan9 PUSHW 0(AX) -66ff30|11223344556677885f5f5f5f5f 64 gnu pushw (%rax) -66ff30|11223344556677885f5f5f5f5f 64 intel push word ptr [rax] -66ff30|11223344556677885f5f5f5f5f 64 plan9 PUSHW 0(AX) -66|9a11223344556677885f5f5f5f5f5f 64 gnu data16 -66|9a11223344556677885f5f5f5f5f5f 64 intel data16 -66|9a11223344556677885f5f5f5f5f5f 64 plan9 Op(0) -66|c411223344556677885f5f5f5f5f5f 64 gnu data16 -66|c411223344556677885f5f5f5f5f5f 64 intel data16 -66|c411223344556677885f5f5f5f5f5f 64 plan9 Op(0) -66|c511223344556677885f5f5f5f5f5f 64 gnu data16 -66|c511223344556677885f5f5f5f5f5f 64 intel data16 -66|c511223344556677885f5f5f5f5f5f 64 plan9 Op(0) -66|d411223344556677885f5f5f5f5f5f 64 gnu data16 -66|d411223344556677885f5f5f5f5f5f 64 intel data16 -66|d411223344556677885f5f5f5f5f5f 64 plan9 Op(0) -66|ea11223344556677885f5f5f5f5f5f 64 gnu data16 -66|ea11223344556677885f5f5f5f5f5f 64 intel data16 -66|ea11223344556677885f5f5f5f5f5f 64 plan9 Op(0) -676c|11223344556677885f5f5f5f5f5f 32 intel addr16 insb -676c|11223344556677885f5f5f5f5f5f 32 plan9 INSB DX, ES:0(DI) -676c|11223344556677885f5f5f5f5f5f 64 gnu insb (%dx),%es:(%edi) -676c|11223344556677885f5f5f5f5f5f 64 intel addr32 insb -676c|11223344556677885f5f5f5f5f5f 64 plan9 INSB DX, ES:0(DI) -67d7|11223344556677885f5f5f5f5f5f 32 intel addr16 xlat -67d7|11223344556677885f5f5f5f5f5f 32 plan9 XLATB DS:0(BX) -67d7|11223344556677885f5f5f5f5f5f 64 gnu xlat %ds:(%ebx) -67d7|11223344556677885f5f5f5f5f5f 64 intel addr32 xlat -67d7|11223344556677885f5f5f5f5f5f 64 plan9 XLATB DS:0(BX) -67e311|223344556677885f5f5f5f5f5f 32 intel addr16 jcxz .+0x11 -67e311|223344556677885f5f5f5f5f5f 32 plan9 JCXZ .+17 -67e311|223344556677885f5f5f5f5f5f 64 gnu jecxz .+0x11 -67e311|223344556677885f5f5f5f5f5f 64 intel addr32 jecxz .+0x11 -67e311|223344556677885f5f5f5f5f5f 64 plan9 JECXZ .+17 -6811223344|556677885f5f5f5f5f5f5f 32 intel push 0x44332211 -6811223344|556677885f5f5f5f5f5f5f 32 plan9 PUSHL $0x44332211 -6811223344|556677885f5f5f5f5f5f5f 64 gnu pushq $0x44332211 -6811223344|556677885f5f5f5f5f5f5f 64 intel push 0x44332211 -6811223344|556677885f5f5f5f5f5f5f 64 plan9 PUSHL $0x44332211 -691122334455|6677885f5f5f5f5f5f5f 32 intel imul edx, dword ptr [ecx], 0x55443322 -691122334455|6677885f5f5f5f5f5f5f 32 plan9 IMULL $0x55443322, 0(CX), DX -691122334455|6677885f5f5f5f5f5f5f 64 gnu imul $0x55443322,(%rcx),%edx -691122334455|6677885f5f5f5f5f5f5f 64 intel imul edx, dword ptr [rcx], 0x55443322 -691122334455|6677885f5f5f5f5f5f5f 64 plan9 IMULL $0x55443322, 0(CX), DX -6a11|223344556677885f5f5f5f5f5f5f 32 intel push 0x11 -6a11|223344556677885f5f5f5f5f5f5f 32 plan9 PUSHL $0x11 -6a11|223344556677885f5f5f5f5f5f5f 64 gnu pushq $0x11 -6a11|223344556677885f5f5f5f5f5f5f 64 intel push 0x11 -6a11|223344556677885f5f5f5f5f5f5f 64 plan9 PUSHL $0x11 -6b1122|3344556677885f5f5f5f5f5f5f 32 intel imul edx, dword ptr [ecx], 0x22 -6b1122|3344556677885f5f5f5f5f5f5f 32 plan9 IMULL $0x22, 0(CX), DX -6b1122|3344556677885f5f5f5f5f5f5f 64 gnu imul $0x22,(%rcx),%edx -6b1122|3344556677885f5f5f5f5f5f5f 64 intel imul edx, dword ptr [rcx], 0x22 -6b1122|3344556677885f5f5f5f5f5f5f 64 plan9 IMULL $0x22, 0(CX), DX -6d|11223344556677885f5f5f5f5f5f5f 32 intel insd -6d|11223344556677885f5f5f5f5f5f5f 32 plan9 INSD DX, ES:0(DI) -6d|11223344556677885f5f5f5f5f5f5f 64 gnu insl (%dx),%es:(%rdi) -6d|11223344556677885f5f5f5f5f5f5f 64 intel insd -6d|11223344556677885f5f5f5f5f5f5f 64 plan9 INSD DX, ES:0(DI) -6f|11223344556677885f5f5f5f5f5f5f 32 intel outsd -6f|11223344556677885f5f5f5f5f5f5f 32 plan9 OUTSD DS:0(SI), DX -6f|11223344556677885f5f5f5f5f5f5f 64 gnu outsl %ds:(%rsi),(%dx) -6f|11223344556677885f5f5f5f5f5f5f 64 intel outsd -6f|11223344556677885f5f5f5f5f5f5f 64 plan9 OUTSD DS:0(SI), DX -7111|223344556677885f5f5f5f5f5f5f 32 intel jno .+0x11 -7111|223344556677885f5f5f5f5f5f5f 32 plan9 JNO .+17 -7111|223344556677885f5f5f5f5f5f5f 64 gnu jno .+0x11 -7111|223344556677885f5f5f5f5f5f5f 64 intel jno .+0x11 -7111|223344556677885f5f5f5f5f5f5f 64 plan9 JNO .+17 -7211|223344556677885f5f5f5f5f5f5f 32 intel jb .+0x11 -7211|223344556677885f5f5f5f5f5f5f 32 plan9 JB .+17 -7211|223344556677885f5f5f5f5f5f5f 64 gnu jb .+0x11 -7211|223344556677885f5f5f5f5f5f5f 64 intel jb .+0x11 -7211|223344556677885f5f5f5f5f5f5f 64 plan9 JB .+17 -7311|223344556677885f5f5f5f5f5f5f 32 intel jnb .+0x11 -7311|223344556677885f5f5f5f5f5f5f 32 plan9 JAE .+17 -7311|223344556677885f5f5f5f5f5f5f 64 gnu jae .+0x11 -7311|223344556677885f5f5f5f5f5f5f 64 intel jnb .+0x11 -7311|223344556677885f5f5f5f5f5f5f 64 plan9 JAE .+17 -7411|223344556677885f5f5f5f5f5f5f 32 intel jz .+0x11 -7411|223344556677885f5f5f5f5f5f5f 32 plan9 JE .+17 -7411|223344556677885f5f5f5f5f5f5f 64 gnu je .+0x11 -7411|223344556677885f5f5f5f5f5f5f 64 intel jz .+0x11 -7411|223344556677885f5f5f5f5f5f5f 64 plan9 JE .+17 -7511|223344556677885f5f5f5f5f5f5f 32 intel jnz .+0x11 -7511|223344556677885f5f5f5f5f5f5f 32 plan9 JNE .+17 -7511|223344556677885f5f5f5f5f5f5f 64 gnu jne .+0x11 -7511|223344556677885f5f5f5f5f5f5f 64 intel jnz .+0x11 -7511|223344556677885f5f5f5f5f5f5f 64 plan9 JNE .+17 -7611|223344556677885f5f5f5f5f5f5f 32 intel jbe .+0x11 -7611|223344556677885f5f5f5f5f5f5f 32 plan9 JBE .+17 -7611|223344556677885f5f5f5f5f5f5f 64 gnu jbe .+0x11 -7611|223344556677885f5f5f5f5f5f5f 64 intel jbe .+0x11 -7611|223344556677885f5f5f5f5f5f5f 64 plan9 JBE .+17 -7711|223344556677885f5f5f5f5f5f5f 32 intel jnbe .+0x11 -7711|223344556677885f5f5f5f5f5f5f 32 plan9 JA .+17 -7711|223344556677885f5f5f5f5f5f5f 64 gnu ja .+0x11 -7711|223344556677885f5f5f5f5f5f5f 64 intel jnbe .+0x11 -7711|223344556677885f5f5f5f5f5f5f 64 plan9 JA .+17 -7811|223344556677885f5f5f5f5f5f5f 32 intel js .+0x11 -7811|223344556677885f5f5f5f5f5f5f 32 plan9 JS .+17 -7811|223344556677885f5f5f5f5f5f5f 64 gnu js .+0x11 -7811|223344556677885f5f5f5f5f5f5f 64 intel js .+0x11 -7811|223344556677885f5f5f5f5f5f5f 64 plan9 JS .+17 -7911|223344556677885f5f5f5f5f5f5f 32 intel jns .+0x11 -7911|223344556677885f5f5f5f5f5f5f 32 plan9 JNS .+17 -7911|223344556677885f5f5f5f5f5f5f 64 gnu jns .+0x11 -7911|223344556677885f5f5f5f5f5f5f 64 intel jns .+0x11 -7911|223344556677885f5f5f5f5f5f5f 64 plan9 JNS .+17 -7a11|223344556677885f5f5f5f5f5f5f 32 intel jp .+0x11 -7a11|223344556677885f5f5f5f5f5f5f 32 plan9 JP .+17 -7a11|223344556677885f5f5f5f5f5f5f 64 gnu jp .+0x11 -7a11|223344556677885f5f5f5f5f5f5f 64 intel jp .+0x11 -7a11|223344556677885f5f5f5f5f5f5f 64 plan9 JP .+17 -7b11|223344556677885f5f5f5f5f5f5f 32 intel jnp .+0x11 -7b11|223344556677885f5f5f5f5f5f5f 32 plan9 JNP .+17 -7b11|223344556677885f5f5f5f5f5f5f 64 gnu jnp .+0x11 -7b11|223344556677885f5f5f5f5f5f5f 64 intel jnp .+0x11 -7b11|223344556677885f5f5f5f5f5f5f 64 plan9 JNP .+17 -7c11|223344556677885f5f5f5f5f5f5f 32 intel jl .+0x11 -7c11|223344556677885f5f5f5f5f5f5f 32 plan9 JL .+17 -7c11|223344556677885f5f5f5f5f5f5f 64 gnu jl .+0x11 -7c11|223344556677885f5f5f5f5f5f5f 64 intel jl .+0x11 -7c11|223344556677885f5f5f5f5f5f5f 64 plan9 JL .+17 -7d11|223344556677885f5f5f5f5f5f5f 32 intel jnl .+0x11 -7d11|223344556677885f5f5f5f5f5f5f 32 plan9 JGE .+17 -7d11|223344556677885f5f5f5f5f5f5f 64 gnu jge .+0x11 -7d11|223344556677885f5f5f5f5f5f5f 64 intel jnl .+0x11 -7d11|223344556677885f5f5f5f5f5f5f 64 plan9 JGE .+17 -7e11|223344556677885f5f5f5f5f5f5f 32 intel jle .+0x11 -7e11|223344556677885f5f5f5f5f5f5f 32 plan9 JLE .+17 -7e11|223344556677885f5f5f5f5f5f5f 64 gnu jle .+0x11 -7e11|223344556677885f5f5f5f5f5f5f 64 intel jle .+0x11 -7e11|223344556677885f5f5f5f5f5f5f 64 plan9 JLE .+17 -7f11|223344556677885f5f5f5f5f5f5f 32 intel jnle .+0x11 -7f11|223344556677885f5f5f5f5f5f5f 32 plan9 JG .+17 -7f11|223344556677885f5f5f5f5f5f5f 64 gnu jg .+0x11 -7f11|223344556677885f5f5f5f5f5f5f 64 intel jnle .+0x11 -7f11|223344556677885f5f5f5f5f5f5f 64 plan9 JG .+17 -800011|223344556677885f5f5f5f5f5f 32 intel add byte ptr [eax], 0x11 -800011|223344556677885f5f5f5f5f5f 32 plan9 ADDB $0x11, 0(AX) -800011|223344556677885f5f5f5f5f5f 64 gnu addb $0x11,(%rax) -800011|223344556677885f5f5f5f5f5f 64 intel add byte ptr [rax], 0x11 -800011|223344556677885f5f5f5f5f5f 64 plan9 ADDB $0x11, 0(AX) -800811|223344556677885f5f5f5f5f5f 32 intel or byte ptr [eax], 0x11 -800811|223344556677885f5f5f5f5f5f 32 plan9 ORB $0x11, 0(AX) -800811|223344556677885f5f5f5f5f5f 64 gnu orb $0x11,(%rax) -800811|223344556677885f5f5f5f5f5f 64 intel or byte ptr [rax], 0x11 -800811|223344556677885f5f5f5f5f5f 64 plan9 ORB $0x11, 0(AX) -801122|3344556677885f5f5f5f5f5f5f 32 intel adc byte ptr [ecx], 0x22 -801122|3344556677885f5f5f5f5f5f5f 32 plan9 ADCB $0x22, 0(CX) -801122|3344556677885f5f5f5f5f5f5f 64 gnu adcb $0x22,(%rcx) -801122|3344556677885f5f5f5f5f5f5f 64 intel adc byte ptr [rcx], 0x22 -801122|3344556677885f5f5f5f5f5f5f 64 plan9 ADCB $0x22, 0(CX) -801811|223344556677885f5f5f5f5f5f 32 intel sbb byte ptr [eax], 0x11 -801811|223344556677885f5f5f5f5f5f 32 plan9 SBBB $0x11, 0(AX) -801811|223344556677885f5f5f5f5f5f 64 gnu sbbb $0x11,(%rax) -801811|223344556677885f5f5f5f5f5f 64 intel sbb byte ptr [rax], 0x11 -801811|223344556677885f5f5f5f5f5f 64 plan9 SBBB $0x11, 0(AX) -802011|223344556677885f5f5f5f5f5f 32 intel and byte ptr [eax], 0x11 -802011|223344556677885f5f5f5f5f5f 32 plan9 ANDB $0x11, 0(AX) -802011|223344556677885f5f5f5f5f5f 64 gnu andb $0x11,(%rax) -802011|223344556677885f5f5f5f5f5f 64 intel and byte ptr [rax], 0x11 -802011|223344556677885f5f5f5f5f5f 64 plan9 ANDB $0x11, 0(AX) -802811|223344556677885f5f5f5f5f5f 32 intel sub byte ptr [eax], 0x11 -802811|223344556677885f5f5f5f5f5f 32 plan9 SUBB $0x11, 0(AX) -802811|223344556677885f5f5f5f5f5f 64 gnu subb $0x11,(%rax) -802811|223344556677885f5f5f5f5f5f 64 intel sub byte ptr [rax], 0x11 -802811|223344556677885f5f5f5f5f5f 64 plan9 SUBB $0x11, 0(AX) -803011|223344556677885f5f5f5f5f5f 32 intel xor byte ptr [eax], 0x11 -803011|223344556677885f5f5f5f5f5f 32 plan9 XORB $0x11, 0(AX) -803011|223344556677885f5f5f5f5f5f 64 gnu xorb $0x11,(%rax) -803011|223344556677885f5f5f5f5f5f 64 intel xor byte ptr [rax], 0x11 -803011|223344556677885f5f5f5f5f5f 64 plan9 XORB $0x11, 0(AX) -803811|223344556677885f5f5f5f5f5f 32 intel cmp byte ptr [eax], 0x11 -803811|223344556677885f5f5f5f5f5f 32 plan9 CMPB $0x11, 0(AX) -803811|223344556677885f5f5f5f5f5f 64 gnu cmpb $0x11,(%rax) -803811|223344556677885f5f5f5f5f5f 64 intel cmp byte ptr [rax], 0x11 -803811|223344556677885f5f5f5f5f5f 64 plan9 CMPB $0x11, 0(AX) -810011223344|556677885f5f5f5f5f5f 32 intel add dword ptr [eax], 0x44332211 -810011223344|556677885f5f5f5f5f5f 32 plan9 ADDL $0x44332211, 0(AX) -810011223344|556677885f5f5f5f5f5f 64 gnu addl $0x44332211,(%rax) -810011223344|556677885f5f5f5f5f5f 64 intel add dword ptr [rax], 0x44332211 -810011223344|556677885f5f5f5f5f5f 64 plan9 ADDL $0x44332211, 0(AX) -810811223344|556677885f5f5f5f5f5f 32 intel or dword ptr [eax], 0x44332211 -810811223344|556677885f5f5f5f5f5f 32 plan9 ORL $0x44332211, 0(AX) -810811223344|556677885f5f5f5f5f5f 64 gnu orl $0x44332211,(%rax) -810811223344|556677885f5f5f5f5f5f 64 intel or dword ptr [rax], 0x44332211 -810811223344|556677885f5f5f5f5f5f 64 plan9 ORL $0x44332211, 0(AX) -811122334455|6677885f5f5f5f5f5f5f 32 intel adc dword ptr [ecx], 0x55443322 -811122334455|6677885f5f5f5f5f5f5f 32 plan9 ADCL $0x55443322, 0(CX) -811122334455|6677885f5f5f5f5f5f5f 64 gnu adcl $0x55443322,(%rcx) -811122334455|6677885f5f5f5f5f5f5f 64 intel adc dword ptr [rcx], 0x55443322 -811122334455|6677885f5f5f5f5f5f5f 64 plan9 ADCL $0x55443322, 0(CX) -811811223344|556677885f5f5f5f5f5f 32 intel sbb dword ptr [eax], 0x44332211 -811811223344|556677885f5f5f5f5f5f 32 plan9 SBBL $0x44332211, 0(AX) -811811223344|556677885f5f5f5f5f5f 64 gnu sbbl $0x44332211,(%rax) -811811223344|556677885f5f5f5f5f5f 64 intel sbb dword ptr [rax], 0x44332211 -811811223344|556677885f5f5f5f5f5f 64 plan9 SBBL $0x44332211, 0(AX) -812011223344|556677885f5f5f5f5f5f 32 intel and dword ptr [eax], 0x44332211 -812011223344|556677885f5f5f5f5f5f 32 plan9 ANDL $0x44332211, 0(AX) -812011223344|556677885f5f5f5f5f5f 64 gnu andl $0x44332211,(%rax) -812011223344|556677885f5f5f5f5f5f 64 intel and dword ptr [rax], 0x44332211 -812011223344|556677885f5f5f5f5f5f 64 plan9 ANDL $0x44332211, 0(AX) -812811223344|556677885f5f5f5f5f5f 32 intel sub dword ptr [eax], 0x44332211 -812811223344|556677885f5f5f5f5f5f 32 plan9 SUBL $0x44332211, 0(AX) -812811223344|556677885f5f5f5f5f5f 64 gnu subl $0x44332211,(%rax) -812811223344|556677885f5f5f5f5f5f 64 intel sub dword ptr [rax], 0x44332211 -812811223344|556677885f5f5f5f5f5f 64 plan9 SUBL $0x44332211, 0(AX) -813011223344|556677885f5f5f5f5f5f 32 intel xor dword ptr [eax], 0x44332211 -813011223344|556677885f5f5f5f5f5f 32 plan9 XORL $0x44332211, 0(AX) -813011223344|556677885f5f5f5f5f5f 64 gnu xorl $0x44332211,(%rax) -813011223344|556677885f5f5f5f5f5f 64 intel xor dword ptr [rax], 0x44332211 -813011223344|556677885f5f5f5f5f5f 64 plan9 XORL $0x44332211, 0(AX) -813811223344|556677885f5f5f5f5f5f 32 intel cmp dword ptr [eax], 0x44332211 -813811223344|556677885f5f5f5f5f5f 32 plan9 CMPL $0x44332211, 0(AX) -813811223344|556677885f5f5f5f5f5f 64 gnu cmpl $0x44332211,(%rax) -813811223344|556677885f5f5f5f5f5f 64 intel cmp dword ptr [rax], 0x44332211 -813811223344|556677885f5f5f5f5f5f 64 plan9 CMPL $0x44332211, 0(AX) -830011|223344556677885f5f5f5f5f5f 32 intel add dword ptr [eax], 0x11 -830011|223344556677885f5f5f5f5f5f 32 plan9 ADDL $0x11, 0(AX) -830011|223344556677885f5f5f5f5f5f 64 gnu addl $0x11,(%rax) -830011|223344556677885f5f5f5f5f5f 64 intel add dword ptr [rax], 0x11 -830011|223344556677885f5f5f5f5f5f 64 plan9 ADDL $0x11, 0(AX) -830811|223344556677885f5f5f5f5f5f 32 intel or dword ptr [eax], 0x11 -830811|223344556677885f5f5f5f5f5f 32 plan9 ORL $0x11, 0(AX) -830811|223344556677885f5f5f5f5f5f 64 gnu orl $0x11,(%rax) -830811|223344556677885f5f5f5f5f5f 64 intel or dword ptr [rax], 0x11 -830811|223344556677885f5f5f5f5f5f 64 plan9 ORL $0x11, 0(AX) -831122|3344556677885f5f5f5f5f5f5f 32 intel adc dword ptr [ecx], 0x22 -831122|3344556677885f5f5f5f5f5f5f 32 plan9 ADCL $0x22, 0(CX) -831122|3344556677885f5f5f5f5f5f5f 64 gnu adcl $0x22,(%rcx) -831122|3344556677885f5f5f5f5f5f5f 64 intel adc dword ptr [rcx], 0x22 -831122|3344556677885f5f5f5f5f5f5f 64 plan9 ADCL $0x22, 0(CX) -831811|223344556677885f5f5f5f5f5f 32 intel sbb dword ptr [eax], 0x11 -831811|223344556677885f5f5f5f5f5f 32 plan9 SBBL $0x11, 0(AX) -831811|223344556677885f5f5f5f5f5f 64 gnu sbbl $0x11,(%rax) -831811|223344556677885f5f5f5f5f5f 64 intel sbb dword ptr [rax], 0x11 -831811|223344556677885f5f5f5f5f5f 64 plan9 SBBL $0x11, 0(AX) -832011|223344556677885f5f5f5f5f5f 32 intel and dword ptr [eax], 0x11 -832011|223344556677885f5f5f5f5f5f 32 plan9 ANDL $0x11, 0(AX) -832011|223344556677885f5f5f5f5f5f 64 gnu andl $0x11,(%rax) -832011|223344556677885f5f5f5f5f5f 64 intel and dword ptr [rax], 0x11 -832011|223344556677885f5f5f5f5f5f 64 plan9 ANDL $0x11, 0(AX) -832811|223344556677885f5f5f5f5f5f 32 intel sub dword ptr [eax], 0x11 -832811|223344556677885f5f5f5f5f5f 32 plan9 SUBL $0x11, 0(AX) -832811|223344556677885f5f5f5f5f5f 64 gnu subl $0x11,(%rax) -832811|223344556677885f5f5f5f5f5f 64 intel sub dword ptr [rax], 0x11 -832811|223344556677885f5f5f5f5f5f 64 plan9 SUBL $0x11, 0(AX) -833011|223344556677885f5f5f5f5f5f 32 intel xor dword ptr [eax], 0x11 -833011|223344556677885f5f5f5f5f5f 32 plan9 XORL $0x11, 0(AX) -833011|223344556677885f5f5f5f5f5f 64 gnu xorl $0x11,(%rax) -833011|223344556677885f5f5f5f5f5f 64 intel xor dword ptr [rax], 0x11 -833011|223344556677885f5f5f5f5f5f 64 plan9 XORL $0x11, 0(AX) -833811|223344556677885f5f5f5f5f5f 32 intel cmp dword ptr [eax], 0x11 -833811|223344556677885f5f5f5f5f5f 32 plan9 CMPL $0x11, 0(AX) -833811|223344556677885f5f5f5f5f5f 64 gnu cmpl $0x11,(%rax) -833811|223344556677885f5f5f5f5f5f 64 intel cmp dword ptr [rax], 0x11 -833811|223344556677885f5f5f5f5f5f 64 plan9 CMPL $0x11, 0(AX) -8411|223344556677885f5f5f5f5f5f5f 32 intel test byte ptr [ecx], dl -8411|223344556677885f5f5f5f5f5f5f 32 plan9 TESTB DL, 0(CX) -8411|223344556677885f5f5f5f5f5f5f 64 gnu test %dl,(%rcx) -8411|223344556677885f5f5f5f5f5f5f 64 intel test byte ptr [rcx], dl -8411|223344556677885f5f5f5f5f5f5f 64 plan9 TESTB DL, 0(CX) -8511|223344556677885f5f5f5f5f5f5f 32 intel test dword ptr [ecx], edx -8511|223344556677885f5f5f5f5f5f5f 32 plan9 TESTL DX, 0(CX) -8511|223344556677885f5f5f5f5f5f5f 64 gnu test %edx,(%rcx) -8511|223344556677885f5f5f5f5f5f5f 64 intel test dword ptr [rcx], edx -8511|223344556677885f5f5f5f5f5f5f 64 plan9 TESTL DX, 0(CX) -8611|223344556677885f5f5f5f5f5f5f 32 intel xchg byte ptr [ecx], dl -8611|223344556677885f5f5f5f5f5f5f 32 plan9 XCHGB DL, 0(CX) -8611|223344556677885f5f5f5f5f5f5f 64 gnu xchg %dl,(%rcx) -8611|223344556677885f5f5f5f5f5f5f 64 intel xchg byte ptr [rcx], dl -8611|223344556677885f5f5f5f5f5f5f 64 plan9 XCHGB DL, 0(CX) -8711|223344556677885f5f5f5f5f5f5f 32 intel xchg dword ptr [ecx], edx -8711|223344556677885f5f5f5f5f5f5f 32 plan9 XCHGL DX, 0(CX) -8711|223344556677885f5f5f5f5f5f5f 64 gnu xchg %edx,(%rcx) -8711|223344556677885f5f5f5f5f5f5f 64 intel xchg dword ptr [rcx], edx -8711|223344556677885f5f5f5f5f5f5f 64 plan9 XCHGL DX, 0(CX) -8811|223344556677885f5f5f5f5f5f5f 32 intel mov byte ptr [ecx], dl -8811|223344556677885f5f5f5f5f5f5f 32 plan9 MOVB DL, 0(CX) -8811|223344556677885f5f5f5f5f5f5f 64 gnu mov %dl,(%rcx) -8811|223344556677885f5f5f5f5f5f5f 64 intel mov byte ptr [rcx], dl -8811|223344556677885f5f5f5f5f5f5f 64 plan9 MOVB DL, 0(CX) -8911|223344556677885f5f5f5f5f5f5f 32 intel mov dword ptr [ecx], edx -8911|223344556677885f5f5f5f5f5f5f 32 plan9 MOVL DX, 0(CX) -8911|223344556677885f5f5f5f5f5f5f 64 gnu mov %edx,(%rcx) -8911|223344556677885f5f5f5f5f5f5f 64 intel mov dword ptr [rcx], edx -8911|223344556677885f5f5f5f5f5f5f 64 plan9 MOVL DX, 0(CX) -8a11|223344556677885f5f5f5f5f5f5f 32 intel mov dl, byte ptr [ecx] -8a11|223344556677885f5f5f5f5f5f5f 32 plan9 MOVB 0(CX), DL -8a11|223344556677885f5f5f5f5f5f5f 64 gnu mov (%rcx),%dl -8a11|223344556677885f5f5f5f5f5f5f 64 intel mov dl, byte ptr [rcx] -8a11|223344556677885f5f5f5f5f5f5f 64 plan9 MOVB 0(CX), DL -8b11|223344556677885f5f5f5f5f5f5f 32 intel mov edx, dword ptr [ecx] -8b11|223344556677885f5f5f5f5f5f5f 32 plan9 MOVL 0(CX), DX -8b11|223344556677885f5f5f5f5f5f5f 64 gnu mov (%rcx),%edx -8b11|223344556677885f5f5f5f5f5f5f 64 intel mov edx, dword ptr [rcx] -8b11|223344556677885f5f5f5f5f5f5f 64 plan9 MOVL 0(CX), DX -8c11|223344556677885f5f5f5f5f5f5f 32 intel mov word ptr [ecx], ss -8c11|223344556677885f5f5f5f5f5f5f 32 plan9 MOVW SS, 0(CX) -8c11|223344556677885f5f5f5f5f5f5f 64 gnu mov %ss,(%rcx) -8c11|223344556677885f5f5f5f5f5f5f 64 intel mov word ptr [rcx], ss -8c11|223344556677885f5f5f5f5f5f5f 64 plan9 MOVW SS, 0(CX) -8d11|223344556677885f5f5f5f5f5f5f 32 intel lea edx, ptr [ecx] -8d11|223344556677885f5f5f5f5f5f5f 32 plan9 LEAL 0(CX), DX -8d11|223344556677885f5f5f5f5f5f5f 64 gnu lea (%rcx),%edx -8d11|223344556677885f5f5f5f5f5f5f 64 intel lea edx, ptr [rcx] -8d11|223344556677885f5f5f5f5f5f5f 64 plan9 LEAL 0(CX), DX -8e11|223344556677885f5f5f5f5f5f5f 32 intel mov ss, word ptr [ecx] -8e11|223344556677885f5f5f5f5f5f5f 32 plan9 MOVW 0(CX), SS -8e11|223344556677885f5f5f5f5f5f5f 64 gnu mov (%rcx),%ss -8e11|223344556677885f5f5f5f5f5f5f 64 intel mov ss, word ptr [rcx] -8e11|223344556677885f5f5f5f5f5f5f 64 plan9 MOVW 0(CX), SS -8f00|11223344556677885f5f5f5f5f5f 32 intel pop dword ptr [eax] -8f00|11223344556677885f5f5f5f5f5f 32 plan9 POPL 0(AX) -8f00|11223344556677885f5f5f5f5f5f 64 gnu popq (%rax) -8f00|11223344556677885f5f5f5f5f5f 64 intel pop qword ptr [rax] -8f00|11223344556677885f5f5f5f5f5f 64 plan9 POPQ 0(AX) -91|11223344556677885f5f5f5f5f5f5f 32 intel xchg ecx, eax -91|11223344556677885f5f5f5f5f5f5f 32 plan9 XCHGL AX, CX -91|11223344556677885f5f5f5f5f5f5f 64 intel xchg ecx, eax -91|11223344556677885f5f5f5f5f5f5f 64 plan9 XCHGL AX, CX -98|11223344556677885f5f5f5f5f5f5f 32 intel cwde -98|11223344556677885f5f5f5f5f5f5f 32 plan9 CWDE -98|11223344556677885f5f5f5f5f5f5f 64 gnu cwtl -98|11223344556677885f5f5f5f5f5f5f 64 intel cwde -98|11223344556677885f5f5f5f5f5f5f 64 plan9 CWDE -99|11223344556677885f5f5f5f5f5f5f 32 intel cdq -99|11223344556677885f5f5f5f5f5f5f 32 plan9 CDQ -99|11223344556677885f5f5f5f5f5f5f 64 gnu cltd -99|11223344556677885f5f5f5f5f5f5f 64 intel cdq -99|11223344556677885f5f5f5f5f5f5f 64 plan9 CDQ -9a112233445566|77885f5f5f5f5f5f5f 32 intel call far 0x44332211, 0x6655 -9a112233445566|77885f5f5f5f5f5f5f 32 plan9 LCALL $0x44332211, $0x6655 -9b|11223344556677885f5f5f5f5f5f5f 32 intel fwait -9b|11223344556677885f5f5f5f5f5f5f 32 plan9 FWAIT -9b|11223344556677885f5f5f5f5f5f5f 64 gnu fwait -9b|11223344556677885f5f5f5f5f5f5f 64 intel fwait -9b|11223344556677885f5f5f5f5f5f5f 64 plan9 FWAIT -9c|11223344556677885f5f5f5f5f5f5f 32 intel pushfd -9c|11223344556677885f5f5f5f5f5f5f 32 plan9 PUSHFD -9c|11223344556677885f5f5f5f5f5f5f 64 gnu pushfq -9c|11223344556677885f5f5f5f5f5f5f 64 intel pushfq -9c|11223344556677885f5f5f5f5f5f5f 64 plan9 PUSHFQ -9d|11223344556677885f5f5f5f5f5f5f 32 intel popfd -9d|11223344556677885f5f5f5f5f5f5f 32 plan9 POPFD -9d|11223344556677885f5f5f5f5f5f5f 64 gnu popfq -9d|11223344556677885f5f5f5f5f5f5f 64 intel popfq -9d|11223344556677885f5f5f5f5f5f5f 64 plan9 POPFQ -9e|11223344556677885f5f5f5f5f5f5f 32 intel sahf -9e|11223344556677885f5f5f5f5f5f5f 32 plan9 SAHF -9e|11223344556677885f5f5f5f5f5f5f 64 gnu sahf -9e|11223344556677885f5f5f5f5f5f5f 64 intel sahf -9e|11223344556677885f5f5f5f5f5f5f 64 plan9 SAHF -9f|11223344556677885f5f5f5f5f5f5f 32 intel lahf -9f|11223344556677885f5f5f5f5f5f5f 32 plan9 LAHF -9f|11223344556677885f5f5f5f5f5f5f 64 gnu lahf -9f|11223344556677885f5f5f5f5f5f5f 64 intel lahf -9f|11223344556677885f5f5f5f5f5f5f 64 plan9 LAHF -a11122334455667788|5f5f5f5f5f5f5f 64 gnu mov -0x778899aabbccddef,%eax -a11122334455667788|5f5f5f5f5f5f5f 64 intel mov eax, dword ptr [0x8877665544332211] -a11122334455667788|5f5f5f5f5f5f5f 64 plan9 MOVL -0x778899aabbccddef, AX -a111223344|556677885f5f5f5f5f5f5f 32 intel mov eax, dword ptr [0x44332211] -a111223344|556677885f5f5f5f5f5f5f 32 plan9 MOVL 0x44332211, AX -a21122334455667788|5f5f5f5f5f5f5f 64 gnu mov %al,-0x778899aabbccddef -a21122334455667788|5f5f5f5f5f5f5f 64 intel mov byte ptr [0x8877665544332211], al -a21122334455667788|5f5f5f5f5f5f5f 64 plan9 MOVB AL, -0x778899aabbccddef -a211223344|556677885f5f5f5f5f5f5f 32 intel mov byte ptr [0x44332211], al -a211223344|556677885f5f5f5f5f5f5f 32 plan9 MOVB AL, 0x44332211 -a31122334455667788|5f5f5f5f5f5f5f 64 gnu mov %eax,-0x778899aabbccddef -a31122334455667788|5f5f5f5f5f5f5f 64 intel mov dword ptr [0x8877665544332211], eax -a31122334455667788|5f5f5f5f5f5f5f 64 plan9 MOVL AX, -0x778899aabbccddef -a311223344|556677885f5f5f5f5f5f5f 32 intel mov dword ptr [0x44332211], eax -a311223344|556677885f5f5f5f5f5f5f 32 plan9 MOVL AX, 0x44332211 -a4|11223344556677885f5f5f5f5f5f5f 32 intel movsb byte ptr [edi], byte ptr [esi] -a4|11223344556677885f5f5f5f5f5f5f 32 plan9 MOVSB DS:0(SI), ES:0(DI) -a4|11223344556677885f5f5f5f5f5f5f 64 gnu movsb %ds:(%rsi),%es:(%rdi) -a4|11223344556677885f5f5f5f5f5f5f 64 intel movsb byte ptr [rdi], byte ptr [rsi] -a4|11223344556677885f5f5f5f5f5f5f 64 plan9 MOVSB DS:0(SI), ES:0(DI) -a5|11223344556677885f5f5f5f5f5f5f 32 intel movsd dword ptr [edi], dword ptr [esi] -a5|11223344556677885f5f5f5f5f5f5f 32 plan9 MOVSD DS:0(SI), ES:0(DI) -a5|11223344556677885f5f5f5f5f5f5f 64 gnu movsl %ds:(%rsi),%es:(%rdi) -a5|11223344556677885f5f5f5f5f5f5f 64 intel movsd dword ptr [rdi], dword ptr [rsi] -a5|11223344556677885f5f5f5f5f5f5f 64 plan9 MOVSD DS:0(SI), ES:0(DI) -a6|11223344556677885f5f5f5f5f5f5f 32 intel cmpsb byte ptr [esi], byte ptr [edi] -a6|11223344556677885f5f5f5f5f5f5f 32 plan9 CMPSB ES:0(DI), DS:0(SI) -a6|11223344556677885f5f5f5f5f5f5f 64 gnu cmpsb %es:(%rdi),%ds:(%rsi) -a6|11223344556677885f5f5f5f5f5f5f 64 intel cmpsb byte ptr [rsi], byte ptr [rdi] -a6|11223344556677885f5f5f5f5f5f5f 64 plan9 CMPSB ES:0(DI), DS:0(SI) -a7|11223344556677885f5f5f5f5f5f5f 32 intel cmpsd dword ptr [esi], dword ptr [edi] -a7|11223344556677885f5f5f5f5f5f5f 32 plan9 CMPSD ES:0(DI), DS:0(SI) -a7|11223344556677885f5f5f5f5f5f5f 64 gnu cmpsl %es:(%rdi),%ds:(%rsi) -a7|11223344556677885f5f5f5f5f5f5f 64 intel cmpsd dword ptr [rsi], dword ptr [rdi] -a7|11223344556677885f5f5f5f5f5f5f 64 plan9 CMPSD ES:0(DI), DS:0(SI) -a811|223344556677885f5f5f5f5f5f5f 32 intel test al, 0x11 -a811|223344556677885f5f5f5f5f5f5f 32 plan9 TESTL $0x11, AL -a811|223344556677885f5f5f5f5f5f5f 64 gnu test $0x11,%al -a811|223344556677885f5f5f5f5f5f5f 64 intel test al, 0x11 -a811|223344556677885f5f5f5f5f5f5f 64 plan9 TESTL $0x11, AL -a911223344|556677885f5f5f5f5f5f5f 32 intel test eax, 0x44332211 -a911223344|556677885f5f5f5f5f5f5f 32 plan9 TESTL $0x44332211, AX -a911223344|556677885f5f5f5f5f5f5f 64 gnu test $0x44332211,%eax -a911223344|556677885f5f5f5f5f5f5f 64 intel test eax, 0x44332211 -a911223344|556677885f5f5f5f5f5f5f 64 plan9 TESTL $0x44332211, AX -aa|11223344556677885f5f5f5f5f5f5f 32 intel stosb byte ptr [edi] -aa|11223344556677885f5f5f5f5f5f5f 32 plan9 STOSB AL, ES:0(DI) -aa|11223344556677885f5f5f5f5f5f5f 64 gnu stos %al,%es:(%rdi) -aa|11223344556677885f5f5f5f5f5f5f 64 intel stosb byte ptr [rdi] -aa|11223344556677885f5f5f5f5f5f5f 64 plan9 STOSB AL, ES:0(DI) -ab|11223344556677885f5f5f5f5f5f5f 32 intel stosd dword ptr [edi] -ab|11223344556677885f5f5f5f5f5f5f 32 plan9 STOSD AX, ES:0(DI) -ab|11223344556677885f5f5f5f5f5f5f 64 gnu stos %eax,%es:(%rdi) -ab|11223344556677885f5f5f5f5f5f5f 64 intel stosd dword ptr [rdi] -ab|11223344556677885f5f5f5f5f5f5f 64 plan9 STOSD AX, ES:0(DI) -ac|11223344556677885f5f5f5f5f5f5f 32 intel lodsb byte ptr [esi] -ac|11223344556677885f5f5f5f5f5f5f 32 plan9 LODSB DS:0(SI), AL -ac|11223344556677885f5f5f5f5f5f5f 64 gnu lods %ds:(%rsi),%al -ac|11223344556677885f5f5f5f5f5f5f 64 intel lodsb byte ptr [rsi] -ac|11223344556677885f5f5f5f5f5f5f 64 plan9 LODSB DS:0(SI), AL -ad|11223344556677885f5f5f5f5f5f5f 32 intel lodsd dword ptr [esi] -ad|11223344556677885f5f5f5f5f5f5f 32 plan9 LODSD DS:0(SI), AX -ad|11223344556677885f5f5f5f5f5f5f 64 gnu lods %ds:(%rsi),%eax -ad|11223344556677885f5f5f5f5f5f5f 64 intel lodsd dword ptr [rsi] -ad|11223344556677885f5f5f5f5f5f5f 64 plan9 LODSD DS:0(SI), AX -ae|11223344556677885f5f5f5f5f5f5f 32 intel scasb byte ptr [edi] -ae|11223344556677885f5f5f5f5f5f5f 32 plan9 SCASB ES:0(DI), AL -ae|11223344556677885f5f5f5f5f5f5f 64 gnu scas %es:(%rdi),%al -ae|11223344556677885f5f5f5f5f5f5f 64 intel scasb byte ptr [rdi] -ae|11223344556677885f5f5f5f5f5f5f 64 plan9 SCASB ES:0(DI), AL -af|11223344556677885f5f5f5f5f5f5f 32 intel scasd dword ptr [edi] -af|11223344556677885f5f5f5f5f5f5f 32 plan9 SCASD ES:0(DI), AX -af|11223344556677885f5f5f5f5f5f5f 64 gnu scas %es:(%rdi),%eax -af|11223344556677885f5f5f5f5f5f5f 64 intel scasd dword ptr [rdi] -af|11223344556677885f5f5f5f5f5f5f 64 plan9 SCASD ES:0(DI), AX -b011|223344556677885f5f5f5f5f5f5f 32 intel mov al, 0x11 -b011|223344556677885f5f5f5f5f5f5f 32 plan9 MOVL $0x11, AL -b011|223344556677885f5f5f5f5f5f5f 64 gnu mov $0x11,%al -b011|223344556677885f5f5f5f5f5f5f 64 intel mov al, 0x11 -b011|223344556677885f5f5f5f5f5f5f 64 plan9 MOVL $0x11, AL -b811223344|556677885f5f5f5f5f5f5f 32 intel mov eax, 0x44332211 -b811223344|556677885f5f5f5f5f5f5f 32 plan9 MOVL $0x44332211, AX -b811223344|556677885f5f5f5f5f5f5f 64 gnu mov $0x44332211,%eax -b811223344|556677885f5f5f5f5f5f5f 64 intel mov eax, 0x44332211 -b811223344|556677885f5f5f5f5f5f5f 64 plan9 MOVL $0x44332211, AX -c00011|223344556677885f5f5f5f5f5f 32 intel rol byte ptr [eax], 0x11 -c00011|223344556677885f5f5f5f5f5f 32 plan9 ROLB $0x11, 0(AX) -c00011|223344556677885f5f5f5f5f5f 64 gnu rolb $0x11,(%rax) -c00011|223344556677885f5f5f5f5f5f 64 intel rol byte ptr [rax], 0x11 -c00011|223344556677885f5f5f5f5f5f 64 plan9 ROLB $0x11, 0(AX) -c00811|223344556677885f5f5f5f5f5f 32 intel ror byte ptr [eax], 0x11 -c00811|223344556677885f5f5f5f5f5f 32 plan9 RORB $0x11, 0(AX) -c00811|223344556677885f5f5f5f5f5f 64 gnu rorb $0x11,(%rax) -c00811|223344556677885f5f5f5f5f5f 64 intel ror byte ptr [rax], 0x11 -c00811|223344556677885f5f5f5f5f5f 64 plan9 RORB $0x11, 0(AX) -c01122|3344556677885f5f5f5f5f5f5f 32 intel rcl byte ptr [ecx], 0x22 -c01122|3344556677885f5f5f5f5f5f5f 32 plan9 RCLB $0x22, 0(CX) -c01122|3344556677885f5f5f5f5f5f5f 64 gnu rclb $0x22,(%rcx) -c01122|3344556677885f5f5f5f5f5f5f 64 intel rcl byte ptr [rcx], 0x22 -c01122|3344556677885f5f5f5f5f5f5f 64 plan9 RCLB $0x22, 0(CX) -c01811|223344556677885f5f5f5f5f5f 32 intel rcr byte ptr [eax], 0x11 -c01811|223344556677885f5f5f5f5f5f 32 plan9 RCRB $0x11, 0(AX) -c01811|223344556677885f5f5f5f5f5f 64 gnu rcrb $0x11,(%rax) -c01811|223344556677885f5f5f5f5f5f 64 intel rcr byte ptr [rax], 0x11 -c01811|223344556677885f5f5f5f5f5f 64 plan9 RCRB $0x11, 0(AX) -c02011|223344556677885f5f5f5f5f5f 32 intel shl byte ptr [eax], 0x11 -c02011|223344556677885f5f5f5f5f5f 32 plan9 SHLB $0x11, 0(AX) -c02011|223344556677885f5f5f5f5f5f 64 gnu shlb $0x11,(%rax) -c02011|223344556677885f5f5f5f5f5f 64 intel shl byte ptr [rax], 0x11 -c02011|223344556677885f5f5f5f5f5f 64 plan9 SHLB $0x11, 0(AX) -c02811|223344556677885f5f5f5f5f5f 32 intel shr byte ptr [eax], 0x11 -c02811|223344556677885f5f5f5f5f5f 32 plan9 SHRB $0x11, 0(AX) -c02811|223344556677885f5f5f5f5f5f 64 gnu shrb $0x11,(%rax) -c02811|223344556677885f5f5f5f5f5f 64 intel shr byte ptr [rax], 0x11 -c02811|223344556677885f5f5f5f5f5f 64 plan9 SHRB $0x11, 0(AX) -c03811|223344556677885f5f5f5f5f5f 32 intel sar byte ptr [eax], 0x11 -c03811|223344556677885f5f5f5f5f5f 32 plan9 SARB $0x11, 0(AX) -c03811|223344556677885f5f5f5f5f5f 64 gnu sarb $0x11,(%rax) -c03811|223344556677885f5f5f5f5f5f 64 intel sar byte ptr [rax], 0x11 -c03811|223344556677885f5f5f5f5f5f 64 plan9 SARB $0x11, 0(AX) -c10011|223344556677885f5f5f5f5f5f 32 intel rol dword ptr [eax], 0x11 -c10011|223344556677885f5f5f5f5f5f 32 plan9 ROLL $0x11, 0(AX) -c10011|223344556677885f5f5f5f5f5f 64 gnu roll $0x11,(%rax) -c10011|223344556677885f5f5f5f5f5f 64 intel rol dword ptr [rax], 0x11 -c10011|223344556677885f5f5f5f5f5f 64 plan9 ROLL $0x11, 0(AX) -c10811|223344556677885f5f5f5f5f5f 32 intel ror dword ptr [eax], 0x11 -c10811|223344556677885f5f5f5f5f5f 32 plan9 RORL $0x11, 0(AX) -c10811|223344556677885f5f5f5f5f5f 64 gnu rorl $0x11,(%rax) -c10811|223344556677885f5f5f5f5f5f 64 intel ror dword ptr [rax], 0x11 -c10811|223344556677885f5f5f5f5f5f 64 plan9 RORL $0x11, 0(AX) -c11122|3344556677885f5f5f5f5f5f5f 32 intel rcl dword ptr [ecx], 0x22 -c11122|3344556677885f5f5f5f5f5f5f 32 plan9 RCLL $0x22, 0(CX) -c11122|3344556677885f5f5f5f5f5f5f 64 gnu rcll $0x22,(%rcx) -c11122|3344556677885f5f5f5f5f5f5f 64 intel rcl dword ptr [rcx], 0x22 -c11122|3344556677885f5f5f5f5f5f5f 64 plan9 RCLL $0x22, 0(CX) -c11811|223344556677885f5f5f5f5f5f 32 intel rcr dword ptr [eax], 0x11 -c11811|223344556677885f5f5f5f5f5f 32 plan9 RCRL $0x11, 0(AX) -c11811|223344556677885f5f5f5f5f5f 64 gnu rcrl $0x11,(%rax) -c11811|223344556677885f5f5f5f5f5f 64 intel rcr dword ptr [rax], 0x11 -c11811|223344556677885f5f5f5f5f5f 64 plan9 RCRL $0x11, 0(AX) -c12011|223344556677885f5f5f5f5f5f 32 intel shl dword ptr [eax], 0x11 -c12011|223344556677885f5f5f5f5f5f 32 plan9 SHLL $0x11, 0(AX) -c12011|223344556677885f5f5f5f5f5f 64 gnu shll $0x11,(%rax) -c12011|223344556677885f5f5f5f5f5f 64 intel shl dword ptr [rax], 0x11 -c12011|223344556677885f5f5f5f5f5f 64 plan9 SHLL $0x11, 0(AX) -c12811|223344556677885f5f5f5f5f5f 32 intel shr dword ptr [eax], 0x11 -c12811|223344556677885f5f5f5f5f5f 32 plan9 SHRL $0x11, 0(AX) -c12811|223344556677885f5f5f5f5f5f 64 gnu shrl $0x11,(%rax) -c12811|223344556677885f5f5f5f5f5f 64 intel shr dword ptr [rax], 0x11 -c12811|223344556677885f5f5f5f5f5f 64 plan9 SHRL $0x11, 0(AX) -c13811|223344556677885f5f5f5f5f5f 32 intel sar dword ptr [eax], 0x11 -c13811|223344556677885f5f5f5f5f5f 32 plan9 SARL $0x11, 0(AX) -c13811|223344556677885f5f5f5f5f5f 64 gnu sarl $0x11,(%rax) -c13811|223344556677885f5f5f5f5f5f 64 intel sar dword ptr [rax], 0x11 -c13811|223344556677885f5f5f5f5f5f 64 plan9 SARL $0x11, 0(AX) -c3|11223344556677885f5f5f5f5f5f5f 32 intel ret -c3|11223344556677885f5f5f5f5f5f5f 32 plan9 RET -c3|11223344556677885f5f5f5f5f5f5f 64 gnu retq -c3|11223344556677885f5f5f5f5f5f5f 64 intel ret -c3|11223344556677885f5f5f5f5f5f5f 64 plan9 RET -c411|223344556677885f5f5f5f5f5f5f 32 intel les edx, ptr [ecx] -c411|223344556677885f5f5f5f5f5f5f 32 plan9 LES 0(CX), DX -c511|223344556677885f5f5f5f5f5f5f 32 intel lds edx, ptr [ecx] -c511|223344556677885f5f5f5f5f5f5f 32 plan9 LDS 0(CX), DX -c60011|223344556677885f5f5f5f5f5f 32 intel mov byte ptr [eax], 0x11 -c60011|223344556677885f5f5f5f5f5f 32 plan9 MOVB $0x11, 0(AX) -c60011|223344556677885f5f5f5f5f5f 64 gnu movb $0x11,(%rax) -c60011|223344556677885f5f5f5f5f5f 64 intel mov byte ptr [rax], 0x11 -c60011|223344556677885f5f5f5f5f5f 64 plan9 MOVB $0x11, 0(AX) -c6f811|223344556677885f5f5f5f5f5f 32 intel xabort 0x11 -c6f811|223344556677885f5f5f5f5f5f 32 plan9 XABORT $0x11 -c6f811|223344556677885f5f5f5f5f5f 64 gnu xabort $0x11 -c6f811|223344556677885f5f5f5f5f5f 64 intel xabort 0x11 -c6f811|223344556677885f5f5f5f5f5f 64 plan9 XABORT $0x11 -c70011223344|556677885f5f5f5f5f5f 32 intel mov dword ptr [eax], 0x44332211 -c70011223344|556677885f5f5f5f5f5f 32 plan9 MOVL $0x44332211, 0(AX) -c70011223344|556677885f5f5f5f5f5f 64 gnu movl $0x44332211,(%rax) -c70011223344|556677885f5f5f5f5f5f 64 intel mov dword ptr [rax], 0x44332211 -c70011223344|556677885f5f5f5f5f5f 64 plan9 MOVL $0x44332211, 0(AX) -c7f811223344|556677885f5f5f5f5f5f 32 intel xbegin .+0x44332211 -c7f811223344|556677885f5f5f5f5f5f 32 plan9 XBEGIN .+1144201745 -c7f811223344|556677885f5f5f5f5f5f 64 gnu xbeginq .+0x44332211 -c7f811223344|556677885f5f5f5f5f5f 64 intel xbegin .+0x44332211 -c7f811223344|556677885f5f5f5f5f5f 64 plan9 XBEGIN .+1144201745 -c8112233|44556677885f5f5f5f5f5f5f 32 intel enter 0x2211, 0x33 -c8112233|44556677885f5f5f5f5f5f5f 32 plan9 ENTER $0x33, $0x2211 -c8112233|44556677885f5f5f5f5f5f5f 64 gnu enterq $0x2211,$0x33 -c8112233|44556677885f5f5f5f5f5f5f 64 intel enter 0x2211, 0x33 -c8112233|44556677885f5f5f5f5f5f5f 64 plan9 ENTER $0x33, $0x2211 -c9|11223344556677885f5f5f5f5f5f5f 32 intel leave -c9|11223344556677885f5f5f5f5f5f5f 32 plan9 LEAVE -c9|11223344556677885f5f5f5f5f5f5f 64 gnu leaveq -c9|11223344556677885f5f5f5f5f5f5f 64 intel leave -c9|11223344556677885f5f5f5f5f5f5f 64 plan9 LEAVE -ca1122|3344556677885f5f5f5f5f5f5f 32 intel ret far 0x2211 -ca1122|3344556677885f5f5f5f5f5f5f 32 plan9 LRET $0x2211 -ca1122|3344556677885f5f5f5f5f5f5f 64 gnu lretq $0x2211 -ca1122|3344556677885f5f5f5f5f5f5f 64 intel ret far 0x2211 -ca1122|3344556677885f5f5f5f5f5f5f 64 plan9 LRET $0x2211 -cb|11223344556677885f5f5f5f5f5f5f 32 intel ret far -cb|11223344556677885f5f5f5f5f5f5f 32 plan9 LRET -cb|11223344556677885f5f5f5f5f5f5f 64 gnu lretq -cb|11223344556677885f5f5f5f5f5f5f 64 intel ret far -cb|11223344556677885f5f5f5f5f5f5f 64 plan9 LRET -cc|11223344556677885f5f5f5f5f5f5f 32 intel int3 -cc|11223344556677885f5f5f5f5f5f5f 32 plan9 INT $0x3 -cc|11223344556677885f5f5f5f5f5f5f 64 gnu int3 -cc|11223344556677885f5f5f5f5f5f5f 64 intel int3 -cc|11223344556677885f5f5f5f5f5f5f 64 plan9 INT $0x3 -cd11|223344556677885f5f5f5f5f5f5f 32 intel int 0x11 -cd11|223344556677885f5f5f5f5f5f5f 32 plan9 INT $0x11 -cd11|223344556677885f5f5f5f5f5f5f 64 gnu int $0x11 -cd11|223344556677885f5f5f5f5f5f5f 64 intel int 0x11 -cd11|223344556677885f5f5f5f5f5f5f 64 plan9 INT $0x11 -ce|11223344556677885f5f5f5f5f5f5f 32 intel into -ce|11223344556677885f5f5f5f5f5f5f 32 plan9 INTO -ce|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction -ce|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction -ce|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction -cf|11223344556677885f5f5f5f5f5f5f 32 intel iretd -cf|11223344556677885f5f5f5f5f5f5f 32 plan9 IRETD -cf|11223344556677885f5f5f5f5f5f5f 64 gnu iret -cf|11223344556677885f5f5f5f5f5f5f 64 intel iretd -cf|11223344556677885f5f5f5f5f5f5f 64 plan9 IRETD -d000|11223344556677885f5f5f5f5f5f 32 intel rol byte ptr [eax], 0x1 -d000|11223344556677885f5f5f5f5f5f 32 plan9 ROLB $0x1, 0(AX) -d000|11223344556677885f5f5f5f5f5f 64 gnu rolb (%rax) -d000|11223344556677885f5f5f5f5f5f 64 intel rol byte ptr [rax], 0x1 -d000|11223344556677885f5f5f5f5f5f 64 plan9 ROLB $0x1, 0(AX) -d008|11223344556677885f5f5f5f5f5f 32 intel ror byte ptr [eax], 0x1 -d008|11223344556677885f5f5f5f5f5f 32 plan9 RORB $0x1, 0(AX) -d008|11223344556677885f5f5f5f5f5f 64 gnu rorb (%rax) -d008|11223344556677885f5f5f5f5f5f 64 intel ror byte ptr [rax], 0x1 -d008|11223344556677885f5f5f5f5f5f 64 plan9 RORB $0x1, 0(AX) -d011|223344556677885f5f5f5f5f5f5f 32 intel rcl byte ptr [ecx], 0x1 -d011|223344556677885f5f5f5f5f5f5f 32 plan9 RCLB $0x1, 0(CX) -d011|223344556677885f5f5f5f5f5f5f 64 gnu rclb (%rcx) -d011|223344556677885f5f5f5f5f5f5f 64 intel rcl byte ptr [rcx], 0x1 -d011|223344556677885f5f5f5f5f5f5f 64 plan9 RCLB $0x1, 0(CX) -d018|11223344556677885f5f5f5f5f5f 32 intel rcr byte ptr [eax], 0x1 -d018|11223344556677885f5f5f5f5f5f 32 plan9 RCRB $0x1, 0(AX) -d018|11223344556677885f5f5f5f5f5f 64 gnu rcrb (%rax) -d018|11223344556677885f5f5f5f5f5f 64 intel rcr byte ptr [rax], 0x1 -d018|11223344556677885f5f5f5f5f5f 64 plan9 RCRB $0x1, 0(AX) -d020|11223344556677885f5f5f5f5f5f 32 intel shl byte ptr [eax], 0x1 -d020|11223344556677885f5f5f5f5f5f 32 plan9 SHLB $0x1, 0(AX) -d020|11223344556677885f5f5f5f5f5f 64 gnu shlb (%rax) -d020|11223344556677885f5f5f5f5f5f 64 intel shl byte ptr [rax], 0x1 -d020|11223344556677885f5f5f5f5f5f 64 plan9 SHLB $0x1, 0(AX) -d028|11223344556677885f5f5f5f5f5f 32 intel shr byte ptr [eax], 0x1 -d028|11223344556677885f5f5f5f5f5f 32 plan9 SHRB $0x1, 0(AX) -d028|11223344556677885f5f5f5f5f5f 64 gnu shrb (%rax) -d028|11223344556677885f5f5f5f5f5f 64 intel shr byte ptr [rax], 0x1 -d028|11223344556677885f5f5f5f5f5f 64 plan9 SHRB $0x1, 0(AX) -d038|11223344556677885f5f5f5f5f5f 32 intel sar byte ptr [eax], 0x1 -d038|11223344556677885f5f5f5f5f5f 32 plan9 SARB $0x1, 0(AX) -d038|11223344556677885f5f5f5f5f5f 64 gnu sarb (%rax) -d038|11223344556677885f5f5f5f5f5f 64 intel sar byte ptr [rax], 0x1 -d038|11223344556677885f5f5f5f5f5f 64 plan9 SARB $0x1, 0(AX) -d100|11223344556677885f5f5f5f5f5f 32 intel rol dword ptr [eax], 0x1 -d100|11223344556677885f5f5f5f5f5f 32 plan9 ROLL $0x1, 0(AX) -d100|11223344556677885f5f5f5f5f5f 64 gnu roll (%rax) -d100|11223344556677885f5f5f5f5f5f 64 intel rol dword ptr [rax], 0x1 -d100|11223344556677885f5f5f5f5f5f 64 plan9 ROLL $0x1, 0(AX) -d108|11223344556677885f5f5f5f5f5f 32 intel ror dword ptr [eax], 0x1 -d108|11223344556677885f5f5f5f5f5f 32 plan9 RORL $0x1, 0(AX) -d108|11223344556677885f5f5f5f5f5f 64 gnu rorl (%rax) -d108|11223344556677885f5f5f5f5f5f 64 intel ror dword ptr [rax], 0x1 -d108|11223344556677885f5f5f5f5f5f 64 plan9 RORL $0x1, 0(AX) -d111|223344556677885f5f5f5f5f5f5f 32 intel rcl dword ptr [ecx], 0x1 -d111|223344556677885f5f5f5f5f5f5f 32 plan9 RCLL $0x1, 0(CX) -d111|223344556677885f5f5f5f5f5f5f 64 gnu rcll (%rcx) -d111|223344556677885f5f5f5f5f5f5f 64 intel rcl dword ptr [rcx], 0x1 -d111|223344556677885f5f5f5f5f5f5f 64 plan9 RCLL $0x1, 0(CX) -d118|11223344556677885f5f5f5f5f5f 32 intel rcr dword ptr [eax], 0x1 -d118|11223344556677885f5f5f5f5f5f 32 plan9 RCRL $0x1, 0(AX) -d118|11223344556677885f5f5f5f5f5f 64 gnu rcrl (%rax) -d118|11223344556677885f5f5f5f5f5f 64 intel rcr dword ptr [rax], 0x1 -d118|11223344556677885f5f5f5f5f5f 64 plan9 RCRL $0x1, 0(AX) -d120|11223344556677885f5f5f5f5f5f 32 intel shl dword ptr [eax], 0x1 -d120|11223344556677885f5f5f5f5f5f 32 plan9 SHLL $0x1, 0(AX) -d120|11223344556677885f5f5f5f5f5f 64 gnu shll (%rax) -d120|11223344556677885f5f5f5f5f5f 64 intel shl dword ptr [rax], 0x1 -d120|11223344556677885f5f5f5f5f5f 64 plan9 SHLL $0x1, 0(AX) -d128|11223344556677885f5f5f5f5f5f 32 intel shr dword ptr [eax], 0x1 -d128|11223344556677885f5f5f5f5f5f 32 plan9 SHRL $0x1, 0(AX) -d128|11223344556677885f5f5f5f5f5f 64 gnu shrl (%rax) -d128|11223344556677885f5f5f5f5f5f 64 intel shr dword ptr [rax], 0x1 -d128|11223344556677885f5f5f5f5f5f 64 plan9 SHRL $0x1, 0(AX) -d138|11223344556677885f5f5f5f5f5f 32 intel sar dword ptr [eax], 0x1 -d138|11223344556677885f5f5f5f5f5f 32 plan9 SARL $0x1, 0(AX) -d138|11223344556677885f5f5f5f5f5f 64 gnu sarl (%rax) -d138|11223344556677885f5f5f5f5f5f 64 intel sar dword ptr [rax], 0x1 -d138|11223344556677885f5f5f5f5f5f 64 plan9 SARL $0x1, 0(AX) -d200|11223344556677885f5f5f5f5f5f 32 intel rol byte ptr [eax], cl -d200|11223344556677885f5f5f5f5f5f 32 plan9 ROLB CL, 0(AX) -d200|11223344556677885f5f5f5f5f5f 64 gnu rolb %cl,(%rax) -d200|11223344556677885f5f5f5f5f5f 64 intel rol byte ptr [rax], cl -d200|11223344556677885f5f5f5f5f5f 64 plan9 ROLB CL, 0(AX) -d208|11223344556677885f5f5f5f5f5f 32 intel ror byte ptr [eax], cl -d208|11223344556677885f5f5f5f5f5f 32 plan9 RORB CL, 0(AX) -d208|11223344556677885f5f5f5f5f5f 64 gnu rorb %cl,(%rax) -d208|11223344556677885f5f5f5f5f5f 64 intel ror byte ptr [rax], cl -d208|11223344556677885f5f5f5f5f5f 64 plan9 RORB CL, 0(AX) -d211|223344556677885f5f5f5f5f5f5f 32 intel rcl byte ptr [ecx], cl -d211|223344556677885f5f5f5f5f5f5f 32 plan9 RCLB CL, 0(CX) -d211|223344556677885f5f5f5f5f5f5f 64 gnu rclb %cl,(%rcx) -d211|223344556677885f5f5f5f5f5f5f 64 intel rcl byte ptr [rcx], cl -d211|223344556677885f5f5f5f5f5f5f 64 plan9 RCLB CL, 0(CX) -d218|11223344556677885f5f5f5f5f5f 32 intel rcr byte ptr [eax], cl -d218|11223344556677885f5f5f5f5f5f 32 plan9 RCRB CL, 0(AX) -d218|11223344556677885f5f5f5f5f5f 64 gnu rcrb %cl,(%rax) -d218|11223344556677885f5f5f5f5f5f 64 intel rcr byte ptr [rax], cl -d218|11223344556677885f5f5f5f5f5f 64 plan9 RCRB CL, 0(AX) -d220|11223344556677885f5f5f5f5f5f 32 intel shl byte ptr [eax], cl -d220|11223344556677885f5f5f5f5f5f 32 plan9 SHLB CL, 0(AX) -d220|11223344556677885f5f5f5f5f5f 64 gnu shlb %cl,(%rax) -d220|11223344556677885f5f5f5f5f5f 64 intel shl byte ptr [rax], cl -d220|11223344556677885f5f5f5f5f5f 64 plan9 SHLB CL, 0(AX) -d228|11223344556677885f5f5f5f5f5f 32 intel shr byte ptr [eax], cl -d228|11223344556677885f5f5f5f5f5f 32 plan9 SHRB CL, 0(AX) -d228|11223344556677885f5f5f5f5f5f 64 gnu shrb %cl,(%rax) -d228|11223344556677885f5f5f5f5f5f 64 intel shr byte ptr [rax], cl -d228|11223344556677885f5f5f5f5f5f 64 plan9 SHRB CL, 0(AX) -d238|11223344556677885f5f5f5f5f5f 32 intel sar byte ptr [eax], cl -d238|11223344556677885f5f5f5f5f5f 32 plan9 SARB CL, 0(AX) -d238|11223344556677885f5f5f5f5f5f 64 gnu sarb %cl,(%rax) -d238|11223344556677885f5f5f5f5f5f 64 intel sar byte ptr [rax], cl -d238|11223344556677885f5f5f5f5f5f 64 plan9 SARB CL, 0(AX) -d300|11223344556677885f5f5f5f5f5f 32 intel rol dword ptr [eax], cl -d300|11223344556677885f5f5f5f5f5f 32 plan9 ROLL CL, 0(AX) -d300|11223344556677885f5f5f5f5f5f 64 gnu roll %cl,(%rax) -d300|11223344556677885f5f5f5f5f5f 64 intel rol dword ptr [rax], cl -d300|11223344556677885f5f5f5f5f5f 64 plan9 ROLL CL, 0(AX) -d308|11223344556677885f5f5f5f5f5f 32 intel ror dword ptr [eax], cl -d308|11223344556677885f5f5f5f5f5f 32 plan9 RORL CL, 0(AX) -d308|11223344556677885f5f5f5f5f5f 64 gnu rorl %cl,(%rax) -d308|11223344556677885f5f5f5f5f5f 64 intel ror dword ptr [rax], cl -d308|11223344556677885f5f5f5f5f5f 64 plan9 RORL CL, 0(AX) -d311|223344556677885f5f5f5f5f5f5f 32 intel rcl dword ptr [ecx], cl -d311|223344556677885f5f5f5f5f5f5f 32 plan9 RCLL CL, 0(CX) -d311|223344556677885f5f5f5f5f5f5f 64 gnu rcll %cl,(%rcx) -d311|223344556677885f5f5f5f5f5f5f 64 intel rcl dword ptr [rcx], cl -d311|223344556677885f5f5f5f5f5f5f 64 plan9 RCLL CL, 0(CX) -d318|11223344556677885f5f5f5f5f5f 32 intel rcr dword ptr [eax], cl -d318|11223344556677885f5f5f5f5f5f 32 plan9 RCRL CL, 0(AX) -d318|11223344556677885f5f5f5f5f5f 64 gnu rcrl %cl,(%rax) -d318|11223344556677885f5f5f5f5f5f 64 intel rcr dword ptr [rax], cl -d318|11223344556677885f5f5f5f5f5f 64 plan9 RCRL CL, 0(AX) -d320|11223344556677885f5f5f5f5f5f 32 intel shl dword ptr [eax], cl -d320|11223344556677885f5f5f5f5f5f 32 plan9 SHLL CL, 0(AX) -d320|11223344556677885f5f5f5f5f5f 64 gnu shll %cl,(%rax) -d320|11223344556677885f5f5f5f5f5f 64 intel shl dword ptr [rax], cl -d320|11223344556677885f5f5f5f5f5f 64 plan9 SHLL CL, 0(AX) -d328|11223344556677885f5f5f5f5f5f 32 intel shr dword ptr [eax], cl -d328|11223344556677885f5f5f5f5f5f 32 plan9 SHRL CL, 0(AX) -d328|11223344556677885f5f5f5f5f5f 64 gnu shrl %cl,(%rax) -d328|11223344556677885f5f5f5f5f5f 64 intel shr dword ptr [rax], cl -d328|11223344556677885f5f5f5f5f5f 64 plan9 SHRL CL, 0(AX) -d338|11223344556677885f5f5f5f5f5f 32 intel sar dword ptr [eax], cl -d338|11223344556677885f5f5f5f5f5f 32 plan9 SARL CL, 0(AX) -d338|11223344556677885f5f5f5f5f5f 64 gnu sarl %cl,(%rax) -d338|11223344556677885f5f5f5f5f5f 64 intel sar dword ptr [rax], cl -d338|11223344556677885f5f5f5f5f5f 64 plan9 SARL CL, 0(AX) -d511|223344556677885f5f5f5f5f5f5f 32 intel aad 0x11 -d511|223344556677885f5f5f5f5f5f5f 32 plan9 AAD $0x11 -d5|11223344556677885f5f5f5f5f5f5f 64 gnu error: unrecognized instruction -d5|11223344556677885f5f5f5f5f5f5f 64 intel error: unrecognized instruction -d5|11223344556677885f5f5f5f5f5f5f 64 plan9 error: unrecognized instruction -d800|11223344556677885f5f5f5f5f5f 32 intel fadd st0, dword ptr [eax] -d800|11223344556677885f5f5f5f5f5f 32 plan9 FADD 0(AX) -d800|11223344556677885f5f5f5f5f5f 64 gnu fadds (%rax) -d800|11223344556677885f5f5f5f5f5f 64 intel fadd st0, dword ptr [rax] -d800|11223344556677885f5f5f5f5f5f 64 plan9 FADD 0(AX) -d808|11223344556677885f5f5f5f5f5f 32 intel fmul st0, dword ptr [eax] -d808|11223344556677885f5f5f5f5f5f 32 plan9 FMUL 0(AX) -d808|11223344556677885f5f5f5f5f5f 64 gnu fmuls (%rax) -d808|11223344556677885f5f5f5f5f5f 64 intel fmul st0, dword ptr [rax] -d808|11223344556677885f5f5f5f5f5f 64 plan9 FMUL 0(AX) -d811|223344556677885f5f5f5f5f5f5f 32 intel fcom st0, dword ptr [ecx] -d811|223344556677885f5f5f5f5f5f5f 32 plan9 FCOM 0(CX) -d811|223344556677885f5f5f5f5f5f5f 64 gnu fcoms (%rcx) -d811|223344556677885f5f5f5f5f5f5f 64 intel fcom st0, dword ptr [rcx] -d811|223344556677885f5f5f5f5f5f5f 64 plan9 FCOM 0(CX) -d818|11223344556677885f5f5f5f5f5f 32 intel fcomp st0, dword ptr [eax] -d818|11223344556677885f5f5f5f5f5f 32 plan9 FCOMP 0(AX) -d818|11223344556677885f5f5f5f5f5f 64 gnu fcomps (%rax) -d818|11223344556677885f5f5f5f5f5f 64 intel fcomp st0, dword ptr [rax] -d818|11223344556677885f5f5f5f5f5f 64 plan9 FCOMP 0(AX) -d820|11223344556677885f5f5f5f5f5f 32 intel fsub st0, dword ptr [eax] -d820|11223344556677885f5f5f5f5f5f 32 plan9 FSUB 0(AX) -d820|11223344556677885f5f5f5f5f5f 64 gnu fsubs (%rax) -d820|11223344556677885f5f5f5f5f5f 64 intel fsub st0, dword ptr [rax] -d820|11223344556677885f5f5f5f5f5f 64 plan9 FSUB 0(AX) -d828|11223344556677885f5f5f5f5f5f 32 intel fsubr st0, dword ptr [eax] -d828|11223344556677885f5f5f5f5f5f 32 plan9 FSUBR 0(AX) -d828|11223344556677885f5f5f5f5f5f 64 gnu fsubrs (%rax) -d828|11223344556677885f5f5f5f5f5f 64 intel fsubr st0, dword ptr [rax] -d828|11223344556677885f5f5f5f5f5f 64 plan9 FSUBR 0(AX) -d830|11223344556677885f5f5f5f5f5f 32 intel fdiv st0, dword ptr [eax] -d830|11223344556677885f5f5f5f5f5f 32 plan9 FDIV 0(AX) -d830|11223344556677885f5f5f5f5f5f 64 gnu fdivs (%rax) -d830|11223344556677885f5f5f5f5f5f 64 intel fdiv st0, dword ptr [rax] -d830|11223344556677885f5f5f5f5f5f 64 plan9 FDIV 0(AX) -d838|11223344556677885f5f5f5f5f5f 32 intel fdivr st0, dword ptr [eax] -d838|11223344556677885f5f5f5f5f5f 32 plan9 FDIVR 0(AX) -d838|11223344556677885f5f5f5f5f5f 64 gnu fdivrs (%rax) -d838|11223344556677885f5f5f5f5f5f 64 intel fdivr st0, dword ptr [rax] -d838|11223344556677885f5f5f5f5f5f 64 plan9 FDIVR 0(AX) -d8c0|11223344556677885f5f5f5f5f5f 32 intel fadd st0, st0 -d8c0|11223344556677885f5f5f5f5f5f 32 plan9 FADD F0, F0 -d8c0|11223344556677885f5f5f5f5f5f 64 gnu fadd %st,%st -d8c0|11223344556677885f5f5f5f5f5f 64 intel fadd st0, st0 -d8c0|11223344556677885f5f5f5f5f5f 64 plan9 FADD F0, F0 -d8c8|11223344556677885f5f5f5f5f5f 32 intel fmul st0, st0 -d8c8|11223344556677885f5f5f5f5f5f 32 plan9 FMUL F0, F0 -d8c8|11223344556677885f5f5f5f5f5f 64 gnu fmul %st,%st -d8c8|11223344556677885f5f5f5f5f5f 64 intel fmul st0, st0 -d8c8|11223344556677885f5f5f5f5f5f 64 plan9 FMUL F0, F0 -d8d0|11223344556677885f5f5f5f5f5f 32 intel fcom st0, st0 -d8d0|11223344556677885f5f5f5f5f5f 32 plan9 FCOM F0 -d8d0|11223344556677885f5f5f5f5f5f 64 gnu fcom %st -d8d0|11223344556677885f5f5f5f5f5f 64 intel fcom st0, st0 -d8d0|11223344556677885f5f5f5f5f5f 64 plan9 FCOM F0 -d8d8|11223344556677885f5f5f5f5f5f 32 intel fcomp st0, st0 -d8d8|11223344556677885f5f5f5f5f5f 32 plan9 FCOMP F0 -d8d8|11223344556677885f5f5f5f5f5f 64 gnu fcomp %st -d8d8|11223344556677885f5f5f5f5f5f 64 intel fcomp st0, st0 -d8d8|11223344556677885f5f5f5f5f5f 64 plan9 FCOMP F0 -d8e0|11223344556677885f5f5f5f5f5f 32 intel fsub st0, st0 -d8e0|11223344556677885f5f5f5f5f5f 32 plan9 FSUB F0, F0 -d8e0|11223344556677885f5f5f5f5f5f 64 gnu fsub %st,%st -d8e0|11223344556677885f5f5f5f5f5f 64 intel fsub st0, st0 -d8e0|11223344556677885f5f5f5f5f5f 64 plan9 FSUB F0, F0 -d8e8|11223344556677885f5f5f5f5f5f 32 intel fsubr st0, st0 -d8e8|11223344556677885f5f5f5f5f5f 32 plan9 FSUBR F0, F0 -d8e8|11223344556677885f5f5f5f5f5f 64 gnu fsubr %st,%st -d8e8|11223344556677885f5f5f5f5f5f 64 intel fsubr st0, st0 -d8e8|11223344556677885f5f5f5f5f5f 64 plan9 FSUBR F0, F0 -d8f0|11223344556677885f5f5f5f5f5f 32 intel fdiv st0, st0 -d8f0|11223344556677885f5f5f5f5f5f 32 plan9 FDIV F0, F0 -d8f0|11223344556677885f5f5f5f5f5f 64 gnu fdiv %st,%st -d8f0|11223344556677885f5f5f5f5f5f 64 intel fdiv st0, st0 -d8f0|11223344556677885f5f5f5f5f5f 64 plan9 FDIV F0, F0 -d8f8|11223344556677885f5f5f5f5f5f 32 intel fdivr st0, st0 -d8f8|11223344556677885f5f5f5f5f5f 32 plan9 FDIVR F0, F0 -d8f8|11223344556677885f5f5f5f5f5f 64 gnu fdivr %st,%st -d8f8|11223344556677885f5f5f5f5f5f 64 intel fdivr st0, st0 -d8f8|11223344556677885f5f5f5f5f5f 64 plan9 FDIVR F0, F0 -d900|11223344556677885f5f5f5f5f5f 32 intel fld st0, dword ptr [eax] -d900|11223344556677885f5f5f5f5f5f 32 plan9 FLD 0(AX) -d900|11223344556677885f5f5f5f5f5f 64 gnu flds (%rax) -d900|11223344556677885f5f5f5f5f5f 64 intel fld st0, dword ptr [rax] -d900|11223344556677885f5f5f5f5f5f 64 plan9 FLD 0(AX) -d911|223344556677885f5f5f5f5f5f5f 32 intel fst dword ptr [ecx], st0 -d911|223344556677885f5f5f5f5f5f5f 32 plan9 FST 0(CX) -d911|223344556677885f5f5f5f5f5f5f 64 gnu fsts (%rcx) -d911|223344556677885f5f5f5f5f5f5f 64 intel fst dword ptr [rcx], st0 -d911|223344556677885f5f5f5f5f5f5f 64 plan9 FST 0(CX) -d918|11223344556677885f5f5f5f5f5f 32 intel fstp dword ptr [eax], st0 -d918|11223344556677885f5f5f5f5f5f 32 plan9 FSTP 0(AX) -d918|11223344556677885f5f5f5f5f5f 64 gnu fstps (%rax) -d918|11223344556677885f5f5f5f5f5f 64 intel fstp dword ptr [rax], st0 -d918|11223344556677885f5f5f5f5f5f 64 plan9 FSTP 0(AX) -d928|11223344556677885f5f5f5f5f5f 32 intel fldcw word ptr [eax] -d928|11223344556677885f5f5f5f5f5f 32 plan9 FLDCW 0(AX) -d928|11223344556677885f5f5f5f5f5f 64 gnu fldcw (%rax) -d928|11223344556677885f5f5f5f5f5f 64 intel fldcw word ptr [rax] -d928|11223344556677885f5f5f5f5f5f 64 plan9 FLDCW 0(AX) -d930|11223344556677885f5f5f5f5f5f 32 intel fnstenv ptr [eax] -d930|11223344556677885f5f5f5f5f5f 32 plan9 FNSTENV 0(AX) -d930|11223344556677885f5f5f5f5f5f 64 gnu fnstenv (%rax) -d930|11223344556677885f5f5f5f5f5f 64 intel fnstenv ptr [rax] -d930|11223344556677885f5f5f5f5f5f 64 plan9 FNSTENV 0(AX) -d938|11223344556677885f5f5f5f5f5f 32 intel fnstcw word ptr [eax] -d938|11223344556677885f5f5f5f5f5f 32 plan9 FNSTCW 0(AX) -d938|11223344556677885f5f5f5f5f5f 64 gnu fnstcw (%rax) -d938|11223344556677885f5f5f5f5f5f 64 intel fnstcw word ptr [rax] -d938|11223344556677885f5f5f5f5f5f 64 plan9 FNSTCW 0(AX) -d9c0|11223344556677885f5f5f5f5f5f 32 intel fld st0, st0 -d9c0|11223344556677885f5f5f5f5f5f 32 plan9 FLD F0 -d9c0|11223344556677885f5f5f5f5f5f 64 gnu fld %st -d9c0|11223344556677885f5f5f5f5f5f 64 intel fld st0, st0 -d9c0|11223344556677885f5f5f5f5f5f 64 plan9 FLD F0 -d9c8|11223344556677885f5f5f5f5f5f 32 intel fxch st0, st0 -d9c8|11223344556677885f5f5f5f5f5f 32 plan9 FXCH F0 -d9c8|11223344556677885f5f5f5f5f5f 64 gnu fxch %st -d9c8|11223344556677885f5f5f5f5f5f 64 intel fxch st0, st0 -d9c8|11223344556677885f5f5f5f5f5f 64 plan9 FXCH F0 -d9d0|11223344556677885f5f5f5f5f5f 32 intel fnop -d9d0|11223344556677885f5f5f5f5f5f 32 plan9 FNOP -d9d0|11223344556677885f5f5f5f5f5f 64 gnu fnop -d9d0|11223344556677885f5f5f5f5f5f 64 intel fnop -d9d0|11223344556677885f5f5f5f5f5f 64 plan9 FNOP -d9e0|11223344556677885f5f5f5f5f5f 32 intel fchs st0 -d9e0|11223344556677885f5f5f5f5f5f 32 plan9 FCHS -d9e0|11223344556677885f5f5f5f5f5f 64 gnu fchs -d9e0|11223344556677885f5f5f5f5f5f 64 intel fchs st0 -d9e0|11223344556677885f5f5f5f5f5f 64 plan9 FCHS -d9e1|11223344556677885f5f5f5f5f5f 32 intel fabs st0 -d9e1|11223344556677885f5f5f5f5f5f 32 plan9 FABS -d9e1|11223344556677885f5f5f5f5f5f 64 gnu fabs -d9e1|11223344556677885f5f5f5f5f5f 64 intel fabs st0 -d9e1|11223344556677885f5f5f5f5f5f 64 plan9 FABS -d9e4|11223344556677885f5f5f5f5f5f 32 intel ftst st0 -d9e4|11223344556677885f5f5f5f5f5f 32 plan9 FTST -d9e4|11223344556677885f5f5f5f5f5f 64 gnu ftst -d9e4|11223344556677885f5f5f5f5f5f 64 intel ftst st0 -d9e4|11223344556677885f5f5f5f5f5f 64 plan9 FTST -d9e5|11223344556677885f5f5f5f5f5f 32 intel fxam st0 -d9e5|11223344556677885f5f5f5f5f5f 32 plan9 FXAM -d9e5|11223344556677885f5f5f5f5f5f 64 gnu fxam -d9e5|11223344556677885f5f5f5f5f5f 64 intel fxam st0 -d9e5|11223344556677885f5f5f5f5f5f 64 plan9 FXAM -d9e8|11223344556677885f5f5f5f5f5f 32 intel fld1 st0 -d9e8|11223344556677885f5f5f5f5f5f 32 plan9 FLD1 -d9e8|11223344556677885f5f5f5f5f5f 64 gnu fld1 -d9e8|11223344556677885f5f5f5f5f5f 64 intel fld1 st0 -d9e8|11223344556677885f5f5f5f5f5f 64 plan9 FLD1 -d9e9|11223344556677885f5f5f5f5f5f 32 intel fldl2t st0 -d9e9|11223344556677885f5f5f5f5f5f 32 plan9 FLDL2T -d9e9|11223344556677885f5f5f5f5f5f 64 gnu fldl2t -d9e9|11223344556677885f5f5f5f5f5f 64 intel fldl2t st0 -d9e9|11223344556677885f5f5f5f5f5f 64 plan9 FLDL2T -d9ea|11223344556677885f5f5f5f5f5f 32 intel fldl2e st0 -d9ea|11223344556677885f5f5f5f5f5f 32 plan9 FLDL2E -d9ea|11223344556677885f5f5f5f5f5f 64 gnu fldl2e -d9ea|11223344556677885f5f5f5f5f5f 64 intel fldl2e st0 -d9ea|11223344556677885f5f5f5f5f5f 64 plan9 FLDL2E -d9eb|11223344556677885f5f5f5f5f5f 32 intel fldpi st0 -d9eb|11223344556677885f5f5f5f5f5f 32 plan9 FLDPI -d9eb|11223344556677885f5f5f5f5f5f 64 gnu fldpi -d9eb|11223344556677885f5f5f5f5f5f 64 intel fldpi st0 -d9eb|11223344556677885f5f5f5f5f5f 64 plan9 FLDPI -d9ec|11223344556677885f5f5f5f5f5f 32 intel fldlg2 st0 -d9ec|11223344556677885f5f5f5f5f5f 32 plan9 FLDLG2 -d9ec|11223344556677885f5f5f5f5f5f 64 gnu fldlg2 -d9ec|11223344556677885f5f5f5f5f5f 64 intel fldlg2 st0 -d9ec|11223344556677885f5f5f5f5f5f 64 plan9 FLDLG2 -d9f0|11223344556677885f5f5f5f5f5f 32 intel f2xm1 st0 -d9f0|11223344556677885f5f5f5f5f5f 32 plan9 F2XM1 -d9f0|11223344556677885f5f5f5f5f5f 64 gnu f2xm1 -d9f0|11223344556677885f5f5f5f5f5f 64 intel f2xm1 st0 -d9f0|11223344556677885f5f5f5f5f5f 64 plan9 F2XM1 -d9f1|11223344556677885f5f5f5f5f5f 32 intel fyl2x st0, st1 -d9f1|11223344556677885f5f5f5f5f5f 32 plan9 FYL2X -d9f1|11223344556677885f5f5f5f5f5f 64 gnu fyl2x -d9f1|11223344556677885f5f5f5f5f5f 64 intel fyl2x st0, st1 -d9f1|11223344556677885f5f5f5f5f5f 64 plan9 FYL2X -d9f2|11223344556677885f5f5f5f5f5f 32 intel fptan st0, st1 -d9f2|11223344556677885f5f5f5f5f5f 32 plan9 FPTAN -d9f2|11223344556677885f5f5f5f5f5f 64 gnu fptan -d9f2|11223344556677885f5f5f5f5f5f 64 intel fptan st0, st1 -d9f2|11223344556677885f5f5f5f5f5f 64 plan9 FPTAN -d9f3|11223344556677885f5f5f5f5f5f 32 intel fpatan st0, st1 -d9f3|11223344556677885f5f5f5f5f5f 32 plan9 FPATAN -d9f3|11223344556677885f5f5f5f5f5f 64 gnu fpatan -d9f3|11223344556677885f5f5f5f5f5f 64 intel fpatan st0, st1 -d9f3|11223344556677885f5f5f5f5f5f 64 plan9 FPATAN -d9f4|11223344556677885f5f5f5f5f5f 32 intel fxtract st0, st1 -d9f4|11223344556677885f5f5f5f5f5f 32 plan9 FXTRACT -d9f4|11223344556677885f5f5f5f5f5f 64 gnu fxtract -d9f4|11223344556677885f5f5f5f5f5f 64 intel fxtract st0, st1 -d9f4|11223344556677885f5f5f5f5f5f 64 plan9 FXTRACT -d9f5|11223344556677885f5f5f5f5f5f 32 intel fprem1 st0, st1 -d9f5|11223344556677885f5f5f5f5f5f 32 plan9 FPREM1 -d9f5|11223344556677885f5f5f5f5f5f 64 gnu fprem1 -d9f5|11223344556677885f5f5f5f5f5f 64 intel fprem1 st0, st1 -d9f5|11223344556677885f5f5f5f5f5f 64 plan9 FPREM1 -d9f6|11223344556677885f5f5f5f5f5f 32 intel fdecstp -d9f6|11223344556677885f5f5f5f5f5f 32 plan9 FDECSTP -d9f6|11223344556677885f5f5f5f5f5f 64 gnu fdecstp -d9f6|11223344556677885f5f5f5f5f5f 64 intel fdecstp -d9f6|11223344556677885f5f5f5f5f5f 64 plan9 FDECSTP -d9f7|11223344556677885f5f5f5f5f5f 32 intel fincstp -d9f7|11223344556677885f5f5f5f5f5f 32 plan9 FINCSTP -d9f7|11223344556677885f5f5f5f5f5f 64 gnu fincstp -d9f7|11223344556677885f5f5f5f5f5f 64 intel fincstp -d9f7|11223344556677885f5f5f5f5f5f 64 plan9 FINCSTP -d9f8|11223344556677885f5f5f5f5f5f 32 intel fprem st0, st1 -d9f8|11223344556677885f5f5f5f5f5f 32 plan9 FPREM -d9f8|11223344556677885f5f5f5f5f5f 64 gnu fprem -d9f8|11223344556677885f5f5f5f5f5f 64 intel fprem st0, st1 -d9f8|11223344556677885f5f5f5f5f5f 64 plan9 FPREM -d9f9|11223344556677885f5f5f5f5f5f 32 intel fyl2xp1 st0, st1 -d9f9|11223344556677885f5f5f5f5f5f 32 plan9 FYL2XP1 -d9f9|11223344556677885f5f5f5f5f5f 64 gnu fyl2xp1 -d9f9|11223344556677885f5f5f5f5f5f 64 intel fyl2xp1 st0, st1 -d9f9|11223344556677885f5f5f5f5f5f 64 plan9 FYL2XP1 -d9fa|11223344556677885f5f5f5f5f5f 32 intel fsqrt st0 -d9fa|11223344556677885f5f5f5f5f5f 32 plan9 FSQRT -d9fa|11223344556677885f5f5f5f5f5f 64 gnu fsqrt -d9fa|11223344556677885f5f5f5f5f5f 64 intel fsqrt st0 -d9fa|11223344556677885f5f5f5f5f5f 64 plan9 FSQRT -d9fb|11223344556677885f5f5f5f5f5f 32 intel fsincos st0, st1 -d9fb|11223344556677885f5f5f5f5f5f 32 plan9 FSINCOS -d9fb|11223344556677885f5f5f5f5f5f 64 gnu fsincos -d9fb|11223344556677885f5f5f5f5f5f 64 intel fsincos st0, st1 -d9fb|11223344556677885f5f5f5f5f5f 64 plan9 FSINCOS -d9fc|11223344556677885f5f5f5f5f5f 32 intel frndint st0 -d9fc|11223344556677885f5f5f5f5f5f 32 plan9 FRNDINT -d9fc|11223344556677885f5f5f5f5f5f 64 gnu frndint -d9fc|11223344556677885f5f5f5f5f5f 64 intel frndint st0 -d9fc|11223344556677885f5f5f5f5f5f 64 plan9 FRNDINT -d9fd|11223344556677885f5f5f5f5f5f 32 intel fscale st0, st1 -d9fd|11223344556677885f5f5f5f5f5f 32 plan9 FSCALE -d9fd|11223344556677885f5f5f5f5f5f 64 gnu fscale -d9fd|11223344556677885f5f5f5f5f5f 64 intel fscale st0, st1 -d9fd|11223344556677885f5f5f5f5f5f 64 plan9 FSCALE -d9fe|11223344556677885f5f5f5f5f5f 32 intel fsin st0 -d9fe|11223344556677885f5f5f5f5f5f 32 plan9 FSIN -d9fe|11223344556677885f5f5f5f5f5f 64 gnu fsin -d9fe|11223344556677885f5f5f5f5f5f 64 intel fsin st0 -d9fe|11223344556677885f5f5f5f5f5f 64 plan9 FSIN -d9ff|11223344556677885f5f5f5f5f5f 32 intel fcos st0 -d9ff|11223344556677885f5f5f5f5f5f 32 plan9 FCOS -d9ff|11223344556677885f5f5f5f5f5f 64 gnu fcos -d9ff|11223344556677885f5f5f5f5f5f 64 intel fcos st0 -d9ff|11223344556677885f5f5f5f5f5f 64 plan9 FCOS -da00|11223344556677885f5f5f5f5f5f 32 intel fiadd st0, dword ptr [eax] -da00|11223344556677885f5f5f5f5f5f 32 plan9 FIADD 0(AX) -da00|11223344556677885f5f5f5f5f5f 64 gnu fiaddl (%rax) -da00|11223344556677885f5f5f5f5f5f 64 intel fiadd st0, dword ptr [rax] -da00|11223344556677885f5f5f5f5f5f 64 plan9 FIADD 0(AX) -da08|11223344556677885f5f5f5f5f5f 32 intel fimul st0, dword ptr [eax] -da08|11223344556677885f5f5f5f5f5f 32 plan9 FIMUL 0(AX) -da08|11223344556677885f5f5f5f5f5f 64 gnu fimull (%rax) -da08|11223344556677885f5f5f5f5f5f 64 intel fimul st0, dword ptr [rax] -da08|11223344556677885f5f5f5f5f5f 64 plan9 FIMUL 0(AX) -da11|223344556677885f5f5f5f5f5f5f 32 intel ficom st0, dword ptr [ecx] -da11|223344556677885f5f5f5f5f5f5f 32 plan9 FICOM 0(CX) -da11|223344556677885f5f5f5f5f5f5f 64 gnu ficoml (%rcx) -da11|223344556677885f5f5f5f5f5f5f 64 intel ficom st0, dword ptr [rcx] -da11|223344556677885f5f5f5f5f5f5f 64 plan9 FICOM 0(CX) -da18|11223344556677885f5f5f5f5f5f 32 intel ficomp st0, dword ptr [eax] -da18|11223344556677885f5f5f5f5f5f 32 plan9 FICOMP 0(AX) -da18|11223344556677885f5f5f5f5f5f 64 gnu ficompl (%rax) -da18|11223344556677885f5f5f5f5f5f 64 intel ficomp st0, dword ptr [rax] -da18|11223344556677885f5f5f5f5f5f 64 plan9 FICOMP 0(AX) -da20|11223344556677885f5f5f5f5f5f 32 intel fisub st0, dword ptr [eax] -da20|11223344556677885f5f5f5f5f5f 32 plan9 FISUB 0(AX) -da20|11223344556677885f5f5f5f5f5f 64 gnu fisubl (%rax) -da20|11223344556677885f5f5f5f5f5f 64 intel fisub st0, dword ptr [rax] -da20|11223344556677885f5f5f5f5f5f 64 plan9 FISUB 0(AX) -da28|11223344556677885f5f5f5f5f5f 32 intel fisubr st0, dword ptr [eax] -da28|11223344556677885f5f5f5f5f5f 32 plan9 FISUBR 0(AX) -da28|11223344556677885f5f5f5f5f5f 64 gnu fisubrl (%rax) -da28|11223344556677885f5f5f5f5f5f 64 intel fisubr st0, dword ptr [rax] -da28|11223344556677885f5f5f5f5f5f 64 plan9 FISUBR 0(AX) -da30|11223344556677885f5f5f5f5f5f 32 intel fidiv st0, dword ptr [eax] -da30|11223344556677885f5f5f5f5f5f 32 plan9 FIDIV 0(AX) -da30|11223344556677885f5f5f5f5f5f 64 gnu fidivl (%rax) -da30|11223344556677885f5f5f5f5f5f 64 intel fidiv st0, dword ptr [rax] -da30|11223344556677885f5f5f5f5f5f 64 plan9 FIDIV 0(AX) -da38|11223344556677885f5f5f5f5f5f 32 intel fidivr st0, dword ptr [eax] -da38|11223344556677885f5f5f5f5f5f 32 plan9 FIDIVR 0(AX) -da38|11223344556677885f5f5f5f5f5f 64 gnu fidivrl (%rax) -da38|11223344556677885f5f5f5f5f5f 64 intel fidivr st0, dword ptr [rax] -da38|11223344556677885f5f5f5f5f5f 64 plan9 FIDIVR 0(AX) -dac0|11223344556677885f5f5f5f5f5f 32 intel fcmovb st0, st0 -dac0|11223344556677885f5f5f5f5f5f 32 plan9 FCMOVB F0, F0 -dac0|11223344556677885f5f5f5f5f5f 64 gnu fcmovb %st,%st -dac0|11223344556677885f5f5f5f5f5f 64 intel fcmovb st0, st0 -dac0|11223344556677885f5f5f5f5f5f 64 plan9 FCMOVB F0, F0 -dac8|11223344556677885f5f5f5f5f5f 32 intel fcmove st0, st0 -dac8|11223344556677885f5f5f5f5f5f 32 plan9 FCMOVE F0, F0 -dac8|11223344556677885f5f5f5f5f5f 64 gnu fcmove %st,%st -dac8|11223344556677885f5f5f5f5f5f 64 intel fcmove st0, st0 -dac8|11223344556677885f5f5f5f5f5f 64 plan9 FCMOVE F0, F0 -dad0|11223344556677885f5f5f5f5f5f 32 intel fcmovbe st0, st0 -dad0|11223344556677885f5f5f5f5f5f 32 plan9 FCMOVBE F0, F0 -dad0|11223344556677885f5f5f5f5f5f 64 gnu fcmovbe %st,%st -dad0|11223344556677885f5f5f5f5f5f 64 intel fcmovbe st0, st0 -dad0|11223344556677885f5f5f5f5f5f 64 plan9 FCMOVBE F0, F0 -dad8|11223344556677885f5f5f5f5f5f 32 intel fcmovu st0, st0 -dad8|11223344556677885f5f5f5f5f5f 32 plan9 FCMOVU F0, F0 -dad8|11223344556677885f5f5f5f5f5f 64 gnu fcmovu %st,%st -dad8|11223344556677885f5f5f5f5f5f 64 intel fcmovu st0, st0 -dad8|11223344556677885f5f5f5f5f5f 64 plan9 FCMOVU F0, F0 -dae9|11223344556677885f5f5f5f5f5f 32 intel fucompp st0, st1 -dae9|11223344556677885f5f5f5f5f5f 32 plan9 FUCOMPP -dae9|11223344556677885f5f5f5f5f5f 64 gnu fucompp -dae9|11223344556677885f5f5f5f5f5f 64 intel fucompp st0, st1 -dae9|11223344556677885f5f5f5f5f5f 64 plan9 FUCOMPP -db00|11223344556677885f5f5f5f5f5f 32 intel fild st0, dword ptr [eax] -db00|11223344556677885f5f5f5f5f5f 32 plan9 FILD 0(AX) -db00|11223344556677885f5f5f5f5f5f 64 gnu fildl (%rax) -db00|11223344556677885f5f5f5f5f5f 64 intel fild st0, dword ptr [rax] -db00|11223344556677885f5f5f5f5f5f 64 plan9 FILD 0(AX) -db08|11223344556677885f5f5f5f5f5f 32 intel fisttp dword ptr [eax], st0 -db08|11223344556677885f5f5f5f5f5f 32 plan9 FISTTP 0(AX) -db08|11223344556677885f5f5f5f5f5f 64 gnu fisttpl (%rax) -db08|11223344556677885f5f5f5f5f5f 64 intel fisttp dword ptr [rax], st0 -db08|11223344556677885f5f5f5f5f5f 64 plan9 FISTTP 0(AX) -db11|223344556677885f5f5f5f5f5f5f 32 intel fist dword ptr [ecx], st0 -db11|223344556677885f5f5f5f5f5f5f 32 plan9 FIST 0(CX) -db11|223344556677885f5f5f5f5f5f5f 64 gnu fistl (%rcx) -db11|223344556677885f5f5f5f5f5f5f 64 intel fist dword ptr [rcx], st0 -db11|223344556677885f5f5f5f5f5f5f 64 plan9 FIST 0(CX) -db18|11223344556677885f5f5f5f5f5f 32 intel fistp dword ptr [eax], st0 -db18|11223344556677885f5f5f5f5f5f 32 plan9 FISTP 0(AX) -db18|11223344556677885f5f5f5f5f5f 64 gnu fistpl (%rax) -db18|11223344556677885f5f5f5f5f5f 64 intel fistp dword ptr [rax], st0 -db18|11223344556677885f5f5f5f5f5f 64 plan9 FISTP 0(AX) -db28|11223344556677885f5f5f5f5f5f 32 intel fld st0, ptr [eax] -db28|11223344556677885f5f5f5f5f5f 32 plan9 FLD 0(AX) -db28|11223344556677885f5f5f5f5f5f 64 gnu fldt (%rax) -db28|11223344556677885f5f5f5f5f5f 64 intel fld st0, ptr [rax] -db28|11223344556677885f5f5f5f5f5f 64 plan9 FLD 0(AX) -db38|11223344556677885f5f5f5f5f5f 32 intel fstp ptr [eax], st0 -db38|11223344556677885f5f5f5f5f5f 32 plan9 FSTP 0(AX) -db38|11223344556677885f5f5f5f5f5f 64 gnu fstpt (%rax) -db38|11223344556677885f5f5f5f5f5f 64 intel fstp ptr [rax], st0 -db38|11223344556677885f5f5f5f5f5f 64 plan9 FSTP 0(AX) -dbc0|11223344556677885f5f5f5f5f5f 32 intel fcmovnb st0, st0 -dbc0|11223344556677885f5f5f5f5f5f 32 plan9 FCMOVNB F0, F0 -dbc0|11223344556677885f5f5f5f5f5f 64 gnu fcmovnb %st,%st -dbc0|11223344556677885f5f5f5f5f5f 64 intel fcmovnb st0, st0 -dbc0|11223344556677885f5f5f5f5f5f 64 plan9 FCMOVNB F0, F0 -dbc8|11223344556677885f5f5f5f5f5f 32 intel fcmovne st0, st0 -dbc8|11223344556677885f5f5f5f5f5f 32 plan9 FCMOVNE F0, F0 -dbc8|11223344556677885f5f5f5f5f5f 64 gnu fcmovne %st,%st -dbc8|11223344556677885f5f5f5f5f5f 64 intel fcmovne st0, st0 -dbc8|11223344556677885f5f5f5f5f5f 64 plan9 FCMOVNE F0, F0 -dbd0|11223344556677885f5f5f5f5f5f 32 intel fcmovnbe st0, st0 -dbd0|11223344556677885f5f5f5f5f5f 32 plan9 FCMOVNBE F0, F0 -dbd0|11223344556677885f5f5f5f5f5f 64 gnu fcmovnbe %st,%st -dbd0|11223344556677885f5f5f5f5f5f 64 intel fcmovnbe st0, st0 -dbd0|11223344556677885f5f5f5f5f5f 64 plan9 FCMOVNBE F0, F0 -dbd8|11223344556677885f5f5f5f5f5f 32 intel fcmovnu st0, st0 -dbd8|11223344556677885f5f5f5f5f5f 32 plan9 FCMOVNU F0, F0 -dbd8|11223344556677885f5f5f5f5f5f 64 gnu fcmovnu %st,%st -dbd8|11223344556677885f5f5f5f5f5f 64 intel fcmovnu st0, st0 -dbd8|11223344556677885f5f5f5f5f5f 64 plan9 FCMOVNU F0, F0 -dbe2|11223344556677885f5f5f5f5f5f 32 intel fnclex -dbe2|11223344556677885f5f5f5f5f5f 32 plan9 FNCLEX -dbe2|11223344556677885f5f5f5f5f5f 64 gnu fnclex -dbe2|11223344556677885f5f5f5f5f5f 64 intel fnclex -dbe2|11223344556677885f5f5f5f5f5f 64 plan9 FNCLEX -dbe3|11223344556677885f5f5f5f5f5f 32 intel fninit -dbe3|11223344556677885f5f5f5f5f5f 32 plan9 FNINIT -dbe3|11223344556677885f5f5f5f5f5f 64 gnu fninit -dbe3|11223344556677885f5f5f5f5f5f 64 intel fninit -dbe3|11223344556677885f5f5f5f5f5f 64 plan9 FNINIT -dbe8|11223344556677885f5f5f5f5f5f 32 intel fucomi st0, st0 -dbe8|11223344556677885f5f5f5f5f5f 32 plan9 FUCOMI F0, F0 -dbe8|11223344556677885f5f5f5f5f5f 64 gnu fucomi %st,%st -dbe8|11223344556677885f5f5f5f5f5f 64 intel fucomi st0, st0 -dbe8|11223344556677885f5f5f5f5f5f 64 plan9 FUCOMI F0, F0 -dbf0|11223344556677885f5f5f5f5f5f 32 intel fcomi st0, st0 -dbf0|11223344556677885f5f5f5f5f5f 32 plan9 FCOMI F0, F0 -dbf0|11223344556677885f5f5f5f5f5f 64 gnu fcomi %st,%st -dbf0|11223344556677885f5f5f5f5f5f 64 intel fcomi st0, st0 -dbf0|11223344556677885f5f5f5f5f5f 64 plan9 FCOMI F0, F0 -dc00|11223344556677885f5f5f5f5f5f 32 intel fadd st0, qword ptr [eax] -dc00|11223344556677885f5f5f5f5f5f 32 plan9 FADD 0(AX) -dc00|11223344556677885f5f5f5f5f5f 64 gnu faddl (%rax) -dc00|11223344556677885f5f5f5f5f5f 64 intel fadd st0, qword ptr [rax] -dc00|11223344556677885f5f5f5f5f5f 64 plan9 FADD 0(AX) -dc08|11223344556677885f5f5f5f5f5f 32 intel fmul st0, qword ptr [eax] -dc08|11223344556677885f5f5f5f5f5f 32 plan9 FMUL 0(AX) -dc08|11223344556677885f5f5f5f5f5f 64 gnu fmull (%rax) -dc08|11223344556677885f5f5f5f5f5f 64 intel fmul st0, qword ptr [rax] -dc08|11223344556677885f5f5f5f5f5f 64 plan9 FMUL 0(AX) -dc11|223344556677885f5f5f5f5f5f5f 32 intel fcom st0, qword ptr [ecx] -dc11|223344556677885f5f5f5f5f5f5f 32 plan9 FCOM 0(CX) -dc11|223344556677885f5f5f5f5f5f5f 64 gnu fcoml (%rcx) -dc11|223344556677885f5f5f5f5f5f5f 64 intel fcom st0, qword ptr [rcx] -dc11|223344556677885f5f5f5f5f5f5f 64 plan9 FCOM 0(CX) -dc18|11223344556677885f5f5f5f5f5f 32 intel fcomp st0, qword ptr [eax] -dc18|11223344556677885f5f5f5f5f5f 32 plan9 FCOMP 0(AX) -dc18|11223344556677885f5f5f5f5f5f 64 gnu fcompl (%rax) -dc18|11223344556677885f5f5f5f5f5f 64 intel fcomp st0, qword ptr [rax] -dc18|11223344556677885f5f5f5f5f5f 64 plan9 FCOMP 0(AX) -dc20|11223344556677885f5f5f5f5f5f 32 intel fsub st0, qword ptr [eax] -dc20|11223344556677885f5f5f5f5f5f 32 plan9 FSUB 0(AX) -dc20|11223344556677885f5f5f5f5f5f 64 gnu fsubl (%rax) -dc20|11223344556677885f5f5f5f5f5f 64 intel fsub st0, qword ptr [rax] -dc20|11223344556677885f5f5f5f5f5f 64 plan9 FSUB 0(AX) -dc28|11223344556677885f5f5f5f5f5f 32 intel fsubr st0, qword ptr [eax] -dc28|11223344556677885f5f5f5f5f5f 32 plan9 FSUBR 0(AX) -dc28|11223344556677885f5f5f5f5f5f 64 gnu fsubrl (%rax) -dc28|11223344556677885f5f5f5f5f5f 64 intel fsubr st0, qword ptr [rax] -dc28|11223344556677885f5f5f5f5f5f 64 plan9 FSUBR 0(AX) -dc30|11223344556677885f5f5f5f5f5f 32 intel fdiv st0, qword ptr [eax] -dc30|11223344556677885f5f5f5f5f5f 32 plan9 FDIV 0(AX) -dc30|11223344556677885f5f5f5f5f5f 64 gnu fdivl (%rax) -dc30|11223344556677885f5f5f5f5f5f 64 intel fdiv st0, qword ptr [rax] -dc30|11223344556677885f5f5f5f5f5f 64 plan9 FDIV 0(AX) -dc38|11223344556677885f5f5f5f5f5f 32 intel fdivr st0, qword ptr [eax] -dc38|11223344556677885f5f5f5f5f5f 32 plan9 FDIVR 0(AX) -dc38|11223344556677885f5f5f5f5f5f 64 gnu fdivrl (%rax) -dc38|11223344556677885f5f5f5f5f5f 64 intel fdivr st0, qword ptr [rax] -dc38|11223344556677885f5f5f5f5f5f 64 plan9 FDIVR 0(AX) -dcc0|11223344556677885f5f5f5f5f5f 32 intel fadd st0, st0 -dcc0|11223344556677885f5f5f5f5f5f 32 plan9 FADD F0, F0 -dcc0|11223344556677885f5f5f5f5f5f 64 gnu fadd %st,%st -dcc0|11223344556677885f5f5f5f5f5f 64 intel fadd st0, st0 -dcc0|11223344556677885f5f5f5f5f5f 64 plan9 FADD F0, F0 -dcc8|11223344556677885f5f5f5f5f5f 32 intel fmul st0, st0 -dcc8|11223344556677885f5f5f5f5f5f 32 plan9 FMUL F0, F0 -dcc8|11223344556677885f5f5f5f5f5f 64 gnu fmul %st,%st -dcc8|11223344556677885f5f5f5f5f5f 64 intel fmul st0, st0 -dcc8|11223344556677885f5f5f5f5f5f 64 plan9 FMUL F0, F0 -dce0|11223344556677885f5f5f5f5f5f 32 intel fsubr st0, st0 -dce0|11223344556677885f5f5f5f5f5f 32 plan9 FSUBR F0, F0 -dce0|11223344556677885f5f5f5f5f5f 64 gnu fsub %st,%st -dce0|11223344556677885f5f5f5f5f5f 64 intel fsubr st0, st0 -dce0|11223344556677885f5f5f5f5f5f 64 plan9 FSUBR F0, F0 -dce8|11223344556677885f5f5f5f5f5f 32 intel fsub st0, st0 -dce8|11223344556677885f5f5f5f5f5f 32 plan9 FSUB F0, F0 -dce8|11223344556677885f5f5f5f5f5f 64 gnu fsubr %st,%st -dce8|11223344556677885f5f5f5f5f5f 64 intel fsub st0, st0 -dce8|11223344556677885f5f5f5f5f5f 64 plan9 FSUB F0, F0 -dcf0|11223344556677885f5f5f5f5f5f 32 intel fdivr st0, st0 -dcf0|11223344556677885f5f5f5f5f5f 32 plan9 FDIVR F0, F0 -dcf0|11223344556677885f5f5f5f5f5f 64 gnu fdiv %st,%st -dcf0|11223344556677885f5f5f5f5f5f 64 intel fdivr st0, st0 -dcf0|11223344556677885f5f5f5f5f5f 64 plan9 FDIVR F0, F0 -dcf8|11223344556677885f5f5f5f5f5f 32 intel fdiv st0, st0 -dcf8|11223344556677885f5f5f5f5f5f 32 plan9 FDIV F0, F0 -dcf8|11223344556677885f5f5f5f5f5f 64 gnu fdivr %st,%st -dcf8|11223344556677885f5f5f5f5f5f 64 intel fdiv st0, st0 -dcf8|11223344556677885f5f5f5f5f5f 64 plan9 FDIV F0, F0 -dd00|11223344556677885f5f5f5f5f5f 32 intel fld st0, qword ptr [eax] -dd00|11223344556677885f5f5f5f5f5f 32 plan9 FLD 0(AX) -dd00|11223344556677885f5f5f5f5f5f 64 gnu fldl (%rax) -dd00|11223344556677885f5f5f5f5f5f 64 intel fld st0, qword ptr [rax] -dd00|11223344556677885f5f5f5f5f5f 64 plan9 FLD 0(AX) -dd08|11223344556677885f5f5f5f5f5f 32 intel fisttp qword ptr [eax], st0 -dd08|11223344556677885f5f5f5f5f5f 32 plan9 FISTTP 0(AX) -dd08|11223344556677885f5f5f5f5f5f 64 gnu fisttpll (%rax) -dd08|11223344556677885f5f5f5f5f5f 64 intel fisttp qword ptr [rax], st0 -dd08|11223344556677885f5f5f5f5f5f 64 plan9 FISTTP 0(AX) -dd11|223344556677885f5f5f5f5f5f5f 32 intel fst qword ptr [ecx], st0 -dd11|223344556677885f5f5f5f5f5f5f 32 plan9 FST 0(CX) -dd11|223344556677885f5f5f5f5f5f5f 64 gnu fstl (%rcx) -dd11|223344556677885f5f5f5f5f5f5f 64 intel fst qword ptr [rcx], st0 -dd11|223344556677885f5f5f5f5f5f5f 64 plan9 FST 0(CX) -dd18|11223344556677885f5f5f5f5f5f 32 intel fstp qword ptr [eax], st0 -dd18|11223344556677885f5f5f5f5f5f 32 plan9 FSTP 0(AX) -dd18|11223344556677885f5f5f5f5f5f 64 gnu fstpl (%rax) -dd18|11223344556677885f5f5f5f5f5f 64 intel fstp qword ptr [rax], st0 -dd18|11223344556677885f5f5f5f5f5f 64 plan9 FSTP 0(AX) -dd20|11223344556677885f5f5f5f5f5f 32 intel frstor ptr [eax] -dd20|11223344556677885f5f5f5f5f5f 32 plan9 FRSTORL 0(AX) -dd20|11223344556677885f5f5f5f5f5f 64 gnu frstor (%rax) -dd20|11223344556677885f5f5f5f5f5f 64 intel frstor ptr [rax] -dd20|11223344556677885f5f5f5f5f5f 64 plan9 FRSTORL 0(AX) -dd30|11223344556677885f5f5f5f5f5f 32 intel fnsave ptr [eax] -dd30|11223344556677885f5f5f5f5f5f 32 plan9 FNSAVE 0(AX) -dd30|11223344556677885f5f5f5f5f5f 64 gnu fnsave (%rax) -dd30|11223344556677885f5f5f5f5f5f 64 intel fnsave ptr [rax] -dd30|11223344556677885f5f5f5f5f5f 64 plan9 FNSAVE 0(AX) -dd38|11223344556677885f5f5f5f5f5f 32 intel fnstsw word ptr [eax] -dd38|11223344556677885f5f5f5f5f5f 32 plan9 FNSTSW 0(AX) -dd38|11223344556677885f5f5f5f5f5f 64 gnu fnstsw (%rax) -dd38|11223344556677885f5f5f5f5f5f 64 intel fnstsw word ptr [rax] -dd38|11223344556677885f5f5f5f5f5f 64 plan9 FNSTSW 0(AX) -ddc0|11223344556677885f5f5f5f5f5f 32 intel ffree st0 -ddc0|11223344556677885f5f5f5f5f5f 32 plan9 FFREE F0 -ddc0|11223344556677885f5f5f5f5f5f 64 gnu ffree %st -ddc0|11223344556677885f5f5f5f5f5f 64 intel ffree st0 -ddc0|11223344556677885f5f5f5f5f5f 64 plan9 FFREE F0 -ddd0|11223344556677885f5f5f5f5f5f 32 intel fst st0, st0 -ddd0|11223344556677885f5f5f5f5f5f 32 plan9 FST F0 -ddd0|11223344556677885f5f5f5f5f5f 64 gnu fst %st -ddd0|11223344556677885f5f5f5f5f5f 64 intel fst st0, st0 -ddd0|11223344556677885f5f5f5f5f5f 64 plan9 FST F0 -ddd8|11223344556677885f5f5f5f5f5f 32 intel fstp st0, st0 -ddd8|11223344556677885f5f5f5f5f5f 32 plan9 FSTP F0 -ddd8|11223344556677885f5f5f5f5f5f 64 gnu fstp %st -ddd8|11223344556677885f5f5f5f5f5f 64 intel fstp st0, st0 -ddd8|11223344556677885f5f5f5f5f5f 64 plan9 FSTP F0 -dde0|11223344556677885f5f5f5f5f5f 32 intel fucom st0, st0 -dde0|11223344556677885f5f5f5f5f5f 32 plan9 FUCOM F0 -dde0|11223344556677885f5f5f5f5f5f 64 gnu fucom %st -dde0|11223344556677885f5f5f5f5f5f 64 intel fucom st0, st0 -dde0|11223344556677885f5f5f5f5f5f 64 plan9 FUCOM F0 -dde8|11223344556677885f5f5f5f5f5f 32 intel fucomp st0, st0 -dde8|11223344556677885f5f5f5f5f5f 32 plan9 FUCOMP F0 -dde8|11223344556677885f5f5f5f5f5f 64 gnu fucomp %st -dde8|11223344556677885f5f5f5f5f5f 64 intel fucomp st0, st0 -dde8|11223344556677885f5f5f5f5f5f 64 plan9 FUCOMP F0 -de00|11223344556677885f5f5f5f5f5f 32 intel fiadd st0, word ptr [eax] -de00|11223344556677885f5f5f5f5f5f 32 plan9 FIADD 0(AX) -de00|11223344556677885f5f5f5f5f5f 64 gnu fiadd (%rax) -de00|11223344556677885f5f5f5f5f5f 64 intel fiadd st0, word ptr [rax] -de00|11223344556677885f5f5f5f5f5f 64 plan9 FIADD 0(AX) -de08|11223344556677885f5f5f5f5f5f 32 intel fimul st0, word ptr [eax] -de08|11223344556677885f5f5f5f5f5f 32 plan9 FIMUL 0(AX) -de08|11223344556677885f5f5f5f5f5f 64 gnu fimul (%rax) -de08|11223344556677885f5f5f5f5f5f 64 intel fimul st0, word ptr [rax] -de08|11223344556677885f5f5f5f5f5f 64 plan9 FIMUL 0(AX) -de11|223344556677885f5f5f5f5f5f5f 32 intel ficom st0, word ptr [ecx] -de11|223344556677885f5f5f5f5f5f5f 32 plan9 FICOM 0(CX) -de11|223344556677885f5f5f5f5f5f5f 64 gnu ficom (%rcx) -de11|223344556677885f5f5f5f5f5f5f 64 intel ficom st0, word ptr [rcx] -de11|223344556677885f5f5f5f5f5f5f 64 plan9 FICOM 0(CX) -de18|11223344556677885f5f5f5f5f5f 32 intel ficomp st0, word ptr [eax] -de18|11223344556677885f5f5f5f5f5f 32 plan9 FICOMP 0(AX) -de18|11223344556677885f5f5f5f5f5f 64 gnu ficomp (%rax) -de18|11223344556677885f5f5f5f5f5f 64 intel ficomp st0, word ptr [rax] -de18|11223344556677885f5f5f5f5f5f 64 plan9 FICOMP 0(AX) -de20|11223344556677885f5f5f5f5f5f 32 intel fisub st0, word ptr [eax] -de20|11223344556677885f5f5f5f5f5f 32 plan9 FISUB 0(AX) -de20|11223344556677885f5f5f5f5f5f 64 gnu fisub (%rax) -de20|11223344556677885f5f5f5f5f5f 64 intel fisub st0, word ptr [rax] -de20|11223344556677885f5f5f5f5f5f 64 plan9 FISUB 0(AX) -de28|11223344556677885f5f5f5f5f5f 32 intel fisubr st0, word ptr [eax] -de28|11223344556677885f5f5f5f5f5f 32 plan9 FISUBR 0(AX) -de28|11223344556677885f5f5f5f5f5f 64 gnu fisubr (%rax) -de28|11223344556677885f5f5f5f5f5f 64 intel fisubr st0, word ptr [rax] -de28|11223344556677885f5f5f5f5f5f 64 plan9 FISUBR 0(AX) -de30|11223344556677885f5f5f5f5f5f 32 intel fidiv st0, word ptr [eax] -de30|11223344556677885f5f5f5f5f5f 32 plan9 FIDIV 0(AX) -de30|11223344556677885f5f5f5f5f5f 64 gnu fidiv (%rax) -de30|11223344556677885f5f5f5f5f5f 64 intel fidiv st0, word ptr [rax] -de30|11223344556677885f5f5f5f5f5f 64 plan9 FIDIV 0(AX) -de38|11223344556677885f5f5f5f5f5f 32 intel fidivr st0, word ptr [eax] -de38|11223344556677885f5f5f5f5f5f 32 plan9 FIDIVR 0(AX) -de38|11223344556677885f5f5f5f5f5f 64 gnu fidivr (%rax) -de38|11223344556677885f5f5f5f5f5f 64 intel fidivr st0, word ptr [rax] -de38|11223344556677885f5f5f5f5f5f 64 plan9 FIDIVR 0(AX) -dec0|11223344556677885f5f5f5f5f5f 32 intel faddp st0, st0 -dec0|11223344556677885f5f5f5f5f5f 32 plan9 FADDP F0, F0 -dec0|11223344556677885f5f5f5f5f5f 64 gnu faddp %st,%st -dec0|11223344556677885f5f5f5f5f5f 64 intel faddp st0, st0 -dec0|11223344556677885f5f5f5f5f5f 64 plan9 FADDP F0, F0 -dec8|11223344556677885f5f5f5f5f5f 32 intel fmulp st0, st0 -dec8|11223344556677885f5f5f5f5f5f 32 plan9 FMULP F0, F0 -dec8|11223344556677885f5f5f5f5f5f 64 gnu fmulp %st,%st -dec8|11223344556677885f5f5f5f5f5f 64 intel fmulp st0, st0 -dec8|11223344556677885f5f5f5f5f5f 64 plan9 FMULP F0, F0 -ded9|11223344556677885f5f5f5f5f5f 32 intel fcompp st0, st1 -ded9|11223344556677885f5f5f5f5f5f 32 plan9 FCOMPP -ded9|11223344556677885f5f5f5f5f5f 64 gnu fcompp -ded9|11223344556677885f5f5f5f5f5f 64 intel fcompp st0, st1 -ded9|11223344556677885f5f5f5f5f5f 64 plan9 FCOMPP -dee0|11223344556677885f5f5f5f5f5f 32 intel fsubrp st0, st0 -dee0|11223344556677885f5f5f5f5f5f 32 plan9 FSUBRP F0, F0 -dee0|11223344556677885f5f5f5f5f5f 64 gnu fsubp %st,%st -dee0|11223344556677885f5f5f5f5f5f 64 intel fsubrp st0, st0 -dee0|11223344556677885f5f5f5f5f5f 64 plan9 FSUBRP F0, F0 -dee8|11223344556677885f5f5f5f5f5f 32 intel fsubp st0, st0 -dee8|11223344556677885f5f5f5f5f5f 32 plan9 FSUBP F0, F0 -dee8|11223344556677885f5f5f5f5f5f 64 gnu fsubrp %st,%st -dee8|11223344556677885f5f5f5f5f5f 64 intel fsubp st0, st0 -dee8|11223344556677885f5f5f5f5f5f 64 plan9 FSUBP F0, F0 -def0|11223344556677885f5f5f5f5f5f 32 intel fdivrp st0, st0 -def0|11223344556677885f5f5f5f5f5f 32 plan9 FDIVRP F0, F0 -def0|11223344556677885f5f5f5f5f5f 64 gnu fdivp %st,%st -def0|11223344556677885f5f5f5f5f5f 64 intel fdivrp st0, st0 -def0|11223344556677885f5f5f5f5f5f 64 plan9 FDIVRP F0, F0 -def8|11223344556677885f5f5f5f5f5f 32 intel fdivp st0, st0 -def8|11223344556677885f5f5f5f5f5f 32 plan9 FDIVP F0, F0 -def8|11223344556677885f5f5f5f5f5f 64 gnu fdivrp %st,%st -def8|11223344556677885f5f5f5f5f5f 64 intel fdivp st0, st0 -def8|11223344556677885f5f5f5f5f5f 64 plan9 FDIVP F0, F0 -df00|11223344556677885f5f5f5f5f5f 32 intel fild st0, word ptr [eax] -df00|11223344556677885f5f5f5f5f5f 32 plan9 FILD 0(AX) -df00|11223344556677885f5f5f5f5f5f 64 gnu fild (%rax) -df00|11223344556677885f5f5f5f5f5f 64 intel fild st0, word ptr [rax] -df00|11223344556677885f5f5f5f5f5f 64 plan9 FILD 0(AX) -df08|11223344556677885f5f5f5f5f5f 32 intel fisttp word ptr [eax], st0 -df08|11223344556677885f5f5f5f5f5f 32 plan9 FISTTP 0(AX) -df08|11223344556677885f5f5f5f5f5f 64 gnu fisttp (%rax) -df08|11223344556677885f5f5f5f5f5f 64 intel fisttp word ptr [rax], st0 -df08|11223344556677885f5f5f5f5f5f 64 plan9 FISTTP 0(AX) -df11|223344556677885f5f5f5f5f5f5f 32 intel fist word ptr [ecx], st0 -df11|223344556677885f5f5f5f5f5f5f 32 plan9 FIST 0(CX) -df11|223344556677885f5f5f5f5f5f5f 64 gnu fist (%rcx) -df11|223344556677885f5f5f5f5f5f5f 64 intel fist word ptr [rcx], st0 -df11|223344556677885f5f5f5f5f5f5f 64 plan9 FIST 0(CX) -df18|11223344556677885f5f5f5f5f5f 32 intel fistp word ptr [eax], st0 -df18|11223344556677885f5f5f5f5f5f 32 plan9 FISTP 0(AX) -df18|11223344556677885f5f5f5f5f5f 64 gnu fistp (%rax) -df18|11223344556677885f5f5f5f5f5f 64 intel fistp word ptr [rax], st0 -df18|11223344556677885f5f5f5f5f5f 64 plan9 FISTP 0(AX) -df20|11223344556677885f5f5f5f5f5f 32 intel fbld st0, ptr [eax] -df20|11223344556677885f5f5f5f5f5f 32 plan9 FBLD 0(AX) -df20|11223344556677885f5f5f5f5f5f 64 gnu fbld (%rax) -df20|11223344556677885f5f5f5f5f5f 64 intel fbld st0, ptr [rax] -df20|11223344556677885f5f5f5f5f5f 64 plan9 FBLD 0(AX) -df28|11223344556677885f5f5f5f5f5f 32 intel fild st0, qword ptr [eax] -df28|11223344556677885f5f5f5f5f5f 32 plan9 FILD 0(AX) -df28|11223344556677885f5f5f5f5f5f 64 gnu fildll (%rax) -df28|11223344556677885f5f5f5f5f5f 64 intel fild st0, qword ptr [rax] -df28|11223344556677885f5f5f5f5f5f 64 plan9 FILD 0(AX) -df30|11223344556677885f5f5f5f5f5f 32 intel fbstp ptr [eax], st0 -df30|11223344556677885f5f5f5f5f5f 32 plan9 FBSTP 0(AX) -df30|11223344556677885f5f5f5f5f5f 64 gnu fbstp (%rax) -df30|11223344556677885f5f5f5f5f5f 64 intel fbstp ptr [rax], st0 -df30|11223344556677885f5f5f5f5f5f 64 plan9 FBSTP 0(AX) -df38|11223344556677885f5f5f5f5f5f 32 intel fistp qword ptr [eax], st0 -df38|11223344556677885f5f5f5f5f5f 32 plan9 FISTP 0(AX) -df38|11223344556677885f5f5f5f5f5f 64 gnu fistpll (%rax) -df38|11223344556677885f5f5f5f5f5f 64 intel fistp qword ptr [rax], st0 -df38|11223344556677885f5f5f5f5f5f 64 plan9 FISTP 0(AX) -dfc0|11223344556677885f5f5f5f5f5f 32 intel ffreep st0 -dfc0|11223344556677885f5f5f5f5f5f 32 plan9 FFREEP F0 -dfc0|11223344556677885f5f5f5f5f5f 64 gnu ffreep %st -dfc0|11223344556677885f5f5f5f5f5f 64 intel ffreep st0 -dfc0|11223344556677885f5f5f5f5f5f 64 plan9 FFREEP F0 -dfe0|11223344556677885f5f5f5f5f5f 32 intel fnstsw ax -dfe0|11223344556677885f5f5f5f5f5f 32 plan9 FNSTSW AX -dfe0|11223344556677885f5f5f5f5f5f 64 gnu fnstsw %ax -dfe0|11223344556677885f5f5f5f5f5f 64 intel fnstsw ax -dfe0|11223344556677885f5f5f5f5f5f 64 plan9 FNSTSW AX -dfe8|11223344556677885f5f5f5f5f5f 32 intel fucomip st0, st0 -dfe8|11223344556677885f5f5f5f5f5f 32 plan9 FUCOMIP F0, F0 -dfe8|11223344556677885f5f5f5f5f5f 64 gnu fucomip %st,%st -dfe8|11223344556677885f5f5f5f5f5f 64 intel fucomip st0, st0 -dfe8|11223344556677885f5f5f5f5f5f 64 plan9 FUCOMIP F0, F0 -dff0|11223344556677885f5f5f5f5f5f 32 intel fcomip st0, st0 -dff0|11223344556677885f5f5f5f5f5f 32 plan9 FCOMIP F0, F0 -dff0|11223344556677885f5f5f5f5f5f 64 gnu fcomip %st,%st -dff0|11223344556677885f5f5f5f5f5f 64 intel fcomip st0, st0 -dff0|11223344556677885f5f5f5f5f5f 64 plan9 FCOMIP F0, F0 -e111|223344556677885f5f5f5f5f5f5f 32 intel loope .+0x11 -e111|223344556677885f5f5f5f5f5f5f 32 plan9 LOOPE .+17 -e111|223344556677885f5f5f5f5f5f5f 64 gnu loope .+0x11 -e111|223344556677885f5f5f5f5f5f5f 64 intel loope .+0x11 -e111|223344556677885f5f5f5f5f5f5f 64 plan9 LOOPE .+17 -e211|223344556677885f5f5f5f5f5f5f 32 intel loop .+0x11 -e211|223344556677885f5f5f5f5f5f5f 32 plan9 LOOP .+17 -e211|223344556677885f5f5f5f5f5f5f 64 gnu loop .+0x11 -e211|223344556677885f5f5f5f5f5f5f 64 intel loop .+0x11 -e211|223344556677885f5f5f5f5f5f5f 64 plan9 LOOP .+17 -e311|223344556677885f5f5f5f5f5f5f 32 intel jecxz .+0x11 -e311|223344556677885f5f5f5f5f5f5f 32 plan9 JECXZ .+17 -e311|223344556677885f5f5f5f5f5f5f 64 gnu jrcxz .+0x11 -e311|223344556677885f5f5f5f5f5f5f 64 intel jrcxz .+0x11 -e311|223344556677885f5f5f5f5f5f5f 64 plan9 JRCXZ .+17 -e411|223344556677885f5f5f5f5f5f5f 32 intel in al, 0x11 -e411|223344556677885f5f5f5f5f5f5f 32 plan9 INL $0x11, AL -e411|223344556677885f5f5f5f5f5f5f 64 gnu in $0x11,%al -e411|223344556677885f5f5f5f5f5f5f 64 intel in al, 0x11 -e411|223344556677885f5f5f5f5f5f5f 64 plan9 INL $0x11, AL -e511|223344556677885f5f5f5f5f5f5f 32 intel in eax, 0x11 -e511|223344556677885f5f5f5f5f5f5f 32 plan9 INL $0x11, AX -e511|223344556677885f5f5f5f5f5f5f 64 gnu in $0x11,%eax -e511|223344556677885f5f5f5f5f5f5f 64 intel in eax, 0x11 -e511|223344556677885f5f5f5f5f5f5f 64 plan9 INL $0x11, AX -e611|223344556677885f5f5f5f5f5f5f 32 intel out 0x11, al -e611|223344556677885f5f5f5f5f5f5f 32 plan9 OUTL AL, $0x11 -e611|223344556677885f5f5f5f5f5f5f 64 gnu out %al,$0x11 -e611|223344556677885f5f5f5f5f5f5f 64 intel out 0x11, al -e611|223344556677885f5f5f5f5f5f5f 64 plan9 OUTL AL, $0x11 -e711|223344556677885f5f5f5f5f5f5f 32 intel out 0x11, eax -e711|223344556677885f5f5f5f5f5f5f 32 plan9 OUTL AX, $0x11 -e711|223344556677885f5f5f5f5f5f5f 64 gnu out %eax,$0x11 -e711|223344556677885f5f5f5f5f5f5f 64 intel out 0x11, eax -e711|223344556677885f5f5f5f5f5f5f 64 plan9 OUTL AX, $0x11 -e811223344|556677885f5f5f5f5f5f5f 32 intel call .+0x44332211 -e811223344|556677885f5f5f5f5f5f5f 32 plan9 CALL .+1144201745 -e811223344|556677885f5f5f5f5f5f5f 64 gnu callq .+0x44332211 -e811223344|556677885f5f5f5f5f5f5f 64 intel call .+0x44332211 -e811223344|556677885f5f5f5f5f5f5f 64 plan9 CALL .+1144201745 -e911223344|556677885f5f5f5f5f5f5f 32 intel jmp .+0x44332211 -e911223344|556677885f5f5f5f5f5f5f 32 plan9 JMP .+1144201745 -e911223344|556677885f5f5f5f5f5f5f 64 gnu jmpq .+0x44332211 -e911223344|556677885f5f5f5f5f5f5f 64 intel jmp .+0x44332211 -e911223344|556677885f5f5f5f5f5f5f 64 plan9 JMP .+1144201745 -ea112233445566|77885f5f5f5f5f5f5f 32 intel jmp far 0x44332211, 0x6655 -ea112233445566|77885f5f5f5f5f5f5f 32 plan9 LJMP $0x44332211, $0x6655 -eb11|223344556677885f5f5f5f5f5f5f 32 intel jmp .+0x11 -eb11|223344556677885f5f5f5f5f5f5f 32 plan9 JMP .+17 -eb11|223344556677885f5f5f5f5f5f5f 64 gnu jmp .+0x11 -eb11|223344556677885f5f5f5f5f5f5f 64 intel jmp .+0x11 -eb11|223344556677885f5f5f5f5f5f5f 64 plan9 JMP .+17 -ec|11223344556677885f5f5f5f5f5f5f 32 intel in al, dx -ec|11223344556677885f5f5f5f5f5f5f 32 plan9 INL DX, AL -ec|11223344556677885f5f5f5f5f5f5f 64 gnu in (%dx),%al -ec|11223344556677885f5f5f5f5f5f5f 64 intel in al, dx -ec|11223344556677885f5f5f5f5f5f5f 64 plan9 INL DX, AL -ed|11223344556677885f5f5f5f5f5f5f 32 intel in eax, dx -ed|11223344556677885f5f5f5f5f5f5f 32 plan9 INL DX, AX -ed|11223344556677885f5f5f5f5f5f5f 64 gnu in (%dx),%eax -ed|11223344556677885f5f5f5f5f5f5f 64 intel in eax, dx -ed|11223344556677885f5f5f5f5f5f5f 64 plan9 INL DX, AX -ee|11223344556677885f5f5f5f5f5f5f 32 intel out dx, al -ee|11223344556677885f5f5f5f5f5f5f 32 plan9 OUTL AL, DX -ee|11223344556677885f5f5f5f5f5f5f 64 gnu out %al,(%dx) -ee|11223344556677885f5f5f5f5f5f5f 64 intel out dx, al -ee|11223344556677885f5f5f5f5f5f5f 64 plan9 OUTL AL, DX -ef|11223344556677885f5f5f5f5f5f5f 32 intel out dx, eax -ef|11223344556677885f5f5f5f5f5f5f 32 plan9 OUTL AX, DX -ef|11223344556677885f5f5f5f5f5f5f 64 gnu out %eax,(%dx) -ef|11223344556677885f5f5f5f5f5f5f 64 intel out dx, eax -ef|11223344556677885f5f5f5f5f5f5f 64 plan9 OUTL AX, DX -f1|11223344556677885f5f5f5f5f5f5f 32 intel int1 -f1|11223344556677885f5f5f5f5f5f5f 32 plan9 ICEBP -f1|11223344556677885f5f5f5f5f5f5f 64 gnu icebp -f1|11223344556677885f5f5f5f5f5f5f 64 intel int1 -f1|11223344556677885f5f5f5f5f5f5f 64 plan9 ICEBP -f20f1011|223344556677885f5f5f5f5f 32 intel movsd xmm2, qword ptr [ecx] -f20f1011|223344556677885f5f5f5f5f 32 plan9 MOVSD_XMM 0(CX), X2 -f20f1011|223344556677885f5f5f5f5f 64 gnu movsd (%rcx),%xmm2 -f20f1011|223344556677885f5f5f5f5f 64 intel movsd xmm2, qword ptr [rcx] -f20f1011|223344556677885f5f5f5f5f 64 plan9 MOVSD_XMM 0(CX), X2 -f20f1122|3344556677885f5f5f5f5f5f 32 intel movsd qword ptr [edx], xmm4 -f20f1122|3344556677885f5f5f5f5f5f 32 plan9 MOVSD_XMM X4, 0(DX) -f20f1122|3344556677885f5f5f5f5f5f 64 gnu movsd %xmm4,(%rdx) -f20f1122|3344556677885f5f5f5f5f5f 64 intel movsd qword ptr [rdx], xmm4 -f20f1122|3344556677885f5f5f5f5f5f 64 plan9 MOVSD_XMM X4, 0(DX) -f20f1211|223344556677885f5f5f5f5f 32 intel movddup xmm2, qword ptr [ecx] -f20f1211|223344556677885f5f5f5f5f 32 plan9 MOVDDUP 0(CX), X2 -f20f1211|223344556677885f5f5f5f5f 64 gnu movddup (%rcx),%xmm2 -f20f1211|223344556677885f5f5f5f5f 64 intel movddup xmm2, qword ptr [rcx] -f20f1211|223344556677885f5f5f5f5f 64 plan9 MOVDDUP 0(CX), X2 -f20f2a11|223344556677885f5f5f5f5f 32 intel cvtsi2sd xmm2, dword ptr [ecx] -f20f2a11|223344556677885f5f5f5f5f 32 plan9 CVTSI2SDL 0(CX), X2 -f20f2a11|223344556677885f5f5f5f5f 64 gnu cvtsi2sdl (%rcx),%xmm2 -f20f2a11|223344556677885f5f5f5f5f 64 intel cvtsi2sd xmm2, dword ptr [rcx] -f20f2a11|223344556677885f5f5f5f5f 64 plan9 CVTSI2SDL 0(CX), X2 -f20f2c11|223344556677885f5f5f5f5f 32 intel cvttsd2si edx, qword ptr [ecx] -f20f2c11|223344556677885f5f5f5f5f 32 plan9 CVTTSD2SIQ 0(CX), DX -f20f2c11|223344556677885f5f5f5f5f 64 gnu cvttsd2si (%rcx),%edx -f20f2c11|223344556677885f5f5f5f5f 64 intel cvttsd2si edx, qword ptr [rcx] -f20f2c11|223344556677885f5f5f5f5f 64 plan9 CVTTSD2SIQ 0(CX), DX -f20f2d11|223344556677885f5f5f5f5f 32 intel cvtsd2si edx, qword ptr [ecx] -f20f2d11|223344556677885f5f5f5f5f 32 plan9 CVTSD2SIQ 0(CX), DX -f20f2d11|223344556677885f5f5f5f5f 64 gnu cvtsd2si (%rcx),%edx -f20f2d11|223344556677885f5f5f5f5f 64 intel cvtsd2si edx, qword ptr [rcx] -f20f2d11|223344556677885f5f5f5f5f 64 plan9 CVTSD2SIQ 0(CX), DX -f20f38f011|223344556677885f5f5f5f 32 intel crc32 edx, byte ptr [ecx] -f20f38f011|223344556677885f5f5f5f 32 plan9 CRC32 0(CX), DX -f20f38f011|223344556677885f5f5f5f 64 gnu crc32b (%rcx),%edx -f20f38f011|223344556677885f5f5f5f 64 intel crc32 edx, byte ptr [rcx] -f20f38f011|223344556677885f5f5f5f 64 plan9 CRC32 0(CX), DX -f20f38f111|223344556677885f5f5f5f 32 intel crc32 edx, dword ptr [ecx] -f20f38f111|223344556677885f5f5f5f 32 plan9 CRC32 0(CX), DX -f20f38f111|223344556677885f5f5f5f 64 gnu crc32l (%rcx),%edx -f20f38f111|223344556677885f5f5f5f 64 intel crc32 edx, dword ptr [rcx] -f20f38f111|223344556677885f5f5f5f 64 plan9 CRC32 0(CX), DX -f20f5111|223344556677885f5f5f5f5f 32 intel sqrtsd xmm2, qword ptr [ecx] -f20f5111|223344556677885f5f5f5f5f 32 plan9 SQRTSD 0(CX), X2 -f20f5111|223344556677885f5f5f5f5f 64 gnu sqrtsd (%rcx),%xmm2 -f20f5111|223344556677885f5f5f5f5f 64 intel sqrtsd xmm2, qword ptr [rcx] -f20f5111|223344556677885f5f5f5f5f 64 plan9 SQRTSD 0(CX), X2 -f20f5811|223344556677885f5f5f5f5f 32 intel addsd xmm2, qword ptr [ecx] -f20f5811|223344556677885f5f5f5f5f 32 plan9 ADDSD 0(CX), X2 -f20f5811|223344556677885f5f5f5f5f 64 gnu addsd (%rcx),%xmm2 -f20f5811|223344556677885f5f5f5f5f 64 intel addsd xmm2, qword ptr [rcx] -f20f5811|223344556677885f5f5f5f5f 64 plan9 ADDSD 0(CX), X2 -f20f5911|223344556677885f5f5f5f5f 32 intel mulsd xmm2, qword ptr [ecx] -f20f5911|223344556677885f5f5f5f5f 32 plan9 MULSD 0(CX), X2 -f20f5911|223344556677885f5f5f5f5f 64 gnu mulsd (%rcx),%xmm2 -f20f5911|223344556677885f5f5f5f5f 64 intel mulsd xmm2, qword ptr [rcx] -f20f5911|223344556677885f5f5f5f5f 64 plan9 MULSD 0(CX), X2 -f20f5a11|223344556677885f5f5f5f5f 32 intel cvtsd2ss xmm2, qword ptr [ecx] -f20f5a11|223344556677885f5f5f5f5f 32 plan9 CVTSD2SS 0(CX), X2 -f20f5a11|223344556677885f5f5f5f5f 64 gnu cvtsd2ss (%rcx),%xmm2 -f20f5a11|223344556677885f5f5f5f5f 64 intel cvtsd2ss xmm2, qword ptr [rcx] -f20f5a11|223344556677885f5f5f5f5f 64 plan9 CVTSD2SS 0(CX), X2 -f20f5c11|223344556677885f5f5f5f5f 32 intel subsd xmm2, qword ptr [ecx] -f20f5c11|223344556677885f5f5f5f5f 32 plan9 SUBSD 0(CX), X2 -f20f5c11|223344556677885f5f5f5f5f 64 gnu subsd (%rcx),%xmm2 -f20f5c11|223344556677885f5f5f5f5f 64 intel subsd xmm2, qword ptr [rcx] -f20f5c11|223344556677885f5f5f5f5f 64 plan9 SUBSD 0(CX), X2 -f20f5d11|223344556677885f5f5f5f5f 32 intel minsd xmm2, qword ptr [ecx] -f20f5d11|223344556677885f5f5f5f5f 32 plan9 MINSD 0(CX), X2 -f20f5d11|223344556677885f5f5f5f5f 64 gnu minsd (%rcx),%xmm2 -f20f5d11|223344556677885f5f5f5f5f 64 intel minsd xmm2, qword ptr [rcx] -f20f5d11|223344556677885f5f5f5f5f 64 plan9 MINSD 0(CX), X2 -f20f5e11|223344556677885f5f5f5f5f 32 intel divsd xmm2, qword ptr [ecx] -f20f5e11|223344556677885f5f5f5f5f 32 plan9 DIVSD 0(CX), X2 -f20f5e11|223344556677885f5f5f5f5f 64 gnu divsd (%rcx),%xmm2 -f20f5e11|223344556677885f5f5f5f5f 64 intel divsd xmm2, qword ptr [rcx] -f20f5e11|223344556677885f5f5f5f5f 64 plan9 DIVSD 0(CX), X2 -f20f5f11|223344556677885f5f5f5f5f 32 intel maxsd xmm2, qword ptr [ecx] -f20f5f11|223344556677885f5f5f5f5f 32 plan9 MAXSD 0(CX), X2 -f20f5f11|223344556677885f5f5f5f5f 64 gnu maxsd (%rcx),%xmm2 -f20f5f11|223344556677885f5f5f5f5f 64 intel maxsd xmm2, qword ptr [rcx] -f20f5f11|223344556677885f5f5f5f5f 64 plan9 MAXSD 0(CX), X2 -f20f701122|3344556677885f5f5f5f5f 32 intel pshuflw xmm2, xmmword ptr [ecx], 0x22 -f20f701122|3344556677885f5f5f5f5f 32 plan9 PSHUFLW $0x22, 0(CX), X2 -f20f701122|3344556677885f5f5f5f5f 64 gnu pshuflw $0x22,(%rcx),%xmm2 -f20f701122|3344556677885f5f5f5f5f 64 intel pshuflw xmm2, xmmword ptr [rcx], 0x22 -f20f701122|3344556677885f5f5f5f5f 64 plan9 PSHUFLW $0x22, 0(CX), X2 -f20f7c11|223344556677885f5f5f5f5f 32 intel haddps xmm2, xmmword ptr [ecx] -f20f7c11|223344556677885f5f5f5f5f 32 plan9 HADDPS 0(CX), X2 -f20f7c11|223344556677885f5f5f5f5f 64 gnu haddps (%rcx),%xmm2 -f20f7c11|223344556677885f5f5f5f5f 64 intel haddps xmm2, xmmword ptr [rcx] -f20f7c11|223344556677885f5f5f5f5f 64 plan9 HADDPS 0(CX), X2 -f20f7d11|223344556677885f5f5f5f5f 32 intel hsubps xmm2, xmmword ptr [ecx] -f20f7d11|223344556677885f5f5f5f5f 32 plan9 HSUBPS 0(CX), X2 -f20f7d11|223344556677885f5f5f5f5f 64 gnu hsubps (%rcx),%xmm2 -f20f7d11|223344556677885f5f5f5f5f 64 intel hsubps xmm2, xmmword ptr [rcx] -f20f7d11|223344556677885f5f5f5f5f 64 plan9 HSUBPS 0(CX), X2 -f20fc21122|3344556677885f5f5f5f5f 32 intel cmpsd_xmm xmm2, qword ptr [ecx], 0x22 -f20fc21122|3344556677885f5f5f5f5f 32 plan9 CMPSD_XMM $0x22, 0(CX), X2 -f20fc21122|3344556677885f5f5f5f5f 64 gnu cmpsd $0x22,(%rcx),%xmm2 -f20fc21122|3344556677885f5f5f5f5f 64 intel cmpsd_xmm xmm2, qword ptr [rcx], 0x22 -f20fc21122|3344556677885f5f5f5f5f 64 plan9 CMPSD_XMM $0x22, 0(CX), X2 -f20fd011|223344556677885f5f5f5f5f 32 intel addsubps xmm2, xmmword ptr [ecx] -f20fd011|223344556677885f5f5f5f5f 32 plan9 ADDSUBPS 0(CX), X2 -f20fd011|223344556677885f5f5f5f5f 64 gnu addsubps (%rcx),%xmm2 -f20fd011|223344556677885f5f5f5f5f 64 intel addsubps xmm2, xmmword ptr [rcx] -f20fd011|223344556677885f5f5f5f5f 64 plan9 ADDSUBPS 0(CX), X2 -f20fd6c0|11223344556677885f5f5f5f 32 intel movdq2q mmx0, xmm0 -f20fd6c0|11223344556677885f5f5f5f 32 plan9 MOVDQ2Q X0, M0 -f20fd6c0|11223344556677885f5f5f5f 64 gnu movdq2q %xmm0,%mm0 -f20fd6c0|11223344556677885f5f5f5f 64 intel movdq2q mmx0, xmm0 -f20fd6c0|11223344556677885f5f5f5f 64 plan9 MOVDQ2Q X0, M0 -f20fe611|223344556677885f5f5f5f5f 32 intel cvtpd2dq xmm2, xmmword ptr [ecx] -f20fe611|223344556677885f5f5f5f5f 32 plan9 CVTPD2DQ 0(CX), X2 -f20fe611|223344556677885f5f5f5f5f 64 gnu cvtpd2dq (%rcx),%xmm2 -f20fe611|223344556677885f5f5f5f5f 64 intel cvtpd2dq xmm2, xmmword ptr [rcx] -f20fe611|223344556677885f5f5f5f5f 64 plan9 CVTPD2DQ 0(CX), X2 -f20ff011|223344556677885f5f5f5f5f 32 intel lddqu xmm2, xmmword ptr [ecx] -f20ff011|223344556677885f5f5f5f5f 32 plan9 LDDQU 0(CX), X2 -f20ff011|223344556677885f5f5f5f5f 64 gnu lddqu (%rcx),%xmm2 -f20ff011|223344556677885f5f5f5f5f 64 intel lddqu xmm2, xmmword ptr [rcx] -f20ff011|223344556677885f5f5f5f5f 64 plan9 LDDQU 0(CX), X2 -f2480f2a11|223344556677885f5f5f5f 64 gnu cvtsi2sdq (%rcx),%xmm2 -f2480f2a11|223344556677885f5f5f5f 64 intel cvtsi2sd xmm2, qword ptr [rcx] -f2480f2a11|223344556677885f5f5f5f 64 plan9 CVTSI2SDQ 0(CX), X2 -f2480f2c11|223344556677885f5f5f5f 64 gnu cvttsd2si (%rcx),%rdx -f2480f2c11|223344556677885f5f5f5f 64 intel cvttsd2si rdx, qword ptr [rcx] -f2480f2c11|223344556677885f5f5f5f 64 plan9 CVTTSD2SIQ 0(CX), DX -f2480f2d11|223344556677885f5f5f5f 64 gnu cvtsd2si (%rcx),%rdx -f2480f2d11|223344556677885f5f5f5f 64 intel cvtsd2si rdx, qword ptr [rcx] -f2480f2d11|223344556677885f5f5f5f 64 plan9 CVTSD2SIQ 0(CX), DX -f2480f38f011|223344556677885f5f5f 64 gnu crc32b (%rcx),%rdx -f2480f38f011|223344556677885f5f5f 64 intel crc32 rdx, byte ptr [rcx] -f2480f38f011|223344556677885f5f5f 64 plan9 CRC32 0(CX), DX -f2480f38f111|223344556677885f5f5f 64 gnu crc32q (%rcx),%rdx -f2480f38f111|223344556677885f5f5f 64 intel crc32 rdx, qword ptr [rcx] -f2480f38f111|223344556677885f5f5f 64 plan9 CRC32 0(CX), DX -f267f0663e360f38f111|223344556677 32 intel lock crc32 edx, word ptr ss:[bx+di*1] -f267f0663e360f38f111|223344556677 32 plan9 DS CRC32 SS:0(BX)(DI*1), DX -f267f0663e360f38f111|223344556677 64 gnu lock crc32w %ds:%ss:(%ecx),%edx -f267f0663e360f38f111|223344556677 64 intel lock crc32 edx, word ptr [ecx] -f267f0663e360f38f111|223344556677 64 plan9 SS CRC32 0(CX), DX -f2f30f2b11|5f5f5f5f5f5f5f5f5f5f5f 32 intel movntss dword ptr [ecx], xmm2 -f2f30f2b11|5f5f5f5f5f5f5f5f5f5f5f 32 plan9 REPNE; MOVNTSS X2, 0(CX) -f2f30f2b11|5f5f5f5f5f5f5f5f5f5f5f 64 gnu repn movntss %xmm2,(%rcx) -f2f30f2b11|5f5f5f5f5f5f5f5f5f5f5f 64 intel movntss dword ptr [rcx], xmm2 -f2f30f2b11|5f5f5f5f5f5f5f5f5f5f5f 64 plan9 REPNE; MOVNTSS X2, 0(CX) -f30f1011|223344556677885f5f5f5f5f 32 intel movss xmm2, dword ptr [ecx] -f30f1011|223344556677885f5f5f5f5f 32 plan9 MOVSS 0(CX), X2 -f30f1011|223344556677885f5f5f5f5f 64 gnu movss (%rcx),%xmm2 -f30f1011|223344556677885f5f5f5f5f 64 intel movss xmm2, dword ptr [rcx] -f30f1011|223344556677885f5f5f5f5f 64 plan9 MOVSS 0(CX), X2 -f30f1122|3344556677885f5f5f5f5f5f 32 intel movss dword ptr [edx], xmm4 -f30f1122|3344556677885f5f5f5f5f5f 32 plan9 MOVSS X4, 0(DX) -f30f1122|3344556677885f5f5f5f5f5f 64 gnu movss %xmm4,(%rdx) -f30f1122|3344556677885f5f5f5f5f5f 64 intel movss dword ptr [rdx], xmm4 -f30f1122|3344556677885f5f5f5f5f5f 64 plan9 MOVSS X4, 0(DX) -f30f1211|223344556677885f5f5f5f5f 32 intel movsldup xmm2, xmmword ptr [ecx] -f30f1211|223344556677885f5f5f5f5f 32 plan9 MOVSLDUP 0(CX), X2 -f30f1211|223344556677885f5f5f5f5f 64 gnu movsldup (%rcx),%xmm2 -f30f1211|223344556677885f5f5f5f5f 64 intel movsldup xmm2, xmmword ptr [rcx] -f30f1211|223344556677885f5f5f5f5f 64 plan9 MOVSLDUP 0(CX), X2 -f30f1611|223344556677885f5f5f5f5f 32 intel movshdup xmm2, xmmword ptr [ecx] -f30f1611|223344556677885f5f5f5f5f 32 plan9 MOVSHDUP 0(CX), X2 -f30f1611|223344556677885f5f5f5f5f 64 gnu movshdup (%rcx),%xmm2 -f30f1611|223344556677885f5f5f5f5f 64 intel movshdup xmm2, xmmword ptr [rcx] -f30f1611|223344556677885f5f5f5f5f 64 plan9 MOVSHDUP 0(CX), X2 -f30f2a11|223344556677885f5f5f5f5f 32 intel cvtsi2ss xmm2, dword ptr [ecx] -f30f2a11|223344556677885f5f5f5f5f 32 plan9 CVTSI2SSL 0(CX), X2 -f30f2a11|223344556677885f5f5f5f5f 64 gnu cvtsi2ssl (%rcx),%xmm2 -f30f2a11|223344556677885f5f5f5f5f 64 intel cvtsi2ss xmm2, dword ptr [rcx] -f30f2a11|223344556677885f5f5f5f5f 64 plan9 CVTSI2SSL 0(CX), X2 -f30f2c11|223344556677885f5f5f5f5f 32 intel cvttss2si edx, dword ptr [ecx] -f30f2c11|223344556677885f5f5f5f5f 32 plan9 CVTTSS2SIL 0(CX), DX -f30f2c11|223344556677885f5f5f5f5f 64 gnu cvttss2si (%rcx),%edx -f30f2c11|223344556677885f5f5f5f5f 64 intel cvttss2si edx, dword ptr [rcx] -f30f2c11|223344556677885f5f5f5f5f 64 plan9 CVTTSS2SIL 0(CX), DX -f30f2d11|223344556677885f5f5f5f5f 32 intel cvtss2si edx, dword ptr [ecx] -f30f2d11|223344556677885f5f5f5f5f 32 plan9 CVTSS2SIL 0(CX), DX -f30f2d11|223344556677885f5f5f5f5f 64 gnu cvtss2si (%rcx),%edx -f30f2d11|223344556677885f5f5f5f5f 64 intel cvtss2si edx, dword ptr [rcx] -f30f2d11|223344556677885f5f5f5f5f 64 plan9 CVTSS2SIL 0(CX), DX -f30f5111|223344556677885f5f5f5f5f 32 intel sqrtss xmm2, dword ptr [ecx] -f30f5111|223344556677885f5f5f5f5f 32 plan9 SQRTSS 0(CX), X2 -f30f5111|223344556677885f5f5f5f5f 64 gnu sqrtss (%rcx),%xmm2 -f30f5111|223344556677885f5f5f5f5f 64 intel sqrtss xmm2, dword ptr [rcx] -f30f5111|223344556677885f5f5f5f5f 64 plan9 SQRTSS 0(CX), X2 -f30f5211|223344556677885f5f5f5f5f 32 intel rsqrtss xmm2, dword ptr [ecx] -f30f5211|223344556677885f5f5f5f5f 32 plan9 RSQRTSS 0(CX), X2 -f30f5211|223344556677885f5f5f5f5f 64 gnu rsqrtss (%rcx),%xmm2 -f30f5211|223344556677885f5f5f5f5f 64 intel rsqrtss xmm2, dword ptr [rcx] -f30f5211|223344556677885f5f5f5f5f 64 plan9 RSQRTSS 0(CX), X2 -f30f5311|223344556677885f5f5f5f5f 32 intel rcpss xmm2, dword ptr [ecx] -f30f5311|223344556677885f5f5f5f5f 32 plan9 RCPSS 0(CX), X2 -f30f5311|223344556677885f5f5f5f5f 64 gnu rcpss (%rcx),%xmm2 -f30f5311|223344556677885f5f5f5f5f 64 intel rcpss xmm2, dword ptr [rcx] -f30f5311|223344556677885f5f5f5f5f 64 plan9 RCPSS 0(CX), X2 -f30f5811|223344556677885f5f5f5f5f 32 intel addss xmm2, dword ptr [ecx] -f30f5811|223344556677885f5f5f5f5f 32 plan9 ADDSS 0(CX), X2 -f30f5811|223344556677885f5f5f5f5f 64 gnu addss (%rcx),%xmm2 -f30f5811|223344556677885f5f5f5f5f 64 intel addss xmm2, dword ptr [rcx] -f30f5811|223344556677885f5f5f5f5f 64 plan9 ADDSS 0(CX), X2 -f30f5911|223344556677885f5f5f5f5f 32 intel mulss xmm2, dword ptr [ecx] -f30f5911|223344556677885f5f5f5f5f 32 plan9 MULSS 0(CX), X2 -f30f5911|223344556677885f5f5f5f5f 64 gnu mulss (%rcx),%xmm2 -f30f5911|223344556677885f5f5f5f5f 64 intel mulss xmm2, dword ptr [rcx] -f30f5911|223344556677885f5f5f5f5f 64 plan9 MULSS 0(CX), X2 -f30f5a11|223344556677885f5f5f5f5f 32 intel cvtss2sd xmm2, dword ptr [ecx] -f30f5a11|223344556677885f5f5f5f5f 32 plan9 CVTSS2SD 0(CX), X2 -f30f5a11|223344556677885f5f5f5f5f 64 gnu cvtss2sd (%rcx),%xmm2 -f30f5a11|223344556677885f5f5f5f5f 64 intel cvtss2sd xmm2, dword ptr [rcx] -f30f5a11|223344556677885f5f5f5f5f 64 plan9 CVTSS2SD 0(CX), X2 -f30f5b11|223344556677885f5f5f5f5f 32 intel cvttps2dq xmm2, xmmword ptr [ecx] -f30f5b11|223344556677885f5f5f5f5f 32 plan9 CVTTPS2DQ 0(CX), X2 -f30f5b11|223344556677885f5f5f5f5f 64 gnu cvttps2dq (%rcx),%xmm2 -f30f5b11|223344556677885f5f5f5f5f 64 intel cvttps2dq xmm2, xmmword ptr [rcx] -f30f5b11|223344556677885f5f5f5f5f 64 plan9 CVTTPS2DQ 0(CX), X2 -f30f5c11|223344556677885f5f5f5f5f 32 intel subss xmm2, dword ptr [ecx] -f30f5c11|223344556677885f5f5f5f5f 32 plan9 SUBSS 0(CX), X2 -f30f5c11|223344556677885f5f5f5f5f 64 gnu subss (%rcx),%xmm2 -f30f5c11|223344556677885f5f5f5f5f 64 intel subss xmm2, dword ptr [rcx] -f30f5c11|223344556677885f5f5f5f5f 64 plan9 SUBSS 0(CX), X2 -f30f5d11|223344556677885f5f5f5f5f 32 intel minss xmm2, dword ptr [ecx] -f30f5d11|223344556677885f5f5f5f5f 32 plan9 MINSS 0(CX), X2 -f30f5d11|223344556677885f5f5f5f5f 64 gnu minss (%rcx),%xmm2 -f30f5d11|223344556677885f5f5f5f5f 64 intel minss xmm2, dword ptr [rcx] -f30f5d11|223344556677885f5f5f5f5f 64 plan9 MINSS 0(CX), X2 -f30f5e11|223344556677885f5f5f5f5f 32 intel divss xmm2, dword ptr [ecx] -f30f5e11|223344556677885f5f5f5f5f 32 plan9 DIVSS 0(CX), X2 -f30f5e11|223344556677885f5f5f5f5f 64 gnu divss (%rcx),%xmm2 -f30f5e11|223344556677885f5f5f5f5f 64 intel divss xmm2, dword ptr [rcx] -f30f5e11|223344556677885f5f5f5f5f 64 plan9 DIVSS 0(CX), X2 -f30f5f11|223344556677885f5f5f5f5f 32 intel maxss xmm2, dword ptr [ecx] -f30f5f11|223344556677885f5f5f5f5f 32 plan9 MAXSS 0(CX), X2 -f30f5f11|223344556677885f5f5f5f5f 64 gnu maxss (%rcx),%xmm2 -f30f5f11|223344556677885f5f5f5f5f 64 intel maxss xmm2, dword ptr [rcx] -f30f5f11|223344556677885f5f5f5f5f 64 plan9 MAXSS 0(CX), X2 -f30f6f11|223344556677885f5f5f5f5f 32 intel movdqu xmm2, xmmword ptr [ecx] -f30f6f11|223344556677885f5f5f5f5f 32 plan9 MOVDQU 0(CX), X2 -f30f6f11|223344556677885f5f5f5f5f 64 gnu movdqu (%rcx),%xmm2 -f30f6f11|223344556677885f5f5f5f5f 64 intel movdqu xmm2, xmmword ptr [rcx] -f30f6f11|223344556677885f5f5f5f5f 64 plan9 MOVDQU 0(CX), X2 -f30f701122|3344556677885f5f5f5f5f 32 intel pshufhw xmm2, xmmword ptr [ecx], 0x22 -f30f701122|3344556677885f5f5f5f5f 32 plan9 PSHUFHW $0x22, 0(CX), X2 -f30f701122|3344556677885f5f5f5f5f 64 gnu pshufhw $0x22,(%rcx),%xmm2 -f30f701122|3344556677885f5f5f5f5f 64 intel pshufhw xmm2, xmmword ptr [rcx], 0x22 -f30f701122|3344556677885f5f5f5f5f 64 plan9 PSHUFHW $0x22, 0(CX), X2 -f30f7e11|223344556677885f5f5f5f5f 32 intel movq xmm2, qword ptr [ecx] -f30f7e11|223344556677885f5f5f5f5f 32 plan9 MOVQ 0(CX), X2 -f30f7e11|223344556677885f5f5f5f5f 64 gnu movq (%rcx),%xmm2 -f30f7e11|223344556677885f5f5f5f5f 64 intel movq xmm2, qword ptr [rcx] -f30f7e11|223344556677885f5f5f5f5f 64 plan9 MOVQ 0(CX), X2 -f30f7f11|223344556677885f5f5f5f5f 32 intel movdqu xmmword ptr [ecx], xmm2 -f30f7f11|223344556677885f5f5f5f5f 32 plan9 MOVDQU X2, 0(CX) -f30f7f11|223344556677885f5f5f5f5f 64 gnu movdqu %xmm2,(%rcx) -f30f7f11|223344556677885f5f5f5f5f 64 intel movdqu xmmword ptr [rcx], xmm2 -f30f7f11|223344556677885f5f5f5f5f 64 plan9 MOVDQU X2, 0(CX) -f30fae11|223344556677885f5f5f5f5f 64 gnu wrfsbasel (%rcx) -f30fae11|223344556677885f5f5f5f5f 64 intel wrfsbase dword ptr [rcx] -f30fae11|223344556677885f5f5f5f5f 64 plan9 WRFSBASE 0(CX) -f30fae18|11223344556677885f5f5f5f 64 gnu wrgsbasel (%rax) -f30fae18|11223344556677885f5f5f5f 64 intel wrgsbase dword ptr [rax] -f30fae18|11223344556677885f5f5f5f 64 plan9 WRGSBASE 0(AX) -f30faec0|11223344556677885f5f5f5f 64 gnu rdfsbase %eax -f30faec0|11223344556677885f5f5f5f 64 intel rdfsbase eax -f30faec0|11223344556677885f5f5f5f 64 plan9 RDFSBASE AX -f30faec8|11223344556677885f5f5f5f 64 gnu rdgsbase %eax -f30faec8|11223344556677885f5f5f5f 64 intel rdgsbase eax -f30faec8|11223344556677885f5f5f5f 64 plan9 RDGSBASE AX -f30fb811|223344556677885f5f5f5f5f 32 intel popcnt edx, dword ptr [ecx] -f30fb811|223344556677885f5f5f5f5f 32 plan9 POPCNT 0(CX), DX -f30fb811|223344556677885f5f5f5f5f 64 gnu popcnt (%rcx),%edx -f30fb811|223344556677885f5f5f5f5f 64 intel popcnt edx, dword ptr [rcx] -f30fb811|223344556677885f5f5f5f5f 64 plan9 POPCNT 0(CX), DX -f30fbc11|223344556677885f5f5f5f5f 32 intel tzcnt edx, dword ptr [ecx] -f30fbc11|223344556677885f5f5f5f5f 32 plan9 TZCNT 0(CX), DX -f30fbc11|223344556677885f5f5f5f5f 64 gnu tzcnt (%rcx),%edx -f30fbc11|223344556677885f5f5f5f5f 64 intel tzcnt edx, dword ptr [rcx] -f30fbc11|223344556677885f5f5f5f5f 64 plan9 TZCNT 0(CX), DX -f30fbd11|223344556677885f5f5f5f5f 32 intel lzcnt edx, dword ptr [ecx] -f30fbd11|223344556677885f5f5f5f5f 32 plan9 LZCNT 0(CX), DX -f30fbd11|223344556677885f5f5f5f5f 64 gnu lzcnt (%rcx),%edx -f30fbd11|223344556677885f5f5f5f5f 64 intel lzcnt edx, dword ptr [rcx] -f30fbd11|223344556677885f5f5f5f5f 64 plan9 LZCNT 0(CX), DX -f30fc21122|3344556677885f5f5f5f5f 32 intel cmpss xmm2, dword ptr [ecx], 0x22 -f30fc21122|3344556677885f5f5f5f5f 32 plan9 CMPSS $0x22, 0(CX), X2 -f30fc21122|3344556677885f5f5f5f5f 64 gnu cmpss $0x22,(%rcx),%xmm2 -f30fc21122|3344556677885f5f5f5f5f 64 intel cmpss xmm2, dword ptr [rcx], 0x22 -f30fc21122|3344556677885f5f5f5f5f 64 plan9 CMPSS $0x22, 0(CX), X2 -f30fe611|223344556677885f5f5f5f5f 32 intel cvtdq2pd xmm2, qword ptr [ecx] -f30fe611|223344556677885f5f5f5f5f 32 plan9 CVTDQ2PD 0(CX), X2 -f30fe611|223344556677885f5f5f5f5f 64 gnu cvtdq2pd (%rcx),%xmm2 -f30fe611|223344556677885f5f5f5f5f 64 intel cvtdq2pd xmm2, qword ptr [rcx] -f30fe611|223344556677885f5f5f5f5f 64 plan9 CVTDQ2PD 0(CX), X2 -f3480f2a11|223344556677885f5f5f5f 64 gnu cvtsi2ssq (%rcx),%xmm2 -f3480f2a11|223344556677885f5f5f5f 64 intel cvtsi2ss xmm2, qword ptr [rcx] -f3480f2a11|223344556677885f5f5f5f 64 plan9 CVTSI2SSQ 0(CX), X2 -f3480f2c11|223344556677885f5f5f5f 64 gnu cvttss2si (%rcx),%rdx -f3480f2c11|223344556677885f5f5f5f 64 intel cvttss2si rdx, dword ptr [rcx] -f3480f2c11|223344556677885f5f5f5f 64 plan9 CVTTSS2SIL 0(CX), DX -f3480f2d11|223344556677885f5f5f5f 64 gnu cvtss2si (%rcx),%rdx -f3480f2d11|223344556677885f5f5f5f 64 intel cvtss2si rdx, dword ptr [rcx] -f3480f2d11|223344556677885f5f5f5f 64 plan9 CVTSS2SIL 0(CX), DX -f3480fae11|223344556677885f5f5f5f 64 gnu wrfsbaseq (%rcx) -f3480fae11|223344556677885f5f5f5f 64 intel wrfsbase qword ptr [rcx] -f3480fae11|223344556677885f5f5f5f 64 plan9 WRFSBASE 0(CX) -f3480fae18|11223344556677885f5f5f 64 gnu wrgsbaseq (%rax) -f3480fae18|11223344556677885f5f5f 64 intel wrgsbase qword ptr [rax] -f3480fae18|11223344556677885f5f5f 64 plan9 WRGSBASE 0(AX) -f3480faec0|11223344556677885f5f5f 64 gnu rdfsbase %rax -f3480faec0|11223344556677885f5f5f 64 intel rdfsbase rax -f3480faec0|11223344556677885f5f5f 64 plan9 RDFSBASE AX -f3480faec8|11223344556677885f5f5f 64 gnu rdgsbase %rax -f3480faec8|11223344556677885f5f5f 64 intel rdgsbase rax -f3480faec8|11223344556677885f5f5f 64 plan9 RDGSBASE AX -f3480fb811|223344556677885f5f5f5f 64 gnu popcnt (%rcx),%rdx -f3480fb811|223344556677885f5f5f5f 64 intel popcnt rdx, qword ptr [rcx] -f3480fb811|223344556677885f5f5f5f 64 plan9 POPCNT 0(CX), DX -f3480fbc11|223344556677885f5f5f5f 64 gnu tzcnt (%rcx),%rdx -f3480fbc11|223344556677885f5f5f5f 64 intel tzcnt rdx, qword ptr [rcx] -f3480fbc11|223344556677885f5f5f5f 64 plan9 TZCNT 0(CX), DX -f3480fbd11|223344556677885f5f5f5f 64 gnu lzcnt (%rcx),%rdx -f3480fbd11|223344556677885f5f5f5f 64 intel lzcnt rdx, qword ptr [rcx] -f3480fbd11|223344556677885f5f5f5f 64 plan9 LZCNT 0(CX), DX -f3660fb811|223344556677885f5f5f5f 32 intel popcnt dx, word ptr [ecx] -f3660fb811|223344556677885f5f5f5f 32 plan9 POPCNT 0(CX), DX -f3660fb811|223344556677885f5f5f5f 64 gnu popcnt (%rcx),%dx -f3660fb811|223344556677885f5f5f5f 64 intel popcnt dx, word ptr [rcx] -f3660fb811|223344556677885f5f5f5f 64 plan9 POPCNT 0(CX), DX -f3660fbc11|223344556677885f5f5f5f 32 intel tzcnt dx, word ptr [ecx] -f3660fbc11|223344556677885f5f5f5f 32 plan9 TZCNT 0(CX), DX -f3660fbc11|223344556677885f5f5f5f 64 gnu tzcnt (%rcx),%dx -f3660fbc11|223344556677885f5f5f5f 64 intel tzcnt dx, word ptr [rcx] -f3660fbc11|223344556677885f5f5f5f 64 plan9 TZCNT 0(CX), DX -f3660fbd11|223344556677885f5f5f5f 32 intel lzcnt dx, word ptr [ecx] -f3660fbd11|223344556677885f5f5f5f 32 plan9 LZCNT 0(CX), DX -f3660fbd11|223344556677885f5f5f5f 64 gnu lzcnt (%rcx),%dx -f3660fbd11|223344556677885f5f5f5f 64 intel lzcnt dx, word ptr [rcx] -f3660fbd11|223344556677885f5f5f5f 64 plan9 LZCNT 0(CX), DX -f3f0673e660f38f111|22334455667788 32 intel lock movbe word ptr [bx+di*1], dx -f3f0673e660f38f111|22334455667788 32 plan9 REP; MOVBE DX, DS:0(BX)(DI*1) -f3f0673e660f38f111|22334455667788 64 gnu rep lock movbe %dx,%ds:(%ecx) -f3f0673e660f38f111|22334455667788 64 intel lock movbe word ptr [ecx], dx -f3f0673e660f38f111|22334455667788 64 plan9 REP; MOVBE DX, 0(CX) -f3f20f2b11|5f5f5f5f5f5f5f5f5f5f5f 32 intel movntsd qword ptr [ecx], xmm2 -f3f20f2b11|5f5f5f5f5f5f5f5f5f5f5f 32 plan9 REP; MOVNTSD X2, 0(CX) -f3f20f2b11|5f5f5f5f5f5f5f5f5f5f5f 64 gnu repn movntss %xmm2,(%rcx) -f3f20f2b11|5f5f5f5f5f5f5f5f5f5f5f 64 intel movntsd qword ptr [rcx], xmm2 -f3f20f2b11|5f5f5f5f5f5f5f5f5f5f5f 64 plan9 REP; MOVNTSD X2, 0(CX) -f4|11223344556677885f5f5f5f5f5f5f 32 intel hlt -f4|11223344556677885f5f5f5f5f5f5f 32 plan9 HLT -f4|11223344556677885f5f5f5f5f5f5f 64 gnu hlt -f4|11223344556677885f5f5f5f5f5f5f 64 intel hlt -f4|11223344556677885f5f5f5f5f5f5f 64 plan9 HLT -f5|11223344556677885f5f5f5f5f5f5f 32 intel cmc -f5|11223344556677885f5f5f5f5f5f5f 32 plan9 CMC -f5|11223344556677885f5f5f5f5f5f5f 64 gnu cmc -f5|11223344556677885f5f5f5f5f5f5f 64 intel cmc -f5|11223344556677885f5f5f5f5f5f5f 64 plan9 CMC -f60011|223344556677885f5f5f5f5f5f 32 intel test byte ptr [eax], 0x11 -f60011|223344556677885f5f5f5f5f5f 32 plan9 TESTB $0x11, 0(AX) -f60011|223344556677885f5f5f5f5f5f 64 gnu testb $0x11,(%rax) -f60011|223344556677885f5f5f5f5f5f 64 intel test byte ptr [rax], 0x11 -f60011|223344556677885f5f5f5f5f5f 64 plan9 TESTB $0x11, 0(AX) -f611|223344556677885f5f5f5f5f5f5f 32 intel not byte ptr [ecx] -f611|223344556677885f5f5f5f5f5f5f 32 plan9 NOTB 0(CX) -f611|223344556677885f5f5f5f5f5f5f 64 gnu notb (%rcx) -f611|223344556677885f5f5f5f5f5f5f 64 intel not byte ptr [rcx] -f611|223344556677885f5f5f5f5f5f5f 64 plan9 NOTB 0(CX) -f618|11223344556677885f5f5f5f5f5f 32 intel neg byte ptr [eax] -f618|11223344556677885f5f5f5f5f5f 32 plan9 NEGB 0(AX) -f618|11223344556677885f5f5f5f5f5f 64 gnu negb (%rax) -f618|11223344556677885f5f5f5f5f5f 64 intel neg byte ptr [rax] -f618|11223344556677885f5f5f5f5f5f 64 plan9 NEGB 0(AX) -f620|11223344556677885f5f5f5f5f5f 32 intel mul byte ptr [eax] -f620|11223344556677885f5f5f5f5f5f 32 plan9 MULB 0(AX) -f620|11223344556677885f5f5f5f5f5f 64 gnu mulb (%rax) -f620|11223344556677885f5f5f5f5f5f 64 intel mul byte ptr [rax] -f620|11223344556677885f5f5f5f5f5f 64 plan9 MULB 0(AX) -f628|11223344556677885f5f5f5f5f5f 32 intel imul byte ptr [eax] -f628|11223344556677885f5f5f5f5f5f 32 plan9 IMULB 0(AX) -f628|11223344556677885f5f5f5f5f5f 64 gnu imulb (%rax) -f628|11223344556677885f5f5f5f5f5f 64 intel imul byte ptr [rax] -f628|11223344556677885f5f5f5f5f5f 64 plan9 IMULB 0(AX) -f630|11223344556677885f5f5f5f5f5f 32 intel div byte ptr [eax] -f630|11223344556677885f5f5f5f5f5f 32 plan9 DIVB 0(AX) -f630|11223344556677885f5f5f5f5f5f 64 gnu divb (%rax) -f630|11223344556677885f5f5f5f5f5f 64 intel div byte ptr [rax] -f630|11223344556677885f5f5f5f5f5f 64 plan9 DIVB 0(AX) -f638|11223344556677885f5f5f5f5f5f 32 intel idiv byte ptr [eax] -f638|11223344556677885f5f5f5f5f5f 32 plan9 IDIVB 0(AX) -f638|11223344556677885f5f5f5f5f5f 64 gnu idivb (%rax) -f638|11223344556677885f5f5f5f5f5f 64 intel idiv byte ptr [rax] -f638|11223344556677885f5f5f5f5f5f 64 plan9 IDIVB 0(AX) -f70011223344|556677885f5f5f5f5f5f 32 intel test dword ptr [eax], 0x44332211 -f70011223344|556677885f5f5f5f5f5f 32 plan9 TESTL $0x44332211, 0(AX) -f70011223344|556677885f5f5f5f5f5f 64 gnu testl $0x44332211,(%rax) -f70011223344|556677885f5f5f5f5f5f 64 intel test dword ptr [rax], 0x44332211 -f70011223344|556677885f5f5f5f5f5f 64 plan9 TESTL $0x44332211, 0(AX) -f711|223344556677885f5f5f5f5f5f5f 32 intel not dword ptr [ecx] -f711|223344556677885f5f5f5f5f5f5f 32 plan9 NOTL 0(CX) -f711|223344556677885f5f5f5f5f5f5f 64 gnu notl (%rcx) -f711|223344556677885f5f5f5f5f5f5f 64 intel not dword ptr [rcx] -f711|223344556677885f5f5f5f5f5f5f 64 plan9 NOTL 0(CX) -f718|11223344556677885f5f5f5f5f5f 32 intel neg dword ptr [eax] -f718|11223344556677885f5f5f5f5f5f 32 plan9 NEGL 0(AX) -f718|11223344556677885f5f5f5f5f5f 64 gnu negl (%rax) -f718|11223344556677885f5f5f5f5f5f 64 intel neg dword ptr [rax] -f718|11223344556677885f5f5f5f5f5f 64 plan9 NEGL 0(AX) -f720|11223344556677885f5f5f5f5f5f 32 intel mul dword ptr [eax] -f720|11223344556677885f5f5f5f5f5f 32 plan9 MULL 0(AX) -f720|11223344556677885f5f5f5f5f5f 64 gnu mull (%rax) -f720|11223344556677885f5f5f5f5f5f 64 intel mul dword ptr [rax] -f720|11223344556677885f5f5f5f5f5f 64 plan9 MULL 0(AX) -f728|11223344556677885f5f5f5f5f5f 32 intel imul dword ptr [eax] -f728|11223344556677885f5f5f5f5f5f 32 plan9 IMULL 0(AX) -f728|11223344556677885f5f5f5f5f5f 64 gnu imull (%rax) -f728|11223344556677885f5f5f5f5f5f 64 intel imul dword ptr [rax] -f728|11223344556677885f5f5f5f5f5f 64 plan9 IMULL 0(AX) -f730|11223344556677885f5f5f5f5f5f 32 intel div dword ptr [eax] -f730|11223344556677885f5f5f5f5f5f 32 plan9 DIVL 0(AX) -f730|11223344556677885f5f5f5f5f5f 64 gnu divl (%rax) -f730|11223344556677885f5f5f5f5f5f 64 intel div dword ptr [rax] -f730|11223344556677885f5f5f5f5f5f 64 plan9 DIVL 0(AX) -f738|11223344556677885f5f5f5f5f5f 32 intel idiv dword ptr [eax] -f738|11223344556677885f5f5f5f5f5f 32 plan9 IDIVL 0(AX) -f738|11223344556677885f5f5f5f5f5f 64 gnu idivl (%rax) -f738|11223344556677885f5f5f5f5f5f 64 intel idiv dword ptr [rax] -f738|11223344556677885f5f5f5f5f5f 64 plan9 IDIVL 0(AX) -f8|11223344556677885f5f5f5f5f5f5f 32 intel clc -f8|11223344556677885f5f5f5f5f5f5f 32 plan9 CLC -f8|11223344556677885f5f5f5f5f5f5f 64 gnu clc -f8|11223344556677885f5f5f5f5f5f5f 64 intel clc -f8|11223344556677885f5f5f5f5f5f5f 64 plan9 CLC -f9|11223344556677885f5f5f5f5f5f5f 32 intel stc -f9|11223344556677885f5f5f5f5f5f5f 32 plan9 STC -f9|11223344556677885f5f5f5f5f5f5f 64 gnu stc -f9|11223344556677885f5f5f5f5f5f5f 64 intel stc -f9|11223344556677885f5f5f5f5f5f5f 64 plan9 STC -fa|11223344556677885f5f5f5f5f5f5f 32 intel cli -fa|11223344556677885f5f5f5f5f5f5f 32 plan9 CLI -fa|11223344556677885f5f5f5f5f5f5f 64 gnu cli -fa|11223344556677885f5f5f5f5f5f5f 64 intel cli -fa|11223344556677885f5f5f5f5f5f5f 64 plan9 CLI -fb|11223344556677885f5f5f5f5f5f5f 32 intel sti -fb|11223344556677885f5f5f5f5f5f5f 32 plan9 STI -fb|11223344556677885f5f5f5f5f5f5f 64 gnu sti -fb|11223344556677885f5f5f5f5f5f5f 64 intel sti -fb|11223344556677885f5f5f5f5f5f5f 64 plan9 STI -fc|11223344556677885f5f5f5f5f5f5f 32 intel cld -fc|11223344556677885f5f5f5f5f5f5f 32 plan9 CLD -fc|11223344556677885f5f5f5f5f5f5f 64 gnu cld -fc|11223344556677885f5f5f5f5f5f5f 64 intel cld -fc|11223344556677885f5f5f5f5f5f5f 64 plan9 CLD -fd|11223344556677885f5f5f5f5f5f5f 32 intel std -fd|11223344556677885f5f5f5f5f5f5f 32 plan9 STD -fd|11223344556677885f5f5f5f5f5f5f 64 gnu std -fd|11223344556677885f5f5f5f5f5f5f 64 intel std -fd|11223344556677885f5f5f5f5f5f5f 64 plan9 STD -fe00|11223344556677885f5f5f5f5f5f 32 intel inc byte ptr [eax] -fe00|11223344556677885f5f5f5f5f5f 32 plan9 INCB 0(AX) -fe00|11223344556677885f5f5f5f5f5f 64 gnu incb (%rax) -fe00|11223344556677885f5f5f5f5f5f 64 intel inc byte ptr [rax] -fe00|11223344556677885f5f5f5f5f5f 64 plan9 INCB 0(AX) -fe08|11223344556677885f5f5f5f5f5f 32 intel dec byte ptr [eax] -fe08|11223344556677885f5f5f5f5f5f 32 plan9 DECB 0(AX) -fe08|11223344556677885f5f5f5f5f5f 64 gnu decb (%rax) -fe08|11223344556677885f5f5f5f5f5f 64 intel dec byte ptr [rax] -fe08|11223344556677885f5f5f5f5f5f 64 plan9 DECB 0(AX) -ff00|11223344556677885f5f5f5f5f5f 32 intel inc dword ptr [eax] -ff00|11223344556677885f5f5f5f5f5f 32 plan9 INCL 0(AX) -ff00|11223344556677885f5f5f5f5f5f 64 gnu incl (%rax) -ff00|11223344556677885f5f5f5f5f5f 64 intel inc dword ptr [rax] -ff00|11223344556677885f5f5f5f5f5f 64 plan9 INCL 0(AX) -ff08|11223344556677885f5f5f5f5f5f 32 intel dec dword ptr [eax] -ff08|11223344556677885f5f5f5f5f5f 32 plan9 DECL 0(AX) -ff08|11223344556677885f5f5f5f5f5f 64 gnu decl (%rax) -ff08|11223344556677885f5f5f5f5f5f 64 intel dec dword ptr [rax] -ff08|11223344556677885f5f5f5f5f5f 64 plan9 DECL 0(AX) -ff11|223344556677885f5f5f5f5f5f5f 32 intel call dword ptr [ecx] -ff11|223344556677885f5f5f5f5f5f5f 32 plan9 CALL 0(CX) -ff18|11223344556677885f5f5f5f5f5f 32 intel call far ptr [eax] -ff18|11223344556677885f5f5f5f5f5f 32 plan9 LCALL 0(AX) -ff18|11223344556677885f5f5f5f5f5f 64 gnu lcallq *(%rax) -ff18|11223344556677885f5f5f5f5f5f 64 intel call far ptr [rax] -ff18|11223344556677885f5f5f5f5f5f 64 plan9 LCALL 0(AX) -ff20|11223344556677885f5f5f5f5f5f 32 intel jmp dword ptr [eax] -ff20|11223344556677885f5f5f5f5f5f 32 plan9 JMP 0(AX) -ff28|11223344556677885f5f5f5f5f5f 32 intel jmp far ptr [eax] -ff28|11223344556677885f5f5f5f5f5f 32 plan9 LJMP 0(AX) -ff28|11223344556677885f5f5f5f5f5f 64 gnu ljmpq *(%rax) -ff28|11223344556677885f5f5f5f5f5f 64 intel jmp far ptr [rax] -ff28|11223344556677885f5f5f5f5f5f 64 plan9 LJMP 0(AX) -ff30|11223344556677885f5f5f5f5f5f 32 intel push dword ptr [eax] -ff30|11223344556677885f5f5f5f5f5f 32 plan9 PUSHL 0(AX) -ff30|11223344556677885f5f5f5f5f5f 64 gnu pushq (%rax) -ff30|11223344556677885f5f5f5f5f5f 64 intel push qword ptr [rax] -ff30|11223344556677885f5f5f5f5f5f 64 plan9 PUSHQ 0(AX) -c5fe6f06|44556677885f5f5f5f5f5f5f 32 intel vmovdqu ymm0, ymmword ptr [esi] -c5fe6f06|44556677885f5f5f5f5f5f5f 32 plan9 VMOVDQU 0(SI), X0 -c5fe6f06|44556677885f5f5f5f5f5f5f 32 gnu vmovdqu (%esi),%ymm0 -c4227d2a0c36|6677885f5f5f5f5f5f5f 64 intel vmovntdqa ymm9, ymmword ptr [rsi+r14*1] -c4227d2a0c36|6677885f5f5f5f5f5f5f 64 plan9 VMOVNTDQA 0(SI)(R14*1), X9 -c4227d2a0c36|6677885f5f5f5f5f5f5f 64 gnu vmovntdqa (%rsi,%r14,1),%ymm9 -c57d7ff7|44556677885f5f5f5f5f5f5f 64 intel vmovdqa ymm7, ymm14 -c57d7ff7|44556677885f5f5f5f5f5f5f 64 plan9 VMOVDQA X14, X7 -c57d7ff7|44556677885f5f5f5f5f5f5f 64 gnu vmovdqa %ymm14,%ymm7 -66f3ab|223344556677885f5f5f5f5f5f 64 gnu rep stos %ax,%es:(%rdi) -66f3ab|223344556677885f5f5f5f5f5f 64 intel rep stosw word ptr [rdi] -66f3ab|223344556677885f5f5f5f5f5f 64 plan9 REP; STOSW AX, ES:0(DI) -f348a5|223344556677885f5f5f5f5f5f 64 gnu rep movsq %ds:(%rsi),%es:(%rdi) -f348a5|223344556677885f5f5f5f5f5f 64 intel rep movsq qword ptr [rdi], qword ptr [rsi] -f348a5|223344556677885f5f5f5f5f5f 64 plan9 REP; MOVSQ DS:0(SI), ES:0(DI) -f348ab|223344556677885f5f5f5f5f5f 64 gnu rep stos %rax,%es:(%rdi) -f348ab|223344556677885f5f5f5f5f5f 64 intel rep stosq qword ptr [rdi] -f348ab|223344556677885f5f5f5f5f5f 64 plan9 REP; STOSQ AX, ES:0(DI) -f3a4|11223344556677885f5f5f5f5f5f 32 gnu rep movsb %ds:(%esi),%es:(%edi) -f3a4|11223344556677885f5f5f5f5f5f 32 gnu rep movsb %ds:(%esi),%es:(%edi) -f3a4|11223344556677885f5f5f5f5f5f 32 intel rep movsb byte ptr [edi], byte ptr [esi] -f3a4|11223344556677885f5f5f5f5f5f 32 plan9 REP; MOVSB DS:0(SI), ES:0(DI) -f3a4|11223344556677885f5f5f5f5f5f 64 gnu rep movsb %ds:(%rsi),%es:(%rdi) -f3a4|11223344556677885f5f5f5f5f5f 64 intel rep movsb byte ptr [rdi], byte ptr [rsi] -f3a4|11223344556677885f5f5f5f5f5f 64 plan9 REP; MOVSB DS:0(SI), ES:0(DI) -f3a5|11223344556677885f5f5f5f5f5f 32 gnu rep movsl %ds:(%esi),%es:(%edi) -f3a5|11223344556677885f5f5f5f5f5f 32 intel rep movsd dword ptr [edi], dword ptr [esi] -f3a5|11223344556677885f5f5f5f5f5f 32 plan9 REP; MOVSD DS:0(SI), ES:0(DI) -f3a5|11223344556677885f5f5f5f5f5f 64 gnu rep movsl %ds:(%rsi),%es:(%rdi) -f3a5|11223344556677885f5f5f5f5f5f 64 intel rep movsd dword ptr [rdi], dword ptr [rsi] -f3a5|11223344556677885f5f5f5f5f5f 64 plan9 REP; MOVSD DS:0(SI), ES:0(DI) -f3a6|11223344556677885f5f5f5f5f5f 64 gnu rep cmpsb %es:(%rdi),%ds:(%rsi) -f3a6|11223344556677885f5f5f5f5f5f 64 intel rep cmpsb byte ptr [rsi], byte ptr [rdi] -f3a6|11223344556677885f5f5f5f5f5f 64 plan9 REP; CMPSB ES:0(DI), DS:0(SI) -f3ab|11223344556677885f5f5f5f5f5f 32 gnu rep stos %eax,%es:(%edi) -f3ab|11223344556677885f5f5f5f5f5f 32 intel rep stosd dword ptr [edi] -f3ab|11223344556677885f5f5f5f5f5f 32 plan9 REP; STOSD AX, ES:0(DI) -f201c1|223344556677885f5f5f5f5f5f 64 plan9 REPNE; ADDL AX, CX diff --git a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/testdata/libmach8db.c b/src/cmd/vendor/golang.org/x/arch/x86/x86asm/testdata/libmach8db.c deleted file mode 100644 index 90ace5241d..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/testdata/libmach8db.c +++ /dev/null @@ -1,2075 +0,0 @@ -// 9c libmach8db.c && 9l -o libmach8db libmach8db.o; rm libmach8db.o - -// Libmach-based disassembler for use in reference tests. - -// Inferno libmach/8db.c -// http://code.google.com/p/inferno-os/source/browse/utils/libmach/8db.c -// -// Copyright © 1994-1999 Lucent Technologies Inc. -// Power PC support Copyright © 1995-2004 C H Forsyth (forsyth@terzarima.net). -// Portions Copyright © 1997-1999 Vita Nuova Limited. -// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com). -// Revisions Copyright © 2000-2004 Lucent Technologies Inc. and others. -// Portions Copyright © 2009 The Go Authors. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#include -#include -#include - -typedef struct Map Map; -struct Map -{ - int (*get1)(Map*, uvlong, uchar*, int); - uchar *p; - uchar *ep; - uchar *startp; - uvlong startpc; -}; - -static int -get1(Map *m, uvlong addr, uchar *p, int n) -{ - return m->get1(m, addr, p, n); -} - -/* - * i386-specific debugger interface - * also amd64 extensions - */ - -static int i386inst(Map*, uvlong, int, char, char*, int); -//static int i386das(Map*, uvlong, char*, int); -//static int i386instlen(Map*, uvlong); - - /* I386/486 - Disassembler and related functions */ - -/* - * an instruction - */ -typedef struct Instr Instr; -struct Instr -{ - uchar mem[1+1+1+1+2+1+1+4+4]; /* raw instruction */ - uvlong addr; /* address of start of instruction */ - int n; /* number of bytes in instruction */ - char *prefix; /* instr prefix */ - char *segment; /* segment override */ - uchar jumptype; /* set to the operand type for jump/ret/call */ - uchar amd64; - uchar rex; /* REX prefix (or zero) */ - uchar op; - char osize; /* 'W' or 'L' (or 'Q' on amd64) */ - char asize; /* address size 'W' or 'L' (or 'Q' or amd64) */ - uchar mod; /* bits 6-7 of mod r/m field */ - uchar reg; /* bits 3-5 of mod r/m field */ - char ss; /* bits 6-7 of SIB */ - schar index; /* bits 3-5 of SIB */ - schar base; /* bits 0-2 of SIB */ - char rip; /* RIP-relative in amd64 mode */ - uchar opre; /* f2/f3 could introduce media */ - short seg; /* segment of far address */ - uint32 disp; /* displacement */ - uint32 imm; /* immediate */ - uint32 imm2; /* second immediate operand */ - uvlong imm64; /* big immediate */ - char *curr; /* fill level in output buffer */ - char *end; /* end of output buffer */ - char *err; /* error message */ -}; - - /* 386 register (ha!) set */ -enum{ - AX=0, - CX, - DX, - BX, - SP, - BP, - SI, - DI, - - /* amd64 */ - /* be careful: some unix system headers #define R8, R9, etc */ - AMD64_R8, - AMD64_R9, - AMD64_R10, - AMD64_R11, - AMD64_R12, - AMD64_R13, - AMD64_R14, - AMD64_R15 -}; - - /* amd64 rex extension byte */ -enum{ - REXW = 1<<3, /* =1, 64-bit operand size */ - REXR = 1<<2, /* extend modrm reg */ - REXX = 1<<1, /* extend sib index */ - REXB = 1<<0 /* extend modrm r/m, sib base, or opcode reg */ -}; - - /* Operand Format codes */ -/* -%A - address size register modifier (!asize -> 'E') -%C - Control register CR0/CR1/CR2 -%D - Debug register DR0/DR1/DR2/DR3/DR6/DR7 -%I - second immediate operand -%O - Operand size register modifier (!osize -> 'E') -%T - Test register TR6/TR7 -%S - size code ('W' or 'L') -%W - Weird opcode: OSIZE == 'W' => "CBW"; else => "CWDE" -%d - displacement 16-32 bits -%e - effective address - Mod R/M value -%f - floating point register F0-F7 - from Mod R/M register -%g - segment register -%i - immediate operand 8-32 bits -%o - register from opcode and REX.B -%p - PC-relative - signed displacement in immediate field -%r - Reg from Mod R/M -%w - Weird opcode: OSIZE == 'W' => "CWD"; else => "CDQ" -*/ - -typedef struct Optable Optable; -struct Optable -{ - char operand[2]; - void *proto; /* actually either (char*) or (Optable*) */ -}; - /* Operand decoding codes */ -enum { - Ib = 1, /* 8-bit immediate - (no sign extension)*/ - Ibs, /* 8-bit immediate (sign extended) */ - Jbs, /* 8-bit sign-extended immediate in jump or call */ - Iw, /* 16-bit immediate -> imm */ - Iw2, /* 16-bit immediate -> imm2 */ - Iwd, /* Operand-sized immediate (no sign extension)*/ - Iwdq, /* Operand-sized immediate, possibly 64 bits */ - Awd, /* Address offset */ - Iwds, /* Operand-sized immediate (sign extended) */ - RM, /* Word or int32 R/M field with register (/r) */ - RMB, /* Byte R/M field with register (/r) */ - RMOP, /* Word or int32 R/M field with op code (/digit) */ - RMOPB, /* Byte R/M field with op code (/digit) */ - RMR, /* R/M register only (mod = 11) */ - RMM, /* R/M memory only (mod = 0/1/2) */ - Op_R0, /* Base reg of Mod R/M is literal 0x00 */ - Op_R1, /* Base reg of Mod R/M is literal 0x01 */ - FRMOP, /* Floating point R/M field with opcode */ - FRMEX, /* Extended floating point R/M field with opcode */ - JUMP, /* Jump or Call flag - no operand */ - RET, /* Return flag - no operand */ - OA, /* literal 0x0a byte */ - PTR, /* Seg:Displacement addr (ptr16:16 or ptr16:32) */ - AUX, /* Multi-byte op code - Auxiliary table */ - AUXMM, /* multi-byte op code - auxiliary table chosen by prefix */ - PRE, /* Instr Prefix */ - OPRE, /* Instr Prefix or media op extension */ - SEG, /* Segment Prefix */ - OPOVER, /* Operand size override */ - ADDOVER, /* Address size override */ -}; - -static Optable optab0F00[8]= -{ -[0x00] = { 0,0, "MOVW LDT,%e" }, -[0x01] = { 0,0, "MOVW TR,%e" }, -[0x02] = { 0,0, "MOVW %e,LDT" }, -[0x03] = { 0,0, "MOVW %e,TR" }, -[0x04] = { 0,0, "VERR %e" }, -[0x05] = { 0,0, "VERW %e" }, -}; - -static Optable optab0F01[8]= -{ -[0x00] = { 0,0, "MOVL GDTR,%e" }, -[0x01] = { 0,0, "MOVL IDTR,%e" }, -[0x02] = { 0,0, "MOVL %e,GDTR" }, -[0x03] = { 0,0, "MOVL %e,IDTR" }, -[0x04] = { 0,0, "MOVW MSW,%e" }, /* word */ -[0x06] = { 0,0, "MOVW %e,MSW" }, /* word */ -[0x07] = { 0,0, "INVLPG %e" }, /* or SWAPGS */ -}; - -static Optable optab0F01F8[1]= -{ -[0x00] = { 0,0, "SWAPGS" }, -}; - -/* 0F71 */ -/* 0F72 */ -/* 0F73 */ - -static Optable optab0FAE[8]= -{ -[0x00] = { 0,0, "FXSAVE %e" }, -[0x01] = { 0,0, "FXRSTOR %e" }, -[0x02] = { 0,0, "LDMXCSR %e" }, -[0x03] = { 0,0, "STMXCSR %e" }, -[0x05] = { 0,0, "LFENCE" }, -[0x06] = { 0,0, "MFENCE" }, -[0x07] = { 0,0, "SFENCE" }, -}; - -/* 0F18 */ -/* 0F0D */ - -static Optable optab0FBA[8]= -{ -[0x04] = { Ib,0, "BT%S %i,%e" }, -[0x05] = { Ib,0, "BTS%S %i,%e" }, -[0x06] = { Ib,0, "BTR%S %i,%e" }, -[0x07] = { Ib,0, "BTC%S %i,%e" }, -}; - -static Optable optab0F0F[256]= -{ -[0x0c] = { 0,0, "PI2FW %m,%M" }, -[0x0d] = { 0,0, "PI2L %m,%M" }, -[0x1c] = { 0,0, "PF2IW %m,%M" }, -[0x1d] = { 0,0, "PF2IL %m,%M" }, -[0x8a] = { 0,0, "PFNACC %m,%M" }, -[0x8e] = { 0,0, "PFPNACC %m,%M" }, -[0x90] = { 0,0, "PFCMPGE %m,%M" }, -[0x94] = { 0,0, "PFMIN %m,%M" }, -[0x96] = { 0,0, "PFRCP %m,%M" }, -[0x97] = { 0,0, "PFRSQRT %m,%M" }, -[0x9a] = { 0,0, "PFSUB %m,%M" }, -[0x9e] = { 0,0, "PFADD %m,%M" }, -[0xa0] = { 0,0, "PFCMPGT %m,%M" }, -[0xa4] = { 0,0, "PFMAX %m,%M" }, -[0xa6] = { 0,0, "PFRCPIT1 %m,%M" }, -[0xa7] = { 0,0, "PFRSQIT1 %m,%M" }, -[0xaa] = { 0,0, "PFSUBR %m,%M" }, -[0xae] = { 0,0, "PFACC %m,%M" }, -[0xb0] = { 0,0, "PFCMPEQ %m,%M" }, -[0xb4] = { 0,0, "PFMUL %m,%M" }, -[0xb6] = { 0,0, "PFRCPI2T %m,%M" }, -[0xb7] = { 0,0, "PMULHRW %m,%M" }, -[0xbb] = { 0,0, "PSWAPL %m,%M" }, -}; - -static Optable optab0FC7[8]= -{ -[0x01] = { 0,0, "CMPXCHG8B %e" }, -}; - -static Optable optab660F71[8]= -{ -[0x02] = { Ib,0, "PSRLW %i,%X" }, -[0x04] = { Ib,0, "PSRAW %i,%X" }, -[0x06] = { Ib,0, "PSLLW %i,%X" }, -}; - -static Optable optab660F72[8]= -{ -[0x02] = { Ib,0, "PSRLL %i,%X" }, -[0x04] = { Ib,0, "PSRAL %i,%X" }, -[0x06] = { Ib,0, "PSLLL %i,%X" }, -}; - -static Optable optab660F73[8]= -{ -[0x02] = { Ib,0, "PSRLQ %i,%X" }, -[0x03] = { Ib,0, "PSRLO %i,%X" }, -[0x06] = { Ib,0, "PSLLQ %i,%X" }, -[0x07] = { Ib,0, "PSLLO %i,%X" }, -}; - -static Optable optab660F[256]= -{ -[0x2B] = { RM,0, "MOVNTPD %x,%e" }, -[0x2E] = { RM,0, "UCOMISD %x,%X" }, -[0x2F] = { RM,0, "COMISD %x,%X" }, -[0x5A] = { RM,0, "CVTPD2PS %x,%X" }, -[0x5B] = { RM,0, "CVTPS2PL %x,%X" }, -[0x6A] = { RM,0, "PUNPCKHLQ %x,%X" }, -[0x6B] = { RM,0, "PACKSSLW %x,%X" }, -[0x6C] = { RM,0, "PUNPCKLQDQ %x,%X" }, -[0x6D] = { RM,0, "PUNPCKHQDQ %x,%X" }, -[0x6E] = { RM,0, "MOV%S %e,%X" }, -[0x6F] = { RM,0, "MOVO %x,%X" }, /* MOVDQA */ -[0x70] = { RM,Ib, "PSHUFL %i,%x,%X" }, -[0x71] = { RMOP,0, optab660F71 }, -[0x72] = { RMOP,0, optab660F72 }, -[0x73] = { RMOP,0, optab660F73 }, -[0x7E] = { RM,0, "MOV%S %X,%e" }, -[0x7F] = { RM,0, "MOVO %X,%x" }, -[0xC4] = { RM,Ib, "PINSRW %i,%e,%X" }, -[0xC5] = { RMR,Ib, "PEXTRW %i,%X,%e" }, -[0xD4] = { RM,0, "PADDQ %x,%X" }, -[0xD5] = { RM,0, "PMULLW %x,%X" }, -[0xD6] = { RM,0, "MOVQ %X,%x" }, -[0xE6] = { RM,0, "CVTTPD2PL %x,%X" }, -[0xE7] = { RM,0, "MOVNTO %X,%e" }, -[0xF7] = { RM,0, "MASKMOVOU %x,%X" }, -}; - -static Optable optabF20F[256]= -{ -[0x10] = { RM,0, "MOVSD %x,%X" }, -[0x11] = { RM,0, "MOVSD %X,%x" }, -[0x2A] = { RM,0, "CVTS%S2SD %e,%X" }, -[0x2C] = { RM,0, "CVTTSD2S%S %x,%r" }, -[0x2D] = { RM,0, "CVTSD2S%S %x,%r" }, -[0x5A] = { RM,0, "CVTSD2SS %x,%X" }, -[0x6F] = { RM,0, "MOVOU %x,%X" }, -[0x70] = { RM,Ib, "PSHUFLW %i,%x,%X" }, -[0x7F] = { RM,0, "MOVOU %X,%x" }, -[0xD6] = { RM,0, "MOVQOZX %M,%X" }, -[0xE6] = { RM,0, "CVTPD2PL %x,%X" }, -}; - -static Optable optabF30F[256]= -{ -[0x10] = { RM,0, "MOVSS %x,%X" }, -[0x11] = { RM,0, "MOVSS %X,%x" }, -[0x2A] = { RM,0, "CVTS%S2SS %e,%X" }, -[0x2C] = { RM,0, "CVTTSS2S%S %x,%r" }, -[0x2D] = { RM,0, "CVTSS2S%S %x,%r" }, -[0x5A] = { RM,0, "CVTSS2SD %x,%X" }, -[0x5B] = { RM,0, "CVTTPS2PL %x,%X" }, -[0x6F] = { RM,0, "MOVOU %x,%X" }, -[0x70] = { RM,Ib, "PSHUFHW %i,%x,%X" }, -[0x7E] = { RM,0, "MOVQOZX %x,%X" }, -[0x7F] = { RM,0, "MOVOU %X,%x" }, -[0xD6] = { RM,0, "MOVQOZX %m*,%X" }, -[0xE6] = { RM,0, "CVTPL2PD %x,%X" }, -}; - -static Optable optab0F[256]= -{ -[0x00] = { RMOP,0, optab0F00 }, -[0x01] = { RMOP,0, optab0F01 }, -[0x02] = { RM,0, "LAR %e,%r" }, -[0x03] = { RM,0, "LSL %e,%r" }, -[0x05] = { 0,0, "SYSCALL" }, -[0x06] = { 0,0, "CLTS" }, -[0x07] = { 0,0, "SYSRET" }, -[0x08] = { 0,0, "INVD" }, -[0x09] = { 0,0, "WBINVD" }, -[0x0B] = { 0,0, "UD2" }, -[0x0F] = { RM,AUX, optab0F0F }, /* 3DNow! */ -[0x10] = { RM,0, "MOVU%s %x,%X" }, -[0x11] = { RM,0, "MOVU%s %X,%x" }, -[0x12] = { RM,0, "MOV[H]L%s %x,%X" }, /* TO DO: H if source is XMM */ -[0x13] = { RM,0, "MOVL%s %X,%e" }, -[0x14] = { RM,0, "UNPCKL%s %x,%X" }, -[0x15] = { RM,0, "UNPCKH%s %x,%X" }, -[0x16] = { RM,0, "MOV[L]H%s %x,%X" }, /* TO DO: L if source is XMM */ -[0x17] = { RM,0, "MOVH%s %X,%x" }, -[0x1F] = { RM,0, "NOP%S %e" }, -[0x20] = { RMR,0, "MOVL %C,%e" }, -[0x21] = { RMR,0, "MOVL %D,%e" }, -[0x22] = { RMR,0, "MOVL %e,%C" }, -[0x23] = { RMR,0, "MOVL %e,%D" }, -[0x24] = { RMR,0, "MOVL %T,%e" }, -[0x26] = { RMR,0, "MOVL %e,%T" }, -[0x28] = { RM,0, "MOVA%s %x,%X" }, -[0x29] = { RM,0, "MOVA%s %X,%x" }, -[0x2A] = { RM,0, "CVTPL2%s %m*,%X" }, -[0x2B] = { RM,0, "MOVNT%s %X,%e" }, -[0x2C] = { RM,0, "CVTT%s2PL %x,%M" }, -[0x2D] = { RM,0, "CVT%s2PL %x,%M" }, -[0x2E] = { RM,0, "UCOMISS %x,%X" }, -[0x2F] = { RM,0, "COMISS %x,%X" }, -[0x30] = { 0,0, "WRMSR" }, -[0x31] = { 0,0, "RDTSC" }, -[0x32] = { 0,0, "RDMSR" }, -[0x33] = { 0,0, "RDPMC" }, -[0x42] = { RM,0, "CMOVC %e,%r" }, /* CF */ -[0x43] = { RM,0, "CMOVNC %e,%r" }, /* ¬ CF */ -[0x44] = { RM,0, "CMOVZ %e,%r" }, /* ZF */ -[0x45] = { RM,0, "CMOVNZ %e,%r" }, /* ¬ ZF */ -[0x46] = { RM,0, "CMOVBE %e,%r" }, /* CF ∨ ZF */ -[0x47] = { RM,0, "CMOVA %e,%r" }, /* ¬CF ∧ ¬ZF */ -[0x48] = { RM,0, "CMOVS %e,%r" }, /* SF */ -[0x49] = { RM,0, "CMOVNS %e,%r" }, /* ¬ SF */ -[0x4A] = { RM,0, "CMOVP %e,%r" }, /* PF */ -[0x4B] = { RM,0, "CMOVNP %e,%r" }, /* ¬ PF */ -[0x4C] = { RM,0, "CMOVLT %e,%r" }, /* LT ≡ OF ≠ SF */ -[0x4D] = { RM,0, "CMOVGE %e,%r" }, /* GE ≡ ZF ∨ SF */ -[0x4E] = { RM,0, "CMOVLE %e,%r" }, /* LE ≡ ZF ∨ LT */ -[0x4F] = { RM,0, "CMOVGT %e,%r" }, /* GT ≡ ¬ZF ∧ GE */ -[0x50] = { RM,0, "MOVMSK%s %X,%r" }, /* TO DO: check */ -[0x51] = { RM,0, "SQRT%s %x,%X" }, -[0x52] = { RM,0, "RSQRT%s %x,%X" }, -[0x53] = { RM,0, "RCP%s %x,%X" }, -[0x54] = { RM,0, "AND%s %x,%X" }, -[0x55] = { RM,0, "ANDN%s %x,%X" }, -[0x56] = { RM,0, "OR%s %x,%X" }, /* TO DO: S/D */ -[0x57] = { RM,0, "XOR%s %x,%X" }, /* S/D */ -[0x58] = { RM,0, "ADD%s %x,%X" }, /* S/P S/D */ -[0x59] = { RM,0, "MUL%s %x,%X" }, -[0x5A] = { RM,0, "CVTPS2PD %x,%X" }, -[0x5B] = { RM,0, "CVTPL2PS %x,%X" }, -[0x5C] = { RM,0, "SUB%s %x,%X" }, -[0x5D] = { RM,0, "MIN%s %x,%X" }, -[0x5E] = { RM,0, "DIV%s %x,%X" }, /* TO DO: S/P S/D */ -[0x5F] = { RM,0, "MAX%s %x,%X" }, -[0x60] = { RM,0, "PUNPCKLBW %m,%M" }, -[0x61] = { RM,0, "PUNPCKLWL %m,%M" }, -[0x62] = { RM,0, "PUNPCKLLQ %m,%M" }, -[0x63] = { RM,0, "PACKSSWB %m,%M" }, -[0x64] = { RM,0, "PCMPGTB %m,%M" }, -[0x65] = { RM,0, "PCMPGTW %m,%M" }, -[0x66] = { RM,0, "PCMPGTL %m,%M" }, -[0x67] = { RM,0, "PACKUSWB %m,%M" }, -[0x68] = { RM,0, "PUNPCKHBW %m,%M" }, -[0x69] = { RM,0, "PUNPCKHWL %m,%M" }, -[0x6A] = { RM,0, "PUNPCKHLQ %m,%M" }, -[0x6B] = { RM,0, "PACKSSLW %m,%M" }, -[0x6E] = { RM,0, "MOV%S %e,%M" }, -[0x6F] = { RM,0, "MOVQ %m,%M" }, -[0x70] = { RM,Ib, "PSHUFW %i,%m,%M" }, -[0x74] = { RM,0, "PCMPEQB %m,%M" }, -[0x75] = { RM,0, "PCMPEQW %m,%M" }, -[0x76] = { RM,0, "PCMPEQL %m,%M" }, -[0x77] = { 0,0, "EMMS" }, -[0x7E] = { RM,0, "MOV%S %M,%e" }, -[0x7F] = { RM,0, "MOVQ %M,%m" }, -[0xAE] = { RMOP,0, optab0FAE }, -[0xAA] = { 0,0, "RSM" }, -[0xB0] = { RM,0, "CMPXCHGB %r,%e" }, -[0xB1] = { RM,0, "CMPXCHG%S %r,%e" }, -[0xC0] = { RMB,0, "XADDB %r,%e" }, -[0xC1] = { RM,0, "XADD%S %r,%e" }, -[0xC2] = { RM,Ib, "CMP%s %x,%X,%#i" }, -[0xC3] = { RM,0, "MOVNTI%S %r,%e" }, -[0xC6] = { RM,Ib, "SHUF%s %i,%x,%X" }, -[0xC8] = { 0,0, "BSWAP AX" }, -[0xC9] = { 0,0, "BSWAP CX" }, -[0xCA] = { 0,0, "BSWAP DX" }, -[0xCB] = { 0,0, "BSWAP BX" }, -[0xCC] = { 0,0, "BSWAP SP" }, -[0xCD] = { 0,0, "BSWAP BP" }, -[0xCE] = { 0,0, "BSWAP SI" }, -[0xCF] = { 0,0, "BSWAP DI" }, -[0xD1] = { RM,0, "PSRLW %m,%M" }, -[0xD2] = { RM,0, "PSRLL %m,%M" }, -[0xD3] = { RM,0, "PSRLQ %m,%M" }, -[0xD5] = { RM,0, "PMULLW %m,%M" }, -[0xD6] = { RM,0, "MOVQOZX %m*,%X" }, -[0xD7] = { RM,0, "PMOVMSKB %m,%r" }, -[0xD8] = { RM,0, "PSUBUSB %m,%M" }, -[0xD9] = { RM,0, "PSUBUSW %m,%M" }, -[0xDA] = { RM,0, "PMINUB %m,%M" }, -[0xDB] = { RM,0, "PAND %m,%M" }, -[0xDC] = { RM,0, "PADDUSB %m,%M" }, -[0xDD] = { RM,0, "PADDUSW %m,%M" }, -[0xDE] = { RM,0, "PMAXUB %m,%M" }, -[0xDF] = { RM,0, "PANDN %m,%M" }, -[0xE0] = { RM,0, "PAVGB %m,%M" }, -[0xE1] = { RM,0, "PSRAW %m,%M" }, -[0xE2] = { RM,0, "PSRAL %m,%M" }, -[0xE3] = { RM,0, "PAVGW %m,%M" }, -[0xE4] = { RM,0, "PMULHUW %m,%M" }, -[0xE5] = { RM,0, "PMULHW %m,%M" }, -[0xE7] = { RM,0, "MOVNTQ %M,%e" }, -[0xE8] = { RM,0, "PSUBSB %m,%M" }, -[0xE9] = { RM,0, "PSUBSW %m,%M" }, -[0xEA] = { RM,0, "PMINSW %m,%M" }, -[0xEB] = { RM,0, "POR %m,%M" }, -[0xEC] = { RM,0, "PADDSB %m,%M" }, -[0xED] = { RM,0, "PADDSW %m,%M" }, -[0xEE] = { RM,0, "PMAXSW %m,%M" }, -[0xEF] = { RM,0, "PXOR %m,%M" }, -[0xF1] = { RM,0, "PSLLW %m,%M" }, -[0xF2] = { RM,0, "PSLLL %m,%M" }, -[0xF3] = { RM,0, "PSLLQ %m,%M" }, -[0xF4] = { RM,0, "PMULULQ %m,%M" }, -[0xF5] = { RM,0, "PMADDWL %m,%M" }, -[0xF6] = { RM,0, "PSADBW %m,%M" }, -[0xF7] = { RMR,0, "MASKMOVQ %m,%M" }, -[0xF8] = { RM,0, "PSUBB %m,%M" }, -[0xF9] = { RM,0, "PSUBW %m,%M" }, -[0xFA] = { RM,0, "PSUBL %m,%M" }, -[0xFC] = { RM,0, "PADDB %m,%M" }, -[0xFD] = { RM,0, "PADDW %m,%M" }, -[0xFE] = { RM,0, "PADDL %m,%M" }, - -[0x80] = { Iwds,0, "JOS %p" }, -[0x81] = { Iwds,0, "JOC %p" }, -[0x82] = { Iwds,0, "JCS %p" }, -[0x83] = { Iwds,0, "JCC %p" }, -[0x84] = { Iwds,0, "JEQ %p" }, -[0x85] = { Iwds,0, "JNE %p" }, -[0x86] = { Iwds,0, "JLS %p" }, -[0x87] = { Iwds,0, "JHI %p" }, -[0x88] = { Iwds,0, "JMI %p" }, -[0x89] = { Iwds,0, "JPL %p" }, -[0x8a] = { Iwds,0, "JPS %p" }, -[0x8b] = { Iwds,0, "JPC %p" }, -[0x8c] = { Iwds,0, "JLT %p" }, -[0x8d] = { Iwds,0, "JGE %p" }, -[0x8e] = { Iwds,0, "JLE %p" }, -[0x8f] = { Iwds,0, "JGT %p" }, -[0x90] = { RMB,0, "SETOS %e" }, -[0x91] = { RMB,0, "SETOC %e" }, -[0x92] = { RMB,0, "SETCS %e" }, -[0x93] = { RMB,0, "SETCC %e" }, -[0x94] = { RMB,0, "SETEQ %e" }, -[0x95] = { RMB,0, "SETNE %e" }, -[0x96] = { RMB,0, "SETLS %e" }, -[0x97] = { RMB,0, "SETHI %e" }, -[0x98] = { RMB,0, "SETMI %e" }, -[0x99] = { RMB,0, "SETPL %e" }, -[0x9a] = { RMB,0, "SETPS %e" }, -[0x9b] = { RMB,0, "SETPC %e" }, -[0x9c] = { RMB,0, "SETLT %e" }, -[0x9d] = { RMB,0, "SETGE %e" }, -[0x9e] = { RMB,0, "SETLE %e" }, -[0x9f] = { RMB,0, "SETGT %e" }, -[0xa0] = { 0,0, "PUSHL FS" }, -[0xa1] = { 0,0, "POPL FS" }, -[0xa2] = { 0,0, "CPUID" }, -[0xa3] = { RM,0, "BT%S %r,%e" }, -[0xa4] = { RM,Ib, "SHLD%S %r,%i,%e" }, -[0xa5] = { RM,0, "SHLD%S %r,CL,%e" }, -[0xa8] = { 0,0, "PUSHL GS" }, -[0xa9] = { 0,0, "POPL GS" }, -[0xab] = { RM,0, "BTS%S %r,%e" }, -[0xac] = { RM,Ib, "SHRD%S %r,%i,%e" }, -[0xad] = { RM,0, "SHRD%S %r,CL,%e" }, -[0xaf] = { RM,0, "IMUL%S %e,%r" }, -[0xb2] = { RMM,0, "LSS %e,%r" }, -[0xb3] = { RM,0, "BTR%S %r,%e" }, -[0xb4] = { RMM,0, "LFS %e,%r" }, -[0xb5] = { RMM,0, "LGS %e,%r" }, -[0xb6] = { RMB,0, "MOVBZX %e,%R" }, -[0xb7] = { RM,0, "MOVWZX %e,%R" }, -[0xba] = { RMOP,0, optab0FBA }, -[0xbb] = { RM,0, "BTC%S %e,%r" }, -[0xbc] = { RM,0, "BSF%S %e,%r" }, -[0xbd] = { RM,0, "BSR%S %e,%r" }, -[0xbe] = { RMB,0, "MOVBSX %e,%R" }, -[0xbf] = { RM,0, "MOVWSX %e,%R" }, -[0xc7] = { RMOP,0, optab0FC7 }, -}; - -static Optable optab80[8]= -{ -[0x00] = { Ib,0, "ADDB %i,%e" }, -[0x01] = { Ib,0, "ORB %i,%e" }, -[0x02] = { Ib,0, "ADCB %i,%e" }, -[0x03] = { Ib,0, "SBBB %i,%e" }, -[0x04] = { Ib,0, "ANDB %i,%e" }, -[0x05] = { Ib,0, "SUBB %i,%e" }, -[0x06] = { Ib,0, "XORB %i,%e" }, -[0x07] = { Ib,0, "CMPB %e,%i" }, -}; - -static Optable optab81[8]= -{ -[0x00] = { Iwd,0, "ADD%S %i,%e" }, -[0x01] = { Iwd,0, "OR%S %i,%e" }, -[0x02] = { Iwd,0, "ADC%S %i,%e" }, -[0x03] = { Iwd,0, "SBB%S %i,%e" }, -[0x04] = { Iwd,0, "AND%S %i,%e" }, -[0x05] = { Iwd,0, "SUB%S %i,%e" }, -[0x06] = { Iwd,0, "XOR%S %i,%e" }, -[0x07] = { Iwd,0, "CMP%S %e,%i" }, -}; - -static Optable optab83[8]= -{ -[0x00] = { Ibs,0, "ADD%S %i,%e" }, -[0x01] = { Ibs,0, "OR%S %i,%e" }, -[0x02] = { Ibs,0, "ADC%S %i,%e" }, -[0x03] = { Ibs,0, "SBB%S %i,%e" }, -[0x04] = { Ibs,0, "AND%S %i,%e" }, -[0x05] = { Ibs,0, "SUB%S %i,%e" }, -[0x06] = { Ibs,0, "XOR%S %i,%e" }, -[0x07] = { Ibs,0, "CMP%S %e,%i" }, -}; - -static Optable optabC0[8] = -{ -[0x00] = { Ib,0, "ROLB %i,%e" }, -[0x01] = { Ib,0, "RORB %i,%e" }, -[0x02] = { Ib,0, "RCLB %i,%e" }, -[0x03] = { Ib,0, "RCRB %i,%e" }, -[0x04] = { Ib,0, "SHLB %i,%e" }, -[0x05] = { Ib,0, "SHRB %i,%e" }, -[0x07] = { Ib,0, "SARB %i,%e" }, -}; - -static Optable optabC1[8] = -{ -[0x00] = { Ib,0, "ROL%S %i,%e" }, -[0x01] = { Ib,0, "ROR%S %i,%e" }, -[0x02] = { Ib,0, "RCL%S %i,%e" }, -[0x03] = { Ib,0, "RCR%S %i,%e" }, -[0x04] = { Ib,0, "SHL%S %i,%e" }, -[0x05] = { Ib,0, "SHR%S %i,%e" }, -[0x07] = { Ib,0, "SAR%S %i,%e" }, -}; - -static Optable optabD0[8] = -{ -[0x00] = { 0,0, "ROLB %e" }, -[0x01] = { 0,0, "RORB %e" }, -[0x02] = { 0,0, "RCLB %e" }, -[0x03] = { 0,0, "RCRB %e" }, -[0x04] = { 0,0, "SHLB %e" }, -[0x05] = { 0,0, "SHRB %e" }, -[0x07] = { 0,0, "SARB %e" }, -}; - -static Optable optabD1[8] = -{ -[0x00] = { 0,0, "ROL%S %e" }, -[0x01] = { 0,0, "ROR%S %e" }, -[0x02] = { 0,0, "RCL%S %e" }, -[0x03] = { 0,0, "RCR%S %e" }, -[0x04] = { 0,0, "SHL%S %e" }, -[0x05] = { 0,0, "SHR%S %e" }, -[0x07] = { 0,0, "SAR%S %e" }, -}; - -static Optable optabD2[8] = -{ -[0x00] = { 0,0, "ROLB CL,%e" }, -[0x01] = { 0,0, "RORB CL,%e" }, -[0x02] = { 0,0, "RCLB CL,%e" }, -[0x03] = { 0,0, "RCRB CL,%e" }, -[0x04] = { 0,0, "SHLB CL,%e" }, -[0x05] = { 0,0, "SHRB CL,%e" }, -[0x07] = { 0,0, "SARB CL,%e" }, -}; - -static Optable optabD3[8] = -{ -[0x00] = { 0,0, "ROL%S CL,%e" }, -[0x01] = { 0,0, "ROR%S CL,%e" }, -[0x02] = { 0,0, "RCL%S CL,%e" }, -[0x03] = { 0,0, "RCR%S CL,%e" }, -[0x04] = { 0,0, "SHL%S CL,%e" }, -[0x05] = { 0,0, "SHR%S CL,%e" }, -[0x07] = { 0,0, "SAR%S CL,%e" }, -}; - -static Optable optabD8[8+8] = -{ -[0x00] = { 0,0, "FADDF %e,F0" }, -[0x01] = { 0,0, "FMULF %e,F0" }, -[0x02] = { 0,0, "FCOMF %e,F0" }, -[0x03] = { 0,0, "FCOMFP %e,F0" }, -[0x04] = { 0,0, "FSUBF %e,F0" }, -[0x05] = { 0,0, "FSUBRF %e,F0" }, -[0x06] = { 0,0, "FDIVF %e,F0" }, -[0x07] = { 0,0, "FDIVRF %e,F0" }, -[0x08] = { 0,0, "FADDD %f,F0" }, -[0x09] = { 0,0, "FMULD %f,F0" }, -[0x0a] = { 0,0, "FCOMD %f,F0" }, -[0x0b] = { 0,0, "FCOMPD %f,F0" }, -[0x0c] = { 0,0, "FSUBD %f,F0" }, -[0x0d] = { 0,0, "FSUBRD %f,F0" }, -[0x0e] = { 0,0, "FDIVD %f,F0" }, -[0x0f] = { 0,0, "FDIVRD %f,F0" }, -}; -/* - * optabD9 and optabDB use the following encoding: - * if (0 <= modrm <= 2) instruction = optabDx[modrm&0x07]; - * else instruction = optabDx[(modrm&0x3f)+8]; - * - * the instructions for MOD == 3, follow the 8 instructions - * for the other MOD values stored at the front of the table. - */ -static Optable optabD9[64+8] = -{ -[0x00] = { 0,0, "FMOVF %e,F0" }, -[0x02] = { 0,0, "FMOVF F0,%e" }, -[0x03] = { 0,0, "FMOVFP F0,%e" }, -[0x04] = { 0,0, "FLDENV%S %e" }, -[0x05] = { 0,0, "FLDCW %e" }, -[0x06] = { 0,0, "FSTENV%S %e" }, -[0x07] = { 0,0, "FSTCW %e" }, -[0x08] = { 0,0, "FMOVD F0,F0" }, /* Mod R/M = 11xx xxxx*/ -[0x09] = { 0,0, "FMOVD F1,F0" }, -[0x0a] = { 0,0, "FMOVD F2,F0" }, -[0x0b] = { 0,0, "FMOVD F3,F0" }, -[0x0c] = { 0,0, "FMOVD F4,F0" }, -[0x0d] = { 0,0, "FMOVD F5,F0" }, -[0x0e] = { 0,0, "FMOVD F6,F0" }, -[0x0f] = { 0,0, "FMOVD F7,F0" }, -[0x10] = { 0,0, "FXCHD F0,F0" }, -[0x11] = { 0,0, "FXCHD F1,F0" }, -[0x12] = { 0,0, "FXCHD F2,F0" }, -[0x13] = { 0,0, "FXCHD F3,F0" }, -[0x14] = { 0,0, "FXCHD F4,F0" }, -[0x15] = { 0,0, "FXCHD F5,F0" }, -[0x16] = { 0,0, "FXCHD F6,F0" }, -[0x17] = { 0,0, "FXCHD F7,F0" }, -[0x18] = { 0,0, "FNOP" }, -[0x28] = { 0,0, "FCHS" }, -[0x29] = { 0,0, "FABS" }, -[0x2c] = { 0,0, "FTST" }, -[0x2d] = { 0,0, "FXAM" }, -[0x30] = { 0,0, "FLD1" }, -[0x31] = { 0,0, "FLDL2T" }, -[0x32] = { 0,0, "FLDL2E" }, -[0x33] = { 0,0, "FLDPI" }, -[0x34] = { 0,0, "FLDLG2" }, -[0x35] = { 0,0, "FLDLN2" }, -[0x36] = { 0,0, "FLDZ" }, -[0x38] = { 0,0, "F2XM1" }, -[0x39] = { 0,0, "FYL2X" }, -[0x3a] = { 0,0, "FPTAN" }, -[0x3b] = { 0,0, "FPATAN" }, -[0x3c] = { 0,0, "FXTRACT" }, -[0x3d] = { 0,0, "FPREM1" }, -[0x3e] = { 0,0, "FDECSTP" }, -[0x3f] = { 0,0, "FNCSTP" }, -[0x40] = { 0,0, "FPREM" }, -[0x41] = { 0,0, "FYL2XP1" }, -[0x42] = { 0,0, "FSQRT" }, -[0x43] = { 0,0, "FSINCOS" }, -[0x44] = { 0,0, "FRNDINT" }, -[0x45] = { 0,0, "FSCALE" }, -[0x46] = { 0,0, "FSIN" }, -[0x47] = { 0,0, "FCOS" }, -}; - -static Optable optabDA[8+8] = -{ -[0x00] = { 0,0, "FADDL %e,F0" }, -[0x01] = { 0,0, "FMULL %e,F0" }, -[0x02] = { 0,0, "FCOML %e,F0" }, -[0x03] = { 0,0, "FCOMLP %e,F0" }, -[0x04] = { 0,0, "FSUBL %e,F0" }, -[0x05] = { 0,0, "FSUBRL %e,F0" }, -[0x06] = { 0,0, "FDIVL %e,F0" }, -[0x07] = { 0,0, "FDIVRL %e,F0" }, -[0x08] = { 0,0, "FCMOVCS %f,F0" }, -[0x09] = { 0,0, "FCMOVEQ %f,F0" }, -[0x0a] = { 0,0, "FCMOVLS %f,F0" }, -[0x0b] = { 0,0, "FCMOVUN %f,F0" }, -[0x0d] = { Op_R1,0, "FUCOMPP" }, -}; - -static Optable optabDB[8+64] = -{ -[0x00] = { 0,0, "FMOVL %e,F0" }, -[0x02] = { 0,0, "FMOVL F0,%e" }, -[0x03] = { 0,0, "FMOVLP F0,%e" }, -[0x05] = { 0,0, "FMOVX %e,F0" }, -[0x07] = { 0,0, "FMOVXP F0,%e" }, -[0x08] = { 0,0, "FCMOVCC F0,F0" }, /* Mod R/M = 11xx xxxx*/ -[0x09] = { 0,0, "FCMOVCC F1,F0" }, -[0x0a] = { 0,0, "FCMOVCC F2,F0" }, -[0x0b] = { 0,0, "FCMOVCC F3,F0" }, -[0x0c] = { 0,0, "FCMOVCC F4,F0" }, -[0x0d] = { 0,0, "FCMOVCC F5,F0" }, -[0x0e] = { 0,0, "FCMOVCC F6,F0" }, -[0x0f] = { 0,0, "FCMOVCC F7,F0" }, -[0x10] = { 0,0, "FCMOVNE F0,F0" }, -[0x11] = { 0,0, "FCMOVNE F1,F0" }, -[0x12] = { 0,0, "FCMOVNE F2,F0" }, -[0x13] = { 0,0, "FCMOVNE F3,F0" }, -[0x14] = { 0,0, "FCMOVNE F4,F0" }, -[0x15] = { 0,0, "FCMOVNE F5,F0" }, -[0x16] = { 0,0, "FCMOVNE F6,F0" }, -[0x17] = { 0,0, "FCMOVNE F7,F0" }, -[0x18] = { 0,0, "FCMOVHI F0,F0" }, -[0x19] = { 0,0, "FCMOVHI F1,F0" }, -[0x1a] = { 0,0, "FCMOVHI F2,F0" }, -[0x1b] = { 0,0, "FCMOVHI F3,F0" }, -[0x1c] = { 0,0, "FCMOVHI F4,F0" }, -[0x1d] = { 0,0, "FCMOVHI F5,F0" }, -[0x1e] = { 0,0, "FCMOVHI F6,F0" }, -[0x1f] = { 0,0, "FCMOVHI F7,F0" }, -[0x20] = { 0,0, "FCMOVNU F0,F0" }, -[0x21] = { 0,0, "FCMOVNU F1,F0" }, -[0x22] = { 0,0, "FCMOVNU F2,F0" }, -[0x23] = { 0,0, "FCMOVNU F3,F0" }, -[0x24] = { 0,0, "FCMOVNU F4,F0" }, -[0x25] = { 0,0, "FCMOVNU F5,F0" }, -[0x26] = { 0,0, "FCMOVNU F6,F0" }, -[0x27] = { 0,0, "FCMOVNU F7,F0" }, -[0x2a] = { 0,0, "FCLEX" }, -[0x2b] = { 0,0, "FINIT" }, -[0x30] = { 0,0, "FUCOMI F0,F0" }, -[0x31] = { 0,0, "FUCOMI F1,F0" }, -[0x32] = { 0,0, "FUCOMI F2,F0" }, -[0x33] = { 0,0, "FUCOMI F3,F0" }, -[0x34] = { 0,0, "FUCOMI F4,F0" }, -[0x35] = { 0,0, "FUCOMI F5,F0" }, -[0x36] = { 0,0, "FUCOMI F6,F0" }, -[0x37] = { 0,0, "FUCOMI F7,F0" }, -[0x38] = { 0,0, "FCOMI F0,F0" }, -[0x39] = { 0,0, "FCOMI F1,F0" }, -[0x3a] = { 0,0, "FCOMI F2,F0" }, -[0x3b] = { 0,0, "FCOMI F3,F0" }, -[0x3c] = { 0,0, "FCOMI F4,F0" }, -[0x3d] = { 0,0, "FCOMI F5,F0" }, -[0x3e] = { 0,0, "FCOMI F6,F0" }, -[0x3f] = { 0,0, "FCOMI F7,F0" }, -}; - -static Optable optabDC[8+8] = -{ -[0x00] = { 0,0, "FADDD %e,F0" }, -[0x01] = { 0,0, "FMULD %e,F0" }, -[0x02] = { 0,0, "FCOMD %e,F0" }, -[0x03] = { 0,0, "FCOMDP %e,F0" }, -[0x04] = { 0,0, "FSUBD %e,F0" }, -[0x05] = { 0,0, "FSUBRD %e,F0" }, -[0x06] = { 0,0, "FDIVD %e,F0" }, -[0x07] = { 0,0, "FDIVRD %e,F0" }, -[0x08] = { 0,0, "FADDD F0,%f" }, -[0x09] = { 0,0, "FMULD F0,%f" }, -[0x0c] = { 0,0, "FSUBRD F0,%f" }, -[0x0d] = { 0,0, "FSUBD F0,%f" }, -[0x0e] = { 0,0, "FDIVRD F0,%f" }, -[0x0f] = { 0,0, "FDIVD F0,%f" }, -}; - -static Optable optabDD[8+8] = -{ -[0x00] = { 0,0, "FMOVD %e,F0" }, -[0x02] = { 0,0, "FMOVD F0,%e" }, -[0x03] = { 0,0, "FMOVDP F0,%e" }, -[0x04] = { 0,0, "FRSTOR%S %e" }, -[0x06] = { 0,0, "FSAVE%S %e" }, -[0x07] = { 0,0, "FSTSW %e" }, -[0x08] = { 0,0, "FFREED %f" }, -[0x0a] = { 0,0, "FMOVD %f,F0" }, -[0x0b] = { 0,0, "FMOVDP %f,F0" }, -[0x0c] = { 0,0, "FUCOMD %f,F0" }, -[0x0d] = { 0,0, "FUCOMDP %f,F0" }, -}; - -static Optable optabDE[8+8] = -{ -[0x00] = { 0,0, "FADDW %e,F0" }, -[0x01] = { 0,0, "FMULW %e,F0" }, -[0x02] = { 0,0, "FCOMW %e,F0" }, -[0x03] = { 0,0, "FCOMWP %e,F0" }, -[0x04] = { 0,0, "FSUBW %e,F0" }, -[0x05] = { 0,0, "FSUBRW %e,F0" }, -[0x06] = { 0,0, "FDIVW %e,F0" }, -[0x07] = { 0,0, "FDIVRW %e,F0" }, -[0x08] = { 0,0, "FADDDP F0,%f" }, -[0x09] = { 0,0, "FMULDP F0,%f" }, -[0x0b] = { Op_R1,0, "FCOMPDP" }, -[0x0c] = { 0,0, "FSUBRDP F0,%f" }, -[0x0d] = { 0,0, "FSUBDP F0,%f" }, -[0x0e] = { 0,0, "FDIVRDP F0,%f" }, -[0x0f] = { 0,0, "FDIVDP F0,%f" }, -}; - -static Optable optabDF[8+8] = -{ -[0x00] = { 0,0, "FMOVW %e,F0" }, -[0x02] = { 0,0, "FMOVW F0,%e" }, -[0x03] = { 0,0, "FMOVWP F0,%e" }, -[0x04] = { 0,0, "FBLD %e" }, -[0x05] = { 0,0, "FMOVL %e,F0" }, -[0x06] = { 0,0, "FBSTP %e" }, -[0x07] = { 0,0, "FMOVLP F0,%e" }, -[0x0c] = { Op_R0,0, "FSTSW %OAX" }, -[0x0d] = { 0,0, "FUCOMIP F0,%f" }, -[0x0e] = { 0,0, "FCOMIP F0,%f" }, -}; - -static Optable optabF6[8] = -{ -[0x00] = { Ib,0, "TESTB %i,%e" }, -[0x02] = { 0,0, "NOTB %e" }, -[0x03] = { 0,0, "NEGB %e" }, -[0x04] = { 0,0, "MULB AL,%e" }, -[0x05] = { 0,0, "IMULB AL,%e" }, -[0x06] = { 0,0, "DIVB AL,%e" }, -[0x07] = { 0,0, "IDIVB AL,%e" }, -}; - -static Optable optabF7[8] = -{ -[0x00] = { Iwd,0, "TEST%S %i,%e" }, -[0x02] = { 0,0, "NOT%S %e" }, -[0x03] = { 0,0, "NEG%S %e" }, -[0x04] = { 0,0, "MUL%S %OAX,%e" }, -[0x05] = { 0,0, "IMUL%S %OAX,%e" }, -[0x06] = { 0,0, "DIV%S %OAX,%e" }, -[0x07] = { 0,0, "IDIV%S %OAX,%e" }, -}; - -static Optable optabFE[8] = -{ -[0x00] = { 0,0, "INCB %e" }, -[0x01] = { 0,0, "DECB %e" }, -}; - -static Optable optabFF[8] = -{ -[0x00] = { 0,0, "INC%S %e" }, -[0x01] = { 0,0, "DEC%S %e" }, -[0x02] = { JUMP,0, "CALL* %e" }, -[0x03] = { JUMP,0, "CALLF* %e" }, -[0x04] = { JUMP,0, "JMP* %e" }, -[0x05] = { JUMP,0, "JMPF* %e" }, -[0x06] = { 0,0, "PUSHL %e" }, -}; - -static Optable optable[256+2] = -{ -[0x00] = { RMB,0, "ADDB %r,%e" }, -[0x01] = { RM,0, "ADD%S %r,%e" }, -[0x02] = { RMB,0, "ADDB %e,%r" }, -[0x03] = { RM,0, "ADD%S %e,%r" }, -[0x04] = { Ib,0, "ADDB %i,AL" }, -[0x05] = { Iwd,0, "ADD%S %i,%OAX" }, -[0x06] = { 0,0, "PUSHL ES" }, -[0x07] = { 0,0, "POPL ES" }, -[0x08] = { RMB,0, "ORB %r,%e" }, -[0x09] = { RM,0, "OR%S %r,%e" }, -[0x0a] = { RMB,0, "ORB %e,%r" }, -[0x0b] = { RM,0, "OR%S %e,%r" }, -[0x0c] = { Ib,0, "ORB %i,AL" }, -[0x0d] = { Iwd,0, "OR%S %i,%OAX" }, -[0x0e] = { 0,0, "PUSHL CS" }, -[0x0f] = { AUXMM,0, optab0F }, -[0x10] = { RMB,0, "ADCB %r,%e" }, -[0x11] = { RM,0, "ADC%S %r,%e" }, -[0x12] = { RMB,0, "ADCB %e,%r" }, -[0x13] = { RM,0, "ADC%S %e,%r" }, -[0x14] = { Ib,0, "ADCB %i,AL" }, -[0x15] = { Iwd,0, "ADC%S %i,%OAX" }, -[0x16] = { 0,0, "PUSHL SS" }, -[0x17] = { 0,0, "POPL SS" }, -[0x18] = { RMB,0, "SBBB %r,%e" }, -[0x19] = { RM,0, "SBB%S %r,%e" }, -[0x1a] = { RMB,0, "SBBB %e,%r" }, -[0x1b] = { RM,0, "SBB%S %e,%r" }, -[0x1c] = { Ib,0, "SBBB %i,AL" }, -[0x1d] = { Iwd,0, "SBB%S %i,%OAX" }, -[0x1e] = { 0,0, "PUSHL DS" }, -[0x1f] = { 0,0, "POPL DS" }, -[0x20] = { RMB,0, "ANDB %r,%e" }, -[0x21] = { RM,0, "AND%S %r,%e" }, -[0x22] = { RMB,0, "ANDB %e,%r" }, -[0x23] = { RM,0, "AND%S %e,%r" }, -[0x24] = { Ib,0, "ANDB %i,AL" }, -[0x25] = { Iwd,0, "AND%S %i,%OAX" }, -[0x26] = { SEG,0, "ES:" }, -[0x27] = { 0,0, "DAA" }, -[0x28] = { RMB,0, "SUBB %r,%e" }, -[0x29] = { RM,0, "SUB%S %r,%e" }, -[0x2a] = { RMB,0, "SUBB %e,%r" }, -[0x2b] = { RM,0, "SUB%S %e,%r" }, -[0x2c] = { Ib,0, "SUBB %i,AL" }, -[0x2d] = { Iwd,0, "SUB%S %i,%OAX" }, -[0x2e] = { SEG,0, "CS:" }, -[0x2f] = { 0,0, "DAS" }, -[0x30] = { RMB,0, "XORB %r,%e" }, -[0x31] = { RM,0, "XOR%S %r,%e" }, -[0x32] = { RMB,0, "XORB %e,%r" }, -[0x33] = { RM,0, "XOR%S %e,%r" }, -[0x34] = { Ib,0, "XORB %i,AL" }, -[0x35] = { Iwd,0, "XOR%S %i,%OAX" }, -[0x36] = { SEG,0, "SS:" }, -[0x37] = { 0,0, "AAA" }, -[0x38] = { RMB,0, "CMPB %r,%e" }, -[0x39] = { RM,0, "CMP%S %r,%e" }, -[0x3a] = { RMB,0, "CMPB %e,%r" }, -[0x3b] = { RM,0, "CMP%S %e,%r" }, -[0x3c] = { Ib,0, "CMPB %i,AL" }, -[0x3d] = { Iwd,0, "CMP%S %i,%OAX" }, -[0x3e] = { SEG,0, "DS:" }, -[0x3f] = { 0,0, "AAS" }, -[0x40] = { 0,0, "INC%S %OAX" }, -[0x41] = { 0,0, "INC%S %OCX" }, -[0x42] = { 0,0, "INC%S %ODX" }, -[0x43] = { 0,0, "INC%S %OBX" }, -[0x44] = { 0,0, "INC%S %OSP" }, -[0x45] = { 0,0, "INC%S %OBP" }, -[0x46] = { 0,0, "INC%S %OSI" }, -[0x47] = { 0,0, "INC%S %ODI" }, -[0x48] = { 0,0, "DEC%S %OAX" }, -[0x49] = { 0,0, "DEC%S %OCX" }, -[0x4a] = { 0,0, "DEC%S %ODX" }, -[0x4b] = { 0,0, "DEC%S %OBX" }, -[0x4c] = { 0,0, "DEC%S %OSP" }, -[0x4d] = { 0,0, "DEC%S %OBP" }, -[0x4e] = { 0,0, "DEC%S %OSI" }, -[0x4f] = { 0,0, "DEC%S %ODI" }, -[0x50] = { 0,0, "PUSH%S %OAX" }, -[0x51] = { 0,0, "PUSH%S %OCX" }, -[0x52] = { 0,0, "PUSH%S %ODX" }, -[0x53] = { 0,0, "PUSH%S %OBX" }, -[0x54] = { 0,0, "PUSH%S %OSP" }, -[0x55] = { 0,0, "PUSH%S %OBP" }, -[0x56] = { 0,0, "PUSH%S %OSI" }, -[0x57] = { 0,0, "PUSH%S %ODI" }, -[0x58] = { 0,0, "POP%S %OAX" }, -[0x59] = { 0,0, "POP%S %OCX" }, -[0x5a] = { 0,0, "POP%S %ODX" }, -[0x5b] = { 0,0, "POP%S %OBX" }, -[0x5c] = { 0,0, "POP%S %OSP" }, -[0x5d] = { 0,0, "POP%S %OBP" }, -[0x5e] = { 0,0, "POP%S %OSI" }, -[0x5f] = { 0,0, "POP%S %ODI" }, -[0x60] = { 0,0, "PUSHA%S" }, -[0x61] = { 0,0, "POPA%S" }, -[0x62] = { RMM,0, "BOUND %e,%r" }, -[0x63] = { RM,0, "ARPL %r,%e" }, -[0x64] = { SEG,0, "FS:" }, -[0x65] = { SEG,0, "GS:" }, -[0x66] = { OPOVER,0, "" }, -[0x67] = { ADDOVER,0, "" }, -[0x68] = { Iwd,0, "PUSH%S %i" }, -[0x69] = { RM,Iwd, "IMUL%S %e,%i,%r" }, -[0x6a] = { Ib,0, "PUSH%S %i" }, -[0x6b] = { RM,Ibs, "IMUL%S %e,%i,%r" }, -[0x6c] = { 0,0, "INSB DX,(%ODI)" }, -[0x6d] = { 0,0, "INS%S DX,(%ODI)" }, -[0x6e] = { 0,0, "OUTSB (%ASI),DX" }, -[0x6f] = { 0,0, "OUTS%S (%ASI),DX" }, -[0x70] = { Jbs,0, "JOS %p" }, -[0x71] = { Jbs,0, "JOC %p" }, -[0x72] = { Jbs,0, "JCS %p" }, -[0x73] = { Jbs,0, "JCC %p" }, -[0x74] = { Jbs,0, "JEQ %p" }, -[0x75] = { Jbs,0, "JNE %p" }, -[0x76] = { Jbs,0, "JLS %p" }, -[0x77] = { Jbs,0, "JHI %p" }, -[0x78] = { Jbs,0, "JMI %p" }, -[0x79] = { Jbs,0, "JPL %p" }, -[0x7a] = { Jbs,0, "JPS %p" }, -[0x7b] = { Jbs,0, "JPC %p" }, -[0x7c] = { Jbs,0, "JLT %p" }, -[0x7d] = { Jbs,0, "JGE %p" }, -[0x7e] = { Jbs,0, "JLE %p" }, -[0x7f] = { Jbs,0, "JGT %p" }, -[0x80] = { RMOPB,0, optab80 }, -[0x81] = { RMOP,0, optab81 }, -[0x83] = { RMOP,0, optab83 }, -[0x84] = { RMB,0, "TESTB %r,%e" }, -[0x85] = { RM,0, "TEST%S %r,%e" }, -[0x86] = { RMB,0, "XCHGB %r,%e" }, -[0x87] = { RM,0, "XCHG%S %r,%e" }, -[0x88] = { RMB,0, "MOVB %r,%e" }, -[0x89] = { RM,0, "MOV%S %r,%e" }, -[0x8a] = { RMB,0, "MOVB %e,%r" }, -[0x8b] = { RM,0, "MOV%S %e,%r" }, -[0x8c] = { RM,0, "MOVW %g,%e" }, -[0x8d] = { RM,0, "LEA%S %e,%r" }, -[0x8e] = { RM,0, "MOVW %e,%g" }, -[0x8f] = { RM,0, "POP%S %e" }, -[0x90] = { 0,0, "NOP" }, -[0x91] = { 0,0, "XCHG %OCX,%OAX" }, -[0x92] = { 0,0, "XCHG %ODX,%OAX" }, -[0x93] = { 0,0, "XCHG %OBX,%OAX" }, -[0x94] = { 0,0, "XCHG %OSP,%OAX" }, -[0x95] = { 0,0, "XCHG %OBP,%OAX" }, -[0x96] = { 0,0, "XCHG %OSI,%OAX" }, -[0x97] = { 0,0, "XCHG %ODI,%OAX" }, -[0x98] = { 0,0, "%W" }, /* miserable CBW or CWDE */ -[0x99] = { 0,0, "%w" }, /* idiotic CWD or CDQ */ -[0x9a] = { PTR,0, "CALL%S %d" }, -[0x9b] = { 0,0, "WAIT" }, -[0x9c] = { 0,0, "PUSHF" }, -[0x9d] = { 0,0, "POPF" }, -[0x9e] = { 0,0, "SAHF" }, -[0x9f] = { 0,0, "LAHF" }, -[0xa0] = { Awd,0, "MOVB %i,AL" }, -[0xa1] = { Awd,0, "MOV%S %i,%OAX" }, -[0xa2] = { Awd,0, "MOVB AL,%i" }, -[0xa3] = { Awd,0, "MOV%S %OAX,%i" }, -[0xa4] = { 0,0, "MOVSB (%ASI),(%ADI)" }, -[0xa5] = { 0,0, "MOVS%S (%ASI),(%ADI)" }, -[0xa6] = { 0,0, "CMPSB (%ASI),(%ADI)" }, -[0xa7] = { 0,0, "CMPS%S (%ASI),(%ADI)" }, -[0xa8] = { Ib,0, "TESTB %i,AL" }, -[0xa9] = { Iwd,0, "TEST%S %i,%OAX" }, -[0xaa] = { 0,0, "STOSB AL,(%ADI)" }, -[0xab] = { 0,0, "STOS%S %OAX,(%ADI)" }, -[0xac] = { 0,0, "LODSB (%ASI),AL" }, -[0xad] = { 0,0, "LODS%S (%ASI),%OAX" }, -[0xae] = { 0,0, "SCASB (%ADI),AL" }, -[0xaf] = { 0,0, "SCAS%S (%ADI),%OAX" }, -[0xb0] = { Ib,0, "MOVB %i,AL" }, -[0xb1] = { Ib,0, "MOVB %i,CL" }, -[0xb2] = { Ib,0, "MOVB %i,DL" }, -[0xb3] = { Ib,0, "MOVB %i,BL" }, -[0xb4] = { Ib,0, "MOVB %i,AH" }, -[0xb5] = { Ib,0, "MOVB %i,CH" }, -[0xb6] = { Ib,0, "MOVB %i,DH" }, -[0xb7] = { Ib,0, "MOVB %i,BH" }, -[0xb8] = { Iwdq,0, "MOV%S %i,%o" }, -[0xb9] = { Iwdq,0, "MOV%S %i,%o" }, -[0xba] = { Iwdq,0, "MOV%S %i,%o" }, -[0xbb] = { Iwdq,0, "MOV%S %i,%o" }, -[0xbc] = { Iwdq,0, "MOV%S %i,%o" }, -[0xbd] = { Iwdq,0, "MOV%S %i,%o" }, -[0xbe] = { Iwdq,0, "MOV%S %i,%o" }, -[0xbf] = { Iwdq,0, "MOV%S %i,%o" }, -[0xc0] = { RMOPB,0, optabC0 }, -[0xc1] = { RMOP,0, optabC1 }, -[0xc2] = { Iw,0, "RET %i" }, -[0xc3] = { RET,0, "RET" }, -[0xc4] = { RM,0, "LES %e,%r" }, -[0xc5] = { RM,0, "LDS %e,%r" }, -[0xc6] = { RMB,Ib, "MOVB %i,%e" }, -[0xc7] = { RM,Iwd, "MOV%S %i,%e" }, -[0xc8] = { Iw2,Ib, "ENTER %i,%I" }, /* loony ENTER */ -[0xc9] = { RET,0, "LEAVE" }, /* bizarre LEAVE */ -[0xca] = { Iw,0, "RETF %i" }, -[0xcb] = { RET,0, "RETF" }, -[0xcc] = { 0,0, "INT 3" }, -[0xcd] = { Ib,0, "INTB %i" }, -[0xce] = { 0,0, "INTO" }, -[0xcf] = { 0,0, "IRET" }, -[0xd0] = { RMOPB,0, optabD0 }, -[0xd1] = { RMOP,0, optabD1 }, -[0xd2] = { RMOPB,0, optabD2 }, -[0xd3] = { RMOP,0, optabD3 }, -[0xd4] = { OA,0, "AAM" }, -[0xd5] = { OA,0, "AAD" }, -[0xd7] = { 0,0, "XLAT" }, -[0xd8] = { FRMOP,0, optabD8 }, -[0xd9] = { FRMEX,0, optabD9 }, -[0xda] = { FRMOP,0, optabDA }, -[0xdb] = { FRMEX,0, optabDB }, -[0xdc] = { FRMOP,0, optabDC }, -[0xdd] = { FRMOP,0, optabDD }, -[0xde] = { FRMOP,0, optabDE }, -[0xdf] = { FRMOP,0, optabDF }, -[0xe0] = { Jbs,0, "LOOPNE %p" }, -[0xe1] = { Jbs,0, "LOOPE %p" }, -[0xe2] = { Jbs,0, "LOOP %p" }, -[0xe3] = { Jbs,0, "JCXZ %p" }, -[0xe4] = { Ib,0, "INB %i,AL" }, -[0xe5] = { Ib,0, "IN%S %i,%OAX" }, -[0xe6] = { Ib,0, "OUTB AL,%i" }, -[0xe7] = { Ib,0, "OUT%S %OAX,%i" }, -[0xe8] = { Iwds,0, "CALL %p" }, -[0xe9] = { Iwds,0, "JMP %p" }, -[0xea] = { PTR,0, "JMP %d" }, -[0xeb] = { Jbs,0, "JMP %p" }, -[0xec] = { 0,0, "INB DX,AL" }, -[0xed] = { 0,0, "IN%S DX,%OAX" }, -[0xee] = { 0,0, "OUTB AL,DX" }, -[0xef] = { 0,0, "OUT%S %OAX,DX" }, -[0xf0] = { PRE,0, "LOCK" }, -[0xf2] = { OPRE,0, "REPNE" }, -[0xf3] = { OPRE,0, "REP" }, -[0xf4] = { 0,0, "HLT" }, -[0xf5] = { 0,0, "CMC" }, -[0xf6] = { RMOPB,0, optabF6 }, -[0xf7] = { RMOP,0, optabF7 }, -[0xf8] = { 0,0, "CLC" }, -[0xf9] = { 0,0, "STC" }, -[0xfa] = { 0,0, "CLI" }, -[0xfb] = { 0,0, "STI" }, -[0xfc] = { 0,0, "CLD" }, -[0xfd] = { 0,0, "STD" }, -[0xfe] = { RMOPB,0, optabFE }, -[0xff] = { RMOP,0, optabFF }, -[0x100] = { RM,0, "MOVLQSX %e,%r" }, -[0x101] = { RM,0, "MOVLQZX %e,%r" }, -}; - -/* - * get a byte of the instruction - */ -static int -igetc(Map *map, Instr *ip, uchar *c) -{ - if(ip->n+1 > sizeof(ip->mem)){ - werrstr("instruction too long"); - return -1; - } - if (get1(map, ip->addr+ip->n, c, 1) < 0) { - werrstr("can't read instruction: %r"); - return -1; - } - ip->mem[ip->n++] = *c; - return 1; -} - -/* - * get two bytes of the instruction - */ -static int -igets(Map *map, Instr *ip, ushort *sp) -{ - uchar c; - ushort s; - - if (igetc(map, ip, &c) < 0) - return -1; - s = c; - if (igetc(map, ip, &c) < 0) - return -1; - s |= (c<<8); - *sp = s; - return 1; -} - -/* - * get 4 bytes of the instruction - */ -static int -igetl(Map *map, Instr *ip, uint32 *lp) -{ - ushort s; - int32 l; - - if (igets(map, ip, &s) < 0) - return -1; - l = s; - if (igets(map, ip, &s) < 0) - return -1; - l |= (s<<16); - *lp = l; - return 1; -} - -/* - * get 8 bytes of the instruction - * -static int -igetq(Map *map, Instr *ip, vlong *qp) -{ - uint32 l; - uvlong q; - - if (igetl(map, ip, &l) < 0) - return -1; - q = l; - if (igetl(map, ip, &l) < 0) - return -1; - q |= ((uvlong)l<<32); - *qp = q; - return 1; -} - */ - -static int -getdisp(Map *map, Instr *ip, int mod, int rm, int code, int pcrel) -{ - uchar c; - ushort s; - - if (mod > 2) - return 1; - if (mod == 1) { - if (igetc(map, ip, &c) < 0) - return -1; - if (c&0x80) - ip->disp = c|0xffffff00; - else - ip->disp = c&0xff; - } else if (mod == 2 || rm == code) { - if (ip->asize == 'E') { - if (igetl(map, ip, &ip->disp) < 0) - return -1; - if (mod == 0) - ip->rip = pcrel; - } else { - if (igets(map, ip, &s) < 0) - return -1; - if (s&0x8000) - ip->disp = s|0xffff0000; - else - ip->disp = s; - } - if (mod == 0) - ip->base = -1; - } - return 1; -} - -static int -modrm(Map *map, Instr *ip, uchar c) -{ - uchar rm, mod; - - mod = (c>>6)&3; - rm = c&7; - ip->mod = mod; - ip->base = rm; - ip->reg = (c>>3)&7; - ip->rip = 0; - if (mod == 3) /* register */ - return 1; - if (ip->asize == 0) { /* 16-bit mode */ - switch(rm) { - case 0: - ip->base = BX; ip->index = SI; - break; - case 1: - ip->base = BX; ip->index = DI; - break; - case 2: - ip->base = BP; ip->index = SI; - break; - case 3: - ip->base = BP; ip->index = DI; - break; - case 4: - ip->base = SI; - break; - case 5: - ip->base = DI; - break; - case 6: - ip->base = BP; - break; - case 7: - ip->base = BX; - break; - default: - break; - } - return getdisp(map, ip, mod, rm, 6, 0); - } - if (rm == 4) { /* scummy sib byte */ - if (igetc(map, ip, &c) < 0) - return -1; - ip->ss = (c>>6)&0x03; - ip->index = (c>>3)&0x07; - if (ip->index == 4) - ip->index = -1; - ip->base = c&0x07; - return getdisp(map, ip, mod, ip->base, 5, 0); - } - return getdisp(map, ip, mod, rm, 5, ip->amd64); -} - -static char * -_hexify(char *buf, uint32 p, int zeros) -{ - uint32 d; - - d = p/16; - if(d) - buf = _hexify(buf, d, zeros-1); - else - while(zeros--) - *buf++ = '0'; - *buf++ = "0123456789abcdef"[p&0x0f]; - return buf; -} - -static Optable * -mkinstr(Map *map, Instr *ip, uvlong pc, int is64) -{ - int i, n, norex; - uchar c; - ushort s; - Optable *op, *obase; - char buf[128]; - - memset(ip, 0, sizeof(*ip)); - norex = 1; - ip->base = -1; - ip->index = -1; - ip->osize = 'L'; - ip->asize = 'E'; - ip->amd64 = is64; - norex = 0; - ip->addr = pc; - if (igetc(map, ip, &c) < 0) - return 0; - obase = optable; -newop: - if(ip->amd64 && !norex){ - if(c >= 0x40 && c <= 0x4f) { - ip->rex = c; - if(igetc(map, ip, &c) < 0) - return 0; - } - if(c == 0x63){ - if(ip->rex&REXW) - op = &obase[0x100]; /* MOVLQSX */ - else - op = &obase[0x101]; /* MOVLQZX */ - goto hack; - } - } - if(obase == optable) - ip->op = c; - op = &obase[c]; -hack: - if (op->proto == 0) { -badop: - n = snprint(buf, sizeof(buf), "opcode: ??"); - for (i = 0; i < ip->n && n < sizeof(buf)-3; i++, n+=2) - _hexify(buf+n, ip->mem[i], 1); - strcpy(buf+n, "??"); - werrstr(buf); - return 0; - } - for(i = 0; i < 2 && op->operand[i]; i++) { - switch(op->operand[i]) { - case Ib: /* 8-bit immediate - (no sign extension)*/ - if (igetc(map, ip, &c) < 0) - return 0; - ip->imm = c&0xff; - ip->imm64 = ip->imm; - break; - case Jbs: /* 8-bit jump immediate (sign extended) */ - if (igetc(map, ip, &c) < 0) - return 0; - if (c&0x80) - ip->imm = c|0xffffff00; - else - ip->imm = c&0xff; - ip->imm64 = (int32)ip->imm; - ip->jumptype = Jbs; - break; - case Ibs: /* 8-bit immediate (sign extended) */ - if (igetc(map, ip, &c) < 0) - return 0; - if (c&0x80) - if (ip->osize == 'L') - ip->imm = c|0xffffff00; - else - ip->imm = c|0xff00; - else - ip->imm = c&0xff; - ip->imm64 = (int32)ip->imm; - break; - case Iw: /* 16-bit immediate -> imm */ - if (igets(map, ip, &s) < 0) - return 0; - ip->imm = s&0xffff; - ip->imm64 = ip->imm; - ip->jumptype = Iw; - break; - case Iw2: /* 16-bit immediate -> in imm2*/ - if (igets(map, ip, &s) < 0) - return 0; - ip->imm2 = s&0xffff; - break; - case Iwd: /* Operand-sized immediate (no sign extension unless 64 bits)*/ - if (ip->osize == 'L') { - if (igetl(map, ip, &ip->imm) < 0) - return 0; - ip->imm64 = ip->imm; - if(ip->rex&REXW && (ip->imm & (1<<31)) != 0) - ip->imm64 |= (vlong)~0 << 32; - } else { - if (igets(map, ip, &s)< 0) - return 0; - ip->imm = s&0xffff; - ip->imm64 = ip->imm; - } - break; - case Iwdq: /* Operand-sized immediate, possibly big */ - if (ip->osize == 'L') { - if (igetl(map, ip, &ip->imm) < 0) - return 0; - ip->imm64 = ip->imm; - if (ip->rex & REXW) { - uint32 l; - if (igetl(map, ip, &l) < 0) - return 0; - ip->imm64 |= (uvlong)l << 32; - } - } else { - if (igets(map, ip, &s)< 0) - return 0; - ip->imm = s&0xffff; - } - break; - case Awd: /* Address-sized immediate (no sign extension)*/ - if (ip->asize == 'E') { - if (igetl(map, ip, &ip->imm) < 0) - return 0; - /* TO DO: REX */ - } else { - if (igets(map, ip, &s)< 0) - return 0; - ip->imm = s&0xffff; - } - break; - case Iwds: /* Operand-sized immediate (sign extended) */ - if (ip->osize == 'L') { - if (igetl(map, ip, &ip->imm) < 0) - return 0; - } else { - if (igets(map, ip, &s)< 0) - return 0; - if (s&0x8000) - ip->imm = s|0xffff0000; - else - ip->imm = s&0xffff; - } - ip->jumptype = Iwds; - break; - case OA: /* literal 0x0a byte */ - if (igetc(map, ip, &c) < 0) - return 0; - if (c != 0x0a) - goto badop; - break; - case Op_R0: /* base register must be R0 */ - if (ip->base != 0) - goto badop; - break; - case Op_R1: /* base register must be R1 */ - if (ip->base != 1) - goto badop; - break; - case RMB: /* R/M field with byte register (/r)*/ - if (igetc(map, ip, &c) < 0) - return 0; - if (modrm(map, ip, c) < 0) - return 0; - ip->osize = 'B'; - break; - case RM: /* R/M field with register (/r) */ - if (igetc(map, ip, &c) < 0) - return 0; - if (modrm(map, ip, c) < 0) - return 0; - break; - case RMOPB: /* R/M field with op code (/digit) */ - if (igetc(map, ip, &c) < 0) - return 0; - if (modrm(map, ip, c) < 0) - return 0; - c = ip->reg; /* secondary op code */ - obase = (Optable*)op->proto; - ip->osize = 'B'; - goto newop; - case RMOP: /* R/M field with op code (/digit) */ - if (igetc(map, ip, &c) < 0) - return 0; - if (modrm(map, ip, c) < 0) - return 0; - obase = (Optable*)op->proto; - if(ip->amd64 && obase == optab0F01 && c == 0xF8) - return optab0F01F8; - c = ip->reg; - goto newop; - case FRMOP: /* FP R/M field with op code (/digit) */ - if (igetc(map, ip, &c) < 0) - return 0; - if (modrm(map, ip, c) < 0) - return 0; - if ((c&0xc0) == 0xc0) - c = ip->reg+8; /* 16 entry table */ - else - c = ip->reg; - obase = (Optable*)op->proto; - goto newop; - case FRMEX: /* Extended FP R/M field with op code (/digit) */ - if (igetc(map, ip, &c) < 0) - return 0; - if (modrm(map, ip, c) < 0) - return 0; - if ((c&0xc0) == 0xc0) - c = (c&0x3f)+8; /* 64-entry table */ - else - c = ip->reg; - obase = (Optable*)op->proto; - goto newop; - case RMR: /* R/M register only (mod = 11) */ - if (igetc(map, ip, &c) < 0) - return 0; - if ((c&0xc0) != 0xc0) { - werrstr("invalid R/M register: %#x", c); - return 0; - } - if (modrm(map, ip, c) < 0) - return 0; - break; - case RMM: /* R/M register only (mod = 11) */ - if (igetc(map, ip, &c) < 0) - return 0; - if ((c&0xc0) == 0xc0) { - werrstr("invalid R/M memory mode: %#x", c); - return 0; - } - if (modrm(map, ip, c) < 0) - return 0; - break; - case PTR: /* Seg:Displacement addr (ptr16:16 or ptr16:32) */ - if (ip->osize == 'L') { - if (igetl(map, ip, &ip->disp) < 0) - return 0; - } else { - if (igets(map, ip, &s)< 0) - return 0; - ip->disp = s&0xffff; - } - if (igets(map, ip, (ushort*)&ip->seg) < 0) - return 0; - ip->jumptype = PTR; - break; - case AUXMM: /* Multi-byte op code; prefix determines table selection */ - if (igetc(map, ip, &c) < 0) - return 0; - obase = (Optable*)op->proto; - switch (ip->opre) { - case 0x66: op = optab660F; break; - case 0xF2: op = optabF20F; break; - case 0xF3: op = optabF30F; break; - default: op = nil; break; - } - if(op != nil && op[c].proto != nil) - obase = op; - norex = 1; /* no more rex prefixes */ - /* otherwise the optab entry captures it */ - goto newop; - case AUX: /* Multi-byte op code - Auxiliary table */ - obase = (Optable*)op->proto; - if (igetc(map, ip, &c) < 0) - return 0; - goto newop; - case OPRE: /* Instr Prefix or media op */ - ip->opre = c; - /* fall through */ - case PRE: /* Instr Prefix */ - ip->prefix = (char*)op->proto; - if (igetc(map, ip, &c) < 0) - return 0; - if (ip->opre && c == 0x0F) - ip->prefix = 0; - goto newop; - case SEG: /* Segment Prefix */ - ip->segment = (char*)op->proto; - if (igetc(map, ip, &c) < 0) - return 0; - goto newop; - case OPOVER: /* Operand size override */ - ip->opre = c; - ip->osize = 'W'; - if (igetc(map, ip, &c) < 0) - return 0; - if (c == 0x0F) - ip->osize = 'L'; - else if (ip->amd64 && (c&0xF0) == 0x40) - ip->osize = 'Q'; - goto newop; - case ADDOVER: /* Address size override */ - ip->asize = 0; - if (igetc(map, ip, &c) < 0) - return 0; - goto newop; - case JUMP: /* mark instruction as JUMP or RET */ - case RET: - ip->jumptype = op->operand[i]; - break; - default: - werrstr("bad operand type %d", op->operand[i]); - return 0; - } - } - return op; -} - -static void -bprint(Instr *ip, char *fmt, ...) -{ - va_list arg; - - va_start(arg, fmt); - ip->curr = vseprint(ip->curr, ip->end, fmt, arg); - va_end(arg); -} - -/* - * if we want to call 16 bit regs AX,BX,CX,... - * and 32 bit regs EAX,EBX,ECX,... then - * change the defs of ANAME and ONAME to: - * #define ANAME(ip) ((ip->asize == 'E' ? "E" : "") - * #define ONAME(ip) ((ip)->osize == 'L' ? "E" : "") - */ -#define ANAME(ip) "" -#define ONAME(ip) "" - -static char *reg[] = { -[AX] = "AX", -[CX] = "CX", -[DX] = "DX", -[BX] = "BX", -[SP] = "SP", -[BP] = "BP", -[SI] = "SI", -[DI] = "DI", - - /* amd64 */ -[AMD64_R8] = "R8", -[AMD64_R9] = "R9", -[AMD64_R10] = "R10", -[AMD64_R11] = "R11", -[AMD64_R12] = "R12", -[AMD64_R13] = "R13", -[AMD64_R14] = "R14", -[AMD64_R15] = "R15", -}; - -static char *breg[] = { "AL", "CL", "DL", "BL", "AH", "CH", "DH", "BH" }; -static char *breg64[] = { "AL", "CL", "DL", "BL", "SPB", "BPB", "SIB", "DIB", - "R8B", "R9B", "R10B", "R11B", "R12B", "R13B", "R14B", "R15B" }; -static char *sreg[] = { "ES", "CS", "SS", "DS", "FS", "GS" }; - -static void -immediate(Instr *ip, vlong val) -{ - // TODO: Translate known names. - if((ip->rex & REXW) == 0) - bprint(ip, "%#lux", (long)val); - else - bprint(ip, "%#llux", val); -} - -static void -pea(Instr *ip) -{ - int base; - - base = ip->base; - if(base >= 0 && (ip->rex & REXB)) - base += 8; - - if (ip->mod == 3) { - if (ip->osize == 'B') - bprint(ip, (ip->rex & REXB? breg64: breg)[(uchar)ip->base]); - else - bprint(ip, "%s%s", ANAME(ip), reg[base]); - return; - } - - if (ip->segment) - bprint(ip, ip->segment); - if (1) { - if (ip->base < 0) - immediate(ip, ip->disp); - else { - bprint(ip, "%#ux", ip->disp); - if(ip->rip) - bprint(ip, "(RIP)"); - bprint(ip,"(%s%s)", ANAME(ip), reg[ip->rex&REXB? ip->base+8: ip->base]); - } - } - if (ip->index >= 0) - bprint(ip,"(%s%s*%d)", ANAME(ip), reg[ip->rex&REXX? ip->index+8: ip->index], 1<ss); -} - -static void -prinstr(Instr *ip, char *fmt) -{ - int sharp, i; - vlong v; - - if (ip->prefix) - bprint(ip, "%s ", ip->prefix); - for (; *fmt && ip->curr < ip->end; fmt++) { - if (*fmt != '%'){ - *ip->curr++ = *fmt; - continue; - } - sharp = 0; - if(*++fmt == '#') { - sharp = 1; - ++fmt; - } - switch(*fmt){ - case '%': - *ip->curr++ = '%'; - break; - case 'A': - bprint(ip, "%s", ANAME(ip)); - break; - case 'C': - bprint(ip, "CR%d", ip->reg); - break; - case 'D': - if (ip->reg < 4 || ip->reg == 6 || ip->reg == 7) - bprint(ip, "DR%d",ip->reg); - else - bprint(ip, "???"); - break; - case 'I': - bprint(ip, "$"); - immediate(ip, ip->imm2); - break; - case 'O': - bprint(ip,"%s", ONAME(ip)); - break; - case 'o': - i = ip->op & 7; - if(ip->rex & REXB) - i += 8; - bprint(ip, "%s", reg[i]); - break; - case 'i': - if(!sharp) - bprint(ip, "$"); - v = ip->imm; - if(ip->rex & REXW) - v = ip->imm64; - immediate(ip, v); - break; - case 'R': - bprint(ip, "%s%s", ONAME(ip), reg[ip->rex&REXR? ip->reg+8: ip->reg]); - break; - case 'S': - if(ip->osize == 'Q' || (ip->osize == 'L' && ip->rex & REXW)) - bprint(ip, "Q"); - else - bprint(ip, "%c", ip->osize); - break; - case 's': - if(ip->opre == 0 || ip->opre == 0x66) - bprint(ip, "P"); - else - bprint(ip, "S"); - if(ip->opre == 0xf2 || ip->opre == 0x66) - bprint(ip, "D"); - else - bprint(ip, "S"); - break; - case 'T': - if (ip->reg == 6 || ip->reg == 7) - bprint(ip, "TR%d",ip->reg); - else - bprint(ip, "???"); - break; - case 'W': - if (ip->osize == 'Q' || (ip->osize == 'L' && ip->rex & REXW)) - bprint(ip, "CDQE"); - else if (ip->osize == 'L') - bprint(ip,"CWDE"); - else - bprint(ip, "CBW"); - break; - case 'd': - bprint(ip,"%#ux:%#ux", ip->seg, ip->disp); - break; - case 'm': - if (ip->mod == 3 && ip->osize != 'B') { - if(fmt[1] != '*'){ - if(ip->opre != 0) { - bprint(ip, "X%d", ip->rex&REXB? ip->base+8: ip->base); - break; - } - } else - fmt++; - bprint(ip, "M%d", ip->base); - break; - } - pea(ip); - break; - case 'e': - pea(ip); - break; - case 'f': - bprint(ip, "F%d", ip->base); - break; - case 'g': - if (ip->reg < 6) - bprint(ip,"%s",sreg[ip->reg]); - else - bprint(ip,"???"); - break; - case 'p': - /* - * signed immediate in the uint32 ip->imm. - */ - v = (int32)ip->imm; - immediate(ip, v+ip->addr+ip->n); - break; - case 'r': - if (ip->osize == 'B') - bprint(ip,"%s", (ip->rex? breg64: breg)[ip->rex&REXR? ip->reg+8: ip->reg]); - else - bprint(ip, reg[ip->rex&REXR? ip->reg+8: ip->reg]); - break; - case 'w': - if (ip->osize == 'Q' || ip->rex & REXW) - bprint(ip, "CQO"); - else if (ip->osize == 'L') - bprint(ip,"CDQ"); - else - bprint(ip, "CWD"); - break; - case 'M': - if(ip->opre != 0) - bprint(ip, "X%d", ip->rex&REXR? ip->reg+8: ip->reg); - else - bprint(ip, "M%d", ip->reg); - break; - case 'x': - if (ip->mod == 3 && ip->osize != 'B') { - bprint(ip, "X%d", ip->rex&REXB? ip->base+8: ip->base); - break; - } - pea(ip); - break; - case 'X': - bprint(ip, "X%d", ip->rex&REXR? ip->reg+8: ip->reg); - break; - default: - bprint(ip, "%%%c", *fmt); - break; - } - } - *ip->curr = 0; /* there's always room for 1 byte */ -} - -static int -i386inst(Map *map, uvlong pc, int is64, char modifier, char *buf, int n) -{ - Instr instr; - Optable *op; - - USED(modifier); - op = mkinstr(map, &instr, pc, is64); - if (op == 0) - return -1; - instr.curr = buf; - instr.end = buf+n-1; - prinstr(&instr, op->proto); - return instr.n; -} - -/* -static int -i386das(Map *map, uvlong pc, char *buf, int n) -{ - Instr instr; - int i; - - if (mkinstr(map, &instr, pc) == 0) { - errstr(buf, n); - return -1; - } - for(i = 0; i < instr.n && n > 2; i++) { - _hexify(buf, instr.mem[i], 1); - buf += 2; - n -= 2; - } - *buf = 0; - return instr.n; -} - -static int -i386instlen(Map *map, uvlong pc) -{ - Instr i; - - if (mkinstr(map, &i, pc)) - return i.n; - return -1; -} -*/ - -static int -getmem(Map *m, uvlong addr, uchar *dst, int ndst) -{ - uchar *p; - - p = m->startp + (addr - m->startpc); - if(p < m->p || p >= m->ep || m->ep - p < ndst) { - werrstr("out of bounds"); - return -1; - } - memmove(dst, p, ndst); - return ndst; -} - -int -x86disasm(uchar *p, uchar *end, uvlong pc, int is64, char *buf, int n) -{ - Map m; - - m.p = p; - m.ep = end; - m.startp = p; - m.startpc = pc; - m.get1 = getmem; - return i386inst(&m, pc, is64, 0, buf, n); -} - -void -usage(void) -{ - fprint(2, "usage: libmach8db file\n"); - exits("usage"); -} - -void -main(int argc, char **argv) -{ - uchar data[10000], *p, *ep; - int fd, n, eof, addr, is64; - Biobuf bstdout; - char buf[1000]; - - fmtinstall('H', encodefmt); - - is64 = 0; - ARGBEGIN{ - case '8': - is64 = 0; - break; - case '6': - is64 = 1; - break; - default: - usage(); - }ARGEND - - if(argc != 1) - usage(); - - fd = open(argv[0], OREAD); - if(fd < 0) - sysfatal("open %s: %r", argv[0]); - - Binit(&bstdout, 1, OWRITE); - p = data; - ep = data; - eof = 0; - addr = 0; - for(;;) { - if(!eof && ep-p < 64) { - memmove(data, p, ep-p); - ep = data + (ep-p); - p = data; - n = readn(fd, ep, data+sizeof data-ep); - if(n <= 0) - eof = 1; - else - ep += n; - } - if(p == ep) - break; - n = x86disasm(p, ep, addr, is64, buf, sizeof buf); - if(n < 0) { - Bprint(&bstdout, "0x%x %.*H error: %r\n", addr, 1, p); - n = 1; - } else { - Bprint(&bstdout, "0x%x %.*H %s\n", addr, n, p, buf); - } - addr += n; - p += n; - } - Bflush(&bstdout); - exits(0); -} diff --git a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/xed_test.go b/src/cmd/vendor/golang.org/x/arch/x86/x86asm/xed_test.go deleted file mode 100644 index 91cf822727..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/xed_test.go +++ /dev/null @@ -1,211 +0,0 @@ -// Copyright 2014 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 x86asm - -import ( - "bytes" - "strings" - "testing" -) - -func TestXed32Manual(t *testing.T) { testXed32(t, hexCases(t, xedManualTests)) } -func TestXed32Testdata(t *testing.T) { testXed32(t, concat(basicPrefixes, testdataCases(t))) } -func TestXed32ModRM(t *testing.T) { testXed32(t, concat(basicPrefixes, enumModRM)) } -func TestXed32OneByte(t *testing.T) { testBasic(t, testXed32) } -func TestXed320F(t *testing.T) { testBasic(t, testXed32, 0x0F) } -func TestXed320F38(t *testing.T) { testBasic(t, testXed32, 0x0F, 0x38) } -func TestXed320F3A(t *testing.T) { testBasic(t, testXed32, 0x0F, 0x3A) } -func TestXed32Prefix(t *testing.T) { testPrefix(t, testXed32) } - -func TestXed64Manual(t *testing.T) { testXed64(t, hexCases(t, xedManualTests)) } -func TestXed64Testdata(t *testing.T) { testXed64(t, concat(basicPrefixes, testdataCases(t))) } -func TestXed64ModRM(t *testing.T) { testXed64(t, concat(basicPrefixes, enumModRM)) } -func TestXed64OneByte(t *testing.T) { testBasic(t, testXed64) } -func TestXed640F(t *testing.T) { testBasic(t, testXed64, 0x0F) } -func TestXed640F38(t *testing.T) { testBasic(t, testXed64, 0x0F, 0x38) } -func TestXed640F3A(t *testing.T) { testBasic(t, testXed64, 0x0F, 0x3A) } -func TestXed64Prefix(t *testing.T) { testPrefix(t, testXed64) } - -func TestXed64REXTestdata(t *testing.T) { - testXed64(t, filter(concat3(basicPrefixes, rexPrefixes, testdataCases(t)), isValidREX)) -} -func TestXed64REXModRM(t *testing.T) { testXed64(t, concat3(basicPrefixes, rexPrefixes, enumModRM)) } -func TestXed64REXOneByte(t *testing.T) { testBasicREX(t, testXed64) } -func TestXed64REX0F(t *testing.T) { testBasicREX(t, testXed64, 0x0F) } -func TestXed64REX0F38(t *testing.T) { testBasicREX(t, testXed64, 0x0F, 0x38) } -func TestXed64REX0F3A(t *testing.T) { testBasicREX(t, testXed64, 0x0F, 0x3A) } -func TestXed64REXPrefix(t *testing.T) { testPrefixREX(t, testXed64) } - -// xedManualTests holds test cases that will be run by TestXedManual32 and TestXedManual64. -// If you are debugging a few cases that turned up in a longer run, it can be useful -// to list them here and then use -run=XedManual, particularly with tracing enabled. -var xedManualTests = ` -6690 -` - -// allowedMismatchXed reports whether the mismatch between text and dec -// should be allowed by the test. -func allowedMismatchXed(text string, size int, inst *Inst, dec ExtInst) bool { - if (contains(text, "error:") || isPrefix(text) && size == 1) && contains(dec.text, "GENERAL_ERROR", "INSTR_TOO_LONG", "BAD_LOCK_PREFIX") { - return true - } - - if contains(dec.text, "BAD_LOCK_PREFIX") && countExactPrefix(inst, PrefixLOCK|PrefixInvalid) > 0 { - return true - } - - if contains(dec.text, "BAD_LOCK_PREFIX", "GENERAL_ERROR") && countExactPrefix(inst, PrefixLOCK|PrefixImplicit) > 0 { - return true - } - - if text == "lock" && size == 1 && contains(dec.text, "BAD_LOCK_PREFIX") { - return true - } - - // Instructions not known to us. - if (contains(text, "error:") || isPrefix(text) && size == 1) && contains(dec.text, unsupported...) { - return true - } - - // Instructions not known to xed. - if contains(text, xedUnsupported...) && contains(dec.text, "ERROR") { - return true - } - - if (contains(text, "error:") || isPrefix(text) && size == 1) && contains(dec.text, "shl ") && (inst.Opcode>>16)&0xEC38 == 0xC030 { - return true - } - - // 82 11 22: xed says 'adc byte ptr [ecx], 0x22' but there is no justification in the manuals for that. - // C0 30 11: xed says 'shl byte ptr [eax], 0x11' but there is no justification in the manuals for that. - // F6 08 11: xed says 'test byte ptr [eax], 0x11' but there is no justification in the manuals for that. - if (contains(text, "error:") || isPrefix(text) && size == 1) && hasByte(dec.enc[:dec.nenc], 0x82, 0xC0, 0xC1, 0xD0, 0xD1, 0xD2, 0xD3, 0xF6, 0xF7) { - return true - } - - // F3 11 22 and many others: xed allows and drops misused rep/repn prefix. - if (text == "rep" && dec.enc[0] == 0xF3 || (text == "repn" || text == "repne") && dec.enc[0] == 0xF2) && (!contains(dec.text, "ins", "outs", "movs", "lods", "cmps", "scas") || contains(dec.text, "xmm")) { - return true - } - - // 0F C7 30: xed says vmptrld qword ptr [eax]; we say rdrand eax. - // TODO(rsc): Fix, since we are probably wrong, but we don't have vmptrld in the manual. - if contains(text, "rdrand") && contains(dec.text, "vmptrld", "vmxon", "vmclear") { - return true - } - - // F3 0F AE 00: we say 'rdfsbase dword ptr [eax]' but RDFSBASE needs a register. - // Also, this is a 64-bit only instruction. - // TODO(rsc): Fix to reject this encoding. - if contains(text, "rdfsbase", "rdgsbase", "wrfsbase", "wrgsbase") && contains(dec.text, "ERROR") { - return true - } - - // 0F 01 F8: we say swapgs but that's only valid in 64-bit mode. - // TODO(rsc): Fix. - if contains(text, "swapgs") { - return true - } - - // 0F 24 11: 'mov ecx, tr2' except there is no TR2. - // Or maybe the MOV to TR registers doesn't use RMF. - if contains(text, "cr1", "cr5", "cr6", "cr7", "tr0", "tr1", "tr2", "tr3", "tr4", "tr5", "tr6", "tr7") && contains(dec.text, "ERROR") { - return true - } - - // 0F 19 11, 0F 1C 11, 0F 1D 11, 0F 1E 11, 0F 1F 11: xed says nop, - // but the Intel manuals say that the only NOP there is 0F 1F /0. - // Perhaps xed is reporting an older encoding. - if (contains(text, "error:") || isPrefix(text) && size == 1) && contains(dec.text, "nop ") && (inst.Opcode>>8)&0xFFFF38 != 0x0F1F00 { - return true - } - - // 66 0F AE 38: clflushopt but we only know clflush - if contains(text, "clflush") && contains(dec.text, "clflushopt") { - return true - } - - // 0F 20 04 11: MOV SP, CR0 but has mod!=3 despite register argument. - // (This encoding ignores the mod bits.) The decoder sees the non-register - // mod and reads farther ahead to decode the memory reference that - // isn't really there, causing the size to be too large. - // TODO(rsc): Fix. - if text == dec.text && size > dec.nenc && contains(text, " cr", " dr", " tr") { - return true - } - - // 0F AE E9: xed says lfence, which is wrong (only 0F AE E8 is lfence). And so on. - if contains(dec.text, "fence") && hasByte(dec.enc[:dec.nenc], 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF) { - return true - } - - // DD C9, DF C9: xed says 'fxch st0, st1' but that instruction is D9 C9. - if (contains(text, "error:") || isPrefix(text) && size == 1) && contains(dec.text, "fxch ") && hasByte(dec.enc[:dec.nenc], 0xDD, 0xDF) { - return true - } - - // DC D4: xed says 'fcom st0, st4' but that instruction is D8 D4. - if (contains(text, "error:") || isPrefix(text) && size == 1) && contains(dec.text, "fcom ") && hasByte(dec.enc[:dec.nenc], 0xD8, 0xDC) { - return true - } - - // DE D4: xed says 'fcomp st0, st4' but that instruction is D8 D4. - if (contains(text, "error:") || isPrefix(text) && size == 1) && contains(dec.text, "fcomp ") && hasByte(dec.enc[:dec.nenc], 0xDC, 0xDE) { - return true - } - - // DF D4: xed says 'fstp st4, st0' but that instruction is DD D4. - if (contains(text, "error:") || isPrefix(text) && size == 1) && contains(dec.text, "fstp ") && hasByte(dec.enc[:dec.nenc], 0xDF) { - return true - } - - return false -} - -func countExactPrefix(inst *Inst, target Prefix) int { - n := 0 - for _, p := range inst.Prefix { - if p == target { - n++ - } - } - return n -} - -func hasByte(src []byte, target ...byte) bool { - for _, b := range target { - if bytes.IndexByte(src, b) >= 0 { - return true - } - } - return false -} - -// Instructions known to us but not to xed. -var xedUnsupported = strings.Fields(` - xrstor - xsave - xsave - ud1 - xgetbv - xsetbv - fxsave - fxrstor - clflush - lfence - mfence - sfence - rsqrtps - rcpps - emms - ldmxcsr - stmxcsr - movhpd - movnti - rdrand - movbe - movlpd - sysret -`) diff --git a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/xedext_test.go b/src/cmd/vendor/golang.org/x/arch/x86/x86asm/xedext_test.go deleted file mode 100644 index e27cdc07c4..0000000000 --- a/src/cmd/vendor/golang.org/x/arch/x86/x86asm/xedext_test.go +++ /dev/null @@ -1,205 +0,0 @@ -package x86asm - -import ( - "bytes" - "fmt" - "io" - "log" - "os" - "strconv" - "strings" - "testing" -) - -// xed binary from Intel sde-external-6.22.0-2014-03-06. -const xedPath = "/Users/rsc/bin/xed" - -func testXedArch(t *testing.T, arch int, generate func(func([]byte))) { - if testing.Short() { - t.Skip("skipping xed test in short mode") - } - if _, err := os.Stat(xedPath); err != nil { - t.Skip(err) - } - - testExtDis(t, "intel", arch, xed, generate, allowedMismatchXed) -} - -func testXed32(t *testing.T, generate func(func([]byte))) { - testXedArch(t, 32, generate) -} - -func testXed64(t *testing.T, generate func(func([]byte))) { - testXedArch(t, 64, generate) -} - -func xed(ext *ExtDis) error { - b, err := ext.Run(xedPath, fmt.Sprintf("-%d", ext.Arch), "-n", "1G", "-ir", ext.File.Name()) - if err != nil { - return err - } - - nmatch := 0 - next := uint32(start) - var ( - addr uint32 - encbuf [32]byte - enc []byte - text string - ) - - var xedEnd = []byte("# end of text section") - var xedEnd1 = []byte("# Errors") - - eof := false - for { - line, err := b.ReadSlice('\n') - if err != nil { - if err == io.EOF { - break - } - return fmt.Errorf("reading objdump output: %v", err) - } - if debug { - os.Stdout.Write(line) - } - if bytes.HasPrefix(line, xedEnd) || bytes.HasPrefix(line, xedEnd1) { - eof = true - } - if eof { - continue - } - nmatch++ - addr, enc, text = parseLineXed(line, encbuf[:0]) - if addr > next { - return fmt.Errorf("address out of sync expected <= %#x at %q in:\n%s", next, line, line) - } - if addr < next { - continue - } - switch text { - case "repz": - text = "rep" - case "repnz": - text = "repn" - default: - text = strings.Replace(text, "repz ", "rep ", -1) - text = strings.Replace(text, "repnz ", "repn ", -1) - } - if m := pcrelw.FindStringSubmatch(text); m != nil { - targ, _ := strconv.ParseUint(m[2], 16, 64) - text = fmt.Sprintf("%s .%+#x", m[1], int16(uint32(targ)-uint32(uint16(addr))-uint32(len(enc)))) - } - if m := pcrel.FindStringSubmatch(text); m != nil { - targ, _ := strconv.ParseUint(m[2], 16, 64) - text = fmt.Sprintf("%s .%+#x", m[1], int32(uint32(targ)-addr-uint32(len(enc)))) - } - ext.Dec <- ExtInst{addr, encbuf, len(enc), text} - encbuf = [32]byte{} - enc = nil - next += 32 - } - if next != start+uint32(ext.Size) { - return fmt.Errorf("not enough results found [%d %d]", next, start+ext.Size) - } - if err := ext.Wait(); err != nil { - return fmt.Errorf("exec: %v", err) - } - - return nil -} - -var ( - xedInRaw = []byte("In raw...") - xedDots = []byte("...") - xdis = []byte("XDIS ") - xedError = []byte("ERROR: ") - xedNoDecode = []byte("Could not decode at offset: 0x") -) - -func parseLineXed(line []byte, encstart []byte) (addr uint32, enc []byte, text string) { - oline := line - if bytes.HasPrefix(line, xedInRaw) || bytes.HasPrefix(line, xedDots) { - return 0, nil, "" - } - if bytes.HasPrefix(line, xedError) { - i := bytes.IndexByte(line[len(xedError):], ' ') - if i < 0 { - log.Fatalf("cannot parse error: %q", oline) - } - errstr := string(line[len(xedError):]) - i = bytes.Index(line, xedNoDecode) - if i < 0 { - log.Fatalf("cannot parse error: %q", oline) - } - i += len(xedNoDecode) - j := bytes.IndexByte(line[i:], ' ') - if j < 0 { - log.Fatalf("cannot parse error: %q", oline) - } - x, err := strconv.ParseUint(string(trimSpace(line[i:i+j])), 16, 32) - if err != nil { - log.Fatalf("cannot parse disassembly: %q", oline) - } - addr = uint32(x) - return addr, nil, errstr - } - - if !bytes.HasPrefix(line, xdis) { - log.Fatalf("cannot parse disassembly: %q", oline) - } - - i := bytes.IndexByte(line, ':') - if i < 0 { - log.Fatalf("cannot parse disassembly: %q", oline) - } - x, err := strconv.ParseUint(string(trimSpace(line[len(xdis):i])), 16, 32) - if err != nil { - log.Fatalf("cannot parse disassembly: %q", oline) - } - addr = uint32(x) - - // spaces - i++ - for i < len(line) && line[i] == ' ' { - i++ - } - // instruction class, spaces - for i < len(line) && line[i] != ' ' { - i++ - } - for i < len(line) && line[i] == ' ' { - i++ - } - // instruction set, spaces - for i < len(line) && line[i] != ' ' { - i++ - } - for i < len(line) && line[i] == ' ' { - i++ - } - - // hex - hexStart := i - for i < len(line) && line[i] != ' ' { - i++ - } - hexEnd := i - for i < len(line) && line[i] == ' ' { - i++ - } - - // text - textStart := i - for i < len(line) && line[i] != '\n' { - i++ - } - textEnd := i - - enc, ok := parseHex(line[hexStart:hexEnd], encstart) - if !ok { - log.Fatalf("cannot parse disassembly: %q", oline) - } - - return addr, enc, string(fixSpace(line[textStart:textEnd])) -} diff --git a/src/cmd/vendor/golang.org/x/crypto/AUTHORS b/src/cmd/vendor/golang.org/x/crypto/AUTHORS new file mode 100644 index 0000000000..2b00ddba0d --- /dev/null +++ b/src/cmd/vendor/golang.org/x/crypto/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at https://tip.golang.org/AUTHORS. diff --git a/src/cmd/vendor/golang.org/x/crypto/CONTRIBUTORS b/src/cmd/vendor/golang.org/x/crypto/CONTRIBUTORS new file mode 100644 index 0000000000..1fbd3e976f --- /dev/null +++ b/src/cmd/vendor/golang.org/x/crypto/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at https://tip.golang.org/CONTRIBUTORS. diff --git a/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/terminal.go b/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/terminal.go index 9a887598ff..2f04ee5b5c 100644 --- a/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/terminal.go +++ b/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/terminal.go @@ -7,6 +7,7 @@ package terminal import ( "bytes" "io" + "strconv" "sync" "unicode/utf8" ) @@ -159,6 +160,10 @@ func bytesToKey(b []byte, pasteActive bool) (rune, []byte) { return keyClearScreen, b[1:] case 23: // ^W return keyDeleteWord, b[1:] + case 14: // ^N + return keyDown, b[1:] + case 16: // ^P + return keyUp, b[1:] } } @@ -267,34 +272,44 @@ func (t *Terminal) moveCursorToPos(pos int) { } func (t *Terminal) move(up, down, left, right int) { - movement := make([]rune, 3*(up+down+left+right)) - m := movement - for i := 0; i < up; i++ { - m[0] = keyEscape - m[1] = '[' - m[2] = 'A' - m = m[3:] - } - for i := 0; i < down; i++ { - m[0] = keyEscape - m[1] = '[' - m[2] = 'B' - m = m[3:] - } - for i := 0; i < left; i++ { - m[0] = keyEscape - m[1] = '[' - m[2] = 'D' - m = m[3:] - } - for i := 0; i < right; i++ { - m[0] = keyEscape - m[1] = '[' - m[2] = 'C' - m = m[3:] + m := []rune{} + + // 1 unit up can be expressed as ^[[A or ^[A + // 5 units up can be expressed as ^[[5A + + if up == 1 { + m = append(m, keyEscape, '[', 'A') + } else if up > 1 { + m = append(m, keyEscape, '[') + m = append(m, []rune(strconv.Itoa(up))...) + m = append(m, 'A') } - t.queue(movement) + if down == 1 { + m = append(m, keyEscape, '[', 'B') + } else if down > 1 { + m = append(m, keyEscape, '[') + m = append(m, []rune(strconv.Itoa(down))...) + m = append(m, 'B') + } + + if right == 1 { + m = append(m, keyEscape, '[', 'C') + } else if right > 1 { + m = append(m, keyEscape, '[') + m = append(m, []rune(strconv.Itoa(right))...) + m = append(m, 'C') + } + + if left == 1 { + m = append(m, keyEscape, '[', 'D') + } else if left > 1 { + m = append(m, keyEscape, '[') + m = append(m, []rune(strconv.Itoa(left))...) + m = append(m, 'D') + } + + t.queue(m) } func (t *Terminal) clearLineToRight() { diff --git a/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/terminal_test.go b/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/terminal_test.go deleted file mode 100644 index d9b77c1c5e..0000000000 --- a/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/terminal_test.go +++ /dev/null @@ -1,358 +0,0 @@ -// 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. - -// +build darwin dragonfly freebsd linux,!appengine netbsd openbsd windows plan9 solaris - -package terminal - -import ( - "bytes" - "io" - "os" - "runtime" - "testing" -) - -type MockTerminal struct { - toSend []byte - bytesPerRead int - received []byte -} - -func (c *MockTerminal) Read(data []byte) (n int, err error) { - n = len(data) - if n == 0 { - return - } - if n > len(c.toSend) { - n = len(c.toSend) - } - if n == 0 { - return 0, io.EOF - } - if c.bytesPerRead > 0 && n > c.bytesPerRead { - n = c.bytesPerRead - } - copy(data, c.toSend[:n]) - c.toSend = c.toSend[n:] - return -} - -func (c *MockTerminal) Write(data []byte) (n int, err error) { - c.received = append(c.received, data...) - return len(data), nil -} - -func TestClose(t *testing.T) { - c := &MockTerminal{} - ss := NewTerminal(c, "> ") - line, err := ss.ReadLine() - if line != "" { - t.Errorf("Expected empty line but got: %s", line) - } - if err != io.EOF { - t.Errorf("Error should have been EOF but got: %s", err) - } -} - -var keyPressTests = []struct { - in string - line string - err error - throwAwayLines int -}{ - { - err: io.EOF, - }, - { - in: "\r", - line: "", - }, - { - in: "foo\r", - line: "foo", - }, - { - in: "a\x1b[Cb\r", // right - line: "ab", - }, - { - in: "a\x1b[Db\r", // left - line: "ba", - }, - { - in: "a\177b\r", // backspace - line: "b", - }, - { - in: "\x1b[A\r", // up - }, - { - in: "\x1b[B\r", // down - }, - { - in: "line\x1b[A\x1b[B\r", // up then down - line: "line", - }, - { - in: "line1\rline2\x1b[A\r", // recall previous line. - line: "line1", - throwAwayLines: 1, - }, - { - // recall two previous lines and append. - in: "line1\rline2\rline3\x1b[A\x1b[Axxx\r", - line: "line1xxx", - throwAwayLines: 2, - }, - { - // Ctrl-A to move to beginning of line followed by ^K to kill - // line. - in: "a b \001\013\r", - line: "", - }, - { - // Ctrl-A to move to beginning of line, Ctrl-E to move to end, - // finally ^K to kill nothing. - in: "a b \001\005\013\r", - line: "a b ", - }, - { - in: "\027\r", - line: "", - }, - { - in: "a\027\r", - line: "", - }, - { - in: "a \027\r", - line: "", - }, - { - in: "a b\027\r", - line: "a ", - }, - { - in: "a b \027\r", - line: "a ", - }, - { - in: "one two thr\x1b[D\027\r", - line: "one two r", - }, - { - in: "\013\r", - line: "", - }, - { - in: "a\013\r", - line: "a", - }, - { - in: "ab\x1b[D\013\r", - line: "a", - }, - { - in: "Ξεσκεπάζω\r", - line: "Ξεσκεπάζω", - }, - { - in: "£\r\x1b[A\177\r", // non-ASCII char, enter, up, backspace. - line: "", - throwAwayLines: 1, - }, - { - in: "£\r££\x1b[A\x1b[B\177\r", // non-ASCII char, enter, 2x non-ASCII, up, down, backspace, enter. - line: "£", - throwAwayLines: 1, - }, - { - // Ctrl-D at the end of the line should be ignored. - in: "a\004\r", - line: "a", - }, - { - // a, b, left, Ctrl-D should erase the b. - in: "ab\x1b[D\004\r", - line: "a", - }, - { - // a, b, c, d, left, left, ^U should erase to the beginning of - // the line. - in: "abcd\x1b[D\x1b[D\025\r", - line: "cd", - }, - { - // Bracketed paste mode: control sequences should be returned - // verbatim in paste mode. - in: "abc\x1b[200~de\177f\x1b[201~\177\r", - line: "abcde\177", - }, - { - // Enter in bracketed paste mode should still work. - in: "abc\x1b[200~d\refg\x1b[201~h\r", - line: "efgh", - throwAwayLines: 1, - }, - { - // Lines consisting entirely of pasted data should be indicated as such. - in: "\x1b[200~a\r", - line: "a", - err: ErrPasteIndicator, - }, -} - -func TestKeyPresses(t *testing.T) { - for i, test := range keyPressTests { - for j := 1; j < len(test.in); j++ { - c := &MockTerminal{ - toSend: []byte(test.in), - bytesPerRead: j, - } - ss := NewTerminal(c, "> ") - for k := 0; k < test.throwAwayLines; k++ { - _, err := ss.ReadLine() - if err != nil { - t.Errorf("Throwaway line %d from test %d resulted in error: %s", k, i, err) - } - } - line, err := ss.ReadLine() - if line != test.line { - t.Errorf("Line resulting from test %d (%d bytes per read) was '%s', expected '%s'", i, j, line, test.line) - break - } - if err != test.err { - t.Errorf("Error resulting from test %d (%d bytes per read) was '%v', expected '%v'", i, j, err, test.err) - break - } - } - } -} - -func TestPasswordNotSaved(t *testing.T) { - c := &MockTerminal{ - toSend: []byte("password\r\x1b[A\r"), - bytesPerRead: 1, - } - ss := NewTerminal(c, "> ") - pw, _ := ss.ReadPassword("> ") - if pw != "password" { - t.Fatalf("failed to read password, got %s", pw) - } - line, _ := ss.ReadLine() - if len(line) > 0 { - t.Fatalf("password was saved in history") - } -} - -var setSizeTests = []struct { - width, height int -}{ - {40, 13}, - {80, 24}, - {132, 43}, -} - -func TestTerminalSetSize(t *testing.T) { - for _, setSize := range setSizeTests { - c := &MockTerminal{ - toSend: []byte("password\r\x1b[A\r"), - bytesPerRead: 1, - } - ss := NewTerminal(c, "> ") - ss.SetSize(setSize.width, setSize.height) - pw, _ := ss.ReadPassword("Password: ") - if pw != "password" { - t.Fatalf("failed to read password, got %s", pw) - } - if string(c.received) != "Password: \r\n" { - t.Errorf("failed to set the temporary prompt expected %q, got %q", "Password: ", c.received) - } - } -} - -func TestReadPasswordLineEnd(t *testing.T) { - var tests = []struct { - input string - want string - }{ - {"\n", ""}, - {"\r\n", ""}, - {"test\r\n", "test"}, - {"testtesttesttes\n", "testtesttesttes"}, - {"testtesttesttes\r\n", "testtesttesttes"}, - {"testtesttesttesttest\n", "testtesttesttesttest"}, - {"testtesttesttesttest\r\n", "testtesttesttesttest"}, - } - for _, test := range tests { - buf := new(bytes.Buffer) - if _, err := buf.WriteString(test.input); err != nil { - t.Fatal(err) - } - - have, err := readPasswordLine(buf) - if err != nil { - t.Errorf("readPasswordLine(%q) failed: %v", test.input, err) - continue - } - if string(have) != test.want { - t.Errorf("readPasswordLine(%q) returns %q, but %q is expected", test.input, string(have), test.want) - continue - } - - if _, err = buf.WriteString(test.input); err != nil { - t.Fatal(err) - } - have, err = readPasswordLine(buf) - if err != nil { - t.Errorf("readPasswordLine(%q) failed: %v", test.input, err) - continue - } - if string(have) != test.want { - t.Errorf("readPasswordLine(%q) returns %q, but %q is expected", test.input, string(have), test.want) - continue - } - } -} - -func TestMakeRawState(t *testing.T) { - fd := int(os.Stdout.Fd()) - if !IsTerminal(fd) { - t.Skip("stdout is not a terminal; skipping test") - } - - st, err := GetState(fd) - if err != nil { - t.Fatalf("failed to get terminal state from GetState: %s", err) - } - - if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") { - t.Skip("MakeRaw not allowed on iOS; skipping test") - } - - defer Restore(fd, st) - raw, err := MakeRaw(fd) - if err != nil { - t.Fatalf("failed to get terminal state from MakeRaw: %s", err) - } - - if *st != *raw { - t.Errorf("states do not match; was %v, expected %v", raw, st) - } -} - -func TestOutputNewlines(t *testing.T) { - // \n should be changed to \r\n in terminal output. - buf := new(bytes.Buffer) - term := NewTerminal(buf, ">") - - term.Write([]byte("1\n2\n")) - output := string(buf.Bytes()) - const expected = "1\r\n2\r\n" - - if output != expected { - t.Errorf("incorrect output: was %q, expected %q", output, expected) - } -} diff --git a/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/util.go b/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/util.go index 731c89a284..3911040840 100644 --- a/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/util.go +++ b/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/util.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build darwin dragonfly freebsd linux,!appengine netbsd openbsd +// +build aix darwin dragonfly freebsd linux,!appengine netbsd openbsd // Package terminal provides support functions for dealing with terminals, as // commonly found on UNIX systems. @@ -25,7 +25,7 @@ type State struct { termios unix.Termios } -// IsTerminal returns true if the given file descriptor is a terminal. +// IsTerminal returns whether the given file descriptor is a terminal. func IsTerminal(fd int) bool { _, err := unix.IoctlGetTermios(fd, ioctlReadTermios) return err == nil diff --git a/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/util_aix.go b/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/util_aix.go new file mode 100644 index 0000000000..dfcd627859 --- /dev/null +++ b/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/util_aix.go @@ -0,0 +1,12 @@ +// 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. + +// +build aix + +package terminal + +import "golang.org/x/sys/unix" + +const ioctlReadTermios = unix.TCGETS +const ioctlWriteTermios = unix.TCSETS diff --git a/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go b/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go index 799f049f04..9317ac7ede 100644 --- a/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go +++ b/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go @@ -21,7 +21,7 @@ import ( type State struct{} -// IsTerminal returns true if the given file descriptor is a terminal. +// IsTerminal returns whether the given file descriptor is a terminal. func IsTerminal(fd int) bool { return false } diff --git a/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go b/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go index 9e41b9f43f..3d5f06a9f0 100644 --- a/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go +++ b/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go @@ -17,7 +17,7 @@ type State struct { termios unix.Termios } -// IsTerminal returns true if the given file descriptor is a terminal. +// IsTerminal returns whether the given file descriptor is a terminal. func IsTerminal(fd int) bool { _, err := unix.IoctlGetTermio(fd, unix.TCGETA) return err == nil diff --git a/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/util_windows.go b/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/util_windows.go index 8618955df7..5cfdf8f3f0 100644 --- a/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/util_windows.go +++ b/src/cmd/vendor/golang.org/x/crypto/ssh/terminal/util_windows.go @@ -26,7 +26,7 @@ type State struct { mode uint32 } -// IsTerminal returns true if the given file descriptor is a terminal. +// IsTerminal returns whether the given file descriptor is a terminal. func IsTerminal(fd int) bool { var st uint32 err := windows.GetConsoleMode(windows.Handle(fd), &st) @@ -64,13 +64,15 @@ func Restore(fd int, state *State) error { return windows.SetConsoleMode(windows.Handle(fd), state.mode) } -// GetSize returns the dimensions of the given terminal. +// GetSize returns the visible dimensions of the given terminal. +// +// These dimensions don't include any scrollback buffer height. func GetSize(fd int) (width, height int, err error) { var info windows.ConsoleScreenBufferInfo if err := windows.GetConsoleScreenBufferInfo(windows.Handle(fd), &info); err != nil { return 0, 0, err } - return int(info.Size.X), int(info.Size.Y), nil + return int(info.Window.Right - info.Window.Left + 1), int(info.Window.Bottom - info.Window.Top + 1), nil } // ReadPassword reads a line of input from a terminal without local echo. This diff --git a/src/cmd/vendor/golang.org/x/sys/AUTHORS b/src/cmd/vendor/golang.org/x/sys/AUTHORS new file mode 100644 index 0000000000..15167cd746 --- /dev/null +++ b/src/cmd/vendor/golang.org/x/sys/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at http://tip.golang.org/AUTHORS. diff --git a/src/cmd/vendor/golang.org/x/sys/CONTRIBUTORS b/src/cmd/vendor/golang.org/x/sys/CONTRIBUTORS new file mode 100644 index 0000000000..1c4577e968 --- /dev/null +++ b/src/cmd/vendor/golang.org/x/sys/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/src/cmd/vendor/golang.org/x/sys/unix/.gitignore b/src/cmd/vendor/golang.org/x/sys/unix/.gitignore new file mode 100644 index 0000000000..e3e0fc6f89 --- /dev/null +++ b/src/cmd/vendor/golang.org/x/sys/unix/.gitignore @@ -0,0 +1,2 @@ +_obj/ +unix.test diff --git a/src/cmd/vendor/golang.org/x/sys/unix/asm_openbsd_arm64.s b/src/cmd/vendor/golang.org/x/sys/unix/asm_openbsd_arm64.s new file mode 100644 index 0000000000..0cedea3d39 --- /dev/null +++ b/src/cmd/vendor/golang.org/x/sys/unix/asm_openbsd_arm64.s @@ -0,0 +1,29 @@ +// 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. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for arm64, OpenBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/creds_test.go b/src/cmd/vendor/golang.org/x/sys/unix/creds_test.go deleted file mode 100644 index 1b5083196a..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/creds_test.go +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright 2012 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. - -// +build linux - -package unix_test - -import ( - "bytes" - "go/build" - "net" - "os" - "testing" - - "golang.org/x/sys/unix" -) - -// TestSCMCredentials tests the sending and receiving of credentials -// (PID, UID, GID) in an ancillary message between two UNIX -// sockets. The SO_PASSCRED socket option is enabled on the sending -// socket for this to work. -func TestSCMCredentials(t *testing.T) { - socketTypeTests := []struct { - socketType int - dataLen int - }{ - { - unix.SOCK_STREAM, - 1, - }, { - unix.SOCK_DGRAM, - 0, - }, - } - - for _, tt := range socketTypeTests { - if tt.socketType == unix.SOCK_DGRAM && !atLeast1p10() { - t.Log("skipping DGRAM test on pre-1.10") - continue - } - - fds, err := unix.Socketpair(unix.AF_LOCAL, tt.socketType, 0) - if err != nil { - t.Fatalf("Socketpair: %v", err) - } - defer unix.Close(fds[0]) - defer unix.Close(fds[1]) - - err = unix.SetsockoptInt(fds[0], unix.SOL_SOCKET, unix.SO_PASSCRED, 1) - if err != nil { - t.Fatalf("SetsockoptInt: %v", err) - } - - srvFile := os.NewFile(uintptr(fds[0]), "server") - defer srvFile.Close() - srv, err := net.FileConn(srvFile) - if err != nil { - t.Errorf("FileConn: %v", err) - return - } - defer srv.Close() - - cliFile := os.NewFile(uintptr(fds[1]), "client") - defer cliFile.Close() - cli, err := net.FileConn(cliFile) - if err != nil { - t.Errorf("FileConn: %v", err) - return - } - defer cli.Close() - - var ucred unix.Ucred - ucred.Pid = int32(os.Getpid()) - ucred.Uid = uint32(os.Getuid()) - ucred.Gid = uint32(os.Getgid()) - oob := unix.UnixCredentials(&ucred) - - // On SOCK_STREAM, this is internally going to send a dummy byte - n, oobn, err := cli.(*net.UnixConn).WriteMsgUnix(nil, oob, nil) - if err != nil { - t.Fatalf("WriteMsgUnix: %v", err) - } - if n != 0 { - t.Fatalf("WriteMsgUnix n = %d, want 0", n) - } - if oobn != len(oob) { - t.Fatalf("WriteMsgUnix oobn = %d, want %d", oobn, len(oob)) - } - - oob2 := make([]byte, 10*len(oob)) - n, oobn2, flags, _, err := srv.(*net.UnixConn).ReadMsgUnix(nil, oob2) - if err != nil { - t.Fatalf("ReadMsgUnix: %v", err) - } - if flags != 0 { - t.Fatalf("ReadMsgUnix flags = 0x%x, want 0", flags) - } - if n != tt.dataLen { - t.Fatalf("ReadMsgUnix n = %d, want %d", n, tt.dataLen) - } - if oobn2 != oobn { - // without SO_PASSCRED set on the socket, ReadMsgUnix will - // return zero oob bytes - t.Fatalf("ReadMsgUnix oobn = %d, want %d", oobn2, oobn) - } - oob2 = oob2[:oobn2] - if !bytes.Equal(oob, oob2) { - t.Fatal("ReadMsgUnix oob bytes don't match") - } - - scm, err := unix.ParseSocketControlMessage(oob2) - if err != nil { - t.Fatalf("ParseSocketControlMessage: %v", err) - } - newUcred, err := unix.ParseUnixCredentials(&scm[0]) - if err != nil { - t.Fatalf("ParseUnixCredentials: %v", err) - } - if *newUcred != ucred { - t.Fatalf("ParseUnixCredentials = %+v, want %+v", newUcred, ucred) - } - } -} - -// atLeast1p10 reports whether we are running on Go 1.10 or later. -func atLeast1p10() bool { - for _, ver := range build.Default.ReleaseTags { - if ver == "go1.10" { - return true - } - } - return false -} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/darwin_test.go b/src/cmd/vendor/golang.org/x/sys/unix/darwin_test.go deleted file mode 100644 index 29af36f102..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/darwin_test.go +++ /dev/null @@ -1,210 +0,0 @@ -// 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. - -// +build darwin,go1.12,amd64 darwin,go1.12,386 - -package unix - -import ( - "os" - "os/exec" - "strings" - "testing" -) - -type darwinTest struct { - name string - f func() -} - -// TODO(khr): decide whether to keep this test enabled permanently or -// only temporarily. -func TestDarwinLoader(t *testing.T) { - // Make sure the Darwin dynamic loader can actually resolve - // all the system calls into libSystem.dylib. Unfortunately - // there is no easy way to test this at compile time. So we - // implement a crazy hack here, calling into the syscall - // function with all its arguments set to junk, and see what - // error we get. We are happy with any error (or none) except - // an error from the dynamic loader. - // - // We have to run each test in a separate subprocess for fault isolation. - // - // Hopefully the junk args won't accidentally ask the system to do "rm -fr /". - // - // In an ideal world each syscall would have its own test, so this test - // would be unnecessary. Unfortunately, we do not live in that world. - for _, test := range darwinTests { - // Call the test binary recursively, giving it a magic argument - // (see init below) and the name of the test to run. - cmd := exec.Command(os.Args[0], "testDarwinLoader", test.name) - - // Run subprocess, collect results. Note that we expect the subprocess - // to fail somehow, so the error is irrelevant. - out, _ := cmd.CombinedOutput() - - if strings.Contains(string(out), "dyld: Symbol not found:") { - t.Errorf("can't resolve %s in libSystem.dylib", test.name) - } - if !strings.Contains(string(out), "success") { - // Not really an error. Might be a syscall that never returns, - // like exit, or one that segfaults, like gettimeofday. - t.Logf("test never finished: %s: %s", test.name, string(out)) - } - } -} - -func init() { - // The test binary execs itself with the "testDarwinLoader" argument. - // Run the test specified by os.Args[2], then panic. - if len(os.Args) >= 3 && os.Args[1] == "testDarwinLoader" { - for _, test := range darwinTests { - if test.name == os.Args[2] { - test.f() - } - } - // Panic with a "success" label, so the parent process can check it. - panic("success") - } -} - -// All the _trampoline functions in zsyscall_darwin_$ARCH.s -var darwinTests = [...]darwinTest{ - {"getgroups", libc_getgroups_trampoline}, - {"setgroups", libc_setgroups_trampoline}, - {"wait4", libc_wait4_trampoline}, - {"accept", libc_accept_trampoline}, - {"bind", libc_bind_trampoline}, - {"connect", libc_connect_trampoline}, - {"socket", libc_socket_trampoline}, - {"getsockopt", libc_getsockopt_trampoline}, - {"setsockopt", libc_setsockopt_trampoline}, - {"getpeername", libc_getpeername_trampoline}, - {"getsockname", libc_getsockname_trampoline}, - {"shutdown", libc_shutdown_trampoline}, - {"socketpair", libc_socketpair_trampoline}, - {"recvfrom", libc_recvfrom_trampoline}, - {"sendto", libc_sendto_trampoline}, - {"recvmsg", libc_recvmsg_trampoline}, - {"sendmsg", libc_sendmsg_trampoline}, - {"kevent", libc_kevent_trampoline}, - {"__sysctl", libc___sysctl_trampoline}, - {"utimes", libc_utimes_trampoline}, - {"futimes", libc_futimes_trampoline}, - {"fcntl", libc_fcntl_trampoline}, - {"poll", libc_poll_trampoline}, - {"madvise", libc_madvise_trampoline}, - {"mlock", libc_mlock_trampoline}, - {"mlockall", libc_mlockall_trampoline}, - {"mprotect", libc_mprotect_trampoline}, - {"msync", libc_msync_trampoline}, - {"munlock", libc_munlock_trampoline}, - {"munlockall", libc_munlockall_trampoline}, - {"ptrace", libc_ptrace_trampoline}, - {"pipe", libc_pipe_trampoline}, - {"getxattr", libc_getxattr_trampoline}, - {"fgetxattr", libc_fgetxattr_trampoline}, - {"setxattr", libc_setxattr_trampoline}, - {"fsetxattr", libc_fsetxattr_trampoline}, - {"removexattr", libc_removexattr_trampoline}, - {"fremovexattr", libc_fremovexattr_trampoline}, - {"listxattr", libc_listxattr_trampoline}, - {"flistxattr", libc_flistxattr_trampoline}, - {"kill", libc_kill_trampoline}, - {"ioctl", libc_ioctl_trampoline}, - {"access", libc_access_trampoline}, - {"adjtime", libc_adjtime_trampoline}, - {"chdir", libc_chdir_trampoline}, - {"chflags", libc_chflags_trampoline}, - {"chmod", libc_chmod_trampoline}, - {"chown", libc_chown_trampoline}, - {"chroot", libc_chroot_trampoline}, - {"close", libc_close_trampoline}, - {"dup", libc_dup_trampoline}, - {"dup2", libc_dup2_trampoline}, - {"exchangedata", libc_exchangedata_trampoline}, - {"exit", libc_exit_trampoline}, - {"faccessat", libc_faccessat_trampoline}, - {"fchdir", libc_fchdir_trampoline}, - {"fchflags", libc_fchflags_trampoline}, - {"fchmod", libc_fchmod_trampoline}, - {"fchmodat", libc_fchmodat_trampoline}, - {"fchown", libc_fchown_trampoline}, - {"fchownat", libc_fchownat_trampoline}, - {"flock", libc_flock_trampoline}, - {"fpathconf", libc_fpathconf_trampoline}, - {"fstat64", libc_fstat64_trampoline}, - {"fstatat64", libc_fstatat64_trampoline}, - {"fstatfs64", libc_fstatfs64_trampoline}, - {"fsync", libc_fsync_trampoline}, - {"ftruncate", libc_ftruncate_trampoline}, - {"__getdirentries64", libc___getdirentries64_trampoline}, - {"getdtablesize", libc_getdtablesize_trampoline}, - {"getegid", libc_getegid_trampoline}, - {"geteuid", libc_geteuid_trampoline}, - {"getgid", libc_getgid_trampoline}, - {"getpgid", libc_getpgid_trampoline}, - {"getpgrp", libc_getpgrp_trampoline}, - {"getpid", libc_getpid_trampoline}, - {"getppid", libc_getppid_trampoline}, - {"getpriority", libc_getpriority_trampoline}, - {"getrlimit", libc_getrlimit_trampoline}, - {"getrusage", libc_getrusage_trampoline}, - {"getsid", libc_getsid_trampoline}, - {"getuid", libc_getuid_trampoline}, - {"issetugid", libc_issetugid_trampoline}, - {"kqueue", libc_kqueue_trampoline}, - {"lchown", libc_lchown_trampoline}, - {"link", libc_link_trampoline}, - {"linkat", libc_linkat_trampoline}, - {"listen", libc_listen_trampoline}, - {"lstat64", libc_lstat64_trampoline}, - {"mkdir", libc_mkdir_trampoline}, - {"mkdirat", libc_mkdirat_trampoline}, - {"mkfifo", libc_mkfifo_trampoline}, - {"mknod", libc_mknod_trampoline}, - {"open", libc_open_trampoline}, - {"openat", libc_openat_trampoline}, - {"pathconf", libc_pathconf_trampoline}, - {"pread", libc_pread_trampoline}, - {"pwrite", libc_pwrite_trampoline}, - {"read", libc_read_trampoline}, - {"readlink", libc_readlink_trampoline}, - {"readlinkat", libc_readlinkat_trampoline}, - {"rename", libc_rename_trampoline}, - {"renameat", libc_renameat_trampoline}, - {"revoke", libc_revoke_trampoline}, - {"rmdir", libc_rmdir_trampoline}, - {"lseek", libc_lseek_trampoline}, - {"select", libc_select_trampoline}, - {"setegid", libc_setegid_trampoline}, - {"seteuid", libc_seteuid_trampoline}, - {"setgid", libc_setgid_trampoline}, - {"setlogin", libc_setlogin_trampoline}, - {"setpgid", libc_setpgid_trampoline}, - {"setpriority", libc_setpriority_trampoline}, - {"setprivexec", libc_setprivexec_trampoline}, - {"setregid", libc_setregid_trampoline}, - {"setreuid", libc_setreuid_trampoline}, - {"setrlimit", libc_setrlimit_trampoline}, - {"setsid", libc_setsid_trampoline}, - {"settimeofday", libc_settimeofday_trampoline}, - {"setuid", libc_setuid_trampoline}, - {"stat64", libc_stat64_trampoline}, - {"statfs64", libc_statfs64_trampoline}, - {"symlink", libc_symlink_trampoline}, - {"symlinkat", libc_symlinkat_trampoline}, - {"sync", libc_sync_trampoline}, - {"truncate", libc_truncate_trampoline}, - {"umask", libc_umask_trampoline}, - {"undelete", libc_undelete_trampoline}, - {"unlink", libc_unlink_trampoline}, - {"unlinkat", libc_unlinkat_trampoline}, - {"unmount", libc_unmount_trampoline}, - {"write", libc_write_trampoline}, - {"mmap", libc_mmap_trampoline}, - {"munmap", libc_munmap_trampoline}, - {"gettimeofday", libc_gettimeofday_trampoline}, - {"getfsstat64", libc_getfsstat64_trampoline}, -} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/dev_linux_test.go b/src/cmd/vendor/golang.org/x/sys/unix/dev_linux_test.go deleted file mode 100644 index 51645289ca..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/dev_linux_test.go +++ /dev/null @@ -1,56 +0,0 @@ -// 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. - -// +build go1.7 - -package unix_test - -import ( - "fmt" - "testing" - - "golang.org/x/sys/unix" -) - -func TestDevices(t *testing.T) { - testCases := []struct { - path string - major uint32 - minor uint32 - }{ - // well known major/minor numbers according to - // https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/admin-guide/devices.txt - {"/dev/null", 1, 3}, - {"/dev/zero", 1, 5}, - {"/dev/random", 1, 8}, - {"/dev/full", 1, 7}, - {"/dev/urandom", 1, 9}, - {"/dev/tty", 5, 0}, - } - for _, tc := range testCases { - t.Run(fmt.Sprintf("%s %v:%v", tc.path, tc.major, tc.minor), func(t *testing.T) { - var stat unix.Stat_t - err := unix.Stat(tc.path, &stat) - if err != nil { - if err == unix.EACCES { - t.Skip("no permission to stat device, skipping test") - } - t.Errorf("failed to stat device: %v", err) - return - } - - dev := uint64(stat.Rdev) - if unix.Major(dev) != tc.major { - t.Errorf("for %s Major(%#x) == %d, want %d", tc.path, dev, unix.Major(dev), tc.major) - } - if unix.Minor(dev) != tc.minor { - t.Errorf("for %s Minor(%#x) == %d, want %d", tc.path, dev, unix.Minor(dev), tc.minor) - } - if unix.Mkdev(tc.major, tc.minor) != dev { - t.Errorf("for %s Mkdev(%d, %d) == %#x, want %#x", tc.path, tc.major, tc.minor, unix.Mkdev(tc.major, tc.minor), dev) - } - }) - - } -} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/example_flock_test.go b/src/cmd/vendor/golang.org/x/sys/unix/example_flock_test.go deleted file mode 100644 index 6c9174859e..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/example_flock_test.go +++ /dev/null @@ -1,25 +0,0 @@ -// 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. - -// +build darwin dragonfly freebsd linux netbsd openbsd solaris - -package unix_test - -import ( - "log" - "os" - - "golang.org/x/sys/unix" -) - -func ExampleFlock() { - f, _ := os.Create("example.lock") - if err := unix.Flock(int(f.Fd()), unix.LOCK_EX); err != nil { - log.Fatal(err) - } - // Do work here that requires the lock. When finished, release the lock: - if err := unix.Flock(int(f.Fd()), unix.LOCK_UN); err != nil { - log.Fatal(err) - } -} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/mkall.sh b/src/cmd/vendor/golang.org/x/sys/unix/mkall.sh old mode 100755 new mode 100644 index 75152f99b2..80d00707bb --- a/src/cmd/vendor/golang.org/x/sys/unix/mkall.sh +++ b/src/cmd/vendor/golang.org/x/sys/unix/mkall.sh @@ -146,24 +146,39 @@ netbsd_arm) # API consistent across platforms. mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" ;; +netbsd_arm64) + mkerrors="$mkerrors -m64" + mksyscall="go run mksyscall.go -netbsd" + mksysnum="go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; openbsd_386) mkerrors="$mkerrors -m32" mksyscall="go run mksyscall.go -l32 -openbsd" - mksysctl="./mksysctl_openbsd.pl" + mksysctl="go run mksysctl_openbsd.go" mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'" mktypes="GOARCH=$GOARCH go tool cgo -godefs" ;; openbsd_amd64) mkerrors="$mkerrors -m64" mksyscall="go run mksyscall.go -openbsd" - mksysctl="./mksysctl_openbsd.pl" + mksysctl="go run mksysctl_openbsd.go" mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'" mktypes="GOARCH=$GOARCH go tool cgo -godefs" ;; openbsd_arm) mkerrors="$mkerrors" mksyscall="go run mksyscall.go -l32 -openbsd -arm" - mksysctl="./mksysctl_openbsd.pl" + mksysctl="go run mksysctl_openbsd.go" + mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'" + # Let the type of C char be signed for making the bare syscall + # API consistent across platforms. + mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" + ;; +openbsd_arm64) + mkerrors="$mkerrors -m64" + mksyscall="go run mksyscall.go -openbsd" + mksysctl="go run mksysctl_openbsd.go" mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'" # Let the type of C char be signed for making the bare syscall # API consistent across platforms. @@ -207,8 +222,6 @@ esac esac if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi - if [ -n "$mktypes" ]; then - echo "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go"; + if [ -n "$mktypes" ]; then echo "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go"; fi if [ -n "$mkasm" ]; then echo "$mkasm $GOARCH"; fi - fi ) | $run diff --git a/src/cmd/vendor/golang.org/x/sys/unix/mkerrors.sh b/src/cmd/vendor/golang.org/x/sys/unix/mkerrors.sh old mode 100755 new mode 100644 index 6a23484e5b..b3c33c2c32 --- a/src/cmd/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/src/cmd/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -192,6 +192,7 @@ struct ltchars { #include #include #include +#include #include #include #include @@ -221,6 +222,7 @@ struct ltchars { #include #include #include +#include #include #include @@ -498,9 +500,11 @@ ccflags="$@" $2 ~ /^NFN/ || $2 ~ /^XDP_/ || $2 ~ /^(HDIO|WIN|SMART)_/ || + $2 ~ /^CRYPTO_/ || $2 !~ "WMESGLEN" && $2 ~ /^W[A-Z0-9]+$/ || $2 ~/^PPPIOC/ || + $2 ~ /^FAN_|FANOTIFY_/ || $2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)} $2 ~ /^__WCOREFLAG$/ {next} $2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/mksysctl_openbsd.pl b/src/cmd/vendor/golang.org/x/sys/unix/mksysctl_openbsd.pl deleted file mode 100755 index 20632e1460..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/mksysctl_openbsd.pl +++ /dev/null @@ -1,265 +0,0 @@ -#!/usr/bin/env perl - -# 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. - -# -# Parse the header files for OpenBSD and generate a Go usable sysctl MIB. -# -# Build a MIB with each entry being an array containing the level, type and -# a hash that will contain additional entries if the current entry is a node. -# We then walk this MIB and create a flattened sysctl name to OID hash. -# - -use strict; - -if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") { - print STDERR "GOARCH or GOOS not defined in environment\n"; - exit 1; -} - -my $debug = 0; -my %ctls = (); - -my @headers = qw ( - sys/sysctl.h - sys/socket.h - sys/tty.h - sys/malloc.h - sys/mount.h - sys/namei.h - sys/sem.h - sys/shm.h - sys/vmmeter.h - uvm/uvmexp.h - uvm/uvm_param.h - uvm/uvm_swap_encrypt.h - ddb/db_var.h - net/if.h - net/if_pfsync.h - net/pipex.h - netinet/in.h - netinet/icmp_var.h - netinet/igmp_var.h - netinet/ip_ah.h - netinet/ip_carp.h - netinet/ip_divert.h - netinet/ip_esp.h - netinet/ip_ether.h - netinet/ip_gre.h - netinet/ip_ipcomp.h - netinet/ip_ipip.h - netinet/pim_var.h - netinet/tcp_var.h - netinet/udp_var.h - netinet6/in6.h - netinet6/ip6_divert.h - netinet6/pim6_var.h - netinet/icmp6.h - netmpls/mpls.h -); - -my @ctls = qw ( - kern - vm - fs - net - #debug # Special handling required - hw - #machdep # Arch specific - user - ddb - #vfs # Special handling required - fs.posix - kern.forkstat - kern.intrcnt - kern.malloc - kern.nchstats - kern.seminfo - kern.shminfo - kern.timecounter - kern.tty - kern.watchdog - net.bpf - net.ifq - net.inet - net.inet.ah - net.inet.carp - net.inet.divert - net.inet.esp - net.inet.etherip - net.inet.gre - net.inet.icmp - net.inet.igmp - net.inet.ip - net.inet.ip.ifq - net.inet.ipcomp - net.inet.ipip - net.inet.mobileip - net.inet.pfsync - net.inet.pim - net.inet.tcp - net.inet.udp - net.inet6 - net.inet6.divert - net.inet6.ip6 - net.inet6.icmp6 - net.inet6.pim6 - net.inet6.tcp6 - net.inet6.udp6 - net.mpls - net.mpls.ifq - net.key - net.pflow - net.pfsync - net.pipex - net.rt - vm.swapencrypt - #vfsgenctl # Special handling required -); - -# Node name "fixups" -my %ctl_map = ( - "ipproto" => "net.inet", - "net.inet.ipproto" => "net.inet", - "net.inet6.ipv6proto" => "net.inet6", - "net.inet6.ipv6" => "net.inet6.ip6", - "net.inet.icmpv6" => "net.inet6.icmp6", - "net.inet6.divert6" => "net.inet6.divert", - "net.inet6.tcp6" => "net.inet.tcp", - "net.inet6.udp6" => "net.inet.udp", - "mpls" => "net.mpls", - "swpenc" => "vm.swapencrypt" -); - -# Node mappings -my %node_map = ( - "net.inet.ip.ifq" => "net.ifq", - "net.inet.pfsync" => "net.pfsync", - "net.mpls.ifq" => "net.ifq" -); - -my $ctlname; -my %mib = (); -my %sysctl = (); -my $node; - -sub debug() { - print STDERR "$_[0]\n" if $debug; -} - -# Walk the MIB and build a sysctl name to OID mapping. -sub build_sysctl() { - my ($node, $name, $oid) = @_; - my %node = %{$node}; - my @oid = @{$oid}; - - foreach my $key (sort keys %node) { - my @node = @{$node{$key}}; - my $nodename = $name.($name ne '' ? '.' : '').$key; - my @nodeoid = (@oid, $node[0]); - if ($node[1] eq 'CTLTYPE_NODE') { - if (exists $node_map{$nodename}) { - $node = \%mib; - $ctlname = $node_map{$nodename}; - foreach my $part (split /\./, $ctlname) { - $node = \%{@{$$node{$part}}[2]}; - } - } else { - $node = $node[2]; - } - &build_sysctl($node, $nodename, \@nodeoid); - } elsif ($node[1] ne '') { - $sysctl{$nodename} = \@nodeoid; - } - } -} - -foreach my $ctl (@ctls) { - $ctls{$ctl} = $ctl; -} - -# Build MIB -foreach my $header (@headers) { - &debug("Processing $header..."); - open HEADER, "/usr/include/$header" || - print STDERR "Failed to open $header\n"; - while (
    ) { - if ($_ =~ /^#define\s+(CTL_NAMES)\s+{/ || - $_ =~ /^#define\s+(CTL_(.*)_NAMES)\s+{/ || - $_ =~ /^#define\s+((.*)CTL_NAMES)\s+{/) { - if ($1 eq 'CTL_NAMES') { - # Top level. - $node = \%mib; - } else { - # Node. - my $nodename = lc($2); - if ($header =~ /^netinet\//) { - $ctlname = "net.inet.$nodename"; - } elsif ($header =~ /^netinet6\//) { - $ctlname = "net.inet6.$nodename"; - } elsif ($header =~ /^net\//) { - $ctlname = "net.$nodename"; - } else { - $ctlname = "$nodename"; - $ctlname =~ s/^(fs|net|kern)_/$1\./; - } - if (exists $ctl_map{$ctlname}) { - $ctlname = $ctl_map{$ctlname}; - } - if (not exists $ctls{$ctlname}) { - &debug("Ignoring $ctlname..."); - next; - } - - # Walk down from the top of the MIB. - $node = \%mib; - foreach my $part (split /\./, $ctlname) { - if (not exists $$node{$part}) { - &debug("Missing node $part"); - $$node{$part} = [ 0, '', {} ]; - } - $node = \%{@{$$node{$part}}[2]}; - } - } - - # Populate current node with entries. - my $i = -1; - while (defined($_) && $_ !~ /^}/) { - $_ =
    ; - $i++ if $_ =~ /{.*}/; - next if $_ !~ /{\s+"(\w+)",\s+(CTLTYPE_[A-Z]+)\s+}/; - $$node{$1} = [ $i, $2, {} ]; - } - } - } - close HEADER; -} - -&build_sysctl(\%mib, "", []); - -print < 0 { + // Account for the additional NULL byte added by + // BytePtrFromString in kexecFileLoad. The kexec_file_load + // syscall expects a NULL-terminated string. + cmdlineLen++ + } + return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go index f23ca451c7..6230f64052 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go @@ -211,3 +211,16 @@ func Poll(fds []PollFd, timeout int) (n int, err error) { func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { return Renameat2(olddirfd, oldpath, newdirfd, newpath, 0) } + +//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) + +func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { + cmdlineLen := len(cmdline) + if cmdlineLen > 0 { + // Account for the additional NULL byte added by + // BytePtrFromString in kexecFileLoad. The kexec_file_load + // syscall expects a NULL-terminated string. + cmdlineLen++ + } + return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux_test.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux_test.go deleted file mode 100644 index 3c3bd816fd..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux_test.go +++ /dev/null @@ -1,533 +0,0 @@ -// 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. - -// +build linux - -package unix_test - -import ( - "io/ioutil" - "os" - "runtime" - "runtime/debug" - "testing" - "time" - - "golang.org/x/sys/unix" -) - -func TestIoctlGetInt(t *testing.T) { - f, err := os.Open("/dev/random") - if err != nil { - t.Fatalf("failed to open device: %v", err) - } - defer f.Close() - - v, err := unix.IoctlGetInt(int(f.Fd()), unix.RNDGETENTCNT) - if err != nil { - t.Fatalf("failed to perform ioctl: %v", err) - } - - t.Logf("%d bits of entropy available", v) -} - -func TestIoctlGetRTCTime(t *testing.T) { - f, err := os.Open("/dev/rtc0") - if err != nil { - t.Skipf("skipping test, %v", err) - } - defer f.Close() - - v, err := unix.IoctlGetRTCTime(int(f.Fd())) - if err != nil { - t.Fatalf("failed to perform ioctl: %v", err) - } - - t.Logf("RTC time: %04d-%02d-%02d %02d:%02d:%02d", v.Year+1900, v.Mon+1, v.Mday, v.Hour, v.Min, v.Sec) -} - -func TestPpoll(t *testing.T) { - if runtime.GOOS == "android" { - t.Skip("mkfifo syscall is not available on android, skipping test") - } - - defer chtmpdir(t)() - f, cleanup := mktmpfifo(t) - defer cleanup() - - const timeout = 100 * time.Millisecond - - ok := make(chan bool, 1) - go func() { - select { - case <-time.After(10 * timeout): - t.Errorf("Ppoll: failed to timeout after %d", 10*timeout) - case <-ok: - } - }() - - fds := []unix.PollFd{{Fd: int32(f.Fd()), Events: unix.POLLIN}} - timeoutTs := unix.NsecToTimespec(int64(timeout)) - n, err := unix.Ppoll(fds, &timeoutTs, nil) - ok <- true - if err != nil { - t.Errorf("Ppoll: unexpected error: %v", err) - return - } - if n != 0 { - t.Errorf("Ppoll: wrong number of events: got %v, expected %v", n, 0) - return - } -} - -func TestTime(t *testing.T) { - var ut unix.Time_t - ut2, err := unix.Time(&ut) - if err != nil { - t.Fatalf("Time: %v", err) - } - if ut != ut2 { - t.Errorf("Time: return value %v should be equal to argument %v", ut2, ut) - } - - var now time.Time - - for i := 0; i < 10; i++ { - ut, err = unix.Time(nil) - if err != nil { - t.Fatalf("Time: %v", err) - } - - now = time.Now() - - if int64(ut) == now.Unix() { - return - } - } - - t.Errorf("Time: return value %v should be nearly equal to time.Now().Unix() %v", ut, now.Unix()) -} - -func TestUtime(t *testing.T) { - defer chtmpdir(t)() - - touch(t, "file1") - - buf := &unix.Utimbuf{ - Modtime: 12345, - } - - err := unix.Utime("file1", buf) - if err != nil { - t.Fatalf("Utime: %v", err) - } - - fi, err := os.Stat("file1") - if err != nil { - t.Fatal(err) - } - - if fi.ModTime().Unix() != 12345 { - t.Errorf("Utime: failed to change modtime: expected %v, got %v", 12345, fi.ModTime().Unix()) - } -} - -func TestUtimesNanoAt(t *testing.T) { - defer chtmpdir(t)() - - symlink := "symlink1" - os.Remove(symlink) - err := os.Symlink("nonexisting", symlink) - if err != nil { - t.Fatal(err) - } - - ts := []unix.Timespec{ - {Sec: 1111, Nsec: 2222}, - {Sec: 3333, Nsec: 4444}, - } - err = unix.UtimesNanoAt(unix.AT_FDCWD, symlink, ts, unix.AT_SYMLINK_NOFOLLOW) - if err != nil { - t.Fatalf("UtimesNanoAt: %v", err) - } - - var st unix.Stat_t - err = unix.Lstat(symlink, &st) - if err != nil { - t.Fatalf("Lstat: %v", err) - } - - // Only check Mtim, Atim might not be supported by the underlying filesystem - expected := ts[1] - if st.Mtim.Nsec == 0 { - // Some filesystems only support 1-second time stamp resolution - // and will always set Nsec to 0. - expected.Nsec = 0 - } - if st.Mtim != expected { - t.Errorf("UtimesNanoAt: wrong mtime: expected %v, got %v", expected, st.Mtim) - } -} - -func TestRlimitAs(t *testing.T) { - // disable GC during to avoid flaky test - defer debug.SetGCPercent(debug.SetGCPercent(-1)) - - var rlim unix.Rlimit - err := unix.Getrlimit(unix.RLIMIT_AS, &rlim) - if err != nil { - t.Fatalf("Getrlimit: %v", err) - } - var zero unix.Rlimit - if zero == rlim { - t.Fatalf("Getrlimit: got zero value %#v", rlim) - } - set := rlim - set.Cur = uint64(unix.Getpagesize()) - err = unix.Setrlimit(unix.RLIMIT_AS, &set) - if err != nil { - t.Fatalf("Setrlimit: set failed: %#v %v", set, err) - } - - // RLIMIT_AS was set to the page size, so mmap()'ing twice the page size - // should fail. See 'man 2 getrlimit'. - _, err = unix.Mmap(-1, 0, 2*unix.Getpagesize(), unix.PROT_NONE, unix.MAP_ANON|unix.MAP_PRIVATE) - if err == nil { - t.Fatal("Mmap: unexpectedly succeeded after setting RLIMIT_AS") - } - - err = unix.Setrlimit(unix.RLIMIT_AS, &rlim) - if err != nil { - t.Fatalf("Setrlimit: restore failed: %#v %v", rlim, err) - } - - b, err := unix.Mmap(-1, 0, 2*unix.Getpagesize(), unix.PROT_NONE, unix.MAP_ANON|unix.MAP_PRIVATE) - if err != nil { - t.Fatalf("Mmap: %v", err) - } - err = unix.Munmap(b) - if err != nil { - t.Fatalf("Munmap: %v", err) - } -} - -func TestSelect(t *testing.T) { - _, err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0}) - if err != nil { - t.Fatalf("Select: %v", err) - } - - dur := 150 * time.Millisecond - tv := unix.NsecToTimeval(int64(dur)) - start := time.Now() - _, err = unix.Select(0, nil, nil, nil, &tv) - took := time.Since(start) - if err != nil { - t.Fatalf("Select: %v", err) - } - - if took < dur { - t.Errorf("Select: timeout should have been at least %v, got %v", dur, took) - } -} - -func TestPselect(t *testing.T) { - _, err := unix.Pselect(0, nil, nil, nil, &unix.Timespec{Sec: 0, Nsec: 0}, nil) - if err != nil { - t.Fatalf("Pselect: %v", err) - } - - dur := 2500 * time.Microsecond - ts := unix.NsecToTimespec(int64(dur)) - start := time.Now() - _, err = unix.Pselect(0, nil, nil, nil, &ts, nil) - took := time.Since(start) - if err != nil { - t.Fatalf("Pselect: %v", err) - } - - if took < dur { - t.Errorf("Pselect: timeout should have been at least %v, got %v", dur, took) - } -} - -func TestSchedSetaffinity(t *testing.T) { - runtime.LockOSThread() - defer runtime.UnlockOSThread() - - var oldMask unix.CPUSet - err := unix.SchedGetaffinity(0, &oldMask) - if err != nil { - t.Fatalf("SchedGetaffinity: %v", err) - } - - var newMask unix.CPUSet - newMask.Zero() - if newMask.Count() != 0 { - t.Errorf("CpuZero: didn't zero CPU set: %v", newMask) - } - cpu := 1 - newMask.Set(cpu) - if newMask.Count() != 1 || !newMask.IsSet(cpu) { - t.Errorf("CpuSet: didn't set CPU %d in set: %v", cpu, newMask) - } - cpu = 5 - newMask.Set(cpu) - if newMask.Count() != 2 || !newMask.IsSet(cpu) { - t.Errorf("CpuSet: didn't set CPU %d in set: %v", cpu, newMask) - } - newMask.Clear(cpu) - if newMask.Count() != 1 || newMask.IsSet(cpu) { - t.Errorf("CpuClr: didn't clear CPU %d in set: %v", cpu, newMask) - } - - if runtime.NumCPU() < 2 { - t.Skip("skipping setaffinity tests on single CPU system") - } - if runtime.GOOS == "android" { - t.Skip("skipping setaffinity tests on android") - } - - // On a system like ppc64x where some cores can be disabled using ppc64_cpu, - // setaffinity should only be called with enabled cores. The valid cores - // are found from the oldMask, but if none are found then the setaffinity - // tests are skipped. Issue #27875. - if !oldMask.IsSet(cpu) { - newMask.Zero() - for i := 0; i < len(oldMask); i++ { - if oldMask.IsSet(i) { - newMask.Set(i) - break - } - } - if newMask.Count() == 0 { - t.Skip("skipping setaffinity tests if CPU not available") - } - } - - err = unix.SchedSetaffinity(0, &newMask) - if err != nil { - t.Fatalf("SchedSetaffinity: %v", err) - } - - var gotMask unix.CPUSet - err = unix.SchedGetaffinity(0, &gotMask) - if err != nil { - t.Fatalf("SchedGetaffinity: %v", err) - } - - if gotMask != newMask { - t.Errorf("SchedSetaffinity: returned affinity mask does not match set affinity mask") - } - - // Restore old mask so it doesn't affect successive tests - err = unix.SchedSetaffinity(0, &oldMask) - if err != nil { - t.Fatalf("SchedSetaffinity: %v", err) - } -} - -func TestStatx(t *testing.T) { - var stx unix.Statx_t - err := unix.Statx(unix.AT_FDCWD, ".", 0, 0, &stx) - if err == unix.ENOSYS || err == unix.EPERM { - t.Skip("statx syscall is not available, skipping test") - } else if err != nil { - t.Fatalf("Statx: %v", err) - } - - defer chtmpdir(t)() - touch(t, "file1") - - var st unix.Stat_t - err = unix.Stat("file1", &st) - if err != nil { - t.Fatalf("Stat: %v", err) - } - - flags := unix.AT_STATX_SYNC_AS_STAT - err = unix.Statx(unix.AT_FDCWD, "file1", flags, unix.STATX_ALL, &stx) - if err != nil { - t.Fatalf("Statx: %v", err) - } - - if uint32(stx.Mode) != st.Mode { - t.Errorf("Statx: returned stat mode does not match Stat") - } - - ctime := unix.StatxTimestamp{Sec: int64(st.Ctim.Sec), Nsec: uint32(st.Ctim.Nsec)} - mtime := unix.StatxTimestamp{Sec: int64(st.Mtim.Sec), Nsec: uint32(st.Mtim.Nsec)} - - if stx.Ctime != ctime { - t.Errorf("Statx: returned stat ctime does not match Stat") - } - if stx.Mtime != mtime { - t.Errorf("Statx: returned stat mtime does not match Stat") - } - - err = os.Symlink("file1", "symlink1") - if err != nil { - t.Fatal(err) - } - - err = unix.Lstat("symlink1", &st) - if err != nil { - t.Fatalf("Lstat: %v", err) - } - - err = unix.Statx(unix.AT_FDCWD, "symlink1", flags, unix.STATX_BASIC_STATS, &stx) - if err != nil { - t.Fatalf("Statx: %v", err) - } - - // follow symlink, expect a regulat file - if stx.Mode&unix.S_IFREG == 0 { - t.Errorf("Statx: didn't follow symlink") - } - - err = unix.Statx(unix.AT_FDCWD, "symlink1", flags|unix.AT_SYMLINK_NOFOLLOW, unix.STATX_ALL, &stx) - if err != nil { - t.Fatalf("Statx: %v", err) - } - - // follow symlink, expect a symlink - if stx.Mode&unix.S_IFLNK == 0 { - t.Errorf("Statx: unexpectedly followed symlink") - } - if uint32(stx.Mode) != st.Mode { - t.Errorf("Statx: returned stat mode does not match Lstat") - } - - ctime = unix.StatxTimestamp{Sec: int64(st.Ctim.Sec), Nsec: uint32(st.Ctim.Nsec)} - mtime = unix.StatxTimestamp{Sec: int64(st.Mtim.Sec), Nsec: uint32(st.Mtim.Nsec)} - - if stx.Ctime != ctime { - t.Errorf("Statx: returned stat ctime does not match Lstat") - } - if stx.Mtime != mtime { - t.Errorf("Statx: returned stat mtime does not match Lstat") - } -} - -// stringsFromByteSlice converts a sequence of attributes to a []string. -// On Linux, each entry is a NULL-terminated string. -func stringsFromByteSlice(buf []byte) []string { - var result []string - off := 0 - for i, b := range buf { - if b == 0 { - result = append(result, string(buf[off:i])) - off = i + 1 - } - } - return result -} - -func TestFaccessat(t *testing.T) { - defer chtmpdir(t)() - touch(t, "file1") - - err := unix.Faccessat(unix.AT_FDCWD, "file1", unix.R_OK, 0) - if err != nil { - t.Errorf("Faccessat: unexpected error: %v", err) - } - - err = unix.Faccessat(unix.AT_FDCWD, "file1", unix.R_OK, 2) - if err != unix.EINVAL { - t.Errorf("Faccessat: unexpected error: %v, want EINVAL", err) - } - - err = unix.Faccessat(unix.AT_FDCWD, "file1", unix.R_OK, unix.AT_EACCESS) - if err != nil { - t.Errorf("Faccessat: unexpected error: %v", err) - } - - err = os.Symlink("file1", "symlink1") - if err != nil { - t.Fatal(err) - } - - err = unix.Faccessat(unix.AT_FDCWD, "symlink1", unix.R_OK, unix.AT_SYMLINK_NOFOLLOW) - if err != nil { - t.Errorf("Faccessat SYMLINK_NOFOLLOW: unexpected error %v", err) - } - - // We can't really test AT_SYMLINK_NOFOLLOW, because there - // doesn't seem to be any way to change the mode of a symlink. - // We don't test AT_EACCESS because such tests are only - // meaningful if run as root. - - err = unix.Fchmodat(unix.AT_FDCWD, "file1", 0, 0) - if err != nil { - t.Errorf("Fchmodat: unexpected error %v", err) - } - - err = unix.Faccessat(unix.AT_FDCWD, "file1", unix.F_OK, unix.AT_SYMLINK_NOFOLLOW) - if err != nil { - t.Errorf("Faccessat: unexpected error: %v", err) - } - - err = unix.Faccessat(unix.AT_FDCWD, "file1", unix.R_OK, unix.AT_SYMLINK_NOFOLLOW) - if err != unix.EACCES { - if unix.Getuid() != 0 { - t.Errorf("Faccessat: unexpected error: %v, want EACCES", err) - } - } -} - -func TestSyncFileRange(t *testing.T) { - file, err := ioutil.TempFile("", "TestSyncFileRange") - if err != nil { - t.Fatal(err) - } - defer os.Remove(file.Name()) - defer file.Close() - - err = unix.SyncFileRange(int(file.Fd()), 0, 0, 0) - if err == unix.ENOSYS || err == unix.EPERM { - t.Skip("sync_file_range syscall is not available, skipping test") - } else if err != nil { - t.Fatalf("SyncFileRange: %v", err) - } - - // invalid flags - flags := 0xf00 - err = unix.SyncFileRange(int(file.Fd()), 0, 0, flags) - if err != unix.EINVAL { - t.Fatalf("SyncFileRange: unexpected error: %v, want EINVAL", err) - } -} - -func TestClockNanosleep(t *testing.T) { - delay := 100 * time.Millisecond - - // Relative timespec. - start := time.Now() - rel := unix.NsecToTimespec(delay.Nanoseconds()) - err := unix.ClockNanosleep(unix.CLOCK_MONOTONIC, 0, &rel, nil) - if err == unix.ENOSYS || err == unix.EPERM { - t.Skip("clock_nanosleep syscall is not available, skipping test") - } else if err != nil { - t.Errorf("ClockNanosleep(CLOCK_MONOTONIC, 0, %#v, nil) = %v", &rel, err) - } else if slept := time.Now().Sub(start); slept < delay { - t.Errorf("ClockNanosleep(CLOCK_MONOTONIC, 0, %#v, nil) slept only %v", &rel, slept) - } - - // Absolute timespec. - start = time.Now() - until := start.Add(delay) - abs := unix.NsecToTimespec(until.UnixNano()) - err = unix.ClockNanosleep(unix.CLOCK_REALTIME, unix.TIMER_ABSTIME, &abs, nil) - if err != nil { - t.Errorf("ClockNanosleep(CLOCK_REALTIME, TIMER_ABSTIME, %#v (=%v), nil) = %v", &abs, until, err) - } else if slept := time.Now().Sub(start); slept < delay { - t.Errorf("ClockNanosleep(CLOCK_REALTIME, TIMER_ABSTIME, %#v (=%v), nil) slept only %v", &abs, until, slept) - } - - // Invalid clock. clock_nanosleep(2) says EINVAL, but it’s actually EOPNOTSUPP. - err = unix.ClockNanosleep(unix.CLOCK_THREAD_CPUTIME_ID, 0, &rel, nil) - if err != unix.EINVAL && err != unix.EOPNOTSUPP { - t.Errorf("ClockNanosleep(CLOCK_THREAD_CPUTIME_ID, 0, %#v, nil) = %v, want EINVAL or EOPNOTSUPP", &rel, err) - } -} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_netbsd_test.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_netbsd_test.go deleted file mode 100644 index 41141f96e6..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_netbsd_test.go +++ /dev/null @@ -1,51 +0,0 @@ -// 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 unix_test - -import ( - "bytes" - "testing" - - "golang.org/x/sys/unix" -) - -// stringsFromByteSlice converts a sequence of attributes to a []string. -// On NetBSD, each entry consists of a single byte containing the length -// of the attribute name, followed by the attribute name. -// The name is _not_ NULL-terminated. -func stringsFromByteSlice(buf []byte) []string { - var result []string - i := 0 - for i < len(buf) { - next := i + 1 + int(buf[i]) - result = append(result, string(buf[i+1:next])) - i = next - } - return result -} - -func TestSysctlClockinfo(t *testing.T) { - ci, err := unix.SysctlClockinfo("kern.clockrate") - if err != nil { - t.Fatal(err) - } - t.Logf("tick = %v, tickadj = %v, hz = %v, profhz = %v, stathz = %v", - ci.Tick, ci.Tickadj, ci.Hz, ci.Profhz, ci.Stathz) -} - -func TestIoctlPtmget(t *testing.T) { - fd, err := unix.Open("/dev/ptmx", unix.O_NOCTTY|unix.O_RDWR, 0666) - if err != nil { - t.Skip("failed to open /dev/ptmx, skipping test") - } - defer unix.Close(fd) - - ptm, err := unix.IoctlGetPtmget(fd, unix.TIOCPTSNAME) - if err != nil { - t.Fatalf("IoctlGetPtmget: %v\n", err) - } - - t.Logf("sfd = %v, ptsname = %v", ptm.Sfd, string(ptm.Sn[:bytes.IndexByte(ptm.Sn[:], 0)])) -} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_openbsd.go index 687999549c..c8648ec026 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_openbsd.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_openbsd.go @@ -43,6 +43,23 @@ func nametomib(name string) (mib []_C_int, err error) { return nil, EINVAL } +func SysctlClockinfo(name string) (*Clockinfo, error) { + mib, err := sysctlmib(name) + if err != nil { + return nil, err + } + + n := uintptr(SizeofClockinfo) + var ci Clockinfo + if err := sysctl(mib, (*byte)(unsafe.Pointer(&ci)), &n, nil, 0); err != nil { + return nil, err + } + if n != SizeofClockinfo { + return nil, EIO + } + return &ci, nil +} + func SysctlUvmexp(name string) (*Uvmexp, error) { mib, err := sysctlmib(name) if err != nil { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go new file mode 100644 index 0000000000..0fb39cf5eb --- /dev/null +++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go @@ -0,0 +1,37 @@ +// 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. + +// +build arm64,openbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of openbsd/amd64 the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_openbsd_test.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_openbsd_test.go deleted file mode 100644 index b95f334e19..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_openbsd_test.go +++ /dev/null @@ -1,49 +0,0 @@ -// 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 unix_test - -import ( - "testing" - "time" - - "golang.org/x/sys/unix" -) - -func TestPpoll(t *testing.T) { - f, cleanup := mktmpfifo(t) - defer cleanup() - - const timeout = 100 * time.Millisecond - - ok := make(chan bool, 1) - go func() { - select { - case <-time.After(10 * timeout): - t.Errorf("Ppoll: failed to timeout after %d", 10*timeout) - case <-ok: - } - }() - - fds := []unix.PollFd{{Fd: int32(f.Fd()), Events: unix.POLLIN}} - timeoutTs := unix.NsecToTimespec(int64(timeout)) - n, err := unix.Ppoll(fds, &timeoutTs, nil) - ok <- true - if err != nil { - t.Errorf("Ppoll: unexpected error: %v", err) - return - } - if n != 0 { - t.Errorf("Ppoll: wrong number of events: got %v, expected %v", n, 0) - return - } -} - -func TestSysctlUvmexp(t *testing.T) { - uvm, err := unix.SysctlUvmexp("vm.uvmexp") - if err != nil { - t.Fatal(err) - } - t.Logf("free = %v", uvm.Free) -} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_solaris_test.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_solaris_test.go deleted file mode 100644 index 57dba88243..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_solaris_test.go +++ /dev/null @@ -1,55 +0,0 @@ -// 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. - -// +build solaris - -package unix_test - -import ( - "os/exec" - "testing" - "time" - - "golang.org/x/sys/unix" -) - -func TestSelect(t *testing.T) { - err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0}) - if err != nil { - t.Fatalf("Select: %v", err) - } - - dur := 150 * time.Millisecond - tv := unix.NsecToTimeval(int64(dur)) - start := time.Now() - err = unix.Select(0, nil, nil, nil, &tv) - took := time.Since(start) - if err != nil { - t.Fatalf("Select: %v", err) - } - - if took < dur { - t.Errorf("Select: timeout should have been at least %v, got %v", dur, took) - } -} - -func TestStatvfs(t *testing.T) { - if err := unix.Statvfs("", nil); err == nil { - t.Fatal(`Statvfs("") expected failure`) - } - - statvfs := unix.Statvfs_t{} - if err := unix.Statvfs("/", &statvfs); err != nil { - t.Errorf(`Statvfs("/") failed: %v`, err) - } - - if t.Failed() { - mount, err := exec.Command("mount").CombinedOutput() - if err != nil { - t.Logf("mount: %v\n%s", err, mount) - } else { - t.Logf("mount: %s", mount) - } - } -} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_test.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_test.go deleted file mode 100644 index dc857840a4..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_test.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2013 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. - -// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris - -package unix_test - -import ( - "fmt" - "testing" - - "golang.org/x/sys/unix" -) - -func testSetGetenv(t *testing.T, key, value string) { - err := unix.Setenv(key, value) - if err != nil { - t.Fatalf("Setenv failed to set %q: %v", value, err) - } - newvalue, found := unix.Getenv(key) - if !found { - t.Fatalf("Getenv failed to find %v variable (want value %q)", key, value) - } - if newvalue != value { - t.Fatalf("Getenv(%v) = %q; want %q", key, newvalue, value) - } -} - -func TestEnv(t *testing.T) { - testSetGetenv(t, "TESTENV", "AVALUE") - // make sure TESTENV gets set to "", not deleted - testSetGetenv(t, "TESTENV", "") -} - -func TestItoa(t *testing.T) { - // Make most negative integer: 0x8000... - i := 1 - for i<<1 != 0 { - i <<= 1 - } - if i >= 0 { - t.Fatal("bad math") - } - s := unix.Itoa(i) - f := fmt.Sprint(i) - if s != f { - t.Fatalf("itoa(%d) = %s, want %s", i, s, f) - } -} - -func TestUname(t *testing.T) { - var utsname unix.Utsname - err := unix.Uname(&utsname) - if err != nil { - t.Fatalf("Uname: %v", err) - } - - t.Logf("OS: %s/%s %s", utsname.Sysname[:], utsname.Machine[:], utsname.Release[:]) -} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_unix.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_unix.go index 33583a22b6..3de37566c6 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_unix.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_unix.go @@ -28,6 +28,11 @@ var ( errENOENT error = syscall.ENOENT ) +var ( + signalNameMapOnce sync.Once + signalNameMap map[string]syscall.Signal +) + // errnoErr returns common boxed Errno values, to prevent // allocations at runtime. func errnoErr(e syscall.Errno) error { @@ -66,6 +71,19 @@ func SignalName(s syscall.Signal) string { return "" } +// SignalNum returns the syscall.Signal for signal named s, +// or 0 if a signal with such name is not found. +// The signal name should start with "SIG". +func SignalNum(s string) syscall.Signal { + signalNameMapOnce.Do(func() { + signalNameMap = make(map[string]syscall.Signal) + for _, signal := range signalList { + signalNameMap[signal.name] = signal.num + } + }) + return signalNameMap[s] +} + // clen returns the index of the first NULL byte in n or len(n) if n contains no NULL byte. func clen(n []byte) int { i := bytes.IndexByte(n, 0) @@ -276,6 +294,13 @@ func GetsockoptTimeval(fd, level, opt int) (*Timeval, error) { return &tv, err } +func GetsockoptUint64(fd, level, opt int) (value uint64, err error) { + var n uint64 + vallen := _Socklen(8) + err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) + return n, err +} + func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) { var rsa RawSockaddrAny var len _Socklen = SizeofSockaddrAny @@ -326,13 +351,21 @@ func SetsockoptLinger(fd, level, opt int, l *Linger) (err error) { } func SetsockoptString(fd, level, opt int, s string) (err error) { - return setsockopt(fd, level, opt, unsafe.Pointer(&[]byte(s)[0]), uintptr(len(s))) + var p unsafe.Pointer + if len(s) > 0 { + p = unsafe.Pointer(&[]byte(s)[0]) + } + return setsockopt(fd, level, opt, p, uintptr(len(s))) } func SetsockoptTimeval(fd, level, opt int, tv *Timeval) (err error) { return setsockopt(fd, level, opt, unsafe.Pointer(tv), unsafe.Sizeof(*tv)) } +func SetsockoptUint64(fd, level, opt int, value uint64) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(&value), 8) +} + func Socket(domain, typ, proto int) (fd int, err error) { if domain == AF_INET6 && SocketDisableIPv6 { return -1, EAFNOSUPPORT @@ -377,3 +410,22 @@ func SetNonblock(fd int, nonblocking bool) (err error) { func Exec(argv0 string, argv []string, envv []string) error { return syscall.Exec(argv0, argv, envv) } + +// Lutimes sets the access and modification times tv on path. If path refers to +// a symlink, it is not dereferenced and the timestamps are set on the symlink. +// If tv is nil, the access and modification times are set to the current time. +// Otherwise tv must contain exactly 2 elements, with access time as the first +// element and modification time as the second element. +func Lutimes(path string, tv []Timeval) error { + if tv == nil { + return UtimesNanoAt(AT_FDCWD, path, nil, AT_SYMLINK_NOFOLLOW) + } + if len(tv) != 2 { + return EINVAL + } + ts := []Timespec{ + NsecToTimespec(TimevalToNsec(tv[0])), + NsecToTimespec(TimevalToNsec(tv[1])), + } + return UtimesNanoAt(AT_FDCWD, path, ts, AT_SYMLINK_NOFOLLOW) +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_unix_test.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_unix_test.go deleted file mode 100644 index f6abe8c0d6..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_unix_test.go +++ /dev/null @@ -1,711 +0,0 @@ -// Copyright 2013 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. - -// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris - -package unix_test - -import ( - "flag" - "fmt" - "io/ioutil" - "net" - "os" - "os/exec" - "path/filepath" - "runtime" - "syscall" - "testing" - "time" - - "golang.org/x/sys/unix" -) - -// Tests that below functions, structures and constants are consistent -// on all Unix-like systems. -func _() { - // program scheduling priority functions and constants - var ( - _ func(int, int, int) error = unix.Setpriority - _ func(int, int) (int, error) = unix.Getpriority - ) - const ( - _ int = unix.PRIO_USER - _ int = unix.PRIO_PROCESS - _ int = unix.PRIO_PGRP - ) - - // termios constants - const ( - _ int = unix.TCIFLUSH - _ int = unix.TCIOFLUSH - _ int = unix.TCOFLUSH - ) - - // fcntl file locking structure and constants - var ( - _ = unix.Flock_t{ - Type: int16(0), - Whence: int16(0), - Start: int64(0), - Len: int64(0), - Pid: int32(0), - } - ) - const ( - _ = unix.F_GETLK - _ = unix.F_SETLK - _ = unix.F_SETLKW - ) -} - -func TestErrnoSignalName(t *testing.T) { - testErrors := []struct { - num syscall.Errno - name string - }{ - {syscall.EPERM, "EPERM"}, - {syscall.EINVAL, "EINVAL"}, - {syscall.ENOENT, "ENOENT"}, - } - - for _, te := range testErrors { - t.Run(fmt.Sprintf("%d/%s", te.num, te.name), func(t *testing.T) { - e := unix.ErrnoName(te.num) - if e != te.name { - t.Errorf("ErrnoName(%d) returned %s, want %s", te.num, e, te.name) - } - }) - } - - testSignals := []struct { - num syscall.Signal - name string - }{ - {syscall.SIGHUP, "SIGHUP"}, - {syscall.SIGPIPE, "SIGPIPE"}, - {syscall.SIGSEGV, "SIGSEGV"}, - } - - for _, ts := range testSignals { - t.Run(fmt.Sprintf("%d/%s", ts.num, ts.name), func(t *testing.T) { - s := unix.SignalName(ts.num) - if s != ts.name { - t.Errorf("SignalName(%d) returned %s, want %s", ts.num, s, ts.name) - } - }) - } -} - -func TestFcntlInt(t *testing.T) { - t.Parallel() - file, err := ioutil.TempFile("", "TestFnctlInt") - if err != nil { - t.Fatal(err) - } - defer os.Remove(file.Name()) - defer file.Close() - f := file.Fd() - flags, err := unix.FcntlInt(f, unix.F_GETFD, 0) - if err != nil { - t.Fatal(err) - } - if flags&unix.FD_CLOEXEC == 0 { - t.Errorf("flags %#x do not include FD_CLOEXEC", flags) - } -} - -// TestFcntlFlock tests whether the file locking structure matches -// the calling convention of each kernel. -func TestFcntlFlock(t *testing.T) { - name := filepath.Join(os.TempDir(), "TestFcntlFlock") - fd, err := unix.Open(name, unix.O_CREAT|unix.O_RDWR|unix.O_CLOEXEC, 0) - if err != nil { - t.Fatalf("Open failed: %v", err) - } - defer unix.Unlink(name) - defer unix.Close(fd) - flock := unix.Flock_t{ - Type: unix.F_RDLCK, - Start: 0, Len: 0, Whence: 1, - } - if err := unix.FcntlFlock(uintptr(fd), unix.F_GETLK, &flock); err != nil { - t.Fatalf("FcntlFlock failed: %v", err) - } -} - -// TestPassFD tests passing a file descriptor over a Unix socket. -// -// This test involved both a parent and child process. The parent -// process is invoked as a normal test, with "go test", which then -// runs the child process by running the current test binary with args -// "-test.run=^TestPassFD$" and an environment variable used to signal -// that the test should become the child process instead. -func TestPassFD(t *testing.T) { - if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") { - t.Skip("cannot exec subprocess on iOS, skipping test") - } - if runtime.GOOS == "aix" { - t.Skip("getsockname issue on AIX 7.2 tl1, skipping test") - } - - if os.Getenv("GO_WANT_HELPER_PROCESS") == "1" { - passFDChild() - return - } - - tempDir, err := ioutil.TempDir("", "TestPassFD") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(tempDir) - - fds, err := unix.Socketpair(unix.AF_LOCAL, unix.SOCK_STREAM, 0) - if err != nil { - t.Fatalf("Socketpair: %v", err) - } - defer unix.Close(fds[0]) - defer unix.Close(fds[1]) - writeFile := os.NewFile(uintptr(fds[0]), "child-writes") - readFile := os.NewFile(uintptr(fds[1]), "parent-reads") - defer writeFile.Close() - defer readFile.Close() - - cmd := exec.Command(os.Args[0], "-test.run=^TestPassFD$", "--", tempDir) - cmd.Env = []string{"GO_WANT_HELPER_PROCESS=1"} - if lp := os.Getenv("LD_LIBRARY_PATH"); lp != "" { - cmd.Env = append(cmd.Env, "LD_LIBRARY_PATH="+lp) - } - cmd.ExtraFiles = []*os.File{writeFile} - - out, err := cmd.CombinedOutput() - if len(out) > 0 || err != nil { - t.Fatalf("child process: %q, %v", out, err) - } - - c, err := net.FileConn(readFile) - if err != nil { - t.Fatalf("FileConn: %v", err) - } - defer c.Close() - - uc, ok := c.(*net.UnixConn) - if !ok { - t.Fatalf("unexpected FileConn type; expected UnixConn, got %T", c) - } - - buf := make([]byte, 32) // expect 1 byte - oob := make([]byte, 32) // expect 24 bytes - closeUnix := time.AfterFunc(5*time.Second, func() { - t.Logf("timeout reading from unix socket") - uc.Close() - }) - _, oobn, _, _, err := uc.ReadMsgUnix(buf, oob) - if err != nil { - t.Fatalf("ReadMsgUnix: %v", err) - } - closeUnix.Stop() - - scms, err := unix.ParseSocketControlMessage(oob[:oobn]) - if err != nil { - t.Fatalf("ParseSocketControlMessage: %v", err) - } - if len(scms) != 1 { - t.Fatalf("expected 1 SocketControlMessage; got scms = %#v", scms) - } - scm := scms[0] - gotFds, err := unix.ParseUnixRights(&scm) - if err != nil { - t.Fatalf("unix.ParseUnixRights: %v", err) - } - if len(gotFds) != 1 { - t.Fatalf("wanted 1 fd; got %#v", gotFds) - } - - f := os.NewFile(uintptr(gotFds[0]), "fd-from-child") - defer f.Close() - - got, err := ioutil.ReadAll(f) - want := "Hello from child process!\n" - if string(got) != want { - t.Errorf("child process ReadAll: %q, %v; want %q", got, err, want) - } -} - -// passFDChild is the child process used by TestPassFD. -func passFDChild() { - defer os.Exit(0) - - // Look for our fd. It should be fd 3, but we work around an fd leak - // bug here (http://golang.org/issue/2603) to let it be elsewhere. - var uc *net.UnixConn - for fd := uintptr(3); fd <= 10; fd++ { - f := os.NewFile(fd, "unix-conn") - var ok bool - netc, _ := net.FileConn(f) - uc, ok = netc.(*net.UnixConn) - if ok { - break - } - } - if uc == nil { - fmt.Println("failed to find unix fd") - return - } - - // Make a file f to send to our parent process on uc. - // We make it in tempDir, which our parent will clean up. - flag.Parse() - tempDir := flag.Arg(0) - f, err := ioutil.TempFile(tempDir, "") - if err != nil { - fmt.Printf("TempFile: %v", err) - return - } - - f.Write([]byte("Hello from child process!\n")) - f.Seek(0, 0) - - rights := unix.UnixRights(int(f.Fd())) - dummyByte := []byte("x") - n, oobn, err := uc.WriteMsgUnix(dummyByte, rights, nil) - if err != nil { - fmt.Printf("WriteMsgUnix: %v", err) - return - } - if n != 1 || oobn != len(rights) { - fmt.Printf("WriteMsgUnix = %d, %d; want 1, %d", n, oobn, len(rights)) - return - } -} - -// TestUnixRightsRoundtrip tests that UnixRights, ParseSocketControlMessage, -// and ParseUnixRights are able to successfully round-trip lists of file descriptors. -func TestUnixRightsRoundtrip(t *testing.T) { - testCases := [...][][]int{ - {{42}}, - {{1, 2}}, - {{3, 4, 5}}, - {{}}, - {{1, 2}, {3, 4, 5}, {}, {7}}, - } - for _, testCase := range testCases { - b := []byte{} - var n int - for _, fds := range testCase { - // Last assignment to n wins - n = len(b) + unix.CmsgLen(4*len(fds)) - b = append(b, unix.UnixRights(fds...)...) - } - // Truncate b - b = b[:n] - - scms, err := unix.ParseSocketControlMessage(b) - if err != nil { - t.Fatalf("ParseSocketControlMessage: %v", err) - } - if len(scms) != len(testCase) { - t.Fatalf("expected %v SocketControlMessage; got scms = %#v", len(testCase), scms) - } - for i, scm := range scms { - gotFds, err := unix.ParseUnixRights(&scm) - if err != nil { - t.Fatalf("ParseUnixRights: %v", err) - } - wantFds := testCase[i] - if len(gotFds) != len(wantFds) { - t.Fatalf("expected %v fds, got %#v", len(wantFds), gotFds) - } - for j, fd := range gotFds { - if fd != wantFds[j] { - t.Fatalf("expected fd %v, got %v", wantFds[j], fd) - } - } - } - } -} - -func TestRlimit(t *testing.T) { - var rlimit, zero unix.Rlimit - err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlimit) - if err != nil { - t.Fatalf("Getrlimit: save failed: %v", err) - } - if zero == rlimit { - t.Fatalf("Getrlimit: save failed: got zero value %#v", rlimit) - } - set := rlimit - set.Cur = set.Max - 1 - if runtime.GOOS == "darwin" && set.Cur > 10240 { - // The max file limit is 10240, even though - // the max returned by Getrlimit is 1<<63-1. - // This is OPEN_MAX in sys/syslimits.h. - set.Cur = 10240 - } - err = unix.Setrlimit(unix.RLIMIT_NOFILE, &set) - if err != nil { - t.Fatalf("Setrlimit: set failed: %#v %v", set, err) - } - var get unix.Rlimit - err = unix.Getrlimit(unix.RLIMIT_NOFILE, &get) - if err != nil { - t.Fatalf("Getrlimit: get failed: %v", err) - } - set = rlimit - set.Cur = set.Max - 1 - if set != get { - // Seems like Darwin requires some privilege to - // increase the soft limit of rlimit sandbox, though - // Setrlimit never reports an error. - switch runtime.GOOS { - case "darwin": - default: - t.Fatalf("Rlimit: change failed: wanted %#v got %#v", set, get) - } - } - err = unix.Setrlimit(unix.RLIMIT_NOFILE, &rlimit) - if err != nil { - t.Fatalf("Setrlimit: restore failed: %#v %v", rlimit, err) - } -} - -func TestSeekFailure(t *testing.T) { - _, err := unix.Seek(-1, 0, 0) - if err == nil { - t.Fatalf("Seek(-1, 0, 0) did not fail") - } - str := err.Error() // used to crash on Linux - t.Logf("Seek: %v", str) - if str == "" { - t.Fatalf("Seek(-1, 0, 0) return error with empty message") - } -} - -func TestDup(t *testing.T) { - file, err := ioutil.TempFile("", "TestDup") - if err != nil { - t.Fatalf("Tempfile failed: %v", err) - } - defer os.Remove(file.Name()) - defer file.Close() - f := int(file.Fd()) - - newFd, err := unix.Dup(f) - if err != nil { - t.Fatalf("Dup: %v", err) - } - - // Create and reserve a file descriptor. - // Dup2 automatically closes it before reusing it. - nullFile, err := os.Open("/dev/null") - if err != nil { - t.Fatal(err) - } - dupFd := int(file.Fd()) - err = unix.Dup2(newFd, dupFd) - if err != nil { - t.Fatalf("Dup2: %v", err) - } - // Keep the dummy file open long enough to not be closed in - // its finalizer. - runtime.KeepAlive(nullFile) - - b1 := []byte("Test123") - b2 := make([]byte, 7) - _, err = unix.Write(dupFd, b1) - if err != nil { - t.Fatalf("Write to dup2 fd failed: %v", err) - } - _, err = unix.Seek(f, 0, 0) - if err != nil { - t.Fatalf("Seek failed: %v", err) - } - _, err = unix.Read(f, b2) - if err != nil { - t.Fatalf("Read back failed: %v", err) - } - if string(b1) != string(b2) { - t.Errorf("Dup: stdout write not in file, expected %v, got %v", string(b1), string(b2)) - } -} - -func TestPoll(t *testing.T) { - if runtime.GOOS == "android" || - (runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64")) { - t.Skip("mkfifo syscall is not available on android and iOS, skipping test") - } - - defer chtmpdir(t)() - f, cleanup := mktmpfifo(t) - defer cleanup() - - const timeout = 100 - - ok := make(chan bool, 1) - go func() { - select { - case <-time.After(10 * timeout * time.Millisecond): - t.Errorf("Poll: failed to timeout after %d milliseconds", 10*timeout) - case <-ok: - } - }() - - fds := []unix.PollFd{{Fd: int32(f.Fd()), Events: unix.POLLIN}} - n, err := unix.Poll(fds, timeout) - ok <- true - if err != nil { - t.Errorf("Poll: unexpected error: %v", err) - return - } - if n != 0 { - t.Errorf("Poll: wrong number of events: got %v, expected %v", n, 0) - return - } -} - -func TestGetwd(t *testing.T) { - fd, err := os.Open(".") - if err != nil { - t.Fatalf("Open .: %s", err) - } - defer fd.Close() - // Directory list for test. Do not worry if any are symlinks or do not - // exist on some common unix desktop environments. That will be checked. - dirs := []string{"/", "/usr/bin", "/etc", "/var", "/opt"} - switch runtime.GOOS { - case "android": - dirs = []string{"/", "/system/bin"} - case "darwin": - switch runtime.GOARCH { - case "arm", "arm64": - d1, err := ioutil.TempDir("", "d1") - if err != nil { - t.Fatalf("TempDir: %v", err) - } - d2, err := ioutil.TempDir("", "d2") - if err != nil { - t.Fatalf("TempDir: %v", err) - } - dirs = []string{d1, d2} - } - } - oldwd := os.Getenv("PWD") - for _, d := range dirs { - // Check whether d exists, is a dir and that d's path does not contain a symlink - fi, err := os.Stat(d) - if err != nil || !fi.IsDir() { - t.Logf("Test dir %s stat error (%v) or not a directory, skipping", d, err) - continue - } - check, err := filepath.EvalSymlinks(d) - if err != nil || check != d { - t.Logf("Test dir %s (%s) is symlink or other error (%v), skipping", d, check, err) - continue - } - err = os.Chdir(d) - if err != nil { - t.Fatalf("Chdir: %v", err) - } - pwd, err := unix.Getwd() - if err != nil { - t.Fatalf("Getwd in %s: %s", d, err) - } - os.Setenv("PWD", oldwd) - err = fd.Chdir() - if err != nil { - // We changed the current directory and cannot go back. - // Don't let the tests continue; they'll scribble - // all over some other directory. - fmt.Fprintf(os.Stderr, "fchdir back to dot failed: %s\n", err) - os.Exit(1) - } - if pwd != d { - t.Fatalf("Getwd returned %q want %q", pwd, d) - } - } -} - -func TestFstatat(t *testing.T) { - defer chtmpdir(t)() - - touch(t, "file1") - - var st1 unix.Stat_t - err := unix.Stat("file1", &st1) - if err != nil { - t.Fatalf("Stat: %v", err) - } - - var st2 unix.Stat_t - err = unix.Fstatat(unix.AT_FDCWD, "file1", &st2, 0) - if err != nil { - t.Fatalf("Fstatat: %v", err) - } - - if st1 != st2 { - t.Errorf("Fstatat: returned stat does not match Stat") - } - - err = os.Symlink("file1", "symlink1") - if err != nil { - t.Fatal(err) - } - - err = unix.Lstat("symlink1", &st1) - if err != nil { - t.Fatalf("Lstat: %v", err) - } - - err = unix.Fstatat(unix.AT_FDCWD, "symlink1", &st2, unix.AT_SYMLINK_NOFOLLOW) - if err != nil { - t.Fatalf("Fstatat: %v", err) - } - - if st1 != st2 { - t.Errorf("Fstatat: returned stat does not match Lstat") - } -} - -func TestFchmodat(t *testing.T) { - defer chtmpdir(t)() - - touch(t, "file1") - err := os.Symlink("file1", "symlink1") - if err != nil { - t.Fatal(err) - } - - mode := os.FileMode(0444) - err = unix.Fchmodat(unix.AT_FDCWD, "symlink1", uint32(mode), 0) - if err != nil { - t.Fatalf("Fchmodat: unexpected error: %v", err) - } - - fi, err := os.Stat("file1") - if err != nil { - t.Fatal(err) - } - - if fi.Mode() != mode { - t.Errorf("Fchmodat: failed to change file mode: expected %v, got %v", mode, fi.Mode()) - } - - mode = os.FileMode(0644) - didChmodSymlink := true - err = unix.Fchmodat(unix.AT_FDCWD, "symlink1", uint32(mode), unix.AT_SYMLINK_NOFOLLOW) - if err != nil { - if (runtime.GOOS == "android" || runtime.GOOS == "linux" || runtime.GOOS == "solaris") && err == unix.EOPNOTSUPP { - // Linux and Illumos don't support flags != 0 - didChmodSymlink = false - } else { - t.Fatalf("Fchmodat: unexpected error: %v", err) - } - } - - if !didChmodSymlink { - // Didn't change mode of the symlink. On Linux, the permissions - // of a symbolic link are always 0777 according to symlink(7) - mode = os.FileMode(0777) - } - - var st unix.Stat_t - err = unix.Lstat("symlink1", &st) - if err != nil { - t.Fatal(err) - } - - got := os.FileMode(st.Mode & 0777) - if got != mode { - t.Errorf("Fchmodat: failed to change symlink mode: expected %v, got %v", mode, got) - } -} - -func TestMkdev(t *testing.T) { - major := uint32(42) - minor := uint32(7) - dev := unix.Mkdev(major, minor) - - if unix.Major(dev) != major { - t.Errorf("Major(%#x) == %d, want %d", dev, unix.Major(dev), major) - } - if unix.Minor(dev) != minor { - t.Errorf("Minor(%#x) == %d, want %d", dev, unix.Minor(dev), minor) - } -} - -func TestRenameat(t *testing.T) { - defer chtmpdir(t)() - - from, to := "renamefrom", "renameto" - - touch(t, from) - - err := unix.Renameat(unix.AT_FDCWD, from, unix.AT_FDCWD, to) - if err != nil { - t.Fatalf("Renameat: unexpected error: %v", err) - } - - _, err = os.Stat(to) - if err != nil { - t.Error(err) - } - - _, err = os.Stat(from) - if err == nil { - t.Errorf("Renameat: stat of renamed file %q unexpectedly succeeded", from) - } -} - -// mktmpfifo creates a temporary FIFO and provides a cleanup function. -func mktmpfifo(t *testing.T) (*os.File, func()) { - err := unix.Mkfifo("fifo", 0666) - if err != nil { - t.Fatalf("mktmpfifo: failed to create FIFO: %v", err) - } - - f, err := os.OpenFile("fifo", os.O_RDWR, 0666) - if err != nil { - os.Remove("fifo") - t.Fatalf("mktmpfifo: failed to open FIFO: %v", err) - } - - return f, func() { - f.Close() - os.Remove("fifo") - } -} - -// utilities taken from os/os_test.go - -func touch(t *testing.T, name string) { - f, err := os.Create(name) - if err != nil { - t.Fatal(err) - } - if err := f.Close(); err != nil { - t.Fatal(err) - } -} - -// chtmpdir changes the working directory to a new temporary directory and -// provides a cleanup function. Used when PWD is read-only. -func chtmpdir(t *testing.T) func() { - oldwd, err := os.Getwd() - if err != nil { - t.Fatalf("chtmpdir: %v", err) - } - d, err := ioutil.TempDir("", "test") - if err != nil { - t.Fatalf("chtmpdir: %v", err) - } - if err := os.Chdir(d); err != nil { - t.Fatalf("chtmpdir: %v", err) - } - return func() { - if err := os.Chdir(oldwd); err != nil { - t.Fatalf("chtmpdir: %v", err) - } - os.RemoveAll(d) - } -} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/timestruct_test.go b/src/cmd/vendor/golang.org/x/sys/unix/timestruct_test.go deleted file mode 100644 index 1a72fdb362..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/timestruct_test.go +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2017 The Go Authors. All right reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris - -package unix_test - -import ( - "testing" - "time" - "unsafe" - - "golang.org/x/sys/unix" -) - -func TestTimeToTimespec(t *testing.T) { - timeTests := []struct { - time time.Time - valid bool - }{ - {time.Unix(0, 0), true}, - {time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC), true}, - {time.Date(2262, time.December, 31, 23, 0, 0, 0, time.UTC), false}, - {time.Unix(0x7FFFFFFF, 0), true}, - {time.Unix(0x80000000, 0), false}, - {time.Unix(0x7FFFFFFF, 1000000000), false}, - {time.Unix(0x7FFFFFFF, 999999999), true}, - {time.Unix(-0x80000000, 0), true}, - {time.Unix(-0x80000001, 0), false}, - {time.Date(2038, time.January, 19, 3, 14, 7, 0, time.UTC), true}, - {time.Date(2038, time.January, 19, 3, 14, 8, 0, time.UTC), false}, - {time.Date(1901, time.December, 13, 20, 45, 52, 0, time.UTC), true}, - {time.Date(1901, time.December, 13, 20, 45, 51, 0, time.UTC), false}, - } - - // Currently all targets have either int32 or int64 for Timespec.Sec. - // If there were a new target with unsigned or floating point type for - // it, this test must be adjusted. - have64BitTime := (unsafe.Sizeof(unix.Timespec{}.Sec) == 8) - for _, tt := range timeTests { - ts, err := unix.TimeToTimespec(tt.time) - tt.valid = tt.valid || have64BitTime - if tt.valid && err != nil { - t.Errorf("TimeToTimespec(%v): %v", tt.time, err) - } - if err == nil { - tstime := time.Unix(int64(ts.Sec), int64(ts.Nsec)) - if !tstime.Equal(tt.time) { - t.Errorf("TimeToTimespec(%v) is the time %v", tt.time, tstime) - } - } - } -} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/openbsd_unveil.go b/src/cmd/vendor/golang.org/x/sys/unix/unveil_openbsd.go similarity index 98% rename from src/cmd/vendor/golang.org/x/sys/unix/openbsd_unveil.go rename to src/cmd/vendor/golang.org/x/sys/unix/unveil_openbsd.go index aebc2dc576..168d5ae779 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/openbsd_unveil.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/unveil_openbsd.go @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build openbsd - package unix import ( diff --git a/src/cmd/vendor/golang.org/x/sys/unix/xattr_test.go b/src/cmd/vendor/golang.org/x/sys/unix/xattr_test.go deleted file mode 100644 index 57fc84fb0f..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/xattr_test.go +++ /dev/null @@ -1,207 +0,0 @@ -// 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. - -// +build darwin freebsd linux netbsd - -package unix_test - -import ( - "io/ioutil" - "os" - "runtime" - "strings" - "testing" - - "golang.org/x/sys/unix" -) - -func TestXattr(t *testing.T) { - defer chtmpdir(t)() - - f := "xattr1" - touch(t, f) - - xattrName := "user.test" - xattrDataSet := "gopher" - - err := unix.Setxattr(f, xattrName, []byte{}, 0) - if err == unix.ENOTSUP || err == unix.EOPNOTSUPP { - t.Skip("filesystem does not support extended attributes, skipping test") - } else if err != nil { - t.Fatalf("Setxattr: %v", err) - } - - err = unix.Setxattr(f, xattrName, []byte(xattrDataSet), 0) - if err != nil { - t.Fatalf("Setxattr: %v", err) - } - - // find size - size, err := unix.Listxattr(f, nil) - if err != nil { - t.Fatalf("Listxattr: %v", err) - } - - if size <= 0 { - t.Fatalf("Listxattr returned an empty list of attributes") - } - - buf := make([]byte, size) - read, err := unix.Listxattr(f, buf) - if err != nil { - t.Fatalf("Listxattr: %v", err) - } - - xattrs := stringsFromByteSlice(buf[:read]) - - xattrWant := xattrName - if runtime.GOOS == "freebsd" { - // On FreeBSD, the namespace is stored separately from the xattr - // name and Listxattr doesn't return the namespace prefix. - xattrWant = strings.TrimPrefix(xattrWant, "user.") - } - found := false - for _, name := range xattrs { - if name == xattrWant { - found = true - } - } - - if !found { - t.Errorf("Listxattr did not return previously set attribute '%s'", xattrName) - } - - // find size - size, err = unix.Getxattr(f, xattrName, nil) - if err != nil { - t.Fatalf("Getxattr: %v", err) - } - - if size <= 0 { - t.Fatalf("Getxattr returned an empty attribute") - } - - xattrDataGet := make([]byte, size) - _, err = unix.Getxattr(f, xattrName, xattrDataGet) - if err != nil { - t.Fatalf("Getxattr: %v", err) - } - - got := string(xattrDataGet) - if got != xattrDataSet { - t.Errorf("Getxattr: expected attribute value %s, got %s", xattrDataSet, got) - } - - err = unix.Removexattr(f, xattrName) - if err != nil { - t.Fatalf("Removexattr: %v", err) - } - - n := "nonexistent" - err = unix.Lsetxattr(n, xattrName, []byte(xattrDataSet), 0) - if err != unix.ENOENT { - t.Errorf("Lsetxattr: expected %v on non-existent file, got %v", unix.ENOENT, err) - } - - _, err = unix.Lgetxattr(n, xattrName, nil) - if err != unix.ENOENT { - t.Errorf("Lgetxattr: %v", err) - } - - s := "symlink1" - err = os.Symlink(n, s) - if err != nil { - t.Fatal(err) - } - - err = unix.Lsetxattr(s, xattrName, []byte(xattrDataSet), 0) - if err != nil { - // Linux and Android doen't support xattrs on symlinks according - // to xattr(7), so just test that we get the proper error. - if (runtime.GOOS != "linux" && runtime.GOOS != "android") || err != unix.EPERM { - t.Fatalf("Lsetxattr: %v", err) - } - } -} - -func TestFdXattr(t *testing.T) { - file, err := ioutil.TempFile("", "TestFdXattr") - if err != nil { - t.Fatal(err) - } - defer os.Remove(file.Name()) - defer file.Close() - - fd := int(file.Fd()) - xattrName := "user.test" - xattrDataSet := "gopher" - - err = unix.Fsetxattr(fd, xattrName, []byte(xattrDataSet), 0) - if err == unix.ENOTSUP || err == unix.EOPNOTSUPP { - t.Skip("filesystem does not support extended attributes, skipping test") - } else if err != nil { - t.Fatalf("Fsetxattr: %v", err) - } - - // find size - size, err := unix.Flistxattr(fd, nil) - if err != nil { - t.Fatalf("Flistxattr: %v", err) - } - - if size <= 0 { - t.Fatalf("Flistxattr returned an empty list of attributes") - } - - buf := make([]byte, size) - read, err := unix.Flistxattr(fd, buf) - if err != nil { - t.Fatalf("Flistxattr: %v", err) - } - - xattrs := stringsFromByteSlice(buf[:read]) - - xattrWant := xattrName - if runtime.GOOS == "freebsd" { - // On FreeBSD, the namespace is stored separately from the xattr - // name and Listxattr doesn't return the namespace prefix. - xattrWant = strings.TrimPrefix(xattrWant, "user.") - } - found := false - for _, name := range xattrs { - if name == xattrWant { - found = true - } - } - - if !found { - t.Errorf("Flistxattr did not return previously set attribute '%s'", xattrName) - } - - // find size - size, err = unix.Fgetxattr(fd, xattrName, nil) - if err != nil { - t.Fatalf("Fgetxattr: %v", err) - } - - if size <= 0 { - t.Fatalf("Fgetxattr returned an empty attribute") - } - - xattrDataGet := make([]byte, size) - _, err = unix.Fgetxattr(fd, xattrName, xattrDataGet) - if err != nil { - t.Fatalf("Fgetxattr: %v", err) - } - - got := string(xattrDataGet) - if got != xattrDataSet { - t.Errorf("Fgetxattr: expected attribute value %s, got %s", xattrDataSet, got) - } - - err = unix.Fremovexattr(fd, xattrName) - if err != nil { - t.Fatalf("Fremovexattr: %v", err) - } -} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go index 4b7b965027..1def8a5812 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go @@ -926,6 +926,8 @@ const ( TCSETSF = 0x5404 TCSETSW = 0x5403 TCXONC = 0x540b + TIMER_ABSTIME = 0x3e7 + TIMER_MAX = 0x20 TIOC = 0x5400 TIOCCBRK = 0x2000747a TIOCCDTR = 0x20007478 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go index ed04fd1b77..03187dea98 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go @@ -3,7 +3,7 @@ // +build ppc64,aix -// Created by cgo -godefs - DO NOT EDIT +// Code generated by cmd/cgo -godefs; DO NOT EDIT. // cgo -godefs -- -maix64 _const.go package unix @@ -926,6 +926,8 @@ const ( TCSETSF = 0x5404 TCSETSW = 0x5403 TCXONC = 0x540b + TIMER_ABSTIME = 0x3e7 + TIMER_MAX = 0x20 TIOC = 0x5400 TIOCCBRK = 0x2000747a TIOCCDTR = 0x20007478 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_386.go index cb89df8f54..d180147f79 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -174,6 +174,7 @@ const ( B9600 = 0xd BALLOON_KVM_MAGIC = 0x13661366 BDEVFS_MAGIC = 0x62646576 + BINDERFS_SUPER_MAGIC = 0x6c6f6f70 BINFMTFS_MAGIC = 0x42494e4d BLKBSZGET = 0x80041270 BLKBSZSET = 0x40041271 @@ -319,6 +320,10 @@ const ( CRDLY = 0x600 CREAD = 0x80 CRTSCTS = 0x80000000 + CRYPTO_MAX_NAME = 0x40 + CRYPTO_MSG_MAX = 0x15 + CRYPTO_NR_MSGTYPES = 0x6 + CRYPTO_REPORT_MAXSIZE = 0x160 CS5 = 0x0 CS6 = 0x10 CS7 = 0x20 @@ -486,6 +491,50 @@ const ( FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 + FANOTIFY_METADATA_VERSION = 0x3 + FAN_ACCESS = 0x1 + FAN_ACCESS_PERM = 0x20000 + FAN_ALLOW = 0x1 + FAN_ALL_CLASS_BITS = 0xc + FAN_ALL_EVENTS = 0x3b + FAN_ALL_INIT_FLAGS = 0x3f + FAN_ALL_MARK_FLAGS = 0xff + FAN_ALL_OUTGOING_EVENTS = 0x3403b + FAN_ALL_PERM_EVENTS = 0x30000 + FAN_AUDIT = 0x10 + FAN_CLASS_CONTENT = 0x4 + FAN_CLASS_NOTIF = 0x0 + FAN_CLASS_PRE_CONTENT = 0x8 + FAN_CLOEXEC = 0x1 + FAN_CLOSE = 0x18 + FAN_CLOSE_NOWRITE = 0x10 + FAN_CLOSE_WRITE = 0x8 + FAN_DENY = 0x2 + FAN_ENABLE_AUDIT = 0x40 + FAN_EVENT_METADATA_LEN = 0x18 + FAN_EVENT_ON_CHILD = 0x8000000 + FAN_MARK_ADD = 0x1 + FAN_MARK_DONT_FOLLOW = 0x4 + FAN_MARK_FILESYSTEM = 0x100 + FAN_MARK_FLUSH = 0x80 + FAN_MARK_IGNORED_MASK = 0x20 + FAN_MARK_IGNORED_SURV_MODIFY = 0x40 + FAN_MARK_INODE = 0x0 + FAN_MARK_MOUNT = 0x10 + FAN_MARK_ONLYDIR = 0x8 + FAN_MARK_REMOVE = 0x2 + FAN_MODIFY = 0x2 + FAN_NOFD = -0x1 + FAN_NONBLOCK = 0x2 + FAN_ONDIR = 0x40000000 + FAN_OPEN = 0x20 + FAN_OPEN_EXEC = 0x1000 + FAN_OPEN_EXEC_PERM = 0x40000 + FAN_OPEN_PERM = 0x10000 + FAN_Q_OVERFLOW = 0x4000 + FAN_REPORT_TID = 0x100 + FAN_UNLIMITED_MARKS = 0x20 + FAN_UNLIMITED_QUEUE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 @@ -493,6 +542,7 @@ const ( FFDLY = 0x8000 FLUSHO = 0x1000 FP_XSTATE_MAGIC2 = 0x46505845 + FS_ENCRYPTION_MODE_ADIANTUM = 0x9 FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 @@ -514,7 +564,7 @@ const ( FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 - FS_POLICY_FLAGS_VALID = 0x3 + FS_POLICY_FLAGS_VALID = 0x7 FUTEXFS_SUPER_MAGIC = 0xbad1dea F_ADD_SEALS = 0x409 F_DUPFD = 0x0 @@ -1134,7 +1184,7 @@ const ( NETLINK_UNUSED = 0x1 NETLINK_USERSOCK = 0x2 NETLINK_XFRM = 0x6 - NETNSA_MAX = 0x3 + NETNSA_MAX = 0x5 NETNSA_NSID_NOT_ASSIGNED = -0x1 NFNETLINK_V0 = 0x0 NFNLGRP_ACCT_QUOTA = 0x8 @@ -1398,6 +1448,12 @@ const ( PR_MCE_KILL_SET = 0x1 PR_MPX_DISABLE_MANAGEMENT = 0x2c PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_PAC_APDAKEY = 0x4 + PR_PAC_APDBKEY = 0x8 + PR_PAC_APGAKEY = 0x10 + PR_PAC_APIAKEY = 0x1 + PR_PAC_APIBKEY = 0x2 + PR_PAC_RESET_KEYS = 0x36 PR_SET_CHILD_SUBREAPER = 0x24 PR_SET_DUMPABLE = 0x4 PR_SET_ENDIAN = 0x14 @@ -2232,6 +2288,7 @@ const ( TUNGETVNETBE = 0x800454df TUNGETVNETHDRSZ = 0x800454d7 TUNGETVNETLE = 0x800454dd + TUNSETCARRIER = 0x400454e2 TUNSETDEBUG = 0x400454c9 TUNSETFILTEREBPF = 0x800454e1 TUNSETGROUP = 0x400454ce diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go index 73c9b88ca7..1d277a412d 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -174,6 +174,7 @@ const ( B9600 = 0xd BALLOON_KVM_MAGIC = 0x13661366 BDEVFS_MAGIC = 0x62646576 + BINDERFS_SUPER_MAGIC = 0x6c6f6f70 BINFMTFS_MAGIC = 0x42494e4d BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 @@ -319,6 +320,10 @@ const ( CRDLY = 0x600 CREAD = 0x80 CRTSCTS = 0x80000000 + CRYPTO_MAX_NAME = 0x40 + CRYPTO_MSG_MAX = 0x15 + CRYPTO_NR_MSGTYPES = 0x6 + CRYPTO_REPORT_MAXSIZE = 0x160 CS5 = 0x0 CS6 = 0x10 CS7 = 0x20 @@ -486,6 +491,50 @@ const ( FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 + FANOTIFY_METADATA_VERSION = 0x3 + FAN_ACCESS = 0x1 + FAN_ACCESS_PERM = 0x20000 + FAN_ALLOW = 0x1 + FAN_ALL_CLASS_BITS = 0xc + FAN_ALL_EVENTS = 0x3b + FAN_ALL_INIT_FLAGS = 0x3f + FAN_ALL_MARK_FLAGS = 0xff + FAN_ALL_OUTGOING_EVENTS = 0x3403b + FAN_ALL_PERM_EVENTS = 0x30000 + FAN_AUDIT = 0x10 + FAN_CLASS_CONTENT = 0x4 + FAN_CLASS_NOTIF = 0x0 + FAN_CLASS_PRE_CONTENT = 0x8 + FAN_CLOEXEC = 0x1 + FAN_CLOSE = 0x18 + FAN_CLOSE_NOWRITE = 0x10 + FAN_CLOSE_WRITE = 0x8 + FAN_DENY = 0x2 + FAN_ENABLE_AUDIT = 0x40 + FAN_EVENT_METADATA_LEN = 0x18 + FAN_EVENT_ON_CHILD = 0x8000000 + FAN_MARK_ADD = 0x1 + FAN_MARK_DONT_FOLLOW = 0x4 + FAN_MARK_FILESYSTEM = 0x100 + FAN_MARK_FLUSH = 0x80 + FAN_MARK_IGNORED_MASK = 0x20 + FAN_MARK_IGNORED_SURV_MODIFY = 0x40 + FAN_MARK_INODE = 0x0 + FAN_MARK_MOUNT = 0x10 + FAN_MARK_ONLYDIR = 0x8 + FAN_MARK_REMOVE = 0x2 + FAN_MODIFY = 0x2 + FAN_NOFD = -0x1 + FAN_NONBLOCK = 0x2 + FAN_ONDIR = 0x40000000 + FAN_OPEN = 0x20 + FAN_OPEN_EXEC = 0x1000 + FAN_OPEN_EXEC_PERM = 0x40000 + FAN_OPEN_PERM = 0x10000 + FAN_Q_OVERFLOW = 0x4000 + FAN_REPORT_TID = 0x100 + FAN_UNLIMITED_MARKS = 0x20 + FAN_UNLIMITED_QUEUE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 @@ -493,6 +542,7 @@ const ( FFDLY = 0x8000 FLUSHO = 0x1000 FP_XSTATE_MAGIC2 = 0x46505845 + FS_ENCRYPTION_MODE_ADIANTUM = 0x9 FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 @@ -514,7 +564,7 @@ const ( FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 - FS_POLICY_FLAGS_VALID = 0x3 + FS_POLICY_FLAGS_VALID = 0x7 FUTEXFS_SUPER_MAGIC = 0xbad1dea F_ADD_SEALS = 0x409 F_DUPFD = 0x0 @@ -1134,7 +1184,7 @@ const ( NETLINK_UNUSED = 0x1 NETLINK_USERSOCK = 0x2 NETLINK_XFRM = 0x6 - NETNSA_MAX = 0x3 + NETNSA_MAX = 0x5 NETNSA_NSID_NOT_ASSIGNED = -0x1 NFNETLINK_V0 = 0x0 NFNLGRP_ACCT_QUOTA = 0x8 @@ -1398,6 +1448,12 @@ const ( PR_MCE_KILL_SET = 0x1 PR_MPX_DISABLE_MANAGEMENT = 0x2c PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_PAC_APDAKEY = 0x4 + PR_PAC_APDBKEY = 0x8 + PR_PAC_APGAKEY = 0x10 + PR_PAC_APIAKEY = 0x1 + PR_PAC_APIBKEY = 0x2 + PR_PAC_RESET_KEYS = 0x36 PR_SET_CHILD_SUBREAPER = 0x24 PR_SET_DUMPABLE = 0x4 PR_SET_ENDIAN = 0x14 @@ -2233,6 +2289,7 @@ const ( TUNGETVNETBE = 0x800454df TUNGETVNETHDRSZ = 0x800454d7 TUNGETVNETLE = 0x800454dd + TUNSETCARRIER = 0x400454e2 TUNSETDEBUG = 0x400454c9 TUNSETFILTEREBPF = 0x800454e1 TUNSETGROUP = 0x400454ce diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go index f1ef82f57e..63ac45af81 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -174,6 +174,7 @@ const ( B9600 = 0xd BALLOON_KVM_MAGIC = 0x13661366 BDEVFS_MAGIC = 0x62646576 + BINDERFS_SUPER_MAGIC = 0x6c6f6f70 BINFMTFS_MAGIC = 0x42494e4d BLKBSZGET = 0x80041270 BLKBSZSET = 0x40041271 @@ -319,6 +320,10 @@ const ( CRDLY = 0x600 CREAD = 0x80 CRTSCTS = 0x80000000 + CRYPTO_MAX_NAME = 0x40 + CRYPTO_MSG_MAX = 0x15 + CRYPTO_NR_MSGTYPES = 0x6 + CRYPTO_REPORT_MAXSIZE = 0x160 CS5 = 0x0 CS6 = 0x10 CS7 = 0x20 @@ -486,12 +491,57 @@ const ( FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 + FANOTIFY_METADATA_VERSION = 0x3 + FAN_ACCESS = 0x1 + FAN_ACCESS_PERM = 0x20000 + FAN_ALLOW = 0x1 + FAN_ALL_CLASS_BITS = 0xc + FAN_ALL_EVENTS = 0x3b + FAN_ALL_INIT_FLAGS = 0x3f + FAN_ALL_MARK_FLAGS = 0xff + FAN_ALL_OUTGOING_EVENTS = 0x3403b + FAN_ALL_PERM_EVENTS = 0x30000 + FAN_AUDIT = 0x10 + FAN_CLASS_CONTENT = 0x4 + FAN_CLASS_NOTIF = 0x0 + FAN_CLASS_PRE_CONTENT = 0x8 + FAN_CLOEXEC = 0x1 + FAN_CLOSE = 0x18 + FAN_CLOSE_NOWRITE = 0x10 + FAN_CLOSE_WRITE = 0x8 + FAN_DENY = 0x2 + FAN_ENABLE_AUDIT = 0x40 + FAN_EVENT_METADATA_LEN = 0x18 + FAN_EVENT_ON_CHILD = 0x8000000 + FAN_MARK_ADD = 0x1 + FAN_MARK_DONT_FOLLOW = 0x4 + FAN_MARK_FILESYSTEM = 0x100 + FAN_MARK_FLUSH = 0x80 + FAN_MARK_IGNORED_MASK = 0x20 + FAN_MARK_IGNORED_SURV_MODIFY = 0x40 + FAN_MARK_INODE = 0x0 + FAN_MARK_MOUNT = 0x10 + FAN_MARK_ONLYDIR = 0x8 + FAN_MARK_REMOVE = 0x2 + FAN_MODIFY = 0x2 + FAN_NOFD = -0x1 + FAN_NONBLOCK = 0x2 + FAN_ONDIR = 0x40000000 + FAN_OPEN = 0x20 + FAN_OPEN_EXEC = 0x1000 + FAN_OPEN_EXEC_PERM = 0x40000 + FAN_OPEN_PERM = 0x10000 + FAN_Q_OVERFLOW = 0x4000 + FAN_REPORT_TID = 0x100 + FAN_UNLIMITED_MARKS = 0x20 + FAN_UNLIMITED_QUEUE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_ADIANTUM = 0x9 FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 @@ -513,7 +563,7 @@ const ( FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 - FS_POLICY_FLAGS_VALID = 0x3 + FS_POLICY_FLAGS_VALID = 0x7 FUTEXFS_SUPER_MAGIC = 0xbad1dea F_ADD_SEALS = 0x409 F_DUPFD = 0x0 @@ -1132,7 +1182,7 @@ const ( NETLINK_UNUSED = 0x1 NETLINK_USERSOCK = 0x2 NETLINK_XFRM = 0x6 - NETNSA_MAX = 0x3 + NETNSA_MAX = 0x5 NETNSA_NSID_NOT_ASSIGNED = -0x1 NFNETLINK_V0 = 0x0 NFNLGRP_ACCT_QUOTA = 0x8 @@ -1396,6 +1446,12 @@ const ( PR_MCE_KILL_SET = 0x1 PR_MPX_DISABLE_MANAGEMENT = 0x2c PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_PAC_APDAKEY = 0x4 + PR_PAC_APDBKEY = 0x8 + PR_PAC_APGAKEY = 0x10 + PR_PAC_APIAKEY = 0x1 + PR_PAC_APIBKEY = 0x2 + PR_PAC_RESET_KEYS = 0x36 PR_SET_CHILD_SUBREAPER = 0x24 PR_SET_DUMPABLE = 0x4 PR_SET_ENDIAN = 0x14 @@ -2239,6 +2295,7 @@ const ( TUNGETVNETBE = 0x800454df TUNGETVNETHDRSZ = 0x800454d7 TUNGETVNETLE = 0x800454dd + TUNSETCARRIER = 0x400454e2 TUNSETDEBUG = 0x400454c9 TUNSETFILTEREBPF = 0x800454e1 TUNSETGROUP = 0x400454ce diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go index cf17c99069..81d3259edb 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -174,6 +174,7 @@ const ( B9600 = 0xd BALLOON_KVM_MAGIC = 0x13661366 BDEVFS_MAGIC = 0x62646576 + BINDERFS_SUPER_MAGIC = 0x6c6f6f70 BINFMTFS_MAGIC = 0x42494e4d BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 @@ -319,6 +320,10 @@ const ( CRDLY = 0x600 CREAD = 0x80 CRTSCTS = 0x80000000 + CRYPTO_MAX_NAME = 0x40 + CRYPTO_MSG_MAX = 0x15 + CRYPTO_NR_MSGTYPES = 0x6 + CRYPTO_REPORT_MAXSIZE = 0x160 CS5 = 0x0 CS6 = 0x10 CS7 = 0x20 @@ -488,6 +493,50 @@ const ( FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 + FANOTIFY_METADATA_VERSION = 0x3 + FAN_ACCESS = 0x1 + FAN_ACCESS_PERM = 0x20000 + FAN_ALLOW = 0x1 + FAN_ALL_CLASS_BITS = 0xc + FAN_ALL_EVENTS = 0x3b + FAN_ALL_INIT_FLAGS = 0x3f + FAN_ALL_MARK_FLAGS = 0xff + FAN_ALL_OUTGOING_EVENTS = 0x3403b + FAN_ALL_PERM_EVENTS = 0x30000 + FAN_AUDIT = 0x10 + FAN_CLASS_CONTENT = 0x4 + FAN_CLASS_NOTIF = 0x0 + FAN_CLASS_PRE_CONTENT = 0x8 + FAN_CLOEXEC = 0x1 + FAN_CLOSE = 0x18 + FAN_CLOSE_NOWRITE = 0x10 + FAN_CLOSE_WRITE = 0x8 + FAN_DENY = 0x2 + FAN_ENABLE_AUDIT = 0x40 + FAN_EVENT_METADATA_LEN = 0x18 + FAN_EVENT_ON_CHILD = 0x8000000 + FAN_MARK_ADD = 0x1 + FAN_MARK_DONT_FOLLOW = 0x4 + FAN_MARK_FILESYSTEM = 0x100 + FAN_MARK_FLUSH = 0x80 + FAN_MARK_IGNORED_MASK = 0x20 + FAN_MARK_IGNORED_SURV_MODIFY = 0x40 + FAN_MARK_INODE = 0x0 + FAN_MARK_MOUNT = 0x10 + FAN_MARK_ONLYDIR = 0x8 + FAN_MARK_REMOVE = 0x2 + FAN_MODIFY = 0x2 + FAN_NOFD = -0x1 + FAN_NONBLOCK = 0x2 + FAN_ONDIR = 0x40000000 + FAN_OPEN = 0x20 + FAN_OPEN_EXEC = 0x1000 + FAN_OPEN_EXEC_PERM = 0x40000 + FAN_OPEN_PERM = 0x10000 + FAN_Q_OVERFLOW = 0x4000 + FAN_REPORT_TID = 0x100 + FAN_UNLIMITED_MARKS = 0x20 + FAN_UNLIMITED_QUEUE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 @@ -495,6 +544,7 @@ const ( FFDLY = 0x8000 FLUSHO = 0x1000 FPSIMD_MAGIC = 0x46508001 + FS_ENCRYPTION_MODE_ADIANTUM = 0x9 FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 @@ -516,7 +566,7 @@ const ( FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 - FS_POLICY_FLAGS_VALID = 0x3 + FS_POLICY_FLAGS_VALID = 0x7 FUTEXFS_SUPER_MAGIC = 0xbad1dea F_ADD_SEALS = 0x409 F_DUPFD = 0x0 @@ -1135,7 +1185,7 @@ const ( NETLINK_UNUSED = 0x1 NETLINK_USERSOCK = 0x2 NETLINK_XFRM = 0x6 - NETNSA_MAX = 0x3 + NETNSA_MAX = 0x5 NETNSA_NSID_NOT_ASSIGNED = -0x1 NFNETLINK_V0 = 0x0 NFNLGRP_ACCT_QUOTA = 0x8 @@ -1399,6 +1449,12 @@ const ( PR_MCE_KILL_SET = 0x1 PR_MPX_DISABLE_MANAGEMENT = 0x2c PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_PAC_APDAKEY = 0x4 + PR_PAC_APDBKEY = 0x8 + PR_PAC_APGAKEY = 0x10 + PR_PAC_APIAKEY = 0x1 + PR_PAC_APIBKEY = 0x2 + PR_PAC_RESET_KEYS = 0x36 PR_SET_CHILD_SUBREAPER = 0x24 PR_SET_DUMPABLE = 0x4 PR_SET_ENDIAN = 0x14 @@ -2224,6 +2280,7 @@ const ( TUNGETVNETBE = 0x800454df TUNGETVNETHDRSZ = 0x800454d7 TUNGETVNETLE = 0x800454dd + TUNSETCARRIER = 0x400454e2 TUNSETDEBUG = 0x400454c9 TUNSETFILTEREBPF = 0x800454e1 TUNSETGROUP = 0x400454ce diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go index 380913c4fc..58fc1eb9c8 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -174,6 +174,7 @@ const ( B9600 = 0xd BALLOON_KVM_MAGIC = 0x13661366 BDEVFS_MAGIC = 0x62646576 + BINDERFS_SUPER_MAGIC = 0x6c6f6f70 BINFMTFS_MAGIC = 0x42494e4d BLKBSZGET = 0x40041270 BLKBSZSET = 0x80041271 @@ -319,6 +320,10 @@ const ( CRDLY = 0x600 CREAD = 0x80 CRTSCTS = 0x80000000 + CRYPTO_MAX_NAME = 0x40 + CRYPTO_MSG_MAX = 0x15 + CRYPTO_NR_MSGTYPES = 0x6 + CRYPTO_REPORT_MAXSIZE = 0x160 CS5 = 0x0 CS6 = 0x10 CS7 = 0x20 @@ -486,12 +491,57 @@ const ( FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 + FANOTIFY_METADATA_VERSION = 0x3 + FAN_ACCESS = 0x1 + FAN_ACCESS_PERM = 0x20000 + FAN_ALLOW = 0x1 + FAN_ALL_CLASS_BITS = 0xc + FAN_ALL_EVENTS = 0x3b + FAN_ALL_INIT_FLAGS = 0x3f + FAN_ALL_MARK_FLAGS = 0xff + FAN_ALL_OUTGOING_EVENTS = 0x3403b + FAN_ALL_PERM_EVENTS = 0x30000 + FAN_AUDIT = 0x10 + FAN_CLASS_CONTENT = 0x4 + FAN_CLASS_NOTIF = 0x0 + FAN_CLASS_PRE_CONTENT = 0x8 + FAN_CLOEXEC = 0x1 + FAN_CLOSE = 0x18 + FAN_CLOSE_NOWRITE = 0x10 + FAN_CLOSE_WRITE = 0x8 + FAN_DENY = 0x2 + FAN_ENABLE_AUDIT = 0x40 + FAN_EVENT_METADATA_LEN = 0x18 + FAN_EVENT_ON_CHILD = 0x8000000 + FAN_MARK_ADD = 0x1 + FAN_MARK_DONT_FOLLOW = 0x4 + FAN_MARK_FILESYSTEM = 0x100 + FAN_MARK_FLUSH = 0x80 + FAN_MARK_IGNORED_MASK = 0x20 + FAN_MARK_IGNORED_SURV_MODIFY = 0x40 + FAN_MARK_INODE = 0x0 + FAN_MARK_MOUNT = 0x10 + FAN_MARK_ONLYDIR = 0x8 + FAN_MARK_REMOVE = 0x2 + FAN_MODIFY = 0x2 + FAN_NOFD = -0x1 + FAN_NONBLOCK = 0x2 + FAN_ONDIR = 0x40000000 + FAN_OPEN = 0x20 + FAN_OPEN_EXEC = 0x1000 + FAN_OPEN_EXEC_PERM = 0x40000 + FAN_OPEN_PERM = 0x10000 + FAN_Q_OVERFLOW = 0x4000 + FAN_REPORT_TID = 0x100 + FAN_UNLIMITED_MARKS = 0x20 + FAN_UNLIMITED_QUEUE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x2000 + FS_ENCRYPTION_MODE_ADIANTUM = 0x9 FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 @@ -513,7 +563,7 @@ const ( FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 - FS_POLICY_FLAGS_VALID = 0x3 + FS_POLICY_FLAGS_VALID = 0x7 FUTEXFS_SUPER_MAGIC = 0xbad1dea F_ADD_SEALS = 0x409 F_DUPFD = 0x0 @@ -1132,7 +1182,7 @@ const ( NETLINK_UNUSED = 0x1 NETLINK_USERSOCK = 0x2 NETLINK_XFRM = 0x6 - NETNSA_MAX = 0x3 + NETNSA_MAX = 0x5 NETNSA_NSID_NOT_ASSIGNED = -0x1 NFNETLINK_V0 = 0x0 NFNLGRP_ACCT_QUOTA = 0x8 @@ -1396,6 +1446,12 @@ const ( PR_MCE_KILL_SET = 0x1 PR_MPX_DISABLE_MANAGEMENT = 0x2c PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_PAC_APDAKEY = 0x4 + PR_PAC_APDBKEY = 0x8 + PR_PAC_APGAKEY = 0x10 + PR_PAC_APIAKEY = 0x1 + PR_PAC_APIBKEY = 0x2 + PR_PAC_RESET_KEYS = 0x36 PR_SET_CHILD_SUBREAPER = 0x24 PR_SET_DUMPABLE = 0x4 PR_SET_ENDIAN = 0x14 @@ -2234,6 +2290,7 @@ const ( TUNGETVNETBE = 0x400454df TUNGETVNETHDRSZ = 0x400454d7 TUNGETVNETLE = 0x400454dd + TUNSETCARRIER = 0x800454e2 TUNSETDEBUG = 0x800454c9 TUNSETFILTEREBPF = 0x400454e1 TUNSETGROUP = 0x800454ce diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go index fb82529ac9..67336da6cd 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -174,6 +174,7 @@ const ( B9600 = 0xd BALLOON_KVM_MAGIC = 0x13661366 BDEVFS_MAGIC = 0x62646576 + BINDERFS_SUPER_MAGIC = 0x6c6f6f70 BINFMTFS_MAGIC = 0x42494e4d BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 @@ -319,6 +320,10 @@ const ( CRDLY = 0x600 CREAD = 0x80 CRTSCTS = 0x80000000 + CRYPTO_MAX_NAME = 0x40 + CRYPTO_MSG_MAX = 0x15 + CRYPTO_NR_MSGTYPES = 0x6 + CRYPTO_REPORT_MAXSIZE = 0x160 CS5 = 0x0 CS6 = 0x10 CS7 = 0x20 @@ -486,12 +491,57 @@ const ( FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 + FANOTIFY_METADATA_VERSION = 0x3 + FAN_ACCESS = 0x1 + FAN_ACCESS_PERM = 0x20000 + FAN_ALLOW = 0x1 + FAN_ALL_CLASS_BITS = 0xc + FAN_ALL_EVENTS = 0x3b + FAN_ALL_INIT_FLAGS = 0x3f + FAN_ALL_MARK_FLAGS = 0xff + FAN_ALL_OUTGOING_EVENTS = 0x3403b + FAN_ALL_PERM_EVENTS = 0x30000 + FAN_AUDIT = 0x10 + FAN_CLASS_CONTENT = 0x4 + FAN_CLASS_NOTIF = 0x0 + FAN_CLASS_PRE_CONTENT = 0x8 + FAN_CLOEXEC = 0x1 + FAN_CLOSE = 0x18 + FAN_CLOSE_NOWRITE = 0x10 + FAN_CLOSE_WRITE = 0x8 + FAN_DENY = 0x2 + FAN_ENABLE_AUDIT = 0x40 + FAN_EVENT_METADATA_LEN = 0x18 + FAN_EVENT_ON_CHILD = 0x8000000 + FAN_MARK_ADD = 0x1 + FAN_MARK_DONT_FOLLOW = 0x4 + FAN_MARK_FILESYSTEM = 0x100 + FAN_MARK_FLUSH = 0x80 + FAN_MARK_IGNORED_MASK = 0x20 + FAN_MARK_IGNORED_SURV_MODIFY = 0x40 + FAN_MARK_INODE = 0x0 + FAN_MARK_MOUNT = 0x10 + FAN_MARK_ONLYDIR = 0x8 + FAN_MARK_REMOVE = 0x2 + FAN_MODIFY = 0x2 + FAN_NOFD = -0x1 + FAN_NONBLOCK = 0x2 + FAN_ONDIR = 0x40000000 + FAN_OPEN = 0x20 + FAN_OPEN_EXEC = 0x1000 + FAN_OPEN_EXEC_PERM = 0x40000 + FAN_OPEN_PERM = 0x10000 + FAN_Q_OVERFLOW = 0x4000 + FAN_REPORT_TID = 0x100 + FAN_UNLIMITED_MARKS = 0x20 + FAN_UNLIMITED_QUEUE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x2000 + FS_ENCRYPTION_MODE_ADIANTUM = 0x9 FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 @@ -513,7 +563,7 @@ const ( FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 - FS_POLICY_FLAGS_VALID = 0x3 + FS_POLICY_FLAGS_VALID = 0x7 FUTEXFS_SUPER_MAGIC = 0xbad1dea F_ADD_SEALS = 0x409 F_DUPFD = 0x0 @@ -1132,7 +1182,7 @@ const ( NETLINK_UNUSED = 0x1 NETLINK_USERSOCK = 0x2 NETLINK_XFRM = 0x6 - NETNSA_MAX = 0x3 + NETNSA_MAX = 0x5 NETNSA_NSID_NOT_ASSIGNED = -0x1 NFNETLINK_V0 = 0x0 NFNLGRP_ACCT_QUOTA = 0x8 @@ -1396,6 +1446,12 @@ const ( PR_MCE_KILL_SET = 0x1 PR_MPX_DISABLE_MANAGEMENT = 0x2c PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_PAC_APDAKEY = 0x4 + PR_PAC_APDBKEY = 0x8 + PR_PAC_APGAKEY = 0x10 + PR_PAC_APIAKEY = 0x1 + PR_PAC_APIBKEY = 0x2 + PR_PAC_RESET_KEYS = 0x36 PR_SET_CHILD_SUBREAPER = 0x24 PR_SET_DUMPABLE = 0x4 PR_SET_ENDIAN = 0x14 @@ -2234,6 +2290,7 @@ const ( TUNGETVNETBE = 0x400454df TUNGETVNETHDRSZ = 0x400454d7 TUNGETVNETLE = 0x400454dd + TUNSETCARRIER = 0x800454e2 TUNSETDEBUG = 0x800454c9 TUNSETFILTEREBPF = 0x400454e1 TUNSETGROUP = 0x800454ce diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go index 677d904562..af030dcbb0 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -174,6 +174,7 @@ const ( B9600 = 0xd BALLOON_KVM_MAGIC = 0x13661366 BDEVFS_MAGIC = 0x62646576 + BINDERFS_SUPER_MAGIC = 0x6c6f6f70 BINFMTFS_MAGIC = 0x42494e4d BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 @@ -319,6 +320,10 @@ const ( CRDLY = 0x600 CREAD = 0x80 CRTSCTS = 0x80000000 + CRYPTO_MAX_NAME = 0x40 + CRYPTO_MSG_MAX = 0x15 + CRYPTO_NR_MSGTYPES = 0x6 + CRYPTO_REPORT_MAXSIZE = 0x160 CS5 = 0x0 CS6 = 0x10 CS7 = 0x20 @@ -486,12 +491,57 @@ const ( FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 + FANOTIFY_METADATA_VERSION = 0x3 + FAN_ACCESS = 0x1 + FAN_ACCESS_PERM = 0x20000 + FAN_ALLOW = 0x1 + FAN_ALL_CLASS_BITS = 0xc + FAN_ALL_EVENTS = 0x3b + FAN_ALL_INIT_FLAGS = 0x3f + FAN_ALL_MARK_FLAGS = 0xff + FAN_ALL_OUTGOING_EVENTS = 0x3403b + FAN_ALL_PERM_EVENTS = 0x30000 + FAN_AUDIT = 0x10 + FAN_CLASS_CONTENT = 0x4 + FAN_CLASS_NOTIF = 0x0 + FAN_CLASS_PRE_CONTENT = 0x8 + FAN_CLOEXEC = 0x1 + FAN_CLOSE = 0x18 + FAN_CLOSE_NOWRITE = 0x10 + FAN_CLOSE_WRITE = 0x8 + FAN_DENY = 0x2 + FAN_ENABLE_AUDIT = 0x40 + FAN_EVENT_METADATA_LEN = 0x18 + FAN_EVENT_ON_CHILD = 0x8000000 + FAN_MARK_ADD = 0x1 + FAN_MARK_DONT_FOLLOW = 0x4 + FAN_MARK_FILESYSTEM = 0x100 + FAN_MARK_FLUSH = 0x80 + FAN_MARK_IGNORED_MASK = 0x20 + FAN_MARK_IGNORED_SURV_MODIFY = 0x40 + FAN_MARK_INODE = 0x0 + FAN_MARK_MOUNT = 0x10 + FAN_MARK_ONLYDIR = 0x8 + FAN_MARK_REMOVE = 0x2 + FAN_MODIFY = 0x2 + FAN_NOFD = -0x1 + FAN_NONBLOCK = 0x2 + FAN_ONDIR = 0x40000000 + FAN_OPEN = 0x20 + FAN_OPEN_EXEC = 0x1000 + FAN_OPEN_EXEC_PERM = 0x40000 + FAN_OPEN_PERM = 0x10000 + FAN_Q_OVERFLOW = 0x4000 + FAN_REPORT_TID = 0x100 + FAN_UNLIMITED_MARKS = 0x20 + FAN_UNLIMITED_QUEUE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x2000 + FS_ENCRYPTION_MODE_ADIANTUM = 0x9 FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 @@ -513,7 +563,7 @@ const ( FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 - FS_POLICY_FLAGS_VALID = 0x3 + FS_POLICY_FLAGS_VALID = 0x7 FUTEXFS_SUPER_MAGIC = 0xbad1dea F_ADD_SEALS = 0x409 F_DUPFD = 0x0 @@ -1132,7 +1182,7 @@ const ( NETLINK_UNUSED = 0x1 NETLINK_USERSOCK = 0x2 NETLINK_XFRM = 0x6 - NETNSA_MAX = 0x3 + NETNSA_MAX = 0x5 NETNSA_NSID_NOT_ASSIGNED = -0x1 NFNETLINK_V0 = 0x0 NFNLGRP_ACCT_QUOTA = 0x8 @@ -1396,6 +1446,12 @@ const ( PR_MCE_KILL_SET = 0x1 PR_MPX_DISABLE_MANAGEMENT = 0x2c PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_PAC_APDAKEY = 0x4 + PR_PAC_APDBKEY = 0x8 + PR_PAC_APGAKEY = 0x10 + PR_PAC_APIAKEY = 0x1 + PR_PAC_APIBKEY = 0x2 + PR_PAC_RESET_KEYS = 0x36 PR_SET_CHILD_SUBREAPER = 0x24 PR_SET_DUMPABLE = 0x4 PR_SET_ENDIAN = 0x14 @@ -2234,6 +2290,7 @@ const ( TUNGETVNETBE = 0x400454df TUNGETVNETHDRSZ = 0x400454d7 TUNGETVNETLE = 0x400454dd + TUNSETCARRIER = 0x800454e2 TUNSETDEBUG = 0x800454c9 TUNSETFILTEREBPF = 0x400454e1 TUNSETGROUP = 0x800454ce diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go index 7ddd09d782..be225da7d9 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -174,6 +174,7 @@ const ( B9600 = 0xd BALLOON_KVM_MAGIC = 0x13661366 BDEVFS_MAGIC = 0x62646576 + BINDERFS_SUPER_MAGIC = 0x6c6f6f70 BINFMTFS_MAGIC = 0x42494e4d BLKBSZGET = 0x40041270 BLKBSZSET = 0x80041271 @@ -319,6 +320,10 @@ const ( CRDLY = 0x600 CREAD = 0x80 CRTSCTS = 0x80000000 + CRYPTO_MAX_NAME = 0x40 + CRYPTO_MSG_MAX = 0x15 + CRYPTO_NR_MSGTYPES = 0x6 + CRYPTO_REPORT_MAXSIZE = 0x160 CS5 = 0x0 CS6 = 0x10 CS7 = 0x20 @@ -486,12 +491,57 @@ const ( FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 + FANOTIFY_METADATA_VERSION = 0x3 + FAN_ACCESS = 0x1 + FAN_ACCESS_PERM = 0x20000 + FAN_ALLOW = 0x1 + FAN_ALL_CLASS_BITS = 0xc + FAN_ALL_EVENTS = 0x3b + FAN_ALL_INIT_FLAGS = 0x3f + FAN_ALL_MARK_FLAGS = 0xff + FAN_ALL_OUTGOING_EVENTS = 0x3403b + FAN_ALL_PERM_EVENTS = 0x30000 + FAN_AUDIT = 0x10 + FAN_CLASS_CONTENT = 0x4 + FAN_CLASS_NOTIF = 0x0 + FAN_CLASS_PRE_CONTENT = 0x8 + FAN_CLOEXEC = 0x1 + FAN_CLOSE = 0x18 + FAN_CLOSE_NOWRITE = 0x10 + FAN_CLOSE_WRITE = 0x8 + FAN_DENY = 0x2 + FAN_ENABLE_AUDIT = 0x40 + FAN_EVENT_METADATA_LEN = 0x18 + FAN_EVENT_ON_CHILD = 0x8000000 + FAN_MARK_ADD = 0x1 + FAN_MARK_DONT_FOLLOW = 0x4 + FAN_MARK_FILESYSTEM = 0x100 + FAN_MARK_FLUSH = 0x80 + FAN_MARK_IGNORED_MASK = 0x20 + FAN_MARK_IGNORED_SURV_MODIFY = 0x40 + FAN_MARK_INODE = 0x0 + FAN_MARK_MOUNT = 0x10 + FAN_MARK_ONLYDIR = 0x8 + FAN_MARK_REMOVE = 0x2 + FAN_MODIFY = 0x2 + FAN_NOFD = -0x1 + FAN_NONBLOCK = 0x2 + FAN_ONDIR = 0x40000000 + FAN_OPEN = 0x20 + FAN_OPEN_EXEC = 0x1000 + FAN_OPEN_EXEC_PERM = 0x40000 + FAN_OPEN_PERM = 0x10000 + FAN_Q_OVERFLOW = 0x4000 + FAN_REPORT_TID = 0x100 + FAN_UNLIMITED_MARKS = 0x20 + FAN_UNLIMITED_QUEUE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x2000 + FS_ENCRYPTION_MODE_ADIANTUM = 0x9 FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 @@ -513,7 +563,7 @@ const ( FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 - FS_POLICY_FLAGS_VALID = 0x3 + FS_POLICY_FLAGS_VALID = 0x7 FUTEXFS_SUPER_MAGIC = 0xbad1dea F_ADD_SEALS = 0x409 F_DUPFD = 0x0 @@ -1132,7 +1182,7 @@ const ( NETLINK_UNUSED = 0x1 NETLINK_USERSOCK = 0x2 NETLINK_XFRM = 0x6 - NETNSA_MAX = 0x3 + NETNSA_MAX = 0x5 NETNSA_NSID_NOT_ASSIGNED = -0x1 NFNETLINK_V0 = 0x0 NFNLGRP_ACCT_QUOTA = 0x8 @@ -1396,6 +1446,12 @@ const ( PR_MCE_KILL_SET = 0x1 PR_MPX_DISABLE_MANAGEMENT = 0x2c PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_PAC_APDAKEY = 0x4 + PR_PAC_APDBKEY = 0x8 + PR_PAC_APGAKEY = 0x10 + PR_PAC_APIAKEY = 0x1 + PR_PAC_APIBKEY = 0x2 + PR_PAC_RESET_KEYS = 0x36 PR_SET_CHILD_SUBREAPER = 0x24 PR_SET_DUMPABLE = 0x4 PR_SET_ENDIAN = 0x14 @@ -2234,6 +2290,7 @@ const ( TUNGETVNETBE = 0x400454df TUNGETVNETHDRSZ = 0x400454d7 TUNGETVNETLE = 0x400454dd + TUNSETCARRIER = 0x800454e2 TUNSETDEBUG = 0x800454c9 TUNSETFILTEREBPF = 0x400454e1 TUNSETGROUP = 0x800454ce diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go index ebaca417b4..fcbc70173a 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -174,6 +174,7 @@ const ( B9600 = 0xd BALLOON_KVM_MAGIC = 0x13661366 BDEVFS_MAGIC = 0x62646576 + BINDERFS_SUPER_MAGIC = 0x6c6f6f70 BINFMTFS_MAGIC = 0x42494e4d BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 @@ -319,6 +320,10 @@ const ( CRDLY = 0x3000 CREAD = 0x800 CRTSCTS = 0x80000000 + CRYPTO_MAX_NAME = 0x40 + CRYPTO_MSG_MAX = 0x15 + CRYPTO_NR_MSGTYPES = 0x6 + CRYPTO_REPORT_MAXSIZE = 0x160 CS5 = 0x0 CS6 = 0x100 CS7 = 0x200 @@ -486,12 +491,57 @@ const ( FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 + FANOTIFY_METADATA_VERSION = 0x3 + FAN_ACCESS = 0x1 + FAN_ACCESS_PERM = 0x20000 + FAN_ALLOW = 0x1 + FAN_ALL_CLASS_BITS = 0xc + FAN_ALL_EVENTS = 0x3b + FAN_ALL_INIT_FLAGS = 0x3f + FAN_ALL_MARK_FLAGS = 0xff + FAN_ALL_OUTGOING_EVENTS = 0x3403b + FAN_ALL_PERM_EVENTS = 0x30000 + FAN_AUDIT = 0x10 + FAN_CLASS_CONTENT = 0x4 + FAN_CLASS_NOTIF = 0x0 + FAN_CLASS_PRE_CONTENT = 0x8 + FAN_CLOEXEC = 0x1 + FAN_CLOSE = 0x18 + FAN_CLOSE_NOWRITE = 0x10 + FAN_CLOSE_WRITE = 0x8 + FAN_DENY = 0x2 + FAN_ENABLE_AUDIT = 0x40 + FAN_EVENT_METADATA_LEN = 0x18 + FAN_EVENT_ON_CHILD = 0x8000000 + FAN_MARK_ADD = 0x1 + FAN_MARK_DONT_FOLLOW = 0x4 + FAN_MARK_FILESYSTEM = 0x100 + FAN_MARK_FLUSH = 0x80 + FAN_MARK_IGNORED_MASK = 0x20 + FAN_MARK_IGNORED_SURV_MODIFY = 0x40 + FAN_MARK_INODE = 0x0 + FAN_MARK_MOUNT = 0x10 + FAN_MARK_ONLYDIR = 0x8 + FAN_MARK_REMOVE = 0x2 + FAN_MODIFY = 0x2 + FAN_NOFD = -0x1 + FAN_NONBLOCK = 0x2 + FAN_ONDIR = 0x40000000 + FAN_OPEN = 0x20 + FAN_OPEN_EXEC = 0x1000 + FAN_OPEN_EXEC_PERM = 0x40000 + FAN_OPEN_PERM = 0x10000 + FAN_Q_OVERFLOW = 0x4000 + FAN_REPORT_TID = 0x100 + FAN_UNLIMITED_MARKS = 0x20 + FAN_UNLIMITED_QUEUE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x4000 FFDLY = 0x4000 FLUSHO = 0x800000 + FS_ENCRYPTION_MODE_ADIANTUM = 0x9 FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 @@ -513,7 +563,7 @@ const ( FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 - FS_POLICY_FLAGS_VALID = 0x3 + FS_POLICY_FLAGS_VALID = 0x7 FUTEXFS_SUPER_MAGIC = 0xbad1dea F_ADD_SEALS = 0x409 F_DUPFD = 0x0 @@ -1131,7 +1181,7 @@ const ( NETLINK_UNUSED = 0x1 NETLINK_USERSOCK = 0x2 NETLINK_XFRM = 0x6 - NETNSA_MAX = 0x3 + NETNSA_MAX = 0x5 NETNSA_NSID_NOT_ASSIGNED = -0x1 NFNETLINK_V0 = 0x0 NFNLGRP_ACCT_QUOTA = 0x8 @@ -1398,6 +1448,12 @@ const ( PR_MCE_KILL_SET = 0x1 PR_MPX_DISABLE_MANAGEMENT = 0x2c PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_PAC_APDAKEY = 0x4 + PR_PAC_APDBKEY = 0x8 + PR_PAC_APGAKEY = 0x10 + PR_PAC_APIAKEY = 0x1 + PR_PAC_APIBKEY = 0x2 + PR_PAC_RESET_KEYS = 0x36 PR_SET_CHILD_SUBREAPER = 0x24 PR_SET_DUMPABLE = 0x4 PR_SET_ENDIAN = 0x14 @@ -2294,6 +2350,7 @@ const ( TUNGETVNETBE = 0x400454df TUNGETVNETHDRSZ = 0x400454d7 TUNGETVNETLE = 0x400454dd + TUNSETCARRIER = 0x800454e2 TUNSETDEBUG = 0x800454c9 TUNSETFILTEREBPF = 0x400454e1 TUNSETGROUP = 0x800454ce diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go index 02938cb6ed..5cd3b4ed0e 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -174,6 +174,7 @@ const ( B9600 = 0xd BALLOON_KVM_MAGIC = 0x13661366 BDEVFS_MAGIC = 0x62646576 + BINDERFS_SUPER_MAGIC = 0x6c6f6f70 BINFMTFS_MAGIC = 0x42494e4d BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 @@ -319,6 +320,10 @@ const ( CRDLY = 0x3000 CREAD = 0x800 CRTSCTS = 0x80000000 + CRYPTO_MAX_NAME = 0x40 + CRYPTO_MSG_MAX = 0x15 + CRYPTO_NR_MSGTYPES = 0x6 + CRYPTO_REPORT_MAXSIZE = 0x160 CS5 = 0x0 CS6 = 0x100 CS7 = 0x200 @@ -486,12 +491,57 @@ const ( FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 + FANOTIFY_METADATA_VERSION = 0x3 + FAN_ACCESS = 0x1 + FAN_ACCESS_PERM = 0x20000 + FAN_ALLOW = 0x1 + FAN_ALL_CLASS_BITS = 0xc + FAN_ALL_EVENTS = 0x3b + FAN_ALL_INIT_FLAGS = 0x3f + FAN_ALL_MARK_FLAGS = 0xff + FAN_ALL_OUTGOING_EVENTS = 0x3403b + FAN_ALL_PERM_EVENTS = 0x30000 + FAN_AUDIT = 0x10 + FAN_CLASS_CONTENT = 0x4 + FAN_CLASS_NOTIF = 0x0 + FAN_CLASS_PRE_CONTENT = 0x8 + FAN_CLOEXEC = 0x1 + FAN_CLOSE = 0x18 + FAN_CLOSE_NOWRITE = 0x10 + FAN_CLOSE_WRITE = 0x8 + FAN_DENY = 0x2 + FAN_ENABLE_AUDIT = 0x40 + FAN_EVENT_METADATA_LEN = 0x18 + FAN_EVENT_ON_CHILD = 0x8000000 + FAN_MARK_ADD = 0x1 + FAN_MARK_DONT_FOLLOW = 0x4 + FAN_MARK_FILESYSTEM = 0x100 + FAN_MARK_FLUSH = 0x80 + FAN_MARK_IGNORED_MASK = 0x20 + FAN_MARK_IGNORED_SURV_MODIFY = 0x40 + FAN_MARK_INODE = 0x0 + FAN_MARK_MOUNT = 0x10 + FAN_MARK_ONLYDIR = 0x8 + FAN_MARK_REMOVE = 0x2 + FAN_MODIFY = 0x2 + FAN_NOFD = -0x1 + FAN_NONBLOCK = 0x2 + FAN_ONDIR = 0x40000000 + FAN_OPEN = 0x20 + FAN_OPEN_EXEC = 0x1000 + FAN_OPEN_EXEC_PERM = 0x40000 + FAN_OPEN_PERM = 0x10000 + FAN_Q_OVERFLOW = 0x4000 + FAN_REPORT_TID = 0x100 + FAN_UNLIMITED_MARKS = 0x20 + FAN_UNLIMITED_QUEUE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x4000 FFDLY = 0x4000 FLUSHO = 0x800000 + FS_ENCRYPTION_MODE_ADIANTUM = 0x9 FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 @@ -513,7 +563,7 @@ const ( FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 - FS_POLICY_FLAGS_VALID = 0x3 + FS_POLICY_FLAGS_VALID = 0x7 FUTEXFS_SUPER_MAGIC = 0xbad1dea F_ADD_SEALS = 0x409 F_DUPFD = 0x0 @@ -1131,7 +1181,7 @@ const ( NETLINK_UNUSED = 0x1 NETLINK_USERSOCK = 0x2 NETLINK_XFRM = 0x6 - NETNSA_MAX = 0x3 + NETNSA_MAX = 0x5 NETNSA_NSID_NOT_ASSIGNED = -0x1 NFNETLINK_V0 = 0x0 NFNLGRP_ACCT_QUOTA = 0x8 @@ -1398,6 +1448,12 @@ const ( PR_MCE_KILL_SET = 0x1 PR_MPX_DISABLE_MANAGEMENT = 0x2c PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_PAC_APDAKEY = 0x4 + PR_PAC_APDBKEY = 0x8 + PR_PAC_APGAKEY = 0x10 + PR_PAC_APIAKEY = 0x1 + PR_PAC_APIBKEY = 0x2 + PR_PAC_RESET_KEYS = 0x36 PR_SET_CHILD_SUBREAPER = 0x24 PR_SET_DUMPABLE = 0x4 PR_SET_ENDIAN = 0x14 @@ -2294,6 +2350,7 @@ const ( TUNGETVNETBE = 0x400454df TUNGETVNETHDRSZ = 0x400454d7 TUNGETVNETLE = 0x400454dd + TUNSETCARRIER = 0x800454e2 TUNSETDEBUG = 0x800454c9 TUNSETFILTEREBPF = 0x400454e1 TUNSETGROUP = 0x800454ce diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go index 5aea4b9093..0465451e88 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -174,6 +174,7 @@ const ( B9600 = 0xd BALLOON_KVM_MAGIC = 0x13661366 BDEVFS_MAGIC = 0x62646576 + BINDERFS_SUPER_MAGIC = 0x6c6f6f70 BINFMTFS_MAGIC = 0x42494e4d BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 @@ -319,6 +320,10 @@ const ( CRDLY = 0x600 CREAD = 0x80 CRTSCTS = 0x80000000 + CRYPTO_MAX_NAME = 0x40 + CRYPTO_MSG_MAX = 0x15 + CRYPTO_NR_MSGTYPES = 0x6 + CRYPTO_REPORT_MAXSIZE = 0x160 CS5 = 0x0 CS6 = 0x10 CS7 = 0x20 @@ -486,12 +491,57 @@ const ( FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 + FANOTIFY_METADATA_VERSION = 0x3 + FAN_ACCESS = 0x1 + FAN_ACCESS_PERM = 0x20000 + FAN_ALLOW = 0x1 + FAN_ALL_CLASS_BITS = 0xc + FAN_ALL_EVENTS = 0x3b + FAN_ALL_INIT_FLAGS = 0x3f + FAN_ALL_MARK_FLAGS = 0xff + FAN_ALL_OUTGOING_EVENTS = 0x3403b + FAN_ALL_PERM_EVENTS = 0x30000 + FAN_AUDIT = 0x10 + FAN_CLASS_CONTENT = 0x4 + FAN_CLASS_NOTIF = 0x0 + FAN_CLASS_PRE_CONTENT = 0x8 + FAN_CLOEXEC = 0x1 + FAN_CLOSE = 0x18 + FAN_CLOSE_NOWRITE = 0x10 + FAN_CLOSE_WRITE = 0x8 + FAN_DENY = 0x2 + FAN_ENABLE_AUDIT = 0x40 + FAN_EVENT_METADATA_LEN = 0x18 + FAN_EVENT_ON_CHILD = 0x8000000 + FAN_MARK_ADD = 0x1 + FAN_MARK_DONT_FOLLOW = 0x4 + FAN_MARK_FILESYSTEM = 0x100 + FAN_MARK_FLUSH = 0x80 + FAN_MARK_IGNORED_MASK = 0x20 + FAN_MARK_IGNORED_SURV_MODIFY = 0x40 + FAN_MARK_INODE = 0x0 + FAN_MARK_MOUNT = 0x10 + FAN_MARK_ONLYDIR = 0x8 + FAN_MARK_REMOVE = 0x2 + FAN_MODIFY = 0x2 + FAN_NOFD = -0x1 + FAN_NONBLOCK = 0x2 + FAN_ONDIR = 0x40000000 + FAN_OPEN = 0x20 + FAN_OPEN_EXEC = 0x1000 + FAN_OPEN_EXEC_PERM = 0x40000 + FAN_OPEN_PERM = 0x10000 + FAN_Q_OVERFLOW = 0x4000 + FAN_REPORT_TID = 0x100 + FAN_UNLIMITED_MARKS = 0x20 + FAN_UNLIMITED_QUEUE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_ADIANTUM = 0x9 FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 @@ -513,7 +563,7 @@ const ( FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 - FS_POLICY_FLAGS_VALID = 0x3 + FS_POLICY_FLAGS_VALID = 0x7 FUTEXFS_SUPER_MAGIC = 0xbad1dea F_ADD_SEALS = 0x409 F_DUPFD = 0x0 @@ -1132,7 +1182,7 @@ const ( NETLINK_UNUSED = 0x1 NETLINK_USERSOCK = 0x2 NETLINK_XFRM = 0x6 - NETNSA_MAX = 0x3 + NETNSA_MAX = 0x5 NETNSA_NSID_NOT_ASSIGNED = -0x1 NFNETLINK_V0 = 0x0 NFNLGRP_ACCT_QUOTA = 0x8 @@ -1396,6 +1446,12 @@ const ( PR_MCE_KILL_SET = 0x1 PR_MPX_DISABLE_MANAGEMENT = 0x2c PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_PAC_APDAKEY = 0x4 + PR_PAC_APDBKEY = 0x8 + PR_PAC_APGAKEY = 0x10 + PR_PAC_APIAKEY = 0x1 + PR_PAC_APIBKEY = 0x2 + PR_PAC_RESET_KEYS = 0x36 PR_SET_CHILD_SUBREAPER = 0x24 PR_SET_DUMPABLE = 0x4 PR_SET_ENDIAN = 0x14 @@ -2220,6 +2276,7 @@ const ( TUNGETVNETBE = 0x800454df TUNGETVNETHDRSZ = 0x800454d7 TUNGETVNETLE = 0x800454dd + TUNSETCARRIER = 0x400454e2 TUNSETDEBUG = 0x400454c9 TUNSETFILTEREBPF = 0x800454e1 TUNSETGROUP = 0x400454ce diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go index 7f7c2e3e2f..e1592a17a3 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -174,6 +174,7 @@ const ( B9600 = 0xd BALLOON_KVM_MAGIC = 0x13661366 BDEVFS_MAGIC = 0x62646576 + BINDERFS_SUPER_MAGIC = 0x6c6f6f70 BINFMTFS_MAGIC = 0x42494e4d BLKBSZGET = 0x80081270 BLKBSZSET = 0x40081271 @@ -319,6 +320,10 @@ const ( CRDLY = 0x600 CREAD = 0x80 CRTSCTS = 0x80000000 + CRYPTO_MAX_NAME = 0x40 + CRYPTO_MSG_MAX = 0x15 + CRYPTO_NR_MSGTYPES = 0x6 + CRYPTO_REPORT_MAXSIZE = 0x160 CS5 = 0x0 CS6 = 0x10 CS7 = 0x20 @@ -486,12 +491,57 @@ const ( FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 + FANOTIFY_METADATA_VERSION = 0x3 + FAN_ACCESS = 0x1 + FAN_ACCESS_PERM = 0x20000 + FAN_ALLOW = 0x1 + FAN_ALL_CLASS_BITS = 0xc + FAN_ALL_EVENTS = 0x3b + FAN_ALL_INIT_FLAGS = 0x3f + FAN_ALL_MARK_FLAGS = 0xff + FAN_ALL_OUTGOING_EVENTS = 0x3403b + FAN_ALL_PERM_EVENTS = 0x30000 + FAN_AUDIT = 0x10 + FAN_CLASS_CONTENT = 0x4 + FAN_CLASS_NOTIF = 0x0 + FAN_CLASS_PRE_CONTENT = 0x8 + FAN_CLOEXEC = 0x1 + FAN_CLOSE = 0x18 + FAN_CLOSE_NOWRITE = 0x10 + FAN_CLOSE_WRITE = 0x8 + FAN_DENY = 0x2 + FAN_ENABLE_AUDIT = 0x40 + FAN_EVENT_METADATA_LEN = 0x18 + FAN_EVENT_ON_CHILD = 0x8000000 + FAN_MARK_ADD = 0x1 + FAN_MARK_DONT_FOLLOW = 0x4 + FAN_MARK_FILESYSTEM = 0x100 + FAN_MARK_FLUSH = 0x80 + FAN_MARK_IGNORED_MASK = 0x20 + FAN_MARK_IGNORED_SURV_MODIFY = 0x40 + FAN_MARK_INODE = 0x0 + FAN_MARK_MOUNT = 0x10 + FAN_MARK_ONLYDIR = 0x8 + FAN_MARK_REMOVE = 0x2 + FAN_MODIFY = 0x2 + FAN_NOFD = -0x1 + FAN_NONBLOCK = 0x2 + FAN_ONDIR = 0x40000000 + FAN_OPEN = 0x20 + FAN_OPEN_EXEC = 0x1000 + FAN_OPEN_EXEC_PERM = 0x40000 + FAN_OPEN_PERM = 0x10000 + FAN_Q_OVERFLOW = 0x4000 + FAN_REPORT_TID = 0x100 + FAN_UNLIMITED_MARKS = 0x20 + FAN_UNLIMITED_QUEUE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_ADIANTUM = 0x9 FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 @@ -513,7 +563,7 @@ const ( FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 - FS_POLICY_FLAGS_VALID = 0x3 + FS_POLICY_FLAGS_VALID = 0x7 FUTEXFS_SUPER_MAGIC = 0xbad1dea F_ADD_SEALS = 0x409 F_DUPFD = 0x0 @@ -1132,7 +1182,7 @@ const ( NETLINK_UNUSED = 0x1 NETLINK_USERSOCK = 0x2 NETLINK_XFRM = 0x6 - NETNSA_MAX = 0x3 + NETNSA_MAX = 0x5 NETNSA_NSID_NOT_ASSIGNED = -0x1 NFNETLINK_V0 = 0x0 NFNLGRP_ACCT_QUOTA = 0x8 @@ -1396,6 +1446,12 @@ const ( PR_MCE_KILL_SET = 0x1 PR_MPX_DISABLE_MANAGEMENT = 0x2c PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_PAC_APDAKEY = 0x4 + PR_PAC_APDBKEY = 0x8 + PR_PAC_APGAKEY = 0x10 + PR_PAC_APIAKEY = 0x1 + PR_PAC_APIBKEY = 0x2 + PR_PAC_RESET_KEYS = 0x36 PR_SET_CHILD_SUBREAPER = 0x24 PR_SET_DUMPABLE = 0x4 PR_SET_ENDIAN = 0x14 @@ -2293,6 +2349,7 @@ const ( TUNGETVNETBE = 0x800454df TUNGETVNETHDRSZ = 0x800454d7 TUNGETVNETLE = 0x800454dd + TUNSETCARRIER = 0x400454e2 TUNSETDEBUG = 0x400454c9 TUNSETFILTEREBPF = 0x800454e1 TUNSETGROUP = 0x400454ce diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go index 968e21fd68..4be507343c 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -177,6 +177,7 @@ const ( B9600 = 0xd BALLOON_KVM_MAGIC = 0x13661366 BDEVFS_MAGIC = 0x62646576 + BINDERFS_SUPER_MAGIC = 0x6c6f6f70 BINFMTFS_MAGIC = 0x42494e4d BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 @@ -322,6 +323,10 @@ const ( CRDLY = 0x600 CREAD = 0x80 CRTSCTS = 0x80000000 + CRYPTO_MAX_NAME = 0x40 + CRYPTO_MSG_MAX = 0x15 + CRYPTO_NR_MSGTYPES = 0x6 + CRYPTO_REPORT_MAXSIZE = 0x160 CS5 = 0x0 CS6 = 0x10 CS7 = 0x20 @@ -490,12 +495,57 @@ const ( FALLOC_FL_PUNCH_HOLE = 0x2 FALLOC_FL_UNSHARE_RANGE = 0x40 FALLOC_FL_ZERO_RANGE = 0x10 + FANOTIFY_METADATA_VERSION = 0x3 + FAN_ACCESS = 0x1 + FAN_ACCESS_PERM = 0x20000 + FAN_ALLOW = 0x1 + FAN_ALL_CLASS_BITS = 0xc + FAN_ALL_EVENTS = 0x3b + FAN_ALL_INIT_FLAGS = 0x3f + FAN_ALL_MARK_FLAGS = 0xff + FAN_ALL_OUTGOING_EVENTS = 0x3403b + FAN_ALL_PERM_EVENTS = 0x30000 + FAN_AUDIT = 0x10 + FAN_CLASS_CONTENT = 0x4 + FAN_CLASS_NOTIF = 0x0 + FAN_CLASS_PRE_CONTENT = 0x8 + FAN_CLOEXEC = 0x1 + FAN_CLOSE = 0x18 + FAN_CLOSE_NOWRITE = 0x10 + FAN_CLOSE_WRITE = 0x8 + FAN_DENY = 0x2 + FAN_ENABLE_AUDIT = 0x40 + FAN_EVENT_METADATA_LEN = 0x18 + FAN_EVENT_ON_CHILD = 0x8000000 + FAN_MARK_ADD = 0x1 + FAN_MARK_DONT_FOLLOW = 0x4 + FAN_MARK_FILESYSTEM = 0x100 + FAN_MARK_FLUSH = 0x80 + FAN_MARK_IGNORED_MASK = 0x20 + FAN_MARK_IGNORED_SURV_MODIFY = 0x40 + FAN_MARK_INODE = 0x0 + FAN_MARK_MOUNT = 0x10 + FAN_MARK_ONLYDIR = 0x8 + FAN_MARK_REMOVE = 0x2 + FAN_MODIFY = 0x2 + FAN_NOFD = -0x1 + FAN_NONBLOCK = 0x2 + FAN_ONDIR = 0x40000000 + FAN_OPEN = 0x20 + FAN_OPEN_EXEC = 0x1000 + FAN_OPEN_EXEC_PERM = 0x40000 + FAN_OPEN_PERM = 0x10000 + FAN_Q_OVERFLOW = 0x4000 + FAN_REPORT_TID = 0x100 + FAN_UNLIMITED_MARKS = 0x20 + FAN_UNLIMITED_QUEUE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 FF1 = 0x8000 FFDLY = 0x8000 FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_ADIANTUM = 0x9 FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 @@ -517,7 +567,7 @@ const ( FS_POLICY_FLAGS_PAD_4 = 0x0 FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 - FS_POLICY_FLAGS_VALID = 0x3 + FS_POLICY_FLAGS_VALID = 0x7 FUTEXFS_SUPER_MAGIC = 0xbad1dea F_ADD_SEALS = 0x409 F_DUPFD = 0x0 @@ -1136,7 +1186,7 @@ const ( NETLINK_UNUSED = 0x1 NETLINK_USERSOCK = 0x2 NETLINK_XFRM = 0x6 - NETNSA_MAX = 0x3 + NETNSA_MAX = 0x5 NETNSA_NSID_NOT_ASSIGNED = -0x1 NFNETLINK_V0 = 0x0 NFNLGRP_ACCT_QUOTA = 0x8 @@ -1400,6 +1450,12 @@ const ( PR_MCE_KILL_SET = 0x1 PR_MPX_DISABLE_MANAGEMENT = 0x2c PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_PAC_APDAKEY = 0x4 + PR_PAC_APDBKEY = 0x8 + PR_PAC_APGAKEY = 0x10 + PR_PAC_APIAKEY = 0x1 + PR_PAC_APIBKEY = 0x2 + PR_PAC_RESET_KEYS = 0x36 PR_SET_CHILD_SUBREAPER = 0x24 PR_SET_DUMPABLE = 0x4 PR_SET_ENDIAN = 0x14 @@ -2282,6 +2338,7 @@ const ( TUNGETVNETBE = 0x400454df TUNGETVNETHDRSZ = 0x400454d7 TUNGETVNETLE = 0x400454dd + TUNSETCARRIER = 0x800454e2 TUNSETDEBUG = 0x800454c9 TUNSETFILTEREBPF = 0x400454e1 TUNSETGROUP = 0x800454ce diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go new file mode 100644 index 0000000000..ec5f92de88 --- /dev/null +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go @@ -0,0 +1,1789 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm64,openbsd + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_BLUETOOTH = 0x20 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_ENCAP = 0x1c + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_KEY = 0x1e + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x1d + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ALTWERASE = 0x200 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRFILT = 0x4004427c + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc010427b + BIOCGETIF = 0x4020426b + BIOCGFILDROP = 0x40044278 + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044273 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x20004276 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDIRFILT = 0x8004427d + BIOCSDLT = 0x8004427a + BIOCSETF = 0x80104267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x80104277 + BIOCSFILDROP = 0x80044279 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044272 + BIOCSRTIMEOUT = 0x8010426d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIRECTION_IN = 0x1 + BPF_DIRECTION_OUT = 0x2 + BPF_DIV = 0x30 + BPF_FILDROP_CAPTURE = 0x1 + BPF_FILDROP_DROP = 0x2 + BPF_FILDROP_PASS = 0x0 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x200000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_BOOTTIME = 0x6 + CLOCK_MONOTONIC = 0x3 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x4 + CLOCK_UPTIME = 0x5 + CREAD = 0x800 + CRTSCTS = 0x10000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0xff + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DIOCOSFPFLUSH = 0x2000444e + DLT_ARCNET = 0x7 + DLT_ATM_RFC1483 = 0xb + DLT_AX25 = 0x3 + DLT_CHAOS = 0x5 + DLT_C_HDLC = 0x68 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0xd + DLT_FDDI = 0xa + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_LOOP = 0xc + DLT_MPLS = 0xdb + DLT_NULL = 0x0 + DLT_OPENFLOW = 0x10b + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_SERIAL = 0x32 + DLT_PRONET = 0x4 + DLT_RAW = 0xe + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_USBPCAP = 0xf9 + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMT_TAGOVF = 0x1 + EMUL_ENABLED = 0x1 + EMUL_NATIVE = 0x2 + ENDRUNDISC = 0x9 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_AOE = 0x88a2 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LLDP = 0x88cc + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PBB = 0x88e7 + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_QINQ = 0x88a8 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOW = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_ALIGN = 0x2 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_DIX_LEN = 0x600 + ETHER_MAX_HARDMTU_LEN = 0xff9b + ETHER_MAX_LEN = 0x5ee + ETHER_MIN_LEN = 0x40 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = -0x3 + EVFILT_DEVICE = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x8 + EVFILT_TIMER = -0x7 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EVL_ENCAPLEN = 0x4 + EVL_PRIO_BITS = 0xd + EVL_PRIO_MAX = 0x7 + EVL_VLID_MASK = 0xfff + EVL_VLID_MAX = 0xffe + EVL_VLID_MIN = 0x1 + EVL_VLID_NULL = 0x0 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xa + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_ISATTY = 0xb + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8e52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_STATICARP = 0x20 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BLUETOOTH = 0xf8 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf7 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DUMMY = 0xf1 + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf3 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MBIM = 0xfa + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFLOW = 0xf9 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf2 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_HOST = 0x1 + IN_RFC3021_NET = 0xfffffffe + IN_RFC3021_NSHIFT = 0x1f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x103 + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPV6_AUTH_LEVEL = 0x35 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_ESP_NETWORK_LEVEL = 0x37 + IPV6_ESP_TRANS_LEVEL = 0x36 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPCOMP_LEVEL = 0x3c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MINHOPCOUNT = 0x41 + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_OPTIONS = 0x1 + IPV6_PATHMTU = 0x2c + IPV6_PIPEX = 0x3f + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVDSTPORT = 0x40 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTABLE = 0x1021 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_AUTH_LEVEL = 0x14 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_ESP_NETWORK_LEVEL = 0x16 + IP_ESP_TRANS_LEVEL = 0x15 + IP_HDRINCL = 0x2 + IP_IPCOMP_LEVEL = 0x1d + IP_IPDEFTTL = 0x25 + IP_IPSECFLOWINFO = 0x24 + IP_IPSEC_LOCAL_AUTH = 0x1b + IP_IPSEC_LOCAL_CRED = 0x19 + IP_IPSEC_LOCAL_ID = 0x17 + IP_IPSEC_REMOTE_AUTH = 0x1c + IP_IPSEC_REMOTE_CRED = 0x1a + IP_IPSEC_REMOTE_ID = 0x18 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0xfff + IP_MF = 0x2000 + IP_MINTTL = 0x20 + IP_MIN_MEMBERSHIPS = 0xf + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PIPEX = 0x22 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVDSTPORT = 0x21 + IP_RECVIF = 0x1e + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRTABLE = 0x23 + IP_RECVTTL = 0x1f + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RTABLE = 0x1021 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IUCLC = 0x1000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LCNT_OVERLOAD_FLUSH = 0x6 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_CONCEAL = 0x8000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FLAGMASK = 0xfff7 + MAP_HASSEMAPHORE = 0x0 + MAP_INHERIT = 0x0 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_INHERIT_ZERO = 0x3 + MAP_NOEXTEND = 0x0 + MAP_NORESERVE = 0x0 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x0 + MAP_SHARED = 0x1 + MAP_STACK = 0x4000 + MAP_TRYFIXED = 0x0 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_DOOMED = 0x8000000 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_NOATIME = 0x8000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOPERM = 0x20 + MNT_NOSUID = 0x8 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SOFTDEP = 0x4000000 + MNT_STALLED = 0x100000 + MNT_SWAPPABLE = 0x200000 + MNT_SYNCHRONOUS = 0x2 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0x400ffff + MNT_WAIT = 0x1 + MNT_WANTRDWR = 0x2000000 + MNT_WXALLOWED = 0x800 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_MCAST = 0x200 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x4 + MS_SYNC = 0x2 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFNAMES = 0x6 + NET_RT_MAXID = 0x7 + NET_RT_STATS = 0x4 + NET_RT_TABLE = 0x5 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ATTRIB = 0x8 + NOTE_CHANGE = 0x1 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EOF = 0x2 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRUNCATE = 0x80 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OLCUC = 0x20 + ONLCR = 0x2 + ONLRET = 0x80 + ONOCR = 0x40 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x10000 + O_CREAT = 0x200 + O_DIRECTORY = 0x20000 + O_DSYNC = 0x80 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x80 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PF_FLUSH = 0x1 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BFD = 0xb + RTAX_BRD = 0x7 + RTAX_DNS = 0xc + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_LABEL = 0xa + RTAX_MAX = 0xf + RTAX_NETMASK = 0x2 + RTAX_SEARCH = 0xe + RTAX_SRC = 0x8 + RTAX_SRCMASK = 0x9 + RTAX_STATIC = 0xd + RTA_AUTHOR = 0x40 + RTA_BFD = 0x800 + RTA_BRD = 0x80 + RTA_DNS = 0x1000 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_LABEL = 0x400 + RTA_NETMASK = 0x4 + RTA_SEARCH = 0x4000 + RTA_SRC = 0x100 + RTA_SRCMASK = 0x200 + RTA_STATIC = 0x2000 + RTF_ANNOUNCE = 0x4000 + RTF_BFD = 0x1000000 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CACHED = 0x20000 + RTF_CLONED = 0x10000 + RTF_CLONING = 0x100 + RTF_CONNECTED = 0x800000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x110fc08 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MPATH = 0x40000 + RTF_MPLS = 0x100000 + RTF_MULTICAST = 0x200 + RTF_PERMANENT_ARP = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x2000 + RTF_REJECT = 0x8 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_USETRAILERS = 0x8000 + RTM_80211INFO = 0x15 + RTM_ADD = 0x1 + RTM_BFD = 0x12 + RTM_CHANGE = 0x3 + RTM_CHGADDRATTR = 0x14 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DESYNC = 0x10 + RTM_GET = 0x4 + RTM_IFANNOUNCE = 0xf + RTM_IFINFO = 0xe + RTM_INVALIDATE = 0x11 + RTM_LOSING = 0x5 + RTM_MAXSIZE = 0x800 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_PROPOSAL = 0x13 + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_TABLEID_BITS = 0x8 + RT_TABLEID_MASK = 0xff + RT_TABLEID_MAX = 0xff + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80286987 + SIOCATMARK = 0x40047307 + SIOCBRDGADD = 0x8060693c + SIOCBRDGADDL = 0x80606949 + SIOCBRDGADDS = 0x80606941 + SIOCBRDGARL = 0x808c694d + SIOCBRDGDADDR = 0x81286947 + SIOCBRDGDEL = 0x8060693d + SIOCBRDGDELS = 0x80606942 + SIOCBRDGFLUSH = 0x80606948 + SIOCBRDGFRL = 0x808c694e + SIOCBRDGGCACHE = 0xc0186941 + SIOCBRDGGFD = 0xc0186952 + SIOCBRDGGHT = 0xc0186951 + SIOCBRDGGIFFLGS = 0xc060693e + SIOCBRDGGMA = 0xc0186953 + SIOCBRDGGPARAM = 0xc0406958 + SIOCBRDGGPRI = 0xc0186950 + SIOCBRDGGRL = 0xc030694f + SIOCBRDGGTO = 0xc0186946 + SIOCBRDGIFS = 0xc0606942 + SIOCBRDGRTS = 0xc0206943 + SIOCBRDGSADDR = 0xc1286944 + SIOCBRDGSCACHE = 0x80186940 + SIOCBRDGSFD = 0x80186952 + SIOCBRDGSHT = 0x80186951 + SIOCBRDGSIFCOST = 0x80606955 + SIOCBRDGSIFFLGS = 0x8060693f + SIOCBRDGSIFPRIO = 0x80606954 + SIOCBRDGSIFPROT = 0x8060694a + SIOCBRDGSMA = 0x80186953 + SIOCBRDGSPRI = 0x80186950 + SIOCBRDGSPROTO = 0x8018695a + SIOCBRDGSTO = 0x80186945 + SIOCBRDGSTXHC = 0x80186959 + SIOCDELLABEL = 0x80206997 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80286989 + SIOCDIFPARENT = 0x802069b4 + SIOCDIFPHYADDR = 0x80206949 + SIOCDPWE3NEIGHBOR = 0x802069de + SIOCDVNETID = 0x802069af + SIOCGETKALIVE = 0xc01869a4 + SIOCGETLABEL = 0x8020699a + SIOCGETMPWCFG = 0xc02069ae + SIOCGETPFLOW = 0xc02069fe + SIOCGETPFSYNC = 0xc02069f8 + SIOCGETSGCNT = 0xc0207534 + SIOCGETVIFCNT = 0xc0287533 + SIOCGETVLAN = 0xc0206990 + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCONF = 0xc0106924 + SIOCGIFDATA = 0xc020691b + SIOCGIFDESCR = 0xc0206981 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGATTR = 0xc028698b + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGLIST = 0xc028698d + SIOCGIFGMEMB = 0xc028698a + SIOCGIFGROUP = 0xc0286988 + SIOCGIFHARDMTU = 0xc02069a5 + SIOCGIFLLPRIO = 0xc02069b6 + SIOCGIFMEDIA = 0xc0406938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc020697e + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPAIR = 0xc02069b1 + SIOCGIFPARENT = 0xc02069b3 + SIOCGIFPRIORITY = 0xc020699c + SIOCGIFRDOMAIN = 0xc02069a0 + SIOCGIFRTLABEL = 0xc0206983 + SIOCGIFRXR = 0x802069aa + SIOCGIFSFFPAGE = 0xc1126939 + SIOCGIFXFLAGS = 0xc020699e + SIOCGLIFPHYADDR = 0xc218694b + SIOCGLIFPHYDF = 0xc02069c2 + SIOCGLIFPHYECN = 0xc02069c8 + SIOCGLIFPHYRTABLE = 0xc02069a2 + SIOCGLIFPHYTTL = 0xc02069a9 + SIOCGPGRP = 0x40047309 + SIOCGPWE3 = 0xc0206998 + SIOCGPWE3CTRLWORD = 0xc02069dc + SIOCGPWE3FAT = 0xc02069dd + SIOCGPWE3NEIGHBOR = 0xc21869de + SIOCGSPPPPARAMS = 0xc0206994 + SIOCGTXHPRIO = 0xc02069c6 + SIOCGUMBINFO = 0xc02069be + SIOCGUMBPARAM = 0xc02069c0 + SIOCGVH = 0xc02069f6 + SIOCGVNETFLOWID = 0xc02069c4 + SIOCGVNETID = 0xc02069a7 + SIOCIFAFATTACH = 0x801169ab + SIOCIFAFDETACH = 0x801169ac + SIOCIFCREATE = 0x8020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106978 + SIOCSETKALIVE = 0x801869a3 + SIOCSETLABEL = 0x80206999 + SIOCSETMPWCFG = 0x802069ad + SIOCSETPFLOW = 0x802069fd + SIOCSETPFSYNC = 0x802069f7 + SIOCSETVLAN = 0x8020698f + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFDESCR = 0x80206980 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGATTR = 0x8028698c + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020691f + SIOCSIFLLPRIO = 0x802069b5 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x8020697f + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPAIR = 0x802069b0 + SIOCSIFPARENT = 0x802069b2 + SIOCSIFPRIORITY = 0x8020699b + SIOCSIFRDOMAIN = 0x8020699f + SIOCSIFRTLABEL = 0x80206982 + SIOCSIFXFLAGS = 0x8020699d + SIOCSLIFPHYADDR = 0x8218694a + SIOCSLIFPHYDF = 0x802069c1 + SIOCSLIFPHYECN = 0x802069c7 + SIOCSLIFPHYRTABLE = 0x802069a1 + SIOCSLIFPHYTTL = 0x802069a8 + SIOCSPGRP = 0x80047308 + SIOCSPWE3CTRLWORD = 0x802069dc + SIOCSPWE3FAT = 0x802069dd + SIOCSPWE3NEIGHBOR = 0x821869de + SIOCSSPPPPARAMS = 0x80206993 + SIOCSTXHPRIO = 0x802069c5 + SIOCSUMBPARAM = 0x802069bf + SIOCSVH = 0xc02069f5 + SIOCSVNETFLOWID = 0x802069c3 + SIOCSVNETID = 0x802069a6 + SIOCSWGDPID = 0xc018695b + SIOCSWGMAXFLOW = 0xc0186960 + SIOCSWGMAXGROUP = 0xc018695d + SIOCSWSDPID = 0x8018695c + SIOCSWSPORTNO = 0xc060695f + SOCK_CLOEXEC = 0x8000 + SOCK_DGRAM = 0x2 + SOCK_DNS = 0x1000 + SOCK_NONBLOCK = 0x4000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BINDANY = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NETPROC = 0x1020 + SO_OOBINLINE = 0x100 + SO_PEERCRED = 0x1022 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RTABLE = 0x1021 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_SPLICE = 0x1023 + SO_TIMESTAMP = 0x800 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_ZEROIZE = 0x2000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x3 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x4 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOPUSH = 0x10 + TCP_SACK_ENABLE = 0x8 + TCSAFLUSH = 0x2 + TIMER_ABSTIME = 0x1 + TIMER_RELTIME = 0x0 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCHKVERAUTH = 0x2000741e + TIOCCLRVERAUTH = 0x2000741d + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_PPS = 0x10 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGTSTAMP = 0x4010745b + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMODG = 0x4004746a + TIOCMODS = 0x8004746d + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSETVERAUTH = 0x8004741c + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x8004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTOP = 0x2000746f + TIOCSTSTAMP = 0x8008745a + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TIOCUCNTL_CBRK = 0x7a + TIOCUCNTL_SBRK = 0x7b + TOSTOP = 0x400000 + UTIME_NOW = -0x2 + UTIME_OMIT = -0x1 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VM_ANONMIN = 0x7 + VM_LOADAVG = 0x2 + VM_MALLOC_CONF = 0xc + VM_MAXID = 0xd + VM_MAXSLP = 0xa + VM_METER = 0x1 + VM_NKMEMPAGES = 0x6 + VM_PSSTRINGS = 0x3 + VM_SWAPENCRYPT = 0x5 + VM_USPACE = 0xb + VM_UVMEXP = 0x4 + VM_VNODEMIN = 0x9 + VM_VTEXTMIN = 0x8 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALTSIG = 0x4 + WCONTINUED = 0x8 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WUNTRACED = 0x2 + XCASE = 0x1000000 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x5c) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x58) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x59) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EIPSEC = syscall.Errno(0x52) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x5f) + ELOOP = syscall.Errno(0x3e) + EMEDIUMTYPE = syscall.Errno(0x56) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x53) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOMEDIUM = syscall.Errno(0x55) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5a) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5d) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x5b) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x57) + EOWNERDEAD = syscall.Errno(0x5e) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5f) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disk quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC program not available"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIPSEC", "IPsec processing failure"}, + {83, "ENOATTR", "attribute not found"}, + {84, "EILSEQ", "illegal byte sequence"}, + {85, "ENOMEDIUM", "no medium found"}, + {86, "EMEDIUMTYPE", "wrong medium type"}, + {87, "EOVERFLOW", "value too large to be stored in data type"}, + {88, "ECANCELED", "operation canceled"}, + {89, "EIDRM", "identifier removed"}, + {90, "ENOMSG", "no message of desired type"}, + {91, "ENOTSUP", "not supported"}, + {92, "EBADMSG", "bad message"}, + {93, "ENOTRECOVERABLE", "state not recoverable"}, + {94, "EOWNERDEAD", "previous owner died"}, + {95, "ELAST", "protocol error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGABRT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGTHR", "thread AST"}, +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go index 79f6e0566e..4a9e99a0e1 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go @@ -83,6 +83,8 @@ int lstat(uintptr_t, uintptr_t); int pause(); int pread64(int, uintptr_t, size_t, long long); int pwrite64(int, uintptr_t, size_t, long long); +#define c_select select +int select(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t); int pselect(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); int setregid(int, int); int setreuid(int, int); @@ -103,8 +105,8 @@ int getpeername(int, uintptr_t, uintptr_t); int getsockname(int, uintptr_t, uintptr_t); int recvfrom(int, uintptr_t, size_t, int, uintptr_t, uintptr_t); int sendto(int, uintptr_t, size_t, int, uintptr_t, uintptr_t); -int recvmsg(int, uintptr_t, int); -int sendmsg(int, uintptr_t, int); +int nrecvmsg(int, uintptr_t, int); +int nsendmsg(int, uintptr_t, int); int munmap(uintptr_t, uintptr_t); int madvise(uintptr_t, size_t, int); int mprotect(uintptr_t, size_t, int); @@ -118,6 +120,8 @@ int poll(uintptr_t, int, int); int gettimeofday(uintptr_t, uintptr_t); int time(uintptr_t); int utime(uintptr_t, uintptr_t); +unsigned long long getsystemcfg(int); +int umount(uintptr_t); int getrlimit64(int, uintptr_t); int setrlimit64(int, uintptr_t); long long lseek64(int, long long, int); @@ -1004,6 +1008,17 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, er := C.c_select(C.int(nfd), C.uintptr_t(uintptr(unsafe.Pointer(r))), C.uintptr_t(uintptr(unsafe.Pointer(w))), C.uintptr_t(uintptr(unsafe.Pointer(e))), C.uintptr_t(uintptr(unsafe.Pointer(timeout)))) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { r0, er := C.pselect(C.int(nfd), C.uintptr_t(uintptr(unsafe.Pointer(r))), C.uintptr_t(uintptr(unsafe.Pointer(w))), C.uintptr_t(uintptr(unsafe.Pointer(e))), C.uintptr_t(uintptr(unsafe.Pointer(timeout))), C.uintptr_t(uintptr(unsafe.Pointer(sigmask)))) n = int(r0) @@ -1225,7 +1240,7 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, er := C.recvmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags)) + r0, er := C.nrecvmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags)) n = int(r0) if r0 == -1 && er != nil { err = er @@ -1236,7 +1251,7 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, er := C.sendmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags)) + r0, er := C.nsendmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags)) n = int(r0) if r0 == -1 && er != nil { err = er @@ -1409,6 +1424,25 @@ func Utime(path string, buf *Utimbuf) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Getsystemcfg(label int) (n uint64) { + r0, _ := C.getsystemcfg(C.int(label)) + n = uint64(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func umount(target string) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(target))) + r0, er := C.umount(C.uintptr_t(_p0)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Getrlimit(resource int, rlim *Rlimit) (err error) { r0, er := C.getrlimit64(C.int(resource), C.uintptr_t(uintptr(unsafe.Pointer(rlim)))) if r0 == -1 && er != nil { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go index e645a05cbe..c3371ddc2f 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go @@ -960,6 +960,17 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, e1 := callselect(nfd, uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { r0, e1 := callpselect(nfd, uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) n = int(r0) @@ -1189,7 +1200,7 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, e1 := callrecvmsg(s, uintptr(unsafe.Pointer(msg)), flags) + r0, e1 := callnrecvmsg(s, uintptr(unsafe.Pointer(msg)), flags) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1200,7 +1211,7 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, e1 := callsendmsg(s, uintptr(unsafe.Pointer(msg)), flags) + r0, e1 := callnsendmsg(s, uintptr(unsafe.Pointer(msg)), flags) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1367,6 +1378,29 @@ func Utime(path string, buf *Utimbuf) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Getsystemcfg(label int) (n uint64) { + r0, _ := callgetsystemcfg(label) + n = uint64(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func umount(target string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, e1 := callumount(uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Getrlimit(resource int, rlim *Rlimit) (err error) { _, e1 := callgetrlimit(resource, uintptr(unsafe.Pointer(rlim))) if e1 != 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go index 0b8eb72102..4eda723234 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go @@ -85,6 +85,7 @@ import ( //go:cgo_import_dynamic libc_pause pause "libc.a/shr_64.o" //go:cgo_import_dynamic libc_pread64 pread64 "libc.a/shr_64.o" //go:cgo_import_dynamic libc_pwrite64 pwrite64 "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_select select "libc.a/shr_64.o" //go:cgo_import_dynamic libc_pselect pselect "libc.a/shr_64.o" //go:cgo_import_dynamic libc_setregid setregid "libc.a/shr_64.o" //go:cgo_import_dynamic libc_setreuid setreuid "libc.a/shr_64.o" @@ -105,8 +106,8 @@ import ( //go:cgo_import_dynamic libc_getsockname getsockname "libc.a/shr_64.o" //go:cgo_import_dynamic libc_recvfrom recvfrom "libc.a/shr_64.o" //go:cgo_import_dynamic libc_sendto sendto "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_recvmsg recvmsg "libc.a/shr_64.o" -//go:cgo_import_dynamic libc_sendmsg sendmsg "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_nrecvmsg nrecvmsg "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_nsendmsg nsendmsg "libc.a/shr_64.o" //go:cgo_import_dynamic libc_munmap munmap "libc.a/shr_64.o" //go:cgo_import_dynamic libc_madvise madvise "libc.a/shr_64.o" //go:cgo_import_dynamic libc_mprotect mprotect "libc.a/shr_64.o" @@ -120,6 +121,8 @@ import ( //go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.a/shr_64.o" //go:cgo_import_dynamic libc_time time "libc.a/shr_64.o" //go:cgo_import_dynamic libc_utime utime "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getsystemcfg getsystemcfg "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_umount umount "libc.a/shr_64.o" //go:cgo_import_dynamic libc_getrlimit getrlimit "libc.a/shr_64.o" //go:cgo_import_dynamic libc_setrlimit setrlimit "libc.a/shr_64.o" //go:cgo_import_dynamic libc_lseek lseek "libc.a/shr_64.o" @@ -200,6 +203,7 @@ import ( //go:linkname libc_pause libc_pause //go:linkname libc_pread64 libc_pread64 //go:linkname libc_pwrite64 libc_pwrite64 +//go:linkname libc_select libc_select //go:linkname libc_pselect libc_pselect //go:linkname libc_setregid libc_setregid //go:linkname libc_setreuid libc_setreuid @@ -220,8 +224,8 @@ import ( //go:linkname libc_getsockname libc_getsockname //go:linkname libc_recvfrom libc_recvfrom //go:linkname libc_sendto libc_sendto -//go:linkname libc_recvmsg libc_recvmsg -//go:linkname libc_sendmsg libc_sendmsg +//go:linkname libc_nrecvmsg libc_nrecvmsg +//go:linkname libc_nsendmsg libc_nsendmsg //go:linkname libc_munmap libc_munmap //go:linkname libc_madvise libc_madvise //go:linkname libc_mprotect libc_mprotect @@ -235,6 +239,8 @@ import ( //go:linkname libc_gettimeofday libc_gettimeofday //go:linkname libc_time libc_time //go:linkname libc_utime libc_utime +//go:linkname libc_getsystemcfg libc_getsystemcfg +//go:linkname libc_umount libc_umount //go:linkname libc_getrlimit libc_getrlimit //go:linkname libc_setrlimit libc_setrlimit //go:linkname libc_lseek libc_lseek @@ -318,6 +324,7 @@ var ( libc_pause, libc_pread64, libc_pwrite64, + libc_select, libc_pselect, libc_setregid, libc_setreuid, @@ -338,8 +345,8 @@ var ( libc_getsockname, libc_recvfrom, libc_sendto, - libc_recvmsg, - libc_sendmsg, + libc_nrecvmsg, + libc_nsendmsg, libc_munmap, libc_madvise, libc_mprotect, @@ -353,6 +360,8 @@ var ( libc_gettimeofday, libc_time, libc_utime, + libc_getsystemcfg, + libc_umount, libc_getrlimit, libc_setrlimit, libc_lseek, @@ -890,6 +899,13 @@ func callpwrite64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func callselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_select)), 5, uintptr(nfd), r, w, e, timeout, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func callpselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr, sigmask uintptr) (r1 uintptr, e1 Errno) { r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pselect)), 6, uintptr(nfd), r, w, e, timeout, sigmask) return @@ -1030,15 +1046,15 @@ func callsendto(s int, _p0 uintptr, _lenp0 int, flags int, to uintptr, addrlen u // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func callrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_recvmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0) +func callnrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nrecvmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0) return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func callsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) { - r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sendmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0) +func callnsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nsendmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0) return } @@ -1135,6 +1151,20 @@ func callutime(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func callgetsystemcfg(label int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsystemcfg)), 1, uintptr(label), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callumount(_p0 uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_umount)), 1, _p0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getrlimit)), 2, uintptr(resource), rlim, 0, 0, 0, 0) return diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go index e88a442787..e5c4cbdd6c 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go @@ -83,6 +83,8 @@ int lstat(uintptr_t, uintptr_t); int pause(); int pread64(int, uintptr_t, size_t, long long); int pwrite64(int, uintptr_t, size_t, long long); +#define c_select select +int select(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t); int pselect(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); int setregid(int, int); int setreuid(int, int); @@ -103,8 +105,8 @@ int getpeername(int, uintptr_t, uintptr_t); int getsockname(int, uintptr_t, uintptr_t); int recvfrom(int, uintptr_t, size_t, int, uintptr_t, uintptr_t); int sendto(int, uintptr_t, size_t, int, uintptr_t, uintptr_t); -int recvmsg(int, uintptr_t, int); -int sendmsg(int, uintptr_t, int); +int nrecvmsg(int, uintptr_t, int); +int nsendmsg(int, uintptr_t, int); int munmap(uintptr_t, uintptr_t); int madvise(uintptr_t, size_t, int); int mprotect(uintptr_t, size_t, int); @@ -118,6 +120,8 @@ int poll(uintptr_t, int, int); int gettimeofday(uintptr_t, uintptr_t); int time(uintptr_t); int utime(uintptr_t, uintptr_t); +unsigned long long getsystemcfg(int); +int umount(uintptr_t); int getrlimit(int, uintptr_t); int setrlimit(int, uintptr_t); long long lseek(int, long long, int); @@ -731,6 +735,14 @@ func callpwrite64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func callselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.c_select(C.int(nfd), C.uintptr_t(r), C.uintptr_t(w), C.uintptr_t(e), C.uintptr_t(timeout))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func callpselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr, sigmask uintptr) (r1 uintptr, e1 Errno) { r1 = uintptr(C.pselect(C.int(nfd), C.uintptr_t(r), C.uintptr_t(w), C.uintptr_t(e), C.uintptr_t(timeout), C.uintptr_t(sigmask))) e1 = syscall.GetErrno() @@ -891,16 +903,16 @@ func callsendto(s int, _p0 uintptr, _lenp0 int, flags int, to uintptr, addrlen u // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func callrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.recvmsg(C.int(s), C.uintptr_t(msg), C.int(flags))) +func callnrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.nrecvmsg(C.int(s), C.uintptr_t(msg), C.int(flags))) e1 = syscall.GetErrno() return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func callsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) { - r1 = uintptr(C.sendmsg(C.int(s), C.uintptr_t(msg), C.int(flags))) +func callnsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.nsendmsg(C.int(s), C.uintptr_t(msg), C.int(flags))) e1 = syscall.GetErrno() return } @@ -1011,6 +1023,22 @@ func callutime(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func callgetsystemcfg(label int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getsystemcfg(C.int(label))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callumount(_p0 uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.umount(C.uintptr_t(_p0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { r1 = uintptr(C.getrlimit(C.int(resource), C.uintptr_t(rlim))) e1 = syscall.GetErrno() diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go index c8b451000b..feb3c03933 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go @@ -14,6 +14,27 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) { + r0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1658,6 +1679,32 @@ func faccessat(dirfd int, path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func pipe(p *[2]_C_int) (err error) { _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) if e1 != 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go index 2aac3184bc..fa0cb252a9 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go @@ -14,6 +14,27 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) { + r0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1658,6 +1679,32 @@ func faccessat(dirfd int, path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Dup2(oldfd int, newfd int) (err error) { _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) if e1 != 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go index 13c06c2815..daec1d5d2c 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go @@ -14,6 +14,27 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) { + r0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1658,6 +1679,42 @@ func faccessat(dirfd int, path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func pipe2(p *[2]_C_int, flags int) (err error) { _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) if e1 != 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go index 737fa8d181..ad9820b598 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go @@ -14,6 +14,27 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) { + r0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1658,6 +1679,32 @@ func faccessat(dirfd int, path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { var _p0 unsafe.Pointer if len(events) > 0 { @@ -2206,3 +2253,18 @@ func pipe2(p *[2]_C_int, flags int) (err error) { } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(cmdline) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go index 0a85f3f8db..c82ce7d299 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go @@ -14,6 +14,27 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) { + r0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask>>32), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1658,6 +1679,32 @@ func faccessat(dirfd int, path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Dup2(oldfd int, newfd int) (err error) { _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) if e1 != 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go index ec7007e781..d1b77c1934 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go @@ -14,6 +14,27 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) { + r0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1658,6 +1679,32 @@ func faccessat(dirfd int, path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Dup2(oldfd int, newfd int) (err error) { _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) if e1 != 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go index c5bb25d964..b8e45f98c7 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go @@ -14,6 +14,27 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) { + r0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1658,6 +1679,32 @@ func faccessat(dirfd int, path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Dup2(oldfd int, newfd int) (err error) { _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) if e1 != 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go index 26ada0478f..e26c748d4e 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go @@ -14,6 +14,27 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) { + r0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1658,6 +1679,32 @@ func faccessat(dirfd int, path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Dup2(oldfd int, newfd int) (err error) { _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) if e1 != 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go index 2da9cb700a..0a958ca0b3 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go @@ -14,6 +14,27 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) { + r0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1658,6 +1679,32 @@ func faccessat(dirfd int, path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Dup2(oldfd int, newfd int) (err error) { _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) if e1 != 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go index 772733d83f..658f361e77 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go @@ -14,6 +14,27 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) { + r0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1658,6 +1679,32 @@ func faccessat(dirfd int, path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Dup2(oldfd int, newfd int) (err error) { _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) if e1 != 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go index 996eba517a..daff300399 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go @@ -14,6 +14,27 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) { + r0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1658,6 +1679,32 @@ func faccessat(dirfd int, path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { var _p0 unsafe.Pointer if len(events) > 0 { @@ -2186,3 +2233,18 @@ func pipe2(p *[2]_C_int, flags int) (err error) { } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(cmdline) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go index cb9072a33a..caf6ea8663 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go @@ -14,6 +14,27 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) { + r0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1658,6 +1679,32 @@ func faccessat(dirfd int, path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Dup2(oldfd int, newfd int) (err error) { _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) if e1 != 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go index 5e48a1001b..369a04b57d 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go @@ -14,6 +14,27 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) { + r0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func fchmodat(dirfd int, path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1658,6 +1679,32 @@ func faccessat(dirfd int, path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { var _p0 unsafe.Pointer if len(events) > 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go new file mode 100644 index 0000000000..eb58990461 --- /dev/null +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go @@ -0,0 +1,1692 @@ +// go run mksyscall.go -openbsd -tags openbsd,arm64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build openbsd,arm64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrtable() (rtable int, err error) { + r0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0) + rtable = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifoat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrtable(rtable int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go index b005031abe..37dcc74c2d 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go @@ -1,6 +1,8 @@ // mksysctl_openbsd.pl // Code generated by the command above; DO NOT EDIT. +// +build 386,openbsd + package unix type mibentry struct { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go index d014451c9d..fe6caa6eb7 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go @@ -1,4 +1,4 @@ -// mksysctl_openbsd.pl +// go run mksysctl_openbsd.go // Code generated by the command above; DO NOT EDIT. // +build amd64,openbsd diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go index b005031abe..6eb8c0b086 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go @@ -1,6 +1,8 @@ -// mksysctl_openbsd.pl +// go run mksysctl_openbsd.go // Code generated by the command above; DO NOT EDIT. +// +build arm,openbsd + package unix type mibentry struct { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go new file mode 100644 index 0000000000..ba4304fd23 --- /dev/null +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go @@ -0,0 +1,275 @@ +// go run mksysctl_openbsd.go +// Code generated by the command above; DO NOT EDIT. + +// +build arm64,openbsd + +package unix + +type mibentry struct { + ctlname string + ctloid []_C_int +} + +var sysctlMib = []mibentry{ + {"ddb.console", []_C_int{9, 6}}, + {"ddb.log", []_C_int{9, 7}}, + {"ddb.max_line", []_C_int{9, 3}}, + {"ddb.max_width", []_C_int{9, 2}}, + {"ddb.panic", []_C_int{9, 5}}, + {"ddb.profile", []_C_int{9, 9}}, + {"ddb.radix", []_C_int{9, 1}}, + {"ddb.tab_stop_width", []_C_int{9, 4}}, + {"ddb.trigger", []_C_int{9, 8}}, + {"fs.posix.setuid", []_C_int{3, 1, 1}}, + {"hw.allowpowerdown", []_C_int{6, 22}}, + {"hw.byteorder", []_C_int{6, 4}}, + {"hw.cpuspeed", []_C_int{6, 12}}, + {"hw.diskcount", []_C_int{6, 10}}, + {"hw.disknames", []_C_int{6, 8}}, + {"hw.diskstats", []_C_int{6, 9}}, + {"hw.machine", []_C_int{6, 1}}, + {"hw.model", []_C_int{6, 2}}, + {"hw.ncpu", []_C_int{6, 3}}, + {"hw.ncpufound", []_C_int{6, 21}}, + {"hw.ncpuonline", []_C_int{6, 25}}, + {"hw.pagesize", []_C_int{6, 7}}, + {"hw.perfpolicy", []_C_int{6, 23}}, + {"hw.physmem", []_C_int{6, 19}}, + {"hw.product", []_C_int{6, 15}}, + {"hw.serialno", []_C_int{6, 17}}, + {"hw.setperf", []_C_int{6, 13}}, + {"hw.smt", []_C_int{6, 24}}, + {"hw.usermem", []_C_int{6, 20}}, + {"hw.uuid", []_C_int{6, 18}}, + {"hw.vendor", []_C_int{6, 14}}, + {"hw.version", []_C_int{6, 16}}, + {"kern.allowkmem", []_C_int{1, 52}}, + {"kern.argmax", []_C_int{1, 8}}, + {"kern.audio", []_C_int{1, 84}}, + {"kern.boottime", []_C_int{1, 21}}, + {"kern.bufcachepercent", []_C_int{1, 72}}, + {"kern.ccpu", []_C_int{1, 45}}, + {"kern.clockrate", []_C_int{1, 12}}, + {"kern.consdev", []_C_int{1, 75}}, + {"kern.cp_time", []_C_int{1, 40}}, + {"kern.cp_time2", []_C_int{1, 71}}, + {"kern.cpustats", []_C_int{1, 85}}, + {"kern.domainname", []_C_int{1, 22}}, + {"kern.file", []_C_int{1, 73}}, + {"kern.forkstat", []_C_int{1, 42}}, + {"kern.fscale", []_C_int{1, 46}}, + {"kern.fsync", []_C_int{1, 33}}, + {"kern.global_ptrace", []_C_int{1, 81}}, + {"kern.hostid", []_C_int{1, 11}}, + {"kern.hostname", []_C_int{1, 10}}, + {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, + {"kern.job_control", []_C_int{1, 19}}, + {"kern.malloc.buckets", []_C_int{1, 39, 1}}, + {"kern.malloc.kmemnames", []_C_int{1, 39, 3}}, + {"kern.maxclusters", []_C_int{1, 67}}, + {"kern.maxfiles", []_C_int{1, 7}}, + {"kern.maxlocksperuid", []_C_int{1, 70}}, + {"kern.maxpartitions", []_C_int{1, 23}}, + {"kern.maxproc", []_C_int{1, 6}}, + {"kern.maxthread", []_C_int{1, 25}}, + {"kern.maxvnodes", []_C_int{1, 5}}, + {"kern.mbstat", []_C_int{1, 59}}, + {"kern.msgbuf", []_C_int{1, 48}}, + {"kern.msgbufsize", []_C_int{1, 38}}, + {"kern.nchstats", []_C_int{1, 41}}, + {"kern.netlivelocks", []_C_int{1, 76}}, + {"kern.nfiles", []_C_int{1, 56}}, + {"kern.ngroups", []_C_int{1, 18}}, + {"kern.nosuidcoredump", []_C_int{1, 32}}, + {"kern.nprocs", []_C_int{1, 47}}, + {"kern.nselcoll", []_C_int{1, 43}}, + {"kern.nthreads", []_C_int{1, 26}}, + {"kern.numvnodes", []_C_int{1, 58}}, + {"kern.osrelease", []_C_int{1, 2}}, + {"kern.osrevision", []_C_int{1, 3}}, + {"kern.ostype", []_C_int{1, 1}}, + {"kern.osversion", []_C_int{1, 27}}, + {"kern.pool_debug", []_C_int{1, 77}}, + {"kern.posix1version", []_C_int{1, 17}}, + {"kern.proc", []_C_int{1, 66}}, + {"kern.rawpartition", []_C_int{1, 24}}, + {"kern.saved_ids", []_C_int{1, 20}}, + {"kern.securelevel", []_C_int{1, 9}}, + {"kern.seminfo", []_C_int{1, 61}}, + {"kern.shminfo", []_C_int{1, 62}}, + {"kern.somaxconn", []_C_int{1, 28}}, + {"kern.sominconn", []_C_int{1, 29}}, + {"kern.splassert", []_C_int{1, 54}}, + {"kern.stackgap_random", []_C_int{1, 50}}, + {"kern.sysvipc_info", []_C_int{1, 51}}, + {"kern.sysvmsg", []_C_int{1, 34}}, + {"kern.sysvsem", []_C_int{1, 35}}, + {"kern.sysvshm", []_C_int{1, 36}}, + {"kern.timecounter.choice", []_C_int{1, 69, 4}}, + {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, + {"kern.timecounter.tick", []_C_int{1, 69, 1}}, + {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, + {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, + {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, + {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, + {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, + {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, + {"kern.ttycount", []_C_int{1, 57}}, + {"kern.version", []_C_int{1, 4}}, + {"kern.watchdog.auto", []_C_int{1, 64, 2}}, + {"kern.watchdog.period", []_C_int{1, 64, 1}}, + {"kern.witnesswatch", []_C_int{1, 53}}, + {"kern.wxabort", []_C_int{1, 74}}, + {"net.bpf.bufsize", []_C_int{4, 31, 1}}, + {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, + {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, + {"net.inet.ah.stats", []_C_int{4, 2, 51, 2}}, + {"net.inet.carp.allow", []_C_int{4, 2, 112, 1}}, + {"net.inet.carp.log", []_C_int{4, 2, 112, 3}}, + {"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}}, + {"net.inet.carp.stats", []_C_int{4, 2, 112, 4}}, + {"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}}, + {"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}}, + {"net.inet.divert.stats", []_C_int{4, 2, 258, 3}}, + {"net.inet.esp.enable", []_C_int{4, 2, 50, 1}}, + {"net.inet.esp.stats", []_C_int{4, 2, 50, 4}}, + {"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}}, + {"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}}, + {"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}}, + {"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}}, + {"net.inet.gre.allow", []_C_int{4, 2, 47, 1}}, + {"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}}, + {"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}}, + {"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}}, + {"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}}, + {"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}}, + {"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}}, + {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, + {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, + {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, + {"net.inet.ip.arpdown", []_C_int{4, 2, 0, 40}}, + {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, + {"net.inet.ip.arptimeout", []_C_int{4, 2, 0, 39}}, + {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, + {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, + {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, + {"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}}, + {"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}}, + {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, + {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, + {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, + {"net.inet.ip.mrtmfc", []_C_int{4, 2, 0, 37}}, + {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, + {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, + {"net.inet.ip.mrtvif", []_C_int{4, 2, 0, 38}}, + {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, + {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, + {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, + {"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}}, + {"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}}, + {"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}}, + {"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}}, + {"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}}, + {"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}}, + {"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}}, + {"net.inet.ip.stats", []_C_int{4, 2, 0, 33}}, + {"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}}, + {"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}}, + {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, + {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, + {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, + {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, + {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, + {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, + {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, + {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, + {"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}}, + {"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}}, + {"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}}, + {"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}}, + {"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}}, + {"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}}, + {"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}}, + {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, + {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, + {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, + {"net.inet.tcp.rootonly", []_C_int{4, 2, 6, 24}}, + {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, + {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, + {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, + {"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}}, + {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, + {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, + {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, + {"net.inet.tcp.synhashsize", []_C_int{4, 2, 6, 25}}, + {"net.inet.tcp.synuselimit", []_C_int{4, 2, 6, 23}}, + {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, + {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, + {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, + {"net.inet.udp.rootonly", []_C_int{4, 2, 17, 6}}, + {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, + {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, + {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, + {"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}}, + {"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}}, + {"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}}, + {"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}}, + {"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}}, + {"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}}, + {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, + {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, + {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, + {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, + {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, + {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, + {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, + {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, + {"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}}, + {"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}}, + {"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}}, + {"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}}, + {"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}}, + {"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}}, + {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, + {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, + {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, + {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, + {"net.inet6.ip6.mrtmfc", []_C_int{4, 24, 17, 53}}, + {"net.inet6.ip6.mrtmif", []_C_int{4, 24, 17, 52}}, + {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, + {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, + {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, + {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, + {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, + {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, + {"net.inet6.ip6.soiikey", []_C_int{4, 24, 17, 54}}, + {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, + {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, + {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, + {"net.key.sadb_dump", []_C_int{4, 30, 1}}, + {"net.key.spd_dump", []_C_int{4, 30, 2}}, + {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, + {"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}}, + {"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}}, + {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, + {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, + {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, + {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, + {"net.mpls.ttl", []_C_int{4, 33, 2}}, + {"net.pflow.stats", []_C_int{4, 34, 1}}, + {"net.pipex.enable", []_C_int{4, 35, 1}}, + {"vm.anonmin", []_C_int{2, 7}}, + {"vm.loadavg", []_C_int{2, 2}}, + {"vm.malloc_conf", []_C_int{2, 12}}, + {"vm.maxslp", []_C_int{2, 10}}, + {"vm.nkmempages", []_C_int{2, 6}}, + {"vm.psstrings", []_C_int{2, 3}}, + {"vm.swapencrypt.enable", []_C_int{2, 5, 0}}, + {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}}, + {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}}, + {"vm.uspace", []_C_int{2, 11}}, + {"vm.uvmexp", []_C_int{2, 4}}, + {"vm.vmmeter", []_C_int{2, 1}}, + {"vm.vnodemin", []_C_int{2, 9}}, + {"vm.vtextmin", []_C_int{2, 8}}, +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go index 3206967896..b81d508a73 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -285,4 +285,5 @@ const ( SYS_STATX = 291 SYS_IO_PGETEVENTS = 292 SYS_RSEQ = 293 + SYS_KEXEC_FILE_LOAD = 294 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go index 473c74613f..2c8c46a2fc 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -284,4 +284,5 @@ const ( SYS_STATX = 291 SYS_IO_PGETEVENTS = 292 SYS_RSEQ = 293 + SYS_KEXEC_FILE_LOAD = 294 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go index 93480fcb16..6ed306370a 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go @@ -253,6 +253,7 @@ const ( SYS_TIMER_GETOVERRUN = 264 SYS_TIMER_DELETE = 265 SYS_TIMER_CREATE = 266 + SYS_VSERVER = 267 SYS_IO_SETUP = 268 SYS_IO_DESTROY = 269 SYS_IO_SUBMIT = 270 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go new file mode 100644 index 0000000000..fe2b689b63 --- /dev/null +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go @@ -0,0 +1,217 @@ +// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm64,openbsd + +package unix + +const ( + SYS_EXIT = 1 // { void sys_exit(int rval); } + SYS_FORK = 2 // { int sys_fork(void); } + SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int sys_open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int sys_close(int fd); } + SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); } + SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, size_t psize); } + SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int sys_unlink(const char *path); } + SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_CHDIR = 12 // { int sys_chdir(const char *path); } + SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } + SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, dev_t dev); } + SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, gid_t gid); } + SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break + SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } + SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, struct rusage *rusage); } + SYS_GETPID = 20 // { pid_t sys_getpid(void); } + SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, int flags, void *data); } + SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t sys_getuid(void); } + SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } + SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); } + SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); } + SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } + SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } + SYS_SYNC = 36 // { void sys_sync(void); } + SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } + SYS_GETPPID = 39 // { pid_t sys_getppid(void); } + SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } + SYS_DUP = 41 // { int sys_dup(int fd); } + SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_GETEGID = 43 // { gid_t sys_getegid(void); } + SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_SIGACTION = 46 // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); } + SYS_GETGID = 47 // { gid_t sys_getgid(void); } + SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } + SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int sys_acct(const char *path); } + SYS_SIGPENDING = 52 // { int sys_sigpending(void); } + SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } + SYS_IOCTL = 54 // { int sys_ioctl(int fd, u_long com, ... void *data); } + SYS_REBOOT = 55 // { int sys_reboot(int opt); } + SYS_REVOKE = 56 // { int sys_revoke(const char *path); } + SYS_SYMLINK = 57 // { int sys_symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int sys_execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } + SYS_CHROOT = 61 // { int sys_chroot(const char *path); } + SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); } + SYS_STATFS = 63 // { int sys_statfs(const char *path, struct statfs *buf); } + SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); } + SYS_VFORK = 66 // { int sys_vfork(void); } + SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); } + SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); } + SYS_SETITIMER = 69 // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 70 // { int sys_getitimer(int which, struct itimerval *itv); } + SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_KEVENT = 72 // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); } + SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, int behav); } + SYS_UTIMES = 76 // { int sys_utimes(const char *path, const struct timeval *tptr); } + SYS_FUTIMES = 77 // { int sys_futimes(int fd, const struct timeval *tptr); } + SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int sys_getpgrp(void); } + SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); } + SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); } + SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); } + SYS_FUTIMENS = 85 // { int sys_futimens(int fd, const struct timespec *times); } + SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); } + SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } + SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } + SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); } + SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); } + SYS_FSYNC = 95 // { int sys_fsync(int fd); } + SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } + SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } + SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } + SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); } + SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); } + SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } + SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } + SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); } + SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, const char *execpromises); } + SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } + SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); } + SYS_UNVEIL = 114 // { int sys_unveil(const char *path, const char *permissions); } + SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); } + SYS_READV = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_KILL = 122 // { int sys_kill(int pid, int signum); } + SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } + SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } + SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); } + SYS_SETSID = 147 // { int sys_setsid(void); } + SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); } + SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } + SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } + SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); } + SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); } + SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } + SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } + SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } + SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } + SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } + SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, off_t length); } + SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } + SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } + SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } + SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } + SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); } + SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } + SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } + SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, int inherit); } + SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_ISSETUGID = 253 // { int sys_issetugid(void); } + SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } + SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } + SYS_PIPE = 263 // { int sys_pipe(int *fdp); } + SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } + SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } + SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); } + SYS_KQUEUE = 269 // { int sys_kqueue(void); } + SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } + SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } + SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } + SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); } + SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } + SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); } + SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); } + SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } + SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); } + SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } + SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); } + SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); } + SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } + SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } + SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, int n); } + SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } + SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); } + SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } + SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); } + SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } + SYS_GETRTABLE = 311 // { int sys_getrtable(void); } + SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); } + SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); } + SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); } + SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); } + SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); } + SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); } + SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); } + SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, int flag); } + SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } + SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } +) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go index f46482d272..904359f69f 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go @@ -103,7 +103,6 @@ type Stat_t struct { Gid uint32 Rdev uint64 Ssize int32 - _ [4]byte Atim StTimespec Mtim StTimespec Ctim StTimespec @@ -205,10 +204,8 @@ type Linger struct { type Msghdr struct { Name *byte Namelen uint32 - _ [4]byte Iov *Iovec Iovlen int32 - _ [4]byte Control *byte Controllen uint32 Flags int32 @@ -339,7 +336,6 @@ type Statfs_t struct { Ffree uint64 Fsid Fsid64_t Vfstype int32 - _ [4]byte Fsize uint64 Vfsnumber int32 Vfsoff int32 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go index 2aeb52a886..cefe2f8eae 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go @@ -487,3 +487,13 @@ type Utsname struct { Version [256]byte Machine [256]byte } + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Tickadj int32 + Stathz int32 + Profhz int32 +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go index 0d0d9f2ccb..c6bb883c39 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go @@ -497,3 +497,13 @@ type Utsname struct { Version [256]byte Machine [256]byte } + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Tickadj int32 + Stathz int32 + Profhz int32 +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go index 04e344b78d..94c23bc2d4 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go @@ -488,3 +488,13 @@ type Utsname struct { Version [256]byte Machine [256]byte } + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Tickadj int32 + Stathz int32 + Profhz int32 +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go index 9fec185c18..c82a930cdc 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go @@ -497,3 +497,13 @@ type Utsname struct { Version [256]byte Machine [256]byte } + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Tickadj int32 + Stathz int32 + Profhz int32 +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_386.go index 18724670a8..06471afa36 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -443,139 +443,181 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_INFO_KIND = 0x1 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_NUM_VF = 0x15 - IFLA_VFINFO_LIST = 0x16 - IFLA_STATS64 = 0x17 - IFLA_VF_PORTS = 0x18 - IFLA_PORT_SELF = 0x19 - IFLA_AF_SPEC = 0x1a - IFLA_GROUP = 0x1b - IFLA_NET_NS_FD = 0x1c - IFLA_EXT_MASK = 0x1d - IFLA_PROMISCUITY = 0x1e - IFLA_NUM_TX_QUEUES = 0x1f - IFLA_NUM_RX_QUEUES = 0x20 - IFLA_CARRIER = 0x21 - IFLA_PHYS_PORT_ID = 0x22 - IFLA_CARRIER_CHANGES = 0x23 - IFLA_PHYS_SWITCH_ID = 0x24 - IFLA_LINK_NETNSID = 0x25 - IFLA_PHYS_PORT_NAME = 0x26 - IFLA_PROTO_DOWN = 0x27 - IFLA_GSO_MAX_SEGS = 0x28 - IFLA_GSO_MAX_SIZE = 0x29 - IFLA_PAD = 0x2a - IFLA_XDP = 0x2b - IFLA_EVENT = 0x2c - IFLA_NEW_NETNSID = 0x2d - IFLA_IF_NETNSID = 0x2e - IFLA_MAX = 0x33 - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTA_MARK = 0x10 - RTA_MFC_STATS = 0x11 - RTA_VIA = 0x12 - RTA_NEWDST = 0x13 - RTA_PREF = 0x14 - RTA_ENCAP_TYPE = 0x15 - RTA_ENCAP = 0x16 - RTA_EXPIRES = 0x17 - RTA_PAD = 0x18 - RTA_UID = 0x19 - RTA_TTL_PROPAGATE = 0x1a - RTA_IP_PROTO = 0x1b - RTA_SPORT = 0x1c - RTA_DPORT = 0x1d - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 - SizeofNdUseroptmsg = 0x10 + NDA_UNSPEC = 0x0 + NDA_DST = 0x1 + NDA_LLADDR = 0x2 + NDA_CACHEINFO = 0x3 + NDA_PROBES = 0x4 + NDA_VLAN = 0x5 + NDA_PORT = 0x6 + NDA_VNI = 0x7 + NDA_IFINDEX = 0x8 + NDA_MASTER = 0x9 + NDA_LINK_NETNSID = 0xa + NDA_SRC_VNI = 0xb + NTF_USE = 0x1 + NTF_SELF = 0x2 + NTF_MASTER = 0x4 + NTF_PROXY = 0x8 + NTF_EXT_LEARNED = 0x10 + NTF_OFFLOADED = 0x20 + NTF_ROUTER = 0x80 + NUD_INCOMPLETE = 0x1 + NUD_REACHABLE = 0x2 + NUD_STALE = 0x4 + NUD_DELAY = 0x8 + NUD_PROBE = 0x10 + NUD_FAILED = 0x20 + NUD_NOARP = 0x40 + NUD_PERMANENT = 0x80 + NUD_NONE = 0x0 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFA_FLAGS = 0x8 + IFA_RT_PRIORITY = 0x9 + IFA_TARGET_NETNSID = 0xa + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_TARGET_NETNSID = 0x2e + IFLA_CARRIER_UP_COUNT = 0x2f + IFLA_CARRIER_DOWN_COUNT = 0x30 + IFLA_NEW_IFINDEX = 0x31 + IFLA_MIN_MTU = 0x32 + IFLA_MAX_MTU = 0x33 + IFLA_MAX = 0x33 + IFLA_INFO_KIND = 0x1 + IFLA_INFO_DATA = 0x2 + IFLA_INFO_XSTATS = 0x3 + IFLA_INFO_SLAVE_KIND = 0x4 + IFLA_INFO_SLAVE_DATA = 0x5 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 + SizeofNdUseroptmsg = 0x10 + SizeofNdMsg = 0xc ) type NlMsghdr struct { @@ -652,6 +694,16 @@ type NdUseroptmsg struct { Pad3 uint32 } +type NdMsg struct { + Family uint8 + Pad1 uint8 + Pad2 uint16 + Ifindex int32 + State uint16 + Flags uint8 + Type uint8 +} + const ( SizeofSockFilter = 0x8 SizeofSockFprog = 0x8 @@ -973,7 +1025,8 @@ type PerfEventAttr struct { Clockid int32 Sample_regs_intr uint64 Aux_watermark uint32 - _ uint32 + Sample_max_stack uint16 + _ uint16 } type PerfEventMmapPage struct { @@ -1076,6 +1129,7 @@ const ( PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 PERF_COUNT_SW_EMULATION_FAULTS = 0x8 PERF_COUNT_SW_DUMMY = 0x9 + PERF_COUNT_SW_BPF_OUTPUT = 0xa PERF_SAMPLE_IP = 0x1 PERF_SAMPLE_TID = 0x2 @@ -1097,21 +1151,38 @@ const ( PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + PERF_SAMPLE_BRANCH_ABORT_TX = 0x80 + PERF_SAMPLE_BRANCH_IN_TX = 0x100 + PERF_SAMPLE_BRANCH_NO_TX = 0x200 + PERF_SAMPLE_BRANCH_COND = 0x400 + PERF_SAMPLE_BRANCH_CALL_STACK = 0x800 + PERF_SAMPLE_BRANCH_IND_JUMP = 0x1000 + PERF_SAMPLE_BRANCH_CALL = 0x2000 + PERF_SAMPLE_BRANCH_NO_FLAGS = 0x4000 + PERF_SAMPLE_BRANCH_NO_CYCLES = 0x8000 + PERF_SAMPLE_BRANCH_TYPE_SAVE = 0x10000 PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 PERF_FORMAT_ID = 0x4 PERF_FORMAT_GROUP = 0x8 - PERF_RECORD_MMAP = 0x1 - PERF_RECORD_LOST = 0x2 - PERF_RECORD_COMM = 0x3 - PERF_RECORD_EXIT = 0x4 - PERF_RECORD_THROTTLE = 0x5 - PERF_RECORD_UNTHROTTLE = 0x6 - PERF_RECORD_FORK = 0x7 - PERF_RECORD_READ = 0x8 - PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP2 = 0xa + PERF_RECORD_AUX = 0xb + PERF_RECORD_ITRACE_START = 0xc + PERF_RECORD_LOST_SAMPLES = 0xd + PERF_RECORD_SWITCH = 0xe + PERF_RECORD_SWITCH_CPU_WIDE = 0xf + PERF_RECORD_NAMESPACES = 0x10 PERF_CONTEXT_HV = -0x20 PERF_CONTEXT_KERNEL = -0x80 @@ -1124,6 +1195,7 @@ const ( PERF_FLAG_FD_NO_GROUP = 0x1 PERF_FLAG_FD_OUTPUT = 0x2 PERF_FLAG_PID_CGROUP = 0x4 + PERF_FLAG_FD_CLOEXEC = 0x8 ) const ( @@ -1380,6 +1452,21 @@ type TpacketBlockDesc struct { Hdr [40]byte } +type TpacketBDTS struct { + Sec uint32 + Usec uint32 +} + +type TpacketHdrV1 struct { + Block_status uint32 + Num_pkts uint32 + Offset_to_first_pkt uint32 + Blk_len uint32 + Seq_num uint64 + Ts_first_pkt TpacketBDTS + Ts_last_pkt TpacketBDTS +} + type TpacketReq struct { Block_size uint32 Block_nr uint32 @@ -1428,6 +1515,9 @@ const ( SizeofTpacketHdr = 0x18 SizeofTpacket2Hdr = 0x20 SizeofTpacket3Hdr = 0x30 + + SizeofTpacketStats = 0x8 + SizeofTpacketStatsV3 = 0xc ) const ( @@ -2043,3 +2133,183 @@ type SockExtendedErr struct { Info uint32 Data uint32 } + +type FanotifyEventMetadata struct { + Event_len uint32 + Vers uint8 + Reserved uint8 + Metadata_len uint16 + Mask uint64 + Fd int32 + Pid int32 +} + +type FanotifyResponse struct { + Fd int32 + Response uint32 +} + +const ( + CRYPTO_MSG_BASE = 0x10 + CRYPTO_MSG_NEWALG = 0x10 + CRYPTO_MSG_DELALG = 0x11 + CRYPTO_MSG_UPDATEALG = 0x12 + CRYPTO_MSG_GETALG = 0x13 + CRYPTO_MSG_DELRNG = 0x14 + CRYPTO_MSG_GETSTAT = 0x15 +) + +const ( + CRYPTOCFGA_UNSPEC = 0x0 + CRYPTOCFGA_PRIORITY_VAL = 0x1 + CRYPTOCFGA_REPORT_LARVAL = 0x2 + CRYPTOCFGA_REPORT_HASH = 0x3 + CRYPTOCFGA_REPORT_BLKCIPHER = 0x4 + CRYPTOCFGA_REPORT_AEAD = 0x5 + CRYPTOCFGA_REPORT_COMPRESS = 0x6 + CRYPTOCFGA_REPORT_RNG = 0x7 + CRYPTOCFGA_REPORT_CIPHER = 0x8 + CRYPTOCFGA_REPORT_AKCIPHER = 0x9 + CRYPTOCFGA_REPORT_KPP = 0xa + CRYPTOCFGA_REPORT_ACOMP = 0xb + CRYPTOCFGA_STAT_LARVAL = 0xc + CRYPTOCFGA_STAT_HASH = 0xd + CRYPTOCFGA_STAT_BLKCIPHER = 0xe + CRYPTOCFGA_STAT_AEAD = 0xf + CRYPTOCFGA_STAT_COMPRESS = 0x10 + CRYPTOCFGA_STAT_RNG = 0x11 + CRYPTOCFGA_STAT_CIPHER = 0x12 + CRYPTOCFGA_STAT_AKCIPHER = 0x13 + CRYPTOCFGA_STAT_KPP = 0x14 + CRYPTOCFGA_STAT_ACOMP = 0x15 +) + +type CryptoUserAlg struct { + Name [64]int8 + Driver_name [64]int8 + Module_name [64]int8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]int8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]int8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]int8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]int8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]int8 +} + +type CryptoReportLarval struct { + Type [64]int8 +} + +type CryptoReportHash struct { + Type [64]int8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]int8 +} + +type CryptoReportRNG struct { + Type [64]int8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]int8 +} + +type CryptoReportKPP struct { + Type [64]int8 +} + +type CryptoReportAcomp struct { + Type [64]int8 +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go index 6ddbf0665c..6bba58ed25 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -444,139 +444,181 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_INFO_KIND = 0x1 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_NUM_VF = 0x15 - IFLA_VFINFO_LIST = 0x16 - IFLA_STATS64 = 0x17 - IFLA_VF_PORTS = 0x18 - IFLA_PORT_SELF = 0x19 - IFLA_AF_SPEC = 0x1a - IFLA_GROUP = 0x1b - IFLA_NET_NS_FD = 0x1c - IFLA_EXT_MASK = 0x1d - IFLA_PROMISCUITY = 0x1e - IFLA_NUM_TX_QUEUES = 0x1f - IFLA_NUM_RX_QUEUES = 0x20 - IFLA_CARRIER = 0x21 - IFLA_PHYS_PORT_ID = 0x22 - IFLA_CARRIER_CHANGES = 0x23 - IFLA_PHYS_SWITCH_ID = 0x24 - IFLA_LINK_NETNSID = 0x25 - IFLA_PHYS_PORT_NAME = 0x26 - IFLA_PROTO_DOWN = 0x27 - IFLA_GSO_MAX_SEGS = 0x28 - IFLA_GSO_MAX_SIZE = 0x29 - IFLA_PAD = 0x2a - IFLA_XDP = 0x2b - IFLA_EVENT = 0x2c - IFLA_NEW_NETNSID = 0x2d - IFLA_IF_NETNSID = 0x2e - IFLA_MAX = 0x33 - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTA_MARK = 0x10 - RTA_MFC_STATS = 0x11 - RTA_VIA = 0x12 - RTA_NEWDST = 0x13 - RTA_PREF = 0x14 - RTA_ENCAP_TYPE = 0x15 - RTA_ENCAP = 0x16 - RTA_EXPIRES = 0x17 - RTA_PAD = 0x18 - RTA_UID = 0x19 - RTA_TTL_PROPAGATE = 0x1a - RTA_IP_PROTO = 0x1b - RTA_SPORT = 0x1c - RTA_DPORT = 0x1d - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 - SizeofNdUseroptmsg = 0x10 + NDA_UNSPEC = 0x0 + NDA_DST = 0x1 + NDA_LLADDR = 0x2 + NDA_CACHEINFO = 0x3 + NDA_PROBES = 0x4 + NDA_VLAN = 0x5 + NDA_PORT = 0x6 + NDA_VNI = 0x7 + NDA_IFINDEX = 0x8 + NDA_MASTER = 0x9 + NDA_LINK_NETNSID = 0xa + NDA_SRC_VNI = 0xb + NTF_USE = 0x1 + NTF_SELF = 0x2 + NTF_MASTER = 0x4 + NTF_PROXY = 0x8 + NTF_EXT_LEARNED = 0x10 + NTF_OFFLOADED = 0x20 + NTF_ROUTER = 0x80 + NUD_INCOMPLETE = 0x1 + NUD_REACHABLE = 0x2 + NUD_STALE = 0x4 + NUD_DELAY = 0x8 + NUD_PROBE = 0x10 + NUD_FAILED = 0x20 + NUD_NOARP = 0x40 + NUD_PERMANENT = 0x80 + NUD_NONE = 0x0 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFA_FLAGS = 0x8 + IFA_RT_PRIORITY = 0x9 + IFA_TARGET_NETNSID = 0xa + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_TARGET_NETNSID = 0x2e + IFLA_CARRIER_UP_COUNT = 0x2f + IFLA_CARRIER_DOWN_COUNT = 0x30 + IFLA_NEW_IFINDEX = 0x31 + IFLA_MIN_MTU = 0x32 + IFLA_MAX_MTU = 0x33 + IFLA_MAX = 0x33 + IFLA_INFO_KIND = 0x1 + IFLA_INFO_DATA = 0x2 + IFLA_INFO_XSTATS = 0x3 + IFLA_INFO_SLAVE_KIND = 0x4 + IFLA_INFO_SLAVE_DATA = 0x5 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 + SizeofNdUseroptmsg = 0x10 + SizeofNdMsg = 0xc ) type NlMsghdr struct { @@ -653,6 +695,16 @@ type NdUseroptmsg struct { Pad3 uint32 } +type NdMsg struct { + Family uint8 + Pad1 uint8 + Pad2 uint16 + Ifindex int32 + State uint16 + Flags uint8 + Type uint8 +} + const ( SizeofSockFilter = 0x8 SizeofSockFprog = 0x10 @@ -984,7 +1036,8 @@ type PerfEventAttr struct { Clockid int32 Sample_regs_intr uint64 Aux_watermark uint32 - _ uint32 + Sample_max_stack uint16 + _ uint16 } type PerfEventMmapPage struct { @@ -1087,6 +1140,7 @@ const ( PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 PERF_COUNT_SW_EMULATION_FAULTS = 0x8 PERF_COUNT_SW_DUMMY = 0x9 + PERF_COUNT_SW_BPF_OUTPUT = 0xa PERF_SAMPLE_IP = 0x1 PERF_SAMPLE_TID = 0x2 @@ -1108,21 +1162,38 @@ const ( PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + PERF_SAMPLE_BRANCH_ABORT_TX = 0x80 + PERF_SAMPLE_BRANCH_IN_TX = 0x100 + PERF_SAMPLE_BRANCH_NO_TX = 0x200 + PERF_SAMPLE_BRANCH_COND = 0x400 + PERF_SAMPLE_BRANCH_CALL_STACK = 0x800 + PERF_SAMPLE_BRANCH_IND_JUMP = 0x1000 + PERF_SAMPLE_BRANCH_CALL = 0x2000 + PERF_SAMPLE_BRANCH_NO_FLAGS = 0x4000 + PERF_SAMPLE_BRANCH_NO_CYCLES = 0x8000 + PERF_SAMPLE_BRANCH_TYPE_SAVE = 0x10000 PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 PERF_FORMAT_ID = 0x4 PERF_FORMAT_GROUP = 0x8 - PERF_RECORD_MMAP = 0x1 - PERF_RECORD_LOST = 0x2 - PERF_RECORD_COMM = 0x3 - PERF_RECORD_EXIT = 0x4 - PERF_RECORD_THROTTLE = 0x5 - PERF_RECORD_UNTHROTTLE = 0x6 - PERF_RECORD_FORK = 0x7 - PERF_RECORD_READ = 0x8 - PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP2 = 0xa + PERF_RECORD_AUX = 0xb + PERF_RECORD_ITRACE_START = 0xc + PERF_RECORD_LOST_SAMPLES = 0xd + PERF_RECORD_SWITCH = 0xe + PERF_RECORD_SWITCH_CPU_WIDE = 0xf + PERF_RECORD_NAMESPACES = 0x10 PERF_CONTEXT_HV = -0x20 PERF_CONTEXT_KERNEL = -0x80 @@ -1135,6 +1206,7 @@ const ( PERF_FLAG_FD_NO_GROUP = 0x1 PERF_FLAG_FD_OUTPUT = 0x2 PERF_FLAG_PID_CGROUP = 0x4 + PERF_FLAG_FD_CLOEXEC = 0x8 ) const ( @@ -1392,6 +1464,21 @@ type TpacketBlockDesc struct { Hdr [40]byte } +type TpacketBDTS struct { + Sec uint32 + Usec uint32 +} + +type TpacketHdrV1 struct { + Block_status uint32 + Num_pkts uint32 + Offset_to_first_pkt uint32 + Blk_len uint32 + Seq_num uint64 + Ts_first_pkt TpacketBDTS + Ts_last_pkt TpacketBDTS +} + type TpacketReq struct { Block_size uint32 Block_nr uint32 @@ -1440,6 +1527,9 @@ const ( SizeofTpacketHdr = 0x20 SizeofTpacket2Hdr = 0x20 SizeofTpacket3Hdr = 0x30 + + SizeofTpacketStats = 0x8 + SizeofTpacketStatsV3 = 0xc ) const ( @@ -2056,3 +2146,183 @@ type SockExtendedErr struct { Info uint32 Data uint32 } + +type FanotifyEventMetadata struct { + Event_len uint32 + Vers uint8 + Reserved uint8 + Metadata_len uint16 + Mask uint64 + Fd int32 + Pid int32 +} + +type FanotifyResponse struct { + Fd int32 + Response uint32 +} + +const ( + CRYPTO_MSG_BASE = 0x10 + CRYPTO_MSG_NEWALG = 0x10 + CRYPTO_MSG_DELALG = 0x11 + CRYPTO_MSG_UPDATEALG = 0x12 + CRYPTO_MSG_GETALG = 0x13 + CRYPTO_MSG_DELRNG = 0x14 + CRYPTO_MSG_GETSTAT = 0x15 +) + +const ( + CRYPTOCFGA_UNSPEC = 0x0 + CRYPTOCFGA_PRIORITY_VAL = 0x1 + CRYPTOCFGA_REPORT_LARVAL = 0x2 + CRYPTOCFGA_REPORT_HASH = 0x3 + CRYPTOCFGA_REPORT_BLKCIPHER = 0x4 + CRYPTOCFGA_REPORT_AEAD = 0x5 + CRYPTOCFGA_REPORT_COMPRESS = 0x6 + CRYPTOCFGA_REPORT_RNG = 0x7 + CRYPTOCFGA_REPORT_CIPHER = 0x8 + CRYPTOCFGA_REPORT_AKCIPHER = 0x9 + CRYPTOCFGA_REPORT_KPP = 0xa + CRYPTOCFGA_REPORT_ACOMP = 0xb + CRYPTOCFGA_STAT_LARVAL = 0xc + CRYPTOCFGA_STAT_HASH = 0xd + CRYPTOCFGA_STAT_BLKCIPHER = 0xe + CRYPTOCFGA_STAT_AEAD = 0xf + CRYPTOCFGA_STAT_COMPRESS = 0x10 + CRYPTOCFGA_STAT_RNG = 0x11 + CRYPTOCFGA_STAT_CIPHER = 0x12 + CRYPTOCFGA_STAT_AKCIPHER = 0x13 + CRYPTOCFGA_STAT_KPP = 0x14 + CRYPTOCFGA_STAT_ACOMP = 0x15 +) + +type CryptoUserAlg struct { + Name [64]int8 + Driver_name [64]int8 + Module_name [64]int8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]int8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]int8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]int8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]int8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]int8 +} + +type CryptoReportLarval struct { + Type [64]int8 +} + +type CryptoReportHash struct { + Type [64]int8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]int8 +} + +type CryptoReportRNG struct { + Type [64]int8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]int8 +} + +type CryptoReportKPP struct { + Type [64]int8 +} + +type CryptoReportAcomp struct { + Type [64]int8 +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go index b8e3ec1384..07aa92b29d 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -447,139 +447,181 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_INFO_KIND = 0x1 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_NUM_VF = 0x15 - IFLA_VFINFO_LIST = 0x16 - IFLA_STATS64 = 0x17 - IFLA_VF_PORTS = 0x18 - IFLA_PORT_SELF = 0x19 - IFLA_AF_SPEC = 0x1a - IFLA_GROUP = 0x1b - IFLA_NET_NS_FD = 0x1c - IFLA_EXT_MASK = 0x1d - IFLA_PROMISCUITY = 0x1e - IFLA_NUM_TX_QUEUES = 0x1f - IFLA_NUM_RX_QUEUES = 0x20 - IFLA_CARRIER = 0x21 - IFLA_PHYS_PORT_ID = 0x22 - IFLA_CARRIER_CHANGES = 0x23 - IFLA_PHYS_SWITCH_ID = 0x24 - IFLA_LINK_NETNSID = 0x25 - IFLA_PHYS_PORT_NAME = 0x26 - IFLA_PROTO_DOWN = 0x27 - IFLA_GSO_MAX_SEGS = 0x28 - IFLA_GSO_MAX_SIZE = 0x29 - IFLA_PAD = 0x2a - IFLA_XDP = 0x2b - IFLA_EVENT = 0x2c - IFLA_NEW_NETNSID = 0x2d - IFLA_IF_NETNSID = 0x2e - IFLA_MAX = 0x33 - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTA_MARK = 0x10 - RTA_MFC_STATS = 0x11 - RTA_VIA = 0x12 - RTA_NEWDST = 0x13 - RTA_PREF = 0x14 - RTA_ENCAP_TYPE = 0x15 - RTA_ENCAP = 0x16 - RTA_EXPIRES = 0x17 - RTA_PAD = 0x18 - RTA_UID = 0x19 - RTA_TTL_PROPAGATE = 0x1a - RTA_IP_PROTO = 0x1b - RTA_SPORT = 0x1c - RTA_DPORT = 0x1d - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 - SizeofNdUseroptmsg = 0x10 + NDA_UNSPEC = 0x0 + NDA_DST = 0x1 + NDA_LLADDR = 0x2 + NDA_CACHEINFO = 0x3 + NDA_PROBES = 0x4 + NDA_VLAN = 0x5 + NDA_PORT = 0x6 + NDA_VNI = 0x7 + NDA_IFINDEX = 0x8 + NDA_MASTER = 0x9 + NDA_LINK_NETNSID = 0xa + NDA_SRC_VNI = 0xb + NTF_USE = 0x1 + NTF_SELF = 0x2 + NTF_MASTER = 0x4 + NTF_PROXY = 0x8 + NTF_EXT_LEARNED = 0x10 + NTF_OFFLOADED = 0x20 + NTF_ROUTER = 0x80 + NUD_INCOMPLETE = 0x1 + NUD_REACHABLE = 0x2 + NUD_STALE = 0x4 + NUD_DELAY = 0x8 + NUD_PROBE = 0x10 + NUD_FAILED = 0x20 + NUD_NOARP = 0x40 + NUD_PERMANENT = 0x80 + NUD_NONE = 0x0 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFA_FLAGS = 0x8 + IFA_RT_PRIORITY = 0x9 + IFA_TARGET_NETNSID = 0xa + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_TARGET_NETNSID = 0x2e + IFLA_CARRIER_UP_COUNT = 0x2f + IFLA_CARRIER_DOWN_COUNT = 0x30 + IFLA_NEW_IFINDEX = 0x31 + IFLA_MIN_MTU = 0x32 + IFLA_MAX_MTU = 0x33 + IFLA_MAX = 0x33 + IFLA_INFO_KIND = 0x1 + IFLA_INFO_DATA = 0x2 + IFLA_INFO_XSTATS = 0x3 + IFLA_INFO_SLAVE_KIND = 0x4 + IFLA_INFO_SLAVE_DATA = 0x5 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 + SizeofNdUseroptmsg = 0x10 + SizeofNdMsg = 0xc ) type NlMsghdr struct { @@ -656,6 +698,16 @@ type NdUseroptmsg struct { Pad3 uint32 } +type NdMsg struct { + Family uint8 + Pad1 uint8 + Pad2 uint16 + Ifindex int32 + State uint16 + Flags uint8 + Type uint8 +} + const ( SizeofSockFilter = 0x8 SizeofSockFprog = 0x8 @@ -962,7 +1014,8 @@ type PerfEventAttr struct { Clockid int32 Sample_regs_intr uint64 Aux_watermark uint32 - _ uint32 + Sample_max_stack uint16 + _ uint16 } type PerfEventMmapPage struct { @@ -1065,6 +1118,7 @@ const ( PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 PERF_COUNT_SW_EMULATION_FAULTS = 0x8 PERF_COUNT_SW_DUMMY = 0x9 + PERF_COUNT_SW_BPF_OUTPUT = 0xa PERF_SAMPLE_IP = 0x1 PERF_SAMPLE_TID = 0x2 @@ -1086,21 +1140,38 @@ const ( PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + PERF_SAMPLE_BRANCH_ABORT_TX = 0x80 + PERF_SAMPLE_BRANCH_IN_TX = 0x100 + PERF_SAMPLE_BRANCH_NO_TX = 0x200 + PERF_SAMPLE_BRANCH_COND = 0x400 + PERF_SAMPLE_BRANCH_CALL_STACK = 0x800 + PERF_SAMPLE_BRANCH_IND_JUMP = 0x1000 + PERF_SAMPLE_BRANCH_CALL = 0x2000 + PERF_SAMPLE_BRANCH_NO_FLAGS = 0x4000 + PERF_SAMPLE_BRANCH_NO_CYCLES = 0x8000 + PERF_SAMPLE_BRANCH_TYPE_SAVE = 0x10000 PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 PERF_FORMAT_ID = 0x4 PERF_FORMAT_GROUP = 0x8 - PERF_RECORD_MMAP = 0x1 - PERF_RECORD_LOST = 0x2 - PERF_RECORD_COMM = 0x3 - PERF_RECORD_EXIT = 0x4 - PERF_RECORD_THROTTLE = 0x5 - PERF_RECORD_UNTHROTTLE = 0x6 - PERF_RECORD_FORK = 0x7 - PERF_RECORD_READ = 0x8 - PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP2 = 0xa + PERF_RECORD_AUX = 0xb + PERF_RECORD_ITRACE_START = 0xc + PERF_RECORD_LOST_SAMPLES = 0xd + PERF_RECORD_SWITCH = 0xe + PERF_RECORD_SWITCH_CPU_WIDE = 0xf + PERF_RECORD_NAMESPACES = 0x10 PERF_CONTEXT_HV = -0x20 PERF_CONTEXT_KERNEL = -0x80 @@ -1113,6 +1184,7 @@ const ( PERF_FLAG_FD_NO_GROUP = 0x1 PERF_FLAG_FD_OUTPUT = 0x2 PERF_FLAG_PID_CGROUP = 0x4 + PERF_FLAG_FD_CLOEXEC = 0x8 ) const ( @@ -1370,6 +1442,21 @@ type TpacketBlockDesc struct { Hdr [40]byte } +type TpacketBDTS struct { + Sec uint32 + Usec uint32 +} + +type TpacketHdrV1 struct { + Block_status uint32 + Num_pkts uint32 + Offset_to_first_pkt uint32 + Blk_len uint32 + Seq_num uint64 + Ts_first_pkt TpacketBDTS + Ts_last_pkt TpacketBDTS +} + type TpacketReq struct { Block_size uint32 Block_nr uint32 @@ -1418,6 +1505,9 @@ const ( SizeofTpacketHdr = 0x18 SizeofTpacket2Hdr = 0x20 SizeofTpacket3Hdr = 0x30 + + SizeofTpacketStats = 0x8 + SizeofTpacketStatsV3 = 0xc ) const ( @@ -2034,3 +2124,183 @@ type SockExtendedErr struct { Info uint32 Data uint32 } + +type FanotifyEventMetadata struct { + Event_len uint32 + Vers uint8 + Reserved uint8 + Metadata_len uint16 + Mask uint64 + Fd int32 + Pid int32 +} + +type FanotifyResponse struct { + Fd int32 + Response uint32 +} + +const ( + CRYPTO_MSG_BASE = 0x10 + CRYPTO_MSG_NEWALG = 0x10 + CRYPTO_MSG_DELALG = 0x11 + CRYPTO_MSG_UPDATEALG = 0x12 + CRYPTO_MSG_GETALG = 0x13 + CRYPTO_MSG_DELRNG = 0x14 + CRYPTO_MSG_GETSTAT = 0x15 +) + +const ( + CRYPTOCFGA_UNSPEC = 0x0 + CRYPTOCFGA_PRIORITY_VAL = 0x1 + CRYPTOCFGA_REPORT_LARVAL = 0x2 + CRYPTOCFGA_REPORT_HASH = 0x3 + CRYPTOCFGA_REPORT_BLKCIPHER = 0x4 + CRYPTOCFGA_REPORT_AEAD = 0x5 + CRYPTOCFGA_REPORT_COMPRESS = 0x6 + CRYPTOCFGA_REPORT_RNG = 0x7 + CRYPTOCFGA_REPORT_CIPHER = 0x8 + CRYPTOCFGA_REPORT_AKCIPHER = 0x9 + CRYPTOCFGA_REPORT_KPP = 0xa + CRYPTOCFGA_REPORT_ACOMP = 0xb + CRYPTOCFGA_STAT_LARVAL = 0xc + CRYPTOCFGA_STAT_HASH = 0xd + CRYPTOCFGA_STAT_BLKCIPHER = 0xe + CRYPTOCFGA_STAT_AEAD = 0xf + CRYPTOCFGA_STAT_COMPRESS = 0x10 + CRYPTOCFGA_STAT_RNG = 0x11 + CRYPTOCFGA_STAT_CIPHER = 0x12 + CRYPTOCFGA_STAT_AKCIPHER = 0x13 + CRYPTOCFGA_STAT_KPP = 0x14 + CRYPTOCFGA_STAT_ACOMP = 0x15 +) + +type CryptoUserAlg struct { + Name [64]uint8 + Driver_name [64]uint8 + Module_name [64]uint8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]uint8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]uint8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]uint8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]uint8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]uint8 +} + +type CryptoReportLarval struct { + Type [64]uint8 +} + +type CryptoReportHash struct { + Type [64]uint8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]uint8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]uint8 + Geniv [64]uint8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]uint8 + Geniv [64]uint8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]uint8 +} + +type CryptoReportRNG struct { + Type [64]uint8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]uint8 +} + +type CryptoReportKPP struct { + Type [64]uint8 +} + +type CryptoReportAcomp struct { + Type [64]uint8 +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go index 2f73f0086d..66dba9aab6 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -445,139 +445,181 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_INFO_KIND = 0x1 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_NUM_VF = 0x15 - IFLA_VFINFO_LIST = 0x16 - IFLA_STATS64 = 0x17 - IFLA_VF_PORTS = 0x18 - IFLA_PORT_SELF = 0x19 - IFLA_AF_SPEC = 0x1a - IFLA_GROUP = 0x1b - IFLA_NET_NS_FD = 0x1c - IFLA_EXT_MASK = 0x1d - IFLA_PROMISCUITY = 0x1e - IFLA_NUM_TX_QUEUES = 0x1f - IFLA_NUM_RX_QUEUES = 0x20 - IFLA_CARRIER = 0x21 - IFLA_PHYS_PORT_ID = 0x22 - IFLA_CARRIER_CHANGES = 0x23 - IFLA_PHYS_SWITCH_ID = 0x24 - IFLA_LINK_NETNSID = 0x25 - IFLA_PHYS_PORT_NAME = 0x26 - IFLA_PROTO_DOWN = 0x27 - IFLA_GSO_MAX_SEGS = 0x28 - IFLA_GSO_MAX_SIZE = 0x29 - IFLA_PAD = 0x2a - IFLA_XDP = 0x2b - IFLA_EVENT = 0x2c - IFLA_NEW_NETNSID = 0x2d - IFLA_IF_NETNSID = 0x2e - IFLA_MAX = 0x33 - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTA_MARK = 0x10 - RTA_MFC_STATS = 0x11 - RTA_VIA = 0x12 - RTA_NEWDST = 0x13 - RTA_PREF = 0x14 - RTA_ENCAP_TYPE = 0x15 - RTA_ENCAP = 0x16 - RTA_EXPIRES = 0x17 - RTA_PAD = 0x18 - RTA_UID = 0x19 - RTA_TTL_PROPAGATE = 0x1a - RTA_IP_PROTO = 0x1b - RTA_SPORT = 0x1c - RTA_DPORT = 0x1d - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 - SizeofNdUseroptmsg = 0x10 + NDA_UNSPEC = 0x0 + NDA_DST = 0x1 + NDA_LLADDR = 0x2 + NDA_CACHEINFO = 0x3 + NDA_PROBES = 0x4 + NDA_VLAN = 0x5 + NDA_PORT = 0x6 + NDA_VNI = 0x7 + NDA_IFINDEX = 0x8 + NDA_MASTER = 0x9 + NDA_LINK_NETNSID = 0xa + NDA_SRC_VNI = 0xb + NTF_USE = 0x1 + NTF_SELF = 0x2 + NTF_MASTER = 0x4 + NTF_PROXY = 0x8 + NTF_EXT_LEARNED = 0x10 + NTF_OFFLOADED = 0x20 + NTF_ROUTER = 0x80 + NUD_INCOMPLETE = 0x1 + NUD_REACHABLE = 0x2 + NUD_STALE = 0x4 + NUD_DELAY = 0x8 + NUD_PROBE = 0x10 + NUD_FAILED = 0x20 + NUD_NOARP = 0x40 + NUD_PERMANENT = 0x80 + NUD_NONE = 0x0 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFA_FLAGS = 0x8 + IFA_RT_PRIORITY = 0x9 + IFA_TARGET_NETNSID = 0xa + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_TARGET_NETNSID = 0x2e + IFLA_CARRIER_UP_COUNT = 0x2f + IFLA_CARRIER_DOWN_COUNT = 0x30 + IFLA_NEW_IFINDEX = 0x31 + IFLA_MIN_MTU = 0x32 + IFLA_MAX_MTU = 0x33 + IFLA_MAX = 0x33 + IFLA_INFO_KIND = 0x1 + IFLA_INFO_DATA = 0x2 + IFLA_INFO_XSTATS = 0x3 + IFLA_INFO_SLAVE_KIND = 0x4 + IFLA_INFO_SLAVE_DATA = 0x5 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 + SizeofNdUseroptmsg = 0x10 + SizeofNdMsg = 0xc ) type NlMsghdr struct { @@ -654,6 +696,16 @@ type NdUseroptmsg struct { Pad3 uint32 } +type NdMsg struct { + Family uint8 + Pad1 uint8 + Pad2 uint16 + Ifindex int32 + State uint16 + Flags uint8 + Type uint8 +} + const ( SizeofSockFilter = 0x8 SizeofSockFprog = 0x10 @@ -963,7 +1015,8 @@ type PerfEventAttr struct { Clockid int32 Sample_regs_intr uint64 Aux_watermark uint32 - _ uint32 + Sample_max_stack uint16 + _ uint16 } type PerfEventMmapPage struct { @@ -1066,6 +1119,7 @@ const ( PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 PERF_COUNT_SW_EMULATION_FAULTS = 0x8 PERF_COUNT_SW_DUMMY = 0x9 + PERF_COUNT_SW_BPF_OUTPUT = 0xa PERF_SAMPLE_IP = 0x1 PERF_SAMPLE_TID = 0x2 @@ -1087,21 +1141,38 @@ const ( PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + PERF_SAMPLE_BRANCH_ABORT_TX = 0x80 + PERF_SAMPLE_BRANCH_IN_TX = 0x100 + PERF_SAMPLE_BRANCH_NO_TX = 0x200 + PERF_SAMPLE_BRANCH_COND = 0x400 + PERF_SAMPLE_BRANCH_CALL_STACK = 0x800 + PERF_SAMPLE_BRANCH_IND_JUMP = 0x1000 + PERF_SAMPLE_BRANCH_CALL = 0x2000 + PERF_SAMPLE_BRANCH_NO_FLAGS = 0x4000 + PERF_SAMPLE_BRANCH_NO_CYCLES = 0x8000 + PERF_SAMPLE_BRANCH_TYPE_SAVE = 0x10000 PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 PERF_FORMAT_ID = 0x4 PERF_FORMAT_GROUP = 0x8 - PERF_RECORD_MMAP = 0x1 - PERF_RECORD_LOST = 0x2 - PERF_RECORD_COMM = 0x3 - PERF_RECORD_EXIT = 0x4 - PERF_RECORD_THROTTLE = 0x5 - PERF_RECORD_UNTHROTTLE = 0x6 - PERF_RECORD_FORK = 0x7 - PERF_RECORD_READ = 0x8 - PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP2 = 0xa + PERF_RECORD_AUX = 0xb + PERF_RECORD_ITRACE_START = 0xc + PERF_RECORD_LOST_SAMPLES = 0xd + PERF_RECORD_SWITCH = 0xe + PERF_RECORD_SWITCH_CPU_WIDE = 0xf + PERF_RECORD_NAMESPACES = 0x10 PERF_CONTEXT_HV = -0x20 PERF_CONTEXT_KERNEL = -0x80 @@ -1114,6 +1185,7 @@ const ( PERF_FLAG_FD_NO_GROUP = 0x1 PERF_FLAG_FD_OUTPUT = 0x2 PERF_FLAG_PID_CGROUP = 0x4 + PERF_FLAG_FD_CLOEXEC = 0x8 ) const ( @@ -1371,6 +1443,21 @@ type TpacketBlockDesc struct { Hdr [40]byte } +type TpacketBDTS struct { + Sec uint32 + Usec uint32 +} + +type TpacketHdrV1 struct { + Block_status uint32 + Num_pkts uint32 + Offset_to_first_pkt uint32 + Blk_len uint32 + Seq_num uint64 + Ts_first_pkt TpacketBDTS + Ts_last_pkt TpacketBDTS +} + type TpacketReq struct { Block_size uint32 Block_nr uint32 @@ -1419,6 +1506,9 @@ const ( SizeofTpacketHdr = 0x20 SizeofTpacket2Hdr = 0x20 SizeofTpacket3Hdr = 0x30 + + SizeofTpacketStats = 0x8 + SizeofTpacketStatsV3 = 0xc ) const ( @@ -2035,3 +2125,183 @@ type SockExtendedErr struct { Info uint32 Data uint32 } + +type FanotifyEventMetadata struct { + Event_len uint32 + Vers uint8 + Reserved uint8 + Metadata_len uint16 + Mask uint64 + Fd int32 + Pid int32 +} + +type FanotifyResponse struct { + Fd int32 + Response uint32 +} + +const ( + CRYPTO_MSG_BASE = 0x10 + CRYPTO_MSG_NEWALG = 0x10 + CRYPTO_MSG_DELALG = 0x11 + CRYPTO_MSG_UPDATEALG = 0x12 + CRYPTO_MSG_GETALG = 0x13 + CRYPTO_MSG_DELRNG = 0x14 + CRYPTO_MSG_GETSTAT = 0x15 +) + +const ( + CRYPTOCFGA_UNSPEC = 0x0 + CRYPTOCFGA_PRIORITY_VAL = 0x1 + CRYPTOCFGA_REPORT_LARVAL = 0x2 + CRYPTOCFGA_REPORT_HASH = 0x3 + CRYPTOCFGA_REPORT_BLKCIPHER = 0x4 + CRYPTOCFGA_REPORT_AEAD = 0x5 + CRYPTOCFGA_REPORT_COMPRESS = 0x6 + CRYPTOCFGA_REPORT_RNG = 0x7 + CRYPTOCFGA_REPORT_CIPHER = 0x8 + CRYPTOCFGA_REPORT_AKCIPHER = 0x9 + CRYPTOCFGA_REPORT_KPP = 0xa + CRYPTOCFGA_REPORT_ACOMP = 0xb + CRYPTOCFGA_STAT_LARVAL = 0xc + CRYPTOCFGA_STAT_HASH = 0xd + CRYPTOCFGA_STAT_BLKCIPHER = 0xe + CRYPTOCFGA_STAT_AEAD = 0xf + CRYPTOCFGA_STAT_COMPRESS = 0x10 + CRYPTOCFGA_STAT_RNG = 0x11 + CRYPTOCFGA_STAT_CIPHER = 0x12 + CRYPTOCFGA_STAT_AKCIPHER = 0x13 + CRYPTOCFGA_STAT_KPP = 0x14 + CRYPTOCFGA_STAT_ACOMP = 0x15 +) + +type CryptoUserAlg struct { + Name [64]int8 + Driver_name [64]int8 + Module_name [64]int8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]int8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]int8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]int8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]int8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]int8 +} + +type CryptoReportLarval struct { + Type [64]int8 +} + +type CryptoReportHash struct { + Type [64]int8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]int8 +} + +type CryptoReportRNG struct { + Type [64]int8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]int8 +} + +type CryptoReportKPP struct { + Type [64]int8 +} + +type CryptoReportAcomp struct { + Type [64]int8 +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go index 4a2a18bcb0..b11b77d3ba 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -446,139 +446,181 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_INFO_KIND = 0x1 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_NUM_VF = 0x15 - IFLA_VFINFO_LIST = 0x16 - IFLA_STATS64 = 0x17 - IFLA_VF_PORTS = 0x18 - IFLA_PORT_SELF = 0x19 - IFLA_AF_SPEC = 0x1a - IFLA_GROUP = 0x1b - IFLA_NET_NS_FD = 0x1c - IFLA_EXT_MASK = 0x1d - IFLA_PROMISCUITY = 0x1e - IFLA_NUM_TX_QUEUES = 0x1f - IFLA_NUM_RX_QUEUES = 0x20 - IFLA_CARRIER = 0x21 - IFLA_PHYS_PORT_ID = 0x22 - IFLA_CARRIER_CHANGES = 0x23 - IFLA_PHYS_SWITCH_ID = 0x24 - IFLA_LINK_NETNSID = 0x25 - IFLA_PHYS_PORT_NAME = 0x26 - IFLA_PROTO_DOWN = 0x27 - IFLA_GSO_MAX_SEGS = 0x28 - IFLA_GSO_MAX_SIZE = 0x29 - IFLA_PAD = 0x2a - IFLA_XDP = 0x2b - IFLA_EVENT = 0x2c - IFLA_NEW_NETNSID = 0x2d - IFLA_IF_NETNSID = 0x2e - IFLA_MAX = 0x33 - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTA_MARK = 0x10 - RTA_MFC_STATS = 0x11 - RTA_VIA = 0x12 - RTA_NEWDST = 0x13 - RTA_PREF = 0x14 - RTA_ENCAP_TYPE = 0x15 - RTA_ENCAP = 0x16 - RTA_EXPIRES = 0x17 - RTA_PAD = 0x18 - RTA_UID = 0x19 - RTA_TTL_PROPAGATE = 0x1a - RTA_IP_PROTO = 0x1b - RTA_SPORT = 0x1c - RTA_DPORT = 0x1d - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 - SizeofNdUseroptmsg = 0x10 + NDA_UNSPEC = 0x0 + NDA_DST = 0x1 + NDA_LLADDR = 0x2 + NDA_CACHEINFO = 0x3 + NDA_PROBES = 0x4 + NDA_VLAN = 0x5 + NDA_PORT = 0x6 + NDA_VNI = 0x7 + NDA_IFINDEX = 0x8 + NDA_MASTER = 0x9 + NDA_LINK_NETNSID = 0xa + NDA_SRC_VNI = 0xb + NTF_USE = 0x1 + NTF_SELF = 0x2 + NTF_MASTER = 0x4 + NTF_PROXY = 0x8 + NTF_EXT_LEARNED = 0x10 + NTF_OFFLOADED = 0x20 + NTF_ROUTER = 0x80 + NUD_INCOMPLETE = 0x1 + NUD_REACHABLE = 0x2 + NUD_STALE = 0x4 + NUD_DELAY = 0x8 + NUD_PROBE = 0x10 + NUD_FAILED = 0x20 + NUD_NOARP = 0x40 + NUD_PERMANENT = 0x80 + NUD_NONE = 0x0 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFA_FLAGS = 0x8 + IFA_RT_PRIORITY = 0x9 + IFA_TARGET_NETNSID = 0xa + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_TARGET_NETNSID = 0x2e + IFLA_CARRIER_UP_COUNT = 0x2f + IFLA_CARRIER_DOWN_COUNT = 0x30 + IFLA_NEW_IFINDEX = 0x31 + IFLA_MIN_MTU = 0x32 + IFLA_MAX_MTU = 0x33 + IFLA_MAX = 0x33 + IFLA_INFO_KIND = 0x1 + IFLA_INFO_DATA = 0x2 + IFLA_INFO_XSTATS = 0x3 + IFLA_INFO_SLAVE_KIND = 0x4 + IFLA_INFO_SLAVE_DATA = 0x5 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 + SizeofNdUseroptmsg = 0x10 + SizeofNdMsg = 0xc ) type NlMsghdr struct { @@ -655,6 +697,16 @@ type NdUseroptmsg struct { Pad3 uint32 } +type NdMsg struct { + Family uint8 + Pad1 uint8 + Pad2 uint16 + Ifindex int32 + State uint16 + Flags uint8 + Type uint8 +} + const ( SizeofSockFilter = 0x8 SizeofSockFprog = 0x8 @@ -967,7 +1019,8 @@ type PerfEventAttr struct { Clockid int32 Sample_regs_intr uint64 Aux_watermark uint32 - _ uint32 + Sample_max_stack uint16 + _ uint16 } type PerfEventMmapPage struct { @@ -1070,6 +1123,7 @@ const ( PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 PERF_COUNT_SW_EMULATION_FAULTS = 0x8 PERF_COUNT_SW_DUMMY = 0x9 + PERF_COUNT_SW_BPF_OUTPUT = 0xa PERF_SAMPLE_IP = 0x1 PERF_SAMPLE_TID = 0x2 @@ -1091,21 +1145,38 @@ const ( PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + PERF_SAMPLE_BRANCH_ABORT_TX = 0x80 + PERF_SAMPLE_BRANCH_IN_TX = 0x100 + PERF_SAMPLE_BRANCH_NO_TX = 0x200 + PERF_SAMPLE_BRANCH_COND = 0x400 + PERF_SAMPLE_BRANCH_CALL_STACK = 0x800 + PERF_SAMPLE_BRANCH_IND_JUMP = 0x1000 + PERF_SAMPLE_BRANCH_CALL = 0x2000 + PERF_SAMPLE_BRANCH_NO_FLAGS = 0x4000 + PERF_SAMPLE_BRANCH_NO_CYCLES = 0x8000 + PERF_SAMPLE_BRANCH_TYPE_SAVE = 0x10000 PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 PERF_FORMAT_ID = 0x4 PERF_FORMAT_GROUP = 0x8 - PERF_RECORD_MMAP = 0x1 - PERF_RECORD_LOST = 0x2 - PERF_RECORD_COMM = 0x3 - PERF_RECORD_EXIT = 0x4 - PERF_RECORD_THROTTLE = 0x5 - PERF_RECORD_UNTHROTTLE = 0x6 - PERF_RECORD_FORK = 0x7 - PERF_RECORD_READ = 0x8 - PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP2 = 0xa + PERF_RECORD_AUX = 0xb + PERF_RECORD_ITRACE_START = 0xc + PERF_RECORD_LOST_SAMPLES = 0xd + PERF_RECORD_SWITCH = 0xe + PERF_RECORD_SWITCH_CPU_WIDE = 0xf + PERF_RECORD_NAMESPACES = 0x10 PERF_CONTEXT_HV = -0x20 PERF_CONTEXT_KERNEL = -0x80 @@ -1118,6 +1189,7 @@ const ( PERF_FLAG_FD_NO_GROUP = 0x1 PERF_FLAG_FD_OUTPUT = 0x2 PERF_FLAG_PID_CGROUP = 0x4 + PERF_FLAG_FD_CLOEXEC = 0x8 ) const ( @@ -1376,6 +1448,21 @@ type TpacketBlockDesc struct { Hdr [40]byte } +type TpacketBDTS struct { + Sec uint32 + Usec uint32 +} + +type TpacketHdrV1 struct { + Block_status uint32 + Num_pkts uint32 + Offset_to_first_pkt uint32 + Blk_len uint32 + Seq_num uint64 + Ts_first_pkt TpacketBDTS + Ts_last_pkt TpacketBDTS +} + type TpacketReq struct { Block_size uint32 Block_nr uint32 @@ -1424,6 +1511,9 @@ const ( SizeofTpacketHdr = 0x18 SizeofTpacket2Hdr = 0x20 SizeofTpacket3Hdr = 0x30 + + SizeofTpacketStats = 0x8 + SizeofTpacketStatsV3 = 0xc ) const ( @@ -2040,3 +2130,183 @@ type SockExtendedErr struct { Info uint32 Data uint32 } + +type FanotifyEventMetadata struct { + Event_len uint32 + Vers uint8 + Reserved uint8 + Metadata_len uint16 + Mask uint64 + Fd int32 + Pid int32 +} + +type FanotifyResponse struct { + Fd int32 + Response uint32 +} + +const ( + CRYPTO_MSG_BASE = 0x10 + CRYPTO_MSG_NEWALG = 0x10 + CRYPTO_MSG_DELALG = 0x11 + CRYPTO_MSG_UPDATEALG = 0x12 + CRYPTO_MSG_GETALG = 0x13 + CRYPTO_MSG_DELRNG = 0x14 + CRYPTO_MSG_GETSTAT = 0x15 +) + +const ( + CRYPTOCFGA_UNSPEC = 0x0 + CRYPTOCFGA_PRIORITY_VAL = 0x1 + CRYPTOCFGA_REPORT_LARVAL = 0x2 + CRYPTOCFGA_REPORT_HASH = 0x3 + CRYPTOCFGA_REPORT_BLKCIPHER = 0x4 + CRYPTOCFGA_REPORT_AEAD = 0x5 + CRYPTOCFGA_REPORT_COMPRESS = 0x6 + CRYPTOCFGA_REPORT_RNG = 0x7 + CRYPTOCFGA_REPORT_CIPHER = 0x8 + CRYPTOCFGA_REPORT_AKCIPHER = 0x9 + CRYPTOCFGA_REPORT_KPP = 0xa + CRYPTOCFGA_REPORT_ACOMP = 0xb + CRYPTOCFGA_STAT_LARVAL = 0xc + CRYPTOCFGA_STAT_HASH = 0xd + CRYPTOCFGA_STAT_BLKCIPHER = 0xe + CRYPTOCFGA_STAT_AEAD = 0xf + CRYPTOCFGA_STAT_COMPRESS = 0x10 + CRYPTOCFGA_STAT_RNG = 0x11 + CRYPTOCFGA_STAT_CIPHER = 0x12 + CRYPTOCFGA_STAT_AKCIPHER = 0x13 + CRYPTOCFGA_STAT_KPP = 0x14 + CRYPTOCFGA_STAT_ACOMP = 0x15 +) + +type CryptoUserAlg struct { + Name [64]int8 + Driver_name [64]int8 + Module_name [64]int8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]int8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]int8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]int8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]int8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]int8 +} + +type CryptoReportLarval struct { + Type [64]int8 +} + +type CryptoReportHash struct { + Type [64]int8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]int8 +} + +type CryptoReportRNG struct { + Type [64]int8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]int8 +} + +type CryptoReportKPP struct { + Type [64]int8 +} + +type CryptoReportAcomp struct { + Type [64]int8 +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go index 41e4513de1..ccfd9522eb 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -445,139 +445,181 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_INFO_KIND = 0x1 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_NUM_VF = 0x15 - IFLA_VFINFO_LIST = 0x16 - IFLA_STATS64 = 0x17 - IFLA_VF_PORTS = 0x18 - IFLA_PORT_SELF = 0x19 - IFLA_AF_SPEC = 0x1a - IFLA_GROUP = 0x1b - IFLA_NET_NS_FD = 0x1c - IFLA_EXT_MASK = 0x1d - IFLA_PROMISCUITY = 0x1e - IFLA_NUM_TX_QUEUES = 0x1f - IFLA_NUM_RX_QUEUES = 0x20 - IFLA_CARRIER = 0x21 - IFLA_PHYS_PORT_ID = 0x22 - IFLA_CARRIER_CHANGES = 0x23 - IFLA_PHYS_SWITCH_ID = 0x24 - IFLA_LINK_NETNSID = 0x25 - IFLA_PHYS_PORT_NAME = 0x26 - IFLA_PROTO_DOWN = 0x27 - IFLA_GSO_MAX_SEGS = 0x28 - IFLA_GSO_MAX_SIZE = 0x29 - IFLA_PAD = 0x2a - IFLA_XDP = 0x2b - IFLA_EVENT = 0x2c - IFLA_NEW_NETNSID = 0x2d - IFLA_IF_NETNSID = 0x2e - IFLA_MAX = 0x33 - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTA_MARK = 0x10 - RTA_MFC_STATS = 0x11 - RTA_VIA = 0x12 - RTA_NEWDST = 0x13 - RTA_PREF = 0x14 - RTA_ENCAP_TYPE = 0x15 - RTA_ENCAP = 0x16 - RTA_EXPIRES = 0x17 - RTA_PAD = 0x18 - RTA_UID = 0x19 - RTA_TTL_PROPAGATE = 0x1a - RTA_IP_PROTO = 0x1b - RTA_SPORT = 0x1c - RTA_DPORT = 0x1d - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 - SizeofNdUseroptmsg = 0x10 + NDA_UNSPEC = 0x0 + NDA_DST = 0x1 + NDA_LLADDR = 0x2 + NDA_CACHEINFO = 0x3 + NDA_PROBES = 0x4 + NDA_VLAN = 0x5 + NDA_PORT = 0x6 + NDA_VNI = 0x7 + NDA_IFINDEX = 0x8 + NDA_MASTER = 0x9 + NDA_LINK_NETNSID = 0xa + NDA_SRC_VNI = 0xb + NTF_USE = 0x1 + NTF_SELF = 0x2 + NTF_MASTER = 0x4 + NTF_PROXY = 0x8 + NTF_EXT_LEARNED = 0x10 + NTF_OFFLOADED = 0x20 + NTF_ROUTER = 0x80 + NUD_INCOMPLETE = 0x1 + NUD_REACHABLE = 0x2 + NUD_STALE = 0x4 + NUD_DELAY = 0x8 + NUD_PROBE = 0x10 + NUD_FAILED = 0x20 + NUD_NOARP = 0x40 + NUD_PERMANENT = 0x80 + NUD_NONE = 0x0 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFA_FLAGS = 0x8 + IFA_RT_PRIORITY = 0x9 + IFA_TARGET_NETNSID = 0xa + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_TARGET_NETNSID = 0x2e + IFLA_CARRIER_UP_COUNT = 0x2f + IFLA_CARRIER_DOWN_COUNT = 0x30 + IFLA_NEW_IFINDEX = 0x31 + IFLA_MIN_MTU = 0x32 + IFLA_MAX_MTU = 0x33 + IFLA_MAX = 0x33 + IFLA_INFO_KIND = 0x1 + IFLA_INFO_DATA = 0x2 + IFLA_INFO_XSTATS = 0x3 + IFLA_INFO_SLAVE_KIND = 0x4 + IFLA_INFO_SLAVE_DATA = 0x5 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 + SizeofNdUseroptmsg = 0x10 + SizeofNdMsg = 0xc ) type NlMsghdr struct { @@ -654,6 +696,16 @@ type NdUseroptmsg struct { Pad3 uint32 } +type NdMsg struct { + Family uint8 + Pad1 uint8 + Pad2 uint16 + Ifindex int32 + State uint16 + Flags uint8 + Type uint8 +} + const ( SizeofSockFilter = 0x8 SizeofSockFprog = 0x10 @@ -965,7 +1017,8 @@ type PerfEventAttr struct { Clockid int32 Sample_regs_intr uint64 Aux_watermark uint32 - _ uint32 + Sample_max_stack uint16 + _ uint16 } type PerfEventMmapPage struct { @@ -1068,6 +1121,7 @@ const ( PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 PERF_COUNT_SW_EMULATION_FAULTS = 0x8 PERF_COUNT_SW_DUMMY = 0x9 + PERF_COUNT_SW_BPF_OUTPUT = 0xa PERF_SAMPLE_IP = 0x1 PERF_SAMPLE_TID = 0x2 @@ -1089,21 +1143,38 @@ const ( PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + PERF_SAMPLE_BRANCH_ABORT_TX = 0x80 + PERF_SAMPLE_BRANCH_IN_TX = 0x100 + PERF_SAMPLE_BRANCH_NO_TX = 0x200 + PERF_SAMPLE_BRANCH_COND = 0x400 + PERF_SAMPLE_BRANCH_CALL_STACK = 0x800 + PERF_SAMPLE_BRANCH_IND_JUMP = 0x1000 + PERF_SAMPLE_BRANCH_CALL = 0x2000 + PERF_SAMPLE_BRANCH_NO_FLAGS = 0x4000 + PERF_SAMPLE_BRANCH_NO_CYCLES = 0x8000 + PERF_SAMPLE_BRANCH_TYPE_SAVE = 0x10000 PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 PERF_FORMAT_ID = 0x4 PERF_FORMAT_GROUP = 0x8 - PERF_RECORD_MMAP = 0x1 - PERF_RECORD_LOST = 0x2 - PERF_RECORD_COMM = 0x3 - PERF_RECORD_EXIT = 0x4 - PERF_RECORD_THROTTLE = 0x5 - PERF_RECORD_UNTHROTTLE = 0x6 - PERF_RECORD_FORK = 0x7 - PERF_RECORD_READ = 0x8 - PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP2 = 0xa + PERF_RECORD_AUX = 0xb + PERF_RECORD_ITRACE_START = 0xc + PERF_RECORD_LOST_SAMPLES = 0xd + PERF_RECORD_SWITCH = 0xe + PERF_RECORD_SWITCH_CPU_WIDE = 0xf + PERF_RECORD_NAMESPACES = 0x10 PERF_CONTEXT_HV = -0x20 PERF_CONTEXT_KERNEL = -0x80 @@ -1116,6 +1187,7 @@ const ( PERF_FLAG_FD_NO_GROUP = 0x1 PERF_FLAG_FD_OUTPUT = 0x2 PERF_FLAG_PID_CGROUP = 0x4 + PERF_FLAG_FD_CLOEXEC = 0x8 ) const ( @@ -1373,6 +1445,21 @@ type TpacketBlockDesc struct { Hdr [40]byte } +type TpacketBDTS struct { + Sec uint32 + Usec uint32 +} + +type TpacketHdrV1 struct { + Block_status uint32 + Num_pkts uint32 + Offset_to_first_pkt uint32 + Blk_len uint32 + Seq_num uint64 + Ts_first_pkt TpacketBDTS + Ts_last_pkt TpacketBDTS +} + type TpacketReq struct { Block_size uint32 Block_nr uint32 @@ -1421,6 +1508,9 @@ const ( SizeofTpacketHdr = 0x20 SizeofTpacket2Hdr = 0x20 SizeofTpacket3Hdr = 0x30 + + SizeofTpacketStats = 0x8 + SizeofTpacketStatsV3 = 0xc ) const ( @@ -2037,3 +2127,183 @@ type SockExtendedErr struct { Info uint32 Data uint32 } + +type FanotifyEventMetadata struct { + Event_len uint32 + Vers uint8 + Reserved uint8 + Metadata_len uint16 + Mask uint64 + Fd int32 + Pid int32 +} + +type FanotifyResponse struct { + Fd int32 + Response uint32 +} + +const ( + CRYPTO_MSG_BASE = 0x10 + CRYPTO_MSG_NEWALG = 0x10 + CRYPTO_MSG_DELALG = 0x11 + CRYPTO_MSG_UPDATEALG = 0x12 + CRYPTO_MSG_GETALG = 0x13 + CRYPTO_MSG_DELRNG = 0x14 + CRYPTO_MSG_GETSTAT = 0x15 +) + +const ( + CRYPTOCFGA_UNSPEC = 0x0 + CRYPTOCFGA_PRIORITY_VAL = 0x1 + CRYPTOCFGA_REPORT_LARVAL = 0x2 + CRYPTOCFGA_REPORT_HASH = 0x3 + CRYPTOCFGA_REPORT_BLKCIPHER = 0x4 + CRYPTOCFGA_REPORT_AEAD = 0x5 + CRYPTOCFGA_REPORT_COMPRESS = 0x6 + CRYPTOCFGA_REPORT_RNG = 0x7 + CRYPTOCFGA_REPORT_CIPHER = 0x8 + CRYPTOCFGA_REPORT_AKCIPHER = 0x9 + CRYPTOCFGA_REPORT_KPP = 0xa + CRYPTOCFGA_REPORT_ACOMP = 0xb + CRYPTOCFGA_STAT_LARVAL = 0xc + CRYPTOCFGA_STAT_HASH = 0xd + CRYPTOCFGA_STAT_BLKCIPHER = 0xe + CRYPTOCFGA_STAT_AEAD = 0xf + CRYPTOCFGA_STAT_COMPRESS = 0x10 + CRYPTOCFGA_STAT_RNG = 0x11 + CRYPTOCFGA_STAT_CIPHER = 0x12 + CRYPTOCFGA_STAT_AKCIPHER = 0x13 + CRYPTOCFGA_STAT_KPP = 0x14 + CRYPTOCFGA_STAT_ACOMP = 0x15 +) + +type CryptoUserAlg struct { + Name [64]int8 + Driver_name [64]int8 + Module_name [64]int8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]int8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]int8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]int8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]int8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]int8 +} + +type CryptoReportLarval struct { + Type [64]int8 +} + +type CryptoReportHash struct { + Type [64]int8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]int8 +} + +type CryptoReportRNG struct { + Type [64]int8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]int8 +} + +type CryptoReportKPP struct { + Type [64]int8 +} + +type CryptoReportAcomp struct { + Type [64]int8 +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go index 4a3d74b76e..95374fd9b5 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -445,139 +445,181 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_INFO_KIND = 0x1 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_NUM_VF = 0x15 - IFLA_VFINFO_LIST = 0x16 - IFLA_STATS64 = 0x17 - IFLA_VF_PORTS = 0x18 - IFLA_PORT_SELF = 0x19 - IFLA_AF_SPEC = 0x1a - IFLA_GROUP = 0x1b - IFLA_NET_NS_FD = 0x1c - IFLA_EXT_MASK = 0x1d - IFLA_PROMISCUITY = 0x1e - IFLA_NUM_TX_QUEUES = 0x1f - IFLA_NUM_RX_QUEUES = 0x20 - IFLA_CARRIER = 0x21 - IFLA_PHYS_PORT_ID = 0x22 - IFLA_CARRIER_CHANGES = 0x23 - IFLA_PHYS_SWITCH_ID = 0x24 - IFLA_LINK_NETNSID = 0x25 - IFLA_PHYS_PORT_NAME = 0x26 - IFLA_PROTO_DOWN = 0x27 - IFLA_GSO_MAX_SEGS = 0x28 - IFLA_GSO_MAX_SIZE = 0x29 - IFLA_PAD = 0x2a - IFLA_XDP = 0x2b - IFLA_EVENT = 0x2c - IFLA_NEW_NETNSID = 0x2d - IFLA_IF_NETNSID = 0x2e - IFLA_MAX = 0x33 - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTA_MARK = 0x10 - RTA_MFC_STATS = 0x11 - RTA_VIA = 0x12 - RTA_NEWDST = 0x13 - RTA_PREF = 0x14 - RTA_ENCAP_TYPE = 0x15 - RTA_ENCAP = 0x16 - RTA_EXPIRES = 0x17 - RTA_PAD = 0x18 - RTA_UID = 0x19 - RTA_TTL_PROPAGATE = 0x1a - RTA_IP_PROTO = 0x1b - RTA_SPORT = 0x1c - RTA_DPORT = 0x1d - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 - SizeofNdUseroptmsg = 0x10 + NDA_UNSPEC = 0x0 + NDA_DST = 0x1 + NDA_LLADDR = 0x2 + NDA_CACHEINFO = 0x3 + NDA_PROBES = 0x4 + NDA_VLAN = 0x5 + NDA_PORT = 0x6 + NDA_VNI = 0x7 + NDA_IFINDEX = 0x8 + NDA_MASTER = 0x9 + NDA_LINK_NETNSID = 0xa + NDA_SRC_VNI = 0xb + NTF_USE = 0x1 + NTF_SELF = 0x2 + NTF_MASTER = 0x4 + NTF_PROXY = 0x8 + NTF_EXT_LEARNED = 0x10 + NTF_OFFLOADED = 0x20 + NTF_ROUTER = 0x80 + NUD_INCOMPLETE = 0x1 + NUD_REACHABLE = 0x2 + NUD_STALE = 0x4 + NUD_DELAY = 0x8 + NUD_PROBE = 0x10 + NUD_FAILED = 0x20 + NUD_NOARP = 0x40 + NUD_PERMANENT = 0x80 + NUD_NONE = 0x0 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFA_FLAGS = 0x8 + IFA_RT_PRIORITY = 0x9 + IFA_TARGET_NETNSID = 0xa + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_TARGET_NETNSID = 0x2e + IFLA_CARRIER_UP_COUNT = 0x2f + IFLA_CARRIER_DOWN_COUNT = 0x30 + IFLA_NEW_IFINDEX = 0x31 + IFLA_MIN_MTU = 0x32 + IFLA_MAX_MTU = 0x33 + IFLA_MAX = 0x33 + IFLA_INFO_KIND = 0x1 + IFLA_INFO_DATA = 0x2 + IFLA_INFO_XSTATS = 0x3 + IFLA_INFO_SLAVE_KIND = 0x4 + IFLA_INFO_SLAVE_DATA = 0x5 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 + SizeofNdUseroptmsg = 0x10 + SizeofNdMsg = 0xc ) type NlMsghdr struct { @@ -654,6 +696,16 @@ type NdUseroptmsg struct { Pad3 uint32 } +type NdMsg struct { + Family uint8 + Pad1 uint8 + Pad2 uint16 + Ifindex int32 + State uint16 + Flags uint8 + Type uint8 +} + const ( SizeofSockFilter = 0x8 SizeofSockFprog = 0x10 @@ -965,7 +1017,8 @@ type PerfEventAttr struct { Clockid int32 Sample_regs_intr uint64 Aux_watermark uint32 - _ uint32 + Sample_max_stack uint16 + _ uint16 } type PerfEventMmapPage struct { @@ -1068,6 +1121,7 @@ const ( PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 PERF_COUNT_SW_EMULATION_FAULTS = 0x8 PERF_COUNT_SW_DUMMY = 0x9 + PERF_COUNT_SW_BPF_OUTPUT = 0xa PERF_SAMPLE_IP = 0x1 PERF_SAMPLE_TID = 0x2 @@ -1089,21 +1143,38 @@ const ( PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + PERF_SAMPLE_BRANCH_ABORT_TX = 0x80 + PERF_SAMPLE_BRANCH_IN_TX = 0x100 + PERF_SAMPLE_BRANCH_NO_TX = 0x200 + PERF_SAMPLE_BRANCH_COND = 0x400 + PERF_SAMPLE_BRANCH_CALL_STACK = 0x800 + PERF_SAMPLE_BRANCH_IND_JUMP = 0x1000 + PERF_SAMPLE_BRANCH_CALL = 0x2000 + PERF_SAMPLE_BRANCH_NO_FLAGS = 0x4000 + PERF_SAMPLE_BRANCH_NO_CYCLES = 0x8000 + PERF_SAMPLE_BRANCH_TYPE_SAVE = 0x10000 PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 PERF_FORMAT_ID = 0x4 PERF_FORMAT_GROUP = 0x8 - PERF_RECORD_MMAP = 0x1 - PERF_RECORD_LOST = 0x2 - PERF_RECORD_COMM = 0x3 - PERF_RECORD_EXIT = 0x4 - PERF_RECORD_THROTTLE = 0x5 - PERF_RECORD_UNTHROTTLE = 0x6 - PERF_RECORD_FORK = 0x7 - PERF_RECORD_READ = 0x8 - PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP2 = 0xa + PERF_RECORD_AUX = 0xb + PERF_RECORD_ITRACE_START = 0xc + PERF_RECORD_LOST_SAMPLES = 0xd + PERF_RECORD_SWITCH = 0xe + PERF_RECORD_SWITCH_CPU_WIDE = 0xf + PERF_RECORD_NAMESPACES = 0x10 PERF_CONTEXT_HV = -0x20 PERF_CONTEXT_KERNEL = -0x80 @@ -1116,6 +1187,7 @@ const ( PERF_FLAG_FD_NO_GROUP = 0x1 PERF_FLAG_FD_OUTPUT = 0x2 PERF_FLAG_PID_CGROUP = 0x4 + PERF_FLAG_FD_CLOEXEC = 0x8 ) const ( @@ -1373,6 +1445,21 @@ type TpacketBlockDesc struct { Hdr [40]byte } +type TpacketBDTS struct { + Sec uint32 + Usec uint32 +} + +type TpacketHdrV1 struct { + Block_status uint32 + Num_pkts uint32 + Offset_to_first_pkt uint32 + Blk_len uint32 + Seq_num uint64 + Ts_first_pkt TpacketBDTS + Ts_last_pkt TpacketBDTS +} + type TpacketReq struct { Block_size uint32 Block_nr uint32 @@ -1421,6 +1508,9 @@ const ( SizeofTpacketHdr = 0x20 SizeofTpacket2Hdr = 0x20 SizeofTpacket3Hdr = 0x30 + + SizeofTpacketStats = 0x8 + SizeofTpacketStatsV3 = 0xc ) const ( @@ -2037,3 +2127,183 @@ type SockExtendedErr struct { Info uint32 Data uint32 } + +type FanotifyEventMetadata struct { + Event_len uint32 + Vers uint8 + Reserved uint8 + Metadata_len uint16 + Mask uint64 + Fd int32 + Pid int32 +} + +type FanotifyResponse struct { + Fd int32 + Response uint32 +} + +const ( + CRYPTO_MSG_BASE = 0x10 + CRYPTO_MSG_NEWALG = 0x10 + CRYPTO_MSG_DELALG = 0x11 + CRYPTO_MSG_UPDATEALG = 0x12 + CRYPTO_MSG_GETALG = 0x13 + CRYPTO_MSG_DELRNG = 0x14 + CRYPTO_MSG_GETSTAT = 0x15 +) + +const ( + CRYPTOCFGA_UNSPEC = 0x0 + CRYPTOCFGA_PRIORITY_VAL = 0x1 + CRYPTOCFGA_REPORT_LARVAL = 0x2 + CRYPTOCFGA_REPORT_HASH = 0x3 + CRYPTOCFGA_REPORT_BLKCIPHER = 0x4 + CRYPTOCFGA_REPORT_AEAD = 0x5 + CRYPTOCFGA_REPORT_COMPRESS = 0x6 + CRYPTOCFGA_REPORT_RNG = 0x7 + CRYPTOCFGA_REPORT_CIPHER = 0x8 + CRYPTOCFGA_REPORT_AKCIPHER = 0x9 + CRYPTOCFGA_REPORT_KPP = 0xa + CRYPTOCFGA_REPORT_ACOMP = 0xb + CRYPTOCFGA_STAT_LARVAL = 0xc + CRYPTOCFGA_STAT_HASH = 0xd + CRYPTOCFGA_STAT_BLKCIPHER = 0xe + CRYPTOCFGA_STAT_AEAD = 0xf + CRYPTOCFGA_STAT_COMPRESS = 0x10 + CRYPTOCFGA_STAT_RNG = 0x11 + CRYPTOCFGA_STAT_CIPHER = 0x12 + CRYPTOCFGA_STAT_AKCIPHER = 0x13 + CRYPTOCFGA_STAT_KPP = 0x14 + CRYPTOCFGA_STAT_ACOMP = 0x15 +) + +type CryptoUserAlg struct { + Name [64]int8 + Driver_name [64]int8 + Module_name [64]int8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]int8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]int8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]int8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]int8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]int8 +} + +type CryptoReportLarval struct { + Type [64]int8 +} + +type CryptoReportHash struct { + Type [64]int8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]int8 +} + +type CryptoReportRNG struct { + Type [64]int8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]int8 +} + +type CryptoReportKPP struct { + Type [64]int8 +} + +type CryptoReportAcomp struct { + Type [64]int8 +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go index 8ae3ca4e4e..9d4953daf5 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -446,139 +446,181 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_INFO_KIND = 0x1 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_NUM_VF = 0x15 - IFLA_VFINFO_LIST = 0x16 - IFLA_STATS64 = 0x17 - IFLA_VF_PORTS = 0x18 - IFLA_PORT_SELF = 0x19 - IFLA_AF_SPEC = 0x1a - IFLA_GROUP = 0x1b - IFLA_NET_NS_FD = 0x1c - IFLA_EXT_MASK = 0x1d - IFLA_PROMISCUITY = 0x1e - IFLA_NUM_TX_QUEUES = 0x1f - IFLA_NUM_RX_QUEUES = 0x20 - IFLA_CARRIER = 0x21 - IFLA_PHYS_PORT_ID = 0x22 - IFLA_CARRIER_CHANGES = 0x23 - IFLA_PHYS_SWITCH_ID = 0x24 - IFLA_LINK_NETNSID = 0x25 - IFLA_PHYS_PORT_NAME = 0x26 - IFLA_PROTO_DOWN = 0x27 - IFLA_GSO_MAX_SEGS = 0x28 - IFLA_GSO_MAX_SIZE = 0x29 - IFLA_PAD = 0x2a - IFLA_XDP = 0x2b - IFLA_EVENT = 0x2c - IFLA_NEW_NETNSID = 0x2d - IFLA_IF_NETNSID = 0x2e - IFLA_MAX = 0x33 - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTA_MARK = 0x10 - RTA_MFC_STATS = 0x11 - RTA_VIA = 0x12 - RTA_NEWDST = 0x13 - RTA_PREF = 0x14 - RTA_ENCAP_TYPE = 0x15 - RTA_ENCAP = 0x16 - RTA_EXPIRES = 0x17 - RTA_PAD = 0x18 - RTA_UID = 0x19 - RTA_TTL_PROPAGATE = 0x1a - RTA_IP_PROTO = 0x1b - RTA_SPORT = 0x1c - RTA_DPORT = 0x1d - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 - SizeofNdUseroptmsg = 0x10 + NDA_UNSPEC = 0x0 + NDA_DST = 0x1 + NDA_LLADDR = 0x2 + NDA_CACHEINFO = 0x3 + NDA_PROBES = 0x4 + NDA_VLAN = 0x5 + NDA_PORT = 0x6 + NDA_VNI = 0x7 + NDA_IFINDEX = 0x8 + NDA_MASTER = 0x9 + NDA_LINK_NETNSID = 0xa + NDA_SRC_VNI = 0xb + NTF_USE = 0x1 + NTF_SELF = 0x2 + NTF_MASTER = 0x4 + NTF_PROXY = 0x8 + NTF_EXT_LEARNED = 0x10 + NTF_OFFLOADED = 0x20 + NTF_ROUTER = 0x80 + NUD_INCOMPLETE = 0x1 + NUD_REACHABLE = 0x2 + NUD_STALE = 0x4 + NUD_DELAY = 0x8 + NUD_PROBE = 0x10 + NUD_FAILED = 0x20 + NUD_NOARP = 0x40 + NUD_PERMANENT = 0x80 + NUD_NONE = 0x0 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFA_FLAGS = 0x8 + IFA_RT_PRIORITY = 0x9 + IFA_TARGET_NETNSID = 0xa + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_TARGET_NETNSID = 0x2e + IFLA_CARRIER_UP_COUNT = 0x2f + IFLA_CARRIER_DOWN_COUNT = 0x30 + IFLA_NEW_IFINDEX = 0x31 + IFLA_MIN_MTU = 0x32 + IFLA_MAX_MTU = 0x33 + IFLA_MAX = 0x33 + IFLA_INFO_KIND = 0x1 + IFLA_INFO_DATA = 0x2 + IFLA_INFO_XSTATS = 0x3 + IFLA_INFO_SLAVE_KIND = 0x4 + IFLA_INFO_SLAVE_DATA = 0x5 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 + SizeofNdUseroptmsg = 0x10 + SizeofNdMsg = 0xc ) type NlMsghdr struct { @@ -655,6 +697,16 @@ type NdUseroptmsg struct { Pad3 uint32 } +type NdMsg struct { + Family uint8 + Pad1 uint8 + Pad2 uint16 + Ifindex int32 + State uint16 + Flags uint8 + Type uint8 +} + const ( SizeofSockFilter = 0x8 SizeofSockFprog = 0x8 @@ -967,7 +1019,8 @@ type PerfEventAttr struct { Clockid int32 Sample_regs_intr uint64 Aux_watermark uint32 - _ uint32 + Sample_max_stack uint16 + _ uint16 } type PerfEventMmapPage struct { @@ -1070,6 +1123,7 @@ const ( PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 PERF_COUNT_SW_EMULATION_FAULTS = 0x8 PERF_COUNT_SW_DUMMY = 0x9 + PERF_COUNT_SW_BPF_OUTPUT = 0xa PERF_SAMPLE_IP = 0x1 PERF_SAMPLE_TID = 0x2 @@ -1091,21 +1145,38 @@ const ( PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + PERF_SAMPLE_BRANCH_ABORT_TX = 0x80 + PERF_SAMPLE_BRANCH_IN_TX = 0x100 + PERF_SAMPLE_BRANCH_NO_TX = 0x200 + PERF_SAMPLE_BRANCH_COND = 0x400 + PERF_SAMPLE_BRANCH_CALL_STACK = 0x800 + PERF_SAMPLE_BRANCH_IND_JUMP = 0x1000 + PERF_SAMPLE_BRANCH_CALL = 0x2000 + PERF_SAMPLE_BRANCH_NO_FLAGS = 0x4000 + PERF_SAMPLE_BRANCH_NO_CYCLES = 0x8000 + PERF_SAMPLE_BRANCH_TYPE_SAVE = 0x10000 PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 PERF_FORMAT_ID = 0x4 PERF_FORMAT_GROUP = 0x8 - PERF_RECORD_MMAP = 0x1 - PERF_RECORD_LOST = 0x2 - PERF_RECORD_COMM = 0x3 - PERF_RECORD_EXIT = 0x4 - PERF_RECORD_THROTTLE = 0x5 - PERF_RECORD_UNTHROTTLE = 0x6 - PERF_RECORD_FORK = 0x7 - PERF_RECORD_READ = 0x8 - PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP2 = 0xa + PERF_RECORD_AUX = 0xb + PERF_RECORD_ITRACE_START = 0xc + PERF_RECORD_LOST_SAMPLES = 0xd + PERF_RECORD_SWITCH = 0xe + PERF_RECORD_SWITCH_CPU_WIDE = 0xf + PERF_RECORD_NAMESPACES = 0x10 PERF_CONTEXT_HV = -0x20 PERF_CONTEXT_KERNEL = -0x80 @@ -1118,6 +1189,7 @@ const ( PERF_FLAG_FD_NO_GROUP = 0x1 PERF_FLAG_FD_OUTPUT = 0x2 PERF_FLAG_PID_CGROUP = 0x4 + PERF_FLAG_FD_CLOEXEC = 0x8 ) const ( @@ -1376,6 +1448,21 @@ type TpacketBlockDesc struct { Hdr [40]byte } +type TpacketBDTS struct { + Sec uint32 + Usec uint32 +} + +type TpacketHdrV1 struct { + Block_status uint32 + Num_pkts uint32 + Offset_to_first_pkt uint32 + Blk_len uint32 + Seq_num uint64 + Ts_first_pkt TpacketBDTS + Ts_last_pkt TpacketBDTS +} + type TpacketReq struct { Block_size uint32 Block_nr uint32 @@ -1424,6 +1511,9 @@ const ( SizeofTpacketHdr = 0x18 SizeofTpacket2Hdr = 0x20 SizeofTpacket3Hdr = 0x30 + + SizeofTpacketStats = 0x8 + SizeofTpacketStatsV3 = 0xc ) const ( @@ -2040,3 +2130,183 @@ type SockExtendedErr struct { Info uint32 Data uint32 } + +type FanotifyEventMetadata struct { + Event_len uint32 + Vers uint8 + Reserved uint8 + Metadata_len uint16 + Mask uint64 + Fd int32 + Pid int32 +} + +type FanotifyResponse struct { + Fd int32 + Response uint32 +} + +const ( + CRYPTO_MSG_BASE = 0x10 + CRYPTO_MSG_NEWALG = 0x10 + CRYPTO_MSG_DELALG = 0x11 + CRYPTO_MSG_UPDATEALG = 0x12 + CRYPTO_MSG_GETALG = 0x13 + CRYPTO_MSG_DELRNG = 0x14 + CRYPTO_MSG_GETSTAT = 0x15 +) + +const ( + CRYPTOCFGA_UNSPEC = 0x0 + CRYPTOCFGA_PRIORITY_VAL = 0x1 + CRYPTOCFGA_REPORT_LARVAL = 0x2 + CRYPTOCFGA_REPORT_HASH = 0x3 + CRYPTOCFGA_REPORT_BLKCIPHER = 0x4 + CRYPTOCFGA_REPORT_AEAD = 0x5 + CRYPTOCFGA_REPORT_COMPRESS = 0x6 + CRYPTOCFGA_REPORT_RNG = 0x7 + CRYPTOCFGA_REPORT_CIPHER = 0x8 + CRYPTOCFGA_REPORT_AKCIPHER = 0x9 + CRYPTOCFGA_REPORT_KPP = 0xa + CRYPTOCFGA_REPORT_ACOMP = 0xb + CRYPTOCFGA_STAT_LARVAL = 0xc + CRYPTOCFGA_STAT_HASH = 0xd + CRYPTOCFGA_STAT_BLKCIPHER = 0xe + CRYPTOCFGA_STAT_AEAD = 0xf + CRYPTOCFGA_STAT_COMPRESS = 0x10 + CRYPTOCFGA_STAT_RNG = 0x11 + CRYPTOCFGA_STAT_CIPHER = 0x12 + CRYPTOCFGA_STAT_AKCIPHER = 0x13 + CRYPTOCFGA_STAT_KPP = 0x14 + CRYPTOCFGA_STAT_ACOMP = 0x15 +) + +type CryptoUserAlg struct { + Name [64]int8 + Driver_name [64]int8 + Module_name [64]int8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]int8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]int8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]int8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]int8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]int8 +} + +type CryptoReportLarval struct { + Type [64]int8 +} + +type CryptoReportHash struct { + Type [64]int8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]int8 +} + +type CryptoReportRNG struct { + Type [64]int8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]int8 +} + +type CryptoReportKPP struct { + Type [64]int8 +} + +type CryptoReportAcomp struct { + Type [64]int8 +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go index 50294c94c0..a436410d62 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -446,139 +446,181 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_INFO_KIND = 0x1 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_NUM_VF = 0x15 - IFLA_VFINFO_LIST = 0x16 - IFLA_STATS64 = 0x17 - IFLA_VF_PORTS = 0x18 - IFLA_PORT_SELF = 0x19 - IFLA_AF_SPEC = 0x1a - IFLA_GROUP = 0x1b - IFLA_NET_NS_FD = 0x1c - IFLA_EXT_MASK = 0x1d - IFLA_PROMISCUITY = 0x1e - IFLA_NUM_TX_QUEUES = 0x1f - IFLA_NUM_RX_QUEUES = 0x20 - IFLA_CARRIER = 0x21 - IFLA_PHYS_PORT_ID = 0x22 - IFLA_CARRIER_CHANGES = 0x23 - IFLA_PHYS_SWITCH_ID = 0x24 - IFLA_LINK_NETNSID = 0x25 - IFLA_PHYS_PORT_NAME = 0x26 - IFLA_PROTO_DOWN = 0x27 - IFLA_GSO_MAX_SEGS = 0x28 - IFLA_GSO_MAX_SIZE = 0x29 - IFLA_PAD = 0x2a - IFLA_XDP = 0x2b - IFLA_EVENT = 0x2c - IFLA_NEW_NETNSID = 0x2d - IFLA_IF_NETNSID = 0x2e - IFLA_MAX = 0x33 - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTA_MARK = 0x10 - RTA_MFC_STATS = 0x11 - RTA_VIA = 0x12 - RTA_NEWDST = 0x13 - RTA_PREF = 0x14 - RTA_ENCAP_TYPE = 0x15 - RTA_ENCAP = 0x16 - RTA_EXPIRES = 0x17 - RTA_PAD = 0x18 - RTA_UID = 0x19 - RTA_TTL_PROPAGATE = 0x1a - RTA_IP_PROTO = 0x1b - RTA_SPORT = 0x1c - RTA_DPORT = 0x1d - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 - SizeofNdUseroptmsg = 0x10 + NDA_UNSPEC = 0x0 + NDA_DST = 0x1 + NDA_LLADDR = 0x2 + NDA_CACHEINFO = 0x3 + NDA_PROBES = 0x4 + NDA_VLAN = 0x5 + NDA_PORT = 0x6 + NDA_VNI = 0x7 + NDA_IFINDEX = 0x8 + NDA_MASTER = 0x9 + NDA_LINK_NETNSID = 0xa + NDA_SRC_VNI = 0xb + NTF_USE = 0x1 + NTF_SELF = 0x2 + NTF_MASTER = 0x4 + NTF_PROXY = 0x8 + NTF_EXT_LEARNED = 0x10 + NTF_OFFLOADED = 0x20 + NTF_ROUTER = 0x80 + NUD_INCOMPLETE = 0x1 + NUD_REACHABLE = 0x2 + NUD_STALE = 0x4 + NUD_DELAY = 0x8 + NUD_PROBE = 0x10 + NUD_FAILED = 0x20 + NUD_NOARP = 0x40 + NUD_PERMANENT = 0x80 + NUD_NONE = 0x0 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFA_FLAGS = 0x8 + IFA_RT_PRIORITY = 0x9 + IFA_TARGET_NETNSID = 0xa + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_TARGET_NETNSID = 0x2e + IFLA_CARRIER_UP_COUNT = 0x2f + IFLA_CARRIER_DOWN_COUNT = 0x30 + IFLA_NEW_IFINDEX = 0x31 + IFLA_MIN_MTU = 0x32 + IFLA_MAX_MTU = 0x33 + IFLA_MAX = 0x33 + IFLA_INFO_KIND = 0x1 + IFLA_INFO_DATA = 0x2 + IFLA_INFO_XSTATS = 0x3 + IFLA_INFO_SLAVE_KIND = 0x4 + IFLA_INFO_SLAVE_DATA = 0x5 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 + SizeofNdUseroptmsg = 0x10 + SizeofNdMsg = 0xc ) type NlMsghdr struct { @@ -655,6 +697,16 @@ type NdUseroptmsg struct { Pad3 uint32 } +type NdMsg struct { + Family uint8 + Pad1 uint8 + Pad2 uint16 + Ifindex int32 + State uint16 + Flags uint8 + Type uint8 +} + const ( SizeofSockFilter = 0x8 SizeofSockFprog = 0x10 @@ -973,7 +1025,8 @@ type PerfEventAttr struct { Clockid int32 Sample_regs_intr uint64 Aux_watermark uint32 - _ uint32 + Sample_max_stack uint16 + _ uint16 } type PerfEventMmapPage struct { @@ -1076,6 +1129,7 @@ const ( PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 PERF_COUNT_SW_EMULATION_FAULTS = 0x8 PERF_COUNT_SW_DUMMY = 0x9 + PERF_COUNT_SW_BPF_OUTPUT = 0xa PERF_SAMPLE_IP = 0x1 PERF_SAMPLE_TID = 0x2 @@ -1097,21 +1151,38 @@ const ( PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + PERF_SAMPLE_BRANCH_ABORT_TX = 0x80 + PERF_SAMPLE_BRANCH_IN_TX = 0x100 + PERF_SAMPLE_BRANCH_NO_TX = 0x200 + PERF_SAMPLE_BRANCH_COND = 0x400 + PERF_SAMPLE_BRANCH_CALL_STACK = 0x800 + PERF_SAMPLE_BRANCH_IND_JUMP = 0x1000 + PERF_SAMPLE_BRANCH_CALL = 0x2000 + PERF_SAMPLE_BRANCH_NO_FLAGS = 0x4000 + PERF_SAMPLE_BRANCH_NO_CYCLES = 0x8000 + PERF_SAMPLE_BRANCH_TYPE_SAVE = 0x10000 PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 PERF_FORMAT_ID = 0x4 PERF_FORMAT_GROUP = 0x8 - PERF_RECORD_MMAP = 0x1 - PERF_RECORD_LOST = 0x2 - PERF_RECORD_COMM = 0x3 - PERF_RECORD_EXIT = 0x4 - PERF_RECORD_THROTTLE = 0x5 - PERF_RECORD_UNTHROTTLE = 0x6 - PERF_RECORD_FORK = 0x7 - PERF_RECORD_READ = 0x8 - PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP2 = 0xa + PERF_RECORD_AUX = 0xb + PERF_RECORD_ITRACE_START = 0xc + PERF_RECORD_LOST_SAMPLES = 0xd + PERF_RECORD_SWITCH = 0xe + PERF_RECORD_SWITCH_CPU_WIDE = 0xf + PERF_RECORD_NAMESPACES = 0x10 PERF_CONTEXT_HV = -0x20 PERF_CONTEXT_KERNEL = -0x80 @@ -1124,6 +1195,7 @@ const ( PERF_FLAG_FD_NO_GROUP = 0x1 PERF_FLAG_FD_OUTPUT = 0x2 PERF_FLAG_PID_CGROUP = 0x4 + PERF_FLAG_FD_CLOEXEC = 0x8 ) const ( @@ -1381,6 +1453,21 @@ type TpacketBlockDesc struct { Hdr [40]byte } +type TpacketBDTS struct { + Sec uint32 + Usec uint32 +} + +type TpacketHdrV1 struct { + Block_status uint32 + Num_pkts uint32 + Offset_to_first_pkt uint32 + Blk_len uint32 + Seq_num uint64 + Ts_first_pkt TpacketBDTS + Ts_last_pkt TpacketBDTS +} + type TpacketReq struct { Block_size uint32 Block_nr uint32 @@ -1429,6 +1516,9 @@ const ( SizeofTpacketHdr = 0x20 SizeofTpacket2Hdr = 0x20 SizeofTpacket3Hdr = 0x30 + + SizeofTpacketStats = 0x8 + SizeofTpacketStatsV3 = 0xc ) const ( @@ -2045,3 +2135,183 @@ type SockExtendedErr struct { Info uint32 Data uint32 } + +type FanotifyEventMetadata struct { + Event_len uint32 + Vers uint8 + Reserved uint8 + Metadata_len uint16 + Mask uint64 + Fd int32 + Pid int32 +} + +type FanotifyResponse struct { + Fd int32 + Response uint32 +} + +const ( + CRYPTO_MSG_BASE = 0x10 + CRYPTO_MSG_NEWALG = 0x10 + CRYPTO_MSG_DELALG = 0x11 + CRYPTO_MSG_UPDATEALG = 0x12 + CRYPTO_MSG_GETALG = 0x13 + CRYPTO_MSG_DELRNG = 0x14 + CRYPTO_MSG_GETSTAT = 0x15 +) + +const ( + CRYPTOCFGA_UNSPEC = 0x0 + CRYPTOCFGA_PRIORITY_VAL = 0x1 + CRYPTOCFGA_REPORT_LARVAL = 0x2 + CRYPTOCFGA_REPORT_HASH = 0x3 + CRYPTOCFGA_REPORT_BLKCIPHER = 0x4 + CRYPTOCFGA_REPORT_AEAD = 0x5 + CRYPTOCFGA_REPORT_COMPRESS = 0x6 + CRYPTOCFGA_REPORT_RNG = 0x7 + CRYPTOCFGA_REPORT_CIPHER = 0x8 + CRYPTOCFGA_REPORT_AKCIPHER = 0x9 + CRYPTOCFGA_REPORT_KPP = 0xa + CRYPTOCFGA_REPORT_ACOMP = 0xb + CRYPTOCFGA_STAT_LARVAL = 0xc + CRYPTOCFGA_STAT_HASH = 0xd + CRYPTOCFGA_STAT_BLKCIPHER = 0xe + CRYPTOCFGA_STAT_AEAD = 0xf + CRYPTOCFGA_STAT_COMPRESS = 0x10 + CRYPTOCFGA_STAT_RNG = 0x11 + CRYPTOCFGA_STAT_CIPHER = 0x12 + CRYPTOCFGA_STAT_AKCIPHER = 0x13 + CRYPTOCFGA_STAT_KPP = 0x14 + CRYPTOCFGA_STAT_ACOMP = 0x15 +) + +type CryptoUserAlg struct { + Name [64]uint8 + Driver_name [64]uint8 + Module_name [64]uint8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]uint8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]uint8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]uint8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]uint8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]uint8 +} + +type CryptoReportLarval struct { + Type [64]uint8 +} + +type CryptoReportHash struct { + Type [64]uint8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]uint8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]uint8 + Geniv [64]uint8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]uint8 + Geniv [64]uint8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]uint8 +} + +type CryptoReportRNG struct { + Type [64]uint8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]uint8 +} + +type CryptoReportKPP struct { + Type [64]uint8 +} + +type CryptoReportAcomp struct { + Type [64]uint8 +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go index d2acf3a734..dbe32bb303 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -446,139 +446,181 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_INFO_KIND = 0x1 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_NUM_VF = 0x15 - IFLA_VFINFO_LIST = 0x16 - IFLA_STATS64 = 0x17 - IFLA_VF_PORTS = 0x18 - IFLA_PORT_SELF = 0x19 - IFLA_AF_SPEC = 0x1a - IFLA_GROUP = 0x1b - IFLA_NET_NS_FD = 0x1c - IFLA_EXT_MASK = 0x1d - IFLA_PROMISCUITY = 0x1e - IFLA_NUM_TX_QUEUES = 0x1f - IFLA_NUM_RX_QUEUES = 0x20 - IFLA_CARRIER = 0x21 - IFLA_PHYS_PORT_ID = 0x22 - IFLA_CARRIER_CHANGES = 0x23 - IFLA_PHYS_SWITCH_ID = 0x24 - IFLA_LINK_NETNSID = 0x25 - IFLA_PHYS_PORT_NAME = 0x26 - IFLA_PROTO_DOWN = 0x27 - IFLA_GSO_MAX_SEGS = 0x28 - IFLA_GSO_MAX_SIZE = 0x29 - IFLA_PAD = 0x2a - IFLA_XDP = 0x2b - IFLA_EVENT = 0x2c - IFLA_NEW_NETNSID = 0x2d - IFLA_IF_NETNSID = 0x2e - IFLA_MAX = 0x33 - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTA_MARK = 0x10 - RTA_MFC_STATS = 0x11 - RTA_VIA = 0x12 - RTA_NEWDST = 0x13 - RTA_PREF = 0x14 - RTA_ENCAP_TYPE = 0x15 - RTA_ENCAP = 0x16 - RTA_EXPIRES = 0x17 - RTA_PAD = 0x18 - RTA_UID = 0x19 - RTA_TTL_PROPAGATE = 0x1a - RTA_IP_PROTO = 0x1b - RTA_SPORT = 0x1c - RTA_DPORT = 0x1d - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 - SizeofNdUseroptmsg = 0x10 + NDA_UNSPEC = 0x0 + NDA_DST = 0x1 + NDA_LLADDR = 0x2 + NDA_CACHEINFO = 0x3 + NDA_PROBES = 0x4 + NDA_VLAN = 0x5 + NDA_PORT = 0x6 + NDA_VNI = 0x7 + NDA_IFINDEX = 0x8 + NDA_MASTER = 0x9 + NDA_LINK_NETNSID = 0xa + NDA_SRC_VNI = 0xb + NTF_USE = 0x1 + NTF_SELF = 0x2 + NTF_MASTER = 0x4 + NTF_PROXY = 0x8 + NTF_EXT_LEARNED = 0x10 + NTF_OFFLOADED = 0x20 + NTF_ROUTER = 0x80 + NUD_INCOMPLETE = 0x1 + NUD_REACHABLE = 0x2 + NUD_STALE = 0x4 + NUD_DELAY = 0x8 + NUD_PROBE = 0x10 + NUD_FAILED = 0x20 + NUD_NOARP = 0x40 + NUD_PERMANENT = 0x80 + NUD_NONE = 0x0 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFA_FLAGS = 0x8 + IFA_RT_PRIORITY = 0x9 + IFA_TARGET_NETNSID = 0xa + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_TARGET_NETNSID = 0x2e + IFLA_CARRIER_UP_COUNT = 0x2f + IFLA_CARRIER_DOWN_COUNT = 0x30 + IFLA_NEW_IFINDEX = 0x31 + IFLA_MIN_MTU = 0x32 + IFLA_MAX_MTU = 0x33 + IFLA_MAX = 0x33 + IFLA_INFO_KIND = 0x1 + IFLA_INFO_DATA = 0x2 + IFLA_INFO_XSTATS = 0x3 + IFLA_INFO_SLAVE_KIND = 0x4 + IFLA_INFO_SLAVE_DATA = 0x5 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 + SizeofNdUseroptmsg = 0x10 + SizeofNdMsg = 0xc ) type NlMsghdr struct { @@ -655,6 +697,16 @@ type NdUseroptmsg struct { Pad3 uint32 } +type NdMsg struct { + Family uint8 + Pad1 uint8 + Pad2 uint16 + Ifindex int32 + State uint16 + Flags uint8 + Type uint8 +} + const ( SizeofSockFilter = 0x8 SizeofSockFprog = 0x10 @@ -973,7 +1025,8 @@ type PerfEventAttr struct { Clockid int32 Sample_regs_intr uint64 Aux_watermark uint32 - _ uint32 + Sample_max_stack uint16 + _ uint16 } type PerfEventMmapPage struct { @@ -1076,6 +1129,7 @@ const ( PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 PERF_COUNT_SW_EMULATION_FAULTS = 0x8 PERF_COUNT_SW_DUMMY = 0x9 + PERF_COUNT_SW_BPF_OUTPUT = 0xa PERF_SAMPLE_IP = 0x1 PERF_SAMPLE_TID = 0x2 @@ -1097,21 +1151,38 @@ const ( PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + PERF_SAMPLE_BRANCH_ABORT_TX = 0x80 + PERF_SAMPLE_BRANCH_IN_TX = 0x100 + PERF_SAMPLE_BRANCH_NO_TX = 0x200 + PERF_SAMPLE_BRANCH_COND = 0x400 + PERF_SAMPLE_BRANCH_CALL_STACK = 0x800 + PERF_SAMPLE_BRANCH_IND_JUMP = 0x1000 + PERF_SAMPLE_BRANCH_CALL = 0x2000 + PERF_SAMPLE_BRANCH_NO_FLAGS = 0x4000 + PERF_SAMPLE_BRANCH_NO_CYCLES = 0x8000 + PERF_SAMPLE_BRANCH_TYPE_SAVE = 0x10000 PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 PERF_FORMAT_ID = 0x4 PERF_FORMAT_GROUP = 0x8 - PERF_RECORD_MMAP = 0x1 - PERF_RECORD_LOST = 0x2 - PERF_RECORD_COMM = 0x3 - PERF_RECORD_EXIT = 0x4 - PERF_RECORD_THROTTLE = 0x5 - PERF_RECORD_UNTHROTTLE = 0x6 - PERF_RECORD_FORK = 0x7 - PERF_RECORD_READ = 0x8 - PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP2 = 0xa + PERF_RECORD_AUX = 0xb + PERF_RECORD_ITRACE_START = 0xc + PERF_RECORD_LOST_SAMPLES = 0xd + PERF_RECORD_SWITCH = 0xe + PERF_RECORD_SWITCH_CPU_WIDE = 0xf + PERF_RECORD_NAMESPACES = 0x10 PERF_CONTEXT_HV = -0x20 PERF_CONTEXT_KERNEL = -0x80 @@ -1124,6 +1195,7 @@ const ( PERF_FLAG_FD_NO_GROUP = 0x1 PERF_FLAG_FD_OUTPUT = 0x2 PERF_FLAG_PID_CGROUP = 0x4 + PERF_FLAG_FD_CLOEXEC = 0x8 ) const ( @@ -1381,6 +1453,21 @@ type TpacketBlockDesc struct { Hdr [40]byte } +type TpacketBDTS struct { + Sec uint32 + Usec uint32 +} + +type TpacketHdrV1 struct { + Block_status uint32 + Num_pkts uint32 + Offset_to_first_pkt uint32 + Blk_len uint32 + Seq_num uint64 + Ts_first_pkt TpacketBDTS + Ts_last_pkt TpacketBDTS +} + type TpacketReq struct { Block_size uint32 Block_nr uint32 @@ -1429,6 +1516,9 @@ const ( SizeofTpacketHdr = 0x20 SizeofTpacket2Hdr = 0x20 SizeofTpacket3Hdr = 0x30 + + SizeofTpacketStats = 0x8 + SizeofTpacketStatsV3 = 0xc ) const ( @@ -2045,3 +2135,183 @@ type SockExtendedErr struct { Info uint32 Data uint32 } + +type FanotifyEventMetadata struct { + Event_len uint32 + Vers uint8 + Reserved uint8 + Metadata_len uint16 + Mask uint64 + Fd int32 + Pid int32 +} + +type FanotifyResponse struct { + Fd int32 + Response uint32 +} + +const ( + CRYPTO_MSG_BASE = 0x10 + CRYPTO_MSG_NEWALG = 0x10 + CRYPTO_MSG_DELALG = 0x11 + CRYPTO_MSG_UPDATEALG = 0x12 + CRYPTO_MSG_GETALG = 0x13 + CRYPTO_MSG_DELRNG = 0x14 + CRYPTO_MSG_GETSTAT = 0x15 +) + +const ( + CRYPTOCFGA_UNSPEC = 0x0 + CRYPTOCFGA_PRIORITY_VAL = 0x1 + CRYPTOCFGA_REPORT_LARVAL = 0x2 + CRYPTOCFGA_REPORT_HASH = 0x3 + CRYPTOCFGA_REPORT_BLKCIPHER = 0x4 + CRYPTOCFGA_REPORT_AEAD = 0x5 + CRYPTOCFGA_REPORT_COMPRESS = 0x6 + CRYPTOCFGA_REPORT_RNG = 0x7 + CRYPTOCFGA_REPORT_CIPHER = 0x8 + CRYPTOCFGA_REPORT_AKCIPHER = 0x9 + CRYPTOCFGA_REPORT_KPP = 0xa + CRYPTOCFGA_REPORT_ACOMP = 0xb + CRYPTOCFGA_STAT_LARVAL = 0xc + CRYPTOCFGA_STAT_HASH = 0xd + CRYPTOCFGA_STAT_BLKCIPHER = 0xe + CRYPTOCFGA_STAT_AEAD = 0xf + CRYPTOCFGA_STAT_COMPRESS = 0x10 + CRYPTOCFGA_STAT_RNG = 0x11 + CRYPTOCFGA_STAT_CIPHER = 0x12 + CRYPTOCFGA_STAT_AKCIPHER = 0x13 + CRYPTOCFGA_STAT_KPP = 0x14 + CRYPTOCFGA_STAT_ACOMP = 0x15 +) + +type CryptoUserAlg struct { + Name [64]uint8 + Driver_name [64]uint8 + Module_name [64]uint8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]uint8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]uint8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]uint8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]uint8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]uint8 +} + +type CryptoReportLarval struct { + Type [64]uint8 +} + +type CryptoReportHash struct { + Type [64]uint8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]uint8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]uint8 + Geniv [64]uint8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]uint8 + Geniv [64]uint8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]uint8 +} + +type CryptoReportRNG struct { + Type [64]uint8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]uint8 +} + +type CryptoReportKPP struct { + Type [64]uint8 +} + +type CryptoReportAcomp struct { + Type [64]uint8 +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go index 675c596880..774d5c3eb7 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -445,139 +445,181 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_INFO_KIND = 0x1 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_NUM_VF = 0x15 - IFLA_VFINFO_LIST = 0x16 - IFLA_STATS64 = 0x17 - IFLA_VF_PORTS = 0x18 - IFLA_PORT_SELF = 0x19 - IFLA_AF_SPEC = 0x1a - IFLA_GROUP = 0x1b - IFLA_NET_NS_FD = 0x1c - IFLA_EXT_MASK = 0x1d - IFLA_PROMISCUITY = 0x1e - IFLA_NUM_TX_QUEUES = 0x1f - IFLA_NUM_RX_QUEUES = 0x20 - IFLA_CARRIER = 0x21 - IFLA_PHYS_PORT_ID = 0x22 - IFLA_CARRIER_CHANGES = 0x23 - IFLA_PHYS_SWITCH_ID = 0x24 - IFLA_LINK_NETNSID = 0x25 - IFLA_PHYS_PORT_NAME = 0x26 - IFLA_PROTO_DOWN = 0x27 - IFLA_GSO_MAX_SEGS = 0x28 - IFLA_GSO_MAX_SIZE = 0x29 - IFLA_PAD = 0x2a - IFLA_XDP = 0x2b - IFLA_EVENT = 0x2c - IFLA_NEW_NETNSID = 0x2d - IFLA_IF_NETNSID = 0x2e - IFLA_MAX = 0x33 - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTA_MARK = 0x10 - RTA_MFC_STATS = 0x11 - RTA_VIA = 0x12 - RTA_NEWDST = 0x13 - RTA_PREF = 0x14 - RTA_ENCAP_TYPE = 0x15 - RTA_ENCAP = 0x16 - RTA_EXPIRES = 0x17 - RTA_PAD = 0x18 - RTA_UID = 0x19 - RTA_TTL_PROPAGATE = 0x1a - RTA_IP_PROTO = 0x1b - RTA_SPORT = 0x1c - RTA_DPORT = 0x1d - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 - SizeofNdUseroptmsg = 0x10 + NDA_UNSPEC = 0x0 + NDA_DST = 0x1 + NDA_LLADDR = 0x2 + NDA_CACHEINFO = 0x3 + NDA_PROBES = 0x4 + NDA_VLAN = 0x5 + NDA_PORT = 0x6 + NDA_VNI = 0x7 + NDA_IFINDEX = 0x8 + NDA_MASTER = 0x9 + NDA_LINK_NETNSID = 0xa + NDA_SRC_VNI = 0xb + NTF_USE = 0x1 + NTF_SELF = 0x2 + NTF_MASTER = 0x4 + NTF_PROXY = 0x8 + NTF_EXT_LEARNED = 0x10 + NTF_OFFLOADED = 0x20 + NTF_ROUTER = 0x80 + NUD_INCOMPLETE = 0x1 + NUD_REACHABLE = 0x2 + NUD_STALE = 0x4 + NUD_DELAY = 0x8 + NUD_PROBE = 0x10 + NUD_FAILED = 0x20 + NUD_NOARP = 0x40 + NUD_PERMANENT = 0x80 + NUD_NONE = 0x0 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFA_FLAGS = 0x8 + IFA_RT_PRIORITY = 0x9 + IFA_TARGET_NETNSID = 0xa + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_TARGET_NETNSID = 0x2e + IFLA_CARRIER_UP_COUNT = 0x2f + IFLA_CARRIER_DOWN_COUNT = 0x30 + IFLA_NEW_IFINDEX = 0x31 + IFLA_MIN_MTU = 0x32 + IFLA_MAX_MTU = 0x33 + IFLA_MAX = 0x33 + IFLA_INFO_KIND = 0x1 + IFLA_INFO_DATA = 0x2 + IFLA_INFO_XSTATS = 0x3 + IFLA_INFO_SLAVE_KIND = 0x4 + IFLA_INFO_SLAVE_DATA = 0x5 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 + SizeofNdUseroptmsg = 0x10 + SizeofNdMsg = 0xc ) type NlMsghdr struct { @@ -654,6 +696,16 @@ type NdUseroptmsg struct { Pad3 uint32 } +type NdMsg struct { + Family uint8 + Pad1 uint8 + Pad2 uint16 + Ifindex int32 + State uint16 + Flags uint8 + Type uint8 +} + const ( SizeofSockFilter = 0x8 SizeofSockFprog = 0x10 @@ -990,7 +1042,8 @@ type PerfEventAttr struct { Clockid int32 Sample_regs_intr uint64 Aux_watermark uint32 - _ uint32 + Sample_max_stack uint16 + _ uint16 } type PerfEventMmapPage struct { @@ -1093,6 +1146,7 @@ const ( PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 PERF_COUNT_SW_EMULATION_FAULTS = 0x8 PERF_COUNT_SW_DUMMY = 0x9 + PERF_COUNT_SW_BPF_OUTPUT = 0xa PERF_SAMPLE_IP = 0x1 PERF_SAMPLE_TID = 0x2 @@ -1114,21 +1168,38 @@ const ( PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + PERF_SAMPLE_BRANCH_ABORT_TX = 0x80 + PERF_SAMPLE_BRANCH_IN_TX = 0x100 + PERF_SAMPLE_BRANCH_NO_TX = 0x200 + PERF_SAMPLE_BRANCH_COND = 0x400 + PERF_SAMPLE_BRANCH_CALL_STACK = 0x800 + PERF_SAMPLE_BRANCH_IND_JUMP = 0x1000 + PERF_SAMPLE_BRANCH_CALL = 0x2000 + PERF_SAMPLE_BRANCH_NO_FLAGS = 0x4000 + PERF_SAMPLE_BRANCH_NO_CYCLES = 0x8000 + PERF_SAMPLE_BRANCH_TYPE_SAVE = 0x10000 PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 PERF_FORMAT_ID = 0x4 PERF_FORMAT_GROUP = 0x8 - PERF_RECORD_MMAP = 0x1 - PERF_RECORD_LOST = 0x2 - PERF_RECORD_COMM = 0x3 - PERF_RECORD_EXIT = 0x4 - PERF_RECORD_THROTTLE = 0x5 - PERF_RECORD_UNTHROTTLE = 0x6 - PERF_RECORD_FORK = 0x7 - PERF_RECORD_READ = 0x8 - PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP2 = 0xa + PERF_RECORD_AUX = 0xb + PERF_RECORD_ITRACE_START = 0xc + PERF_RECORD_LOST_SAMPLES = 0xd + PERF_RECORD_SWITCH = 0xe + PERF_RECORD_SWITCH_CPU_WIDE = 0xf + PERF_RECORD_NAMESPACES = 0x10 PERF_CONTEXT_HV = -0x20 PERF_CONTEXT_KERNEL = -0x80 @@ -1141,6 +1212,7 @@ const ( PERF_FLAG_FD_NO_GROUP = 0x1 PERF_FLAG_FD_OUTPUT = 0x2 PERF_FLAG_PID_CGROUP = 0x4 + PERF_FLAG_FD_CLOEXEC = 0x8 ) const ( @@ -1398,6 +1470,21 @@ type TpacketBlockDesc struct { Hdr [40]byte } +type TpacketBDTS struct { + Sec uint32 + Usec uint32 +} + +type TpacketHdrV1 struct { + Block_status uint32 + Num_pkts uint32 + Offset_to_first_pkt uint32 + Blk_len uint32 + Seq_num uint64 + Ts_first_pkt TpacketBDTS + Ts_last_pkt TpacketBDTS +} + type TpacketReq struct { Block_size uint32 Block_nr uint32 @@ -1446,6 +1533,9 @@ const ( SizeofTpacketHdr = 0x20 SizeofTpacket2Hdr = 0x20 SizeofTpacket3Hdr = 0x30 + + SizeofTpacketStats = 0x8 + SizeofTpacketStatsV3 = 0xc ) const ( @@ -2062,3 +2152,183 @@ type SockExtendedErr struct { Info uint32 Data uint32 } + +type FanotifyEventMetadata struct { + Event_len uint32 + Vers uint8 + Reserved uint8 + Metadata_len uint16 + Mask uint64 + Fd int32 + Pid int32 +} + +type FanotifyResponse struct { + Fd int32 + Response uint32 +} + +const ( + CRYPTO_MSG_BASE = 0x10 + CRYPTO_MSG_NEWALG = 0x10 + CRYPTO_MSG_DELALG = 0x11 + CRYPTO_MSG_UPDATEALG = 0x12 + CRYPTO_MSG_GETALG = 0x13 + CRYPTO_MSG_DELRNG = 0x14 + CRYPTO_MSG_GETSTAT = 0x15 +) + +const ( + CRYPTOCFGA_UNSPEC = 0x0 + CRYPTOCFGA_PRIORITY_VAL = 0x1 + CRYPTOCFGA_REPORT_LARVAL = 0x2 + CRYPTOCFGA_REPORT_HASH = 0x3 + CRYPTOCFGA_REPORT_BLKCIPHER = 0x4 + CRYPTOCFGA_REPORT_AEAD = 0x5 + CRYPTOCFGA_REPORT_COMPRESS = 0x6 + CRYPTOCFGA_REPORT_RNG = 0x7 + CRYPTOCFGA_REPORT_CIPHER = 0x8 + CRYPTOCFGA_REPORT_AKCIPHER = 0x9 + CRYPTOCFGA_REPORT_KPP = 0xa + CRYPTOCFGA_REPORT_ACOMP = 0xb + CRYPTOCFGA_STAT_LARVAL = 0xc + CRYPTOCFGA_STAT_HASH = 0xd + CRYPTOCFGA_STAT_BLKCIPHER = 0xe + CRYPTOCFGA_STAT_AEAD = 0xf + CRYPTOCFGA_STAT_COMPRESS = 0x10 + CRYPTOCFGA_STAT_RNG = 0x11 + CRYPTOCFGA_STAT_CIPHER = 0x12 + CRYPTOCFGA_STAT_AKCIPHER = 0x13 + CRYPTOCFGA_STAT_KPP = 0x14 + CRYPTOCFGA_STAT_ACOMP = 0x15 +) + +type CryptoUserAlg struct { + Name [64]uint8 + Driver_name [64]uint8 + Module_name [64]uint8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]uint8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]uint8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]uint8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]uint8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]uint8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]uint8 +} + +type CryptoReportLarval struct { + Type [64]uint8 +} + +type CryptoReportHash struct { + Type [64]uint8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]uint8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]uint8 + Geniv [64]uint8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]uint8 + Geniv [64]uint8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]uint8 +} + +type CryptoReportRNG struct { + Type [64]uint8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]uint8 +} + +type CryptoReportKPP struct { + Type [64]uint8 +} + +type CryptoReportAcomp struct { + Type [64]uint8 +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go index 9f2cf0dfd7..3b7747ed96 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -444,139 +444,181 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_INFO_KIND = 0x1 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_NUM_VF = 0x15 - IFLA_VFINFO_LIST = 0x16 - IFLA_STATS64 = 0x17 - IFLA_VF_PORTS = 0x18 - IFLA_PORT_SELF = 0x19 - IFLA_AF_SPEC = 0x1a - IFLA_GROUP = 0x1b - IFLA_NET_NS_FD = 0x1c - IFLA_EXT_MASK = 0x1d - IFLA_PROMISCUITY = 0x1e - IFLA_NUM_TX_QUEUES = 0x1f - IFLA_NUM_RX_QUEUES = 0x20 - IFLA_CARRIER = 0x21 - IFLA_PHYS_PORT_ID = 0x22 - IFLA_CARRIER_CHANGES = 0x23 - IFLA_PHYS_SWITCH_ID = 0x24 - IFLA_LINK_NETNSID = 0x25 - IFLA_PHYS_PORT_NAME = 0x26 - IFLA_PROTO_DOWN = 0x27 - IFLA_GSO_MAX_SEGS = 0x28 - IFLA_GSO_MAX_SIZE = 0x29 - IFLA_PAD = 0x2a - IFLA_XDP = 0x2b - IFLA_EVENT = 0x2c - IFLA_NEW_NETNSID = 0x2d - IFLA_IF_NETNSID = 0x2e - IFLA_MAX = 0x33 - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTA_MARK = 0x10 - RTA_MFC_STATS = 0x11 - RTA_VIA = 0x12 - RTA_NEWDST = 0x13 - RTA_PREF = 0x14 - RTA_ENCAP_TYPE = 0x15 - RTA_ENCAP = 0x16 - RTA_EXPIRES = 0x17 - RTA_PAD = 0x18 - RTA_UID = 0x19 - RTA_TTL_PROPAGATE = 0x1a - RTA_IP_PROTO = 0x1b - RTA_SPORT = 0x1c - RTA_DPORT = 0x1d - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 - SizeofNdUseroptmsg = 0x10 + NDA_UNSPEC = 0x0 + NDA_DST = 0x1 + NDA_LLADDR = 0x2 + NDA_CACHEINFO = 0x3 + NDA_PROBES = 0x4 + NDA_VLAN = 0x5 + NDA_PORT = 0x6 + NDA_VNI = 0x7 + NDA_IFINDEX = 0x8 + NDA_MASTER = 0x9 + NDA_LINK_NETNSID = 0xa + NDA_SRC_VNI = 0xb + NTF_USE = 0x1 + NTF_SELF = 0x2 + NTF_MASTER = 0x4 + NTF_PROXY = 0x8 + NTF_EXT_LEARNED = 0x10 + NTF_OFFLOADED = 0x20 + NTF_ROUTER = 0x80 + NUD_INCOMPLETE = 0x1 + NUD_REACHABLE = 0x2 + NUD_STALE = 0x4 + NUD_DELAY = 0x8 + NUD_PROBE = 0x10 + NUD_FAILED = 0x20 + NUD_NOARP = 0x40 + NUD_PERMANENT = 0x80 + NUD_NONE = 0x0 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFA_FLAGS = 0x8 + IFA_RT_PRIORITY = 0x9 + IFA_TARGET_NETNSID = 0xa + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_TARGET_NETNSID = 0x2e + IFLA_CARRIER_UP_COUNT = 0x2f + IFLA_CARRIER_DOWN_COUNT = 0x30 + IFLA_NEW_IFINDEX = 0x31 + IFLA_MIN_MTU = 0x32 + IFLA_MAX_MTU = 0x33 + IFLA_MAX = 0x33 + IFLA_INFO_KIND = 0x1 + IFLA_INFO_DATA = 0x2 + IFLA_INFO_XSTATS = 0x3 + IFLA_INFO_SLAVE_KIND = 0x4 + IFLA_INFO_SLAVE_DATA = 0x5 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 + SizeofNdUseroptmsg = 0x10 + SizeofNdMsg = 0xc ) type NlMsghdr struct { @@ -653,6 +695,16 @@ type NdUseroptmsg struct { Pad3 uint32 } +type NdMsg struct { + Family uint8 + Pad1 uint8 + Pad2 uint16 + Ifindex int32 + State uint16 + Flags uint8 + Type uint8 +} + const ( SizeofSockFilter = 0x8 SizeofSockFprog = 0x10 @@ -986,7 +1038,8 @@ type PerfEventAttr struct { Clockid int32 Sample_regs_intr uint64 Aux_watermark uint32 - _ uint32 + Sample_max_stack uint16 + _ uint16 } type PerfEventMmapPage struct { @@ -1089,6 +1142,7 @@ const ( PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 PERF_COUNT_SW_EMULATION_FAULTS = 0x8 PERF_COUNT_SW_DUMMY = 0x9 + PERF_COUNT_SW_BPF_OUTPUT = 0xa PERF_SAMPLE_IP = 0x1 PERF_SAMPLE_TID = 0x2 @@ -1110,21 +1164,38 @@ const ( PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + PERF_SAMPLE_BRANCH_ABORT_TX = 0x80 + PERF_SAMPLE_BRANCH_IN_TX = 0x100 + PERF_SAMPLE_BRANCH_NO_TX = 0x200 + PERF_SAMPLE_BRANCH_COND = 0x400 + PERF_SAMPLE_BRANCH_CALL_STACK = 0x800 + PERF_SAMPLE_BRANCH_IND_JUMP = 0x1000 + PERF_SAMPLE_BRANCH_CALL = 0x2000 + PERF_SAMPLE_BRANCH_NO_FLAGS = 0x4000 + PERF_SAMPLE_BRANCH_NO_CYCLES = 0x8000 + PERF_SAMPLE_BRANCH_TYPE_SAVE = 0x10000 PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 PERF_FORMAT_ID = 0x4 PERF_FORMAT_GROUP = 0x8 - PERF_RECORD_MMAP = 0x1 - PERF_RECORD_LOST = 0x2 - PERF_RECORD_COMM = 0x3 - PERF_RECORD_EXIT = 0x4 - PERF_RECORD_THROTTLE = 0x5 - PERF_RECORD_UNTHROTTLE = 0x6 - PERF_RECORD_FORK = 0x7 - PERF_RECORD_READ = 0x8 - PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP2 = 0xa + PERF_RECORD_AUX = 0xb + PERF_RECORD_ITRACE_START = 0xc + PERF_RECORD_LOST_SAMPLES = 0xd + PERF_RECORD_SWITCH = 0xe + PERF_RECORD_SWITCH_CPU_WIDE = 0xf + PERF_RECORD_NAMESPACES = 0x10 PERF_CONTEXT_HV = -0x20 PERF_CONTEXT_KERNEL = -0x80 @@ -1137,6 +1208,7 @@ const ( PERF_FLAG_FD_NO_GROUP = 0x1 PERF_FLAG_FD_OUTPUT = 0x2 PERF_FLAG_PID_CGROUP = 0x4 + PERF_FLAG_FD_CLOEXEC = 0x8 ) const ( @@ -1395,6 +1467,21 @@ type TpacketBlockDesc struct { Hdr [40]byte } +type TpacketBDTS struct { + Sec uint32 + Usec uint32 +} + +type TpacketHdrV1 struct { + Block_status uint32 + Num_pkts uint32 + Offset_to_first_pkt uint32 + Blk_len uint32 + Seq_num uint64 + Ts_first_pkt TpacketBDTS + Ts_last_pkt TpacketBDTS +} + type TpacketReq struct { Block_size uint32 Block_nr uint32 @@ -1443,6 +1530,9 @@ const ( SizeofTpacketHdr = 0x20 SizeofTpacket2Hdr = 0x20 SizeofTpacket3Hdr = 0x30 + + SizeofTpacketStats = 0x8 + SizeofTpacketStatsV3 = 0xc ) const ( @@ -2059,3 +2149,183 @@ type SockExtendedErr struct { Info uint32 Data uint32 } + +type FanotifyEventMetadata struct { + Event_len uint32 + Vers uint8 + Reserved uint8 + Metadata_len uint16 + Mask uint64 + Fd int32 + Pid int32 +} + +type FanotifyResponse struct { + Fd int32 + Response uint32 +} + +const ( + CRYPTO_MSG_BASE = 0x10 + CRYPTO_MSG_NEWALG = 0x10 + CRYPTO_MSG_DELALG = 0x11 + CRYPTO_MSG_UPDATEALG = 0x12 + CRYPTO_MSG_GETALG = 0x13 + CRYPTO_MSG_DELRNG = 0x14 + CRYPTO_MSG_GETSTAT = 0x15 +) + +const ( + CRYPTOCFGA_UNSPEC = 0x0 + CRYPTOCFGA_PRIORITY_VAL = 0x1 + CRYPTOCFGA_REPORT_LARVAL = 0x2 + CRYPTOCFGA_REPORT_HASH = 0x3 + CRYPTOCFGA_REPORT_BLKCIPHER = 0x4 + CRYPTOCFGA_REPORT_AEAD = 0x5 + CRYPTOCFGA_REPORT_COMPRESS = 0x6 + CRYPTOCFGA_REPORT_RNG = 0x7 + CRYPTOCFGA_REPORT_CIPHER = 0x8 + CRYPTOCFGA_REPORT_AKCIPHER = 0x9 + CRYPTOCFGA_REPORT_KPP = 0xa + CRYPTOCFGA_REPORT_ACOMP = 0xb + CRYPTOCFGA_STAT_LARVAL = 0xc + CRYPTOCFGA_STAT_HASH = 0xd + CRYPTOCFGA_STAT_BLKCIPHER = 0xe + CRYPTOCFGA_STAT_AEAD = 0xf + CRYPTOCFGA_STAT_COMPRESS = 0x10 + CRYPTOCFGA_STAT_RNG = 0x11 + CRYPTOCFGA_STAT_CIPHER = 0x12 + CRYPTOCFGA_STAT_AKCIPHER = 0x13 + CRYPTOCFGA_STAT_KPP = 0x14 + CRYPTOCFGA_STAT_ACOMP = 0x15 +) + +type CryptoUserAlg struct { + Name [64]int8 + Driver_name [64]int8 + Module_name [64]int8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]int8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]int8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]int8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]int8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]int8 +} + +type CryptoReportLarval struct { + Type [64]int8 +} + +type CryptoReportHash struct { + Type [64]int8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]int8 +} + +type CryptoReportRNG struct { + Type [64]int8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]int8 +} + +type CryptoReportKPP struct { + Type [64]int8 +} + +type CryptoReportAcomp struct { + Type [64]int8 +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go index 68643903c9..c606f4776b 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -448,139 +448,181 @@ const ( ) const ( - IFA_UNSPEC = 0x0 - IFA_ADDRESS = 0x1 - IFA_LOCAL = 0x2 - IFA_LABEL = 0x3 - IFA_BROADCAST = 0x4 - IFA_ANYCAST = 0x5 - IFA_CACHEINFO = 0x6 - IFA_MULTICAST = 0x7 - IFLA_UNSPEC = 0x0 - IFLA_ADDRESS = 0x1 - IFLA_BROADCAST = 0x2 - IFLA_IFNAME = 0x3 - IFLA_INFO_KIND = 0x1 - IFLA_MTU = 0x4 - IFLA_LINK = 0x5 - IFLA_QDISC = 0x6 - IFLA_STATS = 0x7 - IFLA_COST = 0x8 - IFLA_PRIORITY = 0x9 - IFLA_MASTER = 0xa - IFLA_WIRELESS = 0xb - IFLA_PROTINFO = 0xc - IFLA_TXQLEN = 0xd - IFLA_MAP = 0xe - IFLA_WEIGHT = 0xf - IFLA_OPERSTATE = 0x10 - IFLA_LINKMODE = 0x11 - IFLA_LINKINFO = 0x12 - IFLA_NET_NS_PID = 0x13 - IFLA_IFALIAS = 0x14 - IFLA_NUM_VF = 0x15 - IFLA_VFINFO_LIST = 0x16 - IFLA_STATS64 = 0x17 - IFLA_VF_PORTS = 0x18 - IFLA_PORT_SELF = 0x19 - IFLA_AF_SPEC = 0x1a - IFLA_GROUP = 0x1b - IFLA_NET_NS_FD = 0x1c - IFLA_EXT_MASK = 0x1d - IFLA_PROMISCUITY = 0x1e - IFLA_NUM_TX_QUEUES = 0x1f - IFLA_NUM_RX_QUEUES = 0x20 - IFLA_CARRIER = 0x21 - IFLA_PHYS_PORT_ID = 0x22 - IFLA_CARRIER_CHANGES = 0x23 - IFLA_PHYS_SWITCH_ID = 0x24 - IFLA_LINK_NETNSID = 0x25 - IFLA_PHYS_PORT_NAME = 0x26 - IFLA_PROTO_DOWN = 0x27 - IFLA_GSO_MAX_SEGS = 0x28 - IFLA_GSO_MAX_SIZE = 0x29 - IFLA_PAD = 0x2a - IFLA_XDP = 0x2b - IFLA_EVENT = 0x2c - IFLA_NEW_NETNSID = 0x2d - IFLA_IF_NETNSID = 0x2e - IFLA_MAX = 0x33 - RT_SCOPE_UNIVERSE = 0x0 - RT_SCOPE_SITE = 0xc8 - RT_SCOPE_LINK = 0xfd - RT_SCOPE_HOST = 0xfe - RT_SCOPE_NOWHERE = 0xff - RT_TABLE_UNSPEC = 0x0 - RT_TABLE_COMPAT = 0xfc - RT_TABLE_DEFAULT = 0xfd - RT_TABLE_MAIN = 0xfe - RT_TABLE_LOCAL = 0xff - RT_TABLE_MAX = 0xffffffff - RTA_UNSPEC = 0x0 - RTA_DST = 0x1 - RTA_SRC = 0x2 - RTA_IIF = 0x3 - RTA_OIF = 0x4 - RTA_GATEWAY = 0x5 - RTA_PRIORITY = 0x6 - RTA_PREFSRC = 0x7 - RTA_METRICS = 0x8 - RTA_MULTIPATH = 0x9 - RTA_FLOW = 0xb - RTA_CACHEINFO = 0xc - RTA_TABLE = 0xf - RTA_MARK = 0x10 - RTA_MFC_STATS = 0x11 - RTA_VIA = 0x12 - RTA_NEWDST = 0x13 - RTA_PREF = 0x14 - RTA_ENCAP_TYPE = 0x15 - RTA_ENCAP = 0x16 - RTA_EXPIRES = 0x17 - RTA_PAD = 0x18 - RTA_UID = 0x19 - RTA_TTL_PROPAGATE = 0x1a - RTA_IP_PROTO = 0x1b - RTA_SPORT = 0x1c - RTA_DPORT = 0x1d - RTN_UNSPEC = 0x0 - RTN_UNICAST = 0x1 - RTN_LOCAL = 0x2 - RTN_BROADCAST = 0x3 - RTN_ANYCAST = 0x4 - RTN_MULTICAST = 0x5 - RTN_BLACKHOLE = 0x6 - RTN_UNREACHABLE = 0x7 - RTN_PROHIBIT = 0x8 - RTN_THROW = 0x9 - RTN_NAT = 0xa - RTN_XRESOLVE = 0xb - RTNLGRP_NONE = 0x0 - RTNLGRP_LINK = 0x1 - RTNLGRP_NOTIFY = 0x2 - RTNLGRP_NEIGH = 0x3 - RTNLGRP_TC = 0x4 - RTNLGRP_IPV4_IFADDR = 0x5 - RTNLGRP_IPV4_MROUTE = 0x6 - RTNLGRP_IPV4_ROUTE = 0x7 - RTNLGRP_IPV4_RULE = 0x8 - RTNLGRP_IPV6_IFADDR = 0x9 - RTNLGRP_IPV6_MROUTE = 0xa - RTNLGRP_IPV6_ROUTE = 0xb - RTNLGRP_IPV6_IFINFO = 0xc - RTNLGRP_IPV6_PREFIX = 0x12 - RTNLGRP_IPV6_RULE = 0x13 - RTNLGRP_ND_USEROPT = 0x14 - SizeofNlMsghdr = 0x10 - SizeofNlMsgerr = 0x14 - SizeofRtGenmsg = 0x1 - SizeofNlAttr = 0x4 - SizeofRtAttr = 0x4 - SizeofIfInfomsg = 0x10 - SizeofIfAddrmsg = 0x8 - SizeofRtMsg = 0xc - SizeofRtNexthop = 0x8 - SizeofNdUseroptmsg = 0x10 + NDA_UNSPEC = 0x0 + NDA_DST = 0x1 + NDA_LLADDR = 0x2 + NDA_CACHEINFO = 0x3 + NDA_PROBES = 0x4 + NDA_VLAN = 0x5 + NDA_PORT = 0x6 + NDA_VNI = 0x7 + NDA_IFINDEX = 0x8 + NDA_MASTER = 0x9 + NDA_LINK_NETNSID = 0xa + NDA_SRC_VNI = 0xb + NTF_USE = 0x1 + NTF_SELF = 0x2 + NTF_MASTER = 0x4 + NTF_PROXY = 0x8 + NTF_EXT_LEARNED = 0x10 + NTF_OFFLOADED = 0x20 + NTF_ROUTER = 0x80 + NUD_INCOMPLETE = 0x1 + NUD_REACHABLE = 0x2 + NUD_STALE = 0x4 + NUD_DELAY = 0x8 + NUD_PROBE = 0x10 + NUD_FAILED = 0x20 + NUD_NOARP = 0x40 + NUD_PERMANENT = 0x80 + NUD_NONE = 0x0 + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFA_FLAGS = 0x8 + IFA_RT_PRIORITY = 0x9 + IFA_TARGET_NETNSID = 0xa + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_TARGET_NETNSID = 0x2e + IFLA_CARRIER_UP_COUNT = 0x2f + IFLA_CARRIER_DOWN_COUNT = 0x30 + IFLA_NEW_IFINDEX = 0x31 + IFLA_MIN_MTU = 0x32 + IFLA_MAX_MTU = 0x33 + IFLA_MAX = 0x33 + IFLA_INFO_KIND = 0x1 + IFLA_INFO_DATA = 0x2 + IFLA_INFO_XSTATS = 0x3 + IFLA_INFO_SLAVE_KIND = 0x4 + IFLA_INFO_SLAVE_DATA = 0x5 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 + SizeofNdUseroptmsg = 0x10 + SizeofNdMsg = 0xc ) type NlMsghdr struct { @@ -657,6 +699,16 @@ type NdUseroptmsg struct { Pad3 uint32 } +type NdMsg struct { + Family uint8 + Pad1 uint8 + Pad2 uint16 + Ifindex int32 + State uint16 + Flags uint8 + Type uint8 +} + const ( SizeofSockFilter = 0x8 SizeofSockFprog = 0x10 @@ -968,7 +1020,8 @@ type PerfEventAttr struct { Clockid int32 Sample_regs_intr uint64 Aux_watermark uint32 - _ uint32 + Sample_max_stack uint16 + _ uint16 } type PerfEventMmapPage struct { @@ -1071,6 +1124,7 @@ const ( PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 PERF_COUNT_SW_EMULATION_FAULTS = 0x8 PERF_COUNT_SW_DUMMY = 0x9 + PERF_COUNT_SW_BPF_OUTPUT = 0xa PERF_SAMPLE_IP = 0x1 PERF_SAMPLE_TID = 0x2 @@ -1092,21 +1146,38 @@ const ( PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + PERF_SAMPLE_BRANCH_ABORT_TX = 0x80 + PERF_SAMPLE_BRANCH_IN_TX = 0x100 + PERF_SAMPLE_BRANCH_NO_TX = 0x200 + PERF_SAMPLE_BRANCH_COND = 0x400 + PERF_SAMPLE_BRANCH_CALL_STACK = 0x800 + PERF_SAMPLE_BRANCH_IND_JUMP = 0x1000 + PERF_SAMPLE_BRANCH_CALL = 0x2000 + PERF_SAMPLE_BRANCH_NO_FLAGS = 0x4000 + PERF_SAMPLE_BRANCH_NO_CYCLES = 0x8000 + PERF_SAMPLE_BRANCH_TYPE_SAVE = 0x10000 PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 PERF_FORMAT_ID = 0x4 PERF_FORMAT_GROUP = 0x8 - PERF_RECORD_MMAP = 0x1 - PERF_RECORD_LOST = 0x2 - PERF_RECORD_COMM = 0x3 - PERF_RECORD_EXIT = 0x4 - PERF_RECORD_THROTTLE = 0x5 - PERF_RECORD_UNTHROTTLE = 0x6 - PERF_RECORD_FORK = 0x7 - PERF_RECORD_READ = 0x8 - PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + PERF_RECORD_MMAP2 = 0xa + PERF_RECORD_AUX = 0xb + PERF_RECORD_ITRACE_START = 0xc + PERF_RECORD_LOST_SAMPLES = 0xd + PERF_RECORD_SWITCH = 0xe + PERF_RECORD_SWITCH_CPU_WIDE = 0xf + PERF_RECORD_NAMESPACES = 0x10 PERF_CONTEXT_HV = -0x20 PERF_CONTEXT_KERNEL = -0x80 @@ -1119,6 +1190,7 @@ const ( PERF_FLAG_FD_NO_GROUP = 0x1 PERF_FLAG_FD_OUTPUT = 0x2 PERF_FLAG_PID_CGROUP = 0x4 + PERF_FLAG_FD_CLOEXEC = 0x8 ) const ( @@ -1376,6 +1448,21 @@ type TpacketBlockDesc struct { Hdr [40]byte } +type TpacketBDTS struct { + Sec uint32 + Usec uint32 +} + +type TpacketHdrV1 struct { + Block_status uint32 + Num_pkts uint32 + Offset_to_first_pkt uint32 + Blk_len uint32 + Seq_num uint64 + Ts_first_pkt TpacketBDTS + Ts_last_pkt TpacketBDTS +} + type TpacketReq struct { Block_size uint32 Block_nr uint32 @@ -1424,6 +1511,9 @@ const ( SizeofTpacketHdr = 0x20 SizeofTpacket2Hdr = 0x20 SizeofTpacket3Hdr = 0x30 + + SizeofTpacketStats = 0x8 + SizeofTpacketStatsV3 = 0xc ) const ( @@ -2040,3 +2130,183 @@ type SockExtendedErr struct { Info uint32 Data uint32 } + +type FanotifyEventMetadata struct { + Event_len uint32 + Vers uint8 + Reserved uint8 + Metadata_len uint16 + Mask uint64 + Fd int32 + Pid int32 +} + +type FanotifyResponse struct { + Fd int32 + Response uint32 +} + +const ( + CRYPTO_MSG_BASE = 0x10 + CRYPTO_MSG_NEWALG = 0x10 + CRYPTO_MSG_DELALG = 0x11 + CRYPTO_MSG_UPDATEALG = 0x12 + CRYPTO_MSG_GETALG = 0x13 + CRYPTO_MSG_DELRNG = 0x14 + CRYPTO_MSG_GETSTAT = 0x15 +) + +const ( + CRYPTOCFGA_UNSPEC = 0x0 + CRYPTOCFGA_PRIORITY_VAL = 0x1 + CRYPTOCFGA_REPORT_LARVAL = 0x2 + CRYPTOCFGA_REPORT_HASH = 0x3 + CRYPTOCFGA_REPORT_BLKCIPHER = 0x4 + CRYPTOCFGA_REPORT_AEAD = 0x5 + CRYPTOCFGA_REPORT_COMPRESS = 0x6 + CRYPTOCFGA_REPORT_RNG = 0x7 + CRYPTOCFGA_REPORT_CIPHER = 0x8 + CRYPTOCFGA_REPORT_AKCIPHER = 0x9 + CRYPTOCFGA_REPORT_KPP = 0xa + CRYPTOCFGA_REPORT_ACOMP = 0xb + CRYPTOCFGA_STAT_LARVAL = 0xc + CRYPTOCFGA_STAT_HASH = 0xd + CRYPTOCFGA_STAT_BLKCIPHER = 0xe + CRYPTOCFGA_STAT_AEAD = 0xf + CRYPTOCFGA_STAT_COMPRESS = 0x10 + CRYPTOCFGA_STAT_RNG = 0x11 + CRYPTOCFGA_STAT_CIPHER = 0x12 + CRYPTOCFGA_STAT_AKCIPHER = 0x13 + CRYPTOCFGA_STAT_KPP = 0x14 + CRYPTOCFGA_STAT_ACOMP = 0x15 +) + +type CryptoUserAlg struct { + Name [64]int8 + Driver_name [64]int8 + Module_name [64]int8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]int8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]int8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]int8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]int8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]int8 +} + +type CryptoReportLarval struct { + Type [64]int8 +} + +type CryptoReportHash struct { + Type [64]int8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]int8 +} + +type CryptoReportRNG struct { + Type [64]int8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]int8 +} + +type CryptoReportKPP struct { + Type [64]int8 +} + +type CryptoReportAcomp struct { + Type [64]int8 +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go index 8b37d83992..900fb44622 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go @@ -558,3 +558,13 @@ type Uvmexp struct { Fpswtch int32 Kmapent int32 } + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Tickadj int32 + Stathz int32 + Profhz int32 +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go index 6efea46355..028fa78d74 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go @@ -558,3 +558,13 @@ type Uvmexp struct { Fpswtch int32 Kmapent int32 } + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Tickadj int32 + Stathz int32 + Profhz int32 +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go index 510efc3eaa..b45d5eedff 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go @@ -559,3 +559,13 @@ type Uvmexp struct { Fpswtch int32 Kmapent int32 } + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Tickadj int32 + Stathz int32 + Profhz int32 +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go new file mode 100644 index 0000000000..fa369a32a2 --- /dev/null +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go @@ -0,0 +1,564 @@ +// cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm64,openbsd + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Mode uint32 + Dev int32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev int32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + _ Timespec +} + +type Statfs_t struct { + F_flags uint32 + F_bsize uint32 + F_iosize uint32 + F_blocks uint64 + F_bfree uint64 + F_bavail int64 + F_files uint64 + F_ffree uint64 + F_favail int64 + F_syncwrites uint64 + F_syncreads uint64 + F_asyncwrites uint64 + F_asyncreads uint64 + F_fsid Fsid + F_namemax uint32 + F_owner uint32 + F_ctime uint64 + F_fstypename [16]int8 + F_mntonname [90]int8 + F_mntfromname [90]int8 + F_mntfromspec [90]int8 + _ [2]byte + Mount_info [160]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Namlen uint8 + _ [4]uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + PathMax = 0x400 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x20 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]uint32 +} + +const ( + SizeofIfMsghdr = 0xa8 + SizeofIfData = 0x90 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x1a + SizeofRtMsghdr = 0x60 + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Xflags int32 + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Mtu uint32 + Metric uint32 + Rdomain uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Oqdrops uint64 + Noproto uint64 + Capabilities uint32 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Metric int32 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + What uint16 + Name [16]int8 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Priority uint8 + Mpls uint8 + Addrs int32 + Flags int32 + Fmask int32 + Pid int32 + Seq int32 + Errno int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Pksent uint64 + Expire int64 + Locks uint32 + Mtu uint32 + Refcnt uint32 + Hopcount uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pad uint32 +} + +type Mclpool struct{} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [2]byte +} + +type BpfTimeval struct { + Sec uint32 + Usec uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_SYMLINK_NOFOLLOW = 0x2 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Sigset_t uint32 + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofUvmexp = 0x158 + +type Uvmexp struct { + Pagesize int32 + Pagemask int32 + Pageshift int32 + Npages int32 + Free int32 + Active int32 + Inactive int32 + Paging int32 + Wired int32 + Zeropages int32 + Reserve_pagedaemon int32 + Reserve_kernel int32 + Unused01 int32 + Vnodepages int32 + Vtextpages int32 + Freemin int32 + Freetarg int32 + Inactarg int32 + Wiredmax int32 + Anonmin int32 + Vtextmin int32 + Vnodemin int32 + Anonminpct int32 + Vtextminpct int32 + Vnodeminpct int32 + Nswapdev int32 + Swpages int32 + Swpginuse int32 + Swpgonly int32 + Nswget int32 + Nanon int32 + Unused05 int32 + Unused06 int32 + Faults int32 + Traps int32 + Intrs int32 + Swtch int32 + Softs int32 + Syscalls int32 + Pageins int32 + Unused07 int32 + Unused08 int32 + Pgswapin int32 + Pgswapout int32 + Forks int32 + Forks_ppwait int32 + Forks_sharevm int32 + Pga_zerohit int32 + Pga_zeromiss int32 + Unused09 int32 + Fltnoram int32 + Fltnoanon int32 + Fltnoamap int32 + Fltpgwait int32 + Fltpgrele int32 + Fltrelck int32 + Fltrelckok int32 + Fltanget int32 + Fltanretry int32 + Fltamcopy int32 + Fltnamap int32 + Fltnomap int32 + Fltlget int32 + Fltget int32 + Flt_anon int32 + Flt_acow int32 + Flt_obj int32 + Flt_prcopy int32 + Flt_przero int32 + Pdwoke int32 + Pdrevs int32 + Pdswout int32 + Pdfreed int32 + Pdscans int32 + Pdanscan int32 + Pdobscan int32 + Pdreact int32 + Pdbusy int32 + Pdpageouts int32 + Pdpending int32 + Pddeact int32 + Unused11 int32 + Unused12 int32 + Unused13 int32 + Fpswtch int32 + Kmapent int32 +} + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Tickadj int32 + Stathz int32 + Profhz int32 +} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/dll_windows.go b/src/cmd/vendor/golang.org/x/sys/windows/dll_windows.go index e92c05b213..ba67658db1 100644 --- a/src/cmd/vendor/golang.org/x/sys/windows/dll_windows.go +++ b/src/cmd/vendor/golang.org/x/sys/windows/dll_windows.go @@ -359,11 +359,11 @@ func loadLibraryEx(name string, system bool) (*DLL, error) { // trying to load "foo.dll" out of the system // folder, but LoadLibraryEx doesn't support // that yet on their system, so emulate it. - windir, _ := Getenv("WINDIR") // old var; apparently works on XP - if windir == "" { - return nil, errString("%WINDIR% not defined") + systemdir, err := GetSystemDirectory() + if err != nil { + return nil, err } - loadDLL = windir + "\\System32\\" + name + loadDLL = systemdir + "\\" + name } } h, err := LoadLibraryEx(loadDLL, 0, flags) diff --git a/src/cmd/vendor/golang.org/x/sys/windows/mkerrors.bash b/src/cmd/vendor/golang.org/x/sys/windows/mkerrors.bash new file mode 100644 index 0000000000..a70b24f398 --- /dev/null +++ b/src/cmd/vendor/golang.org/x/sys/windows/mkerrors.bash @@ -0,0 +1,64 @@ +#!/bin/bash + +# 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. + +set -e +shopt -s nullglob + +[[ $# -eq 1 ]] || { echo "Usage: $0 OUTPUT_FILE.go" >&2; exit 1; } +winerror="$(printf '%s\n' "/mnt/c/Program Files (x86)/Windows Kits/"/*/Include/*/shared/winerror.h | sort -Vr | head -n 1)" +[[ -n $winerror ]] || { echo "Unable to find winerror.h" >&2; exit 1; } + +declare -A errors + +{ + echo "// Code generated by 'go generate'; DO NOT EDIT." + echo + echo "package windows" + echo "import \"syscall\"" + echo "const (" + + while read -r line; do + unset vtype + if [[ $line =~ ^#define\ +([A-Z0-9_]+k?)\ +([A-Z0-9_]+\()?([A-Z][A-Z0-9_]+k?)\)? ]]; then + key="${BASH_REMATCH[1]}" + value="${BASH_REMATCH[3]}" + elif [[ $line =~ ^#define\ +([A-Z0-9_]+k?)\ +([A-Z0-9_]+\()?((0x)?[0-9A-Fa-f]+)L?\)? ]]; then + key="${BASH_REMATCH[1]}" + value="${BASH_REMATCH[3]}" + vtype="${BASH_REMATCH[2]}" + elif [[ $line =~ ^#define\ +([A-Z0-9_]+k?)\ +\(\(([A-Z]+)\)((0x)?[0-9A-Fa-f]+)L?\) ]]; then + key="${BASH_REMATCH[1]}" + value="${BASH_REMATCH[3]}" + vtype="${BASH_REMATCH[2]}" + else + continue + fi + [[ -n $key && -n $value ]] || continue + [[ -z ${errors["$key"]} ]] || continue + errors["$key"]="$value" + if [[ -v vtype ]]; then + if [[ $key == FACILITY_* || $key == NO_ERROR ]]; then + vtype="" + elif [[ $vtype == *HANDLE* || $vtype == *HRESULT* ]]; then + vtype="Handle" + else + vtype="syscall.Errno" + fi + last_vtype="$vtype" + else + vtype="" + if [[ $last_vtype == Handle && $value == NO_ERROR ]]; then + value="S_OK" + elif [[ $last_vtype == syscall.Errno && $value == NO_ERROR ]]; then + value="ERROR_SUCCESS" + fi + fi + + echo "$key $vtype = $value" + done < "$winerror" + + echo ")" +} | gofmt > "$1" diff --git a/src/cmd/vendor/golang.org/x/sys/windows/mkerrors.go b/src/cmd/vendor/golang.org/x/sys/windows/mkerrors.go new file mode 100644 index 0000000000..cbf123ef89 --- /dev/null +++ b/src/cmd/vendor/golang.org/x/sys/windows/mkerrors.go @@ -0,0 +1,7 @@ +// 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 windows + +//go:generate ./mkerrors.bash zerrors_windows.go diff --git a/src/cmd/vendor/golang.org/x/sys/windows/registry/export_test.go b/src/cmd/vendor/golang.org/x/sys/windows/registry/export_test.go deleted file mode 100644 index 8badf6fdcf..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/registry/export_test.go +++ /dev/null @@ -1,11 +0,0 @@ -// 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. - -// +build windows - -package registry - -func (k Key) SetValue(name string, valtype uint32, data []byte) error { - return k.setValue(name, valtype, data) -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/registry/key.go b/src/cmd/vendor/golang.org/x/sys/windows/registry/key.go deleted file mode 100644 index c256483434..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/registry/key.go +++ /dev/null @@ -1,198 +0,0 @@ -// 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. - -// +build windows - -// Package registry provides access to the Windows registry. -// -// Here is a simple example, opening a registry key and reading a string value from it. -// -// k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.QUERY_VALUE) -// if err != nil { -// log.Fatal(err) -// } -// defer k.Close() -// -// s, _, err := k.GetStringValue("SystemRoot") -// if err != nil { -// log.Fatal(err) -// } -// fmt.Printf("Windows system root is %q\n", s) -// -package registry - -import ( - "io" - "syscall" - "time" -) - -const ( - // Registry key security and access rights. - // See https://msdn.microsoft.com/en-us/library/windows/desktop/ms724878.aspx - // for details. - ALL_ACCESS = 0xf003f - CREATE_LINK = 0x00020 - CREATE_SUB_KEY = 0x00004 - ENUMERATE_SUB_KEYS = 0x00008 - EXECUTE = 0x20019 - NOTIFY = 0x00010 - QUERY_VALUE = 0x00001 - READ = 0x20019 - SET_VALUE = 0x00002 - WOW64_32KEY = 0x00200 - WOW64_64KEY = 0x00100 - WRITE = 0x20006 -) - -// Key is a handle to an open Windows registry key. -// Keys can be obtained by calling OpenKey; there are -// also some predefined root keys such as CURRENT_USER. -// Keys can be used directly in the Windows API. -type Key syscall.Handle - -const ( - // Windows defines some predefined root keys that are always open. - // An application can use these keys as entry points to the registry. - // Normally these keys are used in OpenKey to open new keys, - // but they can also be used anywhere a Key is required. - CLASSES_ROOT = Key(syscall.HKEY_CLASSES_ROOT) - CURRENT_USER = Key(syscall.HKEY_CURRENT_USER) - LOCAL_MACHINE = Key(syscall.HKEY_LOCAL_MACHINE) - USERS = Key(syscall.HKEY_USERS) - CURRENT_CONFIG = Key(syscall.HKEY_CURRENT_CONFIG) - PERFORMANCE_DATA = Key(syscall.HKEY_PERFORMANCE_DATA) -) - -// Close closes open key k. -func (k Key) Close() error { - return syscall.RegCloseKey(syscall.Handle(k)) -} - -// OpenKey opens a new key with path name relative to key k. -// It accepts any open key, including CURRENT_USER and others, -// and returns the new key and an error. -// The access parameter specifies desired access rights to the -// key to be opened. -func OpenKey(k Key, path string, access uint32) (Key, error) { - p, err := syscall.UTF16PtrFromString(path) - if err != nil { - return 0, err - } - var subkey syscall.Handle - err = syscall.RegOpenKeyEx(syscall.Handle(k), p, 0, access, &subkey) - if err != nil { - return 0, err - } - return Key(subkey), nil -} - -// OpenRemoteKey opens a predefined registry key on another -// computer pcname. The key to be opened is specified by k, but -// can only be one of LOCAL_MACHINE, PERFORMANCE_DATA or USERS. -// If pcname is "", OpenRemoteKey returns local computer key. -func OpenRemoteKey(pcname string, k Key) (Key, error) { - var err error - var p *uint16 - if pcname != "" { - p, err = syscall.UTF16PtrFromString(`\\` + pcname) - if err != nil { - return 0, err - } - } - var remoteKey syscall.Handle - err = regConnectRegistry(p, syscall.Handle(k), &remoteKey) - if err != nil { - return 0, err - } - return Key(remoteKey), nil -} - -// ReadSubKeyNames returns the names of subkeys of key k. -// The parameter n controls the number of returned names, -// analogous to the way os.File.Readdirnames works. -func (k Key) ReadSubKeyNames(n int) ([]string, error) { - names := make([]string, 0) - // Registry key size limit is 255 bytes and described there: - // https://msdn.microsoft.com/library/windows/desktop/ms724872.aspx - buf := make([]uint16, 256) //plus extra room for terminating zero byte -loopItems: - for i := uint32(0); ; i++ { - if n > 0 { - if len(names) == n { - return names, nil - } - } - l := uint32(len(buf)) - for { - err := syscall.RegEnumKeyEx(syscall.Handle(k), i, &buf[0], &l, nil, nil, nil, nil) - if err == nil { - break - } - if err == syscall.ERROR_MORE_DATA { - // Double buffer size and try again. - l = uint32(2 * len(buf)) - buf = make([]uint16, l) - continue - } - if err == _ERROR_NO_MORE_ITEMS { - break loopItems - } - return names, err - } - names = append(names, syscall.UTF16ToString(buf[:l])) - } - if n > len(names) { - return names, io.EOF - } - return names, nil -} - -// CreateKey creates a key named path under open key k. -// CreateKey returns the new key and a boolean flag that reports -// whether the key already existed. -// The access parameter specifies the access rights for the key -// to be created. -func CreateKey(k Key, path string, access uint32) (newk Key, openedExisting bool, err error) { - var h syscall.Handle - var d uint32 - err = regCreateKeyEx(syscall.Handle(k), syscall.StringToUTF16Ptr(path), - 0, nil, _REG_OPTION_NON_VOLATILE, access, nil, &h, &d) - if err != nil { - return 0, false, err - } - return Key(h), d == _REG_OPENED_EXISTING_KEY, nil -} - -// DeleteKey deletes the subkey path of key k and its values. -func DeleteKey(k Key, path string) error { - return regDeleteKey(syscall.Handle(k), syscall.StringToUTF16Ptr(path)) -} - -// A KeyInfo describes the statistics of a key. It is returned by Stat. -type KeyInfo struct { - SubKeyCount uint32 - MaxSubKeyLen uint32 // size of the key's subkey with the longest name, in Unicode characters, not including the terminating zero byte - ValueCount uint32 - MaxValueNameLen uint32 // size of the key's longest value name, in Unicode characters, not including the terminating zero byte - MaxValueLen uint32 // longest data component among the key's values, in bytes - lastWriteTime syscall.Filetime -} - -// ModTime returns the key's last write time. -func (ki *KeyInfo) ModTime() time.Time { - return time.Unix(0, ki.lastWriteTime.Nanoseconds()) -} - -// Stat retrieves information about the open key k. -func (k Key) Stat() (*KeyInfo, error) { - var ki KeyInfo - err := syscall.RegQueryInfoKey(syscall.Handle(k), nil, nil, nil, - &ki.SubKeyCount, &ki.MaxSubKeyLen, nil, &ki.ValueCount, - &ki.MaxValueNameLen, &ki.MaxValueLen, nil, &ki.lastWriteTime) - if err != nil { - return nil, err - } - return &ki, nil -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/registry/mksyscall.go b/src/cmd/vendor/golang.org/x/sys/windows/registry/mksyscall.go deleted file mode 100644 index 0ac95ffe73..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/registry/mksyscall.go +++ /dev/null @@ -1,7 +0,0 @@ -// 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 registry - -//go:generate go run $GOROOT/src/syscall/mksyscall_windows.go -output zsyscall_windows.go syscall.go diff --git a/src/cmd/vendor/golang.org/x/sys/windows/registry/registry_test.go b/src/cmd/vendor/golang.org/x/sys/windows/registry/registry_test.go deleted file mode 100644 index 2f4dd69ef9..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/registry/registry_test.go +++ /dev/null @@ -1,756 +0,0 @@ -// 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. - -// +build windows - -package registry_test - -import ( - "bytes" - "crypto/rand" - "os" - "syscall" - "testing" - "time" - "unsafe" - - "golang.org/x/sys/windows/registry" -) - -func randKeyName(prefix string) string { - const numbers = "0123456789" - buf := make([]byte, 10) - rand.Read(buf) - for i, b := range buf { - buf[i] = numbers[b%byte(len(numbers))] - } - return prefix + string(buf) -} - -func TestReadSubKeyNames(t *testing.T) { - k, err := registry.OpenKey(registry.CLASSES_ROOT, "TypeLib", registry.ENUMERATE_SUB_KEYS) - if err != nil { - t.Fatal(err) - } - defer k.Close() - - names, err := k.ReadSubKeyNames(-1) - if err != nil { - t.Fatal(err) - } - var foundStdOle bool - for _, name := range names { - // Every PC has "stdole 2.0 OLE Automation" library installed. - if name == "{00020430-0000-0000-C000-000000000046}" { - foundStdOle = true - } - } - if !foundStdOle { - t.Fatal("could not find stdole 2.0 OLE Automation") - } -} - -func TestCreateOpenDeleteKey(t *testing.T) { - k, err := registry.OpenKey(registry.CURRENT_USER, "Software", registry.QUERY_VALUE) - if err != nil { - t.Fatal(err) - } - defer k.Close() - - testKName := randKeyName("TestCreateOpenDeleteKey_") - - testK, exist, err := registry.CreateKey(k, testKName, registry.CREATE_SUB_KEY) - if err != nil { - t.Fatal(err) - } - defer testK.Close() - - if exist { - t.Fatalf("key %q already exists", testKName) - } - - testKAgain, exist, err := registry.CreateKey(k, testKName, registry.CREATE_SUB_KEY) - if err != nil { - t.Fatal(err) - } - defer testKAgain.Close() - - if !exist { - t.Fatalf("key %q should already exist", testKName) - } - - testKOpened, err := registry.OpenKey(k, testKName, registry.ENUMERATE_SUB_KEYS) - if err != nil { - t.Fatal(err) - } - defer testKOpened.Close() - - err = registry.DeleteKey(k, testKName) - if err != nil { - t.Fatal(err) - } - - testKOpenedAgain, err := registry.OpenKey(k, testKName, registry.ENUMERATE_SUB_KEYS) - if err == nil { - defer testKOpenedAgain.Close() - t.Fatalf("key %q should already been deleted", testKName) - } - if err != registry.ErrNotExist { - t.Fatalf(`unexpected error ("not exist" expected): %v`, err) - } -} - -func equalStringSlice(a, b []string) bool { - if len(a) != len(b) { - return false - } - if a == nil { - return true - } - for i := range a { - if a[i] != b[i] { - return false - } - } - return true -} - -type ValueTest struct { - Type uint32 - Name string - Value interface{} - WillFail bool -} - -var ValueTests = []ValueTest{ - {Type: registry.SZ, Name: "String1", Value: ""}, - {Type: registry.SZ, Name: "String2", Value: "\000", WillFail: true}, - {Type: registry.SZ, Name: "String3", Value: "Hello World"}, - {Type: registry.SZ, Name: "String4", Value: "Hello World\000", WillFail: true}, - {Type: registry.EXPAND_SZ, Name: "ExpString1", Value: ""}, - {Type: registry.EXPAND_SZ, Name: "ExpString2", Value: "\000", WillFail: true}, - {Type: registry.EXPAND_SZ, Name: "ExpString3", Value: "Hello World"}, - {Type: registry.EXPAND_SZ, Name: "ExpString4", Value: "Hello\000World", WillFail: true}, - {Type: registry.EXPAND_SZ, Name: "ExpString5", Value: "%PATH%"}, - {Type: registry.EXPAND_SZ, Name: "ExpString6", Value: "%NO_SUCH_VARIABLE%"}, - {Type: registry.EXPAND_SZ, Name: "ExpString7", Value: "%PATH%;."}, - {Type: registry.BINARY, Name: "Binary1", Value: []byte{}}, - {Type: registry.BINARY, Name: "Binary2", Value: []byte{1, 2, 3}}, - {Type: registry.BINARY, Name: "Binary3", Value: []byte{3, 2, 1, 0, 1, 2, 3}}, - {Type: registry.DWORD, Name: "Dword1", Value: uint64(0)}, - {Type: registry.DWORD, Name: "Dword2", Value: uint64(1)}, - {Type: registry.DWORD, Name: "Dword3", Value: uint64(0xff)}, - {Type: registry.DWORD, Name: "Dword4", Value: uint64(0xffff)}, - {Type: registry.QWORD, Name: "Qword1", Value: uint64(0)}, - {Type: registry.QWORD, Name: "Qword2", Value: uint64(1)}, - {Type: registry.QWORD, Name: "Qword3", Value: uint64(0xff)}, - {Type: registry.QWORD, Name: "Qword4", Value: uint64(0xffff)}, - {Type: registry.QWORD, Name: "Qword5", Value: uint64(0xffffff)}, - {Type: registry.QWORD, Name: "Qword6", Value: uint64(0xffffffff)}, - {Type: registry.MULTI_SZ, Name: "MultiString1", Value: []string{"a", "b", "c"}}, - {Type: registry.MULTI_SZ, Name: "MultiString2", Value: []string{"abc", "", "cba"}}, - {Type: registry.MULTI_SZ, Name: "MultiString3", Value: []string{""}}, - {Type: registry.MULTI_SZ, Name: "MultiString4", Value: []string{"abcdef"}}, - {Type: registry.MULTI_SZ, Name: "MultiString5", Value: []string{"\000"}, WillFail: true}, - {Type: registry.MULTI_SZ, Name: "MultiString6", Value: []string{"a\000b"}, WillFail: true}, - {Type: registry.MULTI_SZ, Name: "MultiString7", Value: []string{"ab", "\000", "cd"}, WillFail: true}, - {Type: registry.MULTI_SZ, Name: "MultiString8", Value: []string{"\000", "cd"}, WillFail: true}, - {Type: registry.MULTI_SZ, Name: "MultiString9", Value: []string{"ab", "\000"}, WillFail: true}, -} - -func setValues(t *testing.T, k registry.Key) { - for _, test := range ValueTests { - var err error - switch test.Type { - case registry.SZ: - err = k.SetStringValue(test.Name, test.Value.(string)) - case registry.EXPAND_SZ: - err = k.SetExpandStringValue(test.Name, test.Value.(string)) - case registry.MULTI_SZ: - err = k.SetStringsValue(test.Name, test.Value.([]string)) - case registry.BINARY: - err = k.SetBinaryValue(test.Name, test.Value.([]byte)) - case registry.DWORD: - err = k.SetDWordValue(test.Name, uint32(test.Value.(uint64))) - case registry.QWORD: - err = k.SetQWordValue(test.Name, test.Value.(uint64)) - default: - t.Fatalf("unsupported type %d for %s value", test.Type, test.Name) - } - if test.WillFail { - if err == nil { - t.Fatalf("setting %s value %q should fail, but succeeded", test.Name, test.Value) - } - } else { - if err != nil { - t.Fatal(err) - } - } - } -} - -func enumerateValues(t *testing.T, k registry.Key) { - names, err := k.ReadValueNames(-1) - if err != nil { - t.Error(err) - return - } - haveNames := make(map[string]bool) - for _, n := range names { - haveNames[n] = false - } - for _, test := range ValueTests { - wantFound := !test.WillFail - _, haveFound := haveNames[test.Name] - if wantFound && !haveFound { - t.Errorf("value %s is not found while enumerating", test.Name) - } - if haveFound && !wantFound { - t.Errorf("value %s is found while enumerating, but expected to fail", test.Name) - } - if haveFound { - delete(haveNames, test.Name) - } - } - for n, v := range haveNames { - t.Errorf("value %s (%v) is found while enumerating, but has not been cretaed", n, v) - } -} - -func testErrNotExist(t *testing.T, name string, err error) { - if err == nil { - t.Errorf("%s value should not exist", name) - return - } - if err != registry.ErrNotExist { - t.Errorf("reading %s value should return 'not exist' error, but got: %s", name, err) - return - } -} - -func testErrUnexpectedType(t *testing.T, test ValueTest, gottype uint32, err error) { - if err == nil { - t.Errorf("GetXValue(%q) should not succeed", test.Name) - return - } - if err != registry.ErrUnexpectedType { - t.Errorf("reading %s value should return 'unexpected key value type' error, but got: %s", test.Name, err) - return - } - if gottype != test.Type { - t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) - return - } -} - -func testGetStringValue(t *testing.T, k registry.Key, test ValueTest) { - got, gottype, err := k.GetStringValue(test.Name) - if err != nil { - t.Errorf("GetStringValue(%s) failed: %v", test.Name, err) - return - } - if got != test.Value { - t.Errorf("want %s value %q, got %q", test.Name, test.Value, got) - return - } - if gottype != test.Type { - t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) - return - } - if gottype == registry.EXPAND_SZ { - _, err = registry.ExpandString(got) - if err != nil { - t.Errorf("ExpandString(%s) failed: %v", got, err) - return - } - } -} - -func testGetIntegerValue(t *testing.T, k registry.Key, test ValueTest) { - got, gottype, err := k.GetIntegerValue(test.Name) - if err != nil { - t.Errorf("GetIntegerValue(%s) failed: %v", test.Name, err) - return - } - if got != test.Value.(uint64) { - t.Errorf("want %s value %v, got %v", test.Name, test.Value, got) - return - } - if gottype != test.Type { - t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) - return - } -} - -func testGetBinaryValue(t *testing.T, k registry.Key, test ValueTest) { - got, gottype, err := k.GetBinaryValue(test.Name) - if err != nil { - t.Errorf("GetBinaryValue(%s) failed: %v", test.Name, err) - return - } - if !bytes.Equal(got, test.Value.([]byte)) { - t.Errorf("want %s value %v, got %v", test.Name, test.Value, got) - return - } - if gottype != test.Type { - t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) - return - } -} - -func testGetStringsValue(t *testing.T, k registry.Key, test ValueTest) { - got, gottype, err := k.GetStringsValue(test.Name) - if err != nil { - t.Errorf("GetStringsValue(%s) failed: %v", test.Name, err) - return - } - if !equalStringSlice(got, test.Value.([]string)) { - t.Errorf("want %s value %#v, got %#v", test.Name, test.Value, got) - return - } - if gottype != test.Type { - t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) - return - } -} - -func testGetValue(t *testing.T, k registry.Key, test ValueTest, size int) { - if size <= 0 { - return - } - // read data with no buffer - gotsize, gottype, err := k.GetValue(test.Name, nil) - if err != nil { - t.Errorf("GetValue(%s, [%d]byte) failed: %v", test.Name, size, err) - return - } - if gotsize != size { - t.Errorf("want %s value size of %d, got %v", test.Name, size, gotsize) - return - } - if gottype != test.Type { - t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) - return - } - // read data with short buffer - gotsize, gottype, err = k.GetValue(test.Name, make([]byte, size-1)) - if err == nil { - t.Errorf("GetValue(%s, [%d]byte) should fail, but succeeded", test.Name, size-1) - return - } - if err != registry.ErrShortBuffer { - t.Errorf("reading %s value should return 'short buffer' error, but got: %s", test.Name, err) - return - } - if gotsize != size { - t.Errorf("want %s value size of %d, got %v", test.Name, size, gotsize) - return - } - if gottype != test.Type { - t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) - return - } - // read full data - gotsize, gottype, err = k.GetValue(test.Name, make([]byte, size)) - if err != nil { - t.Errorf("GetValue(%s, [%d]byte) failed: %v", test.Name, size, err) - return - } - if gotsize != size { - t.Errorf("want %s value size of %d, got %v", test.Name, size, gotsize) - return - } - if gottype != test.Type { - t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) - return - } - // check GetValue returns ErrNotExist as required - _, _, err = k.GetValue(test.Name+"_not_there", make([]byte, size)) - if err == nil { - t.Errorf("GetValue(%q) should not succeed", test.Name) - return - } - if err != registry.ErrNotExist { - t.Errorf("GetValue(%q) should return 'not exist' error, but got: %s", test.Name, err) - return - } -} - -func testValues(t *testing.T, k registry.Key) { - for _, test := range ValueTests { - switch test.Type { - case registry.SZ, registry.EXPAND_SZ: - if test.WillFail { - _, _, err := k.GetStringValue(test.Name) - testErrNotExist(t, test.Name, err) - } else { - testGetStringValue(t, k, test) - _, gottype, err := k.GetIntegerValue(test.Name) - testErrUnexpectedType(t, test, gottype, err) - // Size of utf16 string in bytes is not perfect, - // but correct for current test values. - // Size also includes terminating 0. - testGetValue(t, k, test, (len(test.Value.(string))+1)*2) - } - _, _, err := k.GetStringValue(test.Name + "_string_not_created") - testErrNotExist(t, test.Name+"_string_not_created", err) - case registry.DWORD, registry.QWORD: - testGetIntegerValue(t, k, test) - _, gottype, err := k.GetBinaryValue(test.Name) - testErrUnexpectedType(t, test, gottype, err) - _, _, err = k.GetIntegerValue(test.Name + "_int_not_created") - testErrNotExist(t, test.Name+"_int_not_created", err) - size := 8 - if test.Type == registry.DWORD { - size = 4 - } - testGetValue(t, k, test, size) - case registry.BINARY: - testGetBinaryValue(t, k, test) - _, gottype, err := k.GetStringsValue(test.Name) - testErrUnexpectedType(t, test, gottype, err) - _, _, err = k.GetBinaryValue(test.Name + "_byte_not_created") - testErrNotExist(t, test.Name+"_byte_not_created", err) - testGetValue(t, k, test, len(test.Value.([]byte))) - case registry.MULTI_SZ: - if test.WillFail { - _, _, err := k.GetStringsValue(test.Name) - testErrNotExist(t, test.Name, err) - } else { - testGetStringsValue(t, k, test) - _, gottype, err := k.GetStringValue(test.Name) - testErrUnexpectedType(t, test, gottype, err) - size := 0 - for _, s := range test.Value.([]string) { - size += len(s) + 1 // nil terminated - } - size += 1 // extra nil at the end - size *= 2 // count bytes, not uint16 - testGetValue(t, k, test, size) - } - _, _, err := k.GetStringsValue(test.Name + "_strings_not_created") - testErrNotExist(t, test.Name+"_strings_not_created", err) - default: - t.Errorf("unsupported type %d for %s value", test.Type, test.Name) - continue - } - } -} - -func testStat(t *testing.T, k registry.Key) { - subk, _, err := registry.CreateKey(k, "subkey", registry.CREATE_SUB_KEY) - if err != nil { - t.Error(err) - return - } - defer subk.Close() - - defer registry.DeleteKey(k, "subkey") - - ki, err := k.Stat() - if err != nil { - t.Error(err) - return - } - if ki.SubKeyCount != 1 { - t.Error("key must have 1 subkey") - } - if ki.MaxSubKeyLen != 6 { - t.Error("key max subkey name length must be 6") - } - if ki.ValueCount != 24 { - t.Errorf("key must have 24 values, but is %d", ki.ValueCount) - } - if ki.MaxValueNameLen != 12 { - t.Errorf("key max value name length must be 10, but is %d", ki.MaxValueNameLen) - } - if ki.MaxValueLen != 38 { - t.Errorf("key max value length must be 38, but is %d", ki.MaxValueLen) - } - if mt, ct := ki.ModTime(), time.Now(); ct.Sub(mt) > 100*time.Millisecond { - t.Errorf("key mod time is not close to current time: mtime=%v current=%v delta=%v", mt, ct, ct.Sub(mt)) - } -} - -func deleteValues(t *testing.T, k registry.Key) { - for _, test := range ValueTests { - if test.WillFail { - continue - } - err := k.DeleteValue(test.Name) - if err != nil { - t.Error(err) - continue - } - } - names, err := k.ReadValueNames(-1) - if err != nil { - t.Error(err) - return - } - if len(names) != 0 { - t.Errorf("some values remain after deletion: %v", names) - } -} - -func TestValues(t *testing.T) { - softwareK, err := registry.OpenKey(registry.CURRENT_USER, "Software", registry.QUERY_VALUE) - if err != nil { - t.Fatal(err) - } - defer softwareK.Close() - - testKName := randKeyName("TestValues_") - - k, exist, err := registry.CreateKey(softwareK, testKName, registry.CREATE_SUB_KEY|registry.QUERY_VALUE|registry.SET_VALUE) - if err != nil { - t.Fatal(err) - } - defer k.Close() - - if exist { - t.Fatalf("key %q already exists", testKName) - } - - defer registry.DeleteKey(softwareK, testKName) - - setValues(t, k) - - enumerateValues(t, k) - - testValues(t, k) - - testStat(t, k) - - deleteValues(t, k) -} - -func walkKey(t *testing.T, k registry.Key, kname string) { - names, err := k.ReadValueNames(-1) - if err != nil { - t.Fatalf("reading value names of %s failed: %v", kname, err) - } - for _, name := range names { - _, valtype, err := k.GetValue(name, nil) - if err != nil { - t.Fatalf("reading value type of %s of %s failed: %v", name, kname, err) - } - switch valtype { - case registry.NONE: - case registry.SZ: - _, _, err := k.GetStringValue(name) - if err != nil { - t.Error(err) - } - case registry.EXPAND_SZ: - s, _, err := k.GetStringValue(name) - if err != nil { - t.Error(err) - } - _, err = registry.ExpandString(s) - if err != nil { - t.Error(err) - } - case registry.DWORD, registry.QWORD: - _, _, err := k.GetIntegerValue(name) - if err != nil { - t.Error(err) - } - case registry.BINARY: - _, _, err := k.GetBinaryValue(name) - if err != nil { - t.Error(err) - } - case registry.MULTI_SZ: - _, _, err := k.GetStringsValue(name) - if err != nil { - t.Error(err) - } - case registry.FULL_RESOURCE_DESCRIPTOR, registry.RESOURCE_LIST, registry.RESOURCE_REQUIREMENTS_LIST: - // TODO: not implemented - default: - t.Fatalf("value type %d of %s of %s failed: %v", valtype, name, kname, err) - } - } - - names, err = k.ReadSubKeyNames(-1) - if err != nil { - t.Fatalf("reading sub-keys of %s failed: %v", kname, err) - } - for _, name := range names { - func() { - subk, err := registry.OpenKey(k, name, registry.ENUMERATE_SUB_KEYS|registry.QUERY_VALUE) - if err != nil { - if err == syscall.ERROR_ACCESS_DENIED { - // ignore error, if we are not allowed to access this key - return - } - t.Fatalf("opening sub-keys %s of %s failed: %v", name, kname, err) - } - defer subk.Close() - - walkKey(t, subk, kname+`\`+name) - }() - } -} - -func TestWalkFullRegistry(t *testing.T) { - if testing.Short() { - t.Skip("skipping long running test in short mode") - } - walkKey(t, registry.CLASSES_ROOT, "CLASSES_ROOT") - walkKey(t, registry.CURRENT_USER, "CURRENT_USER") - walkKey(t, registry.LOCAL_MACHINE, "LOCAL_MACHINE") - walkKey(t, registry.USERS, "USERS") - walkKey(t, registry.CURRENT_CONFIG, "CURRENT_CONFIG") -} - -func TestExpandString(t *testing.T) { - got, err := registry.ExpandString("%PATH%") - if err != nil { - t.Fatal(err) - } - want := os.Getenv("PATH") - if got != want { - t.Errorf("want %q string expanded, got %q", want, got) - } -} - -func TestInvalidValues(t *testing.T) { - softwareK, err := registry.OpenKey(registry.CURRENT_USER, "Software", registry.QUERY_VALUE) - if err != nil { - t.Fatal(err) - } - defer softwareK.Close() - - testKName := randKeyName("TestInvalidValues_") - - k, exist, err := registry.CreateKey(softwareK, testKName, registry.CREATE_SUB_KEY|registry.QUERY_VALUE|registry.SET_VALUE) - if err != nil { - t.Fatal(err) - } - defer k.Close() - - if exist { - t.Fatalf("key %q already exists", testKName) - } - - defer registry.DeleteKey(softwareK, testKName) - - var tests = []struct { - Type uint32 - Name string - Data []byte - }{ - {registry.DWORD, "Dword1", nil}, - {registry.DWORD, "Dword2", []byte{1, 2, 3}}, - {registry.QWORD, "Qword1", nil}, - {registry.QWORD, "Qword2", []byte{1, 2, 3}}, - {registry.QWORD, "Qword3", []byte{1, 2, 3, 4, 5, 6, 7}}, - {registry.MULTI_SZ, "MultiString1", nil}, - {registry.MULTI_SZ, "MultiString2", []byte{0}}, - {registry.MULTI_SZ, "MultiString3", []byte{'a', 'b', 0}}, - {registry.MULTI_SZ, "MultiString4", []byte{'a', 0, 0, 'b', 0}}, - {registry.MULTI_SZ, "MultiString5", []byte{'a', 0, 0}}, - } - - for _, test := range tests { - err := k.SetValue(test.Name, test.Type, test.Data) - if err != nil { - t.Fatalf("SetValue for %q failed: %v", test.Name, err) - } - } - - for _, test := range tests { - switch test.Type { - case registry.DWORD, registry.QWORD: - value, valType, err := k.GetIntegerValue(test.Name) - if err == nil { - t.Errorf("GetIntegerValue(%q) succeeded. Returns type=%d value=%v", test.Name, valType, value) - } - case registry.MULTI_SZ: - value, valType, err := k.GetStringsValue(test.Name) - if err == nil { - if len(value) != 0 { - t.Errorf("GetStringsValue(%q) succeeded. Returns type=%d value=%v", test.Name, valType, value) - } - } - default: - t.Errorf("unsupported type %d for %s value", test.Type, test.Name) - } - } -} - -func TestGetMUIStringValue(t *testing.T) { - if err := registry.LoadRegLoadMUIString(); err != nil { - t.Skip("regLoadMUIString not supported; skipping") - } - if err := procGetDynamicTimeZoneInformation.Find(); err != nil { - t.Skipf("%s not supported; skipping", procGetDynamicTimeZoneInformation.Name) - } - var dtzi DynamicTimezoneinformation - if _, err := GetDynamicTimeZoneInformation(&dtzi); err != nil { - t.Fatal(err) - } - tzKeyName := syscall.UTF16ToString(dtzi.TimeZoneKeyName[:]) - timezoneK, err := registry.OpenKey(registry.LOCAL_MACHINE, - `SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\`+tzKeyName, registry.READ) - if err != nil { - t.Fatal(err) - } - defer timezoneK.Close() - - type testType struct { - name string - want string - } - var tests = []testType{ - {"MUI_Std", syscall.UTF16ToString(dtzi.StandardName[:])}, - } - if dtzi.DynamicDaylightTimeDisabled == 0 { - tests = append(tests, testType{"MUI_Dlt", syscall.UTF16ToString(dtzi.DaylightName[:])}) - } - - for _, test := range tests { - got, err := timezoneK.GetMUIStringValue(test.name) - if err != nil { - t.Error("GetMUIStringValue:", err) - } - - if got != test.want { - t.Errorf("GetMUIStringValue: %s: Got %q, want %q", test.name, got, test.want) - } - } -} - -type DynamicTimezoneinformation struct { - Bias int32 - StandardName [32]uint16 - StandardDate syscall.Systemtime - StandardBias int32 - DaylightName [32]uint16 - DaylightDate syscall.Systemtime - DaylightBias int32 - TimeZoneKeyName [128]uint16 - DynamicDaylightTimeDisabled uint8 -} - -var ( - kernel32DLL = syscall.NewLazyDLL("kernel32") - - procGetDynamicTimeZoneInformation = kernel32DLL.NewProc("GetDynamicTimeZoneInformation") -) - -func GetDynamicTimeZoneInformation(dtzi *DynamicTimezoneinformation) (rc uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetDynamicTimeZoneInformation.Addr(), 1, uintptr(unsafe.Pointer(dtzi)), 0, 0) - rc = uint32(r0) - if rc == 0xffffffff { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/registry/syscall.go b/src/cmd/vendor/golang.org/x/sys/windows/registry/syscall.go deleted file mode 100644 index e66643cbaa..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/registry/syscall.go +++ /dev/null @@ -1,32 +0,0 @@ -// 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. - -// +build windows - -package registry - -import "syscall" - -const ( - _REG_OPTION_NON_VOLATILE = 0 - - _REG_CREATED_NEW_KEY = 1 - _REG_OPENED_EXISTING_KEY = 2 - - _ERROR_NO_MORE_ITEMS syscall.Errno = 259 -) - -func LoadRegLoadMUIString() error { - return procRegLoadMUIStringW.Find() -} - -//sys regCreateKeyEx(key syscall.Handle, subkey *uint16, reserved uint32, class *uint16, options uint32, desired uint32, sa *syscall.SecurityAttributes, result *syscall.Handle, disposition *uint32) (regerrno error) = advapi32.RegCreateKeyExW -//sys regDeleteKey(key syscall.Handle, subkey *uint16) (regerrno error) = advapi32.RegDeleteKeyW -//sys regSetValueEx(key syscall.Handle, valueName *uint16, reserved uint32, vtype uint32, buf *byte, bufsize uint32) (regerrno error) = advapi32.RegSetValueExW -//sys regEnumValue(key syscall.Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) = advapi32.RegEnumValueW -//sys regDeleteValue(key syscall.Handle, name *uint16) (regerrno error) = advapi32.RegDeleteValueW -//sys regLoadMUIString(key syscall.Handle, name *uint16, buf *uint16, buflen uint32, buflenCopied *uint32, flags uint32, dir *uint16) (regerrno error) = advapi32.RegLoadMUIStringW -//sys regConnectRegistry(machinename *uint16, key syscall.Handle, result *syscall.Handle) (regerrno error) = advapi32.RegConnectRegistryW - -//sys expandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) = kernel32.ExpandEnvironmentStringsW diff --git a/src/cmd/vendor/golang.org/x/sys/windows/registry/value.go b/src/cmd/vendor/golang.org/x/sys/windows/registry/value.go deleted file mode 100644 index 71d4e15bab..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/registry/value.go +++ /dev/null @@ -1,384 +0,0 @@ -// 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. - -// +build windows - -package registry - -import ( - "errors" - "io" - "syscall" - "unicode/utf16" - "unsafe" -) - -const ( - // Registry value types. - NONE = 0 - SZ = 1 - EXPAND_SZ = 2 - BINARY = 3 - DWORD = 4 - DWORD_BIG_ENDIAN = 5 - LINK = 6 - MULTI_SZ = 7 - RESOURCE_LIST = 8 - FULL_RESOURCE_DESCRIPTOR = 9 - RESOURCE_REQUIREMENTS_LIST = 10 - QWORD = 11 -) - -var ( - // ErrShortBuffer is returned when the buffer was too short for the operation. - ErrShortBuffer = syscall.ERROR_MORE_DATA - - // ErrNotExist is returned when a registry key or value does not exist. - ErrNotExist = syscall.ERROR_FILE_NOT_FOUND - - // ErrUnexpectedType is returned by Get*Value when the value's type was unexpected. - ErrUnexpectedType = errors.New("unexpected key value type") -) - -// GetValue retrieves the type and data for the specified value associated -// with an open key k. It fills up buffer buf and returns the retrieved -// byte count n. If buf is too small to fit the stored value it returns -// ErrShortBuffer error along with the required buffer size n. -// If no buffer is provided, it returns true and actual buffer size n. -// If no buffer is provided, GetValue returns the value's type only. -// If the value does not exist, the error returned is ErrNotExist. -// -// GetValue is a low level function. If value's type is known, use the appropriate -// Get*Value function instead. -func (k Key) GetValue(name string, buf []byte) (n int, valtype uint32, err error) { - pname, err := syscall.UTF16PtrFromString(name) - if err != nil { - return 0, 0, err - } - var pbuf *byte - if len(buf) > 0 { - pbuf = (*byte)(unsafe.Pointer(&buf[0])) - } - l := uint32(len(buf)) - err = syscall.RegQueryValueEx(syscall.Handle(k), pname, nil, &valtype, pbuf, &l) - if err != nil { - return int(l), valtype, err - } - return int(l), valtype, nil -} - -func (k Key) getValue(name string, buf []byte) (date []byte, valtype uint32, err error) { - p, err := syscall.UTF16PtrFromString(name) - if err != nil { - return nil, 0, err - } - var t uint32 - n := uint32(len(buf)) - for { - err = syscall.RegQueryValueEx(syscall.Handle(k), p, nil, &t, (*byte)(unsafe.Pointer(&buf[0])), &n) - if err == nil { - return buf[:n], t, nil - } - if err != syscall.ERROR_MORE_DATA { - return nil, 0, err - } - if n <= uint32(len(buf)) { - return nil, 0, err - } - buf = make([]byte, n) - } -} - -// GetStringValue retrieves the string value for the specified -// value name associated with an open key k. It also returns the value's type. -// If value does not exist, GetStringValue returns ErrNotExist. -// If value is not SZ or EXPAND_SZ, it will return the correct value -// type and ErrUnexpectedType. -func (k Key) GetStringValue(name string) (val string, valtype uint32, err error) { - data, typ, err2 := k.getValue(name, make([]byte, 64)) - if err2 != nil { - return "", typ, err2 - } - switch typ { - case SZ, EXPAND_SZ: - default: - return "", typ, ErrUnexpectedType - } - if len(data) == 0 { - return "", typ, nil - } - u := (*[1 << 29]uint16)(unsafe.Pointer(&data[0]))[:] - return syscall.UTF16ToString(u), typ, nil -} - -// GetMUIStringValue retrieves the localized string value for -// the specified value name associated with an open key k. -// If the value name doesn't exist or the localized string value -// can't be resolved, GetMUIStringValue returns ErrNotExist. -// GetMUIStringValue panics if the system doesn't support -// regLoadMUIString; use LoadRegLoadMUIString to check if -// regLoadMUIString is supported before calling this function. -func (k Key) GetMUIStringValue(name string) (string, error) { - pname, err := syscall.UTF16PtrFromString(name) - if err != nil { - return "", err - } - - buf := make([]uint16, 1024) - var buflen uint32 - var pdir *uint16 - - err = regLoadMUIString(syscall.Handle(k), pname, &buf[0], uint32(len(buf)), &buflen, 0, pdir) - if err == syscall.ERROR_FILE_NOT_FOUND { // Try fallback path - - // Try to resolve the string value using the system directory as - // a DLL search path; this assumes the string value is of the form - // @[path]\dllname,-strID but with no path given, e.g. @tzres.dll,-320. - - // This approach works with tzres.dll but may have to be revised - // in the future to allow callers to provide custom search paths. - - var s string - s, err = ExpandString("%SystemRoot%\\system32\\") - if err != nil { - return "", err - } - pdir, err = syscall.UTF16PtrFromString(s) - if err != nil { - return "", err - } - - err = regLoadMUIString(syscall.Handle(k), pname, &buf[0], uint32(len(buf)), &buflen, 0, pdir) - } - - for err == syscall.ERROR_MORE_DATA { // Grow buffer if needed - if buflen <= uint32(len(buf)) { - break // Buffer not growing, assume race; break - } - buf = make([]uint16, buflen) - err = regLoadMUIString(syscall.Handle(k), pname, &buf[0], uint32(len(buf)), &buflen, 0, pdir) - } - - if err != nil { - return "", err - } - - return syscall.UTF16ToString(buf), nil -} - -// ExpandString expands environment-variable strings and replaces -// them with the values defined for the current user. -// Use ExpandString to expand EXPAND_SZ strings. -func ExpandString(value string) (string, error) { - if value == "" { - return "", nil - } - p, err := syscall.UTF16PtrFromString(value) - if err != nil { - return "", err - } - r := make([]uint16, 100) - for { - n, err := expandEnvironmentStrings(p, &r[0], uint32(len(r))) - if err != nil { - return "", err - } - if n <= uint32(len(r)) { - u := (*[1 << 29]uint16)(unsafe.Pointer(&r[0]))[:] - return syscall.UTF16ToString(u), nil - } - r = make([]uint16, n) - } -} - -// GetStringsValue retrieves the []string value for the specified -// value name associated with an open key k. It also returns the value's type. -// If value does not exist, GetStringsValue returns ErrNotExist. -// If value is not MULTI_SZ, it will return the correct value -// type and ErrUnexpectedType. -func (k Key) GetStringsValue(name string) (val []string, valtype uint32, err error) { - data, typ, err2 := k.getValue(name, make([]byte, 64)) - if err2 != nil { - return nil, typ, err2 - } - if typ != MULTI_SZ { - return nil, typ, ErrUnexpectedType - } - if len(data) == 0 { - return nil, typ, nil - } - p := (*[1 << 29]uint16)(unsafe.Pointer(&data[0]))[:len(data)/2] - if len(p) == 0 { - return nil, typ, nil - } - if p[len(p)-1] == 0 { - p = p[:len(p)-1] // remove terminating null - } - val = make([]string, 0, 5) - from := 0 - for i, c := range p { - if c == 0 { - val = append(val, string(utf16.Decode(p[from:i]))) - from = i + 1 - } - } - return val, typ, nil -} - -// GetIntegerValue retrieves the integer value for the specified -// value name associated with an open key k. It also returns the value's type. -// If value does not exist, GetIntegerValue returns ErrNotExist. -// If value is not DWORD or QWORD, it will return the correct value -// type and ErrUnexpectedType. -func (k Key) GetIntegerValue(name string) (val uint64, valtype uint32, err error) { - data, typ, err2 := k.getValue(name, make([]byte, 8)) - if err2 != nil { - return 0, typ, err2 - } - switch typ { - case DWORD: - if len(data) != 4 { - return 0, typ, errors.New("DWORD value is not 4 bytes long") - } - return uint64(*(*uint32)(unsafe.Pointer(&data[0]))), DWORD, nil - case QWORD: - if len(data) != 8 { - return 0, typ, errors.New("QWORD value is not 8 bytes long") - } - return uint64(*(*uint64)(unsafe.Pointer(&data[0]))), QWORD, nil - default: - return 0, typ, ErrUnexpectedType - } -} - -// GetBinaryValue retrieves the binary value for the specified -// value name associated with an open key k. It also returns the value's type. -// If value does not exist, GetBinaryValue returns ErrNotExist. -// If value is not BINARY, it will return the correct value -// type and ErrUnexpectedType. -func (k Key) GetBinaryValue(name string) (val []byte, valtype uint32, err error) { - data, typ, err2 := k.getValue(name, make([]byte, 64)) - if err2 != nil { - return nil, typ, err2 - } - if typ != BINARY { - return nil, typ, ErrUnexpectedType - } - return data, typ, nil -} - -func (k Key) setValue(name string, valtype uint32, data []byte) error { - p, err := syscall.UTF16PtrFromString(name) - if err != nil { - return err - } - if len(data) == 0 { - return regSetValueEx(syscall.Handle(k), p, 0, valtype, nil, 0) - } - return regSetValueEx(syscall.Handle(k), p, 0, valtype, &data[0], uint32(len(data))) -} - -// SetDWordValue sets the data and type of a name value -// under key k to value and DWORD. -func (k Key) SetDWordValue(name string, value uint32) error { - return k.setValue(name, DWORD, (*[4]byte)(unsafe.Pointer(&value))[:]) -} - -// SetQWordValue sets the data and type of a name value -// under key k to value and QWORD. -func (k Key) SetQWordValue(name string, value uint64) error { - return k.setValue(name, QWORD, (*[8]byte)(unsafe.Pointer(&value))[:]) -} - -func (k Key) setStringValue(name string, valtype uint32, value string) error { - v, err := syscall.UTF16FromString(value) - if err != nil { - return err - } - buf := (*[1 << 29]byte)(unsafe.Pointer(&v[0]))[:len(v)*2] - return k.setValue(name, valtype, buf) -} - -// SetStringValue sets the data and type of a name value -// under key k to value and SZ. The value must not contain a zero byte. -func (k Key) SetStringValue(name, value string) error { - return k.setStringValue(name, SZ, value) -} - -// SetExpandStringValue sets the data and type of a name value -// under key k to value and EXPAND_SZ. The value must not contain a zero byte. -func (k Key) SetExpandStringValue(name, value string) error { - return k.setStringValue(name, EXPAND_SZ, value) -} - -// SetStringsValue sets the data and type of a name value -// under key k to value and MULTI_SZ. The value strings -// must not contain a zero byte. -func (k Key) SetStringsValue(name string, value []string) error { - ss := "" - for _, s := range value { - for i := 0; i < len(s); i++ { - if s[i] == 0 { - return errors.New("string cannot have 0 inside") - } - } - ss += s + "\x00" - } - v := utf16.Encode([]rune(ss + "\x00")) - buf := (*[1 << 29]byte)(unsafe.Pointer(&v[0]))[:len(v)*2] - return k.setValue(name, MULTI_SZ, buf) -} - -// SetBinaryValue sets the data and type of a name value -// under key k to value and BINARY. -func (k Key) SetBinaryValue(name string, value []byte) error { - return k.setValue(name, BINARY, value) -} - -// DeleteValue removes a named value from the key k. -func (k Key) DeleteValue(name string) error { - return regDeleteValue(syscall.Handle(k), syscall.StringToUTF16Ptr(name)) -} - -// ReadValueNames returns the value names of key k. -// The parameter n controls the number of returned names, -// analogous to the way os.File.Readdirnames works. -func (k Key) ReadValueNames(n int) ([]string, error) { - ki, err := k.Stat() - if err != nil { - return nil, err - } - names := make([]string, 0, ki.ValueCount) - buf := make([]uint16, ki.MaxValueNameLen+1) // extra room for terminating null character -loopItems: - for i := uint32(0); ; i++ { - if n > 0 { - if len(names) == n { - return names, nil - } - } - l := uint32(len(buf)) - for { - err := regEnumValue(syscall.Handle(k), i, &buf[0], &l, nil, nil, nil, nil) - if err == nil { - break - } - if err == syscall.ERROR_MORE_DATA { - // Double buffer size and try again. - l = uint32(2 * len(buf)) - buf = make([]uint16, l) - continue - } - if err == _ERROR_NO_MORE_ITEMS { - break loopItems - } - return names, err - } - names = append(names, syscall.UTF16ToString(buf[:l])) - } - if n > len(names) { - return names, io.EOF - } - return names, nil -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go b/src/cmd/vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go deleted file mode 100644 index 3778075da0..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go +++ /dev/null @@ -1,120 +0,0 @@ -// Code generated by 'go generate'; DO NOT EDIT. - -package registry - -import ( - "syscall" - "unsafe" - - "golang.org/x/sys/windows" -) - -var _ unsafe.Pointer - -// Do the interface allocations only once for common -// Errno values. -const ( - errnoERROR_IO_PENDING = 997 -) - -var ( - errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING) -) - -// errnoErr returns common boxed Errno values, to prevent -// allocations at runtime. -func errnoErr(e syscall.Errno) error { - switch e { - case 0: - return nil - case errnoERROR_IO_PENDING: - return errERROR_IO_PENDING - } - // TODO: add more here, after collecting data on the common - // error values see on Windows. (perhaps when running - // all.bat?) - return e -} - -var ( - modadvapi32 = windows.NewLazySystemDLL("advapi32.dll") - modkernel32 = windows.NewLazySystemDLL("kernel32.dll") - - procRegCreateKeyExW = modadvapi32.NewProc("RegCreateKeyExW") - procRegDeleteKeyW = modadvapi32.NewProc("RegDeleteKeyW") - procRegSetValueExW = modadvapi32.NewProc("RegSetValueExW") - procRegEnumValueW = modadvapi32.NewProc("RegEnumValueW") - procRegDeleteValueW = modadvapi32.NewProc("RegDeleteValueW") - procRegLoadMUIStringW = modadvapi32.NewProc("RegLoadMUIStringW") - procRegConnectRegistryW = modadvapi32.NewProc("RegConnectRegistryW") - procExpandEnvironmentStringsW = modkernel32.NewProc("ExpandEnvironmentStringsW") -) - -func regCreateKeyEx(key syscall.Handle, subkey *uint16, reserved uint32, class *uint16, options uint32, desired uint32, sa *syscall.SecurityAttributes, result *syscall.Handle, disposition *uint32) (regerrno error) { - r0, _, _ := syscall.Syscall9(procRegCreateKeyExW.Addr(), 9, uintptr(key), uintptr(unsafe.Pointer(subkey)), uintptr(reserved), uintptr(unsafe.Pointer(class)), uintptr(options), uintptr(desired), uintptr(unsafe.Pointer(sa)), uintptr(unsafe.Pointer(result)), uintptr(unsafe.Pointer(disposition))) - if r0 != 0 { - regerrno = syscall.Errno(r0) - } - return -} - -func regDeleteKey(key syscall.Handle, subkey *uint16) (regerrno error) { - r0, _, _ := syscall.Syscall(procRegDeleteKeyW.Addr(), 2, uintptr(key), uintptr(unsafe.Pointer(subkey)), 0) - if r0 != 0 { - regerrno = syscall.Errno(r0) - } - return -} - -func regSetValueEx(key syscall.Handle, valueName *uint16, reserved uint32, vtype uint32, buf *byte, bufsize uint32) (regerrno error) { - r0, _, _ := syscall.Syscall6(procRegSetValueExW.Addr(), 6, uintptr(key), uintptr(unsafe.Pointer(valueName)), uintptr(reserved), uintptr(vtype), uintptr(unsafe.Pointer(buf)), uintptr(bufsize)) - if r0 != 0 { - regerrno = syscall.Errno(r0) - } - return -} - -func regEnumValue(key syscall.Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) { - r0, _, _ := syscall.Syscall9(procRegEnumValueW.Addr(), 8, uintptr(key), uintptr(index), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(valtype)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(buflen)), 0) - if r0 != 0 { - regerrno = syscall.Errno(r0) - } - return -} - -func regDeleteValue(key syscall.Handle, name *uint16) (regerrno error) { - r0, _, _ := syscall.Syscall(procRegDeleteValueW.Addr(), 2, uintptr(key), uintptr(unsafe.Pointer(name)), 0) - if r0 != 0 { - regerrno = syscall.Errno(r0) - } - return -} - -func regLoadMUIString(key syscall.Handle, name *uint16, buf *uint16, buflen uint32, buflenCopied *uint32, flags uint32, dir *uint16) (regerrno error) { - r0, _, _ := syscall.Syscall9(procRegLoadMUIStringW.Addr(), 7, uintptr(key), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buf)), uintptr(buflen), uintptr(unsafe.Pointer(buflenCopied)), uintptr(flags), uintptr(unsafe.Pointer(dir)), 0, 0) - if r0 != 0 { - regerrno = syscall.Errno(r0) - } - return -} - -func regConnectRegistry(machinename *uint16, key syscall.Handle, result *syscall.Handle) (regerrno error) { - r0, _, _ := syscall.Syscall(procRegConnectRegistryW.Addr(), 3, uintptr(unsafe.Pointer(machinename)), uintptr(key), uintptr(unsafe.Pointer(result))) - if r0 != 0 { - regerrno = syscall.Errno(r0) - } - return -} - -func expandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procExpandEnvironmentStringsW.Addr(), 3, uintptr(unsafe.Pointer(src)), uintptr(unsafe.Pointer(dst)), uintptr(size)) - n = uint32(r0) - if n == 0 { - if e1 != 0 { - err = errnoErr(e1) - } else { - err = syscall.EINVAL - } - } - return -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/security_windows.go b/src/cmd/vendor/golang.org/x/sys/windows/security_windows.go index 9f946da6fe..da06406c44 100644 --- a/src/cmd/vendor/golang.org/x/sys/windows/security_windows.go +++ b/src/cmd/vendor/golang.org/x/sys/windows/security_windows.go @@ -169,6 +169,7 @@ const ( //sys GetLengthSid(sid *SID) (len uint32) = advapi32.GetLengthSid //sys CopySid(destSidLen uint32, destSid *SID, srcSid *SID) (err error) = advapi32.CopySid //sys AllocateAndInitializeSid(identAuth *SidIdentifierAuthority, subAuth byte, subAuth0 uint32, subAuth1 uint32, subAuth2 uint32, subAuth3 uint32, subAuth4 uint32, subAuth5 uint32, subAuth6 uint32, subAuth7 uint32, sid **SID) (err error) = advapi32.AllocateAndInitializeSid +//sys createWellKnownSid(sidType WELL_KNOWN_SID_TYPE, domainSid *SID, sid *SID, sizeSid *uint32) (err error) = advapi32.CreateWellKnownSid //sys FreeSid(sid *SID) (err error) [failretval!=0] = advapi32.FreeSid //sys EqualSid(sid1 *SID, sid2 *SID) (isEqual bool) = advapi32.EqualSid @@ -286,6 +287,158 @@ func (sid *SID) LookupAccount(system string) (account, domain string, accType ui } } +// Various types of pre-specified sids that can be synthesized at runtime. +type WELL_KNOWN_SID_TYPE uint32 + +const ( + WinNullSid = 0 + WinWorldSid = 1 + WinLocalSid = 2 + WinCreatorOwnerSid = 3 + WinCreatorGroupSid = 4 + WinCreatorOwnerServerSid = 5 + WinCreatorGroupServerSid = 6 + WinNtAuthoritySid = 7 + WinDialupSid = 8 + WinNetworkSid = 9 + WinBatchSid = 10 + WinInteractiveSid = 11 + WinServiceSid = 12 + WinAnonymousSid = 13 + WinProxySid = 14 + WinEnterpriseControllersSid = 15 + WinSelfSid = 16 + WinAuthenticatedUserSid = 17 + WinRestrictedCodeSid = 18 + WinTerminalServerSid = 19 + WinRemoteLogonIdSid = 20 + WinLogonIdsSid = 21 + WinLocalSystemSid = 22 + WinLocalServiceSid = 23 + WinNetworkServiceSid = 24 + WinBuiltinDomainSid = 25 + WinBuiltinAdministratorsSid = 26 + WinBuiltinUsersSid = 27 + WinBuiltinGuestsSid = 28 + WinBuiltinPowerUsersSid = 29 + WinBuiltinAccountOperatorsSid = 30 + WinBuiltinSystemOperatorsSid = 31 + WinBuiltinPrintOperatorsSid = 32 + WinBuiltinBackupOperatorsSid = 33 + WinBuiltinReplicatorSid = 34 + WinBuiltinPreWindows2000CompatibleAccessSid = 35 + WinBuiltinRemoteDesktopUsersSid = 36 + WinBuiltinNetworkConfigurationOperatorsSid = 37 + WinAccountAdministratorSid = 38 + WinAccountGuestSid = 39 + WinAccountKrbtgtSid = 40 + WinAccountDomainAdminsSid = 41 + WinAccountDomainUsersSid = 42 + WinAccountDomainGuestsSid = 43 + WinAccountComputersSid = 44 + WinAccountControllersSid = 45 + WinAccountCertAdminsSid = 46 + WinAccountSchemaAdminsSid = 47 + WinAccountEnterpriseAdminsSid = 48 + WinAccountPolicyAdminsSid = 49 + WinAccountRasAndIasServersSid = 50 + WinNTLMAuthenticationSid = 51 + WinDigestAuthenticationSid = 52 + WinSChannelAuthenticationSid = 53 + WinThisOrganizationSid = 54 + WinOtherOrganizationSid = 55 + WinBuiltinIncomingForestTrustBuildersSid = 56 + WinBuiltinPerfMonitoringUsersSid = 57 + WinBuiltinPerfLoggingUsersSid = 58 + WinBuiltinAuthorizationAccessSid = 59 + WinBuiltinTerminalServerLicenseServersSid = 60 + WinBuiltinDCOMUsersSid = 61 + WinBuiltinIUsersSid = 62 + WinIUserSid = 63 + WinBuiltinCryptoOperatorsSid = 64 + WinUntrustedLabelSid = 65 + WinLowLabelSid = 66 + WinMediumLabelSid = 67 + WinHighLabelSid = 68 + WinSystemLabelSid = 69 + WinWriteRestrictedCodeSid = 70 + WinCreatorOwnerRightsSid = 71 + WinCacheablePrincipalsGroupSid = 72 + WinNonCacheablePrincipalsGroupSid = 73 + WinEnterpriseReadonlyControllersSid = 74 + WinAccountReadonlyControllersSid = 75 + WinBuiltinEventLogReadersGroup = 76 + WinNewEnterpriseReadonlyControllersSid = 77 + WinBuiltinCertSvcDComAccessGroup = 78 + WinMediumPlusLabelSid = 79 + WinLocalLogonSid = 80 + WinConsoleLogonSid = 81 + WinThisOrganizationCertificateSid = 82 + WinApplicationPackageAuthoritySid = 83 + WinBuiltinAnyPackageSid = 84 + WinCapabilityInternetClientSid = 85 + WinCapabilityInternetClientServerSid = 86 + WinCapabilityPrivateNetworkClientServerSid = 87 + WinCapabilityPicturesLibrarySid = 88 + WinCapabilityVideosLibrarySid = 89 + WinCapabilityMusicLibrarySid = 90 + WinCapabilityDocumentsLibrarySid = 91 + WinCapabilitySharedUserCertificatesSid = 92 + WinCapabilityEnterpriseAuthenticationSid = 93 + WinCapabilityRemovableStorageSid = 94 + WinBuiltinRDSRemoteAccessServersSid = 95 + WinBuiltinRDSEndpointServersSid = 96 + WinBuiltinRDSManagementServersSid = 97 + WinUserModeDriversSid = 98 + WinBuiltinHyperVAdminsSid = 99 + WinAccountCloneableControllersSid = 100 + WinBuiltinAccessControlAssistanceOperatorsSid = 101 + WinBuiltinRemoteManagementUsersSid = 102 + WinAuthenticationAuthorityAssertedSid = 103 + WinAuthenticationServiceAssertedSid = 104 + WinLocalAccountSid = 105 + WinLocalAccountAndAdministratorSid = 106 + WinAccountProtectedUsersSid = 107 + WinCapabilityAppointmentsSid = 108 + WinCapabilityContactsSid = 109 + WinAccountDefaultSystemManagedSid = 110 + WinBuiltinDefaultSystemManagedGroupSid = 111 + WinBuiltinStorageReplicaAdminsSid = 112 + WinAccountKeyAdminsSid = 113 + WinAccountEnterpriseKeyAdminsSid = 114 + WinAuthenticationKeyTrustSid = 115 + WinAuthenticationKeyPropertyMFASid = 116 + WinAuthenticationKeyPropertyAttestationSid = 117 + WinAuthenticationFreshKeyAuthSid = 118 + WinBuiltinDeviceOwnersSid = 119 +) + +// Creates a sid for a well-known predefined alias, generally using the constants of the form +// Win*Sid, for the local machine. +func CreateWellKnownSid(sidType WELL_KNOWN_SID_TYPE) (*SID, error) { + return CreateWellKnownDomainSid(sidType, nil) +} + +// Creates a sid for a well-known predefined alias, generally using the constants of the form +// Win*Sid, for the domain specified by the domainSid parameter. +func CreateWellKnownDomainSid(sidType WELL_KNOWN_SID_TYPE, domainSid *SID) (*SID, error) { + n := uint32(50) + for { + b := make([]byte, n) + sid := (*SID)(unsafe.Pointer(&b[0])) + err := createWellKnownSid(sidType, domainSid, sid, &n) + if err == nil { + return sid, nil + } + if err != ERROR_INSUFFICIENT_BUFFER { + return nil, err + } + if n <= uint32(len(b)) { + return nil, err + } + } +} + const ( // do not reorder TOKEN_ASSIGN_PRIMARY = 1 << iota @@ -372,6 +525,7 @@ type Tokengroups struct { //sys OpenProcessToken(h Handle, access uint32, token *Token) (err error) = advapi32.OpenProcessToken //sys GetTokenInformation(t Token, infoClass uint32, info *byte, infoLen uint32, returnedLen *uint32) (err error) = advapi32.GetTokenInformation //sys GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) = userenv.GetUserProfileDirectoryW +//sys getSystemDirectory(dir *uint16, dirLen uint32) (len uint32, err error) = kernel32.GetSystemDirectoryW // An access token contains the security information for a logon session. // The system creates an access token when a user logs on, and every @@ -468,6 +622,23 @@ func (t Token) GetUserProfileDirectory() (string, error) { } } +// GetSystemDirectory retrieves path to current location of the system +// directory, which is typically, though not always, C:\Windows\System32. +func GetSystemDirectory() (string, error) { + n := uint32(MAX_PATH) + for { + b := make([]uint16, n) + l, e := getSystemDirectory(&b[0], n) + if e != nil { + return "", e + } + if l <= n { + return UTF16ToString(b[:l]), nil + } + n = l + } +} + // IsMember reports whether the access token t is a member of the provided SID. func (t Token) IsMember(sid *SID) (bool, error) { var b int32 diff --git a/src/cmd/vendor/golang.org/x/sys/windows/service.go b/src/cmd/vendor/golang.org/x/sys/windows/service.go index 62fc31b40b..994b1290ce 100644 --- a/src/cmd/vendor/golang.org/x/sys/windows/service.go +++ b/src/cmd/vendor/golang.org/x/sys/windows/service.go @@ -99,8 +99,6 @@ const ( SERVICE_CONFIG_DESCRIPTION = 1 SERVICE_CONFIG_FAILURE_ACTIONS = 2 - NO_ERROR = 0 - SC_ENUM_PROCESS_INFO = 0 ) diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/debug/log.go b/src/cmd/vendor/golang.org/x/sys/windows/svc/debug/log.go deleted file mode 100644 index e51ab42a1a..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/debug/log.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2012 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. - -// +build windows - -package debug - -import ( - "os" - "strconv" -) - -// Log interface allows different log implementations to be used. -type Log interface { - Close() error - Info(eid uint32, msg string) error - Warning(eid uint32, msg string) error - Error(eid uint32, msg string) error -} - -// ConsoleLog provides access to the console. -type ConsoleLog struct { - Name string -} - -// New creates new ConsoleLog. -func New(source string) *ConsoleLog { - return &ConsoleLog{Name: source} -} - -// Close closes console log l. -func (l *ConsoleLog) Close() error { - return nil -} - -func (l *ConsoleLog) report(kind string, eid uint32, msg string) error { - s := l.Name + "." + kind + "(" + strconv.Itoa(int(eid)) + "): " + msg + "\n" - _, err := os.Stdout.Write([]byte(s)) - return err -} - -// Info writes an information event msg with event id eid to the console l. -func (l *ConsoleLog) Info(eid uint32, msg string) error { - return l.report("info", eid, msg) -} - -// Warning writes an warning event msg with event id eid to the console l. -func (l *ConsoleLog) Warning(eid uint32, msg string) error { - return l.report("warn", eid, msg) -} - -// Error writes an error event msg with event id eid to the console l. -func (l *ConsoleLog) Error(eid uint32, msg string) error { - return l.report("error", eid, msg) -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/debug/service.go b/src/cmd/vendor/golang.org/x/sys/windows/svc/debug/service.go deleted file mode 100644 index e621b87adc..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/debug/service.go +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2012 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. - -// +build windows - -// Package debug provides facilities to execute svc.Handler on console. -// -package debug - -import ( - "os" - "os/signal" - "syscall" - - "golang.org/x/sys/windows/svc" -) - -// Run executes service name by calling appropriate handler function. -// The process is running on console, unlike real service. Use Ctrl+C to -// send "Stop" command to your service. -func Run(name string, handler svc.Handler) error { - cmds := make(chan svc.ChangeRequest) - changes := make(chan svc.Status) - - sig := make(chan os.Signal) - signal.Notify(sig) - - go func() { - status := svc.Status{State: svc.Stopped} - for { - select { - case <-sig: - cmds <- svc.ChangeRequest{Cmd: svc.Stop, CurrentStatus: status} - case status = <-changes: - } - } - }() - - _, errno := handler.Execute([]string{name}, cmds, changes) - if errno != 0 { - return syscall.Errno(errno) - } - return nil -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/event.go b/src/cmd/vendor/golang.org/x/sys/windows/svc/event.go deleted file mode 100644 index 0508e22881..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/event.go +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2012 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. - -// +build windows - -package svc - -import ( - "errors" - - "golang.org/x/sys/windows" -) - -// event represents auto-reset, initially non-signaled Windows event. -// It is used to communicate between go and asm parts of this package. -type event struct { - h windows.Handle -} - -func newEvent() (*event, error) { - h, err := windows.CreateEvent(nil, 0, 0, nil) - if err != nil { - return nil, err - } - return &event{h: h}, nil -} - -func (e *event) Close() error { - return windows.CloseHandle(e.h) -} - -func (e *event) Set() error { - return windows.SetEvent(e.h) -} - -func (e *event) Wait() error { - s, err := windows.WaitForSingleObject(e.h, windows.INFINITE) - switch s { - case windows.WAIT_OBJECT_0: - break - case windows.WAIT_FAILED: - return err - default: - return errors.New("unexpected result from WaitForSingleObject") - } - return nil -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/eventlog/install.go b/src/cmd/vendor/golang.org/x/sys/windows/svc/eventlog/install.go deleted file mode 100644 index c76a3760a4..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/eventlog/install.go +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2012 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. - -// +build windows - -package eventlog - -import ( - "errors" - - "golang.org/x/sys/windows" - "golang.org/x/sys/windows/registry" -) - -const ( - // Log levels. - Info = windows.EVENTLOG_INFORMATION_TYPE - Warning = windows.EVENTLOG_WARNING_TYPE - Error = windows.EVENTLOG_ERROR_TYPE -) - -const addKeyName = `SYSTEM\CurrentControlSet\Services\EventLog\Application` - -// Install modifies PC registry to allow logging with an event source src. -// It adds all required keys and values to the event log registry key. -// Install uses msgFile as the event message file. If useExpandKey is true, -// the event message file is installed as REG_EXPAND_SZ value, -// otherwise as REG_SZ. Use bitwise of log.Error, log.Warning and -// log.Info to specify events supported by the new event source. -func Install(src, msgFile string, useExpandKey bool, eventsSupported uint32) error { - appkey, err := registry.OpenKey(registry.LOCAL_MACHINE, addKeyName, registry.CREATE_SUB_KEY) - if err != nil { - return err - } - defer appkey.Close() - - sk, alreadyExist, err := registry.CreateKey(appkey, src, registry.SET_VALUE) - if err != nil { - return err - } - defer sk.Close() - if alreadyExist { - return errors.New(addKeyName + `\` + src + " registry key already exists") - } - - err = sk.SetDWordValue("CustomSource", 1) - if err != nil { - return err - } - if useExpandKey { - err = sk.SetExpandStringValue("EventMessageFile", msgFile) - } else { - err = sk.SetStringValue("EventMessageFile", msgFile) - } - if err != nil { - return err - } - err = sk.SetDWordValue("TypesSupported", eventsSupported) - if err != nil { - return err - } - return nil -} - -// InstallAsEventCreate is the same as Install, but uses -// %SystemRoot%\System32\EventCreate.exe as the event message file. -func InstallAsEventCreate(src string, eventsSupported uint32) error { - return Install(src, "%SystemRoot%\\System32\\EventCreate.exe", true, eventsSupported) -} - -// Remove deletes all registry elements installed by the correspondent Install. -func Remove(src string) error { - appkey, err := registry.OpenKey(registry.LOCAL_MACHINE, addKeyName, registry.SET_VALUE) - if err != nil { - return err - } - defer appkey.Close() - return registry.DeleteKey(appkey, src) -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/eventlog/log.go b/src/cmd/vendor/golang.org/x/sys/windows/svc/eventlog/log.go deleted file mode 100644 index 46e5153d02..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/eventlog/log.go +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2012 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. - -// +build windows - -// Package eventlog implements access to Windows event log. -// -package eventlog - -import ( - "errors" - "syscall" - - "golang.org/x/sys/windows" -) - -// Log provides access to the system log. -type Log struct { - Handle windows.Handle -} - -// Open retrieves a handle to the specified event log. -func Open(source string) (*Log, error) { - return OpenRemote("", source) -} - -// OpenRemote does the same as Open, but on different computer host. -func OpenRemote(host, source string) (*Log, error) { - if source == "" { - return nil, errors.New("Specify event log source") - } - var s *uint16 - if host != "" { - s = syscall.StringToUTF16Ptr(host) - } - h, err := windows.RegisterEventSource(s, syscall.StringToUTF16Ptr(source)) - if err != nil { - return nil, err - } - return &Log{Handle: h}, nil -} - -// Close closes event log l. -func (l *Log) Close() error { - return windows.DeregisterEventSource(l.Handle) -} - -func (l *Log) report(etype uint16, eid uint32, msg string) error { - ss := []*uint16{syscall.StringToUTF16Ptr(msg)} - return windows.ReportEvent(l.Handle, etype, 0, eid, 0, 1, 0, &ss[0], nil) -} - -// Info writes an information event msg with event id eid to the end of event log l. -// When EventCreate.exe is used, eid must be between 1 and 1000. -func (l *Log) Info(eid uint32, msg string) error { - return l.report(windows.EVENTLOG_INFORMATION_TYPE, eid, msg) -} - -// Warning writes an warning event msg with event id eid to the end of event log l. -// When EventCreate.exe is used, eid must be between 1 and 1000. -func (l *Log) Warning(eid uint32, msg string) error { - return l.report(windows.EVENTLOG_WARNING_TYPE, eid, msg) -} - -// Error writes an error event msg with event id eid to the end of event log l. -// When EventCreate.exe is used, eid must be between 1 and 1000. -func (l *Log) Error(eid uint32, msg string) error { - return l.report(windows.EVENTLOG_ERROR_TYPE, eid, msg) -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go b/src/cmd/vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go deleted file mode 100644 index 6fbbd4a876..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2012 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. - -// +build windows - -package eventlog_test - -import ( - "testing" - - "golang.org/x/sys/windows/svc/eventlog" -) - -func TestLog(t *testing.T) { - if testing.Short() { - t.Skip("skipping test in short mode - it modifies system logs") - } - - const name = "mylog" - const supports = eventlog.Error | eventlog.Warning | eventlog.Info - err := eventlog.InstallAsEventCreate(name, supports) - if err != nil { - t.Fatalf("Install failed: %s", err) - } - defer func() { - err = eventlog.Remove(name) - if err != nil { - t.Fatalf("Remove failed: %s", err) - } - }() - - l, err := eventlog.Open(name) - if err != nil { - t.Fatalf("Open failed: %s", err) - } - defer l.Close() - - err = l.Info(1, "info") - if err != nil { - t.Fatalf("Info failed: %s", err) - } - err = l.Warning(2, "warning") - if err != nil { - t.Fatalf("Warning failed: %s", err) - } - err = l.Error(3, "error") - if err != nil { - t.Fatalf("Error failed: %s", err) - } -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/example/beep.go b/src/cmd/vendor/golang.org/x/sys/windows/svc/example/beep.go deleted file mode 100644 index dcf23408d3..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/example/beep.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2012 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. - -// +build windows - -package main - -import ( - "syscall" -) - -// BUG(brainman): MessageBeep Windows api is broken on Windows 7, -// so this example does not beep when runs as service on Windows 7. - -var ( - beepFunc = syscall.MustLoadDLL("user32.dll").MustFindProc("MessageBeep") -) - -func beep() { - beepFunc.Call(0xffffffff) -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/example/install.go b/src/cmd/vendor/golang.org/x/sys/windows/svc/example/install.go deleted file mode 100644 index 39cb00d2ad..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/example/install.go +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2012 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. - -// +build windows - -package main - -import ( - "fmt" - "os" - "path/filepath" - - "golang.org/x/sys/windows/svc/eventlog" - "golang.org/x/sys/windows/svc/mgr" -) - -func exePath() (string, error) { - prog := os.Args[0] - p, err := filepath.Abs(prog) - if err != nil { - return "", err - } - fi, err := os.Stat(p) - if err == nil { - if !fi.Mode().IsDir() { - return p, nil - } - err = fmt.Errorf("%s is directory", p) - } - if filepath.Ext(p) == "" { - p += ".exe" - fi, err := os.Stat(p) - if err == nil { - if !fi.Mode().IsDir() { - return p, nil - } - err = fmt.Errorf("%s is directory", p) - } - } - return "", err -} - -func installService(name, desc string) error { - exepath, err := exePath() - if err != nil { - return err - } - m, err := mgr.Connect() - if err != nil { - return err - } - defer m.Disconnect() - s, err := m.OpenService(name) - if err == nil { - s.Close() - return fmt.Errorf("service %s already exists", name) - } - s, err = m.CreateService(name, exepath, mgr.Config{DisplayName: desc}, "is", "auto-started") - if err != nil { - return err - } - defer s.Close() - err = eventlog.InstallAsEventCreate(name, eventlog.Error|eventlog.Warning|eventlog.Info) - if err != nil { - s.Delete() - return fmt.Errorf("SetupEventLogSource() failed: %s", err) - } - return nil -} - -func removeService(name string) error { - m, err := mgr.Connect() - if err != nil { - return err - } - defer m.Disconnect() - s, err := m.OpenService(name) - if err != nil { - return fmt.Errorf("service %s is not installed", name) - } - defer s.Close() - err = s.Delete() - if err != nil { - return err - } - err = eventlog.Remove(name) - if err != nil { - return fmt.Errorf("RemoveEventLogSource() failed: %s", err) - } - return nil -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/example/main.go b/src/cmd/vendor/golang.org/x/sys/windows/svc/example/main.go deleted file mode 100644 index dc96c081af..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/example/main.go +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2012 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. - -// +build windows - -// Example service program that beeps. -// -// The program demonstrates how to create Windows service and -// install / remove it on a computer. It also shows how to -// stop / start / pause / continue any service, and how to -// write to event log. It also shows how to use debug -// facilities available in debug package. -// -package main - -import ( - "fmt" - "log" - "os" - "strings" - - "golang.org/x/sys/windows/svc" -) - -func usage(errmsg string) { - fmt.Fprintf(os.Stderr, - "%s\n\n"+ - "usage: %s \n"+ - " where is one of\n"+ - " install, remove, debug, start, stop, pause or continue.\n", - errmsg, os.Args[0]) - os.Exit(2) -} - -func main() { - const svcName = "myservice" - - isIntSess, err := svc.IsAnInteractiveSession() - if err != nil { - log.Fatalf("failed to determine if we are running in an interactive session: %v", err) - } - if !isIntSess { - runService(svcName, false) - return - } - - if len(os.Args) < 2 { - usage("no command specified") - } - - cmd := strings.ToLower(os.Args[1]) - switch cmd { - case "debug": - runService(svcName, true) - return - case "install": - err = installService(svcName, "my service") - case "remove": - err = removeService(svcName) - case "start": - err = startService(svcName) - case "stop": - err = controlService(svcName, svc.Stop, svc.Stopped) - case "pause": - err = controlService(svcName, svc.Pause, svc.Paused) - case "continue": - err = controlService(svcName, svc.Continue, svc.Running) - default: - usage(fmt.Sprintf("invalid command %s", cmd)) - } - if err != nil { - log.Fatalf("failed to %s %s: %v", cmd, svcName, err) - } - return -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/example/manage.go b/src/cmd/vendor/golang.org/x/sys/windows/svc/example/manage.go deleted file mode 100644 index 782dbd96ca..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/example/manage.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2012 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. - -// +build windows - -package main - -import ( - "fmt" - "time" - - "golang.org/x/sys/windows/svc" - "golang.org/x/sys/windows/svc/mgr" -) - -func startService(name string) error { - m, err := mgr.Connect() - if err != nil { - return err - } - defer m.Disconnect() - s, err := m.OpenService(name) - if err != nil { - return fmt.Errorf("could not access service: %v", err) - } - defer s.Close() - err = s.Start("is", "manual-started") - if err != nil { - return fmt.Errorf("could not start service: %v", err) - } - return nil -} - -func controlService(name string, c svc.Cmd, to svc.State) error { - m, err := mgr.Connect() - if err != nil { - return err - } - defer m.Disconnect() - s, err := m.OpenService(name) - if err != nil { - return fmt.Errorf("could not access service: %v", err) - } - defer s.Close() - status, err := s.Control(c) - if err != nil { - return fmt.Errorf("could not send control=%d: %v", c, err) - } - timeout := time.Now().Add(10 * time.Second) - for status.State != to { - if timeout.Before(time.Now()) { - return fmt.Errorf("timeout waiting for service to go to state=%d", to) - } - time.Sleep(300 * time.Millisecond) - status, err = s.Query() - if err != nil { - return fmt.Errorf("could not retrieve service status: %v", err) - } - } - return nil -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/example/service.go b/src/cmd/vendor/golang.org/x/sys/windows/svc/example/service.go deleted file mode 100644 index 74c9393018..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/example/service.go +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2012 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. - -// +build windows - -package main - -import ( - "fmt" - "strings" - "time" - - "golang.org/x/sys/windows/svc" - "golang.org/x/sys/windows/svc/debug" - "golang.org/x/sys/windows/svc/eventlog" -) - -var elog debug.Log - -type myservice struct{} - -func (m *myservice) Execute(args []string, r <-chan svc.ChangeRequest, changes chan<- svc.Status) (ssec bool, errno uint32) { - const cmdsAccepted = svc.AcceptStop | svc.AcceptShutdown | svc.AcceptPauseAndContinue - changes <- svc.Status{State: svc.StartPending} - fasttick := time.Tick(500 * time.Millisecond) - slowtick := time.Tick(2 * time.Second) - tick := fasttick - changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted} - elog.Info(1, strings.Join(args, "-")) -loop: - for { - select { - case <-tick: - beep() - elog.Info(1, "beep") - case c := <-r: - switch c.Cmd { - case svc.Interrogate: - changes <- c.CurrentStatus - // Testing deadlock from https://code.google.com/p/winsvc/issues/detail?id=4 - time.Sleep(100 * time.Millisecond) - changes <- c.CurrentStatus - case svc.Stop, svc.Shutdown: - break loop - case svc.Pause: - changes <- svc.Status{State: svc.Paused, Accepts: cmdsAccepted} - tick = slowtick - case svc.Continue: - changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted} - tick = fasttick - default: - elog.Error(1, fmt.Sprintf("unexpected control request #%d", c)) - } - } - } - changes <- svc.Status{State: svc.StopPending} - return -} - -func runService(name string, isDebug bool) { - var err error - if isDebug { - elog = debug.New(name) - } else { - elog, err = eventlog.Open(name) - if err != nil { - return - } - } - defer elog.Close() - - elog.Info(1, fmt.Sprintf("starting %s service", name)) - run := svc.Run - if isDebug { - run = debug.Run - } - err = run(name, &myservice{}) - if err != nil { - elog.Error(1, fmt.Sprintf("%s service failed: %v", name, err)) - return - } - elog.Info(1, fmt.Sprintf("%s service stopped", name)) -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/go12.c b/src/cmd/vendor/golang.org/x/sys/windows/svc/go12.c deleted file mode 100644 index 6f1be1fa3b..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/go12.c +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2012 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. - -// +build windows -// +build !go1.3 - -// copied from pkg/runtime -typedef unsigned int uint32; -typedef unsigned long long int uint64; -#ifdef _64BIT -typedef uint64 uintptr; -#else -typedef uint32 uintptr; -#endif - -// from sys_386.s or sys_amd64.s -void ·servicemain(void); - -void -·getServiceMain(uintptr *r) -{ - *r = (uintptr)·servicemain; -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/go12.go b/src/cmd/vendor/golang.org/x/sys/windows/svc/go12.go deleted file mode 100644 index cd8b913c99..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/go12.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2014 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. - -// +build windows -// +build !go1.3 - -package svc - -// from go12.c -func getServiceMain(r *uintptr) diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/go13.go b/src/cmd/vendor/golang.org/x/sys/windows/svc/go13.go deleted file mode 100644 index 9d7f3cec54..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/go13.go +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2014 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. - -// +build windows -// +build go1.3 - -package svc - -import "unsafe" - -const ptrSize = 4 << (^uintptr(0) >> 63) // unsafe.Sizeof(uintptr(0)) but an ideal const - -// Should be a built-in for unsafe.Pointer? -func add(p unsafe.Pointer, x uintptr) unsafe.Pointer { - return unsafe.Pointer(uintptr(p) + x) -} - -// funcPC returns the entry PC of the function f. -// It assumes that f is a func value. Otherwise the behavior is undefined. -func funcPC(f interface{}) uintptr { - return **(**uintptr)(add(unsafe.Pointer(&f), ptrSize)) -} - -// from sys_386.s and sys_amd64.s -func servicectlhandler(ctl uint32) uintptr -func servicemain(argc uint32, argv **uint16) - -func getServiceMain(r *uintptr) { - *r = funcPC(servicemain) -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/mgr/config.go b/src/cmd/vendor/golang.org/x/sys/windows/svc/mgr/config.go deleted file mode 100644 index d804e31f1f..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/mgr/config.go +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright 2012 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. - -// +build windows - -package mgr - -import ( - "syscall" - "unicode/utf16" - "unsafe" - - "golang.org/x/sys/windows" -) - -const ( - // Service start types. - StartManual = windows.SERVICE_DEMAND_START // the service must be started manually - StartAutomatic = windows.SERVICE_AUTO_START // the service will start by itself whenever the computer reboots - StartDisabled = windows.SERVICE_DISABLED // the service cannot be started - - // The severity of the error, and action taken, - // if this service fails to start. - ErrorCritical = windows.SERVICE_ERROR_CRITICAL - ErrorIgnore = windows.SERVICE_ERROR_IGNORE - ErrorNormal = windows.SERVICE_ERROR_NORMAL - ErrorSevere = windows.SERVICE_ERROR_SEVERE -) - -// TODO(brainman): Password is not returned by windows.QueryServiceConfig, not sure how to get it. - -type Config struct { - ServiceType uint32 - StartType uint32 - ErrorControl uint32 - BinaryPathName string // fully qualified path to the service binary file, can also include arguments for an auto-start service - LoadOrderGroup string - TagId uint32 - Dependencies []string - ServiceStartName string // name of the account under which the service should run - DisplayName string - Password string - Description string -} - -func toString(p *uint16) string { - if p == nil { - return "" - } - return syscall.UTF16ToString((*[4096]uint16)(unsafe.Pointer(p))[:]) -} - -func toStringSlice(ps *uint16) []string { - if ps == nil { - return nil - } - r := make([]string, 0) - for from, i, p := 0, 0, (*[1 << 24]uint16)(unsafe.Pointer(ps)); true; i++ { - if p[i] == 0 { - // empty string marks the end - if i <= from { - break - } - r = append(r, string(utf16.Decode(p[from:i]))) - from = i + 1 - } - } - return r -} - -// Config retrieves service s configuration paramteres. -func (s *Service) Config() (Config, error) { - var p *windows.QUERY_SERVICE_CONFIG - n := uint32(1024) - for { - b := make([]byte, n) - p = (*windows.QUERY_SERVICE_CONFIG)(unsafe.Pointer(&b[0])) - err := windows.QueryServiceConfig(s.Handle, p, n, &n) - if err == nil { - break - } - if err.(syscall.Errno) != syscall.ERROR_INSUFFICIENT_BUFFER { - return Config{}, err - } - if n <= uint32(len(b)) { - return Config{}, err - } - } - - b, err := s.queryServiceConfig2(windows.SERVICE_CONFIG_DESCRIPTION) - if err != nil { - return Config{}, err - } - p2 := (*windows.SERVICE_DESCRIPTION)(unsafe.Pointer(&b[0])) - - return Config{ - ServiceType: p.ServiceType, - StartType: p.StartType, - ErrorControl: p.ErrorControl, - BinaryPathName: toString(p.BinaryPathName), - LoadOrderGroup: toString(p.LoadOrderGroup), - TagId: p.TagId, - Dependencies: toStringSlice(p.Dependencies), - ServiceStartName: toString(p.ServiceStartName), - DisplayName: toString(p.DisplayName), - Description: toString(p2.Description), - }, nil -} - -func updateDescription(handle windows.Handle, desc string) error { - d := windows.SERVICE_DESCRIPTION{Description: toPtr(desc)} - return windows.ChangeServiceConfig2(handle, - windows.SERVICE_CONFIG_DESCRIPTION, (*byte)(unsafe.Pointer(&d))) -} - -// UpdateConfig updates service s configuration parameters. -func (s *Service) UpdateConfig(c Config) error { - err := windows.ChangeServiceConfig(s.Handle, c.ServiceType, c.StartType, - c.ErrorControl, toPtr(c.BinaryPathName), toPtr(c.LoadOrderGroup), - nil, toStringBlock(c.Dependencies), toPtr(c.ServiceStartName), - toPtr(c.Password), toPtr(c.DisplayName)) - if err != nil { - return err - } - return updateDescription(s.Handle, c.Description) -} - -// queryServiceConfig2 calls Windows QueryServiceConfig2 with infoLevel parameter and returns retrieved service configuration information. -func (s *Service) queryServiceConfig2(infoLevel uint32) ([]byte, error) { - n := uint32(1024) - for { - b := make([]byte, n) - err := windows.QueryServiceConfig2(s.Handle, infoLevel, &b[0], n, &n) - if err == nil { - return b, nil - } - if err.(syscall.Errno) != syscall.ERROR_INSUFFICIENT_BUFFER { - return nil, err - } - if n <= uint32(len(b)) { - return nil, err - } - } -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/mgr/mgr.go b/src/cmd/vendor/golang.org/x/sys/windows/svc/mgr/mgr.go deleted file mode 100644 index 76965b5601..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/mgr/mgr.go +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright 2012 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. - -// +build windows - -// Package mgr can be used to manage Windows service programs. -// It can be used to install and remove them. It can also start, -// stop and pause them. The package can query / change current -// service state and config parameters. -// -package mgr - -import ( - "syscall" - "unicode/utf16" - "unsafe" - - "golang.org/x/sys/windows" -) - -// Mgr is used to manage Windows service. -type Mgr struct { - Handle windows.Handle -} - -// Connect establishes a connection to the service control manager. -func Connect() (*Mgr, error) { - return ConnectRemote("") -} - -// ConnectRemote establishes a connection to the -// service control manager on computer named host. -func ConnectRemote(host string) (*Mgr, error) { - var s *uint16 - if host != "" { - s = syscall.StringToUTF16Ptr(host) - } - h, err := windows.OpenSCManager(s, nil, windows.SC_MANAGER_ALL_ACCESS) - if err != nil { - return nil, err - } - return &Mgr{Handle: h}, nil -} - -// Disconnect closes connection to the service control manager m. -func (m *Mgr) Disconnect() error { - return windows.CloseServiceHandle(m.Handle) -} - -func toPtr(s string) *uint16 { - if len(s) == 0 { - return nil - } - return syscall.StringToUTF16Ptr(s) -} - -// toStringBlock terminates strings in ss with 0, and then -// concatenates them together. It also adds extra 0 at the end. -func toStringBlock(ss []string) *uint16 { - if len(ss) == 0 { - return nil - } - t := "" - for _, s := range ss { - if s != "" { - t += s + "\x00" - } - } - if t == "" { - return nil - } - t += "\x00" - return &utf16.Encode([]rune(t))[0] -} - -// CreateService installs new service name on the system. -// The service will be executed by running exepath binary. -// Use config c to specify service parameters. -// Any args will be passed as command-line arguments when -// the service is started; these arguments are distinct from -// the arguments passed to Service.Start or via the "Start -// parameters" field in the service's Properties dialog box. -func (m *Mgr) CreateService(name, exepath string, c Config, args ...string) (*Service, error) { - if c.StartType == 0 { - c.StartType = StartManual - } - if c.ErrorControl == 0 { - c.ErrorControl = ErrorNormal - } - if c.ServiceType == 0 { - c.ServiceType = windows.SERVICE_WIN32_OWN_PROCESS - } - s := syscall.EscapeArg(exepath) - for _, v := range args { - s += " " + syscall.EscapeArg(v) - } - h, err := windows.CreateService(m.Handle, toPtr(name), toPtr(c.DisplayName), - windows.SERVICE_ALL_ACCESS, c.ServiceType, - c.StartType, c.ErrorControl, toPtr(s), toPtr(c.LoadOrderGroup), - nil, toStringBlock(c.Dependencies), toPtr(c.ServiceStartName), toPtr(c.Password)) - if err != nil { - return nil, err - } - if c.Description != "" { - err = updateDescription(h, c.Description) - if err != nil { - return nil, err - } - } - return &Service{Name: name, Handle: h}, nil -} - -// OpenService retrieves access to service name, so it can -// be interrogated and controlled. -func (m *Mgr) OpenService(name string) (*Service, error) { - h, err := windows.OpenService(m.Handle, syscall.StringToUTF16Ptr(name), windows.SERVICE_ALL_ACCESS) - if err != nil { - return nil, err - } - return &Service{Name: name, Handle: h}, nil -} - -// ListServices enumerates services in the specified -// service control manager database m. -// If the caller does not have the SERVICE_QUERY_STATUS -// access right to a service, the service is silently -// omitted from the list of services returned. -func (m *Mgr) ListServices() ([]string, error) { - var err error - var bytesNeeded, servicesReturned uint32 - var buf []byte - for { - var p *byte - if len(buf) > 0 { - p = &buf[0] - } - err = windows.EnumServicesStatusEx(m.Handle, windows.SC_ENUM_PROCESS_INFO, - windows.SERVICE_WIN32, windows.SERVICE_STATE_ALL, - p, uint32(len(buf)), &bytesNeeded, &servicesReturned, nil, nil) - if err == nil { - break - } - if err != syscall.ERROR_MORE_DATA { - return nil, err - } - if bytesNeeded <= uint32(len(buf)) { - return nil, err - } - buf = make([]byte, bytesNeeded) - } - if servicesReturned == 0 { - return nil, nil - } - services := (*[1 << 20]windows.ENUM_SERVICE_STATUS_PROCESS)(unsafe.Pointer(&buf[0]))[:servicesReturned] - var names []string - for _, s := range services { - name := syscall.UTF16ToString((*[1 << 20]uint16)(unsafe.Pointer(s.ServiceName))[:]) - names = append(names, name) - } - return names, nil -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/mgr/mgr_test.go b/src/cmd/vendor/golang.org/x/sys/windows/svc/mgr/mgr_test.go deleted file mode 100644 index 9171f5bcf1..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/mgr/mgr_test.go +++ /dev/null @@ -1,282 +0,0 @@ -// Copyright 2012 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. - -// +build windows - -package mgr_test - -import ( - "os" - "path/filepath" - "sort" - "strings" - "syscall" - "testing" - "time" - - "golang.org/x/sys/windows/svc/mgr" -) - -func TestOpenLanManServer(t *testing.T) { - m, err := mgr.Connect() - if err != nil { - if errno, ok := err.(syscall.Errno); ok && errno == syscall.ERROR_ACCESS_DENIED { - t.Skip("Skipping test: we don't have rights to manage services.") - } - t.Fatalf("SCM connection failed: %s", err) - } - defer m.Disconnect() - - s, err := m.OpenService("LanmanServer") - if err != nil { - t.Fatalf("OpenService(lanmanserver) failed: %s", err) - } - defer s.Close() - - _, err = s.Config() - if err != nil { - t.Fatalf("Config failed: %s", err) - } -} - -func install(t *testing.T, m *mgr.Mgr, name, exepath string, c mgr.Config) { - // Sometimes it takes a while for the service to get - // removed after previous test run. - for i := 0; ; i++ { - s, err := m.OpenService(name) - if err != nil { - break - } - s.Close() - - if i > 10 { - t.Fatalf("service %s already exists", name) - } - time.Sleep(300 * time.Millisecond) - } - - s, err := m.CreateService(name, exepath, c) - if err != nil { - t.Fatalf("CreateService(%s) failed: %v", name, err) - } - defer s.Close() -} - -func depString(d []string) string { - if len(d) == 0 { - return "" - } - for i := range d { - d[i] = strings.ToLower(d[i]) - } - ss := sort.StringSlice(d) - ss.Sort() - return strings.Join([]string(ss), " ") -} - -func testConfig(t *testing.T, s *mgr.Service, should mgr.Config) mgr.Config { - is, err := s.Config() - if err != nil { - t.Fatalf("Config failed: %s", err) - } - if should.DisplayName != is.DisplayName { - t.Fatalf("config mismatch: DisplayName is %q, but should have %q", is.DisplayName, should.DisplayName) - } - if should.StartType != is.StartType { - t.Fatalf("config mismatch: StartType is %v, but should have %v", is.StartType, should.StartType) - } - if should.Description != is.Description { - t.Fatalf("config mismatch: Description is %q, but should have %q", is.Description, should.Description) - } - if depString(should.Dependencies) != depString(is.Dependencies) { - t.Fatalf("config mismatch: Dependencies is %v, but should have %v", is.Dependencies, should.Dependencies) - } - return is -} - -func testRecoveryActions(t *testing.T, s *mgr.Service, should []mgr.RecoveryAction) { - is, err := s.RecoveryActions() - if err != nil { - t.Fatalf("RecoveryActions failed: %s", err) - } - if len(should) != len(is) { - t.Errorf("recovery action mismatch: contains %v actions, but should have %v", len(is), len(should)) - } - for i, _ := range is { - if should[i].Type != is[i].Type { - t.Errorf("recovery action mismatch: Type is %v, but should have %v", is[i].Type, should[i].Type) - } - if should[i].Delay != is[i].Delay { - t.Errorf("recovery action mismatch: Delay is %v, but should have %v", is[i].Delay, should[i].Delay) - } - } -} - -func testResetPeriod(t *testing.T, s *mgr.Service, should uint32) { - is, err := s.ResetPeriod() - if err != nil { - t.Fatalf("ResetPeriod failed: %s", err) - } - if should != is { - t.Errorf("reset period mismatch: reset period is %v, but should have %v", is, should) - } -} - -func testSetRecoveryActions(t *testing.T, s *mgr.Service) { - r := []mgr.RecoveryAction{ - mgr.RecoveryAction{ - Type: mgr.NoAction, - Delay: 60000 * time.Millisecond, - }, - mgr.RecoveryAction{ - Type: mgr.ServiceRestart, - Delay: 4 * time.Minute, - }, - mgr.RecoveryAction{ - Type: mgr.ServiceRestart, - Delay: time.Minute, - }, - mgr.RecoveryAction{ - Type: mgr.RunCommand, - Delay: 4000 * time.Millisecond, - }, - } - - // 4 recovery actions with reset period - err := s.SetRecoveryActions(r, uint32(10000)) - if err != nil { - t.Fatalf("SetRecoveryActions failed: %v", err) - } - testRecoveryActions(t, s, r) - testResetPeriod(t, s, uint32(10000)) - - // Infinite reset period - err = s.SetRecoveryActions(r, syscall.INFINITE) - if err != nil { - t.Fatalf("SetRecoveryActions failed: %v", err) - } - testRecoveryActions(t, s, r) - testResetPeriod(t, s, syscall.INFINITE) - - // nil recovery actions - err = s.SetRecoveryActions(nil, 0) - if err.Error() != "recoveryActions cannot be nil" { - t.Fatalf("SetRecoveryActions failed with unexpected error message of %q", err) - } - - // Delete all recovery actions and reset period - err = s.ResetRecoveryActions() - if err != nil { - t.Fatalf("ResetRecoveryActions failed: %v", err) - } - testRecoveryActions(t, s, nil) - testResetPeriod(t, s, 0) -} - -func testRebootMessage(t *testing.T, s *mgr.Service, should string) { - err := s.SetRebootMessage(should) - if err != nil { - t.Fatalf("SetRebootMessage failed: %v", err) - } - is, err := s.RebootMessage() - if err != nil { - t.Fatalf("RebootMessage failed: %v", err) - } - if should != is { - t.Errorf("reboot message mismatch: message is %q, but should have %q", is, should) - } -} - -func testRecoveryCommand(t *testing.T, s *mgr.Service, should string) { - err := s.SetRecoveryCommand(should) - if err != nil { - t.Fatalf("SetRecoveryCommand failed: %v", err) - } - is, err := s.RecoveryCommand() - if err != nil { - t.Fatalf("RecoveryCommand failed: %v", err) - } - if should != is { - t.Errorf("recovery command mismatch: command is %q, but should have %q", is, should) - } -} - -func remove(t *testing.T, s *mgr.Service) { - err := s.Delete() - if err != nil { - t.Fatalf("Delete failed: %s", err) - } -} - -func TestMyService(t *testing.T) { - if testing.Short() { - t.Skip("skipping test in short mode - it modifies system services") - } - - const name = "myservice" - - m, err := mgr.Connect() - if err != nil { - if errno, ok := err.(syscall.Errno); ok && errno == syscall.ERROR_ACCESS_DENIED { - t.Skip("Skipping test: we don't have rights to manage services.") - } - t.Fatalf("SCM connection failed: %s", err) - } - defer m.Disconnect() - - c := mgr.Config{ - StartType: mgr.StartDisabled, - DisplayName: "my service", - Description: "my service is just a test", - Dependencies: []string{"LanmanServer", "W32Time"}, - } - - exename := os.Args[0] - exepath, err := filepath.Abs(exename) - if err != nil { - t.Fatalf("filepath.Abs(%s) failed: %s", exename, err) - } - - install(t, m, name, exepath, c) - - s, err := m.OpenService(name) - if err != nil { - t.Fatalf("service %s is not installed", name) - } - defer s.Close() - - c.BinaryPathName = exepath - c = testConfig(t, s, c) - - c.StartType = mgr.StartManual - err = s.UpdateConfig(c) - if err != nil { - t.Fatalf("UpdateConfig failed: %v", err) - } - - testConfig(t, s, c) - - svcnames, err := m.ListServices() - if err != nil { - t.Fatalf("ListServices failed: %v", err) - } - var myserviceIsInstalled bool - for _, sn := range svcnames { - if sn == name { - myserviceIsInstalled = true - break - } - } - if !myserviceIsInstalled { - t.Errorf("ListServices failed to find %q service", name) - } - - testSetRecoveryActions(t, s) - testRebootMessage(t, s, "myservice failed") - testRebootMessage(t, s, "") // delete reboot message - testRecoveryCommand(t, s, "sc query myservice") - testRecoveryCommand(t, s, "") // delete recovery command - - remove(t, s) -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/mgr/recovery.go b/src/cmd/vendor/golang.org/x/sys/windows/svc/mgr/recovery.go deleted file mode 100644 index 71ce2b8199..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/mgr/recovery.go +++ /dev/null @@ -1,135 +0,0 @@ -// 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. - -// +build windows - -package mgr - -import ( - "errors" - "syscall" - "time" - "unsafe" - - "golang.org/x/sys/windows" -) - -const ( - // Possible recovery actions that the service control manager can perform. - NoAction = windows.SC_ACTION_NONE // no action - ComputerReboot = windows.SC_ACTION_REBOOT // reboot the computer - ServiceRestart = windows.SC_ACTION_RESTART // restart the service - RunCommand = windows.SC_ACTION_RUN_COMMAND // run a command -) - -// RecoveryAction represents an action that the service control manager can perform when service fails. -// A service is considered failed when it terminates without reporting a status of SERVICE_STOPPED to the service controller. -type RecoveryAction struct { - Type int // one of NoAction, ComputerReboot, ServiceRestart or RunCommand - Delay time.Duration // the time to wait before performing the specified action -} - -// SetRecoveryActions sets actions that service controller performs when service fails and -// the time after which to reset the service failure count to zero if there are no failures, in seconds. -// Specify INFINITE to indicate that service failure count should never be reset. -func (s *Service) SetRecoveryActions(recoveryActions []RecoveryAction, resetPeriod uint32) error { - if recoveryActions == nil { - return errors.New("recoveryActions cannot be nil") - } - actions := []windows.SC_ACTION{} - for _, a := range recoveryActions { - action := windows.SC_ACTION{ - Type: uint32(a.Type), - Delay: uint32(a.Delay.Nanoseconds() / 1000000), - } - actions = append(actions, action) - } - rActions := windows.SERVICE_FAILURE_ACTIONS{ - ActionsCount: uint32(len(actions)), - Actions: &actions[0], - ResetPeriod: resetPeriod, - } - return windows.ChangeServiceConfig2(s.Handle, windows.SERVICE_CONFIG_FAILURE_ACTIONS, (*byte)(unsafe.Pointer(&rActions))) -} - -// RecoveryActions returns actions that service controller performs when service fails. -// The service control manager counts the number of times service s has failed since the system booted. -// The count is reset to 0 if the service has not failed for ResetPeriod seconds. -// When the service fails for the Nth time, the service controller performs the action specified in element [N-1] of returned slice. -// If N is greater than slice length, the service controller repeats the last action in the slice. -func (s *Service) RecoveryActions() ([]RecoveryAction, error) { - b, err := s.queryServiceConfig2(windows.SERVICE_CONFIG_FAILURE_ACTIONS) - if err != nil { - return nil, err - } - p := (*windows.SERVICE_FAILURE_ACTIONS)(unsafe.Pointer(&b[0])) - if p.Actions == nil { - return nil, err - } - - var recoveryActions []RecoveryAction - actions := (*[1024]windows.SC_ACTION)(unsafe.Pointer(p.Actions))[:p.ActionsCount] - for _, action := range actions { - recoveryActions = append(recoveryActions, RecoveryAction{Type: int(action.Type), Delay: time.Duration(action.Delay) * time.Millisecond}) - } - return recoveryActions, nil -} - -// ResetRecoveryActions deletes both reset period and array of failure actions. -func (s *Service) ResetRecoveryActions() error { - actions := make([]windows.SC_ACTION, 1) - rActions := windows.SERVICE_FAILURE_ACTIONS{ - Actions: &actions[0], - } - return windows.ChangeServiceConfig2(s.Handle, windows.SERVICE_CONFIG_FAILURE_ACTIONS, (*byte)(unsafe.Pointer(&rActions))) -} - -// ResetPeriod is the time after which to reset the service failure -// count to zero if there are no failures, in seconds. -func (s *Service) ResetPeriod() (uint32, error) { - b, err := s.queryServiceConfig2(windows.SERVICE_CONFIG_FAILURE_ACTIONS) - if err != nil { - return 0, err - } - p := (*windows.SERVICE_FAILURE_ACTIONS)(unsafe.Pointer(&b[0])) - return p.ResetPeriod, nil -} - -// SetRebootMessage sets service s reboot message. -// If msg is "", the reboot message is deleted and no message is broadcast. -func (s *Service) SetRebootMessage(msg string) error { - rActions := windows.SERVICE_FAILURE_ACTIONS{ - RebootMsg: syscall.StringToUTF16Ptr(msg), - } - return windows.ChangeServiceConfig2(s.Handle, windows.SERVICE_CONFIG_FAILURE_ACTIONS, (*byte)(unsafe.Pointer(&rActions))) -} - -// RebootMessage is broadcast to server users before rebooting in response to the ComputerReboot service controller action. -func (s *Service) RebootMessage() (string, error) { - b, err := s.queryServiceConfig2(windows.SERVICE_CONFIG_FAILURE_ACTIONS) - if err != nil { - return "", err - } - p := (*windows.SERVICE_FAILURE_ACTIONS)(unsafe.Pointer(&b[0])) - return toString(p.RebootMsg), nil -} - -// SetRecoveryCommand sets the command line of the process to execute in response to the RunCommand service controller action. -// If cmd is "", the command is deleted and no program is run when the service fails. -func (s *Service) SetRecoveryCommand(cmd string) error { - rActions := windows.SERVICE_FAILURE_ACTIONS{ - Command: syscall.StringToUTF16Ptr(cmd), - } - return windows.ChangeServiceConfig2(s.Handle, windows.SERVICE_CONFIG_FAILURE_ACTIONS, (*byte)(unsafe.Pointer(&rActions))) -} - -// RecoveryCommand is the command line of the process to execute in response to the RunCommand service controller action. This process runs under the same account as the service. -func (s *Service) RecoveryCommand() (string, error) { - b, err := s.queryServiceConfig2(windows.SERVICE_CONFIG_FAILURE_ACTIONS) - if err != nil { - return "", err - } - p := (*windows.SERVICE_FAILURE_ACTIONS)(unsafe.Pointer(&b[0])) - return toString(p.Command), nil -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/mgr/service.go b/src/cmd/vendor/golang.org/x/sys/windows/svc/mgr/service.go deleted file mode 100644 index fdc46af5fc..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/mgr/service.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2012 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. - -// +build windows - -package mgr - -import ( - "syscall" - - "golang.org/x/sys/windows" - "golang.org/x/sys/windows/svc" -) - -// TODO(brainman): Use EnumDependentServices to enumerate dependent services. - -// Service is used to access Windows service. -type Service struct { - Name string - Handle windows.Handle -} - -// Delete marks service s for deletion from the service control manager database. -func (s *Service) Delete() error { - return windows.DeleteService(s.Handle) -} - -// Close relinquish access to the service s. -func (s *Service) Close() error { - return windows.CloseServiceHandle(s.Handle) -} - -// Start starts service s. -// args will be passed to svc.Handler.Execute. -func (s *Service) Start(args ...string) error { - var p **uint16 - if len(args) > 0 { - vs := make([]*uint16, len(args)) - for i := range vs { - vs[i] = syscall.StringToUTF16Ptr(args[i]) - } - p = &vs[0] - } - return windows.StartService(s.Handle, uint32(len(args)), p) -} - -// Control sends state change request c to the servce s. -func (s *Service) Control(c svc.Cmd) (svc.Status, error) { - var t windows.SERVICE_STATUS - err := windows.ControlService(s.Handle, uint32(c), &t) - if err != nil { - return svc.Status{}, err - } - return svc.Status{ - State: svc.State(t.CurrentState), - Accepts: svc.Accepted(t.ControlsAccepted), - }, nil -} - -// Query returns current status of service s. -func (s *Service) Query() (svc.Status, error) { - var t windows.SERVICE_STATUS - err := windows.QueryServiceStatus(s.Handle, &t) - if err != nil { - return svc.Status{}, err - } - return svc.Status{ - State: svc.State(t.CurrentState), - Accepts: svc.Accepted(t.ControlsAccepted), - }, nil -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/security.go b/src/cmd/vendor/golang.org/x/sys/windows/svc/security.go deleted file mode 100644 index 6fbc9236ed..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/security.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2012 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. - -// +build windows - -package svc - -import ( - "unsafe" - - "golang.org/x/sys/windows" -) - -func allocSid(subAuth0 uint32) (*windows.SID, error) { - var sid *windows.SID - err := windows.AllocateAndInitializeSid(&windows.SECURITY_NT_AUTHORITY, - 1, subAuth0, 0, 0, 0, 0, 0, 0, 0, &sid) - if err != nil { - return nil, err - } - return sid, nil -} - -// IsAnInteractiveSession determines if calling process is running interactively. -// It queries the process token for membership in the Interactive group. -// http://stackoverflow.com/questions/2668851/how-do-i-detect-that-my-application-is-running-as-service-or-in-an-interactive-s -func IsAnInteractiveSession() (bool, error) { - interSid, err := allocSid(windows.SECURITY_INTERACTIVE_RID) - if err != nil { - return false, err - } - defer windows.FreeSid(interSid) - - serviceSid, err := allocSid(windows.SECURITY_SERVICE_RID) - if err != nil { - return false, err - } - defer windows.FreeSid(serviceSid) - - t, err := windows.OpenCurrentProcessToken() - if err != nil { - return false, err - } - defer t.Close() - - gs, err := t.GetTokenGroups() - if err != nil { - return false, err - } - p := unsafe.Pointer(&gs.Groups[0]) - groups := (*[2 << 20]windows.SIDAndAttributes)(p)[:gs.GroupCount] - for _, g := range groups { - if windows.EqualSid(g.Sid, interSid) { - return true, nil - } - if windows.EqualSid(g.Sid, serviceSid) { - return false, nil - } - } - return false, nil -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/service.go b/src/cmd/vendor/golang.org/x/sys/windows/svc/service.go deleted file mode 100644 index cda26b54b3..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/service.go +++ /dev/null @@ -1,363 +0,0 @@ -// Copyright 2012 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. - -// +build windows - -// Package svc provides everything required to build Windows service. -// -package svc - -import ( - "errors" - "runtime" - "syscall" - "unsafe" - - "golang.org/x/sys/windows" -) - -// State describes service execution state (Stopped, Running and so on). -type State uint32 - -const ( - Stopped = State(windows.SERVICE_STOPPED) - StartPending = State(windows.SERVICE_START_PENDING) - StopPending = State(windows.SERVICE_STOP_PENDING) - Running = State(windows.SERVICE_RUNNING) - ContinuePending = State(windows.SERVICE_CONTINUE_PENDING) - PausePending = State(windows.SERVICE_PAUSE_PENDING) - Paused = State(windows.SERVICE_PAUSED) -) - -// Cmd represents service state change request. It is sent to a service -// by the service manager, and should be actioned upon by the service. -type Cmd uint32 - -const ( - Stop = Cmd(windows.SERVICE_CONTROL_STOP) - Pause = Cmd(windows.SERVICE_CONTROL_PAUSE) - Continue = Cmd(windows.SERVICE_CONTROL_CONTINUE) - Interrogate = Cmd(windows.SERVICE_CONTROL_INTERROGATE) - Shutdown = Cmd(windows.SERVICE_CONTROL_SHUTDOWN) - ParamChange = Cmd(windows.SERVICE_CONTROL_PARAMCHANGE) - NetBindAdd = Cmd(windows.SERVICE_CONTROL_NETBINDADD) - NetBindRemove = Cmd(windows.SERVICE_CONTROL_NETBINDREMOVE) - NetBindEnable = Cmd(windows.SERVICE_CONTROL_NETBINDENABLE) - NetBindDisable = Cmd(windows.SERVICE_CONTROL_NETBINDDISABLE) - DeviceEvent = Cmd(windows.SERVICE_CONTROL_DEVICEEVENT) - HardwareProfileChange = Cmd(windows.SERVICE_CONTROL_HARDWAREPROFILECHANGE) - PowerEvent = Cmd(windows.SERVICE_CONTROL_POWEREVENT) - SessionChange = Cmd(windows.SERVICE_CONTROL_SESSIONCHANGE) -) - -// Accepted is used to describe commands accepted by the service. -// Note that Interrogate is always accepted. -type Accepted uint32 - -const ( - AcceptStop = Accepted(windows.SERVICE_ACCEPT_STOP) - AcceptShutdown = Accepted(windows.SERVICE_ACCEPT_SHUTDOWN) - AcceptPauseAndContinue = Accepted(windows.SERVICE_ACCEPT_PAUSE_CONTINUE) - AcceptParamChange = Accepted(windows.SERVICE_ACCEPT_PARAMCHANGE) - AcceptNetBindChange = Accepted(windows.SERVICE_ACCEPT_NETBINDCHANGE) - AcceptHardwareProfileChange = Accepted(windows.SERVICE_ACCEPT_HARDWAREPROFILECHANGE) - AcceptPowerEvent = Accepted(windows.SERVICE_ACCEPT_POWEREVENT) - AcceptSessionChange = Accepted(windows.SERVICE_ACCEPT_SESSIONCHANGE) -) - -// Status combines State and Accepted commands to fully describe running service. -type Status struct { - State State - Accepts Accepted - CheckPoint uint32 // used to report progress during a lengthy operation - WaitHint uint32 // estimated time required for a pending operation, in milliseconds -} - -// ChangeRequest is sent to the service Handler to request service status change. -type ChangeRequest struct { - Cmd Cmd - EventType uint32 - EventData uintptr - CurrentStatus Status -} - -// Handler is the interface that must be implemented to build Windows service. -type Handler interface { - - // Execute will be called by the package code at the start of - // the service, and the service will exit once Execute completes. - // Inside Execute you must read service change requests from r and - // act accordingly. You must keep service control manager up to date - // about state of your service by writing into s as required. - // args contains service name followed by argument strings passed - // to the service. - // You can provide service exit code in exitCode return parameter, - // with 0 being "no error". You can also indicate if exit code, - // if any, is service specific or not by using svcSpecificEC - // parameter. - Execute(args []string, r <-chan ChangeRequest, s chan<- Status) (svcSpecificEC bool, exitCode uint32) -} - -var ( - // These are used by asm code. - goWaitsH uintptr - cWaitsH uintptr - ssHandle uintptr - sName *uint16 - sArgc uintptr - sArgv **uint16 - ctlHandlerExProc uintptr - cSetEvent uintptr - cWaitForSingleObject uintptr - cRegisterServiceCtrlHandlerExW uintptr -) - -func init() { - k := syscall.MustLoadDLL("kernel32.dll") - cSetEvent = k.MustFindProc("SetEvent").Addr() - cWaitForSingleObject = k.MustFindProc("WaitForSingleObject").Addr() - a := syscall.MustLoadDLL("advapi32.dll") - cRegisterServiceCtrlHandlerExW = a.MustFindProc("RegisterServiceCtrlHandlerExW").Addr() -} - -// The HandlerEx prototype also has a context pointer but since we don't use -// it at start-up time we don't have to pass it over either. -type ctlEvent struct { - cmd Cmd - eventType uint32 - eventData uintptr - errno uint32 -} - -// service provides access to windows service api. -type service struct { - name string - h windows.Handle - cWaits *event - goWaits *event - c chan ctlEvent - handler Handler -} - -func newService(name string, handler Handler) (*service, error) { - var s service - var err error - s.name = name - s.c = make(chan ctlEvent) - s.handler = handler - s.cWaits, err = newEvent() - if err != nil { - return nil, err - } - s.goWaits, err = newEvent() - if err != nil { - s.cWaits.Close() - return nil, err - } - return &s, nil -} - -func (s *service) close() error { - s.cWaits.Close() - s.goWaits.Close() - return nil -} - -type exitCode struct { - isSvcSpecific bool - errno uint32 -} - -func (s *service) updateStatus(status *Status, ec *exitCode) error { - if s.h == 0 { - return errors.New("updateStatus with no service status handle") - } - var t windows.SERVICE_STATUS - t.ServiceType = windows.SERVICE_WIN32_OWN_PROCESS - t.CurrentState = uint32(status.State) - if status.Accepts&AcceptStop != 0 { - t.ControlsAccepted |= windows.SERVICE_ACCEPT_STOP - } - if status.Accepts&AcceptShutdown != 0 { - t.ControlsAccepted |= windows.SERVICE_ACCEPT_SHUTDOWN - } - if status.Accepts&AcceptPauseAndContinue != 0 { - t.ControlsAccepted |= windows.SERVICE_ACCEPT_PAUSE_CONTINUE - } - if status.Accepts&AcceptParamChange != 0 { - t.ControlsAccepted |= windows.SERVICE_ACCEPT_PARAMCHANGE - } - if status.Accepts&AcceptNetBindChange != 0 { - t.ControlsAccepted |= windows.SERVICE_ACCEPT_NETBINDCHANGE - } - if status.Accepts&AcceptHardwareProfileChange != 0 { - t.ControlsAccepted |= windows.SERVICE_ACCEPT_HARDWAREPROFILECHANGE - } - if status.Accepts&AcceptPowerEvent != 0 { - t.ControlsAccepted |= windows.SERVICE_ACCEPT_POWEREVENT - } - if status.Accepts&AcceptSessionChange != 0 { - t.ControlsAccepted |= windows.SERVICE_ACCEPT_SESSIONCHANGE - } - if ec.errno == 0 { - t.Win32ExitCode = windows.NO_ERROR - t.ServiceSpecificExitCode = windows.NO_ERROR - } else if ec.isSvcSpecific { - t.Win32ExitCode = uint32(windows.ERROR_SERVICE_SPECIFIC_ERROR) - t.ServiceSpecificExitCode = ec.errno - } else { - t.Win32ExitCode = ec.errno - t.ServiceSpecificExitCode = windows.NO_ERROR - } - t.CheckPoint = status.CheckPoint - t.WaitHint = status.WaitHint - return windows.SetServiceStatus(s.h, &t) -} - -const ( - sysErrSetServiceStatusFailed = uint32(syscall.APPLICATION_ERROR) + iota - sysErrNewThreadInCallback -) - -func (s *service) run() { - s.goWaits.Wait() - s.h = windows.Handle(ssHandle) - argv := (*[100]*int16)(unsafe.Pointer(sArgv))[:sArgc] - args := make([]string, len(argv)) - for i, a := range argv { - args[i] = syscall.UTF16ToString((*[1 << 20]uint16)(unsafe.Pointer(a))[:]) - } - - cmdsToHandler := make(chan ChangeRequest) - changesFromHandler := make(chan Status) - exitFromHandler := make(chan exitCode) - - go func() { - ss, errno := s.handler.Execute(args, cmdsToHandler, changesFromHandler) - exitFromHandler <- exitCode{ss, errno} - }() - - status := Status{State: Stopped} - ec := exitCode{isSvcSpecific: true, errno: 0} - var outch chan ChangeRequest - inch := s.c - var cmd Cmd - var evtype uint32 - var evdata uintptr -loop: - for { - select { - case r := <-inch: - if r.errno != 0 { - ec.errno = r.errno - break loop - } - inch = nil - outch = cmdsToHandler - cmd = r.cmd - evtype = r.eventType - evdata = r.eventData - case outch <- ChangeRequest{cmd, evtype, evdata, status}: - inch = s.c - outch = nil - case c := <-changesFromHandler: - err := s.updateStatus(&c, &ec) - if err != nil { - // best suitable error number - ec.errno = sysErrSetServiceStatusFailed - if err2, ok := err.(syscall.Errno); ok { - ec.errno = uint32(err2) - } - break loop - } - status = c - case ec = <-exitFromHandler: - break loop - } - } - - s.updateStatus(&Status{State: Stopped}, &ec) - s.cWaits.Set() -} - -func newCallback(fn interface{}) (cb uintptr, err error) { - defer func() { - r := recover() - if r == nil { - return - } - cb = 0 - switch v := r.(type) { - case string: - err = errors.New(v) - case error: - err = v - default: - err = errors.New("unexpected panic in syscall.NewCallback") - } - }() - return syscall.NewCallback(fn), nil -} - -// BUG(brainman): There is no mechanism to run multiple services -// inside one single executable. Perhaps, it can be overcome by -// using RegisterServiceCtrlHandlerEx Windows api. - -// Run executes service name by calling appropriate handler function. -func Run(name string, handler Handler) error { - runtime.LockOSThread() - - tid := windows.GetCurrentThreadId() - - s, err := newService(name, handler) - if err != nil { - return err - } - - ctlHandler := func(ctl uint32, evtype uint32, evdata uintptr, context uintptr) uintptr { - e := ctlEvent{cmd: Cmd(ctl), eventType: evtype, eventData: evdata} - // We assume that this callback function is running on - // the same thread as Run. Nowhere in MS documentation - // I could find statement to guarantee that. So putting - // check here to verify, otherwise things will go bad - // quickly, if ignored. - i := windows.GetCurrentThreadId() - if i != tid { - e.errno = sysErrNewThreadInCallback - } - s.c <- e - // Always return NO_ERROR (0) for now. - return 0 - } - - var svcmain uintptr - getServiceMain(&svcmain) - t := []windows.SERVICE_TABLE_ENTRY{ - {ServiceName: syscall.StringToUTF16Ptr(s.name), ServiceProc: svcmain}, - {ServiceName: nil, ServiceProc: 0}, - } - - goWaitsH = uintptr(s.goWaits.h) - cWaitsH = uintptr(s.cWaits.h) - sName = t[0].ServiceName - ctlHandlerExProc, err = newCallback(ctlHandler) - if err != nil { - return err - } - - go s.run() - - err = windows.StartServiceCtrlDispatcher(&t[0]) - if err != nil { - return err - } - return nil -} - -// StatusHandle returns service status handle. It is safe to call this function -// from inside the Handler.Execute because then it is guaranteed to be set. -// This code will have to change once multiple services are possible per process. -func StatusHandle() windows.Handle { - return windows.Handle(ssHandle) -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/svc_test.go b/src/cmd/vendor/golang.org/x/sys/windows/svc/svc_test.go deleted file mode 100644 index feed8fabde..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/svc_test.go +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright 2012 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. - -// +build windows - -package svc_test - -import ( - "fmt" - "io/ioutil" - "math/rand" - "os" - "os/exec" - "path/filepath" - "strings" - "testing" - "time" - - "golang.org/x/sys/windows/svc" - "golang.org/x/sys/windows/svc/mgr" -) - -func getState(t *testing.T, s *mgr.Service) svc.State { - status, err := s.Query() - if err != nil { - t.Fatalf("Query(%s) failed: %s", s.Name, err) - } - return status.State -} - -func testState(t *testing.T, s *mgr.Service, want svc.State) { - have := getState(t, s) - if have != want { - t.Fatalf("%s state is=%d want=%d", s.Name, have, want) - } -} - -func waitState(t *testing.T, s *mgr.Service, want svc.State) { - for i := 0; ; i++ { - have := getState(t, s) - if have == want { - return - } - if i > 10 { - t.Fatalf("%s state is=%d, waiting timeout", s.Name, have) - } - time.Sleep(300 * time.Millisecond) - } -} - -func TestExample(t *testing.T) { - if testing.Short() { - t.Skip("skipping test in short mode - it modifies system services") - } - - const name = "myservice" - - m, err := mgr.Connect() - if err != nil { - t.Fatalf("SCM connection failed: %s", err) - } - defer m.Disconnect() - - dir, err := ioutil.TempDir("", "svc") - if err != nil { - t.Fatalf("failed to create temp directory: %v", err) - } - defer os.RemoveAll(dir) - - exepath := filepath.Join(dir, "a.exe") - o, err := exec.Command("go", "build", "-o", exepath, "golang.org/x/sys/windows/svc/example").CombinedOutput() - if err != nil { - t.Fatalf("failed to build service program: %v\n%v", err, string(o)) - } - - s, err := m.OpenService(name) - if err == nil { - err = s.Delete() - if err != nil { - s.Close() - t.Fatalf("Delete failed: %s", err) - } - s.Close() - } - s, err = m.CreateService(name, exepath, mgr.Config{DisplayName: "my service"}, "is", "auto-started") - if err != nil { - t.Fatalf("CreateService(%s) failed: %v", name, err) - } - defer s.Close() - - args := []string{"is", "manual-started", fmt.Sprintf("%d", rand.Int())} - - testState(t, s, svc.Stopped) - err = s.Start(args...) - if err != nil { - t.Fatalf("Start(%s) failed: %s", s.Name, err) - } - waitState(t, s, svc.Running) - time.Sleep(1 * time.Second) - - // testing deadlock from issues 4. - _, err = s.Control(svc.Interrogate) - if err != nil { - t.Fatalf("Control(%s) failed: %s", s.Name, err) - } - _, err = s.Control(svc.Interrogate) - if err != nil { - t.Fatalf("Control(%s) failed: %s", s.Name, err) - } - time.Sleep(1 * time.Second) - - _, err = s.Control(svc.Stop) - if err != nil { - t.Fatalf("Control(%s) failed: %s", s.Name, err) - } - waitState(t, s, svc.Stopped) - - err = s.Delete() - if err != nil { - t.Fatalf("Delete failed: %s", err) - } - - out, err := exec.Command("wevtutil.exe", "qe", "Application", "/q:*[System[Provider[@Name='myservice']]]", "/rd:true", "/c:10").CombinedOutput() - if err != nil { - t.Fatalf("wevtutil failed: %v\n%v", err, string(out)) - } - if want := strings.Join(append([]string{name}, args...), "-"); !strings.Contains(string(out), want) { - t.Errorf("%q string does not contain %q", string(out), want) - } -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/sys_386.s b/src/cmd/vendor/golang.org/x/sys/windows/svc/sys_386.s deleted file mode 100644 index 2c82a9d91d..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/sys_386.s +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2012 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. - -// +build windows - -// func servicemain(argc uint32, argv **uint16) -TEXT ·servicemain(SB),7,$0 - MOVL argc+0(FP), AX - MOVL AX, ·sArgc(SB) - MOVL argv+4(FP), AX - MOVL AX, ·sArgv(SB) - - PUSHL BP - PUSHL BX - PUSHL SI - PUSHL DI - - SUBL $12, SP - - MOVL ·sName(SB), AX - MOVL AX, (SP) - MOVL $·servicectlhandler(SB), AX - MOVL AX, 4(SP) - MOVL $0, 8(SP) - MOVL ·cRegisterServiceCtrlHandlerExW(SB), AX - MOVL SP, BP - CALL AX - MOVL BP, SP - CMPL AX, $0 - JE exit - MOVL AX, ·ssHandle(SB) - - MOVL ·goWaitsH(SB), AX - MOVL AX, (SP) - MOVL ·cSetEvent(SB), AX - MOVL SP, BP - CALL AX - MOVL BP, SP - - MOVL ·cWaitsH(SB), AX - MOVL AX, (SP) - MOVL $-1, AX - MOVL AX, 4(SP) - MOVL ·cWaitForSingleObject(SB), AX - MOVL SP, BP - CALL AX - MOVL BP, SP - -exit: - ADDL $12, SP - - POPL DI - POPL SI - POPL BX - POPL BP - - MOVL 0(SP), CX - ADDL $12, SP - JMP CX - -// I do not know why, but this seems to be the only way to call -// ctlHandlerProc on Windows 7. - -// func servicectlhandler(ctl uint32, evtype uint32, evdata uintptr, context uintptr) uintptr { -TEXT ·servicectlhandler(SB),7,$0 - MOVL ·ctlHandlerExProc(SB), CX - JMP CX diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/sys_amd64.s b/src/cmd/vendor/golang.org/x/sys/windows/svc/sys_amd64.s deleted file mode 100644 index bde25e9c48..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/sys_amd64.s +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2012 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. - -// +build windows - -// func servicemain(argc uint32, argv **uint16) -TEXT ·servicemain(SB),7,$0 - MOVL CX, ·sArgc(SB) - MOVQ DX, ·sArgv(SB) - - SUBQ $32, SP // stack for the first 4 syscall params - - MOVQ ·sName(SB), CX - MOVQ $·servicectlhandler(SB), DX - // BUG(pastarmovj): Figure out a way to pass in context in R8. - MOVQ ·cRegisterServiceCtrlHandlerExW(SB), AX - CALL AX - CMPQ AX, $0 - JE exit - MOVQ AX, ·ssHandle(SB) - - MOVQ ·goWaitsH(SB), CX - MOVQ ·cSetEvent(SB), AX - CALL AX - - MOVQ ·cWaitsH(SB), CX - MOVQ $4294967295, DX - MOVQ ·cWaitForSingleObject(SB), AX - CALL AX - -exit: - ADDQ $32, SP - RET - -// I do not know why, but this seems to be the only way to call -// ctlHandlerProc on Windows 7. - -// func ·servicectlhandler(ctl uint32, evtype uint32, evdata uintptr, context uintptr) uintptr { -TEXT ·servicectlhandler(SB),7,$0 - MOVQ ·ctlHandlerExProc(SB), AX - JMP AX diff --git a/src/cmd/vendor/golang.org/x/sys/windows/svc/sys_arm.s b/src/cmd/vendor/golang.org/x/sys/windows/svc/sys_arm.s deleted file mode 100644 index 33c692a8de..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/svc/sys_arm.s +++ /dev/null @@ -1,38 +0,0 @@ -// 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. - -// +build windows - -#include "textflag.h" - -// func servicemain(argc uint32, argv **uint16) -TEXT ·servicemain(SB),NOSPLIT|NOFRAME,$0 - MOVM.DB.W [R4, R14], (R13) // push {r4, lr} - MOVW R13, R4 - BIC $0x7, R13 // alignment for ABI - - MOVW R0, ·sArgc(SB) - MOVW R1, ·sArgv(SB) - - MOVW ·sName(SB), R0 - MOVW ·ctlHandlerExProc(SB), R1 - MOVW $0, R2 - MOVW ·cRegisterServiceCtrlHandlerExW(SB), R3 - BL (R3) - CMP $0, R0 - BEQ exit - MOVW R0, ·ssHandle(SB) - - MOVW ·goWaitsH(SB), R0 - MOVW ·cSetEvent(SB), R1 - BL (R1) - - MOVW ·cWaitsH(SB), R0 - MOVW $-1, R1 - MOVW ·cWaitForSingleObject(SB), R2 - BL (R2) - -exit: - MOVW R4, R13 // free extra stack space - MOVM.IA.W (R13), [R4, R15] // pop {r4, pc} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/syscall_test.go b/src/cmd/vendor/golang.org/x/sys/windows/syscall_test.go deleted file mode 100644 index d7009e44a5..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/syscall_test.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2013 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. - -// +build windows - -package windows_test - -import ( - "syscall" - "testing" - - "golang.org/x/sys/windows" -) - -func testSetGetenv(t *testing.T, key, value string) { - err := windows.Setenv(key, value) - if err != nil { - t.Fatalf("Setenv failed to set %q: %v", value, err) - } - newvalue, found := windows.Getenv(key) - if !found { - t.Fatalf("Getenv failed to find %v variable (want value %q)", key, value) - } - if newvalue != value { - t.Fatalf("Getenv(%v) = %q; want %q", key, newvalue, value) - } -} - -func TestEnv(t *testing.T) { - testSetGetenv(t, "TESTENV", "AVALUE") - // make sure TESTENV gets set to "", not deleted - testSetGetenv(t, "TESTENV", "") -} - -func TestGetProcAddressByOrdinal(t *testing.T) { - // Attempt calling shlwapi.dll:IsOS, resolving it by ordinal, as - // suggested in - // https://msdn.microsoft.com/en-us/library/windows/desktop/bb773795.aspx - h, err := windows.LoadLibrary("shlwapi.dll") - if err != nil { - t.Fatalf("Failed to load shlwapi.dll: %s", err) - } - procIsOS, err := windows.GetProcAddressByOrdinal(h, 437) - if err != nil { - t.Fatalf("Could not find shlwapi.dll:IsOS by ordinal: %s", err) - } - const OS_NT = 1 - r, _, _ := syscall.Syscall(procIsOS, 1, OS_NT, 0, 0) - if r == 0 { - t.Error("shlwapi.dll:IsOS(OS_NT) returned 0, expected non-zero value") - } -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/syscall_windows.go b/src/cmd/vendor/golang.org/x/sys/windows/syscall_windows.go index f72fa55f3e..f4d19644e1 100644 --- a/src/cmd/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/src/cmd/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -137,6 +137,7 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile int32) (handle Handle, err error) [failretval==InvalidHandle] = CreateFileW //sys ReadFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) //sys WriteFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) +//sys GetOverlappedResult(handle Handle, overlapped *Overlapped, done *uint32, wait bool) (err error) //sys SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) [failretval==0xffffffff] //sys CloseHandle(handle Handle) (err error) //sys GetStdHandle(stdhandle uint32) (handle Handle, err error) [failretval==InvalidHandle] @@ -145,6 +146,7 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys findNextFile1(handle Handle, data *win32finddata1) (err error) = FindNextFileW //sys FindClose(handle Handle) (err error) //sys GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (err error) +//sys GetFileInformationByHandleEx(handle Handle, class uint32, outBuffer *byte, outBufferLen uint32) (err error) //sys GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) = GetCurrentDirectoryW //sys SetCurrentDirectory(path *uint16) (err error) = SetCurrentDirectoryW //sys CreateDirectory(path *uint16, sa *SecurityAttributes) (err error) = CreateDirectoryW @@ -559,9 +561,6 @@ func Fsync(fd Handle) (err error) { } func Chmod(path string, mode uint32) (err error) { - if mode == 0 { - return syscall.EINVAL - } p, e := UTF16PtrFromString(path) if e != nil { return e diff --git a/src/cmd/vendor/golang.org/x/sys/windows/syscall_windows_test.go b/src/cmd/vendor/golang.org/x/sys/windows/syscall_windows_test.go deleted file mode 100644 index 539dda2413..0000000000 --- a/src/cmd/vendor/golang.org/x/sys/windows/syscall_windows_test.go +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2012 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 windows_test - -import ( - "io/ioutil" - "os" - "path/filepath" - "syscall" - "testing" - - "golang.org/x/sys/windows" -) - -func TestWin32finddata(t *testing.T) { - dir, err := ioutil.TempDir("", "go-build") - if err != nil { - t.Fatalf("failed to create temp directory: %v", err) - } - defer os.RemoveAll(dir) - - path := filepath.Join(dir, "long_name.and_extension") - f, err := os.Create(path) - if err != nil { - t.Fatalf("failed to create %v: %v", path, err) - } - f.Close() - - type X struct { - fd windows.Win32finddata - got byte - pad [10]byte // to protect ourselves - - } - var want byte = 2 // it is unlikely to have this character in the filename - x := X{got: want} - - pathp, _ := windows.UTF16PtrFromString(path) - h, err := windows.FindFirstFile(pathp, &(x.fd)) - if err != nil { - t.Fatalf("FindFirstFile failed: %v", err) - } - err = windows.FindClose(h) - if err != nil { - t.Fatalf("FindClose failed: %v", err) - } - - if x.got != want { - t.Fatalf("memory corruption: want=%d got=%d", want, x.got) - } -} - -func TestFormatMessage(t *testing.T) { - dll := windows.MustLoadDLL("netevent.dll") - - const TITLE_SC_MESSAGE_BOX uint32 = 0xC0001B75 - const flags uint32 = syscall.FORMAT_MESSAGE_FROM_HMODULE | syscall.FORMAT_MESSAGE_ARGUMENT_ARRAY | syscall.FORMAT_MESSAGE_IGNORE_INSERTS - buf := make([]uint16, 300) - _, err := windows.FormatMessage(flags, uintptr(dll.Handle), TITLE_SC_MESSAGE_BOX, 0, buf, nil) - if err != nil { - t.Fatalf("FormatMessage for handle=%x and errno=%x failed: %v", dll.Handle, TITLE_SC_MESSAGE_BOX, err) - } -} - -func abort(funcname string, err error) { - panic(funcname + " failed: " + err.Error()) -} - -func ExampleLoadLibrary() { - h, err := windows.LoadLibrary("kernel32.dll") - if err != nil { - abort("LoadLibrary", err) - } - defer windows.FreeLibrary(h) - proc, err := windows.GetProcAddress(h, "GetVersion") - if err != nil { - abort("GetProcAddress", err) - } - r, _, _ := syscall.Syscall(uintptr(proc), 0, 0, 0, 0) - major := byte(r) - minor := uint8(r >> 8) - build := uint16(r >> 16) - print("windows version ", major, ".", minor, " (Build ", build, ")\n") -} - -func TestTOKEN_ALL_ACCESS(t *testing.T) { - if windows.TOKEN_ALL_ACCESS != 0xF01FF { - t.Errorf("TOKEN_ALL_ACCESS = %x, want 0xF01FF", windows.TOKEN_ALL_ACCESS) - } -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/types_windows.go b/src/cmd/vendor/golang.org/x/sys/windows/types_windows.go index 141ca81bd7..ee27936840 100644 --- a/src/cmd/vendor/golang.org/x/sys/windows/types_windows.go +++ b/src/cmd/vendor/golang.org/x/sys/windows/types_windows.go @@ -6,33 +6,6 @@ package windows import "syscall" -const ( - // Windows errors. - ERROR_FILE_NOT_FOUND syscall.Errno = 2 - ERROR_PATH_NOT_FOUND syscall.Errno = 3 - ERROR_ACCESS_DENIED syscall.Errno = 5 - ERROR_NO_MORE_FILES syscall.Errno = 18 - ERROR_HANDLE_EOF syscall.Errno = 38 - ERROR_NETNAME_DELETED syscall.Errno = 64 - ERROR_FILE_EXISTS syscall.Errno = 80 - ERROR_BROKEN_PIPE syscall.Errno = 109 - ERROR_BUFFER_OVERFLOW syscall.Errno = 111 - ERROR_INSUFFICIENT_BUFFER syscall.Errno = 122 - ERROR_MOD_NOT_FOUND syscall.Errno = 126 - ERROR_PROC_NOT_FOUND syscall.Errno = 127 - ERROR_ALREADY_EXISTS syscall.Errno = 183 - ERROR_ENVVAR_NOT_FOUND syscall.Errno = 203 - ERROR_MORE_DATA syscall.Errno = 234 - ERROR_OPERATION_ABORTED syscall.Errno = 995 - ERROR_IO_PENDING syscall.Errno = 997 - ERROR_SERVICE_SPECIFIC_ERROR syscall.Errno = 1066 - ERROR_NOT_FOUND syscall.Errno = 1168 - ERROR_PRIVILEGE_NOT_HELD syscall.Errno = 1314 - WSAEACCES syscall.Errno = 10013 - WSAEMSGSIZE syscall.Errno = 10040 - WSAECONNRESET syscall.Errno = 10054 -) - const ( // Invented values to support what package os expects. O_RDONLY = 0x00000 @@ -126,9 +99,19 @@ const ( OPEN_ALWAYS = 4 TRUNCATE_EXISTING = 5 - FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000 - FILE_FLAG_BACKUP_SEMANTICS = 0x02000000 - FILE_FLAG_OVERLAPPED = 0x40000000 + FILE_FLAG_OPEN_REQUIRING_OPLOCK = 0x00040000 + FILE_FLAG_FIRST_PIPE_INSTANCE = 0x00080000 + FILE_FLAG_OPEN_NO_RECALL = 0x00100000 + FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000 + FILE_FLAG_SESSION_AWARE = 0x00800000 + FILE_FLAG_POSIX_SEMANTICS = 0x01000000 + FILE_FLAG_BACKUP_SEMANTICS = 0x02000000 + FILE_FLAG_DELETE_ON_CLOSE = 0x04000000 + FILE_FLAG_SEQUENTIAL_SCAN = 0x08000000 + FILE_FLAG_RANDOM_ACCESS = 0x10000000 + FILE_FLAG_NO_BUFFERING = 0x20000000 + FILE_FLAG_OVERLAPPED = 0x40000000 + FILE_FLAG_WRITE_THROUGH = 0x80000000 HANDLE_FLAG_INHERIT = 0x00000001 STARTF_USESTDHANDLES = 0x00000100 @@ -167,7 +150,6 @@ const ( IGNORE = 0 INFINITE = 0xffffffff - WAIT_TIMEOUT = 258 WAIT_ABANDONED = 0x00000080 WAIT_OBJECT_0 = 0x00000000 WAIT_FAILED = 0xFFFFFFFF @@ -402,12 +384,6 @@ const ( CERT_CHAIN_POLICY_EV = 8 CERT_CHAIN_POLICY_SSL_F12 = 9 - CERT_E_EXPIRED = 0x800B0101 - CERT_E_ROLE = 0x800B0103 - CERT_E_PURPOSE = 0x800B0106 - CERT_E_UNTRUSTEDROOT = 0x800B0109 - CERT_E_CN_NO_MATCH = 0x800B010F - /* AuthType values for SSLExtraCertChainPolicyPara struct */ AUTHTYPE_CLIENT = 1 AUTHTYPE_SERVER = 2 @@ -849,10 +825,6 @@ const ( DNS_TYPE_NBSTAT = 0xff01 ) -const ( - DNS_INFO_NO_RECORDS = 0x251D -) - const ( // flags inside DNSRecord.Dw DnsSectionQuestion = 0x0000 diff --git a/src/cmd/vendor/golang.org/x/sys/windows/zerrors_windows.go b/src/cmd/vendor/golang.org/x/sys/windows/zerrors_windows.go new file mode 100644 index 0000000000..2b4cea5b94 --- /dev/null +++ b/src/cmd/vendor/golang.org/x/sys/windows/zerrors_windows.go @@ -0,0 +1,6853 @@ +// Code generated by 'go generate'; DO NOT EDIT. + +package windows + +import "syscall" + +const ( + FACILITY_NULL = 0 + FACILITY_RPC = 1 + FACILITY_DISPATCH = 2 + FACILITY_STORAGE = 3 + FACILITY_ITF = 4 + FACILITY_WIN32 = 7 + FACILITY_WINDOWS = 8 + FACILITY_SSPI = 9 + FACILITY_SECURITY = 9 + FACILITY_CONTROL = 10 + FACILITY_CERT = 11 + FACILITY_INTERNET = 12 + FACILITY_MEDIASERVER = 13 + FACILITY_MSMQ = 14 + FACILITY_SETUPAPI = 15 + FACILITY_SCARD = 16 + FACILITY_COMPLUS = 17 + FACILITY_AAF = 18 + FACILITY_URT = 19 + FACILITY_ACS = 20 + FACILITY_DPLAY = 21 + FACILITY_UMI = 22 + FACILITY_SXS = 23 + FACILITY_WINDOWS_CE = 24 + FACILITY_HTTP = 25 + FACILITY_USERMODE_COMMONLOG = 26 + FACILITY_WER = 27 + FACILITY_USERMODE_FILTER_MANAGER = 31 + FACILITY_BACKGROUNDCOPY = 32 + FACILITY_CONFIGURATION = 33 + FACILITY_WIA = 33 + FACILITY_STATE_MANAGEMENT = 34 + FACILITY_METADIRECTORY = 35 + FACILITY_WINDOWSUPDATE = 36 + FACILITY_DIRECTORYSERVICE = 37 + FACILITY_GRAPHICS = 38 + FACILITY_SHELL = 39 + FACILITY_NAP = 39 + FACILITY_TPM_SERVICES = 40 + FACILITY_TPM_SOFTWARE = 41 + FACILITY_UI = 42 + FACILITY_XAML = 43 + FACILITY_ACTION_QUEUE = 44 + FACILITY_PLA = 48 + FACILITY_WINDOWS_SETUP = 48 + FACILITY_FVE = 49 + FACILITY_FWP = 50 + FACILITY_WINRM = 51 + FACILITY_NDIS = 52 + FACILITY_USERMODE_HYPERVISOR = 53 + FACILITY_CMI = 54 + FACILITY_USERMODE_VIRTUALIZATION = 55 + FACILITY_USERMODE_VOLMGR = 56 + FACILITY_BCD = 57 + FACILITY_USERMODE_VHD = 58 + FACILITY_USERMODE_HNS = 59 + FACILITY_SDIAG = 60 + FACILITY_WEBSERVICES = 61 + FACILITY_WINPE = 61 + FACILITY_WPN = 62 + FACILITY_WINDOWS_STORE = 63 + FACILITY_INPUT = 64 + FACILITY_EAP = 66 + FACILITY_WINDOWS_DEFENDER = 80 + FACILITY_OPC = 81 + FACILITY_XPS = 82 + FACILITY_MBN = 84 + FACILITY_POWERSHELL = 84 + FACILITY_RAS = 83 + FACILITY_P2P_INT = 98 + FACILITY_P2P = 99 + FACILITY_DAF = 100 + FACILITY_BLUETOOTH_ATT = 101 + FACILITY_AUDIO = 102 + FACILITY_STATEREPOSITORY = 103 + FACILITY_VISUALCPP = 109 + FACILITY_SCRIPT = 112 + FACILITY_PARSE = 113 + FACILITY_BLB = 120 + FACILITY_BLB_CLI = 121 + FACILITY_WSBAPP = 122 + FACILITY_BLBUI = 128 + FACILITY_USN = 129 + FACILITY_USERMODE_VOLSNAP = 130 + FACILITY_TIERING = 131 + FACILITY_WSB_ONLINE = 133 + FACILITY_ONLINE_ID = 134 + FACILITY_DEVICE_UPDATE_AGENT = 135 + FACILITY_DRVSERVICING = 136 + FACILITY_DLS = 153 + FACILITY_DELIVERY_OPTIMIZATION = 208 + FACILITY_USERMODE_SPACES = 231 + FACILITY_USER_MODE_SECURITY_CORE = 232 + FACILITY_USERMODE_LICENSING = 234 + FACILITY_SOS = 160 + FACILITY_DEBUGGERS = 176 + FACILITY_SPP = 256 + FACILITY_RESTORE = 256 + FACILITY_DMSERVER = 256 + FACILITY_DEPLOYMENT_SERVICES_SERVER = 257 + FACILITY_DEPLOYMENT_SERVICES_IMAGING = 258 + FACILITY_DEPLOYMENT_SERVICES_MANAGEMENT = 259 + FACILITY_DEPLOYMENT_SERVICES_UTIL = 260 + FACILITY_DEPLOYMENT_SERVICES_BINLSVC = 261 + FACILITY_DEPLOYMENT_SERVICES_PXE = 263 + FACILITY_DEPLOYMENT_SERVICES_TFTP = 264 + FACILITY_DEPLOYMENT_SERVICES_TRANSPORT_MANAGEMENT = 272 + FACILITY_DEPLOYMENT_SERVICES_DRIVER_PROVISIONING = 278 + FACILITY_DEPLOYMENT_SERVICES_MULTICAST_SERVER = 289 + FACILITY_DEPLOYMENT_SERVICES_MULTICAST_CLIENT = 290 + FACILITY_DEPLOYMENT_SERVICES_CONTENT_PROVIDER = 293 + FACILITY_LINGUISTIC_SERVICES = 305 + FACILITY_AUDIOSTREAMING = 1094 + FACILITY_ACCELERATOR = 1536 + FACILITY_WMAAECMA = 1996 + FACILITY_DIRECTMUSIC = 2168 + FACILITY_DIRECT3D10 = 2169 + FACILITY_DXGI = 2170 + FACILITY_DXGI_DDI = 2171 + FACILITY_DIRECT3D11 = 2172 + FACILITY_DIRECT3D11_DEBUG = 2173 + FACILITY_DIRECT3D12 = 2174 + FACILITY_DIRECT3D12_DEBUG = 2175 + FACILITY_LEAP = 2184 + FACILITY_AUDCLNT = 2185 + FACILITY_WINCODEC_DWRITE_DWM = 2200 + FACILITY_WINML = 2192 + FACILITY_DIRECT2D = 2201 + FACILITY_DEFRAG = 2304 + FACILITY_USERMODE_SDBUS = 2305 + FACILITY_JSCRIPT = 2306 + FACILITY_PIDGENX = 2561 + FACILITY_EAS = 85 + FACILITY_WEB = 885 + FACILITY_WEB_SOCKET = 886 + FACILITY_MOBILE = 1793 + FACILITY_SQLITE = 1967 + FACILITY_UTC = 1989 + FACILITY_WEP = 2049 + FACILITY_SYNCENGINE = 2050 + FACILITY_XBOX = 2339 + FACILITY_PIX = 2748 + ERROR_SUCCESS syscall.Errno = 0 + NO_ERROR = 0 + SEC_E_OK Handle = 0x00000000 + ERROR_INVALID_FUNCTION syscall.Errno = 1 + ERROR_FILE_NOT_FOUND syscall.Errno = 2 + ERROR_PATH_NOT_FOUND syscall.Errno = 3 + ERROR_TOO_MANY_OPEN_FILES syscall.Errno = 4 + ERROR_ACCESS_DENIED syscall.Errno = 5 + ERROR_INVALID_HANDLE syscall.Errno = 6 + ERROR_ARENA_TRASHED syscall.Errno = 7 + ERROR_NOT_ENOUGH_MEMORY syscall.Errno = 8 + ERROR_INVALID_BLOCK syscall.Errno = 9 + ERROR_BAD_ENVIRONMENT syscall.Errno = 10 + ERROR_BAD_FORMAT syscall.Errno = 11 + ERROR_INVALID_ACCESS syscall.Errno = 12 + ERROR_INVALID_DATA syscall.Errno = 13 + ERROR_OUTOFMEMORY syscall.Errno = 14 + ERROR_INVALID_DRIVE syscall.Errno = 15 + ERROR_CURRENT_DIRECTORY syscall.Errno = 16 + ERROR_NOT_SAME_DEVICE syscall.Errno = 17 + ERROR_NO_MORE_FILES syscall.Errno = 18 + ERROR_WRITE_PROTECT syscall.Errno = 19 + ERROR_BAD_UNIT syscall.Errno = 20 + ERROR_NOT_READY syscall.Errno = 21 + ERROR_BAD_COMMAND syscall.Errno = 22 + ERROR_CRC syscall.Errno = 23 + ERROR_BAD_LENGTH syscall.Errno = 24 + ERROR_SEEK syscall.Errno = 25 + ERROR_NOT_DOS_DISK syscall.Errno = 26 + ERROR_SECTOR_NOT_FOUND syscall.Errno = 27 + ERROR_OUT_OF_PAPER syscall.Errno = 28 + ERROR_WRITE_FAULT syscall.Errno = 29 + ERROR_READ_FAULT syscall.Errno = 30 + ERROR_GEN_FAILURE syscall.Errno = 31 + ERROR_SHARING_VIOLATION syscall.Errno = 32 + ERROR_LOCK_VIOLATION syscall.Errno = 33 + ERROR_WRONG_DISK syscall.Errno = 34 + ERROR_SHARING_BUFFER_EXCEEDED syscall.Errno = 36 + ERROR_HANDLE_EOF syscall.Errno = 38 + ERROR_HANDLE_DISK_FULL syscall.Errno = 39 + ERROR_NOT_SUPPORTED syscall.Errno = 50 + ERROR_REM_NOT_LIST syscall.Errno = 51 + ERROR_DUP_NAME syscall.Errno = 52 + ERROR_BAD_NETPATH syscall.Errno = 53 + ERROR_NETWORK_BUSY syscall.Errno = 54 + ERROR_DEV_NOT_EXIST syscall.Errno = 55 + ERROR_TOO_MANY_CMDS syscall.Errno = 56 + ERROR_ADAP_HDW_ERR syscall.Errno = 57 + ERROR_BAD_NET_RESP syscall.Errno = 58 + ERROR_UNEXP_NET_ERR syscall.Errno = 59 + ERROR_BAD_REM_ADAP syscall.Errno = 60 + ERROR_PRINTQ_FULL syscall.Errno = 61 + ERROR_NO_SPOOL_SPACE syscall.Errno = 62 + ERROR_PRINT_CANCELLED syscall.Errno = 63 + ERROR_NETNAME_DELETED syscall.Errno = 64 + ERROR_NETWORK_ACCESS_DENIED syscall.Errno = 65 + ERROR_BAD_DEV_TYPE syscall.Errno = 66 + ERROR_BAD_NET_NAME syscall.Errno = 67 + ERROR_TOO_MANY_NAMES syscall.Errno = 68 + ERROR_TOO_MANY_SESS syscall.Errno = 69 + ERROR_SHARING_PAUSED syscall.Errno = 70 + ERROR_REQ_NOT_ACCEP syscall.Errno = 71 + ERROR_REDIR_PAUSED syscall.Errno = 72 + ERROR_FILE_EXISTS syscall.Errno = 80 + ERROR_CANNOT_MAKE syscall.Errno = 82 + ERROR_FAIL_I24 syscall.Errno = 83 + ERROR_OUT_OF_STRUCTURES syscall.Errno = 84 + ERROR_ALREADY_ASSIGNED syscall.Errno = 85 + ERROR_INVALID_PASSWORD syscall.Errno = 86 + ERROR_INVALID_PARAMETER syscall.Errno = 87 + ERROR_NET_WRITE_FAULT syscall.Errno = 88 + ERROR_NO_PROC_SLOTS syscall.Errno = 89 + ERROR_TOO_MANY_SEMAPHORES syscall.Errno = 100 + ERROR_EXCL_SEM_ALREADY_OWNED syscall.Errno = 101 + ERROR_SEM_IS_SET syscall.Errno = 102 + ERROR_TOO_MANY_SEM_REQUESTS syscall.Errno = 103 + ERROR_INVALID_AT_INTERRUPT_TIME syscall.Errno = 104 + ERROR_SEM_OWNER_DIED syscall.Errno = 105 + ERROR_SEM_USER_LIMIT syscall.Errno = 106 + ERROR_DISK_CHANGE syscall.Errno = 107 + ERROR_DRIVE_LOCKED syscall.Errno = 108 + ERROR_BROKEN_PIPE syscall.Errno = 109 + ERROR_OPEN_FAILED syscall.Errno = 110 + ERROR_BUFFER_OVERFLOW syscall.Errno = 111 + ERROR_DISK_FULL syscall.Errno = 112 + ERROR_NO_MORE_SEARCH_HANDLES syscall.Errno = 113 + ERROR_INVALID_TARGET_HANDLE syscall.Errno = 114 + ERROR_INVALID_CATEGORY syscall.Errno = 117 + ERROR_INVALID_VERIFY_SWITCH syscall.Errno = 118 + ERROR_BAD_DRIVER_LEVEL syscall.Errno = 119 + ERROR_CALL_NOT_IMPLEMENTED syscall.Errno = 120 + ERROR_SEM_TIMEOUT syscall.Errno = 121 + ERROR_INSUFFICIENT_BUFFER syscall.Errno = 122 + ERROR_INVALID_NAME syscall.Errno = 123 + ERROR_INVALID_LEVEL syscall.Errno = 124 + ERROR_NO_VOLUME_LABEL syscall.Errno = 125 + ERROR_MOD_NOT_FOUND syscall.Errno = 126 + ERROR_PROC_NOT_FOUND syscall.Errno = 127 + ERROR_WAIT_NO_CHILDREN syscall.Errno = 128 + ERROR_CHILD_NOT_COMPLETE syscall.Errno = 129 + ERROR_DIRECT_ACCESS_HANDLE syscall.Errno = 130 + ERROR_NEGATIVE_SEEK syscall.Errno = 131 + ERROR_SEEK_ON_DEVICE syscall.Errno = 132 + ERROR_IS_JOIN_TARGET syscall.Errno = 133 + ERROR_IS_JOINED syscall.Errno = 134 + ERROR_IS_SUBSTED syscall.Errno = 135 + ERROR_NOT_JOINED syscall.Errno = 136 + ERROR_NOT_SUBSTED syscall.Errno = 137 + ERROR_JOIN_TO_JOIN syscall.Errno = 138 + ERROR_SUBST_TO_SUBST syscall.Errno = 139 + ERROR_JOIN_TO_SUBST syscall.Errno = 140 + ERROR_SUBST_TO_JOIN syscall.Errno = 141 + ERROR_BUSY_DRIVE syscall.Errno = 142 + ERROR_SAME_DRIVE syscall.Errno = 143 + ERROR_DIR_NOT_ROOT syscall.Errno = 144 + ERROR_DIR_NOT_EMPTY syscall.Errno = 145 + ERROR_IS_SUBST_PATH syscall.Errno = 146 + ERROR_IS_JOIN_PATH syscall.Errno = 147 + ERROR_PATH_BUSY syscall.Errno = 148 + ERROR_IS_SUBST_TARGET syscall.Errno = 149 + ERROR_SYSTEM_TRACE syscall.Errno = 150 + ERROR_INVALID_EVENT_COUNT syscall.Errno = 151 + ERROR_TOO_MANY_MUXWAITERS syscall.Errno = 152 + ERROR_INVALID_LIST_FORMAT syscall.Errno = 153 + ERROR_LABEL_TOO_LONG syscall.Errno = 154 + ERROR_TOO_MANY_TCBS syscall.Errno = 155 + ERROR_SIGNAL_REFUSED syscall.Errno = 156 + ERROR_DISCARDED syscall.Errno = 157 + ERROR_NOT_LOCKED syscall.Errno = 158 + ERROR_BAD_THREADID_ADDR syscall.Errno = 159 + ERROR_BAD_ARGUMENTS syscall.Errno = 160 + ERROR_BAD_PATHNAME syscall.Errno = 161 + ERROR_SIGNAL_PENDING syscall.Errno = 162 + ERROR_MAX_THRDS_REACHED syscall.Errno = 164 + ERROR_LOCK_FAILED syscall.Errno = 167 + ERROR_BUSY syscall.Errno = 170 + ERROR_DEVICE_SUPPORT_IN_PROGRESS syscall.Errno = 171 + ERROR_CANCEL_VIOLATION syscall.Errno = 173 + ERROR_ATOMIC_LOCKS_NOT_SUPPORTED syscall.Errno = 174 + ERROR_INVALID_SEGMENT_NUMBER syscall.Errno = 180 + ERROR_INVALID_ORDINAL syscall.Errno = 182 + ERROR_ALREADY_EXISTS syscall.Errno = 183 + ERROR_INVALID_FLAG_NUMBER syscall.Errno = 186 + ERROR_SEM_NOT_FOUND syscall.Errno = 187 + ERROR_INVALID_STARTING_CODESEG syscall.Errno = 188 + ERROR_INVALID_STACKSEG syscall.Errno = 189 + ERROR_INVALID_MODULETYPE syscall.Errno = 190 + ERROR_INVALID_EXE_SIGNATURE syscall.Errno = 191 + ERROR_EXE_MARKED_INVALID syscall.Errno = 192 + ERROR_BAD_EXE_FORMAT syscall.Errno = 193 + ERROR_ITERATED_DATA_EXCEEDS_64k syscall.Errno = 194 + ERROR_INVALID_MINALLOCSIZE syscall.Errno = 195 + ERROR_DYNLINK_FROM_INVALID_RING syscall.Errno = 196 + ERROR_IOPL_NOT_ENABLED syscall.Errno = 197 + ERROR_INVALID_SEGDPL syscall.Errno = 198 + ERROR_AUTODATASEG_EXCEEDS_64k syscall.Errno = 199 + ERROR_RING2SEG_MUST_BE_MOVABLE syscall.Errno = 200 + ERROR_RELOC_CHAIN_XEEDS_SEGLIM syscall.Errno = 201 + ERROR_INFLOOP_IN_RELOC_CHAIN syscall.Errno = 202 + ERROR_ENVVAR_NOT_FOUND syscall.Errno = 203 + ERROR_NO_SIGNAL_SENT syscall.Errno = 205 + ERROR_FILENAME_EXCED_RANGE syscall.Errno = 206 + ERROR_RING2_STACK_IN_USE syscall.Errno = 207 + ERROR_META_EXPANSION_TOO_LONG syscall.Errno = 208 + ERROR_INVALID_SIGNAL_NUMBER syscall.Errno = 209 + ERROR_THREAD_1_INACTIVE syscall.Errno = 210 + ERROR_LOCKED syscall.Errno = 212 + ERROR_TOO_MANY_MODULES syscall.Errno = 214 + ERROR_NESTING_NOT_ALLOWED syscall.Errno = 215 + ERROR_EXE_MACHINE_TYPE_MISMATCH syscall.Errno = 216 + ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY syscall.Errno = 217 + ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY syscall.Errno = 218 + ERROR_FILE_CHECKED_OUT syscall.Errno = 220 + ERROR_CHECKOUT_REQUIRED syscall.Errno = 221 + ERROR_BAD_FILE_TYPE syscall.Errno = 222 + ERROR_FILE_TOO_LARGE syscall.Errno = 223 + ERROR_FORMS_AUTH_REQUIRED syscall.Errno = 224 + ERROR_VIRUS_INFECTED syscall.Errno = 225 + ERROR_VIRUS_DELETED syscall.Errno = 226 + ERROR_PIPE_LOCAL syscall.Errno = 229 + ERROR_BAD_PIPE syscall.Errno = 230 + ERROR_PIPE_BUSY syscall.Errno = 231 + ERROR_NO_DATA syscall.Errno = 232 + ERROR_PIPE_NOT_CONNECTED syscall.Errno = 233 + ERROR_MORE_DATA syscall.Errno = 234 + ERROR_NO_WORK_DONE syscall.Errno = 235 + ERROR_VC_DISCONNECTED syscall.Errno = 240 + ERROR_INVALID_EA_NAME syscall.Errno = 254 + ERROR_EA_LIST_INCONSISTENT syscall.Errno = 255 + WAIT_TIMEOUT syscall.Errno = 258 + ERROR_NO_MORE_ITEMS syscall.Errno = 259 + ERROR_CANNOT_COPY syscall.Errno = 266 + ERROR_DIRECTORY syscall.Errno = 267 + ERROR_EAS_DIDNT_FIT syscall.Errno = 275 + ERROR_EA_FILE_CORRUPT syscall.Errno = 276 + ERROR_EA_TABLE_FULL syscall.Errno = 277 + ERROR_INVALID_EA_HANDLE syscall.Errno = 278 + ERROR_EAS_NOT_SUPPORTED syscall.Errno = 282 + ERROR_NOT_OWNER syscall.Errno = 288 + ERROR_TOO_MANY_POSTS syscall.Errno = 298 + ERROR_PARTIAL_COPY syscall.Errno = 299 + ERROR_OPLOCK_NOT_GRANTED syscall.Errno = 300 + ERROR_INVALID_OPLOCK_PROTOCOL syscall.Errno = 301 + ERROR_DISK_TOO_FRAGMENTED syscall.Errno = 302 + ERROR_DELETE_PENDING syscall.Errno = 303 + ERROR_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING syscall.Errno = 304 + ERROR_SHORT_NAMES_NOT_ENABLED_ON_VOLUME syscall.Errno = 305 + ERROR_SECURITY_STREAM_IS_INCONSISTENT syscall.Errno = 306 + ERROR_INVALID_LOCK_RANGE syscall.Errno = 307 + ERROR_IMAGE_SUBSYSTEM_NOT_PRESENT syscall.Errno = 308 + ERROR_NOTIFICATION_GUID_ALREADY_DEFINED syscall.Errno = 309 + ERROR_INVALID_EXCEPTION_HANDLER syscall.Errno = 310 + ERROR_DUPLICATE_PRIVILEGES syscall.Errno = 311 + ERROR_NO_RANGES_PROCESSED syscall.Errno = 312 + ERROR_NOT_ALLOWED_ON_SYSTEM_FILE syscall.Errno = 313 + ERROR_DISK_RESOURCES_EXHAUSTED syscall.Errno = 314 + ERROR_INVALID_TOKEN syscall.Errno = 315 + ERROR_DEVICE_FEATURE_NOT_SUPPORTED syscall.Errno = 316 + ERROR_MR_MID_NOT_FOUND syscall.Errno = 317 + ERROR_SCOPE_NOT_FOUND syscall.Errno = 318 + ERROR_UNDEFINED_SCOPE syscall.Errno = 319 + ERROR_INVALID_CAP syscall.Errno = 320 + ERROR_DEVICE_UNREACHABLE syscall.Errno = 321 + ERROR_DEVICE_NO_RESOURCES syscall.Errno = 322 + ERROR_DATA_CHECKSUM_ERROR syscall.Errno = 323 + ERROR_INTERMIXED_KERNEL_EA_OPERATION syscall.Errno = 324 + ERROR_FILE_LEVEL_TRIM_NOT_SUPPORTED syscall.Errno = 326 + ERROR_OFFSET_ALIGNMENT_VIOLATION syscall.Errno = 327 + ERROR_INVALID_FIELD_IN_PARAMETER_LIST syscall.Errno = 328 + ERROR_OPERATION_IN_PROGRESS syscall.Errno = 329 + ERROR_BAD_DEVICE_PATH syscall.Errno = 330 + ERROR_TOO_MANY_DESCRIPTORS syscall.Errno = 331 + ERROR_SCRUB_DATA_DISABLED syscall.Errno = 332 + ERROR_NOT_REDUNDANT_STORAGE syscall.Errno = 333 + ERROR_RESIDENT_FILE_NOT_SUPPORTED syscall.Errno = 334 + ERROR_COMPRESSED_FILE_NOT_SUPPORTED syscall.Errno = 335 + ERROR_DIRECTORY_NOT_SUPPORTED syscall.Errno = 336 + ERROR_NOT_READ_FROM_COPY syscall.Errno = 337 + ERROR_FT_WRITE_FAILURE syscall.Errno = 338 + ERROR_FT_DI_SCAN_REQUIRED syscall.Errno = 339 + ERROR_INVALID_KERNEL_INFO_VERSION syscall.Errno = 340 + ERROR_INVALID_PEP_INFO_VERSION syscall.Errno = 341 + ERROR_OBJECT_NOT_EXTERNALLY_BACKED syscall.Errno = 342 + ERROR_EXTERNAL_BACKING_PROVIDER_UNKNOWN syscall.Errno = 343 + ERROR_COMPRESSION_NOT_BENEFICIAL syscall.Errno = 344 + ERROR_STORAGE_TOPOLOGY_ID_MISMATCH syscall.Errno = 345 + ERROR_BLOCKED_BY_PARENTAL_CONTROLS syscall.Errno = 346 + ERROR_BLOCK_TOO_MANY_REFERENCES syscall.Errno = 347 + ERROR_MARKED_TO_DISALLOW_WRITES syscall.Errno = 348 + ERROR_ENCLAVE_FAILURE syscall.Errno = 349 + ERROR_FAIL_NOACTION_REBOOT syscall.Errno = 350 + ERROR_FAIL_SHUTDOWN syscall.Errno = 351 + ERROR_FAIL_RESTART syscall.Errno = 352 + ERROR_MAX_SESSIONS_REACHED syscall.Errno = 353 + ERROR_NETWORK_ACCESS_DENIED_EDP syscall.Errno = 354 + ERROR_DEVICE_HINT_NAME_BUFFER_TOO_SMALL syscall.Errno = 355 + ERROR_EDP_POLICY_DENIES_OPERATION syscall.Errno = 356 + ERROR_EDP_DPL_POLICY_CANT_BE_SATISFIED syscall.Errno = 357 + ERROR_CLOUD_FILE_SYNC_ROOT_METADATA_CORRUPT syscall.Errno = 358 + ERROR_DEVICE_IN_MAINTENANCE syscall.Errno = 359 + ERROR_NOT_SUPPORTED_ON_DAX syscall.Errno = 360 + ERROR_DAX_MAPPING_EXISTS syscall.Errno = 361 + ERROR_CLOUD_FILE_PROVIDER_NOT_RUNNING syscall.Errno = 362 + ERROR_CLOUD_FILE_METADATA_CORRUPT syscall.Errno = 363 + ERROR_CLOUD_FILE_METADATA_TOO_LARGE syscall.Errno = 364 + ERROR_CLOUD_FILE_PROPERTY_BLOB_TOO_LARGE syscall.Errno = 365 + ERROR_CLOUD_FILE_PROPERTY_BLOB_CHECKSUM_MISMATCH syscall.Errno = 366 + ERROR_CHILD_PROCESS_BLOCKED syscall.Errno = 367 + ERROR_STORAGE_LOST_DATA_PERSISTENCE syscall.Errno = 368 + ERROR_FILE_SYSTEM_VIRTUALIZATION_UNAVAILABLE syscall.Errno = 369 + ERROR_FILE_SYSTEM_VIRTUALIZATION_METADATA_CORRUPT syscall.Errno = 370 + ERROR_FILE_SYSTEM_VIRTUALIZATION_BUSY syscall.Errno = 371 + ERROR_FILE_SYSTEM_VIRTUALIZATION_PROVIDER_UNKNOWN syscall.Errno = 372 + ERROR_GDI_HANDLE_LEAK syscall.Errno = 373 + ERROR_CLOUD_FILE_TOO_MANY_PROPERTY_BLOBS syscall.Errno = 374 + ERROR_CLOUD_FILE_PROPERTY_VERSION_NOT_SUPPORTED syscall.Errno = 375 + ERROR_NOT_A_CLOUD_FILE syscall.Errno = 376 + ERROR_CLOUD_FILE_NOT_IN_SYNC syscall.Errno = 377 + ERROR_CLOUD_FILE_ALREADY_CONNECTED syscall.Errno = 378 + ERROR_CLOUD_FILE_NOT_SUPPORTED syscall.Errno = 379 + ERROR_CLOUD_FILE_INVALID_REQUEST syscall.Errno = 380 + ERROR_CLOUD_FILE_READ_ONLY_VOLUME syscall.Errno = 381 + ERROR_CLOUD_FILE_CONNECTED_PROVIDER_ONLY syscall.Errno = 382 + ERROR_CLOUD_FILE_VALIDATION_FAILED syscall.Errno = 383 + ERROR_SMB1_NOT_AVAILABLE syscall.Errno = 384 + ERROR_FILE_SYSTEM_VIRTUALIZATION_INVALID_OPERATION syscall.Errno = 385 + ERROR_CLOUD_FILE_AUTHENTICATION_FAILED syscall.Errno = 386 + ERROR_CLOUD_FILE_INSUFFICIENT_RESOURCES syscall.Errno = 387 + ERROR_CLOUD_FILE_NETWORK_UNAVAILABLE syscall.Errno = 388 + ERROR_CLOUD_FILE_UNSUCCESSFUL syscall.Errno = 389 + ERROR_CLOUD_FILE_NOT_UNDER_SYNC_ROOT syscall.Errno = 390 + ERROR_CLOUD_FILE_IN_USE syscall.Errno = 391 + ERROR_CLOUD_FILE_PINNED syscall.Errno = 392 + ERROR_CLOUD_FILE_REQUEST_ABORTED syscall.Errno = 393 + ERROR_CLOUD_FILE_PROPERTY_CORRUPT syscall.Errno = 394 + ERROR_CLOUD_FILE_ACCESS_DENIED syscall.Errno = 395 + ERROR_CLOUD_FILE_INCOMPATIBLE_HARDLINKS syscall.Errno = 396 + ERROR_CLOUD_FILE_PROPERTY_LOCK_CONFLICT syscall.Errno = 397 + ERROR_CLOUD_FILE_REQUEST_CANCELED syscall.Errno = 398 + ERROR_EXTERNAL_SYSKEY_NOT_SUPPORTED syscall.Errno = 399 + ERROR_THREAD_MODE_ALREADY_BACKGROUND syscall.Errno = 400 + ERROR_THREAD_MODE_NOT_BACKGROUND syscall.Errno = 401 + ERROR_PROCESS_MODE_ALREADY_BACKGROUND syscall.Errno = 402 + ERROR_PROCESS_MODE_NOT_BACKGROUND syscall.Errno = 403 + ERROR_CLOUD_FILE_PROVIDER_TERMINATED syscall.Errno = 404 + ERROR_NOT_A_CLOUD_SYNC_ROOT syscall.Errno = 405 + ERROR_FILE_PROTECTED_UNDER_DPL syscall.Errno = 406 + ERROR_VOLUME_NOT_CLUSTER_ALIGNED syscall.Errno = 407 + ERROR_NO_PHYSICALLY_ALIGNED_FREE_SPACE_FOUND syscall.Errno = 408 + ERROR_APPX_FILE_NOT_ENCRYPTED syscall.Errno = 409 + ERROR_RWRAW_ENCRYPTED_FILE_NOT_ENCRYPTED syscall.Errno = 410 + ERROR_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILEOFFSET syscall.Errno = 411 + ERROR_RWRAW_ENCRYPTED_INVALID_EDATAINFO_FILERANGE syscall.Errno = 412 + ERROR_RWRAW_ENCRYPTED_INVALID_EDATAINFO_PARAMETER syscall.Errno = 413 + ERROR_LINUX_SUBSYSTEM_NOT_PRESENT syscall.Errno = 414 + ERROR_FT_READ_FAILURE syscall.Errno = 415 + ERROR_STORAGE_RESERVE_ID_INVALID syscall.Errno = 416 + ERROR_STORAGE_RESERVE_DOES_NOT_EXIST syscall.Errno = 417 + ERROR_STORAGE_RESERVE_ALREADY_EXISTS syscall.Errno = 418 + ERROR_STORAGE_RESERVE_NOT_EMPTY syscall.Errno = 419 + ERROR_NOT_A_DAX_VOLUME syscall.Errno = 420 + ERROR_NOT_DAX_MAPPABLE syscall.Errno = 421 + ERROR_TIME_CRITICAL_THREAD syscall.Errno = 422 + ERROR_DPL_NOT_SUPPORTED_FOR_USER syscall.Errno = 423 + ERROR_CASE_DIFFERING_NAMES_IN_DIR syscall.Errno = 424 + ERROR_CAPAUTHZ_NOT_DEVUNLOCKED syscall.Errno = 450 + ERROR_CAPAUTHZ_CHANGE_TYPE syscall.Errno = 451 + ERROR_CAPAUTHZ_NOT_PROVISIONED syscall.Errno = 452 + ERROR_CAPAUTHZ_NOT_AUTHORIZED syscall.Errno = 453 + ERROR_CAPAUTHZ_NO_POLICY syscall.Errno = 454 + ERROR_CAPAUTHZ_DB_CORRUPTED syscall.Errno = 455 + ERROR_CAPAUTHZ_SCCD_INVALID_CATALOG syscall.Errno = 456 + ERROR_CAPAUTHZ_SCCD_NO_AUTH_ENTITY syscall.Errno = 457 + ERROR_CAPAUTHZ_SCCD_PARSE_ERROR syscall.Errno = 458 + ERROR_CAPAUTHZ_SCCD_DEV_MODE_REQUIRED syscall.Errno = 459 + ERROR_CAPAUTHZ_SCCD_NO_CAPABILITY_MATCH syscall.Errno = 460 + ERROR_PNP_QUERY_REMOVE_DEVICE_TIMEOUT syscall.Errno = 480 + ERROR_PNP_QUERY_REMOVE_RELATED_DEVICE_TIMEOUT syscall.Errno = 481 + ERROR_PNP_QUERY_REMOVE_UNRELATED_DEVICE_TIMEOUT syscall.Errno = 482 + ERROR_DEVICE_HARDWARE_ERROR syscall.Errno = 483 + ERROR_INVALID_ADDRESS syscall.Errno = 487 + ERROR_VRF_CFG_ENABLED syscall.Errno = 1183 + ERROR_PARTITION_TERMINATING syscall.Errno = 1184 + ERROR_USER_PROFILE_LOAD syscall.Errno = 500 + ERROR_ARITHMETIC_OVERFLOW syscall.Errno = 534 + ERROR_PIPE_CONNECTED syscall.Errno = 535 + ERROR_PIPE_LISTENING syscall.Errno = 536 + ERROR_VERIFIER_STOP syscall.Errno = 537 + ERROR_ABIOS_ERROR syscall.Errno = 538 + ERROR_WX86_WARNING syscall.Errno = 539 + ERROR_WX86_ERROR syscall.Errno = 540 + ERROR_TIMER_NOT_CANCELED syscall.Errno = 541 + ERROR_UNWIND syscall.Errno = 542 + ERROR_BAD_STACK syscall.Errno = 543 + ERROR_INVALID_UNWIND_TARGET syscall.Errno = 544 + ERROR_INVALID_PORT_ATTRIBUTES syscall.Errno = 545 + ERROR_PORT_MESSAGE_TOO_LONG syscall.Errno = 546 + ERROR_INVALID_QUOTA_LOWER syscall.Errno = 547 + ERROR_DEVICE_ALREADY_ATTACHED syscall.Errno = 548 + ERROR_INSTRUCTION_MISALIGNMENT syscall.Errno = 549 + ERROR_PROFILING_NOT_STARTED syscall.Errno = 550 + ERROR_PROFILING_NOT_STOPPED syscall.Errno = 551 + ERROR_COULD_NOT_INTERPRET syscall.Errno = 552 + ERROR_PROFILING_AT_LIMIT syscall.Errno = 553 + ERROR_CANT_WAIT syscall.Errno = 554 + ERROR_CANT_TERMINATE_SELF syscall.Errno = 555 + ERROR_UNEXPECTED_MM_CREATE_ERR syscall.Errno = 556 + ERROR_UNEXPECTED_MM_MAP_ERROR syscall.Errno = 557 + ERROR_UNEXPECTED_MM_EXTEND_ERR syscall.Errno = 558 + ERROR_BAD_FUNCTION_TABLE syscall.Errno = 559 + ERROR_NO_GUID_TRANSLATION syscall.Errno = 560 + ERROR_INVALID_LDT_SIZE syscall.Errno = 561 + ERROR_INVALID_LDT_OFFSET syscall.Errno = 563 + ERROR_INVALID_LDT_DESCRIPTOR syscall.Errno = 564 + ERROR_TOO_MANY_THREADS syscall.Errno = 565 + ERROR_THREAD_NOT_IN_PROCESS syscall.Errno = 566 + ERROR_PAGEFILE_QUOTA_EXCEEDED syscall.Errno = 567 + ERROR_LOGON_SERVER_CONFLICT syscall.Errno = 568 + ERROR_SYNCHRONIZATION_REQUIRED syscall.Errno = 569 + ERROR_NET_OPEN_FAILED syscall.Errno = 570 + ERROR_IO_PRIVILEGE_FAILED syscall.Errno = 571 + ERROR_CONTROL_C_EXIT syscall.Errno = 572 + ERROR_MISSING_SYSTEMFILE syscall.Errno = 573 + ERROR_UNHANDLED_EXCEPTION syscall.Errno = 574 + ERROR_APP_INIT_FAILURE syscall.Errno = 575 + ERROR_PAGEFILE_CREATE_FAILED syscall.Errno = 576 + ERROR_INVALID_IMAGE_HASH syscall.Errno = 577 + ERROR_NO_PAGEFILE syscall.Errno = 578 + ERROR_ILLEGAL_FLOAT_CONTEXT syscall.Errno = 579 + ERROR_NO_EVENT_PAIR syscall.Errno = 580 + ERROR_DOMAIN_CTRLR_CONFIG_ERROR syscall.Errno = 581 + ERROR_ILLEGAL_CHARACTER syscall.Errno = 582 + ERROR_UNDEFINED_CHARACTER syscall.Errno = 583 + ERROR_FLOPPY_VOLUME syscall.Errno = 584 + ERROR_BIOS_FAILED_TO_CONNECT_INTERRUPT syscall.Errno = 585 + ERROR_BACKUP_CONTROLLER syscall.Errno = 586 + ERROR_MUTANT_LIMIT_EXCEEDED syscall.Errno = 587 + ERROR_FS_DRIVER_REQUIRED syscall.Errno = 588 + ERROR_CANNOT_LOAD_REGISTRY_FILE syscall.Errno = 589 + ERROR_DEBUG_ATTACH_FAILED syscall.Errno = 590 + ERROR_SYSTEM_PROCESS_TERMINATED syscall.Errno = 591 + ERROR_DATA_NOT_ACCEPTED syscall.Errno = 592 + ERROR_VDM_HARD_ERROR syscall.Errno = 593 + ERROR_DRIVER_CANCEL_TIMEOUT syscall.Errno = 594 + ERROR_REPLY_MESSAGE_MISMATCH syscall.Errno = 595 + ERROR_LOST_WRITEBEHIND_DATA syscall.Errno = 596 + ERROR_CLIENT_SERVER_PARAMETERS_INVALID syscall.Errno = 597 + ERROR_NOT_TINY_STREAM syscall.Errno = 598 + ERROR_STACK_OVERFLOW_READ syscall.Errno = 599 + ERROR_CONVERT_TO_LARGE syscall.Errno = 600 + ERROR_FOUND_OUT_OF_SCOPE syscall.Errno = 601 + ERROR_ALLOCATE_BUCKET syscall.Errno = 602 + ERROR_MARSHALL_OVERFLOW syscall.Errno = 603 + ERROR_INVALID_VARIANT syscall.Errno = 604 + ERROR_BAD_COMPRESSION_BUFFER syscall.Errno = 605 + ERROR_AUDIT_FAILED syscall.Errno = 606 + ERROR_TIMER_RESOLUTION_NOT_SET syscall.Errno = 607 + ERROR_INSUFFICIENT_LOGON_INFO syscall.Errno = 608 + ERROR_BAD_DLL_ENTRYPOINT syscall.Errno = 609 + ERROR_BAD_SERVICE_ENTRYPOINT syscall.Errno = 610 + ERROR_IP_ADDRESS_CONFLICT1 syscall.Errno = 611 + ERROR_IP_ADDRESS_CONFLICT2 syscall.Errno = 612 + ERROR_REGISTRY_QUOTA_LIMIT syscall.Errno = 613 + ERROR_NO_CALLBACK_ACTIVE syscall.Errno = 614 + ERROR_PWD_TOO_SHORT syscall.Errno = 615 + ERROR_PWD_TOO_RECENT syscall.Errno = 616 + ERROR_PWD_HISTORY_CONFLICT syscall.Errno = 617 + ERROR_UNSUPPORTED_COMPRESSION syscall.Errno = 618 + ERROR_INVALID_HW_PROFILE syscall.Errno = 619 + ERROR_INVALID_PLUGPLAY_DEVICE_PATH syscall.Errno = 620 + ERROR_QUOTA_LIST_INCONSISTENT syscall.Errno = 621 + ERROR_EVALUATION_EXPIRATION syscall.Errno = 622 + ERROR_ILLEGAL_DLL_RELOCATION syscall.Errno = 623 + ERROR_DLL_INIT_FAILED_LOGOFF syscall.Errno = 624 + ERROR_VALIDATE_CONTINUE syscall.Errno = 625 + ERROR_NO_MORE_MATCHES syscall.Errno = 626 + ERROR_RANGE_LIST_CONFLICT syscall.Errno = 627 + ERROR_SERVER_SID_MISMATCH syscall.Errno = 628 + ERROR_CANT_ENABLE_DENY_ONLY syscall.Errno = 629 + ERROR_FLOAT_MULTIPLE_FAULTS syscall.Errno = 630 + ERROR_FLOAT_MULTIPLE_TRAPS syscall.Errno = 631 + ERROR_NOINTERFACE syscall.Errno = 632 + ERROR_DRIVER_FAILED_SLEEP syscall.Errno = 633 + ERROR_CORRUPT_SYSTEM_FILE syscall.Errno = 634 + ERROR_COMMITMENT_MINIMUM syscall.Errno = 635 + ERROR_PNP_RESTART_ENUMERATION syscall.Errno = 636 + ERROR_SYSTEM_IMAGE_BAD_SIGNATURE syscall.Errno = 637 + ERROR_PNP_REBOOT_REQUIRED syscall.Errno = 638 + ERROR_INSUFFICIENT_POWER syscall.Errno = 639 + ERROR_MULTIPLE_FAULT_VIOLATION syscall.Errno = 640 + ERROR_SYSTEM_SHUTDOWN syscall.Errno = 641 + ERROR_PORT_NOT_SET syscall.Errno = 642 + ERROR_DS_VERSION_CHECK_FAILURE syscall.Errno = 643 + ERROR_RANGE_NOT_FOUND syscall.Errno = 644 + ERROR_NOT_SAFE_MODE_DRIVER syscall.Errno = 646 + ERROR_FAILED_DRIVER_ENTRY syscall.Errno = 647 + ERROR_DEVICE_ENUMERATION_ERROR syscall.Errno = 648 + ERROR_MOUNT_POINT_NOT_RESOLVED syscall.Errno = 649 + ERROR_INVALID_DEVICE_OBJECT_PARAMETER syscall.Errno = 650 + ERROR_MCA_OCCURED syscall.Errno = 651 + ERROR_DRIVER_DATABASE_ERROR syscall.Errno = 652 + ERROR_SYSTEM_HIVE_TOO_LARGE syscall.Errno = 653 + ERROR_DRIVER_FAILED_PRIOR_UNLOAD syscall.Errno = 654 + ERROR_VOLSNAP_PREPARE_HIBERNATE syscall.Errno = 655 + ERROR_HIBERNATION_FAILURE syscall.Errno = 656 + ERROR_PWD_TOO_LONG syscall.Errno = 657 + ERROR_FILE_SYSTEM_LIMITATION syscall.Errno = 665 + ERROR_ASSERTION_FAILURE syscall.Errno = 668 + ERROR_ACPI_ERROR syscall.Errno = 669 + ERROR_WOW_ASSERTION syscall.Errno = 670 + ERROR_PNP_BAD_MPS_TABLE syscall.Errno = 671 + ERROR_PNP_TRANSLATION_FAILED syscall.Errno = 672 + ERROR_PNP_IRQ_TRANSLATION_FAILED syscall.Errno = 673 + ERROR_PNP_INVALID_ID syscall.Errno = 674 + ERROR_WAKE_SYSTEM_DEBUGGER syscall.Errno = 675 + ERROR_HANDLES_CLOSED syscall.Errno = 676 + ERROR_EXTRANEOUS_INFORMATION syscall.Errno = 677 + ERROR_RXACT_COMMIT_NECESSARY syscall.Errno = 678 + ERROR_MEDIA_CHECK syscall.Errno = 679 + ERROR_GUID_SUBSTITUTION_MADE syscall.Errno = 680 + ERROR_STOPPED_ON_SYMLINK syscall.Errno = 681 + ERROR_LONGJUMP syscall.Errno = 682 + ERROR_PLUGPLAY_QUERY_VETOED syscall.Errno = 683 + ERROR_UNWIND_CONSOLIDATE syscall.Errno = 684 + ERROR_REGISTRY_HIVE_RECOVERED syscall.Errno = 685 + ERROR_DLL_MIGHT_BE_INSECURE syscall.Errno = 686 + ERROR_DLL_MIGHT_BE_INCOMPATIBLE syscall.Errno = 687 + ERROR_DBG_EXCEPTION_NOT_HANDLED syscall.Errno = 688 + ERROR_DBG_REPLY_LATER syscall.Errno = 689 + ERROR_DBG_UNABLE_TO_PROVIDE_HANDLE syscall.Errno = 690 + ERROR_DBG_TERMINATE_THREAD syscall.Errno = 691 + ERROR_DBG_TERMINATE_PROCESS syscall.Errno = 692 + ERROR_DBG_CONTROL_C syscall.Errno = 693 + ERROR_DBG_PRINTEXCEPTION_C syscall.Errno = 694 + ERROR_DBG_RIPEXCEPTION syscall.Errno = 695 + ERROR_DBG_CONTROL_BREAK syscall.Errno = 696 + ERROR_DBG_COMMAND_EXCEPTION syscall.Errno = 697 + ERROR_OBJECT_NAME_EXISTS syscall.Errno = 698 + ERROR_THREAD_WAS_SUSPENDED syscall.Errno = 699 + ERROR_IMAGE_NOT_AT_BASE syscall.Errno = 700 + ERROR_RXACT_STATE_CREATED syscall.Errno = 701 + ERROR_SEGMENT_NOTIFICATION syscall.Errno = 702 + ERROR_BAD_CURRENT_DIRECTORY syscall.Errno = 703 + ERROR_FT_READ_RECOVERY_FROM_BACKUP syscall.Errno = 704 + ERROR_FT_WRITE_RECOVERY syscall.Errno = 705 + ERROR_IMAGE_MACHINE_TYPE_MISMATCH syscall.Errno = 706 + ERROR_RECEIVE_PARTIAL syscall.Errno = 707 + ERROR_RECEIVE_EXPEDITED syscall.Errno = 708 + ERROR_RECEIVE_PARTIAL_EXPEDITED syscall.Errno = 709 + ERROR_EVENT_DONE syscall.Errno = 710 + ERROR_EVENT_PENDING syscall.Errno = 711 + ERROR_CHECKING_FILE_SYSTEM syscall.Errno = 712 + ERROR_FATAL_APP_EXIT syscall.Errno = 713 + ERROR_PREDEFINED_HANDLE syscall.Errno = 714 + ERROR_WAS_UNLOCKED syscall.Errno = 715 + ERROR_SERVICE_NOTIFICATION syscall.Errno = 716 + ERROR_WAS_LOCKED syscall.Errno = 717 + ERROR_LOG_HARD_ERROR syscall.Errno = 718 + ERROR_ALREADY_WIN32 syscall.Errno = 719 + ERROR_IMAGE_MACHINE_TYPE_MISMATCH_EXE syscall.Errno = 720 + ERROR_NO_YIELD_PERFORMED syscall.Errno = 721 + ERROR_TIMER_RESUME_IGNORED syscall.Errno = 722 + ERROR_ARBITRATION_UNHANDLED syscall.Errno = 723 + ERROR_CARDBUS_NOT_SUPPORTED syscall.Errno = 724 + ERROR_MP_PROCESSOR_MISMATCH syscall.Errno = 725 + ERROR_HIBERNATED syscall.Errno = 726 + ERROR_RESUME_HIBERNATION syscall.Errno = 727 + ERROR_FIRMWARE_UPDATED syscall.Errno = 728 + ERROR_DRIVERS_LEAKING_LOCKED_PAGES syscall.Errno = 729 + ERROR_WAKE_SYSTEM syscall.Errno = 730 + ERROR_WAIT_1 syscall.Errno = 731 + ERROR_WAIT_2 syscall.Errno = 732 + ERROR_WAIT_3 syscall.Errno = 733 + ERROR_WAIT_63 syscall.Errno = 734 + ERROR_ABANDONED_WAIT_0 syscall.Errno = 735 + ERROR_ABANDONED_WAIT_63 syscall.Errno = 736 + ERROR_USER_APC syscall.Errno = 737 + ERROR_KERNEL_APC syscall.Errno = 738 + ERROR_ALERTED syscall.Errno = 739 + ERROR_ELEVATION_REQUIRED syscall.Errno = 740 + ERROR_REPARSE syscall.Errno = 741 + ERROR_OPLOCK_BREAK_IN_PROGRESS syscall.Errno = 742 + ERROR_VOLUME_MOUNTED syscall.Errno = 743 + ERROR_RXACT_COMMITTED syscall.Errno = 744 + ERROR_NOTIFY_CLEANUP syscall.Errno = 745 + ERROR_PRIMARY_TRANSPORT_CONNECT_FAILED syscall.Errno = 746 + ERROR_PAGE_FAULT_TRANSITION syscall.Errno = 747 + ERROR_PAGE_FAULT_DEMAND_ZERO syscall.Errno = 748 + ERROR_PAGE_FAULT_COPY_ON_WRITE syscall.Errno = 749 + ERROR_PAGE_FAULT_GUARD_PAGE syscall.Errno = 750 + ERROR_PAGE_FAULT_PAGING_FILE syscall.Errno = 751 + ERROR_CACHE_PAGE_LOCKED syscall.Errno = 752 + ERROR_CRASH_DUMP syscall.Errno = 753 + ERROR_BUFFER_ALL_ZEROS syscall.Errno = 754 + ERROR_REPARSE_OBJECT syscall.Errno = 755 + ERROR_RESOURCE_REQUIREMENTS_CHANGED syscall.Errno = 756 + ERROR_TRANSLATION_COMPLETE syscall.Errno = 757 + ERROR_NOTHING_TO_TERMINATE syscall.Errno = 758 + ERROR_PROCESS_NOT_IN_JOB syscall.Errno = 759 + ERROR_PROCESS_IN_JOB syscall.Errno = 760 + ERROR_VOLSNAP_HIBERNATE_READY syscall.Errno = 761 + ERROR_FSFILTER_OP_COMPLETED_SUCCESSFULLY syscall.Errno = 762 + ERROR_INTERRUPT_VECTOR_ALREADY_CONNECTED syscall.Errno = 763 + ERROR_INTERRUPT_STILL_CONNECTED syscall.Errno = 764 + ERROR_WAIT_FOR_OPLOCK syscall.Errno = 765 + ERROR_DBG_EXCEPTION_HANDLED syscall.Errno = 766 + ERROR_DBG_CONTINUE syscall.Errno = 767 + ERROR_CALLBACK_POP_STACK syscall.Errno = 768 + ERROR_COMPRESSION_DISABLED syscall.Errno = 769 + ERROR_CANTFETCHBACKWARDS syscall.Errno = 770 + ERROR_CANTSCROLLBACKWARDS syscall.Errno = 771 + ERROR_ROWSNOTRELEASED syscall.Errno = 772 + ERROR_BAD_ACCESSOR_FLAGS syscall.Errno = 773 + ERROR_ERRORS_ENCOUNTERED syscall.Errno = 774 + ERROR_NOT_CAPABLE syscall.Errno = 775 + ERROR_REQUEST_OUT_OF_SEQUENCE syscall.Errno = 776 + ERROR_VERSION_PARSE_ERROR syscall.Errno = 777 + ERROR_BADSTARTPOSITION syscall.Errno = 778 + ERROR_MEMORY_HARDWARE syscall.Errno = 779 + ERROR_DISK_REPAIR_DISABLED syscall.Errno = 780 + ERROR_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE syscall.Errno = 781 + ERROR_SYSTEM_POWERSTATE_TRANSITION syscall.Errno = 782 + ERROR_SYSTEM_POWERSTATE_COMPLEX_TRANSITION syscall.Errno = 783 + ERROR_MCA_EXCEPTION syscall.Errno = 784 + ERROR_ACCESS_AUDIT_BY_POLICY syscall.Errno = 785 + ERROR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY syscall.Errno = 786 + ERROR_ABANDON_HIBERFILE syscall.Errno = 787 + ERROR_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED syscall.Errno = 788 + ERROR_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR syscall.Errno = 789 + ERROR_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR syscall.Errno = 790 + ERROR_BAD_MCFG_TABLE syscall.Errno = 791 + ERROR_DISK_REPAIR_REDIRECTED syscall.Errno = 792 + ERROR_DISK_REPAIR_UNSUCCESSFUL syscall.Errno = 793 + ERROR_CORRUPT_LOG_OVERFULL syscall.Errno = 794 + ERROR_CORRUPT_LOG_CORRUPTED syscall.Errno = 795 + ERROR_CORRUPT_LOG_UNAVAILABLE syscall.Errno = 796 + ERROR_CORRUPT_LOG_DELETED_FULL syscall.Errno = 797 + ERROR_CORRUPT_LOG_CLEARED syscall.Errno = 798 + ERROR_ORPHAN_NAME_EXHAUSTED syscall.Errno = 799 + ERROR_OPLOCK_SWITCHED_TO_NEW_HANDLE syscall.Errno = 800 + ERROR_CANNOT_GRANT_REQUESTED_OPLOCK syscall.Errno = 801 + ERROR_CANNOT_BREAK_OPLOCK syscall.Errno = 802 + ERROR_OPLOCK_HANDLE_CLOSED syscall.Errno = 803 + ERROR_NO_ACE_CONDITION syscall.Errno = 804 + ERROR_INVALID_ACE_CONDITION syscall.Errno = 805 + ERROR_FILE_HANDLE_REVOKED syscall.Errno = 806 + ERROR_IMAGE_AT_DIFFERENT_BASE syscall.Errno = 807 + ERROR_ENCRYPTED_IO_NOT_POSSIBLE syscall.Errno = 808 + ERROR_FILE_METADATA_OPTIMIZATION_IN_PROGRESS syscall.Errno = 809 + ERROR_QUOTA_ACTIVITY syscall.Errno = 810 + ERROR_HANDLE_REVOKED syscall.Errno = 811 + ERROR_CALLBACK_INVOKE_INLINE syscall.Errno = 812 + ERROR_CPU_SET_INVALID syscall.Errno = 813 + ERROR_ENCLAVE_NOT_TERMINATED syscall.Errno = 814 + ERROR_ENCLAVE_VIOLATION syscall.Errno = 815 + ERROR_EA_ACCESS_DENIED syscall.Errno = 994 + ERROR_OPERATION_ABORTED syscall.Errno = 995 + ERROR_IO_INCOMPLETE syscall.Errno = 996 + ERROR_IO_PENDING syscall.Errno = 997 + ERROR_NOACCESS syscall.Errno = 998 + ERROR_SWAPERROR syscall.Errno = 999 + ERROR_STACK_OVERFLOW syscall.Errno = 1001 + ERROR_INVALID_MESSAGE syscall.Errno = 1002 + ERROR_CAN_NOT_COMPLETE syscall.Errno = 1003 + ERROR_INVALID_FLAGS syscall.Errno = 1004 + ERROR_UNRECOGNIZED_VOLUME syscall.Errno = 1005 + ERROR_FILE_INVALID syscall.Errno = 1006 + ERROR_FULLSCREEN_MODE syscall.Errno = 1007 + ERROR_NO_TOKEN syscall.Errno = 1008 + ERROR_BADDB syscall.Errno = 1009 + ERROR_BADKEY syscall.Errno = 1010 + ERROR_CANTOPEN syscall.Errno = 1011 + ERROR_CANTREAD syscall.Errno = 1012 + ERROR_CANTWRITE syscall.Errno = 1013 + ERROR_REGISTRY_RECOVERED syscall.Errno = 1014 + ERROR_REGISTRY_CORRUPT syscall.Errno = 1015 + ERROR_REGISTRY_IO_FAILED syscall.Errno = 1016 + ERROR_NOT_REGISTRY_FILE syscall.Errno = 1017 + ERROR_KEY_DELETED syscall.Errno = 1018 + ERROR_NO_LOG_SPACE syscall.Errno = 1019 + ERROR_KEY_HAS_CHILDREN syscall.Errno = 1020 + ERROR_CHILD_MUST_BE_VOLATILE syscall.Errno = 1021 + ERROR_NOTIFY_ENUM_DIR syscall.Errno = 1022 + ERROR_DEPENDENT_SERVICES_RUNNING syscall.Errno = 1051 + ERROR_INVALID_SERVICE_CONTROL syscall.Errno = 1052 + ERROR_SERVICE_REQUEST_TIMEOUT syscall.Errno = 1053 + ERROR_SERVICE_NO_THREAD syscall.Errno = 1054 + ERROR_SERVICE_DATABASE_LOCKED syscall.Errno = 1055 + ERROR_SERVICE_ALREADY_RUNNING syscall.Errno = 1056 + ERROR_INVALID_SERVICE_ACCOUNT syscall.Errno = 1057 + ERROR_SERVICE_DISABLED syscall.Errno = 1058 + ERROR_CIRCULAR_DEPENDENCY syscall.Errno = 1059 + ERROR_SERVICE_DOES_NOT_EXIST syscall.Errno = 1060 + ERROR_SERVICE_CANNOT_ACCEPT_CTRL syscall.Errno = 1061 + ERROR_SERVICE_NOT_ACTIVE syscall.Errno = 1062 + ERROR_FAILED_SERVICE_CONTROLLER_CONNECT syscall.Errno = 1063 + ERROR_EXCEPTION_IN_SERVICE syscall.Errno = 1064 + ERROR_DATABASE_DOES_NOT_EXIST syscall.Errno = 1065 + ERROR_SERVICE_SPECIFIC_ERROR syscall.Errno = 1066 + ERROR_PROCESS_ABORTED syscall.Errno = 1067 + ERROR_SERVICE_DEPENDENCY_FAIL syscall.Errno = 1068 + ERROR_SERVICE_LOGON_FAILED syscall.Errno = 1069 + ERROR_SERVICE_START_HANG syscall.Errno = 1070 + ERROR_INVALID_SERVICE_LOCK syscall.Errno = 1071 + ERROR_SERVICE_MARKED_FOR_DELETE syscall.Errno = 1072 + ERROR_SERVICE_EXISTS syscall.Errno = 1073 + ERROR_ALREADY_RUNNING_LKG syscall.Errno = 1074 + ERROR_SERVICE_DEPENDENCY_DELETED syscall.Errno = 1075 + ERROR_BOOT_ALREADY_ACCEPTED syscall.Errno = 1076 + ERROR_SERVICE_NEVER_STARTED syscall.Errno = 1077 + ERROR_DUPLICATE_SERVICE_NAME syscall.Errno = 1078 + ERROR_DIFFERENT_SERVICE_ACCOUNT syscall.Errno = 1079 + ERROR_CANNOT_DETECT_DRIVER_FAILURE syscall.Errno = 1080 + ERROR_CANNOT_DETECT_PROCESS_ABORT syscall.Errno = 1081 + ERROR_NO_RECOVERY_PROGRAM syscall.Errno = 1082 + ERROR_SERVICE_NOT_IN_EXE syscall.Errno = 1083 + ERROR_NOT_SAFEBOOT_SERVICE syscall.Errno = 1084 + ERROR_END_OF_MEDIA syscall.Errno = 1100 + ERROR_FILEMARK_DETECTED syscall.Errno = 1101 + ERROR_BEGINNING_OF_MEDIA syscall.Errno = 1102 + ERROR_SETMARK_DETECTED syscall.Errno = 1103 + ERROR_NO_DATA_DETECTED syscall.Errno = 1104 + ERROR_PARTITION_FAILURE syscall.Errno = 1105 + ERROR_INVALID_BLOCK_LENGTH syscall.Errno = 1106 + ERROR_DEVICE_NOT_PARTITIONED syscall.Errno = 1107 + ERROR_UNABLE_TO_LOCK_MEDIA syscall.Errno = 1108 + ERROR_UNABLE_TO_UNLOAD_MEDIA syscall.Errno = 1109 + ERROR_MEDIA_CHANGED syscall.Errno = 1110 + ERROR_BUS_RESET syscall.Errno = 1111 + ERROR_NO_MEDIA_IN_DRIVE syscall.Errno = 1112 + ERROR_NO_UNICODE_TRANSLATION syscall.Errno = 1113 + ERROR_DLL_INIT_FAILED syscall.Errno = 1114 + ERROR_SHUTDOWN_IN_PROGRESS syscall.Errno = 1115 + ERROR_NO_SHUTDOWN_IN_PROGRESS syscall.Errno = 1116 + ERROR_IO_DEVICE syscall.Errno = 1117 + ERROR_SERIAL_NO_DEVICE syscall.Errno = 1118 + ERROR_IRQ_BUSY syscall.Errno = 1119 + ERROR_MORE_WRITES syscall.Errno = 1120 + ERROR_COUNTER_TIMEOUT syscall.Errno = 1121 + ERROR_FLOPPY_ID_MARK_NOT_FOUND syscall.Errno = 1122 + ERROR_FLOPPY_WRONG_CYLINDER syscall.Errno = 1123 + ERROR_FLOPPY_UNKNOWN_ERROR syscall.Errno = 1124 + ERROR_FLOPPY_BAD_REGISTERS syscall.Errno = 1125 + ERROR_DISK_RECALIBRATE_FAILED syscall.Errno = 1126 + ERROR_DISK_OPERATION_FAILED syscall.Errno = 1127 + ERROR_DISK_RESET_FAILED syscall.Errno = 1128 + ERROR_EOM_OVERFLOW syscall.Errno = 1129 + ERROR_NOT_ENOUGH_SERVER_MEMORY syscall.Errno = 1130 + ERROR_POSSIBLE_DEADLOCK syscall.Errno = 1131 + ERROR_MAPPED_ALIGNMENT syscall.Errno = 1132 + ERROR_SET_POWER_STATE_VETOED syscall.Errno = 1140 + ERROR_SET_POWER_STATE_FAILED syscall.Errno = 1141 + ERROR_TOO_MANY_LINKS syscall.Errno = 1142 + ERROR_OLD_WIN_VERSION syscall.Errno = 1150 + ERROR_APP_WRONG_OS syscall.Errno = 1151 + ERROR_SINGLE_INSTANCE_APP syscall.Errno = 1152 + ERROR_RMODE_APP syscall.Errno = 1153 + ERROR_INVALID_DLL syscall.Errno = 1154 + ERROR_NO_ASSOCIATION syscall.Errno = 1155 + ERROR_DDE_FAIL syscall.Errno = 1156 + ERROR_DLL_NOT_FOUND syscall.Errno = 1157 + ERROR_NO_MORE_USER_HANDLES syscall.Errno = 1158 + ERROR_MESSAGE_SYNC_ONLY syscall.Errno = 1159 + ERROR_SOURCE_ELEMENT_EMPTY syscall.Errno = 1160 + ERROR_DESTINATION_ELEMENT_FULL syscall.Errno = 1161 + ERROR_ILLEGAL_ELEMENT_ADDRESS syscall.Errno = 1162 + ERROR_MAGAZINE_NOT_PRESENT syscall.Errno = 1163 + ERROR_DEVICE_REINITIALIZATION_NEEDED syscall.Errno = 1164 + ERROR_DEVICE_REQUIRES_CLEANING syscall.Errno = 1165 + ERROR_DEVICE_DOOR_OPEN syscall.Errno = 1166 + ERROR_DEVICE_NOT_CONNECTED syscall.Errno = 1167 + ERROR_NOT_FOUND syscall.Errno = 1168 + ERROR_NO_MATCH syscall.Errno = 1169 + ERROR_SET_NOT_FOUND syscall.Errno = 1170 + ERROR_POINT_NOT_FOUND syscall.Errno = 1171 + ERROR_NO_TRACKING_SERVICE syscall.Errno = 1172 + ERROR_NO_VOLUME_ID syscall.Errno = 1173 + ERROR_UNABLE_TO_REMOVE_REPLACED syscall.Errno = 1175 + ERROR_UNABLE_TO_MOVE_REPLACEMENT syscall.Errno = 1176 + ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 syscall.Errno = 1177 + ERROR_JOURNAL_DELETE_IN_PROGRESS syscall.Errno = 1178 + ERROR_JOURNAL_NOT_ACTIVE syscall.Errno = 1179 + ERROR_POTENTIAL_FILE_FOUND syscall.Errno = 1180 + ERROR_JOURNAL_ENTRY_DELETED syscall.Errno = 1181 + ERROR_SHUTDOWN_IS_SCHEDULED syscall.Errno = 1190 + ERROR_SHUTDOWN_USERS_LOGGED_ON syscall.Errno = 1191 + ERROR_BAD_DEVICE syscall.Errno = 1200 + ERROR_CONNECTION_UNAVAIL syscall.Errno = 1201 + ERROR_DEVICE_ALREADY_REMEMBERED syscall.Errno = 1202 + ERROR_NO_NET_OR_BAD_PATH syscall.Errno = 1203 + ERROR_BAD_PROVIDER syscall.Errno = 1204 + ERROR_CANNOT_OPEN_PROFILE syscall.Errno = 1205 + ERROR_BAD_PROFILE syscall.Errno = 1206 + ERROR_NOT_CONTAINER syscall.Errno = 1207 + ERROR_EXTENDED_ERROR syscall.Errno = 1208 + ERROR_INVALID_GROUPNAME syscall.Errno = 1209 + ERROR_INVALID_COMPUTERNAME syscall.Errno = 1210 + ERROR_INVALID_EVENTNAME syscall.Errno = 1211 + ERROR_INVALID_DOMAINNAME syscall.Errno = 1212 + ERROR_INVALID_SERVICENAME syscall.Errno = 1213 + ERROR_INVALID_NETNAME syscall.Errno = 1214 + ERROR_INVALID_SHARENAME syscall.Errno = 1215 + ERROR_INVALID_PASSWORDNAME syscall.Errno = 1216 + ERROR_INVALID_MESSAGENAME syscall.Errno = 1217 + ERROR_INVALID_MESSAGEDEST syscall.Errno = 1218 + ERROR_SESSION_CREDENTIAL_CONFLICT syscall.Errno = 1219 + ERROR_REMOTE_SESSION_LIMIT_EXCEEDED syscall.Errno = 1220 + ERROR_DUP_DOMAINNAME syscall.Errno = 1221 + ERROR_NO_NETWORK syscall.Errno = 1222 + ERROR_CANCELLED syscall.Errno = 1223 + ERROR_USER_MAPPED_FILE syscall.Errno = 1224 + ERROR_CONNECTION_REFUSED syscall.Errno = 1225 + ERROR_GRACEFUL_DISCONNECT syscall.Errno = 1226 + ERROR_ADDRESS_ALREADY_ASSOCIATED syscall.Errno = 1227 + ERROR_ADDRESS_NOT_ASSOCIATED syscall.Errno = 1228 + ERROR_CONNECTION_INVALID syscall.Errno = 1229 + ERROR_CONNECTION_ACTIVE syscall.Errno = 1230 + ERROR_NETWORK_UNREACHABLE syscall.Errno = 1231 + ERROR_HOST_UNREACHABLE syscall.Errno = 1232 + ERROR_PROTOCOL_UNREACHABLE syscall.Errno = 1233 + ERROR_PORT_UNREACHABLE syscall.Errno = 1234 + ERROR_REQUEST_ABORTED syscall.Errno = 1235 + ERROR_CONNECTION_ABORTED syscall.Errno = 1236 + ERROR_RETRY syscall.Errno = 1237 + ERROR_CONNECTION_COUNT_LIMIT syscall.Errno = 1238 + ERROR_LOGIN_TIME_RESTRICTION syscall.Errno = 1239 + ERROR_LOGIN_WKSTA_RESTRICTION syscall.Errno = 1240 + ERROR_INCORRECT_ADDRESS syscall.Errno = 1241 + ERROR_ALREADY_REGISTERED syscall.Errno = 1242 + ERROR_SERVICE_NOT_FOUND syscall.Errno = 1243 + ERROR_NOT_AUTHENTICATED syscall.Errno = 1244 + ERROR_NOT_LOGGED_ON syscall.Errno = 1245 + ERROR_CONTINUE syscall.Errno = 1246 + ERROR_ALREADY_INITIALIZED syscall.Errno = 1247 + ERROR_NO_MORE_DEVICES syscall.Errno = 1248 + ERROR_NO_SUCH_SITE syscall.Errno = 1249 + ERROR_DOMAIN_CONTROLLER_EXISTS syscall.Errno = 1250 + ERROR_ONLY_IF_CONNECTED syscall.Errno = 1251 + ERROR_OVERRIDE_NOCHANGES syscall.Errno = 1252 + ERROR_BAD_USER_PROFILE syscall.Errno = 1253 + ERROR_NOT_SUPPORTED_ON_SBS syscall.Errno = 1254 + ERROR_SERVER_SHUTDOWN_IN_PROGRESS syscall.Errno = 1255 + ERROR_HOST_DOWN syscall.Errno = 1256 + ERROR_NON_ACCOUNT_SID syscall.Errno = 1257 + ERROR_NON_DOMAIN_SID syscall.Errno = 1258 + ERROR_APPHELP_BLOCK syscall.Errno = 1259 + ERROR_ACCESS_DISABLED_BY_POLICY syscall.Errno = 1260 + ERROR_REG_NAT_CONSUMPTION syscall.Errno = 1261 + ERROR_CSCSHARE_OFFLINE syscall.Errno = 1262 + ERROR_PKINIT_FAILURE syscall.Errno = 1263 + ERROR_SMARTCARD_SUBSYSTEM_FAILURE syscall.Errno = 1264 + ERROR_DOWNGRADE_DETECTED syscall.Errno = 1265 + ERROR_MACHINE_LOCKED syscall.Errno = 1271 + ERROR_SMB_GUEST_LOGON_BLOCKED syscall.Errno = 1272 + ERROR_CALLBACK_SUPPLIED_INVALID_DATA syscall.Errno = 1273 + ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED syscall.Errno = 1274 + ERROR_DRIVER_BLOCKED syscall.Errno = 1275 + ERROR_INVALID_IMPORT_OF_NON_DLL syscall.Errno = 1276 + ERROR_ACCESS_DISABLED_WEBBLADE syscall.Errno = 1277 + ERROR_ACCESS_DISABLED_WEBBLADE_TAMPER syscall.Errno = 1278 + ERROR_RECOVERY_FAILURE syscall.Errno = 1279 + ERROR_ALREADY_FIBER syscall.Errno = 1280 + ERROR_ALREADY_THREAD syscall.Errno = 1281 + ERROR_STACK_BUFFER_OVERRUN syscall.Errno = 1282 + ERROR_PARAMETER_QUOTA_EXCEEDED syscall.Errno = 1283 + ERROR_DEBUGGER_INACTIVE syscall.Errno = 1284 + ERROR_DELAY_LOAD_FAILED syscall.Errno = 1285 + ERROR_VDM_DISALLOWED syscall.Errno = 1286 + ERROR_UNIDENTIFIED_ERROR syscall.Errno = 1287 + ERROR_INVALID_CRUNTIME_PARAMETER syscall.Errno = 1288 + ERROR_BEYOND_VDL syscall.Errno = 1289 + ERROR_INCOMPATIBLE_SERVICE_SID_TYPE syscall.Errno = 1290 + ERROR_DRIVER_PROCESS_TERMINATED syscall.Errno = 1291 + ERROR_IMPLEMENTATION_LIMIT syscall.Errno = 1292 + ERROR_PROCESS_IS_PROTECTED syscall.Errno = 1293 + ERROR_SERVICE_NOTIFY_CLIENT_LAGGING syscall.Errno = 1294 + ERROR_DISK_QUOTA_EXCEEDED syscall.Errno = 1295 + ERROR_CONTENT_BLOCKED syscall.Errno = 1296 + ERROR_INCOMPATIBLE_SERVICE_PRIVILEGE syscall.Errno = 1297 + ERROR_APP_HANG syscall.Errno = 1298 + ERROR_INVALID_LABEL syscall.Errno = 1299 + ERROR_NOT_ALL_ASSIGNED syscall.Errno = 1300 + ERROR_SOME_NOT_MAPPED syscall.Errno = 1301 + ERROR_NO_QUOTAS_FOR_ACCOUNT syscall.Errno = 1302 + ERROR_LOCAL_USER_SESSION_KEY syscall.Errno = 1303 + ERROR_NULL_LM_PASSWORD syscall.Errno = 1304 + ERROR_UNKNOWN_REVISION syscall.Errno = 1305 + ERROR_REVISION_MISMATCH syscall.Errno = 1306 + ERROR_INVALID_OWNER syscall.Errno = 1307 + ERROR_INVALID_PRIMARY_GROUP syscall.Errno = 1308 + ERROR_NO_IMPERSONATION_TOKEN syscall.Errno = 1309 + ERROR_CANT_DISABLE_MANDATORY syscall.Errno = 1310 + ERROR_NO_LOGON_SERVERS syscall.Errno = 1311 + ERROR_NO_SUCH_LOGON_SESSION syscall.Errno = 1312 + ERROR_NO_SUCH_PRIVILEGE syscall.Errno = 1313 + ERROR_PRIVILEGE_NOT_HELD syscall.Errno = 1314 + ERROR_INVALID_ACCOUNT_NAME syscall.Errno = 1315 + ERROR_USER_EXISTS syscall.Errno = 1316 + ERROR_NO_SUCH_USER syscall.Errno = 1317 + ERROR_GROUP_EXISTS syscall.Errno = 1318 + ERROR_NO_SUCH_GROUP syscall.Errno = 1319 + ERROR_MEMBER_IN_GROUP syscall.Errno = 1320 + ERROR_MEMBER_NOT_IN_GROUP syscall.Errno = 1321 + ERROR_LAST_ADMIN syscall.Errno = 1322 + ERROR_WRONG_PASSWORD syscall.Errno = 1323 + ERROR_ILL_FORMED_PASSWORD syscall.Errno = 1324 + ERROR_PASSWORD_RESTRICTION syscall.Errno = 1325 + ERROR_LOGON_FAILURE syscall.Errno = 1326 + ERROR_ACCOUNT_RESTRICTION syscall.Errno = 1327 + ERROR_INVALID_LOGON_HOURS syscall.Errno = 1328 + ERROR_INVALID_WORKSTATION syscall.Errno = 1329 + ERROR_PASSWORD_EXPIRED syscall.Errno = 1330 + ERROR_ACCOUNT_DISABLED syscall.Errno = 1331 + ERROR_NONE_MAPPED syscall.Errno = 1332 + ERROR_TOO_MANY_LUIDS_REQUESTED syscall.Errno = 1333 + ERROR_LUIDS_EXHAUSTED syscall.Errno = 1334 + ERROR_INVALID_SUB_AUTHORITY syscall.Errno = 1335 + ERROR_INVALID_ACL syscall.Errno = 1336 + ERROR_INVALID_SID syscall.Errno = 1337 + ERROR_INVALID_SECURITY_DESCR syscall.Errno = 1338 + ERROR_BAD_INHERITANCE_ACL syscall.Errno = 1340 + ERROR_SERVER_DISABLED syscall.Errno = 1341 + ERROR_SERVER_NOT_DISABLED syscall.Errno = 1342 + ERROR_INVALID_ID_AUTHORITY syscall.Errno = 1343 + ERROR_ALLOTTED_SPACE_EXCEEDED syscall.Errno = 1344 + ERROR_INVALID_GROUP_ATTRIBUTES syscall.Errno = 1345 + ERROR_BAD_IMPERSONATION_LEVEL syscall.Errno = 1346 + ERROR_CANT_OPEN_ANONYMOUS syscall.Errno = 1347 + ERROR_BAD_VALIDATION_CLASS syscall.Errno = 1348 + ERROR_BAD_TOKEN_TYPE syscall.Errno = 1349 + ERROR_NO_SECURITY_ON_OBJECT syscall.Errno = 1350 + ERROR_CANT_ACCESS_DOMAIN_INFO syscall.Errno = 1351 + ERROR_INVALID_SERVER_STATE syscall.Errno = 1352 + ERROR_INVALID_DOMAIN_STATE syscall.Errno = 1353 + ERROR_INVALID_DOMAIN_ROLE syscall.Errno = 1354 + ERROR_NO_SUCH_DOMAIN syscall.Errno = 1355 + ERROR_DOMAIN_EXISTS syscall.Errno = 1356 + ERROR_DOMAIN_LIMIT_EXCEEDED syscall.Errno = 1357 + ERROR_INTERNAL_DB_CORRUPTION syscall.Errno = 1358 + ERROR_INTERNAL_ERROR syscall.Errno = 1359 + ERROR_GENERIC_NOT_MAPPED syscall.Errno = 1360 + ERROR_BAD_DESCRIPTOR_FORMAT syscall.Errno = 1361 + ERROR_NOT_LOGON_PROCESS syscall.Errno = 1362 + ERROR_LOGON_SESSION_EXISTS syscall.Errno = 1363 + ERROR_NO_SUCH_PACKAGE syscall.Errno = 1364 + ERROR_BAD_LOGON_SESSION_STATE syscall.Errno = 1365 + ERROR_LOGON_SESSION_COLLISION syscall.Errno = 1366 + ERROR_INVALID_LOGON_TYPE syscall.Errno = 1367 + ERROR_CANNOT_IMPERSONATE syscall.Errno = 1368 + ERROR_RXACT_INVALID_STATE syscall.Errno = 1369 + ERROR_RXACT_COMMIT_FAILURE syscall.Errno = 1370 + ERROR_SPECIAL_ACCOUNT syscall.Errno = 1371 + ERROR_SPECIAL_GROUP syscall.Errno = 1372 + ERROR_SPECIAL_USER syscall.Errno = 1373 + ERROR_MEMBERS_PRIMARY_GROUP syscall.Errno = 1374 + ERROR_TOKEN_ALREADY_IN_USE syscall.Errno = 1375 + ERROR_NO_SUCH_ALIAS syscall.Errno = 1376 + ERROR_MEMBER_NOT_IN_ALIAS syscall.Errno = 1377 + ERROR_MEMBER_IN_ALIAS syscall.Errno = 1378 + ERROR_ALIAS_EXISTS syscall.Errno = 1379 + ERROR_LOGON_NOT_GRANTED syscall.Errno = 1380 + ERROR_TOO_MANY_SECRETS syscall.Errno = 1381 + ERROR_SECRET_TOO_LONG syscall.Errno = 1382 + ERROR_INTERNAL_DB_ERROR syscall.Errno = 1383 + ERROR_TOO_MANY_CONTEXT_IDS syscall.Errno = 1384 + ERROR_LOGON_TYPE_NOT_GRANTED syscall.Errno = 1385 + ERROR_NT_CROSS_ENCRYPTION_REQUIRED syscall.Errno = 1386 + ERROR_NO_SUCH_MEMBER syscall.Errno = 1387 + ERROR_INVALID_MEMBER syscall.Errno = 1388 + ERROR_TOO_MANY_SIDS syscall.Errno = 1389 + ERROR_LM_CROSS_ENCRYPTION_REQUIRED syscall.Errno = 1390 + ERROR_NO_INHERITANCE syscall.Errno = 1391 + ERROR_FILE_CORRUPT syscall.Errno = 1392 + ERROR_DISK_CORRUPT syscall.Errno = 1393 + ERROR_NO_USER_SESSION_KEY syscall.Errno = 1394 + ERROR_LICENSE_QUOTA_EXCEEDED syscall.Errno = 1395 + ERROR_WRONG_TARGET_NAME syscall.Errno = 1396 + ERROR_MUTUAL_AUTH_FAILED syscall.Errno = 1397 + ERROR_TIME_SKEW syscall.Errno = 1398 + ERROR_CURRENT_DOMAIN_NOT_ALLOWED syscall.Errno = 1399 + ERROR_INVALID_WINDOW_HANDLE syscall.Errno = 1400 + ERROR_INVALID_MENU_HANDLE syscall.Errno = 1401 + ERROR_INVALID_CURSOR_HANDLE syscall.Errno = 1402 + ERROR_INVALID_ACCEL_HANDLE syscall.Errno = 1403 + ERROR_INVALID_HOOK_HANDLE syscall.Errno = 1404 + ERROR_INVALID_DWP_HANDLE syscall.Errno = 1405 + ERROR_TLW_WITH_WSCHILD syscall.Errno = 1406 + ERROR_CANNOT_FIND_WND_CLASS syscall.Errno = 1407 + ERROR_WINDOW_OF_OTHER_THREAD syscall.Errno = 1408 + ERROR_HOTKEY_ALREADY_REGISTERED syscall.Errno = 1409 + ERROR_CLASS_ALREADY_EXISTS syscall.Errno = 1410 + ERROR_CLASS_DOES_NOT_EXIST syscall.Errno = 1411 + ERROR_CLASS_HAS_WINDOWS syscall.Errno = 1412 + ERROR_INVALID_INDEX syscall.Errno = 1413 + ERROR_INVALID_ICON_HANDLE syscall.Errno = 1414 + ERROR_PRIVATE_DIALOG_INDEX syscall.Errno = 1415 + ERROR_LISTBOX_ID_NOT_FOUND syscall.Errno = 1416 + ERROR_NO_WILDCARD_CHARACTERS syscall.Errno = 1417 + ERROR_CLIPBOARD_NOT_OPEN syscall.Errno = 1418 + ERROR_HOTKEY_NOT_REGISTERED syscall.Errno = 1419 + ERROR_WINDOW_NOT_DIALOG syscall.Errno = 1420 + ERROR_CONTROL_ID_NOT_FOUND syscall.Errno = 1421 + ERROR_INVALID_COMBOBOX_MESSAGE syscall.Errno = 1422 + ERROR_WINDOW_NOT_COMBOBOX syscall.Errno = 1423 + ERROR_INVALID_EDIT_HEIGHT syscall.Errno = 1424 + ERROR_DC_NOT_FOUND syscall.Errno = 1425 + ERROR_INVALID_HOOK_FILTER syscall.Errno = 1426 + ERROR_INVALID_FILTER_PROC syscall.Errno = 1427 + ERROR_HOOK_NEEDS_HMOD syscall.Errno = 1428 + ERROR_GLOBAL_ONLY_HOOK syscall.Errno = 1429 + ERROR_JOURNAL_HOOK_SET syscall.Errno = 1430 + ERROR_HOOK_NOT_INSTALLED syscall.Errno = 1431 + ERROR_INVALID_LB_MESSAGE syscall.Errno = 1432 + ERROR_SETCOUNT_ON_BAD_LB syscall.Errno = 1433 + ERROR_LB_WITHOUT_TABSTOPS syscall.Errno = 1434 + ERROR_DESTROY_OBJECT_OF_OTHER_THREAD syscall.Errno = 1435 + ERROR_CHILD_WINDOW_MENU syscall.Errno = 1436 + ERROR_NO_SYSTEM_MENU syscall.Errno = 1437 + ERROR_INVALID_MSGBOX_STYLE syscall.Errno = 1438 + ERROR_INVALID_SPI_VALUE syscall.Errno = 1439 + ERROR_SCREEN_ALREADY_LOCKED syscall.Errno = 1440 + ERROR_HWNDS_HAVE_DIFF_PARENT syscall.Errno = 1441 + ERROR_NOT_CHILD_WINDOW syscall.Errno = 1442 + ERROR_INVALID_GW_COMMAND syscall.Errno = 1443 + ERROR_INVALID_THREAD_ID syscall.Errno = 1444 + ERROR_NON_MDICHILD_WINDOW syscall.Errno = 1445 + ERROR_POPUP_ALREADY_ACTIVE syscall.Errno = 1446 + ERROR_NO_SCROLLBARS syscall.Errno = 1447 + ERROR_INVALID_SCROLLBAR_RANGE syscall.Errno = 1448 + ERROR_INVALID_SHOWWIN_COMMAND syscall.Errno = 1449 + ERROR_NO_SYSTEM_RESOURCES syscall.Errno = 1450 + ERROR_NONPAGED_SYSTEM_RESOURCES syscall.Errno = 1451 + ERROR_PAGED_SYSTEM_RESOURCES syscall.Errno = 1452 + ERROR_WORKING_SET_QUOTA syscall.Errno = 1453 + ERROR_PAGEFILE_QUOTA syscall.Errno = 1454 + ERROR_COMMITMENT_LIMIT syscall.Errno = 1455 + ERROR_MENU_ITEM_NOT_FOUND syscall.Errno = 1456 + ERROR_INVALID_KEYBOARD_HANDLE syscall.Errno = 1457 + ERROR_HOOK_TYPE_NOT_ALLOWED syscall.Errno = 1458 + ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION syscall.Errno = 1459 + ERROR_TIMEOUT syscall.Errno = 1460 + ERROR_INVALID_MONITOR_HANDLE syscall.Errno = 1461 + ERROR_INCORRECT_SIZE syscall.Errno = 1462 + ERROR_SYMLINK_CLASS_DISABLED syscall.Errno = 1463 + ERROR_SYMLINK_NOT_SUPPORTED syscall.Errno = 1464 + ERROR_XML_PARSE_ERROR syscall.Errno = 1465 + ERROR_XMLDSIG_ERROR syscall.Errno = 1466 + ERROR_RESTART_APPLICATION syscall.Errno = 1467 + ERROR_WRONG_COMPARTMENT syscall.Errno = 1468 + ERROR_AUTHIP_FAILURE syscall.Errno = 1469 + ERROR_NO_NVRAM_RESOURCES syscall.Errno = 1470 + ERROR_NOT_GUI_PROCESS syscall.Errno = 1471 + ERROR_EVENTLOG_FILE_CORRUPT syscall.Errno = 1500 + ERROR_EVENTLOG_CANT_START syscall.Errno = 1501 + ERROR_LOG_FILE_FULL syscall.Errno = 1502 + ERROR_EVENTLOG_FILE_CHANGED syscall.Errno = 1503 + ERROR_CONTAINER_ASSIGNED syscall.Errno = 1504 + ERROR_JOB_NO_CONTAINER syscall.Errno = 1505 + ERROR_INVALID_TASK_NAME syscall.Errno = 1550 + ERROR_INVALID_TASK_INDEX syscall.Errno = 1551 + ERROR_THREAD_ALREADY_IN_TASK syscall.Errno = 1552 + ERROR_INSTALL_SERVICE_FAILURE syscall.Errno = 1601 + ERROR_INSTALL_USEREXIT syscall.Errno = 1602 + ERROR_INSTALL_FAILURE syscall.Errno = 1603 + ERROR_INSTALL_SUSPEND syscall.Errno = 1604 + ERROR_UNKNOWN_PRODUCT syscall.Errno = 1605 + ERROR_UNKNOWN_FEATURE syscall.Errno = 1606 + ERROR_UNKNOWN_COMPONENT syscall.Errno = 1607 + ERROR_UNKNOWN_PROPERTY syscall.Errno = 1608 + ERROR_INVALID_HANDLE_STATE syscall.Errno = 1609 + ERROR_BAD_CONFIGURATION syscall.Errno = 1610 + ERROR_INDEX_ABSENT syscall.Errno = 1611 + ERROR_INSTALL_SOURCE_ABSENT syscall.Errno = 1612 + ERROR_INSTALL_PACKAGE_VERSION syscall.Errno = 1613 + ERROR_PRODUCT_UNINSTALLED syscall.Errno = 1614 + ERROR_BAD_QUERY_SYNTAX syscall.Errno = 1615 + ERROR_INVALID_FIELD syscall.Errno = 1616 + ERROR_DEVICE_REMOVED syscall.Errno = 1617 + ERROR_INSTALL_ALREADY_RUNNING syscall.Errno = 1618 + ERROR_INSTALL_PACKAGE_OPEN_FAILED syscall.Errno = 1619 + ERROR_INSTALL_PACKAGE_INVALID syscall.Errno = 1620 + ERROR_INSTALL_UI_FAILURE syscall.Errno = 1621 + ERROR_INSTALL_LOG_FAILURE syscall.Errno = 1622 + ERROR_INSTALL_LANGUAGE_UNSUPPORTED syscall.Errno = 1623 + ERROR_INSTALL_TRANSFORM_FAILURE syscall.Errno = 1624 + ERROR_INSTALL_PACKAGE_REJECTED syscall.Errno = 1625 + ERROR_FUNCTION_NOT_CALLED syscall.Errno = 1626 + ERROR_FUNCTION_FAILED syscall.Errno = 1627 + ERROR_INVALID_TABLE syscall.Errno = 1628 + ERROR_DATATYPE_MISMATCH syscall.Errno = 1629 + ERROR_UNSUPPORTED_TYPE syscall.Errno = 1630 + ERROR_CREATE_FAILED syscall.Errno = 1631 + ERROR_INSTALL_TEMP_UNWRITABLE syscall.Errno = 1632 + ERROR_INSTALL_PLATFORM_UNSUPPORTED syscall.Errno = 1633 + ERROR_INSTALL_NOTUSED syscall.Errno = 1634 + ERROR_PATCH_PACKAGE_OPEN_FAILED syscall.Errno = 1635 + ERROR_PATCH_PACKAGE_INVALID syscall.Errno = 1636 + ERROR_PATCH_PACKAGE_UNSUPPORTED syscall.Errno = 1637 + ERROR_PRODUCT_VERSION syscall.Errno = 1638 + ERROR_INVALID_COMMAND_LINE syscall.Errno = 1639 + ERROR_INSTALL_REMOTE_DISALLOWED syscall.Errno = 1640 + ERROR_SUCCESS_REBOOT_INITIATED syscall.Errno = 1641 + ERROR_PATCH_TARGET_NOT_FOUND syscall.Errno = 1642 + ERROR_PATCH_PACKAGE_REJECTED syscall.Errno = 1643 + ERROR_INSTALL_TRANSFORM_REJECTED syscall.Errno = 1644 + ERROR_INSTALL_REMOTE_PROHIBITED syscall.Errno = 1645 + ERROR_PATCH_REMOVAL_UNSUPPORTED syscall.Errno = 1646 + ERROR_UNKNOWN_PATCH syscall.Errno = 1647 + ERROR_PATCH_NO_SEQUENCE syscall.Errno = 1648 + ERROR_PATCH_REMOVAL_DISALLOWED syscall.Errno = 1649 + ERROR_INVALID_PATCH_XML syscall.Errno = 1650 + ERROR_PATCH_MANAGED_ADVERTISED_PRODUCT syscall.Errno = 1651 + ERROR_INSTALL_SERVICE_SAFEBOOT syscall.Errno = 1652 + ERROR_FAIL_FAST_EXCEPTION syscall.Errno = 1653 + ERROR_INSTALL_REJECTED syscall.Errno = 1654 + ERROR_DYNAMIC_CODE_BLOCKED syscall.Errno = 1655 + ERROR_NOT_SAME_OBJECT syscall.Errno = 1656 + ERROR_STRICT_CFG_VIOLATION syscall.Errno = 1657 + ERROR_SET_CONTEXT_DENIED syscall.Errno = 1660 + ERROR_CROSS_PARTITION_VIOLATION syscall.Errno = 1661 + RPC_S_INVALID_STRING_BINDING syscall.Errno = 1700 + RPC_S_WRONG_KIND_OF_BINDING syscall.Errno = 1701 + RPC_S_INVALID_BINDING syscall.Errno = 1702 + RPC_S_PROTSEQ_NOT_SUPPORTED syscall.Errno = 1703 + RPC_S_INVALID_RPC_PROTSEQ syscall.Errno = 1704 + RPC_S_INVALID_STRING_UUID syscall.Errno = 1705 + RPC_S_INVALID_ENDPOINT_FORMAT syscall.Errno = 1706 + RPC_S_INVALID_NET_ADDR syscall.Errno = 1707 + RPC_S_NO_ENDPOINT_FOUND syscall.Errno = 1708 + RPC_S_INVALID_TIMEOUT syscall.Errno = 1709 + RPC_S_OBJECT_NOT_FOUND syscall.Errno = 1710 + RPC_S_ALREADY_REGISTERED syscall.Errno = 1711 + RPC_S_TYPE_ALREADY_REGISTERED syscall.Errno = 1712 + RPC_S_ALREADY_LISTENING syscall.Errno = 1713 + RPC_S_NO_PROTSEQS_REGISTERED syscall.Errno = 1714 + RPC_S_NOT_LISTENING syscall.Errno = 1715 + RPC_S_UNKNOWN_MGR_TYPE syscall.Errno = 1716 + RPC_S_UNKNOWN_IF syscall.Errno = 1717 + RPC_S_NO_BINDINGS syscall.Errno = 1718 + RPC_S_NO_PROTSEQS syscall.Errno = 1719 + RPC_S_CANT_CREATE_ENDPOINT syscall.Errno = 1720 + RPC_S_OUT_OF_RESOURCES syscall.Errno = 1721 + RPC_S_SERVER_UNAVAILABLE syscall.Errno = 1722 + RPC_S_SERVER_TOO_BUSY syscall.Errno = 1723 + RPC_S_INVALID_NETWORK_OPTIONS syscall.Errno = 1724 + RPC_S_NO_CALL_ACTIVE syscall.Errno = 1725 + RPC_S_CALL_FAILED syscall.Errno = 1726 + RPC_S_CALL_FAILED_DNE syscall.Errno = 1727 + RPC_S_PROTOCOL_ERROR syscall.Errno = 1728 + RPC_S_PROXY_ACCESS_DENIED syscall.Errno = 1729 + RPC_S_UNSUPPORTED_TRANS_SYN syscall.Errno = 1730 + RPC_S_UNSUPPORTED_TYPE syscall.Errno = 1732 + RPC_S_INVALID_TAG syscall.Errno = 1733 + RPC_S_INVALID_BOUND syscall.Errno = 1734 + RPC_S_NO_ENTRY_NAME syscall.Errno = 1735 + RPC_S_INVALID_NAME_SYNTAX syscall.Errno = 1736 + RPC_S_UNSUPPORTED_NAME_SYNTAX syscall.Errno = 1737 + RPC_S_UUID_NO_ADDRESS syscall.Errno = 1739 + RPC_S_DUPLICATE_ENDPOINT syscall.Errno = 1740 + RPC_S_UNKNOWN_AUTHN_TYPE syscall.Errno = 1741 + RPC_S_MAX_CALLS_TOO_SMALL syscall.Errno = 1742 + RPC_S_STRING_TOO_LONG syscall.Errno = 1743 + RPC_S_PROTSEQ_NOT_FOUND syscall.Errno = 1744 + RPC_S_PROCNUM_OUT_OF_RANGE syscall.Errno = 1745 + RPC_S_BINDING_HAS_NO_AUTH syscall.Errno = 1746 + RPC_S_UNKNOWN_AUTHN_SERVICE syscall.Errno = 1747 + RPC_S_UNKNOWN_AUTHN_LEVEL syscall.Errno = 1748 + RPC_S_INVALID_AUTH_IDENTITY syscall.Errno = 1749 + RPC_S_UNKNOWN_AUTHZ_SERVICE syscall.Errno = 1750 + EPT_S_INVALID_ENTRY syscall.Errno = 1751 + EPT_S_CANT_PERFORM_OP syscall.Errno = 1752 + EPT_S_NOT_REGISTERED syscall.Errno = 1753 + RPC_S_NOTHING_TO_EXPORT syscall.Errno = 1754 + RPC_S_INCOMPLETE_NAME syscall.Errno = 1755 + RPC_S_INVALID_VERS_OPTION syscall.Errno = 1756 + RPC_S_NO_MORE_MEMBERS syscall.Errno = 1757 + RPC_S_NOT_ALL_OBJS_UNEXPORTED syscall.Errno = 1758 + RPC_S_INTERFACE_NOT_FOUND syscall.Errno = 1759 + RPC_S_ENTRY_ALREADY_EXISTS syscall.Errno = 1760 + RPC_S_ENTRY_NOT_FOUND syscall.Errno = 1761 + RPC_S_NAME_SERVICE_UNAVAILABLE syscall.Errno = 1762 + RPC_S_INVALID_NAF_ID syscall.Errno = 1763 + RPC_S_CANNOT_SUPPORT syscall.Errno = 1764 + RPC_S_NO_CONTEXT_AVAILABLE syscall.Errno = 1765 + RPC_S_INTERNAL_ERROR syscall.Errno = 1766 + RPC_S_ZERO_DIVIDE syscall.Errno = 1767 + RPC_S_ADDRESS_ERROR syscall.Errno = 1768 + RPC_S_FP_DIV_ZERO syscall.Errno = 1769 + RPC_S_FP_UNDERFLOW syscall.Errno = 1770 + RPC_S_FP_OVERFLOW syscall.Errno = 1771 + RPC_X_NO_MORE_ENTRIES syscall.Errno = 1772 + RPC_X_SS_CHAR_TRANS_OPEN_FAIL syscall.Errno = 1773 + RPC_X_SS_CHAR_TRANS_SHORT_FILE syscall.Errno = 1774 + RPC_X_SS_IN_NULL_CONTEXT syscall.Errno = 1775 + RPC_X_SS_CONTEXT_DAMAGED syscall.Errno = 1777 + RPC_X_SS_HANDLES_MISMATCH syscall.Errno = 1778 + RPC_X_SS_CANNOT_GET_CALL_HANDLE syscall.Errno = 1779 + RPC_X_NULL_REF_POINTER syscall.Errno = 1780 + RPC_X_ENUM_VALUE_OUT_OF_RANGE syscall.Errno = 1781 + RPC_X_BYTE_COUNT_TOO_SMALL syscall.Errno = 1782 + RPC_X_BAD_STUB_DATA syscall.Errno = 1783 + ERROR_INVALID_USER_BUFFER syscall.Errno = 1784 + ERROR_UNRECOGNIZED_MEDIA syscall.Errno = 1785 + ERROR_NO_TRUST_LSA_SECRET syscall.Errno = 1786 + ERROR_NO_TRUST_SAM_ACCOUNT syscall.Errno = 1787 + ERROR_TRUSTED_DOMAIN_FAILURE syscall.Errno = 1788 + ERROR_TRUSTED_RELATIONSHIP_FAILURE syscall.Errno = 1789 + ERROR_TRUST_FAILURE syscall.Errno = 1790 + RPC_S_CALL_IN_PROGRESS syscall.Errno = 1791 + ERROR_NETLOGON_NOT_STARTED syscall.Errno = 1792 + ERROR_ACCOUNT_EXPIRED syscall.Errno = 1793 + ERROR_REDIRECTOR_HAS_OPEN_HANDLES syscall.Errno = 1794 + ERROR_PRINTER_DRIVER_ALREADY_INSTALLED syscall.Errno = 1795 + ERROR_UNKNOWN_PORT syscall.Errno = 1796 + ERROR_UNKNOWN_PRINTER_DRIVER syscall.Errno = 1797 + ERROR_UNKNOWN_PRINTPROCESSOR syscall.Errno = 1798 + ERROR_INVALID_SEPARATOR_FILE syscall.Errno = 1799 + ERROR_INVALID_PRIORITY syscall.Errno = 1800 + ERROR_INVALID_PRINTER_NAME syscall.Errno = 1801 + ERROR_PRINTER_ALREADY_EXISTS syscall.Errno = 1802 + ERROR_INVALID_PRINTER_COMMAND syscall.Errno = 1803 + ERROR_INVALID_DATATYPE syscall.Errno = 1804 + ERROR_INVALID_ENVIRONMENT syscall.Errno = 1805 + RPC_S_NO_MORE_BINDINGS syscall.Errno = 1806 + ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT syscall.Errno = 1807 + ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT syscall.Errno = 1808 + ERROR_NOLOGON_SERVER_TRUST_ACCOUNT syscall.Errno = 1809 + ERROR_DOMAIN_TRUST_INCONSISTENT syscall.Errno = 1810 + ERROR_SERVER_HAS_OPEN_HANDLES syscall.Errno = 1811 + ERROR_RESOURCE_DATA_NOT_FOUND syscall.Errno = 1812 + ERROR_RESOURCE_TYPE_NOT_FOUND syscall.Errno = 1813 + ERROR_RESOURCE_NAME_NOT_FOUND syscall.Errno = 1814 + ERROR_RESOURCE_LANG_NOT_FOUND syscall.Errno = 1815 + ERROR_NOT_ENOUGH_QUOTA syscall.Errno = 1816 + RPC_S_NO_INTERFACES syscall.Errno = 1817 + RPC_S_CALL_CANCELLED syscall.Errno = 1818 + RPC_S_BINDING_INCOMPLETE syscall.Errno = 1819 + RPC_S_COMM_FAILURE syscall.Errno = 1820 + RPC_S_UNSUPPORTED_AUTHN_LEVEL syscall.Errno = 1821 + RPC_S_NO_PRINC_NAME syscall.Errno = 1822 + RPC_S_NOT_RPC_ERROR syscall.Errno = 1823 + RPC_S_UUID_LOCAL_ONLY syscall.Errno = 1824 + RPC_S_SEC_PKG_ERROR syscall.Errno = 1825 + RPC_S_NOT_CANCELLED syscall.Errno = 1826 + RPC_X_INVALID_ES_ACTION syscall.Errno = 1827 + RPC_X_WRONG_ES_VERSION syscall.Errno = 1828 + RPC_X_WRONG_STUB_VERSION syscall.Errno = 1829 + RPC_X_INVALID_PIPE_OBJECT syscall.Errno = 1830 + RPC_X_WRONG_PIPE_ORDER syscall.Errno = 1831 + RPC_X_WRONG_PIPE_VERSION syscall.Errno = 1832 + RPC_S_COOKIE_AUTH_FAILED syscall.Errno = 1833 + RPC_S_DO_NOT_DISTURB syscall.Errno = 1834 + RPC_S_SYSTEM_HANDLE_COUNT_EXCEEDED syscall.Errno = 1835 + RPC_S_SYSTEM_HANDLE_TYPE_MISMATCH syscall.Errno = 1836 + RPC_S_GROUP_MEMBER_NOT_FOUND syscall.Errno = 1898 + EPT_S_CANT_CREATE syscall.Errno = 1899 + RPC_S_INVALID_OBJECT syscall.Errno = 1900 + ERROR_INVALID_TIME syscall.Errno = 1901 + ERROR_INVALID_FORM_NAME syscall.Errno = 1902 + ERROR_INVALID_FORM_SIZE syscall.Errno = 1903 + ERROR_ALREADY_WAITING syscall.Errno = 1904 + ERROR_PRINTER_DELETED syscall.Errno = 1905 + ERROR_INVALID_PRINTER_STATE syscall.Errno = 1906 + ERROR_PASSWORD_MUST_CHANGE syscall.Errno = 1907 + ERROR_DOMAIN_CONTROLLER_NOT_FOUND syscall.Errno = 1908 + ERROR_ACCOUNT_LOCKED_OUT syscall.Errno = 1909 + OR_INVALID_OXID syscall.Errno = 1910 + OR_INVALID_OID syscall.Errno = 1911 + OR_INVALID_SET syscall.Errno = 1912 + RPC_S_SEND_INCOMPLETE syscall.Errno = 1913 + RPC_S_INVALID_ASYNC_HANDLE syscall.Errno = 1914 + RPC_S_INVALID_ASYNC_CALL syscall.Errno = 1915 + RPC_X_PIPE_CLOSED syscall.Errno = 1916 + RPC_X_PIPE_DISCIPLINE_ERROR syscall.Errno = 1917 + RPC_X_PIPE_EMPTY syscall.Errno = 1918 + ERROR_NO_SITENAME syscall.Errno = 1919 + ERROR_CANT_ACCESS_FILE syscall.Errno = 1920 + ERROR_CANT_RESOLVE_FILENAME syscall.Errno = 1921 + RPC_S_ENTRY_TYPE_MISMATCH syscall.Errno = 1922 + RPC_S_NOT_ALL_OBJS_EXPORTED syscall.Errno = 1923 + RPC_S_INTERFACE_NOT_EXPORTED syscall.Errno = 1924 + RPC_S_PROFILE_NOT_ADDED syscall.Errno = 1925 + RPC_S_PRF_ELT_NOT_ADDED syscall.Errno = 1926 + RPC_S_PRF_ELT_NOT_REMOVED syscall.Errno = 1927 + RPC_S_GRP_ELT_NOT_ADDED syscall.Errno = 1928 + RPC_S_GRP_ELT_NOT_REMOVED syscall.Errno = 1929 + ERROR_KM_DRIVER_BLOCKED syscall.Errno = 1930 + ERROR_CONTEXT_EXPIRED syscall.Errno = 1931 + ERROR_PER_USER_TRUST_QUOTA_EXCEEDED syscall.Errno = 1932 + ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED syscall.Errno = 1933 + ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED syscall.Errno = 1934 + ERROR_AUTHENTICATION_FIREWALL_FAILED syscall.Errno = 1935 + ERROR_REMOTE_PRINT_CONNECTIONS_BLOCKED syscall.Errno = 1936 + ERROR_NTLM_BLOCKED syscall.Errno = 1937 + ERROR_PASSWORD_CHANGE_REQUIRED syscall.Errno = 1938 + ERROR_LOST_MODE_LOGON_RESTRICTION syscall.Errno = 1939 + ERROR_INVALID_PIXEL_FORMAT syscall.Errno = 2000 + ERROR_BAD_DRIVER syscall.Errno = 2001 + ERROR_INVALID_WINDOW_STYLE syscall.Errno = 2002 + ERROR_METAFILE_NOT_SUPPORTED syscall.Errno = 2003 + ERROR_TRANSFORM_NOT_SUPPORTED syscall.Errno = 2004 + ERROR_CLIPPING_NOT_SUPPORTED syscall.Errno = 2005 + ERROR_INVALID_CMM syscall.Errno = 2010 + ERROR_INVALID_PROFILE syscall.Errno = 2011 + ERROR_TAG_NOT_FOUND syscall.Errno = 2012 + ERROR_TAG_NOT_PRESENT syscall.Errno = 2013 + ERROR_DUPLICATE_TAG syscall.Errno = 2014 + ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE syscall.Errno = 2015 + ERROR_PROFILE_NOT_FOUND syscall.Errno = 2016 + ERROR_INVALID_COLORSPACE syscall.Errno = 2017 + ERROR_ICM_NOT_ENABLED syscall.Errno = 2018 + ERROR_DELETING_ICM_XFORM syscall.Errno = 2019 + ERROR_INVALID_TRANSFORM syscall.Errno = 2020 + ERROR_COLORSPACE_MISMATCH syscall.Errno = 2021 + ERROR_INVALID_COLORINDEX syscall.Errno = 2022 + ERROR_PROFILE_DOES_NOT_MATCH_DEVICE syscall.Errno = 2023 + ERROR_CONNECTED_OTHER_PASSWORD syscall.Errno = 2108 + ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT syscall.Errno = 2109 + ERROR_BAD_USERNAME syscall.Errno = 2202 + ERROR_NOT_CONNECTED syscall.Errno = 2250 + ERROR_OPEN_FILES syscall.Errno = 2401 + ERROR_ACTIVE_CONNECTIONS syscall.Errno = 2402 + ERROR_DEVICE_IN_USE syscall.Errno = 2404 + ERROR_UNKNOWN_PRINT_MONITOR syscall.Errno = 3000 + ERROR_PRINTER_DRIVER_IN_USE syscall.Errno = 3001 + ERROR_SPOOL_FILE_NOT_FOUND syscall.Errno = 3002 + ERROR_SPL_NO_STARTDOC syscall.Errno = 3003 + ERROR_SPL_NO_ADDJOB syscall.Errno = 3004 + ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED syscall.Errno = 3005 + ERROR_PRINT_MONITOR_ALREADY_INSTALLED syscall.Errno = 3006 + ERROR_INVALID_PRINT_MONITOR syscall.Errno = 3007 + ERROR_PRINT_MONITOR_IN_USE syscall.Errno = 3008 + ERROR_PRINTER_HAS_JOBS_QUEUED syscall.Errno = 3009 + ERROR_SUCCESS_REBOOT_REQUIRED syscall.Errno = 3010 + ERROR_SUCCESS_RESTART_REQUIRED syscall.Errno = 3011 + ERROR_PRINTER_NOT_FOUND syscall.Errno = 3012 + ERROR_PRINTER_DRIVER_WARNED syscall.Errno = 3013 + ERROR_PRINTER_DRIVER_BLOCKED syscall.Errno = 3014 + ERROR_PRINTER_DRIVER_PACKAGE_IN_USE syscall.Errno = 3015 + ERROR_CORE_DRIVER_PACKAGE_NOT_FOUND syscall.Errno = 3016 + ERROR_FAIL_REBOOT_REQUIRED syscall.Errno = 3017 + ERROR_FAIL_REBOOT_INITIATED syscall.Errno = 3018 + ERROR_PRINTER_DRIVER_DOWNLOAD_NEEDED syscall.Errno = 3019 + ERROR_PRINT_JOB_RESTART_REQUIRED syscall.Errno = 3020 + ERROR_INVALID_PRINTER_DRIVER_MANIFEST syscall.Errno = 3021 + ERROR_PRINTER_NOT_SHAREABLE syscall.Errno = 3022 + ERROR_REQUEST_PAUSED syscall.Errno = 3050 + ERROR_APPEXEC_CONDITION_NOT_SATISFIED syscall.Errno = 3060 + ERROR_APPEXEC_HANDLE_INVALIDATED syscall.Errno = 3061 + ERROR_APPEXEC_INVALID_HOST_GENERATION syscall.Errno = 3062 + ERROR_APPEXEC_UNEXPECTED_PROCESS_REGISTRATION syscall.Errno = 3063 + ERROR_APPEXEC_INVALID_HOST_STATE syscall.Errno = 3064 + ERROR_APPEXEC_NO_DONOR syscall.Errno = 3065 + ERROR_APPEXEC_HOST_ID_MISMATCH syscall.Errno = 3066 + ERROR_APPEXEC_UNKNOWN_USER syscall.Errno = 3067 + ERROR_IO_REISSUE_AS_CACHED syscall.Errno = 3950 + ERROR_WINS_INTERNAL syscall.Errno = 4000 + ERROR_CAN_NOT_DEL_LOCAL_WINS syscall.Errno = 4001 + ERROR_STATIC_INIT syscall.Errno = 4002 + ERROR_INC_BACKUP syscall.Errno = 4003 + ERROR_FULL_BACKUP syscall.Errno = 4004 + ERROR_REC_NON_EXISTENT syscall.Errno = 4005 + ERROR_RPL_NOT_ALLOWED syscall.Errno = 4006 + PEERDIST_ERROR_CONTENTINFO_VERSION_UNSUPPORTED syscall.Errno = 4050 + PEERDIST_ERROR_CANNOT_PARSE_CONTENTINFO syscall.Errno = 4051 + PEERDIST_ERROR_MISSING_DATA syscall.Errno = 4052 + PEERDIST_ERROR_NO_MORE syscall.Errno = 4053 + PEERDIST_ERROR_NOT_INITIALIZED syscall.Errno = 4054 + PEERDIST_ERROR_ALREADY_INITIALIZED syscall.Errno = 4055 + PEERDIST_ERROR_SHUTDOWN_IN_PROGRESS syscall.Errno = 4056 + PEERDIST_ERROR_INVALIDATED syscall.Errno = 4057 + PEERDIST_ERROR_ALREADY_EXISTS syscall.Errno = 4058 + PEERDIST_ERROR_OPERATION_NOTFOUND syscall.Errno = 4059 + PEERDIST_ERROR_ALREADY_COMPLETED syscall.Errno = 4060 + PEERDIST_ERROR_OUT_OF_BOUNDS syscall.Errno = 4061 + PEERDIST_ERROR_VERSION_UNSUPPORTED syscall.Errno = 4062 + PEERDIST_ERROR_INVALID_CONFIGURATION syscall.Errno = 4063 + PEERDIST_ERROR_NOT_LICENSED syscall.Errno = 4064 + PEERDIST_ERROR_SERVICE_UNAVAILABLE syscall.Errno = 4065 + PEERDIST_ERROR_TRUST_FAILURE syscall.Errno = 4066 + ERROR_DHCP_ADDRESS_CONFLICT syscall.Errno = 4100 + ERROR_WMI_GUID_NOT_FOUND syscall.Errno = 4200 + ERROR_WMI_INSTANCE_NOT_FOUND syscall.Errno = 4201 + ERROR_WMI_ITEMID_NOT_FOUND syscall.Errno = 4202 + ERROR_WMI_TRY_AGAIN syscall.Errno = 4203 + ERROR_WMI_DP_NOT_FOUND syscall.Errno = 4204 + ERROR_WMI_UNRESOLVED_INSTANCE_REF syscall.Errno = 4205 + ERROR_WMI_ALREADY_ENABLED syscall.Errno = 4206 + ERROR_WMI_GUID_DISCONNECTED syscall.Errno = 4207 + ERROR_WMI_SERVER_UNAVAILABLE syscall.Errno = 4208 + ERROR_WMI_DP_FAILED syscall.Errno = 4209 + ERROR_WMI_INVALID_MOF syscall.Errno = 4210 + ERROR_WMI_INVALID_REGINFO syscall.Errno = 4211 + ERROR_WMI_ALREADY_DISABLED syscall.Errno = 4212 + ERROR_WMI_READ_ONLY syscall.Errno = 4213 + ERROR_WMI_SET_FAILURE syscall.Errno = 4214 + ERROR_NOT_APPCONTAINER syscall.Errno = 4250 + ERROR_APPCONTAINER_REQUIRED syscall.Errno = 4251 + ERROR_NOT_SUPPORTED_IN_APPCONTAINER syscall.Errno = 4252 + ERROR_INVALID_PACKAGE_SID_LENGTH syscall.Errno = 4253 + ERROR_INVALID_MEDIA syscall.Errno = 4300 + ERROR_INVALID_LIBRARY syscall.Errno = 4301 + ERROR_INVALID_MEDIA_POOL syscall.Errno = 4302 + ERROR_DRIVE_MEDIA_MISMATCH syscall.Errno = 4303 + ERROR_MEDIA_OFFLINE syscall.Errno = 4304 + ERROR_LIBRARY_OFFLINE syscall.Errno = 4305 + ERROR_EMPTY syscall.Errno = 4306 + ERROR_NOT_EMPTY syscall.Errno = 4307 + ERROR_MEDIA_UNAVAILABLE syscall.Errno = 4308 + ERROR_RESOURCE_DISABLED syscall.Errno = 4309 + ERROR_INVALID_CLEANER syscall.Errno = 4310 + ERROR_UNABLE_TO_CLEAN syscall.Errno = 4311 + ERROR_OBJECT_NOT_FOUND syscall.Errno = 4312 + ERROR_DATABASE_FAILURE syscall.Errno = 4313 + ERROR_DATABASE_FULL syscall.Errno = 4314 + ERROR_MEDIA_INCOMPATIBLE syscall.Errno = 4315 + ERROR_RESOURCE_NOT_PRESENT syscall.Errno = 4316 + ERROR_INVALID_OPERATION syscall.Errno = 4317 + ERROR_MEDIA_NOT_AVAILABLE syscall.Errno = 4318 + ERROR_DEVICE_NOT_AVAILABLE syscall.Errno = 4319 + ERROR_REQUEST_REFUSED syscall.Errno = 4320 + ERROR_INVALID_DRIVE_OBJECT syscall.Errno = 4321 + ERROR_LIBRARY_FULL syscall.Errno = 4322 + ERROR_MEDIUM_NOT_ACCESSIBLE syscall.Errno = 4323 + ERROR_UNABLE_TO_LOAD_MEDIUM syscall.Errno = 4324 + ERROR_UNABLE_TO_INVENTORY_DRIVE syscall.Errno = 4325 + ERROR_UNABLE_TO_INVENTORY_SLOT syscall.Errno = 4326 + ERROR_UNABLE_TO_INVENTORY_TRANSPORT syscall.Errno = 4327 + ERROR_TRANSPORT_FULL syscall.Errno = 4328 + ERROR_CONTROLLING_IEPORT syscall.Errno = 4329 + ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA syscall.Errno = 4330 + ERROR_CLEANER_SLOT_SET syscall.Errno = 4331 + ERROR_CLEANER_SLOT_NOT_SET syscall.Errno = 4332 + ERROR_CLEANER_CARTRIDGE_SPENT syscall.Errno = 4333 + ERROR_UNEXPECTED_OMID syscall.Errno = 4334 + ERROR_CANT_DELETE_LAST_ITEM syscall.Errno = 4335 + ERROR_MESSAGE_EXCEEDS_MAX_SIZE syscall.Errno = 4336 + ERROR_VOLUME_CONTAINS_SYS_FILES syscall.Errno = 4337 + ERROR_INDIGENOUS_TYPE syscall.Errno = 4338 + ERROR_NO_SUPPORTING_DRIVES syscall.Errno = 4339 + ERROR_CLEANER_CARTRIDGE_INSTALLED syscall.Errno = 4340 + ERROR_IEPORT_FULL syscall.Errno = 4341 + ERROR_FILE_OFFLINE syscall.Errno = 4350 + ERROR_REMOTE_STORAGE_NOT_ACTIVE syscall.Errno = 4351 + ERROR_REMOTE_STORAGE_MEDIA_ERROR syscall.Errno = 4352 + ERROR_NOT_A_REPARSE_POINT syscall.Errno = 4390 + ERROR_REPARSE_ATTRIBUTE_CONFLICT syscall.Errno = 4391 + ERROR_INVALID_REPARSE_DATA syscall.Errno = 4392 + ERROR_REPARSE_TAG_INVALID syscall.Errno = 4393 + ERROR_REPARSE_TAG_MISMATCH syscall.Errno = 4394 + ERROR_REPARSE_POINT_ENCOUNTERED syscall.Errno = 4395 + ERROR_APP_DATA_NOT_FOUND syscall.Errno = 4400 + ERROR_APP_DATA_EXPIRED syscall.Errno = 4401 + ERROR_APP_DATA_CORRUPT syscall.Errno = 4402 + ERROR_APP_DATA_LIMIT_EXCEEDED syscall.Errno = 4403 + ERROR_APP_DATA_REBOOT_REQUIRED syscall.Errno = 4404 + ERROR_SECUREBOOT_ROLLBACK_DETECTED syscall.Errno = 4420 + ERROR_SECUREBOOT_POLICY_VIOLATION syscall.Errno = 4421 + ERROR_SECUREBOOT_INVALID_POLICY syscall.Errno = 4422 + ERROR_SECUREBOOT_POLICY_PUBLISHER_NOT_FOUND syscall.Errno = 4423 + ERROR_SECUREBOOT_POLICY_NOT_SIGNED syscall.Errno = 4424 + ERROR_SECUREBOOT_NOT_ENABLED syscall.Errno = 4425 + ERROR_SECUREBOOT_FILE_REPLACED syscall.Errno = 4426 + ERROR_SECUREBOOT_POLICY_NOT_AUTHORIZED syscall.Errno = 4427 + ERROR_SECUREBOOT_POLICY_UNKNOWN syscall.Errno = 4428 + ERROR_SECUREBOOT_POLICY_MISSING_ANTIROLLBACKVERSION syscall.Errno = 4429 + ERROR_SECUREBOOT_PLATFORM_ID_MISMATCH syscall.Errno = 4430 + ERROR_SECUREBOOT_POLICY_ROLLBACK_DETECTED syscall.Errno = 4431 + ERROR_SECUREBOOT_POLICY_UPGRADE_MISMATCH syscall.Errno = 4432 + ERROR_SECUREBOOT_REQUIRED_POLICY_FILE_MISSING syscall.Errno = 4433 + ERROR_SECUREBOOT_NOT_BASE_POLICY syscall.Errno = 4434 + ERROR_SECUREBOOT_NOT_SUPPLEMENTAL_POLICY syscall.Errno = 4435 + ERROR_OFFLOAD_READ_FLT_NOT_SUPPORTED syscall.Errno = 4440 + ERROR_OFFLOAD_WRITE_FLT_NOT_SUPPORTED syscall.Errno = 4441 + ERROR_OFFLOAD_READ_FILE_NOT_SUPPORTED syscall.Errno = 4442 + ERROR_OFFLOAD_WRITE_FILE_NOT_SUPPORTED syscall.Errno = 4443 + ERROR_ALREADY_HAS_STREAM_ID syscall.Errno = 4444 + ERROR_SMR_GARBAGE_COLLECTION_REQUIRED syscall.Errno = 4445 + ERROR_WOF_WIM_HEADER_CORRUPT syscall.Errno = 4446 + ERROR_WOF_WIM_RESOURCE_TABLE_CORRUPT syscall.Errno = 4447 + ERROR_WOF_FILE_RESOURCE_TABLE_CORRUPT syscall.Errno = 4448 + ERROR_VOLUME_NOT_SIS_ENABLED syscall.Errno = 4500 + ERROR_SYSTEM_INTEGRITY_ROLLBACK_DETECTED syscall.Errno = 4550 + ERROR_SYSTEM_INTEGRITY_POLICY_VIOLATION syscall.Errno = 4551 + ERROR_SYSTEM_INTEGRITY_INVALID_POLICY syscall.Errno = 4552 + ERROR_SYSTEM_INTEGRITY_POLICY_NOT_SIGNED syscall.Errno = 4553 + ERROR_VSM_NOT_INITIALIZED syscall.Errno = 4560 + ERROR_VSM_DMA_PROTECTION_NOT_IN_USE syscall.Errno = 4561 + ERROR_PLATFORM_MANIFEST_NOT_AUTHORIZED syscall.Errno = 4570 + ERROR_PLATFORM_MANIFEST_INVALID syscall.Errno = 4571 + ERROR_PLATFORM_MANIFEST_FILE_NOT_AUTHORIZED syscall.Errno = 4572 + ERROR_PLATFORM_MANIFEST_CATALOG_NOT_AUTHORIZED syscall.Errno = 4573 + ERROR_PLATFORM_MANIFEST_BINARY_ID_NOT_FOUND syscall.Errno = 4574 + ERROR_PLATFORM_MANIFEST_NOT_ACTIVE syscall.Errno = 4575 + ERROR_PLATFORM_MANIFEST_NOT_SIGNED syscall.Errno = 4576 + ERROR_DEPENDENT_RESOURCE_EXISTS syscall.Errno = 5001 + ERROR_DEPENDENCY_NOT_FOUND syscall.Errno = 5002 + ERROR_DEPENDENCY_ALREADY_EXISTS syscall.Errno = 5003 + ERROR_RESOURCE_NOT_ONLINE syscall.Errno = 5004 + ERROR_HOST_NODE_NOT_AVAILABLE syscall.Errno = 5005 + ERROR_RESOURCE_NOT_AVAILABLE syscall.Errno = 5006 + ERROR_RESOURCE_NOT_FOUND syscall.Errno = 5007 + ERROR_SHUTDOWN_CLUSTER syscall.Errno = 5008 + ERROR_CANT_EVICT_ACTIVE_NODE syscall.Errno = 5009 + ERROR_OBJECT_ALREADY_EXISTS syscall.Errno = 5010 + ERROR_OBJECT_IN_LIST syscall.Errno = 5011 + ERROR_GROUP_NOT_AVAILABLE syscall.Errno = 5012 + ERROR_GROUP_NOT_FOUND syscall.Errno = 5013 + ERROR_GROUP_NOT_ONLINE syscall.Errno = 5014 + ERROR_HOST_NODE_NOT_RESOURCE_OWNER syscall.Errno = 5015 + ERROR_HOST_NODE_NOT_GROUP_OWNER syscall.Errno = 5016 + ERROR_RESMON_CREATE_FAILED syscall.Errno = 5017 + ERROR_RESMON_ONLINE_FAILED syscall.Errno = 5018 + ERROR_RESOURCE_ONLINE syscall.Errno = 5019 + ERROR_QUORUM_RESOURCE syscall.Errno = 5020 + ERROR_NOT_QUORUM_CAPABLE syscall.Errno = 5021 + ERROR_CLUSTER_SHUTTING_DOWN syscall.Errno = 5022 + ERROR_INVALID_STATE syscall.Errno = 5023 + ERROR_RESOURCE_PROPERTIES_STORED syscall.Errno = 5024 + ERROR_NOT_QUORUM_CLASS syscall.Errno = 5025 + ERROR_CORE_RESOURCE syscall.Errno = 5026 + ERROR_QUORUM_RESOURCE_ONLINE_FAILED syscall.Errno = 5027 + ERROR_QUORUMLOG_OPEN_FAILED syscall.Errno = 5028 + ERROR_CLUSTERLOG_CORRUPT syscall.Errno = 5029 + ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE syscall.Errno = 5030 + ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE syscall.Errno = 5031 + ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND syscall.Errno = 5032 + ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE syscall.Errno = 5033 + ERROR_QUORUM_OWNER_ALIVE syscall.Errno = 5034 + ERROR_NETWORK_NOT_AVAILABLE syscall.Errno = 5035 + ERROR_NODE_NOT_AVAILABLE syscall.Errno = 5036 + ERROR_ALL_NODES_NOT_AVAILABLE syscall.Errno = 5037 + ERROR_RESOURCE_FAILED syscall.Errno = 5038 + ERROR_CLUSTER_INVALID_NODE syscall.Errno = 5039 + ERROR_CLUSTER_NODE_EXISTS syscall.Errno = 5040 + ERROR_CLUSTER_JOIN_IN_PROGRESS syscall.Errno = 5041 + ERROR_CLUSTER_NODE_NOT_FOUND syscall.Errno = 5042 + ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND syscall.Errno = 5043 + ERROR_CLUSTER_NETWORK_EXISTS syscall.Errno = 5044 + ERROR_CLUSTER_NETWORK_NOT_FOUND syscall.Errno = 5045 + ERROR_CLUSTER_NETINTERFACE_EXISTS syscall.Errno = 5046 + ERROR_CLUSTER_NETINTERFACE_NOT_FOUND syscall.Errno = 5047 + ERROR_CLUSTER_INVALID_REQUEST syscall.Errno = 5048 + ERROR_CLUSTER_INVALID_NETWORK_PROVIDER syscall.Errno = 5049 + ERROR_CLUSTER_NODE_DOWN syscall.Errno = 5050 + ERROR_CLUSTER_NODE_UNREACHABLE syscall.Errno = 5051 + ERROR_CLUSTER_NODE_NOT_MEMBER syscall.Errno = 5052 + ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS syscall.Errno = 5053 + ERROR_CLUSTER_INVALID_NETWORK syscall.Errno = 5054 + ERROR_CLUSTER_NODE_UP syscall.Errno = 5056 + ERROR_CLUSTER_IPADDR_IN_USE syscall.Errno = 5057 + ERROR_CLUSTER_NODE_NOT_PAUSED syscall.Errno = 5058 + ERROR_CLUSTER_NO_SECURITY_CONTEXT syscall.Errno = 5059 + ERROR_CLUSTER_NETWORK_NOT_INTERNAL syscall.Errno = 5060 + ERROR_CLUSTER_NODE_ALREADY_UP syscall.Errno = 5061 + ERROR_CLUSTER_NODE_ALREADY_DOWN syscall.Errno = 5062 + ERROR_CLUSTER_NETWORK_ALREADY_ONLINE syscall.Errno = 5063 + ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE syscall.Errno = 5064 + ERROR_CLUSTER_NODE_ALREADY_MEMBER syscall.Errno = 5065 + ERROR_CLUSTER_LAST_INTERNAL_NETWORK syscall.Errno = 5066 + ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS syscall.Errno = 5067 + ERROR_INVALID_OPERATION_ON_QUORUM syscall.Errno = 5068 + ERROR_DEPENDENCY_NOT_ALLOWED syscall.Errno = 5069 + ERROR_CLUSTER_NODE_PAUSED syscall.Errno = 5070 + ERROR_NODE_CANT_HOST_RESOURCE syscall.Errno = 5071 + ERROR_CLUSTER_NODE_NOT_READY syscall.Errno = 5072 + ERROR_CLUSTER_NODE_SHUTTING_DOWN syscall.Errno = 5073 + ERROR_CLUSTER_JOIN_ABORTED syscall.Errno = 5074 + ERROR_CLUSTER_INCOMPATIBLE_VERSIONS syscall.Errno = 5075 + ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED syscall.Errno = 5076 + ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED syscall.Errno = 5077 + ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND syscall.Errno = 5078 + ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED syscall.Errno = 5079 + ERROR_CLUSTER_RESNAME_NOT_FOUND syscall.Errno = 5080 + ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED syscall.Errno = 5081 + ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST syscall.Errno = 5082 + ERROR_CLUSTER_DATABASE_SEQMISMATCH syscall.Errno = 5083 + ERROR_RESMON_INVALID_STATE syscall.Errno = 5084 + ERROR_CLUSTER_GUM_NOT_LOCKER syscall.Errno = 5085 + ERROR_QUORUM_DISK_NOT_FOUND syscall.Errno = 5086 + ERROR_DATABASE_BACKUP_CORRUPT syscall.Errno = 5087 + ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT syscall.Errno = 5088 + ERROR_RESOURCE_PROPERTY_UNCHANGEABLE syscall.Errno = 5089 + ERROR_NO_ADMIN_ACCESS_POINT syscall.Errno = 5090 + ERROR_CLUSTER_MEMBERSHIP_INVALID_STATE syscall.Errno = 5890 + ERROR_CLUSTER_QUORUMLOG_NOT_FOUND syscall.Errno = 5891 + ERROR_CLUSTER_MEMBERSHIP_HALT syscall.Errno = 5892 + ERROR_CLUSTER_INSTANCE_ID_MISMATCH syscall.Errno = 5893 + ERROR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP syscall.Errno = 5894 + ERROR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH syscall.Errno = 5895 + ERROR_CLUSTER_EVICT_WITHOUT_CLEANUP syscall.Errno = 5896 + ERROR_CLUSTER_PARAMETER_MISMATCH syscall.Errno = 5897 + ERROR_NODE_CANNOT_BE_CLUSTERED syscall.Errno = 5898 + ERROR_CLUSTER_WRONG_OS_VERSION syscall.Errno = 5899 + ERROR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME syscall.Errno = 5900 + ERROR_CLUSCFG_ALREADY_COMMITTED syscall.Errno = 5901 + ERROR_CLUSCFG_ROLLBACK_FAILED syscall.Errno = 5902 + ERROR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT syscall.Errno = 5903 + ERROR_CLUSTER_OLD_VERSION syscall.Errno = 5904 + ERROR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME syscall.Errno = 5905 + ERROR_CLUSTER_NO_NET_ADAPTERS syscall.Errno = 5906 + ERROR_CLUSTER_POISONED syscall.Errno = 5907 + ERROR_CLUSTER_GROUP_MOVING syscall.Errno = 5908 + ERROR_CLUSTER_RESOURCE_TYPE_BUSY syscall.Errno = 5909 + ERROR_RESOURCE_CALL_TIMED_OUT syscall.Errno = 5910 + ERROR_INVALID_CLUSTER_IPV6_ADDRESS syscall.Errno = 5911 + ERROR_CLUSTER_INTERNAL_INVALID_FUNCTION syscall.Errno = 5912 + ERROR_CLUSTER_PARAMETER_OUT_OF_BOUNDS syscall.Errno = 5913 + ERROR_CLUSTER_PARTIAL_SEND syscall.Errno = 5914 + ERROR_CLUSTER_REGISTRY_INVALID_FUNCTION syscall.Errno = 5915 + ERROR_CLUSTER_INVALID_STRING_TERMINATION syscall.Errno = 5916 + ERROR_CLUSTER_INVALID_STRING_FORMAT syscall.Errno = 5917 + ERROR_CLUSTER_DATABASE_TRANSACTION_IN_PROGRESS syscall.Errno = 5918 + ERROR_CLUSTER_DATABASE_TRANSACTION_NOT_IN_PROGRESS syscall.Errno = 5919 + ERROR_CLUSTER_NULL_DATA syscall.Errno = 5920 + ERROR_CLUSTER_PARTIAL_READ syscall.Errno = 5921 + ERROR_CLUSTER_PARTIAL_WRITE syscall.Errno = 5922 + ERROR_CLUSTER_CANT_DESERIALIZE_DATA syscall.Errno = 5923 + ERROR_DEPENDENT_RESOURCE_PROPERTY_CONFLICT syscall.Errno = 5924 + ERROR_CLUSTER_NO_QUORUM syscall.Errno = 5925 + ERROR_CLUSTER_INVALID_IPV6_NETWORK syscall.Errno = 5926 + ERROR_CLUSTER_INVALID_IPV6_TUNNEL_NETWORK syscall.Errno = 5927 + ERROR_QUORUM_NOT_ALLOWED_IN_THIS_GROUP syscall.Errno = 5928 + ERROR_DEPENDENCY_TREE_TOO_COMPLEX syscall.Errno = 5929 + ERROR_EXCEPTION_IN_RESOURCE_CALL syscall.Errno = 5930 + ERROR_CLUSTER_RHS_FAILED_INITIALIZATION syscall.Errno = 5931 + ERROR_CLUSTER_NOT_INSTALLED syscall.Errno = 5932 + ERROR_CLUSTER_RESOURCES_MUST_BE_ONLINE_ON_THE_SAME_NODE syscall.Errno = 5933 + ERROR_CLUSTER_MAX_NODES_IN_CLUSTER syscall.Errno = 5934 + ERROR_CLUSTER_TOO_MANY_NODES syscall.Errno = 5935 + ERROR_CLUSTER_OBJECT_ALREADY_USED syscall.Errno = 5936 + ERROR_NONCORE_GROUPS_FOUND syscall.Errno = 5937 + ERROR_FILE_SHARE_RESOURCE_CONFLICT syscall.Errno = 5938 + ERROR_CLUSTER_EVICT_INVALID_REQUEST syscall.Errno = 5939 + ERROR_CLUSTER_SINGLETON_RESOURCE syscall.Errno = 5940 + ERROR_CLUSTER_GROUP_SINGLETON_RESOURCE syscall.Errno = 5941 + ERROR_CLUSTER_RESOURCE_PROVIDER_FAILED syscall.Errno = 5942 + ERROR_CLUSTER_RESOURCE_CONFIGURATION_ERROR syscall.Errno = 5943 + ERROR_CLUSTER_GROUP_BUSY syscall.Errno = 5944 + ERROR_CLUSTER_NOT_SHARED_VOLUME syscall.Errno = 5945 + ERROR_CLUSTER_INVALID_SECURITY_DESCRIPTOR syscall.Errno = 5946 + ERROR_CLUSTER_SHARED_VOLUMES_IN_USE syscall.Errno = 5947 + ERROR_CLUSTER_USE_SHARED_VOLUMES_API syscall.Errno = 5948 + ERROR_CLUSTER_BACKUP_IN_PROGRESS syscall.Errno = 5949 + ERROR_NON_CSV_PATH syscall.Errno = 5950 + ERROR_CSV_VOLUME_NOT_LOCAL syscall.Errno = 5951 + ERROR_CLUSTER_WATCHDOG_TERMINATING syscall.Errno = 5952 + ERROR_CLUSTER_RESOURCE_VETOED_MOVE_INCOMPATIBLE_NODES syscall.Errno = 5953 + ERROR_CLUSTER_INVALID_NODE_WEIGHT syscall.Errno = 5954 + ERROR_CLUSTER_RESOURCE_VETOED_CALL syscall.Errno = 5955 + ERROR_RESMON_SYSTEM_RESOURCES_LACKING syscall.Errno = 5956 + ERROR_CLUSTER_RESOURCE_VETOED_MOVE_NOT_ENOUGH_RESOURCES_ON_DESTINATION syscall.Errno = 5957 + ERROR_CLUSTER_RESOURCE_VETOED_MOVE_NOT_ENOUGH_RESOURCES_ON_SOURCE syscall.Errno = 5958 + ERROR_CLUSTER_GROUP_QUEUED syscall.Errno = 5959 + ERROR_CLUSTER_RESOURCE_LOCKED_STATUS syscall.Errno = 5960 + ERROR_CLUSTER_SHARED_VOLUME_FAILOVER_NOT_ALLOWED syscall.Errno = 5961 + ERROR_CLUSTER_NODE_DRAIN_IN_PROGRESS syscall.Errno = 5962 + ERROR_CLUSTER_DISK_NOT_CONNECTED syscall.Errno = 5963 + ERROR_DISK_NOT_CSV_CAPABLE syscall.Errno = 5964 + ERROR_RESOURCE_NOT_IN_AVAILABLE_STORAGE syscall.Errno = 5965 + ERROR_CLUSTER_SHARED_VOLUME_REDIRECTED syscall.Errno = 5966 + ERROR_CLUSTER_SHARED_VOLUME_NOT_REDIRECTED syscall.Errno = 5967 + ERROR_CLUSTER_CANNOT_RETURN_PROPERTIES syscall.Errno = 5968 + ERROR_CLUSTER_RESOURCE_CONTAINS_UNSUPPORTED_DIFF_AREA_FOR_SHARED_VOLUMES syscall.Errno = 5969 + ERROR_CLUSTER_RESOURCE_IS_IN_MAINTENANCE_MODE syscall.Errno = 5970 + ERROR_CLUSTER_AFFINITY_CONFLICT syscall.Errno = 5971 + ERROR_CLUSTER_RESOURCE_IS_REPLICA_VIRTUAL_MACHINE syscall.Errno = 5972 + ERROR_CLUSTER_UPGRADE_INCOMPATIBLE_VERSIONS syscall.Errno = 5973 + ERROR_CLUSTER_UPGRADE_FIX_QUORUM_NOT_SUPPORTED syscall.Errno = 5974 + ERROR_CLUSTER_UPGRADE_RESTART_REQUIRED syscall.Errno = 5975 + ERROR_CLUSTER_UPGRADE_IN_PROGRESS syscall.Errno = 5976 + ERROR_CLUSTER_UPGRADE_INCOMPLETE syscall.Errno = 5977 + ERROR_CLUSTER_NODE_IN_GRACE_PERIOD syscall.Errno = 5978 + ERROR_CLUSTER_CSV_IO_PAUSE_TIMEOUT syscall.Errno = 5979 + ERROR_NODE_NOT_ACTIVE_CLUSTER_MEMBER syscall.Errno = 5980 + ERROR_CLUSTER_RESOURCE_NOT_MONITORED syscall.Errno = 5981 + ERROR_CLUSTER_RESOURCE_DOES_NOT_SUPPORT_UNMONITORED syscall.Errno = 5982 + ERROR_CLUSTER_RESOURCE_IS_REPLICATED syscall.Errno = 5983 + ERROR_CLUSTER_NODE_ISOLATED syscall.Errno = 5984 + ERROR_CLUSTER_NODE_QUARANTINED syscall.Errno = 5985 + ERROR_CLUSTER_DATABASE_UPDATE_CONDITION_FAILED syscall.Errno = 5986 + ERROR_CLUSTER_SPACE_DEGRADED syscall.Errno = 5987 + ERROR_CLUSTER_TOKEN_DELEGATION_NOT_SUPPORTED syscall.Errno = 5988 + ERROR_CLUSTER_CSV_INVALID_HANDLE syscall.Errno = 5989 + ERROR_CLUSTER_CSV_SUPPORTED_ONLY_ON_COORDINATOR syscall.Errno = 5990 + ERROR_GROUPSET_NOT_AVAILABLE syscall.Errno = 5991 + ERROR_GROUPSET_NOT_FOUND syscall.Errno = 5992 + ERROR_GROUPSET_CANT_PROVIDE syscall.Errno = 5993 + ERROR_CLUSTER_FAULT_DOMAIN_PARENT_NOT_FOUND syscall.Errno = 5994 + ERROR_CLUSTER_FAULT_DOMAIN_INVALID_HIERARCHY syscall.Errno = 5995 + ERROR_CLUSTER_FAULT_DOMAIN_FAILED_S2D_VALIDATION syscall.Errno = 5996 + ERROR_CLUSTER_FAULT_DOMAIN_S2D_CONNECTIVITY_LOSS syscall.Errno = 5997 + ERROR_CLUSTER_INVALID_INFRASTRUCTURE_FILESERVER_NAME syscall.Errno = 5998 + ERROR_CLUSTERSET_MANAGEMENT_CLUSTER_UNREACHABLE syscall.Errno = 5999 + ERROR_ENCRYPTION_FAILED syscall.Errno = 6000 + ERROR_DECRYPTION_FAILED syscall.Errno = 6001 + ERROR_FILE_ENCRYPTED syscall.Errno = 6002 + ERROR_NO_RECOVERY_POLICY syscall.Errno = 6003 + ERROR_NO_EFS syscall.Errno = 6004 + ERROR_WRONG_EFS syscall.Errno = 6005 + ERROR_NO_USER_KEYS syscall.Errno = 6006 + ERROR_FILE_NOT_ENCRYPTED syscall.Errno = 6007 + ERROR_NOT_EXPORT_FORMAT syscall.Errno = 6008 + ERROR_FILE_READ_ONLY syscall.Errno = 6009 + ERROR_DIR_EFS_DISALLOWED syscall.Errno = 6010 + ERROR_EFS_SERVER_NOT_TRUSTED syscall.Errno = 6011 + ERROR_BAD_RECOVERY_POLICY syscall.Errno = 6012 + ERROR_EFS_ALG_BLOB_TOO_BIG syscall.Errno = 6013 + ERROR_VOLUME_NOT_SUPPORT_EFS syscall.Errno = 6014 + ERROR_EFS_DISABLED syscall.Errno = 6015 + ERROR_EFS_VERSION_NOT_SUPPORT syscall.Errno = 6016 + ERROR_CS_ENCRYPTION_INVALID_SERVER_RESPONSE syscall.Errno = 6017 + ERROR_CS_ENCRYPTION_UNSUPPORTED_SERVER syscall.Errno = 6018 + ERROR_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE syscall.Errno = 6019 + ERROR_CS_ENCRYPTION_NEW_ENCRYPTED_FILE syscall.Errno = 6020 + ERROR_CS_ENCRYPTION_FILE_NOT_CSE syscall.Errno = 6021 + ERROR_ENCRYPTION_POLICY_DENIES_OPERATION syscall.Errno = 6022 + ERROR_NO_BROWSER_SERVERS_FOUND syscall.Errno = 6118 + SCHED_E_SERVICE_NOT_LOCALSYSTEM syscall.Errno = 6200 + ERROR_LOG_SECTOR_INVALID syscall.Errno = 6600 + ERROR_LOG_SECTOR_PARITY_INVALID syscall.Errno = 6601 + ERROR_LOG_SECTOR_REMAPPED syscall.Errno = 6602 + ERROR_LOG_BLOCK_INCOMPLETE syscall.Errno = 6603 + ERROR_LOG_INVALID_RANGE syscall.Errno = 6604 + ERROR_LOG_BLOCKS_EXHAUSTED syscall.Errno = 6605 + ERROR_LOG_READ_CONTEXT_INVALID syscall.Errno = 6606 + ERROR_LOG_RESTART_INVALID syscall.Errno = 6607 + ERROR_LOG_BLOCK_VERSION syscall.Errno = 6608 + ERROR_LOG_BLOCK_INVALID syscall.Errno = 6609 + ERROR_LOG_READ_MODE_INVALID syscall.Errno = 6610 + ERROR_LOG_NO_RESTART syscall.Errno = 6611 + ERROR_LOG_METADATA_CORRUPT syscall.Errno = 6612 + ERROR_LOG_METADATA_INVALID syscall.Errno = 6613 + ERROR_LOG_METADATA_INCONSISTENT syscall.Errno = 6614 + ERROR_LOG_RESERVATION_INVALID syscall.Errno = 6615 + ERROR_LOG_CANT_DELETE syscall.Errno = 6616 + ERROR_LOG_CONTAINER_LIMIT_EXCEEDED syscall.Errno = 6617 + ERROR_LOG_START_OF_LOG syscall.Errno = 6618 + ERROR_LOG_POLICY_ALREADY_INSTALLED syscall.Errno = 6619 + ERROR_LOG_POLICY_NOT_INSTALLED syscall.Errno = 6620 + ERROR_LOG_POLICY_INVALID syscall.Errno = 6621 + ERROR_LOG_POLICY_CONFLICT syscall.Errno = 6622 + ERROR_LOG_PINNED_ARCHIVE_TAIL syscall.Errno = 6623 + ERROR_LOG_RECORD_NONEXISTENT syscall.Errno = 6624 + ERROR_LOG_RECORDS_RESERVED_INVALID syscall.Errno = 6625 + ERROR_LOG_SPACE_RESERVED_INVALID syscall.Errno = 6626 + ERROR_LOG_TAIL_INVALID syscall.Errno = 6627 + ERROR_LOG_FULL syscall.Errno = 6628 + ERROR_COULD_NOT_RESIZE_LOG syscall.Errno = 6629 + ERROR_LOG_MULTIPLEXED syscall.Errno = 6630 + ERROR_LOG_DEDICATED syscall.Errno = 6631 + ERROR_LOG_ARCHIVE_NOT_IN_PROGRESS syscall.Errno = 6632 + ERROR_LOG_ARCHIVE_IN_PROGRESS syscall.Errno = 6633 + ERROR_LOG_EPHEMERAL syscall.Errno = 6634 + ERROR_LOG_NOT_ENOUGH_CONTAINERS syscall.Errno = 6635 + ERROR_LOG_CLIENT_ALREADY_REGISTERED syscall.Errno = 6636 + ERROR_LOG_CLIENT_NOT_REGISTERED syscall.Errno = 6637 + ERROR_LOG_FULL_HANDLER_IN_PROGRESS syscall.Errno = 6638 + ERROR_LOG_CONTAINER_READ_FAILED syscall.Errno = 6639 + ERROR_LOG_CONTAINER_WRITE_FAILED syscall.Errno = 6640 + ERROR_LOG_CONTAINER_OPEN_FAILED syscall.Errno = 6641 + ERROR_LOG_CONTAINER_STATE_INVALID syscall.Errno = 6642 + ERROR_LOG_STATE_INVALID syscall.Errno = 6643 + ERROR_LOG_PINNED syscall.Errno = 6644 + ERROR_LOG_METADATA_FLUSH_FAILED syscall.Errno = 6645 + ERROR_LOG_INCONSISTENT_SECURITY syscall.Errno = 6646 + ERROR_LOG_APPENDED_FLUSH_FAILED syscall.Errno = 6647 + ERROR_LOG_PINNED_RESERVATION syscall.Errno = 6648 + ERROR_INVALID_TRANSACTION syscall.Errno = 6700 + ERROR_TRANSACTION_NOT_ACTIVE syscall.Errno = 6701 + ERROR_TRANSACTION_REQUEST_NOT_VALID syscall.Errno = 6702 + ERROR_TRANSACTION_NOT_REQUESTED syscall.Errno = 6703 + ERROR_TRANSACTION_ALREADY_ABORTED syscall.Errno = 6704 + ERROR_TRANSACTION_ALREADY_COMMITTED syscall.Errno = 6705 + ERROR_TM_INITIALIZATION_FAILED syscall.Errno = 6706 + ERROR_RESOURCEMANAGER_READ_ONLY syscall.Errno = 6707 + ERROR_TRANSACTION_NOT_JOINED syscall.Errno = 6708 + ERROR_TRANSACTION_SUPERIOR_EXISTS syscall.Errno = 6709 + ERROR_CRM_PROTOCOL_ALREADY_EXISTS syscall.Errno = 6710 + ERROR_TRANSACTION_PROPAGATION_FAILED syscall.Errno = 6711 + ERROR_CRM_PROTOCOL_NOT_FOUND syscall.Errno = 6712 + ERROR_TRANSACTION_INVALID_MARSHALL_BUFFER syscall.Errno = 6713 + ERROR_CURRENT_TRANSACTION_NOT_VALID syscall.Errno = 6714 + ERROR_TRANSACTION_NOT_FOUND syscall.Errno = 6715 + ERROR_RESOURCEMANAGER_NOT_FOUND syscall.Errno = 6716 + ERROR_ENLISTMENT_NOT_FOUND syscall.Errno = 6717 + ERROR_TRANSACTIONMANAGER_NOT_FOUND syscall.Errno = 6718 + ERROR_TRANSACTIONMANAGER_NOT_ONLINE syscall.Errno = 6719 + ERROR_TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION syscall.Errno = 6720 + ERROR_TRANSACTION_NOT_ROOT syscall.Errno = 6721 + ERROR_TRANSACTION_OBJECT_EXPIRED syscall.Errno = 6722 + ERROR_TRANSACTION_RESPONSE_NOT_ENLISTED syscall.Errno = 6723 + ERROR_TRANSACTION_RECORD_TOO_LONG syscall.Errno = 6724 + ERROR_IMPLICIT_TRANSACTION_NOT_SUPPORTED syscall.Errno = 6725 + ERROR_TRANSACTION_INTEGRITY_VIOLATED syscall.Errno = 6726 + ERROR_TRANSACTIONMANAGER_IDENTITY_MISMATCH syscall.Errno = 6727 + ERROR_RM_CANNOT_BE_FROZEN_FOR_SNAPSHOT syscall.Errno = 6728 + ERROR_TRANSACTION_MUST_WRITETHROUGH syscall.Errno = 6729 + ERROR_TRANSACTION_NO_SUPERIOR syscall.Errno = 6730 + ERROR_HEURISTIC_DAMAGE_POSSIBLE syscall.Errno = 6731 + ERROR_TRANSACTIONAL_CONFLICT syscall.Errno = 6800 + ERROR_RM_NOT_ACTIVE syscall.Errno = 6801 + ERROR_RM_METADATA_CORRUPT syscall.Errno = 6802 + ERROR_DIRECTORY_NOT_RM syscall.Errno = 6803 + ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE syscall.Errno = 6805 + ERROR_LOG_RESIZE_INVALID_SIZE syscall.Errno = 6806 + ERROR_OBJECT_NO_LONGER_EXISTS syscall.Errno = 6807 + ERROR_STREAM_MINIVERSION_NOT_FOUND syscall.Errno = 6808 + ERROR_STREAM_MINIVERSION_NOT_VALID syscall.Errno = 6809 + ERROR_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION syscall.Errno = 6810 + ERROR_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT syscall.Errno = 6811 + ERROR_CANT_CREATE_MORE_STREAM_MINIVERSIONS syscall.Errno = 6812 + ERROR_REMOTE_FILE_VERSION_MISMATCH syscall.Errno = 6814 + ERROR_HANDLE_NO_LONGER_VALID syscall.Errno = 6815 + ERROR_NO_TXF_METADATA syscall.Errno = 6816 + ERROR_LOG_CORRUPTION_DETECTED syscall.Errno = 6817 + ERROR_CANT_RECOVER_WITH_HANDLE_OPEN syscall.Errno = 6818 + ERROR_RM_DISCONNECTED syscall.Errno = 6819 + ERROR_ENLISTMENT_NOT_SUPERIOR syscall.Errno = 6820 + ERROR_RECOVERY_NOT_NEEDED syscall.Errno = 6821 + ERROR_RM_ALREADY_STARTED syscall.Errno = 6822 + ERROR_FILE_IDENTITY_NOT_PERSISTENT syscall.Errno = 6823 + ERROR_CANT_BREAK_TRANSACTIONAL_DEPENDENCY syscall.Errno = 6824 + ERROR_CANT_CROSS_RM_BOUNDARY syscall.Errno = 6825 + ERROR_TXF_DIR_NOT_EMPTY syscall.Errno = 6826 + ERROR_INDOUBT_TRANSACTIONS_EXIST syscall.Errno = 6827 + ERROR_TM_VOLATILE syscall.Errno = 6828 + ERROR_ROLLBACK_TIMER_EXPIRED syscall.Errno = 6829 + ERROR_TXF_ATTRIBUTE_CORRUPT syscall.Errno = 6830 + ERROR_EFS_NOT_ALLOWED_IN_TRANSACTION syscall.Errno = 6831 + ERROR_TRANSACTIONAL_OPEN_NOT_ALLOWED syscall.Errno = 6832 + ERROR_LOG_GROWTH_FAILED syscall.Errno = 6833 + ERROR_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE syscall.Errno = 6834 + ERROR_TXF_METADATA_ALREADY_PRESENT syscall.Errno = 6835 + ERROR_TRANSACTION_SCOPE_CALLBACKS_NOT_SET syscall.Errno = 6836 + ERROR_TRANSACTION_REQUIRED_PROMOTION syscall.Errno = 6837 + ERROR_CANNOT_EXECUTE_FILE_IN_TRANSACTION syscall.Errno = 6838 + ERROR_TRANSACTIONS_NOT_FROZEN syscall.Errno = 6839 + ERROR_TRANSACTION_FREEZE_IN_PROGRESS syscall.Errno = 6840 + ERROR_NOT_SNAPSHOT_VOLUME syscall.Errno = 6841 + ERROR_NO_SAVEPOINT_WITH_OPEN_FILES syscall.Errno = 6842 + ERROR_DATA_LOST_REPAIR syscall.Errno = 6843 + ERROR_SPARSE_NOT_ALLOWED_IN_TRANSACTION syscall.Errno = 6844 + ERROR_TM_IDENTITY_MISMATCH syscall.Errno = 6845 + ERROR_FLOATED_SECTION syscall.Errno = 6846 + ERROR_CANNOT_ACCEPT_TRANSACTED_WORK syscall.Errno = 6847 + ERROR_CANNOT_ABORT_TRANSACTIONS syscall.Errno = 6848 + ERROR_BAD_CLUSTERS syscall.Errno = 6849 + ERROR_COMPRESSION_NOT_ALLOWED_IN_TRANSACTION syscall.Errno = 6850 + ERROR_VOLUME_DIRTY syscall.Errno = 6851 + ERROR_NO_LINK_TRACKING_IN_TRANSACTION syscall.Errno = 6852 + ERROR_OPERATION_NOT_SUPPORTED_IN_TRANSACTION syscall.Errno = 6853 + ERROR_EXPIRED_HANDLE syscall.Errno = 6854 + ERROR_TRANSACTION_NOT_ENLISTED syscall.Errno = 6855 + ERROR_CTX_WINSTATION_NAME_INVALID syscall.Errno = 7001 + ERROR_CTX_INVALID_PD syscall.Errno = 7002 + ERROR_CTX_PD_NOT_FOUND syscall.Errno = 7003 + ERROR_CTX_WD_NOT_FOUND syscall.Errno = 7004 + ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY syscall.Errno = 7005 + ERROR_CTX_SERVICE_NAME_COLLISION syscall.Errno = 7006 + ERROR_CTX_CLOSE_PENDING syscall.Errno = 7007 + ERROR_CTX_NO_OUTBUF syscall.Errno = 7008 + ERROR_CTX_MODEM_INF_NOT_FOUND syscall.Errno = 7009 + ERROR_CTX_INVALID_MODEMNAME syscall.Errno = 7010 + ERROR_CTX_MODEM_RESPONSE_ERROR syscall.Errno = 7011 + ERROR_CTX_MODEM_RESPONSE_TIMEOUT syscall.Errno = 7012 + ERROR_CTX_MODEM_RESPONSE_NO_CARRIER syscall.Errno = 7013 + ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE syscall.Errno = 7014 + ERROR_CTX_MODEM_RESPONSE_BUSY syscall.Errno = 7015 + ERROR_CTX_MODEM_RESPONSE_VOICE syscall.Errno = 7016 + ERROR_CTX_TD_ERROR syscall.Errno = 7017 + ERROR_CTX_WINSTATION_NOT_FOUND syscall.Errno = 7022 + ERROR_CTX_WINSTATION_ALREADY_EXISTS syscall.Errno = 7023 + ERROR_CTX_WINSTATION_BUSY syscall.Errno = 7024 + ERROR_CTX_BAD_VIDEO_MODE syscall.Errno = 7025 + ERROR_CTX_GRAPHICS_INVALID syscall.Errno = 7035 + ERROR_CTX_LOGON_DISABLED syscall.Errno = 7037 + ERROR_CTX_NOT_CONSOLE syscall.Errno = 7038 + ERROR_CTX_CLIENT_QUERY_TIMEOUT syscall.Errno = 7040 + ERROR_CTX_CONSOLE_DISCONNECT syscall.Errno = 7041 + ERROR_CTX_CONSOLE_CONNECT syscall.Errno = 7042 + ERROR_CTX_SHADOW_DENIED syscall.Errno = 7044 + ERROR_CTX_WINSTATION_ACCESS_DENIED syscall.Errno = 7045 + ERROR_CTX_INVALID_WD syscall.Errno = 7049 + ERROR_CTX_SHADOW_INVALID syscall.Errno = 7050 + ERROR_CTX_SHADOW_DISABLED syscall.Errno = 7051 + ERROR_CTX_CLIENT_LICENSE_IN_USE syscall.Errno = 7052 + ERROR_CTX_CLIENT_LICENSE_NOT_SET syscall.Errno = 7053 + ERROR_CTX_LICENSE_NOT_AVAILABLE syscall.Errno = 7054 + ERROR_CTX_LICENSE_CLIENT_INVALID syscall.Errno = 7055 + ERROR_CTX_LICENSE_EXPIRED syscall.Errno = 7056 + ERROR_CTX_SHADOW_NOT_RUNNING syscall.Errno = 7057 + ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE syscall.Errno = 7058 + ERROR_ACTIVATION_COUNT_EXCEEDED syscall.Errno = 7059 + ERROR_CTX_WINSTATIONS_DISABLED syscall.Errno = 7060 + ERROR_CTX_ENCRYPTION_LEVEL_REQUIRED syscall.Errno = 7061 + ERROR_CTX_SESSION_IN_USE syscall.Errno = 7062 + ERROR_CTX_NO_FORCE_LOGOFF syscall.Errno = 7063 + ERROR_CTX_ACCOUNT_RESTRICTION syscall.Errno = 7064 + ERROR_RDP_PROTOCOL_ERROR syscall.Errno = 7065 + ERROR_CTX_CDM_CONNECT syscall.Errno = 7066 + ERROR_CTX_CDM_DISCONNECT syscall.Errno = 7067 + ERROR_CTX_SECURITY_LAYER_ERROR syscall.Errno = 7068 + ERROR_TS_INCOMPATIBLE_SESSIONS syscall.Errno = 7069 + ERROR_TS_VIDEO_SUBSYSTEM_ERROR syscall.Errno = 7070 + FRS_ERR_INVALID_API_SEQUENCE syscall.Errno = 8001 + FRS_ERR_STARTING_SERVICE syscall.Errno = 8002 + FRS_ERR_STOPPING_SERVICE syscall.Errno = 8003 + FRS_ERR_INTERNAL_API syscall.Errno = 8004 + FRS_ERR_INTERNAL syscall.Errno = 8005 + FRS_ERR_SERVICE_COMM syscall.Errno = 8006 + FRS_ERR_INSUFFICIENT_PRIV syscall.Errno = 8007 + FRS_ERR_AUTHENTICATION syscall.Errno = 8008 + FRS_ERR_PARENT_INSUFFICIENT_PRIV syscall.Errno = 8009 + FRS_ERR_PARENT_AUTHENTICATION syscall.Errno = 8010 + FRS_ERR_CHILD_TO_PARENT_COMM syscall.Errno = 8011 + FRS_ERR_PARENT_TO_CHILD_COMM syscall.Errno = 8012 + FRS_ERR_SYSVOL_POPULATE syscall.Errno = 8013 + FRS_ERR_SYSVOL_POPULATE_TIMEOUT syscall.Errno = 8014 + FRS_ERR_SYSVOL_IS_BUSY syscall.Errno = 8015 + FRS_ERR_SYSVOL_DEMOTE syscall.Errno = 8016 + FRS_ERR_INVALID_SERVICE_PARAMETER syscall.Errno = 8017 + DS_S_SUCCESS = ERROR_SUCCESS + ERROR_DS_NOT_INSTALLED syscall.Errno = 8200 + ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY syscall.Errno = 8201 + ERROR_DS_NO_ATTRIBUTE_OR_VALUE syscall.Errno = 8202 + ERROR_DS_INVALID_ATTRIBUTE_SYNTAX syscall.Errno = 8203 + ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED syscall.Errno = 8204 + ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS syscall.Errno = 8205 + ERROR_DS_BUSY syscall.Errno = 8206 + ERROR_DS_UNAVAILABLE syscall.Errno = 8207 + ERROR_DS_NO_RIDS_ALLOCATED syscall.Errno = 8208 + ERROR_DS_NO_MORE_RIDS syscall.Errno = 8209 + ERROR_DS_INCORRECT_ROLE_OWNER syscall.Errno = 8210 + ERROR_DS_RIDMGR_INIT_ERROR syscall.Errno = 8211 + ERROR_DS_OBJ_CLASS_VIOLATION syscall.Errno = 8212 + ERROR_DS_CANT_ON_NON_LEAF syscall.Errno = 8213 + ERROR_DS_CANT_ON_RDN syscall.Errno = 8214 + ERROR_DS_CANT_MOD_OBJ_CLASS syscall.Errno = 8215 + ERROR_DS_CROSS_DOM_MOVE_ERROR syscall.Errno = 8216 + ERROR_DS_GC_NOT_AVAILABLE syscall.Errno = 8217 + ERROR_SHARED_POLICY syscall.Errno = 8218 + ERROR_POLICY_OBJECT_NOT_FOUND syscall.Errno = 8219 + ERROR_POLICY_ONLY_IN_DS syscall.Errno = 8220 + ERROR_PROMOTION_ACTIVE syscall.Errno = 8221 + ERROR_NO_PROMOTION_ACTIVE syscall.Errno = 8222 + ERROR_DS_OPERATIONS_ERROR syscall.Errno = 8224 + ERROR_DS_PROTOCOL_ERROR syscall.Errno = 8225 + ERROR_DS_TIMELIMIT_EXCEEDED syscall.Errno = 8226 + ERROR_DS_SIZELIMIT_EXCEEDED syscall.Errno = 8227 + ERROR_DS_ADMIN_LIMIT_EXCEEDED syscall.Errno = 8228 + ERROR_DS_COMPARE_FALSE syscall.Errno = 8229 + ERROR_DS_COMPARE_TRUE syscall.Errno = 8230 + ERROR_DS_AUTH_METHOD_NOT_SUPPORTED syscall.Errno = 8231 + ERROR_DS_STRONG_AUTH_REQUIRED syscall.Errno = 8232 + ERROR_DS_INAPPROPRIATE_AUTH syscall.Errno = 8233 + ERROR_DS_AUTH_UNKNOWN syscall.Errno = 8234 + ERROR_DS_REFERRAL syscall.Errno = 8235 + ERROR_DS_UNAVAILABLE_CRIT_EXTENSION syscall.Errno = 8236 + ERROR_DS_CONFIDENTIALITY_REQUIRED syscall.Errno = 8237 + ERROR_DS_INAPPROPRIATE_MATCHING syscall.Errno = 8238 + ERROR_DS_CONSTRAINT_VIOLATION syscall.Errno = 8239 + ERROR_DS_NO_SUCH_OBJECT syscall.Errno = 8240 + ERROR_DS_ALIAS_PROBLEM syscall.Errno = 8241 + ERROR_DS_INVALID_DN_SYNTAX syscall.Errno = 8242 + ERROR_DS_IS_LEAF syscall.Errno = 8243 + ERROR_DS_ALIAS_DEREF_PROBLEM syscall.Errno = 8244 + ERROR_DS_UNWILLING_TO_PERFORM syscall.Errno = 8245 + ERROR_DS_LOOP_DETECT syscall.Errno = 8246 + ERROR_DS_NAMING_VIOLATION syscall.Errno = 8247 + ERROR_DS_OBJECT_RESULTS_TOO_LARGE syscall.Errno = 8248 + ERROR_DS_AFFECTS_MULTIPLE_DSAS syscall.Errno = 8249 + ERROR_DS_SERVER_DOWN syscall.Errno = 8250 + ERROR_DS_LOCAL_ERROR syscall.Errno = 8251 + ERROR_DS_ENCODING_ERROR syscall.Errno = 8252 + ERROR_DS_DECODING_ERROR syscall.Errno = 8253 + ERROR_DS_FILTER_UNKNOWN syscall.Errno = 8254 + ERROR_DS_PARAM_ERROR syscall.Errno = 8255 + ERROR_DS_NOT_SUPPORTED syscall.Errno = 8256 + ERROR_DS_NO_RESULTS_RETURNED syscall.Errno = 8257 + ERROR_DS_CONTROL_NOT_FOUND syscall.Errno = 8258 + ERROR_DS_CLIENT_LOOP syscall.Errno = 8259 + ERROR_DS_REFERRAL_LIMIT_EXCEEDED syscall.Errno = 8260 + ERROR_DS_SORT_CONTROL_MISSING syscall.Errno = 8261 + ERROR_DS_OFFSET_RANGE_ERROR syscall.Errno = 8262 + ERROR_DS_RIDMGR_DISABLED syscall.Errno = 8263 + ERROR_DS_ROOT_MUST_BE_NC syscall.Errno = 8301 + ERROR_DS_ADD_REPLICA_INHIBITED syscall.Errno = 8302 + ERROR_DS_ATT_NOT_DEF_IN_SCHEMA syscall.Errno = 8303 + ERROR_DS_MAX_OBJ_SIZE_EXCEEDED syscall.Errno = 8304 + ERROR_DS_OBJ_STRING_NAME_EXISTS syscall.Errno = 8305 + ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA syscall.Errno = 8306 + ERROR_DS_RDN_DOESNT_MATCH_SCHEMA syscall.Errno = 8307 + ERROR_DS_NO_REQUESTED_ATTS_FOUND syscall.Errno = 8308 + ERROR_DS_USER_BUFFER_TO_SMALL syscall.Errno = 8309 + ERROR_DS_ATT_IS_NOT_ON_OBJ syscall.Errno = 8310 + ERROR_DS_ILLEGAL_MOD_OPERATION syscall.Errno = 8311 + ERROR_DS_OBJ_TOO_LARGE syscall.Errno = 8312 + ERROR_DS_BAD_INSTANCE_TYPE syscall.Errno = 8313 + ERROR_DS_MASTERDSA_REQUIRED syscall.Errno = 8314 + ERROR_DS_OBJECT_CLASS_REQUIRED syscall.Errno = 8315 + ERROR_DS_MISSING_REQUIRED_ATT syscall.Errno = 8316 + ERROR_DS_ATT_NOT_DEF_FOR_CLASS syscall.Errno = 8317 + ERROR_DS_ATT_ALREADY_EXISTS syscall.Errno = 8318 + ERROR_DS_CANT_ADD_ATT_VALUES syscall.Errno = 8320 + ERROR_DS_SINGLE_VALUE_CONSTRAINT syscall.Errno = 8321 + ERROR_DS_RANGE_CONSTRAINT syscall.Errno = 8322 + ERROR_DS_ATT_VAL_ALREADY_EXISTS syscall.Errno = 8323 + ERROR_DS_CANT_REM_MISSING_ATT syscall.Errno = 8324 + ERROR_DS_CANT_REM_MISSING_ATT_VAL syscall.Errno = 8325 + ERROR_DS_ROOT_CANT_BE_SUBREF syscall.Errno = 8326 + ERROR_DS_NO_CHAINING syscall.Errno = 8327 + ERROR_DS_NO_CHAINED_EVAL syscall.Errno = 8328 + ERROR_DS_NO_PARENT_OBJECT syscall.Errno = 8329 + ERROR_DS_PARENT_IS_AN_ALIAS syscall.Errno = 8330 + ERROR_DS_CANT_MIX_MASTER_AND_REPS syscall.Errno = 8331 + ERROR_DS_CHILDREN_EXIST syscall.Errno = 8332 + ERROR_DS_OBJ_NOT_FOUND syscall.Errno = 8333 + ERROR_DS_ALIASED_OBJ_MISSING syscall.Errno = 8334 + ERROR_DS_BAD_NAME_SYNTAX syscall.Errno = 8335 + ERROR_DS_ALIAS_POINTS_TO_ALIAS syscall.Errno = 8336 + ERROR_DS_CANT_DEREF_ALIAS syscall.Errno = 8337 + ERROR_DS_OUT_OF_SCOPE syscall.Errno = 8338 + ERROR_DS_OBJECT_BEING_REMOVED syscall.Errno = 8339 + ERROR_DS_CANT_DELETE_DSA_OBJ syscall.Errno = 8340 + ERROR_DS_GENERIC_ERROR syscall.Errno = 8341 + ERROR_DS_DSA_MUST_BE_INT_MASTER syscall.Errno = 8342 + ERROR_DS_CLASS_NOT_DSA syscall.Errno = 8343 + ERROR_DS_INSUFF_ACCESS_RIGHTS syscall.Errno = 8344 + ERROR_DS_ILLEGAL_SUPERIOR syscall.Errno = 8345 + ERROR_DS_ATTRIBUTE_OWNED_BY_SAM syscall.Errno = 8346 + ERROR_DS_NAME_TOO_MANY_PARTS syscall.Errno = 8347 + ERROR_DS_NAME_TOO_LONG syscall.Errno = 8348 + ERROR_DS_NAME_VALUE_TOO_LONG syscall.Errno = 8349 + ERROR_DS_NAME_UNPARSEABLE syscall.Errno = 8350 + ERROR_DS_NAME_TYPE_UNKNOWN syscall.Errno = 8351 + ERROR_DS_NOT_AN_OBJECT syscall.Errno = 8352 + ERROR_DS_SEC_DESC_TOO_SHORT syscall.Errno = 8353 + ERROR_DS_SEC_DESC_INVALID syscall.Errno = 8354 + ERROR_DS_NO_DELETED_NAME syscall.Errno = 8355 + ERROR_DS_SUBREF_MUST_HAVE_PARENT syscall.Errno = 8356 + ERROR_DS_NCNAME_MUST_BE_NC syscall.Errno = 8357 + ERROR_DS_CANT_ADD_SYSTEM_ONLY syscall.Errno = 8358 + ERROR_DS_CLASS_MUST_BE_CONCRETE syscall.Errno = 8359 + ERROR_DS_INVALID_DMD syscall.Errno = 8360 + ERROR_DS_OBJ_GUID_EXISTS syscall.Errno = 8361 + ERROR_DS_NOT_ON_BACKLINK syscall.Errno = 8362 + ERROR_DS_NO_CROSSREF_FOR_NC syscall.Errno = 8363 + ERROR_DS_SHUTTING_DOWN syscall.Errno = 8364 + ERROR_DS_UNKNOWN_OPERATION syscall.Errno = 8365 + ERROR_DS_INVALID_ROLE_OWNER syscall.Errno = 8366 + ERROR_DS_COULDNT_CONTACT_FSMO syscall.Errno = 8367 + ERROR_DS_CROSS_NC_DN_RENAME syscall.Errno = 8368 + ERROR_DS_CANT_MOD_SYSTEM_ONLY syscall.Errno = 8369 + ERROR_DS_REPLICATOR_ONLY syscall.Errno = 8370 + ERROR_DS_OBJ_CLASS_NOT_DEFINED syscall.Errno = 8371 + ERROR_DS_OBJ_CLASS_NOT_SUBCLASS syscall.Errno = 8372 + ERROR_DS_NAME_REFERENCE_INVALID syscall.Errno = 8373 + ERROR_DS_CROSS_REF_EXISTS syscall.Errno = 8374 + ERROR_DS_CANT_DEL_MASTER_CROSSREF syscall.Errno = 8375 + ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD syscall.Errno = 8376 + ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX syscall.Errno = 8377 + ERROR_DS_DUP_RDN syscall.Errno = 8378 + ERROR_DS_DUP_OID syscall.Errno = 8379 + ERROR_DS_DUP_MAPI_ID syscall.Errno = 8380 + ERROR_DS_DUP_SCHEMA_ID_GUID syscall.Errno = 8381 + ERROR_DS_DUP_LDAP_DISPLAY_NAME syscall.Errno = 8382 + ERROR_DS_SEMANTIC_ATT_TEST syscall.Errno = 8383 + ERROR_DS_SYNTAX_MISMATCH syscall.Errno = 8384 + ERROR_DS_EXISTS_IN_MUST_HAVE syscall.Errno = 8385 + ERROR_DS_EXISTS_IN_MAY_HAVE syscall.Errno = 8386 + ERROR_DS_NONEXISTENT_MAY_HAVE syscall.Errno = 8387 + ERROR_DS_NONEXISTENT_MUST_HAVE syscall.Errno = 8388 + ERROR_DS_AUX_CLS_TEST_FAIL syscall.Errno = 8389 + ERROR_DS_NONEXISTENT_POSS_SUP syscall.Errno = 8390 + ERROR_DS_SUB_CLS_TEST_FAIL syscall.Errno = 8391 + ERROR_DS_BAD_RDN_ATT_ID_SYNTAX syscall.Errno = 8392 + ERROR_DS_EXISTS_IN_AUX_CLS syscall.Errno = 8393 + ERROR_DS_EXISTS_IN_SUB_CLS syscall.Errno = 8394 + ERROR_DS_EXISTS_IN_POSS_SUP syscall.Errno = 8395 + ERROR_DS_RECALCSCHEMA_FAILED syscall.Errno = 8396 + ERROR_DS_TREE_DELETE_NOT_FINISHED syscall.Errno = 8397 + ERROR_DS_CANT_DELETE syscall.Errno = 8398 + ERROR_DS_ATT_SCHEMA_REQ_ID syscall.Errno = 8399 + ERROR_DS_BAD_ATT_SCHEMA_SYNTAX syscall.Errno = 8400 + ERROR_DS_CANT_CACHE_ATT syscall.Errno = 8401 + ERROR_DS_CANT_CACHE_CLASS syscall.Errno = 8402 + ERROR_DS_CANT_REMOVE_ATT_CACHE syscall.Errno = 8403 + ERROR_DS_CANT_REMOVE_CLASS_CACHE syscall.Errno = 8404 + ERROR_DS_CANT_RETRIEVE_DN syscall.Errno = 8405 + ERROR_DS_MISSING_SUPREF syscall.Errno = 8406 + ERROR_DS_CANT_RETRIEVE_INSTANCE syscall.Errno = 8407 + ERROR_DS_CODE_INCONSISTENCY syscall.Errno = 8408 + ERROR_DS_DATABASE_ERROR syscall.Errno = 8409 + ERROR_DS_GOVERNSID_MISSING syscall.Errno = 8410 + ERROR_DS_MISSING_EXPECTED_ATT syscall.Errno = 8411 + ERROR_DS_NCNAME_MISSING_CR_REF syscall.Errno = 8412 + ERROR_DS_SECURITY_CHECKING_ERROR syscall.Errno = 8413 + ERROR_DS_SCHEMA_NOT_LOADED syscall.Errno = 8414 + ERROR_DS_SCHEMA_ALLOC_FAILED syscall.Errno = 8415 + ERROR_DS_ATT_SCHEMA_REQ_SYNTAX syscall.Errno = 8416 + ERROR_DS_GCVERIFY_ERROR syscall.Errno = 8417 + ERROR_DS_DRA_SCHEMA_MISMATCH syscall.Errno = 8418 + ERROR_DS_CANT_FIND_DSA_OBJ syscall.Errno = 8419 + ERROR_DS_CANT_FIND_EXPECTED_NC syscall.Errno = 8420 + ERROR_DS_CANT_FIND_NC_IN_CACHE syscall.Errno = 8421 + ERROR_DS_CANT_RETRIEVE_CHILD syscall.Errno = 8422 + ERROR_DS_SECURITY_ILLEGAL_MODIFY syscall.Errno = 8423 + ERROR_DS_CANT_REPLACE_HIDDEN_REC syscall.Errno = 8424 + ERROR_DS_BAD_HIERARCHY_FILE syscall.Errno = 8425 + ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED syscall.Errno = 8426 + ERROR_DS_CONFIG_PARAM_MISSING syscall.Errno = 8427 + ERROR_DS_COUNTING_AB_INDICES_FAILED syscall.Errno = 8428 + ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED syscall.Errno = 8429 + ERROR_DS_INTERNAL_FAILURE syscall.Errno = 8430 + ERROR_DS_UNKNOWN_ERROR syscall.Errno = 8431 + ERROR_DS_ROOT_REQUIRES_CLASS_TOP syscall.Errno = 8432 + ERROR_DS_REFUSING_FSMO_ROLES syscall.Errno = 8433 + ERROR_DS_MISSING_FSMO_SETTINGS syscall.Errno = 8434 + ERROR_DS_UNABLE_TO_SURRENDER_ROLES syscall.Errno = 8435 + ERROR_DS_DRA_GENERIC syscall.Errno = 8436 + ERROR_DS_DRA_INVALID_PARAMETER syscall.Errno = 8437 + ERROR_DS_DRA_BUSY syscall.Errno = 8438 + ERROR_DS_DRA_BAD_DN syscall.Errno = 8439 + ERROR_DS_DRA_BAD_NC syscall.Errno = 8440 + ERROR_DS_DRA_DN_EXISTS syscall.Errno = 8441 + ERROR_DS_DRA_INTERNAL_ERROR syscall.Errno = 8442 + ERROR_DS_DRA_INCONSISTENT_DIT syscall.Errno = 8443 + ERROR_DS_DRA_CONNECTION_FAILED syscall.Errno = 8444 + ERROR_DS_DRA_BAD_INSTANCE_TYPE syscall.Errno = 8445 + ERROR_DS_DRA_OUT_OF_MEM syscall.Errno = 8446 + ERROR_DS_DRA_MAIL_PROBLEM syscall.Errno = 8447 + ERROR_DS_DRA_REF_ALREADY_EXISTS syscall.Errno = 8448 + ERROR_DS_DRA_REF_NOT_FOUND syscall.Errno = 8449 + ERROR_DS_DRA_OBJ_IS_REP_SOURCE syscall.Errno = 8450 + ERROR_DS_DRA_DB_ERROR syscall.Errno = 8451 + ERROR_DS_DRA_NO_REPLICA syscall.Errno = 8452 + ERROR_DS_DRA_ACCESS_DENIED syscall.Errno = 8453 + ERROR_DS_DRA_NOT_SUPPORTED syscall.Errno = 8454 + ERROR_DS_DRA_RPC_CANCELLED syscall.Errno = 8455 + ERROR_DS_DRA_SOURCE_DISABLED syscall.Errno = 8456 + ERROR_DS_DRA_SINK_DISABLED syscall.Errno = 8457 + ERROR_DS_DRA_NAME_COLLISION syscall.Errno = 8458 + ERROR_DS_DRA_SOURCE_REINSTALLED syscall.Errno = 8459 + ERROR_DS_DRA_MISSING_PARENT syscall.Errno = 8460 + ERROR_DS_DRA_PREEMPTED syscall.Errno = 8461 + ERROR_DS_DRA_ABANDON_SYNC syscall.Errno = 8462 + ERROR_DS_DRA_SHUTDOWN syscall.Errno = 8463 + ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET syscall.Errno = 8464 + ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA syscall.Errno = 8465 + ERROR_DS_DRA_EXTN_CONNECTION_FAILED syscall.Errno = 8466 + ERROR_DS_INSTALL_SCHEMA_MISMATCH syscall.Errno = 8467 + ERROR_DS_DUP_LINK_ID syscall.Errno = 8468 + ERROR_DS_NAME_ERROR_RESOLVING syscall.Errno = 8469 + ERROR_DS_NAME_ERROR_NOT_FOUND syscall.Errno = 8470 + ERROR_DS_NAME_ERROR_NOT_UNIQUE syscall.Errno = 8471 + ERROR_DS_NAME_ERROR_NO_MAPPING syscall.Errno = 8472 + ERROR_DS_NAME_ERROR_DOMAIN_ONLY syscall.Errno = 8473 + ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING syscall.Errno = 8474 + ERROR_DS_CONSTRUCTED_ATT_MOD syscall.Errno = 8475 + ERROR_DS_WRONG_OM_OBJ_CLASS syscall.Errno = 8476 + ERROR_DS_DRA_REPL_PENDING syscall.Errno = 8477 + ERROR_DS_DS_REQUIRED syscall.Errno = 8478 + ERROR_DS_INVALID_LDAP_DISPLAY_NAME syscall.Errno = 8479 + ERROR_DS_NON_BASE_SEARCH syscall.Errno = 8480 + ERROR_DS_CANT_RETRIEVE_ATTS syscall.Errno = 8481 + ERROR_DS_BACKLINK_WITHOUT_LINK syscall.Errno = 8482 + ERROR_DS_EPOCH_MISMATCH syscall.Errno = 8483 + ERROR_DS_SRC_NAME_MISMATCH syscall.Errno = 8484 + ERROR_DS_SRC_AND_DST_NC_IDENTICAL syscall.Errno = 8485 + ERROR_DS_DST_NC_MISMATCH syscall.Errno = 8486 + ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC syscall.Errno = 8487 + ERROR_DS_SRC_GUID_MISMATCH syscall.Errno = 8488 + ERROR_DS_CANT_MOVE_DELETED_OBJECT syscall.Errno = 8489 + ERROR_DS_PDC_OPERATION_IN_PROGRESS syscall.Errno = 8490 + ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD syscall.Errno = 8491 + ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION syscall.Errno = 8492 + ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS syscall.Errno = 8493 + ERROR_DS_NC_MUST_HAVE_NC_PARENT syscall.Errno = 8494 + ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE syscall.Errno = 8495 + ERROR_DS_DST_DOMAIN_NOT_NATIVE syscall.Errno = 8496 + ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER syscall.Errno = 8497 + ERROR_DS_CANT_MOVE_ACCOUNT_GROUP syscall.Errno = 8498 + ERROR_DS_CANT_MOVE_RESOURCE_GROUP syscall.Errno = 8499 + ERROR_DS_INVALID_SEARCH_FLAG syscall.Errno = 8500 + ERROR_DS_NO_TREE_DELETE_ABOVE_NC syscall.Errno = 8501 + ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE syscall.Errno = 8502 + ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE syscall.Errno = 8503 + ERROR_DS_SAM_INIT_FAILURE syscall.Errno = 8504 + ERROR_DS_SENSITIVE_GROUP_VIOLATION syscall.Errno = 8505 + ERROR_DS_CANT_MOD_PRIMARYGROUPID syscall.Errno = 8506 + ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD syscall.Errno = 8507 + ERROR_DS_NONSAFE_SCHEMA_CHANGE syscall.Errno = 8508 + ERROR_DS_SCHEMA_UPDATE_DISALLOWED syscall.Errno = 8509 + ERROR_DS_CANT_CREATE_UNDER_SCHEMA syscall.Errno = 8510 + ERROR_DS_INSTALL_NO_SRC_SCH_VERSION syscall.Errno = 8511 + ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE syscall.Errno = 8512 + ERROR_DS_INVALID_GROUP_TYPE syscall.Errno = 8513 + ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN syscall.Errno = 8514 + ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN syscall.Errno = 8515 + ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER syscall.Errno = 8516 + ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER syscall.Errno = 8517 + ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER syscall.Errno = 8518 + ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER syscall.Errno = 8519 + ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER syscall.Errno = 8520 + ERROR_DS_HAVE_PRIMARY_MEMBERS syscall.Errno = 8521 + ERROR_DS_STRING_SD_CONVERSION_FAILED syscall.Errno = 8522 + ERROR_DS_NAMING_MASTER_GC syscall.Errno = 8523 + ERROR_DS_DNS_LOOKUP_FAILURE syscall.Errno = 8524 + ERROR_DS_COULDNT_UPDATE_SPNS syscall.Errno = 8525 + ERROR_DS_CANT_RETRIEVE_SD syscall.Errno = 8526 + ERROR_DS_KEY_NOT_UNIQUE syscall.Errno = 8527 + ERROR_DS_WRONG_LINKED_ATT_SYNTAX syscall.Errno = 8528 + ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD syscall.Errno = 8529 + ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY syscall.Errno = 8530 + ERROR_DS_CANT_START syscall.Errno = 8531 + ERROR_DS_INIT_FAILURE syscall.Errno = 8532 + ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION syscall.Errno = 8533 + ERROR_DS_SOURCE_DOMAIN_IN_FOREST syscall.Errno = 8534 + ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST syscall.Errno = 8535 + ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED syscall.Errno = 8536 + ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN syscall.Errno = 8537 + ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER syscall.Errno = 8538 + ERROR_DS_SRC_SID_EXISTS_IN_FOREST syscall.Errno = 8539 + ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH syscall.Errno = 8540 + ERROR_SAM_INIT_FAILURE syscall.Errno = 8541 + ERROR_DS_DRA_SCHEMA_INFO_SHIP syscall.Errno = 8542 + ERROR_DS_DRA_SCHEMA_CONFLICT syscall.Errno = 8543 + ERROR_DS_DRA_EARLIER_SCHEMA_CONFLICT syscall.Errno = 8544 + ERROR_DS_DRA_OBJ_NC_MISMATCH syscall.Errno = 8545 + ERROR_DS_NC_STILL_HAS_DSAS syscall.Errno = 8546 + ERROR_DS_GC_REQUIRED syscall.Errno = 8547 + ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY syscall.Errno = 8548 + ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS syscall.Errno = 8549 + ERROR_DS_CANT_ADD_TO_GC syscall.Errno = 8550 + ERROR_DS_NO_CHECKPOINT_WITH_PDC syscall.Errno = 8551 + ERROR_DS_SOURCE_AUDITING_NOT_ENABLED syscall.Errno = 8552 + ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC syscall.Errno = 8553 + ERROR_DS_INVALID_NAME_FOR_SPN syscall.Errno = 8554 + ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS syscall.Errno = 8555 + ERROR_DS_UNICODEPWD_NOT_IN_QUOTES syscall.Errno = 8556 + ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED syscall.Errno = 8557 + ERROR_DS_MUST_BE_RUN_ON_DST_DC syscall.Errno = 8558 + ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER syscall.Errno = 8559 + ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ syscall.Errno = 8560 + ERROR_DS_INIT_FAILURE_CONSOLE syscall.Errno = 8561 + ERROR_DS_SAM_INIT_FAILURE_CONSOLE syscall.Errno = 8562 + ERROR_DS_FOREST_VERSION_TOO_HIGH syscall.Errno = 8563 + ERROR_DS_DOMAIN_VERSION_TOO_HIGH syscall.Errno = 8564 + ERROR_DS_FOREST_VERSION_TOO_LOW syscall.Errno = 8565 + ERROR_DS_DOMAIN_VERSION_TOO_LOW syscall.Errno = 8566 + ERROR_DS_INCOMPATIBLE_VERSION syscall.Errno = 8567 + ERROR_DS_LOW_DSA_VERSION syscall.Errno = 8568 + ERROR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN syscall.Errno = 8569 + ERROR_DS_NOT_SUPPORTED_SORT_ORDER syscall.Errno = 8570 + ERROR_DS_NAME_NOT_UNIQUE syscall.Errno = 8571 + ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4 syscall.Errno = 8572 + ERROR_DS_OUT_OF_VERSION_STORE syscall.Errno = 8573 + ERROR_DS_INCOMPATIBLE_CONTROLS_USED syscall.Errno = 8574 + ERROR_DS_NO_REF_DOMAIN syscall.Errno = 8575 + ERROR_DS_RESERVED_LINK_ID syscall.Errno = 8576 + ERROR_DS_LINK_ID_NOT_AVAILABLE syscall.Errno = 8577 + ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER syscall.Errno = 8578 + ERROR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE syscall.Errno = 8579 + ERROR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC syscall.Errno = 8580 + ERROR_DS_MODIFYDN_DISALLOWED_BY_FLAG syscall.Errno = 8581 + ERROR_DS_MODIFYDN_WRONG_GRANDPARENT syscall.Errno = 8582 + ERROR_DS_NAME_ERROR_TRUST_REFERRAL syscall.Errno = 8583 + ERROR_NOT_SUPPORTED_ON_STANDARD_SERVER syscall.Errno = 8584 + ERROR_DS_CANT_ACCESS_REMOTE_PART_OF_AD syscall.Errno = 8585 + ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2 syscall.Errno = 8586 + ERROR_DS_THREAD_LIMIT_EXCEEDED syscall.Errno = 8587 + ERROR_DS_NOT_CLOSEST syscall.Errno = 8588 + ERROR_DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF syscall.Errno = 8589 + ERROR_DS_SINGLE_USER_MODE_FAILED syscall.Errno = 8590 + ERROR_DS_NTDSCRIPT_SYNTAX_ERROR syscall.Errno = 8591 + ERROR_DS_NTDSCRIPT_PROCESS_ERROR syscall.Errno = 8592 + ERROR_DS_DIFFERENT_REPL_EPOCHS syscall.Errno = 8593 + ERROR_DS_DRS_EXTENSIONS_CHANGED syscall.Errno = 8594 + ERROR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR syscall.Errno = 8595 + ERROR_DS_NO_MSDS_INTID syscall.Errno = 8596 + ERROR_DS_DUP_MSDS_INTID syscall.Errno = 8597 + ERROR_DS_EXISTS_IN_RDNATTID syscall.Errno = 8598 + ERROR_DS_AUTHORIZATION_FAILED syscall.Errno = 8599 + ERROR_DS_INVALID_SCRIPT syscall.Errno = 8600 + ERROR_DS_REMOTE_CROSSREF_OP_FAILED syscall.Errno = 8601 + ERROR_DS_CROSS_REF_BUSY syscall.Errno = 8602 + ERROR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN syscall.Errno = 8603 + ERROR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC syscall.Errno = 8604 + ERROR_DS_DUPLICATE_ID_FOUND syscall.Errno = 8605 + ERROR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT syscall.Errno = 8606 + ERROR_DS_GROUP_CONVERSION_ERROR syscall.Errno = 8607 + ERROR_DS_CANT_MOVE_APP_BASIC_GROUP syscall.Errno = 8608 + ERROR_DS_CANT_MOVE_APP_QUERY_GROUP syscall.Errno = 8609 + ERROR_DS_ROLE_NOT_VERIFIED syscall.Errno = 8610 + ERROR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL syscall.Errno = 8611 + ERROR_DS_DOMAIN_RENAME_IN_PROGRESS syscall.Errno = 8612 + ERROR_DS_EXISTING_AD_CHILD_NC syscall.Errno = 8613 + ERROR_DS_REPL_LIFETIME_EXCEEDED syscall.Errno = 8614 + ERROR_DS_DISALLOWED_IN_SYSTEM_CONTAINER syscall.Errno = 8615 + ERROR_DS_LDAP_SEND_QUEUE_FULL syscall.Errno = 8616 + ERROR_DS_DRA_OUT_SCHEDULE_WINDOW syscall.Errno = 8617 + ERROR_DS_POLICY_NOT_KNOWN syscall.Errno = 8618 + ERROR_NO_SITE_SETTINGS_OBJECT syscall.Errno = 8619 + ERROR_NO_SECRETS syscall.Errno = 8620 + ERROR_NO_WRITABLE_DC_FOUND syscall.Errno = 8621 + ERROR_DS_NO_SERVER_OBJECT syscall.Errno = 8622 + ERROR_DS_NO_NTDSA_OBJECT syscall.Errno = 8623 + ERROR_DS_NON_ASQ_SEARCH syscall.Errno = 8624 + ERROR_DS_AUDIT_FAILURE syscall.Errno = 8625 + ERROR_DS_INVALID_SEARCH_FLAG_SUBTREE syscall.Errno = 8626 + ERROR_DS_INVALID_SEARCH_FLAG_TUPLE syscall.Errno = 8627 + ERROR_DS_HIERARCHY_TABLE_TOO_DEEP syscall.Errno = 8628 + ERROR_DS_DRA_CORRUPT_UTD_VECTOR syscall.Errno = 8629 + ERROR_DS_DRA_SECRETS_DENIED syscall.Errno = 8630 + ERROR_DS_RESERVED_MAPI_ID syscall.Errno = 8631 + ERROR_DS_MAPI_ID_NOT_AVAILABLE syscall.Errno = 8632 + ERROR_DS_DRA_MISSING_KRBTGT_SECRET syscall.Errno = 8633 + ERROR_DS_DOMAIN_NAME_EXISTS_IN_FOREST syscall.Errno = 8634 + ERROR_DS_FLAT_NAME_EXISTS_IN_FOREST syscall.Errno = 8635 + ERROR_INVALID_USER_PRINCIPAL_NAME syscall.Errno = 8636 + ERROR_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS syscall.Errno = 8637 + ERROR_DS_OID_NOT_FOUND syscall.Errno = 8638 + ERROR_DS_DRA_RECYCLED_TARGET syscall.Errno = 8639 + ERROR_DS_DISALLOWED_NC_REDIRECT syscall.Errno = 8640 + ERROR_DS_HIGH_ADLDS_FFL syscall.Errno = 8641 + ERROR_DS_HIGH_DSA_VERSION syscall.Errno = 8642 + ERROR_DS_LOW_ADLDS_FFL syscall.Errno = 8643 + ERROR_DOMAIN_SID_SAME_AS_LOCAL_WORKSTATION syscall.Errno = 8644 + ERROR_DS_UNDELETE_SAM_VALIDATION_FAILED syscall.Errno = 8645 + ERROR_INCORRECT_ACCOUNT_TYPE syscall.Errno = 8646 + ERROR_DS_SPN_VALUE_NOT_UNIQUE_IN_FOREST syscall.Errno = 8647 + ERROR_DS_UPN_VALUE_NOT_UNIQUE_IN_FOREST syscall.Errno = 8648 + ERROR_DS_MISSING_FOREST_TRUST syscall.Errno = 8649 + ERROR_DS_VALUE_KEY_NOT_UNIQUE syscall.Errno = 8650 + DNS_ERROR_RESPONSE_CODES_BASE syscall.Errno = 9000 + DNS_ERROR_RCODE_NO_ERROR = ERROR_SUCCESS + DNS_ERROR_MASK syscall.Errno = 0x00002328 + DNS_ERROR_RCODE_FORMAT_ERROR syscall.Errno = 9001 + DNS_ERROR_RCODE_SERVER_FAILURE syscall.Errno = 9002 + DNS_ERROR_RCODE_NAME_ERROR syscall.Errno = 9003 + DNS_ERROR_RCODE_NOT_IMPLEMENTED syscall.Errno = 9004 + DNS_ERROR_RCODE_REFUSED syscall.Errno = 9005 + DNS_ERROR_RCODE_YXDOMAIN syscall.Errno = 9006 + DNS_ERROR_RCODE_YXRRSET syscall.Errno = 9007 + DNS_ERROR_RCODE_NXRRSET syscall.Errno = 9008 + DNS_ERROR_RCODE_NOTAUTH syscall.Errno = 9009 + DNS_ERROR_RCODE_NOTZONE syscall.Errno = 9010 + DNS_ERROR_RCODE_BADSIG syscall.Errno = 9016 + DNS_ERROR_RCODE_BADKEY syscall.Errno = 9017 + DNS_ERROR_RCODE_BADTIME syscall.Errno = 9018 + DNS_ERROR_RCODE_LAST = DNS_ERROR_RCODE_BADTIME + DNS_ERROR_DNSSEC_BASE syscall.Errno = 9100 + DNS_ERROR_KEYMASTER_REQUIRED syscall.Errno = 9101 + DNS_ERROR_NOT_ALLOWED_ON_SIGNED_ZONE syscall.Errno = 9102 + DNS_ERROR_NSEC3_INCOMPATIBLE_WITH_RSA_SHA1 syscall.Errno = 9103 + DNS_ERROR_NOT_ENOUGH_SIGNING_KEY_DESCRIPTORS syscall.Errno = 9104 + DNS_ERROR_UNSUPPORTED_ALGORITHM syscall.Errno = 9105 + DNS_ERROR_INVALID_KEY_SIZE syscall.Errno = 9106 + DNS_ERROR_SIGNING_KEY_NOT_ACCESSIBLE syscall.Errno = 9107 + DNS_ERROR_KSP_DOES_NOT_SUPPORT_PROTECTION syscall.Errno = 9108 + DNS_ERROR_UNEXPECTED_DATA_PROTECTION_ERROR syscall.Errno = 9109 + DNS_ERROR_UNEXPECTED_CNG_ERROR syscall.Errno = 9110 + DNS_ERROR_UNKNOWN_SIGNING_PARAMETER_VERSION syscall.Errno = 9111 + DNS_ERROR_KSP_NOT_ACCESSIBLE syscall.Errno = 9112 + DNS_ERROR_TOO_MANY_SKDS syscall.Errno = 9113 + DNS_ERROR_INVALID_ROLLOVER_PERIOD syscall.Errno = 9114 + DNS_ERROR_INVALID_INITIAL_ROLLOVER_OFFSET syscall.Errno = 9115 + DNS_ERROR_ROLLOVER_IN_PROGRESS syscall.Errno = 9116 + DNS_ERROR_STANDBY_KEY_NOT_PRESENT syscall.Errno = 9117 + DNS_ERROR_NOT_ALLOWED_ON_ZSK syscall.Errno = 9118 + DNS_ERROR_NOT_ALLOWED_ON_ACTIVE_SKD syscall.Errno = 9119 + DNS_ERROR_ROLLOVER_ALREADY_QUEUED syscall.Errno = 9120 + DNS_ERROR_NOT_ALLOWED_ON_UNSIGNED_ZONE syscall.Errno = 9121 + DNS_ERROR_BAD_KEYMASTER syscall.Errno = 9122 + DNS_ERROR_INVALID_SIGNATURE_VALIDITY_PERIOD syscall.Errno = 9123 + DNS_ERROR_INVALID_NSEC3_ITERATION_COUNT syscall.Errno = 9124 + DNS_ERROR_DNSSEC_IS_DISABLED syscall.Errno = 9125 + DNS_ERROR_INVALID_XML syscall.Errno = 9126 + DNS_ERROR_NO_VALID_TRUST_ANCHORS syscall.Errno = 9127 + DNS_ERROR_ROLLOVER_NOT_POKEABLE syscall.Errno = 9128 + DNS_ERROR_NSEC3_NAME_COLLISION syscall.Errno = 9129 + DNS_ERROR_NSEC_INCOMPATIBLE_WITH_NSEC3_RSA_SHA1 syscall.Errno = 9130 + DNS_ERROR_PACKET_FMT_BASE syscall.Errno = 9500 + DNS_INFO_NO_RECORDS syscall.Errno = 9501 + DNS_ERROR_BAD_PACKET syscall.Errno = 9502 + DNS_ERROR_NO_PACKET syscall.Errno = 9503 + DNS_ERROR_RCODE syscall.Errno = 9504 + DNS_ERROR_UNSECURE_PACKET syscall.Errno = 9505 + DNS_STATUS_PACKET_UNSECURE = DNS_ERROR_UNSECURE_PACKET + DNS_REQUEST_PENDING syscall.Errno = 9506 + DNS_ERROR_NO_MEMORY = ERROR_OUTOFMEMORY + DNS_ERROR_INVALID_NAME = ERROR_INVALID_NAME + DNS_ERROR_INVALID_DATA = ERROR_INVALID_DATA + DNS_ERROR_GENERAL_API_BASE syscall.Errno = 9550 + DNS_ERROR_INVALID_TYPE syscall.Errno = 9551 + DNS_ERROR_INVALID_IP_ADDRESS syscall.Errno = 9552 + DNS_ERROR_INVALID_PROPERTY syscall.Errno = 9553 + DNS_ERROR_TRY_AGAIN_LATER syscall.Errno = 9554 + DNS_ERROR_NOT_UNIQUE syscall.Errno = 9555 + DNS_ERROR_NON_RFC_NAME syscall.Errno = 9556 + DNS_STATUS_FQDN syscall.Errno = 9557 + DNS_STATUS_DOTTED_NAME syscall.Errno = 9558 + DNS_STATUS_SINGLE_PART_NAME syscall.Errno = 9559 + DNS_ERROR_INVALID_NAME_CHAR syscall.Errno = 9560 + DNS_ERROR_NUMERIC_NAME syscall.Errno = 9561 + DNS_ERROR_NOT_ALLOWED_ON_ROOT_SERVER syscall.Errno = 9562 + DNS_ERROR_NOT_ALLOWED_UNDER_DELEGATION syscall.Errno = 9563 + DNS_ERROR_CANNOT_FIND_ROOT_HINTS syscall.Errno = 9564 + DNS_ERROR_INCONSISTENT_ROOT_HINTS syscall.Errno = 9565 + DNS_ERROR_DWORD_VALUE_TOO_SMALL syscall.Errno = 9566 + DNS_ERROR_DWORD_VALUE_TOO_LARGE syscall.Errno = 9567 + DNS_ERROR_BACKGROUND_LOADING syscall.Errno = 9568 + DNS_ERROR_NOT_ALLOWED_ON_RODC syscall.Errno = 9569 + DNS_ERROR_NOT_ALLOWED_UNDER_DNAME syscall.Errno = 9570 + DNS_ERROR_DELEGATION_REQUIRED syscall.Errno = 9571 + DNS_ERROR_INVALID_POLICY_TABLE syscall.Errno = 9572 + DNS_ERROR_ADDRESS_REQUIRED syscall.Errno = 9573 + DNS_ERROR_ZONE_BASE syscall.Errno = 9600 + DNS_ERROR_ZONE_DOES_NOT_EXIST syscall.Errno = 9601 + DNS_ERROR_NO_ZONE_INFO syscall.Errno = 9602 + DNS_ERROR_INVALID_ZONE_OPERATION syscall.Errno = 9603 + DNS_ERROR_ZONE_CONFIGURATION_ERROR syscall.Errno = 9604 + DNS_ERROR_ZONE_HAS_NO_SOA_RECORD syscall.Errno = 9605 + DNS_ERROR_ZONE_HAS_NO_NS_RECORDS syscall.Errno = 9606 + DNS_ERROR_ZONE_LOCKED syscall.Errno = 9607 + DNS_ERROR_ZONE_CREATION_FAILED syscall.Errno = 9608 + DNS_ERROR_ZONE_ALREADY_EXISTS syscall.Errno = 9609 + DNS_ERROR_AUTOZONE_ALREADY_EXISTS syscall.Errno = 9610 + DNS_ERROR_INVALID_ZONE_TYPE syscall.Errno = 9611 + DNS_ERROR_SECONDARY_REQUIRES_MASTER_IP syscall.Errno = 9612 + DNS_ERROR_ZONE_NOT_SECONDARY syscall.Errno = 9613 + DNS_ERROR_NEED_SECONDARY_ADDRESSES syscall.Errno = 9614 + DNS_ERROR_WINS_INIT_FAILED syscall.Errno = 9615 + DNS_ERROR_NEED_WINS_SERVERS syscall.Errno = 9616 + DNS_ERROR_NBSTAT_INIT_FAILED syscall.Errno = 9617 + DNS_ERROR_SOA_DELETE_INVALID syscall.Errno = 9618 + DNS_ERROR_FORWARDER_ALREADY_EXISTS syscall.Errno = 9619 + DNS_ERROR_ZONE_REQUIRES_MASTER_IP syscall.Errno = 9620 + DNS_ERROR_ZONE_IS_SHUTDOWN syscall.Errno = 9621 + DNS_ERROR_ZONE_LOCKED_FOR_SIGNING syscall.Errno = 9622 + DNS_ERROR_DATAFILE_BASE syscall.Errno = 9650 + DNS_ERROR_PRIMARY_REQUIRES_DATAFILE syscall.Errno = 9651 + DNS_ERROR_INVALID_DATAFILE_NAME syscall.Errno = 9652 + DNS_ERROR_DATAFILE_OPEN_FAILURE syscall.Errno = 9653 + DNS_ERROR_FILE_WRITEBACK_FAILED syscall.Errno = 9654 + DNS_ERROR_DATAFILE_PARSING syscall.Errno = 9655 + DNS_ERROR_DATABASE_BASE syscall.Errno = 9700 + DNS_ERROR_RECORD_DOES_NOT_EXIST syscall.Errno = 9701 + DNS_ERROR_RECORD_FORMAT syscall.Errno = 9702 + DNS_ERROR_NODE_CREATION_FAILED syscall.Errno = 9703 + DNS_ERROR_UNKNOWN_RECORD_TYPE syscall.Errno = 9704 + DNS_ERROR_RECORD_TIMED_OUT syscall.Errno = 9705 + DNS_ERROR_NAME_NOT_IN_ZONE syscall.Errno = 9706 + DNS_ERROR_CNAME_LOOP syscall.Errno = 9707 + DNS_ERROR_NODE_IS_CNAME syscall.Errno = 9708 + DNS_ERROR_CNAME_COLLISION syscall.Errno = 9709 + DNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT syscall.Errno = 9710 + DNS_ERROR_RECORD_ALREADY_EXISTS syscall.Errno = 9711 + DNS_ERROR_SECONDARY_DATA syscall.Errno = 9712 + DNS_ERROR_NO_CREATE_CACHE_DATA syscall.Errno = 9713 + DNS_ERROR_NAME_DOES_NOT_EXIST syscall.Errno = 9714 + DNS_WARNING_PTR_CREATE_FAILED syscall.Errno = 9715 + DNS_WARNING_DOMAIN_UNDELETED syscall.Errno = 9716 + DNS_ERROR_DS_UNAVAILABLE syscall.Errno = 9717 + DNS_ERROR_DS_ZONE_ALREADY_EXISTS syscall.Errno = 9718 + DNS_ERROR_NO_BOOTFILE_IF_DS_ZONE syscall.Errno = 9719 + DNS_ERROR_NODE_IS_DNAME syscall.Errno = 9720 + DNS_ERROR_DNAME_COLLISION syscall.Errno = 9721 + DNS_ERROR_ALIAS_LOOP syscall.Errno = 9722 + DNS_ERROR_OPERATION_BASE syscall.Errno = 9750 + DNS_INFO_AXFR_COMPLETE syscall.Errno = 9751 + DNS_ERROR_AXFR syscall.Errno = 9752 + DNS_INFO_ADDED_LOCAL_WINS syscall.Errno = 9753 + DNS_ERROR_SECURE_BASE syscall.Errno = 9800 + DNS_STATUS_CONTINUE_NEEDED syscall.Errno = 9801 + DNS_ERROR_SETUP_BASE syscall.Errno = 9850 + DNS_ERROR_NO_TCPIP syscall.Errno = 9851 + DNS_ERROR_NO_DNS_SERVERS syscall.Errno = 9852 + DNS_ERROR_DP_BASE syscall.Errno = 9900 + DNS_ERROR_DP_DOES_NOT_EXIST syscall.Errno = 9901 + DNS_ERROR_DP_ALREADY_EXISTS syscall.Errno = 9902 + DNS_ERROR_DP_NOT_ENLISTED syscall.Errno = 9903 + DNS_ERROR_DP_ALREADY_ENLISTED syscall.Errno = 9904 + DNS_ERROR_DP_NOT_AVAILABLE syscall.Errno = 9905 + DNS_ERROR_DP_FSMO_ERROR syscall.Errno = 9906 + DNS_ERROR_RRL_NOT_ENABLED syscall.Errno = 9911 + DNS_ERROR_RRL_INVALID_WINDOW_SIZE syscall.Errno = 9912 + DNS_ERROR_RRL_INVALID_IPV4_PREFIX syscall.Errno = 9913 + DNS_ERROR_RRL_INVALID_IPV6_PREFIX syscall.Errno = 9914 + DNS_ERROR_RRL_INVALID_TC_RATE syscall.Errno = 9915 + DNS_ERROR_RRL_INVALID_LEAK_RATE syscall.Errno = 9916 + DNS_ERROR_RRL_LEAK_RATE_LESSTHAN_TC_RATE syscall.Errno = 9917 + DNS_ERROR_VIRTUALIZATION_INSTANCE_ALREADY_EXISTS syscall.Errno = 9921 + DNS_ERROR_VIRTUALIZATION_INSTANCE_DOES_NOT_EXIST syscall.Errno = 9922 + DNS_ERROR_VIRTUALIZATION_TREE_LOCKED syscall.Errno = 9923 + DNS_ERROR_INVAILD_VIRTUALIZATION_INSTANCE_NAME syscall.Errno = 9924 + DNS_ERROR_DEFAULT_VIRTUALIZATION_INSTANCE syscall.Errno = 9925 + DNS_ERROR_ZONESCOPE_ALREADY_EXISTS syscall.Errno = 9951 + DNS_ERROR_ZONESCOPE_DOES_NOT_EXIST syscall.Errno = 9952 + DNS_ERROR_DEFAULT_ZONESCOPE syscall.Errno = 9953 + DNS_ERROR_INVALID_ZONESCOPE_NAME syscall.Errno = 9954 + DNS_ERROR_NOT_ALLOWED_WITH_ZONESCOPES syscall.Errno = 9955 + DNS_ERROR_LOAD_ZONESCOPE_FAILED syscall.Errno = 9956 + DNS_ERROR_ZONESCOPE_FILE_WRITEBACK_FAILED syscall.Errno = 9957 + DNS_ERROR_INVALID_SCOPE_NAME syscall.Errno = 9958 + DNS_ERROR_SCOPE_DOES_NOT_EXIST syscall.Errno = 9959 + DNS_ERROR_DEFAULT_SCOPE syscall.Errno = 9960 + DNS_ERROR_INVALID_SCOPE_OPERATION syscall.Errno = 9961 + DNS_ERROR_SCOPE_LOCKED syscall.Errno = 9962 + DNS_ERROR_SCOPE_ALREADY_EXISTS syscall.Errno = 9963 + DNS_ERROR_POLICY_ALREADY_EXISTS syscall.Errno = 9971 + DNS_ERROR_POLICY_DOES_NOT_EXIST syscall.Errno = 9972 + DNS_ERROR_POLICY_INVALID_CRITERIA syscall.Errno = 9973 + DNS_ERROR_POLICY_INVALID_SETTINGS syscall.Errno = 9974 + DNS_ERROR_CLIENT_SUBNET_IS_ACCESSED syscall.Errno = 9975 + DNS_ERROR_CLIENT_SUBNET_DOES_NOT_EXIST syscall.Errno = 9976 + DNS_ERROR_CLIENT_SUBNET_ALREADY_EXISTS syscall.Errno = 9977 + DNS_ERROR_SUBNET_DOES_NOT_EXIST syscall.Errno = 9978 + DNS_ERROR_SUBNET_ALREADY_EXISTS syscall.Errno = 9979 + DNS_ERROR_POLICY_LOCKED syscall.Errno = 9980 + DNS_ERROR_POLICY_INVALID_WEIGHT syscall.Errno = 9981 + DNS_ERROR_POLICY_INVALID_NAME syscall.Errno = 9982 + DNS_ERROR_POLICY_MISSING_CRITERIA syscall.Errno = 9983 + DNS_ERROR_INVALID_CLIENT_SUBNET_NAME syscall.Errno = 9984 + DNS_ERROR_POLICY_PROCESSING_ORDER_INVALID syscall.Errno = 9985 + DNS_ERROR_POLICY_SCOPE_MISSING syscall.Errno = 9986 + DNS_ERROR_POLICY_SCOPE_NOT_ALLOWED syscall.Errno = 9987 + DNS_ERROR_SERVERSCOPE_IS_REFERENCED syscall.Errno = 9988 + DNS_ERROR_ZONESCOPE_IS_REFERENCED syscall.Errno = 9989 + DNS_ERROR_POLICY_INVALID_CRITERIA_CLIENT_SUBNET syscall.Errno = 9990 + DNS_ERROR_POLICY_INVALID_CRITERIA_TRANSPORT_PROTOCOL syscall.Errno = 9991 + DNS_ERROR_POLICY_INVALID_CRITERIA_NETWORK_PROTOCOL syscall.Errno = 9992 + DNS_ERROR_POLICY_INVALID_CRITERIA_INTERFACE syscall.Errno = 9993 + DNS_ERROR_POLICY_INVALID_CRITERIA_FQDN syscall.Errno = 9994 + DNS_ERROR_POLICY_INVALID_CRITERIA_QUERY_TYPE syscall.Errno = 9995 + DNS_ERROR_POLICY_INVALID_CRITERIA_TIME_OF_DAY syscall.Errno = 9996 + WSABASEERR syscall.Errno = 10000 + WSAEINTR syscall.Errno = 10004 + WSAEBADF syscall.Errno = 10009 + WSAEACCES syscall.Errno = 10013 + WSAEFAULT syscall.Errno = 10014 + WSAEINVAL syscall.Errno = 10022 + WSAEMFILE syscall.Errno = 10024 + WSAEWOULDBLOCK syscall.Errno = 10035 + WSAEINPROGRESS syscall.Errno = 10036 + WSAEALREADY syscall.Errno = 10037 + WSAENOTSOCK syscall.Errno = 10038 + WSAEDESTADDRREQ syscall.Errno = 10039 + WSAEMSGSIZE syscall.Errno = 10040 + WSAEPROTOTYPE syscall.Errno = 10041 + WSAENOPROTOOPT syscall.Errno = 10042 + WSAEPROTONOSUPPORT syscall.Errno = 10043 + WSAESOCKTNOSUPPORT syscall.Errno = 10044 + WSAEOPNOTSUPP syscall.Errno = 10045 + WSAEPFNOSUPPORT syscall.Errno = 10046 + WSAEAFNOSUPPORT syscall.Errno = 10047 + WSAEADDRINUSE syscall.Errno = 10048 + WSAEADDRNOTAVAIL syscall.Errno = 10049 + WSAENETDOWN syscall.Errno = 10050 + WSAENETUNREACH syscall.Errno = 10051 + WSAENETRESET syscall.Errno = 10052 + WSAECONNABORTED syscall.Errno = 10053 + WSAECONNRESET syscall.Errno = 10054 + WSAENOBUFS syscall.Errno = 10055 + WSAEISCONN syscall.Errno = 10056 + WSAENOTCONN syscall.Errno = 10057 + WSAESHUTDOWN syscall.Errno = 10058 + WSAETOOMANYREFS syscall.Errno = 10059 + WSAETIMEDOUT syscall.Errno = 10060 + WSAECONNREFUSED syscall.Errno = 10061 + WSAELOOP syscall.Errno = 10062 + WSAENAMETOOLONG syscall.Errno = 10063 + WSAEHOSTDOWN syscall.Errno = 10064 + WSAEHOSTUNREACH syscall.Errno = 10065 + WSAENOTEMPTY syscall.Errno = 10066 + WSAEPROCLIM syscall.Errno = 10067 + WSAEUSERS syscall.Errno = 10068 + WSAEDQUOT syscall.Errno = 10069 + WSAESTALE syscall.Errno = 10070 + WSAEREMOTE syscall.Errno = 10071 + WSASYSNOTREADY syscall.Errno = 10091 + WSAVERNOTSUPPORTED syscall.Errno = 10092 + WSANOTINITIALISED syscall.Errno = 10093 + WSAEDISCON syscall.Errno = 10101 + WSAENOMORE syscall.Errno = 10102 + WSAECANCELLED syscall.Errno = 10103 + WSAEINVALIDPROCTABLE syscall.Errno = 10104 + WSAEINVALIDPROVIDER syscall.Errno = 10105 + WSAEPROVIDERFAILEDINIT syscall.Errno = 10106 + WSASYSCALLFAILURE syscall.Errno = 10107 + WSASERVICE_NOT_FOUND syscall.Errno = 10108 + WSATYPE_NOT_FOUND syscall.Errno = 10109 + WSA_E_NO_MORE syscall.Errno = 10110 + WSA_E_CANCELLED syscall.Errno = 10111 + WSAEREFUSED syscall.Errno = 10112 + WSAHOST_NOT_FOUND syscall.Errno = 11001 + WSATRY_AGAIN syscall.Errno = 11002 + WSANO_RECOVERY syscall.Errno = 11003 + WSANO_DATA syscall.Errno = 11004 + WSA_QOS_RECEIVERS syscall.Errno = 11005 + WSA_QOS_SENDERS syscall.Errno = 11006 + WSA_QOS_NO_SENDERS syscall.Errno = 11007 + WSA_QOS_NO_RECEIVERS syscall.Errno = 11008 + WSA_QOS_REQUEST_CONFIRMED syscall.Errno = 11009 + WSA_QOS_ADMISSION_FAILURE syscall.Errno = 11010 + WSA_QOS_POLICY_FAILURE syscall.Errno = 11011 + WSA_QOS_BAD_STYLE syscall.Errno = 11012 + WSA_QOS_BAD_OBJECT syscall.Errno = 11013 + WSA_QOS_TRAFFIC_CTRL_ERROR syscall.Errno = 11014 + WSA_QOS_GENERIC_ERROR syscall.Errno = 11015 + WSA_QOS_ESERVICETYPE syscall.Errno = 11016 + WSA_QOS_EFLOWSPEC syscall.Errno = 11017 + WSA_QOS_EPROVSPECBUF syscall.Errno = 11018 + WSA_QOS_EFILTERSTYLE syscall.Errno = 11019 + WSA_QOS_EFILTERTYPE syscall.Errno = 11020 + WSA_QOS_EFILTERCOUNT syscall.Errno = 11021 + WSA_QOS_EOBJLENGTH syscall.Errno = 11022 + WSA_QOS_EFLOWCOUNT syscall.Errno = 11023 + WSA_QOS_EUNKOWNPSOBJ syscall.Errno = 11024 + WSA_QOS_EPOLICYOBJ syscall.Errno = 11025 + WSA_QOS_EFLOWDESC syscall.Errno = 11026 + WSA_QOS_EPSFLOWSPEC syscall.Errno = 11027 + WSA_QOS_EPSFILTERSPEC syscall.Errno = 11028 + WSA_QOS_ESDMODEOBJ syscall.Errno = 11029 + WSA_QOS_ESHAPERATEOBJ syscall.Errno = 11030 + WSA_QOS_RESERVED_PETYPE syscall.Errno = 11031 + WSA_SECURE_HOST_NOT_FOUND syscall.Errno = 11032 + WSA_IPSEC_NAME_POLICY_ERROR syscall.Errno = 11033 + ERROR_IPSEC_QM_POLICY_EXISTS syscall.Errno = 13000 + ERROR_IPSEC_QM_POLICY_NOT_FOUND syscall.Errno = 13001 + ERROR_IPSEC_QM_POLICY_IN_USE syscall.Errno = 13002 + ERROR_IPSEC_MM_POLICY_EXISTS syscall.Errno = 13003 + ERROR_IPSEC_MM_POLICY_NOT_FOUND syscall.Errno = 13004 + ERROR_IPSEC_MM_POLICY_IN_USE syscall.Errno = 13005 + ERROR_IPSEC_MM_FILTER_EXISTS syscall.Errno = 13006 + ERROR_IPSEC_MM_FILTER_NOT_FOUND syscall.Errno = 13007 + ERROR_IPSEC_TRANSPORT_FILTER_EXISTS syscall.Errno = 13008 + ERROR_IPSEC_TRANSPORT_FILTER_NOT_FOUND syscall.Errno = 13009 + ERROR_IPSEC_MM_AUTH_EXISTS syscall.Errno = 13010 + ERROR_IPSEC_MM_AUTH_NOT_FOUND syscall.Errno = 13011 + ERROR_IPSEC_MM_AUTH_IN_USE syscall.Errno = 13012 + ERROR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND syscall.Errno = 13013 + ERROR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND syscall.Errno = 13014 + ERROR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND syscall.Errno = 13015 + ERROR_IPSEC_TUNNEL_FILTER_EXISTS syscall.Errno = 13016 + ERROR_IPSEC_TUNNEL_FILTER_NOT_FOUND syscall.Errno = 13017 + ERROR_IPSEC_MM_FILTER_PENDING_DELETION syscall.Errno = 13018 + ERROR_IPSEC_TRANSPORT_FILTER_PENDING_DELETION syscall.Errno = 13019 + ERROR_IPSEC_TUNNEL_FILTER_PENDING_DELETION syscall.Errno = 13020 + ERROR_IPSEC_MM_POLICY_PENDING_DELETION syscall.Errno = 13021 + ERROR_IPSEC_MM_AUTH_PENDING_DELETION syscall.Errno = 13022 + ERROR_IPSEC_QM_POLICY_PENDING_DELETION syscall.Errno = 13023 + WARNING_IPSEC_MM_POLICY_PRUNED syscall.Errno = 13024 + WARNING_IPSEC_QM_POLICY_PRUNED syscall.Errno = 13025 + ERROR_IPSEC_IKE_NEG_STATUS_BEGIN syscall.Errno = 13800 + ERROR_IPSEC_IKE_AUTH_FAIL syscall.Errno = 13801 + ERROR_IPSEC_IKE_ATTRIB_FAIL syscall.Errno = 13802 + ERROR_IPSEC_IKE_NEGOTIATION_PENDING syscall.Errno = 13803 + ERROR_IPSEC_IKE_GENERAL_PROCESSING_ERROR syscall.Errno = 13804 + ERROR_IPSEC_IKE_TIMED_OUT syscall.Errno = 13805 + ERROR_IPSEC_IKE_NO_CERT syscall.Errno = 13806 + ERROR_IPSEC_IKE_SA_DELETED syscall.Errno = 13807 + ERROR_IPSEC_IKE_SA_REAPED syscall.Errno = 13808 + ERROR_IPSEC_IKE_MM_ACQUIRE_DROP syscall.Errno = 13809 + ERROR_IPSEC_IKE_QM_ACQUIRE_DROP syscall.Errno = 13810 + ERROR_IPSEC_IKE_QUEUE_DROP_MM syscall.Errno = 13811 + ERROR_IPSEC_IKE_QUEUE_DROP_NO_MM syscall.Errno = 13812 + ERROR_IPSEC_IKE_DROP_NO_RESPONSE syscall.Errno = 13813 + ERROR_IPSEC_IKE_MM_DELAY_DROP syscall.Errno = 13814 + ERROR_IPSEC_IKE_QM_DELAY_DROP syscall.Errno = 13815 + ERROR_IPSEC_IKE_ERROR syscall.Errno = 13816 + ERROR_IPSEC_IKE_CRL_FAILED syscall.Errno = 13817 + ERROR_IPSEC_IKE_INVALID_KEY_USAGE syscall.Errno = 13818 + ERROR_IPSEC_IKE_INVALID_CERT_TYPE syscall.Errno = 13819 + ERROR_IPSEC_IKE_NO_PRIVATE_KEY syscall.Errno = 13820 + ERROR_IPSEC_IKE_SIMULTANEOUS_REKEY syscall.Errno = 13821 + ERROR_IPSEC_IKE_DH_FAIL syscall.Errno = 13822 + ERROR_IPSEC_IKE_CRITICAL_PAYLOAD_NOT_RECOGNIZED syscall.Errno = 13823 + ERROR_IPSEC_IKE_INVALID_HEADER syscall.Errno = 13824 + ERROR_IPSEC_IKE_NO_POLICY syscall.Errno = 13825 + ERROR_IPSEC_IKE_INVALID_SIGNATURE syscall.Errno = 13826 + ERROR_IPSEC_IKE_KERBEROS_ERROR syscall.Errno = 13827 + ERROR_IPSEC_IKE_NO_PUBLIC_KEY syscall.Errno = 13828 + ERROR_IPSEC_IKE_PROCESS_ERR syscall.Errno = 13829 + ERROR_IPSEC_IKE_PROCESS_ERR_SA syscall.Errno = 13830 + ERROR_IPSEC_IKE_PROCESS_ERR_PROP syscall.Errno = 13831 + ERROR_IPSEC_IKE_PROCESS_ERR_TRANS syscall.Errno = 13832 + ERROR_IPSEC_IKE_PROCESS_ERR_KE syscall.Errno = 13833 + ERROR_IPSEC_IKE_PROCESS_ERR_ID syscall.Errno = 13834 + ERROR_IPSEC_IKE_PROCESS_ERR_CERT syscall.Errno = 13835 + ERROR_IPSEC_IKE_PROCESS_ERR_CERT_REQ syscall.Errno = 13836 + ERROR_IPSEC_IKE_PROCESS_ERR_HASH syscall.Errno = 13837 + ERROR_IPSEC_IKE_PROCESS_ERR_SIG syscall.Errno = 13838 + ERROR_IPSEC_IKE_PROCESS_ERR_NONCE syscall.Errno = 13839 + ERROR_IPSEC_IKE_PROCESS_ERR_NOTIFY syscall.Errno = 13840 + ERROR_IPSEC_IKE_PROCESS_ERR_DELETE syscall.Errno = 13841 + ERROR_IPSEC_IKE_PROCESS_ERR_VENDOR syscall.Errno = 13842 + ERROR_IPSEC_IKE_INVALID_PAYLOAD syscall.Errno = 13843 + ERROR_IPSEC_IKE_LOAD_SOFT_SA syscall.Errno = 13844 + ERROR_IPSEC_IKE_SOFT_SA_TORN_DOWN syscall.Errno = 13845 + ERROR_IPSEC_IKE_INVALID_COOKIE syscall.Errno = 13846 + ERROR_IPSEC_IKE_NO_PEER_CERT syscall.Errno = 13847 + ERROR_IPSEC_IKE_PEER_CRL_FAILED syscall.Errno = 13848 + ERROR_IPSEC_IKE_POLICY_CHANGE syscall.Errno = 13849 + ERROR_IPSEC_IKE_NO_MM_POLICY syscall.Errno = 13850 + ERROR_IPSEC_IKE_NOTCBPRIV syscall.Errno = 13851 + ERROR_IPSEC_IKE_SECLOADFAIL syscall.Errno = 13852 + ERROR_IPSEC_IKE_FAILSSPINIT syscall.Errno = 13853 + ERROR_IPSEC_IKE_FAILQUERYSSP syscall.Errno = 13854 + ERROR_IPSEC_IKE_SRVACQFAIL syscall.Errno = 13855 + ERROR_IPSEC_IKE_SRVQUERYCRED syscall.Errno = 13856 + ERROR_IPSEC_IKE_GETSPIFAIL syscall.Errno = 13857 + ERROR_IPSEC_IKE_INVALID_FILTER syscall.Errno = 13858 + ERROR_IPSEC_IKE_OUT_OF_MEMORY syscall.Errno = 13859 + ERROR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED syscall.Errno = 13860 + ERROR_IPSEC_IKE_INVALID_POLICY syscall.Errno = 13861 + ERROR_IPSEC_IKE_UNKNOWN_DOI syscall.Errno = 13862 + ERROR_IPSEC_IKE_INVALID_SITUATION syscall.Errno = 13863 + ERROR_IPSEC_IKE_DH_FAILURE syscall.Errno = 13864 + ERROR_IPSEC_IKE_INVALID_GROUP syscall.Errno = 13865 + ERROR_IPSEC_IKE_ENCRYPT syscall.Errno = 13866 + ERROR_IPSEC_IKE_DECRYPT syscall.Errno = 13867 + ERROR_IPSEC_IKE_POLICY_MATCH syscall.Errno = 13868 + ERROR_IPSEC_IKE_UNSUPPORTED_ID syscall.Errno = 13869 + ERROR_IPSEC_IKE_INVALID_HASH syscall.Errno = 13870 + ERROR_IPSEC_IKE_INVALID_HASH_ALG syscall.Errno = 13871 + ERROR_IPSEC_IKE_INVALID_HASH_SIZE syscall.Errno = 13872 + ERROR_IPSEC_IKE_INVALID_ENCRYPT_ALG syscall.Errno = 13873 + ERROR_IPSEC_IKE_INVALID_AUTH_ALG syscall.Errno = 13874 + ERROR_IPSEC_IKE_INVALID_SIG syscall.Errno = 13875 + ERROR_IPSEC_IKE_LOAD_FAILED syscall.Errno = 13876 + ERROR_IPSEC_IKE_RPC_DELETE syscall.Errno = 13877 + ERROR_IPSEC_IKE_BENIGN_REINIT syscall.Errno = 13878 + ERROR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY syscall.Errno = 13879 + ERROR_IPSEC_IKE_INVALID_MAJOR_VERSION syscall.Errno = 13880 + ERROR_IPSEC_IKE_INVALID_CERT_KEYLEN syscall.Errno = 13881 + ERROR_IPSEC_IKE_MM_LIMIT syscall.Errno = 13882 + ERROR_IPSEC_IKE_NEGOTIATION_DISABLED syscall.Errno = 13883 + ERROR_IPSEC_IKE_QM_LIMIT syscall.Errno = 13884 + ERROR_IPSEC_IKE_MM_EXPIRED syscall.Errno = 13885 + ERROR_IPSEC_IKE_PEER_MM_ASSUMED_INVALID syscall.Errno = 13886 + ERROR_IPSEC_IKE_CERT_CHAIN_POLICY_MISMATCH syscall.Errno = 13887 + ERROR_IPSEC_IKE_UNEXPECTED_MESSAGE_ID syscall.Errno = 13888 + ERROR_IPSEC_IKE_INVALID_AUTH_PAYLOAD syscall.Errno = 13889 + ERROR_IPSEC_IKE_DOS_COOKIE_SENT syscall.Errno = 13890 + ERROR_IPSEC_IKE_SHUTTING_DOWN syscall.Errno = 13891 + ERROR_IPSEC_IKE_CGA_AUTH_FAILED syscall.Errno = 13892 + ERROR_IPSEC_IKE_PROCESS_ERR_NATOA syscall.Errno = 13893 + ERROR_IPSEC_IKE_INVALID_MM_FOR_QM syscall.Errno = 13894 + ERROR_IPSEC_IKE_QM_EXPIRED syscall.Errno = 13895 + ERROR_IPSEC_IKE_TOO_MANY_FILTERS syscall.Errno = 13896 + ERROR_IPSEC_IKE_NEG_STATUS_END syscall.Errno = 13897 + ERROR_IPSEC_IKE_KILL_DUMMY_NAP_TUNNEL syscall.Errno = 13898 + ERROR_IPSEC_IKE_INNER_IP_ASSIGNMENT_FAILURE syscall.Errno = 13899 + ERROR_IPSEC_IKE_REQUIRE_CP_PAYLOAD_MISSING syscall.Errno = 13900 + ERROR_IPSEC_KEY_MODULE_IMPERSONATION_NEGOTIATION_PENDING syscall.Errno = 13901 + ERROR_IPSEC_IKE_COEXISTENCE_SUPPRESS syscall.Errno = 13902 + ERROR_IPSEC_IKE_RATELIMIT_DROP syscall.Errno = 13903 + ERROR_IPSEC_IKE_PEER_DOESNT_SUPPORT_MOBIKE syscall.Errno = 13904 + ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE syscall.Errno = 13905 + ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_FAILURE syscall.Errno = 13906 + ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE_WITH_OPTIONAL_RETRY syscall.Errno = 13907 + ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_AND_CERTMAP_FAILURE syscall.Errno = 13908 + ERROR_IPSEC_IKE_NEG_STATUS_EXTENDED_END syscall.Errno = 13909 + ERROR_IPSEC_BAD_SPI syscall.Errno = 13910 + ERROR_IPSEC_SA_LIFETIME_EXPIRED syscall.Errno = 13911 + ERROR_IPSEC_WRONG_SA syscall.Errno = 13912 + ERROR_IPSEC_REPLAY_CHECK_FAILED syscall.Errno = 13913 + ERROR_IPSEC_INVALID_PACKET syscall.Errno = 13914 + ERROR_IPSEC_INTEGRITY_CHECK_FAILED syscall.Errno = 13915 + ERROR_IPSEC_CLEAR_TEXT_DROP syscall.Errno = 13916 + ERROR_IPSEC_AUTH_FIREWALL_DROP syscall.Errno = 13917 + ERROR_IPSEC_THROTTLE_DROP syscall.Errno = 13918 + ERROR_IPSEC_DOSP_BLOCK syscall.Errno = 13925 + ERROR_IPSEC_DOSP_RECEIVED_MULTICAST syscall.Errno = 13926 + ERROR_IPSEC_DOSP_INVALID_PACKET syscall.Errno = 13927 + ERROR_IPSEC_DOSP_STATE_LOOKUP_FAILED syscall.Errno = 13928 + ERROR_IPSEC_DOSP_MAX_ENTRIES syscall.Errno = 13929 + ERROR_IPSEC_DOSP_KEYMOD_NOT_ALLOWED syscall.Errno = 13930 + ERROR_IPSEC_DOSP_NOT_INSTALLED syscall.Errno = 13931 + ERROR_IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES syscall.Errno = 13932 + ERROR_SXS_SECTION_NOT_FOUND syscall.Errno = 14000 + ERROR_SXS_CANT_GEN_ACTCTX syscall.Errno = 14001 + ERROR_SXS_INVALID_ACTCTXDATA_FORMAT syscall.Errno = 14002 + ERROR_SXS_ASSEMBLY_NOT_FOUND syscall.Errno = 14003 + ERROR_SXS_MANIFEST_FORMAT_ERROR syscall.Errno = 14004 + ERROR_SXS_MANIFEST_PARSE_ERROR syscall.Errno = 14005 + ERROR_SXS_ACTIVATION_CONTEXT_DISABLED syscall.Errno = 14006 + ERROR_SXS_KEY_NOT_FOUND syscall.Errno = 14007 + ERROR_SXS_VERSION_CONFLICT syscall.Errno = 14008 + ERROR_SXS_WRONG_SECTION_TYPE syscall.Errno = 14009 + ERROR_SXS_THREAD_QUERIES_DISABLED syscall.Errno = 14010 + ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET syscall.Errno = 14011 + ERROR_SXS_UNKNOWN_ENCODING_GROUP syscall.Errno = 14012 + ERROR_SXS_UNKNOWN_ENCODING syscall.Errno = 14013 + ERROR_SXS_INVALID_XML_NAMESPACE_URI syscall.Errno = 14014 + ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED syscall.Errno = 14015 + ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED syscall.Errno = 14016 + ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE syscall.Errno = 14017 + ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE syscall.Errno = 14018 + ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE syscall.Errno = 14019 + ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT syscall.Errno = 14020 + ERROR_SXS_DUPLICATE_DLL_NAME syscall.Errno = 14021 + ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME syscall.Errno = 14022 + ERROR_SXS_DUPLICATE_CLSID syscall.Errno = 14023 + ERROR_SXS_DUPLICATE_IID syscall.Errno = 14024 + ERROR_SXS_DUPLICATE_TLBID syscall.Errno = 14025 + ERROR_SXS_DUPLICATE_PROGID syscall.Errno = 14026 + ERROR_SXS_DUPLICATE_ASSEMBLY_NAME syscall.Errno = 14027 + ERROR_SXS_FILE_HASH_MISMATCH syscall.Errno = 14028 + ERROR_SXS_POLICY_PARSE_ERROR syscall.Errno = 14029 + ERROR_SXS_XML_E_MISSINGQUOTE syscall.Errno = 14030 + ERROR_SXS_XML_E_COMMENTSYNTAX syscall.Errno = 14031 + ERROR_SXS_XML_E_BADSTARTNAMECHAR syscall.Errno = 14032 + ERROR_SXS_XML_E_BADNAMECHAR syscall.Errno = 14033 + ERROR_SXS_XML_E_BADCHARINSTRING syscall.Errno = 14034 + ERROR_SXS_XML_E_XMLDECLSYNTAX syscall.Errno = 14035 + ERROR_SXS_XML_E_BADCHARDATA syscall.Errno = 14036 + ERROR_SXS_XML_E_MISSINGWHITESPACE syscall.Errno = 14037 + ERROR_SXS_XML_E_EXPECTINGTAGEND syscall.Errno = 14038 + ERROR_SXS_XML_E_MISSINGSEMICOLON syscall.Errno = 14039 + ERROR_SXS_XML_E_UNBALANCEDPAREN syscall.Errno = 14040 + ERROR_SXS_XML_E_INTERNALERROR syscall.Errno = 14041 + ERROR_SXS_XML_E_UNEXPECTED_WHITESPACE syscall.Errno = 14042 + ERROR_SXS_XML_E_INCOMPLETE_ENCODING syscall.Errno = 14043 + ERROR_SXS_XML_E_MISSING_PAREN syscall.Errno = 14044 + ERROR_SXS_XML_E_EXPECTINGCLOSEQUOTE syscall.Errno = 14045 + ERROR_SXS_XML_E_MULTIPLE_COLONS syscall.Errno = 14046 + ERROR_SXS_XML_E_INVALID_DECIMAL syscall.Errno = 14047 + ERROR_SXS_XML_E_INVALID_HEXIDECIMAL syscall.Errno = 14048 + ERROR_SXS_XML_E_INVALID_UNICODE syscall.Errno = 14049 + ERROR_SXS_XML_E_WHITESPACEORQUESTIONMARK syscall.Errno = 14050 + ERROR_SXS_XML_E_UNEXPECTEDENDTAG syscall.Errno = 14051 + ERROR_SXS_XML_E_UNCLOSEDTAG syscall.Errno = 14052 + ERROR_SXS_XML_E_DUPLICATEATTRIBUTE syscall.Errno = 14053 + ERROR_SXS_XML_E_MULTIPLEROOTS syscall.Errno = 14054 + ERROR_SXS_XML_E_INVALIDATROOTLEVEL syscall.Errno = 14055 + ERROR_SXS_XML_E_BADXMLDECL syscall.Errno = 14056 + ERROR_SXS_XML_E_MISSINGROOT syscall.Errno = 14057 + ERROR_SXS_XML_E_UNEXPECTEDEOF syscall.Errno = 14058 + ERROR_SXS_XML_E_BADPEREFINSUBSET syscall.Errno = 14059 + ERROR_SXS_XML_E_UNCLOSEDSTARTTAG syscall.Errno = 14060 + ERROR_SXS_XML_E_UNCLOSEDENDTAG syscall.Errno = 14061 + ERROR_SXS_XML_E_UNCLOSEDSTRING syscall.Errno = 14062 + ERROR_SXS_XML_E_UNCLOSEDCOMMENT syscall.Errno = 14063 + ERROR_SXS_XML_E_UNCLOSEDDECL syscall.Errno = 14064 + ERROR_SXS_XML_E_UNCLOSEDCDATA syscall.Errno = 14065 + ERROR_SXS_XML_E_RESERVEDNAMESPACE syscall.Errno = 14066 + ERROR_SXS_XML_E_INVALIDENCODING syscall.Errno = 14067 + ERROR_SXS_XML_E_INVALIDSWITCH syscall.Errno = 14068 + ERROR_SXS_XML_E_BADXMLCASE syscall.Errno = 14069 + ERROR_SXS_XML_E_INVALID_STANDALONE syscall.Errno = 14070 + ERROR_SXS_XML_E_UNEXPECTED_STANDALONE syscall.Errno = 14071 + ERROR_SXS_XML_E_INVALID_VERSION syscall.Errno = 14072 + ERROR_SXS_XML_E_MISSINGEQUALS syscall.Errno = 14073 + ERROR_SXS_PROTECTION_RECOVERY_FAILED syscall.Errno = 14074 + ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT syscall.Errno = 14075 + ERROR_SXS_PROTECTION_CATALOG_NOT_VALID syscall.Errno = 14076 + ERROR_SXS_UNTRANSLATABLE_HRESULT syscall.Errno = 14077 + ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING syscall.Errno = 14078 + ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE syscall.Errno = 14079 + ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME syscall.Errno = 14080 + ERROR_SXS_ASSEMBLY_MISSING syscall.Errno = 14081 + ERROR_SXS_CORRUPT_ACTIVATION_STACK syscall.Errno = 14082 + ERROR_SXS_CORRUPTION syscall.Errno = 14083 + ERROR_SXS_EARLY_DEACTIVATION syscall.Errno = 14084 + ERROR_SXS_INVALID_DEACTIVATION syscall.Errno = 14085 + ERROR_SXS_MULTIPLE_DEACTIVATION syscall.Errno = 14086 + ERROR_SXS_PROCESS_TERMINATION_REQUESTED syscall.Errno = 14087 + ERROR_SXS_RELEASE_ACTIVATION_CONTEXT syscall.Errno = 14088 + ERROR_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY syscall.Errno = 14089 + ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE syscall.Errno = 14090 + ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME syscall.Errno = 14091 + ERROR_SXS_IDENTITY_DUPLICATE_ATTRIBUTE syscall.Errno = 14092 + ERROR_SXS_IDENTITY_PARSE_ERROR syscall.Errno = 14093 + ERROR_MALFORMED_SUBSTITUTION_STRING syscall.Errno = 14094 + ERROR_SXS_INCORRECT_PUBLIC_KEY_TOKEN syscall.Errno = 14095 + ERROR_UNMAPPED_SUBSTITUTION_STRING syscall.Errno = 14096 + ERROR_SXS_ASSEMBLY_NOT_LOCKED syscall.Errno = 14097 + ERROR_SXS_COMPONENT_STORE_CORRUPT syscall.Errno = 14098 + ERROR_ADVANCED_INSTALLER_FAILED syscall.Errno = 14099 + ERROR_XML_ENCODING_MISMATCH syscall.Errno = 14100 + ERROR_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT syscall.Errno = 14101 + ERROR_SXS_IDENTITIES_DIFFERENT syscall.Errno = 14102 + ERROR_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT syscall.Errno = 14103 + ERROR_SXS_FILE_NOT_PART_OF_ASSEMBLY syscall.Errno = 14104 + ERROR_SXS_MANIFEST_TOO_BIG syscall.Errno = 14105 + ERROR_SXS_SETTING_NOT_REGISTERED syscall.Errno = 14106 + ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE syscall.Errno = 14107 + ERROR_SMI_PRIMITIVE_INSTALLER_FAILED syscall.Errno = 14108 + ERROR_GENERIC_COMMAND_FAILED syscall.Errno = 14109 + ERROR_SXS_FILE_HASH_MISSING syscall.Errno = 14110 + ERROR_EVT_INVALID_CHANNEL_PATH syscall.Errno = 15000 + ERROR_EVT_INVALID_QUERY syscall.Errno = 15001 + ERROR_EVT_PUBLISHER_METADATA_NOT_FOUND syscall.Errno = 15002 + ERROR_EVT_EVENT_TEMPLATE_NOT_FOUND syscall.Errno = 15003 + ERROR_EVT_INVALID_PUBLISHER_NAME syscall.Errno = 15004 + ERROR_EVT_INVALID_EVENT_DATA syscall.Errno = 15005 + ERROR_EVT_CHANNEL_NOT_FOUND syscall.Errno = 15007 + ERROR_EVT_MALFORMED_XML_TEXT syscall.Errno = 15008 + ERROR_EVT_SUBSCRIPTION_TO_DIRECT_CHANNEL syscall.Errno = 15009 + ERROR_EVT_CONFIGURATION_ERROR syscall.Errno = 15010 + ERROR_EVT_QUERY_RESULT_STALE syscall.Errno = 15011 + ERROR_EVT_QUERY_RESULT_INVALID_POSITION syscall.Errno = 15012 + ERROR_EVT_NON_VALIDATING_MSXML syscall.Errno = 15013 + ERROR_EVT_FILTER_ALREADYSCOPED syscall.Errno = 15014 + ERROR_EVT_FILTER_NOTELTSET syscall.Errno = 15015 + ERROR_EVT_FILTER_INVARG syscall.Errno = 15016 + ERROR_EVT_FILTER_INVTEST syscall.Errno = 15017 + ERROR_EVT_FILTER_INVTYPE syscall.Errno = 15018 + ERROR_EVT_FILTER_PARSEERR syscall.Errno = 15019 + ERROR_EVT_FILTER_UNSUPPORTEDOP syscall.Errno = 15020 + ERROR_EVT_FILTER_UNEXPECTEDTOKEN syscall.Errno = 15021 + ERROR_EVT_INVALID_OPERATION_OVER_ENABLED_DIRECT_CHANNEL syscall.Errno = 15022 + ERROR_EVT_INVALID_CHANNEL_PROPERTY_VALUE syscall.Errno = 15023 + ERROR_EVT_INVALID_PUBLISHER_PROPERTY_VALUE syscall.Errno = 15024 + ERROR_EVT_CHANNEL_CANNOT_ACTIVATE syscall.Errno = 15025 + ERROR_EVT_FILTER_TOO_COMPLEX syscall.Errno = 15026 + ERROR_EVT_MESSAGE_NOT_FOUND syscall.Errno = 15027 + ERROR_EVT_MESSAGE_ID_NOT_FOUND syscall.Errno = 15028 + ERROR_EVT_UNRESOLVED_VALUE_INSERT syscall.Errno = 15029 + ERROR_EVT_UNRESOLVED_PARAMETER_INSERT syscall.Errno = 15030 + ERROR_EVT_MAX_INSERTS_REACHED syscall.Errno = 15031 + ERROR_EVT_EVENT_DEFINITION_NOT_FOUND syscall.Errno = 15032 + ERROR_EVT_MESSAGE_LOCALE_NOT_FOUND syscall.Errno = 15033 + ERROR_EVT_VERSION_TOO_OLD syscall.Errno = 15034 + ERROR_EVT_VERSION_TOO_NEW syscall.Errno = 15035 + ERROR_EVT_CANNOT_OPEN_CHANNEL_OF_QUERY syscall.Errno = 15036 + ERROR_EVT_PUBLISHER_DISABLED syscall.Errno = 15037 + ERROR_EVT_FILTER_OUT_OF_RANGE syscall.Errno = 15038 + ERROR_EC_SUBSCRIPTION_CANNOT_ACTIVATE syscall.Errno = 15080 + ERROR_EC_LOG_DISABLED syscall.Errno = 15081 + ERROR_EC_CIRCULAR_FORWARDING syscall.Errno = 15082 + ERROR_EC_CREDSTORE_FULL syscall.Errno = 15083 + ERROR_EC_CRED_NOT_FOUND syscall.Errno = 15084 + ERROR_EC_NO_ACTIVE_CHANNEL syscall.Errno = 15085 + ERROR_MUI_FILE_NOT_FOUND syscall.Errno = 15100 + ERROR_MUI_INVALID_FILE syscall.Errno = 15101 + ERROR_MUI_INVALID_RC_CONFIG syscall.Errno = 15102 + ERROR_MUI_INVALID_LOCALE_NAME syscall.Errno = 15103 + ERROR_MUI_INVALID_ULTIMATEFALLBACK_NAME syscall.Errno = 15104 + ERROR_MUI_FILE_NOT_LOADED syscall.Errno = 15105 + ERROR_RESOURCE_ENUM_USER_STOP syscall.Errno = 15106 + ERROR_MUI_INTLSETTINGS_UILANG_NOT_INSTALLED syscall.Errno = 15107 + ERROR_MUI_INTLSETTINGS_INVALID_LOCALE_NAME syscall.Errno = 15108 + ERROR_MRM_RUNTIME_NO_DEFAULT_OR_NEUTRAL_RESOURCE syscall.Errno = 15110 + ERROR_MRM_INVALID_PRICONFIG syscall.Errno = 15111 + ERROR_MRM_INVALID_FILE_TYPE syscall.Errno = 15112 + ERROR_MRM_UNKNOWN_QUALIFIER syscall.Errno = 15113 + ERROR_MRM_INVALID_QUALIFIER_VALUE syscall.Errno = 15114 + ERROR_MRM_NO_CANDIDATE syscall.Errno = 15115 + ERROR_MRM_NO_MATCH_OR_DEFAULT_CANDIDATE syscall.Errno = 15116 + ERROR_MRM_RESOURCE_TYPE_MISMATCH syscall.Errno = 15117 + ERROR_MRM_DUPLICATE_MAP_NAME syscall.Errno = 15118 + ERROR_MRM_DUPLICATE_ENTRY syscall.Errno = 15119 + ERROR_MRM_INVALID_RESOURCE_IDENTIFIER syscall.Errno = 15120 + ERROR_MRM_FILEPATH_TOO_LONG syscall.Errno = 15121 + ERROR_MRM_UNSUPPORTED_DIRECTORY_TYPE syscall.Errno = 15122 + ERROR_MRM_INVALID_PRI_FILE syscall.Errno = 15126 + ERROR_MRM_NAMED_RESOURCE_NOT_FOUND syscall.Errno = 15127 + ERROR_MRM_MAP_NOT_FOUND syscall.Errno = 15135 + ERROR_MRM_UNSUPPORTED_PROFILE_TYPE syscall.Errno = 15136 + ERROR_MRM_INVALID_QUALIFIER_OPERATOR syscall.Errno = 15137 + ERROR_MRM_INDETERMINATE_QUALIFIER_VALUE syscall.Errno = 15138 + ERROR_MRM_AUTOMERGE_ENABLED syscall.Errno = 15139 + ERROR_MRM_TOO_MANY_RESOURCES syscall.Errno = 15140 + ERROR_MRM_UNSUPPORTED_FILE_TYPE_FOR_MERGE syscall.Errno = 15141 + ERROR_MRM_UNSUPPORTED_FILE_TYPE_FOR_LOAD_UNLOAD_PRI_FILE syscall.Errno = 15142 + ERROR_MRM_NO_CURRENT_VIEW_ON_THREAD syscall.Errno = 15143 + ERROR_DIFFERENT_PROFILE_RESOURCE_MANAGER_EXIST syscall.Errno = 15144 + ERROR_OPERATION_NOT_ALLOWED_FROM_SYSTEM_COMPONENT syscall.Errno = 15145 + ERROR_MRM_DIRECT_REF_TO_NON_DEFAULT_RESOURCE syscall.Errno = 15146 + ERROR_MRM_GENERATION_COUNT_MISMATCH syscall.Errno = 15147 + ERROR_PRI_MERGE_VERSION_MISMATCH syscall.Errno = 15148 + ERROR_PRI_MERGE_MISSING_SCHEMA syscall.Errno = 15149 + ERROR_PRI_MERGE_LOAD_FILE_FAILED syscall.Errno = 15150 + ERROR_PRI_MERGE_ADD_FILE_FAILED syscall.Errno = 15151 + ERROR_PRI_MERGE_WRITE_FILE_FAILED syscall.Errno = 15152 + ERROR_PRI_MERGE_MULTIPLE_PACKAGE_FAMILIES_NOT_ALLOWED syscall.Errno = 15153 + ERROR_PRI_MERGE_MULTIPLE_MAIN_PACKAGES_NOT_ALLOWED syscall.Errno = 15154 + ERROR_PRI_MERGE_BUNDLE_PACKAGES_NOT_ALLOWED syscall.Errno = 15155 + ERROR_PRI_MERGE_MAIN_PACKAGE_REQUIRED syscall.Errno = 15156 + ERROR_PRI_MERGE_RESOURCE_PACKAGE_REQUIRED syscall.Errno = 15157 + ERROR_PRI_MERGE_INVALID_FILE_NAME syscall.Errno = 15158 + ERROR_MRM_PACKAGE_NOT_FOUND syscall.Errno = 15159 + ERROR_MCA_INVALID_CAPABILITIES_STRING syscall.Errno = 15200 + ERROR_MCA_INVALID_VCP_VERSION syscall.Errno = 15201 + ERROR_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION syscall.Errno = 15202 + ERROR_MCA_MCCS_VERSION_MISMATCH syscall.Errno = 15203 + ERROR_MCA_UNSUPPORTED_MCCS_VERSION syscall.Errno = 15204 + ERROR_MCA_INTERNAL_ERROR syscall.Errno = 15205 + ERROR_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED syscall.Errno = 15206 + ERROR_MCA_UNSUPPORTED_COLOR_TEMPERATURE syscall.Errno = 15207 + ERROR_AMBIGUOUS_SYSTEM_DEVICE syscall.Errno = 15250 + ERROR_SYSTEM_DEVICE_NOT_FOUND syscall.Errno = 15299 + ERROR_HASH_NOT_SUPPORTED syscall.Errno = 15300 + ERROR_HASH_NOT_PRESENT syscall.Errno = 15301 + ERROR_SECONDARY_IC_PROVIDER_NOT_REGISTERED syscall.Errno = 15321 + ERROR_GPIO_CLIENT_INFORMATION_INVALID syscall.Errno = 15322 + ERROR_GPIO_VERSION_NOT_SUPPORTED syscall.Errno = 15323 + ERROR_GPIO_INVALID_REGISTRATION_PACKET syscall.Errno = 15324 + ERROR_GPIO_OPERATION_DENIED syscall.Errno = 15325 + ERROR_GPIO_INCOMPATIBLE_CONNECT_MODE syscall.Errno = 15326 + ERROR_GPIO_INTERRUPT_ALREADY_UNMASKED syscall.Errno = 15327 + ERROR_CANNOT_SWITCH_RUNLEVEL syscall.Errno = 15400 + ERROR_INVALID_RUNLEVEL_SETTING syscall.Errno = 15401 + ERROR_RUNLEVEL_SWITCH_TIMEOUT syscall.Errno = 15402 + ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT syscall.Errno = 15403 + ERROR_RUNLEVEL_SWITCH_IN_PROGRESS syscall.Errno = 15404 + ERROR_SERVICES_FAILED_AUTOSTART syscall.Errno = 15405 + ERROR_COM_TASK_STOP_PENDING syscall.Errno = 15501 + ERROR_INSTALL_OPEN_PACKAGE_FAILED syscall.Errno = 15600 + ERROR_INSTALL_PACKAGE_NOT_FOUND syscall.Errno = 15601 + ERROR_INSTALL_INVALID_PACKAGE syscall.Errno = 15602 + ERROR_INSTALL_RESOLVE_DEPENDENCY_FAILED syscall.Errno = 15603 + ERROR_INSTALL_OUT_OF_DISK_SPACE syscall.Errno = 15604 + ERROR_INSTALL_NETWORK_FAILURE syscall.Errno = 15605 + ERROR_INSTALL_REGISTRATION_FAILURE syscall.Errno = 15606 + ERROR_INSTALL_DEREGISTRATION_FAILURE syscall.Errno = 15607 + ERROR_INSTALL_CANCEL syscall.Errno = 15608 + ERROR_INSTALL_FAILED syscall.Errno = 15609 + ERROR_REMOVE_FAILED syscall.Errno = 15610 + ERROR_PACKAGE_ALREADY_EXISTS syscall.Errno = 15611 + ERROR_NEEDS_REMEDIATION syscall.Errno = 15612 + ERROR_INSTALL_PREREQUISITE_FAILED syscall.Errno = 15613 + ERROR_PACKAGE_REPOSITORY_CORRUPTED syscall.Errno = 15614 + ERROR_INSTALL_POLICY_FAILURE syscall.Errno = 15615 + ERROR_PACKAGE_UPDATING syscall.Errno = 15616 + ERROR_DEPLOYMENT_BLOCKED_BY_POLICY syscall.Errno = 15617 + ERROR_PACKAGES_IN_USE syscall.Errno = 15618 + ERROR_RECOVERY_FILE_CORRUPT syscall.Errno = 15619 + ERROR_INVALID_STAGED_SIGNATURE syscall.Errno = 15620 + ERROR_DELETING_EXISTING_APPLICATIONDATA_STORE_FAILED syscall.Errno = 15621 + ERROR_INSTALL_PACKAGE_DOWNGRADE syscall.Errno = 15622 + ERROR_SYSTEM_NEEDS_REMEDIATION syscall.Errno = 15623 + ERROR_APPX_INTEGRITY_FAILURE_CLR_NGEN syscall.Errno = 15624 + ERROR_RESILIENCY_FILE_CORRUPT syscall.Errno = 15625 + ERROR_INSTALL_FIREWALL_SERVICE_NOT_RUNNING syscall.Errno = 15626 + ERROR_PACKAGE_MOVE_FAILED syscall.Errno = 15627 + ERROR_INSTALL_VOLUME_NOT_EMPTY syscall.Errno = 15628 + ERROR_INSTALL_VOLUME_OFFLINE syscall.Errno = 15629 + ERROR_INSTALL_VOLUME_CORRUPT syscall.Errno = 15630 + ERROR_NEEDS_REGISTRATION syscall.Errno = 15631 + ERROR_INSTALL_WRONG_PROCESSOR_ARCHITECTURE syscall.Errno = 15632 + ERROR_DEV_SIDELOAD_LIMIT_EXCEEDED syscall.Errno = 15633 + ERROR_INSTALL_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE syscall.Errno = 15634 + ERROR_PACKAGE_NOT_SUPPORTED_ON_FILESYSTEM syscall.Errno = 15635 + ERROR_PACKAGE_MOVE_BLOCKED_BY_STREAMING syscall.Errno = 15636 + ERROR_INSTALL_OPTIONAL_PACKAGE_APPLICATIONID_NOT_UNIQUE syscall.Errno = 15637 + ERROR_PACKAGE_STAGING_ONHOLD syscall.Errno = 15638 + ERROR_INSTALL_INVALID_RELATED_SET_UPDATE syscall.Errno = 15639 + ERROR_INSTALL_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE_FULLTRUST_CAPABILITY syscall.Errno = 15640 + ERROR_DEPLOYMENT_BLOCKED_BY_USER_LOG_OFF syscall.Errno = 15641 + ERROR_PROVISION_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE_PROVISIONED syscall.Errno = 15642 + ERROR_PACKAGES_REPUTATION_CHECK_FAILED syscall.Errno = 15643 + ERROR_PACKAGES_REPUTATION_CHECK_TIMEDOUT syscall.Errno = 15644 + ERROR_DEPLOYMENT_OPTION_NOT_SUPPORTED syscall.Errno = 15645 + ERROR_APPINSTALLER_ACTIVATION_BLOCKED syscall.Errno = 15646 + ERROR_REGISTRATION_FROM_REMOTE_DRIVE_NOT_SUPPORTED syscall.Errno = 15647 + APPMODEL_ERROR_NO_PACKAGE syscall.Errno = 15700 + APPMODEL_ERROR_PACKAGE_RUNTIME_CORRUPT syscall.Errno = 15701 + APPMODEL_ERROR_PACKAGE_IDENTITY_CORRUPT syscall.Errno = 15702 + APPMODEL_ERROR_NO_APPLICATION syscall.Errno = 15703 + APPMODEL_ERROR_DYNAMIC_PROPERTY_READ_FAILED syscall.Errno = 15704 + APPMODEL_ERROR_DYNAMIC_PROPERTY_INVALID syscall.Errno = 15705 + APPMODEL_ERROR_PACKAGE_NOT_AVAILABLE syscall.Errno = 15706 + ERROR_STATE_LOAD_STORE_FAILED syscall.Errno = 15800 + ERROR_STATE_GET_VERSION_FAILED syscall.Errno = 15801 + ERROR_STATE_SET_VERSION_FAILED syscall.Errno = 15802 + ERROR_STATE_STRUCTURED_RESET_FAILED syscall.Errno = 15803 + ERROR_STATE_OPEN_CONTAINER_FAILED syscall.Errno = 15804 + ERROR_STATE_CREATE_CONTAINER_FAILED syscall.Errno = 15805 + ERROR_STATE_DELETE_CONTAINER_FAILED syscall.Errno = 15806 + ERROR_STATE_READ_SETTING_FAILED syscall.Errno = 15807 + ERROR_STATE_WRITE_SETTING_FAILED syscall.Errno = 15808 + ERROR_STATE_DELETE_SETTING_FAILED syscall.Errno = 15809 + ERROR_STATE_QUERY_SETTING_FAILED syscall.Errno = 15810 + ERROR_STATE_READ_COMPOSITE_SETTING_FAILED syscall.Errno = 15811 + ERROR_STATE_WRITE_COMPOSITE_SETTING_FAILED syscall.Errno = 15812 + ERROR_STATE_ENUMERATE_CONTAINER_FAILED syscall.Errno = 15813 + ERROR_STATE_ENUMERATE_SETTINGS_FAILED syscall.Errno = 15814 + ERROR_STATE_COMPOSITE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED syscall.Errno = 15815 + ERROR_STATE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED syscall.Errno = 15816 + ERROR_STATE_SETTING_NAME_SIZE_LIMIT_EXCEEDED syscall.Errno = 15817 + ERROR_STATE_CONTAINER_NAME_SIZE_LIMIT_EXCEEDED syscall.Errno = 15818 + ERROR_API_UNAVAILABLE syscall.Errno = 15841 + STORE_ERROR_UNLICENSED syscall.Errno = 15861 + STORE_ERROR_UNLICENSED_USER syscall.Errno = 15862 + STORE_ERROR_PENDING_COM_TRANSACTION syscall.Errno = 15863 + STORE_ERROR_LICENSE_REVOKED syscall.Errno = 15864 + SEVERITY_SUCCESS syscall.Errno = 0 + SEVERITY_ERROR syscall.Errno = 1 + FACILITY_NT_BIT = 0x10000000 + E_NOT_SET = ERROR_NOT_FOUND + E_NOT_VALID_STATE = ERROR_INVALID_STATE + E_NOT_SUFFICIENT_BUFFER = ERROR_INSUFFICIENT_BUFFER + E_TIME_CRITICAL_THREAD = ERROR_TIME_CRITICAL_THREAD + NOERROR syscall.Errno = 0 + E_UNEXPECTED Handle = 0x8000FFFF + E_NOTIMPL Handle = 0x80004001 + E_OUTOFMEMORY Handle = 0x8007000E + E_INVALIDARG Handle = 0x80070057 + E_NOINTERFACE Handle = 0x80004002 + E_POINTER Handle = 0x80004003 + E_HANDLE Handle = 0x80070006 + E_ABORT Handle = 0x80004004 + E_FAIL Handle = 0x80004005 + E_ACCESSDENIED Handle = 0x80070005 + E_PENDING Handle = 0x8000000A + E_BOUNDS Handle = 0x8000000B + E_CHANGED_STATE Handle = 0x8000000C + E_ILLEGAL_STATE_CHANGE Handle = 0x8000000D + E_ILLEGAL_METHOD_CALL Handle = 0x8000000E + RO_E_METADATA_NAME_NOT_FOUND Handle = 0x8000000F + RO_E_METADATA_NAME_IS_NAMESPACE Handle = 0x80000010 + RO_E_METADATA_INVALID_TYPE_FORMAT Handle = 0x80000011 + RO_E_INVALID_METADATA_FILE Handle = 0x80000012 + RO_E_CLOSED Handle = 0x80000013 + RO_E_EXCLUSIVE_WRITE Handle = 0x80000014 + RO_E_CHANGE_NOTIFICATION_IN_PROGRESS Handle = 0x80000015 + RO_E_ERROR_STRING_NOT_FOUND Handle = 0x80000016 + E_STRING_NOT_NULL_TERMINATED Handle = 0x80000017 + E_ILLEGAL_DELEGATE_ASSIGNMENT Handle = 0x80000018 + E_ASYNC_OPERATION_NOT_STARTED Handle = 0x80000019 + E_APPLICATION_EXITING Handle = 0x8000001A + E_APPLICATION_VIEW_EXITING Handle = 0x8000001B + RO_E_MUST_BE_AGILE Handle = 0x8000001C + RO_E_UNSUPPORTED_FROM_MTA Handle = 0x8000001D + RO_E_COMMITTED Handle = 0x8000001E + RO_E_BLOCKED_CROSS_ASTA_CALL Handle = 0x8000001F + RO_E_CANNOT_ACTIVATE_FULL_TRUST_SERVER Handle = 0x80000020 + RO_E_CANNOT_ACTIVATE_UNIVERSAL_APPLICATION_SERVER Handle = 0x80000021 + CO_E_INIT_TLS Handle = 0x80004006 + CO_E_INIT_SHARED_ALLOCATOR Handle = 0x80004007 + CO_E_INIT_MEMORY_ALLOCATOR Handle = 0x80004008 + CO_E_INIT_CLASS_CACHE Handle = 0x80004009 + CO_E_INIT_RPC_CHANNEL Handle = 0x8000400A + CO_E_INIT_TLS_SET_CHANNEL_CONTROL Handle = 0x8000400B + CO_E_INIT_TLS_CHANNEL_CONTROL Handle = 0x8000400C + CO_E_INIT_UNACCEPTED_USER_ALLOCATOR Handle = 0x8000400D + CO_E_INIT_SCM_MUTEX_EXISTS Handle = 0x8000400E + CO_E_INIT_SCM_FILE_MAPPING_EXISTS Handle = 0x8000400F + CO_E_INIT_SCM_MAP_VIEW_OF_FILE Handle = 0x80004010 + CO_E_INIT_SCM_EXEC_FAILURE Handle = 0x80004011 + CO_E_INIT_ONLY_SINGLE_THREADED Handle = 0x80004012 + CO_E_CANT_REMOTE Handle = 0x80004013 + CO_E_BAD_SERVER_NAME Handle = 0x80004014 + CO_E_WRONG_SERVER_IDENTITY Handle = 0x80004015 + CO_E_OLE1DDE_DISABLED Handle = 0x80004016 + CO_E_RUNAS_SYNTAX Handle = 0x80004017 + CO_E_CREATEPROCESS_FAILURE Handle = 0x80004018 + CO_E_RUNAS_CREATEPROCESS_FAILURE Handle = 0x80004019 + CO_E_RUNAS_LOGON_FAILURE Handle = 0x8000401A + CO_E_LAUNCH_PERMSSION_DENIED Handle = 0x8000401B + CO_E_START_SERVICE_FAILURE Handle = 0x8000401C + CO_E_REMOTE_COMMUNICATION_FAILURE Handle = 0x8000401D + CO_E_SERVER_START_TIMEOUT Handle = 0x8000401E + CO_E_CLSREG_INCONSISTENT Handle = 0x8000401F + CO_E_IIDREG_INCONSISTENT Handle = 0x80004020 + CO_E_NOT_SUPPORTED Handle = 0x80004021 + CO_E_RELOAD_DLL Handle = 0x80004022 + CO_E_MSI_ERROR Handle = 0x80004023 + CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT Handle = 0x80004024 + CO_E_SERVER_PAUSED Handle = 0x80004025 + CO_E_SERVER_NOT_PAUSED Handle = 0x80004026 + CO_E_CLASS_DISABLED Handle = 0x80004027 + CO_E_CLRNOTAVAILABLE Handle = 0x80004028 + CO_E_ASYNC_WORK_REJECTED Handle = 0x80004029 + CO_E_SERVER_INIT_TIMEOUT Handle = 0x8000402A + CO_E_NO_SECCTX_IN_ACTIVATE Handle = 0x8000402B + CO_E_TRACKER_CONFIG Handle = 0x80004030 + CO_E_THREADPOOL_CONFIG Handle = 0x80004031 + CO_E_SXS_CONFIG Handle = 0x80004032 + CO_E_MALFORMED_SPN Handle = 0x80004033 + CO_E_UNREVOKED_REGISTRATION_ON_APARTMENT_SHUTDOWN Handle = 0x80004034 + CO_E_PREMATURE_STUB_RUNDOWN Handle = 0x80004035 + S_OK Handle = 0 + S_FALSE Handle = 1 + OLE_E_FIRST Handle = 0x80040000 + OLE_E_LAST Handle = 0x800400FF + OLE_S_FIRST Handle = 0x00040000 + OLE_S_LAST Handle = 0x000400FF + OLE_E_OLEVERB Handle = 0x80040000 + OLE_E_ADVF Handle = 0x80040001 + OLE_E_ENUM_NOMORE Handle = 0x80040002 + OLE_E_ADVISENOTSUPPORTED Handle = 0x80040003 + OLE_E_NOCONNECTION Handle = 0x80040004 + OLE_E_NOTRUNNING Handle = 0x80040005 + OLE_E_NOCACHE Handle = 0x80040006 + OLE_E_BLANK Handle = 0x80040007 + OLE_E_CLASSDIFF Handle = 0x80040008 + OLE_E_CANT_GETMONIKER Handle = 0x80040009 + OLE_E_CANT_BINDTOSOURCE Handle = 0x8004000A + OLE_E_STATIC Handle = 0x8004000B + OLE_E_PROMPTSAVECANCELLED Handle = 0x8004000C + OLE_E_INVALIDRECT Handle = 0x8004000D + OLE_E_WRONGCOMPOBJ Handle = 0x8004000E + OLE_E_INVALIDHWND Handle = 0x8004000F + OLE_E_NOT_INPLACEACTIVE Handle = 0x80040010 + OLE_E_CANTCONVERT Handle = 0x80040011 + OLE_E_NOSTORAGE Handle = 0x80040012 + DV_E_FORMATETC Handle = 0x80040064 + DV_E_DVTARGETDEVICE Handle = 0x80040065 + DV_E_STGMEDIUM Handle = 0x80040066 + DV_E_STATDATA Handle = 0x80040067 + DV_E_LINDEX Handle = 0x80040068 + DV_E_TYMED Handle = 0x80040069 + DV_E_CLIPFORMAT Handle = 0x8004006A + DV_E_DVASPECT Handle = 0x8004006B + DV_E_DVTARGETDEVICE_SIZE Handle = 0x8004006C + DV_E_NOIVIEWOBJECT Handle = 0x8004006D + DRAGDROP_E_FIRST syscall.Errno = 0x80040100 + DRAGDROP_E_LAST syscall.Errno = 0x8004010F + DRAGDROP_S_FIRST syscall.Errno = 0x00040100 + DRAGDROP_S_LAST syscall.Errno = 0x0004010F + DRAGDROP_E_NOTREGISTERED Handle = 0x80040100 + DRAGDROP_E_ALREADYREGISTERED Handle = 0x80040101 + DRAGDROP_E_INVALIDHWND Handle = 0x80040102 + DRAGDROP_E_CONCURRENT_DRAG_ATTEMPTED Handle = 0x80040103 + CLASSFACTORY_E_FIRST syscall.Errno = 0x80040110 + CLASSFACTORY_E_LAST syscall.Errno = 0x8004011F + CLASSFACTORY_S_FIRST syscall.Errno = 0x00040110 + CLASSFACTORY_S_LAST syscall.Errno = 0x0004011F + CLASS_E_NOAGGREGATION Handle = 0x80040110 + CLASS_E_CLASSNOTAVAILABLE Handle = 0x80040111 + CLASS_E_NOTLICENSED Handle = 0x80040112 + MARSHAL_E_FIRST syscall.Errno = 0x80040120 + MARSHAL_E_LAST syscall.Errno = 0x8004012F + MARSHAL_S_FIRST syscall.Errno = 0x00040120 + MARSHAL_S_LAST syscall.Errno = 0x0004012F + DATA_E_FIRST syscall.Errno = 0x80040130 + DATA_E_LAST syscall.Errno = 0x8004013F + DATA_S_FIRST syscall.Errno = 0x00040130 + DATA_S_LAST syscall.Errno = 0x0004013F + VIEW_E_FIRST syscall.Errno = 0x80040140 + VIEW_E_LAST syscall.Errno = 0x8004014F + VIEW_S_FIRST syscall.Errno = 0x00040140 + VIEW_S_LAST syscall.Errno = 0x0004014F + VIEW_E_DRAW Handle = 0x80040140 + REGDB_E_FIRST syscall.Errno = 0x80040150 + REGDB_E_LAST syscall.Errno = 0x8004015F + REGDB_S_FIRST syscall.Errno = 0x00040150 + REGDB_S_LAST syscall.Errno = 0x0004015F + REGDB_E_READREGDB Handle = 0x80040150 + REGDB_E_WRITEREGDB Handle = 0x80040151 + REGDB_E_KEYMISSING Handle = 0x80040152 + REGDB_E_INVALIDVALUE Handle = 0x80040153 + REGDB_E_CLASSNOTREG Handle = 0x80040154 + REGDB_E_IIDNOTREG Handle = 0x80040155 + REGDB_E_BADTHREADINGMODEL Handle = 0x80040156 + REGDB_E_PACKAGEPOLICYVIOLATION Handle = 0x80040157 + CAT_E_FIRST syscall.Errno = 0x80040160 + CAT_E_LAST syscall.Errno = 0x80040161 + CAT_E_CATIDNOEXIST Handle = 0x80040160 + CAT_E_NODESCRIPTION Handle = 0x80040161 + CS_E_FIRST syscall.Errno = 0x80040164 + CS_E_LAST syscall.Errno = 0x8004016F + CS_E_PACKAGE_NOTFOUND Handle = 0x80040164 + CS_E_NOT_DELETABLE Handle = 0x80040165 + CS_E_CLASS_NOTFOUND Handle = 0x80040166 + CS_E_INVALID_VERSION Handle = 0x80040167 + CS_E_NO_CLASSSTORE Handle = 0x80040168 + CS_E_OBJECT_NOTFOUND Handle = 0x80040169 + CS_E_OBJECT_ALREADY_EXISTS Handle = 0x8004016A + CS_E_INVALID_PATH Handle = 0x8004016B + CS_E_NETWORK_ERROR Handle = 0x8004016C + CS_E_ADMIN_LIMIT_EXCEEDED Handle = 0x8004016D + CS_E_SCHEMA_MISMATCH Handle = 0x8004016E + CS_E_INTERNAL_ERROR Handle = 0x8004016F + CACHE_E_FIRST syscall.Errno = 0x80040170 + CACHE_E_LAST syscall.Errno = 0x8004017F + CACHE_S_FIRST syscall.Errno = 0x00040170 + CACHE_S_LAST syscall.Errno = 0x0004017F + CACHE_E_NOCACHE_UPDATED Handle = 0x80040170 + OLEOBJ_E_FIRST syscall.Errno = 0x80040180 + OLEOBJ_E_LAST syscall.Errno = 0x8004018F + OLEOBJ_S_FIRST syscall.Errno = 0x00040180 + OLEOBJ_S_LAST syscall.Errno = 0x0004018F + OLEOBJ_E_NOVERBS Handle = 0x80040180 + OLEOBJ_E_INVALIDVERB Handle = 0x80040181 + CLIENTSITE_E_FIRST syscall.Errno = 0x80040190 + CLIENTSITE_E_LAST syscall.Errno = 0x8004019F + CLIENTSITE_S_FIRST syscall.Errno = 0x00040190 + CLIENTSITE_S_LAST syscall.Errno = 0x0004019F + INPLACE_E_NOTUNDOABLE Handle = 0x800401A0 + INPLACE_E_NOTOOLSPACE Handle = 0x800401A1 + INPLACE_E_FIRST syscall.Errno = 0x800401A0 + INPLACE_E_LAST syscall.Errno = 0x800401AF + INPLACE_S_FIRST syscall.Errno = 0x000401A0 + INPLACE_S_LAST syscall.Errno = 0x000401AF + ENUM_E_FIRST syscall.Errno = 0x800401B0 + ENUM_E_LAST syscall.Errno = 0x800401BF + ENUM_S_FIRST syscall.Errno = 0x000401B0 + ENUM_S_LAST syscall.Errno = 0x000401BF + CONVERT10_E_FIRST syscall.Errno = 0x800401C0 + CONVERT10_E_LAST syscall.Errno = 0x800401CF + CONVERT10_S_FIRST syscall.Errno = 0x000401C0 + CONVERT10_S_LAST syscall.Errno = 0x000401CF + CONVERT10_E_OLESTREAM_GET Handle = 0x800401C0 + CONVERT10_E_OLESTREAM_PUT Handle = 0x800401C1 + CONVERT10_E_OLESTREAM_FMT Handle = 0x800401C2 + CONVERT10_E_OLESTREAM_BITMAP_TO_DIB Handle = 0x800401C3 + CONVERT10_E_STG_FMT Handle = 0x800401C4 + CONVERT10_E_STG_NO_STD_STREAM Handle = 0x800401C5 + CONVERT10_E_STG_DIB_TO_BITMAP Handle = 0x800401C6 + CLIPBRD_E_FIRST syscall.Errno = 0x800401D0 + CLIPBRD_E_LAST syscall.Errno = 0x800401DF + CLIPBRD_S_FIRST syscall.Errno = 0x000401D0 + CLIPBRD_S_LAST syscall.Errno = 0x000401DF + CLIPBRD_E_CANT_OPEN Handle = 0x800401D0 + CLIPBRD_E_CANT_EMPTY Handle = 0x800401D1 + CLIPBRD_E_CANT_SET Handle = 0x800401D2 + CLIPBRD_E_BAD_DATA Handle = 0x800401D3 + CLIPBRD_E_CANT_CLOSE Handle = 0x800401D4 + MK_E_FIRST syscall.Errno = 0x800401E0 + MK_E_LAST syscall.Errno = 0x800401EF + MK_S_FIRST syscall.Errno = 0x000401E0 + MK_S_LAST syscall.Errno = 0x000401EF + MK_E_CONNECTMANUALLY Handle = 0x800401E0 + MK_E_EXCEEDEDDEADLINE Handle = 0x800401E1 + MK_E_NEEDGENERIC Handle = 0x800401E2 + MK_E_UNAVAILABLE Handle = 0x800401E3 + MK_E_SYNTAX Handle = 0x800401E4 + MK_E_NOOBJECT Handle = 0x800401E5 + MK_E_INVALIDEXTENSION Handle = 0x800401E6 + MK_E_INTERMEDIATEINTERFACENOTSUPPORTED Handle = 0x800401E7 + MK_E_NOTBINDABLE Handle = 0x800401E8 + MK_E_NOTBOUND Handle = 0x800401E9 + MK_E_CANTOPENFILE Handle = 0x800401EA + MK_E_MUSTBOTHERUSER Handle = 0x800401EB + MK_E_NOINVERSE Handle = 0x800401EC + MK_E_NOSTORAGE Handle = 0x800401ED + MK_E_NOPREFIX Handle = 0x800401EE + MK_E_ENUMERATION_FAILED Handle = 0x800401EF + CO_E_FIRST syscall.Errno = 0x800401F0 + CO_E_LAST syscall.Errno = 0x800401FF + CO_S_FIRST syscall.Errno = 0x000401F0 + CO_S_LAST syscall.Errno = 0x000401FF + CO_E_NOTINITIALIZED Handle = 0x800401F0 + CO_E_ALREADYINITIALIZED Handle = 0x800401F1 + CO_E_CANTDETERMINECLASS Handle = 0x800401F2 + CO_E_CLASSSTRING Handle = 0x800401F3 + CO_E_IIDSTRING Handle = 0x800401F4 + CO_E_APPNOTFOUND Handle = 0x800401F5 + CO_E_APPSINGLEUSE Handle = 0x800401F6 + CO_E_ERRORINAPP Handle = 0x800401F7 + CO_E_DLLNOTFOUND Handle = 0x800401F8 + CO_E_ERRORINDLL Handle = 0x800401F9 + CO_E_WRONGOSFORAPP Handle = 0x800401FA + CO_E_OBJNOTREG Handle = 0x800401FB + CO_E_OBJISREG Handle = 0x800401FC + CO_E_OBJNOTCONNECTED Handle = 0x800401FD + CO_E_APPDIDNTREG Handle = 0x800401FE + CO_E_RELEASED Handle = 0x800401FF + EVENT_E_FIRST syscall.Errno = 0x80040200 + EVENT_E_LAST syscall.Errno = 0x8004021F + EVENT_S_FIRST syscall.Errno = 0x00040200 + EVENT_S_LAST syscall.Errno = 0x0004021F + EVENT_S_SOME_SUBSCRIBERS_FAILED Handle = 0x00040200 + EVENT_E_ALL_SUBSCRIBERS_FAILED Handle = 0x80040201 + EVENT_S_NOSUBSCRIBERS Handle = 0x00040202 + EVENT_E_QUERYSYNTAX Handle = 0x80040203 + EVENT_E_QUERYFIELD Handle = 0x80040204 + EVENT_E_INTERNALEXCEPTION Handle = 0x80040205 + EVENT_E_INTERNALERROR Handle = 0x80040206 + EVENT_E_INVALID_PER_USER_SID Handle = 0x80040207 + EVENT_E_USER_EXCEPTION Handle = 0x80040208 + EVENT_E_TOO_MANY_METHODS Handle = 0x80040209 + EVENT_E_MISSING_EVENTCLASS Handle = 0x8004020A + EVENT_E_NOT_ALL_REMOVED Handle = 0x8004020B + EVENT_E_COMPLUS_NOT_INSTALLED Handle = 0x8004020C + EVENT_E_CANT_MODIFY_OR_DELETE_UNCONFIGURED_OBJECT Handle = 0x8004020D + EVENT_E_CANT_MODIFY_OR_DELETE_CONFIGURED_OBJECT Handle = 0x8004020E + EVENT_E_INVALID_EVENT_CLASS_PARTITION Handle = 0x8004020F + EVENT_E_PER_USER_SID_NOT_LOGGED_ON Handle = 0x80040210 + TPC_E_INVALID_PROPERTY Handle = 0x80040241 + TPC_E_NO_DEFAULT_TABLET Handle = 0x80040212 + TPC_E_UNKNOWN_PROPERTY Handle = 0x8004021B + TPC_E_INVALID_INPUT_RECT Handle = 0x80040219 + TPC_E_INVALID_STROKE Handle = 0x80040222 + TPC_E_INITIALIZE_FAIL Handle = 0x80040223 + TPC_E_NOT_RELEVANT Handle = 0x80040232 + TPC_E_INVALID_PACKET_DESCRIPTION Handle = 0x80040233 + TPC_E_RECOGNIZER_NOT_REGISTERED Handle = 0x80040235 + TPC_E_INVALID_RIGHTS Handle = 0x80040236 + TPC_E_OUT_OF_ORDER_CALL Handle = 0x80040237 + TPC_E_QUEUE_FULL Handle = 0x80040238 + TPC_E_INVALID_CONFIGURATION Handle = 0x80040239 + TPC_E_INVALID_DATA_FROM_RECOGNIZER Handle = 0x8004023A + TPC_S_TRUNCATED Handle = 0x00040252 + TPC_S_INTERRUPTED Handle = 0x00040253 + TPC_S_NO_DATA_TO_PROCESS Handle = 0x00040254 + XACT_E_FIRST syscall.Errno = 0x8004D000 + XACT_E_LAST syscall.Errno = 0x8004D02B + XACT_S_FIRST syscall.Errno = 0x0004D000 + XACT_S_LAST syscall.Errno = 0x0004D010 + XACT_E_ALREADYOTHERSINGLEPHASE Handle = 0x8004D000 + XACT_E_CANTRETAIN Handle = 0x8004D001 + XACT_E_COMMITFAILED Handle = 0x8004D002 + XACT_E_COMMITPREVENTED Handle = 0x8004D003 + XACT_E_HEURISTICABORT Handle = 0x8004D004 + XACT_E_HEURISTICCOMMIT Handle = 0x8004D005 + XACT_E_HEURISTICDAMAGE Handle = 0x8004D006 + XACT_E_HEURISTICDANGER Handle = 0x8004D007 + XACT_E_ISOLATIONLEVEL Handle = 0x8004D008 + XACT_E_NOASYNC Handle = 0x8004D009 + XACT_E_NOENLIST Handle = 0x8004D00A + XACT_E_NOISORETAIN Handle = 0x8004D00B + XACT_E_NORESOURCE Handle = 0x8004D00C + XACT_E_NOTCURRENT Handle = 0x8004D00D + XACT_E_NOTRANSACTION Handle = 0x8004D00E + XACT_E_NOTSUPPORTED Handle = 0x8004D00F + XACT_E_UNKNOWNRMGRID Handle = 0x8004D010 + XACT_E_WRONGSTATE Handle = 0x8004D011 + XACT_E_WRONGUOW Handle = 0x8004D012 + XACT_E_XTIONEXISTS Handle = 0x8004D013 + XACT_E_NOIMPORTOBJECT Handle = 0x8004D014 + XACT_E_INVALIDCOOKIE Handle = 0x8004D015 + XACT_E_INDOUBT Handle = 0x8004D016 + XACT_E_NOTIMEOUT Handle = 0x8004D017 + XACT_E_ALREADYINPROGRESS Handle = 0x8004D018 + XACT_E_ABORTED Handle = 0x8004D019 + XACT_E_LOGFULL Handle = 0x8004D01A + XACT_E_TMNOTAVAILABLE Handle = 0x8004D01B + XACT_E_CONNECTION_DOWN Handle = 0x8004D01C + XACT_E_CONNECTION_DENIED Handle = 0x8004D01D + XACT_E_REENLISTTIMEOUT Handle = 0x8004D01E + XACT_E_TIP_CONNECT_FAILED Handle = 0x8004D01F + XACT_E_TIP_PROTOCOL_ERROR Handle = 0x8004D020 + XACT_E_TIP_PULL_FAILED Handle = 0x8004D021 + XACT_E_DEST_TMNOTAVAILABLE Handle = 0x8004D022 + XACT_E_TIP_DISABLED Handle = 0x8004D023 + XACT_E_NETWORK_TX_DISABLED Handle = 0x8004D024 + XACT_E_PARTNER_NETWORK_TX_DISABLED Handle = 0x8004D025 + XACT_E_XA_TX_DISABLED Handle = 0x8004D026 + XACT_E_UNABLE_TO_READ_DTC_CONFIG Handle = 0x8004D027 + XACT_E_UNABLE_TO_LOAD_DTC_PROXY Handle = 0x8004D028 + XACT_E_ABORTING Handle = 0x8004D029 + XACT_E_PUSH_COMM_FAILURE Handle = 0x8004D02A + XACT_E_PULL_COMM_FAILURE Handle = 0x8004D02B + XACT_E_LU_TX_DISABLED Handle = 0x8004D02C + XACT_E_CLERKNOTFOUND Handle = 0x8004D080 + XACT_E_CLERKEXISTS Handle = 0x8004D081 + XACT_E_RECOVERYINPROGRESS Handle = 0x8004D082 + XACT_E_TRANSACTIONCLOSED Handle = 0x8004D083 + XACT_E_INVALIDLSN Handle = 0x8004D084 + XACT_E_REPLAYREQUEST Handle = 0x8004D085 + XACT_S_ASYNC Handle = 0x0004D000 + XACT_S_DEFECT Handle = 0x0004D001 + XACT_S_READONLY Handle = 0x0004D002 + XACT_S_SOMENORETAIN Handle = 0x0004D003 + XACT_S_OKINFORM Handle = 0x0004D004 + XACT_S_MADECHANGESCONTENT Handle = 0x0004D005 + XACT_S_MADECHANGESINFORM Handle = 0x0004D006 + XACT_S_ALLNORETAIN Handle = 0x0004D007 + XACT_S_ABORTING Handle = 0x0004D008 + XACT_S_SINGLEPHASE Handle = 0x0004D009 + XACT_S_LOCALLY_OK Handle = 0x0004D00A + XACT_S_LASTRESOURCEMANAGER Handle = 0x0004D010 + CONTEXT_E_FIRST syscall.Errno = 0x8004E000 + CONTEXT_E_LAST syscall.Errno = 0x8004E02F + CONTEXT_S_FIRST syscall.Errno = 0x0004E000 + CONTEXT_S_LAST syscall.Errno = 0x0004E02F + CONTEXT_E_ABORTED Handle = 0x8004E002 + CONTEXT_E_ABORTING Handle = 0x8004E003 + CONTEXT_E_NOCONTEXT Handle = 0x8004E004 + CONTEXT_E_WOULD_DEADLOCK Handle = 0x8004E005 + CONTEXT_E_SYNCH_TIMEOUT Handle = 0x8004E006 + CONTEXT_E_OLDREF Handle = 0x8004E007 + CONTEXT_E_ROLENOTFOUND Handle = 0x8004E00C + CONTEXT_E_TMNOTAVAILABLE Handle = 0x8004E00F + CO_E_ACTIVATIONFAILED Handle = 0x8004E021 + CO_E_ACTIVATIONFAILED_EVENTLOGGED Handle = 0x8004E022 + CO_E_ACTIVATIONFAILED_CATALOGERROR Handle = 0x8004E023 + CO_E_ACTIVATIONFAILED_TIMEOUT Handle = 0x8004E024 + CO_E_INITIALIZATIONFAILED Handle = 0x8004E025 + CONTEXT_E_NOJIT Handle = 0x8004E026 + CONTEXT_E_NOTRANSACTION Handle = 0x8004E027 + CO_E_THREADINGMODEL_CHANGED Handle = 0x8004E028 + CO_E_NOIISINTRINSICS Handle = 0x8004E029 + CO_E_NOCOOKIES Handle = 0x8004E02A + CO_E_DBERROR Handle = 0x8004E02B + CO_E_NOTPOOLED Handle = 0x8004E02C + CO_E_NOTCONSTRUCTED Handle = 0x8004E02D + CO_E_NOSYNCHRONIZATION Handle = 0x8004E02E + CO_E_ISOLEVELMISMATCH Handle = 0x8004E02F + CO_E_CALL_OUT_OF_TX_SCOPE_NOT_ALLOWED Handle = 0x8004E030 + CO_E_EXIT_TRANSACTION_SCOPE_NOT_CALLED Handle = 0x8004E031 + OLE_S_USEREG Handle = 0x00040000 + OLE_S_STATIC Handle = 0x00040001 + OLE_S_MAC_CLIPFORMAT Handle = 0x00040002 + DRAGDROP_S_DROP Handle = 0x00040100 + DRAGDROP_S_CANCEL Handle = 0x00040101 + DRAGDROP_S_USEDEFAULTCURSORS Handle = 0x00040102 + DATA_S_SAMEFORMATETC Handle = 0x00040130 + VIEW_S_ALREADY_FROZEN Handle = 0x00040140 + CACHE_S_FORMATETC_NOTSUPPORTED Handle = 0x00040170 + CACHE_S_SAMECACHE Handle = 0x00040171 + CACHE_S_SOMECACHES_NOTUPDATED Handle = 0x00040172 + OLEOBJ_S_INVALIDVERB Handle = 0x00040180 + OLEOBJ_S_CANNOT_DOVERB_NOW Handle = 0x00040181 + OLEOBJ_S_INVALIDHWND Handle = 0x00040182 + INPLACE_S_TRUNCATED Handle = 0x000401A0 + CONVERT10_S_NO_PRESENTATION Handle = 0x000401C0 + MK_S_REDUCED_TO_SELF Handle = 0x000401E2 + MK_S_ME Handle = 0x000401E4 + MK_S_HIM Handle = 0x000401E5 + MK_S_US Handle = 0x000401E6 + MK_S_MONIKERALREADYREGISTERED Handle = 0x000401E7 + SCHED_S_TASK_READY Handle = 0x00041300 + SCHED_S_TASK_RUNNING Handle = 0x00041301 + SCHED_S_TASK_DISABLED Handle = 0x00041302 + SCHED_S_TASK_HAS_NOT_RUN Handle = 0x00041303 + SCHED_S_TASK_NO_MORE_RUNS Handle = 0x00041304 + SCHED_S_TASK_NOT_SCHEDULED Handle = 0x00041305 + SCHED_S_TASK_TERMINATED Handle = 0x00041306 + SCHED_S_TASK_NO_VALID_TRIGGERS Handle = 0x00041307 + SCHED_S_EVENT_TRIGGER Handle = 0x00041308 + SCHED_E_TRIGGER_NOT_FOUND Handle = 0x80041309 + SCHED_E_TASK_NOT_READY Handle = 0x8004130A + SCHED_E_TASK_NOT_RUNNING Handle = 0x8004130B + SCHED_E_SERVICE_NOT_INSTALLED Handle = 0x8004130C + SCHED_E_CANNOT_OPEN_TASK Handle = 0x8004130D + SCHED_E_INVALID_TASK Handle = 0x8004130E + SCHED_E_ACCOUNT_INFORMATION_NOT_SET Handle = 0x8004130F + SCHED_E_ACCOUNT_NAME_NOT_FOUND Handle = 0x80041310 + SCHED_E_ACCOUNT_DBASE_CORRUPT Handle = 0x80041311 + SCHED_E_NO_SECURITY_SERVICES Handle = 0x80041312 + SCHED_E_UNKNOWN_OBJECT_VERSION Handle = 0x80041313 + SCHED_E_UNSUPPORTED_ACCOUNT_OPTION Handle = 0x80041314 + SCHED_E_SERVICE_NOT_RUNNING Handle = 0x80041315 + SCHED_E_UNEXPECTEDNODE Handle = 0x80041316 + SCHED_E_NAMESPACE Handle = 0x80041317 + SCHED_E_INVALIDVALUE Handle = 0x80041318 + SCHED_E_MISSINGNODE Handle = 0x80041319 + SCHED_E_MALFORMEDXML Handle = 0x8004131A + SCHED_S_SOME_TRIGGERS_FAILED Handle = 0x0004131B + SCHED_S_BATCH_LOGON_PROBLEM Handle = 0x0004131C + SCHED_E_TOO_MANY_NODES Handle = 0x8004131D + SCHED_E_PAST_END_BOUNDARY Handle = 0x8004131E + SCHED_E_ALREADY_RUNNING Handle = 0x8004131F + SCHED_E_USER_NOT_LOGGED_ON Handle = 0x80041320 + SCHED_E_INVALID_TASK_HASH Handle = 0x80041321 + SCHED_E_SERVICE_NOT_AVAILABLE Handle = 0x80041322 + SCHED_E_SERVICE_TOO_BUSY Handle = 0x80041323 + SCHED_E_TASK_ATTEMPTED Handle = 0x80041324 + SCHED_S_TASK_QUEUED Handle = 0x00041325 + SCHED_E_TASK_DISABLED Handle = 0x80041326 + SCHED_E_TASK_NOT_V1_COMPAT Handle = 0x80041327 + SCHED_E_START_ON_DEMAND Handle = 0x80041328 + SCHED_E_TASK_NOT_UBPM_COMPAT Handle = 0x80041329 + SCHED_E_DEPRECATED_FEATURE_USED Handle = 0x80041330 + CO_E_CLASS_CREATE_FAILED Handle = 0x80080001 + CO_E_SCM_ERROR Handle = 0x80080002 + CO_E_SCM_RPC_FAILURE Handle = 0x80080003 + CO_E_BAD_PATH Handle = 0x80080004 + CO_E_SERVER_EXEC_FAILURE Handle = 0x80080005 + CO_E_OBJSRV_RPC_FAILURE Handle = 0x80080006 + MK_E_NO_NORMALIZED Handle = 0x80080007 + CO_E_SERVER_STOPPING Handle = 0x80080008 + MEM_E_INVALID_ROOT Handle = 0x80080009 + MEM_E_INVALID_LINK Handle = 0x80080010 + MEM_E_INVALID_SIZE Handle = 0x80080011 + CO_S_NOTALLINTERFACES Handle = 0x00080012 + CO_S_MACHINENAMENOTFOUND Handle = 0x00080013 + CO_E_MISSING_DISPLAYNAME Handle = 0x80080015 + CO_E_RUNAS_VALUE_MUST_BE_AAA Handle = 0x80080016 + CO_E_ELEVATION_DISABLED Handle = 0x80080017 + APPX_E_PACKAGING_INTERNAL Handle = 0x80080200 + APPX_E_INTERLEAVING_NOT_ALLOWED Handle = 0x80080201 + APPX_E_RELATIONSHIPS_NOT_ALLOWED Handle = 0x80080202 + APPX_E_MISSING_REQUIRED_FILE Handle = 0x80080203 + APPX_E_INVALID_MANIFEST Handle = 0x80080204 + APPX_E_INVALID_BLOCKMAP Handle = 0x80080205 + APPX_E_CORRUPT_CONTENT Handle = 0x80080206 + APPX_E_BLOCK_HASH_INVALID Handle = 0x80080207 + APPX_E_REQUESTED_RANGE_TOO_LARGE Handle = 0x80080208 + APPX_E_INVALID_SIP_CLIENT_DATA Handle = 0x80080209 + APPX_E_INVALID_KEY_INFO Handle = 0x8008020A + APPX_E_INVALID_CONTENTGROUPMAP Handle = 0x8008020B + APPX_E_INVALID_APPINSTALLER Handle = 0x8008020C + APPX_E_DELTA_BASELINE_VERSION_MISMATCH Handle = 0x8008020D + APPX_E_DELTA_PACKAGE_MISSING_FILE Handle = 0x8008020E + APPX_E_INVALID_DELTA_PACKAGE Handle = 0x8008020F + APPX_E_DELTA_APPENDED_PACKAGE_NOT_ALLOWED Handle = 0x80080210 + APPX_E_INVALID_PACKAGING_LAYOUT Handle = 0x80080211 + APPX_E_INVALID_PACKAGESIGNCONFIG Handle = 0x80080212 + APPX_E_RESOURCESPRI_NOT_ALLOWED Handle = 0x80080213 + APPX_E_FILE_COMPRESSION_MISMATCH Handle = 0x80080214 + APPX_E_INVALID_PAYLOAD_PACKAGE_EXTENSION Handle = 0x80080215 + APPX_E_INVALID_ENCRYPTION_EXCLUSION_FILE_LIST Handle = 0x80080216 + BT_E_SPURIOUS_ACTIVATION Handle = 0x80080300 + DISP_E_UNKNOWNINTERFACE Handle = 0x80020001 + DISP_E_MEMBERNOTFOUND Handle = 0x80020003 + DISP_E_PARAMNOTFOUND Handle = 0x80020004 + DISP_E_TYPEMISMATCH Handle = 0x80020005 + DISP_E_UNKNOWNNAME Handle = 0x80020006 + DISP_E_NONAMEDARGS Handle = 0x80020007 + DISP_E_BADVARTYPE Handle = 0x80020008 + DISP_E_EXCEPTION Handle = 0x80020009 + DISP_E_OVERFLOW Handle = 0x8002000A + DISP_E_BADINDEX Handle = 0x8002000B + DISP_E_UNKNOWNLCID Handle = 0x8002000C + DISP_E_ARRAYISLOCKED Handle = 0x8002000D + DISP_E_BADPARAMCOUNT Handle = 0x8002000E + DISP_E_PARAMNOTOPTIONAL Handle = 0x8002000F + DISP_E_BADCALLEE Handle = 0x80020010 + DISP_E_NOTACOLLECTION Handle = 0x80020011 + DISP_E_DIVBYZERO Handle = 0x80020012 + DISP_E_BUFFERTOOSMALL Handle = 0x80020013 + TYPE_E_BUFFERTOOSMALL Handle = 0x80028016 + TYPE_E_FIELDNOTFOUND Handle = 0x80028017 + TYPE_E_INVDATAREAD Handle = 0x80028018 + TYPE_E_UNSUPFORMAT Handle = 0x80028019 + TYPE_E_REGISTRYACCESS Handle = 0x8002801C + TYPE_E_LIBNOTREGISTERED Handle = 0x8002801D + TYPE_E_UNDEFINEDTYPE Handle = 0x80028027 + TYPE_E_QUALIFIEDNAMEDISALLOWED Handle = 0x80028028 + TYPE_E_INVALIDSTATE Handle = 0x80028029 + TYPE_E_WRONGTYPEKIND Handle = 0x8002802A + TYPE_E_ELEMENTNOTFOUND Handle = 0x8002802B + TYPE_E_AMBIGUOUSNAME Handle = 0x8002802C + TYPE_E_NAMECONFLICT Handle = 0x8002802D + TYPE_E_UNKNOWNLCID Handle = 0x8002802E + TYPE_E_DLLFUNCTIONNOTFOUND Handle = 0x8002802F + TYPE_E_BADMODULEKIND Handle = 0x800288BD + TYPE_E_SIZETOOBIG Handle = 0x800288C5 + TYPE_E_DUPLICATEID Handle = 0x800288C6 + TYPE_E_INVALIDID Handle = 0x800288CF + TYPE_E_TYPEMISMATCH Handle = 0x80028CA0 + TYPE_E_OUTOFBOUNDS Handle = 0x80028CA1 + TYPE_E_IOERROR Handle = 0x80028CA2 + TYPE_E_CANTCREATETMPFILE Handle = 0x80028CA3 + TYPE_E_CANTLOADLIBRARY Handle = 0x80029C4A + TYPE_E_INCONSISTENTPROPFUNCS Handle = 0x80029C83 + TYPE_E_CIRCULARTYPE Handle = 0x80029C84 + STG_E_INVALIDFUNCTION Handle = 0x80030001 + STG_E_FILENOTFOUND Handle = 0x80030002 + STG_E_PATHNOTFOUND Handle = 0x80030003 + STG_E_TOOMANYOPENFILES Handle = 0x80030004 + STG_E_ACCESSDENIED Handle = 0x80030005 + STG_E_INVALIDHANDLE Handle = 0x80030006 + STG_E_INSUFFICIENTMEMORY Handle = 0x80030008 + STG_E_INVALIDPOINTER Handle = 0x80030009 + STG_E_NOMOREFILES Handle = 0x80030012 + STG_E_DISKISWRITEPROTECTED Handle = 0x80030013 + STG_E_SEEKERROR Handle = 0x80030019 + STG_E_WRITEFAULT Handle = 0x8003001D + STG_E_READFAULT Handle = 0x8003001E + STG_E_SHAREVIOLATION Handle = 0x80030020 + STG_E_LOCKVIOLATION Handle = 0x80030021 + STG_E_FILEALREADYEXISTS Handle = 0x80030050 + STG_E_INVALIDPARAMETER Handle = 0x80030057 + STG_E_MEDIUMFULL Handle = 0x80030070 + STG_E_PROPSETMISMATCHED Handle = 0x800300F0 + STG_E_ABNORMALAPIEXIT Handle = 0x800300FA + STG_E_INVALIDHEADER Handle = 0x800300FB + STG_E_INVALIDNAME Handle = 0x800300FC + STG_E_UNKNOWN Handle = 0x800300FD + STG_E_UNIMPLEMENTEDFUNCTION Handle = 0x800300FE + STG_E_INVALIDFLAG Handle = 0x800300FF + STG_E_INUSE Handle = 0x80030100 + STG_E_NOTCURRENT Handle = 0x80030101 + STG_E_REVERTED Handle = 0x80030102 + STG_E_CANTSAVE Handle = 0x80030103 + STG_E_OLDFORMAT Handle = 0x80030104 + STG_E_OLDDLL Handle = 0x80030105 + STG_E_SHAREREQUIRED Handle = 0x80030106 + STG_E_NOTFILEBASEDSTORAGE Handle = 0x80030107 + STG_E_EXTANTMARSHALLINGS Handle = 0x80030108 + STG_E_DOCFILECORRUPT Handle = 0x80030109 + STG_E_BADBASEADDRESS Handle = 0x80030110 + STG_E_DOCFILETOOLARGE Handle = 0x80030111 + STG_E_NOTSIMPLEFORMAT Handle = 0x80030112 + STG_E_INCOMPLETE Handle = 0x80030201 + STG_E_TERMINATED Handle = 0x80030202 + STG_S_CONVERTED Handle = 0x00030200 + STG_S_BLOCK Handle = 0x00030201 + STG_S_RETRYNOW Handle = 0x00030202 + STG_S_MONITORING Handle = 0x00030203 + STG_S_MULTIPLEOPENS Handle = 0x00030204 + STG_S_CONSOLIDATIONFAILED Handle = 0x00030205 + STG_S_CANNOTCONSOLIDATE Handle = 0x00030206 + STG_S_POWER_CYCLE_REQUIRED Handle = 0x00030207 + STG_E_FIRMWARE_SLOT_INVALID Handle = 0x80030208 + STG_E_FIRMWARE_IMAGE_INVALID Handle = 0x80030209 + STG_E_DEVICE_UNRESPONSIVE Handle = 0x8003020A + STG_E_STATUS_COPY_PROTECTION_FAILURE Handle = 0x80030305 + STG_E_CSS_AUTHENTICATION_FAILURE Handle = 0x80030306 + STG_E_CSS_KEY_NOT_PRESENT Handle = 0x80030307 + STG_E_CSS_KEY_NOT_ESTABLISHED Handle = 0x80030308 + STG_E_CSS_SCRAMBLED_SECTOR Handle = 0x80030309 + STG_E_CSS_REGION_MISMATCH Handle = 0x8003030A + STG_E_RESETS_EXHAUSTED Handle = 0x8003030B + RPC_E_CALL_REJECTED Handle = 0x80010001 + RPC_E_CALL_CANCELED Handle = 0x80010002 + RPC_E_CANTPOST_INSENDCALL Handle = 0x80010003 + RPC_E_CANTCALLOUT_INASYNCCALL Handle = 0x80010004 + RPC_E_CANTCALLOUT_INEXTERNALCALL Handle = 0x80010005 + RPC_E_CONNECTION_TERMINATED Handle = 0x80010006 + RPC_E_SERVER_DIED Handle = 0x80010007 + RPC_E_CLIENT_DIED Handle = 0x80010008 + RPC_E_INVALID_DATAPACKET Handle = 0x80010009 + RPC_E_CANTTRANSMIT_CALL Handle = 0x8001000A + RPC_E_CLIENT_CANTMARSHAL_DATA Handle = 0x8001000B + RPC_E_CLIENT_CANTUNMARSHAL_DATA Handle = 0x8001000C + RPC_E_SERVER_CANTMARSHAL_DATA Handle = 0x8001000D + RPC_E_SERVER_CANTUNMARSHAL_DATA Handle = 0x8001000E + RPC_E_INVALID_DATA Handle = 0x8001000F + RPC_E_INVALID_PARAMETER Handle = 0x80010010 + RPC_E_CANTCALLOUT_AGAIN Handle = 0x80010011 + RPC_E_SERVER_DIED_DNE Handle = 0x80010012 + RPC_E_SYS_CALL_FAILED Handle = 0x80010100 + RPC_E_OUT_OF_RESOURCES Handle = 0x80010101 + RPC_E_ATTEMPTED_MULTITHREAD Handle = 0x80010102 + RPC_E_NOT_REGISTERED Handle = 0x80010103 + RPC_E_FAULT Handle = 0x80010104 + RPC_E_SERVERFAULT Handle = 0x80010105 + RPC_E_CHANGED_MODE Handle = 0x80010106 + RPC_E_INVALIDMETHOD Handle = 0x80010107 + RPC_E_DISCONNECTED Handle = 0x80010108 + RPC_E_RETRY Handle = 0x80010109 + RPC_E_SERVERCALL_RETRYLATER Handle = 0x8001010A + RPC_E_SERVERCALL_REJECTED Handle = 0x8001010B + RPC_E_INVALID_CALLDATA Handle = 0x8001010C + RPC_E_CANTCALLOUT_ININPUTSYNCCALL Handle = 0x8001010D + RPC_E_WRONG_THREAD Handle = 0x8001010E + RPC_E_THREAD_NOT_INIT Handle = 0x8001010F + RPC_E_VERSION_MISMATCH Handle = 0x80010110 + RPC_E_INVALID_HEADER Handle = 0x80010111 + RPC_E_INVALID_EXTENSION Handle = 0x80010112 + RPC_E_INVALID_IPID Handle = 0x80010113 + RPC_E_INVALID_OBJECT Handle = 0x80010114 + RPC_S_CALLPENDING Handle = 0x80010115 + RPC_S_WAITONTIMER Handle = 0x80010116 + RPC_E_CALL_COMPLETE Handle = 0x80010117 + RPC_E_UNSECURE_CALL Handle = 0x80010118 + RPC_E_TOO_LATE Handle = 0x80010119 + RPC_E_NO_GOOD_SECURITY_PACKAGES Handle = 0x8001011A + RPC_E_ACCESS_DENIED Handle = 0x8001011B + RPC_E_REMOTE_DISABLED Handle = 0x8001011C + RPC_E_INVALID_OBJREF Handle = 0x8001011D + RPC_E_NO_CONTEXT Handle = 0x8001011E + RPC_E_TIMEOUT Handle = 0x8001011F + RPC_E_NO_SYNC Handle = 0x80010120 + RPC_E_FULLSIC_REQUIRED Handle = 0x80010121 + RPC_E_INVALID_STD_NAME Handle = 0x80010122 + CO_E_FAILEDTOIMPERSONATE Handle = 0x80010123 + CO_E_FAILEDTOGETSECCTX Handle = 0x80010124 + CO_E_FAILEDTOOPENTHREADTOKEN Handle = 0x80010125 + CO_E_FAILEDTOGETTOKENINFO Handle = 0x80010126 + CO_E_TRUSTEEDOESNTMATCHCLIENT Handle = 0x80010127 + CO_E_FAILEDTOQUERYCLIENTBLANKET Handle = 0x80010128 + CO_E_FAILEDTOSETDACL Handle = 0x80010129 + CO_E_ACCESSCHECKFAILED Handle = 0x8001012A + CO_E_NETACCESSAPIFAILED Handle = 0x8001012B + CO_E_WRONGTRUSTEENAMESYNTAX Handle = 0x8001012C + CO_E_INVALIDSID Handle = 0x8001012D + CO_E_CONVERSIONFAILED Handle = 0x8001012E + CO_E_NOMATCHINGSIDFOUND Handle = 0x8001012F + CO_E_LOOKUPACCSIDFAILED Handle = 0x80010130 + CO_E_NOMATCHINGNAMEFOUND Handle = 0x80010131 + CO_E_LOOKUPACCNAMEFAILED Handle = 0x80010132 + CO_E_SETSERLHNDLFAILED Handle = 0x80010133 + CO_E_FAILEDTOGETWINDIR Handle = 0x80010134 + CO_E_PATHTOOLONG Handle = 0x80010135 + CO_E_FAILEDTOGENUUID Handle = 0x80010136 + CO_E_FAILEDTOCREATEFILE Handle = 0x80010137 + CO_E_FAILEDTOCLOSEHANDLE Handle = 0x80010138 + CO_E_EXCEEDSYSACLLIMIT Handle = 0x80010139 + CO_E_ACESINWRONGORDER Handle = 0x8001013A + CO_E_INCOMPATIBLESTREAMVERSION Handle = 0x8001013B + CO_E_FAILEDTOOPENPROCESSTOKEN Handle = 0x8001013C + CO_E_DECODEFAILED Handle = 0x8001013D + CO_E_ACNOTINITIALIZED Handle = 0x8001013F + CO_E_CANCEL_DISABLED Handle = 0x80010140 + RPC_E_UNEXPECTED Handle = 0x8001FFFF + ERROR_AUDITING_DISABLED Handle = 0xC0090001 + ERROR_ALL_SIDS_FILTERED Handle = 0xC0090002 + ERROR_BIZRULES_NOT_ENABLED Handle = 0xC0090003 + NTE_BAD_UID Handle = 0x80090001 + NTE_BAD_HASH Handle = 0x80090002 + NTE_BAD_KEY Handle = 0x80090003 + NTE_BAD_LEN Handle = 0x80090004 + NTE_BAD_DATA Handle = 0x80090005 + NTE_BAD_SIGNATURE Handle = 0x80090006 + NTE_BAD_VER Handle = 0x80090007 + NTE_BAD_ALGID Handle = 0x80090008 + NTE_BAD_FLAGS Handle = 0x80090009 + NTE_BAD_TYPE Handle = 0x8009000A + NTE_BAD_KEY_STATE Handle = 0x8009000B + NTE_BAD_HASH_STATE Handle = 0x8009000C + NTE_NO_KEY Handle = 0x8009000D + NTE_NO_MEMORY Handle = 0x8009000E + NTE_EXISTS Handle = 0x8009000F + NTE_PERM Handle = 0x80090010 + NTE_NOT_FOUND Handle = 0x80090011 + NTE_DOUBLE_ENCRYPT Handle = 0x80090012 + NTE_BAD_PROVIDER Handle = 0x80090013 + NTE_BAD_PROV_TYPE Handle = 0x80090014 + NTE_BAD_PUBLIC_KEY Handle = 0x80090015 + NTE_BAD_KEYSET Handle = 0x80090016 + NTE_PROV_TYPE_NOT_DEF Handle = 0x80090017 + NTE_PROV_TYPE_ENTRY_BAD Handle = 0x80090018 + NTE_KEYSET_NOT_DEF Handle = 0x80090019 + NTE_KEYSET_ENTRY_BAD Handle = 0x8009001A + NTE_PROV_TYPE_NO_MATCH Handle = 0x8009001B + NTE_SIGNATURE_FILE_BAD Handle = 0x8009001C + NTE_PROVIDER_DLL_FAIL Handle = 0x8009001D + NTE_PROV_DLL_NOT_FOUND Handle = 0x8009001E + NTE_BAD_KEYSET_PARAM Handle = 0x8009001F + NTE_FAIL Handle = 0x80090020 + NTE_SYS_ERR Handle = 0x80090021 + NTE_SILENT_CONTEXT Handle = 0x80090022 + NTE_TOKEN_KEYSET_STORAGE_FULL Handle = 0x80090023 + NTE_TEMPORARY_PROFILE Handle = 0x80090024 + NTE_FIXEDPARAMETER Handle = 0x80090025 + NTE_INVALID_HANDLE Handle = 0x80090026 + NTE_INVALID_PARAMETER Handle = 0x80090027 + NTE_BUFFER_TOO_SMALL Handle = 0x80090028 + NTE_NOT_SUPPORTED Handle = 0x80090029 + NTE_NO_MORE_ITEMS Handle = 0x8009002A + NTE_BUFFERS_OVERLAP Handle = 0x8009002B + NTE_DECRYPTION_FAILURE Handle = 0x8009002C + NTE_INTERNAL_ERROR Handle = 0x8009002D + NTE_UI_REQUIRED Handle = 0x8009002E + NTE_HMAC_NOT_SUPPORTED Handle = 0x8009002F + NTE_DEVICE_NOT_READY Handle = 0x80090030 + NTE_AUTHENTICATION_IGNORED Handle = 0x80090031 + NTE_VALIDATION_FAILED Handle = 0x80090032 + NTE_INCORRECT_PASSWORD Handle = 0x80090033 + NTE_ENCRYPTION_FAILURE Handle = 0x80090034 + NTE_DEVICE_NOT_FOUND Handle = 0x80090035 + NTE_USER_CANCELLED Handle = 0x80090036 + NTE_PASSWORD_CHANGE_REQUIRED Handle = 0x80090037 + NTE_NOT_ACTIVE_CONSOLE Handle = 0x80090038 + SEC_E_INSUFFICIENT_MEMORY Handle = 0x80090300 + SEC_E_INVALID_HANDLE Handle = 0x80090301 + SEC_E_UNSUPPORTED_FUNCTION Handle = 0x80090302 + SEC_E_TARGET_UNKNOWN Handle = 0x80090303 + SEC_E_INTERNAL_ERROR Handle = 0x80090304 + SEC_E_SECPKG_NOT_FOUND Handle = 0x80090305 + SEC_E_NOT_OWNER Handle = 0x80090306 + SEC_E_CANNOT_INSTALL Handle = 0x80090307 + SEC_E_INVALID_TOKEN Handle = 0x80090308 + SEC_E_CANNOT_PACK Handle = 0x80090309 + SEC_E_QOP_NOT_SUPPORTED Handle = 0x8009030A + SEC_E_NO_IMPERSONATION Handle = 0x8009030B + SEC_E_LOGON_DENIED Handle = 0x8009030C + SEC_E_UNKNOWN_CREDENTIALS Handle = 0x8009030D + SEC_E_NO_CREDENTIALS Handle = 0x8009030E + SEC_E_MESSAGE_ALTERED Handle = 0x8009030F + SEC_E_OUT_OF_SEQUENCE Handle = 0x80090310 + SEC_E_NO_AUTHENTICATING_AUTHORITY Handle = 0x80090311 + SEC_I_CONTINUE_NEEDED Handle = 0x00090312 + SEC_I_COMPLETE_NEEDED Handle = 0x00090313 + SEC_I_COMPLETE_AND_CONTINUE Handle = 0x00090314 + SEC_I_LOCAL_LOGON Handle = 0x00090315 + SEC_E_BAD_PKGID Handle = 0x80090316 + SEC_E_CONTEXT_EXPIRED Handle = 0x80090317 + SEC_I_CONTEXT_EXPIRED Handle = 0x00090317 + SEC_E_INCOMPLETE_MESSAGE Handle = 0x80090318 + SEC_E_INCOMPLETE_CREDENTIALS Handle = 0x80090320 + SEC_E_BUFFER_TOO_SMALL Handle = 0x80090321 + SEC_I_INCOMPLETE_CREDENTIALS Handle = 0x00090320 + SEC_I_RENEGOTIATE Handle = 0x00090321 + SEC_E_WRONG_PRINCIPAL Handle = 0x80090322 + SEC_I_NO_LSA_CONTEXT Handle = 0x00090323 + SEC_E_TIME_SKEW Handle = 0x80090324 + SEC_E_UNTRUSTED_ROOT Handle = 0x80090325 + SEC_E_ILLEGAL_MESSAGE Handle = 0x80090326 + SEC_E_CERT_UNKNOWN Handle = 0x80090327 + SEC_E_CERT_EXPIRED Handle = 0x80090328 + SEC_E_ENCRYPT_FAILURE Handle = 0x80090329 + SEC_E_DECRYPT_FAILURE Handle = 0x80090330 + SEC_E_ALGORITHM_MISMATCH Handle = 0x80090331 + SEC_E_SECURITY_QOS_FAILED Handle = 0x80090332 + SEC_E_UNFINISHED_CONTEXT_DELETED Handle = 0x80090333 + SEC_E_NO_TGT_REPLY Handle = 0x80090334 + SEC_E_NO_IP_ADDRESSES Handle = 0x80090335 + SEC_E_WRONG_CREDENTIAL_HANDLE Handle = 0x80090336 + SEC_E_CRYPTO_SYSTEM_INVALID Handle = 0x80090337 + SEC_E_MAX_REFERRALS_EXCEEDED Handle = 0x80090338 + SEC_E_MUST_BE_KDC Handle = 0x80090339 + SEC_E_STRONG_CRYPTO_NOT_SUPPORTED Handle = 0x8009033A + SEC_E_TOO_MANY_PRINCIPALS Handle = 0x8009033B + SEC_E_NO_PA_DATA Handle = 0x8009033C + SEC_E_PKINIT_NAME_MISMATCH Handle = 0x8009033D + SEC_E_SMARTCARD_LOGON_REQUIRED Handle = 0x8009033E + SEC_E_SHUTDOWN_IN_PROGRESS Handle = 0x8009033F + SEC_E_KDC_INVALID_REQUEST Handle = 0x80090340 + SEC_E_KDC_UNABLE_TO_REFER Handle = 0x80090341 + SEC_E_KDC_UNKNOWN_ETYPE Handle = 0x80090342 + SEC_E_UNSUPPORTED_PREAUTH Handle = 0x80090343 + SEC_E_DELEGATION_REQUIRED Handle = 0x80090345 + SEC_E_BAD_BINDINGS Handle = 0x80090346 + SEC_E_MULTIPLE_ACCOUNTS Handle = 0x80090347 + SEC_E_NO_KERB_KEY Handle = 0x80090348 + SEC_E_CERT_WRONG_USAGE Handle = 0x80090349 + SEC_E_DOWNGRADE_DETECTED Handle = 0x80090350 + SEC_E_SMARTCARD_CERT_REVOKED Handle = 0x80090351 + SEC_E_ISSUING_CA_UNTRUSTED Handle = 0x80090352 + SEC_E_REVOCATION_OFFLINE_C Handle = 0x80090353 + SEC_E_PKINIT_CLIENT_FAILURE Handle = 0x80090354 + SEC_E_SMARTCARD_CERT_EXPIRED Handle = 0x80090355 + SEC_E_NO_S4U_PROT_SUPPORT Handle = 0x80090356 + SEC_E_CROSSREALM_DELEGATION_FAILURE Handle = 0x80090357 + SEC_E_REVOCATION_OFFLINE_KDC Handle = 0x80090358 + SEC_E_ISSUING_CA_UNTRUSTED_KDC Handle = 0x80090359 + SEC_E_KDC_CERT_EXPIRED Handle = 0x8009035A + SEC_E_KDC_CERT_REVOKED Handle = 0x8009035B + SEC_I_SIGNATURE_NEEDED Handle = 0x0009035C + SEC_E_INVALID_PARAMETER Handle = 0x8009035D + SEC_E_DELEGATION_POLICY Handle = 0x8009035E + SEC_E_POLICY_NLTM_ONLY Handle = 0x8009035F + SEC_I_NO_RENEGOTIATION Handle = 0x00090360 + SEC_E_NO_CONTEXT Handle = 0x80090361 + SEC_E_PKU2U_CERT_FAILURE Handle = 0x80090362 + SEC_E_MUTUAL_AUTH_FAILED Handle = 0x80090363 + SEC_I_MESSAGE_FRAGMENT Handle = 0x00090364 + SEC_E_ONLY_HTTPS_ALLOWED Handle = 0x80090365 + SEC_I_CONTINUE_NEEDED_MESSAGE_OK Handle = 0x00090366 + SEC_E_APPLICATION_PROTOCOL_MISMATCH Handle = 0x80090367 + SEC_I_ASYNC_CALL_PENDING Handle = 0x00090368 + SEC_E_INVALID_UPN_NAME Handle = 0x80090369 + SEC_E_NO_SPM = SEC_E_INTERNAL_ERROR + SEC_E_NOT_SUPPORTED = SEC_E_UNSUPPORTED_FUNCTION + CRYPT_E_MSG_ERROR Handle = 0x80091001 + CRYPT_E_UNKNOWN_ALGO Handle = 0x80091002 + CRYPT_E_OID_FORMAT Handle = 0x80091003 + CRYPT_E_INVALID_MSG_TYPE Handle = 0x80091004 + CRYPT_E_UNEXPECTED_ENCODING Handle = 0x80091005 + CRYPT_E_AUTH_ATTR_MISSING Handle = 0x80091006 + CRYPT_E_HASH_VALUE Handle = 0x80091007 + CRYPT_E_INVALID_INDEX Handle = 0x80091008 + CRYPT_E_ALREADY_DECRYPTED Handle = 0x80091009 + CRYPT_E_NOT_DECRYPTED Handle = 0x8009100A + CRYPT_E_RECIPIENT_NOT_FOUND Handle = 0x8009100B + CRYPT_E_CONTROL_TYPE Handle = 0x8009100C + CRYPT_E_ISSUER_SERIALNUMBER Handle = 0x8009100D + CRYPT_E_SIGNER_NOT_FOUND Handle = 0x8009100E + CRYPT_E_ATTRIBUTES_MISSING Handle = 0x8009100F + CRYPT_E_STREAM_MSG_NOT_READY Handle = 0x80091010 + CRYPT_E_STREAM_INSUFFICIENT_DATA Handle = 0x80091011 + CRYPT_I_NEW_PROTECTION_REQUIRED Handle = 0x00091012 + CRYPT_E_BAD_LEN Handle = 0x80092001 + CRYPT_E_BAD_ENCODE Handle = 0x80092002 + CRYPT_E_FILE_ERROR Handle = 0x80092003 + CRYPT_E_NOT_FOUND Handle = 0x80092004 + CRYPT_E_EXISTS Handle = 0x80092005 + CRYPT_E_NO_PROVIDER Handle = 0x80092006 + CRYPT_E_SELF_SIGNED Handle = 0x80092007 + CRYPT_E_DELETED_PREV Handle = 0x80092008 + CRYPT_E_NO_MATCH Handle = 0x80092009 + CRYPT_E_UNEXPECTED_MSG_TYPE Handle = 0x8009200A + CRYPT_E_NO_KEY_PROPERTY Handle = 0x8009200B + CRYPT_E_NO_DECRYPT_CERT Handle = 0x8009200C + CRYPT_E_BAD_MSG Handle = 0x8009200D + CRYPT_E_NO_SIGNER Handle = 0x8009200E + CRYPT_E_PENDING_CLOSE Handle = 0x8009200F + CRYPT_E_REVOKED Handle = 0x80092010 + CRYPT_E_NO_REVOCATION_DLL Handle = 0x80092011 + CRYPT_E_NO_REVOCATION_CHECK Handle = 0x80092012 + CRYPT_E_REVOCATION_OFFLINE Handle = 0x80092013 + CRYPT_E_NOT_IN_REVOCATION_DATABASE Handle = 0x80092014 + CRYPT_E_INVALID_NUMERIC_STRING Handle = 0x80092020 + CRYPT_E_INVALID_PRINTABLE_STRING Handle = 0x80092021 + CRYPT_E_INVALID_IA5_STRING Handle = 0x80092022 + CRYPT_E_INVALID_X500_STRING Handle = 0x80092023 + CRYPT_E_NOT_CHAR_STRING Handle = 0x80092024 + CRYPT_E_FILERESIZED Handle = 0x80092025 + CRYPT_E_SECURITY_SETTINGS Handle = 0x80092026 + CRYPT_E_NO_VERIFY_USAGE_DLL Handle = 0x80092027 + CRYPT_E_NO_VERIFY_USAGE_CHECK Handle = 0x80092028 + CRYPT_E_VERIFY_USAGE_OFFLINE Handle = 0x80092029 + CRYPT_E_NOT_IN_CTL Handle = 0x8009202A + CRYPT_E_NO_TRUSTED_SIGNER Handle = 0x8009202B + CRYPT_E_MISSING_PUBKEY_PARA Handle = 0x8009202C + CRYPT_E_OBJECT_LOCATOR_OBJECT_NOT_FOUND Handle = 0x8009202D + CRYPT_E_OSS_ERROR Handle = 0x80093000 + OSS_MORE_BUF Handle = 0x80093001 + OSS_NEGATIVE_UINTEGER Handle = 0x80093002 + OSS_PDU_RANGE Handle = 0x80093003 + OSS_MORE_INPUT Handle = 0x80093004 + OSS_DATA_ERROR Handle = 0x80093005 + OSS_BAD_ARG Handle = 0x80093006 + OSS_BAD_VERSION Handle = 0x80093007 + OSS_OUT_MEMORY Handle = 0x80093008 + OSS_PDU_MISMATCH Handle = 0x80093009 + OSS_LIMITED Handle = 0x8009300A + OSS_BAD_PTR Handle = 0x8009300B + OSS_BAD_TIME Handle = 0x8009300C + OSS_INDEFINITE_NOT_SUPPORTED Handle = 0x8009300D + OSS_MEM_ERROR Handle = 0x8009300E + OSS_BAD_TABLE Handle = 0x8009300F + OSS_TOO_LONG Handle = 0x80093010 + OSS_CONSTRAINT_VIOLATED Handle = 0x80093011 + OSS_FATAL_ERROR Handle = 0x80093012 + OSS_ACCESS_SERIALIZATION_ERROR Handle = 0x80093013 + OSS_NULL_TBL Handle = 0x80093014 + OSS_NULL_FCN Handle = 0x80093015 + OSS_BAD_ENCRULES Handle = 0x80093016 + OSS_UNAVAIL_ENCRULES Handle = 0x80093017 + OSS_CANT_OPEN_TRACE_WINDOW Handle = 0x80093018 + OSS_UNIMPLEMENTED Handle = 0x80093019 + OSS_OID_DLL_NOT_LINKED Handle = 0x8009301A + OSS_CANT_OPEN_TRACE_FILE Handle = 0x8009301B + OSS_TRACE_FILE_ALREADY_OPEN Handle = 0x8009301C + OSS_TABLE_MISMATCH Handle = 0x8009301D + OSS_TYPE_NOT_SUPPORTED Handle = 0x8009301E + OSS_REAL_DLL_NOT_LINKED Handle = 0x8009301F + OSS_REAL_CODE_NOT_LINKED Handle = 0x80093020 + OSS_OUT_OF_RANGE Handle = 0x80093021 + OSS_COPIER_DLL_NOT_LINKED Handle = 0x80093022 + OSS_CONSTRAINT_DLL_NOT_LINKED Handle = 0x80093023 + OSS_COMPARATOR_DLL_NOT_LINKED Handle = 0x80093024 + OSS_COMPARATOR_CODE_NOT_LINKED Handle = 0x80093025 + OSS_MEM_MGR_DLL_NOT_LINKED Handle = 0x80093026 + OSS_PDV_DLL_NOT_LINKED Handle = 0x80093027 + OSS_PDV_CODE_NOT_LINKED Handle = 0x80093028 + OSS_API_DLL_NOT_LINKED Handle = 0x80093029 + OSS_BERDER_DLL_NOT_LINKED Handle = 0x8009302A + OSS_PER_DLL_NOT_LINKED Handle = 0x8009302B + OSS_OPEN_TYPE_ERROR Handle = 0x8009302C + OSS_MUTEX_NOT_CREATED Handle = 0x8009302D + OSS_CANT_CLOSE_TRACE_FILE Handle = 0x8009302E + CRYPT_E_ASN1_ERROR Handle = 0x80093100 + CRYPT_E_ASN1_INTERNAL Handle = 0x80093101 + CRYPT_E_ASN1_EOD Handle = 0x80093102 + CRYPT_E_ASN1_CORRUPT Handle = 0x80093103 + CRYPT_E_ASN1_LARGE Handle = 0x80093104 + CRYPT_E_ASN1_CONSTRAINT Handle = 0x80093105 + CRYPT_E_ASN1_MEMORY Handle = 0x80093106 + CRYPT_E_ASN1_OVERFLOW Handle = 0x80093107 + CRYPT_E_ASN1_BADPDU Handle = 0x80093108 + CRYPT_E_ASN1_BADARGS Handle = 0x80093109 + CRYPT_E_ASN1_BADREAL Handle = 0x8009310A + CRYPT_E_ASN1_BADTAG Handle = 0x8009310B + CRYPT_E_ASN1_CHOICE Handle = 0x8009310C + CRYPT_E_ASN1_RULE Handle = 0x8009310D + CRYPT_E_ASN1_UTF8 Handle = 0x8009310E + CRYPT_E_ASN1_PDU_TYPE Handle = 0x80093133 + CRYPT_E_ASN1_NYI Handle = 0x80093134 + CRYPT_E_ASN1_EXTENDED Handle = 0x80093201 + CRYPT_E_ASN1_NOEOD Handle = 0x80093202 + CERTSRV_E_BAD_REQUESTSUBJECT Handle = 0x80094001 + CERTSRV_E_NO_REQUEST Handle = 0x80094002 + CERTSRV_E_BAD_REQUESTSTATUS Handle = 0x80094003 + CERTSRV_E_PROPERTY_EMPTY Handle = 0x80094004 + CERTSRV_E_INVALID_CA_CERTIFICATE Handle = 0x80094005 + CERTSRV_E_SERVER_SUSPENDED Handle = 0x80094006 + CERTSRV_E_ENCODING_LENGTH Handle = 0x80094007 + CERTSRV_E_ROLECONFLICT Handle = 0x80094008 + CERTSRV_E_RESTRICTEDOFFICER Handle = 0x80094009 + CERTSRV_E_KEY_ARCHIVAL_NOT_CONFIGURED Handle = 0x8009400A + CERTSRV_E_NO_VALID_KRA Handle = 0x8009400B + CERTSRV_E_BAD_REQUEST_KEY_ARCHIVAL Handle = 0x8009400C + CERTSRV_E_NO_CAADMIN_DEFINED Handle = 0x8009400D + CERTSRV_E_BAD_RENEWAL_CERT_ATTRIBUTE Handle = 0x8009400E + CERTSRV_E_NO_DB_SESSIONS Handle = 0x8009400F + CERTSRV_E_ALIGNMENT_FAULT Handle = 0x80094010 + CERTSRV_E_ENROLL_DENIED Handle = 0x80094011 + CERTSRV_E_TEMPLATE_DENIED Handle = 0x80094012 + CERTSRV_E_DOWNLEVEL_DC_SSL_OR_UPGRADE Handle = 0x80094013 + CERTSRV_E_ADMIN_DENIED_REQUEST Handle = 0x80094014 + CERTSRV_E_NO_POLICY_SERVER Handle = 0x80094015 + CERTSRV_E_WEAK_SIGNATURE_OR_KEY Handle = 0x80094016 + CERTSRV_E_KEY_ATTESTATION_NOT_SUPPORTED Handle = 0x80094017 + CERTSRV_E_ENCRYPTION_CERT_REQUIRED Handle = 0x80094018 + CERTSRV_E_UNSUPPORTED_CERT_TYPE Handle = 0x80094800 + CERTSRV_E_NO_CERT_TYPE Handle = 0x80094801 + CERTSRV_E_TEMPLATE_CONFLICT Handle = 0x80094802 + CERTSRV_E_SUBJECT_ALT_NAME_REQUIRED Handle = 0x80094803 + CERTSRV_E_ARCHIVED_KEY_REQUIRED Handle = 0x80094804 + CERTSRV_E_SMIME_REQUIRED Handle = 0x80094805 + CERTSRV_E_BAD_RENEWAL_SUBJECT Handle = 0x80094806 + CERTSRV_E_BAD_TEMPLATE_VERSION Handle = 0x80094807 + CERTSRV_E_TEMPLATE_POLICY_REQUIRED Handle = 0x80094808 + CERTSRV_E_SIGNATURE_POLICY_REQUIRED Handle = 0x80094809 + CERTSRV_E_SIGNATURE_COUNT Handle = 0x8009480A + CERTSRV_E_SIGNATURE_REJECTED Handle = 0x8009480B + CERTSRV_E_ISSUANCE_POLICY_REQUIRED Handle = 0x8009480C + CERTSRV_E_SUBJECT_UPN_REQUIRED Handle = 0x8009480D + CERTSRV_E_SUBJECT_DIRECTORY_GUID_REQUIRED Handle = 0x8009480E + CERTSRV_E_SUBJECT_DNS_REQUIRED Handle = 0x8009480F + CERTSRV_E_ARCHIVED_KEY_UNEXPECTED Handle = 0x80094810 + CERTSRV_E_KEY_LENGTH Handle = 0x80094811 + CERTSRV_E_SUBJECT_EMAIL_REQUIRED Handle = 0x80094812 + CERTSRV_E_UNKNOWN_CERT_TYPE Handle = 0x80094813 + CERTSRV_E_CERT_TYPE_OVERLAP Handle = 0x80094814 + CERTSRV_E_TOO_MANY_SIGNATURES Handle = 0x80094815 + CERTSRV_E_RENEWAL_BAD_PUBLIC_KEY Handle = 0x80094816 + CERTSRV_E_INVALID_EK Handle = 0x80094817 + CERTSRV_E_INVALID_IDBINDING Handle = 0x80094818 + CERTSRV_E_INVALID_ATTESTATION Handle = 0x80094819 + CERTSRV_E_KEY_ATTESTATION Handle = 0x8009481A + CERTSRV_E_CORRUPT_KEY_ATTESTATION Handle = 0x8009481B + CERTSRV_E_EXPIRED_CHALLENGE Handle = 0x8009481C + CERTSRV_E_INVALID_RESPONSE Handle = 0x8009481D + CERTSRV_E_INVALID_REQUESTID Handle = 0x8009481E + CERTSRV_E_REQUEST_PRECERTIFICATE_MISMATCH Handle = 0x8009481F + CERTSRV_E_PENDING_CLIENT_RESPONSE Handle = 0x80094820 + XENROLL_E_KEY_NOT_EXPORTABLE Handle = 0x80095000 + XENROLL_E_CANNOT_ADD_ROOT_CERT Handle = 0x80095001 + XENROLL_E_RESPONSE_KA_HASH_NOT_FOUND Handle = 0x80095002 + XENROLL_E_RESPONSE_UNEXPECTED_KA_HASH Handle = 0x80095003 + XENROLL_E_RESPONSE_KA_HASH_MISMATCH Handle = 0x80095004 + XENROLL_E_KEYSPEC_SMIME_MISMATCH Handle = 0x80095005 + TRUST_E_SYSTEM_ERROR Handle = 0x80096001 + TRUST_E_NO_SIGNER_CERT Handle = 0x80096002 + TRUST_E_COUNTER_SIGNER Handle = 0x80096003 + TRUST_E_CERT_SIGNATURE Handle = 0x80096004 + TRUST_E_TIME_STAMP Handle = 0x80096005 + TRUST_E_BAD_DIGEST Handle = 0x80096010 + TRUST_E_MALFORMED_SIGNATURE Handle = 0x80096011 + TRUST_E_BASIC_CONSTRAINTS Handle = 0x80096019 + TRUST_E_FINANCIAL_CRITERIA Handle = 0x8009601E + MSSIPOTF_E_OUTOFMEMRANGE Handle = 0x80097001 + MSSIPOTF_E_CANTGETOBJECT Handle = 0x80097002 + MSSIPOTF_E_NOHEADTABLE Handle = 0x80097003 + MSSIPOTF_E_BAD_MAGICNUMBER Handle = 0x80097004 + MSSIPOTF_E_BAD_OFFSET_TABLE Handle = 0x80097005 + MSSIPOTF_E_TABLE_TAGORDER Handle = 0x80097006 + MSSIPOTF_E_TABLE_LONGWORD Handle = 0x80097007 + MSSIPOTF_E_BAD_FIRST_TABLE_PLACEMENT Handle = 0x80097008 + MSSIPOTF_E_TABLES_OVERLAP Handle = 0x80097009 + MSSIPOTF_E_TABLE_PADBYTES Handle = 0x8009700A + MSSIPOTF_E_FILETOOSMALL Handle = 0x8009700B + MSSIPOTF_E_TABLE_CHECKSUM Handle = 0x8009700C + MSSIPOTF_E_FILE_CHECKSUM Handle = 0x8009700D + MSSIPOTF_E_FAILED_POLICY Handle = 0x80097010 + MSSIPOTF_E_FAILED_HINTS_CHECK Handle = 0x80097011 + MSSIPOTF_E_NOT_OPENTYPE Handle = 0x80097012 + MSSIPOTF_E_FILE Handle = 0x80097013 + MSSIPOTF_E_CRYPT Handle = 0x80097014 + MSSIPOTF_E_BADVERSION Handle = 0x80097015 + MSSIPOTF_E_DSIG_STRUCTURE Handle = 0x80097016 + MSSIPOTF_E_PCONST_CHECK Handle = 0x80097017 + MSSIPOTF_E_STRUCTURE Handle = 0x80097018 + ERROR_CRED_REQUIRES_CONFIRMATION Handle = 0x80097019 + NTE_OP_OK syscall.Errno = 0 + TRUST_E_PROVIDER_UNKNOWN Handle = 0x800B0001 + TRUST_E_ACTION_UNKNOWN Handle = 0x800B0002 + TRUST_E_SUBJECT_FORM_UNKNOWN Handle = 0x800B0003 + TRUST_E_SUBJECT_NOT_TRUSTED Handle = 0x800B0004 + DIGSIG_E_ENCODE Handle = 0x800B0005 + DIGSIG_E_DECODE Handle = 0x800B0006 + DIGSIG_E_EXTENSIBILITY Handle = 0x800B0007 + DIGSIG_E_CRYPTO Handle = 0x800B0008 + PERSIST_E_SIZEDEFINITE Handle = 0x800B0009 + PERSIST_E_SIZEINDEFINITE Handle = 0x800B000A + PERSIST_E_NOTSELFSIZING Handle = 0x800B000B + TRUST_E_NOSIGNATURE Handle = 0x800B0100 + CERT_E_EXPIRED Handle = 0x800B0101 + CERT_E_VALIDITYPERIODNESTING Handle = 0x800B0102 + CERT_E_ROLE Handle = 0x800B0103 + CERT_E_PATHLENCONST Handle = 0x800B0104 + CERT_E_CRITICAL Handle = 0x800B0105 + CERT_E_PURPOSE Handle = 0x800B0106 + CERT_E_ISSUERCHAINING Handle = 0x800B0107 + CERT_E_MALFORMED Handle = 0x800B0108 + CERT_E_UNTRUSTEDROOT Handle = 0x800B0109 + CERT_E_CHAINING Handle = 0x800B010A + TRUST_E_FAIL Handle = 0x800B010B + CERT_E_REVOKED Handle = 0x800B010C + CERT_E_UNTRUSTEDTESTROOT Handle = 0x800B010D + CERT_E_REVOCATION_FAILURE Handle = 0x800B010E + CERT_E_CN_NO_MATCH Handle = 0x800B010F + CERT_E_WRONG_USAGE Handle = 0x800B0110 + TRUST_E_EXPLICIT_DISTRUST Handle = 0x800B0111 + CERT_E_UNTRUSTEDCA Handle = 0x800B0112 + CERT_E_INVALID_POLICY Handle = 0x800B0113 + CERT_E_INVALID_NAME Handle = 0x800B0114 + SPAPI_E_EXPECTED_SECTION_NAME Handle = 0x800F0000 + SPAPI_E_BAD_SECTION_NAME_LINE Handle = 0x800F0001 + SPAPI_E_SECTION_NAME_TOO_LONG Handle = 0x800F0002 + SPAPI_E_GENERAL_SYNTAX Handle = 0x800F0003 + SPAPI_E_WRONG_INF_STYLE Handle = 0x800F0100 + SPAPI_E_SECTION_NOT_FOUND Handle = 0x800F0101 + SPAPI_E_LINE_NOT_FOUND Handle = 0x800F0102 + SPAPI_E_NO_BACKUP Handle = 0x800F0103 + SPAPI_E_NO_ASSOCIATED_CLASS Handle = 0x800F0200 + SPAPI_E_CLASS_MISMATCH Handle = 0x800F0201 + SPAPI_E_DUPLICATE_FOUND Handle = 0x800F0202 + SPAPI_E_NO_DRIVER_SELECTED Handle = 0x800F0203 + SPAPI_E_KEY_DOES_NOT_EXIST Handle = 0x800F0204 + SPAPI_E_INVALID_DEVINST_NAME Handle = 0x800F0205 + SPAPI_E_INVALID_CLASS Handle = 0x800F0206 + SPAPI_E_DEVINST_ALREADY_EXISTS Handle = 0x800F0207 + SPAPI_E_DEVINFO_NOT_REGISTERED Handle = 0x800F0208 + SPAPI_E_INVALID_REG_PROPERTY Handle = 0x800F0209 + SPAPI_E_NO_INF Handle = 0x800F020A + SPAPI_E_NO_SUCH_DEVINST Handle = 0x800F020B + SPAPI_E_CANT_LOAD_CLASS_ICON Handle = 0x800F020C + SPAPI_E_INVALID_CLASS_INSTALLER Handle = 0x800F020D + SPAPI_E_DI_DO_DEFAULT Handle = 0x800F020E + SPAPI_E_DI_NOFILECOPY Handle = 0x800F020F + SPAPI_E_INVALID_HWPROFILE Handle = 0x800F0210 + SPAPI_E_NO_DEVICE_SELECTED Handle = 0x800F0211 + SPAPI_E_DEVINFO_LIST_LOCKED Handle = 0x800F0212 + SPAPI_E_DEVINFO_DATA_LOCKED Handle = 0x800F0213 + SPAPI_E_DI_BAD_PATH Handle = 0x800F0214 + SPAPI_E_NO_CLASSINSTALL_PARAMS Handle = 0x800F0215 + SPAPI_E_FILEQUEUE_LOCKED Handle = 0x800F0216 + SPAPI_E_BAD_SERVICE_INSTALLSECT Handle = 0x800F0217 + SPAPI_E_NO_CLASS_DRIVER_LIST Handle = 0x800F0218 + SPAPI_E_NO_ASSOCIATED_SERVICE Handle = 0x800F0219 + SPAPI_E_NO_DEFAULT_DEVICE_INTERFACE Handle = 0x800F021A + SPAPI_E_DEVICE_INTERFACE_ACTIVE Handle = 0x800F021B + SPAPI_E_DEVICE_INTERFACE_REMOVED Handle = 0x800F021C + SPAPI_E_BAD_INTERFACE_INSTALLSECT Handle = 0x800F021D + SPAPI_E_NO_SUCH_INTERFACE_CLASS Handle = 0x800F021E + SPAPI_E_INVALID_REFERENCE_STRING Handle = 0x800F021F + SPAPI_E_INVALID_MACHINENAME Handle = 0x800F0220 + SPAPI_E_REMOTE_COMM_FAILURE Handle = 0x800F0221 + SPAPI_E_MACHINE_UNAVAILABLE Handle = 0x800F0222 + SPAPI_E_NO_CONFIGMGR_SERVICES Handle = 0x800F0223 + SPAPI_E_INVALID_PROPPAGE_PROVIDER Handle = 0x800F0224 + SPAPI_E_NO_SUCH_DEVICE_INTERFACE Handle = 0x800F0225 + SPAPI_E_DI_POSTPROCESSING_REQUIRED Handle = 0x800F0226 + SPAPI_E_INVALID_COINSTALLER Handle = 0x800F0227 + SPAPI_E_NO_COMPAT_DRIVERS Handle = 0x800F0228 + SPAPI_E_NO_DEVICE_ICON Handle = 0x800F0229 + SPAPI_E_INVALID_INF_LOGCONFIG Handle = 0x800F022A + SPAPI_E_DI_DONT_INSTALL Handle = 0x800F022B + SPAPI_E_INVALID_FILTER_DRIVER Handle = 0x800F022C + SPAPI_E_NON_WINDOWS_NT_DRIVER Handle = 0x800F022D + SPAPI_E_NON_WINDOWS_DRIVER Handle = 0x800F022E + SPAPI_E_NO_CATALOG_FOR_OEM_INF Handle = 0x800F022F + SPAPI_E_DEVINSTALL_QUEUE_NONNATIVE Handle = 0x800F0230 + SPAPI_E_NOT_DISABLEABLE Handle = 0x800F0231 + SPAPI_E_CANT_REMOVE_DEVINST Handle = 0x800F0232 + SPAPI_E_INVALID_TARGET Handle = 0x800F0233 + SPAPI_E_DRIVER_NONNATIVE Handle = 0x800F0234 + SPAPI_E_IN_WOW64 Handle = 0x800F0235 + SPAPI_E_SET_SYSTEM_RESTORE_POINT Handle = 0x800F0236 + SPAPI_E_INCORRECTLY_COPIED_INF Handle = 0x800F0237 + SPAPI_E_SCE_DISABLED Handle = 0x800F0238 + SPAPI_E_UNKNOWN_EXCEPTION Handle = 0x800F0239 + SPAPI_E_PNP_REGISTRY_ERROR Handle = 0x800F023A + SPAPI_E_REMOTE_REQUEST_UNSUPPORTED Handle = 0x800F023B + SPAPI_E_NOT_AN_INSTALLED_OEM_INF Handle = 0x800F023C + SPAPI_E_INF_IN_USE_BY_DEVICES Handle = 0x800F023D + SPAPI_E_DI_FUNCTION_OBSOLETE Handle = 0x800F023E + SPAPI_E_NO_AUTHENTICODE_CATALOG Handle = 0x800F023F + SPAPI_E_AUTHENTICODE_DISALLOWED Handle = 0x800F0240 + SPAPI_E_AUTHENTICODE_TRUSTED_PUBLISHER Handle = 0x800F0241 + SPAPI_E_AUTHENTICODE_TRUST_NOT_ESTABLISHED Handle = 0x800F0242 + SPAPI_E_AUTHENTICODE_PUBLISHER_NOT_TRUSTED Handle = 0x800F0243 + SPAPI_E_SIGNATURE_OSATTRIBUTE_MISMATCH Handle = 0x800F0244 + SPAPI_E_ONLY_VALIDATE_VIA_AUTHENTICODE Handle = 0x800F0245 + SPAPI_E_DEVICE_INSTALLER_NOT_READY Handle = 0x800F0246 + SPAPI_E_DRIVER_STORE_ADD_FAILED Handle = 0x800F0247 + SPAPI_E_DEVICE_INSTALL_BLOCKED Handle = 0x800F0248 + SPAPI_E_DRIVER_INSTALL_BLOCKED Handle = 0x800F0249 + SPAPI_E_WRONG_INF_TYPE Handle = 0x800F024A + SPAPI_E_FILE_HASH_NOT_IN_CATALOG Handle = 0x800F024B + SPAPI_E_DRIVER_STORE_DELETE_FAILED Handle = 0x800F024C + SPAPI_E_UNRECOVERABLE_STACK_OVERFLOW Handle = 0x800F0300 + SPAPI_E_ERROR_NOT_INSTALLED Handle = 0x800F1000 + SCARD_S_SUCCESS = S_OK + SCARD_F_INTERNAL_ERROR Handle = 0x80100001 + SCARD_E_CANCELLED Handle = 0x80100002 + SCARD_E_INVALID_HANDLE Handle = 0x80100003 + SCARD_E_INVALID_PARAMETER Handle = 0x80100004 + SCARD_E_INVALID_TARGET Handle = 0x80100005 + SCARD_E_NO_MEMORY Handle = 0x80100006 + SCARD_F_WAITED_TOO_LONG Handle = 0x80100007 + SCARD_E_INSUFFICIENT_BUFFER Handle = 0x80100008 + SCARD_E_UNKNOWN_READER Handle = 0x80100009 + SCARD_E_TIMEOUT Handle = 0x8010000A + SCARD_E_SHARING_VIOLATION Handle = 0x8010000B + SCARD_E_NO_SMARTCARD Handle = 0x8010000C + SCARD_E_UNKNOWN_CARD Handle = 0x8010000D + SCARD_E_CANT_DISPOSE Handle = 0x8010000E + SCARD_E_PROTO_MISMATCH Handle = 0x8010000F + SCARD_E_NOT_READY Handle = 0x80100010 + SCARD_E_INVALID_VALUE Handle = 0x80100011 + SCARD_E_SYSTEM_CANCELLED Handle = 0x80100012 + SCARD_F_COMM_ERROR Handle = 0x80100013 + SCARD_F_UNKNOWN_ERROR Handle = 0x80100014 + SCARD_E_INVALID_ATR Handle = 0x80100015 + SCARD_E_NOT_TRANSACTED Handle = 0x80100016 + SCARD_E_READER_UNAVAILABLE Handle = 0x80100017 + SCARD_P_SHUTDOWN Handle = 0x80100018 + SCARD_E_PCI_TOO_SMALL Handle = 0x80100019 + SCARD_E_READER_UNSUPPORTED Handle = 0x8010001A + SCARD_E_DUPLICATE_READER Handle = 0x8010001B + SCARD_E_CARD_UNSUPPORTED Handle = 0x8010001C + SCARD_E_NO_SERVICE Handle = 0x8010001D + SCARD_E_SERVICE_STOPPED Handle = 0x8010001E + SCARD_E_UNEXPECTED Handle = 0x8010001F + SCARD_E_ICC_INSTALLATION Handle = 0x80100020 + SCARD_E_ICC_CREATEORDER Handle = 0x80100021 + SCARD_E_UNSUPPORTED_FEATURE Handle = 0x80100022 + SCARD_E_DIR_NOT_FOUND Handle = 0x80100023 + SCARD_E_FILE_NOT_FOUND Handle = 0x80100024 + SCARD_E_NO_DIR Handle = 0x80100025 + SCARD_E_NO_FILE Handle = 0x80100026 + SCARD_E_NO_ACCESS Handle = 0x80100027 + SCARD_E_WRITE_TOO_MANY Handle = 0x80100028 + SCARD_E_BAD_SEEK Handle = 0x80100029 + SCARD_E_INVALID_CHV Handle = 0x8010002A + SCARD_E_UNKNOWN_RES_MNG Handle = 0x8010002B + SCARD_E_NO_SUCH_CERTIFICATE Handle = 0x8010002C + SCARD_E_CERTIFICATE_UNAVAILABLE Handle = 0x8010002D + SCARD_E_NO_READERS_AVAILABLE Handle = 0x8010002E + SCARD_E_COMM_DATA_LOST Handle = 0x8010002F + SCARD_E_NO_KEY_CONTAINER Handle = 0x80100030 + SCARD_E_SERVER_TOO_BUSY Handle = 0x80100031 + SCARD_E_PIN_CACHE_EXPIRED Handle = 0x80100032 + SCARD_E_NO_PIN_CACHE Handle = 0x80100033 + SCARD_E_READ_ONLY_CARD Handle = 0x80100034 + SCARD_W_UNSUPPORTED_CARD Handle = 0x80100065 + SCARD_W_UNRESPONSIVE_CARD Handle = 0x80100066 + SCARD_W_UNPOWERED_CARD Handle = 0x80100067 + SCARD_W_RESET_CARD Handle = 0x80100068 + SCARD_W_REMOVED_CARD Handle = 0x80100069 + SCARD_W_SECURITY_VIOLATION Handle = 0x8010006A + SCARD_W_WRONG_CHV Handle = 0x8010006B + SCARD_W_CHV_BLOCKED Handle = 0x8010006C + SCARD_W_EOF Handle = 0x8010006D + SCARD_W_CANCELLED_BY_USER Handle = 0x8010006E + SCARD_W_CARD_NOT_AUTHENTICATED Handle = 0x8010006F + SCARD_W_CACHE_ITEM_NOT_FOUND Handle = 0x80100070 + SCARD_W_CACHE_ITEM_STALE Handle = 0x80100071 + SCARD_W_CACHE_ITEM_TOO_BIG Handle = 0x80100072 + COMADMIN_E_OBJECTERRORS Handle = 0x80110401 + COMADMIN_E_OBJECTINVALID Handle = 0x80110402 + COMADMIN_E_KEYMISSING Handle = 0x80110403 + COMADMIN_E_ALREADYINSTALLED Handle = 0x80110404 + COMADMIN_E_APP_FILE_WRITEFAIL Handle = 0x80110407 + COMADMIN_E_APP_FILE_READFAIL Handle = 0x80110408 + COMADMIN_E_APP_FILE_VERSION Handle = 0x80110409 + COMADMIN_E_BADPATH Handle = 0x8011040A + COMADMIN_E_APPLICATIONEXISTS Handle = 0x8011040B + COMADMIN_E_ROLEEXISTS Handle = 0x8011040C + COMADMIN_E_CANTCOPYFILE Handle = 0x8011040D + COMADMIN_E_NOUSER Handle = 0x8011040F + COMADMIN_E_INVALIDUSERIDS Handle = 0x80110410 + COMADMIN_E_NOREGISTRYCLSID Handle = 0x80110411 + COMADMIN_E_BADREGISTRYPROGID Handle = 0x80110412 + COMADMIN_E_AUTHENTICATIONLEVEL Handle = 0x80110413 + COMADMIN_E_USERPASSWDNOTVALID Handle = 0x80110414 + COMADMIN_E_CLSIDORIIDMISMATCH Handle = 0x80110418 + COMADMIN_E_REMOTEINTERFACE Handle = 0x80110419 + COMADMIN_E_DLLREGISTERSERVER Handle = 0x8011041A + COMADMIN_E_NOSERVERSHARE Handle = 0x8011041B + COMADMIN_E_DLLLOADFAILED Handle = 0x8011041D + COMADMIN_E_BADREGISTRYLIBID Handle = 0x8011041E + COMADMIN_E_APPDIRNOTFOUND Handle = 0x8011041F + COMADMIN_E_REGISTRARFAILED Handle = 0x80110423 + COMADMIN_E_COMPFILE_DOESNOTEXIST Handle = 0x80110424 + COMADMIN_E_COMPFILE_LOADDLLFAIL Handle = 0x80110425 + COMADMIN_E_COMPFILE_GETCLASSOBJ Handle = 0x80110426 + COMADMIN_E_COMPFILE_CLASSNOTAVAIL Handle = 0x80110427 + COMADMIN_E_COMPFILE_BADTLB Handle = 0x80110428 + COMADMIN_E_COMPFILE_NOTINSTALLABLE Handle = 0x80110429 + COMADMIN_E_NOTCHANGEABLE Handle = 0x8011042A + COMADMIN_E_NOTDELETEABLE Handle = 0x8011042B + COMADMIN_E_SESSION Handle = 0x8011042C + COMADMIN_E_COMP_MOVE_LOCKED Handle = 0x8011042D + COMADMIN_E_COMP_MOVE_BAD_DEST Handle = 0x8011042E + COMADMIN_E_REGISTERTLB Handle = 0x80110430 + COMADMIN_E_SYSTEMAPP Handle = 0x80110433 + COMADMIN_E_COMPFILE_NOREGISTRAR Handle = 0x80110434 + COMADMIN_E_COREQCOMPINSTALLED Handle = 0x80110435 + COMADMIN_E_SERVICENOTINSTALLED Handle = 0x80110436 + COMADMIN_E_PROPERTYSAVEFAILED Handle = 0x80110437 + COMADMIN_E_OBJECTEXISTS Handle = 0x80110438 + COMADMIN_E_COMPONENTEXISTS Handle = 0x80110439 + COMADMIN_E_REGFILE_CORRUPT Handle = 0x8011043B + COMADMIN_E_PROPERTY_OVERFLOW Handle = 0x8011043C + COMADMIN_E_NOTINREGISTRY Handle = 0x8011043E + COMADMIN_E_OBJECTNOTPOOLABLE Handle = 0x8011043F + COMADMIN_E_APPLID_MATCHES_CLSID Handle = 0x80110446 + COMADMIN_E_ROLE_DOES_NOT_EXIST Handle = 0x80110447 + COMADMIN_E_START_APP_NEEDS_COMPONENTS Handle = 0x80110448 + COMADMIN_E_REQUIRES_DIFFERENT_PLATFORM Handle = 0x80110449 + COMADMIN_E_CAN_NOT_EXPORT_APP_PROXY Handle = 0x8011044A + COMADMIN_E_CAN_NOT_START_APP Handle = 0x8011044B + COMADMIN_E_CAN_NOT_EXPORT_SYS_APP Handle = 0x8011044C + COMADMIN_E_CANT_SUBSCRIBE_TO_COMPONENT Handle = 0x8011044D + COMADMIN_E_EVENTCLASS_CANT_BE_SUBSCRIBER Handle = 0x8011044E + COMADMIN_E_LIB_APP_PROXY_INCOMPATIBLE Handle = 0x8011044F + COMADMIN_E_BASE_PARTITION_ONLY Handle = 0x80110450 + COMADMIN_E_START_APP_DISABLED Handle = 0x80110451 + COMADMIN_E_CAT_DUPLICATE_PARTITION_NAME Handle = 0x80110457 + COMADMIN_E_CAT_INVALID_PARTITION_NAME Handle = 0x80110458 + COMADMIN_E_CAT_PARTITION_IN_USE Handle = 0x80110459 + COMADMIN_E_FILE_PARTITION_DUPLICATE_FILES Handle = 0x8011045A + COMADMIN_E_CAT_IMPORTED_COMPONENTS_NOT_ALLOWED Handle = 0x8011045B + COMADMIN_E_AMBIGUOUS_APPLICATION_NAME Handle = 0x8011045C + COMADMIN_E_AMBIGUOUS_PARTITION_NAME Handle = 0x8011045D + COMADMIN_E_REGDB_NOTINITIALIZED Handle = 0x80110472 + COMADMIN_E_REGDB_NOTOPEN Handle = 0x80110473 + COMADMIN_E_REGDB_SYSTEMERR Handle = 0x80110474 + COMADMIN_E_REGDB_ALREADYRUNNING Handle = 0x80110475 + COMADMIN_E_MIG_VERSIONNOTSUPPORTED Handle = 0x80110480 + COMADMIN_E_MIG_SCHEMANOTFOUND Handle = 0x80110481 + COMADMIN_E_CAT_BITNESSMISMATCH Handle = 0x80110482 + COMADMIN_E_CAT_UNACCEPTABLEBITNESS Handle = 0x80110483 + COMADMIN_E_CAT_WRONGAPPBITNESS Handle = 0x80110484 + COMADMIN_E_CAT_PAUSE_RESUME_NOT_SUPPORTED Handle = 0x80110485 + COMADMIN_E_CAT_SERVERFAULT Handle = 0x80110486 + COMQC_E_APPLICATION_NOT_QUEUED Handle = 0x80110600 + COMQC_E_NO_QUEUEABLE_INTERFACES Handle = 0x80110601 + COMQC_E_QUEUING_SERVICE_NOT_AVAILABLE Handle = 0x80110602 + COMQC_E_NO_IPERSISTSTREAM Handle = 0x80110603 + COMQC_E_BAD_MESSAGE Handle = 0x80110604 + COMQC_E_UNAUTHENTICATED Handle = 0x80110605 + COMQC_E_UNTRUSTED_ENQUEUER Handle = 0x80110606 + MSDTC_E_DUPLICATE_RESOURCE Handle = 0x80110701 + COMADMIN_E_OBJECT_PARENT_MISSING Handle = 0x80110808 + COMADMIN_E_OBJECT_DOES_NOT_EXIST Handle = 0x80110809 + COMADMIN_E_APP_NOT_RUNNING Handle = 0x8011080A + COMADMIN_E_INVALID_PARTITION Handle = 0x8011080B + COMADMIN_E_SVCAPP_NOT_POOLABLE_OR_RECYCLABLE Handle = 0x8011080D + COMADMIN_E_USER_IN_SET Handle = 0x8011080E + COMADMIN_E_CANTRECYCLELIBRARYAPPS Handle = 0x8011080F + COMADMIN_E_CANTRECYCLESERVICEAPPS Handle = 0x80110811 + COMADMIN_E_PROCESSALREADYRECYCLED Handle = 0x80110812 + COMADMIN_E_PAUSEDPROCESSMAYNOTBERECYCLED Handle = 0x80110813 + COMADMIN_E_CANTMAKEINPROCSERVICE Handle = 0x80110814 + COMADMIN_E_PROGIDINUSEBYCLSID Handle = 0x80110815 + COMADMIN_E_DEFAULT_PARTITION_NOT_IN_SET Handle = 0x80110816 + COMADMIN_E_RECYCLEDPROCESSMAYNOTBEPAUSED Handle = 0x80110817 + COMADMIN_E_PARTITION_ACCESSDENIED Handle = 0x80110818 + COMADMIN_E_PARTITION_MSI_ONLY Handle = 0x80110819 + COMADMIN_E_LEGACYCOMPS_NOT_ALLOWED_IN_1_0_FORMAT Handle = 0x8011081A + COMADMIN_E_LEGACYCOMPS_NOT_ALLOWED_IN_NONBASE_PARTITIONS Handle = 0x8011081B + COMADMIN_E_COMP_MOVE_SOURCE Handle = 0x8011081C + COMADMIN_E_COMP_MOVE_DEST Handle = 0x8011081D + COMADMIN_E_COMP_MOVE_PRIVATE Handle = 0x8011081E + COMADMIN_E_BASEPARTITION_REQUIRED_IN_SET Handle = 0x8011081F + COMADMIN_E_CANNOT_ALIAS_EVENTCLASS Handle = 0x80110820 + COMADMIN_E_PRIVATE_ACCESSDENIED Handle = 0x80110821 + COMADMIN_E_SAFERINVALID Handle = 0x80110822 + COMADMIN_E_REGISTRY_ACCESSDENIED Handle = 0x80110823 + COMADMIN_E_PARTITIONS_DISABLED Handle = 0x80110824 + WER_S_REPORT_DEBUG Handle = 0x001B0000 + WER_S_REPORT_UPLOADED Handle = 0x001B0001 + WER_S_REPORT_QUEUED Handle = 0x001B0002 + WER_S_DISABLED Handle = 0x001B0003 + WER_S_SUSPENDED_UPLOAD Handle = 0x001B0004 + WER_S_DISABLED_QUEUE Handle = 0x001B0005 + WER_S_DISABLED_ARCHIVE Handle = 0x001B0006 + WER_S_REPORT_ASYNC Handle = 0x001B0007 + WER_S_IGNORE_ASSERT_INSTANCE Handle = 0x001B0008 + WER_S_IGNORE_ALL_ASSERTS Handle = 0x001B0009 + WER_S_ASSERT_CONTINUE Handle = 0x001B000A + WER_S_THROTTLED Handle = 0x001B000B + WER_S_REPORT_UPLOADED_CAB Handle = 0x001B000C + WER_E_CRASH_FAILURE Handle = 0x801B8000 + WER_E_CANCELED Handle = 0x801B8001 + WER_E_NETWORK_FAILURE Handle = 0x801B8002 + WER_E_NOT_INITIALIZED Handle = 0x801B8003 + WER_E_ALREADY_REPORTING Handle = 0x801B8004 + WER_E_DUMP_THROTTLED Handle = 0x801B8005 + WER_E_INSUFFICIENT_CONSENT Handle = 0x801B8006 + WER_E_TOO_HEAVY Handle = 0x801B8007 + ERROR_FLT_IO_COMPLETE Handle = 0x001F0001 + ERROR_FLT_NO_HANDLER_DEFINED Handle = 0x801F0001 + ERROR_FLT_CONTEXT_ALREADY_DEFINED Handle = 0x801F0002 + ERROR_FLT_INVALID_ASYNCHRONOUS_REQUEST Handle = 0x801F0003 + ERROR_FLT_DISALLOW_FAST_IO Handle = 0x801F0004 + ERROR_FLT_INVALID_NAME_REQUEST Handle = 0x801F0005 + ERROR_FLT_NOT_SAFE_TO_POST_OPERATION Handle = 0x801F0006 + ERROR_FLT_NOT_INITIALIZED Handle = 0x801F0007 + ERROR_FLT_FILTER_NOT_READY Handle = 0x801F0008 + ERROR_FLT_POST_OPERATION_CLEANUP Handle = 0x801F0009 + ERROR_FLT_INTERNAL_ERROR Handle = 0x801F000A + ERROR_FLT_DELETING_OBJECT Handle = 0x801F000B + ERROR_FLT_MUST_BE_NONPAGED_POOL Handle = 0x801F000C + ERROR_FLT_DUPLICATE_ENTRY Handle = 0x801F000D + ERROR_FLT_CBDQ_DISABLED Handle = 0x801F000E + ERROR_FLT_DO_NOT_ATTACH Handle = 0x801F000F + ERROR_FLT_DO_NOT_DETACH Handle = 0x801F0010 + ERROR_FLT_INSTANCE_ALTITUDE_COLLISION Handle = 0x801F0011 + ERROR_FLT_INSTANCE_NAME_COLLISION Handle = 0x801F0012 + ERROR_FLT_FILTER_NOT_FOUND Handle = 0x801F0013 + ERROR_FLT_VOLUME_NOT_FOUND Handle = 0x801F0014 + ERROR_FLT_INSTANCE_NOT_FOUND Handle = 0x801F0015 + ERROR_FLT_CONTEXT_ALLOCATION_NOT_FOUND Handle = 0x801F0016 + ERROR_FLT_INVALID_CONTEXT_REGISTRATION Handle = 0x801F0017 + ERROR_FLT_NAME_CACHE_MISS Handle = 0x801F0018 + ERROR_FLT_NO_DEVICE_OBJECT Handle = 0x801F0019 + ERROR_FLT_VOLUME_ALREADY_MOUNTED Handle = 0x801F001A + ERROR_FLT_ALREADY_ENLISTED Handle = 0x801F001B + ERROR_FLT_CONTEXT_ALREADY_LINKED Handle = 0x801F001C + ERROR_FLT_NO_WAITER_FOR_REPLY Handle = 0x801F0020 + ERROR_FLT_REGISTRATION_BUSY Handle = 0x801F0023 + ERROR_HUNG_DISPLAY_DRIVER_THREAD Handle = 0x80260001 + DWM_E_COMPOSITIONDISABLED Handle = 0x80263001 + DWM_E_REMOTING_NOT_SUPPORTED Handle = 0x80263002 + DWM_E_NO_REDIRECTION_SURFACE_AVAILABLE Handle = 0x80263003 + DWM_E_NOT_QUEUING_PRESENTS Handle = 0x80263004 + DWM_E_ADAPTER_NOT_FOUND Handle = 0x80263005 + DWM_S_GDI_REDIRECTION_SURFACE Handle = 0x00263005 + DWM_E_TEXTURE_TOO_LARGE Handle = 0x80263007 + DWM_S_GDI_REDIRECTION_SURFACE_BLT_VIA_GDI Handle = 0x00263008 + ERROR_MONITOR_NO_DESCRIPTOR Handle = 0x00261001 + ERROR_MONITOR_UNKNOWN_DESCRIPTOR_FORMAT Handle = 0x00261002 + ERROR_MONITOR_INVALID_DESCRIPTOR_CHECKSUM Handle = 0xC0261003 + ERROR_MONITOR_INVALID_STANDARD_TIMING_BLOCK Handle = 0xC0261004 + ERROR_MONITOR_WMI_DATABLOCK_REGISTRATION_FAILED Handle = 0xC0261005 + ERROR_MONITOR_INVALID_SERIAL_NUMBER_MONDSC_BLOCK Handle = 0xC0261006 + ERROR_MONITOR_INVALID_USER_FRIENDLY_MONDSC_BLOCK Handle = 0xC0261007 + ERROR_MONITOR_NO_MORE_DESCRIPTOR_DATA Handle = 0xC0261008 + ERROR_MONITOR_INVALID_DETAILED_TIMING_BLOCK Handle = 0xC0261009 + ERROR_MONITOR_INVALID_MANUFACTURE_DATE Handle = 0xC026100A + ERROR_GRAPHICS_NOT_EXCLUSIVE_MODE_OWNER Handle = 0xC0262000 + ERROR_GRAPHICS_INSUFFICIENT_DMA_BUFFER Handle = 0xC0262001 + ERROR_GRAPHICS_INVALID_DISPLAY_ADAPTER Handle = 0xC0262002 + ERROR_GRAPHICS_ADAPTER_WAS_RESET Handle = 0xC0262003 + ERROR_GRAPHICS_INVALID_DRIVER_MODEL Handle = 0xC0262004 + ERROR_GRAPHICS_PRESENT_MODE_CHANGED Handle = 0xC0262005 + ERROR_GRAPHICS_PRESENT_OCCLUDED Handle = 0xC0262006 + ERROR_GRAPHICS_PRESENT_DENIED Handle = 0xC0262007 + ERROR_GRAPHICS_CANNOTCOLORCONVERT Handle = 0xC0262008 + ERROR_GRAPHICS_DRIVER_MISMATCH Handle = 0xC0262009 + ERROR_GRAPHICS_PARTIAL_DATA_POPULATED Handle = 0x4026200A + ERROR_GRAPHICS_PRESENT_REDIRECTION_DISABLED Handle = 0xC026200B + ERROR_GRAPHICS_PRESENT_UNOCCLUDED Handle = 0xC026200C + ERROR_GRAPHICS_WINDOWDC_NOT_AVAILABLE Handle = 0xC026200D + ERROR_GRAPHICS_WINDOWLESS_PRESENT_DISABLED Handle = 0xC026200E + ERROR_GRAPHICS_PRESENT_INVALID_WINDOW Handle = 0xC026200F + ERROR_GRAPHICS_PRESENT_BUFFER_NOT_BOUND Handle = 0xC0262010 + ERROR_GRAPHICS_VAIL_STATE_CHANGED Handle = 0xC0262011 + ERROR_GRAPHICS_NO_VIDEO_MEMORY Handle = 0xC0262100 + ERROR_GRAPHICS_CANT_LOCK_MEMORY Handle = 0xC0262101 + ERROR_GRAPHICS_ALLOCATION_BUSY Handle = 0xC0262102 + ERROR_GRAPHICS_TOO_MANY_REFERENCES Handle = 0xC0262103 + ERROR_GRAPHICS_TRY_AGAIN_LATER Handle = 0xC0262104 + ERROR_GRAPHICS_TRY_AGAIN_NOW Handle = 0xC0262105 + ERROR_GRAPHICS_ALLOCATION_INVALID Handle = 0xC0262106 + ERROR_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE Handle = 0xC0262107 + ERROR_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED Handle = 0xC0262108 + ERROR_GRAPHICS_CANT_EVICT_PINNED_ALLOCATION Handle = 0xC0262109 + ERROR_GRAPHICS_INVALID_ALLOCATION_USAGE Handle = 0xC0262110 + ERROR_GRAPHICS_CANT_RENDER_LOCKED_ALLOCATION Handle = 0xC0262111 + ERROR_GRAPHICS_ALLOCATION_CLOSED Handle = 0xC0262112 + ERROR_GRAPHICS_INVALID_ALLOCATION_INSTANCE Handle = 0xC0262113 + ERROR_GRAPHICS_INVALID_ALLOCATION_HANDLE Handle = 0xC0262114 + ERROR_GRAPHICS_WRONG_ALLOCATION_DEVICE Handle = 0xC0262115 + ERROR_GRAPHICS_ALLOCATION_CONTENT_LOST Handle = 0xC0262116 + ERROR_GRAPHICS_GPU_EXCEPTION_ON_DEVICE Handle = 0xC0262200 + ERROR_GRAPHICS_SKIP_ALLOCATION_PREPARATION Handle = 0x40262201 + ERROR_GRAPHICS_INVALID_VIDPN_TOPOLOGY Handle = 0xC0262300 + ERROR_GRAPHICS_VIDPN_TOPOLOGY_NOT_SUPPORTED Handle = 0xC0262301 + ERROR_GRAPHICS_VIDPN_TOPOLOGY_CURRENTLY_NOT_SUPPORTED Handle = 0xC0262302 + ERROR_GRAPHICS_INVALID_VIDPN Handle = 0xC0262303 + ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE Handle = 0xC0262304 + ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET Handle = 0xC0262305 + ERROR_GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED Handle = 0xC0262306 + ERROR_GRAPHICS_MODE_NOT_PINNED Handle = 0x00262307 + ERROR_GRAPHICS_INVALID_VIDPN_SOURCEMODESET Handle = 0xC0262308 + ERROR_GRAPHICS_INVALID_VIDPN_TARGETMODESET Handle = 0xC0262309 + ERROR_GRAPHICS_INVALID_FREQUENCY Handle = 0xC026230A + ERROR_GRAPHICS_INVALID_ACTIVE_REGION Handle = 0xC026230B + ERROR_GRAPHICS_INVALID_TOTAL_REGION Handle = 0xC026230C + ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE_MODE Handle = 0xC0262310 + ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET_MODE Handle = 0xC0262311 + ERROR_GRAPHICS_PINNED_MODE_MUST_REMAIN_IN_SET Handle = 0xC0262312 + ERROR_GRAPHICS_PATH_ALREADY_IN_TOPOLOGY Handle = 0xC0262313 + ERROR_GRAPHICS_MODE_ALREADY_IN_MODESET Handle = 0xC0262314 + ERROR_GRAPHICS_INVALID_VIDEOPRESENTSOURCESET Handle = 0xC0262315 + ERROR_GRAPHICS_INVALID_VIDEOPRESENTTARGETSET Handle = 0xC0262316 + ERROR_GRAPHICS_SOURCE_ALREADY_IN_SET Handle = 0xC0262317 + ERROR_GRAPHICS_TARGET_ALREADY_IN_SET Handle = 0xC0262318 + ERROR_GRAPHICS_INVALID_VIDPN_PRESENT_PATH Handle = 0xC0262319 + ERROR_GRAPHICS_NO_RECOMMENDED_VIDPN_TOPOLOGY Handle = 0xC026231A + ERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGESET Handle = 0xC026231B + ERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE Handle = 0xC026231C + ERROR_GRAPHICS_FREQUENCYRANGE_NOT_IN_SET Handle = 0xC026231D + ERROR_GRAPHICS_NO_PREFERRED_MODE Handle = 0x0026231E + ERROR_GRAPHICS_FREQUENCYRANGE_ALREADY_IN_SET Handle = 0xC026231F + ERROR_GRAPHICS_STALE_MODESET Handle = 0xC0262320 + ERROR_GRAPHICS_INVALID_MONITOR_SOURCEMODESET Handle = 0xC0262321 + ERROR_GRAPHICS_INVALID_MONITOR_SOURCE_MODE Handle = 0xC0262322 + ERROR_GRAPHICS_NO_RECOMMENDED_FUNCTIONAL_VIDPN Handle = 0xC0262323 + ERROR_GRAPHICS_MODE_ID_MUST_BE_UNIQUE Handle = 0xC0262324 + ERROR_GRAPHICS_EMPTY_ADAPTER_MONITOR_MODE_SUPPORT_INTERSECTION Handle = 0xC0262325 + ERROR_GRAPHICS_VIDEO_PRESENT_TARGETS_LESS_THAN_SOURCES Handle = 0xC0262326 + ERROR_GRAPHICS_PATH_NOT_IN_TOPOLOGY Handle = 0xC0262327 + ERROR_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_SOURCE Handle = 0xC0262328 + ERROR_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_TARGET Handle = 0xC0262329 + ERROR_GRAPHICS_INVALID_MONITORDESCRIPTORSET Handle = 0xC026232A + ERROR_GRAPHICS_INVALID_MONITORDESCRIPTOR Handle = 0xC026232B + ERROR_GRAPHICS_MONITORDESCRIPTOR_NOT_IN_SET Handle = 0xC026232C + ERROR_GRAPHICS_MONITORDESCRIPTOR_ALREADY_IN_SET Handle = 0xC026232D + ERROR_GRAPHICS_MONITORDESCRIPTOR_ID_MUST_BE_UNIQUE Handle = 0xC026232E + ERROR_GRAPHICS_INVALID_VIDPN_TARGET_SUBSET_TYPE Handle = 0xC026232F + ERROR_GRAPHICS_RESOURCES_NOT_RELATED Handle = 0xC0262330 + ERROR_GRAPHICS_SOURCE_ID_MUST_BE_UNIQUE Handle = 0xC0262331 + ERROR_GRAPHICS_TARGET_ID_MUST_BE_UNIQUE Handle = 0xC0262332 + ERROR_GRAPHICS_NO_AVAILABLE_VIDPN_TARGET Handle = 0xC0262333 + ERROR_GRAPHICS_MONITOR_COULD_NOT_BE_ASSOCIATED_WITH_ADAPTER Handle = 0xC0262334 + ERROR_GRAPHICS_NO_VIDPNMGR Handle = 0xC0262335 + ERROR_GRAPHICS_NO_ACTIVE_VIDPN Handle = 0xC0262336 + ERROR_GRAPHICS_STALE_VIDPN_TOPOLOGY Handle = 0xC0262337 + ERROR_GRAPHICS_MONITOR_NOT_CONNECTED Handle = 0xC0262338 + ERROR_GRAPHICS_SOURCE_NOT_IN_TOPOLOGY Handle = 0xC0262339 + ERROR_GRAPHICS_INVALID_PRIMARYSURFACE_SIZE Handle = 0xC026233A + ERROR_GRAPHICS_INVALID_VISIBLEREGION_SIZE Handle = 0xC026233B + ERROR_GRAPHICS_INVALID_STRIDE Handle = 0xC026233C + ERROR_GRAPHICS_INVALID_PIXELFORMAT Handle = 0xC026233D + ERROR_GRAPHICS_INVALID_COLORBASIS Handle = 0xC026233E + ERROR_GRAPHICS_INVALID_PIXELVALUEACCESSMODE Handle = 0xC026233F + ERROR_GRAPHICS_TARGET_NOT_IN_TOPOLOGY Handle = 0xC0262340 + ERROR_GRAPHICS_NO_DISPLAY_MODE_MANAGEMENT_SUPPORT Handle = 0xC0262341 + ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE Handle = 0xC0262342 + ERROR_GRAPHICS_CANT_ACCESS_ACTIVE_VIDPN Handle = 0xC0262343 + ERROR_GRAPHICS_INVALID_PATH_IMPORTANCE_ORDINAL Handle = 0xC0262344 + ERROR_GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION Handle = 0xC0262345 + ERROR_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_SUPPORTED Handle = 0xC0262346 + ERROR_GRAPHICS_INVALID_GAMMA_RAMP Handle = 0xC0262347 + ERROR_GRAPHICS_GAMMA_RAMP_NOT_SUPPORTED Handle = 0xC0262348 + ERROR_GRAPHICS_MULTISAMPLING_NOT_SUPPORTED Handle = 0xC0262349 + ERROR_GRAPHICS_MODE_NOT_IN_MODESET Handle = 0xC026234A + ERROR_GRAPHICS_DATASET_IS_EMPTY Handle = 0x0026234B + ERROR_GRAPHICS_NO_MORE_ELEMENTS_IN_DATASET Handle = 0x0026234C + ERROR_GRAPHICS_INVALID_VIDPN_TOPOLOGY_RECOMMENDATION_REASON Handle = 0xC026234D + ERROR_GRAPHICS_INVALID_PATH_CONTENT_TYPE Handle = 0xC026234E + ERROR_GRAPHICS_INVALID_COPYPROTECTION_TYPE Handle = 0xC026234F + ERROR_GRAPHICS_UNASSIGNED_MODESET_ALREADY_EXISTS Handle = 0xC0262350 + ERROR_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_PINNED Handle = 0x00262351 + ERROR_GRAPHICS_INVALID_SCANLINE_ORDERING Handle = 0xC0262352 + ERROR_GRAPHICS_TOPOLOGY_CHANGES_NOT_ALLOWED Handle = 0xC0262353 + ERROR_GRAPHICS_NO_AVAILABLE_IMPORTANCE_ORDINALS Handle = 0xC0262354 + ERROR_GRAPHICS_INCOMPATIBLE_PRIVATE_FORMAT Handle = 0xC0262355 + ERROR_GRAPHICS_INVALID_MODE_PRUNING_ALGORITHM Handle = 0xC0262356 + ERROR_GRAPHICS_INVALID_MONITOR_CAPABILITY_ORIGIN Handle = 0xC0262357 + ERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE_CONSTRAINT Handle = 0xC0262358 + ERROR_GRAPHICS_MAX_NUM_PATHS_REACHED Handle = 0xC0262359 + ERROR_GRAPHICS_CANCEL_VIDPN_TOPOLOGY_AUGMENTATION Handle = 0xC026235A + ERROR_GRAPHICS_INVALID_CLIENT_TYPE Handle = 0xC026235B + ERROR_GRAPHICS_CLIENTVIDPN_NOT_SET Handle = 0xC026235C + ERROR_GRAPHICS_SPECIFIED_CHILD_ALREADY_CONNECTED Handle = 0xC0262400 + ERROR_GRAPHICS_CHILD_DESCRIPTOR_NOT_SUPPORTED Handle = 0xC0262401 + ERROR_GRAPHICS_UNKNOWN_CHILD_STATUS Handle = 0x4026242F + ERROR_GRAPHICS_NOT_A_LINKED_ADAPTER Handle = 0xC0262430 + ERROR_GRAPHICS_LEADLINK_NOT_ENUMERATED Handle = 0xC0262431 + ERROR_GRAPHICS_CHAINLINKS_NOT_ENUMERATED Handle = 0xC0262432 + ERROR_GRAPHICS_ADAPTER_CHAIN_NOT_READY Handle = 0xC0262433 + ERROR_GRAPHICS_CHAINLINKS_NOT_STARTED Handle = 0xC0262434 + ERROR_GRAPHICS_CHAINLINKS_NOT_POWERED_ON Handle = 0xC0262435 + ERROR_GRAPHICS_INCONSISTENT_DEVICE_LINK_STATE Handle = 0xC0262436 + ERROR_GRAPHICS_LEADLINK_START_DEFERRED Handle = 0x40262437 + ERROR_GRAPHICS_NOT_POST_DEVICE_DRIVER Handle = 0xC0262438 + ERROR_GRAPHICS_POLLING_TOO_FREQUENTLY Handle = 0x40262439 + ERROR_GRAPHICS_START_DEFERRED Handle = 0x4026243A + ERROR_GRAPHICS_ADAPTER_ACCESS_NOT_EXCLUDED Handle = 0xC026243B + ERROR_GRAPHICS_DEPENDABLE_CHILD_STATUS Handle = 0x4026243C + ERROR_GRAPHICS_OPM_NOT_SUPPORTED Handle = 0xC0262500 + ERROR_GRAPHICS_COPP_NOT_SUPPORTED Handle = 0xC0262501 + ERROR_GRAPHICS_UAB_NOT_SUPPORTED Handle = 0xC0262502 + ERROR_GRAPHICS_OPM_INVALID_ENCRYPTED_PARAMETERS Handle = 0xC0262503 + ERROR_GRAPHICS_OPM_NO_VIDEO_OUTPUTS_EXIST Handle = 0xC0262505 + ERROR_GRAPHICS_OPM_INTERNAL_ERROR Handle = 0xC026250B + ERROR_GRAPHICS_OPM_INVALID_HANDLE Handle = 0xC026250C + ERROR_GRAPHICS_PVP_INVALID_CERTIFICATE_LENGTH Handle = 0xC026250E + ERROR_GRAPHICS_OPM_SPANNING_MODE_ENABLED Handle = 0xC026250F + ERROR_GRAPHICS_OPM_THEATER_MODE_ENABLED Handle = 0xC0262510 + ERROR_GRAPHICS_PVP_HFS_FAILED Handle = 0xC0262511 + ERROR_GRAPHICS_OPM_INVALID_SRM Handle = 0xC0262512 + ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_HDCP Handle = 0xC0262513 + ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_ACP Handle = 0xC0262514 + ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_CGMSA Handle = 0xC0262515 + ERROR_GRAPHICS_OPM_HDCP_SRM_NEVER_SET Handle = 0xC0262516 + ERROR_GRAPHICS_OPM_RESOLUTION_TOO_HIGH Handle = 0xC0262517 + ERROR_GRAPHICS_OPM_ALL_HDCP_HARDWARE_ALREADY_IN_USE Handle = 0xC0262518 + ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_NO_LONGER_EXISTS Handle = 0xC026251A + ERROR_GRAPHICS_OPM_SESSION_TYPE_CHANGE_IN_PROGRESS Handle = 0xC026251B + ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_COPP_SEMANTICS Handle = 0xC026251C + ERROR_GRAPHICS_OPM_INVALID_INFORMATION_REQUEST Handle = 0xC026251D + ERROR_GRAPHICS_OPM_DRIVER_INTERNAL_ERROR Handle = 0xC026251E + ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_OPM_SEMANTICS Handle = 0xC026251F + ERROR_GRAPHICS_OPM_SIGNALING_NOT_SUPPORTED Handle = 0xC0262520 + ERROR_GRAPHICS_OPM_INVALID_CONFIGURATION_REQUEST Handle = 0xC0262521 + ERROR_GRAPHICS_I2C_NOT_SUPPORTED Handle = 0xC0262580 + ERROR_GRAPHICS_I2C_DEVICE_DOES_NOT_EXIST Handle = 0xC0262581 + ERROR_GRAPHICS_I2C_ERROR_TRANSMITTING_DATA Handle = 0xC0262582 + ERROR_GRAPHICS_I2C_ERROR_RECEIVING_DATA Handle = 0xC0262583 + ERROR_GRAPHICS_DDCCI_VCP_NOT_SUPPORTED Handle = 0xC0262584 + ERROR_GRAPHICS_DDCCI_INVALID_DATA Handle = 0xC0262585 + ERROR_GRAPHICS_DDCCI_MONITOR_RETURNED_INVALID_TIMING_STATUS_BYTE Handle = 0xC0262586 + ERROR_GRAPHICS_MCA_INVALID_CAPABILITIES_STRING Handle = 0xC0262587 + ERROR_GRAPHICS_MCA_INTERNAL_ERROR Handle = 0xC0262588 + ERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_COMMAND Handle = 0xC0262589 + ERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_LENGTH Handle = 0xC026258A + ERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_CHECKSUM Handle = 0xC026258B + ERROR_GRAPHICS_INVALID_PHYSICAL_MONITOR_HANDLE Handle = 0xC026258C + ERROR_GRAPHICS_MONITOR_NO_LONGER_EXISTS Handle = 0xC026258D + ERROR_GRAPHICS_DDCCI_CURRENT_CURRENT_VALUE_GREATER_THAN_MAXIMUM_VALUE Handle = 0xC02625D8 + ERROR_GRAPHICS_MCA_INVALID_VCP_VERSION Handle = 0xC02625D9 + ERROR_GRAPHICS_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION Handle = 0xC02625DA + ERROR_GRAPHICS_MCA_MCCS_VERSION_MISMATCH Handle = 0xC02625DB + ERROR_GRAPHICS_MCA_UNSUPPORTED_MCCS_VERSION Handle = 0xC02625DC + ERROR_GRAPHICS_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED Handle = 0xC02625DE + ERROR_GRAPHICS_MCA_UNSUPPORTED_COLOR_TEMPERATURE Handle = 0xC02625DF + ERROR_GRAPHICS_ONLY_CONSOLE_SESSION_SUPPORTED Handle = 0xC02625E0 + ERROR_GRAPHICS_NO_DISPLAY_DEVICE_CORRESPONDS_TO_NAME Handle = 0xC02625E1 + ERROR_GRAPHICS_DISPLAY_DEVICE_NOT_ATTACHED_TO_DESKTOP Handle = 0xC02625E2 + ERROR_GRAPHICS_MIRRORING_DEVICES_NOT_SUPPORTED Handle = 0xC02625E3 + ERROR_GRAPHICS_INVALID_POINTER Handle = 0xC02625E4 + ERROR_GRAPHICS_NO_MONITORS_CORRESPOND_TO_DISPLAY_DEVICE Handle = 0xC02625E5 + ERROR_GRAPHICS_PARAMETER_ARRAY_TOO_SMALL Handle = 0xC02625E6 + ERROR_GRAPHICS_INTERNAL_ERROR Handle = 0xC02625E7 + ERROR_GRAPHICS_SESSION_TYPE_CHANGE_IN_PROGRESS Handle = 0xC02605E8 + NAP_E_INVALID_PACKET Handle = 0x80270001 + NAP_E_MISSING_SOH Handle = 0x80270002 + NAP_E_CONFLICTING_ID Handle = 0x80270003 + NAP_E_NO_CACHED_SOH Handle = 0x80270004 + NAP_E_STILL_BOUND Handle = 0x80270005 + NAP_E_NOT_REGISTERED Handle = 0x80270006 + NAP_E_NOT_INITIALIZED Handle = 0x80270007 + NAP_E_MISMATCHED_ID Handle = 0x80270008 + NAP_E_NOT_PENDING Handle = 0x80270009 + NAP_E_ID_NOT_FOUND Handle = 0x8027000A + NAP_E_MAXSIZE_TOO_SMALL Handle = 0x8027000B + NAP_E_SERVICE_NOT_RUNNING Handle = 0x8027000C + NAP_S_CERT_ALREADY_PRESENT Handle = 0x0027000D + NAP_E_ENTITY_DISABLED Handle = 0x8027000E + NAP_E_NETSH_GROUPPOLICY_ERROR Handle = 0x8027000F + NAP_E_TOO_MANY_CALLS Handle = 0x80270010 + NAP_E_SHV_CONFIG_EXISTED Handle = 0x80270011 + NAP_E_SHV_CONFIG_NOT_FOUND Handle = 0x80270012 + NAP_E_SHV_TIMEOUT Handle = 0x80270013 + TPM_E_ERROR_MASK Handle = 0x80280000 + TPM_E_AUTHFAIL Handle = 0x80280001 + TPM_E_BADINDEX Handle = 0x80280002 + TPM_E_BAD_PARAMETER Handle = 0x80280003 + TPM_E_AUDITFAILURE Handle = 0x80280004 + TPM_E_CLEAR_DISABLED Handle = 0x80280005 + TPM_E_DEACTIVATED Handle = 0x80280006 + TPM_E_DISABLED Handle = 0x80280007 + TPM_E_DISABLED_CMD Handle = 0x80280008 + TPM_E_FAIL Handle = 0x80280009 + TPM_E_BAD_ORDINAL Handle = 0x8028000A + TPM_E_INSTALL_DISABLED Handle = 0x8028000B + TPM_E_INVALID_KEYHANDLE Handle = 0x8028000C + TPM_E_KEYNOTFOUND Handle = 0x8028000D + TPM_E_INAPPROPRIATE_ENC Handle = 0x8028000E + TPM_E_MIGRATEFAIL Handle = 0x8028000F + TPM_E_INVALID_PCR_INFO Handle = 0x80280010 + TPM_E_NOSPACE Handle = 0x80280011 + TPM_E_NOSRK Handle = 0x80280012 + TPM_E_NOTSEALED_BLOB Handle = 0x80280013 + TPM_E_OWNER_SET Handle = 0x80280014 + TPM_E_RESOURCES Handle = 0x80280015 + TPM_E_SHORTRANDOM Handle = 0x80280016 + TPM_E_SIZE Handle = 0x80280017 + TPM_E_WRONGPCRVAL Handle = 0x80280018 + TPM_E_BAD_PARAM_SIZE Handle = 0x80280019 + TPM_E_SHA_THREAD Handle = 0x8028001A + TPM_E_SHA_ERROR Handle = 0x8028001B + TPM_E_FAILEDSELFTEST Handle = 0x8028001C + TPM_E_AUTH2FAIL Handle = 0x8028001D + TPM_E_BADTAG Handle = 0x8028001E + TPM_E_IOERROR Handle = 0x8028001F + TPM_E_ENCRYPT_ERROR Handle = 0x80280020 + TPM_E_DECRYPT_ERROR Handle = 0x80280021 + TPM_E_INVALID_AUTHHANDLE Handle = 0x80280022 + TPM_E_NO_ENDORSEMENT Handle = 0x80280023 + TPM_E_INVALID_KEYUSAGE Handle = 0x80280024 + TPM_E_WRONG_ENTITYTYPE Handle = 0x80280025 + TPM_E_INVALID_POSTINIT Handle = 0x80280026 + TPM_E_INAPPROPRIATE_SIG Handle = 0x80280027 + TPM_E_BAD_KEY_PROPERTY Handle = 0x80280028 + TPM_E_BAD_MIGRATION Handle = 0x80280029 + TPM_E_BAD_SCHEME Handle = 0x8028002A + TPM_E_BAD_DATASIZE Handle = 0x8028002B + TPM_E_BAD_MODE Handle = 0x8028002C + TPM_E_BAD_PRESENCE Handle = 0x8028002D + TPM_E_BAD_VERSION Handle = 0x8028002E + TPM_E_NO_WRAP_TRANSPORT Handle = 0x8028002F + TPM_E_AUDITFAIL_UNSUCCESSFUL Handle = 0x80280030 + TPM_E_AUDITFAIL_SUCCESSFUL Handle = 0x80280031 + TPM_E_NOTRESETABLE Handle = 0x80280032 + TPM_E_NOTLOCAL Handle = 0x80280033 + TPM_E_BAD_TYPE Handle = 0x80280034 + TPM_E_INVALID_RESOURCE Handle = 0x80280035 + TPM_E_NOTFIPS Handle = 0x80280036 + TPM_E_INVALID_FAMILY Handle = 0x80280037 + TPM_E_NO_NV_PERMISSION Handle = 0x80280038 + TPM_E_REQUIRES_SIGN Handle = 0x80280039 + TPM_E_KEY_NOTSUPPORTED Handle = 0x8028003A + TPM_E_AUTH_CONFLICT Handle = 0x8028003B + TPM_E_AREA_LOCKED Handle = 0x8028003C + TPM_E_BAD_LOCALITY Handle = 0x8028003D + TPM_E_READ_ONLY Handle = 0x8028003E + TPM_E_PER_NOWRITE Handle = 0x8028003F + TPM_E_FAMILYCOUNT Handle = 0x80280040 + TPM_E_WRITE_LOCKED Handle = 0x80280041 + TPM_E_BAD_ATTRIBUTES Handle = 0x80280042 + TPM_E_INVALID_STRUCTURE Handle = 0x80280043 + TPM_E_KEY_OWNER_CONTROL Handle = 0x80280044 + TPM_E_BAD_COUNTER Handle = 0x80280045 + TPM_E_NOT_FULLWRITE Handle = 0x80280046 + TPM_E_CONTEXT_GAP Handle = 0x80280047 + TPM_E_MAXNVWRITES Handle = 0x80280048 + TPM_E_NOOPERATOR Handle = 0x80280049 + TPM_E_RESOURCEMISSING Handle = 0x8028004A + TPM_E_DELEGATE_LOCK Handle = 0x8028004B + TPM_E_DELEGATE_FAMILY Handle = 0x8028004C + TPM_E_DELEGATE_ADMIN Handle = 0x8028004D + TPM_E_TRANSPORT_NOTEXCLUSIVE Handle = 0x8028004E + TPM_E_OWNER_CONTROL Handle = 0x8028004F + TPM_E_DAA_RESOURCES Handle = 0x80280050 + TPM_E_DAA_INPUT_DATA0 Handle = 0x80280051 + TPM_E_DAA_INPUT_DATA1 Handle = 0x80280052 + TPM_E_DAA_ISSUER_SETTINGS Handle = 0x80280053 + TPM_E_DAA_TPM_SETTINGS Handle = 0x80280054 + TPM_E_DAA_STAGE Handle = 0x80280055 + TPM_E_DAA_ISSUER_VALIDITY Handle = 0x80280056 + TPM_E_DAA_WRONG_W Handle = 0x80280057 + TPM_E_BAD_HANDLE Handle = 0x80280058 + TPM_E_BAD_DELEGATE Handle = 0x80280059 + TPM_E_BADCONTEXT Handle = 0x8028005A + TPM_E_TOOMANYCONTEXTS Handle = 0x8028005B + TPM_E_MA_TICKET_SIGNATURE Handle = 0x8028005C + TPM_E_MA_DESTINATION Handle = 0x8028005D + TPM_E_MA_SOURCE Handle = 0x8028005E + TPM_E_MA_AUTHORITY Handle = 0x8028005F + TPM_E_PERMANENTEK Handle = 0x80280061 + TPM_E_BAD_SIGNATURE Handle = 0x80280062 + TPM_E_NOCONTEXTSPACE Handle = 0x80280063 + TPM_20_E_ASYMMETRIC Handle = 0x80280081 + TPM_20_E_ATTRIBUTES Handle = 0x80280082 + TPM_20_E_HASH Handle = 0x80280083 + TPM_20_E_VALUE Handle = 0x80280084 + TPM_20_E_HIERARCHY Handle = 0x80280085 + TPM_20_E_KEY_SIZE Handle = 0x80280087 + TPM_20_E_MGF Handle = 0x80280088 + TPM_20_E_MODE Handle = 0x80280089 + TPM_20_E_TYPE Handle = 0x8028008A + TPM_20_E_HANDLE Handle = 0x8028008B + TPM_20_E_KDF Handle = 0x8028008C + TPM_20_E_RANGE Handle = 0x8028008D + TPM_20_E_AUTH_FAIL Handle = 0x8028008E + TPM_20_E_NONCE Handle = 0x8028008F + TPM_20_E_PP Handle = 0x80280090 + TPM_20_E_SCHEME Handle = 0x80280092 + TPM_20_E_SIZE Handle = 0x80280095 + TPM_20_E_SYMMETRIC Handle = 0x80280096 + TPM_20_E_TAG Handle = 0x80280097 + TPM_20_E_SELECTOR Handle = 0x80280098 + TPM_20_E_INSUFFICIENT Handle = 0x8028009A + TPM_20_E_SIGNATURE Handle = 0x8028009B + TPM_20_E_KEY Handle = 0x8028009C + TPM_20_E_POLICY_FAIL Handle = 0x8028009D + TPM_20_E_INTEGRITY Handle = 0x8028009F + TPM_20_E_TICKET Handle = 0x802800A0 + TPM_20_E_RESERVED_BITS Handle = 0x802800A1 + TPM_20_E_BAD_AUTH Handle = 0x802800A2 + TPM_20_E_EXPIRED Handle = 0x802800A3 + TPM_20_E_POLICY_CC Handle = 0x802800A4 + TPM_20_E_BINDING Handle = 0x802800A5 + TPM_20_E_CURVE Handle = 0x802800A6 + TPM_20_E_ECC_POINT Handle = 0x802800A7 + TPM_20_E_INITIALIZE Handle = 0x80280100 + TPM_20_E_FAILURE Handle = 0x80280101 + TPM_20_E_SEQUENCE Handle = 0x80280103 + TPM_20_E_PRIVATE Handle = 0x8028010B + TPM_20_E_HMAC Handle = 0x80280119 + TPM_20_E_DISABLED Handle = 0x80280120 + TPM_20_E_EXCLUSIVE Handle = 0x80280121 + TPM_20_E_ECC_CURVE Handle = 0x80280123 + TPM_20_E_AUTH_TYPE Handle = 0x80280124 + TPM_20_E_AUTH_MISSING Handle = 0x80280125 + TPM_20_E_POLICY Handle = 0x80280126 + TPM_20_E_PCR Handle = 0x80280127 + TPM_20_E_PCR_CHANGED Handle = 0x80280128 + TPM_20_E_UPGRADE Handle = 0x8028012D + TPM_20_E_TOO_MANY_CONTEXTS Handle = 0x8028012E + TPM_20_E_AUTH_UNAVAILABLE Handle = 0x8028012F + TPM_20_E_REBOOT Handle = 0x80280130 + TPM_20_E_UNBALANCED Handle = 0x80280131 + TPM_20_E_COMMAND_SIZE Handle = 0x80280142 + TPM_20_E_COMMAND_CODE Handle = 0x80280143 + TPM_20_E_AUTHSIZE Handle = 0x80280144 + TPM_20_E_AUTH_CONTEXT Handle = 0x80280145 + TPM_20_E_NV_RANGE Handle = 0x80280146 + TPM_20_E_NV_SIZE Handle = 0x80280147 + TPM_20_E_NV_LOCKED Handle = 0x80280148 + TPM_20_E_NV_AUTHORIZATION Handle = 0x80280149 + TPM_20_E_NV_UNINITIALIZED Handle = 0x8028014A + TPM_20_E_NV_SPACE Handle = 0x8028014B + TPM_20_E_NV_DEFINED Handle = 0x8028014C + TPM_20_E_BAD_CONTEXT Handle = 0x80280150 + TPM_20_E_CPHASH Handle = 0x80280151 + TPM_20_E_PARENT Handle = 0x80280152 + TPM_20_E_NEEDS_TEST Handle = 0x80280153 + TPM_20_E_NO_RESULT Handle = 0x80280154 + TPM_20_E_SENSITIVE Handle = 0x80280155 + TPM_E_COMMAND_BLOCKED Handle = 0x80280400 + TPM_E_INVALID_HANDLE Handle = 0x80280401 + TPM_E_DUPLICATE_VHANDLE Handle = 0x80280402 + TPM_E_EMBEDDED_COMMAND_BLOCKED Handle = 0x80280403 + TPM_E_EMBEDDED_COMMAND_UNSUPPORTED Handle = 0x80280404 + TPM_E_RETRY Handle = 0x80280800 + TPM_E_NEEDS_SELFTEST Handle = 0x80280801 + TPM_E_DOING_SELFTEST Handle = 0x80280802 + TPM_E_DEFEND_LOCK_RUNNING Handle = 0x80280803 + TPM_20_E_CONTEXT_GAP Handle = 0x80280901 + TPM_20_E_OBJECT_MEMORY Handle = 0x80280902 + TPM_20_E_SESSION_MEMORY Handle = 0x80280903 + TPM_20_E_MEMORY Handle = 0x80280904 + TPM_20_E_SESSION_HANDLES Handle = 0x80280905 + TPM_20_E_OBJECT_HANDLES Handle = 0x80280906 + TPM_20_E_LOCALITY Handle = 0x80280907 + TPM_20_E_YIELDED Handle = 0x80280908 + TPM_20_E_CANCELED Handle = 0x80280909 + TPM_20_E_TESTING Handle = 0x8028090A + TPM_20_E_NV_RATE Handle = 0x80280920 + TPM_20_E_LOCKOUT Handle = 0x80280921 + TPM_20_E_RETRY Handle = 0x80280922 + TPM_20_E_NV_UNAVAILABLE Handle = 0x80280923 + TBS_E_INTERNAL_ERROR Handle = 0x80284001 + TBS_E_BAD_PARAMETER Handle = 0x80284002 + TBS_E_INVALID_OUTPUT_POINTER Handle = 0x80284003 + TBS_E_INVALID_CONTEXT Handle = 0x80284004 + TBS_E_INSUFFICIENT_BUFFER Handle = 0x80284005 + TBS_E_IOERROR Handle = 0x80284006 + TBS_E_INVALID_CONTEXT_PARAM Handle = 0x80284007 + TBS_E_SERVICE_NOT_RUNNING Handle = 0x80284008 + TBS_E_TOO_MANY_TBS_CONTEXTS Handle = 0x80284009 + TBS_E_TOO_MANY_RESOURCES Handle = 0x8028400A + TBS_E_SERVICE_START_PENDING Handle = 0x8028400B + TBS_E_PPI_NOT_SUPPORTED Handle = 0x8028400C + TBS_E_COMMAND_CANCELED Handle = 0x8028400D + TBS_E_BUFFER_TOO_LARGE Handle = 0x8028400E + TBS_E_TPM_NOT_FOUND Handle = 0x8028400F + TBS_E_SERVICE_DISABLED Handle = 0x80284010 + TBS_E_NO_EVENT_LOG Handle = 0x80284011 + TBS_E_ACCESS_DENIED Handle = 0x80284012 + TBS_E_PROVISIONING_NOT_ALLOWED Handle = 0x80284013 + TBS_E_PPI_FUNCTION_UNSUPPORTED Handle = 0x80284014 + TBS_E_OWNERAUTH_NOT_FOUND Handle = 0x80284015 + TBS_E_PROVISIONING_INCOMPLETE Handle = 0x80284016 + TPMAPI_E_INVALID_STATE Handle = 0x80290100 + TPMAPI_E_NOT_ENOUGH_DATA Handle = 0x80290101 + TPMAPI_E_TOO_MUCH_DATA Handle = 0x80290102 + TPMAPI_E_INVALID_OUTPUT_POINTER Handle = 0x80290103 + TPMAPI_E_INVALID_PARAMETER Handle = 0x80290104 + TPMAPI_E_OUT_OF_MEMORY Handle = 0x80290105 + TPMAPI_E_BUFFER_TOO_SMALL Handle = 0x80290106 + TPMAPI_E_INTERNAL_ERROR Handle = 0x80290107 + TPMAPI_E_ACCESS_DENIED Handle = 0x80290108 + TPMAPI_E_AUTHORIZATION_FAILED Handle = 0x80290109 + TPMAPI_E_INVALID_CONTEXT_HANDLE Handle = 0x8029010A + TPMAPI_E_TBS_COMMUNICATION_ERROR Handle = 0x8029010B + TPMAPI_E_TPM_COMMAND_ERROR Handle = 0x8029010C + TPMAPI_E_MESSAGE_TOO_LARGE Handle = 0x8029010D + TPMAPI_E_INVALID_ENCODING Handle = 0x8029010E + TPMAPI_E_INVALID_KEY_SIZE Handle = 0x8029010F + TPMAPI_E_ENCRYPTION_FAILED Handle = 0x80290110 + TPMAPI_E_INVALID_KEY_PARAMS Handle = 0x80290111 + TPMAPI_E_INVALID_MIGRATION_AUTHORIZATION_BLOB Handle = 0x80290112 + TPMAPI_E_INVALID_PCR_INDEX Handle = 0x80290113 + TPMAPI_E_INVALID_DELEGATE_BLOB Handle = 0x80290114 + TPMAPI_E_INVALID_CONTEXT_PARAMS Handle = 0x80290115 + TPMAPI_E_INVALID_KEY_BLOB Handle = 0x80290116 + TPMAPI_E_INVALID_PCR_DATA Handle = 0x80290117 + TPMAPI_E_INVALID_OWNER_AUTH Handle = 0x80290118 + TPMAPI_E_FIPS_RNG_CHECK_FAILED Handle = 0x80290119 + TPMAPI_E_EMPTY_TCG_LOG Handle = 0x8029011A + TPMAPI_E_INVALID_TCG_LOG_ENTRY Handle = 0x8029011B + TPMAPI_E_TCG_SEPARATOR_ABSENT Handle = 0x8029011C + TPMAPI_E_TCG_INVALID_DIGEST_ENTRY Handle = 0x8029011D + TPMAPI_E_POLICY_DENIES_OPERATION Handle = 0x8029011E + TPMAPI_E_NV_BITS_NOT_DEFINED Handle = 0x8029011F + TPMAPI_E_NV_BITS_NOT_READY Handle = 0x80290120 + TPMAPI_E_SEALING_KEY_NOT_AVAILABLE Handle = 0x80290121 + TPMAPI_E_NO_AUTHORIZATION_CHAIN_FOUND Handle = 0x80290122 + TPMAPI_E_SVN_COUNTER_NOT_AVAILABLE Handle = 0x80290123 + TPMAPI_E_OWNER_AUTH_NOT_NULL Handle = 0x80290124 + TPMAPI_E_ENDORSEMENT_AUTH_NOT_NULL Handle = 0x80290125 + TPMAPI_E_AUTHORIZATION_REVOKED Handle = 0x80290126 + TPMAPI_E_MALFORMED_AUTHORIZATION_KEY Handle = 0x80290127 + TPMAPI_E_AUTHORIZING_KEY_NOT_SUPPORTED Handle = 0x80290128 + TPMAPI_E_INVALID_AUTHORIZATION_SIGNATURE Handle = 0x80290129 + TPMAPI_E_MALFORMED_AUTHORIZATION_POLICY Handle = 0x8029012A + TPMAPI_E_MALFORMED_AUTHORIZATION_OTHER Handle = 0x8029012B + TPMAPI_E_SEALING_KEY_CHANGED Handle = 0x8029012C + TBSIMP_E_BUFFER_TOO_SMALL Handle = 0x80290200 + TBSIMP_E_CLEANUP_FAILED Handle = 0x80290201 + TBSIMP_E_INVALID_CONTEXT_HANDLE Handle = 0x80290202 + TBSIMP_E_INVALID_CONTEXT_PARAM Handle = 0x80290203 + TBSIMP_E_TPM_ERROR Handle = 0x80290204 + TBSIMP_E_HASH_BAD_KEY Handle = 0x80290205 + TBSIMP_E_DUPLICATE_VHANDLE Handle = 0x80290206 + TBSIMP_E_INVALID_OUTPUT_POINTER Handle = 0x80290207 + TBSIMP_E_INVALID_PARAMETER Handle = 0x80290208 + TBSIMP_E_RPC_INIT_FAILED Handle = 0x80290209 + TBSIMP_E_SCHEDULER_NOT_RUNNING Handle = 0x8029020A + TBSIMP_E_COMMAND_CANCELED Handle = 0x8029020B + TBSIMP_E_OUT_OF_MEMORY Handle = 0x8029020C + TBSIMP_E_LIST_NO_MORE_ITEMS Handle = 0x8029020D + TBSIMP_E_LIST_NOT_FOUND Handle = 0x8029020E + TBSIMP_E_NOT_ENOUGH_SPACE Handle = 0x8029020F + TBSIMP_E_NOT_ENOUGH_TPM_CONTEXTS Handle = 0x80290210 + TBSIMP_E_COMMAND_FAILED Handle = 0x80290211 + TBSIMP_E_UNKNOWN_ORDINAL Handle = 0x80290212 + TBSIMP_E_RESOURCE_EXPIRED Handle = 0x80290213 + TBSIMP_E_INVALID_RESOURCE Handle = 0x80290214 + TBSIMP_E_NOTHING_TO_UNLOAD Handle = 0x80290215 + TBSIMP_E_HASH_TABLE_FULL Handle = 0x80290216 + TBSIMP_E_TOO_MANY_TBS_CONTEXTS Handle = 0x80290217 + TBSIMP_E_TOO_MANY_RESOURCES Handle = 0x80290218 + TBSIMP_E_PPI_NOT_SUPPORTED Handle = 0x80290219 + TBSIMP_E_TPM_INCOMPATIBLE Handle = 0x8029021A + TBSIMP_E_NO_EVENT_LOG Handle = 0x8029021B + TPM_E_PPI_ACPI_FAILURE Handle = 0x80290300 + TPM_E_PPI_USER_ABORT Handle = 0x80290301 + TPM_E_PPI_BIOS_FAILURE Handle = 0x80290302 + TPM_E_PPI_NOT_SUPPORTED Handle = 0x80290303 + TPM_E_PPI_BLOCKED_IN_BIOS Handle = 0x80290304 + TPM_E_PCP_ERROR_MASK Handle = 0x80290400 + TPM_E_PCP_DEVICE_NOT_READY Handle = 0x80290401 + TPM_E_PCP_INVALID_HANDLE Handle = 0x80290402 + TPM_E_PCP_INVALID_PARAMETER Handle = 0x80290403 + TPM_E_PCP_FLAG_NOT_SUPPORTED Handle = 0x80290404 + TPM_E_PCP_NOT_SUPPORTED Handle = 0x80290405 + TPM_E_PCP_BUFFER_TOO_SMALL Handle = 0x80290406 + TPM_E_PCP_INTERNAL_ERROR Handle = 0x80290407 + TPM_E_PCP_AUTHENTICATION_FAILED Handle = 0x80290408 + TPM_E_PCP_AUTHENTICATION_IGNORED Handle = 0x80290409 + TPM_E_PCP_POLICY_NOT_FOUND Handle = 0x8029040A + TPM_E_PCP_PROFILE_NOT_FOUND Handle = 0x8029040B + TPM_E_PCP_VALIDATION_FAILED Handle = 0x8029040C + TPM_E_PCP_WRONG_PARENT Handle = 0x8029040E + TPM_E_KEY_NOT_LOADED Handle = 0x8029040F + TPM_E_NO_KEY_CERTIFICATION Handle = 0x80290410 + TPM_E_KEY_NOT_FINALIZED Handle = 0x80290411 + TPM_E_ATTESTATION_CHALLENGE_NOT_SET Handle = 0x80290412 + TPM_E_NOT_PCR_BOUND Handle = 0x80290413 + TPM_E_KEY_ALREADY_FINALIZED Handle = 0x80290414 + TPM_E_KEY_USAGE_POLICY_NOT_SUPPORTED Handle = 0x80290415 + TPM_E_KEY_USAGE_POLICY_INVALID Handle = 0x80290416 + TPM_E_SOFT_KEY_ERROR Handle = 0x80290417 + TPM_E_KEY_NOT_AUTHENTICATED Handle = 0x80290418 + TPM_E_PCP_KEY_NOT_AIK Handle = 0x80290419 + TPM_E_KEY_NOT_SIGNING_KEY Handle = 0x8029041A + TPM_E_LOCKED_OUT Handle = 0x8029041B + TPM_E_CLAIM_TYPE_NOT_SUPPORTED Handle = 0x8029041C + TPM_E_VERSION_NOT_SUPPORTED Handle = 0x8029041D + TPM_E_BUFFER_LENGTH_MISMATCH Handle = 0x8029041E + TPM_E_PCP_IFX_RSA_KEY_CREATION_BLOCKED Handle = 0x8029041F + TPM_E_PCP_TICKET_MISSING Handle = 0x80290420 + TPM_E_PCP_RAW_POLICY_NOT_SUPPORTED Handle = 0x80290421 + TPM_E_PCP_KEY_HANDLE_INVALIDATED Handle = 0x80290422 + TPM_E_PCP_UNSUPPORTED_PSS_SALT Handle = 0x40290423 + TPM_E_ZERO_EXHAUST_ENABLED Handle = 0x80290500 + PLA_E_DCS_NOT_FOUND Handle = 0x80300002 + PLA_E_DCS_IN_USE Handle = 0x803000AA + PLA_E_TOO_MANY_FOLDERS Handle = 0x80300045 + PLA_E_NO_MIN_DISK Handle = 0x80300070 + PLA_E_DCS_ALREADY_EXISTS Handle = 0x803000B7 + PLA_S_PROPERTY_IGNORED Handle = 0x00300100 + PLA_E_PROPERTY_CONFLICT Handle = 0x80300101 + PLA_E_DCS_SINGLETON_REQUIRED Handle = 0x80300102 + PLA_E_CREDENTIALS_REQUIRED Handle = 0x80300103 + PLA_E_DCS_NOT_RUNNING Handle = 0x80300104 + PLA_E_CONFLICT_INCL_EXCL_API Handle = 0x80300105 + PLA_E_NETWORK_EXE_NOT_VALID Handle = 0x80300106 + PLA_E_EXE_ALREADY_CONFIGURED Handle = 0x80300107 + PLA_E_EXE_PATH_NOT_VALID Handle = 0x80300108 + PLA_E_DC_ALREADY_EXISTS Handle = 0x80300109 + PLA_E_DCS_START_WAIT_TIMEOUT Handle = 0x8030010A + PLA_E_DC_START_WAIT_TIMEOUT Handle = 0x8030010B + PLA_E_REPORT_WAIT_TIMEOUT Handle = 0x8030010C + PLA_E_NO_DUPLICATES Handle = 0x8030010D + PLA_E_EXE_FULL_PATH_REQUIRED Handle = 0x8030010E + PLA_E_INVALID_SESSION_NAME Handle = 0x8030010F + PLA_E_PLA_CHANNEL_NOT_ENABLED Handle = 0x80300110 + PLA_E_TASKSCHED_CHANNEL_NOT_ENABLED Handle = 0x80300111 + PLA_E_RULES_MANAGER_FAILED Handle = 0x80300112 + PLA_E_CABAPI_FAILURE Handle = 0x80300113 + FVE_E_LOCKED_VOLUME Handle = 0x80310000 + FVE_E_NOT_ENCRYPTED Handle = 0x80310001 + FVE_E_NO_TPM_BIOS Handle = 0x80310002 + FVE_E_NO_MBR_METRIC Handle = 0x80310003 + FVE_E_NO_BOOTSECTOR_METRIC Handle = 0x80310004 + FVE_E_NO_BOOTMGR_METRIC Handle = 0x80310005 + FVE_E_WRONG_BOOTMGR Handle = 0x80310006 + FVE_E_SECURE_KEY_REQUIRED Handle = 0x80310007 + FVE_E_NOT_ACTIVATED Handle = 0x80310008 + FVE_E_ACTION_NOT_ALLOWED Handle = 0x80310009 + FVE_E_AD_SCHEMA_NOT_INSTALLED Handle = 0x8031000A + FVE_E_AD_INVALID_DATATYPE Handle = 0x8031000B + FVE_E_AD_INVALID_DATASIZE Handle = 0x8031000C + FVE_E_AD_NO_VALUES Handle = 0x8031000D + FVE_E_AD_ATTR_NOT_SET Handle = 0x8031000E + FVE_E_AD_GUID_NOT_FOUND Handle = 0x8031000F + FVE_E_BAD_INFORMATION Handle = 0x80310010 + FVE_E_TOO_SMALL Handle = 0x80310011 + FVE_E_SYSTEM_VOLUME Handle = 0x80310012 + FVE_E_FAILED_WRONG_FS Handle = 0x80310013 + FVE_E_BAD_PARTITION_SIZE Handle = 0x80310014 + FVE_E_NOT_SUPPORTED Handle = 0x80310015 + FVE_E_BAD_DATA Handle = 0x80310016 + FVE_E_VOLUME_NOT_BOUND Handle = 0x80310017 + FVE_E_TPM_NOT_OWNED Handle = 0x80310018 + FVE_E_NOT_DATA_VOLUME Handle = 0x80310019 + FVE_E_AD_INSUFFICIENT_BUFFER Handle = 0x8031001A + FVE_E_CONV_READ Handle = 0x8031001B + FVE_E_CONV_WRITE Handle = 0x8031001C + FVE_E_KEY_REQUIRED Handle = 0x8031001D + FVE_E_CLUSTERING_NOT_SUPPORTED Handle = 0x8031001E + FVE_E_VOLUME_BOUND_ALREADY Handle = 0x8031001F + FVE_E_OS_NOT_PROTECTED Handle = 0x80310020 + FVE_E_PROTECTION_DISABLED Handle = 0x80310021 + FVE_E_RECOVERY_KEY_REQUIRED Handle = 0x80310022 + FVE_E_FOREIGN_VOLUME Handle = 0x80310023 + FVE_E_OVERLAPPED_UPDATE Handle = 0x80310024 + FVE_E_TPM_SRK_AUTH_NOT_ZERO Handle = 0x80310025 + FVE_E_FAILED_SECTOR_SIZE Handle = 0x80310026 + FVE_E_FAILED_AUTHENTICATION Handle = 0x80310027 + FVE_E_NOT_OS_VOLUME Handle = 0x80310028 + FVE_E_AUTOUNLOCK_ENABLED Handle = 0x80310029 + FVE_E_WRONG_BOOTSECTOR Handle = 0x8031002A + FVE_E_WRONG_SYSTEM_FS Handle = 0x8031002B + FVE_E_POLICY_PASSWORD_REQUIRED Handle = 0x8031002C + FVE_E_CANNOT_SET_FVEK_ENCRYPTED Handle = 0x8031002D + FVE_E_CANNOT_ENCRYPT_NO_KEY Handle = 0x8031002E + FVE_E_BOOTABLE_CDDVD Handle = 0x80310030 + FVE_E_PROTECTOR_EXISTS Handle = 0x80310031 + FVE_E_RELATIVE_PATH Handle = 0x80310032 + FVE_E_PROTECTOR_NOT_FOUND Handle = 0x80310033 + FVE_E_INVALID_KEY_FORMAT Handle = 0x80310034 + FVE_E_INVALID_PASSWORD_FORMAT Handle = 0x80310035 + FVE_E_FIPS_RNG_CHECK_FAILED Handle = 0x80310036 + FVE_E_FIPS_PREVENTS_RECOVERY_PASSWORD Handle = 0x80310037 + FVE_E_FIPS_PREVENTS_EXTERNAL_KEY_EXPORT Handle = 0x80310038 + FVE_E_NOT_DECRYPTED Handle = 0x80310039 + FVE_E_INVALID_PROTECTOR_TYPE Handle = 0x8031003A + FVE_E_NO_PROTECTORS_TO_TEST Handle = 0x8031003B + FVE_E_KEYFILE_NOT_FOUND Handle = 0x8031003C + FVE_E_KEYFILE_INVALID Handle = 0x8031003D + FVE_E_KEYFILE_NO_VMK Handle = 0x8031003E + FVE_E_TPM_DISABLED Handle = 0x8031003F + FVE_E_NOT_ALLOWED_IN_SAFE_MODE Handle = 0x80310040 + FVE_E_TPM_INVALID_PCR Handle = 0x80310041 + FVE_E_TPM_NO_VMK Handle = 0x80310042 + FVE_E_PIN_INVALID Handle = 0x80310043 + FVE_E_AUTH_INVALID_APPLICATION Handle = 0x80310044 + FVE_E_AUTH_INVALID_CONFIG Handle = 0x80310045 + FVE_E_FIPS_DISABLE_PROTECTION_NOT_ALLOWED Handle = 0x80310046 + FVE_E_FS_NOT_EXTENDED Handle = 0x80310047 + FVE_E_FIRMWARE_TYPE_NOT_SUPPORTED Handle = 0x80310048 + FVE_E_NO_LICENSE Handle = 0x80310049 + FVE_E_NOT_ON_STACK Handle = 0x8031004A + FVE_E_FS_MOUNTED Handle = 0x8031004B + FVE_E_TOKEN_NOT_IMPERSONATED Handle = 0x8031004C + FVE_E_DRY_RUN_FAILED Handle = 0x8031004D + FVE_E_REBOOT_REQUIRED Handle = 0x8031004E + FVE_E_DEBUGGER_ENABLED Handle = 0x8031004F + FVE_E_RAW_ACCESS Handle = 0x80310050 + FVE_E_RAW_BLOCKED Handle = 0x80310051 + FVE_E_BCD_APPLICATIONS_PATH_INCORRECT Handle = 0x80310052 + FVE_E_NOT_ALLOWED_IN_VERSION Handle = 0x80310053 + FVE_E_NO_AUTOUNLOCK_MASTER_KEY Handle = 0x80310054 + FVE_E_MOR_FAILED Handle = 0x80310055 + FVE_E_HIDDEN_VOLUME Handle = 0x80310056 + FVE_E_TRANSIENT_STATE Handle = 0x80310057 + FVE_E_PUBKEY_NOT_ALLOWED Handle = 0x80310058 + FVE_E_VOLUME_HANDLE_OPEN Handle = 0x80310059 + FVE_E_NO_FEATURE_LICENSE Handle = 0x8031005A + FVE_E_INVALID_STARTUP_OPTIONS Handle = 0x8031005B + FVE_E_POLICY_RECOVERY_PASSWORD_NOT_ALLOWED Handle = 0x8031005C + FVE_E_POLICY_RECOVERY_PASSWORD_REQUIRED Handle = 0x8031005D + FVE_E_POLICY_RECOVERY_KEY_NOT_ALLOWED Handle = 0x8031005E + FVE_E_POLICY_RECOVERY_KEY_REQUIRED Handle = 0x8031005F + FVE_E_POLICY_STARTUP_PIN_NOT_ALLOWED Handle = 0x80310060 + FVE_E_POLICY_STARTUP_PIN_REQUIRED Handle = 0x80310061 + FVE_E_POLICY_STARTUP_KEY_NOT_ALLOWED Handle = 0x80310062 + FVE_E_POLICY_STARTUP_KEY_REQUIRED Handle = 0x80310063 + FVE_E_POLICY_STARTUP_PIN_KEY_NOT_ALLOWED Handle = 0x80310064 + FVE_E_POLICY_STARTUP_PIN_KEY_REQUIRED Handle = 0x80310065 + FVE_E_POLICY_STARTUP_TPM_NOT_ALLOWED Handle = 0x80310066 + FVE_E_POLICY_STARTUP_TPM_REQUIRED Handle = 0x80310067 + FVE_E_POLICY_INVALID_PIN_LENGTH Handle = 0x80310068 + FVE_E_KEY_PROTECTOR_NOT_SUPPORTED Handle = 0x80310069 + FVE_E_POLICY_PASSPHRASE_NOT_ALLOWED Handle = 0x8031006A + FVE_E_POLICY_PASSPHRASE_REQUIRED Handle = 0x8031006B + FVE_E_FIPS_PREVENTS_PASSPHRASE Handle = 0x8031006C + FVE_E_OS_VOLUME_PASSPHRASE_NOT_ALLOWED Handle = 0x8031006D + FVE_E_INVALID_BITLOCKER_OID Handle = 0x8031006E + FVE_E_VOLUME_TOO_SMALL Handle = 0x8031006F + FVE_E_DV_NOT_SUPPORTED_ON_FS Handle = 0x80310070 + FVE_E_DV_NOT_ALLOWED_BY_GP Handle = 0x80310071 + FVE_E_POLICY_USER_CERTIFICATE_NOT_ALLOWED Handle = 0x80310072 + FVE_E_POLICY_USER_CERTIFICATE_REQUIRED Handle = 0x80310073 + FVE_E_POLICY_USER_CERT_MUST_BE_HW Handle = 0x80310074 + FVE_E_POLICY_USER_CONFIGURE_FDV_AUTOUNLOCK_NOT_ALLOWED Handle = 0x80310075 + FVE_E_POLICY_USER_CONFIGURE_RDV_AUTOUNLOCK_NOT_ALLOWED Handle = 0x80310076 + FVE_E_POLICY_USER_CONFIGURE_RDV_NOT_ALLOWED Handle = 0x80310077 + FVE_E_POLICY_USER_ENABLE_RDV_NOT_ALLOWED Handle = 0x80310078 + FVE_E_POLICY_USER_DISABLE_RDV_NOT_ALLOWED Handle = 0x80310079 + FVE_E_POLICY_INVALID_PASSPHRASE_LENGTH Handle = 0x80310080 + FVE_E_POLICY_PASSPHRASE_TOO_SIMPLE Handle = 0x80310081 + FVE_E_RECOVERY_PARTITION Handle = 0x80310082 + FVE_E_POLICY_CONFLICT_FDV_RK_OFF_AUK_ON Handle = 0x80310083 + FVE_E_POLICY_CONFLICT_RDV_RK_OFF_AUK_ON Handle = 0x80310084 + FVE_E_NON_BITLOCKER_OID Handle = 0x80310085 + FVE_E_POLICY_PROHIBITS_SELFSIGNED Handle = 0x80310086 + FVE_E_POLICY_CONFLICT_RO_AND_STARTUP_KEY_REQUIRED Handle = 0x80310087 + FVE_E_CONV_RECOVERY_FAILED Handle = 0x80310088 + FVE_E_VIRTUALIZED_SPACE_TOO_BIG Handle = 0x80310089 + FVE_E_POLICY_CONFLICT_OSV_RP_OFF_ADB_ON Handle = 0x80310090 + FVE_E_POLICY_CONFLICT_FDV_RP_OFF_ADB_ON Handle = 0x80310091 + FVE_E_POLICY_CONFLICT_RDV_RP_OFF_ADB_ON Handle = 0x80310092 + FVE_E_NON_BITLOCKER_KU Handle = 0x80310093 + FVE_E_PRIVATEKEY_AUTH_FAILED Handle = 0x80310094 + FVE_E_REMOVAL_OF_DRA_FAILED Handle = 0x80310095 + FVE_E_OPERATION_NOT_SUPPORTED_ON_VISTA_VOLUME Handle = 0x80310096 + FVE_E_CANT_LOCK_AUTOUNLOCK_ENABLED_VOLUME Handle = 0x80310097 + FVE_E_FIPS_HASH_KDF_NOT_ALLOWED Handle = 0x80310098 + FVE_E_ENH_PIN_INVALID Handle = 0x80310099 + FVE_E_INVALID_PIN_CHARS Handle = 0x8031009A + FVE_E_INVALID_DATUM_TYPE Handle = 0x8031009B + FVE_E_EFI_ONLY Handle = 0x8031009C + FVE_E_MULTIPLE_NKP_CERTS Handle = 0x8031009D + FVE_E_REMOVAL_OF_NKP_FAILED Handle = 0x8031009E + FVE_E_INVALID_NKP_CERT Handle = 0x8031009F + FVE_E_NO_EXISTING_PIN Handle = 0x803100A0 + FVE_E_PROTECTOR_CHANGE_PIN_MISMATCH Handle = 0x803100A1 + FVE_E_PIN_PROTECTOR_CHANGE_BY_STD_USER_DISALLOWED Handle = 0x803100A2 + FVE_E_PROTECTOR_CHANGE_MAX_PIN_CHANGE_ATTEMPTS_REACHED Handle = 0x803100A3 + FVE_E_POLICY_PASSPHRASE_REQUIRES_ASCII Handle = 0x803100A4 + FVE_E_FULL_ENCRYPTION_NOT_ALLOWED_ON_TP_STORAGE Handle = 0x803100A5 + FVE_E_WIPE_NOT_ALLOWED_ON_TP_STORAGE Handle = 0x803100A6 + FVE_E_KEY_LENGTH_NOT_SUPPORTED_BY_EDRIVE Handle = 0x803100A7 + FVE_E_NO_EXISTING_PASSPHRASE Handle = 0x803100A8 + FVE_E_PROTECTOR_CHANGE_PASSPHRASE_MISMATCH Handle = 0x803100A9 + FVE_E_PASSPHRASE_TOO_LONG Handle = 0x803100AA + FVE_E_NO_PASSPHRASE_WITH_TPM Handle = 0x803100AB + FVE_E_NO_TPM_WITH_PASSPHRASE Handle = 0x803100AC + FVE_E_NOT_ALLOWED_ON_CSV_STACK Handle = 0x803100AD + FVE_E_NOT_ALLOWED_ON_CLUSTER Handle = 0x803100AE + FVE_E_EDRIVE_NO_FAILOVER_TO_SW Handle = 0x803100AF + FVE_E_EDRIVE_BAND_IN_USE Handle = 0x803100B0 + FVE_E_EDRIVE_DISALLOWED_BY_GP Handle = 0x803100B1 + FVE_E_EDRIVE_INCOMPATIBLE_VOLUME Handle = 0x803100B2 + FVE_E_NOT_ALLOWED_TO_UPGRADE_WHILE_CONVERTING Handle = 0x803100B3 + FVE_E_EDRIVE_DV_NOT_SUPPORTED Handle = 0x803100B4 + FVE_E_NO_PREBOOT_KEYBOARD_DETECTED Handle = 0x803100B5 + FVE_E_NO_PREBOOT_KEYBOARD_OR_WINRE_DETECTED Handle = 0x803100B6 + FVE_E_POLICY_REQUIRES_STARTUP_PIN_ON_TOUCH_DEVICE Handle = 0x803100B7 + FVE_E_POLICY_REQUIRES_RECOVERY_PASSWORD_ON_TOUCH_DEVICE Handle = 0x803100B8 + FVE_E_WIPE_CANCEL_NOT_APPLICABLE Handle = 0x803100B9 + FVE_E_SECUREBOOT_DISABLED Handle = 0x803100BA + FVE_E_SECUREBOOT_CONFIGURATION_INVALID Handle = 0x803100BB + FVE_E_EDRIVE_DRY_RUN_FAILED Handle = 0x803100BC + FVE_E_SHADOW_COPY_PRESENT Handle = 0x803100BD + FVE_E_POLICY_INVALID_ENHANCED_BCD_SETTINGS Handle = 0x803100BE + FVE_E_EDRIVE_INCOMPATIBLE_FIRMWARE Handle = 0x803100BF + FVE_E_PROTECTOR_CHANGE_MAX_PASSPHRASE_CHANGE_ATTEMPTS_REACHED Handle = 0x803100C0 + FVE_E_PASSPHRASE_PROTECTOR_CHANGE_BY_STD_USER_DISALLOWED Handle = 0x803100C1 + FVE_E_LIVEID_ACCOUNT_SUSPENDED Handle = 0x803100C2 + FVE_E_LIVEID_ACCOUNT_BLOCKED Handle = 0x803100C3 + FVE_E_NOT_PROVISIONED_ON_ALL_VOLUMES Handle = 0x803100C4 + FVE_E_DE_FIXED_DATA_NOT_SUPPORTED Handle = 0x803100C5 + FVE_E_DE_HARDWARE_NOT_COMPLIANT Handle = 0x803100C6 + FVE_E_DE_WINRE_NOT_CONFIGURED Handle = 0x803100C7 + FVE_E_DE_PROTECTION_SUSPENDED Handle = 0x803100C8 + FVE_E_DE_OS_VOLUME_NOT_PROTECTED Handle = 0x803100C9 + FVE_E_DE_DEVICE_LOCKEDOUT Handle = 0x803100CA + FVE_E_DE_PROTECTION_NOT_YET_ENABLED Handle = 0x803100CB + FVE_E_INVALID_PIN_CHARS_DETAILED Handle = 0x803100CC + FVE_E_DEVICE_LOCKOUT_COUNTER_UNAVAILABLE Handle = 0x803100CD + FVE_E_DEVICELOCKOUT_COUNTER_MISMATCH Handle = 0x803100CE + FVE_E_BUFFER_TOO_LARGE Handle = 0x803100CF + FVE_E_NO_SUCH_CAPABILITY_ON_TARGET Handle = 0x803100D0 + FVE_E_DE_PREVENTED_FOR_OS Handle = 0x803100D1 + FVE_E_DE_VOLUME_OPTED_OUT Handle = 0x803100D2 + FVE_E_DE_VOLUME_NOT_SUPPORTED Handle = 0x803100D3 + FVE_E_EOW_NOT_SUPPORTED_IN_VERSION Handle = 0x803100D4 + FVE_E_ADBACKUP_NOT_ENABLED Handle = 0x803100D5 + FVE_E_VOLUME_EXTEND_PREVENTS_EOW_DECRYPT Handle = 0x803100D6 + FVE_E_NOT_DE_VOLUME Handle = 0x803100D7 + FVE_E_PROTECTION_CANNOT_BE_DISABLED Handle = 0x803100D8 + FVE_E_OSV_KSR_NOT_ALLOWED Handle = 0x803100D9 + FWP_E_CALLOUT_NOT_FOUND Handle = 0x80320001 + FWP_E_CONDITION_NOT_FOUND Handle = 0x80320002 + FWP_E_FILTER_NOT_FOUND Handle = 0x80320003 + FWP_E_LAYER_NOT_FOUND Handle = 0x80320004 + FWP_E_PROVIDER_NOT_FOUND Handle = 0x80320005 + FWP_E_PROVIDER_CONTEXT_NOT_FOUND Handle = 0x80320006 + FWP_E_SUBLAYER_NOT_FOUND Handle = 0x80320007 + FWP_E_NOT_FOUND Handle = 0x80320008 + FWP_E_ALREADY_EXISTS Handle = 0x80320009 + FWP_E_IN_USE Handle = 0x8032000A + FWP_E_DYNAMIC_SESSION_IN_PROGRESS Handle = 0x8032000B + FWP_E_WRONG_SESSION Handle = 0x8032000C + FWP_E_NO_TXN_IN_PROGRESS Handle = 0x8032000D + FWP_E_TXN_IN_PROGRESS Handle = 0x8032000E + FWP_E_TXN_ABORTED Handle = 0x8032000F + FWP_E_SESSION_ABORTED Handle = 0x80320010 + FWP_E_INCOMPATIBLE_TXN Handle = 0x80320011 + FWP_E_TIMEOUT Handle = 0x80320012 + FWP_E_NET_EVENTS_DISABLED Handle = 0x80320013 + FWP_E_INCOMPATIBLE_LAYER Handle = 0x80320014 + FWP_E_KM_CLIENTS_ONLY Handle = 0x80320015 + FWP_E_LIFETIME_MISMATCH Handle = 0x80320016 + FWP_E_BUILTIN_OBJECT Handle = 0x80320017 + FWP_E_TOO_MANY_CALLOUTS Handle = 0x80320018 + FWP_E_NOTIFICATION_DROPPED Handle = 0x80320019 + FWP_E_TRAFFIC_MISMATCH Handle = 0x8032001A + FWP_E_INCOMPATIBLE_SA_STATE Handle = 0x8032001B + FWP_E_NULL_POINTER Handle = 0x8032001C + FWP_E_INVALID_ENUMERATOR Handle = 0x8032001D + FWP_E_INVALID_FLAGS Handle = 0x8032001E + FWP_E_INVALID_NET_MASK Handle = 0x8032001F + FWP_E_INVALID_RANGE Handle = 0x80320020 + FWP_E_INVALID_INTERVAL Handle = 0x80320021 + FWP_E_ZERO_LENGTH_ARRAY Handle = 0x80320022 + FWP_E_NULL_DISPLAY_NAME Handle = 0x80320023 + FWP_E_INVALID_ACTION_TYPE Handle = 0x80320024 + FWP_E_INVALID_WEIGHT Handle = 0x80320025 + FWP_E_MATCH_TYPE_MISMATCH Handle = 0x80320026 + FWP_E_TYPE_MISMATCH Handle = 0x80320027 + FWP_E_OUT_OF_BOUNDS Handle = 0x80320028 + FWP_E_RESERVED Handle = 0x80320029 + FWP_E_DUPLICATE_CONDITION Handle = 0x8032002A + FWP_E_DUPLICATE_KEYMOD Handle = 0x8032002B + FWP_E_ACTION_INCOMPATIBLE_WITH_LAYER Handle = 0x8032002C + FWP_E_ACTION_INCOMPATIBLE_WITH_SUBLAYER Handle = 0x8032002D + FWP_E_CONTEXT_INCOMPATIBLE_WITH_LAYER Handle = 0x8032002E + FWP_E_CONTEXT_INCOMPATIBLE_WITH_CALLOUT Handle = 0x8032002F + FWP_E_INCOMPATIBLE_AUTH_METHOD Handle = 0x80320030 + FWP_E_INCOMPATIBLE_DH_GROUP Handle = 0x80320031 + FWP_E_EM_NOT_SUPPORTED Handle = 0x80320032 + FWP_E_NEVER_MATCH Handle = 0x80320033 + FWP_E_PROVIDER_CONTEXT_MISMATCH Handle = 0x80320034 + FWP_E_INVALID_PARAMETER Handle = 0x80320035 + FWP_E_TOO_MANY_SUBLAYERS Handle = 0x80320036 + FWP_E_CALLOUT_NOTIFICATION_FAILED Handle = 0x80320037 + FWP_E_INVALID_AUTH_TRANSFORM Handle = 0x80320038 + FWP_E_INVALID_CIPHER_TRANSFORM Handle = 0x80320039 + FWP_E_INCOMPATIBLE_CIPHER_TRANSFORM Handle = 0x8032003A + FWP_E_INVALID_TRANSFORM_COMBINATION Handle = 0x8032003B + FWP_E_DUPLICATE_AUTH_METHOD Handle = 0x8032003C + FWP_E_INVALID_TUNNEL_ENDPOINT Handle = 0x8032003D + FWP_E_L2_DRIVER_NOT_READY Handle = 0x8032003E + FWP_E_KEY_DICTATOR_ALREADY_REGISTERED Handle = 0x8032003F + FWP_E_KEY_DICTATION_INVALID_KEYING_MATERIAL Handle = 0x80320040 + FWP_E_CONNECTIONS_DISABLED Handle = 0x80320041 + FWP_E_INVALID_DNS_NAME Handle = 0x80320042 + FWP_E_STILL_ON Handle = 0x80320043 + FWP_E_IKEEXT_NOT_RUNNING Handle = 0x80320044 + FWP_E_DROP_NOICMP Handle = 0x80320104 + WS_S_ASYNC Handle = 0x003D0000 + WS_S_END Handle = 0x003D0001 + WS_E_INVALID_FORMAT Handle = 0x803D0000 + WS_E_OBJECT_FAULTED Handle = 0x803D0001 + WS_E_NUMERIC_OVERFLOW Handle = 0x803D0002 + WS_E_INVALID_OPERATION Handle = 0x803D0003 + WS_E_OPERATION_ABORTED Handle = 0x803D0004 + WS_E_ENDPOINT_ACCESS_DENIED Handle = 0x803D0005 + WS_E_OPERATION_TIMED_OUT Handle = 0x803D0006 + WS_E_OPERATION_ABANDONED Handle = 0x803D0007 + WS_E_QUOTA_EXCEEDED Handle = 0x803D0008 + WS_E_NO_TRANSLATION_AVAILABLE Handle = 0x803D0009 + WS_E_SECURITY_VERIFICATION_FAILURE Handle = 0x803D000A + WS_E_ADDRESS_IN_USE Handle = 0x803D000B + WS_E_ADDRESS_NOT_AVAILABLE Handle = 0x803D000C + WS_E_ENDPOINT_NOT_FOUND Handle = 0x803D000D + WS_E_ENDPOINT_NOT_AVAILABLE Handle = 0x803D000E + WS_E_ENDPOINT_FAILURE Handle = 0x803D000F + WS_E_ENDPOINT_UNREACHABLE Handle = 0x803D0010 + WS_E_ENDPOINT_ACTION_NOT_SUPPORTED Handle = 0x803D0011 + WS_E_ENDPOINT_TOO_BUSY Handle = 0x803D0012 + WS_E_ENDPOINT_FAULT_RECEIVED Handle = 0x803D0013 + WS_E_ENDPOINT_DISCONNECTED Handle = 0x803D0014 + WS_E_PROXY_FAILURE Handle = 0x803D0015 + WS_E_PROXY_ACCESS_DENIED Handle = 0x803D0016 + WS_E_NOT_SUPPORTED Handle = 0x803D0017 + WS_E_PROXY_REQUIRES_BASIC_AUTH Handle = 0x803D0018 + WS_E_PROXY_REQUIRES_DIGEST_AUTH Handle = 0x803D0019 + WS_E_PROXY_REQUIRES_NTLM_AUTH Handle = 0x803D001A + WS_E_PROXY_REQUIRES_NEGOTIATE_AUTH Handle = 0x803D001B + WS_E_SERVER_REQUIRES_BASIC_AUTH Handle = 0x803D001C + WS_E_SERVER_REQUIRES_DIGEST_AUTH Handle = 0x803D001D + WS_E_SERVER_REQUIRES_NTLM_AUTH Handle = 0x803D001E + WS_E_SERVER_REQUIRES_NEGOTIATE_AUTH Handle = 0x803D001F + WS_E_INVALID_ENDPOINT_URL Handle = 0x803D0020 + WS_E_OTHER Handle = 0x803D0021 + WS_E_SECURITY_TOKEN_EXPIRED Handle = 0x803D0022 + WS_E_SECURITY_SYSTEM_FAILURE Handle = 0x803D0023 + ERROR_NDIS_INTERFACE_CLOSING syscall.Errno = 0x80340002 + ERROR_NDIS_BAD_VERSION syscall.Errno = 0x80340004 + ERROR_NDIS_BAD_CHARACTERISTICS syscall.Errno = 0x80340005 + ERROR_NDIS_ADAPTER_NOT_FOUND syscall.Errno = 0x80340006 + ERROR_NDIS_OPEN_FAILED syscall.Errno = 0x80340007 + ERROR_NDIS_DEVICE_FAILED syscall.Errno = 0x80340008 + ERROR_NDIS_MULTICAST_FULL syscall.Errno = 0x80340009 + ERROR_NDIS_MULTICAST_EXISTS syscall.Errno = 0x8034000A + ERROR_NDIS_MULTICAST_NOT_FOUND syscall.Errno = 0x8034000B + ERROR_NDIS_REQUEST_ABORTED syscall.Errno = 0x8034000C + ERROR_NDIS_RESET_IN_PROGRESS syscall.Errno = 0x8034000D + ERROR_NDIS_NOT_SUPPORTED syscall.Errno = 0x803400BB + ERROR_NDIS_INVALID_PACKET syscall.Errno = 0x8034000F + ERROR_NDIS_ADAPTER_NOT_READY syscall.Errno = 0x80340011 + ERROR_NDIS_INVALID_LENGTH syscall.Errno = 0x80340014 + ERROR_NDIS_INVALID_DATA syscall.Errno = 0x80340015 + ERROR_NDIS_BUFFER_TOO_SHORT syscall.Errno = 0x80340016 + ERROR_NDIS_INVALID_OID syscall.Errno = 0x80340017 + ERROR_NDIS_ADAPTER_REMOVED syscall.Errno = 0x80340018 + ERROR_NDIS_UNSUPPORTED_MEDIA syscall.Errno = 0x80340019 + ERROR_NDIS_GROUP_ADDRESS_IN_USE syscall.Errno = 0x8034001A + ERROR_NDIS_FILE_NOT_FOUND syscall.Errno = 0x8034001B + ERROR_NDIS_ERROR_READING_FILE syscall.Errno = 0x8034001C + ERROR_NDIS_ALREADY_MAPPED syscall.Errno = 0x8034001D + ERROR_NDIS_RESOURCE_CONFLICT syscall.Errno = 0x8034001E + ERROR_NDIS_MEDIA_DISCONNECTED syscall.Errno = 0x8034001F + ERROR_NDIS_INVALID_ADDRESS syscall.Errno = 0x80340022 + ERROR_NDIS_INVALID_DEVICE_REQUEST syscall.Errno = 0x80340010 + ERROR_NDIS_PAUSED syscall.Errno = 0x8034002A + ERROR_NDIS_INTERFACE_NOT_FOUND syscall.Errno = 0x8034002B + ERROR_NDIS_UNSUPPORTED_REVISION syscall.Errno = 0x8034002C + ERROR_NDIS_INVALID_PORT syscall.Errno = 0x8034002D + ERROR_NDIS_INVALID_PORT_STATE syscall.Errno = 0x8034002E + ERROR_NDIS_LOW_POWER_STATE syscall.Errno = 0x8034002F + ERROR_NDIS_REINIT_REQUIRED syscall.Errno = 0x80340030 + ERROR_NDIS_NO_QUEUES syscall.Errno = 0x80340031 + ERROR_NDIS_DOT11_AUTO_CONFIG_ENABLED syscall.Errno = 0x80342000 + ERROR_NDIS_DOT11_MEDIA_IN_USE syscall.Errno = 0x80342001 + ERROR_NDIS_DOT11_POWER_STATE_INVALID syscall.Errno = 0x80342002 + ERROR_NDIS_PM_WOL_PATTERN_LIST_FULL syscall.Errno = 0x80342003 + ERROR_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL syscall.Errno = 0x80342004 + ERROR_NDIS_DOT11_AP_CHANNEL_CURRENTLY_NOT_AVAILABLE syscall.Errno = 0x80342005 + ERROR_NDIS_DOT11_AP_BAND_CURRENTLY_NOT_AVAILABLE syscall.Errno = 0x80342006 + ERROR_NDIS_DOT11_AP_CHANNEL_NOT_ALLOWED syscall.Errno = 0x80342007 + ERROR_NDIS_DOT11_AP_BAND_NOT_ALLOWED syscall.Errno = 0x80342008 + ERROR_NDIS_INDICATION_REQUIRED syscall.Errno = 0x00340001 + ERROR_NDIS_OFFLOAD_POLICY syscall.Errno = 0xC034100F + ERROR_NDIS_OFFLOAD_CONNECTION_REJECTED syscall.Errno = 0xC0341012 + ERROR_NDIS_OFFLOAD_PATH_REJECTED syscall.Errno = 0xC0341013 + ERROR_HV_INVALID_HYPERCALL_CODE syscall.Errno = 0xC0350002 + ERROR_HV_INVALID_HYPERCALL_INPUT syscall.Errno = 0xC0350003 + ERROR_HV_INVALID_ALIGNMENT syscall.Errno = 0xC0350004 + ERROR_HV_INVALID_PARAMETER syscall.Errno = 0xC0350005 + ERROR_HV_ACCESS_DENIED syscall.Errno = 0xC0350006 + ERROR_HV_INVALID_PARTITION_STATE syscall.Errno = 0xC0350007 + ERROR_HV_OPERATION_DENIED syscall.Errno = 0xC0350008 + ERROR_HV_UNKNOWN_PROPERTY syscall.Errno = 0xC0350009 + ERROR_HV_PROPERTY_VALUE_OUT_OF_RANGE syscall.Errno = 0xC035000A + ERROR_HV_INSUFFICIENT_MEMORY syscall.Errno = 0xC035000B + ERROR_HV_PARTITION_TOO_DEEP syscall.Errno = 0xC035000C + ERROR_HV_INVALID_PARTITION_ID syscall.Errno = 0xC035000D + ERROR_HV_INVALID_VP_INDEX syscall.Errno = 0xC035000E + ERROR_HV_INVALID_PORT_ID syscall.Errno = 0xC0350011 + ERROR_HV_INVALID_CONNECTION_ID syscall.Errno = 0xC0350012 + ERROR_HV_INSUFFICIENT_BUFFERS syscall.Errno = 0xC0350013 + ERROR_HV_NOT_ACKNOWLEDGED syscall.Errno = 0xC0350014 + ERROR_HV_INVALID_VP_STATE syscall.Errno = 0xC0350015 + ERROR_HV_ACKNOWLEDGED syscall.Errno = 0xC0350016 + ERROR_HV_INVALID_SAVE_RESTORE_STATE syscall.Errno = 0xC0350017 + ERROR_HV_INVALID_SYNIC_STATE syscall.Errno = 0xC0350018 + ERROR_HV_OBJECT_IN_USE syscall.Errno = 0xC0350019 + ERROR_HV_INVALID_PROXIMITY_DOMAIN_INFO syscall.Errno = 0xC035001A + ERROR_HV_NO_DATA syscall.Errno = 0xC035001B + ERROR_HV_INACTIVE syscall.Errno = 0xC035001C + ERROR_HV_NO_RESOURCES syscall.Errno = 0xC035001D + ERROR_HV_FEATURE_UNAVAILABLE syscall.Errno = 0xC035001E + ERROR_HV_INSUFFICIENT_BUFFER syscall.Errno = 0xC0350033 + ERROR_HV_INSUFFICIENT_DEVICE_DOMAINS syscall.Errno = 0xC0350038 + ERROR_HV_CPUID_FEATURE_VALIDATION syscall.Errno = 0xC035003C + ERROR_HV_CPUID_XSAVE_FEATURE_VALIDATION syscall.Errno = 0xC035003D + ERROR_HV_PROCESSOR_STARTUP_TIMEOUT syscall.Errno = 0xC035003E + ERROR_HV_SMX_ENABLED syscall.Errno = 0xC035003F + ERROR_HV_INVALID_LP_INDEX syscall.Errno = 0xC0350041 + ERROR_HV_INVALID_REGISTER_VALUE syscall.Errno = 0xC0350050 + ERROR_HV_INVALID_VTL_STATE syscall.Errno = 0xC0350051 + ERROR_HV_NX_NOT_DETECTED syscall.Errno = 0xC0350055 + ERROR_HV_INVALID_DEVICE_ID syscall.Errno = 0xC0350057 + ERROR_HV_INVALID_DEVICE_STATE syscall.Errno = 0xC0350058 + ERROR_HV_PENDING_PAGE_REQUESTS syscall.Errno = 0x00350059 + ERROR_HV_PAGE_REQUEST_INVALID syscall.Errno = 0xC0350060 + ERROR_HV_INVALID_CPU_GROUP_ID syscall.Errno = 0xC035006F + ERROR_HV_INVALID_CPU_GROUP_STATE syscall.Errno = 0xC0350070 + ERROR_HV_OPERATION_FAILED syscall.Errno = 0xC0350071 + ERROR_HV_NOT_ALLOWED_WITH_NESTED_VIRT_ACTIVE syscall.Errno = 0xC0350072 + ERROR_HV_INSUFFICIENT_ROOT_MEMORY syscall.Errno = 0xC0350073 + ERROR_HV_NOT_PRESENT syscall.Errno = 0xC0351000 + ERROR_VID_DUPLICATE_HANDLER syscall.Errno = 0xC0370001 + ERROR_VID_TOO_MANY_HANDLERS syscall.Errno = 0xC0370002 + ERROR_VID_QUEUE_FULL syscall.Errno = 0xC0370003 + ERROR_VID_HANDLER_NOT_PRESENT syscall.Errno = 0xC0370004 + ERROR_VID_INVALID_OBJECT_NAME syscall.Errno = 0xC0370005 + ERROR_VID_PARTITION_NAME_TOO_LONG syscall.Errno = 0xC0370006 + ERROR_VID_MESSAGE_QUEUE_NAME_TOO_LONG syscall.Errno = 0xC0370007 + ERROR_VID_PARTITION_ALREADY_EXISTS syscall.Errno = 0xC0370008 + ERROR_VID_PARTITION_DOES_NOT_EXIST syscall.Errno = 0xC0370009 + ERROR_VID_PARTITION_NAME_NOT_FOUND syscall.Errno = 0xC037000A + ERROR_VID_MESSAGE_QUEUE_ALREADY_EXISTS syscall.Errno = 0xC037000B + ERROR_VID_EXCEEDED_MBP_ENTRY_MAP_LIMIT syscall.Errno = 0xC037000C + ERROR_VID_MB_STILL_REFERENCED syscall.Errno = 0xC037000D + ERROR_VID_CHILD_GPA_PAGE_SET_CORRUPTED syscall.Errno = 0xC037000E + ERROR_VID_INVALID_NUMA_SETTINGS syscall.Errno = 0xC037000F + ERROR_VID_INVALID_NUMA_NODE_INDEX syscall.Errno = 0xC0370010 + ERROR_VID_NOTIFICATION_QUEUE_ALREADY_ASSOCIATED syscall.Errno = 0xC0370011 + ERROR_VID_INVALID_MEMORY_BLOCK_HANDLE syscall.Errno = 0xC0370012 + ERROR_VID_PAGE_RANGE_OVERFLOW syscall.Errno = 0xC0370013 + ERROR_VID_INVALID_MESSAGE_QUEUE_HANDLE syscall.Errno = 0xC0370014 + ERROR_VID_INVALID_GPA_RANGE_HANDLE syscall.Errno = 0xC0370015 + ERROR_VID_NO_MEMORY_BLOCK_NOTIFICATION_QUEUE syscall.Errno = 0xC0370016 + ERROR_VID_MEMORY_BLOCK_LOCK_COUNT_EXCEEDED syscall.Errno = 0xC0370017 + ERROR_VID_INVALID_PPM_HANDLE syscall.Errno = 0xC0370018 + ERROR_VID_MBPS_ARE_LOCKED syscall.Errno = 0xC0370019 + ERROR_VID_MESSAGE_QUEUE_CLOSED syscall.Errno = 0xC037001A + ERROR_VID_VIRTUAL_PROCESSOR_LIMIT_EXCEEDED syscall.Errno = 0xC037001B + ERROR_VID_STOP_PENDING syscall.Errno = 0xC037001C + ERROR_VID_INVALID_PROCESSOR_STATE syscall.Errno = 0xC037001D + ERROR_VID_EXCEEDED_KM_CONTEXT_COUNT_LIMIT syscall.Errno = 0xC037001E + ERROR_VID_KM_INTERFACE_ALREADY_INITIALIZED syscall.Errno = 0xC037001F + ERROR_VID_MB_PROPERTY_ALREADY_SET_RESET syscall.Errno = 0xC0370020 + ERROR_VID_MMIO_RANGE_DESTROYED syscall.Errno = 0xC0370021 + ERROR_VID_INVALID_CHILD_GPA_PAGE_SET syscall.Errno = 0xC0370022 + ERROR_VID_RESERVE_PAGE_SET_IS_BEING_USED syscall.Errno = 0xC0370023 + ERROR_VID_RESERVE_PAGE_SET_TOO_SMALL syscall.Errno = 0xC0370024 + ERROR_VID_MBP_ALREADY_LOCKED_USING_RESERVED_PAGE syscall.Errno = 0xC0370025 + ERROR_VID_MBP_COUNT_EXCEEDED_LIMIT syscall.Errno = 0xC0370026 + ERROR_VID_SAVED_STATE_CORRUPT syscall.Errno = 0xC0370027 + ERROR_VID_SAVED_STATE_UNRECOGNIZED_ITEM syscall.Errno = 0xC0370028 + ERROR_VID_SAVED_STATE_INCOMPATIBLE syscall.Errno = 0xC0370029 + ERROR_VID_VTL_ACCESS_DENIED syscall.Errno = 0xC037002A + ERROR_VMCOMPUTE_TERMINATED_DURING_START syscall.Errno = 0xC0370100 + ERROR_VMCOMPUTE_IMAGE_MISMATCH syscall.Errno = 0xC0370101 + ERROR_VMCOMPUTE_HYPERV_NOT_INSTALLED syscall.Errno = 0xC0370102 + ERROR_VMCOMPUTE_OPERATION_PENDING syscall.Errno = 0xC0370103 + ERROR_VMCOMPUTE_TOO_MANY_NOTIFICATIONS syscall.Errno = 0xC0370104 + ERROR_VMCOMPUTE_INVALID_STATE syscall.Errno = 0xC0370105 + ERROR_VMCOMPUTE_UNEXPECTED_EXIT syscall.Errno = 0xC0370106 + ERROR_VMCOMPUTE_TERMINATED syscall.Errno = 0xC0370107 + ERROR_VMCOMPUTE_CONNECT_FAILED syscall.Errno = 0xC0370108 + ERROR_VMCOMPUTE_TIMEOUT syscall.Errno = 0xC0370109 + ERROR_VMCOMPUTE_CONNECTION_CLOSED syscall.Errno = 0xC037010A + ERROR_VMCOMPUTE_UNKNOWN_MESSAGE syscall.Errno = 0xC037010B + ERROR_VMCOMPUTE_UNSUPPORTED_PROTOCOL_VERSION syscall.Errno = 0xC037010C + ERROR_VMCOMPUTE_INVALID_JSON syscall.Errno = 0xC037010D + ERROR_VMCOMPUTE_SYSTEM_NOT_FOUND syscall.Errno = 0xC037010E + ERROR_VMCOMPUTE_SYSTEM_ALREADY_EXISTS syscall.Errno = 0xC037010F + ERROR_VMCOMPUTE_SYSTEM_ALREADY_STOPPED syscall.Errno = 0xC0370110 + ERROR_VMCOMPUTE_PROTOCOL_ERROR syscall.Errno = 0xC0370111 + ERROR_VMCOMPUTE_INVALID_LAYER syscall.Errno = 0xC0370112 + ERROR_VMCOMPUTE_WINDOWS_INSIDER_REQUIRED syscall.Errno = 0xC0370113 + HCS_E_TERMINATED_DURING_START Handle = 0x80370100 + HCS_E_IMAGE_MISMATCH Handle = 0x80370101 + HCS_E_HYPERV_NOT_INSTALLED Handle = 0x80370102 + HCS_E_INVALID_STATE Handle = 0x80370105 + HCS_E_UNEXPECTED_EXIT Handle = 0x80370106 + HCS_E_TERMINATED Handle = 0x80370107 + HCS_E_CONNECT_FAILED Handle = 0x80370108 + HCS_E_CONNECTION_TIMEOUT Handle = 0x80370109 + HCS_E_CONNECTION_CLOSED Handle = 0x8037010A + HCS_E_UNKNOWN_MESSAGE Handle = 0x8037010B + HCS_E_UNSUPPORTED_PROTOCOL_VERSION Handle = 0x8037010C + HCS_E_INVALID_JSON Handle = 0x8037010D + HCS_E_SYSTEM_NOT_FOUND Handle = 0x8037010E + HCS_E_SYSTEM_ALREADY_EXISTS Handle = 0x8037010F + HCS_E_SYSTEM_ALREADY_STOPPED Handle = 0x80370110 + HCS_E_PROTOCOL_ERROR Handle = 0x80370111 + HCS_E_INVALID_LAYER Handle = 0x80370112 + HCS_E_WINDOWS_INSIDER_REQUIRED Handle = 0x80370113 + HCS_E_SERVICE_NOT_AVAILABLE Handle = 0x80370114 + HCS_E_OPERATION_NOT_STARTED Handle = 0x80370115 + HCS_E_OPERATION_ALREADY_STARTED Handle = 0x80370116 + HCS_E_OPERATION_PENDING Handle = 0x80370117 + HCS_E_OPERATION_TIMEOUT Handle = 0x80370118 + HCS_E_OPERATION_SYSTEM_CALLBACK_ALREADY_SET Handle = 0x80370119 + HCS_E_OPERATION_RESULT_ALLOCATION_FAILED Handle = 0x8037011A + HCS_E_ACCESS_DENIED Handle = 0x8037011B + HCS_E_GUEST_CRITICAL_ERROR Handle = 0x8037011C + ERROR_VNET_VIRTUAL_SWITCH_NAME_NOT_FOUND syscall.Errno = 0xC0370200 + ERROR_VID_REMOTE_NODE_PARENT_GPA_PAGES_USED syscall.Errno = 0x80370001 + WHV_E_UNKNOWN_CAPABILITY Handle = 0x80370300 + WHV_E_INSUFFICIENT_BUFFER Handle = 0x80370301 + WHV_E_UNKNOWN_PROPERTY Handle = 0x80370302 + WHV_E_UNSUPPORTED_HYPERVISOR_CONFIG Handle = 0x80370303 + WHV_E_INVALID_PARTITION_CONFIG Handle = 0x80370304 + WHV_E_GPA_RANGE_NOT_FOUND Handle = 0x80370305 + WHV_E_VP_ALREADY_EXISTS Handle = 0x80370306 + WHV_E_VP_DOES_NOT_EXIST Handle = 0x80370307 + WHV_E_INVALID_VP_STATE Handle = 0x80370308 + WHV_E_INVALID_VP_REGISTER_NAME Handle = 0x80370309 + ERROR_VSMB_SAVED_STATE_FILE_NOT_FOUND syscall.Errno = 0xC0370400 + ERROR_VSMB_SAVED_STATE_CORRUPT syscall.Errno = 0xC0370401 + ERROR_VOLMGR_INCOMPLETE_REGENERATION syscall.Errno = 0x80380001 + ERROR_VOLMGR_INCOMPLETE_DISK_MIGRATION syscall.Errno = 0x80380002 + ERROR_VOLMGR_DATABASE_FULL syscall.Errno = 0xC0380001 + ERROR_VOLMGR_DISK_CONFIGURATION_CORRUPTED syscall.Errno = 0xC0380002 + ERROR_VOLMGR_DISK_CONFIGURATION_NOT_IN_SYNC syscall.Errno = 0xC0380003 + ERROR_VOLMGR_PACK_CONFIG_UPDATE_FAILED syscall.Errno = 0xC0380004 + ERROR_VOLMGR_DISK_CONTAINS_NON_SIMPLE_VOLUME syscall.Errno = 0xC0380005 + ERROR_VOLMGR_DISK_DUPLICATE syscall.Errno = 0xC0380006 + ERROR_VOLMGR_DISK_DYNAMIC syscall.Errno = 0xC0380007 + ERROR_VOLMGR_DISK_ID_INVALID syscall.Errno = 0xC0380008 + ERROR_VOLMGR_DISK_INVALID syscall.Errno = 0xC0380009 + ERROR_VOLMGR_DISK_LAST_VOTER syscall.Errno = 0xC038000A + ERROR_VOLMGR_DISK_LAYOUT_INVALID syscall.Errno = 0xC038000B + ERROR_VOLMGR_DISK_LAYOUT_NON_BASIC_BETWEEN_BASIC_PARTITIONS syscall.Errno = 0xC038000C + ERROR_VOLMGR_DISK_LAYOUT_NOT_CYLINDER_ALIGNED syscall.Errno = 0xC038000D + ERROR_VOLMGR_DISK_LAYOUT_PARTITIONS_TOO_SMALL syscall.Errno = 0xC038000E + ERROR_VOLMGR_DISK_LAYOUT_PRIMARY_BETWEEN_LOGICAL_PARTITIONS syscall.Errno = 0xC038000F + ERROR_VOLMGR_DISK_LAYOUT_TOO_MANY_PARTITIONS syscall.Errno = 0xC0380010 + ERROR_VOLMGR_DISK_MISSING syscall.Errno = 0xC0380011 + ERROR_VOLMGR_DISK_NOT_EMPTY syscall.Errno = 0xC0380012 + ERROR_VOLMGR_DISK_NOT_ENOUGH_SPACE syscall.Errno = 0xC0380013 + ERROR_VOLMGR_DISK_REVECTORING_FAILED syscall.Errno = 0xC0380014 + ERROR_VOLMGR_DISK_SECTOR_SIZE_INVALID syscall.Errno = 0xC0380015 + ERROR_VOLMGR_DISK_SET_NOT_CONTAINED syscall.Errno = 0xC0380016 + ERROR_VOLMGR_DISK_USED_BY_MULTIPLE_MEMBERS syscall.Errno = 0xC0380017 + ERROR_VOLMGR_DISK_USED_BY_MULTIPLE_PLEXES syscall.Errno = 0xC0380018 + ERROR_VOLMGR_DYNAMIC_DISK_NOT_SUPPORTED syscall.Errno = 0xC0380019 + ERROR_VOLMGR_EXTENT_ALREADY_USED syscall.Errno = 0xC038001A + ERROR_VOLMGR_EXTENT_NOT_CONTIGUOUS syscall.Errno = 0xC038001B + ERROR_VOLMGR_EXTENT_NOT_IN_PUBLIC_REGION syscall.Errno = 0xC038001C + ERROR_VOLMGR_EXTENT_NOT_SECTOR_ALIGNED syscall.Errno = 0xC038001D + ERROR_VOLMGR_EXTENT_OVERLAPS_EBR_PARTITION syscall.Errno = 0xC038001E + ERROR_VOLMGR_EXTENT_VOLUME_LENGTHS_DO_NOT_MATCH syscall.Errno = 0xC038001F + ERROR_VOLMGR_FAULT_TOLERANT_NOT_SUPPORTED syscall.Errno = 0xC0380020 + ERROR_VOLMGR_INTERLEAVE_LENGTH_INVALID syscall.Errno = 0xC0380021 + ERROR_VOLMGR_MAXIMUM_REGISTERED_USERS syscall.Errno = 0xC0380022 + ERROR_VOLMGR_MEMBER_IN_SYNC syscall.Errno = 0xC0380023 + ERROR_VOLMGR_MEMBER_INDEX_DUPLICATE syscall.Errno = 0xC0380024 + ERROR_VOLMGR_MEMBER_INDEX_INVALID syscall.Errno = 0xC0380025 + ERROR_VOLMGR_MEMBER_MISSING syscall.Errno = 0xC0380026 + ERROR_VOLMGR_MEMBER_NOT_DETACHED syscall.Errno = 0xC0380027 + ERROR_VOLMGR_MEMBER_REGENERATING syscall.Errno = 0xC0380028 + ERROR_VOLMGR_ALL_DISKS_FAILED syscall.Errno = 0xC0380029 + ERROR_VOLMGR_NO_REGISTERED_USERS syscall.Errno = 0xC038002A + ERROR_VOLMGR_NO_SUCH_USER syscall.Errno = 0xC038002B + ERROR_VOLMGR_NOTIFICATION_RESET syscall.Errno = 0xC038002C + ERROR_VOLMGR_NUMBER_OF_MEMBERS_INVALID syscall.Errno = 0xC038002D + ERROR_VOLMGR_NUMBER_OF_PLEXES_INVALID syscall.Errno = 0xC038002E + ERROR_VOLMGR_PACK_DUPLICATE syscall.Errno = 0xC038002F + ERROR_VOLMGR_PACK_ID_INVALID syscall.Errno = 0xC0380030 + ERROR_VOLMGR_PACK_INVALID syscall.Errno = 0xC0380031 + ERROR_VOLMGR_PACK_NAME_INVALID syscall.Errno = 0xC0380032 + ERROR_VOLMGR_PACK_OFFLINE syscall.Errno = 0xC0380033 + ERROR_VOLMGR_PACK_HAS_QUORUM syscall.Errno = 0xC0380034 + ERROR_VOLMGR_PACK_WITHOUT_QUORUM syscall.Errno = 0xC0380035 + ERROR_VOLMGR_PARTITION_STYLE_INVALID syscall.Errno = 0xC0380036 + ERROR_VOLMGR_PARTITION_UPDATE_FAILED syscall.Errno = 0xC0380037 + ERROR_VOLMGR_PLEX_IN_SYNC syscall.Errno = 0xC0380038 + ERROR_VOLMGR_PLEX_INDEX_DUPLICATE syscall.Errno = 0xC0380039 + ERROR_VOLMGR_PLEX_INDEX_INVALID syscall.Errno = 0xC038003A + ERROR_VOLMGR_PLEX_LAST_ACTIVE syscall.Errno = 0xC038003B + ERROR_VOLMGR_PLEX_MISSING syscall.Errno = 0xC038003C + ERROR_VOLMGR_PLEX_REGENERATING syscall.Errno = 0xC038003D + ERROR_VOLMGR_PLEX_TYPE_INVALID syscall.Errno = 0xC038003E + ERROR_VOLMGR_PLEX_NOT_RAID5 syscall.Errno = 0xC038003F + ERROR_VOLMGR_PLEX_NOT_SIMPLE syscall.Errno = 0xC0380040 + ERROR_VOLMGR_STRUCTURE_SIZE_INVALID syscall.Errno = 0xC0380041 + ERROR_VOLMGR_TOO_MANY_NOTIFICATION_REQUESTS syscall.Errno = 0xC0380042 + ERROR_VOLMGR_TRANSACTION_IN_PROGRESS syscall.Errno = 0xC0380043 + ERROR_VOLMGR_UNEXPECTED_DISK_LAYOUT_CHANGE syscall.Errno = 0xC0380044 + ERROR_VOLMGR_VOLUME_CONTAINS_MISSING_DISK syscall.Errno = 0xC0380045 + ERROR_VOLMGR_VOLUME_ID_INVALID syscall.Errno = 0xC0380046 + ERROR_VOLMGR_VOLUME_LENGTH_INVALID syscall.Errno = 0xC0380047 + ERROR_VOLMGR_VOLUME_LENGTH_NOT_SECTOR_SIZE_MULTIPLE syscall.Errno = 0xC0380048 + ERROR_VOLMGR_VOLUME_NOT_MIRRORED syscall.Errno = 0xC0380049 + ERROR_VOLMGR_VOLUME_NOT_RETAINED syscall.Errno = 0xC038004A + ERROR_VOLMGR_VOLUME_OFFLINE syscall.Errno = 0xC038004B + ERROR_VOLMGR_VOLUME_RETAINED syscall.Errno = 0xC038004C + ERROR_VOLMGR_NUMBER_OF_EXTENTS_INVALID syscall.Errno = 0xC038004D + ERROR_VOLMGR_DIFFERENT_SECTOR_SIZE syscall.Errno = 0xC038004E + ERROR_VOLMGR_BAD_BOOT_DISK syscall.Errno = 0xC038004F + ERROR_VOLMGR_PACK_CONFIG_OFFLINE syscall.Errno = 0xC0380050 + ERROR_VOLMGR_PACK_CONFIG_ONLINE syscall.Errno = 0xC0380051 + ERROR_VOLMGR_NOT_PRIMARY_PACK syscall.Errno = 0xC0380052 + ERROR_VOLMGR_PACK_LOG_UPDATE_FAILED syscall.Errno = 0xC0380053 + ERROR_VOLMGR_NUMBER_OF_DISKS_IN_PLEX_INVALID syscall.Errno = 0xC0380054 + ERROR_VOLMGR_NUMBER_OF_DISKS_IN_MEMBER_INVALID syscall.Errno = 0xC0380055 + ERROR_VOLMGR_VOLUME_MIRRORED syscall.Errno = 0xC0380056 + ERROR_VOLMGR_PLEX_NOT_SIMPLE_SPANNED syscall.Errno = 0xC0380057 + ERROR_VOLMGR_NO_VALID_LOG_COPIES syscall.Errno = 0xC0380058 + ERROR_VOLMGR_PRIMARY_PACK_PRESENT syscall.Errno = 0xC0380059 + ERROR_VOLMGR_NUMBER_OF_DISKS_INVALID syscall.Errno = 0xC038005A + ERROR_VOLMGR_MIRROR_NOT_SUPPORTED syscall.Errno = 0xC038005B + ERROR_VOLMGR_RAID5_NOT_SUPPORTED syscall.Errno = 0xC038005C + ERROR_BCD_NOT_ALL_ENTRIES_IMPORTED syscall.Errno = 0x80390001 + ERROR_BCD_TOO_MANY_ELEMENTS syscall.Errno = 0xC0390002 + ERROR_BCD_NOT_ALL_ENTRIES_SYNCHRONIZED syscall.Errno = 0x80390003 + ERROR_VHD_DRIVE_FOOTER_MISSING syscall.Errno = 0xC03A0001 + ERROR_VHD_DRIVE_FOOTER_CHECKSUM_MISMATCH syscall.Errno = 0xC03A0002 + ERROR_VHD_DRIVE_FOOTER_CORRUPT syscall.Errno = 0xC03A0003 + ERROR_VHD_FORMAT_UNKNOWN syscall.Errno = 0xC03A0004 + ERROR_VHD_FORMAT_UNSUPPORTED_VERSION syscall.Errno = 0xC03A0005 + ERROR_VHD_SPARSE_HEADER_CHECKSUM_MISMATCH syscall.Errno = 0xC03A0006 + ERROR_VHD_SPARSE_HEADER_UNSUPPORTED_VERSION syscall.Errno = 0xC03A0007 + ERROR_VHD_SPARSE_HEADER_CORRUPT syscall.Errno = 0xC03A0008 + ERROR_VHD_BLOCK_ALLOCATION_FAILURE syscall.Errno = 0xC03A0009 + ERROR_VHD_BLOCK_ALLOCATION_TABLE_CORRUPT syscall.Errno = 0xC03A000A + ERROR_VHD_INVALID_BLOCK_SIZE syscall.Errno = 0xC03A000B + ERROR_VHD_BITMAP_MISMATCH syscall.Errno = 0xC03A000C + ERROR_VHD_PARENT_VHD_NOT_FOUND syscall.Errno = 0xC03A000D + ERROR_VHD_CHILD_PARENT_ID_MISMATCH syscall.Errno = 0xC03A000E + ERROR_VHD_CHILD_PARENT_TIMESTAMP_MISMATCH syscall.Errno = 0xC03A000F + ERROR_VHD_METADATA_READ_FAILURE syscall.Errno = 0xC03A0010 + ERROR_VHD_METADATA_WRITE_FAILURE syscall.Errno = 0xC03A0011 + ERROR_VHD_INVALID_SIZE syscall.Errno = 0xC03A0012 + ERROR_VHD_INVALID_FILE_SIZE syscall.Errno = 0xC03A0013 + ERROR_VIRTDISK_PROVIDER_NOT_FOUND syscall.Errno = 0xC03A0014 + ERROR_VIRTDISK_NOT_VIRTUAL_DISK syscall.Errno = 0xC03A0015 + ERROR_VHD_PARENT_VHD_ACCESS_DENIED syscall.Errno = 0xC03A0016 + ERROR_VHD_CHILD_PARENT_SIZE_MISMATCH syscall.Errno = 0xC03A0017 + ERROR_VHD_DIFFERENCING_CHAIN_CYCLE_DETECTED syscall.Errno = 0xC03A0018 + ERROR_VHD_DIFFERENCING_CHAIN_ERROR_IN_PARENT syscall.Errno = 0xC03A0019 + ERROR_VIRTUAL_DISK_LIMITATION syscall.Errno = 0xC03A001A + ERROR_VHD_INVALID_TYPE syscall.Errno = 0xC03A001B + ERROR_VHD_INVALID_STATE syscall.Errno = 0xC03A001C + ERROR_VIRTDISK_UNSUPPORTED_DISK_SECTOR_SIZE syscall.Errno = 0xC03A001D + ERROR_VIRTDISK_DISK_ALREADY_OWNED syscall.Errno = 0xC03A001E + ERROR_VIRTDISK_DISK_ONLINE_AND_WRITABLE syscall.Errno = 0xC03A001F + ERROR_CTLOG_TRACKING_NOT_INITIALIZED syscall.Errno = 0xC03A0020 + ERROR_CTLOG_LOGFILE_SIZE_EXCEEDED_MAXSIZE syscall.Errno = 0xC03A0021 + ERROR_CTLOG_VHD_CHANGED_OFFLINE syscall.Errno = 0xC03A0022 + ERROR_CTLOG_INVALID_TRACKING_STATE syscall.Errno = 0xC03A0023 + ERROR_CTLOG_INCONSISTENT_TRACKING_FILE syscall.Errno = 0xC03A0024 + ERROR_VHD_RESIZE_WOULD_TRUNCATE_DATA syscall.Errno = 0xC03A0025 + ERROR_VHD_COULD_NOT_COMPUTE_MINIMUM_VIRTUAL_SIZE syscall.Errno = 0xC03A0026 + ERROR_VHD_ALREADY_AT_OR_BELOW_MINIMUM_VIRTUAL_SIZE syscall.Errno = 0xC03A0027 + ERROR_VHD_METADATA_FULL syscall.Errno = 0xC03A0028 + ERROR_VHD_INVALID_CHANGE_TRACKING_ID syscall.Errno = 0xC03A0029 + ERROR_VHD_CHANGE_TRACKING_DISABLED syscall.Errno = 0xC03A002A + ERROR_VHD_MISSING_CHANGE_TRACKING_INFORMATION syscall.Errno = 0xC03A0030 + ERROR_QUERY_STORAGE_ERROR syscall.Errno = 0x803A0001 + HCN_E_NETWORK_NOT_FOUND Handle = 0x803B0001 + HCN_E_ENDPOINT_NOT_FOUND Handle = 0x803B0002 + HCN_E_LAYER_NOT_FOUND Handle = 0x803B0003 + HCN_E_SWITCH_NOT_FOUND Handle = 0x803B0004 + HCN_E_SUBNET_NOT_FOUND Handle = 0x803B0005 + HCN_E_ADAPTER_NOT_FOUND Handle = 0x803B0006 + HCN_E_PORT_NOT_FOUND Handle = 0x803B0007 + HCN_E_POLICY_NOT_FOUND Handle = 0x803B0008 + HCN_E_VFP_PORTSETTING_NOT_FOUND Handle = 0x803B0009 + HCN_E_INVALID_NETWORK Handle = 0x803B000A + HCN_E_INVALID_NETWORK_TYPE Handle = 0x803B000B + HCN_E_INVALID_ENDPOINT Handle = 0x803B000C + HCN_E_INVALID_POLICY Handle = 0x803B000D + HCN_E_INVALID_POLICY_TYPE Handle = 0x803B000E + HCN_E_INVALID_REMOTE_ENDPOINT_OPERATION Handle = 0x803B000F + HCN_E_NETWORK_ALREADY_EXISTS Handle = 0x803B0010 + HCN_E_LAYER_ALREADY_EXISTS Handle = 0x803B0011 + HCN_E_POLICY_ALREADY_EXISTS Handle = 0x803B0012 + HCN_E_PORT_ALREADY_EXISTS Handle = 0x803B0013 + HCN_E_ENDPOINT_ALREADY_ATTACHED Handle = 0x803B0014 + HCN_E_REQUEST_UNSUPPORTED Handle = 0x803B0015 + HCN_E_MAPPING_NOT_SUPPORTED Handle = 0x803B0016 + HCN_E_DEGRADED_OPERATION Handle = 0x803B0017 + HCN_E_SHARED_SWITCH_MODIFICATION Handle = 0x803B0018 + HCN_E_GUID_CONVERSION_FAILURE Handle = 0x803B0019 + HCN_E_REGKEY_FAILURE Handle = 0x803B001A + HCN_E_INVALID_JSON Handle = 0x803B001B + HCN_E_INVALID_JSON_REFERENCE Handle = 0x803B001C + HCN_E_ENDPOINT_SHARING_DISABLED Handle = 0x803B001D + HCN_E_INVALID_IP Handle = 0x803B001E + HCN_E_SWITCH_EXTENSION_NOT_FOUND Handle = 0x803B001F + HCN_E_MANAGER_STOPPED Handle = 0x803B0020 + GCN_E_MODULE_NOT_FOUND Handle = 0x803B0021 + GCN_E_NO_REQUEST_HANDLERS Handle = 0x803B0022 + GCN_E_REQUEST_UNSUPPORTED Handle = 0x803B0023 + GCN_E_RUNTIMEKEYS_FAILED Handle = 0x803B0024 + GCN_E_NETADAPTER_TIMEOUT Handle = 0x803B0025 + GCN_E_NETADAPTER_NOT_FOUND Handle = 0x803B0026 + GCN_E_NETCOMPARTMENT_NOT_FOUND Handle = 0x803B0027 + GCN_E_NETINTERFACE_NOT_FOUND Handle = 0x803B0028 + GCN_E_DEFAULTNAMESPACE_EXISTS Handle = 0x803B0029 + SDIAG_E_CANCELLED syscall.Errno = 0x803C0100 + SDIAG_E_SCRIPT syscall.Errno = 0x803C0101 + SDIAG_E_POWERSHELL syscall.Errno = 0x803C0102 + SDIAG_E_MANAGEDHOST syscall.Errno = 0x803C0103 + SDIAG_E_NOVERIFIER syscall.Errno = 0x803C0104 + SDIAG_S_CANNOTRUN syscall.Errno = 0x003C0105 + SDIAG_E_DISABLED syscall.Errno = 0x803C0106 + SDIAG_E_TRUST syscall.Errno = 0x803C0107 + SDIAG_E_CANNOTRUN syscall.Errno = 0x803C0108 + SDIAG_E_VERSION syscall.Errno = 0x803C0109 + SDIAG_E_RESOURCE syscall.Errno = 0x803C010A + SDIAG_E_ROOTCAUSE syscall.Errno = 0x803C010B + WPN_E_CHANNEL_CLOSED Handle = 0x803E0100 + WPN_E_CHANNEL_REQUEST_NOT_COMPLETE Handle = 0x803E0101 + WPN_E_INVALID_APP Handle = 0x803E0102 + WPN_E_OUTSTANDING_CHANNEL_REQUEST Handle = 0x803E0103 + WPN_E_DUPLICATE_CHANNEL Handle = 0x803E0104 + WPN_E_PLATFORM_UNAVAILABLE Handle = 0x803E0105 + WPN_E_NOTIFICATION_POSTED Handle = 0x803E0106 + WPN_E_NOTIFICATION_HIDDEN Handle = 0x803E0107 + WPN_E_NOTIFICATION_NOT_POSTED Handle = 0x803E0108 + WPN_E_CLOUD_DISABLED Handle = 0x803E0109 + WPN_E_CLOUD_INCAPABLE Handle = 0x803E0110 + WPN_E_CLOUD_AUTH_UNAVAILABLE Handle = 0x803E011A + WPN_E_CLOUD_SERVICE_UNAVAILABLE Handle = 0x803E011B + WPN_E_FAILED_LOCK_SCREEN_UPDATE_INTIALIZATION Handle = 0x803E011C + WPN_E_NOTIFICATION_DISABLED Handle = 0x803E0111 + WPN_E_NOTIFICATION_INCAPABLE Handle = 0x803E0112 + WPN_E_INTERNET_INCAPABLE Handle = 0x803E0113 + WPN_E_NOTIFICATION_TYPE_DISABLED Handle = 0x803E0114 + WPN_E_NOTIFICATION_SIZE Handle = 0x803E0115 + WPN_E_TAG_SIZE Handle = 0x803E0116 + WPN_E_ACCESS_DENIED Handle = 0x803E0117 + WPN_E_DUPLICATE_REGISTRATION Handle = 0x803E0118 + WPN_E_PUSH_NOTIFICATION_INCAPABLE Handle = 0x803E0119 + WPN_E_DEV_ID_SIZE Handle = 0x803E0120 + WPN_E_TAG_ALPHANUMERIC Handle = 0x803E012A + WPN_E_INVALID_HTTP_STATUS_CODE Handle = 0x803E012B + WPN_E_OUT_OF_SESSION Handle = 0x803E0200 + WPN_E_POWER_SAVE Handle = 0x803E0201 + WPN_E_IMAGE_NOT_FOUND_IN_CACHE Handle = 0x803E0202 + WPN_E_ALL_URL_NOT_COMPLETED Handle = 0x803E0203 + WPN_E_INVALID_CLOUD_IMAGE Handle = 0x803E0204 + WPN_E_NOTIFICATION_ID_MATCHED Handle = 0x803E0205 + WPN_E_CALLBACK_ALREADY_REGISTERED Handle = 0x803E0206 + WPN_E_TOAST_NOTIFICATION_DROPPED Handle = 0x803E0207 + WPN_E_STORAGE_LOCKED Handle = 0x803E0208 + WPN_E_GROUP_SIZE Handle = 0x803E0209 + WPN_E_GROUP_ALPHANUMERIC Handle = 0x803E020A + WPN_E_CLOUD_DISABLED_FOR_APP Handle = 0x803E020B + E_MBN_CONTEXT_NOT_ACTIVATED Handle = 0x80548201 + E_MBN_BAD_SIM Handle = 0x80548202 + E_MBN_DATA_CLASS_NOT_AVAILABLE Handle = 0x80548203 + E_MBN_INVALID_ACCESS_STRING Handle = 0x80548204 + E_MBN_MAX_ACTIVATED_CONTEXTS Handle = 0x80548205 + E_MBN_PACKET_SVC_DETACHED Handle = 0x80548206 + E_MBN_PROVIDER_NOT_VISIBLE Handle = 0x80548207 + E_MBN_RADIO_POWER_OFF Handle = 0x80548208 + E_MBN_SERVICE_NOT_ACTIVATED Handle = 0x80548209 + E_MBN_SIM_NOT_INSERTED Handle = 0x8054820A + E_MBN_VOICE_CALL_IN_PROGRESS Handle = 0x8054820B + E_MBN_INVALID_CACHE Handle = 0x8054820C + E_MBN_NOT_REGISTERED Handle = 0x8054820D + E_MBN_PROVIDERS_NOT_FOUND Handle = 0x8054820E + E_MBN_PIN_NOT_SUPPORTED Handle = 0x8054820F + E_MBN_PIN_REQUIRED Handle = 0x80548210 + E_MBN_PIN_DISABLED Handle = 0x80548211 + E_MBN_FAILURE Handle = 0x80548212 + E_MBN_INVALID_PROFILE Handle = 0x80548218 + E_MBN_DEFAULT_PROFILE_EXIST Handle = 0x80548219 + E_MBN_SMS_ENCODING_NOT_SUPPORTED Handle = 0x80548220 + E_MBN_SMS_FILTER_NOT_SUPPORTED Handle = 0x80548221 + E_MBN_SMS_INVALID_MEMORY_INDEX Handle = 0x80548222 + E_MBN_SMS_LANG_NOT_SUPPORTED Handle = 0x80548223 + E_MBN_SMS_MEMORY_FAILURE Handle = 0x80548224 + E_MBN_SMS_NETWORK_TIMEOUT Handle = 0x80548225 + E_MBN_SMS_UNKNOWN_SMSC_ADDRESS Handle = 0x80548226 + E_MBN_SMS_FORMAT_NOT_SUPPORTED Handle = 0x80548227 + E_MBN_SMS_OPERATION_NOT_ALLOWED Handle = 0x80548228 + E_MBN_SMS_MEMORY_FULL Handle = 0x80548229 + PEER_E_IPV6_NOT_INSTALLED Handle = 0x80630001 + PEER_E_NOT_INITIALIZED Handle = 0x80630002 + PEER_E_CANNOT_START_SERVICE Handle = 0x80630003 + PEER_E_NOT_LICENSED Handle = 0x80630004 + PEER_E_INVALID_GRAPH Handle = 0x80630010 + PEER_E_DBNAME_CHANGED Handle = 0x80630011 + PEER_E_DUPLICATE_GRAPH Handle = 0x80630012 + PEER_E_GRAPH_NOT_READY Handle = 0x80630013 + PEER_E_GRAPH_SHUTTING_DOWN Handle = 0x80630014 + PEER_E_GRAPH_IN_USE Handle = 0x80630015 + PEER_E_INVALID_DATABASE Handle = 0x80630016 + PEER_E_TOO_MANY_ATTRIBUTES Handle = 0x80630017 + PEER_E_CONNECTION_NOT_FOUND Handle = 0x80630103 + PEER_E_CONNECT_SELF Handle = 0x80630106 + PEER_E_ALREADY_LISTENING Handle = 0x80630107 + PEER_E_NODE_NOT_FOUND Handle = 0x80630108 + PEER_E_CONNECTION_FAILED Handle = 0x80630109 + PEER_E_CONNECTION_NOT_AUTHENTICATED Handle = 0x8063010A + PEER_E_CONNECTION_REFUSED Handle = 0x8063010B + PEER_E_CLASSIFIER_TOO_LONG Handle = 0x80630201 + PEER_E_TOO_MANY_IDENTITIES Handle = 0x80630202 + PEER_E_NO_KEY_ACCESS Handle = 0x80630203 + PEER_E_GROUPS_EXIST Handle = 0x80630204 + PEER_E_RECORD_NOT_FOUND Handle = 0x80630301 + PEER_E_DATABASE_ACCESSDENIED Handle = 0x80630302 + PEER_E_DBINITIALIZATION_FAILED Handle = 0x80630303 + PEER_E_MAX_RECORD_SIZE_EXCEEDED Handle = 0x80630304 + PEER_E_DATABASE_ALREADY_PRESENT Handle = 0x80630305 + PEER_E_DATABASE_NOT_PRESENT Handle = 0x80630306 + PEER_E_IDENTITY_NOT_FOUND Handle = 0x80630401 + PEER_E_EVENT_HANDLE_NOT_FOUND Handle = 0x80630501 + PEER_E_INVALID_SEARCH Handle = 0x80630601 + PEER_E_INVALID_ATTRIBUTES Handle = 0x80630602 + PEER_E_INVITATION_NOT_TRUSTED Handle = 0x80630701 + PEER_E_CHAIN_TOO_LONG Handle = 0x80630703 + PEER_E_INVALID_TIME_PERIOD Handle = 0x80630705 + PEER_E_CIRCULAR_CHAIN_DETECTED Handle = 0x80630706 + PEER_E_CERT_STORE_CORRUPTED Handle = 0x80630801 + PEER_E_NO_CLOUD Handle = 0x80631001 + PEER_E_CLOUD_NAME_AMBIGUOUS Handle = 0x80631005 + PEER_E_INVALID_RECORD Handle = 0x80632010 + PEER_E_NOT_AUTHORIZED Handle = 0x80632020 + PEER_E_PASSWORD_DOES_NOT_MEET_POLICY Handle = 0x80632021 + PEER_E_DEFERRED_VALIDATION Handle = 0x80632030 + PEER_E_INVALID_GROUP_PROPERTIES Handle = 0x80632040 + PEER_E_INVALID_PEER_NAME Handle = 0x80632050 + PEER_E_INVALID_CLASSIFIER Handle = 0x80632060 + PEER_E_INVALID_FRIENDLY_NAME Handle = 0x80632070 + PEER_E_INVALID_ROLE_PROPERTY Handle = 0x80632071 + PEER_E_INVALID_CLASSIFIER_PROPERTY Handle = 0x80632072 + PEER_E_INVALID_RECORD_EXPIRATION Handle = 0x80632080 + PEER_E_INVALID_CREDENTIAL_INFO Handle = 0x80632081 + PEER_E_INVALID_CREDENTIAL Handle = 0x80632082 + PEER_E_INVALID_RECORD_SIZE Handle = 0x80632083 + PEER_E_UNSUPPORTED_VERSION Handle = 0x80632090 + PEER_E_GROUP_NOT_READY Handle = 0x80632091 + PEER_E_GROUP_IN_USE Handle = 0x80632092 + PEER_E_INVALID_GROUP Handle = 0x80632093 + PEER_E_NO_MEMBERS_FOUND Handle = 0x80632094 + PEER_E_NO_MEMBER_CONNECTIONS Handle = 0x80632095 + PEER_E_UNABLE_TO_LISTEN Handle = 0x80632096 + PEER_E_IDENTITY_DELETED Handle = 0x806320A0 + PEER_E_SERVICE_NOT_AVAILABLE Handle = 0x806320A1 + PEER_E_CONTACT_NOT_FOUND Handle = 0x80636001 + PEER_S_GRAPH_DATA_CREATED Handle = 0x00630001 + PEER_S_NO_EVENT_DATA Handle = 0x00630002 + PEER_S_ALREADY_CONNECTED Handle = 0x00632000 + PEER_S_SUBSCRIPTION_EXISTS Handle = 0x00636000 + PEER_S_NO_CONNECTIVITY Handle = 0x00630005 + PEER_S_ALREADY_A_MEMBER Handle = 0x00630006 + PEER_E_CANNOT_CONVERT_PEER_NAME Handle = 0x80634001 + PEER_E_INVALID_PEER_HOST_NAME Handle = 0x80634002 + PEER_E_NO_MORE Handle = 0x80634003 + PEER_E_PNRP_DUPLICATE_PEER_NAME Handle = 0x80634005 + PEER_E_INVITE_CANCELLED Handle = 0x80637000 + PEER_E_INVITE_RESPONSE_NOT_AVAILABLE Handle = 0x80637001 + PEER_E_NOT_SIGNED_IN Handle = 0x80637003 + PEER_E_PRIVACY_DECLINED Handle = 0x80637004 + PEER_E_TIMEOUT Handle = 0x80637005 + PEER_E_INVALID_ADDRESS Handle = 0x80637007 + PEER_E_FW_EXCEPTION_DISABLED Handle = 0x80637008 + PEER_E_FW_BLOCKED_BY_POLICY Handle = 0x80637009 + PEER_E_FW_BLOCKED_BY_SHIELDS_UP Handle = 0x8063700A + PEER_E_FW_DECLINED Handle = 0x8063700B + UI_E_CREATE_FAILED Handle = 0x802A0001 + UI_E_SHUTDOWN_CALLED Handle = 0x802A0002 + UI_E_ILLEGAL_REENTRANCY Handle = 0x802A0003 + UI_E_OBJECT_SEALED Handle = 0x802A0004 + UI_E_VALUE_NOT_SET Handle = 0x802A0005 + UI_E_VALUE_NOT_DETERMINED Handle = 0x802A0006 + UI_E_INVALID_OUTPUT Handle = 0x802A0007 + UI_E_BOOLEAN_EXPECTED Handle = 0x802A0008 + UI_E_DIFFERENT_OWNER Handle = 0x802A0009 + UI_E_AMBIGUOUS_MATCH Handle = 0x802A000A + UI_E_FP_OVERFLOW Handle = 0x802A000B + UI_E_WRONG_THREAD Handle = 0x802A000C + UI_E_STORYBOARD_ACTIVE Handle = 0x802A0101 + UI_E_STORYBOARD_NOT_PLAYING Handle = 0x802A0102 + UI_E_START_KEYFRAME_AFTER_END Handle = 0x802A0103 + UI_E_END_KEYFRAME_NOT_DETERMINED Handle = 0x802A0104 + UI_E_LOOPS_OVERLAP Handle = 0x802A0105 + UI_E_TRANSITION_ALREADY_USED Handle = 0x802A0106 + UI_E_TRANSITION_NOT_IN_STORYBOARD Handle = 0x802A0107 + UI_E_TRANSITION_ECLIPSED Handle = 0x802A0108 + UI_E_TIME_BEFORE_LAST_UPDATE Handle = 0x802A0109 + UI_E_TIMER_CLIENT_ALREADY_CONNECTED Handle = 0x802A010A + UI_E_INVALID_DIMENSION Handle = 0x802A010B + UI_E_PRIMITIVE_OUT_OF_BOUNDS Handle = 0x802A010C + UI_E_WINDOW_CLOSED Handle = 0x802A0201 + E_BLUETOOTH_ATT_INVALID_HANDLE Handle = 0x80650001 + E_BLUETOOTH_ATT_READ_NOT_PERMITTED Handle = 0x80650002 + E_BLUETOOTH_ATT_WRITE_NOT_PERMITTED Handle = 0x80650003 + E_BLUETOOTH_ATT_INVALID_PDU Handle = 0x80650004 + E_BLUETOOTH_ATT_INSUFFICIENT_AUTHENTICATION Handle = 0x80650005 + E_BLUETOOTH_ATT_REQUEST_NOT_SUPPORTED Handle = 0x80650006 + E_BLUETOOTH_ATT_INVALID_OFFSET Handle = 0x80650007 + E_BLUETOOTH_ATT_INSUFFICIENT_AUTHORIZATION Handle = 0x80650008 + E_BLUETOOTH_ATT_PREPARE_QUEUE_FULL Handle = 0x80650009 + E_BLUETOOTH_ATT_ATTRIBUTE_NOT_FOUND Handle = 0x8065000A + E_BLUETOOTH_ATT_ATTRIBUTE_NOT_LONG Handle = 0x8065000B + E_BLUETOOTH_ATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE Handle = 0x8065000C + E_BLUETOOTH_ATT_INVALID_ATTRIBUTE_VALUE_LENGTH Handle = 0x8065000D + E_BLUETOOTH_ATT_UNLIKELY Handle = 0x8065000E + E_BLUETOOTH_ATT_INSUFFICIENT_ENCRYPTION Handle = 0x8065000F + E_BLUETOOTH_ATT_UNSUPPORTED_GROUP_TYPE Handle = 0x80650010 + E_BLUETOOTH_ATT_INSUFFICIENT_RESOURCES Handle = 0x80650011 + E_BLUETOOTH_ATT_UNKNOWN_ERROR Handle = 0x80651000 + E_AUDIO_ENGINE_NODE_NOT_FOUND Handle = 0x80660001 + E_HDAUDIO_EMPTY_CONNECTION_LIST Handle = 0x80660002 + E_HDAUDIO_CONNECTION_LIST_NOT_SUPPORTED Handle = 0x80660003 + E_HDAUDIO_NO_LOGICAL_DEVICES_CREATED Handle = 0x80660004 + E_HDAUDIO_NULL_LINKED_LIST_ENTRY Handle = 0x80660005 + STATEREPOSITORY_E_CONCURRENCY_LOCKING_FAILURE Handle = 0x80670001 + STATEREPOSITORY_E_STATEMENT_INPROGRESS Handle = 0x80670002 + STATEREPOSITORY_E_CONFIGURATION_INVALID Handle = 0x80670003 + STATEREPOSITORY_E_UNKNOWN_SCHEMA_VERSION Handle = 0x80670004 + STATEREPOSITORY_ERROR_DICTIONARY_CORRUPTED Handle = 0x80670005 + STATEREPOSITORY_E_BLOCKED Handle = 0x80670006 + STATEREPOSITORY_E_BUSY_RETRY Handle = 0x80670007 + STATEREPOSITORY_E_BUSY_RECOVERY_RETRY Handle = 0x80670008 + STATEREPOSITORY_E_LOCKED_RETRY Handle = 0x80670009 + STATEREPOSITORY_E_LOCKED_SHAREDCACHE_RETRY Handle = 0x8067000A + STATEREPOSITORY_E_TRANSACTION_REQUIRED Handle = 0x8067000B + STATEREPOSITORY_E_BUSY_TIMEOUT_EXCEEDED Handle = 0x8067000C + STATEREPOSITORY_E_BUSY_RECOVERY_TIMEOUT_EXCEEDED Handle = 0x8067000D + STATEREPOSITORY_E_LOCKED_TIMEOUT_EXCEEDED Handle = 0x8067000E + STATEREPOSITORY_E_LOCKED_SHAREDCACHE_TIMEOUT_EXCEEDED Handle = 0x8067000F + STATEREPOSITORY_E_SERVICE_STOP_IN_PROGRESS Handle = 0x80670010 + STATEREPOSTORY_E_NESTED_TRANSACTION_NOT_SUPPORTED Handle = 0x80670011 + STATEREPOSITORY_ERROR_CACHE_CORRUPTED Handle = 0x80670012 + STATEREPOSITORY_TRANSACTION_CALLER_ID_CHANGED Handle = 0x00670013 + STATEREPOSITORY_TRANSACTION_IN_PROGRESS Handle = 0x00670014 + ERROR_SPACES_POOL_WAS_DELETED Handle = 0x00E70001 + ERROR_SPACES_FAULT_DOMAIN_TYPE_INVALID Handle = 0x80E70001 + ERROR_SPACES_INTERNAL_ERROR Handle = 0x80E70002 + ERROR_SPACES_RESILIENCY_TYPE_INVALID Handle = 0x80E70003 + ERROR_SPACES_DRIVE_SECTOR_SIZE_INVALID Handle = 0x80E70004 + ERROR_SPACES_DRIVE_REDUNDANCY_INVALID Handle = 0x80E70006 + ERROR_SPACES_NUMBER_OF_DATA_COPIES_INVALID Handle = 0x80E70007 + ERROR_SPACES_PARITY_LAYOUT_INVALID Handle = 0x80E70008 + ERROR_SPACES_INTERLEAVE_LENGTH_INVALID Handle = 0x80E70009 + ERROR_SPACES_NUMBER_OF_COLUMNS_INVALID Handle = 0x80E7000A + ERROR_SPACES_NOT_ENOUGH_DRIVES Handle = 0x80E7000B + ERROR_SPACES_EXTENDED_ERROR Handle = 0x80E7000C + ERROR_SPACES_PROVISIONING_TYPE_INVALID Handle = 0x80E7000D + ERROR_SPACES_ALLOCATION_SIZE_INVALID Handle = 0x80E7000E + ERROR_SPACES_ENCLOSURE_AWARE_INVALID Handle = 0x80E7000F + ERROR_SPACES_WRITE_CACHE_SIZE_INVALID Handle = 0x80E70010 + ERROR_SPACES_NUMBER_OF_GROUPS_INVALID Handle = 0x80E70011 + ERROR_SPACES_DRIVE_OPERATIONAL_STATE_INVALID Handle = 0x80E70012 + ERROR_SPACES_ENTRY_INCOMPLETE Handle = 0x80E70013 + ERROR_SPACES_ENTRY_INVALID Handle = 0x80E70014 + ERROR_VOLSNAP_BOOTFILE_NOT_VALID Handle = 0x80820001 + ERROR_VOLSNAP_ACTIVATION_TIMEOUT Handle = 0x80820002 + ERROR_TIERING_NOT_SUPPORTED_ON_VOLUME Handle = 0x80830001 + ERROR_TIERING_VOLUME_DISMOUNT_IN_PROGRESS Handle = 0x80830002 + ERROR_TIERING_STORAGE_TIER_NOT_FOUND Handle = 0x80830003 + ERROR_TIERING_INVALID_FILE_ID Handle = 0x80830004 + ERROR_TIERING_WRONG_CLUSTER_NODE Handle = 0x80830005 + ERROR_TIERING_ALREADY_PROCESSING Handle = 0x80830006 + ERROR_TIERING_CANNOT_PIN_OBJECT Handle = 0x80830007 + ERROR_TIERING_FILE_IS_NOT_PINNED Handle = 0x80830008 + ERROR_NOT_A_TIERED_VOLUME Handle = 0x80830009 + ERROR_ATTRIBUTE_NOT_PRESENT Handle = 0x8083000A + ERROR_SECCORE_INVALID_COMMAND Handle = 0xC0E80000 + ERROR_NO_APPLICABLE_APP_LICENSES_FOUND Handle = 0xC0EA0001 + ERROR_CLIP_LICENSE_NOT_FOUND Handle = 0xC0EA0002 + ERROR_CLIP_DEVICE_LICENSE_MISSING Handle = 0xC0EA0003 + ERROR_CLIP_LICENSE_INVALID_SIGNATURE Handle = 0xC0EA0004 + ERROR_CLIP_KEYHOLDER_LICENSE_MISSING_OR_INVALID Handle = 0xC0EA0005 + ERROR_CLIP_LICENSE_EXPIRED Handle = 0xC0EA0006 + ERROR_CLIP_LICENSE_SIGNED_BY_UNKNOWN_SOURCE Handle = 0xC0EA0007 + ERROR_CLIP_LICENSE_NOT_SIGNED Handle = 0xC0EA0008 + ERROR_CLIP_LICENSE_HARDWARE_ID_OUT_OF_TOLERANCE Handle = 0xC0EA0009 + ERROR_CLIP_LICENSE_DEVICE_ID_MISMATCH Handle = 0xC0EA000A + DXGI_STATUS_OCCLUDED Handle = 0x087A0001 + DXGI_STATUS_CLIPPED Handle = 0x087A0002 + DXGI_STATUS_NO_REDIRECTION Handle = 0x087A0004 + DXGI_STATUS_NO_DESKTOP_ACCESS Handle = 0x087A0005 + DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE Handle = 0x087A0006 + DXGI_STATUS_MODE_CHANGED Handle = 0x087A0007 + DXGI_STATUS_MODE_CHANGE_IN_PROGRESS Handle = 0x087A0008 + DXGI_ERROR_INVALID_CALL Handle = 0x887A0001 + DXGI_ERROR_NOT_FOUND Handle = 0x887A0002 + DXGI_ERROR_MORE_DATA Handle = 0x887A0003 + DXGI_ERROR_UNSUPPORTED Handle = 0x887A0004 + DXGI_ERROR_DEVICE_REMOVED Handle = 0x887A0005 + DXGI_ERROR_DEVICE_HUNG Handle = 0x887A0006 + DXGI_ERROR_DEVICE_RESET Handle = 0x887A0007 + DXGI_ERROR_WAS_STILL_DRAWING Handle = 0x887A000A + DXGI_ERROR_FRAME_STATISTICS_DISJOINT Handle = 0x887A000B + DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE Handle = 0x887A000C + DXGI_ERROR_DRIVER_INTERNAL_ERROR Handle = 0x887A0020 + DXGI_ERROR_NONEXCLUSIVE Handle = 0x887A0021 + DXGI_ERROR_NOT_CURRENTLY_AVAILABLE Handle = 0x887A0022 + DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED Handle = 0x887A0023 + DXGI_ERROR_REMOTE_OUTOFMEMORY Handle = 0x887A0024 + DXGI_ERROR_ACCESS_LOST Handle = 0x887A0026 + DXGI_ERROR_WAIT_TIMEOUT Handle = 0x887A0027 + DXGI_ERROR_SESSION_DISCONNECTED Handle = 0x887A0028 + DXGI_ERROR_RESTRICT_TO_OUTPUT_STALE Handle = 0x887A0029 + DXGI_ERROR_CANNOT_PROTECT_CONTENT Handle = 0x887A002A + DXGI_ERROR_ACCESS_DENIED Handle = 0x887A002B + DXGI_ERROR_NAME_ALREADY_EXISTS Handle = 0x887A002C + DXGI_ERROR_SDK_COMPONENT_MISSING Handle = 0x887A002D + DXGI_ERROR_NOT_CURRENT Handle = 0x887A002E + DXGI_ERROR_HW_PROTECTION_OUTOFMEMORY Handle = 0x887A0030 + DXGI_ERROR_DYNAMIC_CODE_POLICY_VIOLATION Handle = 0x887A0031 + DXGI_ERROR_NON_COMPOSITED_UI Handle = 0x887A0032 + DXGI_STATUS_UNOCCLUDED Handle = 0x087A0009 + DXGI_STATUS_DDA_WAS_STILL_DRAWING Handle = 0x087A000A + DXGI_ERROR_MODE_CHANGE_IN_PROGRESS Handle = 0x887A0025 + DXGI_STATUS_PRESENT_REQUIRED Handle = 0x087A002F + DXGI_ERROR_CACHE_CORRUPT Handle = 0x887A0033 + DXGI_ERROR_CACHE_FULL Handle = 0x887A0034 + DXGI_ERROR_CACHE_HASH_COLLISION Handle = 0x887A0035 + DXGI_ERROR_ALREADY_EXISTS Handle = 0x887A0036 + DXGI_DDI_ERR_WASSTILLDRAWING Handle = 0x887B0001 + DXGI_DDI_ERR_UNSUPPORTED Handle = 0x887B0002 + DXGI_DDI_ERR_NONEXCLUSIVE Handle = 0x887B0003 + D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS Handle = 0x88790001 + D3D10_ERROR_FILE_NOT_FOUND Handle = 0x88790002 + D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS Handle = 0x887C0001 + D3D11_ERROR_FILE_NOT_FOUND Handle = 0x887C0002 + D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS Handle = 0x887C0003 + D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD Handle = 0x887C0004 + D3D12_ERROR_ADAPTER_NOT_FOUND Handle = 0x887E0001 + D3D12_ERROR_DRIVER_VERSION_MISMATCH Handle = 0x887E0002 + D2DERR_WRONG_STATE Handle = 0x88990001 + D2DERR_NOT_INITIALIZED Handle = 0x88990002 + D2DERR_UNSUPPORTED_OPERATION Handle = 0x88990003 + D2DERR_SCANNER_FAILED Handle = 0x88990004 + D2DERR_SCREEN_ACCESS_DENIED Handle = 0x88990005 + D2DERR_DISPLAY_STATE_INVALID Handle = 0x88990006 + D2DERR_ZERO_VECTOR Handle = 0x88990007 + D2DERR_INTERNAL_ERROR Handle = 0x88990008 + D2DERR_DISPLAY_FORMAT_NOT_SUPPORTED Handle = 0x88990009 + D2DERR_INVALID_CALL Handle = 0x8899000A + D2DERR_NO_HARDWARE_DEVICE Handle = 0x8899000B + D2DERR_RECREATE_TARGET Handle = 0x8899000C + D2DERR_TOO_MANY_SHADER_ELEMENTS Handle = 0x8899000D + D2DERR_SHADER_COMPILE_FAILED Handle = 0x8899000E + D2DERR_MAX_TEXTURE_SIZE_EXCEEDED Handle = 0x8899000F + D2DERR_UNSUPPORTED_VERSION Handle = 0x88990010 + D2DERR_BAD_NUMBER Handle = 0x88990011 + D2DERR_WRONG_FACTORY Handle = 0x88990012 + D2DERR_LAYER_ALREADY_IN_USE Handle = 0x88990013 + D2DERR_POP_CALL_DID_NOT_MATCH_PUSH Handle = 0x88990014 + D2DERR_WRONG_RESOURCE_DOMAIN Handle = 0x88990015 + D2DERR_PUSH_POP_UNBALANCED Handle = 0x88990016 + D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT Handle = 0x88990017 + D2DERR_INCOMPATIBLE_BRUSH_TYPES Handle = 0x88990018 + D2DERR_WIN32_ERROR Handle = 0x88990019 + D2DERR_TARGET_NOT_GDI_COMPATIBLE Handle = 0x8899001A + D2DERR_TEXT_EFFECT_IS_WRONG_TYPE Handle = 0x8899001B + D2DERR_TEXT_RENDERER_NOT_RELEASED Handle = 0x8899001C + D2DERR_EXCEEDS_MAX_BITMAP_SIZE Handle = 0x8899001D + D2DERR_INVALID_GRAPH_CONFIGURATION Handle = 0x8899001E + D2DERR_INVALID_INTERNAL_GRAPH_CONFIGURATION Handle = 0x8899001F + D2DERR_CYCLIC_GRAPH Handle = 0x88990020 + D2DERR_BITMAP_CANNOT_DRAW Handle = 0x88990021 + D2DERR_OUTSTANDING_BITMAP_REFERENCES Handle = 0x88990022 + D2DERR_ORIGINAL_TARGET_NOT_BOUND Handle = 0x88990023 + D2DERR_INVALID_TARGET Handle = 0x88990024 + D2DERR_BITMAP_BOUND_AS_TARGET Handle = 0x88990025 + D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES Handle = 0x88990026 + D2DERR_INTERMEDIATE_TOO_LARGE Handle = 0x88990027 + D2DERR_EFFECT_IS_NOT_REGISTERED Handle = 0x88990028 + D2DERR_INVALID_PROPERTY Handle = 0x88990029 + D2DERR_NO_SUBPROPERTIES Handle = 0x8899002A + D2DERR_PRINT_JOB_CLOSED Handle = 0x8899002B + D2DERR_PRINT_FORMAT_NOT_SUPPORTED Handle = 0x8899002C + D2DERR_TOO_MANY_TRANSFORM_INPUTS Handle = 0x8899002D + D2DERR_INVALID_GLYPH_IMAGE Handle = 0x8899002E + DWRITE_E_FILEFORMAT Handle = 0x88985000 + DWRITE_E_UNEXPECTED Handle = 0x88985001 + DWRITE_E_NOFONT Handle = 0x88985002 + DWRITE_E_FILENOTFOUND Handle = 0x88985003 + DWRITE_E_FILEACCESS Handle = 0x88985004 + DWRITE_E_FONTCOLLECTIONOBSOLETE Handle = 0x88985005 + DWRITE_E_ALREADYREGISTERED Handle = 0x88985006 + DWRITE_E_CACHEFORMAT Handle = 0x88985007 + DWRITE_E_CACHEVERSION Handle = 0x88985008 + DWRITE_E_UNSUPPORTEDOPERATION Handle = 0x88985009 + DWRITE_E_TEXTRENDERERINCOMPATIBLE Handle = 0x8898500A + DWRITE_E_FLOWDIRECTIONCONFLICTS Handle = 0x8898500B + DWRITE_E_NOCOLOR Handle = 0x8898500C + DWRITE_E_REMOTEFONT Handle = 0x8898500D + DWRITE_E_DOWNLOADCANCELLED Handle = 0x8898500E + DWRITE_E_DOWNLOADFAILED Handle = 0x8898500F + DWRITE_E_TOOMANYDOWNLOADS Handle = 0x88985010 + WINCODEC_ERR_WRONGSTATE Handle = 0x88982F04 + WINCODEC_ERR_VALUEOUTOFRANGE Handle = 0x88982F05 + WINCODEC_ERR_UNKNOWNIMAGEFORMAT Handle = 0x88982F07 + WINCODEC_ERR_UNSUPPORTEDVERSION Handle = 0x88982F0B + WINCODEC_ERR_NOTINITIALIZED Handle = 0x88982F0C + WINCODEC_ERR_ALREADYLOCKED Handle = 0x88982F0D + WINCODEC_ERR_PROPERTYNOTFOUND Handle = 0x88982F40 + WINCODEC_ERR_PROPERTYNOTSUPPORTED Handle = 0x88982F41 + WINCODEC_ERR_PROPERTYSIZE Handle = 0x88982F42 + WINCODEC_ERR_CODECPRESENT Handle = 0x88982F43 + WINCODEC_ERR_CODECNOTHUMBNAIL Handle = 0x88982F44 + WINCODEC_ERR_PALETTEUNAVAILABLE Handle = 0x88982F45 + WINCODEC_ERR_CODECTOOMANYSCANLINES Handle = 0x88982F46 + WINCODEC_ERR_INTERNALERROR Handle = 0x88982F48 + WINCODEC_ERR_SOURCERECTDOESNOTMATCHDIMENSIONS Handle = 0x88982F49 + WINCODEC_ERR_COMPONENTNOTFOUND Handle = 0x88982F50 + WINCODEC_ERR_IMAGESIZEOUTOFRANGE Handle = 0x88982F51 + WINCODEC_ERR_TOOMUCHMETADATA Handle = 0x88982F52 + WINCODEC_ERR_BADIMAGE Handle = 0x88982F60 + WINCODEC_ERR_BADHEADER Handle = 0x88982F61 + WINCODEC_ERR_FRAMEMISSING Handle = 0x88982F62 + WINCODEC_ERR_BADMETADATAHEADER Handle = 0x88982F63 + WINCODEC_ERR_BADSTREAMDATA Handle = 0x88982F70 + WINCODEC_ERR_STREAMWRITE Handle = 0x88982F71 + WINCODEC_ERR_STREAMREAD Handle = 0x88982F72 + WINCODEC_ERR_STREAMNOTAVAILABLE Handle = 0x88982F73 + WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT Handle = 0x88982F80 + WINCODEC_ERR_UNSUPPORTEDOPERATION Handle = 0x88982F81 + WINCODEC_ERR_INVALIDREGISTRATION Handle = 0x88982F8A + WINCODEC_ERR_COMPONENTINITIALIZEFAILURE Handle = 0x88982F8B + WINCODEC_ERR_INSUFFICIENTBUFFER Handle = 0x88982F8C + WINCODEC_ERR_DUPLICATEMETADATAPRESENT Handle = 0x88982F8D + WINCODEC_ERR_PROPERTYUNEXPECTEDTYPE Handle = 0x88982F8E + WINCODEC_ERR_UNEXPECTEDSIZE Handle = 0x88982F8F + WINCODEC_ERR_INVALIDQUERYREQUEST Handle = 0x88982F90 + WINCODEC_ERR_UNEXPECTEDMETADATATYPE Handle = 0x88982F91 + WINCODEC_ERR_REQUESTONLYVALIDATMETADATAROOT Handle = 0x88982F92 + WINCODEC_ERR_INVALIDQUERYCHARACTER Handle = 0x88982F93 + WINCODEC_ERR_WIN32ERROR Handle = 0x88982F94 + WINCODEC_ERR_INVALIDPROGRESSIVELEVEL Handle = 0x88982F95 + WINCODEC_ERR_INVALIDJPEGSCANINDEX Handle = 0x88982F96 + MILERR_OBJECTBUSY Handle = 0x88980001 + MILERR_INSUFFICIENTBUFFER Handle = 0x88980002 + MILERR_WIN32ERROR Handle = 0x88980003 + MILERR_SCANNER_FAILED Handle = 0x88980004 + MILERR_SCREENACCESSDENIED Handle = 0x88980005 + MILERR_DISPLAYSTATEINVALID Handle = 0x88980006 + MILERR_NONINVERTIBLEMATRIX Handle = 0x88980007 + MILERR_ZEROVECTOR Handle = 0x88980008 + MILERR_TERMINATED Handle = 0x88980009 + MILERR_BADNUMBER Handle = 0x8898000A + MILERR_INTERNALERROR Handle = 0x88980080 + MILERR_DISPLAYFORMATNOTSUPPORTED Handle = 0x88980084 + MILERR_INVALIDCALL Handle = 0x88980085 + MILERR_ALREADYLOCKED Handle = 0x88980086 + MILERR_NOTLOCKED Handle = 0x88980087 + MILERR_DEVICECANNOTRENDERTEXT Handle = 0x88980088 + MILERR_GLYPHBITMAPMISSED Handle = 0x88980089 + MILERR_MALFORMEDGLYPHCACHE Handle = 0x8898008A + MILERR_GENERIC_IGNORE Handle = 0x8898008B + MILERR_MALFORMED_GUIDELINE_DATA Handle = 0x8898008C + MILERR_NO_HARDWARE_DEVICE Handle = 0x8898008D + MILERR_NEED_RECREATE_AND_PRESENT Handle = 0x8898008E + MILERR_ALREADY_INITIALIZED Handle = 0x8898008F + MILERR_MISMATCHED_SIZE Handle = 0x88980090 + MILERR_NO_REDIRECTION_SURFACE_AVAILABLE Handle = 0x88980091 + MILERR_REMOTING_NOT_SUPPORTED Handle = 0x88980092 + MILERR_QUEUED_PRESENT_NOT_SUPPORTED Handle = 0x88980093 + MILERR_NOT_QUEUING_PRESENTS Handle = 0x88980094 + MILERR_NO_REDIRECTION_SURFACE_RETRY_LATER Handle = 0x88980095 + MILERR_TOOMANYSHADERELEMNTS Handle = 0x88980096 + MILERR_MROW_READLOCK_FAILED Handle = 0x88980097 + MILERR_MROW_UPDATE_FAILED Handle = 0x88980098 + MILERR_SHADER_COMPILE_FAILED Handle = 0x88980099 + MILERR_MAX_TEXTURE_SIZE_EXCEEDED Handle = 0x8898009A + MILERR_QPC_TIME_WENT_BACKWARD Handle = 0x8898009B + MILERR_DXGI_ENUMERATION_OUT_OF_SYNC Handle = 0x8898009D + MILERR_ADAPTER_NOT_FOUND Handle = 0x8898009E + MILERR_COLORSPACE_NOT_SUPPORTED Handle = 0x8898009F + MILERR_PREFILTER_NOT_SUPPORTED Handle = 0x889800A0 + MILERR_DISPLAYID_ACCESS_DENIED Handle = 0x889800A1 + UCEERR_INVALIDPACKETHEADER Handle = 0x88980400 + UCEERR_UNKNOWNPACKET Handle = 0x88980401 + UCEERR_ILLEGALPACKET Handle = 0x88980402 + UCEERR_MALFORMEDPACKET Handle = 0x88980403 + UCEERR_ILLEGALHANDLE Handle = 0x88980404 + UCEERR_HANDLELOOKUPFAILED Handle = 0x88980405 + UCEERR_RENDERTHREADFAILURE Handle = 0x88980406 + UCEERR_CTXSTACKFRSTTARGETNULL Handle = 0x88980407 + UCEERR_CONNECTIONIDLOOKUPFAILED Handle = 0x88980408 + UCEERR_BLOCKSFULL Handle = 0x88980409 + UCEERR_MEMORYFAILURE Handle = 0x8898040A + UCEERR_PACKETRECORDOUTOFRANGE Handle = 0x8898040B + UCEERR_ILLEGALRECORDTYPE Handle = 0x8898040C + UCEERR_OUTOFHANDLES Handle = 0x8898040D + UCEERR_UNCHANGABLE_UPDATE_ATTEMPTED Handle = 0x8898040E + UCEERR_NO_MULTIPLE_WORKER_THREADS Handle = 0x8898040F + UCEERR_REMOTINGNOTSUPPORTED Handle = 0x88980410 + UCEERR_MISSINGENDCOMMAND Handle = 0x88980411 + UCEERR_MISSINGBEGINCOMMAND Handle = 0x88980412 + UCEERR_CHANNELSYNCTIMEDOUT Handle = 0x88980413 + UCEERR_CHANNELSYNCABANDONED Handle = 0x88980414 + UCEERR_UNSUPPORTEDTRANSPORTVERSION Handle = 0x88980415 + UCEERR_TRANSPORTUNAVAILABLE Handle = 0x88980416 + UCEERR_FEEDBACK_UNSUPPORTED Handle = 0x88980417 + UCEERR_COMMANDTRANSPORTDENIED Handle = 0x88980418 + UCEERR_GRAPHICSSTREAMUNAVAILABLE Handle = 0x88980419 + UCEERR_GRAPHICSSTREAMALREADYOPEN Handle = 0x88980420 + UCEERR_TRANSPORTDISCONNECTED Handle = 0x88980421 + UCEERR_TRANSPORTOVERLOADED Handle = 0x88980422 + UCEERR_PARTITION_ZOMBIED Handle = 0x88980423 + MILAVERR_NOCLOCK Handle = 0x88980500 + MILAVERR_NOMEDIATYPE Handle = 0x88980501 + MILAVERR_NOVIDEOMIXER Handle = 0x88980502 + MILAVERR_NOVIDEOPRESENTER Handle = 0x88980503 + MILAVERR_NOREADYFRAMES Handle = 0x88980504 + MILAVERR_MODULENOTLOADED Handle = 0x88980505 + MILAVERR_WMPFACTORYNOTREGISTERED Handle = 0x88980506 + MILAVERR_INVALIDWMPVERSION Handle = 0x88980507 + MILAVERR_INSUFFICIENTVIDEORESOURCES Handle = 0x88980508 + MILAVERR_VIDEOACCELERATIONNOTAVAILABLE Handle = 0x88980509 + MILAVERR_REQUESTEDTEXTURETOOBIG Handle = 0x8898050A + MILAVERR_SEEKFAILED Handle = 0x8898050B + MILAVERR_UNEXPECTEDWMPFAILURE Handle = 0x8898050C + MILAVERR_MEDIAPLAYERCLOSED Handle = 0x8898050D + MILAVERR_UNKNOWNHARDWAREERROR Handle = 0x8898050E + MILEFFECTSERR_UNKNOWNPROPERTY Handle = 0x8898060E + MILEFFECTSERR_EFFECTNOTPARTOFGROUP Handle = 0x8898060F + MILEFFECTSERR_NOINPUTSOURCEATTACHED Handle = 0x88980610 + MILEFFECTSERR_CONNECTORNOTCONNECTED Handle = 0x88980611 + MILEFFECTSERR_CONNECTORNOTASSOCIATEDWITHEFFECT Handle = 0x88980612 + MILEFFECTSERR_RESERVED Handle = 0x88980613 + MILEFFECTSERR_CYCLEDETECTED Handle = 0x88980614 + MILEFFECTSERR_EFFECTINMORETHANONEGRAPH Handle = 0x88980615 + MILEFFECTSERR_EFFECTALREADYINAGRAPH Handle = 0x88980616 + MILEFFECTSERR_EFFECTHASNOCHILDREN Handle = 0x88980617 + MILEFFECTSERR_ALREADYATTACHEDTOLISTENER Handle = 0x88980618 + MILEFFECTSERR_NOTAFFINETRANSFORM Handle = 0x88980619 + MILEFFECTSERR_EMPTYBOUNDS Handle = 0x8898061A + MILEFFECTSERR_OUTPUTSIZETOOLARGE Handle = 0x8898061B + DWMERR_STATE_TRANSITION_FAILED Handle = 0x88980700 + DWMERR_THEME_FAILED Handle = 0x88980701 + DWMERR_CATASTROPHIC_FAILURE Handle = 0x88980702 + DCOMPOSITION_ERROR_WINDOW_ALREADY_COMPOSED Handle = 0x88980800 + DCOMPOSITION_ERROR_SURFACE_BEING_RENDERED Handle = 0x88980801 + DCOMPOSITION_ERROR_SURFACE_NOT_BEING_RENDERED Handle = 0x88980802 + ONL_E_INVALID_AUTHENTICATION_TARGET Handle = 0x80860001 + ONL_E_ACCESS_DENIED_BY_TOU Handle = 0x80860002 + ONL_E_INVALID_APPLICATION Handle = 0x80860003 + ONL_E_PASSWORD_UPDATE_REQUIRED Handle = 0x80860004 + ONL_E_ACCOUNT_UPDATE_REQUIRED Handle = 0x80860005 + ONL_E_FORCESIGNIN Handle = 0x80860006 + ONL_E_ACCOUNT_LOCKED Handle = 0x80860007 + ONL_E_PARENTAL_CONSENT_REQUIRED Handle = 0x80860008 + ONL_E_EMAIL_VERIFICATION_REQUIRED Handle = 0x80860009 + ONL_E_ACCOUNT_SUSPENDED_COMPROIMISE Handle = 0x8086000A + ONL_E_ACCOUNT_SUSPENDED_ABUSE Handle = 0x8086000B + ONL_E_ACTION_REQUIRED Handle = 0x8086000C + ONL_CONNECTION_COUNT_LIMIT Handle = 0x8086000D + ONL_E_CONNECTED_ACCOUNT_CAN_NOT_SIGNOUT Handle = 0x8086000E + ONL_E_USER_AUTHENTICATION_REQUIRED Handle = 0x8086000F + ONL_E_REQUEST_THROTTLED Handle = 0x80860010 + FA_E_MAX_PERSISTED_ITEMS_REACHED Handle = 0x80270220 + FA_E_HOMEGROUP_NOT_AVAILABLE Handle = 0x80270222 + E_MONITOR_RESOLUTION_TOO_LOW Handle = 0x80270250 + E_ELEVATED_ACTIVATION_NOT_SUPPORTED Handle = 0x80270251 + E_UAC_DISABLED Handle = 0x80270252 + E_FULL_ADMIN_NOT_SUPPORTED Handle = 0x80270253 + E_APPLICATION_NOT_REGISTERED Handle = 0x80270254 + E_MULTIPLE_EXTENSIONS_FOR_APPLICATION Handle = 0x80270255 + E_MULTIPLE_PACKAGES_FOR_FAMILY Handle = 0x80270256 + E_APPLICATION_MANAGER_NOT_RUNNING Handle = 0x80270257 + S_STORE_LAUNCHED_FOR_REMEDIATION Handle = 0x00270258 + S_APPLICATION_ACTIVATION_ERROR_HANDLED_BY_DIALOG Handle = 0x00270259 + E_APPLICATION_ACTIVATION_TIMED_OUT Handle = 0x8027025A + E_APPLICATION_ACTIVATION_EXEC_FAILURE Handle = 0x8027025B + E_APPLICATION_TEMPORARY_LICENSE_ERROR Handle = 0x8027025C + E_APPLICATION_TRIAL_LICENSE_EXPIRED Handle = 0x8027025D + E_SKYDRIVE_ROOT_TARGET_FILE_SYSTEM_NOT_SUPPORTED Handle = 0x80270260 + E_SKYDRIVE_ROOT_TARGET_OVERLAP Handle = 0x80270261 + E_SKYDRIVE_ROOT_TARGET_CANNOT_INDEX Handle = 0x80270262 + E_SKYDRIVE_FILE_NOT_UPLOADED Handle = 0x80270263 + E_SKYDRIVE_UPDATE_AVAILABILITY_FAIL Handle = 0x80270264 + E_SKYDRIVE_ROOT_TARGET_VOLUME_ROOT_NOT_SUPPORTED Handle = 0x80270265 + E_SYNCENGINE_FILE_SIZE_OVER_LIMIT Handle = 0x8802B001 + E_SYNCENGINE_FILE_SIZE_EXCEEDS_REMAINING_QUOTA Handle = 0x8802B002 + E_SYNCENGINE_UNSUPPORTED_FILE_NAME Handle = 0x8802B003 + E_SYNCENGINE_FOLDER_ITEM_COUNT_LIMIT_EXCEEDED Handle = 0x8802B004 + E_SYNCENGINE_FILE_SYNC_PARTNER_ERROR Handle = 0x8802B005 + E_SYNCENGINE_SYNC_PAUSED_BY_SERVICE Handle = 0x8802B006 + E_SYNCENGINE_FILE_IDENTIFIER_UNKNOWN Handle = 0x8802C002 + E_SYNCENGINE_SERVICE_AUTHENTICATION_FAILED Handle = 0x8802C003 + E_SYNCENGINE_UNKNOWN_SERVICE_ERROR Handle = 0x8802C004 + E_SYNCENGINE_SERVICE_RETURNED_UNEXPECTED_SIZE Handle = 0x8802C005 + E_SYNCENGINE_REQUEST_BLOCKED_BY_SERVICE Handle = 0x8802C006 + E_SYNCENGINE_REQUEST_BLOCKED_DUE_TO_CLIENT_ERROR Handle = 0x8802C007 + E_SYNCENGINE_FOLDER_INACCESSIBLE Handle = 0x8802D001 + E_SYNCENGINE_UNSUPPORTED_FOLDER_NAME Handle = 0x8802D002 + E_SYNCENGINE_UNSUPPORTED_MARKET Handle = 0x8802D003 + E_SYNCENGINE_PATH_LENGTH_LIMIT_EXCEEDED Handle = 0x8802D004 + E_SYNCENGINE_REMOTE_PATH_LENGTH_LIMIT_EXCEEDED Handle = 0x8802D005 + E_SYNCENGINE_CLIENT_UPDATE_NEEDED Handle = 0x8802D006 + E_SYNCENGINE_PROXY_AUTHENTICATION_REQUIRED Handle = 0x8802D007 + E_SYNCENGINE_STORAGE_SERVICE_PROVISIONING_FAILED Handle = 0x8802D008 + E_SYNCENGINE_UNSUPPORTED_REPARSE_POINT Handle = 0x8802D009 + E_SYNCENGINE_STORAGE_SERVICE_BLOCKED Handle = 0x8802D00A + E_SYNCENGINE_FOLDER_IN_REDIRECTION Handle = 0x8802D00B + EAS_E_POLICY_NOT_MANAGED_BY_OS Handle = 0x80550001 + EAS_E_POLICY_COMPLIANT_WITH_ACTIONS Handle = 0x80550002 + EAS_E_REQUESTED_POLICY_NOT_ENFORCEABLE Handle = 0x80550003 + EAS_E_CURRENT_USER_HAS_BLANK_PASSWORD Handle = 0x80550004 + EAS_E_REQUESTED_POLICY_PASSWORD_EXPIRATION_INCOMPATIBLE Handle = 0x80550005 + EAS_E_USER_CANNOT_CHANGE_PASSWORD Handle = 0x80550006 + EAS_E_ADMINS_HAVE_BLANK_PASSWORD Handle = 0x80550007 + EAS_E_ADMINS_CANNOT_CHANGE_PASSWORD Handle = 0x80550008 + EAS_E_LOCAL_CONTROLLED_USERS_CANNOT_CHANGE_PASSWORD Handle = 0x80550009 + EAS_E_PASSWORD_POLICY_NOT_ENFORCEABLE_FOR_CONNECTED_ADMINS Handle = 0x8055000A + EAS_E_CONNECTED_ADMINS_NEED_TO_CHANGE_PASSWORD Handle = 0x8055000B + EAS_E_PASSWORD_POLICY_NOT_ENFORCEABLE_FOR_CURRENT_CONNECTED_USER Handle = 0x8055000C + EAS_E_CURRENT_CONNECTED_USER_NEED_TO_CHANGE_PASSWORD Handle = 0x8055000D + WEB_E_UNSUPPORTED_FORMAT Handle = 0x83750001 + WEB_E_INVALID_XML Handle = 0x83750002 + WEB_E_MISSING_REQUIRED_ELEMENT Handle = 0x83750003 + WEB_E_MISSING_REQUIRED_ATTRIBUTE Handle = 0x83750004 + WEB_E_UNEXPECTED_CONTENT Handle = 0x83750005 + WEB_E_RESOURCE_TOO_LARGE Handle = 0x83750006 + WEB_E_INVALID_JSON_STRING Handle = 0x83750007 + WEB_E_INVALID_JSON_NUMBER Handle = 0x83750008 + WEB_E_JSON_VALUE_NOT_FOUND Handle = 0x83750009 + HTTP_E_STATUS_UNEXPECTED Handle = 0x80190001 + HTTP_E_STATUS_UNEXPECTED_REDIRECTION Handle = 0x80190003 + HTTP_E_STATUS_UNEXPECTED_CLIENT_ERROR Handle = 0x80190004 + HTTP_E_STATUS_UNEXPECTED_SERVER_ERROR Handle = 0x80190005 + HTTP_E_STATUS_AMBIGUOUS Handle = 0x8019012C + HTTP_E_STATUS_MOVED Handle = 0x8019012D + HTTP_E_STATUS_REDIRECT Handle = 0x8019012E + HTTP_E_STATUS_REDIRECT_METHOD Handle = 0x8019012F + HTTP_E_STATUS_NOT_MODIFIED Handle = 0x80190130 + HTTP_E_STATUS_USE_PROXY Handle = 0x80190131 + HTTP_E_STATUS_REDIRECT_KEEP_VERB Handle = 0x80190133 + HTTP_E_STATUS_BAD_REQUEST Handle = 0x80190190 + HTTP_E_STATUS_DENIED Handle = 0x80190191 + HTTP_E_STATUS_PAYMENT_REQ Handle = 0x80190192 + HTTP_E_STATUS_FORBIDDEN Handle = 0x80190193 + HTTP_E_STATUS_NOT_FOUND Handle = 0x80190194 + HTTP_E_STATUS_BAD_METHOD Handle = 0x80190195 + HTTP_E_STATUS_NONE_ACCEPTABLE Handle = 0x80190196 + HTTP_E_STATUS_PROXY_AUTH_REQ Handle = 0x80190197 + HTTP_E_STATUS_REQUEST_TIMEOUT Handle = 0x80190198 + HTTP_E_STATUS_CONFLICT Handle = 0x80190199 + HTTP_E_STATUS_GONE Handle = 0x8019019A + HTTP_E_STATUS_LENGTH_REQUIRED Handle = 0x8019019B + HTTP_E_STATUS_PRECOND_FAILED Handle = 0x8019019C + HTTP_E_STATUS_REQUEST_TOO_LARGE Handle = 0x8019019D + HTTP_E_STATUS_URI_TOO_LONG Handle = 0x8019019E + HTTP_E_STATUS_UNSUPPORTED_MEDIA Handle = 0x8019019F + HTTP_E_STATUS_RANGE_NOT_SATISFIABLE Handle = 0x801901A0 + HTTP_E_STATUS_EXPECTATION_FAILED Handle = 0x801901A1 + HTTP_E_STATUS_SERVER_ERROR Handle = 0x801901F4 + HTTP_E_STATUS_NOT_SUPPORTED Handle = 0x801901F5 + HTTP_E_STATUS_BAD_GATEWAY Handle = 0x801901F6 + HTTP_E_STATUS_SERVICE_UNAVAIL Handle = 0x801901F7 + HTTP_E_STATUS_GATEWAY_TIMEOUT Handle = 0x801901F8 + HTTP_E_STATUS_VERSION_NOT_SUP Handle = 0x801901F9 + E_INVALID_PROTOCOL_OPERATION Handle = 0x83760001 + E_INVALID_PROTOCOL_FORMAT Handle = 0x83760002 + E_PROTOCOL_EXTENSIONS_NOT_SUPPORTED Handle = 0x83760003 + E_SUBPROTOCOL_NOT_SUPPORTED Handle = 0x83760004 + E_PROTOCOL_VERSION_NOT_SUPPORTED Handle = 0x83760005 + INPUT_E_OUT_OF_ORDER Handle = 0x80400000 + INPUT_E_REENTRANCY Handle = 0x80400001 + INPUT_E_MULTIMODAL Handle = 0x80400002 + INPUT_E_PACKET Handle = 0x80400003 + INPUT_E_FRAME Handle = 0x80400004 + INPUT_E_HISTORY Handle = 0x80400005 + INPUT_E_DEVICE_INFO Handle = 0x80400006 + INPUT_E_TRANSFORM Handle = 0x80400007 + INPUT_E_DEVICE_PROPERTY Handle = 0x80400008 + INET_E_INVALID_URL Handle = 0x800C0002 + INET_E_NO_SESSION Handle = 0x800C0003 + INET_E_CANNOT_CONNECT Handle = 0x800C0004 + INET_E_RESOURCE_NOT_FOUND Handle = 0x800C0005 + INET_E_OBJECT_NOT_FOUND Handle = 0x800C0006 + INET_E_DATA_NOT_AVAILABLE Handle = 0x800C0007 + INET_E_DOWNLOAD_FAILURE Handle = 0x800C0008 + INET_E_AUTHENTICATION_REQUIRED Handle = 0x800C0009 + INET_E_NO_VALID_MEDIA Handle = 0x800C000A + INET_E_CONNECTION_TIMEOUT Handle = 0x800C000B + INET_E_INVALID_REQUEST Handle = 0x800C000C + INET_E_UNKNOWN_PROTOCOL Handle = 0x800C000D + INET_E_SECURITY_PROBLEM Handle = 0x800C000E + INET_E_CANNOT_LOAD_DATA Handle = 0x800C000F + INET_E_CANNOT_INSTANTIATE_OBJECT Handle = 0x800C0010 + INET_E_INVALID_CERTIFICATE Handle = 0x800C0019 + INET_E_REDIRECT_FAILED Handle = 0x800C0014 + INET_E_REDIRECT_TO_DIR Handle = 0x800C0015 + ERROR_DBG_CREATE_PROCESS_FAILURE_LOCKDOWN Handle = 0x80B00001 + ERROR_DBG_ATTACH_PROCESS_FAILURE_LOCKDOWN Handle = 0x80B00002 + ERROR_DBG_CONNECT_SERVER_FAILURE_LOCKDOWN Handle = 0x80B00003 + ERROR_DBG_START_SERVER_FAILURE_LOCKDOWN Handle = 0x80B00004 + ERROR_IO_PREEMPTED Handle = 0x89010001 + JSCRIPT_E_CANTEXECUTE Handle = 0x89020001 + WEP_E_NOT_PROVISIONED_ON_ALL_VOLUMES Handle = 0x88010001 + WEP_E_FIXED_DATA_NOT_SUPPORTED Handle = 0x88010002 + WEP_E_HARDWARE_NOT_COMPLIANT Handle = 0x88010003 + WEP_E_LOCK_NOT_CONFIGURED Handle = 0x88010004 + WEP_E_PROTECTION_SUSPENDED Handle = 0x88010005 + WEP_E_NO_LICENSE Handle = 0x88010006 + WEP_E_OS_NOT_PROTECTED Handle = 0x88010007 + WEP_E_UNEXPECTED_FAIL Handle = 0x88010008 + WEP_E_BUFFER_TOO_LARGE Handle = 0x88010009 + ERROR_SVHDX_ERROR_STORED Handle = 0xC05C0000 + ERROR_SVHDX_ERROR_NOT_AVAILABLE Handle = 0xC05CFF00 + ERROR_SVHDX_UNIT_ATTENTION_AVAILABLE Handle = 0xC05CFF01 + ERROR_SVHDX_UNIT_ATTENTION_CAPACITY_DATA_CHANGED Handle = 0xC05CFF02 + ERROR_SVHDX_UNIT_ATTENTION_RESERVATIONS_PREEMPTED Handle = 0xC05CFF03 + ERROR_SVHDX_UNIT_ATTENTION_RESERVATIONS_RELEASED Handle = 0xC05CFF04 + ERROR_SVHDX_UNIT_ATTENTION_REGISTRATIONS_PREEMPTED Handle = 0xC05CFF05 + ERROR_SVHDX_UNIT_ATTENTION_OPERATING_DEFINITION_CHANGED Handle = 0xC05CFF06 + ERROR_SVHDX_RESERVATION_CONFLICT Handle = 0xC05CFF07 + ERROR_SVHDX_WRONG_FILE_TYPE Handle = 0xC05CFF08 + ERROR_SVHDX_VERSION_MISMATCH Handle = 0xC05CFF09 + ERROR_VHD_SHARED Handle = 0xC05CFF0A + ERROR_SVHDX_NO_INITIATOR Handle = 0xC05CFF0B + ERROR_VHDSET_BACKING_STORAGE_NOT_FOUND Handle = 0xC05CFF0C + ERROR_SMB_NO_PREAUTH_INTEGRITY_HASH_OVERLAP Handle = 0xC05D0000 + ERROR_SMB_BAD_CLUSTER_DIALECT Handle = 0xC05D0001 + WININET_E_OUT_OF_HANDLES Handle = 0x80072EE1 + WININET_E_TIMEOUT Handle = 0x80072EE2 + WININET_E_EXTENDED_ERROR Handle = 0x80072EE3 + WININET_E_INTERNAL_ERROR Handle = 0x80072EE4 + WININET_E_INVALID_URL Handle = 0x80072EE5 + WININET_E_UNRECOGNIZED_SCHEME Handle = 0x80072EE6 + WININET_E_NAME_NOT_RESOLVED Handle = 0x80072EE7 + WININET_E_PROTOCOL_NOT_FOUND Handle = 0x80072EE8 + WININET_E_INVALID_OPTION Handle = 0x80072EE9 + WININET_E_BAD_OPTION_LENGTH Handle = 0x80072EEA + WININET_E_OPTION_NOT_SETTABLE Handle = 0x80072EEB + WININET_E_SHUTDOWN Handle = 0x80072EEC + WININET_E_INCORRECT_USER_NAME Handle = 0x80072EED + WININET_E_INCORRECT_PASSWORD Handle = 0x80072EEE + WININET_E_LOGIN_FAILURE Handle = 0x80072EEF + WININET_E_INVALID_OPERATION Handle = 0x80072EF0 + WININET_E_OPERATION_CANCELLED Handle = 0x80072EF1 + WININET_E_INCORRECT_HANDLE_TYPE Handle = 0x80072EF2 + WININET_E_INCORRECT_HANDLE_STATE Handle = 0x80072EF3 + WININET_E_NOT_PROXY_REQUEST Handle = 0x80072EF4 + WININET_E_REGISTRY_VALUE_NOT_FOUND Handle = 0x80072EF5 + WININET_E_BAD_REGISTRY_PARAMETER Handle = 0x80072EF6 + WININET_E_NO_DIRECT_ACCESS Handle = 0x80072EF7 + WININET_E_NO_CONTEXT Handle = 0x80072EF8 + WININET_E_NO_CALLBACK Handle = 0x80072EF9 + WININET_E_REQUEST_PENDING Handle = 0x80072EFA + WININET_E_INCORRECT_FORMAT Handle = 0x80072EFB + WININET_E_ITEM_NOT_FOUND Handle = 0x80072EFC + WININET_E_CANNOT_CONNECT Handle = 0x80072EFD + WININET_E_CONNECTION_ABORTED Handle = 0x80072EFE + WININET_E_CONNECTION_RESET Handle = 0x80072EFF + WININET_E_FORCE_RETRY Handle = 0x80072F00 + WININET_E_INVALID_PROXY_REQUEST Handle = 0x80072F01 + WININET_E_NEED_UI Handle = 0x80072F02 + WININET_E_HANDLE_EXISTS Handle = 0x80072F04 + WININET_E_SEC_CERT_DATE_INVALID Handle = 0x80072F05 + WININET_E_SEC_CERT_CN_INVALID Handle = 0x80072F06 + WININET_E_HTTP_TO_HTTPS_ON_REDIR Handle = 0x80072F07 + WININET_E_HTTPS_TO_HTTP_ON_REDIR Handle = 0x80072F08 + WININET_E_MIXED_SECURITY Handle = 0x80072F09 + WININET_E_CHG_POST_IS_NON_SECURE Handle = 0x80072F0A + WININET_E_POST_IS_NON_SECURE Handle = 0x80072F0B + WININET_E_CLIENT_AUTH_CERT_NEEDED Handle = 0x80072F0C + WININET_E_INVALID_CA Handle = 0x80072F0D + WININET_E_CLIENT_AUTH_NOT_SETUP Handle = 0x80072F0E + WININET_E_ASYNC_THREAD_FAILED Handle = 0x80072F0F + WININET_E_REDIRECT_SCHEME_CHANGE Handle = 0x80072F10 + WININET_E_DIALOG_PENDING Handle = 0x80072F11 + WININET_E_RETRY_DIALOG Handle = 0x80072F12 + WININET_E_NO_NEW_CONTAINERS Handle = 0x80072F13 + WININET_E_HTTPS_HTTP_SUBMIT_REDIR Handle = 0x80072F14 + WININET_E_SEC_CERT_ERRORS Handle = 0x80072F17 + WININET_E_SEC_CERT_REV_FAILED Handle = 0x80072F19 + WININET_E_HEADER_NOT_FOUND Handle = 0x80072F76 + WININET_E_DOWNLEVEL_SERVER Handle = 0x80072F77 + WININET_E_INVALID_SERVER_RESPONSE Handle = 0x80072F78 + WININET_E_INVALID_HEADER Handle = 0x80072F79 + WININET_E_INVALID_QUERY_REQUEST Handle = 0x80072F7A + WININET_E_HEADER_ALREADY_EXISTS Handle = 0x80072F7B + WININET_E_REDIRECT_FAILED Handle = 0x80072F7C + WININET_E_SECURITY_CHANNEL_ERROR Handle = 0x80072F7D + WININET_E_UNABLE_TO_CACHE_FILE Handle = 0x80072F7E + WININET_E_TCPIP_NOT_INSTALLED Handle = 0x80072F7F + WININET_E_DISCONNECTED Handle = 0x80072F83 + WININET_E_SERVER_UNREACHABLE Handle = 0x80072F84 + WININET_E_PROXY_SERVER_UNREACHABLE Handle = 0x80072F85 + WININET_E_BAD_AUTO_PROXY_SCRIPT Handle = 0x80072F86 + WININET_E_UNABLE_TO_DOWNLOAD_SCRIPT Handle = 0x80072F87 + WININET_E_SEC_INVALID_CERT Handle = 0x80072F89 + WININET_E_SEC_CERT_REVOKED Handle = 0x80072F8A + WININET_E_FAILED_DUETOSECURITYCHECK Handle = 0x80072F8B + WININET_E_NOT_INITIALIZED Handle = 0x80072F8C + WININET_E_LOGIN_FAILURE_DISPLAY_ENTITY_BODY Handle = 0x80072F8E + WININET_E_DECODING_FAILED Handle = 0x80072F8F + WININET_E_NOT_REDIRECTED Handle = 0x80072F80 + WININET_E_COOKIE_NEEDS_CONFIRMATION Handle = 0x80072F81 + WININET_E_COOKIE_DECLINED Handle = 0x80072F82 + WININET_E_REDIRECT_NEEDS_CONFIRMATION Handle = 0x80072F88 + SQLITE_E_ERROR Handle = 0x87AF0001 + SQLITE_E_INTERNAL Handle = 0x87AF0002 + SQLITE_E_PERM Handle = 0x87AF0003 + SQLITE_E_ABORT Handle = 0x87AF0004 + SQLITE_E_BUSY Handle = 0x87AF0005 + SQLITE_E_LOCKED Handle = 0x87AF0006 + SQLITE_E_NOMEM Handle = 0x87AF0007 + SQLITE_E_READONLY Handle = 0x87AF0008 + SQLITE_E_INTERRUPT Handle = 0x87AF0009 + SQLITE_E_IOERR Handle = 0x87AF000A + SQLITE_E_CORRUPT Handle = 0x87AF000B + SQLITE_E_NOTFOUND Handle = 0x87AF000C + SQLITE_E_FULL Handle = 0x87AF000D + SQLITE_E_CANTOPEN Handle = 0x87AF000E + SQLITE_E_PROTOCOL Handle = 0x87AF000F + SQLITE_E_EMPTY Handle = 0x87AF0010 + SQLITE_E_SCHEMA Handle = 0x87AF0011 + SQLITE_E_TOOBIG Handle = 0x87AF0012 + SQLITE_E_CONSTRAINT Handle = 0x87AF0013 + SQLITE_E_MISMATCH Handle = 0x87AF0014 + SQLITE_E_MISUSE Handle = 0x87AF0015 + SQLITE_E_NOLFS Handle = 0x87AF0016 + SQLITE_E_AUTH Handle = 0x87AF0017 + SQLITE_E_FORMAT Handle = 0x87AF0018 + SQLITE_E_RANGE Handle = 0x87AF0019 + SQLITE_E_NOTADB Handle = 0x87AF001A + SQLITE_E_NOTICE Handle = 0x87AF001B + SQLITE_E_WARNING Handle = 0x87AF001C + SQLITE_E_ROW Handle = 0x87AF0064 + SQLITE_E_DONE Handle = 0x87AF0065 + SQLITE_E_IOERR_READ Handle = 0x87AF010A + SQLITE_E_IOERR_SHORT_READ Handle = 0x87AF020A + SQLITE_E_IOERR_WRITE Handle = 0x87AF030A + SQLITE_E_IOERR_FSYNC Handle = 0x87AF040A + SQLITE_E_IOERR_DIR_FSYNC Handle = 0x87AF050A + SQLITE_E_IOERR_TRUNCATE Handle = 0x87AF060A + SQLITE_E_IOERR_FSTAT Handle = 0x87AF070A + SQLITE_E_IOERR_UNLOCK Handle = 0x87AF080A + SQLITE_E_IOERR_RDLOCK Handle = 0x87AF090A + SQLITE_E_IOERR_DELETE Handle = 0x87AF0A0A + SQLITE_E_IOERR_BLOCKED Handle = 0x87AF0B0A + SQLITE_E_IOERR_NOMEM Handle = 0x87AF0C0A + SQLITE_E_IOERR_ACCESS Handle = 0x87AF0D0A + SQLITE_E_IOERR_CHECKRESERVEDLOCK Handle = 0x87AF0E0A + SQLITE_E_IOERR_LOCK Handle = 0x87AF0F0A + SQLITE_E_IOERR_CLOSE Handle = 0x87AF100A + SQLITE_E_IOERR_DIR_CLOSE Handle = 0x87AF110A + SQLITE_E_IOERR_SHMOPEN Handle = 0x87AF120A + SQLITE_E_IOERR_SHMSIZE Handle = 0x87AF130A + SQLITE_E_IOERR_SHMLOCK Handle = 0x87AF140A + SQLITE_E_IOERR_SHMMAP Handle = 0x87AF150A + SQLITE_E_IOERR_SEEK Handle = 0x87AF160A + SQLITE_E_IOERR_DELETE_NOENT Handle = 0x87AF170A + SQLITE_E_IOERR_MMAP Handle = 0x87AF180A + SQLITE_E_IOERR_GETTEMPPATH Handle = 0x87AF190A + SQLITE_E_IOERR_CONVPATH Handle = 0x87AF1A0A + SQLITE_E_IOERR_VNODE Handle = 0x87AF1A02 + SQLITE_E_IOERR_AUTH Handle = 0x87AF1A03 + SQLITE_E_LOCKED_SHAREDCACHE Handle = 0x87AF0106 + SQLITE_E_BUSY_RECOVERY Handle = 0x87AF0105 + SQLITE_E_BUSY_SNAPSHOT Handle = 0x87AF0205 + SQLITE_E_CANTOPEN_NOTEMPDIR Handle = 0x87AF010E + SQLITE_E_CANTOPEN_ISDIR Handle = 0x87AF020E + SQLITE_E_CANTOPEN_FULLPATH Handle = 0x87AF030E + SQLITE_E_CANTOPEN_CONVPATH Handle = 0x87AF040E + SQLITE_E_CORRUPT_VTAB Handle = 0x87AF010B + SQLITE_E_READONLY_RECOVERY Handle = 0x87AF0108 + SQLITE_E_READONLY_CANTLOCK Handle = 0x87AF0208 + SQLITE_E_READONLY_ROLLBACK Handle = 0x87AF0308 + SQLITE_E_READONLY_DBMOVED Handle = 0x87AF0408 + SQLITE_E_ABORT_ROLLBACK Handle = 0x87AF0204 + SQLITE_E_CONSTRAINT_CHECK Handle = 0x87AF0113 + SQLITE_E_CONSTRAINT_COMMITHOOK Handle = 0x87AF0213 + SQLITE_E_CONSTRAINT_FOREIGNKEY Handle = 0x87AF0313 + SQLITE_E_CONSTRAINT_FUNCTION Handle = 0x87AF0413 + SQLITE_E_CONSTRAINT_NOTNULL Handle = 0x87AF0513 + SQLITE_E_CONSTRAINT_PRIMARYKEY Handle = 0x87AF0613 + SQLITE_E_CONSTRAINT_TRIGGER Handle = 0x87AF0713 + SQLITE_E_CONSTRAINT_UNIQUE Handle = 0x87AF0813 + SQLITE_E_CONSTRAINT_VTAB Handle = 0x87AF0913 + SQLITE_E_CONSTRAINT_ROWID Handle = 0x87AF0A13 + SQLITE_E_NOTICE_RECOVER_WAL Handle = 0x87AF011B + SQLITE_E_NOTICE_RECOVER_ROLLBACK Handle = 0x87AF021B + SQLITE_E_WARNING_AUTOINDEX Handle = 0x87AF011C + UTC_E_TOGGLE_TRACE_STARTED Handle = 0x87C51001 + UTC_E_ALTERNATIVE_TRACE_CANNOT_PREEMPT Handle = 0x87C51002 + UTC_E_AOT_NOT_RUNNING Handle = 0x87C51003 + UTC_E_SCRIPT_TYPE_INVALID Handle = 0x87C51004 + UTC_E_SCENARIODEF_NOT_FOUND Handle = 0x87C51005 + UTC_E_TRACEPROFILE_NOT_FOUND Handle = 0x87C51006 + UTC_E_FORWARDER_ALREADY_ENABLED Handle = 0x87C51007 + UTC_E_FORWARDER_ALREADY_DISABLED Handle = 0x87C51008 + UTC_E_EVENTLOG_ENTRY_MALFORMED Handle = 0x87C51009 + UTC_E_DIAGRULES_SCHEMAVERSION_MISMATCH Handle = 0x87C5100A + UTC_E_SCRIPT_TERMINATED Handle = 0x87C5100B + UTC_E_INVALID_CUSTOM_FILTER Handle = 0x87C5100C + UTC_E_TRACE_NOT_RUNNING Handle = 0x87C5100D + UTC_E_REESCALATED_TOO_QUICKLY Handle = 0x87C5100E + UTC_E_ESCALATION_ALREADY_RUNNING Handle = 0x87C5100F + UTC_E_PERFTRACK_ALREADY_TRACING Handle = 0x87C51010 + UTC_E_REACHED_MAX_ESCALATIONS Handle = 0x87C51011 + UTC_E_FORWARDER_PRODUCER_MISMATCH Handle = 0x87C51012 + UTC_E_INTENTIONAL_SCRIPT_FAILURE Handle = 0x87C51013 + UTC_E_SQM_INIT_FAILED Handle = 0x87C51014 + UTC_E_NO_WER_LOGGER_SUPPORTED Handle = 0x87C51015 + UTC_E_TRACERS_DONT_EXIST Handle = 0x87C51016 + UTC_E_WINRT_INIT_FAILED Handle = 0x87C51017 + UTC_E_SCENARIODEF_SCHEMAVERSION_MISMATCH Handle = 0x87C51018 + UTC_E_INVALID_FILTER Handle = 0x87C51019 + UTC_E_EXE_TERMINATED Handle = 0x87C5101A + UTC_E_ESCALATION_NOT_AUTHORIZED Handle = 0x87C5101B + UTC_E_SETUP_NOT_AUTHORIZED Handle = 0x87C5101C + UTC_E_CHILD_PROCESS_FAILED Handle = 0x87C5101D + UTC_E_COMMAND_LINE_NOT_AUTHORIZED Handle = 0x87C5101E + UTC_E_CANNOT_LOAD_SCENARIO_EDITOR_XML Handle = 0x87C5101F + UTC_E_ESCALATION_TIMED_OUT Handle = 0x87C51020 + UTC_E_SETUP_TIMED_OUT Handle = 0x87C51021 + UTC_E_TRIGGER_MISMATCH Handle = 0x87C51022 + UTC_E_TRIGGER_NOT_FOUND Handle = 0x87C51023 + UTC_E_SIF_NOT_SUPPORTED Handle = 0x87C51024 + UTC_E_DELAY_TERMINATED Handle = 0x87C51025 + UTC_E_DEVICE_TICKET_ERROR Handle = 0x87C51026 + UTC_E_TRACE_BUFFER_LIMIT_EXCEEDED Handle = 0x87C51027 + UTC_E_API_RESULT_UNAVAILABLE Handle = 0x87C51028 + UTC_E_RPC_TIMEOUT Handle = 0x87C51029 + UTC_E_RPC_WAIT_FAILED Handle = 0x87C5102A + UTC_E_API_BUSY Handle = 0x87C5102B + UTC_E_TRACE_MIN_DURATION_REQUIREMENT_NOT_MET Handle = 0x87C5102C + UTC_E_EXCLUSIVITY_NOT_AVAILABLE Handle = 0x87C5102D + UTC_E_GETFILE_FILE_PATH_NOT_APPROVED Handle = 0x87C5102E + UTC_E_ESCALATION_DIRECTORY_ALREADY_EXISTS Handle = 0x87C5102F + UTC_E_TIME_TRIGGER_ON_START_INVALID Handle = 0x87C51030 + UTC_E_TIME_TRIGGER_ONLY_VALID_ON_SINGLE_TRANSITION Handle = 0x87C51031 + UTC_E_TIME_TRIGGER_INVALID_TIME_RANGE Handle = 0x87C51032 + UTC_E_MULTIPLE_TIME_TRIGGER_ON_SINGLE_STATE Handle = 0x87C51033 + UTC_E_BINARY_MISSING Handle = 0x87C51034 + UTC_E_NETWORK_CAPTURE_NOT_ALLOWED Handle = 0x87C51035 + UTC_E_FAILED_TO_RESOLVE_CONTAINER_ID Handle = 0x87C51036 + UTC_E_UNABLE_TO_RESOLVE_SESSION Handle = 0x87C51037 + UTC_E_THROTTLED Handle = 0x87C51038 + UTC_E_UNAPPROVED_SCRIPT Handle = 0x87C51039 + UTC_E_SCRIPT_MISSING Handle = 0x87C5103A + UTC_E_SCENARIO_THROTTLED Handle = 0x87C5103B + UTC_E_API_NOT_SUPPORTED Handle = 0x87C5103C + UTC_E_GETFILE_EXTERNAL_PATH_NOT_APPROVED Handle = 0x87C5103D + UTC_E_TRY_GET_SCENARIO_TIMEOUT_EXCEEDED Handle = 0x87C5103E + UTC_E_CERT_REV_FAILED Handle = 0x87C5103F + UTC_E_FAILED_TO_START_NDISCAP Handle = 0x87C51040 + UTC_E_KERNELDUMP_LIMIT_REACHED Handle = 0x87C51041 + UTC_E_MISSING_AGGREGATE_EVENT_TAG Handle = 0x87C51042 + UTC_E_INVALID_AGGREGATION_STRUCT Handle = 0x87C51043 + UTC_E_ACTION_NOT_SUPPORTED_IN_DESTINATION Handle = 0x87C51044 + UTC_E_FILTER_MISSING_ATTRIBUTE Handle = 0x87C51045 + UTC_E_FILTER_INVALID_TYPE Handle = 0x87C51046 + UTC_E_FILTER_VARIABLE_NOT_FOUND Handle = 0x87C51047 + UTC_E_FILTER_FUNCTION_RESTRICTED Handle = 0x87C51048 + UTC_E_FILTER_VERSION_MISMATCH Handle = 0x87C51049 + UTC_E_FILTER_INVALID_FUNCTION Handle = 0x87C51050 + UTC_E_FILTER_INVALID_FUNCTION_PARAMS Handle = 0x87C51051 + UTC_E_FILTER_INVALID_COMMAND Handle = 0x87C51052 + UTC_E_FILTER_ILLEGAL_EVAL Handle = 0x87C51053 + UTC_E_TTTRACER_RETURNED_ERROR Handle = 0x87C51054 + UTC_E_AGENT_DIAGNOSTICS_TOO_LARGE Handle = 0x87C51055 + UTC_E_FAILED_TO_RECEIVE_AGENT_DIAGNOSTICS Handle = 0x87C51056 + UTC_E_SCENARIO_HAS_NO_ACTIONS Handle = 0x87C51057 + UTC_E_TTTRACER_STORAGE_FULL Handle = 0x87C51058 + UTC_E_INSUFFICIENT_SPACE_TO_START_TRACE Handle = 0x87C51059 + UTC_E_ESCALATION_CANCELLED_AT_SHUTDOWN Handle = 0x87C5105A + UTC_E_GETFILEINFOACTION_FILE_NOT_APPROVED Handle = 0x87C5105B + WINML_ERR_INVALID_DEVICE Handle = 0x88900001 + WINML_ERR_INVALID_BINDING Handle = 0x88900002 + WINML_ERR_VALUE_NOTFOUND Handle = 0x88900003 + WINML_ERR_SIZE_MISMATCH Handle = 0x88900004 +) diff --git a/src/cmd/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/src/cmd/vendor/golang.org/x/sys/windows/zsyscall_windows.go index e4b54e2d92..7060f4341d 100644 --- a/src/cmd/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/src/cmd/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -77,6 +77,7 @@ var ( procCreateFileW = modkernel32.NewProc("CreateFileW") procReadFile = modkernel32.NewProc("ReadFile") procWriteFile = modkernel32.NewProc("WriteFile") + procGetOverlappedResult = modkernel32.NewProc("GetOverlappedResult") procSetFilePointer = modkernel32.NewProc("SetFilePointer") procCloseHandle = modkernel32.NewProc("CloseHandle") procGetStdHandle = modkernel32.NewProc("GetStdHandle") @@ -85,6 +86,7 @@ var ( procFindNextFileW = modkernel32.NewProc("FindNextFileW") procFindClose = modkernel32.NewProc("FindClose") procGetFileInformationByHandle = modkernel32.NewProc("GetFileInformationByHandle") + procGetFileInformationByHandleEx = modkernel32.NewProc("GetFileInformationByHandleEx") procGetCurrentDirectoryW = modkernel32.NewProc("GetCurrentDirectoryW") procSetCurrentDirectoryW = modkernel32.NewProc("SetCurrentDirectoryW") procCreateDirectoryW = modkernel32.NewProc("CreateDirectoryW") @@ -246,12 +248,14 @@ var ( procGetLengthSid = modadvapi32.NewProc("GetLengthSid") procCopySid = modadvapi32.NewProc("CopySid") procAllocateAndInitializeSid = modadvapi32.NewProc("AllocateAndInitializeSid") + procCreateWellKnownSid = modadvapi32.NewProc("CreateWellKnownSid") procFreeSid = modadvapi32.NewProc("FreeSid") procEqualSid = modadvapi32.NewProc("EqualSid") procCheckTokenMembership = modadvapi32.NewProc("CheckTokenMembership") procOpenProcessToken = modadvapi32.NewProc("OpenProcessToken") procGetTokenInformation = modadvapi32.NewProc("GetTokenInformation") procGetUserProfileDirectoryW = moduserenv.NewProc("GetUserProfileDirectoryW") + procGetSystemDirectoryW = modkernel32.NewProc("GetSystemDirectoryW") ) func RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Handle, err error) { @@ -652,6 +656,24 @@ func WriteFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) return } +func GetOverlappedResult(handle Handle, overlapped *Overlapped, done *uint32, wait bool) (err error) { + var _p0 uint32 + if wait { + _p0 = 1 + } else { + _p0 = 0 + } + r1, _, e1 := syscall.Syscall6(procGetOverlappedResult.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(done)), uintptr(_p0), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + func SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) { r0, _, e1 := syscall.Syscall6(procSetFilePointer.Addr(), 4, uintptr(handle), uintptr(lowoffset), uintptr(unsafe.Pointer(highoffsetptr)), uintptr(whence), 0, 0) newlowoffset = uint32(r0) @@ -751,6 +773,18 @@ func GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (e return } +func GetFileInformationByHandleEx(handle Handle, class uint32, outBuffer *byte, outBufferLen uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetFileInformationByHandleEx.Addr(), 4, uintptr(handle), uintptr(class), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferLen), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + func GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) { r0, _, e1 := syscall.Syscall(procGetCurrentDirectoryW.Addr(), 2, uintptr(buflen), uintptr(unsafe.Pointer(buf)), 0) n = uint32(r0) @@ -2653,6 +2687,18 @@ func AllocateAndInitializeSid(identAuth *SidIdentifierAuthority, subAuth byte, s return } +func createWellKnownSid(sidType WELL_KNOWN_SID_TYPE, domainSid *SID, sid *SID, sizeSid *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procCreateWellKnownSid.Addr(), 4, uintptr(sidType), uintptr(unsafe.Pointer(domainSid)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sizeSid)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + func FreeSid(sid *SID) (err error) { r1, _, e1 := syscall.Syscall(procFreeSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) if r1 != 0 { @@ -2718,3 +2764,16 @@ func GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) { } return } + +func getSystemDirectory(dir *uint16, dirLen uint32) (len uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetSystemDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(dir)), uintptr(dirLen), 0) + len = uint32(r0) + if len == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} diff --git a/src/cmd/vendor/golang.org/x/tools/AUTHORS b/src/cmd/vendor/golang.org/x/tools/AUTHORS new file mode 100644 index 0000000000..15167cd746 --- /dev/null +++ b/src/cmd/vendor/golang.org/x/tools/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at http://tip.golang.org/AUTHORS. diff --git a/src/cmd/vendor/golang.org/x/tools/CONTRIBUTORS b/src/cmd/vendor/golang.org/x/tools/CONTRIBUTORS new file mode 100644 index 0000000000..1c4577e968 --- /dev/null +++ b/src/cmd/vendor/golang.org/x/tools/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/analysis.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/analysis.go index 21baa02a8d..8eb7316259 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/analysis.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/analysis.go @@ -87,6 +87,7 @@ type Pass struct { OtherFiles []string // names of non-Go files of this package Pkg *types.Package // type information about the package TypesInfo *types.Info // type information about the syntax trees + TypesSizes types.Sizes // function for computing sizes of types // Report reports a Diagnostic, a finding about a specific location // in the analyzed source code such as a potential mistake. @@ -127,10 +128,32 @@ type Pass struct { // See comments for ExportObjectFact. ExportPackageFact func(fact Fact) + // AllPackageFacts returns a new slice containing all package facts in unspecified order. + // WARNING: This is an experimental API and may change in the future. + AllPackageFacts func() []PackageFact + + // AllObjectFacts returns a new slice containing all object facts in unspecified order. + // WARNING: This is an experimental API and may change in the future. + AllObjectFacts func() []ObjectFact + /* Further fields may be added in future. */ // For example, suggested or applied refactorings. } +// PackageFact is a package together with an associated fact. +// WARNING: This is an experimental API and may change in the future. +type PackageFact struct { + Package *types.Package + Fact Fact +} + +// ObjectFact is an object together with an associated fact. +// WARNING: This is an experimental API and may change in the future. +type ObjectFact struct { + Object types.Object + Fact Fact +} + // Reportf is a helper function that reports a Diagnostic using the // specified position and formatted error message. func (pass *Pass) Reportf(pos token.Pos, format string, args ...interface{}) { diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/doc.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/doc.go index f925849ab5..2d44b0458a 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/doc.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/doc.go @@ -246,7 +246,7 @@ An Analyzer that uses facts must declare their types: var Analyzer = &analysis.Analyzer{ Name: "printf", - FactTypes: []reflect.Type{reflect.TypeOf(new(isWrapper))}, + FactTypes: []analysis.Fact{new(isWrapper)}, ... } diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/internal/analysisflags/flags.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/internal/analysisflags/flags.go index 729ac3b417..062d062487 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/internal/analysisflags/flags.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/internal/analysisflags/flags.go @@ -8,6 +8,7 @@ package analysisflags import ( "crypto/sha256" + "encoding/gob" "encoding/json" "flag" "fmt" @@ -32,6 +33,14 @@ var ( // including (in multi mode) a flag named after the analyzer, // parses the flags, then filters and returns the list of // analyzers enabled by flags. +// +// The result is intended to be passed to unitchecker.Run or checker.Run. +// Use in unitchecker.Run will gob.Register all fact types for the returned +// graph of analyzers but of course not the ones only reachable from +// dropped analyzers. To avoid inconsistency about which gob types are +// registered from run to run, Parse itself gob.Registers all the facts +// only reachable from dropped analyzers. +// This is not a particularly elegant API, but this is an internal package. func Parse(analyzers []*analysis.Analyzer, multi bool) []*analysis.Analyzer { // Connect each analysis flag to the command line as -analysis.flag. enabled := make(map[*analysis.Analyzer]*triState) @@ -88,6 +97,8 @@ func Parse(analyzers []*analysis.Analyzer, multi bool) []*analysis.Analyzer { os.Exit(0) } + everything := expand(analyzers) + // If any -NAME flag is true, run only those analyzers. Otherwise, // if any -NAME flag is false, run all but those analyzers. if multi { @@ -119,9 +130,35 @@ func Parse(analyzers []*analysis.Analyzer, multi bool) []*analysis.Analyzer { } } + // Register fact types of skipped analyzers + // in case we encounter them in imported files. + kept := expand(analyzers) + for a := range everything { + if !kept[a] { + for _, f := range a.FactTypes { + gob.Register(f) + } + } + } + return analyzers } +func expand(analyzers []*analysis.Analyzer) map[*analysis.Analyzer]bool { + seen := make(map[*analysis.Analyzer]bool) + var visitAll func([]*analysis.Analyzer) + visitAll = func(analyzers []*analysis.Analyzer) { + for _, a := range analyzers { + if !seen[a] { + seen[a] = true + visitAll(a.Requires) + } + } + } + visitAll(analyzers) + return seen +} + func printFlags() { type jsonFlag struct { Name string @@ -152,12 +189,13 @@ func printFlags() { // addVersionFlag registers a -V flag that, if set, // prints the executable version and exits 0. // -// It is a variable not a function to permit easy -// overriding in the copy vendored in $GOROOT/src/cmd/vet: -// -// func init() { addVersionFlag = objabi.AddVersionFlag } -var addVersionFlag = func() { - flag.Var(versionFlag{}, "V", "print version and exit") +// If the -V flag already exists — for example, because it was already +// registered by a call to cmd/internal/objabi.AddVersionFlag — then +// addVersionFlag does nothing. +func addVersionFlag() { + if flag.Lookup("V") == nil { + flag.Var(versionFlag{}, "V", "print version and exit") + } } // versionFlag minimally complies with the -V protocol required by "go vet". diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/internal/analysisflags/help.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/internal/analysisflags/help.go index 043b97896d..c5a70f3b7d 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/internal/analysisflags/help.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/internal/analysisflags/help.go @@ -4,6 +4,7 @@ import ( "flag" "fmt" "log" + "os" "sort" "strings" @@ -47,6 +48,7 @@ func Help(progname string, analyzers []*analysis.Analyzer, args []string) { fs.Var(f.Value, f.Name, f.Usage) } }) + fs.SetOutput(os.Stdout) fs.PrintDefaults() fmt.Printf("\nTo see details and flags of a specific analyzer, run '%s help name'.\n", progname) @@ -75,6 +77,7 @@ outer: } fs.Var(f.Value, a.Name+"."+f.Name, f.Usage) }) + fs.SetOutput(os.Stdout) fs.PrintDefaults() if len(paras) > 1 { diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/internal/analysisflags/patch.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/internal/analysisflags/patch.go deleted file mode 100644 index 8f9741055c..0000000000 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/internal/analysisflags/patch.go +++ /dev/null @@ -1,7 +0,0 @@ -package analysisflags - -import "cmd/internal/objabi" - -// This additional file changes the behavior of the vendored code. - -func init() { addVersionFlag = objabi.AddVersionFlag } diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/asmdecl/asmdecl.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/asmdecl/asmdecl.go index dce1ef7bd5..d41c4e97e3 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/asmdecl/asmdecl.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/asmdecl/asmdecl.go @@ -114,7 +114,8 @@ func init() { // library we cannot assume types.SizesFor is consistent with arches. // For now, assume 64-bit norms and print a warning. // But this warning should really be deferred until we attempt to use - // arch, which is very unlikely. + // arch, which is very unlikely. Better would be + // to defer size computation until we have Pass.TypesSizes. arch.sizes = types.SizesFor("gc", "amd64") log.Printf("unknown architecture %s", arch.name) } @@ -129,7 +130,7 @@ var ( asmPlusBuild = re(`//\s+\+build\s+([^\n]+)`) asmTEXT = re(`\bTEXT\b(.*)·([^\(]+)\(SB\)(?:\s*,\s*([0-9A-Z|+()]+))?(?:\s*,\s*\$(-?[0-9]+)(?:-([0-9]+))?)?`) asmDATA = re(`\b(DATA|GLOBL)\b`) - asmNamedFP = re(`([a-zA-Z0-9_\xFF-\x{10FFFF}]+)(?:\+([0-9]+))\(FP\)`) + asmNamedFP = re(`\$?([a-zA-Z0-9_\xFF-\x{10FFFF}]+)(?:\+([0-9]+))\(FP\)`) asmUnnamedFP = re(`[^+\-0-9](([0-9]+)\(FP\))`) asmSP = re(`[^+\-0-9](([0-9]+)\(([A-Z0-9]+)\))`) asmOpcode = re(`^\s*(?:[A-Z0-9a-z_]+:)?\s*([A-Z]+)\s*([^,]*)(?:,\s*(.*))?`) @@ -183,6 +184,7 @@ Files: fnName string localSize, argSize int wroteSP bool + noframe bool haveRetArg bool retLine []int ) @@ -230,6 +232,11 @@ Files: } } + // Ignore comments and commented-out code. + if i := strings.Index(line, "//"); i >= 0 { + line = line[:i] + } + if m := asmTEXT.FindStringSubmatch(line); m != nil { flushRet() if arch == "" { @@ -253,7 +260,7 @@ Files: // identifiers to represent the directory separator. pkgPath = strings.Replace(pkgPath, "∕", "/", -1) if pkgPath != pass.Pkg.Path() { - log.Printf("%s:%d: [%s] cannot check cross-package assembly function: %s is in package %s", fname, lineno, arch, fnName, pkgPath) + // log.Printf("%s:%d: [%s] cannot check cross-package assembly function: %s is in package %s", fname, lineno, arch, fnName, pkgPath) fn = nil fnName = "" continue @@ -274,7 +281,8 @@ Files: localSize += archDef.intSize } argSize, _ = strconv.Atoi(m[5]) - if fn == nil && !strings.Contains(fnName, "<>") { + noframe = strings.Contains(flag, "NOFRAME") + if fn == nil && !strings.Contains(fnName, "<>") && !noframe { badf("function %s missing Go declaration", fnName) } wroteSP = false @@ -304,13 +312,18 @@ Files: continue } - if strings.Contains(line, ", "+archDef.stack) || strings.Contains(line, ",\t"+archDef.stack) { + if strings.Contains(line, ", "+archDef.stack) || strings.Contains(line, ",\t"+archDef.stack) || strings.Contains(line, "NOP "+archDef.stack) || strings.Contains(line, "NOP\t"+archDef.stack) { wroteSP = true continue } + if arch == "wasm" && strings.Contains(line, "CallImport") { + // CallImport is a call out to magic that can write the result. + haveRetArg = true + } + for _, m := range asmSP.FindAllStringSubmatch(line, -1) { - if m[3] != archDef.stack || wroteSP { + if m[3] != archDef.stack || wroteSP || noframe { continue } off := 0 @@ -370,7 +383,7 @@ Files: } continue } - asmCheckVar(badf, fn, line, m[0], off, v) + asmCheckVar(badf, fn, line, m[0], off, v, archDef) } } flushRet() @@ -588,7 +601,7 @@ func asmParseDecl(pass *analysis.Pass, decl *ast.FuncDecl) map[string]*asmFunc { } // asmCheckVar checks a single variable reference. -func asmCheckVar(badf func(string, ...interface{}), fn *asmFunc, line, expr string, off int, v *asmVar) { +func asmCheckVar(badf func(string, ...interface{}), fn *asmFunc, line, expr string, off int, v *asmVar, archDef *asmArch) { m := asmOpcode.FindStringSubmatch(line) if m == nil { if !strings.HasPrefix(strings.TrimSpace(line), "//") { @@ -597,6 +610,8 @@ func asmCheckVar(badf func(string, ...interface{}), fn *asmFunc, line, expr stri return } + addr := strings.HasPrefix(expr, "$") + // Determine operand sizes from instruction. // Typically the suffix suffices, but there are exceptions. var src, dst, kind asmKind @@ -616,10 +631,13 @@ func asmCheckVar(badf func(string, ...interface{}), fn *asmFunc, line, expr stri // They just take the address of it. case "386.LEAL": dst = 4 + addr = true case "amd64.LEAQ": dst = 8 + addr = true case "amd64p32.LEAL": dst = 4 + addr = true default: switch fn.arch.name { case "386", "amd64": @@ -724,6 +742,11 @@ func asmCheckVar(badf func(string, ...interface{}), fn *asmFunc, line, expr stri vs = v.inner[0].size vt = v.inner[0].typ } + if addr { + vk = asmKind(archDef.ptrSize) + vs = archDef.ptrSize + vt = "address" + } if off != v.off { var inner bytes.Buffer diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/bools/bools.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/bools/bools.go index 833c9d7aae..c82d3675b9 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/bools/bools.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/bools/bools.go @@ -30,8 +30,13 @@ func run(pass *analysis.Pass) (interface{}, error) { nodeFilter := []ast.Node{ (*ast.BinaryExpr)(nil), } + seen := make(map[*ast.BinaryExpr]bool) inspect.Preorder(nodeFilter, func(n ast.Node) { e := n.(*ast.BinaryExpr) + if seen[e] { + // Already processed as a subexpression of an earlier node. + return + } var op boolOp switch e.Op { @@ -43,10 +48,7 @@ func run(pass *analysis.Pass) (interface{}, error) { return } - // TODO(adonovan): this reports n(n-1)/2 errors for an - // expression e||...||e of depth n. Fix. - // See https://golang.org/issue/28086. - comm := op.commutativeSets(pass.TypesInfo, e) + comm := op.commutativeSets(pass.TypesInfo, e, seen) for _, exprs := range comm { op.checkRedundant(pass, exprs) op.checkSuspect(pass, exprs) @@ -70,8 +72,9 @@ var ( // expressions in e that are connected by op. // For example, given 'a || b || f() || c || d' with the or op, // commutativeSets returns {{b, a}, {d, c}}. -func (op boolOp) commutativeSets(info *types.Info, e *ast.BinaryExpr) [][]ast.Expr { - exprs := op.split(e) +// commutativeSets adds any expanded BinaryExprs to seen. +func (op boolOp) commutativeSets(info *types.Info, e *ast.BinaryExpr, seen map[*ast.BinaryExpr]bool) [][]ast.Expr { + exprs := op.split(e, seen) // Partition the slice of expressions into commutative sets. i := 0 @@ -188,11 +191,13 @@ func hasSideEffects(info *types.Info, e ast.Expr) bool { // split returns a slice of all subexpressions in e that are connected by op. // For example, given 'a || (b || c) || d' with the or op, // split returns []{d, c, b, a}. -func (op boolOp) split(e ast.Expr) (exprs []ast.Expr) { +// seen[e] is already true; any newly processed exprs are added to seen. +func (op boolOp) split(e ast.Expr, seen map[*ast.BinaryExpr]bool) (exprs []ast.Expr) { for { e = unparen(e) if b, ok := e.(*ast.BinaryExpr); ok && b.Op == op.tok { - exprs = append(exprs, op.split(b.Y)...) + seen[b] = true + exprs = append(exprs, op.split(b.Y, seen)...) e = b.X } else { exprs = append(exprs, e) diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/cgocall/cgocall.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/cgocall/cgocall.go index 993f1ce3c4..1e4fac8595 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/cgocall/cgocall.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/cgocall/cgocall.go @@ -9,7 +9,6 @@ package cgocall import ( "fmt" "go/ast" - "go/build" "go/format" "go/parser" "go/token" @@ -45,7 +44,7 @@ func run(pass *analysis.Pass) (interface{}, error) { return nil, nil // doesn't use cgo } - cgofiles, info, err := typeCheckCgoSourceFiles(pass.Fset, pass.Pkg, pass.Files, pass.TypesInfo) + cgofiles, info, err := typeCheckCgoSourceFiles(pass.Fset, pass.Pkg, pass.Files, pass.TypesInfo, pass.TypesSizes) if err != nil { return nil, err } @@ -171,7 +170,7 @@ func checkCgo(fset *token.FileSet, f *ast.File, info *types.Info, reportf func(t // limited ourselves here to preserving function bodies and initializer // expressions since that is all that the cgocall analyzer needs. // -func typeCheckCgoSourceFiles(fset *token.FileSet, pkg *types.Package, files []*ast.File, info *types.Info) ([]*ast.File, *types.Info, error) { +func typeCheckCgoSourceFiles(fset *token.FileSet, pkg *types.Package, files []*ast.File, info *types.Info, sizes types.Sizes) ([]*ast.File, *types.Info, error) { const thispkg = "·this·" // Which files are cgo files? @@ -269,8 +268,7 @@ func typeCheckCgoSourceFiles(fset *token.FileSet, pkg *types.Package, files []*a Importer: importerFunc(func(path string) (*types.Package, error) { return importMap[path], nil }), - // TODO(adonovan): Sizes should probably be provided by analysis.Pass. - Sizes: types.SizesFor("gc", build.Default.GOARCH), + Sizes: sizes, Error: func(error) {}, // ignore errors (e.g. unused import) } diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/composite/composite.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/composite/composite.go index 9cca7781d0..2abe7c6d51 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/composite/composite.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/composite/composite.go @@ -21,7 +21,16 @@ const Doc = `check for unkeyed composite literals This analyzer reports a diagnostic for composite literals of struct types imported from another package that do not use the field-keyed syntax. Such literals are fragile because the addition of a new field -(even if unexported) to the struct will cause compilation to fail.` +(even if unexported) to the struct will cause compilation to fail. + +As an example, + + err = &net.DNSConfigError{err} + +should be replaced by: + + err = &net.DNSConfigError{Err: err} +` var Analyzer = &analysis.Analyzer{ Name: "composites", diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/inspect/inspect.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/inspect/inspect.go index bd06549984..8213f63313 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/inspect/inspect.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/inspect/inspect.go @@ -8,7 +8,11 @@ // // Example of use in another analysis: // -// import "golang.org/x/tools/go/analysis/passes/inspect" +// import ( +// "golang.org/x/tools/go/analysis" +// "golang.org/x/tools/go/analysis/passes/inspect" +// "golang.org/x/tools/go/ast/inspector" +// ) // // var Analyzer = &analysis.Analyzer{ // ... diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/lostcancel/lostcancel.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/lostcancel/lostcancel.go index b5161836a5..e88cf57d8f 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/lostcancel/lostcancel.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/lostcancel/lostcancel.go @@ -45,6 +45,8 @@ var contextPackage = "context" // control-flow path from the call to a return statement and that path // does not "use" the cancel function. Any reference to the variable // counts as a use, even within a nested function literal. +// If the variable's scope is larger than the function +// containing the assignment, we assume that other uses exist. // // checkLostCancel analyzes a single named or literal function. func run(pass *analysis.Pass) (interface{}, error) { @@ -66,6 +68,15 @@ func run(pass *analysis.Pass) (interface{}, error) { } func runFunc(pass *analysis.Pass, node ast.Node) { + // Find scope of function node + var funcScope *types.Scope + switch v := node.(type) { + case *ast.FuncLit: + funcScope = pass.TypesInfo.Scopes[v.Type] + case *ast.FuncDecl: + funcScope = pass.TypesInfo.Scopes[v.Type] + } + // Maps each cancel variable to its defining ValueSpec/AssignStmt. cancelvars := make(map[*types.Var]ast.Node) @@ -114,7 +125,11 @@ func runFunc(pass *analysis.Pass, node ast.Node) { "the cancel function returned by context.%s should be called, not discarded, to avoid a context leak", n.(*ast.SelectorExpr).Sel.Name) } else if v, ok := pass.TypesInfo.Uses[id].(*types.Var); ok { - cancelvars[v] = stmt + // If the cancel variable is defined outside function scope, + // do not analyze it. + if funcScope.Contains(v.Pos()) { + cancelvars[v] = stmt + } } else if v, ok := pass.TypesInfo.Defs[id].(*types.Var); ok { cancelvars[v] = stmt } diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/pkgfact/pkgfact.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/pkgfact/pkgfact.go deleted file mode 100644 index e053086732..0000000000 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/pkgfact/pkgfact.go +++ /dev/null @@ -1,127 +0,0 @@ -// 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. - -// The pkgfact package is a demonstration and test of the package fact -// mechanism. -// -// The output of the pkgfact analysis is a set of key/values pairs -// gathered from the analyzed package and its imported dependencies. -// Each key/value pair comes from a top-level constant declaration -// whose name starts and ends with "_". For example: -// -// package p -// -// const _greeting_ = "hello" -// const _audience_ = "world" -// -// the pkgfact analysis output for package p would be: -// -// {"greeting": "hello", "audience": "world"}. -// -// In addition, the analysis reports a diagnostic at each import -// showing which key/value pairs it contributes. -package pkgfact - -import ( - "fmt" - "go/ast" - "go/token" - "go/types" - "reflect" - "sort" - "strings" - - "golang.org/x/tools/go/analysis" -) - -var Analyzer = &analysis.Analyzer{ - Name: "pkgfact", - Doc: "gather name/value pairs from constant declarations", - Run: run, - FactTypes: []analysis.Fact{new(pairsFact)}, - ResultType: reflect.TypeOf(map[string]string{}), -} - -// A pairsFact is a package-level fact that records -// an set of key=value strings accumulated from constant -// declarations in this package and its dependencies. -// Elements are ordered by keys, which are unique. -type pairsFact []string - -func (f *pairsFact) AFact() {} -func (f *pairsFact) String() string { return "pairs(" + strings.Join(*f, ", ") + ")" } - -func run(pass *analysis.Pass) (interface{}, error) { - result := make(map[string]string) - - // At each import, print the fact from the imported - // package and accumulate its information into the result. - // (Warning: accumulation leads to quadratic growth of work.) - doImport := func(spec *ast.ImportSpec) { - pkg := imported(pass.TypesInfo, spec) - var fact pairsFact - if pass.ImportPackageFact(pkg, &fact) { - for _, pair := range fact { - eq := strings.IndexByte(pair, '=') - result[pair[:eq]] = pair[1+eq:] - } - pass.Reportf(spec.Pos(), "%s", strings.Join(fact, " ")) - } - } - - // At each "const _name_ = value", add a fact into env. - doConst := func(spec *ast.ValueSpec) { - if len(spec.Names) == len(spec.Values) { - for i := range spec.Names { - name := spec.Names[i].Name - if strings.HasPrefix(name, "_") && strings.HasSuffix(name, "_") { - - if key := strings.Trim(name, "_"); key != "" { - value := pass.TypesInfo.Types[spec.Values[i]].Value.String() - result[key] = value - } - } - } - } - } - - for _, f := range pass.Files { - for _, decl := range f.Decls { - if decl, ok := decl.(*ast.GenDecl); ok { - for _, spec := range decl.Specs { - switch decl.Tok { - case token.IMPORT: - doImport(spec.(*ast.ImportSpec)) - case token.CONST: - doConst(spec.(*ast.ValueSpec)) - } - } - } - } - } - - // Sort/deduplicate the result and save it as a package fact. - keys := make([]string, 0, len(result)) - for key := range result { - keys = append(keys, key) - } - sort.Strings(keys) - var fact pairsFact - for _, key := range keys { - fact = append(fact, fmt.Sprintf("%s=%s", key, result[key])) - } - if len(fact) > 0 { - pass.ExportPackageFact(&fact) - } - - return result, nil -} - -func imported(info *types.Info, spec *ast.ImportSpec) *types.Package { - obj, ok := info.Implicits[spec] - if !ok { - obj = info.Defs[spec.Name] // renaming import - } - return obj.(*types.PkgName).Imported() -} diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/printf/printf.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/printf/printf.go index c0265aafee..f59e95dc21 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/printf/printf.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/printf/printf.go @@ -453,15 +453,23 @@ func printfNameAndKind(pass *analysis.Pass, call *ast.CallExpr) (fn *types.Func, } // isFormatter reports whether t satisfies fmt.Formatter. -// Unlike fmt.Stringer, it's impossible to satisfy fmt.Formatter without importing fmt. -func isFormatter(pass *analysis.Pass, t types.Type) bool { - for _, imp := range pass.Pkg.Imports() { - if imp.Path() == "fmt" { - formatter := imp.Scope().Lookup("Formatter").Type().Underlying().(*types.Interface) - return types.Implements(t, formatter) - } +// The only interface method to look for is "Format(State, rune)". +func isFormatter(typ types.Type) bool { + obj, _, _ := types.LookupFieldOrMethod(typ, false, nil, "Format") + fn, ok := obj.(*types.Func) + if !ok { + return false } - return false + sig := fn.Type().(*types.Signature) + return sig.Params().Len() == 2 && + sig.Results().Len() == 0 && + isNamed(sig.Params().At(0).Type(), "fmt", "State") && + types.Identical(sig.Params().At(1).Type(), types.Typ[types.Rune]) +} + +func isNamed(T types.Type, pkgpath, name string) bool { + named, ok := T.(*types.Named) + return ok && named.Obj().Pkg().Path() == pkgpath && named.Obj().Name() == name } // formatState holds the parsed representation of a printf directive such as "%3.*[4]d". @@ -731,6 +739,7 @@ var printVerbs = []printVerb{ {'T', "-", anyType}, {'U', "-#", argRune | argInt}, {'v', allFlags, anyType}, + {'w', noFlag, anyType}, {'x', sharpNumFlag, argRune | argInt | argString | argPointer}, {'X', sharpNumFlag, argRune | argInt | argString | argPointer}, } @@ -753,7 +762,7 @@ func okPrintfArg(pass *analysis.Pass, call *ast.CallExpr, state *formatState) (o formatter := false if state.argNum < len(call.Args) { if tv, ok := pass.TypesInfo.Types[call.Args[state.argNum]]; ok { - formatter = isFormatter(pass, tv.Type) + formatter = isFormatter(tv.Type) } } @@ -831,7 +840,7 @@ func recursiveStringer(pass *analysis.Pass, e ast.Expr) bool { typ := pass.TypesInfo.Types[e].Type // It's unlikely to be a recursive stringer if it has a Format method. - if isFormatter(pass, typ) { + if isFormatter(typ) { return false } @@ -847,20 +856,28 @@ func recursiveStringer(pass *analysis.Pass, e ast.Expr) bool { return false } - // Is it the receiver r, or &r? - recv := stringMethod.Type().(*types.Signature).Recv() - if recv == nil { + sig := stringMethod.Type().(*types.Signature) + if !isStringer(sig) { return false } + + // Is it the receiver r, or &r? if u, ok := e.(*ast.UnaryExpr); ok && u.Op == token.AND { e = u.X // strip off & from &r } if id, ok := e.(*ast.Ident); ok { - return pass.TypesInfo.Uses[id] == recv + return pass.TypesInfo.Uses[id] == sig.Recv() } return false } +// isStringer reports whether the method signature matches the String() definition in fmt.Stringer. +func isStringer(sig *types.Signature) bool { + return sig.Params().Len() == 0 && + sig.Results().Len() == 1 && + sig.Results().At(0).Type() == types.Typ[types.String] +} + // isFunctionValue reports whether the expression is a function as opposed to a function call. // It is almost always a mistake to print a function value. func isFunctionValue(pass *analysis.Pass, e ast.Expr) bool { diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/printf/types.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/printf/types.go index e8810464cd..12286fd5df 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/printf/types.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/printf/types.go @@ -2,7 +2,6 @@ package printf import ( "go/ast" - "go/build" "go/types" "golang.org/x/tools/go/analysis" @@ -39,7 +38,7 @@ func matchArgTypeInternal(pass *analysis.Pass, t printfArgType, typ types.Type, } } // If the type implements fmt.Formatter, we have nothing to check. - if isFormatter(pass, typ) { + if isFormatter(typ) { return true } // If we can use a string, might arg (dynamically) implement the Stringer or Error interface? @@ -235,5 +234,3 @@ func matchStructArgType(pass *analysis.Pass, t printfArgType, typ *types.Struct, } return true } - -var archSizes = types.SizesFor("gc", build.Default.GOARCH) diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/shift/shift.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/shift/shift.go index 56b150b2b1..39f54573c9 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/shift/shift.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/shift/shift.go @@ -12,10 +12,8 @@ package shift import ( "go/ast" - "go/build" "go/constant" "go/token" - "go/types" "golang.org/x/tools/go/analysis" "golang.org/x/tools/go/analysis/passes/inspect" @@ -93,36 +91,9 @@ func checkLongShift(pass *analysis.Pass, node ast.Node, x, y ast.Expr) { if t == nil { return } - b, ok := t.Underlying().(*types.Basic) - if !ok { - return - } - var size int64 - switch b.Kind() { - case types.Uint8, types.Int8: - size = 8 - case types.Uint16, types.Int16: - size = 16 - case types.Uint32, types.Int32: - size = 32 - case types.Uint64, types.Int64: - size = 64 - case types.Int, types.Uint: - size = uintBitSize - case types.Uintptr: - size = uintptrBitSize - default: - return - } + size := 8 * pass.TypesSizes.Sizeof(t) if amt >= size { ident := analysisutil.Format(pass.Fset, x) pass.Reportf(node.Pos(), "%s (%d bits) too small for shift of %d", ident, size, amt) } } - -var ( - uintBitSize = 8 * archSizes.Sizeof(types.Typ[types.Uint]) - uintptrBitSize = 8 * archSizes.Sizeof(types.Typ[types.Uintptr]) -) - -var archSizes = types.SizesFor("gc", build.Default.GOARCH) diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/stdmethods/stdmethods.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/stdmethods/stdmethods.go index 8349511224..bc1db7e4c2 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/stdmethods/stdmethods.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/stdmethods/stdmethods.go @@ -8,7 +8,6 @@ package stdmethods import ( "go/ast" - "go/token" "go/types" "strings" @@ -117,6 +116,13 @@ func canonicalMethod(pass *analysis.Pass, id *ast.Ident) { args := sign.Params() results := sign.Results() + // Special case: WriteTo with more than one argument, + // not trying at all to implement io.WriterTo, + // comes up often enough to skip. + if id.Name == "WriteTo" && args.Len() > 1 { + return + } + // Do the =s (if any) all match? if !matchParams(pass, expect.args, args, "=") || !matchParams(pass, expect.results, results, "=") { return @@ -163,7 +169,7 @@ func matchParams(pass *analysis.Pass, expect []string, actual *types.Tuple, pref if i >= actual.Len() { return false } - if !matchParamType(pass.Fset, pass.Pkg, x, actual.At(i).Type()) { + if !matchParamType(x, actual.At(i).Type()) { return false } } @@ -174,13 +180,8 @@ func matchParams(pass *analysis.Pass, expect []string, actual *types.Tuple, pref } // Does this one type match? -func matchParamType(fset *token.FileSet, pkg *types.Package, expect string, actual types.Type) bool { +func matchParamType(expect string, actual types.Type) bool { expect = strings.TrimPrefix(expect, "=") - // Strip package name if we're in that package. - if n := len(pkg.Name()); len(expect) > n && expect[:n] == pkg.Name() && expect[n] == '.' { - expect = expect[n+1:] - } - // Overkill but easy. return typeString(actual) == expect } diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/structtag/structtag.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/structtag/structtag.go index 2b67c376ba..bcdb042920 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/structtag/structtag.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/structtag/structtag.go @@ -56,6 +56,13 @@ var checkTagSpaces = map[string]bool{"json": true, "xml": true, "asn1": true} // checkCanonicalFieldTag checks a single struct field tag. func checkCanonicalFieldTag(pass *analysis.Pass, field *types.Var, tag string, seen *map[[2]string]token.Pos) { + switch pass.Pkg.Path() { + case "encoding/json", "encoding/xml": + // These packages know how to use their own APIs. + // Sometimes they are testing what happens to incorrect programs. + return + } + for _, key := range checkTagDups { checkTagDuplicates(pass, tag, key, field, field, seen) } diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/tests/tests.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/tests/tests.go index 35b0a3e7cc..5dd060800c 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/tests/tests.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/tests/tests.go @@ -84,23 +84,25 @@ func isTestParam(typ ast.Expr, wantType string) bool { return false } -func lookup(pkg *types.Package, name string) types.Object { +func lookup(pkg *types.Package, name string) []types.Object { if o := pkg.Scope().Lookup(name); o != nil { - return o + return []types.Object{o} } - // If this package is ".../foo_test" and it imports a package - // ".../foo", try looking in the latter package. - // This heuristic should work even on build systems that do not - // record any special link between the packages. - if basePath := strings.TrimSuffix(pkg.Path(), "_test"); basePath != pkg.Path() { - for _, imp := range pkg.Imports() { - if imp.Path() == basePath { - return imp.Scope().Lookup(name) - } + var ret []types.Object + // Search through the imports to see if any of them define name. + // It's hard to tell in general which package is being tested, so + // for the purposes of the analysis, allow the object to appear + // in any of the imports. This guarantees there are no false positives + // because the example needs to use the object so it must be defined + // in the package or one if its imports. On the other hand, false + // negatives are possible, but should be rare. + for _, imp := range pkg.Imports() { + if obj := imp.Scope().Lookup(name); obj != nil { + ret = append(ret, obj) } } - return nil + return ret } func checkExample(pass *analysis.Pass, fn *ast.FuncDecl) { @@ -121,9 +123,9 @@ func checkExample(pass *analysis.Pass, fn *ast.FuncDecl) { exName = strings.TrimPrefix(fnName, "Example") elems = strings.SplitN(exName, "_", 3) ident = elems[0] - obj = lookup(pass.Pkg, ident) + objs = lookup(pass.Pkg, ident) ) - if ident != "" && obj == nil { + if ident != "" && len(objs) == 0 { // Check ExampleFoo and ExampleBadFoo. pass.Reportf(fn.Pos(), "%s refers to unknown identifier: %s", fnName, ident) // Abort since obj is absent and no subsequent checks can be performed. @@ -145,7 +147,15 @@ func checkExample(pass *analysis.Pass, fn *ast.FuncDecl) { mmbr := elems[1] if !isExampleSuffix(mmbr) { // Check ExampleFoo_Method and ExampleFoo_BadMethod. - if obj, _, _ := types.LookupFieldOrMethod(obj.Type(), true, obj.Pkg(), mmbr); obj == nil { + found := false + // Check if Foo.Method exists in this package or its imports. + for _, obj := range objs { + if obj, _, _ := types.LookupFieldOrMethod(obj.Type(), true, obj.Pkg(), mmbr); obj != nil { + found = true + break + } + } + if !found { pass.Reportf(fn.Pos(), "%s refers to unknown field or method: %s.%s", fnName, ident, mmbr) } } diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/unmarshal/unmarshal.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/unmarshal/unmarshal.go index 6cf4358ab9..d019ecef15 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/unmarshal/unmarshal.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/unmarshal/unmarshal.go @@ -29,6 +29,13 @@ var Analyzer = &analysis.Analyzer{ } func run(pass *analysis.Pass) (interface{}, error) { + switch pass.Pkg.Path() { + case "encoding/gob", "encoding/json", "encoding/xml": + // These packages know how to use their own APIs. + // Sometimes they are testing what happens to incorrect programs. + return nil, nil + } + inspect := pass.ResultOf[inspect.Analyzer].(*inspector.Inspector) nodeFilter := []ast.Node{ diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/unitchecker/main.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/unitchecker/main.go deleted file mode 100644 index 844e8f3dac..0000000000 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/unitchecker/main.go +++ /dev/null @@ -1,64 +0,0 @@ -// +build ignore - -// This file provides an example command for static checkers -// conforming to the golang.org/x/tools/go/analysis API. -// It serves as a model for the behavior of the cmd/vet tool in $GOROOT. -// Being based on the unitchecker driver, it must be run by go vet: -// -// $ go build -o unitchecker main.go -// $ go vet -vettool=unitchecker my/project/... -// -// For a checker also capable of running standalone, use multichecker. -package main - -import ( - "golang.org/x/tools/go/analysis/unitchecker" - - "golang.org/x/tools/go/analysis/passes/asmdecl" - "golang.org/x/tools/go/analysis/passes/assign" - "golang.org/x/tools/go/analysis/passes/atomic" - "golang.org/x/tools/go/analysis/passes/bools" - "golang.org/x/tools/go/analysis/passes/buildtag" - "golang.org/x/tools/go/analysis/passes/cgocall" - "golang.org/x/tools/go/analysis/passes/composite" - "golang.org/x/tools/go/analysis/passes/copylock" - "golang.org/x/tools/go/analysis/passes/httpresponse" - "golang.org/x/tools/go/analysis/passes/loopclosure" - "golang.org/x/tools/go/analysis/passes/lostcancel" - "golang.org/x/tools/go/analysis/passes/nilfunc" - "golang.org/x/tools/go/analysis/passes/printf" - "golang.org/x/tools/go/analysis/passes/shift" - "golang.org/x/tools/go/analysis/passes/stdmethods" - "golang.org/x/tools/go/analysis/passes/structtag" - "golang.org/x/tools/go/analysis/passes/tests" - "golang.org/x/tools/go/analysis/passes/unmarshal" - "golang.org/x/tools/go/analysis/passes/unreachable" - "golang.org/x/tools/go/analysis/passes/unsafeptr" - "golang.org/x/tools/go/analysis/passes/unusedresult" -) - -func main() { - unitchecker.Main( - asmdecl.Analyzer, - assign.Analyzer, - atomic.Analyzer, - bools.Analyzer, - buildtag.Analyzer, - cgocall.Analyzer, - composite.Analyzer, - copylock.Analyzer, - httpresponse.Analyzer, - loopclosure.Analyzer, - lostcancel.Analyzer, - nilfunc.Analyzer, - printf.Analyzer, - shift.Analyzer, - stdmethods.Analyzer, - structtag.Analyzer, - tests.Analyzer, - unmarshal.Analyzer, - unreachable.Analyzer, - unsafeptr.Analyzer, - unusedresult.Analyzer, - ) -} diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/unitchecker/unitchecker.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/unitchecker/unitchecker.go index 76dabc28b9..ba2e66fed2 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/unitchecker/unitchecker.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/unitchecker/unitchecker.go @@ -329,6 +329,7 @@ func run(fset *token.FileSet, cfg *Config, analyzers []*analysis.Analyzer) ([]re OtherFiles: cfg.NonGoFiles, Pkg: pkg, TypesInfo: info, + TypesSizes: tc.Sizes, ResultOf: inputs, Report: func(d analysis.Diagnostic) { act.diagnostics = append(act.diagnostics, d) }, ImportObjectFact: facts.ImportObjectFact, diff --git a/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/inspector.go b/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/inspector.go index db88a95109..ddbdd3f08f 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/inspector.go +++ b/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/inspector.go @@ -14,7 +14,7 @@ // Experiments suggest the inspector's traversals are about 2.5x faster // than ast.Inspect, but it may take around 5 traversals for this // benefit to amortize the inspector's construction cost. -// If efficiency is the primary concern, do not use use Inspector for +// If efficiency is the primary concern, do not use Inspector for // one-off traversals. package inspector diff --git a/src/cmd/vendor/modules.txt b/src/cmd/vendor/modules.txt new file mode 100644 index 0000000000..ef8408cd51 --- /dev/null +++ b/src/cmd/vendor/modules.txt @@ -0,0 +1,62 @@ +# github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57 +github.com/google/pprof/driver +github.com/google/pprof/internal/binutils +github.com/google/pprof/internal/driver +github.com/google/pprof/internal/elfexec +github.com/google/pprof/internal/graph +github.com/google/pprof/internal/measurement +github.com/google/pprof/internal/plugin +github.com/google/pprof/internal/report +github.com/google/pprof/internal/symbolizer +github.com/google/pprof/internal/symbolz +github.com/google/pprof/internal/transport +github.com/google/pprof/profile +github.com/google/pprof/third_party/d3 +github.com/google/pprof/third_party/d3flamegraph +github.com/google/pprof/third_party/svgpan +# github.com/ianlancetaylor/demangle v0.0.0-20180524225900-fc6590592b44 +github.com/ianlancetaylor/demangle +# golang.org/x/arch v0.0.0-20181203225421-5a4828bb7045 +golang.org/x/arch/arm/armasm +golang.org/x/arch/arm64/arm64asm +golang.org/x/arch/ppc64/ppc64asm +golang.org/x/arch/x86/x86asm +# golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c +golang.org/x/crypto/ssh/terminal +# golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82 +golang.org/x/sys/unix +golang.org/x/sys/windows +# golang.org/x/tools v0.0.0-20190514135123-4789ca9922f0 +golang.org/x/tools/go/analysis +golang.org/x/tools/go/analysis/internal/analysisflags +golang.org/x/tools/go/analysis/internal/facts +golang.org/x/tools/go/analysis/passes/asmdecl +golang.org/x/tools/go/analysis/passes/assign +golang.org/x/tools/go/analysis/passes/atomic +golang.org/x/tools/go/analysis/passes/bools +golang.org/x/tools/go/analysis/passes/buildtag +golang.org/x/tools/go/analysis/passes/cgocall +golang.org/x/tools/go/analysis/passes/composite +golang.org/x/tools/go/analysis/passes/copylock +golang.org/x/tools/go/analysis/passes/ctrlflow +golang.org/x/tools/go/analysis/passes/httpresponse +golang.org/x/tools/go/analysis/passes/inspect +golang.org/x/tools/go/analysis/passes/internal/analysisutil +golang.org/x/tools/go/analysis/passes/loopclosure +golang.org/x/tools/go/analysis/passes/lostcancel +golang.org/x/tools/go/analysis/passes/nilfunc +golang.org/x/tools/go/analysis/passes/printf +golang.org/x/tools/go/analysis/passes/shift +golang.org/x/tools/go/analysis/passes/stdmethods +golang.org/x/tools/go/analysis/passes/structtag +golang.org/x/tools/go/analysis/passes/tests +golang.org/x/tools/go/analysis/passes/unmarshal +golang.org/x/tools/go/analysis/passes/unreachable +golang.org/x/tools/go/analysis/passes/unsafeptr +golang.org/x/tools/go/analysis/passes/unusedresult +golang.org/x/tools/go/analysis/unitchecker +golang.org/x/tools/go/ast/astutil +golang.org/x/tools/go/ast/inspector +golang.org/x/tools/go/cfg +golang.org/x/tools/go/types/objectpath +golang.org/x/tools/go/types/typeutil diff --git a/src/cmd/vendor/update-xtools.sh b/src/cmd/vendor/update-xtools.sh deleted file mode 100755 index 8cf5ac165d..0000000000 --- a/src/cmd/vendor/update-xtools.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -# -# update-xtools.sh: idempotently update the vendored -# copy of the x/tools repository used by cmd/vet. - -set -u - -analysis=$(go list -f {{.Dir}} golang.org/x/tools/go/analysis) || - { echo "Add golang.org/x/tools to your GOPATH"; exit 1; } >&2 -xtools=$(dirname $(dirname $analysis)) - -vendor=$(dirname $0) - -# Find the x/tools packages directly imported by cmd/vet. -go list -f '{{range $k, $v := .ImportMap}}{{$k}} {{end}}' cmd/vet | - grep golang.org/x/tools | - # Vendor their transitive closure of dependencies. - xargs go list -f '{{.ImportPath}} {{.Dir}}' -deps | - grep golang.org/x/tools | - while read path dir - do - mkdir -p $vendor/$path - cp $dir/* -t $vendor/$path 2>/dev/null # ignore errors from subdirectories - rm -f $vendor/$path/*_test.go - git add $vendor/$path - done - -echo "Copied $xtools@$(cd $analysis && git rev-parse --short HEAD) to $vendor" >&2 - -go build -o /dev/null cmd/vet || - { echo "Failed to build cmd/vet"; exit 1; } >&2 diff --git a/src/cmd/vendor/vendor.json b/src/cmd/vendor/vendor.json deleted file mode 100644 index 053e2afc4f..0000000000 --- a/src/cmd/vendor/vendor.json +++ /dev/null @@ -1,385 +0,0 @@ -{ - "comment": "", - "ignore": "", - "package": [ - { - "checksumSHA1": "tvvU1lZut+OvO+7NOIG3DXojs48=", - "path": "github.com/google/pprof/driver", - "revision": "fde099a545debf81bf2a96a0ec13d7da2c2a6663", - "revisionTime": "2018-10-26T15:26:56Z" - }, - { - "checksumSHA1": "LDRBxfypG0ZI3Nl/mfEIhrU/ae4=", - "path": "github.com/google/pprof/internal/binutils", - "revision": "fde099a545debf81bf2a96a0ec13d7da2c2a6663", - "revisionTime": "2018-10-26T15:26:56Z" - }, - { - "checksumSHA1": "mViiOBlz5l3mIlQE1SxY1IveYBU=", - "path": "github.com/google/pprof/internal/driver", - "revision": "fde099a545debf81bf2a96a0ec13d7da2c2a6663", - "revisionTime": "2018-10-26T15:26:56Z" - }, - { - "checksumSHA1": "lxGP2FcHBwAiYHup+BNMBis136o=", - "path": "github.com/google/pprof/internal/elfexec", - "revision": "fde099a545debf81bf2a96a0ec13d7da2c2a6663", - "revisionTime": "2018-10-26T15:26:56Z" - }, - { - "checksumSHA1": "ejpBQbeYO4XPI6UtiPe4SVaMQqE=", - "path": "github.com/google/pprof/internal/graph", - "revision": "fde099a545debf81bf2a96a0ec13d7da2c2a6663", - "revisionTime": "2018-10-26T15:26:56Z" - }, - { - "checksumSHA1": "QPWfnT5pEU2jOOb8l8hpiFzQJ7Q=", - "path": "github.com/google/pprof/internal/measurement", - "revision": "fde099a545debf81bf2a96a0ec13d7da2c2a6663", - "revisionTime": "2018-10-26T15:26:56Z" - }, - { - "checksumSHA1": "wMdOybuEcd10antxdOUDUugjmOs=", - "path": "github.com/google/pprof/internal/plugin", - "revision": "fde099a545debf81bf2a96a0ec13d7da2c2a6663", - "revisionTime": "2018-10-26T15:26:56Z" - }, - { - "checksumSHA1": "LmDglu/S6vFmgqkxubKDZemFHaY=", - "path": "github.com/google/pprof/internal/proftest", - "revision": "fde099a545debf81bf2a96a0ec13d7da2c2a6663", - "revisionTime": "2018-10-26T15:26:56Z" - }, - { - "checksumSHA1": "ijtIORD3B7fg+VwzjmXT/33zahM=", - "path": "github.com/google/pprof/internal/report", - "revision": "fde099a545debf81bf2a96a0ec13d7da2c2a6663", - "revisionTime": "2018-10-26T15:26:56Z" - }, - { - "checksumSHA1": "Jjx/GbK8ftMDp0uoqfjTncz0TaQ=", - "path": "github.com/google/pprof/internal/symbolizer", - "revision": "fde099a545debf81bf2a96a0ec13d7da2c2a6663", - "revisionTime": "2018-10-26T15:26:56Z" - }, - { - "checksumSHA1": "T0WqnYtJKNJYW3qYH15E1HFlmE0=", - "path": "github.com/google/pprof/internal/symbolz", - "revision": "fde099a545debf81bf2a96a0ec13d7da2c2a6663", - "revisionTime": "2018-10-26T15:26:56Z" - }, - { - "checksumSHA1": "qDNZM9DiplY70UFnEiP9NcsVplg=", - "path": "github.com/google/pprof/internal/transport", - "revision": "fde099a545debf81bf2a96a0ec13d7da2c2a6663", - "revisionTime": "2018-10-26T15:26:56Z" - }, - { - "checksumSHA1": "yFlyOuu4KgPEjXo1rIvl7Sj32Oo=", - "path": "github.com/google/pprof/profile", - "revision": "fde099a545debf81bf2a96a0ec13d7da2c2a6663", - "revisionTime": "2018-10-26T15:26:56Z" - }, - { - "checksumSHA1": "xmqfYca88U2c/I4642r3ps9uIRg=", - "path": "github.com/google/pprof/third_party/d3", - "revision": "fde099a545debf81bf2a96a0ec13d7da2c2a6663", - "revisionTime": "2018-10-26T15:26:56Z" - }, - { - "checksumSHA1": "LzWzD56Trzpq+0hLR00Yw5Gpepw=", - "path": "github.com/google/pprof/third_party/d3flamegraph", - "revision": "fde099a545debf81bf2a96a0ec13d7da2c2a6663", - "revisionTime": "2018-10-26T15:26:56Z" - }, - { - "checksumSHA1": "738v1E0v0qRW6oAKdCpBEtyVNnY=", - "path": "github.com/google/pprof/third_party/svgpan", - "revision": "fde099a545debf81bf2a96a0ec13d7da2c2a6663", - "revisionTime": "2018-10-26T15:26:56Z" - }, - { - "checksumSHA1": "J5yI4NzHbondzccJmummyJR/kQQ=", - "path": "github.com/ianlancetaylor/demangle", - "revision": "fc6590592b44fedfff586c5d94647c090fbd6bac", - "revisionTime": "2018-05-24T22:59:00Z" - }, - { - "path": "github.com/x/sys/unix", - "revision": "" - }, - { - "path": "golang.org/x/arch/arm/armasm", - "revision": "5099b4b992f2813e39cfe2623c6f638718bd0fc6", - "revisionTime": "2018-04-06T10:28:20Z" - }, - { - "path": "golang.org/x/arch/arm64/arm64asm", - "revision": "9111c30535f37e70dcaf5956d34b03233f90f3b6", - "revisionTime": "2018-03-13T04:07:09Z" - }, - { - "path": "golang.org/x/arch/ppc64/ppc64asm", - "revision": "5a4828bb704534b8a2fa09c791c67d0fb372f472", - "revisionTime": "2018-12-03T22:54:21Z" - }, - { - "path": "golang.org/x/arch/x86/x86asm", - "revision": "5099b4b992f2813e39cfe2623c6f638718bd0fc6", - "revisionTime": "2018-04-06T10:28:20Z" - }, - { - "checksumSHA1": "4nPV7YdyHiVRSWaxpy6jHt/MTq4=", - "path": "golang.org/x/crypto/ssh/terminal", - "revision": "159ae71589f303f9fbfd7528413e0fe944b9c1cb", - "revisionTime": "2018-05-24T11:38:20Z" - }, - { - "checksumSHA1": "v0kuTLSywKZmIwuyR3JyT18CgZk=", - "path": "golang.org/x/sys/unix", - "revision": "cc5685c2db1239775905f3911f0067c0fa74762f", - "revisionTime": "2019-02-24T20:24:49Z" - }, - { - "checksumSHA1": "/G/UvW6DnpLWoplv0wkB3JunvXk=", - "path": "golang.org/x/sys/windows", - "revision": "cc5685c2db1239775905f3911f0067c0fa74762f", - "revisionTime": "2019-02-24T20:24:49Z" - }, - { - "checksumSHA1": "yEg3f1MGwuyDh5NrNEGkWKlTyqY=", - "path": "golang.org/x/sys/windows/registry", - "revision": "cc5685c2db1239775905f3911f0067c0fa74762f", - "revisionTime": "2019-02-24T20:24:49Z" - }, - { - "checksumSHA1": "sL1Y17u+ri3uepsUZOZ4uopiPEg=", - "path": "golang.org/x/sys/windows/svc", - "revision": "cc5685c2db1239775905f3911f0067c0fa74762f", - "revisionTime": "2019-02-24T20:24:49Z" - }, - { - "checksumSHA1": "e9KJPWrdqg5PMkbE2w60Io8rY4M=", - "path": "golang.org/x/sys/windows/svc/debug", - "revision": "cc5685c2db1239775905f3911f0067c0fa74762f", - "revisionTime": "2019-02-24T20:24:49Z" - }, - { - "checksumSHA1": "dz53pQfqAnXG8HdJj+nazXN9YRw=", - "path": "golang.org/x/sys/windows/svc/eventlog", - "revision": "cc5685c2db1239775905f3911f0067c0fa74762f", - "revisionTime": "2019-02-24T20:24:49Z" - }, - { - "checksumSHA1": "vV6Mr/b+1GaHiHLnq2zEejQJVec=", - "path": "golang.org/x/sys/windows/svc/mgr", - "revision": "cc5685c2db1239775905f3911f0067c0fa74762f", - "revisionTime": "2019-02-24T20:24:49Z" - }, - { - "checksumSHA1": "witNkDO7koGO7+oxpBMZBvoxz3c=", - "path": "golang.org/x/tools/go/analysis", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "NPcubwbqmr2yGfGztLqizwbXrwM=", - "path": "golang.org/x/tools/go/analysis/cmd/vet-lite", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "kWG+JiD2mA+2pnSeYJrKLHHgT+s=", - "path": "golang.org/x/tools/go/analysis/internal/analysisflags", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "c4FY3+yRC2GHON66hIU254nQxA8=", - "path": "golang.org/x/tools/go/analysis/internal/facts", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "Zuz7FbEMWtUNCKTA+ofVkkDl1Ic=", - "path": "golang.org/x/tools/go/analysis/internal/unitchecker", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "fxi2KL0typcqGp87Qa9CxSp89Sk=", - "path": "golang.org/x/tools/go/analysis/passes/asmdecl", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "AK5vKjJmQD1u/6v/s107upAF03w=", - "path": "golang.org/x/tools/go/analysis/passes/assign", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "qRQNlOhRmTPecqsjJMf3Rxd7M1g=", - "path": "golang.org/x/tools/go/analysis/passes/atomic", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "zhnbma06ExmGYTu5QaGAi5+QciY=", - "path": "golang.org/x/tools/go/analysis/passes/bools", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "HWcvlzqG20E9BaG4/j3u9tnUyZ4=", - "path": "golang.org/x/tools/go/analysis/passes/buildtag", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "ekVwfAw224CT/eBihMCzAOzIHiE=", - "path": "golang.org/x/tools/go/analysis/passes/cgocall", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "dwtQdPi0Jb9BYVr0Gynh5NpCSz8=", - "path": "golang.org/x/tools/go/analysis/passes/composite", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "6M8xb//gcLk3dSpRq6/fb/8Wvqk=", - "path": "golang.org/x/tools/go/analysis/passes/copylock", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "DPQnIktTEV7cNBNDRIpg0OK6v9Q=", - "path": "golang.org/x/tools/go/analysis/passes/ctrlflow", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "GJjZZhXYqMoGmym/2DpExqHP+Cw=", - "path": "golang.org/x/tools/go/analysis/passes/httpresponse", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "Q76YV1xYtBCBsZk7uKXqih7iHL4=", - "path": "golang.org/x/tools/go/analysis/passes/inspect", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "Y7NBmaqiGnVWf3yn16cwbWmgUhI=", - "path": "golang.org/x/tools/go/analysis/passes/internal/analysisutil", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "Fjj6sV+qmJwvxGt/i8fLIma9Lzs=", - "path": "golang.org/x/tools/go/analysis/passes/loopclosure", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "VZE2qx/m2esvfEreS0RCaVoWYhc=", - "path": "golang.org/x/tools/go/analysis/passes/lostcancel", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "xf9nMwSbFWJXDC9W+Gnus+uU0Nw=", - "path": "golang.org/x/tools/go/analysis/passes/nilfunc", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "PKByrfYKilYhkhAE01z5Om0Tr+w=", - "path": "golang.org/x/tools/go/analysis/passes/pkgfact", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "BrlVsK8u6SPMyvoWdkwS4IAXVRI=", - "path": "golang.org/x/tools/go/analysis/passes/printf", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "3w9Q99Mxrf8qEU+FH7lSyy5hwc4=", - "path": "golang.org/x/tools/go/analysis/passes/shift", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "oeR6BB6OmfoYReHyNLEX9BbF1cI=", - "path": "golang.org/x/tools/go/analysis/passes/stdmethods", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "rPSH7/W3vsomdmSIgdEDrzaCQyk=", - "path": "golang.org/x/tools/go/analysis/passes/structtag", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "yHrglPUc3Ia12nwO0l/I0ArT3to=", - "path": "golang.org/x/tools/go/analysis/passes/tests", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "en0VsP2OoNX40F/bNfbO6geSgi4=", - "path": "golang.org/x/tools/go/analysis/passes/unreachable", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "641akvyeQUx5MqoHiyKwRps4vEg=", - "path": "golang.org/x/tools/go/analysis/passes/unsafeptr", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "cm27h0jINv4jlgiHMn7q572FXTY=", - "path": "golang.org/x/tools/go/analysis/passes/unusedresult", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "/bQnex6L/nyDuZCIIRbM6Is/IRY=", - "path": "golang.org/x/tools/go/ast/astutil", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "qnZLWirp4hAxafiKvH+nnmgGf8Q=", - "path": "golang.org/x/tools/go/ast/inspector", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "+g97ZSLGNNbqfBzpYje8fA5PvXs=", - "path": "golang.org/x/tools/go/cfg", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "JWIR0GVqbDYhTW9mh4zpY/ve6Ro=", - "path": "golang.org/x/tools/go/types/objectpath", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - }, - { - "checksumSHA1": "kyVWOWK3PkDKCtXRJffE60MrfOo=", - "path": "golang.org/x/tools/go/types/typeutil", - "revision": "c76e1ad98a635a7c069d7ab43d31fcf38381facc", - "revisionTime": "2018-11-05T19:48:08Z" - } - ], - "rootPath": "/cmd" -} diff --git a/src/cmd/vet/all/main.go b/src/cmd/vet/all/main.go deleted file mode 100644 index 2500c690bf..0000000000 --- a/src/cmd/vet/all/main.go +++ /dev/null @@ -1,392 +0,0 @@ -// 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. - -// +build ignore - -// The vet/all command runs go vet on the standard library and commands. -// It compares the output against a set of whitelists -// maintained in the whitelist directory. -// -// This program attempts to build packages from golang.org/x/tools, -// which must be in your GOPATH. -package main - -import ( - "bufio" - "bytes" - "flag" - "fmt" - "go/build" - "go/types" - "internal/testenv" - "io" - "io/ioutil" - "log" - "os" - "os/exec" - "path/filepath" - "runtime" - "strings" - "sync/atomic" -) - -var ( - flagPlatforms = flag.String("p", "", "platform(s) to use e.g. linux/amd64,darwin/386") - flagAll = flag.Bool("all", false, "run all platforms") - flagNoLines = flag.Bool("n", false, "don't print line numbers") -) - -var cmdGoPath string -var failed uint32 // updated atomically - -func main() { - log.SetPrefix("vet/all: ") - log.SetFlags(0) - - var err error - cmdGoPath, err = testenv.GoTool() - if err != nil { - log.Print("could not find cmd/go; skipping") - // We're on a platform that can't run cmd/go. - // We want this script to be able to run as part of all.bash, - // so return cleanly rather than with exit code 1. - return - } - - flag.Parse() - switch { - case *flagAll && *flagPlatforms != "": - log.Print("-all and -p flags are incompatible") - flag.Usage() - os.Exit(2) - case *flagPlatforms != "": - vetPlatforms(parseFlagPlatforms()) - case *flagAll: - vetPlatforms(allPlatforms()) - default: - hostPlatform.vet() - } - if atomic.LoadUint32(&failed) != 0 { - os.Exit(1) - } -} - -var hostPlatform = platform{os: build.Default.GOOS, arch: build.Default.GOARCH} - -func allPlatforms() []platform { - var pp []platform - cmd := exec.Command(cmdGoPath, "tool", "dist", "list") - out, err := cmd.Output() - if err != nil { - log.Fatal(err) - } - lines := bytes.Split(out, []byte{'\n'}) - for _, line := range lines { - if len(line) == 0 { - continue - } - pp = append(pp, parsePlatform(string(line))) - } - return pp -} - -func parseFlagPlatforms() []platform { - var pp []platform - components := strings.Split(*flagPlatforms, ",") - for _, c := range components { - pp = append(pp, parsePlatform(c)) - } - return pp -} - -func parsePlatform(s string) platform { - vv := strings.Split(s, "/") - if len(vv) != 2 { - log.Fatalf("could not parse platform %s, must be of form goos/goarch", s) - } - return platform{os: vv[0], arch: vv[1]} -} - -type whitelist map[string]int - -// load adds entries from the whitelist file, if present, for os/arch to w. -func (w whitelist) load(goos string, goarch string) { - sz := types.SizesFor("gc", goarch) - if sz == nil { - log.Fatalf("unknown type sizes for arch %q", goarch) - } - archbits := 8 * sz.Sizeof(types.Typ[types.UnsafePointer]) - - // Look up whether goarch has a shared arch suffix, - // such as mips64x for mips64 and mips64le. - archsuff := goarch - if x, ok := archAsmX[goarch]; ok { - archsuff = x - } - - // Load whitelists. - filenames := []string{ - "all.txt", - goos + ".txt", - goarch + ".txt", - goos + "_" + goarch + ".txt", - fmt.Sprintf("%dbit.txt", archbits), - } - if goarch != archsuff { - filenames = append(filenames, - archsuff+".txt", - goos+"_"+archsuff+".txt", - ) - } - - // We allow error message templates using GOOS and GOARCH. - if goos == "android" { - goos = "linux" // so many special cases :( - } - - // Read whitelists and do template substitution. - replace := strings.NewReplacer("GOOS", goos, "GOARCH", goarch, "ARCHSUFF", archsuff) - - for _, filename := range filenames { - path := filepath.Join("whitelist", filename) - f, err := os.Open(path) - if err != nil { - // Allow not-exist errors; not all combinations have whitelists. - if os.IsNotExist(err) { - continue - } - log.Fatal(err) - } - scan := bufio.NewScanner(f) - for scan.Scan() { - line := scan.Text() - if len(line) == 0 || strings.HasPrefix(line, "//") { - continue - } - w[replace.Replace(line)]++ - } - if err := scan.Err(); err != nil { - log.Fatal(err) - } - } -} - -type platform struct { - os string - arch string -} - -func (p platform) String() string { - return p.os + "/" + p.arch -} - -// ignorePathPrefixes are file path prefixes that should be ignored wholesale. -var ignorePathPrefixes = [...]string{ - // These testdata dirs have lots of intentionally broken/bad code for tests. - "cmd/go/testdata/", - "cmd/vet/testdata/", - "go/printer/testdata/", -} - -func vetPlatforms(pp []platform) { - for _, p := range pp { - p.vet() - } -} - -func (p platform) vet() { - if p.os == "linux" && (p.arch == "riscv64" || p.arch == "sparc64") { - // TODO(tklauser): enable as soon as these ports have fully landed - fmt.Printf("skipping %s/%s\n", p.os, p.arch) - return - } - - if p.os == "windows" && p.arch == "arm" { - // TODO(jordanrh1): enable as soon as the windows/arm port has fully landed - fmt.Println("skipping windows/arm") - return - } - - if p.os == "aix" && p.arch == "ppc64" { - // TODO(aix): enable as soon as the aix/ppc64 port has fully landed - fmt.Println("skipping aix/ppc64") - return - } - - var buf bytes.Buffer - fmt.Fprintf(&buf, "go run main.go -p %s\n", p) - - // Load whitelist(s). - w := make(whitelist) - w.load(p.os, p.arch) - - tmpdir, err := ioutil.TempDir("", "cmd-vet-all") - if err != nil { - log.Fatal(err) - } - defer os.RemoveAll(tmpdir) - - // Build the go/packages-based vet command from the x/tools - // repo. It is considerably faster than "go vet", which rebuilds - // the standard library. - vetTool := filepath.Join(tmpdir, "vet") - cmd := exec.Command(cmdGoPath, "build", "-o", vetTool, "golang.org/x/tools/go/analysis/cmd/vet") - cmd.Dir = filepath.Join(runtime.GOROOT(), "src") - cmd.Stderr = os.Stderr - cmd.Stdout = os.Stderr - if err := cmd.Run(); err != nil { - log.Fatal(err) - } - - // TODO: The unsafeptr checks are disabled for now, - // because there are so many false positives, - // and no clear way to improve vet to eliminate large chunks of them. - // And having them in the whitelists will just cause annoyance - // and churn when working on the runtime. - cmd = exec.Command(vetTool, - "-unsafeptr=0", - "-nilness=0", // expensive, uses SSA - "std", - "cmd/...", - "cmd/compile/internal/gc/testdata", - ) - cmd.Dir = filepath.Join(runtime.GOROOT(), "src") - cmd.Env = append(os.Environ(), "GOOS="+p.os, "GOARCH="+p.arch, "CGO_ENABLED=0") - stderr, err := cmd.StderrPipe() - if err != nil { - log.Fatal(err) - } - if err := cmd.Start(); err != nil { - log.Fatal(err) - } - - // Process vet output. - scan := bufio.NewScanner(stderr) - var parseFailed bool -NextLine: - for scan.Scan() { - line := scan.Text() - if strings.HasPrefix(line, "vet: ") { - // Typecheck failure: Malformed syntax or multiple packages or the like. - // This will yield nicer error messages elsewhere, so ignore them here. - - // This includes warnings from asmdecl of the form: - // "vet: foo.s:16: [amd64] cannot check cross-package assembly function" - continue - } - - if strings.HasPrefix(line, "panic: ") { - // Panic in vet. Don't filter anything, we want the complete output. - parseFailed = true - fmt.Fprintf(os.Stderr, "panic in vet (to reproduce: go run main.go -p %s):\n", p) - fmt.Fprintln(os.Stderr, line) - io.Copy(os.Stderr, stderr) - break - } - if strings.HasPrefix(line, "# ") { - // 'go vet' prefixes the output of each vet invocation by a comment: - // # [package] - continue - } - - // Parse line. - // Assume the part before the first ": " - // is the "file:line:col: " information. - // TODO(adonovan): parse vet -json output. - var file, lineno, msg string - if i := strings.Index(line, ": "); i >= 0 { - msg = line[i+len(": "):] - - words := strings.Split(line[:i], ":") - switch len(words) { - case 3: - _ = words[2] // ignore column - fallthrough - case 2: - lineno = words[1] - fallthrough - case 1: - file = words[0] - - // Make the file name relative to GOROOT/src. - if rel, err := filepath.Rel(cmd.Dir, file); err == nil { - file = rel - } - default: - // error: too many columns - } - } - if file == "" { - if !parseFailed { - parseFailed = true - fmt.Fprintf(os.Stderr, "failed to parse %s vet output:\n", p) - } - fmt.Fprintln(os.Stderr, line) - continue - } - - msg = strings.TrimSpace(msg) - - for _, ignore := range ignorePathPrefixes { - if strings.HasPrefix(file, filepath.FromSlash(ignore)) { - continue NextLine - } - } - - key := file + ": " + msg - if w[key] == 0 { - // Vet error with no match in the whitelist. Print it. - if *flagNoLines { - fmt.Fprintf(&buf, "%s: %s\n", file, msg) - } else { - fmt.Fprintf(&buf, "%s:%s: %s\n", file, lineno, msg) - } - atomic.StoreUint32(&failed, 1) - continue - } - w[key]-- - } - if parseFailed { - atomic.StoreUint32(&failed, 1) - return - } - if scan.Err() != nil { - log.Fatalf("failed to scan vet output: %v", scan.Err()) - } - err = cmd.Wait() - // We expect vet to fail. - // Make sure it has failed appropriately, though (for example, not a PathError). - if _, ok := err.(*exec.ExitError); !ok { - log.Fatalf("unexpected go vet execution failure: %v", err) - } - printedHeader := false - if len(w) > 0 { - for k, v := range w { - if v != 0 { - if !printedHeader { - fmt.Fprintln(&buf, "unmatched whitelist entries:") - printedHeader = true - } - for i := 0; i < v; i++ { - fmt.Fprintln(&buf, k) - } - atomic.StoreUint32(&failed, 1) - } - } - } - - os.Stdout.Write(buf.Bytes()) -} - -// archAsmX maps architectures to the suffix usually used for their assembly files, -// if different than the arch name itself. -var archAsmX = map[string]string{ - "android": "linux", - "mips64": "mips64x", - "mips64le": "mips64x", - "mips": "mipsx", - "mipsle": "mipsx", - "ppc64": "ppc64x", - "ppc64le": "ppc64x", -} diff --git a/src/cmd/vet/all/whitelist/386.txt b/src/cmd/vet/all/whitelist/386.txt deleted file mode 100644 index f791a26570..0000000000 --- a/src/cmd/vet/all/whitelist/386.txt +++ /dev/null @@ -1,18 +0,0 @@ -// 386-specific vet whitelist. See readme.txt for details. - -// startup code uses non-standard calling convention and intentionally -// omits args. -runtime/asm_386.s: [386] rt0_go: use of 4(SP) points beyond argument frame - -// reflect trampolines intentionally omit arg size. Same for morestack. -runtime/asm_386.s: [386] morestack: use of 4(SP) points beyond argument frame -runtime/asm_386.s: [386] morestack: use of 8(SP) points beyond argument frame -runtime/asm_386.s: [386] morestack: use of 4(SP) points beyond argument frame - -// Intentionally missing declarations. These are special assembly routines. -runtime/asm_386.s: [386] ldt0setup: function ldt0setup missing Go declaration -runtime/asm_386.s: [386] emptyfunc: function emptyfunc missing Go declaration -runtime/asm_386.s: [386] aeshashbody: function aeshashbody missing Go declaration -runtime/asm_386.s: [386] addmoduledata: function addmoduledata missing Go declaration -runtime/duff_386.s: [386] duffzero: function duffzero missing Go declaration -runtime/duff_386.s: [386] duffcopy: function duffcopy missing Go declaration diff --git a/src/cmd/vet/all/whitelist/all.txt b/src/cmd/vet/all/whitelist/all.txt deleted file mode 100644 index c73516392f..0000000000 --- a/src/cmd/vet/all/whitelist/all.txt +++ /dev/null @@ -1,68 +0,0 @@ -// Non-platform-specific vet whitelist. See readme.txt for details. - -// Real problems that we can't fix. - -// This is a bad WriteTo signature. Errors are being ignored! -// However, we can't change it due to the Go 1 compatibility promise. -go/types/scope.go: method WriteTo(w io.Writer, n int, recurse bool) should have signature WriteTo(io.Writer) (int64, error) - - -// False positives. - -// The write barrier is called directly by the compiler, so no Go def -runtime/asm_ARCHSUFF.s: [GOARCH] gcWriteBarrier: function gcWriteBarrier missing Go declaration - -// Legitimate vet complaints in which we are testing for correct runtime behavior -// in bad situations that vet can also detect statically. -encoding/json/decode_test.go: struct field m has json tag but is not exported -encoding/json/decode_test.go: struct field m2 has json tag but is not exported -encoding/json/decode_test.go: struct field s has json tag but is not exported -encoding/json/tagkey_test.go: struct field tag `:"BadFormat"` not compatible with reflect.StructTag.Get: bad syntax for struct tag key - -// Compiler tests that make sure even vet-failing code adheres to the spec. -cmd/compile/internal/gc/testdata/arithConst_test.go: a (64 bits) too small for shift of 4294967296 -cmd/compile/internal/gc/testdata/arithConst_test.go: a (64 bits) too small for shift of 4294967296 -cmd/compile/internal/gc/testdata/arithConst_test.go: a (32 bits) too small for shift of 4294967295 -cmd/compile/internal/gc/testdata/arithConst_test.go: a (32 bits) too small for shift of 4294967295 -cmd/compile/internal/gc/testdata/arithConst_test.go: a (16 bits) too small for shift of 65535 -cmd/compile/internal/gc/testdata/arithConst_test.go: a (16 bits) too small for shift of 65535 -cmd/compile/internal/gc/testdata/arithConst_test.go: a (8 bits) too small for shift of 255 -cmd/compile/internal/gc/testdata/arithConst_test.go: a (8 bits) too small for shift of 255 -cmd/compile/internal/gc/testdata/arith_test.go: x (64 bits) too small for shift of 100 -cmd/compile/internal/gc/testdata/arith_test.go: int32(x) (32 bits) too small for shift of 4294967295 -cmd/compile/internal/gc/testdata/arith_test.go: int16(x) (16 bits) too small for shift of 65535 -cmd/compile/internal/gc/testdata/arith_test.go: int8(x) (8 bits) too small for shift of 255 -cmd/compile/internal/gc/testdata/arith_test.go: w (32 bits) too small for shift of 32 -cmd/compile/internal/gc/testdata/break_test.go: unreachable code -cmd/compile/internal/gc/testdata/break_test.go: unreachable code -cmd/compile/internal/gc/testdata/namedReturn_test.go: self-assignment of t to t -cmd/compile/internal/gc/testdata/short_test.go: unreachable code - -// Non-standard method signatures. -// These cases are basically ok. -// Errors are handled reasonably and there's no clear need for interface satisfaction. -// Except for the runtime/pprof case, the API is not exported. -cmd/internal/bio/buf.go: method Seek(offset int64, whence int) int64 should have signature Seek(int64, int) (int64, error) -cmd/internal/bio/buf.go: method Seek(offset int64, whence int) int64 should have signature Seek(int64, int) (int64, error) -fmt/print.go: method WriteByte(c byte) should have signature WriteByte(byte) error -runtime/pprof/pprof.go: method WriteTo(w io.Writer, debug int) error should have signature WriteTo(io.Writer) (int64, error) - -// These encoding/xml methods have the correct signature. -// vet doesn't know it because they are *in* the encoding/xml package. -// It's not worth teaching vet about the distinction, so whitelist them. -encoding/gob/encode.go: method WriteByte(c byte) should have signature WriteByte(byte) error -encoding/xml/marshal.go: method MarshalXML(e *xml.Encoder, start xml.StartElement) error should have signature MarshalXML(*xml.Encoder, xml.StartElement) error -encoding/xml/marshal_test.go: method MarshalXML(e *xml.Encoder, start xml.StartElement) error should have signature MarshalXML(*xml.Encoder, xml.StartElement) error -encoding/xml/read.go: method UnmarshalXML(d *xml.Decoder, start xml.StartElement) error should have signature UnmarshalXML(*xml.Decoder, xml.StartElement) error -encoding/xml/read_test.go: method UnmarshalXML(d *xml.Decoder, start xml.StartElement) error should have signature UnmarshalXML(*xml.Decoder, xml.StartElement) error -encoding/xml/xml_test.go: method UnmarshalXML(*xml.Decoder, xml.StartElement) error should have signature UnmarshalXML(*xml.Decoder, xml.StartElement) error - -// Long struct tags used to test reflect internals -cmd/link/link_test.go: struct field tag "\n\tLondon. Michaelmas term lately over, and the Lord Chancellor sitting in Lincoln’s Inn Hall. Implacable November weather. As much mud in the streets as if the waters had but newly retired from the face of the earth, and it would not be wonderful to meet a Megalosaurus, forty feet long or so, waddling like an elephantine lizard up Holborn Hill. Smoke lowering down from chimney-pots, making a soft black drizzle, with flakes of soot in it as big as full-grown snowflakes—gone into mourning, one might imagine, for the death of the sun. Dogs, undistinguishable in mire. Horses, scarcely better; splashed to their very blinkers. Foot passengers, jostling one another’s umbrellas in a general infection of ill temper, and losing their foot-hold at street-corners, where tens of thousands of other foot passengers have been slipping and sliding since the day broke (if this day ever broke), adding new deposits to the crust upon crust of mud, sticking at those points tenaciously to the pavement, and accumulating at compound interest.\n\n\tFog everywhere. Fog up the river, where it flows among green aits and meadows; fog down the river, where it rolls defiled among the tiers of shipping and the waterside pollutions of a great (and dirty) city. Fog on the Essex marshes, fog on the Kentish heights. Fog creeping into the cabooses of collier-brigs; fog lying out on the yards and hovering in the rigging of great ships; fog drooping on the gunwales of barges and small boats. Fog in the eyes and throats of ancient Greenwich pensioners, wheezing by the firesides of their wards; fog in the stem and bowl of the afternoon pipe of the wrathful skipper, down in his close cabin; fog cruelly pinching the toes and fingers of his shivering little ‘prentice boy on deck. Chance people on the bridges peeping over the parapets into a nether sky of fog, with fog all round them, as if they were up in a balloon and hanging in the misty clouds.\n\n\tGas looming through the fog in divers places in the streets, much as the sun may, from the spongey fields, be seen to loom by husbandman and ploughboy. Most of the shops lighted two hours before their time—as the gas seems to know, for it has a haggard and unwilling look.\n\n\tThe raw afternoon is rawest, and the dense fog is densest, and the muddy streets are muddiest near that leaden-headed old obstruction, appropriate ornament for the threshold of a leaden-headed old corporation, Temple Bar. And hard by Temple Bar, in Lincoln’s Inn Hall, at the very heart of the fog, sits the Lord High Chancellor in his High Court of Chancery." not compatible with reflect.StructTag.Get: bad syntax for struct tag key -cmd/link/link_test.go: struct field tag "\n\tIt was grand to see how the wind awoke, and bent the trees, and drove the rain before it like a cloud of smoke; and to hear the solemn thunder, and to see the lightning; and while thinking with awe of the tremendous powers by which our little lives are encompassed, to consider how beneficent they are, and how upon the smallest flower and leaf there was already a freshness poured from all this seeming rage, which seemed to make creation new again." not compatible with reflect.StructTag.Get: bad syntax for struct tag key -cmd/link/link_test.go: struct field tag "\n\tJarndyce and Jarndyce drones on. This scarecrow of a suit has, over the course of time, become so complicated, that no man alive knows what it means. The parties to it understand it least; but it has been observed that no two Chancery lawyers can talk about it for five minutes, without coming to a total disagreement as to all the premises. Innumerable children have been born into the cause; innumerable young people have married into it; innumerable old people have died out of it. Scores of persons have deliriously found themselves made parties in Jarndyce and Jarndyce, without knowing how or why; whole families have inherited legendary hatreds with the suit. The little plaintiff or defendant, who was promised a new rocking-horse when Jarndyce and Jarndyce should be settled, has grown up, possessed himself of a real horse, and trotted away into the other world. Fair wards of court have faded into mothers and grandmothers; a long procession of Chancellors has come in and gone out; the legion of bills in the suit have been transformed into mere bills of mortality; there are not three Jarndyces left upon the earth perhaps, since old Tom Jarndyce in despair blew his brains out at a coffee-house in Chancery Lane; but Jarndyce and Jarndyce still drags its dreary length before the Court, perennially hopeless." not compatible with reflect.StructTag.Get: bad syntax for struct tag key -cmd/link/link_test.go: struct field tag "\n\tThe one great principle of the English law is, to make business for itself. There is no other principle distinctly, certainly, and consistently maintained through all its narrow turnings. Viewed by this light it becomes a coherent scheme, and not the monstrous maze the laity are apt to think it. Let them but once clearly perceive that its grand principle is to make business for itself at their expense, and surely they will cease to grumble." not compatible with reflect.StructTag.Get: bad syntax for struct tag key - -// Tests of Decode(nil) trigger legitimate diagnostics. -encoding/gob/encoder_test.go: call of Decode passes non-pointer -encoding/gob/encoder_test.go: call of Decode passes non-pointer diff --git a/src/cmd/vet/all/whitelist/amd64.txt b/src/cmd/vet/all/whitelist/amd64.txt deleted file mode 100644 index 020241f615..0000000000 --- a/src/cmd/vet/all/whitelist/amd64.txt +++ /dev/null @@ -1,18 +0,0 @@ -// amd64-specific vet whitelist. See readme.txt for details. - -// False positives. - -// reflect trampolines intentionally omit arg size. Same for morestack. -runtime/asm_amd64.s: [amd64] morestack: use of 8(SP) points beyond argument frame -runtime/asm_amd64.s: [amd64] morestack: use of 16(SP) points beyond argument frame -runtime/asm_amd64.s: [amd64] morestack: use of 8(SP) points beyond argument frame - -// Intentionally missing declarations. These are special assembly routines. -// Some are jumped into from other routines, with values in specific registers. -// duff* have direct calls from the compiler. -// Others use the platform ABI. -// There is no sensible corresponding Go prototype. -runtime/asm_amd64.s: [amd64] aeshashbody: function aeshashbody missing Go declaration -runtime/asm_amd64.s: [amd64] addmoduledata: function addmoduledata missing Go declaration -runtime/duff_amd64.s: [amd64] duffzero: function duffzero missing Go declaration -runtime/duff_amd64.s: [amd64] duffcopy: function duffcopy missing Go declaration diff --git a/src/cmd/vet/all/whitelist/android_386.txt b/src/cmd/vet/all/whitelist/android_386.txt deleted file mode 100644 index 5095f2fc0c..0000000000 --- a/src/cmd/vet/all/whitelist/android_386.txt +++ /dev/null @@ -1,8 +0,0 @@ -// android/386-specific vet whitelist. See readme.txt for details. - -runtime/sys_linux_386.s: [386] setldt: function setldt missing Go declaration - -// These SP references occur after a stack-altering call. They're fine. -runtime/sys_linux_386.s: [386] clone: 12(SP) should be mp+8(FP) -runtime/sys_linux_386.s: [386] clone: 4(SP) should be flags+0(FP) -runtime/sys_linux_386.s: [386] clone: 8(SP) should be stk+4(FP) diff --git a/src/cmd/vet/all/whitelist/android_amd64.txt b/src/cmd/vet/all/whitelist/android_amd64.txt deleted file mode 100644 index 90dabb0209..0000000000 --- a/src/cmd/vet/all/whitelist/android_amd64.txt +++ /dev/null @@ -1,3 +0,0 @@ -// android/amd64-specific vet whitelist. See readme.txt for details. - -runtime/sys_linux_amd64.s: [amd64] settls: function settls missing Go declaration diff --git a/src/cmd/vet/all/whitelist/android_arm.txt b/src/cmd/vet/all/whitelist/android_arm.txt deleted file mode 100644 index fbd569e604..0000000000 --- a/src/cmd/vet/all/whitelist/android_arm.txt +++ /dev/null @@ -1,5 +0,0 @@ -// android/arm-specific vet whitelist. See readme.txt for details. - -runtime/sys_linux_arm.s: [arm] clone: 12(R13) should be stk+4(FP) -runtime/sys_linux_arm.s: [arm] clone: 8(R13) should be flags+0(FP) -runtime/sys_linux_arm.s: [arm] read_tls_fallback: function read_tls_fallback missing Go declaration diff --git a/src/cmd/vet/all/whitelist/arm.txt b/src/cmd/vet/all/whitelist/arm.txt deleted file mode 100644 index 81a1f1831e..0000000000 --- a/src/cmd/vet/all/whitelist/arm.txt +++ /dev/null @@ -1,14 +0,0 @@ -// arm-specific vet whitelist. See readme.txt for details. - -// Intentionally missing declarations. -runtime/asm_arm.s: [arm] emptyfunc: function emptyfunc missing Go declaration -runtime/asm_arm.s: [arm] armPublicationBarrier: function armPublicationBarrier missing Go declaration -runtime/asm_arm.s: [arm] usplitR0: function usplitR0 missing Go declaration -runtime/asm_arm.s: [arm] addmoduledata: function addmoduledata missing Go declaration -runtime/duff_arm.s: [arm] duffzero: function duffzero missing Go declaration -runtime/duff_arm.s: [arm] duffcopy: function duffcopy missing Go declaration -runtime/tls_arm.s: [arm] save_g: function save_g missing Go declaration -runtime/tls_arm.s: [arm] load_g: function load_g missing Go declaration -runtime/tls_arm.s: [arm] _initcgo: function _initcgo missing Go declaration - -runtime/internal/atomic/asm_arm.s: [arm] cas: function cas missing Go declaration diff --git a/src/cmd/vet/all/whitelist/arm64.txt b/src/cmd/vet/all/whitelist/arm64.txt deleted file mode 100644 index 5a0af626f6..0000000000 --- a/src/cmd/vet/all/whitelist/arm64.txt +++ /dev/null @@ -1,8 +0,0 @@ -// arm64-specific vet whitelist. See readme.txt for details. - -// Intentionally missing declarations. -runtime/asm_arm64.s: [arm64] addmoduledata: function addmoduledata missing Go declaration -runtime/duff_arm64.s: [arm64] duffzero: function duffzero missing Go declaration -runtime/duff_arm64.s: [arm64] duffcopy: function duffcopy missing Go declaration -runtime/tls_arm64.s: [arm64] load_g: function load_g missing Go declaration -runtime/tls_arm64.s: [arm64] save_g: function save_g missing Go declaration diff --git a/src/cmd/vet/all/whitelist/darwin_386.txt b/src/cmd/vet/all/whitelist/darwin_386.txt deleted file mode 100644 index 5c25e092f2..0000000000 --- a/src/cmd/vet/all/whitelist/darwin_386.txt +++ /dev/null @@ -1,5 +0,0 @@ -// darwin/386-specific vet whitelist. See readme.txt for details. - -// Ok - -runtime/sys_darwin_386.s: [386] setldt: function setldt missing Go declaration diff --git a/src/cmd/vet/all/whitelist/darwin_amd64.txt b/src/cmd/vet/all/whitelist/darwin_amd64.txt deleted file mode 100644 index fcdacb2dc1..0000000000 --- a/src/cmd/vet/all/whitelist/darwin_amd64.txt +++ /dev/null @@ -1,3 +0,0 @@ -// darwin/amd64-specific vet whitelist. See readme.txt for details. - -runtime/sys_darwin_amd64.s: [amd64] settls: function settls missing Go declaration diff --git a/src/cmd/vet/all/whitelist/darwin_arm.txt b/src/cmd/vet/all/whitelist/darwin_arm.txt deleted file mode 100644 index 1c25c6a939..0000000000 --- a/src/cmd/vet/all/whitelist/darwin_arm.txt +++ /dev/null @@ -1,5 +0,0 @@ -// darwin/arm-specific vet whitelist. See readme.txt for details. - -// Ok. - -runtime/asm_arm.s: [arm] sigreturn: function sigreturn missing Go declaration diff --git a/src/cmd/vet/all/whitelist/darwin_arm64.txt b/src/cmd/vet/all/whitelist/darwin_arm64.txt deleted file mode 100644 index a1edb71383..0000000000 --- a/src/cmd/vet/all/whitelist/darwin_arm64.txt +++ /dev/null @@ -1,3 +0,0 @@ -// darwin/arm64-specific vet whitelist. See readme.txt for details. - -runtime/asm_arm64.s: [arm64] sigreturn: function sigreturn missing Go declaration diff --git a/src/cmd/vet/all/whitelist/dragonfly_amd64.txt b/src/cmd/vet/all/whitelist/dragonfly_amd64.txt deleted file mode 100644 index 6c44159793..0000000000 --- a/src/cmd/vet/all/whitelist/dragonfly_amd64.txt +++ /dev/null @@ -1,7 +0,0 @@ -// dragonfly/amd64-specific vet whitelist. See readme.txt for details. - -runtime/sys_dragonfly_amd64.s: [amd64] settls: function settls missing Go declaration - -syscall/asm9_unix2_amd64.s: [amd64] Syscall9: 8(SP) should be num+0(FP) -syscall/asm9_unix2_amd64.s: [amd64] Syscall9: 16(SP) should be a1+8(FP) -syscall/asm9_unix2_amd64.s: [amd64] Syscall9: 24(SP) should be a2+16(FP) diff --git a/src/cmd/vet/all/whitelist/freebsd_386.txt b/src/cmd/vet/all/whitelist/freebsd_386.txt deleted file mode 100644 index d37132cebb..0000000000 --- a/src/cmd/vet/all/whitelist/freebsd_386.txt +++ /dev/null @@ -1,19 +0,0 @@ -// freebsd/386-specific vet whitelist. See readme.txt for details. - -runtime/sys_freebsd_386.s: [386] thr_start: unknown variable mm -runtime/sys_freebsd_386.s: [386] sigtramp: unknown variable signo -runtime/sys_freebsd_386.s: [386] sigtramp: unknown variable info -runtime/sys_freebsd_386.s: [386] sigtramp: unknown variable context -runtime/sys_freebsd_386.s: [386] sigtramp: unknown variable context -runtime/sys_freebsd_386.s: [386] setldt: function setldt missing Go declaration -runtime/sys_freebsd_386.s: [386] i386_set_ldt: function i386_set_ldt missing Go declaration -syscall/asm_unix_386.s: [386] Syscall: 8(SP) should be a1+4(FP) -syscall/asm_unix_386.s: [386] Syscall: 4(SP) should be trap+0(FP) -syscall/asm_unix_386.s: [386] Syscall6: 8(SP) should be a1+4(FP) -syscall/asm_unix_386.s: [386] Syscall6: 4(SP) should be trap+0(FP) -syscall/asm_unix_386.s: [386] Syscall9: 8(SP) should be a1+4(FP) -syscall/asm_unix_386.s: [386] Syscall9: 4(SP) should be num+0(FP) -syscall/asm_unix_386.s: [386] RawSyscall: 8(SP) should be a1+4(FP) -syscall/asm_unix_386.s: [386] RawSyscall: 4(SP) should be trap+0(FP) -syscall/asm_unix_386.s: [386] RawSyscall6: 8(SP) should be a1+4(FP) -syscall/asm_unix_386.s: [386] RawSyscall6: 4(SP) should be trap+0(FP) diff --git a/src/cmd/vet/all/whitelist/freebsd_amd64.txt b/src/cmd/vet/all/whitelist/freebsd_amd64.txt deleted file mode 100644 index a910f48ca5..0000000000 --- a/src/cmd/vet/all/whitelist/freebsd_amd64.txt +++ /dev/null @@ -1,6 +0,0 @@ -// freebsd/amd64-specific vet whitelist. See readme.txt for details. - -runtime/sys_freebsd_amd64.s: [amd64] settls: function settls missing Go declaration -syscall/asm9_unix2_amd64.s: [amd64] Syscall9: 8(SP) should be num+0(FP) -syscall/asm9_unix2_amd64.s: [amd64] Syscall9: 16(SP) should be a1+8(FP) -syscall/asm9_unix2_amd64.s: [amd64] Syscall9: 24(SP) should be a2+16(FP) diff --git a/src/cmd/vet/all/whitelist/freebsd_arm.txt b/src/cmd/vet/all/whitelist/freebsd_arm.txt deleted file mode 100644 index 11e5c42fd8..0000000000 --- a/src/cmd/vet/all/whitelist/freebsd_arm.txt +++ /dev/null @@ -1,4 +0,0 @@ -// freebsd/arm-specific vet whitelist. See readme.txt for details. - -runtime/asm_arm.s: [arm] sigreturn: function sigreturn missing Go declaration -runtime/sys_freebsd_arm.s: [arm] read_tls_fallback: function read_tls_fallback missing Go declaration diff --git a/src/cmd/vet/all/whitelist/linux_386.txt b/src/cmd/vet/all/whitelist/linux_386.txt deleted file mode 100644 index a5111ca876..0000000000 --- a/src/cmd/vet/all/whitelist/linux_386.txt +++ /dev/null @@ -1,13 +0,0 @@ -// linux/386-specific vet whitelist. See readme.txt for details. - -runtime/sys_linux_386.s: [386] setldt: function setldt missing Go declaration - -// These SP references occur after a stack-altering call. They're fine. -runtime/sys_linux_386.s: [386] clone: 12(SP) should be mp+8(FP) -runtime/sys_linux_386.s: [386] clone: 4(SP) should be flags+0(FP) -runtime/sys_linux_386.s: [386] clone: 8(SP) should be stk+4(FP) - -// Android-specific; stubs missing on other linux platforms. -runtime/sys_linux_386.s: [386] access: function access missing Go declaration -runtime/sys_linux_386.s: [386] connect: function connect missing Go declaration -runtime/sys_linux_386.s: [386] socket: function socket missing Go declaration diff --git a/src/cmd/vet/all/whitelist/linux_amd64.txt b/src/cmd/vet/all/whitelist/linux_amd64.txt deleted file mode 100644 index 69ba65d54b..0000000000 --- a/src/cmd/vet/all/whitelist/linux_amd64.txt +++ /dev/null @@ -1,8 +0,0 @@ -// linux/amd64-specific vet whitelist. See readme.txt for details. - -runtime/sys_linux_amd64.s: [amd64] settls: function settls missing Go declaration - -// Android-specific; stubs missing on other linux platforms. -runtime/sys_linux_amd64.s: [amd64] access: function access missing Go declaration -runtime/sys_linux_amd64.s: [amd64] connect: function connect missing Go declaration -runtime/sys_linux_amd64.s: [amd64] socket: function socket missing Go declaration diff --git a/src/cmd/vet/all/whitelist/linux_arm.txt b/src/cmd/vet/all/whitelist/linux_arm.txt deleted file mode 100644 index fbf0e270aa..0000000000 --- a/src/cmd/vet/all/whitelist/linux_arm.txt +++ /dev/null @@ -1,12 +0,0 @@ -// linux/arm-specific vet whitelist. See readme.txt for details. - - -// These SP references occur after a stack-altering call. They're fine. -runtime/sys_linux_arm.s: [arm] clone: 12(R13) should be stk+4(FP) -runtime/sys_linux_arm.s: [arm] clone: 8(R13) should be flags+0(FP) - -// Special functions. -runtime/sys_linux_arm.s: [arm] read_tls_fallback: function read_tls_fallback missing Go declaration -runtime/sys_linux_arm.s: [arm] access: function access missing Go declaration -runtime/sys_linux_arm.s: [arm] connect: function connect missing Go declaration -runtime/sys_linux_arm.s: [arm] socket: function socket missing Go declaration diff --git a/src/cmd/vet/all/whitelist/linux_arm64.txt b/src/cmd/vet/all/whitelist/linux_arm64.txt deleted file mode 100644 index 67280b7273..0000000000 --- a/src/cmd/vet/all/whitelist/linux_arm64.txt +++ /dev/null @@ -1,5 +0,0 @@ -// linux/arm64-specific vet whitelist. See readme.txt for details. - -runtime/sys_linux_arm64.s: [arm64] access: function access missing Go declaration -runtime/sys_linux_arm64.s: [arm64] connect: function connect missing Go declaration -runtime/sys_linux_arm64.s: [arm64] socket: function socket missing Go declaration diff --git a/src/cmd/vet/all/whitelist/linux_ppc64x.txt b/src/cmd/vet/all/whitelist/linux_ppc64x.txt deleted file mode 100644 index 0091d97110..0000000000 --- a/src/cmd/vet/all/whitelist/linux_ppc64x.txt +++ /dev/null @@ -1,4 +0,0 @@ -// linux/ppc64-specific vet whitelist. See readme.txt for details. - -runtime/sys_linux_ppc64x.s: [GOARCH] _sigtramp: function _sigtramp missing Go declaration -runtime/sys_linux_ppc64x.s: [GOARCH] _cgoSigtramp: function _cgoSigtramp missing Go declaration diff --git a/src/cmd/vet/all/whitelist/mips.txt b/src/cmd/vet/all/whitelist/mips.txt deleted file mode 100644 index fa17c6233b..0000000000 --- a/src/cmd/vet/all/whitelist/mips.txt +++ /dev/null @@ -1,7 +0,0 @@ -// mips-specific (big endian) vet whitelist. See readme.txt for details. - -// Work around if-def'd code. Will be fixed by golang.org/issue/17544. -runtime/sys_linux_mipsx.s: [mips] walltime: invalid offset sec_lo+0(FP); expected sec_lo+4(FP) -runtime/sys_linux_mipsx.s: [mips] walltime: invalid offset sec_hi+4(FP); expected sec_hi+0(FP) -runtime/sys_linux_mipsx.s: [mips] nanotime: invalid offset ret_lo+0(FP); expected ret_lo+4(FP) -runtime/sys_linux_mipsx.s: [mips] nanotime: invalid offset ret_hi+4(FP); expected ret_hi+0(FP) diff --git a/src/cmd/vet/all/whitelist/mips64x.txt b/src/cmd/vet/all/whitelist/mips64x.txt deleted file mode 100644 index 1687765445..0000000000 --- a/src/cmd/vet/all/whitelist/mips64x.txt +++ /dev/null @@ -1,5 +0,0 @@ -// mips64-specific vet whitelist. See readme.txt for details. - -runtime/duff_mips64x.s: [GOARCH] duffzero: function duffzero missing Go declaration -runtime/tls_mips64x.s: [GOARCH] save_g: function save_g missing Go declaration -runtime/tls_mips64x.s: [GOARCH] load_g: function load_g missing Go declaration diff --git a/src/cmd/vet/all/whitelist/mipsle.txt b/src/cmd/vet/all/whitelist/mipsle.txt deleted file mode 100644 index 9361dc4353..0000000000 --- a/src/cmd/vet/all/whitelist/mipsle.txt +++ /dev/null @@ -1,7 +0,0 @@ -// mipsle-specific vet whitelist. See readme.txt for details. - -// Work around if-def'd code. Will be fixed by golang.org/issue/17544. -runtime/sys_linux_mipsx.s: [mipsle] walltime: invalid offset sec_lo+4(FP); expected sec_lo+0(FP) -runtime/sys_linux_mipsx.s: [mipsle] walltime: invalid offset sec_hi+0(FP); expected sec_hi+4(FP) -runtime/sys_linux_mipsx.s: [mipsle] nanotime: invalid offset ret_lo+4(FP); expected ret_lo+0(FP) -runtime/sys_linux_mipsx.s: [mipsle] nanotime: invalid offset ret_hi+0(FP); expected ret_hi+4(FP) diff --git a/src/cmd/vet/all/whitelist/mipsx.txt b/src/cmd/vet/all/whitelist/mipsx.txt deleted file mode 100644 index 1451a86e28..0000000000 --- a/src/cmd/vet/all/whitelist/mipsx.txt +++ /dev/null @@ -1,7 +0,0 @@ -// mips/mipsle-specific vet whitelist. See readme.txt for details. - -runtime/tls_mipsx.s: [GOARCH] save_g: function save_g missing Go declaration -runtime/tls_mipsx.s: [GOARCH] load_g: function load_g missing Go declaration -runtime/sys_linux_mipsx.s: [GOARCH] clone: 12(R29) should be mp+8(FP) -runtime/sys_linux_mipsx.s: [GOARCH] clone: 4(R29) should be flags+0(FP) -runtime/sys_linux_mipsx.s: [GOARCH] clone: 8(R29) should be stk+4(FP) diff --git a/src/cmd/vet/all/whitelist/nacl_386.txt b/src/cmd/vet/all/whitelist/nacl_386.txt deleted file mode 100644 index c4b03e4093..0000000000 --- a/src/cmd/vet/all/whitelist/nacl_386.txt +++ /dev/null @@ -1,11 +0,0 @@ -// nacl/386-specific vet whitelist. See readme.txt for details. - -runtime/sys_nacl_386.s: [386] nacl_clock_gettime: function nacl_clock_gettime missing Go declaration -runtime/sys_nacl_386.s: [386] setldt: function setldt missing Go declaration -runtime/sys_nacl_386.s: [386] sigtramp: use of 20(SP) points beyond argument frame -runtime/sys_nacl_386.s: [386] sigtramp: use of 4(SP) points beyond argument frame -runtime/sys_nacl_386.s: [386] sigtramp: unknown variable ctxt -runtime/sys_nacl_386.s: [386] sigtramp: use of 8(SP) points beyond argument frame -runtime/sys_nacl_386.s: [386] sigtramp: use of 12(SP) points beyond argument frame -runtime/sys_nacl_386.s: [386] sigtramp: use of 20(SP) points beyond argument frame -runtime/sys_nacl_386.s: [386] sigtramp: unknown variable ctxt diff --git a/src/cmd/vet/all/whitelist/nacl_amd64p32.txt b/src/cmd/vet/all/whitelist/nacl_amd64p32.txt deleted file mode 100644 index 9661f57b23..0000000000 --- a/src/cmd/vet/all/whitelist/nacl_amd64p32.txt +++ /dev/null @@ -1,21 +0,0 @@ -// nacl/amd64p32-specific vet whitelist. See readme.txt for details. - -// reflect trampolines intentionally omit arg size. Same for morestack. -runtime/asm_amd64p32.s: [amd64p32] morestack: use of 8(SP) points beyond argument frame -runtime/asm_amd64p32.s: [amd64p32] morestack: use of 16(SP) points beyond argument frame -runtime/asm_amd64p32.s: [amd64p32] morestack: use of 8(SP) points beyond argument frame - -runtime/sys_nacl_amd64p32.s: [amd64p32] sigtramp: unknown variable ctxt -runtime/sys_nacl_amd64p32.s: [amd64p32] sigtramp: unknown variable ctxt -runtime/sys_nacl_amd64p32.s: [amd64p32] sigtramp: unknown variable ctxt -runtime/sys_nacl_amd64p32.s: [amd64p32] sigtramp: unknown variable ctxt -runtime/sys_nacl_amd64p32.s: [amd64p32] sigtramp: unknown variable ctxt -runtime/sys_nacl_amd64p32.s: [amd64p32] nacl_sysinfo: function nacl_sysinfo missing Go declaration -runtime/sys_nacl_amd64p32.s: [amd64p32] nacl_clock_gettime: function nacl_clock_gettime missing Go declaration -runtime/sys_nacl_amd64p32.s: [amd64p32] settls: function settls missing Go declaration - -// Clearer using FP than SP, but that requires named offsets. -runtime/asm_amd64p32.s: [amd64p32] rt0_go: unknown variable argc -runtime/asm_amd64p32.s: [amd64p32] rt0_go: unknown variable argv - -runtime/asm_amd64p32.s: [amd64p32] asmcgocall: RET without writing to 4-byte ret+8(FP) diff --git a/src/cmd/vet/all/whitelist/nacl_arm.txt b/src/cmd/vet/all/whitelist/nacl_arm.txt deleted file mode 100644 index dde0092570..0000000000 --- a/src/cmd/vet/all/whitelist/nacl_arm.txt +++ /dev/null @@ -1,6 +0,0 @@ -// nacl/arm-specific vet whitelist. See readme.txt for details. - -runtime/asm_arm.s: [arm] sigreturn: function sigreturn missing Go declaration -runtime/sys_nacl_arm.s: [arm] nacl_clock_gettime: function nacl_clock_gettime missing Go declaration -runtime/sys_nacl_arm.s: [arm] nacl_sysinfo: function nacl_sysinfo missing Go declaration -runtime/sys_nacl_arm.s: [arm] read_tls_fallback: function read_tls_fallback missing Go declaration diff --git a/src/cmd/vet/all/whitelist/netbsd.txt b/src/cmd/vet/all/whitelist/netbsd.txt deleted file mode 100644 index 48bfde5017..0000000000 --- a/src/cmd/vet/all/whitelist/netbsd.txt +++ /dev/null @@ -1,3 +0,0 @@ -// netbsd-specific vet whitelist. See readme.txt for details. - -runtime/sys_netbsd_ARCHSUFF.s: [GOARCH] sigreturn_tramp: function sigreturn_tramp missing Go declaration diff --git a/src/cmd/vet/all/whitelist/netbsd_386.txt b/src/cmd/vet/all/whitelist/netbsd_386.txt deleted file mode 100644 index 1d1f323d7c..0000000000 --- a/src/cmd/vet/all/whitelist/netbsd_386.txt +++ /dev/null @@ -1,23 +0,0 @@ -// netbsd/386-specific vet whitelist. See readme.txt for details. - -runtime/sys_netbsd_ARCHSUFF.s: [GOARCH] settls: function settls missing Go declaration - -runtime/sys_netbsd_386.s: [386] sigreturn_tramp: use of 140(SP) points beyond argument frame -runtime/sys_netbsd_386.s: [386] sigreturn_tramp: use of 4(SP) points beyond argument frame -runtime/sys_netbsd_386.s: [386] sigreturn_tramp: use of 4(SP) points beyond argument frame -runtime/sys_netbsd_386.s: [386] sigtramp: unknown variable signo -runtime/sys_netbsd_386.s: [386] sigtramp: unknown variable info -runtime/sys_netbsd_386.s: [386] sigtramp: unknown variable context -runtime/sys_netbsd_386.s: [386] setldt: function setldt missing Go declaration -runtime/sys_netbsd_386.s: [386] setldt: use of 16(SP) points beyond argument frame - -syscall/asm_unix_386.s: [386] Syscall: 8(SP) should be a1+4(FP) -syscall/asm_unix_386.s: [386] Syscall: 4(SP) should be trap+0(FP) -syscall/asm_unix_386.s: [386] Syscall6: 8(SP) should be a1+4(FP) -syscall/asm_unix_386.s: [386] Syscall6: 4(SP) should be trap+0(FP) -syscall/asm_unix_386.s: [386] Syscall9: 8(SP) should be a1+4(FP) -syscall/asm_unix_386.s: [386] Syscall9: 4(SP) should be num+0(FP) -syscall/asm_unix_386.s: [386] RawSyscall: 8(SP) should be a1+4(FP) -syscall/asm_unix_386.s: [386] RawSyscall: 4(SP) should be trap+0(FP) -syscall/asm_unix_386.s: [386] RawSyscall6: 8(SP) should be a1+4(FP) -syscall/asm_unix_386.s: [386] RawSyscall6: 4(SP) should be trap+0(FP) diff --git a/src/cmd/vet/all/whitelist/netbsd_amd64.txt b/src/cmd/vet/all/whitelist/netbsd_amd64.txt deleted file mode 100644 index 8b14dc506d..0000000000 --- a/src/cmd/vet/all/whitelist/netbsd_amd64.txt +++ /dev/null @@ -1,3 +0,0 @@ -// netbsd/amd64-specific vet whitelist. See readme.txt for details. - -runtime/sys_netbsd_amd64.s: [amd64] settls: function settls missing Go declaration diff --git a/src/cmd/vet/all/whitelist/netbsd_arm.txt b/src/cmd/vet/all/whitelist/netbsd_arm.txt deleted file mode 100644 index c0a0aa2114..0000000000 --- a/src/cmd/vet/all/whitelist/netbsd_arm.txt +++ /dev/null @@ -1,5 +0,0 @@ -// netbsd/arm-specific vet whitelist. See readme.txt for details. - -runtime/asm_arm.s: [arm] sigreturn: function sigreturn missing Go declaration -runtime/sys_netbsd_arm.s: [arm] read_tls_fallback: function read_tls_fallback missing Go declaration -syscall/asm_netbsd_arm.s: [arm] Syscall9: unknown variable trap; offset 0 is num+0(FP) diff --git a/src/cmd/vet/all/whitelist/openbsd_386.txt b/src/cmd/vet/all/whitelist/openbsd_386.txt deleted file mode 100644 index b5c0a736c2..0000000000 --- a/src/cmd/vet/all/whitelist/openbsd_386.txt +++ /dev/null @@ -1,17 +0,0 @@ -// openbsd/386-specific vet whitelist. See readme.txt for details. - -runtime/sys_openbsd_386.s: [386] sigtramp: unknown variable signo -runtime/sys_openbsd_386.s: [386] sigtramp: unknown variable info -runtime/sys_openbsd_386.s: [386] sigtramp: unknown variable context -runtime/sys_openbsd_386.s: [386] setldt: function setldt missing Go declaration -runtime/sys_openbsd_386.s: [386] settls: function settls missing Go declaration -syscall/asm_unix_386.s: [386] Syscall: 8(SP) should be a1+4(FP) -syscall/asm_unix_386.s: [386] Syscall: 4(SP) should be trap+0(FP) -syscall/asm_unix_386.s: [386] Syscall6: 8(SP) should be a1+4(FP) -syscall/asm_unix_386.s: [386] Syscall6: 4(SP) should be trap+0(FP) -syscall/asm_unix_386.s: [386] Syscall9: 8(SP) should be a1+4(FP) -syscall/asm_unix_386.s: [386] Syscall9: 4(SP) should be num+0(FP) -syscall/asm_unix_386.s: [386] RawSyscall: 8(SP) should be a1+4(FP) -syscall/asm_unix_386.s: [386] RawSyscall: 4(SP) should be trap+0(FP) -syscall/asm_unix_386.s: [386] RawSyscall6: 8(SP) should be a1+4(FP) -syscall/asm_unix_386.s: [386] RawSyscall6: 4(SP) should be trap+0(FP) diff --git a/src/cmd/vet/all/whitelist/openbsd_amd64.txt b/src/cmd/vet/all/whitelist/openbsd_amd64.txt deleted file mode 100644 index 433f62ca07..0000000000 --- a/src/cmd/vet/all/whitelist/openbsd_amd64.txt +++ /dev/null @@ -1,3 +0,0 @@ -// openbsd/amd64-specific vet whitelist. See readme.txt for details. - -runtime/sys_openbsd_amd64.s: [amd64] settls: function settls missing Go declaration diff --git a/src/cmd/vet/all/whitelist/openbsd_arm.txt b/src/cmd/vet/all/whitelist/openbsd_arm.txt deleted file mode 100644 index 16bf26c734..0000000000 --- a/src/cmd/vet/all/whitelist/openbsd_arm.txt +++ /dev/null @@ -1,4 +0,0 @@ -// openbsd/arm-specific vet whitelist. See readme.txt for details. - -runtime/asm_arm.s: [arm] sigreturn: function sigreturn missing Go declaration -runtime/sys_openbsd_arm.s: [arm] read_tls_fallback: function read_tls_fallback missing Go declaration diff --git a/src/cmd/vet/all/whitelist/plan9_386.txt b/src/cmd/vet/all/whitelist/plan9_386.txt deleted file mode 100644 index 153116100d..0000000000 --- a/src/cmd/vet/all/whitelist/plan9_386.txt +++ /dev/null @@ -1,3 +0,0 @@ -// plan9/386-specific vet whitelist. See readme.txt for details. - -runtime/sys_plan9_386.s: [386] setldt: function setldt missing Go declaration diff --git a/src/cmd/vet/all/whitelist/plan9_amd64.txt b/src/cmd/vet/all/whitelist/plan9_amd64.txt deleted file mode 100644 index 39fc8e2c3c..0000000000 --- a/src/cmd/vet/all/whitelist/plan9_amd64.txt +++ /dev/null @@ -1,4 +0,0 @@ -// plan9/amd64-specific vet whitelist. See readme.txt for details. - -runtime/sys_plan9_amd64.s: [amd64] setldt: function setldt missing Go declaration -runtime/sys_plan9_amd64.s: [amd64] settls: function settls missing Go declaration diff --git a/src/cmd/vet/all/whitelist/plan9_arm.txt b/src/cmd/vet/all/whitelist/plan9_arm.txt deleted file mode 100644 index 5af3271760..0000000000 --- a/src/cmd/vet/all/whitelist/plan9_arm.txt +++ /dev/null @@ -1,4 +0,0 @@ -// plan9/arm-specific vet whitelist. See readme.txt for details. - -runtime/asm_arm.s: [arm] sigreturn: function sigreturn missing Go declaration -runtime/sys_plan9_arm.s: [arm] read_tls_fallback: function read_tls_fallback missing Go declaration diff --git a/src/cmd/vet/all/whitelist/ppc64x.txt b/src/cmd/vet/all/whitelist/ppc64x.txt deleted file mode 100644 index 730a753afc..0000000000 --- a/src/cmd/vet/all/whitelist/ppc64x.txt +++ /dev/null @@ -1,8 +0,0 @@ -// ppc64-specific vet whitelist. See readme.txt for details. - -runtime/asm_ppc64x.s: [GOARCH] reginit: function reginit missing Go declaration -runtime/asm_ppc64x.s: [GOARCH] goexit: use of 24(R1) points beyond argument frame -runtime/asm_ppc64x.s: [GOARCH] addmoduledata: function addmoduledata missing Go declaration -runtime/duff_ppc64x.s: [GOARCH] duffzero: function duffzero missing Go declaration -runtime/tls_ppc64x.s: [GOARCH] save_g: function save_g missing Go declaration -runtime/tls_ppc64x.s: [GOARCH] load_g: function load_g missing Go declaration diff --git a/src/cmd/vet/all/whitelist/readme.txt b/src/cmd/vet/all/whitelist/readme.txt deleted file mode 100644 index 4f83757dbc..0000000000 --- a/src/cmd/vet/all/whitelist/readme.txt +++ /dev/null @@ -1,4 +0,0 @@ -This directory contains whitelists for vet complaints about the standard library and commands. -They are line-based and unordered, although counts of duplicated lines matter. -Each line matches vet's output, except that line numbers are removed to avoid churn. -There are also os-, arch-, and bitwidth-specific whitelists. diff --git a/src/cmd/vet/all/whitelist/s390x.txt b/src/cmd/vet/all/whitelist/s390x.txt deleted file mode 100644 index 55cf44a519..0000000000 --- a/src/cmd/vet/all/whitelist/s390x.txt +++ /dev/null @@ -1,12 +0,0 @@ -runtime/asm_s390x.s: [s390x] addmoduledata: function addmoduledata missing Go declaration -runtime/memclr_s390x.s: [s390x] memclr_s390x_exrl_xc: function memclr_s390x_exrl_xc missing Go declaration -runtime/memmove_s390x.s: [s390x] memmove_s390x_exrl_mvc: function memmove_s390x_exrl_mvc missing Go declaration -runtime/tls_s390x.s: [s390x] save_g: function save_g missing Go declaration -runtime/tls_s390x.s: [s390x] load_g: function load_g missing Go declaration -internal/cpu/cpu_s390x.s: [s390x] stfle: invalid MOVD of ret+0(FP); internal/cpu.facilityList is 32-byte value -internal/cpu/cpu_s390x.s: [s390x] kmQuery: invalid MOVD of ret+0(FP); internal/cpu.queryResult is 16-byte value -internal/cpu/cpu_s390x.s: [s390x] kmcQuery: invalid MOVD of ret+0(FP); internal/cpu.queryResult is 16-byte value -internal/cpu/cpu_s390x.s: [s390x] kmctrQuery: invalid MOVD of ret+0(FP); internal/cpu.queryResult is 16-byte value -internal/cpu/cpu_s390x.s: [s390x] kmaQuery: invalid MOVD of ret+0(FP); internal/cpu.queryResult is 16-byte value -internal/cpu/cpu_s390x.s: [s390x] kimdQuery: invalid MOVD of ret+0(FP); internal/cpu.queryResult is 16-byte value -internal/cpu/cpu_s390x.s: [s390x] klmdQuery: invalid MOVD of ret+0(FP); internal/cpu.queryResult is 16-byte value diff --git a/src/cmd/vet/all/whitelist/solaris_amd64.txt b/src/cmd/vet/all/whitelist/solaris_amd64.txt deleted file mode 100644 index 26a9da4271..0000000000 --- a/src/cmd/vet/all/whitelist/solaris_amd64.txt +++ /dev/null @@ -1,6 +0,0 @@ -// solaris/amd64-specific vet whitelist. See readme.txt for details. - -runtime/sys_solaris_amd64.s: [amd64] settls: function settls missing Go declaration -runtime/sys_solaris_amd64.s: [amd64] pipe1: function pipe1 missing Go declaration -runtime/sys_solaris_amd64.s: [amd64] asmsysvicall6: function asmsysvicall6 missing Go declaration -runtime/sys_solaris_amd64.s: [amd64] usleep2: function usleep2 missing Go declaration diff --git a/src/cmd/vet/all/whitelist/wasm.txt b/src/cmd/vet/all/whitelist/wasm.txt deleted file mode 100644 index 45496ed3f6..0000000000 --- a/src/cmd/vet/all/whitelist/wasm.txt +++ /dev/null @@ -1,24 +0,0 @@ -// wasm-specific vet whitelist. See readme.txt for details. - -// False positives. - -// morestack intentionally omits arg size. -runtime/asm_wasm.s: [wasm] morestack: use of 8(SP) points beyond argument frame -runtime/asm_wasm.s: [wasm] morestack: use of 16(SP) points beyond argument frame -runtime/asm_wasm.s: [wasm] morestack: use of 8(SP) points beyond argument frame - -// rt0_go does not allocate a stack frame. -runtime/asm_wasm.s: [wasm] rt0_go: use of 8(SP) points beyond argument frame - -// Calling WebAssembly import. No write from Go assembly. -runtime/sys_wasm.s: [wasm] nanotime: RET without writing to 8-byte ret+0(FP) -runtime/sys_wasm.s: [wasm] scheduleTimeoutEvent: RET without writing to 4-byte ret+8(FP) -syscall/js/js_js.s: [wasm] stringVal: RET without writing to 8-byte ret+16(FP) -syscall/js/js_js.s: [wasm] valueGet: RET without writing to 8-byte ret+24(FP) -syscall/js/js_js.s: [wasm] valueIndex: RET without writing to 8-byte ret+16(FP) -syscall/js/js_js.s: [wasm] valueCall: RET without writing to 8-byte ret+48(FP) -syscall/js/js_js.s: [wasm] valueInvoke: RET without writing to 8-byte ret+32(FP) -syscall/js/js_js.s: [wasm] valueNew: RET without writing to 8-byte ret+32(FP) -syscall/js/js_js.s: [wasm] valueLength: RET without writing to 8-byte ret+8(FP) -syscall/js/js_js.s: [wasm] valuePrepareString: RET without writing to 8-byte ret+8(FP) -syscall/js/js_js.s: [wasm] valueInstanceOf: RET without writing to 1-byte ret+16(FP) diff --git a/src/cmd/vet/all/whitelist/windows.txt b/src/cmd/vet/all/whitelist/windows.txt deleted file mode 100644 index 2c101aeb98..0000000000 --- a/src/cmd/vet/all/whitelist/windows.txt +++ /dev/null @@ -1,7 +0,0 @@ -// windows-specific vet whitelist. See readme.txt for details. - -// Issue 18609 -crypto/x509/root_windows.go: unreachable code - -runtime/sys_windows_ARCHSUFF.s: [GOARCH] sigtramp: function sigtramp missing Go declaration -runtime/sys_windows_ARCHSUFF.s: [GOARCH] onosstack: unknown variable usec; offset 0 is fn+0(FP) diff --git a/src/cmd/vet/all/whitelist/windows_386.txt b/src/cmd/vet/all/whitelist/windows_386.txt deleted file mode 100644 index 87b3b24d7f..0000000000 --- a/src/cmd/vet/all/whitelist/windows_386.txt +++ /dev/null @@ -1,8 +0,0 @@ -// windows/386-specific vet whitelist. See readme.txt for details. - -runtime/sys_windows_386.s: [386] profileloop: use of 4(SP) points beyond argument frame -runtime/sys_windows_386.s: [386] ctrlhandler: 4(SP) should be _type+0(FP) -runtime/sys_windows_386.s: [386] setldt: function setldt missing Go declaration -runtime/sys_windows_386.s: [386] callbackasm1+0: function callbackasm1+0 missing Go declaration -runtime/sys_windows_386.s: [386] tstart: function tstart missing Go declaration -runtime/sys_windows_386.s: [386] tstart_stdcall: RET without writing to 4-byte ret+4(FP) diff --git a/src/cmd/vet/all/whitelist/windows_amd64.txt b/src/cmd/vet/all/whitelist/windows_amd64.txt deleted file mode 100644 index daa23e73a1..0000000000 --- a/src/cmd/vet/all/whitelist/windows_amd64.txt +++ /dev/null @@ -1,7 +0,0 @@ -// windows/amd64-specific vet whitelist. See readme.txt for details. - -runtime/sys_windows_amd64.s: [amd64] ctrlhandler: 16(SP) should be _type+0(FP) -runtime/sys_windows_amd64.s: [amd64] ctrlhandler: RET without writing to 4-byte ret+8(FP) -runtime/sys_windows_amd64.s: [amd64] callbackasm1: function callbackasm1 missing Go declaration -runtime/sys_windows_amd64.s: [amd64] tstart_stdcall: RET without writing to 4-byte ret+8(FP) -runtime/sys_windows_amd64.s: [amd64] settls: function settls missing Go declaration diff --git a/src/cmd/vet/main.go b/src/cmd/vet/main.go index 4ec174b3cd..b845d95040 100644 --- a/src/cmd/vet/main.go +++ b/src/cmd/vet/main.go @@ -1,6 +1,8 @@ package main import ( + "cmd/internal/objabi" + "golang.org/x/tools/go/analysis/unitchecker" "golang.org/x/tools/go/analysis/passes/asmdecl" @@ -27,6 +29,8 @@ import ( ) func main() { + objabi.AddVersionFlag() + unitchecker.Main( asmdecl.Analyzer, assign.Analyzer, diff --git a/src/cmd/vet/vet_test.go b/src/cmd/vet/vet_test.go index e9b8c69d53..5d8139d977 100644 --- a/src/cmd/vet/vet_test.go +++ b/src/cmd/vet/vet_test.go @@ -28,16 +28,19 @@ var binary string // We implement TestMain so remove the test binary when all is done. func TestMain(m *testing.M) { + os.Exit(testMain(m)) +} + +func testMain(m *testing.M) int { dir, err := ioutil.TempDir("", "vet_test") if err != nil { fmt.Fprintln(os.Stderr, err) - os.Exit(1) + return 1 } defer os.RemoveAll(dir) binary = filepath.Join(dir, "testvet.exe") - result := m.Run() - os.Exit(result) + return m.Run() } var ( diff --git a/src/compress/flate/huffman_bit_writer.go b/src/compress/flate/huffman_bit_writer.go index f42a921e67..3e19061f8b 100644 --- a/src/compress/flate/huffman_bit_writer.go +++ b/src/compress/flate/huffman_bit_writer.go @@ -609,10 +609,10 @@ func (w *huffmanBitWriter) writeTokens(tokens []token, leCodes, oeCodes []hcode) var huffOffset *huffmanEncoder func init() { - w := newHuffmanBitWriter(nil) - w.offsetFreq[0] = 1 + offsetFreq := make([]int32, offsetCodeCount) + offsetFreq[0] = 1 huffOffset = newHuffmanEncoder(offsetCodeCount) - huffOffset.generate(w.offsetFreq, 15) + huffOffset.generate(offsetFreq, 15) } // writeBlockHuff encodes a block of bytes as either diff --git a/src/context/context.go b/src/context/context.go index 21a40d5947..0f36881b1e 100644 --- a/src/context/context.go +++ b/src/context/context.go @@ -3,7 +3,7 @@ // license that can be found in the LICENSE file. // Package context defines the Context type, which carries deadlines, -// cancelation signals, and other request-scoped values across API boundaries +// cancellation signals, and other request-scoped values across API boundaries // and between processes. // // Incoming requests to a server should create a Context, and outgoing @@ -49,13 +49,13 @@ package context import ( "errors" - "fmt" - "reflect" + "internal/oserror" + "internal/reflectlite" "sync" "time" ) -// A Context carries a deadline, a cancelation signal, and other values across +// A Context carries a deadline, a cancellation signal, and other values across // API boundaries. // // Context's methods may be called by multiple goroutines simultaneously. @@ -93,7 +93,7 @@ type Context interface { // } // // See https://blog.golang.org/pipelines for more examples of how to use - // a Done channel for cancelation. + // a Done channel for cancellation. Done() <-chan struct{} // If Done is not yet closed, Err returns nil. @@ -163,6 +163,9 @@ type deadlineExceededError struct{} func (deadlineExceededError) Error() string { return "context deadline exceeded" } func (deadlineExceededError) Timeout() bool { return true } func (deadlineExceededError) Temporary() bool { return true } +func (deadlineExceededError) Is(target error) bool { + return target == oserror.ErrTimeout || target == oserror.ErrTemporary +} // An emptyCtx is never canceled, has no values, and has no deadline. It is not // struct{}, since vars of this type must have distinct addresses. @@ -338,8 +341,19 @@ func (c *cancelCtx) Err() error { return err } +type stringer interface { + String() string +} + +func contextName(c Context) string { + if s, ok := c.(stringer); ok { + return s.String() + } + return reflectlite.TypeOf(c).String() +} + func (c *cancelCtx) String() string { - return fmt.Sprintf("%v.WithCancel", c.Context) + return contextName(c.Context) + ".WithCancel" } // cancel closes c.done, cancels each of c's children, and, if @@ -420,7 +434,9 @@ func (c *timerCtx) Deadline() (deadline time.Time, ok bool) { } func (c *timerCtx) String() string { - return fmt.Sprintf("%v.WithDeadline(%s [%s])", c.cancelCtx.Context, c.deadline, time.Until(c.deadline)) + return contextName(c.cancelCtx.Context) + ".WithDeadline(" + + c.deadline.String() + " [" + + time.Until(c.deadline).String() + "])" } func (c *timerCtx) cancel(removeFromParent bool, err error) { @@ -468,7 +484,7 @@ func WithValue(parent Context, key, val interface{}) Context { if key == nil { panic("nil key") } - if !reflect.TypeOf(key).Comparable() { + if !reflectlite.TypeOf(key).Comparable() { panic("key is not comparable") } return &valueCtx{parent, key, val} @@ -481,8 +497,23 @@ type valueCtx struct { key, val interface{} } +// stringify tries a bit to stringify v, without using fmt, since we don't +// want context depending on the unicode tables. This is only used by +// *valueCtx.String(). +func stringify(v interface{}) string { + switch s := v.(type) { + case stringer: + return s.String() + case string: + return s + } + return "" +} + func (c *valueCtx) String() string { - return fmt.Sprintf("%v.WithValue(%#v, %#v)", c.Context, c.key, c.val) + return contextName(c.Context) + ".WithValue(type " + + reflectlite.TypeOf(c.key).String() + + ", val " + stringify(c.val) + ")" } func (c *valueCtx) Value(key interface{}) interface{} { diff --git a/src/context/context_test.go b/src/context/context_test.go index f73f2837b8..9991c5b09c 100644 --- a/src/context/context_test.go +++ b/src/context/context_test.go @@ -5,8 +5,10 @@ package context import ( + "errors" "fmt" "math/rand" + "os" "runtime" "strings" "sync" @@ -94,7 +96,7 @@ func XTestWithCancel(t testingT) { } cancel() - time.Sleep(100 * time.Millisecond) // let cancelation propagate + time.Sleep(100 * time.Millisecond) // let cancellation propagate for i, c := range contexts { select { @@ -306,7 +308,7 @@ func XTestCanceledTimeout(t testingT) { o := otherContext{c} c, cancel := WithTimeout(o, 2*time.Second) cancel() - time.Sleep(100 * time.Millisecond) // let cancelation propagate + time.Sleep(100 * time.Millisecond) // let cancellation propagate select { case <-c.Done(): default: @@ -343,7 +345,7 @@ func XTestValues(t testingT) { c1 := WithValue(Background(), k1, "c1k1") check(c1, "c1", "c1k1", "", "") - if got, want := fmt.Sprint(c1), `context.Background.WithValue(1, "c1k1")`; got != want { + if got, want := fmt.Sprint(c1), `context.Background.WithValue(type context.key1, val c1k1)`; got != want { t.Errorf("c.String() = %q want %q", got, want) } @@ -647,4 +649,7 @@ func XTestDeadlineExceededSupportsTimeout(t testingT) { if !i.Timeout() { t.Fatal("wrong value for timeout") } + if !errors.Is(DeadlineExceeded, os.ErrTimeout) { + t.Fatal("errors.Is(DeadlineExceeded, os.ErrTimeout) = false, want true") + } } diff --git a/src/context/example_test.go b/src/context/example_test.go index 2b28b57704..b91a8acef3 100644 --- a/src/context/example_test.go +++ b/src/context/example_test.go @@ -59,7 +59,7 @@ func ExampleWithDeadline() { ctx, cancel := context.WithDeadline(context.Background(), d) // Even though ctx will be expired, it is good practice to call its - // cancelation function in any case. Failure to do so may keep the + // cancellation function in any case. Failure to do so may keep the // context and its parent alive longer than necessary. defer cancel() diff --git a/src/crypto/cipher/cfb_test.go b/src/crypto/cipher/cfb_test.go index ecb716df01..72f62e69d3 100644 --- a/src/crypto/cipher/cfb_test.go +++ b/src/crypto/cipher/cfb_test.go @@ -81,7 +81,7 @@ func TestCFBVectors(t *testing.T) { plaintextCopy := make([]byte, len(ciphertext)) cfbdec.XORKeyStream(plaintextCopy, ciphertext) - if !bytes.Equal(plaintextCopy, plaintextCopy) { + if !bytes.Equal(plaintextCopy, plaintext) { t.Errorf("#%d: wrong plaintext: got %x, expected %x", i, plaintextCopy, plaintext) } } diff --git a/src/crypto/cipher/xor_test.go b/src/crypto/cipher/xor_test.go index 24877efc36..d49f1da77c 100644 --- a/src/crypto/cipher/xor_test.go +++ b/src/crypto/cipher/xor_test.go @@ -9,11 +9,16 @@ import ( "crypto/cipher" "crypto/rand" "fmt" + "internal/testenv" "io" + "runtime" "testing" ) func TestXOR(t *testing.T) { + if runtime.GOOS == "js" { + testenv.SkipFlaky(t, 31812) + } for j := 1; j <= 1024; j++ { for alignP := 0; alignP < 2; alignP++ { for alignQ := 0; alignQ < 2; alignQ++ { diff --git a/src/crypto/des/block.go b/src/crypto/des/block.go index 21e6d4e82f..3e3fe06c02 100644 --- a/src/crypto/des/block.go +++ b/src/crypto/des/block.go @@ -4,7 +4,10 @@ package des -import "encoding/binary" +import ( + "encoding/binary" + "sync" +) func cryptBlock(subkeys []uint64, dst, src []byte, decrypt bool) { b := binary.BigEndian.Uint64(src) @@ -42,7 +45,8 @@ func decryptBlock(subkeys []uint64, dst, src []byte) { cryptBlock(subkeys, dst, src, true) } -// DES Feistel function +// DES Feistel function. feistelBox must be initialized via +// feistelBoxOnce.Do(initFeistelBox) first. func feistel(l, r uint32, k0, k1 uint64) (lout, rout uint32) { var t uint32 @@ -77,6 +81,8 @@ func feistel(l, r uint32, k0, k1 uint64) (lout, rout uint32) { // for sBoxes[s][i][j] << 4*(7-s) var feistelBox [8][64]uint32 +var feistelBoxOnce sync.Once + // general purpose function to perform DES block permutations func permuteBlock(src uint64, permutation []uint8) (block uint64) { for position, n := range permutation { @@ -86,7 +92,7 @@ func permuteBlock(src uint64, permutation []uint8) (block uint64) { return } -func init() { +func initFeistelBox() { for s := range sBoxes { for i := 0; i < 4; i++ { for j := 0; j < 16; j++ { @@ -219,6 +225,8 @@ func ksRotate(in uint32) (out []uint32) { // creates 16 56-bit subkeys from the original key func (c *desCipher) generateSubkeys(keyBytes []byte) { + feistelBoxOnce.Do(initFeistelBox) + // apply PC1 permutation to key key := binary.BigEndian.Uint64(keyBytes) permutedKey := permuteBlock(key, permutedChoice1[:]) diff --git a/src/crypto/ed25519/ed25519.go b/src/crypto/ed25519/ed25519.go new file mode 100644 index 0000000000..dc47e5585d --- /dev/null +++ b/src/crypto/ed25519/ed25519.go @@ -0,0 +1,216 @@ +// 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 ed25519 implements the Ed25519 signature algorithm. See +// https://ed25519.cr.yp.to/. +// +// These functions are also compatible with the “Ed25519†function defined in +// RFC 8032. However, unlike RFC 8032's formulation, this package's private key +// representation includes a public key suffix to make multiple signing +// operations with the same key more efficient. This package refers to the RFC +// 8032 private key as the “seedâ€. +package ed25519 + +// This code is a port of the public domain, “ref10†implementation of ed25519 +// from SUPERCOP. + +import ( + "bytes" + "crypto" + "crypto/ed25519/internal/edwards25519" + cryptorand "crypto/rand" + "crypto/sha512" + "errors" + "io" + "strconv" +) + +const ( + // PublicKeySize is the size, in bytes, of public keys as used in this package. + PublicKeySize = 32 + // PrivateKeySize is the size, in bytes, of private keys as used in this package. + PrivateKeySize = 64 + // SignatureSize is the size, in bytes, of signatures generated and verified by this package. + SignatureSize = 64 + // SeedSize is the size, in bytes, of private key seeds. These are the private key representations used by RFC 8032. + SeedSize = 32 +) + +// PublicKey is the type of Ed25519 public keys. +type PublicKey []byte + +// PrivateKey is the type of Ed25519 private keys. It implements crypto.Signer. +type PrivateKey []byte + +// Public returns the PublicKey corresponding to priv. +func (priv PrivateKey) Public() crypto.PublicKey { + publicKey := make([]byte, PublicKeySize) + copy(publicKey, priv[32:]) + return PublicKey(publicKey) +} + +// Seed returns the private key seed corresponding to priv. It is provided for +// interoperability with RFC 8032. RFC 8032's private keys correspond to seeds +// in this package. +func (priv PrivateKey) Seed() []byte { + seed := make([]byte, SeedSize) + copy(seed, priv[:32]) + return seed +} + +// Sign signs the given message with priv. +// Ed25519 performs two passes over messages to be signed and therefore cannot +// handle pre-hashed messages. Thus opts.HashFunc() must return zero to +// indicate the message hasn't been hashed. This can be achieved by passing +// crypto.Hash(0) as the value for opts. +func (priv PrivateKey) Sign(rand io.Reader, message []byte, opts crypto.SignerOpts) (signature []byte, err error) { + if opts.HashFunc() != crypto.Hash(0) { + return nil, errors.New("ed25519: cannot sign hashed message") + } + + return Sign(priv, message), nil +} + +// GenerateKey generates a public/private key pair using entropy from rand. +// If rand is nil, crypto/rand.Reader will be used. +func GenerateKey(rand io.Reader) (PublicKey, PrivateKey, error) { + if rand == nil { + rand = cryptorand.Reader + } + + seed := make([]byte, SeedSize) + if _, err := io.ReadFull(rand, seed); err != nil { + return nil, nil, err + } + + privateKey := NewKeyFromSeed(seed) + publicKey := make([]byte, PublicKeySize) + copy(publicKey, privateKey[32:]) + + return publicKey, privateKey, nil +} + +// NewKeyFromSeed calculates a private key from a seed. It will panic if +// len(seed) is not SeedSize. This function is provided for interoperability +// with RFC 8032. RFC 8032's private keys correspond to seeds in this +// package. +func NewKeyFromSeed(seed []byte) PrivateKey { + if l := len(seed); l != SeedSize { + panic("ed25519: bad seed length: " + strconv.Itoa(l)) + } + + digest := sha512.Sum512(seed) + digest[0] &= 248 + digest[31] &= 127 + digest[31] |= 64 + + var A edwards25519.ExtendedGroupElement + var hBytes [32]byte + copy(hBytes[:], digest[:]) + edwards25519.GeScalarMultBase(&A, &hBytes) + var publicKeyBytes [32]byte + A.ToBytes(&publicKeyBytes) + + privateKey := make([]byte, PrivateKeySize) + copy(privateKey, seed) + copy(privateKey[32:], publicKeyBytes[:]) + + return privateKey +} + +// Sign signs the message with privateKey and returns a signature. It will +// panic if len(privateKey) is not PrivateKeySize. +func Sign(privateKey PrivateKey, message []byte) []byte { + if l := len(privateKey); l != PrivateKeySize { + panic("ed25519: bad private key length: " + strconv.Itoa(l)) + } + + h := sha512.New() + h.Write(privateKey[:32]) + + var digest1, messageDigest, hramDigest [64]byte + var expandedSecretKey [32]byte + h.Sum(digest1[:0]) + copy(expandedSecretKey[:], digest1[:]) + expandedSecretKey[0] &= 248 + expandedSecretKey[31] &= 63 + expandedSecretKey[31] |= 64 + + h.Reset() + h.Write(digest1[32:]) + h.Write(message) + h.Sum(messageDigest[:0]) + + var messageDigestReduced [32]byte + edwards25519.ScReduce(&messageDigestReduced, &messageDigest) + var R edwards25519.ExtendedGroupElement + edwards25519.GeScalarMultBase(&R, &messageDigestReduced) + + var encodedR [32]byte + R.ToBytes(&encodedR) + + h.Reset() + h.Write(encodedR[:]) + h.Write(privateKey[32:]) + h.Write(message) + h.Sum(hramDigest[:0]) + var hramDigestReduced [32]byte + edwards25519.ScReduce(&hramDigestReduced, &hramDigest) + + var s [32]byte + edwards25519.ScMulAdd(&s, &hramDigestReduced, &expandedSecretKey, &messageDigestReduced) + + signature := make([]byte, SignatureSize) + copy(signature[:], encodedR[:]) + copy(signature[32:], s[:]) + + return signature +} + +// Verify reports whether sig is a valid signature of message by publicKey. It +// will panic if len(publicKey) is not PublicKeySize. +func Verify(publicKey PublicKey, message, sig []byte) bool { + if l := len(publicKey); l != PublicKeySize { + panic("ed25519: bad public key length: " + strconv.Itoa(l)) + } + + if len(sig) != SignatureSize || sig[63]&224 != 0 { + return false + } + + var A edwards25519.ExtendedGroupElement + var publicKeyBytes [32]byte + copy(publicKeyBytes[:], publicKey) + if !A.FromBytes(&publicKeyBytes) { + return false + } + edwards25519.FeNeg(&A.X, &A.X) + edwards25519.FeNeg(&A.T, &A.T) + + h := sha512.New() + h.Write(sig[:32]) + h.Write(publicKey[:]) + h.Write(message) + var digest [64]byte + h.Sum(digest[:0]) + + var hReduced [32]byte + edwards25519.ScReduce(&hReduced, &digest) + + var R edwards25519.ProjectiveGroupElement + var s [32]byte + copy(s[:], sig[32:]) + + // https://tools.ietf.org/html/rfc8032#section-5.1.7 requires that s be in + // the range [0, order) in order to prevent signature malleability. + if !edwards25519.ScMinimal(&s) { + return false + } + + edwards25519.GeDoubleScalarMultVartime(&R, &hReduced, &A, &s) + + var checkR [32]byte + R.ToBytes(&checkR) + return bytes.Equal(sig[:32], checkR[:]) +} diff --git a/src/crypto/ed25519/ed25519_test.go b/src/crypto/ed25519/ed25519_test.go new file mode 100644 index 0000000000..9c980fceff --- /dev/null +++ b/src/crypto/ed25519/ed25519_test.go @@ -0,0 +1,219 @@ +// 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 ed25519 + +import ( + "bufio" + "bytes" + "compress/gzip" + "crypto" + "crypto/ed25519/internal/edwards25519" + "crypto/rand" + "encoding/hex" + "os" + "strings" + "testing" +) + +type zeroReader struct{} + +func (zeroReader) Read(buf []byte) (int, error) { + for i := range buf { + buf[i] = 0 + } + return len(buf), nil +} + +func TestUnmarshalMarshal(t *testing.T) { + pub, _, _ := GenerateKey(rand.Reader) + + var A edwards25519.ExtendedGroupElement + var pubBytes [32]byte + copy(pubBytes[:], pub) + if !A.FromBytes(&pubBytes) { + t.Fatalf("ExtendedGroupElement.FromBytes failed") + } + + var pub2 [32]byte + A.ToBytes(&pub2) + + if pubBytes != pub2 { + t.Errorf("FromBytes(%v)->ToBytes does not round-trip, got %x\n", pubBytes, pub2) + } +} + +func TestSignVerify(t *testing.T) { + var zero zeroReader + public, private, _ := GenerateKey(zero) + + message := []byte("test message") + sig := Sign(private, message) + if !Verify(public, message, sig) { + t.Errorf("valid signature rejected") + } + + wrongMessage := []byte("wrong message") + if Verify(public, wrongMessage, sig) { + t.Errorf("signature of different message accepted") + } +} + +func TestCryptoSigner(t *testing.T) { + var zero zeroReader + public, private, _ := GenerateKey(zero) + + signer := crypto.Signer(private) + + publicInterface := signer.Public() + public2, ok := publicInterface.(PublicKey) + if !ok { + t.Fatalf("expected PublicKey from Public() but got %T", publicInterface) + } + + if !bytes.Equal(public, public2) { + t.Errorf("public keys do not match: original:%x vs Public():%x", public, public2) + } + + message := []byte("message") + var noHash crypto.Hash + signature, err := signer.Sign(zero, message, noHash) + if err != nil { + t.Fatalf("error from Sign(): %s", err) + } + + if !Verify(public, message, signature) { + t.Errorf("Verify failed on signature from Sign()") + } +} + +func TestGolden(t *testing.T) { + // sign.input.gz is a selection of test cases from + // https://ed25519.cr.yp.to/python/sign.input + testDataZ, err := os.Open("testdata/sign.input.gz") + if err != nil { + t.Fatal(err) + } + defer testDataZ.Close() + testData, err := gzip.NewReader(testDataZ) + if err != nil { + t.Fatal(err) + } + defer testData.Close() + + scanner := bufio.NewScanner(testData) + lineNo := 0 + + for scanner.Scan() { + lineNo++ + + line := scanner.Text() + parts := strings.Split(line, ":") + if len(parts) != 5 { + t.Fatalf("bad number of parts on line %d", lineNo) + } + + privBytes, _ := hex.DecodeString(parts[0]) + pubKey, _ := hex.DecodeString(parts[1]) + msg, _ := hex.DecodeString(parts[2]) + sig, _ := hex.DecodeString(parts[3]) + // The signatures in the test vectors also include the message + // at the end, but we just want R and S. + sig = sig[:SignatureSize] + + if l := len(pubKey); l != PublicKeySize { + t.Fatalf("bad public key length on line %d: got %d bytes", lineNo, l) + } + + var priv [PrivateKeySize]byte + copy(priv[:], privBytes) + copy(priv[32:], pubKey) + + sig2 := Sign(priv[:], msg) + if !bytes.Equal(sig, sig2[:]) { + t.Errorf("different signature result on line %d: %x vs %x", lineNo, sig, sig2) + } + + if !Verify(pubKey, msg, sig2) { + t.Errorf("signature failed to verify on line %d", lineNo) + } + + priv2 := NewKeyFromSeed(priv[:32]) + if !bytes.Equal(priv[:], priv2) { + t.Errorf("recreating key pair gave different private key on line %d: %x vs %x", lineNo, priv[:], priv2) + } + + if pubKey2 := priv2.Public().(PublicKey); !bytes.Equal(pubKey, pubKey2) { + t.Errorf("recreating key pair gave different public key on line %d: %x vs %x", lineNo, pubKey, pubKey2) + } + + if seed := priv2.Seed(); !bytes.Equal(priv[:32], seed) { + t.Errorf("recreating key pair gave different seed on line %d: %x vs %x", lineNo, priv[:32], seed) + } + } + + if err := scanner.Err(); err != nil { + t.Fatalf("error reading test data: %s", err) + } +} + +func TestMalleability(t *testing.T) { + // https://tools.ietf.org/html/rfc8032#section-5.1.7 adds an additional test + // that s be in [0, order). This prevents someone from adding a multiple of + // order to s and obtaining a second valid signature for the same message. + msg := []byte{0x54, 0x65, 0x73, 0x74} + sig := []byte{ + 0x7c, 0x38, 0xe0, 0x26, 0xf2, 0x9e, 0x14, 0xaa, 0xbd, 0x05, 0x9a, + 0x0f, 0x2d, 0xb8, 0xb0, 0xcd, 0x78, 0x30, 0x40, 0x60, 0x9a, 0x8b, + 0xe6, 0x84, 0xdb, 0x12, 0xf8, 0x2a, 0x27, 0x77, 0x4a, 0xb0, 0x67, + 0x65, 0x4b, 0xce, 0x38, 0x32, 0xc2, 0xd7, 0x6f, 0x8f, 0x6f, 0x5d, + 0xaf, 0xc0, 0x8d, 0x93, 0x39, 0xd4, 0xee, 0xf6, 0x76, 0x57, 0x33, + 0x36, 0xa5, 0xc5, 0x1e, 0xb6, 0xf9, 0x46, 0xb3, 0x1d, + } + publicKey := []byte{ + 0x7d, 0x4d, 0x0e, 0x7f, 0x61, 0x53, 0xa6, 0x9b, 0x62, 0x42, 0xb5, + 0x22, 0xab, 0xbe, 0xe6, 0x85, 0xfd, 0xa4, 0x42, 0x0f, 0x88, 0x34, + 0xb1, 0x08, 0xc3, 0xbd, 0xae, 0x36, 0x9e, 0xf5, 0x49, 0xfa, + } + + if Verify(publicKey, msg, sig) { + t.Fatal("non-canonical signature accepted") + } +} + +func BenchmarkKeyGeneration(b *testing.B) { + var zero zeroReader + for i := 0; i < b.N; i++ { + if _, _, err := GenerateKey(zero); err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkSigning(b *testing.B) { + var zero zeroReader + _, priv, err := GenerateKey(zero) + if err != nil { + b.Fatal(err) + } + message := []byte("Hello, world!") + b.ResetTimer() + for i := 0; i < b.N; i++ { + Sign(priv, message) + } +} + +func BenchmarkVerification(b *testing.B) { + var zero zeroReader + pub, priv, err := GenerateKey(zero) + if err != nil { + b.Fatal(err) + } + message := []byte("Hello, world!") + signature := Sign(priv, message) + b.ResetTimer() + for i := 0; i < b.N; i++ { + Verify(pub, message, signature) + } +} diff --git a/src/crypto/ed25519/internal/edwards25519/const.go b/src/crypto/ed25519/internal/edwards25519/const.go new file mode 100644 index 0000000000..e39f086c1d --- /dev/null +++ b/src/crypto/ed25519/internal/edwards25519/const.go @@ -0,0 +1,1422 @@ +// 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 edwards25519 + +// These values are from the public domain, “ref10†implementation of ed25519 +// from SUPERCOP. + +// d is a constant in the Edwards curve equation. +var d = FieldElement{ + -10913610, 13857413, -15372611, 6949391, 114729, -8787816, -6275908, -3247719, -18696448, -12055116, +} + +// d2 is 2*d. +var d2 = FieldElement{ + -21827239, -5839606, -30745221, 13898782, 229458, 15978800, -12551817, -6495438, 29715968, 9444199, +} + +// SqrtM1 is the square-root of -1 in the field. +var SqrtM1 = FieldElement{ + -32595792, -7943725, 9377950, 3500415, 12389472, -272473, -25146209, -2005654, 326686, 11406482, +} + +// A is a constant in the Montgomery-form of curve25519. +var A = FieldElement{ + 486662, 0, 0, 0, 0, 0, 0, 0, 0, 0, +} + +// bi contains precomputed multiples of the base-point. See the Ed25519 paper +// for a discussion about how these values are used. +var bi = [8]PreComputedGroupElement{ + { + FieldElement{25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605}, + FieldElement{-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378}, + FieldElement{-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546}, + }, + { + FieldElement{15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024}, + FieldElement{16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574}, + FieldElement{30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357}, + }, + { + FieldElement{10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380}, + FieldElement{4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306}, + FieldElement{19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942}, + }, + { + FieldElement{5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766}, + FieldElement{-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701}, + FieldElement{28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300}, + }, + { + FieldElement{-22518993, -6692182, 14201702, -8745502, -23510406, 8844726, 18474211, -1361450, -13062696, 13821877}, + FieldElement{-6455177, -7839871, 3374702, -4740862, -27098617, -10571707, 31655028, -7212327, 18853322, -14220951}, + FieldElement{4566830, -12963868, -28974889, -12240689, -7602672, -2830569, -8514358, -10431137, 2207753, -3209784}, + }, + { + FieldElement{-25154831, -4185821, 29681144, 7868801, -6854661, -9423865, -12437364, -663000, -31111463, -16132436}, + FieldElement{25576264, -2703214, 7349804, -11814844, 16472782, 9300885, 3844789, 15725684, 171356, 6466918}, + FieldElement{23103977, 13316479, 9739013, -16149481, 817875, -15038942, 8965339, -14088058, -30714912, 16193877}, + }, + { + FieldElement{-33521811, 3180713, -2394130, 14003687, -16903474, -16270840, 17238398, 4729455, -18074513, 9256800}, + FieldElement{-25182317, -4174131, 32336398, 5036987, -21236817, 11360617, 22616405, 9761698, -19827198, 630305}, + FieldElement{-13720693, 2639453, -24237460, -7406481, 9494427, -5774029, -6554551, -15960994, -2449256, -14291300}, + }, + { + FieldElement{-3151181, -5046075, 9282714, 6866145, -31907062, -863023, -18940575, 15033784, 25105118, -7894876}, + FieldElement{-24326370, 15950226, -31801215, -14592823, -11662737, -5090925, 1573892, -2625887, 2198790, -15804619}, + FieldElement{-3099351, 10324967, -2241613, 7453183, -5446979, -2735503, -13812022, -16236442, -32461234, -12290683}, + }, +} + +// base contains precomputed multiples of the base-point. See the Ed25519 paper +// for a discussion about how these values are used. +var base = [32][8]PreComputedGroupElement{ + { + { + FieldElement{25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605}, + FieldElement{-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378}, + FieldElement{-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546}, + }, + { + FieldElement{-12815894, -12976347, -21581243, 11784320, -25355658, -2750717, -11717903, -3814571, -358445, -10211303}, + FieldElement{-21703237, 6903825, 27185491, 6451973, -29577724, -9554005, -15616551, 11189268, -26829678, -5319081}, + FieldElement{26966642, 11152617, 32442495, 15396054, 14353839, -12752335, -3128826, -9541118, -15472047, -4166697}, + }, + { + FieldElement{15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024}, + FieldElement{16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574}, + FieldElement{30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357}, + }, + { + FieldElement{-17036878, 13921892, 10945806, -6033431, 27105052, -16084379, -28926210, 15006023, 3284568, -6276540}, + FieldElement{23599295, -8306047, -11193664, -7687416, 13236774, 10506355, 7464579, 9656445, 13059162, 10374397}, + FieldElement{7798556, 16710257, 3033922, 2874086, 28997861, 2835604, 32406664, -3839045, -641708, -101325}, + }, + { + FieldElement{10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380}, + FieldElement{4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306}, + FieldElement{19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942}, + }, + { + FieldElement{-15371964, -12862754, 32573250, 4720197, -26436522, 5875511, -19188627, -15224819, -9818940, -12085777}, + FieldElement{-8549212, 109983, 15149363, 2178705, 22900618, 4543417, 3044240, -15689887, 1762328, 14866737}, + FieldElement{-18199695, -15951423, -10473290, 1707278, -17185920, 3916101, -28236412, 3959421, 27914454, 4383652}, + }, + { + FieldElement{5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766}, + FieldElement{-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701}, + FieldElement{28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300}, + }, + { + FieldElement{14499471, -2729599, -33191113, -4254652, 28494862, 14271267, 30290735, 10876454, -33154098, 2381726}, + FieldElement{-7195431, -2655363, -14730155, 462251, -27724326, 3941372, -6236617, 3696005, -32300832, 15351955}, + FieldElement{27431194, 8222322, 16448760, -3907995, -18707002, 11938355, -32961401, -2970515, 29551813, 10109425}, + }, + }, + { + { + FieldElement{-13657040, -13155431, -31283750, 11777098, 21447386, 6519384, -2378284, -1627556, 10092783, -4764171}, + FieldElement{27939166, 14210322, 4677035, 16277044, -22964462, -12398139, -32508754, 12005538, -17810127, 12803510}, + FieldElement{17228999, -15661624, -1233527, 300140, -1224870, -11714777, 30364213, -9038194, 18016357, 4397660}, + }, + { + FieldElement{-10958843, -7690207, 4776341, -14954238, 27850028, -15602212, -26619106, 14544525, -17477504, 982639}, + FieldElement{29253598, 15796703, -2863982, -9908884, 10057023, 3163536, 7332899, -4120128, -21047696, 9934963}, + FieldElement{5793303, 16271923, -24131614, -10116404, 29188560, 1206517, -14747930, 4559895, -30123922, -10897950}, + }, + { + FieldElement{-27643952, -11493006, 16282657, -11036493, 28414021, -15012264, 24191034, 4541697, -13338309, 5500568}, + FieldElement{12650548, -1497113, 9052871, 11355358, -17680037, -8400164, -17430592, 12264343, 10874051, 13524335}, + FieldElement{25556948, -3045990, 714651, 2510400, 23394682, -10415330, 33119038, 5080568, -22528059, 5376628}, + }, + { + FieldElement{-26088264, -4011052, -17013699, -3537628, -6726793, 1920897, -22321305, -9447443, 4535768, 1569007}, + FieldElement{-2255422, 14606630, -21692440, -8039818, 28430649, 8775819, -30494562, 3044290, 31848280, 12543772}, + FieldElement{-22028579, 2943893, -31857513, 6777306, 13784462, -4292203, -27377195, -2062731, 7718482, 14474653}, + }, + { + FieldElement{2385315, 2454213, -22631320, 46603, -4437935, -15680415, 656965, -7236665, 24316168, -5253567}, + FieldElement{13741529, 10911568, -33233417, -8603737, -20177830, -1033297, 33040651, -13424532, -20729456, 8321686}, + FieldElement{21060490, -2212744, 15712757, -4336099, 1639040, 10656336, 23845965, -11874838, -9984458, 608372}, + }, + { + FieldElement{-13672732, -15087586, -10889693, -7557059, -6036909, 11305547, 1123968, -6780577, 27229399, 23887}, + FieldElement{-23244140, -294205, -11744728, 14712571, -29465699, -2029617, 12797024, -6440308, -1633405, 16678954}, + FieldElement{-29500620, 4770662, -16054387, 14001338, 7830047, 9564805, -1508144, -4795045, -17169265, 4904953}, + }, + { + FieldElement{24059557, 14617003, 19037157, -15039908, 19766093, -14906429, 5169211, 16191880, 2128236, -4326833}, + FieldElement{-16981152, 4124966, -8540610, -10653797, 30336522, -14105247, -29806336, 916033, -6882542, -2986532}, + FieldElement{-22630907, 12419372, -7134229, -7473371, -16478904, 16739175, 285431, 2763829, 15736322, 4143876}, + }, + { + FieldElement{2379352, 11839345, -4110402, -5988665, 11274298, 794957, 212801, -14594663, 23527084, -16458268}, + FieldElement{33431127, -11130478, -17838966, -15626900, 8909499, 8376530, -32625340, 4087881, -15188911, -14416214}, + FieldElement{1767683, 7197987, -13205226, -2022635, -13091350, 448826, 5799055, 4357868, -4774191, -16323038}, + }, + }, + { + { + FieldElement{6721966, 13833823, -23523388, -1551314, 26354293, -11863321, 23365147, -3949732, 7390890, 2759800}, + FieldElement{4409041, 2052381, 23373853, 10530217, 7676779, -12885954, 21302353, -4264057, 1244380, -12919645}, + FieldElement{-4421239, 7169619, 4982368, -2957590, 30256825, -2777540, 14086413, 9208236, 15886429, 16489664}, + }, + { + FieldElement{1996075, 10375649, 14346367, 13311202, -6874135, -16438411, -13693198, 398369, -30606455, -712933}, + FieldElement{-25307465, 9795880, -2777414, 14878809, -33531835, 14780363, 13348553, 12076947, -30836462, 5113182}, + FieldElement{-17770784, 11797796, 31950843, 13929123, -25888302, 12288344, -30341101, -7336386, 13847711, 5387222}, + }, + { + FieldElement{-18582163, -3416217, 17824843, -2340966, 22744343, -10442611, 8763061, 3617786, -19600662, 10370991}, + FieldElement{20246567, -14369378, 22358229, -543712, 18507283, -10413996, 14554437, -8746092, 32232924, 16763880}, + FieldElement{9648505, 10094563, 26416693, 14745928, -30374318, -6472621, 11094161, 15689506, 3140038, -16510092}, + }, + { + FieldElement{-16160072, 5472695, 31895588, 4744994, 8823515, 10365685, -27224800, 9448613, -28774454, 366295}, + FieldElement{19153450, 11523972, -11096490, -6503142, -24647631, 5420647, 28344573, 8041113, 719605, 11671788}, + FieldElement{8678025, 2694440, -6808014, 2517372, 4964326, 11152271, -15432916, -15266516, 27000813, -10195553}, + }, + { + FieldElement{-15157904, 7134312, 8639287, -2814877, -7235688, 10421742, 564065, 5336097, 6750977, -14521026}, + FieldElement{11836410, -3979488, 26297894, 16080799, 23455045, 15735944, 1695823, -8819122, 8169720, 16220347}, + FieldElement{-18115838, 8653647, 17578566, -6092619, -8025777, -16012763, -11144307, -2627664, -5990708, -14166033}, + }, + { + FieldElement{-23308498, -10968312, 15213228, -10081214, -30853605, -11050004, 27884329, 2847284, 2655861, 1738395}, + FieldElement{-27537433, -14253021, -25336301, -8002780, -9370762, 8129821, 21651608, -3239336, -19087449, -11005278}, + FieldElement{1533110, 3437855, 23735889, 459276, 29970501, 11335377, 26030092, 5821408, 10478196, 8544890}, + }, + { + FieldElement{32173121, -16129311, 24896207, 3921497, 22579056, -3410854, 19270449, 12217473, 17789017, -3395995}, + FieldElement{-30552961, -2228401, -15578829, -10147201, 13243889, 517024, 15479401, -3853233, 30460520, 1052596}, + FieldElement{-11614875, 13323618, 32618793, 8175907, -15230173, 12596687, 27491595, -4612359, 3179268, -9478891}, + }, + { + FieldElement{31947069, -14366651, -4640583, -15339921, -15125977, -6039709, -14756777, -16411740, 19072640, -9511060}, + FieldElement{11685058, 11822410, 3158003, -13952594, 33402194, -4165066, 5977896, -5215017, 473099, 5040608}, + FieldElement{-20290863, 8198642, -27410132, 11602123, 1290375, -2799760, 28326862, 1721092, -19558642, -3131606}, + }, + }, + { + { + FieldElement{7881532, 10687937, 7578723, 7738378, -18951012, -2553952, 21820786, 8076149, -27868496, 11538389}, + FieldElement{-19935666, 3899861, 18283497, -6801568, -15728660, -11249211, 8754525, 7446702, -5676054, 5797016}, + FieldElement{-11295600, -3793569, -15782110, -7964573, 12708869, -8456199, 2014099, -9050574, -2369172, -5877341}, + }, + { + FieldElement{-22472376, -11568741, -27682020, 1146375, 18956691, 16640559, 1192730, -3714199, 15123619, 10811505}, + FieldElement{14352098, -3419715, -18942044, 10822655, 32750596, 4699007, -70363, 15776356, -28886779, -11974553}, + FieldElement{-28241164, -8072475, -4978962, -5315317, 29416931, 1847569, -20654173, -16484855, 4714547, -9600655}, + }, + { + FieldElement{15200332, 8368572, 19679101, 15970074, -31872674, 1959451, 24611599, -4543832, -11745876, 12340220}, + FieldElement{12876937, -10480056, 33134381, 6590940, -6307776, 14872440, 9613953, 8241152, 15370987, 9608631}, + FieldElement{-4143277, -12014408, 8446281, -391603, 4407738, 13629032, -7724868, 15866074, -28210621, -8814099}, + }, + { + FieldElement{26660628, -15677655, 8393734, 358047, -7401291, 992988, -23904233, 858697, 20571223, 8420556}, + FieldElement{14620715, 13067227, -15447274, 8264467, 14106269, 15080814, 33531827, 12516406, -21574435, -12476749}, + FieldElement{236881, 10476226, 57258, -14677024, 6472998, 2466984, 17258519, 7256740, 8791136, 15069930}, + }, + { + FieldElement{1276410, -9371918, 22949635, -16322807, -23493039, -5702186, 14711875, 4874229, -30663140, -2331391}, + FieldElement{5855666, 4990204, -13711848, 7294284, -7804282, 1924647, -1423175, -7912378, -33069337, 9234253}, + FieldElement{20590503, -9018988, 31529744, -7352666, -2706834, 10650548, 31559055, -11609587, 18979186, 13396066}, + }, + { + FieldElement{24474287, 4968103, 22267082, 4407354, 24063882, -8325180, -18816887, 13594782, 33514650, 7021958}, + FieldElement{-11566906, -6565505, -21365085, 15928892, -26158305, 4315421, -25948728, -3916677, -21480480, 12868082}, + FieldElement{-28635013, 13504661, 19988037, -2132761, 21078225, 6443208, -21446107, 2244500, -12455797, -8089383}, + }, + { + FieldElement{-30595528, 13793479, -5852820, 319136, -25723172, -6263899, 33086546, 8957937, -15233648, 5540521}, + FieldElement{-11630176, -11503902, -8119500, -7643073, 2620056, 1022908, -23710744, -1568984, -16128528, -14962807}, + FieldElement{23152971, 775386, 27395463, 14006635, -9701118, 4649512, 1689819, 892185, -11513277, -15205948}, + }, + { + FieldElement{9770129, 9586738, 26496094, 4324120, 1556511, -3550024, 27453819, 4763127, -19179614, 5867134}, + FieldElement{-32765025, 1927590, 31726409, -4753295, 23962434, -16019500, 27846559, 5931263, -29749703, -16108455}, + FieldElement{27461885, -2977536, 22380810, 1815854, -23033753, -3031938, 7283490, -15148073, -19526700, 7734629}, + }, + }, + { + { + FieldElement{-8010264, -9590817, -11120403, 6196038, 29344158, -13430885, 7585295, -3176626, 18549497, 15302069}, + FieldElement{-32658337, -6171222, -7672793, -11051681, 6258878, 13504381, 10458790, -6418461, -8872242, 8424746}, + FieldElement{24687205, 8613276, -30667046, -3233545, 1863892, -1830544, 19206234, 7134917, -11284482, -828919}, + }, + { + FieldElement{11334899, -9218022, 8025293, 12707519, 17523892, -10476071, 10243738, -14685461, -5066034, 16498837}, + FieldElement{8911542, 6887158, -9584260, -6958590, 11145641, -9543680, 17303925, -14124238, 6536641, 10543906}, + FieldElement{-28946384, 15479763, -17466835, 568876, -1497683, 11223454, -2669190, -16625574, -27235709, 8876771}, + }, + { + FieldElement{-25742899, -12566864, -15649966, -846607, -33026686, -796288, -33481822, 15824474, -604426, -9039817}, + FieldElement{10330056, 70051, 7957388, -9002667, 9764902, 15609756, 27698697, -4890037, 1657394, 3084098}, + FieldElement{10477963, -7470260, 12119566, -13250805, 29016247, -5365589, 31280319, 14396151, -30233575, 15272409}, + }, + { + FieldElement{-12288309, 3169463, 28813183, 16658753, 25116432, -5630466, -25173957, -12636138, -25014757, 1950504}, + FieldElement{-26180358, 9489187, 11053416, -14746161, -31053720, 5825630, -8384306, -8767532, 15341279, 8373727}, + FieldElement{28685821, 7759505, -14378516, -12002860, -31971820, 4079242, 298136, -10232602, -2878207, 15190420}, + }, + { + FieldElement{-32932876, 13806336, -14337485, -15794431, -24004620, 10940928, 8669718, 2742393, -26033313, -6875003}, + FieldElement{-1580388, -11729417, -25979658, -11445023, -17411874, -10912854, 9291594, -16247779, -12154742, 6048605}, + FieldElement{-30305315, 14843444, 1539301, 11864366, 20201677, 1900163, 13934231, 5128323, 11213262, 9168384}, + }, + { + FieldElement{-26280513, 11007847, 19408960, -940758, -18592965, -4328580, -5088060, -11105150, 20470157, -16398701}, + FieldElement{-23136053, 9282192, 14855179, -15390078, -7362815, -14408560, -22783952, 14461608, 14042978, 5230683}, + FieldElement{29969567, -2741594, -16711867, -8552442, 9175486, -2468974, 21556951, 3506042, -5933891, -12449708}, + }, + { + FieldElement{-3144746, 8744661, 19704003, 4581278, -20430686, 6830683, -21284170, 8971513, -28539189, 15326563}, + FieldElement{-19464629, 10110288, -17262528, -3503892, -23500387, 1355669, -15523050, 15300988, -20514118, 9168260}, + FieldElement{-5353335, 4488613, -23803248, 16314347, 7780487, -15638939, -28948358, 9601605, 33087103, -9011387}, + }, + { + FieldElement{-19443170, -15512900, -20797467, -12445323, -29824447, 10229461, -27444329, -15000531, -5996870, 15664672}, + FieldElement{23294591, -16632613, -22650781, -8470978, 27844204, 11461195, 13099750, -2460356, 18151676, 13417686}, + FieldElement{-24722913, -4176517, -31150679, 5988919, -26858785, 6685065, 1661597, -12551441, 15271676, -15452665}, + }, + }, + { + { + FieldElement{11433042, -13228665, 8239631, -5279517, -1985436, -725718, -18698764, 2167544, -6921301, -13440182}, + FieldElement{-31436171, 15575146, 30436815, 12192228, -22463353, 9395379, -9917708, -8638997, 12215110, 12028277}, + FieldElement{14098400, 6555944, 23007258, 5757252, -15427832, -12950502, 30123440, 4617780, -16900089, -655628}, + }, + { + FieldElement{-4026201, -15240835, 11893168, 13718664, -14809462, 1847385, -15819999, 10154009, 23973261, -12684474}, + FieldElement{-26531820, -3695990, -1908898, 2534301, -31870557, -16550355, 18341390, -11419951, 32013174, -10103539}, + FieldElement{-25479301, 10876443, -11771086, -14625140, -12369567, 1838104, 21911214, 6354752, 4425632, -837822}, + }, + { + FieldElement{-10433389, -14612966, 22229858, -3091047, -13191166, 776729, -17415375, -12020462, 4725005, 14044970}, + FieldElement{19268650, -7304421, 1555349, 8692754, -21474059, -9910664, 6347390, -1411784, -19522291, -16109756}, + FieldElement{-24864089, 12986008, -10898878, -5558584, -11312371, -148526, 19541418, 8180106, 9282262, 10282508}, + }, + { + FieldElement{-26205082, 4428547, -8661196, -13194263, 4098402, -14165257, 15522535, 8372215, 5542595, -10702683}, + FieldElement{-10562541, 14895633, 26814552, -16673850, -17480754, -2489360, -2781891, 6993761, -18093885, 10114655}, + FieldElement{-20107055, -929418, 31422704, 10427861, -7110749, 6150669, -29091755, -11529146, 25953725, -106158}, + }, + { + FieldElement{-4234397, -8039292, -9119125, 3046000, 2101609, -12607294, 19390020, 6094296, -3315279, 12831125}, + FieldElement{-15998678, 7578152, 5310217, 14408357, -33548620, -224739, 31575954, 6326196, 7381791, -2421839}, + FieldElement{-20902779, 3296811, 24736065, -16328389, 18374254, 7318640, 6295303, 8082724, -15362489, 12339664}, + }, + { + FieldElement{27724736, 2291157, 6088201, -14184798, 1792727, 5857634, 13848414, 15768922, 25091167, 14856294}, + FieldElement{-18866652, 8331043, 24373479, 8541013, -701998, -9269457, 12927300, -12695493, -22182473, -9012899}, + FieldElement{-11423429, -5421590, 11632845, 3405020, 30536730, -11674039, -27260765, 13866390, 30146206, 9142070}, + }, + { + FieldElement{3924129, -15307516, -13817122, -10054960, 12291820, -668366, -27702774, 9326384, -8237858, 4171294}, + FieldElement{-15921940, 16037937, 6713787, 16606682, -21612135, 2790944, 26396185, 3731949, 345228, -5462949}, + FieldElement{-21327538, 13448259, 25284571, 1143661, 20614966, -8849387, 2031539, -12391231, -16253183, -13582083}, + }, + { + FieldElement{31016211, -16722429, 26371392, -14451233, -5027349, 14854137, 17477601, 3842657, 28012650, -16405420}, + FieldElement{-5075835, 9368966, -8562079, -4600902, -15249953, 6970560, -9189873, 16292057, -8867157, 3507940}, + FieldElement{29439664, 3537914, 23333589, 6997794, -17555561, -11018068, -15209202, -15051267, -9164929, 6580396}, + }, + }, + { + { + FieldElement{-12185861, -7679788, 16438269, 10826160, -8696817, -6235611, 17860444, -9273846, -2095802, 9304567}, + FieldElement{20714564, -4336911, 29088195, 7406487, 11426967, -5095705, 14792667, -14608617, 5289421, -477127}, + FieldElement{-16665533, -10650790, -6160345, -13305760, 9192020, -1802462, 17271490, 12349094, 26939669, -3752294}, + }, + { + FieldElement{-12889898, 9373458, 31595848, 16374215, 21471720, 13221525, -27283495, -12348559, -3698806, 117887}, + FieldElement{22263325, -6560050, 3984570, -11174646, -15114008, -566785, 28311253, 5358056, -23319780, 541964}, + FieldElement{16259219, 3261970, 2309254, -15534474, -16885711, -4581916, 24134070, -16705829, -13337066, -13552195}, + }, + { + FieldElement{9378160, -13140186, -22845982, -12745264, 28198281, -7244098, -2399684, -717351, 690426, 14876244}, + FieldElement{24977353, -314384, -8223969, -13465086, 28432343, -1176353, -13068804, -12297348, -22380984, 6618999}, + FieldElement{-1538174, 11685646, 12944378, 13682314, -24389511, -14413193, 8044829, -13817328, 32239829, -5652762}, + }, + { + FieldElement{-18603066, 4762990, -926250, 8885304, -28412480, -3187315, 9781647, -10350059, 32779359, 5095274}, + FieldElement{-33008130, -5214506, -32264887, -3685216, 9460461, -9327423, -24601656, 14506724, 21639561, -2630236}, + FieldElement{-16400943, -13112215, 25239338, 15531969, 3987758, -4499318, -1289502, -6863535, 17874574, 558605}, + }, + { + FieldElement{-13600129, 10240081, 9171883, 16131053, -20869254, 9599700, 33499487, 5080151, 2085892, 5119761}, + FieldElement{-22205145, -2519528, -16381601, 414691, -25019550, 2170430, 30634760, -8363614, -31999993, -5759884}, + FieldElement{-6845704, 15791202, 8550074, -1312654, 29928809, -12092256, 27534430, -7192145, -22351378, 12961482}, + }, + { + FieldElement{-24492060, -9570771, 10368194, 11582341, -23397293, -2245287, 16533930, 8206996, -30194652, -5159638}, + FieldElement{-11121496, -3382234, 2307366, 6362031, -135455, 8868177, -16835630, 7031275, 7589640, 8945490}, + FieldElement{-32152748, 8917967, 6661220, -11677616, -1192060, -15793393, 7251489, -11182180, 24099109, -14456170}, + }, + { + FieldElement{5019558, -7907470, 4244127, -14714356, -26933272, 6453165, -19118182, -13289025, -6231896, -10280736}, + FieldElement{10853594, 10721687, 26480089, 5861829, -22995819, 1972175, -1866647, -10557898, -3363451, -6441124}, + FieldElement{-17002408, 5906790, 221599, -6563147, 7828208, -13248918, 24362661, -2008168, -13866408, 7421392}, + }, + { + FieldElement{8139927, -6546497, 32257646, -5890546, 30375719, 1886181, -21175108, 15441252, 28826358, -4123029}, + FieldElement{6267086, 9695052, 7709135, -16603597, -32869068, -1886135, 14795160, -7840124, 13746021, -1742048}, + FieldElement{28584902, 7787108, -6732942, -15050729, 22846041, -7571236, -3181936, -363524, 4771362, -8419958}, + }, + }, + { + { + FieldElement{24949256, 6376279, -27466481, -8174608, -18646154, -9930606, 33543569, -12141695, 3569627, 11342593}, + FieldElement{26514989, 4740088, 27912651, 3697550, 19331575, -11472339, 6809886, 4608608, 7325975, -14801071}, + FieldElement{-11618399, -14554430, -24321212, 7655128, -1369274, 5214312, -27400540, 10258390, -17646694, -8186692}, + }, + { + FieldElement{11431204, 15823007, 26570245, 14329124, 18029990, 4796082, -31446179, 15580664, 9280358, -3973687}, + FieldElement{-160783, -10326257, -22855316, -4304997, -20861367, -13621002, -32810901, -11181622, -15545091, 4387441}, + FieldElement{-20799378, 12194512, 3937617, -5805892, -27154820, 9340370, -24513992, 8548137, 20617071, -7482001}, + }, + { + FieldElement{-938825, -3930586, -8714311, 16124718, 24603125, -6225393, -13775352, -11875822, 24345683, 10325460}, + FieldElement{-19855277, -1568885, -22202708, 8714034, 14007766, 6928528, 16318175, -1010689, 4766743, 3552007}, + FieldElement{-21751364, -16730916, 1351763, -803421, -4009670, 3950935, 3217514, 14481909, 10988822, -3994762}, + }, + { + FieldElement{15564307, -14311570, 3101243, 5684148, 30446780, -8051356, 12677127, -6505343, -8295852, 13296005}, + FieldElement{-9442290, 6624296, -30298964, -11913677, -4670981, -2057379, 31521204, 9614054, -30000824, 12074674}, + FieldElement{4771191, -135239, 14290749, -13089852, 27992298, 14998318, -1413936, -1556716, 29832613, -16391035}, + }, + { + FieldElement{7064884, -7541174, -19161962, -5067537, -18891269, -2912736, 25825242, 5293297, -27122660, 13101590}, + FieldElement{-2298563, 2439670, -7466610, 1719965, -27267541, -16328445, 32512469, -5317593, -30356070, -4190957}, + FieldElement{-30006540, 10162316, -33180176, 3981723, -16482138, -13070044, 14413974, 9515896, 19568978, 9628812}, + }, + { + FieldElement{33053803, 199357, 15894591, 1583059, 27380243, -4580435, -17838894, -6106839, -6291786, 3437740}, + FieldElement{-18978877, 3884493, 19469877, 12726490, 15913552, 13614290, -22961733, 70104, 7463304, 4176122}, + FieldElement{-27124001, 10659917, 11482427, -16070381, 12771467, -6635117, -32719404, -5322751, 24216882, 5944158}, + }, + { + FieldElement{8894125, 7450974, -2664149, -9765752, -28080517, -12389115, 19345746, 14680796, 11632993, 5847885}, + FieldElement{26942781, -2315317, 9129564, -4906607, 26024105, 11769399, -11518837, 6367194, -9727230, 4782140}, + FieldElement{19916461, -4828410, -22910704, -11414391, 25606324, -5972441, 33253853, 8220911, 6358847, -1873857}, + }, + { + FieldElement{801428, -2081702, 16569428, 11065167, 29875704, 96627, 7908388, -4480480, -13538503, 1387155}, + FieldElement{19646058, 5720633, -11416706, 12814209, 11607948, 12749789, 14147075, 15156355, -21866831, 11835260}, + FieldElement{19299512, 1155910, 28703737, 14890794, 2925026, 7269399, 26121523, 15467869, -26560550, 5052483}, + }, + }, + { + { + FieldElement{-3017432, 10058206, 1980837, 3964243, 22160966, 12322533, -6431123, -12618185, 12228557, -7003677}, + FieldElement{32944382, 14922211, -22844894, 5188528, 21913450, -8719943, 4001465, 13238564, -6114803, 8653815}, + FieldElement{22865569, -4652735, 27603668, -12545395, 14348958, 8234005, 24808405, 5719875, 28483275, 2841751}, + }, + { + FieldElement{-16420968, -1113305, -327719, -12107856, 21886282, -15552774, -1887966, -315658, 19932058, -12739203}, + FieldElement{-11656086, 10087521, -8864888, -5536143, -19278573, -3055912, 3999228, 13239134, -4777469, -13910208}, + FieldElement{1382174, -11694719, 17266790, 9194690, -13324356, 9720081, 20403944, 11284705, -14013818, 3093230}, + }, + { + FieldElement{16650921, -11037932, -1064178, 1570629, -8329746, 7352753, -302424, 16271225, -24049421, -6691850}, + FieldElement{-21911077, -5927941, -4611316, -5560156, -31744103, -10785293, 24123614, 15193618, -21652117, -16739389}, + FieldElement{-9935934, -4289447, -25279823, 4372842, 2087473, 10399484, 31870908, 14690798, 17361620, 11864968}, + }, + { + FieldElement{-11307610, 6210372, 13206574, 5806320, -29017692, -13967200, -12331205, -7486601, -25578460, -16240689}, + FieldElement{14668462, -12270235, 26039039, 15305210, 25515617, 4542480, 10453892, 6577524, 9145645, -6443880}, + FieldElement{5974874, 3053895, -9433049, -10385191, -31865124, 3225009, -7972642, 3936128, -5652273, -3050304}, + }, + { + FieldElement{30625386, -4729400, -25555961, -12792866, -20484575, 7695099, 17097188, -16303496, -27999779, 1803632}, + FieldElement{-3553091, 9865099, -5228566, 4272701, -5673832, -16689700, 14911344, 12196514, -21405489, 7047412}, + FieldElement{20093277, 9920966, -11138194, -5343857, 13161587, 12044805, -32856851, 4124601, -32343828, -10257566}, + }, + { + FieldElement{-20788824, 14084654, -13531713, 7842147, 19119038, -13822605, 4752377, -8714640, -21679658, 2288038}, + FieldElement{-26819236, -3283715, 29965059, 3039786, -14473765, 2540457, 29457502, 14625692, -24819617, 12570232}, + FieldElement{-1063558, -11551823, 16920318, 12494842, 1278292, -5869109, -21159943, -3498680, -11974704, 4724943}, + }, + { + FieldElement{17960970, -11775534, -4140968, -9702530, -8876562, -1410617, -12907383, -8659932, -29576300, 1903856}, + FieldElement{23134274, -14279132, -10681997, -1611936, 20684485, 15770816, -12989750, 3190296, 26955097, 14109738}, + FieldElement{15308788, 5320727, -30113809, -14318877, 22902008, 7767164, 29425325, -11277562, 31960942, 11934971}, + }, + { + FieldElement{-27395711, 8435796, 4109644, 12222639, -24627868, 14818669, 20638173, 4875028, 10491392, 1379718}, + FieldElement{-13159415, 9197841, 3875503, -8936108, -1383712, -5879801, 33518459, 16176658, 21432314, 12180697}, + FieldElement{-11787308, 11500838, 13787581, -13832590, -22430679, 10140205, 1465425, 12689540, -10301319, -13872883}, + }, + }, + { + { + FieldElement{5414091, -15386041, -21007664, 9643570, 12834970, 1186149, -2622916, -1342231, 26128231, 6032912}, + FieldElement{-26337395, -13766162, 32496025, -13653919, 17847801, -12669156, 3604025, 8316894, -25875034, -10437358}, + FieldElement{3296484, 6223048, 24680646, -12246460, -23052020, 5903205, -8862297, -4639164, 12376617, 3188849}, + }, + { + FieldElement{29190488, -14659046, 27549113, -1183516, 3520066, -10697301, 32049515, -7309113, -16109234, -9852307}, + FieldElement{-14744486, -9309156, 735818, -598978, -20407687, -5057904, 25246078, -15795669, 18640741, -960977}, + FieldElement{-6928835, -16430795, 10361374, 5642961, 4910474, 12345252, -31638386, -494430, 10530747, 1053335}, + }, + { + FieldElement{-29265967, -14186805, -13538216, -12117373, -19457059, -10655384, -31462369, -2948985, 24018831, 15026644}, + FieldElement{-22592535, -3145277, -2289276, 5953843, -13440189, 9425631, 25310643, 13003497, -2314791, -15145616}, + FieldElement{-27419985, -603321, -8043984, -1669117, -26092265, 13987819, -27297622, 187899, -23166419, -2531735}, + }, + { + FieldElement{-21744398, -13810475, 1844840, 5021428, -10434399, -15911473, 9716667, 16266922, -5070217, 726099}, + FieldElement{29370922, -6053998, 7334071, -15342259, 9385287, 2247707, -13661962, -4839461, 30007388, -15823341}, + FieldElement{-936379, 16086691, 23751945, -543318, -1167538, -5189036, 9137109, 730663, 9835848, 4555336}, + }, + { + FieldElement{-23376435, 1410446, -22253753, -12899614, 30867635, 15826977, 17693930, 544696, -11985298, 12422646}, + FieldElement{31117226, -12215734, -13502838, 6561947, -9876867, -12757670, -5118685, -4096706, 29120153, 13924425}, + FieldElement{-17400879, -14233209, 19675799, -2734756, -11006962, -5858820, -9383939, -11317700, 7240931, -237388}, + }, + { + FieldElement{-31361739, -11346780, -15007447, -5856218, -22453340, -12152771, 1222336, 4389483, 3293637, -15551743}, + FieldElement{-16684801, -14444245, 11038544, 11054958, -13801175, -3338533, -24319580, 7733547, 12796905, -6335822}, + FieldElement{-8759414, -10817836, -25418864, 10783769, -30615557, -9746811, -28253339, 3647836, 3222231, -11160462}, + }, + { + FieldElement{18606113, 1693100, -25448386, -15170272, 4112353, 10045021, 23603893, -2048234, -7550776, 2484985}, + FieldElement{9255317, -3131197, -12156162, -1004256, 13098013, -9214866, 16377220, -2102812, -19802075, -3034702}, + FieldElement{-22729289, 7496160, -5742199, 11329249, 19991973, -3347502, -31718148, 9936966, -30097688, -10618797}, + }, + { + FieldElement{21878590, -5001297, 4338336, 13643897, -3036865, 13160960, 19708896, 5415497, -7360503, -4109293}, + FieldElement{27736861, 10103576, 12500508, 8502413, -3413016, -9633558, 10436918, -1550276, -23659143, -8132100}, + FieldElement{19492550, -12104365, -29681976, -852630, -3208171, 12403437, 30066266, 8367329, 13243957, 8709688}, + }, + }, + { + { + FieldElement{12015105, 2801261, 28198131, 10151021, 24818120, -4743133, -11194191, -5645734, 5150968, 7274186}, + FieldElement{2831366, -12492146, 1478975, 6122054, 23825128, -12733586, 31097299, 6083058, 31021603, -9793610}, + FieldElement{-2529932, -2229646, 445613, 10720828, -13849527, -11505937, -23507731, 16354465, 15067285, -14147707}, + }, + { + FieldElement{7840942, 14037873, -33364863, 15934016, -728213, -3642706, 21403988, 1057586, -19379462, -12403220}, + FieldElement{915865, -16469274, 15608285, -8789130, -24357026, 6060030, -17371319, 8410997, -7220461, 16527025}, + FieldElement{32922597, -556987, 20336074, -16184568, 10903705, -5384487, 16957574, 52992, 23834301, 6588044}, + }, + { + FieldElement{32752030, 11232950, 3381995, -8714866, 22652988, -10744103, 17159699, 16689107, -20314580, -1305992}, + FieldElement{-4689649, 9166776, -25710296, -10847306, 11576752, 12733943, 7924251, -2752281, 1976123, -7249027}, + FieldElement{21251222, 16309901, -2983015, -6783122, 30810597, 12967303, 156041, -3371252, 12331345, -8237197}, + }, + { + FieldElement{8651614, -4477032, -16085636, -4996994, 13002507, 2950805, 29054427, -5106970, 10008136, -4667901}, + FieldElement{31486080, 15114593, -14261250, 12951354, 14369431, -7387845, 16347321, -13662089, 8684155, -10532952}, + FieldElement{19443825, 11385320, 24468943, -9659068, -23919258, 2187569, -26263207, -6086921, 31316348, 14219878}, + }, + { + FieldElement{-28594490, 1193785, 32245219, 11392485, 31092169, 15722801, 27146014, 6992409, 29126555, 9207390}, + FieldElement{32382935, 1110093, 18477781, 11028262, -27411763, -7548111, -4980517, 10843782, -7957600, -14435730}, + FieldElement{2814918, 7836403, 27519878, -7868156, -20894015, -11553689, -21494559, 8550130, 28346258, 1994730}, + }, + { + FieldElement{-19578299, 8085545, -14000519, -3948622, 2785838, -16231307, -19516951, 7174894, 22628102, 8115180}, + FieldElement{-30405132, 955511, -11133838, -15078069, -32447087, -13278079, -25651578, 3317160, -9943017, 930272}, + FieldElement{-15303681, -6833769, 28856490, 1357446, 23421993, 1057177, 24091212, -1388970, -22765376, -10650715}, + }, + { + FieldElement{-22751231, -5303997, -12907607, -12768866, -15811511, -7797053, -14839018, -16554220, -1867018, 8398970}, + FieldElement{-31969310, 2106403, -4736360, 1362501, 12813763, 16200670, 22981545, -6291273, 18009408, -15772772}, + FieldElement{-17220923, -9545221, -27784654, 14166835, 29815394, 7444469, 29551787, -3727419, 19288549, 1325865}, + }, + { + FieldElement{15100157, -15835752, -23923978, -1005098, -26450192, 15509408, 12376730, -3479146, 33166107, -8042750}, + FieldElement{20909231, 13023121, -9209752, 16251778, -5778415, -8094914, 12412151, 10018715, 2213263, -13878373}, + FieldElement{32529814, -11074689, 30361439, -16689753, -9135940, 1513226, 22922121, 6382134, -5766928, 8371348}, + }, + }, + { + { + FieldElement{9923462, 11271500, 12616794, 3544722, -29998368, -1721626, 12891687, -8193132, -26442943, 10486144}, + FieldElement{-22597207, -7012665, 8587003, -8257861, 4084309, -12970062, 361726, 2610596, -23921530, -11455195}, + FieldElement{5408411, -1136691, -4969122, 10561668, 24145918, 14240566, 31319731, -4235541, 19985175, -3436086}, + }, + { + FieldElement{-13994457, 16616821, 14549246, 3341099, 32155958, 13648976, -17577068, 8849297, 65030, 8370684}, + FieldElement{-8320926, -12049626, 31204563, 5839400, -20627288, -1057277, -19442942, 6922164, 12743482, -9800518}, + FieldElement{-2361371, 12678785, 28815050, 4759974, -23893047, 4884717, 23783145, 11038569, 18800704, 255233}, + }, + { + FieldElement{-5269658, -1773886, 13957886, 7990715, 23132995, 728773, 13393847, 9066957, 19258688, -14753793}, + FieldElement{-2936654, -10827535, -10432089, 14516793, -3640786, 4372541, -31934921, 2209390, -1524053, 2055794}, + FieldElement{580882, 16705327, 5468415, -2683018, -30926419, -14696000, -7203346, -8994389, -30021019, 7394435}, + }, + { + FieldElement{23838809, 1822728, -15738443, 15242727, 8318092, -3733104, -21672180, -3492205, -4821741, 14799921}, + FieldElement{13345610, 9759151, 3371034, -16137791, 16353039, 8577942, 31129804, 13496856, -9056018, 7402518}, + FieldElement{2286874, -4435931, -20042458, -2008336, -13696227, 5038122, 11006906, -15760352, 8205061, 1607563}, + }, + { + FieldElement{14414086, -8002132, 3331830, -3208217, 22249151, -5594188, 18364661, -2906958, 30019587, -9029278}, + FieldElement{-27688051, 1585953, -10775053, 931069, -29120221, -11002319, -14410829, 12029093, 9944378, 8024}, + FieldElement{4368715, -3709630, 29874200, -15022983, -20230386, -11410704, -16114594, -999085, -8142388, 5640030}, + }, + { + FieldElement{10299610, 13746483, 11661824, 16234854, 7630238, 5998374, 9809887, -16694564, 15219798, -14327783}, + FieldElement{27425505, -5719081, 3055006, 10660664, 23458024, 595578, -15398605, -1173195, -18342183, 9742717}, + FieldElement{6744077, 2427284, 26042789, 2720740, -847906, 1118974, 32324614, 7406442, 12420155, 1994844}, + }, + { + FieldElement{14012521, -5024720, -18384453, -9578469, -26485342, -3936439, -13033478, -10909803, 24319929, -6446333}, + FieldElement{16412690, -4507367, 10772641, 15929391, -17068788, -4658621, 10555945, -10484049, -30102368, -4739048}, + FieldElement{22397382, -7767684, -9293161, -12792868, 17166287, -9755136, -27333065, 6199366, 21880021, -12250760}, + }, + { + FieldElement{-4283307, 5368523, -31117018, 8163389, -30323063, 3209128, 16557151, 8890729, 8840445, 4957760}, + FieldElement{-15447727, 709327, -6919446, -10870178, -29777922, 6522332, -21720181, 12130072, -14796503, 5005757}, + FieldElement{-2114751, -14308128, 23019042, 15765735, -25269683, 6002752, 10183197, -13239326, -16395286, -2176112}, + }, + }, + { + { + FieldElement{-19025756, 1632005, 13466291, -7995100, -23640451, 16573537, -32013908, -3057104, 22208662, 2000468}, + FieldElement{3065073, -1412761, -25598674, -361432, -17683065, -5703415, -8164212, 11248527, -3691214, -7414184}, + FieldElement{10379208, -6045554, 8877319, 1473647, -29291284, -12507580, 16690915, 2553332, -3132688, 16400289}, + }, + { + FieldElement{15716668, 1254266, -18472690, 7446274, -8448918, 6344164, -22097271, -7285580, 26894937, 9132066}, + FieldElement{24158887, 12938817, 11085297, -8177598, -28063478, -4457083, -30576463, 64452, -6817084, -2692882}, + FieldElement{13488534, 7794716, 22236231, 5989356, 25426474, -12578208, 2350710, -3418511, -4688006, 2364226}, + }, + { + FieldElement{16335052, 9132434, 25640582, 6678888, 1725628, 8517937, -11807024, -11697457, 15445875, -7798101}, + FieldElement{29004207, -7867081, 28661402, -640412, -12794003, -7943086, 31863255, -4135540, -278050, -15759279}, + FieldElement{-6122061, -14866665, -28614905, 14569919, -10857999, -3591829, 10343412, -6976290, -29828287, -10815811}, + }, + { + FieldElement{27081650, 3463984, 14099042, -4517604, 1616303, -6205604, 29542636, 15372179, 17293797, 960709}, + FieldElement{20263915, 11434237, -5765435, 11236810, 13505955, -10857102, -16111345, 6493122, -19384511, 7639714}, + FieldElement{-2830798, -14839232, 25403038, -8215196, -8317012, -16173699, 18006287, -16043750, 29994677, -15808121}, + }, + { + FieldElement{9769828, 5202651, -24157398, -13631392, -28051003, -11561624, -24613141, -13860782, -31184575, 709464}, + FieldElement{12286395, 13076066, -21775189, -1176622, -25003198, 4057652, -32018128, -8890874, 16102007, 13205847}, + FieldElement{13733362, 5599946, 10557076, 3195751, -5557991, 8536970, -25540170, 8525972, 10151379, 10394400}, + }, + { + FieldElement{4024660, -16137551, 22436262, 12276534, -9099015, -2686099, 19698229, 11743039, -33302334, 8934414}, + FieldElement{-15879800, -4525240, -8580747, -2934061, 14634845, -698278, -9449077, 3137094, -11536886, 11721158}, + FieldElement{17555939, -5013938, 8268606, 2331751, -22738815, 9761013, 9319229, 8835153, -9205489, -1280045}, + }, + { + FieldElement{-461409, -7830014, 20614118, 16688288, -7514766, -4807119, 22300304, 505429, 6108462, -6183415}, + FieldElement{-5070281, 12367917, -30663534, 3234473, 32617080, -8422642, 29880583, -13483331, -26898490, -7867459}, + FieldElement{-31975283, 5726539, 26934134, 10237677, -3173717, -605053, 24199304, 3795095, 7592688, -14992079}, + }, + { + FieldElement{21594432, -14964228, 17466408, -4077222, 32537084, 2739898, 6407723, 12018833, -28256052, 4298412}, + FieldElement{-20650503, -11961496, -27236275, 570498, 3767144, -1717540, 13891942, -1569194, 13717174, 10805743}, + FieldElement{-14676630, -15644296, 15287174, 11927123, 24177847, -8175568, -796431, 14860609, -26938930, -5863836}, + }, + }, + { + { + FieldElement{12962541, 5311799, -10060768, 11658280, 18855286, -7954201, 13286263, -12808704, -4381056, 9882022}, + FieldElement{18512079, 11319350, -20123124, 15090309, 18818594, 5271736, -22727904, 3666879, -23967430, -3299429}, + FieldElement{-6789020, -3146043, 16192429, 13241070, 15898607, -14206114, -10084880, -6661110, -2403099, 5276065}, + }, + { + FieldElement{30169808, -5317648, 26306206, -11750859, 27814964, 7069267, 7152851, 3684982, 1449224, 13082861}, + FieldElement{10342826, 3098505, 2119311, 193222, 25702612, 12233820, 23697382, 15056736, -21016438, -8202000}, + FieldElement{-33150110, 3261608, 22745853, 7948688, 19370557, -15177665, -26171976, 6482814, -10300080, -11060101}, + }, + { + FieldElement{32869458, -5408545, 25609743, 15678670, -10687769, -15471071, 26112421, 2521008, -22664288, 6904815}, + FieldElement{29506923, 4457497, 3377935, -9796444, -30510046, 12935080, 1561737, 3841096, -29003639, -6657642}, + FieldElement{10340844, -6630377, -18656632, -2278430, 12621151, -13339055, 30878497, -11824370, -25584551, 5181966}, + }, + { + FieldElement{25940115, -12658025, 17324188, -10307374, -8671468, 15029094, 24396252, -16450922, -2322852, -12388574}, + FieldElement{-21765684, 9916823, -1300409, 4079498, -1028346, 11909559, 1782390, 12641087, 20603771, -6561742}, + FieldElement{-18882287, -11673380, 24849422, 11501709, 13161720, -4768874, 1925523, 11914390, 4662781, 7820689}, + }, + { + FieldElement{12241050, -425982, 8132691, 9393934, 32846760, -1599620, 29749456, 12172924, 16136752, 15264020}, + FieldElement{-10349955, -14680563, -8211979, 2330220, -17662549, -14545780, 10658213, 6671822, 19012087, 3772772}, + FieldElement{3753511, -3421066, 10617074, 2028709, 14841030, -6721664, 28718732, -15762884, 20527771, 12988982}, + }, + { + FieldElement{-14822485, -5797269, -3707987, 12689773, -898983, -10914866, -24183046, -10564943, 3299665, -12424953}, + FieldElement{-16777703, -15253301, -9642417, 4978983, 3308785, 8755439, 6943197, 6461331, -25583147, 8991218}, + FieldElement{-17226263, 1816362, -1673288, -6086439, 31783888, -8175991, -32948145, 7417950, -30242287, 1507265}, + }, + { + FieldElement{29692663, 6829891, -10498800, 4334896, 20945975, -11906496, -28887608, 8209391, 14606362, -10647073}, + FieldElement{-3481570, 8707081, 32188102, 5672294, 22096700, 1711240, -33020695, 9761487, 4170404, -2085325}, + FieldElement{-11587470, 14855945, -4127778, -1531857, -26649089, 15084046, 22186522, 16002000, -14276837, -8400798}, + }, + { + FieldElement{-4811456, 13761029, -31703877, -2483919, -3312471, 7869047, -7113572, -9620092, 13240845, 10965870}, + FieldElement{-7742563, -8256762, -14768334, -13656260, -23232383, 12387166, 4498947, 14147411, 29514390, 4302863}, + FieldElement{-13413405, -12407859, 20757302, -13801832, 14785143, 8976368, -5061276, -2144373, 17846988, -13971927}, + }, + }, + { + { + FieldElement{-2244452, -754728, -4597030, -1066309, -6247172, 1455299, -21647728, -9214789, -5222701, 12650267}, + FieldElement{-9906797, -16070310, 21134160, 12198166, -27064575, 708126, 387813, 13770293, -19134326, 10958663}, + FieldElement{22470984, 12369526, 23446014, -5441109, -21520802, -9698723, -11772496, -11574455, -25083830, 4271862}, + }, + { + FieldElement{-25169565, -10053642, -19909332, 15361595, -5984358, 2159192, 75375, -4278529, -32526221, 8469673}, + FieldElement{15854970, 4148314, -8893890, 7259002, 11666551, 13824734, -30531198, 2697372, 24154791, -9460943}, + FieldElement{15446137, -15806644, 29759747, 14019369, 30811221, -9610191, -31582008, 12840104, 24913809, 9815020}, + }, + { + FieldElement{-4709286, -5614269, -31841498, -12288893, -14443537, 10799414, -9103676, 13438769, 18735128, 9466238}, + FieldElement{11933045, 9281483, 5081055, -5183824, -2628162, -4905629, -7727821, -10896103, -22728655, 16199064}, + FieldElement{14576810, 379472, -26786533, -8317236, -29426508, -10812974, -102766, 1876699, 30801119, 2164795}, + }, + { + FieldElement{15995086, 3199873, 13672555, 13712240, -19378835, -4647646, -13081610, -15496269, -13492807, 1268052}, + FieldElement{-10290614, -3659039, -3286592, 10948818, 23037027, 3794475, -3470338, -12600221, -17055369, 3565904}, + FieldElement{29210088, -9419337, -5919792, -4952785, 10834811, -13327726, -16512102, -10820713, -27162222, -14030531}, + }, + { + FieldElement{-13161890, 15508588, 16663704, -8156150, -28349942, 9019123, -29183421, -3769423, 2244111, -14001979}, + FieldElement{-5152875, -3800936, -9306475, -6071583, 16243069, 14684434, -25673088, -16180800, 13491506, 4641841}, + FieldElement{10813417, 643330, -19188515, -728916, 30292062, -16600078, 27548447, -7721242, 14476989, -12767431}, + }, + { + FieldElement{10292079, 9984945, 6481436, 8279905, -7251514, 7032743, 27282937, -1644259, -27912810, 12651324}, + FieldElement{-31185513, -813383, 22271204, 11835308, 10201545, 15351028, 17099662, 3988035, 21721536, -3148940}, + FieldElement{10202177, -6545839, -31373232, -9574638, -32150642, -8119683, -12906320, 3852694, 13216206, 14842320}, + }, + { + FieldElement{-15815640, -10601066, -6538952, -7258995, -6984659, -6581778, -31500847, 13765824, -27434397, 9900184}, + FieldElement{14465505, -13833331, -32133984, -14738873, -27443187, 12990492, 33046193, 15796406, -7051866, -8040114}, + FieldElement{30924417, -8279620, 6359016, -12816335, 16508377, 9071735, -25488601, 15413635, 9524356, -7018878}, + }, + { + FieldElement{12274201, -13175547, 32627641, -1785326, 6736625, 13267305, 5237659, -5109483, 15663516, 4035784}, + FieldElement{-2951309, 8903985, 17349946, 601635, -16432815, -4612556, -13732739, -15889334, -22258478, 4659091}, + FieldElement{-16916263, -4952973, -30393711, -15158821, 20774812, 15897498, 5736189, 15026997, -2178256, -13455585}, + }, + }, + { + { + FieldElement{-8858980, -2219056, 28571666, -10155518, -474467, -10105698, -3801496, 278095, 23440562, -290208}, + FieldElement{10226241, -5928702, 15139956, 120818, -14867693, 5218603, 32937275, 11551483, -16571960, -7442864}, + FieldElement{17932739, -12437276, -24039557, 10749060, 11316803, 7535897, 22503767, 5561594, -3646624, 3898661}, + }, + { + FieldElement{7749907, -969567, -16339731, -16464, -25018111, 15122143, -1573531, 7152530, 21831162, 1245233}, + FieldElement{26958459, -14658026, 4314586, 8346991, -5677764, 11960072, -32589295, -620035, -30402091, -16716212}, + FieldElement{-12165896, 9166947, 33491384, 13673479, 29787085, 13096535, 6280834, 14587357, -22338025, 13987525}, + }, + { + FieldElement{-24349909, 7778775, 21116000, 15572597, -4833266, -5357778, -4300898, -5124639, -7469781, -2858068}, + FieldElement{9681908, -6737123, -31951644, 13591838, -6883821, 386950, 31622781, 6439245, -14581012, 4091397}, + FieldElement{-8426427, 1470727, -28109679, -1596990, 3978627, -5123623, -19622683, 12092163, 29077877, -14741988}, + }, + { + FieldElement{5269168, -6859726, -13230211, -8020715, 25932563, 1763552, -5606110, -5505881, -20017847, 2357889}, + FieldElement{32264008, -15407652, -5387735, -1160093, -2091322, -3946900, 23104804, -12869908, 5727338, 189038}, + FieldElement{14609123, -8954470, -6000566, -16622781, -14577387, -7743898, -26745169, 10942115, -25888931, -14884697}, + }, + { + FieldElement{20513500, 5557931, -15604613, 7829531, 26413943, -2019404, -21378968, 7471781, 13913677, -5137875}, + FieldElement{-25574376, 11967826, 29233242, 12948236, -6754465, 4713227, -8940970, 14059180, 12878652, 8511905}, + FieldElement{-25656801, 3393631, -2955415, -7075526, -2250709, 9366908, -30223418, 6812974, 5568676, -3127656}, + }, + { + FieldElement{11630004, 12144454, 2116339, 13606037, 27378885, 15676917, -17408753, -13504373, -14395196, 8070818}, + FieldElement{27117696, -10007378, -31282771, -5570088, 1127282, 12772488, -29845906, 10483306, -11552749, -1028714}, + FieldElement{10637467, -5688064, 5674781, 1072708, -26343588, -6982302, -1683975, 9177853, -27493162, 15431203}, + }, + { + FieldElement{20525145, 10892566, -12742472, 12779443, -29493034, 16150075, -28240519, 14943142, -15056790, -7935931}, + FieldElement{-30024462, 5626926, -551567, -9981087, 753598, 11981191, 25244767, -3239766, -3356550, 9594024}, + FieldElement{-23752644, 2636870, -5163910, -10103818, 585134, 7877383, 11345683, -6492290, 13352335, -10977084}, + }, + { + FieldElement{-1931799, -5407458, 3304649, -12884869, 17015806, -4877091, -29783850, -7752482, -13215537, -319204}, + FieldElement{20239939, 6607058, 6203985, 3483793, -18386976, -779229, -20723742, 15077870, -22750759, 14523817}, + FieldElement{27406042, -6041657, 27423596, -4497394, 4996214, 10002360, -28842031, -4545494, -30172742, -4805667}, + }, + }, + { + { + FieldElement{11374242, 12660715, 17861383, -12540833, 10935568, 1099227, -13886076, -9091740, -27727044, 11358504}, + FieldElement{-12730809, 10311867, 1510375, 10778093, -2119455, -9145702, 32676003, 11149336, -26123651, 4985768}, + FieldElement{-19096303, 341147, -6197485, -239033, 15756973, -8796662, -983043, 13794114, -19414307, -15621255}, + }, + { + FieldElement{6490081, 11940286, 25495923, -7726360, 8668373, -8751316, 3367603, 6970005, -1691065, -9004790}, + FieldElement{1656497, 13457317, 15370807, 6364910, 13605745, 8362338, -19174622, -5475723, -16796596, -5031438}, + FieldElement{-22273315, -13524424, -64685, -4334223, -18605636, -10921968, -20571065, -7007978, -99853, -10237333}, + }, + { + FieldElement{17747465, 10039260, 19368299, -4050591, -20630635, -16041286, 31992683, -15857976, -29260363, -5511971}, + FieldElement{31932027, -4986141, -19612382, 16366580, 22023614, 88450, 11371999, -3744247, 4882242, -10626905}, + FieldElement{29796507, 37186, 19818052, 10115756, -11829032, 3352736, 18551198, 3272828, -5190932, -4162409}, + }, + { + FieldElement{12501286, 4044383, -8612957, -13392385, -32430052, 5136599, -19230378, -3529697, 330070, -3659409}, + FieldElement{6384877, 2899513, 17807477, 7663917, -2358888, 12363165, 25366522, -8573892, -271295, 12071499}, + FieldElement{-8365515, -4042521, 25133448, -4517355, -6211027, 2265927, -32769618, 1936675, -5159697, 3829363}, + }, + { + FieldElement{28425966, -5835433, -577090, -4697198, -14217555, 6870930, 7921550, -6567787, 26333140, 14267664}, + FieldElement{-11067219, 11871231, 27385719, -10559544, -4585914, -11189312, 10004786, -8709488, -21761224, 8930324}, + FieldElement{-21197785, -16396035, 25654216, -1725397, 12282012, 11008919, 1541940, 4757911, -26491501, -16408940}, + }, + { + FieldElement{13537262, -7759490, -20604840, 10961927, -5922820, -13218065, -13156584, 6217254, -15943699, 13814990}, + FieldElement{-17422573, 15157790, 18705543, 29619, 24409717, -260476, 27361681, 9257833, -1956526, -1776914}, + FieldElement{-25045300, -10191966, 15366585, 15166509, -13105086, 8423556, -29171540, 12361135, -18685978, 4578290}, + }, + { + FieldElement{24579768, 3711570, 1342322, -11180126, -27005135, 14124956, -22544529, 14074919, 21964432, 8235257}, + FieldElement{-6528613, -2411497, 9442966, -5925588, 12025640, -1487420, -2981514, -1669206, 13006806, 2355433}, + FieldElement{-16304899, -13605259, -6632427, -5142349, 16974359, -10911083, 27202044, 1719366, 1141648, -12796236}, + }, + { + FieldElement{-12863944, -13219986, -8318266, -11018091, -6810145, -4843894, 13475066, -3133972, 32674895, 13715045}, + FieldElement{11423335, -5468059, 32344216, 8962751, 24989809, 9241752, -13265253, 16086212, -28740881, -15642093}, + FieldElement{-1409668, 12530728, -6368726, 10847387, 19531186, -14132160, -11709148, 7791794, -27245943, 4383347}, + }, + }, + { + { + FieldElement{-28970898, 5271447, -1266009, -9736989, -12455236, 16732599, -4862407, -4906449, 27193557, 6245191}, + FieldElement{-15193956, 5362278, -1783893, 2695834, 4960227, 12840725, 23061898, 3260492, 22510453, 8577507}, + FieldElement{-12632451, 11257346, -32692994, 13548177, -721004, 10879011, 31168030, 13952092, -29571492, -3635906}, + }, + { + FieldElement{3877321, -9572739, 32416692, 5405324, -11004407, -13656635, 3759769, 11935320, 5611860, 8164018}, + FieldElement{-16275802, 14667797, 15906460, 12155291, -22111149, -9039718, 32003002, -8832289, 5773085, -8422109}, + FieldElement{-23788118, -8254300, 1950875, 8937633, 18686727, 16459170, -905725, 12376320, 31632953, 190926}, + }, + { + FieldElement{-24593607, -16138885, -8423991, 13378746, 14162407, 6901328, -8288749, 4508564, -25341555, -3627528}, + FieldElement{8884438, -5884009, 6023974, 10104341, -6881569, -4941533, 18722941, -14786005, -1672488, 827625}, + FieldElement{-32720583, -16289296, -32503547, 7101210, 13354605, 2659080, -1800575, -14108036, -24878478, 1541286}, + }, + { + FieldElement{2901347, -1117687, 3880376, -10059388, -17620940, -3612781, -21802117, -3567481, 20456845, -1885033}, + FieldElement{27019610, 12299467, -13658288, -1603234, -12861660, -4861471, -19540150, -5016058, 29439641, 15138866}, + FieldElement{21536104, -6626420, -32447818, -10690208, -22408077, 5175814, -5420040, -16361163, 7779328, 109896}, + }, + { + FieldElement{30279744, 14648750, -8044871, 6425558, 13639621, -743509, 28698390, 12180118, 23177719, -554075}, + FieldElement{26572847, 3405927, -31701700, 12890905, -19265668, 5335866, -6493768, 2378492, 4439158, -13279347}, + FieldElement{-22716706, 3489070, -9225266, -332753, 18875722, -1140095, 14819434, -12731527, -17717757, -5461437}, + }, + { + FieldElement{-5056483, 16566551, 15953661, 3767752, -10436499, 15627060, -820954, 2177225, 8550082, -15114165}, + FieldElement{-18473302, 16596775, -381660, 15663611, 22860960, 15585581, -27844109, -3582739, -23260460, -8428588}, + FieldElement{-32480551, 15707275, -8205912, -5652081, 29464558, 2713815, -22725137, 15860482, -21902570, 1494193}, + }, + { + FieldElement{-19562091, -14087393, -25583872, -9299552, 13127842, 759709, 21923482, 16529112, 8742704, 12967017}, + FieldElement{-28464899, 1553205, 32536856, -10473729, -24691605, -406174, -8914625, -2933896, -29903758, 15553883}, + FieldElement{21877909, 3230008, 9881174, 10539357, -4797115, 2841332, 11543572, 14513274, 19375923, -12647961}, + }, + { + FieldElement{8832269, -14495485, 13253511, 5137575, 5037871, 4078777, 24880818, -6222716, 2862653, 9455043}, + FieldElement{29306751, 5123106, 20245049, -14149889, 9592566, 8447059, -2077124, -2990080, 15511449, 4789663}, + FieldElement{-20679756, 7004547, 8824831, -9434977, -4045704, -3750736, -5754762, 108893, 23513200, 16652362}, + }, + }, + { + { + FieldElement{-33256173, 4144782, -4476029, -6579123, 10770039, -7155542, -6650416, -12936300, -18319198, 10212860}, + FieldElement{2756081, 8598110, 7383731, -6859892, 22312759, -1105012, 21179801, 2600940, -9988298, -12506466}, + FieldElement{-24645692, 13317462, -30449259, -15653928, 21365574, -10869657, 11344424, 864440, -2499677, -16710063}, + }, + { + FieldElement{-26432803, 6148329, -17184412, -14474154, 18782929, -275997, -22561534, 211300, 2719757, 4940997}, + FieldElement{-1323882, 3911313, -6948744, 14759765, -30027150, 7851207, 21690126, 8518463, 26699843, 5276295}, + FieldElement{-13149873, -6429067, 9396249, 365013, 24703301, -10488939, 1321586, 149635, -15452774, 7159369}, + }, + { + FieldElement{9987780, -3404759, 17507962, 9505530, 9731535, -2165514, 22356009, 8312176, 22477218, -8403385}, + FieldElement{18155857, -16504990, 19744716, 9006923, 15154154, -10538976, 24256460, -4864995, -22548173, 9334109}, + FieldElement{2986088, -4911893, 10776628, -3473844, 10620590, -7083203, -21413845, 14253545, -22587149, 536906}, + }, + { + FieldElement{4377756, 8115836, 24567078, 15495314, 11625074, 13064599, 7390551, 10589625, 10838060, -15420424}, + FieldElement{-19342404, 867880, 9277171, -3218459, -14431572, -1986443, 19295826, -15796950, 6378260, 699185}, + FieldElement{7895026, 4057113, -7081772, -13077756, -17886831, -323126, -716039, 15693155, -5045064, -13373962}, + }, + { + FieldElement{-7737563, -5869402, -14566319, -7406919, 11385654, 13201616, 31730678, -10962840, -3918636, -9669325}, + FieldElement{10188286, -15770834, -7336361, 13427543, 22223443, 14896287, 30743455, 7116568, -21786507, 5427593}, + FieldElement{696102, 13206899, 27047647, -10632082, 15285305, -9853179, 10798490, -4578720, 19236243, 12477404}, + }, + { + FieldElement{-11229439, 11243796, -17054270, -8040865, -788228, -8167967, -3897669, 11180504, -23169516, 7733644}, + FieldElement{17800790, -14036179, -27000429, -11766671, 23887827, 3149671, 23466177, -10538171, 10322027, 15313801}, + FieldElement{26246234, 11968874, 32263343, -5468728, 6830755, -13323031, -15794704, -101982, -24449242, 10890804}, + }, + { + FieldElement{-31365647, 10271363, -12660625, -6267268, 16690207, -13062544, -14982212, 16484931, 25180797, -5334884}, + FieldElement{-586574, 10376444, -32586414, -11286356, 19801893, 10997610, 2276632, 9482883, 316878, 13820577}, + FieldElement{-9882808, -4510367, -2115506, 16457136, -11100081, 11674996, 30756178, -7515054, 30696930, -3712849}, + }, + { + FieldElement{32988917, -9603412, 12499366, 7910787, -10617257, -11931514, -7342816, -9985397, -32349517, 7392473}, + FieldElement{-8855661, 15927861, 9866406, -3649411, -2396914, -16655781, -30409476, -9134995, 25112947, -2926644}, + FieldElement{-2504044, -436966, 25621774, -5678772, 15085042, -5479877, -24884878, -13526194, 5537438, -13914319}, + }, + }, + { + { + FieldElement{-11225584, 2320285, -9584280, 10149187, -33444663, 5808648, -14876251, -1729667, 31234590, 6090599}, + FieldElement{-9633316, 116426, 26083934, 2897444, -6364437, -2688086, 609721, 15878753, -6970405, -9034768}, + FieldElement{-27757857, 247744, -15194774, -9002551, 23288161, -10011936, -23869595, 6503646, 20650474, 1804084}, + }, + { + FieldElement{-27589786, 15456424, 8972517, 8469608, 15640622, 4439847, 3121995, -10329713, 27842616, -202328}, + FieldElement{-15306973, 2839644, 22530074, 10026331, 4602058, 5048462, 28248656, 5031932, -11375082, 12714369}, + FieldElement{20807691, -7270825, 29286141, 11421711, -27876523, -13868230, -21227475, 1035546, -19733229, 12796920}, + }, + { + FieldElement{12076899, -14301286, -8785001, -11848922, -25012791, 16400684, -17591495, -12899438, 3480665, -15182815}, + FieldElement{-32361549, 5457597, 28548107, 7833186, 7303070, -11953545, -24363064, -15921875, -33374054, 2771025}, + FieldElement{-21389266, 421932, 26597266, 6860826, 22486084, -6737172, -17137485, -4210226, -24552282, 15673397}, + }, + { + FieldElement{-20184622, 2338216, 19788685, -9620956, -4001265, -8740893, -20271184, 4733254, 3727144, -12934448}, + FieldElement{6120119, 814863, -11794402, -622716, 6812205, -15747771, 2019594, 7975683, 31123697, -10958981}, + FieldElement{30069250, -11435332, 30434654, 2958439, 18399564, -976289, 12296869, 9204260, -16432438, 9648165}, + }, + { + FieldElement{32705432, -1550977, 30705658, 7451065, -11805606, 9631813, 3305266, 5248604, -26008332, -11377501}, + FieldElement{17219865, 2375039, -31570947, -5575615, -19459679, 9219903, 294711, 15298639, 2662509, -16297073}, + FieldElement{-1172927, -7558695, -4366770, -4287744, -21346413, -8434326, 32087529, -1222777, 32247248, -14389861}, + }, + { + FieldElement{14312628, 1221556, 17395390, -8700143, -4945741, -8684635, -28197744, -9637817, -16027623, -13378845}, + FieldElement{-1428825, -9678990, -9235681, 6549687, -7383069, -468664, 23046502, 9803137, 17597934, 2346211}, + FieldElement{18510800, 15337574, 26171504, 981392, -22241552, 7827556, -23491134, -11323352, 3059833, -11782870}, + }, + { + FieldElement{10141598, 6082907, 17829293, -1947643, 9830092, 13613136, -25556636, -5544586, -33502212, 3592096}, + FieldElement{33114168, -15889352, -26525686, -13343397, 33076705, 8716171, 1151462, 1521897, -982665, -6837803}, + FieldElement{-32939165, -4255815, 23947181, -324178, -33072974, -12305637, -16637686, 3891704, 26353178, 693168}, + }, + { + FieldElement{30374239, 1595580, -16884039, 13186931, 4600344, 406904, 9585294, -400668, 31375464, 14369965}, + FieldElement{-14370654, -7772529, 1510301, 6434173, -18784789, -6262728, 32732230, -13108839, 17901441, 16011505}, + FieldElement{18171223, -11934626, -12500402, 15197122, -11038147, -15230035, -19172240, -16046376, 8764035, 12309598}, + }, + }, + { + { + FieldElement{5975908, -5243188, -19459362, -9681747, -11541277, 14015782, -23665757, 1228319, 17544096, -10593782}, + FieldElement{5811932, -1715293, 3442887, -2269310, -18367348, -8359541, -18044043, -15410127, -5565381, 12348900}, + FieldElement{-31399660, 11407555, 25755363, 6891399, -3256938, 14872274, -24849353, 8141295, -10632534, -585479}, + }, + { + FieldElement{-12675304, 694026, -5076145, 13300344, 14015258, -14451394, -9698672, -11329050, 30944593, 1130208}, + FieldElement{8247766, -6710942, -26562381, -7709309, -14401939, -14648910, 4652152, 2488540, 23550156, -271232}, + FieldElement{17294316, -3788438, 7026748, 15626851, 22990044, 113481, 2267737, -5908146, -408818, -137719}, + }, + { + FieldElement{16091085, -16253926, 18599252, 7340678, 2137637, -1221657, -3364161, 14550936, 3260525, -7166271}, + FieldElement{-4910104, -13332887, 18550887, 10864893, -16459325, -7291596, -23028869, -13204905, -12748722, 2701326}, + FieldElement{-8574695, 16099415, 4629974, -16340524, -20786213, -6005432, -10018363, 9276971, 11329923, 1862132}, + }, + { + FieldElement{14763076, -15903608, -30918270, 3689867, 3511892, 10313526, -21951088, 12219231, -9037963, -940300}, + FieldElement{8894987, -3446094, 6150753, 3013931, 301220, 15693451, -31981216, -2909717, -15438168, 11595570}, + FieldElement{15214962, 3537601, -26238722, -14058872, 4418657, -15230761, 13947276, 10730794, -13489462, -4363670}, + }, + { + FieldElement{-2538306, 7682793, 32759013, 263109, -29984731, -7955452, -22332124, -10188635, 977108, 699994}, + FieldElement{-12466472, 4195084, -9211532, 550904, -15565337, 12917920, 19118110, -439841, -30534533, -14337913}, + FieldElement{31788461, -14507657, 4799989, 7372237, 8808585, -14747943, 9408237, -10051775, 12493932, -5409317}, + }, + { + FieldElement{-25680606, 5260744, -19235809, -6284470, -3695942, 16566087, 27218280, 2607121, 29375955, 6024730}, + FieldElement{842132, -2794693, -4763381, -8722815, 26332018, -12405641, 11831880, 6985184, -9940361, 2854096}, + FieldElement{-4847262, -7969331, 2516242, -5847713, 9695691, -7221186, 16512645, 960770, 12121869, 16648078}, + }, + { + FieldElement{-15218652, 14667096, -13336229, 2013717, 30598287, -464137, -31504922, -7882064, 20237806, 2838411}, + FieldElement{-19288047, 4453152, 15298546, -16178388, 22115043, -15972604, 12544294, -13470457, 1068881, -12499905}, + FieldElement{-9558883, -16518835, 33238498, 13506958, 30505848, -1114596, -8486907, -2630053, 12521378, 4845654}, + }, + { + FieldElement{-28198521, 10744108, -2958380, 10199664, 7759311, -13088600, 3409348, -873400, -6482306, -12885870}, + FieldElement{-23561822, 6230156, -20382013, 10655314, -24040585, -11621172, 10477734, -1240216, -3113227, 13974498}, + FieldElement{12966261, 15550616, -32038948, -1615346, 21025980, -629444, 5642325, 7188737, 18895762, 12629579}, + }, + }, + { + { + FieldElement{14741879, -14946887, 22177208, -11721237, 1279741, 8058600, 11758140, 789443, 32195181, 3895677}, + FieldElement{10758205, 15755439, -4509950, 9243698, -4879422, 6879879, -2204575, -3566119, -8982069, 4429647}, + FieldElement{-2453894, 15725973, -20436342, -10410672, -5803908, -11040220, -7135870, -11642895, 18047436, -15281743}, + }, + { + FieldElement{-25173001, -11307165, 29759956, 11776784, -22262383, -15820455, 10993114, -12850837, -17620701, -9408468}, + FieldElement{21987233, 700364, -24505048, 14972008, -7774265, -5718395, 32155026, 2581431, -29958985, 8773375}, + FieldElement{-25568350, 454463, -13211935, 16126715, 25240068, 8594567, 20656846, 12017935, -7874389, -13920155}, + }, + { + FieldElement{6028182, 6263078, -31011806, -11301710, -818919, 2461772, -31841174, -5468042, -1721788, -2776725}, + FieldElement{-12278994, 16624277, 987579, -5922598, 32908203, 1248608, 7719845, -4166698, 28408820, 6816612}, + FieldElement{-10358094, -8237829, 19549651, -12169222, 22082623, 16147817, 20613181, 13982702, -10339570, 5067943}, + }, + { + FieldElement{-30505967, -3821767, 12074681, 13582412, -19877972, 2443951, -19719286, 12746132, 5331210, -10105944}, + FieldElement{30528811, 3601899, -1957090, 4619785, -27361822, -15436388, 24180793, -12570394, 27679908, -1648928}, + FieldElement{9402404, -13957065, 32834043, 10838634, -26580150, -13237195, 26653274, -8685565, 22611444, -12715406}, + }, + { + FieldElement{22190590, 1118029, 22736441, 15130463, -30460692, -5991321, 19189625, -4648942, 4854859, 6622139}, + FieldElement{-8310738, -2953450, -8262579, -3388049, -10401731, -271929, 13424426, -3567227, 26404409, 13001963}, + FieldElement{-31241838, -15415700, -2994250, 8939346, 11562230, -12840670, -26064365, -11621720, -15405155, 11020693}, + }, + { + FieldElement{1866042, -7949489, -7898649, -10301010, 12483315, 13477547, 3175636, -12424163, 28761762, 1406734}, + FieldElement{-448555, -1777666, 13018551, 3194501, -9580420, -11161737, 24760585, -4347088, 25577411, -13378680}, + FieldElement{-24290378, 4759345, -690653, -1852816, 2066747, 10693769, -29595790, 9884936, -9368926, 4745410}, + }, + { + FieldElement{-9141284, 6049714, -19531061, -4341411, -31260798, 9944276, -15462008, -11311852, 10931924, -11931931}, + FieldElement{-16561513, 14112680, -8012645, 4817318, -8040464, -11414606, -22853429, 10856641, -20470770, 13434654}, + FieldElement{22759489, -10073434, -16766264, -1871422, 13637442, -10168091, 1765144, -12654326, 28445307, -5364710}, + }, + { + FieldElement{29875063, 12493613, 2795536, -3786330, 1710620, 15181182, -10195717, -8788675, 9074234, 1167180}, + FieldElement{-26205683, 11014233, -9842651, -2635485, -26908120, 7532294, -18716888, -9535498, 3843903, 9367684}, + FieldElement{-10969595, -6403711, 9591134, 9582310, 11349256, 108879, 16235123, 8601684, -139197, 4242895}, + }, + }, + { + { + FieldElement{22092954, -13191123, -2042793, -11968512, 32186753, -11517388, -6574341, 2470660, -27417366, 16625501}, + FieldElement{-11057722, 3042016, 13770083, -9257922, 584236, -544855, -7770857, 2602725, -27351616, 14247413}, + FieldElement{6314175, -10264892, -32772502, 15957557, -10157730, 168750, -8618807, 14290061, 27108877, -1180880}, + }, + { + FieldElement{-8586597, -7170966, 13241782, 10960156, -32991015, -13794596, 33547976, -11058889, -27148451, 981874}, + FieldElement{22833440, 9293594, -32649448, -13618667, -9136966, 14756819, -22928859, -13970780, -10479804, -16197962}, + FieldElement{-7768587, 3326786, -28111797, 10783824, 19178761, 14905060, 22680049, 13906969, -15933690, 3797899}, + }, + { + FieldElement{21721356, -4212746, -12206123, 9310182, -3882239, -13653110, 23740224, -2709232, 20491983, -8042152}, + FieldElement{9209270, -15135055, -13256557, -6167798, -731016, 15289673, 25947805, 15286587, 30997318, -6703063}, + FieldElement{7392032, 16618386, 23946583, -8039892, -13265164, -1533858, -14197445, -2321576, 17649998, -250080}, + }, + { + FieldElement{-9301088, -14193827, 30609526, -3049543, -25175069, -1283752, -15241566, -9525724, -2233253, 7662146}, + FieldElement{-17558673, 1763594, -33114336, 15908610, -30040870, -12174295, 7335080, -8472199, -3174674, 3440183}, + FieldElement{-19889700, -5977008, -24111293, -9688870, 10799743, -16571957, 40450, -4431835, 4862400, 1133}, + }, + { + FieldElement{-32856209, -7873957, -5422389, 14860950, -16319031, 7956142, 7258061, 311861, -30594991, -7379421}, + FieldElement{-3773428, -1565936, 28985340, 7499440, 24445838, 9325937, 29727763, 16527196, 18278453, 15405622}, + FieldElement{-4381906, 8508652, -19898366, -3674424, -5984453, 15149970, -13313598, 843523, -21875062, 13626197}, + }, + { + FieldElement{2281448, -13487055, -10915418, -2609910, 1879358, 16164207, -10783882, 3953792, 13340839, 15928663}, + FieldElement{31727126, -7179855, -18437503, -8283652, 2875793, -16390330, -25269894, -7014826, -23452306, 5964753}, + FieldElement{4100420, -5959452, -17179337, 6017714, -18705837, 12227141, -26684835, 11344144, 2538215, -7570755}, + }, + { + FieldElement{-9433605, 6123113, 11159803, -2156608, 30016280, 14966241, -20474983, 1485421, -629256, -15958862}, + FieldElement{-26804558, 4260919, 11851389, 9658551, -32017107, 16367492, -20205425, -13191288, 11659922, -11115118}, + FieldElement{26180396, 10015009, -30844224, -8581293, 5418197, 9480663, 2231568, -10170080, 33100372, -1306171}, + }, + { + FieldElement{15121113, -5201871, -10389905, 15427821, -27509937, -15992507, 21670947, 4486675, -5931810, -14466380}, + FieldElement{16166486, -9483733, -11104130, 6023908, -31926798, -1364923, 2340060, -16254968, -10735770, -10039824}, + FieldElement{28042865, -3557089, -12126526, 12259706, -3717498, -6945899, 6766453, -8689599, 18036436, 5803270}, + }, + }, + { + { + FieldElement{-817581, 6763912, 11803561, 1585585, 10958447, -2671165, 23855391, 4598332, -6159431, -14117438}, + FieldElement{-31031306, -14256194, 17332029, -2383520, 31312682, -5967183, 696309, 50292, -20095739, 11763584}, + FieldElement{-594563, -2514283, -32234153, 12643980, 12650761, 14811489, 665117, -12613632, -19773211, -10713562}, + }, + { + FieldElement{30464590, -11262872, -4127476, -12734478, 19835327, -7105613, -24396175, 2075773, -17020157, 992471}, + FieldElement{18357185, -6994433, 7766382, 16342475, -29324918, 411174, 14578841, 8080033, -11574335, -10601610}, + FieldElement{19598397, 10334610, 12555054, 2555664, 18821899, -10339780, 21873263, 16014234, 26224780, 16452269}, + }, + { + FieldElement{-30223925, 5145196, 5944548, 16385966, 3976735, 2009897, -11377804, -7618186, -20533829, 3698650}, + FieldElement{14187449, 3448569, -10636236, -10810935, -22663880, -3433596, 7268410, -10890444, 27394301, 12015369}, + FieldElement{19695761, 16087646, 28032085, 12999827, 6817792, 11427614, 20244189, -1312777, -13259127, -3402461}, + }, + { + FieldElement{30860103, 12735208, -1888245, -4699734, -16974906, 2256940, -8166013, 12298312, -8550524, -10393462}, + FieldElement{-5719826, -11245325, -1910649, 15569035, 26642876, -7587760, -5789354, -15118654, -4976164, 12651793}, + FieldElement{-2848395, 9953421, 11531313, -5282879, 26895123, -12697089, -13118820, -16517902, 9768698, -2533218}, + }, + { + FieldElement{-24719459, 1894651, -287698, -4704085, 15348719, -8156530, 32767513, 12765450, 4940095, 10678226}, + FieldElement{18860224, 15980149, -18987240, -1562570, -26233012, -11071856, -7843882, 13944024, -24372348, 16582019}, + FieldElement{-15504260, 4970268, -29893044, 4175593, -20993212, -2199756, -11704054, 15444560, -11003761, 7989037}, + }, + { + FieldElement{31490452, 5568061, -2412803, 2182383, -32336847, 4531686, -32078269, 6200206, -19686113, -14800171}, + FieldElement{-17308668, -15879940, -31522777, -2831, -32887382, 16375549, 8680158, -16371713, 28550068, -6857132}, + FieldElement{-28126887, -5688091, 16837845, -1820458, -6850681, 12700016, -30039981, 4364038, 1155602, 5988841}, + }, + { + FieldElement{21890435, -13272907, -12624011, 12154349, -7831873, 15300496, 23148983, -4470481, 24618407, 8283181}, + FieldElement{-33136107, -10512751, 9975416, 6841041, -31559793, 16356536, 3070187, -7025928, 1466169, 10740210}, + FieldElement{-1509399, -15488185, -13503385, -10655916, 32799044, 909394, -13938903, -5779719, -32164649, -15327040}, + }, + { + FieldElement{3960823, -14267803, -28026090, -15918051, -19404858, 13146868, 15567327, 951507, -3260321, -573935}, + FieldElement{24740841, 5052253, -30094131, 8961361, 25877428, 6165135, -24368180, 14397372, -7380369, -6144105}, + FieldElement{-28888365, 3510803, -28103278, -1158478, -11238128, -10631454, -15441463, -14453128, -1625486, -6494814}, + }, + }, + { + { + FieldElement{793299, -9230478, 8836302, -6235707, -27360908, -2369593, 33152843, -4885251, -9906200, -621852}, + FieldElement{5666233, 525582, 20782575, -8038419, -24538499, 14657740, 16099374, 1468826, -6171428, -15186581}, + FieldElement{-4859255, -3779343, -2917758, -6748019, 7778750, 11688288, -30404353, -9871238, -1558923, -9863646}, + }, + { + FieldElement{10896332, -7719704, 824275, 472601, -19460308, 3009587, 25248958, 14783338, -30581476, -15757844}, + FieldElement{10566929, 12612572, -31944212, 11118703, -12633376, 12362879, 21752402, 8822496, 24003793, 14264025}, + FieldElement{27713862, -7355973, -11008240, 9227530, 27050101, 2504721, 23886875, -13117525, 13958495, -5732453}, + }, + { + FieldElement{-23481610, 4867226, -27247128, 3900521, 29838369, -8212291, -31889399, -10041781, 7340521, -15410068}, + FieldElement{4646514, -8011124, -22766023, -11532654, 23184553, 8566613, 31366726, -1381061, -15066784, -10375192}, + FieldElement{-17270517, 12723032, -16993061, 14878794, 21619651, -6197576, 27584817, 3093888, -8843694, 3849921}, + }, + { + FieldElement{-9064912, 2103172, 25561640, -15125738, -5239824, 9582958, 32477045, -9017955, 5002294, -15550259}, + FieldElement{-12057553, -11177906, 21115585, -13365155, 8808712, -12030708, 16489530, 13378448, -25845716, 12741426}, + FieldElement{-5946367, 10645103, -30911586, 15390284, -3286982, -7118677, 24306472, 15852464, 28834118, -7646072}, + }, + { + FieldElement{-17335748, -9107057, -24531279, 9434953, -8472084, -583362, -13090771, 455841, 20461858, 5491305}, + FieldElement{13669248, -16095482, -12481974, -10203039, -14569770, -11893198, -24995986, 11293807, -28588204, -9421832}, + FieldElement{28497928, 6272777, -33022994, 14470570, 8906179, -1225630, 18504674, -14165166, 29867745, -8795943}, + }, + { + FieldElement{-16207023, 13517196, -27799630, -13697798, 24009064, -6373891, -6367600, -13175392, 22853429, -4012011}, + FieldElement{24191378, 16712145, -13931797, 15217831, 14542237, 1646131, 18603514, -11037887, 12876623, -2112447}, + FieldElement{17902668, 4518229, -411702, -2829247, 26878217, 5258055, -12860753, 608397, 16031844, 3723494}, + }, + { + FieldElement{-28632773, 12763728, -20446446, 7577504, 33001348, -13017745, 17558842, -7872890, 23896954, -4314245}, + FieldElement{-20005381, -12011952, 31520464, 605201, 2543521, 5991821, -2945064, 7229064, -9919646, -8826859}, + FieldElement{28816045, 298879, -28165016, -15920938, 19000928, -1665890, -12680833, -2949325, -18051778, -2082915}, + }, + { + FieldElement{16000882, -344896, 3493092, -11447198, -29504595, -13159789, 12577740, 16041268, -19715240, 7847707}, + FieldElement{10151868, 10572098, 27312476, 7922682, 14825339, 4723128, -32855931, -6519018, -10020567, 3852848}, + FieldElement{-11430470, 15697596, -21121557, -4420647, 5386314, 15063598, 16514493, -15932110, 29330899, -15076224}, + }, + }, + { + { + FieldElement{-25499735, -4378794, -15222908, -6901211, 16615731, 2051784, 3303702, 15490, -27548796, 12314391}, + FieldElement{15683520, -6003043, 18109120, -9980648, 15337968, -5997823, -16717435, 15921866, 16103996, -3731215}, + FieldElement{-23169824, -10781249, 13588192, -1628807, -3798557, -1074929, -19273607, 5402699, -29815713, -9841101}, + }, + { + FieldElement{23190676, 2384583, -32714340, 3462154, -29903655, -1529132, -11266856, 8911517, -25205859, 2739713}, + FieldElement{21374101, -3554250, -33524649, 9874411, 15377179, 11831242, -33529904, 6134907, 4931255, 11987849}, + FieldElement{-7732, -2978858, -16223486, 7277597, 105524, -322051, -31480539, 13861388, -30076310, 10117930}, + }, + { + FieldElement{-29501170, -10744872, -26163768, 13051539, -25625564, 5089643, -6325503, 6704079, 12890019, 15728940}, + FieldElement{-21972360, -11771379, -951059, -4418840, 14704840, 2695116, 903376, -10428139, 12885167, 8311031}, + FieldElement{-17516482, 5352194, 10384213, -13811658, 7506451, 13453191, 26423267, 4384730, 1888765, -5435404}, + }, + { + FieldElement{-25817338, -3107312, -13494599, -3182506, 30896459, -13921729, -32251644, -12707869, -19464434, -3340243}, + FieldElement{-23607977, -2665774, -526091, 4651136, 5765089, 4618330, 6092245, 14845197, 17151279, -9854116}, + FieldElement{-24830458, -12733720, -15165978, 10367250, -29530908, -265356, 22825805, -7087279, -16866484, 16176525}, + }, + { + FieldElement{-23583256, 6564961, 20063689, 3798228, -4740178, 7359225, 2006182, -10363426, -28746253, -10197509}, + FieldElement{-10626600, -4486402, -13320562, -5125317, 3432136, -6393229, 23632037, -1940610, 32808310, 1099883}, + FieldElement{15030977, 5768825, -27451236, -2887299, -6427378, -15361371, -15277896, -6809350, 2051441, -15225865}, + }, + { + FieldElement{-3362323, -7239372, 7517890, 9824992, 23555850, 295369, 5148398, -14154188, -22686354, 16633660}, + FieldElement{4577086, -16752288, 13249841, -15304328, 19958763, -14537274, 18559670, -10759549, 8402478, -9864273}, + FieldElement{-28406330, -1051581, -26790155, -907698, -17212414, -11030789, 9453451, -14980072, 17983010, 9967138}, + }, + { + FieldElement{-25762494, 6524722, 26585488, 9969270, 24709298, 1220360, -1677990, 7806337, 17507396, 3651560}, + FieldElement{-10420457, -4118111, 14584639, 15971087, -15768321, 8861010, 26556809, -5574557, -18553322, -11357135}, + FieldElement{2839101, 14284142, 4029895, 3472686, 14402957, 12689363, -26642121, 8459447, -5605463, -7621941}, + }, + { + FieldElement{-4839289, -3535444, 9744961, 2871048, 25113978, 3187018, -25110813, -849066, 17258084, -7977739}, + FieldElement{18164541, -10595176, -17154882, -1542417, 19237078, -9745295, 23357533, -15217008, 26908270, 12150756}, + FieldElement{-30264870, -7647865, 5112249, -7036672, -1499807, -6974257, 43168, -5537701, -32302074, 16215819}, + }, + }, + { + { + FieldElement{-6898905, 9824394, -12304779, -4401089, -31397141, -6276835, 32574489, 12532905, -7503072, -8675347}, + FieldElement{-27343522, -16515468, -27151524, -10722951, 946346, 16291093, 254968, 7168080, 21676107, -1943028}, + FieldElement{21260961, -8424752, -16831886, -11920822, -23677961, 3968121, -3651949, -6215466, -3556191, -7913075}, + }, + { + FieldElement{16544754, 13250366, -16804428, 15546242, -4583003, 12757258, -2462308, -8680336, -18907032, -9662799}, + FieldElement{-2415239, -15577728, 18312303, 4964443, -15272530, -12653564, 26820651, 16690659, 25459437, -4564609}, + FieldElement{-25144690, 11425020, 28423002, -11020557, -6144921, -15826224, 9142795, -2391602, -6432418, -1644817}, + }, + { + FieldElement{-23104652, 6253476, 16964147, -3768872, -25113972, -12296437, -27457225, -16344658, 6335692, 7249989}, + FieldElement{-30333227, 13979675, 7503222, -12368314, -11956721, -4621693, -30272269, 2682242, 25993170, -12478523}, + FieldElement{4364628, 5930691, 32304656, -10044554, -8054781, 15091131, 22857016, -10598955, 31820368, 15075278}, + }, + { + FieldElement{31879134, -8918693, 17258761, 90626, -8041836, -4917709, 24162788, -9650886, -17970238, 12833045}, + FieldElement{19073683, 14851414, -24403169, -11860168, 7625278, 11091125, -19619190, 2074449, -9413939, 14905377}, + FieldElement{24483667, -11935567, -2518866, -11547418, -1553130, 15355506, -25282080, 9253129, 27628530, -7555480}, + }, + { + FieldElement{17597607, 8340603, 19355617, 552187, 26198470, -3176583, 4593324, -9157582, -14110875, 15297016}, + FieldElement{510886, 14337390, -31785257, 16638632, 6328095, 2713355, -20217417, -11864220, 8683221, 2921426}, + FieldElement{18606791, 11874196, 27155355, -5281482, -24031742, 6265446, -25178240, -1278924, 4674690, 13890525}, + }, + { + FieldElement{13609624, 13069022, -27372361, -13055908, 24360586, 9592974, 14977157, 9835105, 4389687, 288396}, + FieldElement{9922506, -519394, 13613107, 5883594, -18758345, -434263, -12304062, 8317628, 23388070, 16052080}, + FieldElement{12720016, 11937594, -31970060, -5028689, 26900120, 8561328, -20155687, -11632979, -14754271, -10812892}, + }, + { + FieldElement{15961858, 14150409, 26716931, -665832, -22794328, 13603569, 11829573, 7467844, -28822128, 929275}, + FieldElement{11038231, -11582396, -27310482, -7316562, -10498527, -16307831, -23479533, -9371869, -21393143, 2465074}, + FieldElement{20017163, -4323226, 27915242, 1529148, 12396362, 15675764, 13817261, -9658066, 2463391, -4622140}, + }, + { + FieldElement{-16358878, -12663911, -12065183, 4996454, -1256422, 1073572, 9583558, 12851107, 4003896, 12673717}, + FieldElement{-1731589, -15155870, -3262930, 16143082, 19294135, 13385325, 14741514, -9103726, 7903886, 2348101}, + FieldElement{24536016, -16515207, 12715592, -3862155, 1511293, 10047386, -3842346, -7129159, -28377538, 10048127}, + }, + }, + { + { + FieldElement{-12622226, -6204820, 30718825, 2591312, -10617028, 12192840, 18873298, -7297090, -32297756, 15221632}, + FieldElement{-26478122, -11103864, 11546244, -1852483, 9180880, 7656409, -21343950, 2095755, 29769758, 6593415}, + FieldElement{-31994208, -2907461, 4176912, 3264766, 12538965, -868111, 26312345, -6118678, 30958054, 8292160}, + }, + { + FieldElement{31429822, -13959116, 29173532, 15632448, 12174511, -2760094, 32808831, 3977186, 26143136, -3148876}, + FieldElement{22648901, 1402143, -22799984, 13746059, 7936347, 365344, -8668633, -1674433, -3758243, -2304625}, + FieldElement{-15491917, 8012313, -2514730, -12702462, -23965846, -10254029, -1612713, -1535569, -16664475, 8194478}, + }, + { + FieldElement{27338066, -7507420, -7414224, 10140405, -19026427, -6589889, 27277191, 8855376, 28572286, 3005164}, + FieldElement{26287124, 4821776, 25476601, -4145903, -3764513, -15788984, -18008582, 1182479, -26094821, -13079595}, + FieldElement{-7171154, 3178080, 23970071, 6201893, -17195577, -4489192, -21876275, -13982627, 32208683, -1198248}, + }, + { + FieldElement{-16657702, 2817643, -10286362, 14811298, 6024667, 13349505, -27315504, -10497842, -27672585, -11539858}, + FieldElement{15941029, -9405932, -21367050, 8062055, 31876073, -238629, -15278393, -1444429, 15397331, -4130193}, + FieldElement{8934485, -13485467, -23286397, -13423241, -32446090, 14047986, 31170398, -1441021, -27505566, 15087184}, + }, + { + FieldElement{-18357243, -2156491, 24524913, -16677868, 15520427, -6360776, -15502406, 11461896, 16788528, -5868942}, + FieldElement{-1947386, 16013773, 21750665, 3714552, -17401782, -16055433, -3770287, -10323320, 31322514, -11615635}, + FieldElement{21426655, -5650218, -13648287, -5347537, -28812189, -4920970, -18275391, -14621414, 13040862, -12112948}, + }, + { + FieldElement{11293895, 12478086, -27136401, 15083750, -29307421, 14748872, 14555558, -13417103, 1613711, 4896935}, + FieldElement{-25894883, 15323294, -8489791, -8057900, 25967126, -13425460, 2825960, -4897045, -23971776, -11267415}, + FieldElement{-15924766, -5229880, -17443532, 6410664, 3622847, 10243618, 20615400, 12405433, -23753030, -8436416}, + }, + { + FieldElement{-7091295, 12556208, -20191352, 9025187, -17072479, 4333801, 4378436, 2432030, 23097949, -566018}, + FieldElement{4565804, -16025654, 20084412, -7842817, 1724999, 189254, 24767264, 10103221, -18512313, 2424778}, + FieldElement{366633, -11976806, 8173090, -6890119, 30788634, 5745705, -7168678, 1344109, -3642553, 12412659}, + }, + { + FieldElement{-24001791, 7690286, 14929416, -168257, -32210835, -13412986, 24162697, -15326504, -3141501, 11179385}, + FieldElement{18289522, -14724954, 8056945, 16430056, -21729724, 7842514, -6001441, -1486897, -18684645, -11443503}, + FieldElement{476239, 6601091, -6152790, -9723375, 17503545, -4863900, 27672959, 13403813, 11052904, 5219329}, + }, + }, + { + { + FieldElement{20678546, -8375738, -32671898, 8849123, -5009758, 14574752, 31186971, -3973730, 9014762, -8579056}, + FieldElement{-13644050, -10350239, -15962508, 5075808, -1514661, -11534600, -33102500, 9160280, 8473550, -3256838}, + FieldElement{24900749, 14435722, 17209120, -15292541, -22592275, 9878983, -7689309, -16335821, -24568481, 11788948}, + }, + { + FieldElement{-3118155, -11395194, -13802089, 14797441, 9652448, -6845904, -20037437, 10410733, -24568470, -1458691}, + FieldElement{-15659161, 16736706, -22467150, 10215878, -9097177, 7563911, 11871841, -12505194, -18513325, 8464118}, + FieldElement{-23400612, 8348507, -14585951, -861714, -3950205, -6373419, 14325289, 8628612, 33313881, -8370517}, + }, + { + FieldElement{-20186973, -4967935, 22367356, 5271547, -1097117, -4788838, -24805667, -10236854, -8940735, -5818269}, + FieldElement{-6948785, -1795212, -32625683, -16021179, 32635414, -7374245, 15989197, -12838188, 28358192, -4253904}, + FieldElement{-23561781, -2799059, -32351682, -1661963, -9147719, 10429267, -16637684, 4072016, -5351664, 5596589}, + }, + { + FieldElement{-28236598, -3390048, 12312896, 6213178, 3117142, 16078565, 29266239, 2557221, 1768301, 15373193}, + FieldElement{-7243358, -3246960, -4593467, -7553353, -127927, -912245, -1090902, -4504991, -24660491, 3442910}, + FieldElement{-30210571, 5124043, 14181784, 8197961, 18964734, -11939093, 22597931, 7176455, -18585478, 13365930}, + }, + { + FieldElement{-7877390, -1499958, 8324673, 4690079, 6261860, 890446, 24538107, -8570186, -9689599, -3031667}, + FieldElement{25008904, -10771599, -4305031, -9638010, 16265036, 15721635, 683793, -11823784, 15723479, -15163481}, + FieldElement{-9660625, 12374379, -27006999, -7026148, -7724114, -12314514, 11879682, 5400171, 519526, -1235876}, + }, + { + FieldElement{22258397, -16332233, -7869817, 14613016, -22520255, -2950923, -20353881, 7315967, 16648397, 7605640}, + FieldElement{-8081308, -8464597, -8223311, 9719710, 19259459, -15348212, 23994942, -5281555, -9468848, 4763278}, + FieldElement{-21699244, 9220969, -15730624, 1084137, -25476107, -2852390, 31088447, -7764523, -11356529, 728112}, + }, + { + FieldElement{26047220, -11751471, -6900323, -16521798, 24092068, 9158119, -4273545, -12555558, -29365436, -5498272}, + FieldElement{17510331, -322857, 5854289, 8403524, 17133918, -3112612, -28111007, 12327945, 10750447, 10014012}, + FieldElement{-10312768, 3936952, 9156313, -8897683, 16498692, -994647, -27481051, -666732, 3424691, 7540221}, + }, + { + FieldElement{30322361, -6964110, 11361005, -4143317, 7433304, 4989748, -7071422, -16317219, -9244265, 15258046}, + FieldElement{13054562, -2779497, 19155474, 469045, -12482797, 4566042, 5631406, 2711395, 1062915, -5136345}, + FieldElement{-19240248, -11254599, -29509029, -7499965, -5835763, 13005411, -6066489, 12194497, 32960380, 1459310}, + }, + }, + { + { + FieldElement{19852034, 7027924, 23669353, 10020366, 8586503, -6657907, 394197, -6101885, 18638003, -11174937}, + FieldElement{31395534, 15098109, 26581030, 8030562, -16527914, -5007134, 9012486, -7584354, -6643087, -5442636}, + FieldElement{-9192165, -2347377, -1997099, 4529534, 25766844, 607986, -13222, 9677543, -32294889, -6456008}, + }, + { + FieldElement{-2444496, -149937, 29348902, 8186665, 1873760, 12489863, -30934579, -7839692, -7852844, -8138429}, + FieldElement{-15236356, -15433509, 7766470, 746860, 26346930, -10221762, -27333451, 10754588, -9431476, 5203576}, + FieldElement{31834314, 14135496, -770007, 5159118, 20917671, -16768096, -7467973, -7337524, 31809243, 7347066}, + }, + { + FieldElement{-9606723, -11874240, 20414459, 13033986, 13716524, -11691881, 19797970, -12211255, 15192876, -2087490}, + FieldElement{-12663563, -2181719, 1168162, -3804809, 26747877, -14138091, 10609330, 12694420, 33473243, -13382104}, + FieldElement{33184999, 11180355, 15832085, -11385430, -1633671, 225884, 15089336, -11023903, -6135662, 14480053}, + }, + { + FieldElement{31308717, -5619998, 31030840, -1897099, 15674547, -6582883, 5496208, 13685227, 27595050, 8737275}, + FieldElement{-20318852, -15150239, 10933843, -16178022, 8335352, -7546022, -31008351, -12610604, 26498114, 66511}, + FieldElement{22644454, -8761729, -16671776, 4884562, -3105614, -13559366, 30540766, -4286747, -13327787, -7515095}, + }, + { + FieldElement{-28017847, 9834845, 18617207, -2681312, -3401956, -13307506, 8205540, 13585437, -17127465, 15115439}, + FieldElement{23711543, -672915, 31206561, -8362711, 6164647, -9709987, -33535882, -1426096, 8236921, 16492939}, + FieldElement{-23910559, -13515526, -26299483, -4503841, 25005590, -7687270, 19574902, 10071562, 6708380, -6222424}, + }, + { + FieldElement{2101391, -4930054, 19702731, 2367575, -15427167, 1047675, 5301017, 9328700, 29955601, -11678310}, + FieldElement{3096359, 9271816, -21620864, -15521844, -14847996, -7592937, -25892142, -12635595, -9917575, 6216608}, + FieldElement{-32615849, 338663, -25195611, 2510422, -29213566, -13820213, 24822830, -6146567, -26767480, 7525079}, + }, + { + FieldElement{-23066649, -13985623, 16133487, -7896178, -3389565, 778788, -910336, -2782495, -19386633, 11994101}, + FieldElement{21691500, -13624626, -641331, -14367021, 3285881, -3483596, -25064666, 9718258, -7477437, 13381418}, + FieldElement{18445390, -4202236, 14979846, 11622458, -1727110, -3582980, 23111648, -6375247, 28535282, 15779576}, + }, + { + FieldElement{30098053, 3089662, -9234387, 16662135, -21306940, 11308411, -14068454, 12021730, 9955285, -16303356}, + FieldElement{9734894, -14576830, -7473633, -9138735, 2060392, 11313496, -18426029, 9924399, 20194861, 13380996}, + FieldElement{-26378102, -7965207, -22167821, 15789297, -18055342, -6168792, -1984914, 15707771, 26342023, 10146099}, + }, + }, + { + { + FieldElement{-26016874, -219943, 21339191, -41388, 19745256, -2878700, -29637280, 2227040, 21612326, -545728}, + FieldElement{-13077387, 1184228, 23562814, -5970442, -20351244, -6348714, 25764461, 12243797, -20856566, 11649658}, + FieldElement{-10031494, 11262626, 27384172, 2271902, 26947504, -15997771, 39944, 6114064, 33514190, 2333242}, + }, + { + FieldElement{-21433588, -12421821, 8119782, 7219913, -21830522, -9016134, -6679750, -12670638, 24350578, -13450001}, + FieldElement{-4116307, -11271533, -23886186, 4843615, -30088339, 690623, -31536088, -10406836, 8317860, 12352766}, + FieldElement{18200138, -14475911, -33087759, -2696619, -23702521, -9102511, -23552096, -2287550, 20712163, 6719373}, + }, + { + FieldElement{26656208, 6075253, -7858556, 1886072, -28344043, 4262326, 11117530, -3763210, 26224235, -3297458}, + FieldElement{-17168938, -14854097, -3395676, -16369877, -19954045, 14050420, 21728352, 9493610, 18620611, -16428628}, + FieldElement{-13323321, 13325349, 11432106, 5964811, 18609221, 6062965, -5269471, -9725556, -30701573, -16479657}, + }, + { + FieldElement{-23860538, -11233159, 26961357, 1640861, -32413112, -16737940, 12248509, -5240639, 13735342, 1934062}, + FieldElement{25089769, 6742589, 17081145, -13406266, 21909293, -16067981, -15136294, -3765346, -21277997, 5473616}, + FieldElement{31883677, -7961101, 1083432, -11572403, 22828471, 13290673, -7125085, 12469656, 29111212, -5451014}, + }, + { + FieldElement{24244947, -15050407, -26262976, 2791540, -14997599, 16666678, 24367466, 6388839, -10295587, 452383}, + FieldElement{-25640782, -3417841, 5217916, 16224624, 19987036, -4082269, -24236251, -5915248, 15766062, 8407814}, + FieldElement{-20406999, 13990231, 15495425, 16395525, 5377168, 15166495, -8917023, -4388953, -8067909, 2276718}, + }, + { + FieldElement{30157918, 12924066, -17712050, 9245753, 19895028, 3368142, -23827587, 5096219, 22740376, -7303417}, + FieldElement{2041139, -14256350, 7783687, 13876377, -25946985, -13352459, 24051124, 13742383, -15637599, 13295222}, + FieldElement{33338237, -8505733, 12532113, 7977527, 9106186, -1715251, -17720195, -4612972, -4451357, -14669444}, + }, + { + FieldElement{-20045281, 5454097, -14346548, 6447146, 28862071, 1883651, -2469266, -4141880, 7770569, 9620597}, + FieldElement{23208068, 7979712, 33071466, 8149229, 1758231, -10834995, 30945528, -1694323, -33502340, -14767970}, + FieldElement{1439958, -16270480, -1079989, -793782, 4625402, 10647766, -5043801, 1220118, 30494170, -11440799}, + }, + { + FieldElement{-5037580, -13028295, -2970559, -3061767, 15640974, -6701666, -26739026, 926050, -1684339, -13333647}, + FieldElement{13908495, -3549272, 30919928, -6273825, -21521863, 7989039, 9021034, 9078865, 3353509, 4033511}, + FieldElement{-29663431, -15113610, 32259991, -344482, 24295849, -12912123, 23161163, 8839127, 27485041, 7356032}, + }, + }, + { + { + FieldElement{9661027, 705443, 11980065, -5370154, -1628543, 14661173, -6346142, 2625015, 28431036, -16771834}, + FieldElement{-23839233, -8311415, -25945511, 7480958, -17681669, -8354183, -22545972, 14150565, 15970762, 4099461}, + FieldElement{29262576, 16756590, 26350592, -8793563, 8529671, -11208050, 13617293, -9937143, 11465739, 8317062}, + }, + { + FieldElement{-25493081, -6962928, 32500200, -9419051, -23038724, -2302222, 14898637, 3848455, 20969334, -5157516}, + FieldElement{-20384450, -14347713, -18336405, 13884722, -33039454, 2842114, -21610826, -3649888, 11177095, 14989547}, + FieldElement{-24496721, -11716016, 16959896, 2278463, 12066309, 10137771, 13515641, 2581286, -28487508, 9930240}, + }, + { + FieldElement{-17751622, -2097826, 16544300, -13009300, -15914807, -14949081, 18345767, -13403753, 16291481, -5314038}, + FieldElement{-33229194, 2553288, 32678213, 9875984, 8534129, 6889387, -9676774, 6957617, 4368891, 9788741}, + FieldElement{16660756, 7281060, -10830758, 12911820, 20108584, -8101676, -21722536, -8613148, 16250552, -11111103}, + }, + { + FieldElement{-19765507, 2390526, -16551031, 14161980, 1905286, 6414907, 4689584, 10604807, -30190403, 4782747}, + FieldElement{-1354539, 14736941, -7367442, -13292886, 7710542, -14155590, -9981571, 4383045, 22546403, 437323}, + FieldElement{31665577, -12180464, -16186830, 1491339, -18368625, 3294682, 27343084, 2786261, -30633590, -14097016}, + }, + { + FieldElement{-14467279, -683715, -33374107, 7448552, 19294360, 14334329, -19690631, 2355319, -19284671, -6114373}, + FieldElement{15121312, -15796162, 6377020, -6031361, -10798111, -12957845, 18952177, 15496498, -29380133, 11754228}, + FieldElement{-2637277, -13483075, 8488727, -14303896, 12728761, -1622493, 7141596, 11724556, 22761615, -10134141}, + }, + { + FieldElement{16918416, 11729663, -18083579, 3022987, -31015732, -13339659, -28741185, -12227393, 32851222, 11717399}, + FieldElement{11166634, 7338049, -6722523, 4531520, -29468672, -7302055, 31474879, 3483633, -1193175, -4030831}, + FieldElement{-185635, 9921305, 31456609, -13536438, -12013818, 13348923, 33142652, 6546660, -19985279, -3948376}, + }, + { + FieldElement{-32460596, 11266712, -11197107, -7899103, 31703694, 3855903, -8537131, -12833048, -30772034, -15486313}, + FieldElement{-18006477, 12709068, 3991746, -6479188, -21491523, -10550425, -31135347, -16049879, 10928917, 3011958}, + FieldElement{-6957757, -15594337, 31696059, 334240, 29576716, 14796075, -30831056, -12805180, 18008031, 10258577}, + }, + { + FieldElement{-22448644, 15655569, 7018479, -4410003, -30314266, -1201591, -1853465, 1367120, 25127874, 6671743}, + FieldElement{29701166, -14373934, -10878120, 9279288, -17568, 13127210, 21382910, 11042292, 25838796, 4642684}, + FieldElement{-20430234, 14955537, -24126347, 8124619, -5369288, -5990470, 30468147, -13900640, 18423289, 4177476}, + }, + }, +} diff --git a/src/crypto/ed25519/internal/edwards25519/edwards25519.go b/src/crypto/ed25519/internal/edwards25519/edwards25519.go new file mode 100644 index 0000000000..fd03c252af --- /dev/null +++ b/src/crypto/ed25519/internal/edwards25519/edwards25519.go @@ -0,0 +1,1793 @@ +// 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 edwards25519 + +import "encoding/binary" + +// This code is a port of the public domain, “ref10†implementation of ed25519 +// from SUPERCOP. + +// FieldElement represents an element of the field GF(2^255 - 19). An element +// t, entries t[0]...t[9], represents the integer t[0]+2^26 t[1]+2^51 t[2]+2^77 +// t[3]+2^102 t[4]+...+2^230 t[9]. Bounds on each t[i] vary depending on +// context. +type FieldElement [10]int32 + +var zero FieldElement + +func FeZero(fe *FieldElement) { + copy(fe[:], zero[:]) +} + +func FeOne(fe *FieldElement) { + FeZero(fe) + fe[0] = 1 +} + +func FeAdd(dst, a, b *FieldElement) { + dst[0] = a[0] + b[0] + dst[1] = a[1] + b[1] + dst[2] = a[2] + b[2] + dst[3] = a[3] + b[3] + dst[4] = a[4] + b[4] + dst[5] = a[5] + b[5] + dst[6] = a[6] + b[6] + dst[7] = a[7] + b[7] + dst[8] = a[8] + b[8] + dst[9] = a[9] + b[9] +} + +func FeSub(dst, a, b *FieldElement) { + dst[0] = a[0] - b[0] + dst[1] = a[1] - b[1] + dst[2] = a[2] - b[2] + dst[3] = a[3] - b[3] + dst[4] = a[4] - b[4] + dst[5] = a[5] - b[5] + dst[6] = a[6] - b[6] + dst[7] = a[7] - b[7] + dst[8] = a[8] - b[8] + dst[9] = a[9] - b[9] +} + +func FeCopy(dst, src *FieldElement) { + copy(dst[:], src[:]) +} + +// Replace (f,g) with (g,g) if b == 1; +// replace (f,g) with (f,g) if b == 0. +// +// Preconditions: b in {0,1}. +func FeCMove(f, g *FieldElement, b int32) { + b = -b + f[0] ^= b & (f[0] ^ g[0]) + f[1] ^= b & (f[1] ^ g[1]) + f[2] ^= b & (f[2] ^ g[2]) + f[3] ^= b & (f[3] ^ g[3]) + f[4] ^= b & (f[4] ^ g[4]) + f[5] ^= b & (f[5] ^ g[5]) + f[6] ^= b & (f[6] ^ g[6]) + f[7] ^= b & (f[7] ^ g[7]) + f[8] ^= b & (f[8] ^ g[8]) + f[9] ^= b & (f[9] ^ g[9]) +} + +func load3(in []byte) int64 { + var r int64 + r = int64(in[0]) + r |= int64(in[1]) << 8 + r |= int64(in[2]) << 16 + return r +} + +func load4(in []byte) int64 { + var r int64 + r = int64(in[0]) + r |= int64(in[1]) << 8 + r |= int64(in[2]) << 16 + r |= int64(in[3]) << 24 + return r +} + +func FeFromBytes(dst *FieldElement, src *[32]byte) { + h0 := load4(src[:]) + h1 := load3(src[4:]) << 6 + h2 := load3(src[7:]) << 5 + h3 := load3(src[10:]) << 3 + h4 := load3(src[13:]) << 2 + h5 := load4(src[16:]) + h6 := load3(src[20:]) << 7 + h7 := load3(src[23:]) << 5 + h8 := load3(src[26:]) << 4 + h9 := (load3(src[29:]) & 8388607) << 2 + + FeCombine(dst, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9) +} + +// FeToBytes marshals h to s. +// Preconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +// +// Write p=2^255-19; q=floor(h/p). +// Basic claim: q = floor(2^(-255)(h + 19 2^(-25)h9 + 2^(-1))). +// +// Proof: +// Have |h|<=p so |q|<=1 so |19^2 2^(-255) q|<1/4. +// Also have |h-2^230 h9|<2^230 so |19 2^(-255)(h-2^230 h9)|<1/4. +// +// Write y=2^(-1)-19^2 2^(-255)q-19 2^(-255)(h-2^230 h9). +// Then 0> 25 + q = (h[0] + q) >> 26 + q = (h[1] + q) >> 25 + q = (h[2] + q) >> 26 + q = (h[3] + q) >> 25 + q = (h[4] + q) >> 26 + q = (h[5] + q) >> 25 + q = (h[6] + q) >> 26 + q = (h[7] + q) >> 25 + q = (h[8] + q) >> 26 + q = (h[9] + q) >> 25 + + // Goal: Output h-(2^255-19)q, which is between 0 and 2^255-20. + h[0] += 19 * q + // Goal: Output h-2^255 q, which is between 0 and 2^255-20. + + carry[0] = h[0] >> 26 + h[1] += carry[0] + h[0] -= carry[0] << 26 + carry[1] = h[1] >> 25 + h[2] += carry[1] + h[1] -= carry[1] << 25 + carry[2] = h[2] >> 26 + h[3] += carry[2] + h[2] -= carry[2] << 26 + carry[3] = h[3] >> 25 + h[4] += carry[3] + h[3] -= carry[3] << 25 + carry[4] = h[4] >> 26 + h[5] += carry[4] + h[4] -= carry[4] << 26 + carry[5] = h[5] >> 25 + h[6] += carry[5] + h[5] -= carry[5] << 25 + carry[6] = h[6] >> 26 + h[7] += carry[6] + h[6] -= carry[6] << 26 + carry[7] = h[7] >> 25 + h[8] += carry[7] + h[7] -= carry[7] << 25 + carry[8] = h[8] >> 26 + h[9] += carry[8] + h[8] -= carry[8] << 26 + carry[9] = h[9] >> 25 + h[9] -= carry[9] << 25 + // h10 = carry9 + + // Goal: Output h[0]+...+2^255 h10-2^255 q, which is between 0 and 2^255-20. + // Have h[0]+...+2^230 h[9] between 0 and 2^255-1; + // evidently 2^255 h10-2^255 q = 0. + // Goal: Output h[0]+...+2^230 h[9]. + + s[0] = byte(h[0] >> 0) + s[1] = byte(h[0] >> 8) + s[2] = byte(h[0] >> 16) + s[3] = byte((h[0] >> 24) | (h[1] << 2)) + s[4] = byte(h[1] >> 6) + s[5] = byte(h[1] >> 14) + s[6] = byte((h[1] >> 22) | (h[2] << 3)) + s[7] = byte(h[2] >> 5) + s[8] = byte(h[2] >> 13) + s[9] = byte((h[2] >> 21) | (h[3] << 5)) + s[10] = byte(h[3] >> 3) + s[11] = byte(h[3] >> 11) + s[12] = byte((h[3] >> 19) | (h[4] << 6)) + s[13] = byte(h[4] >> 2) + s[14] = byte(h[4] >> 10) + s[15] = byte(h[4] >> 18) + s[16] = byte(h[5] >> 0) + s[17] = byte(h[5] >> 8) + s[18] = byte(h[5] >> 16) + s[19] = byte((h[5] >> 24) | (h[6] << 1)) + s[20] = byte(h[6] >> 7) + s[21] = byte(h[6] >> 15) + s[22] = byte((h[6] >> 23) | (h[7] << 3)) + s[23] = byte(h[7] >> 5) + s[24] = byte(h[7] >> 13) + s[25] = byte((h[7] >> 21) | (h[8] << 4)) + s[26] = byte(h[8] >> 4) + s[27] = byte(h[8] >> 12) + s[28] = byte((h[8] >> 20) | (h[9] << 6)) + s[29] = byte(h[9] >> 2) + s[30] = byte(h[9] >> 10) + s[31] = byte(h[9] >> 18) +} + +func FeIsNegative(f *FieldElement) byte { + var s [32]byte + FeToBytes(&s, f) + return s[0] & 1 +} + +func FeIsNonZero(f *FieldElement) int32 { + var s [32]byte + FeToBytes(&s, f) + var x uint8 + for _, b := range s { + x |= b + } + x |= x >> 4 + x |= x >> 2 + x |= x >> 1 + return int32(x & 1) +} + +// FeNeg sets h = -f +// +// Preconditions: +// |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +// +// Postconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +func FeNeg(h, f *FieldElement) { + h[0] = -f[0] + h[1] = -f[1] + h[2] = -f[2] + h[3] = -f[3] + h[4] = -f[4] + h[5] = -f[5] + h[6] = -f[6] + h[7] = -f[7] + h[8] = -f[8] + h[9] = -f[9] +} + +func FeCombine(h *FieldElement, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 int64) { + var c0, c1, c2, c3, c4, c5, c6, c7, c8, c9 int64 + + /* + |h0| <= (1.1*1.1*2^52*(1+19+19+19+19)+1.1*1.1*2^50*(38+38+38+38+38)) + i.e. |h0| <= 1.2*2^59; narrower ranges for h2, h4, h6, h8 + |h1| <= (1.1*1.1*2^51*(1+1+19+19+19+19+19+19+19+19)) + i.e. |h1| <= 1.5*2^58; narrower ranges for h3, h5, h7, h9 + */ + + c0 = (h0 + (1 << 25)) >> 26 + h1 += c0 + h0 -= c0 << 26 + c4 = (h4 + (1 << 25)) >> 26 + h5 += c4 + h4 -= c4 << 26 + /* |h0| <= 2^25 */ + /* |h4| <= 2^25 */ + /* |h1| <= 1.51*2^58 */ + /* |h5| <= 1.51*2^58 */ + + c1 = (h1 + (1 << 24)) >> 25 + h2 += c1 + h1 -= c1 << 25 + c5 = (h5 + (1 << 24)) >> 25 + h6 += c5 + h5 -= c5 << 25 + /* |h1| <= 2^24; from now on fits into int32 */ + /* |h5| <= 2^24; from now on fits into int32 */ + /* |h2| <= 1.21*2^59 */ + /* |h6| <= 1.21*2^59 */ + + c2 = (h2 + (1 << 25)) >> 26 + h3 += c2 + h2 -= c2 << 26 + c6 = (h6 + (1 << 25)) >> 26 + h7 += c6 + h6 -= c6 << 26 + /* |h2| <= 2^25; from now on fits into int32 unchanged */ + /* |h6| <= 2^25; from now on fits into int32 unchanged */ + /* |h3| <= 1.51*2^58 */ + /* |h7| <= 1.51*2^58 */ + + c3 = (h3 + (1 << 24)) >> 25 + h4 += c3 + h3 -= c3 << 25 + c7 = (h7 + (1 << 24)) >> 25 + h8 += c7 + h7 -= c7 << 25 + /* |h3| <= 2^24; from now on fits into int32 unchanged */ + /* |h7| <= 2^24; from now on fits into int32 unchanged */ + /* |h4| <= 1.52*2^33 */ + /* |h8| <= 1.52*2^33 */ + + c4 = (h4 + (1 << 25)) >> 26 + h5 += c4 + h4 -= c4 << 26 + c8 = (h8 + (1 << 25)) >> 26 + h9 += c8 + h8 -= c8 << 26 + /* |h4| <= 2^25; from now on fits into int32 unchanged */ + /* |h8| <= 2^25; from now on fits into int32 unchanged */ + /* |h5| <= 1.01*2^24 */ + /* |h9| <= 1.51*2^58 */ + + c9 = (h9 + (1 << 24)) >> 25 + h0 += c9 * 19 + h9 -= c9 << 25 + /* |h9| <= 2^24; from now on fits into int32 unchanged */ + /* |h0| <= 1.8*2^37 */ + + c0 = (h0 + (1 << 25)) >> 26 + h1 += c0 + h0 -= c0 << 26 + /* |h0| <= 2^25; from now on fits into int32 unchanged */ + /* |h1| <= 1.01*2^24 */ + + h[0] = int32(h0) + h[1] = int32(h1) + h[2] = int32(h2) + h[3] = int32(h3) + h[4] = int32(h4) + h[5] = int32(h5) + h[6] = int32(h6) + h[7] = int32(h7) + h[8] = int32(h8) + h[9] = int32(h9) +} + +// FeMul calculates h = f * g +// Can overlap h with f or g. +// +// Preconditions: +// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +// |g| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +// +// Postconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +// +// Notes on implementation strategy: +// +// Using schoolbook multiplication. +// Karatsuba would save a little in some cost models. +// +// Most multiplications by 2 and 19 are 32-bit precomputations; +// cheaper than 64-bit postcomputations. +// +// There is one remaining multiplication by 19 in the carry chain; +// one *19 precomputation can be merged into this, +// but the resulting data flow is considerably less clean. +// +// There are 12 carries below. +// 10 of them are 2-way parallelizable and vectorizable. +// Can get away with 11 carries, but then data flow is much deeper. +// +// With tighter constraints on inputs, can squeeze carries into int32. +func FeMul(h, f, g *FieldElement) { + f0 := int64(f[0]) + f1 := int64(f[1]) + f2 := int64(f[2]) + f3 := int64(f[3]) + f4 := int64(f[4]) + f5 := int64(f[5]) + f6 := int64(f[6]) + f7 := int64(f[7]) + f8 := int64(f[8]) + f9 := int64(f[9]) + + f1_2 := int64(2 * f[1]) + f3_2 := int64(2 * f[3]) + f5_2 := int64(2 * f[5]) + f7_2 := int64(2 * f[7]) + f9_2 := int64(2 * f[9]) + + g0 := int64(g[0]) + g1 := int64(g[1]) + g2 := int64(g[2]) + g3 := int64(g[3]) + g4 := int64(g[4]) + g5 := int64(g[5]) + g6 := int64(g[6]) + g7 := int64(g[7]) + g8 := int64(g[8]) + g9 := int64(g[9]) + + g1_19 := int64(19 * g[1]) /* 1.4*2^29 */ + g2_19 := int64(19 * g[2]) /* 1.4*2^30; still ok */ + g3_19 := int64(19 * g[3]) + g4_19 := int64(19 * g[4]) + g5_19 := int64(19 * g[5]) + g6_19 := int64(19 * g[6]) + g7_19 := int64(19 * g[7]) + g8_19 := int64(19 * g[8]) + g9_19 := int64(19 * g[9]) + + h0 := f0*g0 + f1_2*g9_19 + f2*g8_19 + f3_2*g7_19 + f4*g6_19 + f5_2*g5_19 + f6*g4_19 + f7_2*g3_19 + f8*g2_19 + f9_2*g1_19 + h1 := f0*g1 + f1*g0 + f2*g9_19 + f3*g8_19 + f4*g7_19 + f5*g6_19 + f6*g5_19 + f7*g4_19 + f8*g3_19 + f9*g2_19 + h2 := f0*g2 + f1_2*g1 + f2*g0 + f3_2*g9_19 + f4*g8_19 + f5_2*g7_19 + f6*g6_19 + f7_2*g5_19 + f8*g4_19 + f9_2*g3_19 + h3 := f0*g3 + f1*g2 + f2*g1 + f3*g0 + f4*g9_19 + f5*g8_19 + f6*g7_19 + f7*g6_19 + f8*g5_19 + f9*g4_19 + h4 := f0*g4 + f1_2*g3 + f2*g2 + f3_2*g1 + f4*g0 + f5_2*g9_19 + f6*g8_19 + f7_2*g7_19 + f8*g6_19 + f9_2*g5_19 + h5 := f0*g5 + f1*g4 + f2*g3 + f3*g2 + f4*g1 + f5*g0 + f6*g9_19 + f7*g8_19 + f8*g7_19 + f9*g6_19 + h6 := f0*g6 + f1_2*g5 + f2*g4 + f3_2*g3 + f4*g2 + f5_2*g1 + f6*g0 + f7_2*g9_19 + f8*g8_19 + f9_2*g7_19 + h7 := f0*g7 + f1*g6 + f2*g5 + f3*g4 + f4*g3 + f5*g2 + f6*g1 + f7*g0 + f8*g9_19 + f9*g8_19 + h8 := f0*g8 + f1_2*g7 + f2*g6 + f3_2*g5 + f4*g4 + f5_2*g3 + f6*g2 + f7_2*g1 + f8*g0 + f9_2*g9_19 + h9 := f0*g9 + f1*g8 + f2*g7 + f3*g6 + f4*g5 + f5*g4 + f6*g3 + f7*g2 + f8*g1 + f9*g0 + + FeCombine(h, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9) +} + +func feSquare(f *FieldElement) (h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 int64) { + f0 := int64(f[0]) + f1 := int64(f[1]) + f2 := int64(f[2]) + f3 := int64(f[3]) + f4 := int64(f[4]) + f5 := int64(f[5]) + f6 := int64(f[6]) + f7 := int64(f[7]) + f8 := int64(f[8]) + f9 := int64(f[9]) + f0_2 := int64(2 * f[0]) + f1_2 := int64(2 * f[1]) + f2_2 := int64(2 * f[2]) + f3_2 := int64(2 * f[3]) + f4_2 := int64(2 * f[4]) + f5_2 := int64(2 * f[5]) + f6_2 := int64(2 * f[6]) + f7_2 := int64(2 * f[7]) + f5_38 := 38 * f5 // 1.31*2^30 + f6_19 := 19 * f6 // 1.31*2^30 + f7_38 := 38 * f7 // 1.31*2^30 + f8_19 := 19 * f8 // 1.31*2^30 + f9_38 := 38 * f9 // 1.31*2^30 + + h0 = f0*f0 + f1_2*f9_38 + f2_2*f8_19 + f3_2*f7_38 + f4_2*f6_19 + f5*f5_38 + h1 = f0_2*f1 + f2*f9_38 + f3_2*f8_19 + f4*f7_38 + f5_2*f6_19 + h2 = f0_2*f2 + f1_2*f1 + f3_2*f9_38 + f4_2*f8_19 + f5_2*f7_38 + f6*f6_19 + h3 = f0_2*f3 + f1_2*f2 + f4*f9_38 + f5_2*f8_19 + f6*f7_38 + h4 = f0_2*f4 + f1_2*f3_2 + f2*f2 + f5_2*f9_38 + f6_2*f8_19 + f7*f7_38 + h5 = f0_2*f5 + f1_2*f4 + f2_2*f3 + f6*f9_38 + f7_2*f8_19 + h6 = f0_2*f6 + f1_2*f5_2 + f2_2*f4 + f3_2*f3 + f7_2*f9_38 + f8*f8_19 + h7 = f0_2*f7 + f1_2*f6 + f2_2*f5 + f3_2*f4 + f8*f9_38 + h8 = f0_2*f8 + f1_2*f7_2 + f2_2*f6 + f3_2*f5_2 + f4*f4 + f9*f9_38 + h9 = f0_2*f9 + f1_2*f8 + f2_2*f7 + f3_2*f6 + f4_2*f5 + + return +} + +// FeSquare calculates h = f*f. Can overlap h with f. +// +// Preconditions: +// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +// +// Postconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +func FeSquare(h, f *FieldElement) { + h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 := feSquare(f) + FeCombine(h, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9) +} + +// FeSquare2 sets h = 2 * f * f +// +// Can overlap h with f. +// +// Preconditions: +// |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc. +// +// Postconditions: +// |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc. +// See fe_mul.c for discussion of implementation strategy. +func FeSquare2(h, f *FieldElement) { + h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 := feSquare(f) + + h0 += h0 + h1 += h1 + h2 += h2 + h3 += h3 + h4 += h4 + h5 += h5 + h6 += h6 + h7 += h7 + h8 += h8 + h9 += h9 + + FeCombine(h, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9) +} + +func FeInvert(out, z *FieldElement) { + var t0, t1, t2, t3 FieldElement + var i int + + FeSquare(&t0, z) // 2^1 + FeSquare(&t1, &t0) // 2^2 + for i = 1; i < 2; i++ { // 2^3 + FeSquare(&t1, &t1) + } + FeMul(&t1, z, &t1) // 2^3 + 2^0 + FeMul(&t0, &t0, &t1) // 2^3 + 2^1 + 2^0 + FeSquare(&t2, &t0) // 2^4 + 2^2 + 2^1 + FeMul(&t1, &t1, &t2) // 2^4 + 2^3 + 2^2 + 2^1 + 2^0 + FeSquare(&t2, &t1) // 5,4,3,2,1 + for i = 1; i < 5; i++ { // 9,8,7,6,5 + FeSquare(&t2, &t2) + } + FeMul(&t1, &t2, &t1) // 9,8,7,6,5,4,3,2,1,0 + FeSquare(&t2, &t1) // 10..1 + for i = 1; i < 10; i++ { // 19..10 + FeSquare(&t2, &t2) + } + FeMul(&t2, &t2, &t1) // 19..0 + FeSquare(&t3, &t2) // 20..1 + for i = 1; i < 20; i++ { // 39..20 + FeSquare(&t3, &t3) + } + FeMul(&t2, &t3, &t2) // 39..0 + FeSquare(&t2, &t2) // 40..1 + for i = 1; i < 10; i++ { // 49..10 + FeSquare(&t2, &t2) + } + FeMul(&t1, &t2, &t1) // 49..0 + FeSquare(&t2, &t1) // 50..1 + for i = 1; i < 50; i++ { // 99..50 + FeSquare(&t2, &t2) + } + FeMul(&t2, &t2, &t1) // 99..0 + FeSquare(&t3, &t2) // 100..1 + for i = 1; i < 100; i++ { // 199..100 + FeSquare(&t3, &t3) + } + FeMul(&t2, &t3, &t2) // 199..0 + FeSquare(&t2, &t2) // 200..1 + for i = 1; i < 50; i++ { // 249..50 + FeSquare(&t2, &t2) + } + FeMul(&t1, &t2, &t1) // 249..0 + FeSquare(&t1, &t1) // 250..1 + for i = 1; i < 5; i++ { // 254..5 + FeSquare(&t1, &t1) + } + FeMul(out, &t1, &t0) // 254..5,3,1,0 +} + +func fePow22523(out, z *FieldElement) { + var t0, t1, t2 FieldElement + var i int + + FeSquare(&t0, z) + for i = 1; i < 1; i++ { + FeSquare(&t0, &t0) + } + FeSquare(&t1, &t0) + for i = 1; i < 2; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t1, z, &t1) + FeMul(&t0, &t0, &t1) + FeSquare(&t0, &t0) + for i = 1; i < 1; i++ { + FeSquare(&t0, &t0) + } + FeMul(&t0, &t1, &t0) + FeSquare(&t1, &t0) + for i = 1; i < 5; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t0, &t1, &t0) + FeSquare(&t1, &t0) + for i = 1; i < 10; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t1, &t1, &t0) + FeSquare(&t2, &t1) + for i = 1; i < 20; i++ { + FeSquare(&t2, &t2) + } + FeMul(&t1, &t2, &t1) + FeSquare(&t1, &t1) + for i = 1; i < 10; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t0, &t1, &t0) + FeSquare(&t1, &t0) + for i = 1; i < 50; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t1, &t1, &t0) + FeSquare(&t2, &t1) + for i = 1; i < 100; i++ { + FeSquare(&t2, &t2) + } + FeMul(&t1, &t2, &t1) + FeSquare(&t1, &t1) + for i = 1; i < 50; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t0, &t1, &t0) + FeSquare(&t0, &t0) + for i = 1; i < 2; i++ { + FeSquare(&t0, &t0) + } + FeMul(out, &t0, z) +} + +// Group elements are members of the elliptic curve -x^2 + y^2 = 1 + d * x^2 * +// y^2 where d = -121665/121666. +// +// Several representations are used: +// ProjectiveGroupElement: (X:Y:Z) satisfying x=X/Z, y=Y/Z +// ExtendedGroupElement: (X:Y:Z:T) satisfying x=X/Z, y=Y/Z, XY=ZT +// CompletedGroupElement: ((X:Z),(Y:T)) satisfying x=X/Z, y=Y/T +// PreComputedGroupElement: (y+x,y-x,2dxy) + +type ProjectiveGroupElement struct { + X, Y, Z FieldElement +} + +type ExtendedGroupElement struct { + X, Y, Z, T FieldElement +} + +type CompletedGroupElement struct { + X, Y, Z, T FieldElement +} + +type PreComputedGroupElement struct { + yPlusX, yMinusX, xy2d FieldElement +} + +type CachedGroupElement struct { + yPlusX, yMinusX, Z, T2d FieldElement +} + +func (p *ProjectiveGroupElement) Zero() { + FeZero(&p.X) + FeOne(&p.Y) + FeOne(&p.Z) +} + +func (p *ProjectiveGroupElement) Double(r *CompletedGroupElement) { + var t0 FieldElement + + FeSquare(&r.X, &p.X) + FeSquare(&r.Z, &p.Y) + FeSquare2(&r.T, &p.Z) + FeAdd(&r.Y, &p.X, &p.Y) + FeSquare(&t0, &r.Y) + FeAdd(&r.Y, &r.Z, &r.X) + FeSub(&r.Z, &r.Z, &r.X) + FeSub(&r.X, &t0, &r.Y) + FeSub(&r.T, &r.T, &r.Z) +} + +func (p *ProjectiveGroupElement) ToBytes(s *[32]byte) { + var recip, x, y FieldElement + + FeInvert(&recip, &p.Z) + FeMul(&x, &p.X, &recip) + FeMul(&y, &p.Y, &recip) + FeToBytes(s, &y) + s[31] ^= FeIsNegative(&x) << 7 +} + +func (p *ExtendedGroupElement) Zero() { + FeZero(&p.X) + FeOne(&p.Y) + FeOne(&p.Z) + FeZero(&p.T) +} + +func (p *ExtendedGroupElement) Double(r *CompletedGroupElement) { + var q ProjectiveGroupElement + p.ToProjective(&q) + q.Double(r) +} + +func (p *ExtendedGroupElement) ToCached(r *CachedGroupElement) { + FeAdd(&r.yPlusX, &p.Y, &p.X) + FeSub(&r.yMinusX, &p.Y, &p.X) + FeCopy(&r.Z, &p.Z) + FeMul(&r.T2d, &p.T, &d2) +} + +func (p *ExtendedGroupElement) ToProjective(r *ProjectiveGroupElement) { + FeCopy(&r.X, &p.X) + FeCopy(&r.Y, &p.Y) + FeCopy(&r.Z, &p.Z) +} + +func (p *ExtendedGroupElement) ToBytes(s *[32]byte) { + var recip, x, y FieldElement + + FeInvert(&recip, &p.Z) + FeMul(&x, &p.X, &recip) + FeMul(&y, &p.Y, &recip) + FeToBytes(s, &y) + s[31] ^= FeIsNegative(&x) << 7 +} + +func (p *ExtendedGroupElement) FromBytes(s *[32]byte) bool { + var u, v, v3, vxx, check FieldElement + + FeFromBytes(&p.Y, s) + FeOne(&p.Z) + FeSquare(&u, &p.Y) + FeMul(&v, &u, &d) + FeSub(&u, &u, &p.Z) // y = y^2-1 + FeAdd(&v, &v, &p.Z) // v = dy^2+1 + + FeSquare(&v3, &v) + FeMul(&v3, &v3, &v) // v3 = v^3 + FeSquare(&p.X, &v3) + FeMul(&p.X, &p.X, &v) + FeMul(&p.X, &p.X, &u) // x = uv^7 + + fePow22523(&p.X, &p.X) // x = (uv^7)^((q-5)/8) + FeMul(&p.X, &p.X, &v3) + FeMul(&p.X, &p.X, &u) // x = uv^3(uv^7)^((q-5)/8) + + var tmpX, tmp2 [32]byte + + FeSquare(&vxx, &p.X) + FeMul(&vxx, &vxx, &v) + FeSub(&check, &vxx, &u) // vx^2-u + if FeIsNonZero(&check) == 1 { + FeAdd(&check, &vxx, &u) // vx^2+u + if FeIsNonZero(&check) == 1 { + return false + } + FeMul(&p.X, &p.X, &SqrtM1) + + FeToBytes(&tmpX, &p.X) + for i, v := range tmpX { + tmp2[31-i] = v + } + } + + if FeIsNegative(&p.X) != (s[31] >> 7) { + FeNeg(&p.X, &p.X) + } + + FeMul(&p.T, &p.X, &p.Y) + return true +} + +func (p *CompletedGroupElement) ToProjective(r *ProjectiveGroupElement) { + FeMul(&r.X, &p.X, &p.T) + FeMul(&r.Y, &p.Y, &p.Z) + FeMul(&r.Z, &p.Z, &p.T) +} + +func (p *CompletedGroupElement) ToExtended(r *ExtendedGroupElement) { + FeMul(&r.X, &p.X, &p.T) + FeMul(&r.Y, &p.Y, &p.Z) + FeMul(&r.Z, &p.Z, &p.T) + FeMul(&r.T, &p.X, &p.Y) +} + +func (p *PreComputedGroupElement) Zero() { + FeOne(&p.yPlusX) + FeOne(&p.yMinusX) + FeZero(&p.xy2d) +} + +func geAdd(r *CompletedGroupElement, p *ExtendedGroupElement, q *CachedGroupElement) { + var t0 FieldElement + + FeAdd(&r.X, &p.Y, &p.X) + FeSub(&r.Y, &p.Y, &p.X) + FeMul(&r.Z, &r.X, &q.yPlusX) + FeMul(&r.Y, &r.Y, &q.yMinusX) + FeMul(&r.T, &q.T2d, &p.T) + FeMul(&r.X, &p.Z, &q.Z) + FeAdd(&t0, &r.X, &r.X) + FeSub(&r.X, &r.Z, &r.Y) + FeAdd(&r.Y, &r.Z, &r.Y) + FeAdd(&r.Z, &t0, &r.T) + FeSub(&r.T, &t0, &r.T) +} + +func geSub(r *CompletedGroupElement, p *ExtendedGroupElement, q *CachedGroupElement) { + var t0 FieldElement + + FeAdd(&r.X, &p.Y, &p.X) + FeSub(&r.Y, &p.Y, &p.X) + FeMul(&r.Z, &r.X, &q.yMinusX) + FeMul(&r.Y, &r.Y, &q.yPlusX) + FeMul(&r.T, &q.T2d, &p.T) + FeMul(&r.X, &p.Z, &q.Z) + FeAdd(&t0, &r.X, &r.X) + FeSub(&r.X, &r.Z, &r.Y) + FeAdd(&r.Y, &r.Z, &r.Y) + FeSub(&r.Z, &t0, &r.T) + FeAdd(&r.T, &t0, &r.T) +} + +func geMixedAdd(r *CompletedGroupElement, p *ExtendedGroupElement, q *PreComputedGroupElement) { + var t0 FieldElement + + FeAdd(&r.X, &p.Y, &p.X) + FeSub(&r.Y, &p.Y, &p.X) + FeMul(&r.Z, &r.X, &q.yPlusX) + FeMul(&r.Y, &r.Y, &q.yMinusX) + FeMul(&r.T, &q.xy2d, &p.T) + FeAdd(&t0, &p.Z, &p.Z) + FeSub(&r.X, &r.Z, &r.Y) + FeAdd(&r.Y, &r.Z, &r.Y) + FeAdd(&r.Z, &t0, &r.T) + FeSub(&r.T, &t0, &r.T) +} + +func geMixedSub(r *CompletedGroupElement, p *ExtendedGroupElement, q *PreComputedGroupElement) { + var t0 FieldElement + + FeAdd(&r.X, &p.Y, &p.X) + FeSub(&r.Y, &p.Y, &p.X) + FeMul(&r.Z, &r.X, &q.yMinusX) + FeMul(&r.Y, &r.Y, &q.yPlusX) + FeMul(&r.T, &q.xy2d, &p.T) + FeAdd(&t0, &p.Z, &p.Z) + FeSub(&r.X, &r.Z, &r.Y) + FeAdd(&r.Y, &r.Z, &r.Y) + FeSub(&r.Z, &t0, &r.T) + FeAdd(&r.T, &t0, &r.T) +} + +func slide(r *[256]int8, a *[32]byte) { + for i := range r { + r[i] = int8(1 & (a[i>>3] >> uint(i&7))) + } + + for i := range r { + if r[i] != 0 { + for b := 1; b <= 6 && i+b < 256; b++ { + if r[i+b] != 0 { + if r[i]+(r[i+b]<= -15 { + r[i] -= r[i+b] << uint(b) + for k := i + b; k < 256; k++ { + if r[k] == 0 { + r[k] = 1 + break + } + r[k] = 0 + } + } else { + break + } + } + } + } + } +} + +// GeDoubleScalarMultVartime sets r = a*A + b*B +// where a = a[0]+256*a[1]+...+256^31 a[31]. +// and b = b[0]+256*b[1]+...+256^31 b[31]. +// B is the Ed25519 base point (x,4/5) with x positive. +func GeDoubleScalarMultVartime(r *ProjectiveGroupElement, a *[32]byte, A *ExtendedGroupElement, b *[32]byte) { + var aSlide, bSlide [256]int8 + var Ai [8]CachedGroupElement // A,3A,5A,7A,9A,11A,13A,15A + var t CompletedGroupElement + var u, A2 ExtendedGroupElement + var i int + + slide(&aSlide, a) + slide(&bSlide, b) + + A.ToCached(&Ai[0]) + A.Double(&t) + t.ToExtended(&A2) + + for i := 0; i < 7; i++ { + geAdd(&t, &A2, &Ai[i]) + t.ToExtended(&u) + u.ToCached(&Ai[i+1]) + } + + r.Zero() + + for i = 255; i >= 0; i-- { + if aSlide[i] != 0 || bSlide[i] != 0 { + break + } + } + + for ; i >= 0; i-- { + r.Double(&t) + + if aSlide[i] > 0 { + t.ToExtended(&u) + geAdd(&t, &u, &Ai[aSlide[i]/2]) + } else if aSlide[i] < 0 { + t.ToExtended(&u) + geSub(&t, &u, &Ai[(-aSlide[i])/2]) + } + + if bSlide[i] > 0 { + t.ToExtended(&u) + geMixedAdd(&t, &u, &bi[bSlide[i]/2]) + } else if bSlide[i] < 0 { + t.ToExtended(&u) + geMixedSub(&t, &u, &bi[(-bSlide[i])/2]) + } + + t.ToProjective(r) + } +} + +// equal returns 1 if b == c and 0 otherwise, assuming that b and c are +// non-negative. +func equal(b, c int32) int32 { + x := uint32(b ^ c) + x-- + return int32(x >> 31) +} + +// negative returns 1 if b < 0 and 0 otherwise. +func negative(b int32) int32 { + return (b >> 31) & 1 +} + +func PreComputedGroupElementCMove(t, u *PreComputedGroupElement, b int32) { + FeCMove(&t.yPlusX, &u.yPlusX, b) + FeCMove(&t.yMinusX, &u.yMinusX, b) + FeCMove(&t.xy2d, &u.xy2d, b) +} + +func selectPoint(t *PreComputedGroupElement, pos int32, b int32) { + var minusT PreComputedGroupElement + bNegative := negative(b) + bAbs := b - (((-bNegative) & b) << 1) + + t.Zero() + for i := int32(0); i < 8; i++ { + PreComputedGroupElementCMove(t, &base[pos][i], equal(bAbs, i+1)) + } + FeCopy(&minusT.yPlusX, &t.yMinusX) + FeCopy(&minusT.yMinusX, &t.yPlusX) + FeNeg(&minusT.xy2d, &t.xy2d) + PreComputedGroupElementCMove(t, &minusT, bNegative) +} + +// GeScalarMultBase computes h = a*B, where +// a = a[0]+256*a[1]+...+256^31 a[31] +// B is the Ed25519 base point (x,4/5) with x positive. +// +// Preconditions: +// a[31] <= 127 +func GeScalarMultBase(h *ExtendedGroupElement, a *[32]byte) { + var e [64]int8 + + for i, v := range a { + e[2*i] = int8(v & 15) + e[2*i+1] = int8((v >> 4) & 15) + } + + // each e[i] is between 0 and 15 and e[63] is between 0 and 7. + + carry := int8(0) + for i := 0; i < 63; i++ { + e[i] += carry + carry = (e[i] + 8) >> 4 + e[i] -= carry << 4 + } + e[63] += carry + // each e[i] is between -8 and 8. + + h.Zero() + var t PreComputedGroupElement + var r CompletedGroupElement + for i := int32(1); i < 64; i += 2 { + selectPoint(&t, i/2, int32(e[i])) + geMixedAdd(&r, h, &t) + r.ToExtended(h) + } + + var s ProjectiveGroupElement + + h.Double(&r) + r.ToProjective(&s) + s.Double(&r) + r.ToProjective(&s) + s.Double(&r) + r.ToProjective(&s) + s.Double(&r) + r.ToExtended(h) + + for i := int32(0); i < 64; i += 2 { + selectPoint(&t, i/2, int32(e[i])) + geMixedAdd(&r, h, &t) + r.ToExtended(h) + } +} + +// The scalars are GF(2^252 + 27742317777372353535851937790883648493). + +// Input: +// a[0]+256*a[1]+...+256^31*a[31] = a +// b[0]+256*b[1]+...+256^31*b[31] = b +// c[0]+256*c[1]+...+256^31*c[31] = c +// +// Output: +// s[0]+256*s[1]+...+256^31*s[31] = (ab+c) mod l +// where l = 2^252 + 27742317777372353535851937790883648493. +func ScMulAdd(s, a, b, c *[32]byte) { + a0 := 2097151 & load3(a[:]) + a1 := 2097151 & (load4(a[2:]) >> 5) + a2 := 2097151 & (load3(a[5:]) >> 2) + a3 := 2097151 & (load4(a[7:]) >> 7) + a4 := 2097151 & (load4(a[10:]) >> 4) + a5 := 2097151 & (load3(a[13:]) >> 1) + a6 := 2097151 & (load4(a[15:]) >> 6) + a7 := 2097151 & (load3(a[18:]) >> 3) + a8 := 2097151 & load3(a[21:]) + a9 := 2097151 & (load4(a[23:]) >> 5) + a10 := 2097151 & (load3(a[26:]) >> 2) + a11 := (load4(a[28:]) >> 7) + b0 := 2097151 & load3(b[:]) + b1 := 2097151 & (load4(b[2:]) >> 5) + b2 := 2097151 & (load3(b[5:]) >> 2) + b3 := 2097151 & (load4(b[7:]) >> 7) + b4 := 2097151 & (load4(b[10:]) >> 4) + b5 := 2097151 & (load3(b[13:]) >> 1) + b6 := 2097151 & (load4(b[15:]) >> 6) + b7 := 2097151 & (load3(b[18:]) >> 3) + b8 := 2097151 & load3(b[21:]) + b9 := 2097151 & (load4(b[23:]) >> 5) + b10 := 2097151 & (load3(b[26:]) >> 2) + b11 := (load4(b[28:]) >> 7) + c0 := 2097151 & load3(c[:]) + c1 := 2097151 & (load4(c[2:]) >> 5) + c2 := 2097151 & (load3(c[5:]) >> 2) + c3 := 2097151 & (load4(c[7:]) >> 7) + c4 := 2097151 & (load4(c[10:]) >> 4) + c5 := 2097151 & (load3(c[13:]) >> 1) + c6 := 2097151 & (load4(c[15:]) >> 6) + c7 := 2097151 & (load3(c[18:]) >> 3) + c8 := 2097151 & load3(c[21:]) + c9 := 2097151 & (load4(c[23:]) >> 5) + c10 := 2097151 & (load3(c[26:]) >> 2) + c11 := (load4(c[28:]) >> 7) + var carry [23]int64 + + s0 := c0 + a0*b0 + s1 := c1 + a0*b1 + a1*b0 + s2 := c2 + a0*b2 + a1*b1 + a2*b0 + s3 := c3 + a0*b3 + a1*b2 + a2*b1 + a3*b0 + s4 := c4 + a0*b4 + a1*b3 + a2*b2 + a3*b1 + a4*b0 + s5 := c5 + a0*b5 + a1*b4 + a2*b3 + a3*b2 + a4*b1 + a5*b0 + s6 := c6 + a0*b6 + a1*b5 + a2*b4 + a3*b3 + a4*b2 + a5*b1 + a6*b0 + s7 := c7 + a0*b7 + a1*b6 + a2*b5 + a3*b4 + a4*b3 + a5*b2 + a6*b1 + a7*b0 + s8 := c8 + a0*b8 + a1*b7 + a2*b6 + a3*b5 + a4*b4 + a5*b3 + a6*b2 + a7*b1 + a8*b0 + s9 := c9 + a0*b9 + a1*b8 + a2*b7 + a3*b6 + a4*b5 + a5*b4 + a6*b3 + a7*b2 + a8*b1 + a9*b0 + s10 := c10 + a0*b10 + a1*b9 + a2*b8 + a3*b7 + a4*b6 + a5*b5 + a6*b4 + a7*b3 + a8*b2 + a9*b1 + a10*b0 + s11 := c11 + a0*b11 + a1*b10 + a2*b9 + a3*b8 + a4*b7 + a5*b6 + a6*b5 + a7*b4 + a8*b3 + a9*b2 + a10*b1 + a11*b0 + s12 := a1*b11 + a2*b10 + a3*b9 + a4*b8 + a5*b7 + a6*b6 + a7*b5 + a8*b4 + a9*b3 + a10*b2 + a11*b1 + s13 := a2*b11 + a3*b10 + a4*b9 + a5*b8 + a6*b7 + a7*b6 + a8*b5 + a9*b4 + a10*b3 + a11*b2 + s14 := a3*b11 + a4*b10 + a5*b9 + a6*b8 + a7*b7 + a8*b6 + a9*b5 + a10*b4 + a11*b3 + s15 := a4*b11 + a5*b10 + a6*b9 + a7*b8 + a8*b7 + a9*b6 + a10*b5 + a11*b4 + s16 := a5*b11 + a6*b10 + a7*b9 + a8*b8 + a9*b7 + a10*b6 + a11*b5 + s17 := a6*b11 + a7*b10 + a8*b9 + a9*b8 + a10*b7 + a11*b6 + s18 := a7*b11 + a8*b10 + a9*b9 + a10*b8 + a11*b7 + s19 := a8*b11 + a9*b10 + a10*b9 + a11*b8 + s20 := a9*b11 + a10*b10 + a11*b9 + s21 := a10*b11 + a11*b10 + s22 := a11 * b11 + s23 := int64(0) + + carry[0] = (s0 + (1 << 20)) >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[2] = (s2 + (1 << 20)) >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[4] = (s4 + (1 << 20)) >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[6] = (s6 + (1 << 20)) >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[8] = (s8 + (1 << 20)) >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[10] = (s10 + (1 << 20)) >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + carry[12] = (s12 + (1 << 20)) >> 21 + s13 += carry[12] + s12 -= carry[12] << 21 + carry[14] = (s14 + (1 << 20)) >> 21 + s15 += carry[14] + s14 -= carry[14] << 21 + carry[16] = (s16 + (1 << 20)) >> 21 + s17 += carry[16] + s16 -= carry[16] << 21 + carry[18] = (s18 + (1 << 20)) >> 21 + s19 += carry[18] + s18 -= carry[18] << 21 + carry[20] = (s20 + (1 << 20)) >> 21 + s21 += carry[20] + s20 -= carry[20] << 21 + carry[22] = (s22 + (1 << 20)) >> 21 + s23 += carry[22] + s22 -= carry[22] << 21 + + carry[1] = (s1 + (1 << 20)) >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[3] = (s3 + (1 << 20)) >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[5] = (s5 + (1 << 20)) >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[7] = (s7 + (1 << 20)) >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[9] = (s9 + (1 << 20)) >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[11] = (s11 + (1 << 20)) >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + carry[13] = (s13 + (1 << 20)) >> 21 + s14 += carry[13] + s13 -= carry[13] << 21 + carry[15] = (s15 + (1 << 20)) >> 21 + s16 += carry[15] + s15 -= carry[15] << 21 + carry[17] = (s17 + (1 << 20)) >> 21 + s18 += carry[17] + s17 -= carry[17] << 21 + carry[19] = (s19 + (1 << 20)) >> 21 + s20 += carry[19] + s19 -= carry[19] << 21 + carry[21] = (s21 + (1 << 20)) >> 21 + s22 += carry[21] + s21 -= carry[21] << 21 + + s11 += s23 * 666643 + s12 += s23 * 470296 + s13 += s23 * 654183 + s14 -= s23 * 997805 + s15 += s23 * 136657 + s16 -= s23 * 683901 + s23 = 0 + + s10 += s22 * 666643 + s11 += s22 * 470296 + s12 += s22 * 654183 + s13 -= s22 * 997805 + s14 += s22 * 136657 + s15 -= s22 * 683901 + s22 = 0 + + s9 += s21 * 666643 + s10 += s21 * 470296 + s11 += s21 * 654183 + s12 -= s21 * 997805 + s13 += s21 * 136657 + s14 -= s21 * 683901 + s21 = 0 + + s8 += s20 * 666643 + s9 += s20 * 470296 + s10 += s20 * 654183 + s11 -= s20 * 997805 + s12 += s20 * 136657 + s13 -= s20 * 683901 + s20 = 0 + + s7 += s19 * 666643 + s8 += s19 * 470296 + s9 += s19 * 654183 + s10 -= s19 * 997805 + s11 += s19 * 136657 + s12 -= s19 * 683901 + s19 = 0 + + s6 += s18 * 666643 + s7 += s18 * 470296 + s8 += s18 * 654183 + s9 -= s18 * 997805 + s10 += s18 * 136657 + s11 -= s18 * 683901 + s18 = 0 + + carry[6] = (s6 + (1 << 20)) >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[8] = (s8 + (1 << 20)) >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[10] = (s10 + (1 << 20)) >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + carry[12] = (s12 + (1 << 20)) >> 21 + s13 += carry[12] + s12 -= carry[12] << 21 + carry[14] = (s14 + (1 << 20)) >> 21 + s15 += carry[14] + s14 -= carry[14] << 21 + carry[16] = (s16 + (1 << 20)) >> 21 + s17 += carry[16] + s16 -= carry[16] << 21 + + carry[7] = (s7 + (1 << 20)) >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[9] = (s9 + (1 << 20)) >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[11] = (s11 + (1 << 20)) >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + carry[13] = (s13 + (1 << 20)) >> 21 + s14 += carry[13] + s13 -= carry[13] << 21 + carry[15] = (s15 + (1 << 20)) >> 21 + s16 += carry[15] + s15 -= carry[15] << 21 + + s5 += s17 * 666643 + s6 += s17 * 470296 + s7 += s17 * 654183 + s8 -= s17 * 997805 + s9 += s17 * 136657 + s10 -= s17 * 683901 + s17 = 0 + + s4 += s16 * 666643 + s5 += s16 * 470296 + s6 += s16 * 654183 + s7 -= s16 * 997805 + s8 += s16 * 136657 + s9 -= s16 * 683901 + s16 = 0 + + s3 += s15 * 666643 + s4 += s15 * 470296 + s5 += s15 * 654183 + s6 -= s15 * 997805 + s7 += s15 * 136657 + s8 -= s15 * 683901 + s15 = 0 + + s2 += s14 * 666643 + s3 += s14 * 470296 + s4 += s14 * 654183 + s5 -= s14 * 997805 + s6 += s14 * 136657 + s7 -= s14 * 683901 + s14 = 0 + + s1 += s13 * 666643 + s2 += s13 * 470296 + s3 += s13 * 654183 + s4 -= s13 * 997805 + s5 += s13 * 136657 + s6 -= s13 * 683901 + s13 = 0 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = (s0 + (1 << 20)) >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[2] = (s2 + (1 << 20)) >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[4] = (s4 + (1 << 20)) >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[6] = (s6 + (1 << 20)) >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[8] = (s8 + (1 << 20)) >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[10] = (s10 + (1 << 20)) >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + + carry[1] = (s1 + (1 << 20)) >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[3] = (s3 + (1 << 20)) >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[5] = (s5 + (1 << 20)) >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[7] = (s7 + (1 << 20)) >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[9] = (s9 + (1 << 20)) >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[11] = (s11 + (1 << 20)) >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = s0 >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[1] = s1 >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[2] = s2 >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[3] = s3 >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[4] = s4 >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[5] = s5 >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[6] = s6 >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[7] = s7 >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[8] = s8 >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[9] = s9 >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[10] = s10 >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + carry[11] = s11 >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = s0 >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[1] = s1 >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[2] = s2 >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[3] = s3 >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[4] = s4 >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[5] = s5 >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[6] = s6 >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[7] = s7 >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[8] = s8 >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[9] = s9 >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[10] = s10 >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + + s[0] = byte(s0 >> 0) + s[1] = byte(s0 >> 8) + s[2] = byte((s0 >> 16) | (s1 << 5)) + s[3] = byte(s1 >> 3) + s[4] = byte(s1 >> 11) + s[5] = byte((s1 >> 19) | (s2 << 2)) + s[6] = byte(s2 >> 6) + s[7] = byte((s2 >> 14) | (s3 << 7)) + s[8] = byte(s3 >> 1) + s[9] = byte(s3 >> 9) + s[10] = byte((s3 >> 17) | (s4 << 4)) + s[11] = byte(s4 >> 4) + s[12] = byte(s4 >> 12) + s[13] = byte((s4 >> 20) | (s5 << 1)) + s[14] = byte(s5 >> 7) + s[15] = byte((s5 >> 15) | (s6 << 6)) + s[16] = byte(s6 >> 2) + s[17] = byte(s6 >> 10) + s[18] = byte((s6 >> 18) | (s7 << 3)) + s[19] = byte(s7 >> 5) + s[20] = byte(s7 >> 13) + s[21] = byte(s8 >> 0) + s[22] = byte(s8 >> 8) + s[23] = byte((s8 >> 16) | (s9 << 5)) + s[24] = byte(s9 >> 3) + s[25] = byte(s9 >> 11) + s[26] = byte((s9 >> 19) | (s10 << 2)) + s[27] = byte(s10 >> 6) + s[28] = byte((s10 >> 14) | (s11 << 7)) + s[29] = byte(s11 >> 1) + s[30] = byte(s11 >> 9) + s[31] = byte(s11 >> 17) +} + +// Input: +// s[0]+256*s[1]+...+256^63*s[63] = s +// +// Output: +// s[0]+256*s[1]+...+256^31*s[31] = s mod l +// where l = 2^252 + 27742317777372353535851937790883648493. +func ScReduce(out *[32]byte, s *[64]byte) { + s0 := 2097151 & load3(s[:]) + s1 := 2097151 & (load4(s[2:]) >> 5) + s2 := 2097151 & (load3(s[5:]) >> 2) + s3 := 2097151 & (load4(s[7:]) >> 7) + s4 := 2097151 & (load4(s[10:]) >> 4) + s5 := 2097151 & (load3(s[13:]) >> 1) + s6 := 2097151 & (load4(s[15:]) >> 6) + s7 := 2097151 & (load3(s[18:]) >> 3) + s8 := 2097151 & load3(s[21:]) + s9 := 2097151 & (load4(s[23:]) >> 5) + s10 := 2097151 & (load3(s[26:]) >> 2) + s11 := 2097151 & (load4(s[28:]) >> 7) + s12 := 2097151 & (load4(s[31:]) >> 4) + s13 := 2097151 & (load3(s[34:]) >> 1) + s14 := 2097151 & (load4(s[36:]) >> 6) + s15 := 2097151 & (load3(s[39:]) >> 3) + s16 := 2097151 & load3(s[42:]) + s17 := 2097151 & (load4(s[44:]) >> 5) + s18 := 2097151 & (load3(s[47:]) >> 2) + s19 := 2097151 & (load4(s[49:]) >> 7) + s20 := 2097151 & (load4(s[52:]) >> 4) + s21 := 2097151 & (load3(s[55:]) >> 1) + s22 := 2097151 & (load4(s[57:]) >> 6) + s23 := (load4(s[60:]) >> 3) + + s11 += s23 * 666643 + s12 += s23 * 470296 + s13 += s23 * 654183 + s14 -= s23 * 997805 + s15 += s23 * 136657 + s16 -= s23 * 683901 + s23 = 0 + + s10 += s22 * 666643 + s11 += s22 * 470296 + s12 += s22 * 654183 + s13 -= s22 * 997805 + s14 += s22 * 136657 + s15 -= s22 * 683901 + s22 = 0 + + s9 += s21 * 666643 + s10 += s21 * 470296 + s11 += s21 * 654183 + s12 -= s21 * 997805 + s13 += s21 * 136657 + s14 -= s21 * 683901 + s21 = 0 + + s8 += s20 * 666643 + s9 += s20 * 470296 + s10 += s20 * 654183 + s11 -= s20 * 997805 + s12 += s20 * 136657 + s13 -= s20 * 683901 + s20 = 0 + + s7 += s19 * 666643 + s8 += s19 * 470296 + s9 += s19 * 654183 + s10 -= s19 * 997805 + s11 += s19 * 136657 + s12 -= s19 * 683901 + s19 = 0 + + s6 += s18 * 666643 + s7 += s18 * 470296 + s8 += s18 * 654183 + s9 -= s18 * 997805 + s10 += s18 * 136657 + s11 -= s18 * 683901 + s18 = 0 + + var carry [17]int64 + + carry[6] = (s6 + (1 << 20)) >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[8] = (s8 + (1 << 20)) >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[10] = (s10 + (1 << 20)) >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + carry[12] = (s12 + (1 << 20)) >> 21 + s13 += carry[12] + s12 -= carry[12] << 21 + carry[14] = (s14 + (1 << 20)) >> 21 + s15 += carry[14] + s14 -= carry[14] << 21 + carry[16] = (s16 + (1 << 20)) >> 21 + s17 += carry[16] + s16 -= carry[16] << 21 + + carry[7] = (s7 + (1 << 20)) >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[9] = (s9 + (1 << 20)) >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[11] = (s11 + (1 << 20)) >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + carry[13] = (s13 + (1 << 20)) >> 21 + s14 += carry[13] + s13 -= carry[13] << 21 + carry[15] = (s15 + (1 << 20)) >> 21 + s16 += carry[15] + s15 -= carry[15] << 21 + + s5 += s17 * 666643 + s6 += s17 * 470296 + s7 += s17 * 654183 + s8 -= s17 * 997805 + s9 += s17 * 136657 + s10 -= s17 * 683901 + s17 = 0 + + s4 += s16 * 666643 + s5 += s16 * 470296 + s6 += s16 * 654183 + s7 -= s16 * 997805 + s8 += s16 * 136657 + s9 -= s16 * 683901 + s16 = 0 + + s3 += s15 * 666643 + s4 += s15 * 470296 + s5 += s15 * 654183 + s6 -= s15 * 997805 + s7 += s15 * 136657 + s8 -= s15 * 683901 + s15 = 0 + + s2 += s14 * 666643 + s3 += s14 * 470296 + s4 += s14 * 654183 + s5 -= s14 * 997805 + s6 += s14 * 136657 + s7 -= s14 * 683901 + s14 = 0 + + s1 += s13 * 666643 + s2 += s13 * 470296 + s3 += s13 * 654183 + s4 -= s13 * 997805 + s5 += s13 * 136657 + s6 -= s13 * 683901 + s13 = 0 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = (s0 + (1 << 20)) >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[2] = (s2 + (1 << 20)) >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[4] = (s4 + (1 << 20)) >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[6] = (s6 + (1 << 20)) >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[8] = (s8 + (1 << 20)) >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[10] = (s10 + (1 << 20)) >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + + carry[1] = (s1 + (1 << 20)) >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[3] = (s3 + (1 << 20)) >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[5] = (s5 + (1 << 20)) >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[7] = (s7 + (1 << 20)) >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[9] = (s9 + (1 << 20)) >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[11] = (s11 + (1 << 20)) >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = s0 >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[1] = s1 >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[2] = s2 >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[3] = s3 >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[4] = s4 >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[5] = s5 >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[6] = s6 >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[7] = s7 >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[8] = s8 >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[9] = s9 >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[10] = s10 >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + carry[11] = s11 >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = s0 >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[1] = s1 >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[2] = s2 >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[3] = s3 >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[4] = s4 >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[5] = s5 >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[6] = s6 >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[7] = s7 >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[8] = s8 >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[9] = s9 >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[10] = s10 >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + + out[0] = byte(s0 >> 0) + out[1] = byte(s0 >> 8) + out[2] = byte((s0 >> 16) | (s1 << 5)) + out[3] = byte(s1 >> 3) + out[4] = byte(s1 >> 11) + out[5] = byte((s1 >> 19) | (s2 << 2)) + out[6] = byte(s2 >> 6) + out[7] = byte((s2 >> 14) | (s3 << 7)) + out[8] = byte(s3 >> 1) + out[9] = byte(s3 >> 9) + out[10] = byte((s3 >> 17) | (s4 << 4)) + out[11] = byte(s4 >> 4) + out[12] = byte(s4 >> 12) + out[13] = byte((s4 >> 20) | (s5 << 1)) + out[14] = byte(s5 >> 7) + out[15] = byte((s5 >> 15) | (s6 << 6)) + out[16] = byte(s6 >> 2) + out[17] = byte(s6 >> 10) + out[18] = byte((s6 >> 18) | (s7 << 3)) + out[19] = byte(s7 >> 5) + out[20] = byte(s7 >> 13) + out[21] = byte(s8 >> 0) + out[22] = byte(s8 >> 8) + out[23] = byte((s8 >> 16) | (s9 << 5)) + out[24] = byte(s9 >> 3) + out[25] = byte(s9 >> 11) + out[26] = byte((s9 >> 19) | (s10 << 2)) + out[27] = byte(s10 >> 6) + out[28] = byte((s10 >> 14) | (s11 << 7)) + out[29] = byte(s11 >> 1) + out[30] = byte(s11 >> 9) + out[31] = byte(s11 >> 17) +} + +// order is the order of Curve25519 in little-endian form. +var order = [4]uint64{0x5812631a5cf5d3ed, 0x14def9dea2f79cd6, 0, 0x1000000000000000} + +// ScMinimal returns true if the given scalar is less than the order of the +// curve. +func ScMinimal(scalar *[32]byte) bool { + for i := 3; ; i-- { + v := binary.LittleEndian.Uint64(scalar[i*8:]) + if v > order[i] { + return false + } else if v < order[i] { + break + } else if i == 0 { + return false + } + } + + return true +} diff --git a/src/crypto/ed25519/testdata/sign.input.gz b/src/crypto/ed25519/testdata/sign.input.gz new file mode 100644 index 0000000000..e6dc728056 Binary files /dev/null and b/src/crypto/ed25519/testdata/sign.input.gz differ diff --git a/src/crypto/elliptic/p256_asm_amd64.s b/src/crypto/elliptic/p256_asm_amd64.s index a4e3757977..7afa54a58c 100644 --- a/src/crypto/elliptic/p256_asm_amd64.s +++ b/src/crypto/elliptic/p256_asm_amd64.s @@ -2300,10 +2300,10 @@ TEXT ·p256PointDoubleAsm(SB),NOSPLIT,$256-48 CMOVQEQ t3, acc7 ANDQ t0, mul0 - SHRQ $1, acc4:acc5 - SHRQ $1, acc5:acc6 - SHRQ $1, acc6:acc7 - SHRQ $1, acc7:mul0 + SHRQ $1, acc5, acc4 + SHRQ $1, acc6, acc5 + SHRQ $1, acc7, acc6 + SHRQ $1, mul0, acc7 ST (y) ///////////////////////// LDacc (x) diff --git a/src/crypto/elliptic/p256_asm_s390x.s b/src/crypto/elliptic/p256_asm_s390x.s index c5b55a04c3..cf37e204c7 100644 --- a/src/crypto/elliptic/p256_asm_s390x.s +++ b/src/crypto/elliptic/p256_asm_s390x.s @@ -2465,7 +2465,7 @@ TEXT ·p256PointDoubleAsm(SB), NOSPLIT, $0 #define PL V30 #define PH V31 /* - * https://choucroutage.com/Papers/SideChannelAttacks/ctrsa-2011-brown.pdf "Software Implementation of the NIST Elliptic Curves Over Prime Fields" + * https://delta.cs.cinvestav.mx/~francisco/arith/julio.pdf "Software Implementation of the NIST Elliptic Curves Over Prime Fields" * * A = Xâ‚×Z₂² * B = Yâ‚×Z₂³ diff --git a/src/crypto/elliptic/p256_s390x.go b/src/crypto/elliptic/p256_s390x.go index ac53a85a5c..0d9478bfd6 100644 --- a/src/crypto/elliptic/p256_s390x.go +++ b/src/crypto/elliptic/p256_s390x.go @@ -15,7 +15,7 @@ import ( const ( offsetS390xHasVX = unsafe.Offsetof(cpu.S390X.HasVX) - offsetS390xHasVE1 = unsafe.Offsetof(cpu.S390X.HasVE1) + offsetS390xHasVE1 = unsafe.Offsetof(cpu.S390X.HasVXE) ) type p256CurveFast struct { diff --git a/src/crypto/md5/md5_test.go b/src/crypto/md5/md5_test.go index 34c7f541c5..282ba1b859 100644 --- a/src/crypto/md5/md5_test.go +++ b/src/crypto/md5/md5_test.go @@ -169,12 +169,12 @@ type unmarshalTest struct { var largeUnmarshalTests = []unmarshalTest{ // Data length: 7_102_415_735 - unmarshalTest{ + { state: "md5\x01\xa5\xf7\xf0=\xd6S\x85\xd9M\n}\xc3\u0601\x89\xe7@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuv\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xa7VCw", sum: "cddefcf74ffec709a0b45a6a987564d5", }, // Data length: 6_565_544_823 - unmarshalTest{ + { state: "md5\x01{\xda\x1a\xc7\xc9'?\x83EX\xe0\x88q\xfeG\x18@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuv\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x87VCw", sum: "fd9f41874ab240698e7bc9c3ae70c8e4", }, diff --git a/src/crypto/sha1/sha1_test.go b/src/crypto/sha1/sha1_test.go index b05845ff59..0ad7040b19 100644 --- a/src/crypto/sha1/sha1_test.go +++ b/src/crypto/sha1/sha1_test.go @@ -175,12 +175,12 @@ type unmarshalTest struct { var largeUnmarshalTests = []unmarshalTest{ // Data length: 7_102_415_735 - unmarshalTest{ + { state: "sha\x01\x13\xbc\xfe\x83\x8c\xbd\xdfP\x1f\xd8Ú¿<\x9eji8t\xe1\xa5@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuv\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xa7VCw", sum: "bc6245c9959cc33e1c2592e5c9ea9b5d0431246c", }, // Data length: 6_565_544_823 - unmarshalTest{ + { state: "sha\x01m;\x16\xa6R\xbe@\xa9nĈ\xf9S\x03\x00B\xc2\xdcv\xcf@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuv\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x87VCw", sum: "8f2d1c0e4271768f35feb918bfe21ea1387a2072", }, diff --git a/src/crypto/sha1/sha1block.go b/src/crypto/sha1/sha1block.go index 1d37544940..321d34351c 100644 --- a/src/crypto/sha1/sha1block.go +++ b/src/crypto/sha1/sha1block.go @@ -4,6 +4,10 @@ package sha1 +import ( + "math/bits" +) + const ( _K0 = 0x5A827999 _K1 = 0x6ED9EBA1 @@ -33,48 +37,37 @@ func blockGeneric(dig *digest, p []byte) { i := 0 for ; i < 16; i++ { f := b&c | (^b)&d - a5 := a<<5 | a>>(32-5) - b30 := b<<30 | b>>(32-30) - t := a5 + f + e + w[i&0xf] + _K0 - a, b, c, d, e = t, a, b30, c, d + t := bits.RotateLeft32(a, 5) + f + e + w[i&0xf] + _K0 + a, b, c, d, e = t, a, bits.RotateLeft32(b, 30), c, d } for ; i < 20; i++ { tmp := w[(i-3)&0xf] ^ w[(i-8)&0xf] ^ w[(i-14)&0xf] ^ w[(i)&0xf] w[i&0xf] = tmp<<1 | tmp>>(32-1) f := b&c | (^b)&d - a5 := a<<5 | a>>(32-5) - b30 := b<<30 | b>>(32-30) - t := a5 + f + e + w[i&0xf] + _K0 - a, b, c, d, e = t, a, b30, c, d + t := bits.RotateLeft32(a, 5) + f + e + w[i&0xf] + _K0 + a, b, c, d, e = t, a, bits.RotateLeft32(b, 30), c, d } for ; i < 40; i++ { tmp := w[(i-3)&0xf] ^ w[(i-8)&0xf] ^ w[(i-14)&0xf] ^ w[(i)&0xf] w[i&0xf] = tmp<<1 | tmp>>(32-1) f := b ^ c ^ d - a5 := a<<5 | a>>(32-5) - b30 := b<<30 | b>>(32-30) - t := a5 + f + e + w[i&0xf] + _K1 - a, b, c, d, e = t, a, b30, c, d + t := bits.RotateLeft32(a, 5) + f + e + w[i&0xf] + _K1 + a, b, c, d, e = t, a, bits.RotateLeft32(b, 30), c, d } for ; i < 60; i++ { tmp := w[(i-3)&0xf] ^ w[(i-8)&0xf] ^ w[(i-14)&0xf] ^ w[(i)&0xf] w[i&0xf] = tmp<<1 | tmp>>(32-1) f := ((b | c) & d) | (b & c) - - a5 := a<<5 | a>>(32-5) - b30 := b<<30 | b>>(32-30) - t := a5 + f + e + w[i&0xf] + _K2 - a, b, c, d, e = t, a, b30, c, d + t := bits.RotateLeft32(a, 5) + f + e + w[i&0xf] + _K2 + a, b, c, d, e = t, a, bits.RotateLeft32(b, 30), c, d } for ; i < 80; i++ { tmp := w[(i-3)&0xf] ^ w[(i-8)&0xf] ^ w[(i-14)&0xf] ^ w[(i)&0xf] w[i&0xf] = tmp<<1 | tmp>>(32-1) f := b ^ c ^ d - a5 := a<<5 | a>>(32-5) - b30 := b<<30 | b>>(32-30) - t := a5 + f + e + w[i&0xf] + _K3 - a, b, c, d, e = t, a, b30, c, d + t := bits.RotateLeft32(a, 5) + f + e + w[i&0xf] + _K3 + a, b, c, d, e = t, a, bits.RotateLeft32(b, 30), c, d } h0 += a diff --git a/src/crypto/sha256/sha256_test.go b/src/crypto/sha256/sha256_test.go index 03bd2a5627..688bad5001 100644 --- a/src/crypto/sha256/sha256_test.go +++ b/src/crypto/sha256/sha256_test.go @@ -245,19 +245,19 @@ type unmarshalTest struct { var largeUnmarshalTests = []unmarshalTest{ // Data length: 7_115_087_207 - unmarshalTest{ + { state: "sha\x03yX\xaf\xb7\x04*\x8f\xaa\x9bx\xc5#\x1f\xeb\x94\xfdz1\xaf\xfbkÖ—\n\xc93\xcf\x02\v.\xa5\xe4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xa8\x17\x9dg", sum: "f5e06371f0c115e9968455c8e48a318aba548b9f15676fa41de123f7d1c99c55", }, // Data length: 7_070_038_086 - unmarshalTest{ + { state: "sha\x03$\x933u\nV\v\xe2\xf7:0!ʳ\xa4\x13\xd3 6\xdcBB\xb5\x19\xcd=\xc1h\xee=\xb4\x9c@ABCDE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xa5h8F", sum: "a280b08df5eba060fcd0eb3d29320bbc038afb95781661f91bbfd0a6fc9fdd6e", }, // Data length: 6_464_878_887 - unmarshalTest{ + { state: "sha\x03\x9f\x12\x87G\xf2\xdf<\x82\xa0\x11/*W\x02&IKWlh\x03\x95\xb1\xab\f\n\xf6Ze\xf9\x1d\x1b\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x81V9'", sum: "d2fffb762f105ab71e2d70069346c44c38c4fe183aad8cfcf5a76397c0457806", }, diff --git a/src/crypto/sha256/sha256block.go b/src/crypto/sha256/sha256block.go index d43bbf0245..bd2f9da93c 100644 --- a/src/crypto/sha256/sha256block.go +++ b/src/crypto/sha256/sha256block.go @@ -8,6 +8,8 @@ package sha256 +import "math/bits" + var _K = []uint32{ 0x428a2f98, 0x71374491, @@ -87,18 +89,18 @@ func blockGeneric(dig *digest, p []byte) { } for i := 16; i < 64; i++ { v1 := w[i-2] - t1 := (v1>>17 | v1<<(32-17)) ^ (v1>>19 | v1<<(32-19)) ^ (v1 >> 10) + t1 := (bits.RotateLeft32(v1, -17)) ^ (bits.RotateLeft32(v1, -19)) ^ (v1 >> 10) v2 := w[i-15] - t2 := (v2>>7 | v2<<(32-7)) ^ (v2>>18 | v2<<(32-18)) ^ (v2 >> 3) + t2 := (bits.RotateLeft32(v2, -7)) ^ (bits.RotateLeft32(v2, -18)) ^ (v2 >> 3) w[i] = t1 + w[i-7] + t2 + w[i-16] } a, b, c, d, e, f, g, h := h0, h1, h2, h3, h4, h5, h6, h7 for i := 0; i < 64; i++ { - t1 := h + ((e>>6 | e<<(32-6)) ^ (e>>11 | e<<(32-11)) ^ (e>>25 | e<<(32-25))) + ((e & f) ^ (^e & g)) + _K[i] + w[i] + t1 := h + ((bits.RotateLeft32(e, -6)) ^ (bits.RotateLeft32(e, -11)) ^ (bits.RotateLeft32(e, -25))) + ((e & f) ^ (^e & g)) + _K[i] + w[i] - t2 := ((a>>2 | a<<(32-2)) ^ (a>>13 | a<<(32-13)) ^ (a>>22 | a<<(32-22))) + ((a & b) ^ (a & c) ^ (b & c)) + t2 := ((bits.RotateLeft32(a, -2)) ^ (bits.RotateLeft32(a, -13)) ^ (bits.RotateLeft32(a, -22))) + ((a & b) ^ (a & c) ^ (b & c)) h = g g = f diff --git a/src/crypto/sha512/sha512_test.go b/src/crypto/sha512/sha512_test.go index 2d172c066a..f9213a8d30 100644 --- a/src/crypto/sha512/sha512_test.go +++ b/src/crypto/sha512/sha512_test.go @@ -851,11 +851,11 @@ type unmarshalTest struct { var largeUnmarshalTests = []unmarshalTest{ // Data length: 6_565_544_823 - unmarshalTest{ + { state: "sha\aηe\x0f\x0f\xe1r]#\aoJ!.{5B\xe4\x140\x91\xdd\x00a\xe1\xb3E&\xb9\xbb\aJ\x9f^\x9f\x03ͺD\x96H\x80\xb0X\x9d\xdeʸ\f\xf7:\xd5\xe6'\xb9\x93f\xddA\xf0~\xe1\x02\x14\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuv\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x87VCw", sum: "12d612357a1dbc74a28883dff79b83e7d2b881ae40d7a67fd7305490bc8a641cd1ce9ece598192080d6e9ac7e75d5988567a58a9812991299eb99a04ecb69523", }, - unmarshalTest{ + { state: "sha\a2\xd2\xdc\xf5\xd7\xe2\xf9\x97\xaa\xe7}Fϱ\xbc\x8e\xbf\x12h\x83Z\xa1\xc7\xf5p>bfS T\xea\xee\x1e\xa6Z\x9c\xa4Ú¶\u0086\bn\xe47\x8fsGs3\xe0\xda\\\x9dqZ\xa5\xf6\xd0kM\xa1\xf2\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuv\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xa7VCw", sum: "94a04b9a901254cd94ca0313557e4be3ab1ca86e920c1f3efdc22d361e9ae12be66bc6d6dc5db79a0a4aa6eca6f293c1e9095bbae127ae405f6c325478343299", }, diff --git a/src/crypto/sha512/sha512block.go b/src/crypto/sha512/sha512block.go index 42e8d19fe8..81569c5f84 100644 --- a/src/crypto/sha512/sha512block.go +++ b/src/crypto/sha512/sha512block.go @@ -8,6 +8,8 @@ package sha512 +import "math/bits" + var _K = []uint64{ 0x428a2f98d728ae22, 0x7137449123ef65cd, @@ -102,9 +104,9 @@ func blockGeneric(dig *digest, p []byte) { } for i := 16; i < 80; i++ { v1 := w[i-2] - t1 := (v1>>19 | v1<<(64-19)) ^ (v1>>61 | v1<<(64-61)) ^ (v1 >> 6) + t1 := bits.RotateLeft64(v1, -19) ^ bits.RotateLeft64(v1, -61) ^ (v1 >> 6) v2 := w[i-15] - t2 := (v2>>1 | v2<<(64-1)) ^ (v2>>8 | v2<<(64-8)) ^ (v2 >> 7) + t2 := bits.RotateLeft64(v2, -1) ^ bits.RotateLeft64(v2, -8) ^ (v2 >> 7) w[i] = t1 + w[i-7] + t2 + w[i-16] } @@ -112,9 +114,9 @@ func blockGeneric(dig *digest, p []byte) { a, b, c, d, e, f, g, h := h0, h1, h2, h3, h4, h5, h6, h7 for i := 0; i < 80; i++ { - t1 := h + ((e>>14 | e<<(64-14)) ^ (e>>18 | e<<(64-18)) ^ (e>>41 | e<<(64-41))) + ((e & f) ^ (^e & g)) + _K[i] + w[i] + t1 := h + (bits.RotateLeft64(e, -14) ^ bits.RotateLeft64(e, -18) ^ bits.RotateLeft64(e, -41)) + ((e & f) ^ (^e & g)) + _K[i] + w[i] - t2 := ((a>>28 | a<<(64-28)) ^ (a>>34 | a<<(64-34)) ^ (a>>39 | a<<(64-39))) + ((a & b) ^ (a & c) ^ (b & c)) + t2 := (bits.RotateLeft64(a, -28) ^ bits.RotateLeft64(a, -34) ^ bits.RotateLeft64(a, -39)) + ((a & b) ^ (a & c) ^ (b & c)) h = g g = f diff --git a/src/crypto/tls/auth.go b/src/crypto/tls/auth.go index 6fe9718505..9fa0f452fd 100644 --- a/src/crypto/tls/auth.go +++ b/src/crypto/tls/auth.go @@ -5,8 +5,10 @@ package tls import ( + "bytes" "crypto" "crypto/ecdsa" + "crypto/ed25519" "crypto/elliptic" "crypto/rsa" "encoding/asn1" @@ -38,6 +40,15 @@ func pickSignatureAlgorithm(pubkey crypto.PublicKey, peerSigAlgs, ourSigAlgs []S } case *ecdsa.PublicKey: return ECDSAWithSHA1, signatureECDSA, crypto.SHA1, nil + case ed25519.PublicKey: + if tlsVersion < VersionTLS12 { + // RFC 8422 specifies support for Ed25519 in TLS 1.0 and 1.1, + // but it requires holding on to a handshake transcript to do a + // full signature, and not even OpenSSL bothers with the + // complexity, so we can't even test it properly. + return 0, 0, 0, fmt.Errorf("tls: Ed25519 public keys are not supported before TLS 1.2") + } + return Ed25519, signatureEd25519, directSigning, nil default: return 0, 0, 0, fmt.Errorf("tls: unsupported public key: %T", pubkey) } @@ -60,6 +71,10 @@ func pickSignatureAlgorithm(pubkey crypto.PublicKey, peerSigAlgs, ourSigAlgs []S if sigType == signatureECDSA { return sigAlg, sigType, hashAlg, nil } + case ed25519.PublicKey: + if sigType == signatureEd25519 { + return sigAlg, sigType, hashAlg, nil + } default: return 0, 0, 0, fmt.Errorf("tls: unsupported public key: %T", pubkey) } @@ -67,9 +82,9 @@ func pickSignatureAlgorithm(pubkey crypto.PublicKey, peerSigAlgs, ourSigAlgs []S return 0, 0, 0, errors.New("tls: peer doesn't support any common signature algorithms") } -// verifyHandshakeSignature verifies a signature against pre-hashed handshake -// contents. -func verifyHandshakeSignature(sigType uint8, pubkey crypto.PublicKey, hashFunc crypto.Hash, digest, sig []byte) error { +// verifyHandshakeSignature verifies a signature against pre-hashed +// (if required) handshake contents. +func verifyHandshakeSignature(sigType uint8, pubkey crypto.PublicKey, hashFunc crypto.Hash, signed, sig []byte) error { switch sigType { case signatureECDSA: pubKey, ok := pubkey.(*ecdsa.PublicKey) @@ -83,15 +98,23 @@ func verifyHandshakeSignature(sigType uint8, pubkey crypto.PublicKey, hashFunc c if ecdsaSig.R.Sign() <= 0 || ecdsaSig.S.Sign() <= 0 { return errors.New("tls: ECDSA signature contained zero or negative values") } - if !ecdsa.Verify(pubKey, digest, ecdsaSig.R, ecdsaSig.S) { + if !ecdsa.Verify(pubKey, signed, ecdsaSig.R, ecdsaSig.S) { return errors.New("tls: ECDSA verification failure") } + case signatureEd25519: + pubKey, ok := pubkey.(ed25519.PublicKey) + if !ok { + return errors.New("tls: Ed25519 signing requires a Ed25519 public key") + } + if !ed25519.Verify(pubKey, signed, sig) { + return errors.New("tls: Ed25519 verification failure") + } case signaturePKCS1v15: pubKey, ok := pubkey.(*rsa.PublicKey) if !ok { return errors.New("tls: RSA signing requires a RSA public key") } - if err := rsa.VerifyPKCS1v15(pubKey, hashFunc, digest, sig); err != nil { + if err := rsa.VerifyPKCS1v15(pubKey, hashFunc, signed, sig); err != nil { return err } case signatureRSAPSS: @@ -100,7 +123,7 @@ func verifyHandshakeSignature(sigType uint8, pubkey crypto.PublicKey, hashFunc c return errors.New("tls: RSA signing requires a RSA public key") } signOpts := &rsa.PSSOptions{SaltLength: rsa.PSSSaltLengthEqualsHash} - if err := rsa.VerifyPSS(pubKey, hashFunc, digest, sig, signOpts); err != nil { + if err := rsa.VerifyPSS(pubKey, hashFunc, signed, sig, signOpts); err != nil { return err } default: @@ -125,12 +148,21 @@ var signaturePadding = []byte{ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, } -// writeSignedMessage writes the content to be signed by certificate keys in TLS -// 1.3 to sigHash. See RFC 8446, Section 4.4.3. -func writeSignedMessage(sigHash io.Writer, context string, transcript hash.Hash) { - sigHash.Write(signaturePadding) - io.WriteString(sigHash, context) - sigHash.Write(transcript.Sum(nil)) +// signedMessage returns the pre-hashed (if necessary) message to be signed by +// certificate keys in TLS 1.3. See RFC 8446, Section 4.4.3. +func signedMessage(sigHash crypto.Hash, context string, transcript hash.Hash) []byte { + if sigHash == directSigning { + b := &bytes.Buffer{} + b.Write(signaturePadding) + io.WriteString(b, context) + b.Write(transcript.Sum(nil)) + return b.Bytes() + } + h := sigHash.New() + h.Write(signaturePadding) + io.WriteString(h, context) + h.Write(transcript.Sum(nil)) + return h.Sum(nil) } // signatureSchemesForCertificate returns the list of supported SignatureSchemes @@ -183,6 +215,8 @@ func signatureSchemesForCertificate(version uint16, cert *Certificate) []Signatu PSSWithSHA384, PSSWithSHA512, } + case ed25519.PublicKey: + return []SignatureScheme{Ed25519} default: return nil } @@ -195,6 +229,8 @@ func unsupportedCertificateError(cert *Certificate) error { case rsa.PrivateKey, ecdsa.PrivateKey: return fmt.Errorf("tls: unsupported certificate: private key is %T, expected *%T", cert.PrivateKey, cert.PrivateKey) + case *ed25519.PrivateKey: + return fmt.Errorf("tls: unsupported certificate: private key is *ed25519.PrivateKey, expected ed25519.PrivateKey") } signer, ok := cert.PrivateKey.(crypto.Signer) @@ -213,6 +249,7 @@ func unsupportedCertificateError(cert *Certificate) error { return fmt.Errorf("tls: unsupported certificate curve (%s)", pub.Curve.Params().Name) } case *rsa.PublicKey: + case ed25519.PublicKey: default: return fmt.Errorf("tls: unsupported certificate key (%T)", pub) } diff --git a/src/crypto/tls/auth_test.go b/src/crypto/tls/auth_test.go index 3f876b9e1a..1d958cf141 100644 --- a/src/crypto/tls/auth_test.go +++ b/src/crypto/tls/auth_test.go @@ -6,12 +6,14 @@ package tls import ( "crypto" + "crypto/ed25519" "testing" ) func TestSignatureSelection(t *testing.T) { rsaCert := &testRSAPrivateKey.PublicKey ecdsaCert := &testECDSAPrivateKey.PublicKey + ed25519Cert := testEd25519PrivateKey.Public().(ed25519.PublicKey) sigsPKCS1WithSHA := []SignatureScheme{PKCS1WithSHA256, PKCS1WithSHA1} sigsPSSWithSHA := []SignatureScheme{PSSWithSHA256, PSSWithSHA384} sigsECDSAWithSHA := []SignatureScheme{ECDSAWithP256AndSHA256, ECDSAWithSHA1} @@ -22,7 +24,7 @@ func TestSignatureSelection(t *testing.T) { ourSigAlgs []SignatureScheme tlsVersion uint16 - expectedSigAlg SignatureScheme // or 0 if ignored + expectedSigAlg SignatureScheme // if tlsVersion == VersionTLS12 expectedSigType uint8 expectedHash crypto.Hash }{ @@ -56,6 +58,10 @@ func TestSignatureSelection(t *testing.T) { // RSASSA-PSS is defined in TLS 1.3 for TLS 1.2 // https://tools.ietf.org/html/draft-ietf-tls-tls13-21#page-45 {rsaCert, []SignatureScheme{PSSWithSHA256}, sigsPSSWithSHA, VersionTLS12, PSSWithSHA256, signatureRSAPSS, crypto.SHA256}, + + // All results are fixed for Ed25519. RFC 8422, Section 5.10. + {ed25519Cert, []SignatureScheme{Ed25519}, []SignatureScheme{ECDSAWithSHA1, Ed25519}, VersionTLS12, Ed25519, signatureEd25519, directSigning}, + {ed25519Cert, nil, nil, VersionTLS12, Ed25519, signatureEd25519, directSigning}, } for testNo, test := range tests { @@ -63,7 +69,7 @@ func TestSignatureSelection(t *testing.T) { if err != nil { t.Errorf("test[%d]: unexpected error: %v", testNo, err) } - if test.expectedSigAlg != 0 && test.expectedSigAlg != sigAlg { + if test.tlsVersion == VersionTLS12 && test.expectedSigAlg != sigAlg { t.Errorf("test[%d]: expected signature scheme %#x, got %#x", testNo, test.expectedSigAlg, sigAlg) } if test.expectedSigType != sigType { @@ -84,6 +90,12 @@ func TestSignatureSelection(t *testing.T) { {ecdsaCert, sigsPKCS1WithSHA, sigsPKCS1WithSHA, VersionTLS12}, {ecdsaCert, sigsECDSAWithSHA, sigsPKCS1WithSHA, VersionTLS12}, {rsaCert, []SignatureScheme{0}, sigsPKCS1WithSHA, VersionTLS12}, + {ed25519Cert, sigsECDSAWithSHA, sigsECDSAWithSHA, VersionTLS12}, + {ed25519Cert, []SignatureScheme{Ed25519}, sigsECDSAWithSHA, VersionTLS12}, + {ecdsaCert, []SignatureScheme{Ed25519}, []SignatureScheme{Ed25519}, VersionTLS12}, + {ed25519Cert, nil, nil, VersionTLS11}, + {ed25519Cert, nil, nil, VersionTLS10}, + {ed25519Cert, nil, nil, VersionSSL30}, // ECDSA is unspecified for SSL 3.0 in RFC 4492. // TODO a SSL 3.0 client cannot advertise signature_algorithms, diff --git a/src/crypto/tls/boring.go b/src/crypto/tls/boring.go index f6d922c673..95256b19f7 100644 --- a/src/crypto/tls/boring.go +++ b/src/crypto/tls/boring.go @@ -103,19 +103,26 @@ func isBoringCertificate(c *x509.Certificate) bool { return true } +// fipsSupportedSignatureAlgorithms currently are a subset of +// defaultSupportedSignatureAlgorithms without Ed25519 and SHA-1. +var fipsSupportedSignatureAlgorithms = []SignatureScheme{ + PSSWithSHA256, + PSSWithSHA384, + PSSWithSHA512, + PKCS1WithSHA256, + ECDSAWithP256AndSHA256, + PKCS1WithSHA384, + ECDSAWithP384AndSHA384, + PKCS1WithSHA512, + ECDSAWithP521AndSHA512, +} + // supportedSignatureAlgorithms returns the supported signature algorithms. -// It knows that the FIPS-allowed ones are all at the beginning of -// defaultSupportedSignatureAlgorithms. func supportedSignatureAlgorithms() []SignatureScheme { - all := defaultSupportedSignatureAlgorithms if !needFIPS() { - return all + return defaultSupportedSignatureAlgorithms } - i := 0 - for i < len(all) && all[i] != PKCS1WithSHA1 { - i++ - } - return all[:i] + return fipsSupportedSignatureAlgorithms } var testingOnlyForceClientHelloSignatureAlgorithms []SignatureScheme diff --git a/src/crypto/tls/boring_test.go b/src/crypto/tls/boring_test.go index 7a522c6a1f..c785c01fcc 100644 --- a/src/crypto/tls/boring_test.go +++ b/src/crypto/tls/boring_test.go @@ -81,7 +81,7 @@ func isBoringCurve(id CurveID) bool { func isECDSA(id uint16) bool { for _, suite := range cipherSuites { if suite.id == id { - return suite.flags&suiteECDSA == suiteECDSA + return suite.flags&suiteECSign == suiteECSign } } panic(fmt.Sprintf("unknown cipher suite %#x", id)) @@ -210,9 +210,12 @@ func TestBoringServerSignatureAndHash(t *testing.T) { serverConfig.CipherSuites = []uint16{TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256} serverConfig.Certificates[0].Certificate = [][]byte{testRSA2048Certificate} serverConfig.Certificates[0].PrivateKey = testRSA2048PrivateKey + case Ed25519: + serverConfig.CipherSuites = []uint16{TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256} + serverConfig.Certificates[0].Certificate = [][]byte{testEd25519Certificate} + serverConfig.Certificates[0].PrivateKey = testEd25519PrivateKey default: serverConfig.CipherSuites = []uint16{TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256} - serverConfig.Certificates = make([]Certificate, 1) serverConfig.Certificates[0].Certificate = [][]byte{testECDSACertificate} serverConfig.Certificates[0].PrivateKey = testECDSAPrivateKey } diff --git a/src/crypto/tls/cipher_suites.go b/src/crypto/tls/cipher_suites.go index ab497cdb5d..19b75f9d2d 100644 --- a/src/crypto/tls/cipher_suites.go +++ b/src/crypto/tls/cipher_suites.go @@ -15,8 +15,8 @@ import ( "crypto/sha1" "crypto/sha256" "crypto/x509" + "golang.org/x/crypto/chacha20poly1305" "hash" - "internal/x/crypto/chacha20poly1305" ) // a keyAgreement implements the client and server side of a TLS key agreement @@ -44,11 +44,11 @@ const ( // client indicates that it supports ECC with a curve and point format // that we're happy with. suiteECDHE = 1 << iota - // suiteECDSA indicates that the cipher suite involves an ECDSA - // signature and therefore may only be selected when the server's - // certificate is ECDSA. If this is not set then the cipher suite is - // RSA based. - suiteECDSA + // suiteECSign indicates that the cipher suite involves an ECDSA or + // EdDSA signature and therefore may only be selected when the server's + // certificate is ECDSA or EdDSA. If this is not set then the cipher suite + // is RSA based. + suiteECSign // suiteTLS12 indicates that the cipher suite should only be advertised // and accepted when using TLS 1.2. suiteTLS12 @@ -79,17 +79,17 @@ var cipherSuites = []*cipherSuite{ // Ciphersuite order is chosen so that ECDHE comes before plain RSA and // AEADs are the top preference. {TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, 32, 0, 12, ecdheRSAKA, suiteECDHE | suiteTLS12, nil, nil, aeadChaCha20Poly1305}, - {TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, 32, 0, 12, ecdheECDSAKA, suiteECDHE | suiteECDSA | suiteTLS12, nil, nil, aeadChaCha20Poly1305}, + {TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, 32, 0, 12, ecdheECDSAKA, suiteECDHE | suiteECSign | suiteTLS12, nil, nil, aeadChaCha20Poly1305}, {TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 16, 0, 4, ecdheRSAKA, suiteECDHE | suiteTLS12, nil, nil, aeadAESGCM}, - {TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 16, 0, 4, ecdheECDSAKA, suiteECDHE | suiteECDSA | suiteTLS12, nil, nil, aeadAESGCM}, + {TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 16, 0, 4, ecdheECDSAKA, suiteECDHE | suiteECSign | suiteTLS12, nil, nil, aeadAESGCM}, {TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, 32, 0, 4, ecdheRSAKA, suiteECDHE | suiteTLS12 | suiteSHA384, nil, nil, aeadAESGCM}, - {TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, 32, 0, 4, ecdheECDSAKA, suiteECDHE | suiteECDSA | suiteTLS12 | suiteSHA384, nil, nil, aeadAESGCM}, + {TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, 32, 0, 4, ecdheECDSAKA, suiteECDHE | suiteECSign | suiteTLS12 | suiteSHA384, nil, nil, aeadAESGCM}, {TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, 16, 32, 16, ecdheRSAKA, suiteECDHE | suiteTLS12 | suiteDefaultOff, cipherAES, macSHA256, nil}, {TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, 16, 20, 16, ecdheRSAKA, suiteECDHE, cipherAES, macSHA1, nil}, - {TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, 16, 32, 16, ecdheECDSAKA, suiteECDHE | suiteECDSA | suiteTLS12 | suiteDefaultOff, cipherAES, macSHA256, nil}, - {TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, 16, 20, 16, ecdheECDSAKA, suiteECDHE | suiteECDSA, cipherAES, macSHA1, nil}, + {TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, 16, 32, 16, ecdheECDSAKA, suiteECDHE | suiteECSign | suiteTLS12 | suiteDefaultOff, cipherAES, macSHA256, nil}, + {TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, 16, 20, 16, ecdheECDSAKA, suiteECDHE | suiteECSign, cipherAES, macSHA1, nil}, {TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, 32, 20, 16, ecdheRSAKA, suiteECDHE, cipherAES, macSHA1, nil}, - {TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, 32, 20, 16, ecdheECDSAKA, suiteECDHE | suiteECDSA, cipherAES, macSHA1, nil}, + {TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, 32, 20, 16, ecdheECDSAKA, suiteECDHE | suiteECSign, cipherAES, macSHA1, nil}, {TLS_RSA_WITH_AES_128_GCM_SHA256, 16, 0, 4, rsaKA, suiteTLS12, nil, nil, aeadAESGCM}, {TLS_RSA_WITH_AES_256_GCM_SHA384, 32, 0, 4, rsaKA, suiteTLS12 | suiteSHA384, nil, nil, aeadAESGCM}, {TLS_RSA_WITH_AES_128_CBC_SHA256, 16, 32, 16, rsaKA, suiteTLS12 | suiteDefaultOff, cipherAES, macSHA256, nil}, @@ -101,7 +101,7 @@ var cipherSuites = []*cipherSuite{ // RC4-based cipher suites are disabled by default. {TLS_RSA_WITH_RC4_128_SHA, 16, 20, 0, rsaKA, suiteDefaultOff, cipherRC4, macSHA1, nil}, {TLS_ECDHE_RSA_WITH_RC4_128_SHA, 16, 20, 0, ecdheRSAKA, suiteECDHE | suiteDefaultOff, cipherRC4, macSHA1, nil}, - {TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, 16, 20, 0, ecdheECDSAKA, suiteECDHE | suiteECDSA | suiteDefaultOff, cipherRC4, macSHA1, nil}, + {TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, 16, 20, 0, ecdheECDSAKA, suiteECDHE | suiteECSign | suiteDefaultOff, cipherRC4, macSHA1, nil}, } // A cipherSuiteTLS13 defines only the pair of the AEAD algorithm and hash diff --git a/src/crypto/tls/common.go b/src/crypto/tls/common.go index 6e3a8416f8..9d501eca4a 100644 --- a/src/crypto/tls/common.go +++ b/src/crypto/tls/common.go @@ -150,30 +150,37 @@ const ( // Certificate types (for certificateRequestMsg) const ( certTypeRSASign = 1 - certTypeECDSASign = 64 // RFC 4492, Section 5.5 + certTypeECDSASign = 64 // ECDSA or EdDSA keys, see RFC 8422, Section 3. ) -// Signature algorithms (for internal signaling use). Starting at 16 to avoid overlap with +// Signature algorithms (for internal signaling use). Starting at 225 to avoid overlap with // TLS 1.2 codepoints (RFC 5246, Appendix A.4.1), with which these have nothing to do. const ( - signaturePKCS1v15 uint8 = iota + 16 - signatureECDSA + signaturePKCS1v15 uint8 = iota + 225 signatureRSAPSS + signatureECDSA + signatureEd25519 ) +// directSigning is a standard Hash value that signals that no pre-hashing +// should be performed, and that the input should be signed directly. It is the +// hash function associated with the Ed25519 signature scheme. +var directSigning crypto.Hash = 0 + // defaultSupportedSignatureAlgorithms contains the signature and hash algorithms that // the code advertises as supported in a TLS 1.2+ ClientHello and in a TLS 1.2+ // CertificateRequest. The two fields are merged to match with TLS 1.3. // Note that in TLS 1.2, the ECDSA algorithms are not constrained to P-256, etc. var defaultSupportedSignatureAlgorithms = []SignatureScheme{ PSSWithSHA256, + ECDSAWithP256AndSHA256, + Ed25519, PSSWithSHA384, PSSWithSHA512, PKCS1WithSHA256, - ECDSAWithP256AndSHA256, PKCS1WithSHA384, - ECDSAWithP384AndSHA384, PKCS1WithSHA512, + ECDSAWithP384AndSHA384, ECDSAWithP521AndSHA512, PKCS1WithSHA1, ECDSAWithSHA1, @@ -308,6 +315,9 @@ const ( ECDSAWithP384AndSHA384 SignatureScheme = 0x0503 ECDSAWithP521AndSHA512 SignatureScheme = 0x0603 + // EdDSA algorithms. + Ed25519 SignatureScheme = 0x0807 + // Legacy signature and hash algorithms for TLS 1.2. PKCS1WithSHA1 SignatureScheme = 0x0201 ECDSAWithSHA1 SignatureScheme = 0x0203 @@ -783,7 +793,7 @@ func (c *Config) supportedVersions(isClient bool) []uint16 { if isClient && v < VersionTLS10 { continue } - // TLS 1.3 is opt-in in Go 1.12. + // TLS 1.3 is opt-out in Go 1.13. if v == VersionTLS13 && !isTLS13Supported() { continue } @@ -798,11 +808,11 @@ var tls13Support struct { cached bool } -// isTLS13Supported returns whether the program opted into TLS 1.3 via -// GODEBUG=tls13=1. It's cached after the first execution. +// isTLS13Supported returns whether the program enabled TLS 1.3 by not opting +// out with GODEBUG=tls13=0. It's cached after the first execution. func isTLS13Supported() bool { tls13Support.Do(func() { - tls13Support.cached = goDebugString("tls13") == "1" + tls13Support.cached = goDebugString("tls13") != "0" }) return tls13Support.cached } @@ -976,7 +986,7 @@ var writerMutex sync.Mutex type Certificate struct { Certificate [][]byte // PrivateKey contains the private key corresponding to the public key in - // Leaf. This must implement crypto.Signer with an RSA or ECDSA PublicKey. + // Leaf. This must implement crypto.Signer with an RSA, ECDSA or Ed25519 PublicKey. // For a server up to TLS 1.2, it can also implement crypto.Decrypter with // an RSA PublicKey. PrivateKey crypto.PrivateKey @@ -1193,6 +1203,8 @@ func signatureFromSignatureScheme(signatureAlgorithm SignatureScheme) uint8 { return signatureRSAPSS case ECDSAWithSHA1, ECDSAWithP256AndSHA256, ECDSAWithP384AndSHA384, ECDSAWithP521AndSHA512: return signatureECDSA + case Ed25519: + return signatureEd25519 default: return 0 } diff --git a/src/crypto/tls/conn.go b/src/crypto/tls/conn.go index f61d43203f..0c7952f7b8 100644 --- a/src/crypto/tls/conn.go +++ b/src/crypto/tls/conn.go @@ -274,6 +274,17 @@ func extractPadding(payload []byte) (toRemove int, good byte) { good &= good << 1 good = uint8(int8(good) >> 7) + // Zero the padding length on error. This ensures any unchecked bytes + // are included in the MAC. Otherwise, an attacker that could + // distinguish MAC failures from padding failures could mount an attack + // similar to POODLE in SSL 3.0: given a good ciphertext that uses a + // full block's worth of padding, replace the final block with another + // block. If the MAC check passed but the padding check failed, the + // last byte of that block decrypted to the block size. + // + // See also macAndPaddingGood logic below. + paddingLen &= good + toRemove = int(paddingLen) + 1 return } @@ -416,7 +427,15 @@ func (hc *halfConn) decrypt(record []byte) ([]byte, recordType, error) { remoteMAC := payload[n : n+macSize] localMAC := hc.mac.MAC(hc.seq[0:], record[:recordHeaderLen], payload[:n], payload[n+macSize:]) - if subtle.ConstantTimeCompare(localMAC, remoteMAC) != 1 || paddingGood != 255 { + // This is equivalent to checking the MACs and paddingGood + // separately, but in constant-time to prevent distinguishing + // padding failures from MAC failures. Depending on what value + // of paddingLen was returned on bad padding, distinguishing + // bad MAC from bad padding can lead to an attack. + // + // See also the logic at the end of extractPadding. + macAndPaddingGood := subtle.ConstantTimeCompare(localMAC, remoteMAC) & int(paddingGood) + if macAndPaddingGood != 1 { return nil, 0, alertBadRecordMAC } diff --git a/src/crypto/tls/generate_cert.go b/src/crypto/tls/generate_cert.go index 8d012be75c..7329d97a9d 100644 --- a/src/crypto/tls/generate_cert.go +++ b/src/crypto/tls/generate_cert.go @@ -11,6 +11,7 @@ package main import ( "crypto/ecdsa" + "crypto/ed25519" "crypto/elliptic" "crypto/rand" "crypto/rsa" @@ -18,7 +19,6 @@ import ( "crypto/x509/pkix" "encoding/pem" "flag" - "fmt" "log" "math/big" "net" @@ -34,6 +34,7 @@ var ( isCA = flag.Bool("ca", false, "whether this cert should be its own Certificate Authority") rsaBits = flag.Int("rsa-bits", 2048, "Size of RSA key to generate. Ignored if --ecdsa-curve is set") ecdsaCurve = flag.String("ecdsa-curve", "", "ECDSA curve to use to generate a key. Valid values are P224, P256 (recommended), P384, P521") + ed25519Key = flag.Bool("ed25519", false, "Generate an Ed25519 key") ) func publicKey(priv interface{}) interface{} { @@ -42,22 +43,8 @@ func publicKey(priv interface{}) interface{} { return &k.PublicKey case *ecdsa.PrivateKey: return &k.PublicKey - default: - return nil - } -} - -func pemBlockForKey(priv interface{}) *pem.Block { - switch k := priv.(type) { - case *rsa.PrivateKey: - return &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(k)} - case *ecdsa.PrivateKey: - b, err := x509.MarshalECPrivateKey(k) - if err != nil { - fmt.Fprintf(os.Stderr, "Unable to marshal ECDSA private key: %v", err) - os.Exit(2) - } - return &pem.Block{Type: "EC PRIVATE KEY", Bytes: b} + case ed25519.PrivateKey: + return k.Public().(ed25519.PublicKey) default: return nil } @@ -74,7 +61,11 @@ func main() { var err error switch *ecdsaCurve { case "": - priv, err = rsa.GenerateKey(rand.Reader, *rsaBits) + if *ed25519Key { + _, priv, err = ed25519.GenerateKey(rand.Reader) + } else { + priv, err = rsa.GenerateKey(rand.Reader, *rsaBits) + } case "P224": priv, err = ecdsa.GenerateKey(elliptic.P224(), rand.Reader) case "P256": @@ -84,11 +75,10 @@ func main() { case "P521": priv, err = ecdsa.GenerateKey(elliptic.P521(), rand.Reader) default: - fmt.Fprintf(os.Stderr, "Unrecognized elliptic curve: %q", *ecdsaCurve) - os.Exit(1) + log.Fatalf("Unrecognized elliptic curve: %q", *ecdsaCurve) } if err != nil { - log.Fatalf("failed to generate private key: %s", err) + log.Fatalf("Failed to generate private key: %s", err) } var notBefore time.Time @@ -97,8 +87,7 @@ func main() { } else { notBefore, err = time.Parse("Jan 2 15:04:05 2006", *validFrom) if err != nil { - fmt.Fprintf(os.Stderr, "Failed to parse creation date: %s\n", err) - os.Exit(1) + log.Fatalf("Failed to parse creation date: %s", err) } } @@ -107,7 +96,7 @@ func main() { serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) serialNumber, err := rand.Int(rand.Reader, serialNumberLimit) if err != nil { - log.Fatalf("failed to generate serial number: %s", err) + log.Fatalf("Failed to generate serial number: %s", err) } template := x509.Certificate{ @@ -144,26 +133,30 @@ func main() { certOut, err := os.Create("cert.pem") if err != nil { - log.Fatalf("failed to open cert.pem for writing: %s", err) + log.Fatalf("Failed to open cert.pem for writing: %s", err) } if err := pem.Encode(certOut, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes}); err != nil { - log.Fatalf("failed to write data to cert.pem: %s", err) + log.Fatalf("Failed to write data to cert.pem: %s", err) } if err := certOut.Close(); err != nil { - log.Fatalf("error closing cert.pem: %s", err) + log.Fatalf("Error closing cert.pem: %s", err) } log.Print("wrote cert.pem\n") keyOut, err := os.OpenFile("key.pem", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) if err != nil { - log.Print("failed to open key.pem for writing:", err) + log.Fatalf("Failed to open key.pem for writing:", err) return } - if err := pem.Encode(keyOut, pemBlockForKey(priv)); err != nil { - log.Fatalf("failed to write data to key.pem: %s", err) + privBytes, err := x509.MarshalPKCS8PrivateKey(priv) + if err != nil { + log.Fatalf("Unable to marshal private key: %v", err) + } + if err := pem.Encode(keyOut, &pem.Block{Type: "PRIVATE KEY", Bytes: privBytes}); err != nil { + log.Fatalf("Failed to write data to key.pem: %s", err) } if err := keyOut.Close(); err != nil { - log.Fatalf("error closing key.pem: %s", err) + log.Fatalf("Error closing key.pem: %s", err) } log.Print("wrote key.pem\n") } diff --git a/src/crypto/tls/handshake_client.go b/src/crypto/tls/handshake_client.go index b8d6e93264..e8f327e23f 100644 --- a/src/crypto/tls/handshake_client.go +++ b/src/crypto/tls/handshake_client.go @@ -8,6 +8,7 @@ import ( "bytes" "crypto" "crypto/ecdsa" + "crypto/ed25519" "crypto/rsa" "crypto/subtle" "crypto/x509" @@ -584,7 +585,7 @@ func (hs *clientHandshakeState) doFullHandshake() error { if certVerify.hasSignatureAlgorithm { certVerify.signatureAlgorithm = signatureAlgorithm } - digest, err := hs.finishedHash.hashForClientCertificate(sigType, hashFunc, hs.masterSecret) + signed, err := hs.finishedHash.hashForClientCertificate(sigType, hashFunc, hs.masterSecret) if err != nil { c.sendAlert(alertInternalError) return err @@ -593,7 +594,7 @@ func (hs *clientHandshakeState) doFullHandshake() error { if sigType == signatureRSAPSS { signOpts = &rsa.PSSOptions{SaltLength: rsa.PSSSaltLengthEqualsHash, Hash: hashFunc} } - certVerify.signature, err = key.Sign(c.config.rand(), digest, signOpts) + certVerify.signature, err = key.Sign(c.config.rand(), signed, signOpts) if err != nil { c.sendAlert(alertInternalError) return err @@ -831,11 +832,7 @@ func (c *Conn) verifyServerCertificate(certificates [][]byte) error { DNSName: c.config.ServerName, Intermediates: x509.NewCertPool(), } - - for i, cert := range certs { - if i == 0 { - continue - } + for _, cert := range certs[1:] { opts.Intermediates.AddCert(cert) } var err error @@ -854,7 +851,7 @@ func (c *Conn) verifyServerCertificate(certificates [][]byte) error { } switch certs[0].PublicKey.(type) { - case *rsa.PublicKey, *ecdsa.PublicKey: + case *rsa.PublicKey, *ecdsa.PublicKey, ed25519.PublicKey: break default: c.sendAlert(alertUnsupportedCertificate) @@ -877,13 +874,13 @@ var ( // certificateRequestInfoFromMsg generates a CertificateRequestInfo from a TLS // <= 1.2 CertificateRequest, making an effort to fill in missing information. func certificateRequestInfoFromMsg(certReq *certificateRequestMsg) *CertificateRequestInfo { - var rsaAvail, ecdsaAvail bool + var rsaAvail, ecAvail bool for _, certType := range certReq.certificateTypes { switch certType { case certTypeRSASign: rsaAvail = true case certTypeECDSASign: - ecdsaAvail = true + ecAvail = true } } @@ -897,11 +894,11 @@ func certificateRequestInfoFromMsg(certReq *certificateRequestMsg) *CertificateR // case we use a plausible list based on the acceptable // certificate types. switch { - case rsaAvail && ecdsaAvail: + case rsaAvail && ecAvail: cri.SignatureSchemes = tls11SignatureSchemes case rsaAvail: cri.SignatureSchemes = tls11SignatureSchemesRSA - case ecdsaAvail: + case ecAvail: cri.SignatureSchemes = tls11SignatureSchemesECDSA } return cri @@ -914,8 +911,8 @@ func certificateRequestInfoFromMsg(certReq *certificateRequestMsg) *CertificateR cri.SignatureSchemes = make([]SignatureScheme, 0, len(certReq.supportedSignatureAlgorithms)) for _, sigScheme := range certReq.supportedSignatureAlgorithms { switch signatureFromSignatureScheme(sigScheme) { - case signatureECDSA: - if ecdsaAvail { + case signatureECDSA, signatureEd25519: + if ecAvail { cri.SignatureSchemes = append(cri.SignatureSchemes, sigScheme) } case signatureRSAPSS, signaturePKCS1v15: diff --git a/src/crypto/tls/handshake_client_test.go b/src/crypto/tls/handshake_client_test.go index d961cab4bc..40311b0a66 100644 --- a/src/crypto/tls/handshake_client_test.go +++ b/src/crypto/tls/handshake_client_test.go @@ -6,7 +6,6 @@ package tls import ( "bytes" - "crypto/ecdsa" "crypto/rsa" "crypto/x509" "encoding/base64" @@ -142,7 +141,7 @@ type clientTest struct { // cert, if not empty, contains a DER-encoded certificate for the // reference server. cert []byte - // key, if not nil, contains either a *rsa.PrivateKey or + // key, if not nil, contains either a *rsa.PrivateKey, ed25519.PrivateKey or // *ecdsa.PrivateKey which is the private key for the reference server. key interface{} // extensions, if not nil, contains a list of extension data to be returned @@ -185,25 +184,13 @@ func (test *clientTest) connFromCommand() (conn *recordingConn, child *exec.Cmd, if test.key != nil { key = test.key } - var pemType string - var derBytes []byte - switch key := key.(type) { - case *rsa.PrivateKey: - pemType = "RSA" - derBytes = x509.MarshalPKCS1PrivateKey(key) - case *ecdsa.PrivateKey: - pemType = "EC" - var err error - derBytes, err = x509.MarshalECPrivateKey(key) - if err != nil { - panic(err) - } - default: - panic("unknown key type") + derBytes, err := x509.MarshalPKCS8PrivateKey(key) + if err != nil { + panic(err) } var pemOut bytes.Buffer - pem.Encode(&pemOut, &pem.Block{Type: pemType + " PRIVATE KEY", Bytes: derBytes}) + pem.Encode(&pemOut, &pem.Block{Type: "PRIVATE KEY", Bytes: derBytes}) keyPath := tempFile(pemOut.String()) defer os.Remove(keyPath) @@ -745,6 +732,29 @@ func TestHandshakeClientECDSATLS13(t *testing.T) { runClientTestTLS13(t, test) } +func TestHandshakeClientEd25519(t *testing.T) { + test := &clientTest{ + name: "Ed25519", + cert: testEd25519Certificate, + key: testEd25519PrivateKey, + } + runClientTestTLS12(t, test) + runClientTestTLS13(t, test) + + config := testConfig.Clone() + cert, _ := X509KeyPair([]byte(clientEd25519CertificatePEM), []byte(clientEd25519KeyPEM)) + config.Certificates = []Certificate{cert} + + test = &clientTest{ + name: "ClientCert-Ed25519", + args: []string{"-Verify", "1"}, + config: config, + } + + runClientTestTLS12(t, test) + runClientTestTLS13(t, test) +} + func TestHandshakeClientCertRSA(t *testing.T) { config := testConfig.Clone() cert, _ := X509KeyPair([]byte(clientCertificatePEM), []byte(clientKeyPEM)) diff --git a/src/crypto/tls/handshake_client_tls13.go b/src/crypto/tls/handshake_client_tls13.go index 186275b12e..067231b199 100644 --- a/src/crypto/tls/handshake_client_tls13.go +++ b/src/crypto/tls/handshake_client_tls13.go @@ -466,10 +466,9 @@ func (hs *clientHandshakeStateTLS13) readServerCertificate() error { c.sendAlert(alertIllegalParameter) return errors.New("tls: invalid certificate signature algorithm") } - h := sigHash.New() - writeSignedMessage(h, serverSignatureContext, hs.transcript) + signed := signedMessage(sigHash, serverSignatureContext, hs.transcript) if err := verifyHandshakeSignature(sigType, c.peerCertificates[0].PublicKey, - sigHash, h.Sum(nil), certVerify.signature); err != nil { + sigHash, signed, certVerify.signature); err != nil { c.sendAlert(alertDecryptError) return errors.New("tls: invalid certificate signature") } @@ -584,14 +583,13 @@ func (hs *clientHandshakeStateTLS13) sendClientCertificate() error { if sigType == 0 || err != nil { return c.sendAlert(alertInternalError) } - h := sigHash.New() - writeSignedMessage(h, clientSignatureContext, hs.transcript) + signed := signedMessage(sigHash, clientSignatureContext, hs.transcript) signOpts := crypto.SignerOpts(sigHash) if sigType == signatureRSAPSS { signOpts = &rsa.PSSOptions{SaltLength: rsa.PSSSaltLengthEqualsHash, Hash: sigHash} } - sig, err := cert.PrivateKey.(crypto.Signer).Sign(c.config.rand(), h.Sum(nil), signOpts) + sig, err := cert.PrivateKey.(crypto.Signer).Sign(c.config.rand(), signed, signOpts) if err != nil { c.sendAlert(alertInternalError) return errors.New("tls: failed to sign handshake: " + err.Error()) diff --git a/src/crypto/tls/handshake_messages.go b/src/crypto/tls/handshake_messages.go index c0e049b16f..2d21377737 100644 --- a/src/crypto/tls/handshake_messages.go +++ b/src/crypto/tls/handshake_messages.go @@ -6,7 +6,7 @@ package tls import ( "fmt" - "internal/x/crypto/cryptobyte" + "golang.org/x/crypto/cryptobyte" "strings" ) @@ -320,7 +320,7 @@ func (m *clientHelloMsg) marshalWithoutBinders() []byte { } // updateBinders updates the m.pskBinders field, if necessary updating the -// cached marshalled representation. The supplied binders must have the same +// cached marshaled representation. The supplied binders must have the same // length as the current m.pskBinders. func (m *clientHelloMsg) updateBinders(pskBinders [][]byte) { if len(pskBinders) != len(m.pskBinders) { diff --git a/src/crypto/tls/handshake_server.go b/src/crypto/tls/handshake_server.go index 909430facb..969c4babef 100644 --- a/src/crypto/tls/handshake_server.go +++ b/src/crypto/tls/handshake_server.go @@ -7,6 +7,7 @@ package tls import ( "crypto" "crypto/ecdsa" + "crypto/ed25519" "crypto/rsa" "crypto/subtle" "crypto/x509" @@ -23,8 +24,8 @@ type serverHandshakeState struct { clientHello *clientHelloMsg hello *serverHelloMsg suite *cipherSuite - ellipticOk bool - ecdsaOk bool + ecdhOk bool + ecSignOk bool rsaDecryptOk bool rsaSignOk bool sessionState *sessionState @@ -193,7 +194,7 @@ Curves: break } } - hs.ellipticOk = supportedCurve && supportedPointFormat + hs.ecdhOk = supportedCurve && supportedPointFormat foundCompression := false // We only support null compression, so check that the client offered it. @@ -266,7 +267,9 @@ Curves: if priv, ok := hs.cert.PrivateKey.(crypto.Signer); ok { switch priv.Public().(type) { case *ecdsa.PublicKey: - hs.ecdsaOk = true + hs.ecSignOk = true + case ed25519.PublicKey: + hs.ecSignOk = true case *rsa.PublicKey: hs.rsaSignOk = true default: @@ -565,9 +568,9 @@ func (hs *serverHandshakeState) doFullHandshake() error { return err } - var digest []byte - if digest, err = hs.finishedHash.hashForClientCertificate(sigType, hashFunc, hs.masterSecret); err == nil { - err = verifyHandshakeSignature(sigType, pub, hashFunc, digest, certVerify.signature) + signed, err := hs.finishedHash.hashForClientCertificate(sigType, hashFunc, hs.masterSecret) + if err == nil { + err = verifyHandshakeSignature(sigType, pub, hashFunc, signed, certVerify.signature) } if err != nil { c.sendAlert(alertBadCertificate) @@ -756,7 +759,7 @@ func (c *Conn) processCertsFromClient(certificate Certificate) error { } switch certs[0].PublicKey.(type) { - case *ecdsa.PublicKey, *rsa.PublicKey: + case *ecdsa.PublicKey, *rsa.PublicKey, ed25519.PublicKey: default: c.sendAlert(alertUnsupportedCertificate) return fmt.Errorf("tls: client's certificate contains an unsupported public key of type %T", certs[0].PublicKey) @@ -773,33 +776,34 @@ func (c *Conn) processCertsFromClient(certificate Certificate) error { // It returns a bool indicating if the suite was set. func (hs *serverHandshakeState) setCipherSuite(id uint16, supportedCipherSuites []uint16, version uint16) bool { for _, supported := range supportedCipherSuites { - if id == supported { - candidate := cipherSuiteByID(id) - if candidate == nil { - continue - } - // Don't select a ciphersuite which we can't - // support for this client. - if candidate.flags&suiteECDHE != 0 { - if !hs.ellipticOk { - continue - } - if candidate.flags&suiteECDSA != 0 { - if !hs.ecdsaOk { - continue - } - } else if !hs.rsaSignOk { - continue - } - } else if !hs.rsaDecryptOk { - continue - } - if version < VersionTLS12 && candidate.flags&suiteTLS12 != 0 { - continue - } - hs.suite = candidate - return true + if id != supported { + continue } + candidate := cipherSuiteByID(id) + if candidate == nil { + continue + } + // Don't select a ciphersuite which we can't + // support for this client. + if candidate.flags&suiteECDHE != 0 { + if !hs.ecdhOk { + continue + } + if candidate.flags&suiteECSign != 0 { + if !hs.ecSignOk { + continue + } + } else if !hs.rsaSignOk { + continue + } + } else if !hs.rsaDecryptOk { + continue + } + if version < VersionTLS12 && candidate.flags&suiteTLS12 != 0 { + continue + } + hs.suite = candidate + return true } return false } diff --git a/src/crypto/tls/handshake_server_test.go b/src/crypto/tls/handshake_server_test.go index 411648ef68..131de0f2fc 100644 --- a/src/crypto/tls/handshake_server_test.go +++ b/src/crypto/tls/handshake_server_test.go @@ -8,6 +8,7 @@ import ( "bytes" "crypto" "crypto/ecdsa" + "crypto/ed25519" "crypto/elliptic" "crypto/rsa" "crypto/x509" @@ -1211,6 +1212,22 @@ func TestHandshakeServerRSAPSS(t *testing.T) { runServerTestTLS13(t, test) } +func TestHandshakeServerEd25519(t *testing.T) { + config := testConfig.Clone() + config.Certificates = make([]Certificate, 1) + config.Certificates[0].Certificate = [][]byte{testEd25519Certificate} + config.Certificates[0].PrivateKey = testEd25519PrivateKey + config.BuildNameToCertificate() + + test := &serverTest{ + name: "Ed25519", + command: []string{"openssl", "s_client", "-no_ticket"}, + config: config, + } + runServerTestTLS12(t, test) + runServerTestTLS13(t, test) +} + func benchmarkHandshakeServer(b *testing.B, version uint16, cipherSuite uint16, curve CurveID, cert []byte, key crypto.PrivateKey) { config := testConfig.Clone() config.CipherSuites = []uint16{cipherSuite} @@ -1378,8 +1395,24 @@ FMBexFe01MNvja5oHt1vzobhfm6ySD6B5U7ixohLZNz1MLvT/2XMW/TdtWo+PtAd +U56jb0JuK7qixgnTy5w/hOWusPTQBbNZU6sER7m8Q== -----END EC PRIVATE KEY-----` +const clientEd25519CertificatePEM = ` +-----BEGIN CERTIFICATE----- +MIIBLjCB4aADAgECAhAX0YGTviqMISAQJRXoNCNPMAUGAytlcDASMRAwDgYDVQQK +EwdBY21lIENvMB4XDTE5MDUxNjIxNTQyNloXDTIwMDUxNTIxNTQyNlowEjEQMA4G +A1UEChMHQWNtZSBDbzAqMAUGAytlcAMhAAvgtWC14nkwPb7jHuBQsQTIbcd4bGkv +xRStmmNveRKRo00wSzAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUH +AwIwDAYDVR0TAQH/BAIwADAWBgNVHREEDzANggtleGFtcGxlLmNvbTAFBgMrZXAD +QQD8GRcqlKUx+inILn9boF2KTjRAOdazENwZ/qAicbP1j6FYDc308YUkv+Y9FN/f +7Q7hF9gRomDQijcjKsJGqjoI +-----END CERTIFICATE-----` + +const clientEd25519KeyPEM = ` +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEINifzf07d9qx3d44e0FSbV4mC/xQxT644RRbpgNpin7I +-----END PRIVATE KEY-----` + func TestClientAuth(t *testing.T) { - var certPath, keyPath, ecdsaCertPath, ecdsaKeyPath string + var certPath, keyPath, ecdsaCertPath, ecdsaKeyPath, ed25519CertPath, ed25519KeyPath string if *update { certPath = tempFile(clientCertificatePEM) @@ -1390,6 +1423,10 @@ func TestClientAuth(t *testing.T) { defer os.Remove(ecdsaCertPath) ecdsaKeyPath = tempFile(clientECDSAKeyPEM) defer os.Remove(ecdsaKeyPath) + ed25519CertPath = tempFile(clientEd25519CertificatePEM) + defer os.Remove(ed25519CertPath) + ed25519KeyPath = tempFile(clientEd25519KeyPEM) + defer os.Remove(ed25519KeyPath) } else { t.Parallel() } @@ -1425,6 +1462,16 @@ func TestClientAuth(t *testing.T) { runServerTestTLS12(t, test) runServerTestTLS13(t, test) + test = &serverTest{ + name: "ClientAuthRequestedAndEd25519Given", + command: []string{"openssl", "s_client", "-no_ticket", + "-cert", ed25519CertPath, "-key", ed25519KeyPath}, + config: config, + expectedPeerCerts: []string{clientEd25519CertificatePEM}, + } + runServerTestTLS12(t, test) + runServerTestTLS13(t, test) + test = &serverTest{ name: "ClientAuthRequestedAndPKCS1v15Given", command: []string{"openssl", "s_client", "-no_ticket", "-cipher", "AES128-SHA", @@ -1642,6 +1689,8 @@ var testRSAPSSCertificate = fromHex("308202583082018da003020102021100f29926eb87e var testECDSACertificate = fromHex("3082020030820162020900b8bf2d47a0d2ebf4300906072a8648ce3d04013045310b3009060355040613024155311330110603550408130a536f6d652d53746174653121301f060355040a1318496e7465726e6574205769646769747320507479204c7464301e170d3132313132323135303633325a170d3232313132303135303633325a3045310b3009060355040613024155311330110603550408130a536f6d652d53746174653121301f060355040a1318496e7465726e6574205769646769747320507479204c746430819b301006072a8648ce3d020106052b81040023038186000400c4a1edbe98f90b4873367ec316561122f23d53c33b4d213dcd6b75e6f6b0dc9adf26c1bcb287f072327cb3642f1c90bcea6823107efee325c0483a69e0286dd33700ef0462dd0da09c706283d881d36431aa9e9731bd96b068c09b23de76643f1a5c7fe9120e5858b65f70dd9bd8ead5d7f5d5ccb9b69f30665b669a20e227e5bffe3b300906072a8648ce3d040103818c0030818802420188a24febe245c5487d1bacf5ed989dae4770c05e1bb62fbdf1b64db76140d311a2ceee0b7e927eff769dc33b7ea53fcefa10e259ec472d7cacda4e970e15a06fd00242014dfcbe67139c2d050ebd3fa38c25c13313830d9406bbd4377af6ec7ac9862eddd711697f857c56defb31782be4c7780daecbbe9e4e3624317b6a0f399512078f2a") +var testEd25519Certificate = fromHex("3082012e3081e1a00302010202100f431c425793941de987e4f1ad15005d300506032b657030123110300e060355040a130741636d6520436f301e170d3139303531363231333830315a170d3230303531353231333830315a30123110300e060355040a130741636d6520436f302a300506032b65700321003fe2152ee6e3ef3f4e854a7577a3649eede0bf842ccc92268ffa6f3483aaec8fa34d304b300e0603551d0f0101ff0404030205a030130603551d25040c300a06082b06010505070301300c0603551d130101ff0402300030160603551d11040f300d820b6578616d706c652e636f6d300506032b65700341006344ed9cc4be5324539fd2108d9fe82108909539e50dc155ff2c16b71dfcab7d4dd4e09313d0a942e0b66bfe5d6748d79f50bc6ccd4b03837cf20858cdaccf0c") + var testSNICertificate = fromHex("0441883421114c81480804c430820237308201a0a003020102020900e8f09d3fe25beaa6300d06092a864886f70d01010b0500301f310b3009060355040a1302476f3110300e06035504031307476f20526f6f74301e170d3136303130313030303030305a170d3235303130313030303030305a3023310b3009060355040a1302476f311430120603550403130b736e69746573742e636f6d30819f300d06092a864886f70d010101050003818d0030818902818100db467d932e12270648bc062821ab7ec4b6a25dfe1e5245887a3647a5080d92425bc281c0be97799840fb4f6d14fd2b138bc2a52e67d8d4099ed62238b74a0b74732bc234f1d193e596d9747bf3589f6c613cc0b041d4d92b2b2423775b1c3bbd755dce2054cfa163871d1e24c4f31d1a508baab61443ed97a77562f414c852d70203010001a3773075300e0603551d0f0101ff0404030205a0301d0603551d250416301406082b0601050507030106082b06010505070302300c0603551d130101ff0402300030190603551d0e041204109f91161f43433e49a6de6db680d79f60301b0603551d230414301280104813494d137e1631bba301d5acab6e7b300d06092a864886f70d01010b0500038181007beeecff0230dbb2e7a334af65430b7116e09f327c3bbf918107fc9c66cb497493207ae9b4dbb045cb63d605ec1b5dd485bb69124d68fa298dc776699b47632fd6d73cab57042acb26f083c4087459bc5a3bb3ca4d878d7fe31016b7bc9a627438666566e3389bfaeebe6becc9a0093ceed18d0f9ac79d56f3a73f18188988ed") var testP256Certificate = fromHex("308201693082010ea00302010202105012dc24e1124ade4f3e153326ff27bf300a06082a8648ce3d04030230123110300e060355040a130741636d6520436f301e170d3137303533313232343934375a170d3138303533313232343934375a30123110300e060355040a130741636d6520436f3059301306072a8648ce3d020106082a8648ce3d03010703420004c02c61c9b16283bbcc14956d886d79b358aa614596975f78cece787146abf74c2d5dc578c0992b4f3c631373479ebf3892efe53d21c4f4f1cc9a11c3536b7f75a3463044300e0603551d0f0101ff0404030205a030130603551d25040c300a06082b06010505070301300c0603551d130101ff04023000300f0603551d1104083006820474657374300a06082a8648ce3d0403020349003046022100963712d6226c7b2bef41512d47e1434131aaca3ba585d666c924df71ac0448b3022100f4d05c725064741aef125f243cdbccaa2a5d485927831f221c43023bd5ae471a") @@ -1669,6 +1718,8 @@ var testECDSAPrivateKey = &ecdsa.PrivateKey{ var testP256PrivateKey, _ = x509.ParseECPrivateKey(fromHex("30770201010420012f3b52bc54c36ba3577ad45034e2e8efe1e6999851284cb848725cfe029991a00a06082a8648ce3d030107a14403420004c02c61c9b16283bbcc14956d886d79b358aa614596975f78cece787146abf74c2d5dc578c0992b4f3c631373479ebf3892efe53d21c4f4f1cc9a11c3536b7f75")) +var testEd25519PrivateKey = ed25519.PrivateKey(fromHex("3a884965e76b3f55e5faf9615458a92354894234de3ec9f684d46d55cebf3dc63fe2152ee6e3ef3f4e854a7577a3649eede0bf842ccc92268ffa6f3483aaec8f")) + func TestCloseServerConnectionOnIdleClient(t *testing.T) { clientConn, serverConn := localPipe(t) server := Server(serverConn, testConfig.Clone()) diff --git a/src/crypto/tls/handshake_server_tls13.go b/src/crypto/tls/handshake_server_tls13.go index 4dfb365f8d..65001e4ecf 100644 --- a/src/crypto/tls/handshake_server_tls13.go +++ b/src/crypto/tls/handshake_server_tls13.go @@ -630,14 +630,13 @@ func (hs *serverHandshakeStateTLS13) sendServerCertificate() error { if sigType == 0 || err != nil { return c.sendAlert(alertInternalError) } - h := sigHash.New() - writeSignedMessage(h, serverSignatureContext, hs.transcript) + signed := signedMessage(sigHash, serverSignatureContext, hs.transcript) signOpts := crypto.SignerOpts(sigHash) if sigType == signatureRSAPSS { signOpts = &rsa.PSSOptions{SaltLength: rsa.PSSSaltLengthEqualsHash, Hash: sigHash} } - sig, err := hs.cert.PrivateKey.(crypto.Signer).Sign(c.config.rand(), h.Sum(nil), signOpts) + sig, err := hs.cert.PrivateKey.(crypto.Signer).Sign(c.config.rand(), signed, signOpts) if err != nil { public := hs.cert.PrivateKey.(crypto.Signer).Public() if rsaKey, ok := public.(*rsa.PublicKey); ok && sigType == signatureRSAPSS && @@ -819,10 +818,9 @@ func (hs *serverHandshakeStateTLS13) readClientCertificate() error { c.sendAlert(alertIllegalParameter) return errors.New("tls: invalid certificate signature algorithm") } - h := sigHash.New() - writeSignedMessage(h, clientSignatureContext, hs.transcript) + signed := signedMessage(sigHash, clientSignatureContext, hs.transcript) if err := verifyHandshakeSignature(sigType, c.peerCertificates[0].PublicKey, - sigHash, h.Sum(nil), certVerify.signature); err != nil { + sigHash, signed, certVerify.signature); err != nil { c.sendAlert(alertDecryptError) return errors.New("tls: invalid certificate signature") } diff --git a/src/crypto/tls/key_agreement.go b/src/crypto/tls/key_agreement.go index 681ba83c06..fdf8f803a0 100644 --- a/src/crypto/tls/key_agreement.go +++ b/src/crypto/tls/key_agreement.go @@ -105,26 +105,34 @@ func md5SHA1Hash(slices [][]byte) []byte { // hashForServerKeyExchange hashes the given slices and returns their digest // using the given hash function (for >= TLS 1.2) or using a default based on -// the sigType (for earlier TLS versions). -func hashForServerKeyExchange(sigType uint8, hashFunc crypto.Hash, version uint16, slices ...[]byte) ([]byte, error) { +// the sigType (for earlier TLS versions). For Ed25519 signatures, which don't +// do pre-hashing, it returns the concatenation of the slices. +func hashForServerKeyExchange(sigType uint8, hashFunc crypto.Hash, version uint16, slices ...[]byte) []byte { + if sigType == signatureEd25519 { + var signed []byte + for _, slice := range slices { + signed = append(signed, slice...) + } + return signed + } if version >= VersionTLS12 { h := hashFunc.New() for _, slice := range slices { h.Write(slice) } digest := h.Sum(nil) - return digest, nil + return digest } if sigType == signatureECDSA { - return sha1Hash(slices), nil + return sha1Hash(slices) } - return md5SHA1Hash(slices), nil + return md5SHA1Hash(slices) } // ecdheKeyAgreement implements a TLS key agreement where the server // generates an ephemeral EC public/private key pair and signs it. The // pre-master secret is then calculated using ECDH. The signature may -// either be ECDSA or RSA. +// be ECDSA, Ed25519 or RSA. type ecdheKeyAgreement struct { version uint16 isRSA bool @@ -185,16 +193,13 @@ NextCandidate: return nil, errors.New("tls: certificate cannot be used with the selected cipher suite") } - digest, err := hashForServerKeyExchange(sigType, hashFunc, ka.version, clientHello.random, hello.random, serverECDHParams) - if err != nil { - return nil, err - } + signed := hashForServerKeyExchange(sigType, hashFunc, ka.version, clientHello.random, hello.random, serverECDHParams) signOpts := crypto.SignerOpts(hashFunc) if sigType == signatureRSAPSS { signOpts = &rsa.PSSOptions{SaltLength: rsa.PSSSaltLengthEqualsHash, Hash: hashFunc} } - sig, err := priv.Sign(config.rand(), digest, signOpts) + sig, err := priv.Sign(config.rand(), signed, signOpts) if err != nil { return nil, errors.New("tls: failed to sign ECDHE parameters: " + err.Error()) } @@ -297,11 +302,8 @@ func (ka *ecdheKeyAgreement) processServerKeyExchange(config *Config, clientHell } sig = sig[2:] - digest, err := hashForServerKeyExchange(sigType, hashFunc, ka.version, clientHello.random, serverHello.random, serverECDHParams) - if err != nil { - return err - } - return verifyHandshakeSignature(sigType, cert.PublicKey, hashFunc, digest, sig) + signed := hashForServerKeyExchange(sigType, hashFunc, ka.version, clientHello.random, serverHello.random, serverECDHParams) + return verifyHandshakeSignature(sigType, cert.PublicKey, hashFunc, signed, sig) } func (ka *ecdheKeyAgreement) generateClientKeyExchange(config *Config, clientHello *clientHelloMsg, cert *x509.Certificate) ([]byte, *clientKeyExchangeMsg, error) { diff --git a/src/crypto/tls/key_schedule.go b/src/crypto/tls/key_schedule.go index 2cfc226d7f..3cd6e8297a 100644 --- a/src/crypto/tls/key_schedule.go +++ b/src/crypto/tls/key_schedule.go @@ -8,10 +8,10 @@ import ( "crypto/elliptic" "crypto/hmac" "errors" + "golang.org/x/crypto/cryptobyte" + "golang.org/x/crypto/curve25519" + "golang.org/x/crypto/hkdf" "hash" - "internal/x/crypto/cryptobyte" - "internal/x/crypto/curve25519" - "internal/x/crypto/hkdf" "io" "math/big" ) diff --git a/src/crypto/tls/prf.go b/src/crypto/tls/prf.go index 5379397c26..5e97726e79 100644 --- a/src/crypto/tls/prf.go +++ b/src/crypto/tls/prf.go @@ -187,6 +187,8 @@ func hashFromSignatureScheme(signatureAlgorithm SignatureScheme) (crypto.Hash, e return crypto.SHA384, nil case PKCS1WithSHA512, PSSWithSHA512, ECDSAWithP521AndSHA512: return crypto.SHA512, nil + case Ed25519: + return directSigning, nil default: return 0, fmt.Errorf("tls: unsupported signature algorithm: %#04x", signatureAlgorithm) } @@ -308,11 +310,11 @@ func (h finishedHash) serverSum(masterSecret []byte) []byte { return out } -// hashForClientCertificate returns a digest over the handshake messages so far, -// suitable for signing by a TLS client certificate. +// hashForClientCertificate returns the handshake messages so far, pre-hashed if +// necessary, suitable for signing by a TLS client certificate. func (h finishedHash) hashForClientCertificate(sigType uint8, hashAlg crypto.Hash, masterSecret []byte) ([]byte, error) { - if (h.version == VersionSSL30 || h.version >= VersionTLS12) && h.buffer == nil { - panic("a handshake hash for a client-certificate was requested after discarding the handshake buffer") + if (h.version == VersionSSL30 || h.version >= VersionTLS12 || sigType == signatureEd25519) && h.buffer == nil { + panic("tls: handshake hash for a client certificate requested after discarding the handshake buffer") } if h.version == VersionSSL30 { @@ -326,6 +328,11 @@ func (h finishedHash) hashForClientCertificate(sigType uint8, hashAlg crypto.Has sha1Hash.Write(h.buffer) return finishedSum30(md5Hash, sha1Hash, masterSecret, nil), nil } + + if sigType == signatureEd25519 { + return h.buffer, nil + } + if h.version >= VersionTLS12 { hash := hashAlg.New() hash.Write(h.buffer) diff --git a/src/crypto/tls/testdata/Client-TLSv10-ClientCert-ECDSA-ECDSA b/src/crypto/tls/testdata/Client-TLSv10-ClientCert-ECDSA-ECDSA index 009e6585c6..9de3f1437b 100644 --- a/src/crypto/tls/testdata/Client-TLSv10-ClientCert-ECDSA-ECDSA +++ b/src/crypto/tls/testdata/Client-TLSv10-ClientCert-ECDSA-ECDSA @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 01 00 59 02 00 00 55 03 01 80 87 8d 86 82 |....Y...U.......| -00000010 b7 ab d8 7d 1c b5 86 ca 1c af 7e c0 07 6d 43 3e |...}......~..mC>| -00000020 10 59 aa 08 19 ae d0 b8 a1 f5 23 20 b6 3d 32 8b |.Y........# .=2.| -00000030 f9 52 1a 01 eb 69 35 7c be 2d a9 ca 55 21 f3 b3 |.R...i5|.-..U!..| -00000040 87 89 1e 05 cb cb 5d af 97 84 7e 07 c0 09 00 00 |......]...~.....| +00000000 16 03 01 00 59 02 00 00 55 03 01 94 1f ba 79 da |....Y...U.....y.| +00000010 4b 58 3e 08 2c c5 31 36 a4 7e 32 bf e1 a0 f7 71 |KX>.,.16.~2....q| +00000020 01 48 63 3c 5f cb 08 7a 25 80 c7 20 35 0c c0 8b |.Hc<_..z%.. 5...| +00000030 df 30 fc dc 3d f1 48 96 0d b6 ff a8 cd 35 29 57 |.0..=.H......5)W| +00000040 7d 3f c2 9d e2 32 b1 c2 4c 05 5e 3b c0 09 00 00 |}?...2..L.^;....| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 01 02 0e 0b 00 02 0a 00 02 07 00 02 04 30 82 02 |.............0..| 00000070 00 30 82 01 62 02 09 00 b8 bf 2d 47 a0 d2 eb f4 |.0..b.....-G....| @@ -55,18 +55,18 @@ 00000240 13 83 0d 94 06 bb d4 37 7a f6 ec 7a c9 86 2e dd |.......7z..z....| 00000250 d7 11 69 7f 85 7c 56 de fb 31 78 2b e4 c7 78 0d |..i..|V..1x+..x.| 00000260 ae cb be 9e 4e 36 24 31 7b 6a 0f 39 95 12 07 8f |....N6$1{j.9....| -00000270 2a 16 03 01 00 b5 0c 00 00 b1 03 00 1d 20 db cd |*............ ..| -00000280 1a f4 85 72 91 7c ee 8c 5c 02 c7 5b 09 c3 97 5b |...r.|..\..[...[| -00000290 5a 5c 2a af 84 5d 40 e9 2a e6 71 29 85 5d 00 8b |Z\*..]@.*.q).]..| -000002a0 30 81 88 02 42 00 ec 5a 5c b8 29 7d b6 58 15 62 |0...B..Z\.)}.X.b| -000002b0 b4 45 21 84 d6 d8 3a cc b8 c5 ff 79 66 07 57 28 |.E!...:....yf.W(| -000002c0 29 af 1d e3 cf db 1b 23 bb 5a 2f 23 8f 29 ed d4 |)......#.Z/#.)..| -000002d0 6c 3b ab a4 09 76 38 cf 63 bf 74 f9 5b 87 a2 e2 |l;...v8.c.t.[...| -000002e0 b7 1c 03 29 bd c6 1e 02 42 01 65 17 a6 34 04 01 |...)....B.e..4..| -000002f0 f4 f6 57 95 85 44 57 f5 34 02 aa fa 8b 63 57 69 |..W..DW.4....cWi| -00000300 6f e4 23 8a e6 c2 c4 4a b9 ac a9 44 3e c7 bc 47 |o.#....J...D>..G| -00000310 77 ae fe 22 14 5f bc 1c e2 20 ab 3f f6 dd c3 8f |w.."._... .?....| -00000320 ed dd 39 c3 47 01 28 66 33 e6 c6 16 03 01 00 0a |..9.G.(f3.......| +00000270 2a 16 03 01 00 b5 0c 00 00 b1 03 00 1d 20 1a 74 |*............ .t| +00000280 c4 96 9e 65 45 9a 0a 01 7c ed 7b 51 01 d8 ba 5b |...eE...|.{Q...[| +00000290 3e 2f b1 4b 36 69 e8 47 75 7e 27 be b3 2f 00 8b |>/.K6i.Gu~'../..| +000002a0 30 81 88 02 42 01 cb 20 d9 1e ae 05 6f 1f 37 ce |0...B.. ....o.7.| +000002b0 dc 38 20 2f 8f 52 9a 92 f6 80 d6 f9 97 99 a5 8b |.8 /.R..........| +000002c0 6e 73 0b 95 a4 4e 82 67 bd 1a 34 d9 5c 4e b4 d7 |ns...N.g..4.\N..| +000002d0 35 e6 45 81 14 23 9c 4e 5a 4c 1b 93 fd 7f 43 18 |5.E..#.NZL....C.| +000002e0 db 54 4b e0 d1 d3 fa 02 42 00 ab 8e 34 d5 c2 04 |.TK.....B...4...| +000002f0 d0 a4 44 b1 b3 25 a0 af c8 80 b3 88 ae da b3 c6 |..D..%..........| +00000300 4f 57 ae 31 54 c6 d9 ee 4e 21 56 01 cc b9 6a e9 |OW.1T...N!V...j.| +00000310 e9 7e 62 2a 64 0e a4 a0 79 1e a3 64 52 70 b1 a5 |.~b*d...y..dRp..| +00000320 19 2c a4 6d 4b 3b a3 63 ed 56 2f 16 03 01 00 0a |.,.mK;.c.V/.....| 00000330 0d 00 00 06 03 01 02 40 00 00 16 03 01 00 04 0e |.......@........| 00000340 00 00 00 |...| >>> Flow 3 (client to server) @@ -105,30 +105,30 @@ 00000200 e4 fa cc b1 8a ce e2 23 a0 87 f0 e1 67 51 eb 16 |.......#....gQ..| 00000210 03 01 00 25 10 00 00 21 20 2f e5 7d a3 47 cd 62 |...%...! /.}.G.b| 00000220 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 cf |C.(.._.).0......| -00000230 c2 ed 90 99 5f 58 cb 3b 74 16 03 01 00 91 0f 00 |...._X.;t.......| -00000240 00 8d 00 8b 30 81 88 02 42 01 b1 4c 5b 98 0d 02 |....0...B..L[...| -00000250 57 ed 5a 6a ba b2 25 b8 fe ab 0b c2 d2 f7 4f cf |W.Zj..%.......O.| -00000260 05 fd 66 85 85 10 da 84 b5 30 76 92 70 5f 73 5b |..f......0v.p_s[| -00000270 5e c1 ce 1d 3c 88 1d 50 b1 85 f8 66 07 a8 16 6a |^...<..P...f...j| -00000280 f0 d5 61 80 e2 8e 75 dc e2 e1 45 02 42 01 2f 2f |..a...u...E.B.//| -00000290 17 58 50 18 25 9e 99 9c 89 69 aa 55 69 26 6d 88 |.XP.%....i.Ui&m.| -000002a0 8d c9 76 8b d5 40 5e 9d 0b f5 9f 6f dd 93 94 50 |..v..@^....o...P| -000002b0 c0 6e c5 7a 4d 9e fb 64 61 31 88 be fa 0c 11 b8 |.n.zM..da1......| -000002c0 ab 7e 7c 3d bf 4e da de aa aa 19 af 1c 1f 35 14 |.~|=.N........5.| -000002d0 03 01 00 01 01 16 03 01 00 30 58 e2 f6 52 c6 6f |.........0X..R.o| -000002e0 8d ba 2d be 84 8d fd 19 b7 2a e6 c4 b9 47 0d 3b |..-......*...G.;| -000002f0 af a8 8d 91 90 9d ff a1 f0 65 af 8e fe 8a 9b 39 |.........e.....9| -00000300 1c b1 e4 0b e3 c5 9a bf 86 18 |..........| +00000230 c2 ed 90 99 5f 58 cb 3b 74 16 03 01 00 90 0f 00 |...._X.;t.......| +00000240 00 8c 00 8a 30 81 87 02 42 01 89 0f 43 df a8 34 |....0...B...C..4| +00000250 dd d7 c9 d4 2b 8d ec 29 77 7b 64 d0 0e 8c e8 2b |....+..)w{d....+| +00000260 e3 25 1c ed 0a 1b 05 e0 66 42 37 c0 e6 fa 3e 81 |.%......fB7...>.| +00000270 ec e1 06 99 f4 62 3f ea 55 79 ae 68 56 9e e3 3c |.....b?.Uy.hV..<| +00000280 83 ba 9b 1c 65 b9 eb a6 e7 f7 4e 02 41 61 2c 52 |....e.....N.Aa,R| +00000290 4c 48 92 b0 93 d8 31 58 c3 90 b0 e3 7d 55 94 fc |LH....1X....}U..| +000002a0 70 bf 18 42 51 73 d0 45 17 2e 0e 00 b0 12 76 0d |p..BQs.E......v.| +000002b0 35 78 cb fd 34 60 36 ff ed 19 ef 0a 1e 21 cc 4c |5x..4`6......!.L| +000002c0 9a ff a0 f7 cf 72 03 cd 00 bb 73 0d 1d e5 14 03 |.....r....s.....| +000002d0 01 00 01 01 16 03 01 00 30 69 76 1f 5b 81 5f 62 |........0iv.[._b| +000002e0 cf d5 d9 2c 19 71 80 d0 2a 97 8a 89 21 7f 6d 02 |...,.q..*...!.m.| +000002f0 b6 01 a4 ed fe 18 9f 34 ae 95 f6 a1 29 0b 9a 1c |.......4....)...| +00000300 04 b6 ce c7 d1 0c 5a b5 3f |......Z.?| >>> Flow 4 (server to client) -00000000 14 03 01 00 01 01 16 03 01 00 30 bc 72 19 6f bb |..........0.r.o.| -00000010 a0 79 dd 23 cf 44 0c be 48 9e ef 94 f3 47 fb 03 |.y.#.D..H....G..| -00000020 7d c6 af 0d 35 e2 4d 73 92 42 04 fa 5b 74 be 4d |}...5.Ms.B..[t.M| -00000030 0e 1b bf 3d 4a c9 d9 66 10 02 9f |...=J..f...| +00000000 14 03 01 00 01 01 16 03 01 00 30 7d 4b fc 73 20 |..........0}K.s | +00000010 e4 ac c4 39 15 79 e3 89 e1 24 ce 28 30 e5 f1 87 |...9.y...$.(0...| +00000020 cd c0 cc 39 a8 77 3b 06 a5 f9 b0 a1 3d 54 53 3b |...9.w;.....=TS;| +00000030 53 ec ac b2 ea 24 1b 2d 6a ef c3 |S....$.-j..| >>> Flow 5 (client to server) -00000000 17 03 01 00 20 96 d0 e8 8d 10 80 14 f0 61 fa a9 |.... ........a..| -00000010 61 f0 52 a9 22 b3 78 66 9d a4 79 6f 77 1e dc 2f |a.R.".xf..yow../| -00000020 0d f7 83 86 58 17 03 01 00 20 f9 91 e6 bf d9 c6 |....X.... ......| -00000030 34 5c 2c a2 94 55 55 74 83 03 58 5f 02 a8 00 da |4\,..UUt..X_....| -00000040 70 22 e8 1d 54 c8 43 17 4e b8 15 03 01 00 20 b1 |p"..T.C.N..... .| -00000050 6f a7 15 cc e5 50 e3 ab 70 14 ed 7f 8d fc 3a ff |o....P..p.....:.| -00000060 6a ea 4f bd b0 58 59 b7 38 36 2c b2 df 3c 4a |j.O..XY.86,..>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 01 00 59 02 00 00 55 03 01 a1 68 ff ed 89 |....Y...U...h...| -00000010 15 1b 21 de e0 23 e9 b0 ea 6c 1a 10 c7 f2 bb c1 |..!..#...l......| -00000020 c7 7a 76 6c df 17 45 2d 71 8d 6a 20 12 5b 28 d2 |.zvl..E-q.j .[(.| -00000030 94 ed d3 f5 6d 0b 40 2b 6f ec 7d 1f 8b 37 5c da |....m.@+o.}..7\.| -00000040 ae b3 47 fd e5 13 36 c0 2f 50 33 58 c0 13 00 00 |..G...6./P3X....| +00000000 16 03 01 00 59 02 00 00 55 03 01 97 0c 7e fc 7f |....Y...U....~..| +00000010 96 47 02 21 a7 19 45 a5 79 5c 5e fc c2 15 b3 fa |.G.!..E.y\^.....| +00000020 84 98 7d 67 65 c8 48 58 a1 5d 67 20 ad 2a c6 b3 |..}ge.HX.]g .*..| +00000030 a4 17 82 12 4a c5 97 af 12 6b 7d f6 9e 49 f1 38 |....J....k}..I.8| +00000040 d0 56 76 bc 81 23 ad 3a 3e 7f bc 2d c0 13 00 00 |.Vv..#.:>..-....| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 01 02 59 0b 00 02 55 00 02 52 00 02 4f 30 82 02 |..Y...U..R..O0..| 00000070 4b 30 82 01 b4 a0 03 02 01 02 02 09 00 e8 f0 9d |K0..............| @@ -60,17 +60,17 @@ 00000290 77 8d 0c 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d |w.......@.a.Lr+.| 000002a0 ae db 46 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db |..F..M...>...B..| 000002b0 fe 3d 13 60 84 5c 21 d3 3b e9 fa e7 16 03 01 00 |.=.`.\!.;.......| -000002c0 aa 0c 00 00 a6 03 00 1d 20 67 3f fc ee e2 3f 93 |........ g?...?.| -000002d0 c9 f9 f3 a2 41 97 86 04 ce f5 e5 6d ac 00 85 64 |....A......m...d| -000002e0 01 83 89 75 5f 27 7c 5f 41 00 80 30 d3 2d ce bc |...u_'|_A..0.-..| -000002f0 9a 45 ea 21 4c 28 9b 36 ba a9 d0 24 c9 1a 1b 3b |.E.!L(.6...$...;| -00000300 6c 2d c3 72 3d d6 09 b2 07 d2 f2 54 b0 02 29 d7 |l-.r=......T..).| -00000310 99 f6 5e ee 71 d9 6f 1d 0a 74 f3 ee 23 79 60 d3 |..^.q.o..t..#y`.| -00000320 fd 14 99 d9 12 bd f7 5b 73 08 24 f2 3e 1f f5 38 |.......[s.$.>..8| -00000330 6a c9 43 72 ea 97 78 b9 48 7b aa 05 b2 9a fc 6a |j.Cr..x.H{.....j| -00000340 1f 4d 01 6a 9f 05 a3 0e 84 1f 09 9d e3 1a 07 6b |.M.j...........k| -00000350 c6 82 5f cc 4a db 33 86 4a 03 50 21 d7 9e ca a1 |.._.J.3.J.P!....| -00000360 9a 4f 52 53 43 67 81 53 3b ed fd 16 03 01 00 0a |.ORSCg.S;.......| +000002c0 aa 0c 00 00 a6 03 00 1d 20 a4 24 f7 67 e3 da fa |........ .$.g...| +000002d0 10 33 95 b4 46 00 c0 3c cd 74 12 e4 a3 3b 01 70 |.3..F..<.t...;.p| +000002e0 fb 98 01 9a e9 2d d0 18 7b 00 80 ce c5 7b 4b 87 |.....-..{....{K.| +000002f0 cd bc 5d 63 09 7e d4 ce 09 53 7a 1b e5 b4 10 54 |..]c.~...Sz....T| +00000300 89 52 ac 82 9c 78 88 ed e8 1a 8c 3a 7a 2c 9a c5 |.R...x.....:z,..| +00000310 2b 97 1c 79 43 bd b1 ee 93 6f 4c 4d fc 3c 47 91 |+..yC....oLM.>> Flow 3 (client to server) @@ -110,29 +110,29 @@ 00000210 03 01 00 25 10 00 00 21 20 2f e5 7d a3 47 cd 62 |...%...! /.}.G.b| 00000220 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 cf |C.(.._.).0......| 00000230 c2 ed 90 99 5f 58 cb 3b 74 16 03 01 00 91 0f 00 |...._X.;t.......| -00000240 00 8d 00 8b 30 81 88 02 42 00 a6 8c ff 5a 40 01 |....0...B....Z@.| -00000250 bc 1c 28 f7 95 34 93 1b 78 58 34 04 d9 3e 8b 1e |..(..4..xX4..>..| -00000260 bb 2a 3f aa a8 a0 24 38 05 c2 38 4f 8b 55 08 17 |.*?...$8..8O.U..| -00000270 e4 68 9b 9a 6c f1 94 cc 61 52 90 8a 38 6e 76 f5 |.h..l...aR..8nv.| -00000280 0b 59 60 94 67 b5 78 83 93 eb cd 02 42 00 eb 7b |.Y`.g.x.....B..{| -00000290 a4 90 f5 8a 07 ab 80 49 41 48 6e 37 7b e2 f8 b8 |.......IAHn7{...| -000002a0 27 2d 06 2b cf 5a e9 eb 5c 36 a3 de 50 b9 40 b5 |'-.+.Z..\6..P.@.| -000002b0 14 0a 5c a4 ec 8f 2b 0c d4 ca a3 45 db 2a 3a 65 |..\...+....E.*:e| -000002c0 b4 8e c4 a6 d8 e9 f7 c3 48 34 f7 e7 65 b9 90 14 |........H4..e...| -000002d0 03 01 00 01 01 16 03 01 00 30 a3 4b 62 d6 25 40 |.........0.Kb.%@| -000002e0 84 6c 3f 2c d8 fa 69 93 49 4f 4e 75 06 09 0c 1a |.l?,..i.IONu....| -000002f0 01 b9 09 2e 9d 4d 0a f7 57 c0 8b d8 d0 44 5d f4 |.....M..W....D].| -00000300 c1 19 61 a7 a7 36 05 ad 96 92 |..a..6....| +00000240 00 8d 00 8b 30 81 88 02 42 01 71 f3 c4 3a 85 08 |....0...B.q..:..| +00000250 3b 18 26 48 5c 3f c3 8a 4f e9 d7 29 48 59 1a 35 |;.&H\?..O..)HY.5| +00000260 ee b3 0d 5e 29 03 1d 34 95 0e 40 73 85 13 14 d0 |...^)..4..@s....| +00000270 fb fb 96 77 21 fb d8 43 d7 e2 bf 2c 95 7b 75 5d |...w!..C...,.{u]| +00000280 59 15 81 71 d2 b6 82 96 d9 cc 78 02 42 01 d3 51 |Y..q......x.B..Q| +00000290 af 25 d0 f8 a4 e2 e7 8e 7e 46 56 53 8f d1 09 f6 |.%......~FVS....| +000002a0 76 88 5a 42 83 89 92 7b c7 e4 40 9c 3d 05 ac 43 |v.ZB...{..@.=..C| +000002b0 bf 6e 24 14 fe 36 f8 43 a6 90 8e a1 bd e2 92 84 |.n$..6.C........| +000002c0 60 e3 92 34 1c 7b 53 d5 57 6d 23 32 12 a8 23 14 |`..4.{S.Wm#2..#.| +000002d0 03 01 00 01 01 16 03 01 00 30 6f 06 c7 84 fa 7f |.........0o.....| +000002e0 c9 66 a9 6f 26 37 45 db 42 c8 8f 63 c3 5b 05 07 |.f.o&7E.B..c.[..| +000002f0 ef 07 41 be 71 60 35 d3 16 8f 92 f6 89 cb c7 dc |..A.q`5.........| +00000300 4e 45 61 99 31 45 66 40 36 86 |NEa.1Ef@6.| >>> Flow 4 (server to client) -00000000 14 03 01 00 01 01 16 03 01 00 30 0a 75 fa 5e 6e |..........0.u.^n| -00000010 50 48 e9 b1 67 e2 e1 04 c4 d9 27 63 7a a3 74 9e |PH..g.....'cz.t.| -00000020 0d 70 13 b9 1c b6 f5 e4 43 eb e1 20 86 08 d0 39 |.p......C.. ...9| -00000030 91 5e 72 f7 9b 30 25 db aa 8c 72 |.^r..0%...r| +00000000 14 03 01 00 01 01 16 03 01 00 30 d3 83 ac 08 7f |..........0.....| +00000010 a1 91 51 7c b7 99 6f 24 cd b1 cd 31 7b 12 20 47 |..Q|..o$...1{. G| +00000020 66 08 22 f6 28 ea 81 fe 92 b5 c8 40 60 bc 5b 19 |f.".(......@`.[.| +00000030 e0 2b d1 26 fd 4c 12 22 c5 13 9a |.+.&.L."...| >>> Flow 5 (client to server) -00000000 17 03 01 00 20 9a f8 b3 97 b0 90 7e c7 2c 15 74 |.... ......~.,.t| -00000010 03 c9 15 5d 95 fa 5c 37 ca 1e 8f 5a 3c af dc 9b |...]..\7...Z<...| -00000020 30 64 41 66 d0 17 03 01 00 20 1f 65 3e 77 1b 39 |0dAf..... .e>w.9| -00000030 c4 b9 de 44 67 a2 1d 73 a8 83 bf dd 4f 50 ad d2 |...Dg..s....OP..| -00000040 67 cf 45 9d 48 19 d8 67 fd 70 15 03 01 00 20 2d |g.E.H..g.p.... -| -00000050 6e d3 18 d1 55 6a 68 88 9d c0 3b a7 2e 93 fe e5 |n...Ujh...;.....| -00000060 f9 6c b9 b4 3e 28 f0 9a 3f f0 67 4f 32 ab 6b |.l..>(..?.gO2.k| +00000000 17 03 01 00 20 79 06 89 7e e0 17 9a e3 dc 4c ee |.... y..~.....L.| +00000010 70 63 13 bc 27 f5 43 fa f8 90 49 d9 89 43 7a 15 |pc..'.C...I..Cz.| +00000020 d4 e2 a8 e6 3e 17 03 01 00 20 ea 84 0e 21 62 d5 |....>.... ...!b.| +00000030 ee 26 5e fc 3e 0c 83 3b 91 01 c4 a7 8e 9b c4 1a |.&^.>..;........| +00000040 86 f8 a0 44 21 44 2f 31 cf a1 15 03 01 00 20 c6 |...D!D/1...... .| +00000050 11 f1 65 ea f3 39 d1 d2 ac 95 1f 81 36 ae db b1 |..e..9......6...| +00000060 88 a8 42 25 86 ec 1b c1 7e 12 60 a9 6b 7f 66 |..B%....~.`.k.f| diff --git a/src/crypto/tls/testdata/Client-TLSv10-ClientCert-Ed25519 b/src/crypto/tls/testdata/Client-TLSv10-ClientCert-Ed25519 new file mode 100644 index 0000000000..a14cef1356 --- /dev/null +++ b/src/crypto/tls/testdata/Client-TLSv10-ClientCert-Ed25519 @@ -0,0 +1,110 @@ +>>> Flow 1 (client to server) +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| +00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| +00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| +00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| +00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 32 cc a8 |.............2..| +00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| +00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| +00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| +00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| +000000a0 00 00 0d 00 1a 00 18 08 04 08 05 08 06 04 01 04 |................| +000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 08 07 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| +>>> Flow 2 (server to client) +00000000 16 03 01 00 59 02 00 00 55 03 01 55 df 11 fe c6 |....Y...U..U....| +00000010 aa d4 85 4b 87 c2 35 4c ac a9 c3 15 a3 7f 6d 7e |...K..5L......m~| +00000020 15 d1 47 b2 d2 09 16 4d 08 1b dd 20 49 d9 51 42 |..G....M... I.QB| +00000030 97 cf 36 b3 74 3e 05 0a e5 c9 97 ef 01 9c 24 34 |..6.t>........$4| +00000040 31 17 e1 8a 6a ce 37 60 02 47 46 7f c0 13 00 00 |1...j.7`.GF.....| +00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| +00000060 01 02 59 0b 00 02 55 00 02 52 00 02 4f 30 82 02 |..Y...U..R..O0..| +00000070 4b 30 82 01 b4 a0 03 02 01 02 02 09 00 e8 f0 9d |K0..............| +00000080 3f e2 5b ea a6 30 0d 06 09 2a 86 48 86 f7 0d 01 |?.[..0...*.H....| +00000090 01 0b 05 00 30 1f 31 0b 30 09 06 03 55 04 0a 13 |....0.1.0...U...| +000000a0 02 47 6f 31 10 30 0e 06 03 55 04 03 13 07 47 6f |.Go1.0...U....Go| +000000b0 20 52 6f 6f 74 30 1e 17 0d 31 36 30 31 30 31 30 | Root0...1601010| +000000c0 30 30 30 30 30 5a 17 0d 32 35 30 31 30 31 30 30 |00000Z..25010100| +000000d0 30 30 30 30 5a 30 1a 31 0b 30 09 06 03 55 04 0a |0000Z0.1.0...U..| +000000e0 13 02 47 6f 31 0b 30 09 06 03 55 04 03 13 02 47 |..Go1.0...U....G| +000000f0 6f 30 81 9f 30 0d 06 09 2a 86 48 86 f7 0d 01 01 |o0..0...*.H.....| +00000100 01 05 00 03 81 8d 00 30 81 89 02 81 81 00 db 46 |.......0.......F| +00000110 7d 93 2e 12 27 06 48 bc 06 28 21 ab 7e c4 b6 a2 |}...'.H..(!.~...| +00000120 5d fe 1e 52 45 88 7a 36 47 a5 08 0d 92 42 5b c2 |]..RE.z6G....B[.| +00000130 81 c0 be 97 79 98 40 fb 4f 6d 14 fd 2b 13 8b c2 |....y.@.Om..+...| +00000140 a5 2e 67 d8 d4 09 9e d6 22 38 b7 4a 0b 74 73 2b |..g....."8.J.ts+| +00000150 c2 34 f1 d1 93 e5 96 d9 74 7b f3 58 9f 6c 61 3c |.4......t{.X.la<| +00000160 c0 b0 41 d4 d9 2b 2b 24 23 77 5b 1c 3b bd 75 5d |..A..++$#w[.;.u]| +00000170 ce 20 54 cf a1 63 87 1d 1e 24 c4 f3 1d 1a 50 8b |. T..c...$....P.| +00000180 aa b6 14 43 ed 97 a7 75 62 f4 14 c8 52 d7 02 03 |...C...ub...R...| +00000190 01 00 01 a3 81 93 30 81 90 30 0e 06 03 55 1d 0f |......0..0...U..| +000001a0 01 01 ff 04 04 03 02 05 a0 30 1d 06 03 55 1d 25 |.........0...U.%| +000001b0 04 16 30 14 06 08 2b 06 01 05 05 07 03 01 06 08 |..0...+.........| +000001c0 2b 06 01 05 05 07 03 02 30 0c 06 03 55 1d 13 01 |+.......0...U...| +000001d0 01 ff 04 02 30 00 30 19 06 03 55 1d 0e 04 12 04 |....0.0...U.....| +000001e0 10 9f 91 16 1f 43 43 3e 49 a6 de 6d b6 80 d7 9f |.....CC>I..m....| +000001f0 60 30 1b 06 03 55 1d 23 04 14 30 12 80 10 48 13 |`0...U.#..0...H.| +00000200 49 4d 13 7e 16 31 bb a3 01 d5 ac ab 6e 7b 30 19 |IM.~.1......n{0.| +00000210 06 03 55 1d 11 04 12 30 10 82 0e 65 78 61 6d 70 |..U....0...examp| +00000220 6c 65 2e 67 6f 6c 61 6e 67 30 0d 06 09 2a 86 48 |le.golang0...*.H| +00000230 86 f7 0d 01 01 0b 05 00 03 81 81 00 9d 30 cc 40 |.............0.@| +00000240 2b 5b 50 a0 61 cb ba e5 53 58 e1 ed 83 28 a9 58 |+[P.a...SX...(.X| +00000250 1a a9 38 a4 95 a1 ac 31 5a 1a 84 66 3d 43 d3 2d |..8....1Z..f=C.-| +00000260 d9 0b f2 97 df d3 20 64 38 92 24 3a 00 bc cf 9c |...... d8.$:....| +00000270 7d b7 40 20 01 5f aa d3 16 61 09 a2 76 fd 13 c3 |}.@ ._...a..v...| +00000280 cc e1 0c 5c ee b1 87 82 f1 6c 04 ed 73 bb b3 43 |...\.....l..s..C| +00000290 77 8d 0c 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d |w.......@.a.Lr+.| +000002a0 ae db 46 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db |..F..M...>...B..| +000002b0 fe 3d 13 60 84 5c 21 d3 3b e9 fa e7 16 03 01 00 |.=.`.\!.;.......| +000002c0 aa 0c 00 00 a6 03 00 1d 20 17 27 58 d2 5f 59 a3 |........ .'X._Y.| +000002d0 62 62 d4 97 4a 49 c4 ff ec dc f7 d3 c9 ea f3 00 |bb..JI..........| +000002e0 61 1b d3 73 38 9e af 7d 17 00 80 59 7a 4e 55 97 |a..s8..}...YzNU.| +000002f0 5a 81 0e 2e 85 0b c2 61 f0 79 72 0e d1 d5 3b bf |Z......a.yr...;.| +00000300 6a 77 03 0a 9a 51 42 f5 98 2f 09 d5 7b 17 76 b8 |jw...QB../..{.v.| +00000310 2c a7 95 ee 61 65 d7 37 b3 1b 16 3c 48 7e 9d ed |,...ae.7...>> Flow 3 (client to server) +00000000 16 03 01 01 3c 0b 00 01 38 00 01 35 00 01 32 30 |....<...8..5..20| +00000010 82 01 2e 30 81 e1 a0 03 02 01 02 02 10 17 d1 81 |...0............| +00000020 93 be 2a 8c 21 20 10 25 15 e8 34 23 4f 30 05 06 |..*.! .%..4#O0..| +00000030 03 2b 65 70 30 12 31 10 30 0e 06 03 55 04 0a 13 |.+ep0.1.0...U...| +00000040 07 41 63 6d 65 20 43 6f 30 1e 17 0d 31 39 30 35 |.Acme Co0...1905| +00000050 31 36 32 31 35 34 32 36 5a 17 0d 32 30 30 35 31 |16215426Z..20051| +00000060 35 32 31 35 34 32 36 5a 30 12 31 10 30 0e 06 03 |5215426Z0.1.0...| +00000070 55 04 0a 13 07 41 63 6d 65 20 43 6f 30 2a 30 05 |U....Acme Co0*0.| +00000080 06 03 2b 65 70 03 21 00 0b e0 b5 60 b5 e2 79 30 |..+ep.!....`..y0| +00000090 3d be e3 1e e0 50 b1 04 c8 6d c7 78 6c 69 2f c5 |=....P...m.xli/.| +000000a0 14 ad 9a 63 6f 79 12 91 a3 4d 30 4b 30 0e 06 03 |...coy...M0K0...| +000000b0 55 1d 0f 01 01 ff 04 04 03 02 05 a0 30 13 06 03 |U...........0...| +000000c0 55 1d 25 04 0c 30 0a 06 08 2b 06 01 05 05 07 03 |U.%..0...+......| +000000d0 02 30 0c 06 03 55 1d 13 01 01 ff 04 02 30 00 30 |.0...U.......0.0| +000000e0 16 06 03 55 1d 11 04 0f 30 0d 82 0b 65 78 61 6d |...U....0...exam| +000000f0 70 6c 65 2e 63 6f 6d 30 05 06 03 2b 65 70 03 41 |ple.com0...+ep.A| +00000100 00 fc 19 17 2a 94 a5 31 fa 29 c8 2e 7f 5b a0 5d |....*..1.)...[.]| +00000110 8a 4e 34 40 39 d6 b3 10 dc 19 fe a0 22 71 b3 f5 |.N4@9......."q..| +00000120 8f a1 58 0d cd f4 f1 85 24 bf e6 3d 14 df df ed |..X.....$..=....| +00000130 0e e1 17 d8 11 a2 60 d0 8a 37 23 2a c2 46 aa 3a |......`..7#*.F.:| +00000140 08 16 03 01 00 25 10 00 00 21 20 2f e5 7d a3 47 |.....%...! /.}.G| +00000150 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af |.bC.(.._.).0....| +00000160 c4 cf c2 ed 90 99 5f 58 cb 3b 74 16 03 01 00 46 |......_X.;t....F| +00000170 0f 00 00 42 00 40 14 6a d7 c1 9c 3d 81 fa e9 da |...B.@.j...=....| +00000180 96 5c 3a 09 e2 fc 36 e2 30 39 e4 6e 0d ac aa 54 |.\:...6.09.n...T| +00000190 24 4d 8c f0 35 14 b0 0b e9 5b 57 52 31 02 9f 6c |$M..5....[WR1..l| +000001a0 6f 6c d7 e9 b5 7f cb 30 fe b9 ba b9 7a 46 67 e3 |ol.....0....zFg.| +000001b0 a7 50 ca ce e4 04 14 03 01 00 01 01 16 03 01 00 |.P..............| +000001c0 30 8d 0a ca d1 5e 2c 7e 92 d0 69 f4 d9 e8 5d 0a |0....^,~..i...].| +000001d0 11 72 67 20 3e 80 64 29 e5 79 f5 33 ad 06 78 07 |.rg >.d).y.3..x.| +000001e0 4c 03 fc 2e 16 35 70 b1 72 e7 35 a9 cc 49 b8 29 |L....5p.r.5..I.)| +000001f0 30 |0| +>>> Flow 4 (server to client) +00000000 15 03 01 00 02 02 50 |......P| diff --git a/src/crypto/tls/testdata/Client-TLSv10-ClientCert-RSA-ECDSA b/src/crypto/tls/testdata/Client-TLSv10-ClientCert-RSA-ECDSA index 14ed93ca09..641ab1bd15 100644 --- a/src/crypto/tls/testdata/Client-TLSv10-ClientCert-RSA-ECDSA +++ b/src/crypto/tls/testdata/Client-TLSv10-ClientCert-RSA-ECDSA @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 01 00 59 02 00 00 55 03 01 04 4a 64 8e 4f |....Y...U...Jd.O| -00000010 f1 4e 06 19 e2 cb b8 92 93 7b f5 ec 1b 0e 30 8e |.N.......{....0.| -00000020 1f 89 6c a1 28 e7 87 7f 9e 9e 19 20 cf aa b7 1f |..l.(...... ....| -00000030 77 43 26 3e 15 5e 67 68 0d a6 a3 b1 25 e5 63 27 |wC&>.^gh....%.c'| -00000040 00 f9 59 23 e0 a3 1c d7 49 e9 dc b3 c0 09 00 00 |..Y#....I.......| +00000000 16 03 01 00 59 02 00 00 55 03 01 3b 4c b9 76 d2 |....Y...U..;L.v.| +00000010 c3 d1 ea 81 71 1a 10 e1 b1 69 5c 54 c2 df 17 0a |....q....i\T....| +00000020 de 41 cb d1 69 c3 9a da 90 fd 25 20 1e 02 11 16 |.A..i.....% ....| +00000030 ab 66 13 56 3d 94 00 a9 80 7c d8 57 12 99 1c 5f |.f.V=....|.W..._| +00000040 7a b2 02 8c 23 f3 76 b8 59 5e 16 dd c0 09 00 00 |z...#.v.Y^......| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 01 02 0e 0b 00 02 0a 00 02 07 00 02 04 30 82 02 |.............0..| 00000070 00 30 82 01 62 02 09 00 b8 bf 2d 47 a0 d2 eb f4 |.0..b.....-G....| @@ -55,20 +55,20 @@ 00000240 13 83 0d 94 06 bb d4 37 7a f6 ec 7a c9 86 2e dd |.......7z..z....| 00000250 d7 11 69 7f 85 7c 56 de fb 31 78 2b e4 c7 78 0d |..i..|V..1x+..x.| 00000260 ae cb be 9e 4e 36 24 31 7b 6a 0f 39 95 12 07 8f |....N6$1{j.9....| -00000270 2a 16 03 01 00 b4 0c 00 00 b0 03 00 1d 20 6c 3b |*............ l;| -00000280 3f 6b 18 21 57 c4 df bf 3d ac 92 ee bc 99 0b 2f |?k.!W...=....../| -00000290 d5 b3 f5 ff 5f 6c 6b 33 db a9 7c 02 f8 4c 00 8a |...._lk3..|..L..| -000002a0 30 81 87 02 42 00 8e 15 e5 bb dc f5 3d c6 10 d7 |0...B.......=...| -000002b0 67 54 3d 80 b5 6a 4d 69 f1 2c fe 99 bc 32 e1 ab |gT=..jMi.,...2..| -000002c0 42 c0 7d f2 5d e0 d6 22 95 58 25 5e 63 ba f0 9c |B.}.]..".X%^c...| -000002d0 9f 29 91 c9 a9 42 99 ab b0 4f ed a9 42 8e 1f 3a |.)...B...O..B..:| -000002e0 44 34 48 d9 5a dd 9b 02 41 44 21 e1 54 b5 a3 e7 |D4H.Z...AD!.T...| -000002f0 0a 57 45 52 ae 9d b5 fe 45 8a 3f 8b e7 50 e8 01 |.WER....E.?..P..| -00000300 8c 26 27 85 f4 ef 80 30 7e d6 d8 27 4f d5 5e 9d |.&'....0~..'O.^.| -00000310 7b 65 1a c6 5a ab 57 17 3f 6e 5c 66 aa cd 46 bc |{e..Z.W.?n\f..F.| -00000320 5d 32 db a5 48 f8 f8 35 11 8b 16 03 01 00 0a 0d |]2..H..5........| -00000330 00 00 06 03 01 02 40 00 00 16 03 01 00 04 0e 00 |......@.........| -00000340 00 00 |..| +00000270 2a 16 03 01 00 b5 0c 00 00 b1 03 00 1d 20 16 64 |*............ .d| +00000280 ca 24 70 6f 61 2f 9e 2d 43 0a 73 ac 67 f0 7a e5 |.$poa/.-C.s.g.z.| +00000290 c7 4e c4 1f ad 13 0d eb df ff 0d ff a3 27 00 8b |.N...........'..| +000002a0 30 81 88 02 42 01 1a 33 8b 88 78 ed 5c c1 56 0d |0...B..3..x.\.V.| +000002b0 75 51 69 a0 e7 45 6d ae b0 67 55 3f be 23 3e 92 |uQi..Em..gU?.#>.| +000002c0 fe 26 68 a2 30 84 2f b3 33 66 f6 dd 71 67 99 5e |.&h.0./.3f..qg.^| +000002d0 1c 6f bf 87 ed 33 a0 87 69 f6 35 65 8d cb 3a 7e |.o...3..i.5e..:~| +000002e0 95 a7 a4 40 54 cb 97 02 42 00 a3 fe 50 34 68 9f |...@T...B...P4h.| +000002f0 f2 43 98 23 e4 24 ad 36 e9 d3 e0 75 2c 11 46 6c |.C.#.$.6...u,.Fl| +00000300 48 33 c5 bc 2d 04 ff cc bb ec 38 ec f4 b3 55 31 |H3..-.....8...U1| +00000310 8a 6e 38 a5 6d a0 9c fc f6 98 75 48 c6 79 53 de |.n8.m.....uH.yS.| +00000320 dd 91 49 f0 b6 32 83 45 61 89 4e 16 03 01 00 0a |..I..2.Ea.N.....| +00000330 0d 00 00 06 03 01 02 40 00 00 16 03 01 00 04 0e |.......@........| +00000340 00 00 00 |...| >>> Flow 3 (client to server) 00000000 16 03 01 01 fd 0b 00 01 f9 00 01 f6 00 01 f3 30 |...............0| 00000010 82 01 ef 30 82 01 58 a0 03 02 01 02 02 10 5c 19 |...0..X.......\.| @@ -105,29 +105,29 @@ 00000200 e5 35 16 03 01 00 25 10 00 00 21 20 2f e5 7d a3 |.5....%...! /.}.| 00000210 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 |G.bC.(.._.).0...| 00000220 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 16 03 01 00 |......._X.;t....| -00000230 86 0f 00 00 82 00 80 9a 02 82 fb dd 68 e7 91 9f |............h...| -00000240 83 12 57 35 23 7c de 88 97 07 a3 b2 67 77 0f c1 |..W5#|......gw..| -00000250 bd 33 36 b3 ce fb f7 96 26 91 ab dc 96 26 64 fa |.36.....&....&d.| -00000260 34 66 31 2b fa 6d 52 60 3e fb a3 87 27 a7 7c ac |4f1+.mR`>...'.|.| -00000270 8c 87 ff c5 5e 6f 6f e1 db bf bc 58 3d b3 f6 89 |....^oo....X=...| -00000280 a0 8e 0b 9d 26 74 68 57 ca e9 c2 ab 79 7b 6a dd |....&thW....y{j.| -00000290 c7 89 ef 0d 62 aa 47 7b 67 18 f2 ad 00 98 56 45 |....b.G{g.....VE| -000002a0 12 ca de 6a d1 1a b5 a9 d2 53 ba 3b 90 a6 cf 69 |...j.....S.;...i| -000002b0 12 65 32 c2 95 46 01 14 03 01 00 01 01 16 03 01 |.e2..F..........| -000002c0 00 30 f7 2d b9 19 66 b2 2c 1b 96 08 bc 70 5b f5 |.0.-..f.,....p[.| -000002d0 6d 58 9e 51 fb b5 3c a6 4f 4a fc 52 1f 10 20 c4 |mX.Q..<.OJ.R.. .| -000002e0 3f d6 3c 0e 99 e3 1c b5 21 7f 0d fa 08 ec 17 27 |?.<.....!......'| -000002f0 75 9f |u.| +00000230 86 0f 00 00 82 00 80 90 68 a8 2f 6f 2b 70 e4 25 |........h./o+p.%| +00000240 7d fb b7 85 db 44 ec 1a ad 6d 84 fb 95 21 fa 24 |}....D...m...!.$| +00000250 7b 31 6a 97 4f 06 ee 87 22 c3 7c 81 70 ed e3 2a |{1j.O...".|.p..*| +00000260 d5 2c d1 4e 6d f0 12 52 2f 98 05 08 af 41 fa 87 |.,.Nm..R/....A..| +00000270 d1 62 98 6c 06 47 ec 7a 44 e0 7d ae 7a 7d ef 1b |.b.l.G.zD.}.z}..| +00000280 d5 2c fa 1b 70 a3 fb 9a 5d 8c 60 b4 44 6a e5 b8 |.,..p...].`.Dj..| +00000290 80 4c 29 fc f1 2d f1 11 46 81 c4 01 e4 11 2e 05 |.L)..-..F.......| +000002a0 cb 2b ca d9 4a 14 39 06 93 77 19 db 80 03 82 38 |.+..J.9..w.....8| +000002b0 e5 c1 0f 11 17 47 a7 14 03 01 00 01 01 16 03 01 |.....G..........| +000002c0 00 30 a6 68 28 50 75 6d eb f4 32 c8 a3 57 3f b1 |.0.h(Pum..2..W?.| +000002d0 37 84 8e 7e 1d 1d 93 7d 9f ec ff ac 1c 8d bf 30 |7..~...}.......0| +000002e0 d2 b0 0f 3f 02 c3 ef ac a3 62 94 26 1c 8f 7e 8d |...?.....b.&..~.| +000002f0 74 99 |t.| >>> Flow 4 (server to client) -00000000 14 03 01 00 01 01 16 03 01 00 30 db ac b4 71 dc |..........0...q.| -00000010 92 06 9c fe 87 11 69 eb a6 4e e9 50 29 6d 06 37 |......i..N.P)m.7| -00000020 02 73 b8 6d 7e ca 89 02 cf fa ad 0c 7c d0 90 cb |.s.m~.......|...| -00000030 af e5 50 68 fc 76 c5 09 a1 a1 d3 |..Ph.v.....| +00000000 14 03 01 00 01 01 16 03 01 00 30 80 3e 0d 50 13 |..........0.>.P.| +00000010 5f 00 ba 2e 47 46 5d 63 1b 72 a8 02 24 1c 3e 1f |_...GF]c.r..$.>.| +00000020 ed e2 3a 45 d7 7d 3a f2 33 97 c3 ab 13 9b 0e 4a |..:E.}:.3......J| +00000030 04 f0 08 48 ab d3 46 0b 40 7d 5c |...H..F.@}\| >>> Flow 5 (client to server) -00000000 17 03 01 00 20 cd b3 a4 99 da 5d 59 36 6f f8 26 |.... .....]Y6o.&| -00000010 2d b2 4a 47 a1 54 7f b0 b3 df 0d 52 cc 13 7a 8b |-.JG.T.....R..z.| -00000020 a3 6a 8b 1f ee 17 03 01 00 20 d6 ab 8a 3e b3 41 |.j....... ...>.A| -00000030 0a be 61 50 79 19 1a 45 03 c6 b9 b4 84 b2 18 46 |..aPy..E.......F| -00000040 86 1f c3 b7 78 77 fc 7f 4f 30 15 03 01 00 20 2d |....xw..O0.... -| -00000050 c0 f2 71 06 dc 19 9d 88 82 b9 3a 6b be a4 77 98 |..q.......:k..w.| -00000060 87 32 46 54 27 e4 17 47 8a 83 9c 5a 45 6e 6b |.2FT'..G...ZEnk| +00000000 17 03 01 00 20 f7 32 e7 36 4f 77 2f 4a 05 fd 27 |.... .2.6Ow/J..'| +00000010 19 57 52 f7 8a 0c 7f fb 14 78 b2 06 bf ca 86 73 |.WR......x.....s| +00000020 32 13 33 04 91 17 03 01 00 20 7e e4 fe c5 6d f7 |2.3...... ~...m.| +00000030 d4 69 30 57 89 a0 76 70 40 a7 b5 17 74 2f 5d 16 |.i0W..vp@...t/].| +00000040 c1 19 30 73 f8 37 c4 10 5b b7 15 03 01 00 20 08 |..0s.7..[..... .| +00000050 41 5e 0b 9f 36 23 bd 9a 09 f7 58 9d a3 d7 26 3a |A^..6#....X...&:| +00000060 f4 5e 6b bf 9c d4 6f 0c d3 9e cd de cb 95 57 |.^k...o.......W| diff --git a/src/crypto/tls/testdata/Client-TLSv10-ClientCert-RSA-RSA b/src/crypto/tls/testdata/Client-TLSv10-ClientCert-RSA-RSA index c5b33c01fe..c46a9670e8 100644 --- a/src/crypto/tls/testdata/Client-TLSv10-ClientCert-RSA-RSA +++ b/src/crypto/tls/testdata/Client-TLSv10-ClientCert-RSA-RSA @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 01 00 59 02 00 00 55 03 01 6b 8a f7 68 78 |....Y...U..k..hx| -00000010 f1 ea ad 9b 20 40 42 52 eb fa 55 fb 37 a7 21 22 |.... @BR..U.7.!"| -00000020 71 0d f7 4d 46 bf 38 df 6e 00 e0 20 17 73 28 32 |q..MF.8.n.. .s(2| -00000030 30 3f f4 01 df 70 98 ce 33 d0 c3 8c 0a fd 0a ba |0?...p..3.......| -00000040 6b 56 d7 f9 16 a2 24 0d 07 b1 32 47 c0 13 00 00 |kV....$...2G....| +00000000 16 03 01 00 59 02 00 00 55 03 01 97 fe 7f 92 37 |....Y...U......7| +00000010 67 99 e0 d8 62 a9 31 80 bd 1f 31 8e 7d 0b 08 0a |g...b.1...1.}...| +00000020 de a5 82 a2 f2 d0 c1 35 66 34 6e 20 39 46 b1 b0 |.......5f4n 9F..| +00000030 6e 2d 0e fe 8c 48 ea ab 1c c4 49 ee f4 21 cf cb |n-...H....I..!..| +00000040 2a 20 57 78 18 99 a1 b9 7f 88 4f 64 c0 13 00 00 |* Wx......Od....| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 01 02 59 0b 00 02 55 00 02 52 00 02 4f 30 82 02 |..Y...U..R..O0..| 00000070 4b 30 82 01 b4 a0 03 02 01 02 02 09 00 e8 f0 9d |K0..............| @@ -60,17 +60,17 @@ 00000290 77 8d 0c 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d |w.......@.a.Lr+.| 000002a0 ae db 46 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db |..F..M...>...B..| 000002b0 fe 3d 13 60 84 5c 21 d3 3b e9 fa e7 16 03 01 00 |.=.`.\!.;.......| -000002c0 aa 0c 00 00 a6 03 00 1d 20 b1 de e2 91 3f 1f be |........ ....?..| -000002d0 0e 21 49 44 db d1 d3 a7 89 db 61 56 97 bf 4c 73 |.!ID......aV..Ls| -000002e0 7b d3 da 81 a5 cc 0a e3 13 00 80 66 fd 15 8d 8a |{..........f....| -000002f0 a2 f9 8d b9 d9 cb a5 6b 45 7c 11 05 24 6d de e5 |.......kE|..$m..| -00000300 8f 3e 42 ba 3e bd 5a b8 f7 51 c0 b9 55 06 db d7 |.>B.>.Z..Q..U...| -00000310 2d 78 d2 5d 47 2d 52 c9 7b 59 20 73 1a 1d 26 c4 |-x.]G-R.{Y s..&.| -00000320 84 3d 5b 57 5f 1a fd 52 8c 40 87 be 58 58 73 d2 |.=[W_..R.@..XXs.| -00000330 4b 84 9a 6c 96 c0 36 82 95 13 f9 12 74 c3 3b dd |K..l..6.....t.;.| -00000340 27 11 c3 66 fa de 28 b4 c0 d9 6e 65 e0 8a 5e b6 |'..f..(...ne..^.| -00000350 3a a8 52 db 62 89 2b 1d d0 be fb b7 6e 03 bd f7 |:.R.b.+.....n...| -00000360 e3 a5 df c2 b3 5a 16 09 d8 1e df 16 03 01 00 0a |.....Z..........| +000002c0 aa 0c 00 00 a6 03 00 1d 20 07 80 79 40 4b b1 0e |........ ..y@K..| +000002d0 05 ce e4 ca 9d f5 d7 ad a6 98 f2 40 f9 b9 66 a8 |...........@..f.| +000002e0 04 6e ae b5 da 99 67 09 69 00 80 01 4a f2 c1 c9 |.n....g.i...J...| +000002f0 2f 46 4f b8 9e 8b 2c c4 a1 32 44 3c dc 2c 5e b9 |/FO...,..2D<.,^.| +00000300 76 5f 41 20 23 1b 82 dd ec 37 b4 24 68 6d a7 39 |v_A #....7.$hm.9| +00000310 4f f2 e5 97 09 75 64 2a 64 16 b8 99 04 8a 74 77 |O....ud*d.....tw| +00000320 19 bb 12 5f 27 f6 41 09 f7 2e 1c 33 80 3b 01 57 |..._'.A....3.;.W| +00000330 5c f9 20 6e 0c 48 76 59 e1 8b 1f bb 2a 33 1a 28 |\. n.HvY....*3.(| +00000340 a0 5a 05 44 94 eb 35 62 5e ae 7f e4 01 76 b6 b4 |.Z.D..5b^....v..| +00000350 64 91 bf 25 09 ff 88 8a af 73 00 d0 7e ea 0f ca |d..%.....s..~...| +00000360 4a 2b d4 6f 02 26 98 28 5a ed 11 16 03 01 00 0a |J+.o.&.(Z.......| 00000370 0d 00 00 06 03 01 02 40 00 00 16 03 01 00 04 0e |.......@........| 00000380 00 00 00 |...| >>> Flow 3 (client to server) @@ -109,29 +109,29 @@ 00000200 e5 35 16 03 01 00 25 10 00 00 21 20 2f e5 7d a3 |.5....%...! /.}.| 00000210 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 |G.bC.(.._.).0...| 00000220 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 16 03 01 00 |......._X.;t....| -00000230 86 0f 00 00 82 00 80 9c f0 ab 90 83 2a 47 ba 5c |............*G.\| -00000240 37 a4 19 b8 62 b1 01 74 35 4d 1a 62 5e 3f 0b 54 |7...b..t5M.b^?.T| -00000250 5a 6f b7 b5 99 4b b4 84 68 90 46 2b 95 e6 10 77 |Zo...K..h.F+...w| -00000260 bf 68 81 b1 96 11 5c e9 93 a4 d5 78 42 c0 c4 92 |.h....\....xB...| -00000270 cf 4e ce 25 e7 da 7d d9 2c 4d ab 71 2d b5 a7 1c |.N.%..}.,M.q-...| -00000280 5f b5 a3 32 f6 3e 38 79 17 36 45 94 8a e3 f8 1e |_..2.>8y.6E.....| -00000290 9e 95 23 48 0f f6 aa 1b 00 d2 45 85 c7 95 b2 d1 |..#H......E.....| -000002a0 c1 81 e8 31 34 45 bd 28 32 26 a8 d1 23 90 cb 40 |...14E.(2&..#..@| -000002b0 1c ed db eb c3 ec b6 14 03 01 00 01 01 16 03 01 |................| -000002c0 00 30 16 97 3e a2 2a 11 d5 3f 29 f6 5b b8 7a d5 |.0..>.*..?).[.z.| -000002d0 83 24 51 f0 0c c3 79 18 9c 58 b6 f4 2f 70 9f c0 |.$Q...y..X../p..| -000002e0 52 be a0 f0 eb d7 0e de 42 36 14 39 84 fc 84 ed |R.......B6.9....| -000002f0 77 0c |w.| +00000230 86 0f 00 00 82 00 80 81 aa 68 1f a9 a4 de f1 4d |.........h.....M| +00000240 30 9a fe e6 a5 f6 f6 18 b6 3e d2 c7 f1 e6 77 e3 |0........>....w.| +00000250 6a cd 61 01 81 3a 02 31 a5 aa d6 db b6 02 9d 4b |j.a..:.1.......K| +00000260 f5 78 50 c3 95 fe 43 88 33 3a 95 32 bc e8 02 1a |.xP...C.3:.2....| +00000270 e6 f4 d5 54 b9 fc e0 4a 4e f0 92 21 35 4b de c8 |...T...JN..!5K..| +00000280 a4 b0 01 c3 ca 3a 87 ed cb 21 1c ce c2 14 7b 8d |.....:...!....{.| +00000290 90 68 b9 21 49 13 dd cd e7 68 83 41 7c 84 6a 75 |.h.!I....h.A|.ju| +000002a0 76 ee 19 8b fa d5 a6 57 3d a7 f1 f1 6f 11 ca 77 |v......W=...o..w| +000002b0 95 0e b5 c7 3d 99 d4 14 03 01 00 01 01 16 03 01 |....=...........| +000002c0 00 30 5e be 40 82 f8 db 05 20 23 45 a4 42 48 e8 |.0^.@.... #E.BH.| +000002d0 06 69 eb 4c ef 79 53 52 4a 5a 3a ba cc d6 99 59 |.i.L.ySRJZ:....Y| +000002e0 4d c2 b0 34 0f 14 68 03 93 8b a4 95 7e cf 26 f8 |M..4..h.....~.&.| +000002f0 5c 8a |\.| >>> Flow 4 (server to client) -00000000 14 03 01 00 01 01 16 03 01 00 30 8a 97 aa 38 29 |..........0...8)| -00000010 a4 7a 25 ae d5 5f 66 17 cb 8e de d3 ac 0f b3 9d |.z%.._f.........| -00000020 ba 61 54 31 cb c8 fc 1f 4c f5 76 b0 7e 7e 74 04 |.aT1....L.v.~~t.| -00000030 8a 2e 45 a8 5f c7 43 d7 d5 f4 7d |..E._.C...}| +00000000 14 03 01 00 01 01 16 03 01 00 30 ef 9b 5c da 0a |..........0..\..| +00000010 2e c4 79 fa ea 8a 9c 78 4a 1f 08 77 56 73 6e fa |..y....xJ..wVsn.| +00000020 3a 5b 3c cd cd e9 0c a8 bb 59 9e 22 ab 67 2c 03 |:[<......Y.".g,.| +00000030 de ad 7c e4 cb 85 d7 8f c1 1c e3 |..|........| >>> Flow 5 (client to server) -00000000 17 03 01 00 20 22 4d 00 3f 2a 41 f0 53 06 93 fe |.... "M.?*A.S...| -00000010 aa 79 9b 69 bb d5 9b e5 e4 3b 48 ff e5 ce 7d db |.y.i.....;H...}.| -00000020 d8 e8 e6 e1 04 17 03 01 00 20 e8 01 13 cb f1 1f |......... ......| -00000030 17 68 33 6a ad 74 ae a7 c5 d9 00 ea 0b dc bb 9c |.h3j.t..........| -00000040 5c 5f 49 01 1e 53 74 30 58 e6 15 03 01 00 20 bb |\_I..St0X..... .| -00000050 30 7d c2 43 c3 0d b9 b5 3a 70 14 2c 4a 64 c9 fe |0}.C....:p.,Jd..| -00000060 20 25 a7 0a 01 11 3c 62 ca d6 28 80 ed cd 73 | %....-F;...| +00000020 70 99 ce d7 3c 17 03 01 00 20 69 27 e9 89 78 e6 |p...<.... i'..x.| +00000030 64 c0 a9 40 4f 0d 97 53 b2 2e 15 f3 2b 54 3b 77 |d..@O..S....+T;w| +00000040 f2 24 2c 94 dc b3 8b f0 c4 ce 15 03 01 00 20 1b |.$,........... .| +00000050 50 55 83 d8 6b b4 04 b2 f0 2d 1c 9c 0d fa de 58 |PU..k....-.....X| +00000060 cd 0a 1d 55 d6 36 f4 a4 fb cc 55 c5 b1 f3 d3 |...U.6....U....| diff --git a/src/crypto/tls/testdata/Client-TLSv10-ECDHE-ECDSA-AES b/src/crypto/tls/testdata/Client-TLSv10-ECDHE-ECDSA-AES index 248ab45def..7d6683c026 100644 --- a/src/crypto/tls/testdata/Client-TLSv10-ECDHE-ECDSA-AES +++ b/src/crypto/tls/testdata/Client-TLSv10-ECDHE-ECDSA-AES @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 01 00 59 02 00 00 55 03 01 ec 11 a0 ef 24 |....Y...U......$| -00000010 30 9c 83 8c 12 7c 61 a8 39 bd 40 41 22 5c 58 7f |0....|a.9.@A"\X.| -00000020 ca 0c b2 41 66 dc 87 2d f1 4c cc 20 f6 53 42 ce |...Af..-.L. .SB.| -00000030 56 81 58 c1 70 30 37 55 64 f1 28 e4 63 50 e0 f4 |V.X.p07Ud.(.cP..| -00000040 af 7d 01 af 5e 1a 50 19 64 e6 c2 76 c0 09 00 00 |.}..^.P.d..v....| +00000000 16 03 01 00 59 02 00 00 55 03 01 a7 ea 63 8c 7d |....Y...U....c.}| +00000010 54 70 04 d5 5e a2 2e 8b 75 4f 17 c8 a8 8c 3d bc |Tp..^...uO....=.| +00000020 08 aa 82 48 85 ed 1a ff 42 e1 54 20 3b 77 9d 32 |...H....B.T ;w.2| +00000030 4d 60 f2 81 f8 20 aa d2 b0 eb ea 7c 6a 39 52 20 |M`... .....|j9R | +00000040 94 4a 2a 88 05 8a fe 6c 50 5c 95 39 c0 09 00 00 |.J*....lP\.9....| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 01 02 0e 0b 00 02 0a 00 02 07 00 02 04 30 82 02 |.............0..| 00000070 00 30 82 01 62 02 09 00 b8 bf 2d 47 a0 d2 eb f4 |.0..b.....-G....| @@ -55,37 +55,37 @@ 00000240 13 83 0d 94 06 bb d4 37 7a f6 ec 7a c9 86 2e dd |.......7z..z....| 00000250 d7 11 69 7f 85 7c 56 de fb 31 78 2b e4 c7 78 0d |..i..|V..1x+..x.| 00000260 ae cb be 9e 4e 36 24 31 7b 6a 0f 39 95 12 07 8f |....N6$1{j.9....| -00000270 2a 16 03 01 00 b4 0c 00 00 b0 03 00 1d 20 cc 73 |*............ .s| -00000280 bf 89 65 cc cf f2 dc ed df d3 25 9b b2 16 f8 df |..e.......%.....| -00000290 97 56 f6 29 4e 08 17 19 f0 5a 2f 9d e3 57 00 8a |.V.)N....Z/..W..| -000002a0 30 81 87 02 42 01 91 4e d1 9a 13 69 44 6c 79 01 |0...B..N...iDly.| -000002b0 99 bb ac 65 c7 bd 0c c3 d1 4c ed 54 e3 7b ff ef |...e.....L.T.{..| -000002c0 c3 c2 44 ee ec 3b 8d b4 22 98 31 89 07 a7 b7 c9 |..D..;..".1.....| -000002d0 dc 6f 0c e0 78 a9 79 fc 74 20 0b 55 48 16 d7 d6 |.o..x.y.t .UH...| -000002e0 c8 c8 f8 81 67 e2 50 02 41 61 43 bd 1f e1 68 f1 |....g.P.AaC...h.| -000002f0 7c e1 bf 10 3f 58 16 74 5c 98 ee 4c 18 17 bf f0 ||...?X.t\..L....| -00000300 64 d9 9e be c6 d7 73 e8 20 89 b6 4e fa 93 7d 82 |d.....s. ..N..}.| -00000310 7c 78 96 d1 d9 d1 81 1b 66 5f 87 7b a1 20 40 3c ||x......f_.{. @<| -00000320 13 49 e1 73 8e e9 52 e4 f0 46 16 03 01 00 04 0e |.I.s..R..F......| -00000330 00 00 00 |...| +00000270 2a 16 03 01 00 b5 0c 00 00 b1 03 00 1d 20 3a 1f |*............ :.| +00000280 18 e9 f2 09 3e 79 4b a0 62 73 ef 87 0d ea 90 51 |....>yK.bs.....Q| +00000290 7f 9d d2 79 59 e4 11 7f 69 f7 a9 d7 78 7f 00 8b |...yY...i...x...| +000002a0 30 81 88 02 42 01 65 ac eb e6 b0 86 73 95 a4 27 |0...B.e.....s..'| +000002b0 e3 82 55 cf 88 16 80 c2 68 4b 39 77 2a b1 a9 d3 |..U.....hK9w*...| +000002c0 08 d5 ac 77 ce 5b 16 73 2c ad b5 57 2a 7a 75 34 |...w.[.s,..W*zu4| +000002d0 ec 99 23 bd df b2 27 36 5a 4b 40 e0 d3 b0 d2 31 |..#...'6ZK@....1| +000002e0 9b c7 9e 0a cb 5b 69 02 42 00 88 d7 5a 6a 9e 4c |.....[i.B...Zj.L| +000002f0 c5 7b 2c 8e 93 3b 75 27 b4 00 11 88 ba cf 99 8c |.{,..;u'........| +00000300 e5 f2 60 22 de f2 fe 86 a6 48 86 9c 40 31 08 75 |..`".....H..@1.u| +00000310 aa bc 5d 6d fa 2e a4 a9 a1 0d fc e1 d9 5a a1 60 |..]m.........Z.`| +00000320 93 b9 69 c7 c2 3e f5 a9 cb 31 41 16 03 01 00 04 |..i..>...1A.....| +00000330 0e 00 00 00 |....| >>> Flow 3 (client to server) 00000000 16 03 01 00 25 10 00 00 21 20 2f e5 7d a3 47 cd |....%...! /.}.G.| 00000010 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 |bC.(.._.).0.....| 00000020 cf c2 ed 90 99 5f 58 cb 3b 74 14 03 01 00 01 01 |....._X.;t......| -00000030 16 03 01 00 30 c6 44 20 88 b8 3b e4 a9 67 ca 54 |....0.D ..;..g.T| -00000040 f6 98 79 0e c5 8d d4 da 71 ce 40 51 59 e9 3f ee |..y.....q.@QY.?.| -00000050 a0 bb 7d 8a 84 4d 0a be 37 37 a8 cc fe bb 5d b6 |..}..M..77....].| -00000060 37 1b a8 a0 04 |7....| +00000030 16 03 01 00 30 30 25 15 82 a1 7f 11 32 13 52 17 |....00%.....2.R.| +00000040 b8 bd 5b b9 1e 69 88 0b b3 5f 12 40 e3 4b 03 cb |..[..i..._.@.K..| +00000050 cd 07 3c 43 4f ab f7 5d 2c 6a a3 02 a9 64 d0 77 |..>> Flow 4 (server to client) -00000000 14 03 01 00 01 01 16 03 01 00 30 d3 c0 74 ba 22 |..........0..t."| -00000010 e5 c6 8d c6 82 ac f4 63 90 28 73 a4 7a c3 43 ca |.......c.(s.z.C.| -00000020 0d 09 5a 84 70 d6 64 de 4b 06 9b fc b9 a9 3f d8 |..Z.p.d.K.....?.| -00000030 a0 02 67 2b 63 1e 61 91 b7 f9 a2 |..g+c.a....| +00000000 14 03 01 00 01 01 16 03 01 00 30 b5 3e 18 97 a1 |..........0.>...| +00000010 ca 2e 7f 5f b9 72 cb aa d4 f6 85 86 d3 27 40 13 |..._.r.......'@.| +00000020 e3 99 35 13 67 a8 9e 6e bb 63 15 97 96 42 e4 b3 |..5.g..n.c...B..| +00000030 fc 15 ee b7 d8 cb a2 64 3d 55 b8 |.......d=U.| >>> Flow 5 (client to server) -00000000 17 03 01 00 20 b2 55 db d3 41 5d 5c 9b b5 b8 c8 |.... .U..A]\....| -00000010 fd ab 30 74 08 59 22 e3 8c e0 43 d0 63 14 33 f8 |..0t.Y"...C.c.3.| -00000020 00 b6 3d 1e a0 17 03 01 00 20 fa 14 95 a5 e3 a0 |..=...... ......| -00000030 09 04 e1 49 35 c5 ef c1 b4 c5 7d b5 6a c7 13 db |...I5.....}.j...| -00000040 88 2f 4c 65 f8 c4 d5 2a a5 3a 15 03 01 00 20 05 |./Le...*.:.... .| -00000050 21 da 3d 87 62 0c a7 e6 eb aa f6 bd 2f 77 fd a4 |!.=.b......./w..| -00000060 cd 2a ac 22 73 7c 75 60 59 db 0f 8f df 86 73 |.*."s|u`Y.....s| +00000000 17 03 01 00 20 12 6c bf f2 39 2d e6 ad a8 38 d5 |.... .l..9-...8.| +00000010 1c ea 5b 79 e5 c7 4a 41 eb 58 70 f0 7d f7 60 e7 |..[y..JA.Xp.}.`.| +00000020 ee 77 98 75 f2 17 03 01 00 20 ac 5e 6d b0 81 0b |.w.u..... .^m...| +00000030 14 ca c2 70 53 d8 6d 55 49 63 da 8a 61 66 80 2d |...pS.mUIc..af.-| +00000040 e4 7c 2e 60 1f eb 3c f2 27 66 15 03 01 00 20 7a |.|.`..<.'f.... z| +00000050 2b 80 f8 00 0f 06 f5 6e fe b7 b7 6b 12 6c 8d 8e |+......n...k.l..| +00000060 c4 11 23 2b a2 bb 16 93 b4 e0 e0 fd 8c 42 db |..#+.........B.| diff --git a/src/crypto/tls/testdata/Client-TLSv10-ECDHE-RSA-AES b/src/crypto/tls/testdata/Client-TLSv10-ECDHE-RSA-AES index ccc71f606a..c0e842d155 100644 --- a/src/crypto/tls/testdata/Client-TLSv10-ECDHE-RSA-AES +++ b/src/crypto/tls/testdata/Client-TLSv10-ECDHE-RSA-AES @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 01 00 59 02 00 00 55 03 01 29 ae 9f 95 df |....Y...U..)....| -00000010 c0 c9 77 0a cc 61 5e f2 7b bb 50 28 95 30 cd 6f |..w..a^.{.P(.0.o| -00000020 7f 23 ca 62 ee 35 20 31 85 6b 77 20 16 82 4f 3a |.#.b.5 1.kw ..O:| -00000030 13 67 6e cc 71 5c f8 7a 4a b2 1f 02 a6 1a a4 2b |.gn.q\.zJ......+| -00000040 32 cd 5a 81 4b 82 a2 e3 7e 67 fa e7 c0 13 00 00 |2.Z.K...~g......| +00000000 16 03 01 00 59 02 00 00 55 03 01 16 f4 24 01 94 |....Y...U....$..| +00000010 68 d2 0f 15 4d d6 65 54 84 73 ab 2c b2 11 c5 64 |h...M.eT.s.,...d| +00000020 d8 93 66 50 cd b0 f0 ab 11 5c 72 20 b1 13 c1 f5 |..fP.....\r ....| +00000030 63 ed 70 0b 21 52 85 36 84 99 1d b6 bb dc d3 1c |c.p.!R.6........| +00000040 b3 76 13 d9 ef 47 c4 c0 18 57 23 3b c0 13 00 00 |.v...G...W#;....| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 01 02 59 0b 00 02 55 00 02 52 00 02 4f 30 82 02 |..Y...U..R..O0..| 00000070 4b 30 82 01 b4 a0 03 02 01 02 02 09 00 e8 f0 9d |K0..............| @@ -60,36 +60,36 @@ 00000290 77 8d 0c 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d |w.......@.a.Lr+.| 000002a0 ae db 46 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db |..F..M...>...B..| 000002b0 fe 3d 13 60 84 5c 21 d3 3b e9 fa e7 16 03 01 00 |.=.`.\!.;.......| -000002c0 aa 0c 00 00 a6 03 00 1d 20 89 38 c8 65 ea 1e 0f |........ .8.e...| -000002d0 6d 85 41 9e c4 f2 51 fd 0f f5 18 7d 60 1b c1 79 |m.A...Q....}`..y| -000002e0 55 dc eb 35 8b 0b 64 9c 1e 00 80 d0 9c 8a 95 1b |U..5..d.........| -000002f0 0b 44 37 fc b7 53 98 05 23 e4 83 40 38 f5 1b 68 |.D7..S..#..@8..h| -00000300 dd 4b eb 46 cf 26 7b 0b 37 89 b2 fd 13 2d 5d cd |.K.F.&{.7....-].| -00000310 c5 16 8f e5 ff c6 51 45 77 c5 59 02 71 2e d6 51 |......QEw.Y.q..Q| -00000320 2a 2b ce 93 52 d9 56 e4 37 25 04 2e 5d 95 3d ea |*+..R.V.7%..].=.| -00000330 40 5e 86 8a ae 51 5a 87 17 00 a6 a1 77 c1 ec 40 |@^...QZ.....w..@| -00000340 88 f9 a5 6f ec 73 b3 3e b6 15 14 a1 5f 9a 85 18 |...o.s.>...._...| -00000350 0b 19 82 2a d7 5a 37 4c 7b 4e 06 f7 86 24 15 25 |...*.Z7L{N...$.%| -00000360 58 95 a0 aa 56 f2 3c 36 18 5d 2f 16 03 01 00 04 |X...V.<6.]/.....| +000002c0 aa 0c 00 00 a6 03 00 1d 20 7e aa 30 94 7b fb 09 |........ ~.0.{..| +000002d0 b5 55 ce b3 e9 e0 5b 55 82 f4 e6 7c d0 e4 57 eb |.U....[U...|..W.| +000002e0 9b ec 82 48 d6 0e 2a bb 16 00 80 80 da c5 75 4f |...H..*.......uO| +000002f0 82 95 ee 47 28 af 09 08 d5 13 68 33 5d 91 dd 13 |...G(.....h3]...| +00000300 43 84 e9 54 d9 e7 39 7c 38 74 d5 92 8f 46 37 86 |C..T..9|8t...F7.| +00000310 44 68 ae c7 3a ad e1 33 5f cd d8 c6 a5 7c 5e 83 |Dh..:..3_....|^.| +00000320 44 ba b1 09 44 ec 42 7f 41 80 d6 b6 4c 6d ae 24 |D...D.B.A...Lm.$| +00000330 a9 3b 53 87 2f 3b 3a 1f da 87 2b 7d cf 9e ed a5 |.;S./;:...+}....| +00000340 04 54 ad c2 3c 7b 21 60 55 67 41 47 60 02 1e 62 |.T..<{!`UgAG`..b| +00000350 bb 9f ee 2c 6e 79 20 6e 65 e2 d0 ae 73 70 3e a7 |...,ny ne...sp>.| +00000360 3f 74 96 8e 2a 6e a6 7e 7a e0 e4 16 03 01 00 04 |?t..*n.~z.......| 00000370 0e 00 00 00 |....| >>> Flow 3 (client to server) 00000000 16 03 01 00 25 10 00 00 21 20 2f e5 7d a3 47 cd |....%...! /.}.G.| 00000010 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 |bC.(.._.).0.....| 00000020 cf c2 ed 90 99 5f 58 cb 3b 74 14 03 01 00 01 01 |....._X.;t......| -00000030 16 03 01 00 30 85 63 fe 57 56 dc ee 8c e6 66 e0 |....0.c.WV....f.| -00000040 5c 06 37 0c 15 76 a2 51 b8 95 d6 b8 64 a3 dc 70 |\.7..v.Q....d..p| -00000050 e7 2d 70 a8 73 ff fb 11 5a 96 bb 0e 23 b4 0a 5b |.-p.s...Z...#..[| -00000060 5e 6e c0 45 91 |^n.E.| +00000030 16 03 01 00 30 5a cb 36 c8 1c 43 a8 e1 88 db c9 |....0Z.6..C.....| +00000040 ae 78 b0 af 97 e4 c3 f6 25 51 8e 4d 57 94 ee ca |.x......%Q.MW...| +00000050 a4 8b 3f 4d 17 75 34 58 c3 fa a6 6f d4 e5 ae 3a |..?M.u4X...o...:| +00000060 cb 5a cb 11 ef |.Z...| >>> Flow 4 (server to client) -00000000 14 03 01 00 01 01 16 03 01 00 30 3b 02 9e ba 9e |..........0;....| -00000010 ae 5c 03 81 ba c4 13 9e a8 0f 29 3c a3 e8 bd 2e |.\........)<....| -00000020 af 2c c7 45 c2 05 b1 03 2c 4b 45 07 5d ad 09 c6 |.,.E....,KE.]...| -00000030 4d 9a fb 72 53 54 d7 a7 59 72 c9 |M..rST..Yr.| +00000000 14 03 01 00 01 01 16 03 01 00 30 96 92 50 6f f0 |..........0..Po.| +00000010 d1 ff 7c 39 fb 75 0c 8b c9 d7 29 7d 9d 32 4c 19 |..|9.u....)}.2L.| +00000020 2e 93 ea 11 87 07 fc 5a 7d 3c 30 e1 bd 64 7f 90 |.......Z}<0..d..| +00000030 fd 70 1d 50 eb ec f2 d6 de 09 61 |.p.P......a| >>> Flow 5 (client to server) -00000000 17 03 01 00 20 b4 b4 ad 09 c7 2f ce 80 0b ec 5b |.... ...../....[| -00000010 3f 59 b9 fb 8e 73 fe 23 d6 b0 39 c3 7f a9 61 12 |?Y...s.#..9...a.| -00000020 a7 0f 76 08 f1 17 03 01 00 20 84 c5 c4 22 c8 0c |..v...... ..."..| -00000030 9c c7 04 f9 85 49 fb 8f 0b 49 4e c3 6b b4 5c 62 |.....I...IN.k.\b| -00000040 2a 41 91 41 01 a2 17 43 7c 3d 15 03 01 00 20 e6 |*A.A...C|=.... .| -00000050 5d fa 04 a1 72 9a b3 34 0e 59 e3 0b 8f 3e 6d f7 |]...r..4.Y...>m.| -00000060 cd 85 4e d8 62 27 2c 21 c3 2e c6 64 d2 66 10 |..N.b',!...d.f.| +00000000 17 03 01 00 20 fd a4 ba f1 78 a9 a2 45 d3 d2 5a |.... ....x..E..Z| +00000010 1e 41 6b 89 8d bd a4 21 69 03 a1 7c b8 56 ff df |.Ak....!i..|.V..| +00000020 67 bc 85 5e 21 17 03 01 00 20 a7 6d 4c 11 d0 f3 |g..^!.... .mL...| +00000030 7d e2 f0 69 18 7c 42 71 78 e4 3b 71 7d 13 27 bb |}..i.|Bqx.;q}.'.| +00000040 79 fd d7 b2 d7 28 ca 92 83 f1 15 03 01 00 20 10 |y....(........ .| +00000050 b3 79 d4 1d 70 db b7 6c f2 15 05 3c 4d 65 ba ec |.y..p..l...>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 01 00 59 02 00 00 55 03 01 65 28 68 37 bf |....Y...U..e(h7.| -00000010 79 50 5d e6 20 07 ea 1c 6d 46 3b f9 95 a9 97 fa |yP]. ...mF;.....| -00000020 3c 37 87 45 e7 62 f2 e8 44 bb 02 20 e9 e0 63 8e |<7.E.b..D.. ..c.| -00000030 a1 0a cc a4 b3 e6 a9 3b b0 88 c7 af cd d5 73 0a |.......;......s.| -00000040 b4 30 14 cf d9 f5 e0 e8 e2 2e fa 47 c0 13 00 00 |.0.........G....| +00000000 16 03 01 00 59 02 00 00 55 03 01 7a a4 22 4f 19 |....Y...U..z."O.| +00000010 54 37 47 cb e5 dd b4 54 86 9e 9e d6 3f f1 bd ca |T7G....T....?...| +00000020 9a 3e 16 3c 7e 1a 29 22 0d c8 95 20 ac 85 42 c1 |.>.<~.)"... ..B.| +00000030 e7 f3 38 62 38 24 a8 24 d2 67 bd 0d 06 44 74 cf |..8b8$.$.g...Dt.| +00000040 3d a4 37 17 bc 8c 5d 41 9f 5a 74 69 c0 13 00 00 |=.7...]A.Zti....| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 01 02 59 0b 00 02 55 00 02 52 00 02 4f 30 82 02 |..Y...U..R..O0..| 00000070 4b 30 82 01 b4 a0 03 02 01 02 02 09 00 e8 f0 9d |K0..............| @@ -60,36 +60,36 @@ 00000290 77 8d 0c 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d |w.......@.a.Lr+.| 000002a0 ae db 46 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db |..F..M...>...B..| 000002b0 fe 3d 13 60 84 5c 21 d3 3b e9 fa e7 16 03 01 00 |.=.`.\!.;.......| -000002c0 aa 0c 00 00 a6 03 00 1d 20 33 83 7d 9b d5 61 57 |........ 3.}..aW| -000002d0 d1 d3 73 b8 f2 76 f8 31 fd 65 30 5a 6b ab c1 2f |..s..v.1.e0Zk../| -000002e0 0f 38 eb 54 bf 8b 09 a3 5a 00 80 34 a3 a6 86 46 |.8.T....Z..4...F| -000002f0 e5 4d d9 73 23 6a 19 fb f8 77 38 e1 00 74 00 c6 |.M.s#j...w8..t..| -00000300 b2 58 3c 14 a3 7e 57 6d 85 5c 37 4d 82 f1 70 2a |.X<..~Wm.\7M..p*| -00000310 55 c9 e8 89 d1 45 03 e1 ac 84 2e ed 36 1c d5 90 |U....E......6...| -00000320 cf 2d fe a6 9b f0 41 ee 0f 0a 3c 2b bd 18 da a3 |.-....A...<+....| -00000330 f3 21 07 a4 4b 52 1e 3c c4 cf 71 60 c7 05 39 75 |.!..KR.<..q`..9u| -00000340 16 20 f0 6c 18 e8 82 28 3e fc f0 a0 43 6e 77 df |. .l...(>...Cnw.| -00000350 2f fd a1 6a fe 37 9c 67 4e a1 2a 86 23 79 a9 1f |/..j.7.gN.*.#y..| -00000360 4c 9f 2f 04 0c be 27 58 97 57 1d 16 03 01 00 04 |L./...'X.W......| +000002c0 aa 0c 00 00 a6 03 00 1d 20 71 52 12 72 a7 56 0b |........ qR.r.V.| +000002d0 51 81 af 9f e1 95 43 44 54 0e 9e 3d cc 6f 3c 4c |Q.....CDT..=.o| +00000360 cb 59 5d 81 da 58 07 83 e7 af 25 16 03 01 00 04 |.Y]..X....%.....| 00000370 0e 00 00 00 |....| >>> Flow 3 (client to server) 00000000 16 03 01 00 25 10 00 00 21 20 2f e5 7d a3 47 cd |....%...! /.}.G.| 00000010 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 |bC.(.._.).0.....| 00000020 cf c2 ed 90 99 5f 58 cb 3b 74 14 03 01 00 01 01 |....._X.;t......| -00000030 16 03 01 00 30 2a f4 6d db f7 d5 12 3d 3a c0 46 |....0*.m....=:.F| -00000040 cb db 19 82 70 5c 4d 98 f4 42 27 85 eb 90 77 2a |....p\M..B'...w*| -00000050 d7 60 f0 0a 98 a5 da 59 85 ac 65 68 79 91 64 bd |.`.....Y..ehy.d.| -00000060 3a c6 d6 3f 6d |:..?m| +00000030 16 03 01 00 30 c3 26 49 92 5a 8c d0 da 48 ba 60 |....0.&I.Z...H.`| +00000040 29 c0 5c d5 44 04 11 7a 25 b5 d6 9f a4 cf fe bf |).\.D..z%.......| +00000050 33 a7 ba c2 96 2b 4d c1 fb dc 4c ba b8 2b 6f 20 |3....+M...L..+o | +00000060 2d 2a 02 ee 17 |-*...| >>> Flow 4 (server to client) -00000000 14 03 01 00 01 01 16 03 01 00 30 e2 d4 12 a3 5d |..........0....]| -00000010 dd 4b 72 a2 0b 5c 47 52 f1 2d cd 5f 13 c7 e8 a6 |.Kr..\GR.-._....| -00000020 7c 7c ba 94 f8 f3 54 73 3f c0 1f 90 e7 d3 78 78 |||....Ts?.....xx| -00000030 0b be f9 b2 d9 9a 39 83 45 f5 2c |......9.E.,| +00000000 14 03 01 00 01 01 16 03 01 00 30 f4 4e 0a ea 58 |..........0.N..X| +00000010 18 c6 9d 5f aa 5d f0 03 d4 63 0d e7 83 cb a8 18 |..._.]...c......| +00000020 06 fa b6 82 da df 16 89 5c 8b 5d 92 87 b1 42 da |........\.]...B.| +00000030 cd 2a ee dc 43 08 f1 0d 1f 18 5c |.*..C.....\| >>> Flow 5 (client to server) -00000000 17 03 01 00 20 a0 51 37 c8 db c1 c9 03 41 35 7e |.... .Q7.....A5~| -00000010 7c b4 c1 d2 b8 b4 63 e6 ac e7 6d 15 db ef 2d 4e ||.....c...m...-N| -00000020 70 c3 62 51 2c 17 03 01 00 20 55 0e e9 5a 5c 57 |p.bQ,.... U..Z\W| -00000030 fb d9 f9 1b ae c5 ad fc 13 e3 5e 7c 79 c6 f8 92 |..........^|y...| -00000040 9f b9 0e 94 e4 8b d4 cf 75 5c 15 03 01 00 20 bf |........u\.... .| -00000050 76 01 09 a9 b4 1e 54 cd 27 77 35 9e 5c 10 d5 dc |v.....T.'w5.\...| -00000060 3e 6c d6 1c 0b b0 97 b2 27 81 59 92 75 db 90 |>l......'.Y.u..| +00000000 17 03 01 00 20 e6 95 10 e0 98 07 9f 2b 42 06 b8 |.... .......+B..| +00000010 2a 6c 5d 4a 95 2a 2c 17 d5 cc 68 42 18 bd 72 58 |*l]J.*,...hB..rX| +00000020 c1 39 73 05 75 17 03 01 00 20 d4 ae 70 ee a0 ed |.9s.u.... ..p...| +00000030 3e dd f9 aa 93 03 ff f5 a4 f6 f3 0d e7 a6 59 a9 |>.............Y.| +00000040 40 b4 f6 ad a5 46 0b eb ee 0e 15 03 01 00 20 7c |@....F........ || +00000050 1a 29 f3 49 60 47 2e 52 ec 00 4a 62 44 30 93 5f |.).I`G.R..JbD0._| +00000060 df 73 2f 44 65 3f 77 c1 3d 04 32 c8 bb 86 ed |.s/De?w.=.2....| diff --git a/src/crypto/tls/testdata/Client-TLSv10-RSA-RC4 b/src/crypto/tls/testdata/Client-TLSv10-RSA-RC4 index 8a56408188..1fe13b9f97 100644 --- a/src/crypto/tls/testdata/Client-TLSv10-RSA-RC4 +++ b/src/crypto/tls/testdata/Client-TLSv10-RSA-RC4 @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 01 00 51 02 00 00 4d 03 01 d8 84 eb 07 33 |....Q...M......3| -00000010 03 0d 9d c7 6d 90 a7 1f 92 33 6e d0 fc 67 7b 4f |....m....3n..g{O| -00000020 c5 47 84 9c 6b 1d 6d 15 82 0d e2 20 78 95 16 fc |.G..k.m.... x...| -00000030 9a c6 a9 8d 29 d7 5b aa 24 6a 60 48 88 85 f7 b5 |....).[.$j`H....| -00000040 a0 72 f9 c0 ae 3d 01 ae f7 6c b1 3a 00 05 00 00 |.r...=...l.:....| +00000000 16 03 01 00 51 02 00 00 4d 03 01 5a 4f 78 41 d5 |....Q...M..ZOxA.| +00000010 86 2f d2 0a c6 05 bc c9 8e cc bd b2 39 ac a5 78 |./..........9..x| +00000020 e3 e5 31 b9 cb 01 af cb ca fc 88 20 c9 61 c6 91 |..1........ .a..| +00000030 b2 e5 70 df ca d0 41 a8 20 61 ab 08 f6 dc fe c0 |..p...A. a......| +00000040 cc ea 1e 80 89 02 6a 26 ea f0 c8 71 00 05 00 00 |......j&...q....| 00000050 05 ff 01 00 01 00 16 03 01 02 59 0b 00 02 55 00 |..........Y...U.| 00000060 02 52 00 02 4f 30 82 02 4b 30 82 01 b4 a0 03 02 |.R..O0..K0......| 00000070 01 02 02 09 00 e8 f0 9d 3f e2 5b ea a6 30 0d 06 |........?.[..0..| @@ -70,15 +70,15 @@ 00000060 c5 70 0f 08 83 48 e9 48 ef 6e 50 8b 05 7e e5 84 |.p...H.H.nP..~..| 00000070 25 fa 55 c7 ae 31 02 27 00 ef 3f 98 86 20 12 89 |%.U..1.'..?.. ..| 00000080 91 59 28 b4 f7 d7 af d2 69 61 35 14 03 01 00 01 |.Y(.....ia5.....| -00000090 01 16 03 01 00 24 c5 cc 6d 58 66 41 6e 24 3d 77 |.....$..mXfAn$=w| -000000a0 c6 dd b2 2e 39 6f 84 4c e8 32 0b 0b 22 8b 8f d3 |....9o.L.2.."...| -000000b0 e0 fc 8a 0e 88 8f 69 35 88 48 |......i5.H| +00000090 01 16 03 01 00 24 48 fd e6 fc 4a 94 33 82 22 ff |.....$H...J.3.".| +000000a0 af c3 44 98 d2 c6 4e 8a 39 43 dd 4b 2a 11 2b 4e |..D...N.9C.K*.+N| +000000b0 5b d9 a4 fc 6c 95 d7 69 05 f9 |[...l..i..| >>> Flow 4 (server to client) -00000000 14 03 01 00 01 01 16 03 01 00 24 9c 13 f1 b9 96 |..........$.....| -00000010 4a dc 99 34 51 3e 5f 00 e4 93 94 ee 91 25 9d f2 |J..4Q>_......%..| -00000020 5d f1 8c 7e df b7 4a 42 9c 51 cb c0 83 92 cb |]..~..JB.Q.....| +00000000 14 03 01 00 01 01 16 03 01 00 24 61 d2 68 5e 12 |..........$a.h^.| +00000010 91 6e 7f fe bf b7 42 58 e9 06 38 09 c1 16 34 e5 |.n....BX..8...4.| +00000020 a1 46 d6 cf 23 ca 48 c1 ed 76 f9 48 a1 9a 2a |.F..#.H..v.H..*| >>> Flow 5 (client to server) -00000000 17 03 01 00 1a 7f 06 af 43 39 09 7b c7 52 fd 67 |........C9.{.R.g| -00000010 cd 4f 44 8f b5 d4 60 db ed dd 7e 10 5e df 1c 15 |.OD...`...~.^...| -00000020 03 01 00 16 7b 2b ee 08 a0 6a c5 64 d8 6d dc 91 |....{+...j.d.m..| -00000030 e8 e0 44 11 23 a9 c8 4c 9d 5b |..D.#..L.[| +00000000 17 03 01 00 1a 3a e1 39 7c fe 25 50 dc 66 3f b6 |.....:.9|.%P.f?.| +00000010 6f fd 79 3b 12 83 af 89 b1 c5 f6 75 56 ad a1 15 |o.y;.......uV...| +00000020 03 01 00 16 07 d1 d3 7a 54 1c 71 0b c8 64 10 46 |.......zT.q..d.F| +00000030 30 d0 bf df 75 a6 dc 10 b1 d1 |0...u.....| diff --git a/src/crypto/tls/testdata/Client-TLSv11-ECDHE-ECDSA-AES b/src/crypto/tls/testdata/Client-TLSv11-ECDHE-ECDSA-AES index e7a6cf5e08..9d18cd62f7 100644 --- a/src/crypto/tls/testdata/Client-TLSv11-ECDHE-ECDSA-AES +++ b/src/crypto/tls/testdata/Client-TLSv11-ECDHE-ECDSA-AES @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 02 00 59 02 00 00 55 03 02 48 df b9 04 7d |....Y...U..H...}| -00000010 92 50 cb 8f f7 03 8d 34 76 f5 4f 3a a0 d3 8e cc |.P.....4v.O:....| -00000020 2a cd 5d 31 1a 55 d8 08 48 3f d9 20 0c 3b c2 e1 |*.]1.U..H?. .;..| -00000030 8f 94 68 6e e2 31 e4 f9 a6 3d bf 27 84 38 43 95 |..hn.1...=.'.8C.| -00000040 b6 d9 d3 4b fa 0a a2 c6 5a ae 83 bd c0 09 00 00 |...K....Z.......| +00000000 16 03 02 00 59 02 00 00 55 03 02 23 a8 e7 14 3f |....Y...U..#...?| +00000010 64 61 3c ee 80 a2 94 84 ab b8 66 76 30 84 06 78 |da<.......fv0..x| +00000020 96 ba a7 d3 1e 81 1b 16 64 76 88 20 3d 21 21 b3 |........dv. =!!.| +00000030 45 dd fe cb 5b d7 9a 86 39 ee 4f f8 60 eb 95 ea |E...[...9.O.`...| +00000040 ab 64 48 14 74 16 fd e9 47 07 66 60 c0 09 00 00 |.dH.t...G.f`....| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 02 02 0e 0b 00 02 0a 00 02 07 00 02 04 30 82 02 |.............0..| 00000070 00 30 82 01 62 02 09 00 b8 bf 2d 47 a0 d2 eb f4 |.0..b.....-G....| @@ -55,39 +55,39 @@ 00000240 13 83 0d 94 06 bb d4 37 7a f6 ec 7a c9 86 2e dd |.......7z..z....| 00000250 d7 11 69 7f 85 7c 56 de fb 31 78 2b e4 c7 78 0d |..i..|V..1x+..x.| 00000260 ae cb be 9e 4e 36 24 31 7b 6a 0f 39 95 12 07 8f |....N6$1{j.9....| -00000270 2a 16 03 02 00 b4 0c 00 00 b0 03 00 1d 20 1d 08 |*............ ..| -00000280 90 e5 39 31 40 7a 35 73 66 ff 41 e5 02 1f 8d a0 |..91@z5sf.A.....| -00000290 12 e6 14 c8 24 b0 cc 1e 0f ad 4b 1b f9 1a 00 8a |....$.....K.....| -000002a0 30 81 87 02 42 00 bf 9d 0c 38 71 af 56 52 d7 5d |0...B....8q.VR.]| -000002b0 35 98 50 d2 fa 31 29 83 6d 53 9d 2a ef ae 6a 5f |5.P..1).mS.*..j_| -000002c0 4d aa 8b 27 a4 73 51 e7 eb 2d c2 13 54 87 41 23 |M..'.sQ..-..T.A#| -000002d0 98 0b 47 96 ba 50 95 c2 58 ed 23 8e 0b 78 9f cf |..G..P..X.#..x..| -000002e0 6c 61 e6 e5 2b 0e b9 02 41 4b e0 f9 d6 03 cf b4 |la..+...AK......| -000002f0 fa 6f 08 51 b7 3a 2a 60 d0 76 72 c8 28 8e 6e 67 |.o.Q.:*`.vr.(.ng| -00000300 69 42 e3 e0 49 85 e9 cc 6a a0 c4 30 52 3b 3e 46 |iB..I...j..0R;>F| -00000310 a7 a7 2b 95 7f bf 25 6e 54 ea 3c 48 1e 1d 28 96 |..+...%nT.-a.ok.| +000002c0 1d 32 4b 88 93 9b 22 b0 3d 09 c3 93 9e 25 31 d6 |.2K...".=....%1.| +000002d0 5f 06 3a f0 4a 61 0b 06 03 5d 6c 0e b3 5e 48 5a |_.:.Ja...]l..^HZ| +000002e0 f0 5b 21 48 58 8f b2 02 41 1c 57 f1 51 04 d6 f8 |.[!HX...A.W.Q...| +000002f0 a2 51 e6 e6 3e e0 99 63 aa d2 1c 7b 92 be 44 ec |.Q..>..c...{..D.| +00000300 86 c3 31 fa e7 9b 98 1a 59 a5 93 3e a9 73 f0 ec |..1.....Y..>.s..| +00000310 03 22 37 19 db 78 30 27 ab bf 52 07 6c 3a 79 f5 |."7..x0'..R.l:y.| +00000320 ad 70 59 76 84 44 f0 47 e0 3d 16 03 02 00 04 0e |.pYv.D.G.=......| 00000330 00 00 00 |...| >>> Flow 3 (client to server) 00000000 16 03 02 00 25 10 00 00 21 20 2f e5 7d a3 47 cd |....%...! /.}.G.| 00000010 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 |bC.(.._.).0.....| 00000020 cf c2 ed 90 99 5f 58 cb 3b 74 14 03 02 00 01 01 |....._X.;t......| 00000030 16 03 02 00 40 00 00 00 00 00 00 00 00 00 00 00 |....@...........| -00000040 00 00 00 00 00 3b 28 96 4f 03 dd 04 4e a3 73 73 |.....;(.O...N.ss| -00000050 48 40 ef e3 4f 9d ab 39 3b db c6 0e fa 7f 0c 18 |H@..O..9;.......| -00000060 f5 94 cd 55 23 2f f5 5c 69 14 bb 0b 49 e3 98 d7 |...U#/.\i...I...| -00000070 c0 db 9e 3a 8b |...:.| +00000040 00 00 00 00 00 ef 0f 92 ac 11 fe 97 1a 46 69 e4 |.............Fi.| +00000050 b3 26 8d d7 92 46 02 25 5b 2e 86 3e 96 3d 64 ed |.&...F.%[..>.=d.| +00000060 37 92 dd ae a5 a6 9f 03 f0 c2 42 78 9f b9 78 ac |7.........Bx..x.| +00000070 97 ab 82 25 e2 |...%.| >>> Flow 4 (server to client) -00000000 14 03 02 00 01 01 16 03 02 00 40 76 98 c8 7d 95 |..........@v..}.| -00000010 ac 40 73 36 c1 49 ae 20 f4 a0 ef 70 59 bf d3 5e |.@s6.I. ...pY..^| -00000020 71 ec 2e f8 c5 ea 9d cc 4d 06 44 e3 aa 46 cd c3 |q.......M.D..F..| -00000030 c9 1b a0 5a 9a 76 ce 3b b5 16 85 33 cf ba 46 08 |...Z.v.;...3..F.| -00000040 b8 c0 a7 da 2a 4d 23 b9 02 cc 3f |....*M#...?| +00000000 14 03 02 00 01 01 16 03 02 00 40 df a9 23 37 74 |..........@..#7t| +00000010 47 d8 98 87 53 b4 0a 4d b0 a5 fb cb d6 37 c8 7c |G...S..M.....7.|| +00000020 61 95 81 ef b3 63 78 2b 53 c2 86 fc 39 df c4 5f |a....cx+S...9.._| +00000030 e4 4b af 1d fe bc 4c fe 1b 6a 28 c3 46 6f 24 94 |.K....L..j(.Fo$.| +00000040 a8 bf ef ce e8 e8 ad 2c d9 10 32 |.......,..2| >>> Flow 5 (client to server) 00000000 17 03 02 00 30 00 00 00 00 00 00 00 00 00 00 00 |....0...........| -00000010 00 00 00 00 00 03 dd b7 03 45 4d 4c 0a 7a e7 36 |.........EML.z.6| -00000020 a0 93 82 4e 15 73 b1 b8 18 17 35 c6 e1 84 47 4b |...N.s....5...GK| -00000030 8c 3f 5c a2 9d 15 03 02 00 30 00 00 00 00 00 00 |.?\......0......| -00000040 00 00 00 00 00 00 00 00 00 00 c2 f9 0f cb 78 53 |..............xS| -00000050 43 55 f3 fd 8a cc 16 32 19 0b 81 5d 90 a4 31 ff |CU.....2...]..1.| -00000060 58 ea 70 73 92 ad e8 ed 0c e3 |X.ps......| +00000010 00 00 00 00 00 34 50 ce 9c 7f f5 2d a2 c1 e4 5c |.....4P....-...\| +00000020 fa d1 a0 f4 38 e8 4f 51 54 36 07 da f1 af 6d ef |....8.OQT6....m.| +00000030 b8 b0 bc bc a6 15 03 02 00 30 00 00 00 00 00 00 |.........0......| +00000040 00 00 00 00 00 00 00 00 00 00 0b d4 8e e8 69 64 |..............id| +00000050 53 38 7c 72 d8 1d 9f d5 8a 83 74 a7 37 6b e2 c0 |S8|r......t.7k..| +00000060 8f 26 e7 5d 0e 06 ae e0 db fb |.&.]......| diff --git a/src/crypto/tls/testdata/Client-TLSv11-ECDHE-RSA-AES b/src/crypto/tls/testdata/Client-TLSv11-ECDHE-RSA-AES index 02175ac954..4cc9610faa 100644 --- a/src/crypto/tls/testdata/Client-TLSv11-ECDHE-RSA-AES +++ b/src/crypto/tls/testdata/Client-TLSv11-ECDHE-RSA-AES @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 02 00 59 02 00 00 55 03 02 98 e4 68 fc f9 |....Y...U....h..| -00000010 df 3e 77 31 50 88 fb c7 9c 53 37 20 97 9d 66 e1 |.>w1P....S7 ..f.| -00000020 7f 2b bd 1f 59 2e b4 e1 12 71 0a 20 fe dc fa 3d |.+..Y....q. ...=| -00000030 a5 41 2c 4c 0f 30 73 a8 35 4a 6a 14 1b 6c b6 22 |.A,L.0s.5Jj..l."| -00000040 aa be ae be 7c 53 6d 29 c1 da 0e 6b c0 13 00 00 |....|Sm)...k....| +00000000 16 03 02 00 59 02 00 00 55 03 02 6e ff 3b 26 66 |....Y...U..n.;&f| +00000010 7c 32 3f 42 fd 92 7c 12 db 26 b2 45 6e 28 b9 49 ||2?B..|..&.En(.I| +00000020 86 6b 00 54 92 3b 65 a6 02 6d 94 20 ea 44 db 5c |.k.T.;e..m. .D.\| +00000030 d1 39 35 b2 ea 1c 6d 3e 94 bb 47 60 25 1e 9c 74 |.95...m>..G`%..t| +00000040 e7 bd 54 cc 2b 36 14 6a 12 54 5b 6c c0 13 00 00 |..T.+6.j.T[l....| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 02 02 59 0b 00 02 55 00 02 52 00 02 4f 30 82 02 |..Y...U..R..O0..| 00000070 4b 30 82 01 b4 a0 03 02 01 02 02 09 00 e8 f0 9d |K0..............| @@ -60,38 +60,38 @@ 00000290 77 8d 0c 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d |w.......@.a.Lr+.| 000002a0 ae db 46 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db |..F..M...>...B..| 000002b0 fe 3d 13 60 84 5c 21 d3 3b e9 fa e7 16 03 02 00 |.=.`.\!.;.......| -000002c0 aa 0c 00 00 a6 03 00 1d 20 e7 c9 40 dc 8c e7 4a |........ ..@...J| -000002d0 52 c5 47 3d 41 9e 43 75 9a 3e 01 db 85 dd 6e 27 |R.G=A.Cu.>....n'| -000002e0 89 c1 88 3f d3 1b 62 50 6b 00 80 26 d0 b2 dc c7 |...?..bPk..&....| -000002f0 2f 94 03 ff be db bc ee d1 2b 83 29 6e 73 6b 69 |/........+.)nski| -00000300 39 eb a7 38 c3 4b d7 93 1d c7 94 ae 83 1e 70 2c |9..8.K........p,| -00000310 18 bb 82 b6 fe 18 74 a1 33 aa f8 a5 8a 41 c3 b8 |......t.3....A..| -00000320 5d 30 7e 5e cd 05 ef df bf 8a 77 96 1c cb e9 c5 |]0~^......w.....| -00000330 82 0e 79 e0 04 2f ba 0a 63 f5 de 70 b6 ef 09 08 |..y../..c..p....| -00000340 24 36 b6 01 c3 8c d7 3e 54 1b f1 39 08 2e 18 79 |$6.....>T..9...y| -00000350 85 58 73 a2 f4 51 2b 04 1b c5 da b4 47 b0 a8 ca |.Xs..Q+.....G...| -00000360 38 35 75 78 2b 53 97 93 50 01 c3 16 03 02 00 04 |85ux+S..P.......| +000002c0 aa 0c 00 00 a6 03 00 1d 20 82 3b d2 56 dd cd d8 |........ .;.V...| +000002d0 e1 98 a7 90 d1 08 2d 37 dc e8 21 cd 29 af 29 a5 |......-7..!.).).| +000002e0 78 8e 59 9e 4c ac c9 d2 4b 00 80 25 20 91 4e 0d |x.Y.L...K..% .N.| +000002f0 74 12 9e 1c 98 fb 5f 4b ad fd c8 68 df 6b 82 98 |t....._K...h.k..| +00000300 a8 7c ee 17 44 47 91 2a 42 c1 82 d0 ce aa cd f8 |.|..DG.*B.......| +00000310 69 1e 85 79 27 fe ef 5a a2 e1 35 30 9a 2d c6 b0 |i..y'..Z..50.-..| +00000320 43 84 39 7f 8d 68 09 d6 6c 1a 84 0f c0 9a c0 9f |C.9..h..l.......| +00000330 64 56 cb fc 32 f2 4a a3 26 e8 c2 5f d7 16 3e 7c |dV..2.J.&.._..>|| +00000340 4e 8b 89 f8 7f f4 c2 26 fe 01 cd 48 b6 61 9c 93 |N......&...H.a..| +00000350 1a bc a1 d1 01 c5 bf ef 43 b4 ca 86 62 37 b4 99 |........C...b7..| +00000360 54 69 db 74 51 92 92 dd c1 b1 75 16 03 02 00 04 |Ti.tQ.....u.....| 00000370 0e 00 00 00 |....| >>> Flow 3 (client to server) 00000000 16 03 02 00 25 10 00 00 21 20 2f e5 7d a3 47 cd |....%...! /.}.G.| 00000010 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 |bC.(.._.).0.....| 00000020 cf c2 ed 90 99 5f 58 cb 3b 74 14 03 02 00 01 01 |....._X.;t......| 00000030 16 03 02 00 40 00 00 00 00 00 00 00 00 00 00 00 |....@...........| -00000040 00 00 00 00 00 46 e7 d3 6c ca df 1e 98 43 dd fc |.....F..l....C..| -00000050 7c 0e 51 7c 32 0a 76 41 7a c5 19 4a b2 75 e0 43 ||.Q|2.vAz..J.u.C| -00000060 27 7e 84 b3 e2 2b ee fd 6f a5 11 f3 f8 68 e2 b1 |'~...+..o....h..| -00000070 5e 7e ec 3a 89 |^~.:.| +00000040 00 00 00 00 00 c5 bf e6 b3 86 12 92 df 68 fa 75 |.............h.u| +00000050 79 5f ee fe 60 91 d1 fd 8a 48 3b 97 b4 da 7f 58 |y_..`....H;....X| +00000060 3e 7e 40 d7 93 1d 6b e2 0e 2a a4 45 20 e0 9d f9 |>~@...k..*.E ...| +00000070 b6 5e b1 f1 4f |.^..O| >>> Flow 4 (server to client) -00000000 14 03 02 00 01 01 16 03 02 00 40 a1 8f f2 23 62 |..........@...#b| -00000010 42 71 dd dc d6 8c 5e 3e d7 cf ef 8b b8 26 d4 99 |Bq....^>.....&..| -00000020 d9 4f 58 ac cf eb 5d 56 00 be 20 3e 32 c2 72 2a |.OX...]V.. >2.r*| -00000030 46 6a c4 b6 51 8c 3d c7 b3 e7 28 32 8c b7 f6 4c |Fj..Q.=...(2...L| -00000040 9a 3d 30 56 42 84 25 c7 aa f4 e7 |.=0VB.%....| +00000000 14 03 02 00 01 01 16 03 02 00 40 bf 58 92 80 02 |..........@.X...| +00000010 75 91 40 30 35 e0 16 76 f4 97 bd 77 46 a3 a3 4e |u.@05..v...wF..N| +00000020 f1 be 53 eb b8 56 45 b1 71 c9 f8 a9 bf c6 9a 00 |..S..VE.q.......| +00000030 83 46 91 88 d5 7b 72 95 27 33 80 43 3f 3e f6 60 |.F...{r.'3.C?>.`| +00000040 c6 55 90 6a 87 8e 7d 48 27 e2 40 |.U.j..}H'.@| >>> Flow 5 (client to server) 00000000 17 03 02 00 30 00 00 00 00 00 00 00 00 00 00 00 |....0...........| -00000010 00 00 00 00 00 c1 55 65 98 a8 15 c1 80 95 e0 85 |......Ue........| -00000020 c0 0e f5 68 27 b1 f2 27 c2 cc 0e fd 36 15 ed 75 |...h'..'....6..u| -00000030 9f 87 78 ae 3a 15 03 02 00 30 00 00 00 00 00 00 |..x.:....0......| -00000040 00 00 00 00 00 00 00 00 00 00 b1 1a 15 9d f2 93 |................| -00000050 4b 2d 0c 32 9d e6 34 1b 37 bf 89 b2 ca 44 95 16 |K-.2..4.7....D..| -00000060 10 26 bd 47 e9 cb 62 76 1e 72 |.&.G..bv.r| +00000010 00 00 00 00 00 f5 6b bc 6d 2c 70 b1 c0 f0 ab 78 |......k.m,p....x| +00000020 44 c9 97 f6 59 ef 15 e4 05 cf e0 55 ee a4 68 8c |D...Y......U..h.| +00000030 86 57 82 bd 84 15 03 02 00 30 00 00 00 00 00 00 |.W.......0......| +00000040 00 00 00 00 00 00 00 00 00 00 ef b2 a9 a5 bb a3 |................| +00000050 6e e5 d1 2b ef 83 1d 11 de 29 d2 30 2c fc 78 73 |n..+.....).0,.xs| +00000060 6b 6e 0a d2 55 67 5c d4 58 b3 |kn..Ug\.X.| diff --git a/src/crypto/tls/testdata/Client-TLSv11-Ed25519 b/src/crypto/tls/testdata/Client-TLSv11-Ed25519 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/crypto/tls/testdata/Client-TLSv11-RSA-RC4 b/src/crypto/tls/testdata/Client-TLSv11-RSA-RC4 index 6340eb1bbc..9dae5dd6d2 100644 --- a/src/crypto/tls/testdata/Client-TLSv11-RSA-RC4 +++ b/src/crypto/tls/testdata/Client-TLSv11-RSA-RC4 @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 02 00 51 02 00 00 4d 03 02 63 10 cc 62 2c |....Q...M..c..b,| -00000010 7c 1f 2a 30 cc 2f fc cf 57 4e b1 a8 48 1a e8 e6 ||.*0./..WN..H...| -00000020 fe 3c ec cd e6 bf b4 0b 90 4f 28 20 f4 f9 6a 6d |.<.......O( ..jm| -00000030 73 cf 9f 86 7e d1 10 ab 7f 48 9c 1e c2 14 1d 18 |s...~....H......| -00000040 cc e8 57 48 65 c5 2e 86 a8 e2 da 4a 00 05 00 00 |..WHe......J....| +00000000 16 03 02 00 51 02 00 00 4d 03 02 96 ca 2a e7 23 |....Q...M....*.#| +00000010 af 2e 45 62 15 fa 5a 84 bc aa 7c 79 03 1b 37 69 |..Eb..Z...|y..7i| +00000020 a0 77 ce 03 81 b7 e5 7d 31 34 6e 20 93 83 5d 7c |.w.....}14n ..]|| +00000030 e8 c7 48 f9 67 ec 97 b1 27 b6 de de 89 07 5a cf |..H.g...'.....Z.| +00000040 44 77 48 4b e9 62 43 e3 87 fd de 87 00 05 00 00 |DwHK.bC.........| 00000050 05 ff 01 00 01 00 16 03 02 02 59 0b 00 02 55 00 |..........Y...U.| 00000060 02 52 00 02 4f 30 82 02 4b 30 82 01 b4 a0 03 02 |.R..O0..K0......| 00000070 01 02 02 09 00 e8 f0 9d 3f e2 5b ea a6 30 0d 06 |........?.[..0..| @@ -70,15 +70,15 @@ 00000060 c5 70 0f 08 83 48 e9 48 ef 6e 50 8b 05 7e e5 84 |.p...H.H.nP..~..| 00000070 25 fa 55 c7 ae 31 02 27 00 ef 3f 98 86 20 12 89 |%.U..1.'..?.. ..| 00000080 91 59 28 b4 f7 d7 af d2 69 61 35 14 03 02 00 01 |.Y(.....ia5.....| -00000090 01 16 03 02 00 24 cf ee c8 cd b5 06 a4 5a 3a 3e |.....$.......Z:>| -000000a0 6a 11 9b 40 48 b2 89 95 5c ba 30 59 df 05 63 46 |j..@H...\.0Y..cF| -000000b0 0c 23 54 34 a8 f5 b2 51 1b 3c |.#T4...Q.<| +00000090 01 16 03 02 00 24 33 5d 7f cb 6e 36 19 8b db 35 |.....$3]..n6...5| +000000a0 88 16 87 7a 9d 5a 51 27 51 13 17 64 0e 57 d5 e1 |...z.ZQ'Q..d.W..| +000000b0 6e 34 8d e6 99 a8 38 b2 e7 3a |n4....8..:| >>> Flow 4 (server to client) -00000000 14 03 02 00 01 01 16 03 02 00 24 5e 7b 1a c0 81 |..........$^{...| -00000010 94 bc 22 87 6f 6a 09 9d ad b4 9c 90 ae 80 4f ed |..".oj........O.| -00000020 3f 6d ac 40 7a 20 0a 9a 7f b2 f9 7d c2 50 7a |?m.@z .....}.Pz| +00000000 14 03 02 00 01 01 16 03 02 00 24 e0 8b 90 9b 83 |..........$.....| +00000010 f5 3d 00 e9 cf 7b 1d 75 cf c8 16 f2 29 8d de 0b |.=...{.u....)...| +00000020 75 82 b1 c4 6e 1c 1f ab e9 90 74 31 99 f2 ad |u...n.....t1...| >>> Flow 5 (client to server) -00000000 17 03 02 00 1a bb f8 a5 2d ef c6 34 c7 1a 1b 87 |........-..4....| -00000010 8c 59 31 72 64 19 a3 d4 ab 40 b3 b9 75 1c 92 15 |.Y1rd....@..u...| -00000020 03 02 00 16 e0 65 24 90 8e 53 9c 2e 48 52 83 ec |.....e$..S..HR..| -00000030 09 b0 92 2b 21 42 c1 ed 45 bb |...+!B..E.| +00000000 17 03 02 00 1a ca 2a 95 13 de 40 0d af 44 a4 aa |......*...@..D..| +00000010 9a 35 d7 38 c7 9f 74 4f 3a bf d1 9c cd 9e ee 15 |.5.8..tO:.......| +00000020 03 02 00 16 d3 a4 32 78 a9 00 1b 7a 48 3e 7c 2b |......2x...zH>|+| +00000030 f9 3b 92 32 20 0b f4 16 39 18 |.;.2 ...9.| diff --git a/src/crypto/tls/testdata/Client-TLSv12-AES128-GCM-SHA256 b/src/crypto/tls/testdata/Client-TLSv12-AES128-GCM-SHA256 index dde850651a..4412f53c90 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-AES128-GCM-SHA256 +++ b/src/crypto/tls/testdata/Client-TLSv12-AES128-GCM-SHA256 @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 51 02 00 00 4d 03 03 4c 7d 80 b6 78 |....Q...M..L}..x| -00000010 9f 5c 70 7d fe 4a 0a b2 e3 12 80 14 6d 20 e3 cc |.\p}.J......m ..| -00000020 ec c9 08 8e 44 f6 c2 92 65 90 56 20 86 57 75 b4 |....D...e.V .Wu.| -00000030 3d 5a 00 5f bb 25 f3 21 a9 e2 1e 10 4a 1e 8a 30 |=Z._.%.!....J..0| -00000040 9a 93 b0 87 04 a1 d5 c6 ad 0f c9 fc 00 9c 00 00 |................| +00000000 16 03 03 00 51 02 00 00 4d 03 03 1d be be 1e eb |....Q...M.......| +00000010 59 2c d5 07 b9 7a 64 47 95 84 ef cf d9 3e 82 4c |Y,...zdG.....>.L| +00000020 00 c0 0a 69 8a 01 2a b3 42 78 02 20 5e 32 5c 88 |...i..*.Bx. ^2\.| +00000030 50 ed d5 44 41 4f bf a9 4e 49 83 5d aa 7c 2e 5d |P..DAO..NI.].|.]| +00000040 85 e8 64 92 5e 49 5d 8a d0 0e 89 eb 00 9c 00 00 |..d.^I].........| 00000050 05 ff 01 00 01 00 16 03 03 02 59 0b 00 02 55 00 |..........Y...U.| 00000060 02 52 00 02 4f 30 82 02 4b 30 82 01 b4 a0 03 02 |.R..O0..K0......| 00000070 01 02 02 09 00 e8 f0 9d 3f e2 5b ea a6 30 0d 06 |........?.[..0..| @@ -70,17 +70,17 @@ 00000060 c5 70 0f 08 83 48 e9 48 ef 6e 50 8b 05 7e e5 84 |.p...H.H.nP..~..| 00000070 25 fa 55 c7 ae 31 02 27 00 ef 3f 98 86 20 12 89 |%.U..1.'..?.. ..| 00000080 91 59 28 b4 f7 d7 af d2 69 61 35 14 03 03 00 01 |.Y(.....ia5.....| -00000090 01 16 03 03 00 28 00 00 00 00 00 00 00 00 14 74 |.....(.........t| -000000a0 ff 19 e7 d3 2c b4 5e 43 c2 38 d2 53 ca a2 3e f6 |....,.^C.8.S..>.| -000000b0 f0 12 92 0c 68 6f d7 5c 37 ff 8e d7 98 bf |....ho.\7.....| +00000090 01 16 03 03 00 28 00 00 00 00 00 00 00 00 69 38 |.....(........i8| +000000a0 97 84 2e 77 5c b8 58 82 b5 78 85 2e f3 7b 92 81 |...w\.X..x...{..| +000000b0 00 72 91 23 41 ae 59 6c 18 64 f0 62 f2 c9 |.r.#A.Yl.d.b..| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 28 20 60 01 e9 d0 |..........( `...| -00000010 f7 5a 03 c6 6c 6e 37 5e ad e2 2f 93 84 31 88 38 |.Z..ln7^../..1.8| -00000020 da b7 55 4d 3d 0c 8a 6b 7c 57 05 2a ef 6f 24 6b |..UM=..k|W.*.o$k| -00000030 6f 1d d6 |o..| +00000000 14 03 03 00 01 01 16 03 03 00 28 37 f7 98 2f 78 |..........(7../x| +00000010 54 85 5f 2e cb a9 b7 bf 4b 2d 62 06 e2 32 cd 18 |T._.....K-b..2..| +00000020 de f5 54 c8 e0 54 2d c5 b4 98 07 7e c7 b7 79 a0 |..T..T-....~..y.| +00000030 75 af 5c |u.\| >>> Flow 5 (client to server) -00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 4f 20 33 |.............O 3| -00000010 83 73 86 0a ca 92 4d 8b d5 cf 2e e8 b1 f0 81 9c |.s....M.........| -00000020 c1 3b 0a 15 03 03 00 1a 00 00 00 00 00 00 00 02 |.;..............| -00000030 9c a9 02 e8 ad cf 5f 33 f0 15 86 c7 4a 11 85 20 |......_3....J.. | -00000040 06 04 |..| +00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 78 c1 c0 |.............x..| +00000010 7d 1b a8 b2 80 0e a3 64 cf e0 fa 71 9d 37 5d 32 |}......d...q.7]2| +00000020 8d 36 38 15 03 03 00 1a 00 00 00 00 00 00 00 02 |.68.............| +00000030 c2 f3 41 1a 2c a4 4f 48 fa 61 14 40 60 51 e5 99 |..A.,.OH.a.@`Q..| +00000040 c6 e5 |..| diff --git a/src/crypto/tls/testdata/Client-TLSv12-AES128-SHA256 b/src/crypto/tls/testdata/Client-TLSv12-AES128-SHA256 index 8714fdbcef..d7568843b4 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-AES128-SHA256 +++ b/src/crypto/tls/testdata/Client-TLSv12-AES128-SHA256 @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 51 02 00 00 4d 03 03 fa f4 c1 2c 7a |....Q...M.....,z| -00000010 a0 09 f0 35 06 c3 79 90 a4 df fa 3c 14 1a 95 92 |...5..y....<....| -00000020 23 16 19 9d 38 83 89 6f ee 7e 7b 20 1f 2d 6c 2b |#...8..o.~{ .-l+| -00000030 bf 93 e4 58 00 13 6d ac 4d 0b c2 b4 4a e5 b3 39 |...X..m.M...J..9| -00000040 80 8e 35 1b 7b ec 9a 2e b8 bb 0b 04 00 3c 00 00 |..5.{........<..| +00000000 16 03 03 00 51 02 00 00 4d 03 03 c3 41 d7 9c 1b |....Q...M...A...| +00000010 9a ff f8 17 af 41 df 8d 96 70 bb b8 f6 9a 4c a2 |.....A...p....L.| +00000020 03 25 31 2c 58 fa 05 5b 12 85 6a 20 18 3c 34 d6 |.%1,X..[..j .<4.| +00000030 08 44 46 a5 5c b1 40 0d 38 33 c0 2d ea a6 46 53 |.DF.\.@.83.-..FS| +00000040 0e 09 39 6f 11 35 02 63 cf 21 74 c2 00 3c 00 00 |..9o.5.c.!t..<..| 00000050 05 ff 01 00 01 00 16 03 03 02 59 0b 00 02 55 00 |..........Y...U.| 00000060 02 52 00 02 4f 30 82 02 4b 30 82 01 b4 a0 03 02 |.R..O0..K0......| 00000070 01 02 02 09 00 e8 f0 9d 3f e2 5b ea a6 30 0d 06 |........?.[..0..| @@ -71,25 +71,25 @@ 00000070 25 fa 55 c7 ae 31 02 27 00 ef 3f 98 86 20 12 89 |%.U..1.'..?.. ..| 00000080 91 59 28 b4 f7 d7 af d2 69 61 35 14 03 03 00 01 |.Y(.....ia5.....| 00000090 01 16 03 03 00 50 00 00 00 00 00 00 00 00 00 00 |.....P..........| -000000a0 00 00 00 00 00 00 ab 11 61 9b 81 32 bc 64 54 55 |........a..2.dTU| -000000b0 4d 76 5d 75 77 10 c4 df 34 43 af a5 83 37 24 e9 |Mv]uw...4C...7$.| -000000c0 6c c8 73 ad 28 24 a8 3a be 5d a9 22 21 fc e5 95 |l.s.($.:.]."!...| -000000d0 7e 27 18 d4 c4 b4 c5 70 f6 48 73 a6 97 2a c7 5d |~'.....p.Hs..*.]| -000000e0 46 78 37 9f f1 30 |Fx7..0| +000000a0 00 00 00 00 00 00 88 20 99 51 5e fb 72 79 7f f8 |....... .Q^.ry..| +000000b0 b2 a9 56 96 a3 03 1d a0 e0 38 1a be 4c ea 80 f9 |..V......8..L...| +000000c0 c0 ef 45 81 91 7f b9 1b f7 91 3b 4e 05 87 d6 73 |..E.......;N...s| +000000d0 c0 27 94 50 4f 00 ee c1 02 af 5f 6f 4c a5 0e 5b |.'.PO....._oL..[| +000000e0 6c 76 87 28 b4 bf |lv.(..| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 50 c3 5f 95 d2 ee |..........P._...| -00000010 3d 98 c9 29 ab 06 fc 8c 9b 9c fa 98 36 f1 6c f4 |=..)........6.l.| -00000020 0c bd c6 d3 79 7e ce 90 fa 23 04 d3 41 ea 35 f0 |....y~...#..A.5.| -00000030 3e bc dc 02 ae 0d 87 27 1a 8b d8 f0 e4 32 7d 89 |>......'.....2}.| -00000040 9c 89 50 38 ae 02 e2 c7 65 43 a9 1f ce 42 c9 e3 |..P8....eC...B..| -00000050 ce 0d 68 16 f6 46 6d 40 47 66 3c |..h..Fm@Gf<| +00000000 14 03 03 00 01 01 16 03 03 00 50 93 14 a5 13 16 |..........P.....| +00000010 d7 af 14 81 94 33 2d ae f7 7a b1 b1 a5 38 fb e8 |.....3-..z...8..| +00000020 c8 38 b3 ce f1 eb 70 e7 84 b6 fc 25 25 32 a9 09 |.8....p....%%2..| +00000030 d1 0d 2d 59 57 6d d0 42 e8 c1 81 92 d0 af fb 5a |..-YWm.B.......Z| +00000040 08 7e 0f 3d 10 e5 42 6d 27 cd 8c 32 b2 20 4b 0a |.~.=..Bm'..2. K.| +00000050 75 76 ed 08 54 fe 74 94 72 35 9e |uv..T.t.r5.| >>> Flow 5 (client to server) 00000000 17 03 03 00 40 00 00 00 00 00 00 00 00 00 00 00 |....@...........| -00000010 00 00 00 00 00 55 d6 ad fe d9 c9 28 f1 6e 80 e3 |.....U.....(.n..| -00000020 54 38 52 96 9f cb cb 94 67 ef a1 ed e0 6b 83 c6 |T8R.....g....k..| -00000030 c8 48 c2 bb ed 18 a5 ec cc 6d cc f1 78 a1 be 45 |.H.......m..x..E| -00000040 88 e9 c9 5a 03 15 03 03 00 40 00 00 00 00 00 00 |...Z.....@......| -00000050 00 00 00 00 00 00 00 00 00 00 8a 47 d5 d1 ba 89 |...........G....| -00000060 cb 14 1a a7 99 6b 41 14 4c 85 f3 df f2 51 42 23 |.....kA.L....QB#| -00000070 0d 44 b1 a4 52 3c e8 34 5c 09 cc 92 06 3a 3f 75 |.D..R<.4\....:?u| -00000080 b1 b2 cb bf c7 ff da f7 7a 90 |........z.| +00000010 00 00 00 00 00 53 91 38 34 33 20 94 0d 76 d7 72 |.....S.843 ..v.r| +00000020 48 f3 17 34 01 ae 0e 89 db 60 f1 4e 64 a5 cf 0c |H..4.....`.Nd...| +00000030 32 52 3f a0 18 f8 c5 57 ed 3a d1 41 19 81 cf 0a |2R?....W.:.A....| +00000040 f2 d8 90 4b ba 15 03 03 00 40 00 00 00 00 00 00 |...K.....@......| +00000050 00 00 00 00 00 00 00 00 00 00 05 2b 31 3c 1b a2 |...........+1<..| +00000060 11 87 5f 0f 49 72 bb 67 e6 75 18 9c b1 f4 6c ed |.._.Ir.g.u....l.| +00000070 4d 01 58 35 30 43 44 e8 ee 1d f2 81 9d 67 6d 77 |M.X50CD......gmw| +00000080 1e 36 61 7f f3 32 3d 60 73 6d |.6a..2=`sm| diff --git a/src/crypto/tls/testdata/Client-TLSv12-AES256-GCM-SHA384 b/src/crypto/tls/testdata/Client-TLSv12-AES256-GCM-SHA384 index 61abb55a51..2f552cbb62 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-AES256-GCM-SHA384 +++ b/src/crypto/tls/testdata/Client-TLSv12-AES256-GCM-SHA384 @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 51 02 00 00 4d 03 03 f9 28 80 d0 c1 |....Q...M...(...| -00000010 26 36 81 01 db 60 7a 37 77 ff 57 da 2a 4c ab f3 |&6...`z7w.W.*L..| -00000020 5d 00 df f9 84 db bd 2d 95 37 ae 20 f7 00 8d 5d |]......-.7. ...]| -00000030 1e ba e7 cc ed 36 d6 a5 87 63 5d c3 9b 4b a0 9c |.....6...c]..K..| -00000040 cf ee bc b3 de 8a ec 61 41 a3 3a df 00 9d 00 00 |.......aA.:.....| +00000000 16 03 03 00 51 02 00 00 4d 03 03 2b 59 94 f3 9e |....Q...M..+Y...| +00000010 23 ae d3 58 82 1f 2e be 38 1d 14 e4 4c a4 b8 ed |#..X....8...L...| +00000020 95 08 b9 44 60 02 4b 0b a9 6e ae 20 9b 43 e5 2a |...D`.K..n. .C.*| +00000030 0f 08 8e a4 c1 c0 15 79 9f af a5 ab a3 67 9d 09 |.......y.....g..| +00000040 23 0e 8e 96 a9 aa 7d 26 74 d8 0c 9a 00 9d 00 00 |#.....}&t.......| 00000050 05 ff 01 00 01 00 16 03 03 02 59 0b 00 02 55 00 |..........Y...U.| 00000060 02 52 00 02 4f 30 82 02 4b 30 82 01 b4 a0 03 02 |.R..O0..K0......| 00000070 01 02 02 09 00 e8 f0 9d 3f e2 5b ea a6 30 0d 06 |........?.[..0..| @@ -70,17 +70,17 @@ 00000060 c5 70 0f 08 83 48 e9 48 ef 6e 50 8b 05 7e e5 84 |.p...H.H.nP..~..| 00000070 25 fa 55 c7 ae 31 02 27 00 ef 3f 98 86 20 12 89 |%.U..1.'..?.. ..| 00000080 91 59 28 b4 f7 d7 af d2 69 61 35 14 03 03 00 01 |.Y(.....ia5.....| -00000090 01 16 03 03 00 28 00 00 00 00 00 00 00 00 0c e7 |.....(..........| -000000a0 cc 31 51 9b 03 cc bb 21 51 a7 5f 23 59 cf 5f 29 |.1Q....!Q._#Y._)| -000000b0 4e bd db 3d d2 fb 92 73 27 2b 6f 9a b7 f2 |N..=...s'+o...| +00000090 01 16 03 03 00 28 00 00 00 00 00 00 00 00 59 fc |.....(........Y.| +000000a0 aa b1 84 ab 09 82 00 88 8e e4 82 6e cd 24 9f b5 |...........n.$..| +000000b0 01 95 d3 c3 f4 a2 16 54 25 91 77 76 fc f0 |.......T%.wv..| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 28 68 27 f4 6c ac |..........(h'.l.| -00000010 ae 31 68 1a b3 7c 5f 6f 41 18 5a 24 d3 04 00 d2 |.1h..|_oA.Z$....| -00000020 2d ce 9b 30 a1 55 df f6 7a ff 80 42 9c 86 c7 13 |-..0.U..z..B....| -00000030 c8 fc ca |...| +00000000 14 03 03 00 01 01 16 03 03 00 28 67 ac 20 d9 b6 |..........(g. ..| +00000010 a9 f0 ec f6 7b 34 31 3a 5e 06 20 0f 5b 32 86 1b |....{41:^. .[2..| +00000020 da 5a c5 54 47 d0 ad 4f 95 2c b5 1f 17 3f ec 17 |.Z.TG..O.,...?..| +00000030 a3 01 fc |...| >>> Flow 5 (client to server) -00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 e3 e7 af |................| -00000010 ee cc 1b e2 13 85 a7 37 85 e9 bd a7 3e 18 e2 f0 |.......7....>...| -00000020 e3 2d 64 15 03 03 00 1a 00 00 00 00 00 00 00 02 |.-d.............| -00000030 3d fe 35 3c b3 13 25 f8 a3 b8 81 da 91 3b 8d 69 |=.5<..%......;.i| -00000040 fc c5 |..| +00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 6c 9c 0a |.............l..| +00000010 ae 0b 40 57 8b 24 6d 09 77 ae 2f 14 be 06 26 9e |..@W.$m.w./...&.| +00000020 0a bf 18 15 03 03 00 1a 00 00 00 00 00 00 00 02 |................| +00000030 32 50 20 68 3d 05 68 ed 0c ac 7a db 24 21 7e e0 |2P h=.h...z.$!~.| +00000040 9e f0 |..| diff --git a/src/crypto/tls/testdata/Client-TLSv12-ALPN b/src/crypto/tls/testdata/Client-TLSv12-ALPN index 72d2b7c4b7..2708b262b6 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-ALPN +++ b/src/crypto/tls/testdata/Client-TLSv12-ALPN @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 01 10 01 00 01 0c 03 03 00 00 00 00 00 |................| +00000000 16 03 01 01 12 01 00 01 0e 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,22 +7,22 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 91 33 74 00 00 00 05 00 05 01 00 00 00 |....3t..........| +00000080 01 00 00 93 33 74 00 00 00 05 00 05 01 00 00 00 |....3t..........| 00000090 00 00 0a 00 0a 00 08 00 1d 00 17 00 18 00 19 00 |................| -000000a0 0b 00 02 01 00 00 0d 00 18 00 16 08 04 08 05 08 |................| -000000b0 06 04 01 04 03 05 01 05 03 06 01 06 03 02 01 02 |................| -000000c0 03 ff 01 00 01 00 00 10 00 10 00 0e 06 70 72 6f |.............pro| -000000d0 74 6f 32 06 70 72 6f 74 6f 31 00 12 00 00 00 2b |to2.proto1.....+| -000000e0 00 09 08 03 04 03 03 03 02 03 01 00 33 00 26 00 |............3.&.| -000000f0 24 00 1d 00 20 2f e5 7d a3 47 cd 62 43 15 28 da |$... /.}.G.bC.(.| -00000100 ac 5f bb 29 07 30 ff f6 84 af c4 cf c2 ed 90 99 |._.).0..........| -00000110 5f 58 cb 3b 74 |_X.;t| +000000a0 0b 00 02 01 00 00 0d 00 1a 00 18 08 04 04 03 08 |................| +000000b0 07 08 05 08 06 04 01 05 01 06 01 05 03 06 03 02 |................| +000000c0 01 02 03 ff 01 00 01 00 00 10 00 10 00 0e 06 70 |...............p| +000000d0 72 6f 74 6f 32 06 70 72 6f 74 6f 31 00 12 00 00 |roto2.proto1....| +000000e0 00 2b 00 09 08 03 04 03 03 03 02 03 01 00 33 00 |.+............3.| +000000f0 26 00 24 00 1d 00 20 2f e5 7d a3 47 cd 62 43 15 |&.$... /.}.G.bC.| +00000100 28 da ac 5f bb 29 07 30 ff f6 84 af c4 cf c2 ed |(.._.).0........| +00000110 90 99 5f 58 cb 3b 74 |.._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 66 02 00 00 62 03 03 44 df ea e4 67 |....f...b..D...g| -00000010 62 77 d5 ee 65 9f 25 8b 54 86 1a 1f 09 46 9c 41 |bw..e.%.T....F.A| -00000020 d3 13 bb 6c f5 73 9a 22 eb cf 8d 20 e8 2e 63 9f |...l.s."... ..c.| -00000030 a3 64 aa 59 7b 88 f8 28 7e 57 00 7c 3a cc 80 5e |.d.Y{..(~W.|:..^| -00000040 7d 9a 03 1e 5d 89 c0 ff 53 aa c0 4d cc a8 00 00 |}...]...S..M....| +00000000 16 03 03 00 66 02 00 00 62 03 03 0e b3 00 4c e5 |....f...b.....L.| +00000010 e4 08 c5 3d c2 9c 19 a1 de ae 43 24 9a 4d 81 99 |...=......C$.M..| +00000020 df 60 cf a5 be ae c1 e8 e8 b9 a8 20 14 e6 e1 91 |.`......... ....| +00000030 7a ab 9f 7b 3c dc c5 71 4b 28 80 5e fa 56 c9 b7 |z..{<..qK(.^.V..| +00000040 d4 2f 0e 80 49 df 81 93 df 5d 34 49 cc a8 00 00 |./..I....]4I....| 00000050 1a ff 01 00 01 00 00 0b 00 04 03 00 01 02 00 10 |................| 00000060 00 09 00 07 06 70 72 6f 74 6f 31 16 03 03 02 59 |.....proto1....Y| 00000070 0b 00 02 55 00 02 52 00 02 4f 30 82 02 4b 30 82 |...U..R..O0..K0.| @@ -63,31 +63,31 @@ 000002a0 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d ae db 46 |.....@.a.Lr+...F| 000002b0 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db fe 3d 13 |..M...>...B...=.| 000002c0 60 84 5c 21 d3 3b e9 fa e7 16 03 03 00 ac 0c 00 |`.\!.;..........| -000002d0 00 a8 03 00 1d 20 5e d1 0b 33 b0 c2 e9 12 eb 00 |..... ^..3......| -000002e0 4d 2f b8 1b 74 b0 b2 a0 01 7a 67 5a 54 9e a5 d1 |M/..t....zgZT...| -000002f0 c5 a5 2e 59 af 53 08 04 00 80 1f ac 73 b9 62 55 |...Y.S......s.bU| -00000300 a2 53 ae 64 db 2a f7 a1 a8 69 09 2d a2 fa 0c d8 |.S.d.*...i.-....| -00000310 9e e8 9a 2f b6 8f f0 e1 5e 53 bb 4c 9e fa e4 7a |.../....^S.L...z| -00000320 68 06 20 d5 e7 d0 de cf 29 a8 bd 6b 54 82 e4 bb |h. .....)..kT...| -00000330 dd 6e ab d1 d1 c9 af 77 01 b1 06 e1 9d 2f 00 7a |.n.....w...../.z| -00000340 2b e7 6f d1 da 7c 6f f5 2c 03 0d 57 9e 19 41 be |+.o..|o.,..W..A.| -00000350 91 85 17 c2 4a 5e 9b 87 44 0e df 81 64 b1 2e 4b |....J^..D...d..K| -00000360 64 80 fb f2 7f 23 f1 19 2c 8a 8d 6d 08 1e e9 0d |d....#..,..m....| -00000370 47 ec 94 b0 db c6 7a 44 79 04 16 03 03 00 04 0e |G.....zDy.......| +000002d0 00 a8 03 00 1d 20 18 37 3a d3 0a 4f 9b 95 c7 f0 |..... .7:..O....| +000002e0 a2 00 43 5f df 2e a8 16 a9 9f 2a 0e 51 cf c9 b9 |..C_......*.Q...| +000002f0 14 62 a7 ab 4b 6a 08 04 00 80 1a b2 78 e7 cd b6 |.b..Kj......x...| +00000300 18 65 31 19 f9 91 9f a6 cb 77 97 69 86 27 ef 06 |.e1......w.i.'..| +00000310 b5 bc f4 8f 75 96 01 72 64 2c d4 e4 67 0a d5 58 |....u..rd,..g..X| +00000320 e0 e1 05 82 a6 58 f6 e0 06 c2 15 03 69 ba 5a a0 |.....X......i.Z.| +00000330 2b af 6f b1 cd 16 84 1d 89 9c d0 c7 d2 c7 83 e8 |+.o.............| +00000340 43 b7 4f e8 ca 97 c0 e2 57 d0 10 48 0c 26 cf 58 |C.O.....W..H.&.X| +00000350 50 69 d8 86 b6 f5 aa 02 b8 f6 41 c4 15 52 99 52 |Pi........A..R.R| +00000360 05 05 5b 42 80 6d 8a bf 7a e6 f3 60 c5 67 23 dc |..[B.m..z..`.g#.| +00000370 39 4b e6 74 0e 0e 47 a7 57 02 16 03 03 00 04 0e |9K.t..G.W.......| 00000380 00 00 00 |...| >>> Flow 3 (client to server) 00000000 16 03 03 00 25 10 00 00 21 20 2f e5 7d a3 47 cd |....%...! /.}.G.| 00000010 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 |bC.(.._.).0.....| 00000020 cf c2 ed 90 99 5f 58 cb 3b 74 14 03 03 00 01 01 |....._X.;t......| -00000030 16 03 03 00 20 b9 03 a2 50 29 94 cc 5b 6c 3c 7f |.... ...P)..[l<.| -00000040 71 13 4b f0 3e 1a 13 df a0 a6 e3 15 a7 36 a2 40 |q.K.>........6.@| -00000050 86 88 d4 63 c0 |...c.| +00000030 16 03 03 00 20 0d 3c cf 6f 13 e3 73 d2 c5 05 06 |.... .<.o..s....| +00000040 85 8d 41 e0 46 3b 25 e7 0a ae b9 00 1e c3 3f 61 |..A.F;%.......?a| +00000050 82 2d e1 19 a4 |.-...| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 20 c0 4e 72 ff 58 |.......... .Nr.X| -00000010 40 70 90 8a ac 4e 94 28 ae 45 5e 2f 5f f4 c3 61 |@p...N.(.E^/_..a| -00000020 64 5d d9 af 43 a0 c1 65 78 2a 5e |d]..C..ex*^| +00000000 14 03 03 00 01 01 16 03 03 00 20 43 1a 5d c1 dc |.......... C.]..| +00000010 42 10 81 bc af 2d 40 82 fa 27 41 81 cc e5 97 99 |B....-@..'A.....| +00000020 80 27 3a b5 db f5 8e 2a 6d 72 86 |.':....*mr.| >>> Flow 5 (client to server) -00000000 17 03 03 00 16 e3 fb 93 b5 c4 17 c2 6a 9c 15 ca |............j...| -00000010 de ca c6 49 67 d6 59 65 4a ee d2 15 03 03 00 12 |...Ig.YeJ.......| -00000020 8b f7 3f 3d ad 68 2b bf f2 96 18 21 d0 0f ea e8 |..?=.h+....!....| -00000030 a0 d9 |..| +00000000 17 03 03 00 16 f1 0a 98 3b 2a 06 98 ad 46 f5 f7 |........;*...F..| +00000010 42 cf 89 c0 d4 a7 08 df bb dc 4d 15 03 03 00 12 |B.........M.....| +00000020 9c d4 d2 a1 fb 38 98 31 7d ce 39 50 0b 58 d8 a8 |.....8.1}.9P.X..| +00000030 3e 19 |>.| diff --git a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-ECDSA b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-ECDSA index 0968c160a5..e40999fb85 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-ECDSA +++ b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-ECDSA @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 8d 42 b5 ca 09 |....Y...U...B...| -00000010 22 3a a8 c0 09 57 81 1c e9 40 20 14 a6 b5 6d c7 |":...W...@ ...m.| -00000020 2a 62 69 7f 5f a8 e2 74 d5 c1 b0 20 9a bf c7 2c |*bi._..t... ...,| -00000030 b9 1b d5 45 8a a1 49 fa 0f 3b d2 74 da 6f ef 6a |...E..I..;.t.o.j| -00000040 87 75 9a be 04 8a 9e ef 7e ea d7 16 c0 09 00 00 |.u......~.......| +00000000 16 03 03 00 59 02 00 00 55 03 03 08 a4 b1 ad 21 |....Y...U......!| +00000010 3a 60 7a d3 3b 60 67 48 5d de da ff 3f a8 55 a9 |:`z.;`gH]...?.U.| +00000020 c4 72 69 32 12 c1 d1 4e d4 78 e1 20 6e 9f ed 1e |.ri2...N.x. n...| +00000030 50 9a 31 e2 ae e2 6a f4 01 cc 94 21 25 73 f3 a5 |P.1...j....!%s..| +00000040 f6 28 b3 c6 6b c1 b3 2d fc 0c d3 66 c0 09 00 00 |.(..k..-...f....| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 0e 0b 00 02 0a 00 02 07 00 02 04 30 82 02 |.............0..| 00000070 00 30 82 01 62 02 09 00 b8 bf 2d 47 a0 d2 eb f4 |.0..b.....-G....| @@ -55,18 +55,18 @@ 00000240 13 83 0d 94 06 bb d4 37 7a f6 ec 7a c9 86 2e dd |.......7z..z....| 00000250 d7 11 69 7f 85 7c 56 de fb 31 78 2b e4 c7 78 0d |..i..|V..1x+..x.| 00000260 ae cb be 9e 4e 36 24 31 7b 6a 0f 39 95 12 07 8f |....N6$1{j.9....| -00000270 2a 16 03 03 00 b7 0c 00 00 b3 03 00 1d 20 1c 45 |*............ .E| -00000280 5f 18 e9 5f 2f 0d 3b 3f f2 a8 dc f8 15 1c 03 e4 |_.._/.;?........| -00000290 c1 fa f8 f7 75 cb 74 17 cd 82 7d 26 8e 41 04 03 |....u.t...}&.A..| -000002a0 00 8b 30 81 88 02 42 01 6c ae 9f 61 16 bb 03 50 |..0...B.l..a...P| -000002b0 52 94 7f 89 59 92 a5 3e 74 54 97 7a f0 22 a5 7d |R...Y..>tT.z.".}| -000002c0 de 80 c4 6a 0d a0 cb 50 e1 aa 27 a9 44 4f 24 db |...j...P..'.DO$.| -000002d0 69 b2 d2 6c 6e 26 79 99 d8 31 9d 2d 47 26 f1 c6 |i..ln&y..1.-G&..| -000002e0 42 25 f5 66 6b 03 7a 19 b1 02 42 00 f4 5c 98 a4 |B%.fk.z...B..\..| -000002f0 d3 d7 af 36 42 cc 95 91 be 7e b1 3c 61 df a9 9c |...6B....~...0........| 00000330 00 3a 0d 00 00 36 03 01 02 40 00 2e 04 03 05 03 |.:...6...@......| 00000340 06 03 08 07 08 08 08 09 08 0a 08 0b 08 04 08 05 |................| 00000350 08 06 04 01 05 01 06 01 03 03 02 03 03 01 02 01 |................| @@ -109,31 +109,31 @@ 00000210 03 03 00 25 10 00 00 21 20 2f e5 7d a3 47 cd 62 |...%...! /.}.G.b| 00000220 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 cf |C.(.._.).0......| 00000230 c2 ed 90 99 5f 58 cb 3b 74 16 03 03 00 93 0f 00 |...._X.;t.......| -00000240 00 8f 04 03 00 8b 30 81 88 02 42 01 83 b1 39 05 |......0...B...9.| -00000250 25 f1 1b 2b 55 c0 7e 56 e1 0e 33 bc 03 c7 0a 17 |%..+U.~V..3.....| -00000260 b7 c2 b7 da ab 9d 5d 22 da 60 74 7d 85 5e 53 ff |......]".`t}.^S.| -00000270 57 4e c3 0a 47 fd e5 f6 dc 05 56 4c 7a 9f e4 5c |WN..G.....VLz..\| -00000280 04 97 80 61 d5 9f db a5 74 9b ec fc bf 02 42 01 |...a....t.....B.| -00000290 27 f8 0e 21 c2 c2 68 72 82 1b 4b cf d8 0c 1a 09 |'..!..hr..K.....| -000002a0 b0 f5 0f b9 3b e9 63 dc 68 33 5e 41 e2 2c a4 04 |....;.c.h3^A.,..| -000002b0 ec ee 84 6d f3 28 fc 6d c4 f1 04 8c 1d 38 6e e9 |...m.(.m.....8n.| -000002c0 ae 0d 0a 82 0e 42 c4 42 e7 12 33 c5 38 4f 19 51 |.....B.B..3.8O.Q| -000002d0 61 14 03 03 00 01 01 16 03 03 00 40 00 00 00 00 |a..........@....| -000002e0 00 00 00 00 00 00 00 00 00 00 00 00 9e b0 80 10 |................| -000002f0 4c da e3 cd 1e 56 e6 90 10 c5 ea d6 25 f9 34 31 |L....V......%.41| -00000300 cd 42 60 5d ab 3b 13 05 48 cd f6 53 c3 b7 ea ea |.B`].;..H..S....| -00000310 30 f0 58 2d 17 3c 77 fb a7 8f 9f a8 |0.X-.>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 40 68 2a 2b af 97 |..........@h*+..| -00000010 68 8d 96 ed 55 bc aa d2 d3 81 97 54 a1 01 88 7f |h...U......T....| -00000020 72 b7 3a 38 66 c2 53 9a 01 56 0d e0 02 b5 93 66 |r.:8f.S..V.....f| -00000030 b3 93 74 e2 e0 c5 22 1c 0d 8f bb 7d e1 43 bf bd |..t..."....}.C..| -00000040 bc 69 2e 58 96 7b 39 f0 55 6f 1b |.i.X.{9.Uo.| +00000000 14 03 03 00 01 01 16 03 03 00 40 18 c0 f3 96 7b |..........@....{| +00000010 45 91 6d 5b 1c 67 4f 37 74 b7 db 72 45 57 09 25 |E.m[.gO7t..rEW.%| +00000020 4a 14 68 4d 78 6c c7 15 6a b1 57 e6 ff 53 c4 58 |J.hMxl..j.W..S.X| +00000030 41 c5 6b 08 3c 5a 8c b9 04 d0 27 62 ee a6 e3 36 |A.k.>> Flow 5 (client to server) 00000000 17 03 03 00 30 00 00 00 00 00 00 00 00 00 00 00 |....0...........| -00000010 00 00 00 00 00 a6 98 ea d6 b2 81 83 18 5d 73 13 |.............]s.| -00000020 dc e9 e9 bc 4c 1e a8 ec a5 62 93 f6 b8 0c 0f f0 |....L....b......| -00000030 91 6e 51 2c fe 15 03 03 00 30 00 00 00 00 00 00 |.nQ,.....0......| -00000040 00 00 00 00 00 00 00 00 00 00 7f e8 f5 80 8e 27 |...............'| -00000050 1b 31 aa d0 ec 91 51 d0 18 21 de e3 63 1f ee 80 |.1....Q..!..c...| -00000060 bc db 2f 4f ce 26 46 ce 65 2e |../O.&F.e.| +00000010 00 00 00 00 00 a6 c2 ef 07 bb 38 4a e4 8f 0c 12 |..........8J....| +00000020 19 1a 96 62 22 57 57 a2 b5 b3 06 70 95 28 a7 f7 |...b"WW....p.(..| +00000030 0d 42 69 37 7f 15 03 03 00 30 00 00 00 00 00 00 |.Bi7.....0......| +00000040 00 00 00 00 00 00 00 00 00 00 04 ed 3e 68 40 eb |............>h@.| +00000050 a0 7e 57 da 27 e7 f5 e8 6c e5 6d 58 c8 a5 18 47 |.~W.'...l.mX...G| +00000060 92 5a 43 90 de 07 9e 9a 3b cc |.ZC.....;.| diff --git a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-RSA b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-RSA index 995e9a9bc9..f5fae453a8 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-RSA +++ b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-ECDSA-RSA @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 87 08 05 c4 11 |....Y...U.......| -00000010 d3 bb ca 40 4a 0a 95 79 8c b9 82 54 6f e2 11 ba |...@J..y...To...| -00000020 bd 7b 0d e4 f4 64 0d 35 a0 66 0b 20 41 e2 af c4 |.{...d.5.f. A...| -00000030 e0 db f1 52 6a 6b f3 77 0d 83 f7 00 d0 05 3f 3e |...Rjk.w......?>| -00000040 d8 3f d2 66 fa 19 3d 36 bd ff ae 13 c0 2f 00 00 |.?.f..=6...../..| +00000000 16 03 03 00 59 02 00 00 55 03 03 be ba ac 2a 81 |....Y...U.....*.| +00000010 33 b1 6e 4d 8b 9b 29 f9 16 86 bc cd b2 03 50 72 |3.nM..).......Pr| +00000020 91 9a 93 f9 e1 d6 27 55 8b b8 6c 20 84 c2 21 9e |......'U..l ..!.| +00000030 60 aa b3 f0 ec 2f 66 0d 59 31 02 08 9e 68 68 c0 |`..../f.Y1...hh.| +00000040 58 9a 8e 6c 25 ce 4d e3 3f 9d dc 91 c0 2f 00 00 |X..l%.M.?..../..| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 59 0b 00 02 55 00 02 52 00 02 4f 30 82 02 |..Y...U..R..O0..| 00000070 4b 30 82 01 b4 a0 03 02 01 02 02 09 00 e8 f0 9d |K0..............| @@ -60,17 +60,17 @@ 00000290 77 8d 0c 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d |w.......@.a.Lr+.| 000002a0 ae db 46 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db |..F..M...>...B..| 000002b0 fe 3d 13 60 84 5c 21 d3 3b e9 fa e7 16 03 03 00 |.=.`.\!.;.......| -000002c0 ac 0c 00 00 a8 03 00 1d 20 39 84 75 e0 64 4e 6d |........ 9.u.dNm| -000002d0 37 4a cd ae 78 6f d3 b5 bd 3e fb dc 9b f8 51 39 |7J..xo...>....Q9| -000002e0 85 35 a2 11 4b 59 be 57 01 08 04 00 80 a1 dd a6 |.5..KY.W........| -000002f0 f4 e0 89 8a c1 ff e6 20 1e cf 73 41 94 e6 4a 4f |....... ..sA..JO| -00000300 64 49 43 0e 53 90 61 31 92 a5 af 13 2e 00 2b e2 |dIC.S.a1......+.| -00000310 61 6e 3f a1 9a e3 7d f6 79 0e cd f6 c1 84 e0 62 |an?...}.y......b| -00000320 15 69 5a 94 8f af c5 c9 db b8 f4 4b 40 4c ea f7 |.iZ........K@L..| -00000330 bb e9 cd f2 3a 00 c3 f1 c9 5e 43 67 36 c5 73 f1 |....:....^Cg6.s.| -00000340 88 c1 6d 14 2f 92 63 ae 30 9d 3c 59 33 aa 78 62 |..m./.c.0.>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 28 36 f9 5d 31 f6 |..........(6.]1.| -00000010 a2 62 16 db 9b ea 79 28 52 1b 06 e1 59 39 f3 4a |.b....y(R...Y9.J| -00000020 67 77 6d 2b 98 80 9d e9 80 55 53 82 37 17 61 65 |gwm+.....US.7.ae| -00000030 f5 fa 06 |...| +00000000 14 03 03 00 01 01 16 03 03 00 28 b8 e9 dd 30 75 |..........(...0u| +00000010 40 7d 71 76 db 9a 95 92 81 02 3a 9e 36 d5 15 ca |@}qv......:.6...| +00000020 5d 63 a1 0f 8c 53 c9 1c 37 56 b2 0d 54 15 a2 dc |]c...S..7V..T...| +00000030 03 d6 2e |...| >>> Flow 5 (client to server) -00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 a0 3f 7e |..............?~| -00000010 ce c3 cf 73 0f 2f 9d ba 5d 2e 3b 84 8b ef cd c4 |...s./..].;.....| -00000020 2a 31 32 15 03 03 00 1a 00 00 00 00 00 00 00 02 |*12.............| -00000030 58 7e 4f 75 06 0d 16 f5 6d 06 0f af 5a 40 9b bd |X~Ou....m...Z@..| -00000040 79 f4 |y.| +00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 01 85 96 |................| +00000010 67 b2 4b d3 e3 27 80 9f 2d a8 f4 bf 47 91 58 6e |g.K..'..-...G.Xn| +00000020 47 d8 98 15 03 03 00 1a 00 00 00 00 00 00 00 02 |G...............| +00000030 36 54 82 d1 a2 0f 2a c3 53 f6 09 d0 5c 78 46 97 |6T....*.S...\xF.| +00000040 20 41 | A| diff --git a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-Ed25519 b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-Ed25519 new file mode 100644 index 0000000000..e415b126e5 --- /dev/null +++ b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-Ed25519 @@ -0,0 +1,119 @@ +>>> Flow 1 (client to server) +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| +00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| +00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| +00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| +00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 32 cc a8 |.............2..| +00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| +00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| +00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| +00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| +>>> Flow 2 (server to client) +00000000 16 03 03 00 59 02 00 00 55 03 03 1c 50 4e 50 35 |....Y...U...PNP5| +00000010 51 02 a9 62 ba 82 a5 d3 fa 40 4e f3 28 9b 50 a6 |Q..b.....@N.(.P.| +00000020 f0 75 30 e9 fe be a3 42 1d 1c f5 20 9e 88 46 57 |.u0....B... ..FW| +00000030 c5 b4 a3 a3 fc 88 bb e0 1c 5e ea 77 a0 75 93 5a |.........^.w.u.Z| +00000040 6d 4c c7 57 6f 3a 05 af 3f 3f ac 75 cc a8 00 00 |mL.Wo:..??.u....| +00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| +00000060 03 02 59 0b 00 02 55 00 02 52 00 02 4f 30 82 02 |..Y...U..R..O0..| +00000070 4b 30 82 01 b4 a0 03 02 01 02 02 09 00 e8 f0 9d |K0..............| +00000080 3f e2 5b ea a6 30 0d 06 09 2a 86 48 86 f7 0d 01 |?.[..0...*.H....| +00000090 01 0b 05 00 30 1f 31 0b 30 09 06 03 55 04 0a 13 |....0.1.0...U...| +000000a0 02 47 6f 31 10 30 0e 06 03 55 04 03 13 07 47 6f |.Go1.0...U....Go| +000000b0 20 52 6f 6f 74 30 1e 17 0d 31 36 30 31 30 31 30 | Root0...1601010| +000000c0 30 30 30 30 30 5a 17 0d 32 35 30 31 30 31 30 30 |00000Z..25010100| +000000d0 30 30 30 30 5a 30 1a 31 0b 30 09 06 03 55 04 0a |0000Z0.1.0...U..| +000000e0 13 02 47 6f 31 0b 30 09 06 03 55 04 03 13 02 47 |..Go1.0...U....G| +000000f0 6f 30 81 9f 30 0d 06 09 2a 86 48 86 f7 0d 01 01 |o0..0...*.H.....| +00000100 01 05 00 03 81 8d 00 30 81 89 02 81 81 00 db 46 |.......0.......F| +00000110 7d 93 2e 12 27 06 48 bc 06 28 21 ab 7e c4 b6 a2 |}...'.H..(!.~...| +00000120 5d fe 1e 52 45 88 7a 36 47 a5 08 0d 92 42 5b c2 |]..RE.z6G....B[.| +00000130 81 c0 be 97 79 98 40 fb 4f 6d 14 fd 2b 13 8b c2 |....y.@.Om..+...| +00000140 a5 2e 67 d8 d4 09 9e d6 22 38 b7 4a 0b 74 73 2b |..g....."8.J.ts+| +00000150 c2 34 f1 d1 93 e5 96 d9 74 7b f3 58 9f 6c 61 3c |.4......t{.X.la<| +00000160 c0 b0 41 d4 d9 2b 2b 24 23 77 5b 1c 3b bd 75 5d |..A..++$#w[.;.u]| +00000170 ce 20 54 cf a1 63 87 1d 1e 24 c4 f3 1d 1a 50 8b |. T..c...$....P.| +00000180 aa b6 14 43 ed 97 a7 75 62 f4 14 c8 52 d7 02 03 |...C...ub...R...| +00000190 01 00 01 a3 81 93 30 81 90 30 0e 06 03 55 1d 0f |......0..0...U..| +000001a0 01 01 ff 04 04 03 02 05 a0 30 1d 06 03 55 1d 25 |.........0...U.%| +000001b0 04 16 30 14 06 08 2b 06 01 05 05 07 03 01 06 08 |..0...+.........| +000001c0 2b 06 01 05 05 07 03 02 30 0c 06 03 55 1d 13 01 |+.......0...U...| +000001d0 01 ff 04 02 30 00 30 19 06 03 55 1d 0e 04 12 04 |....0.0...U.....| +000001e0 10 9f 91 16 1f 43 43 3e 49 a6 de 6d b6 80 d7 9f |.....CC>I..m....| +000001f0 60 30 1b 06 03 55 1d 23 04 14 30 12 80 10 48 13 |`0...U.#..0...H.| +00000200 49 4d 13 7e 16 31 bb a3 01 d5 ac ab 6e 7b 30 19 |IM.~.1......n{0.| +00000210 06 03 55 1d 11 04 12 30 10 82 0e 65 78 61 6d 70 |..U....0...examp| +00000220 6c 65 2e 67 6f 6c 61 6e 67 30 0d 06 09 2a 86 48 |le.golang0...*.H| +00000230 86 f7 0d 01 01 0b 05 00 03 81 81 00 9d 30 cc 40 |.............0.@| +00000240 2b 5b 50 a0 61 cb ba e5 53 58 e1 ed 83 28 a9 58 |+[P.a...SX...(.X| +00000250 1a a9 38 a4 95 a1 ac 31 5a 1a 84 66 3d 43 d3 2d |..8....1Z..f=C.-| +00000260 d9 0b f2 97 df d3 20 64 38 92 24 3a 00 bc cf 9c |...... d8.$:....| +00000270 7d b7 40 20 01 5f aa d3 16 61 09 a2 76 fd 13 c3 |}.@ ._...a..v...| +00000280 cc e1 0c 5c ee b1 87 82 f1 6c 04 ed 73 bb b3 43 |...\.....l..s..C| +00000290 77 8d 0c 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d |w.......@.a.Lr+.| +000002a0 ae db 46 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db |..F..M...>...B..| +000002b0 fe 3d 13 60 84 5c 21 d3 3b e9 fa e7 16 03 03 00 |.=.`.\!.;.......| +000002c0 ac 0c 00 00 a8 03 00 1d 20 82 c1 f5 7b 68 eb 7a |........ ...{h.z| +000002d0 cf 02 c9 95 28 4b 31 76 a9 84 93 a9 1f 5b f4 2a |....(K1v.....[.*| +000002e0 5c a5 31 94 5f f0 e0 ed 2e 08 04 00 80 7a 99 38 |\.1._........z.8| +000002f0 7f d0 25 4b bf a9 e0 2b db ce 17 9d 30 4b 82 9e |..%K...+....0K..| +00000300 b1 50 84 fc dd b0 a8 5c 39 20 00 40 5b 92 dc 7c |.P.....\9 .@[..|| +00000310 25 3b 53 7d 5a 4b ad 05 6f 3a 4f e5 84 b6 3a e2 |%;S}ZK..o:O...:.| +00000320 fb bf cb c8 94 39 a5 28 ad c8 5f 94 53 90 0e 61 |.....9.(.._.S..a| +00000330 af f2 92 2c 3b ec 3c bf 1d d3 8b a5 65 58 5b bf |...,;.<.....eX[.| +00000340 5a 21 3d cd 40 7c 9e 1d e9 62 3c 67 71 7c ec b4 |Z!=.@|...b....| +00000370 00 3a 0d 00 00 36 03 01 02 40 00 2e 04 03 05 03 |.:...6...@......| +00000380 06 03 08 07 08 08 08 09 08 0a 08 0b 08 04 08 05 |................| +00000390 08 06 04 01 05 01 06 01 03 03 02 03 03 01 02 01 |................| +000003a0 03 02 02 02 04 02 05 02 06 02 00 00 16 03 03 00 |................| +000003b0 04 0e 00 00 00 |.....| +>>> Flow 3 (client to server) +00000000 16 03 03 01 3c 0b 00 01 38 00 01 35 00 01 32 30 |....<...8..5..20| +00000010 82 01 2e 30 81 e1 a0 03 02 01 02 02 10 17 d1 81 |...0............| +00000020 93 be 2a 8c 21 20 10 25 15 e8 34 23 4f 30 05 06 |..*.! .%..4#O0..| +00000030 03 2b 65 70 30 12 31 10 30 0e 06 03 55 04 0a 13 |.+ep0.1.0...U...| +00000040 07 41 63 6d 65 20 43 6f 30 1e 17 0d 31 39 30 35 |.Acme Co0...1905| +00000050 31 36 32 31 35 34 32 36 5a 17 0d 32 30 30 35 31 |16215426Z..20051| +00000060 35 32 31 35 34 32 36 5a 30 12 31 10 30 0e 06 03 |5215426Z0.1.0...| +00000070 55 04 0a 13 07 41 63 6d 65 20 43 6f 30 2a 30 05 |U....Acme Co0*0.| +00000080 06 03 2b 65 70 03 21 00 0b e0 b5 60 b5 e2 79 30 |..+ep.!....`..y0| +00000090 3d be e3 1e e0 50 b1 04 c8 6d c7 78 6c 69 2f c5 |=....P...m.xli/.| +000000a0 14 ad 9a 63 6f 79 12 91 a3 4d 30 4b 30 0e 06 03 |...coy...M0K0...| +000000b0 55 1d 0f 01 01 ff 04 04 03 02 05 a0 30 13 06 03 |U...........0...| +000000c0 55 1d 25 04 0c 30 0a 06 08 2b 06 01 05 05 07 03 |U.%..0...+......| +000000d0 02 30 0c 06 03 55 1d 13 01 01 ff 04 02 30 00 30 |.0...U.......0.0| +000000e0 16 06 03 55 1d 11 04 0f 30 0d 82 0b 65 78 61 6d |...U....0...exam| +000000f0 70 6c 65 2e 63 6f 6d 30 05 06 03 2b 65 70 03 41 |ple.com0...+ep.A| +00000100 00 fc 19 17 2a 94 a5 31 fa 29 c8 2e 7f 5b a0 5d |....*..1.)...[.]| +00000110 8a 4e 34 40 39 d6 b3 10 dc 19 fe a0 22 71 b3 f5 |.N4@9......."q..| +00000120 8f a1 58 0d cd f4 f1 85 24 bf e6 3d 14 df df ed |..X.....$..=....| +00000130 0e e1 17 d8 11 a2 60 d0 8a 37 23 2a c2 46 aa 3a |......`..7#*.F.:| +00000140 08 16 03 03 00 25 10 00 00 21 20 2f e5 7d a3 47 |.....%...! /.}.G| +00000150 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af |.bC.(.._.).0....| +00000160 c4 cf c2 ed 90 99 5f 58 cb 3b 74 16 03 03 00 48 |......_X.;t....H| +00000170 0f 00 00 44 08 07 00 40 af a6 03 14 53 7a 4f 75 |...D...@....SzOu| +00000180 9d cc 2f e3 e7 2a 51 16 16 b0 1d 28 e0 2a 59 f0 |../..*Q....(.*Y.| +00000190 3c df cc 18 dd b8 ef d1 9f 9d 03 8e 59 00 27 d1 |<...........Y.'.| +000001a0 39 2f 3b 33 53 1f b2 f0 22 1d 06 f6 50 0b a7 98 |9/;3S..."...P...| +000001b0 cc fa 78 53 bf 8e ff 0b 14 03 03 00 01 01 16 03 |..xS............| +000001c0 03 00 20 e5 81 3e a3 34 29 52 14 19 49 cf 04 82 |.. ..>.4)R..I...| +000001d0 8b e7 83 aa 6c db 96 ec 97 29 b4 a3 db 87 21 2e |....l....)....!.| +000001e0 a5 c0 66 |..f| +>>> Flow 4 (server to client) +00000000 14 03 03 00 01 01 16 03 03 00 20 84 67 d4 ce cf |.......... .g...| +00000010 fb 54 2c dc f7 53 31 8a aa 03 60 37 3d 33 f2 79 |.T,..S1...`7=3.y| +00000020 d0 65 2e 3f 0e f9 1a d3 6e 6d 8e |.e.?....nm.| +>>> Flow 5 (client to server) +00000000 17 03 03 00 16 e5 b7 4c 92 05 fc 81 cf 11 ef cd |.......L........| +00000010 0f 4b df ef a1 54 ae 26 4e ec aa 15 03 03 00 12 |.K...T.&N.......| +00000020 0a f3 5b 06 63 84 a6 eb d4 73 94 db fe d8 e0 ae |..[.c....s......| +00000030 d6 fc |..| diff --git a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-AES256-GCM-SHA384 b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-AES256-GCM-SHA384 index e6791c0da4..9408527297 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-AES256-GCM-SHA384 +++ b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-AES256-GCM-SHA384 @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 10 af 03 5d d2 |....Y...U.....].| -00000010 4d c8 e6 2e 88 08 57 65 8c c6 fa af b5 e7 bd 49 |M.....We.......I| -00000020 4c d0 dc 04 e6 14 e0 83 40 79 dd 20 5a 11 db 9d |L.......@y. Z...| -00000030 c0 10 71 f5 27 89 5a 7e 17 80 9b 26 39 09 cc ad |..q.'.Z~...&9...| -00000040 be 1a 24 37 d7 08 a2 e1 fe 75 54 71 c0 30 00 00 |..$7.....uTq.0..| +00000000 16 03 03 00 59 02 00 00 55 03 03 44 13 0c ac b2 |....Y...U..D....| +00000010 4f 77 03 bb 69 b5 db 3f f5 c3 14 20 6f 8b c7 e1 |Ow..i..?... o...| +00000020 28 40 01 a0 04 f7 29 76 42 65 b0 20 91 89 84 74 |(@....)vBe. ...t| +00000030 8e ed c8 c3 48 67 a5 75 93 ec d3 3e 26 e4 aa c6 |....Hg.u...>&...| +00000040 39 e7 9f 78 d3 ab 3c c0 6a 05 32 7e c0 30 00 00 |9..x..<.j.2~.0..| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 59 0b 00 02 55 00 02 52 00 02 4f 30 82 02 |..Y...U..R..O0..| 00000070 4b 30 82 01 b4 a0 03 02 01 02 02 09 00 e8 f0 9d |K0..............| @@ -60,17 +60,17 @@ 00000290 77 8d 0c 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d |w.......@.a.Lr+.| 000002a0 ae db 46 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db |..F..M...>...B..| 000002b0 fe 3d 13 60 84 5c 21 d3 3b e9 fa e7 16 03 03 00 |.=.`.\!.;.......| -000002c0 ac 0c 00 00 a8 03 00 1d 20 42 0e 6e 06 83 b5 4e |........ B.n...N| -000002d0 d9 f5 45 2b 82 1c 30 c7 65 5d 40 44 10 b8 63 aa |..E+..0.e]@D..c.| -000002e0 6f ef 92 13 4b 8d fd 1b 0e 08 04 00 80 63 8f 8a |o...K........c..| -000002f0 f3 6a 42 b9 e2 6d c3 06 c5 04 2d df 4b 06 0f b7 |.jB..m....-.K...| -00000300 e5 36 d2 5f be aa 36 83 82 eb e8 06 e9 a5 b8 47 |.6._..6........G| -00000310 db 43 fb 7d ab 0b 3a db 13 df ab 62 16 7d 80 57 |.C.}..:....b.}.W| -00000320 4b 07 79 f6 d9 9c ad d4 1b b5 cd cb 92 44 bc 74 |K.y..........D.t| -00000330 d0 f3 67 0c e6 1a 5a 18 53 bc bc 65 19 7a 13 f3 |..g...Z.S..e.z..| -00000340 78 36 e7 14 7d 36 6d 85 ea d7 96 18 e2 bc 1d af |x6..}6m.........| -00000350 58 50 f3 f7 a3 27 49 a4 89 10 e2 cc 2d db c5 4a |XP...'I.....-..J| -00000360 4c 24 3e 9b 70 17 ae 2f f9 d0 96 8f b0 16 03 03 |L$>.p../........| +000002c0 ac 0c 00 00 a8 03 00 1d 20 f7 1b 54 ea 8f 34 2c |........ ..T..4,| +000002d0 09 c5 a1 63 17 9c be f5 3d 6d 58 97 63 13 db 67 |...c....=mX.c..g| +000002e0 fb 96 ef 45 c2 8c 30 12 02 08 04 00 80 d7 1a 46 |...E..0........F| +000002f0 a1 90 80 71 eb 2d 27 60 a1 aa 7c 06 79 0a e7 78 |...q.-'`..|.y..x| +00000300 47 18 95 de 90 a0 cf b4 ff 0e 35 24 43 05 18 9a |G.........5$C...| +00000310 e4 1d 23 af cb cd e1 09 81 3b a8 18 7e 30 50 3d |..#......;..~0P=| +00000320 dd be 91 3c ec 79 3c 83 aa 78 6a d0 75 70 cf 53 |...<.y<..xj.up.S| +00000330 07 b7 8a f1 8c 4d 03 27 d5 0e 40 57 5d c3 0f 4e |.....M.'..@W]..N| +00000340 63 44 84 11 47 8e 5d fd 66 75 4d ce 1d 91 6f bb |cD..G.].fuM...o.| +00000350 f5 ae 3b b2 88 5f bb d0 55 73 74 c4 8e a8 70 44 |..;.._..Ust...pD| +00000360 0f 08 10 7a f0 34 fc c8 4d 65 3d ed a1 16 03 03 |...z.4..Me=.....| 00000370 00 3a 0d 00 00 36 03 01 02 40 00 2e 04 03 05 03 |.:...6...@......| 00000380 06 03 08 07 08 08 08 09 08 0a 08 0b 08 04 08 05 |................| 00000390 08 06 04 01 05 01 06 01 03 03 02 03 03 01 02 01 |................| @@ -112,26 +112,26 @@ 00000200 e5 35 16 03 03 00 25 10 00 00 21 20 2f e5 7d a3 |.5....%...! /.}.| 00000210 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 |G.bC.(.._.).0...| 00000220 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 16 03 03 00 |......._X.;t....| -00000230 88 0f 00 00 84 08 04 00 80 0d 7c 62 81 7d fc c9 |..........|b.}..| -00000240 d4 4c 3e dd 4c b0 fe ce 43 90 27 39 2c be 01 24 |.L>.L...C.'9,..$| -00000250 bc 55 f5 87 d7 31 00 47 6c 49 ce 82 db 0e 3d af |.U...1.GlI....=.| -00000260 a5 f3 4a 28 c9 f7 0b d3 68 e2 b8 de 2d b3 d8 5d |..J(....h...-..]| -00000270 c6 6d da 2f 74 c4 0a f4 93 ed 58 10 00 94 55 d6 |.m./t.....X...U.| -00000280 c8 62 d0 35 20 cc 90 dc 70 bf 1d 6f c9 76 10 de |.b.5 ...p..o.v..| -00000290 c2 50 ba e9 b4 bd 80 d7 01 b2 aa 1d 27 03 0f ad |.P..........'...| -000002a0 39 46 ec 30 b0 fb 68 0f 1f b3 4c 0c 26 70 4c 33 |9F.0..h...L.&pL3| -000002b0 bf 18 79 81 11 c0 7f b9 ae 14 03 03 00 01 01 16 |..y.............| -000002c0 03 03 00 28 00 00 00 00 00 00 00 00 a2 ee 76 00 |...(..........v.| -000002d0 77 2b 70 9d f7 0a 11 b4 25 00 07 92 d4 4c 9c 68 |w+p.....%....L.h| -000002e0 64 54 11 6d 39 46 6c ea 20 0c 15 ed |dT.m9Fl. ...| +00000230 88 0f 00 00 84 08 04 00 80 6d 3c 47 cb 26 af e0 |.........m>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 28 f5 f7 fe 25 12 |..........(...%.| -00000010 d8 e2 d9 ee b3 c8 02 a9 6e d9 80 ee 7b 7e 95 1f |........n...{~..| -00000020 8e 97 a6 5f e8 4c ee 67 e9 a1 43 ab 0e 17 ce 92 |..._.L.g..C.....| -00000030 7c 03 0f ||..| +00000000 14 03 03 00 01 01 16 03 03 00 28 cf 58 0e 80 3b |..........(.X..;| +00000010 f9 c1 03 02 1f e3 c9 d0 24 5d 0d 7b 6d 45 f7 1a |........$].{mE..| +00000020 22 a7 94 82 a5 c1 f3 cd df 0f e0 66 0e 6f 62 7b |"..........f.ob{| +00000030 d6 fb 07 |...| >>> Flow 5 (client to server) -00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 4c 67 fb |.............Lg.| -00000010 76 75 0d a4 56 d5 9c 1a 6d 7d 94 06 df 6d 05 98 |vu..V...m}...m..| -00000020 39 be 1e 15 03 03 00 1a 00 00 00 00 00 00 00 02 |9...............| -00000030 31 e3 f4 a1 b7 0e cc 48 17 a6 69 4d ba 43 a0 2d |1......H..iM.C.-| -00000040 12 a2 |..| +00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 66 26 3d |.............f&=| +00000010 31 f1 eb ae 19 79 c5 97 5d 70 b6 2f fc b9 7e c8 |1....y..]p./..~.| +00000020 2f c7 70 15 03 03 00 1a 00 00 00 00 00 00 00 02 |/.p.............| +00000030 30 7b dd 4c f2 3d aa 01 c5 55 07 ed 7a bb ff b6 |0{.L.=...U..z...| +00000040 91 25 |.%| diff --git a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-ECDSA b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-ECDSA index 06a9be85a0..c9d74439f0 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-ECDSA +++ b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-ECDSA @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 69 98 98 c5 21 |....Y...U..i...!| -00000010 2e b7 a6 8e ba d1 11 b4 0a 84 ad 33 b9 8c 81 d7 |...........3....| -00000020 26 ba 77 32 24 e5 c2 95 5f d2 b8 20 23 79 50 e0 |&.w2$..._.. #yP.| -00000030 59 94 e1 05 47 58 ce a0 52 32 3f 96 1a e5 d8 15 |Y...GX..R2?.....| -00000040 ec ae c9 51 a1 1c 19 e0 ac 40 28 9d c0 09 00 00 |...Q.....@(.....| +00000000 16 03 03 00 59 02 00 00 55 03 03 61 3f 7c 9a 87 |....Y...U..a?|..| +00000010 de 3b 63 d2 7e 08 97 8a 84 d1 78 f0 25 0e d6 cd |.;c.~.....x.%...| +00000020 a0 e0 0c 90 e2 63 70 54 5b 3b 11 20 ef dc d6 32 |.....cpT[;. ...2| +00000030 f4 4f 37 07 e9 75 89 a1 2f 8b ca 8a dd 5c 3d 6c |.O7..u../....\=l| +00000040 9c 8b 89 07 38 ac d2 7e ab 98 b9 e5 c0 09 00 00 |....8..~........| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 0e 0b 00 02 0a 00 02 07 00 02 04 30 82 02 |.............0..| 00000070 00 30 82 01 62 02 09 00 b8 bf 2d 47 a0 d2 eb f4 |.0..b.....-G....| @@ -55,18 +55,18 @@ 00000240 13 83 0d 94 06 bb d4 37 7a f6 ec 7a c9 86 2e dd |.......7z..z....| 00000250 d7 11 69 7f 85 7c 56 de fb 31 78 2b e4 c7 78 0d |..i..|V..1x+..x.| 00000260 ae cb be 9e 4e 36 24 31 7b 6a 0f 39 95 12 07 8f |....N6$1{j.9....| -00000270 2a 16 03 03 00 b7 0c 00 00 b3 03 00 1d 20 b8 1d |*............ ..| -00000280 dd 31 88 3e 51 9e d8 b3 7f f0 93 7c 77 70 79 2c |.1.>Q......|wpy,| -00000290 cb 21 d3 b8 8d 3d 65 33 2b a0 0d bb 5f 6a 04 03 |.!...=e3+..._j..| -000002a0 00 8b 30 81 88 02 42 01 50 71 c1 68 9b a3 b3 7f |..0...B.Pq.h....| -000002b0 ab 3f b0 32 d8 57 36 db 3f e5 5b 26 36 51 ed 89 |.?.2.W6.?.[&6Q..| -000002c0 33 a5 e3 e3 49 2b ac d7 b2 9c 3f 6b 4d 8e 21 3d |3...I+....?kM.!=| -000002d0 f6 bc 22 af 0a 48 f0 14 ff ed 14 95 16 e3 45 b3 |.."..H........E.| -000002e0 b3 e7 c2 09 a5 e9 12 a1 4b 02 42 01 35 34 64 1c |........K.B.54d.| -000002f0 d3 28 48 66 82 f3 93 8e 36 0b f7 ac ad f7 f5 4f |.(Hf....6......O| -00000300 e5 fc b7 a8 a3 f0 fb 28 70 9e 36 bc c3 82 1b 22 |.......(p.6...."| -00000310 ef 95 ab 70 28 07 0d aa c0 42 d6 c6 0e ed 37 d7 |...p(....B....7.| -00000320 a6 a0 75 e6 db 03 b7 3c 61 26 8a 47 e1 16 03 03 |..u....'.F......f..| +00000280 13 2d e2 78 c7 1c ad 51 05 77 79 c1 87 b4 0d 1d |.-.x...Q.wy.....| +00000290 95 8d 3f 4d a2 61 94 f8 bf 30 84 b4 42 6e 42 b0 |..?M.a...0..BnB.| +000002a0 aa 73 57 65 86 1e b2 af c8 4b 03 84 1e 2a 3a f4 |.sWe.....K...*:.| +000002b0 6e 45 73 9e 65 0a ca 3f 8a 14 03 03 00 01 01 16 |nEs.e..?........| 000002c0 03 03 00 40 00 00 00 00 00 00 00 00 00 00 00 00 |...@............| -000002d0 00 00 00 00 5e ab 60 05 38 88 e6 d3 ba fd 13 2a |....^.`.8......*| -000002e0 8a 17 c8 6e 54 d4 4e fd c4 12 87 c4 20 ef de 62 |...nT.N..... ..b| -000002f0 fd d3 50 6f 5f 6b 9d b2 00 aa 5a ab 2c d1 3d 39 |..Po_k....Z.,.=9| -00000300 46 20 ab d7 |F ..| +000002d0 00 00 00 00 ae b6 dd 09 5d ec ff 1c 09 88 eb a4 |........].......| +000002e0 be c2 76 48 0c f0 7b 6f 50 f8 52 f9 81 97 28 aa |..vH..{oP.R...(.| +000002f0 31 31 91 ea 98 80 50 55 e0 71 9b 82 9b e8 48 ec |11....PU.q....H.| +00000300 3d 45 c3 f2 |=E..| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 40 d7 80 4d 81 26 |..........@..M.&| -00000010 8f 46 5b b4 63 56 cd bd a6 ca 31 ba 8e b8 5b a2 |.F[.cV....1...[.| -00000020 47 a3 ef 5f ca a2 6a af d2 2c f9 bb c9 1b 20 fc |G.._..j..,.... .| -00000030 a1 78 ca 7e 79 09 66 08 2c cb 0c a5 a3 35 01 ed |.x.~y.f.,....5..| -00000040 90 90 3d 32 f3 7b 30 25 ca 5c 66 |..=2.{0%.\f| +00000000 14 03 03 00 01 01 16 03 03 00 40 ca 5e 0f 47 25 |..........@.^.G%| +00000010 5c a6 64 4d 90 74 ba d2 0b e8 df 3b cf 43 9a a7 |\.dM.t.....;.C..| +00000020 95 28 d2 a6 0c 27 0f a9 d0 bf 11 c1 52 52 04 32 |.(...'......RR.2| +00000030 14 9d 4a a1 35 3b 1d 5c 84 b5 72 79 5a fc 4c c9 |..J.5;.\..ryZ.L.| +00000040 68 ca 64 9f b1 d9 ed 0b 98 66 53 |h.d......fS| >>> Flow 5 (client to server) 00000000 17 03 03 00 30 00 00 00 00 00 00 00 00 00 00 00 |....0...........| -00000010 00 00 00 00 00 58 dc 0e 2b 4a 58 05 aa 22 cb 21 |.....X..+JX..".!| -00000020 1c 6b 93 40 ab 6b 99 aa ae c0 e0 f8 31 22 a3 1b |.k.@.k......1"..| -00000030 4a 98 bc 70 08 15 03 03 00 30 00 00 00 00 00 00 |J..p.....0......| -00000040 00 00 00 00 00 00 00 00 00 00 8a 7b b8 60 83 23 |...........{.`.#| -00000050 53 04 cf 14 b7 cf a9 d8 70 51 fe 92 f3 9c 25 6a |S.......pQ....%j| -00000060 bf 43 e0 bd ca 33 33 6c 30 dc |.C...33l0.| +00000010 00 00 00 00 00 b8 30 3e 37 f6 8f 50 8b 97 78 81 |......0>7..P..x.| +00000020 aa 53 ab 4d 44 a4 0a d7 3c 49 7f 59 33 b5 0e 22 |.S.MD...>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 82 19 ee 7f ef |....Y...U.......| -00000010 86 a3 70 b1 75 84 05 bc 43 ed 52 df bf 42 c4 e3 |..p.u...C.R..B..| -00000020 87 50 59 5d 88 4f df b6 85 0c 5d 20 c3 1b c3 9d |.PY].O....] ....| -00000030 a0 2c 6b 16 1c 35 7a 3b 98 eb ba 8a 55 7a 10 af |.,k..5z;....Uz..| -00000040 c4 7f cd 74 e5 f2 e4 6b c1 58 5f 18 c0 2f 00 00 |...t...k.X_../..| +00000000 16 03 03 00 59 02 00 00 55 03 03 34 d6 64 e9 90 |....Y...U..4.d..| +00000010 47 32 62 4a 36 f9 2f 2b c9 04 24 8d 9d 71 e1 ec |G2bJ6./+..$..q..| +00000020 63 c3 14 73 e6 db 33 53 6e 79 3b 20 10 6c f9 58 |c..s..3Sny; .l.X| +00000030 c2 2a c8 26 39 1c 33 75 f7 7b ab e0 82 ab e1 f1 |.*.&9.3u.{......| +00000040 11 8b d3 58 18 39 11 4f b8 08 12 6b c0 2f 00 00 |...X.9.O...k./..| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 59 0b 00 02 55 00 02 52 00 02 4f 30 82 02 |..Y...U..R..O0..| 00000070 4b 30 82 01 b4 a0 03 02 01 02 02 09 00 e8 f0 9d |K0..............| @@ -60,17 +60,17 @@ 00000290 77 8d 0c 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d |w.......@.a.Lr+.| 000002a0 ae db 46 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db |..F..M...>...B..| 000002b0 fe 3d 13 60 84 5c 21 d3 3b e9 fa e7 16 03 03 00 |.=.`.\!.;.......| -000002c0 ac 0c 00 00 a8 03 00 1d 20 5f 4e f4 61 c0 7a 45 |........ _N.a.zE| -000002d0 82 9e 8e d4 dc cc cf 75 7e 22 47 c4 61 17 fc ae |.......u~"G.a...| -000002e0 b0 0b 10 eb 4b b5 74 38 25 08 04 00 80 d1 db f1 |....K.t8%.......| -000002f0 bf 1a 22 33 54 0f 85 11 3d 07 05 63 c7 1c 71 90 |.."3T...=..c..q.| -00000300 e5 30 8d e6 3b 48 b3 42 e4 2e 72 9d 3e 6b 10 09 |.0..;H.B..r.>k..| -00000310 d6 32 ae 37 d4 37 5e 46 52 52 40 e5 d2 03 a9 db |.2.7.7^FRR@.....| -00000320 89 06 11 db be 67 73 3c 80 51 ce 09 df b0 ea 2a |.....gs<.Q.....*| -00000330 e3 aa 3e c0 4a c4 7d 88 ec 45 7d e8 a8 1e 46 28 |..>.J.}..E}...F(| -00000340 26 9e 38 d2 2a 97 dc a2 90 1a 7c 98 01 d9 f6 22 |&.8.*.....|...."| -00000350 9e 46 4a a2 2f ae 6e a4 3d 00 82 46 8e 8e 04 21 |.FJ./.n.=..F...!| -00000360 e7 39 23 de f6 51 6c 59 5c 63 40 c5 57 16 03 03 |.9#..QlY\c@.W...| +000002c0 ac 0c 00 00 a8 03 00 1d 20 7e 32 3b e9 c4 9d 93 |........ ~2;....| +000002d0 d9 b1 b3 fc 04 33 a6 1b b9 e8 1a 24 79 5e 0d bc |.....3.....$y^..| +000002e0 e2 f9 ba cc 18 15 64 0a 69 08 04 00 80 73 c1 81 |......d.i....s..| +000002f0 fe 44 26 be 95 56 d6 89 59 3d 5f 84 69 31 50 ed |.D&..V..Y=_.i1P.| +00000300 77 a2 67 4a 16 3c dc f2 28 14 4e 3a 90 15 b3 db |w.gJ.<..(.N:....| +00000310 f1 d8 e1 75 7d 61 a6 a0 33 28 72 62 3a 09 93 75 |...u}a..3(rb:..u| +00000320 16 63 a2 8b 89 5d 83 e4 e4 d8 89 4b 82 b5 66 b6 |.c...].....K..f.| +00000330 09 2f 30 3f 66 36 bb ae a1 67 c9 de 40 8d c3 6a |./0?f6...g..@..j| +00000340 5c 96 74 c4 29 c1 3e 6d a0 84 f8 8d d3 0d a5 70 |\.t.).>m.......p| +00000350 fe 38 dc 01 f0 75 64 be bf 38 ab 70 28 e2 06 b0 |.8...ud..8.p(...| +00000360 ea 27 14 3f 0f 4e 4f fc 01 29 b0 40 64 16 03 03 |.'.?.NO..).@d...| 00000370 00 3a 0d 00 00 36 03 01 02 40 00 2e 04 03 05 03 |.:...6...@......| 00000380 06 03 08 07 08 08 08 09 08 0a 08 0b 08 04 08 05 |................| 00000390 08 06 04 01 05 01 06 01 03 03 02 03 03 01 02 01 |................| @@ -112,26 +112,26 @@ 00000200 e5 35 16 03 03 00 25 10 00 00 21 20 2f e5 7d a3 |.5....%...! /.}.| 00000210 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 |G.bC.(.._.).0...| 00000220 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 16 03 03 00 |......._X.;t....| -00000230 88 0f 00 00 84 08 04 00 80 41 a2 d2 32 db ce 5b |.........A..2..[| -00000240 04 45 ad 1c 31 7d f0 bc bb c0 53 65 38 b6 75 10 |.E..1}....Se8.u.| -00000250 de 25 38 c2 3b 54 5b 1e 3d bb d2 6a 70 77 16 62 |.%8.;T[.=..jpw.b| -00000260 c2 e8 d0 17 bd 01 89 89 26 28 75 69 ba 5e a1 4a |........&(ui.^.J| -00000270 6d 7e e6 be 6c 64 7e 8b 0c 45 3b 4b ef 1d 75 69 |m~..ld~..E;K..ui| -00000280 1f 51 4b 02 8e a0 19 de 47 41 44 14 4f e7 1e 23 |.QK.....GAD.O..#| -00000290 b0 c0 41 3f 6a 64 0e 30 80 01 ea d8 a9 75 6d 97 |..A?jd.0.....um.| -000002a0 28 4c ae df b1 6e 53 3b c3 aa 48 f1 5a e8 1c 8f |(L...nS;..H.Z...| -000002b0 ed 8c 59 5d e1 0e 57 b1 7d 14 03 03 00 01 01 16 |..Y]..W.}.......| -000002c0 03 03 00 28 00 00 00 00 00 00 00 00 ee 41 37 7b |...(.........A7{| -000002d0 ea 1e c3 d1 a7 7d 76 5c f8 b6 70 57 3c 02 71 49 |.....}v\..pW<.qI| -000002e0 c5 14 35 bb c3 43 63 61 6c 46 6c 11 |..5..CcalFl.| +00000230 88 0f 00 00 84 08 04 00 80 5f d8 fc 5f fb e6 09 |........._.._...| +00000240 b6 2f ff 22 c5 4c bd 42 99 cb e7 ff 86 95 11 99 |./.".L.B........| +00000250 8f 3e 4a b3 72 78 26 02 2f af 03 a2 39 e7 e2 29 |.>J.rx&./...9..)| +00000260 ce 66 9a 72 1d bf fc 27 87 75 bf f1 ee 18 62 bd |.f.r...'.u....b.| +00000270 47 bc ee 39 fa 9c c2 c5 59 f6 f5 59 09 34 48 a9 |G..9....Y..Y.4H.| +00000280 02 25 e9 66 a8 d5 a6 a6 e2 67 8e a9 53 c1 2e 66 |.%.f.....g..S..f| +00000290 a8 64 3e 5e a7 63 c0 10 36 5e 77 47 23 8f 6f 14 |.d>^.c..6^wG#.o.| +000002a0 59 08 36 e4 2a 47 4d ff 12 b4 be bb 76 8c 21 5e |Y.6.*GM.....v.!^| +000002b0 08 36 34 6d 9e 01 0c 7c 85 14 03 03 00 01 01 16 |.64m...|........| +000002c0 03 03 00 28 00 00 00 00 00 00 00 00 e4 36 4e c9 |...(.........6N.| +000002d0 5c ea e3 59 ae a1 45 74 17 b1 1e fe e4 a9 b8 da |\..Y..Et........| +000002e0 b5 ce 4a 24 39 93 d7 ac 8f fb 74 a0 |..J$9.....t.| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 28 87 e9 a4 2c 0f |..........(...,.| -00000010 b5 52 a7 1b d0 99 86 27 d0 20 3e b5 44 77 0b 8f |.R.....'. >.Dw..| -00000020 d5 4e db dc 52 ab 01 c0 1c fd 85 2c 41 3b d0 14 |.N..R......,A;..| -00000030 11 26 29 |.&)| +00000000 14 03 03 00 01 01 16 03 03 00 28 8c 03 68 37 28 |..........(..h7(| +00000010 47 c5 6c d6 33 ef 18 7e f0 5e 93 fe a5 8a 2e 2a |G.l.3..~.^.....*| +00000020 72 e3 20 4d 98 d5 c5 a1 e2 55 a4 81 2b 0b b1 75 |r. M.....U..+..u| +00000030 6c 02 20 |l. | >>> Flow 5 (client to server) -00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 e7 09 a0 |................| -00000010 90 12 35 3f 8f 87 41 fc aa 13 24 50 9f 69 a5 c7 |..5?..A...$P.i..| -00000020 37 38 02 15 03 03 00 1a 00 00 00 00 00 00 00 02 |78..............| -00000030 08 53 f5 80 5c eb b2 3b 9d be a3 49 46 24 da 5a |.S..\..;...IF$.Z| -00000040 7d 84 |}.| +00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 1c 99 25 |...............%| +00000010 ba ae 73 88 34 3e 85 49 d3 b9 00 77 6e c4 fc 67 |..s.4>.I...wn..g| +00000020 9d c8 e2 15 03 03 00 1a 00 00 00 00 00 00 00 02 |................| +00000030 34 5f 22 7e 6f ee e7 03 fd 9e 30 9d 0f 63 85 d7 |4_"~o.....0..c..| +00000040 c5 b7 |..| diff --git a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSAPKCS1v15 b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSAPKCS1v15 index 48c2868aa6..0d05500264 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSAPKCS1v15 +++ b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSAPKCS1v15 @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 27 d5 26 b1 eb |....Y...U..'.&..| -00000010 43 b9 e2 34 e7 3a e2 5e 73 ee b6 d7 4b 0c 88 49 |C..4.:.^s...K..I| -00000020 04 a8 0e fa f7 a1 79 39 e3 a6 29 20 75 68 40 36 |......y9..) uh@6| -00000030 ee c2 11 37 2f ae 43 85 f1 d0 eb ee 3d 69 99 e2 |...7/.C.....=i..| -00000040 3f f1 91 03 5d 00 af c5 f8 0d 4d dc c0 2f 00 00 |?...].....M../..| +00000000 16 03 03 00 59 02 00 00 55 03 03 57 1c f0 38 28 |....Y...U..W..8(| +00000010 4d 98 4e 9f 99 d8 d7 4d 7d c9 d9 bb 9d 80 b8 a5 |M.N....M}.......| +00000020 ab 06 b4 55 9f 3e 9c ab bb 6a e4 20 40 56 d1 8a |...U.>...j. @V..| +00000030 95 41 5a e0 3b 23 b7 c7 b9 b1 7b 3f b8 7a 02 c3 |.AZ.;#....{?.z..| +00000040 f5 4b 20 b9 1b 42 7a df 81 99 c0 be c0 2f 00 00 |.K ..Bz....../..| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 59 0b 00 02 55 00 02 52 00 02 4f 30 82 02 |..Y...U..R..O0..| 00000070 4b 30 82 01 b4 a0 03 02 01 02 02 09 00 e8 f0 9d |K0..............| @@ -60,17 +60,17 @@ 00000290 77 8d 0c 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d |w.......@.a.Lr+.| 000002a0 ae db 46 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db |..F..M...>...B..| 000002b0 fe 3d 13 60 84 5c 21 d3 3b e9 fa e7 16 03 03 00 |.=.`.\!.;.......| -000002c0 ac 0c 00 00 a8 03 00 1d 20 41 51 d5 70 34 15 c0 |........ AQ.p4..| -000002d0 76 3e 2b 5c e2 de 36 69 a9 2e bf b8 60 b4 3a 56 |v>+\..6i....`.:V| -000002e0 00 73 c1 85 4a b2 3e a6 54 04 01 00 80 5d 44 f2 |.s..J.>.T....]D.| -000002f0 28 99 f6 4f 45 bc 83 ce f7 98 ab 29 21 05 a6 c3 |(..OE......)!...| -00000300 8c a9 ef c2 82 b5 b3 bd 31 09 ae 11 15 fa 21 02 |........1.....!.| -00000310 43 59 00 fb 53 9d 0f bb b0 ab ca ba ce e8 41 28 |CY..S.........A(| -00000320 0a 7b ff cb d4 eb 81 8a a2 ce a6 32 f8 d7 f2 a0 |.{.........2....| -00000330 3b 0d c8 fc 8d 45 a8 4c 66 ef 48 ce 4a fc d3 7a |;....E.Lf.H.J..z| -00000340 19 1d 7f bd 71 c6 61 4a 93 b9 01 c9 39 32 48 ec |....q.aJ....92H.| -00000350 fd 01 c9 32 6b 9f d1 0e c1 62 bc 78 32 34 af 7e |...2k....b.x24.~| -00000360 58 16 d0 4c c7 44 a6 3a e5 4c 89 d6 f3 16 03 03 |X..L.D.:.L......| +000002c0 ac 0c 00 00 a8 03 00 1d 20 ea fc 3d 92 b1 b7 a9 |........ ..=....| +000002d0 28 d1 cf d8 03 d7 91 8f c6 12 01 d8 ba cf fa 9f |(...............| +000002e0 cf 4b bc 8a 29 89 c0 54 4e 04 01 00 80 7d 62 b4 |.K..)..TN....}b.| +000002f0 35 a9 dd 44 4a 31 44 e0 a8 e4 47 86 1b 69 62 87 |5..DJ1D...G..ib.| +00000300 e5 a8 06 e3 6e f1 ef b9 46 bc d8 db c0 75 81 d1 |....n...F....u..| +00000310 4c a2 0d 30 18 cd 89 4b 7b 26 bb 0b 44 2c 56 41 |L..0...K{&..D,VA| +00000320 97 8d be 5e 86 e9 36 e5 d0 04 c8 c3 0c d3 f3 ce |...^..6.........| +00000330 9b 56 6a 6d bc 05 2b 5a 2b fb 26 bd 82 b1 1e 09 |.Vjm..+Z+.&.....| +00000340 8c c5 4c a5 e7 c0 d2 12 77 3e 31 df 19 5e 20 82 |..L.....w>1..^ .| +00000350 4a a3 6d fe 7f ec 4e eb 01 73 e0 6f 6d 9f 77 7a |J.m...N..s.om.wz| +00000360 6d 6b 9c 39 00 45 e2 d8 d9 f2 42 b9 6f 16 03 03 |mk.9.E....B.o...| 00000370 00 0c 0d 00 00 08 01 01 00 02 04 01 00 00 16 03 |................| 00000380 03 00 04 0e 00 00 00 |.......| >>> Flow 3 (client to server) @@ -109,26 +109,26 @@ 00000200 e5 35 16 03 03 00 25 10 00 00 21 20 2f e5 7d a3 |.5....%...! /.}.| 00000210 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 |G.bC.(.._.).0...| 00000220 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 16 03 03 00 |......._X.;t....| -00000230 88 0f 00 00 84 04 01 00 80 02 7e 43 b4 4e a2 07 |..........~C.N..| -00000240 a4 97 70 3f 80 91 5c b5 a0 f9 d7 c4 52 c9 ee 8a |..p?..\.....R...| -00000250 af 59 63 58 bb ac 55 47 cc 25 27 ea ca 48 0e fb |.YcX..UG.%'..H..| -00000260 87 e3 3e 5f 55 67 d8 60 8c 47 45 10 36 aa 66 6c |..>_Ug.`.GE.6.fl| -00000270 6b 16 2b 9e e5 da 50 73 dc 30 ef 2c 01 01 87 2e |k.+...Ps.0.,....| -00000280 68 eb 14 35 f5 ef c4 45 ae 8e 95 29 86 96 6e 04 |h..5...E...)..n.| -00000290 03 d6 3c 29 49 55 7c 7d ea 6c 1a a8 bf f9 5a e1 |..<)IU|}.l....Z.| -000002a0 a9 c4 66 5b 8d b5 78 b8 05 ce 44 ca 98 77 a2 7d |..f[..x...D..w.}| -000002b0 74 26 f4 ed 41 a3 97 2b 29 14 03 03 00 01 01 16 |t&..A..+).......| -000002c0 03 03 00 28 00 00 00 00 00 00 00 00 ac ec 0d 5a |...(...........Z| -000002d0 c7 81 fe c3 b3 ff 3a 6e d0 f3 f7 8e 17 6a 53 db |......:n.....jS.| -000002e0 58 5f 44 bb ce 59 0a 99 06 21 62 24 |X_D..Y...!b$| +00000230 88 0f 00 00 84 04 01 00 80 3d 2d 03 f9 c8 89 09 |.........=-.....| +00000240 5a e2 08 62 f5 9e 8c 38 be 74 6c 17 6d b6 58 b1 |Z..b...8.tl.m.X.| +00000250 17 6c 47 1a 66 83 a9 78 35 1b 3d 8e 2c 38 71 b3 |.lG.f..x5.=.,8q.| +00000260 f3 4d 7d 8a fe 3b ef 19 5a 46 20 5a 38 61 42 dd |.M}..;..ZF Z8aB.| +00000270 d3 21 1b aa 4f 6f 2f 58 ff c0 17 a2 a3 ea f2 d3 |.!..Oo/X........| +00000280 f4 88 c0 d6 a2 99 38 b1 6e 71 fe f8 07 ba 50 7e |......8.nq....P~| +00000290 54 a5 b4 9a 5d 0a 2e 48 d4 f2 c9 89 79 1a ba 8e |T...]..H....y...| +000002a0 10 44 3f 50 f6 7b 27 f1 a0 b2 63 80 42 d4 be 7b |.D?P.{'...c.B..{| +000002b0 0c 91 bf 49 3b 4d 94 04 ec 14 03 03 00 01 01 16 |...I;M..........| +000002c0 03 03 00 28 00 00 00 00 00 00 00 00 6f d2 48 9d |...(........o.H.| +000002d0 1d 53 c5 a4 db b0 ef f9 17 ef 64 4b fd 11 84 ee |.S........dK....| +000002e0 e0 fe 42 30 43 16 a8 dc 11 30 29 b7 |..B0C....0).| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 28 59 19 13 9f ea |..........(Y....| -00000010 68 14 58 ab 09 0c af 4d b4 a1 05 09 47 08 50 cd |h.X....M....G.P.| -00000020 b0 40 a0 3a 3f 89 68 c9 9c ea 8f 69 0a ea e1 75 |.@.:?.h....i...u| -00000030 11 97 ab |...| +00000000 14 03 03 00 01 01 16 03 03 00 28 94 ad 3c 46 c1 |..........(..>> Flow 5 (client to server) -00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 38 f1 0f |.............8..| -00000010 d6 4f 5c 0a 60 1a 9f 97 6d 4a 43 e8 c8 a8 18 7e |.O\.`...mJC....~| -00000020 30 6f 67 15 03 03 00 1a 00 00 00 00 00 00 00 02 |0og.............| -00000030 d9 ac f7 69 ca a2 58 78 10 c2 eb 1a 61 da af 28 |...i..Xx....a..(| -00000040 20 02 | .| +00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 6b 76 96 |.............kv.| +00000010 5d 39 75 c4 e6 6c 94 f7 ab 20 75 d3 9d 90 1d 50 |]9u..l... u....P| +00000020 4a de 73 15 03 03 00 1a 00 00 00 00 00 00 00 02 |J.s.............| +00000030 a0 62 20 d2 d8 2f e8 9f 93 97 9e 3b b9 e8 47 69 |.b ../.....;..Gi| +00000040 3f ee |?.| diff --git a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSAPSS b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSAPSS index 8c901f083e..312674fab5 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSAPSS +++ b/src/crypto/tls/testdata/Client-TLSv12-ClientCert-RSA-RSAPSS @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 ce d1 7f 55 bc |....Y...U.....U.| -00000010 b8 a8 fb 08 cc d4 2d a2 e9 fa ff 43 24 d2 14 04 |......-....C$...| -00000020 ad 5a 05 77 d4 67 04 8b c1 3e 5c 20 31 6e ba 32 |.Z.w.g...>\ 1n.2| -00000030 70 bd f0 c8 55 74 a1 49 f3 9f 93 86 e9 b3 ee 81 |p...Ut.I........| -00000040 3e 54 09 e9 15 78 78 7e 71 2b f5 cd c0 2f 00 00 |>T...xx~q+.../..| +00000000 16 03 03 00 59 02 00 00 55 03 03 e5 8a 69 16 37 |....Y...U....i.7| +00000010 65 58 a7 2b 85 d8 ff 46 bb 32 af b3 10 ef ee 84 |eX.+...F.2......| +00000020 d4 a7 72 d0 5d 8e 59 7a a4 07 fe 20 19 76 75 fd |..r.].Yz... .vu.| +00000030 19 e5 64 98 83 fc 3d 59 4b 8a 39 fc 66 61 c5 5d |..d...=YK.9.fa.]| +00000040 58 09 7d 04 69 3c 30 9c e8 e8 33 6a c0 2f 00 00 |X.}.i<0...3j./..| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 66 0b 00 02 62 00 02 5f 00 02 5c 30 82 02 |..f...b.._..\0..| 00000070 58 30 82 01 8d a0 03 02 01 02 02 11 00 f2 99 26 |X0.............&| @@ -61,17 +61,17 @@ 000002a0 11 89 66 79 d1 8e 88 0e 0b a0 9e 30 2a c0 67 ef |..fy.......0*.g.| 000002b0 ca 46 02 88 e9 53 81 22 69 22 97 ad 80 93 d4 f7 |.F...S."i"......| 000002c0 dd 70 14 24 d7 70 0a 46 a1 16 03 03 00 ac 0c 00 |.p.$.p.F........| -000002d0 00 a8 03 00 1d 20 62 1f 63 aa 80 a5 b5 a3 e3 71 |..... b.c......q| -000002e0 71 63 0d be 4d d2 bd f4 3b 0d 78 e8 c1 fe 43 0d |qc..M...;.x...C.| -000002f0 e3 09 9a 01 ed 72 08 04 00 80 59 a7 96 03 f4 60 |.....r....Y....`| -00000300 fa 56 73 a2 14 e8 1e 0b 66 d5 7e 91 7c 99 50 6b |.Vs.....f.~.|.Pk| -00000310 c0 74 8d 24 a5 98 2d df 47 e4 42 73 09 a0 c4 6a |.t.$..-.G.Bs...j| -00000320 42 22 3d 85 f0 a4 05 f8 b5 74 96 85 f7 b0 22 9a |B"=......t....".| -00000330 ee 25 b5 19 c1 ec f0 3b 32 bd 28 6a eb ac 32 e4 |.%.....;2.(j..2.| -00000340 54 18 2e 6c b9 c0 74 d5 e8 36 2b 47 67 65 ba fb |T..l..t..6+Gge..| -00000350 53 18 b2 e3 30 6c 49 4c 8f 07 91 54 93 47 3b b9 |S...0lIL...T.G;.| -00000360 f1 92 81 53 b9 de 5a f5 28 08 e7 4a 46 fa 63 8f |...S..Z.(..JF.c.| -00000370 d0 66 29 0d 6d f0 6b 11 c1 2b 16 03 03 00 0c 0d |.f).m.k..+......| +000002d0 00 a8 03 00 1d 20 12 58 2b bb a1 46 a0 0c 3b 58 |..... .X+..F..;X| +000002e0 1e 57 93 c2 b2 7f 58 ec d1 ed 91 a1 6d e9 4f 8b |.W....X.....m.O.| +000002f0 cb 81 c4 73 a5 04 08 04 00 80 cd 29 91 fc 9b 6c |...s.......)...l| +00000300 58 f7 34 95 41 87 90 f6 47 7d 26 5f 9c 0e ec 1c |X.4.A...G}&_....| +00000310 90 f0 16 ad 44 9f 4f a9 90 0c f0 b1 d3 39 c8 ab |....D.O......9..| +00000320 87 35 72 71 db d0 4a 05 78 f8 c3 2e 23 2a 57 59 |.5rq..J.x...#*WY| +00000330 ac d4 7f c5 97 7d 0b 1e 12 71 0b cc c7 81 32 0a |.....}...q....2.| +00000340 9f 6e 5d 63 4a 6d e1 f1 b5 17 65 3b 49 3f 11 3a |.n]cJm....e;I?.:| +00000350 ac 05 e3 4b f0 12 c0 b0 ee 51 fb e5 0e 2f 30 3d |...K.....Q.../0=| +00000360 a9 bd 4b de 30 0b bd 41 94 39 92 51 6b ea 89 97 |..K.0..A.9.Qk...| +00000370 36 04 ea ed 01 d9 d4 79 80 61 16 03 03 00 0c 0d |6......y.a......| 00000380 00 00 08 01 01 00 02 08 04 00 00 16 03 03 00 04 |................| 00000390 0e 00 00 00 |....| >>> Flow 3 (client to server) @@ -110,26 +110,26 @@ 00000200 e5 35 16 03 03 00 25 10 00 00 21 20 2f e5 7d a3 |.5....%...! /.}.| 00000210 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 |G.bC.(.._.).0...| 00000220 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 16 03 03 00 |......._X.;t....| -00000230 88 0f 00 00 84 08 04 00 80 a4 3b 32 76 8f fd 9a |..........;2v...| -00000240 42 99 24 e1 58 f8 21 39 b7 b2 55 ed 25 5c 67 a7 |B.$.X.!9..U.%\g.| -00000250 d3 79 f2 04 36 03 18 ad 76 4e db 9f ce 4f 97 86 |.y..6...vN...O..| -00000260 6f 0c 72 f5 8e 52 44 16 01 f2 4d c2 74 9f 75 51 |o.r..RD...M.t.uQ| -00000270 ea a4 0a 9c 1f a0 96 7e 2b e2 fc f9 80 c8 31 f9 |.......~+.....1.| -00000280 40 19 fe 40 d2 62 fd 9c 1a 29 ed ea 33 b3 ac f7 |@..@.b...)..3...| -00000290 e6 52 b6 2b 69 62 b2 a4 8d 62 db 4b 67 d9 fb b0 |.R.+ib...b.Kg...| -000002a0 2a 25 c5 c1 7e ca 7d 56 75 a0 b4 8e 65 18 ea ba |*%..~.}Vu...e...| -000002b0 fb 86 dc 60 b1 d3 fb 4b ce 14 03 03 00 01 01 16 |...`...K........| -000002c0 03 03 00 28 00 00 00 00 00 00 00 00 40 48 84 70 |...(........@H.p| -000002d0 05 89 8a 4d 25 4b 4f 14 96 bd 29 5f f8 1a e5 c0 |...M%KO...)_....| -000002e0 87 f5 b7 1e 1f ba 73 b4 66 e7 9f ea |......s.f...| +00000230 88 0f 00 00 84 08 04 00 80 5a e9 85 d9 20 4b f7 |.........Z... K.| +00000240 3e 70 ad 9b e9 8b 92 28 0f 8e 10 de bf 62 9e 34 |>p.....(.....b.4| +00000250 5b b4 5e be 1e d4 59 18 e2 0b 46 b1 88 10 8f 19 |[.^...Y...F.....| +00000260 3b 34 aa 4b fa 35 c4 f2 b5 09 75 af 7b 62 4f b7 |;4.K.5....u.{bO.| +00000270 e5 6b a5 76 c4 c9 62 f3 36 aa 55 31 a0 6e 71 f1 |.k.v..b.6.U1.nq.| +00000280 3c 40 e4 46 88 1c 96 cf 04 85 cc 92 32 65 49 be |<@.F........2eI.| +00000290 a7 72 c7 2b b1 71 c6 6b a0 87 67 26 8f 5c 14 f7 |.r.+.q.k..g&.\..| +000002a0 18 27 f3 13 f5 b5 31 a0 7e 6a b3 a9 ac b8 06 d5 |.'....1.~j......| +000002b0 e5 9c ec 87 51 1c f6 aa 57 14 03 03 00 01 01 16 |....Q...W.......| +000002c0 03 03 00 28 00 00 00 00 00 00 00 00 3a 36 e8 ed |...(........:6..| +000002d0 d0 88 1f 64 e1 89 b2 3d 2c e4 fb c0 cb 77 56 ca |...d...=,....wV.| +000002e0 ea 63 be 25 e4 eb 99 3e 35 aa f2 75 |.c.%...>5..u| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 28 9b d9 9c b6 21 |..........(....!| -00000010 4f 16 83 6d 53 a4 df 76 a4 79 60 9d fb 92 b0 57 |O..mS..v.y`....W| -00000020 7f 9b 4e 35 80 d6 d4 04 e6 a9 93 62 f7 41 8a 23 |..N5.......b.A.#| -00000030 78 22 4e |x"N| +00000000 14 03 03 00 01 01 16 03 03 00 28 31 96 46 0c 69 |..........(1.F.i| +00000010 f0 46 54 dc 0f c7 1c c0 0f e2 b6 8b 53 71 66 94 |.FT.........Sqf.| +00000020 f8 7b 82 7c 76 ab 8c c3 d0 a0 0a e9 03 e8 bf 4f |.{.|v..........O| +00000030 c4 c5 84 |...| >>> Flow 5 (client to server) -00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 81 49 a3 |..............I.| -00000010 c8 46 e1 9a 79 fa 94 02 69 94 24 0d e2 44 95 76 |.F..y...i.$..D.v| -00000020 ee a0 ca 15 03 03 00 1a 00 00 00 00 00 00 00 02 |................| -00000030 41 df 97 11 9e 64 12 ce 6f 96 be 90 af d8 4a 13 |A....d..o.....J.| -00000040 c5 01 |..| +00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 3c 54 13 |.............>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 fa c6 67 00 b7 |....Y...U....g..| -00000010 e2 10 1e 8e b4 64 0e 4e 78 38 25 ff fb 5f bf 9f |.....d.Nx8%.._..| -00000020 b6 de b2 91 50 6c 67 0a bd dc dd 20 83 f5 41 e7 |....Plg.... ..A.| -00000030 98 0c 38 d9 3b 09 18 d2 2e 16 f5 ef 98 a9 ce 38 |..8.;..........8| -00000040 f1 36 3e bb 6d 45 81 b8 03 82 57 3d c0 09 00 00 |.6>.mE....W=....| +00000000 16 03 03 00 59 02 00 00 55 03 03 eb a2 77 eb b6 |....Y...U....w..| +00000010 1e e4 5c 2c ed 5a dc 93 1b 7e 8a 75 a1 8c ac a6 |..\,.Z...~.u....| +00000020 69 13 f6 f6 a4 69 07 93 99 cf 12 20 37 d7 f8 26 |i....i..... 7..&| +00000030 46 ea 3a 21 03 d0 25 0f 22 84 8d 24 2f 98 3d 42 |F.:!..%."..$/.=B| +00000040 eb 47 1d de 0c 12 ab 95 7a 55 46 f7 c0 09 00 00 |.G......zUF.....| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 0e 0b 00 02 0a 00 02 07 00 02 04 30 82 02 |.............0..| 00000070 00 30 82 01 62 02 09 00 b8 bf 2d 47 a0 d2 eb f4 |.0..b.....-G....| @@ -55,39 +55,39 @@ 00000240 13 83 0d 94 06 bb d4 37 7a f6 ec 7a c9 86 2e dd |.......7z..z....| 00000250 d7 11 69 7f 85 7c 56 de fb 31 78 2b e4 c7 78 0d |..i..|V..1x+..x.| 00000260 ae cb be 9e 4e 36 24 31 7b 6a 0f 39 95 12 07 8f |....N6$1{j.9....| -00000270 2a 16 03 03 00 b7 0c 00 00 b3 03 00 1d 20 da 76 |*............ .v| -00000280 af 3a be 2d da 07 b1 41 61 16 f3 ad c1 3f b5 95 |.:.-...Aa....?..| -00000290 27 4a 91 9d de f0 b8 a3 c7 ad c8 64 47 35 04 03 |'J.........dG5..| -000002a0 00 8b 30 81 88 02 42 01 86 ea 56 df 52 76 06 31 |..0...B...V.Rv.1| -000002b0 ae d9 80 6b 51 a0 61 84 9c a2 e5 aa dc d5 54 ba |...kQ.a.......T.| -000002c0 ca c9 88 d2 90 f6 a1 76 6c 38 39 d4 0b 2e e0 e5 |.......vl89.....| -000002d0 6a f5 f1 98 97 d4 a9 5a 73 a8 c7 67 eb 8b e2 8a |j......Zs..g....| -000002e0 2c 2a 80 a3 7e 5d 5e d8 0c 02 42 01 96 20 c9 4a |,*..~]^...B.. .J| -000002f0 a5 43 f1 c0 08 20 72 ea d2 9c 89 2b ef aa f1 37 |.C... r....+...7| -00000300 ff 00 78 3a 51 61 6a 13 61 7b e9 ea 37 bf 35 18 |..x:Qaj.a{..7.5.| -00000310 5a 19 33 29 4d fe e6 d4 0e cc 1e 21 13 6e ed 62 |Z.3)M......!.n.b| -00000320 bc d5 66 26 a4 82 d5 e0 99 3b ed 70 78 16 03 03 |..f&.....;.px...| +00000270 2a 16 03 03 00 b7 0c 00 00 b3 03 00 1d 20 90 68 |*............ .h| +00000280 81 8b 1d 7f d5 69 36 d3 4e 63 40 fa 3a 21 ee a4 |.....i6.Nc@.:!..| +00000290 c7 b4 09 bc 34 51 89 df d5 d2 79 51 34 32 04 03 |....4Q....yQ42..| +000002a0 00 8b 30 81 88 02 42 01 b4 69 6b 1c e6 35 99 81 |..0...B..ik..5..| +000002b0 fb aa cb b4 2d e9 e0 48 6a 6c 5e 14 54 77 b7 9d |....-..Hjl^.Tw..| +000002c0 df a3 c2 1b 53 8c d2 46 6d 2e ae 83 3a db 7c 86 |....S..Fm...:.|.| +000002d0 4a 45 c7 51 cd 30 d6 8c f5 4f ea 37 cb 1e 27 18 |JE.Q.0...O.7..'.| +000002e0 ba df d5 5f 11 ae 0e af 75 02 42 01 2b 37 2e 6d |..._....u.B.+7.m| +000002f0 7c 11 57 b7 b7 8b 90 73 cd e0 c9 38 3c ee aa d5 ||.W....s...8<...| +00000300 f2 cd ff b9 66 6a be 62 70 74 ee a4 f4 e3 fb 4f |....fj.bpt.....O| +00000310 ed 2e d5 a7 b5 a4 53 c8 1b 17 9e e9 48 e1 dd a6 |......S.....H...| +00000320 e8 6a 05 cf 73 b2 85 11 13 37 be e0 26 16 03 03 |.j..s....7..&...| 00000330 00 04 0e 00 00 00 |......| >>> Flow 3 (client to server) 00000000 16 03 03 00 25 10 00 00 21 20 2f e5 7d a3 47 cd |....%...! /.}.G.| 00000010 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 |bC.(.._.).0.....| 00000020 cf c2 ed 90 99 5f 58 cb 3b 74 14 03 03 00 01 01 |....._X.;t......| 00000030 16 03 03 00 40 00 00 00 00 00 00 00 00 00 00 00 |....@...........| -00000040 00 00 00 00 00 08 0a dc 8c c5 3e 8d 03 ab e1 c3 |..........>.....| -00000050 ea aa 03 d8 1d 19 99 9c 2c 15 09 4b 39 a8 51 c6 |........,..K9.Q.| -00000060 4e 15 46 1c d2 7c b0 a9 4b 7f be c9 35 99 ab db |N.F..|..K...5...| -00000070 4b e0 6c 62 17 |K.lb.| +00000040 00 00 00 00 00 7f 83 b7 cd 14 66 fb c3 2a f9 9f |..........f..*..| +00000050 79 ec 40 e5 dd 15 46 f3 25 8d dd b2 8e d5 78 97 |y.@...F.%.....x.| +00000060 e5 d6 4e 1a 2e 35 21 b2 aa ac 28 6f 2c 36 a6 6e |..N..5!...(o,6.n| +00000070 44 92 84 1b b9 |D....| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 40 ae ce d9 46 bc |..........@...F.| -00000010 2f df aa fb d6 7d 52 e3 e9 a0 e6 e9 22 14 ae fe |/....}R....."...| -00000020 ce 34 c2 b2 16 ae aa 6b 72 90 d3 a6 e9 1e 96 3f |.4.....kr......?| -00000030 fd 45 d7 cc 28 db ac f7 42 55 3e 24 2c 5e dc 3e |.E..(...BU>$,^.>| -00000040 5f 6e 36 76 6e ab 1c 35 76 e5 4b |_n6vn..5v.K| +00000000 14 03 03 00 01 01 16 03 03 00 40 db ee f8 c1 0e |..........@.....| +00000010 7f 23 b4 cb e6 db 03 2a fb 68 40 78 85 03 9e dc |.#.....*.h@x....| +00000020 ac f8 f0 b5 65 8d 7c 01 4a ce 86 29 a9 c5 c3 b2 |....e.|.J..)....| +00000030 12 8d d1 58 af e7 21 75 e4 be f3 c0 03 55 f8 bb |...X..!u.....U..| +00000040 71 bd 85 ee 46 87 a0 32 75 ee 4c |q...F..2u.L| >>> Flow 5 (client to server) 00000000 17 03 03 00 30 00 00 00 00 00 00 00 00 00 00 00 |....0...........| -00000010 00 00 00 00 00 48 f8 b0 95 19 6b 5f 9a 03 5d 10 |.....H....k_..].| -00000020 d6 1a 3c ed d1 f8 73 4f 84 52 63 a2 3a f5 3c 4d |..<...sO.Rc.:.>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 d1 cf 2d 7a f6 |....Y...U....-z.| -00000010 a2 09 06 6e 67 c1 ce 6e ae 25 49 da fc 24 4f d1 |...ng..n.%I..$O.| -00000020 8a a0 2e d0 7f 87 a4 8b 58 c8 37 20 22 d2 39 81 |........X.7 ".9.| -00000030 5b 59 bd 0f 7b 59 b4 2c 38 d4 e0 03 1c 3b 5a 99 |[Y..{Y.,8....;Z.| -00000040 20 57 75 30 3d 3f a8 d9 cd 33 41 17 c0 2b 00 00 | Wu0=?...3A..+..| +00000000 16 03 03 00 59 02 00 00 55 03 03 c9 a1 8b 70 59 |....Y...U.....pY| +00000010 8b 88 41 56 b7 bc 9a 1f 50 57 46 7d 79 d8 ef b2 |..AV....PWF}y...| +00000020 15 3f ad ad bb 48 09 ce e1 c2 2c 20 84 43 65 e7 |.?...H...., .Ce.| +00000030 3f 2f d8 13 9a 79 ac 54 ee b9 13 a1 7c a7 05 f7 |?/...y.T....|...| +00000040 c8 b4 fc bd 20 40 17 ca 15 cd 91 1e c0 2b 00 00 |.... @.......+..| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 0e 0b 00 02 0a 00 02 07 00 02 04 30 82 02 |.............0..| 00000070 00 30 82 01 62 02 09 00 b8 bf 2d 47 a0 d2 eb f4 |.0..b.....-G....| @@ -55,34 +55,34 @@ 00000240 13 83 0d 94 06 bb d4 37 7a f6 ec 7a c9 86 2e dd |.......7z..z....| 00000250 d7 11 69 7f 85 7c 56 de fb 31 78 2b e4 c7 78 0d |..i..|V..1x+..x.| 00000260 ae cb be 9e 4e 36 24 31 7b 6a 0f 39 95 12 07 8f |....N6$1{j.9....| -00000270 2a 16 03 03 00 b6 0c 00 00 b2 03 00 1d 20 1a b3 |*............ ..| -00000280 9a e4 c6 dd ca 36 10 16 55 e4 97 36 a5 b2 e7 e9 |.....6..U..6....| -00000290 42 b3 f3 a0 bb df d8 a5 00 be 40 35 8c 50 04 03 |B.........@5.P..| -000002a0 00 8a 30 81 87 02 42 01 90 c8 0f 71 3e 83 c9 6b |..0...B....q>..k| -000002b0 f2 b0 75 7d 9c 54 d4 33 59 fd ef 69 b4 d9 4d 9b |..u}.T.3Y..i..M.| -000002c0 48 fd cd 45 e5 e4 6c 8a 3a d5 1d 60 dc 88 65 3b |H..E..l.:..`..e;| -000002d0 98 81 e1 69 38 d9 bf fe 19 65 6b d9 da 57 8b d3 |...i8....ek..W..| -000002e0 b3 ef 54 db 4b dc f5 42 02 02 41 0d ab cd 01 a9 |..T.K..B..A.....| -000002f0 fc b8 10 40 2c 1a c7 46 e1 54 c0 5b 7f 24 28 49 |...@,..F.T.[.$(I| -00000300 fc 8b 62 e5 3e 99 db 2f 3d 69 d9 4c 86 c2 45 bb |..b.>../=i.L..E.| -00000310 89 0a f7 2e 7d 9f fb f8 fc 49 f9 c3 fb 21 f6 21 |....}....I...!.!| -00000320 10 35 7f 92 14 09 37 76 8b 2c 6c f2 16 03 03 00 |.5....7v.,l.....| -00000330 04 0e 00 00 00 |.....| +00000270 2a 16 03 03 00 b7 0c 00 00 b3 03 00 1d 20 58 f9 |*............ X.| +00000280 2e 03 90 fa 3d 33 0d 3e e1 3a b1 5a 45 ec 5c ee |....=3.>.:.ZE.\.| +00000290 9f 47 51 4b 93 89 33 11 e0 63 86 fd b2 3b 04 03 |.GQK..3..c...;..| +000002a0 00 8b 30 81 88 02 42 01 c2 fa 7b f8 ed 6b a5 0f |..0...B...{..k..| +000002b0 33 87 02 35 5b 8e 5d 31 5e 92 df c2 90 ae 58 24 |3..5[.]1^.....X$| +000002c0 43 0f ba e3 b8 77 12 7a 97 c3 77 15 62 d3 f2 cc |C....w.z..w.b...| +000002d0 10 cd a9 be b6 b2 37 93 b1 ce 8b b2 6c fa 93 74 |......7.....l..t| +000002e0 5e 14 8e ba 9e d7 66 48 b8 02 42 01 8e 9a 10 1d |^.....fH..B.....| +000002f0 7d e0 d3 cf 0d d0 3c bc 34 1c 16 20 85 50 03 3f |}.....<.4.. .P.?| +00000300 e1 6d a3 a0 d4 6e d8 fd 7e df b4 c1 84 29 c3 68 |.m...n..~....).h| +00000310 c2 01 dd 77 fc 2c a5 8f 3b 74 c6 e4 32 20 b7 a0 |...w.,..;t..2 ..| +00000320 8c 1b 2d 93 6a 9c 8a ed 21 b5 9a e0 cb 16 03 03 |..-.j...!.......| +00000330 00 04 0e 00 00 00 |......| >>> Flow 3 (client to server) 00000000 16 03 03 00 25 10 00 00 21 20 2f e5 7d a3 47 cd |....%...! /.}.G.| 00000010 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 |bC.(.._.).0.....| 00000020 cf c2 ed 90 99 5f 58 cb 3b 74 14 03 03 00 01 01 |....._X.;t......| -00000030 16 03 03 00 28 00 00 00 00 00 00 00 00 0b f4 58 |....(..........X| -00000040 bd 46 cf 10 2b 5b f7 6b 89 44 12 a2 25 95 cd a3 |.F..+[.k.D..%...| -00000050 df ce 5c e4 e2 50 5f ef 06 84 06 03 8f |..\..P_......| +00000030 16 03 03 00 28 00 00 00 00 00 00 00 00 c2 14 2d |....(..........-| +00000040 fc d7 a2 cb 18 b9 2a ae 38 70 b7 78 7c 88 97 d3 |......*.8p.x|...| +00000050 ff 7f df 12 23 96 ab 4d 6c 5c 67 72 c4 |....#..Ml\gr.| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 28 2f 02 07 37 3f |..........(/..7?| -00000010 3c 9d 0a fb 03 31 a2 df 0f d6 b4 53 f8 fa 38 bb |<....1.....S..8.| -00000020 47 ed 9d 69 b7 64 72 75 8a 06 f2 fa 9f 06 a4 91 |G..i.dru........| -00000030 65 c5 6e |e.n| +00000000 14 03 03 00 01 01 16 03 03 00 28 2a dd b3 5b c6 |..........(*..[.| +00000010 76 e7 c0 ac 8c 70 77 d6 d8 4e 79 4a 04 3d 91 a9 |v....pw..NyJ.=..| +00000020 ad 79 ef c9 22 78 17 9e ef b0 03 c8 e6 85 b7 8c |.y.."x..........| +00000030 e5 74 95 |.t.| >>> Flow 5 (client to server) -00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 31 4a a6 |.............1J.| -00000010 a1 88 d0 36 6a 11 b7 4f 81 a8 f5 1d c1 c6 d1 51 |...6j..O.......Q| -00000020 3b a2 b1 15 03 03 00 1a 00 00 00 00 00 00 00 02 |;...............| -00000030 0e 35 89 7d 67 0e 8d b7 6f c9 86 6d 33 05 9f 7c |.5.}g...o..m3..|| -00000040 ab 8e |..| +00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 84 b5 0f |................| +00000010 1f ed f9 4c 0d a1 f3 7b 8e 23 87 65 b1 39 98 50 |...L...{.#.e.9.P| +00000020 3d ff 1b 15 03 03 00 1a 00 00 00 00 00 00 00 02 |=...............| +00000030 aa 34 cc f1 4a d3 de 4c 42 bc 2c 0f 3e 71 af 6b |.4..J..LB.,.>q.k| +00000040 3c fc |<.| diff --git a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES128-SHA256 b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES128-SHA256 index 12b87c95c8..96f6218a35 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES128-SHA256 +++ b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES128-SHA256 @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 bd b8 d6 c0 5c |....Y...U......\| -00000010 0c 7f e3 50 4c 1c d3 b0 0f 67 1a 32 cc 49 18 03 |...PL....g.2.I..| -00000020 41 91 87 43 0c eb 40 53 a4 2c 0c 20 ec a4 59 bd |A..C..@S.,. ..Y.| -00000030 cb 3e b8 94 d9 74 ee ab 8e 7a 24 c8 cc af 08 87 |.>...t...z$.....| -00000040 e7 9c d1 01 4e fe 7d 1d 5d cf e0 2c c0 23 00 00 |....N.}.]..,.#..| +00000000 16 03 03 00 59 02 00 00 55 03 03 87 87 6f ce 44 |....Y...U....o.D| +00000010 94 5f 2f cc 94 03 50 68 a7 4f 37 70 8a d4 cf e3 |._/...Ph.O7p....| +00000020 23 7f 11 f5 93 c7 3f 96 87 49 45 20 9c d4 96 b2 |#.....?..IE ....| +00000030 dc 8c 16 c5 fb cc 2f 8e 0e a5 ef a3 ea cf 57 d0 |....../.......W.| +00000040 09 70 bd 16 c4 d9 e4 1b a0 40 f7 f3 c0 23 00 00 |.p.......@...#..| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 0e 0b 00 02 0a 00 02 07 00 02 04 30 82 02 |.............0..| 00000070 00 30 82 01 62 02 09 00 b8 bf 2d 47 a0 d2 eb f4 |.0..b.....-G....| @@ -55,43 +55,43 @@ 00000240 13 83 0d 94 06 bb d4 37 7a f6 ec 7a c9 86 2e dd |.......7z..z....| 00000250 d7 11 69 7f 85 7c 56 de fb 31 78 2b e4 c7 78 0d |..i..|V..1x+..x.| 00000260 ae cb be 9e 4e 36 24 31 7b 6a 0f 39 95 12 07 8f |....N6$1{j.9....| -00000270 2a 16 03 03 00 b6 0c 00 00 b2 03 00 1d 20 6d 7f |*............ m.| -00000280 23 3f 8c 08 0f db 54 cc dc 84 d7 97 f0 18 85 68 |#?....T........h| -00000290 e3 17 94 f6 48 f3 c2 9c 4c 3e 58 47 ed 29 04 03 |....H...L>XG.)..| -000002a0 00 8a 30 81 87 02 42 01 c1 d9 7a d0 fb d9 ff 31 |..0...B...z....1| -000002b0 78 20 9e 2e 5c f0 22 97 1b 24 e8 50 6f 5d 8c db |x ..\."..$.Po]..| -000002c0 fb 97 0d 2d 73 08 ae 46 14 1c 76 2b 38 ad 75 2d |...-s..F..v+8.u-| -000002d0 a2 8e 5a 99 40 47 51 1f 11 af c0 86 bc c9 3b e3 |..Z.@GQ.......;.| -000002e0 a0 ff 6a e6 87 e6 74 d8 fd 02 41 7a 72 6a 93 12 |..j...t...Azrj..| -000002f0 4b 48 f9 46 af 95 90 1e 3b c7 2c fe 67 a1 44 d8 |KH.F....;.,.g.D.| -00000300 77 1c 7e 03 fe be ba 9d a1 85 81 42 fb 18 7d 08 |w.~........B..}.| -00000310 e6 04 1f 3e 05 eb 48 87 4e 28 1c e9 00 db 7f c4 |...>..H.N(......| -00000320 17 cb 21 02 37 90 47 fd 2f db 95 a7 16 03 03 00 |..!.7.G./.......| +00000270 2a 16 03 03 00 b6 0c 00 00 b2 03 00 1d 20 3f a6 |*............ ?.| +00000280 d1 0d ae 8d c0 06 14 ca da 2c 69 1c f1 84 c4 dd |.........,i.....| +00000290 14 f4 0e a6 ce b5 d6 37 9d 9f a5 ba 7b 74 04 03 |.......7....{t..| +000002a0 00 8a 30 81 87 02 42 00 b5 2b 9a 32 9d af b9 cc |..0...B..+.2....| +000002b0 0d b6 f1 9b 87 35 af d7 dc 04 0f 1b 04 d7 fa 62 |.....5.........b| +000002c0 20 bd 2c 31 41 17 e7 c0 ea 22 78 e4 de 37 14 a8 | .,1A...."x..7..| +000002d0 f9 f3 f1 3e 0c 55 59 b3 e3 0e 31 26 ce d0 c1 19 |...>.UY...1&....| +000002e0 b8 17 07 2a 23 98 7b 17 0f 02 41 41 d5 51 80 4d |...*#.{...AA.Q.M| +000002f0 8a 14 56 b1 39 7b 8b 37 24 ef e0 ec 43 44 5a cc |..V.9{.7$...CDZ.| +00000300 9b ab dc 63 e7 cc 7b 29 c0 66 ae 9c 23 c5 1b 98 |...c..{).f..#...| +00000310 6e 35 64 97 12 43 16 73 a6 6b c8 09 2c 26 7c f5 |n5d..C.s.k..,&|.| +00000320 b1 1f 9f 55 04 9e 53 33 c1 89 7a d0 16 03 03 00 |...U..S3..z.....| 00000330 04 0e 00 00 00 |.....| >>> Flow 3 (client to server) 00000000 16 03 03 00 25 10 00 00 21 20 2f e5 7d a3 47 cd |....%...! /.}.G.| 00000010 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 |bC.(.._.).0.....| 00000020 cf c2 ed 90 99 5f 58 cb 3b 74 14 03 03 00 01 01 |....._X.;t......| 00000030 16 03 03 00 50 00 00 00 00 00 00 00 00 00 00 00 |....P...........| -00000040 00 00 00 00 00 7a c5 98 1b ac 30 7c ea 9b cc 6d |.....z....0|...m| -00000050 5d 40 19 5d 6e 47 8a 46 d4 de 8c a3 f8 9b b1 2c |]@.]nG.F.......,| -00000060 9f 90 e9 83 2c a6 18 9f 39 92 d5 1f ab d5 5a 03 |....,...9.....Z.| -00000070 79 44 36 e3 0d b5 c9 e4 36 73 08 7d 55 e0 23 d6 |yD6.....6s.}U.#.| -00000080 82 f3 d7 4e ba |...N.| +00000040 00 00 00 00 00 d3 72 3f 9d 37 ba 97 55 83 b4 f0 |......r?.7..U...| +00000050 ad 0b f0 48 98 16 05 f1 b5 6e da a4 79 e4 d9 8e |...H.....n..y...| +00000060 62 af b9 a1 d1 a4 5c 04 d2 b1 86 32 af 64 ac 89 |b.....\....2.d..| +00000070 d3 47 5f 61 ae f4 21 5b 8d 4b ff 74 c1 b8 9c de |.G_a..![.K.t....| +00000080 fd 74 a0 99 c1 |.t...| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 50 a4 84 15 44 2e |..........P...D.| -00000010 6e e3 20 8d 7c a0 e4 85 36 7b a6 19 35 38 52 d0 |n. .|...6{..58R.| -00000020 bf 47 7e b4 09 a7 5b 5b e6 7c ad 4a b0 56 0a 28 |.G~...[[.|.J.V.(| -00000030 50 ef 94 89 8b 54 80 06 7a d8 b2 5d 75 ab e2 ff |P....T..z..]u...| -00000040 b1 6c 11 60 d2 0d 06 af bf 45 fd d8 5a 7b 2d 9c |.l.`.....E..Z{-.| -00000050 7c a1 b7 5e 4c 77 c9 ed 56 f0 68 ||..^Lw..V.h| +00000000 14 03 03 00 01 01 16 03 03 00 50 09 3b 3e 7e 2e |..........P.;>~.| +00000010 d8 46 04 ac b0 3d c9 7e ec 28 8c bd 6c 0f a8 b5 |.F...=.~.(..l...| +00000020 af 8c 86 ed 64 81 6c d4 98 9e 56 2a 48 0d 03 40 |....d.l...V*H..@| +00000030 64 3e 25 58 6f 03 6a 4e be a2 11 6f 6f e7 2f c2 |d>%Xo.jN...oo./.| +00000040 8f 78 c4 11 a1 07 21 91 9d 34 01 08 39 0d 07 d2 |.x....!..4..9...| +00000050 d4 a2 cc 2f 25 ea ee 8d 8b 91 f9 |.../%......| >>> Flow 5 (client to server) 00000000 17 03 03 00 40 00 00 00 00 00 00 00 00 00 00 00 |....@...........| -00000010 00 00 00 00 00 0b 1a da c8 8a 8e 62 45 0b b3 69 |...........bE..i| -00000020 6a 6e 43 20 54 ae 4e 10 4b 64 0c e0 d6 1c 77 9d |jnC T.N.Kd....w.| -00000030 bd 23 f7 0a 7d eb 2e 54 9a d7 08 1d c6 af eb a9 |.#..}..T........| -00000040 6e c2 18 b5 95 15 03 03 00 40 00 00 00 00 00 00 |n........@......| -00000050 00 00 00 00 00 00 00 00 00 00 c7 9c 8c 71 7f 00 |.............q..| -00000060 42 8e 5b 14 4a 9b 88 a1 5b 68 b4 45 16 c0 c1 91 |B.[.J...[h.E....| -00000070 3e 9a 9f 84 b2 9b b3 f2 f5 e3 50 53 2e d8 4b 7c |>.........PS..K|| -00000080 2a e8 e9 91 64 81 5a f4 43 f3 |*...d.Z.C.| +00000010 00 00 00 00 00 1d 76 4c fb 46 f8 02 9a bc 07 8d |......vL.F......| +00000020 b0 52 40 44 58 da ad be 3c a6 d7 44 0f 59 98 f3 |.R@DX...<..D.Y..| +00000030 ae 5c d2 04 bb 07 ee f6 99 9d 2c 14 44 3b 90 bc |.\........,.D;..| +00000040 2b e9 bc 37 59 15 03 03 00 40 00 00 00 00 00 00 |+..7Y....@......| +00000050 00 00 00 00 00 00 00 00 00 00 c4 ef 97 87 35 a2 |..............5.| +00000060 2f cc c2 6f 3d d5 f5 6f fd 74 56 50 37 f8 10 e8 |/..o=..o.tVP7...| +00000070 36 f5 fb 6f 7b 5d 20 07 0d 2f 72 46 a7 3a e0 de |6..o{] ../rF.:..| +00000080 39 b3 76 0e 4f c0 e7 85 4b bb |9.v.O...K.| diff --git a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES256-GCM-SHA384 b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES256-GCM-SHA384 index 70608d8e47..90a1639e99 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES256-GCM-SHA384 +++ b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-AES256-GCM-SHA384 @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 97 16 31 62 59 |....Y...U....1bY| -00000010 8f a6 1c c4 b2 65 e5 d3 85 92 16 5e 52 06 03 9f |.....e.....^R...| -00000020 5a 20 35 3f c2 68 a7 3f 40 18 44 20 d1 5f 9f a0 |Z 5?.h.?@.D ._..| -00000030 2c f9 83 69 98 2f 3f ff ad 1c d8 bc ba 36 33 a7 |,..i./?......63.| -00000040 72 8e a4 a7 1e cb 42 db ef 3c ee b0 c0 2c 00 00 |r.....B..<...,..| +00000000 16 03 03 00 59 02 00 00 55 03 03 b8 16 bd ae 15 |....Y...U.......| +00000010 a3 33 52 cc 60 dc 6c fe 7c f3 82 b9 1e 13 ab 87 |.3R.`.l.|.......| +00000020 22 d8 c3 38 dc 8a 76 bb a0 a3 fd 20 8a d1 92 d1 |"..8..v.... ....| +00000030 d6 f3 76 e0 e2 76 32 95 32 a0 eb 5b dc e4 42 81 |..v..v2.2..[..B.| +00000040 14 bb 58 ab b8 e8 9d ee fa 32 58 05 c0 2c 00 00 |..X......2X..,..| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 0e 0b 00 02 0a 00 02 07 00 02 04 30 82 02 |.............0..| 00000070 00 30 82 01 62 02 09 00 b8 bf 2d 47 a0 d2 eb f4 |.0..b.....-G....| @@ -55,34 +55,34 @@ 00000240 13 83 0d 94 06 bb d4 37 7a f6 ec 7a c9 86 2e dd |.......7z..z....| 00000250 d7 11 69 7f 85 7c 56 de fb 31 78 2b e4 c7 78 0d |..i..|V..1x+..x.| 00000260 ae cb be 9e 4e 36 24 31 7b 6a 0f 39 95 12 07 8f |....N6$1{j.9....| -00000270 2a 16 03 03 00 b6 0c 00 00 b2 03 00 1d 20 71 52 |*............ qR| -00000280 57 ca a4 04 3b 72 37 67 bc 0f 5d 37 ac 33 21 9f |W...;r7g..]7.3!.| -00000290 65 cd 27 a1 5f b5 19 ff 9b cb 35 ce 98 76 04 03 |e.'._.....5..v..| -000002a0 00 8a 30 81 87 02 41 13 01 36 e8 6e a5 85 d8 65 |..0...A..6.n...e| -000002b0 d4 0c 38 31 bb 99 5f 39 f9 49 6f b7 bd 75 ef 5c |..81.._9.Io..u.\| -000002c0 87 d6 86 b4 76 25 87 72 50 e7 20 14 5f c4 1e b0 |....v%.rP. ._...| -000002d0 fe c0 8c 44 a7 e0 18 1b 01 38 4d 11 d1 c5 ad 05 |...D.....8M.....| -000002e0 87 09 dd dd 8a f0 96 9c 02 42 00 e4 50 9b 26 b0 |.........B..P.&.| -000002f0 3c 00 7f 66 8b 71 12 cc 7f ba 03 6e b5 d9 3c a5 |<..f.q.....n..<.| -00000300 2e 0a 10 d0 66 0b 82 10 97 45 4e 19 6e 95 7c 52 |....f....EN.n.|R| -00000310 ca b1 ae 96 b7 c4 ee 93 67 41 d7 e4 4c 28 7a d6 |........gA..L(z.| -00000320 70 10 dc 95 f9 22 52 3a 38 74 73 54 16 03 03 00 |p...."R:8tsT....| +00000270 2a 16 03 03 00 b6 0c 00 00 b2 03 00 1d 20 5c 9b |*............ \.| +00000280 9b 29 5c 83 36 b8 20 47 2b 04 0d 1b ab f5 f7 81 |.)\.6. G+.......| +00000290 aa 89 b4 93 37 aa 28 4e 44 e1 22 26 b6 46 04 03 |....7.(ND."&.F..| +000002a0 00 8a 30 81 87 02 42 01 2c 87 df 1f 07 86 36 c8 |..0...B.,.....6.| +000002b0 f6 aa 41 c1 8e 99 6e 12 08 5f e2 62 4b 3a 9b ad |..A...n.._.bK:..| +000002c0 e8 26 1c 95 f9 62 c6 f6 c7 e4 f7 db 3b 23 e5 4f |.&...b......;#.O| +000002d0 03 a1 c6 89 74 cb bd 2a 4e 47 3f 0f bf 28 bb 6d |....t..*NG?..(.m| +000002e0 c0 c6 53 4c 02 0b 9a 30 2d 02 41 0c 6f 26 a5 4c |..SL...0-.A.o&.L| +000002f0 b6 6c 8c ab 82 32 19 a0 f0 1b 41 2d 9d 1d 12 1b |.l...2....A-....| +00000300 91 62 6a 3d 17 92 79 f6 59 45 21 2f 6b d0 cb 7b |.bj=..y.YE!/k..{| +00000310 22 b3 79 80 90 90 81 97 06 c8 59 fd 8b 40 f9 ec |".y.......Y..@..| +00000320 80 58 db fc 5e a2 67 9a 96 01 53 d4 16 03 03 00 |.X..^.g...S.....| 00000330 04 0e 00 00 00 |.....| >>> Flow 3 (client to server) 00000000 16 03 03 00 25 10 00 00 21 20 2f e5 7d a3 47 cd |....%...! /.}.G.| 00000010 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 |bC.(.._.).0.....| 00000020 cf c2 ed 90 99 5f 58 cb 3b 74 14 03 03 00 01 01 |....._X.;t......| -00000030 16 03 03 00 28 00 00 00 00 00 00 00 00 1a c4 04 |....(...........| -00000040 eb 27 48 c1 ed 93 75 73 01 06 e3 55 70 6c c6 a0 |.'H...us...Upl..| -00000050 62 eb f5 a9 f3 8c a5 8a e3 e9 43 a4 2e |b.........C..| +00000030 16 03 03 00 28 00 00 00 00 00 00 00 00 17 be e6 |....(...........| +00000040 ba 39 2d 82 38 6e 09 2c 1c ef d5 1f ad 8e e0 47 |.9-.8n.,.......G| +00000050 2d bc 74 f8 3b ed 86 89 9e e9 a5 01 40 |-.t.;.......@| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 28 6e bc 2f ed 32 |..........(n./.2| -00000010 53 00 47 5c 73 6c e3 86 38 e5 df e2 db 40 bf 31 |S.G\sl..8....@.1| -00000020 87 a5 33 fb af dd c9 c7 1c 98 7b ba 11 42 5e 0a |..3.......{..B^.| -00000030 f1 65 3b |.e;| +00000000 14 03 03 00 01 01 16 03 03 00 28 42 3b b0 5e 66 |..........(B;.^f| +00000010 3e ef a5 3d 49 64 42 34 b1 21 d6 43 d3 f6 f5 84 |>..=IdB4.!.C....| +00000020 21 96 b4 7b ed 73 b5 23 b6 40 cf 86 ab 71 59 58 |!..{.s.#.@...qYX| +00000030 3a bf 79 |:.y| >>> Flow 5 (client to server) -00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 75 32 a8 |.............u2.| -00000010 ce 12 60 b4 d6 83 2c 4a e5 43 cb 6d c8 f3 f2 ee |..`...,J.C.m....| -00000020 8e 1e 2c 15 03 03 00 1a 00 00 00 00 00 00 00 02 |..,.............| -00000030 4e bb e9 81 44 f2 44 90 7c ac 8a 35 a3 ef e2 9b |N...D.D.|..5....| -00000040 d9 2b |.+| +00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 8d 3c f7 |..............<.| +00000010 9e da 91 15 35 10 5f a4 29 32 3f 6a 8c 1d bc 13 |....5._.)2?j....| +00000020 8a 35 2b 15 03 03 00 1a 00 00 00 00 00 00 00 02 |.5+.............| +00000030 1f b3 e3 e3 24 ac 7a a6 ee 81 e7 cc 9e 70 34 2c |....$.z......p4,| +00000040 d2 28 |.(| diff --git a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-CHACHA20-POLY1305 b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-CHACHA20-POLY1305 index 9acc6be054..1b3c37be24 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-CHACHA20-POLY1305 +++ b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-ECDSA-CHACHA20-POLY1305 @@ -1,24 +1,24 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 ce 01 00 00 ca 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 d0 01 00 00 cc 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 08 cc a9 |................| -00000050 13 01 13 03 13 02 01 00 00 79 00 05 00 05 01 00 |.........y......| +00000050 13 01 13 03 13 02 01 00 00 7b 00 05 00 05 01 00 |.........{......| 00000060 00 00 00 00 0a 00 0a 00 08 00 1d 00 17 00 18 00 |................| -00000070 19 00 0b 00 02 01 00 00 0d 00 18 00 16 08 04 08 |................| -00000080 05 08 06 04 01 04 03 05 01 05 03 06 01 06 03 02 |................| -00000090 01 02 03 ff 01 00 01 00 00 12 00 00 00 2b 00 09 |.............+..| -000000a0 08 03 04 03 03 03 02 03 01 00 33 00 26 00 24 00 |..........3.&.$.| -000000b0 1d 00 20 2f e5 7d a3 47 cd 62 43 15 28 da ac 5f |.. /.}.G.bC.(.._| -000000c0 bb 29 07 30 ff f6 84 af c4 cf c2 ed 90 99 5f 58 |.).0.........._X| -000000d0 cb 3b 74 |.;t| +00000070 19 00 0b 00 02 01 00 00 0d 00 1a 00 18 08 04 04 |................| +00000080 03 08 07 08 05 08 06 04 01 05 01 06 01 05 03 06 |................| +00000090 03 02 01 02 03 ff 01 00 01 00 00 12 00 00 00 2b |...............+| +000000a0 00 09 08 03 04 03 03 03 02 03 01 00 33 00 26 00 |............3.&.| +000000b0 24 00 1d 00 20 2f e5 7d a3 47 cd 62 43 15 28 da |$... /.}.G.bC.(.| +000000c0 ac 5f bb 29 07 30 ff f6 84 af c4 cf c2 ed 90 99 |._.).0..........| +000000d0 5f 58 cb 3b 74 |_X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 81 32 be f7 42 |....Y...U...2..B| -00000010 de 0a 50 a4 4e a3 58 2f 7c 6b a8 14 d9 d4 66 ec |..P.N.X/|k....f.| -00000020 ca 4b 07 2e 59 2d f0 b2 24 1d 69 20 53 20 08 85 |.K..Y-..$.i S ..| -00000030 8a 10 34 6d 41 d8 12 02 38 49 d6 1c c8 f5 e3 6c |..4mA...8I.....l| -00000040 bb ac 77 2d 2a 06 69 e9 6c fd d0 da cc a9 00 00 |..w-*.i.l.......| +00000000 16 03 03 00 59 02 00 00 55 03 03 ea 73 50 31 e4 |....Y...U...sP1.| +00000010 7a c7 e2 05 23 a0 22 e3 1a cd 6d b5 0f e7 f2 5e |z...#."...m....^| +00000020 d6 cb 6c 70 05 04 a9 63 4a a3 fc 20 a2 c5 68 f2 |..lp...cJ.. ..h.| +00000030 9b 56 6e 83 66 c1 7f 85 02 b6 6d 37 12 0f 12 5a |.Vn.f.....m7...Z| +00000040 41 7e c3 c9 44 85 3c 00 50 6f c7 f9 cc a9 00 00 |A~..D.<.Po......| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 0e 0b 00 02 0a 00 02 07 00 02 04 30 82 02 |.............0..| 00000070 00 30 82 01 62 02 09 00 b8 bf 2d 47 a0 d2 eb f4 |.0..b.....-G....| @@ -53,32 +53,32 @@ 00000240 13 83 0d 94 06 bb d4 37 7a f6 ec 7a c9 86 2e dd |.......7z..z....| 00000250 d7 11 69 7f 85 7c 56 de fb 31 78 2b e4 c7 78 0d |..i..|V..1x+..x.| 00000260 ae cb be 9e 4e 36 24 31 7b 6a 0f 39 95 12 07 8f |....N6$1{j.9....| -00000270 2a 16 03 03 00 b7 0c 00 00 b3 03 00 1d 20 fd 29 |*............ .)| -00000280 57 4f 25 0b 83 38 bb da 84 c4 39 52 60 97 83 88 |WO%..8....9R`...| -00000290 31 5e 38 df 9c 24 29 8b 29 d7 90 6d 19 56 04 03 |1^8..$).)..m.V..| -000002a0 00 8b 30 81 88 02 42 01 04 ae 1f e9 dd fe 81 62 |..0...B........b| -000002b0 5b 68 b5 2b dd fb d0 92 18 b4 8d 6b ed 87 0e d2 |[h.+.......k....| -000002c0 ba 3c 83 ca f4 a1 09 87 89 bf 0e 5d 40 04 a5 e3 |.<.........]@...| -000002d0 30 22 19 0d 0c be 64 3d c4 8a b4 22 79 98 91 0e |0"....d=..."y...| -000002e0 7a d6 f8 71 75 7f 5b 30 c5 02 42 01 c0 0b 0a 14 |z..qu.[0..B.....| -000002f0 93 15 f3 b4 36 4f 06 7d 70 42 52 b5 10 66 66 db |....6O.}pBR..ff.| -00000300 55 40 2b b9 4c aa 77 11 b8 27 5c aa eb df df a0 |U@+.L.w..'\.....| -00000310 d3 54 ee 14 54 c9 fc e0 a4 10 01 c7 b2 0c 82 6b |.T..T..........k| -00000320 7d c0 b5 80 4d 04 e7 61 63 f9 1e 78 6b 16 03 03 |}...M..ac..xk...| +00000270 2a 16 03 03 00 b7 0c 00 00 b3 03 00 1d 20 a4 6a |*............ .j| +00000280 0d ab f2 7c 1a 31 2a 7d 51 b7 fe 69 cd 59 f5 c1 |...|.1*}Q..i.Y..| +00000290 10 94 a0 b2 6f 6f c4 48 48 9b 20 1e 46 2a 04 03 |....oo.HH. .F*..| +000002a0 00 8b 30 81 88 02 42 00 84 2a 96 88 a4 7a 86 7f |..0...B..*...z..| +000002b0 cf 86 20 37 17 de 54 0c c2 89 5e 27 f4 3b a4 ec |.. 7..T...^'.;..| +000002c0 ce 25 34 4e c7 a8 7d f5 56 6d 96 2c d0 53 ae 42 |.%4N..}.Vm.,.S.B| +000002d0 b5 87 a9 20 9c 4f c9 67 7e ca f6 fc 2f 61 72 35 |... .O.g~.../ar5| +000002e0 78 fe 54 32 1e a1 90 88 c2 02 42 01 a6 7b 98 de |x.T2......B..{..| +000002f0 fd 01 4b 4a 8f 1a e8 18 dd 07 bb 0b 38 41 7f 22 |..KJ........8A."| +00000300 62 3b 7e 37 67 b7 18 46 a7 32 43 1b c9 a9 8a a6 |b;~7g..F.2C.....| +00000310 d7 8a 2f 7b c5 14 f3 33 96 fe 0a fc 22 d0 a5 02 |../{...3...."...| +00000320 37 a5 31 5f b9 6b d2 3b f6 d0 d1 7b a1 16 03 03 |7.1_.k.;...{....| 00000330 00 04 0e 00 00 00 |......| >>> Flow 3 (client to server) 00000000 16 03 03 00 25 10 00 00 21 20 2f e5 7d a3 47 cd |....%...! /.}.G.| 00000010 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 |bC.(.._.).0.....| 00000020 cf c2 ed 90 99 5f 58 cb 3b 74 14 03 03 00 01 01 |....._X.;t......| -00000030 16 03 03 00 20 51 20 c3 d5 2d 48 50 98 1a 00 5c |.... Q ..-HP...\| -00000040 35 83 1d c6 22 8d a3 aa 2b 3a ac bf 68 51 a8 9f |5..."...+:..hQ..| -00000050 23 4b c7 91 df |#K...| +00000030 16 03 03 00 20 f5 a0 28 0a 7e d4 8b a2 b6 e1 af |.... ..(.~......| +00000040 83 e2 50 e8 fc 7e f0 59 21 ed 3d 0d a8 ef a9 b1 |..P..~.Y!.=.....| +00000050 5a 13 2a 1b 2c |Z.*.,| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 20 09 1f 51 48 37 |.......... ..QH7| -00000010 b5 c7 d8 b3 8a 17 48 1d cc b7 32 5d 82 73 ad a2 |......H...2].s..| -00000020 db 4a dc 4a 0d 3b 0b 26 32 56 ee |.J.J.;.&2V.| +00000000 14 03 03 00 01 01 16 03 03 00 20 44 15 68 4d e0 |.......... D.hM.| +00000010 3b 34 c5 77 b2 25 f2 e9 35 75 08 f5 a9 53 c9 65 |;4.w.%..5u...S.e| +00000020 19 36 49 fe 43 e4 f5 48 ac 7c d7 |.6I.C..H.|.| >>> Flow 5 (client to server) -00000000 17 03 03 00 16 de 17 a1 32 d6 09 f3 0d 72 19 eb |........2....r..| -00000010 05 c6 41 f9 0f c6 f7 68 b9 f6 cf 15 03 03 00 12 |..A....h........| -00000020 79 da 43 1b 80 2b d1 46 81 f3 33 78 53 58 79 bc |y.C..+.F..3xSXy.| -00000030 df 51 |.Q| +00000000 17 03 03 00 16 f7 fd 2a 83 90 01 f3 d2 82 dc bd |.......*........| +00000010 6c 33 31 a3 92 0f a4 f5 9c fa f4 15 03 03 00 12 |l31.............| +00000020 9e 60 18 02 f1 0d 2f f5 5f 68 69 ae 62 93 04 6a |.`..../._hi.b..j| +00000030 41 f0 |A.| diff --git a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-AES b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-AES index 8feca539d8..eff5b979f9 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-AES +++ b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-AES @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 1c 68 c5 b0 f8 |....Y...U...h...| -00000010 30 5e df 4e ef 13 06 3c 38 33 bd 70 40 9c 90 cb |0^.N...<83.p@...| -00000020 80 bc 8e 68 af 8f c4 59 1e fd 0d 20 40 58 a4 e2 |...h...Y... @X..| -00000030 32 5a d7 19 11 6c d3 66 94 94 21 02 ca 42 ef 25 |2Z...l.f..!..B.%| -00000040 ce 51 d8 d3 70 07 4f 70 8d c2 8f 55 c0 13 00 00 |.Q..p.Op...U....| +00000000 16 03 03 00 59 02 00 00 55 03 03 f1 07 97 47 f7 |....Y...U.....G.| +00000010 b8 42 f5 ce 2b b5 ec 5a d3 74 f1 fa 1f ea ec 6d |.B..+..Z.t.....m| +00000020 49 4e cf 2e 47 8b 2e 80 9b 8a ed 20 89 ca 35 4a |IN..G...... ..5J| +00000030 f4 35 5e b7 ed b2 96 ad e1 66 1d 43 9d 07 ba ed |.5^......f.C....| +00000040 ff 9d 47 65 c8 7d 91 32 4b 88 4d 83 c0 13 00 00 |..Ge.}.2K.M.....| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 59 0b 00 02 55 00 02 52 00 02 4f 30 82 02 |..Y...U..R..O0..| 00000070 4b 30 82 01 b4 a0 03 02 01 02 02 09 00 e8 f0 9d |K0..............| @@ -60,38 +60,38 @@ 00000290 77 8d 0c 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d |w.......@.a.Lr+.| 000002a0 ae db 46 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db |..F..M...>...B..| 000002b0 fe 3d 13 60 84 5c 21 d3 3b e9 fa e7 16 03 03 00 |.=.`.\!.;.......| -000002c0 ac 0c 00 00 a8 03 00 1d 20 5a a4 2f e5 a1 8d 85 |........ Z./....| -000002d0 b5 4e f8 ac 27 83 77 b5 f5 ec c7 0a 92 39 a3 9e |.N..'.w......9..| -000002e0 31 7f e7 10 8f ac 56 07 74 08 04 00 80 6c 8c 2e |1.....V.t....l..| -000002f0 e8 7c d9 a6 d3 e9 bc 74 20 6a ad 01 80 ca 44 0c |.|.....t j....D.| -00000300 14 5d da 64 bd a3 32 07 03 2c 0a cf 87 56 af 01 |.].d..2..,...V..| -00000310 32 4c 46 df c7 3b 34 56 a6 7a f6 1c 43 fb f0 43 |2LF..;4V.z..C..C| -00000320 54 7c c8 47 0b 02 8e 2d 07 e8 bc 4c b2 9e ea 1d |T|.G...-...L....| -00000330 2b 29 9b e4 5d 5f ee 8a 4a 50 eb ec b7 09 68 e4 |+)..]_..JP....h.| -00000340 c1 99 6a 2d b9 d6 11 b2 9f d9 ee 13 ee 2e b3 d2 |..j-............| -00000350 1e be a0 6a 13 86 f0 53 7f aa 60 8e 87 5f ab 5d |...j...S..`.._.]| -00000360 f1 5a a4 1f 0b 85 b1 31 5f 2f af e9 7a 16 03 03 |.Z.....1_/..z...| +000002c0 ac 0c 00 00 a8 03 00 1d 20 78 22 92 20 a9 be 78 |........ x". ..x| +000002d0 12 0f e6 83 13 3d 13 91 16 11 ca 26 9f b7 37 d5 |.....=.....&..7.| +000002e0 f0 97 f9 f2 01 fd 08 4f 42 08 04 00 80 2c f1 4e |.......OB....,.N| +000002f0 79 63 f2 d9 54 1c 0c 56 fd 56 4d e0 37 ee 5d bb |yc..T..V.VM.7.].| +00000300 22 90 fd ee d9 0f e6 d9 85 41 b9 8d d6 76 5f 05 |"........A...v_.| +00000310 1b 8c d7 4e c5 e8 4e 69 b9 5d de 73 c0 ed 4f 3e |...N..Ni.].s..O>| +00000320 09 9d b0 10 d6 61 87 d8 f9 c2 5b 48 f9 ef dd 65 |.....a....[H...e| +00000330 e6 f8 b0 d2 71 f6 e9 ae b1 c0 ea 90 dc 33 c6 72 |....q........3.r| +00000340 3e 9f 31 d4 ae 78 23 54 7a 4f 02 69 72 c1 06 2f |>.1..x#TzO.ir../| +00000350 3f 3c 7b f2 d8 17 40 a6 95 6d 46 62 6b 54 f1 cf |?<{...@..mFbkT..| +00000360 60 08 63 89 f7 a5 2a 52 3b 0e 0c d6 34 16 03 03 |`.c...*R;...4...| 00000370 00 04 0e 00 00 00 |......| >>> Flow 3 (client to server) 00000000 16 03 03 00 25 10 00 00 21 20 2f e5 7d a3 47 cd |....%...! /.}.G.| 00000010 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 |bC.(.._.).0.....| 00000020 cf c2 ed 90 99 5f 58 cb 3b 74 14 03 03 00 01 01 |....._X.;t......| 00000030 16 03 03 00 40 00 00 00 00 00 00 00 00 00 00 00 |....@...........| -00000040 00 00 00 00 00 d8 4d 17 e4 39 b7 4e 96 d1 1f 75 |......M..9.N...u| -00000050 db 2c 1d df b9 72 c0 c8 5c b3 22 75 98 81 82 67 |.,...r..\."u...g| -00000060 26 2c 45 d3 f0 34 0f 21 0a dd 6b 99 f8 82 70 3c |&,E..4.!..k...p<| -00000070 f3 7d 6a 15 91 |.}j..| +00000040 00 00 00 00 00 96 55 d3 bd a1 b6 de 93 68 19 ed |......U......h..| +00000050 4a 3a cc 42 7c c4 41 1e b5 37 65 d5 84 10 60 3d |J:.B|.A..7e...`=| +00000060 e9 57 29 28 79 54 da 6c 1b 36 6b b1 75 f4 bb 32 |.W)(yT.l.6k.u..2| +00000070 47 8d de c8 7d |G...}| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 40 27 83 f0 1d 2e |..........@'....| -00000010 f9 99 0e 36 76 7f 1e 8f 67 5d a8 26 27 c7 ad a1 |...6v...g].&'...| -00000020 9f 51 ab d8 2e c8 1c 62 a3 01 b6 f3 6a 95 69 5f |.Q.....b....j.i_| -00000030 5b 09 eb d1 e6 19 76 72 4a 67 26 01 78 89 ac 77 |[.....vrJg&.x..w| -00000040 e3 5c 7d 5b 17 79 a7 e4 19 bc 1a |.\}[.y.....| +00000000 14 03 03 00 01 01 16 03 03 00 40 db ed ec 54 4a |..........@...TJ| +00000010 20 d8 a7 ee 12 04 e2 e4 95 b4 a4 a7 e1 80 c8 40 | ..............@| +00000020 81 00 6d 3e 58 26 7c d4 26 84 86 ee b4 fc c5 50 |..m>X&|.&......P| +00000030 46 31 e7 4c 1e fd ed 10 7e 72 45 18 43 db 4c 0d |F1.L....~rE.C.L.| +00000040 b5 49 6c 31 04 f0 85 a7 f8 02 e1 |.Il1.......| >>> Flow 5 (client to server) 00000000 17 03 03 00 30 00 00 00 00 00 00 00 00 00 00 00 |....0...........| -00000010 00 00 00 00 00 24 63 76 ce f0 2a 88 0f 9b 51 b7 |.....$cv..*...Q.| -00000020 15 86 74 ac c9 72 88 7a 26 34 ff c5 ec bb a8 6d |..t..r.z&4.....m| -00000030 44 97 00 3f ff 15 03 03 00 30 00 00 00 00 00 00 |D..?.....0......| -00000040 00 00 00 00 00 00 00 00 00 00 f4 9d 5b 90 05 e6 |............[...| -00000050 42 af 3c 4c 86 d8 ba d5 b7 88 8e ec 8c 07 24 5e |B.>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 9a 06 bc 4a 08 |....Y...U.....J.| -00000010 7c e9 b0 32 64 21 d8 bc 41 77 d0 9f a2 0e 9a d4 ||..2d!..Aw......| -00000020 a8 ef ec 18 b7 8b a9 20 27 0a 85 20 46 c0 6b 77 |....... '.. F.kw| -00000030 56 12 53 90 e4 36 72 c4 cb b8 eb 79 6c ed e8 53 |V.S..6r....yl..S| -00000040 c4 36 48 89 fc 3f ff 07 99 47 2d 9e c0 27 00 00 |.6H..?...G-..'..| +00000000 16 03 03 00 59 02 00 00 55 03 03 9e d4 c1 3e c6 |....Y...U.....>.| +00000010 3d 44 eb a7 b8 c5 c8 e0 ab 16 06 83 67 5e b2 d6 |=D..........g^..| +00000020 67 50 4b f3 24 17 97 19 76 7e 71 20 5a 2b dc 15 |gPK.$...v~q Z+..| +00000030 87 37 be bb c7 9c 38 cd 3e 55 4e 33 32 a0 01 1b |.7....8.>UN32...| +00000040 79 13 87 6a 19 09 42 4c fb 59 97 a8 c0 27 00 00 |y..j..BL.Y...'..| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 59 0b 00 02 55 00 02 52 00 02 4f 30 82 02 |..Y...U..R..O0..| 00000070 4b 30 82 01 b4 a0 03 02 01 02 02 09 00 e8 f0 9d |K0..............| @@ -60,42 +60,42 @@ 00000290 77 8d 0c 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d |w.......@.a.Lr+.| 000002a0 ae db 46 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db |..F..M...>...B..| 000002b0 fe 3d 13 60 84 5c 21 d3 3b e9 fa e7 16 03 03 00 |.=.`.\!.;.......| -000002c0 ac 0c 00 00 a8 03 00 1d 20 9e a1 5f 87 14 ff b2 |........ .._....| -000002d0 0c b8 82 0d 24 d8 bb 98 6d 3a ca 09 0b 6d 94 98 |....$...m:...m..| -000002e0 16 20 ed 31 0e 54 23 d5 47 08 04 00 80 4a e0 aa |. .1.T#.G....J..| -000002f0 d0 e9 cb 75 f0 c0 6e 2d 74 8f c9 91 d9 32 98 22 |...u..n-t....2."| -00000300 99 ef 91 77 41 80 c6 83 11 9a ed 55 61 fd b7 58 |...wA......Ua..X| -00000310 70 7a a6 ce e1 28 40 7d 94 8a 96 64 7f f1 b4 97 |pz...(@}...d....| -00000320 db 83 2c 77 55 f4 38 c6 4b 9a 77 74 9d 6b ae 06 |..,wU.8.K.wt.k..| -00000330 b6 f0 07 61 7a e1 dc d9 e3 c4 32 5c c5 91 23 8d |...az.....2\..#.| -00000340 a3 53 db 37 4d ee e4 65 ef 58 42 af 63 72 06 5c |.S.7M..e.XB.cr.\| -00000350 4e aa f5 07 4c bc b3 1a 00 82 9f 72 34 64 52 e7 |N...L......r4dR.| -00000360 1f 85 7a c3 36 3f 8d 4e 53 89 7b c2 d3 16 03 03 |..z.6?.NS.{.....| +000002c0 ac 0c 00 00 a8 03 00 1d 20 57 62 97 e9 c8 c6 17 |........ Wb.....| +000002d0 73 d2 9e 31 a6 f8 be 03 65 86 af 6b e2 64 bf 7c |s..1....e..k.d.|| +000002e0 4a f1 b9 fb 84 21 10 76 66 08 04 00 80 2d 08 24 |J....!.vf....-.$| +000002f0 06 2a a3 c5 28 c4 22 5b fe 79 4f 91 56 9e 40 6f |.*..(."[.yO.V.@o| +00000300 e6 0c e8 70 e0 35 9e 55 91 51 86 ec ad ff 6b 3f |...p.5.U.Q....k?| +00000310 a7 19 fa 6f 74 47 8a 86 04 b5 8a f0 0a d5 e5 5f |...otG........._| +00000320 ea 30 cc 79 77 3d ac 99 da 41 7f 25 3b da cd da |.0.yw=...A.%;...| +00000330 aa 4e 2a 54 b5 d3 13 4f e4 e9 cb 76 86 fb 0b b5 |.N*T...O...v....| +00000340 0d a3 be ab d2 e6 6e f6 77 7c 60 a7 50 56 43 60 |......n.w|`.PVC`| +00000350 95 ba 95 c4 b5 1a 8d 6a f7 a5 9f 03 27 93 9f 23 |.......j....'..#| +00000360 44 27 88 f0 d5 51 0f ba 43 84 5c 02 14 16 03 03 |D'...Q..C.\.....| 00000370 00 04 0e 00 00 00 |......| >>> Flow 3 (client to server) 00000000 16 03 03 00 25 10 00 00 21 20 2f e5 7d a3 47 cd |....%...! /.}.G.| 00000010 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 |bC.(.._.).0.....| 00000020 cf c2 ed 90 99 5f 58 cb 3b 74 14 03 03 00 01 01 |....._X.;t......| 00000030 16 03 03 00 50 00 00 00 00 00 00 00 00 00 00 00 |....P...........| -00000040 00 00 00 00 00 ec b0 fe b3 cf eb b0 61 c3 77 f0 |............a.w.| -00000050 ad 63 39 5f 7b 17 0e d7 07 7f cb ea 65 0c b0 8b |.c9_{.......e...| -00000060 45 ab 39 c4 d9 06 c7 3b 2e 98 a2 1f c7 e8 e7 e2 |E.9....;........| -00000070 56 a9 6a b3 75 5e c9 27 66 16 af 0e e4 b4 3d 80 |V.j.u^.'f.....=.| -00000080 8b 1c fd ff 34 |....4| +00000040 00 00 00 00 00 02 19 fd 3e 06 0d 12 0d 03 42 da |........>.....B.| +00000050 76 6f e2 e3 96 eb 42 d9 96 b7 0b ae d6 a0 06 fa |vo....B.........| +00000060 57 4e ff 62 85 dd 3f ab 63 f9 73 87 8d 71 6a c6 |WN.b..?.c.s..qj.| +00000070 f4 ef ce f5 55 5b d2 1f b5 33 fd 12 32 bd 5e 1e |....U[...3..2.^.| +00000080 d5 32 91 9a ae |.2...| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 50 8b 01 85 06 02 |..........P.....| -00000010 9c 71 ac 29 4c 4c 54 28 26 f7 1b d0 81 17 2c 95 |.q.)LLT(&.....,.| -00000020 01 73 45 fe f3 1e bd 43 56 83 50 84 ad 13 9c 3f |.sE....CV.P....?| -00000030 2e bc 2b 25 67 ce 76 cc e7 4d cc bb 8f 2e 09 3b |..+%g.v..M.....;| -00000040 48 3b 9c c5 fd 17 73 01 18 41 02 46 c1 9c fe 8f |H;....s..A.F....| -00000050 76 a4 6b 1d 6d 2c 6d c1 73 55 fd |v.k.m,m.sU.| +00000000 14 03 03 00 01 01 16 03 03 00 50 77 80 95 42 a3 |..........Pw..B.| +00000010 2b 1c 16 0f 3b f4 78 2a bd ab 6e d1 33 1e 0e a5 |+...;.x*..n.3...| +00000020 c7 f4 e9 92 82 00 da 44 0f b6 4e f9 1f ef 67 3b |.......D..N...g;| +00000030 de 5c dc 93 07 68 99 1a 70 7f 92 a7 d7 da f3 60 |.\...h..p......`| +00000040 cf d5 f1 f0 5e 75 68 a1 0b 32 eb d2 96 de e6 34 |....^uh..2.....4| +00000050 c3 e3 26 43 1f a2 8d e7 1b fc 76 |..&C......v| >>> Flow 5 (client to server) 00000000 17 03 03 00 40 00 00 00 00 00 00 00 00 00 00 00 |....@...........| -00000010 00 00 00 00 00 ed 8d fb 10 4e 11 3f 61 35 bd 9c |.........N.?a5..| -00000020 40 16 78 f2 06 68 65 d0 06 85 8e 31 f7 8e d6 b0 |@.x..he....1....| -00000030 a4 bb e6 03 f6 2d 36 12 4e b7 96 4b 42 b2 22 9d |.....-6.N..KB.".| -00000040 93 92 10 8b 0a 15 03 03 00 40 00 00 00 00 00 00 |.........@......| -00000050 00 00 00 00 00 00 00 00 00 00 4c 59 01 7a 1e 64 |..........LY.z.d| -00000060 c9 2a d4 a6 d6 e1 64 a2 e9 7d c0 29 32 53 68 e7 |.*....d..}.)2Sh.| -00000070 a0 66 68 87 70 b5 c3 38 cc ac 18 8b bd 3a 50 85 |.fh.p..8.....:P.| -00000080 d9 9a ca 67 c7 13 5c 74 76 68 |...g..\tvh| +00000010 00 00 00 00 00 f8 35 11 b8 23 cf d9 ec a7 d3 b9 |......5..#......| +00000020 60 1e 34 01 20 49 73 ec 72 78 58 24 3b fc a8 42 |`.4. Is.rxX$;..B| +00000030 b2 a9 69 69 40 65 5a c2 8b 9f 0b 0e 70 ab ac 22 |..ii@eZ.....p.."| +00000040 1a ac d6 04 06 15 03 03 00 40 00 00 00 00 00 00 |.........@......| +00000050 00 00 00 00 00 00 00 00 00 00 fe ed 19 a0 84 06 |................| +00000060 8b f0 e8 4e 30 7a 3c 89 a0 a8 59 74 a5 92 73 f3 |...N0z<...Yt..s.| +00000070 df 1b f0 c6 5a 95 d5 1c b6 57 4a 1b 8f 24 59 87 |....Z....WJ..$Y.| +00000080 b4 2b 7f 6f 89 03 e8 6d e5 d9 |.+.o...m..| diff --git a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-CHACHA20-POLY1305 b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-CHACHA20-POLY1305 index 7a015de464..38fb4a0be7 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-CHACHA20-POLY1305 +++ b/src/crypto/tls/testdata/Client-TLSv12-ECDHE-RSA-CHACHA20-POLY1305 @@ -1,24 +1,24 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 ce 01 00 00 ca 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 d0 01 00 00 cc 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 08 cc a8 |................| -00000050 13 01 13 03 13 02 01 00 00 79 00 05 00 05 01 00 |.........y......| +00000050 13 01 13 03 13 02 01 00 00 7b 00 05 00 05 01 00 |.........{......| 00000060 00 00 00 00 0a 00 0a 00 08 00 1d 00 17 00 18 00 |................| -00000070 19 00 0b 00 02 01 00 00 0d 00 18 00 16 08 04 08 |................| -00000080 05 08 06 04 01 04 03 05 01 05 03 06 01 06 03 02 |................| -00000090 01 02 03 ff 01 00 01 00 00 12 00 00 00 2b 00 09 |.............+..| -000000a0 08 03 04 03 03 03 02 03 01 00 33 00 26 00 24 00 |..........3.&.$.| -000000b0 1d 00 20 2f e5 7d a3 47 cd 62 43 15 28 da ac 5f |.. /.}.G.bC.(.._| -000000c0 bb 29 07 30 ff f6 84 af c4 cf c2 ed 90 99 5f 58 |.).0.........._X| -000000d0 cb 3b 74 |.;t| +00000070 19 00 0b 00 02 01 00 00 0d 00 1a 00 18 08 04 04 |................| +00000080 03 08 07 08 05 08 06 04 01 05 01 06 01 05 03 06 |................| +00000090 03 02 01 02 03 ff 01 00 01 00 00 12 00 00 00 2b |...............+| +000000a0 00 09 08 03 04 03 03 03 02 03 01 00 33 00 26 00 |............3.&.| +000000b0 24 00 1d 00 20 2f e5 7d a3 47 cd 62 43 15 28 da |$... /.}.G.bC.(.| +000000c0 ac 5f bb 29 07 30 ff f6 84 af c4 cf c2 ed 90 99 |._.).0..........| +000000d0 5f 58 cb 3b 74 |_X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 94 bf 96 6e 08 |....Y...U.....n.| -00000010 c5 59 6f b5 bc 22 4b 73 4a ba 5f f4 ea 2b 77 1d |.Yo.."KsJ._..+w.| -00000020 f4 6d 45 46 51 3d 0b 60 d8 6b 4e 20 00 4b 00 f8 |.mEFQ=.`.kN .K..| -00000030 a2 81 c9 1c 44 4f 90 73 ea c7 88 70 d9 56 d9 27 |....DO.s...p.V.'| -00000040 c5 0e e2 42 f0 bb 33 73 08 f1 12 ed cc a8 00 00 |...B..3s........| +00000000 16 03 03 00 59 02 00 00 55 03 03 4e fb dc 04 6f |....Y...U..N...o| +00000010 5a 52 37 a3 55 58 26 e5 cd a0 67 4c 0f 87 1a 3a |ZR7.UX&...gL...:| +00000020 f6 84 33 2f 2e 52 d0 48 7c 5b 64 20 6e d0 bc ca |..3/.R.H|[d n...| +00000030 c9 a5 87 8d 99 c5 ec 85 84 89 f0 22 ab 63 55 f4 |...........".cU.| +00000040 70 d7 02 93 b5 fe d7 38 fb c1 b2 da cc a8 00 00 |p......8........| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 59 0b 00 02 55 00 02 52 00 02 4f 30 82 02 |..Y...U..R..O0..| 00000070 4b 30 82 01 b4 a0 03 02 01 02 02 09 00 e8 f0 9d |K0..............| @@ -58,31 +58,31 @@ 00000290 77 8d 0c 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d |w.......@.a.Lr+.| 000002a0 ae db 46 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db |..F..M...>...B..| 000002b0 fe 3d 13 60 84 5c 21 d3 3b e9 fa e7 16 03 03 00 |.=.`.\!.;.......| -000002c0 ac 0c 00 00 a8 03 00 1d 20 cd 60 09 2c c1 3b d6 |........ .`.,.;.| -000002d0 3b d1 c2 3c 9f 30 81 bb 6b 47 a3 cd 26 48 f4 41 |;..<.0..kG..&H.A| -000002e0 c0 d4 36 57 05 33 93 f8 75 08 04 00 80 9a 67 4b |..6W.3..u.....gK| -000002f0 36 41 f9 c1 5c 80 67 9d 0d bc 64 f1 0d 08 e1 9f |6A..\.g...d.....| -00000300 85 88 44 e3 bc c9 b7 f4 86 ec 5c 79 e6 2c ac 07 |..D.......\y.,..| -00000310 e9 cd 6a 7e 68 41 67 71 34 cb c5 13 7c ec 1a 73 |..j~hAgq4...|..s| -00000320 f8 30 da 08 d0 14 c6 4b e4 11 ac c6 34 f9 2f ca |.0.....K....4./.| -00000330 b4 81 35 76 17 9e 7b 4c f3 f7 ac 6d d3 d8 f7 7c |..5v..{L...m...|| -00000340 70 b8 36 fa cc 85 fb 15 8e 82 c6 50 0e 90 c0 39 |p.6........P...9| -00000350 13 d9 02 b1 ae 17 ea 63 c4 e8 21 c2 c0 eb 5c 63 |.......c..!...\c| -00000360 e4 43 c5 1e ae 01 ee 64 23 42 b2 2a 52 16 03 03 |.C.....d#B.*R...| +000002c0 ac 0c 00 00 a8 03 00 1d 20 fc 4b 92 ab d2 cb 4f |........ .K....O| +000002d0 61 aa 86 12 1a 1d 75 be 31 dd b8 ee 6c a6 db bd |a.....u.1...l...| +000002e0 0b ea b2 d5 27 49 42 eb 5a 08 04 00 80 02 ad 71 |....'IB.Z......q| +000002f0 e2 e8 f6 44 3c a6 18 6f 76 ee 9a eb 0e d9 ff cb |...D<..ov.......| +00000300 6d 1e 64 dd 29 1d 8c c8 f6 14 40 c0 12 46 74 4c |m.d.).....@..FtL| +00000310 41 2d 71 5f 9c b7 86 0b fc 66 1e 14 cb 26 d0 d7 |A-q_.....f...&..| +00000320 21 b4 bd c2 04 38 77 90 6a f0 01 18 bd 1c 17 45 |!....8w.j......E| +00000330 7e 38 46 4c 2e 97 ba 11 01 1f 20 cc df f2 6b 5b |~8FL...... ...k[| +00000340 a7 29 c0 52 52 9c 2f 23 bd 1c 72 c2 f2 99 d1 dc |.).RR./#..r.....| +00000350 6a 6c ac 8e 87 8a 00 74 47 2e 99 8d 3f 79 04 60 |jl.....tG...?y.`| +00000360 5e dc ba 86 1c f4 f9 03 22 38 96 a7 b3 16 03 03 |^......."8......| 00000370 00 04 0e 00 00 00 |......| >>> Flow 3 (client to server) 00000000 16 03 03 00 25 10 00 00 21 20 2f e5 7d a3 47 cd |....%...! /.}.G.| 00000010 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 |bC.(.._.).0.....| 00000020 cf c2 ed 90 99 5f 58 cb 3b 74 14 03 03 00 01 01 |....._X.;t......| -00000030 16 03 03 00 20 8f 97 a6 c4 c1 81 4e 87 8c 17 3a |.... ......N...:| -00000040 6b 85 ad 17 6c 5c 14 b6 84 6b 7e a8 c1 ed 2e 6b |k...l\...k~....k| -00000050 fc e8 8f 8b 84 |.....| +00000030 16 03 03 00 20 0a 17 ee 70 8c 50 24 7c 00 b9 6f |.... ...p.P$|..o| +00000040 82 71 ed 2b 8c 0b 4b ff bb 38 bc 12 7e 0c a5 3e |.q.+..K..8..~..>| +00000050 71 a2 ad f8 52 |q...R| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 20 51 59 b7 f0 cf |.......... QY...| -00000010 07 d4 9a 45 15 b6 2f dd 03 5e 46 f9 c8 87 dc 99 |...E../..^F.....| -00000020 d2 56 cd 95 f9 3e 2e 42 19 2e e3 |.V...>.B...| +00000000 14 03 03 00 01 01 16 03 03 00 20 e9 87 55 12 a8 |.......... ..U..| +00000010 ad 68 42 0c 60 12 be 2f 2c e5 00 2d 01 cf 86 a2 |.hB.`../,..-....| +00000020 1b 06 b3 86 bf 88 48 73 7a d3 cc |......Hsz..| >>> Flow 5 (client to server) -00000000 17 03 03 00 16 6d 16 3b 26 a8 60 d8 2c 9f 08 42 |.....m.;&.`.,..B| -00000010 51 bb 2a 58 c3 3b 42 cb 59 46 02 15 03 03 00 12 |Q.*X.;B.YF......| -00000020 1e c6 5e 68 40 58 9c df 5e 11 a3 c2 1e 50 11 d4 |..^h@X..^....P..| -00000030 ff 17 |..| +00000000 17 03 03 00 16 96 75 4c c6 ba b1 ad ae 2f 44 9d |......uL...../D.| +00000010 10 c3 ef e5 dc fb 0a 3e af 6b 6a 15 03 03 00 12 |.......>.kj.....| +00000020 30 13 8f e5 a1 0f 38 67 b9 53 4e 6a 66 ec ee 45 |0.....8g.SNjf..E| +00000030 c2 b2 |..| diff --git a/src/crypto/tls/testdata/Client-TLSv12-Ed25519 b/src/crypto/tls/testdata/Client-TLSv12-Ed25519 new file mode 100644 index 0000000000..35513adb84 --- /dev/null +++ b/src/crypto/tls/testdata/Client-TLSv12-Ed25519 @@ -0,0 +1,68 @@ +>>> Flow 1 (client to server) +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| +00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| +00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| +00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| +00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 32 cc a8 |.............2..| +00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| +00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| +00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| +00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| +>>> Flow 2 (server to client) +00000000 16 03 03 00 59 02 00 00 55 03 03 66 49 2a a6 a4 |....Y...U..fI*..| +00000010 75 60 58 bb 5f 5e 82 cd e5 c0 9f 6d a4 fd 39 3b |u`X._^.....m..9;| +00000020 d9 17 80 14 89 ea 51 c1 b0 43 d6 20 b2 6b 72 81 |......Q..C. .kr.| +00000030 f6 63 20 22 e2 b6 d2 61 aa 87 b6 67 ae 56 78 44 |.c "...a...g.VxD| +00000040 5d 10 8c cf ea 32 cf 9e 92 e5 59 70 cc a9 00 00 |]....2....Yp....| +00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| +00000060 03 01 3c 0b 00 01 38 00 01 35 00 01 32 30 82 01 |..<...8..5..20..| +00000070 2e 30 81 e1 a0 03 02 01 02 02 10 0f 43 1c 42 57 |.0..........C.BW| +00000080 93 94 1d e9 87 e4 f1 ad 15 00 5d 30 05 06 03 2b |..........]0...+| +00000090 65 70 30 12 31 10 30 0e 06 03 55 04 0a 13 07 41 |ep0.1.0...U....A| +000000a0 63 6d 65 20 43 6f 30 1e 17 0d 31 39 30 35 31 36 |cme Co0...190516| +000000b0 32 31 33 38 30 31 5a 17 0d 32 30 30 35 31 35 32 |213801Z..2005152| +000000c0 31 33 38 30 31 5a 30 12 31 10 30 0e 06 03 55 04 |13801Z0.1.0...U.| +000000d0 0a 13 07 41 63 6d 65 20 43 6f 30 2a 30 05 06 03 |...Acme Co0*0...| +000000e0 2b 65 70 03 21 00 3f e2 15 2e e6 e3 ef 3f 4e 85 |+ep.!.?......?N.| +000000f0 4a 75 77 a3 64 9e ed e0 bf 84 2c cc 92 26 8f fa |Juw.d.....,..&..| +00000100 6f 34 83 aa ec 8f a3 4d 30 4b 30 0e 06 03 55 1d |o4.....M0K0...U.| +00000110 0f 01 01 ff 04 04 03 02 05 a0 30 13 06 03 55 1d |..........0...U.| +00000120 25 04 0c 30 0a 06 08 2b 06 01 05 05 07 03 01 30 |%..0...+.......0| +00000130 0c 06 03 55 1d 13 01 01 ff 04 02 30 00 30 16 06 |...U.......0.0..| +00000140 03 55 1d 11 04 0f 30 0d 82 0b 65 78 61 6d 70 6c |.U....0...exampl| +00000150 65 2e 63 6f 6d 30 05 06 03 2b 65 70 03 41 00 63 |e.com0...+ep.A.c| +00000160 44 ed 9c c4 be 53 24 53 9f d2 10 8d 9f e8 21 08 |D....S$S......!.| +00000170 90 95 39 e5 0d c1 55 ff 2c 16 b7 1d fc ab 7d 4d |..9...U.,.....}M| +00000180 d4 e0 93 13 d0 a9 42 e0 b6 6b fe 5d 67 48 d7 9f |......B..k.]gH..| +00000190 50 bc 6c cd 4b 03 83 7c f2 08 58 cd ac cf 0c 16 |P.l.K..|..X.....| +000001a0 03 03 00 6c 0c 00 00 68 03 00 1d 20 c4 8c b8 a2 |...l...h... ....| +000001b0 32 92 b8 22 1f 4c f1 96 00 64 35 47 4e f8 3d 08 |2..".L...d5GN.=.| +000001c0 83 12 fe 95 a8 e4 8e c9 30 27 5c 39 08 07 00 40 |........0'\9...@| +000001d0 7f 90 cf e0 87 69 e3 50 e6 fa 5e 28 a1 0f 79 0a |.....i.P..^(..y.| +000001e0 6e cf f4 87 e8 2f 55 b2 dd cb 5e 8f 9a 14 bd c2 |n..../U...^.....| +000001f0 2b 2b 2d ed 72 40 23 5d 6d f4 89 3a ff 09 82 ec |++-.r@#]m..:....| +00000200 b6 4b 27 9a 08 ea e9 73 94 b4 31 1f e1 39 86 0e |.K'....s..1..9..| +00000210 16 03 03 00 04 0e 00 00 00 |.........| +>>> Flow 3 (client to server) +00000000 16 03 03 00 25 10 00 00 21 20 2f e5 7d a3 47 cd |....%...! /.}.G.| +00000010 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 |bC.(.._.).0.....| +00000020 cf c2 ed 90 99 5f 58 cb 3b 74 14 03 03 00 01 01 |....._X.;t......| +00000030 16 03 03 00 20 8f 97 36 bd 59 ef 8e 2f 11 28 b0 |.... ..6.Y../.(.| +00000040 d7 20 79 bf 04 07 45 f9 89 de b0 c7 55 1a ad 80 |. y...E.....U...| +00000050 0f 8c ef 1d c6 |.....| +>>> Flow 4 (server to client) +00000000 14 03 03 00 01 01 16 03 03 00 20 47 6c 1f 86 47 |.......... Gl..G| +00000010 72 03 94 e0 43 f8 e5 ca 03 7d f5 d5 dd 70 05 f5 |r...C....}...p..| +00000020 98 5d 51 b4 11 49 71 7a fd 37 9a |.]Q..Iqz.7.| +>>> Flow 5 (client to server) +00000000 17 03 03 00 16 b7 a2 f5 8e 7c d3 7d 61 af 29 1c |.........|.}a.).| +00000010 77 0c 8d b4 5b d3 be 77 a6 a5 99 15 03 03 00 12 |w...[..w........| +00000020 d8 23 dc a8 99 fe 1c 6e f2 2f 41 8e df 40 11 4f |.#.....n./A..@.O| +00000030 6b 92 |k.| diff --git a/src/crypto/tls/testdata/Client-TLSv12-ExportKeyingMaterial b/src/crypto/tls/testdata/Client-TLSv12-ExportKeyingMaterial index 1a97ddacf1..c900aa6d5e 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-ExportKeyingMaterial +++ b/src/crypto/tls/testdata/Client-TLSv12-ExportKeyingMaterial @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 de e9 5f 9c 20 |....Y...U...._. | -00000010 c7 37 0d ba e1 2c 21 ad 4b 8a 10 fe 66 4c c2 88 |.7...,!.K...fL..| -00000020 87 fa 43 aa 42 ce e4 ca d8 c2 2d 20 9c cc ef b1 |..C.B.....- ....| -00000030 48 e2 9a e8 5a 61 16 6a 64 dd e9 6e d1 13 06 44 |H...Za.jd..n...D| -00000040 c2 f6 9f e7 68 d3 cc 82 67 54 a0 66 cc a8 00 00 |....h...gT.f....| +00000000 16 03 03 00 59 02 00 00 55 03 03 7c c1 7b 30 03 |....Y...U..|.{0.| +00000010 3c d7 63 5f 47 1c b1 13 56 56 b4 fd 55 e2 27 3e |<.c_G...VV..U.'>| +00000020 39 bb ce 9b 5b 2c 1e 17 33 e1 da 20 65 8b 26 42 |9...[,..3.. e.&B| +00000030 a4 38 29 c7 9a 25 13 fc 1d 69 cb 10 63 c6 26 fc |.8)..%...i..c.&.| +00000040 f4 46 64 31 28 06 b3 a5 a4 c2 f6 5a cc a8 00 00 |.Fd1(......Z....| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 59 0b 00 02 55 00 02 52 00 02 4f 30 82 02 |..Y...U..R..O0..| 00000070 4b 30 82 01 b4 a0 03 02 01 02 02 09 00 e8 f0 9d |K0..............| @@ -60,31 +60,31 @@ 00000290 77 8d 0c 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d |w.......@.a.Lr+.| 000002a0 ae db 46 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db |..F..M...>...B..| 000002b0 fe 3d 13 60 84 5c 21 d3 3b e9 fa e7 16 03 03 00 |.=.`.\!.;.......| -000002c0 ac 0c 00 00 a8 03 00 1d 20 30 ef c9 70 70 23 9c |........ 0..pp#.| -000002d0 b6 1c 35 b7 86 6c 9f 82 62 df e3 6e 47 6d 03 61 |..5..l..b..nGm.a| -000002e0 e6 98 5b ca 86 b9 58 e4 18 08 04 00 80 30 82 41 |..[...X......0.A| -000002f0 64 c8 03 a9 25 d8 b9 2f 9e a1 8d 6e 5b 1c b6 da |d...%../...n[...| -00000300 eb c0 63 2b 72 08 2b 50 2a 2e 4b 91 c1 9f fc df |..c+r.+P*.K.....| -00000310 87 6e 07 6c c5 38 24 02 b4 e8 c5 11 32 17 48 49 |.n.l.8$.....2.HI| -00000320 ce d3 3d d8 58 e6 be 1a fb c1 f2 2a 03 54 8f ae |..=.X......*.T..| -00000330 2a f7 84 2a 65 c3 b7 cd 80 64 b1 8c a8 25 ce 1c |*..*e....d...%..| -00000340 73 eb ae 42 7d 9c 87 72 fe f9 cf bd e1 36 ca bd |s..B}..r.....6..| -00000350 69 78 13 9f c8 16 03 9c 0a 02 1e f3 70 6b ed 38 |ix..........pk.8| -00000360 d8 a5 b6 8a 7e 33 7b 62 44 8b 5e 99 ef 16 03 03 |....~3{bD.^.....| +000002c0 ac 0c 00 00 a8 03 00 1d 20 f7 a2 97 2f 50 e4 e2 |........ .../P..| +000002d0 fa ef 80 67 78 1c aa 6c 03 aa 05 3b 6f 98 97 11 |...gx..l...;o...| +000002e0 7e 55 3d 50 f3 a9 9b 21 65 08 04 00 80 34 4a 4b |~U=P...!e....4JK| +000002f0 4b 6e 86 01 1b 6b 8e 3e 84 01 75 b8 05 c3 b2 52 |Kn...k.>..u....R| +00000300 16 ee ac 61 83 dd 09 32 d5 55 6a 5d d6 6b 4a 1a |...a...2.Uj].kJ.| +00000310 2b f7 09 33 6f 3d 4f c1 e3 aa 03 27 fe af cd 6d |+..3o=O....'...m| +00000320 b8 76 00 02 42 98 e6 f6 b7 ed fb 35 35 29 23 b1 |.v..B......55)#.| +00000330 4d 48 0a ba a1 1b e3 8e a2 cb 80 11 ec 92 20 df |MH............ .| +00000340 1f a4 5e 5d 70 85 8e 5d 85 62 81 1f b3 3a 0d 8d |..^]p..].b...:..| +00000350 9a 07 d3 99 a5 3c 6c c2 52 08 f0 be 50 ed d2 4d |.....>> Flow 3 (client to server) 00000000 16 03 03 00 25 10 00 00 21 20 2f e5 7d a3 47 cd |....%...! /.}.G.| 00000010 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 |bC.(.._.).0.....| 00000020 cf c2 ed 90 99 5f 58 cb 3b 74 14 03 03 00 01 01 |....._X.;t......| -00000030 16 03 03 00 20 04 8f 3f 72 37 39 12 c4 21 b2 45 |.... ..?r79..!.E| -00000040 5d 90 b9 fa d2 24 70 5f 86 d4 8b 24 e6 af 6e 9f |]....$p_...$..n.| -00000050 71 41 17 a8 54 |qA..T| +00000030 16 03 03 00 20 30 8b ea ef 6c 35 97 5b 26 5f ef |.... 0...l5.[&_.| +00000040 bc 28 fd e9 23 73 bb b3 ae 41 0c be 5f 83 a5 f7 |.(..#s...A.._...| +00000050 96 07 8d 81 67 |....g| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 20 b0 70 aa d3 44 |.......... .p..D| -00000010 df ef 57 0f bb 69 b3 09 70 1a ad b0 33 e5 97 8e |..W..i..p...3...| -00000020 bc 34 7f aa 27 a2 81 a3 08 7e b1 |.4..'....~.| +00000000 14 03 03 00 01 01 16 03 03 00 20 29 fa a8 de f2 |.......... )....| +00000010 8f 94 16 fc be 84 93 e9 34 98 c2 44 08 9b 2e 37 |........4..D...7| +00000020 1f 41 61 53 fa 9c 23 ff d8 6d c3 |.AaS..#..m.| >>> Flow 5 (client to server) -00000000 17 03 03 00 16 52 71 2d 1a 29 2c 84 b7 58 d2 b0 |.....Rq-.),..X..| -00000010 92 c3 64 7f 29 3a da d8 c4 7b 73 15 03 03 00 12 |..d.):...{s.....| -00000020 63 04 d5 2b 6c fc 35 82 bb ba ba 9b 01 a0 0c ac |c..+l.5.........| -00000030 2c 12 |,.| +00000000 17 03 03 00 16 ab 6d 32 1c 16 cc 29 b1 21 4c b1 |......m2...).!L.| +00000010 74 4c 50 e3 1f c5 f1 05 6a 8a 92 15 03 03 00 12 |tLP.....j.......| +00000020 18 88 3d 23 81 d7 ba c5 1e 9a c4 3a 1b c8 cd 5b |..=#.......:...[| +00000030 c5 fa |..| diff --git a/src/crypto/tls/testdata/Client-TLSv12-P256-ECDHE b/src/crypto/tls/testdata/Client-TLSv12-P256-ECDHE index 819a061fb4..d75b670e1d 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-P256-ECDHE +++ b/src/crypto/tls/testdata/Client-TLSv12-P256-ECDHE @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 01 13 01 00 01 0f 03 03 00 00 00 00 00 |................| +00000000 16 03 01 01 15 01 00 01 11 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,22 +7,22 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 94 00 05 00 05 01 00 00 00 00 00 0a 00 |................| -00000090 04 00 02 00 17 00 0b 00 02 01 00 00 0d 00 18 00 |................| -000000a0 16 08 04 08 05 08 06 04 01 04 03 05 01 05 03 06 |................| -000000b0 01 06 03 02 01 02 03 ff 01 00 01 00 00 12 00 00 |................| -000000c0 00 2b 00 09 08 03 04 03 03 03 02 03 01 00 33 00 |.+............3.| -000000d0 47 00 45 00 17 00 41 04 1e 18 37 ef 0d 19 51 88 |G.E...A...7...Q.| -000000e0 35 75 71 b5 e5 54 5b 12 2e 8f 09 67 fd a7 24 20 |5uq..T[....g..$ | -000000f0 3e b2 56 1c ce 97 28 5e f8 2b 2d 4f 9e f1 07 9f |>.V...(^.+-O....| -00000100 6c 4b 5b 83 56 e2 32 42 e9 58 b6 d7 49 a6 b5 68 |lK[.V.2B.X..I..h| -00000110 1a 41 03 56 6b dc 5a 89 |.A.Vk.Z.| +00000080 01 00 00 96 00 05 00 05 01 00 00 00 00 00 0a 00 |................| +00000090 04 00 02 00 17 00 0b 00 02 01 00 00 0d 00 1a 00 |................| +000000a0 18 08 04 04 03 08 07 08 05 08 06 04 01 05 01 06 |................| +000000b0 01 05 03 06 03 02 01 02 03 ff 01 00 01 00 00 12 |................| +000000c0 00 00 00 2b 00 09 08 03 04 03 03 03 02 03 01 00 |...+............| +000000d0 33 00 47 00 45 00 17 00 41 04 1e 18 37 ef 0d 19 |3.G.E...A...7...| +000000e0 51 88 35 75 71 b5 e5 54 5b 12 2e 8f 09 67 fd a7 |Q.5uq..T[....g..| +000000f0 24 20 3e b2 56 1c ce 97 28 5e f8 2b 2d 4f 9e f1 |$ >.V...(^.+-O..| +00000100 07 9f 6c 4b 5b 83 56 e2 32 42 e9 58 b6 d7 49 a6 |..lK[.V.2B.X..I.| +00000110 b5 68 1a 41 03 56 6b dc 5a 89 |.h.A.Vk.Z.| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 39 5a 55 c9 46 |....Y...U..9ZU.F| -00000010 87 68 62 04 99 88 9e 60 93 a3 79 c3 d6 e0 30 9f |.hb....`..y...0.| -00000020 e5 2b 70 df 81 1f 33 53 f5 89 91 20 ce 7b aa 43 |.+p...3S... .{.C| -00000030 a2 83 d7 6d 3f b9 86 38 1d 52 da 75 82 2b c6 05 |...m?..8.R.u.+..| -00000040 6f a4 e2 15 27 21 18 36 0d 04 ba 42 c0 2f 00 00 |o...'!.6...B./..| +00000000 16 03 03 00 59 02 00 00 55 03 03 b8 7d f5 69 c3 |....Y...U...}.i.| +00000010 6a ca 8b df f3 30 2c 39 47 2e 74 2e 4f 89 4c 1e |j....0,9G.t.O.L.| +00000020 f0 eb 10 0e 06 1d 2c 4e de 2e 8f 20 6c a0 5b 66 |......,N... l.[f| +00000030 fc a6 05 df 29 6b ce 72 92 e7 d7 78 f5 46 38 f9 |....)k.r...x.F8.| +00000040 91 1c 9a 08 4c b1 9a 41 e5 0c d2 cd c0 2f 00 00 |....L..A...../..| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 59 0b 00 02 55 00 02 52 00 02 4f 30 82 02 |..Y...U..R..O0..| 00000070 4b 30 82 01 b4 a0 03 02 01 02 02 09 00 e8 f0 9d |K0..............| @@ -62,19 +62,19 @@ 00000290 77 8d 0c 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d |w.......@.a.Lr+.| 000002a0 ae db 46 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db |..F..M...>...B..| 000002b0 fe 3d 13 60 84 5c 21 d3 3b e9 fa e7 16 03 03 00 |.=.`.\!.;.......| -000002c0 cd 0c 00 00 c9 03 00 17 41 04 76 c4 5d a9 b6 96 |........A.v.]...| -000002d0 aa 4c e2 26 30 ce 69 90 11 42 fe a4 56 4d 4b 1c |.L.&0.i..B..VMK.| -000002e0 5e 1f e1 23 10 c7 8b 52 5a 04 1f 32 85 98 6b d8 |^..#...RZ..2..k.| -000002f0 97 3a 7b 90 79 94 de f4 85 c8 c5 2a 05 b9 6d 79 |.:{.y......*..my| -00000300 6f fb f8 1e b8 ab b8 e9 c3 91 08 04 00 80 b9 00 |o...............| -00000310 a1 01 7d c7 fd 3e bc ba 44 42 64 68 21 7b b7 98 |..}..>..DBdh!{..| -00000320 c1 9f 17 a6 a1 a3 7f 9e 63 d7 ee b7 53 d4 7c 48 |........c...S.|H| -00000330 89 6e 20 0d 29 a1 b4 56 2c 83 7e d7 ab 3a 28 65 |.n .)..V,.~..:(e| -00000340 03 a1 be 6b 0d 89 39 c4 c9 fc fd 41 f0 bd c2 cb |...k..9....A....| -00000350 40 d5 54 2e 98 0a b1 a0 86 65 cc 6a e9 5f 47 51 |@.T......e.j._GQ| -00000360 a4 b4 40 47 25 ae df 93 c2 b6 eb fe b6 71 fe 04 |..@G%........q..| -00000370 1e 98 d0 91 8b c7 ea 58 91 23 a7 76 67 ba 7a fd |.......X.#.vg.z.| -00000380 49 f0 c2 70 70 50 06 23 5e 31 90 4e 58 98 16 03 |I..ppP.#^1.NX...| +000002c0 cd 0c 00 00 c9 03 00 17 41 04 3e 87 67 8b 87 08 |........A.>.g...| +000002d0 fe 4e 4c c3 6b 42 4b 97 ad f4 1c 83 35 72 db 4f |.NL.kBK.....5r.O| +000002e0 39 83 ea 14 69 bb 8c 87 58 c5 a4 a8 8c d7 9d af |9...i...X.......| +000002f0 7a 5e 58 59 31 4d f2 01 4a 23 51 24 1b 04 0c e3 |z^XY1M..J#Q$....| +00000300 94 9e 1b 6c ad aa 83 fd 2d 36 08 04 00 80 ab e9 |...l....-6......| +00000310 ff 6d 7a cd 3b a7 da ff d5 bd 27 49 68 53 f5 45 |.mz.;.....'IhS.E| +00000320 c3 dd 5b a2 99 fb 8f 24 37 49 d3 08 87 d1 06 98 |..[....$7I......| +00000330 39 72 25 78 b3 05 fb a2 c9 ac f9 c8 f7 fc ea 8a |9r%x............| +00000340 98 ce 78 83 64 f6 e0 c7 44 62 af a7 d5 26 df f1 |..x.d...Db...&..| +00000350 2c cc ce 11 8b 03 4a e1 81 54 3f e1 6e 52 c9 1a |,.....J..T?.nR..| +00000360 d8 95 52 e0 3f a5 e3 c8 12 9a c7 57 5d 46 7a ce |..R.?......W]Fz.| +00000370 56 8a 90 0f 0d 1b ba 58 cf 1c a3 4b 39 5a 08 ee |V......X...K9Z..| +00000380 8a 61 bb 0f 7d f7 0e f2 1f 73 e0 c8 6f 54 16 03 |.a..}....s..oT..| 00000390 03 00 04 0e 00 00 00 |.......| >>> Flow 3 (client to server) 00000000 16 03 03 00 46 10 00 00 42 41 04 1e 18 37 ef 0d |....F...BA...7..| @@ -82,17 +82,17 @@ 00000020 a7 24 20 3e b2 56 1c ce 97 28 5e f8 2b 2d 4f 9e |.$ >.V...(^.+-O.| 00000030 f1 07 9f 6c 4b 5b 83 56 e2 32 42 e9 58 b6 d7 49 |...lK[.V.2B.X..I| 00000040 a6 b5 68 1a 41 03 56 6b dc 5a 89 14 03 03 00 01 |..h.A.Vk.Z......| -00000050 01 16 03 03 00 28 00 00 00 00 00 00 00 00 e8 f8 |.....(..........| -00000060 61 5f dc c0 12 cd e2 09 7a a9 61 4f 77 29 aa 9d |a_......z.aOw)..| -00000070 52 11 b9 35 66 1d ac e1 e7 05 f8 f7 d7 cc |R..5f.........| +00000050 01 16 03 03 00 28 00 00 00 00 00 00 00 00 b8 16 |.....(..........| +00000060 ce 7d df 64 13 07 9e d8 37 bb 3f 9c 9e 2b 3c 0e |.}.d....7.?..+<.| +00000070 26 a7 9d 32 e5 44 b8 d6 66 bc 05 7b 27 7a |&..2.D..f..{'z| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 28 dd 5b e0 29 02 |..........(.[.).| -00000010 9a 71 85 fb c1 d6 c0 fe 89 22 8d 86 9f 64 ab 70 |.q......."...d.p| -00000020 ec 07 9a 61 a0 af 13 7b 04 e2 73 df f6 c2 06 86 |...a...{..s.....| -00000030 a7 b2 65 |..e| +00000000 14 03 03 00 01 01 16 03 03 00 28 c0 73 5c 27 1b |..........(.s\'.| +00000010 19 d0 66 68 ea c5 ad 7d a8 03 37 d2 9a ff 00 c4 |..fh...}..7.....| +00000020 70 65 98 3b 88 59 c0 ca e3 c0 d6 32 0e 8d 15 3c |pe.;.Y.....2...<| +00000030 e2 c3 f3 |...| >>> Flow 5 (client to server) -00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 d8 7a 81 |..............z.| -00000010 28 a5 af fc 7d 02 4a 1c f5 a2 0f 65 65 ad d1 c2 |(...}.J....ee...| -00000020 2b fe 49 15 03 03 00 1a 00 00 00 00 00 00 00 02 |+.I.............| -00000030 94 20 af f9 53 43 6e c0 bd 0a fb ce b8 cc b5 3f |. ..SCn........?| -00000040 39 73 |9s| +00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 28 ef 47 |.............(.G| +00000010 ad 7f 40 4b 34 78 f3 1e 01 a7 f4 20 0a d5 c1 41 |..@K4x..... ...A| +00000020 f7 be 41 15 03 03 00 1a 00 00 00 00 00 00 00 02 |..A.............| +00000030 fb fc eb 14 f2 a6 e7 2e 80 d6 93 31 25 01 e9 d2 |...........1%...| +00000040 c3 ae |..| diff --git a/src/crypto/tls/testdata/Client-TLSv12-RSA-RC4 b/src/crypto/tls/testdata/Client-TLSv12-RSA-RC4 index 6b7f11621b..ab2c4eb14d 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-RSA-RC4 +++ b/src/crypto/tls/testdata/Client-TLSv12-RSA-RC4 @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 51 02 00 00 4d 03 03 c1 47 51 e7 59 |....Q...M...GQ.Y| -00000010 d9 0d ae 9b 9c 93 c6 36 c6 33 e9 38 ba 37 4c 60 |.......6.3.8.7L`| -00000020 ec 0b 63 49 11 67 56 29 1b 78 dd 20 1a 60 41 ea |..cI.gV).x. .`A.| -00000030 93 07 16 61 e4 55 11 3f d1 e2 e6 9d 9f 05 c8 3e |...a.U.?.......>| -00000040 37 47 31 0d f9 5d 7a a5 7b 82 63 23 00 05 00 00 |7G1..]z.{.c#....| +00000000 16 03 03 00 51 02 00 00 4d 03 03 34 50 1f 52 15 |....Q...M..4P.R.| +00000010 85 c7 85 2c 4d a9 b2 0c 49 e5 a3 ea 57 21 96 39 |...,M...I...W!.9| +00000020 db c9 97 b6 c4 d0 81 9a 39 a3 e8 20 59 f5 b9 db |........9.. Y...| +00000030 58 2e ef 1c b3 85 96 27 6a 23 71 3f 5c 72 ce cf |X......'j#q?\r..| +00000040 c5 b7 fe 05 00 f4 65 06 54 c1 2e 7c 00 05 00 00 |......e.T..|....| 00000050 05 ff 01 00 01 00 16 03 03 02 59 0b 00 02 55 00 |..........Y...U.| 00000060 02 52 00 02 4f 30 82 02 4b 30 82 01 b4 a0 03 02 |.R..O0..K0......| 00000070 01 02 02 09 00 e8 f0 9d 3f e2 5b ea a6 30 0d 06 |........?.[..0..| @@ -70,15 +70,15 @@ 00000060 c5 70 0f 08 83 48 e9 48 ef 6e 50 8b 05 7e e5 84 |.p...H.H.nP..~..| 00000070 25 fa 55 c7 ae 31 02 27 00 ef 3f 98 86 20 12 89 |%.U..1.'..?.. ..| 00000080 91 59 28 b4 f7 d7 af d2 69 61 35 14 03 03 00 01 |.Y(.....ia5.....| -00000090 01 16 03 03 00 24 f7 0e a5 ad 5d 6d ab c8 04 b7 |.....$....]m....| -000000a0 07 e7 e7 28 30 72 63 a9 02 05 18 7c 07 61 68 58 |...(0rc....|.ahX| -000000b0 6f 7a 5c d2 4f 32 b5 d3 b1 09 |oz\.O2....| +00000090 01 16 03 03 00 24 ab 48 84 ae 77 f9 8b 82 44 52 |.....$.H..w...DR| +000000a0 3e 65 94 27 cc f2 08 a7 f2 e5 21 0c 02 d0 89 ac |>e.'......!.....| +000000b0 50 be 69 57 c9 7c a0 f2 7f 6d |P.iW.|...m| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 24 93 ef cc 6a e8 |..........$...j.| -00000010 8c e4 16 6e 05 cd 2f 9a 31 52 e8 67 3b 93 83 0e |...n../.1R.g;...| -00000020 f0 29 04 29 40 b7 6a c8 c4 51 a4 6a 9d 5c 17 |.).)@.j..Q.j.\.| +00000000 14 03 03 00 01 01 16 03 03 00 24 61 94 21 65 0f |..........$a.!e.| +00000010 10 ba 0c a6 d9 e3 08 54 86 ae f9 64 c7 e7 f4 4b |.......T...d...K| +00000020 aa f5 19 ca 2a 0d 50 88 85 42 32 14 04 29 d9 |....*.P..B2..).| >>> Flow 5 (client to server) -00000000 17 03 03 00 1a c0 49 e8 30 49 75 60 93 ec 04 e9 |......I.0Iu`....| -00000010 3e 54 66 78 15 8e 1e 31 2e ab 1b c1 43 a3 44 15 |>Tfx...1....C.D.| -00000020 03 03 00 16 34 97 5d 52 01 da 5d 45 c6 51 14 1a |....4.]R..]E.Q..| -00000030 45 8f 96 af fd 6a ea d2 37 cf |E....j..7.| +00000000 17 03 03 00 1a cb 1d 43 67 de 7a 20 c7 ed 46 99 |.......Cg.z ..F.| +00000010 86 1f b9 61 9f c6 34 9a 07 37 3c 94 45 b4 40 15 |...a..4..7<.E.@.| +00000020 03 03 00 16 4e ac d3 12 23 b4 33 bc 5b 03 91 7e |....N...#.3.[..~| +00000030 d9 d0 7f d7 48 3e 8c 16 16 ec |....H>....| diff --git a/src/crypto/tls/testdata/Client-TLSv12-RenegotiateOnce b/src/crypto/tls/testdata/Client-TLSv12-RenegotiateOnce index 9810f52212..8fc6f97832 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-RenegotiateOnce +++ b/src/crypto/tls/testdata/Client-TLSv12-RenegotiateOnce @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 8a b7 29 8f 35 |....Y...U....).5| -00000010 0f 6b 07 77 95 15 94 08 ad b8 e3 8f 97 72 17 b5 |.k.w.........r..| -00000020 79 1d b9 ab 57 d2 58 e0 63 04 8f 20 3b 5d 60 f3 |y...W.X.c.. ;]`.| -00000030 d6 92 21 98 27 3d 20 69 ec c8 47 d0 27 ce 42 39 |..!.'= i..G.'.B9| -00000040 1d 82 b0 e7 ef ca 59 f9 f8 fe 06 79 cc a8 00 00 |......Y....y....| +00000000 16 03 03 00 59 02 00 00 55 03 03 9d 18 45 c0 0c |....Y...U....E..| +00000010 2a 95 e6 13 ac b3 e5 fd fb b1 ed 96 75 8b d3 e9 |*...........u...| +00000020 a9 53 cd a7 43 dc 87 18 ab 98 f4 20 2e 5d 71 f3 |.S..C...... .]q.| +00000030 40 c8 e3 ba b1 5d 88 3d 66 71 65 a1 43 1f e8 65 |@....].=fqe.C..e| +00000040 9c 7b 0a fc b7 81 79 e2 99 c5 c9 3e cc a8 00 00 |.{....y....>....| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 59 0b 00 02 55 00 02 52 00 02 4f 30 82 02 |..Y...U..R..O0..| 00000070 4b 30 82 01 b4 a0 03 02 01 02 02 09 00 e8 f0 9d |K0..............| @@ -60,185 +60,185 @@ 00000290 77 8d 0c 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d |w.......@.a.Lr+.| 000002a0 ae db 46 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db |..F..M...>...B..| 000002b0 fe 3d 13 60 84 5c 21 d3 3b e9 fa e7 16 03 03 00 |.=.`.\!.;.......| -000002c0 ac 0c 00 00 a8 03 00 1d 20 0d 87 80 0d 1d 7c ad |........ .....|.| -000002d0 a2 da 94 09 a5 23 c9 f2 23 cc f2 0a 2e 94 2d 74 |.....#..#.....-t| -000002e0 01 5f 60 63 5b c7 1e a0 45 08 04 00 80 2f 2f 55 |._`c[...E....//U| -000002f0 44 fb f1 5a 0d 37 7c b0 5d 63 bb 7a e3 a8 f3 e9 |D..Z.7|.]c.z....| -00000300 b4 5d a0 ba 31 ec a8 4b 70 5f ce af 98 91 28 0c |.]..1..Kp_....(.| -00000310 47 a2 c9 03 a3 07 e6 67 1e 34 76 cc b8 14 3d 8f |G......g.4v...=.| -00000320 83 6a 10 34 dc 53 7c 57 39 77 49 48 3e dc 0d 37 |.j.4.S|W9wIH>..7| -00000330 8f 37 f7 28 aa 13 19 b1 2f 31 e1 b6 94 45 b1 0d |.7.(..../1...E..| -00000340 ec 9f 39 78 90 24 31 c6 03 88 67 28 72 fa 24 41 |..9x.$1...g(r.$A| -00000350 5c 5e 3f d8 cd e4 58 00 fb 1a ba c9 cc ff 1b 7a |\^?...X........z| -00000360 23 9a fd 38 04 18 6a 82 69 bd e4 59 87 16 03 03 |#..8..j.i..Y....| +000002c0 ac 0c 00 00 a8 03 00 1d 20 c8 2a 20 5e 3c 62 eb |........ .* ^>> Flow 3 (client to server) 00000000 16 03 03 00 25 10 00 00 21 20 2f e5 7d a3 47 cd |....%...! /.}.G.| 00000010 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 |bC.(.._.).0.....| 00000020 cf c2 ed 90 99 5f 58 cb 3b 74 14 03 03 00 01 01 |....._X.;t......| -00000030 16 03 03 00 20 cb 26 0a 53 64 81 75 f6 f6 17 78 |.... .&.Sd.u...x| -00000040 3f a7 96 52 91 70 91 2d 92 67 cb ae f0 8f 84 9d |?..R.p.-.g......| -00000050 ea 17 3f a1 38 |..?.8| +00000030 16 03 03 00 20 41 b1 f9 75 8c 2e 5c 22 45 0e 79 |.... A..u..\"E.y| +00000040 e8 50 65 39 43 57 8f d7 48 c6 89 15 d7 c0 98 88 |.Pe9CW..H.......| +00000050 55 e7 ca eb 4a |U...J| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 20 83 7c 41 9e 33 |.......... .|A.3| -00000010 b0 89 6c 2f 88 99 61 b1 71 30 04 9f df 48 e9 9e |..l/..a.q0...H..| -00000020 50 5f 22 d8 09 49 f6 17 7f 6a 10 |P_"..I...j.| +00000000 14 03 03 00 01 01 16 03 03 00 20 08 71 d8 91 d6 |.......... .q...| +00000010 af 29 72 cb 85 4d a8 b2 50 e5 f4 93 d5 36 5d 6a |.)r..M..P....6]j| +00000020 df 15 b1 65 78 17 d7 4f d6 9f 79 |...ex..O..y| >>> Flow 5 (client to server) -00000000 17 03 03 00 16 63 50 67 b6 7a 7d 4e 3d f5 a9 93 |.....cPg.z}N=...| -00000010 f9 6d 61 ea 46 c7 5d 28 77 ad 12 |.ma.F.](w..| +00000000 17 03 03 00 16 ff 2f ef 38 41 82 36 13 74 3a 38 |....../.8A.6.t:8| +00000010 a8 52 2c bd 4c 15 4b 7b f1 c6 f2 |.R,.L.K{...| >>> Flow 6 (server to client) -00000000 16 03 03 00 14 f4 d1 27 84 c9 8f 32 7c 0f ff e8 |.......'...2|...| -00000010 ee ba 2e 93 29 cb fa 22 52 |....).."R| +00000000 16 03 03 00 14 4b 1e 75 04 1a e1 14 6e 16 79 03 |.....K.u....n.y.| +00000010 9a 3f 87 2b b1 c4 07 d7 53 |.?.+....S| >>> Flow 7 (client to server) -00000000 16 03 03 01 14 ba 60 c0 bb d9 cb 55 0f 08 fc 18 |......`....U....| -00000010 15 81 5d 69 a0 b2 c7 87 94 af c1 63 a6 46 e1 57 |..]i.......c.F.W| -00000020 1e c5 9e 2e f1 aa db ad c9 20 4e a2 88 69 48 b5 |......... N..iH.| -00000030 ed 91 14 f1 d0 ec d2 28 9f e3 b7 de 03 7d 53 a6 |.......(.....}S.| -00000040 25 7f 2f e3 5b 6a 79 29 15 4b 25 90 bf a6 49 0a |%./.[jy).K%...I.| -00000050 29 94 86 29 4b 8b a2 6c 82 1e 0a 57 91 1c 46 f1 |)..)K..l...W..F.| -00000060 94 e3 ef e5 6c d5 e7 c8 82 86 82 dc 48 04 9d 11 |....l.......H...| -00000070 d9 85 1a 41 27 ec 1c 25 72 a5 15 53 ef 70 90 a8 |...A'..%r..S.p..| -00000080 a8 17 ae 4f 22 71 1c d3 7e 00 55 67 67 3b 3d cb |...O"q..~.Ugg;=.| -00000090 2c f3 03 39 f3 d8 46 30 4d 60 c4 58 d1 20 f6 1c |,..9..F0M`.X. ..| -000000a0 f2 13 8d c8 58 36 08 97 c6 82 9e 6d a4 bd 0a 71 |....X6.....m...q| -000000b0 e4 e2 7f 76 69 6f 39 19 43 9f 9c ea 8d fb ec ea |...vio9.C.......| -000000c0 90 a0 e7 67 ea d7 48 c6 e5 ce 7c f6 98 fb 0f 8a |...g..H...|.....| -000000d0 5b 9f 85 0b 9e 6b 50 40 32 12 a0 9e c2 5d d7 af |[....kP@2....]..| -000000e0 b1 57 e0 bf 05 59 3b 4c 93 4f 4b 85 6f 8d bf 65 |.W...Y;L.OK.o..e| -000000f0 94 a9 7c fc ab ef 1a 3a 4e 70 bd 54 35 6d f9 68 |..|....:Np.T5m.h| -00000100 36 8d 5e 30 d7 01 5c 1e b1 91 7c 9a fb 18 08 63 |6.^0..\...|....c| -00000110 28 d8 28 5d 53 1c f9 88 cb |(.(]S....| +00000000 16 03 03 01 16 de 71 13 6c df 97 84 38 ce 2d c6 |......q.l...8.-.| +00000010 e3 39 e0 55 66 4e 3d 5e 6c eb c5 a8 1a aa 66 6a |.9.UfN=^l.....fj| +00000020 32 63 97 22 88 26 b8 ad 5f 0a 78 53 9a a4 29 bb |2c.".&.._.xS..).| +00000030 4e 23 90 36 22 1f a7 3d 9c 06 eb 27 c5 7e fb b2 |N#.6"..=...'.~..| +00000040 bf de 93 c4 aa e1 da cb 23 15 1b 55 2f 54 3d 12 |........#..U/T=.| +00000050 f2 62 7f 1f bb 09 16 be 1d 8b 13 eb 9e 53 e2 15 |.b...........S..| +00000060 a5 37 72 41 48 20 9c e7 a6 ba ba 82 52 9d 2c 99 |.7rAH ......R.,.| +00000070 0a c5 83 e1 7e 22 ec 11 f3 50 64 6f 36 ef 43 fd |....~"...Pdo6.C.| +00000080 98 92 e4 f6 b6 fb d2 a7 1f dd f8 2a 6d 78 3b ea |...........*mx;.| +00000090 de 84 4e 11 a1 0a 0b f6 ea c5 78 63 82 7a 0c fc |..N.......xc.z..| +000000a0 9e 96 b2 a5 ce a8 83 ab 02 1e b1 e1 e0 12 92 8a |................| +000000b0 19 7a 72 31 d0 92 95 e7 f2 f1 63 d1 80 4a c2 be |.zr1......c..J..| +000000c0 b5 f4 f9 23 8d ab 21 8f c3 3d 99 5d f0 aa d2 3a |...#..!..=.]...:| +000000d0 ee 43 17 ba d2 6b d9 2c ef b4 55 3c af e7 d3 22 |.C...k.,..U<..."| +000000e0 c8 70 c5 3b 0b a2 02 54 a5 2e 8d 06 56 76 f9 3f |.p.;...T....Vv.?| +000000f0 d1 b6 b7 ea 2c 90 4d 37 3f 4b 05 8a ea 88 dc 5e |....,.M7?K.....^| +00000100 04 50 a3 d2 46 d5 22 08 e1 d6 4e a3 40 ae 0c cc |.P..F."...N.@...| +00000110 c4 7f be ac cd b9 74 07 ad c7 07 |......t....| >>> Flow 8 (server to client) -00000000 16 03 03 00 81 b9 47 ca 9a 81 1b 3e 4e 21 cf 05 |......G....>N!..| -00000010 99 31 4c 2a d4 72 9d 71 1f b9 87 e7 19 36 60 84 |.1L*.r.q.....6`.| -00000020 e4 be 4a d9 7d 10 ad b1 d2 28 58 5b 47 09 cd 19 |..J.}....(X[G...| -00000030 de d3 76 c4 56 e1 19 f5 a3 e2 e3 bd 8b d0 d9 e0 |..v.V...........| -00000040 75 b2 d3 23 04 f0 65 ef 22 f6 10 13 28 80 1b c5 |u..#..e."...(...| -00000050 69 75 7b 8c e6 cb 0e f5 e7 e8 fa 1e d0 e3 c3 24 |iu{............$| -00000060 52 83 c9 a2 5b 57 94 da b9 f2 5e 0a bc f4 a0 da |R...[W....^.....| -00000070 a1 02 b5 18 20 de 40 4e 52 97 12 6b e6 00 b6 eb |.... .@NR..k....| -00000080 af 82 f0 08 d7 33 16 03 03 02 69 26 88 2e 6e 74 |.....3....i&..nt| -00000090 21 8d 66 37 b3 77 37 52 0d 04 e6 89 99 00 3f e6 |!.f7.w7R......?.| -000000a0 e5 6b 56 68 8e 07 0b 2b 35 8f 59 81 f0 b0 82 77 |.kVh...+5.Y....w| -000000b0 dd 13 b8 16 a9 e0 84 9c bc 2d cf c4 30 a4 43 f6 |.........-..0.C.| -000000c0 01 04 c3 7d 9d a1 84 16 73 45 f8 85 c8 fc c2 25 |...}....sE.....%| -000000d0 49 24 07 e1 d8 1c 8f da ce 04 0e ca 1a 4f 97 a0 |I$...........O..| -000000e0 ba 8f 0f 2d 87 02 f9 a1 08 33 4e 53 a7 a1 bb c8 |...-.....3NS....| -000000f0 41 d2 9b c6 44 0a 7e 8e 21 ff 0d 23 61 d0 b9 4d |A...D.~.!..#a..M| -00000100 27 74 3a de 3a 7e 76 1e 8f a1 f8 57 ca 6b 1d dc |'t:.:~v....W.k..| -00000110 75 e9 2b 95 ae dc 5e 93 de 23 43 6e 1f b1 4d df |u.+...^..#Cn..M.| -00000120 f7 e6 d8 bd 3d 31 0a 7f 97 7b 07 c5 ac 8a 1e 51 |....=1...{.....Q| -00000130 95 a1 c5 b3 93 ba ec 41 d8 1a 57 28 2f 53 14 d0 |.......A..W(/S..| -00000140 e0 e9 e9 e2 f4 a8 b1 67 15 2d d8 3b 96 82 75 16 |.......g.-.;..u.| -00000150 f9 4e a1 55 1d b0 e1 48 95 bb ee 46 5f dd 48 4a |.N.U...H...F_.HJ| -00000160 6a ae b4 a0 24 21 85 70 20 80 22 dc c0 cc 0e 15 |j...$!.p .".....| -00000170 55 c8 e1 15 1c 8c 38 c3 fb 38 31 0e 3c d8 49 bf |U.....8..81.<.I.| -00000180 63 4d d4 20 09 a4 b1 57 f8 a3 1c b2 8e 8d 28 c8 |cM. ...W......(.| -00000190 af 20 4c 46 ae b5 eb aa 54 ca 74 cc bc b4 5c a5 |. LF....T.t...\.| -000001a0 a0 ab c1 41 fb cc 0d d6 6a 25 58 c9 f1 10 32 59 |...A....j%X...2Y| -000001b0 6a d3 04 5a fe bb 84 58 94 04 aa fd a4 f9 79 6c |j..Z...X......yl| -000001c0 f8 da 28 7f 16 73 5e 4c a2 07 9d cc 8f 8d 25 27 |..(..s^L......%'| -000001d0 2d 60 a3 a0 0d e3 65 0b 69 1f 44 92 97 d7 1e b8 |-`....e.i.D.....| -000001e0 43 f4 ed f5 3c 6c ce 0e f6 cb a2 83 80 c3 ee 00 |C...).| -00000220 ba 26 31 6e e8 a8 d4 d5 da e0 9f d1 8c 76 9a bf |.&1n.........v..| -00000230 18 f9 02 1d a0 c5 07 b7 fe cd d2 34 47 27 84 b4 |...........4G'..| -00000240 d4 07 3b 37 72 74 64 bb c4 31 5e 7b a9 c6 a9 a2 |..;7rtd..1^{....| -00000250 06 03 ea 32 41 64 b2 6c 57 70 bb 5c 0a a0 3f 48 |...2Ad.lWp.\..?H| -00000260 78 e8 0b 8a b7 dd 67 68 43 aa 8e d9 ff 81 a2 f4 |x.....ghC.......| -00000270 c6 25 9d 06 30 a4 6a 24 e0 b1 cd b4 7a d4 09 6e |.%..0.j$....z..n| -00000280 e3 d4 4c 3e b5 16 c3 44 9d f7 92 d6 40 95 d8 3e |..L>...D....@..>| -00000290 22 61 a3 29 87 8d 63 e0 98 0c db 9b eb 86 84 fe |"a.)..c.........| -000002a0 f3 ca 9f ce 7b de a9 04 3a 61 d4 bf d4 d6 51 60 |....{...:a....Q`| -000002b0 02 06 cb 13 e1 a6 bf db f0 f1 53 c6 62 a6 1a 42 |..........S.b..B| -000002c0 11 6f 5d 0c 13 c3 12 ff f5 7c 9b ef 58 54 14 3d |.o]......|..XT.=| -000002d0 4d 4b c2 fc ae 33 4a 00 24 e9 3c 6f 6f 5b ef c4 |MK...3J.$.:.| +000000f0 75 8b e5 c9 5e 91 b6 e2 47 a4 50 88 d9 04 cf 19 |u...^...G.P.....| +00000100 06 a3 ca 09 0f 90 e7 01 23 dc d6 fa 6f 7b 03 9d |........#...o{..| +00000110 a3 5b a3 c1 df 06 54 14 fb e1 ee 1f 82 5d c6 ab |.[....T......]..| +00000120 aa 92 73 39 20 42 5c cd fc 55 5f 5e 61 1b 46 27 |..s9 B\..U_^a.F'| +00000130 d9 74 c3 d0 78 87 5c df e1 3a 7f f1 f0 f6 d3 7d |.t..x.\..:.....}| +00000140 93 cd 2b b2 ac e8 50 13 1a be 35 13 2d 0a 7d 52 |..+...P...5.-.}R| +00000150 f3 9e f9 ec 6b 50 a8 b8 77 43 1a ce 92 42 4e 3d |....kP..wC...BN=| +00000160 83 f3 5b 65 c8 e0 c1 f6 b9 88 eb b0 7e 33 da ca |..[e........~3..| +00000170 c6 bd 3e 07 53 d6 79 f1 79 38 ac f8 c7 ae aa c2 |..>.S.y.y8......| +00000180 1f aa 6f 85 22 a6 89 f3 6e 62 6e 68 f5 98 d8 98 |..o."...nbnh....| +00000190 33 2c e0 80 f9 32 95 40 16 95 10 b2 d6 61 e2 8f |3,...2.@.....a..| +000001a0 09 d6 9f b8 8c fc ff 40 a3 44 dc 46 a1 b9 5c 3b |.......@.D.F..\;| +000001b0 2e ce 1d de ee 76 ca 7a f6 32 84 b8 0c 06 33 19 |.....v.z.2....3.| +000001c0 ef 0a 41 f5 0b 35 a3 c0 c0 fd a5 4d cb 23 37 87 |..A..5.....M.#7.| +000001d0 02 ac c3 71 42 5f f4 78 58 05 d7 41 ec 71 5c d6 |...qB_.xX..A.q\.| +000001e0 4d 27 37 c3 3c bc 20 27 05 25 34 41 8d a5 af c4 |M'7.<. '.%4A....| +000001f0 3c 09 cb 3d fc 76 2d 1b 81 88 8d c4 14 65 f5 50 |<..=.v-......e.P| +00000200 8f 9f f5 18 74 19 87 6e 88 92 81 15 01 9f c3 a9 |....t..n........| +00000210 dc 3c 46 13 f6 15 38 17 d5 f2 ee 14 f8 c5 1d 74 |...,E.Or.| +00000280 83 90 04 3f 98 e9 5e 43 38 d1 78 fd 54 02 d2 91 |...?..^C8.x.T...| +00000290 6d 0d e0 90 3d 8a bc 54 53 e4 57 b0 aa db d8 c5 |m...=..TS.W.....| +000002a0 5f e8 95 0a 6f cb d8 9c 6e 75 00 43 3c 59 91 e8 |_...o...nu.C.| +000002d0 33 c1 de 7e f7 aa 64 d6 0a 3e ae 23 4c 91 24 34 |3..~..d..>.#L.$4| +000002e0 39 15 5f 00 ac ea 02 1e 45 4f 61 37 b3 18 54 b1 |9._.....EOa7..T.| +000002f0 26 71 fd 01 16 03 03 00 bc 31 a0 07 0d d9 f1 26 |&q.......1.....&| +00000300 b3 1f 2d 13 cf ad 92 f6 20 08 3c ff 2f dd 2a 7d |..-..... .<./.*}| +00000310 16 5d 62 cb e2 f0 c9 56 ff 9e 3a ee c8 7b 69 d4 |.]b....V..:..{i.| +00000320 d5 5d 30 41 9d 5c fc 3b e1 b7 f4 74 d1 23 fa 10 |.]0A.\.;...t.#..| +00000330 0b c5 68 3a 67 2e 3b 85 4a 21 bb b5 3c 22 f7 e2 |..h:g.;.J!..<"..| +00000340 b3 dd 10 8e 23 fd f8 59 78 5c 54 40 ca ba 77 49 |....#..Yx\T@..wI| +00000350 0f 24 72 3c eb 66 73 00 ce bd c5 a2 b8 f0 94 a4 |.$r<.fs.........| +00000360 b8 c0 fb 64 c5 61 ba bd db 17 1d 00 ca 1d ad 62 |...d.a.........b| +00000370 e8 7e 5a e3 37 6f 79 8d 0b 64 4f a4 a4 6d d0 ce |.~Z.7oy..dO..m..| +00000380 44 66 e2 f4 48 ea e9 1a 99 d2 5f 48 11 06 75 fd |Df..H....._H..u.| +00000390 f3 db 52 02 72 0a 5a f6 ce 3f a8 19 10 83 fe d1 |..R.r.Z..?......| +000003a0 7c 54 b3 cf 79 c8 52 78 ee 9d 96 da 8e ae 08 9f ||T..y.Rx........| +000003b0 8a 96 87 a6 d1 16 03 03 00 4a cc 16 c5 00 5d 97 |.........J....].| +000003c0 18 cc d2 93 bd fe 20 12 7d f1 21 94 27 28 22 6d |...... .}.!.'("m| +000003d0 64 d4 8c ae 92 fa b0 9d 13 0c 8a d8 b1 e9 7b d2 |d.............{.| +000003e0 5f b9 2c 5f a6 92 39 c6 e3 97 88 7f 62 0c 91 ab |_.,_..9.....b...| +000003f0 16 6c aa d4 26 10 9c 1d fc 96 4b 0c 1e a8 4c 05 |.l..&.....K...L.| +00000400 f6 87 41 08 16 03 03 00 14 cb 96 40 62 2b b5 2c |..A........@b+.,| +00000410 a2 1e 0a b8 37 4c 0c 98 44 80 d2 80 31 |....7L..D...1| >>> Flow 9 (client to server) -00000000 16 03 03 02 69 74 87 f6 35 08 6b 36 04 33 bd 50 |....it..5.k6.3.P| -00000010 d8 de c9 0b 8e 98 d4 2a ca f1 68 50 10 03 d4 83 |.......*..hP....| -00000020 56 e2 12 fd 8d 5f ff 7c 16 9b 43 d9 75 f7 c6 ee |V...._.|..C.u...| -00000030 ee dc f6 e9 19 d0 ae 8a 54 fb c6 7e 9e b4 15 79 |........T..~...y| -00000040 17 fa d2 32 8d b4 b0 ff 15 44 ac 4f 28 5d ba 10 |...2.....D.O(]..| -00000050 6e e6 cb b3 ad e8 ef 06 c4 3e aa 1f a8 df 1b 82 |n........>......| -00000060 38 bd 5f 88 5c 0e 5b e7 03 df 9b 6f c2 d9 b8 5f |8._.\.[....o..._| -00000070 bf 60 de 69 f3 12 4f b8 50 28 fc 2d 15 70 92 3b |.`.i..O.P(.-.p.;| -00000080 76 7d 36 13 5e e6 39 e6 29 6d d0 99 14 ca 52 a5 |v}6.^.9.)m....R.| -00000090 12 db 96 d4 d0 38 ef 42 6c 09 ca dc 06 f2 d3 8f |.....8.Bl.......| -000000a0 49 c8 a3 c2 77 c3 c1 f6 18 6a 91 95 36 1b d6 47 |I...w....j..6..G| -000000b0 f6 87 0c 3e 82 b4 22 62 a5 cb 5b e8 73 6e 71 52 |...>.."b..[.snqR| -000000c0 4f 7c 9f b8 b4 f1 5b 77 96 a6 8e 22 52 b6 cf cc |O|....[w..."R...| -000000d0 b4 5b a9 a9 63 4b 9b 1c db a0 ad f4 35 04 20 6c |.[..cK......5. l| -000000e0 33 b2 c6 5c 6f 2a 1e 5f d9 c4 c1 b1 82 4f 6d 12 |3..\o*._.....Om.| -000000f0 e1 6e f9 9f e8 0f e7 9e cf 80 eb 1a 72 de 9e df |.n..........r...| -00000100 b2 6f d4 57 1f cc 01 89 b2 e3 2f 65 dd 05 ae 0d |.o.W....../e....| -00000110 d0 9f 74 21 45 3c c4 00 67 61 2c 37 8e 96 a4 38 |..t!E<..ga,7...8| -00000120 b2 1d d8 58 25 7a 3f 99 0c 7b e7 fd 67 92 e2 3f |...X%z?..{..g..?| -00000130 14 32 79 25 d3 df cd cf 1f fc 5d 67 53 e0 7d 28 |.2y%......]gS.}(| -00000140 60 b1 b0 d8 d9 81 d4 b4 22 81 e4 c2 09 8e 8d 37 |`......."......7| -00000150 82 35 61 37 6c 6e 8e 2d 9f 41 63 b3 e9 f9 1f 73 |.5a7ln.-.Ac....s| -00000160 8f bf 7d 08 65 b8 a2 5a 32 5a 0f 96 70 fc 11 d5 |..}.e..Z2Z..p...| -00000170 b3 af 85 2c 22 cc 8d da 18 80 74 6c d9 64 1e e5 |...,".....tl.d..| -00000180 8a 10 ee 28 6b 3b 85 d9 af b7 65 bd 39 c4 4c 1e |...(k;....e.9.L.| -00000190 c6 40 b7 26 cd 07 1a e1 42 c9 a0 e6 94 34 60 11 |.@.&....B....4`.| -000001a0 5e 1c c1 76 f5 59 70 fb 73 8e 2f 44 53 ea b2 55 |^..v.Yp.s./DS..U| -000001b0 ed 0c 6f 39 f0 0a 04 b9 6c 7e c9 15 dc 3f c7 72 |..o9....l~...?.r| -000001c0 85 78 02 ce 96 49 57 cd 56 dc 9c 76 b9 ae 08 6c |.x...IW.V..v...l| -000001d0 52 82 b2 a0 05 20 f6 2e 28 0d 4c 46 58 42 d5 2f |R.... ..(.LFXB./| -000001e0 83 55 b1 e1 47 f1 b1 70 72 b0 73 7f a5 7f 4d 73 |.U..G..pr.s...Ms| -000001f0 e8 09 46 d7 16 3e 3d df 04 79 24 38 23 e2 a6 e3 |..F..>=..y$8#...| -00000200 e7 70 b5 69 b7 42 fb 45 84 d3 e8 cc eb e5 25 67 |.p.i.B.E......%g| -00000210 ee 71 b9 24 05 8c cc e0 2b 86 1d ac 54 24 e8 7a |.q.$....+...T$.z| -00000220 c3 8f 22 df 01 21 f7 d1 a9 b6 96 3c e8 b4 c9 95 |.."..!.....<....| -00000230 5a e1 2e 46 ac e3 6b a5 14 60 d4 63 c1 37 5e d5 |Z..F..k..`.c.7^.| -00000240 14 d1 97 ae c0 cf 01 d3 b0 b0 3d d7 7e 9f 5a 52 |..........=.~.ZR| -00000250 73 f3 e0 70 22 09 44 85 b9 1e 2f 78 a1 33 cc 39 |s..p".D.../x.3.9| -00000260 fd ff bc 68 1e 96 7e 26 be 31 8e 73 64 21 16 03 |...h..~&.1.sd!..| -00000270 03 00 35 96 4d ac f1 b3 1b 7b e0 ab 2b 47 40 be |..5.M....{..+G@.| -00000280 46 a3 02 2c eb 74 b8 4f 53 b5 7d 05 47 dc 72 d9 |F..,.t.OS.}.G.r.| -00000290 6a 8e 7d 6f 66 2a 6b e2 27 e7 6a bf 39 68 f3 9c |j.}of*k.'.j.9h..| -000002a0 89 51 dc 4e 8c 82 38 57 16 03 03 00 98 fb 44 b6 |.Q.N..8W......D.| -000002b0 36 4a 3e 0a 41 01 3d 78 8b 5d fe 95 69 a5 53 d5 |6J>.A.=x.]..i.S.| -000002c0 d6 37 c3 e3 03 ae b7 33 57 1a 1a dd d0 cf 86 34 |.7.....3W......4| -000002d0 6e 06 30 ac 09 08 13 8b 18 9f a6 ec 96 e4 bc ca |n.0.............| -000002e0 06 6b 01 2d 2e 7c ff 34 9e 16 7e fc e3 0e 3c 0e |.k.-.|.4..~...<.| -000002f0 5c d0 13 88 7d af ec a4 91 fd a1 48 ef b3 fb 2a |\...}......H...*| -00000300 d8 e5 a3 c7 4b 50 34 fc c1 33 dd 43 88 8d 6e 16 |....KP4..3.C..n.| -00000310 9e 0c d7 b0 7f b2 77 cc da e0 8e 02 9e db 2f 12 |......w......./.| -00000320 3b 4f 5b 7b c2 eb e3 10 5c 6f 43 d6 54 e1 8c 55 |;O[{....\oC.T..U| -00000330 ec 51 93 f8 12 5e f6 09 92 a1 95 51 db 75 97 17 |.Q...^.....Q.u..| -00000340 bc cd 80 71 e9 14 03 03 00 11 4b d7 45 5f 00 cd |...q......K.E_..| -00000350 ad 58 83 c6 14 13 d2 89 fa a8 2b 16 03 03 00 20 |.X........+.... | -00000360 33 77 49 9f ff 97 4c 6a f7 42 45 d4 59 6a 1e 6e |3wI...Lj.BE.Yj.n| -00000370 12 29 e7 62 01 0c 9e 8c e2 f1 7f fb aa a4 05 e2 |.).b............| +00000000 16 03 03 02 69 ef e6 70 d4 42 64 ba 8b 31 22 63 |....i..p.Bd..1"c| +00000010 d6 66 0c 78 6f 43 80 ba dd 30 41 74 78 25 0f b2 |.f.xoC...0Atx%..| +00000020 b2 0f d4 d5 91 45 f3 a5 24 f0 da 2c 74 57 5c 81 |.....E..$..,tW\.| +00000030 5b 77 96 5a b0 48 26 5e 06 24 e9 98 d7 a9 ce b0 |[w.Z.H&^.$......| +00000040 b3 a3 f4 79 0e 28 e5 fa 96 e6 b7 2e 4a 7b d4 1a |...y.(......J{..| +00000050 96 eb d9 f7 98 07 f1 ac 88 08 20 42 2b 41 d8 f4 |.......... B+A..| +00000060 96 2b 34 23 fb 26 e0 2b fe 0e dd 36 a4 d5 aa 24 |.+4#.&.+...6...$| +00000070 9b 3b 67 76 86 90 28 17 e2 22 cc 83 b8 72 5b 1d |.;gv..(.."...r[.| +00000080 d4 fa 81 33 68 db a4 43 76 57 39 3a b3 22 cb d6 |...3h..CvW9:."..| +00000090 2e 31 07 6c b9 d6 ca 56 ca 56 67 ca 17 55 2d 49 |.1.l...V.Vg..U-I| +000000a0 a6 42 de 7a 2c c1 cc 9f af e8 88 5f 72 10 7c 56 |.B.z,......_r.|V| +000000b0 bf 49 54 27 0c 39 e3 2e 57 c4 c3 8c 7e 10 2b e5 |.IT'.9..W...~.+.| +000000c0 32 a9 ba 32 02 25 e6 02 e7 a2 06 87 16 07 47 e4 |2..2.%........G.| +000000d0 4d 6b 95 5e a9 cd 5c dc ab 4f ae a6 e7 59 60 cb |Mk.^..\..O...Y`.| +000000e0 23 d9 4b a0 15 ab 39 a9 ef 4b 74 54 4b e1 b8 69 |#.K...9..KtTK..i| +000000f0 fe f3 f2 04 d5 df 3e 5b 1e 0f 64 6a b1 96 ec 82 |......>[..dj....| +00000100 9c 8c 0b 90 c1 1f c1 f6 6e e6 9e cc 11 50 6f 3a |........n....Po:| +00000110 28 55 73 0b e3 42 89 eb ea 38 5f 29 d4 88 41 18 |(Us..B...8_)..A.| +00000120 45 8b f9 5d 2a 35 79 ba 39 a9 d5 7f 4d 7a d3 4e |E..]*5y.9...Mz.N| +00000130 25 59 10 30 9c 4a 24 af 96 63 e3 e6 cb 6e 7d ff |%Y.0.J$..c...n}.| +00000140 a2 4b 69 30 76 9c 35 19 74 29 b6 ad e7 15 01 7d |.Ki0v.5.t).....}| +00000150 e8 04 9e 00 4e d6 0d 51 3f ed a9 5e e9 b9 5f a3 |....N..Q?..^.._.| +00000160 6e 6c 65 f8 7f ec 6f 5d c5 94 48 44 dd 02 e9 76 |nle...o]..HD...v| +00000170 cb b2 d2 66 f8 95 6f 69 11 e3 0b a8 96 d3 ac 9b |...f..oi........| +00000180 d3 55 48 61 ff 80 69 a3 09 c4 5c b9 fa fd 74 7b |.UHa..i...\...t{| +00000190 4e 10 b0 09 05 4b 6c 75 59 7f 19 ba c2 d5 85 7e |N....KluY......~| +000001a0 18 ff 08 88 76 d4 1e 2e b4 56 23 95 6c 22 68 1e |....v....V#.l"h.| +000001b0 42 e2 5d 3a ff 84 b9 05 c2 d0 6c c6 aa ee e7 e6 |B.]:......l.....| +000001c0 59 07 16 9c a4 3c 8a 47 b1 98 05 8e 65 95 11 fb |Y....<.G....e...| +000001d0 b6 7b 9b 66 c1 53 c2 7e 3a 3e 0c 22 75 ea f0 2b |.{.f.S.~:>."u..+| +000001e0 31 25 16 b1 90 0a 42 e6 c5 4e 46 08 fc d7 65 bb |1%....B..NF...e.| +000001f0 ca a1 e4 ad 6d b5 4c 74 c5 30 85 d5 58 04 d7 1c |....m.Lt.0..X...| +00000200 9e 57 d3 ec 99 03 1c 0d f9 98 ae 76 60 4e 97 67 |.W.........v`N.g| +00000210 10 a0 e9 94 84 05 7c af a9 61 9f bb de 9f bd 66 |......|..a.....f| +00000220 0a b2 6d 6a 07 c8 40 78 14 93 24 2d 4a 77 e4 13 |..mj..@x..$-Jw..| +00000230 4a db 6f ae c2 78 5e 59 ac f9 3d 1c 8b 3b ff 14 |J.o..x^Y..=..;..| +00000240 1b fd 05 e6 f8 31 be 63 70 4c f2 ef d0 17 a6 66 |.....1.cpL.....f| +00000250 42 3a 94 3b 4a a6 26 49 b4 18 6d 9e b5 07 8a 49 |B:.;J.&I..m....I| +00000260 a1 72 44 25 27 46 12 e0 61 06 4d eb b2 f5 16 03 |.rD%'F..a.M.....| +00000270 03 00 35 9e fc 71 56 3c cc c8 d6 2b a6 b1 cb 2b |..5..qV<...+...+| +00000280 c8 a2 5c 2b 49 95 52 2a 91 62 74 ba 95 9d 67 f3 |..\+I.R*.bt...g.| +00000290 2a 2c 55 1d 81 83 0d b1 25 3f ff cd 75 16 e6 83 |*,U.....%?..u...| +000002a0 a5 bc a7 8b 4d 31 32 d5 16 03 03 00 98 98 ea f6 |....M12.........| +000002b0 4a 46 17 cb 01 d9 33 74 ec 49 78 b1 5b c5 c0 d3 |JF....3t.Ix.[...| +000002c0 71 82 5c 80 1e 59 4f da 5d 2d 54 78 0c 60 35 26 |q.\..YO.]-Tx.`5&| +000002d0 29 da 64 29 02 39 84 d0 3b 0b 0d 8d 84 2e 25 fc |).d).9..;.....%.| +000002e0 e7 2c d1 33 ae bb fa 6f d2 87 54 b3 f2 d5 21 69 |.,.3...o..T...!i| +000002f0 2a 69 43 15 48 2a 5e e8 66 f8 1d 49 28 51 14 97 |*iC.H*^.f..I(Q..| +00000300 01 1b 31 de 22 7c a7 1c 15 19 21 36 35 92 ca e6 |..1."|....!65...| +00000310 d3 f0 2d af 0d 8e c1 16 c2 a4 ef e9 4f 97 c3 ad |..-.........O...| +00000320 59 0d 98 c6 d2 31 38 d5 34 e0 f3 80 6c 86 f9 bd |Y....18.4...l...| +00000330 84 16 c1 4e d7 2a 89 26 20 46 f4 54 b2 c7 69 0e |...N.*.& F.T..i.| +00000340 72 56 9b 35 4b 14 03 03 00 11 98 7b 9f 6f c5 62 |rV.5K......{.o.b| +00000350 1e 2e f6 8a 10 5a ea b7 72 ef 02 16 03 03 00 20 |.....Z..r...... | +00000360 9c 56 e6 cb ee 7a 86 0f f0 47 6a d6 04 c4 41 c9 |.V...z...Gj...A.| +00000370 36 2f 4d 5d 4b e9 54 22 9d 0f 07 a3 36 8e 83 b8 |6/M]K.T"....6...| >>> Flow 10 (server to client) -00000000 14 03 03 00 11 b3 52 01 6f eb 60 f2 1e 3c 03 47 |......R.o.`..<.G| -00000010 0b be 2c 14 06 9c 16 03 03 00 20 ac c1 ed 57 1b |..,....... ...W.| -00000020 87 8a c6 78 a7 36 17 2b 61 fd db d3 cc 23 88 5e |...x.6.+a....#.^| -00000030 8c 40 1b 04 10 40 1c 51 75 a3 3f 17 03 03 00 19 |.@...@.Qu.?.....| -00000040 16 55 b1 d2 86 e7 fa be 59 4a 7f 13 b5 aa af d1 |.U......YJ......| -00000050 0c 50 2a 7f a9 b9 c5 eb 45 |.P*.....E| +00000000 14 03 03 00 11 6b bf 22 ed c6 d9 79 48 3b 35 2a |.....k."...yH;5*| +00000010 ca 29 40 05 ad fa 16 03 03 00 20 d1 2c 33 a1 63 |.)@....... .,3.c| +00000020 c5 96 c5 ec c8 c5 cc 94 f7 92 a3 ed 3f e0 4a ab |............?.J.| +00000030 28 96 18 3c c1 a8 3a 03 fc ee f6 17 03 03 00 19 |(..<..:.........| +00000040 39 e5 80 33 cc a5 f8 3a e4 13 b5 b7 e0 1d 19 5e |9..3...:.......^| +00000050 82 b4 94 fd cd 6c a5 06 e2 |.....l...| >>> Flow 11 (client to server) -00000000 15 03 03 00 12 4c e2 da 21 11 be 48 2d 52 09 32 |.....L..!..H-R.2| -00000010 83 9b 6f dc a8 6c 5c |..o..l\| +00000000 15 03 03 00 12 60 9a 8c 98 6e 55 b1 3e db b4 22 |.....`...nU.>.."| +00000010 3c d9 51 43 36 88 eb |<.QC6..| diff --git a/src/crypto/tls/testdata/Client-TLSv12-RenegotiateTwice b/src/crypto/tls/testdata/Client-TLSv12-RenegotiateTwice index f85c6907fa..4967e0fa41 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-RenegotiateTwice +++ b/src/crypto/tls/testdata/Client-TLSv12-RenegotiateTwice @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 51 2d ad 23 79 |....Y...U..Q-.#y| -00000010 a1 68 89 d6 6d 78 78 ba 0d 65 e7 86 46 c7 5c c9 |.h..mxx..e..F.\.| -00000020 3c fd 70 0e 82 d3 fa 66 5d 98 8a 20 db 5d a5 7f |<.p....f].. .]..| -00000030 85 73 11 b9 cd 80 4c f1 87 a2 5a 33 d7 4d af 49 |.s....L...Z3.M.I| -00000040 ed 3b 5f 3d 13 6f a4 38 1e c9 75 13 cc a8 00 00 |.;_=.o.8..u.....| +00000000 16 03 03 00 59 02 00 00 55 03 03 1e 7a 8b a7 bd |....Y...U...z...| +00000010 bd 98 42 b7 80 8f d3 a5 1c b8 36 4b e3 4c d4 87 |..B.......6K.L..| +00000020 e1 13 93 bb 9f 70 1b 21 22 15 fa 20 64 89 5b 25 |.....p.!".. d.[%| +00000030 cb 8e 05 53 0b a4 b5 06 49 46 83 7d 8b 13 b1 e4 |...S....IF.}....| +00000040 47 d0 21 91 fe 20 0a e2 dc 29 71 ce cc a8 00 00 |G.!.. ...)q.....| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 59 0b 00 02 55 00 02 52 00 02 4f 30 82 02 |..Y...U..R..O0..| 00000070 4b 30 82 01 b4 a0 03 02 01 02 02 09 00 e8 f0 9d |K0..............| @@ -60,284 +60,284 @@ 00000290 77 8d 0c 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d |w.......@.a.Lr+.| 000002a0 ae db 46 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db |..F..M...>...B..| 000002b0 fe 3d 13 60 84 5c 21 d3 3b e9 fa e7 16 03 03 00 |.=.`.\!.;.......| -000002c0 ac 0c 00 00 a8 03 00 1d 20 68 e3 7e b2 34 ed 21 |........ h.~.4.!| -000002d0 05 68 aa 61 70 f7 67 5b ab 93 87 9c 8d 70 96 a7 |.h.ap.g[.....p..| -000002e0 63 b8 ab 89 84 6b 89 08 13 08 04 00 80 94 a2 04 |c....k..........| -000002f0 de e3 fa 20 2b ea 31 3b c6 d9 ef 04 d9 7f 83 f8 |... +.1;........| -00000300 f1 1e f3 9b d8 d6 db f1 bc 52 52 15 09 c7 6b 17 |.........RR...k.| -00000310 56 ed 2c 51 2f ba 9c 23 1b 49 0f c6 d9 05 5c 66 |V.,Q/..#.I....\f| -00000320 d0 19 af 29 d3 65 60 75 06 4e 15 7b c1 08 fe ac |...).e`u.N.{....| -00000330 0d b2 8c 65 67 f0 5a 9d 9f ed 33 dd 6a 09 58 0b |...eg.Z...3.j.X.| -00000340 25 ed 45 57 ea 61 a1 72 cb 39 ef fc 8b 06 94 b9 |%.EW.a.r.9......| -00000350 68 ff 73 c5 52 8e 2b ef c5 39 e7 93 34 2a cf c1 |h.s.R.+..9..4*..| -00000360 54 cf c3 63 a2 2c 06 92 9f d9 8b 24 2c 16 03 03 |T..c.,.....$,...| +000002c0 ac 0c 00 00 a8 03 00 1d 20 db 69 f9 f0 59 b6 50 |........ .i..Y.P| +000002d0 b8 fe a7 d0 df fa 32 b9 df 3b 31 8e 3f fb ee 82 |......2..;1.?...| +000002e0 2e e3 e6 42 c2 61 78 ee 77 08 04 00 80 9c f6 b1 |...B.ax.w.......| +000002f0 60 99 fe 8d 65 0a 87 0f ec d2 35 bc 7c 26 3c 1f |`...e.....5.|&<.| +00000300 55 3d 6d 6c 8a 64 5b a7 95 fa cc e0 a6 9b 36 bd |U=ml.d[.......6.| +00000310 1e 0f 8e bc 36 d5 28 e8 ae 2e 34 97 f6 be 87 ce |....6.(...4.....| +00000320 c5 1b 91 7f 5a 22 db 9a d0 cd cb 47 ac 2e 06 2f |....Z".....G.../| +00000330 9d f1 fe 35 c1 88 db 8e d3 3c 8b 6f a3 38 b6 e3 |...5.....<.o.8..| +00000340 99 42 be 6c bd b4 66 43 00 59 04 0e 6c e1 89 dc |.B.l..fC.Y..l...| +00000350 6f 05 6f 32 f6 aa 2b 55 3b 95 95 0f fe a4 55 18 |o.o2..+U;.....U.| +00000360 d3 71 3c fb 33 f6 ae 15 74 4b 33 bb a3 16 03 03 |.q<.3...tK3.....| 00000370 00 04 0e 00 00 00 |......| >>> Flow 3 (client to server) 00000000 16 03 03 00 25 10 00 00 21 20 2f e5 7d a3 47 cd |....%...! /.}.G.| 00000010 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 |bC.(.._.).0.....| 00000020 cf c2 ed 90 99 5f 58 cb 3b 74 14 03 03 00 01 01 |....._X.;t......| -00000030 16 03 03 00 20 c5 ed 46 65 cc 21 42 fc 0f 93 4b |.... ..Fe.!B...K| -00000040 0e 73 eb 8f 8e e2 fe 45 f0 0e 64 f5 1b db 79 a6 |.s.....E..d...y.| -00000050 60 7f ca 5c 72 |`..\r| +00000030 16 03 03 00 20 3e 7f d0 53 7f 67 81 82 2d 8b fd |.... >..S.g..-..| +00000040 68 ce ea 38 c5 3d 1f a1 0d 72 0b ac de e0 99 9c |h..8.=...r......| +00000050 0e d8 4f 5c 2e |..O\.| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 20 eb 22 65 3b 95 |.......... ."e;.| -00000010 dd f8 04 5c 3e cc cb e7 e3 d0 bf 86 bf d6 70 f7 |...\>.........p.| -00000020 1d 75 87 28 bb be 28 e3 b4 fd 7b |.u.(..(...{| +00000000 14 03 03 00 01 01 16 03 03 00 20 18 e0 d3 a6 d4 |.......... .....| +00000010 bf cd b7 b7 6c 98 53 9d 75 bb c8 ee 29 28 6c d6 |....l.S.u...)(l.| +00000020 4b 96 66 fb 2c 99 bc aa 3f aa 86 |K.f.,...?..| >>> Flow 5 (client to server) -00000000 17 03 03 00 16 d0 03 3c 9c 0a 2f 8e 12 d7 9b 3f |.......<../....?| -00000010 66 d3 6b e4 4d 2b be bf 61 e0 f1 |f.k.M+..a..| +00000000 17 03 03 00 16 72 e6 81 87 6e 2d d9 76 10 8b 7d |.....r...n-.v..}| +00000010 7b e4 ee ee 31 bb d5 6a be 69 29 |{...1..j.i)| >>> Flow 6 (server to client) -00000000 16 03 03 00 14 f2 1c 0c 2c 61 9c 59 eb b5 b2 17 |........,a.Y....| -00000010 50 46 fd a1 3f 06 2c fc ef |PF..?.,..| +00000000 16 03 03 00 14 c5 9f 94 4a 11 1b 2f c3 ad 90 d5 |........J../....| +00000010 5e b5 7a 87 f1 19 33 11 52 |^.z...3.R| >>> Flow 7 (client to server) -00000000 16 03 03 01 14 06 cd f6 16 2c a0 d5 ee c5 42 68 |.........,....Bh| -00000010 c9 5f a9 b0 e7 79 0f 20 7c 0c 85 a9 ad df ee d6 |._...y. |.......| -00000020 3e 8c ce ea c0 db 1a d4 9d b7 7d db 9f 37 91 93 |>.........}..7..| -00000030 90 1e 48 ce a4 71 df 23 03 0d 29 82 7a 63 ee 2a |..H..q.#..).zc.*| -00000040 82 83 e6 e1 50 ab d2 9b 82 94 de 3d ae 0c e4 8a |....P......=....| -00000050 eb e7 3a d9 cb fb 87 24 2d 91 a3 65 e5 df 36 03 |..:....$-..e..6.| -00000060 ef e4 93 4b 24 aa a5 04 17 60 68 2b 0d c9 e0 24 |...K$....`h+...$| -00000070 18 69 7b 28 59 48 d6 1a 6e 74 23 7c 54 65 8c 3f |.i{(YH..nt#|Te.?| -00000080 51 67 e2 94 35 ce 60 2c 04 3d 04 15 31 b1 42 8a |Qg..5.`,.=..1.B.| -00000090 34 6c b6 47 d9 e0 3c e9 77 62 5f 76 c1 4a d3 f6 |4l.G..<.wb_v.J..| -000000a0 56 b9 08 28 b7 c3 a5 ae 45 0e 26 95 3d fe 97 b4 |V..(....E.&.=...| -000000b0 30 52 6d 57 5a 1f 95 97 67 18 b4 03 f3 b8 8d 0b |0RmWZ...g.......| -000000c0 49 bb 66 87 fb aa 36 35 00 7b fe d9 f1 7b 2b 7e |I.f...65.{...{+~| -000000d0 03 47 80 87 2b c9 17 c9 2e 45 82 af cd 67 49 e2 |.G..+....E...gI.| -000000e0 a7 b5 fb 30 21 23 c6 22 a1 e7 f1 a1 3b 19 ff 04 |...0!#."....;...| -000000f0 1c b4 99 7d b0 5e 49 43 5d 0e d4 62 04 7d 52 ed |...}.^IC]..b.}R.| -00000100 b4 50 86 06 83 d6 e6 9e 42 3d ee 9d 27 f7 6a 11 |.P......B=..'.j.| -00000110 f6 c8 da 92 a2 23 49 8d 80 |.....#I..| +00000000 16 03 03 01 16 f9 ea fe 74 a7 a0 8c 3d a8 7f 61 |........t...=..a| +00000010 a7 f6 7a de 4d 36 32 d0 be 7b 0b df 80 65 62 06 |..z.M62..{...eb.| +00000020 d2 1d ce 1a f2 83 c7 0a a3 c5 eb 37 b1 60 0c 0c |...........7.`..| +00000030 47 9f fd 66 61 4b 5d 55 cc 13 0b 50 77 5a 31 68 |G..faK]U...PwZ1h| +00000040 75 94 d5 a6 ec 61 07 a2 45 f7 d6 73 af 7b ea 2d |u....a..E..s.{.-| +00000050 9f bd cd 08 d2 4b f8 24 27 8e 5a 24 a6 cb ed 01 |.....K.$'.Z$....| +00000060 6d ef fc 2f ff f9 2d 23 d1 64 6b a4 d2 8c cc ff |m../..-#.dk.....| +00000070 55 28 cc 79 21 86 6a e9 c9 d3 c3 38 b0 ee 37 18 |U(.y!.j....8..7.| +00000080 1b 9c 87 e2 70 42 8e e9 72 37 79 09 4c f1 e2 74 |....pB..r7y.L..t| +00000090 ef 11 c1 ad 7b e2 b4 f1 57 19 08 51 80 f1 9f 9a |....{...W..Q....| +000000a0 84 40 00 61 4f 77 8a 02 69 35 44 f9 b0 a6 94 0f |.@.aOw..i5D.....| +000000b0 d2 a0 77 78 c8 ab cb b1 3f 81 2f f7 20 7b f1 af |..wx....?./. {..| +000000c0 ad c8 9a 15 77 09 3a 21 68 da c5 29 e9 3a 9e 83 |....w.:!h..).:..| +000000d0 9d 25 c7 29 3c 02 48 71 3d be e6 a4 13 d9 1b 5a |.%.)<.Hq=......Z| +000000e0 79 50 00 7a 3b 29 6c b6 4e 59 0a ff e3 1c 69 65 |yP.z;)l.NY....ie| +000000f0 f7 a9 c8 eb 74 74 05 a4 10 c3 9f 47 11 0a 4e 2c |....tt.....G..N,| +00000100 75 dd 31 1d 85 6c c9 2b 95 3e 61 20 61 78 d9 68 |u.1..l.+.>a ax.h| +00000110 5b 52 b1 a1 08 70 a7 e4 89 fa 32 |[R...p....2| >>> Flow 8 (server to client) -00000000 16 03 03 00 81 7b f1 ac 76 fd 28 ba 97 a6 8e 3a |.....{..v.(....:| -00000010 ae f0 9a f6 ed 64 5d 2a 50 7d b2 83 e5 de b9 3c |.....d]*P}.....<| -00000020 3c 5b ab 48 db ec a7 18 d6 fd af a1 98 32 82 1e |<[.H.........2..| -00000030 b4 8d 83 3f 44 ff e6 1e 86 2b e3 f9 39 f8 30 a4 |...?D....+..9.0.| -00000040 26 f9 cc 3f 73 d5 88 f5 90 c7 b4 20 0b d3 6b c3 |&..?s...... ..k.| -00000050 4c 81 e6 4e 83 81 a7 9d 47 0d 0b 29 4c 2a 45 e2 |L..N....G..)L*E.| -00000060 0d 8b 40 61 0d f1 ee e1 e8 db 8f 43 e4 75 71 44 |..@a.......C.uqD| -00000070 f5 e3 69 99 a7 6d 67 79 06 02 65 4a 80 84 ee d8 |..i..mgy..eJ....| -00000080 56 30 f2 a6 ad b5 16 03 03 02 69 c9 6d 2c 0f ed |V0........i.m,..| -00000090 9c 35 b6 61 29 70 0f ab a0 61 00 cc d6 aa 9c 37 |.5.a)p...a.....7| -000000a0 9a 55 e7 a7 73 77 44 1b bb f0 be 1d 28 6a 45 03 |.U..swD.....(jE.| -000000b0 d1 7e c4 ef 42 e2 37 1d 5e 5a 5e cd 73 54 05 bd |.~..B.7.^Z^.sT..| -000000c0 a5 d9 d3 0d 7d 65 a3 a2 72 86 e0 c3 2d e1 91 96 |....}e..r...-...| -000000d0 d5 11 34 e1 f0 24 97 84 95 12 9f e1 89 f5 1b e0 |..4..$..........| -000000e0 fb 59 5b c4 fa 4e d1 f4 44 34 21 5a 5e 97 1a f7 |.Y[..N..D4!Z^...| -000000f0 ba 06 e8 83 b2 4a ca b4 90 ef f2 06 d5 48 2f 18 |.....J.......H/.| -00000100 11 2b fc 5c 41 ef 73 c4 78 8c 43 3f 63 3a bd ab |.+.\A.s.x.C?c:..| -00000110 5b 61 bc 18 6c ce e3 f1 5c 55 3a 4b 78 70 91 06 |[a..l...\U:Kxp..| -00000120 8f 79 19 4b aa 02 1d 86 f9 96 e6 2c a6 01 70 19 |.y.K.......,..p.| -00000130 3a 84 f2 71 0e 18 6d 9a d6 33 d6 4d 45 7e 83 c9 |:..q..m..3.ME~..| -00000140 21 6a dd 3d 82 1d 18 21 d7 fd b3 6f 8b 7e db ef |!j.=...!...o.~..| -00000150 5e 7c 99 5a dd d1 03 22 d1 cf 2e 73 d5 09 33 2e |^|.Z..."...s..3.| -00000160 8c 51 0b a4 7e e5 da 1b bc ed 13 ed d7 ba a9 25 |.Q..~..........%| -00000170 b7 8a 3f 1c 54 bd 1f a8 53 4b 47 37 44 55 a5 4b |..?.T...SKG7DU.K| -00000180 75 de 9c 86 d7 80 eb f5 f7 76 ff 5c 4d 70 69 02 |u........v.\Mpi.| -00000190 a8 4f b4 a0 65 d7 c5 55 34 3f b0 83 5c a8 bc 60 |.O..e..U4?..\..`| -000001a0 d3 46 c1 33 3c ef f9 53 3e 8d 86 3e c8 22 c4 e5 |.F.3<..S>..>."..| -000001b0 dd 6c 59 55 6b fe 3e 04 10 eb 7d c7 bd d8 3d 71 |.lYUk.>...}...=q| -000001c0 c2 2d 0b cd 29 a0 d9 3c cc c6 21 97 3d 24 36 1c |.-..)..<..!.=$6.| -000001d0 f5 6a b5 12 48 98 ec 91 42 85 cb 45 c2 b6 f6 64 |.j..H...B..E...d| -000001e0 c4 76 53 27 64 d3 89 f2 4e d6 98 23 25 a0 5b 54 |.vS'd...N..#%.[T| -000001f0 83 ab 53 29 5d 39 59 67 77 d0 4f 82 9e 0c 45 ae |..S)]9Ygw.O...E.| -00000200 6d 94 1a 9d 69 45 f0 37 0d 11 ee 46 4f 6a f3 81 |m...iE.7...FOj..| -00000210 ce 9b 74 02 54 a6 d6 49 98 e7 3f 7b 4c fc 53 91 |..t.T..I..?{L.S.| -00000220 80 d3 87 dd 55 91 04 ef 33 27 71 98 ef 1f df b8 |....U...3'q.....| -00000230 d6 5c 31 6f ba 58 f3 89 7b ba b6 ea 9f 75 cd 08 |.\1o.X..{....u..| -00000240 11 84 c9 e8 9f f8 8e 02 7d b7 4a 3b 6f 4d 25 46 |........}.J;oM%F| -00000250 46 5d 7c 60 71 b5 02 d1 91 59 a8 10 c2 fa e8 56 |F]|`q....Y.....V| -00000260 0f 6e 93 d1 dd c6 af e9 e1 c1 bf 64 8f 5b 04 78 |.n.........d.[.x| -00000270 74 1c f5 af ef 48 b0 9e 29 a9 6c a0 ff e4 69 bb |t....H..).l...i.| -00000280 e1 95 12 be 73 b0 35 89 82 93 b4 69 84 79 cc 78 |....s.5....i.y.x| -00000290 1d 93 05 a4 85 25 c5 a3 da 4b c7 72 66 2f 35 78 |.....%...K.rf/5x| -000002a0 62 94 d6 f3 1c dd 23 c8 86 11 fe b0 cb 2f 5c 78 |b.....#....../\x| -000002b0 45 8d 2e 0c 08 c6 7c 5c 92 80 70 25 3b 25 53 a8 |E.....|\..p%;%S.| -000002c0 86 f4 54 b6 a5 94 38 10 ff f9 3e 78 bb ce 86 fa |..T...8...>x....| -000002d0 9d 91 df 9e c1 ef 79 db 1b f8 ed b5 53 6d 24 0f |......y.....Sm$.| -000002e0 18 a8 eb cd 25 bb bb 24 64 25 4a 3e 04 00 16 f2 |....%..$d%J>....| -000002f0 9a 8b 8f 25 16 03 03 00 bc 05 1a 5b 08 49 0c 86 |...%.......[.I..| -00000300 8b 23 78 13 9e a7 3f ce 73 6b 30 ff 65 e5 a7 ba |.#x...?.sk0.e...| -00000310 a4 14 8e e2 4e 14 3a 43 d7 03 50 79 8a fb ea a6 |....N.:C..Py....| -00000320 03 06 8b d1 0b 2b 19 49 5c 50 34 67 ae 02 e7 f7 |.....+.I\P4g....| -00000330 c4 91 ff 33 ad 87 62 bd 35 e4 bf bf c8 01 9f f7 |...3..b.5.......| -00000340 69 74 b0 45 eb 10 f8 82 f6 bc 56 fa 0f 26 b7 cf |it.E......V..&..| -00000350 13 ad fa 0a 55 c1 06 b2 e7 4f 9f 75 fc 65 d6 ff |....U....O.u.e..| -00000360 e8 2d 21 22 52 bc a1 60 27 f9 7c 18 70 25 f1 76 |.-!"R..`'.|.p%.v| -00000370 8d 4a f9 83 6e a0 52 d7 37 fe 2b 1c f2 03 8e d7 |.J..n.R.7.+.....| -00000380 7d 51 a8 07 0b b8 9c e0 5d a3 ac cc bd d0 c9 8f |}Q......].......| -00000390 36 62 b7 9e 19 0d 62 82 fb c2 68 e3 0f 4f eb 3f |6b....b...h..O.?| -000003a0 33 ec f9 1a 3d c1 3d 68 46 1a 03 e1 fc 65 36 45 |3...=.=hF....e6E| -000003b0 76 c2 87 6e 21 16 03 03 00 4a 7e 1f 28 4d ae 0e |v..n!....J~.(M..| -000003c0 d3 90 13 53 ba 15 7a 68 88 1a ed 5f 50 3c 5d b2 |...S..zh..._P<].| -000003d0 11 5a 40 3a 11 44 a8 ce fa 37 b3 0a d0 02 1e cc |.Z@:.D...7......| -000003e0 f9 2f 6d 28 a8 f1 26 ea 52 36 52 5a 70 3f de 89 |./m(..&.R6RZp?..| -000003f0 5c 11 5f e0 ba 5e 18 b6 b8 b4 55 74 44 c5 a0 7c |\._..^....UtD..|| -00000400 73 7c 51 e5 16 03 03 00 14 2d fe a4 59 be 8a e0 |s|Q......-..Y...| -00000410 4a 6c e0 1a ae 8b ce 04 a0 f2 2f 1b f8 |Jl......../..| +00000000 16 03 03 00 81 25 5a 30 ca 7c f0 f5 7f c4 5f e3 |.....%Z0.|...._.| +00000010 19 4d 25 ea 3d f8 b3 3f 8d e4 89 da db 4e 19 62 |.M%.=..?.....N.b| +00000020 d2 4e 9a a5 5d c6 84 f2 70 f3 b5 10 cb 57 f5 9e |.N..]...p....W..| +00000030 83 a4 78 14 86 3c 27 f5 08 bd c0 59 ab ac 3c 5f |..x..<'....Y..<_| +00000040 8c d7 23 9b c1 9f f4 ad c5 5c 3c 3d bd f4 82 42 |..#......\<=...B| +00000050 58 b8 bf 69 9a 13 2a f6 2d 18 0b df a4 02 74 7d |X..i..*.-.....t}| +00000060 99 69 aa a7 18 e5 2c f1 1e b4 f7 31 96 0f a3 d8 |.i....,....1....| +00000070 63 09 b9 eb c9 15 c1 61 de 8a 8c 30 a6 3a 1f 0f |c......a...0.:..| +00000080 31 06 73 cb 81 57 16 03 03 02 69 b7 45 9e a0 f1 |1.s..W....i.E...| +00000090 46 f5 05 fc 58 a3 cc 88 38 a4 80 e9 1c 31 bb 84 |F...X...8....1..| +000000a0 b1 d2 cb 22 5e 47 cd 97 f5 21 b6 7e df 0a ca ef |..."^G...!.~....| +000000b0 42 71 2f b6 92 c0 44 a9 2f 36 a9 92 9e 23 2f 6a |Bq/...D./6...#/j| +000000c0 7a 2b 70 5b 8d 2e 53 e9 2b ac 39 22 54 e9 e2 82 |z+p[..S.+.9"T...| +000000d0 8e 41 7c 40 c9 97 12 ac c9 91 2d 4d 9b e3 ce 1a |.A|@......-M....| +000000e0 c2 57 d7 e5 89 56 56 52 17 d1 99 99 e0 21 fb f3 |.W...VVR.....!..| +000000f0 94 1c fd 4a 8f 17 00 61 24 1e 86 cc a9 9a d2 75 |...J...a$......u| +00000100 32 b7 44 f4 7b ed 37 46 d3 fb cf 98 0e dd 47 a9 |2.D.{.7F......G.| +00000110 69 f9 ff 34 76 d8 6c 94 7b 97 18 dc 87 25 a0 97 |i..4v.l.{....%..| +00000120 38 d3 df 22 4f 0e b7 c7 91 64 9a d4 04 f4 35 a3 |8.."O....d....5.| +00000130 89 28 e9 04 8e fe ed 8c 3c 9d 18 7e e3 14 2e 4e |.(......<..~...N| +00000140 86 b4 3a 5c 33 f3 27 2c 08 27 91 9a 62 72 c8 98 |..:\3.',.'..br..| +00000150 56 60 1c e6 5e 80 75 56 89 cd 0f 4d 55 1a 52 7d |V`..^.uV...MU.R}| +00000160 39 05 cb e2 5d 33 64 67 4d 3d 90 c6 f2 86 62 ff |9...]3dgM=....b.| +00000170 7f 29 ae fe 49 49 53 6e 4d b9 78 54 ee a6 d7 60 |.)..IISnM.xT...`| +00000180 55 a8 f1 4b 8a 51 6f 09 f2 84 84 89 4b 36 9e 56 |U..K.Qo.....K6.V| +00000190 32 28 71 c8 ec 92 f8 31 c5 af d0 4d 84 0a 1d 37 |2(q....1...M...7| +000001a0 72 ab cf fe ce 02 7c 41 5b f9 44 9c 04 cf 7e 38 |r.....|A[.D...~8| +000001b0 09 5b ce c5 11 ff db df 05 2e c9 66 be 60 cb 5f |.[.........f.`._| +000001c0 e3 ef 88 04 b6 38 a3 5f 58 cc ea bc 6c 83 52 68 |.....8._X...l.Rh| +000001d0 39 ec 88 ca da 49 32 48 6b 5f 93 7d d8 5d 91 e5 |9....I2Hk_.}.]..| +000001e0 4f b4 b5 47 fd 7d 46 82 fd 82 78 14 7a ca d5 e2 |O..G.}F...x.z...| +000001f0 ec 12 09 b4 bd 85 d8 50 03 f6 d1 a7 18 29 ca df |.......P.....)..| +00000200 47 27 41 f7 0b 4c 36 b9 69 b0 71 2c c0 7a 6a 8b |G'A..L6.i.q,.zj.| +00000210 4d 2b 69 02 21 69 f3 38 77 ce ab c6 1c 15 22 f1 |M+i.!i.8w.....".| +00000220 3a 0e b3 5e 2e e5 e5 d5 68 1f b9 60 35 f9 f3 c2 |:..^....h..`5...| +00000230 3d ba 83 39 4f 90 9a ab 7f a1 5b 15 44 e6 b6 0a |=..9O.....[.D...| +00000240 7f e4 4e 5b 5d 97 98 b0 9e 9e 6f b5 c8 2e 8d 0b |..N[].....o.....| +00000250 0c 87 8a fb a7 39 89 9a c9 5b 3e bf 3d 63 da a3 |.....9...[>.=c..| +00000260 0f 1c 92 41 c4 c9 95 b5 e1 2b 37 62 b9 f3 95 ba |...A.....+7b....| +00000270 e5 9c 5e 39 82 5f 7d a9 2b 74 c2 a7 46 64 0f 31 |..^9._}.+t..Fd.1| +00000280 4d 68 d3 05 1f 58 2d 11 c0 2e e2 a9 c2 cb 81 06 |Mh...X-.........| +00000290 0b 77 34 0e af 3e 35 8e 1d 00 40 8e ca b5 02 e8 |.w4..>5...@.....| +000002a0 10 f8 82 36 ae 70 82 74 65 97 b2 91 3f 2e d0 23 |...6.p.te...?..#| +000002b0 40 ef bf d9 d9 1a 7d 4a d0 c1 8b 4a 54 8c 41 22 |@.....}J...JT.A"| +000002c0 07 63 34 bc fb fb 0d e4 9c e2 43 77 13 94 ed 74 |.c4.......Cw...t| +000002d0 8a ac 4a 17 b6 eb 7e 8c dd 82 14 fa 45 a9 ef 1c |..J...~.....E...| +000002e0 01 f7 86 18 c2 a8 33 ab 21 36 4c 6c ac 41 aa b1 |......3.!6Ll.A..| +000002f0 f7 56 48 68 16 03 03 00 bc ab b6 6e 14 2e 1c 47 |.VHh.......n...G| +00000300 90 fa 6f 63 4d 2f 1a 23 48 6f 1d 45 7d 07 e3 06 |..ocM/.#Ho.E}...| +00000310 67 ec b2 b1 74 2e 1e 60 9f 36 5e a6 1c a4 b8 60 |g...t..`.6^....`| +00000320 70 bf 31 68 c0 d5 16 da 6c 44 ce 9c 88 12 84 ef |p.1h....lD......| +00000330 8f 8b ee cc 0d 5b df f0 87 9e 8f 79 e3 e5 b7 cd |.....[.....y....| +00000340 d0 ab 56 68 5d cb 9b b1 66 f3 c3 d4 b8 72 2b 0d |..Vh]...f....r+.| +00000350 ae 4a 2b ea f7 40 6c 94 95 56 1f d4 0b e5 d0 6b |.J+..@l..V.....k| +00000360 8a 3d 11 10 57 1a c4 ad d0 9e 24 a9 77 fb 75 48 |.=..W.....$.w.uH| +00000370 3c 60 19 af 0c 0b 36 43 7d c2 d0 98 14 03 a5 02 |<`....6C}.......| +00000380 36 79 bc 18 da b9 d9 3a 82 1c 9f 49 62 a4 aa cc |6y.....:...Ib...| +00000390 eb a3 88 ec e4 1c df a9 00 00 6e a0 d6 18 a7 da |..........n.....| +000003a0 4b d7 e2 d2 c8 8d d9 ce 45 d5 82 65 bc 82 6d d0 |K.......E..e..m.| +000003b0 26 1b 06 7e eb 16 03 03 00 4a 68 73 85 c5 11 e5 |&..~.....Jhs....| +000003c0 53 6c ee 2c ac ad e5 aa 96 b8 bc 37 8b 37 f4 ac |Sl.,.......7.7..| +000003d0 7a 5c c6 71 59 10 28 f9 ae b3 d7 d7 57 b8 4f 13 |z\.qY.(.....W.O.| +000003e0 78 d0 28 17 02 38 70 d9 85 a1 d3 ae 2a e8 7e 3e |x.(..8p.....*.~>| +000003f0 da 6f d0 0c 62 33 c8 03 de 45 8f b9 1c b0 e4 ea |.o..b3...E......| +00000400 6a 20 fd df 16 03 03 00 14 4d 41 6c 0d 81 3b 6f |j .......MAl..;o| +00000410 9d 6b 53 d7 b7 f9 1a 57 a0 66 8a c2 11 |.kS....W.f...| >>> Flow 9 (client to server) -00000000 16 03 03 02 69 70 17 aa 0e 85 63 a2 39 31 b1 d9 |....ip....c.91..| -00000010 b5 a0 4b 6d 29 eb 23 6c fb 66 11 6f 46 16 65 5e |..Km).#l.f.oF.e^| -00000020 79 75 aa 45 1f eb 07 99 0d 34 fa 10 90 32 5a 94 |yu.E.....4...2Z.| -00000030 2c 85 b2 8f 27 1d ae 15 49 c0 92 49 58 84 54 2a |,...'...I..IX.T*| -00000040 35 d2 f5 56 fd ed c7 0f 33 fe b4 b8 9c 5c 7e 1e |5..V....3....\~.| -00000050 59 ee 41 3e 0c b1 30 f7 2a f4 ca 2c c3 9a 0a a1 |Y.A>..0.*..,....| -00000060 96 96 81 61 77 e4 f2 f5 59 9a 57 71 31 89 7e 25 |...aw...Y.Wq1.~%| -00000070 55 ef 4c 45 8b 54 c8 83 09 41 49 c6 3e cb fe ff |U.LE.T...AI.>...| -00000080 15 ee 48 51 b4 06 c0 c0 27 fb df d1 99 c5 f0 bf |..HQ....'.......| -00000090 fe 07 0b 49 88 fe 53 cf d7 58 12 16 77 5a d1 27 |...I..S..X..wZ.'| -000000a0 29 a2 00 de 48 a6 d3 e6 b2 87 86 55 03 f5 84 3a |)...H......U...:| -000000b0 84 bf 58 ab 48 bc d0 1e f9 89 be 03 d5 af 4b 06 |..X.H.........K.| -000000c0 f2 b5 42 c7 ef a4 bb 92 d1 23 64 ba 36 16 bc ed |..B......#d.6...| -000000d0 ff 3a 43 3a 71 31 66 b5 34 a4 bb 92 3c e2 3e 7c |.:C:q1f.4...<.>|| -000000e0 b2 bb b4 c5 db 1a d4 a8 9a da 16 44 b3 8f 31 39 |...........D..19| -000000f0 3e a7 58 2d 58 af d3 bb ff 70 7e 9d 54 de 90 01 |>.X-X....p~.T...| -00000100 c8 ef d9 24 50 b5 12 c2 ca 7d f6 bf c6 38 1b ad |...$P....}...8..| -00000110 4f 78 70 3d 64 4b 25 4f bc 84 67 5c e1 c6 a4 b7 |Oxp=dK%O..g\....| -00000120 7e 05 30 ad 53 42 d7 40 c8 c0 4d 1b 0c fe 10 a9 |~.0.SB.@..M.....| -00000130 dd 4a 5e 11 3a 79 b7 10 59 a6 5e ef 51 6f cc 4a |.J^.:y..Y.^.Qo.J| -00000140 43 fb fd 5a 51 56 7d d7 d6 23 20 13 13 33 91 43 |C..ZQV}..# ..3.C| -00000150 80 9a 4c e7 f6 78 18 25 02 4a dc 38 19 16 91 ef |..L..x.%.J.8....| -00000160 c9 a6 67 c0 66 85 77 13 3a ff 21 01 ba 65 fc d3 |..g.f.w.:.!..e..| -00000170 23 d8 92 ae 46 a7 a4 7f 5f 57 3d 6d 7c f9 9c d7 |#...F..._W=m|...| -00000180 3d 56 54 4a 69 1d 62 38 d3 75 5c 9b a8 c9 b5 4e |=VTJi.b8.u\....N| -00000190 b7 d6 9e 1a 51 76 57 7b bd bb bd 4b e8 ed 2f df |....QvW{...K../.| -000001a0 34 72 6a 9c 54 3f ff f4 fe 30 3a 4f 2c 74 97 59 |4rj.T?...0:O,t.Y| -000001b0 03 8c cc 71 f3 63 c8 04 55 37 e7 39 5c 0a 84 c6 |...q.c..U7.9\...| -000001c0 75 fc b1 7f 24 59 e0 ca 59 50 29 1a 0d d3 27 47 |u...$Y..YP)...'G| -000001d0 9e ea 6d 66 5a 22 e7 0d 10 56 a2 95 de 84 0e 7e |..mfZ"...V.....~| -000001e0 6d 3a 63 d3 b4 c3 8c 61 79 f5 0a 69 51 a6 c9 69 |m:c....ay..iQ..i| -000001f0 8d 3a f8 e5 7c 04 6b ed c7 5e 70 61 d4 38 c2 93 |.:..|.k..^pa.8..| -00000200 84 26 23 c9 84 a5 ee b5 35 a9 18 6d 84 b1 bd de |.&#.....5..m....| -00000210 72 14 73 a4 ab db 68 47 b3 13 37 e7 56 a3 35 0d |r.s...hG..7.V.5.| -00000220 2c 54 88 21 d4 f1 2f ed 74 85 d6 19 45 9d 62 fa |,T.!../.t...E.b.| -00000230 02 45 d3 14 c9 8f df bd 9f fe da ab c7 e7 4c 96 |.E............L.| -00000240 62 92 ee 4f 41 99 4a 04 18 01 63 cf d1 f6 8a b0 |b..OA.J...c.....| -00000250 b5 d5 f7 26 c6 4a c7 a2 d0 f1 72 3b bf 20 82 c3 |...&.J....r;. ..| -00000260 23 c7 be 4c 55 35 c6 53 27 aa 99 38 8c da 16 03 |#..LU5.S'..8....| -00000270 03 00 35 ba 6e aa 5f 90 48 ee 19 33 dd 0d fc 31 |..5.n._.H..3...1| -00000280 cb ce 1e f2 7b 6b ff 44 60 90 88 13 c6 50 2b f5 |....{k.D`....P+.| -00000290 50 ba 48 ce 6e 3c e5 96 a8 30 bf bd de ba ab 21 |P.H.n<...0.....!| -000002a0 da ff 8b 50 4b 65 5f a3 16 03 03 00 98 87 74 48 |...PKe_.......tH| -000002b0 d2 88 7a b1 67 57 b0 c2 01 be e0 e9 41 6a 56 8f |..z.gW......AjV.| -000002c0 87 6c d2 37 09 45 40 59 9c 50 83 1b 48 6c b4 e4 |.l.7.E@Y.P..Hl..| -000002d0 d3 9b 6d 46 89 83 2a 88 4c b3 b2 58 29 3e 41 76 |..mF..*.L..X)>Av| -000002e0 4c 8a a0 cb aa e9 17 7f 48 7b 14 8a f7 ba 31 b4 |L.......H{....1.| -000002f0 b6 3a e0 12 e6 88 8c 24 5f 97 93 46 bf 27 f3 fd |.:.....$_..F.'..| -00000300 e4 d4 54 54 9e 46 b6 1d 8e 8d 20 49 7e bd 6f 09 |..TT.F.... I~.o.| -00000310 55 af 5d 7f 24 df 69 1b dc a5 76 0c 34 e7 af 4c |U.].$.i...v.4..L| -00000320 2c 1d 2c db 97 37 81 29 41 c1 4e 65 65 33 44 7c |,.,..7.)A.Nee3D|| -00000330 34 a2 dd fd 38 e4 e3 e1 dc af 2f 3f 64 2c 40 80 |4...8...../?d,@.| -00000340 cc ff d2 d4 a7 14 03 03 00 11 8a 81 be 84 7b 14 |..............{.| -00000350 28 fc b3 a5 ad 75 d6 ee 6e 5d 9b 16 03 03 00 20 |(....u..n]..... | -00000360 87 3c 57 93 46 06 f0 6f 18 ce 33 5d 77 33 6c a6 |.Q.......| +00000270 03 00 35 d2 71 1a 6d a7 5d a8 ef f0 06 72 e8 fb |..5.q.m.]....r..| +00000280 8d 9b c4 15 49 94 33 95 ad be 75 e3 f9 0f 0a 12 |....I.3...u.....| +00000290 aa e8 4f d9 75 b1 74 17 35 83 e5 19 ee 77 15 b8 |..O.u.t.5....w..| +000002a0 96 b5 39 71 b4 cd ce e2 16 03 03 00 98 12 dc b2 |..9q............| +000002b0 5d 91 b2 41 9c 15 9c 9e 02 bc 7b 53 a6 1e b4 5e |]..A......{S...^| +000002c0 4d 09 6d 3c 74 9c 08 59 ac 02 3a 3f 5f 20 6b 41 |M.miS| +00000340 ee 6c 2f 12 b1 14 03 03 00 11 f4 df 0d 7c 69 ab |.l/..........|i.| +00000350 2f 66 af 42 39 df 8b 11 90 a6 32 16 03 03 00 20 |/f.B9.....2.... | +00000360 28 f1 b1 31 fa 17 04 ab 6f c8 84 a8 47 ba 9d ac |(..1....o...G...| +00000370 8b a2 37 c5 47 9d 65 5f a2 b1 fb fc e8 0e db 29 |..7.G.e_.......)| >>> Flow 10 (server to client) -00000000 14 03 03 00 11 79 d6 72 03 0f 48 d1 78 b5 5e 31 |.....y.r..H.x.^1| -00000010 d6 e0 42 bc 6e 60 16 03 03 00 20 3b f1 7f a5 ab |..B.n`.... ;....| -00000020 b7 b7 10 db 3d d6 7a 8a 5a bc c5 af 58 ca 5a 0b |....=.z.Z...X.Z.| -00000030 07 27 2d df e9 aa 44 47 73 ab c5 17 03 03 00 19 |.'-...DGs.......| -00000040 0c d2 a9 df 85 db f3 99 1d 4a ce 4e 40 69 2f d7 |.........J.N@i/.| -00000050 d7 0b e3 dc b8 af 56 99 89 16 03 03 00 14 01 f2 |......V.........| -00000060 5b 6b c9 00 1c 12 e6 14 8d b6 ea 0d 18 19 a9 bd |[k..............| -00000070 07 e3 |..| +00000000 14 03 03 00 11 f5 62 67 0e 91 7e aa 24 ec 3f f2 |......bg..~.$.?.| +00000010 9f 28 6f 5d 82 d5 16 03 03 00 20 0e 66 b9 47 16 |.(o]...... .f.G.| +00000020 b2 77 dc c5 3f ac f9 6a 4e f9 78 c4 25 64 f2 1f |.w..?..jN.x.%d..| +00000030 6c f1 51 7f c8 5d 21 7f 0e 5c ac 17 03 03 00 19 |l.Q..]!..\......| +00000040 69 4e ff 74 0b c7 7a ce 64 71 c9 a1 6b dd b9 9b |iN.t..z.dq..k...| +00000050 9d 6b 21 bb cb b8 37 4d 87 16 03 03 00 14 1a 98 |.k!...7M........| +00000060 7e 2f 5a 82 51 2c 0f 0d 79 25 4e 6f 11 dc 97 86 |~/Z.Q,..y%No....| +00000070 64 23 |d#| >>> Flow 11 (client to server) -00000000 16 03 03 01 14 5d 6b cf 2d 1d 78 18 d3 88 51 6c |.....]k.-.x...Ql| -00000010 34 c2 bb f0 e6 a9 8c d9 19 7f f8 3e c1 13 19 2b |4..........>...+| -00000020 61 65 46 cd 4b 3d 2e 91 a4 32 5e 49 ac 4c 67 8c |aeF.K=...2^I.Lg.| -00000030 4a 82 70 18 ac c5 70 b5 c8 9b 6b be 01 0d 91 ca |J.p...p...k.....| -00000040 ea 4d 78 e3 e5 e7 0c db 6b f4 03 31 11 e8 32 ea |.Mx.....k..1..2.| -00000050 bf 6b c2 0d f8 5f 5b 56 20 e9 81 41 53 59 e9 0e |.k..._[V ..ASY..| -00000060 a6 53 59 2e d3 cd 36 02 54 b3 c3 d5 70 64 41 b7 |.SY...6.T...pdA.| -00000070 82 55 10 89 7e 3e 4d 5b c3 32 57 ee 6c 80 6c b7 |.U..~>M[.2W.l.l.| -00000080 4e 20 ac 13 cb 9c 78 b3 eb fb 8d 0c 8a e4 4a 58 |N ....x.......JX| -00000090 de 71 71 6a 54 74 5f 12 3a 52 0f 14 93 1b f7 8f |.qqjTt_.:R......| -000000a0 14 fa 76 76 19 5b eb 8d 61 d7 ed c7 68 ed 1b 9d |..vv.[..a...h...| -000000b0 1b 91 e4 92 df 88 4f af 3c 43 38 fa 0d 19 51 3a |......O.| -000000e0 90 6e 9c 03 ff 9e 44 34 43 38 b6 0f 1f 57 11 cf |.n....D4C8...W..| -000000f0 c3 ad 0d 70 98 6e e5 70 7b 76 c7 f1 6b 69 2f 40 |...p.n.p{v..ki/@| -00000100 df fe 47 c4 32 35 1d 03 42 a0 cc ee dd 5f 34 da |..G.25..B...._4.| -00000110 74 85 4d 56 de e4 bd 0d b5 |t.MV.....| +00000000 16 03 03 01 16 08 6c 5f e7 b8 3e 36 50 c0 05 0c |......l_..>6P...| +00000010 a6 fa 1a f8 83 3f 1f fd fd ae 62 15 4b 4e 80 8b |.....?....b.KN..| +00000020 5a f4 a2 3e 67 df 82 28 e4 eb f4 26 5c 62 53 6e |Z..>g..(...&\bSn| +00000030 dc 20 7f e7 af 68 7a 0b 10 77 12 36 97 c3 b9 06 |. ...hz..w.6....| +00000040 d1 78 46 4f e9 61 f4 65 8a d6 c9 ed 2d 00 9c de |.xFO.a.e....-...| +00000050 20 b5 20 99 cd 90 d6 d1 04 26 bd 75 42 eb ad 6a | . ......&.uB..j| +00000060 27 27 9c 20 5b 22 e6 e3 cc 67 0e b2 ae c7 4c d5 |''. ["...g....L.| +00000070 fa e5 c0 bc 7e c6 20 d1 75 f5 bf 18 fd bf 5c 36 |....~. .u.....\6| +00000080 95 66 38 ab 53 ad 77 d7 ad fb 15 de 2a 66 86 56 |.f8.S.w.....*f.V| +00000090 1c b9 4f 73 cb 9a d1 9d 60 a8 ce c0 22 ae f4 49 |..Os....`..."..I| +000000a0 23 86 48 a2 a4 81 28 a9 d1 53 26 c6 a0 71 54 90 |#.H...(..S&..qT.| +000000b0 54 a9 e8 df 9a f9 af 59 29 52 95 73 6f b3 0b 07 |T......Y)R.so...| +000000c0 ed a5 1c fb 93 29 bf c7 30 bf e4 d1 5c 5c 04 ef |.....)..0...\\..| +000000d0 f0 84 15 06 f4 28 b3 a4 ad d5 48 6b e8 ff 24 09 |.....(....Hk..$.| +000000e0 e8 28 c4 ad de d4 8e e1 d2 e5 3b f1 03 0d 9d 61 |.(........;....a| +000000f0 f2 b3 2a 85 dd dd a6 2d 3c c0 b2 7c c6 81 fb a8 |..*....-<..|....| +00000100 da 3b 85 72 13 37 a4 da 11 cd 54 3e 84 43 4d 47 |.;.r.7....T>.CMG| +00000110 30 ed 39 6d c7 a1 6a ea 39 80 75 |0.9m..j.9.u| >>> Flow 12 (server to client) -00000000 16 03 03 00 81 06 1c 3a f7 71 f8 76 6c b0 7b fc |.......:.q.vl.{.| -00000010 04 d3 69 d9 6d 26 1c 0b fb 7e 16 41 78 bc ba b8 |..i.m&...~.Ax...| -00000020 ee 1f f5 00 e7 1d 32 84 7f 87 66 cb f9 5e e5 6c |......2...f..^.l| -00000030 26 f9 64 83 13 49 a6 ab 98 a2 74 25 61 e1 3a ec |&.d..I....t%a.:.| -00000040 f8 8f 0b e4 ca c3 0d 52 76 38 e2 d1 86 ac ee 7b |.......Rv8.....{| -00000050 5c 69 96 e3 ec 3b f0 5a 4c 5e 8b 73 8f 24 75 bc |\i...;.ZL^.s.$u.| -00000060 7a 48 b3 b2 cc 55 7d 20 4a e1 9b 90 5e 47 b5 71 |zH...U} J...^G.q| -00000070 88 e6 8a a1 a4 f6 45 8e 8b 5b ed 45 96 95 96 7d |......E..[.E...}| -00000080 8b 7c 4d 03 64 34 16 03 03 02 69 d5 41 cd af 43 |.|M.d4....i.A..C| -00000090 42 5f f3 98 87 0a 55 7f c3 02 9c dd b5 8c 22 2e |B_....U.......".| -000000a0 8f 52 71 29 8a 33 dc 22 45 fc 61 bf b4 db fe 4c |.Rq).3."E.a....L| -000000b0 de 69 10 69 df a2 45 e5 fa 78 e8 1c 0a d0 c6 7d |.i.i..E..x.....}| -000000c0 7e 26 3b 12 e0 56 a2 c7 b8 cd 2a 15 8d 20 2a 86 |~&;..V....*.. *.| -000000d0 67 f6 e8 36 3d c6 3e 75 09 15 ba 36 37 46 f0 45 |g..6=.>u...67F.E| -000000e0 de 7a 49 fd 32 3c fc 2f ab de 9c 28 f7 20 ad aa |.zI.2<./...(. ..| -000000f0 e7 10 60 24 71 35 bf 1c ba 4e 98 92 e0 44 0a 39 |..`$q5...N...D.9| -00000100 3c f6 7d 0f 4f aa b4 db 22 7b b5 cc f6 0a 59 46 |<.}.O..."{....YF| -00000110 ba 8d ef dc 13 b5 bd 55 cd 73 50 e7 cb b3 08 3e |.......U.sP....>| -00000120 0c a2 d7 5a 12 bf ce 99 8d 05 ee 4a 03 e9 b7 65 |...Z.......J...e| -00000130 0c 1e 41 46 08 bb 2c 9e 7e e2 c1 6f 3d 9f f4 e2 |..AF..,.~..o=...| -00000140 cc c5 7c b6 87 aa 49 8e a6 67 46 88 d0 ae 17 c9 |..|...I..gF.....| -00000150 14 ae 63 67 bc 57 02 8f 84 90 17 e0 1d 48 80 c2 |..cg.W.......H..| -00000160 7a f2 be c1 5a 44 b3 f3 3a 9a ac b0 41 87 a7 07 |z...ZD..:...A...| -00000170 bb b2 7d 7c 0d 42 a3 c6 d8 d9 ef 0c c6 5b 14 f6 |..}|.B.......[..| -00000180 82 cd 12 01 39 78 dc b2 46 59 22 22 1f d9 39 cf |....9x..FY""..9.| -00000190 b6 ac 13 be 22 50 37 10 33 01 0e 13 ee bc f3 bf |...."P7.3.......| -000001a0 55 c6 61 2a e0 ee 25 f3 01 35 69 7a 74 70 bd 6c |U.a*..%..5iztp.l| -000001b0 d5 08 c5 a3 09 71 8d ea 39 ec 0e c0 f0 16 2f 71 |.....q..9...../q| -000001c0 86 af 28 d9 3e d4 45 b2 ce e7 f8 2b bd 54 9c 98 |..(.>.E....+.T..| -000001d0 85 7d 2a f8 fe a5 95 0b da 08 2a 32 f7 c3 ad 09 |.}*.......*2....| -000001e0 2a aa ee ee 54 fa d5 2d 84 45 cf a0 2c 9c 9b 4a |*...T..-.E..,..J| -000001f0 3c 86 4f 20 12 a7 8a b5 91 36 a9 d2 1a 76 2d 1f |<.O .....6...v-.| -00000200 61 8d 5c 69 15 a1 36 ce 6b 99 48 c9 73 b0 58 69 |a.\i..6.k.H.s.Xi| -00000210 38 c2 48 5d 74 69 7b fb e8 b1 0f a1 03 d6 bd 5f |8.H]ti{........_| -00000220 5c 44 fa 0f 33 33 ce f0 ab 02 f3 26 9f bc 5b 3d |\D..33.....&..[=| -00000230 3f 08 00 a9 1b a5 ee 92 8c 62 a5 32 22 10 05 0e |?........b.2"...| -00000240 bb 59 03 03 6f 5f d1 39 3e 14 66 2f 92 e6 5a 21 |.Y..o_.9>.f/..Z!| -00000250 3a ae b0 12 2c 74 f1 b1 d7 55 9b e9 0c 2a c5 db |:...,t...U...*..| -00000260 ac ae a3 69 49 de 4b 10 68 d4 05 f2 ff 4b c6 21 |...iI.K.h....K.!| -00000270 f8 a7 8f dc 5f 82 f9 4f cf 2e 68 1a 7b 6f 3a eb |...._..O..h.{o:.| -00000280 13 a8 c3 9f 86 aa 80 d3 5c f0 b0 f5 7b 8b 91 2c |........\...{..,| -00000290 e3 d2 bd 9c ad 66 dc 7c 77 0d 73 4e 0b 51 91 23 |.....f.|w.sN.Q.#| -000002a0 f3 38 bb 2b 5a ee 1a 1e 39 40 b1 a3 b9 14 0f 16 |.8.+Z...9@......| -000002b0 78 c9 4a 6e df c4 a4 ce 53 e9 a1 f9 17 14 0a e6 |x.Jn....S.......| -000002c0 b6 3e 4a 25 6f 6e 00 8c a5 67 98 ec e3 22 fe 30 |.>J%on...g...".0| -000002d0 1d 43 c7 62 c8 2a a5 6f 88 99 f6 d1 ba 8a 73 16 |.C.b.*.o......s.| -000002e0 2f 11 b6 a3 46 25 59 67 6e 8b 38 ec ad a4 06 19 |/...F%Ygn.8.....| -000002f0 6e 2e 6c 39 16 03 03 00 bc b5 1d 9a f1 bd 76 6b |n.l9..........vk| -00000300 01 48 91 51 c4 d1 9a a6 35 f5 a8 b3 51 f3 98 cb |.H.Q....5...Q...| -00000310 6d 0e 6d 4f 6f 8b 2b dd 2c 3b b5 0e f0 c5 6a e6 |m.mOo.+.,;....j.| -00000320 ed 04 60 94 3f d2 6a af cf 9b 25 7f d9 56 4e 48 |..`.?.j...%..VNH| -00000330 2c 6b 9c 2c 68 da ed 83 87 13 90 0a 77 39 7e 69 |,k.,h.......w9~i| -00000340 ec 2c 4b bb 51 82 55 9d 8e 59 69 6e 72 dd 4d fb |.,K.Q.U..Yinr.M.| -00000350 2a 5c cf ef 47 13 8d 94 48 5e e8 8f 2c d4 47 14 |*\..G...H^..,.G.| -00000360 82 aa e4 24 04 3f 8c ef c8 3b 15 c0 53 63 b5 6b |...$.?...;..Sc.k| -00000370 ee f7 16 45 17 e4 6b 41 99 4b 18 34 c8 7c 09 f5 |...E..kA.K.4.|..| -00000380 3a f3 79 06 ea 5d f8 96 48 9d 6f c7 ac 55 b0 9e |:.y..]..H.o..U..| -00000390 f9 95 6d e2 31 ce ac 6a b6 4e 8d 66 16 1f dd d9 |..m.1..j.N.f....| -000003a0 e2 2a c6 7d fa ef 37 e6 7b 01 a1 f7 71 76 14 9a |.*.}..7.{...qv..| -000003b0 08 ed a9 f7 8d 16 03 03 00 14 aa 66 05 9c d7 08 |...........f....| -000003c0 9e d8 82 f7 91 18 57 23 4d 9f e9 17 ee f3 |......W#M.....| +00000000 16 03 03 00 81 4d dc 53 4e 94 ec b0 47 9b 8f 04 |.....M.SN...G...| +00000010 98 4e 78 3a d2 64 0a 11 65 38 15 71 35 06 83 96 |.Nx:.d..e8.q5...| +00000020 0d 0d 54 4b 4b aa 9d 3f a1 dc 89 78 c2 a4 6c 89 |..TKK..?...x..l.| +00000030 c9 56 f1 aa 9a d4 23 9a 21 af 51 73 fe 52 98 af |.V....#.!.Qs.R..| +00000040 d5 af 55 66 f0 bf 4d a4 73 b4 06 55 aa 01 39 49 |..Uf..M.s..U..9I| +00000050 8d 8d 21 bf 17 45 70 1a 95 ab df fa db 24 e2 f7 |..!..Ep......$..| +00000060 e4 98 dc 86 15 b1 d4 7a 11 c4 b2 72 80 fb 51 fa |.......z...r..Q.| +00000070 8d b3 6e 94 5d d0 0b 47 e0 43 78 ef ce b0 69 40 |..n.]..G.Cx...i@| +00000080 d7 b5 26 ad 90 24 16 03 03 02 69 d8 13 11 85 13 |..&..$....i.....| +00000090 e2 4c 6a 6b 70 85 ba d4 70 c4 23 84 d5 3d 39 0c |.Ljkp...p.#..=9.| +000000a0 03 37 a2 e7 77 c9 0f 0d 8f 7c 6c d4 f3 6e d9 71 |.7..w....|l..n.q| +000000b0 99 d7 33 dc ab 82 24 b7 7c 7d 92 b0 da 52 6a 5c |..3...$.|}...Rj\| +000000c0 b8 ae ad 8f 98 e7 65 e9 ce 16 ee d3 51 09 52 dd |......e.....Q.R.| +000000d0 be 96 76 37 1c 40 83 da 14 ad 61 df 09 2b 68 4f |..v7.@....a..+hO| +000000e0 d1 e0 93 f3 d0 c4 ad be 53 c5 5c 2e ee 79 42 3d |........S.\..yB=| +000000f0 fa 04 7b d0 bd 7a 8f 2b 5f 2a b0 d7 98 81 45 14 |..{..z.+_*....E.| +00000100 28 ab 85 63 28 6f a1 49 cb 2f b2 76 f1 cc 77 5f |(..c(o.I./.v..w_| +00000110 6b ef 9c d5 47 b7 c9 f9 b5 58 c3 37 79 93 36 5b |k...G....X.7y.6[| +00000120 00 13 ef bc 36 68 33 46 58 ae 48 11 59 52 59 f2 |....6h3FX.H.YRY.| +00000130 74 6a 71 fe 63 38 f0 84 9a 7d 39 d6 f7 a1 92 ee |tjq.c8...}9.....| +00000140 85 d3 3e 44 29 3d 71 b5 d5 fb 26 c3 57 ac d8 60 |..>D)=q...&.W..`| +00000150 de 6c de 9e e0 61 e6 c4 75 3a 01 d5 ae 15 bd 51 |.l...a..u:.....Q| +00000160 27 ff e6 b5 65 c2 30 96 10 0f 31 6c 8b d3 16 ee |'...e.0...1l....| +00000170 ec 52 80 dc e7 84 29 9b e2 71 13 54 c3 58 b5 8b |.R....)..q.T.X..| +00000180 22 4d c0 41 33 69 c1 fe e3 f0 42 39 ee fd c0 6a |"M.A3i....B9...j| +00000190 c1 52 5a 64 8b a6 f0 16 71 cf 45 2b cf fe 5d 74 |.RZd....q.E+..]t| +000001a0 b4 7f 25 dd 46 b0 e2 51 42 59 e3 79 c9 f1 f4 d0 |..%.F..QBY.y....| +000001b0 28 f8 74 f1 df 74 e6 b6 0b 8a be 11 e0 67 c1 79 |(.t..t.......g.y| +000001c0 a1 7c 18 0e 65 8b 5c 76 3c c1 7c 79 5f b9 06 3a |.|..e.\v<.|y_..:| +000001d0 ce a3 69 04 cf 9c 1e bf 5e 53 4e ac 79 59 63 ec |..i.....^SN.yYc.| +000001e0 57 5b 87 c5 48 cb 13 09 9f 68 61 02 e4 3b a1 2d |W[..H....ha..;.-| +000001f0 a7 86 95 39 1e 83 05 50 e2 f9 ad 9b 92 2f f5 21 |...9...P...../.!| +00000200 e9 da 58 e6 d9 ef 9e 69 62 dc e1 8f a5 04 89 db |..X....ib.......| +00000210 2f 41 f6 37 c6 fa e1 d6 c5 73 3f 54 e8 dc d3 bb |/A.7.....s?T....| +00000220 d6 83 23 c9 c5 e6 85 67 78 39 21 4f 99 88 21 81 |..#....gx9!O..!.| +00000230 88 a7 8d cd ed e7 68 05 84 c0 32 34 39 85 79 7d |......h...249.y}| +00000240 18 28 94 25 ee e8 9d c6 40 03 c7 1b 6c 4c 27 33 |.(.%....@...lL'3| +00000250 c1 65 79 8b e5 9b 54 9b 91 e0 b8 7f 7b 8b 66 b2 |.ey...T.....{.f.| +00000260 5f 2b 18 52 ad 69 d6 6a f8 22 c5 a9 fc e0 1d 72 |_+.R.i.j.".....r| +00000270 ae 18 13 ba 33 b7 ed 0e 6c 49 95 01 1e 3c 72 ed |....3...lI......Y.&1.| +000002d0 b7 0f 37 9c 44 53 2c b7 0a 01 8c 10 00 92 0c cf |..7.DS,.........| +000002e0 e5 aa 62 a7 ef 8a d9 9a 2c 2a ec 35 6e ab 5c e0 |..b.....,*.5n.\.| +000002f0 ee 34 ff dd 16 03 03 00 bc 9c 3f f9 18 06 c1 bc |.4........?.....| +00000300 51 3b f7 9b 00 3e db 7c 0b 6b cd 0d 15 01 2d 00 |Q;...>.|.k....-.| +00000310 d8 be 79 94 56 a3 2f e0 fb 04 da 77 4b ff 68 42 |..y.V./....wK.hB| +00000320 b1 ca 12 0d e8 af a7 fc 12 7a 85 82 21 71 90 9d |.........z..!q..| +00000330 63 ff 60 ed 18 65 c3 6c eb 84 81 fb ff fa e5 ea |c.`..e.l........| +00000340 bc e7 d5 d0 14 6f ee bb 17 a8 0d ed 2d dd 94 0c |.....o......-...| +00000350 8c 3f db e3 57 53 e8 27 9c b5 61 e6 a4 07 9b 0e |.?..WS.'..a.....| +00000360 a9 0a b5 56 cb 08 8c 6d 90 8b 25 4b 56 30 70 7c |...V...m..%KV0p|| +00000370 7a c8 a9 97 53 e1 8a 59 bb 7c bb 93 96 90 e1 af |z...S..Y.|......| +00000380 32 c4 14 24 06 2e 68 84 ac 21 1e 44 3b 3b 7e 35 |2..$..h..!.D;;~5| +00000390 b8 41 27 bb 9c d8 c6 9e dc 9d 89 9a 3b fa a5 fd |.A'.........;...| +000003a0 10 43 74 d6 a8 15 14 80 38 3d 30 e0 b0 eb ec 25 |.Ct.....8=0....%| +000003b0 3b 47 ec 85 87 16 03 03 00 14 2f f9 cd f0 af 35 |;G......../....5| +000003c0 69 f4 32 4e 55 10 9f fc 0e 69 34 be bc 06 |i.2NU....i4...| >>> Flow 13 (client to server) -00000000 16 03 03 00 35 9c d8 7f 73 12 30 50 85 5c 45 76 |....5...s.0P.\Ev| -00000010 ea c9 c6 4d af 5a 6a 4d a1 89 1e cd 6d 6a b7 49 |...M.ZjM....mj.I| -00000020 cc 3f d5 19 6e 20 d7 f0 8f 1f 62 a1 17 a5 b8 68 |.?..n ....b....h| -00000030 c0 67 f4 5d 97 76 42 00 4f 51 14 03 03 00 11 bb |.g.].vB.OQ......| -00000040 bc 4b 90 9d cd a7 c1 2a c2 e0 26 0e 56 ff 13 53 |.K.....*..&.V..S| -00000050 16 03 03 00 20 79 6d 6d 5a c5 0c 6e be bb 5b f7 |.... ymmZ..n..[.| -00000060 66 02 50 f4 47 bf b3 bf 7c 76 e2 e1 ae dc 99 57 |f.P.G...|v.....W| -00000070 2c 31 bb 7f c9 |,1...| +00000000 16 03 03 00 35 d6 3f 29 84 29 7e 6b a9 c8 30 51 |....5.?).)~k..0Q| +00000010 e9 ab f5 2e f6 ae 21 f0 f2 81 cd d3 29 d1 90 4a |......!.....)..J| +00000020 72 a0 42 0b 37 db be 88 fe eb 83 4e f8 d1 1e 11 |r.B.7......N....| +00000030 18 13 8e 93 cd c2 be ed fa 6b 14 03 03 00 11 43 |.........k.....C| +00000040 58 95 9e e8 f3 55 52 86 10 4c 9f 43 4c 10 b7 c5 |X....UR..L.CL...| +00000050 16 03 03 00 20 e8 98 d2 f8 ba 0f 82 98 f2 dc f7 |.... ...........| +00000060 f8 62 3c 35 e6 f4 4a 8e d4 c1 28 73 21 8d 98 ea |.b<5..J...(s!...| +00000070 97 c9 28 36 6e |..(6n| >>> Flow 14 (server to client) -00000000 14 03 03 00 11 1b d5 02 f0 2f 26 af 60 d4 c5 18 |........./&.`...| -00000010 86 d6 d3 7a 70 7e 16 03 03 00 20 03 bd c7 ba 11 |...zp~.... .....| -00000020 ab 10 4e 29 23 6c c9 7e 04 b2 da f4 87 3b d7 f1 |..N)#l.~.....;..| -00000030 55 e7 09 29 99 f0 8f cc 3c 98 25 17 03 03 00 19 |U..)....<.%.....| -00000040 6b 68 7e 24 a0 ce 39 e6 1e ca 06 59 71 a1 b1 8a |kh~$..9....Yq...| -00000050 f0 eb 5d 30 84 04 46 64 5f |..]0..Fd_| +00000000 14 03 03 00 11 f0 39 a2 95 5c ed d1 ae 22 c3 30 |......9..\...".0| +00000010 ba 24 34 92 f9 2e 16 03 03 00 20 cb 3c c6 a2 59 |.$4....... .<..Y| +00000020 0a 06 3b 51 dc f4 07 16 5f 59 55 3d 7a ff c6 a6 |..;Q...._YU=z...| +00000030 5f c9 6f 05 ec a5 ca 26 e8 a2 98 17 03 03 00 19 |_.o....&........| +00000040 e7 70 10 59 2a fd 3a a2 bb 68 f9 67 c5 02 ff 0f |.p.Y*.:..h.g....| +00000050 df 4b b9 4a af ae 99 3a 37 |.K.J...:7| >>> Flow 15 (client to server) -00000000 15 03 03 00 12 91 57 e3 8e 3b e2 17 df 7d 1a d1 |......W..;...}..| -00000010 cc 0d 9b bf fc f6 42 |......B| +00000000 15 03 03 00 12 5c bf f0 9d 23 49 46 1d 56 03 45 |.....\...#IF.V.E| +00000010 73 2d d2 38 3e 7a 75 |s-.8>zu| diff --git a/src/crypto/tls/testdata/Client-TLSv12-RenegotiateTwiceRejected b/src/crypto/tls/testdata/Client-TLSv12-RenegotiateTwiceRejected index 45c7804aaa..91566b1a1f 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-RenegotiateTwiceRejected +++ b/src/crypto/tls/testdata/Client-TLSv12-RenegotiateTwiceRejected @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 e7 f0 26 e8 9f |....Y...U....&..| -00000010 05 30 9e e5 7c 31 a5 b8 a9 38 35 c3 9c c1 d2 d3 |.0..|1...85.....| -00000020 65 ab 3b 55 62 f9 c8 1f 6e 2e 57 20 0e 70 71 1a |e.;Ub...n.W .pq.| -00000030 59 05 45 40 2d 93 c4 0a 15 0b 16 0f 23 bb 28 33 |Y.E@-.......#.(3| -00000040 03 db 44 75 0a 0f 5e 0a 7b 9e 47 63 cc a8 00 00 |..Du..^.{.Gc....| +00000000 16 03 03 00 59 02 00 00 55 03 03 ef fc 56 c9 fb |....Y...U....V..| +00000010 4a 34 30 75 fd ee 15 a8 0c dd b5 a6 e8 80 9a 67 |J40u...........g| +00000020 5f f7 a6 14 be 5b 9c b1 31 f2 5a 20 5a 88 e1 e8 |_....[..1.Z Z...| +00000030 84 21 a5 0a 69 ca 66 d2 f0 9f a3 d8 fb f6 2c f6 |.!..i.f.......,.| +00000040 44 50 b4 77 7e c0 ce 6c f0 43 f4 9c cc a8 00 00 |DP.w~..l.C......| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 59 0b 00 02 55 00 02 52 00 02 4f 30 82 02 |..Y...U..R..O0..| 00000070 4b 30 82 01 b4 a0 03 02 01 02 02 09 00 e8 f0 9d |K0..............| @@ -60,188 +60,188 @@ 00000290 77 8d 0c 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d |w.......@.a.Lr+.| 000002a0 ae db 46 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db |..F..M...>...B..| 000002b0 fe 3d 13 60 84 5c 21 d3 3b e9 fa e7 16 03 03 00 |.=.`.\!.;.......| -000002c0 ac 0c 00 00 a8 03 00 1d 20 04 06 15 25 55 6d c0 |........ ...%Um.| -000002d0 d0 71 c9 f8 4e d2 48 f3 7d 0b dc 99 a0 67 2a 5d |.q..N.H.}....g*]| -000002e0 eb ce a1 00 b3 d3 8d cd 4c 08 04 00 80 d3 0d 6d |........L......m| -000002f0 a1 41 2e b5 06 c0 e0 9b 70 c0 1a c3 45 61 3e 86 |.A......p...Ea>.| -00000300 02 a8 04 76 f2 87 1d 58 98 82 38 dc 01 9d 5a 53 |...v...X..8...ZS| -00000310 07 3c 65 66 68 bc e4 8f e9 d4 65 b1 0d 90 0f 7f |.f]^...#..| -00000160 b1 e0 f7 e9 af 4c e2 d4 7d 92 df ef c5 16 57 de |.....L..}.....W.| -00000170 1d 68 23 53 46 8b 22 8c d0 8d 25 f6 07 75 b0 19 |.h#SF."...%..u..| -00000180 e1 80 82 67 d5 74 f2 2e 51 34 f0 84 56 5b 45 de |...g.t..Q4..V[E.| -00000190 d1 eb 00 41 94 f4 15 ef 60 23 39 63 cb f0 86 e7 |...A....`#9c....| -000001a0 ee cc 34 cc b4 14 f7 f9 71 48 0c f0 66 9f d3 0c |..4.....qH..f...| -000001b0 92 a4 20 9c 40 44 da e5 4f a2 91 de a4 6b c3 5f |.. .@D..O....k._| -000001c0 0c dd b4 22 e7 6a b8 f3 46 2d aa 0d f3 c6 b6 10 |...".j..F-......| -000001d0 9a 69 f1 3c a4 89 6f d5 b6 45 6c e5 7b 10 d8 f4 |.i.<..o..El.{...| -000001e0 7f 9e 83 eb 44 5f 6c 00 e0 a9 5a 56 c8 80 5a 92 |....D_l...ZV..Z.| -000001f0 20 48 7c ee 22 65 8a e2 35 55 3f 7c 1a bd 4c cf | H|."e..5U?|..L.| -00000200 84 2e af 26 d1 d1 1a fc 81 d3 90 a8 9e d0 56 c3 |...&..........V.| -00000210 f4 f9 7e ac 29 9e d8 91 57 a0 a2 7b 00 b2 42 0f |..~.)...W..{..B.| -00000220 d0 5e ce 26 3c de f7 75 2d c9 74 c7 98 72 c8 b1 |.^.&<..u-.t..r..| -00000230 86 33 81 21 f5 f7 4c c9 f3 04 c2 48 24 d0 3e a6 |.3.!..L....H$.>.| -00000240 c4 8d 0f 3e 25 09 32 36 66 4c e4 67 27 4d 09 71 |...>%.26fL.g'M.q| -00000250 45 91 8e 6a ca a1 ab 69 4a 20 ea e6 a5 a1 8a 53 |E..j...iJ .....S| -00000260 b3 85 4f de de c8 4d a5 ec bd 4e 11 e7 78 f8 4c |..O...M...N..x.L| -00000270 7a 46 28 a7 0b 3d ce 1f 4a be 2d c3 1b 7c 79 9c |zF(..=..J.-..|y.| -00000280 da ae f3 ee ae 58 1f 93 6e ca f4 03 b7 4d be ac |.....X..n....M..| -00000290 d8 32 d9 0a 4e 3b dd a8 c3 b6 24 c7 e5 78 bc 7d |.2..N;....$..x.}| -000002a0 be 12 d9 c4 f9 c1 16 23 79 ba 00 27 fd 0c 93 38 |.......#y..'...8| -000002b0 2c 36 0f e1 a3 9f 27 46 82 2b 60 b5 3f f9 9b cd |,6....'F.+`.?...| -000002c0 60 39 85 96 60 aa 1c 3d 0a 9e 53 46 90 0e 49 68 |`9..`..=..SF..Ih| -000002d0 67 96 db 82 02 c9 4e f4 d7 fe 06 bf d7 01 ae db |g.....N.........| -000002e0 c5 eb 70 c2 51 72 2d 41 ca 2c ae 48 2c 19 bb ae |..p.Qr-A.,.H,...| -000002f0 7f 2f d4 cf 16 03 03 00 bc 75 f7 cb 92 aa 8c ab |./.......u......| -00000300 d7 ea 79 a1 b6 31 a5 5b 5a 19 98 a2 e2 a7 5a a6 |..y..1.[Z.....Z.| -00000310 9c c8 d5 84 1e f0 cc 18 a3 ba 1b 21 2f 9a 0e 3d |...........!/..=| -00000320 54 10 17 ee a4 40 4d 0f b9 36 bf 4a 41 76 7b 0a |T....@M..6.JAv{.| -00000330 7f d8 50 1c 1f 99 5b bf 50 87 e4 24 67 fe 45 93 |..P...[.P..$g.E.| -00000340 a4 a2 41 ce e4 17 67 08 af 35 43 5c 12 ea c3 0e |..A...g..5C\....| -00000350 1f e6 80 89 76 4f 36 71 fe a2 51 ef 05 cb 10 55 |....vO6q..Q....U| -00000360 16 fd 6d 07 aa ba 6a 68 d8 e5 53 cb 9e 17 cd 25 |..m...jh..S....%| -00000370 98 83 62 a6 55 74 79 36 87 1c 5c ef 4a 65 85 a1 |..b.Uty6..\.Je..| -00000380 a4 1b 5d 7c 0d cf e3 63 37 14 b2 ac 74 12 d9 f3 |..]|...c7...t...| -00000390 25 52 d7 a9 d8 f2 c4 75 08 57 5b 48 c5 5e 07 78 |%R.....u.W[H.^.x| -000003a0 c6 74 f3 6e 5a fb 09 67 4d a0 6a d0 f8 b4 0a 00 |.t.nZ..gM.j.....| -000003b0 71 f2 ce e0 20 16 03 03 00 4a 1d 3b c4 a4 6e e3 |q... ....J.;..n.| -000003c0 a0 43 f3 44 b6 eb d7 bb 47 dc 18 b6 84 4a c1 4d |.C.D....G....J.M| -000003d0 05 ee 71 1a 40 75 d1 ac be c3 cb f0 4b f2 a3 c3 |..q.@u......K...| -000003e0 03 6a 1d 3e 77 09 61 f0 0a 35 47 af 67 23 a1 76 |.j.>w.a..5G.g#.v| -000003f0 9e 90 be 10 a0 6b 9d 49 9e 79 38 b8 6a c4 53 ba |.....k.I.y8.j.S.| -00000400 37 88 86 f2 16 03 03 00 14 c7 e1 2e 8a 83 d1 b0 |7...............| -00000410 3e a6 81 d3 6b 62 89 d1 a3 43 c4 7b 4e |>...kb...C.{N| +00000000 16 03 03 00 81 96 53 73 c8 b5 6a 00 4a 58 41 8f |......Ss..j.JXA.| +00000010 42 e6 47 47 2b bd 0e 1e 90 30 ae fa ab 88 0b 01 |B.GG+....0......| +00000020 70 79 c4 39 f1 ee cf 98 5d 7f 0d 81 23 28 40 40 |py.9....]...#(@@| +00000030 f8 7a 72 13 02 75 ec 68 d5 7a 11 8a 15 b6 bb 4c |.zr..u.h.z.....L| +00000040 9e f5 70 1c 17 b2 b5 bc 30 c5 43 d8 8f 12 d9 cb |..p.....0.C.....| +00000050 46 ba 02 36 dc bb b5 64 c4 9a 15 e7 ed 16 5c 74 |F..6...d......\t| +00000060 df 53 d4 c1 f1 01 ab 71 25 b8 8e 7b e0 ae f2 3d |.S.....q%..{...=| +00000070 f2 cf 21 64 c2 61 34 c3 56 d7 80 9a fd 85 6e ac |..!d.a4.V.....n.| +00000080 a6 10 97 87 1d 06 16 03 03 02 69 53 75 f7 64 d8 |..........iSu.d.| +00000090 34 23 ce 18 4c 68 b7 f6 0f 7d be a8 bb d0 c9 2f |4#..Lh...}...../| +000000a0 6a 4e b1 9d 88 ad 41 8b a7 42 14 02 9d 8f 9d ee |jN....A..B......| +000000b0 f4 b0 6b d2 ac db 67 33 38 b1 5a d8 df c9 e8 f2 |..k...g38.Z.....| +000000c0 e1 b2 08 bf fd 83 bb d9 9b 07 0c 05 c7 e5 e3 95 |................| +000000d0 17 04 66 ad 22 c4 32 5e 2e b8 28 4a 4e 18 bf ee |..f.".2^..(JN...| +000000e0 60 81 a1 f5 b0 2a e3 a5 fd c0 7f b7 6f 1d 1e 9e |`....*......o...| +000000f0 6b 55 ec b5 e8 2a 95 b3 f1 91 40 e8 e9 49 f1 0e |kU...*....@..I..| +00000100 14 9a 83 be fb eb 1f 64 34 79 3e 62 6d 3b 3a fc |.......d4y>bm;:.| +00000110 7e 7b 5a 9e c4 f7 a2 97 50 fe a4 40 d6 6d a0 00 |~{Z.....P..@.m..| +00000120 53 0b ae 67 54 fc 3f 4b f3 ba eb e5 76 5b 8b 9f |S..gT.?K....v[..| +00000130 06 87 53 8c 23 93 57 00 dd 29 b3 60 38 1c e2 26 |..S.#.W..).`8..&| +00000140 c7 ba 0b a4 ae db c2 3e 49 50 7e be 0b 47 75 bd |.......>IP~..Gu.| +00000150 bd 55 34 70 8e 99 a9 ed a9 50 e7 d3 6b c2 a2 63 |.U4p.....P..k..c| +00000160 29 73 6e 0e 22 26 92 72 71 8d b1 d6 d1 e4 98 b1 |)sn."&.rq.......| +00000170 a4 94 73 f4 39 1b bc 6d 58 fc 4f b3 e4 24 e7 75 |..s.9..mX.O..$.u| +00000180 48 92 f7 be 15 06 36 15 1a 30 a5 65 10 4d 45 fe |H.....6..0.e.ME.| +00000190 75 6d 2f a5 52 2c 71 f6 c2 e0 9e 6f 1c 7e ce f3 |um/.R,q....o.~..| +000001a0 81 23 7e 73 c3 56 e3 26 d3 d0 d4 a5 69 05 3a 94 |.#~s.V.&....i.:.| +000001b0 0c 4c 31 27 e3 4c ad 1a 77 db 85 4c ad ca f1 ce |.L1'.L..w..L....| +000001c0 5c 25 57 4b 3c 5f 58 e9 15 dc aa 3b 30 f4 72 44 |\%WK<_X....;0.rD| +000001d0 0c 2c e3 ed bc f9 0b ef 8e e6 57 ae 6c fa ca 89 |.,........W.l...| +000001e0 b6 91 ec 90 d6 40 65 ea c2 33 32 d9 93 76 82 0c |.....@e..32..v..| +000001f0 06 a7 e1 33 e7 7a 01 23 8f cb 6a 4b 2d 0b eb a5 |...3.z.#..jK-...| +00000200 f0 80 1a fb c4 ec 05 b8 ef c9 58 6f a4 12 87 b5 |..........Xo....| +00000210 18 cc c0 64 5f 41 7c e3 a7 98 50 1c 68 ca 8a 89 |...d_A|...P.h...| +00000220 c0 c8 1b 77 28 11 54 9e 5d 38 14 c5 ac 50 4c 9d |...w(.T.]8...PL.| +00000230 2c 72 6e 0e 98 9b 2d 29 3a 81 62 05 96 23 c8 9e |,rn...-):.b..#..| +00000240 bd 27 cf 16 60 e2 77 8c af 7a 08 05 cd 2c 06 8f |.'..`.w..z...,..| +00000250 52 6a b1 82 ad dc 60 56 0f bd 71 1d 2c a0 4b d3 |Rj....`V..q.,.K.| +00000260 03 1e c3 75 21 8b 8c d3 cb bb 0b 8f 9c 44 43 a4 |...u!........DC.| +00000270 2e d8 35 2c 3d ab 0b c9 3a 23 54 45 df 48 59 ab |..5,=...:#TE.HY.| +00000280 df 8a bc b6 e2 68 97 64 d7 f4 9f bd c4 a0 45 9c |.....h.d......E.| +00000290 7d 4f 00 ce 98 60 c2 3e 4f af cd 55 27 e8 57 ef |}O...`.>O..U'.W.| +000002a0 5e 81 58 90 60 e3 7c ca 0a 81 fa 47 38 dc d3 6f |^.X.`.|....G8..o| +000002b0 3e 6e c4 62 eb 91 aa 2b 42 f3 46 8f 57 a4 b3 5a |>n.b...+B.F.W..Z| +000002c0 ef 5b 80 82 12 05 40 6a 63 69 53 be 20 16 ab e7 |.[....@jciS. ...| +000002d0 72 f7 79 a6 d9 d1 46 33 2f a3 34 f8 c1 60 06 98 |r.y...F3/.4..`..| +000002e0 10 47 3c e2 95 31 b5 69 b8 9e f0 15 2b e0 7c 22 |.G<..1.i....+.|"| +000002f0 1b b8 e1 b6 16 03 03 00 bc 3b 1a 18 ff 2c a5 9f |.........;...,..| +00000300 0b 79 13 81 1f e8 df 9e 9c 95 57 50 9d 53 32 5f |.y........WP.S2_| +00000310 27 4b aa ca 8e 7c fb 7e 69 27 06 7c aa 7d 73 ba |'K...|.~i'.|.}s.| +00000320 05 d2 f6 d7 61 87 3f d5 12 b6 13 75 09 bf d2 44 |....a.?....u...D| +00000330 d3 e7 c4 86 f9 4c 9e e7 1c 5b 3c 14 5d 0d fd f4 |.....L...[<.]...| +00000340 03 9a 24 5c a2 fd 84 7c 2e 76 8a 15 ff 7a ad 74 |..$\...|.v...z.t| +00000350 27 a8 ec 87 65 fc a9 f0 58 36 bd 42 54 e8 fd 89 |'...e...X6.BT...| +00000360 62 fc 74 c2 c3 4e 54 2e 49 34 b8 08 09 da d8 75 |b.t..NT.I4.....u| +00000370 0f 49 eb 06 9d f3 f1 29 0d db 58 1c 3e 78 8c f6 |.I.....)..X.>x..| +00000380 3c 7a 3b b8 d0 14 57 21 96 9f 75 44 d3 5d 3c 24 |>> Flow 9 (client to server) -00000000 16 03 03 02 69 07 d0 f5 52 49 69 16 9e a0 95 ae |....i...RIi.....| -00000010 90 23 85 b7 03 e7 93 76 bc 81 8f 30 73 d3 0b 58 |.#.....v...0s..X| -00000020 cb 9a 18 00 66 cd 4c 43 a7 a7 8d e3 84 1a dc 86 |....f.LC........| -00000030 11 c2 2e 02 07 94 9f 64 2d 77 8a 60 60 07 22 be |.......d-w.``.".| -00000040 dc 36 14 b4 04 b8 94 46 f6 d4 db bc 68 82 14 7e |.6.....F....h..~| -00000050 d9 cf 60 4b a3 ff 03 d7 05 e0 a5 f4 94 1f ee 76 |..`K...........v| -00000060 4e 96 d0 70 1b cc 4e ad ef d4 4d df 71 82 a1 b5 |N..p..N...M.q...| -00000070 96 97 63 dc cc 13 75 29 bb b5 b7 46 fb b6 dd 17 |..c...u)...F....| -00000080 fd 8d be 54 14 35 a9 2b 66 c5 80 fb 41 e6 92 c1 |...T.5.+f...A...| -00000090 4b db 97 30 12 d1 4c c4 bc 4e 91 a4 17 c7 4e 22 |K..0..L..N....N"| -000000a0 bd 81 69 26 b4 8e d8 63 c8 33 0c 89 b5 12 6e af |..i&...c.3....n.| -000000b0 ea 09 10 66 5e c3 f2 9f c5 c2 0c 91 75 d5 c8 cc |...f^.......u...| -000000c0 4b dd 1f 42 22 29 fe f5 15 3f e6 96 b5 af 41 5d |K..B")...?....A]| -000000d0 06 59 33 40 da 8e c8 2f 00 9c 6b 7c fc fe 45 fe |.Y3@.../..k|..E.| -000000e0 fd 9c b4 87 18 f8 90 9c 8f 22 0d f4 d5 39 96 a0 |........."...9..| -000000f0 77 55 4e 52 f7 31 15 cb ea d6 dd 65 5c 91 f4 36 |wUNR.1.....e\..6| -00000100 a2 d3 c0 d5 c7 9c 07 38 6e 38 e2 00 c9 82 c9 d3 |.......8n8......| -00000110 e5 b0 77 11 4f 3b 82 7e 28 2c c0 69 7e 5d 76 ff |..w.O;.~(,.i~]v.| -00000120 c7 e0 f2 13 5e 5f 8d a0 51 f5 07 8c f2 4f 1c e9 |....^_..Q....O..| -00000130 eb 36 62 3e 9f db 15 11 b7 b0 c2 9f 92 84 37 81 |.6b>..........7.| -00000140 92 aa ea 5e 2a 70 74 3a 16 06 88 9a 98 1a de a9 |...^*pt:........| -00000150 08 91 01 b0 d8 f1 1f fa 54 bd 44 ef 25 49 4d 81 |........T.D.%IM.| -00000160 ec 3b 59 ec 3c b0 ba 08 d4 30 71 66 c1 46 c1 ba |.;Y.<....0qf.F..| -00000170 9d 56 8c b0 b9 b0 3d fa 35 51 7c 91 1f 3c b6 8f |.V....=.5Q|..<..| -00000180 05 fa d2 70 62 78 17 1e 27 68 3b e4 65 ca c4 dc |...pbx..'h;.e...| -00000190 b3 6b 91 27 7c 12 49 36 93 c6 62 5d d8 1f e2 de |.k.'|.I6..b]....| -000001a0 e7 2e 36 6b c5 9c 68 6d 91 29 d3 eb 8c 07 7c fa |..6k..hm.)....|.| -000001b0 42 3e 90 62 c0 0a eb 63 a5 2c b3 4b 3d 2e 5a 36 |B>.b...c.,.K=.Z6| -000001c0 78 71 c1 5a 94 a7 b9 5a b2 e2 8d dd b7 95 0d 94 |xq.Z...Z........| -000001d0 63 38 8f 60 94 c0 2a b9 d6 77 14 34 a2 ac 2c 7e |c8.`..*..w.4..,~| -000001e0 97 f4 76 87 c9 31 bf 73 97 37 9e ef a0 3e dc 49 |..v..1.s.7...>.I| -000001f0 db e1 4b 61 52 2a 1f 73 cd 76 49 28 f2 73 28 6f |..KaR*.s.vI(.s(o| -00000200 75 12 91 c6 5c 55 34 66 63 5f 79 22 9e 13 31 25 |u...\U4fc_y"..1%| -00000210 42 c0 68 59 38 37 85 dd ec 47 65 d1 9b 24 44 d2 |B.hY87...Ge..$D.| -00000220 37 d9 8f d8 f9 e4 37 7b a8 cd ad 25 65 f0 a1 27 |7.....7{...%e..'| -00000230 5e d8 8b 69 1f a7 0b 26 d1 d8 cd b2 e5 ba 31 20 |^..i...&......1 | -00000240 f0 9e 6a 39 6f 9d 04 cf 96 1f 4c 69 cc 4d 16 32 |..j9o.....Li.M.2| -00000250 59 d6 4e eb b7 c5 bc 33 c2 18 9d 58 82 73 64 c0 |Y.N....3...X.sd.| -00000260 a6 09 00 2b 04 1b 05 68 77 dd bb 73 b4 b3 16 03 |...+...hw..s....| -00000270 03 00 35 3a 50 32 09 27 fd 20 17 11 7b 7b e1 42 |..5:P2.'. ..{{.B| -00000280 9c af b2 bb 38 5a 89 c7 e5 eb c4 8e 1e 04 94 1f |....8Z..........| -00000290 40 17 4e b4 94 5b c7 fd d9 14 6e 0d f8 4c f6 cc |@.N..[....n..L..| -000002a0 76 a3 08 02 7e a7 a2 4c 16 03 03 00 98 08 77 4a |v...~..L......wJ| -000002b0 7a f0 ba 64 6e 14 8e fd d9 2f 67 57 1f 4b 05 7b |z..dn..../gW.K.{| -000002c0 99 ed 0d e9 03 de 88 60 44 0c 04 d2 5a 24 4a 9d |.......`D...Z$J.| -000002d0 9b bf fd d6 2f 60 03 63 e4 82 58 bb 69 92 41 c5 |..../`.c..X.i.A.| -000002e0 30 18 cf 9b cc c5 66 b2 b6 ef 15 5f b3 60 93 c6 |0.....f...._.`..| -000002f0 27 59 27 bc d5 dd 3b 5a 9d f7 ad 05 11 b7 9e bc |'Y'...;Z........| -00000300 ff 43 f8 0c 83 0f 6c fa d1 23 09 03 42 60 61 d4 |.C....l..#..B`a.| -00000310 ff 3b c9 ee 15 4a 02 fa d9 60 97 91 50 03 7d 6b |.;...J...`..P.}k| -00000320 c1 a2 64 00 5b b1 12 62 bd e5 c9 8a 2e 0c c1 71 |..d.[..b.......q| -00000330 a8 e2 94 45 be 8b ba a7 c0 6e e7 5e a5 bc 7a f8 |...E.....n.^..z.| -00000340 48 06 e2 27 3f 14 03 03 00 11 ef 57 1d e6 74 e2 |H..'?......W..t.| -00000350 9f 49 cd dc 7a 7d 0b 21 f7 1b e8 16 03 03 00 20 |.I..z}.!....... | -00000360 39 a4 df 59 44 4c b2 99 aa 0c c6 90 b3 a1 0d 00 |9..YDL..........| -00000370 38 ee 40 d2 b0 62 b4 cf e3 20 e7 d7 5f f8 cf aa |8.@..b... .._...| +00000000 16 03 03 02 69 3a 4c e1 16 19 be 83 57 cf 43 19 |....i:L.....W.C.| +00000010 c9 1c 20 a3 43 21 4f b7 3f a3 82 1b 20 98 88 e3 |.. .C!O.?... ...| +00000020 ef 6d d8 3d 7e 1e 80 e7 f3 39 0a 87 e8 cd 90 16 |.m.=~....9......| +00000030 45 04 c5 0f 4d bf 63 5b 16 50 74 66 8b 3c 27 49 |E...M.c[.Ptf.<'I| +00000040 54 7f f1 7f f7 b7 fe 1a c4 14 46 5f f7 d5 ab 36 |T.........F_...6| +00000050 8c 39 09 b9 9e b4 99 3f 4b 90 cc 64 cf 4e c9 a9 |.9.....?K..d.N..| +00000060 82 7f 7a bc fa 50 3b bf be c3 11 95 cc 88 06 ab |..z..P;.........| +00000070 1c 1f 95 8a a0 2a a0 6b 61 ee ee 32 06 5e 4b d2 |.....*.ka..2.^K.| +00000080 d1 ef 70 ef 54 5f 26 0e e3 a4 63 6b 0c 46 f3 91 |..p.T_&...ck.F..| +00000090 a5 ce a2 69 2a d1 0e 73 04 d2 4a 3e 58 bb ad e8 |...i*..s..J>X...| +000000a0 38 fc 6c 6f ad 6a 1a 4c 7f 1e f7 04 70 94 4d 62 |8.lo.j.L....p.Mb| +000000b0 ed 3d ea 1e 36 d0 83 24 43 a1 1a 89 bd f6 18 6a |.=..6..$C......j| +000000c0 8f 31 40 1a ec 8e 18 1e db 60 fc 76 e3 5b 20 8b |.1@......`.v.[ .| +000000d0 ef 61 bb 49 e2 5b 60 fe 9f 9e 22 d1 3d 1f ac 2d |.a.I.[`...".=..-| +000000e0 11 91 ed 38 6f f1 25 ef 6d 3a 49 52 7f 2f f1 b1 |...8o.%.m:IR./..| +000000f0 f6 68 df aa 9c 3e 60 a7 cc 19 35 65 04 5d 7f 37 |.h...>`...5e.].7| +00000100 86 10 14 01 17 38 1e 91 ab 3c 20 3a 13 2d ea cc |.....8...< :.-..| +00000110 be 79 54 76 32 e7 b2 0d e9 f7 50 66 94 02 7d c6 |.yTv2.....Pf..}.| +00000120 4b 02 34 92 12 93 18 56 6b a4 61 4f 5b 6f 8f 7c |K.4....Vk.aO[o.|| +00000130 fc 80 5b cb 3e ac df b1 2d c3 85 9e 55 9b 15 22 |..[.>...-...U.."| +00000140 46 54 e4 5c 23 35 20 05 e1 b8 89 44 57 4f dd ef |FT.\#5 ....DWO..| +00000150 d8 33 36 c9 d8 d6 e0 71 61 a7 e9 ff 2a cf 7c a2 |.36....qa...*.|.| +00000160 f8 e0 78 57 d2 21 d8 07 8c 51 4b 16 83 f9 49 5a |..xW.!...QK...IZ| +00000170 86 ae 68 d2 b3 d3 06 42 c8 56 a5 77 56 4f 3a e8 |..h....B.V.wVO:.| +00000180 3f ab de 12 82 1f 87 11 ef c3 fa b9 20 0b e1 e0 |?........... ...| +00000190 1d bd 96 3e e9 f5 a4 96 79 e5 1e 3e 7e 6e cb b3 |...>....y..>~n..| +000001a0 08 f8 ea 85 ca a2 bb a2 ef ca 8f c2 31 9a a8 56 |............1..V| +000001b0 b1 d3 a6 dd 63 0c 1d ad ae 69 da b2 11 77 fe 81 |....c....i...w..| +000001c0 c1 37 34 ed 9a 3c fe 09 3a 3b 6d cd d3 45 63 cb |.74..<..:;m..Ec.| +000001d0 99 cc d9 88 95 0a fe 58 47 9a 14 a2 16 c0 e1 96 |.......XG.......| +000001e0 5e 4f 8f fa a4 d5 2c c6 43 aa 94 1f 1b 90 5d 03 |^O....,.C.....].| +000001f0 18 f3 2a f3 a3 14 44 0b df 51 8b 66 8f dd 7f 65 |..*...D..Q.f...e| +00000200 c6 ee 9a 60 8b b9 af ab 26 9e 5f 6a c8 dc 66 d1 |...`....&._j..f.| +00000210 d1 58 26 9c 58 86 2d fb 98 cd 70 c5 db 37 db b2 |.X&.X.-...p..7..| +00000220 22 bb 00 fe f4 87 68 58 22 f3 15 24 ed 89 fe db |".....hX"..$....| +00000230 dd 52 e5 3f 4f 90 ab fd 4b e4 e4 70 35 d3 28 72 |.R.?O...K..p5.(r| +00000240 05 08 af fb 7c ba 63 3f c1 a0 32 48 00 6a 6f 6c |....|.c?..2H.jol| +00000250 77 a1 c9 0e 23 e2 7d 6a 9b 9a 04 4e fb 6e db 53 |w...#.}j...N.n.S| +00000260 ba 5a c1 79 ee 13 2c 8b dd 79 5d 5b 0e b1 16 03 |.Z.y..,..y][....| +00000270 03 00 35 a4 5c 1d bc be f0 32 77 49 96 7e 92 b7 |..5.\....2wI.~..| +00000280 74 d9 96 8c 86 c8 06 e6 08 6e 20 47 14 2d 9e 98 |t........n G.-..| +00000290 ab 28 fa 26 a6 48 d4 1a 06 41 34 74 15 bd 54 bb |.(.&.H...A4t..T.| +000002a0 7d fc 30 10 a9 12 3a 6d 16 03 03 00 98 9d 61 7e |}.0...:m......a~| +000002b0 6a 9e 2a 7f 9c ff 25 6b 0d 01 1b 34 ad 00 d1 b5 |j.*...%k...4....| +000002c0 0b 5f 0c d3 43 ca aa 61 e9 44 a7 e5 18 0d 85 87 |._..C..a.D......| +000002d0 5f 96 7a 80 ac 56 20 19 1d 62 39 84 9e e1 a4 62 |_.z..V ..b9....b| +000002e0 a1 bf c3 b3 9d da 1b a5 39 cb 58 2f 28 fb 57 5b |........9.X/(.W[| +000002f0 94 d0 49 67 f3 c0 c1 83 5b 92 04 f9 1a 6a 3b 7e |..Ig....[....j;~| +00000300 c8 51 d5 fb ab c3 45 44 f1 6a 07 b5 09 94 f3 4c |.Q....ED.j.....L| +00000310 55 27 12 3d fc 07 b3 e0 dd f5 df e9 00 f1 cb 42 |U'.=...........B| +00000320 e0 f7 55 51 43 f6 7e 1b 62 83 e5 71 75 8e e2 1a |..UQC.~.b..qu...| +00000330 e0 b6 00 48 44 cf 33 fd 72 7e 91 dc d4 b9 9d cc |...HD.3.r~......| +00000340 29 9e e2 97 a8 14 03 03 00 11 53 e5 86 22 41 e7 |).........S.."A.| +00000350 f0 ad 61 5c 0b d9 b5 b2 15 0f 0a 16 03 03 00 20 |..a\........... | +00000360 d3 d8 b8 47 4a 73 3c b3 41 e3 0b a7 51 67 ca ba |...GJs<.A...Qg..| +00000370 57 9b 38 07 2a 76 06 2c b3 24 6a 82 cf bf da 37 |W.8.*v.,.$j....7| >>> Flow 10 (server to client) -00000000 14 03 03 00 11 be d5 20 ab dc c2 df f6 29 bc b7 |....... .....)..| -00000010 a3 7e 70 b9 48 73 16 03 03 00 20 b2 f3 25 a9 70 |.~p.Hs.... ..%.p| -00000020 7f 99 0d f4 01 0a 58 ad b8 6d 02 e8 6f 89 7b 77 |......X..m..o.{w| -00000030 bf 22 89 b3 23 a8 02 28 00 94 f1 17 03 03 00 19 |."..#..(........| -00000040 e3 22 a6 cd a4 dd 9d 2b 6f 6c 84 08 a5 dd 97 0d |.".....+ol......| -00000050 9a 37 a7 ac e4 6b 03 1f db 16 03 03 00 14 ec d7 |.7...k..........| -00000060 d4 fd ec 94 6c 0a 46 8f ec ee 87 61 5c 0a 82 a2 |....l.F....a\...| -00000070 03 91 |..| +00000000 14 03 03 00 11 9a a1 96 36 69 58 ba 18 5d ee 45 |........6iX..].E| +00000010 66 02 f4 3b f8 ba 16 03 03 00 20 cf 43 d1 45 30 |f..;...... .C.E0| +00000020 cf b9 99 27 36 a9 a1 0b 2d ab ab 14 c1 ec 97 f9 |...'6...-.......| +00000030 e5 01 c9 81 eb f9 78 5b 82 44 05 17 03 03 00 19 |......x[.D......| +00000040 5f c9 75 6f 23 fe 04 a6 e8 34 5f eb fb fd fd 3c |_.uo#....4_....<| +00000050 f6 c6 8e 64 3a 8d 35 92 d8 16 03 03 00 14 90 95 |...d:.5.........| +00000060 39 68 e7 49 6e f6 58 7c bd 14 76 f1 a5 fe 83 21 |9h.In.X|..v....!| +00000070 b3 67 |.g| >>> Flow 11 (client to server) -00000000 15 03 03 00 12 4b bc 67 b6 13 0f 0c df e1 42 46 |.....K.g......BF| -00000010 05 97 85 e5 97 bc 81 15 03 03 00 12 d7 e8 b7 5c |...............\| -00000020 a4 d8 8e fb b3 a7 1f 06 2f bb 77 f1 13 35 |......../.w..5| +00000000 15 03 03 00 12 18 02 52 db f2 60 de 38 62 3a 06 |.......R..`.8b:.| +00000010 7b 6d 84 74 cf ae d5 15 03 03 00 12 fd 06 4d b1 |{m.t..........M.| +00000020 f8 71 8c b8 13 cc 9e 40 be 76 96 60 54 b7 |.q.....@.v.`T.| diff --git a/src/crypto/tls/testdata/Client-TLSv12-RenegotiationRejected b/src/crypto/tls/testdata/Client-TLSv12-RenegotiationRejected index 57febfbc85..3502977efa 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-RenegotiationRejected +++ b/src/crypto/tls/testdata/Client-TLSv12-RenegotiationRejected @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 e0 77 db d2 ca |....Y...U...w...| -00000010 46 29 bc ce 1a ee 39 d0 58 35 74 c0 1f 17 86 c0 |F)....9.X5t.....| -00000020 a8 58 ad b6 e3 f5 e0 80 ae 71 43 20 cd a1 49 bb |.X.......qC ..I.| -00000030 94 bc fc 26 a5 56 ea dc 9d 9a b4 ee c7 70 fa 72 |...&.V.......p.r| -00000040 04 c1 d8 e2 a9 63 24 9a 07 18 a5 fa cc a8 00 00 |.....c$.........| +00000000 16 03 03 00 59 02 00 00 55 03 03 9c d0 eb d6 42 |....Y...U......B| +00000010 2e ff 6e 5a 19 33 6d 12 97 56 56 2b f5 1b 86 c8 |..nZ.3m..VV+....| +00000020 38 83 59 37 ac 17 46 ed 73 53 43 20 e4 94 9b 71 |8.Y7..F.sSC ...q| +00000030 f4 94 d9 d9 3a a1 e1 99 1e b4 a5 55 46 88 e0 0a |....:......UF...| +00000040 af 0a 0e ff 81 10 e2 e0 63 21 ae 2a cc a8 00 00 |........c!.*....| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 59 0b 00 02 55 00 02 52 00 02 4f 30 82 02 |..Y...U..R..O0..| 00000070 4b 30 82 01 b4 a0 03 02 01 02 02 09 00 e8 f0 9d |K0..............| @@ -60,36 +60,36 @@ 00000290 77 8d 0c 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d |w.......@.a.Lr+.| 000002a0 ae db 46 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db |..F..M...>...B..| 000002b0 fe 3d 13 60 84 5c 21 d3 3b e9 fa e7 16 03 03 00 |.=.`.\!.;.......| -000002c0 ac 0c 00 00 a8 03 00 1d 20 96 83 76 7c af 6c af |........ ..v|.l.| -000002d0 be 20 ec 79 87 9e e0 23 fa 34 78 96 91 30 3b 78 |. .y...#.4x..0;x| -000002e0 1b 3f 0f 73 b4 45 05 2f 22 08 04 00 80 38 fe 9b |.?.s.E./"....8..| -000002f0 e1 c2 82 13 ce 00 c2 0e 08 98 22 d0 4d 86 38 97 |..........".M.8.| -00000300 c1 78 b9 11 a4 9d af e0 75 d1 c9 dc a1 dc 25 03 |.x......u.....%.| -00000310 cd ba 15 2e be 0a 61 39 4f 4f d3 48 95 61 3f 2c |......a9OO.H.a?,| -00000320 fb e1 63 e7 8f 51 b4 1f c8 98 f7 3e 23 11 8c 4a |..c..Q.....>#..J| -00000330 b4 76 15 cc 83 bd dc 6f af 0c d9 f1 80 0d 9b a2 |.v.....o........| -00000340 a3 ac 2f 26 c8 d3 23 94 bc c9 3d fb 44 4e 47 3e |../&..#...=.DNG>| -00000350 3b de ce 24 b8 ab 52 f3 5f 26 96 7f e6 a4 ec 9e |;..$..R._&......| -00000360 fc 44 4a 1b 73 d1 ea 2a a9 b9 c8 ba f6 16 03 03 |.DJ.s..*........| +000002c0 ac 0c 00 00 a8 03 00 1d 20 9b 89 08 0d ea c2 d3 |........ .......| +000002d0 4f 73 77 a0 e3 0e 1a 68 13 2c 5c a5 ec 39 75 1b |Osw....h.,\..9u.| +000002e0 c2 95 fe b8 fe 58 f4 bb 16 08 04 00 80 d4 e8 d3 |.....X..........| +000002f0 d4 5b 1f ee ff 60 f5 86 b1 f4 06 c0 a8 ab 90 b0 |.[...`..........| +00000300 26 15 d5 4e 3f d6 a5 e2 a3 3a e0 0f 9a 92 bd 96 |&..N?....:......| +00000310 9d 98 15 f3 95 82 a9 5d 9f 1d 9b 4f 2e 77 58 40 |.......]...O.wX@| +00000320 58 3d fd 8f a6 09 1c fa 61 77 2e 87 df e7 76 8b |X=......aw....v.| +00000330 bf f1 dd 29 f8 70 c0 6d db e5 a0 55 92 77 44 75 |...).p.m...U.wDu| +00000340 d9 95 a6 17 67 93 47 8e 1f 61 50 65 31 94 d3 79 |....g.G..aPe1..y| +00000350 5f 25 a6 f0 3e 19 9a c8 ad b9 1a af 5b 50 2c 97 |_%..>.......[P,.| +00000360 78 1e 71 3a e0 fa 7c 44 1e d1 32 56 4e 16 03 03 |x.q:..|D..2VN...| 00000370 00 04 0e 00 00 00 |......| >>> Flow 3 (client to server) 00000000 16 03 03 00 25 10 00 00 21 20 2f e5 7d a3 47 cd |....%...! /.}.G.| 00000010 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 |bC.(.._.).0.....| 00000020 cf c2 ed 90 99 5f 58 cb 3b 74 14 03 03 00 01 01 |....._X.;t......| -00000030 16 03 03 00 20 f3 a4 06 da e0 55 ed 41 d1 71 2a |.... .....U.A.q*| -00000040 d5 aa 00 31 eb 23 23 52 20 43 36 8f 10 70 d3 e0 |...1.##R C6..p..| -00000050 6d cc 77 f9 68 |m.w.h| +00000030 16 03 03 00 20 88 fe 97 82 bd a7 99 c6 a6 2f c1 |.... ........./.| +00000040 1a a8 54 8c e5 c6 39 0a 6b 07 9b 1a 05 f4 fb e3 |..T...9.k.......| +00000050 67 f5 c8 6e 17 |g..n.| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 20 f5 84 89 dc 37 |.......... ....7| -00000010 bf d9 75 10 c2 30 50 9e 2c 71 00 30 46 f3 af 00 |..u..0P.,q.0F...| -00000020 9c 6c fd 78 2d d1 54 88 98 c4 8a |.l.x-.T....| +00000000 14 03 03 00 01 01 16 03 03 00 20 3b 6d ac 1c 8b |.......... ;m...| +00000010 1b 46 3a 4e 03 75 51 9e 99 6e 5a a8 4f 07 91 a3 |.F:N.uQ..nZ.O...| +00000020 18 2c bf 88 92 17 e5 13 65 a3 6c |.,......e.l| >>> Flow 5 (client to server) -00000000 17 03 03 00 16 e7 10 a8 74 64 64 01 ea af 4a f2 |........tdd...J.| -00000010 6a 09 c7 60 49 ba 59 71 bc f6 90 |j..`I.Yq...| +00000000 17 03 03 00 16 c7 94 fc be 3d 73 fd ec ce b2 f6 |.........=s.....| +00000010 bf 17 bf 52 3e b4 98 39 43 c0 0a |...R>..9C..| >>> Flow 6 (server to client) -00000000 16 03 03 00 14 4c ff 21 fb 5d ef 36 28 6f f8 7b |.....L.!.].6(o.{| -00000010 c0 08 b6 1b e3 17 c3 6e 49 |.......nI| +00000000 16 03 03 00 14 cf 01 f5 e6 eb 60 e3 49 c4 fb 84 |..........`.I...| +00000010 e1 11 69 e1 91 c0 02 d2 e3 |..i......| >>> Flow 7 (client to server) -00000000 15 03 03 00 12 ab 44 a2 47 b2 14 a3 5f 40 1b 56 |......D.G..._@.V| -00000010 d0 f0 3f ea 95 cf aa 15 03 03 00 12 28 1b e3 5f |..?.........(.._| -00000020 8c c4 87 b4 d6 28 2f c9 93 30 66 7a 35 ce |.....(/..0fz5.| +00000000 15 03 03 00 12 4d 7f de 01 23 f7 3f 0d e6 1a f1 |.....M...#.?....| +00000010 19 a2 cd 58 1a 25 f5 15 03 03 00 12 95 78 52 00 |...X.%.......xR.| +00000020 65 aa 6d 77 5a 66 d5 95 c4 5a 9b 1b 05 b2 |e.mwZf...Z....| diff --git a/src/crypto/tls/testdata/Client-TLSv12-SCT b/src/crypto/tls/testdata/Client-TLSv12-SCT index f817ea594f..d12e263e15 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-SCT +++ b/src/crypto/tls/testdata/Client-TLSv12-SCT @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 01 c6 02 00 01 c2 03 03 cb c8 2f af ab |............./..| -00000010 d1 5b 34 64 8e 3f b3 6e b7 bf 0b e8 15 0f c3 97 |.[4d.?.n........| -00000020 a1 99 64 45 ac 8f 2a 60 9c 03 a3 20 41 c5 a1 11 |..dE..*`... A...| -00000030 79 cd 6b 70 27 1f 0f e8 59 ac d3 d7 ae ae 1e d4 |y.kp'...Y.......| -00000040 e2 74 81 43 26 b1 37 d1 14 87 a6 20 cc a8 00 01 |.t.C&.7.... ....| +00000000 16 03 03 01 c6 02 00 01 c2 03 03 d8 a9 75 cc 9a |.............u..| +00000010 81 df 5a a0 3b ba 51 74 52 50 72 08 35 02 35 77 |..Z.;.QtRPr.5.5w| +00000020 28 ff 44 e6 d9 c6 8b f8 54 67 b4 20 62 80 60 cc |(.D.....Tg. b.`.| +00000030 09 90 52 66 75 72 a2 c5 dc 8d 18 ce 9a d5 7e cd |..Rfur........~.| +00000040 a5 36 2a 2e 65 72 6f f0 dd b0 8c 14 cc a8 00 01 |.6*.ero.........| 00000050 7a 00 12 01 69 01 67 00 75 00 a4 b9 09 90 b4 18 |z...i.g.u.......| 00000060 58 14 87 bb 13 a2 cc 67 70 0a 3c 35 98 04 f9 1b |X......gp.<5....| 00000070 df b8 e3 77 cd 0e c8 0d dc 10 00 00 01 47 97 99 |...w.........G..| @@ -83,31 +83,31 @@ 00000400 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d ae db 46 |.....@.a.Lr+...F| 00000410 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db fe 3d 13 |..M...>...B...=.| 00000420 60 84 5c 21 d3 3b e9 fa e7 16 03 03 00 ac 0c 00 |`.\!.;..........| -00000430 00 a8 03 00 1d 20 c5 a7 0f f6 d3 e0 dd fe c0 6f |..... .........o| -00000440 b9 d5 82 34 0f 6d e9 5c e2 38 3e 23 83 17 07 f8 |...4.m.\.8>#....| -00000450 00 1c 5e e6 6b 40 08 04 00 80 93 f8 75 72 dc 74 |..^.k@......ur.t| -00000460 68 62 98 55 f6 64 81 d1 03 9f f8 8c 17 77 d3 a6 |hb.U.d.......w..| -00000470 f9 3e 41 b8 f7 73 e6 c7 83 21 3b e8 72 cf 5f 08 |.>A..s...!;.r._.| -00000480 84 51 cf e5 f6 b0 f2 83 d9 cf b9 fc d7 3c 0d 39 |.Q...........<.9| -00000490 a2 14 ae 78 07 24 25 95 13 90 71 f9 ac 0f 64 c7 |...x.$%...q...d.| -000004a0 e9 15 35 37 83 02 10 38 be c1 d1 00 3d 4b f2 36 |..57...8....=K.6| -000004b0 f6 7f ac 3e b2 ef 51 eb df d6 8b 92 a6 8e 71 17 |...>..Q.......q.| -000004c0 63 bd 6a 92 15 b7 b1 2d 0a 4c 58 68 65 23 ff ad |c.j....-.LXhe#..| -000004d0 59 03 85 9c a2 cf 02 3b 70 d4 16 03 03 00 04 0e |Y......;p.......| +00000430 00 a8 03 00 1d 20 cd 2a 10 ee 97 4a 83 7b 0e 6d |..... .*...J.{.m| +00000440 e7 00 5a ce bc d8 1c 57 fa f6 ec 52 0d 0f be 6d |..Z....W...R...m| +00000450 c8 5d 27 3c 8c 1b 08 04 00 80 a9 4c bb 3a 0a d7 |.]'<.......L.:..| +00000460 db 72 3d 88 49 a6 0b f7 dc d5 e1 d0 07 e8 6c fa |.r=.I.........l.| +00000470 b0 5e 0b 13 27 29 6f 1f 1e b9 05 60 16 cc ea 7b |.^..')o....`...{| +00000480 46 d7 12 58 03 43 b0 fe 8e 7b 83 3b ee 11 78 8c |F..X.C...{.;..x.| +00000490 60 0f 9c 76 63 60 01 78 a0 9b 19 b9 32 99 a9 9d |`..vc`.x....2...| +000004a0 42 b8 1f f1 8b 87 07 32 fa 5e 74 d5 3e 5e ba 21 |B......2.^t.>^.!| +000004b0 ff 63 b7 c6 68 bc b3 f9 52 1a ea 23 c7 f2 ec ff |.c..h...R..#....| +000004c0 d4 10 0d f8 76 2f bc 0d e5 12 7f ee d3 8d 9e 6b |....v/.........k| +000004d0 5e 22 78 d6 fa 5e 6a 53 16 44 16 03 03 00 04 0e |^"x..^jS.D......| 000004e0 00 00 00 |...| >>> Flow 3 (client to server) 00000000 16 03 03 00 25 10 00 00 21 20 2f e5 7d a3 47 cd |....%...! /.}.G.| 00000010 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 |bC.(.._.).0.....| 00000020 cf c2 ed 90 99 5f 58 cb 3b 74 14 03 03 00 01 01 |....._X.;t......| -00000030 16 03 03 00 20 62 1f 1a 94 94 88 9c 0c 3c ab d1 |.... b.......<..| -00000040 32 32 9f 8d be 28 a8 86 43 e6 53 d3 c4 bf 13 84 |22...(..C.S.....| -00000050 50 7f 30 84 e1 |P.0..| +00000030 16 03 03 00 20 5c 1a 1b 0e 7e 83 4f 9b f6 8e 9f |.... \...~.O....| +00000040 ca 95 86 c3 7b 60 73 d3 8d 3c 6d 18 6a eb 70 a3 |....{`s..>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 20 bf 16 ab 1a 98 |.......... .....| -00000010 d0 c1 95 b7 fe c2 45 fd 01 79 6b 8a 13 80 e4 96 |......E..yk.....| -00000020 64 15 1b 6e 31 12 19 1d 6f ba b0 |d..n1...o..| +00000000 14 03 03 00 01 01 16 03 03 00 20 1f a2 50 dd c5 |.......... ..P..| +00000010 ba 96 4a 63 e1 cc b6 45 77 09 c1 49 cb 5f eb 4b |..Jc...Ew..I._.K| +00000020 38 9b b1 40 1c af b1 a2 dc 7c ba |8..@.....|.| >>> Flow 5 (client to server) -00000000 17 03 03 00 16 a4 27 40 7a 6a 54 03 b6 ec 5f 4a |......'@zjT..._J| -00000010 56 a5 6e cb cc 4c 49 2e 08 29 37 15 03 03 00 12 |V.n..LI..)7.....| -00000020 88 20 fe 73 46 06 a7 f0 31 1a d9 89 7a fe a8 28 |. .sF...1...z..(| -00000030 d6 e8 |..| +00000000 17 03 03 00 16 e7 54 f6 bf 56 39 57 c4 b2 ac f2 |......T..V9W....| +00000010 b1 f4 b1 2f ad ae d7 87 21 ff 1c 15 03 03 00 12 |.../....!.......| +00000020 5d b6 56 77 55 99 b6 7b a4 0b d8 8e 8d 93 b6 35 |].VwU..{.......5| +00000030 ce 9a |..| diff --git a/src/crypto/tls/testdata/Client-TLSv12-X25519-ECDHE b/src/crypto/tls/testdata/Client-TLSv12-X25519-ECDHE index 178106f0df..d58a32f2b3 100644 --- a/src/crypto/tls/testdata/Client-TLSv12-X25519-ECDHE +++ b/src/crypto/tls/testdata/Client-TLSv12-X25519-ECDHE @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f2 01 00 00 ee 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 f4 01 00 00 f0 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,20 +7,20 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 73 00 05 00 05 01 00 00 00 00 00 0a 00 |...s............| -00000090 04 00 02 00 1d 00 0b 00 02 01 00 00 0d 00 18 00 |................| -000000a0 16 08 04 08 05 08 06 04 01 04 03 05 01 05 03 06 |................| -000000b0 01 06 03 02 01 02 03 ff 01 00 01 00 00 12 00 00 |................| -000000c0 00 2b 00 09 08 03 04 03 03 03 02 03 01 00 33 00 |.+............3.| -000000d0 26 00 24 00 1d 00 20 2f e5 7d a3 47 cd 62 43 15 |&.$... /.}.G.bC.| -000000e0 28 da ac 5f bb 29 07 30 ff f6 84 af c4 cf c2 ed |(.._.).0........| -000000f0 90 99 5f 58 cb 3b 74 |.._X.;t| +00000080 01 00 00 75 00 05 00 05 01 00 00 00 00 00 0a 00 |...u............| +00000090 04 00 02 00 1d 00 0b 00 02 01 00 00 0d 00 1a 00 |................| +000000a0 18 08 04 04 03 08 07 08 05 08 06 04 01 05 01 06 |................| +000000b0 01 05 03 06 03 02 01 02 03 ff 01 00 01 00 00 12 |................| +000000c0 00 00 00 2b 00 09 08 03 04 03 03 03 02 03 01 00 |...+............| +000000d0 33 00 26 00 24 00 1d 00 20 2f e5 7d a3 47 cd 62 |3.&.$... /.}.G.b| +000000e0 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 cf |C.(.._.).0......| +000000f0 c2 ed 90 99 5f 58 cb 3b 74 |...._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 59 02 00 00 55 03 03 14 f0 64 fb 80 |....Y...U....d..| -00000010 40 49 f6 48 a5 65 9d e1 2e 37 c3 f7 b9 27 fe 6b |@I.H.e...7...'.k| -00000020 de 49 93 da 97 0d 59 c5 a8 5d 42 20 f9 10 79 a2 |.I....Y..]B ..y.| -00000030 e6 33 e8 eb 6c 7d 3b 1d e2 e9 3e df 5f 5a 40 d5 |.3..l};...>._Z@.| -00000040 a2 0d c7 35 f2 db a1 e0 1f 90 bb 6b c0 2f 00 00 |...5.......k./..| +00000000 16 03 03 00 59 02 00 00 55 03 03 e0 c7 ce be 3a |....Y...U......:| +00000010 a6 34 5f b7 c5 ec f1 f3 09 df 4d db 39 60 71 93 |.4_.......M.9`q.| +00000020 db 7c 30 e0 81 93 f0 19 57 6b 6b 20 9e 4b e2 1e |.|0.....Wkk .K..| +00000030 27 8d d3 f6 0c f3 3d bc 67 3e 79 33 fd c9 cc 55 |'.....=.g>y3...U| +00000040 36 55 a5 aa 89 94 fe b2 51 cf 24 56 c0 2f 00 00 |6U......Q.$V./..| 00000050 0d ff 01 00 01 00 00 0b 00 04 03 00 01 02 16 03 |................| 00000060 03 02 59 0b 00 02 55 00 02 52 00 02 4f 30 82 02 |..Y...U..R..O0..| 00000070 4b 30 82 01 b4 a0 03 02 01 02 02 09 00 e8 f0 9d |K0..............| @@ -60,33 +60,33 @@ 00000290 77 8d 0c 1c f1 0f a1 d8 40 83 61 c9 4c 72 2b 9d |w.......@.a.Lr+.| 000002a0 ae db 46 06 06 4d f4 c1 b3 3e c0 d1 bd 42 d4 db |..F..M...>...B..| 000002b0 fe 3d 13 60 84 5c 21 d3 3b e9 fa e7 16 03 03 00 |.=.`.\!.;.......| -000002c0 ac 0c 00 00 a8 03 00 1d 20 45 79 ac ef 3b d5 3e |........ Ey..;.>| -000002d0 81 e1 7d 8a 9e 94 b3 d8 15 49 3c 2a 71 0a 31 74 |..}......I<*q.1t| -000002e0 2b 7a cc f7 5d 2d 72 d5 60 08 04 00 80 d1 63 69 |+z..]-r.`.....ci| -000002f0 e9 5f 99 c1 43 18 29 04 39 f2 ec 2b d8 dc e6 59 |._..C.).9..+...Y| -00000300 80 ff 27 f9 96 39 de 2c 26 9c f0 15 39 fa 42 ba |..'..9.,&...9.B.| -00000310 80 d8 1b f6 64 07 e4 2e b3 1e ce 20 51 59 82 97 |....d...... QY..| -00000320 a1 2f d5 3f 18 05 12 12 1e aa cf 29 93 34 89 18 |./.?.......).4..| -00000330 0b 19 e0 30 21 5f ce c2 75 58 a1 aa 98 44 cb c0 |...0!_..uX...D..| -00000340 08 db 6e c5 95 9c a7 f5 a2 30 c7 9d 9d 31 1d a1 |..n......0...1..| -00000350 b8 3f 05 b8 13 b6 89 a8 3c 78 fe ae e5 6f 2a 91 |.?............T.......K| +000002e0 9c ab d7 ce 2c e5 26 20 04 08 04 00 80 d8 c0 18 |....,.& ........| +000002f0 90 8e 06 d8 d6 4c af a1 ae 5e ca 4b a1 18 bb 31 |.....L...^.K...1| +00000300 f5 3a 75 c3 d7 73 69 a7 e0 0f 8e f2 c5 92 0a bd |.:u..si.........| +00000310 7f 91 36 6c 01 c3 eb 08 9a 3b 25 2c bd 86 88 05 |..6l.....;%,....| +00000320 64 e0 38 5b 75 01 10 1f 1b d5 34 09 04 2e 34 6d |d.8[u.....4...4m| +00000330 71 d2 6c b6 f3 7a 1e ed a9 9d 28 60 13 fc 02 6f |q.l..z....(`...o| +00000340 f6 17 99 52 7b 19 60 e5 a6 11 d4 b3 4c 52 03 b5 |...R{.`.....LR..| +00000350 3e 28 91 c6 66 87 25 df 10 c6 cf b9 5f 92 0e d7 |>(..f.%....._...| +00000360 b6 19 f0 19 b9 f6 e9 e9 24 74 35 3b c6 16 03 03 |........$t5;....| 00000370 00 04 0e 00 00 00 |......| >>> Flow 3 (client to server) 00000000 16 03 03 00 25 10 00 00 21 20 2f e5 7d a3 47 cd |....%...! /.}.G.| 00000010 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 |bC.(.._.).0.....| 00000020 cf c2 ed 90 99 5f 58 cb 3b 74 14 03 03 00 01 01 |....._X.;t......| -00000030 16 03 03 00 28 00 00 00 00 00 00 00 00 b5 c1 dc |....(...........| -00000040 8e c0 bc 78 74 a7 c6 36 23 67 55 5d bc 82 db 77 |...xt..6#gU]...w| -00000050 85 d8 76 c8 98 65 63 8e f2 47 0b 5b 10 |..v..ec..G.[.| +00000030 16 03 03 00 28 00 00 00 00 00 00 00 00 01 e4 5a |....(..........Z| +00000040 e9 dc dd 98 cd 5f d2 d2 eb 84 12 c9 96 ca 91 d7 |....._..........| +00000050 ae f4 db 44 a4 37 f3 a3 b2 8d db ed 3d |...D.7......=| >>> Flow 4 (server to client) -00000000 14 03 03 00 01 01 16 03 03 00 28 6e 20 eb fc d1 |..........(n ...| -00000010 a1 0e 6c a5 d9 6c ab fc 4d 0e f3 f0 61 84 2d 14 |..l..l..M...a.-.| -00000020 06 53 eb 69 18 b3 e3 f1 32 e8 19 00 5e 74 97 e5 |.S.i....2...^t..| -00000030 98 a7 8a |...| +00000000 14 03 03 00 01 01 16 03 03 00 28 c2 2d 32 ba 46 |..........(.-2.F| +00000010 27 8d 87 13 7f b9 49 04 64 2f 6e cc 32 81 f8 3c |'.....I.d/n.2..<| +00000020 7f 0f 19 13 5c 11 33 a1 05 5f 91 bc 97 30 64 84 |....\.3.._...0d.| +00000030 57 69 90 |Wi.| >>> Flow 5 (client to server) -00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 32 91 ac |.............2..| -00000010 63 b8 71 f1 26 18 ac 15 45 58 6c 60 18 77 bc 5c |c.q.&...EXl`.w.\| -00000020 ff 5b cd 15 03 03 00 1a 00 00 00 00 00 00 00 02 |.[..............| -00000030 ad 89 71 22 f0 e0 61 3e 2b f7 d9 da 96 34 51 72 |..q"..a>+....4Qr| -00000040 c9 be |..| +00000000 17 03 03 00 1e 00 00 00 00 00 00 00 01 fd 0f a5 |................| +00000010 74 98 c4 98 ee 67 74 d4 c1 d4 fe d3 c7 e2 1b 2c |t....gt........,| +00000020 e5 3c be 15 03 03 00 1a 00 00 00 00 00 00 00 02 |.<..............| +00000030 f8 d4 60 41 13 6a 9c e3 0e 56 e2 ab 96 45 7e 06 |..`A.j...V...E~.| +00000040 87 63 |.c| diff --git a/src/crypto/tls/testdata/Client-TLSv13-AES128-SHA256 b/src/crypto/tls/testdata/Client-TLSv13-AES128-SHA256 index c35db9e681..4273484ca7 100644 --- a/src/crypto/tls/testdata/Client-TLSv13-AES128-SHA256 +++ b/src/crypto/tls/testdata/Client-TLSv13-AES128-SHA256 @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,84 +7,84 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 7a 02 00 00 76 03 03 e6 6e e6 44 9a |....z...v...n.D.| -00000010 c9 e2 51 58 ac ba 02 48 ea 6f dd 09 7a 08 04 d2 |..QX...H.o..z...| -00000020 df b6 96 2f 31 d4 6b bf ab 0e 8e 20 00 00 00 00 |.../1.k.... ....| +00000000 16 03 03 00 7a 02 00 00 76 03 03 f7 30 f3 d1 e7 |....z...v...0...| +00000010 eb 94 97 a2 c6 d5 be 74 e0 6c 08 80 2f ad 11 6b |.......t.l../..k| +00000020 b3 ce 22 59 06 a9 eb 41 9c 97 a8 20 00 00 00 00 |.."Y...A... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000040 00 00 00 00 00 00 00 00 00 00 00 00 13 01 00 00 |................| -00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 98 |..+.....3.$... .| -00000060 b2 16 47 4d 82 da 23 5b 2a a4 63 29 11 a8 d4 c0 |..GM..#[*.c)....| -00000070 0b 5e 2d 73 0d d6 e7 1e 15 78 1a c2 58 93 70 14 |.^-s.....x..X.p.| -00000080 03 03 00 01 01 17 03 03 00 17 c3 65 82 87 0c 61 |...........e...a| -00000090 57 28 08 d5 da fc 59 8d a3 76 49 0f d5 80 68 3d |W(....Y..vI...h=| -000000a0 03 17 03 03 02 6d c5 f1 b7 8a 61 03 06 9e 0f 3b |.....m....a....;| -000000b0 be 71 5b 29 17 c7 ed 0e 23 40 90 c6 7a 22 4e ad |.q[)....#@..z"N.| -000000c0 d5 f1 60 f6 db d9 37 73 1f b6 43 f7 7b fe 7b aa |..`...7s..C.{.{.| -000000d0 f7 16 28 e5 a8 b6 be 69 da 79 09 b5 dc ab bf d3 |..(....i.y......| -000000e0 36 ca 19 ae 8c de 27 5c 0d 44 5e 4a e2 ac ff bc |6.....'\.D^J....| -000000f0 33 4e 35 d3 8d 21 22 4d 12 38 e2 f9 73 3b 3d d1 |3N5..!"M.8..s;=.| -00000100 a7 b1 06 6a 6a 8d 25 0f 47 b1 d1 f2 da 32 cc 58 |...jj.%.G....2.X| -00000110 9e 78 b6 b4 4e c1 bc 9d 91 38 44 ff 35 71 a7 c3 |.x..N....8D.5q..| -00000120 39 67 5b 50 b1 9b 87 5d fd 6d 87 42 25 10 1a 19 |9g[P...].m.B%...| -00000130 e1 95 19 2f a1 2c 95 6e ce 6c c9 d9 92 1d e6 7f |.../.,.n.l......| -00000140 9d d0 98 60 f3 6c cf 64 8e 66 bb a4 af de 1e b6 |...`.l.d.f......| -00000150 6a 6d 7b 11 a7 ca e1 29 49 f3 57 50 73 e8 36 79 |jm{....)I.WPs.6y| -00000160 81 fe 33 f7 04 1a 04 e3 60 8e e7 11 fa 07 bb 79 |..3.....`......y| -00000170 73 c0 b7 5e 0f 61 b7 3a 50 85 a4 e1 8e 3b a3 43 |s..^.a.:P....;.C| -00000180 79 8a 14 78 0a ff 66 b4 c3 c0 fe 0a 6a c6 66 72 |y..x..f.....j.fr| -00000190 a8 8a e1 9c a6 ad ee 74 53 d9 b8 07 17 b3 9b f6 |.......tS.......| -000001a0 eb 28 1b 64 97 aa 17 fa 80 36 cb b1 35 6e ec e1 |.(.d.....6..5n..| -000001b0 16 1f ba 00 0c 26 fb 17 0e 00 8a e3 28 0d 6a 76 |.....&......(.jv| -000001c0 8c 78 ee 55 02 78 66 90 5b 87 f2 16 e2 af ef fb |.x.U.xf.[.......| -000001d0 a1 f3 8f fd b9 8e e3 16 68 7a ec c0 54 2f 88 c4 |........hz..T/..| -000001e0 08 6c 55 48 58 56 ac 3e 26 5b 67 42 18 72 6e a1 |.lUHXV.>&[gB.rn.| -000001f0 b5 86 cf 55 d1 29 c5 9b 2c 7b 7d f3 a5 26 2e 5e |...U.)..,{}..&.^| -00000200 21 3a 40 97 5a c1 c8 13 3d c3 12 4e d8 88 e1 8f |!:@.Z...=..N....| -00000210 e8 c5 d3 9b 0f 49 24 42 da 27 ac e5 5e 21 2e 2c |.....I$B.'..^!.,| -00000220 8b 27 ae c4 39 49 6f 43 69 a3 e4 0d f1 fc 62 9f |.'..9IoCi.....b.| -00000230 be 65 78 01 d8 c8 4e 0f b5 d7 12 d1 fc 73 cc 6e |.ex...N......s.n| -00000240 cc df d3 df 33 e4 f8 8e 4f 82 60 cd 1f a1 71 74 |....3...O.`...qt| -00000250 20 7a e2 46 fc 7a 83 15 dc 6c 5d b3 4f 92 de a2 | z.F.z...l].O...| -00000260 99 b5 33 4e b0 5d 19 0f 84 ae de 65 2e ee ef 40 |..3N.].....e...@| -00000270 e9 5b c6 53 86 0d 88 fc 2a b2 2c 5c 76 66 95 a7 |.[.S....*.,\vf..| -00000280 96 ad 7f ba 27 ea e4 54 5e 77 97 0d 6f 9e b8 e5 |....'..T^w..o...| -00000290 b7 2f 75 13 42 7e 61 08 e3 69 31 d4 e6 d0 c0 6d |./u.B~a..i1....m| -000002a0 e3 e2 e4 69 5d d0 7d c2 f1 48 a1 e0 23 f1 19 81 |...i].}..H..#...| -000002b0 23 ed a7 ac ed 88 70 60 c6 eb cf 11 23 39 cb 91 |#.....p`....#9..| -000002c0 35 3b 32 6c 20 fc 61 cb 49 77 9c d9 5d e2 b4 41 |5;2l .a.Iw..]..A| -000002d0 b9 c6 22 af 36 e4 a4 c4 45 47 f4 53 3f 7f b4 25 |..".6...EG.S?..%| -000002e0 a0 34 f4 40 42 04 17 63 3b fa 05 35 c3 76 ec f7 |.4.@B..c;..5.v..| -000002f0 b3 ee 62 fb 03 dc 06 22 90 4b fd 07 62 3b cd 27 |..b....".K..b;.'| -00000300 da 87 32 73 3d 46 5c e7 b6 22 f7 02 8e 43 f4 46 |..2s=F\.."...C.F| -00000310 79 cb 9b 17 03 03 00 99 81 e1 c1 b3 1d 11 4b 61 |y.............Ka| -00000320 6a 4a f2 9a 97 52 36 2a fc ef 77 54 aa 28 a7 4f |jJ...R6*..wT.(.O| -00000330 46 c5 69 2a a7 d7 da d6 ff 28 b1 21 3b 66 ac a7 |F.i*.....(.!;f..| -00000340 ff 66 0a 10 20 1d 24 9b f3 46 1a a7 04 4b b5 3d |.f.. .$..F...K.=| -00000350 e8 49 fc 3a f0 74 a8 02 b9 2d 5d e4 de 91 ef 4d |.I.:.t...-]....M| -00000360 ab 47 10 2c ba 70 c1 aa a9 79 a8 96 27 71 90 e3 |.G.,.p...y..'q..| -00000370 91 4d 4e dd 96 e0 4c ad c5 0b 44 0a c0 4d 17 42 |.MN...L...D..M.B| -00000380 65 12 8a ba fb 7c 66 7c 92 61 87 07 cd e3 a0 16 |e....|f|.a......| -00000390 8b 94 23 77 85 70 88 d2 22 64 14 16 b5 ab db 6a |..#w.p.."d.....j| -000003a0 b9 23 26 ee c8 33 6e 9b a6 e4 d1 85 d2 81 3a 5d |.#&..3n.......:]| -000003b0 33 17 03 03 00 35 b2 85 a7 fd fc 27 46 25 8f cd |3....5.....'F%..| -000003c0 ac ff 84 0a 54 cf f2 11 94 41 d0 7e 04 50 61 7d |....T....A.~.Pa}| -000003d0 71 40 df bc 48 0f c1 32 50 83 5c 05 c9 a5 02 95 |q@..H..2P.\.....| -000003e0 77 04 8c 76 ee 44 32 44 94 e3 8b |w..v.D2D...| +00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 c0 |..+.....3.$... .| +00000060 47 7e ad a1 41 53 e5 25 ec 74 46 bc 9e 80 08 3b |G~..AS.%.tF....;| +00000070 0b f5 7e fb 71 1f 00 d5 4b 27 51 22 4a 5e 5f 14 |..~.q...K'Q"J^_.| +00000080 03 03 00 01 01 17 03 03 00 17 e9 e8 56 00 26 9e |............V.&.| +00000090 92 60 84 6c 07 3d b1 ef e4 63 51 ba 48 ee d7 fe |.`.l.=...cQ.H...| +000000a0 57 17 03 03 02 6d 2e d4 bb bf a2 e8 3b 84 47 2e |W....m......;.G.| +000000b0 22 66 c1 98 ea 11 6b a3 4d 1b 64 c0 02 32 76 9b |"f....k.M.d..2v.| +000000c0 29 8a 4a 96 68 5b d1 fd a0 0f a6 9b 70 20 c7 08 |).J.h[......p ..| +000000d0 7b 25 07 d1 54 8c b1 bb 4e ba 32 65 2c 1e 16 29 |{%..T...N.2e,..)| +000000e0 e7 d2 df e3 84 60 e1 43 07 99 35 4d 95 7c 27 96 |.....`.C..5M.|'.| +000000f0 be f4 bf 0a e9 3b 9d 60 7a 6e 34 82 1f 03 ca 17 |.....;.`zn4.....| +00000100 ac d1 a1 b5 dc 3f 20 7b 42 f6 94 43 60 ff 3f 1b |.....? {B..C`.?.| +00000110 b1 2e 2d 71 55 07 fb 65 40 56 59 82 1e 31 83 c9 |..-qU..e@VY..1..| +00000120 35 6c 28 ad c1 bd 88 55 1b b6 1e 89 af 64 7f 11 |5l(....U.....d..| +00000130 53 80 3a 62 ef 34 a7 d0 ce 38 9b 19 d6 5f 78 0d |S.:b.4...8..._x.| +00000140 66 73 b2 bd b6 a6 f8 70 c8 40 f9 aa a2 86 f4 48 |fs.....p.@.....H| +00000150 0d 6c 54 67 c6 3c 91 97 ff 94 4d 9a 01 d5 e1 c9 |.lTg.<....M.....| +00000160 8f 27 d3 8d b3 72 cd 34 eb 7a 6d 48 84 f3 8b 84 |.'...r.4.zmH....| +00000170 34 d2 68 bd 26 bc 6d e5 46 41 cc 86 d4 7a b6 31 |4.h.&.m.FA...z.1| +00000180 05 b3 bc a4 fe e1 5c d4 eb 8b fe 64 0e be 89 c4 |......\....d....| +00000190 ce e0 49 a0 ba 7a 83 b6 fb 31 17 42 fd b4 e3 59 |..I..z...1.B...Y| +000001a0 48 df f6 a8 e4 5c d1 77 77 cb c2 31 85 8a 26 65 |H....\.ww..1..&e| +000001b0 20 fa 05 90 ae 66 95 7a 75 4b bc 93 15 dd a0 13 | ....f.zuK......| +000001c0 61 d5 99 fb b2 27 bd ec fd 10 b5 d2 c7 18 ac b9 |a....'..........| +000001d0 bd bc 35 72 d0 42 6c f7 5a e0 67 46 45 10 f7 50 |..5r.Bl.Z.gFE..P| +000001e0 e4 14 47 ac 39 5a 05 38 b9 25 4a 43 fa 57 b2 51 |..G.9Z.8.%JC.W.Q| +000001f0 b7 3e f7 ef d5 b5 de 2e 2f 5c d0 d7 00 23 ac 4b |.>....../\...#.K| +00000200 65 8d 6c f4 ab 6f ef 1e c2 66 c5 b2 cb 1a 51 4c |e.l..o...f....QL| +00000210 ef 96 8f 28 65 2f 50 9c 91 1f 73 87 fc 81 db 90 |...(e/P...s.....| +00000220 16 69 00 06 98 6b 00 33 41 e1 e6 12 89 cb c9 f3 |.i...k.3A.......| +00000230 23 2c 28 83 00 ca 4f 42 f5 26 bc 94 39 3b 18 31 |#,(...OB.&..9;.1| +00000240 41 a9 19 4a 60 e8 de 8f 1d d0 e8 96 77 c0 49 bd |A..J`.......w.I.| +00000250 a2 98 bd b1 0a 6f bd 27 79 1d c4 33 50 37 a8 eb |.....o.'y..3P7..| +00000260 a5 4e 59 87 58 cd f0 a0 34 4e 2b 9d ee 03 e4 8a |.NY.X...4N+.....| +00000270 24 94 86 11 e1 94 f0 2b 3e 27 9a 92 1c 17 d3 96 |$......+>'......| +00000280 c0 71 ab ee 75 5f 99 ca 0e 42 65 5d ed 48 0c 7a |.q..u_...Be].H.z| +00000290 95 8a d9 da f7 60 ee de 46 f2 f4 7a d6 ce 38 41 |.....`..F..z..8A| +000002a0 fa e8 1f 3e 77 be 02 53 0c 33 96 5b 0d 38 bb 08 |...>w..S.3.[.8..| +000002b0 5e 92 1a 81 f1 be c7 9a e2 02 80 09 3b b7 62 b0 |^...........;.b.| +000002c0 7c a7 85 3a d9 52 34 23 4f a3 04 e7 35 98 9e 18 ||..:.R4#O...5...| +000002d0 13 0b 71 12 6d a4 2e 11 bf 39 8c 94 ef 15 96 27 |..q.m....9.....'| +000002e0 9e be 81 d9 55 5a 8b 14 c5 49 dd 6e 6e 7b 6b c2 |....UZ...I.nn{k.| +000002f0 f3 7d ef 24 88 b9 eb a6 15 3e aa a8 3e eb 37 54 |.}.$.....>..>.7T| +00000300 fc 86 9f 51 30 5f 9c a5 fc 7a af f6 1b a5 a4 27 |...Q0_...z.....'| +00000310 51 78 f7 17 03 03 00 99 79 14 63 10 91 cd 73 f5 |Qx......y.c...s.| +00000320 a8 62 c3 92 a3 04 c2 3d 58 5e d3 6e 93 eb 9b b1 |.b.....=X^.n....| +00000330 11 f0 3c c6 96 9f c6 c8 9b de 2c d5 12 c2 bd d1 |..<.......,.....| +00000340 2a 68 89 4a 07 1e 23 d2 45 ca a1 0f 92 71 b7 f7 |*h.J..#.E....q..| +00000350 d0 2f 2a be d0 5e 0c 5d 13 8f b0 7f df b8 52 2e |./*..^.]......R.| +00000360 7a 5e c8 eb 84 06 46 81 d0 f7 09 18 52 fb ce fd |z^....F.....R...| +00000370 22 d8 74 71 e8 7d 41 5f 3a 5d e5 f9 bb e6 99 03 |".tq.}A_:]......| +00000380 32 d1 58 e8 5a 58 d8 b2 39 61 01 33 72 7d d2 11 |2.X.ZX..9a.3r}..| +00000390 8f f7 58 55 c8 f2 64 63 33 9b 78 36 bf 9b 8b 40 |..XU..dc3.x6...@| +000003a0 8c ec 7b a2 bb 51 ed b1 fe 74 c2 c9 1f b4 2b cb |..{..Q...t....+.| +000003b0 fd 17 03 03 00 35 75 46 88 74 06 9b 5e 88 c2 0d |.....5uF.t..^...| +000003c0 fc 7d 29 bd 6c 1c 23 2f 06 3f 14 b1 55 e4 98 b1 |.}).l.#/.?..U...| +000003d0 ed c3 9a ed ea be 29 60 15 ac 80 c7 a8 f7 9b ce |......)`........| +000003e0 f3 79 b3 be ad ff ab b4 a7 45 57 |.y.......EW| >>> Flow 3 (client to server) -00000000 14 03 03 00 01 01 17 03 03 00 35 11 f3 e0 d9 39 |..........5....9| -00000010 43 24 33 e1 54 01 5d f2 c7 50 21 9f db 2d 31 81 |C$3.T.]..P!..-1.| -00000020 3f d5 9c cb 59 cb 24 40 2a 77 da 0a 9e 52 12 11 |?...Y.$@*w...R..| -00000030 1e a8 f8 e2 f2 9e 32 6c 06 8c 48 e8 bf 9d ef 0f |......2l..H.....| -00000040 17 03 03 00 17 bc a1 a2 8a a1 6c c3 19 d1 49 7f |..........l...I.| -00000050 57 af 58 5b ff 7b 11 b2 bb 45 3c 6f 17 03 03 00 |W.X[.{...E>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,86 +7,86 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 7a 02 00 00 76 03 03 fa ff 71 26 f0 |....z...v....q&.| -00000010 2c ee 80 2c 1c f9 ea 4b de ad d0 61 83 7f 89 6f |,..,...K...a...o| -00000020 db e6 a9 53 ff c5 b5 ec 04 08 4c 20 00 00 00 00 |...S......L ....| +00000000 16 03 03 00 7a 02 00 00 76 03 03 dd df 8d 85 da |....z...v.......| +00000010 3c 99 a3 0c 01 90 5f ec b8 3d 28 ce e4 32 c0 e8 |<....._..=(..2..| +00000020 fe 77 03 ad 0f e1 33 1f dc 89 cb 20 00 00 00 00 |.w....3.... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000040 00 00 00 00 00 00 00 00 00 00 00 00 13 02 00 00 |................| -00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 6f |..+.....3.$... o| -00000060 2a 3a fe 8e dc cf 2e 7d 26 bd 12 fb da 0a 00 16 |*:.....}&.......| -00000070 b7 12 79 72 a0 a8 95 11 81 d5 b3 ae f8 d7 26 14 |..yr..........&.| -00000080 03 03 00 01 01 17 03 03 00 17 42 95 95 65 84 db |..........B..e..| -00000090 3e dc c4 41 bb e2 21 94 27 2d 9e 27 4e dd 3e 9d |>..A..!.'-.'N.>.| -000000a0 6e 17 03 03 02 6d 71 24 bb 82 cf aa 37 52 4c 15 |n....mq$....7RL.| -000000b0 6d 5c 74 44 c5 08 21 31 ab 47 5a 75 b9 31 d6 97 |m\tD..!1.GZu.1..| -000000c0 69 64 40 b5 09 1c 2b 36 1d 54 19 52 4b ad c9 1c |id@...+6.T.RK...| -000000d0 d4 51 33 80 a4 b9 df 47 17 6a eb 7a d7 bc 12 3e |.Q3....G.j.z...>| -000000e0 7b 28 fa 15 16 aa 23 6f b5 5f a4 f6 8e 2b 00 11 |{(....#o._...+..| -000000f0 1b f2 00 e4 c8 31 38 ee 61 71 bc 7f dd a1 45 2d |.....18.aq....E-| -00000100 ac 1c 2b fd cd 40 51 29 4e 07 fd f4 04 45 09 56 |..+..@Q)N....E.V| -00000110 72 c8 83 22 3e 20 06 3a 93 16 89 21 4a 9f 3b bc |r.."> .:...!J.;.| -00000120 63 7f c0 1b 6a b2 30 d1 49 43 90 08 af 28 4a c1 |c...j.0.IC...(J.| -00000130 79 96 a1 72 0a 82 fe fb 20 1d 18 f8 b7 03 01 89 |y..r.... .......| -00000140 05 04 d7 98 1b 77 2e ad 81 56 de 08 f1 83 1e 9c |.....w...V......| -00000150 7d 2b 16 e1 15 87 12 db 5f 59 5d a3 95 75 ab f8 |}+......_Y]..u..| -00000160 54 87 91 0d 7f 80 76 6e d8 44 f3 c5 ef d6 b4 3d |T.....vn.D.....=| -00000170 6e 91 4c 65 b7 94 2d 05 d1 1e e6 49 d4 78 1c 34 |n.Le..-....I.x.4| -00000180 48 4a 5b 8c ed ad f7 cb 60 98 56 b5 98 ed 7e 88 |HJ[.....`.V...~.| -00000190 4b 98 ec aa 7d 79 71 2c f2 2f 15 5e c1 ed a6 14 |K...}yq,./.^....| -000001a0 01 df 25 df 79 35 1c f0 52 85 7b 2b 46 2c 09 14 |..%.y5..R.{+F,..| -000001b0 26 86 2c 6a d5 ec cf 24 04 49 9c d8 61 65 02 aa |&.,j...$.I..ae..| -000001c0 d6 ce 55 07 2f b6 23 f3 a7 8d 78 f9 72 fc 77 8b |..U./.#...x.r.w.| -000001d0 45 72 0e 61 c2 e8 8d 65 00 50 8b 00 42 48 d1 10 |Er.a...e.P..BH..| -000001e0 1f 3e cc ca 21 10 4c 0b 6b fc f8 c1 b7 83 3e 25 |.>..!.L.k.....>%| -000001f0 8e 40 11 55 32 34 83 0b 98 38 ad 2a ff e0 ae 71 |.@.U24...8.*...q| -00000200 86 0d 9a ef 50 e8 8a 32 53 ba c8 71 4e 96 46 95 |....P..2S..qN.F.| -00000210 c2 31 b5 64 6c 74 8e b6 be 8c e7 bd 5c 79 fd 87 |.1.dlt......\y..| -00000220 db 7e 39 82 7c 7b 38 58 42 34 a1 64 e9 15 f8 f3 |.~9.|{8XB4.d....| -00000230 56 2c ec c9 4f f3 4d e0 3d a6 ec 87 5f 48 be 75 |V,..O.M.=..._H.u| -00000240 d0 9e a6 6c ef 97 db a8 66 ff 8b 5e 34 28 bb 34 |...l....f..^4(.4| -00000250 e0 9c a0 a1 18 2a f4 98 71 e7 8b 18 2c 7c 37 a9 |.....*..q...,|7.| -00000260 c0 75 b4 24 7f ce 85 42 fe ed 7f fd 6d 7c 3d 5b |.u.$...B....m|=[| -00000270 bf d4 72 b9 2f 6d b6 09 86 cd 48 2f 69 a5 94 86 |..r./m....H/i...| -00000280 ab e9 04 b7 b3 88 3b 49 6b 28 e5 8a 30 73 60 9a |......;Ik(..0s`.| -00000290 c9 ff c5 ff 62 0b cc 3a ec 8b 4b a5 f2 2e c3 9d |....b..:..K.....| -000002a0 a1 5d 51 9d f0 2d 88 20 24 cc bf cf 79 69 aa 4d |.]Q..-. $...yi.M| -000002b0 f0 86 ba 9f 7c b4 f0 e3 97 54 7b f5 68 f8 da 26 |....|....T{.h..&| -000002c0 38 a5 5c 86 c5 0a f5 06 af 58 66 e3 40 a0 33 d4 |8.\......Xf.@.3.| -000002d0 cb 90 52 1b 81 3d 31 9d f9 8f 4f d9 38 80 f3 ea |..R..=1...O.8...| -000002e0 79 c4 2c 55 3f ea 9b 79 51 24 dc 70 6e 5c 68 ce |y.,U?..yQ$.pn\h.| -000002f0 b0 65 58 ec 3d 62 27 f3 1c 34 b4 7c b5 8e 91 1d |.eX.=b'..4.|....| -00000300 dc 6b 21 b5 3d 9c 6f 30 91 f8 39 d8 11 03 65 95 |.k!.=.o0..9...e.| -00000310 72 71 36 17 03 03 00 99 4f 82 32 b2 1c df 6d 0d |rq6.....O.2...m.| -00000320 c5 6f d7 89 39 07 42 4d d5 ae 7d 0d 6f a8 68 41 |.o..9.BM..}.o.hA| -00000330 ca 64 5c 38 5a 31 85 02 d7 99 28 ac 0d 33 1b e2 |.d\8Z1....(..3..| -00000340 d8 f7 f2 d3 13 30 50 0f e9 21 3c 9e 53 1c fb cd |.....0P..!<.S...| -00000350 96 e7 00 ef 35 5d d6 a7 64 77 fd 76 07 fa e6 e0 |....5]..dw.v....| -00000360 04 ec cf c0 76 41 a7 12 37 e0 c3 42 43 11 54 7e |....vA..7..BC.T~| -00000370 4f b8 38 3a 3e 60 0f 9c ac 65 d1 84 d3 6e b1 c2 |O.8:>`...e...n..| -00000380 fc be a7 96 59 89 87 c7 b9 d7 09 c0 ef 68 d7 10 |....Y........h..| -00000390 a5 08 8a 45 23 17 47 e3 eb f7 9f d3 ab 54 d1 4a |...E#.G......T.J| -000003a0 8c 69 1f aa a3 43 af dd ce 76 a3 9a 6f e5 4c 6a |.i...C...v..o.Lj| -000003b0 07 17 03 03 00 45 b8 72 a2 fb af 1c 5e 8f ed 0a |.....E.r....^...| -000003c0 53 85 d3 cd 32 ad 56 ba 38 82 1c 23 40 83 7e c1 |S...2.V.8..#@.~.| -000003d0 ce 0f 53 f5 74 a0 54 39 aa fb f1 13 8d 5f 3a 93 |..S.t.T9....._:.| -000003e0 fc 98 72 3f e5 70 e2 e5 97 fb 92 ca 2b 52 50 96 |..r?.p......+RP.| -000003f0 3f d0 8d 94 d5 17 2b 0d 90 4a 12 |?.....+..J.| +00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 03 |..+.....3.$... .| +00000060 6b 91 90 36 f0 54 da 66 8e 47 9b 26 9f 9f ae 30 |k..6.T.f.G.&...0| +00000070 69 9e a2 6a 70 fb ef b2 f1 76 2b 32 90 0e 63 14 |i..jp....v+2..c.| +00000080 03 03 00 01 01 17 03 03 00 17 46 47 2e ae ea 9b |..........FG....| +00000090 78 7b 0c d4 74 e2 b5 bf 7b 64 da c3 d3 c9 55 7f |x{..t...{d....U.| +000000a0 e3 17 03 03 02 6d a8 c1 57 27 66 9d 16 f6 4f 1b |.....m..W'f...O.| +000000b0 17 b6 5d 8c 3c fe f5 d5 4a d3 c6 8d e2 a8 2d d0 |..].<...J.....-.| +000000c0 01 8d db 18 e8 c8 69 74 eb 81 9e 97 20 01 60 d5 |......it.... .`.| +000000d0 96 d1 8f 9c de 09 ff 1d e7 45 97 97 36 fa 89 77 |.........E..6..w| +000000e0 88 20 30 c6 5b 42 d6 0e 85 9a 11 43 60 a1 86 34 |. 0.[B.....C`..4| +000000f0 22 47 25 23 a5 35 87 a9 74 5d fe eb c9 70 32 44 |"G%#.5..t]...p2D| +00000100 17 60 55 99 7a 93 b5 92 8b 66 31 ce dc e0 39 f2 |.`U.z....f1...9.| +00000110 6a b3 db 43 5d 3f ba e5 12 12 1f 0e 3c 35 3b 72 |j..C]?......<5;r| +00000120 9f 9d 69 d5 d6 cb ac b5 9e f4 af f5 74 68 67 f4 |..i.........thg.| +00000130 e9 5f a4 4a d7 27 5b a5 2a 39 b7 30 49 4d 64 bb |._.J.'[.*9.0IMd.| +00000140 5d 89 10 ff a6 2c 42 a1 4a 2a 0c 28 c6 cd 4a e8 |]....,B.J*.(..J.| +00000150 7d 24 d0 75 ff 61 08 3f 3b 05 ec f3 d6 61 ed 43 |}$.u.a.?;....a.C| +00000160 08 5e 07 1c f2 15 96 22 2a c0 3c 5f 04 d1 17 82 |.^....."*.<_....| +00000170 ea ee ee c7 49 cc 3e e4 65 15 97 6e 6f 36 24 a9 |....I.>.e..no6$.| +00000180 27 34 3a 75 dc 07 1e 4c f1 29 d1 e3 22 31 7d 84 |'4:u...L.).."1}.| +00000190 a8 2a 7f 37 03 ab 13 ae 15 e2 74 50 bd 54 5b 32 |.*.7......tP.T[2| +000001a0 ea 75 10 ed 39 5c 69 90 f6 74 09 53 c1 ce 44 49 |.u..9\i..t.S..DI| +000001b0 64 fb f2 c6 bd 93 b2 07 06 96 94 04 a5 9e ed 67 |d..............g| +000001c0 10 cb 01 fc 85 45 d7 22 76 3c c6 2f 14 4c 31 e1 |.....E."v<./.L1.| +000001d0 73 81 7b 8b 6b 54 d6 34 15 d2 eb d0 03 10 c7 3d |s.{.kT.4.......=| +000001e0 f5 07 48 cc 72 9b e9 48 ee 13 9f 80 b5 13 86 77 |..H.r..H.......w| +000001f0 33 91 79 6f f2 13 17 68 ca 72 6b 0d 93 9a 20 30 |3.yo...h.rk... 0| +00000200 70 c3 30 ab 13 7e 14 39 97 4b ce c5 3d 8b 03 7f |p.0..~.9.K..=...| +00000210 cd 4b 67 c4 c5 79 0c bb cd ba 17 c5 d5 15 51 cb |.Kg..y........Q.| +00000220 ac b7 f7 19 43 ff f5 c4 09 8c 44 67 ca e6 a1 5f |....C.....Dg..._| +00000230 1d 27 29 63 f2 0d 75 6d b7 62 52 c9 1d 8e 0e 3b |.')c..um.bR....;| +00000240 6c cb 04 3e f7 13 74 bb 03 35 2e 4e 41 9a b7 72 |l..>..t..5.NA..r| +00000250 15 ed 02 79 c7 bc 38 b3 65 75 0a 8e 82 dc d4 79 |...y..8.eu.....y| +00000260 1c 10 3f 78 8c be 78 b0 73 18 cc 52 1d 3b 91 66 |..?x..x.s..R.;.f| +00000270 33 fe 63 b2 ec 19 92 44 8f 06 4e 20 85 94 5c b4 |3.c....D..N ..\.| +00000280 ad 22 16 a0 b3 76 03 dc 62 e9 0c ac 8c e1 67 c9 |."...v..b.....g.| +00000290 d8 6f 40 51 b5 39 9a 61 b6 63 e0 d5 60 6a 27 78 |.o@Q.9.a.c..`j'x| +000002a0 62 ec 94 1c 75 2c 38 f2 a6 f2 f0 c4 8f 98 ad cc |b...u,8.........| +000002b0 2e ce 7d 13 76 f4 4f 94 78 3f 85 cf ea 52 c4 6e |..}.v.O.x?...R.n| +000002c0 16 65 f9 48 5e f9 0b 07 bc 3e 38 91 06 e1 b0 76 |.e.H^....>8....v| +000002d0 82 60 25 03 36 9c 3e 5e 54 73 8d cf df 91 19 33 |.`%.6.>^Ts.....3| +000002e0 a7 18 96 d4 86 ea 7c 00 88 e6 a3 fe ea a1 14 db |......|.........| +000002f0 ae da 07 ef 1e 6f 16 bb ad fb c0 f4 60 2f 75 5c |.....o......`/u\| +00000300 a4 43 a0 fc 3c d6 5e 89 cf 6e 1a c6 de 61 65 34 |.C..<.^..n...ae4| +00000310 03 e5 cd 17 03 03 00 99 0a f3 a2 45 fe 53 22 37 |...........E.S"7| +00000320 cd 31 9d 67 31 56 f9 99 c2 d1 bc 6d 47 de 9a e7 |.1.g1V.....mG...| +00000330 67 c0 89 84 ac bf 27 b5 32 f0 e9 a5 9d f2 e0 ad |g.....'.2.......| +00000340 fd 12 6a a4 5d 50 4c b9 ed f1 f4 0e c0 c0 6c c4 |..j.]PL.......l.| +00000350 39 9b 10 02 fa 10 64 a6 8b af 9d 6e d9 40 6d 0c |9.....d....n.@m.| +00000360 b0 6c b8 8d d5 b0 14 f0 ed 85 d6 66 8f 6f 61 43 |.l.........f.oaC| +00000370 49 dd 95 08 94 2e a8 a6 19 b9 7b 6b 99 09 af 4c |I.........{k...L| +00000380 5f 41 48 da 10 b6 cf ee 68 b6 6e 03 d7 29 93 8e |_AH.....h.n..)..| +00000390 1a ab d1 ad d4 bf 33 2a 53 87 92 05 d1 1a de c0 |......3*S.......| +000003a0 aa ef b9 9c 4d 2d f6 b1 72 60 22 80 bb 46 24 75 |....M-..r`"..F$u| +000003b0 35 17 03 03 00 45 46 9e b3 7f d0 82 b6 ef 45 1f |5....EF.......E.| +000003c0 18 6d 3b b6 23 f5 c9 f4 54 e3 08 d0 8b 30 c7 31 |.m;.#...T....0.1| +000003d0 af 98 26 69 b7 6e 08 1d 1f be 1a 7e 5b 97 91 28 |..&i.n.....~[..(| +000003e0 fa b7 78 05 ee 3f a1 9e a0 79 fc 45 51 4c 96 fb |..x..?...y.EQL..| +000003f0 03 46 24 7d fe ec a4 40 51 d6 73 |.F$}...@Q.s| >>> Flow 3 (client to server) -00000000 14 03 03 00 01 01 17 03 03 00 45 f6 a2 b0 dd 25 |..........E....%| -00000010 6e 65 f4 c5 74 2b 60 e0 14 12 92 b3 fc 8c 18 06 |ne..t+`.........| -00000020 fb 5d c4 de d9 41 df 39 47 b1 d0 2f 3c 4e 90 fb |.]...A.9G../>> Flow 1 (client to server) -00000000 16 03 01 01 10 01 00 01 0c 03 03 00 00 00 00 00 |................| +00000000 16 03 01 01 12 01 00 01 0e 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,87 +7,87 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 91 33 74 00 00 00 05 00 05 01 00 00 00 |....3t..........| +00000080 01 00 00 93 33 74 00 00 00 05 00 05 01 00 00 00 |....3t..........| 00000090 00 00 0a 00 0a 00 08 00 1d 00 17 00 18 00 19 00 |................| -000000a0 0b 00 02 01 00 00 0d 00 18 00 16 08 04 08 05 08 |................| -000000b0 06 04 01 04 03 05 01 05 03 06 01 06 03 02 01 02 |................| -000000c0 03 ff 01 00 01 00 00 10 00 10 00 0e 06 70 72 6f |.............pro| -000000d0 74 6f 32 06 70 72 6f 74 6f 31 00 12 00 00 00 2b |to2.proto1.....+| -000000e0 00 09 08 03 04 03 03 03 02 03 01 00 33 00 26 00 |............3.&.| -000000f0 24 00 1d 00 20 2f e5 7d a3 47 cd 62 43 15 28 da |$... /.}.G.bC.(.| -00000100 ac 5f bb 29 07 30 ff f6 84 af c4 cf c2 ed 90 99 |._.).0..........| -00000110 5f 58 cb 3b 74 |_X.;t| +000000a0 0b 00 02 01 00 00 0d 00 1a 00 18 08 04 04 03 08 |................| +000000b0 07 08 05 08 06 04 01 05 01 06 01 05 03 06 03 02 |................| +000000c0 01 02 03 ff 01 00 01 00 00 10 00 10 00 0e 06 70 |...............p| +000000d0 72 6f 74 6f 32 06 70 72 6f 74 6f 31 00 12 00 00 |roto2.proto1....| +000000e0 00 2b 00 09 08 03 04 03 03 03 02 03 01 00 33 00 |.+............3.| +000000f0 26 00 24 00 1d 00 20 2f e5 7d a3 47 cd 62 43 15 |&.$... /.}.G.bC.| +00000100 28 da ac 5f bb 29 07 30 ff f6 84 af c4 cf c2 ed |(.._.).0........| +00000110 90 99 5f 58 cb 3b 74 |.._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 7a 02 00 00 76 03 03 8b 65 4e 74 f0 |....z...v...eNt.| -00000010 c4 05 7a a1 58 a7 fd b0 55 9e d2 15 67 1f 19 f9 |..z.X...U...g...| -00000020 25 e1 3e 89 4f a6 79 90 95 5a 8c 20 00 00 00 00 |%.>.O.y..Z. ....| +00000000 16 03 03 00 7a 02 00 00 76 03 03 9a f4 f5 6b ec |....z...v.....k.| +00000010 37 69 ea a2 43 05 46 fe dd 55 27 2e 78 cb f6 cc |7i..C.F..U'.x...| +00000020 96 ea fd 68 98 bb 3e 9d 75 ad 6e 20 00 00 00 00 |...h..>.u.n ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000040 00 00 00 00 00 00 00 00 00 00 00 00 13 01 00 00 |................| -00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 a5 |..+.....3.$... .| -00000060 e3 ac d0 3c 26 f8 66 41 ac b5 47 6f 63 a0 8f 0a |...<&.fA..Goc...| -00000070 6f 79 62 23 15 01 d0 57 5d 66 9c 09 50 c5 45 14 |oyb#...W]f..P.E.| -00000080 03 03 00 01 01 17 03 03 00 24 7d dc b2 50 38 8e |.........$}..P8.| -00000090 15 52 73 25 90 d3 d3 f2 19 da 76 ae 64 42 29 eb |.Rs%......v.dB).| -000000a0 21 1b 7d b1 d9 04 94 ac 71 b9 b3 e1 d7 59 17 03 |!.}.....q....Y..| -000000b0 03 02 6d cb 4e 30 d0 df 41 b8 1a 76 1d e2 a2 14 |..m.N0..A..v....| -000000c0 24 ec e4 b8 e4 5b 98 49 ed 4e 48 98 3d a7 89 d4 |$....[.I.NH.=...| -000000d0 d1 35 2f d4 12 dc 0b c3 3f e7 0c df 11 20 41 fb |.5/.....?.... A.| -000000e0 5c 24 62 82 26 ad 28 25 59 c0 c0 81 41 9d 80 b7 |\$b.&.(%Y...A...| -000000f0 db cd 41 bb 27 66 ba 55 e6 2f 52 5d 71 d4 77 6a |..A.'f.U./R]q.wj| -00000100 5c 5d 72 34 e6 83 9d c6 24 d1 be 3b 99 90 9b 22 |\]r4....$..;..."| -00000110 7f d8 81 39 d4 7b a8 f9 d7 61 82 a1 72 f9 27 0b |...9.{...a..r.'.| -00000120 b8 6a 5c 72 bd 8f 84 34 c6 d0 c8 1a b9 27 d6 7b |.j\r...4.....'.{| -00000130 12 20 37 b7 64 85 19 7e b4 37 46 df 51 77 23 be |. 7.d..~.7F.Qw#.| -00000140 c4 7a e4 7e 37 3b 53 3e 3b 86 8f 22 31 28 4b 8f |.z.~7;S>;.."1(K.| -00000150 89 0d dc 8d 67 37 53 9d 38 f2 5f 99 2c f4 76 64 |....g7S.8._.,.vd| -00000160 87 e4 ce b7 4f d0 83 99 b2 55 8c 38 8c d0 89 d1 |....O....U.8....| -00000170 2f 91 e8 ae ec b1 a6 29 65 3a 8f af 69 e0 48 00 |/......)e:..i.H.| -00000180 db 3e 30 bd 7f 4b 82 56 cf f9 5b 5e 74 d7 d5 4b |.>0..K.V..[^t..K| -00000190 47 4f 22 17 53 fc e6 98 a4 5a 25 ca 7d ca 39 e9 |GO".S....Z%.}.9.| -000001a0 fe 11 f5 ca 91 e1 25 3c 6d f2 b3 d0 9f ee 88 d2 |......%| +00000070 94 e1 51 d6 bf c7 1f 0c 4a b0 af 7f 91 a5 61 14 |..Q.....J.....a.| +00000080 03 03 00 01 01 17 03 03 00 24 3f 87 40 f6 93 e3 |.........$?.@...| +00000090 c9 cb 6e 83 75 c5 2f e3 af 0f 84 9a 3b 88 ad cc |..n.u./.....;...| +000000a0 99 c9 1b a8 26 e0 14 d4 ab fe 50 5f ad 79 17 03 |....&.....P_.y..| +000000b0 03 02 6d 67 86 8e eb e3 15 65 21 e5 2f aa 8d c7 |..mg.....e!./...| +000000c0 d5 34 6a b6 d3 ab 5f 96 f6 b2 79 b0 bc 3e f7 9c |.4j..._...y..>..| +000000d0 5d 8d 62 50 91 35 e1 7d fe 61 9b 8c 9d e1 4a 7f |].bP.5.}.a....J.| +000000e0 54 4b ad c5 35 3d c9 05 d1 b0 6c 3f b2 c4 f7 75 |TK..5=....l?...u| +000000f0 57 84 50 62 8d 50 80 be b6 71 b8 59 02 52 5d 55 |W.Pb.P...q.Y.R]U| +00000100 70 5e 76 61 77 d9 d1 f6 20 d1 d9 bf e2 03 16 1e |p^vaw... .......| +00000110 eb 1c 55 85 48 8d 43 72 56 2a d2 16 fc a3 cc 94 |..U.H.CrV*......| +00000120 08 6d a8 73 55 9d a8 0c 36 da f4 02 c9 23 7b d5 |.m.sU...6....#{.| +00000130 06 e7 63 63 a1 fa 80 1c ca 77 d3 ee 4a f8 61 31 |..cc.....w..J.a1| +00000140 4b 1c d6 8c f3 86 d3 16 ba fe 1c ff 5a f6 fa fc |K...........Z...| +00000150 d6 c7 ab b6 5a db 51 f3 cc 42 f0 65 b6 8f f3 d7 |....Z.Q..B.e....| +00000160 44 5a e7 1e a9 d4 a7 bd cd 20 bf a1 13 f1 b5 29 |DZ....... .....)| +00000170 91 a4 28 78 f5 b6 c2 09 a5 95 e5 98 ab c9 f4 4b |..(x...........K| +00000180 10 da eb 07 ff 46 44 f9 85 f6 4f 78 5c b0 fa 2d |.....FD...Ox\..-| +00000190 0b 3b 79 3f 11 a2 eb 12 96 a3 01 ac 13 d3 65 cc |.;y?..........e.| +000001a0 98 e8 c9 8c c3 c6 c9 09 aa f6 af 01 1e e5 30 40 |..............0@| +000001b0 40 88 44 26 ee 49 91 68 18 56 b9 ce 22 f6 80 ff |@.D&.I.h.V.."...| +000001c0 32 d0 ee 15 e3 8a 96 c0 e5 47 51 c1 7f 70 e1 fc |2........GQ..p..| +000001d0 3a 44 1a 36 b9 e7 ee f0 9c 4e 62 1f 78 2f cc dd |:D.6.....Nb.x/..| +000001e0 62 a3 3b 9b ae d1 34 ea 7f d7 dc b4 c5 2c d7 96 |b.;...4......,..| +000001f0 61 59 0b ed de cc 70 68 06 2c 93 3d a9 9f 0a 9b |aY....ph.,.=....| +00000200 46 0d 39 fa b0 db 7f 9b c1 80 c8 55 35 bb 10 4c |F.9........U5..L| +00000210 2d 8f 88 ae 94 bf 4a 5f 3b f5 95 e7 7a 47 e2 0e |-.....J_;...zG..| +00000220 19 b2 e7 69 f5 bb c0 08 9d e8 5e 23 f0 85 12 c0 |...i......^#....| +00000230 01 cf 7a 87 19 b1 98 97 8d 5a 19 5c 37 52 0b a7 |..z......Z.\7R..| +00000240 45 e8 8f 9b 0c 76 5f a6 5b d9 45 87 5b 6e 0e db |E....v_.[.E.[n..| +00000250 6a 6a e2 b2 1d f9 e6 31 13 09 8c 32 93 43 46 17 |jj.....1...2.CF.| +00000260 15 45 c8 26 7f f2 23 7b b1 da c4 20 56 59 4b c9 |.E.&..#{... VYK.| +00000270 3e 90 a6 77 ea 28 ea 05 74 b8 04 55 68 7a 60 91 |>..w.(..t..Uhz`.| +00000280 b7 8e 7d 96 11 ac 2d af f2 26 c5 03 99 57 80 a7 |..}...-..&...W..| +00000290 80 1f 6f ce fd 0e 81 af 2e d6 b0 6b 7c 4c 71 02 |..o........k|Lq.| +000002a0 4c 56 fc e9 0a 58 56 5e 4d fd 2d ea e8 ae d5 b7 |LV...XV^M.-.....| +000002b0 cf aa 66 48 a9 42 76 59 81 52 18 cf c4 6d d8 8c |..fH.BvY.R...m..| +000002c0 90 e3 57 28 53 43 5e ae cd 33 ac 64 e2 ff 65 17 |..W(SC^..3.d..e.| +000002d0 11 e2 6a 07 aa 57 40 63 90 51 11 43 9f 9e 6d 56 |..j..W@c.Q.C..mV| +000002e0 69 c2 44 bb f9 83 84 79 bf 98 be 62 e8 20 6e cc |i.D....y...b. n.| +000002f0 69 a9 c4 33 de 40 d5 e9 95 12 87 d5 28 24 05 62 |i..3.@......($.b| +00000300 ca b8 c2 bd d9 96 dc 16 03 c8 7d 9c 7a 83 de 55 |..........}.z..U| +00000310 3b 4f 90 7b af 36 9a a7 80 46 c5 76 14 70 6c f4 |;O.{.6...F.v.pl.| +00000320 17 03 03 00 99 6e 39 2c 0d 81 12 85 c2 1c 42 56 |.....n9,......BV| +00000330 6a 3a e2 04 60 af 78 13 20 d2 b5 b2 58 9e 2f b9 |j:..`.x. ...X./.| +00000340 f8 11 4f 52 cd 31 c3 a1 ec 83 bd 2e ea 9a 53 6b |..OR.1........Sk| +00000350 55 99 a6 8a 25 1c f7 b6 83 4e 9f 1e 5d c5 b2 b2 |U...%....N..]...| +00000360 a5 6b ea 87 96 0e 29 5b a4 24 f2 16 4c ad e1 9b |.k....)[.$..L...| +00000370 24 d2 95 7e 74 37 44 1a d7 83 f5 4c 28 3f 3d 92 |$..~t7D....L(?=.| +00000380 a7 6f 6e 70 1c 27 93 19 64 ee 61 dc 81 35 67 c8 |.onp.'..d.a..5g.| +00000390 f3 e6 de b0 8f 32 6c df b1 66 97 6b b9 4a 81 f0 |.....2l..f.k.J..| +000003a0 cd 3a b4 56 14 e3 27 50 b0 f3 9b 63 05 a5 99 3a |.:.V..'P...c...:| +000003b0 26 d6 a5 3c e4 ea 8a 5a 04 5e fb de 86 bb 17 03 |&..<...Z.^......| +000003c0 03 00 35 eb 5f 0f df 9f e0 c7 4d b4 3d a6 c8 1a |..5._.....M.=...| +000003d0 df f1 f8 1e 36 ea ae 30 32 da 78 0e 00 fe d3 54 |....6..02.x....T| +000003e0 cc 90 08 1a cb 92 1c 5f f7 0a 3c f7 19 ed a3 3b |......._..<....;| +000003f0 cb fd 56 cb 4f 30 83 07 |..V.O0..| >>> Flow 3 (client to server) -00000000 14 03 03 00 01 01 17 03 03 00 35 f6 6b cb 4a 37 |..........5.k.J7| -00000010 3e e2 61 7e 5b ac c5 25 cc 54 a2 6d 4e 7c 37 19 |>.a~[..%.T.mN|7.| -00000020 ea 21 af df 7b dc 04 2d db 84 ad 06 04 bd 50 f5 |.!..{..-......P.| -00000030 05 9b 19 01 37 22 d2 6f 06 c2 63 dd 95 e6 ef 45 |....7".o..c....E| -00000040 17 03 03 00 17 6d 03 e7 38 f9 a4 3c a7 c2 ee 8d |.....m..8..<....| -00000050 07 49 bd e6 e4 be 3f a3 ec 64 6c 3a 17 03 03 00 |.I....?..dl:....| -00000060 13 cc a9 19 b1 03 56 99 c1 4c d0 f5 fd 3b e2 dd |......V..L...;..| -00000070 0e ef a0 20 |... | +00000000 14 03 03 00 01 01 17 03 03 00 35 ec 05 98 86 f9 |..........5.....| +00000010 a1 e4 14 c1 e2 85 17 62 f9 ff 5f 1f 53 8f 00 14 |.......b.._.S...| +00000020 28 dd 31 bc 9a 7e 2d 54 53 c2 57 f0 24 0f e1 ca |(.1..~-TS.W.$...| +00000030 5e 17 07 bc 32 a5 72 3f 3e 90 dd be f1 a1 cc 6b |^...2.r?>......k| +00000040 17 03 03 00 17 93 58 dd 95 9a 88 82 3d 63 41 f7 |......X.....=cA.| +00000050 ba da 0e 24 3f f2 b1 e5 db 83 2d bd 17 03 03 00 |...$?.....-.....| +00000060 13 03 a4 42 58 3b d7 c5 c2 08 45 e5 c1 bc eb 47 |...BX;....E....G| +00000070 b5 20 ea ce |. ..| diff --git a/src/crypto/tls/testdata/Client-TLSv13-CHACHA20-SHA256 b/src/crypto/tls/testdata/Client-TLSv13-CHACHA20-SHA256 index 98c3c52170..6d7b508fd3 100644 --- a/src/crypto/tls/testdata/Client-TLSv13-CHACHA20-SHA256 +++ b/src/crypto/tls/testdata/Client-TLSv13-CHACHA20-SHA256 @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,84 +7,84 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 7a 02 00 00 76 03 03 49 41 93 3b 12 |....z...v..IA.;.| -00000010 17 ef c7 e6 29 09 70 0e 6b df f7 3d bb 01 9d 27 |....).p.k..=...'| -00000020 cb 0d 97 6b ce 4c 49 60 3e ff 18 20 00 00 00 00 |...k.LI`>.. ....| +00000000 16 03 03 00 7a 02 00 00 76 03 03 43 b1 e8 d9 c3 |....z...v..C....| +00000010 22 a0 a3 08 df 7f 37 34 7a fe 7a 47 98 ee ed 51 |".....74z.zG...Q| +00000020 c2 ae 5c c6 b1 43 3d ff f7 91 68 20 00 00 00 00 |..\..C=...h ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000040 00 00 00 00 00 00 00 00 00 00 00 00 13 03 00 00 |................| -00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 a6 |..+.....3.$... .| -00000060 16 ca 24 6e e9 b1 38 c9 3c 45 0e 35 98 32 c5 7c |..$n..8...U<| -00000150 00 77 9a 72 ba fc 13 ad 7a dc 34 0f aa 26 f9 c6 |.w.r....z.4..&..| -00000160 fe b7 ef 0f e8 d7 46 d0 a7 ee e8 39 4d c1 13 a2 |......F....9M...| -00000170 5c 00 e2 3e 47 08 71 b7 53 94 38 f6 31 3a 60 a5 |\..>G.q.S.8.1:`.| -00000180 57 82 4c bc c0 f7 9b c3 4e 00 5e 5e 40 ef ae 61 |W.L.....N.^^@..a| -00000190 09 37 38 40 b7 93 12 0a 7c 02 22 b9 39 a2 43 e3 |.78@....|.".9.C.| -000001a0 f3 09 36 a7 2a c9 2b 35 fc 2c fc 1c 82 d0 3f 03 |..6.*.+5.,....?.| -000001b0 a9 fc bc 53 79 23 5a ce 2d 07 80 5c 2c aa 34 52 |...Sy#Z.-..\,.4R| -000001c0 9d 71 2d 16 4a f0 09 e6 95 94 2b dd bf d5 9c 84 |.q-.J.....+.....| -000001d0 79 fc 41 15 a6 68 81 23 7e dc 83 55 b0 a4 a4 1c |y.A..h.#~..U....| -000001e0 4e 1e 4d 78 6d 62 45 59 1d bb c3 98 d5 0b 3a 8c |N.MxmbEY......:.| -000001f0 f1 98 49 6b 0f 64 29 d5 38 ad 6a ea 8b 34 29 99 |..Ik.d).8.j..4).| -00000200 c0 04 ce 5a 4f 74 e8 ec bb 0a a5 cd 23 6d 31 7a |...ZOt......#m1z| -00000210 d6 6e 1a 74 53 57 59 76 e9 e7 b2 5d 9f 5d 9a 53 |.n.tSWYv...].].S| -00000220 b0 e6 d1 ad ba 43 b6 40 65 65 3a 04 35 12 e1 f7 |.....C.@ee:.5...| -00000230 0e 91 f6 0c 1e 74 65 e3 90 ed e6 ec fd 88 99 e8 |.....te.........| -00000240 20 64 90 33 b9 a9 d8 a2 f0 d7 e8 e0 cf 8d d4 2a | d.3...........*| -00000250 91 12 44 28 3b 99 69 93 aa 3e b2 3b 6a f0 dc 0a |..D(;.i..>.;j...| -00000260 8b 2e 7c d9 c0 c7 b7 d6 f2 07 69 81 97 7b d9 6a |..|.......i..{.j| -00000270 56 c3 6a e5 d5 6a 06 e7 60 b2 72 1c 4f cc 3f 6e |V.j..j..`.r.O.?n| -00000280 e9 fe 94 79 49 36 a6 5f 6d bf b2 87 a1 59 a3 c4 |...yI6._m....Y..| -00000290 39 ad 9a ea 57 a5 69 47 f0 9b 60 4a a6 45 e8 70 |9...W.iG..`J.E.p| -000002a0 6c 6b 1b 17 8a 4e 5e 56 89 40 de 91 c3 8a 05 06 |lk...N^V.@......| -000002b0 57 9e 68 87 1e 00 c8 08 93 1c f1 57 0f 91 dd 32 |W.h........W...2| -000002c0 b7 e8 96 99 e3 90 44 5e 7a 68 d8 e0 55 67 80 a0 |......D^zh..Ug..| -000002d0 e3 bd d5 f7 01 f4 30 58 a7 b4 62 d7 7b 9c 5b 9b |......0X..b.{.[.| -000002e0 62 20 b6 01 25 1b ff 6f b3 4f bc 41 ae 9c 88 71 |b ..%..o.O.A...q| -000002f0 51 f5 25 06 44 a1 49 6b 1b db ac 4b 37 41 78 29 |Q.%.D.Ik...K7Ax)| -00000300 1c c9 33 82 f4 fe d3 0a f9 e0 e8 ca 8c 7b 76 3d |..3..........{v=| -00000310 8b 3c 3b 17 03 03 00 99 3e 4c 63 66 48 fa 43 7a |.<;.....>LcfH.Cz| -00000320 4d 4b 8b 95 25 ca 9a e7 cf d8 d6 e2 4d e7 15 07 |MK..%.......M...| -00000330 d2 cb 07 79 66 63 b5 8f 3a 7d 00 f4 3a 05 b4 ae |...yfc..:}..:...| -00000340 e6 7e 0e b5 a2 20 ee 0e cc 85 de c2 5d d5 49 32 |.~... ......].I2| -00000350 83 d8 2a 11 36 36 86 93 46 ac ce 7e b4 4d e6 20 |..*.66..F..~.M. | -00000360 24 7d 8e c7 37 5f 05 aa 5e a7 de e6 c7 79 88 a7 |$}..7_..^....y..| -00000370 e7 f7 86 51 07 e0 80 63 76 b2 03 a9 6c c4 86 1a |...Q...cv...l...| -00000380 8d 98 e7 16 e0 a2 dc 6e 5c 19 d1 98 c4 10 2b 39 |.......n\.....+9| -00000390 f4 03 b9 0f b5 ab c3 25 18 bf 8c 59 16 7a 06 60 |.......%...Y.z.`| -000003a0 73 9a 7c 6f d1 1e e1 de 07 23 21 0e 28 c2 fb 19 |s.|o.....#!.(...| -000003b0 64 17 03 03 00 35 e0 fd 9c 49 88 45 b3 c7 da a3 |d....5...I.E....| -000003c0 02 ee 8e 0c e0 33 64 01 35 7e aa 31 aa 43 75 64 |.....3d.5~.1.Cud| -000003d0 30 fc 89 d8 f0 dc 6e 49 68 e8 4e 01 41 0d 31 07 |0.....nIh.N.A.1.| -000003e0 c4 e1 bd db 83 b1 e6 46 f0 06 56 |.......F..V| +00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 63 |..+.....3.$... c| +00000060 0f 66 ec 2d fa 67 d4 eb 94 47 8d 88 0b eb ed ec |.f.-.g...G......| +00000070 5b ac 22 f7 46 85 c5 1c 2b 5e e8 57 e2 d3 6f 14 |[.".F...+^.W..o.| +00000080 03 03 00 01 01 17 03 03 00 17 d0 f8 1f 06 59 8d |..............Y.| +00000090 a0 40 21 8f 3e 36 3b 1d 6a 6e f7 77 44 fb b3 8e |.@!.>6;.jn.wD...| +000000a0 e2 17 03 03 02 6d 22 6b 63 ae 47 fd 66 f9 95 f6 |.....m"kc.G.f...| +000000b0 63 ea e8 16 61 a3 64 82 39 82 76 1c 2c 04 9b 29 |c...a.d.9.v.,..)| +000000c0 0f 8a ff 77 9b e6 2c ce 04 09 5f 91 f3 b6 2e 8d |...w..,..._.....| +000000d0 be 42 94 7e 5a 28 4b 9f e9 7b 38 0a 3c de 90 77 |.B.~Z(K..{8.<..w| +000000e0 c1 bf 97 bf 35 6c 77 98 4b 38 b4 8d 7f 1f 4b c0 |....5lw.K8....K.| +000000f0 23 c5 73 08 90 fa 21 5c cd cb 84 5b 0e 89 86 ce |#.s...!\...[....| +00000100 83 78 d5 1c 2b b9 b1 24 45 ad ab 9c 68 9f c2 28 |.x..+..$E...h..(| +00000110 40 d6 c2 ac a2 0c 86 cd 75 92 43 d5 22 3f 61 9d |@.......u.C."?a.| +00000120 e8 56 b8 7c 71 db 25 cc 2e 74 52 74 da 6b d4 a1 |.V.|q.%..tRt.k..| +00000130 2c 32 d2 d8 9c 74 41 9d 78 98 94 3b 87 99 8e 17 |,2...tA.x..;....| +00000140 df df d6 c3 6d ef 58 13 5c 1e 20 2d ed 77 bd 5c |....m.X.\. -.w.\| +00000150 d6 5c 9a 6d 0f 19 77 e1 4f 79 b0 ed 9d 0b f5 e8 |.\.m..w.Oy......| +00000160 42 d0 f4 90 88 97 a9 84 af 92 3c 41 fe fd 67 6e |B.........R...| +000002d0 fc ba 9c f0 82 13 ba 25 11 c7 5d 38 00 cf 83 14 |.......%..]8....| +000002e0 30 a9 72 48 d1 e8 4e 1b ed 04 ed cf b7 5b 2e 72 |0.rH..N......[.r| +000002f0 1c a2 03 ae 60 54 d6 cf 2f fb 11 a3 b1 8d d6 47 |....`T../......G| +00000300 e8 9f 96 08 90 ae 3c 3c c0 8c d8 c4 ef 30 18 ea |......<<.....0..| +00000310 2a 1a 15 17 03 03 00 99 85 b3 e4 18 6f 8d 34 c7 |*...........o.4.| +00000320 3d 66 49 b8 f6 f5 aa 7a e1 ca ba cb 48 53 15 bb |=fI....z....HS..| +00000330 e9 ec 74 91 c3 b5 d3 6b bc 84 81 d8 e1 a4 31 62 |..t....k......1b| +00000340 d5 19 6d 2f 15 4c f3 8a 3b ec 41 12 89 be d3 cc |..m/.L..;.A.....| +00000350 ab 08 59 a7 79 5d 77 14 ce b1 98 b4 ce 71 7b ad |..Y.y]w......q{.| +00000360 ba 41 3a 7f 9a f8 23 5c c6 fb b5 7b cc eb 0e 7a |.A:...#\...{...z| +00000370 ee af 3d ff 4d 03 ba c2 2a af ac fd b5 e8 5b 43 |..=.M...*.....[C| +00000380 3e 37 ef 84 3d 66 af 3c 8e 1d 0d 36 bd df 25 dc |>7..=f.<...6..%.| +00000390 74 89 9c e6 da 18 c4 c8 b5 6c 3c 4c a6 ac 10 28 |t........l>> Flow 3 (client to server) -00000000 14 03 03 00 01 01 17 03 03 00 35 a3 4c 7d ed 56 |..........5.L}.V| -00000010 62 f5 7a b9 39 08 02 7f 12 72 c2 de 2f dc 35 a2 |b.z.9....r../.5.| -00000020 1f d0 8e 1a 7b c2 19 17 93 df 83 84 66 9e 8d 1a |....{.......f...| -00000030 fa 8c 37 74 04 13 b5 a2 81 7f dc 85 4c 37 f0 f1 |..7t........L7..| -00000040 17 03 03 00 17 51 47 a8 1b bc 86 62 90 79 8a c7 |.....QG....b.y..| -00000050 db 2c 99 95 bf 7c d0 27 6c c3 b6 24 17 03 03 00 |.,...|.'l..$....| -00000060 13 e2 a8 b5 52 61 b0 66 54 50 60 83 78 3d 26 ef |....Ra.fTP`.x=&.| -00000070 f5 5e 36 58 |.^6X| +00000000 14 03 03 00 01 01 17 03 03 00 35 55 88 37 f3 ee |..........5U.7..| +00000010 c5 1b 20 ac fe bc a3 f8 c9 59 3f 5f c0 81 40 8f |.. ......Y?_..@.| +00000020 1e a9 44 c8 10 16 69 8a 76 45 17 51 06 9e f0 55 |..D...i.vE.Q...U| +00000030 a2 f2 56 98 7d a1 4d 95 5a c3 1f 51 cf 31 20 ca |..V.}.M.Z..Q.1 .| +00000040 17 03 03 00 17 81 2a 8e 32 29 ec 9b 92 c3 fd 98 |......*.2)......| +00000050 64 aa 47 2a a5 0c d6 77 7f b1 8f 12 17 03 03 00 |d.G*...w........| +00000060 13 60 8c fb 98 e1 03 b6 20 c8 45 4e d9 4b a8 17 |.`...... .EN.K..| +00000070 10 79 5f b6 |.y_.| diff --git a/src/crypto/tls/testdata/Client-TLSv13-ClientCert-ECDSA-RSA b/src/crypto/tls/testdata/Client-TLSv13-ClientCert-ECDSA-RSA index 633397542c..c8e95c85df 100644 --- a/src/crypto/tls/testdata/Client-TLSv13-ClientCert-ECDSA-RSA +++ b/src/crypto/tls/testdata/Client-TLSv13-ClientCert-ECDSA-RSA @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,133 +7,133 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 7a 02 00 00 76 03 03 9b d5 46 91 59 |....z...v....F.Y| -00000010 c3 26 be 21 ae 20 5f 26 4f 5f 19 ae 3c fe b9 df |.&.!. _&O_..<...| -00000020 16 1b 16 45 4b da 4e 08 58 e9 05 20 00 00 00 00 |...EK.N.X.. ....| +00000000 16 03 03 00 7a 02 00 00 76 03 03 98 9a 92 3f c6 |....z...v.....?.| +00000010 67 f5 96 5b 2f 5e 70 89 2d f6 1e ce 6f 6a e5 91 |g..[/^p.-...oj..| +00000020 4b 4b 6f 98 cc f7 78 4a b1 54 4a 20 00 00 00 00 |KKo...xJ.TJ ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000040 00 00 00 00 00 00 00 00 00 00 00 00 13 01 00 00 |................| -00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 08 |..+.....3.$... .| -00000060 7c 10 a4 69 11 21 4e 78 e3 38 76 c1 4a c2 da 5e ||..i.!Nx.8v.J..^| -00000070 8f 82 b8 4a 32 d8 7c 48 b6 78 e2 61 1d b6 21 14 |...J2.|H.x.a..!.| -00000080 03 03 00 01 01 17 03 03 00 17 7f ac 84 c7 d4 6a |...............j| -00000090 fc 73 53 a6 ae 25 f9 ad e4 4c b9 31 71 4f ba b1 |.sS..%...L.1qO..| -000000a0 55 17 03 03 00 42 61 ac 61 81 87 40 f1 15 d1 7a |U....Ba.a..@...z| -000000b0 44 ef c0 c8 4a 79 99 f1 16 28 36 4b 31 24 95 b7 |D...Jy...(6K1$..| -000000c0 38 49 60 00 a9 aa 51 40 91 52 2f 39 20 d1 37 92 |8I`...Q@.R/9 .7.| -000000d0 cf e1 cb 42 4a 7a 83 27 d3 77 20 4c 3c 22 0b 65 |...BJz.'.w L<".e| -000000e0 8f ce 2a ec c2 5f 90 b0 17 03 03 02 6d 3a d2 ce |..*.._......m:..| -000000f0 b7 7b d3 94 d4 33 91 be 81 f1 af 80 e6 3e 28 d5 |.{...3.......>(.| -00000100 d8 2f 23 08 b6 a6 80 ec b4 bb 2e 85 31 ed 90 46 |./#.........1..F| -00000110 74 34 90 77 0d d3 51 2d 6e 67 f0 4c 36 7c f2 30 |t4.w..Q-ng.L6|.0| -00000120 08 86 6e 53 08 01 c5 06 c8 a4 c6 6a c0 32 80 d4 |..nS.......j.2..| -00000130 0f 05 ff 91 96 a6 75 5f 71 72 be 63 fb 88 dc 5c |......u_qr.c...\| -00000140 06 06 eb 06 57 94 04 61 11 b5 03 1a 96 a3 c4 10 |....W..a........| -00000150 7b b9 ee 83 3e 73 42 71 93 52 a3 44 b8 9d fb 8e |{...>sBq.R.D....| -00000160 5b 5d e4 af 22 0b dc 40 09 34 aa dc 08 d3 e9 54 |[].."..@.4.....T| -00000170 0a b6 ea 87 33 e6 f5 eb 59 e0 6e c3 24 be 81 b3 |....3...Y.n.$...| -00000180 93 89 d1 f4 dd 8f ab c9 a4 1f bf ed 58 86 f4 41 |............X..A| -00000190 de bf 87 2e 1c fb b0 99 f0 ab 4e ec 3e 22 80 78 |..........N.>".x| -000001a0 45 71 eb 6a f0 0a 89 bf fe 37 e4 1d a6 90 f4 f3 |Eq.j.....7......| -000001b0 7c 96 26 47 9d 07 53 16 7c 15 b1 8a 60 ec ad 55 ||.&G..S.|...`..U| -000001c0 e3 50 7c 1f 5f 67 bc 29 b0 c5 12 99 db d9 b2 1f |.P|._g.)........| -000001d0 6c b6 bc 7d ed 0c d3 76 a0 1d c3 f1 f3 10 9d 63 |l..}...v.......c| -000001e0 22 fd 66 f4 12 4d 4f 2e 7a 81 6e 9f 55 cb 40 26 |".f..MO.z.n.U.@&| -000001f0 77 6a 9c 44 5b c2 cf ae 2d de 7c 85 ca 3e f6 c9 |wj.D[...-.|..>..| -00000200 22 d0 34 f8 36 f2 a4 56 5d dc aa 7d f4 9d 3a e0 |".4.6..V]..}..:.| -00000210 3e 4a b8 77 be 7e 8c c1 f0 0f 42 e7 54 a3 a0 b7 |>J.w.~....B.T...| -00000220 76 33 fd 51 8c 2b e8 c3 85 de 0c d3 d7 1a 34 16 |v3.Q.+........4.| -00000230 41 fb e4 eb fb 0f 8b b2 71 45 a7 3e 8f 82 ac b9 |A.......qE.>....| -00000240 85 54 6f 5a 66 a0 16 90 00 24 e0 91 6e 7f 11 55 |.ToZf....$..n..U| -00000250 cb 1a 6f f1 89 b2 a7 23 52 a7 ec 54 cc 0c 51 71 |..o....#R..T..Qq| -00000260 e8 21 fc b2 ca 90 0d 44 ab 05 18 62 4c 01 41 44 |.!.....D...bL.AD| -00000270 eb a9 ca 97 31 a8 0f 5f b9 3a d3 18 a0 be a1 cc |....1.._.:......| -00000280 2f 88 54 b6 c3 8d e7 12 9f 2d 53 62 2e 05 ba 6e |/.T......-Sb...n| -00000290 9c 75 69 cb 4e 3d 2a 46 20 c0 92 c8 e6 e4 1a 16 |.ui.N=*F .......| -000002a0 4b 09 7d 02 ec 8e 7f a2 b9 e9 05 32 88 4b be 39 |K.}........2.K.9| -000002b0 30 c5 f9 ed ca 2a 1d a3 3b fe 18 76 2e f2 51 d4 |0....*..;..v..Q.| -000002c0 b3 aa 61 67 3b eb 90 9c bb ea 1a 6c 11 7b ba 86 |..ag;......l.{..| -000002d0 38 f1 cd c7 3c 64 56 f3 ca ff fd b2 14 bf 37 7f |8....)..t| +000000e0 d1 37 68 9b 8a b6 8d 2b 17 03 03 02 6d d1 1b 9f |.7h....+....m...| +000000f0 75 ba cf 2d 10 4b f0 4e 09 58 fa ff 06 e8 c9 d5 |u..-.K.N.X......| +00000100 a0 51 c8 d4 6f b2 c5 c1 d5 f3 ff 12 1f 43 d8 74 |.Q..o........C.t| +00000110 33 d9 9b e5 f3 34 26 0e 89 dc 00 54 67 17 d2 f3 |3....4&....Tg...| +00000120 c9 9e be f8 4c 77 8a 63 b1 64 5a b4 d7 57 d2 89 |....Lw.c.dZ..W..| +00000130 ce 68 d1 f7 93 01 6c 36 b7 c9 4d 50 d0 4b df 5e |.h....l6..MP.K.^| +00000140 8a bb 6c d9 54 57 9b b9 c9 ec d8 49 c7 51 3c e5 |..l.TW.....I.Q<.| +00000150 7b fb 48 0f fd 1b dd 0f 57 d3 a8 ee f6 51 ba 78 |{.H.....W....Q.x| +00000160 c0 60 f1 d9 c1 d2 65 b4 a7 98 99 fb 64 83 4c 2c |.`....e.....d.L,| +00000170 a6 e9 19 ef 0e 88 68 f8 21 a4 2b bd 95 e9 52 d5 |......h.!.+...R.| +00000180 fb 12 d3 36 06 a2 13 f9 e2 35 6a 06 dd 49 d9 42 |...6.....5j..I.B| +00000190 89 d9 f0 24 5c 36 b8 6d 95 35 21 b3 9c 3b ee 08 |...$\6.m.5!..;..| +000001a0 06 06 4d aa 74 eb fc 1b c1 fd cf 07 24 74 44 2d |..M.t.......$tD-| +000001b0 54 d5 c5 d3 4e c4 eb 09 6e 90 8f 3d c0 c5 1c 21 |T...N...n..=...!| +000001c0 7c 32 1b bc 4b 85 2b f0 b0 f5 cd 61 3d dd 31 03 ||2..K.+....a=.1.| +000001d0 5e e0 5e 06 1a 37 61 1a 58 fa ed e8 cf 0c 4f da |^.^..7a.X.....O.| +000001e0 73 69 42 3a f4 ed dc ad e5 e7 9b fd 54 16 77 85 |siB:........T.w.| +000001f0 ae 84 41 10 be 84 ad 28 ef e6 13 2a e9 9f 9f 2f |..A....(...*.../| +00000200 c5 d0 65 c6 f5 58 b3 39 9b 5e 07 ba 95 be 5e 75 |..e..X.9.^....^u| +00000210 68 17 ba 9d 2a 69 6d b8 ed d4 4b 6a ce 30 b1 82 |h...*im...Kj.0..| +00000220 ae ec 68 9a 26 13 6b 05 38 0f 38 c9 94 01 d0 0b |..h.&.k.8.8.....| +00000230 7b bb ca 70 86 6c e4 f1 eb 81 05 25 33 c0 3e e3 |{..p.l.....%3.>.| +00000240 2a 25 8e 32 eb d5 03 c7 c4 d8 22 22 ef 99 5a a3 |*%.2......""..Z.| +00000250 01 6a b5 65 9a 55 6e fb 84 83 aa 43 ae 4a 3e da |.j.e.Un....C.J>.| +00000260 40 7e 09 e1 3b 15 ad 33 66 5a 3d 30 62 72 86 54 |@~..;..3fZ=0br.T| +00000270 cd a2 6a bf 82 61 17 87 84 c5 3f f3 1e 86 a2 b1 |..j..a....?.....| +00000280 2c 1a f9 ba 8c a2 21 5b 93 b2 16 b4 81 ae 7d 98 |,.....![......}.| +00000290 d6 db 0a 56 14 c9 f7 48 c1 c7 3c 7e 63 8e bc 50 |...V...H..<~c..P| +000002a0 6a 64 e1 1d 04 ba d3 cc 6a 61 60 4b d2 97 d5 ba |jd......ja`K....| +000002b0 23 1a 69 76 86 db 96 39 04 f6 ec e9 96 79 6a 25 |#.iv...9.....yj%| +000002c0 ff 39 dd 19 08 34 4d c3 f6 7c 91 f2 6b 3a e1 0f |.9...4M..|..k:..| +000002d0 66 6d 14 5d 82 21 0b e3 e0 c3 f1 a1 70 e1 2c bc |fm.].!......p.,.| +000002e0 fb 54 aa 85 3c a0 7c 9a 35 00 e2 a1 4f 83 3e f1 |.T..<.|.5...O.>.| +000002f0 64 83 ab c5 e6 31 c7 00 eb 36 f1 bc 41 f3 eb d4 |d....1...6..A...| +00000300 97 30 4d 7f d2 d1 e7 1a 9e a2 53 31 35 6a 16 d1 |.0M.......S15j..| +00000310 65 be d7 d3 93 2a be d2 27 dc 1b 8c 09 16 30 d4 |e....*..'.....0.| +00000320 cb eb e0 bb 42 50 ff 59 c3 81 81 36 88 09 c2 23 |....BP.Y...6...#| +00000330 dc dd 80 63 bb 78 19 6b 6a 70 4b b5 17 bf ed 6c |...c.x.kjpK....l| +00000340 58 f1 15 a9 16 66 c8 45 f5 5f 99 05 b1 3b be e6 |X....f.E._...;..| +00000350 66 d7 45 df 19 16 9d c7 dd 4d 17 03 03 00 99 38 |f.E......M.....8| +00000360 70 9e 16 94 07 67 7c ce 90 67 99 46 5e d9 61 b5 |p....g|..g.F^.a.| +00000370 9b b8 31 fc cc 80 a3 07 30 c9 f5 f9 90 fb e2 0d |..1.....0.......| +00000380 dc 93 ab de 38 25 83 f8 77 0c 94 53 75 68 c7 71 |....8%..w..Suh.q| +00000390 72 6f 61 77 a7 d7 c7 ed 5c d3 08 18 9f 64 f4 6e |roaw....\....d.n| +000003a0 30 dc 05 b1 65 11 79 08 66 34 8c 06 99 a9 00 26 |0...e.y.f4.....&| +000003b0 86 2c e4 b5 6d cf db b1 03 f0 d0 c5 c0 f5 50 04 |.,..m.........P.| +000003c0 f7 27 97 3e 31 19 aa a8 58 c4 78 43 a9 e3 76 0d |.'.>1...X.xC..v.| +000003d0 98 88 20 07 11 4c d6 8a 66 31 72 2e ed 47 66 71 |.. ..L..f1r..Gfq| +000003e0 9a 3e 9c 0d 1c 17 df ab 6a 52 b4 43 a6 c2 64 30 |.>......jR.C..d0| +000003f0 45 08 b8 de 59 be 3a f9 17 03 03 00 35 94 9b 02 |E...Y.:.....5...| +00000400 47 a6 e3 55 9f 95 8a 8d 35 3b bb 56 ec 10 ab dd |G..U....5;.V....| +00000410 a3 ca fe ad bf 25 90 76 c4 15 a0 c0 73 d5 96 96 |.....%.v....s...| +00000420 44 bc ba e9 09 f5 8e e7 e7 7d db f2 e7 9f 99 d2 |D........}......| +00000430 dc e7 |..| >>> Flow 3 (client to server) -00000000 14 03 03 00 01 01 17 03 03 02 1e e2 06 ae 3e 78 |..............>x| -00000010 b4 85 1b 44 b7 6d 04 4b 9f 2c ea 23 79 66 d5 7d |...D.m.K.,.#yf.}| -00000020 c5 39 57 5c 15 49 9a 6e c8 19 1b ed 5d 95 ce 6f |.9W\.I.n....]..o| -00000030 df 96 3a 16 87 88 c0 25 6a 36 fc 62 05 01 bd c1 |..:....%j6.b....| -00000040 00 a8 11 da 7f 0e a3 6c 28 26 9f 4a 18 e2 44 b9 |.......l(&.J..D.| -00000050 aa 71 b2 f6 fa 8b cc 67 c5 29 72 32 cf 78 36 6b |.q.....g.)r2.x6k| -00000060 22 67 86 ac 71 19 cb 9d 9e 36 7b 03 42 01 e5 4b |"g..q....6{.B..K| -00000070 4c c0 0d 93 22 51 a6 d3 65 00 87 ef 92 f3 08 33 |L..."Q..e......3| -00000080 4b e1 18 bc ba 2b 43 90 0f 2f d5 8e 4c 79 9f a7 |K....+C../..Ly..| -00000090 bd 00 2a b7 89 27 b3 e3 db b7 a7 26 b4 8e 48 6f |..*..'.....&..Ho| -000000a0 e7 12 55 f0 8e 02 a8 3f 30 d4 22 a4 d0 e3 89 63 |..U....?0."....c| -000000b0 7d cf c2 46 27 31 8c 10 5f 28 9f 85 fb 02 64 6a |}..F'1.._(....dj| -000000c0 8d 50 26 e6 73 57 43 53 39 c7 bb 72 4e c2 dd 07 |.P&.sWCS9..rN...| -000000d0 86 b0 96 30 f5 d8 f0 5a a0 09 1c 42 26 65 50 d1 |...0...Z...B&eP.| -000000e0 65 1f 97 fd a0 3a c2 ae d6 a4 08 af 5c 9d 30 12 |e....:......\.0.| -000000f0 fc d8 a2 cd d3 b1 7b de 4b be df 54 aa 31 48 32 |......{.K..T.1H2| -00000100 7a d2 d5 59 f1 39 bc cd 23 2b ac 17 ff e4 0e ec |z..Y.9..#+......| -00000110 55 d2 b9 6b a0 30 65 db 5b e9 b4 ab b9 1e dd 3c |U..k.0e.[......<| -00000120 fd 38 7b 19 7f ea 79 56 90 f8 41 bc 3d 64 0b df |.8{...yV..A.=d..| -00000130 05 a3 6c b8 14 5f f5 41 4f 3c 6d 46 a3 24 92 22 |..l.._.AO.....| -00000250 18 9d de 95 a3 d2 00 98 88 90 4d d0 19 a0 47 60 |..........M...G`| -00000260 6f 1b 36 e4 c0 d8 02 52 b8 0b f4 78 44 8d 72 56 |o.6....R...xD.rV| -00000270 e4 68 ce c0 cd 71 34 60 6b 6c 8f 22 cb 78 d2 d7 |.h...q4`kl.".x..| -00000280 fc 89 b9 d6 34 34 c9 f1 44 78 84 36 27 bc 73 0e |....44..Dx.6'.s.| -00000290 ae 43 72 66 07 e4 6c fd ee da ca 99 a2 25 21 a7 |.Crf..l......%!.| -000002a0 eb 63 11 21 c4 30 45 b3 82 27 7d 8c 9d 37 86 8d |.c.!.0E..'}..7..| -000002b0 35 90 5c 13 be 21 fc bd 65 af ec 65 3d c0 9a 1d |5.\..!..e..e=...| -000002c0 6b 75 38 17 8d d1 92 ba 43 c1 e8 a5 43 f5 0b ab |ku8.....C...C...| -000002d0 16 4d 17 03 03 00 35 a9 24 2a fd af f5 da 3b ed |.M....5.$*....;.| -000002e0 d7 15 86 16 c5 e8 bf 95 bc e1 90 fb 0f be f2 3c |...............<| -000002f0 75 b0 30 1b ce f9 ac f7 97 ae 7e 29 d7 17 aa a4 |u.0.......~)....| -00000300 ba c3 2a db 1a 7c 5e bc 18 84 6e e0 17 03 03 00 |..*..|^...n.....| -00000310 17 52 2f 82 87 2d ca 50 2c 51 f6 99 9d 54 5a 68 |.R/..-.P,Q...TZh| -00000320 38 61 ca 02 81 2c 62 dc 17 03 03 00 13 35 e5 58 |8a...,b......5.X| -00000330 b4 26 e0 83 2a 8e 61 e9 96 1a cd 1a 6e c9 67 c0 |.&..*.a.....n.g.| +00000000 14 03 03 00 01 01 17 03 03 02 1e 64 ba 97 ba 8d |...........d....| +00000010 3f 1b d5 5b c5 2e e5 b9 10 01 37 c9 5c e5 ed 39 |?..[......7.\..9| +00000020 7f 9c 8b f8 ef 50 64 5e 30 05 16 ac 80 51 96 78 |.....Pd^0....Q.x| +00000030 2a 50 0f 1e d8 76 ab fd bd 7f 3b 17 7e 1d e9 f5 |*P...v....;.~...| +00000040 03 76 1b 66 3d 15 dc f3 65 a2 aa a9 23 89 09 e9 |.v.f=...e...#...| +00000050 dc de a6 27 fc 21 d9 97 d4 08 05 9a 1c 49 8c ee |...'.!.......I..| +00000060 fc bd f1 9f e2 4e 3a e3 ee 07 39 d0 34 05 cb 18 |.....N:...9.4...| +00000070 83 2b 68 45 df 84 4b b2 c3 79 42 73 b9 f1 1c f2 |.+hE..K..yBs....| +00000080 5f d9 5c f5 7c 4e 86 5e 97 78 ea 0a fa e7 60 68 |_.\.|N.^.x....`h| +00000090 80 c3 17 5f e7 92 9d 6e 9a 92 37 84 92 4b 83 9c |..._...n..7..K..| +000000a0 fa 4c 2a 82 23 eb 67 d0 b2 cc 9e 59 8f 2c e7 bc |.L*.#.g....Y.,..| +000000b0 b3 4f 2a 0c 93 bf 17 b8 48 70 5e 0a 85 92 6d 2a |.O*.....Hp^...m*| +000000c0 ac 81 9e cd 2c 59 fc a7 e3 5b 82 d5 e3 f5 cd c2 |....,Y...[......| +000000d0 8a 68 b8 e9 36 e2 08 0b f7 09 9c 17 95 a3 5e 3d |.h..6.........^=| +000000e0 ef 7c c6 5c fe 32 9e 9d 31 c9 b7 76 5a 71 c3 d7 |.|.\.2..1..vZq..| +000000f0 cd e3 c6 70 e5 2f 07 df 1d b4 34 56 0b ed 52 13 |...p./....4V..R.| +00000100 bc b2 ac 66 0c 84 b0 2e 32 93 08 f2 04 91 8e e3 |...f....2.......| +00000110 7b 7f 22 2a a9 04 50 5c 78 f1 06 c5 fd 2c 4c 77 |{."*..P\x....,Lw| +00000120 a9 17 b5 a8 42 6d f2 0e 87 32 d3 7f be 9e 1d 09 |....Bm...2......| +00000130 50 10 25 9d f1 a5 25 c3 c2 be 0d 8d 8e 96 5e 1c |P.%...%.......^.| +00000140 83 06 45 bc f0 5b 6f b5 0a 02 2a cc ce ac 7e 62 |..E..[o...*...~b| +00000150 f0 b1 89 25 30 bc 12 d2 da f9 1d d0 46 55 97 4c |...%0.......FU.L| +00000160 09 39 e1 a5 1f 4d e1 aa bd 6f 1f 0d 79 4a aa 49 |.9...M...o..yJ.I| +00000170 73 25 dc a5 bd f7 2b 64 3c 84 ed b0 ef 13 c5 6c |s%....+d<......l| +00000180 16 8b 27 bf a5 3d 15 f2 4a 3b 53 ad ba e9 9e 2a |..'..=..J;S....*| +00000190 6d f2 44 5c 66 69 04 94 27 99 08 8e c2 7e c6 69 |m.D\fi..'....~.i| +000001a0 f7 65 1d 0b a5 8c 35 52 0b f1 bd 59 ca d1 bf 44 |.e....5R...Y...D| +000001b0 47 b0 7b f8 3b a0 84 55 73 c2 83 bb 9d e0 bc ed |G.{.;..Us.......| +000001c0 60 07 32 ce 71 b3 60 12 ef ca 28 bb 6c fb bb c7 |`.2.q.`...(.l...| +000001d0 3e eb 05 65 a5 26 1a 6c 40 c8 b4 4e 31 12 a0 96 |>..e.&.l@..N1...| +000001e0 19 66 86 f5 1e f8 bd 6d f4 2e 98 60 fe ff 22 1e |.f.....m...`..".| +000001f0 a9 27 49 87 77 7d b4 5d ea f8 bc 3a 10 15 84 8c |.'I.w}.]...:....| +00000200 cd aa 2c e8 94 93 a5 ee db 7a d8 96 e9 d5 68 e9 |..,......z....h.| +00000210 34 68 40 5b dd 18 dc f0 ef b7 17 72 fd 06 70 d1 |4h@[.......r..p.| +00000220 b6 89 ae 66 40 40 f7 61 0b 17 03 03 00 a4 26 c1 |...f@@.a......&.| +00000230 3c d9 6c 83 52 e3 5e 64 46 7f 12 1d 3d c7 7d 0f |<.l.R.^dF...=.}.| +00000240 a9 8f d3 45 f5 81 46 16 24 c6 c3 7e 5f e4 25 be |...E..F.$..~_.%.| +00000250 00 33 7a 1c 35 d4 5c 64 54 56 08 66 4d 2f 68 15 |.3z.5.\dTV.fM/h.| +00000260 1b 71 d9 aa c9 9e e0 cc d2 73 a9 99 41 9b 08 1f |.q.......s..A...| +00000270 d4 41 de e5 4f 1f 30 65 61 02 8e 6f 79 d7 47 86 |.A..O.0ea..oy.G.| +00000280 2f e6 0e 65 9e 06 e8 98 d1 fe bc 89 b4 bc f4 9b |/..e............| +00000290 70 02 06 e4 9d 37 dd 1b 63 b6 06 62 1a c7 45 30 |p....7..c..b..E0| +000002a0 9d 08 64 35 8b 96 88 9a 1e 58 2f d0 ef 44 39 04 |..d5.....X/..D9.| +000002b0 3c bf e2 e6 c4 73 de f9 b0 10 ed 56 eb 04 bd 4e |<....s.....V...N| +000002c0 89 38 50 3b e7 e5 12 7c 8e 74 b2 a5 79 2d 88 7b |.8P;...|.t..y-.{| +000002d0 e5 1b 17 03 03 00 35 42 b2 61 24 4c 38 b5 d1 42 |......5B.a$L8..B| +000002e0 93 12 66 c5 be 3c f0 b1 b2 6b 86 07 99 7d f3 e4 |..f..<...k...}..| +000002f0 74 2b 43 98 38 df 70 7a e5 f7 67 cf c3 08 23 19 |t+C.8.pz..g...#.| +00000300 4a cf 06 26 fe 56 4a 97 4a 82 70 09 17 03 03 00 |J..&.VJ.J.p.....| +00000310 17 9b 3f bb 09 7d 4f c9 05 42 f7 d1 a7 59 0c a7 |..?..}O..B...Y..| +00000320 c6 9b 36 e1 46 ad 9b 89 17 03 03 00 13 ae a5 51 |..6.F..........Q| +00000330 76 d8 3a 77 a8 a0 38 70 bf be c8 fb ff fe 53 09 |v.:w..8p......S.| diff --git a/src/crypto/tls/testdata/Client-TLSv13-ClientCert-Ed25519 b/src/crypto/tls/testdata/Client-TLSv13-ClientCert-Ed25519 new file mode 100644 index 0000000000..26f76bc1b1 --- /dev/null +++ b/src/crypto/tls/testdata/Client-TLSv13-ClientCert-Ed25519 @@ -0,0 +1,122 @@ +>>> Flow 1 (client to server) +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| +00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| +00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| +00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| +00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 32 cc a8 |.............2..| +00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| +00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| +00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| +00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| +>>> Flow 2 (server to client) +00000000 16 03 03 00 7a 02 00 00 76 03 03 a5 5b a0 2c f5 |....z...v...[.,.| +00000010 57 cc 49 88 64 7d ea 7c ee 61 cf fc 94 9f d4 5c |W.I.d}.|.a.....\| +00000020 bb 83 80 5a f5 7c a3 fc 0a c8 61 20 00 00 00 00 |...Z.|....a ....| +00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| +00000040 00 00 00 00 00 00 00 00 00 00 00 00 13 01 00 00 |................| +00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 fe |..+.....3.$... .| +00000060 e1 43 bd 10 b3 f6 3b 4d 7c 46 8f a3 bc 7d 08 08 |.C....;M|F...}..| +00000070 22 ed aa 9b 7b 89 f3 87 13 7e fe 6c b0 db 3f 14 |"...{....~.l..?.| +00000080 03 03 00 01 01 17 03 03 00 17 2b ce 52 22 34 c5 |..........+.R"4.| +00000090 d9 2c ae d0 23 4d 0c 6e b4 f0 c8 58 11 22 54 bb |.,..#M.n...X."T.| +000000a0 15 17 03 03 00 42 96 b4 72 be f0 6b d3 b0 82 7c |.....B..r..k...|| +000000b0 dc d2 67 69 2c d4 40 a1 7a 3d 9a 39 a5 29 ca 64 |..gi,.@.z=.9.).d| +000000c0 c5 0b d2 ba 7c c3 73 e2 93 0d 44 e3 64 ce ec b2 |....|.s...D.d...| +000000d0 90 ae e2 df 18 f8 f5 93 5f 91 80 c2 b4 00 e7 de |........_.......| +000000e0 f5 3f 4d c8 de 4c 5f f0 17 03 03 02 6d c6 df 33 |.?M..L_.....m..3| +000000f0 1e 12 40 02 7f 46 67 d8 4b 98 d7 5e f7 0a bf dc |..@..Fg.K..^....| +00000100 fe 3c 7f 00 2d 74 31 cb 10 35 e2 eb 16 11 d1 2f |.<..-t1..5...../| +00000110 10 bf 8c 4d 37 c7 1b f6 23 a3 3e 68 87 1a 50 53 |...M7...#.>h..PS| +00000120 64 7c 0d fd 0d 06 32 93 17 85 da e0 d4 86 2c 5f |d|....2.......,_| +00000130 0a 91 9a fd 00 87 f1 f4 fc 18 22 a1 2e 21 44 7d |.........."..!D}| +00000140 6c ca 2c 0d f2 38 15 d1 9d 86 9b 67 b6 b4 06 6d |l.,..8.....g...m| +00000150 30 07 a8 b1 b8 7a 5d 1d 17 d0 c5 1a 40 a3 42 b5 |0....z].....@.B.| +00000160 dc 56 c8 ec c3 c3 4e ff 5f 7c ce 27 fa a6 82 2a |.V....N._|.'...*| +00000170 b9 85 47 4e 0b d1 84 17 92 a6 42 86 9a 65 1c a9 |..GN......B..e..| +00000180 45 be af a7 95 03 0b db 84 fa 5d 1b 7e 57 72 40 |E.........].~Wr@| +00000190 ab a3 9e 46 50 3f c7 03 94 9a 4a 02 bd 9a 90 1c |...FP?....J.....| +000001a0 42 c9 98 e9 81 cd e8 73 a6 82 42 20 24 89 d5 8d |B......s..B $...| +000001b0 48 20 df d4 f4 d2 15 e4 c0 28 ee d8 2a 1b ad b8 |H .......(..*...| +000001c0 1d a4 86 e1 b4 89 97 e8 36 63 aa 9c f4 7e 65 c6 |........6c...~e.| +000001d0 12 86 41 54 b3 4a 79 9f 48 33 fc fc 0d f5 14 47 |..AT.Jy.H3.....G| +000001e0 ba ae d3 20 64 37 f1 cd 9e 1b cc b2 27 68 e6 f2 |... d7......'h..| +000001f0 95 0c 29 59 f2 15 2e 97 60 f3 8d 1b b1 65 cd 4f |..)Y....`....e.O| +00000200 0d a5 0a 34 59 63 20 f0 71 e6 d5 13 f2 4e dc 73 |...4Yc .q....N.s| +00000210 5b 1a 36 d7 6a aa b0 30 f4 ff 68 ad f5 5e f0 12 |[.6.j..0..h..^..| +00000220 0c 34 a8 4d 91 03 8e 4a 30 07 23 49 41 7a fe 19 |.4.M...J0.#IAz..| +00000230 62 5b 6a a0 4d d5 54 a1 1f 45 91 86 b3 a1 c3 32 |b[j.M.T..E.....2| +00000240 62 79 a8 93 b3 d4 43 0c a8 12 10 4f f5 53 c3 3b |by....C....O.S.;| +00000250 d9 73 ef 42 be 1d f5 70 fd 9f ca 54 20 3a 33 c9 |.s.B...p...T :3.| +00000260 f6 e8 55 13 b3 ab 45 c8 bb 5c 6b b9 39 a9 04 ac |..U...E..\k.9...| +00000270 1c 3c 5a aa b7 91 2c 0c f6 74 ea 6b 2d e2 9a 3c |..$.......| +00000360 1b f5 7a dc 63 8d 5e 75 de 72 cf 41 ca 75 ab d9 |..z.c.^u.r.A.u..| +00000370 55 b0 b5 81 a9 6c a9 f6 1d ea 66 dd dd 86 f5 03 |U....l....f.....| +00000380 12 08 9d b4 07 48 eb 8b 45 f1 35 b1 31 bd 5d f3 |.....H..E.5.1.].| +00000390 e2 34 73 9a e5 87 b7 8b 0b 8b ab 7e 05 db 56 db |.4s........~..V.| +000003a0 4f 4c 52 1a 3b 5d 4c 53 b1 49 40 81 5e 73 af 26 |OLR.;]LS.I@.^s.&| +000003b0 21 e6 e3 5c 4a a6 f6 07 56 de f5 76 5c 67 d8 d5 |!..\J...V..v\g..| +000003c0 eb f3 6a fb 6d b7 00 bc 6b 28 c9 63 4d 58 76 97 |..j.m...k(.cMXv.| +000003d0 aa 51 2b f3 03 9c 70 3b 3e b2 a4 16 a0 a0 e0 43 |.Q+...p;>......C| +000003e0 77 da 88 2d 48 3b 07 e2 8d a6 e2 80 85 68 ac dc |w..-H;.......h..| +000003f0 ce 66 2f 97 20 9e 4e 33 17 03 03 00 35 f6 ce 98 |.f/. .N3....5...| +00000400 8b 01 f5 75 8e 98 42 02 b1 b8 90 f3 08 96 e8 5a |...u..B........Z| +00000410 d4 7c ef d1 62 1e b3 36 39 d9 b2 59 1f 1f cc 74 |.|..b..69..Y...t| +00000420 f2 a8 62 11 00 28 31 fa d9 5a 27 10 7b 93 ff de |..b..(1..Z'.{...| +00000430 a0 ec |..| +>>> Flow 3 (client to server) +00000000 14 03 03 00 01 01 17 03 03 01 50 57 2a 94 d7 c1 |..........PW*...| +00000010 40 42 d3 aa e3 d8 b3 e4 13 ff 51 ee 8a 52 9d 9c |@B........Q..R..| +00000020 c4 a4 40 91 72 0f c9 4e fe 56 22 89 ea fb 6d 05 |..@.r..N.V"...m.| +00000030 a2 96 97 4b fa ef ec 13 b6 13 3b 69 6c 65 c0 74 |...K......;ile.t| +00000040 e5 54 df a4 97 50 f7 85 a1 c7 fb 52 84 56 98 16 |.T...P.....R.V..| +00000050 52 b6 eb 5a d0 72 6e 65 98 81 bb f5 2a 4c ed 1a |R..Z.rne....*L..| +00000060 90 e1 01 a6 2b eb e0 1d 06 ba 8a d4 47 45 90 f0 |....+.......GE..| +00000070 91 bd c4 d7 54 ba 44 30 78 42 15 42 74 59 1c c7 |....T.D0xB.BtY..| +00000080 56 34 39 64 8e f8 0a 0f 2b 35 0f 06 97 34 3e 5e |V49d....+5...4>^| +00000090 00 00 5a f0 07 0a f5 66 46 86 94 8c 0b 62 1c fd |..Z....fF....b..| +000000a0 cc cf fd 5d 06 96 1e 21 9e 20 d5 07 5f 5a 00 9f |...]...!. .._Z..| +000000b0 6f 80 36 5e aa 56 d0 07 00 20 08 55 48 fe 6c a1 |o.6^.V... .UH.l.| +000000c0 b1 22 f3 94 54 7e 7e d5 e9 f0 71 69 01 fc bd 14 |."..T~~...qi....| +000000d0 a1 de 38 e4 b4 02 88 3e 66 77 3b f7 aa cd 57 a3 |..8....>fw;...W.| +000000e0 cf 6a 40 7d 93 75 79 3b 95 07 33 69 b2 8d 2a 37 |.j@}.uy;..3i..*7| +000000f0 94 d3 8d d5 b5 8a f0 94 8d 1e b4 9e 02 4f 7d 83 |.............O}.| +00000100 05 c6 c7 c8 a0 74 f1 88 f7 68 bf 4b e4 18 3b 6f |.....t...h.K..;o| +00000110 0c 6c a6 e7 75 50 b9 f6 68 2e 05 67 a3 47 df 22 |.l..uP..h..g.G."| +00000120 fa ae c1 4f a8 3d f3 bb dc 66 c3 b6 98 b7 8c 5b |...O.=...f.....[| +00000130 48 51 57 d7 43 b2 13 25 9e d5 82 6c 70 5c 42 53 |HQW.C..%...lp\BS| +00000140 a9 e8 8a 12 26 cd 3a f8 f8 e5 97 84 55 89 09 d4 |....&.:.....U...| +00000150 d4 20 40 d7 2d 6f 66 36 63 f6 53 17 03 03 00 59 |. @.-of6c.S....Y| +00000160 2f f6 22 ce f3 86 f8 ee b1 f6 49 de c8 bf 91 9c |/.".......I.....| +00000170 bc 2f fa 75 af 51 bc ee b7 a5 a9 82 35 3b 83 9d |./.u.Q......5;..| +00000180 3d 9f 57 10 07 4b af 01 66 f0 39 dd f0 4a a7 90 |=.W..K..f.9..J..| +00000190 f3 6c 28 97 80 0d a5 74 2d 22 a3 81 cd 64 2b 1a |.l(....t-"...d+.| +000001a0 d1 4e 2d 9e 8e 69 38 f8 11 9c 17 1f e6 c9 01 4e |.N-..i8........N| +000001b0 48 1f 80 43 26 d4 5a 82 30 17 03 03 00 35 e9 25 |H..C&.Z.0....5.%| +000001c0 b9 01 8e 0d 51 be 9d d1 b4 2b 0a ee 36 69 85 1a |....Q....+..6i..| +000001d0 10 a8 ff 36 e7 21 b7 f2 54 75 ca 07 52 88 48 d0 |...6.!..Tu..R.H.| +000001e0 ad 67 0b 92 52 70 fa 14 bc 7e 1d 43 f0 a2 7b df |.g..Rp...~.C..{.| +000001f0 ac 0c 19 17 03 03 00 17 98 76 d7 52 06 90 ef 00 |.........v.R....| +00000200 21 5e ec ed 0e 35 77 ef 5c f1 32 58 33 0f 06 17 |!^...5w.\.2X3...| +00000210 03 03 00 13 05 fb b3 c3 4d b5 a4 9c 52 ea bc d2 |........M...R...| +00000220 86 08 26 b8 df 5c 4c |..&..\L| diff --git a/src/crypto/tls/testdata/Client-TLSv13-ClientCert-RSA-ECDSA b/src/crypto/tls/testdata/Client-TLSv13-ClientCert-RSA-ECDSA index 74163f0521..09de5cca83 100644 --- a/src/crypto/tls/testdata/Client-TLSv13-ClientCert-RSA-ECDSA +++ b/src/crypto/tls/testdata/Client-TLSv13-ClientCert-RSA-ECDSA @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,128 +7,128 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 7a 02 00 00 76 03 03 dd 25 8d f2 41 |....z...v...%..A| -00000010 0b 2f 7b 80 24 03 af 9d 81 4e fd a8 ae e4 00 ee |./{.$....N......| -00000020 99 5f 09 05 8b 2a c2 0a 7c 92 ad 20 00 00 00 00 |._...*..|.. ....| +00000000 16 03 03 00 7a 02 00 00 76 03 03 cc a2 2d 09 42 |....z...v....-.B| +00000010 f0 11 87 04 64 83 e4 d8 80 a5 0f 88 69 ae f1 d2 |....d.......i...| +00000020 12 05 d2 08 75 15 86 b7 d8 69 e7 20 00 00 00 00 |....u....i. ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000040 00 00 00 00 00 00 00 00 00 00 00 00 13 01 00 00 |................| -00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 fd |..+.....3.$... .| -00000060 03 d1 75 4e 57 ae b0 cc 43 4f 7e 2b de a8 01 46 |..uNW...CO~+...F| -00000070 98 c7 f9 8e a5 46 95 68 fa 5e 07 c3 a1 55 5e 14 |.....F.h.^...U^.| -00000080 03 03 00 01 01 17 03 03 00 17 df 30 a4 ce 8e db |...........0....| -00000090 20 0d 74 59 0a df 8e 67 23 af 3d 2f 87 8f 31 a0 | .tY...g#.=/..1.| -000000a0 bf 17 03 03 00 42 0f 0a 20 4e 21 cd d8 01 13 ea |.....B.. N!.....| -000000b0 74 29 8d e4 a0 1b 6a a5 be 89 03 8d 2b 39 c4 23 |t)....j.....+9.#| -000000c0 5e b1 f7 4f e4 1f dd ea f8 38 fe 07 89 ca f1 e6 |^..O.....8......| -000000d0 11 e9 2d 40 ca f1 63 11 ac 29 44 c2 25 18 4d 29 |..-@..c..)D.%.M)| -000000e0 30 aa cb 35 b4 33 27 8a 17 03 03 02 22 36 fb 97 |0..5.3'....."6..| -000000f0 fd ba 12 9b e5 19 14 79 2b 78 0e 6c a9 d8 13 a2 |.......y+x.l....| -00000100 51 d8 c1 4b 53 ac a4 73 cf b1 2d 2c 4d 14 b8 10 |Q..KS..s..-,M...| -00000110 de 5d 86 81 19 77 19 a0 b4 1b eb 85 f4 dc 21 2f |.]...w........!/| -00000120 c5 5c 62 44 1b ca f2 91 06 95 14 7a 07 02 1f 98 |.\bD.......z....| -00000130 0d bc a4 89 7c 96 21 6b 37 1c 47 4a 10 e8 e2 b6 |....|.!k7.GJ....| -00000140 f9 e2 97 06 a5 88 ad 5c f1 08 28 4b f5 d5 9a a0 |.......\..(K....| -00000150 51 74 30 ab 9c 52 b0 b9 2d 38 bb 25 b8 6e 71 a7 |Qt0..R..-8.%.nq.| -00000160 7b c9 76 56 13 e6 60 bf 70 15 11 0c 21 12 cd a1 |{.vV..`.p...!...| -00000170 b8 e5 3a 49 00 ad 9c 2f e5 2b 1f cc 4e 4f 0b 90 |..:I.../.+..NO..| -00000180 e1 77 64 5f b5 fc 7b 1c f3 09 cb 0e c4 94 d7 33 |.wd_..{........3| -00000190 59 5b 8f ae e1 9c e4 f6 83 10 f0 71 5f 17 4b b3 |Y[.........q_.K.| -000001a0 3f 81 2c 0a 22 c5 f4 6b bd 83 32 37 4a 2a 9a db |?.,."..k..27J*..| -000001b0 7b 42 c2 c0 7d 13 e0 e7 ea d7 58 a6 b1 20 68 bc |{B..}.....X.. h.| -000001c0 ba 4e 1a 91 6d dd 11 b9 fc 57 02 4d d4 e8 47 74 |.N..m....W.M..Gt| -000001d0 9d e1 a0 25 2f d9 7d 21 39 b9 ca 4c ff de 42 8c |...%/.}!9..L..B.| -000001e0 36 bb 46 79 d3 52 be bc 1c dc 1f e3 6e 18 b8 4e |6.Fy.R......n..N| -000001f0 b2 47 e6 74 d3 50 fa cf fd 5a c8 33 9a 17 2f 48 |.G.t.P...Z.3../H| -00000200 e6 20 29 b3 7b e3 de a1 c8 e7 74 f0 ca eb f9 6e |. ).{.....t....n| -00000210 29 2c 73 17 df 5f 8f ed dc ae 2a a6 37 f2 b7 f7 |),s.._....*.7...| -00000220 38 da 45 63 cd 2e e6 bf c7 a4 3c 15 c2 89 6f 59 |8.Ec......<...oY| -00000230 c2 19 29 19 13 4f a4 59 57 f9 da 8c 7d 5a 82 7a |..)..O.YW...}Z.z| -00000240 9f 79 01 51 94 7c 25 46 7e c2 b2 bf b4 dd c1 e8 |.y.Q.|%F~.......| -00000250 12 14 3e 77 44 8c 47 8b 9b ab 88 47 5d 12 cd 63 |..>wD.G....G]..c| -00000260 17 c2 15 29 a3 cf 8c 08 e0 12 f6 36 ff ae a6 72 |...).......6...r| -00000270 3b 71 4d c7 a2 3b 38 63 be 77 43 67 fb 78 e6 a8 |;qM..;8c.wCg.x..| -00000280 1d aa 3a 42 f5 47 f8 d4 8d 83 f7 f0 93 ba 90 6d |..:B.G.........m| -00000290 25 65 e1 49 f5 3e fe e9 76 ea fb 23 38 6f b2 8f |%e.I.>..v..#8o..| -000002a0 3c 72 d3 fc 85 92 a0 d1 11 7c 6a 0b 0f 31 5d 8b |..| -000003c0 4a ba 5a 91 7b d1 b9 0e d1 98 5e 95 4d 1c 7f 77 |J.Z.{.....^.M..w| -000003d0 6e eb b9 8c 95 ce d4 04 5c 69 8f 7e 48 89 30 2b |n.......\i.~H.0+| -000003e0 71 27 a3 54 c2 b7 f2 ad 23 7b ee 64 88 a0 0d 75 |q'.T....#{.d...u| -000003f0 76 |v| +00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 c9 |..+.....3.$... .| +00000060 b4 93 8b 5b b0 ae 93 4a 01 26 0c fb db 3f 53 0b |...[...J.&...?S.| +00000070 04 ca 65 63 3f d7 d9 f9 fc ca ea 4c f2 08 3c 14 |..ec?......L..<.| +00000080 03 03 00 01 01 17 03 03 00 17 85 f6 ff f8 58 7f |..............X.| +00000090 2a d9 e0 12 82 d6 31 64 29 70 05 24 0f 17 1e 9f |*.....1d)p.$....| +000000a0 dc 17 03 03 00 42 16 7b d5 fa a6 30 94 8e a0 a7 |.....B.{...0....| +000000b0 24 59 b9 3d 85 b0 2f d9 25 c6 5a b5 7f 51 ca 54 |$Y.=../.%.Z..Q.T| +000000c0 4a f7 f0 72 bb dd 5e 70 14 6d 46 3f b3 86 6f c1 |J..r..^p.mF?..o.| +000000d0 a4 5f 6d ba 97 f3 38 c0 24 4a 9f de 7b b9 49 12 |._m...8.$J..{.I.| +000000e0 71 02 f8 bc bc 65 5a ea 17 03 03 02 22 f9 92 7e |q....eZ....."..~| +000000f0 34 eb b3 a4 03 8e ec 48 30 a0 9b ac a6 7b b3 a5 |4......H0....{..| +00000100 d0 4a 89 2c 92 6a c6 04 de b2 86 72 0a f1 97 61 |.J.,.j.....r...a| +00000110 da 70 ef 25 5a a3 f1 b3 3d 78 f1 ec 2b 8f 34 2b |.p.%Z...=x..+.4+| +00000120 c9 94 e7 d2 9e 2f 09 5d 7a e3 2e fc 6e e1 ef 80 |...../.]z...n...| +00000130 e6 0c e9 3e 07 bb b7 0e 74 0c e8 19 fe 7f d8 d0 |...>....t.......| +00000140 fa 70 03 c1 31 c2 76 51 c3 d0 ed a6 a1 0d 20 74 |.p..1.vQ...... t| +00000150 86 15 99 51 71 f8 3d 8e 1c 8c a8 19 0a 9c ac 4a |...Qq.=........J| +00000160 ab 0e e6 cc 52 a0 a8 ca d9 71 54 aa 2c 8b 6f 5b |....R....qT.,.o[| +00000170 f9 46 07 0d 86 40 d9 54 33 8e de 54 a5 c2 6e 36 |.F...@.T3..T..n6| +00000180 14 0e e3 52 78 05 56 90 98 2c e1 ec 26 f6 bd 6a |...Rx.V..,..&..j| +00000190 e5 0b 31 e1 a4 2a 2a 96 1b d6 57 87 ac a8 07 71 |..1..**...W....q| +000001a0 83 d9 70 1e 5e 63 9b d1 01 83 e7 c9 c8 1c 5a 34 |..p.^c........Z4| +000001b0 05 c0 7b da 1c ca 5f 99 49 9a 04 da c9 1c 9b ed |..{..._.I.......| +000001c0 b4 af 9d ff 36 71 1b 3a 00 e8 6a c4 6e 47 d9 4a |....6q.:..j.nG.J| +000001d0 64 f5 c1 07 ab 19 c8 65 a3 33 26 99 be 53 c3 86 |d......e.3&..S..| +000001e0 97 10 ef c1 54 8e 69 6c b1 29 aa 7d c1 63 67 ba |....T.il.).}.cg.| +000001f0 d7 72 7c 74 83 58 bd 5a a8 a8 5f 49 38 ee 1e 34 |.r|t.X.Z.._I8..4| +00000200 c8 98 19 73 97 2d 76 e6 d7 0d 15 75 a0 98 1f 15 |...s.-v....u....| +00000210 c9 b8 3d 3f cb 92 a1 39 4b 91 ca e0 d2 0e 38 c2 |..=?...9K.....8.| +00000220 20 eb f2 b5 04 64 fa d8 e2 d7 2f ba 88 7e f4 37 | ....d..../..~.7| +00000230 c1 68 c4 2f c9 54 a1 21 5d 4b e7 67 3b 2e 6a 06 |.h./.T.!]K.g;.j.| +00000240 55 ba d4 8d fe 0e b1 b7 2d cf c2 82 ed 27 3d 5b |U.......-....'=[| +00000250 9b 3b 28 a9 d4 c4 3c a0 45 b1 77 37 8b f8 7e f0 |.;(...<.E.w7..~.| +00000260 51 90 fe 7a 74 14 ac f7 59 8b ed be 79 b0 4b 89 |Q..zt...Y...y.K.| +00000270 d9 0c 39 fe 45 9d 15 0c a6 96 26 0d b2 29 b0 a4 |..9.E.....&..)..| +00000280 29 62 df 4b c0 a0 05 f1 e8 8b 16 af ea 42 8b 58 |)b.K.........B.X| +00000290 5a ae f6 28 d8 40 09 d1 1e 21 b3 c7 a8 e2 30 4a |Z..(.@...!....0J| +000002a0 27 e6 c4 ba ff 62 91 7b ab 64 18 65 02 e2 10 68 |'....b.{.d.e...h| +000002b0 87 35 c2 09 5b 23 a4 eb 96 19 a7 1e 75 85 6e 17 |.5..[#......u.n.| +000002c0 0e bc 11 1a f5 49 05 92 f7 0e e4 c7 85 da 4e 26 |.....I........N&| +000002d0 5b de f2 dc 36 fb dc dd c6 42 23 0c a7 de 8d ad |[...6....B#.....| +000002e0 f5 2a 8b ff b4 5d c6 ca ec e3 83 a4 1e 23 3a 2d |.*...].......#:-| +000002f0 1a 52 51 11 f5 3b 93 47 89 c8 fc 21 b0 a3 4f b3 |.RQ..;.G...!..O.| +00000300 6e d2 83 ca 20 75 fc 43 43 e5 1d 5d 57 c9 7c 17 |n... u.CC..]W.|.| +00000310 03 03 00 a4 dc 79 73 47 d4 f5 72 c9 12 46 ed 3c |.....ysG..r..F.<| +00000320 d0 61 20 81 a9 ad 64 f3 f1 77 7f f1 74 09 67 80 |.a ...d..w..t.g.| +00000330 c1 08 07 9c 50 b8 7d f5 70 f5 c6 a1 5f ba 37 78 |....P.}.p..._.7x| +00000340 58 37 e3 f4 3f 03 1d 69 6f af 2f 2b 8b 10 95 5a |X7..?..io./+...Z| +00000350 be a1 5c b8 42 61 65 5a 27 35 f6 b4 57 3d 3a 6b |..\.BaeZ'5..W=:k| +00000360 f4 e9 90 88 7b e3 7c bf be 51 19 0e 51 53 cd 10 |....{.|..Q..QS..| +00000370 2c 70 76 9e d1 32 28 8f c4 6c 01 2c 46 8f 4d 14 |,pv..2(..l.,F.M.| +00000380 21 a2 63 39 44 b3 03 0d a3 9d a0 c8 f4 cf 5d 7e |!.c9D.........]~| +00000390 d2 17 05 ee 9c 5c 1a 2e 43 dc 3f 6d d9 f2 54 5d |.....\..C.?m..T]| +000003a0 64 ff d2 1c 21 73 66 b1 2c 21 9d 3f bf fe f8 a5 |d...!sf.,!.?....| +000003b0 79 54 fe 8a d5 3d 5f f6 17 03 03 00 35 0f 01 eb |yT...=_.....5...| +000003c0 f8 46 f8 07 7a 06 69 45 e2 47 4d b0 eb 9c 82 8b |.F..z.iE.GM.....| +000003d0 5d d0 59 66 d1 b5 a2 7b b2 f0 72 6f 34 8b 2c 05 |].Yf...{..ro4.,.| +000003e0 84 53 1c 7b 24 d8 f0 cd a3 46 d1 ed 08 22 bb e6 |.S.{$....F..."..| +000003f0 38 98 |8.| >>> Flow 3 (client to server) -00000000 14 03 03 00 01 01 17 03 03 02 11 1d fa f6 f0 5f |..............._| -00000010 36 d9 1a b8 03 4b b5 2e ba ca 43 ea 31 c2 08 05 |6....K....C.1...| -00000020 e5 a1 55 2e 93 82 3b d5 5a b3 ca fe 11 92 9a 30 |..U...;.Z......0| -00000030 7e d8 02 b4 95 29 8f 29 ba b5 34 22 97 99 bc a9 |~....).)..4"....| -00000040 43 1f 18 5c e2 26 7e 2e 5d ff 2c 68 86 82 7c da |C..\.&~.].,h..|.| -00000050 7e da c5 46 21 69 37 3b f5 65 a4 cd 70 ed e3 c8 |~..F!i7;.e..p...| -00000060 47 21 88 8d 45 3a 0f c9 1e 37 a9 0a 6e 2e 59 0e |G!..E:...7..n.Y.| -00000070 1b 6b 08 22 10 81 74 00 0c 15 6f c6 1e a0 2d 60 |.k."..t...o...-`| -00000080 b1 c6 ec 65 ff 91 16 1a e4 18 86 1b 43 04 dc b1 |...e........C...| -00000090 a0 f2 1d e8 4e 46 72 84 20 14 75 1e 72 52 1b 46 |....NFr. .u.rR.F| -000000a0 1f 8a ed 08 c8 e0 07 1b 6d e3 44 68 ec 52 74 d5 |........m.Dh.Rt.| -000000b0 8d 7f 41 96 b4 77 01 25 0c 1f aa 50 2f 8b d7 1a |..A..w.%...P/...| -000000c0 77 1b 24 01 0b 1f 0f c2 0f e1 00 db 0a 28 e9 c5 |w.$..........(..| -000000d0 a7 22 a2 fd c2 98 c5 69 51 91 d4 55 0f 52 da 33 |.".....iQ..U.R.3| -000000e0 47 f2 34 bd 06 bb 22 53 55 8c 6c e1 95 b5 0f b8 |G.4..."SU.l.....| -000000f0 e5 8a 64 51 50 47 5d ca 5b 1a 20 22 99 b2 d4 74 |..dQPG].[. "...t| -00000100 9e 6b 01 44 6b 7c 40 a0 e3 95 eb 96 53 c0 8d c0 |.k.Dk|@.....S...| -00000110 c1 e1 2b 21 04 f1 64 03 ba 0f d9 34 57 f2 2e 62 |..+!..d....4W..b| -00000120 5e f6 69 d6 86 3e f0 00 96 ca b7 ed 7d b4 1c 79 |^.i..>......}..y| -00000130 f3 ea f4 10 79 d2 6d 6e 49 6c e4 32 c1 81 da 9d |....y.mnIl.2....| -00000140 cc 59 ea 41 3f 1e 62 34 61 6b 0e a4 07 4f ef f7 |.Y.A?.b4ak...O..| -00000150 a3 31 ee 52 14 60 4c 06 5c 69 49 8e 6a ab e9 94 |.1.R.`L.\iI.j...| -00000160 bf cc a5 12 b7 94 10 87 2f cc d8 40 b1 f3 a9 27 |......../..@...'| -00000170 97 5c 7f 85 f9 14 dd e0 66 27 9e 3d f4 eb 75 ab |.\......f'.=..u.| -00000180 1d 1a c0 c3 72 af 6e 13 bb 24 ac fe f0 fb 47 d0 |....r.n..$....G.| -00000190 1d 79 37 70 86 d3 43 9b 64 8c d0 f5 2b a8 7a 77 |.y7p..C.d...+.zw| -000001a0 4a e7 92 a3 bf 1e db 22 5a 40 39 07 76 1c 71 de |J......"Z@9.v.q.| -000001b0 9c ff 75 b7 0d 6e 3e 14 69 8d 08 e5 f3 24 ae 6a |..u..n>.i....$.j| -000001c0 61 f3 dd a7 57 52 9e da f1 de aa 07 11 65 41 64 |a...WR.......eAd| -000001d0 61 57 23 71 47 aa 8e 47 9c 5f 99 84 90 2d 9a fd |aW#qG..G._...-..| -000001e0 5b 15 27 44 41 5c a0 41 87 05 8a 53 8f ed 93 22 |[.'DA\.A...S..."| -000001f0 50 15 b4 60 55 c7 78 20 b5 d8 dd 9d 5d 8c 69 bc |P..`U.x ....].i.| -00000200 74 da d6 a6 a6 86 fe 93 e1 48 48 f2 f0 36 93 86 |t........HH..6..| -00000210 d6 62 9d 09 3a 19 f7 9d 01 9b 87 85 17 03 03 00 |.b..:...........| -00000220 99 37 bf 65 e8 18 ef 10 d7 02 e2 73 3f 13 4a 6f |.7.e.......s?.Jo| -00000230 ea f0 e2 c8 a3 fc a4 3a d2 ea 96 2d 77 cb cc b3 |.......:...-w...| -00000240 1d 8a 77 4d 97 a6 e9 6e 6e b5 af 67 d1 e4 e6 be |..wM...nn..g....| -00000250 0b 05 b1 da 15 83 ca af 19 cf 57 60 05 16 47 bd |..........W`..G.| -00000260 ce 94 f9 bf 48 5c 2c 38 57 57 c3 39 9b 84 19 59 |....H\,8WW.9...Y| -00000270 db fc 09 06 29 4d e7 71 be d4 86 12 fa 8e 54 e8 |....)M.q......T.| -00000280 b0 7e 79 56 dc b2 7a 30 08 e2 8b c7 fa 46 ce 84 |.~yV..z0.....F..| -00000290 d3 3e 6d 1c 8d 4c 5e 76 c7 d2 1d 8b 85 5d be a3 |.>m..L^v.....]..| -000002a0 1b d8 92 72 6d b1 73 d9 b4 a7 14 00 58 80 79 a9 |...rm.s.....X.y.| -000002b0 75 55 96 af d9 d2 20 92 ef ca 17 03 03 00 35 b0 |uU.... .......5.| -000002c0 fe 3f 36 6e 82 b5 d3 7c e9 7b 75 d6 b1 4d f6 7b |.?6n...|.{u..M.{| -000002d0 d0 10 68 32 9a 7b 04 69 38 bf a2 42 1b 3d 14 75 |..h2.{.i8..B.=.u| -000002e0 31 00 90 d4 1b b1 bf 5b 76 65 50 42 21 60 75 30 |1......[vePB!`u0| -000002f0 f9 b8 ee 45 17 03 03 00 17 0b b8 78 9e a2 94 45 |...E.......x...E| -00000300 47 f4 8e af 08 d0 80 75 09 7b c6 44 45 82 19 30 |G......u.{.DE..0| -00000310 17 03 03 00 13 0e fb b9 24 58 7c ab 97 b3 6e 2e |........$X|...n.| -00000320 55 50 ff 05 5d 04 dc 72 |UP..]..r| +00000000 14 03 03 00 01 01 17 03 03 02 11 ce 65 5f 9d 1a |............e_..| +00000010 c6 5f 48 ea da 02 77 1d 79 b2 82 1a da c4 75 aa |._H...w.y.....u.| +00000020 11 af ae 1f e4 7e d7 6f ed 75 48 56 de c8 36 05 |.....~.o.uHV..6.| +00000030 6a 97 5e 49 49 55 25 6f ef 3e ed 40 3f 91 9a ae |j.^IIU%o.>.@?...| +00000040 f4 a1 d3 02 d3 15 60 23 1b 7a 80 ef ef 60 bb 62 |......`#.z...`.b| +00000050 a3 8d 6b 24 1a 11 7d 8e 00 76 54 69 f1 b5 df 77 |..k$..}..vTi...w| +00000060 c0 3a a3 8d 9d a3 56 e7 4d 2d 68 fe 38 49 6d 42 |.:....V.M-h.8ImB| +00000070 3d 2c 69 fd 8c 53 44 af 13 8b 1d cb dc 04 16 6e |=,i..SD........n| +00000080 5a ab 0a 00 19 cf a0 8a ee bd 71 24 68 ee 18 2a |Z.........q$h..*| +00000090 ec 04 fe 0f 12 15 8e 09 e0 87 de 4e c4 2a a1 a5 |...........N.*..| +000000a0 6d be 79 6e 25 15 11 64 8c 35 71 97 fa a4 43 e2 |m.yn%..d.5q...C.| +000000b0 dd cd a1 da b3 75 5d d5 36 fb b4 6b 12 30 a7 f6 |.....u].6..k.0..| +000000c0 d7 7c 72 e1 f8 6a 8b 3e 38 13 9c da ee 07 3d 6a |.|r..j.>8.....=j| +000000d0 f5 1b 26 73 ff 24 03 1f ea dc f3 ed 6b c2 0d fe |..&s.$......k...| +000000e0 3e 03 c4 22 93 c9 9b fe 22 5c 1e fb 07 2b 1b 7f |>.."...."\...+..| +000000f0 34 ff c6 1b 24 32 4b b1 ee 4c 0b 08 b6 3b 1e aa |4...$2K..L...;..| +00000100 49 f3 04 b7 9a 42 e5 42 5a df a2 92 d3 2f 62 54 |I....B.BZ..../bT| +00000110 e1 21 08 ee ce 64 80 48 d3 6a 15 67 8c 5e d1 ac |.!...d.H.j.g.^..| +00000120 a2 64 f9 10 67 2c 27 7e 10 11 d7 09 13 2f 61 a7 |.d..g,'~...../a.| +00000130 d7 9d 2a 18 0f a8 93 c6 fc 75 5c 31 68 42 22 e6 |..*......u\1hB".| +00000140 5c e8 4d 7d 82 73 ba 97 5c d7 6a a2 14 37 85 93 |\.M}.s..\.j..7..| +00000150 48 a7 50 9c fc 66 7b 82 a8 b6 99 0f 8c 9e 40 b5 |H.P..f{.......@.| +00000160 e4 4f 98 01 db 56 03 44 f9 9f 52 a3 33 ac 77 2a |.O...V.D..R.3.w*| +00000170 b6 0a de d5 68 a5 df 67 41 8d 4c 53 9d c4 8d b7 |....h..gA.LS....| +00000180 2e 3d 1f 93 1c 23 e3 81 76 5a 99 7c 90 60 d8 4d |.=...#..vZ.|.`.M| +00000190 e4 a5 00 7d f9 2c c5 19 bc 3c a3 73 c3 83 ff 31 |...}.,...<.s...1| +000001a0 6a 67 88 32 d3 90 7f ab 20 19 1f 55 72 e4 08 bc |jg.2.... ..Ur...| +000001b0 c4 d6 24 e6 00 2d 85 be d4 9b 2c e5 7b ee 26 6b |..$..-....,.{.&k| +000001c0 49 ed 94 3d d6 ee fd 9d da 39 be 02 23 aa b9 78 |I..=.....9..#..x| +000001d0 f2 41 97 0a d9 66 15 1e e1 a2 49 f3 09 f0 25 91 |.A...f....I...%.| +000001e0 8a ea f5 38 87 ea 66 ae dc d2 04 d1 02 92 ab 6c |...8..f........l| +000001f0 a4 1a cc 1b ba 48 d5 8e 27 c4 c5 34 08 8f c2 c8 |.....H..'..4....| +00000200 e1 e6 a8 98 48 9c 43 6c f1 34 ba c0 ff 8e 22 14 |....H.Cl.4....".| +00000210 f7 f9 93 38 96 1e 73 57 28 5b 25 3e 17 03 03 00 |...8..sW([%>....| +00000220 99 c7 8d 1d 62 23 f3 c1 31 3d 45 bc d5 59 ff 47 |....b#..1=E..Y.G| +00000230 8e 34 3d 1d 06 cc e0 05 ea 38 87 f0 fd c3 84 53 |.4=......8.....S| +00000240 47 6b fb 7b 9b c2 a4 f2 1f e0 61 ab 17 32 d0 57 |Gk.{......a..2.W| +00000250 34 dd fb 42 9b ad 4c d7 20 ff b1 58 34 e0 0c b1 |4..B..L. ..X4...| +00000260 44 0c cf d3 05 be 3b 8e a2 d5 39 44 c8 22 64 ad |D.....;...9D."d.| +00000270 61 80 df 5d fd 40 0e c0 c2 41 4f a7 e5 4f b3 7f |a..].@...AO..O..| +00000280 0b db d6 ac fe ba c0 8b 24 8e e8 b2 d6 93 3d 12 |........$.....=.| +00000290 75 41 85 1d b5 4a e2 e0 f8 a1 23 8f 13 24 c6 b6 |uA...J....#..$..| +000002a0 e5 db 06 3f d8 d5 2f b5 e5 24 59 76 53 dd aa 0a |...?../..$YvS...| +000002b0 26 ba 72 23 63 ac 4d 5c 92 13 17 03 03 00 35 47 |&.r#c.M\......5G| +000002c0 59 18 68 11 0a 9a 0b 66 d3 c0 26 72 da 51 0e 00 |Y.h....f..&r.Q..| +000002d0 b0 78 8b 6a ef df 75 94 94 b0 aa 9b 77 e3 9c d8 |.x.j..u.....w...| +000002e0 23 9d 74 ce 85 55 c0 30 4c 96 5b 59 7a f6 03 2e |#.t..U.0L.[Yz...| +000002f0 d8 9c 0e 11 17 03 03 00 17 74 ed 13 0b 6a 15 18 |.........t...j..| +00000300 5e d4 5e 8a c6 e6 5c 0b 3c d0 1b 3d 68 86 2a 07 |^.^...\.<..=h.*.| +00000310 17 03 03 00 13 6f e2 fe a0 b8 95 d4 aa fd 11 2b |.....o.........+| +00000320 e8 6d 42 28 d1 ca 1c 5e |.mB(...^| diff --git a/src/crypto/tls/testdata/Client-TLSv13-ClientCert-RSA-RSAPSS b/src/crypto/tls/testdata/Client-TLSv13-ClientCert-RSA-RSAPSS index d2092baa8c..e44b5a3848 100644 --- a/src/crypto/tls/testdata/Client-TLSv13-ClientCert-RSA-RSAPSS +++ b/src/crypto/tls/testdata/Client-TLSv13-ClientCert-RSA-RSAPSS @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,130 +7,130 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 7a 02 00 00 76 03 03 01 26 b2 48 f5 |....z...v...&.H.| -00000010 b7 cc 24 54 75 e5 9d cd 17 e1 02 e4 2d e1 32 28 |..$Tu.......-.2(| -00000020 4e 19 1e 6d 8a 1e 3f 0e 37 3c 5f 20 00 00 00 00 |N..m..?.7<_ ....| +00000000 16 03 03 00 7a 02 00 00 76 03 03 e9 53 0e 37 17 |....z...v...S.7.| +00000010 22 a6 ae 2f 8b 85 d4 fe 3b e1 2d 22 d1 69 3c 4b |"../....;.-".i........| -000001c0 44 b6 de 0e 35 e1 b7 f6 ca 73 f8 6f f4 5a 21 db |D...5....s.o.Z!.| -000001d0 d6 f8 04 88 4e d6 04 7c 67 93 22 9a ff d0 0e 79 |....N..|g."....y| -000001e0 e6 cb b2 03 b9 f2 46 27 a3 1a 89 2e 8f 46 4f c5 |......F'.....FO.| -000001f0 4a ad 09 e7 79 38 a4 84 43 19 c9 1f 62 a0 5a 4a |J...y8..C...b.ZJ| -00000200 fa e4 98 14 e7 34 a6 3f 07 93 ab 6a fb 1c 3e 1f |.....4.?...j..>.| -00000210 a2 82 0a 42 43 d7 ef e7 aa fa 42 e0 be a1 dd 4e |...BC.....B....N| -00000220 2e 9e 49 da 81 da bc 5f 40 fa f8 00 99 19 d0 13 |..I...._@.......| -00000230 50 77 8b c5 69 f0 ec 7c bd 2d 9e c5 66 16 56 ca |Pw..i..|.-..f.V.| -00000240 bd 51 67 7b 87 5e 1f 4d 21 05 30 72 ac a8 ab 13 |.Qg{.^.M!.0r....| -00000250 12 dd 4c f7 e0 cc 95 c3 3e f0 94 95 40 ea c5 f1 |..L.....>...@...| -00000260 31 f9 53 32 40 64 5f c8 29 52 7a d6 22 5c 2d e8 |1.S2@d_.)Rz."\-.| -00000270 f9 eb f8 b9 e6 66 09 48 ad ed 73 6a 42 bc a8 7c |.....f.H..sjB..|| -00000280 d6 f9 62 45 25 f6 bf 8a 56 13 b4 50 cb 1b 5e 8b |..bE%...V..P..^.| -00000290 92 f3 9d 50 fc 7d 3c e4 b1 55 ae b2 3f 6a a8 a2 |...P.}<..U..?j..| -000002a0 f1 dd 83 9a 97 0e 3f 93 a9 6d 94 e5 cc a9 53 14 |......?..m....S.| -000002b0 24 44 80 28 a2 6a 21 57 07 63 96 78 3f 05 40 7d |$D.(.j!W.c.x?.@}| -000002c0 be 83 b2 b8 b3 0a 58 a7 50 29 dc bb b1 7f c6 c7 |......X.P)......| -000002d0 4b 5a ff 95 4a c8 50 0b 8e 44 ec 9b 0f 95 ac 8f |KZ..J.P..D......| -000002e0 f9 b3 19 d0 aa a6 67 f8 ce dc 67 34 0e c9 98 98 |......g...g4....| -000002f0 82 b1 54 4a a0 0e 02 d7 02 d3 36 06 4d 51 6f e4 |..TJ......6.MQo.| -00000300 f5 68 ff 4d 8f 00 94 a6 6b 6c 33 41 31 1a 9e 2c |.h.M....kl3A1..,| -00000310 f5 df 4a 43 b7 00 01 5b 6e 59 af 9c 9f bb c5 37 |..JC...[nY.....7| -00000320 22 32 35 25 bf 69 0a 9d 75 7e aa 19 b9 4e b1 17 |"25%.i..u~...N..| -00000330 cb f8 b5 8f 0f 81 9c df b1 ce a0 5b f2 ed df 20 |...........[... | -00000340 5a bd 8a 88 b1 17 03 03 00 99 15 09 f2 8d 63 c0 |Z.............c.| -00000350 f2 00 9f e8 1a d3 0f cc 35 0b ce eb 3c 45 87 59 |........5...Y| +00000220 b7 40 13 8e a4 dd 16 57 d1 8e 2b e3 40 57 eb b0 |.@.....W..+.@W..| +00000230 10 03 43 4a 30 0c e7 7f df 33 66 40 13 c7 7c ca |..CJ0....3f@..|.| +00000240 fc 71 e4 75 8d 78 09 05 70 34 80 a9 27 6a a1 1b |.q.u.x..p4..'j..| +00000250 6d 7e a1 60 81 70 52 c2 1b f6 f3 f0 92 3c 50 45 |m~.`.pR.......U...i.B.| +00000410 d3 38 62 a5 95 e2 a4 35 03 43 04 c7 6e |.8b....5.C..n| >>> Flow 3 (client to server) -00000000 14 03 03 00 01 01 17 03 03 02 11 7e e6 cb d5 bf |...........~....| -00000010 e1 5f 0a a5 6f 08 47 a4 27 a0 a0 2d 8e 6b 56 c6 |._..o.G.'..-.kV.| -00000020 2e d4 7d 3d 83 f0 25 31 59 9d e5 61 a0 95 21 2e |..}=..%1Y..a..!.| -00000030 f8 39 8c 16 4b 6e d9 e0 19 23 05 b0 6c 89 2c f2 |.9..Kn...#..l.,.| -00000040 e2 60 fb 83 99 2b 33 37 38 b0 85 67 cf 91 5f 22 |.`...+378..g.._"| -00000050 32 8b 10 f6 0b 2b 0d 4a 18 32 e7 41 fc 07 58 54 |2....+.J.2.A..XT| -00000060 d1 e2 6e da bb f7 4a 45 60 34 02 01 95 5e b3 4f |..n...JE`4...^.O| -00000070 0a df 33 d6 07 06 fc 20 5a 97 2f b8 bf 66 23 40 |..3.... Z./..f#@| -00000080 32 24 0d f5 c8 a2 aa e4 6a 85 21 d5 a3 95 a8 3b |2$......j.!....;| -00000090 8f 6a 43 5c 96 64 80 ef 04 ed a4 10 2f e4 a8 8d |.jC\.d....../...| -000000a0 ff fb 77 53 28 30 cd ca df 8e 25 08 51 ee 56 b8 |..wS(0....%.Q.V.| -000000b0 3a ae 2f 27 a4 4a 71 9e 77 cc 70 af 62 d1 a7 2f |:./'.Jq.w.p.b../| -000000c0 2b 2f 98 2f e5 62 b5 3b 65 b6 2e a5 a5 19 1f c2 |+/./.b.;e.......| -000000d0 a9 ef d8 2a 95 25 fc 10 32 31 da 29 bf 7e 58 d0 |...*.%..21.).~X.| -000000e0 b5 2f 62 bf ed 57 c8 b4 55 85 29 66 07 52 6f 25 |./b..W..U.)f.Ro%| -000000f0 02 2b 98 22 a5 e8 41 50 de f5 e3 e9 ce 60 f2 af |.+."..AP.....`..| -00000100 b3 c8 80 f1 27 2a 04 7a 1f 3b 13 0f 76 ec 6a 74 |....'*.z.;..v.jt| -00000110 ad a9 8f e9 0d 67 9d 1c a3 54 b3 14 a0 5c 36 80 |.....g...T...\6.| -00000120 a7 be 7f 2b d1 89 c0 19 3f 25 c6 7a fd 04 44 c2 |...+....?%.z..D.| -00000130 18 75 a9 44 7b cc 20 2b f3 6a 9a e1 cc 4f aa 76 |.u.D{. +.j...O.v| -00000140 e2 0a 45 75 81 0d d7 72 a1 e7 b2 82 02 77 45 e9 |..Eu...r.....wE.| -00000150 f8 07 93 8b e5 79 c2 06 65 52 a5 0e 13 73 a7 f6 |.....y..eR...s..| -00000160 be 85 5c 00 af 90 ed 83 3f b4 53 68 cf 0b b9 a6 |..\.....?.Sh....| -00000170 06 43 3c 7a 15 6a b1 74 be af 70 3b fa 70 f3 4b |.C....{E.R$| -00000310 17 03 03 00 13 3b 43 97 33 75 c2 b6 9a f7 cd 96 |.....;C.3u......| -00000320 e3 67 b7 2d cf ac d8 0a |.g.-....| +00000000 14 03 03 00 01 01 17 03 03 02 11 ee 25 34 95 80 |............%4..| +00000010 b9 4f 23 e2 2b ed 34 ad c8 35 e2 d1 4d 99 e1 15 |.O#.+.4..5..M...| +00000020 5a 9a 39 79 80 1e ec 0d 24 3b 07 d8 9d e6 0c 82 |Z.9y....$;......| +00000030 5b 42 f3 37 66 6d 41 8a 0f f8 7c 53 8d 5d 5a c2 |[B.7fmA...|S.]Z.| +00000040 9e 7f 5e 54 1c 36 85 64 fe f3 4f b3 36 92 f1 fd |..^T.6.d..O.6...| +00000050 08 73 22 7a 20 37 f9 d1 1e 16 21 7e ea 4f 6a cb |.s"z 7....!~.Oj.| +00000060 89 19 13 4b 1a 50 49 a9 fe a6 eb 12 ac 0e 78 dc |...K.PI.......x.| +00000070 b8 02 d4 35 0d 2f 46 f2 97 74 2c f9 61 eb 03 f4 |...5./F..t,.a...| +00000080 4e f7 98 69 46 ff 78 e1 9f e9 89 27 8e 83 b3 2f |N..iF.x....'.../| +00000090 ff 24 26 41 ad 6a dd 71 d9 b9 05 56 ea 73 d8 e9 |.$&A.j.q...V.s..| +000000a0 11 fb 0f 64 b6 c0 57 90 6b 5b e7 7c 8d a2 40 b2 |...d..W.k[.|..@.| +000000b0 8a 18 87 1a ec 45 cc 68 df 89 c6 93 32 2f de 7a |.....E.h....2/.z| +000000c0 72 ce ae 75 bb a8 37 f9 8d 75 87 e4 12 6a 59 ad |r..u..7..u...jY.| +000000d0 a8 3b 26 27 ab c4 1e e2 ba 42 11 6a f2 ba eb 9b |.;&'.....B.j....| +000000e0 3b 93 c5 9a 3d e2 20 28 92 35 60 86 27 95 c5 4a |;...=. (.5`.'..J| +000000f0 e3 4d b2 35 6d 64 2f 08 7d d8 c0 c5 ef 3f e0 24 |.M.5md/.}....?.$| +00000100 64 37 d7 a6 13 6d ee ee 7f dc b8 80 5d 95 d3 84 |d7...m......]...| +00000110 8a 4a 30 59 d9 9f 23 0f c4 ab d7 6b cc 26 2c 4b |.J0Y..#....k.&,K| +00000120 b8 7f f1 f3 eb d6 10 c5 50 22 a3 45 2d 20 a4 39 |........P".E- .9| +00000130 99 d7 1b ae 12 83 bf 75 52 56 f1 17 ee 1c e4 4f |.......uRV.....O| +00000140 ef b5 c2 cb 64 28 48 7a 69 d6 18 33 83 e2 70 ed |....d(Hzi..3..p.| +00000150 65 36 6c 4d 91 1f 61 88 d4 55 3a 09 cf d6 45 88 |e6lM..a..U:...E.| +00000160 82 69 ce bd 63 63 3e 43 68 6b b9 6e ed 2d 4f 13 |.i..cc>Chk.n.-O.| +00000170 89 3d d3 f4 05 19 b4 35 b1 33 84 d9 71 cc 7f 03 |.=.....5.3..q...| +00000180 2a 77 32 be c3 ab 2d db aa c7 99 b0 a0 29 a7 d7 |*w2...-......)..| +00000190 9c f6 84 8d 4f 99 79 c0 52 2b 2a f1 a8 f1 85 bc |....O.y.R+*.....| +000001a0 b3 5f 3f de b8 df e2 e0 ac f4 f1 11 c4 c5 c5 45 |._?............E| +000001b0 24 19 0c 8f fd ca e2 80 f8 91 2d 1c cc 5e c8 8b |$.........-..^..| +000001c0 c1 49 96 d5 3e 17 e3 cd a0 38 8d aa 20 d2 12 81 |.I..>....8.. ...| +000001d0 ff 11 a8 e6 93 77 34 a5 ab 40 a2 75 01 f8 c5 f3 |.....w4..@.u....| +000001e0 0d e0 cc 7b b8 d1 0f d6 0d 34 a1 58 67 47 8e 47 |...{.....4.XgG.G| +000001f0 45 89 74 de 77 3c 65 d2 5e 60 35 a1 a7 85 0a 82 |E.t.w].....D...B....| +00000310 17 03 03 00 13 ee 2f 0d a2 33 1f 9a ca 26 43 e8 |....../..3...&C.| +00000320 8b 1d 41 0d 11 c9 2d 8a |..A...-.| diff --git a/src/crypto/tls/testdata/Client-TLSv13-ECDSA b/src/crypto/tls/testdata/Client-TLSv13-ECDSA index 96c8e8c1ee..098f3ab3c9 100644 --- a/src/crypto/tls/testdata/Client-TLSv13-ECDSA +++ b/src/crypto/tls/testdata/Client-TLSv13-ECDSA @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,80 +7,80 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 7a 02 00 00 76 03 03 05 cf 30 74 87 |....z...v....0t.| -00000010 37 6e f2 12 86 19 bd ec 54 21 42 4c 2d 1a 71 4f |7n......T!BL-.qO| -00000020 fe de 90 2b a0 c4 73 d1 3e 57 40 20 00 00 00 00 |...+..s.>W@ ....| +00000000 16 03 03 00 7a 02 00 00 76 03 03 e8 ec ee 61 3e |....z...v.....a>| +00000010 c1 43 87 6d f1 61 ed d2 41 1f 7d d7 b7 c0 92 fd |.C.m.a..A.}.....| +00000020 34 17 85 7b c7 ff c4 56 dd 90 bd 20 00 00 00 00 |4..{...V... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000040 00 00 00 00 00 00 00 00 00 00 00 00 13 01 00 00 |................| -00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 16 |..+.....3.$... .| -00000060 4c 6f 4f d1 32 2e 2e b5 4c 48 29 0f cb 65 23 b2 |LoO.2...LH)..e#.| -00000070 ab 2e 41 d8 c4 70 30 88 4f a1 d9 bb 52 e8 35 14 |..A..p0.O...R.5.| -00000080 03 03 00 01 01 17 03 03 00 17 a7 86 3a 06 dc db |............:...| -00000090 c6 bc d5 8e 55 0f 93 b5 fc f4 d4 17 40 dc 3e d7 |....U.......@.>.| -000000a0 16 17 03 03 02 22 b3 07 3f ab 52 ac c4 0d 50 75 |....."..?.R...Pu| -000000b0 18 37 a5 f5 4b ba e7 e7 c0 30 3c b4 3f e4 11 2d |.7..K....0<.?..-| -000000c0 d1 33 07 a7 9d 41 47 61 40 ec db bb dd 7c 89 7b |.3...AGa@....|.{| -000000d0 e4 3e db 5a 30 c6 a3 74 7c 7a b1 53 d2 0a 48 65 |.>.Z0..t|z.S..He| -000000e0 2c f6 d9 ca b4 f4 88 d2 d8 7e a6 ce b0 30 c6 32 |,........~...0.2| -000000f0 36 fa 73 b2 0e 39 8e d5 af 41 ab 88 8c 3d d1 56 |6.s..9...A...=.V| -00000100 2e 7b 7d 93 77 c6 51 66 d6 ed 20 52 a9 b1 98 ae |.{}.w.Qf.. R....| -00000110 c9 04 a5 1a 97 36 91 b9 38 39 7c 7c 8c bb 0f 37 |.....6..89||...7| -00000120 e2 37 9c c0 49 fb a7 59 7d f2 0f 97 ee 15 9c e9 |.7..I..Y}.......| -00000130 5a 9b 6d fd 7e 36 61 fb 30 69 ea 2f e8 37 70 b0 |Z.m.~6a.0i./.7p.| -00000140 b5 65 1c 05 25 7a 32 36 6e 24 c9 e2 ca 6c c2 82 |.e..%z26n$...l..| -00000150 d0 5b 1f 85 ba 1b f0 b2 49 71 2a bd 8d ae 16 95 |.[......Iq*.....| -00000160 2c b9 ab ce f1 05 47 59 e5 65 02 57 34 85 df 26 |,.....GY.e.W4..&| -00000170 cf 97 94 29 09 4d aa a6 dd 18 ef 9d 15 38 10 90 |...).M.......8..| -00000180 ea a3 76 b7 25 c8 9c cd b6 1e 88 a6 4e b8 b1 34 |..v.%.......N..4| -00000190 70 1f 7b a1 83 e2 2e 3f d8 e8 f2 2e 74 f1 93 bc |p.{....?....t...| -000001a0 ee 80 8a c3 d0 e0 d2 7a 16 5a 97 a5 57 1c c6 37 |.......z.Z..W..7| -000001b0 ba 8a cd 07 8f ca 93 3a d7 57 82 be 69 1d 83 5e |.......:.W..i..^| -000001c0 62 0e 65 f3 7f 3b 28 8f 51 f0 96 da 55 4c f5 55 |b.e..;(.Q...UL.U| -000001d0 60 59 7c c4 61 1f 1d 50 38 09 e0 7b 90 ed b9 35 |`Y|.a..P8..{...5| -000001e0 4d 70 37 f8 c8 59 09 9e 77 02 27 cc 5a cc 7c 8d |Mp7..Y..w.'.Z.|.| -000001f0 a8 cc 83 9d 3d dc e1 85 89 98 65 e9 aa 16 f9 e9 |....=.....e.....| -00000200 85 f9 ec 6d 28 8d 20 4b 33 01 2f df fb 7d 6c 6e |...m(. K3./..}ln| -00000210 b8 28 d4 2e 72 1d af 66 15 1a ff ba bc 68 31 cb |.(..r..f.....h1.| -00000220 3e c8 62 d3 3e fd e8 ce 90 bc 30 36 31 e2 6d 47 |>.b.>.....061.mG| -00000230 06 d4 df ad e8 51 3d 61 b7 8f b6 16 d5 e1 81 ff |.....Q=a........| -00000240 c7 ad 99 04 e1 af d0 a8 37 5e 57 44 93 7b e0 6d |........7^WD.{.m| -00000250 c2 23 f2 b7 7d 14 41 c6 ab 17 c8 3b de 48 20 73 |.#..}.A....;.H s| -00000260 78 78 78 4a c4 1f ea 55 11 6e dc 55 48 5d 9b f1 |xxxJ...U.n.UH]..| -00000270 33 84 17 35 cc b9 8d d4 6e 86 87 f1 c3 ab 31 46 |3..5....n.....1F| -00000280 79 39 5f 41 19 40 7b 54 44 79 21 25 06 a1 ca 36 |y9_A.@{TDy!%...6| -00000290 e0 9f d6 70 7c 3f 9f 5c 17 29 cc a3 ed a2 cd 6f |...p|?.\.).....o| -000002a0 12 19 d9 89 aa a1 fa 51 53 98 9f 34 d2 75 12 22 |.......QS..4.u."| -000002b0 ea 63 85 3c 32 c8 cb e2 74 15 13 55 61 a1 80 1f |.c.<2...t..Ua...| -000002c0 85 5e 45 95 9c 92 4a 8d 17 03 03 00 a4 e8 50 d5 |.^E...J.......P.| -000002d0 71 f4 21 a6 79 63 11 6a 8e 5e 3e 5d 96 63 4e 42 |q.!.yc.j.^>].cNB| -000002e0 08 27 34 b7 4c 36 8a fe b1 ed f2 f1 3c 72 00 99 |.'4.L6.......D..h.S.qA| -000003a0 61 17 e3 da 92 ff 5a 8f 21 06 f5 |a.....Z.!..| +00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 3f |..+.....3.$... ?| +00000060 be 50 e7 f1 b0 30 60 dc 92 50 b8 01 4a d1 3e ff |.P...0`..P..J.>.| +00000070 6e f0 bd e1 17 44 d8 19 1b c6 63 43 e5 c1 58 14 |n....D....cC..X.| +00000080 03 03 00 01 01 17 03 03 00 17 c0 b7 da 01 3e 64 |..............>d| +00000090 6b 57 ba 21 12 79 42 8c 63 1f 45 d1 f2 10 fe 98 |kW.!.yB.c.E.....| +000000a0 b6 17 03 03 02 22 90 87 e6 c3 ba 92 41 a2 96 00 |....."......A...| +000000b0 c7 92 97 ab 4b 80 02 bb 02 83 19 f3 f6 36 d5 23 |....K........6.#| +000000c0 3c c7 bd fb 97 67 86 cb 70 4c 60 9e 6c d4 7a f3 |<....g..pL`.l.z.| +000000d0 03 a5 f1 09 d5 7e 07 74 f3 c8 e4 b8 da 44 a3 94 |.....~.t.....D..| +000000e0 ee 4e 4a 7b ab 4e 92 03 49 04 4e cf 1b b3 0d 91 |.NJ{.N..I.N.....| +000000f0 0f 98 51 5c 56 4d d3 a8 75 4b e0 96 d9 9e dd c8 |..Q\VM..uK......| +00000100 81 c4 37 a0 c6 c9 ec 0f e0 f1 ed 29 ff 5a a2 d4 |..7........).Z..| +00000110 af 61 f7 b1 d5 ee e7 1d 7a e1 7f 33 8d 75 e6 9d |.a......z..3.u..| +00000120 bc 78 56 eb c5 89 d3 19 86 81 09 e1 ee 10 03 7c |.xV............|| +00000130 a4 1b 78 17 51 a3 53 b4 67 5d 29 49 21 b2 51 7b |..x.Q.S.g])I!.Q{| +00000140 f5 dc fd 60 11 ee 8f 50 ea 28 b5 db 57 04 7e 3b |...`...P.(..W.~;| +00000150 ad 6f 29 d4 22 f3 a1 4b 52 ac b8 2b 30 0c 67 16 |.o)."..KR..+0.g.| +00000160 e3 e0 7d a3 03 66 c4 39 70 8e c7 06 cf d2 6f 98 |..}..f.9p.....o.| +00000170 c1 c9 f6 a9 6a 89 b4 3e 38 97 ae e4 f2 97 a4 6f |....j..>8......o| +00000180 e2 05 f8 e9 53 c9 ae f7 87 c3 0f 68 75 9e 07 e9 |....S......hu...| +00000190 45 e9 0d 03 7e c8 79 56 30 77 e3 ea db 92 a2 f8 |E...~.yV0w......| +000001a0 5e 5b ab 77 0d 9b bc 5f 51 40 6c 1b 0d ef b4 cf |^[.w..._Q@l.....| +000001b0 4a 3d a6 8c b6 ab ce 4f 6c 08 0e 23 f0 2a 56 07 |J=.....Ol..#.*V.| +000001c0 f5 88 68 c3 0c fd 63 9b e4 56 12 a6 f5 0a ed 54 |..h...c..V.....T| +000001d0 40 30 ee 36 72 5d ca bb 5a 52 d3 84 14 c1 7e e4 |@0.6r]..ZR....~.| +000001e0 f8 fb e9 c8 10 16 54 16 1f 72 99 8c 7a 69 87 ca |......T..r..zi..| +000001f0 62 53 dc cb a4 26 73 90 fb 11 3c 3c 9f 94 65 cb |bS...&s...<<..e.| +00000200 28 94 65 ca 56 45 a8 c1 ec 08 31 dd eb bc 17 71 |(.e.VE....1....q| +00000210 cd 65 04 95 2e e7 e0 fb 73 fe 70 db 70 31 93 90 |.e......s.p.p1..| +00000220 cf 47 07 ec 92 98 c1 da fc 13 f8 8a 28 4e e8 80 |.G..........(N..| +00000230 a8 96 c2 e2 a6 cd df d4 7f 46 4a 3b e9 dd cf a5 |.........FJ;....| +00000240 75 d5 cc 67 35 81 d5 2e e4 68 c4 56 1a 46 33 5a |u..g5....h.V.F3Z| +00000250 f2 79 32 6b 4e a0 6b 76 53 53 04 73 86 fd bd e2 |.y2kN.kvSS.s....| +00000260 f7 f8 14 0f 0a a8 10 6d a1 bf f8 d0 27 8d cb e8 |.......m....'...| +00000270 a5 51 16 4b 11 a2 8a 6f 22 c5 7c bc c5 7a 0b df |.Q.K...o".|..z..| +00000280 70 1d c4 93 ec 87 78 12 77 e3 85 5a 3c 29 d8 f7 |p.....x.w..Z<)..| +00000290 ab a4 c6 10 50 ed d5 2a 3f b1 84 73 1e 7f 99 eb |....P..*?..s....| +000002a0 31 9c 2c d2 6a 80 4a 5e 7c aa 64 e7 83 df a9 17 |1.,.j.J^|.d.....| +000002b0 c3 4c 13 c8 c1 d7 1b f5 be c9 00 cf ec 7e a5 ab |.L...........~..| +000002c0 89 9c b0 72 fd f0 cb 54 17 03 03 00 a4 28 34 92 |...r...T.....(4.| +000002d0 a7 52 92 5d a0 99 6b e6 22 c5 f6 76 86 1b 0b d6 |.R.]..k."..v....| +000002e0 b7 a8 67 c1 04 b8 1c ac 7b 02 f5 0a 20 41 dd 43 |..g.....{... A.C| +000002f0 25 cc 01 f9 dc 6e c7 f7 4f 67 dd b3 54 81 80 d5 |%....n..Og..T...| +00000300 6d 45 00 42 d0 49 23 d5 12 33 e4 5f fd 58 79 81 |mE.B.I#..3._.Xy.| +00000310 e3 df 67 6d 03 44 58 0f 76 38 c3 de ed 26 90 29 |..gm.DX.v8...&.)| +00000320 45 92 ce 3b fa ea 98 da ea a2 d2 cc c6 0e a8 38 |E..;...........8| +00000330 c1 2d 92 8c 48 79 58 25 75 fd 2d 6d ef 06 32 1a |.-..HyX%u.-m..2.| +00000340 bb 09 fa 66 bc 06 9d c5 fb 46 94 5e b1 73 8d 05 |...f.....F.^.s..| +00000350 e1 90 24 c3 eb 72 7f a8 b7 12 a3 3c 11 29 ea 80 |..$..r.....<.)..| +00000360 10 4e 19 40 25 0b c9 34 70 99 e9 1a 60 17 bb 5b |.N.@%..4p...`..[| +00000370 1a 17 03 03 00 35 91 4b 45 15 d5 2e 33 a7 ba 9b |.....5.KE...3...| +00000380 64 20 bb 72 28 06 27 37 2f ac c9 c0 9e b9 d8 f3 |d .r(.'7/.......| +00000390 86 36 d2 7d df c2 4d 95 a5 a4 4b 64 5f 1a 83 67 |.6.}..M...Kd_..g| +000003a0 f6 6a 21 ff d0 b4 1c 65 23 62 ac |.j!....e#b.| >>> Flow 3 (client to server) -00000000 14 03 03 00 01 01 17 03 03 00 35 a3 d4 49 e5 82 |..........5..I..| -00000010 8d 09 1b 33 8a 0d 9b 4f 8d a8 95 66 0e 50 e0 85 |...3...O...f.P..| -00000020 a7 0d f2 09 f6 05 44 f5 59 c3 48 92 9d 80 a7 db |......D.Y.H.....| -00000030 d0 18 7e 7b 5c fa 31 bf c5 94 71 60 cf 0c d1 c7 |..~{\.1...q`....| -00000040 17 03 03 00 17 f7 61 d6 c4 fa 7f 34 e7 cf cb b0 |......a....4....| -00000050 9f 5d 13 25 8c 75 6c 1a 87 91 44 84 17 03 03 00 |.].%.ul...D.....| -00000060 13 89 68 71 8d be 27 8e 31 f5 ca 7a 4e c5 b6 38 |..hq..'.1..zN..8| -00000070 b2 68 b8 0d |.h..| +00000000 14 03 03 00 01 01 17 03 03 00 35 10 bd 5d 23 36 |..........5..]#6| +00000010 58 43 f4 bb 5e 4e ee 43 fd 0e a1 d9 de 81 99 54 |XC..^N.C.......T| +00000020 de 6e 82 33 71 8a 45 a7 35 f1 cd fb 5f bf 46 20 |.n.3q.E.5..._.F | +00000030 a5 79 d6 87 aa f4 29 51 02 f5 4e 69 ef a5 d7 d6 |.y....)Q..Ni....| +00000040 17 03 03 00 17 21 1f 90 0b 01 63 89 6a af 53 72 |.....!....c.j.Sr| +00000050 51 c0 11 01 7b 09 dd 40 82 dd e1 32 17 03 03 00 |Q...{..@...2....| +00000060 13 93 5d c1 19 16 5c 17 1a 7b 92 a0 9b f5 14 57 |..]...\..{.....W| +00000070 85 39 4a ac |.9J.| diff --git a/src/crypto/tls/testdata/Client-TLSv13-Ed25519 b/src/crypto/tls/testdata/Client-TLSv13-Ed25519 new file mode 100644 index 0000000000..0b4a17af3a --- /dev/null +++ b/src/crypto/tls/testdata/Client-TLSv13-Ed25519 @@ -0,0 +1,68 @@ +>>> Flow 1 (client to server) +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| +00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| +00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| +00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| +00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 32 cc a8 |.............2..| +00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| +00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| +00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| +00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| +>>> Flow 2 (server to client) +00000000 16 03 03 00 7a 02 00 00 76 03 03 a8 21 4e 51 6a |....z...v...!NQj| +00000010 ce ba 17 cc 2d 25 b3 31 59 6a 3f 81 eb e6 ac a0 |....-%.1Yj?.....| +00000020 91 d9 ef 76 a1 5f bb 63 ab 2c 6b 20 00 00 00 00 |...v._.c.,k ....| +00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| +00000040 00 00 00 00 00 00 00 00 00 00 00 00 13 01 00 00 |................| +00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 81 |..+.....3.$... .| +00000060 4c a8 07 aa 6b 4a f9 44 77 78 a9 57 d0 07 55 07 |L...kJ.Dwx.W..U.| +00000070 9a c2 8e 33 bf c4 09 ee 49 51 5c fe f1 7b 30 14 |...3....IQ\..{0.| +00000080 03 03 00 01 01 17 03 03 00 17 5a 22 a1 07 01 ea |..........Z"....| +00000090 97 bd 5a 59 3a 21 de 9c 45 0c 41 ff 34 45 35 ab |..ZY:!..E.A.4E5.| +000000a0 25 17 03 03 01 50 a1 8c 19 e7 0c 69 d3 e0 f6 53 |%....P.....i...S| +000000b0 95 15 13 4c e3 c3 3f 35 d9 73 c9 fe 24 b0 14 5f |...L..?5.s..$.._| +000000c0 b6 9e 94 20 cf 80 f7 88 7c 0f be 4c 70 16 00 2a |... ....|..Lp..*| +000000d0 55 02 aa a9 4b 7f a7 a5 b8 46 09 9e 18 78 78 66 |U...K....F...xxf| +000000e0 22 c2 31 19 12 f7 e4 7e f3 26 39 7d cd 5e 74 24 |".1....~.&9}.^t$| +000000f0 fb 75 7d b7 2c b5 fb e0 49 bd da 96 e1 c3 63 8f |.u}.,...I.....c.| +00000100 e3 28 43 bb 32 a7 fd 9c ab 54 ba ce 07 4a 23 35 |.(C.2....T...J#5| +00000110 a4 3a ff 43 40 19 ef 38 07 02 ba d6 c4 f0 bf 63 |.:.C@..8.......c| +00000120 aa b3 ea 55 d0 e1 a9 f3 cb 04 6b 1b 8d 35 3a f8 |...U......k..5:.| +00000130 0b 1c 40 99 fe b0 04 5f d1 5b 3f 4b be fe b5 96 |..@...._.[?K....| +00000140 f0 49 3d bf a5 92 f3 bd a6 4c 47 24 f8 b5 7c 45 |.I=......LG$..|E| +00000150 47 85 9b 08 a1 da 51 7a ce 3f 32 66 de 89 c0 c3 |G.....Qz.?2f....| +00000160 ac da 73 0d 15 14 18 e6 a0 7d 07 26 44 df 55 b7 |..s......}.&D.U.| +00000170 6e 4e fa c0 f5 5e 42 3a d9 29 d3 1d e6 cf 3c 8c |nN...^B:.)....<.| +00000180 6d c1 d9 f9 04 f0 57 dc 47 4e d1 e2 a1 f1 a1 c9 |m.....W.GN......| +00000190 2e da 97 4d 65 65 04 54 e7 80 f1 88 b2 34 26 61 |...Mee.T.....4&a| +000001a0 77 8a 1f bb 82 7f 4b ce b3 5a 55 60 e1 3a ef 95 |w.....K..ZU`.:..| +000001b0 bd 34 fc ef 2b 18 4b bb 8a cf ba 3a 69 43 f4 59 |.4..+.K....:iC.Y| +000001c0 98 a1 95 a3 22 f6 b5 1a 84 83 cf cb 90 eb 28 29 |....".........()| +000001d0 b3 84 e1 0d 37 9e 98 96 91 73 f1 7f d7 9b 71 38 |....7....s....q8| +000001e0 6e bc 2e 60 2d 27 0c 18 fd 2a b8 76 01 33 2f 95 |n..`-'...*.v.3/.| +000001f0 6e 0b bf 2b 26 5e 17 03 03 00 59 ed 43 2f e8 df |n..+&^....Y.C/..| +00000200 f3 2f 91 f3 dc 1b aa ff d3 3b 28 1f 78 21 fb e2 |./.......;(.x!..| +00000210 7d 6e 03 09 98 c1 23 09 d7 45 da b8 e0 5a e5 27 |}n....#..E...Z.'| +00000220 38 9a 2f da 9b d3 04 35 f5 b9 31 b0 c0 1f 8a 1e |8./....5..1.....| +00000230 d8 8a 19 f1 38 af a6 74 ac e5 b4 0d 45 83 b4 59 |....8..t....E..Y| +00000240 83 42 97 14 23 55 71 ef 66 8c 35 69 3f 2c 88 63 |.B..#Uq.f.5i?,.c| +00000250 8d 3b 05 fe 17 03 03 00 35 47 82 ec 22 f4 86 6a |.;......5G.."..j| +00000260 b7 c1 d8 64 3b 42 f4 ca 5c 3d ba a3 6a ea 77 6a |...d;B..\=..j.wj| +00000270 d6 52 e3 b0 42 fb c2 f1 2c b1 ef 44 ed 11 29 6d |.R..B...,..D..)m| +00000280 2b 6f 13 0f 42 48 a0 2e 5b ba a1 93 6b de |+o..BH..[...k.| +>>> Flow 3 (client to server) +00000000 14 03 03 00 01 01 17 03 03 00 35 11 45 8f b2 e0 |..........5.E...| +00000010 87 3d 09 94 93 16 19 04 3d 84 6c e5 14 5e c6 8b |.=......=.l..^..| +00000020 73 1a 53 4c d0 f4 11 27 0c 0d 05 c7 9d ba d0 04 |s.SL...'........| +00000030 37 ed 8b 8a 65 34 54 b1 07 36 92 8c 8c a8 30 b7 |7...e4T..6....0.| +00000040 17 03 03 00 17 ea fc b8 84 8d f0 9d 8e 1c 2c 65 |..............,e| +00000050 10 a8 69 7f dd 3c a4 80 45 5d c3 38 17 03 03 00 |..i..<..E].8....| +00000060 13 15 4b b7 23 2f 55 b0 ae d3 3f f6 68 c9 b2 ef |..K.#/U...?.h...| +00000070 d7 e2 18 49 |...I| diff --git a/src/crypto/tls/testdata/Client-TLSv13-ExportKeyingMaterial b/src/crypto/tls/testdata/Client-TLSv13-ExportKeyingMaterial index a30a26249b..b30641131e 100644 --- a/src/crypto/tls/testdata/Client-TLSv13-ExportKeyingMaterial +++ b/src/crypto/tls/testdata/Client-TLSv13-ExportKeyingMaterial @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,84 +7,84 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 7a 02 00 00 76 03 03 fe a9 2f 00 0c |....z...v..../..| -00000010 0b 91 a0 86 1d 9b 21 19 35 a1 07 9e 36 1d d2 82 |......!.5...6...| -00000020 51 b7 d2 3e a6 42 ce 6f 86 e9 69 20 00 00 00 00 |Q..>.B.o..i ....| +00000000 16 03 03 00 7a 02 00 00 76 03 03 6d fb 70 07 b4 |....z...v..m.p..| +00000010 2d 14 d1 d1 88 17 6a a3 b1 c1 e7 23 4b 06 c4 fa |-.....j....#K...| +00000020 4a 0e e1 2c ce 5a d5 c7 8c ab f2 20 00 00 00 00 |J..,.Z..... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000040 00 00 00 00 00 00 00 00 00 00 00 00 13 01 00 00 |................| -00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 20 |..+.....3.$... | -00000060 8c d2 dd d7 17 cc 15 f7 0b dc 75 48 d0 82 54 36 |..........uH..T6| -00000070 b0 f6 ae fe 29 7b 0d af 9f 06 4e 58 8c 66 10 14 |....){....NX.f..| -00000080 03 03 00 01 01 17 03 03 00 17 8c ef b2 76 05 ee |.............v..| -00000090 eb e8 55 a3 56 d6 4a b7 d7 10 8e f0 f9 7e 49 eb |..U.V.J......~I.| -000000a0 fd 17 03 03 02 6d c2 33 a8 17 70 1e 66 4c b8 32 |.....m.3..p.fL.2| -000000b0 99 41 79 b8 85 98 c8 f7 f4 c6 25 41 9b 30 ea f5 |.Ay.......%A.0..| -000000c0 24 6c ad 7c b6 c1 c7 a6 d5 2c 0b d8 78 e0 ec df |$l.|.....,..x...| -000000d0 bb 8d ea 0a ff ba c9 aa ec 24 05 63 2a ff 13 37 |.........$.c*..7| -000000e0 5e fe c1 7b 6e c0 dd e1 09 c1 87 33 fc 18 90 28 |^..{n......3...(| -000000f0 5b b2 ba 7e 69 06 dc 8e ac c4 ca 08 84 aa df 0c |[..~i...........| -00000100 2a a7 74 46 e7 c8 db 23 96 67 95 f4 79 9b 6e 3d |*.tF...#.g..y.n=| -00000110 94 fc 80 07 d9 e7 cf 0d 31 27 84 08 66 23 2d 05 |........1'..f#-.| -00000120 64 2f 63 27 5c e2 1c 2e f7 6f 99 4f 59 4c f4 3d |d/c'\....o.OYL.=| -00000130 cf a9 ff 32 f4 6a 7d b4 c4 11 01 9d f2 8a ce da |...2.j}.........| -00000140 21 51 b0 99 0c a8 a6 fa 09 b1 c4 cf a9 84 96 7d |!Q.............}| -00000150 aa 80 b4 b3 c7 ed 70 08 1b 50 b9 07 a5 2c a0 21 |......p..P...,.!| -00000160 da 97 a7 5f 35 d4 55 24 8b 2d 14 85 0d 63 10 7f |..._5.U$.-...c..| -00000170 0b 22 03 a5 e3 26 e4 2b ca c4 54 39 4d 52 41 8b |."...&.+..T9MRA.| -00000180 8e b0 60 2f 61 f5 7f d2 62 2c a3 f9 f2 46 08 76 |..`/a...b,...F.v| -00000190 37 92 d0 bc 6c 0e 75 a2 f5 c1 f4 b3 7d f9 83 8e |7...l.u.....}...| -000001a0 bd 30 4f 04 77 98 b7 d0 e9 a0 19 4c 61 c1 58 09 |.0O.w......La.X.| -000001b0 04 82 60 38 55 51 c1 94 46 40 a2 12 68 0a 83 7b |..`8UQ..F@..h..{| -000001c0 30 71 a3 08 83 f7 67 86 df 44 df ea 6d 56 65 25 |0q....g..D..mVe%| -000001d0 16 55 5d cd 8a f4 03 10 86 1d 5a fd d8 2e 23 7e |.U].......Z...#~| -000001e0 34 77 b7 af 4b 2c 8a 36 ad 07 a5 5a 3b 39 c8 90 |4w..K,.6...Z;9..| -000001f0 4b 77 60 81 2e ac 51 37 09 ac c0 e7 6b 18 a5 76 |Kw`...Q7....k..v| -00000200 52 91 62 95 6d 1c 9d 8e 6c 03 f5 12 cd 80 7f 40 |R.b.m...l......@| -00000210 4e f3 e6 7d d2 f1 3d 94 a7 16 ec fc 0c c9 72 b9 |N..}..=.......r.| -00000220 ee 33 bb 76 d0 6d 27 3d 58 cd ed 34 60 f4 bb 23 |.3.v.m'=X..4`..#| -00000230 49 a8 8d 94 7c 46 85 04 65 26 c2 5e 4f 22 f6 7d |I...|F..e&.^O".}| -00000240 46 ae 1b 63 eb 6b 43 c5 64 fa 9d 43 86 e5 29 8f |F..c.kC.d..C..).| -00000250 98 20 9e 21 b2 f3 32 c9 82 75 4d 97 5e cf dd cb |. .!..2..uM.^...| -00000260 1d 6b 6e fc 8f 61 86 a9 71 12 96 e3 18 42 d3 28 |.kn..a..q....B.(| -00000270 f9 86 7e ab 90 9b f6 5c c2 46 fb 93 e6 51 7d f5 |..~....\.F...Q}.| -00000280 8a b2 e9 c6 e1 70 62 fa 08 e1 91 0b ee 89 12 01 |.....pb.........| -00000290 ca dd 25 56 8f 2d 45 0d a5 47 26 f0 a2 4d f5 4b |..%V.-E..G&..M.K| -000002a0 8b dd 6f ab 0f f1 5b 60 9c b0 dc 88 24 df 1c 5b |..o...[`....$..[| -000002b0 a9 90 66 44 e1 e1 6b 96 b5 3f e2 69 76 a7 84 d6 |..fD..k..?.iv...| -000002c0 2b 68 b0 f5 8a ba e7 83 83 88 45 78 2d e0 a4 82 |+h........Ex-...| -000002d0 74 53 4a cf 14 84 fa 49 78 ce 3b 9a 24 66 00 a9 |tSJ....Ix.;.$f..| -000002e0 5b 0b 83 20 fb 20 a8 20 45 10 53 76 7d ee b2 d6 |[.. . . E.Sv}...| -000002f0 af 33 f9 29 d0 f7 16 7e d6 59 b0 4a 06 ac d4 7d |.3.)...~.Y.J...}| -00000300 84 1d 50 64 d0 f8 67 65 54 2f a3 2c 50 9e 93 43 |..Pd..geT/.,P..C| -00000310 58 59 67 17 03 03 00 99 62 ac 15 76 89 cb 8d 67 |XYg.....b..v...g| -00000320 25 75 a7 57 b6 65 8c 73 24 a6 71 ba c4 75 ad f8 |%u.W.e.s$.q..u..| -00000330 2a a6 94 12 c2 8d ca 7e 1a 75 e4 21 da cb 1e 77 |*......~.u.!...w| -00000340 69 d0 e1 4b 25 46 ce 99 1b e0 10 9d 12 d6 16 62 |i..K%F.........b| -00000350 f9 42 3b b8 3a 7b 3a 11 1f d7 04 fe 88 0b 62 ba |.B;.:{:.......b.| -00000360 a9 d6 51 c4 f5 be d9 92 e6 d6 05 94 9b f9 76 0d |..Q...........v.| -00000370 ca da 55 45 e4 fe a9 f3 dc d5 08 db 50 7c 4a 7c |..UE........P|J|| -00000380 f1 9c a7 5d e6 0d f9 cf 32 67 c0 66 a6 85 26 8b |...]....2g.f..&.| -00000390 57 f0 2c 5e b7 7e c1 cb 3d 6c 23 e2 18 3e c2 67 |W.,^.~..=l#..>.g| -000003a0 97 23 3f 86 f2 38 b5 a7 df 98 68 57 89 a3 e4 86 |.#?..8....hW....| -000003b0 d7 17 03 03 00 35 4a d4 e1 fb d1 39 57 90 d1 19 |.....5J....9W...| -000003c0 b9 f2 1b 0b 1a 0d 8f fb 4b f3 f1 f8 31 d2 ac 3b |........K...1..;| -000003d0 25 ad e7 da 8a 78 ab 2a d6 97 9b 66 88 6a db ef |%....x.*...f.j..| -000003e0 bf b6 ed b9 8a 39 72 8c ea 8f 0d |.....9r....| +00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 4e |..+.....3.$... N| +00000060 fe 87 d7 81 71 25 ba 33 de 10 df 19 38 d8 af 43 |....q%.3....8..C| +00000070 58 3f 41 2e b9 b8 cb 1c 65 a7 cd 8d 00 b1 0e 14 |X?A.....e.......| +00000080 03 03 00 01 01 17 03 03 00 17 b3 63 09 54 ad 41 |...........c.T.A| +00000090 24 fe 2c 81 49 c8 86 88 c2 ad ba cd 45 77 51 c0 |$.,.I.......EwQ.| +000000a0 d5 17 03 03 02 6d 74 7d de 53 70 5c 11 d0 a7 68 |.....mt}.Sp\...h| +000000b0 8e 10 c9 cb cd 0c 25 ac 88 e7 17 54 8b 32 2c ee |......%....T.2,.| +000000c0 97 9c 3d f6 ce d1 83 70 ee c0 85 0c fc 61 ba db |..=....p.....a..| +000000d0 6d e0 04 26 6f b7 4e 44 4d 1c 5c 16 9a 57 4f e6 |m..&o.NDM.\..WO.| +000000e0 52 89 27 53 88 f8 93 91 ed b2 42 b4 4c f0 58 a3 |R.'S......B.L.X.| +000000f0 50 a7 af 2c 47 ac ad 8b 14 a0 9f d4 28 2e 7b 28 |P..,G.......(.{(| +00000100 8e ec d1 bb 7d d9 78 fb 24 82 9f 2a ac 4e 85 83 |....}.x.$..*.N..| +00000110 35 25 75 8f 9e 6d 4c 8a dd 6f 9f 9a 34 93 a2 9d |5%u..mL..o..4...| +00000120 d0 26 4c 7b a8 72 a3 12 b9 ef 6b c8 d0 4f 44 5b |.&L{.r....k..OD[| +00000130 dd f1 72 3a b4 5c 7e a8 8d d4 68 bc 6d 54 2c ee |..r:.\~...h.mT,.| +00000140 c1 f7 78 f1 15 cd 57 b5 54 89 08 f0 d8 56 ef 8d |..x...W.T....V..| +00000150 14 d1 e8 fd 83 bd ab 64 c1 99 36 4e af 81 27 52 |.......d..6N..'R| +00000160 0f 5e 31 5e c0 70 21 fb 05 40 d4 d2 71 df 0c 09 |.^1^.p!..@..q...| +00000170 31 83 b0 71 82 84 d9 90 6b 25 5a 67 03 30 c4 80 |1..q....k%Zg.0..| +00000180 2c 99 41 3f fa 51 ce a8 b4 b8 98 2a bc e9 cc ce |,.A?.Q.....*....| +00000190 f7 0c 69 a3 c3 02 dc b9 4f 00 ac 4f 29 d5 e5 df |..i.....O..O)...| +000001a0 df 67 3b ed 94 8e 80 3f aa 6e a8 b7 e0 7f 4d fd |.g;....?.n....M.| +000001b0 95 80 54 89 57 ff d7 73 86 bd e8 98 11 d5 09 c6 |..T.W..s........| +000001c0 ab af 1a a4 a0 cc 30 40 bc 63 dc d0 db 92 41 f5 |......0@.c....A.| +000001d0 5c 1e f1 92 03 5b 3f 27 23 1f 9c 8e f8 8b 4f 69 |\....[?'#.....Oi| +000001e0 0c 3d 09 e5 95 d8 ba 8c 90 cd ac 53 ed 77 8d 75 |.=.........S.w.u| +000001f0 3a 56 b4 f3 21 a5 4e c2 6e 1f 87 74 56 69 32 95 |:V..!.N.n..tVi2.| +00000200 29 56 07 2c 0d b3 74 47 28 6d 8f ef 56 f6 68 7f |)V.,..tG(m..V.h.| +00000210 25 e4 76 06 7c 82 40 11 f8 eb 3c ec 62 fa be 60 |%.v.|.@...<.b..`| +00000220 d3 11 98 e2 d4 b1 d0 72 3d e6 4a da f0 d6 c0 42 |.......r=.J....B| +00000230 8e a6 63 cc a1 41 e3 18 21 00 ac cc 98 f8 8d 78 |..c..A..!......x| +00000240 ab 9b 39 16 ad 4c fd 11 15 79 0c fd 0e 87 45 d6 |..9..L...y....E.| +00000250 81 30 bb 3a 72 89 92 c1 fa e8 ad 59 3b 8b b0 38 |.0.:r......Y;..8| +00000260 2d c3 6e 87 a8 b8 1f 7d a0 b3 e6 91 83 97 78 94 |-.n....}......x.| +00000270 f0 01 66 a2 c8 89 45 8e 2e a0 7e 89 4d 7f 49 ee |..f...E...~.M.I.| +00000280 2a 69 c0 ec 77 db 85 df 01 d9 02 36 df 94 81 01 |*i..w......6....| +00000290 aa 43 a2 3d 76 8c c3 21 bf 05 c3 b2 c4 28 85 65 |.C.=v..!.....(.e| +000002a0 7b 4a ac e3 45 40 77 1d a9 ee 1e e9 97 7c 2f 45 |{J..E@w......|/E| +000002b0 45 18 58 47 ab 51 0f 26 eb d5 bb ac c2 8b a9 ae |E.XG.Q.&........| +000002c0 65 6a 91 9b 13 93 69 c6 9d bc 61 23 20 d2 ad a0 |ej....i...a# ...| +000002d0 d3 f9 2d 32 79 e3 4b 07 90 32 9e e1 f3 13 18 b0 |..-2y.K..2......| +000002e0 65 6e 89 a5 45 c6 a1 9b f0 f6 d1 66 d3 e7 49 1a |en..E......f..I.| +000002f0 b8 e2 17 cd d0 13 9c e6 e1 77 87 a4 8b 6a d3 74 |.........w...j.t| +00000300 0e 85 b1 2c f3 c8 a8 f3 65 b3 71 c2 bb f5 95 d7 |...,....e.q.....| +00000310 81 78 45 17 03 03 00 99 1e 53 96 f9 b9 97 ec 53 |.xE......S.....S| +00000320 4e 97 a9 8c 01 06 ee 6b 31 47 93 4b ac f7 b6 4a |N......k1G.K...J| +00000330 15 bb 28 d7 87 73 7c 1d 3b d3 6b 9d 48 77 df 09 |..(..s|.;.k.Hw..| +00000340 c9 97 98 b6 d6 20 94 8a ed 71 08 2d 56 af b2 b8 |..... ...q.-V...| +00000350 20 fc d7 81 e4 53 eb 57 6a bd 9b 1c 11 4f 2e fb | ....S.Wj....O..| +00000360 9a 0e 65 08 69 df 28 70 a7 50 21 62 9f 63 39 db |..e.i.(p.P!b.c9.| +00000370 9e 73 40 5d 73 77 a7 1d 2e 79 61 fa b9 50 f0 70 |.s@]sw...ya..P.p| +00000380 1e 71 d1 9e c6 2f 8c 4c 5f e0 b1 37 d7 c9 ab fc |.q.../.L_..7....| +00000390 5f 6a ca a9 9e 27 38 42 78 ba fb e6 8e c2 3f a6 |_j...'8Bx.....?.| +000003a0 a0 c6 04 b6 d8 b7 3a 68 83 15 3b 70 f9 0a 27 4a |......:h..;p..'J| +000003b0 0a 17 03 03 00 35 d0 88 b7 b8 cf 81 4e 97 76 96 |.....5......N.v.| +000003c0 c2 ed e8 15 e4 01 54 2b 1f 0e 34 08 52 6c a8 6a |......T+..4.Rl.j| +000003d0 cf 04 29 7b 27 fb e9 1e d1 6c d2 28 15 03 2a 58 |..){'....l.(..*X| +000003e0 d4 eb 67 18 83 3f d4 2a ab 9f aa |..g..?.*...| >>> Flow 3 (client to server) -00000000 14 03 03 00 01 01 17 03 03 00 35 8c 85 73 71 98 |..........5..sq.| -00000010 40 37 77 e7 8c fd d1 f0 42 a8 97 f3 7c 68 f4 a7 |@7w.....B...|h..| -00000020 ac dc 7a ff 9b 2e f4 fe 2a c0 37 f9 56 a4 00 f5 |..z.....*.7.V...| -00000030 b1 40 34 53 89 48 9a a6 9d af a1 75 3f 34 53 fd |.@4S.H.....u?4S.| -00000040 17 03 03 00 17 92 cf 4a 20 2e 0c 2b 4a dc 86 2a |.......J ..+J..*| -00000050 75 cd 8f 73 b3 b3 4b 3b 3a e4 39 c3 17 03 03 00 |u..s..K;:.9.....| -00000060 13 83 08 42 b1 a8 95 2d a5 4c 8b e8 e8 35 d2 4c |...B...-.L...5.L| -00000070 23 8b 83 73 |#..s| +00000000 14 03 03 00 01 01 17 03 03 00 35 02 ed 34 8f 83 |..........5..4..| +00000010 44 27 8b 71 af c1 06 33 0b 25 aa 22 85 96 41 75 |D'.q...3.%."..Au| +00000020 4f fe 46 82 ba 95 91 4c cc a9 99 60 5c f7 72 7f |O.F....L...`\.r.| +00000030 e4 1f e4 99 6a c2 25 db d0 11 5d fc d6 28 8f 56 |....j.%...]..(.V| +00000040 17 03 03 00 17 fe e8 cf ed a0 7a ce 77 57 e6 aa |..........z.wW..| +00000050 f0 ce 6d 2f 5c e5 1f 7d 37 c8 91 cf 17 03 03 00 |..m/\..}7.......| +00000060 13 a4 a9 4c b5 33 38 4a 1e b7 65 9d 72 85 1b 79 |...L.38J..e.r..y| +00000070 79 87 e3 bf |y...| diff --git a/src/crypto/tls/testdata/Client-TLSv13-HelloRetryRequest b/src/crypto/tls/testdata/Client-TLSv13-HelloRetryRequest index c06837e6da..10e13ec33d 100644 --- a/src/crypto/tls/testdata/Client-TLSv13-HelloRetryRequest +++ b/src/crypto/tls/testdata/Client-TLSv13-HelloRetryRequest @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f4 01 00 00 f0 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 f6 01 00 00 f2 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,14 +7,14 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 75 00 05 00 05 01 00 00 00 00 00 0a 00 |...u............| +00000080 01 00 00 77 00 05 00 05 01 00 00 00 00 00 0a 00 |...w............| 00000090 06 00 04 00 1d 00 17 00 0b 00 02 01 00 00 0d 00 |................| -000000a0 18 00 16 08 04 08 05 08 06 04 01 04 03 05 01 05 |................| -000000b0 03 06 01 06 03 02 01 02 03 ff 01 00 01 00 00 12 |................| -000000c0 00 00 00 2b 00 09 08 03 04 03 03 03 02 03 01 00 |...+............| -000000d0 33 00 26 00 24 00 1d 00 20 2f e5 7d a3 47 cd 62 |3.&.$... /.}.G.b| -000000e0 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 cf |C.(.._.).0......| -000000f0 c2 ed 90 99 5f 58 cb 3b 74 |...._X.;t| +000000a0 1a 00 18 08 04 04 03 08 07 08 05 08 06 04 01 05 |................| +000000b0 01 06 01 05 03 06 03 02 01 02 03 ff 01 00 01 00 |................| +000000c0 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 02 03 |.....+..........| +000000d0 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d a3 47 |..3.&.$... /.}.G| +000000e0 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af |.bC.(.._.).0....| +000000f0 c4 cf c2 ed 90 99 5f 58 cb 3b 74 |......_X.;t| >>> Flow 2 (server to client) 00000000 16 03 03 00 58 02 00 00 54 03 03 cf 21 ad 74 e5 |....X...T...!.t.| 00000010 9a 61 11 be 1d 8c 02 1e 65 b8 91 c2 a2 11 16 7a |.a......e......z| @@ -24,7 +24,7 @@ 00000050 0c 00 2b 00 02 03 04 00 33 00 02 00 17 14 03 03 |..+.....3.......| 00000060 00 01 01 |...| >>> Flow 3 (client to server) -00000000 14 03 03 00 01 01 16 03 03 01 15 01 00 01 11 03 |................| +00000000 14 03 03 00 01 01 16 03 03 01 17 01 00 01 13 03 |................| 00000010 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000030 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |. ..............| @@ -32,87 +32,88 @@ 00000050 00 00 00 32 cc a8 cc a9 c0 2f c0 2b c0 30 c0 2c |...2...../.+.0.,| 00000060 c0 27 c0 13 c0 23 c0 09 c0 14 c0 0a 00 9c 00 9d |.'...#..........| 00000070 00 3c 00 2f 00 35 c0 12 00 0a 00 05 c0 11 c0 07 |.<./.5..........| -00000080 13 01 13 03 13 02 01 00 00 96 00 05 00 05 01 00 |................| +00000080 13 01 13 03 13 02 01 00 00 98 00 05 00 05 01 00 |................| 00000090 00 00 00 00 0a 00 06 00 04 00 1d 00 17 00 0b 00 |................| -000000a0 02 01 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 |................| -000000b0 01 04 03 05 01 05 03 06 01 06 03 02 01 02 03 ff |................| -000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| -000000d0 03 03 02 03 01 00 33 00 47 00 45 00 17 00 41 04 |......3.G.E...A.| -000000e0 1e 18 37 ef 0d 19 51 88 35 75 71 b5 e5 54 5b 12 |..7...Q.5uq..T[.| -000000f0 2e 8f 09 67 fd a7 24 20 3e b2 56 1c ce 97 28 5e |...g..$ >.V...(^| -00000100 f8 2b 2d 4f 9e f1 07 9f 6c 4b 5b 83 56 e2 32 42 |.+-O....lK[.V.2B| -00000110 e9 58 b6 d7 49 a6 b5 68 1a 41 03 56 6b dc 5a 89 |.X..I..h.A.Vk.Z.| +000000a0 02 01 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 |................| +000000b0 05 08 06 04 01 05 01 06 01 05 03 06 03 02 01 02 |................| +000000c0 03 ff 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 |...........+....| +000000d0 04 03 03 03 02 03 01 00 33 00 47 00 45 00 17 00 |........3.G.E...| +000000e0 41 04 1e 18 37 ef 0d 19 51 88 35 75 71 b5 e5 54 |A...7...Q.5uq..T| +000000f0 5b 12 2e 8f 09 67 fd a7 24 20 3e b2 56 1c ce 97 |[....g..$ >.V...| +00000100 28 5e f8 2b 2d 4f 9e f1 07 9f 6c 4b 5b 83 56 e2 |(^.+-O....lK[.V.| +00000110 32 42 e9 58 b6 d7 49 a6 b5 68 1a 41 03 56 6b dc |2B.X..I..h.A.Vk.| +00000120 5a 89 |Z.| >>> Flow 4 (server to client) -00000000 16 03 03 00 9b 02 00 00 97 03 03 84 0c ed 20 38 |.............. 8| -00000010 61 6f 28 24 e6 70 28 71 1d 3e 38 fc e2 94 da fa |ao($.p(q.>8.....| -00000020 34 04 33 99 7a 18 e2 2a cc d1 67 20 00 00 00 00 |4.3.z..*..g ....| +00000000 16 03 03 00 9b 02 00 00 97 03 03 b5 7c 4a c4 82 |............|J..| +00000010 67 2c 0d e4 cf 12 5a 8c fc 44 10 da 7e ef ec ae |g,....Z..D..~...| +00000020 bc 59 6c 7d 62 b1 d8 95 5d 9d 3b 20 00 00 00 00 |.Yl}b...].; ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000040 00 00 00 00 00 00 00 00 00 00 00 00 13 01 00 00 |................| 00000050 4f 00 2b 00 02 03 04 00 33 00 45 00 17 00 41 04 |O.+.....3.E...A.| -00000060 c8 a0 2b 32 b8 d5 a7 19 a7 5e 02 f6 f1 e9 ad 34 |..+2.....^.....4| -00000070 72 59 97 9e 05 a8 46 42 21 53 06 06 81 ea b6 f1 |rY....FB!S......| -00000080 ca b6 c6 a1 b6 2e c6 b7 93 17 8e bc 92 3f ac 9c |.............?..| -00000090 7a 74 d0 f9 b2 00 68 e3 f2 1d b6 b8 66 7b 8a cd |zt....h.....f{..| -000000a0 17 03 03 00 17 69 26 9c 4e 1d ec 10 61 5f 5b ef |.....i&.N...a_[.| -000000b0 d1 ad 5d 6a c5 0c d4 ef a8 c4 8c ee 17 03 03 02 |..]j............| -000000c0 6d c1 89 98 5a 1d 09 68 1a cd 6e 75 e6 d7 9c d4 |m...Z..h..nu....| -000000d0 fb c4 70 dd c4 0d 6b 28 09 9b 59 53 81 44 80 f3 |..p...k(..YS.D..| -000000e0 9f 16 7a 04 e2 15 8a 80 58 2d 98 1e aa 1c ac dc |..z.....X-......| -000000f0 f4 60 d9 b3 ff d3 da 56 4a d4 dc 99 89 78 7b 0e |.`.....VJ....x{.| -00000100 0a 76 93 08 9f c4 a6 22 de fe 9f ad 19 19 92 20 |.v....."....... | -00000110 f3 2f ba c7 dd bc 15 54 03 8a ed 2f 5f 75 32 f2 |./.....T.../_u2.| -00000120 2b cf 0e 08 2e c6 7e 6a 4c 3f 40 4e 89 3f c5 de |+.....~jL?@N.?..| -00000130 f0 0d a2 f3 e7 b6 48 ac a6 c8 e9 78 8b ee a3 f1 |......H....x....| -00000140 7c 87 ff 5d d0 9b 4c 98 bc fc 25 1b b8 56 00 22 ||..]..L...%..V."| -00000150 e0 7e 52 24 c6 12 a3 21 39 2a 63 77 da ff de 21 |.~R$...!9*cw...!| -00000160 98 85 1d 73 57 df 21 6c e3 f8 de 06 4b 50 39 0e |...sW.!l....KP9.| -00000170 7c c9 c9 bc 7b 16 1e d7 e3 b2 e4 9e d3 a9 94 35 ||...{..........5| -00000180 fb 65 22 b9 a9 f8 ef 13 5e 54 ef 4b d7 09 b8 72 |.e".....^T.K...r| -00000190 a9 a5 30 a2 67 d3 ef 6e aa 00 7c fb fa 63 28 e7 |..0.g..n..|..c(.| -000001a0 48 18 23 9b 7e 0f dd 8b b2 13 4f f6 d2 e4 75 42 |H.#.~.....O...uB| -000001b0 27 8a 42 0c 02 d8 1e 45 82 ef 1b 65 a7 eb b5 19 |'.B....E...e....| -000001c0 26 e5 42 06 80 80 d7 84 1e 05 c5 d5 f4 ea 53 51 |&.B...........SQ| -000001d0 78 ba f3 47 47 01 7b 25 ab 34 f7 fc 52 71 ff a4 |x..GG.{%.4..Rq..| -000001e0 d5 50 2b b5 7d e2 62 6a e9 8e 9c 8d b2 6f d4 78 |.P+.}.bj.....o.x| -000001f0 07 da 3a 9c 51 a3 d4 f5 24 a6 c0 c8 39 85 5f e1 |..:.Q...$...9._.| -00000200 03 b0 65 8b 50 c4 5d 03 f6 36 d2 3d f2 36 e3 c6 |..e.P.]..6.=.6..| -00000210 26 5b 82 d1 bd 54 e7 90 50 23 a8 e3 36 d9 d9 a0 |&[...T..P#..6...| -00000220 07 df 1b 47 17 9c 2a ab 56 07 d5 ea e5 c7 71 0b |...G..*.V.....q.| -00000230 fb 0c 4e f3 5b 0e 1d d6 75 df 21 50 c3 c9 18 5f |..N.[...u.!P..._| -00000240 55 e1 84 91 5c 9c 13 68 95 15 ab 0e db 17 b1 b7 |U...\..h........| -00000250 ee 3e 89 61 0f 6f 09 8b 6a 67 b5 bc 2a 61 cd 42 |.>.a.o..jg..*a.B| -00000260 79 9a 9c a4 99 98 0d 1c 43 2c bd 8d ee ac a9 2e |y.......C,......| -00000270 6d 73 cc b3 a0 b7 b7 8f 8f 09 32 8a 9f 00 87 5f |ms........2...._| -00000280 ae b4 0f 47 22 0b ec f4 e2 be 4e 6f 13 8d 30 97 |...G".....No..0.| -00000290 5a a8 f0 38 46 dd 1a 28 10 8b a8 4a e4 e6 fb 84 |Z..8F..(...J....| -000002a0 c4 85 15 11 3d 0b 08 f7 9d fd 45 6a 6b f5 bf d4 |....=.....Ejk...| -000002b0 2b 84 e5 20 5a a8 cb df 1f a3 af 96 17 df e8 b2 |+.. Z...........| -000002c0 61 f1 d0 d1 85 91 d2 02 a5 38 a0 5e 19 ba c4 2c |a........8.^...,| -000002d0 80 64 77 13 e1 27 86 d3 d4 17 07 86 c7 11 c0 38 |.dw..'.........8| -000002e0 11 69 89 48 39 7e b2 e5 d9 72 c1 b4 29 50 ab 9b |.i.H9~...r..)P..| -000002f0 49 cd 74 b9 4a ce c5 67 46 47 73 81 b1 a1 82 8f |I.t.J..gFGs.....| -00000300 76 ee 81 28 70 66 da 94 2a 8e 20 b0 ab 2e e4 d4 |v..(pf..*. .....| -00000310 ef 26 8b 31 07 85 b6 b0 c2 5b 05 0a 32 2e e7 73 |.&.1.....[..2..s| -00000320 41 e7 a1 97 f7 5e 2f 9c 73 25 c1 f7 77 12 17 03 |A....^/.s%..w...| -00000330 03 00 99 92 0a 8c 17 e9 0d 77 a3 6f ab 1a 4f dd |.........w.o..O.| -00000340 de 1d 0f 72 39 5c 8f 9f 80 00 b2 e5 fe 28 79 a2 |...r9\.......(y.| -00000350 16 21 e3 a2 25 90 c6 cd f2 28 6d b6 08 5b 51 0d |.!..%....(m..[Q.| -00000360 58 22 a6 11 ac 29 5d 54 aa 05 35 28 87 da 54 39 |X"...)]T..5(..T9| -00000370 b6 7f ef 94 3e 1c 80 59 f1 12 06 77 66 20 a1 00 |....>..Y...wf ..| -00000380 82 ed 0b 7a 1f 5d 55 5e 31 11 85 93 69 94 2a 44 |...z.]U^1...i.*D| -00000390 96 1c 39 7b 5b 7f 5b a6 05 6a 6d 52 79 20 52 f7 |..9{[.[..jmRy R.| -000003a0 1f 79 50 36 f1 a9 00 aa 9d 46 57 fd 00 70 7b 4a |.yP6.....FW..p{J| -000003b0 7a 14 75 20 91 83 3e 1b 47 2a 90 c9 09 71 b6 95 |z.u ..>.G*...q..| -000003c0 48 53 2a 3f 22 5f 9c 46 d6 12 27 b1 17 03 03 00 |HS*?"_.F..'.....| -000003d0 35 98 15 74 4c d4 52 cf 0c 78 88 8f 82 9b c5 23 |5..tL.R..x.....#| -000003e0 14 02 71 da 63 6c 28 36 aa 91 a0 14 74 0a 47 59 |..q.cl(6....t.GY| -000003f0 ea 6f b1 46 1e a7 c4 5f 76 33 96 ae 82 eb 4b b4 |.o.F..._v3....K.| -00000400 88 6a ce 37 db fd |.j.7..| +00000060 51 c8 a4 d2 63 ec a1 b7 72 7e 42 30 8e d2 eb b0 |Q...c...r~B0....| +00000070 3c e0 06 d0 69 39 b7 55 ee 47 c3 b3 b6 56 2d df |<...i9.U.G...V-.| +00000080 3e 0c 1c 92 cf f6 c4 52 13 90 fa e6 52 13 e6 6d |>......R....R..m| +00000090 35 46 de 60 05 a1 85 a9 ec 86 dc da 19 4d 21 67 |5F.`.........M!g| +000000a0 17 03 03 00 17 d7 59 69 75 49 13 ac 27 ad 1c a9 |......YiuI..'...| +000000b0 17 68 46 77 a2 22 0a f5 6f ce 70 67 17 03 03 02 |.hFw."..o.pg....| +000000c0 6d ee 92 51 b3 07 0f 46 be 24 a1 12 02 7e d1 d4 |m..Q...F.$...~..| +000000d0 b1 2e f5 87 f5 96 ed 00 77 f1 ad 1b 8e cd 1d 01 |........w.......| +000000e0 41 78 6a ff 68 9f 6d ac fe 92 8a c5 43 d2 c9 1d |Axj.h.m.....C...| +000000f0 a8 d8 0f 00 7e c1 06 a9 16 ba 13 94 e7 d9 cd e1 |....~...........| +00000100 01 fd 52 12 be b0 04 14 85 d3 06 a2 63 d7 16 7a |..R.........c..z| +00000110 06 5f 1f c2 31 ea 27 1a a5 1d f6 39 d2 b1 99 8c |._..1.'....9....| +00000120 e0 71 32 3b ef 4e d3 1c 21 3f 30 59 5b 3e 1f 64 |.q2;.N..!?0Y[>.d| +00000130 3c 27 35 0f ee f4 75 5c 53 38 f8 43 87 55 88 28 |<'5...u\S8.C.U.(| +00000140 17 8f 4c 2d 73 d0 bd db 43 25 2f da fb f3 f7 b4 |..L-s...C%/.....| +00000150 63 90 08 24 c6 b3 ae 91 00 2d 4f bd af bc 22 82 |c..$.....-O...".| +00000160 08 ef 29 c9 49 d2 73 97 ce 6c 8d 1e a2 cb 53 ff |..).I.s..l....S.| +00000170 fe 9c b1 14 58 6f 45 bf ee 93 c0 9b 96 86 54 1a |....XoE.......T.| +00000180 fc fe 84 c3 88 13 92 d4 d7 de 00 07 d4 f7 ef 8e |................| +00000190 5e 5f b0 12 c9 6a 81 df 05 e6 c3 a1 f6 8a bc 06 |^_...j..........| +000001a0 bc 45 47 06 d4 45 70 78 f9 16 0f d2 f4 ae b5 94 |.EG..Epx........| +000001b0 e6 ac b5 bf e3 40 d1 fe 20 07 23 f8 65 fe 57 b2 |.....@.. .#.e.W.| +000001c0 63 a0 db 7b fa 12 25 2b 1f 1c df 66 ee c4 84 80 |c..{..%+...f....| +000001d0 4a 95 64 3d 9f c2 e9 eb 7c 59 72 1c 52 68 fa 5a |J.d=....|Yr.Rh.Z| +000001e0 b3 d6 9e dc 51 d6 ac 0b 34 f1 66 42 4b 99 1d cb |....Q...4.fBK...| +000001f0 94 f4 08 c6 57 f9 97 87 54 9c 3b ba 4e 21 c7 b3 |....W...T.;.N!..| +00000200 a0 d9 41 33 22 c4 3f a4 29 e4 7a 3c a1 86 e0 65 |..A3".?.).z<...e| +00000210 f4 ff 67 c5 32 ae 16 01 67 8e 16 d7 28 5e b3 19 |..g.2...g...(^..| +00000220 c6 18 c7 27 0d 01 8e 04 87 fb 6b f9 72 ee 00 ff |...'......k.r...| +00000230 25 f9 c5 dd bc 30 45 63 2d 4d 2d 9d ea 7f 54 aa |%....0Ec-M-...T.| +00000240 ac 9e d8 a2 ae c2 e3 64 b7 3d 54 56 67 39 e8 96 |.......d.=TVg9..| +00000250 a5 5d fd 1e 01 2a 0c 7d ee f1 4e fc 1b 19 f9 ef |.]...*.}..N.....| +00000260 60 dd e1 b2 94 f3 5f 54 d4 05 f7 86 83 6f 97 43 |`....._T.....o.C| +00000270 4e 30 c1 49 cc 5e 98 10 5c 4e 32 84 97 70 c8 b9 |N0.I.^..\N2..p..| +00000280 6d 0b c2 23 ab f9 e8 85 6f 0a 2a 99 e7 12 33 e8 |m..#....o.*...3.| +00000290 f2 62 6f 65 0c 3d ff 9f e6 15 eb 1d 24 0e e9 8a |.boe.=......$...| +000002a0 28 e0 09 31 23 a4 5c 2c 25 49 b4 0c 5f 18 e1 12 |(..1#.\,%I.._...| +000002b0 82 16 6e 79 68 21 fb 5a 68 73 dd f7 2f aa e2 f9 |..nyh!.Zhs../...| +000002c0 85 8d af c6 84 50 af 84 95 12 c8 32 a6 eb f0 93 |.....P.....2....| +000002d0 a2 bd 97 d3 ba 76 a8 2e a2 44 2f 98 23 ca 78 cd |.....v...D/.#.x.| +000002e0 7a 5f bf ab 19 00 72 b5 b3 e0 a7 b5 da 47 05 c8 |z_....r......G..| +000002f0 44 0b 6c 7f 0b 4c 99 79 3c 47 7e e9 25 bd a8 4d |D.l..L.yOh.'.%..| +00000390 1f 89 9e 21 34 97 b9 7e 6e 2a c2 df 47 22 7d a6 |...!4..~n*..G"}.| +000003a0 aa 7a 4a fd 11 b0 73 10 f5 16 8b 2c 3a af a6 7a |.zJ...s....,:..z| +000003b0 cc 3d 4b f0 36 43 60 db 53 2a 4e 2c 1b 2c 0a 54 |.=K.6C`.S*N,.,.T| +000003c0 01 ff ad 7e 93 a8 d0 76 da 5a 88 88 17 03 03 00 |...~...v.Z......| +000003d0 35 d0 36 70 7c 4c 6a 10 bd 43 50 2c 47 74 f9 ed |5.6p|Lj..CP,Gt..| +000003e0 9f 0b d7 33 82 74 2f fd 81 4d 08 d6 cf f4 13 4e |...3.t/..M.....N| +000003f0 de ec 84 bf 79 35 ee 72 8a a3 d0 61 29 94 ad 79 |....y5.r...a)..y| +00000400 04 42 0f 2b 65 a1 |.B.+e.| >>> Flow 5 (client to server) -00000000 17 03 03 00 35 7b c5 88 f4 a0 83 1e 6e 67 e6 05 |....5{......ng..| -00000010 05 fa b4 40 e3 7f fc f8 bc 50 11 76 93 22 92 5f |...@.....P.v."._| -00000020 9a 67 e5 65 a1 a3 af bc ae 3b c7 aa b3 fb 99 f0 |.g.e.....;......| -00000030 2a c2 65 aa 4b bd 91 20 17 22 17 03 03 00 17 1d |*.e.K.. ."......| -00000040 4f a0 06 07 65 2e 10 e7 15 c9 56 f3 2c 18 10 51 |O...e.....V.,..Q| -00000050 c7 d5 ac 09 e6 93 17 03 03 00 13 34 b2 1d 5e da |...........4..^.| -00000060 55 b2 dd 2b c1 e0 ac 65 7e a2 52 f8 a4 5b |U..+...e~.R..[| +00000000 17 03 03 00 35 4b f7 dd b6 64 32 61 42 e7 b2 93 |....5K...d2aB...| +00000010 b8 4b dd 7c 25 c6 57 5b 68 d5 f2 d9 27 85 ee cf |.K.|%.W[h...'...| +00000020 09 44 79 8d 8e 14 0f 84 44 e5 16 a9 bf d9 14 bb |.Dy.....D.......| +00000030 22 73 c7 a9 24 c1 dd 38 1e 63 17 03 03 00 17 63 |"s..$..8.c.....c| +00000040 56 45 91 62 9c 00 4b d6 ae f4 dc 17 a2 89 55 0d |VE.b..K.......U.| +00000050 c3 d4 f3 12 8b bf 17 03 03 00 13 1f ac ed f8 80 |................| +00000060 31 7f 75 9f 6c a1 48 6e 20 89 b8 45 08 33 |1.u.l.Hn ..E.3| diff --git a/src/crypto/tls/testdata/Client-TLSv13-KeyUpdate b/src/crypto/tls/testdata/Client-TLSv13-KeyUpdate index a613b78da5..d1efba928c 100644 --- a/src/crypto/tls/testdata/Client-TLSv13-KeyUpdate +++ b/src/crypto/tls/testdata/Client-TLSv13-KeyUpdate @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f8 01 00 00 f4 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 fa 01 00 00 f6 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,96 +7,96 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 79 00 05 00 05 01 00 00 00 00 00 0a 00 |...y............| +00000080 01 00 00 7b 00 05 00 05 01 00 00 00 00 00 0a 00 |...{............| 00000090 0a 00 08 00 1d 00 17 00 18 00 19 00 0b 00 02 01 |................| -000000a0 00 00 0d 00 18 00 16 08 04 08 05 08 06 04 01 04 |................| -000000b0 03 05 01 05 03 06 01 06 03 02 01 02 03 ff 01 00 |................| -000000c0 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 03 03 |.......+........| -000000d0 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f e5 7d |....3.&.$... /.}| -000000e0 a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 ff f6 |.G.bC.(.._.).0..| -000000f0 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |........_X.;t| +000000a0 00 00 0d 00 1a 00 18 08 04 04 03 08 07 08 05 08 |................| +000000b0 06 04 01 05 01 06 01 05 03 06 03 02 01 02 03 ff |................| +000000c0 01 00 01 00 00 12 00 00 00 2b 00 09 08 03 04 03 |.........+......| +000000d0 03 03 02 03 01 00 33 00 26 00 24 00 1d 00 20 2f |......3.&.$... /| +000000e0 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +000000f0 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 |.........._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 7a 02 00 00 76 03 03 59 2c d4 a8 e3 |....z...v..Y,...| -00000010 ec 72 f1 2f 9b ff af 2f ab 13 fe 21 80 a5 c1 71 |.r./.../...!...q| -00000020 02 55 9b 06 67 0f 7b dd 27 32 66 20 00 00 00 00 |.U..g.{.'2f ....| +00000000 16 03 03 00 7a 02 00 00 76 03 03 a2 49 b5 61 fe |....z...v...I.a.| +00000010 e3 52 ca 87 58 57 0f ec bc 71 51 a9 50 7c ac 5e |.R..XW...qQ.P|.^| +00000020 af 4e 47 56 81 6c 92 d9 10 3d d0 20 00 00 00 00 |.NGV.l...=. ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000040 00 00 00 00 00 00 00 00 00 00 00 00 13 01 00 00 |................| -00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 3e |..+.....3.$... >| -00000060 13 b1 51 26 01 be c0 e5 85 a7 18 aa b5 83 21 6e |..Q&..........!n| -00000070 85 48 1b ea 4c 99 13 ba b8 de 07 30 f4 9f 5b 14 |.H..L......0..[.| -00000080 03 03 00 01 01 17 03 03 00 17 9f 78 1e 98 cb 85 |...........x....| -00000090 0e 65 2b e5 20 c1 63 c1 b7 49 49 76 e3 90 0c c9 |.e+. .c..IIv....| -000000a0 b6 17 03 03 02 6d 8f 91 03 6b b7 0d 7d 79 4c 16 |.....m...k..}yL.| -000000b0 fc cb 62 11 62 12 2a 52 9a 19 7c b6 1c fc 31 d2 |..b.b.*R..|...1.| -000000c0 11 4d b4 e9 23 3c 58 3e 87 f1 9e e0 27 04 a2 fb |.M..#....'...| -000000d0 21 9a 82 59 3b ea 6b 29 ec a8 0e 1c 58 99 46 9b |!..Y;.k)....X.F.| -000000e0 2b c2 90 10 5d bc df d1 a0 71 00 8f 9b 90 10 49 |+...]....q.....I| -000000f0 97 1d b5 d2 8f e2 a6 78 b1 2a e9 2d 8d 13 38 2f |.......x.*.-..8/| -00000100 db 56 bb cd 0f 08 69 f7 04 de 53 ec 3c 90 97 ca |.V....i...S.<...| -00000110 9f 63 d0 96 7f 3a 98 98 77 21 c8 ee 0f 5c 4e 97 |.c...:..w!...\N.| -00000120 3c 72 88 13 48 82 1b 70 b2 83 b4 95 03 81 05 ef |:.....U3| -00000300 76 5f ce 26 f6 53 d0 23 3a e2 78 0f 0a fe 2f 89 |v_.&.S.#:.x.../.| -00000310 43 27 b3 17 03 03 00 99 61 da d2 f7 6d 84 f0 08 |C'......a...m...| -00000320 b0 89 f8 a4 1f b4 99 6a cf d1 08 d6 a7 03 fa f9 |.......j........| -00000330 db c2 8a 9a 74 62 0c 93 7d 7c 22 c0 2d 84 5d 96 |....tb..}|".-.].| -00000340 f8 66 05 6c c5 ab b6 5b 2d f5 10 27 c6 c3 81 13 |.f.l...[-..'....| -00000350 94 3c af 56 ca 37 ca a6 24 86 34 54 f2 60 e2 51 |.<.V.7..$.4T.`.Q| -00000360 67 5e dd 81 7f 87 81 84 15 cf b9 92 01 9c fc 90 |g^..............| -00000370 18 21 ad 6a 4a b8 4f fe 03 c8 83 08 fd 55 5a 4d |.!.jJ.O......UZM| -00000380 75 b7 e3 2d ff 9d 0a e5 61 b2 e9 82 bf 65 6a 05 |u..-....a....ej.| -00000390 d1 8d 36 82 07 8d a0 95 78 26 9e 3a c7 99 27 3f |..6.....x&.:..'?| -000003a0 54 0e a3 dd 9a 93 a6 6c 9b a3 14 46 bb cc f8 70 |T......l...F...p| -000003b0 f1 17 03 03 00 35 34 03 e6 68 dc f1 3e ae 38 69 |.....54..h..>.8i| -000003c0 87 ce 72 92 13 4a c0 4a 0d 22 28 3a 9f df 7d d5 |..r..J.J."(:..}.| -000003d0 de 5f 3c 0d 49 be b7 63 85 67 90 be 68 dc e7 88 |._<.I..c.g..h...| -000003e0 e3 58 90 43 99 0a db ee ad be 6d |.X.C......m| +00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 75 |..+.....3.$... u| +00000060 c4 ba b0 c4 9b a0 57 6a ca e4 9c c6 eb f8 66 5a |......Wj......fZ| +00000070 d4 64 36 34 71 9d 6d 0f 2f 34 b8 ad b7 4a 55 14 |.d64q.m./4...JU.| +00000080 03 03 00 01 01 17 03 03 00 17 ec 4c 36 aa 81 cf |...........L6...| +00000090 61 2c 2f 6c 35 e8 25 62 54 17 ae 9b 46 b0 96 f5 |a,/l5.%bT...F...| +000000a0 0f 17 03 03 02 6d 6f 6c 27 e5 53 42 db 32 b4 2c |.....mol'.SB.2.,| +000000b0 6a 70 56 a7 0d 3a 7f a3 d7 fe 04 4f 0a 3e 52 8c |jpV..:.....O.>R.| +000000c0 52 1e 3a 26 5d 47 b1 6b da 90 e2 74 50 0d 6e fa |R.:&]G.k...tP.n.| +000000d0 1b 3f 17 3b 21 f7 fa f7 c7 c3 e3 14 05 09 76 b2 |.?.;!.........v.| +000000e0 27 66 bc 42 7e 49 4b ff 3a f1 3f a3 1a d4 9e 03 |'f.B~IK.:.?.....| +000000f0 3f b6 a8 87 98 50 f3 d8 cb 8b a2 e9 2a ea ff bc |?....P......*...| +00000100 50 18 d0 57 58 c5 e9 c8 96 67 01 8b e2 a3 f4 77 |P..WX....g.....w| +00000110 5e 1d 93 89 b6 f6 57 7d 93 b6 62 86 0a 21 18 56 |^.....W}..b..!.V| +00000120 8c 14 25 df 47 1a b3 23 e6 99 d1 fc dc 07 0a 38 |..%.G..#.......8| +00000130 9a 05 c8 3f 23 5c c5 d3 c4 48 fb b2 fd 9f 83 37 |...?#\...H.....7| +00000140 1d 0c 85 9c 2b e6 ae 42 aa ad d4 5a 9e 49 89 b7 |....+..B...Z.I..| +00000150 b0 c2 c5 ec 42 89 88 87 6e 54 3d 73 b2 f1 5f 0f |....B...nT=s.._.| +00000160 4b 49 3f 6b a3 8f 5f 99 bf fe af e9 25 ac 27 b7 |KI?k.._.....%.'.| +00000170 e7 96 bb 4a c8 e8 9e f1 2c 23 c2 e7 96 ba b4 fe |...J....,#......| +00000180 d5 94 b5 72 82 bd 7f c2 e1 af b4 bd db c7 15 20 |...r........... | +00000190 85 60 bb 02 f6 4b ef 09 3e a1 4e b9 77 64 0a 4a |.`...K..>.N.wd.J| +000001a0 2c 05 82 96 91 be 23 44 50 c1 c5 6c 05 55 51 42 |,.....#DP..l.UQB| +000001b0 84 87 20 71 65 8d 09 86 66 fa 88 8b 54 21 44 34 |.. qe...f...T!D4| +000001c0 df 6f ce a3 e9 12 4a e0 90 76 bb 1a f5 00 79 cb |.o....J..v....y.| +000001d0 d8 82 3b 88 c8 6a 5b a1 49 49 a0 c0 f7 d9 8f 89 |..;..j[.II......| +000001e0 f2 04 59 2b 0c 6f e2 3f b8 a8 c9 aa bf 2e 18 74 |..Y+.o.?.......t| +000001f0 45 b5 35 34 9a bb fa 77 e8 46 b2 f8 6d 41 65 36 |E.54...w.F..mAe6| +00000200 d9 f8 64 81 a6 50 63 b4 73 3e fb f9 b3 3e 03 3d |..d..Pc.s>...>.=| +00000210 d1 f4 b5 c1 ac f8 3f 4d 73 b7 da 16 8a 37 c9 a7 |......?Ms....7..| +00000220 51 33 b1 68 69 19 0b 26 de a6 42 4d 22 a3 e8 c0 |Q3.hi..&..BM"...| +00000230 7b 1d 66 e7 70 26 44 f7 62 3f 3d 0d e2 02 50 61 |{.f.p&D.b?=...Pa| +00000240 db 9b 5e e4 49 e8 32 32 7a c0 03 37 a8 c6 85 80 |..^.I.22z..7....| +00000250 4a 7e 39 b5 ba 6c cb 6f 53 e5 90 d0 0d 9c 2e e5 |J~9..l.oS.......| +00000260 90 df 9b b1 c5 3f 16 98 a9 dd a1 b5 7a 48 04 0e |.....?......zH..| +00000270 15 f9 60 a7 35 0b 33 a1 93 4b 73 5f b3 46 a6 43 |..`.5.3..Ks_.F.C| +00000280 ea a3 6e 4c fa bb 24 44 cd 48 85 c1 9f ea c2 14 |..nL..$D.H......| +00000290 92 48 2e 35 43 30 dc e6 76 23 0b e4 2f 28 13 c1 |.H.5C0..v#../(..| +000002a0 e1 bb 2d 9f de cf 10 8f c3 8f 48 eb 64 eb 6d ef |..-.......H.d.m.| +000002b0 2a b3 c5 d6 85 db a2 05 b2 46 f8 77 aa 2c fb 14 |*........F.w.,..| +000002c0 be 09 e7 11 33 88 cb 71 1b ca 46 cb 79 c6 99 eb |....3..q..F.y...| +000002d0 43 bb 59 c6 91 3b 0f 1a 76 cb c7 3b ef 07 c9 cb |C.Y..;..v..;....| +000002e0 3a 75 ac 14 d9 53 08 ca 4d 45 48 24 4a af 4e 94 |:u...S..MEH$J.N.| +000002f0 0e 81 31 63 d1 f6 67 25 7d c0 dd 02 05 1b ce 38 |..1c..g%}......8| +00000300 69 cf e7 6a bb b5 02 85 00 82 71 a6 e3 c0 33 b8 |i..j......q...3.| +00000310 78 51 55 17 03 03 00 99 b3 5c cb a4 a3 6c e9 fa |xQU......\...l..| +00000320 33 25 04 21 28 66 e7 d4 22 02 8f d4 3e cc e1 20 |3%.!(f.."...>.. | +00000330 15 5b 5a 55 14 d3 2b a5 de 7b 95 48 3c 26 68 22 |.[ZU..+..{.H<&h"| +00000340 a3 0d c6 ac 7f ec d3 7b fa 4d 51 20 6f 32 97 bc |.......{.MQ o2..| +00000350 fa 0c d6 8e bf ee 13 ca b3 cf 00 c5 f5 87 f1 cb |................| +00000360 9b 63 22 e6 61 99 83 78 69 1d 03 f1 0b 66 c5 c4 |.c".a..xi....f..| +00000370 2e 6f d8 b5 59 93 f7 40 3c 40 4e 1a 58 af b5 37 |.o..Y..@<@N.X..7| +00000380 ce dd 83 dd b1 78 a8 ba a3 35 f8 9f 0c 47 1e fb |.....x...5...G..| +00000390 aa 9b b5 5f 11 4c b9 0c c1 a0 01 47 87 f9 e6 1f |..._.L.....G....| +000003a0 d5 e5 3f a7 15 4d c8 a5 79 9c e5 bc 62 6f cb cd |..?..M..y...bo..| +000003b0 86 17 03 03 00 35 e7 4d 67 3a 39 5b ac 13 89 cc |.....5.Mg:9[....| +000003c0 c4 dc 20 2b a4 b2 3c 5d 96 f1 45 17 52 12 ed 85 |.. +..<]..E.R...| +000003d0 00 f0 7e 73 3a 6d a2 46 b8 59 7f e8 6f 46 06 e1 |..~s:m.F.Y..oF..| +000003e0 43 c9 ca af a9 3e ca d6 42 4b 41 |C....>..BKA| >>> Flow 3 (client to server) -00000000 14 03 03 00 01 01 17 03 03 00 35 ea a5 10 9a 0a |..........5.....| -00000010 57 40 9c b7 f8 e6 01 28 9e 3f ae ce ec 73 7f 2e |W@.....(.?...s..| -00000020 84 8e a9 e3 cb 03 3b b3 1b 98 3c 09 5b 23 c2 10 |......;...<.[#..| -00000030 c1 18 47 74 a8 a5 0e 33 93 5f 83 e9 e6 aa ed f5 |..Gt...3._......| -00000040 17 03 03 00 17 80 72 fb 00 25 ff 83 4c df 43 66 |......r..%..L.Cf| -00000050 cd e5 64 2e 78 44 e4 b7 58 61 fe 01 |..d.xD..Xa..| +00000000 14 03 03 00 01 01 17 03 03 00 35 4d ad c5 c7 cc |..........5M....| +00000010 5a 34 8a f8 5f 71 83 af fa 94 df 2a 94 a0 c4 8e |Z4.._q.....*....| +00000020 5e 00 f7 02 e1 30 62 a5 49 27 58 0b 1f fa 46 98 |^....0b.I'X...F.| +00000030 f0 b8 6f 42 e3 3a 7f 26 77 b6 46 8f ab c6 5d d6 |..oB.:.&w.F...].| +00000040 17 03 03 00 17 90 81 68 7a 48 8d 3b 59 9e 11 6f |.......hzH.;Y..o| +00000050 86 b5 24 e4 d9 e0 60 9f c2 4f 3d 33 |..$...`..O=3| >>> Flow 4 (server to client) -00000000 17 03 03 00 16 54 f1 cd 5a 87 da 6a e7 a6 e5 00 |.....T..Z..j....| -00000010 60 f8 cd 6b af db 1b 85 3b 40 23 |`..k....;@#| +00000000 17 03 03 00 16 94 83 fa cc 66 b4 60 c0 c7 6d b3 |.........f.`..m.| +00000010 6e 8c 84 9d 89 76 61 3d 69 fd 29 |n....va=i.)| >>> Flow 5 (client to server) -00000000 17 03 03 00 16 b2 74 fa c8 c6 6e 4f 62 4f ea 02 |......t...nObO..| -00000010 4d 10 78 f1 b3 4a e2 e5 1d 8f 33 |M.x..J....3| +00000000 17 03 03 00 16 60 cb 39 3d 7d 79 01 88 93 bd bf |.....`.9=}y.....| +00000010 23 3b d1 f3 a4 5e 78 ea cd 0f 5e |#;...^x...^| >>> Flow 6 (server to client) -00000000 17 03 03 00 1a ba bc 59 f7 ad b4 77 2f bc 3d 60 |.......Y...w/.=`| -00000010 5c bd 6c 6e 37 86 75 bd e1 41 b9 07 f6 87 47 |\.ln7.u..A....G| +00000000 17 03 03 00 1a 88 13 b4 f1 5f cc 63 1e 99 9f 85 |........._.c....| +00000010 60 ff 0e 97 13 59 64 2a c3 0d 2b ac ca a2 25 |`....Yd*..+...%| >>> Flow 7 (client to server) -00000000 17 03 03 00 1d 7d 12 1b b2 a7 b7 ae 37 fb 2d 71 |.....}......7.-q| -00000010 98 ec c2 f0 7f 16 e9 b9 f9 49 05 e2 b2 c3 c6 ec |.........I......| -00000020 38 32 17 03 03 00 13 9f c4 f4 f7 e9 c9 5f e2 70 |82..........._.p| -00000030 b4 33 9f 35 f3 2a b1 cd 01 d5 |.3.5.*....| +00000000 17 03 03 00 1d 4f f2 48 ea b8 d6 75 8e 97 ab 54 |.....O.H...u...T| +00000010 29 57 50 5b 59 40 59 d3 7a 3c 01 43 6a 33 30 bb |)WP[Y@Y.z<.Cj30.| +00000020 d4 40 17 03 03 00 13 18 fc b7 ac eb e7 52 6d f0 |.@...........Rm.| +00000030 d4 d3 03 c6 5f 4e ea e3 7b 4e |...._N..{N| diff --git a/src/crypto/tls/testdata/Client-TLSv13-P256-ECDHE b/src/crypto/tls/testdata/Client-TLSv13-P256-ECDHE index 20cafb45b6..e6d81184e1 100644 --- a/src/crypto/tls/testdata/Client-TLSv13-P256-ECDHE +++ b/src/crypto/tls/testdata/Client-TLSv13-P256-ECDHE @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 01 13 01 00 01 0f 03 03 00 00 00 00 00 |................| +00000000 16 03 01 01 15 01 00 01 11 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,88 +7,88 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 94 00 05 00 05 01 00 00 00 00 00 0a 00 |................| -00000090 04 00 02 00 17 00 0b 00 02 01 00 00 0d 00 18 00 |................| -000000a0 16 08 04 08 05 08 06 04 01 04 03 05 01 05 03 06 |................| -000000b0 01 06 03 02 01 02 03 ff 01 00 01 00 00 12 00 00 |................| -000000c0 00 2b 00 09 08 03 04 03 03 03 02 03 01 00 33 00 |.+............3.| -000000d0 47 00 45 00 17 00 41 04 1e 18 37 ef 0d 19 51 88 |G.E...A...7...Q.| -000000e0 35 75 71 b5 e5 54 5b 12 2e 8f 09 67 fd a7 24 20 |5uq..T[....g..$ | -000000f0 3e b2 56 1c ce 97 28 5e f8 2b 2d 4f 9e f1 07 9f |>.V...(^.+-O....| -00000100 6c 4b 5b 83 56 e2 32 42 e9 58 b6 d7 49 a6 b5 68 |lK[.V.2B.X..I..h| -00000110 1a 41 03 56 6b dc 5a 89 |.A.Vk.Z.| +00000080 01 00 00 96 00 05 00 05 01 00 00 00 00 00 0a 00 |................| +00000090 04 00 02 00 17 00 0b 00 02 01 00 00 0d 00 1a 00 |................| +000000a0 18 08 04 04 03 08 07 08 05 08 06 04 01 05 01 06 |................| +000000b0 01 05 03 06 03 02 01 02 03 ff 01 00 01 00 00 12 |................| +000000c0 00 00 00 2b 00 09 08 03 04 03 03 03 02 03 01 00 |...+............| +000000d0 33 00 47 00 45 00 17 00 41 04 1e 18 37 ef 0d 19 |3.G.E...A...7...| +000000e0 51 88 35 75 71 b5 e5 54 5b 12 2e 8f 09 67 fd a7 |Q.5uq..T[....g..| +000000f0 24 20 3e b2 56 1c ce 97 28 5e f8 2b 2d 4f 9e f1 |$ >.V...(^.+-O..| +00000100 07 9f 6c 4b 5b 83 56 e2 32 42 e9 58 b6 d7 49 a6 |..lK[.V.2B.X..I.| +00000110 b5 68 1a 41 03 56 6b dc 5a 89 |.h.A.Vk.Z.| >>> Flow 2 (server to client) -00000000 16 03 03 00 9b 02 00 00 97 03 03 42 8e 0f 88 bb |...........B....| -00000010 99 f5 32 74 2a 0a 66 98 59 da 0c 3f df 23 8c 72 |..2t*.f.Y..?.#.r| -00000020 a7 ba f5 52 78 88 22 a0 db 3d cc 20 00 00 00 00 |...Rx."..=. ....| +00000000 16 03 03 00 9b 02 00 00 97 03 03 b5 3c c8 fe 64 |............<..d| +00000010 f6 04 7d 28 a4 25 7c 1b f5 0b e6 6d 0b f5 2f ec |..}(.%|....m../.| +00000020 78 c1 bd 5a cf c8 19 d9 5c 54 72 20 00 00 00 00 |x..Z....\Tr ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000040 00 00 00 00 00 00 00 00 00 00 00 00 13 01 00 00 |................| 00000050 4f 00 2b 00 02 03 04 00 33 00 45 00 17 00 41 04 |O.+.....3.E...A.| -00000060 42 55 a6 b0 22 e7 51 7f ce 3c 15 f5 ef db 69 89 |BU..".Q..<....i.| -00000070 80 e1 5a 54 37 d9 df 4c bd 83 72 43 5f b5 bf 28 |..ZT7..L..rC_..(| -00000080 21 41 0f 4c 71 a4 42 ae 90 20 8b 2e 95 88 1d a0 |!A.Lq.B.. ......| -00000090 4d 50 6f 05 3d 71 26 e2 ca 12 2b bf 5b 18 b6 16 |MPo.=q&...+.[...| -000000a0 14 03 03 00 01 01 17 03 03 00 17 fd a0 c1 f6 d6 |................| -000000b0 f5 7c 39 25 4c 67 ad fa 10 18 d1 90 b2 61 90 3f |.|9%Lg.......a.?| -000000c0 71 49 17 03 03 02 6d 28 31 4d 75 d8 9d 93 a0 ee |qI....m(1Mu.....| -000000d0 ad ef a3 dc 14 12 a8 af 17 b4 46 20 50 96 26 54 |..........F P.&T| -000000e0 78 4d d7 4f 08 e9 93 61 b6 53 da b2 e9 9c 67 54 |xM.O...a.S....gT| -000000f0 e8 87 0d 64 0c cc 14 cd d0 b5 df 1e d7 25 58 ce |...d.........%X.| -00000100 0b c9 a6 dc 38 9d 00 85 ce c3 01 29 3a 74 26 d4 |....8......):t&.| -00000110 71 db c0 92 2b 95 d2 00 d0 38 8d 85 f5 22 05 c7 |q...+....8..."..| -00000120 3b d4 d5 c7 a6 36 0d 3e 39 2c d5 0f 0d 84 80 22 |;....6.>9,....."| -00000130 e5 f0 71 24 0d 93 68 21 db 51 e2 24 84 0c 30 2a |..q$..h!.Q.$..0*| -00000140 87 e5 b5 a2 b6 b8 9c 53 a1 bb 76 7d e8 10 e4 59 |.......S..v}...Y| -00000150 f2 be 69 6f 39 75 e2 ed 70 f3 f0 fd 70 2f ce 2a |..io9u..p...p/.*| -00000160 24 d0 05 3e 13 ee 76 f5 6b b8 ed ee 34 40 cc e5 |$..>..v.k...4@..| -00000170 11 58 62 22 99 04 3c 22 43 24 46 78 66 a0 04 11 |.Xb"..<"C$Fxf...| -00000180 86 b4 b7 87 71 ff f9 ed 6f 4f 7e 9f 2d 08 ed ae |....q...oO~.-...| -00000190 cc 03 29 6f 34 9b 18 2c ae d7 d5 e9 03 51 5d 37 |..)o4..,.....Q]7| -000001a0 d5 ac 93 07 2a 78 8f 7d b0 85 ae 19 37 a5 e8 d6 |....*x.}....7...| -000001b0 e4 b3 01 14 04 fc ab 36 d6 5e 31 45 47 14 f8 d9 |.......6.^1EG...| -000001c0 c8 a0 a0 49 56 74 68 5b b4 20 f7 e0 54 34 41 45 |...IVth[. ..T4AE| -000001d0 c0 5e ed a6 1c 84 d8 3a c7 2d 17 5a 4c bd 7d d1 |.^.....:.-.ZL.}.| -000001e0 a8 9e 5e d1 31 b1 6b 48 64 11 d8 89 01 9f ed 12 |..^.1.kHd.......| -000001f0 60 73 66 80 38 13 23 8d 31 ca 94 06 22 e9 45 ff |`sf.8.#.1...".E.| -00000200 d6 a3 0b 7c 30 c8 d7 30 4f c0 62 84 ac f9 b0 3d |...|0..0O.b....=| -00000210 68 76 d2 02 27 d9 1e 7e da ae 85 47 e1 08 0f 4f |hv..'..~...G...O| -00000220 74 a9 fc ca f2 38 68 6d c6 f3 3c e9 99 c5 48 79 |t....8hm..<...Hy| -00000230 88 37 b6 5d 4f f8 8b 53 41 9a 39 a7 2f 8e 39 81 |.7.]O..SA.9./.9.| -00000240 75 cf 70 2f 28 4c 10 32 73 9b 6e 4f 58 1f ae 28 |u.p/(L.2s.nOX..(| -00000250 3f 6c 3d 60 49 48 15 10 2a af ea d7 ce 55 07 47 |?l=`IH..*....U.G| -00000260 90 3a c8 0d 6a 4a 88 c2 9c d3 08 99 02 c9 88 be |.:..jJ..........| -00000270 91 5b c9 41 46 cf b1 5e fe 28 1e 97 8a 44 5a e0 |.[.AF..^.(...DZ.| -00000280 d0 a3 a9 ea f7 51 27 87 b3 0f fd dc 7d d4 96 4a |.....Q'.....}..J| -00000290 39 2c 0a 58 9c 23 0d 41 89 42 5e fd 19 ab 19 a8 |9,.X.#.A.B^.....| -000002a0 e4 70 3f ef c6 54 fb ed 80 9b 68 d6 d9 6f 21 53 |.p?..T....h..o!S| -000002b0 89 40 06 c9 0c 56 40 8c 36 61 91 18 81 ce 76 5d |.@...V@.6a....v]| -000002c0 78 f5 01 9f 2e de 3e 89 61 d7 81 a5 f9 32 24 44 |x.....>.a....2$D| -000002d0 6b fa 0b 9c 8b a4 f6 df a1 2a 31 91 b2 40 cd 7e |k........*1..@.~| -000002e0 6c d1 75 c9 56 48 e3 36 eb 13 00 cf ea d5 d9 98 |l.u.VH.6........| -000002f0 71 4c d2 af 06 e5 f1 f7 8f ce 79 7a 93 4c 1c 99 |qL........yz.L..| -00000300 61 8f 93 76 de 1d ca ff 1b e5 c3 8f 99 ac 65 92 |a..v..........e.| -00000310 74 a9 d6 fd 9d bd a7 da f6 d5 94 7f 66 87 e1 7e |t...........f..~| -00000320 16 43 04 8a 9f 00 cc 89 1b 33 32 a2 26 e1 62 76 |.C.......32.&.bv| -00000330 30 07 5d 0e 17 03 03 00 99 22 4f 7b 1f 73 59 91 |0.]......"O{.sY.| -00000340 1e dc 62 ce 8b 32 7f 7d 99 b0 71 7a fb 79 09 5a |..b..2.}..qz.y.Z| -00000350 2e 0c b4 f2 00 13 5d ae 7d ae 80 1c 5f 8a a1 99 |......].}..._...| -00000360 c9 20 39 a9 66 36 f0 2b de 2e 1d ef 1f e1 ce 34 |. 9.f6.+.......4| -00000370 9a db f7 7b 17 52 91 ac 76 ff 22 63 8c 07 dd 7d |...{.R..v."c...}| -00000380 72 eb 9b 34 0f e9 a4 43 6b e3 fa e1 00 e3 dc 65 |r..4...Ck......e| -00000390 7a 49 bf a6 cd 97 4f e9 49 ae 91 4c be c3 3a b1 |zI....O.I..L..:.| -000003a0 a1 ee 09 55 ce 87 e7 59 58 24 cb 43 16 c9 5f d6 |...U...YX$.C.._.| -000003b0 11 32 83 47 dd 14 8d 11 c9 29 ac b8 57 7d 1e 07 |.2.G.....)..W}..| -000003c0 34 cc 79 13 22 00 62 39 4c 7e 5f 89 dc 94 b9 ca |4.y.".b9L~_.....| -000003d0 d9 ef 17 03 03 00 35 6a 70 22 84 c0 ed d6 70 b1 |......5jp"....p.| -000003e0 d5 8c 29 f9 0d 03 69 d1 0e 4c 01 79 1b 97 2f 24 |..)...i..L.y../$| -000003f0 45 08 25 4e 56 58 7c d7 d1 79 67 73 7c e2 30 54 |E.%NVX|..ygs|.0T| -00000400 54 2f c0 e2 28 e3 5a 87 47 0f f9 33 |T/..(.Z.G..3| +00000060 d7 63 55 0e 0d 7b fb 09 a9 61 92 70 2b 52 9c 38 |.cU..{...a.p+R.8| +00000070 2d e8 2a 68 27 b7 15 3e 4a 1e 92 c8 08 7b 5c c9 |-.*h'..>J....{\.| +00000080 8d d4 aa 97 63 42 a5 3e 4b e8 7d 37 98 d9 8c a6 |....cB.>K.}7....| +00000090 e7 c7 45 9f 73 48 bd c3 14 82 67 5b bb 19 bd a5 |..E.sH....g[....| +000000a0 14 03 03 00 01 01 17 03 03 00 17 67 d9 cb 2b d1 |...........g..+.| +000000b0 d2 30 7d b3 3f c1 77 5a 6c 87 41 2c 29 83 36 19 |.0}.?.wZl.A,).6.| +000000c0 74 38 17 03 03 02 6d ac 0c 4f fe b5 93 6a fa 9f |t8....m..O...j..| +000000d0 e9 76 a7 c3 8a bb 4a 64 7a 04 35 58 e6 a2 d8 7a |.v....Jdz.5X...z| +000000e0 cf 99 1c 60 13 1a ca c6 e6 10 11 7a f1 f4 be ec |...`.......z....| +000000f0 1d 2d db b1 a5 3a dd 7e 10 2b 65 ca 40 b2 5f fc |.-...:.~.+e.@._.| +00000100 3f c9 df 7d 26 c1 fc b7 2d 67 a1 2d a2 22 b3 40 |?..}&...-g.-.".@| +00000110 79 d4 c8 b6 73 f7 93 8a 97 4f b7 ab b6 0c ca 14 |y...s....O......| +00000120 3c 1e 6c 27 c0 be 01 d7 98 ef 93 78 f5 14 15 21 |<.l'.......x...!| +00000130 4c f8 8e a6 f7 72 b2 b7 bc c2 3e 9b b7 e4 0d 15 |L....r....>.....| +00000140 b5 69 75 e9 61 10 e4 d5 8e 60 44 88 bf 5f df f9 |.iu.a....`D.._..| +00000150 8d 70 54 4e f6 0f 37 70 ff b8 6b c0 4f fb 61 c1 |.pTN..7p..k.O.a.| +00000160 48 00 96 9b da 05 0f 78 7a 87 f5 b1 69 f6 4f 8e |H......xz...i.O.| +00000170 80 74 7b e0 e5 b7 0f ba 7d 9d 4c ff c9 d7 7c b9 |.t{.....}.L...|.| +00000180 f0 bd dd 34 8e 77 5f 3b 48 10 10 6f ed c7 84 15 |...4.w_;H..o....| +00000190 7a 0c 26 3e 5d 9d 58 07 02 8c e3 fa f0 6b 86 df |z.&>].X......k..| +000001a0 76 af 3c 13 c4 93 28 7a 17 04 98 91 26 72 5f aa |v.<...(z....&r_.| +000001b0 cf b2 9e 37 a9 93 12 bd 1d 92 64 b8 82 60 b0 b5 |...7......d..`..| +000001c0 1d 2c 4e 18 24 11 3b 52 33 05 f0 3b f2 27 ed a6 |.,N.$.;R3..;.'..| +000001d0 f6 4a 82 b6 df 05 a0 07 a3 9d 73 0a 3c 7f 02 47 |.J........s.<..G| +000001e0 60 c8 aa 20 b4 9c cd 48 12 a3 82 fe 99 4e 0c bb |`.. ...H.....N..| +000001f0 ec 4f 10 75 26 99 a4 ed 5e 4a 34 51 38 88 2c 3c |.O.u&...^J4Q8.,<| +00000200 0b 8d f8 65 84 38 47 c8 31 30 82 71 3f 54 e3 3f |...e.8G.10.q?T.?| +00000210 f1 e6 2c ef a3 fe 02 34 16 58 21 55 6e 0f 95 d3 |..,....4.X!Un...| +00000220 3e 18 e5 c4 fa 95 65 07 d8 4b 31 4b fa a7 85 74 |>.....e..K1K...t| +00000230 6c 1c a3 7c 7b c6 20 e0 1f 28 33 6d 61 93 d0 7d |l..|{. ..(3ma..}| +00000240 e7 c4 5c 27 c9 d9 ca f9 fe 21 6f 7f 05 34 37 54 |..\'.....!o..47T| +00000250 30 59 68 e1 04 36 60 52 d7 fc 4f 8c 67 f6 42 88 |0Yh..6`R..O.g.B.| +00000260 bc 41 5f 8e 2c 05 dd 6a b0 49 6c d8 8e 9c 9e 06 |.A_.,..j.Il.....| +00000270 35 f9 f1 33 f2 54 b0 3f 9e bd 4f c7 48 aa a3 9e |5..3.T.?..O.H...| +00000280 fe 69 79 16 e0 5a ca 48 72 fe 52 4a f1 6f f1 e0 |.iy..Z.Hr.RJ.o..| +00000290 8c fe 16 15 ce c9 87 dc 9b 66 4d 3a bb 05 21 82 |.........fM:..!.| +000002a0 21 65 cb 7b da 06 1a 0b 53 ee 60 e4 79 0f bc 5d |!e.{....S.`.y..]| +000002b0 b6 52 fd 3b 33 28 97 6c 67 d7 ab 3d b0 da bb ac |.R.;3(.lg..=....| +000002c0 0d d9 06 81 a3 6c 1f ad b8 05 20 63 2b c7 cb 4b |.....l.... c+..K| +000002d0 e2 96 6e 3d f1 9c 0a 6a c6 01 3e 3a d0 54 c8 09 |..n=...j..>:.T..| +000002e0 9b 17 a0 cc d6 d0 82 d1 02 a8 eb 9d 91 7e 30 b9 |.............~0.| +000002f0 3d 5e 6d 43 fc 50 f8 9f 80 67 7a e3 33 30 cd b7 |=^mC.P...gz.30..| +00000300 00 b3 bc 17 50 82 6c 80 67 bd c4 12 11 b1 53 22 |....P.l.g.....S"| +00000310 96 67 07 90 d4 54 5c f1 5d ca cd f8 b5 35 94 e0 |.g...T\.]....5..| +00000320 21 e6 58 d7 b0 32 ca 24 90 11 30 f5 2b 1d ca 3d |!.X..2.$..0.+..=| +00000330 6a 6d 35 fa 17 03 03 00 99 ad ab 79 79 28 a0 a9 |jm5........yy(..| +00000340 9a cd 6d 8d 8c 92 2e 83 3d d4 be c7 50 61 f5 49 |..m.....=...Pa.I| +00000350 97 6c ab 92 d4 a7 1a 6f fc 5b dd 6e 73 0d bd d2 |.l.....o.[.ns...| +00000360 09 52 9f c9 de bb 8d 09 0a 4f e0 c5 9a 08 79 4c |.R.......O....yL| +00000370 fc 01 b3 94 45 f6 1d bd 8d 23 62 14 14 65 4c 2a |....E....#b..eL*| +00000380 d9 ad 8f 76 5a 5e 9d da 68 37 c7 b1 54 1e b4 bd |...vZ^..h7..T...| +00000390 d3 15 b8 89 94 87 8b 17 17 0f 4c dc db a8 3b 2f |..........L...;/| +000003a0 e5 e2 25 d6 ec f6 f4 bb ab d0 c5 7f 2a cb c6 57 |..%.........*..W| +000003b0 84 50 3a e7 62 8b 76 ae 6a 06 6b 85 1c 23 f1 d1 |.P:.b.v.j.k..#..| +000003c0 10 e2 6f 57 8c 20 7d da 2d f8 bc c5 df 4e 7c 22 |..oW. }.-....N|"| +000003d0 d8 36 17 03 03 00 35 62 fa d4 65 7f 9a 97 5b ec |.6....5b..e...[.| +000003e0 25 4a 3a 43 18 08 08 fb 7f 9d 3b 73 64 9e f3 7a |%J:C......;sd..z| +000003f0 28 f1 a0 0e 00 7a 51 74 0e 6b 90 c6 39 7a 09 98 |(....zQt.k..9z..| +00000400 6e d8 63 cc 1f f0 8f bc 37 66 27 a0 |n.c.....7f'.| >>> Flow 3 (client to server) -00000000 14 03 03 00 01 01 17 03 03 00 35 f1 7c 55 b2 e9 |..........5.|U..| -00000010 01 cd 57 d5 17 17 30 51 43 74 46 00 83 c7 d2 73 |..W...0QCtF....s| -00000020 2b ff 57 45 5c 13 d9 9e ec 56 c5 f1 d2 26 00 76 |+.WE\....V...&.v| -00000030 75 5c f0 3c 80 39 74 4e 38 72 35 39 a3 29 4d ff |u\.<.9tN8r59.)M.| -00000040 17 03 03 00 17 43 aa f1 73 de 22 92 8c 54 2c 3f |.....C..s."..T,?| -00000050 c6 f2 f1 07 27 b2 f6 0e 54 79 4d 05 17 03 03 00 |....'...TyM.....| -00000060 13 a5 64 ef ae 3f f0 52 08 71 9e 24 dc ea f1 50 |..d..?.R.q.$...P| -00000070 b5 27 20 54 |.' T| +00000000 14 03 03 00 01 01 17 03 03 00 35 ba 59 57 3e a3 |..........5.YW>.| +00000010 cd 02 7f 7c c2 16 f5 6b ec 42 66 aa a2 7a 3d 47 |...|...k.Bf..z=G| +00000020 43 c9 02 4b a3 72 d0 4d fa f8 32 28 1a 19 16 6a |C..K.r.M..2(...j| +00000030 7c 0e 4a 75 80 94 34 fe 30 7b d0 52 15 48 10 30 ||.Ju..4.0{.R.H.0| +00000040 17 03 03 00 17 5d de 53 df 00 21 ca 6d 69 ff 45 |.....].S..!.mi.E| +00000050 2e 53 57 db 3f 8d d8 6c 5a e1 f8 cc 17 03 03 00 |.SW.?..lZ.......| +00000060 13 43 d9 94 95 41 af 1d 80 a7 f2 28 2a 44 50 8d |.C...A.....(*DP.| +00000070 41 8f 82 09 |A...| diff --git a/src/crypto/tls/testdata/Client-TLSv13-X25519-ECDHE b/src/crypto/tls/testdata/Client-TLSv13-X25519-ECDHE index 7de7d279b2..4e3eb760e6 100644 --- a/src/crypto/tls/testdata/Client-TLSv13-X25519-ECDHE +++ b/src/crypto/tls/testdata/Client-TLSv13-X25519-ECDHE @@ -1,5 +1,5 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 f2 01 00 00 ee 03 03 00 00 00 00 00 |................| +00000000 16 03 01 00 f4 01 00 00 f0 03 03 00 00 00 00 00 |................| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 20 00 00 00 00 |........... ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| @@ -7,84 +7,84 @@ 00000050 cc a9 c0 2f c0 2b c0 30 c0 2c c0 27 c0 13 c0 23 |.../.+.0.,.'...#| 00000060 c0 09 c0 14 c0 0a 00 9c 00 9d 00 3c 00 2f 00 35 |...........<./.5| 00000070 c0 12 00 0a 00 05 c0 11 c0 07 13 01 13 03 13 02 |................| -00000080 01 00 00 73 00 05 00 05 01 00 00 00 00 00 0a 00 |...s............| -00000090 04 00 02 00 1d 00 0b 00 02 01 00 00 0d 00 18 00 |................| -000000a0 16 08 04 08 05 08 06 04 01 04 03 05 01 05 03 06 |................| -000000b0 01 06 03 02 01 02 03 ff 01 00 01 00 00 12 00 00 |................| -000000c0 00 2b 00 09 08 03 04 03 03 03 02 03 01 00 33 00 |.+............3.| -000000d0 26 00 24 00 1d 00 20 2f e5 7d a3 47 cd 62 43 15 |&.$... /.}.G.bC.| -000000e0 28 da ac 5f bb 29 07 30 ff f6 84 af c4 cf c2 ed |(.._.).0........| -000000f0 90 99 5f 58 cb 3b 74 |.._X.;t| +00000080 01 00 00 75 00 05 00 05 01 00 00 00 00 00 0a 00 |...u............| +00000090 04 00 02 00 1d 00 0b 00 02 01 00 00 0d 00 1a 00 |................| +000000a0 18 08 04 04 03 08 07 08 05 08 06 04 01 05 01 06 |................| +000000b0 01 05 03 06 03 02 01 02 03 ff 01 00 01 00 00 12 |................| +000000c0 00 00 00 2b 00 09 08 03 04 03 03 03 02 03 01 00 |...+............| +000000d0 33 00 26 00 24 00 1d 00 20 2f e5 7d a3 47 cd 62 |3.&.$... /.}.G.b| +000000e0 43 15 28 da ac 5f bb 29 07 30 ff f6 84 af c4 cf |C.(.._.).0......| +000000f0 c2 ed 90 99 5f 58 cb 3b 74 |...._X.;t| >>> Flow 2 (server to client) -00000000 16 03 03 00 7a 02 00 00 76 03 03 cd c7 29 34 e2 |....z...v....)4.| -00000010 96 86 e5 32 80 01 ea b9 3f d1 c5 90 da 7d 6e b9 |...2....?....}n.| -00000020 6f c2 f3 de 0f 16 7c c6 be 22 9f 20 00 00 00 00 |o.....|..". ....| +00000000 16 03 03 00 7a 02 00 00 76 03 03 5d 2e e6 ba 34 |....z...v..]...4| +00000010 6c 42 bb 48 58 fe c5 f0 95 f9 34 11 04 b5 2a f4 |lB.HX.....4...*.| +00000020 f1 16 41 db 14 a0 19 d8 43 7c 09 20 00 00 00 00 |..A.....C|. ....| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000040 00 00 00 00 00 00 00 00 00 00 00 00 13 01 00 00 |................| -00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 71 |..+.....3.$... q| -00000060 a3 1e 19 38 17 d7 fb c4 d7 c0 c5 0b 1a 4f 43 b8 |...8.........OC.| -00000070 36 73 5b ba ac 71 44 76 e5 18 a8 5f f0 e9 53 14 |6s[..qDv..._..S.| -00000080 03 03 00 01 01 17 03 03 00 17 2b d0 f2 01 36 99 |..........+...6.| -00000090 3c fe 38 af 22 1c 4f ec 1f 31 a2 48 31 a4 b9 83 |<.8.".O..1.H1...| -000000a0 74 17 03 03 02 6d 87 69 ac 88 28 88 6e 62 c8 96 |t....m.i..(.nb..| -000000b0 b9 32 1a 3d f6 a3 10 70 06 bd a6 3b d1 e4 a6 3a |.2.=...p...;...:| -000000c0 be e0 93 61 27 d4 bf 1f b0 17 f0 19 b3 30 e1 5e |...a'........0.^| -000000d0 94 18 13 78 9b 9d d5 16 b2 c7 8a 21 54 c9 f0 31 |...x.......!T..1| -000000e0 09 5b 6c 7f 22 79 9f 33 66 b7 e7 ea d4 11 63 5f |.[l."y.3f.....c_| -000000f0 05 21 e2 1a 66 96 ac 62 10 be 4b 51 73 df 29 9e |.!..f..b..KQs.).| -00000100 71 92 1a cb d2 d3 99 0c a7 35 7d 12 b4 44 d7 96 |q........5}..D..| -00000110 2b 29 9d 49 70 11 8c f8 5c 80 a4 98 56 21 66 2b |+).Ip...\...V!f+| -00000120 ac 72 1c 2e 86 e3 62 d2 e5 f1 7f 58 97 7b ac 85 |.r....b....X.{..| -00000130 a8 c1 99 62 3b 8c 7f 47 95 09 e7 dc 7d 31 ed d2 |...b;..G....}1..| -00000140 9b f8 71 fb 15 9c 80 1c cc 28 dd 4d ef 95 89 92 |..q......(.M....| -00000150 1f e8 c0 c3 78 b9 8f 92 88 e9 57 f6 2b 30 90 f1 |....x.....W.+0..| -00000160 27 b8 d8 65 0e 12 6d 51 9c e8 f2 5d b0 58 90 88 |'..e..mQ...].X..| -00000170 22 e3 fb 0e 2e 1f 6b 6b a2 8e 52 2c a7 2a 32 03 |".....kk..R,.*2.| -00000180 a4 e9 fc b7 e4 ec f5 73 37 fc bb d3 62 68 90 3d |.......s7...bh.=| -00000190 69 02 65 d5 35 6c 9b 89 68 c2 93 df 84 e3 f0 5f |i.e.5l..h......_| -000001a0 35 c7 05 d1 4d 60 93 b9 1d 5e 39 78 fd ed 85 f7 |5...M`...^9x....| -000001b0 1b 82 f6 cc 0a 02 5e f6 e0 7a 78 55 3a 12 e3 b3 |......^..zxU:...| -000001c0 45 ab 7e f0 12 2e 28 11 fd 73 7e 05 ef e1 c2 a0 |E.~...(..s~.....| -000001d0 45 ac 2e 3c 0b 00 69 ad 01 78 c7 2b 15 4e 6b eb |E..<..i..x.+.Nk.| -000001e0 65 3d d8 c2 4b e6 9d 73 35 62 4f 58 d1 ec 7f 8d |e=..K..s5bOX....| -000001f0 6e 56 66 06 cf 90 56 09 70 53 bd ed 16 ff c1 14 |nVf...V.pS......| -00000200 7f 1b 13 80 73 d2 7d f3 85 99 bd f2 f8 16 65 00 |....s.}.......e.| -00000210 97 51 12 64 7a 34 20 b1 1a d9 fb 5c 38 e6 b7 ae |.Q.dz4 ....\8...| -00000220 99 34 6d 1a 87 30 09 96 13 04 f9 4d 51 b7 f5 76 |.4m..0.....MQ..v| -00000230 30 ac 18 05 ba e4 0e 3d 28 6e 09 5e ec 52 18 d4 |0......=(n.^.R..| -00000240 1e da d3 7e b4 16 ff 76 4e 31 10 42 5a 7e 75 ea |...~...vN1.BZ~u.| -00000250 86 82 4e ad 7a 11 1d a8 6b ab 5c 7d bd 7b 07 b8 |..N.z...k.\}.{..| -00000260 aa bb 13 57 4a 24 d1 92 1d bb b9 7b 46 8b 7e 69 |...WJ$.....{F.~i| -00000270 9c a5 ea a6 9d 20 42 b1 92 4f b6 0e 48 8a 29 be |..... B..O..H.).| -00000280 67 19 b8 5b 27 7f fd c0 7e b1 01 e0 19 42 bb 19 |g..['...~....B..| -00000290 c4 91 b0 52 3e 0b 4c a6 2b 03 ff e3 e2 b9 d7 54 |...R>.L.+......T| -000002a0 77 4c 04 83 c6 41 3b 8f ee 8a 70 d8 16 e7 02 6f |wL...A;...p....o| -000002b0 13 9c a4 22 1d 1b cc 9e 6a 0e e8 96 94 54 df 2e |..."....j....T..| -000002c0 8a 60 53 e2 45 30 7b 8f 46 d2 ab 0e c1 6d 75 e2 |.`S.E0{.F....mu.| -000002d0 cf 6c fe 9e 2d 31 af 9e 51 73 a6 39 02 ff 7b c2 |.l..-1..Qs.9..{.| -000002e0 da 66 d6 27 87 9d 51 99 c9 7e 1b e7 43 8d 1e dc |.f.'..Q..~..C...| -000002f0 49 93 0e 9c 47 5c d6 97 19 ee 80 6d 4f 92 9d 25 |I...G\.....mO..%| -00000300 ff ea bf ab 9a 64 a6 d4 70 80 5e 13 42 48 75 4e |.....d..p.^.BHuN| -00000310 8c c3 9b 17 03 03 00 99 7b 4a 09 b6 85 dc 5c 10 |........{J....\.| -00000320 76 05 e8 11 e1 bc 63 ec ec b8 19 14 f3 95 16 6b |v.....c........k| -00000330 2a a6 e1 ae b9 1c e0 5c 94 20 49 62 8c fd 76 7e |*......\. Ib..v~| -00000340 0e f9 9f ec 0d 01 47 4b 86 a8 b1 9f a2 bc 83 85 |......GK........| -00000350 de e8 e0 2f c4 a4 f6 90 72 57 38 ad 2e aa 1e 4f |.../....rW8....O| -00000360 d4 8b e1 a2 b8 ba 80 99 ad 57 09 72 98 1c 5b 7b |.........W.r..[{| -00000370 a7 35 a2 c5 4a be 76 14 ee d4 63 a9 96 5e 33 7c |.5..J.v...c..^3|| -00000380 0a e0 15 0d 14 19 f1 5a 5a e4 2c 9c 22 19 db e3 |.......ZZ.,."...| -00000390 ea ee a1 c6 f8 1d 22 cc 5c 34 94 fa af 02 b0 26 |......".\4.....&| -000003a0 8d 25 67 e6 f5 74 a9 38 38 37 57 ee 11 ac 0a 73 |.%g..t.887W....s| -000003b0 01 17 03 03 00 35 bf ef 2c 2e 6c ae 90 ba d7 e0 |.....5..,.l.....| -000003c0 99 b3 ea 42 db 8e ad 03 5b af 93 1e 35 3a fb f7 |...B....[...5:..| -000003d0 87 bc 90 b6 98 ad e2 e6 1c 24 3b c1 20 8c 1a 79 |.........$;. ..y| -000003e0 97 ad e3 8b 08 7b cc 7e 2b 98 fa |.....{.~+..| +00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 82 |..+.....3.$... .| +00000060 de 1b d1 83 7a e1 46 cc c7 36 15 62 48 07 6b f6 |....z.F..6.bH.k.| +00000070 eb 0a 53 a3 34 cd 34 ee cc 0c d0 c9 02 d5 38 14 |..S.4.4.......8.| +00000080 03 03 00 01 01 17 03 03 00 17 3d 0c 61 12 1b 55 |..........=.a..U| +00000090 6e f4 13 59 c8 4a e7 12 63 5d bf be 34 9f d7 2a |n..Y.J..c]..4..*| +000000a0 c2 17 03 03 02 6d 82 e8 43 93 e4 80 4d a7 d2 cf |.....m..C...M...| +000000b0 43 9d 71 8d cc 78 e8 e9 58 7e 28 53 57 6d 95 1e |C.q..x..X~(SWm..| +000000c0 fb 98 05 ec 66 47 d9 a1 6a b5 f4 28 09 4a 6c 4c |....fG..j..(.JlL| +000000d0 ee a0 1a 86 e7 29 c0 0e d8 e0 ca 2d bb 50 e4 34 |.....).....-.P.4| +000000e0 8d 66 be 54 b5 df 94 fc 69 0e a6 9a 76 8b 8f f5 |.f.T....i...v...| +000000f0 a9 01 1a 1d 8d b0 ae a9 0c 10 58 13 f9 91 80 43 |..........X....C| +00000100 69 f8 3f 03 14 8e 73 1a ce 52 72 86 3d 60 8b 0f |i.?...s..Rr.=`..| +00000110 38 e7 4b 43 f0 b3 4b 12 3a a7 cd 4b ac ef 7d fb |8.KC..K.:..K..}.| +00000120 27 3a 38 36 ad a5 90 eb 57 80 47 99 bc c6 58 55 |':86....W.G...XU| +00000130 15 6f 53 f7 83 ca 2b 89 ae be 23 9a 83 3c 6b b1 |.oS...+...#..>> Flow 3 (client to server) -00000000 14 03 03 00 01 01 17 03 03 00 35 ce 50 b5 dc 27 |..........5.P..'| -00000010 34 5b ea 1b 27 76 67 d1 9e 24 cf f9 51 4a 9a 6b |4[..'vg..$..QJ.k| -00000020 cd 57 12 b2 5a 52 03 be e8 62 e2 29 64 1e 16 f1 |.W..ZR...b.)d...| -00000030 61 af 70 a7 11 f1 41 ef e3 44 da 0e 9b 90 05 ad |a.p...A..D......| -00000040 17 03 03 00 17 b4 9d 4e de fb da 13 02 ad 51 40 |.......N......Q@| -00000050 b0 55 1d 89 ec 09 2b 52 e5 51 34 1f 17 03 03 00 |.U....+R.Q4.....| -00000060 13 52 89 42 ba d7 14 f0 53 b4 b1 5a a5 a3 37 55 |.R.B....S..Z..7U| -00000070 bd f8 e9 e5 |....| +00000000 14 03 03 00 01 01 17 03 03 00 35 7d 5e 95 38 a2 |..........5}^.8.| +00000010 d3 f4 04 59 57 2a 1a 86 ac 12 8e 17 88 fb 52 25 |...YW*........R%| +00000020 1d 19 2c c5 ac 57 c9 bf af 07 e7 c1 4d f3 dd f0 |..,..W......M...| +00000030 13 ad a1 73 07 32 a4 c5 7c 9e ad 5a 88 59 57 4b |...s.2..|..Z.YWK| +00000040 17 03 03 00 17 e2 65 4f bd 1f bb 00 a1 6b ae a4 |......eO.....k..| +00000050 9d d3 d2 6e 7b 62 b5 09 19 d6 8f 1b 17 03 03 00 |...n{b..........| +00000060 13 96 de 94 2b a7 bb c5 4b 7e 02 b2 27 07 4d 49 |....+...K~..'.MI| +00000070 32 2b 83 48 |2+.H| diff --git a/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndECDSAGiven b/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndECDSAGiven index 07a000a7b4..c8e4998a7e 100644 --- a/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndECDSAGiven +++ b/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndECDSAGiven @@ -1,7 +1,7 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 97 01 00 00 93 03 03 f9 a8 6c 6d 8e |.............lm.| -00000010 46 32 35 bb 63 0e 00 89 d0 e2 36 04 62 73 5f 1a |F25.c.....6.bs_.| -00000020 32 39 a1 a8 0d 5d 65 e1 3d 79 43 00 00 04 00 2f |29...]e.=yC..../| +00000000 16 03 01 00 97 01 00 00 93 03 03 66 1f 74 64 d2 |...........f.td.| +00000010 fb 53 f5 a4 7e ea ad 25 d8 e9 91 62 49 87 de 60 |.S..~..%...bI..`| +00000020 0d 30 d5 34 21 7a 34 b4 2f 95 02 00 00 04 00 2f |.0.4!z4./....../| 00000030 00 ff 01 00 00 66 00 00 00 0e 00 0c 00 00 09 31 |.....f.........1| 00000040 32 37 2e 30 2e 30 2e 31 00 0b 00 04 03 00 01 02 |27.0.0.1........| 00000050 00 0a 00 0c 00 0a 00 1d 00 17 00 1e 00 19 00 18 |................| @@ -51,10 +51,10 @@ 00000260 f1 6c 04 ed 73 bb b3 43 77 8d 0c 1c f1 0f a1 d8 |.l..s..Cw.......| 00000270 40 83 61 c9 4c 72 2b 9d ae db 46 06 06 4d f4 c1 |@.a.Lr+...F..M..| 00000280 b3 3e c0 d1 bd 42 d4 db fe 3d 13 60 84 5c 21 d3 |.>...B...=.`.\!.| -00000290 3b e9 fa e7 16 03 03 00 21 0d 00 00 1d 02 01 40 |;.......!......@| -000002a0 00 16 08 04 08 05 08 06 04 01 04 03 05 01 05 03 |................| -000002b0 06 01 06 03 02 01 02 03 00 00 16 03 03 00 04 0e |................| -000002c0 00 00 00 |...| +00000290 3b e9 fa e7 16 03 03 00 23 0d 00 00 1f 02 01 40 |;.......#......@| +000002a0 00 18 08 04 04 03 08 07 08 05 08 06 04 01 05 01 |................| +000002b0 06 01 05 03 06 03 02 01 02 03 00 00 16 03 03 00 |................| +000002c0 04 0e 00 00 00 |.....| >>> Flow 3 (client to server) 00000000 16 03 03 02 0a 0b 00 02 06 00 02 03 00 02 00 30 |...............0| 00000010 82 01 fc 30 82 01 5e 02 09 00 9a 30 84 6c 26 35 |...0..^....0.l&5| @@ -89,40 +89,40 @@ 000001e0 be e8 91 b3 da 1a f5 5d a3 23 f5 26 8b 45 70 8d |.......].#.&.Ep.| 000001f0 65 62 9b 7e 01 99 3d 18 f6 10 9a 38 61 9b 2e 57 |eb.~..=....8a..W| 00000200 e4 fa cc b1 8a ce e2 23 a0 87 f0 e1 67 51 eb 16 |.......#....gQ..| -00000210 03 03 00 86 10 00 00 82 00 80 9f 2d b7 51 a0 7b |...........-.Q.{| -00000220 1f 57 7c 20 9f 8a 3a 23 19 2a 3f 29 31 c9 97 12 |.W| ..:#.*?)1...| -00000230 fd 40 92 45 eb cd bf 45 19 b1 7a 80 14 22 a4 b7 |.@.E...E..z.."..| -00000240 68 7a 6e f9 c1 a3 3d 44 ad 22 b1 e1 ae 52 2c a7 |hzn...=D."...R,.| -00000250 fe 95 30 b7 cc 94 ce 9b 9d 94 ff 80 1f ca 75 90 |..0...........u.| -00000260 7e d5 20 15 eb 46 b4 78 d8 ca e0 42 fe a0 aa d5 |~. ..F.x...B....| -00000270 a3 69 34 61 1a 14 93 4e 1b 52 81 6f ae 90 59 3b |.i4a...N.R.o..Y;| -00000280 ac 7f a1 23 75 0b 97 7f 16 6f 85 99 68 b0 57 34 |...#u....o..h.W4| -00000290 de 0e 60 62 61 6d 31 a8 46 9a 16 03 03 00 92 0f |..`bam1.F.......| -000002a0 00 00 8e 04 03 00 8a 30 81 87 02 41 74 3c e9 2d |.......0...At<.-| -000002b0 47 15 d6 a5 e8 21 b6 2c d4 a4 83 3f ca 90 35 2f |G....!.,...?..5/| -000002c0 ae 36 26 81 49 ae 6c d9 d3 13 17 7f 8f 8a a0 2f |.6&.I.l......../| -000002d0 92 a2 6d 29 fb 09 6a 4d b5 ea bc f0 05 43 bc fa |..m)..jM.....C..| -000002e0 6c ab 89 25 84 21 78 1c f8 86 36 86 1b 02 42 00 |l..%.!x...6...B.| -000002f0 98 0a bf 1e ee 62 85 43 c1 6c f0 49 9b 9a 46 96 |.....b.C.l.I..F.| -00000300 32 24 66 3d 1e 09 e1 7e 47 af 6d d1 9e 5d 6f 85 |2$f=...~G.m..]o.| -00000310 74 dc 7e ac c9 2b b7 e3 40 0a 25 45 76 6b 6e 5c |t.~..+..@.%Evkn\| -00000320 6f 42 59 5e 5e a4 b3 3d 4a c2 d7 1c 91 74 15 f9 |oBY^^..=J....t..| -00000330 e3 14 03 03 00 01 01 16 03 03 00 40 57 f7 7c d6 |...........@W.|.| -00000340 1a da 14 09 b3 8f 75 cc c7 dd fe 2b 4d 11 3e 16 |......u....+M.>.| -00000350 09 5a a0 d7 c3 05 b6 28 75 27 58 64 37 af 46 28 |.Z.....(u'Xd7.F(| -00000360 74 a8 4d 9b c4 9d 5c 6c f2 e3 be 45 65 93 be 89 |t.M...\l...Ee...| -00000370 b6 5f 24 2b 26 3c d0 43 ce 05 91 c7 |._$+&<.C....| +00000210 03 03 00 86 10 00 00 82 00 80 2f 1e 5b 62 64 9e |........../.[bd.| +00000220 68 97 bc 17 8d aa e1 4e c7 cb 48 a1 cf dd bf e7 |h......N..H.....| +00000230 18 5e e0 6f da 03 68 f0 be 8a e8 4f a6 c6 e1 58 |.^.o..h....O...X| +00000240 eb 8f 10 82 36 de bf 7a f2 ca eb af 42 9a 4e b2 |....6..z....B.N.| +00000250 25 36 4f e5 dd 04 a2 93 f0 af 4c ca c7 cc 3e 5c |%6O.......L...>\| +00000260 5b 90 31 1a a8 e8 d5 a8 db c1 9d 51 ec 6d 36 20 |[.1........Q.m6 | +00000270 ef 64 41 a7 0e 5a cd 51 9d 0c e4 1d 27 0b 0a 4f |.dA..Z.Q....'..O| +00000280 2b c3 92 8d ff 9e 6a f7 47 f8 34 5a 24 e6 ce 47 |+.....j.G.4Z$..G| +00000290 d6 da 88 1f 2c f1 93 ba 0e 3f 16 03 03 00 93 0f |....,....?......| +000002a0 00 00 8f 04 03 00 8b 30 81 88 02 42 01 c1 a5 6a |.......0...B...j| +000002b0 ed 3b c8 6e 4c 41 96 db 17 f3 f1 56 8a 9d a4 9e |.;.nLA.....V....| +000002c0 31 8f f9 a7 78 02 ed bd f4 97 b6 f1 d4 16 ab 22 |1...x.........."| +000002d0 34 3f 83 72 11 1b 47 b6 e4 03 50 56 1d 9c 21 a2 |4?.r..G...PV..!.| +000002e0 cf 4a 16 9c 12 86 03 fd f0 5c 9a 2f db fb 02 42 |.J.......\./...B| +000002f0 01 ae cd 98 fc 91 06 11 d1 99 0c 67 5f dd 1d 2b |...........g_..+| +00000300 7c a6 b0 af b0 e1 2d 81 32 2e 47 f1 48 f7 9a f3 ||.....-.2.G.H...| +00000310 9c a2 eb 6a ea b8 02 91 d9 60 9e ab ed 51 af db |...j.....`...Q..| +00000320 05 3e 36 a9 df 57 ff b5 6b aa e7 8e 24 64 ef 84 |.>6..W..k...$d..| +00000330 b7 58 14 03 03 00 01 01 16 03 03 00 40 8d cd c6 |.X..........@...| +00000340 3c 90 dc 8b 6b 94 09 a8 80 1e 8c 4f 70 d6 c2 90 |<...k......Op...| +00000350 16 35 92 7a ce be a9 c8 17 fc 6b 48 da a5 af bf |.5.z......kH....| +00000360 9a a5 e0 0f 77 aa b8 5f b5 5d 95 7f a7 b5 a1 4a |....w.._.].....J| +00000370 8f 90 95 27 df 17 cc 98 34 32 6c 5a 60 |...'....42lZ`| >>> Flow 4 (server to client) 00000000 14 03 03 00 01 01 16 03 03 00 40 00 00 00 00 00 |..........@.....| -00000010 00 00 00 00 00 00 00 00 00 00 00 54 54 12 18 10 |...........TT...| -00000020 cf 34 c3 2d 68 91 25 8e 2f 04 26 74 c1 bc 96 a1 |.4.-h.%./.&t....| -00000030 65 a5 4e 88 58 fe 95 81 59 57 74 bf 0a 9d f9 98 |e.N.X...YWt.....| -00000040 cb e2 7d 39 64 3e f4 09 9d e2 aa 17 03 03 00 40 |..}9d>.........@| +00000010 00 00 00 00 00 00 00 00 00 00 00 f0 c3 7c f0 20 |.............|. | +00000020 3f 75 d0 c4 b5 2d 76 82 22 9e 8c 8c 6a 83 95 84 |?u...-v."...j...| +00000030 22 54 20 d6 62 d8 75 69 32 90 e9 d4 07 fa 6a 01 |"T .b.ui2.....j.| +00000040 15 b8 bc 88 8d 40 ef 18 48 80 25 17 03 03 00 40 |.....@..H.%....@| 00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| -00000060 82 e5 1d 01 10 a6 dd 52 42 b6 e7 8b 3f 45 03 39 |.......RB...?E.9| -00000070 f1 3c 27 73 f0 8b a7 98 99 e9 da b8 88 34 25 49 |.<'s.........4%I| -00000080 38 4d 6b 3a 8d f8 61 c8 b7 0d 80 4b 7b 83 e3 9a |8Mk:..a....K{...| +00000060 03 32 97 2d 46 23 92 df 55 de 53 b0 91 63 09 c2 |.2.-F#..U.S..c..| +00000070 21 23 c9 23 fa e6 f2 a3 e0 3e 90 a4 82 d8 6a 36 |!#.#.....>....j6| +00000080 65 af ee 69 a6 86 41 c8 7e 14 d4 bb 93 7d be 53 |e..i..A.~....}.S| 00000090 15 03 03 00 30 00 00 00 00 00 00 00 00 00 00 00 |....0...........| -000000a0 00 00 00 00 00 4c b8 9a e7 90 56 f7 ce 20 41 bf |.....L....V.. A.| -000000b0 44 f4 b7 85 ff 97 e9 43 4a 09 9e 7d 0e 91 1d 56 |D......CJ..}...V| -000000c0 2d eb fb 44 4b |-..DK| +000000a0 00 00 00 00 00 b2 2f 21 57 e0 e7 2a 16 8e bb 22 |....../!W..*..."| +000000b0 7d 1e e1 34 d5 58 90 94 a7 e7 33 f8 df 9f 60 d9 |}..4.X....3...`.| +000000c0 81 6a 44 0c d3 |.jD..| diff --git a/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndEd25519Given b/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndEd25519Given new file mode 100644 index 0000000000..51288df50f --- /dev/null +++ b/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndEd25519Given @@ -0,0 +1,112 @@ +>>> Flow 1 (client to server) +00000000 16 03 01 00 cb 01 00 00 c7 03 03 26 1e 0e df 93 |...........&....| +00000010 13 67 d7 9a 1f d2 f1 8a 42 a4 04 d1 65 02 17 40 |.g......B...e..@| +00000020 18 a8 c5 30 ce 23 ae 56 47 8e 1f 00 00 38 c0 2c |...0.#.VG....8.,| +00000030 c0 30 00 9f cc a9 cc a8 cc aa c0 2b c0 2f 00 9e |.0.........+./..| +00000040 c0 24 c0 28 00 6b c0 23 c0 27 00 67 c0 0a c0 14 |.$.(.k.#.'.g....| +00000050 00 39 c0 09 c0 13 00 33 00 9d 00 9c 00 3d 00 3c |.9.....3.....=.<| +00000060 00 35 00 2f 00 ff 01 00 00 66 00 00 00 0e 00 0c |.5./.....f......| +00000070 00 00 09 31 32 37 2e 30 2e 30 2e 31 00 0b 00 04 |...127.0.0.1....| +00000080 03 00 01 02 00 0a 00 0c 00 0a 00 1d 00 17 00 1e |................| +00000090 00 19 00 18 00 16 00 00 00 17 00 00 00 0d 00 30 |...............0| +000000a0 00 2e 04 03 05 03 06 03 08 07 08 08 08 09 08 0a |................| +000000b0 08 0b 08 04 08 05 08 06 04 01 05 01 06 01 03 03 |................| +000000c0 02 03 03 01 02 01 03 02 02 02 04 02 05 02 06 02 |................| +>>> Flow 2 (server to client) +00000000 16 03 03 00 31 02 00 00 2d 03 03 00 00 00 00 00 |....1...-.......| +00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| +00000020 00 00 00 44 4f 57 4e 47 52 44 01 00 c0 30 00 00 |...DOWNGRD...0..| +00000030 05 ff 01 00 01 00 16 03 03 02 59 0b 00 02 55 00 |..........Y...U.| +00000040 02 52 00 02 4f 30 82 02 4b 30 82 01 b4 a0 03 02 |.R..O0..K0......| +00000050 01 02 02 09 00 e8 f0 9d 3f e2 5b ea a6 30 0d 06 |........?.[..0..| +00000060 09 2a 86 48 86 f7 0d 01 01 0b 05 00 30 1f 31 0b |.*.H........0.1.| +00000070 30 09 06 03 55 04 0a 13 02 47 6f 31 10 30 0e 06 |0...U....Go1.0..| +00000080 03 55 04 03 13 07 47 6f 20 52 6f 6f 74 30 1e 17 |.U....Go Root0..| +00000090 0d 31 36 30 31 30 31 30 30 30 30 30 30 5a 17 0d |.160101000000Z..| +000000a0 32 35 30 31 30 31 30 30 30 30 30 30 5a 30 1a 31 |250101000000Z0.1| +000000b0 0b 30 09 06 03 55 04 0a 13 02 47 6f 31 0b 30 09 |.0...U....Go1.0.| +000000c0 06 03 55 04 03 13 02 47 6f 30 81 9f 30 0d 06 09 |..U....Go0..0...| +000000d0 2a 86 48 86 f7 0d 01 01 01 05 00 03 81 8d 00 30 |*.H............0| +000000e0 81 89 02 81 81 00 db 46 7d 93 2e 12 27 06 48 bc |.......F}...'.H.| +000000f0 06 28 21 ab 7e c4 b6 a2 5d fe 1e 52 45 88 7a 36 |.(!.~...]..RE.z6| +00000100 47 a5 08 0d 92 42 5b c2 81 c0 be 97 79 98 40 fb |G....B[.....y.@.| +00000110 4f 6d 14 fd 2b 13 8b c2 a5 2e 67 d8 d4 09 9e d6 |Om..+.....g.....| +00000120 22 38 b7 4a 0b 74 73 2b c2 34 f1 d1 93 e5 96 d9 |"8.J.ts+.4......| +00000130 74 7b f3 58 9f 6c 61 3c c0 b0 41 d4 d9 2b 2b 24 |t{.X.la<..A..++$| +00000140 23 77 5b 1c 3b bd 75 5d ce 20 54 cf a1 63 87 1d |#w[.;.u]. T..c..| +00000150 1e 24 c4 f3 1d 1a 50 8b aa b6 14 43 ed 97 a7 75 |.$....P....C...u| +00000160 62 f4 14 c8 52 d7 02 03 01 00 01 a3 81 93 30 81 |b...R.........0.| +00000170 90 30 0e 06 03 55 1d 0f 01 01 ff 04 04 03 02 05 |.0...U..........| +00000180 a0 30 1d 06 03 55 1d 25 04 16 30 14 06 08 2b 06 |.0...U.%..0...+.| +00000190 01 05 05 07 03 01 06 08 2b 06 01 05 05 07 03 02 |........+.......| +000001a0 30 0c 06 03 55 1d 13 01 01 ff 04 02 30 00 30 19 |0...U.......0.0.| +000001b0 06 03 55 1d 0e 04 12 04 10 9f 91 16 1f 43 43 3e |..U..........CC>| +000001c0 49 a6 de 6d b6 80 d7 9f 60 30 1b 06 03 55 1d 23 |I..m....`0...U.#| +000001d0 04 14 30 12 80 10 48 13 49 4d 13 7e 16 31 bb a3 |..0...H.IM.~.1..| +000001e0 01 d5 ac ab 6e 7b 30 19 06 03 55 1d 11 04 12 30 |....n{0...U....0| +000001f0 10 82 0e 65 78 61 6d 70 6c 65 2e 67 6f 6c 61 6e |...example.golan| +00000200 67 30 0d 06 09 2a 86 48 86 f7 0d 01 01 0b 05 00 |g0...*.H........| +00000210 03 81 81 00 9d 30 cc 40 2b 5b 50 a0 61 cb ba e5 |.....0.@+[P.a...| +00000220 53 58 e1 ed 83 28 a9 58 1a a9 38 a4 95 a1 ac 31 |SX...(.X..8....1| +00000230 5a 1a 84 66 3d 43 d3 2d d9 0b f2 97 df d3 20 64 |Z..f=C.-...... d| +00000240 38 92 24 3a 00 bc cf 9c 7d b7 40 20 01 5f aa d3 |8.$:....}.@ ._..| +00000250 16 61 09 a2 76 fd 13 c3 cc e1 0c 5c ee b1 87 82 |.a..v......\....| +00000260 f1 6c 04 ed 73 bb b3 43 77 8d 0c 1c f1 0f a1 d8 |.l..s..Cw.......| +00000270 40 83 61 c9 4c 72 2b 9d ae db 46 06 06 4d f4 c1 |@.a.Lr+...F..M..| +00000280 b3 3e c0 d1 bd 42 d4 db fe 3d 13 60 84 5c 21 d3 |.>...B...=.`.\!.| +00000290 3b e9 fa e7 16 03 03 00 ac 0c 00 00 a8 03 00 1d |;...............| +000002a0 20 2f e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 | /.}.G.bC.(.._.)| +000002b0 07 30 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b |.0.........._X.;| +000002c0 74 08 04 00 80 77 9b ae 6a 97 73 f6 07 89 02 91 |t....w..j.s.....| +000002d0 79 f1 94 12 c6 60 3a 98 7e a8 1a 2b ed 05 5c e3 |y....`:.~..+..\.| +000002e0 1c 6e 10 b8 d3 8e 32 32 6f b0 ae 84 bb fb 8b 19 |.n....22o.......| +000002f0 0e cc ce a6 92 35 ea 79 ee b3 4e 27 04 51 85 30 |.....5.y..N'.Q.0| +00000300 6c 83 da 21 97 2c 18 80 e8 57 b5 ec 24 2c 43 3d |l..!.,...W..$,C=| +00000310 70 b8 38 d1 8c 61 e0 60 40 0d 07 db 74 dc 10 ac |p.8..a.`@...t...| +00000320 7b cd cd 7d 16 0b 14 97 38 01 be 13 a9 04 5e 90 |{..}....8.....^.| +00000330 f4 f3 c5 85 97 ab 1d 62 fa 2d 08 a4 ae 96 b3 0e |.......b.-......| +00000340 09 25 cd 4a 18 16 03 03 00 23 0d 00 00 1f 02 01 |.%.J.....#......| +00000350 40 00 18 08 04 04 03 08 07 08 05 08 06 04 01 05 |@...............| +00000360 01 06 01 05 03 06 03 02 01 02 03 00 00 16 03 03 |................| +00000370 00 04 0e 00 00 00 |......| +>>> Flow 3 (client to server) +00000000 16 03 03 01 3c 0b 00 01 38 00 01 35 00 01 32 30 |....<...8..5..20| +00000010 82 01 2e 30 81 e1 a0 03 02 01 02 02 10 17 d1 81 |...0............| +00000020 93 be 2a 8c 21 20 10 25 15 e8 34 23 4f 30 05 06 |..*.! .%..4#O0..| +00000030 03 2b 65 70 30 12 31 10 30 0e 06 03 55 04 0a 13 |.+ep0.1.0...U...| +00000040 07 41 63 6d 65 20 43 6f 30 1e 17 0d 31 39 30 35 |.Acme Co0...1905| +00000050 31 36 32 31 35 34 32 36 5a 17 0d 32 30 30 35 31 |16215426Z..20051| +00000060 35 32 31 35 34 32 36 5a 30 12 31 10 30 0e 06 03 |5215426Z0.1.0...| +00000070 55 04 0a 13 07 41 63 6d 65 20 43 6f 30 2a 30 05 |U....Acme Co0*0.| +00000080 06 03 2b 65 70 03 21 00 0b e0 b5 60 b5 e2 79 30 |..+ep.!....`..y0| +00000090 3d be e3 1e e0 50 b1 04 c8 6d c7 78 6c 69 2f c5 |=....P...m.xli/.| +000000a0 14 ad 9a 63 6f 79 12 91 a3 4d 30 4b 30 0e 06 03 |...coy...M0K0...| +000000b0 55 1d 0f 01 01 ff 04 04 03 02 05 a0 30 13 06 03 |U...........0...| +000000c0 55 1d 25 04 0c 30 0a 06 08 2b 06 01 05 05 07 03 |U.%..0...+......| +000000d0 02 30 0c 06 03 55 1d 13 01 01 ff 04 02 30 00 30 |.0...U.......0.0| +000000e0 16 06 03 55 1d 11 04 0f 30 0d 82 0b 65 78 61 6d |...U....0...exam| +000000f0 70 6c 65 2e 63 6f 6d 30 05 06 03 2b 65 70 03 41 |ple.com0...+ep.A| +00000100 00 fc 19 17 2a 94 a5 31 fa 29 c8 2e 7f 5b a0 5d |....*..1.)...[.]| +00000110 8a 4e 34 40 39 d6 b3 10 dc 19 fe a0 22 71 b3 f5 |.N4@9......."q..| +00000120 8f a1 58 0d cd f4 f1 85 24 bf e6 3d 14 df df ed |..X.....$..=....| +00000130 0e e1 17 d8 11 a2 60 d0 8a 37 23 2a c2 46 aa 3a |......`..7#*.F.:| +00000140 08 16 03 03 00 25 10 00 00 21 20 b6 8b 9e fb b5 |.....%...! .....| +00000150 86 80 f5 41 57 7c 05 ea d3 42 02 24 c9 5d 26 9c |...AW|...B.$.]&.| +00000160 72 33 19 42 c2 70 a1 91 2c f4 58 16 03 03 00 48 |r3.B.p..,.X....H| +00000170 0f 00 00 44 08 07 00 40 7d 84 b0 a3 bf d4 ed bc |...D...@}.......| +00000180 2c 8f 6f 35 47 96 32 25 4b cf 65 5a 08 ae 5a 58 |,.o5G.2%K.eZ..ZX| +00000190 f4 a2 48 ae 70 95 d1 43 95 53 fb 56 ab 73 da d0 |..H.p..C.S.V.s..| +000001a0 9a 7d 5e fb 83 36 81 89 6e 64 15 f7 57 16 8c 97 |.}^..6..nd..W...| +000001b0 70 07 4f 8c 62 0e 54 0c 14 03 03 00 01 01 16 03 |p.O.b.T.........| +000001c0 03 00 28 54 7e 52 83 b2 61 a1 2f 22 ff 29 f1 6d |..(T~R..a./".).m| +000001d0 fd 7c f6 ac 25 b5 9d 4e e6 6d aa dc 3b cc ed f5 |.|..%..N.m..;...| +000001e0 7a 42 da ce ab 76 a2 31 13 07 90 |zB...v.1...| +>>> Flow 4 (server to client) +00000000 14 03 03 00 01 01 16 03 03 00 28 00 00 00 00 00 |..........(.....| +00000010 00 00 00 22 de 32 e6 4c f8 8c 2b 41 e0 25 cb 48 |...".2.L..+A.%.H| +00000020 f4 98 1f c0 4a 06 ac db b5 c4 a2 09 44 81 c2 c4 |....J.......D...| +00000030 f5 c6 b4 17 03 03 00 25 00 00 00 00 00 00 00 01 |.......%........| +00000040 b0 c7 84 90 55 23 5b 2a cd 67 58 64 cf 43 78 b0 |....U#[*.gXd.Cx.| +00000050 41 61 36 ff 7b 9f 75 5e 92 90 a7 8e 9d 15 03 03 |Aa6.{.u^........| +00000060 00 1a 00 00 00 00 00 00 00 02 5b 94 c8 7a 6e 9a |..........[..zn.| +00000070 f5 23 4b 72 aa e4 c7 62 be 44 78 f5 |.#Kr...b.Dx.| diff --git a/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndGiven b/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndGiven index 37c813d559..bdc4d69e2b 100644 --- a/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndGiven +++ b/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndGiven @@ -1,7 +1,7 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 6b 01 00 00 67 03 03 e1 81 50 38 7b |....k...g....P8{| -00000010 dd e5 6f 1c 98 9e 2b 86 2d 50 95 de 00 b7 87 6e |..o...+.-P.....n| -00000020 b3 d2 20 0f 61 5c 3e 6d 19 0c 76 00 00 04 00 2f |.. .a\>m..v..../| +00000000 16 03 01 00 6b 01 00 00 67 03 03 5f 6c 21 71 7b |....k...g.._l!q{| +00000010 56 1a fb f0 82 41 8b 3f f0 da 02 b6 17 90 f4 37 |V....A.?.......7| +00000020 71 5c 5d f8 00 15 d5 08 3e 9e d2 00 00 04 00 2f |q\].....>....../| 00000030 00 ff 01 00 00 3a 00 00 00 0e 00 0c 00 00 09 31 |.....:.........1| 00000040 32 37 2e 30 2e 30 2e 31 00 0b 00 04 03 00 01 02 |27.0.0.1........| 00000050 00 0a 00 0c 00 0a 00 1d 00 17 00 1e 00 19 00 18 |................| @@ -48,10 +48,10 @@ 00000260 f1 6c 04 ed 73 bb b3 43 77 8d 0c 1c f1 0f a1 d8 |.l..s..Cw.......| 00000270 40 83 61 c9 4c 72 2b 9d ae db 46 06 06 4d f4 c1 |@.a.Lr+...F..M..| 00000280 b3 3e c0 d1 bd 42 d4 db fe 3d 13 60 84 5c 21 d3 |.>...B...=.`.\!.| -00000290 3b e9 fa e7 16 03 03 00 21 0d 00 00 1d 02 01 40 |;.......!......@| -000002a0 00 16 08 04 08 05 08 06 04 01 04 03 05 01 05 03 |................| -000002b0 06 01 06 03 02 01 02 03 00 00 16 03 03 00 04 0e |................| -000002c0 00 00 00 |...| +00000290 3b e9 fa e7 16 03 03 00 23 0d 00 00 1f 02 01 40 |;.......#......@| +000002a0 00 18 08 04 04 03 08 07 08 05 08 06 04 01 05 01 |................| +000002b0 06 01 05 03 06 03 02 01 02 03 00 00 16 03 03 00 |................| +000002c0 04 0e 00 00 00 |.....| >>> Flow 3 (client to server) 00000000 16 03 03 01 fd 0b 00 01 f9 00 01 f6 00 01 f3 30 |...............0| 00000010 82 01 ef 30 82 01 58 a0 03 02 01 02 02 10 5c 19 |...0..X.......\.| @@ -85,40 +85,40 @@ 000001d0 ac 11 b1 28 56 be 1d cd 61 62 84 09 bf d6 80 c6 |...(V...ab......| 000001e0 45 8d 82 2c b4 d8 83 9b db c9 22 b7 2a 12 11 7b |E..,......".*..{| 000001f0 fa 02 3b c1 c9 ff ea c9 9d a8 49 d3 95 d7 d5 0e |..;.......I.....| -00000200 e5 35 16 03 03 00 86 10 00 00 82 00 80 94 94 83 |.5..............| -00000210 d4 bf 82 86 72 fe 90 aa 36 eb 5a 10 df 59 58 f6 |....r...6.Z..YX.| -00000220 c9 ee 1f c8 00 d1 8d d6 6b 06 bf 73 84 ca cb ef |........k..s....| -00000230 08 ba 9f 10 94 70 0f a4 10 e1 de 62 c6 d8 ff e8 |.....p.....b....| -00000240 2f b1 9d 07 40 1f 34 d4 76 46 53 86 51 66 01 38 |/...@.4.vFS.Qf.8| -00000250 18 82 16 8c ff e7 29 83 c3 09 25 2d d9 a0 57 d0 |......)...%-..W.| -00000260 e0 6b 50 dd c2 4a 57 47 b0 1d 5c a0 a5 c3 69 14 |.kP..JWG..\...i.| -00000270 ec 10 ed 30 b4 c0 25 3c 65 d1 31 59 c1 30 9f 77 |...0..%...4%| -00000360 94 63 17 99 fc |.c...| +00000200 e5 35 16 03 03 00 86 10 00 00 82 00 80 9a cf e4 |.5..............| +00000210 f4 ff c6 e1 0e f3 ea 25 27 42 8f 64 39 f3 d8 51 |.......%'B.d9..Q| +00000220 45 cd e5 e5 06 c0 59 31 79 00 1f 59 ac a8 e6 de |E.....Y1y..Y....| +00000230 60 45 00 e4 31 b9 d8 af b4 9a ff 80 c8 bc a2 f1 |`E..1...........| +00000240 14 10 48 e0 5b fc c5 04 0f b2 b4 ea ce 24 cb 88 |..H.[........$..| +00000250 9a 53 e3 e7 94 5a 7c bd 7a f2 fa 12 53 6b 67 53 |.S...Z|.z...SkgS| +00000260 81 18 59 ce b0 a0 37 d0 cb ed c4 b7 fd de c1 ee |..Y...7.........| +00000270 9b 77 09 ba fd a4 29 b9 ca 9c 28 f1 82 5f 6a 0c |.w....)...(.._j.| +00000280 1f 49 4c f4 b5 66 56 31 c5 80 73 46 f1 16 03 03 |.IL..fV1..sF....| +00000290 00 88 0f 00 00 84 08 04 00 80 89 78 b7 73 5b b3 |...........x.s[.| +000002a0 35 95 da f6 a1 3c 45 81 0b f7 19 87 ff d6 55 64 |5.....| +000002d0 cf 4f e7 db 75 a9 8d cd 2f e1 24 1b 26 2a c4 f2 |.O..u.../.$.&*..| +000002e0 5d 7f 84 22 c0 9f 12 07 8e 49 a9 a3 ca 54 45 e0 |]..".....I...TE.| +000002f0 38 58 b2 f7 3a c8 d8 08 4e ae 1b da 5f 3c 80 21 |8X..:...N..._<.!| +00000300 67 3c 28 b1 19 b4 5d b1 d6 f7 79 bd 5a cc 4f f8 |g<(...]...y.Z.O.| +00000310 b1 16 9c fc 79 53 f2 06 a1 fd 14 03 03 00 01 01 |....yS..........| +00000320 16 03 03 00 40 f5 e5 0e b1 54 f8 2f f4 3d c3 03 |....@....T./.=..| +00000330 08 4e 48 67 5c e5 71 de ae 38 3b a8 15 15 99 7c |.NHg\.q..8;....|| +00000340 23 71 0a 3e d3 e2 52 36 ba ac 67 6d 9c b1 24 5b |#q.>..R6..gm..$[| +00000350 6e be ac 82 e2 9d be 00 15 10 93 b8 3a 13 1f 39 |n...........:..9| +00000360 f9 a4 69 7d ba |..i}.| >>> Flow 4 (server to client) 00000000 14 03 03 00 01 01 16 03 03 00 40 00 00 00 00 00 |..........@.....| -00000010 00 00 00 00 00 00 00 00 00 00 00 c6 b8 7e 65 f8 |.............~e.| -00000020 c4 d9 2c 00 11 f4 ae 2b 13 33 84 31 e6 e6 6e d5 |..,....+.3.1..n.| -00000030 b0 8c 12 c9 6d 26 c2 8c 9c d0 2e 1b 3d 68 98 27 |....m&......=h.'| -00000040 a2 f9 92 46 60 40 dc a6 12 c1 ee 17 03 03 00 40 |...F`@.........@| +00000010 00 00 00 00 00 00 00 00 00 00 00 0c ec ca e3 53 |...............S| +00000020 35 9f 4d ed ec 1b c4 53 51 42 01 83 7b 4e dd 8b |5.M....SQB..{N..| +00000030 1c 78 b7 22 46 0b da f3 b4 c2 21 a9 7d 43 b4 53 |.x."F.....!.}C.S| +00000040 fb 50 8f f6 95 74 16 c7 f9 fe df 17 03 03 00 40 |.P...t.........@| 00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| -00000060 70 ae c5 b1 11 36 22 4f 4b 11 cd 75 25 9c 8d 5e |p....6"OK..u%..^| -00000070 8b 3b f0 e0 fd 78 22 c7 e1 14 67 2e 12 13 53 44 |.;...x"...g...SD| -00000080 38 7b f9 53 08 90 c8 95 3a 16 b1 b0 81 ce 44 b3 |8{.S....:.....D.| +00000060 f0 c3 31 40 61 36 8c a3 28 47 d7 b0 5c 66 b2 e0 |..1@a6..(G..\f..| +00000070 72 4c 3f f6 91 0a 70 4b 1b ce ce 73 87 42 89 f5 |rL?...pK...s.B..| +00000080 ce 47 b3 28 17 e7 1b b7 25 7c c1 14 6c 8d 23 40 |.G.(....%|..l.#@| 00000090 15 03 03 00 30 00 00 00 00 00 00 00 00 00 00 00 |....0...........| -000000a0 00 00 00 00 00 a1 82 43 82 46 02 07 98 13 cc a1 |.......C.F......| -000000b0 9f bd 78 9d 7a d0 c3 cc e1 08 46 84 49 97 fb 5c |..x.z.....F.I..\| -000000c0 49 62 01 65 de |Ib.e.| +000000a0 00 00 00 00 00 b4 53 25 de b7 d8 e3 15 17 74 79 |......S%......ty| +000000b0 cf d2 cb 77 c9 f2 d2 17 84 99 6c ff ce 8a 14 80 |...w......l.....| +000000c0 aa bd bc f6 08 |.....| diff --git a/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndPKCS1v15Given b/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndPKCS1v15Given index ebc16c590b..750cff3ab9 100644 --- a/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndPKCS1v15Given +++ b/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedAndPKCS1v15Given @@ -1,7 +1,7 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 6b 01 00 00 67 03 03 a5 db 42 40 b5 |....k...g....B@.| -00000010 57 97 90 6f de 6e 07 7c 3d f6 ce a5 ec 37 52 2e |W..o.n.|=....7R.| -00000020 d9 cf 7c dc f9 66 34 7f ef a3 90 00 00 04 00 2f |..|..f4......../| +00000000 16 03 01 00 6b 01 00 00 67 03 03 b7 55 25 a3 57 |....k...g...U%.W| +00000010 90 c6 59 4a 6e a0 62 cf aa d0 c0 6b 56 d7 a7 a4 |..YJn.b....kV...| +00000020 75 43 5d c9 c2 e8 96 fd eb f1 e2 00 00 04 00 2f |uC]............/| 00000030 00 ff 01 00 00 3a 00 00 00 0e 00 0c 00 00 09 31 |.....:.........1| 00000040 32 37 2e 30 2e 30 2e 31 00 0b 00 04 03 00 01 02 |27.0.0.1........| 00000050 00 0a 00 0c 00 0a 00 1d 00 17 00 1e 00 19 00 18 |................| @@ -48,10 +48,10 @@ 00000260 f1 6c 04 ed 73 bb b3 43 77 8d 0c 1c f1 0f a1 d8 |.l..s..Cw.......| 00000270 40 83 61 c9 4c 72 2b 9d ae db 46 06 06 4d f4 c1 |@.a.Lr+...F..M..| 00000280 b3 3e c0 d1 bd 42 d4 db fe 3d 13 60 84 5c 21 d3 |.>...B...=.`.\!.| -00000290 3b e9 fa e7 16 03 03 00 21 0d 00 00 1d 02 01 40 |;.......!......@| -000002a0 00 16 08 04 08 05 08 06 04 01 04 03 05 01 05 03 |................| -000002b0 06 01 06 03 02 01 02 03 00 00 16 03 03 00 04 0e |................| -000002c0 00 00 00 |...| +00000290 3b e9 fa e7 16 03 03 00 23 0d 00 00 1f 02 01 40 |;.......#......@| +000002a0 00 18 08 04 04 03 08 07 08 05 08 06 04 01 05 01 |................| +000002b0 06 01 05 03 06 03 02 01 02 03 00 00 16 03 03 00 |................| +000002c0 04 0e 00 00 00 |.....| >>> Flow 3 (client to server) 00000000 16 03 03 01 fd 0b 00 01 f9 00 01 f6 00 01 f3 30 |...............0| 00000010 82 01 ef 30 82 01 58 a0 03 02 01 02 02 10 5c 19 |...0..X.......\.| @@ -85,40 +85,40 @@ 000001d0 ac 11 b1 28 56 be 1d cd 61 62 84 09 bf d6 80 c6 |...(V...ab......| 000001e0 45 8d 82 2c b4 d8 83 9b db c9 22 b7 2a 12 11 7b |E..,......".*..{| 000001f0 fa 02 3b c1 c9 ff ea c9 9d a8 49 d3 95 d7 d5 0e |..;.......I.....| -00000200 e5 35 16 03 03 00 86 10 00 00 82 00 80 50 e9 35 |.5...........P.5| -00000210 02 8f b8 95 2f 2c 00 92 dd 06 c9 0b 41 13 2b 1a |..../,......A.+.| -00000220 94 3c 98 24 9e 5b 08 ba aa d2 8c 25 64 01 2c 19 |.<.$.[.....%d.,.| -00000230 2a 10 3d 85 de e6 9d 7e e3 a6 a1 ca 04 85 78 8e |*.=....~......x.| -00000240 4e ff 74 d2 0f 5f c9 6a 27 41 71 78 f9 64 e4 b9 |N.t.._.j'Aqx.d..| -00000250 27 c8 c3 f4 64 f5 e7 9c 5b 02 e5 e7 be a2 aa 5a |'...d...[......Z| -00000260 a6 77 83 7e 6a 4b 5f 18 5c a2 f8 b9 42 3d 06 21 |.w.~jK_.\...B=.!| -00000270 65 88 11 cf 0e 8a 9f c2 0b 7d c4 8e a0 aa 2d d8 |e........}....-.| -00000280 93 15 88 61 8c c4 7c a8 e0 cb 13 6b b0 16 03 03 |...a..|....k....| -00000290 00 88 0f 00 00 84 04 01 00 80 27 77 f1 9a 6e d1 |..........'w..n.| -000002a0 d0 2d e1 cc 69 85 64 67 e0 fa 54 de 93 89 ca e8 |.-..i.dg..T.....| -000002b0 a2 90 09 7b 96 22 f7 d8 f9 3e a5 c3 d0 31 9b 1e |...{."...>...1..| -000002c0 b8 e6 8b 6e 7b 46 87 c2 21 c6 40 b9 d4 ec 54 67 |...n{F..!.@...Tg| -000002d0 ce 49 5e a6 9f 14 cc 84 ea 71 dd e6 b6 f9 e1 2d |.I^......q.....-| -000002e0 d6 dc 35 fa fd ce 39 70 97 15 6e 27 33 a2 da e9 |..5...9p..n'3...| -000002f0 2c a6 5b 1b 18 57 78 a7 47 b8 04 26 35 55 5a 02 |,.[..Wx.G..&5UZ.| -00000300 9a e8 48 73 f7 8a ac e8 59 86 61 2d bd c5 02 a6 |..Hs....Y.a-....| -00000310 72 cc 37 8e ec 93 b5 53 6d f9 14 03 03 00 01 01 |r.7....Sm.......| -00000320 16 03 03 00 40 e0 2f d8 1c fd 1a d0 e1 0c 92 4a |....@./........J| -00000330 8b 2b 01 10 58 8c dc 8f c8 b3 22 42 9b 10 d1 a6 |.+..X....."B....| -00000340 3e fe 3b 94 46 2f 41 ec b6 d3 33 90 95 8c 69 fa |>.;.F/A...3...i.| -00000350 f6 1d 6c a2 45 27 1f d3 d9 6b cb 2d e4 e2 c1 39 |..l.E'...k.-...9| -00000360 5d ed fa a1 b8 |]....| +00000200 e5 35 16 03 03 00 86 10 00 00 82 00 80 a2 92 cd |.5..............| +00000210 ec 2d c5 10 6e 42 8b 0a b3 fc c5 84 c6 b0 9e 61 |.-..nB.........a| +00000220 6c bd 97 9e 63 7c 94 5f 4c 91 ad c1 c1 5e d7 a4 |l...c|._L....^..| +00000230 3e 44 23 c0 fd 5b ea ef fa 68 b9 93 a1 83 b6 ed |>D#..[...h......| +00000240 df 97 1e 39 04 22 d5 8c 44 2f 91 dd fd aa 24 91 |...9."..D/....$.| +00000250 a3 e3 a7 c3 ab 61 71 80 8d b1 fd b9 fa cc 0e 8d |.....aq.........| +00000260 66 e1 9a cc da 95 9f aa 00 c9 a1 24 65 54 86 74 |f..........$eT.t| +00000270 5b ca b6 dc 5b 96 64 ad 60 18 f5 9e 27 dd b1 dc |[...[.d.`...'...| +00000280 47 5a 32 36 41 86 0e db ab e2 67 7f 04 16 03 03 |GZ26A.....g.....| +00000290 00 88 0f 00 00 84 04 01 00 80 5d 71 bd f9 35 58 |..........]q..5X| +000002a0 03 e9 8e 20 e0 bc 70 9e ba ba 82 d9 27 b7 8d 32 |... ..p.....'..2| +000002b0 c8 9a 57 c5 53 af f6 1f 99 75 4e 3d 58 c1 4d 06 |..W.S....uN=X.M.| +000002c0 1a c9 a2 1d de a0 73 9a c6 76 0e 93 d1 fa 00 08 |......s..v......| +000002d0 84 d8 4b 4b 80 59 77 ef fe eb d6 7f 53 6c db e8 |..KK.Yw.....Sl..| +000002e0 60 51 b5 48 41 ba 97 71 f4 b6 4b 94 e5 bd d5 ce |`Q.HA..q..K.....| +000002f0 a6 7c ee f2 1f 84 48 4f d2 27 b2 24 73 b3 c3 0f |.|....HO.'.$s...| +00000300 ea 9f cf 31 de 25 71 1c 91 ec b4 79 2a 47 d0 c3 |...1.%q....y*G..| +00000310 56 cc 30 54 12 fe 59 a4 55 ab 14 03 03 00 01 01 |V.0T..Y.U.......| +00000320 16 03 03 00 40 2b 02 10 71 bb 12 3a 19 18 f0 28 |....@+..q..:...(| +00000330 ea 5e 65 e7 ea d6 64 21 21 b4 c2 04 9b 38 6f 42 |.^e...d!!....8oB| +00000340 dc f7 92 3d 9a ce 4f 9f bd ee 6d 7b 1c cd d7 4b |...=..O...m{...K| +00000350 80 ba 72 09 66 3e 73 00 88 1d 28 3c 59 1d 4b 71 |..r.f>s...(....| >>> Flow 4 (server to client) 00000000 14 03 03 00 01 01 16 03 03 00 40 00 00 00 00 00 |..........@.....| -00000010 00 00 00 00 00 00 00 00 00 00 00 37 e0 14 c7 88 |...........7....| -00000020 ef de eb 58 7c bc 28 35 0e 5d 42 c0 45 5e 7c 50 |...X|.(5.]B.E^|P| -00000030 82 5b f6 4d 28 b6 75 7b b0 bf 01 05 b1 16 e1 d8 |.[.M(.u{........| -00000040 96 0c 4e c5 84 19 64 1e ee be 4c 17 03 03 00 40 |..N...d...L....@| +00000010 00 00 00 00 00 00 00 00 00 00 00 9a 35 84 25 85 |............5.%.| +00000020 58 51 15 f1 61 6a f7 92 a7 0e 1a 62 3f 73 08 3c |XQ..aj.....b?s.<| +00000030 48 e1 f6 75 07 76 4a d4 fc 5d ff 81 d8 39 81 96 |H..u.vJ..]...9..| +00000040 0d 13 be 17 3a 94 4b 9e 22 bf cc 17 03 03 00 40 |....:.K."......@| 00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| -00000060 6a ca ba a3 69 e8 b8 74 19 dc 93 50 df 1c 62 71 |j...i..t...P..bq| -00000070 54 c0 55 c0 aa 40 8e b9 f6 3c fe 54 6f 36 b8 26 |T.U..@...<.To6.&| -00000080 ea 5b e8 83 fc 7b a0 a8 f6 b1 36 7d 8c db c3 8a |.[...{....6}....| +00000060 a4 83 1d d8 97 26 43 9f 99 37 14 4d bf 3a 1e 3e |.....&C..7.M.:.>| +00000070 0c 30 ff 88 b1 22 0d e6 bc a6 2c ce 16 8c 6d d6 |.0..."....,...m.| +00000080 c8 90 96 34 bb 63 08 4c 18 d2 f7 d3 63 ab aa 7f |...4.c.L....c...| 00000090 15 03 03 00 30 00 00 00 00 00 00 00 00 00 00 00 |....0...........| -000000a0 00 00 00 00 00 2c e0 ed 49 c6 bc 76 c4 9d 2e 1c |.....,..I..v....| -000000b0 ca f8 80 61 b8 11 4a 3f 9f ad 7e 0e 79 58 25 bf |...a..J?..~.yX%.| -000000c0 c5 3f 95 9a e9 |.?...| +000000a0 00 00 00 00 00 00 35 b2 33 d0 f1 dd 5b dd c7 8e |......5.3...[...| +000000b0 62 eb cc 0e 7c a0 93 74 d9 65 d3 6e 8c 87 f0 36 |b...|..t.e.n...6| +000000c0 0a 76 0a d8 63 |.v..c| diff --git a/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedNotGiven b/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedNotGiven index 7b38a99abb..833d331697 100644 --- a/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedNotGiven +++ b/src/crypto/tls/testdata/Server-TLSv12-ClientAuthRequestedNotGiven @@ -1,7 +1,7 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 97 01 00 00 93 03 03 23 f3 fb 5f cb |...........#.._.| -00000010 3f 63 8a f2 4c c7 41 cd 64 00 4f 7c 63 66 e1 3f |?c..L.A.d.O|cf.?| -00000020 b6 8d 4e 24 20 35 9c c5 c3 96 e9 00 00 04 00 2f |..N$ 5........./| +00000000 16 03 01 00 97 01 00 00 93 03 03 af 6e 31 55 9f |............n1U.| +00000010 fb 22 73 ce a2 0a b6 a3 3e 13 14 83 09 8c e2 98 |."s.....>.......| +00000020 c3 6f a3 80 79 e4 7c c5 ff 4e a4 00 00 04 00 2f |.o..y.|..N...../| 00000030 00 ff 01 00 00 66 00 00 00 0e 00 0c 00 00 09 31 |.....f.........1| 00000040 32 37 2e 30 2e 30 2e 31 00 0b 00 04 03 00 01 02 |27.0.0.1........| 00000050 00 0a 00 0c 00 0a 00 1d 00 17 00 1e 00 19 00 18 |................| @@ -51,37 +51,37 @@ 00000260 f1 6c 04 ed 73 bb b3 43 77 8d 0c 1c f1 0f a1 d8 |.l..s..Cw.......| 00000270 40 83 61 c9 4c 72 2b 9d ae db 46 06 06 4d f4 c1 |@.a.Lr+...F..M..| 00000280 b3 3e c0 d1 bd 42 d4 db fe 3d 13 60 84 5c 21 d3 |.>...B...=.`.\!.| -00000290 3b e9 fa e7 16 03 03 00 21 0d 00 00 1d 02 01 40 |;.......!......@| -000002a0 00 16 08 04 08 05 08 06 04 01 04 03 05 01 05 03 |................| -000002b0 06 01 06 03 02 01 02 03 00 00 16 03 03 00 04 0e |................| -000002c0 00 00 00 |...| +00000290 3b e9 fa e7 16 03 03 00 23 0d 00 00 1f 02 01 40 |;.......#......@| +000002a0 00 18 08 04 04 03 08 07 08 05 08 06 04 01 05 01 |................| +000002b0 06 01 05 03 06 03 02 01 02 03 00 00 16 03 03 00 |................| +000002c0 04 0e 00 00 00 |.....| >>> Flow 3 (client to server) 00000000 16 03 03 00 07 0b 00 00 03 00 00 00 16 03 03 00 |................| -00000010 86 10 00 00 82 00 80 d7 50 22 1d 9e b8 81 12 e5 |........P"......| -00000020 47 e6 65 cf 82 19 a2 43 9a 5c 7b 44 98 eb d9 ac |G.e....C.\{D....| -00000030 e1 4e f5 9d ad bd 0a 0e 17 07 81 b9 b5 4b bb b1 |.N...........K..| -00000040 95 da 0a 82 67 ba 98 1b cc 45 91 62 ee 36 eb e3 |....g....E.b.6..| -00000050 18 30 34 f6 38 ab 3d 0c a7 2b bd 90 94 49 81 af |.04.8.=..+...I..| -00000060 67 a0 f2 b4 0f c0 09 eb c3 23 24 4b 76 3f cb b9 |g........#$Kv?..| -00000070 4c a3 53 a7 f6 53 34 1b 24 24 2f cc 24 d8 fb 12 |L.S..S4.$$/.$...| -00000080 65 60 cf 06 92 c3 7c 63 18 b1 92 88 e3 a8 1d 9c |e`....|c........| -00000090 f7 c1 9a a4 af 78 7d 14 03 03 00 01 01 16 03 03 |.....x}.........| -000000a0 00 40 91 9a 6b 71 c5 3e 88 9a 26 b4 af fa 41 26 |.@..kq.>..&...A&| -000000b0 72 33 a7 72 9b 22 89 d9 a5 ed 3d 0e 0e af c8 ef |r3.r."....=.....| -000000c0 3d c8 89 e4 0d 21 df 06 37 23 0f 50 d1 3e ef af |=....!..7#.P.>..| -000000d0 d8 cd 30 cc c4 18 3a 12 49 c0 0a 21 20 cd ac 66 |..0...:.I..! ..f| -000000e0 96 c3 |..| +00000010 86 10 00 00 82 00 80 5b 78 d7 5b 4f e3 55 1f 34 |.......[x.[O.U.4| +00000020 60 be e9 68 07 28 c0 42 b1 ff 31 2f ac 41 19 1e |`..h.(.B..1/.A..| +00000030 5b c3 7a d4 e4 59 49 4a ed be b9 95 6c d5 58 4a |[.z..YIJ....l.XJ| +00000040 4a f5 ea f7 00 39 8b f0 6a c6 5a 5f 4e 53 40 20 |J....9..j.Z_NS@ | +00000050 70 88 5a d4 e0 9e 25 a2 d5 50 1e 22 ed 02 14 f9 |p.Z...%..P."....| +00000060 eb 32 dd d2 9c 66 20 4c 4d a1 97 91 48 6f 39 cf |.2...f LM...Ho9.| +00000070 ae e4 33 4e d9 4d 96 fa 13 39 1d b4 16 85 08 4a |..3N.M...9.....J| +00000080 8f dc b6 f3 19 05 de 16 aa 3d 5e 71 e7 38 ff 3d |.........=^q.8.=| +00000090 77 5b 63 df d2 32 3d 14 03 03 00 01 01 16 03 03 |w[c..2=.........| +000000a0 00 40 d7 df c5 1f ec 3c 10 77 53 78 8f c7 8a 79 |.@.....<.wSx...y| +000000b0 17 3a 31 57 6f e3 e8 85 3f 33 75 0a f8 a8 4d cc |.:1Wo...?3u...M.| +000000c0 70 0a d9 d0 8b 87 b5 d4 74 c8 8d 30 3b 80 bd 8c |p.......t..0;...| +000000d0 cb 42 6f e9 e5 c9 a6 28 16 6d 7a d8 13 cb 57 30 |.Bo....(.mz...W0| +000000e0 3d 77 |=w| >>> Flow 4 (server to client) 00000000 14 03 03 00 01 01 16 03 03 00 40 00 00 00 00 00 |..........@.....| -00000010 00 00 00 00 00 00 00 00 00 00 00 2d 70 ad 8f ed |...........-p...| -00000020 c0 cf ce 73 28 76 8f da 65 41 46 53 dd 06 0d cc |...s(v..eAFS....| -00000030 36 cb f3 b8 c7 1f df 53 1a 7d 1e 9f d6 b9 e3 9e |6......S.}......| -00000040 fe a8 d9 91 6c 3b d2 ef b6 30 55 17 03 03 00 40 |....l;...0U....@| +00000010 00 00 00 00 00 00 00 00 00 00 00 93 43 99 29 17 |............C.).| +00000020 5b 96 2e 5b 22 fc 53 47 b2 85 76 46 d9 1a f2 12 |[..[".SG..vF....| +00000030 58 e0 0e 0d 0f dc 88 a2 0f b1 00 39 ed d7 99 58 |X..........9...X| +00000040 99 7b c5 ba 91 a3 72 05 1e 9e c2 17 03 03 00 40 |.{....r........@| 00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| -00000060 6a 43 95 20 f0 f9 b4 e0 12 24 ae c1 55 c2 ad ec |jC. .....$..U...| -00000070 de 42 1f 0b ff 5b e5 ab 8b aa 72 69 2f 10 12 ca |.B...[....ri/...| -00000080 8c f2 77 be 60 81 ef c9 34 dc d7 68 57 d5 17 aa |..w.`...4..hW...| +00000060 f3 ff e7 4d b6 ca 7c 95 ed 96 13 88 70 b3 2c 8b |...M..|.....p.,.| +00000070 9b 0c 51 77 75 16 b4 c0 df 9f 1a c4 86 68 82 10 |..Qwu........h..| +00000080 41 c7 1e e5 92 49 ce a3 6f c3 bc 0a 91 04 b6 fa |A....I..o.......| 00000090 15 03 03 00 30 00 00 00 00 00 00 00 00 00 00 00 |....0...........| -000000a0 00 00 00 00 00 c0 4b 9e e5 6b 45 60 e1 7b 87 b1 |......K..kE`.{..| -000000b0 76 06 e4 dc d7 01 eb db 04 9c 9b d4 bd 5c e0 18 |v............\..| -000000c0 72 7a 73 93 4f |rzs.O| +000000a0 00 00 00 00 00 2c e7 ff bb 3a f5 00 08 d3 8c 3f |.....,...:.....?| +000000b0 89 bf 97 de fc c4 91 59 2f 7b b3 b8 ea d0 b1 05 |.......Y/{......| +000000c0 ca ff d0 78 9f |...x.| diff --git a/src/crypto/tls/testdata/Server-TLSv12-Ed25519 b/src/crypto/tls/testdata/Server-TLSv12-Ed25519 new file mode 100644 index 0000000000..f4247915f4 --- /dev/null +++ b/src/crypto/tls/testdata/Server-TLSv12-Ed25519 @@ -0,0 +1,63 @@ +>>> Flow 1 (client to server) +00000000 16 03 01 00 cb 01 00 00 c7 03 03 a6 41 b7 62 67 |............A.bg| +00000010 34 b4 48 22 67 fd e6 a9 12 29 b7 85 6a 27 c9 fc |4.H"g....)..j'..| +00000020 70 3a cc 0c 94 61 88 d1 9e 22 3d 00 00 38 c0 2c |p:...a..."=..8.,| +00000030 c0 30 00 9f cc a9 cc a8 cc aa c0 2b c0 2f 00 9e |.0.........+./..| +00000040 c0 24 c0 28 00 6b c0 23 c0 27 00 67 c0 0a c0 14 |.$.(.k.#.'.g....| +00000050 00 39 c0 09 c0 13 00 33 00 9d 00 9c 00 3d 00 3c |.9.....3.....=.<| +00000060 00 35 00 2f 00 ff 01 00 00 66 00 00 00 0e 00 0c |.5./.....f......| +00000070 00 00 09 31 32 37 2e 30 2e 30 2e 31 00 0b 00 04 |...127.0.0.1....| +00000080 03 00 01 02 00 0a 00 0c 00 0a 00 1d 00 17 00 1e |................| +00000090 00 19 00 18 00 16 00 00 00 17 00 00 00 0d 00 30 |...............0| +000000a0 00 2e 04 03 05 03 06 03 08 07 08 08 08 09 08 0a |................| +000000b0 08 0b 08 04 08 05 08 06 04 01 05 01 06 01 03 03 |................| +000000c0 02 03 03 01 02 01 03 02 02 02 04 02 05 02 06 02 |................| +>>> Flow 2 (server to client) +00000000 16 03 03 00 31 02 00 00 2d 03 03 00 00 00 00 00 |....1...-.......| +00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| +00000020 00 00 00 44 4f 57 4e 47 52 44 01 00 c0 2c 00 00 |...DOWNGRD...,..| +00000030 05 ff 01 00 01 00 16 03 03 01 3c 0b 00 01 38 00 |..........<...8.| +00000040 01 35 00 01 32 30 82 01 2e 30 81 e1 a0 03 02 01 |.5..20...0......| +00000050 02 02 10 0f 43 1c 42 57 93 94 1d e9 87 e4 f1 ad |....C.BW........| +00000060 15 00 5d 30 05 06 03 2b 65 70 30 12 31 10 30 0e |..]0...+ep0.1.0.| +00000070 06 03 55 04 0a 13 07 41 63 6d 65 20 43 6f 30 1e |..U....Acme Co0.| +00000080 17 0d 31 39 30 35 31 36 32 31 33 38 30 31 5a 17 |..190516213801Z.| +00000090 0d 32 30 30 35 31 35 32 31 33 38 30 31 5a 30 12 |.200515213801Z0.| +000000a0 31 10 30 0e 06 03 55 04 0a 13 07 41 63 6d 65 20 |1.0...U....Acme | +000000b0 43 6f 30 2a 30 05 06 03 2b 65 70 03 21 00 3f e2 |Co0*0...+ep.!.?.| +000000c0 15 2e e6 e3 ef 3f 4e 85 4a 75 77 a3 64 9e ed e0 |.....?N.Juw.d...| +000000d0 bf 84 2c cc 92 26 8f fa 6f 34 83 aa ec 8f a3 4d |..,..&..o4.....M| +000000e0 30 4b 30 0e 06 03 55 1d 0f 01 01 ff 04 04 03 02 |0K0...U.........| +000000f0 05 a0 30 13 06 03 55 1d 25 04 0c 30 0a 06 08 2b |..0...U.%..0...+| +00000100 06 01 05 05 07 03 01 30 0c 06 03 55 1d 13 01 01 |.......0...U....| +00000110 ff 04 02 30 00 30 16 06 03 55 1d 11 04 0f 30 0d |...0.0...U....0.| +00000120 82 0b 65 78 61 6d 70 6c 65 2e 63 6f 6d 30 05 06 |..example.com0..| +00000130 03 2b 65 70 03 41 00 63 44 ed 9c c4 be 53 24 53 |.+ep.A.cD....S$S| +00000140 9f d2 10 8d 9f e8 21 08 90 95 39 e5 0d c1 55 ff |......!...9...U.| +00000150 2c 16 b7 1d fc ab 7d 4d d4 e0 93 13 d0 a9 42 e0 |,.....}M......B.| +00000160 b6 6b fe 5d 67 48 d7 9f 50 bc 6c cd 4b 03 83 7c |.k.]gH..P.l.K..|| +00000170 f2 08 58 cd ac cf 0c 16 03 03 00 6c 0c 00 00 68 |..X........l...h| +00000180 03 00 1d 20 2f e5 7d a3 47 cd 62 43 15 28 da ac |... /.}.G.bC.(..| +00000190 5f bb 29 07 30 ff f6 84 af c4 cf c2 ed 90 99 5f |_.).0.........._| +000001a0 58 cb 3b 74 08 07 00 40 b8 a3 37 f4 74 44 64 eb |X.;t...@..7.tDd.| +000001b0 1f 4b a1 5c 6e 3b 46 a0 b8 ce ce da 79 8d 03 d8 |.K.\n;F.....y...| +000001c0 a2 c2 1d ca 25 21 d2 c3 cf 65 02 7e 4c d6 9a 5a |....%!...e.~L..Z| +000001d0 ba 60 51 71 e4 37 ab 70 18 73 f1 a0 e5 f9 e3 2d |.`Qq.7.p.s.....-| +000001e0 00 37 68 97 cf fa e4 08 16 03 03 00 04 0e 00 00 |.7h.............| +000001f0 00 |.| +>>> Flow 3 (client to server) +00000000 16 03 03 00 25 10 00 00 21 20 51 d1 53 24 ee 09 |....%...! Q.S$..| +00000010 51 02 90 7e 6f 02 a2 54 db 6e 95 a4 af f9 43 51 |Q..~o..T.n....CQ| +00000020 d2 ff 6b e6 26 d0 88 4d c1 56 14 03 03 00 01 01 |..k.&..M.V......| +00000030 16 03 03 00 28 2a 7a 63 66 3f 53 88 0a cf ef 03 |....(*zcf?S.....| +00000040 ef 21 5b b5 57 ce 9e e5 da 84 e5 a7 d3 6d 90 c9 |.![.W........m..| +00000050 6c f8 c1 9d cc a2 ff cb 97 5a 7c 1a 62 |l........Z|.b| +>>> Flow 4 (server to client) +00000000 14 03 03 00 01 01 16 03 03 00 28 00 00 00 00 00 |..........(.....| +00000010 00 00 00 7a ee 1c df b7 14 c9 81 18 f3 51 de 24 |...z.........Q.$| +00000020 70 ed b7 87 b9 29 b3 f7 ef 43 d0 c9 8f 35 3e 0a |p....)...C...5>.| +00000030 a1 c4 72 17 03 03 00 25 00 00 00 00 00 00 00 01 |..r....%........| +00000040 f6 37 d9 31 d2 1f de a6 43 3b 60 a7 30 8c 76 cd |.7.1....C;`.0.v.| +00000050 47 f3 e3 a5 f3 6f e0 fe fd 93 76 1f 0a 15 03 03 |G....o....v.....| +00000060 00 1a 00 00 00 00 00 00 00 02 6d 2d 8d 6b f1 e3 |..........m-.k..| +00000070 8f 21 e4 8e af b2 90 69 5b 10 3a f9 |.!.....i[.:.| diff --git a/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndECDSAGiven b/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndECDSAGiven index c26e3c2ed5..214ae5eed8 100644 --- a/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndECDSAGiven +++ b/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndECDSAGiven @@ -1,9 +1,9 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 e0 01 00 00 dc 03 03 93 c7 00 24 7c |..............$|| -00000010 18 0f ec 3a 26 e2 8c 6b 54 d4 34 c0 5d 1e 0d 37 |...:&..kT.4.]..7| -00000020 d1 cd 67 7a 48 59 0a 11 c3 bf d6 20 f3 37 6c 43 |..gzHY..... .7lC| -00000030 00 91 4d e9 b4 27 39 77 6e 75 4b bf 41 68 b8 0c |..M..'9wnuK.Ah..| -00000040 31 53 bc 48 55 a6 27 71 09 30 01 36 00 08 13 02 |1S.HU.'q.0.6....| +00000000 16 03 01 00 e0 01 00 00 dc 03 03 1f e8 63 15 2c |.............c.,| +00000010 85 dc 46 b7 52 88 cf 82 24 70 b9 7b 22 01 51 ee |..F.R...$p.{".Q.| +00000020 2a ff db 20 62 ba e2 18 4e 86 3f 20 d3 f9 0f d8 |*.. b...N.? ....| +00000030 85 5c 17 5e 95 e9 7a 7e cb 56 ac 85 3e 75 8f d8 |.\.^..z~.V..>u..| +00000040 8f 25 be 59 be a7 18 db b7 5e 19 23 00 08 13 02 |.%.Y.....^.#....| 00000050 13 03 13 01 00 ff 01 00 00 8b 00 00 00 0e 00 0c |................| 00000060 00 00 09 31 32 37 2e 30 2e 30 2e 31 00 0b 00 04 |...127.0.0.1....| 00000070 03 00 01 02 00 0a 00 0c 00 0a 00 1d 00 17 00 1e |................| @@ -11,174 +11,174 @@ 00000090 00 1c 04 03 05 03 06 03 08 07 08 08 08 09 08 0a |................| 000000a0 08 0b 08 04 08 05 08 06 04 01 05 01 06 01 00 2b |...............+| 000000b0 00 03 02 03 04 00 2d 00 02 01 01 00 33 00 26 00 |......-.....3.&.| -000000c0 24 00 1d 00 20 95 28 2e 63 cf 81 4b cd 4b 64 73 |$... .(.c..K.Kds| -000000d0 19 19 82 2d b7 f5 54 08 4d f4 72 70 21 3e a0 d6 |...-..T.M.rp!>..| -000000e0 7d 96 92 ac 63 |}...c| +000000c0 24 00 1d 00 20 8d 8e c0 53 e4 17 29 9f 59 9e 80 |$... ...S..).Y..| +000000d0 1f 4a 99 4b 9d 59 3f 84 93 06 68 6e 45 86 2f 4d |.J.K.Y?...hnE./M| +000000e0 04 f5 ba 3e 42 |...>B| >>> Flow 2 (server to client) 00000000 16 03 03 00 7a 02 00 00 76 03 03 00 00 00 00 00 |....z...v.......| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| -00000020 00 00 00 00 00 00 00 00 00 00 00 20 f3 37 6c 43 |........... .7lC| -00000030 00 91 4d e9 b4 27 39 77 6e 75 4b bf 41 68 b8 0c |..M..'9wnuK.Ah..| -00000040 31 53 bc 48 55 a6 27 71 09 30 01 36 13 02 00 00 |1S.HU.'q.0.6....| +00000020 00 00 00 00 00 00 00 00 00 00 00 20 d3 f9 0f d8 |........... ....| +00000030 85 5c 17 5e 95 e9 7a 7e cb 56 ac 85 3e 75 8f d8 |.\.^..z~.V..>u..| +00000040 8f 25 be 59 be a7 18 db b7 5e 19 23 13 02 00 00 |.%.Y.....^.#....| 00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 2f |..+.....3.$... /| 00000060 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| 00000070 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 14 |.........._X.;t.| -00000080 03 03 00 01 01 17 03 03 00 17 db 3b a3 78 48 c0 |...........;.xH.| -00000090 4e d1 ad 99 4d 73 e3 84 27 ff 42 de f6 c9 c9 b5 |N...Ms..'.B.....| -000000a0 49 17 03 03 00 3c 77 b8 16 13 1d cb 0a 6b 3e 41 |I....A| -000000b0 24 8a 03 b9 88 48 6f b3 d7 61 66 f4 33 67 86 8c |$....Ho..af.3g..| -000000c0 2f ad 4f f1 40 ad 63 10 35 ee f7 15 d2 0e e9 31 |/.O.@.c.5......1| -000000d0 b8 d9 b2 32 28 05 1e 73 3d bd a2 12 26 32 5a bc |...2(..s=...&2Z.| -000000e0 0c ea 17 03 03 02 6d e0 8f 50 e0 54 85 74 f0 b8 |......m..P.T.t..| -000000f0 31 25 df 87 fd 8b 5b 52 d4 fe b0 8e 61 44 b5 28 |1%....[R....aD.(| -00000100 1d 0e 8a 07 56 bb 77 5d 60 d8 c1 a0 95 ff 5c e9 |....V.w]`.....\.| -00000110 a2 ca 17 20 3d b1 b1 8e 76 31 2f 0d c9 e3 ee b5 |... =...v1/.....| -00000120 e6 fe fd dc 2e b9 e5 44 77 d3 fe 7a d5 9f 0e ab |.......Dw..z....| -00000130 75 b0 ff 2a 7b aa 64 75 62 ec 15 bd 2e 0c a4 54 |u..*{.dub......T| -00000140 e6 12 cd 31 13 83 6c 98 e8 00 b3 b6 c6 7b cb 87 |...1..l......{..| -00000150 82 3a f9 15 50 6b 4d c2 5b 6a 91 42 ce e8 25 14 |.:..PkM.[j.B..%.| -00000160 0d 5d 17 04 c3 cf d6 23 ad 9e 0e 3b 1c aa 2e 88 |.].....#...;....| -00000170 02 dc 63 12 3e 33 29 3d f8 b2 ec f2 15 d6 13 d3 |..c.>3)=........| -00000180 c9 88 a1 ad a9 27 fd 7c c4 5e f9 73 eb 45 a7 5f |.....'.|.^.s.E._| -00000190 a1 4f be d7 0f e9 d0 da 30 67 3b 9d 63 2d ef b4 |.O......0g;.c-..| -000001a0 89 3e de 19 20 af 62 52 7c e7 80 96 93 6e ca bf |.>.. .bR|....n..| -000001b0 c3 48 e2 c5 23 8d cf b0 a2 e5 dd a8 51 21 6f 99 |.H..#.......Q!o.| -000001c0 24 03 c8 d8 e0 dd e6 d4 ef 7f 74 17 85 14 ca 81 |$.........t.....| -000001d0 91 4e c6 5d 80 86 63 6f 97 55 ab 80 1c ab 63 c8 |.N.]..co.U....c.| -000001e0 01 ca df 11 28 68 b8 75 06 22 33 ba 9c b8 14 a1 |....(h.u."3.....| -000001f0 7a 1d cb 24 7c 90 44 b1 ed 33 e7 9d 80 6d ce b7 |z..$|.D..3...m..| -00000200 0a 74 bd 29 53 a2 bb 06 67 4d 4d 53 cc 1c 66 76 |.t.)S...gMMS..fv| -00000210 a9 4f 86 be 7a da ba 35 23 b6 6f c4 7d 02 2a 9f |.O..z..5#.o.}.*.| -00000220 2d 81 3d e2 16 3d 4b 78 ba cb f3 91 c7 39 9c 3d |-.=..=Kx.....9.=| -00000230 2e 4d a0 f6 6d 3d ba 15 bd cf 60 3b 8a 4a 18 9f |.M..m=....`;.J..| -00000240 87 e4 ee 1a ac f2 b2 bc a6 9f af b2 9e ca be 60 |...............`| -00000250 3f 36 54 84 d0 cd 31 d8 60 3b 4e 7e 6c 80 d5 25 |?6T...1.`;N~l..%| -00000260 1c 1b 1e fb 0f e7 ad b0 30 0d 13 be 27 f8 c3 6a |........0...'..j| -00000270 93 d3 f0 55 cb e9 73 6b e9 72 aa bb ea 24 05 f7 |...U..sk.r...$..| -00000280 c7 51 d5 66 77 32 53 82 fb 6c 2e fc fb 83 2d f4 |.Q.fw2S..l....-.| -00000290 5d a1 cc 75 fa d1 ee c2 5b 5d 48 e5 6d 69 87 54 |]..u....[]H.mi.T| -000002a0 1c b1 03 bd 06 66 7b 6d b7 46 33 56 b9 1c 62 a1 |.....f{m.F3V..b.| -000002b0 fd d3 61 50 42 ef 66 f8 97 26 5b 17 82 52 89 09 |..aPB.f..&[..R..| -000002c0 48 b8 68 50 63 d6 d4 83 7e 1f 5d 9d ad 69 2a 3c |H.hPc...~.]..i*<| -000002d0 d6 ab b7 33 1b 07 bc 44 92 d7 23 07 00 64 3f 64 |...3...D..#..d?d| -000002e0 98 e9 52 11 69 fc 21 04 65 1d f8 0d 06 dd 54 14 |..R.i.!.e.....T.| -000002f0 93 ae ca 30 06 db 4b 70 00 0b 3a cb 11 19 1a c6 |...0..Kp..:.....| -00000300 a7 f0 1c 9f 31 f9 30 ec 5f 1c 4e 74 d0 1c 9b 49 |....1.0._.Nt...I| -00000310 ab 42 c3 72 7d 11 e0 07 3d 3f 51 7a 99 07 32 0f |.B.r}...=?Qz..2.| -00000320 d6 b7 b7 ac 83 2e 3b c4 ce 81 1d 1a e0 e8 ba d7 |......;.........| -00000330 12 d1 14 a9 62 c3 58 30 0d ac 30 6c 7d 06 be 96 |....b.X0..0l}...| -00000340 e1 e4 14 6b 56 16 17 84 52 32 4c aa ec 83 1d 6c |...kV...R2L....l| -00000350 d1 b0 1f 63 17 03 03 00 99 c9 7d 79 9c 0f 73 20 |...c......}y..s | -00000360 0b 93 09 a6 6e 46 fd 56 12 08 0a 8c 1b 9c b0 9f |....nF.V........| -00000370 0a d4 d9 33 e9 22 0e 90 d4 7c b3 4d 5a 95 e9 90 |...3."...|.MZ...| -00000380 14 69 e5 d2 ad 2e b4 f1 a0 98 7d 24 fa b2 a4 2a |.i........}$...*| -00000390 f8 af 6a e3 9d a7 64 cc ea 51 73 d1 40 23 98 df |..j...d..Qs.@#..| -000003a0 9f cc 70 bb c5 3b 8b fc 95 6f ca 04 6d 7d cd 77 |..p..;...o..m}.w| -000003b0 ba b3 d3 e1 50 38 9c 16 60 d7 2b be 82 b3 a5 70 |....P8..`.+....p| -000003c0 76 c4 fb ba 7e 78 5c 97 a3 47 fe 23 80 b7 d4 f1 |v...~x\..G.#....| -000003d0 1f a6 dc 08 68 b4 d7 bb 09 6f 45 37 e5 1d 2b 2f |....h....oE7..+/| -000003e0 e1 57 84 4e 95 c1 bc b4 14 a4 45 04 69 ae 79 01 |.W.N......E.i.y.| -000003f0 07 42 17 03 03 00 45 00 a8 d1 03 76 56 7f b3 7e |.B....E....vV..~| -00000400 ec 82 94 7f b7 66 8a 01 c3 ab 50 13 20 f3 ea 3e |.....f....P. ..>| -00000410 27 56 e7 49 14 6a d0 2e f4 04 d1 54 c0 b1 4d 5e |'V.I.j.....T..M^| -00000420 2a a5 f1 89 55 f6 b0 ee e2 15 26 13 ec a4 4c ca |*...U.....&...L.| -00000430 ef 1a c7 ff 3e 5e f3 88 15 57 47 43 |....>^...WGC| +00000080 03 03 00 01 01 17 03 03 00 17 cb a2 26 d8 e7 e0 |............&...| +00000090 72 cd 3d 39 f6 67 25 78 a3 ce bf 0e 62 bf 2e 2a |r.=9.g%x....b..*| +000000a0 b5 17 03 03 00 3e 3e b3 0c 6d 79 88 e8 74 87 a5 |.....>>..my..t..| +000000b0 ab a1 db 4b 11 d9 15 16 49 a7 ef a5 69 f0 8e 2e |...K....I...i...| +000000c0 a3 6c 38 f0 ea 6d 0b fd 4c 78 ea 55 ec e7 48 de |.l8..m..Lx.U..H.| +000000d0 87 01 3d de 13 5b 59 7f b3 15 4a 7d 40 30 d8 9c |..=..[Y...J}@0..| +000000e0 55 06 54 2d 17 03 03 02 6d 28 a4 e3 bf 71 d5 93 |U.T-....m(...q..| +000000f0 50 e1 e7 96 02 28 f1 2f 6d 78 1f b9 7f 1a 8c a4 |P....(./mx......| +00000100 65 03 15 fb a7 ef f5 91 66 44 00 28 6a 17 46 9c |e.......fD.(j.F.| +00000110 e7 90 f9 d5 78 f1 a4 fd 9b 54 09 dc 6e 83 0f 65 |....x....T..n..e| +00000120 96 51 e1 69 e0 05 7f d4 d6 04 03 fd b8 6b 9c 12 |.Q.i.........k..| +00000130 02 af 03 9b 02 42 7b ce e0 81 51 91 3a 01 be a4 |.....B{...Q.:...| +00000140 72 ef 27 c3 3e f1 8e 5d 3a 9e 46 4c 25 13 98 c2 |r.'.>..]:.FL%...| +00000150 5c 75 3f b2 30 7c de da b6 56 4e 7a 2c c3 1d 6f |\u?.0|...VNz,..o| +00000160 7a 6e 0d da d2 df a6 df 47 12 6d af 3f d7 66 ad |zn......G.m.?.f.| +00000170 54 19 b3 7f 1b 92 5c e6 79 36 ab d9 99 db 1d f9 |T.....\.y6......| +00000180 e8 13 b4 e9 85 fb ba 9a 7b f3 eb 28 e5 e3 f1 0e |........{..(....| +00000190 dc 95 b2 db f3 e4 77 6d a5 43 14 4c f4 af 0a e4 |......wm.C.L....| +000001a0 5d bf 1d f4 ef 72 9f c0 74 55 e5 93 e0 7c f0 9a |]....r..tU...|..| +000001b0 01 1d e8 43 5d c1 24 6f 75 46 44 f0 bc 15 b6 6b |...C].$ouFD....k| +000001c0 7b cd 6d cc 38 06 10 34 ae be 7c b1 24 da 71 58 |{.m.8..4..|.$.qX| +000001d0 b2 81 1f ea 28 18 73 75 79 d5 eb ef 0c 33 b8 1c |....(.suy....3..| +000001e0 14 e9 00 b8 12 f7 b2 9f b1 f3 a8 23 63 b3 29 49 |...........#c.)I| +000001f0 0e 84 b8 60 1c c2 32 c5 fd 59 de 88 e2 55 93 0f |...`..2..Y...U..| +00000200 63 e6 a7 02 3e 01 0e 5f df b4 03 f8 a9 d0 96 03 |c...>.._........| +00000210 5c ea e0 6f 5d 1d 30 41 c7 ec 6a 94 d3 6c ff b7 |\..o].0A..j..l..| +00000220 1b eb b8 0d 2f df 90 2e f8 f5 d2 3a c6 8c 47 98 |..../......:..G.| +00000230 ad 39 13 f2 4d 2f a5 9d 4b 58 f7 bc 92 d6 b1 ca |.9..M/..KX......| +00000240 6a a5 c5 64 62 1c 76 21 be b5 ca 25 04 e4 16 b3 |j..db.v!...%....| +00000250 26 90 42 b8 b8 61 4a da a3 12 5d f7 74 e6 f1 95 |&.B..aJ...].t...| +00000260 5d d4 3a 17 fc 33 b1 2a 35 eb 69 16 7e d0 8f 66 |].:..3.*5.i.~..f| +00000270 ca b1 62 0f 85 d1 b3 f9 b6 cf dc 86 61 0e 34 8a |..b.........a.4.| +00000280 a0 69 fc 59 6b fc 3d 6d 7a 19 46 6f 8a 3d 16 56 |.i.Yk.=mz.Fo.=.V| +00000290 ac 5d ed 05 57 25 2d 85 78 67 bc 50 a3 34 87 3f |.]..W%-.xg.P.4.?| +000002a0 e7 ae 0d f0 17 67 2a 08 42 92 1f 25 0e 9c 22 e3 |.....g*.B..%..".| +000002b0 3f 7f dc 91 52 9e d3 01 39 0f 47 55 26 f3 f2 ce |?...R...9.GU&...| +000002c0 75 7d 33 f2 a2 9a 03 70 c0 e7 32 90 a7 50 8c b0 |u}3....p..2..P..| +000002d0 ab fa b5 ef 25 ae e3 7e 94 99 a9 3f 83 a7 16 5e |....%..~...?...^| +000002e0 67 b4 a0 1e 5b f7 10 49 cb 33 73 4d 92 26 49 8d |g...[..I.3sM.&I.| +000002f0 63 fc 5b b5 1b a4 1a 97 10 09 5f e0 75 73 50 be |c.[......._.usP.| +00000300 d5 6a 62 80 3a 3f c7 94 89 51 f0 c6 fa 38 2e 79 |.jb.:?...Q...8.y| +00000310 3c 0b 63 bc 7e 6e 2a ed c6 c5 d5 bc bc 00 31 e3 |<.c.~n*.......1.| +00000320 5c 2b b7 88 ff 8f ef a7 34 7e c7 3e 3f 16 e6 75 |\+......4~.>?..u| +00000330 c8 1b 70 4a 2f 18 81 c3 d3 81 63 e8 31 f4 42 f8 |..pJ/.....c.1.B.| +00000340 02 2d 2e fb d5 65 60 93 df b5 d4 c8 8e 55 29 b3 |.-...e`......U).| +00000350 72 01 86 19 10 3d 17 03 03 00 99 e9 b1 32 d5 5f |r....=.......2._| +00000360 59 fb 7f 80 0e 70 2e 1a 76 ae dd 7f 84 ee 86 69 |Y....p..v......i| +00000370 37 a6 31 f2 83 78 8d 90 98 eb 43 96 22 9f ba 34 |7.1..x....C."..4| +00000380 09 e3 78 c9 5f 5a f0 0b 51 58 c9 8e 63 b7 04 88 |..x._Z..QX..c...| +00000390 74 a2 1c c9 da f3 9e 30 c0 c7 a9 da f4 43 d5 a2 |t......0.....C..| +000003a0 b7 c4 aa 33 5f be f9 e2 68 d6 73 f2 3d ae 1b e5 |...3_...h.s.=...| +000003b0 5b b5 7d ce cb 9d 72 a2 2d bc 30 35 43 a1 3f 53 |[.}...r.-.05C.?S| +000003c0 43 61 a3 4e 6e 90 8c 8a 78 b5 35 74 98 51 d2 33 |Ca.Nn...x.5t.Q.3| +000003d0 3a 9f c5 39 79 6d 5d fe ce 5e e2 dc 12 56 ac 56 |:..9ym]..^...V.V| +000003e0 0b 6c 86 3c 85 cb 12 18 46 dd ed 53 04 9a 88 34 |.l.<....F..S...4| +000003f0 84 df b0 cf 17 03 03 00 45 f6 a8 20 67 5a d1 87 |........E.. gZ..| +00000400 ac e4 d7 95 d0 8b 8f 96 cd b6 12 7d eb 3c 28 21 |...........}.<(!| +00000410 5a 7d 53 86 9e 55 cd 9b 24 1a c3 c7 6a 30 84 6f |Z}S..U..$...j0.o| +00000420 f7 96 ac 29 b5 ee 5d 66 32 c6 52 13 79 32 67 27 |...)..]f2.R.y2g'| +00000430 6b 5b bc 54 1e 28 b2 73 5f 5d 4d 6f 11 fc |k[.T.(.s_]Mo..| >>> Flow 3 (client to server) -00000000 14 03 03 00 01 01 17 03 03 02 1e cd 5f bd ff 6b |............_..k| -00000010 f7 c8 70 4b cc c8 84 44 c2 d0 7d ea 39 78 5a 6f |..pK...D..}.9xZo| -00000020 7a 72 0e 55 d0 76 7c 48 d8 cc 32 b4 08 bf f7 a8 |zr.U.v|H..2.....| -00000030 32 99 4a c5 83 79 4d 39 ea 0d 63 33 da 89 57 30 |2.J..yM9..c3..W0| -00000040 ab 31 95 90 f4 8d 4a 63 34 13 c6 4e d6 80 37 b8 |.1....Jc4..N..7.| -00000050 9b 28 8b 8f e5 b5 2a 16 e1 82 63 6f 1b ca 3a b4 |.(....*...co..:.| -00000060 b3 0b 36 56 09 d8 1e ab b4 fb aa 07 df 76 d3 b2 |..6V.........v..| -00000070 07 8d 56 38 f9 15 c2 1b c9 97 50 6a c4 23 6f 39 |..V8......Pj.#o9| -00000080 7b b3 69 b5 c2 6e 29 b4 14 17 9c 3d b7 c5 5f 12 |{.i..n)....=.._.| -00000090 25 73 89 22 99 1f 77 9d 9c a4 f6 fc 0a 8b af 24 |%s."..w........$| -000000a0 9b fc c1 b3 c3 cd 88 55 b5 81 8a 6e 73 83 cc da |.......U...ns...| -000000b0 fa 64 fe 3b 20 31 75 9a ce 35 ad a6 4b 3f 6f 49 |.d.; 1u..5..K?oI| -000000c0 e0 ae 21 23 ac c5 86 bb ec 91 13 37 76 d9 06 40 |..!#.......7v..@| -000000d0 ce 32 84 41 3e c0 5c 6d 93 0c 2f af ac af 5e ef |.2.A>.\m../...^.| -000000e0 ab 65 fc cc 00 a4 11 94 27 0e 11 ac 2a 00 dc c3 |.e......'...*...| -000000f0 dc fc 68 ff b3 32 bf 75 ff d0 35 e1 a3 44 68 6e |..h..2.u..5..Dhn| -00000100 21 39 ab 68 93 11 50 3b 30 1c 32 2a 03 9a 2a 9c |!9.h..P;0.2*..*.| -00000110 ff 2a bf 10 b3 ae 28 33 43 3c b2 04 a3 5d 49 21 |.*....(3C<...]I!| -00000120 db c4 4e 90 2f bd 20 03 d1 99 78 48 1a fd f2 a8 |..N./. ...xH....| -00000130 1b 06 1b 4e d1 5f 7c ed ba 04 3c ad 9c 20 4f 5e |...N._|...<.. O^| -00000140 37 5b 75 8e fc 40 2a 09 1c 78 f7 b2 15 ad a6 24 |7[u..@*..x.....$| -00000150 29 98 74 42 e2 80 28 80 0b 78 22 72 75 e3 33 75 |).tB..(..x"ru.3u| -00000160 a0 57 37 00 f1 69 bd ab 22 74 2d 6c 4a 1e 46 5b |.W7..i.."t-lJ.F[| -00000170 64 e0 47 d7 77 85 18 6b 10 67 6f 83 eb 98 e4 31 |d.G.w..k.go....1| -00000180 00 35 1d c3 1f d9 7a 86 27 27 3f 2d 0d cb 53 8f |.5....z.''?-..S.| -00000190 f4 52 e7 5a ba 02 67 44 a8 19 71 1a 7b f2 b1 80 |.R.Z..gD..q.{...| -000001a0 c9 82 d0 4b 63 0e d0 e0 bd a1 cc 5e 55 80 9a 51 |...Kc......^U..Q| -000001b0 21 bf 32 ce 8f 74 ea ed a6 cd ee b4 8f 3b 8f 6c |!.2..t.......;.l| -000001c0 41 5e 3d 1f 00 0b d4 a4 09 9a 8e c3 3f b1 b7 4c |A^=.........?..L| -000001d0 7b 6b 57 3f 94 3d ed d7 60 5c d4 04 b0 7b 62 06 |{kW?.=..`\...{b.| -000001e0 f7 06 f6 f0 f8 44 80 55 97 22 60 e6 dc f3 ec 7d |.....D.U."`....}| -000001f0 d2 22 e0 07 5d 52 0c 63 4d 77 f8 c5 16 06 67 5b |."..]R.cMw....g[| -00000200 9e 96 f4 1e fa 8e dd f8 42 85 7f 1e dc f9 dc b8 |........B.......| -00000210 b1 91 b0 c3 04 0d e1 dd c9 c4 0d fb b7 74 cb e5 |.............t..| -00000220 57 38 b7 82 8c d1 20 d1 0f 17 03 03 00 a4 79 ad |W8.... .......y.| -00000230 66 39 e1 10 c9 96 2c d3 7f 11 c6 7e c4 36 56 4c |f9....,....~.6VL| -00000240 70 c3 8f a4 da c2 a5 53 9b 28 25 82 69 d8 90 f0 |p......S.(%.i...| -00000250 79 52 29 cb e1 d4 48 49 dd 00 82 37 b1 ac 3b 1c |yR)...HI...7..;.| -00000260 2c b9 a7 c4 08 ac 08 fd 42 47 79 1f 64 82 57 2a |,.......BGy.d.W*| -00000270 63 c0 78 54 55 69 f2 05 9e 8d 81 6e d9 b5 31 08 |c.xTUi.....n..1.| -00000280 d3 0d 61 61 4f 70 a4 57 67 eb 9d 09 ca 51 01 ff |..aaOp.Wg....Q..| -00000290 53 d2 6d 9e 49 ce 40 1f c9 ab a2 52 e6 56 0c d3 |S.m.I.@....R.V..| -000002a0 63 b4 44 d7 fe 97 1d d2 55 8d 13 df 23 71 68 b6 |c.D.....U...#qh.| -000002b0 79 26 a8 a6 cd ca a1 19 6b 21 e8 b6 30 34 b6 6f |y&......k!..04.o| -000002c0 66 2d ab 1d 16 7f c6 b1 53 c9 2a 40 87 9d 7d 48 |f-......S.*@..}H| -000002d0 c9 6a 17 03 03 00 45 43 bf 6e f3 e2 76 56 69 2f |.j....EC.n..vVi/| -000002e0 9b c5 d2 46 4f 24 d2 e2 61 13 2b ad b6 3e d8 89 |...FO$..a.+..>..| -000002f0 1b 31 7c ec 14 44 39 7c b4 08 44 9d 31 d9 a1 5f |.1|..D9|..D.1.._| -00000300 2e 8f a9 8e 5b 5a 91 e2 f5 61 f5 63 be 5c 14 e3 |....[Z...a.c.\..| -00000310 70 8e 2e 9e fd 6c 54 85 ba ef 85 b7 |p....lT.....| +00000000 14 03 03 00 01 01 17 03 03 02 1e 60 1c a1 8d ec |...........`....| +00000010 40 73 af df e0 a2 e8 c7 0d f5 f3 8c 5b 9e 58 f0 |@s..........[.X.| +00000020 5d 77 d8 d1 42 bd 30 e4 0d f5 5f b6 68 89 0f bb |]w..B.0..._.h...| +00000030 73 ff dc 9b 77 b6 c9 f2 3c a8 5a 95 43 f6 53 22 |s...w...<.Z.C.S"| +00000040 f3 96 7c 48 b6 df d2 ed a1 39 00 f1 c5 20 5d bd |..|H.....9... ].| +00000050 bd 27 4b d7 5f d7 7e 57 3c 22 84 cf 6f 2c 85 4f |.'K._.~W<"..o,.O| +00000060 50 8e 71 0c 70 cb e9 3b 52 31 12 ac 0e 1c d0 0c |P.q.p..;R1......| +00000070 a5 c7 20 83 77 95 b5 0d 2f b8 f9 51 83 17 d1 9b |.. .w.../..Q....| +00000080 69 ca 0a 9c e1 8e 1d 3d 95 2b 10 56 24 47 e0 6e |i......=.+.V$G.n| +00000090 ba 56 94 c9 a8 b5 62 b4 4d da 70 73 e0 a0 0b 15 |.V....b.M.ps....| +000000a0 60 22 f4 3f a3 e4 c6 86 a9 a3 dd db 5b 69 5c ce |`".?........[i\.| +000000b0 99 14 6a 93 8e c7 21 ff 99 4d da 25 3b 87 3a ae |..j...!..M.%;.:.| +000000c0 7d 9b 9a 06 6f e4 36 02 64 07 d4 43 84 5b 6f 98 |}...o.6.d..C.[o.| +000000d0 6c ec 6b 77 92 17 75 2e ea c5 02 ab ce 8c c2 9a |l.kw..u.........| +000000e0 18 e7 90 05 da 68 5a c9 d8 22 8c d2 de 17 b5 87 |.....hZ.."......| +000000f0 a1 74 e9 bc 54 07 36 ef 61 1f 3a 43 51 15 2a 98 |.t..T.6.a.:CQ.*.| +00000100 53 84 89 d4 90 a7 f0 a6 e4 35 6c 70 9b f5 a4 51 |S........5lp...Q| +00000110 b4 69 9c 58 10 df cc 50 04 46 43 0a c5 9d ca f1 |.i.X...P.FC.....| +00000120 23 2c a5 1e 6c d6 36 82 21 1f db 9a ae 55 f2 77 |#,..l.6.!....U.w| +00000130 ad 13 e8 97 24 3c c9 c1 a5 b2 18 3c a6 cf ab c6 |....$<.....<....| +00000140 05 88 06 e1 23 fb b7 85 a6 e8 57 38 6d 58 22 b8 |....#.....W8mX".| +00000150 02 c6 0d 40 22 10 cd da dc 21 ef 6b ae 6c 5d c5 |...@"....!.k.l].| +00000160 8e 62 a7 21 be 7c b7 47 60 af 55 e7 db 6f 47 59 |.b.!.|.G`.U..oGY| +00000170 62 dd f2 f6 62 9b cd 2c 46 ec b8 05 47 d4 f9 8d |b...b..,F...G...| +00000180 ee 89 09 f6 d0 ac 8d 4f 27 d1 f7 4e cb aa 55 0b |.......O'..N..U.| +00000190 be 64 ed 69 45 7c 0a b5 95 5c b3 63 c4 1c ff 12 |.d.iE|...\.c....| +000001a0 de ad 11 f9 d4 de d4 94 d7 cb 31 55 21 51 09 12 |..........1U!Q..| +000001b0 33 20 df 64 4f 57 f3 da 68 24 20 f7 df 9d b3 4c |3 .dOW..h$ ....L| +000001c0 7f b1 c4 5a 85 d2 95 bd 98 e8 05 7b 20 f1 34 97 |...Z.......{ .4.| +000001d0 6e 73 ed 5d 5f 97 56 a6 9a 6f e7 91 27 be b2 d9 |ns.]_.V..o..'...| +000001e0 ef 48 9b 3d d8 80 e1 e1 d5 46 de 6c 83 7d 16 24 |.H.=.....F.l.}.$| +000001f0 03 f0 a1 29 fd 8e a7 db 63 88 51 e3 ac 5d a6 c9 |...)....c.Q..]..| +00000200 19 e4 a4 40 0f 92 1b 4c 3b 9d 4a fc b2 cf c5 62 |...@...L;.J....b| +00000210 db 72 d2 9e f8 c0 00 ab fe af ac 66 46 8d b7 8e |.r.........fF...| +00000220 dc ab 07 c4 87 09 0e 9b 04 17 03 03 00 a4 7b 67 |..............{g| +00000230 11 bf bb 27 7d c0 ab f4 14 a8 44 a1 e1 b1 ba 0c |...'}.....D.....| +00000240 4c d0 4e 9d 74 5f dd 60 bb c9 33 ad 29 91 a7 a0 |L.N.t_.`..3.)...| +00000250 18 61 44 25 bf a1 45 e2 9b 24 93 20 45 0b 2a 09 |.aD%..E..$. E.*.| +00000260 07 75 4d ad 1a 04 34 df 7b 1b c8 f7 e7 fc 4e 99 |.uM...4.{.....N.| +00000270 27 97 d5 9a 7f 63 39 00 5c ed ba a4 5b 9b 44 72 |'....c9.\...[.Dr| +00000280 cb 3e 80 68 9a 78 e9 bc 12 35 94 9d b2 1c 34 f6 |.>.h.x...5....4.| +00000290 ce c7 cf 61 5e a9 c2 21 79 e9 e3 4c e8 e5 dc fe |...a^..!y..L....| +000002a0 e2 1d 7a 2b c3 dd 15 f8 e5 0e 20 6f 99 fd ea ef |..z+...... o....| +000002b0 a1 a4 be a9 28 1a d0 f8 3e 0a c2 76 6b 24 b1 56 |....(...>..vk$.V| +000002c0 0f 52 25 f6 56 65 96 92 4f 07 71 9d 25 25 99 2c |.R%.Ve..O.q.%%.,| +000002d0 dc 04 17 03 03 00 45 c5 e8 b3 d0 ca 89 02 da 08 |......E.........| +000002e0 73 57 9c a6 49 de da b3 e7 92 59 8e 25 29 45 8b |sW..I.....Y.%)E.| +000002f0 fb 56 b6 53 dd d1 59 6c 5f 39 7a d4 d8 e6 db e3 |.V.S..Yl_9z.....| +00000300 60 8c a4 8a 81 2b a5 26 a7 21 89 e9 8a f7 fe 39 |`....+.&.!.....9| +00000310 44 a2 bd 1c 49 18 47 b9 69 ef 1c 74 |D...I.G.i..t| >>> Flow 4 (server to client) -00000000 17 03 03 02 a8 02 f0 98 42 d8 ab 9d 92 8c 11 ac |........B.......| -00000010 16 4d b1 c0 2e 3b 0f ac 53 f8 aa 15 01 36 03 fd |.M...;..S....6..| -00000020 1b e1 0f 87 62 5f d4 4e fc 0d 88 13 30 4f 5e fc |....b_.N....0O^.| -00000030 46 1b 3a 22 cc ff a9 5e 29 24 15 67 08 1b 28 18 |F.:"...^)$.g..(.| -00000040 d3 70 46 fa 92 89 de 69 62 f1 c7 47 d1 24 a2 98 |.pF....ib..G.$..| -00000050 8d 78 d0 f2 cc 3f fb 4c 3c 5e 03 0c 4e a8 a3 b7 |.x...?.L<^..N...| -00000060 c5 69 49 19 43 da 07 b4 be 6e 7d cd 12 c3 bf d7 |.iI.C....n}.....| -00000070 74 9a 3e 30 cd 9d 8e a4 27 bb 66 d1 95 50 ad f7 |t.>0....'.f..P..| -00000080 91 52 e4 be d5 61 fc 28 fb 33 02 bc f4 fb fb 7f |.R...a.(.3......| -00000090 0c 9a dc e4 63 86 c6 f8 f6 bc 67 60 c6 ac b2 52 |....c.....g`...R| -000000a0 65 3e 0d f7 15 e0 d4 f2 7b 36 ed e2 2e c3 ab 44 |e>......{6.....D| -000000b0 e4 06 d1 09 e6 c6 9e c3 dd df e9 3b 9c 22 cb 48 |...........;.".H| -000000c0 1a 18 22 da 8c e7 11 e0 36 0b a9 73 be d8 22 db |..".....6..s..".| -000000d0 8b 95 f5 3e cc c0 11 6f db 40 57 4c 07 14 2b fc |...>...o.@WL..+.| -000000e0 9e 6b f8 07 96 9f 3d 8e cc d2 c3 b5 a8 e1 64 33 |.k....=.......d3| -000000f0 b6 ab 17 4b aa b2 e0 b6 fe b6 49 69 7d 0b 8e cd |...K......Ii}...| -00000100 19 a3 d8 5e 22 5a 02 64 c2 68 ec 69 55 2d fd aa |...^"Z.d.h.iU-..| -00000110 1f f6 35 bf b2 14 a5 f9 a0 49 59 a4 84 ff 41 a5 |..5......IY...A.| -00000120 fb a1 e4 97 72 88 00 98 dd 5a 6f 7b 00 a7 59 fa |....r....Zo{..Y.| -00000130 83 73 e7 ca 8f dd 31 e8 ca 02 13 c9 fa 2b 8c 5e |.s....1......+.^| -00000140 b5 7b 85 da 2b 1a 75 da e3 db b7 34 58 c4 da 15 |.{..+.u....4X...| -00000150 b3 3a f9 a7 b3 7f 15 d2 01 b2 26 b4 c1 fe 83 af |.:........&.....| -00000160 d6 f7 8b fb 92 3d 32 ae 4a 1b a2 50 60 70 a6 34 |.....=2.J..P`p.4| -00000170 98 3f 2d bf 27 2e d3 a0 91 d9 c8 f9 a9 27 f2 23 |.?-.'........'.#| -00000180 7c 3c 17 96 19 99 6f 09 a7 bd da 2d 94 9e f9 6b ||<....o....-...k| -00000190 bb 93 fd bb b1 c0 89 6f b4 8f 90 86 e1 85 59 98 |.......o......Y.| -000001a0 ba 98 7c 6c 26 be 98 30 5f cf 46 bf e9 c6 a4 bd |..|l&..0_.F.....| -000001b0 08 14 2a 5c 05 d8 c2 0e ba 46 af 23 e8 f0 71 77 |..*\.....F.#..qw| -000001c0 78 78 ec c2 af 4a 63 93 2e b1 ed 56 3d b7 7c a5 |xx...Jc....V=.|.| -000001d0 63 99 2f df 15 d3 ce 79 0e 49 d0 16 ac 3e f3 fa |c./....y.I...>..| -000001e0 cd e7 0e e5 ee 4a cd 49 20 f6 9f fa d1 df cb cc |.....J.I .......| -000001f0 1b 73 83 12 47 52 69 3c 93 bb 1f 65 64 1e 79 15 |.s..GRi<...ed.y.| -00000200 72 85 e8 fd fa d6 be d5 61 44 35 bb 75 a7 17 1f |r.......aD5.u...| -00000210 dd 7b 60 17 78 1f 11 72 7f ac e7 52 1e 94 13 35 |.{`.x..r...R...5| -00000220 ab 97 69 17 09 6c 4b 46 cd 34 2d 7e 55 8a 16 d3 |..i..lKF.4-~U...| -00000230 c2 59 e8 d8 67 9b 29 af bc f1 31 39 d9 ff 06 d5 |.Y..g.)...19....| -00000240 80 b8 8d 50 80 5f 2c 0a 30 84 28 32 3d 4c 45 f2 |...P._,.0.(2=LE.| -00000250 2f 8b b5 d9 3a 7a 47 05 55 22 7a a4 61 c8 8c d1 |/...:zG.U"z.a...| -00000260 1c 1b 78 e0 87 37 5e 36 88 5c 32 ca 7a d3 76 63 |..x..7^6.\2.z.vc| -00000270 ee 94 83 9c 9e 5e 9b 01 42 03 e1 e5 0f a8 43 53 |.....^..B.....CS| -00000280 cd 3d 76 01 88 ba bf 78 b8 d7 b2 e9 8f 69 d1 35 |.=v....x.....i.5| -00000290 88 44 f1 ef 20 cd 42 c6 99 99 0c a5 25 ec dc 88 |.D.. .B.....%...| -000002a0 1e b5 28 dd e4 a1 12 20 03 fa ce 38 8a 17 03 03 |..(.... ...8....| -000002b0 00 1e bc 9a e0 0d 88 a2 71 15 c3 0d 54 d3 13 d8 |........q...T...| -000002c0 d9 96 ad 95 ee 47 2c c6 ba e9 f9 50 b1 8e 1e 0b |.....G,....P....| -000002d0 17 03 03 00 13 d2 56 e3 48 c0 fa 0f 9a 95 22 e9 |......V.H.....".| -000002e0 51 c1 98 64 b4 03 09 5a |Q..d...Z| +00000000 17 03 03 02 a8 a1 f1 48 20 d7 51 ae a0 ec 04 30 |.......H .Q....0| +00000010 d3 98 bc b4 87 14 5a 73 c1 57 d9 9b b8 54 c0 cc |......Zs.W...T..| +00000020 e9 25 20 5a 1a 49 2c 3c 5d 0b a5 47 8e 58 df 3e |.% Z.I,<]..G.X.>| +00000030 44 d8 c7 68 5e e6 cd 78 41 ad 8b e2 83 5e fa 1b |D..h^..xA....^..| +00000040 05 93 18 fa c1 df 18 d0 b1 52 bc db ee f7 49 a8 |.........R....I.| +00000050 d8 fd 9c a9 f7 cd a2 b8 61 2b 09 f0 7e 03 e6 18 |........a+..~...| +00000060 7f 6b fc c8 5f 01 50 21 c9 99 94 7f 31 a8 0e 60 |.k.._.P!....1..`| +00000070 ec 21 63 b0 e7 90 0b ca 27 55 80 e2 6f 1d 6e e2 |.!c.....'U..o.n.| +00000080 47 54 a5 81 fd 65 da 31 7c 70 bf 8b 37 b7 53 fc |GT...e.1|p..7.S.| +00000090 fd 2d 46 79 69 7b aa a5 29 a2 11 ac 3c ab 20 29 |.-Fyi{..)...<. )| +000000a0 51 8d 30 da 9a 1d 0f 32 d8 3d 2a 06 0c 59 b9 5e |Q.0....2.=*..Y.^| +000000b0 fe 28 09 d6 49 7f 7c 9c 33 66 91 8e a9 b0 9c 38 |.(..I.|.3f.....8| +000000c0 94 db 68 f0 a1 60 ce 3d 95 49 3f 0a ba b1 15 f2 |..h..`.=.I?.....| +000000d0 61 e5 a0 91 72 71 28 af 43 54 0d 75 71 f9 6e 2f |a...rq(.CT.uq.n/| +000000e0 3c 6a fd 2f 96 5d a1 bc 5f 88 9f 3f 9f e3 80 94 |4..I..| +000002a0 b4 6e 11 4f 41 14 ee d8 2a 55 d9 88 1c 17 03 03 |.n.OA...*U......| +000002b0 00 1e 0b 7a 66 33 ad ae 08 ab 8e 75 dd e8 4b a1 |...zf3.....u..K.| +000002c0 ff 16 5d 43 c6 24 cc d9 0b 6e 71 a3 5e 18 03 94 |..]C.$...nq.^...| +000002d0 17 03 03 00 13 7c 2a ec 24 22 fd 49 16 b6 4f a1 |.....|*.$".I..O.| +000002e0 84 54 bf 3e a8 78 af 64 |.T.>.x.d| diff --git a/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndEd25519Given b/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndEd25519Given new file mode 100644 index 0000000000..7a8d6d0307 --- /dev/null +++ b/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndEd25519Given @@ -0,0 +1,154 @@ +>>> Flow 1 (client to server) +00000000 16 03 01 00 e0 01 00 00 dc 03 03 f4 33 e3 f1 5d |............3..]| +00000010 94 d0 5e 26 62 41 72 76 29 ff 09 d9 ba 11 e0 f1 |..^&bArv).......| +00000020 cb 58 56 ba 7d 37 44 09 31 86 b4 20 88 9f f1 76 |.XV.}7D.1.. ...v| +00000030 f4 fe 3c 7b 4e 77 fb bb 58 76 90 f2 d7 32 21 07 |..<{Nw..Xv...2!.| +00000040 d8 bf da 67 93 ba 8f e8 e4 e2 48 c3 00 08 13 02 |...g......H.....| +00000050 13 03 13 01 00 ff 01 00 00 8b 00 00 00 0e 00 0c |................| +00000060 00 00 09 31 32 37 2e 30 2e 30 2e 31 00 0b 00 04 |...127.0.0.1....| +00000070 03 00 01 02 00 0a 00 0c 00 0a 00 1d 00 17 00 1e |................| +00000080 00 19 00 18 00 16 00 00 00 17 00 00 00 0d 00 1e |................| +00000090 00 1c 04 03 05 03 06 03 08 07 08 08 08 09 08 0a |................| +000000a0 08 0b 08 04 08 05 08 06 04 01 05 01 06 01 00 2b |...............+| +000000b0 00 03 02 03 04 00 2d 00 02 01 01 00 33 00 26 00 |......-.....3.&.| +000000c0 24 00 1d 00 20 72 9a 7f b9 89 71 2f ab 7d 09 a7 |$... r....q/.}..| +000000d0 8e eb 17 07 21 41 01 3f d0 3e eb ae 5e 6a 05 4c |....!A.?.>..^j.L| +000000e0 74 c3 bb a2 35 |t...5| +>>> Flow 2 (server to client) +00000000 16 03 03 00 7a 02 00 00 76 03 03 00 00 00 00 00 |....z...v.......| +00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| +00000020 00 00 00 00 00 00 00 00 00 00 00 20 88 9f f1 76 |........... ...v| +00000030 f4 fe 3c 7b 4e 77 fb bb 58 76 90 f2 d7 32 21 07 |..<{Nw..Xv...2!.| +00000040 d8 bf da 67 93 ba 8f e8 e4 e2 48 c3 13 02 00 00 |...g......H.....| +00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 2f |..+.....3.$... /| +00000060 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +00000070 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 14 |.........._X.;t.| +00000080 03 03 00 01 01 17 03 03 00 17 5c 89 3f 32 3d 88 |..........\.?2=.| +00000090 9e 8a a3 d1 ae 90 75 c1 20 15 cf 41 9d 95 94 76 |......u. ..A...v| +000000a0 08 17 03 03 00 3e 7c a9 ca b7 2f 71 e0 4c b9 0d |.....>|.../q.L..| +000000b0 82 cd be 73 2f fe d2 21 d9 b3 63 fc 53 e0 ff 13 |...s/..!..c.S...| +000000c0 39 40 98 a5 7a ee ae 0b c2 bc 90 ca b6 69 8f 48 |9@..z........i.H| +000000d0 b8 5d 8f 41 62 d6 ad 92 c5 cd 40 bd 77 1c 6c 23 |.].Ab.....@.w.l#| +000000e0 5d 20 ce 87 17 03 03 02 6d cc 94 31 f8 57 e9 18 |] ......m..1.W..| +000000f0 04 31 82 f4 53 17 8d 2d 1d f9 58 15 ad 1b 5c bd |.1..S..-..X...\.| +00000100 39 85 02 37 87 c7 00 5f 0f df fd 2c cc b3 be ce |9..7..._...,....| +00000110 d1 4d 08 7f a7 5c 12 3f e7 99 67 48 0f c4 11 9e |.M...\.?..gH....| +00000120 52 06 a1 ae 8e 6c 9a 80 02 9e 88 1c 70 59 19 40 |R....l......pY.@| +00000130 d8 9b 01 35 76 f1 2f cf ba 2a ba 8c 56 90 d2 98 |...5v./..*..V...| +00000140 e9 f2 53 60 71 55 ef ca 96 8a 45 ee 6f 6e 99 e6 |..S`qU....E.on..| +00000150 57 a4 9e c4 b6 fa c4 41 fe 72 b0 2b 69 8c f0 d7 |W......A.r.+i...| +00000160 ea 27 73 b6 a6 8a bc 3c 5f c9 a3 e3 78 ae 04 4c |.'s....<_...x..L| +00000170 a5 2f b5 ac 58 63 06 a2 c5 44 99 2f 97 d7 c5 d7 |./..Xc...D./....| +00000180 4c ea 01 cb c7 f9 11 0e 6d 27 33 13 57 97 b1 7b |L.......m'3.W..{| +00000190 50 48 b2 89 f6 ee 67 36 87 22 3e cb 61 2e d7 ff |PH....g6.">.a...| +000001a0 99 c7 19 79 ff d8 af 66 95 f3 19 01 f7 67 67 47 |...y...f.....ggG| +000001b0 a8 c1 c5 56 78 4f 7d 54 63 53 7f ad 2d 35 57 91 |...VxO}TcS..-5W.| +000001c0 17 3f b3 b4 ce 69 9f d3 8e 50 eb 2d f4 dc c8 87 |.?...i...P.-....| +000001d0 49 4a 45 88 55 ab e3 8b 75 ac d2 7d 39 d0 ea a9 |IJE.U...u..}9...| +000001e0 32 9c 44 9e 81 2c 9e fc 2c 4f 2d b2 b1 30 de 2a |2.D..,..,O-..0.*| +000001f0 40 22 da d0 f3 3f d6 9e 51 14 d2 84 41 20 d3 f0 |@"...?..Q...A ..| +00000200 58 b5 ba 68 62 12 d1 4a ab 37 72 4e 56 8e 80 0f |X..hb..J.7rNV...| +00000210 0d 85 e7 1c 91 d3 1e ee 73 d0 9e 1b 6f 1b 53 1b |........s...o.S.| +00000220 c2 28 5b 9b ef 20 e3 c2 aa 4b 87 26 d9 5e 52 ef |.([.. ...K.&.^R.| +00000230 79 9d c8 4b b1 38 eb 46 73 85 ac 0b 96 34 22 61 |y..K.8.Fs....4"a| +00000240 cc cd 11 9e fb 30 b9 b7 4f 09 17 79 98 83 09 65 |.....0..O..y...e| +00000250 81 de af b1 2e f1 15 0c 4a bd fd 65 da 7b 7c 00 |........J..e.{|.| +00000260 98 fd 2f 97 de 1c e9 05 16 de b2 50 d2 5c e1 cd |../........P.\..| +00000270 19 ef d3 48 5c 03 dd ca b5 62 ce 17 b4 3c 2d e9 |...H\....b...<-.| +00000280 a8 78 6c b9 10 9c d9 2f 89 b1 7e 32 05 f7 6d d3 |.xl..../..~2..m.| +00000290 1c 30 10 1b 30 dc 17 7c c7 52 cf 93 18 b9 4f b1 |.0..0..|.R....O.| +000002a0 cd 05 e5 73 e6 00 b5 d0 42 98 cd cd 14 54 b0 01 |...s....B....T..| +000002b0 92 49 a9 e4 12 27 f9 67 df 3b b3 e9 08 d3 f6 53 |.I...'.g.;.....S| +000002c0 a7 5b 71 9f 96 3b 7e ca ac c6 81 a2 14 66 64 bf |.[q..;~......fd.| +000002d0 ff 0f 8d 5f 23 63 6e 39 7e 9c 83 3f e8 4c db d6 |..._#cn9~..?.L..| +000002e0 91 6d 47 8d 54 f3 bd 44 de e8 13 9b fd 84 5c 97 |.mG.T..D......\.| +000002f0 81 a2 c6 33 d8 d9 4e ce 8d b6 35 2f e3 a2 3a 52 |...3..N...5/..:R| +00000300 2f 6a fa 1a 22 42 07 19 41 55 5a 20 ac 12 d8 13 |/j.."B..AUZ ....| +00000310 4c 2e 41 34 81 c7 0d 83 d1 5d 3f f9 02 e6 43 69 |L.A4.....]?...Ci| +00000320 b6 08 95 fb 8a fc 27 cc d7 61 52 82 89 a3 bb 84 |......'..aR.....| +00000330 e4 53 a4 b8 96 cb 8c 53 c0 4d 16 95 a9 d1 70 23 |.S.....S.M....p#| +00000340 52 5e 7e f6 01 a3 1e 45 28 53 18 23 a0 df ab ee |R^~....E(S.#....| +00000350 2f 09 4c 02 8e dc 17 03 03 00 99 b4 38 62 ca 65 |/.L.........8b.e| +00000360 1c cf 0a ed d7 d9 65 f4 db d2 53 7b f2 bf 2a 98 |......e...S{..*.| +00000370 72 e8 2d 51 41 c2 b7 af 5e 84 40 23 64 51 16 bc |r.-QA...^.@#dQ..| +00000380 cd 3a f4 78 c2 01 c1 4f ba 6f 4a 60 c4 06 76 df |.:.x...O.oJ`..v.| +00000390 f7 19 7a aa b0 22 91 95 11 b0 07 32 50 30 be 6a |..z..".....2P0.j| +000003a0 ec 6b 94 49 8b b7 04 35 32 8f b2 71 42 9e d8 e3 |.k.I...52..qB...| +000003b0 c8 33 32 27 63 d1 fb 6f 21 9b f6 08 aa 6f be 56 |.32'c..o!....o.V| +000003c0 3c a0 77 af 7c b9 e2 a6 51 27 12 fc b3 81 c0 d7 |<.w.|...Q'......| +000003d0 53 58 94 b5 2b 34 ff 06 59 42 2e c4 aa 44 07 46 |SX..+4..YB...D.F| +000003e0 8e af 4d d8 11 d8 56 f1 4c cb 2f aa 87 99 2e 08 |..M...V.L./.....| +000003f0 9a 4a e5 11 17 03 03 00 45 a6 e5 85 12 20 f0 6d |.J......E.... .m| +00000400 2a d0 45 c0 8a f2 12 f9 61 20 ed 30 91 2d a1 a9 |*.E.....a .0.-..| +00000410 33 6f 2a 70 46 64 b0 2c 79 19 f4 11 0b 7e 3b c0 |3o*pFd.,y....~;.| +00000420 bb e8 21 bc f6 ab 09 de ef 16 17 65 32 0a 80 47 |..!........e2..G| +00000430 25 cd 0b 93 8c 14 e2 1e 1e ff 24 61 6d 4a |%.........$amJ| +>>> Flow 3 (client to server) +00000000 14 03 03 00 01 01 17 03 03 01 50 ff 2c 08 a6 b9 |..........P.,...| +00000010 a0 6d 5f 39 45 8f 85 d5 95 80 60 2c 9c 13 3f f3 |.m_9E.....`,..?.| +00000020 e4 e8 c4 34 4d 2f 58 78 a6 51 57 5b 12 85 95 57 |...4M/Xx.QW[...W| +00000030 a3 04 01 5c f1 01 a0 ae 4f 46 1d c9 ab 92 c3 43 |...\....OF.....C| +00000040 89 a9 e8 8a 5b e4 eb d9 29 4a bd 80 4a b7 bb 63 |....[...)J..J..c| +00000050 07 ca 14 47 af 5f 21 dc 85 6b 04 64 aa d3 61 4b |...G._!..k.d..aK| +00000060 5b 76 c9 ec 37 71 d8 fe 86 5a 12 a7 0d c3 a3 98 |[v..7q...Z......| +00000070 09 a9 6f 03 2b a1 e2 43 35 be 9c 34 b5 4e 0c 05 |..o.+..C5..4.N..| +00000080 fa 64 d8 9e 37 36 83 08 be ba 4d 30 2a d5 9f 43 |.d..76....M0*..C| +00000090 38 92 af 63 56 1e df 03 51 86 e9 26 5e 28 97 ff |8..cV...Q..&^(..| +000000a0 cf 91 6d fe cc a1 02 1a 34 a7 5d d2 25 20 5b ae |..m.....4.].% [.| +000000b0 ef 9e fe 0f ef 5d 74 f4 f5 14 54 47 33 f9 15 5d |.....]t...TG3..]| +000000c0 6f 85 d8 16 ed 3b 1e 3e c5 72 2f 17 65 98 5c 4c |o....;.>.r/.e.\L| +000000d0 84 c2 f4 44 6b c2 3d 04 5c 81 ef ec b8 40 e6 cb |...Dk.=.\....@..| +000000e0 20 87 3c 3b b9 38 92 5e 48 dd 20 fe e9 a8 e6 9b | .<;.8.^H. .....| +000000f0 14 2b e7 d3 77 b7 44 ed c7 eb cb 0c c8 d6 db 06 |.+..w.D.........| +00000100 3c c7 7f a3 09 b4 00 5c 93 10 79 76 0e 45 f6 d2 |<......\..yv.E..| +00000110 8b c0 91 91 7a 2d 17 e6 10 95 a2 9a df c4 da 85 |....z-..........| +00000120 88 66 f4 bb 9b d5 0f 32 f2 f2 dc a6 16 b5 e9 4d |.f.....2.......M| +00000130 f3 43 17 77 f5 51 ca 57 b8 db d1 f4 8a 22 b2 ec |.C.w.Q.W....."..| +00000140 22 27 cb 22 b8 c1 9a 17 63 01 e7 5d 2a 2b ad 03 |"'."....c..]*+..| +00000150 65 be 0d 55 c5 aa 46 31 95 df 47 17 03 03 00 59 |e..U..F1..G....Y| +00000160 d1 98 94 ed e8 1e fb 74 04 5c 11 9b eb 11 29 20 |.......t.\....) | +00000170 05 39 94 9f c8 e1 2f a5 2d 91 23 69 ca 15 34 8b |.9..../.-.#i..4.| +00000180 d7 3c 60 62 3e ae 7f fc 15 14 f1 51 a0 0d 06 30 |.<`b>......Q...0| +00000190 e7 09 8a ca 60 51 77 6d 31 b5 ac fe a1 40 ca 0c |....`Qwm1....@..| +000001a0 78 13 69 18 eb 65 41 72 c1 e9 7c dd 31 db fd 53 |x.i..eAr..|.1..S| +000001b0 16 b8 82 9e 9f b9 46 68 1c 17 03 03 00 45 46 f7 |......Fh.....EF.| +000001c0 f1 53 9c 4b 79 76 09 10 00 b6 c0 4c c4 b2 cc 4a |.S.Kyv.....L...J| +000001d0 55 41 29 28 bd b6 54 1c 56 ec 85 75 c0 52 11 ce |UA)(..T.V..u.R..| +000001e0 93 67 61 a8 52 2c 77 5d b0 b1 6b e2 02 93 65 f4 |.ga.R,w]..k...e.| +000001f0 3b d9 65 c5 5f 2b 13 c2 09 c1 c1 5d 83 8a cb 6b |;.e._+.....]...k| +00000200 db 40 e3 |.@.| +>>> Flow 4 (server to client) +00000000 17 03 03 01 da 0d f9 80 98 7a 44 ce b5 d0 2d 10 |.........zD...-.| +00000010 54 40 c8 5a e4 28 ba df 18 61 f5 d7 84 a5 38 d2 |T@.Z.(...a....8.| +00000020 d5 81 76 0e 81 d1 da 9e 99 24 81 7b 5a d0 d5 44 |..v......$.{Z..D| +00000030 df db 71 ee 84 67 f8 74 db 60 77 17 41 1f 90 1e |..q..g.t.`w.A...| +00000040 53 1c e2 bf dc d1 b9 4e 50 5b 13 76 93 e5 9b 7a |S......NP[.v...z| +00000050 98 48 36 7d fa a8 76 69 49 e4 e9 c4 00 ad 85 c3 |.H6}..viI.......| +00000060 cf 02 3e 57 90 9b 38 e0 d8 0e 23 c9 f9 34 15 6f |..>W..8...#..4.o| +00000070 9f b5 fe 5b 08 f9 87 11 36 7e d6 29 f0 99 ee e0 |...[....6~.)....| +00000080 4a ec 6a ff 6d 57 26 6d 8c 73 3f f6 1e 25 49 38 |J.j.mW&m.s?..%I8| +00000090 0c f1 dd 6a 32 90 2f 72 74 fd 33 6e 6a cb f3 b4 |...j2./rt.3nj...| +000000a0 35 ed 54 44 10 8c 2e 4d 9a 9d 83 e9 27 3e 03 d4 |5.TD...M....'>..| +000000b0 8c 10 c2 54 99 5c ab 59 ab b6 cd 39 10 4e 74 ba |...T.\.Y...9.Nt.| +000000c0 84 96 6f be 53 44 27 16 9f 64 36 63 61 75 ab 56 |..o.SD'..d6cau.V| +000000d0 c8 27 4c 31 ed cb 46 32 f6 50 f0 00 1c e3 57 40 |.'L1..F2.P....W@| +000000e0 d5 68 6e 4a 4b 9b 8e 57 ab d3 a4 c5 f5 f5 92 7e |.hnJK..W.......~| +000000f0 ac 67 a7 67 e9 e0 74 66 d9 00 53 0f 4f 96 73 4d |.g.g..tf..S.O.sM| +00000100 74 7e 47 9b fa 17 72 55 7e f3 a2 88 ad 07 dc 18 |t~G...rU~.......| +00000110 b2 26 29 6f 70 cc 35 72 af 81 c2 65 5c 88 3a c7 |.&)op.5r...e\.:.| +00000120 d1 45 73 91 9d 1f f8 85 ee 89 dc af 6e 80 97 a0 |.Es.........n...| +00000130 d9 32 19 dc 15 2a d5 86 46 ae 7d ba b3 e6 3d 81 |.2...*..F.}...=.| +00000140 65 b4 69 82 a8 9c 0f 26 63 a6 9c f2 3d ce 0f 79 |e.i....&c...=..y| +00000150 a8 08 d3 2b c0 e1 9e c7 ef 1a ca 98 95 d6 c3 d5 |...+............| +00000160 9c d6 ee 0b 12 98 4f 82 2f 98 df 47 6e 7a 04 94 |......O./..Gnz..| +00000170 5d ae c5 51 a5 d5 21 d4 a6 f7 e7 3a bd 51 53 24 |]..Q..!....:.QS$| +00000180 b8 a6 ed 5b 34 30 1d 4a 19 40 c1 cf 5f 21 3a 95 |...[40.J.@.._!:.| +00000190 ee 82 db 5f c8 54 87 da 45 df ff f3 51 b5 43 03 |..._.T..E...Q.C.| +000001a0 ee c5 84 27 c2 51 1c 23 8c 87 c4 d3 79 e7 5b 44 |...'.Q.#....y.[D| +000001b0 8f 2e be 2a 86 22 9a 7c 50 c4 09 c7 2f d6 cd d8 |...*.".|P.../...| +000001c0 b3 d5 d2 e3 33 89 89 04 5f f3 46 34 40 60 91 c2 |....3..._.F4@`..| +000001d0 35 e1 3c 39 17 62 fb 99 32 b9 9a be 66 3a 36 17 |5.<9.b..2...f:6.| +000001e0 03 03 00 1e 2a 22 40 15 e6 80 93 5f 27 1a a1 39 |....*"@...._'..9| +000001f0 d4 b1 a0 b0 e8 d6 46 1d d7 91 06 67 2a 81 a8 65 |......F....g*..e| +00000200 57 ad 17 03 03 00 13 11 e9 c2 d1 66 5e 3f 41 14 |W..........f^?A.| +00000210 82 14 88 58 57 82 2d 0e ba 8b |...XW.-...| diff --git a/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndGiven b/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndGiven index cbd8c75e9f..97fd482c32 100644 --- a/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndGiven +++ b/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedAndGiven @@ -1,180 +1,180 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 c6 01 00 00 c2 03 03 9f dd 5a e8 c2 |.............Z..| -00000010 fa 2f 38 45 33 8d f2 ab 67 03 f6 cc ba 9d 8b 33 |./8E3...g......3| -00000020 69 c8 c6 50 f4 2e 1b 2b dc 2b 2d 20 ab eb f9 db |i..P...+.+- ....| -00000030 71 a7 b4 eb 9a e0 17 04 2e a8 d2 c7 65 51 71 a3 |q...........eQq.| -00000040 9a a3 5a 64 38 45 49 dc e9 e9 e2 96 00 08 13 02 |..Zd8EI.........| +00000000 16 03 01 00 c6 01 00 00 c2 03 03 51 9e 53 ed 5f |...........Q.S._| +00000010 cd 05 55 f2 c7 47 8c e9 90 25 c7 71 4f 73 45 3b |..U..G...%.qOsE;| +00000020 03 bf 42 bd 5a 4a b9 56 ef ba e0 20 04 08 64 e1 |..B.ZJ.V... ..d.| +00000030 9d db 92 a5 4e 0c 6e 90 71 c3 ed 51 c6 23 f5 6e |....N.n.q..Q.#.n| +00000040 64 55 94 28 37 54 58 00 23 a0 53 56 00 08 13 02 |dU.(7TX.#.SV....| 00000050 13 03 13 01 00 ff 01 00 00 71 00 00 00 0e 00 0c |.........q......| 00000060 00 00 09 31 32 37 2e 30 2e 30 2e 31 00 0b 00 04 |...127.0.0.1....| 00000070 03 00 01 02 00 0a 00 0c 00 0a 00 1d 00 17 00 1e |................| 00000080 00 19 00 18 00 16 00 00 00 17 00 00 00 0d 00 04 |................| 00000090 00 02 08 04 00 2b 00 03 02 03 04 00 2d 00 02 01 |.....+......-...| -000000a0 01 00 33 00 26 00 24 00 1d 00 20 08 a9 6d 37 e7 |..3.&.$... ..m7.| -000000b0 3b e8 ab 4c d3 81 41 6e ac 3d dc 45 94 72 9c 9d |;..L..An.=.E.r..| -000000c0 43 32 f7 d0 de 5a e0 6b b3 11 23 |C2...Z.k..#| +000000a0 01 00 33 00 26 00 24 00 1d 00 20 2b 33 eb 7b ec |..3.&.$... +3.{.| +000000b0 b5 04 57 a0 f4 f8 3c 19 f2 8f 81 11 b0 2e 91 88 |..W...<.........| +000000c0 d8 be ba f3 6f 5a 80 db a3 e6 1e |....oZ.....| >>> Flow 2 (server to client) 00000000 16 03 03 00 7a 02 00 00 76 03 03 00 00 00 00 00 |....z...v.......| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| -00000020 00 00 00 00 00 00 00 00 00 00 00 20 ab eb f9 db |........... ....| -00000030 71 a7 b4 eb 9a e0 17 04 2e a8 d2 c7 65 51 71 a3 |q...........eQq.| -00000040 9a a3 5a 64 38 45 49 dc e9 e9 e2 96 13 02 00 00 |..Zd8EI.........| +00000020 00 00 00 00 00 00 00 00 00 00 00 20 04 08 64 e1 |........... ..d.| +00000030 9d db 92 a5 4e 0c 6e 90 71 c3 ed 51 c6 23 f5 6e |....N.n.q..Q.#.n| +00000040 64 55 94 28 37 54 58 00 23 a0 53 56 13 02 00 00 |dU.(7TX.#.SV....| 00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 2f |..+.....3.$... /| 00000060 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| 00000070 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 14 |.........._X.;t.| -00000080 03 03 00 01 01 17 03 03 00 17 0f f6 f3 45 0e 04 |.............E..| -00000090 df 70 96 7c 7a a6 a7 31 7a 7f b8 43 53 ab 02 32 |.p.|z..1z..CS..2| -000000a0 23 17 03 03 00 3c bc 1f 27 c5 81 3d d3 25 22 34 |#....<..'..=.%"4| -000000b0 af e3 a4 6f 22 14 e0 e8 2b 9e 91 6b b5 a5 19 b7 |...o"...+..k....| -000000c0 32 5d a9 2a 7a ff 30 71 7b a8 32 01 00 b8 52 cc |2].*z.0q{.2...R.| -000000d0 5e 46 ab 4d c0 10 a6 8d 0d 04 8a 26 5c d1 3a 62 |^F.M.......&\.:b| -000000e0 67 07 17 03 03 02 6d 54 af e4 20 90 dd 21 b4 04 |g.....mT.. ..!..| -000000f0 46 0c 01 7f 5c c4 4b 08 87 4f f0 fd 9f 64 34 55 |F...\.K..O...d4U| -00000100 3e 30 81 52 3a c7 a6 3c 7a 0d 3e e8 b0 9c 38 df |>0.R:.....8.| -00000110 2a bf 29 e0 cb 13 04 0a d0 ab 65 fc d1 0c 6a ae |*.).......e...j.| -00000120 36 03 81 56 7b dd 1d 15 a8 81 de e2 85 25 5c e5 |6..V{........%\.| -00000130 a8 38 44 dd 04 d7 52 18 0e 27 8c a3 be c3 54 f7 |.8D...R..'....T.| -00000140 54 a2 ec df 6d cb ae cf dd 77 78 01 e0 0c 02 76 |T...m....wx....v| -00000150 65 e3 da da 5b 96 2c 57 fa c5 a2 6e 3f 9f 93 f5 |e...[.,W...n?...| -00000160 af b3 fa 27 d5 46 94 c1 8c 4e 0b d5 c7 f8 21 07 |...'.F...N....!.| -00000170 08 09 27 87 a6 19 5c b1 a8 d5 c1 66 3d 0a d9 bb |..'...\....f=...| -00000180 80 77 2b 24 cf 2e 7a 51 84 37 e1 e7 05 cb e9 90 |.w+$..zQ.7......| -00000190 47 0e 5f 32 25 60 81 2c 93 43 a5 1a f5 b0 84 13 |G._2%`.,.C......| -000001a0 2f e8 37 d6 b6 4b bc 4a ad 23 41 77 b0 b7 7e a7 |/.7..K.J.#Aw..~.| -000001b0 74 db d2 13 e5 12 ab 43 51 68 da 9a d6 68 f2 82 |t......CQh...h..| -000001c0 aa 73 49 6e e4 2e 24 41 e3 5c 22 c4 88 8b 03 8b |.sIn..$A.\".....| -000001d0 2d 14 b9 55 12 60 50 a2 d3 8a a9 8f 7c c5 d9 f6 |-..U.`P.....|...| -000001e0 f2 23 93 a2 a6 55 eb 27 3a c5 f5 f8 82 0e 23 43 |.#...U.':.....#C| -000001f0 bd 3a 2d b5 e3 e3 8f d3 a6 eb 30 56 a4 7f 1c 08 |.:-.......0V....| -00000200 72 85 77 22 36 f5 7a b8 d4 b8 9c e2 1f 47 f6 81 |r.w"6.z......G..| -00000210 d6 c7 76 4e 97 51 dd 1e 89 b5 b5 12 88 f9 2d ca |..vN.Q........-.| -00000220 2e 85 c8 cc cc 95 0d 7e a8 7e c3 59 85 b2 ca 14 |.......~.~.Y....| -00000230 d7 cc 50 3b 5e 03 52 77 d3 50 8d e4 50 76 e2 36 |..P;^.Rw.P..Pv.6| -00000240 82 df b2 69 a2 cf ee 1b fb 1d 5c a1 83 8b c9 97 |...i......\.....| -00000250 23 a6 7f 85 87 df d5 59 fc d5 ad 86 c7 2c 9a 92 |#......Y.....,..| -00000260 b6 1d d1 ee 92 83 92 f9 d8 9e dd e7 d7 05 c5 c8 |................| -00000270 a5 c2 10 b3 2f 99 4a 4b fb 8a 5b c7 26 06 18 7a |..../.JK..[.&..z| -00000280 1b d4 c1 f4 d4 2c cf a1 5e d2 f0 90 3d a4 2c b7 |.....,..^...=.,.| -00000290 d4 0a 7b e4 7f 16 29 1a ad d1 45 d5 b8 9b 07 4a |..{...)...E....J| -000002a0 ab 61 32 bb 27 ac 61 c6 74 56 ec fd 93 01 a0 53 |.a2.'.a.tV.....S| -000002b0 6b 0c 8b 3f 55 3d 53 fd cf f6 da d7 5a c6 8e 8f |k..?U=S.....Z...| -000002c0 c9 e1 fd 79 6c 85 22 08 2a a4 bc 82 ea f6 53 d6 |...yl.".*.....S.| -000002d0 80 02 a7 f5 49 0c 1f c3 4c 44 f2 7f 56 3a 5f 65 |....I...LD..V:_e| -000002e0 d1 4e 62 17 61 6b f9 75 94 e7 f9 5b da 8f 65 dd |.Nb.ak.u...[..e.| -000002f0 d0 98 99 72 35 b7 0e 79 3c b5 94 2b a2 19 94 e3 |...r5..y<..+....| -00000300 7b 31 cb 74 e4 41 c6 c3 92 0b 7a 2e 48 b5 50 2b |{1.t.A....z.H.P+| -00000310 23 b6 c1 de 6c 5e 57 c9 36 e8 a1 07 4d d1 73 a8 |#...l^W.6...M.s.| -00000320 c0 7b 67 1f fb 70 01 da 86 fb e0 73 ad 79 8c 9f |.{g..p.....s.y..| -00000330 7f 28 61 e9 2c d5 f0 d5 85 e4 e9 db 87 26 f9 dc |.(a.,........&..| -00000340 af e1 ed 4d 79 f0 5d 14 10 08 70 70 66 6d 5b 32 |...My.]...ppfm[2| -00000350 22 09 7f 78 17 03 03 00 99 16 32 bb fc 9a 38 88 |"..x......2...8.| -00000360 17 0f d1 03 15 b2 70 f3 ee d7 86 ec 67 f0 f6 aa |......p.....g...| -00000370 df 63 cf 4e 4c e3 f5 7f 67 3f ef 80 b0 68 b3 d2 |.c.NL...g?...h..| -00000380 a6 91 59 1a dd 9c 9b 26 7a 4e f1 e4 cb df cf 9f |..Y....&zN......| -00000390 51 26 76 88 02 73 e7 99 15 58 06 af cb 14 52 1e |Q&v..s...X....R.| -000003a0 18 4f 81 f9 62 2b 4b bd dc e6 3b fc 5f ff e6 4b |.O..b+K...;._..K| -000003b0 b7 4b 47 39 70 69 69 89 2b ca 9a 5e 32 91 7d e9 |.KG9pii.+..^2.}.| -000003c0 2f ae d4 b2 f8 13 89 57 4c 59 55 1e e5 41 66 34 |/......WLYU..Af4| -000003d0 b3 1e c3 e9 b0 79 7b 14 f8 c0 b5 16 c9 e3 7e ce |.....y{.......~.| -000003e0 3a 2c 38 85 ea ca 91 3f cf c0 fb 61 4d 24 b4 c5 |:,8....?...aM$..| -000003f0 b5 6a 17 03 03 00 45 3a 7a af a4 51 1c f9 07 39 |.j....E:z..Q...9| -00000400 73 d5 ca e2 6f ab 7c f3 ef b0 16 ea 17 0d 03 cb |s...o.|.........| -00000410 07 fb 40 1b ae 9a 5c e9 1f c1 aa c9 e5 f5 1b 4d |..@...\........M| -00000420 1b 4b 2c 0b 8d 86 24 06 9a 64 ba a5 fd e3 69 dd |.K,...$..d....i.| -00000430 53 e5 ac 9a 2f 37 fc fd e3 c1 b4 b7 |S.../7......| +00000080 03 03 00 01 01 17 03 03 00 17 69 01 91 62 e2 e7 |..........i..b..| +00000090 ee 89 ea b5 55 95 a2 3e 69 09 0a 11 85 42 e8 fd |....U..>i....B..| +000000a0 c5 17 03 03 00 3e 2d 4a 1f 1b 45 7a f5 bf f8 50 |.....>-J..Ez...P| +000000b0 b7 90 b7 19 24 8c c6 da 49 79 83 f4 52 10 ed 5d |....$...Iy..R..]| +000000c0 fa 26 91 28 13 bc a9 c2 f9 6b 4c e9 f7 79 cb 87 |.&.(.....kL..y..| +000000d0 1d ac a4 7a d9 84 25 e8 68 27 67 7f 85 f9 e1 3e |...z..%.h'g....>| +000000e0 04 2c fe aa 17 03 03 02 6d ca f8 97 e5 6f f8 f7 |.,......m....o..| +000000f0 1a 8b a1 c2 81 b5 a4 f3 6d d9 83 30 00 6b 4a 92 |........m..0.kJ.| +00000100 99 0c c1 71 69 c6 57 0b c6 09 8c dd 17 19 14 4f |...qi.W........O| +00000110 7f 22 f1 d1 28 13 6c b7 e7 89 d7 4b b2 cd 56 e4 |."..(.l....K..V.| +00000120 b6 b8 7c ca 18 41 43 e7 74 ef 39 c6 b9 dd 3f 23 |..|..AC.t.9...?#| +00000130 62 fa 59 70 1c 7c ff e9 41 d0 04 fe ae f4 25 75 |b.Yp.|..A.....%u| +00000140 0f b1 cf b9 b0 bb 95 50 be 9a be 9a 7a 1c 03 3b |.......P....z..;| +00000150 ae 01 ee 91 aa f6 7a 47 40 67 f4 1b 5b 86 36 58 |......zG@g..[.6X| +00000160 88 0f 68 1a 9d cd 1a e1 aa 3e 61 77 67 fd 5a aa |..h......>awg.Z.| +00000170 96 b9 8f cd fe 28 68 ed 25 0f 7f 8a a1 31 24 44 |.....(h.%....1$D| +00000180 bd 4a 03 e8 f8 cc 63 d1 fc 12 eb c0 47 4c 30 1e |.J....c.....GL0.| +00000190 82 77 4d 45 50 03 d4 2c 0b a3 d7 af 0c 7e 61 68 |.wMEP..,.....~ah| +000001a0 98 c0 5f cf b9 54 75 be 76 08 9e 68 07 62 96 8c |.._..Tu.v..h.b..| +000001b0 b8 24 0e b9 c4 2a 27 72 72 de 00 d1 38 a5 42 8b |.$...*'rr...8.B.| +000001c0 38 23 78 9e 68 c2 d6 62 db 82 5a 46 5b 57 19 a4 |8#x.h..b..ZF[W..| +000001d0 11 00 7c e9 14 56 79 ea ac 24 26 c0 d4 16 45 8c |..|..Vy..$&...E.| +000001e0 28 ca 88 6f 72 f3 f8 18 26 3f 00 e5 62 c2 9f 67 |(..or...&?..b..g| +000001f0 46 9f 99 f1 61 af b7 b0 05 42 59 13 5b 0f 0d a7 |F...a....BY.[...| +00000200 bc 9e 7e 3f 6e 24 74 bf 93 a0 9d 09 89 a8 a6 4d |..~?n$t........M| +00000210 07 5d aa 24 2c 86 e5 80 7f 4b a3 c3 02 41 8b e5 |.].$,....K...A..| +00000220 56 7a be 9f 5f b0 9d 41 51 e6 b8 d8 67 66 df 89 |Vz.._..AQ...gf..| +00000230 00 07 83 06 8b 5b 84 e6 8a 92 3c de 1f 4c 2b bc |.....[....<..L+.| +00000240 9d 7f ec e8 c3 0e ee 4a 80 2c e4 f0 d7 84 b3 a8 |.......J.,......| +00000250 7d c7 f5 91 b9 91 43 14 45 77 a4 84 f7 a6 72 f0 |}.....C.Ew....r.| +00000260 cd a2 7f 12 b6 e2 6f d3 93 5a d9 c8 39 4b 95 29 |......o..Z..9K.)| +00000270 2a be 4c dd a5 82 ec da ee 98 c9 0f 10 18 e4 da |*.L.............| +00000280 f4 3f 33 86 11 e4 5c 36 05 07 02 d1 21 5d 48 5f |.?3...\6....!]H_| +00000290 8b ec b1 33 25 65 ef 33 d4 87 6e f9 cf f8 e4 79 |...3%e.3..n....y| +000002a0 f8 23 82 10 1e 5e c5 e7 60 82 6d b5 57 3c 54 f3 |.#...^..`.m.W.Oq.n| +00000370 b0 04 89 76 d0 4e be 85 cc b1 dc c6 f0 ba 0c a8 |...v.N..........| +00000380 81 86 0d 8d bf d0 93 c5 3a 28 a8 ac df f9 7c eb |........:(....|.| +00000390 10 4b bc dc 1b a7 4d f9 25 b3 09 9a 80 6f 83 0e |.K....M.%....o..| +000003a0 9d 62 a9 6e 33 d8 85 96 78 3d f1 1f b7 6b 87 f7 |.b.n3...x=...k..| +000003b0 30 dd 09 ea 06 f3 cc 7a 82 96 e8 f7 cd f2 99 7f |0......z........| +000003c0 53 da dd ab b6 f2 da 94 94 cf b1 6f 21 e2 7b 9f |S..........o!.{.| +000003d0 90 ab 18 fc 61 84 d6 97 87 a0 14 2e cf 02 42 74 |....a.........Bt| +000003e0 68 a0 5b cc 1a 63 fc 4e e0 a9 ca 59 89 ae fc ef |h.[..c.N...Y....| +000003f0 41 54 65 cf 17 03 03 00 45 ba bb ae e4 a3 04 5c |ATe.....E......\| +00000400 30 19 79 ff 6a b5 0c dc ab c8 cd e5 bf 2d 9c 3e |0.y.j........-.>| +00000410 44 98 1b cd bb 2a 08 10 75 ab b9 d1 62 a5 e1 21 |D....*..u...b..!| +00000420 51 32 75 38 89 67 83 3b 3f f5 e7 71 53 8f 2f d0 |Q2u8.g.;?..qS./.| +00000430 81 98 cb 75 b2 99 40 bf 01 a0 bb 0b b0 0e |...u..@.......| >>> Flow 3 (client to server) -00000000 14 03 03 00 01 01 17 03 03 02 11 1c af 9f 29 61 |..............)a| -00000010 e3 1f bf c8 44 89 cf 28 10 cb e5 63 05 0c fa cf |....D..(...c....| -00000020 38 79 7c 63 5d 1d 6b 40 68 ea 54 41 3d 3a 39 83 |8y|c].k@h.TA=:9.| -00000030 8b e2 29 e9 f6 4d 4e e4 14 33 36 78 b2 bb 01 e1 |..)..MN..36x....| -00000040 84 c4 59 30 01 65 9b 6b b1 35 2d 3e 02 fa 9b db |..Y0.e.k.5->....| -00000050 51 d1 25 bc 4d fa a1 e8 24 e9 7e cc 97 b0 f2 40 |Q.%.M...$.~....@| -00000060 92 0f b0 1c 0a 0a 24 3e 77 d5 4f 0f c0 54 e7 f5 |......$>w.O..T..| -00000070 56 87 ff 46 0a 12 7f 49 18 76 40 3d ce 64 53 a8 |V..F...I.v@=.dS.| -00000080 f8 1a 95 70 dc 8f 1c b0 2d ba 55 42 89 1d fa 9a |...p....-.UB....| -00000090 cf d5 ba f0 fb f8 fe ad c8 5f e0 47 28 ce 48 2f |........._.G(.H/| -000000a0 a3 6c 7c 05 04 5f 3f 0a 95 ca 04 2f 6a b3 02 9c |.l|.._?..../j...| -000000b0 f3 23 d9 fd 13 75 45 5d a6 22 3f 72 6d 7e 35 60 |.#...uE]."?rm~5`| -000000c0 bd c1 b3 8d d4 42 4a b8 69 31 82 0c 83 94 84 76 |.....BJ.i1.....v| -000000d0 77 5e ca 19 8c d2 4f b1 94 71 2d 3d e9 34 3b 39 |w^....O..q-=.4;9| -000000e0 7f f0 b1 0b 8c e7 18 7e 37 89 c9 98 38 31 21 39 |.......~7...81!9| -000000f0 a4 52 b8 d0 0e 09 fb eb c1 e2 ef f1 37 4f d2 29 |.R..........7O.)| -00000100 13 4b 87 f9 88 19 71 bd d7 48 c9 8f 94 a3 51 4e |.K....q..H....QN| -00000110 65 4b 66 8a 48 9b 33 bf 14 70 24 24 e3 1c b3 6c |eKf.H.3..p$$...l| -00000120 0d f3 b1 74 5a bd a6 a4 f3 e9 1f 95 81 88 6d cb |...tZ.........m.| -00000130 19 44 67 b6 ee f7 65 af bf ec 0a 55 13 a6 65 41 |.Dg...e....U..eA| -00000140 49 4f be 8f c5 f2 a7 7c 27 ac ad fa 02 a5 75 54 |IO.....|'.....uT| -00000150 53 a5 a9 b5 7f b9 7d 70 2e 2d 48 27 fe 63 e6 ab |S.....}p.-H'.c..| -00000160 ea 13 47 0e 8f a5 8d 19 42 0f 8c 26 ba cd a2 98 |..G.....B..&....| -00000170 f5 e3 28 a7 a1 6d 56 95 0b 7f a1 c2 5e 77 56 81 |..(..mV.....^wV.| -00000180 5d c8 7f a8 00 4c a4 09 c1 ed 43 0e a2 65 8f 66 |]....L....C..e.f| -00000190 47 02 0f 0d 46 d5 42 d8 f5 e8 a7 f2 50 1b 09 02 |G...F.B.....P...| -000001a0 4d a9 39 78 6b fc 24 23 4b 2a 49 ef b7 60 70 78 |M.9xk.$#K*I..`px| -000001b0 f3 6f a0 2e 8f e3 20 b6 b9 76 ce 4d e4 56 e0 f3 |.o.... ..v.M.V..| -000001c0 b8 9f d2 02 f7 63 e9 80 ed 43 16 49 c9 3a c2 41 |.....c...C.I.:.A| -000001d0 8c f9 98 b7 3a 31 cb e6 78 3b ad ee 5f 52 c3 0a |....:1..x;.._R..| -000001e0 d7 dc 5f 67 89 6a 0a db 1f 7f 4b fc 08 0e a2 e1 |.._g.j....K.....| -000001f0 23 4b d6 a0 36 10 c7 e5 95 71 86 cb 1a 70 89 55 |#K..6....q...p.U| -00000200 2c 58 8a 55 f8 26 89 b1 40 1e 11 b0 b5 3e 0d eb |,X.U.&..@....>..| -00000210 33 cb 37 1c 80 6c b7 0e 84 96 a0 67 17 03 03 00 |3.7..l.....g....| -00000220 99 ae 4c b5 06 1e 69 cb 7d 28 42 7f 47 c8 1b bf |..L...i.}(B.G...| -00000230 8c 0a af 18 fc 5a 4d db 2c c5 b3 7d cc e5 28 be |.....ZM.,..}..(.| -00000240 ec 3a f7 e4 ec b1 11 01 67 f6 3b 0e a6 55 03 67 |.:......g.;..U.g| -00000250 76 8c 3f d3 0a cc 97 90 f2 51 d4 ee 58 3e 9c 78 |v.?......Q..X>.x| -00000260 e1 b4 57 4d 42 c1 fd e1 4c c5 6e 1f 5e 8e d9 fd |..WMB...L.n.^...| -00000270 f9 71 86 c9 63 7c 42 df 53 b0 99 06 3d 21 3e 06 |.q..c|B.S...=!>.| -00000280 d7 56 2f 90 b8 09 f5 77 8b 8a 4b 7e f5 78 05 73 |.V/....w..K~.x.s| -00000290 85 10 e7 b4 71 02 77 a0 2c cb db 76 53 0b b4 34 |....q.w.,..vS..4| -000002a0 56 37 7f 45 13 b4 72 f0 24 24 e4 47 1b ce b2 78 |V7.E..r.$$.G...x| -000002b0 44 82 73 f6 3a 77 68 5c ce 02 17 03 03 00 45 17 |D.s.:wh\......E.| -000002c0 d8 40 a5 44 fe 96 82 bc 27 1c 2f c6 c5 6e 0c 47 |.@.D....'./..n.G| -000002d0 52 9d 90 cd f6 43 03 d5 f0 1b 4a 11 38 56 f3 0b |R....C....J.8V..| -000002e0 73 cb 01 d3 69 33 1a 95 4b 5e 75 55 99 a9 a2 fe |s...i3..K^uU....| -000002f0 28 58 4e 54 92 5e 08 71 4b 40 42 a1 e6 94 ec c0 |(XNT.^.qK@B.....| -00000300 bc ac 82 8e |....| +00000000 14 03 03 00 01 01 17 03 03 02 11 25 5d 22 6c 20 |...........%]"l | +00000010 8a 8e d3 aa 97 5a 96 46 a0 69 a3 5c 0f d4 ad c0 |.....Z.F.i.\....| +00000020 6f e4 6f df 99 28 d3 e1 bd ce a5 8c 69 6a c4 9b |o.o..(......ij..| +00000030 a5 eb e2 d8 db a4 1d ea 55 ff be c2 14 dc 63 74 |........U.....ct| +00000040 b8 4d 44 aa 87 65 5c 1e a2 10 8c 0f ae 0c 0e 76 |.MD..e\........v| +00000050 89 4c 05 65 c5 19 e3 d4 d1 eb 9e e5 2d 8a 62 ae |.L.e........-.b.| +00000060 55 d6 a3 37 46 9b 3c 4c ad d0 82 7e 0a 36 48 38 |U..7F.4a.| +00000130 a6 1e 18 45 1a c5 1c 8a aa ad cd 67 bf 37 30 46 |...E.......g.70F| +00000140 37 eb 13 1f c2 6a 7f 39 47 b8 91 a4 c9 9e 70 7c |7....j.9G.....p|| +00000150 73 62 69 7b c1 30 99 97 d3 34 2f 83 84 3d de a8 |sbi{.0...4/..=..| +00000160 dc b5 ce d4 69 ff 5e a8 b8 31 05 e0 6b 3b 14 93 |....i.^..1..k;..| +00000170 10 11 51 ae e6 29 df 54 34 30 01 6c 46 24 76 3a |..Q..).T40.lF$v:| +00000180 dd 24 f1 84 d3 27 a7 45 9a 19 4a 09 63 7b 00 6d |.$...'.E..J.c{.m| +00000190 b8 11 72 06 e4 8a aa b2 3b 08 eb 17 ae 88 18 18 |..r.....;.......| +000001a0 51 8f fb 80 5f 01 2a 2c bc 47 10 cf da d1 ec 11 |Q..._.*,.G......| +000001b0 34 6d fd d0 c1 c0 a7 26 f3 3a 2e 43 7f 3a 63 eb |4m.....&.:.C.:c.| +000001c0 7b e4 a5 c8 23 ff 6b 7a e9 8e 70 c4 9d 39 b4 3c |{...#.kz..p..9.<| +000001d0 4d 40 bc 1e ff e4 7d 47 13 54 64 e7 98 7f cd df |M@....}G.Td.....| +000001e0 90 89 19 89 92 8c 39 1b 5c 53 4b c2 7b 38 5c 5a |......9.\SK.{8\Z| +000001f0 01 e3 2f f9 a3 f5 a2 c0 79 ff 99 a9 89 40 91 40 |../.....y....@.@| +00000200 4e 96 73 15 f5 16 bd ac be e3 ef fa 8a b8 df bf |N.s.............| +00000210 ec 86 3b 67 93 59 45 6a b8 ce a1 04 17 03 03 00 |..;g.YEj........| +00000220 99 21 d2 f9 b5 d7 ca 07 c4 b9 f7 80 87 c4 ce 95 |.!..............| +00000230 8f fa f0 a9 c6 99 89 93 18 50 b6 1b 4c ae ff e7 |.........P..L...| +00000240 2b 29 81 14 20 6a 13 bc 7f 6c b2 6f e4 09 b7 96 |+).. j...l.o....| +00000250 49 93 37 2b 1d 7e 16 3f b0 bd 22 dd 0f 04 71 29 |I.7+.~.?.."...q)| +00000260 38 eb dc a8 85 48 68 17 59 72 0b f2 4f 78 4c 30 |8....Hh.Yr..OxL0| +00000270 db bf 60 a0 56 80 be aa 80 fd ab 87 55 2e 49 6d |..`.V.......U.Im| +00000280 47 38 b9 b1 b4 c2 05 09 16 28 e5 89 dd f1 3d 32 |G8.......(....=2| +00000290 83 66 fb ca de 37 9c ed 74 2a 7b a1 3a 50 0c 4d |.f...7..t*{.:P.M| +000002a0 4c 44 bd 3b 3a 76 33 1c e1 46 91 95 02 a7 b7 a3 |LD.;:v3..F......| +000002b0 9b 3b 9c 19 0a b5 5d 81 32 66 17 03 03 00 45 b6 |.;....].2f....E.| +000002c0 a2 53 eb aa 3c 74 29 1c 36 1e 9f fb 30 c9 48 5c |.S...|| >>> Flow 4 (server to client) -00000000 17 03 03 02 9b bf 6f 39 51 ff 9a ee ff 16 51 98 |......o9Q.....Q.| -00000010 49 e5 88 3d b3 ea b4 14 1d a7 8c ae 11 da 7b 08 |I..=..........{.| -00000020 99 ad 7d 23 e7 3a 78 8f b1 ca c1 2c b5 f7 84 bf |..}#.:x....,....| -00000030 0d 48 0b 1e 3f 6d 56 d7 7c 84 df f0 39 ee 77 ff |.H..?mV.|...9.w.| -00000040 af 7b f5 f2 6e 59 dc 4e 92 a8 b5 d0 64 03 5a 87 |.{..nY.N....d.Z.| -00000050 9d 4b 0c d7 00 0c e7 7e 2d 4a e0 da 63 10 cc a6 |.K.....~-J..c...| -00000060 a0 8e 8b ff 04 e2 49 75 01 4f b9 6a cd 5c 90 82 |......Iu.O.j.\..| -00000070 3c e3 67 d0 a0 93 b7 9b 4d f3 f8 b6 67 d3 fd f6 |<.g.....M...g...| -00000080 e3 d2 d0 dd 0f 6c 89 92 95 4f b6 74 56 5c f8 f5 |.....l...O.tV\..| -00000090 a1 33 3d e6 31 05 93 d8 09 d8 3c 0b e3 a7 9f b9 |.3=.1.....<.....| -000000a0 4b c7 0a de 1c 71 8a d6 63 44 b8 7d 11 6f 1e 8d |K....q..cD.}.o..| -000000b0 d8 7f 3f 9f 39 77 8b 2d 7a fd 01 e1 9e 45 58 b6 |..?.9w.-z....EX.| -000000c0 f8 eb f6 48 9b f2 fc 95 ba 75 56 42 5c 01 22 39 |...H.....uVB\."9| -000000d0 ab df c2 2d 32 9c de f6 fa 51 00 d0 77 a8 47 34 |...-2....Q..w.G4| -000000e0 b2 cf dd 9e d5 d6 c2 fd 0e db 98 71 6a 30 82 4e |...........qj0.N| -000000f0 4a 36 ce 6c c8 27 a0 92 77 ec 04 e8 ed 20 0d f4 |J6.l.'..w.... ..| -00000100 1e 9a 5c ae 71 db 06 6a ed ba 18 0e 65 94 dc f1 |..\.q..j....e...| -00000110 60 67 34 d4 6a 9d 4b ed 4b 80 69 2e 52 8b e2 ba |`g4.j.K.K.i.R...| -00000120 17 aa b7 75 0f 02 bf b9 95 f1 05 83 2c 2a e8 7d |...u........,*.}| -00000130 62 17 0e 89 c5 40 fb bb 98 14 98 f4 68 09 af 73 |b....@......h..s| -00000140 e2 f9 35 68 19 d7 56 66 dd 36 1f 8e 6e 1c 73 e4 |..5h..Vf.6..n.s.| -00000150 98 ef b0 f3 31 ae 58 de 91 56 a6 eb ee 4c f6 57 |....1.X..V...L.W| -00000160 5b 6c e7 f9 c3 51 c7 2c 78 40 c0 37 14 0d c4 12 |[l...Q.,x@.7....| -00000170 18 4c 96 24 69 19 53 de 07 a3 50 b4 00 fa cd 47 |.L.$i.S...P....G| -00000180 e4 a3 4f 3a 0c 44 82 b7 90 7d 55 6d 6f b1 68 04 |..O:.D...}Umo.h.| -00000190 02 3d 60 14 80 8b 4b 7d 13 55 5c 1b d2 73 f2 03 |.=`...K}.U\..s..| -000001a0 31 a1 12 f3 cc df 5f 2e 14 5d 15 7b 6c a8 66 10 |1....._..].{l.f.| -000001b0 3d ee 11 e0 bd 0f ff b6 d9 9d 2b b8 59 0c b5 f5 |=.........+.Y...| -000001c0 ec 78 80 bd 11 85 6b b7 67 01 25 5d 1f 14 26 4c |.x....k.g.%]..&L| -000001d0 60 48 0e 40 7f 2e a5 d9 09 25 e9 45 87 6e b3 a9 |`H.@.....%.E.n..| -000001e0 e2 19 5a 58 4c 3e 53 0e 1f d1 55 42 3f bc d0 26 |..ZXL>S...UB?..&| -000001f0 4e 9a dc 00 ac 2e 8b ac 4d e2 76 d0 80 80 09 87 |N.......M.v.....| -00000200 8b fe c6 9b c5 43 2d 56 b6 13 e2 eb 91 94 d9 0c |.....C-V........| -00000210 40 4f e6 96 af b2 c5 fb 75 9d 51 24 09 b0 8d 4f |@O......u.Q$...O| -00000220 68 c5 b1 7a 0e 22 03 84 21 14 b5 db f7 97 d4 60 |h..z."..!......`| -00000230 c9 ee 49 a0 9a 14 d4 bb 3c 54 91 61 ac 78 40 0f |..I......j.c9| -000002c0 64 e8 05 17 03 03 00 13 3b b0 06 df 04 01 7a 90 |d.......;.....z.| -000002d0 46 4a 2e 57 1c 66 26 f0 d8 4c ea |FJ.W.f&..L.| +00000000 17 03 03 02 9b fe 23 52 d0 ff dd ef e2 10 c1 70 |......#R.......p| +00000010 a1 c1 ac d6 e7 30 63 41 07 d5 04 ef 11 ee e7 57 |.....0cA.......W| +00000020 81 14 5b 81 9d 35 3f 73 be 44 15 6b ed 8c b7 e0 |..[..5?s.D.k....| +00000030 59 2c d7 0b 0c aa 7a 18 6a da d6 90 19 64 54 d5 |Y,....z.j....dT.| +00000040 30 73 cf 0e c8 d1 8a 69 a6 68 a4 ce 61 2f c8 4a |0s.....i.h..a/.J| +00000050 58 81 42 1c 5f ee b3 fc 05 66 bf d0 14 45 8f ab |X.B._....f...E..| +00000060 da 82 fe 86 da 1f b0 f6 d5 12 14 1e 78 d0 1c e8 |............x...| +00000070 e7 a3 5e af e6 71 42 45 70 4c 95 4a 16 a0 0e a4 |..^..qBEpL.J....| +00000080 27 6b c4 53 35 63 2a 19 76 d7 e0 7c 92 a2 89 df |'k.S5c*.v..|....| +00000090 be 1f 5d 03 24 06 de 3e d9 c0 12 91 d4 3d 86 a7 |..].$..>.....=..| +000000a0 b6 8b ed 31 e5 81 cc 5e 76 72 25 15 ba 78 54 ab |...1...^vr%..xT.| +000000b0 5b a1 a7 68 e6 44 3f a3 f5 e9 3d 10 ed b5 21 f5 |[..h.D?...=...!.| +000000c0 02 fd 48 cc 9f 1a 2c 4e 47 4b 37 39 5a 8b 42 32 |..H...,NGK79Z.B2| +000000d0 69 52 e6 ae ba 80 80 af 8d 67 d1 38 bb bb 97 55 |iR.......g.8...U| +000000e0 2a 69 28 ef c5 8e 49 fc 87 7a 45 64 57 cf 76 01 |*i(...I..zEdW.v.| +000000f0 94 57 a2 11 13 5e 99 05 6c 7c 52 97 fb 4c 81 09 |.W...^..l|R..L..| +00000100 68 5d c6 91 ef cc 0f 77 71 ac 55 53 d8 2d cb 26 |h].....wq.US.-.&| +00000110 d5 0e c9 36 70 83 85 dd 7d 7e 0d 22 24 26 91 ec |...6p...}~."$&..| +00000120 3d b0 e1 c3 62 22 a9 09 a2 e4 ba e4 4d 53 ec c1 |=...b"......MS..| +00000130 56 c5 b5 92 9a 33 00 f6 21 2c a3 9e 78 85 8e 65 |V....3..!,..x..e| +00000140 24 e5 ad b6 02 26 4d 03 8d 02 62 3c b0 16 3c 2e |$....&M...b<..<.| +00000150 c2 4a 10 11 45 93 2b 96 87 d0 8e 22 43 ca ad 7f |.J..E.+...."C...| +00000160 fe ac db 12 e1 9d e0 ff 03 93 d1 90 cc 9c 27 19 |..............'.| +00000170 1b c5 ba 62 39 55 38 17 44 76 d4 2a 63 54 47 c9 |...b9U8.Dv.*cTG.| +00000180 de db f0 59 ee 6e ed 26 11 93 07 15 eb 03 98 87 |...Y.n.&........| +00000190 bd 15 98 29 14 8b 7a 6c b2 08 6d 86 35 64 0f 4e |...)..zl..m.5d.N| +000001a0 73 e3 60 86 8a 3a 68 0f e8 74 07 78 1d c2 96 fe |s.`..:h..t.x....| +000001b0 b9 0c 4b 0b 31 39 8b 9e 9d 86 57 5e 5c f6 fc 7b |..K.19....W^\..{| +000001c0 fc bd 9b 01 6e a2 33 c4 0a 00 89 22 13 45 2b e2 |....n.3....".E+.| +000001d0 6b 9c 1e 35 b7 df 9e 27 3b 38 26 e4 60 c7 ee a5 |k..5...';8&.`...| +000001e0 9e c2 24 38 ee 3d 44 79 07 77 bc a9 bc 4a 4c 7d |..$8.=Dy.w...JL}| +000001f0 9f d9 e8 9c 91 88 75 92 98 74 a0 e1 ef be 66 3c |......u..t....f<| +00000200 77 be 3f 1c 24 4d 96 49 23 a3 cd 80 60 9a b0 5b |w.?.$M.I#...`..[| +00000210 fa f2 79 54 0d cb 08 7b 52 93 1c 8d ba 18 f3 ce |..yT...{R.......| +00000220 5b 3f c8 c4 4c 12 00 9f 1f 9c 57 d9 16 d5 a2 05 |[?..L.....W.....| +00000230 c3 fa 4e 6d 7e 78 d5 99 33 0f 07 60 1a e9 58 aa |..Nm~x..3..`..X.| +00000240 37 57 4b a4 1c 20 99 29 4c 52 af 1f 02 64 01 87 |7WK.. .)LR...d..| +00000250 a1 fe 73 09 fa ff 04 f6 91 23 0c 56 16 08 16 ba |..s......#.V....| +00000260 3c bb a9 c4 b2 a1 f6 93 45 c0 1a b7 43 9d e2 d5 |<.......E...C...| +00000270 ea dc d1 03 ec 32 83 55 00 59 40 2e 41 8f 52 0e |.....2.U.Y@.A.R.| +00000280 51 22 e9 39 07 04 40 82 ee e8 f9 4a a3 83 63 b6 |Q".9..@....J..c.| +00000290 2e 9a e8 d2 21 04 dd c0 8f a0 e8 33 55 87 3c f3 |....!......3U.<.| +000002a0 17 03 03 00 1e 17 c1 06 2e 7b c7 3e a7 12 4f e2 |.........{.>..O.| +000002b0 96 ac 58 bc 0b 22 95 47 19 5e e0 35 f2 53 0f 78 |..X..".G.^.5.S.x| +000002c0 1d db 93 17 03 03 00 13 9a da 86 87 00 57 0a a0 |.............W..| +000002d0 e6 4f 26 1a e8 9c 5a 5d 89 19 9a |.O&...Z]...| diff --git a/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedNotGiven b/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedNotGiven index c9c8728b6e..5c9675feb4 100644 --- a/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedNotGiven +++ b/src/crypto/tls/testdata/Server-TLSv13-ClientAuthRequestedNotGiven @@ -1,9 +1,9 @@ >>> Flow 1 (client to server) -00000000 16 03 01 00 e0 01 00 00 dc 03 03 d7 9c 79 99 50 |.............y.P| -00000010 c9 4b 3a e0 a1 36 a8 fc 40 bb 51 a9 71 a6 ba 2f |.K:..6..@.Q.q../| -00000020 1b ba 13 f3 b6 8b 2b 77 f1 60 27 20 a6 a3 e8 5a |......+w.`' ...Z| -00000030 4b cb 7c 64 05 b4 77 3b af 66 4b e3 5a b3 cb 57 |K.|d..w;.fK.Z..W| -00000040 84 d3 fa 5d 7f 5a cd 94 62 79 31 4a 00 08 13 02 |...].Z..by1J....| +00000000 16 03 01 00 e0 01 00 00 dc 03 03 a7 91 25 cb c3 |.............%..| +00000010 c2 53 ec 92 0f e7 4c 06 3a 35 ee c9 09 f1 6a 94 |.S....L.:5....j.| +00000020 27 bf 12 7d f8 e5 c3 1a 45 dc a0 20 c8 75 ac df |'..}....E.. .u..| +00000030 fc 9f f5 43 eb ee 5a d8 94 3a f8 10 2d 42 d4 fd |...C..Z..:..-B..| +00000040 2c 80 9f 13 73 c9 02 77 32 c0 50 59 00 08 13 02 |,...s..w2.PY....| 00000050 13 03 13 01 00 ff 01 00 00 8b 00 00 00 0e 00 0c |................| 00000060 00 00 09 31 32 37 2e 30 2e 30 2e 31 00 0b 00 04 |...127.0.0.1....| 00000070 03 00 01 02 00 0a 00 0c 00 0a 00 1d 00 17 00 1e |................| @@ -11,99 +11,99 @@ 00000090 00 1c 04 03 05 03 06 03 08 07 08 08 08 09 08 0a |................| 000000a0 08 0b 08 04 08 05 08 06 04 01 05 01 06 01 00 2b |...............+| 000000b0 00 03 02 03 04 00 2d 00 02 01 01 00 33 00 26 00 |......-.....3.&.| -000000c0 24 00 1d 00 20 c6 c0 3a af 99 9f ef 6d 59 6b bd |$... ..:....mYk.| -000000d0 c3 b0 8a 94 02 c8 fb 13 7d cb a8 3a f4 f1 e0 40 |........}..:...@| -000000e0 03 15 7a 95 06 |..z..| +000000c0 24 00 1d 00 20 ab 7a fe 9c a7 15 e8 53 6d 6e be |$... .z.....Smn.| +000000d0 8b 1f 25 bb f9 6c 15 4c ca 78 c0 b6 b1 20 ab 03 |..%..l.L.x... ..| +000000e0 3d 09 06 cc 49 |=...I| >>> Flow 2 (server to client) 00000000 16 03 03 00 7a 02 00 00 76 03 03 00 00 00 00 00 |....z...v.......| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| -00000020 00 00 00 00 00 00 00 00 00 00 00 20 a6 a3 e8 5a |........... ...Z| -00000030 4b cb 7c 64 05 b4 77 3b af 66 4b e3 5a b3 cb 57 |K.|d..w;.fK.Z..W| -00000040 84 d3 fa 5d 7f 5a cd 94 62 79 31 4a 13 02 00 00 |...].Z..by1J....| +00000020 00 00 00 00 00 00 00 00 00 00 00 20 c8 75 ac df |........... .u..| +00000030 fc 9f f5 43 eb ee 5a d8 94 3a f8 10 2d 42 d4 fd |...C..Z..:..-B..| +00000040 2c 80 9f 13 73 c9 02 77 32 c0 50 59 13 02 00 00 |,...s..w2.PY....| 00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 2f |..+.....3.$... /| 00000060 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| 00000070 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 14 |.........._X.;t.| -00000080 03 03 00 01 01 17 03 03 00 17 d8 15 a1 e7 a9 00 |................| -00000090 bf 9d 8d 63 5d ba b1 5a 08 c2 de 57 7e 73 61 5d |...c]..Z...W~sa]| -000000a0 2f 17 03 03 00 3c 59 ed f4 2a 62 56 2a 02 73 4f |/.......r....4| -00000350 2f 45 81 fe 17 03 03 00 99 ef 4a 43 25 8d dd 0d |/E........JC%...| -00000360 e5 af 9e e3 46 e1 84 de f1 68 5f 9b f6 70 17 6f |....F....h_..p.o| -00000370 7e 86 33 45 b6 13 f0 a8 a2 fd 08 1b 4a 4f 92 3f |~.3E........JO.?| -00000380 45 ef db 03 ff 1f 54 55 28 cc de 0e f5 6c af 5c |E.....TU(....l.\| -00000390 86 cc b1 e2 c7 0e ea 24 47 fb e0 37 e8 a2 e7 47 |.......$G..7...G| -000003a0 cd 9e da 02 e5 37 1f a9 b2 ea 57 f8 6f 63 be 5e |.....7....W.oc.^| -000003b0 38 be 1a 09 38 23 46 52 df cf 79 bc ce c1 da 23 |8...8#FR..y....#| -000003c0 34 97 c8 ce 81 74 d5 03 f4 71 ff 4b 17 e0 99 7c |4....t...q.K...|| -000003d0 31 bd c9 1e d5 2b d3 d4 ff dc 56 82 07 f5 a6 57 |1....+....V....W| -000003e0 0e ab 18 cf db 38 26 ff d9 51 c2 8f 70 b8 5b 84 |.....8&..Q..p.[.| -000003f0 80 27 17 03 03 00 45 95 7b 2b 46 29 0a 03 4f c6 |.'....E.{+F)..O.| -00000400 37 0c 31 e8 72 8a aa 00 db 90 e8 d3 1f c1 e1 eb |7.1.r...........| -00000410 03 02 bc ae dd 03 a7 28 55 7e 19 0d 5f 76 e6 fa |.......(U~.._v..| -00000420 03 91 c2 5a 10 1d c0 a0 85 3d d2 32 ec 65 af 83 |...Z.....=.2.e..| -00000430 25 d1 77 0f 41 d9 e7 43 56 04 4e fe |%.w.A..CV.N.| +00000080 03 03 00 01 01 17 03 03 00 17 c2 3f e2 45 30 ec |...........?.E0.| +00000090 10 bf f7 4e 69 42 22 e6 80 64 0a a2 29 07 c6 92 |...NiB"..d..)...| +000000a0 4c 17 03 03 00 3e d1 75 9b 8c a1 3f 5d b3 11 da |L....>.u...?]...| +000000b0 27 79 d3 9c 7f 54 9b 37 ce 02 b4 60 f6 44 0e cb |'y...T.7...`.D..| +000000c0 c3 07 b9 bf 4e 77 7c 4b ba f7 2c e3 4c 43 a4 f1 |....Nw|K..,.LC..| +000000d0 ba ec 0f 7b e5 7a 59 ef 8e e6 68 1e 1c ce d3 11 |...{.zY...h.....| +000000e0 f9 b1 69 32 17 03 03 02 6d aa e1 b7 df 0e 6a 54 |..i2....m.....jT| +000000f0 41 c5 aa 05 24 fd 4a 1b 8a 05 4f e7 48 29 48 35 |A...$.J...O.H)H5| +00000100 66 42 f8 1d 23 9b 68 f4 b6 cf 94 16 af e1 82 93 |fB..#.h.........| +00000110 30 d5 02 3b e4 aa a9 d7 b2 9c 7f 7f 3c a2 be 0d |0..;........<...| +00000120 85 96 14 64 1a 6d ff 95 ab 36 1c d1 2b ed a9 89 |...d.m...6..+...| +00000130 c8 b8 a3 e5 45 e7 18 5a 18 00 c4 d8 96 64 d1 74 |....E..Z.....d.t| +00000140 1a cb ba ec 9a f4 2d 81 8b 3a 77 e6 57 cc 3a 2b |......-..:w.W.:+| +00000150 b8 05 82 bf 59 92 3b 92 04 e8 a6 f2 6a 94 c1 46 |....Y.;.....j..F| +00000160 bd 79 2e 99 7f 7b ea 32 f9 ac b6 90 78 b9 db c8 |.y...{.2....x...| +00000170 ce 9a e4 88 65 11 8a 03 79 43 d2 81 ce d0 f8 0d |....e...yC......| +00000180 64 8e 8b ef bc 2f 34 87 cf 4e e5 22 44 1f 55 82 |d..../4..N."D.U.| +00000190 ab 25 61 df 0f bd e2 ad 73 06 ae e6 08 8d f3 23 |.%a.....s......#| +000001a0 d6 c6 d4 ea e2 22 b9 eb 75 bd 49 58 8f f4 f6 3b |....."..u.IX...;| +000001b0 92 e6 a4 18 ba 6d 50 77 65 69 27 ee 82 0f ca 57 |.....mPwei'....W| +000001c0 db c7 69 e9 7d 6a ff 30 66 e9 8b 6f 10 20 05 fb |..i.}j.0f..o. ..| +000001d0 53 a7 01 5f d9 8d 11 e5 c2 cb 37 6a 93 a5 26 a3 |S.._......7j..&.| +000001e0 e2 1b 45 b3 7f 6f e5 32 52 8e 26 f7 88 d6 de b6 |..E..o.2R.&.....| +000001f0 75 32 a1 95 54 e8 65 38 9d ee 80 e7 7f 6f d8 2d |u2..T.e8.....o.-| +00000200 5f 29 60 c8 89 00 e6 05 06 b4 c0 b0 e5 ad ed 74 |_)`............t| +00000210 77 93 30 92 82 06 45 b9 0e e3 1e 09 12 bb f8 16 |w.0...E.........| +00000220 59 31 a8 51 17 e7 a8 d8 82 44 a0 d6 31 d2 a7 d1 |Y1.Q.....D..1...| +00000230 54 97 c0 49 62 60 82 79 6a 3c 5a b5 92 aa aa f0 |T..Ib`.yj...v.#.A| +000002d0 0f 9e 99 7d eb 73 a2 4d 46 49 71 8e fe ab 5c 3d |...}.s.MFIq...\=| +000002e0 ae fb 1d c8 f0 d1 fc 93 99 96 35 f8 7c 8e ab ea |..........5.|...| +000002f0 96 eb ea ab f1 e5 71 4e ce fc 4d 38 23 31 86 57 |......qN..M8#1.W| +00000300 ac e6 31 55 97 f5 57 b3 58 e9 5a 62 d6 5a 61 a0 |..1U..W.X.Zb.Za.| +00000310 3b a8 0c a5 66 df dc 62 27 e1 5b 10 80 5a 6a 39 |;...f..b'.[..Zj9| +00000320 7f 83 5c 27 84 6e 95 d4 b6 c4 3e aa 06 a5 bf 81 |..\'.n....>.....| +00000330 9d 69 05 c1 c0 e6 b4 e1 81 ff 0d 30 9a 7a 00 a3 |.i.........0.z..| +00000340 ac a0 e8 f0 54 1d bf 53 9c 4b 10 50 0a 6f c9 a1 |....T..S.K.P.o..| +00000350 9b e2 15 e4 e8 3a 17 03 03 00 99 8a 93 9f 65 05 |.....:........e.| +00000360 9d e6 76 d8 25 0d 1a 6f bc 4c 9f f3 97 23 f3 5b |..v.%..o.L...#.[| +00000370 bf 18 13 35 75 de a6 84 d4 d8 b1 ef 5c d4 f0 17 |...5u.......\...| +00000380 8a 3c c7 f4 00 67 ae ec 65 fa 63 4d 23 86 bf ee |.<...g..e.cM#...| +00000390 73 0a 84 d8 32 d6 cd 6d da 02 64 77 16 f8 96 4b |s...2..m..dw...K| +000003a0 ab a8 9f cd 0d ad be de 66 bf 24 24 26 47 38 d3 |........f.$$&G8.| +000003b0 7e 28 1c 87 98 26 ca d3 ec e6 3a a8 0c 89 19 b5 |~(...&....:.....| +000003c0 71 8d f3 f8 d5 07 c5 f4 75 f2 c5 17 11 3d d3 d6 |q.......u....=..| +000003d0 16 e2 ee e9 c9 4c 43 c0 bf 10 fa a2 ff a1 fa 07 |.....LC.........| +000003e0 db 17 d2 d0 6f 56 cf 67 6c 20 32 42 43 ad 18 a2 |....oV.gl 2BC...| +000003f0 9d 39 d9 e2 17 03 03 00 45 ba 62 93 44 21 7f 7b |.9......E.b.D!.{| +00000400 8c 16 13 4a fe b3 e8 dc 13 70 d7 b4 36 8d 2d e1 |...J.....p..6.-.| +00000410 aa 64 37 b9 8c 15 b4 f4 e7 00 12 94 f1 11 a5 04 |.d7.............| +00000420 71 5c d6 ec ab e3 62 15 53 95 8e da f1 a1 c8 22 |q\....b.S......"| +00000430 cf 02 e5 15 85 b2 35 48 a1 11 67 aa 70 1a |......5H..g.p.| >>> Flow 3 (client to server) -00000000 14 03 03 00 01 01 17 03 03 00 19 6c b2 53 5f 6e |...........l.S_n| -00000010 a9 6a b2 48 da d7 d5 b2 56 81 47 a9 7d a8 5c 6d |.j.H....V.G.}.\m| -00000020 7a a8 23 db 17 03 03 00 45 88 80 32 38 19 22 fd |z.#.....E..28.".| -00000030 09 5c a2 40 50 ba 9c 34 ad 4e 4c 70 7c 4d f0 0e |.\.@P..4.NLp|M..| -00000040 68 3f da d6 c0 6e 6e 29 fa ec d8 11 2e 20 94 38 |h?...nn)..... .8| -00000050 12 b9 08 27 3c e3 0a 8f 9a da cb 1f ab c9 f5 0e |...'<...........| -00000060 da a9 8c 66 24 de 2f b2 92 22 68 53 2f 68 |...f$./.."hS/h| +00000000 14 03 03 00 01 01 17 03 03 00 19 44 2e d9 de 51 |...........D...Q| +00000010 eb 6f 4d a5 6e f7 ca 7e e2 54 88 5c 10 82 95 25 |.oM.n..~.T.\...%| +00000020 ef 79 ab ae 17 03 03 00 45 a6 6e 3e 2c b9 c6 97 |.y......E.n>,...| +00000030 6d 91 e5 a9 05 d8 d9 aa 69 b9 26 8c 51 24 37 4a |m.......i.&.Q$7J| +00000040 b7 80 c5 4f 8f bc f5 34 c2 e6 e0 e6 56 c7 af 0a |...O...4....V...| +00000050 4a d0 6d 98 76 c3 92 02 c3 82 58 44 fb f8 91 76 |J.m.v.....XD...v| +00000060 df 57 6f 28 3e 84 6e 61 be 74 53 2c 9a 8e |.Wo(>.na.tS,..| >>> Flow 4 (server to client) -00000000 17 03 03 00 a3 38 95 dc 12 b1 b8 df 96 ef 91 88 |.....8..........| -00000010 d4 d5 dc 35 ec 19 32 a3 2d 90 0b d5 03 f4 b2 b9 |...5..2.-.......| -00000020 4e 5f 4d b2 18 ae 44 d6 21 f1 7f ef a2 ab 3a 60 |N_M...D.!.....:`| -00000030 df a3 f3 6c 90 68 66 12 8c 3c c2 25 13 36 6c 1d |...l.hf..<.%.6l.| -00000040 51 e7 7e 75 f1 ac 54 fd ae 1b e0 b3 03 6f 0e 96 |Q.~u..T......o..| -00000050 91 5e 88 f5 a7 b6 f0 c5 3c ec a4 e1 3a 46 cd 41 |.^......<...:F.A| -00000060 60 dc 6f 13 d0 eb 76 7e b4 46 31 0f 23 22 0f b1 |`.o...v~.F1.#"..| -00000070 c8 91 14 42 ac 67 6f 83 92 a7 5b 2c 88 16 fc cf |...B.go...[,....| -00000080 ef 97 56 2f 2b 64 92 7d 1a ae a7 94 66 5d 35 f3 |..V/+d.}....f]5.| -00000090 77 63 c2 ef 82 d7 33 6d 0e 60 b2 a3 6b 01 aa 84 |wc....3m.`..k...| -000000a0 32 d0 df 47 e1 01 52 15 17 03 03 00 1e 05 90 37 |2..G..R........7| -000000b0 26 ed e0 a9 8d b1 07 26 42 6d 77 7c 19 aa c2 56 |&......&Bmw|...V| -000000c0 f1 92 eb de 96 46 f2 25 d9 93 df 17 03 03 00 13 |.....F.%........| -000000d0 ed b0 6c 70 1e 85 32 0d 8b ef 55 32 8c d6 fe 1d |..lp..2...U2....| -000000e0 c5 b0 4f |..O| +00000000 17 03 03 00 a3 5e 44 99 71 b2 70 5b 36 d3 17 a9 |.....^D.q.p[6...| +00000010 eb 0b 02 b2 28 54 9d f7 3d f2 c4 d0 18 e1 fb 62 |....(T..=......b| +00000020 e2 8a 37 b7 98 2a 98 39 c0 9d 5a 3c 53 99 31 79 |..7..*.9..Z>> Flow 1 (client to server) +00000000 16 03 01 00 e0 01 00 00 dc 03 03 d8 00 36 18 75 |.............6.u| +00000010 c8 be 9e c0 c2 8c 7d 8b b5 e7 f3 ab 31 0f 5e af |......}.....1.^.| +00000020 f2 3c d6 e5 93 26 78 2f 94 19 23 20 8e b2 d2 08 |.<...&x/..# ....| +00000030 7e 69 f5 38 73 13 2f 6d ba ec ea 29 54 64 32 a0 |~i.8s./m...)Td2.| +00000040 42 b8 d8 d4 2f 34 db 2f 55 25 54 3f 00 08 13 02 |B.../4./U%T?....| +00000050 13 03 13 01 00 ff 01 00 00 8b 00 00 00 0e 00 0c |................| +00000060 00 00 09 31 32 37 2e 30 2e 30 2e 31 00 0b 00 04 |...127.0.0.1....| +00000070 03 00 01 02 00 0a 00 0c 00 0a 00 1d 00 17 00 1e |................| +00000080 00 19 00 18 00 16 00 00 00 17 00 00 00 0d 00 1e |................| +00000090 00 1c 04 03 05 03 06 03 08 07 08 08 08 09 08 0a |................| +000000a0 08 0b 08 04 08 05 08 06 04 01 05 01 06 01 00 2b |...............+| +000000b0 00 03 02 03 04 00 2d 00 02 01 01 00 33 00 26 00 |......-.....3.&.| +000000c0 24 00 1d 00 20 39 4b 85 87 27 a7 4c f3 5d 60 0e |$... 9K..'.L.]`.| +000000d0 27 d9 31 11 0f 9a fc a8 66 14 e5 57 72 3c c5 2b |'.1.....f..Wr<.+| +000000e0 01 e0 bb 26 29 |...&)| +>>> Flow 2 (server to client) +00000000 16 03 03 00 7a 02 00 00 76 03 03 00 00 00 00 00 |....z...v.......| +00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| +00000020 00 00 00 00 00 00 00 00 00 00 00 20 8e b2 d2 08 |........... ....| +00000030 7e 69 f5 38 73 13 2f 6d ba ec ea 29 54 64 32 a0 |~i.8s./m...)Td2.| +00000040 42 b8 d8 d4 2f 34 db 2f 55 25 54 3f 13 02 00 00 |B.../4./U%T?....| +00000050 2e 00 2b 00 02 03 04 00 33 00 24 00 1d 00 20 2f |..+.....3.$... /| +00000060 e5 7d a3 47 cd 62 43 15 28 da ac 5f bb 29 07 30 |.}.G.bC.(.._.).0| +00000070 ff f6 84 af c4 cf c2 ed 90 99 5f 58 cb 3b 74 14 |.........._X.;t.| +00000080 03 03 00 01 01 17 03 03 00 17 34 9b a4 9b 55 78 |..........4...Ux| +00000090 ad 94 a9 7b 1b 4a 5f 40 23 34 5d 98 87 74 f7 b3 |...{.J_@#4]..t..| +000000a0 6d 17 03 03 01 50 8d 3f 8c 8d 12 99 a9 bd 78 42 |m....P.?......xB| +000000b0 cc 8f 26 bf e2 55 12 32 8f 2b 0c c1 e1 13 e4 c0 |..&..U.2.+......| +000000c0 20 06 4a ce c9 e5 3d 3a ce d8 86 fc 9a 6d 47 59 | .J...=:.....mGY| +000000d0 ba 11 70 08 1d f5 3f f4 5d 15 66 7e 8c ea 73 12 |..p...?.].f~..s.| +000000e0 19 4f 65 29 10 f7 d2 da b7 7d c5 bd a2 ec 2c 19 |.Oe).....}....,.| +000000f0 fb a9 c5 d3 eb b2 bc 73 f6 73 e3 ae 95 4f 77 3c |.......s.s...Ow<| +00000100 62 e6 4b 46 a9 d3 36 0c 8a 6e a6 e6 a5 1c 8d 9d |b.KF..6..n......| +00000110 2c a0 76 c1 f6 ed bf 99 64 fe bc 03 62 8e 89 ac |,.v.....d...b...| +00000120 0c 74 56 f4 09 aa 4e f5 fd 89 8f 68 9e ac b2 c8 |.tV...N....h....| +00000130 e1 d4 e0 cd 9c a8 0a 2b 11 61 fc fc 16 fd cf 09 |.......+.a......| +00000140 cd 7c bc cd 3f ce 60 f8 7a 71 f1 1b b9 2b a1 93 |.|..?.`.zq...+..| +00000150 60 1b d1 90 5b 5f bc 57 26 17 c6 e1 a4 6b 4f a4 |`...[_.W&....kO.| +00000160 4e b2 58 57 c0 f2 61 1c c9 5c 72 57 3d b2 03 07 |N.XW..a..\rW=...| +00000170 22 a7 25 d2 2f 06 4d 55 18 26 06 bb 26 5e 58 a6 |".%./.MU.&..&^X.| +00000180 e1 91 86 bd 02 22 f5 e7 af 6d c1 06 19 a6 fc 0d |....."...m......| +00000190 20 68 0e 05 ba 09 56 8d 43 33 9b 04 79 62 66 f0 | h....V.C3..ybf.| +000001a0 7c 01 4d 74 86 23 64 e7 c5 6b 10 f5 61 6c c1 83 ||.Mt.#d..k..al..| +000001b0 7a 02 f8 1e 4c 11 e3 81 90 75 a1 ff dd 63 af 07 |z...L....u...c..| +000001c0 c6 c2 54 22 79 61 1f 2d 01 84 76 38 ee 5b dd 93 |..T"ya.-..v8.[..| +000001d0 34 4d 06 dc 6f d1 5d cd c7 31 e0 56 37 06 ea f3 |4M..o.]..1.V7...| +000001e0 ca e2 00 86 17 73 58 b1 63 f0 91 03 a3 f7 b4 21 |.....sX.c......!| +000001f0 ca 31 60 c4 a6 b6 17 03 03 00 59 25 ed f6 65 f5 |.1`.......Y%..e.| +00000200 19 ba 78 3d 2d fb 86 3a 22 8b 9a 00 c1 3b ac 38 |..x=-..:"....;.8| +00000210 cd ad c1 b7 14 91 fc e0 84 c0 ed 4a 86 ca 49 eb |...........J..I.| +00000220 a9 f2 9f dd a3 74 aa f0 a9 e4 fb 18 38 51 0a 10 |.....t......8Q..| +00000230 13 8e ff a9 d2 3e 68 05 8f 82 5a c7 30 a5 02 f6 |.....>h...Z.0...| +00000240 d3 38 6e e3 e4 b3 4d ca c1 83 b2 e3 19 26 3a c2 |.8n...M......&:.| +00000250 26 5f 38 d1 17 03 03 00 45 df 7e cc 71 f0 9e ca |&_8.....E.~.q...| +00000260 00 9a 64 b4 ab 3a b8 50 b9 cd e9 eb 5b be 88 3b |..d..:.P....[..;| +00000270 66 cf 15 98 5e 63 0c ad e3 0c 40 83 87 6e 3e 01 |f...^c....@..n>.| +00000280 a3 78 03 75 cd 93 0e 7d d3 dc f2 f0 ed 3f 12 8d |.x.u...}.....?..| +00000290 fc c5 c3 c8 36 f2 82 fe dc 69 02 26 84 8b 17 03 |....6....i.&....| +000002a0 03 00 a3 d7 77 67 0e 4c d9 19 f8 bd 86 6e 1c aa |....wg.L.....n..| +000002b0 16 ab 1b 48 21 f2 85 3e c9 22 4b fd 21 8e b5 fa |...H!..>."K.!...| +000002c0 43 34 85 86 56 38 d3 4f ec 9f 25 79 eb bb fe d0 |C4..V8.O..%y....| +000002d0 69 98 05 1c c8 37 51 cf cc 77 bc f1 e7 dc 9c c3 |i....7Q..w......| +000002e0 d9 0b 3f 74 27 46 1e f3 7c 26 7e a4 6b ef c2 40 |..?t'F..|&~.k..@| +000002f0 5b 23 de b6 ec 80 79 3b 8f d5 56 d4 ea 44 30 7e |[#....y;..V..D0~| +00000300 73 2b 09 44 32 5c b9 2c 04 6e 94 50 32 61 80 93 |s+.D2\.,.n.P2a..| +00000310 41 b6 83 73 19 a0 b4 ee b1 8b 23 a1 36 9c 5c 33 |A..s......#.6.\3| +00000320 89 87 cd ef 8a 58 c7 51 a5 31 9c 8e 60 7a 6a ce |.....X.Q.1..`zj.| +00000330 5f 7e 13 43 ee 44 8d b7 2c 81 da 3d c6 c6 d2 18 |_~.C.D..,..=....| +00000340 aa 85 22 63 d7 bd |.."c..| +>>> Flow 3 (client to server) +00000000 14 03 03 00 01 01 17 03 03 00 45 03 21 4e 7f 71 |..........E.!N.q| +00000010 cf b4 fa 18 34 06 57 62 51 99 3d 4a da 52 36 54 |....4.WbQ.=J.R6T| +00000020 5b 22 2b 66 90 c1 8a 21 ec 5e 8b 3c 40 7a 18 0e |["+f...!.^.<@z..| +00000030 b5 82 c1 14 e5 9e 15 72 16 f2 fc 15 cb dd f1 e8 |.......r........| +00000040 7c 03 5e ba c9 96 86 11 ec 88 44 97 24 a5 b2 5a ||.^.......D.$..Z| +>>> Flow 4 (server to client) +00000000 17 03 03 00 1e 4b 9e 56 c2 1a a7 67 94 04 eb b0 |.....K.V...g....| +00000010 48 87 44 38 7d f2 c7 b7 6c 1b a5 40 bb 1a 94 22 |H.D8}...l..@..."| +00000020 a2 f0 9e 17 03 03 00 13 64 42 12 84 e4 d8 64 fd |........dB....d.| +00000030 8c 70 ff f5 43 4d 57 39 b2 d3 1e |.p..CMW9...| diff --git a/src/crypto/tls/ticket.go b/src/crypto/tls/ticket.go index 9560176259..c873e43a70 100644 --- a/src/crypto/tls/ticket.go +++ b/src/crypto/tls/ticket.go @@ -12,7 +12,7 @@ import ( "crypto/sha256" "crypto/subtle" "errors" - "internal/x/crypto/cryptobyte" + "golang.org/x/crypto/cryptobyte" "io" ) diff --git a/src/crypto/tls/tls.go b/src/crypto/tls/tls.go index 578035cf73..ba6d5eba15 100644 --- a/src/crypto/tls/tls.go +++ b/src/crypto/tls/tls.go @@ -5,14 +5,9 @@ // Package tls partially implements TLS 1.2, as specified in RFC 5246, // and TLS 1.3, as specified in RFC 8446. // -// TLS 1.3 is available only on an opt-in basis in Go 1.12. To enable +// TLS 1.3 is available on an opt-out basis in Go 1.13. To disable // it, set the GODEBUG environment variable (comma-separated key=value -// options) such that it includes "tls13=1". To enable it from within -// the process, set the environment variable before any use of TLS: -// -// func init() { -// os.Setenv("GODEBUG", os.Getenv("GODEBUG")+",tls13=1") -// } +// options) such that it includes "tls13=0". package tls // BUG(agl): The crypto/tls package only implements some countermeasures @@ -21,8 +16,10 @@ package tls // https://www.imperialviolet.org/2013/02/04/luckythirteen.html. import ( + "bytes" "crypto" "crypto/ecdsa" + "crypto/ed25519" "crypto/rsa" "crypto/x509" "encoding/pem" @@ -276,6 +273,14 @@ func X509KeyPair(certPEMBlock, keyPEMBlock []byte) (Certificate, error) { if pub.X.Cmp(priv.X) != 0 || pub.Y.Cmp(priv.Y) != 0 { return fail(errors.New("tls: private key does not match public key")) } + case ed25519.PublicKey: + priv, ok := cert.PrivateKey.(ed25519.PrivateKey) + if !ok { + return fail(errors.New("tls: private key type does not match public key type")) + } + if !bytes.Equal(priv.Public().(ed25519.PublicKey), pub) { + return fail(errors.New("tls: private key does not match public key")) + } default: return fail(errors.New("tls: unknown public key algorithm")) } @@ -292,7 +297,7 @@ func parsePrivateKey(der []byte) (crypto.PrivateKey, error) { } if key, err := x509.ParsePKCS8PrivateKey(der); err == nil { switch key := key.(type) { - case *rsa.PrivateKey, *ecdsa.PrivateKey: + case *rsa.PrivateKey, *ecdsa.PrivateKey, ed25519.PrivateKey: return key, nil default: return nil, errors.New("tls: found unknown private key type in PKCS#8 wrapping") diff --git a/src/crypto/tls/tls_test.go b/src/crypto/tls/tls_test.go index 9c26769b09..0a3aeeff73 100644 --- a/src/crypto/tls/tls_test.go +++ b/src/crypto/tls/tls_test.go @@ -23,13 +23,6 @@ import ( "time" ) -func init() { - // TLS 1.3 is opt-in for Go 1.12, but we want to run most tests with it enabled. - // TestTLS13Switch below tests the disabled behavior. See Issue 30055. - tls13Support.Do(func() {}) // defuse the sync.Once - tls13Support.cached = true -} - var rsaCertPEM = `-----BEGIN CERTIFICATE----- MIIB0zCCAX2gAwIBAgIJAI/M7BYjwB+uMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX diff --git a/src/crypto/x509/name_constraints_test.go b/src/crypto/x509/name_constraints_test.go index 735534da95..2020e37a5b 100644 --- a/src/crypto/x509/name_constraints_test.go +++ b/src/crypto/x509/name_constraints_test.go @@ -63,10 +63,8 @@ type leafSpec struct { var nameConstraintsTests = []nameConstraintsTest{ // #0: dummy test for the certificate generation process itself. - nameConstraintsTest{ - roots: []constraintsSpec{ - constraintsSpec{}, - }, + { + roots: make([]constraintsSpec, 1), leaf: leafSpec{ sans: []string{"dns:example.com"}, }, @@ -74,13 +72,11 @@ var nameConstraintsTests = []nameConstraintsTest{ // #1: dummy test for the certificate generation process itself: single // level of intermediate. - nameConstraintsTest{ - roots: []constraintsSpec{ - constraintsSpec{}, - }, + { + roots: make([]constraintsSpec, 1), intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -90,16 +86,14 @@ var nameConstraintsTests = []nameConstraintsTest{ // #2: dummy test for the certificate generation process itself: two // levels of intermediates. - nameConstraintsTest{ - roots: []constraintsSpec{ - constraintsSpec{}, - }, + { + roots: make([]constraintsSpec, 1), intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -108,15 +102,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #3: matching DNS constraint in root - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"dns:example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -125,13 +119,11 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #4: matching DNS constraint in intermediate. - nameConstraintsTest{ - roots: []constraintsSpec{ - constraintsSpec{}, - }, + { + roots: make([]constraintsSpec, 1), intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{ + { + { ok: []string{"dns:example.com"}, }, }, @@ -142,15 +134,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #5: .example.com only matches subdomains. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"dns:.example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -160,13 +152,11 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #6: .example.com matches subdomains. - nameConstraintsTest{ - roots: []constraintsSpec{ - constraintsSpec{}, - }, + { + roots: make([]constraintsSpec, 1), intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{ + { + { ok: []string{"dns:.example.com"}, }, }, @@ -177,15 +167,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #7: .example.com matches multiple levels of subdomains - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"dns:.example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -195,15 +185,15 @@ var nameConstraintsTests = []nameConstraintsTest{ // #8: specifying a permitted list of names does not exclude other name // types - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"dns:.example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -213,15 +203,15 @@ var nameConstraintsTests = []nameConstraintsTest{ // #9: specifying a permitted list of names does not exclude other name // types - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"ip:10.0.0.0/8"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -232,15 +222,15 @@ var nameConstraintsTests = []nameConstraintsTest{ // #10: intermediates can try to permit other names, which isn't // forbidden if the leaf doesn't mention them. I.e. name constraints // apply to names, not constraints themselves. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"dns:example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{ + { + { ok: []string{"dns:example.com", "dns:foo.com"}, }, }, @@ -252,15 +242,15 @@ var nameConstraintsTests = []nameConstraintsTest{ // #11: intermediates cannot add permitted names that the root doesn't // grant them. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"dns:example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{ + { + { ok: []string{"dns:example.com", "dns:foo.com"}, }, }, @@ -272,15 +262,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #12: intermediates can further limit their scope if they wish. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"dns:.example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{ + { + { ok: []string{"dns:.bar.example.com"}, }, }, @@ -292,15 +282,15 @@ var nameConstraintsTests = []nameConstraintsTest{ // #13: intermediates can further limit their scope and that limitation // is effective - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"dns:.example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{ + { + { ok: []string{"dns:.bar.example.com"}, }, }, @@ -312,15 +302,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #14: roots can exclude subtrees and that doesn't affect other names. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { bad: []string{"dns:.example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -329,15 +319,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #15: roots exclusions are effective. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { bad: []string{"dns:.example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -348,13 +338,11 @@ var nameConstraintsTests = []nameConstraintsTest{ // #16: intermediates can also exclude names and that doesn't affect // other names. - nameConstraintsTest{ - roots: []constraintsSpec{ - constraintsSpec{}, - }, + { + roots: make([]constraintsSpec, 1), intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{ + { + { bad: []string{"dns:.example.com"}, }, }, @@ -365,13 +353,11 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #17: intermediate exclusions are effective. - nameConstraintsTest{ - roots: []constraintsSpec{ - constraintsSpec{}, - }, + { + roots: make([]constraintsSpec, 1), intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{ + { + { bad: []string{"dns:.example.com"}, }, }, @@ -383,15 +369,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #18: having an exclusion doesn't prohibit other types of names. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { bad: []string{"dns:.example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -401,15 +387,15 @@ var nameConstraintsTests = []nameConstraintsTest{ // #19: IP-based exclusions are permitted and don't affect unrelated IP // addresses. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { bad: []string{"ip:10.0.0.0/8"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -418,15 +404,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #20: IP-based exclusions are effective - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { bad: []string{"ip:10.0.0.0/8"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -436,15 +422,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #21: intermediates can further constrain IP ranges. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { bad: []string{"ip:0.0.0.0/1"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{ + { + { bad: []string{"ip:11.0.0.0/8"}, }, }, @@ -457,16 +443,14 @@ var nameConstraintsTests = []nameConstraintsTest{ // #22: when multiple intermediates are present, chain building can // avoid intermediates with incompatible constraints. - nameConstraintsTest{ - roots: []constraintsSpec{ - constraintsSpec{}, - }, + { + roots: make([]constraintsSpec, 1), intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{ + { + { ok: []string{"dns:.foo.com"}, }, - constraintsSpec{ + { ok: []string{"dns:.example.com"}, }, }, @@ -479,16 +463,14 @@ var nameConstraintsTests = []nameConstraintsTest{ // #23: (same as the previous test, but in the other order in ensure // that we don't pass it by luck.) - nameConstraintsTest{ - roots: []constraintsSpec{ - constraintsSpec{}, - }, + { + roots: make([]constraintsSpec, 1), intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{ + { + { ok: []string{"dns:.example.com"}, }, - constraintsSpec{ + { ok: []string{"dns:.foo.com"}, }, }, @@ -501,16 +483,16 @@ var nameConstraintsTests = []nameConstraintsTest{ // #24: when multiple roots are valid, chain building can avoid roots // with incompatible constraints. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{}, - constraintsSpec{ + {}, + { ok: []string{"dns:foo.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -521,16 +503,16 @@ var nameConstraintsTests = []nameConstraintsTest{ // #25: (same as the previous test, but in the other order in ensure // that we don't pass it by luck.) - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"dns:foo.com"}, }, - constraintsSpec{}, + {}, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -541,26 +523,26 @@ var nameConstraintsTests = []nameConstraintsTest{ // #26: chain building can find a valid path even with multiple levels // of alternative intermediates and alternative roots. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"dns:foo.com"}, }, - constraintsSpec{ + { ok: []string{"dns:example.com"}, }, - constraintsSpec{}, + {}, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, - constraintsSpec{ + { + {}, + { ok: []string{"dns:foo.com"}, }, }, - []constraintsSpec{ - constraintsSpec{}, - constraintsSpec{ + { + {}, + { ok: []string{"dns:foo.com"}, }, }, @@ -572,27 +554,27 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #27: chain building doesn't get stuck when there is no valid path. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"dns:foo.com"}, }, - constraintsSpec{ + { ok: []string{"dns:example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, - constraintsSpec{ + { + {}, + { ok: []string{"dns:foo.com"}, }, }, - []constraintsSpec{ - constraintsSpec{ + { + { ok: []string{"dns:bar.com"}, }, - constraintsSpec{ + { ok: []string{"dns:foo.com"}, }, }, @@ -604,13 +586,11 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #28: unknown name types don't cause a problem without constraints. - nameConstraintsTest{ - roots: []constraintsSpec{ - constraintsSpec{}, - }, + { + roots: make([]constraintsSpec, 1), intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -619,15 +599,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #29: unknown name types are allowed even in constrained chains. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"dns:foo.com", "dns:.foo.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -636,15 +616,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #30: without SANs, a certificate with a CN is rejected in a constrained chain. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"dns:foo.com", "dns:.foo.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -656,15 +636,15 @@ var nameConstraintsTests = []nameConstraintsTest{ // #31: IPv6 addresses work in constraints: roots can permit them as // expected. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"ip:2000:abcd::/32"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -674,15 +654,15 @@ var nameConstraintsTests = []nameConstraintsTest{ // #32: IPv6 addresses work in constraints: root restrictions are // effective. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"ip:2000:abcd::/32"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -692,15 +672,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #33: An IPv6 permitted subtree doesn't affect DNS names. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"ip:2000:abcd::/32"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -709,15 +689,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #34: IPv6 exclusions don't affect unrelated addresses. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { bad: []string{"ip:2000:abcd::/32"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -726,15 +706,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #35: IPv6 exclusions are effective. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { bad: []string{"ip:2000:abcd::/32"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -744,15 +724,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #36: IPv6 constraints do not permit IPv4 addresses. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"ip:2000:abcd::/32"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -762,15 +742,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #37: IPv4 constraints do not permit IPv6 addresses. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"ip:10.0.0.0/8"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -780,15 +760,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #38: an exclusion of an unknown type doesn't affect other names. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { bad: []string{"unknown:"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -798,15 +778,15 @@ var nameConstraintsTests = []nameConstraintsTest{ // #39: a permitted subtree of an unknown type doesn't affect other // name types. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"unknown:"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -815,15 +795,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #40: exact email constraints work - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"email:foo@example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -832,15 +812,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #41: exact email constraints are effective - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"email:foo@example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -850,15 +830,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #42: email canonicalisation works. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"email:foo@example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -868,15 +848,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #43: limiting email addresses to a host works. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"email:example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -885,15 +865,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #44: a leading dot matches hosts one level deep - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"email:.example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -902,15 +882,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #45: a leading dot does not match the host itself - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"email:.example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -920,15 +900,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #46: a leading dot also matches two (or more) levels deep. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"email:.example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -937,15 +917,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #47: the local part of an email is case-sensitive - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"email:foo@example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -955,15 +935,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #48: the domain part of an email is not case-sensitive - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"email:foo@EXAMPLE.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -972,15 +952,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #49: the domain part of a DNS constraint is also not case-sensitive. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"dns:EXAMPLE.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -989,15 +969,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #50: URI constraints only cover the host part of the URI - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"uri:example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1010,15 +990,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #51: URIs with IPs are rejected - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"uri:example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1028,15 +1008,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #52: URIs with IPs and ports are rejected - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"uri:example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1046,15 +1026,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #53: URIs with IPv6 addresses are also rejected - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"uri:example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1064,15 +1044,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #54: URIs with IPv6 addresses with ports are also rejected - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"uri:example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1082,15 +1062,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #55: URI constraints are effective - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"uri:example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1100,15 +1080,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #56: URI constraints are effective - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { bad: []string{"uri:foo.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1118,15 +1098,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #57: URI constraints can allow subdomains - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"uri:.foo.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1136,15 +1116,15 @@ var nameConstraintsTests = []nameConstraintsTest{ // #58: excluding an IPv4-mapped-IPv6 address doesn't affect the IPv4 // version of that address. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { bad: []string{"ip:::ffff:1.2.3.4/128"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1153,15 +1133,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #59: a URI constraint isn't matched by a URN. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"uri:example.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1172,16 +1152,16 @@ var nameConstraintsTests = []nameConstraintsTest{ // #60: excluding all IPv6 addresses doesn't exclude all IPv4 addresses // too, even though IPv4 is mapped into the IPv6 range. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"ip:1.2.3.0/24"}, bad: []string{"ip:::0/0"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1191,13 +1171,11 @@ var nameConstraintsTests = []nameConstraintsTest{ // #61: omitting extended key usage in a CA certificate implies that // any usage is ok. - nameConstraintsTest{ - roots: []constraintsSpec{ - constraintsSpec{}, - }, + { + roots: make([]constraintsSpec, 1), intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1207,13 +1185,11 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #62: The “any†EKU also means that any usage is ok. - nameConstraintsTest{ - roots: []constraintsSpec{ - constraintsSpec{}, - }, + { + roots: make([]constraintsSpec, 1), intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{ + { + { ekus: []string{"any"}, }, }, @@ -1227,13 +1203,11 @@ var nameConstraintsTests = []nameConstraintsTest{ // #63: An intermediate with enumerated EKUs causes a failure if we // test for an EKU not in that set. (ServerAuth is required by // default.) - nameConstraintsTest{ - roots: []constraintsSpec{ - constraintsSpec{}, - }, + { + roots: make([]constraintsSpec, 1), intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{ + { + { ekus: []string{"email"}, }, }, @@ -1247,13 +1221,11 @@ var nameConstraintsTests = []nameConstraintsTest{ // #64: an unknown EKU in the leaf doesn't break anything, even if it's not // correctly nested. - nameConstraintsTest{ - roots: []constraintsSpec{ - constraintsSpec{}, - }, + { + roots: make([]constraintsSpec, 1), intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{ + { + { ekus: []string{"email"}, }, }, @@ -1268,15 +1240,15 @@ var nameConstraintsTests = []nameConstraintsTest{ // #65: trying to add extra permitted key usages in an intermediate // (after a limitation in the root) is acceptable so long as the leaf // certificate doesn't use them. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ekus: []string{"serverAuth"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{ + { + { ekus: []string{"serverAuth", "email"}, }, }, @@ -1288,15 +1260,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #66: EKUs in roots are not ignored. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ekus: []string{"email"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{ + { + { ekus: []string{"serverAuth"}, }, }, @@ -1310,13 +1282,13 @@ var nameConstraintsTests = []nameConstraintsTest{ // #67: in order to support COMODO chains, SGC key usages permit // serverAuth and clientAuth. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{}, + {}, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{ + { + { ekus: []string{"netscapeSGC"}, }, }, @@ -1329,13 +1301,11 @@ var nameConstraintsTests = []nameConstraintsTest{ // #68: in order to support COMODO chains, SGC key usages permit // serverAuth and clientAuth. - nameConstraintsTest{ - roots: []constraintsSpec{ - constraintsSpec{}, - }, + { + roots: make([]constraintsSpec, 1), intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{ + { + { ekus: []string{"msSGC"}, }, }, @@ -1347,15 +1317,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #69: an empty DNS constraint should allow anything. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"dns:"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1364,15 +1334,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #70: an empty DNS constraint should also reject everything. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { bad: []string{"dns:"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1382,15 +1352,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #71: an empty email constraint should allow anything - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"email:"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1399,15 +1369,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #72: an empty email constraint should also reject everything. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { bad: []string{"email:"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1417,15 +1387,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #73: an empty URI constraint should allow anything - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"uri:"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1434,15 +1404,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #74: an empty URI constraint should also reject everything. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { bad: []string{"uri:"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1453,13 +1423,11 @@ var nameConstraintsTests = []nameConstraintsTest{ // #75: serverAuth in a leaf shouldn't permit clientAuth when requested in // VerifyOptions. - nameConstraintsTest{ - roots: []constraintsSpec{ - constraintsSpec{}, - }, + { + roots: make([]constraintsSpec, 1), intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1471,13 +1439,11 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #76: However, MSSGC in a leaf should match a request for serverAuth. - nameConstraintsTest{ - roots: []constraintsSpec{ - constraintsSpec{}, - }, + { + roots: make([]constraintsSpec, 1), intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1493,13 +1459,11 @@ var nameConstraintsTests = []nameConstraintsTest{ // #77: an invalid DNS or mail SAN will not be detected if name constaint // checking is not triggered. - nameConstraintsTest{ - roots: []constraintsSpec{ - constraintsSpec{}, - }, + { + roots: make([]constraintsSpec, 1), intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1509,15 +1473,15 @@ var nameConstraintsTests = []nameConstraintsTest{ // #78: an invalid DNS SAN will be detected if any name constraint checking // is triggered. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { bad: []string{"uri:"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1528,15 +1492,15 @@ var nameConstraintsTests = []nameConstraintsTest{ // #79: an invalid email SAN will be detected if any name constraint // checking is triggered. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { bad: []string{"uri:"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1546,13 +1510,11 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #80: if several EKUs are requested, satisfying any of them is sufficient. - nameConstraintsTest{ - roots: []constraintsSpec{ - constraintsSpec{}, - }, + { + roots: make([]constraintsSpec, 1), intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1564,13 +1526,11 @@ var nameConstraintsTests = []nameConstraintsTest{ // #81: EKUs that are not asserted in VerifyOpts are not required to be // nested. - nameConstraintsTest{ - roots: []constraintsSpec{ - constraintsSpec{}, - }, + { + roots: make([]constraintsSpec, 1), intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{ + { + { ekus: []string{"serverAuth"}, }, }, @@ -1584,15 +1544,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #82: a certificate without SANs and CN is accepted in a constrained chain. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"dns:foo.com", "dns:.foo.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1602,15 +1562,15 @@ var nameConstraintsTests = []nameConstraintsTest{ // #83: a certificate without SANs and with a CN that does not parse as a // hostname is accepted in a constrained chain. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"dns:foo.com", "dns:.foo.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1620,15 +1580,15 @@ var nameConstraintsTests = []nameConstraintsTest{ }, // #84: a certificate with SANs and CN is accepted in a constrained chain. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"dns:foo.com", "dns:.foo.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ @@ -1639,15 +1599,15 @@ var nameConstraintsTests = []nameConstraintsTest{ // #85: without SANs, a certificate with a valid CN is accepted in a // constrained chain if x509ignoreCN is set. - nameConstraintsTest{ + { roots: []constraintsSpec{ - constraintsSpec{ + { ok: []string{"dns:foo.com", "dns:.foo.com"}, }, }, intermediates: [][]constraintsSpec{ - []constraintsSpec{ - constraintsSpec{}, + { + {}, }, }, leaf: leafSpec{ diff --git a/src/crypto/x509/pkcs1.go b/src/crypto/x509/pkcs1.go index 82502cfe58..5857c17a45 100644 --- a/src/crypto/x509/pkcs1.go +++ b/src/crypto/x509/pkcs1.go @@ -49,6 +49,12 @@ func ParsePKCS1PrivateKey(der []byte) (*rsa.PrivateKey, error) { return nil, asn1.SyntaxError{Msg: "trailing data"} } if err != nil { + if _, err := asn1.Unmarshal(der, &ecPrivateKey{}); err == nil { + return nil, errors.New("x509: failed to parse private key (use ParseECPrivateKey instead for this key format)") + } + if _, err := asn1.Unmarshal(der, &pkcs8{}); err == nil { + return nil, errors.New("x509: failed to parse private key (use ParsePKCS8PrivateKey instead for this key format)") + } return nil, err } @@ -125,6 +131,9 @@ func ParsePKCS1PublicKey(der []byte) (*rsa.PublicKey, error) { var pub pkcs1PublicKey rest, err := asn1.Unmarshal(der, &pub) if err != nil { + if _, err := asn1.Unmarshal(der, &publicKeyInfo{}); err == nil { + return nil, errors.New("x509: failed to parse public key (use ParsePKIXPublicKey instead for this key format)") + } return nil, err } if len(rest) > 0 { diff --git a/src/crypto/x509/pkcs8.go b/src/crypto/x509/pkcs8.go index fb1340c6df..fa1847e5e7 100644 --- a/src/crypto/x509/pkcs8.go +++ b/src/crypto/x509/pkcs8.go @@ -6,6 +6,7 @@ package x509 import ( "crypto/ecdsa" + "crypto/ed25519" "crypto/rsa" "crypto/x509/pkix" "encoding/asn1" @@ -23,11 +24,18 @@ type pkcs8 struct { // optional attributes omitted. } -// ParsePKCS8PrivateKey parses an unencrypted, PKCS#8 private key. -// See RFC 5208. +// ParsePKCS8PrivateKey parses an unencrypted, PKCS#8 private key. It returns a +// *rsa.PrivateKey, a *ecdsa.PrivateKey, or a ed25519.PrivateKey. More types +// might be supported in future versions. See RFC 5208 and RFC 8410. func ParsePKCS8PrivateKey(der []byte) (key interface{}, err error) { var privKey pkcs8 if _, err := asn1.Unmarshal(der, &privKey); err != nil { + if _, err := asn1.Unmarshal(der, &ecPrivateKey{}); err == nil { + return nil, errors.New("x509: failed to parse private key (use ParseECPrivateKey instead for this key format)") + } + if _, err := asn1.Unmarshal(der, &pkcs1PrivateKey{}); err == nil { + return nil, errors.New("x509: failed to parse private key (use ParsePKCS1PrivateKey instead for this key format)") + } return nil, err } switch { @@ -50,16 +58,28 @@ func ParsePKCS8PrivateKey(der []byte) (key interface{}, err error) { } return key, nil + case privKey.Algo.Algorithm.Equal(oidPublicKeyEd25519): + if l := len(privKey.Algo.Parameters.FullBytes); l != 0 { + return nil, errors.New("x509: invalid Ed25519 private key parameters") + } + var curvePrivateKey []byte + if _, err := asn1.Unmarshal(privKey.PrivateKey, &curvePrivateKey); err != nil { + return nil, fmt.Errorf("x509: invalid Ed25519 private key: %v", err) + } + if l := len(curvePrivateKey); l != ed25519.SeedSize { + return nil, fmt.Errorf("x509: invalid Ed25519 private key length: %d", l) + } + return ed25519.NewKeyFromSeed(curvePrivateKey), nil + default: return nil, fmt.Errorf("x509: PKCS#8 wrapping contained private key with unknown algorithm: %v", privKey.Algo.Algorithm) } } // MarshalPKCS8PrivateKey converts a private key to PKCS#8 encoded form. -// The following key types are supported: *rsa.PrivateKey, *ecdsa.PrivateKey. -// Unsupported key types result in an error. -// -// See RFC 5208. +// The following key types are currently supported: *rsa.PrivateKey, +// *ecdsa.PrivateKey and ed25519.PrivateKey. Unsupported key types result in an +// error. See RFC 5208 and RFC 8410. func MarshalPKCS8PrivateKey(key interface{}) ([]byte, error) { var privKey pkcs8 @@ -74,7 +94,7 @@ func MarshalPKCS8PrivateKey(key interface{}) ([]byte, error) { case *ecdsa.PrivateKey: oid, ok := oidFromNamedCurve(k.Curve) if !ok { - return nil, errors.New("x509: unknown curve while marshalling to PKCS#8") + return nil, errors.New("x509: unknown curve while marshaling to PKCS#8") } oidBytes, err := asn1.Marshal(oid) @@ -93,8 +113,18 @@ func MarshalPKCS8PrivateKey(key interface{}) ([]byte, error) { return nil, errors.New("x509: failed to marshal EC private key while building PKCS#8: " + err.Error()) } + case ed25519.PrivateKey: + privKey.Algo = pkix.AlgorithmIdentifier{ + Algorithm: oidPublicKeyEd25519, + } + curvePrivateKey, err := asn1.Marshal(k.Seed()) + if err != nil { + return nil, fmt.Errorf("x509: failed to marshal private key: %v", err) + } + privKey.PrivateKey = curvePrivateKey + default: - return nil, fmt.Errorf("x509: unknown key type while marshalling PKCS#8: %T", key) + return nil, fmt.Errorf("x509: unknown key type while marshaling PKCS#8: %T", key) } return asn1.Marshal(privKey) diff --git a/src/crypto/x509/pkcs8_test.go b/src/crypto/x509/pkcs8_test.go index c8f11e64d1..cb7ee4c162 100644 --- a/src/crypto/x509/pkcs8_test.go +++ b/src/crypto/x509/pkcs8_test.go @@ -7,10 +7,12 @@ package x509 import ( "bytes" "crypto/ecdsa" + "crypto/ed25519" "crypto/elliptic" "crypto/rsa" "encoding/hex" "reflect" + "strings" "testing" ) @@ -39,6 +41,9 @@ var pkcs8P384PrivateKeyHex = `3081b6020100301006072a8648ce3d020106052b8104002204 // expected and the Go test will fail to recreate it exactly. var pkcs8P521PrivateKeyHex = `3081ee020100301006072a8648ce3d020106052b810400230481d63081d3020101044200cfe0b87113a205cf291bb9a8cd1a74ac6c7b2ebb8199aaa9a5010d8b8012276fa3c22ac913369fa61beec2a3b8b4516bc049bde4fb3b745ac11b56ab23ac52e361a1818903818600040138f75acdd03fbafa4f047a8e4b272ba9d555c667962b76f6f232911a5786a0964e5edea6bd21a6f8725720958de049c6e3e6661c1c91b227cebee916c0319ed6ca003db0a3206d372229baf9dd25d868bf81140a518114803ce40c1855074d68c4e9dab9e65efba7064c703b400f1767f217dac82715ac1f6d88c74baf47a7971de4ea` +// From RFC 8410, Section 7. +var pkcs8Ed25519PrivateKeyHex = `302e020100300506032b657004220420d4ee72dbf913584ad5b6d8f1f769f8ad3afe7c28cbf1d4fbe097a88f44755842` + func TestPKCS8(t *testing.T) { tests := []struct { name string @@ -75,6 +80,11 @@ func TestPKCS8(t *testing.T) { keyType: reflect.TypeOf(&ecdsa.PrivateKey{}), curve: elliptic.P521(), }, + { + name: "Ed25519 private key", + keyHex: pkcs8Ed25519PrivateKeyHex, + keyType: reflect.TypeOf(ed25519.PrivateKey{}), + }, } for _, test := range tests { @@ -102,8 +112,29 @@ func TestPKCS8(t *testing.T) { continue } if !bytes.Equal(derBytes, reserialised) { - t.Errorf("%s: marshalled PKCS#8 didn't match original: got %x, want %x", test.name, reserialised, derBytes) + t.Errorf("%s: marshaled PKCS#8 didn't match original: got %x, want %x", test.name, reserialised, derBytes) continue } } } + +const hexPKCS8TestPKCS1Key = "3082025c02010002818100b1a1e0945b9289c4d3f1329f8a982c4a2dcd59bfd372fb8085a9c517554607ebd2f7990eef216ac9f4605f71a03b04f42a5255b158cf8e0844191f5119348baa44c35056e20609bcf9510f30ead4b481c81d7865fb27b8e0090e112b717f3ee08cdfc4012da1f1f7cf2a1bc34c73a54a12b06372d09714742dd7895eadde4aa5020301000102818062b7fa1db93e993e40237de4d89b7591cc1ea1d04fed4904c643f17ae4334557b4295270d0491c161cb02a9af557978b32b20b59c267a721c4e6c956c2d147046e9ae5f2da36db0106d70021fa9343455f8f973a4b355a26fd19e6b39dee0405ea2b32deddf0f4817759ef705d02b34faab9ca93c6766e9f722290f119f34449024100d9c29a4a013a90e35fd1be14a3f747c589fac613a695282d61812a711906b8a0876c6181f0333ca1066596f57bff47e7cfcabf19c0fc69d9cd76df743038b3cb024100d0d3546fecf879b5551f2bd2c05e6385f2718a08a6face3d2aecc9d7e03645a480a46c81662c12ad6bd6901e3bd4f38029462de7290859567cdf371c79088d4f024100c254150657e460ea58573fcf01a82a4791e3d6223135c8bdfed69afe84fbe7857274f8eb5165180507455f9b4105c6b08b51fe8a481bb986a202245576b713530240045700003b7a867d0041df9547ae2e7f50248febd21c9040b12dae9c2feab0d3d4609668b208e4727a3541557f84d372ac68eaf74ce1018a4c9a0ef92682c8fd02405769731480bb3a4570abf422527c5f34bf732fa6c1e08cc322753c511ce055fac20fc770025663ad3165324314df907f1f1942f0448a7e9cdbf87ecd98b92156" +const hexPKCS8TestECKey = "3081a40201010430bdb9839c08ee793d1157886a7a758a3c8b2a17a4df48f17ace57c72c56b4723cf21dcda21d4e1ad57ff034f19fcfd98ea00706052b81040022a16403620004feea808b5ee2429cfcce13c32160e1c960990bd050bb0fdf7222f3decd0a55008e32a6aa3c9062051c4cba92a7a3b178b24567412d43cdd2f882fa5addddd726fe3e208d2c26d733a773a597abb749714df7256ead5105fa6e7b3650de236b50" + +var pkcs8MismatchKeyTests = []struct { + hexKey string + errorContains string +}{ + {hexKey: hexPKCS8TestECKey, errorContains: "use ParseECPrivateKey instead"}, + {hexKey: hexPKCS8TestPKCS1Key, errorContains: "use ParsePKCS1PrivateKey instead"}, +} + +func TestPKCS8MismatchKeyFormat(t *testing.T) { + for i, test := range pkcs8MismatchKeyTests { + derBytes, _ := hex.DecodeString(test.hexKey) + _, err := ParsePKCS8PrivateKey(derBytes) + if !strings.Contains(err.Error(), test.errorContains) { + t.Errorf("#%d: expected error containing %q, got %s", i, test.errorContains, err) + } + } +} diff --git a/src/crypto/x509/root_darwin.go b/src/crypto/x509/root_darwin.go index 9b8a1cca7d..2f6a8b8d60 100644 --- a/src/crypto/x509/root_darwin.go +++ b/src/crypto/x509/root_darwin.go @@ -58,7 +58,7 @@ func execSecurityRoots() (*CertPool, error) { return nil, err } if debugDarwinRoots { - fmt.Printf("crypto/x509: %d certs have a trust policy\n", len(hasPolicy)) + fmt.Fprintf(os.Stderr, "crypto/x509: %d certs have a trust policy\n", len(hasPolicy)) } keychains := []string{"/Library/Keychains/System.keychain"} @@ -68,7 +68,7 @@ func execSecurityRoots() (*CertPool, error) { home, err := os.UserHomeDir() if err != nil { if debugDarwinRoots { - fmt.Printf("crypto/x509: can't get user home directory: %v\n", err) + fmt.Fprintf(os.Stderr, "crypto/x509: can't get user home directory: %v\n", err) } } else { keychains = append(keychains, @@ -148,7 +148,7 @@ func execSecurityRoots() (*CertPool, error) { wg.Wait() if debugDarwinRoots { - fmt.Printf("crypto/x509: ran security verify-cert %d times\n", numVerified) + fmt.Fprintf(os.Stderr, "crypto/x509: ran security verify-cert %d times\n", numVerified) } return roots, nil @@ -205,12 +205,12 @@ func verifyCertWithSystem(cert *Certificate) bool { } if err := cmd.Run(); err != nil { if debugDarwinRoots { - fmt.Printf("crypto/x509: verify-cert rejected %s: %q\n", cert.Subject, bytes.TrimSpace(stderr.Bytes())) + fmt.Fprintf(os.Stderr, "crypto/x509: verify-cert rejected %s: %q\n", cert.Subject, bytes.TrimSpace(stderr.Bytes())) } return false } if debugDarwinRoots { - fmt.Printf("crypto/x509: verify-cert approved %s\n", cert.Subject) + fmt.Fprintf(os.Stderr, "crypto/x509: verify-cert approved %s\n", cert.Subject) } return true } @@ -243,7 +243,7 @@ func getCertsWithTrustPolicy() (map[string]bool, error) { // localized on macOS, just interpret any failure to mean that // there are no trust settings. if debugDarwinRoots { - fmt.Printf("crypto/x509: exec %q: %v, %s\n", cmd.Args, err, stderr.Bytes()) + fmt.Fprintf(os.Stderr, "crypto/x509: exec %q: %v, %s\n", cmd.Args, err, stderr.Bytes()) } return nil } diff --git a/src/crypto/x509/root_linux.go b/src/crypto/x509/root_linux.go index aa1785e4c6..267775dc5f 100644 --- a/src/crypto/x509/root_linux.go +++ b/src/crypto/x509/root_linux.go @@ -11,4 +11,5 @@ var certFiles = []string{ "/etc/ssl/ca-bundle.pem", // OpenSUSE "/etc/pki/tls/cacert.pem", // OpenELEC "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem", // CentOS/RHEL 7 + "/etc/ssl/cert.pem", // Alpine Linux } diff --git a/src/crypto/x509/root_windows.go b/src/crypto/x509/root_windows.go index 74d395df70..1e3ebe8942 100644 --- a/src/crypto/x509/root_windows.go +++ b/src/crypto/x509/root_windows.go @@ -229,7 +229,11 @@ func loadSystemRoots() (*CertPool, error) { // TODO: restore this functionality on Windows. We tried to do // it in Go 1.8 but had to revert it. See Issue 18609. // Returning (nil, nil) was the old behavior, prior to CL 30578. - return nil, nil + // The if statement here avoids vet complaining about + // unreachable code below. + if true { + return nil, nil + } const CRYPT_E_NOT_FOUND = 0x80092004 diff --git a/src/crypto/x509/sec1.go b/src/crypto/x509/sec1.go index 3008d0df77..faba9dbe5d 100644 --- a/src/crypto/x509/sec1.go +++ b/src/crypto/x509/sec1.go @@ -65,6 +65,12 @@ func marshalECPrivateKeyWithOID(key *ecdsa.PrivateKey, oid asn1.ObjectIdentifier func parseECPrivateKey(namedCurveOID *asn1.ObjectIdentifier, der []byte) (key *ecdsa.PrivateKey, err error) { var privKey ecPrivateKey if _, err := asn1.Unmarshal(der, &privKey); err != nil { + if _, err := asn1.Unmarshal(der, &pkcs8{}); err == nil { + return nil, errors.New("x509: failed to parse private key (use ParsePKCS8PrivateKey instead for this key format)") + } + if _, err := asn1.Unmarshal(der, &pkcs1PrivateKey{}); err == nil { + return nil, errors.New("x509: failed to parse private key (use ParsePKCS1PrivateKey instead for this key format)") + } return nil, errors.New("x509: failed to parse EC private key: " + err.Error()) } if privKey.Version != ecPrivKeyVersion { diff --git a/src/crypto/x509/sec1_test.go b/src/crypto/x509/sec1_test.go index 573c937caf..9ac251896b 100644 --- a/src/crypto/x509/sec1_test.go +++ b/src/crypto/x509/sec1_test.go @@ -7,6 +7,7 @@ package x509 import ( "bytes" "encoding/hex" + "strings" "testing" ) @@ -42,3 +43,24 @@ func TestParseECPrivateKey(t *testing.T) { } } } + +const hexECTestPKCS1Key = "3082025c02010002818100b1a1e0945b9289c4d3f1329f8a982c4a2dcd59bfd372fb8085a9c517554607ebd2f7990eef216ac9f4605f71a03b04f42a5255b158cf8e0844191f5119348baa44c35056e20609bcf9510f30ead4b481c81d7865fb27b8e0090e112b717f3ee08cdfc4012da1f1f7cf2a1bc34c73a54a12b06372d09714742dd7895eadde4aa5020301000102818062b7fa1db93e993e40237de4d89b7591cc1ea1d04fed4904c643f17ae4334557b4295270d0491c161cb02a9af557978b32b20b59c267a721c4e6c956c2d147046e9ae5f2da36db0106d70021fa9343455f8f973a4b355a26fd19e6b39dee0405ea2b32deddf0f4817759ef705d02b34faab9ca93c6766e9f722290f119f34449024100d9c29a4a013a90e35fd1be14a3f747c589fac613a695282d61812a711906b8a0876c6181f0333ca1066596f57bff47e7cfcabf19c0fc69d9cd76df743038b3cb024100d0d3546fecf879b5551f2bd2c05e6385f2718a08a6face3d2aecc9d7e03645a480a46c81662c12ad6bd6901e3bd4f38029462de7290859567cdf371c79088d4f024100c254150657e460ea58573fcf01a82a4791e3d6223135c8bdfed69afe84fbe7857274f8eb5165180507455f9b4105c6b08b51fe8a481bb986a202245576b713530240045700003b7a867d0041df9547ae2e7f50248febd21c9040b12dae9c2feab0d3d4609668b208e4727a3541557f84d372ac68eaf74ce1018a4c9a0ef92682c8fd02405769731480bb3a4570abf422527c5f34bf732fa6c1e08cc322753c511ce055fac20fc770025663ad3165324314df907f1f1942f0448a7e9cdbf87ecd98b92156" +const hexECTestPKCS8Key = "30820278020100300d06092a864886f70d0101010500048202623082025e02010002818100cfb1b5bf9685ffa97b4f99df4ff122b70e59ac9b992f3bc2b3dde17d53c1a34928719b02e8fd17839499bfbd515bd6ef99c7a1c47a239718fe36bfd824c0d96060084b5f67f0273443007a24dfaf5634f7772c9346e10eb294c2306671a5a5e719ae24b4de467291bc571014b0e02dec04534d66a9bb171d644b66b091780e8d020301000102818100b595778383c4afdbab95d2bfed12b3f93bb0a73a7ad952f44d7185fd9ec6c34de8f03a48770f2009c8580bcd275e9632714e9a5e3f32f29dc55474b2329ff0ebc08b3ffcb35bc96e6516b483df80a4a59cceb71918cbabf91564e64a39d7e35dce21cb3031824fdbc845dba6458852ec16af5dddf51a8397a8797ae0337b1439024100ea0eb1b914158c70db39031dd8904d6f18f408c85fbbc592d7d20dee7986969efbda081fdf8bc40e1b1336d6b638110c836bfdc3f314560d2e49cd4fbde1e20b024100e32a4e793b574c9c4a94c8803db5152141e72d03de64e54ef2c8ed104988ca780cd11397bc359630d01b97ebd87067c5451ba777cf045ca23f5912f1031308c702406dfcdbbd5a57c9f85abc4edf9e9e29153507b07ce0a7ef6f52e60dcfebe1b8341babd8b789a837485da6c8d55b29bbb142ace3c24a1f5b54b454d01b51e2ad03024100bd6a2b60dee01e1b3bfcef6a2f09ed027c273cdbbaf6ba55a80f6dcc64e4509ee560f84b4f3e076bd03b11e42fe71a3fdd2dffe7e0902c8584f8cad877cdc945024100aa512fa4ada69881f1d8bb8ad6614f192b83200aef5edf4811313d5ef30a86cbd0a90f7b025c71ea06ec6b34db6306c86b1040670fd8654ad7291d066d06d031" + +var ecMismatchKeyTests = []struct { + hexKey string + errorContains string +}{ + {hexKey: hexECTestPKCS8Key, errorContains: "use ParsePKCS8PrivateKey instead"}, + {hexKey: hexECTestPKCS1Key, errorContains: "use ParsePKCS1PrivateKey instead"}, +} + +func TestECMismatchKeyFormat(t *testing.T) { + for i, test := range ecMismatchKeyTests { + derBytes, _ := hex.DecodeString(test.hexKey) + _, err := ParseECPrivateKey(derBytes) + if !strings.Contains(err.Error(), test.errorContains) { + t.Errorf("#%d: expected error containing %q, got %s", i, test.errorContains, err) + } + } +} diff --git a/src/crypto/x509/verify.go b/src/crypto/x509/verify.go index 431bf024b2..a30f64456d 100644 --- a/src/crypto/x509/verify.go +++ b/src/crypto/x509/verify.go @@ -374,7 +374,7 @@ func domainToReverseLabels(domain string) (reverseLabels []string, ok bool) { reverseLabels = append(reverseLabels, domain) domain = "" } else { - reverseLabels = append(reverseLabels, domain[i+1:len(domain)]) + reverseLabels = append(reverseLabels, domain[i+1:]) domain = domain[:i] } } diff --git a/src/crypto/x509/x509.go b/src/crypto/x509/x509.go index 58098adc2d..16c0526196 100644 --- a/src/crypto/x509/x509.go +++ b/src/crypto/x509/x509.go @@ -14,6 +14,7 @@ import ( "crypto" "crypto/dsa" "crypto/ecdsa" + "crypto/ed25519" "crypto/elliptic" "crypto/rsa" _ "crypto/sha1" @@ -24,8 +25,8 @@ import ( "encoding/pem" "errors" "fmt" - "internal/x/crypto/cryptobyte" - cryptobyte_asn1 "internal/x/crypto/cryptobyte/asn1" + "golang.org/x/crypto/cryptobyte" + cryptobyte_asn1 "golang.org/x/crypto/cryptobyte/asn1" "io" "math/big" "net" @@ -50,10 +51,13 @@ type pkixPublicKey struct { // types result in an error. // // On success, pub will be of type *rsa.PublicKey, *dsa.PublicKey, -// or *ecdsa.PublicKey. +// *ecdsa.PublicKey, or ed25519.PublicKey. func ParsePKIXPublicKey(derBytes []byte) (pub interface{}, err error) { var pki publicKeyInfo if rest, err := asn1.Unmarshal(derBytes, &pki); err != nil { + if _, err := asn1.Unmarshal(derBytes, &pkcs1PublicKey{}); err == nil { + return nil, errors.New("x509: failed to parse public key (use ParsePKCS1PublicKey instead for this key format)") + } return nil, err } else if len(rest) != 0 { return nil, errors.New("x509: trailing data after ASN.1 of public-key") @@ -92,6 +96,9 @@ func marshalPublicKey(pub interface{}) (publicKeyBytes []byte, publicKeyAlgorith return } publicKeyAlgorithm.Parameters.FullBytes = paramBytes + case ed25519.PublicKey: + publicKeyBytes = pub + publicKeyAlgorithm.Algorithm = oidPublicKeyEd25519 default: return nil, pkix.AlgorithmIdentifier{}, errors.New("x509: only RSA and ECDSA public keys supported") } @@ -188,6 +195,7 @@ const ( SHA256WithRSAPSS SHA384WithRSAPSS SHA512WithRSAPSS + PureEd25519 ) func (algo SignatureAlgorithm) isRSAPSS() bool { @@ -215,12 +223,14 @@ const ( RSA DSA ECDSA + Ed25519 ) var publicKeyAlgoName = [...]string{ - RSA: "RSA", - DSA: "DSA", - ECDSA: "ECDSA", + RSA: "RSA", + DSA: "DSA", + ECDSA: "ECDSA", + Ed25519: "Ed25519", } func (algo PublicKeyAlgorithm) String() string { @@ -279,6 +289,11 @@ func (algo PublicKeyAlgorithm) String() string { // // ecdsa-with-SHA512 OBJECT IDENTIFIER ::= { iso(1) member-body(2) // us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 4 } +// +// +// RFC 8410 3 Curve25519 and Curve448 Algorithm Identifiers +// +// id-Ed25519 OBJECT IDENTIFIER ::= { 1 3 101 112 } var ( oidSignatureMD2WithRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 2} @@ -294,6 +309,7 @@ var ( oidSignatureECDSAWithSHA256 = asn1.ObjectIdentifier{1, 2, 840, 10045, 4, 3, 2} oidSignatureECDSAWithSHA384 = asn1.ObjectIdentifier{1, 2, 840, 10045, 4, 3, 3} oidSignatureECDSAWithSHA512 = asn1.ObjectIdentifier{1, 2, 840, 10045, 4, 3, 4} + oidSignatureEd25519 = asn1.ObjectIdentifier{1, 3, 101, 112} oidSHA256 = asn1.ObjectIdentifier{2, 16, 840, 1, 101, 3, 4, 2, 1} oidSHA384 = asn1.ObjectIdentifier{2, 16, 840, 1, 101, 3, 4, 2, 2} @@ -330,6 +346,7 @@ var signatureAlgorithmDetails = []struct { {ECDSAWithSHA256, "ECDSA-SHA256", oidSignatureECDSAWithSHA256, ECDSA, crypto.SHA256}, {ECDSAWithSHA384, "ECDSA-SHA384", oidSignatureECDSAWithSHA384, ECDSA, crypto.SHA384}, {ECDSAWithSHA512, "ECDSA-SHA512", oidSignatureECDSAWithSHA512, ECDSA, crypto.SHA512}, + {PureEd25519, "Ed25519", oidSignatureEd25519, Ed25519, crypto.Hash(0) /* no pre-hashing */}, } // pssParameters reflects the parameters in an AlgorithmIdentifier that @@ -390,6 +407,14 @@ func rsaPSSParameters(hashFunc crypto.Hash) asn1.RawValue { } func getSignatureAlgorithmFromAI(ai pkix.AlgorithmIdentifier) SignatureAlgorithm { + if ai.Algorithm.Equal(oidSignatureEd25519) { + // RFC 8410, Section 3 + // > For all of the OIDs, the parameters MUST be absent. + if len(ai.Parameters.FullBytes) != 0 { + return UnknownSignatureAlgorithm + } + } + if !ai.Algorithm.Equal(oidSignatureRSAPSS) { for _, details := range signatureAlgorithmDetails { if ai.Algorithm.Equal(details.oid) { @@ -452,9 +477,10 @@ func getSignatureAlgorithmFromAI(ai pkix.AlgorithmIdentifier) SignatureAlgorithm // id-ecPublicKey OBJECT IDENTIFIER ::= { // iso(1) member-body(2) us(840) ansi-X9-62(10045) keyType(2) 1 } var ( - oidPublicKeyRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 1} - oidPublicKeyDSA = asn1.ObjectIdentifier{1, 2, 840, 10040, 4, 1} - oidPublicKeyECDSA = asn1.ObjectIdentifier{1, 2, 840, 10045, 2, 1} + oidPublicKeyRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 1} + oidPublicKeyDSA = asn1.ObjectIdentifier{1, 2, 840, 10040, 4, 1} + oidPublicKeyECDSA = asn1.ObjectIdentifier{1, 2, 840, 10045, 2, 1} + oidPublicKeyEd25519 = oidSignatureEd25519 ) func getPublicKeyAlgorithmFromOID(oid asn1.ObjectIdentifier) PublicKeyAlgorithm { @@ -465,6 +491,8 @@ func getPublicKeyAlgorithmFromOID(oid asn1.ObjectIdentifier) PublicKeyAlgorithm return DSA case oid.Equal(oidPublicKeyECDSA): return ECDSA + case oid.Equal(oidPublicKeyEd25519): + return Ed25519 } return UnknownPublicKeyAlgorithm } @@ -871,28 +899,29 @@ func checkSignature(algo SignatureAlgorithm, signed, signature []byte, publicKey switch hashType { case crypto.Hash(0): - return ErrUnsupportedAlgorithm + if pubKeyAlgo != Ed25519 { + return ErrUnsupportedAlgorithm + } case crypto.MD5: return InsecureAlgorithmError(algo) + default: + if !hashType.Available() { + return ErrUnsupportedAlgorithm + } + h := hashType.New() + h.Write(signed) + signed = h.Sum(nil) } - if !hashType.Available() { - return ErrUnsupportedAlgorithm - } - h := hashType.New() - - h.Write(signed) - digest := h.Sum(nil) - switch pub := publicKey.(type) { case *rsa.PublicKey: if pubKeyAlgo != RSA { return signaturePublicKeyAlgoMismatchError(pubKeyAlgo, pub) } if algo.isRSAPSS() { - return rsa.VerifyPSS(pub, hashType, digest, signature, &rsa.PSSOptions{SaltLength: rsa.PSSSaltLengthEqualsHash}) + return rsa.VerifyPSS(pub, hashType, signed, signature, &rsa.PSSOptions{SaltLength: rsa.PSSSaltLengthEqualsHash}) } else { - return rsa.VerifyPKCS1v15(pub, hashType, digest, signature) + return rsa.VerifyPKCS1v15(pub, hashType, signed, signature) } case *dsa.PublicKey: if pubKeyAlgo != DSA { @@ -907,7 +936,7 @@ func checkSignature(algo SignatureAlgorithm, signed, signature []byte, publicKey if dsaSig.R.Sign() <= 0 || dsaSig.S.Sign() <= 0 { return errors.New("x509: DSA signature contained zero or negative values") } - if !dsa.Verify(pub, digest, dsaSig.R, dsaSig.S) { + if !dsa.Verify(pub, signed, dsaSig.R, dsaSig.S) { return errors.New("x509: DSA verification failure") } return @@ -924,10 +953,18 @@ func checkSignature(algo SignatureAlgorithm, signed, signature []byte, publicKey if ecdsaSig.R.Sign() <= 0 || ecdsaSig.S.Sign() <= 0 { return errors.New("x509: ECDSA signature contained zero or negative values") } - if !ecdsa.Verify(pub, digest, ecdsaSig.R, ecdsaSig.S) { + if !ecdsa.Verify(pub, signed, ecdsaSig.R, ecdsaSig.S) { return errors.New("x509: ECDSA verification failure") } return + case ed25519.PublicKey: + if pubKeyAlgo != Ed25519 { + return signaturePublicKeyAlgoMismatchError(pubKeyAlgo, pub) + } + if !ed25519.Verify(pub, signed, signature) { + return errors.New("x509: Ed25519 verification failure") + } + return } return ErrUnsupportedAlgorithm } @@ -1065,6 +1102,18 @@ func parsePublicKey(algo PublicKeyAlgorithm, keyData *publicKeyInfo) (interface{ Y: y, } return pub, nil + case Ed25519: + // RFC 8410, Section 3 + // > For all of the OIDs, the parameters MUST be absent. + if len(keyData.Algorithm.Parameters.FullBytes) != 0 { + return nil, errors.New("x509: Ed25519 key encoded with illegal parameters") + } + if len(asn1Data) != ed25519.PublicKeySize { + return nil, errors.New("x509: wrong Ed25519 public key size") + } + pub := make([]byte, ed25519.PublicKeySize) + copy(pub, asn1Data) + return ed25519.PublicKey(pub), nil default: return nil, nil } @@ -1927,7 +1976,7 @@ func buildExtensions(template *Certificate, subjectIsEmpty bool, authorityKeyId dp := distributionPoint{ DistributionPoint: distributionPointName{ FullName: []asn1.RawValue{ - asn1.RawValue{Tag: 6, Class: 2, Bytes: []byte(name)}, + {Tag: 6, Class: 2, Bytes: []byte(name)}, }, }, } @@ -1986,8 +2035,12 @@ func signingParamsForPublicKey(pub interface{}, requestedSigAlgo SignatureAlgori err = errors.New("x509: unknown elliptic curve") } + case ed25519.PublicKey: + pubType = Ed25519 + sigAlgo.Algorithm = oidSignatureEd25519 + default: - err = errors.New("x509: only RSA and ECDSA keys supported") + err = errors.New("x509: only RSA, ECDSA and Ed25519 keys supported") } if err != nil { @@ -2006,7 +2059,7 @@ func signingParamsForPublicKey(pub interface{}, requestedSigAlgo SignatureAlgori return } sigAlgo.Algorithm, hashFunc = details.oid, details.hash - if hashFunc == 0 { + if hashFunc == 0 && pubType != Ed25519 { err = errors.New("x509: cannot sign with hash function requested") return } @@ -2070,8 +2123,9 @@ var emptyASN1Subject = []byte{0x30, 0} // // The returned slice is the certificate in DER encoding. // -// All keys types that are implemented via crypto.Signer are supported (This -// includes *rsa.PublicKey and *ecdsa.PublicKey.) +// The currently supported key types are *rsa.PublicKey, *ecdsa.PublicKey and +// ed25519.PublicKey. pub must be a supported key type, and priv must be a +// crypto.Signer with a supported public key. // // The AuthorityKeyId will be taken from the SubjectKeyId of parent, if any, // unless the resulting certificate is self-signed. Otherwise the value from @@ -2132,15 +2186,16 @@ func CreateCertificate(rand io.Reader, template, parent *Certificate, pub, priv if err != nil { return } - c.Raw = tbsCertContents - h := hashFunc.New() - h.Write(tbsCertContents) - digest := h.Sum(nil) + signed := tbsCertContents + if hashFunc != 0 { + h := hashFunc.New() + h.Write(signed) + signed = h.Sum(nil) + } - var signerOpts crypto.SignerOpts - signerOpts = hashFunc + var signerOpts crypto.SignerOpts = hashFunc if template.SignatureAlgorithm != 0 && template.SignatureAlgorithm.isRSAPSS() { signerOpts = &rsa.PSSOptions{ SaltLength: rsa.PSSSaltLengthEqualsHash, @@ -2149,7 +2204,7 @@ func CreateCertificate(rand io.Reader, template, parent *Certificate, pub, priv } var signature []byte - signature, err = key.Sign(rand, digest, signerOpts) + signature, err = key.Sign(rand, signed, signerOpts) if err != nil { return } @@ -2275,7 +2330,7 @@ type CertificateRequest struct { // Attributes contains the CSR attributes that can parse as // pkix.AttributeTypeAndValueSET. // - // Deprecated: use Extensions and ExtraExtensions instead for parsing and + // Deprecated: Use Extensions and ExtraExtensions instead for parsing and // generating the requestedExtensions attribute. Attributes []pkix.AttributeTypeAndValueSET @@ -2400,8 +2455,9 @@ func parseCSRExtensions(rawAttributes []asn1.RawValue) ([]pkix.Extension, error) // // priv is the private key to sign the CSR with, and the corresponding public // key will be included in the CSR. It must implement crypto.Signer and its -// Public() method must return a *rsa.PublicKey or a *ecdsa.PublicKey. (A -// *rsa.PrivateKey or *ecdsa.PrivateKey satisfies this.) +// Public() method must return a *rsa.PublicKey or a *ecdsa.PublicKey or a +// ed25519.PublicKey. (A *rsa.PrivateKey, *ecdsa.PrivateKey or +// ed25519.PrivateKey satisfies this.) // // The returned slice is the certificate request in DER encoding. func CreateCertificateRequest(rand io.Reader, template *CertificateRequest, priv interface{}) (csr []byte, err error) { @@ -2550,12 +2606,15 @@ func CreateCertificateRequest(rand io.Reader, template *CertificateRequest, priv } tbsCSR.Raw = tbsCSRContents - h := hashFunc.New() - h.Write(tbsCSRContents) - digest := h.Sum(nil) + signed := tbsCSRContents + if hashFunc != 0 { + h := hashFunc.New() + h.Write(signed) + signed = h.Sum(nil) + } var signature []byte - signature, err = key.Sign(rand, digest, hashFunc) + signature, err = key.Sign(rand, signed, hashFunc) if err != nil { return } diff --git a/src/crypto/x509/x509_test.go b/src/crypto/x509/x509_test.go index 388156e209..7dadb77dfd 100644 --- a/src/crypto/x509/x509_test.go +++ b/src/crypto/x509/x509_test.go @@ -8,6 +8,7 @@ import ( "bytes" "crypto/dsa" "crypto/ecdsa" + "crypto/ed25519" "crypto/elliptic" "crypto/rand" "crypto/rsa" @@ -54,27 +55,50 @@ func TestParsePKCS1PrivateKey(t *testing.T) { } } -func TestParsePKIXPublicKey(t *testing.T) { - block, _ := pem.Decode([]byte(pemPublicKey)) +func TestPKCS1MismatchPublicKeyFormat(t *testing.T) { + + const pkixPublicKey = "30820122300d06092a864886f70d01010105000382010f003082010a0282010100dd5a0f37d3ca5232852ccc0e81eebec270e2f2c6c44c6231d852971a0aad00aa7399e9b9de444611083c59ea919a9d76c20a7be131a99045ec19a7bb452d647a72429e66b87e28be9e8187ed1d2a2a01ef3eb2360706bd873b07f2d1f1a72337aab5ec94e983e39107f52c480d404915e84d75a3db2cfd601726a128cb1d7f11492d4bdb53272e652276667220795c709b8a9b4af6489cbf48bb8173b8fb607c834a71b6e8bf2d6aab82af3c8ad7ce16d8dcf58373a6edc427f7484d09744d4c08f4e19ed07adbf6cb31243bc5d0d1145e77a08a6fc5efd208eca67d6abf2d6f38f58b6fdd7c28774fb0cc03fc4935c6e074842d2e1479d3d8787249258719f90203010001" + const errorContains = "use ParsePKIXPublicKey instead" + derBytes, _ := hex.DecodeString(pkixPublicKey) + _, err := ParsePKCS1PublicKey(derBytes) + if !strings.Contains(err.Error(), errorContains) { + t.Errorf("expected error containing %q, got %s", errorContains, err) + } +} + +func testParsePKIXPublicKey(t *testing.T, pemBytes string) (pub interface{}) { + block, _ := pem.Decode([]byte(pemBytes)) pub, err := ParsePKIXPublicKey(block.Bytes) if err != nil { - t.Errorf("Failed to parse RSA public key: %s", err) - return - } - rsaPub, ok := pub.(*rsa.PublicKey) - if !ok { - t.Errorf("Value returned from ParsePKIXPublicKey was not an RSA public key") - return + t.Fatalf("Failed to parse public key: %s", err) } - pubBytes2, err := MarshalPKIXPublicKey(rsaPub) + pubBytes2, err := MarshalPKIXPublicKey(pub) if err != nil { - t.Errorf("Failed to marshal RSA public key for the second time: %s", err) + t.Errorf("Failed to marshal public key for the second time: %s", err) return } if !bytes.Equal(pubBytes2, block.Bytes) { t.Errorf("Reserialization of public key didn't match. got %x, want %x", pubBytes2, block.Bytes) } + return +} + +func TestParsePKIXPublicKey(t *testing.T) { + t.Run("RSA", func(t *testing.T) { + pub := testParsePKIXPublicKey(t, pemPublicKey) + _, ok := pub.(*rsa.PublicKey) + if !ok { + t.Errorf("Value returned from ParsePKIXPublicKey was not an RSA public key") + } + }) + t.Run("Ed25519", func(t *testing.T) { + pub := testParsePKIXPublicKey(t, pemEd25519Key) + _, ok := pub.(ed25519.PublicKey) + if !ok { + t.Errorf("Value returned from ParsePKIXPublicKey was not an Ed25519 public key") + } + }) } var pemPublicKey = `-----BEGIN PUBLIC KEY----- @@ -106,6 +130,24 @@ wg/HcAJWY60xZTJDFN+Qfx8ZQvBEin6c2/h+zZi5IVY= -----END RSA PRIVATE KEY----- ` +// pemEd25519Key is the example from RFC 8410, Secrion 4. +var pemEd25519Key = ` +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAGb9ECWmEzf6FQbrBZ9w7lshQhqowtrbLDFw4rXAxZuE= +-----END PUBLIC KEY----- +` + +func TestPKIXMismatchPublicKeyFormat(t *testing.T) { + + const pkcs1PublicKey = "308201080282010100817cfed98bcaa2e2a57087451c7674e0c675686dc33ff1268b0c2a6ee0202dec710858ee1c31bdf5e7783582e8ca800be45f3275c6576adc35d98e26e95bb88ca5beb186f853b8745d88bc9102c5f38753bcda519fb05948d5c77ac429255ff8aaf27d9f45d1586e95e2e9ba8a7cb771b8a09dd8c8fed3f933fd9b439bc9f30c475953418ef25f71a2b6496f53d94d39ce850aa0cc75d445b5f5b4f4ee4db78ab197a9a8d8a852f44529a007ac0ac23d895928d60ba538b16b0b087a7f903ed29770e215019b77eaecc360f35f7ab11b6d735978795b2c4a74e5bdea4dc6594cd67ed752a108e666729a753ab36d6c4f606f8760f507e1765be8cd744007e629020103" + const errorContains = "use ParsePKCS1PublicKey instead" + derBytes, _ := hex.DecodeString(pkcs1PublicKey) + _, err := ParsePKIXPublicKey(derBytes) + if !strings.Contains(err.Error(), errorContains) { + t.Errorf("expected error containing %q, got %s", errorContains, err) + } +} + var testPrivateKey *rsa.PrivateKey func init() { @@ -496,6 +538,11 @@ func TestCreateSelfSignedCertificate(t *testing.T) { t.Fatalf("Failed to generate ECDSA key: %s", err) } + ed25519Pub, ed25519Priv, err := ed25519.GenerateKey(random) + if err != nil { + t.Fatalf("Failed to generate Ed25519 key: %s", err) + } + tests := []struct { name string pub, priv interface{} @@ -509,6 +556,7 @@ func TestCreateSelfSignedCertificate(t *testing.T) { {"RSAPSS/RSAPSS", &testPrivateKey.PublicKey, testPrivateKey, true, SHA256WithRSAPSS}, {"ECDSA/RSAPSS", &ecdsaPriv.PublicKey, testPrivateKey, false, SHA256WithRSAPSS}, {"RSAPSS/ECDSA", &testPrivateKey.PublicKey, ecdsaPriv, false, ECDSAWithSHA384}, + {"Ed25519", ed25519Pub, ed25519Priv, true, PureEd25519}, } testExtKeyUsage := []ExtKeyUsage{ExtKeyUsageClientAuth, ExtKeyUsageServerAuth} @@ -995,6 +1043,76 @@ func TestRSAPSSSelfSigned(t *testing.T) { } } +const ed25519Certificate = ` +Certificate: + Data: + Version: 3 (0x2) + Serial Number: + 0c:83:d8:21:2b:82:cb:23:98:23:63:e2:f7:97:8a:43:5b:f3:bd:92 + Signature Algorithm: ED25519 + Issuer: CN = Ed25519 test certificate + Validity + Not Before: May 6 17:27:16 2019 GMT + Not After : Jun 5 17:27:16 2019 GMT + Subject: CN = Ed25519 test certificate + Subject Public Key Info: + Public Key Algorithm: ED25519 + ED25519 Public-Key: + pub: + 36:29:c5:6c:0d:4f:14:6c:81:d0:ff:75:d3:6a:70: + 5f:69:cd:0f:4d:66:d5:da:98:7e:82:49:89:a3:8a: + 3c:fa + X509v3 extensions: + X509v3 Subject Key Identifier: + 09:3B:3A:9D:4A:29:D8:95:FF:68:BE:7B:43:54:72:E0:AD:A2:E3:AE + X509v3 Authority Key Identifier: + keyid:09:3B:3A:9D:4A:29:D8:95:FF:68:BE:7B:43:54:72:E0:AD:A2:E3:AE + + X509v3 Basic Constraints: critical + CA:TRUE + Signature Algorithm: ED25519 + 53:a5:58:1c:2c:3b:2a:9e:ac:9d:4e:a5:1d:5f:5d:6d:a6:b5: + 08:de:12:82:f3:97:20:ae:fa:d8:98:f4:1a:83:32:6b:91:f5: + 24:1d:c4:20:7f:2c:e2:4d:da:13:3b:6d:54:1a:d2:a8:28:dc: + 60:b9:d4:f4:78:4b:3c:1c:91:00 +-----BEGIN CERTIFICATE----- +MIIBWzCCAQ2gAwIBAgIUDIPYISuCyyOYI2Pi95eKQ1vzvZIwBQYDK2VwMCMxITAf +BgNVBAMMGEVkMjU1MTkgdGVzdCBjZXJ0aWZpY2F0ZTAeFw0xOTA1MDYxNzI3MTZa +Fw0xOTA2MDUxNzI3MTZaMCMxITAfBgNVBAMMGEVkMjU1MTkgdGVzdCBjZXJ0aWZp +Y2F0ZTAqMAUGAytlcAMhADYpxWwNTxRsgdD/ddNqcF9pzQ9NZtXamH6CSYmjijz6 +o1MwUTAdBgNVHQ4EFgQUCTs6nUop2JX/aL57Q1Ry4K2i464wHwYDVR0jBBgwFoAU +CTs6nUop2JX/aL57Q1Ry4K2i464wDwYDVR0TAQH/BAUwAwEB/zAFBgMrZXADQQBT +pVgcLDsqnqydTqUdX11tprUI3hKC85cgrvrYmPQagzJrkfUkHcQgfyziTdoTO21U +GtKoKNxgudT0eEs8HJEA +-----END CERTIFICATE-----` + +func TestEd25519SelfSigned(t *testing.T) { + der, _ := pem.Decode([]byte(ed25519Certificate)) + if der == nil { + t.Fatalf("Failed to find PEM block") + } + + cert, err := ParseCertificate(der.Bytes) + if err != nil { + t.Fatalf("Failed to parse: %s", err) + } + + if cert.PublicKeyAlgorithm != Ed25519 { + t.Fatalf("Parsed key algorithm was not Ed25519") + } + parsedKey, ok := cert.PublicKey.(ed25519.PublicKey) + if !ok { + t.Fatalf("Parsed key was not an Ed25519 key: %s", err) + } + if len(parsedKey) != ed25519.PublicKeySize { + t.Fatalf("Invalid Ed25519 key") + } + + if err = cert.CheckSignatureFrom(cert); err != nil { + t.Fatalf("Signature check failed: %s", err) + } +} + const pemCertificate = `-----BEGIN CERTIFICATE----- MIIDATCCAemgAwIBAgIRAKQkkrFx1T/dgB/Go/xBM5swDQYJKoZIhvcNAQELBQAw EjEQMA4GA1UEChMHQWNtZSBDbzAeFw0xNjA4MTcyMDM2MDdaFw0xNzA4MTcyMDM2 @@ -1154,6 +1272,11 @@ func TestCreateCertificateRequest(t *testing.T) { t.Fatalf("Failed to generate ECDSA key: %s", err) } + _, ed25519Priv, err := ed25519.GenerateKey(random) + if err != nil { + t.Fatalf("Failed to generate Ed25519 key: %s", err) + } + tests := []struct { name string priv interface{} @@ -1163,6 +1286,7 @@ func TestCreateCertificateRequest(t *testing.T) { {"ECDSA-256", ecdsa256Priv, ECDSAWithSHA1}, {"ECDSA-384", ecdsa384Priv, ECDSAWithSHA1}, {"ECDSA-521", ecdsa521Priv, ECDSAWithSHA1}, + {"Ed25519", ed25519Priv, PureEd25519}, } for _, test := range tests { @@ -2017,3 +2141,24 @@ func TestMultipleURLsInCRLDP(t *testing.T) { t.Errorf("CRL distribution points = %#v, want #%v", got, want) } } + +const hexPKCS1TestPKCS8Key = "30820278020100300d06092a864886f70d0101010500048202623082025e02010002818100cfb1b5bf9685ffa97b4f99df4ff122b70e59ac9b992f3bc2b3dde17d53c1a34928719b02e8fd17839499bfbd515bd6ef99c7a1c47a239718fe36bfd824c0d96060084b5f67f0273443007a24dfaf5634f7772c9346e10eb294c2306671a5a5e719ae24b4de467291bc571014b0e02dec04534d66a9bb171d644b66b091780e8d020301000102818100b595778383c4afdbab95d2bfed12b3f93bb0a73a7ad952f44d7185fd9ec6c34de8f03a48770f2009c8580bcd275e9632714e9a5e3f32f29dc55474b2329ff0ebc08b3ffcb35bc96e6516b483df80a4a59cceb71918cbabf91564e64a39d7e35dce21cb3031824fdbc845dba6458852ec16af5dddf51a8397a8797ae0337b1439024100ea0eb1b914158c70db39031dd8904d6f18f408c85fbbc592d7d20dee7986969efbda081fdf8bc40e1b1336d6b638110c836bfdc3f314560d2e49cd4fbde1e20b024100e32a4e793b574c9c4a94c8803db5152141e72d03de64e54ef2c8ed104988ca780cd11397bc359630d01b97ebd87067c5451ba777cf045ca23f5912f1031308c702406dfcdbbd5a57c9f85abc4edf9e9e29153507b07ce0a7ef6f52e60dcfebe1b8341babd8b789a837485da6c8d55b29bbb142ace3c24a1f5b54b454d01b51e2ad03024100bd6a2b60dee01e1b3bfcef6a2f09ed027c273cdbbaf6ba55a80f6dcc64e4509ee560f84b4f3e076bd03b11e42fe71a3fdd2dffe7e0902c8584f8cad877cdc945024100aa512fa4ada69881f1d8bb8ad6614f192b83200aef5edf4811313d5ef30a86cbd0a90f7b025c71ea06ec6b34db6306c86b1040670fd8654ad7291d066d06d031" +const hexPKCS1TestECKey = "3081a40201010430bdb9839c08ee793d1157886a7a758a3c8b2a17a4df48f17ace57c72c56b4723cf21dcda21d4e1ad57ff034f19fcfd98ea00706052b81040022a16403620004feea808b5ee2429cfcce13c32160e1c960990bd050bb0fdf7222f3decd0a55008e32a6aa3c9062051c4cba92a7a3b178b24567412d43cdd2f882fa5addddd726fe3e208d2c26d733a773a597abb749714df7256ead5105fa6e7b3650de236b50" + +var pkcs1MismatchKeyTests = []struct { + hexKey string + errorContains string +}{ + {hexKey: hexPKCS1TestPKCS8Key, errorContains: "use ParsePKCS8PrivateKey instead"}, + {hexKey: hexPKCS1TestECKey, errorContains: "use ParseECPrivateKey instead"}, +} + +func TestPKCS1MismatchKeyFormat(t *testing.T) { + for i, test := range pkcs1MismatchKeyTests { + derBytes, _ := hex.DecodeString(test.hexKey) + _, err := ParsePKCS1PrivateKey(derBytes) + if !strings.Contains(err.Error(), test.errorContains) { + t.Errorf("#%d: expected error containing %q, got %s", i, test.errorContains, err) + } + } +} diff --git a/src/database/sql/convert.go b/src/database/sql/convert.go index c450d987a4..7a3b5fa7da 100644 --- a/src/database/sql/convert.go +++ b/src/database/sql/convert.go @@ -98,10 +98,12 @@ func defaultCheckNamedValue(nv *driver.NamedValue) (err error) { return err } -// driverArgs converts arguments from callers of Stmt.Exec and +// driverArgsConnLocked converts arguments from callers of Stmt.Exec and // Stmt.Query into driver Values. // // The statement ds may be nil, if no statement is available. +// +// ci must be locked. func driverArgsConnLocked(ci driver.Conn, ds *driverStmt, args []interface{}) ([]driver.NamedValue, error) { nvargs := make([]driver.NamedValue, len(args)) @@ -420,6 +422,9 @@ func convertAssignRows(dest, src interface{}, rows *Rows) error { dv.Set(reflect.New(dv.Type().Elem())) return convertAssignRows(dv.Interface(), src, rows) case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + if src == nil { + return fmt.Errorf("converting NULL to %s is unsupported", dv.Kind()) + } s := asString(src) i64, err := strconv.ParseInt(s, 10, dv.Type().Bits()) if err != nil { @@ -429,6 +434,9 @@ func convertAssignRows(dest, src interface{}, rows *Rows) error { dv.SetInt(i64) return nil case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + if src == nil { + return fmt.Errorf("converting NULL to %s is unsupported", dv.Kind()) + } s := asString(src) u64, err := strconv.ParseUint(s, 10, dv.Type().Bits()) if err != nil { @@ -438,6 +446,9 @@ func convertAssignRows(dest, src interface{}, rows *Rows) error { dv.SetUint(u64) return nil case reflect.Float32, reflect.Float64: + if src == nil { + return fmt.Errorf("converting NULL to %s is unsupported", dv.Kind()) + } s := asString(src) f64, err := strconv.ParseFloat(s, dv.Type().Bits()) if err != nil { @@ -447,6 +458,9 @@ func convertAssignRows(dest, src interface{}, rows *Rows) error { dv.SetFloat(f64) return nil case reflect.String: + if src == nil { + return fmt.Errorf("converting NULL to %s is unsupported", dv.Kind()) + } switch v := src.(type) { case string: dv.SetString(v) diff --git a/src/database/sql/convert_test.go b/src/database/sql/convert_test.go index b0aff7b168..412f0b1823 100644 --- a/src/database/sql/convert_test.go +++ b/src/database/sql/convert_test.go @@ -439,7 +439,7 @@ func TestDriverArgs(t *testing.T) { 0: { args: []interface{}{Valuer_V("foo")}, want: []driver.NamedValue{ - driver.NamedValue{ + { Ordinal: 1, Value: "FOO", }, @@ -448,7 +448,7 @@ func TestDriverArgs(t *testing.T) { 1: { args: []interface{}{nilValuerVPtr}, want: []driver.NamedValue{ - driver.NamedValue{ + { Ordinal: 1, Value: nil, }, @@ -457,7 +457,7 @@ func TestDriverArgs(t *testing.T) { 2: { args: []interface{}{nilValuerPPtr}, want: []driver.NamedValue{ - driver.NamedValue{ + { Ordinal: 1, Value: "nil-to-str", }, @@ -466,7 +466,7 @@ func TestDriverArgs(t *testing.T) { 3: { args: []interface{}{"plain-str"}, want: []driver.NamedValue{ - driver.NamedValue{ + { Ordinal: 1, Value: "plain-str", }, @@ -475,7 +475,7 @@ func TestDriverArgs(t *testing.T) { 4: { args: []interface{}{nilStrPtr}, want: []driver.NamedValue{ - driver.NamedValue{ + { Ordinal: 1, Value: nil, }, diff --git a/src/database/sql/driver/driver.go b/src/database/sql/driver/driver.go index ecc6547bf3..316e7cea37 100644 --- a/src/database/sql/driver/driver.go +++ b/src/database/sql/driver/driver.go @@ -26,7 +26,7 @@ import ( // time.Time // // If the driver supports cursors, a returned Value may also implement the Rows interface -// in this package. This is used when, for example, when a user selects a cursor +// in this package. This is used, for example, when a user selects a cursor // such as "select cursor(select * from my_table) from dual". If the Rows // from the select is closed, the cursor Rows will also be closed. type Value interface{} diff --git a/src/database/sql/example_test.go b/src/database/sql/example_test.go index 6f9bd91276..2bf2a9fccf 100644 --- a/src/database/sql/example_test.go +++ b/src/database/sql/example_test.go @@ -163,6 +163,63 @@ func ExampleDB_PingContext() { log.Println(status) } +func ExampleDB_Prepare() { + projects := []struct { + mascot string + release int + }{ + {"tux", 1991}, + {"duke", 1996}, + {"gopher", 2009}, + {"moby dock", 2013}, + } + + stmt, err := db.Prepare("INSERT INTO projects(id, mascot, release, category) VALUES( ?, ?, ?, ? )") + if err != nil { + log.Fatal(err) + } + defer stmt.Close() // Prepared statements take up server resources and should be closed after use. + + for id, project := range projects { + if _, err := stmt.Exec(id+1, project.mascot, project.release, "open source"); err != nil { + log.Fatal(err) + } + } +} + +func ExampleTx_Prepare() { + projects := []struct { + mascot string + release int + }{ + {"tux", 1991}, + {"duke", 1996}, + {"gopher", 2009}, + {"moby dock", 2013}, + } + + tx, err := db.Begin() + if err != nil { + log.Fatal(err) + } + defer tx.Rollback() // The rollback will be ignored if the tx has been committed later in the function. + + stmt, err := tx.Prepare("INSERT INTO projects(id, mascot, release, category) VALUES( ?, ?, ?, ? )") + if err != nil { + log.Fatal(err) + } + defer stmt.Close() // Prepared statements take up server resources and should be closed after use. + + for id, project := range projects { + if _, err := stmt.Exec(id+1, project.mascot, project.release, "open source"); err != nil { + log.Fatal(err) + } + } + if err := tx.Commit(); err != nil { + log.Fatal(err) + } +} + func ExampleConn_BeginTx() { tx, err := db.BeginTx(ctx, &sql.TxOptions{Isolation: sql.LevelSerializable}) if err != nil { diff --git a/src/database/sql/fakedb_test.go b/src/database/sql/fakedb_test.go index dcdd264baa..c0371f3e78 100644 --- a/src/database/sql/fakedb_test.go +++ b/src/database/sql/fakedb_test.go @@ -1141,6 +1141,8 @@ func converterForType(typ string) driver.ValueConverter { return driver.Null{Converter: driver.Bool} case "int32": return driver.Int32 + case "nullint32": + return driver.Null{Converter: driver.DefaultParameterConverter} case "string": return driver.NotNull{Converter: fakeDriverString{}} case "nullstring": @@ -1158,7 +1160,9 @@ func converterForType(typ string) driver.ValueConverter { // TODO(coopernurse): add type-specific converter return driver.Null{Converter: driver.DefaultParameterConverter} case "datetime": - return driver.DefaultParameterConverter + return driver.NotNull{Converter: driver.DefaultParameterConverter} + case "nulldatetime": + return driver.Null{Converter: driver.DefaultParameterConverter} case "any": return anyTypeConverter{} } @@ -1173,6 +1177,8 @@ func colTypeToReflectType(typ string) reflect.Type { return reflect.TypeOf(NullBool{}) case "int32": return reflect.TypeOf(int32(0)) + case "nullint32": + return reflect.TypeOf(NullInt32{}) case "string": return reflect.TypeOf("") case "nullstring": diff --git a/src/database/sql/sql.go b/src/database/sql/sql.go index 8cdc903c68..27adf69122 100644 --- a/src/database/sql/sql.go +++ b/src/database/sql/sql.go @@ -8,7 +8,7 @@ // The sql package must be used in conjunction with a database driver. // See https://golang.org/s/sqldrivers for a list of drivers. // -// Drivers that do not support context cancelation will not return until +// Drivers that do not support context cancellation will not return until // after the query is completed. // // For usage examples, see the wiki page at @@ -234,6 +234,32 @@ func (n NullInt64) Value() (driver.Value, error) { return n.Int64, nil } +// NullInt32 represents an int32 that may be null. +// NullInt32 implements the Scanner interface so +// it can be used as a scan destination, similar to NullString. +type NullInt32 struct { + Int32 int32 + Valid bool // Valid is true if Int32 is not NULL +} + +// Scan implements the Scanner interface. +func (n *NullInt32) Scan(value interface{}) error { + if value == nil { + n.Int32, n.Valid = 0, false + return nil + } + n.Valid = true + return convertAssign(&n.Int32, value) +} + +// Value implements the driver Valuer interface. +func (n NullInt32) Value() (driver.Value, error) { + if !n.Valid { + return nil, nil + } + return int64(n.Int32), nil +} + // NullFloat64 represents a float64 that may be null. // NullFloat64 implements the Scanner interface so // it can be used as a scan destination, similar to NullString. @@ -286,6 +312,32 @@ func (n NullBool) Value() (driver.Value, error) { return n.Bool, nil } +// NullTime represents a time.Time that may be null. +// NullTime implements the Scanner interface so +// it can be used as a scan destination, similar to NullString. +type NullTime struct { + Time time.Time + Valid bool // Valid is true if Time is not NULL +} + +// Scan implements the Scanner interface. +func (n *NullTime) Scan(value interface{}) error { + if value == nil { + n.Time, n.Valid = time.Time{}, false + return nil + } + n.Valid = true + return convertAssign(&n.Time, value) +} + +// Value implements the driver Valuer interface. +func (n NullTime) Value() (driver.Value, error) { + if !n.Valid { + return nil, nil + } + return n.Time, nil +} + // Scanner is an interface used by Scan. type Scanner interface { // Scan assigns a value from a database driver. diff --git a/src/database/sql/sql_test.go b/src/database/sql/sql_test.go index 64b9dfea5c..260374d413 100644 --- a/src/database/sql/sql_test.go +++ b/src/database/sql/sql_test.go @@ -131,6 +131,7 @@ func TestDriverPanic(t *testing.T) { } func exec(t testing.TB, db *DB, query string, args ...interface{}) { + t.Helper() _, err := db.Exec(query, args...) if err != nil { t.Fatalf("Exec of %q: %v", query, err) @@ -1401,7 +1402,7 @@ func TestInvalidNilValues(t *testing.T) { { name: "int", input: &date2, - expectedError: `sql: Scan error on column index 0, name "bdate": converting driver.Value type ("") to a int: invalid syntax`, + expectedError: `sql: Scan error on column index 0, name "bdate": converting NULL to int is unsupported`, }, } @@ -1671,6 +1672,18 @@ func TestNullInt64Param(t *testing.T) { nullTestRun(t, spec) } +func TestNullInt32Param(t *testing.T) { + spec := nullTestSpec{"nullint32", "int32", [6]nullTestRow{ + {NullInt32{31, true}, 1, NullInt32{31, true}}, + {NullInt32{-22, false}, 1, NullInt32{0, false}}, + {22, 1, NullInt32{22, true}}, + {NullInt32{33, true}, 1, NullInt32{33, true}}, + {NullInt32{222, false}, 1, NullInt32{0, false}}, + {0, NullInt32{31, false}, nil}, + }} + nullTestRun(t, spec) +} + func TestNullFloat64Param(t *testing.T) { spec := nullTestSpec{"nullfloat64", "float64", [6]nullTestRow{ {NullFloat64{31.2, true}, 1, NullFloat64{31.2, true}}, @@ -1695,6 +1708,21 @@ func TestNullBoolParam(t *testing.T) { nullTestRun(t, spec) } +func TestNullTimeParam(t *testing.T) { + t0 := time.Time{} + t1 := time.Date(2000, 1, 1, 8, 9, 10, 11, time.UTC) + t2 := time.Date(2010, 1, 1, 8, 9, 10, 11, time.UTC) + spec := nullTestSpec{"nulldatetime", "datetime", [6]nullTestRow{ + {NullTime{t1, true}, t2, NullTime{t1, true}}, + {NullTime{t1, false}, t2, NullTime{t0, false}}, + {t1, t2, NullTime{t1, true}}, + {NullTime{t1, true}, t2, NullTime{t1, true}}, + {NullTime{t1, false}, t2, NullTime{t0, false}}, + {t2, NullTime{t1, false}, nil}, + }} + nullTestRun(t, spec) +} + func nullTestRun(t *testing.T, spec nullTestSpec) { db := newTestDB(t, "") defer closeDB(t, db) diff --git a/src/debug/dwarf/testdata/cppunsuptypes.cc b/src/debug/dwarf/testdata/cppunsuptypes.cc new file mode 100644 index 0000000000..e9281c7dec --- /dev/null +++ b/src/debug/dwarf/testdata/cppunsuptypes.cc @@ -0,0 +1,34 @@ +// 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. + +// cppunsuptypes.elf built with g++ 7.3 +// g++ -g -c -o cppunsuptypes.elf cppunsuptypes.cc + +int i = 3; +double d = 3; + +// anonymous reference type +int &culprit = i; + +// named reference type +typedef double &dref; +dref dr = d; + +// incorporated into another type +typedef struct { + dref q; + int &r; +} hasrefs; + +hasrefs hr = { d, i }; + +// This code is intended to trigger a DWARF "pointer to member" type DIE +struct CS { int dm; }; + +int foo() +{ + int CS::* pdm = &CS::dm; + CS cs = {42}; + return cs.*pdm; +} diff --git a/src/debug/dwarf/testdata/cppunsuptypes.elf b/src/debug/dwarf/testdata/cppunsuptypes.elf new file mode 100644 index 0000000000..e955512ecd Binary files /dev/null and b/src/debug/dwarf/testdata/cppunsuptypes.elf differ diff --git a/src/debug/dwarf/type.go b/src/debug/dwarf/type.go index 4352092ed0..316db258f6 100644 --- a/src/debug/dwarf/type.go +++ b/src/debug/dwarf/type.go @@ -261,6 +261,20 @@ func (t *TypedefType) String() string { return t.Name } func (t *TypedefType) Size() int64 { return t.Type.Size() } +// An UnsupportedType is a placeholder returned in situations where we +// encounter a type that isn't supported. +type UnsupportedType struct { + CommonType + Tag Tag +} + +func (t *UnsupportedType) String() string { + if t.Name != "" { + return t.Name + } + return t.Name + "(unsupported type " + t.Tag.String() + ")" +} + // typeReader is used to read from either the info section or the // types section. type typeReader interface { @@ -680,6 +694,16 @@ func (d *Data) readType(name string, r typeReader, off Offset, typeCache map[Off typ = t typeCache[off] = t t.Name, _ = e.Val(AttrName).(string) + + default: + // This is some other type DIE that we're currently not + // equipped to handle. Return an abstract "unsupported type" + // object in such cases. + t := new(UnsupportedType) + typ = t + typeCache[off] = t + t.Tag = e.Tag + t.Name, _ = e.Val(AttrName).(string) } if err != nil { diff --git a/src/debug/dwarf/type_test.go b/src/debug/dwarf/type_test.go index 6c06731ea1..aa2fbeca0b 100644 --- a/src/debug/dwarf/type_test.go +++ b/src/debug/dwarf/type_test.go @@ -9,6 +9,8 @@ import ( "debug/elf" "debug/macho" "debug/pe" + "fmt" + "strconv" "testing" ) @@ -168,3 +170,61 @@ func TestTypedefCycle(t *testing.T) { } } } + +var unsupportedTypeTests = []string{ + // varname:typename:string:size + "culprit::(unsupported type ReferenceType):8", + "pdm::(unsupported type PtrToMemberType):-1", +} + +func TestUnsupportedTypes(t *testing.T) { + // Issue 29601: + // When reading DWARF from C++ load modules, we can encounter + // oddball type DIEs. These will be returned as "UnsupportedType" + // objects; check to make sure this works properly. + d := elfData(t, "testdata/cppunsuptypes.elf") + r := d.Reader() + seen := make(map[string]bool) + for { + e, err := r.Next() + if err != nil { + t.Fatal("r.Next:", err) + } + if e == nil { + break + } + if e.Tag == TagVariable { + vname, _ := e.Val(AttrName).(string) + tAttr := e.Val(AttrType) + typOff, ok := tAttr.(Offset) + if !ok { + t.Errorf("variable at offset %v has no type", e.Offset) + continue + } + typ, err := d.Type(typOff) + if err != nil { + t.Errorf("err in type decode: %v\n", err) + continue + } + unsup, isok := typ.(*UnsupportedType) + if !isok { + continue + } + tag := vname + ":" + unsup.Name + ":" + unsup.String() + + ":" + strconv.FormatInt(unsup.Size(), 10) + seen[tag] = true + } + } + dumpseen := false + for _, v := range unsupportedTypeTests { + if !seen[v] { + t.Errorf("missing %s", v) + dumpseen = true + } + } + if dumpseen { + for k, _ := range seen { + fmt.Printf("seen: %s\n", k) + } + } +} diff --git a/src/debug/elf/file.go b/src/debug/elf/file.go index b2adc2834f..f92a2b0052 100644 --- a/src/debug/elf/file.go +++ b/src/debug/elf/file.go @@ -276,7 +276,6 @@ func NewFile(r io.ReaderAt) (*File, error) { var phentsize, phnum int var shoff int64 var shentsize, shnum, shstrndx int - shstrndx = -1 switch f.Class { case ELFCLASS32: hdr := new(Header32) @@ -318,7 +317,11 @@ func NewFile(r io.ReaderAt) (*File, error) { shstrndx = int(hdr.Shstrndx) } - if shnum > 0 && shoff > 0 && (shstrndx < 0 || shstrndx >= shnum) { + if shoff == 0 && shnum != 0 { + return nil, &FormatError{0, "invalid ELF shnum for shoff=0", shnum} + } + + if shnum > 0 && shstrndx >= shnum { return nil, &FormatError{0, "invalid ELF shstrndx", shstrndx} } diff --git a/src/debug/elf/file_test.go b/src/debug/elf/file_test.go index d7c1e9f800..b826a0ff05 100644 --- a/src/debug/elf/file_test.go +++ b/src/debug/elf/file_test.go @@ -810,3 +810,14 @@ func TestNoSectionOverlaps(t *testing.T) { } } } + +func TestIssue10996(t *testing.T) { + data := []byte("\u007fELF\x02\x01\x010000000000000" + + "\x010000000000000000000" + + "\x00\x00\x00\x00\x00\x00\x00\x0000000000\x00\x00\x00\x00" + + "0000") + _, err := NewFile(bytes.NewReader(data)) + if err == nil { + t.Fatalf("opening invalid ELF file unexpectedly suceeded") + } +} diff --git a/src/debug/gosym/pclntab.go b/src/debug/gosym/pclntab.go index ad99b4dc5a..7e54a94351 100644 --- a/src/debug/gosym/pclntab.go +++ b/src/debug/gosym/pclntab.go @@ -93,7 +93,8 @@ func (t *LineTable) slice(pc uint64) *LineTable { } // PCToLine returns the line number for the given program counter. -// Callers should use Table's PCToLine method instead. +// +// Deprecated: Use Table's PCToLine method instead. func (t *LineTable) PCToLine(pc uint64) int { if t.isGo12() { return t.go12PCToLine(pc) @@ -104,7 +105,8 @@ func (t *LineTable) PCToLine(pc uint64) int { // LineToPC returns the program counter for the given line number, // considering only program counters before maxpc. -// Callers should use Table's LineToPC method instead. +// +// Deprecated: Use Table's LineToPC method instead. func (t *LineTable) LineToPC(line int, maxpc uint64) uint64 { if t.isGo12() { return 0 diff --git a/src/debug/gosym/pclntab_test.go b/src/debug/gosym/pclntab_test.go index d21f0e24a8..ef644f8454 100644 --- a/src/debug/gosym/pclntab_test.go +++ b/src/debug/gosym/pclntab_test.go @@ -55,7 +55,7 @@ func endtest() { // These tests open and examine the test binary, and use elf.Open to do so. func skipIfNotELF(t *testing.T) { switch runtime.GOOS { - case "dragonfly", "freebsd", "linux", "netbsd", "openbsd", "solaris": + case "dragonfly", "freebsd", "linux", "netbsd", "openbsd", "solaris", "illumos": // OK. default: t.Skipf("skipping on non-ELF system %s", runtime.GOOS) diff --git a/src/debug/gosym/symtab.go b/src/debug/gosym/symtab.go index a84b7f6def..3be612e1df 100644 --- a/src/debug/gosym/symtab.go +++ b/src/debug/gosym/symtab.go @@ -35,13 +35,21 @@ func (s *Sym) Static() bool { return s.Type >= 'a' } // PackageName returns the package part of the symbol name, // or the empty string if there is none. func (s *Sym) PackageName() string { - pathend := strings.LastIndex(s.Name, "/") + name := s.Name + + // A prefix of "type." and "go." is a compiler-generated symbol that doesn't belong to any package. + // See variable reservedimports in cmd/compile/internal/gc/subr.go + if strings.HasPrefix(name, "go.") || strings.HasPrefix(name, "type.") { + return "" + } + + pathend := strings.LastIndex(name, "/") if pathend < 0 { pathend = 0 } - if i := strings.Index(s.Name[pathend:], "."); i != -1 { - return s.Name[:pathend+i] + if i := strings.Index(name[pathend:], "."); i != -1 { + return name[:pathend+i] } return "" } diff --git a/src/debug/gosym/symtab_test.go b/src/debug/gosym/symtab_test.go index 08e86336b8..b6ed8f554c 100644 --- a/src/debug/gosym/symtab_test.go +++ b/src/debug/gosym/symtab_test.go @@ -41,3 +41,18 @@ func TestRemotePackage(t *testing.T) { assertString(t, fmt.Sprintf("receiver of %q", s1.Name), s1.ReceiverName(), "(*FlagSet)") assertString(t, fmt.Sprintf("receiver of %q", s2.Name), s2.ReceiverName(), "") } + +func TestIssue29551(t *testing.T) { + symNames := []string{ + "type..eq.[9]debug/elf.intName", + "type..hash.debug/elf.ProgHeader", + "type..eq.runtime._panic", + "type..hash.struct { runtime.gList; runtime.n int32 }", + "go.(*struct { sync.Mutex; math/big.table [64]math/big", + } + + for _, symName := range symNames { + s := Sym{Name: symName} + assertString(t, fmt.Sprintf("package of %q", s.Name), s.PackageName(), "") + } +} diff --git a/src/debug/macho/file_test.go b/src/debug/macho/file_test.go index 003c14e69b..28b76f93d7 100644 --- a/src/debug/macho/file_test.go +++ b/src/debug/macho/file_test.go @@ -154,7 +154,7 @@ var fileTests = []fileTest{ nil, nil, map[string][]Reloc{ - "__text": []Reloc{ + "__text": { { Addr: 0x1d, Type: uint8(GENERIC_RELOC_VANILLA), @@ -189,7 +189,7 @@ var fileTests = []fileTest{ nil, nil, map[string][]Reloc{ - "__text": []Reloc{ + "__text": { { Addr: 0x19, Type: uint8(X86_64_RELOC_BRANCH), @@ -207,7 +207,7 @@ var fileTests = []fileTest{ Value: 2, }, }, - "__compact_unwind": []Reloc{ + "__compact_unwind": { { Addr: 0x0, Type: uint8(X86_64_RELOC_UNSIGNED), diff --git a/src/debug/pe/file.go b/src/debug/pe/file.go index 1c308b3dc3..58814162bc 100644 --- a/src/debug/pe/file.go +++ b/src/debug/pe/file.go @@ -324,6 +324,10 @@ type ImportDirectory struct { // satisfied by other libraries at dynamic load time. // It does not return weak symbols. func (f *File) ImportedSymbols() ([]string, error) { + if f.OptionalHeader == nil { + return nil, nil + } + pe64 := f.Machine == IMAGE_FILE_MACHINE_AMD64 // grab the number of data directory entries @@ -373,7 +377,7 @@ func (f *File) ImportedSymbols() ([]string, error) { // start decoding the import directory var ida []ImportDirectory - for len(d) > 0 { + for len(d) >= 20 { var dt ImportDirectory dt.OriginalFirstThunk = binary.LittleEndian.Uint32(d[0:4]) dt.TimeDateStamp = binary.LittleEndian.Uint32(d[4:8]) diff --git a/src/debug/pe/file_test.go b/src/debug/pe/file_test.go index 9613af3a3c..6c7fe13caf 100644 --- a/src/debug/pe/file_test.go +++ b/src/debug/pe/file_test.go @@ -5,6 +5,7 @@ package pe import ( + "bytes" "debug/dwarf" "internal/testenv" "io/ioutil" @@ -627,3 +628,52 @@ func TestImportTableInUnknownSection(t *testing.T) { t.Fatalf("unable to locate any imported symbols within file %q.", path) } } + +func TestInvalidFormat(t *testing.T) { + crashers := [][]byte{ + // https://golang.org/issue/30250 + []byte("\x00\x00\x00\x0000000\x00\x00\x00\x00\x00\x00\x000000" + + "00000000000000000000" + + "000000000\x00\x00\x0000000000" + + "00000000000000000000" + + "0000000000000000"), + // https://golang.org/issue/30253 + []byte("L\x01\b\x00regi\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x0f\x03" + + "\v\x01\x02\x18\x00\x0e\x00\x00\x00\x1e\x00\x00\x00\x02\x00\x00\x80\x12\x00\x00" + + "\x00\x10\x00\x00\x00 \x00\x00\x00\x00@\x00\x00\x10\x00\x00\x00\x02\x00\x00" + + "\x04\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00" + + "\x00\x04\x00\x00\x06S\x00\x00\x03\x00\x00\x00\x00\x00 \x00\x00\x10\x00\x00" + + "\x00\x00\x10\x00\x00\x10\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00`\x00\x00x\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x04\x80\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8`\x00\x00|\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00.text\x00\x00\x00d\f\x00\x00\x00\x10\x00\x00" + + "\x00\x0e\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "`\x00P`.data\x00\x00\x00\x10\x00\x00\x00\x00 \x00\x00" + + "\x00\x02\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "@\x000\xc0.rdata\x00\x004\x01\x00\x00\x000\x00\x00" + + "\x00\x02\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "@\x000@.eh_fram\xa0\x03\x00\x00\x00@\x00\x00" + + "\x00\x04\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "@\x000@.bss\x00\x00\x00\x00`\x00\x00\x00\x00P\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x80\x000\xc0.idata\x00\x00x\x03\x00\x00\x00`\x00\x00" + + "\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00" + + "0\xc0.CRT\x00\x00\x00\x00\x18\x00\x00\x00\x00p\x00\x00\x00\x02" + + "\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00" + + "0\xc0.tls\x00\x00\x00\x00 \x00\x00\x00\x00\x80\x00\x00\x00\x02" + + "\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001\xc9" + + "H\x895\x1d"), + } + + for _, data := range crashers { + f, err := NewFile(bytes.NewReader(data)) + if err != nil { + t.Error(err) + } + f.ImportedSymbols() + } +} diff --git a/src/encoding/base32/base32_test.go b/src/encoding/base32/base32_test.go index b74054ba40..eb14f1eb26 100644 --- a/src/encoding/base32/base32_test.go +++ b/src/encoding/base32/base32_test.go @@ -119,7 +119,7 @@ func TestDecoder(t *testing.T) { testEqual(t, "Read from %q = length %v, want %v", p.encoded, count, len(p.decoded)) testEqual(t, "Decoding of %q = %q, want %q", p.encoded, string(dbuf[0:count]), p.decoded) if err != io.EOF { - count, err = decoder.Read(dbuf) + _, err = decoder.Read(dbuf) } testEqual(t, "Read from %q = %v, want %v", p.encoded, err, io.EOF) } @@ -539,52 +539,52 @@ func TestBufferedDecodingSameError(t *testing.T) { // NBSWY3DPO5XXE3DE == helloworld // Test with "ZZ" as extra input {"helloworld", [][]string{ - []string{"NBSW", "Y3DP", "O5XX", "E3DE", "ZZ"}, - []string{"NBSWY3DPO5XXE3DE", "ZZ"}, - []string{"NBSWY3DPO5XXE3DEZZ"}, - []string{"NBS", "WY3", "DPO", "5XX", "E3D", "EZZ"}, - []string{"NBSWY3DPO5XXE3", "DEZZ"}, + {"NBSW", "Y3DP", "O5XX", "E3DE", "ZZ"}, + {"NBSWY3DPO5XXE3DE", "ZZ"}, + {"NBSWY3DPO5XXE3DEZZ"}, + {"NBS", "WY3", "DPO", "5XX", "E3D", "EZZ"}, + {"NBSWY3DPO5XXE3", "DEZZ"}, }, io.ErrUnexpectedEOF}, // Test with "ZZY" as extra input {"helloworld", [][]string{ - []string{"NBSW", "Y3DP", "O5XX", "E3DE", "ZZY"}, - []string{"NBSWY3DPO5XXE3DE", "ZZY"}, - []string{"NBSWY3DPO5XXE3DEZZY"}, - []string{"NBS", "WY3", "DPO", "5XX", "E3D", "EZZY"}, - []string{"NBSWY3DPO5XXE3", "DEZZY"}, + {"NBSW", "Y3DP", "O5XX", "E3DE", "ZZY"}, + {"NBSWY3DPO5XXE3DE", "ZZY"}, + {"NBSWY3DPO5XXE3DEZZY"}, + {"NBS", "WY3", "DPO", "5XX", "E3D", "EZZY"}, + {"NBSWY3DPO5XXE3", "DEZZY"}, }, io.ErrUnexpectedEOF}, // Normal case, this is valid input {"helloworld", [][]string{ - []string{"NBSW", "Y3DP", "O5XX", "E3DE"}, - []string{"NBSWY3DPO5XXE3DE"}, - []string{"NBS", "WY3", "DPO", "5XX", "E3D", "E"}, - []string{"NBSWY3DPO5XXE3", "DE"}, + {"NBSW", "Y3DP", "O5XX", "E3DE"}, + {"NBSWY3DPO5XXE3DE"}, + {"NBS", "WY3", "DPO", "5XX", "E3D", "E"}, + {"NBSWY3DPO5XXE3", "DE"}, }, nil}, // MZXW6YTB = fooba {"fooba", [][]string{ - []string{"MZXW6YTBZZ"}, - []string{"MZXW6YTBZ", "Z"}, - []string{"MZXW6YTB", "ZZ"}, - []string{"MZXW6YT", "BZZ"}, - []string{"MZXW6Y", "TBZZ"}, - []string{"MZXW6Y", "TB", "ZZ"}, - []string{"MZXW6", "YTBZZ"}, - []string{"MZXW6", "YTB", "ZZ"}, - []string{"MZXW6", "YT", "BZZ"}, + {"MZXW6YTBZZ"}, + {"MZXW6YTBZ", "Z"}, + {"MZXW6YTB", "ZZ"}, + {"MZXW6YT", "BZZ"}, + {"MZXW6Y", "TBZZ"}, + {"MZXW6Y", "TB", "ZZ"}, + {"MZXW6", "YTBZZ"}, + {"MZXW6", "YTB", "ZZ"}, + {"MZXW6", "YT", "BZZ"}, }, io.ErrUnexpectedEOF}, // Normal case, this is valid input {"fooba", [][]string{ - []string{"MZXW6YTB"}, - []string{"MZXW6YT", "B"}, - []string{"MZXW6Y", "TB"}, - []string{"MZXW6", "YTB"}, - []string{"MZXW6", "YT", "B"}, - []string{"MZXW", "6YTB"}, - []string{"MZXW", "6Y", "TB"}, + {"MZXW6YTB"}, + {"MZXW6YT", "B"}, + {"MZXW6Y", "TB"}, + {"MZXW6", "YTB"}, + {"MZXW6", "YT", "B"}, + {"MZXW", "6YTB"}, + {"MZXW", "6Y", "TB"}, }, nil}, } diff --git a/src/encoding/base64/base64.go b/src/encoding/base64/base64.go index 0bb37b311a..082210198f 100644 --- a/src/encoding/base64/base64.go +++ b/src/encoding/base64/base64.go @@ -123,6 +123,10 @@ func (enc *Encoding) Encode(dst, src []byte) { if len(src) == 0 { return } + // enc is a pointer receiver, so the use of enc.encode within the hot + // loop below means a nil check at every operation. Lift that nil check + // outside of the loop to speed up the encoder. + _ = enc.encode di, si := 0, 0 n := (len(src) / 3) * 3 @@ -278,7 +282,10 @@ func (e CorruptInputError) Error() string { func (enc *Encoding) decodeQuantum(dst, src []byte, si int) (nsi, n int, err error) { // Decode quantum using the base64 alphabet var dbuf [4]byte - dinc, dlen := 3, 4 + dlen := 4 + + // Lift the nil check outside of the loop. + _ = enc.decodeMap for j := 0; j < len(dbuf); j++ { if len(src) == si { @@ -288,7 +295,7 @@ func (enc *Encoding) decodeQuantum(dst, src []byte, si int) (nsi, n int, err err case j == 1, enc.padChar != NoPadding: return si, 0, CorruptInputError(si - j) } - dinc, dlen = j-1, j + dlen = j break } in := src[si] @@ -340,7 +347,7 @@ func (enc *Encoding) decodeQuantum(dst, src []byte, si int) (nsi, n int, err err // trailing garbage err = CorruptInputError(si) } - dinc, dlen = 3, j + dlen = j break } @@ -365,7 +372,6 @@ func (enc *Encoding) decodeQuantum(dst, src []byte, si int) (nsi, n int, err err return si, 0, CorruptInputError(si - 2) } } - dst = dst[dinc:] return si, dlen - 1, err } @@ -464,9 +470,23 @@ func (enc *Encoding) Decode(dst, src []byte) (n int, err error) { return 0, nil } + // Lift the nil check outside of the loop. enc.decodeMap is directly + // used later in this function, to let the compiler know that the + // receiver can't be nil. + _ = enc.decodeMap + si := 0 for strconv.IntSize >= 64 && len(src)-si >= 8 && len(dst)-n >= 8 { - if dn, ok := enc.decode64(src[si:]); ok { + if dn, ok := assemble64( + enc.decodeMap[src[si+0]], + enc.decodeMap[src[si+1]], + enc.decodeMap[src[si+2]], + enc.decodeMap[src[si+3]], + enc.decodeMap[src[si+4]], + enc.decodeMap[src[si+5]], + enc.decodeMap[src[si+6]], + enc.decodeMap[src[si+7]], + ); ok { binary.BigEndian.PutUint64(dst[n:], dn) n += 6 si += 8 @@ -481,7 +501,12 @@ func (enc *Encoding) Decode(dst, src []byte) (n int, err error) { } for len(src)-si >= 4 && len(dst)-n >= 4 { - if dn, ok := enc.decode32(src[si:]); ok { + if dn, ok := assemble32( + enc.decodeMap[src[si+0]], + enc.decodeMap[src[si+1]], + enc.decodeMap[src[si+2]], + enc.decodeMap[src[si+3]], + ); ok { binary.BigEndian.PutUint32(dst[n:], dn) n += 3 si += 4 @@ -506,70 +531,40 @@ func (enc *Encoding) Decode(dst, src []byte) (n int, err error) { return n, err } -// decode32 tries to decode 4 base64 characters into 3 bytes, and returns those -// bytes. len(src) must be >= 4. -// Returns (0, false) if decoding failed. -func (enc *Encoding) decode32(src []byte) (dn uint32, ok bool) { - var n uint32 - _ = src[3] - if n = uint32(enc.decodeMap[src[0]]); n == 0xff { +// assemble32 assembles 4 base64 digits into 3 bytes. +// Each digit comes from the decode map, and will be 0xff +// if it came from an invalid character. +func assemble32(n1, n2, n3, n4 byte) (dn uint32, ok bool) { + // Check that all the digits are valid. If any of them was 0xff, their + // bitwise OR will be 0xff. + if n1|n2|n3|n4 == 0xff { return 0, false } - dn |= n << 26 - if n = uint32(enc.decodeMap[src[1]]); n == 0xff { - return 0, false - } - dn |= n << 20 - if n = uint32(enc.decodeMap[src[2]]); n == 0xff { - return 0, false - } - dn |= n << 14 - if n = uint32(enc.decodeMap[src[3]]); n == 0xff { - return 0, false - } - dn |= n << 8 - return dn, true + return uint32(n1)<<26 | + uint32(n2)<<20 | + uint32(n3)<<14 | + uint32(n4)<<8, + true } -// decode64 tries to decode 8 base64 characters into 6 bytes, and returns those -// bytes. len(src) must be >= 8. -// Returns (0, false) if decoding failed. -func (enc *Encoding) decode64(src []byte) (dn uint64, ok bool) { - var n uint64 - _ = src[7] - if n = uint64(enc.decodeMap[src[0]]); n == 0xff { +// assemble64 assembles 8 base64 digits into 6 bytes. +// Each digit comes from the decode map, and will be 0xff +// if it came from an invalid character. +func assemble64(n1, n2, n3, n4, n5, n6, n7, n8 byte) (dn uint64, ok bool) { + // Check that all the digits are valid. If any of them was 0xff, their + // bitwise OR will be 0xff. + if n1|n2|n3|n4|n5|n6|n7|n8 == 0xff { return 0, false } - dn |= n << 58 - if n = uint64(enc.decodeMap[src[1]]); n == 0xff { - return 0, false - } - dn |= n << 52 - if n = uint64(enc.decodeMap[src[2]]); n == 0xff { - return 0, false - } - dn |= n << 46 - if n = uint64(enc.decodeMap[src[3]]); n == 0xff { - return 0, false - } - dn |= n << 40 - if n = uint64(enc.decodeMap[src[4]]); n == 0xff { - return 0, false - } - dn |= n << 34 - if n = uint64(enc.decodeMap[src[5]]); n == 0xff { - return 0, false - } - dn |= n << 28 - if n = uint64(enc.decodeMap[src[6]]); n == 0xff { - return 0, false - } - dn |= n << 22 - if n = uint64(enc.decodeMap[src[7]]); n == 0xff { - return 0, false - } - dn |= n << 16 - return dn, true + return uint64(n1)<<58 | + uint64(n2)<<52 | + uint64(n3)<<46 | + uint64(n4)<<40 | + uint64(n5)<<34 | + uint64(n6)<<28 | + uint64(n7)<<22 | + uint64(n8)<<16, + true } type newlineFilteringReader struct { diff --git a/src/encoding/base64/base64_test.go b/src/encoding/base64/base64_test.go index f7f312ca39..bc67036f5b 100644 --- a/src/encoding/base64/base64_test.go +++ b/src/encoding/base64/base64_test.go @@ -11,6 +11,7 @@ import ( "io" "io/ioutil" "reflect" + "runtime/debug" "strings" "testing" "time" @@ -175,7 +176,7 @@ func TestDecoder(t *testing.T) { testEqual(t, "Read from %q = length %v, want %v", p.encoded, count, len(p.decoded)) testEqual(t, "Decoding of %q = %q, want %q", p.encoded, string(dbuf[0:count]), p.decoded) if err != io.EOF { - count, err = decoder.Read(dbuf) + _, err = decoder.Read(dbuf) } testEqual(t, "Read from %q = %v, want %v", p.encoded, err, io.EOF) } @@ -247,6 +248,20 @@ func TestDecodeCorrupt(t *testing.T) { } } +func TestDecodeBounds(t *testing.T) { + var buf [32]byte + s := StdEncoding.EncodeToString(buf[:]) + defer func() { + if err := recover(); err != nil { + t.Fatalf("Decode panicked unexpectedly: %v\n%s", err, debug.Stack()) + } + }() + n, err := StdEncoding.Decode(buf[:], []byte(s)) + if n != len(buf) || err != nil { + t.Fatalf("StdEncoding.Decode = %d, %v, want %d, nil", n, err, len(buf)) + } +} + func TestEncodedLen(t *testing.T) { for _, tt := range []struct { enc *Encoding diff --git a/src/encoding/binary/example_test.go b/src/encoding/binary/example_test.go index 6f892c2b8d..b994b897ce 100644 --- a/src/encoding/binary/example_test.go +++ b/src/encoding/binary/example_test.go @@ -132,12 +132,12 @@ func ExamplePutVarint() { func ExampleUvarint() { inputs := [][]byte{ - []byte{0x01}, - []byte{0x02}, - []byte{0x7f}, - []byte{0x80, 0x01}, - []byte{0xff, 0x01}, - []byte{0x80, 0x02}, + {0x01}, + {0x02}, + {0x7f}, + {0x80, 0x01}, + {0xff, 0x01}, + {0x80, 0x02}, } for _, b := range inputs { x, n := binary.Uvarint(b) @@ -157,15 +157,15 @@ func ExampleUvarint() { func ExampleVarint() { inputs := [][]byte{ - []byte{0x81, 0x01}, - []byte{0x7f}, - []byte{0x03}, - []byte{0x01}, - []byte{0x00}, - []byte{0x02}, - []byte{0x04}, - []byte{0x7e}, - []byte{0x80, 0x01}, + {0x81, 0x01}, + {0x7f}, + {0x03}, + {0x01}, + {0x00}, + {0x02}, + {0x04}, + {0x7e}, + {0x80, 0x01}, } for _, b := range inputs { x, n := binary.Varint(b) diff --git a/src/encoding/csv/fuzz.go b/src/encoding/csv/fuzz.go new file mode 100644 index 0000000000..dc33893dd7 --- /dev/null +++ b/src/encoding/csv/fuzz.go @@ -0,0 +1,70 @@ +// 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. + +// +build gofuzz + +package csv + +import ( + "bytes" + "fmt" + "reflect" +) + +func Fuzz(data []byte) int { + score := 0 + buf := new(bytes.Buffer) + + for _, tt := range []Reader{ + Reader{}, + Reader{Comma: ';'}, + Reader{Comma: '\t'}, + Reader{LazyQuotes: true}, + Reader{TrimLeadingSpace: true}, + Reader{Comment: '#'}, + Reader{Comment: ';'}, + } { + r := NewReader(bytes.NewReader(data)) + r.Comma = tt.Comma + r.Comment = tt.Comment + r.LazyQuotes = tt.LazyQuotes + r.TrimLeadingSpace = tt.TrimLeadingSpace + + records, err := r.ReadAll() + if err != nil { + continue + } + score = 1 + + buf.Reset() + w := NewWriter(buf) + w.Comma = tt.Comma + err = w.WriteAll(records) + if err != nil { + fmt.Printf("writer = %#v\n", w) + fmt.Printf("records = %v\n", records) + panic(err) + } + + r = NewReader(buf) + r.Comma = tt.Comma + r.Comment = tt.Comment + r.LazyQuotes = tt.LazyQuotes + r.TrimLeadingSpace = tt.TrimLeadingSpace + result, err := r.ReadAll() + if err != nil { + fmt.Printf("reader = %#v\n", r) + fmt.Printf("records = %v\n", records) + panic(err) + } + + if !reflect.DeepEqual(records, result) { + fmt.Println("records = \n", records) + fmt.Println("result = \n", records) + panic("not equal") + } + } + + return score +} diff --git a/src/encoding/csv/reader.go b/src/encoding/csv/reader.go index a2fd4c0970..c40aa506b0 100644 --- a/src/encoding/csv/reader.go +++ b/src/encoding/csv/reader.go @@ -80,6 +80,8 @@ func (e *ParseError) Error() string { return fmt.Sprintf("parse error on line %d, column %d: %v", e.Line, e.Column, e.Err) } +func (e *ParseError) Unwrap() error { return e.Err } + // These are the errors that can be returned in ParseError.Err. var ( ErrTrailingComma = errors.New("extra delimiter at end of line") // Deprecated: No longer used. diff --git a/src/encoding/csv/writer.go b/src/encoding/csv/writer.go index 31c4f9c22d..b18996a930 100644 --- a/src/encoding/csv/writer.go +++ b/src/encoding/csv/writer.go @@ -12,7 +12,7 @@ import ( "unicode/utf8" ) -// A Writer writes records to a CSV encoded file. +// A Writer writes records using CSV encoding. // // As returned by NewWriter, a Writer writes records terminated by a // newline and uses ',' as the field delimiter. The exported fields can be @@ -21,6 +21,12 @@ import ( // Comma is the field delimiter. // // If UseCRLF is true, the Writer ends each output line with \r\n instead of \n. +// +// The writes of individual records are buffered. +// After all data has been written, the client should call the +// Flush method to guarantee all data has been forwarded to +// the underlying io.Writer. Any errors that occurred should +// be checked by calling the Error method. type Writer struct { Comma rune // Field delimiter (set to ',' by NewWriter) UseCRLF bool // True to use \r\n as the line terminator @@ -37,6 +43,8 @@ func NewWriter(w io.Writer) *Writer { // Writer writes a single CSV record to w along with any necessary quoting. // A record is a slice of strings with each string being one field. +// Writes are buffered, so Flush must eventually be called to ensure +// that the record is written to the underlying io.Writer. func (w *Writer) Write(record []string) error { if !validDelim(w.Comma) { return errInvalidDelim @@ -122,7 +130,8 @@ func (w *Writer) Error() error { return err } -// WriteAll writes multiple CSV records to w using Write and then calls Flush. +// WriteAll writes multiple CSV records to w using Write and then calls Flush, +// returning any error from the Flush. func (w *Writer) WriteAll(records [][]string) error { for _, record := range records { err := w.Write(record) diff --git a/src/encoding/gob/codec_test.go b/src/encoding/gob/codec_test.go index 520afde34d..494abc9b91 100644 --- a/src/encoding/gob/codec_test.go +++ b/src/encoding/gob/codec_test.go @@ -1421,8 +1421,7 @@ func encFuzzDec(rng *rand.Rand, in interface{}) error { // This does some "fuzz testing" by attempting to decode a sequence of random bytes. func TestFuzz(t *testing.T) { if !*doFuzzTests { - t.Logf("disabled; run with -gob.fuzz to enable") - return + t.Skipf("disabled; run with -gob.fuzz to enable") } // all possible inputs @@ -1441,8 +1440,7 @@ func TestFuzz(t *testing.T) { func TestFuzzRegressions(t *testing.T) { if !*doFuzzTests { - t.Logf("disabled; run with -gob.fuzz to enable") - return + t.Skipf("disabled; run with -gob.fuzz to enable") } // An instance triggering a type name of length ~102 GB. @@ -1465,6 +1463,10 @@ func testFuzz(t *testing.T, seed int64, n int, input ...interface{}) { // TestFuzzOneByte tries to decode corrupted input sequences // and checks that no panic occurs. func TestFuzzOneByte(t *testing.T) { + if !*doFuzzTests { + t.Skipf("disabled; run with -gob.fuzz to enable") + } + buf := new(bytes.Buffer) Register(OnTheFly{}) dt := newDT() diff --git a/src/encoding/gob/doc.go b/src/encoding/gob/doc.go index fa534313cc..c765707139 100644 --- a/src/encoding/gob/doc.go +++ b/src/encoding/gob/doc.go @@ -193,10 +193,14 @@ pair (-type id, encoded-type) where encoded-type is the gob encoding of a wireTy description, constructed from these types: type wireType struct { - ArrayT *ArrayType - SliceT *SliceType - StructT *StructType - MapT *MapType + ArrayT *ArrayType + SliceT *SliceType + StructT *StructType + MapT *MapType + GobEncoderT *gobEncoderType + BinaryMarshalerT *gobEncoderType + TextMarshalerT *gobEncoderType + } type arrayType struct { CommonType @@ -224,6 +228,9 @@ description, constructed from these types: Key typeId Elem typeId } + type gobEncoderType struct { + CommonType + } If there are nested type ids, the types for all inner type ids must be defined before the top-level type id is used to describe an encoded-v. diff --git a/src/encoding/gob/encode.go b/src/encoding/gob/encode.go index 5371e7245f..8f8f170c16 100644 --- a/src/encoding/gob/encode.go +++ b/src/encoding/gob/encode.go @@ -47,7 +47,7 @@ var encBufferPool = sync.Pool{ }, } -func (e *encBuffer) WriteByte(c byte) { +func (e *encBuffer) writeByte(c byte) { e.data = append(e.data, c) } @@ -106,7 +106,7 @@ func (enc *Encoder) freeEncoderState(e *encoderState) { // encodeUint writes an encoded unsigned integer to state.b. func (state *encoderState) encodeUint(x uint64) { if x <= 0x7F { - state.b.WriteByte(uint8(x)) + state.b.writeByte(uint8(x)) return } diff --git a/src/encoding/hex/hex.go b/src/encoding/hex/hex.go index 2bb2b57df9..fbba78ffd2 100644 --- a/src/encoding/hex/hex.go +++ b/src/encoding/hex/hex.go @@ -23,11 +23,12 @@ func EncodedLen(n int) int { return n * 2 } // of bytes written to dst, but this value is always EncodedLen(len(src)). // Encode implements hexadecimal encoding. func Encode(dst, src []byte) int { - for i, v := range src { - dst[i*2] = hextable[v>>4] - dst[i*2+1] = hextable[v&0x0f] + j := 0 + for _, v := range src { + dst[j] = hextable[v>>4] + dst[j+1] = hextable[v&0x0f] + j += 2 } - return len(src) * 2 } @@ -55,23 +56,24 @@ func DecodedLen(x int) int { return x / 2 } // If the input is malformed, Decode returns the number // of bytes decoded before the error. func Decode(dst, src []byte) (int, error) { - var i int - for i = 0; i < len(src)/2; i++ { - a, ok := fromHexChar(src[i*2]) + i, j := 0, 1 + for ; j < len(src); j += 2 { + a, ok := fromHexChar(src[j-1]) if !ok { - return i, InvalidByteError(src[i*2]) + return i, InvalidByteError(src[j-1]) } - b, ok := fromHexChar(src[i*2+1]) + b, ok := fromHexChar(src[j]) if !ok { - return i, InvalidByteError(src[i*2+1]) + return i, InvalidByteError(src[j]) } dst[i] = (a << 4) | b + i++ } if len(src)%2 == 1 { // Check for invalid char before reporting bad length, // since the invalid char (if present) is an earlier problem. - if _, ok := fromHexChar(src[i*2]); !ok { - return i, InvalidByteError(src[i*2]) + if _, ok := fromHexChar(src[j-1]); !ok { + return i, InvalidByteError(src[j-1]) } return i, ErrLength } diff --git a/src/encoding/hex/hex_test.go b/src/encoding/hex/hex_test.go index e9f4b3a53a..dbb00b94ca 100644 --- a/src/encoding/hex/hex_test.go +++ b/src/encoding/hex/hex_test.go @@ -242,6 +242,7 @@ func BenchmarkEncode(b *testing.B) { sink = make([]byte, 2*size) b.Run(fmt.Sprintf("%v", size), func(b *testing.B) { + b.SetBytes(int64(size)) for i := 0; i < b.N; i++ { Encode(sink, src) } @@ -249,12 +250,27 @@ func BenchmarkEncode(b *testing.B) { } } +func BenchmarkDecode(b *testing.B) { + for _, size := range []int{256, 1024, 4096, 16384} { + src := bytes.Repeat([]byte{'2', 'b', '7', '4', '4', 'f', 'a', 'a'}, size/8) + sink = make([]byte, size/2) + + b.Run(fmt.Sprintf("%v", size), func(b *testing.B) { + b.SetBytes(int64(size)) + for i := 0; i < b.N; i++ { + Decode(sink, src) + } + }) + } +} + func BenchmarkDump(b *testing.B) { for _, size := range []int{256, 1024, 4096, 16384} { src := bytes.Repeat([]byte{2, 3, 5, 7, 9, 11, 13, 17}, size/8) sink = make([]byte, 2*size) b.Run(fmt.Sprintf("%v", size), func(b *testing.B) { + b.SetBytes(int64(size)) for i := 0; i < b.N; i++ { Dump(src) } diff --git a/src/encoding/json/bench_test.go b/src/encoding/json/bench_test.go index 72cb349062..f2592e3dbd 100644 --- a/src/encoding/json/bench_test.go +++ b/src/encoding/json/bench_test.go @@ -82,6 +82,7 @@ func codeInit() { } func BenchmarkCodeEncoder(b *testing.B) { + b.ReportAllocs() if codeJSON == nil { b.StopTimer() codeInit() @@ -99,6 +100,7 @@ func BenchmarkCodeEncoder(b *testing.B) { } func BenchmarkCodeMarshal(b *testing.B) { + b.ReportAllocs() if codeJSON == nil { b.StopTimer() codeInit() @@ -133,6 +135,7 @@ func benchMarshalBytes(n int) func(*testing.B) { } func BenchmarkMarshalBytes(b *testing.B) { + b.ReportAllocs() // 32 fits within encodeState.scratch. b.Run("32", benchMarshalBytes(32)) // 256 doesn't fit in encodeState.scratch, but is small enough to @@ -143,6 +146,7 @@ func BenchmarkMarshalBytes(b *testing.B) { } func BenchmarkCodeDecoder(b *testing.B) { + b.ReportAllocs() if codeJSON == nil { b.StopTimer() codeInit() @@ -167,6 +171,7 @@ func BenchmarkCodeDecoder(b *testing.B) { } func BenchmarkUnicodeDecoder(b *testing.B) { + b.ReportAllocs() j := []byte(`"\uD83D\uDE01"`) b.SetBytes(int64(len(j))) r := bytes.NewReader(j) @@ -182,6 +187,7 @@ func BenchmarkUnicodeDecoder(b *testing.B) { } func BenchmarkDecoderStream(b *testing.B) { + b.ReportAllocs() b.StopTimer() var buf bytes.Buffer dec := NewDecoder(&buf) @@ -204,6 +210,7 @@ func BenchmarkDecoderStream(b *testing.B) { } func BenchmarkCodeUnmarshal(b *testing.B) { + b.ReportAllocs() if codeJSON == nil { b.StopTimer() codeInit() @@ -221,6 +228,7 @@ func BenchmarkCodeUnmarshal(b *testing.B) { } func BenchmarkCodeUnmarshalReuse(b *testing.B) { + b.ReportAllocs() if codeJSON == nil { b.StopTimer() codeInit() @@ -234,10 +242,11 @@ func BenchmarkCodeUnmarshalReuse(b *testing.B) { } } }) - // TODO(bcmills): Is there a missing b.SetBytes here? + b.SetBytes(int64(len(codeJSON))) } func BenchmarkUnmarshalString(b *testing.B) { + b.ReportAllocs() data := []byte(`"hello, world"`) b.RunParallel(func(pb *testing.PB) { var s string @@ -250,6 +259,7 @@ func BenchmarkUnmarshalString(b *testing.B) { } func BenchmarkUnmarshalFloat64(b *testing.B) { + b.ReportAllocs() data := []byte(`3.14`) b.RunParallel(func(pb *testing.PB) { var f float64 @@ -262,6 +272,7 @@ func BenchmarkUnmarshalFloat64(b *testing.B) { } func BenchmarkUnmarshalInt64(b *testing.B) { + b.ReportAllocs() data := []byte(`3`) b.RunParallel(func(pb *testing.PB) { var x int64 @@ -300,6 +311,7 @@ func BenchmarkUnmapped(b *testing.B) { } func BenchmarkTypeFieldsCache(b *testing.B) { + b.ReportAllocs() var maxTypes int = 1e6 if testenv.Builder() != "" { maxTypes = 1e3 // restrict cache sizes on builders diff --git a/src/encoding/json/decode.go b/src/encoding/json/decode.go index 731553dca6..bdd94e34ce 100644 --- a/src/encoding/json/decode.go +++ b/src/encoding/json/decode.go @@ -8,12 +8,12 @@ package json import ( - "bytes" "encoding" "encoding/base64" "fmt" "reflect" "strconv" + "strings" "unicode" "unicode/utf16" "unicode/utf8" @@ -125,7 +125,7 @@ type UnmarshalTypeError struct { Type reflect.Type // type of Go value it could not be assigned to Offset int64 // error occurred after reading Offset bytes Struct string // name of the struct type containing the field - Field string // name of the field holding the Go value + Field string // the full path from root node to the field } func (e *UnmarshalTypeError) Error() string { @@ -266,12 +266,15 @@ type decodeState struct { opcode int // last read result scan scanner errorContext struct { // provides context for type errors - Struct reflect.Type - Field string + Struct reflect.Type + FieldStack []string } savedError error useNumber bool disallowUnknownFields bool + // safeUnquote is the number of current string literal bytes that don't + // need to be unquoted. When negative, no bytes need unquoting. + safeUnquote int } // readIndex returns the position of the last byte read. @@ -289,7 +292,9 @@ func (d *decodeState) init(data []byte) *decodeState { d.off = 0 d.savedError = nil d.errorContext.Struct = nil - d.errorContext.Field = "" + + // Reuse the allocated space for the FieldStack slice. + d.errorContext.FieldStack = d.errorContext.FieldStack[:0] return d } @@ -303,11 +308,11 @@ func (d *decodeState) saveError(err error) { // addErrorContext returns a new error enhanced with information from d.errorContext func (d *decodeState) addErrorContext(err error) error { - if d.errorContext.Struct != nil || d.errorContext.Field != "" { + if d.errorContext.Struct != nil || len(d.errorContext.FieldStack) > 0 { switch err := err.(type) { case *UnmarshalTypeError: err.Struct = d.errorContext.Struct.Name() - err.Field = d.errorContext.Field + err.Field = strings.Join(d.errorContext.FieldStack, ".") return err } } @@ -358,6 +363,66 @@ func (d *decodeState) scanWhile(op int) { d.opcode = d.scan.eof() } +// rescanLiteral is similar to scanWhile(scanContinue), but it specialises the +// common case where we're decoding a literal. The decoder scans the input +// twice, once for syntax errors and to check the length of the value, and the +// second to perform the decoding. +// +// Only in the second step do we use decodeState to tokenize literals, so we +// know there aren't any syntax errors. We can take advantage of that knowledge, +// and scan a literal's bytes much more quickly. +func (d *decodeState) rescanLiteral() { + data, i := d.data, d.off +Switch: + switch data[i-1] { + case '"': // string + // safeUnquote is initialized at -1, which means that all bytes + // checked so far can be unquoted at a later time with no work + // at all. When reaching the closing '"', if safeUnquote is + // still -1, all bytes can be unquoted with no work. Otherwise, + // only those bytes up until the first '\\' or non-ascii rune + // can be safely unquoted. + safeUnquote := -1 + for ; i < len(data); i++ { + if c := data[i]; c == '\\' { + if safeUnquote < 0 { // first unsafe byte + safeUnquote = int(i - d.off) + } + i++ // escaped char + } else if c == '"' { + d.safeUnquote = safeUnquote + i++ // tokenize the closing quote too + break Switch + } else if c >= utf8.RuneSelf { + if safeUnquote < 0 { // first unsafe byte + safeUnquote = int(i - d.off) + } + } + } + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-': // number + for ; i < len(data); i++ { + switch data[i] { + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + '.', 'e', 'E', '+', '-': + default: + break Switch + } + } + case 't': // true + i += len("rue") + case 'f': // false + i += len("alse") + case 'n': // null + i += len("ull") + } + if i < len(data) { + d.opcode = stateEndValue(&d.scan, data[i]) + } else { + d.opcode = scanEnd + } + d.off = i + 1 +} + // value consumes a JSON value from d.data[d.off-1:], decoding into v, and // reads the following byte ahead. If v is invalid, the value is discarded. // The first byte of the value has been read already. @@ -389,7 +454,7 @@ func (d *decodeState) value(v reflect.Value) error { case scanBeginLiteral: // All bytes inside literal return scanContinue op code. start := d.readIndex() - d.scanWhile(scanContinue) + d.rescanLiteral() if v.IsValid() { if err := d.literalStore(d.data[start:d.readIndex()], v, false); err != nil { @@ -470,6 +535,14 @@ func indirect(v reflect.Value, decodingNull bool) (Unmarshaler, encoding.TextUnm if v.Elem().Kind() != reflect.Ptr && decodingNull && v.CanSet() { break } + + // Prevent infinite loop if v is an interface pointing to its own address: + // var v interface{} + // v = &v + if v.Elem().Kind() == reflect.Interface && v.Elem().Elem() == v { + v = v.Elem() + break + } if v.IsNil() { v.Set(reflect.New(v.Type().Elem())) } @@ -625,7 +698,7 @@ func (d *decodeState) object(v reflect.Value) error { return nil } - var fields []field + var fields structFields // Check type of target: // struct or @@ -659,7 +732,7 @@ func (d *decodeState) object(v reflect.Value) error { } var mapElem reflect.Value - originalErrorContext := d.errorContext + origErrorContext := d.errorContext for { // Read opening " of string key or closing }. @@ -674,9 +747,9 @@ func (d *decodeState) object(v reflect.Value) error { // Read key. start := d.readIndex() - d.scanWhile(scanContinue) + d.rescanLiteral() item := d.data[start:d.readIndex()] - key, ok := unquoteBytes(item) + key, ok := d.unquoteBytes(item) if !ok { panic(phasePanicMsg) } @@ -695,14 +768,18 @@ func (d *decodeState) object(v reflect.Value) error { subv = mapElem } else { var f *field - for i := range fields { - ff := &fields[i] - if bytes.Equal(ff.nameBytes, key) { - f = ff - break - } - if f == nil && ff.equalFold(ff.nameBytes, key) { - f = ff + if i, ok := fields.nameIndex[string(key)]; ok { + // Found an exact name match. + f = &fields.list[i] + } else { + // Fall back to the expensive case-insensitive + // linear search. + for i := range fields.list { + ff := &fields.list[i] + if ff.equalFold(ff.nameBytes, key) { + f = ff + break + } } } if f != nil { @@ -730,7 +807,7 @@ func (d *decodeState) object(v reflect.Value) error { } subv = subv.Field(i) } - d.errorContext.Field = f.name + d.errorContext.FieldStack = append(d.errorContext.FieldStack, f.name) d.errorContext.Struct = t } else if d.disallowUnknownFields { d.saveError(fmt.Errorf("json: unknown field %q", key)) @@ -810,14 +887,17 @@ func (d *decodeState) object(v reflect.Value) error { if d.opcode == scanSkipSpace { d.scanWhile(scanSkipSpace) } + // Reset errorContext to its original state. + // Keep the same underlying array for FieldStack, to reuse the + // space and avoid unnecessary allocs. + d.errorContext.FieldStack = d.errorContext.FieldStack[:len(origErrorContext.FieldStack)] + d.errorContext.Struct = origErrorContext.Struct if d.opcode == scanEndObject { break } if d.opcode != scanObjectValue { panic(phasePanicMsg) } - - d.errorContext = originalErrorContext } return nil } @@ -870,7 +950,7 @@ func (d *decodeState) literalStore(item []byte, v reflect.Value, fromQuoted bool d.saveError(&UnmarshalTypeError{Value: val, Type: v.Type(), Offset: int64(d.readIndex())}) return nil } - s, ok := unquoteBytes(item) + s, ok := d.unquoteBytes(item) if !ok { if fromQuoted { return fmt.Errorf("json: invalid use of ,string struct tag, trying to unmarshal %q into %v", item, v.Type()) @@ -921,7 +1001,7 @@ func (d *decodeState) literalStore(item []byte, v reflect.Value, fromQuoted bool } case '"': // string - s, ok := unquoteBytes(item) + s, ok := d.unquoteBytes(item) if !ok { if fromQuoted { return fmt.Errorf("json: invalid use of ,string struct tag, trying to unmarshal %q into %v", item, v.Type()) @@ -1077,9 +1157,9 @@ func (d *decodeState) objectInterface() map[string]interface{} { // Read string key. start := d.readIndex() - d.scanWhile(scanContinue) + d.rescanLiteral() item := d.data[start:d.readIndex()] - key, ok := unquote(item) + key, ok := d.unquote(item) if !ok { panic(phasePanicMsg) } @@ -1116,7 +1196,7 @@ func (d *decodeState) objectInterface() map[string]interface{} { func (d *decodeState) literalInterface() interface{} { // All bytes inside literal return scanContinue op code. start := d.readIndex() - d.scanWhile(scanContinue) + d.rescanLiteral() item := d.data[start:d.readIndex()] @@ -1128,7 +1208,7 @@ func (d *decodeState) literalInterface() interface{} { return c == 't' case '"': // string - s, ok := unquote(item) + s, ok := d.unquote(item) if !ok { panic(phasePanicMsg) } @@ -1171,38 +1251,21 @@ func getu4(s []byte) rune { // unquote converts a quoted JSON string literal s into an actual string t. // The rules are different than for Go, so cannot use strconv.Unquote. -func unquote(s []byte) (t string, ok bool) { - s, ok = unquoteBytes(s) +func (d *decodeState) unquote(s []byte) (t string, ok bool) { + s, ok = d.unquoteBytes(s) t = string(s) return } -func unquoteBytes(s []byte) (t []byte, ok bool) { - if len(s) < 2 || s[0] != '"' || s[len(s)-1] != '"' { - return - } +func (d *decodeState) unquoteBytes(s []byte) (t []byte, ok bool) { + r := d.safeUnquote + // The bytes have been scanned, so we know that the first and last bytes + // are double quotes. s = s[1 : len(s)-1] - // Check for unusual characters. If there are none, - // then no unquoting is needed, so return a slice of the - // original bytes. - r := 0 - for r < len(s) { - c := s[r] - if c == '\\' || c == '"' || c < ' ' { - break - } - if c < utf8.RuneSelf { - r++ - continue - } - rr, size := utf8.DecodeRune(s[r:]) - if rr == utf8.RuneError && size == 1 { - break - } - r += size - } - if r == len(s) { + // If there are no unusual characters, no unquoting is needed, so return + // a slice of the original bytes. + if r == -1 { return s, true } diff --git a/src/encoding/json/decode_test.go b/src/encoding/json/decode_test.go index 54432600a5..719a9fa290 100644 --- a/src/encoding/json/decode_test.go +++ b/src/encoding/json/decode_test.go @@ -45,6 +45,15 @@ type W struct { S SS } +type P struct { + PP PP +} + +type PP struct { + T T + Ts []T +} + type SS string func (*SS) UnmarshalJSON(data []byte) error { @@ -816,7 +825,7 @@ var unmarshalTests = []unmarshalTest{ err: &UnmarshalTypeError{ Value: "string", Struct: "V", - Field: "F2", + Field: "V.F2", Type: reflect.TypeOf(int32(0)), Offset: 20, }, @@ -827,7 +836,7 @@ var unmarshalTests = []unmarshalTest{ err: &UnmarshalTypeError{ Value: "string", Struct: "V", - Field: "F2", + Field: "V.F2", Type: reflect.TypeOf(int32(0)), Offset: 30, }, @@ -923,6 +932,29 @@ var unmarshalTests = []unmarshalTest{ ptr: new(MustNotUnmarshalText), err: &UnmarshalTypeError{Value: "object", Type: reflect.TypeOf(&MustNotUnmarshalText{}), Offset: 1}, }, + // #22369 + { + in: `{"PP": {"T": {"Y": "bad-type"}}}`, + ptr: new(P), + err: &UnmarshalTypeError{ + Value: "string", + Struct: "T", + Field: "PP.T.Y", + Type: reflect.TypeOf(int(0)), + Offset: 29, + }, + }, + { + in: `{"Ts": [{"Y": 1}, {"Y": 2}, {"Y": "bad-type"}]}`, + ptr: new(PP), + err: &UnmarshalTypeError{ + Value: "string", + Struct: "T", + Field: "Ts.Y", + Type: reflect.TypeOf(int(0)), + Offset: 29, + }, + }, } func TestMarshal(t *testing.T) { @@ -1021,12 +1053,22 @@ func TestMarshalEmbeds(t *testing.T) { } } +func equalError(a, b error) bool { + if a == nil { + return b == nil + } + if b == nil { + return a == nil + } + return a.Error() == b.Error() +} + func TestUnmarshal(t *testing.T) { for i, tt := range unmarshalTests { var scan scanner in := []byte(tt.in) if err := checkValid(in, &scan); err != nil { - if !reflect.DeepEqual(err, tt.err) { + if !equalError(err, tt.err) { t.Errorf("#%d: checkValid: %#v", i, err) continue } @@ -1044,7 +1086,7 @@ func TestUnmarshal(t *testing.T) { if tt.disallowUnknownFields { dec.DisallowUnknownFields() } - if err := dec.Decode(v.Interface()); !reflect.DeepEqual(err, tt.err) { + if err := dec.Decode(v.Interface()); !equalError(err, tt.err) { t.Errorf("#%d: %v, want %v", i, err, tt.err) continue } else if err != nil { @@ -2270,7 +2312,7 @@ func TestUnmarshalEmbeddedUnexported(t *testing.T) { for i, tt := range tests { err := Unmarshal([]byte(tt.in), tt.ptr) - if !reflect.DeepEqual(err, tt.err) { + if !equalError(err, tt.err) { t.Errorf("#%d: %v, want %v", i, err, tt.err) } if !reflect.DeepEqual(tt.ptr, tt.out) { @@ -2292,3 +2334,15 @@ func TestUnmarshalPanic(t *testing.T) { Unmarshal([]byte("{}"), &unmarshalPanic{}) t.Fatalf("Unmarshal should have panicked") } + +// The decoder used to hang if decoding into an interface pointing to its own address. +// See golang.org/issues/31740. +func TestUnmarshalRecursivePointer(t *testing.T) { + var v interface{} + v = &v + data := []byte(`{"a": "b"}`) + + if err := Unmarshal(data, v); err != nil { + t.Fatal(err) + } +} diff --git a/src/encoding/json/encode.go b/src/encoding/json/encode.go index dea63f1850..464ee3ece4 100644 --- a/src/encoding/json/encode.go +++ b/src/encoding/json/encode.go @@ -45,11 +45,12 @@ import ( // // String values encode as JSON strings coerced to valid UTF-8, // replacing invalid bytes with the Unicode replacement rune. -// The angle brackets "<" and ">" are escaped to "\u003c" and "\u003e" -// to keep some browsers from misinterpreting JSON output as HTML. -// Ampersand "&" is also escaped to "\u0026" for the same reason. -// This escaping can be disabled using an Encoder that had SetEscapeHTML(false) -// called on it. +// So that the JSON will be safe to embed inside HTML