rv32g-core

Pipelined, synthesizable, and fabricable RISC-V core in SystemVerilog+Yosys+OpenROAD
Log | Files | Refs | LICENSE

st_ld.S (5066B)


      1 # See LICENSE for license details.
      2 
      3 #*****************************************************************************
      4 # st_ld.S
      5 #-----------------------------------------------------------------------------
      6 #
      7 # Test store and load instructions
      8 #
      9 
     10 #include "riscv_test.h"
     11 #include "test_macros.h"
     12 
     13 RVTEST_RV64U
     14 RVTEST_CODE_BEGIN
     15 
     16   #-------------------------------------------------------------
     17   # Bypassing Tests
     18   #-------------------------------------------------------------
     19 
     20   # Test sb and lb (signed byte)
     21   TEST_ST_LD_BYPASS(2,  lb,  sb, 0xffffffffffffffdd, 0, tdat );
     22   TEST_ST_LD_BYPASS(3,  lb,  sb, 0xffffffffffffffcd, 1, tdat );
     23   TEST_ST_LD_BYPASS(4,  lb,  sb, 0xffffffffffffffcc, 2, tdat );
     24   TEST_ST_LD_BYPASS(5,  lb,  sb, 0xffffffffffffffbc, 3, tdat );
     25   TEST_ST_LD_BYPASS(6,  lb,  sb, 0xffffffffffffffbb, 4, tdat );
     26   TEST_ST_LD_BYPASS(7,  lb,  sb, 0xffffffffffffffab, 5, tdat );
     27 
     28   TEST_ST_LD_BYPASS(8,  lb, sb, 0x33, 0, tdat );
     29   TEST_ST_LD_BYPASS(9,  lb, sb, 0x23, 1, tdat );
     30   TEST_ST_LD_BYPASS(10, lb, sb, 0x22, 2, tdat );
     31   TEST_ST_LD_BYPASS(11, lb, sb, 0x12, 3, tdat );
     32   TEST_ST_LD_BYPASS(12, lb, sb, 0x11, 4, tdat );
     33   TEST_ST_LD_BYPASS(13, lb, sb, 0x01, 5, tdat );
     34 
     35   # Test sb and lbu (unsigned byte)
     36   TEST_ST_LD_BYPASS(14, lbu, sb, 0x33, 0, tdat );
     37   TEST_ST_LD_BYPASS(15, lbu, sb, 0x23, 1, tdat );
     38   TEST_ST_LD_BYPASS(16, lbu, sb, 0x22, 2, tdat );
     39   TEST_ST_LD_BYPASS(17, lbu, sb, 0x12, 3, tdat );
     40   TEST_ST_LD_BYPASS(18, lbu, sb, 0x11, 4, tdat );
     41   TEST_ST_LD_BYPASS(19, lbu, sb, 0x01, 5, tdat );
     42 
     43   # Test sw and lw (signed word)
     44   TEST_ST_LD_BYPASS(20, lw, sw, 0xffffffffaabbccdd, 0,  tdat );
     45   TEST_ST_LD_BYPASS(21, lw, sw, 0xffffffffdaabbccd, 4,  tdat );
     46   TEST_ST_LD_BYPASS(22, lw, sw, 0xffffffffddaabbcc, 8,  tdat );
     47   TEST_ST_LD_BYPASS(23, lw, sw, 0xffffffffcddaabbc, 12, tdat );
     48   TEST_ST_LD_BYPASS(24, lw, sw, 0xffffffffccddaabb, 16, tdat );
     49   TEST_ST_LD_BYPASS(25, lw, sw, 0xffffffffbccddaab, 20, tdat );
     50 
     51   TEST_ST_LD_BYPASS(26, lw, sw, 0x00112233, 0,  tdat );
     52   TEST_ST_LD_BYPASS(27, lw, sw, 0x30011223, 4,  tdat );
     53   TEST_ST_LD_BYPASS(28, lw, sw, 0x33001122, 8,  tdat );
     54   TEST_ST_LD_BYPASS(29, lw, sw, 0x23300112, 12, tdat );
     55   TEST_ST_LD_BYPASS(30, lw, sw, 0x22330011, 16, tdat );
     56   TEST_ST_LD_BYPASS(31, lw, sw, 0x12233001, 20, tdat );
     57 
     58   # Test sh and lh (signed halfword)
     59   TEST_ST_LD_BYPASS(32, lh, sh, 0xffffffffffffccdd, 0, tdat );
     60   TEST_ST_LD_BYPASS(33, lh, sh, 0xffffffffffffbccd, 2, tdat );
     61   TEST_ST_LD_BYPASS(34, lh, sh, 0xffffffffffffbbcc, 4, tdat );
     62   TEST_ST_LD_BYPASS(35, lh, sh, 0xffffffffffffabbc, 6, tdat );
     63   TEST_ST_LD_BYPASS(36, lh, sh, 0xffffffffffffaabb, 8, tdat );
     64   TEST_ST_LD_BYPASS(37, lh, sh, 0xffffffffffffdaab, 10, tdat );
     65 
     66   TEST_ST_LD_BYPASS(38, lh, sh, 0x2233, 0, tdat );
     67   TEST_ST_LD_BYPASS(39, lh, sh, 0x1223, 2, tdat );
     68   TEST_ST_LD_BYPASS(40, lh, sh, 0x1122, 4, tdat );
     69   TEST_ST_LD_BYPASS(41, lh, sh, 0x0112, 6, tdat );
     70   TEST_ST_LD_BYPASS(42, lh, sh, 0x0011, 8, tdat );
     71   TEST_ST_LD_BYPASS(43, lh, sh, 0x3001, 10, tdat );
     72 
     73   # Test sh and lhu (unsigned halfword)
     74   TEST_ST_LD_BYPASS(44, lhu, sh, 0x2233, 0, tdat );
     75   TEST_ST_LD_BYPASS(45, lhu, sh, 0x1223, 2, tdat );
     76   TEST_ST_LD_BYPASS(46, lhu, sh, 0x1122, 4, tdat );
     77   TEST_ST_LD_BYPASS(47, lhu, sh, 0x0112, 6, tdat );
     78   TEST_ST_LD_BYPASS(48, lhu, sh, 0x0011, 8, tdat );
     79   TEST_ST_LD_BYPASS(49, lhu, sh, 0x3001, 10, tdat );
     80 
     81   # RV64-specific tests for ld, sd, and lwu
     82 #if __riscv_xlen == 64
     83   # Test sd and ld (doubleword)
     84   TEST_ST_LD_BYPASS(50, ld, sd, 0x0011223344556677, 0,  tdat );
     85   TEST_ST_LD_BYPASS(51, ld, sd, 0x1122334455667788, 8,  tdat );
     86   TEST_ST_LD_BYPASS(52, ld, sd, 0x2233445566778899, 16, tdat );
     87   TEST_ST_LD_BYPASS(53, ld, sd, 0xabbccdd, 0,  tdat );
     88   TEST_ST_LD_BYPASS(54, ld, sd, 0xaabbccd, 8,  tdat );
     89   TEST_ST_LD_BYPASS(55, ld, sd, 0xdaabbcc, 16, tdat );
     90   TEST_ST_LD_BYPASS(56, ld, sd, 0xddaabbc, 24, tdat );
     91   TEST_ST_LD_BYPASS(57, ld, sd, 0xcddaabb, 32, tdat );
     92   TEST_ST_LD_BYPASS(58, ld, sd, 0xccddaab, 40, tdat );
     93 
     94   TEST_ST_LD_BYPASS(59, ld, sd, 0x00112233, 0,  tdat );
     95   TEST_ST_LD_BYPASS(60, ld, sd, 0x30011223, 8,  tdat );
     96   TEST_ST_LD_BYPASS(61, ld, sd, 0x33001122, 16, tdat );
     97   TEST_ST_LD_BYPASS(62, ld, sd, 0x23300112, 24, tdat );
     98   TEST_ST_LD_BYPASS(63, ld, sd, 0x22330011, 32, tdat );
     99   TEST_ST_LD_BYPASS(64, ld, sd, 0x12233001, 40, tdat );
    100 
    101   # Test sw and lwu (unsigned word)
    102   TEST_ST_LD_BYPASS(65, lwu, sw, 0x00112233, 0,  tdat );
    103   TEST_ST_LD_BYPASS(66, lwu, sw, 0x33001122, 8,  tdat );
    104   TEST_ST_LD_BYPASS(67, lwu, sw, 0x30011223, 4,  tdat );
    105   TEST_ST_LD_BYPASS(68, lwu, sw, 0x23300112, 12, tdat );
    106   TEST_ST_LD_BYPASS(69, lwu, sw, 0x22330011, 16, tdat );
    107   TEST_ST_LD_BYPASS(70, lwu, sw, 0x12233001, 20, tdat );
    108 #endif
    109 
    110   li a0, 0xef         # Immediate load for manual store test
    111   la a1, tdat         # Load address of tdat
    112   sb a0, 3(a1)        # Store byte at offset 3 of tdat
    113   lb a2, 3(a1)        # Load byte back for verification
    114 
    115   TEST_PASSFAIL
    116 
    117 RVTEST_CODE_END
    118 
    119   .data
    120 RVTEST_DATA_BEGIN
    121 
    122   TEST_DATA
    123 
    124 tdat:
    125     .rept 20
    126     .word 0xdeadbeef
    127     .endr
    128 
    129 
    130 RVTEST_DATA_END