Skip to content

Commit 73aa7b4

Browse files
committed
Add 'unstructured' template that tests random instruction bit patterns
This is intended to be used in single-implementation mode to check that unknown bit patterns at least do not wedge the processor.
1 parent 9932abb commit 73aa7b4

File tree

3 files changed

+47
-0
lines changed

3 files changed

+47
-0
lines changed

QCVEngine.cabal

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ executable QCVEngine
5252
QuickCheckVEngine.Templates.GenCHERI,
5353
QuickCheckVEngine.Templates.GenAll,
5454
QuickCheckVEngine.Templates.GenTransExec,
55+
QuickCheckVEngine.Templates.GenUnstructured,
5556
QuickCheckVEngine.Templates.RandomTest
5657
other-extensions: FlexibleInstances, MultiParamTypeClasses,
5758
FunctionalDependencies, OverloadedStrings,

src/QuickCheckVEngine/Main.hs

+1
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ allTests = [
271271
, ("caprvcrandom", "Xcheri RVC Extension Random Template", andPs [has_cheri, has_c], randomCHERIRVCTest)
272272
, ("all", "All Verification", const True, genAll)
273273
, ("random", "Random Template", const True, randomTest)
274+
, ("unstructured", "Unstructured random instruction bit Template", const True, T.repeatTillEnd gen_unstructured)
274275
]
275276
where andPs = foldl (\k p x -> p x && k x) (const True)
276277

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
--
2+
-- SPDX-License-Identifier: BSD-2-Clause
3+
--
4+
-- Copyright (c) 2025 Peter Rugg
5+
-- All rights reserved.
6+
--
7+
-- This software was developed by SRI International and the University of
8+
-- Cambridge Computer Laboratory (Department of Computer Science and
9+
-- Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
10+
-- DARPA SSITH research programme.
11+
--
12+
-- Redistribution and use in source and binary forms, with or without
13+
-- modification, are permitted provided that the following conditions
14+
-- are met:
15+
-- 1. Redistributions of source code must retain the above copyright
16+
-- notice, this list of conditions and the following disclaimer.
17+
-- 2. Redistributions in binary form must reproduce the above copyright
18+
-- notice, this list of conditions and the following disclaimer in the
19+
-- documentation and/or other materials provided with the distribution.
20+
--
21+
-- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
22+
-- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23+
-- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24+
-- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
25+
-- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26+
-- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27+
-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28+
-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29+
-- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30+
-- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31+
-- SUCH DAMAGE.
32+
--
33+
34+
module QuickCheckVEngine.Templates.GenUnstructured (
35+
gen_unstructured
36+
) where
37+
38+
import QuickCheckVEngine.Template
39+
import QuickCheckVEngine.Templates.Utils
40+
import InstrCodec
41+
42+
gen_unstructured :: Template
43+
gen_unstructured = random $ do
44+
instBits <- bits 32
45+
return $ inst $ MkInstruction instBits

0 commit comments

Comments
 (0)