| // Copyright 2026 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:build riscv64 | |
| package cpu_test | |
| import ( | |
| . "internal/cpu" | |
| "internal/godebug" | |
| "testing" | |
| ) | |
| func TestRISCV64VectorLength(t *testing.T) { | |
| if RISCV64.HasV && RISCV64.VLENB == 0 { | |
| t.Fatal("VLENB should be non-zero when HasV is true") | |
| } | |
| } | |
| func TestDisableZbb(t *testing.T) { | |
| if GetGORISCV64level() > 20 { | |
| t.Skip("skipping test: can't run on GORISCV64>rva20u64") | |
| } | |
| runDebugOptionsTest(t, "TestZbbDebugOption", "cpu.zbb=off") | |
| } | |
| func TestZbbDebugOption(t *testing.T) { | |
| MustHaveDebugOptionsSupport(t) | |
| if godebug.New("#cpu.zbb").Value() != "off" { | |
| t.Skipf("skipping test: GODEBUG=cpu.zbb=off not set") | |
| } | |
| if RISCV64.HasZbb { | |
| t.Errorf("RISCV64.HasZbb is true, want false") | |
| } | |
| } | |
| func TestDisableV(t *testing.T) { | |
| if GetGORISCV64level() > 22 { | |
| t.Skip("skipping test: can't run on GORISCV64>rva22u64") | |
| } | |
| runDebugOptionsTest(t, "TestVDebugOption", "cpu.v=off") | |
| } | |
| func TestVDebugOption(t *testing.T) { | |
| MustHaveDebugOptionsSupport(t) | |
| if godebug.New("#cpu.v").Value() != "off" { | |
| t.Skipf("skipping test: GODEBUG=cpu.v=off not set") | |
| } | |
| if RISCV64.HasV { | |
| t.Errorf("RISCV64.HasV is true, want false") | |
| } | |
| } | |
| func TestDisableZvbb(t *testing.T) { | |
| if GetGORISCV64level() > 22 { | |
| t.Skip("skipping test: can't run on GORISCV64>rva22u64") | |
| } | |
| runDebugOptionsTest(t, "TestZvbbDebugOption", "cpu.zvbb=off") | |
| } | |
| func TestZvbbDebugOption(t *testing.T) { | |
| MustHaveDebugOptionsSupport(t) | |
| if godebug.New("#cpu.zvbb").Value() != "off" { | |
| t.Skipf("skipping test: GODEBUG=cpu.zvbb=off not set") | |
| } | |
| if RISCV64.HasZvbb { | |
| t.Errorf("RISCV64.HasZvbb is true, want false") | |
| } | |
| } | |
| func TestRISCV64ZvbbHasV(t *testing.T) { | |
| if RISCV64.HasZvbb && !RISCV64.HasV { | |
| t.Fatalf("HasV is false when HasZvbb is true, want true") | |
| } | |
| } | |
| func TestRISCV64ZvbcHasV(t *testing.T) { | |
| if RISCV64.HasZvbc && !RISCV64.HasV { | |
| t.Fatalf("HasV is false when HasZvbc is true, want true") | |
| } | |
| } | |
| func TestRISCV64ZvkgHasV(t *testing.T) { | |
| if RISCV64.HasZvkg && !RISCV64.HasV { | |
| t.Fatalf("HasV is false when HasZvkg is true, want true") | |
| } | |
| } | |
| func TestRISCV64ZvknedHasV(t *testing.T) { | |
| if RISCV64.HasZvkned && !RISCV64.HasV { | |
| t.Fatalf("HasV is false when HasZvkned is true, want true") | |
| } | |
| } | |
| func TestRISCV64ZvknhaHasV(t *testing.T) { | |
| if RISCV64.HasZvknha && !RISCV64.HasV { | |
| t.Fatalf("HasV is false when HasZvknha is true, want true") | |
| } | |
| } | |
| func TestRISCV64ZvknhbHasV(t *testing.T) { | |
| if RISCV64.HasZvknhb && !RISCV64.HasV { | |
| t.Fatalf("HasV is false when HasZvknhb is true, want true") | |
| } | |
| } | |
| func TestRISCV64ZvksedHasV(t *testing.T) { | |
| if RISCV64.HasZvksed && !RISCV64.HasV { | |
| t.Fatalf("HasV is false when HasZvksed is true, want true") | |
| } | |
| } | |
| func TestRISCV64ZvkshHasV(t *testing.T) { | |
| if RISCV64.HasZvksh && !RISCV64.HasV { | |
| t.Fatalf("HasV is false when HasZvksh is true, want true") | |
| } | |
| } | |
| func TestRISCV64ZvktHasV(t *testing.T) { | |
| if RISCV64.HasZvkt && !RISCV64.HasV { | |
| t.Fatalf("HasV is false when HasZvkt is true, want true") | |
| } | |
| } |