# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

vec_cc_test(
  NAME
    softrvv_vwadd
  SRCS
    softrvv_vwadd_test.cpp
  DEPS
    softrvv
)

vec_cc_test(
  NAME
    softrvv_vwaddu
  SRCS
    softrvv_vwaddu_test.cpp
  DEPS
    softrvv
)

vec_cc_test(
  NAME
    softrvv_vwsub
  SRCS
    softrvv_vwsub_test.cpp
  DEPS
    softrvv
)

vec_cc_test(
  NAME
    softrvv_vwsubu
  SRCS
    softrvv_vwsubu_test.cpp
  DEPS
    softrvv
)

vec_cc_test(
  NAME
    softrvv_vor
  SRCS
    softrvv_vor_test.cpp
  DEPS
    softrvv
)

vec_cc_test(
  NAME
    softrvv_vsext
  SRCS
    softrvv_vsext_test.cpp
  DEPS
    softrvv
)

vec_cc_test(
  NAME
    softrvv_vzext
  SRCS
    softrvv_vzext_test.cpp
  DEPS
    softrvv
)

vec_cc_test(
  NAME
    softrvv_vmin
  SRCS
    softrvv_vmin_test.cpp
  DEPS
    softrvv
)

softrvv_vec_cc_generated_test(
  NAME
    vadd
  TEMPLATE
    softrvv_vadd_test.tpl.cpp
)

softrvv_vec_cc_generated_test(
  NAME
    vsub
  TEMPLATE
    softrvv_vsub_test.tpl.cpp
)

softrvv_vec_cc_generated_test(
  NAME
    vmul
  TEMPLATE
    softrvv_vmul_test.tpl.cpp
)

softrvv_vec_cc_generated_test(
  NAME
    vmulh
  TEMPLATE
    softrvv_vmulh_test.tpl.cpp
)

softrvv_vec_cc_generated_test(
  NAME
    vdiv
  TEMPLATE
    softrvv_vdiv_test.tpl.cpp
)

softrvv_vec_cc_generated_test(
  NAME
    vrem
  TEMPLATE
    softrvv_vrem_test.tpl.cpp
)

softrvv_vec_cc_generated_test(
  NAME
    vxor
  TEMPLATE
    softrvv_vxor_test.tpl.cpp
)

softrvv_vec_cc_generated_test(
  NAME
    vsll
  TEMPLATE
    softrvv_vsll_test.tpl.cpp
)

softrvv_vec_cc_generated_test(
  NAME
    vsrl
  TEMPLATE
    softrvv_vsrl_test.tpl.cpp
)

softrvv_vec_cc_generated_test(
  NAME
    vsra
  TEMPLATE
    softrvv_vsra_test.tpl.cpp
)

softrvv_vec_cc_generated_test(
  NAME
    vnsrl
  TEMPLATE
    softrvv_vnsrl_test.tpl.cpp
)

softrvv_vec_cc_generated_test(
  NAME
    vnsra
  TEMPLATE
    softrvv_vnsra_test.tpl.cpp
)

softrvv_vec_cc_generated_test(
  NAME
    vmseq
  TEMPLATE
    softrvv_vmseq_test.tpl.cpp
)

softrvv_vec_cc_generated_test(
  NAME
    vmsne
  TEMPLATE
    softrvv_vmsne_test.tpl.cpp
)

softrvv_vec_cc_generated_test(
  NAME
    vmslt
  TEMPLATE
    softrvv_vmslt_test.tpl.cpp
)

softrvv_vec_cc_generated_test(
  NAME
    vmsle
  TEMPLATE
    softrvv_vmsle_test.tpl.cpp
)

softrvv_vec_cc_generated_test(
  NAME
    vmsgt
  TEMPLATE
    softrvv_vmsgt_test.tpl.cpp
)

softrvv_vec_cc_generated_test(
  NAME
    vmsge
  TEMPLATE
    softrvv_vmsge_test.tpl.cpp
)

softrvv_vec_cc_generated_test(
  NAME
    vredsum
  TEMPLATE
    softrvv_vredsum_test.tpl.cpp
)

vec_cc_test(
  NAME
    softrvv_vmax
  SRCS
    softrvv_vmax_test.cpp
  DEPS
    softrvv
)

vec_cc_test(
  NAME
    softrvv_vmaxu
  SRCS
    softrvv_vmaxu_test.cpp
  DEPS
    softrvv
)

vec_cc_test(
  NAME
    softrvv_vand
  SRCS
    softrvv_vand_test.cpp
  DEPS
    softrvv
)

vec_cc_test(
  NAME
    softrvv_vmv_s_x
  SRCS
    softrvv_vmv_s_x_test.cpp
  DEPS
    softrvv
)

vec_cc_test(
  NAME
    softrvv_vmacc
  SRCS
    softrvv_vmacc_test.cpp
  DEPS
    softrvv
)

vec_cc_test(
  NAME
    softrvv_vmadd_vnmsub
  SRCS
    softrvv_vmadd_vnmsub_test.cpp
  DEPS
    softrvv
)

if(${BUILD_SIMPLIFIED_CORE})
  return()
endif()

vec_cc_test(
  NAME
    vec_disable_test
  SRCS
    vec_disable_test.cpp
  DEPS
    softrvv
)

softrvv_vec_cc_generated_test(
  NAME
    vfadd
  TEMPLATE
    softrvv_vfadd_test.tpl.cpp
)

softrvv_vec_cc_generated_test(
  NAME
    vfsub
  TEMPLATE
    softrvv_vfsub_test.tpl.cpp
)
