112771Sqtt2@cornell.edu# See LICENSE for license details.
212771Sqtt2@cornell.edu
312771Sqtt2@cornell.edu#*****************************************************************************
412771Sqtt2@cornell.edu# lw.S
512771Sqtt2@cornell.edu#-----------------------------------------------------------------------------
612771Sqtt2@cornell.edu#
712771Sqtt2@cornell.edu# Test lw instruction.
812771Sqtt2@cornell.edu#
912771Sqtt2@cornell.edu
1012771Sqtt2@cornell.edu#include "riscv_test.h"
1112771Sqtt2@cornell.edu#include "test_macros.h"
1212771Sqtt2@cornell.edu
1312771Sqtt2@cornell.eduRVTEST_RV64U
1412771Sqtt2@cornell.eduRVTEST_CODE_BEGIN
1512771Sqtt2@cornell.edu
1612771Sqtt2@cornell.edu  #-------------------------------------------------------------
1712771Sqtt2@cornell.edu  # Basic tests
1812771Sqtt2@cornell.edu  #-------------------------------------------------------------
1912771Sqtt2@cornell.edu
2012771Sqtt2@cornell.edu  TEST_LD_OP( 2, lw, 0x0000000000ff00ff, 0,  tdat );
2112771Sqtt2@cornell.edu  TEST_LD_OP( 3, lw, 0xffffffffff00ff00, 4,  tdat );
2212771Sqtt2@cornell.edu  TEST_LD_OP( 4, lw, 0x000000000ff00ff0, 8,  tdat );
2312771Sqtt2@cornell.edu  TEST_LD_OP( 5, lw, 0xfffffffff00ff00f, 12, tdat );
2412771Sqtt2@cornell.edu
2512771Sqtt2@cornell.edu  # Test with negative offset
2612771Sqtt2@cornell.edu
2712771Sqtt2@cornell.edu  TEST_LD_OP( 6, lw, 0x0000000000ff00ff, -12, tdat4 );
2812771Sqtt2@cornell.edu  TEST_LD_OP( 7, lw, 0xffffffffff00ff00, -8,  tdat4 );
2912771Sqtt2@cornell.edu  TEST_LD_OP( 8, lw, 0x000000000ff00ff0, -4,  tdat4 );
3012771Sqtt2@cornell.edu  TEST_LD_OP( 9, lw, 0xfffffffff00ff00f, 0,   tdat4 );
3112771Sqtt2@cornell.edu
3212771Sqtt2@cornell.edu  # Test with a negative base
3312771Sqtt2@cornell.edu
3412771Sqtt2@cornell.edu  TEST_CASE( 10, x5, 0x0000000000ff00ff, \
3512771Sqtt2@cornell.edu    la  x1, tdat; \
3612771Sqtt2@cornell.edu    addi x1, x1, -32; \
3712771Sqtt2@cornell.edu    lw x5, 32(x1); \
3812771Sqtt2@cornell.edu  )
3912771Sqtt2@cornell.edu
4012771Sqtt2@cornell.edu  # Test with unaligned base
4112771Sqtt2@cornell.edu
4212771Sqtt2@cornell.edu  TEST_CASE( 11, x5, 0xffffffffff00ff00, \
4312771Sqtt2@cornell.edu    la  x1, tdat; \
4412771Sqtt2@cornell.edu    addi x1, x1, -3; \
4512771Sqtt2@cornell.edu    lw x5, 7(x1); \
4612771Sqtt2@cornell.edu  )
4712771Sqtt2@cornell.edu
4812771Sqtt2@cornell.edu  #-------------------------------------------------------------
4912771Sqtt2@cornell.edu  # Bypassing tests
5012771Sqtt2@cornell.edu  #-------------------------------------------------------------
5112771Sqtt2@cornell.edu
5212771Sqtt2@cornell.edu  TEST_LD_DEST_BYPASS( 12, 0, lw, 0x000000000ff00ff0, 4, tdat2 );
5312771Sqtt2@cornell.edu  TEST_LD_DEST_BYPASS( 13, 1, lw, 0xfffffffff00ff00f, 4, tdat3 );
5412771Sqtt2@cornell.edu  TEST_LD_DEST_BYPASS( 14, 2, lw, 0xffffffffff00ff00, 4, tdat1 );
5512771Sqtt2@cornell.edu
5612771Sqtt2@cornell.edu  TEST_LD_SRC1_BYPASS( 15, 0, lw, 0x000000000ff00ff0, 4, tdat2 );
5712771Sqtt2@cornell.edu  TEST_LD_SRC1_BYPASS( 16, 1, lw, 0xfffffffff00ff00f, 4, tdat3 );
5812771Sqtt2@cornell.edu  TEST_LD_SRC1_BYPASS( 17, 2, lw, 0xffffffffff00ff00, 4, tdat1 );
5912771Sqtt2@cornell.edu
6012771Sqtt2@cornell.edu  #-------------------------------------------------------------
6112771Sqtt2@cornell.edu  # Test write-after-write hazard
6212771Sqtt2@cornell.edu  #-------------------------------------------------------------
6312771Sqtt2@cornell.edu
6412771Sqtt2@cornell.edu  TEST_CASE( 18, x2, 2, \
6512771Sqtt2@cornell.edu    la  x5, tdat; \
6612771Sqtt2@cornell.edu    lw  x2, 0(x5); \
6712771Sqtt2@cornell.edu    li  x2, 2; \
6812771Sqtt2@cornell.edu  )
6912771Sqtt2@cornell.edu
7012771Sqtt2@cornell.edu  TEST_CASE( 19, x2, 2, \
7112771Sqtt2@cornell.edu    la  x5, tdat; \
7212771Sqtt2@cornell.edu    lw  x2, 0(x5); \
7312771Sqtt2@cornell.edu    nop; \
7412771Sqtt2@cornell.edu    li  x2, 2; \
7512771Sqtt2@cornell.edu  )
7612771Sqtt2@cornell.edu
7712771Sqtt2@cornell.edu  TEST_PASSFAIL
7812771Sqtt2@cornell.edu
7912771Sqtt2@cornell.eduRVTEST_CODE_END
8012771Sqtt2@cornell.edu
8112771Sqtt2@cornell.edu  .data
8212771Sqtt2@cornell.eduRVTEST_DATA_BEGIN
8312771Sqtt2@cornell.edu
8412771Sqtt2@cornell.edu  TEST_DATA
8512771Sqtt2@cornell.edu
8612771Sqtt2@cornell.edutdat:
8712771Sqtt2@cornell.edutdat1:  .word 0x00ff00ff
8812771Sqtt2@cornell.edutdat2:  .word 0xff00ff00
8912771Sqtt2@cornell.edutdat3:  .word 0x0ff00ff0
9012771Sqtt2@cornell.edutdat4:  .word 0xf00ff00f
9112771Sqtt2@cornell.edu
9212771Sqtt2@cornell.eduRVTEST_DATA_END
93