# See LICENSE for license details. #***************************************************************************** # structural.S #----------------------------------------------------------------------------- # # This test verifies that the FPU correctly obviates structural hazards on its # writeback port (e.g. fadd followed by fsgnj) # #include "riscv_test.h" #include "test_macros.h" RVTEST_RV64UF RVTEST_CODE_BEGIN li x12, 1 li x2, 0x3FF0000000000000 li x1, 0x3F800000 #define TEST(testnum, nops) \ test_ ## testnum: \ li TESTNUM, testnum; \ fmv.d.x f4, x0 ;\ fmv.s.x f3, x0 ;\ fmv.d.x f2, x2 ;\ fmv.s.x f1, x1 ;\ j 1f ;\ .align 5 ;\ 1:fmul.d f4, f2, f2 ;\ nops ;\ fsgnj.s f3, f1, f1 ;\ fmv.x.d x4, f4 ;\ fmv.x.s x5, f3 ;\ beq x1, x5, 2f ;\ j fail;\ 2:beq x2, x4, 2f ;\ j fail; \ 2:fmv.d.x f2, zero ;\ fmv.s.x f1, zero ;\ TEST(1,;) TEST(2,nop) TEST(3,nop;nop) TEST(4,nop;nop;nop) TEST(5,nop;nop;nop;nop) TEST(6,nop;nop;nop;nop;nop) TEST(7,nop;nop;nop;nop;nop;nop) TEST_PASSFAIL RVTEST_CODE_END .data RVTEST_DATA_BEGIN TEST_DATA RVTEST_DATA_END