112771Sqtt2@cornell.edu# See LICENSE for license details.
212771Sqtt2@cornell.edu
312771Sqtt2@cornell.edu#*****************************************************************************
412771Sqtt2@cornell.edu# structural.S
512771Sqtt2@cornell.edu#-----------------------------------------------------------------------------
612771Sqtt2@cornell.edu#
712771Sqtt2@cornell.edu# This test verifies that the FPU correctly obviates structural hazards on its
812771Sqtt2@cornell.edu# writeback port (e.g. fadd followed by fsgnj)
912771Sqtt2@cornell.edu#
1012771Sqtt2@cornell.edu
1112771Sqtt2@cornell.edu#include "riscv_test.h"
1212771Sqtt2@cornell.edu#include "test_macros.h"
1312771Sqtt2@cornell.edu
1412771Sqtt2@cornell.eduRVTEST_RV64UF
1512771Sqtt2@cornell.eduRVTEST_CODE_BEGIN
1612771Sqtt2@cornell.edu
1712771Sqtt2@cornell.eduli x25, 1
1812771Sqtt2@cornell.edu
1912771Sqtt2@cornell.eduli x2, 0x3FF0000000000000
2012771Sqtt2@cornell.eduli x1, 0x3F800000
2112771Sqtt2@cornell.edu
2212771Sqtt2@cornell.edu#define TEST(nops, errcode)     \
2312771Sqtt2@cornell.edu  fmv.d.x  f4, x0    ;\
2412771Sqtt2@cornell.edu  fmv.s.x  f3, x0    ;\
2512771Sqtt2@cornell.edu  fmv.d.x  f2, x2    ;\
2612771Sqtt2@cornell.edu  fmv.s.x  f1, x1    ;\
2712771Sqtt2@cornell.edu  j 1f ;\
2812771Sqtt2@cornell.edu  .align 5        ;\
2912771Sqtt2@cornell.edu1:fmul.d  f4, f2, f2  ;\
3012771Sqtt2@cornell.edu  nops          ;\
3112771Sqtt2@cornell.edu  fsgnj.s f3, f1, f1 ;\
3212771Sqtt2@cornell.edu  fmv.x.d  x4, f4    ;\
3312771Sqtt2@cornell.edu  fmv.x.s  x5, f3    ;\
3412771Sqtt2@cornell.edu  beq     x1, x5, 2f  ;\
3512771Sqtt2@cornell.edu  RVTEST_FAIL ;\
3612771Sqtt2@cornell.edu2:beq     x2, x4, 2f  ;\
3712771Sqtt2@cornell.edu  RVTEST_FAIL; \
3812771Sqtt2@cornell.edu2:fmv.d.x  f2, zero    ;\
3912771Sqtt2@cornell.edu  fmv.s.x  f1, zero    ;\
4012771Sqtt2@cornell.edu
4112771Sqtt2@cornell.eduTEST(;,2)
4212771Sqtt2@cornell.eduTEST(nop,4)
4312771Sqtt2@cornell.eduTEST(nop;nop,6)
4412771Sqtt2@cornell.eduTEST(nop;nop;nop,8)
4512771Sqtt2@cornell.eduTEST(nop;nop;nop;nop,10)
4612771Sqtt2@cornell.eduTEST(nop;nop;nop;nop;nop,12)
4712771Sqtt2@cornell.eduTEST(nop;nop;nop;nop;nop;nop,14)
4812771Sqtt2@cornell.edu
4912771Sqtt2@cornell.eduRVTEST_PASS
5012771Sqtt2@cornell.edu
5112771Sqtt2@cornell.eduRVTEST_CODE_END
5212771Sqtt2@cornell.edu
5312771Sqtt2@cornell.edu  .data
5412771Sqtt2@cornell.eduRVTEST_DATA_BEGIN
5512771Sqtt2@cornell.edu
5612771Sqtt2@cornell.edu  TEST_DATA
5712771Sqtt2@cornell.edu
5812771Sqtt2@cornell.eduRVTEST_DATA_END
59