| # Copyright lowRISC contributors. |
| # Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| """Helper macros for generating RISC-V compliance test targets.""" |
| |
| load("//rules:opentitan_test.bzl", "opentitan_functest", "verilator_params") |
| |
| def rv_compliance_test(name, arch): |
| test_file = "@riscv-compliance//:riscv-test-suite/{}/src/{}.S".format(arch, name) |
| reference_output = "@riscv-compliance//:riscv-test-suite/{}/references/{}.reference_output".format(arch, name) |
| expected_signature = "{}.expected_signature.S".format(name) |
| |
| native.genrule( |
| name = "{}_expected_signature".format(name), |
| srcs = [reference_output], |
| outs = [expected_signature], |
| cmd = """ |
| echo "kExpectedSignature:" >> $@ |
| echo ".global kExpectedSignature" >> $@ |
| perl -pe 's/([a-fA-F0-9]+)/.word 0x$$1/' \ |
| $(location {}) \ |
| >> $@ |
| """.format(reference_output), |
| ) |
| |
| opentitan_functest( |
| name = name, |
| srcs = [ |
| test_file, |
| expected_signature, |
| "compliance_main.c", |
| "compliance_main.S", |
| ], |
| verilator = verilator_params( |
| timeout = "long", |
| ), |
| linkopts = ["-Wl,--no-relax"], |
| deps = [ |
| "//sw/device/lib/testing/test_framework:ottf_main", |
| "@riscv-compliance//:riscv-test-env", |
| ], |
| ) |
| |
| TESTS = { |
| "rv32i": [ |
| "I-ADD-01", |
| "I-ADDI-01", |
| "I-AND-01", |
| "I-ANDI-01", |
| "I-AUIPC-01", |
| "I-BEQ-01", |
| "I-BGE-01", |
| "I-BGEU-01", |
| "I-BLT-01", |
| "I-BLTU-01", |
| "I-BNE-01", |
| "I-DELAY_SLOTS-01", |
| |
| # TODO(lowrisc/opentitan#11876): Failing for unnknown reasons. |
| #"I-EBREAK-01", |
| "I-ECALL-01", |
| "I-ENDIANESS-01", |
| "I-IO-01", |
| "I-JAL-01", |
| "I-JALR-01", |
| "I-LB-01", |
| "I-LBU-01", |
| "I-LH-01", |
| "I-LHU-01", |
| "I-LUI-01", |
| "I-LW-01", |
| |
| # TODO(lowrisc/ibex#100): These tests are broken due to flaws in |
| # riscv-compliance rather than Ibex/OpenTitan. |
| #"I-MISALIGN_JMP-01", |
| #"I-MISALIGN_LDST-01", |
| |
| # TODO(lowrisc/opentitan#11876): Failing for unnknown reasons. |
| #"I-NOP-01", |
| "I-OR-01", |
| "I-ORI-01", |
| "I-RF_size-01", |
| "I-RF_width-01", |
| # TODO(lowrisc/opentitan#11968): Failing do to sign-extension issue. |
| #"I-RF_x0-01", |
| "I-SB-01", |
| "I-SH-01", |
| "I-SLL-01", |
| "I-SLLI-01", |
| "I-SLT-01", |
| "I-SLTI-01", |
| "I-SLTIU-01", |
| "I-SLTU-01", |
| "I-SRA-01", |
| "I-SRAI-01", |
| "I-SRL-01", |
| "I-SRLI-01", |
| "I-SUB-01", |
| "I-SW-01", |
| "I-XOR-01", |
| "I-XORI-01", |
| ], |
| "rv32im": [ |
| "DIV", |
| "DIVU", |
| "MUL", |
| "MULH", |
| "MULHSU", |
| "MULHU", |
| "REM", |
| "REMU", |
| ], |
| "rv32imc": [ |
| "C-ADD", |
| "C-ADDI", |
| "C-ADDI16SP", |
| "C-ADDI4SPN", |
| "C-AND", |
| "C-ANDI", |
| "C-BEQZ", |
| "C-BNEZ", |
| "C-J", |
| "C-JAL", |
| "C-JALR", |
| "C-JR", |
| "C-LI", |
| "C-LUI", |
| "C-LW", |
| "C-LWSP", |
| "C-MV", |
| "C-OR", |
| "C-SLLI", |
| "C-SRAI", |
| "C-SRLI", |
| "C-SUB", |
| "C-SW", |
| "C-SWSP", |
| "C-XOR", |
| ], |
| "rv32Zicsr": [ |
| "I-CSRRC-01", |
| "I-CSRRCI-01", |
| "I-CSRRS-01", |
| "I-CSRRSI-01", |
| "I-CSRRW-01", |
| "I-CSRRWI-01", |
| ], |
| } |