61 lines
1.1 KiB
ArmAsm
61 lines
1.1 KiB
ArmAsm
|
# 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
|