Skip to content

Commit 3b5d8d5

Browse files
author
dev-aditya-hub
committed
refactor(testgen): centralize dyn frm random selection in generate_random_params
Move csr_frm_val random assignment from each formatter into generate_random_params, allow RNE (mode 0) in random selection, and simplify cp_csr_frm comment.
1 parent f11653d commit 3b5d8d5

8 files changed

Lines changed: 16 additions & 25 deletions

File tree

generators/testgen/src/testgen/coverpoints/cp_csr_frm.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,7 @@ def make_frm(instr_name: str, instr_type: str, coverpoint: str, test_data: TestD
2121
if coverpoint != "cp_csr_frm":
2222
raise ValueError(f"Unknown cp_csr_frm coverpoint variant: {coverpoint} for {instr_name}")
2323

24-
# Test each valid fcsr.frm value (0-4) via the dynamic rounding mode path (rm=111).
25-
# Passing frm="dyn" encodes rm=111 in the instruction; csr_frm_val tells the formatter
26-
# which exact value to write into fcsr.frm before the instruction executes, and the
27-
# formatter restores fcsr.frm=0 in check — no ordering dependency needed.
24+
# Test each valid fcsr.frm value (0-4) via dynamic rounding mode (rm=111 in the encoding).
2825
frm_modes = (("rne", 0), ("rtz", 1), ("rdn", 2), ("rup", 3), ("rmm", 4))
2926
test_chunks: list[TestChunk] = []
3027
for frm_name, frm_val in frm_modes:

generators/testgen/src/testgen/data/params.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ class InstructionParams:
6161

6262
# Flags
6363
frm: str | None = None # Floating-point rounding mode tests
64-
csr_frm_val: int | None = None # Explicit fcsr.frm value for dyn tests; None means random non-RNE
64+
csr_frm_val: int | None = None # fcsr.frm value to set when frm="dyn"; None means randomly chosen
6565
aqrl: str | None = None # Acquire/Release for atomic operations
6666
fflags: int | None = None # Floating-point result flags
6767

generators/testgen/src/testgen/formatters/params.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ def generate_random_params(
6969
"""
7070
params = InstructionParams(**fixed_params)
7171

72+
# Assign a random fcsr.frm value for dynamic rounding mode tests if not already set
73+
if params.frm == "dyn" and params.csr_frm_val is None:
74+
params.csr_frm_val = random_range(0, 4)
75+
7276
# Get the required parameters for this instruction type (extracted from formatters)
7377
instr_type_config = get_instr_type_config(instr_type)
7478
required_params = instr_type_config.required_params

generators/testgen/src/testgen/formatters/types/f2x_type.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
# SPDX-License-Identifier: Apache-2.0
66
##################################
77

8-
import random
9-
108
from testgen.asm.helpers import load_float_reg, write_sigupd
119
from testgen.data.params import InstructionParams
1210
from testgen.data.state import TestData
@@ -41,7 +39,7 @@ def format_f2x_type(
4139
write_sigupd(None, test_data, "fflags"),
4240
]
4341
if params.frm == "dyn":
44-
fcsr_frm = params.csr_frm_val if params.csr_frm_val is not None else random.choice([1, 2, 3, 4])
45-
setup.append(f"fsrmi {fcsr_frm}")
42+
assert params.csr_frm_val is not None
43+
setup.append(f"fsrmi {params.csr_frm_val}")
4644
check.append("fsrmi 0x0")
4745
return (setup, test, check)

generators/testgen/src/testgen/formatters/types/fi_type.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
# SPDX-License-Identifier: Apache-2.0
66
##################################
77

8-
import random
9-
108
from testgen.asm.helpers import load_float_reg, write_sigupd
119
from testgen.data.params import InstructionParams
1210
from testgen.data.state import TestData
@@ -32,7 +30,7 @@ def format_fi_type(
3230
]
3331
check = [write_sigupd(params.fd, test_data, "float")]
3432
if params.frm == "dyn":
35-
fcsr_frm = params.csr_frm_val if params.csr_frm_val is not None else random.choice([1, 2, 3, 4])
36-
setup.append(f"fsrmi {fcsr_frm}")
33+
assert params.csr_frm_val is not None
34+
setup.append(f"fsrmi {params.csr_frm_val}")
3735
check.append("fsrmi 0x0")
3836
return (setup, test, check)

generators/testgen/src/testgen/formatters/types/fr4_type.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
# SPDX-License-Identifier: Apache-2.0
66
##################################
77

8-
import random
9-
108
from testgen.asm.helpers import load_float_reg, write_sigupd
119
from testgen.data.params import InstructionParams
1210
from testgen.data.state import TestData
@@ -36,7 +34,7 @@ def format_fr4_type(
3634
]
3735
check = [write_sigupd(params.fd, test_data, "float")]
3836
if params.frm == "dyn":
39-
fcsr_frm = params.csr_frm_val if params.csr_frm_val is not None else random.choice([1, 2, 3, 4])
40-
setup.append(f"fsrmi {fcsr_frm}")
37+
assert params.csr_frm_val is not None
38+
setup.append(f"fsrmi {params.csr_frm_val}")
4139
check.append("fsrmi 0x0")
4240
return (setup, test, check)

generators/testgen/src/testgen/formatters/types/fr_type.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
# SPDX-License-Identifier: Apache-2.0
66
##################################
77

8-
import random
9-
108
from testgen.asm.helpers import load_float_reg, write_sigupd
119
from testgen.data.params import InstructionParams
1210
from testgen.data.state import TestData
@@ -34,7 +32,7 @@ def format_fr_type(
3432
]
3533
check = [write_sigupd(params.fd, test_data, "float")]
3634
if params.frm == "dyn":
37-
fcsr_frm = params.csr_frm_val if params.csr_frm_val is not None else random.choice([1, 2, 3, 4])
38-
setup.append(f"fsrmi {fcsr_frm}")
35+
assert params.csr_frm_val is not None
36+
setup.append(f"fsrmi {params.csr_frm_val}")
3937
check.append("fsrmi 0x0")
4038
return (setup, test, check)

generators/testgen/src/testgen/formatters/types/x2f_type.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
# SPDX-License-Identifier: Apache-2.0
66
##################################
77

8-
import random
9-
108
from testgen.asm.helpers import load_int_reg, write_sigupd
119
from testgen.data.params import InstructionParams
1210
from testgen.data.state import TestData
@@ -32,7 +30,7 @@ def format_x2f_type(
3230
]
3331
check = [write_sigupd(params.fd, test_data, "float")]
3432
if params.frm == "dyn":
35-
fcsr_frm = params.csr_frm_val if params.csr_frm_val is not None else random.choice([1, 2, 3, 4])
36-
setup.append(f"fsrmi {fcsr_frm}")
33+
assert params.csr_frm_val is not None
34+
setup.append(f"fsrmi {params.csr_frm_val}")
3735
check.append("fsrmi 0x0")
3836
return (setup, test, check)

0 commit comments

Comments
 (0)