# 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 = [
            "@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",
        "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",
    ],
}
