func Mul(x, y uint) (hi, lo uint) {
// amd64:"MULQ"
// arm64:"UMULH","MUL"
+ // loong64:"MULV","MULHVU"
// ppc64x:"MULHDU","MULLD"
// s390x:"MLGR"
// mips64: "MULVU"
func Mul64(x, y uint64) (hi, lo uint64) {
// amd64:"MULQ"
// arm64:"UMULH","MUL"
+ // loong64:"MULV","MULHVU"
// ppc64x:"MULHDU","MULLD"
// s390x:"MLGR"
// mips64: "MULVU"
func Mul64HiOnly(x, y uint64) uint64 {
// arm64:"UMULH",-"MUL"
+ // loong64:"MULHVU",-"MULV"
// riscv64:"MULHU",-"MUL\t"
hi, _ := bits.Mul64(x, y)
return hi
func Mul64LoOnly(x, y uint64) uint64 {
// arm64:"MUL",-"UMULH"
+ // loong64:"MULV",-"MULHVU"
// riscv64:"MUL\t",-"MULHU"
_, lo := bits.Mul64(x, y)
return lo
func Mul64Const() (uint64, uint64) {
// 7133701809754865664 == 99<<56
// arm64:"MOVD\t[$]7133701809754865664, R1", "MOVD\t[$]88, R0"
+ // loong64:"MOVV\t[$]88, R4","MOVV\t[$]7133701809754865664, R5",-"MUL"
return bits.Mul64(99+88<<8, 1<<56)
}