mirror of
https://github.com/golang/go
synced 2024-11-24 17:40:14 -07:00
7fbabe8d57
The SHRX/SHLX instruction can take any general register as the shift count operand, and can read source from memory. This CL introduces some operators to combine load and shift to one instruction. For #47120 Change-Id: I13b48f53c7d30067a72eb2c8382242045dead36a Reviewed-on: https://go-review.googlesource.com/c/go/+/385174 Reviewed-by: Keith Randall <khr@golang.org> Trust: Cherry Mui <cherryyz@google.com>
64 lines
1.3 KiB
Go
64 lines
1.3 KiB
Go
// asmcheck
|
|
|
|
// Copyright 2021 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package codegen
|
|
|
|
func andn64(x, y int64) int64 {
|
|
// amd64/v3:"ANDNQ"
|
|
return x &^ y
|
|
}
|
|
|
|
func andn32(x, y int32) int32 {
|
|
// amd64/v3:"ANDNL"
|
|
return x &^ y
|
|
}
|
|
|
|
func blsi64(x int64) int64 {
|
|
// amd64/v3:"BLSIQ"
|
|
return x & -x
|
|
}
|
|
|
|
func blsi32(x int32) int32 {
|
|
// amd64/v3:"BLSIL"
|
|
return x & -x
|
|
}
|
|
|
|
func blsmsk64(x int64) int64 {
|
|
// amd64/v3:"BLSMSKQ"
|
|
return x ^ (x - 1)
|
|
}
|
|
|
|
func blsmsk32(x int32) int32 {
|
|
// amd64/v3:"BLSMSKL"
|
|
return x ^ (x - 1)
|
|
}
|
|
|
|
func blsr64(x int64) int64 {
|
|
// amd64/v3:"BLSRQ"
|
|
return x & (x - 1)
|
|
}
|
|
|
|
func blsr32(x int32) int32 {
|
|
// amd64/v3:"BLSRL"
|
|
return x & (x - 1)
|
|
}
|
|
|
|
func shlrx64(x []uint64, i int, s uint64) uint64 {
|
|
// amd64/v3: `SHRXQ\t[A-Z]+[0-9]*, \([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), [A-Z]+[0-9]*`
|
|
s = x[i] >> i
|
|
// amd64/v3: `SHLXQ\t[A-Z]+[0-9]*, 8\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*8\), [A-Z]+[0-9]*`
|
|
s = x[i+1] << s
|
|
return s
|
|
}
|
|
|
|
func shlrx32(x []uint32, i int, s uint32) uint32 {
|
|
// amd64/v3: `SHRXL\t[A-Z]+[0-9]*, \([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), [A-Z]+[0-9]*`
|
|
s = x[i] >> i
|
|
// amd64/v3: `SHLXL\t[A-Z]+[0-9]*, 4\([A-Z]+[0-9]*\)\([A-Z]+[0-9]*\*4\), [A-Z]+[0-9]*`
|
|
s = x[i+1] << s
|
|
return s
|
|
}
|