11689SN/A# See LICENSE for license details.
21689SN/A
31689SN/A#*****************************************************************************
41689SN/A# ld.S
51689SN/A#-----------------------------------------------------------------------------
61689SN/A#
71689SN/A# Test ld instruction.
81689SN/A#
91689SN/A
101689SN/A#include "riscv_test.h"
111689SN/A#include "test_macros.h"
121689SN/A
131689SN/ARVTEST_RV64U
141689SN/ARVTEST_CODE_BEGIN
151689SN/A
161689SN/A  #-------------------------------------------------------------
171689SN/A  # Basic tests
181689SN/A  #-------------------------------------------------------------
191689SN/A
201689SN/A  TEST_LD_OP( 2, ld, 0x00ff00ff00ff00ff, 0,  tdat );
211689SN/A  TEST_LD_OP( 3, ld, 0xff00ff00ff00ff00, 8,  tdat );
221689SN/A  TEST_LD_OP( 4, ld, 0x0ff00ff00ff00ff0, 16, tdat );
231689SN/A  TEST_LD_OP( 5, ld, 0xf00ff00ff00ff00f, 24, tdat );
241689SN/A
251689SN/A  # Test with negative offset
261689SN/A
272665Ssaidi@eecs.umich.edu  TEST_LD_OP( 6, ld, 0x00ff00ff00ff00ff, -24, tdat4 );
282665Ssaidi@eecs.umich.edu  TEST_LD_OP( 7, ld, 0xff00ff00ff00ff00, -16, tdat4 );
291689SN/A  TEST_LD_OP( 8, ld, 0x0ff00ff00ff00ff0, -8,  tdat4 );
301689SN/A  TEST_LD_OP( 9, ld, 0xf00ff00ff00ff00f, 0,   tdat4 );
311060SN/A
321061SN/A  # Test with a negative base
331060SN/A
341060SN/A  TEST_CASE( 10, x5, 0x00ff00ff00ff00ff, \
352292SN/A    la  x1, tdat; \
362292SN/A    addi x1, x1, -32; \
371060SN/A    ld x5, 32(x1); \
381060SN/A  )
391461SN/A
401060SN/A  # Test with unaligned base
411060SN/A
426658Snate@binkert.org  TEST_CASE( 11, x5, 0xff00ff00ff00ff00, \
436658Snate@binkert.org    la  x1, tdat; \
441717SN/A    addi x1, x1, -3; \
451060SN/A    ld x5, 11(x1); \
461060SN/A  )
471060SN/A
482107SN/A  #-------------------------------------------------------------
492107SN/A  # Bypassing tests
501060SN/A  #-------------------------------------------------------------
511060SN/A
521060SN/A  TEST_LD_DEST_BYPASS( 12, 0, ld, 0x0ff00ff00ff00ff0, 8, tdat2 );
531060SN/A  TEST_LD_DEST_BYPASS( 13, 1, ld, 0xf00ff00ff00ff00f, 8, tdat3 );
541060SN/A  TEST_LD_DEST_BYPASS( 14, 2, ld, 0xff00ff00ff00ff00, 8, tdat1 );
551060SN/A
561461SN/A  TEST_LD_SRC1_BYPASS( 15, 0, ld, 0x0ff00ff00ff00ff0, 8, tdat2 );
571060SN/A  TEST_LD_SRC1_BYPASS( 16, 1, ld, 0xf00ff00ff00ff00f, 8, tdat3 );
581060SN/A  TEST_LD_SRC1_BYPASS( 17, 2, ld, 0xff00ff00ff00ff00, 8, tdat1 );
591060SN/A
601060SN/A  #-------------------------------------------------------------
611060SN/A  # Test write-after-write hazard
621060SN/A  #-------------------------------------------------------------
631060SN/A
641461SN/A  TEST_CASE( 18, x2, 2, \
651060SN/A    la  x5, tdat; \
661060SN/A    ld  x2, 0(x5); \
672348SN/A    li  x2, 2; \
682348SN/A  )
691060SN/A
701061SN/A  TEST_CASE( 19, x2, 2, \
711061SN/A    la  x5, tdat; \
721061SN/A    ld  x2, 0(x5); \
732348SN/A    nop; \
742292SN/A    li  x2, 2; \
752292SN/A  )
762292SN/A
772292SN/A  TEST_PASSFAIL
782292SN/A
792292SN/ARVTEST_CODE_END
802292SN/A
812292SN/A  .data
822292SN/ARVTEST_DATA_BEGIN
832292SN/A
842292SN/A  TEST_DATA
852292SN/A
862292SN/Atdat:
872292SN/Atdat1:  .dword 0x00ff00ff00ff00ff
882292SN/Atdat2:  .dword 0xff00ff00ff00ff00
892292SN/Atdat3:  .dword 0x0ff00ff00ff00ff0
902348SN/Atdat4:  .dword 0xf00ff00ff00ff00f
911060SN/A
921060SN/ARVTEST_DATA_END
931060SN/A