// Licensed to the Apache Software Foundation (ASF) under one// or more contributor license agreements. See the NOTICE file// distributed with this work for additional information// regarding copyright ownership. The ASF licenses this file// to you 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 utilsimport ()// this file contains pure go implementations of the min_max functions that are// SIMD accelerated so that we can fallback to these if the cpu doesn't support// AVX2 or SSE4 instructions.func int8MinMax( []int8) (, int8) { = math.MaxInt8 = math.MinInt8for , := range {if > { = }if < { = } }return}func uint8MinMax( []uint8) (, uint8) { = math.MaxUint8 = 0for , := range {if > { = }if < { = } }return}func int16MinMax( []int16) (, int16) { = math.MaxInt16 = math.MinInt16for , := range {if > { = }if < { = } }return}func uint16MinMax( []uint16) (, uint16) { = math.MaxUint16 = 0for , := range {if > { = }if < { = } }return}func int32MinMax( []int32) (, int32) { = math.MaxInt32 = math.MinInt32for , := range {if > { = }if < { = } }return}func uint32MinMax( []uint32) (, uint32) { = math.MaxUint32 = 0for , := range {if > { = }if < { = } }return}func int64MinMax( []int64) (, int64) { = math.MaxInt64 = math.MinInt64for , := range {if > { = }if < { = } }return}func uint64MinMax( []uint64) (, uint64) { = math.MaxUint64 = 0for , := range {if > { = }if < { = } }return}var minmaxFuncs = struct { i8 func([]int8) (int8, int8) ui8 func([]uint8) (uint8, uint8) i16 func([]int16) (int16, int16) ui16 func([]uint16) (uint16, uint16) i32 func([]int32) (int32, int32) ui32 func([]uint32) (uint32, uint32) i64 func([]int64) (int64, int64) ui64 func([]uint64) (uint64, uint64)}{}// GetMinMaxInt8 returns the min and max for a int8 slice, using AVX2 or// SSE4 cpu extensions if available, falling back to a pure go implementation// if they are unavailable or built with the noasm tag.func ( []int8) (, int8) {returnminmaxFuncs.i8()}// GetMinMaxUint8 returns the min and max for a uint8 slice, using AVX2 or// SSE4 cpu extensions if available, falling back to a pure go implementation// if they are unavailable or built with the noasm tag.func ( []uint8) (, uint8) {returnminmaxFuncs.ui8()}// GetMinMaxInt16 returns the min and max for a int16 slice, using AVX2 or// SSE4 cpu extensions if available, falling back to a pure go implementation// if they are unavailable or built with the noasm tag.func ( []int16) (, int16) {returnminmaxFuncs.i16()}// GetMinMaxUint16 returns the min and max for a uint16 slice, using AVX2 or// SSE4 cpu extensions if available, falling back to a pure go implementation// if they are unavailable or built with the noasm tag.func ( []uint16) (, uint16) {returnminmaxFuncs.ui16()}// GetMinMaxInt32 returns the min and max for a int32 slice, using AVX2 or// SSE4 cpu extensions if available, falling back to a pure go implementation// if they are unavailable or built with the noasm tag.func ( []int32) (, int32) {returnminmaxFuncs.i32()}// GetMinMaxUint32 returns the min and max for a uint32 slice, using AVX2 or// SSE4 cpu extensions if available, falling back to a pure go implementation// if they are unavailable or built with the noasm tag.func ( []uint32) (, uint32) {returnminmaxFuncs.ui32()}// GetMinMaxInt64 returns the min and max for a int64 slice, using AVX2 or// SSE4 cpu extensions if available, falling back to a pure go implementation// if they are unavailable or built with the noasm tag.func ( []int64) (, int64) {returnminmaxFuncs.i64()}// GetMinMaxUint64 returns the min and max for a uint64 slice, using AVX2 or// SSE4 cpu extensions if available, falling back to a pure go implementation// if they are unavailable or built with the noasm tag.func ( []uint64) (, uint64) {returnminmaxFuncs.ui64()}
The pages are generated with Goldsv0.8.2. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds.