/
githubmirror
/
go
Обзор
Документация
Войти
/
githubmirror
/
go
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
test/simd/bug2.go
69 строк
1 KB
Junyang Shao
[dev.simd] simd, cmd/compile: rename loads and stores
08 май 2026, 19:33
08 май 2026, 19:33
b70242b
Код
Авторство
О чём код?
// compile //go:build amd64 && goexperiment.simd // Copyright 2025 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Test case for rematerialization ignoring the register constraint // during regalloc's shuffle phase. package p import ( "simd/archsimd" ) func PackComplex(b bool) { for { if b { var indices [4]uint32 archsimd.Uint32x4{}.ShiftAllRight(20).StoreArray(&indices) _ = indices[indices[0]] } } } func PackComplex2(x0 uint16, src [][4]float32, b, b2 bool) { var out [][4]byte if b2 { for y := range x0 { row := out[:x0] for x := range row { px := &src[y] if b { var indices [4]uint32 fu := archsimd.LoadFloat32x4Array(px).AsUint32x4() fu.ShiftAllRight(0).StoreArray(&indices) entry := archsimd.LoadUint32x4Array(&[4]uint32{ toSrgbTable[indices[0]], }) var res [4]uint32 entry.ShiftAllRight(19).Store(nil) row[x] = [4]uint8{ uint8(res[0]), uint8(res[1]), uint8(res[2]), } } else { row[x] = [4]uint8{ float32ToSrgb8(0), float32ToSrgb8(1), float32ToSrgb8(2), } } } out = out[len(out):] } } } var toSrgbTable = [4]uint32{} func float32ToSrgb8(f float32) uint8 { f = min(0, f) fu := uint32(f) entry := toSrgbTable[fu] return uint8(entry * fu) }